From 1d03db80d5038fcd5fc824fa6ba358218244a561 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Wed, 22 Apr 2009 02:41:38 +0000 Subject: [PATCH 001/512] branch from 2.5 for aligorith From ab3339f3801dcaedff8d4758c40c612cc65e86c9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 3 May 2009 11:46:57 +0000 Subject: [PATCH 002/512] NLA SoC: Initial commit of changes for the way NLA is evaluated * Recoded the flags for NLA-Strips to take into account the new design directions * Modified parts of the evaluation pipeline to reflect this --- source/blender/blenkernel/intern/action.c | 32 +-- source/blender/blenkernel/intern/anim_sys.c | 212 ++++++++++++++------ source/blender/makesdna/DNA_anim_types.h | 122 +++++------ 3 files changed, 220 insertions(+), 146 deletions(-) diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index d54bc749b71..f2e3583c87b 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -717,45 +717,25 @@ static bActionStrip *get_active_strip(Object *ob) return NULL; } -/* non clipped mapping of strip */ -static float get_actionstrip_frame(bActionStrip *strip, float cframe, int invert) -{ - float length, actlength, repeat, scale; - - if (strip->repeat == 0.0f) strip->repeat = 1.0f; - repeat = (strip->flag & ACTSTRIP_USESTRIDE) ? (1.0f) : (strip->repeat); - - if (strip->scale == 0.0f) strip->scale= 1.0f; - scale = (float)fabs(strip->scale); /* scale must be positive (for now) */ - - actlength = strip->actend-strip->actstart; - if (actlength == 0.0f) actlength = 1.0f; - length = repeat * scale * actlength; - - /* invert = convert action-strip time to global time */ - if (invert) - return length*(cframe - strip->actstart)/(repeat*actlength) + strip->start; - else - return repeat*actlength*(cframe - strip->start)/length + strip->actstart; -} - /* if the conditions match, it converts current time to strip time */ +// TODO: change this adt float get_action_frame(Object *ob, float cframe) { bActionStrip *strip= get_active_strip(ob); - if(strip) - return get_actionstrip_frame(strip, cframe, 0); + //if(strip) + // return get_actionstrip_frame(strip, cframe, 0); return cframe; } /* inverted, strip time to current time */ +// TODO: change this to adt float get_action_frame_inv(Object *ob, float cframe) { bActionStrip *strip= get_active_strip(ob); - if(strip) - return get_actionstrip_frame(strip, cframe, 1); + //if(strip) + // return get_actionstrip_frame(strip, cframe, 1); return cframe; } diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 30dcb383ef6..2840e3f5d45 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "MEM_guardedalloc.h" @@ -544,19 +545,17 @@ typedef struct NlaEvalStrip { struct NlaEvalStrip *next, *prev; NlaTrack *track; /* track that this strip belongs to */ - NlaStrip *strip; /* strip that's being used */ - NlaStrip *sblend; /* strip that's being blended towards (if applicable) */ + NlaStrip *strip; /* strip that's being used */ short track_index; /* the index of the track within the list */ short strip_mode; /* which end of the strip are we looking at */ } NlaEvalStrip; -/* bNlaEvalStrip->strip_mode */ +/* NlaEvalStrip->strip_mode */ enum { NES_TIME_BEFORE = -1, NES_TIME_WITHIN, NES_TIME_AFTER, - NES_TIME_AFTER_BLEND } eNlaEvalStrip_StripMode; @@ -565,8 +564,9 @@ enum { typedef struct NlaEvalChannel { struct NlaEvalChannel *next, *prev; - char *path; /* ready-to-use path (i.e. remapped already) */ - int array_index; /* if applicable... */ + PointerRNA *ptr; /* pointer to struct containing property to use */ + PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */ + int index; /* array index (where applicable) */ float value; /* value of this channel */ } NlaEvalChannel; @@ -574,24 +574,98 @@ typedef struct NlaEvalChannel { /* ---------------------- */ -/* evaluate the F-Curves controlling settings for the NLA-strips (currently, not relinkable) */ -static void nlastrip_evaluate_fcurves (NlaStrip *strip, float ctime) +/* non clipped mapping for strip-time <-> global time + * invert = convert action-strip time to global time + */ +static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) { - //PointerRNA actstrip_ptr; - //FCurve *fcu; + float length, actlength, repeat, scale; - /* create RNA-pointer needed to set values */ - //RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &actstrip_ptr); + /* get number of repeats */ + if (strip->repeat == 0.0f) strip->repeat = 1.0f; + repeat = strip->repeat; - /* execute these settings as per normal */ - //animsys_evaluate_fcurves(&actstrip_ptr, &strip->fcurves, NULL, ctime); + /* scaling */ + if (strip->scale == 0.0f) strip->scale= 1.0f; + scale = (float)fabs(strip->scale); /* scale must be positive - we've got a special flag for reversing */ + + /* length of referenced action */ + actlength = strip->actend-strip->actstart; + if (actlength == 0.0f) actlength = 1.0f; + + /* length of strip */ + length = repeat * scale * actlength; + + /* reversed = play strip backwards */ + if (strip->flag & NLASTRIP_FLAG_REVERSE) { + // FIXME: verify these + /* invert = convert action-strip time to global time */ + if (invert) + return length*(strip->actend - cframe)/(repeat*actlength) + strip->start; + else + return strip->actend - repeat*actlength*(cframe - strip->start)/length; + } + else { + /* invert = convert action-strip time to global time */ + if (invert) + return length*(cframe - strip->actstart)/(repeat*actlength) + strip->start; + else + return repeat*actlength*(cframe - strip->start)/length + strip->actstart; + } +} + +/* calculate influence of strip based for given frame based on blendin/out values */ +static float nlastrip_get_influence (NlaStrip *strip, float cframe) +{ + /* sanity checks - normalise the blendin/out values? */ + strip->blendin= (float)fabs(strip->blendin); + strip->blendout= (float)fabs(strip->blendout); + + /* result depends on where frame is in respect to blendin/out values */ + // TODO: are the fabs() tests needed here? + if (IS_EQ(strip->blendin, 0)==0 && (cframe <= (strip->start + strip->blendin))) { + /* there is some blend-in */ + return (float)fabs(cframe - strip->start) / (strip->blendin); + } + else if (IS_EQ(strip->blendout, 0)==0 && (cframe >= (strip->end - strip->blendout))) { + /* there is some blend-out */ + return (float)fabs(strip->end - cframe) / (strip->blendout); + } + else { + /* in the middle of the strip, we should be full strength */ + return 1.0f; + } +} + +/* evaluate the evaluation time and influence for the strip, storing the results in the strip */ +void nlastrip_evaluate_controls (NlaStrip *strip, float cframe) +{ + /* firstly, analytically generate values for influence and time (if applicable) */ + if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0) + strip->strip_time= nlastrip_get_frame(strip, cframe, 1); /* last arg '1' means current time to 'strip'/action time */ + if ((strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) == 0) + strip->influence= nlastrip_get_influence(strip, cframe); + + /* now strip's evaluate F-Curves for these settings (if applicable) */ + if (strip->fcurves.first) { +#if 0 + PointerRNA strip_ptr; + FCurve *fcu; + + /* create RNA-pointer needed to set values */ + RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); + + /* execute these settings as per normal */ + animsys_evaluate_fcurves(&actstrip_ptr, &strip->fcurves, NULL, ctime); +#endif + } } -/* gets the strip active at the current time for a track */ +/* gets the strip active at the current time for a track for evaluation purposes */ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index, float ctime) { - NlaStrip *strip, *astrip=NULL, *bstrip=NULL; + NlaStrip *strip, *estrip=NULL; NlaEvalStrip *nes; short side= 0; @@ -601,71 +675,91 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* loop over strips, checking if they fall within the range */ for (strip= nlt->strips.first; strip; strip= strip->next) { - /* only consider if: - * - current time occurs within strip's extents - * - current time occurs before strip (if it is the first) - * - current time occurs after strip (if hold is on) - * - current time occurs between strips (1st of those isn't holding) - blend! - */ + /* check if current time occurs within this strip */ if (IN_RANGE(ctime, strip->start, strip->end)) { - astrip= strip; + /* this strip is active, so try to use it */ + estrip= strip; side= NES_TIME_WITHIN; break; } - else if (ctime < strip->start) { + + /* if time occurred before current strip... */ + if (ctime < strip->start) { if (strip == nlt->strips.first) { - astrip= strip; + /* before first strip - only try to use it if it extends backwards in time too */ + if (strip->extendmode == NLASTRIP_EXTEND_HOLD) + estrip= strip; + + /* side is 'before' regardless of whether there's a useful strip */ side= NES_TIME_BEFORE; - break; } else { - astrip= strip->prev; + /* before next strip - previous strip has ended, but next hasn't begun, + * so blending mode depends on whether strip is being held or not... + * - only occurs when no transition strip added, otherwise the transition would have + * been picked up above... + */ + strip= strip->prev; - if (astrip->flag & NLASTRIP_HOLDLASTFRAME) { - side= NES_TIME_AFTER; - break; - } - else { - bstrip= strip; - side= NES_TIME_AFTER_BLEND; - break; - } + if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) + estrip= strip; + side= NES_TIME_AFTER; } + break; + } + + /* if time occurred after current strip... */ + if (ctime > strip->end) { + /* only if this is the last strip should we do anything, and only if that is being held */ + if (strip == nlt->strips.last) { + if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) + estrip= strip; + + side= NES_TIME_AFTER; + break; + } + + /* otherwise, skip... as the 'before' case will catch it more elegantly! */ } } - /* check if strip has been found (and whether it has data worth considering) */ - if (ELEM(NULL, astrip, astrip->act)) - return; - if (astrip->flag & NLASTRIP_MUTE) + /* check if a valid strip was found + * - must not be muted (i.e. will have contribution + */ + if ((estrip == NULL) || (estrip->flag & NLASTRIP_FLAG_MUTED)) return; - /* check if blending between strips */ - if (side == NES_TIME_AFTER_BLEND) { - /* blending between strips... so calculate influence+act_time of both */ - nlastrip_evaluate_fcurves(astrip, ctime); - nlastrip_evaluate_fcurves(bstrip, ctime); + /* evaluate strip's evaluation controls + * - skip if no influence (i.e. same effect as muting the strip) + * - negative influence is not supported yet... how would that be defined? + */ + // TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on... + nlastrip_evaluate_controls(estrip, ctime); + if (estrip->influence <= 0.0f) + return; - if ((astrip->influence <= 0.0f) && (bstrip->influence <= 0.0f)) - return; - } - else { - /* calculate/set the influence+act_time of this strip - don't consider if 0 influence */ - nlastrip_evaluate_fcurves(astrip, ctime); - - if (astrip->influence <= 0.0f) - return; + /* check if strip has valid data to evaluate */ + switch (estrip->type) { + case NLASTRIP_TYPE_CLIP: + /* clip must have some action to evaluate */ + if (estrip->act == NULL) + return; + break; + case NLASTRIP_TYPE_TRANSITION: + /* there must be strips to transition from and to (i.e. prev and next required) */ + // TODO: what happens about cross-track transitions? + if (ELEM(NULL, estrip->prev, estrip->next)) + return; + break; } - - /* allocate new eval-strip for this strip + add to stack */ + /* add to list of strips we need to evaluate */ nes= MEM_callocN(sizeof(NlaEvalStrip), "NlaEvalStrip"); nes->track= nlt; - nes->strip= astrip; - nes->sblend= bstrip; - nes->track_index= index; + nes->strip= estrip; nes->strip_mode= side; + nes->track_index= index; BLI_addtail(list, nes); } diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index d015d703309..7ca3110912d 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -360,26 +360,13 @@ typedef struct AnimMapper { /* ************************************************ */ /* NLA - Non-Linear Animation */ -// TODO: the concepts here still need to be refined to solve any unresolved items - -/* NLA Modifiers ---------------------------------- */ - -/* These differ from F-Curve modifiers, as although F-Curve modifiers also operate on a - * per-channel basis too (in general), they are part of the animation data itself, which - * means that their effects are inherited by all of their users. In order to counteract this, - * the modifiers here should be used to provide variation to pre-created motions only. - */ /* NLA Strips ------------------------------------- */ /* NLA Strip (strip) * * A NLA Strip is a container for the reuse of Action data, defining parameters - * to control the remapping of the Action data to some destination. Actions being - * referenced by NLA-Strips SHOULD-NOT be editable, unless they were created in such - * a way that results in very little mapping distortion (i.e. for layered animation only, - * opposed to prebuilt 'blocks' which are quickly dumped into the NLA for crappymatic machima-type - * stuff) + * to control the remapping of the Action data to some destination. */ typedef struct NlaStrip { struct NlaStrip *next, *prev; @@ -387,58 +374,75 @@ typedef struct NlaStrip { bAction *act; /* Action that is referenced by this strip */ AnimMapper *remap; /* Remapping info this strip (for tweaking correspondance of action with context) */ - ListBase modifiers; /* NLA Modifiers */ - - ListBase fcurves; /* F-Curves for controlling this strip's influence and timing */ + ListBase fcurves; /* F-Curves for controlling this strip's influence and timing */ // TODO: move out? + ListBase modifiers; /* F-Curve modifiers to be applied to the entire strip's referenced F-Curves */ float influence; /* Influence of strip */ - float act_time; /* Current 'time' within action being used */ + float strip_time; /* Current 'time' within action being used (automatically evaluated, but can be overridden) */ float start, end; /* extents of the strip */ float actstart, actend; /* range of the action to use */ - float repeat; /* The number of times to repeat the action range (only when no F-Curves) */ - float scale; /* The amount the action range is scaled by (only when no F-Curves) */ + float repeat; /* The number of times to repeat the action range (only when no F-Curves) */ + float scale; /* The amount the action range is scaled by (only when no F-Curves) */ float blendin, blendout; /* strip blending length (only used when there are no F-Curves) */ - int blendmode; /* strip blending mode */ + short blendmode; /* strip blending mode (layer-based mixing) */ + short extendmode; /* strip extrapolation mode (time-based mixing) */ - int flag; /* settings */ - - // umm... old unused cruft? - int stride_axis; /* axis for stridebone stuff - 0=x, 1=y, 2=z */ - int pad; - - float actoffs; /* Offset within action, for cycles and striding (only set for ACT_USESTRIDE) */ - float stridelen; /* The stridelength (considered when flag & ACT_USESTRIDE) */ - - char stridechannel[32]; /* Instead of stridelen, it uses an action channel */ - char offs_bone[32]; /* if repeat, use this bone/channel for defining offset */ + short flag; /* settings */ + short type; /* type of NLA strip */ } NlaStrip; /* NLA Strip Blending Mode */ enum { - NLASTRIPMODE_BLEND = 0, - NLASTRIPMODE_ADD, - NLASTRIPMODE_SUBTRACT, -} eActStrip_Mode; + NLASTRIP_MODE_BLEND = 0, + NLASTRIP_MODE_ADD, + NLASTRIP_MODE_SUBTRACT, + NLASTRIP_MODE_MULTIPLY, +} eNlaStrip_Blend_Mode; + +/* NLA Strip Extrpolation Mode */ +enum { + /* extend before first frame if no previous strips in track, and always hold+extend last frame */ + NLASTRIP_EXTEND_HOLD = 0, + /* only hold+extend last frame */ + NLASTRIP_EXTEND_HOLD_FORWARD, + /* don't contribute at all */ + NLASTRIP_EXTEND_NOTHING, +} eNlaStrip_Extrapolate_Mode; /* NLA Strip Settings */ -// TODO: check on which of these are still useful... enum { - NLASTRIP_SELECT = (1<<0), - NLASTRIP_USESTRIDE = (1<<1), - NLASTRIP_BLENDTONEXT = (1<<2), /* Not implemented. Is not used anywhere */ - NLASTRIP_HOLDLASTFRAME = (1<<3), - NLASTRIP_ACTIVE = (1<<4), - NLASTRIP_LOCK_ACTION = (1<<5), - NLASTRIP_MUTE = (1<<6), - NLASTRIP_REVERSE = (1<<7), /* This has yet to be implemented. To indicate that a strip should be played backwards */ - NLASTRIP_CYCLIC_USEX = (1<<8), - NLASTRIP_CYCLIC_USEY = (1<<9), - NLASTRIP_CYCLIC_USEZ = (1<<10), - NLASTRIP_AUTO_BLENDS = (1<<11), - NLASTRIP_TWEAK = (1<<12), /* This strip is a tweaking strip (only set if owner track is a tweak track) */ -} eActionStrip_Flag; + /* UI selection flags */ + /* NLA strip is the active one in the track (also indicates if strip is being tweaked) */ + NLASTRIP_FLAG_ACTIVE = (1<<0), + /* NLA strip is selected for editing */ + NLASTRIP_FLAG_SELECT = (1<<1), +// NLASTRIP_FLAG_SELECT_L = (1<<2), // left handle selected +// NLASTRIP_FLAG_SELECT_R = (1<<3), // right handle selected + + /* controls driven by local F-Curves */ + /* strip influence is controlled by local F-Curve */ + NLASTRIP_FLAG_USR_INFLUENCE = (1<<5), + NLASTRIP_FLAG_USR_TIME = (1<<6), + + /* playback flags (may be overriden by F-Curves) */ + /* NLA strip blendin/out values are set automatically based on overlaps */ + NLASTRIP_FLAG_AUTO_BLENDS = (1<<10), + /* NLA strip is played back in reverse order */ + NLASTRIP_FLAG_REVERSE = (1<<11), + /* NLA strip is muted (i.e. doesn't contribute in any way) */ + // TODO: this overlaps a lot with the functionality in track + NLASTRIP_FLAG_MUTED = (1<<12), +} eNlaStrip_Flag; + +/* NLA Strip Type */ +enum { + /* 'clip' - references an Action */ + NLASTRIP_TYPE_CLIP = 0, + /* 'transition' - blends between the adjacent strips */ + NLASTRIP_TYPE_TRANSITION, +} eNlaStrip_Type; /* NLA Tracks ------------------------------------- */ @@ -457,14 +461,12 @@ typedef struct NlaTrack { int flag; /* settings for this track */ int index; /* index of the track in the stack (NOTE: not really useful, but we need a pad var anyways!) */ - char info[64]; /* short user-description of this track */ + char name[64]; /* short user-description of this track */ } NlaTrack; /* settings for track */ enum { - /* track is the one that settings can be modified on (doesn't indicate - * that it's for 'tweaking' though) - */ + /* track is the one that settings can be modified on, also indicates if track is being 'tweaked' */ NLATRACK_ACTIVE = (1<<0), /* track is selected in UI for relevant editing operations */ NLATRACK_SELECTED = (1<<1), @@ -474,10 +476,6 @@ enum { NLATRACK_SOLO = (1<<3), /* track's settings (and strips) cannot be edited (to guard against unwanted changes) */ NLATRACK_PROTECTED = (1<<4), - /* strip is the 'last' one that should be evaluated, as the active action - * is being used to tweak the animation of the strips up to here - */ - NLATRACK_TWEAK = (1<<5), } eNlaTrack_Flag; @@ -650,11 +648,13 @@ enum { ADT_NLA_SOLO_TRACK = (1<<0), /* don't use NLA */ ADT_NLA_EVAL_OFF = (1<<1), - /* don't execute drivers */ - ADT_DRIVERS_DISABLED = (1<<2), + /* NLA is being 'tweaked' (i.e. in EditMode) */ + ADT_NLA_EDIT_ON = (1<<2), /* drivers expanded in UI */ ADT_DRIVERS_COLLAPSED = (1<<10), + /* don't execute drivers */ + ADT_DRIVERS_DISABLED = (1<<11), } eAnimData_Flag; /* Animation Data recalculation settings (to be set by depsgraph) */ From e295cfd4d5e9adcd006cbab95f84eb93a73ea6bc Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 15 May 2009 13:23:03 +0000 Subject: [PATCH 003/512] NLA Branch: Setting up evaluation system for action strips * Refactored F-Curve Modifier stack evaluation into functions which can be reused for F-Curve Modifiers on NLA-Strips * Started setting up temporary accumulation buffer system for use when evaluating strips --- source/blender/blenkernel/BKE_fcurve.h | 6 +- source/blender/blenkernel/intern/anim_sys.c | 114 ++++++++++++-- source/blender/blenkernel/intern/fcurve.c | 156 ++++++++++++-------- 3 files changed, 203 insertions(+), 73 deletions(-) diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index 9b8a2990fe5..7058b9d236a 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -108,11 +108,15 @@ struct FModifier *fcurve_add_modifier(struct FCurve *fcu, int type); void fcurve_copy_modifiers(ListBase *dst, ListBase *src); void fcurve_remove_modifier(struct FCurve *fcu, struct FModifier *fcm); void fcurve_free_modifiers(struct FCurve *fcu); -void fcurve_bake_modifiers(struct FCurve *fcu, int start, int end); struct FModifier *fcurve_find_active_modifier(struct FCurve *fcu); void fcurve_set_active_modifier(struct FCurve *fcu, struct FModifier *fcm); +float evaluate_time_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float cvalue, float evaltime); +void evaluate_value_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float *cvalue, float evaltime); + +void fcurve_bake_modifiers(struct FCurve *fcu, int start, int end); + /* ************** F-Curves API ******************** */ /* -------- Data Managemnt -------- */ diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 2840e3f5d45..5a4a2d91469 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "MEM_guardedalloc.h" @@ -564,7 +565,7 @@ enum { typedef struct NlaEvalChannel { struct NlaEvalChannel *next, *prev; - PointerRNA *ptr; /* pointer to struct containing property to use */ + PointerRNA ptr; /* pointer to struct containing property to use */ PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */ int index; /* array index (where applicable) */ @@ -638,13 +639,13 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe) } /* evaluate the evaluation time and influence for the strip, storing the results in the strip */ -void nlastrip_evaluate_controls (NlaStrip *strip, float cframe) +void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) { /* firstly, analytically generate values for influence and time (if applicable) */ if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0) - strip->strip_time= nlastrip_get_frame(strip, cframe, 1); /* last arg '1' means current time to 'strip'/action time */ + strip->strip_time= nlastrip_get_frame(strip, ctime, 1); /* last arg '1' means current time to 'strip'/action time */ if ((strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) == 0) - strip->influence= nlastrip_get_influence(strip, cframe); + strip->influence= nlastrip_get_influence(strip, ctime); /* now strip's evaluate F-Curves for these settings (if applicable) */ if (strip->fcurves.first) { @@ -766,13 +767,104 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* ---------------------- */ -/* evaluates the given evaluation strip */ -// FIXME: will we need the evaluation cache table set up to blend stuff in? -// TODO: only evaluate here, but flush in one go using the accumulated channels at end... -static void nlastrip_ctime_evaluate (ListBase *channels, NlaEvalStrip *nes, float ctime) +/* verify that an appropriate NlaEvalChannel for this F-Curve */ +static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes, FCurve *fcu, short *newChan) { - // 1. (in old code) was to extract 'IPO-channels' from actions - // 2. blend between the 'accumulated' data, and the new data + NlaEvalChannel *nec= NULL; + NlaStrip *strip= nes->strip; + PropertyRNA *prop; + PointerRNA new_ptr; + char *path = NULL; + short free_path=0; + + /* sanity checks */ + if (channels == NULL) + return NULL; + + /* get RNA pointer+property info from F-Curve for more convenient handling */ + /* get path, remapped as appropriate to work in its new environment */ + free_path= animsys_remap_path(strip->remap, fcu->rna_path, &path); + + /* get property to write to */ + if (RNA_path_resolve(ptr, path, &new_ptr, &prop) == 0) + return NULL; + /* only ok if animateable */ + else if (RNA_property_animateable(&new_ptr, prop) == 0) + return NULL; + + /* loop through existing channels, checking for a channel which affects the same property */ + for (nec= channels->first; nec; nec= nec->next) { + if ((nec->ptr.data == new_ptr.data) && (nec->prop == prop)) + return nec; + } + + /* allocate a new struct for this */ + nec= MEM_callocN(sizeof(NlaEvalChannel), "NlaEvalChannel"); + *newChan= 1; + BLI_addtail(channels, nec); + + nec->ptr= new_ptr; + nec->prop= prop; + nec->index= fcu->array_index; + + return nec; +} + +/* ---------------------- */ + +/* evaluate action-clip strip */ +static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +{ + NlaStrip *strip= nes->strip; + FCurve *fcu; + float evaltime; + + /* evaluate strip's modifiers which modify time to evaluate the base curves at */ + evaltime= evaluate_time_fmodifiers(&strip->modifiers, NULL, 0.0f, strip->strip_time); + + /* evaluate all the F-Curves in the action, saving the relevant pointers to data that will need to be used */ + for (fcu= strip->act->curves.first; fcu; fcu= fcu->next) { + NlaEvalChannel *nec; + float value = 0.0f; + short newChan = -1; + + /* check if this curve should be skipped */ + if (fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) + continue; + + /* evaluate the F-Curve's value for the time given in the strip + * NOTE: we use the modified time here, since strip's F-Curve Modifiers are applied on top of this + */ + value= evaluate_fcurve(fcu, evaltime); + + /* apply strip's F-Curve Modifiers on this value + * NOTE: we apply the strip's original evaluation time not the modified one (as per standard F-Curve eval) + */ + evaluate_value_fmodifiers(&strip->modifiers, fcu, &value, strip->strip_time); + + + /* get an NLA evaluation channel to work with, and accumulate the evaluated value with the value(s) + * stored in this channel if it has been used already + */ + nec= nlaevalchan_verify(ptr, channels, nes, fcu, &newChan); + //if (nec) + // nlaevalchan_accumulate(ptr, nec, nes, newChan, value); + } +} + +/* evaluates the given evaluation strip */ +// TODO: only evaluate here, but flush in one go using the accumulated channels at end... +static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +{ + /* actions to take depend on the type of strip */ + switch (nes->strip->type) { + case NLASTRIP_TYPE_CLIP: /* action-clip */ + nlastrip_evaluate_actionclip(ptr, channels, nes); + break; + case NLASTRIP_TYPE_TRANSITION: /* transition */ + // XXX code this... + break; + } } /* write the accumulated settings to */ @@ -807,7 +899,7 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) /* 2. for each strip, evaluate then accumulate on top of existing channels, but don't set values yet */ for (nes= estrips.first; nes; nes= nes->next) - nlastrip_ctime_evaluate(&echannels, nes, ctime); + nlastrip_evaluate(ptr, &echannels, nes); /* 3. flush effects of accumulating channels in NLA to the actual data they affect */ nladata_flush_channels(ptr, &echannels); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index cade555a07a..1a40911170e 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2166,34 +2166,6 @@ void fcurve_free_modifiers (FCurve *fcu) } } -/* Bake modifiers for given F-Curve to curve sample data, in the frame range defined - * by start and end (inclusive). - */ -void fcurve_bake_modifiers (FCurve *fcu, int start, int end) -{ - ChannelDriver *driver; - - /* sanity checks */ - // TODO: make these tests report errors using reports not printf's - if ELEM(NULL, fcu, fcu->modifiers.first) { - printf("Error: No F-Curve with F-Curve Modifiers to Bake\n"); - return; - } - - /* temporarily, disable driver while we sample, so that they don't influence the outcome */ - driver= fcu->driver; - fcu->driver= NULL; - - /* bake the modifiers, by sampling the curve at each frame */ - fcurve_store_samples(fcu, NULL, start, end, fcurve_samplingcb_evalcurve); - - /* free the modifiers now */ - fcurve_free_modifiers(fcu); - - /* restore driver */ - fcu->driver= driver; -} - /* Find the active F-Curve Modifier */ FModifier *fcurve_find_active_modifier (FCurve *fcu) { @@ -2231,6 +2203,98 @@ void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm) fcm->flag |= FMODIFIER_FLAG_ACTIVE; } +/* Evaluation API --------------------------- */ + +/* evaluate time modifications imposed by some F-Curve Modifiers + * - this step acts as an optimisation to prevent the F-Curve stack being evaluated + * several times by modifiers requesting the time be modified, as the final result + * would have required using the modified time + * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be + * working on the 'global' result of the modified curve, not some localised segment, + * so nevaltime gets set to whatever the last time-modifying modifier likes... + * - we start from the end of the stack, as only the last one matters for now + */ +float evaluate_time_fmodifiers (ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) +{ + FModifier *fcm; + float m_evaltime= evaltime; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return evaltime; + + /* find the first modifier from end of stack that modifies time, and calculate the time the modifier + * would calculate time at + */ + for (fcm= fcu->modifiers.last; fcm; fcm= fcm->prev) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* only evaluate if there's a callback for this */ + // TODO: implement the 'influence' control feature... + if (fmi && fmi->evaluate_modifier_time) { + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) + m_evaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime); + break; + } + } + + /* return the modified evaltime */ + return m_evaltime; +} + +/* Evalautes the given set of F-Curve Modifiers using the given data + * Should only be called after evaluate_time_fmodifiers() has been called... + */ +void evaluate_value_fmodifiers (ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) +{ + FModifier *fcm; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return; + + /* evaluate modifiers */ + for (fcm= modifiers->first; fcm; fcm= fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* only evaluate if there's a callback for this */ + // TODO: implement the 'influence' control feature... + if (fmi && fmi->evaluate_modifier) { + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) + fmi->evaluate_modifier(fcu, fcm, cvalue, evaltime); + } + } +} + + +/* Bake modifiers for given F-Curve to curve sample data, in the frame range defined + * by start and end (inclusive). + */ +void fcurve_bake_modifiers (FCurve *fcu, int start, int end) +{ + ChannelDriver *driver; + + /* sanity checks */ + // TODO: make these tests report errors using reports not printf's + if ELEM(NULL, fcu, fcu->modifiers.first) { + printf("Error: No F-Curve with F-Curve Modifiers to Bake\n"); + return; + } + + /* temporarily, disable driver while we sample, so that they don't influence the outcome */ + driver= fcu->driver; + fcu->driver= NULL; + + /* bake the modifiers, by sampling the curve at each frame */ + fcurve_store_samples(fcu, NULL, start, end, fcurve_samplingcb_evalcurve); + + /* free the modifiers now */ + fcurve_free_modifiers(fcu); + + /* restore driver */ + fcu->driver= driver; +} + /* ***************************** F-Curve - Evaluation ********************************* */ /* Evaluate and return the value of the given F-Curve at the specified frame ("evaltime") @@ -2238,7 +2302,6 @@ void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm) */ float evaluate_fcurve (FCurve *fcu, float evaltime) { - FModifier *fcm; float cvalue= 0.0f; float devaltime; @@ -2251,28 +2314,8 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) evaltime= cvalue= evaluate_driver(fcu->driver, evaltime); } - /* evaluate time modifications imposed by some F-Curve Modifiers - * - this step acts as an optimisation to prevent the F-Curve stack being evaluated - * several times by modifiers requesting the time be modified, as the final result - * would have required using the modified time - * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be - * working on the 'global' result of the modified curve, not some localised segment, - * so nevaltime gets set to whatever the last time-modifying modifier likes... - * - we start from the end of the stack, as only the last one matters for now - */ - devaltime= evaltime; - - for (fcm= fcu->modifiers.last; fcm; fcm= fcm->prev) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* only evaluate if there's a callback for this */ - // TODO: implement the 'influence' control feature... - if (fmi && fmi->evaluate_modifier_time) { - if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) - devaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime); - break; - } - } + /* evaluate modifiers which modify time to evaluate the base curve at */ + devaltime= evaluate_time_fmodifiers(&fcu->modifiers, fcu, cvalue, evaltime); /* evaluate curve-data * - 'devaltime' instead of 'evaltime', as this is the time that the last time-modifying @@ -2284,16 +2327,7 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) cvalue= fcurve_eval_samples(fcu, fcu->fpt, devaltime); /* evaluate modifiers */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* only evaluate if there's a callback for this */ - // TODO: implement the 'influence' control feature... - if (fmi && fmi->evaluate_modifier) { - if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) - fmi->evaluate_modifier(fcu, fcm, &cvalue, evaltime); - } - } + evaluate_value_fmodifiers(&fcu->modifiers, fcu, &cvalue, evaltime); /* if curve can only have integral values, perform truncation (i.e. drop the decimal part) * here so that the curve can be sampled correctly From cebf6cb22deb930f5ec235e81c20072bf7154a83 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 16 May 2009 01:00:41 +0000 Subject: [PATCH 004/512] NLA SoC: Code for basic evaluation of NLA strips done In theory, actions can now be evaluated in NLA, though in practice, we don't have an NLA Editor to create data to use this yet! Next up, transitions... Some notes: * Recoded the way the 'accumulation' methods work (i.e. blend, add, etc.), adding a few new ones. It should now be more obvious how these work. * Some assorted code cleanups done too (removing unneeded vars/args) --- source/blender/blenkernel/intern/anim_sys.c | 157 +++++++++++++++++--- 1 file changed, 135 insertions(+), 22 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 5a4a2d91469..702da23ef47 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -735,8 +735,9 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index * - negative influence is not supported yet... how would that be defined? */ // TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on... + // TODO: should we clamp the time to only be on the endpoints of the strip? nlastrip_evaluate_controls(estrip, ctime); - if (estrip->influence <= 0.0f) + if (estrip->influence <= 0.0f) // XXX is it useful to invert the strip? return; /* check if strip has valid data to evaluate */ @@ -767,10 +768,36 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* ---------------------- */ -/* verify that an appropriate NlaEvalChannel for this F-Curve */ +/* find an NlaEvalChannel that matches the given criteria + * - ptr and prop are the RNA data to find a match for + */ +static NlaEvalChannel *nlaevalchan_find_match (ListBase *channels, PointerRNA *ptr, PropertyRNA *prop, int array_index) +{ + NlaEvalChannel *nec; + + /* sanity check */ + if (channels == NULL) + return NULL; + + /* loop through existing channels, checking for a channel which affects the same property */ + for (nec= channels->first; nec; nec= nec->next) { + /* - comparing the PointerRNA's is done by comparing the pointers + * to the actual struct the property resides in, since that all the + * other data stored in PointerRNA cannot allow us to definitively + * identify the data + */ + if ((nec->ptr.data == ptr->data) && (nec->prop == prop) && (nec->index == array_index)) + return nec; + } + + /* not found */ + return NULL; +} + +/* verify that an appropriate NlaEvalChannel for this F-Curve exists */ static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes, FCurve *fcu, short *newChan) { - NlaEvalChannel *nec= NULL; + NlaEvalChannel *nec; NlaStrip *strip= nes->strip; PropertyRNA *prop; PointerRNA new_ptr; @@ -785,31 +812,79 @@ static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, /* get path, remapped as appropriate to work in its new environment */ free_path= animsys_remap_path(strip->remap, fcu->rna_path, &path); - /* get property to write to */ - if (RNA_path_resolve(ptr, path, &new_ptr, &prop) == 0) + /* a valid property must be available, and it must be animateable */ + if (RNA_path_resolve(ptr, path, &new_ptr, &prop) == 0) { + if (G.f & G_DEBUG) printf("NLA Strip Eval: Cannot resolve path \n"); return NULL; + } /* only ok if animateable */ - else if (RNA_property_animateable(&new_ptr, prop) == 0) + else if (RNA_property_animateable(&new_ptr, prop) == 0) { + if (G.f & G_DEBUG) printf("NLA Strip Eval: Property not animateable \n"); return NULL; - - /* loop through existing channels, checking for a channel which affects the same property */ - for (nec= channels->first; nec; nec= nec->next) { - if ((nec->ptr.data == new_ptr.data) && (nec->prop == prop)) - return nec; } - /* allocate a new struct for this */ - nec= MEM_callocN(sizeof(NlaEvalChannel), "NlaEvalChannel"); - *newChan= 1; - BLI_addtail(channels, nec); + /* try to find a match */ + nec= nlaevalchan_find_match(channels, &new_ptr, prop, fcu->array_index); - nec->ptr= new_ptr; - nec->prop= prop; - nec->index= fcu->array_index; + /* allocate a new struct for this if none found */ + if (nec == NULL) { + nec= MEM_callocN(sizeof(NlaEvalChannel), "NlaEvalChannel"); + *newChan= 1; + BLI_addtail(channels, nec); + + nec->ptr= new_ptr; + nec->prop= prop; + nec->index= fcu->array_index; + } + /* we can now return */ return nec; } +/* accumulate (i.e. blend) the given value on to the channel it affects */ +static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, short newChan, float value) +{ + NlaStrip *strip= nes->strip; + float inf= strip->influence; + + /* if channel is new, just store value regardless of blending factors, etc. */ + if (newChan) { + nec->value= value; + return; + } + + /* premultiply the value by the weighting factor */ + if (IS_EQ(inf, 0)) return; + value *= inf; + + /* perform blending */ + switch (strip->blendmode) { + case NLASTRIP_MODE_ADD: + /* simply add the scaled value on to the stack */ + nec->value += value; + break; + + case NLASTRIP_MODE_SUBTRACT: + /* simply subtract the scaled value from the stack */ + nec->value -= value; + break; + + case NLASTRIP_MODE_MULTIPLY: + /* multiply the scaled value with the stack */ + nec->value *= value; + break; + + case NLASTRIP_MODE_BLEND: + default: // TODO: do we really want to blend by default? it seems more uses might prefer add... + /* do linear interpolation + * - the influence of the accumulated data (elsewhere, that is called dstweight) + * is 1 - influence, since the strip's influence is srcweight + */ + nec->value= nec->value * (1.0f - inf) + value; + break; + } +} + /* ---------------------- */ /* evaluate action-clip strip */ @@ -847,8 +922,8 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N * stored in this channel if it has been used already */ nec= nlaevalchan_verify(ptr, channels, nes, fcu, &newChan); - //if (nec) - // nlaevalchan_accumulate(ptr, nec, nes, newChan, value); + if (nec) + nlaevalchan_accumulate(nec, nes, newChan, value); } } @@ -868,9 +943,47 @@ static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip } /* write the accumulated settings to */ -static void nladata_flush_channels (PointerRNA *ptr, ListBase *channels) +static void nladata_flush_channels (ListBase *channels) { + NlaEvalChannel *nec; + /* sanity checks */ + if (channels == NULL) + return; + + /* for each channel with accumulated values, write its value on the property it affects */ + for (nec= channels->first; nec; nec= nec->next) { + PointerRNA *ptr= &nec->ptr; + PropertyRNA *prop= nec->prop; + int array_index= nec->index; + float value= nec->value; + + /* write values - see animsys_write_rna_setting() to sync the code */ + switch (RNA_property_type(prop)) + { + case PROP_BOOLEAN: + if (RNA_property_array_length(prop)) + RNA_property_boolean_set_index(ptr, prop, array_index, (int)value); + else + RNA_property_boolean_set(ptr, prop, (int)value); + break; + case PROP_INT: + if (RNA_property_array_length(prop)) + RNA_property_int_set_index(ptr, prop, array_index, (int)value); + else + RNA_property_int_set(ptr, prop, (int)value); + break; + case PROP_FLOAT: + if (RNA_property_array_length(prop)) + RNA_property_float_set_index(ptr, prop, array_index, value); + else + RNA_property_float_set(ptr, prop, value); + break; + case PROP_ENUM: + RNA_property_enum_set(ptr, prop, (int)value); + break; + } + } } /* ---------------------- */ @@ -902,7 +1015,7 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) nlastrip_evaluate(ptr, &echannels, nes); /* 3. flush effects of accumulating channels in NLA to the actual data they affect */ - nladata_flush_channels(ptr, &echannels); + nladata_flush_channels(&echannels); /* 4. free temporary evaluation data */ BLI_freelistN(&estrips); From 9b1ce6e55608e868a1fa1bc62710e053919c39de Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 22 May 2009 01:16:26 +0000 Subject: [PATCH 005/512] NLA SoC: Part 1 of NLA-Data Management API In this commit: * Added code for freeing NLA data now stored in AnimData * Started writing some utilities for adding NLA data, especially the 'push-down' concept for Actions * Cleanups of existing code - removal of obsolete NLA code from various places Next commits/parts: * File IO code for new-style NLA data * Version patching for old data to new data --- source/blender/blenkernel/BKE_nla.h | 33 +- source/blender/blenkernel/intern/anim_sys.c | 7 + source/blender/blenkernel/intern/nla.c | 389 ++++++++++++------- source/blender/blenkernel/intern/object.c | 8 +- source/blender/editors/space_nla/space_nla.c | 1 + source/blender/makesdna/DNA_anim_types.h | 4 +- source/blender/makesdna/DNA_space_types.h | 2 +- 7 files changed, 292 insertions(+), 152 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 230096d7ea7..0f23a5cb44d 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -17,12 +17,12 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung * All rights reserved. * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): Joshua Leung (full recode) * * ***** END GPL LICENSE BLOCK ***** */ @@ -30,15 +30,26 @@ #ifndef BKE_NLA_H #define BKE_NLA_H -struct bActionStrip; -struct ListBase; -struct Object; +struct AnimData; +struct NlaStrip; +struct NlaTrack; + +/* ----------------------------- */ +/* Data Management */ + +void free_nlastrip(ListBase *strips, struct NlaStrip *strip); +void free_nlatrack(ListBase *tracks, struct NlaTrack *nlt); +void free_nladata(ListBase *tracks); + +struct NlaTrack *add_nlatrack(struct AnimData *adt); + +/* ----------------------------- */ +/* API */ + +struct NlaTrack *BKE_nlatrack_find_active(ListBase *tracks); +void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt_a); + +void BKE_nla_action_pushdown(struct AnimData *adt); -void free_actionstrip (struct bActionStrip* strip); -void free_nlastrips (struct ListBase *nlalist); -void copy_nlastrips (struct ListBase *dst, struct ListBase *src); -void copy_actionstrip (struct bActionStrip **dst, struct bActionStrip **src); -void find_stridechannel(struct Object *ob, struct bActionStrip *strip); -struct bActionStrip *convert_action_to_strip (struct Object *ob); #endif diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 702da23ef47..b47d734ef4f 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -17,6 +17,7 @@ #include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_fcurve.h" +#include "BKE_nla.h" #include "BKE_global.h" #include "BKE_main.h" #include "BKE_utildefines.h" @@ -118,6 +119,9 @@ void BKE_free_animdata (ID *id) if (adt->action) adt->action->id.us--; + /* free nla data */ + free_nladata(&adt->nla_tracks); + /* free drivers - stored as a list of F-Curves */ free_fcurves(&adt->drivers); @@ -982,6 +986,9 @@ static void nladata_flush_channels (ListBase *channels) case PROP_ENUM: RNA_property_enum_set(ptr, prop, (int)value); break; + default: + // can't do anything with other types of property.... + break; } } } diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index dc2bf26759f..ac767fe86cc 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -17,171 +17,296 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung * All rights reserved. * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): Joshua Leung (full recode) * * ***** END GPL LICENSE BLOCK ***** */ #include +#include +#include +#include +#include #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" -#include "DNA_space_types.h" -#include "DNA_nla_types.h" +#include "DNA_anim_types.h" #include "DNA_action_types.h" -#include "DNA_ID.h" -#include "DNA_ipo_types.h" -#include "DNA_object_types.h" -#include "BKE_nla.h" +#include "BKE_animsys.h" #include "BKE_action.h" +#include "BKE_fcurve.h" +#include "BKE_nla.h" #include "BKE_blender.h" #include "BKE_library.h" -#include "BKE_object.h" /* for convert_action_to_strip(ob) */ +#include "BKE_object.h" +#include "BKE_utildefines.h" #ifdef HAVE_CONFIG_H #include #endif -/* NOTE: in group.c the strips get copied for group-nla override, this assumes - that strips are one single block, without additional data to be copied */ -void copy_actionstrip (bActionStrip **dst, bActionStrip **src){ - bActionStrip *dstrip; - bActionStrip *sstrip = *src; +/* *************************************************** */ +/* Data Management */ - if (!*src){ - *dst=NULL; +/* Freeing ------------------------------------------- */ + +/* Remove the given NLA strip from the NLA track it occupies, free the strip's data, + * and the strip itself. + */ +// TODO: with things like transitions, should these get freed too? Maybe better as a UI tool +void free_nlastrip (ListBase *strips, NlaStrip *strip) +{ + FModifier *fcm, *fmn; + + /* sanity checks */ + if (strip == NULL) return; - } - - *dst = MEM_dupallocN(sstrip); - - dstrip = *dst; - if (dstrip->act) - dstrip->act->id.us++; - - if (dstrip->ipo) - dstrip->ipo->id.us++; - - if (dstrip->modifiers.first) { - BLI_duplicatelist (&dstrip->modifiers, &sstrip->modifiers); - } - -} - -void copy_nlastrips (ListBase *dst, ListBase *src) -{ - bActionStrip *strip; - - dst->first=dst->last=NULL; - - BLI_duplicatelist (dst, src); - - /* Update specific data */ - if (!dst->first) - return; - - for (strip = dst->first; strip; strip=strip->next){ - if (strip->act) - strip->act->id.us++; - if (strip->ipo) - strip->ipo->id.us++; - if (strip->modifiers.first) { - ListBase listb; - BLI_duplicatelist (&listb, &strip->modifiers); - strip->modifiers= listb; - } - } -} - -/* from editnla, for convert_action_to_strip -- no UI code so should be ok here.. */ -void find_stridechannel(Object *ob, bActionStrip *strip) -{ - if(ob && ob->pose) { - bPoseChannel *pchan; - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) - if(pchan->flag & POSE_STRIDE) - break; - if(pchan) - BLI_strncpy(strip->stridechannel, pchan->name, 32); - else - strip->stridechannel[0]= 0; - } -} - -//called by convert_nla / bpy api with an object with the action to be converted to a new strip -bActionStrip *convert_action_to_strip (Object *ob) -{ - bActionStrip *nstrip; - - /* Make new actionstrip */ - nstrip = MEM_callocN(sizeof(bActionStrip), "bActionStrip"); - - /* Link the action to the nstrip */ - nstrip->act = ob->action; - id_us_plus(&nstrip->act->id); - calc_action_range(nstrip->act, &nstrip->actstart, &nstrip->actend, 1); - nstrip->start = nstrip->actstart; - nstrip->end = nstrip->actend; - nstrip->flag = ACTSTRIP_SELECT|ACTSTRIP_LOCK_ACTION; - - find_stridechannel(ob, nstrip); - //set_active_strip(ob, nstrip); /* is in editnla as does UI calls */ - - nstrip->repeat = 1.0; - - if(ob->nlastrips.first == NULL) - ob->nlaflag |= OB_NLA_OVERRIDE; - - BLI_addtail(&ob->nlastrips, nstrip); - return nstrip; /* is created, malloced etc. here so is safe to just return the pointer? - this is needed for setting this active in UI, and probably useful for API too */ - -} - - -/* not strip itself! */ -void free_actionstrip(bActionStrip* strip) -{ - if (!strip) - return; - - if (strip->act){ + + /* remove reference to action */ + if (strip->act) strip->act->id.us--; - strip->act = NULL; - } - if (strip->ipo){ - strip->ipo->id.us--; - strip->ipo = NULL; - } - if (strip->modifiers.first) { - BLI_freelistN(&strip->modifiers); + + /* free remapping info */ + //if (strip->remap) + // BKE_animremap_free(); + + /* free own F-Curves */ + free_fcurves(&strip->fcurves); + + /* free F-Modifiers */ + for (fcm= strip->modifiers.first; fcm; fcm= fmn) { + fmn= fcm->next; + + BLI_remlink(&strip->modifiers, fcm); + fcurve_remove_modifier(NULL, fcm); } + /* free the strip itself */ + if (strips) + BLI_freelinkN(strips, strip); + else + MEM_freeN(strip); } -void free_nlastrips (ListBase *nlalist) +/* Remove the given NLA track from the set of NLA tracks, free the track's data, + * and the track itself. + */ +void free_nlatrack (ListBase *tracks, NlaTrack *nlt) { - bActionStrip *strip; - - if (!nlalist->first) + NlaStrip *strip, *stripn; + + /* sanity checks */ + if (nlt == NULL) return; - - /* Do any specific freeing */ - for (strip=nlalist->first; strip; strip=strip->next) - { - free_actionstrip (strip); - }; - - /* Free the whole list */ - BLI_freelistN(nlalist); + + /* free strips */ + for (strip= nlt->strips.first; strip; strip= stripn) { + stripn= strip->next; + free_nlastrip(&nlt->strips, strip); + } + + /* free NLA track itself now */ + if (tracks) + BLI_freelinkN(tracks, nlt); + else + MEM_freeN(nlt); } + +/* Free the elements of type NLA Tracks provided in the given list, but do not free + * the list itself since that is not free-standing + */ +void free_nladata (ListBase *tracks) +{ + NlaTrack *nlt, *nltn; + + /* sanity checks */ + if ELEM(NULL, tracks, tracks->first) + return; + + /* free tracks one by one */ + for (nlt= tracks->first; nlt; nlt= nltn) { + nltn= nlt->next; + free_nlatrack(tracks, nlt); + } + + /* clear the list's pointers to be safe */ + tracks->first= tracks->last= NULL; +} + +/* Copying ------------------------------------------- */ + +// TODO... + +/* Adding ------------------------------------------- */ + +/* Add a NLA Strip referencing the given Action, to the given NLA Track */ +// TODO: any extra parameters to control how this is done? +NlaStrip *add_nlastrip (NlaTrack *nlt, bAction *act) +{ + NlaStrip *strip; + + /* sanity checks */ + if ELEM(NULL, nlt, act) + return NULL; + + /* allocate new strip */ + strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip"); + BLI_addtail(&nlt->strips, strip); + + /* generic settings + * - selected flag to highlight this to the user + * - auto-blends to ensure that blend in/out values are automatically + * determined by overlaps of strips + * - (XXX) synchronisation of strip-length in accordance with changes to action-length + * is not done though, since this should only really happens in editmode for strips now + * though this decision is still subject to further review... + */ + strip->flag = NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_AUTO_BLENDS; + + /* assign the action reference */ + strip->act= act; + id_us_plus(&act->id); + + /* determine initial range + * - strip length cannot be 0... ever... + */ + calc_action_range(strip->act, &strip->actstart, &strip->actend, 1); + + strip->start = strip->actstart; + strip->end = (IS_EQ(strip->actstart, strip->actend)) ? (strip->actstart + 1.0f): (strip->actend); + + /* strip should be referenced as-is */ + strip->scale= 1.0f; + strip->repeat = 1.0f; + + /* return the new strip */ + return strip; +} + +/* Add a NLA Track to the given AnimData */ +NlaTrack *add_nlatrack (AnimData *adt) +{ + NlaTrack *nlt; + + /* sanity checks */ + if (adt == NULL) + return NULL; + + /* allocate new track */ + nlt= MEM_callocN(sizeof(NlaTrack), "NlaTrack"); + + /* set settings requiring the track to not be part of the stack yet */ + nlt->flag = NLATRACK_SELECTED; + nlt->index= BLI_countlist(&adt->nla_tracks); + + /* add track to stack, and make it the active one */ + BLI_addtail(&adt->nla_tracks, nlt); + BKE_nlatrack_set_active(&adt->nla_tracks, nlt); + + /* must have unique name, but we need to seed this */ + sprintf(nlt->name, "NlaTrack"); + BLI_uniquename(&adt->nla_tracks, nlt, "NlaTrack", '.', offsetof(NlaTrack, name), 64); + + /* return the new track */ + return nlt; +} + +/* *************************************************** */ +/* Basic Utilities */ + +/* States ------------------------------------------- */ + +/* Find the active NLA-track for the given stack */ +NlaTrack *BKE_nlatrack_find_active (ListBase *tracks) +{ + NlaTrack *nlt; + + /* sanity check */ + if ELEM(NULL, tracks, tracks->first) + return NULL; + + /* try to find the first active track */ + for (nlt= tracks->first; nlt; nlt= nlt->next) { + if (nlt->flag & NLATRACK_ACTIVE) + return nlt; + } + + /* none found */ + return NULL; +} + +/* Make the given NLA-track the active one for the given stack. If no track is provided, + * this function can be used to simply deactivate all the NLA tracks in the given stack too. + */ +void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) +{ + NlaTrack *nlt; + + /* sanity check */ + if ELEM(NULL, tracks, tracks->first) + return; + + /* deactive all the rest */ + for (nlt= tracks->first; nlt; nlt= nlt->next) + nlt->flag &= ~NLATRACK_ACTIVE; + + /* set the given one as the active one */ + if (nlt_a) + nlt_a->flag |= NLATRACK_ACTIVE; +} + +/* Tools ------------------------------------------- */ + +/* For the given AnimData block, add the active action to the NLA + * stack (i.e. 'push-down' action). The UI should only allow this + * for normal editing only (i.e. not in editmode for some strip's action), + * so no checks for this are performed. + */ +// TODO: maybe we should have checks for this too... +void BKE_nla_action_pushdown (AnimData *adt) +{ + NlaTrack *nlt; + NlaStrip *strip; + + /* sanity checks */ + // TODO: need to report the error for this + if ELEM(NULL, adt, adt->action) + return; + + /* if the action is empty, we also shouldn't try to add to stack, + * as that will cause us grief down the track + */ + // TODO: code a method for this, and report errors after... + + /* add a new NLA track to house this action + * - we could investigate trying to fit the action into an appropriately + * sized gap in the existing tracks, however, this may result in unexpected + * changes in blending behaviour... + */ + nlt= add_nlatrack(adt); + if (nlt == NULL) + return; + + /* add a new NLA strip to the track, which references the active action */ + strip= add_nlastrip(nlt, adt->action); + + /* clear reference to action now that we've pushed it onto the stack */ + if (strip) { + adt->action->id.us--; + adt->action= NULL; + } + + // TODO: set any other flags necessary here... +} + +/* *************************************************** */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index b913651d856..b0902784687 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1193,18 +1193,12 @@ Object *copy_object(Object *ob) armature_rebuild_pose(obn, obn->data); } copy_defgroups(&obn->defbase, &ob->defbase); -#if 0 // XXX old animation system - copy_nlastrips(&obn->nlastrips, &ob->nlastrips); -#endif // XXX old animation system copy_constraints(&obn->constraints, &ob->constraints); /* increase user numbers */ id_us_plus((ID *)obn->data); -#if 0 // XXX old animation system - id_us_plus((ID *)obn->ipo); - id_us_plus((ID *)obn->action); -#endif // XXX old animation system id_us_plus((ID *)obn->dup_group); + // FIXME: add this for animdata too... for(a=0; atotcol; a++) id_us_plus((ID *)obn->mat[a]); diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 6e1a97dea34..188315c73fb 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -29,6 +29,7 @@ #include #include +#include "DNA_anim_types.h" #include "DNA_nla_types.h" #include "DNA_object_types.h" #include "DNA_space_types.h" diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index c0cdc1ab589..b20ec7ba37f 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -395,7 +395,7 @@ typedef struct AnimMapper { typedef struct NlaStrip { struct NlaStrip *next, *prev; - bAction *act; /* Action that is referenced by this strip */ + bAction *act; /* Action that is referenced by this strip (strip is 'user' of the action) */ AnimMapper *remap; /* Remapping info this strip (for tweaking correspondance of action with context) */ ListBase fcurves; /* F-Curves for controlling this strip's influence and timing */ // TODO: move out? @@ -458,6 +458,8 @@ enum { /* NLA strip is muted (i.e. doesn't contribute in any way) */ // TODO: this overlaps a lot with the functionality in track NLASTRIP_FLAG_MUTED = (1<<12), + /* NLA strip length is synced to the length of the referenced action */ + NLASTRIP_FLAG_SYNC_LENGTH = (1<<13), } eNlaStrip_Flag; /* NLA Strip Type */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 0e19a6845da..0a4fe1c5814 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -244,7 +244,7 @@ typedef struct SpaceNla { short blockhandler[8]; - short menunr, lock; + int filterflag; /* filtering flags (similar to the ones used for Keyframe Editors) */ short autosnap; /* this uses the same settings as autosnap for Action Editor */ short flag; From 3b7f63a0884c6ec9db5abb938708f4191ea35274 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 22 May 2009 11:19:35 +0000 Subject: [PATCH 006/512] NLA SoC: File IO for new NLA Datatypes --- source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenloader/intern/readfile.c | 149 +++++++++++++------ source/blender/blenloader/intern/writefile.c | 125 ++++++++++------ 3 files changed, 186 insertions(+), 90 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 0f23a5cb44d..3864d9da5f6 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -33,6 +33,7 @@ struct AnimData; struct NlaStrip; struct NlaTrack; +struct bAction; /* ----------------------------- */ /* Data Management */ @@ -41,6 +42,7 @@ void free_nlastrip(ListBase *strips, struct NlaStrip *strip); void free_nlatrack(ListBase *tracks, struct NlaTrack *nlt); void free_nladata(ListBase *tracks); +struct NlaStrip *add_nlastrip(struct NlaTrack *nlt, struct bAction *act); struct NlaTrack *add_nlatrack(struct AnimData *adt); /* ----------------------------- */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index fd9da2059e1..cfb8baa4c84 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1657,10 +1657,26 @@ static void lib_link_constraint_channels(FileData *fd, ID *id, ListBase *chanbas /* Data Linking ----------------------------- */ +static void lib_link_fmodifiers(FileData *fd, ID *id, ListBase *list) +{ + FModifier *fcm; + + for (fcm= list->first; fcm; fcm= fcm->next) { + /* data for specific modifiers */ + switch (fcm->type) { + case FMODIFIER_TYPE_PYTHON: + { + FMod_Python *data= (FMod_Python *)fcm->data; + data->script = newlibadr(fd, id->lib, data->script); + } + break; + } + } +} + static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list) { FCurve *fcu; - FModifier *fcm; /* relink ID-block references... */ for (fcu= list->first; fcu; fcu= fcu->next) { @@ -1674,16 +1690,45 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list) } /* modifiers */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - /* data for specific modifiers */ - switch (fcm->type) { - case FMODIFIER_TYPE_PYTHON: - { - FMod_Python *data= (FMod_Python *)fcm->data; - data->script = newlibadr(fd, id->lib, data->script); - } - break; + lib_link_fmodifiers(fd, id, &fcu->modifiers); + } +} + + +/* NOTE: this assumes that link_list has already been called on the list */ +static void direct_link_fmodifiers(FileData *fd, ListBase *list) +{ + FModifier *fcm; + + for (fcm= list->first; fcm; fcm= fcm->next) { + /* relink general data */ + fcm->data = newdataadr(fd, fcm->data); + fcm->edata= NULL; + + /* do relinking of data for specific types */ + switch (fcm->type) { + case FMODIFIER_TYPE_GENERATOR: + { + FMod_Generator *data= (FMod_Generator *)fcm->data; + + data->coefficients= newdataadr(fd, data->coefficients); } + break; + case FMODIFIER_TYPE_ENVELOPE: + { + FMod_Envelope *data= (FMod_Envelope *)fcm->data; + + data->data= newdataadr(fd, data->data); + } + break; + case FMODIFIER_TYPE_PYTHON: + { + FMod_Python *data= (FMod_Python *)fcm->data; + + data->prop = newdataadr(fd, data->prop); + IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + } + break; } } } @@ -1692,7 +1737,6 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list) static void direct_link_fcurves(FileData *fd, ListBase *list) { FCurve *fcu; - FModifier *fcm; /* link F-Curve data to F-Curve again (non ID-libs) */ for (fcu= list->first; fcu; fcu= fcu->next) { @@ -1720,37 +1764,7 @@ static void direct_link_fcurves(FileData *fd, ListBase *list) /* modifiers */ link_list(fd, &fcu->modifiers); - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - /* relink general data */ - fcm->data = newdataadr(fd, fcm->data); - fcm->edata= NULL; - - /* do relinking of data for specific types */ - switch (fcm->type) { - case FMODIFIER_TYPE_GENERATOR: - { - FMod_Generator *data= (FMod_Generator *)fcm->data; - - data->coefficients= newdataadr(fd, data->coefficients); - } - break; - case FMODIFIER_TYPE_ENVELOPE: - { - FMod_Envelope *data= (FMod_Envelope *)fcm->data; - - data->data= newdataadr(fd, data->data); - } - break; - case FMODIFIER_TYPE_PYTHON: - { - FMod_Python *data= (FMod_Python *)fcm->data; - - data->prop = newdataadr(fd, data->prop); - IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); - } - break; - } - } + direct_link_fmodifiers(fd, &fcu->modifiers); } } @@ -1802,6 +1816,44 @@ static void direct_link_action(FileData *fd, bAction *act) } } + +static void lib_link_nladata (FileData *fd, ID *id, ListBase *list) +{ + NlaTrack *nlt; + NlaStrip *strip; + + /* we only acare about the NLA strips inside the tracks */ + for (nlt= list->first; nlt; nlt= nlt->next) { + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* reassign the counted-reference to action */ + strip->act = newlibadr_us(fd, id->lib, strip->act); + } + } +} + +/* NOTE: this assumes that link_list has already been called on the list */ +static void direct_link_nladata(FileData *fd, ListBase *list) +{ + NlaTrack *nlt; + NlaStrip *strip; + + for (nlt= list->first; nlt; nlt= nlt->next) { + /* relink list of strips */ + link_list(fd, &nlt->strips); + + /* relink strip data */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* strip's F-Curves */ + link_list(fd, &strip->fcurves); + direct_link_fcurves(fd, &strip->fcurves); + + /* strip's F-Modifiers */ + link_list(fd, &strip->modifiers); + direct_link_fcurves(fd, &strip->modifiers); + } + } +} + /* ------- */ static void lib_link_keyingsets(FileData *fd, ID *id, ListBase *list) @@ -1851,7 +1903,7 @@ static void lib_link_animdata(FileData *fd, ID *id, AnimData *adt) /* overrides don't have lib-link for now, so no need to do anything */ /* link NLA-data */ - // TODO... + lib_link_nladata(fd, id, &adt->nla_tracks); } static void direct_link_animdata(FileData *fd, AnimData *adt) @@ -1868,7 +1920,8 @@ static void direct_link_animdata(FileData *fd, AnimData *adt) // TODO... /* link NLA-data */ - // TODO... + link_list(fd, &adt->nla_tracks); + direct_link_nladata(fd, &adt->nla_tracks); } /* ************ READ NODE TREE *************** */ @@ -9302,6 +9355,8 @@ static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list) static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) { FCurve *fcd; + NlaTrack *nlt; + NlaStrip *strip; /* own action */ expand_doit(fd, mainvar, adt->action); @@ -9314,6 +9369,12 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) for (dtar= driver->targets.first; dtar; dtar= dtar->next) expand_doit(fd, mainvar, dtar->id); } + + /* nla-data - referenced actions */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + for (strip= nlt->strips.first; strip; strip= strip->next) + expand_doit(fd, mainvar, strip->act); + } } static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index b690c708dc3..0375feffb31 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -760,10 +760,59 @@ static void write_actuators(WriteData *wd, ListBase *lb) } } +static void write_fmodifiers(WriteData *wd, ListBase *fmodifiers) +{ + FModifier *fcm; + + /* Modifiers */ + for (fcm= fmodifiers->first; fcm; fcm= fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* Write the specific data */ + if (fmi && fcm->data) { + /* firstly, just write the plain fmi->data struct */ + writestruct(wd, DATA, fmi->structName, 1, fcm->data); + + /* do any modifier specific stuff */ + switch (fcm->type) { + case FMODIFIER_TYPE_GENERATOR: + { + FMod_Generator *data= (FMod_Generator *)fcm->data; + + /* write coefficients array */ + if (data->coefficients) + writedata(wd, DATA, sizeof(float)*(data->arraysize), data->coefficients); + } + break; + case FMODIFIER_TYPE_ENVELOPE: + { + FMod_Envelope *data= (FMod_Envelope *)fcm->data; + + /* write envelope data */ + if (data->data) + writedata(wd, DATA, sizeof(FCM_EnvelopeData)*(data->totvert), data->data); + } + break; + case FMODIFIER_TYPE_PYTHON: + { + FMod_Python *data = (FMod_Python *)fcm->data; + + /* Write ID Properties -- and copy this comment EXACTLY for easy finding + of library blocks that implement this.*/ + IDP_WriteProperty(data->prop, wd); + } + break; + } + } + + /* Write the modifier */ + writestruct(wd, DATA, "FModifier", 1, fcm); + } +} + static void write_fcurves(WriteData *wd, ListBase *fcurves) { FCurve *fcu; - FModifier *fcm; for (fcu=fcurves->first; fcu; fcu=fcu->next) { /* F-Curve */ @@ -794,50 +843,8 @@ static void write_fcurves(WriteData *wd, ListBase *fcurves) } } - /* Modifiers */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* Write the specific data */ - if (fmi && fcm->data) { - /* firstly, just write the plain fmi->data struct */ - writestruct(wd, DATA, fmi->structName, 1, fcm->data); - - /* do any modifier specific stuff */ - switch (fcm->type) { - case FMODIFIER_TYPE_GENERATOR: - { - FMod_Generator *data= (FMod_Generator *)fcm->data; - - /* write coefficients array */ - if (data->coefficients) - writedata(wd, DATA, sizeof(float)*(data->arraysize), data->coefficients); - } - break; - case FMODIFIER_TYPE_ENVELOPE: - { - FMod_Envelope *data= (FMod_Envelope *)fcm->data; - - /* write envelope data */ - if (data->data) - writedata(wd, DATA, sizeof(FCM_EnvelopeData)*(data->totvert), data->data); - } - break; - case FMODIFIER_TYPE_PYTHON: - { - FMod_Python *data = (FMod_Python *)fcm->data; - - /* Write ID Properties -- and copy this comment EXACTLY for easy finding - of library blocks that implement this.*/ - IDP_WriteProperty(data->prop, wd); - } - break; - } - } - - /* Write the modifier */ - writestruct(wd, DATA, "FModifier", 1, fcm); - } + /* write F-Modifiers */ + write_fmodifiers(wd, &fcu->modifiers); } } @@ -888,6 +895,29 @@ static void write_keyingsets(WriteData *wd, ListBase *list) } } +static void write_nladata(WriteData *wd, ListBase *nlabase) +{ + NlaTrack *nlt; + NlaStrip *strip; + + /* write all the tracks */ + for (nlt= nlabase->first; nlt; nlt= nlt->next) { + /* write the track first */ + writestruct(wd, DATA, "NlaTrack", 1, nlt); + + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* write the strip first */ + writestruct(wd, DATA, "NlaStrip", 1, strip); + + /* write the strip's F-Curves and modifiers */ + write_fcurves(wd, &strip->fcurves); + write_fmodifiers(wd, &strip->modifiers); + + // TODO write the remaps + } + } +} + static void write_animdata(WriteData *wd, AnimData *adt) { AnimOverride *aor; @@ -899,14 +929,17 @@ static void write_animdata(WriteData *wd, AnimData *adt) write_fcurves(wd, &adt->drivers); /* write overrides */ + // FIXME: are these needed? for (aor= adt->overrides.first; aor; aor= aor->next) { /* overrides consist of base data + rna_path */ writestruct(wd, DATA, "AnimOverride", 1, aor); writedata(wd, DATA, strlen(aor->rna_path)+1, aor->rna_path); } + // TODO write the remaps (if they are needed) + /* write NLA data */ - // XXX todo... + write_nladata(wd, &adt->nla_tracks); } static void write_constraints(WriteData *wd, ListBase *conlist) From d141aff097d17c106071f2ad966fdd97a1fb5ba4 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 23 May 2009 09:36:18 +0000 Subject: [PATCH 007/512] NLA SoC: Adding more backend code/utilities * Data copying * Strip sorting --- source/blender/blenkernel/BKE_action.h | 3 + source/blender/blenkernel/BKE_nla.h | 9 +- source/blender/blenkernel/intern/action.c | 17 ++- source/blender/blenkernel/intern/anim_sys.c | 2 +- source/blender/blenkernel/intern/nla.c | 148 +++++++++++++++++++- 5 files changed, 173 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 67eb2ed58bf..cc10a4071a6 100644 --- a/source/blender/blenkernel/BKE_action.h +++ b/source/blender/blenkernel/BKE_action.h @@ -68,6 +68,9 @@ void make_local_action(struct bAction *act); /* Some kind of bounding box operation on the action */ void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden); +/* Does action have any motion data at all? */ +short action_has_motion(const struct bAction *act); + /* Action Groups API ----------------- */ /* Make the given Action Group the active one */ diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 3864d9da5f6..49796250633 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -42,6 +42,10 @@ void free_nlastrip(ListBase *strips, struct NlaStrip *strip); void free_nlatrack(ListBase *tracks, struct NlaTrack *nlt); void free_nladata(ListBase *tracks); +struct NlaStrip *copy_nlastrip(struct NlaStrip *strip); +struct NlaTrack *copy_nlatrack(struct NlaTrack *nlt); +void copy_nladata(ListBase *dst, ListBase *src); + struct NlaStrip *add_nlastrip(struct NlaTrack *nlt, struct bAction *act); struct NlaTrack *add_nlatrack(struct AnimData *adt); @@ -49,7 +53,10 @@ struct NlaTrack *add_nlatrack(struct AnimData *adt); /* API */ struct NlaTrack *BKE_nlatrack_find_active(ListBase *tracks); -void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt_a); +void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt); + +short BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); +void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); void BKE_nla_action_pushdown(struct AnimData *adt); diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index f2e3583c87b..bb458cc7e25 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -740,7 +740,22 @@ float get_action_frame_inv(Object *ob, float cframe) } - +/* Check if the given action has any keyframes */ +short action_has_motion(const bAction *act) +{ + FCurve *fcu; + + /* return on the first F-Curve that has some keyframes/samples defined */ + if (act) { + for (fcu= act->curves.first; fcu; fcu= fcu->next) { + if (fcu->totvert) + return 1; + } + } + + /* nothing found */ + return 0; +} /* Calculate the extents of given action */ void calc_action_range(const bAction *act, float *start, float *end, int incl_hidden) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index b47d734ef4f..f21fed416cc 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -153,7 +153,7 @@ AnimData *BKE_copy_animdata (AnimData *adt) dadt->action= copy_action(adt->action); /* duplicate NLA data */ - // XXX todo... + copy_nladata(&dadt->nla_tracks, &adt->nla_tracks); /* duplicate drivers (F-Curves) */ copy_fcurves(&dadt->drivers, &adt->drivers); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index ac767fe86cc..d062a2ab14b 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -145,7 +145,73 @@ void free_nladata (ListBase *tracks) /* Copying ------------------------------------------- */ -// TODO... +/* Copy NLA strip */ +NlaStrip *copy_nlastrip (NlaStrip *strip) +{ + NlaStrip *strip_d; + + /* sanity check */ + if (strip == NULL) + return NULL; + + /* make a copy */ + strip_d= MEM_dupallocN(strip); + strip_d->next= strip_d->prev= NULL; + + /* increase user-count of action */ + if (strip_d->act) + strip_d->act->id.us++; + + /* copy F-Curves and modifiers */ + copy_fcurves(&strip_d->fcurves, &strip->fcurves); + fcurve_copy_modifiers(&strip_d->modifiers, &strip->modifiers); + + /* return the strip */ + return strip_d; +} + +/* Copy NLA Track */ +NlaTrack *copy_nlatrack (NlaTrack *nlt) +{ + NlaStrip *strip, *strip_d; + NlaTrack *nlt_d; + + /* sanity check */ + if (nlt == NULL) + return NULL; + + /* make a copy */ + nlt_d= MEM_dupallocN(nlt); + nlt_d->next= nlt_d->prev= NULL; + + /* make a copy of all the strips, one at a time */ + nlt_d->strips.first= nlt_d->strips.last= NULL; + + for (strip= nlt->strips.first; strip; strip= strip->next) { + strip_d= copy_nlastrip(strip); + BLI_addtail(&nlt_d->strips, strip_d); + } + + /* return the copy */ + return nlt_d; +} + +/* Copy all NLA data */ +void copy_nladata (ListBase *dst, ListBase *src) +{ + NlaTrack *nlt, *nlt_d; + + /* sanity checks */ + if ELEM(NULL, dst, src) + return; + + /* copy each NLA-track, one at a time */ + for (nlt= src->first; nlt; nlt= nlt->next) { + /* make a copy, and add the copy to the destination list */ + nlt_d= copy_nlatrack(nlt); + BLI_addtail(dst, nlt_d); + } +} /* Adding ------------------------------------------- */ @@ -224,7 +290,7 @@ NlaTrack *add_nlatrack (AnimData *adt) /* *************************************************** */ /* Basic Utilities */ -/* States ------------------------------------------- */ +/* NLA-Tracks ---------------------------------------- */ /* Find the active NLA-track for the given stack */ NlaTrack *BKE_nlatrack_find_active (ListBase *tracks) @@ -265,6 +331,80 @@ void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) nlt_a->flag |= NLATRACK_ACTIVE; } +/* Check if there is any space in the last track to add the given strip */ +short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) +{ + NlaStrip *strip; + + /* sanity checks */ + if ((nlt == NULL) || IS_EQ(start, end)) + return 0; + if (start > end) { + puts("BKE_nlatrack_has_space error... start and end arguments swapped"); + SWAP(float, start, end); + } + + /* loop over NLA strips checking for any overlaps with this area... */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* if start frame of strip is past the target end-frame, that means that + * we've gone past the window we need to check for, so things are fine + */ + if (strip->start > end) + return 1; + + /* if the end of the strip is greater than either of the boundaries, the range + * must fall within the extents of the strip + */ + if ((strip->end > start) || (strip->end > end)) + return 0; + } + + /* if we are still here, we haven't encountered any overlapping strips */ + return 1; +} + +/* Rearrange the strips in the track so that they are always in order + * (usually only needed after a strip has been moved) + */ +void BKE_nlatrack_sort_strips (NlaTrack *nlt) +{ + ListBase tmp = {NULL, NULL}; + NlaStrip *strip, *sstrip; + + /* sanity checks */ + if ELEM(NULL, nlt, nlt->strips.first) + return; + + /* we simply perform insertion sort on this list, since it is assumed that per track, + * there are only likely to be at most 5-10 strips + */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + short not_added = 1; + + /* remove this strip from the list, and add it to the new list, searching from the end of + * the list, assuming that the lists are in order + */ + BLI_remlink(&nlt->strips, strip); + + for (sstrip= tmp.last; not_added && sstrip; sstrip= sstrip->prev) { + /* check if add after */ + if (sstrip->end < strip->start) { + BLI_insertlinkafter(&tmp, sstrip, strip); + not_added= 0; + break; + } + } + + /* add before first? */ + if (not_added) + BLI_addhead(&tmp, strip); + } + + /* reassign the start and end points of the strips */ + nlt->strips.first= tmp.first; + nlt->strips.last= tmp.last; +} + /* Tools ------------------------------------------- */ /* For the given AnimData block, add the active action to the NLA @@ -286,7 +426,9 @@ void BKE_nla_action_pushdown (AnimData *adt) /* if the action is empty, we also shouldn't try to add to stack, * as that will cause us grief down the track */ - // TODO: code a method for this, and report errors after... + // TODO: what about modifiers? + if (action_has_motion(adt->action) == 0) + return; /* add a new NLA track to house this action * - we could investigate trying to fit the action into an appropriately From 801eeb6423f4fcd3f2b2fac73cc5e65c96654c5b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 25 May 2009 13:07:54 +0000 Subject: [PATCH 008/512] NLA SoC: Groundwork for NLA UI Adapted the channel-filtering code for the other animation editors for eventual use by the NLA Editor. --- source/blender/blenloader/intern/readfile.c | 5 + source/blender/blenloader/intern/writefile.c | 5 +- .../blender/editors/animation/anim_filter.c | 464 +++++++++++------- source/blender/editors/include/ED_anim_api.h | 14 +- source/blender/editors/space_nla/space_nla.c | 9 +- source/blender/makesdna/DNA_action_types.h | 1 + source/blender/makesdna/DNA_space_types.h | 3 +- 7 files changed, 317 insertions(+), 184 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index cfb8baa4c84..c919a6dd6a9 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4679,6 +4679,11 @@ static void direct_link_screen(FileData *fd, bScreen *sc) sipo->ads= newdataadr(fd, sipo->ads); sipo->ghostCurves.first= sipo->ghostCurves.last= NULL; } + else if (sl->spacetype==SPACE_NLA) { + SpaceNla *snla= (SpaceNla*)sl; + + snla->ads= newdataadr(fd, snla->ads); + } else if (sl->spacetype==SPACE_OUTLINER) { SpaceOops *soops= (SpaceOops*) sl; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 0375feffb31..bb1ee15eaea 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1904,7 +1904,10 @@ static void write_screens(WriteData *wd, ListBase *scrbase) writestruct(wd, DATA, "SpaceSound", 1, sl); } else if(sl->spacetype==SPACE_NLA){ - writestruct(wd, DATA, "SpaceNla", 1, sl); + SpaceNla *snla= (SpaceNla *)sl; + + writestruct(wd, DATA, "SpaceNla", 1, snla); + if(snla->ads) writestruct(wd, DATA, "bDopeSheet", 1, snla->ads); } else if(sl->spacetype==SPACE_TIME){ writestruct(wd, DATA, "SpaceTime", 1, sl); diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index afad396607b..69e4fbfb08e 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -195,7 +195,7 @@ static short actedit_get_context (bAnimContext *ac, SpaceAction *saction) } } -/* ----------- Private Stuff - IPO Editor ------------- */ +/* ----------- Private Stuff - Graph Editor ------------- */ /* Get data being edited in Graph Editor (depending on current 'mode') */ static short graphedit_get_context (bAnimContext *ac, SpaceIpo *sipo) @@ -237,6 +237,26 @@ static short graphedit_get_context (bAnimContext *ac, SpaceIpo *sipo) } } +/* ----------- Private Stuff - NLA Editor ------------- */ + +/* Get data being edited in Graph Editor (depending on current 'mode') */ +static short nlaedit_get_context (bAnimContext *ac, SpaceNla *snla) +{ + /* init dopesheet data if non-existant (i.e. for old files) */ + if (snla->ads == NULL) + snla->ads= MEM_callocN(sizeof(bDopeSheet), "GraphEdit DopeSheet"); + + /* sync settings with current view status, then return appropriate data */ + /* update scene-pointer (no need to check for pinning yet, as not implemented) */ + snla->ads->source= (ID *)ac->scene; + snla->ads->filterflag |= ADS_FILTER_ONLYNLA; + + ac->datatype= ANIMCONT_NLA; + ac->data= snla->ads; + + return 1; +} + /* ----------- Public API --------------- */ /* Obtain current anim-data context, given that context info from Blender context has already been set @@ -264,6 +284,13 @@ short ANIM_animdata_context_getdata (bAnimContext *ac) ok= graphedit_get_context(ac, sipo); } break; + + case SPACE_NLA: + { + SpaceNla *snla= (SpaceNla *)sa->spacedata.first; + ok= nlaedit_get_context(ac, snla); + } + break; } } @@ -313,6 +340,39 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) /* quick macro to test if AnimData is usable for drivers */ #define ANIMDATA_HAS_DRIVERS(id) ((id)->adt && (id)->adt->drivers.first) +/* quick macro to test if AnimData is usable for NLA */ +#define ANIMDATA_HAS_NLA(id) ((id)->adt && (id)->adt->nla_tracks.first) + +/* quick macro to test for all three avove usability tests, performing the appropriate provided + * action for each when the AnimData context is appropriate. + * + * Priority order for this goes (most important, to least): NLA, Drivers, Keyframes + * + * - id: ID block which should have an AnimData pointer following it immediately, to use + * - nlaOk: line or block of code to execute for NLA case + * - driversOk: line or block of code to execute for Drivers case + * - keysOk: line or block of code for Keyframes case + */ +#define ANIMDATA_FILTER_CASES(id, nlaOk, driversOk, keysOk) \ + {\ + if (ads->filterflag & ADS_FILTER_ONLYNLA) {\ + if (ANIMDATA_HAS_NLA(id)) {\ + nlaOk\ + }\ + }\ + else if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) {\ + if (ANIMDATA_HAS_DRIVERS(id)) {\ + driversOk\ + }\ + }\ + else {\ + if (ANIMDATA_HAS_KEYS(id)) {\ + keysOk\ + }\ + }\ + } + + /* quick macro to test if a anim-channel (F-Curve, Group, etc.) is selected in an acceptable way */ #define ANIMCHANNEL_SELOK(test_func) \ ( !(filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) || \ @@ -494,6 +554,18 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->datatype= ALE_GPFRAME; } break; + + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)data; + + ale->flag= nlt->flag; + + // XXX or should this be done some other way? + ale->key_data= &nlt->strips; + ale->datatype= ALE_NLASTRIP; + } + break; } } @@ -610,6 +682,12 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter return items; } +static int animdata_filter_nla (ListBase *anim_data, NlaTrack *first, int filter_mode, void *owner, short ownertype, ID *owner_id) +{ + // FIXME + return 0; +} + static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_mode, void *owner, short ownertype, ID *owner_id) { bAnimListElem *ale; @@ -752,19 +830,18 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* firstly check that we actuallly have some materials, by gathering all materials in a temp list */ for (a=0; a < ob->totcol; a++) { Material *ma= give_current_material(ob, a); + short ok = 0; /* for now, if no material returned, skip (this shouldn't confuse the user I hope) */ if (ELEM(NULL, ma, ma->adt)) continue; - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) { - if (ANIMDATA_HAS_KEYS(ma) == 0) - continue; - } - else { - if (ANIMDATA_HAS_DRIVERS(ma) == 0) - continue; - } + /* check if ok */ + ANIMDATA_FILTER_CASES(ma, + ok=1;, + ok=1;, + ok=1;) + if (ok == 0) continue; /* make a temp list elem for this */ ld= MEM_callocN(sizeof(LinkData), "DopeSheet-MaterialCache"); @@ -801,16 +878,12 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, } } - /* add material's F-Curve or Driver channels? */ + /* add material's animation data */ if (FILTER_MAT_OBJD(ma) || (filter_mode & ANIMFILTER_CURVESONLY)) { - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) { - // XXX the 'owner' info here is still subject to improvement - items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma); - } - else { - // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) - items += animdata_filter_fcurves(anim_data, ma->adt->drivers.first, NULL, ma, ANIMTYPE_DSMAT, filter_mode, (ID *)ma); - } + ANIMDATA_FILTER_CASES(ma, + items += animdata_filter_nla(anim_data, ma->adt->nla_tracks.first, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);, + items += animdata_filter_fcurves(anim_data, ma->adt->drivers.first, NULL, ma, ANIMTYPE_DSMAT, filter_mode, (ID *)ma);, + items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);) } } } @@ -871,15 +944,11 @@ static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ad /* add object-data animation channels? */ if ((expanded) || (filter_mode & ANIMFILTER_CURVESONLY)) { - /* Action or Drivers? */ - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS) == 0) { - // XXX the 'owner' info here is still subject to improvement - items += animdata_filter_action(anim_data, iat->adt->action, filter_mode, iat, type, (ID *)iat); - } - else { - // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) - items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, iat, type, filter_mode, (ID *)iat); - } + /* filtering for channels - nla, drivers, keyframes */ + ANIMDATA_FILTER_CASES(iat, + items+= animdata_filter_nla(anim_data, iat->adt->nla_tracks.first, filter_mode, iat, type, (ID *)iat);, + items+= animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, iat, type, filter_mode, (ID *)iat);, + items += animdata_filter_action(anim_data, iat->adt->action, filter_mode, iat, type, (ID *)iat);) } /* return the number of items added to the list */ @@ -889,8 +958,10 @@ static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ad static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) { bAnimListElem *ale=NULL; + AnimData *adt = NULL; Object *ob= base->object; Key *key= ob_get_key(ob); + short obdata_ok = 0; int items = 0; /* add this object as a channel first */ @@ -909,73 +980,83 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if ( (EXPANDED_OBJC(ob) == 0) && !(filter_mode & ANIMFILTER_CURVESONLY) ) return items; - /* Action or Drivers */ - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS) == 0) { - /* Action? */ - if (ANIMDATA_HAS_KEYS(ob) /*&& !(ads->filterflag & ADS_FILTER_NOACTS)*/) { - AnimData *adt= ob->adt; - - /* include action-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, base, ANIMTYPE_OBJECT, (ID *)ob); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + /* Action, Drivers, or NLA */ + if (ob->adt) { + adt= ob->adt; + ANIMDATA_FILTER_CASES(ob, + { /* nla */ +#if 0 + /* include nla-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } +#endif + + /* add NLA tracks */ + if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) + items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); + }, + { /* drivers */ + /* include drivers-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLDRIVERS, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add F-Curve channels (drivers are F-Curves) */ + if (EXPANDED_DRVD(adt) || !(filter_mode & ANIMFILTER_CHANNELS)) { + // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) + items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, ob, ANIMTYPE_OBJECT, filter_mode, (ID *)ob); + } + }, + { /* action (keyframes) */ + /* include action-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add F-Curve channels? */ + if (EXPANDED_ACTC(adt->action) || !(filter_mode & ANIMFILTER_CHANNELS)) { + // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) + items += animdata_filter_action(anim_data, adt->action, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } - - /* add F-Curve channels? */ - if (EXPANDED_ACTC(adt->action) || !(filter_mode & ANIMFILTER_CHANNELS)) { - // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) - items += animdata_filter_action(anim_data, adt->action, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); - } - } - } - else { - /* Drivers */ - if (ANIMDATA_HAS_DRIVERS(ob)) { - AnimData *adt= ob->adt; - - /* include drivers-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLDRIVERS, base, ANIMTYPE_OBJECT, (ID *)ob); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } - - /* add F-Curve channels (drivers are F-Curves) */ - if (EXPANDED_DRVD(adt) || !(filter_mode & ANIMFILTER_CHANNELS)) { - // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) - items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, ob, ANIMTYPE_OBJECT, filter_mode, (ID *)ob); - } - } + ) } + /* ShapeKeys? */ if ((key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)) { - /* Animation or Drivers */ - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS) == 0) { - /* include shapekey-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(key, ANIMTYPE_DSSKEY, base, ANIMTYPE_OBJECT, (ID *)ob); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + adt= key->adt; + ANIMDATA_FILTER_CASES(key, + { /* nla */ +#if 0 + /* include nla-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } } - } - - /* add channels */ - if (FILTER_SKE_OBJD(key) || (filter_mode & ANIMFILTER_CURVESONLY)) { - items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); - } - } - else { - /* Drivers */ - if (ANIMDATA_HAS_DRIVERS(key)) { - AnimData *adt= key->adt; +#endif + /* add NLA tracks */ + if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) + items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); + }, + { /* drivers */ /* include shapekey-expand widget? */ if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { ale= make_new_animlistelem(key, ANIMTYPE_DSSKEY, base, ANIMTYPE_OBJECT, (ID *)ob); @@ -985,15 +1066,28 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B } } - /* add F-Curve channels (drivers are F-Curves) */ - if (FILTER_SKE_OBJD(key)/*EXPANDED_DRVD(adt)*/ || !(filter_mode & ANIMFILTER_CHANNELS)) { - // XXX owner info is messed up now... - items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, ob, ANIMTYPE_OBJECT, filter_mode, (ID *)key); + /* add channels */ + if (FILTER_SKE_OBJD(key) || (filter_mode & ANIMFILTER_CURVESONLY)) { + items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); + } + }, + { /* action (keyframes) */ + /* include shapekey-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(key, ANIMTYPE_DSSKEY, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add channels */ + if (FILTER_SKE_OBJD(key) || (filter_mode & ANIMFILTER_CURVESONLY)) { + items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } - } + ) } - /* Materials? */ if ((ob->totcol) && !(ads->filterflag & ADS_FILTER_NOMAT)) @@ -1006,14 +1100,10 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B Camera *ca= (Camera *)ob->data; if ((ads->filterflag & ADS_FILTER_NOCAM) == 0) { - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) { - if (ANIMDATA_HAS_KEYS(ca)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } - else { - if (ANIMDATA_HAS_DRIVERS(ca)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } + ANIMDATA_FILTER_CASES(ca, + obdata_ok= 1;, + obdata_ok= 1;, + obdata_ok= 1;) } } break; @@ -1022,14 +1112,10 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B Lamp *la= (Lamp *)ob->data; if ((ads->filterflag & ADS_FILTER_NOLAM) == 0) { - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) { - if (ANIMDATA_HAS_KEYS(la)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } - else { - if (ANIMDATA_HAS_DRIVERS(la)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } + ANIMDATA_FILTER_CASES(la, + obdata_ok= 1;, + obdata_ok= 1;, + obdata_ok= 1;) } } break; @@ -1038,18 +1124,16 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B Curve *cu= (Curve *)ob->data; if ((ads->filterflag & ADS_FILTER_NOCUR) == 0) { - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) { - if (ANIMDATA_HAS_KEYS(cu)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } - else { - if (ANIMDATA_HAS_DRIVERS(cu)) - items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); - } + ANIMDATA_FILTER_CASES(cu, + obdata_ok= 1;, + obdata_ok= 1;, + obdata_ok= 1;) } } break; } + if (obdata_ok) + items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); /* return the number of items added to the list */ return items; @@ -1058,6 +1142,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads, Scene *sce, int filter_mode) { World *wo= sce->world; + AnimData *adt= NULL; bAnimListElem *ale; int items = 0; @@ -1077,74 +1162,82 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads if ( (EXPANDED_SCEC(sce) == 0) && !(filter_mode & ANIMFILTER_CURVESONLY) ) return items; - /* Action or Drivers */ - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS) == 0) { - /* Action? */ - if (ANIMDATA_HAS_KEYS(sce) && !(ads->filterflag & ADS_FILTER_NOSCE)) { - AnimData *adt= sce->adt; - - /* include action-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, sce, ANIMTYPE_SCENE, (ID *)sce); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + /* Action, Drivers, or NLA for Scene */ + if ((ads->filterflag & ADS_FILTER_NOSCE) == 0) { + adt= sce->adt; + ANIMDATA_FILTER_CASES(sce, + { /* nla */ +#if 0 + /* include nla-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_SCENE (ID *)sce); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } +#endif + + /* add NLA tracks */ + if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) + items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); + }, + { /* drivers */ + /* include drivers-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLDRIVERS, sce, ANIMTYPE_SCENE, (ID *)sce); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add F-Curve channels (drivers are F-Curves) */ + if (EXPANDED_DRVD(adt) || !(filter_mode & ANIMFILTER_CHANNELS)) { + items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, sce, ANIMTYPE_SCENE, filter_mode, (ID *)sce); + } + }, + { /* action */ + /* include action-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, sce, ANIMTYPE_SCENE, (ID *)sce); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add F-Curve channels? */ + if (EXPANDED_ACTC(adt->action) || !(filter_mode & ANIMFILTER_CHANNELS)) { + items += animdata_filter_action(anim_data, adt->action, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); } } - - /* add F-Curve channels? */ - if (EXPANDED_ACTC(adt->action) || !(filter_mode & ANIMFILTER_CHANNELS)) { - items += animdata_filter_action(anim_data, adt->action, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); - } - } + ) } - else { - /* Drivers */ - if (ANIMDATA_HAS_DRIVERS(sce) && !(ads->filterflag & ADS_FILTER_NOSCE)) { - AnimData *adt= sce->adt; - - /* include drivers-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLDRIVERS, sce, ANIMTYPE_SCENE, (ID *)sce); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } - - /* add F-Curve channels (drivers are F-Curves) */ - if (EXPANDED_DRVD(adt) || !(filter_mode & ANIMFILTER_CHANNELS)) { - items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, sce, ANIMTYPE_SCENE, filter_mode, (ID *)sce); - } - } - } - + /* world */ if ((wo && wo->adt) && !(ads->filterflag & ADS_FILTER_NOWOR)) { - /* Animation or Drivers */ - if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS) == 0) { - AnimData *adt= wo->adt; - - /* include world-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(wo, ANIMTYPE_DSWOR, sce, ANIMTYPE_SCENE, (ID *)sce); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + /* Action, Drivers, or NLA for World */ + adt= wo->adt; + ANIMDATA_FILTER_CASES(wo, + { /* nla */ +#if 0 + /* include nla-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_DSWOR (ID *)wo); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } } - } - - /* add channels */ - if (FILTER_WOR_SCED(wo) || (filter_mode & ANIMFILTER_CURVESONLY)) { - items += animdata_filter_action(anim_data, adt->action, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); - } - } - else { - /* Drivers */ - if (ANIMDATA_HAS_DRIVERS(wo)) { - AnimData *adt= wo->adt; +#endif - /* include shapekey-expand widget? */ + /* add NLA tracks */ + if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) + items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); + }, + { /* drivers */ + /* include world-expand widget? */ if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { ale= make_new_animlistelem(wo, ANIMTYPE_DSWOR, sce, ANIMTYPE_SCENE, (ID *)wo); if (ale) { @@ -1158,8 +1251,23 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads // XXX owner info is messed up now... items += animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, wo, ANIMTYPE_DSWOR, filter_mode, (ID *)wo); } + }, + { /* action */ + /* include world-expand widget? */ + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(wo, ANIMTYPE_DSWOR, sce, ANIMTYPE_SCENE, (ID *)sce); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + /* add channels */ + if (FILTER_WOR_SCED(wo) || (filter_mode & ANIMFILTER_CURVESONLY)) { + items += animdata_filter_action(anim_data, adt->action, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); + } } - } + ) } /* return the number of items added to the list */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index efc0a0b9a57..75c10f957cc 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -75,8 +75,9 @@ typedef enum eAnimCont_Types { ANIMCONT_SHAPEKEY, /* shapekey (Key) */ ANIMCONT_GPENCIL, /* grease pencil (screen) */ ANIMCONT_DOPESHEET, /* dopesheet (bDopesheet) */ - ANIMCONT_FCURVES, /* animation F-Curves (bDopesheet) */ // XXX + ANIMCONT_FCURVES, /* animation F-Curves (bDopesheet) */ ANIMCONT_DRIVERS, /* drivers (bDopesheet) */ + ANIMCONT_NLA, /* nla (bDopesheet) */ } eAnimCont_Types; /* --------------- Channels -------------------- */ @@ -92,10 +93,10 @@ typedef struct bAnimListElem { int flag; /* copy of elem's flags for quick access */ int index; /* copy of adrcode where applicable */ - void *key_data; /* motion data - ipo or ipo-curve */ + void *key_data; /* motion data - mostly F-Curves, but can be other types too */ short datatype; /* type of motion data to expect */ - struct ID *id; /* ID block that channel is attached to (may be used */ + struct ID *id; /* ID block that channel is attached to (may be used */ void *owner; /* group or channel which acts as this channel's owner */ short ownertype; /* type of owner */ @@ -128,6 +129,8 @@ typedef enum eAnim_ChannelType { ANIMTYPE_GPDATABLOCK, ANIMTYPE_GPLAYER, + + ANIMTYPE_NLATRACK, } eAnim_ChannelType; /* types of keyframe data in bAnimListElem */ @@ -135,6 +138,7 @@ typedef enum eAnim_KeyType { ALE_NONE = 0, /* no keyframe data */ ALE_FCURVE, /* F-Curve */ ALE_GPFRAME, /* Grease Pencil Frames */ + ALE_NLASTRIP, /* NLA Strips */ // XXX the following are for summaries... should these be kept? ALE_SCE, /* Scene summary */ @@ -202,6 +206,10 @@ typedef enum eAnimFilter_Flags { #define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED)==0) #define SEL_GPL(gpl) ((gpl->flag & GP_LAYER_ACTIVE) || (gpl->flag & GP_LAYER_SELECT)) +/* NLA only */ +#define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED) +#define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED)==0) + /* -------------- Channel Defines -------------- */ /* channel heights */ diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 188315c73fb..cdaabe9e9de 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -72,6 +72,9 @@ static SpaceLink *nla_new(const bContext *C) snla= MEM_callocN(sizeof(SpaceNla), "initnla"); snla->spacetype= SPACE_NLA; + /* allocate DopeSheet data for NLA Editor */ + snla->ads= MEM_callocN(sizeof(bDopeSheet), "NLAEdit DopeSheet"); + /* header */ ar= MEM_callocN(sizeof(ARegion), "header for nla"); @@ -123,8 +126,12 @@ static SpaceLink *nla_new(const bContext *C) /* not spacelink itself */ static void nla_free(SpaceLink *sl) { -// SpaceNla *snla= (SpaceNla*) sl; + SpaceNla *snla= (SpaceNla*) sl; + if (snla->ads) { + BLI_freelistN(&snla->ads->chanbase); + MEM_freeN(snla->ads); + } } diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index cf54d69bb8b..9643e012ad4 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -287,6 +287,7 @@ typedef enum DOPESHEET_FILTERFLAG { /* general filtering */ ADS_FILTER_ONLYSEL = (1<<0), ADS_FILTER_ONLYDRIVERS = (1<<1), + ADS_FILTER_ONLYNLA = (1<<2), /* datatype-based filtering */ ADS_FILTER_NOSHAPEKEYS = (1<<6), diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 0a4fe1c5814..2dea6c4c969 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -244,10 +244,11 @@ typedef struct SpaceNla { short blockhandler[8]; - int filterflag; /* filtering flags (similar to the ones used for Keyframe Editors) */ short autosnap; /* this uses the same settings as autosnap for Action Editor */ short flag; + int pad; + struct bDopeSheet *ads; View2D v2d; /* depricated, copied to region */ } SpaceNla; From cee915ab56ebc02f246b12ff263f9a30edb1c5c4 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 29 May 2009 12:26:47 +0000 Subject: [PATCH 009/512] NLA SoC: Start of UI Drawing Code for NLA Editor In this commit, I've only setup the drawing code for the channels list. Only the drawing of the 'active action' dummy-line has been tested so far. --- source/blender/blenloader/intern/readfile.c | 2 +- .../blender/editors/animation/anim_filter.c | 75 ++- .../editors/animation/keyframes_draw.c | 2 - source/blender/editors/include/ED_anim_api.h | 1 + source/blender/editors/include/UI_view2d.h | 2 + source/blender/editors/interface/resources.c | 19 +- source/blender/editors/interface/view2d.c | 23 +- .../blender/editors/space_graph/space_graph.c | 2 +- source/blender/editors/space_nla/nla_draw.c | 480 ++++++++++++++++++ source/blender/editors/space_nla/nla_edit.c | 75 +++ source/blender/editors/space_nla/nla_header.c | 76 ++- source/blender/editors/space_nla/nla_intern.h | 22 + source/blender/editors/space_nla/space_nla.c | 184 ++++++- source/blender/makesdna/DNA_action_types.h | 11 +- 14 files changed, 902 insertions(+), 72 deletions(-) create mode 100644 source/blender/editors/space_nla/nla_draw.c create mode 100644 source/blender/editors/space_nla/nla_edit.c diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 192016f712d..2050e5da3ff 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5680,7 +5680,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); ar->v2d.scroll |= (V2D_SCROLL_RIGHT); ar->v2d.keepzoom= V2D_LOCKZOOM_Y; - ar->v2d.align= V2D_ALIGN_NO_POS_Y; + ar->v2d.align= V2D_ALIGN_NO_NEG_Y; ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; break; } diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 69e4fbfb08e..f12e9a51f32 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -244,7 +244,7 @@ static short nlaedit_get_context (bAnimContext *ac, SpaceNla *snla) { /* init dopesheet data if non-existant (i.e. for old files) */ if (snla->ads == NULL) - snla->ads= MEM_callocN(sizeof(bDopeSheet), "GraphEdit DopeSheet"); + snla->ads= MEM_callocN(sizeof(bDopeSheet), "NlaEdit DopeSheet"); /* sync settings with current view status, then return appropriate data */ /* update scene-pointer (no need to check for pinning yet, as not implemented) */ @@ -359,6 +359,9 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) if (ANIMDATA_HAS_NLA(id)) {\ nlaOk\ }\ + else if (!(ads->filterflag & ADS_FILTER_NLA_NOACT) && ANIMDATA_HAS_KEYS(id)) {\ + nlaOk\ + }\ }\ else if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) {\ if (ANIMDATA_HAS_DRIVERS(id)) {\ @@ -566,6 +569,13 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->datatype= ALE_NLASTRIP; } break; + case ANIMTYPE_NLAACTION: + { + /* nothing to include for now... nothing editable from NLA-perspective here */ + ale->key_data= NULL; + ale->datatype= ALE_NONE; + } + break; } } @@ -594,7 +604,6 @@ static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionG if ( ANIMCHANNEL_SELOK(SEL_FCU(fcu)) ) { /* only include if this curve is active */ if (!(filter_mode & ANIMFILTER_ACTIVE) || (fcu->flag & FCURVE_ACTIVE)) { - /* owner/ownertype will be either object or action-channel, depending if it was dopesheet or part of an action */ ale= make_new_animlistelem(fcu, ANIMTYPE_FCURVE, owner, ownertype, owner_id); if (ale) { @@ -682,10 +691,49 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter return items; } -static int animdata_filter_nla (ListBase *anim_data, NlaTrack *first, int filter_mode, void *owner, short ownertype, ID *owner_id) +static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_mode, void *owner, short ownertype, ID *owner_id) { - // FIXME - return 0; + bAnimListElem *ale; + NlaTrack *nlt; + int items = 0; + + /* loop over NLA Tracks - assume that the caller of this has already checked that these should be included */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + /* only work with this channel and its subchannels if it is editable */ + if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_NLT(nlt)) { + /* only include this track if selected in a way consistent with the filtering requirements */ + if ( ANIMCHANNEL_SELOK(SEL_NLT(nlt)) ) { + /* only include if this track is active */ + // XXX keep this? + if (!(filter_mode & ANIMFILTER_ACTIVE) || (nlt->flag & NLATRACK_ACTIVE)) { + ale= make_new_animlistelem(nlt, ANIMTYPE_NLATRACK, owner, ownertype, owner_id); + + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + } + } + } + + /* if showing channels, include active action */ + if (filter_mode & ANIMFILTER_CHANNELS) { + /* there isn't really anything editable here, so skip if need editable */ + // TODO: currently, selection isn't checked since it doesn't matter + if ((filter_mode & ANIMFILTER_FOREDIT) == 0) { + /* just add the action track now */ + ale= make_new_animlistelem(adt->action, ANIMTYPE_NLAACTION, owner, ownertype, owner_id); + + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + } + + /* return the number of items added to the list */ + return items; } static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_mode, void *owner, short ownertype, ID *owner_id) @@ -881,7 +929,7 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* add material's animation data */ if (FILTER_MAT_OBJD(ma) || (filter_mode & ANIMFILTER_CURVESONLY)) { ANIMDATA_FILTER_CASES(ma, - items += animdata_filter_nla(anim_data, ma->adt->nla_tracks.first, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);, + items += animdata_filter_nla(anim_data, ma->adt, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);, items += animdata_filter_fcurves(anim_data, ma->adt->drivers.first, NULL, ma, ANIMTYPE_DSMAT, filter_mode, (ID *)ma);, items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);) } @@ -946,7 +994,7 @@ static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ad if ((expanded) || (filter_mode & ANIMFILTER_CURVESONLY)) { /* filtering for channels - nla, drivers, keyframes */ ANIMDATA_FILTER_CASES(iat, - items+= animdata_filter_nla(anim_data, iat->adt->nla_tracks.first, filter_mode, iat, type, (ID *)iat);, + items+= animdata_filter_nla(anim_data, iat->adt, filter_mode, iat, type, (ID *)iat);, items+= animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, iat, type, filter_mode, (ID *)iat);, items += animdata_filter_action(anim_data, iat->adt->action, filter_mode, iat, type, (ID *)iat);) } @@ -997,8 +1045,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B #endif /* add NLA tracks */ - if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) - items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); + items += animdata_filter_nla(anim_data, adt, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); }, { /* drivers */ /* include drivers-expand widget? */ @@ -1053,8 +1100,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B #endif /* add NLA tracks */ - if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) - items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); + items += animdata_filter_nla(anim_data, adt, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); }, { /* drivers */ /* include shapekey-expand widget? */ @@ -1179,8 +1225,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads #endif /* add NLA tracks */ - if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) - items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); + items += animdata_filter_nla(anim_data, adt, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); }, { /* drivers */ /* include drivers-expand widget? */ @@ -1233,8 +1278,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads #endif /* add NLA tracks */ - if (/*EXPANDED_NLTD(adt) ||*/ !(filter_mode & ANIMFILTER_CHANNELS)) - items += animdata_filter_nla(anim_data, adt->nla_tracks.first, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); + items += animdata_filter_nla(anim_data, adt, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); }, { /* drivers */ /* include world-expand widget? */ @@ -1508,6 +1552,7 @@ int ANIM_animdata_filter (bAnimContext *ac, ListBase *anim_data, int filter_mode case ANIMCONT_DOPESHEET: case ANIMCONT_FCURVES: case ANIMCONT_DRIVERS: + case ANIMCONT_NLA: items= animdata_filter_dopesheet(anim_data, data, filter_mode); break; } diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index cfbd6d2bced..144cd68f6df 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -412,8 +412,6 @@ void scene_to_keylist(Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc * /* get filterflag */ if (ads) filterflag= ads->filterflag; - else if ((aki) && (aki->actmode == -1)) /* only set like this by NLA */ - filterflag= ADS_FILTER_NLADUMMY; else filterflag= 0; diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 75c10f957cc..7629fc29352 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -131,6 +131,7 @@ typedef enum eAnim_ChannelType { ANIMTYPE_GPLAYER, ANIMTYPE_NLATRACK, + ANIMTYPE_NLAACTION, } eAnim_ChannelType; /* types of keyframe data in bAnimListElem */ diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index 7ff312151c5..c81ca909318 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -52,6 +52,8 @@ enum { V2D_COMMONVIEW_STANDARD, /* listview (i.e. Outliner) */ V2D_COMMONVIEW_LIST, + /* stackview (this is basically a list where new items are added at the top) */ + V2D_COMMONVIEW_STACK, /* headers (this is basically the same as listview, but no y-panning) */ V2D_COMMONVIEW_HEADER, /* ui region containing panels */ diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 1cb58c986d0..f0032809631 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -501,7 +501,10 @@ void ui_theme_init_userdef(void) btheme->tact= btheme->tipo; SETCOL(btheme->tact.strip, 12, 10, 10, 128); SETCOL(btheme->tact.strip_select, 255, 140, 0, 255); - + + /* space nla */ + btheme->tnla= btheme->tact; + /* space file */ /* to have something initialized */ btheme->tfile= btheme->tv3d; @@ -518,20 +521,6 @@ void ui_theme_init_userdef(void) SETCOL(btheme->tfile.scene, 250, 250, 250, 255); - - - /* space nla */ - btheme->tnla= btheme->tv3d; - SETCOL(btheme->tnla.back, 116, 116, 116, 255); - SETCOL(btheme->tnla.text, 0, 0, 0, 255); - SETCOL(btheme->tnla.text_hi, 255, 255, 255, 255); - SETCOL(btheme->tnla.grid, 94, 94, 94, 255); - SETCOL(btheme->tnla.shade1, 172, 172, 172, 255); // sliders - SETCOL(btheme->tnla.shade2, 84, 44, 31, 100); // bar - SETCOL(btheme->tnla.hilite, 17, 27, 60, 100); // bar - SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255); - SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255); - /* space seq */ btheme->tseq= btheme->tv3d; SETCOL(btheme->tseq.back, 116, 116, 116, 255); diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index f2fc2deefbb..639f83d0d09 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -207,6 +207,23 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) } break; + /* 'stack view' - practically the same as list/channel view, except is located in the pos y half instead. + * zoom, aspect ratio, and alignment restrictions are set here */ + case V2D_COMMONVIEW_STACK: + { + /* zoom + aspect ratio are locked */ + v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + v2d->minzoom= v2d->maxzoom= 1.0f; + + /* tot rect has strictly regulated placement, and must only occur in +/+ quadrant */ + v2d->align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y); + v2d->keeptot = V2D_KEEPTOT_STRICT; + tot_changed= 1; + + /* scroller settings are currently not set here... that is left for regions... */ + } + break; + /* 'header' regions - zoom, aspect ratio, alignment, and panning restrictions are set here */ case V2D_COMMONVIEW_HEADER: { @@ -245,14 +262,14 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->tot.xmin= 0.0f; v2d->tot.xmax= winx; - + v2d->tot.ymax= 0.0f; v2d->tot.ymin= -winy; - + v2d->cur= v2d->tot; } break; - + /* other view types are completely defined using their own settings already */ default: /* we don't do anything here, as settings should be fine, but just make sure that rect */ diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 74002f64187..ef42b009bd4 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -192,7 +192,7 @@ static SpaceLink *graph_duplicate(SpaceLink *sl) SpaceIpo *sipon= MEM_dupallocN(sl); /* clear or remove stuff from old */ - //sipon->ipokey.first= sipon->ipokey.last= NULL; + BLI_duplicatelist(&sipon->ghostCurves, &((SpaceIpo *)sl)->ghostCurves); sipon->ads= MEM_dupallocN(sipon->ads); return (SpaceLink *)sipon; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c new file mode 100644 index 00000000000..8b8ae7c5b8b --- /dev/null +++ b/source/blender/editors/space_nla/nla_draw.c @@ -0,0 +1,480 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * + * Contributor(s): Joshua Leung (major recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "DNA_listBase.h" +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_armature_types.h" +#include "DNA_camera_types.h" +#include "DNA_curve_types.h" +#include "DNA_object_types.h" +#include "DNA_screen_types.h" +#include "DNA_scene_types.h" +#include "DNA_space_types.h" +#include "DNA_constraint_types.h" +#include "DNA_key_types.h" +#include "DNA_lamp_types.h" +#include "DNA_material_types.h" +#include "DNA_userdef_types.h" +#include "DNA_windowmanager_types.h" +#include "DNA_world_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_context.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "ED_anim_api.h" +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_interface_icons.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "ED_markers.h" + +#include "nla_intern.h" // own include + +/* XXX */ +extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); + +/* *********************************************** */ + +/* *********************************************** */ +/* Channel List */ + +void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + View2D *v2d= &ar->v2d; + float x= 0.0f, y= 0.0f; + int items, height; + + /* build list of channels to draw */ + filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); + items= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* Update max-extent of channels here (taking into account scrollers): + * - this is done to allow the channel list to be scrollable, but must be done here + * to avoid regenerating the list again and/or also because channels list is drawn first + * - offset of NLACHANNEL_HEIGHT*2 is added to the height of the channels, as first is for + * start of list offset, and the second is as a correction for the scrollers. + */ + height= ((items*NLACHANNEL_STEP) + (NLACHANNEL_HEIGHT*2)); + if (height > (v2d->mask.ymax - v2d->mask.ymin)) { + /* don't use totrect set, as the width stays the same + * (NOTE: this is ok here, the configuration is pretty straightforward) + */ + v2d->tot.ymax= (float)(height); + } + + /* loop through channels, and set up drawing depending on their type */ + y= (float)(-NLACHANNEL_FIRST); + + for (ale= anim_data.first; ale; ale= ale->next) { + const float yminc= (float)(y - NLACHANNEL_HEIGHT_HALF); + const float ymaxc= (float)(y + NLACHANNEL_HEIGHT_HALF); + const float ydatac= (float)(y - 7); + + /* check if visible */ + if ( IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || + IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax) ) + { + short indent= 0, offset= 0, sel= 0, group= 0; + int expand= -1, protect = -1, special= -1, mute = -1; + char name[128]; + + /* determine what needs to be drawn */ + switch (ale->type) { + case ANIMTYPE_SCENE: /* scene */ + { + Scene *sce= (Scene *)ale->data; + + group= 4; + indent= 0; + + special= ICON_SCENE_DATA; + + /* only show expand if there are any channels */ + if (EXPANDED_SCEC(sce)) + expand= ICON_TRIA_UP; + else + expand= ICON_TRIA_RIGHT; + + sel = SEL_SCEC(sce); + strcpy(name, sce->id.name+2); + } + break; + case ANIMTYPE_OBJECT: /* object */ + { + Base *base= (Base *)ale->data; + Object *ob= base->object; + + group= 4; + indent= 0; + + /* icon depends on object-type */ + if (ob->type == OB_ARMATURE) + special= ICON_ARMATURE_DATA; + else + special= ICON_OBJECT_DATA; + + /* only show expand if there are any channels */ + if (EXPANDED_OBJC(ob)) + expand= ICON_TRIA_UP; + else + expand= ICON_TRIA_RIGHT; + + sel = SEL_OBJC(base); + strcpy(name, ob->id.name+2); + } + break; + case ANIMTYPE_FILLMATD: /* object materials (dopesheet) expand widget */ + { + Object *ob = (Object *)ale->data; + + group = 4; + indent = 1; + special = ICON_MATERIAL_DATA; + + if (FILTER_MAT_OBJC(ob)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, "Materials"); + } + break; + + + case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */ + { + Material *ma = (Material *)ale->data; + + group = 0; + indent = 0; + special = ICON_MATERIAL_DATA; + offset = 21; + + if (FILTER_MAT_OBJD(ma)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, ma->id.name+2); + } + break; + case ANIMTYPE_DSLAM: /* lamp (dopesheet) expand widget */ + { + Lamp *la = (Lamp *)ale->data; + + group = 4; + indent = 1; + special = ICON_LAMP_DATA; + + if (FILTER_LAM_OBJD(la)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, la->id.name+2); + } + break; + case ANIMTYPE_DSCAM: /* camera (dopesheet) expand widget */ + { + Camera *ca = (Camera *)ale->data; + + group = 4; + indent = 1; + special = ICON_CAMERA_DATA; + + if (FILTER_CAM_OBJD(ca)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, ca->id.name+2); + } + break; + case ANIMTYPE_DSCUR: /* curve (dopesheet) expand widget */ + { + Curve *cu = (Curve *)ale->data; + + group = 4; + indent = 1; + special = ICON_CURVE_DATA; + + if (FILTER_CUR_OBJD(cu)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, cu->id.name+2); + } + break; + case ANIMTYPE_DSSKEY: /* shapekeys (dopesheet) expand widget */ + { + Key *key= (Key *)ale->data; + + group = 4; + indent = 1; + special = ICON_SHAPEKEY_DATA; // XXX + + if (FILTER_SKE_OBJD(key)) + expand = ICON_TRIA_UP; + else + expand = ICON_TRIA_RIGHT; + + //sel = SEL_OBJC(base); + strcpy(name, "Shape Keys"); + } + break; + case ANIMTYPE_DSWOR: /* world (dopesheet) expand widget */ + { + World *wo= (World *)ale->data; + + group = 4; + indent = 1; + special = ICON_WORLD_DATA; + + if (FILTER_WOR_SCED(wo)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, wo->id.name+2); + } + break; + + case ANIMTYPE_NLATRACK: /* NLA Track */ + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + indent= 0; + + if (ale->id) { + /* special exception for materials */ + if (GS(ale->id->name) == ID_MA) { + offset= 21; + indent= 1; + } + else + offset= 14; + } + else + offset= 0; + + /* FIXME: 'solo' as the 'special' button? + * - need special icons for these + */ + if (nlt->flag & NLATRACK_SOLO) + special= ICON_LAYER_ACTIVE; + else + special= ICON_LAYER_USED; + + if (nlt->flag & NLATRACK_MUTED) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + + if (EDITABLE_NLT(nlt)) + protect = ICON_UNLOCKED; + else + protect = ICON_LOCKED; + + strcpy(name, nlt->name); + } + break; + case ANIMTYPE_NLAACTION: /* NLA Action-Line */ + { + bAction *act= (bAction *)ale->data; + + group = 5; + + if (ale->id) { + /* special exception for materials */ + if (GS(ale->id->name) == ID_MA) { + offset= 21; + indent= 1; + } + else + offset= 14; + } + else + offset= 0; + + special = ICON_ACTION; + + if (act) + sprintf(name, "ActAction: <%s>", act->id.name+2); + else + sprintf(name, ""); + } + break; + } + + /* now, start drawing based on this information */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + /* draw backing strip behind channel name */ + if (group == 4) { + /* only used in dopesheet... */ + if (ELEM(ale->type, ANIMTYPE_SCENE, ANIMTYPE_OBJECT)) { + /* object channel - darker */ + UI_ThemeColor(TH_DOPESHEET_CHANNELOB); + uiSetRoundBox((expand == ICON_TRIA_UP)? (8):(1|8)); + gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 8); + } + else { + /* sub-object folders - lighter */ + UI_ThemeColor(TH_DOPESHEET_CHANNELSUBOB); + + offset += 7 * indent; + glBegin(GL_QUADS); + glVertex2f(x+offset, yminc); + glVertex2f(x+offset, ymaxc); + glVertex2f((float)ACHANNEL_NAMEWIDTH, ymaxc); + glVertex2f((float)ACHANNEL_NAMEWIDTH, yminc); + glEnd(); + + /* clear group value, otherwise we cause errors... */ + group = 0; + } + } + else if (group == 5) { + /* Action Line */ + if (ale->data) + glColor3f(0.8f, 0.2f, 0.0f); // reddish color - hardcoded for now + else + glColor3f(0.6f, 0.5f, 0.5f); // greyish-red color - hardcoded for now + + offset += 7 * indent; + uiSetRoundBox(15); + gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 8); + + /* clear group value, otherwise we cause errors... */ + group = 0; + } + else { + /* for normal channels + * - use 3 shades of color group/standard color for 3 indention level + */ + UI_ThemeColorShade(TH_HEADER, ((indent==0)?20: (indent==1)?-20: -40)); + + indent += group; + offset += 7 * indent; + glBegin(GL_QUADS); + glVertex2f(x+offset, yminc); + glVertex2f(x+offset, ymaxc); + glVertex2f((float)NLACHANNEL_NAMEWIDTH, ymaxc); + glVertex2f((float)NLACHANNEL_NAMEWIDTH, yminc); + glEnd(); + } + + /* draw expand/collapse triangle */ + if (expand > 0) { + UI_icon_draw(x+offset, ydatac, expand); + offset += 17; + } + + /* draw special icon indicating certain data-types */ + if (special > -1) { + /* for normal channels */ + UI_icon_draw(x+offset, ydatac, special); + offset += 17; + } + glDisable(GL_BLEND); + + /* draw name */ + if (sel) + UI_ThemeColor(TH_TEXT_HI); + else + UI_ThemeColor(TH_TEXT); + offset += 3; + UI_DrawString(x+offset, y-4, name); + + /* reset offset - for RHS of panel */ + offset = 0; + + /* set blending again, as text drawing may clear it */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + /* draw protect 'lock' */ + if (protect > -1) { + offset = 16; + UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, protect); + } + + /* draw mute 'eye' */ + if (mute > -1) { + offset += 16; + UI_icon_draw((float)(NLACHANNEL_NAMEWIDTH-offset), ydatac, mute); + } + + /* draw action 'push-down' */ + if (ale->type == ANIMTYPE_NLAACTION) { + offset += 16; + UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_FREEZE); + } + + glDisable(GL_BLEND); + } + + /* adjust y-position for next one */ + y += NLACHANNEL_STEP; + } + + /* free tempolary channels */ + BLI_freelistN(&anim_data); +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c new file mode 100644 index 00000000000..d9d0e5528ae --- /dev/null +++ b/source/blender/editors/space_nla/nla_edit.c @@ -0,0 +1,75 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * + * Contributor(s): Joshua Leung (major recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_nla_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_context.h" +#include "BKE_report.h" +#include "BKE_screen.h" + +#include "ED_anim_api.h" +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "ED_markers.h" + +#include "nla_intern.h" // own include + +/* *********************************************** */ + + +/* *********************************************** */ + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 0f6b77da6f5..0dcd3198db0 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -29,6 +29,10 @@ #include #include +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_nla_types.h" +#include "DNA_object_types.h" #include "DNA_space_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -37,26 +41,36 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" +#include "BKE_animsys.h" +#include "BKE_nla.h" #include "BKE_context.h" +#include "BKE_report.h" #include "BKE_screen.h" - -#include "ED_screen.h" #include "ED_types.h" #include "ED_util.h" -#include "WM_api.h" -#include "WM_types.h" +#include "ED_anim_api.h" +#include "ED_space_api.h" +#include "ED_screen.h" #include "BIF_gl.h" -#include "BIF_glutil.h" + +#include "WM_api.h" +#include "WM_types.h" #include "UI_interface.h" #include "UI_resources.h" #include "UI_view2d.h" -#include "nla_intern.h" +#include "ED_markers.h" +/* button events */ +enum { + B_REDR = 0, +} eActHeader_ButEvents; /* ************************ header area region *********************** */ @@ -93,13 +107,17 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused) static void do_nla_buttons(bContext *C, void *arg, int event) { - switch(event) { + switch (event) { + case B_REDR: + ED_area_tag_redraw(CTX_wm_area(C)); + break; } } void nla_header_buttons(const bContext *C, ARegion *ar) { + SpaceNla *snla= (SpaceNla *)CTX_wm_space_data(C); ScrArea *sa= CTX_wm_area(C); uiBlock *block; int xco, yco= 3; @@ -109,7 +127,7 @@ void nla_header_buttons(const bContext *C, ARegion *ar) xco= ED_area_header_standardbuttons(C, block, yco); - if((sa->flag & HEADER_NO_PULLDOWN)==0) { + if ((sa->flag & HEADER_NO_PULLDOWN)==0) { int xmax; xmax= GetButStringLength("View"); @@ -119,7 +137,47 @@ void nla_header_buttons(const bContext *C, ARegion *ar) } uiBlockSetEmboss(block, UI_EMBOSS); - + + /* filtering buttons */ + if (snla->ads) { + uiBlockBeginAlign(block); + uiDefIconButBitI(block, TOG, ADS_FILTER_ONLYSEL, B_REDR, ICON_RESTRICT_SELECT_OFF, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Only display selected Objects"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NLA_NOACT, B_REDR, ICON_ACTION, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Include AnimData blocks with no NLA Data"); + uiBlockEndAlign(block); + xco += 5; + + uiBlockBeginAlign(block); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSCE, B_REDR, ICON_SCENE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Scene Animation"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOWOR, B_REDR, ICON_WORLD_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display World Animation"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSHAPEKEYS, B_REDR, ICON_SHAPEKEY_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display ShapeKeys"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOMAT, B_REDR, ICON_MATERIAL_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Materials"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOLAM, B_REDR, ICON_LAMP_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Lamps"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Cameras"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Curves"); + uiBlockEndAlign(block); + xco += 15; + } + else { + // XXX this case shouldn't happen at all... for now, just pad out same amount of space + xco += 7*XIC + 15; + } + xco += (XIC + 8); + + /* auto-snap selector */ + if (snla->flag & SNLA_DRAWTIME) { + uiDefButS(block, MENU, B_REDR, + "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Second %x2|Nearest Marker %x3", + xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, + "Auto-snapping mode for times when transforming"); + } + else { + uiDefButS(block, MENU, B_REDR, + "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Frame %x2|Nearest Marker %x3", + xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, + "Auto-snapping mode for times when transforming"); + } + xco += 98; + /* always as last */ UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index c544bd9a408..4d013db8be9 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -30,8 +30,30 @@ /* internal exports only */ +/* -------------- NLA Channel Defines -------------- */ +/* NLA channel heights */ +#define NLACHANNEL_FIRST -16 +#define NLACHANNEL_HEIGHT 24 +#define NLACHANNEL_HEIGHT_HALF 12 +#define NLACHANNEL_SKIP 2 +#define NLACHANNEL_STEP (NLACHANNEL_HEIGHT + NLACHANNEL_SKIP) + +/* channel widths */ +#define NLACHANNEL_NAMEWIDTH 200 + +/* channel toggle-buttons */ +#define NLACHANNEL_BUTTON_WIDTH 16 + + +/* **************************************** */ +/* nla_draw.c */ + +void draw_nla_channel_list(bAnimContext *ac, SpaceNla *snla, ARegion *ar); + +/* **************************************** */ /* nla_header.c */ + void nla_header_buttons(const bContext *C, ARegion *ar); diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index cdaabe9e9de..39888162a95 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -42,10 +42,16 @@ #include "BLI_arithb.h" #include "BLI_rand.h" +#include "BKE_animsys.h" +#include "BKE_action.h" +#include "BKE_nla.h" #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_screen.h" +#include "BKE_utildefines.h" +#include "ED_anim_api.h" +#include "ED_markers.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -58,8 +64,6 @@ #include "UI_resources.h" #include "UI_view2d.h" -#include "ED_markers.h" - #include "nla_intern.h" // own include /* ******************** default callbacks for nla space ***************** */ @@ -73,7 +77,7 @@ static SpaceLink *nla_new(const bContext *C) snla->spacetype= SPACE_NLA; /* allocate DopeSheet data for NLA Editor */ - snla->ads= MEM_callocN(sizeof(bDopeSheet), "NLAEdit DopeSheet"); + snla->ads= MEM_callocN(sizeof(bDopeSheet), "NlaEdit DopeSheet"); /* header */ ar= MEM_callocN(sizeof(ARegion), "header for nla"); @@ -82,13 +86,15 @@ static SpaceLink *nla_new(const bContext *C) ar->regiontype= RGN_TYPE_HEADER; ar->alignment= RGN_ALIGN_BOTTOM; - /* channel list region XXX */ - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); + /* channel list region */ + ar= MEM_callocN(sizeof(ARegion), "channel list for nla"); BLI_addtail(&snla->regionbase, ar); ar->regiontype= RGN_TYPE_CHANNELS; ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + /* only need to set these settings since this will use the 'stack' configuration */ + ar->v2d.scroll = V2D_SCROLL_BOTTOM; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; /* main area */ ar= MEM_callocN(sizeof(ARegion), "main area for nla"); @@ -115,10 +121,11 @@ static SpaceLink *nla_new(const bContext *C) ar->v2d.minzoom= 0.1f; ar->v2d.maxzoom= 50.0f; - ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); ar->v2d.scroll |= (V2D_SCROLL_RIGHT); ar->v2d.keepzoom= V2D_LOCKZOOM_Y; - + ar->v2d.align= V2D_ALIGN_NO_NEG_Y; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; return (SpaceLink *)snla; } @@ -138,7 +145,13 @@ static void nla_free(SpaceLink *sl) /* spacetype; init callback */ static void nla_init(struct wmWindowManager *wm, ScrArea *sa) { + SpaceNla *snla= (SpaceNla *)sa->spacedata.first; + + /* init dopesheet data if non-existant (i.e. for old files) */ + if (snla->ads == NULL) + snla->ads= MEM_callocN(sizeof(bDopeSheet), "NlaEdit DopeSheet"); + ED_area_tag_refresh(sa); } static SpaceLink *nla_duplicate(SpaceLink *sl) @@ -146,15 +159,31 @@ static SpaceLink *nla_duplicate(SpaceLink *sl) SpaceNla *snlan= MEM_dupallocN(sl); /* clear or remove stuff from old */ + snlan->ads= MEM_dupallocN(snlan->ads); return (SpaceLink *)snlan; } +/* add handlers, stuff you only do once or on area/region changes */ +static void nla_channel_area_init(wmWindowManager *wm, ARegion *ar) +{ + //ListBase *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STACK, ar->winx, ar->winy); + + /* own keymap */ + // TODO: cannot use generic copy, need special NLA version + //keymap= WM_keymap_listbase(wm, "Animation_Channels", 0, 0); /* XXX weak? */ + //WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +/* draw entirely, view changes should be handled here */ static void nla_channel_area_draw(const bContext *C, ARegion *ar) { - /* draw entirely, view changes should be handled here */ - // SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); - // View2D *v2d= &ar->v2d; + SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + bAnimContext ac; + View2D *v2d= &ar->v2d; + View2DScrollers *scrollers; float col[3]; /* clear and setup matrix */ @@ -162,15 +191,20 @@ static void nla_channel_area_draw(const bContext *C, ARegion *ar) glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); - // UI_view2d_view_ortho(C, v2d); - - /* data... */ + UI_view2d_view_ortho(C, v2d); + /* data */ + if (ANIM_animdata_get_context(C, &ac)) { + draw_nla_channel_list(&ac, snla, ar); + } /* reset view matrix */ - //UI_view2d_view_restore(C); + UI_view2d_view_restore(C); - /* scrollers? */ + /* scrollers */ + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); } @@ -189,9 +223,13 @@ static void nla_main_area_init(wmWindowManager *wm, ARegion *ar) static void nla_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - // SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + bAnimContext ac; View2D *v2d= &ar->v2d; + View2DGrid *grid; + View2DScrollers *scrollers; float col[3]; + short unit=0, flag=0; /* clear and setup matrix */ UI_GetThemeColor3fv(TH_BACK, col); @@ -199,14 +237,38 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) glClear(GL_COLOR_BUFFER_BIT); UI_view2d_view_ortho(C, v2d); - - /* data... */ + /* time grid */ + unit= (snla->flag & SNLA_DRAWTIME)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; + grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy); + UI_view2d_grid_draw(C, v2d, grid, V2D_GRIDLINES_ALL); + UI_view2d_grid_free(grid); + + /* data */ + if (ANIM_animdata_get_context(C, &ac)) { + //draw_channel_strips(&ac, saction, ar); + } + + /* current frame */ + if (snla->flag & SNLA_DRAWTIME) flag |= DRAWCFRA_UNIT_SECONDS; + if ((snla->flag & SNLA_NODRAWCFRANUM)==0) flag |= DRAWCFRA_SHOW_NUMBOX; + ANIM_draw_cfra(C, v2d, flag); + + /* markers */ + UI_view2d_view_orthoSpecial(C, v2d, 1); + draw_markers_time(C, 0); + + /* preview range */ + UI_view2d_view_ortho(C, v2d); + ANIM_draw_previewrange(C, v2d); /* reset view matrix */ UI_view2d_view_restore(C); - /* scrollers? */ + /* scrollers */ + scrollers= UI_view2d_scrollers_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); } void nla_operatortypes(void) @@ -250,6 +312,82 @@ static void nla_header_area_draw(const bContext *C, ARegion *ar) static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_OB_ACTIVE: + case ND_FRAME: + case ND_MARKERS: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_OBJECT: + switch(wmn->data) { + case ND_BONE_ACTIVE: + case ND_BONE_SELECT: + case ND_KEYS: + case ND_TRANSFORM: + ED_region_tag_redraw(ar); + break; + } + break; + default: + if(wmn->data==ND_KEYS) + ED_region_tag_redraw(ar); + } +} + +static void nla_channel_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_OB_ACTIVE: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_OBJECT: + switch(wmn->data) { + case ND_BONE_ACTIVE: + case ND_BONE_SELECT: + case ND_KEYS: + ED_region_tag_redraw(ar); + break; + } + break; + default: + if(wmn->data==ND_KEYS) + ED_region_tag_redraw(ar); + } +} + +/* editor level listener */ +static void nla_listener(ScrArea *sa, wmNotifier *wmn) +{ + /* context changes */ + switch (wmn->category) { + case NC_SCENE: + /*switch (wmn->data) { + case ND_OB_ACTIVE: + case ND_OB_SELECT: + ED_area_tag_refresh(sa); + break; + }*/ + ED_area_tag_refresh(sa); + break; + case NC_OBJECT: + /*switch (wmn->data) { + case ND_BONE_SELECT: + case ND_BONE_ACTIVE: + ED_area_tag_refresh(sa); + break; + }*/ + ED_area_tag_refresh(sa); + break; + } } /* only called once, from space/spacetypes.c */ @@ -265,6 +403,7 @@ void ED_spacetype_nla(void) st->init= nla_init; st->duplicate= nla_duplicate; st->operatortypes= nla_operatortypes; + st->listener= nla_listener; st->keymap= nla_keymap; /* regions: main window */ @@ -273,7 +412,7 @@ void ED_spacetype_nla(void) art->init= nla_main_area_init; art->draw= nla_main_area_draw; art->listener= nla_main_area_listener; - art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; + art->keymapflag= ED_KEYMAP_VIEW2D/*|ED_KEYMAP_MARKERS*/|ED_KEYMAP_ANIMATION|ED_KEYMAP_FRAMES; BLI_addhead(&st->regiontypes, art); @@ -294,8 +433,9 @@ void ED_spacetype_nla(void) art->minsizex= 200; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; - //art->init= nla_channel_area_init; + art->init= nla_channel_area_init; art->draw= nla_channel_area_draw; + art->listener= nla_channel_area_listener; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 802f8d88c03..e41ab5ac492 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -288,9 +288,10 @@ typedef struct bDopeSheet { /* DopeSheet filter-flag */ typedef enum DOPESHEET_FILTERFLAG { /* general filtering */ - ADS_FILTER_ONLYSEL = (1<<0), - ADS_FILTER_ONLYDRIVERS = (1<<1), - ADS_FILTER_ONLYNLA = (1<<2), + ADS_FILTER_ONLYSEL = (1<<0), /* only include channels relating to selected data */ + + ADS_FILTER_ONLYDRIVERS = (1<<1), /* for 'Drivers' editor - only include Driver data from AnimData */ + ADS_FILTER_ONLYNLA = (1<<2), /* for 'NLA' editor - only include NLA data from AnimData */ /* datatype-based filtering */ ADS_FILTER_NOSHAPEKEYS = (1<<6), @@ -301,9 +302,11 @@ typedef enum DOPESHEET_FILTERFLAG { ADS_FILTER_NOWOR = (1<<14), ADS_FILTER_NOSCE = (1<<15), + /* NLA-specific filters */ + ADS_FILTER_NLA_NOACT = (1<<20), /* if the AnimData block has no NLA data, don't include to just show Action-line */ + /* combination filters (some only used at runtime) */ ADS_FILTER_NOOBDATA = (ADS_FILTER_NOCAM|ADS_FILTER_NOMAT|ADS_FILTER_NOLAM|ADS_FILTER_NOCUR), - ADS_FILTER_NLADUMMY = (ADS_FILTER_NOSHAPEKEYS|ADS_FILTER_NOOBDATA), } DOPESHEET_FILTERFLAG; /* DopeSheet general flags */ From 72205f45e4e4dfd14460d693ccda30f7677ae9be Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 30 May 2009 00:28:33 +0000 Subject: [PATCH 010/512] NLA SoC: Basic Strip drawing Implemented some basic strip-drawing code with some hardcoded colours. These colours will be made into theme colours at some point, but the aim is to use different colours as indicators of the 'state' of the strip (i.e. active/being tweaked, uses the same action as the strip being tweaked, selected, normal). This is not yet usable though... --- source/blender/editors/space_nla/nla_draw.c | 138 ++++++++++++++++++ source/blender/editors/space_nla/nla_intern.h | 1 + source/blender/editors/space_nla/nla_ops.c | 121 +++++++++++++++ source/blender/editors/space_nla/space_nla.c | 2 +- source/blender/makesdna/DNA_anim_types.h | 2 + 5 files changed, 263 insertions(+), 1 deletion(-) create mode 100644 source/blender/editors/space_nla/nla_ops.c diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 8b8ae7c5b8b..8da59ced436 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -83,6 +83,144 @@ extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); /* *********************************************** */ +/* Strips */ + +static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +{ + /* draw extrapolation info first (as backdrop) */ + // TODO... + + /* draw 'inside' of strip itself */ + /* set color of strip - color is used to indicate status here */ + if (strip->flag & NLASTRIP_FLAG_ACTIVE) { + /* tweaking strip should be drawn green when it is acting as the tweaking strip */ + // FIXME: hardcoded temp-hack colors + glColor3f(0.3f, 0.95f, 0.1f); + } + 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 + glColor3f(0.85f, 0.0f, 0.0f); + } + else if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* selected strip - use theme color for selected */ + UI_ThemeColor(TH_STRIP_SELECT); + } + else { + /* normal, unselected strip - use standard strip theme color */ + UI_ThemeColor(TH_STRIP); + } + uiSetRoundBox(15); /* all corners rounded */ + gl_round_box(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 9); + + /* draw strip outline */ + if (strip->flag & NLASTRIP_FLAG_ACTIVE) { + /* strip should appear 'sunken', so draw a light border around it */ + glColor3f(0.9f, 1.0f, 0.9f); // FIXME: hardcoded temp-hack colors + } + else { + /* strip should appear to stand out, so draw a dark border around it */ + glColor3f(0.0f, 0.0f, 0.0f); + } + gl_round_box(GL_LINES, strip->start, yminc, strip->end, ymaxc, 9); +} + +/* ---------------------- */ + +void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + View2D *v2d= &ar->v2d; + float y= 0.0f; + int items, height; + + /* build list of channels to draw */ + filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); + items= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* Update max-extent of channels here (taking into account scrollers): + * - this is done to allow the channel list to be scrollable, but must be done here + * to avoid regenerating the list again and/or also because channels list is drawn first + * - offset of NLACHANNEL_HEIGHT*2 is added to the height of the channels, as first is for + * start of list offset, and the second is as a correction for the scrollers. + */ + height= ((items*NLACHANNEL_STEP) + (NLACHANNEL_HEIGHT*2)); + if (height > (v2d->mask.ymax - v2d->mask.ymin)) { + /* don't use totrect set, as the width stays the same + * (NOTE: this is ok here, the configuration is pretty straightforward) + */ + v2d->tot.ymax= (float)(height); + } + + /* loop through channels, and set up drawing depending on their type */ + y= (float)(-NLACHANNEL_FIRST); + + for (ale= anim_data.first; ale; ale= ale->next) { + const float yminc= (float)(y - NLACHANNEL_HEIGHT_HALF); + const float ymaxc= (float)(y + NLACHANNEL_HEIGHT_HALF); + + /* check if visible */ + if ( IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || + IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax) ) + { + /* data to draw depends on the type of channel */ + switch (ale->type) { + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* draw backdrop? */ + // TODO... + + /* draw each strip in the track */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* only draw if at least part of the strip is within view */ + if ( IN_RANGE(v2d->cur.xmin, strip->start, strip->end) || + IN_RANGE(v2d->cur.xmax, strip->start, strip->end) ) + { + nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); + } + } + } + break; + + case ANIMTYPE_NLAACTION: + { + /* just draw a semi-shaded rect spanning the width of the viewable area if there's data */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + if (ale->data) + glColor4f(0.8f, 0.2f, 0.0f, 0.4f); // reddish color - hardcoded for now + else + glColor4f(0.6f, 0.5f, 0.5f, 0.3f); // greyish-red color - hardcoded for now + + glBegin(GL_QUADS); + glVertex2f(v2d->cur.xmin, yminc); + glVertex2f(v2d->cur.xmin, ymaxc); + glVertex2f(v2d->cur.xmax, ymaxc); + glVertex2f(v2d->cur.xmax, yminc); + glEnd(); + + glDisable(GL_BLEND); + } + break; + } + } + + /* adjust y-position for next one */ + y += NLACHANNEL_STEP; + } + + /* free tempolary channels */ + BLI_freelistN(&anim_data); +} /* *********************************************** */ /* Channel List */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 4d013db8be9..3728ba2cbc8 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -49,6 +49,7 @@ /* **************************************** */ /* nla_draw.c */ +void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar); void draw_nla_channel_list(bAnimContext *ac, SpaceNla *snla, ARegion *ar); /* **************************************** */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c new file mode 100644 index 00000000000..f0e3bd5bca5 --- /dev/null +++ b/source/blender/editors/space_nla/nla_ops.c @@ -0,0 +1,121 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * + * Contributor(s): Joshua Leung (major recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_nla_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_context.h" +#include "BKE_report.h" +#include "BKE_screen.h" + +#include "ED_anim_api.h" +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "ED_markers.h" + +#include "nla_intern.h" // own include + + +/* ************************** registration - operator types **********************************/ + +void nla_operatortypes(void) +{ + //WM_operatortype_append(); + +} + +/* ************************** registration - keymaps **********************************/ + +static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) +{ + //wmKeymapItem *kmi; + + + + /* transform system */ + //transform_keymap_for_space(wm, keymap, SPACE_NLA); +} + +static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) +{ + //wmKeymapItem *kmi; + + + + /* transform system */ + //transform_keymap_for_space(wm, keymap, SPACE_NLA); +} + +/* --------------- */ + +void nla_keymap(wmWindowManager *wm) +{ + ListBase *keymap; + + /* channels */ + /* Channels are not directly handled by the NLA Editor module, but are inherited from the Animation module. + * Most of the relevant operations, keymaps, drawing, etc. can therefore all be found in that module instead, as there + * are many similarities with the other Animation Editors. + * + * However, those operations which involve clicking on channels and/or the placement of them in the view are implemented here instead + */ + keymap= WM_keymap_listbase(wm, "NLA_Channels", SPACE_NLA, 0); + nla_keymap_channels(wm, keymap); + + /* data */ + keymap= WM_keymap_listbase(wm, "NLA_Data", SPACE_NLA, 0); + nla_keymap_main(wm, keymap); +} + diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 39888162a95..bf122227a8b 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -246,7 +246,7 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) /* data */ if (ANIM_animdata_get_context(C, &ac)) { - //draw_channel_strips(&ac, saction, ar); + draw_nla_main_data(&ac, snla, ar); } /* current frame */ diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index b20ec7ba37f..fe535b671f8 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -444,6 +444,8 @@ enum { NLASTRIP_FLAG_SELECT = (1<<1), // NLASTRIP_FLAG_SELECT_L = (1<<2), // left handle selected // NLASTRIP_FLAG_SELECT_R = (1<<3), // right handle selected + /* NLA strip uses the same action that the action being tweaked uses (not set for the twaking one though) */ + NLASTRIP_FLAG_TWEAKUSER = (1<<4), /* controls driven by local F-Curves */ /* strip influence is controlled by local F-Curve */ From 32d0533f78c63d5d95b693e1e6e65144203dc42a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 30 May 2009 10:41:41 +0000 Subject: [PATCH 011/512] NLA SoC: More UI work + 'Push down' tool 'UI Work' * Added more drawing code for drawing NLA data * Made the operators for the 'channel-list' of NLA work. A special version of borderselect for the NLA channel-list (due to the different vertical order) still needs to be coded though. 'Push Down' tool The active action of each AnimData block, represented by the reddy/orange channel, can be added to the NLA stack as a new action by using the 'snow-flake' icon/button (probably need a special icon for this later). This will add a new NLA track and an NLA strip referencing this action. The AnimData block's 'active action' slot will then be left empty. (Unfortunately, there still seems to be a bug here, which I'll check on later) --- .../blender/editors/animation/anim_channels.c | 12 + .../blender/editors/space_nla/nla_channels.c | 336 ++++++++++++++++++ source/blender/editors/space_nla/nla_draw.c | 28 +- source/blender/editors/space_nla/nla_edit.c | 7 +- source/blender/editors/space_nla/nla_intern.h | 17 + source/blender/editors/space_nla/nla_ops.c | 44 ++- source/blender/editors/space_nla/space_nla.c | 17 +- 7 files changed, 431 insertions(+), 30 deletions(-) create mode 100644 source/blender/editors/space_nla/nla_channels.c diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 9e0e50a8de5..a5f2acb591c 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -217,6 +217,10 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short if (ale->flag & FCURVE_SELECTED) sel= ACHANNEL_SETFLAG_CLEAR; break; + case ANIMTYPE_NLATRACK: + if (ale->flag & NLATRACK_SELECTED) + sel= ACHANNEL_SETFLAG_CLEAR; + break; } } } @@ -263,6 +267,14 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short fcu->flag &= ~FCURVE_ACTIVE; } break; + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + ACHANNEL_SET_FLAG(nlt, sel, NLATRACK_SELECTED); + nlt->flag &= ~NLATRACK_ACTIVE; + } + break; } } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c new file mode 100644 index 00000000000..658ce69cc10 --- /dev/null +++ b/source/blender/editors/space_nla/nla_channels.c @@ -0,0 +1,336 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * + * Contributor(s): Joshua Leung (major recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "DNA_listBase.h" +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_armature_types.h" +#include "DNA_camera_types.h" +#include "DNA_curve_types.h" +#include "DNA_object_types.h" +#include "DNA_screen_types.h" +#include "DNA_scene_types.h" +#include "DNA_space_types.h" +#include "DNA_key_types.h" +#include "DNA_lamp_types.h" +#include "DNA_material_types.h" +#include "DNA_userdef_types.h" +#include "DNA_windowmanager_types.h" +#include "DNA_world_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_context.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "ED_anim_api.h" +#include "ED_keyframes_edit.h" +#include "ED_markers.h" +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_interface_icons.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "nla_intern.h" // own include + +/* *********************************************** */ +/* Operators for NLA channels-list which need to be different from the standard Animation Editor ones */ + +// TODO: implemented borderselect too, since that also relies on ranges of buttons + +/* ******************** Mouse-Click Operator *********************** */ +/* Depending on the channel that was clicked on, the mouse click will activate whichever + * part of the channel is relevant. + * + * NOTE: eventually, this should probably be phased out when many of these things are replaced with buttons + */ + +static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, short selectmode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get the channel that was clicked on */ + /* filter channels */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); + filter= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* get channel from index */ + ale= BLI_findlink(&anim_data, channel_index); + if (ale == NULL) { + /* channel not found */ + printf("Error: animation channel (index = %d) not found in mouse_anim_channels() \n", channel_index); + + BLI_freelistN(&anim_data); + return; + } + + /* action to take depends on what channel we've got */ + switch (ale->type) { + case ANIMTYPE_SCENE: + { + Scene *sce= (Scene *)ale->data; + + if (x < 16) { + /* toggle expand */ + sce->flag ^= SCE_DS_COLLAPSED; + } + else { + /* set selection status */ + if (selectmode == SELECT_INVERT) { + /* swap select */ + sce->flag ^= SCE_DS_SELECTED; + } + else { + sce->flag |= SCE_DS_SELECTED; + } + } + } + break; + case ANIMTYPE_OBJECT: + { + bDopeSheet *ads= (bDopeSheet *)ac->data; + Scene *sce= (Scene *)ads->source; + Base *base= (Base *)ale->data; + Object *ob= base->object; + + if (x < 16) { + /* toggle expand */ + ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX + } + else { + /* set selection status */ + if (selectmode == SELECT_INVERT) { + /* swap select */ + base->flag ^= SELECT; + ob->flag= base->flag; + } + else { + Base *b; + + /* deleselect all */ + for (b= sce->base.first; b; b= b->next) { + b->flag &= ~SELECT; + b->object->flag= b->flag; + } + + /* select object now */ + base->flag |= SELECT; + ob->flag |= SELECT; + } + + /* xxx should be ED_base_object_activate(), but we need context pointer for that... */ + //set_active_base(base); + } + } + break; + case ANIMTYPE_FILLMATD: + { + Object *ob= (Object *)ale->data; + ob->nlaflag ^= OB_ADS_SHOWMATS; // XXX + } + break; + + case ANIMTYPE_DSMAT: + { + Material *ma= (Material *)ale->data; + ma->flag ^= MA_DS_EXPAND; + } + break; + case ANIMTYPE_DSLAM: + { + Lamp *la= (Lamp *)ale->data; + la->flag ^= LA_DS_EXPAND; + } + break; + case ANIMTYPE_DSCAM: + { + Camera *ca= (Camera *)ale->data; + ca->flag ^= CAM_DS_EXPAND; + } + break; + case ANIMTYPE_DSCUR: + { + Curve *cu= (Curve *)ale->data; + cu->flag ^= CU_DS_EXPAND; + } + break; + case ANIMTYPE_DSSKEY: + { + Key *key= (Key *)ale->data; + key->flag ^= KEYBLOCK_DS_EXPAND; + } + break; + case ANIMTYPE_DSWOR: + { + World *wo= (World *)ale->data; + wo->flag ^= WO_DS_EXPAND; + } + break; + + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { + /* toggle protection (only if there's a toggle there) */ + nlt->flag ^= NLATRACK_PROTECTED; + } + else if (x >= (NLACHANNEL_NAMEWIDTH-2*NLACHANNEL_BUTTON_WIDTH)) { + /* toggle mute */ + nlt->flag ^= NLATRACK_MUTED; + } + else { + /* set selection */ + if (selectmode == SELECT_INVERT) { + /* inverse selection status of this F-Curve only */ + nlt->flag ^= NLATRACK_SELECTED; + } + else { + /* select F-Curve by itself */ + ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + nlt->flag |= NLATRACK_SELECTED; + } + + /* if NLA-Track is selected now, make NLA-Track the 'active' one in the visible list */ + if (nlt->flag & NLATRACK_SELECTED) + ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + } + } + break; + case ANIMTYPE_NLAACTION: + { + AnimData *adt= BKE_animdata_from_id(ale->owner); /* this won't crash, right? */ + + /* for now, only do something if user clicks on the 'push-down' button */ + if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { + /* activate push-down operator */ + // TODO: make this use the operator instead of calling the function directly + // however, calling the operator requires that we supply the args, and that works with proper buttons only + BKE_nla_action_pushdown(adt); + } + } + break; + + default: + printf("Error: Invalid channel type in mouse_nla_channels() \n"); + } + + /* free channels */ + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +/* handle clicking */ +static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + bAnimContext ac; + Scene *scene; + ARegion *ar; + View2D *v2d; + int mval[2], channel_index; + short selectmode; + float x, y; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get useful pointers from animation context data */ + scene= ac.scene; + ar= ac.ar; + v2d= &ar->v2d; + + /* get mouse coordinates (in region coordinates) */ + mval[0]= (event->x - ar->winrct.xmin); + mval[1]= (event->y - ar->winrct.ymin); + + /* select mode is either replace (deselect all, then add) or add/extend */ + if (RNA_boolean_get(op->ptr, "extend")) + selectmode= SELECT_INVERT; + else + 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 + * so that the tops of channels get caught ok. Since NLACHANNEL_FIRST is really NLACHANNEL_HEIGHT, we simply use + * NLACHANNEL_HEIGHT_HALF. + */ + UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y); + UI_view2d_listview_view_to_cell(v2d, NLACHANNEL_NAMEWIDTH, NLACHANNEL_STEP, 0, (float)NLACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index); + + /* handle mouse-click in the relevant channel then */ + mouse_nla_channels(&ac, x, channel_index, selectmode); + + /* set notifier tha things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + + return OPERATOR_FINISHED; +} + +void NLA_OT_channels_click (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Mouse Click on Channels"; + ot->idname= "NLA_OT_channels_click"; + + /* api callbacks */ + ot->invoke= nlachannels_mouseclick_invoke; + ot->poll= ED_operator_areaactive; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* id-props */ + RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 8da59ced436..081064317d6 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -85,8 +85,10 @@ extern void gl_round_box(int mode, float minx, float miny, float maxx, float max /* *********************************************** */ /* Strips */ -static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v2d, float yminc, float ymaxc) { + char name[128]; + /* draw extrapolation info first (as backdrop) */ // TODO... @@ -125,6 +127,15 @@ static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float y glColor3f(0.0f, 0.0f, 0.0f); } gl_round_box(GL_LINES, strip->start, yminc, strip->end, ymaxc, 9); + + /* draw some identifying info on the strip (index and name of action if there's room) */ + // XXX for now, just the index + if (strip->flag & NLASTRIP_FLAG_SELECT) + UI_ThemeColor(TH_TEXT_HI); + else + UI_ThemeColor(TH_TEXT); + sprintf(name, "%d |", index); + UI_DrawString(strip->start, yminc+8, name); } /* ---------------------- */ @@ -174,17 +185,18 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; + int index; /* draw backdrop? */ // TODO... /* draw each strip in the track */ - for (strip= nlt->strips.first; strip; strip= strip->next) { + for (strip=nlt->strips.first, index=1; strip; strip= strip->next, index++) { /* only draw if at least part of the strip is within view */ if ( IN_RANGE(v2d->cur.xmin, strip->start, strip->end) || IN_RANGE(v2d->cur.xmax, strip->start, strip->end) ) { - nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); + nla_draw_strip(nlt, strip, index, v2d, yminc, ymaxc); } } } @@ -601,6 +613,16 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* draw action 'push-down' */ if (ale->type == ANIMTYPE_NLAACTION) { offset += 16; + + /* XXX firstly draw a little rect to help identify that it's different from the toggles */ + glBegin(GL_LINES); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+7); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7; + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+7); + glEnd(); // GL_LINES + + /* now draw the icon */ UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_FREEZE); } diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index d9d0e5528ae..ce9ae7de7a9 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -51,10 +51,12 @@ #include "BKE_screen.h" #include "ED_anim_api.h" +#include "ED_markers.h" #include "ED_space_api.h" #include "ED_screen.h" -#include "BIF_gl.h" +#include "RNA_access.h" +#include "RNA_define.h" #include "WM_api.h" #include "WM_types.h" @@ -63,13 +65,10 @@ #include "UI_resources.h" #include "UI_view2d.h" -#include "ED_markers.h" - #include "nla_intern.h" // own include /* *********************************************** */ - /* *********************************************** */ /* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 3728ba2cbc8..37eb7774696 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -57,6 +57,23 @@ void draw_nla_channel_list(bAnimContext *ac, SpaceNla *snla, ARegion *ar); void nla_header_buttons(const bContext *C, ARegion *ar); +/* **************************************** */ +/* nla_select.c */ + + +/* **************************************** */ +/* nla_edit.c */ + +/* **************************************** */ +/* nla_channels.c */ + +void NLA_OT_channels_click(wmOperatorType *ot); + +/* **************************************** */ +/* nla_ops.c */ + +void nla_operatortypes(void); +void nla_keymap(wmWindowManager *wm); #endif /* ED_NLA_INTERN_H */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index f0e3bd5bca5..ea450a08475 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -54,17 +54,15 @@ #include "ED_space_api.h" #include "ED_screen.h" -#include "BIF_gl.h" - #include "WM_api.h" #include "WM_types.h" +#include "RNA_access.h" + #include "UI_interface.h" #include "UI_resources.h" #include "UI_view2d.h" -#include "ED_markers.h" - #include "nla_intern.h" // own include @@ -72,20 +70,46 @@ void nla_operatortypes(void) { - //WM_operatortype_append(); + /* channels */ + WM_operatortype_append(NLA_OT_channels_click); + /* select */ + // ... } /* ************************** registration - keymaps **********************************/ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) { - //wmKeymapItem *kmi; + /* NLA-specific (different to standard channels keymap) -------------------------- */ + /* selection */ + /* click-select */ + // XXX for now, only leftmouse.... + WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); + /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ + /* deselect all */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + /* borderselect */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); - /* transform system */ - //transform_keymap_for_space(wm, keymap, SPACE_NLA); + /* settings */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_toggle", WKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_enable", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_disable", WKEY, KM_PRESS, KM_ALT, 0); + + /* settings - specialised hotkeys */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_editable_toggle", TABKEY, KM_PRESS, 0, 0); + + /* expand/collapse */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, 0, 0); + + RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1); + RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1); } static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) @@ -111,11 +135,11 @@ void nla_keymap(wmWindowManager *wm) * * However, those operations which involve clicking on channels and/or the placement of them in the view are implemented here instead */ - keymap= WM_keymap_listbase(wm, "NLA_Channels", SPACE_NLA, 0); + keymap= WM_keymap_listbase(wm, "NLA Channels", SPACE_NLA, 0); nla_keymap_channels(wm, keymap); /* data */ - keymap= WM_keymap_listbase(wm, "NLA_Data", SPACE_NLA, 0); + keymap= WM_keymap_listbase(wm, "NLA Data", SPACE_NLA, 0); nla_keymap_main(wm, keymap); } diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index bf122227a8b..1313b4d915d 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -167,14 +167,14 @@ static SpaceLink *nla_duplicate(SpaceLink *sl) /* add handlers, stuff you only do once or on area/region changes */ static void nla_channel_area_init(wmWindowManager *wm, ARegion *ar) { - //ListBase *keymap; + ListBase *keymap; UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STACK, ar->winx, ar->winy); /* own keymap */ // TODO: cannot use generic copy, need special NLA version - //keymap= WM_keymap_listbase(wm, "Animation_Channels", 0, 0); /* XXX weak? */ - //WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + keymap= WM_keymap_listbase(wm, "NLA Channels", SPACE_NLA, 0); /* XXX weak? */ + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } /* draw entirely, view changes should be handled here */ @@ -216,7 +216,7 @@ static void nla_main_area_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap= WM_keymap_listbase(wm, "NLA", SPACE_NLA, 0); /* XXX weak? */ + keymap= WM_keymap_listbase(wm, "NLA Data", SPACE_NLA, 0); /* XXX weak? */ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -271,15 +271,6 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) UI_view2d_scrollers_free(scrollers); } -void nla_operatortypes(void) -{ - -} - -void nla_keymap(struct wmWindowManager *wm) -{ - -} /* add handlers, stuff you only do once or on area/region changes */ static void nla_header_area_init(wmWindowManager *wm, ARegion *ar) From aa4d64d7ff17d4557acd74540914de872a32ba81 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 30 May 2009 11:05:29 +0000 Subject: [PATCH 012/512] NLA SoC: Bugfixes for previous commit * Compile fix in nla_draw.c * Not totally correct yet, but now NLA-tracks get drawn too after action 'push-down' --- source/blender/blenkernel/intern/nla.c | 11 ++- .../blender/editors/animation/anim_filter.c | 77 +++++++++---------- source/blender/editors/space_nla/nla_draw.c | 2 +- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index d062a2ab14b..3356f599c59 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -427,8 +427,10 @@ void BKE_nla_action_pushdown (AnimData *adt) * as that will cause us grief down the track */ // TODO: what about modifiers? - if (action_has_motion(adt->action) == 0) + if (action_has_motion(adt->action) == 0) { + printf("BKE_nla_action_pushdown(): action has no data \n"); return; + } /* add a new NLA track to house this action * - we could investigate trying to fit the action into an appropriately @@ -436,8 +438,10 @@ void BKE_nla_action_pushdown (AnimData *adt) * changes in blending behaviour... */ nlt= add_nlatrack(adt); - if (nlt == NULL) + if (nlt == NULL) { + printf("BKE_nla_action_pushdown(): no NLA-track added \n"); return; + } /* add a new NLA strip to the track, which references the active action */ strip= add_nlastrip(nlt, adt->action); @@ -448,6 +452,9 @@ void BKE_nla_action_pushdown (AnimData *adt) adt->action= NULL; } + // TEMP DEBUG... + printf("BKE_nla_action_pushdown(): NLA strip added.. done \n"); + // TODO: set any other flags necessary here... } diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index f12e9a51f32..f1f2a31b9b1 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -1334,22 +1334,18 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int /* scene-linked animation */ // TODO: sequencer, composite nodes - are we to include those here too? { - short sceOk, worOk; + short sceOk= 0, worOk= 0; /* check filtering-flags if ok */ - if (ads->filterflag) { - if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) { - sceOk= (ANIMDATA_HAS_DRIVERS(sce) && !(ads->filterflag & ADS_FILTER_NOSCE)); - worOk= ((sce->world) && ANIMDATA_HAS_DRIVERS(sce->world) && !(ads->filterflag & ADS_FILTER_NOWOR)); - } - else { - sceOk= (ANIMDATA_HAS_KEYS(sce) && !(ads->filterflag & ADS_FILTER_NOSCE)); - worOk= ((sce->world) && ANIMDATA_HAS_KEYS(sce->world) && !(ads->filterflag & ADS_FILTER_NOWOR)); - } - } - else { - sceOk= (ANIMDATA_HAS_KEYS(sce)); - worOk= ((sce->world) && ANIMDATA_HAS_KEYS(sce->world)); + ANIMDATA_FILTER_CASES(sce, + sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);, + sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);, + sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);) + if (sce->world) { + ANIMDATA_FILTER_CASES(sce->world, + worOk= !(ads->filterflag & ADS_FILTER_NOWOR);, + worOk= !(ads->filterflag & ADS_FILTER_NOWOR);, + worOk= !(ads->filterflag & ADS_FILTER_NOWOR);) } /* check if not all bad (i.e. so there is something to show) */ @@ -1391,13 +1387,17 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int } /* check filters for datatypes */ - if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) { - actOk= (ANIMDATA_HAS_DRIVERS(ob)); - keyOk= ((key) && ANIMDATA_HAS_DRIVERS(key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)); - } - else { - actOk= ANIMDATA_HAS_KEYS(ob); - keyOk= ((key) && ANIMDATA_HAS_KEYS(key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)); + /* object */ + ANIMDATA_FILTER_CASES(ob, + actOk= 1;, + actOk= 1;, + actOk= 1;) + if (key) { + /* shapekeys */ + ANIMDATA_FILTER_CASES(key, + keyOk= 1;, + keyOk= 1;, + keyOk= 1;) } /* materials - only for geometric types */ @@ -1412,18 +1412,13 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int Material *ma= give_current_material(ob, a); /* if material has relevant animation data, break */ - if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) { - if (ANIMDATA_HAS_DRIVERS(ma)) { - matOk= 1; - break; - } - } - else { - if (ANIMDATA_HAS_KEYS(ma)) { - matOk= 1; - break; - } - } + ANIMDATA_FILTER_CASES(ma, + matOk= 1;, + matOk= 1;, + matOk= 1;) + + if (matOk) + break; } } @@ -1432,19 +1427,19 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int case OB_CAMERA: /* ------- Camera ------------ */ { Camera *ca= (Camera *)ob->data; - if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) - dataOk= (ANIMDATA_HAS_DRIVERS(ca) && !(ads->filterflag & ADS_FILTER_NOCAM)); - else - dataOk= (ANIMDATA_HAS_KEYS(ca) && !(ads->filterflag & ADS_FILTER_NOCAM)); + ANIMDATA_FILTER_CASES(ca, + dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, + dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, + dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);) } break; case OB_LAMP: /* ---------- Lamp ----------- */ { Lamp *la= (Lamp *)ob->data; - if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) - dataOk= (ANIMDATA_HAS_DRIVERS(la) && !(ads->filterflag & ADS_FILTER_NOLAM)); - else - dataOk= (ANIMDATA_HAS_KEYS(la) && !(ads->filterflag & ADS_FILTER_NOLAM)); + ANIMDATA_FILTER_CASES(la, + dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, + dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, + dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);) } break; default: /* --- other --- */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 081064317d6..8ff9522358c 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -618,7 +618,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) glBegin(GL_LINES); glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+7); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7; + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7); glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+7); glEnd(); // GL_LINES From 2e85686fe379f99c27944e3e4b5842d89e620f3b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 30 May 2009 12:40:07 +0000 Subject: [PATCH 013/512] NLA SoC: Fixes (UI, evaluation?) * Fixed some bugs which meant that NLA-strips weren't getting drawn * Removed some debugging code * Fixed bug with Action-line disappearing after 'pushing down' actions * Fixed bug where Objects with no animation data showed up in NLA * Tried fixing a bug where NLA-strips were evaluated erratically. I have a feeling that there are some rounding errors I'll need to pay more attention to somewhere :/ --- source/blender/blenkernel/intern/anim_sys.c | 6 +- source/blender/blenkernel/intern/nla.c | 3 - .../blender/editors/animation/anim_filter.c | 12 +++- source/blender/editors/space_nla/nla_draw.c | 63 ++++++++++--------- 4 files changed, 47 insertions(+), 37 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index f21fed416cc..652f733d553 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -627,14 +627,14 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe) strip->blendout= (float)fabs(strip->blendout); /* result depends on where frame is in respect to blendin/out values */ - // TODO: are the fabs() tests needed here? + // the +0.0001 factors are to combat rounding errors if (IS_EQ(strip->blendin, 0)==0 && (cframe <= (strip->start + strip->blendin))) { /* there is some blend-in */ - return (float)fabs(cframe - strip->start) / (strip->blendin); + return (float)(fabs(cframe - strip->start) + 0.0001) / (strip->blendin); } else if (IS_EQ(strip->blendout, 0)==0 && (cframe >= (strip->end - strip->blendout))) { /* there is some blend-out */ - return (float)fabs(strip->end - cframe) / (strip->blendout); + return (float)(fabs(strip->end - cframe) + 0.0001) / (strip->blendout); } else { /* in the middle of the strip, we should be full strength */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 3356f599c59..62500af85ff 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -452,9 +452,6 @@ void BKE_nla_action_pushdown (AnimData *adt) adt->action= NULL; } - // TEMP DEBUG... - printf("BKE_nla_action_pushdown(): NLA strip added.. done \n"); - // TODO: set any other flags necessary here... } diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index f1f2a31b9b1..ed526bd99a0 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -722,8 +722,12 @@ static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_m /* there isn't really anything editable here, so skip if need editable */ // TODO: currently, selection isn't checked since it doesn't matter if ((filter_mode & ANIMFILTER_FOREDIT) == 0) { - /* just add the action track now */ - ale= make_new_animlistelem(adt->action, ANIMTYPE_NLAACTION, owner, ownertype, owner_id); + /* just add the action track now (this MUST appear for drawing) + * - as AnimData may not have an action, we pass a dummy pointer just to get the list elem created, then + * overwrite this with the real value - REVIEW THIS... + */ + ale= make_new_animlistelem((void *)(&adt->action), ANIMTYPE_NLAACTION, owner, ownertype, owner_id); + ale->data= (adt->action) ? adt->action : NULL; if (ale) { BLI_addtail(anim_data, ale); @@ -1388,6 +1392,8 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int /* check filters for datatypes */ /* object */ + actOk= 0; + keyOk= 0; ANIMDATA_FILTER_CASES(ob, actOk= 1;, actOk= 1;, @@ -1427,6 +1433,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int case OB_CAMERA: /* ------- Camera ------------ */ { Camera *ca= (Camera *)ob->data; + dataOk= 0; ANIMDATA_FILTER_CASES(ca, dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, @@ -1436,6 +1443,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int case OB_LAMP: /* ---------- Lamp ----------- */ { Lamp *la= (Lamp *)ob->data; + dataOk= 0; ANIMDATA_FILTER_CASES(la, dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 8ff9522358c..28572704302 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -81,14 +81,13 @@ /* XXX */ extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); +extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown); /* *********************************************** */ /* Strips */ -static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v2d, float yminc, float ymaxc) +static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) { - char name[128]; - /* draw extrapolation info first (as backdrop) */ // TODO... @@ -115,7 +114,7 @@ static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v UI_ThemeColor(TH_STRIP); } uiSetRoundBox(15); /* all corners rounded */ - gl_round_box(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 9); + gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); /* draw strip outline */ if (strip->flag & NLASTRIP_FLAG_ACTIVE) { @@ -126,16 +125,7 @@ static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v /* strip should appear to stand out, so draw a dark border around it */ glColor3f(0.0f, 0.0f, 0.0f); } - gl_round_box(GL_LINES, strip->start, yminc, strip->end, ymaxc, 9); - - /* draw some identifying info on the strip (index and name of action if there's room) */ - // XXX for now, just the index - if (strip->flag & NLASTRIP_FLAG_SELECT) - UI_ThemeColor(TH_TEXT_HI); - else - UI_ThemeColor(TH_TEXT); - sprintf(name, "%d |", index); - UI_DrawString(strip->start, yminc+8, name); + gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1); } /* ---------------------- */ @@ -147,6 +137,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) int filter; View2D *v2d= &ar->v2d; + float viewWidth = v2d->cur.xmax - v2d->cur.xmin; float y= 0.0f; int items, height; @@ -185,19 +176,33 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; - int index; /* draw backdrop? */ // TODO... /* draw each strip in the track */ - for (strip=nlt->strips.first, index=1; strip; strip= strip->next, index++) { - /* only draw if at least part of the strip is within view */ - if ( IN_RANGE(v2d->cur.xmin, strip->start, strip->end) || - IN_RANGE(v2d->cur.xmax, strip->start, strip->end) ) + for (strip=nlt->strips.first; strip; strip= strip->next) { + float stripLen= strip->end - strip->start; + + /* only draw if at least part of the strip is within view + * - first 2 cases cover when the strip length is less than the viewable area + * - second 2 cases cover when the strip length is greater than the viewable area + */ + if ( (stripLen < viewWidth) && + !(IN_RANGE(strip->start, v2d->cur.xmin, v2d->cur.xmax) || + IN_RANGE(strip->end, v2d->cur.xmin, v2d->cur.xmax)) ) { - nla_draw_strip(nlt, strip, index, v2d, yminc, ymaxc); + continue; } + if ( (stripLen > viewWidth) && + !(IN_RANGE(v2d->cur.xmin, strip->start, strip->end) || + IN_RANGE(v2d->cur.xmax, strip->start, strip->end)) ) + { + continue; + } + + /* we're still here, so ok... */ + nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); } } break; @@ -521,7 +526,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* object channel - darker */ UI_ThemeColor(TH_DOPESHEET_CHANNELOB); uiSetRoundBox((expand == ICON_TRIA_UP)? (8):(1|8)); - gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 8); + gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 10); } else { /* sub-object folders - lighter */ @@ -547,7 +552,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) glColor3f(0.6f, 0.5f, 0.5f); // greyish-red color - hardcoded for now offset += 7 * indent; - uiSetRoundBox(15); + uiSetRoundBox((1|2)); // only on top two corners, to show that this channel sits on top of the preceeding ones gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 8); /* clear group value, otherwise we cause errors... */ @@ -610,16 +615,16 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) UI_icon_draw((float)(NLACHANNEL_NAMEWIDTH-offset), ydatac, mute); } - /* draw action 'push-down' */ - if (ale->type == ANIMTYPE_NLAACTION) { + /* draw action 'push-down' - only for NLA-Action lines, and only when there's an action */ + if ((ale->type == ANIMTYPE_NLAACTION) && (ale->data)) { offset += 16; /* XXX firstly draw a little rect to help identify that it's different from the toggles */ - glBegin(GL_LINES); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+7); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+7); + glBegin(GL_LINE_LOOP); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-8); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+8); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-8); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+8); glEnd(); // GL_LINES /* now draw the icon */ From c42eeddea491d6a79dbcc0b8b28386237085643d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 31 May 2009 04:52:20 +0000 Subject: [PATCH 014/512] NLA SoC: Bugfixes + Improvements to 'Push Down' track-selection * Trying to save no longer crashes in some cases when the NLA Editor was open with some data. The sanity check added in filesel.c might be able to be backported to 2.5? (Elubie, please check) * NLA-track names now get drawn with the correct colours for identifying themselves as being selected or not selected. * Now the 'push down' functionality for actions will try to add the new strip to the last NLA track, provided it has space in the range required. * When new strips are added, they will only be allowed to extrapolate before/after if they are the first (time-wise) strip for the set of NLA data per AnimData block. This stops layered strips overriding strips that occurred in earlier tracks at earlier times. --- source/blender/blenkernel/BKE_nla.h | 3 +- source/blender/blenkernel/intern/nla.c | 156 +++++++++++++----- .../blender/editors/animation/anim_channels.c | 14 ++ source/blender/editors/space_file/filesel.c | 3 + source/blender/editors/space_nla/nla_draw.c | 11 +- 5 files changed, 142 insertions(+), 45 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 49796250633..ededd77a92f 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -46,8 +46,9 @@ struct NlaStrip *copy_nlastrip(struct NlaStrip *strip); struct NlaTrack *copy_nlatrack(struct NlaTrack *nlt); void copy_nladata(ListBase *dst, ListBase *src); -struct NlaStrip *add_nlastrip(struct NlaTrack *nlt, struct bAction *act); struct NlaTrack *add_nlatrack(struct AnimData *adt); +struct NlaStrip *add_nlastrip(struct bAction *act); +struct NlaStrip *add_nlastrip_to_stack(struct AnimData *adt, struct bAction *act); /* ----------------------------- */ /* API */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 62500af85ff..3efa823f9fe 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -215,19 +215,45 @@ void copy_nladata (ListBase *dst, ListBase *src) /* Adding ------------------------------------------- */ -/* Add a NLA Strip referencing the given Action, to the given NLA Track */ -// TODO: any extra parameters to control how this is done? -NlaStrip *add_nlastrip (NlaTrack *nlt, bAction *act) +/* Add a NLA Track to the given AnimData */ +NlaTrack *add_nlatrack (AnimData *adt) +{ + NlaTrack *nlt; + + /* sanity checks */ + if (adt == NULL) + return NULL; + + /* allocate new track */ + nlt= MEM_callocN(sizeof(NlaTrack), "NlaTrack"); + + /* set settings requiring the track to not be part of the stack yet */ + nlt->flag = NLATRACK_SELECTED; + nlt->index= BLI_countlist(&adt->nla_tracks); + + /* add track to stack, and make it the active one */ + BLI_addtail(&adt->nla_tracks, nlt); + BKE_nlatrack_set_active(&adt->nla_tracks, nlt); + + /* must have unique name, but we need to seed this */ + sprintf(nlt->name, "NlaTrack"); + BLI_uniquename(&adt->nla_tracks, nlt, "NlaTrack", '.', offsetof(NlaTrack, name), 64); + + /* return the new track */ + return nlt; +} + +/* Add a NLA Strip referencing the given Action */ +NlaStrip *add_nlastrip (bAction *act) { NlaStrip *strip; /* sanity checks */ - if ELEM(NULL, nlt, act) + if (act == NULL) return NULL; /* allocate new strip */ strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip"); - BLI_addtail(&nlt->strips, strip); /* generic settings * - selected flag to highlight this to the user @@ -259,32 +285,54 @@ NlaStrip *add_nlastrip (NlaTrack *nlt, bAction *act) return strip; } -/* Add a NLA Track to the given AnimData */ -NlaTrack *add_nlatrack (AnimData *adt) +/* Add new NLA-strip to the top of the NLA stack - i.e. into the last track if space, or a new one otherwise */ +NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) { + NlaStrip *strip, *ns; NlaTrack *nlt; + short not_added = 1; /* sanity checks */ - if (adt == NULL) + if ELEM(NULL, adt, act) return NULL; - - /* allocate new track */ - nlt= MEM_callocN(sizeof(NlaTrack), "NlaTrack"); - /* set settings requiring the track to not be part of the stack yet */ - nlt->flag = NLATRACK_SELECTED; - nlt->index= BLI_countlist(&adt->nla_tracks); + /* create a new NLA strip */ + strip= add_nlastrip(act); + if (strip == NULL) + return NULL; - /* add track to stack, and make it the active one */ - BLI_addtail(&adt->nla_tracks, nlt); - BKE_nlatrack_set_active(&adt->nla_tracks, nlt); + /* check if the last NLA-track (if it exists) has any space for this strip: + * - if so, add this strip to that track + */ + if ( (adt->nla_tracks.last == NULL) || + (BKE_nlatrack_has_space(adt->nla_tracks.last, strip->start, strip->end)==0) ) + { + /* no space, so add to a new track... */ + nlt= add_nlatrack(adt); + } + else + { + /* there's some space, so add to this track... */ + nlt= adt->nla_tracks.last; + } - /* must have unique name, but we need to seed this */ - sprintf(nlt->name, "NlaTrack"); - BLI_uniquename(&adt->nla_tracks, nlt, "NlaTrack", '.', offsetof(NlaTrack, name), 64); + /* find the right place to add the strip to the nominated track */ + for (ns= nlt->strips.first; ns; ns= ns->next) { + /* if current strip occurs after the new strip, add it before */ + if (ns->start > strip->end) { + BLI_insertlinkbefore(&nlt->strips, ns, strip); + not_added= 0; + break; + } + } + if (not_added) { + /* just add to the end of the list of the strips then... */ + BLI_addtail(&nlt->strips, strip); + } - /* return the new track */ - return nlt; + + /* returns the strip added */ + return strip; } /* *************************************************** */ @@ -404,7 +452,39 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) nlt->strips.first= tmp.first; nlt->strips.last= tmp.last; } - + +/* NLA Strips -------------------------------------- */ + +/* Is the given NLA-strip the first one to occur for the given AnimData block */ +// TODO: make this an api method if necesary, but need to add prefix first +short nlastrip_is_first (AnimData *adt, NlaStrip *strip) +{ + NlaTrack *nlt; + NlaStrip *ns; + + /* sanity checks */ + if ELEM(NULL, adt, strip) + return 0; + + /* check if strip has any strips before it */ + if (strip->prev) + return 0; + + /* check other tracks to see if they have a strip that's earlier */ + // TODO: or should we check that the strip's track is also the first? + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + /* only check the first strip, assuming that they're all in order */ + ns= nlt->strips.first; + if (ns) { + if (ns->start < strip->start) + return 0; + } + } + + /* should be first now */ + return 1; +} + /* Tools ------------------------------------------- */ /* For the given AnimData block, add the active action to the NLA @@ -415,7 +495,6 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) // TODO: maybe we should have checks for this too... void BKE_nla_action_pushdown (AnimData *adt) { - NlaTrack *nlt; NlaStrip *strip; /* sanity checks */ @@ -431,28 +510,27 @@ void BKE_nla_action_pushdown (AnimData *adt) printf("BKE_nla_action_pushdown(): action has no data \n"); return; } - - /* add a new NLA track to house this action - * - we could investigate trying to fit the action into an appropriately - * sized gap in the existing tracks, however, this may result in unexpected - * changes in blending behaviour... - */ - nlt= add_nlatrack(adt); - if (nlt == NULL) { - printf("BKE_nla_action_pushdown(): no NLA-track added \n"); - return; - } /* add a new NLA strip to the track, which references the active action */ - strip= add_nlastrip(nlt, adt->action); + strip= add_nlastrip_to_stack(adt, adt->action); - /* clear reference to action now that we've pushed it onto the stack */ + /* do other necessary work on strip */ if (strip) { + /* clear reference to action now that we've pushed it onto the stack */ adt->action->id.us--; adt->action= NULL; + + /* if the strip is the first one in the track it lives in, check if there + * are strips in any other tracks that may be before this, and set the extend + * mode accordingly + */ + if (nlastrip_is_first(adt, strip) == 0) { + /* not first, so extend mode can only be NLASTRIP_EXTEND_HOLD_FORWARD not NLASTRIP_EXTEND_HOLD, + * so that it doesn't override strips in previous tracks + */ + strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD; + } } - - // TODO: set any other flags necessary here... } /* *************************************************** */ diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index a5f2acb591c..5d5be87801b 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -149,6 +149,13 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan ACHANNEL_SET_FLAG(fcu, ACHANNEL_SETFLAG_CLEAR, FCURVE_ACTIVE); } break; + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + ACHANNEL_SET_FLAG(nlt, ACHANNEL_SETFLAG_CLEAR, NLATRACK_ACTIVE); + } + break; } } @@ -167,6 +174,13 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan fcu->flag |= FCURVE_ACTIVE; } break; + case ANIMTYPE_NLATRACK: + { + NlaTrack *nlt= (NlaTrack *)channel_data; + + ACHANNEL_SET_FLAG(nlt, ACHANNEL_SETFLAG_CLEAR, NLATRACK_ACTIVE); + } + break; } } diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index cbd1457e562..091319cd402 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -144,6 +144,9 @@ int ED_fileselect_layout_offset(FileLayout* layout, int x, int y) int offsetx, offsety; int active_file; + if (layout == NULL) + return NULL; + offsetx = (x)/(layout->tile_w + 2*layout->tile_border_x); offsety = (y)/(layout->tile_h + 2*layout->tile_border_y); diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 28572704302..1a289d8436b 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -296,7 +296,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) indent= 0; special= ICON_SCENE_DATA; - + /* only show expand if there are any channels */ if (EXPANDED_SCEC(sce)) expand= ICON_TRIA_UP; @@ -484,6 +484,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) else protect = ICON_LOCKED; + sel = SEL_NLT(nlt); strcpy(name, nlt->name); } break; @@ -621,10 +622,10 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* XXX firstly draw a little rect to help identify that it's different from the toggles */ glBegin(GL_LINE_LOOP); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-8); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+8); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-8); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+8); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+9); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+9); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7); glEnd(); // GL_LINES /* now draw the icon */ From 33267f58581ea8f9d89028958c6e64a8d048d4db Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 31 May 2009 11:14:50 +0000 Subject: [PATCH 015/512] NLA SoC: Basic selection operators * Added click-select/left-right select and deselect all/invert all selection operators. For now, these basic operators will suffice (more advanced selection operators will be coded at a later stage). * Fixed a few bugs in DopeSheet found while coding the relevant tools for NLA. * Added custom border-select operator for NLA channels (since the standard one assumes negative direction channel order) * Added new API-method for NLA strips to check if the strip occurs within a given range, since this test needed to be performed in a few places... * Tweaked the NLA Editor View2D ranges a bit to give saner default sizing. This still isn't right yet though. --- source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenkernel/intern/nla.c | 31 ++ .../blender/editors/animation/anim_channels.c | 26 -- source/blender/editors/include/ED_anim_api.h | 27 +- .../editors/space_action/action_select.c | 3 +- .../blender/editors/space_nla/nla_channels.c | 110 ++++- source/blender/editors/space_nla/nla_draw.c | 26 +- source/blender/editors/space_nla/nla_intern.h | 17 +- source/blender/editors/space_nla/nla_ops.c | 23 +- source/blender/editors/space_nla/nla_select.c | 440 ++++++++++++++++++ source/blender/editors/space_nla/space_nla.c | 4 +- 11 files changed, 648 insertions(+), 61 deletions(-) create mode 100644 source/blender/editors/space_nla/nla_select.c diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index ededd77a92f..3c3abe11da3 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -59,6 +59,8 @@ void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt); short BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); +short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); + void BKE_nla_action_pushdown(struct AnimData *adt); #endif diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 3efa823f9fe..cf115cb6faf 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -455,6 +455,37 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) /* NLA Strips -------------------------------------- */ +/* Does the given NLA-strip fall within the given bounds (times)? */ +short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max) +{ + const float stripLen= (strip) ? strip->end - strip->start : 0.0f; + const float boundsLen= (float)fabs(max - min); + + /* sanity checks */ + if ((strip == NULL) || IS_EQ(stripLen, 0.0f) || IS_EQ(boundsLen, 0.0f)) + return 0; + + /* only ok if at least part of the strip is within the bounding window + * - first 2 cases cover when the strip length is less than the bounding area + * - second 2 cases cover when the strip length is greater than the bounding area + */ + if ( (stripLen < boundsLen) && + !(IN_RANGE(strip->start, min, max) || + IN_RANGE(strip->end, min, max)) ) + { + return 0; + } + if ( (stripLen > boundsLen) && + !(IN_RANGE(min, strip->start, strip->end) || + IN_RANGE(max, strip->start, strip->end)) ) + { + return 0; + } + + /* should be ok! */ + return 1; +} + /* Is the given NLA-strip the first one to occur for the given AnimData block */ // TODO: make this an api method if necesary, but need to add prefix first short nlastrip_is_first (AnimData *adt, NlaStrip *strip) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 5d5be87801b..658bff73978 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -87,32 +87,6 @@ /* ************************************************************************** */ /* CHANNELS API */ -/* -------------------------- Internal Macros ------------------------------- */ - -/* set/clear/toggle macro - * - channel - channel with a 'flag' member that we're setting - * - smode - 0=clear, 1=set, 2=toggle - * - sflag - bitflag to set - */ -#define ACHANNEL_SET_FLAG(channel, smode, sflag) \ - { \ - if (smode == ACHANNEL_SETFLAG_TOGGLE) (channel)->flag ^= (sflag); \ - else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag |= (sflag); \ - else (channel)->flag &= ~(sflag); \ - } - -/* set/clear/toggle macro, where the flag is negative - * - channel - channel with a 'flag' member that we're setting - * - smode - 0=clear, 1=set, 2=toggle - * - sflag - bitflag to set - */ -#define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \ - { \ - if (smode == ACHANNEL_SETFLAG_TOGGLE) (channel)->flag ^= (sflag); \ - else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag &= ~(sflag); \ - else (channel)->flag |= (sflag); \ - } - /* -------------------------- Exposed API ----------------------------------- */ /* Set the given animation-channel as the active one for the active context */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 7629fc29352..cdd8b5c368c 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -317,10 +317,35 @@ void ANIM_nla_mapping_draw(struct gla2DDrawInfo *di, struct Object *ob, short re /* Apply/Unapply NLA mapping to all keyframes in the nominated IPO block */ void ANIM_nla_mapping_apply_fcurve(struct Object *ob, struct FCurve *fcu, short restore, short only_keys); -/* ------------- xxx macros ----------------------- */ +/* ------------- Utility macros ----------------------- */ +/* checks if the given BezTriple is selected */ #define BEZSELECTED(bezt) ((bezt->f2 & SELECT) || (bezt->f1 & SELECT) || (bezt->f3 & SELECT)) +/* set/clear/toggle macro + * - channel - channel with a 'flag' member that we're setting + * - smode - 0=clear, 1=set, 2=toggle + * - sflag - bitflag to set + */ +#define ACHANNEL_SET_FLAG(channel, smode, sflag) \ + { \ + if (smode == ACHANNEL_SETFLAG_TOGGLE) (channel)->flag ^= (sflag); \ + else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag |= (sflag); \ + else (channel)->flag &= ~(sflag); \ + } + +/* set/clear/toggle macro, where the flag is negative + * - channel - channel with a 'flag' member that we're setting + * - smode - 0=clear, 1=set, 2=toggle + * - sflag - bitflag to set + */ +#define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \ + { \ + if (smode == ACHANNEL_SETFLAG_TOGGLE) (channel)->flag ^= (sflag); \ + else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag &= ~(sflag); \ + else (channel)->flag |= (sflag); \ + } + /* --------- anim_deps.c, animation updates -------- */ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index d4782418be7..f64cd0f707c 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -174,7 +174,7 @@ static int actkeys_deselectall_exec(bContext *C, wmOperator *op) deselect_action_keys(&ac, 1, SELECT_ADD); /* set notifier that things have changed */ - ED_area_tag_redraw(CTX_wm_area(C)); // FIXME... should be updating 'keyframes' data context or so instead! + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); return OPERATOR_FINISHED; } @@ -766,6 +766,7 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, if (ale == NULL) { /* channel not found */ printf("Error: animation channel (index = %d) not found in mouse_action_keys() \n", channel_index); + BLI_freelistN(&anim_data); return; } else { diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 658ce69cc10..a839ccbf3d6 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -82,7 +82,115 @@ /* *********************************************** */ /* Operators for NLA channels-list which need to be different from the standard Animation Editor ones */ -// TODO: implemented borderselect too, since that also relies on ranges of buttons +/* ******************** Borderselect Operator *********************** */ + +static void borderselect_nla_channels (bAnimContext *ac, rcti *rect, short selectmode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + View2D *v2d= &ac->ar->v2d; + rctf rectf; + float ymin=(float)(-NLACHANNEL_HEIGHT), ymax=0; + + /* convert border-region to view coordinates */ + UI_view2d_region_to_view(v2d, rect->xmin, rect->ymin+2, &rectf.xmin, &rectf.ymin); + UI_view2d_region_to_view(v2d, rect->xmax, rect->ymax-2, &rectf.xmax, &rectf.ymax); + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* loop over data, doing border select */ + for (ale= anim_data.first; ale; ale= ale->next) { + ymax= ymin + NLACHANNEL_STEP; + + /* if channel is within border-select region, alter it */ + if (!((ymax < rectf.ymin) || (ymin > rectf.ymax))) { + /* only the following types can be selected */ + switch (ale->type) { + case ANIMTYPE_OBJECT: /* object */ + { + Base *base= (Base *)ale->data; + Object *ob= base->object; + + ACHANNEL_SET_FLAG(base, selectmode, SELECT); + ACHANNEL_SET_FLAG(ob, selectmode, SELECT); + } + break; + case ANIMTYPE_NLATRACK: /* nla-track */ + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + ACHANNEL_SET_FLAG(nlt, selectmode, NLATRACK_SELECTED); + } + break; + } + } + + /* set maximum extent to be the minimum of the next channel */ + ymin= ymax; + } + + /* cleanup */ + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +static int nlachannels_borderselect_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + rcti rect; + short selectmode=0; + int event; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get settings 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"); + + event= RNA_int_get(op->ptr, "event_type"); + if (event == LEFTMOUSE) // FIXME... hardcoded + selectmode = ACHANNEL_SETFLAG_ADD; + else + selectmode = ACHANNEL_SETFLAG_CLEAR; + + /* apply borderselect animation channels */ + borderselect_nla_channels(&ac, &rect, selectmode); + + return OPERATOR_FINISHED; +} + +void NLA_OT_channels_select_border(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Border Select"; + ot->idname= "NLA_OT_channels_select_border"; + + /* api callbacks */ + ot->invoke= WM_border_select_invoke; + ot->exec= nlachannels_borderselect_exec; + ot->modal= WM_border_select_modal; + + ot->poll= ED_operator_areaactive; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* rna */ + RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); +} /* ******************** Mouse-Click Operator *********************** */ /* Depending on the channel that was clicked on, the mouse click will activate whichever diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 1a289d8436b..def49021160 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -137,7 +137,6 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) int filter; View2D *v2d= &ar->v2d; - float viewWidth = v2d->cur.xmax - v2d->cur.xmin; float y= 0.0f; int items, height; @@ -180,29 +179,10 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* draw backdrop? */ // TODO... - /* draw each strip in the track */ + /* draw each strip in the track (if visible) */ for (strip=nlt->strips.first; strip; strip= strip->next) { - float stripLen= strip->end - strip->start; - - /* only draw if at least part of the strip is within view - * - first 2 cases cover when the strip length is less than the viewable area - * - second 2 cases cover when the strip length is greater than the viewable area - */ - if ( (stripLen < viewWidth) && - !(IN_RANGE(strip->start, v2d->cur.xmin, v2d->cur.xmax) || - IN_RANGE(strip->end, v2d->cur.xmin, v2d->cur.xmax)) ) - { - continue; - } - if ( (stripLen > viewWidth) && - !(IN_RANGE(v2d->cur.xmin, strip->start, strip->end) || - IN_RANGE(v2d->cur.xmax, strip->start, strip->end)) ) - { - continue; - } - - /* we're still here, so ok... */ - nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); + if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) + nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); } } break; diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 37eb7774696..448b823bd4b 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -17,11 +17,11 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2008 Blender Foundation. + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung. * All rights reserved. * * - * Contributor(s): Blender Foundation + * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** */ @@ -60,6 +60,18 @@ void nla_header_buttons(const bContext *C, ARegion *ar); /* **************************************** */ /* nla_select.c */ +/* defines for left-right select tool */ +enum { + NLAEDIT_LRSEL_TEST = -1, + NLAEDIT_LRSEL_NONE, + NLAEDIT_LRSEL_LEFT, + NLAEDIT_LRSEL_RIGHT, +} eNlaEdit_LeftRightSelect_Mode; + +/* --- */ + +void NLAEDIT_OT_select_all_toggle(wmOperatorType *ot); +void NLAEDIT_OT_click_select(wmOperatorType *ot); /* **************************************** */ /* nla_edit.c */ @@ -67,6 +79,7 @@ void nla_header_buttons(const bContext *C, ARegion *ar); /* **************************************** */ /* nla_channels.c */ +void NLA_OT_channels_select_border(wmOperatorType *ot); void NLA_OT_channels_click(wmOperatorType *ot); /* **************************************** */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index ea450a08475..167686c99f9 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -72,9 +72,11 @@ void nla_operatortypes(void) { /* channels */ WM_operatortype_append(NLA_OT_channels_click); + WM_operatortype_append(NLA_OT_channels_select_border); /* select */ - // ... + WM_operatortype_append(NLAEDIT_OT_click_select); + WM_operatortype_append(NLAEDIT_OT_select_all_toggle); } /* ************************** registration - keymaps **********************************/ @@ -88,14 +90,14 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); + /* borderselect */ + WM_keymap_add_item(keymap, "NLA_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); + /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ /* deselect all */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); - /* borderselect */ - WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); - /* settings */ WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_toggle", WKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_enable", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); @@ -114,8 +116,19 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) { - //wmKeymapItem *kmi; + wmKeymapItem *kmi; + /* selection */ + /* click select */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, 0, 0); + kmi= WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "extend", 1); + kmi= WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "left_right", NLAEDIT_LRSEL_TEST); + + /* deselect all */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); /* transform system */ diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c new file mode 100644 index 00000000000..5d9fe5f2a05 --- /dev/null +++ b/source/blender/editors/space_nla/nla_select.c @@ -0,0 +1,440 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * + * Contributor(s): Joshua Leung (major recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_nla_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_context.h" +#include "BKE_report.h" +#include "BKE_screen.h" + +#include "ED_anim_api.h" +#include "ED_keyframes_edit.h" +#include "ED_markers.h" +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "nla_intern.h" // own include + +/* ******************** Utilities ***************************************** */ + +/* Convert SELECT_* flags to ACHANNEL_SETFLAG_* flags */ +static short selmodes_to_flagmodes (short sel) +{ + /* convert selection modes to selection modes */ + switch (sel) { + case SELECT_SUBTRACT: + return ACHANNEL_SETFLAG_CLEAR; + break; + + case SELECT_INVERT: + return ACHANNEL_SETFLAG_TOGGLE; + break; + + case SELECT_ADD: + default: + return ACHANNEL_SETFLAG_ADD; + break; + } +} + + +/* ******************** Deselect All Operator ***************************** */ +/* This operator works in one of three ways: + * 1) (de)select all (AKEY) - test if select all or deselect all + * 2) invert all (CTRL-IKEY) - invert selection of all keyframes + * 3) (de)select all - no testing is done; only for use internal tools as normal function... + */ + +/* Deselects strips in the NLA Editor + * - This is called by the deselect all operator, as well as other ones! + * + * - test: check if select or deselect all + * - sel: how to select keyframes + * 0 = deselect + * 1 = select + * 2 = invert + */ +static void deselect_nla_strips (bAnimContext *ac, short test, short sel) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + short smode; + + /* determine type-based settings - curvesonly eliminates all the unnecessary channels... */ + filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CURVESONLY); + + /* filter data */ + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* See if we should be selecting or deselecting */ + if (test) { + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* if any strip is selected, break out, since we should now be deselecting */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (strip->flag & NLASTRIP_FLAG_SELECT) { + sel= SELECT_SUBTRACT; + break; + } + } + + if (sel == SELECT_SUBTRACT) + break; + } + } + + /* convert selection modes to selection modes */ + smode= selmodes_to_flagmodes(sel); + + /* Now set the flags */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* apply same selection to all strips */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* set selection */ + ACHANNEL_SET_FLAG(strip, smode, NLASTRIP_FLAG_SELECT); + + /* clear active flag */ + strip->flag &= ~NLASTRIP_FLAG_ACTIVE; + } + } + + /* Cleanup */ + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +static int nlaedit_deselectall_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* 'standard' behaviour - check if selected, then apply relevant selection */ + if (RNA_boolean_get(op->ptr, "invert")) + deselect_nla_strips(&ac, 0, SELECT_INVERT); + else + deselect_nla_strips(&ac, 1, SELECT_ADD); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_select_all_toggle (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select All"; + ot->idname= "NLAEDIT_OT_select_all_toggle"; + + /* api callbacks */ + ot->exec= nlaedit_deselectall_exec; + ot->poll= ED_operator_areaactive; + + /* flags */ + ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; + + /* props */ + RNA_def_boolean(ot->srna, "invert", 0, "Invert", ""); +} + +/* ******************** Mouse-Click Select Operator *********************** */ +/* This operator works in one of 2 ways: + * 1) Select the strip directly under the mouse + * 2) Select all the strips to one side of the mouse + */ + +/* defines for left-right select tool */ +static EnumPropertyItem prop_nlaedit_leftright_select_types[] = { + {NLAEDIT_LRSEL_TEST, "CHECK", "Check if Select Left or Right", ""}, + {NLAEDIT_LRSEL_NONE, "OFF", "Don't select", ""}, + {NLAEDIT_LRSEL_LEFT, "LEFT", "Before current frame", ""}, + {NLAEDIT_LRSEL_RIGHT, "RIGHT", "After current frame", ""}, + {0, NULL, NULL, NULL} +}; + +/* sensitivity factor for frame-selections */ +#define FRAME_CLICK_THRESH 0.1f + + +/* ------------------- */ + +/* option 1) select strip directly under mouse */ +static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale = NULL; + int filter; + + View2D *v2d= &ac->ar->v2d; + NlaStrip *strip = NULL; + int channel_index; + float xmin, xmax, dummy; + float x, y; + + + /* use View2D to determine the index of the channel (i.e a row in the list) where keyframe was */ + UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y); + UI_view2d_listview_view_to_cell(v2d, 0, NLACHANNEL_STEP, 0, 0, x, y, NULL, &channel_index); + + /* x-range to check is +/- 7 (in screen/region-space) on either side of mouse click + * (that is the size of keyframe icons, so user should be expecting similar tolerances) + */ + UI_view2d_region_to_view(v2d, mval[0]-7, mval[1], &xmin, &dummy); + UI_view2d_region_to_view(v2d, mval[0]+7, mval[1], &xmax, &dummy); + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* try to get channel */ + ale= BLI_findlink(&anim_data, channel_index); + if (ale == NULL) { + /* channel not found */ + printf("Error: animation channel (index = %d) not found in mouse_nla_strips() \n", channel_index); + BLI_freelistN(&anim_data); + return; + } + else { + /* found some channel - we only really should do somethign when its an Nla-Track */ + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + + /* loop over NLA-strips in this track, trying to find one which occurs in the necessary bounds */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (BKE_nlastrip_within_bounds(strip, xmin, xmax)) + break; + } + } + + /* remove active channel from list of channels for separate treatment (since it's needed later on) */ + BLI_remlink(&anim_data, ale); + + /* free list of channels, since it's not used anymore */ + BLI_freelistN(&anim_data); + } + + /* for replacing selection, firstly need to clear existing selection */ + if (select_mode == SELECT_REPLACE) { + /* reset selection mode for next steps */ + select_mode = SELECT_ADD; + + /* deselect all strips */ + deselect_nla_strips(ac, 0, SELECT_SUBTRACT); + + /* deselect all other channels first */ + ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + + /* Highlight NLA-Track */ + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + + nlt->flag |= NLATRACK_SELECTED; + ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + } + } + + /* only select strip if we clicked on a valid channel and hit something */ + if (ale) { + /* select the strip accordingly (if a matching one was found) */ + if (strip) { + select_mode= selmodes_to_flagmodes(select_mode); + ACHANNEL_SET_FLAG(strip, select_mode, NLASTRIP_FLAG_SELECT); + } + + /* free this channel */ + MEM_freeN(ale); + } +} + +/* Option 2) Selects all the strips on either side of the current frame (depends on which side the mouse is on) */ +static void nlaedit_mselect_leftright (bAnimContext *ac, short leftright, short select_mode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + Scene *scene= ac->scene; + float xmin, xmax; + + /* if select mode is replace, deselect all keyframes (and channels) first */ + if (select_mode==SELECT_REPLACE) { + select_mode= SELECT_ADD; + + /* deselect all other channels and keyframes */ + ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + deselect_nla_strips(ac, 0, SELECT_SUBTRACT); + } + + /* get range, and get the right flag-setting mode */ + if (leftright == NLAEDIT_LRSEL_LEFT) { + xmin = -MAXFRAMEF; + xmax = (float)(CFRA + FRAME_CLICK_THRESH); + } + else { + xmin = (float)(CFRA - FRAME_CLICK_THRESH); + xmax = MAXFRAMEF; + } + + select_mode= selmodes_to_flagmodes(select_mode); + + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* select strips on the side where most data occurs */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* check each strip to see if it is appropriate */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (BKE_nlastrip_within_bounds(strip, xmin, xmax)) { + ACHANNEL_SET_FLAG(strip, select_mode, NLASTRIP_FLAG_SELECT); + } + } + } + + /* Cleanup */ + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +/* handle clicking */ +static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + bAnimContext ac; + Scene *scene; + ARegion *ar; + View2D *v2d; + short selectmode; + int mval[2]; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get useful pointers from animation context data */ + scene= ac.scene; + ar= ac.ar; + v2d= &ar->v2d; + + /* get mouse coordinates (in region coordinates) */ + mval[0]= (event->x - ar->winrct.xmin); + mval[1]= (event->y - ar->winrct.ymin); + + /* select mode is either replace (deselect all, then add) or add/extend */ + if (RNA_boolean_get(op->ptr, "extend")) + selectmode= SELECT_INVERT; + else + selectmode= SELECT_REPLACE; + + /* figure out action to take */ + if (RNA_enum_get(op->ptr, "left_right")) { + /* select all keys on same side of current frame as mouse */ + float x; + + UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL); + if (x < CFRA) + RNA_int_set(op->ptr, "left_right", NLAEDIT_LRSEL_LEFT); + else + RNA_int_set(op->ptr, "left_right", NLAEDIT_LRSEL_RIGHT); + + nlaedit_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode); + } + else { + /* select strips based upon mouse position */ + mouse_nla_strips(&ac, mval, selectmode); + } + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + + /* for tweak grab to work */ + return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; +} + +void NLAEDIT_OT_click_select (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Mouse Select"; + ot->idname= "NLAEDIT_OT_click_select"; + + /* api callbacks - absolutely no exec() this yet... */ + ot->invoke= nlaedit_clickselect_invoke; + ot->poll= ED_operator_areaactive; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* id-props */ + // XXX should we make this into separate operators? + RNA_def_enum(ot->srna, "left_right", prop_nlaedit_leftright_select_types, 0, "Left Right", ""); // CTRLKEY + RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 1313b4d915d..024b23c51b8 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -105,12 +105,12 @@ static SpaceLink *nla_new(const bContext *C) ar->v2d.tot.xmin= 1.0f; ar->v2d.tot.ymin= 0.0f; ar->v2d.tot.xmax= 1000.0f; - ar->v2d.tot.ymax= 1000.0f; + ar->v2d.tot.ymax= 500.0f; ar->v2d.cur.xmin= -5.0f; ar->v2d.cur.ymin= 0.0f; ar->v2d.cur.xmax= 65.0f; - ar->v2d.cur.ymax= 1000.0f; + ar->v2d.cur.ymax= 250.0f; ar->v2d.min[0]= 0.0f; ar->v2d.min[1]= 0.0f; From 6a35302a54071bfd12df7d4a71e710d1e250b34d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 2 Jun 2009 09:58:06 +0000 Subject: [PATCH 016/512] NLA SoC: Fixed merge errors. Manually copied over any files from 2.5 that were modified in a commit by Brecht between the time when I had done the previous merge and the time when the commit for that finally got through. --- source/blender/blenkernel/BKE_library.h | 1 + source/blender/blenkernel/intern/library.c | 6 + source/blender/editors/include/ED_object.h | 17 +- source/blender/editors/include/UI_interface.h | 9 +- source/blender/editors/interface/interface.c | 13 +- .../blender/editors/interface/interface_api.c | 11 +- .../editors/interface/interface_handlers.c | 6 +- .../editors/interface/interface_utils.c | 4 +- .../editors/interface/interface_widgets.c | 6 +- .../blender/editors/object/editconstraint.c | 293 +++++++++++++++--- source/blender/editors/object/object_intern.h | 3 + .../blender/editors/object/object_modifier.c | 2 + source/blender/editors/object/object_ops.c | 2 + .../editors/space_image/image_header.c | 14 +- .../editors/space_view3d/view3d_header.c | 24 +- source/blender/makesrna/RNA_enum_types.h | 1 + .../blender/makesrna/intern/rna_constraint.c | 2 +- source/blender/makesrna/intern/rna_object.c | 4 +- source/blender/makesrna/intern/rna_pose.c | 1 - source/blender/makesrna/intern/rna_sound.c | 16 +- source/blender/makesrna/intern/rna_ui.c | 2 +- source/blender/windowmanager/WM_types.h | 1 + 22 files changed, 341 insertions(+), 97 deletions(-) diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index e598394cc60..ce182267b93 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -45,6 +45,7 @@ void *copy_libblock(void *rt); void id_lib_extern(struct ID *id); void id_us_plus(struct ID *id); +void id_us_min(struct ID *id); int check_for_dupid(struct ListBase *lb, struct ID *id, char *name); int new_id(struct ListBase *lb, struct ID *id, const char *name); diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index d0e4c1a15bc..90ab4e05d44 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -142,6 +142,12 @@ void id_us_plus(ID *id) } } +void id_us_min(ID *id) +{ + if(id) + id->us--; +} + ListBase *wich_libbase(Main *mainlib, short type) { switch( type ) { diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index c6277f319bc..3d0de795778 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -35,6 +35,7 @@ struct bContext; struct Base; struct View3D; struct bConstraint; +struct bConstraintChannel; struct KeyBlock; struct Lattice; struct Mesh; @@ -71,8 +72,20 @@ void ED_object_base_init_from_view(struct bContext *C, struct Base *base); int object_data_is_libdata(struct Object *ob); /* constraints */ -struct bConstraint *add_new_constraint (short type); -void add_constraint_to_object (struct bConstraint *con, struct Object *ob); +struct bConstraint *add_new_constraint(short type); +void add_constraint_to_object(struct bConstraint *con, struct Object *ob); + +struct ListBase *get_active_constraints(struct Object *ob); +struct bConstraint *get_active_constraint(struct Object *ob); +struct bConstraintChannel *get_active_constraint_channel(struct Scene *scene, struct Object *ob); + +void object_test_constraints(struct Object *ob); + +void ED_object_constraint_rename(struct Object *ob, struct bConstraint *con, char *oldname); +void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con); +int ED_object_constraint_delete(struct ReportList *reports, struct Object *ob, struct bConstraint *con); +int ED_object_constraint_move_down(struct ReportList *reports, struct Object *ob, struct bConstraint *con); +int ED_object_constraint_move_up(struct ReportList *reports, struct Object *ob, struct bConstraint *con); /* editlattice.c */ void mouse_lattice(struct bContext *C, short mval[2], int extend); diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index cdb29ecf376..97c2da5297f 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -189,6 +189,8 @@ typedef struct uiLayout uiLayout; #define FTPREVIEW (35<<9) #define NUMABS (36<<9) #define TOGBUT (37<<9) +#define OPTION (38<<9) +#define OPTIONN (39<<9) #define BUTTYPE (63<<9) /* Drawing @@ -579,7 +581,8 @@ uiBlock *uiLayoutFreeBlock(uiLayout *layout); void uiTemplateHeader(uiLayout *layout, struct bContext *C); void uiTemplateHeaderID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop); -uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr); +uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr); +uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr); void uiTemplatePreview(uiLayout *layout, struct ID *id); /* items */ @@ -592,8 +595,8 @@ void uiItemFloatO(uiLayout *layout, char *name, int icon, char *opname, char *pr void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value); void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, struct IDProperty *properties, int context); -void uiItemR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int expand, int slider); -void uiItemFullR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int value, int expand, int slider); +void uiItemR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int expand, int slider, int toggle); +void uiItemFullR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int value, int expand, int slider, int toggle); void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value); void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 0b094f0c8dc..e9a886375c3 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -679,7 +679,7 @@ static void ui_is_but_sel(uiBut *but) value= ui_get_but_val(but); - if( but->type==TOGN || but->type==ICONTOGN) true= 0; + if(ELEM3(but->type, TOGN, ICONTOGN, OPTIONN)) true= 0; if( but->bit ) { lvalue= (int)value; @@ -700,10 +700,12 @@ static void ui_is_but_sel(uiBut *but) case TOG3: case BUT_TOGDUAL: case ICONTOG: + case OPTION: if(value!=but->hardmin) push= 1; break; case ICONTOGN: case TOGN: + case OPTIONN: if(value==0.0) push= 1; break; case ROW: @@ -1509,7 +1511,12 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) * custom collection too for bones, vertex groups, .. */ ui_rna_ID_collection(C, but, &ptr, &prop); - if(prop && RNA_property_collection_lookup_string(&ptr, prop, str, &rptr)) { + if(str == NULL || str[0] == '\0') { + memset(&rptr, 0, sizeof(rptr)); + RNA_property_pointer_set(&but->rnapoin, but->rnaprop, rptr); + return 11; + } + else if(prop && RNA_property_collection_lookup_string(&ptr, prop, str, &rptr)) { RNA_property_pointer_set(&but->rnapoin, but->rnaprop, rptr); return 1; } @@ -1989,7 +1996,7 @@ void uiBlockEndAlign(uiBlock *block) int ui_but_can_align(uiBut *but) { - return (but->type != LABEL); + return !ELEM3(but->type, LABEL, OPTION, OPTIONN); } static void ui_block_do_align_but(uiBlock *block, uiBut *first, int nr) diff --git a/source/blender/editors/interface/interface_api.c b/source/blender/editors/interface/interface_api.c index 3cb6678133f..2bbaee857d1 100644 --- a/source/blender/editors/interface/interface_api.c +++ b/source/blender/editors/interface/interface_api.c @@ -89,7 +89,8 @@ void RNA_api_ui_layout(StructRNA *srna) parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data."); RNA_def_property_flag(parm, PROP_REQUIRED); RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail."); - RNA_def_boolean(func, "slider", 0, "", "Use slider for numeric values."); + RNA_def_boolean(func, "slider", 0, "", "Use slider widget for numeric values."); + RNA_def_boolean(func, "toggle", 0, "", "Use toggle widget for boolean values."); func= RNA_def_function(srna, "items_enumR", "uiItemsEnumR"); parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property."); @@ -198,13 +199,17 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block."); func= RNA_def_function(srna, "template_modifier", "uiTemplateModifier"); - parm= RNA_def_pointer(func, "context", "Context", "", "Current context."); - RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_pointer(func, "data", "AnyType", "", "Modifier data."); RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in."); RNA_def_function_return(func, parm); + func= RNA_def_function(srna, "template_constraint", "uiTemplateConstraint"); + parm= RNA_def_pointer(func, "data", "AnyType", "", "Constraint data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in."); + RNA_def_function_return(func, parm); + func= RNA_def_function(srna, "template_preview", "uiTemplatePreview"); parm= RNA_def_pointer(func, "id", "ID", "", "ID datablock."); RNA_def_property_flag(parm, PROP_REQUIRED); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index ce01bc19856..ec2f960dd14 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -364,7 +364,7 @@ static void ui_apply_but_TOG(bContext *C, uiBlock *block, uiBut *but, uiHandleBu if(value==0.0) push= 1; else push= 0; - if(but->type==TOGN || but->type==ICONTOGN) push= !push; + if(ELEM3(but->type, TOGN, ICONTOGN, OPTIONN)) push= !push; ui_set_but_val(but, (double)push); if(but->type==ICONTOG || but->type==ICONTOGN) ui_check_but(but); } @@ -566,6 +566,8 @@ static void ui_apply_button(bContext *C, uiBlock *block, uiBut *but, uiHandleBut case ICONTOGN: case TOGN: case BUT_TOGDUAL: + case OPTION: + case OPTIONN: ui_apply_but_TOG(C, block, but, data); break; case ROW: @@ -2672,6 +2674,8 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) case ICONTOGN: case TOGN: case BUT_TOGDUAL: + case OPTION: + case OPTIONN: retval= ui_do_but_TOG(C, but, data, event); break; #if 0 diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 16451ec4510..7c739adf1b9 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -268,7 +268,7 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind else if(icon) but= uiDefIconTextButR(block, ICONTOG, 0, icon, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL); else - but= uiDefButR(block, TOG, 0, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL); + but= uiDefButR(block, OPTION, 0, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL); break; } case PROP_INT: @@ -338,7 +338,7 @@ void uiDefAutoButsRNA(const bContext *C, uiLayout *layout, PointerRNA *ptr) name= (char*)RNA_property_ui_name(prop); uiItemL(uiLayoutColumn(split, 0), name, 0); - uiItemFullR(uiLayoutColumn(split, 0), "", 0, ptr, prop, -1, 0, 0, 0); + uiItemFullR(uiLayoutColumn(split, 0), "", 0, ptr, prop, -1, 0, 0, 0, 0); } RNA_property_collection_end(&iter); diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index f779022ece5..f4e3a7f2899 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1830,11 +1830,13 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect) wt= widget_type(UI_WTYPE_NAME); break; case TOGBUT: - wt= widget_type(UI_WTYPE_TOGGLE); - break; case TOG: case TOGN: case TOG3: + wt= widget_type(UI_WTYPE_TOGGLE); + break; + case OPTION: + case OPTIONN: if (!(but->flag & UI_HAS_ICON)) { wt= widget_type(UI_WTYPE_OPTION); but->flag |= UI_TEXT_LEFT; diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index d0e487f98c7..b2cf3be6229 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -49,17 +49,27 @@ #include "BKE_action.h" #include "BKE_armature.h" #include "BKE_constraint.h" +#include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_global.h" #include "BKE_main.h" #include "BKE_object.h" +#include "BKE_report.h" #include "BKE_utildefines.h" #ifndef DISABLE_PYTHON #include "BPY_extern.h" #endif +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" +#include "RNA_enum_types.h" + #include "ED_object.h" +#include "ED_screen.h" #include "object_intern.h" @@ -589,55 +599,6 @@ void ob_clear_constraints (Scene *scene) BIF_undo_push("Clear Constraint(s)"); } -/* Rename the given constraint - * - con already has the new name - */ -void rename_constraint (Object *ob, bConstraint *con, char *oldname) -{ - bConstraint *tcon; - ListBase *conlist= NULL; - int from_object= 0; - char *channame=""; - - /* get context by searching for con (primitive...) */ - for (tcon= ob->constraints.first; tcon; tcon= tcon->next) { - if (tcon==con) - break; - } - - if (tcon) { - conlist= &ob->constraints; - channame= "Object"; - from_object= 1; - } - else if (ob->pose) { - bPoseChannel *pchan; - - for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { - for (tcon= pchan->constraints.first; tcon; tcon= tcon->next) { - if (tcon==con) - break; - } - if (tcon) - break; - } - - if (tcon) { - conlist= &pchan->constraints; - channame= pchan->name; - } - } - - if (conlist==NULL) { - printf("rename constraint failed\n"); /* should not happen in UI */ - return; - } - - /* first make sure it's a unique name within context */ - unique_constraint_name (con, conlist); -} - - /* ------------- Constraint Sanity Testing ------------------- */ /* checks validity of object pointers, and NULLs, @@ -889,3 +850,237 @@ void childof_const_clearinv (void *conv, void *unused) /* simply clear the matrix */ Mat4One(data->invmat); } + +/***************************** BUTTONS ****************************/ + +/* Rename the given constraint, con already has the new name */ +void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname) +{ + bConstraint *tcon; + ListBase *conlist= NULL; + int from_object= 0; + char *channame=""; + + /* get context by searching for con (primitive...) */ + for (tcon= ob->constraints.first; tcon; tcon= tcon->next) { + if (tcon==con) + break; + } + + if (tcon) { + conlist= &ob->constraints; + channame= "Object"; + from_object= 1; + } + else if (ob->pose) { + bPoseChannel *pchan; + + for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { + for (tcon= pchan->constraints.first; tcon; tcon= tcon->next) { + if (tcon==con) + break; + } + if (tcon) + break; + } + + if (tcon) { + conlist= &pchan->constraints; + channame= pchan->name; + } + } + + if (conlist==NULL) { + printf("rename constraint failed\n"); /* should not happen in UI */ + return; + } + + /* first make sure it's a unique name within context */ + unique_constraint_name (con, conlist); +} + + + + +void ED_object_constraint_set_active(Object *ob, bConstraint *con) +{ + ListBase *lb; + bConstraint *origcon= con; + + /* lets be nice and escape if its active already */ + if(con && (con->flag & CONSTRAINT_ACTIVE)) + return ; + + lb= get_active_constraints(ob); + if(lb == NULL) + return; + + for(con= lb->first; con; con= con->next) { + if(con==origcon) con->flag |= CONSTRAINT_ACTIVE; + else con->flag &= ~CONSTRAINT_ACTIVE; + } + + /* make sure ipowin and buttons shows it */ + if(ob->ipowin==ID_CO) { + // XXX allqueue(REDRAWIPO, ID_CO); + // XXX allspace(REMAKEIPO, 0); + // XXX allqueue(REDRAWNLA, 0); + } + // XXX allqueue(REDRAWBUTSOBJECT, 0); +} + +int ED_object_constraint_delete(ReportList *reports, Object *ob, bConstraint *con) +{ + bConstraintChannel *chan; + ListBase *lb; + + /* remove ipo channel */ + lb= NULL; // XXX get_active_constraint_channels(ob, 0); + if(lb) { + chan = NULL; // XXX get_constraint_channel(lb, con->name); + if(chan) { + if(chan->ipo) chan->ipo->id.us--; + BLI_freelinkN(lb, chan); + } + } + + /* remove constraint itself */ + lb= get_active_constraints(ob); + free_constraint_data(con); + BLI_freelinkN(lb, con); + + ED_object_constraint_set_active(ob, NULL); + + return 1; +} + +int ED_object_constraint_move_down(ReportList *reports, Object *ob, bConstraint *constr) +{ + bConstraint *con; + ListBase *conlist; + + if(constr->next) { + conlist = get_active_constraints(ob); + for(con= conlist->first; con; con= con->next) { + if(con==constr) { + BLI_remlink(conlist, con); + BLI_insertlink(conlist, con->next, con); + return 1; + } + } + } + + return 0; +} + +int ED_object_constraint_move_up(ReportList *reports, Object *ob, bConstraint *constr) +{ + bConstraint *con; + ListBase *conlist; + + if(constr->prev) { + conlist = get_active_constraints(ob); + for(con= conlist->first; con; con= con->next) { + if(con==constr) { + BLI_remlink(conlist, con); + BLI_insertlink(conlist, con->prev->prev, con); + return 1; + } + } + } + + return 0; +} + +/***************************** OPERATORS ****************************/ + +/************************ add constraint operator *********************/ + +static int constraint_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + bConstraint *con; + ListBase *list= get_active_constraints(ob); + bPoseChannel *pchan= get_active_posechannel(ob); + int type= RNA_enum_get(op->ptr, "type"); + + con = add_new_constraint(type); + + if(list) { + unique_constraint_name(con, list); + BLI_addtail(list, con); + + if(proxylocked_constraints_owner(ob, pchan)) + con->flag |= CONSTRAINT_PROXY_LOCAL; + + con->flag |= CONSTRAINT_ACTIVE; + for(con= con->prev; con; con= con->prev) + con->flag &= ~CONSTRAINT_ACTIVE; + } + + switch(type) { + case CONSTRAINT_TYPE_CHILDOF: + { + /* if this constraint is being added to a posechannel, make sure + * the constraint gets evaluated in pose-space */ + if(ob->flag & OB_POSEMODE) { + con->ownspace = CONSTRAINT_SPACE_POSE; + con->flag |= CONSTRAINT_SPACEONCE; + } + } + break; + case CONSTRAINT_TYPE_RIGIDBODYJOINT: + { + bRigidBodyJointConstraint *data; + + /* set selected first object as target - moved from new_constraint_data */ + data = (bRigidBodyJointConstraint*)con->data; + + CTX_DATA_BEGIN(C, Object*, selob, selected_objects) { + if(selob != ob) { + data->tar= selob; + break; + } + } + CTX_DATA_END; + } + break; + default: + break; + } + + object_test_constraints(ob); + + if(ob->pose) + update_pose_constraint_flags(ob->pose); + + if(ob->type==OB_ARMATURE) + DAG_object_flush_update(scene, ob, OB_RECALC_DATA|OB_RECALC_OB); + else + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_constraint_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Constraint"; + ot->description = "Add a constraint to the active object."; + ot->idname= "OBJECT_OT_constraint_add"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= constraint_add_exec; + + ot->poll= ED_operator_object_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); +} + diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 223f2190f4b..ce8bd7287f7 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -88,5 +88,8 @@ void GROUP_OT_objects_remove_active(struct wmOperatorType *ot); void OBJECT_OT_modifier_add(struct wmOperatorType *ot); void OBJECT_OT_multires_subdivide(struct wmOperatorType *ot); +/* editconstraint.c */ +void OBJECT_OT_constraint_add(struct wmOperatorType *ot); + #endif /* ED_OBJECT_INTERN_H */ diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 339d8bc8252..2e2c16ee6d6 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -368,6 +368,8 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", modifier_type_items, 0, "Type", ""); } +/****************** multires subdivide operator *********************/ + static int multires_subdivide_exec(bContext *C, wmOperator *op) { Object *ob = CTX_data_active_object(C); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index f2a020e69a6..9d8247522e1 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -101,6 +101,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_add); WM_operatortype_append(OBJECT_OT_multires_subdivide); + + WM_operatortype_append(OBJECT_OT_constraint_add); } void ED_keymap_object(wmWindowManager *wm) diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c index 2accef990d3..9a61d3a7081 100644 --- a/source/blender/editors/space_image/image_header.c +++ b/source/blender/editors/space_image/image_header.c @@ -150,8 +150,8 @@ static void image_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemR(layout, NULL, 0, &spaceptr, "update_automatically", 0, 0); - // XXX if(show_uvedit) uiItemR(layout, NULL, 0, &uvptr, "local_view", 0, 0); // "UV Local View", Numpad / + uiItemR(layout, NULL, 0, &spaceptr, "update_automatically", 0, 0, 0); + // XXX if(show_uvedit) uiItemR(layout, NULL, 0, &uvptr, "local_view", 0, 0, 0); // "UV Local View", Numpad / uiItemS(layout); @@ -234,7 +234,7 @@ static void image_imagemenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemR(layout, NULL, 0, &spaceptr, "image_painting", 0, 0); + uiItemR(layout, NULL, 0, &spaceptr, "image_painting", 0, 0, 0); /* move to realtime properties panel */ RNA_id_pointer_create(&ima->id, &imaptr); @@ -338,12 +338,12 @@ static void image_uvsmenu(bContext *C, uiLayout *layout, void *arg_unused) RNA_id_pointer_create(&scene->id, &sceneptr); /* create menu */ - uiItemR(layout, NULL, 0, &uvptr, "snap_to_pixels", 0, 0); - uiItemR(layout, NULL, 0, &uvptr, "constrain_to_image_bounds", 0, 0); + uiItemR(layout, NULL, 0, &uvptr, "snap_to_pixels", 0, 0, 0); + uiItemR(layout, NULL, 0, &uvptr, "constrain_to_image_bounds", 0, 0, 0); uiItemS(layout); - uiItemR(layout, NULL, 0, &uvptr, "live_unwrap", 0, 0); + uiItemR(layout, NULL, 0, &uvptr, "live_unwrap", 0, 0, 0); uiItemO(layout, NULL, 0, "UV_OT_unwrap"); uiItemBooleanO(layout, "Unpin", 0, "UV_OT_pin", "clear", 1); uiItemO(layout, NULL, 0, "UV_OT_pin"); @@ -363,7 +363,7 @@ static void image_uvsmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0); + uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0, 0); uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff"); uiItemS(layout); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5b8de93b542..2d623c9c33d 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -3359,7 +3359,7 @@ static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unuse uiItemS(layout); - uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0); // |O + uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0, 0); // |O uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff"); uiItemS(layout); @@ -4533,12 +4533,12 @@ static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused) RNA_pointer_create(&sc->id, &RNA_Sculpt, s, &rna); - uiItemR(layout, NULL, 0, &rna, "symmetry_x", 0, 0); - uiItemR(layout, NULL, 0, &rna, "symmetry_y", 0, 0); - uiItemR(layout, NULL, 0, &rna, "symmetry_z", 0, 0); - uiItemR(layout, NULL, 0, &rna, "lock_x", 0, 0); - uiItemR(layout, NULL, 0, &rna, "lock_y", 0, 0); - uiItemR(layout, NULL, 0, &rna, "lock_z", 0, 0); + uiItemR(layout, NULL, 0, &rna, "symmetry_x", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "symmetry_y", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "symmetry_z", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "lock_x", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "lock_y", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "lock_z", 0, 0, 0); /* Brush settings */ RNA_pointer_create(&sc->id, &RNA_Brush, s->brush, &rna); @@ -4551,12 +4551,12 @@ static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemR(layout, NULL, 0, &rna, "airbrush", 0, 0); - uiItemR(layout, NULL, 0, &rna, "rake", 0, 0); - uiItemR(layout, NULL, 0, &rna, "anchored", 0, 0); - uiItemR(layout, NULL, 0, &rna, "space", 0, 0); + uiItemR(layout, NULL, 0, &rna, "airbrush", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "rake", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "anchored", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "space", 0, 0, 0); - uiItemR(layout, NULL, 0, &rna, "flip_direction", 0, 0); + uiItemR(layout, NULL, 0, &rna, "flip_direction", 0, 0, 0); } uiBlock *view3d_sculptmenu(bContext *C, ARegion *ar, void *arg_unused) diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index 2262c73a9af..c679d9fc544 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -33,6 +33,7 @@ extern EnumPropertyItem prop_mode_items[]; extern EnumPropertyItem space_type_items[]; extern EnumPropertyItem region_type_items[]; extern EnumPropertyItem modifier_type_items[]; +extern EnumPropertyItem constraint_type_items[]; extern EnumPropertyItem beztriple_handle_type_items[]; extern EnumPropertyItem beztriple_interpolation_mode_items[]; diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index b0b9e2079f1..02429ffa4bf 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -1558,4 +1558,4 @@ void RNA_def_constraint(BlenderRNA *brna) rna_def_constraint_shrinkwrap(brna); } -#endif +#endif \ No newline at end of file diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 32af373862b..6baf5083d31 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -49,7 +49,7 @@ static void rna_Object_update(bContext *C, PointerRNA *ptr) DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB); } -static void rna_Object_scene_update(bContext *C, PointerRNA *ptr) +static void rna_Object_dependency_update(bContext *C, PointerRNA *ptr) { DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB); DAG_scene_sort(CTX_data_scene(C)); @@ -774,7 +774,7 @@ static StructRNA *rna_def_object(BlenderRNA *brna) RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag"); RNA_def_property_enum_items(prop, dupli_items); RNA_def_property_ui_text(prop, "Dupli Type", "If not None, object duplication method to use."); - RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_scene_update"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update"); prop= RNA_def_property(srna, "dupli_frames_no_speed", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLINOSPEED); diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index 5aad710c712..8edcc4c72f4 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -82,7 +82,6 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_struct_idproperties_func(srna, "rna_PoseChannel_idproperties"); prop= RNA_def_property(srna, "constraints", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "constraints", NULL); RNA_def_property_struct_type(prop, "Constraint"); RNA_def_property_ui_text(prop, "Constraints", "Constraints that act on this PoseChannel."); diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c index 2aeb1b984fb..c6515385757 100644 --- a/source/blender/makesrna/intern/rna_sound.c +++ b/source/blender/makesrna/intern/rna_sound.c @@ -64,30 +64,30 @@ static void rna_def_sample(BlenderRNA *brna) prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_sample_type_items); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Types", ""); prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "name"); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Filename", "Full path filename of the sample"); prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "len"); RNA_def_property_ui_text(prop, "Length", "The length of sample in seconds"); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "rate", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Rate", "Sample rate in kHz"); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "bits", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Bits", "Bit-depth of sample"); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Channels", "Number of channels (mono=1; stereo=2)"); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); } static void rna_def_soundlistener(BlenderRNA *brna) @@ -117,12 +117,12 @@ static void rna_def_soundlistener(BlenderRNA *brna) prop= RNA_def_property(srna, "num_sounds_blender", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "numsoundsblender"); RNA_def_property_ui_text(prop, "Total Sounds in Blender", "The total number of sounds currently linked and available."); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "num_sounds_gameengine", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "numsoundsgameengine"); RNA_def_property_ui_text(prop, "Total Sounds in Game Engine", "The total number of sounds in the Game Engine."); - RNA_def_property_flag(prop, PROP_NOT_EDITABLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); } #endif diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index e1bc0de245a..9d3d961c18f 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -151,7 +151,7 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi PanelType *pt, dummypt = {0}; Panel dummypanel= {0}; PointerRNA dummyptr; - int have_function[2]; + int have_function[3]; /* setup dummy panel & panel type to store static properties in */ dummypanel.type= &dummypt; diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index b96089a05f1..09b81d69ac0 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -196,6 +196,7 @@ typedef struct wmNotifier { #define ND_MODIFIER (23<<16) #define ND_KEYS (24<<16) #define ND_GEOM_DATA (25<<16) +#define ND_CONSTRAINT (26<<16) /* NC_MATERIAL Material */ #define ND_SHADING (30<<16) From 8afd6a9dc54ea40e9f12e746d6e67430613776ec Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 2 Jun 2009 13:03:33 +0000 Subject: [PATCH 017/512] NLA SoC: Added basic info-text drawing on strips The format of these is still rather experimental. --- source/blender/editors/space_nla/nla_draw.c | 41 +++++++++++++++++++- source/blender/editors/space_nla/space_nla.c | 4 ++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index def49021160..78fc4174f95 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -48,6 +48,7 @@ #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" #include "DNA_world_types.h" +#include "DNA_vec_types.h" #include "MEM_guardedalloc.h" @@ -128,6 +129,36 @@ static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float y gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1); } +/* add the relevant text to the cache of text-strings to draw in pixelspace */ +static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v2d, float yminc, float ymaxc) +{ + char str[256]; + rctf rect; + + /* for now, just init the string with a fixed-format */ + if (strip->act) + sprintf(str, "%d | Act: %s | %.2f <-> %.2f", index, strip->act->id.name+2, strip->start, strip->end); + else + sprintf(str, "%d | Act: ", index); + + /* set text colour - if colours (see above) are light, draw black text, otherwise draw white */ + if (strip->flag & (NLASTRIP_FLAG_ACTIVE|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_TWEAKUSER)) + glColor3f(0.0f, 0.0f, 0.0f); + else + glColor3f(1.0f, 1.0f, 1.0f); + + /* set bounding-box for text + * - padding of 2 'units' on either side + */ + rect.xmin= strip->start + 2; + rect.ymin= yminc; + rect.xmax= strip->end - 2; + rect.ymax= ymaxc; + + /* add this string to the cache of texts to draw*/ + UI_view2d_text_cache_rectf(v2d, &rect, str); +} + /* ---------------------- */ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) @@ -175,14 +206,20 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; + int index; /* draw backdrop? */ // TODO... /* draw each strip in the track (if visible) */ - for (strip=nlt->strips.first; strip; strip= strip->next) { - if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) + for (strip=nlt->strips.first, index=1; strip; strip=strip->next, index++) { + if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) { + /* draw the visualisation of the strip */ nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); + + /* add the text for this strip to the cache */ + nla_draw_strip_text(nlt, strip, index, v2d, yminc, ymaxc); + } } } break; diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 024b23c51b8..1bed72b82fb 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -246,7 +246,11 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) /* data */ if (ANIM_animdata_get_context(C, &ac)) { + /* strips and backdrops */ draw_nla_main_data(&ac, snla, ar); + + /* text draw cached, in pixelspace now */ + UI_view2d_text_cache_draw(ar); } /* current frame */ From f6cac5bec7418b58fe250c65293e85a8f0095cb2 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 3 Jun 2009 11:22:49 +0000 Subject: [PATCH 018/512] NLA SoC: More Drawing Tweaks * Following user feedback, I've increased the separation between normal NLA-tracks and the 'action lines' to try and differentiate them more. This hopefully this will be sufficient, otherwise, I'm going to have to abandon the use of nice, generic channel-identification code for lists of channels... * Improved drawing of 'active' strips. - Now, the active strip (when NOT being 'tweaked') will be simply drawn as a yellow strip + a white border. - The active strip (when BEING 'tweaked') will now be greenish + a white border. The colour here may be tweakable, but we'll see... * Strip extrapolation modes (hold, etc.) are now visualised as rects with alpha and the same colour as the strip they belong to. * Selecting strips now makes them 'active' (and deactivates the others). Only one strip can be active at a time. Still need to figure out precisely how this will work with multiple AnimData blocks + NLA-'tweaking'. * Fixed view-matrix bug introduced in last commit for text drawing. For now, we'll just reset the view matrix after doing that, since it's not too acceptable to move these calls to the end yet, as they should get overlapped by some other editor features (such as the Current Frame indicator) --- source/blender/blenkernel/intern/nla.c | 19 +++ source/blender/editors/space_nla/nla_draw.c | 116 +++++++++++++++--- source/blender/editors/space_nla/nla_select.c | 28 ++++- source/blender/editors/space_nla/space_nla.c | 2 + 4 files changed, 139 insertions(+), 26 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index cf115cb6faf..6235ec58d40 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -455,6 +455,25 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) /* NLA Strips -------------------------------------- */ +/* Find the active NLA-strip within the given track */ +NlaStrip *BKE_nlastrip_find_active (NlaTrack *nlt) +{ + NlaStrip *strip; + + /* sanity check */ + if ELEM(NULL, nlt, nlt->strips.first) + return NULL; + + /* try to find the first active strip */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (strip->flag & NLASTRIP_FLAG_ACTIVE) + return strip; + } + + /* none found */ + return NULL; +} + /* Does the given NLA-strip fall within the given bounds (times)? */ short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max) { diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 78fc4174f95..85bf733df87 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "DNA_listBase.h" #include "DNA_anim_types.h" @@ -87,37 +88,103 @@ extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, flo /* *********************************************** */ /* Strips */ -static void nla_draw_strip (NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float color[3]) { - /* draw extrapolation info first (as backdrop) */ - // TODO... - - /* draw 'inside' of strip itself */ - /* set color of strip - color is used to indicate status here */ - if (strip->flag & NLASTRIP_FLAG_ACTIVE) { - /* tweaking strip should be drawn green when it is acting as the tweaking strip */ + if ((strip->flag & NLASTRIP_FLAG_ACTIVE) && (adt && (adt->flag & ADT_NLA_EDIT_ON))) { + /* 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 - glColor3f(0.3f, 0.95f, 0.1f); + color[0]= 0.3f; + color[1]= 0.95f; + color[2]= 0.1f; } 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 - glColor3f(0.85f, 0.0f, 0.0f); + color[0]= 0.85f; + color[1]= 0.0f; + color[2]= 0.0f; } else if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected strip - use theme color for selected */ - UI_ThemeColor(TH_STRIP_SELECT); + UI_GetThemeColor3fv(TH_STRIP_SELECT, color); } else { /* normal, unselected strip - use standard strip theme color */ - UI_ThemeColor(TH_STRIP); + UI_GetThemeColor3fv(TH_STRIP, color); } +} + +static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +{ + float color[3]; + + /* get color of strip */ + nla_strip_get_color_inside(adt, strip, color); + + /* draw extrapolation info first (as backdrop) */ + if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) { + /* enable transparency... */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + switch (strip->extendmode) { + /* since this does both sides, only do the 'before' side, and leave the rest to the next case */ + case NLASTRIP_EXTEND_HOLD: + /* only need to draw here if there's no strip before since + * it only applies in such a situation + */ + if (strip->prev) { + /* set the drawing color to the color of the strip, but with very faint alpha */ + glColor4f(color[0], color[1], color[2], 0.15f); + + /* draw the rect to the edge of the screen */ + glBegin(GL_QUADS); + glVertex2f(v2d->cur.xmin, yminc); + glVertex2f(v2d->cur.xmin, ymaxc); + glVertex2f(strip->start, ymaxc); + glVertex2f(strip->start, yminc); + glEnd(); + } + /* no break needed... */ + + /* this only draws after the strip */ + case NLASTRIP_EXTEND_HOLD_FORWARD: + /* only need to try and draw if the next strip doesn't occur immediately after */ + if ((strip->next == NULL) || (IS_EQ(strip->next->start, strip->end)==0)) { + /* set the drawing color to the color of the strip, but this time less faint */ + glColor4f(color[0], color[1], color[2], 0.3f); + + /* draw the rect to the next strip or the edge of the screen */ + glBegin(GL_QUADS); + glVertex2f(strip->end, yminc); + glVertex2f(strip->end, ymaxc); + + if (strip->next) { + glVertex2f(strip->next->start, ymaxc); + glVertex2f(strip->next->start, yminc); + } + else { + glVertex2f(v2d->cur.xmax, ymaxc); + glVertex2f(v2d->cur.xmax, yminc); + } + glEnd(); + } + break; + } + + glDisable(GL_BLEND); + } + + /* draw 'inside' of strip itself */ + glColor3fv(color); uiSetRoundBox(15); /* all corners rounded */ gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); - /* draw strip outline */ + /* draw strip outline - different colors are used here... */ if (strip->flag & NLASTRIP_FLAG_ACTIVE) { /* strip should appear 'sunken', so draw a light border around it */ glColor3f(0.9f, 1.0f, 0.9f); // FIXME: hardcoded temp-hack colors @@ -150,6 +217,7 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View /* set bounding-box for text * - padding of 2 'units' on either side */ + // TODO: make this centered? rect.xmin= strip->start + 2; rect.ymin= yminc; rect.xmax= strip->end - 2; @@ -204,6 +272,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) switch (ale->type) { case ANIMTYPE_NLATRACK: { + AnimData *adt= BKE_animdata_from_id(ale->id); NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; int index; @@ -215,7 +284,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) for (strip=nlt->strips.first, index=1; strip; strip=strip->next, index++) { if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) { /* draw the visualisation of the strip */ - nla_draw_strip(nlt, strip, v2d, yminc, ymaxc); + nla_draw_strip(adt, nlt, strip, v2d, yminc, ymaxc); /* add the text for this strip to the cache */ nla_draw_strip_text(nlt, strip, index, v2d, yminc, ymaxc); @@ -235,11 +304,14 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) else glColor4f(0.6f, 0.5f, 0.5f, 0.3f); // greyish-red color - hardcoded for now + /* draw slightly shifted up for greater separation from standard channels, + * but also slightly shorter for some more contrast when viewing the strips + */ glBegin(GL_QUADS); - glVertex2f(v2d->cur.xmin, yminc); - glVertex2f(v2d->cur.xmin, ymaxc); - glVertex2f(v2d->cur.xmax, ymaxc); - glVertex2f(v2d->cur.xmax, yminc); + glVertex2f(v2d->cur.xmin, yminc+NLACHANNEL_SKIP); + glVertex2f(v2d->cur.xmin, ymaxc-NLACHANNEL_SKIP); + glVertex2f(v2d->cur.xmax, ymaxc-NLACHANNEL_SKIP); + glVertex2f(v2d->cur.xmax, yminc+NLACHANNEL_SKIP); glEnd(); glDisable(GL_BLEND); @@ -570,8 +642,12 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) glColor3f(0.6f, 0.5f, 0.5f); // greyish-red color - hardcoded for now offset += 7 * indent; - uiSetRoundBox((1|2)); // only on top two corners, to show that this channel sits on top of the preceeding ones - gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 8); + + /* only on top two corners, to show that this channel sits on top of the preceeding ones */ + uiSetRoundBox((1|2)); + + /* draw slightly shifted up vertically to look like it has more separtion from other channels */ + gl_round_box(GL_POLYGON, x+offset, yminc+NLACHANNEL_SKIP, (float)NLACHANNEL_NAMEWIDTH, ymaxc+NLACHANNEL_SKIP, 8); /* clear group value, otherwise we cause errors... */ group = 0; diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 5d9fe5f2a05..0626d9febe4 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -98,10 +98,16 @@ static short selmodes_to_flagmodes (short sel) * 3) (de)select all - no testing is done; only for use internal tools as normal function... */ +enum { + DESELECT_STRIPS_NOTEST = 0, + DESELECT_STRIPS_TEST, + DESELECT_STRIPS_CLEARACTIVE, +} eDeselectNlaStrips; + /* Deselects strips in the NLA Editor * - This is called by the deselect all operator, as well as other ones! * - * - test: check if select or deselect all + * - test: check if select or deselect all (1) or clear all active (2) * - sel: how to select keyframes * 0 = deselect * 1 = select @@ -121,7 +127,7 @@ static void deselect_nla_strips (bAnimContext *ac, short test, short sel) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* See if we should be selecting or deselecting */ - if (test) { + if (test == DESELECT_STRIPS_TEST) { for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; @@ -150,9 +156,11 @@ static void deselect_nla_strips (bAnimContext *ac, short test, short sel) /* apply same selection to all strips */ for (strip= nlt->strips.first; strip; strip= strip->next) { /* set selection */ - ACHANNEL_SET_FLAG(strip, smode, NLASTRIP_FLAG_SELECT); + if (test != DESELECT_STRIPS_CLEARACTIVE) + ACHANNEL_SET_FLAG(strip, smode, NLASTRIP_FLAG_SELECT); /* clear active flag */ + // TODO: for clear active, do we want to limit this to only doing this on a certain set of tracks though? strip->flag &= ~NLASTRIP_FLAG_ACTIVE; } } @@ -173,9 +181,9 @@ static int nlaedit_deselectall_exec(bContext *C, wmOperator *op) /* 'standard' behaviour - check if selected, then apply relevant selection */ if (RNA_boolean_get(op->ptr, "invert")) - deselect_nla_strips(&ac, 0, SELECT_INVERT); + deselect_nla_strips(&ac, DESELECT_STRIPS_NOTEST, SELECT_INVERT); else - deselect_nla_strips(&ac, 1, SELECT_ADD); + deselect_nla_strips(&ac, DESELECT_STRIPS_TEST, SELECT_ADD); /* set notifier that things have changed */ ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); @@ -292,7 +300,8 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) NlaTrack *nlt= (NlaTrack *)ale->data; nlt->flag |= NLATRACK_SELECTED; - ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + if (nlt->flag & NLATRACK_SELECTED) + ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); } } @@ -302,6 +311,13 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) if (strip) { select_mode= selmodes_to_flagmodes(select_mode); ACHANNEL_SET_FLAG(strip, select_mode, NLASTRIP_FLAG_SELECT); + + /* if we selected it, we can make it active too + * - we always need to clear the active strip flag though... + */ + deselect_nla_strips(ac, DESELECT_STRIPS_CLEARACTIVE, 0); + if (strip->flag & NLASTRIP_FLAG_SELECT) + strip->flag |= NLASTRIP_FLAG_ACTIVE; } /* free this channel */ diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 1bed72b82fb..39579ec96da 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -253,6 +253,8 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) UI_view2d_text_cache_draw(ar); } + UI_view2d_view_ortho(C, v2d); + /* current frame */ if (snla->flag & SNLA_DRAWTIME) flag |= DRAWCFRA_UNIT_SECONDS; if ((snla->flag & SNLA_NODRAWCFRANUM)==0) flag |= DRAWCFRA_SHOW_NUMBOX; From 5c21c176fa0a571f3ba47af8ad2c7906a5dc375f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 5 Jun 2009 05:18:07 +0000 Subject: [PATCH 019/512] NLA SoC: Operators for 'tweaking' strip actions (TAB-Key for both) In this commit, I've introduced the mechanism by which actions already referenced by strips used in the NLA can be edited (or 'tweaked'). To use, simply select a strip you wish to edit, and hit that TAB key to start tweaking that strip's action, and hit TAB again once you're done. What happens when you enter 'tweak mode': 1) The action of the active strip temporarily becomes the 'active action' of the AnimData block. You are now able to edit this in one of the Animation Editors (DopeSheet/Action, Graph Editors) as per normal (i.e. sliding keyframes around, inserting keyframes, etc.). The 'action-line' will therefore get drawn immediately above the active track containing the active strip, so that it's clear that that's what we're editing. 2) All the NLA-tracks (and all the strips within them) that occur after the track that the active strip lived in get disabled while you're in tweakmode. This is equivalent to travelling back to an earlier state in a construction history stack. 3) The active NLA track also gets disabled while in tweakmode, since it would otherwise interfere with the correct functioning of the tweaking for the action of interest. 4) The 'real' active action (i.e. the one displaced by the active strip's action) gets put into temp storage, and will be restored after you exit tweakmode. 5) Any strips which also reference the action being tweaked will get highlighted in red shading to indicate that you may be making some changes to the action which you don't really want to make for the other users too. Please note though, that this is only a rough prototype of this functionality, with some niceties still to come. i.e.: * NLA-tracks after the active track should still get drawn above the 'tweaking action line', but perhaps with different appearance? * Various tools will still need awareness of this to prevent corrupting operations from taking place. How to proceed is still undecided... * When exiting tweak-mode, the strip the action came from still needs some form of syncing with the modified action... there are a few tricky issues here that will need to be solved * Evaluation code doesn't totally take this into account yet... --- Also, fixed a number of bugs with various code (notably selection, and also a few drawing bugs) --- source/blender/blenkernel/BKE_nla.h | 4 + source/blender/blenkernel/intern/anim_sys.c | 15 +- source/blender/blenkernel/intern/nla.c | 100 +++++++++++++ .../blender/editors/animation/anim_channels.c | 12 +- .../blender/editors/animation/anim_filter.c | 118 ++++++++++++++- source/blender/editors/include/ED_anim_api.h | 6 +- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/screen/screen_ops.c | 6 + .../editors/space_action/action_select.c | 4 +- .../editors/space_graph/graph_select.c | 2 +- .../blender/editors/space_nla/nla_channels.c | 2 +- source/blender/editors/space_nla/nla_draw.c | 81 +++++++---- source/blender/editors/space_nla/nla_edit.c | 137 ++++++++++++++++++ source/blender/editors/space_nla/nla_intern.h | 8 + source/blender/editors/space_nla/nla_ops.c | 56 +++++++ source/blender/editors/space_nla/nla_select.c | 3 +- source/blender/makesdna/DNA_action_types.h | 1 + source/blender/makesdna/DNA_anim_types.h | 11 +- source/blender/makesdna/DNA_scene_types.h | 1 + 19 files changed, 514 insertions(+), 54 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 3c3abe11da3..89e5f1af7e1 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -59,9 +59,13 @@ void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt); short BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); +struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); void BKE_nla_action_pushdown(struct AnimData *adt); +short BKE_nla_tweakmode_enter(struct AnimData *adt); +void BKE_nla_tweakmode_exit(struct AnimData *adt); + #endif diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 652f733d553..dbc38d2fc7e 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -118,6 +118,9 @@ void BKE_free_animdata (ID *id) /* unlink action (don't free, as it's in its own list) */ if (adt->action) adt->action->id.us--; + /* same goes for the temporarily displaced action */ + if (adt->tmpact) + adt->tmpact->id.us--; /* free nla data */ free_nladata(&adt->nla_tracks); @@ -151,6 +154,7 @@ AnimData *BKE_copy_animdata (AnimData *adt) // XXX review this... it might not be optimal behaviour yet... //id_us_plus((ID *)dadt->action); dadt->action= copy_action(adt->action); + dadt->tmpact= copy_action(adt->action); /* duplicate NLA data */ copy_nladata(&dadt->nla_tracks, &adt->nla_tracks); @@ -595,7 +599,7 @@ static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) scale = (float)fabs(strip->scale); /* scale must be positive - we've got a special flag for reversing */ /* length of referenced action */ - actlength = strip->actend-strip->actstart; + actlength = strip->actend - strip->actstart; if (actlength == 0.0f) actlength = 1.0f; /* length of strip */ @@ -630,11 +634,11 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe) // the +0.0001 factors are to combat rounding errors if (IS_EQ(strip->blendin, 0)==0 && (cframe <= (strip->start + strip->blendin))) { /* there is some blend-in */ - return (float)(fabs(cframe - strip->start) + 0.0001) / (strip->blendin); + return (float)fabs(cframe - strip->start) / (strip->blendin); } else if (IS_EQ(strip->blendout, 0)==0 && (cframe >= (strip->end - strip->blendout))) { /* there is some blend-out */ - return (float)(fabs(strip->end - cframe) + 0.0001) / (strip->blendout); + return (float)fabs(strip->end - cframe) / (strip->blendout); } else { /* in the middle of the strip, we should be full strength */ @@ -674,8 +678,8 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index NlaEvalStrip *nes; short side= 0; - /* skip if track is muted */ - if (nlt->flag & NLATRACK_MUTED) + /* skip if track is muted or disabled */ + if (nlt->flag & (NLATRACK_MUTED|NLATRACK_DISABLED)) return; /* loop over strips, checking if they fall within the range */ @@ -1104,6 +1108,7 @@ void BKE_animsys_evaluate_animdata (ID *id, AnimData *adt, float ctime, short re * - NLA before Active Action, as Active Action behaves as 'tweaking track' * that overrides 'rough' work in NLA */ + // TODO: need to double check that this all works correctly if ((recalc & ADT_RECALC_ANIM) || (adt->recalc & ADT_RECALC_ANIM)) { /* evaluate NLA data */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 6235ec58d40..84f98096364 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -583,4 +583,104 @@ void BKE_nla_action_pushdown (AnimData *adt) } } + +/* Find the active strip + track combo, and set them up as the tweaking track, + * and return if successful or not. + */ +short BKE_nla_tweakmode_enter (AnimData *adt) +{ + NlaTrack *nlt, *activeTrack=NULL; + NlaStrip *strip, *activeStrip=NULL; + + /* verify that data is valid */ + if ELEM(NULL, adt, adt->nla_tracks.first) + return 0; + + /* if block is already in tweakmode, just leave, but we should report + * that this block is in tweakmode (as our returncode) + */ + // FIXME: hopefully the flag is correct! + if (adt->flag & ADT_NLA_EDIT_ON) + return 1; + + /* go over the tracks, finding the active one, and its active strip + * - if we cannot find both, then there's nothing to do + */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + /* check if active */ + if (nlt->flag & NLATRACK_ACTIVE) { + /* store reference to this active track */ + activeTrack= nlt; + + /* now try to find active strip */ + activeStrip= BKE_nlastrip_find_active(nlt); + break; + } + } + if ELEM3(NULL, activeTrack, activeStrip, activeStrip->act) { + printf("NLA tweakmode enter - neither active requirement found \n"); + return 0; + } + + /* go over all the tracks up to the active one, tagging each strip that uses the same + * action as the active strip, but leaving everything else alone + */ + for (nlt= activeTrack->prev; nlt; nlt= nlt->prev) { + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (strip->act == activeStrip->act) + strip->flag |= NLASTRIP_FLAG_TWEAKUSER; + else + strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER; // XXX probably don't need to clear this... + } + } + + + /* go over all the tracks after AND INCLUDING the active one, tagging them as being disabled + * - the active track needs to also be tagged, otherwise, it'll overlap with the tweaks going on + */ + for (nlt= activeTrack; nlt; nlt= nlt->next) + nlt->flag |= NLATRACK_DISABLED; + + /* handle AnimData level changes: + * - 'real' active action to temp storage (no need to change user-counts) + * - action of active strip set to be the 'active action' + * - editing-flag for this AnimData block should also get turned on (for more efficient restoring) + */ + adt->tmpact= adt->action; + adt->action= activeStrip->act; + adt->flag |= ADT_NLA_EDIT_ON; + + /* done! */ + return 1; +} + +/* Exit tweakmode for this AnimData block */ +void BKE_nla_tweakmode_exit (AnimData *adt) +{ + NlaTrack *nlt; + + /* verify that data is valid */ + if ELEM(NULL, adt, adt->nla_tracks.first) + return; + + /* hopefully the flag is correct - skip if not on */ + if ((adt->flag & ADT_NLA_EDIT_ON) == 0) + return; + + // TODO: need to sync the user-strip with the new state of the action! + + /* for all NLA-tracks, clear the 'disabled' flag */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) + nlt->flag &= ~NLATRACK_DISABLED; + + /* handle AnimData level changes: + * - 'real' active action is restored from storage + * - storage pointer gets cleared (to avoid having bad notes hanging around) + * - editing-flag for this AnimData block should also get turned off + */ + adt->action= adt->tmpact; + adt->tmpact= NULL; + adt->flag &= ~ADT_NLA_EDIT_ON; +} + /* *************************************************** */ diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 658bff73978..59fb56f3c35 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -90,14 +90,13 @@ /* -------------------------- Exposed API ----------------------------------- */ /* Set the given animation-channel as the active one for the active context */ -void ANIM_set_active_channel (void *data, short datatype, int filter, void *channel_data, short channel_type) +void ANIM_set_active_channel (bAnimContext *ac, void *data, short datatype, int filter, void *channel_data, short channel_type) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; /* try to build list of filtered items */ - // XXX we don't need/supply animcontext for now, since in this case, there's nothing really essential there that isn't already covered - ANIM_animdata_filter(NULL, &anim_data, filter, data, datatype); + ANIM_animdata_filter(ac, &anim_data, filter, data, datatype); if (anim_data.first == NULL) return; @@ -151,8 +150,7 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan case ANIMTYPE_NLATRACK: { NlaTrack *nlt= (NlaTrack *)channel_data; - - ACHANNEL_SET_FLAG(nlt, ACHANNEL_SETFLAG_CLEAR, NLATRACK_ACTIVE); + nlt->flag |= NLATRACK_ACTIVE; } break; } @@ -1474,7 +1472,7 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* if group is selected now, make group the 'active' one in the visible list */ if (agrp->flag & AGRP_SELECTED) - ANIM_set_active_channel(ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); } } break; @@ -1520,7 +1518,7 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* if F-Curve is selected now, make F-Curve the 'active' one in the visible list */ if (fcu->flag & FCURVE_SELECTED) - ANIM_set_active_channel(ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); } } break; diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index ed526bd99a0..32405571b57 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -343,19 +343,33 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) /* quick macro to test if AnimData is usable for NLA */ #define ANIMDATA_HAS_NLA(id) ((id)->adt && (id)->adt->nla_tracks.first) -/* quick macro to test for all three avove usability tests, performing the appropriate provided + +/* Quick macro to test for all three avove usability tests, performing the appropriate provided * action for each when the AnimData context is appropriate. * - * Priority order for this goes (most important, to least): NLA, Drivers, Keyframes + * Priority order for this goes (most important, to least): AnimData blocks, NLA, Drivers, Keyframes. + * + * For this to work correctly, a standard set of data needs to be available within the scope that this + * gets called in: + * - ListBase anim_data; + * - bDopeSheet *ads; + * - bAnimListElem *ale; + * - int items; * * - id: ID block which should have an AnimData pointer following it immediately, to use + * - adtOk: line or block of code to execute for AnimData-blocks case (usually ANIMDATA_ADD_ANIMDATA) * - nlaOk: line or block of code to execute for NLA case * - driversOk: line or block of code to execute for Drivers case * - keysOk: line or block of code for Keyframes case */ -#define ANIMDATA_FILTER_CASES(id, nlaOk, driversOk, keysOk) \ +#define ANIMDATA_FILTER_CASES(id, adtOk, nlaOk, driversOk, keysOk) \ {\ - if (ads->filterflag & ADS_FILTER_ONLYNLA) {\ + if (filter_mode & ANIMFILTER_ANIMDATA) {\ + if ((id)->adt) {\ + adtOk\ + }\ + }\ + else if (ads->filterflag & ADS_FILTER_ONLYNLA) {\ if (ANIMDATA_HAS_NLA(id)) {\ nlaOk\ }\ @@ -376,6 +390,18 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) } +/* quick macro to add a pointer to an AnimData block as a channel */ +#define ANIMDATA_ADD_ANIMDATA(id) \ + {\ + ale= make_new_animlistelem((id)->adt, ANIMTYPE_ANIMDATA, NULL, ANIMTYPE_NONE, (ID *)id);\ + if (ale) {\ + BLI_addtail(anim_data, ale);\ + items++;\ + }\ + } + + + /* quick macro to test if a anim-channel (F-Curve, Group, etc.) is selected in an acceptable way */ #define ANIMCHANNEL_SELOK(test_func) \ ( !(filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) || \ @@ -713,6 +739,11 @@ static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_m items++; } } + + /* if we're in NLA-tweakmode, if this track was active, that means that it was the last active one */ + // FIXME: the channels after should still get drawn, just 'differently', and after an active-action channel + if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_ACTIVE)) + break; } } } @@ -890,6 +921,7 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* check if ok */ ANIMDATA_FILTER_CASES(ma, + { /* AnimData blocks - do nothing... */ }, ok=1;, ok=1;, ok=1;) @@ -933,6 +965,7 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* add material's animation data */ if (FILTER_MAT_OBJD(ma) || (filter_mode & ANIMFILTER_CURVESONLY)) { ANIMDATA_FILTER_CASES(ma, + { /* AnimData blocks - do nothing... */ }, items += animdata_filter_nla(anim_data, ma->adt, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);, items += animdata_filter_fcurves(anim_data, ma->adt->drivers.first, NULL, ma, ANIMTYPE_DSMAT, filter_mode, (ID *)ma);, items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);) @@ -998,6 +1031,7 @@ static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ad if ((expanded) || (filter_mode & ANIMFILTER_CURVESONLY)) { /* filtering for channels - nla, drivers, keyframes */ ANIMDATA_FILTER_CASES(iat, + { /* AnimData blocks - do nothing... */ }, items+= animdata_filter_nla(anim_data, iat->adt, filter_mode, iat, type, (ID *)iat);, items+= animdata_filter_fcurves(anim_data, adt->drivers.first, NULL, iat, type, filter_mode, (ID *)iat);, items += animdata_filter_action(anim_data, iat->adt->action, filter_mode, iat, type, (ID *)iat);) @@ -1036,6 +1070,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if (ob->adt) { adt= ob->adt; ANIMDATA_FILTER_CASES(ob, + { /* AnimData blocks - do nothing... */ }, { /* nla */ #if 0 /* include nla-expand widget? */ @@ -1091,6 +1126,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if ((key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)) { adt= key->adt; ANIMDATA_FILTER_CASES(key, + { /* AnimData blocks - do nothing... */ }, { /* nla */ #if 0 /* include nla-expand widget? */ @@ -1151,6 +1187,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if ((ads->filterflag & ADS_FILTER_NOCAM) == 0) { ANIMDATA_FILTER_CASES(ca, + { /* AnimData blocks - do nothing... */ }, obdata_ok= 1;, obdata_ok= 1;, obdata_ok= 1;) @@ -1163,6 +1200,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if ((ads->filterflag & ADS_FILTER_NOLAM) == 0) { ANIMDATA_FILTER_CASES(la, + { /* AnimData blocks - do nothing... */ }, obdata_ok= 1;, obdata_ok= 1;, obdata_ok= 1;) @@ -1175,6 +1213,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B if ((ads->filterflag & ADS_FILTER_NOCUR) == 0) { ANIMDATA_FILTER_CASES(cu, + { /* AnimData blocks - do nothing... */ }, obdata_ok= 1;, obdata_ok= 1;, obdata_ok= 1;) @@ -1216,6 +1255,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads if ((ads->filterflag & ADS_FILTER_NOSCE) == 0) { adt= sce->adt; ANIMDATA_FILTER_CASES(sce, + { /* AnimData blocks - do nothing... */ }, { /* nla */ #if 0 /* include nla-expand widget? */ @@ -1266,9 +1306,10 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads /* world */ if ((wo && wo->adt) && !(ads->filterflag & ADS_FILTER_NOWOR)) { - /* Action, Drivers, or NLA for World */ + /* Action, Drivers, or NLA for World */ adt= wo->adt; ANIMDATA_FILTER_CASES(wo, + { /* AnimData blocks - do nothing... */ }, { /* nla */ #if 0 /* include nla-expand widget? */ @@ -1327,6 +1368,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int { Scene *sce= (Scene *)ads->source; Base *base; + bAnimListElem *ale; int items = 0; /* check that we do indeed have a scene */ @@ -1342,11 +1384,25 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int /* check filtering-flags if ok */ ANIMDATA_FILTER_CASES(sce, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(sce); + sceOk=0; + }, sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);, sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);, sceOk= !(ads->filterflag & ADS_FILTER_NOSCE);) if (sce->world) { ANIMDATA_FILTER_CASES(sce->world, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(sce->world); + worOk=0; + }, worOk= !(ads->filterflag & ADS_FILTER_NOWOR);, worOk= !(ads->filterflag & ADS_FILTER_NOWOR);, worOk= !(ads->filterflag & ADS_FILTER_NOWOR);) @@ -1395,12 +1451,26 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int actOk= 0; keyOk= 0; ANIMDATA_FILTER_CASES(ob, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(ob); + actOk=0; + }, actOk= 1;, actOk= 1;, actOk= 1;) if (key) { /* shapekeys */ ANIMDATA_FILTER_CASES(key, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(key); + keyOk=0; + }, keyOk= 1;, keyOk= 1;, keyOk= 1;) @@ -1419,6 +1489,13 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int /* if material has relevant animation data, break */ ANIMDATA_FILTER_CASES(ma, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(ma); + matOk=0; + }, matOk= 1;, matOk= 1;, matOk= 1;) @@ -1435,6 +1512,13 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int Camera *ca= (Camera *)ob->data; dataOk= 0; ANIMDATA_FILTER_CASES(ca, + if ((ads->filterflag & ADS_FILTER_NOCAM)==0) { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(ca); + dataOk=0; + }, dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOCAM);) @@ -1445,11 +1529,35 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int Lamp *la= (Lamp *)ob->data; dataOk= 0; ANIMDATA_FILTER_CASES(la, + if ((ads->filterflag & ADS_FILTER_NOLAM)==0) { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(la); + dataOk=0; + }, dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);, dataOk= !(ads->filterflag & ADS_FILTER_NOLAM);) } break; + case OB_CURVE: /* ------- Curve ---------- */ + { + Curve *cu= (Curve *)ob->data; + dataOk= 0; + ANIMDATA_FILTER_CASES(cu, + if ((ads->filterflag & ADS_FILTER_NOCUR)==0) { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(cu); + dataOk=0; + }, + dataOk= !(ads->filterflag & ADS_FILTER_NOCUR);, + dataOk= !(ads->filterflag & ADS_FILTER_NOCUR);, + dataOk= !(ads->filterflag & ADS_FILTER_NOCUR);) + } + break; default: /* --- other --- */ dataOk= 0; break; diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index cdd8b5c368c..dcaabb4b369 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -107,6 +107,7 @@ typedef struct bAnimListElem { // XXX was ACTTYPE_* typedef enum eAnim_ChannelType { ANIMTYPE_NONE= 0, + ANIMTYPE_ANIMDATA, ANIMTYPE_SPECIALDATA, ANIMTYPE_SCENE, @@ -162,6 +163,7 @@ typedef enum eAnimFilter_Flags { ANIMFILTER_ACTGROUPED = (1<<6), /* belongs to the active actiongroup */ ANIMFILTER_CURVEVISIBLE = (1<<7), /* F-Curve is visible for editing/viewing in Graph Editor */ ANIMFILTER_ACTIVE = (1<<8), /* channel should be 'active' */ // FIXME: this is only relevant for F-Curves for now + ANIMFILTER_ANIMDATA = (1<<9), /* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */ } eAnimFilter_Flags; @@ -254,7 +256,7 @@ short ANIM_animdata_context_getdata(bAnimContext *ac); void ANIM_deselect_anim_channels(void *data, short datatype, short test, short sel); /* Set the 'active' channel of type channel_type, in the given action */ -void ANIM_set_active_channel(void *data, short datatype, int filter, void *channel_data, short channel_type); +void ANIM_set_active_channel(bAnimContext *ac, void *data, short datatype, int filter, void *channel_data, short channel_type); /* --------------- Settings and/or Defines -------------- */ @@ -308,6 +310,8 @@ void ipo_rainbow(int cur, int tot, float *out); /* ------------- NLA-Mapping ----------------------- */ /* anim_draw.c */ +// XXX these are soon to be depreceated? + /* Obtain the Object providing NLA-scaling for the given channel if applicable */ struct Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale); diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index c2beb34e7b5..e3b6572c03a 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -118,6 +118,7 @@ int ED_operator_node_active(struct bContext *C); int ED_operator_ipo_active(struct bContext *C); int ED_operator_sequencer_active(struct bContext *C); int ED_operator_image_active(struct bContext *C); +int ED_operator_nla_active(struct bContext *C); int ED_operator_object_active(struct bContext *C); int ED_operator_editmesh(struct bContext *C); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index be952558b6c..db1a39ed056 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -164,6 +164,7 @@ int ED_operator_node_active(bContext *C) return 0; } +// XXX rename int ED_operator_ipo_active(bContext *C) { return ed_spacetype_test(C, SPACE_IPO); @@ -179,6 +180,11 @@ int ED_operator_image_active(bContext *C) return ed_spacetype_test(C, SPACE_IMAGE); } +int ED_operator_nla_active(bContext *C) +{ + return ed_spacetype_test(C, SPACE_NLA); +} + int ED_operator_object_active(bContext *C) { return NULL != CTX_data_active_object(C); diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index f64cd0f707c..d8ed3fd1068 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -862,13 +862,13 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, bActionGroup *agrp= ale->data; agrp->flag |= AGRP_SELECTED; - ANIM_set_active_channel(ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); } else if (ale->type == ANIMTYPE_FCURVE) { FCurve *fcu= ale->data; fcu->flag |= FCURVE_SELECTED; - ANIM_set_active_channel(ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); } } else if (ac->datatype == ANIMCONT_GPENCIL) { diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index bb923ca6f95..21320b60ead 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -722,7 +722,7 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short select_mode, s /* set active F-Curve (NOTE: sync the filter flags with findnearest_fcurve_vert) */ if (fcu->flag & FCURVE_SELECTED) { filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY); - ANIM_set_active_channel(ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); } } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index a839ccbf3d6..8db85ffa0b1 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -349,7 +349,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* if NLA-Track is selected now, make NLA-Track the 'active' one in the visible list */ if (nlt->flag & NLATRACK_SELECTED) - ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); } } break; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 85bf733df87..6c4c64ea272 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -137,7 +137,7 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 /* only need to draw here if there's no strip before since * it only applies in such a situation */ - if (strip->prev) { + if (strip->prev == NULL) { /* set the drawing color to the color of the strip, but with very faint alpha */ glColor4f(color[0], color[1], color[2], 0.15f); @@ -563,15 +563,20 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) else special= ICON_LAYER_USED; - if (nlt->flag & NLATRACK_MUTED) - mute = ICON_MUTE_IPO_ON; - else - mute = ICON_MUTE_IPO_OFF; - - if (EDITABLE_NLT(nlt)) - protect = ICON_UNLOCKED; - else - protect = ICON_LOCKED; + /* if this track is active and we're tweaking it, don't draw these toggles */ + // TODO: need a special macro for this... + if ( ((nlt->flag & NLATRACK_ACTIVE) && (nlt->flag & NLATRACK_DISABLED)) == 0 ) + { + if (nlt->flag & NLATRACK_MUTED) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + + if (EDITABLE_NLT(nlt)) + protect = ICON_UNLOCKED; + else + protect = ICON_LOCKED; + } sel = SEL_NLT(nlt); strcpy(name, nlt->name); @@ -636,18 +641,29 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) } else if (group == 5) { /* Action Line */ - if (ale->data) - glColor3f(0.8f, 0.2f, 0.0f); // reddish color - hardcoded for now - else - glColor3f(0.6f, 0.5f, 0.5f); // greyish-red color - hardcoded for now - + AnimData *adt= BKE_animdata_from_id(ale->id); + + // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) + if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { + // greenish color (same as tweaking strip) - hardcoded for now + glColor3f(0.3f, 0.95f, 0.1f); + } + else { + if (ale->data) + glColor3f(0.8f, 0.2f, 0.0f); // reddish color - hardcoded for now + else + glColor3f(0.6f, 0.5f, 0.5f); // greyish-red color - hardcoded for now + } + offset += 7 * indent; /* only on top two corners, to show that this channel sits on top of the preceeding ones */ uiSetRoundBox((1|2)); - /* draw slightly shifted up vertically to look like it has more separtion from other channels */ - gl_round_box(GL_POLYGON, x+offset, yminc+NLACHANNEL_SKIP, (float)NLACHANNEL_NAMEWIDTH, ymaxc+NLACHANNEL_SKIP, 8); + /* draw slightly shifted up vertically to look like it has more separtion from other channels, + * but we then need to slightly shorten it so that it doesn't look like it overlaps + */ + gl_round_box(GL_POLYGON, x+offset, yminc+NLACHANNEL_SKIP, (float)NLACHANNEL_NAMEWIDTH, ymaxc+NLACHANNEL_SKIP-1, 8); /* clear group value, otherwise we cause errors... */ group = 0; @@ -709,20 +725,29 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) UI_icon_draw((float)(NLACHANNEL_NAMEWIDTH-offset), ydatac, mute); } - /* draw action 'push-down' - only for NLA-Action lines, and only when there's an action */ + /* draw NLA-action line 'status-icons' - only when there's an action */ if ((ale->type == ANIMTYPE_NLAACTION) && (ale->data)) { + AnimData *adt= BKE_animdata_from_id(ale->id); + offset += 16; - /* XXX firstly draw a little rect to help identify that it's different from the toggles */ - glBegin(GL_LINE_LOOP); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+9); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+9); - glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7); - glEnd(); // GL_LINES - - /* now draw the icon */ - UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_FREEZE); + /* now draw some indicator icons */ + if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { + /* 'tweaking action' - not a button */ + UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_EDIT); + } + else { + /* XXX firstly draw a little rect to help identify that it's different from the toggles */ + glBegin(GL_LINE_LOOP); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y-7); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-offset-1, y+9); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y+9); + glVertex2f((float)NLACHANNEL_NAMEWIDTH-1, y-7); + glEnd(); // GL_LINES + + /* 'push down' icon for normal active-actions */ + UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_FREEZE); + } } glDisable(GL_BLEND); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index ce9ae7de7a9..f7053957667 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -68,6 +68,143 @@ #include "nla_intern.h" // own include /* *********************************************** */ +/* General Editing */ + +/* ******************** Tweak-Mode Operators ***************************** */ +/* 'Tweak mode' allows the action referenced by the active NLA-strip to be edited + * as if it were the normal Active-Action of its AnimData block. + */ + +static int nlaedit_enable_tweakmode_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + int ok=0; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* if no blocks, popup error? */ + if (anim_data.first == NULL) { + BKE_report(op->reports, RPT_ERROR, "No AnimData blocks to enter tweakmode for"); + return OPERATOR_CANCELLED; + } + + /* for each AnimData block with NLA-data, try setting it in tweak-mode */ + for (ale= anim_data.first; ale; ale= ale->next) { + AnimData *adt= ale->data; + + /* try entering tweakmode if valid */ + ok += BKE_nla_tweakmode_enter(adt); + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* if we managed to enter tweakmode on at least one AnimData block, + * set the flag for this in the active scene and send notifiers + */ + if (ac.scene && ok) { + /* set editing flag */ + ac.scene->flag |= SCE_NLA_EDIT_ON; + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + } + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_tweakmode_enter (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Enter Tweak Mode"; + ot->idname= "NLAEDIT_OT_tweakmode_enter"; + ot->description= "Enter tweaking mode for the action referenced by the active strip."; + + /* api callbacks */ + ot->exec= nlaedit_enable_tweakmode_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ------------- */ + +static int nlaedit_disable_tweakmode_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* if no blocks, popup error? */ + if (anim_data.first == NULL) { + BKE_report(op->reports, RPT_ERROR, "No AnimData blocks to enter tweakmode for"); + return OPERATOR_CANCELLED; + } + + /* for each AnimData block with NLA-data, try exitting tweak-mode */ + for (ale= anim_data.first; ale; ale= ale->next) { + AnimData *adt= ale->data; + + /* try entering tweakmode if valid */ + BKE_nla_tweakmode_exit(adt); + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* if we managed to enter tweakmode on at least one AnimData block, + * set the flag for this in the active scene and send notifiers + */ + if (ac.scene) { + /* clear editing flag */ + ac.scene->flag &= ~SCE_NLA_EDIT_ON; + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + } + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Exit Tweak Mode"; + ot->idname= "NLAEDIT_OT_tweakmode_exit"; + ot->description= "Exit tweaking mode for the action referenced by the active strip."; + + /* api callbacks */ + ot->exec= nlaedit_disable_tweakmode_exec; + ot->poll= nlaop_poll_tweakmode_on; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} /* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 448b823bd4b..a7188a7cccd 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -76,6 +76,9 @@ void NLAEDIT_OT_click_select(wmOperatorType *ot); /* **************************************** */ /* nla_edit.c */ +void NLAEDIT_OT_tweakmode_enter(wmOperatorType *ot); +void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); + /* **************************************** */ /* nla_channels.c */ @@ -85,6 +88,11 @@ void NLA_OT_channels_click(wmOperatorType *ot); /* **************************************** */ /* nla_ops.c */ +int nlaop_poll_tweakmode_off(bContext *C); +int nlaop_poll_tweakmode_on (bContext *C); + +/* --- */ + void nla_operatortypes(void); void nla_keymap(wmWindowManager *wm); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 167686c99f9..057e4b05656 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -65,6 +65,51 @@ #include "nla_intern.h" // own include +/* ************************** poll callbacks for operators **********************************/ + +/* tweakmode is NOT enabled */ +int nlaop_poll_tweakmode_off (bContext *C) +{ + Scene *scene; + + /* for now, we check 2 things: + * 1) active editor must be NLA + * 2) tweakmode is currently set as a 'per-scene' flag + * so that it will affect entire NLA data-sets, + * but not all AnimData blocks will be in tweakmode for + * various reasons + */ + if (ED_operator_nla_active(C) == 0) + return 0; + + scene= CTX_data_scene(C); + if ((scene == NULL) || (scene->flag & SCE_NLA_EDIT_ON)) + return 0; + + return 1; +} + +/* tweakmode IS enabled */ +int nlaop_poll_tweakmode_on (bContext *C) +{ + Scene *scene; + + /* for now, we check 2 things: + * 1) active editor must be NLA + * 2) tweakmode is currently set as a 'per-scene' flag + * so that it will affect entire NLA data-sets, + * but not all AnimData blocks will be in tweakmode for + * various reasons + */ + if (ED_operator_nla_active(C) == 0) + return 0; + + scene= CTX_data_scene(C); + if ((scene == NULL) || !(scene->flag & SCE_NLA_EDIT_ON)) + return 0; + + return 1; +} /* ************************** registration - operator types **********************************/ @@ -77,6 +122,10 @@ void nla_operatortypes(void) /* select */ WM_operatortype_append(NLAEDIT_OT_click_select); WM_operatortype_append(NLAEDIT_OT_select_all_toggle); + + /* edit */ + WM_operatortype_append(NLAEDIT_OT_tweakmode_enter); + WM_operatortype_append(NLAEDIT_OT_tweakmode_exit); } /* ************************** registration - keymaps **********************************/ @@ -130,6 +179,13 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + /* editing */ + /* tweakmode + * - enter and exit are separate operators with the same hotkey... + * This works as they use different poll()'s + */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_enter", TABKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); /* transform system */ //transform_keymap_for_space(wm, keymap, SPACE_NLA); diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 0626d9febe4..2e3d5572711 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -300,8 +300,7 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) NlaTrack *nlt= (NlaTrack *)ale->data; nlt->flag |= NLATRACK_SELECTED; - if (nlt->flag & NLATRACK_SELECTED) - ANIM_set_active_channel(ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); } } diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index e41ab5ac492..a566f733978 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -269,6 +269,7 @@ typedef enum eAction_Flags { /* flags for evaluation/editing */ ACT_MUTED = (1<<9), ACT_PROTECTED = (1<<10), + ACT_DISABLED = (1<<11), } eAction_Flags; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index ffc1561e7ab..c19318629f6 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -506,6 +506,9 @@ enum { NLATRACK_SOLO = (1<<3), /* track's settings (and strips) cannot be edited (to guard against unwanted changes) */ NLATRACK_PROTECTED = (1<<4), + + /* track is not allowed to execute, usually as result of tweaking being enabled (internal flag) */ + NLATRACK_DISABLED = (1<<10), } eNlaTrack_Flag; @@ -648,11 +651,15 @@ typedef struct AnimOverride { * blocks may override local settings. * * This datablock should be placed immediately after the ID block where it is used, so that - * the code which retrieves this data can do so in an easier manner. See blenkernel/internal/anim_sys.c for details. + * the code which retrieves this data can do so in an easier manner. See blenkernel/intern/anim_sys.c for details. */ typedef struct AnimData { /* active action - acts as the 'tweaking track' for the NLA */ - bAction *action; + bAction *action; + /* temp-storage for the 'real' active action (i.e. the one used before the tweaking-action + * took over to be edited in the Animation Editors) + */ + bAction *tmpact; /* remapping-info for active action - should only be used if needed * (for 'foreign' actions that aren't working correctly) */ diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 6f88a98fee8..8acefdad9a2 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -832,6 +832,7 @@ typedef struct Scene { /* sce->flag */ #define SCE_DS_SELECTED (1<<0) #define SCE_DS_COLLAPSED (1<<1) +#define SCE_NLA_EDIT_ON (1<<2) /* return flag next_object function */ From 308b567e9c2c36ddb3e9571e4d064a8954f83607 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 5 Jun 2009 11:51:27 +0000 Subject: [PATCH 020/512] NLA SoC: NLA-Evaluation Bugfixes * Fixed an evil bug where the last frame of a strip was always incorrectly evaluated. This was because these frames were not being included in the strip's 'range' as defined by the IN_RANGE() testing macro, which only considers the given range as an open interval (i.e. non-inclusive of boundary points). I've added a new macro, IN_RANGE_INCL(), which is inclusive of boundary points, since this is a common test in many other parts of the code. * When an AnimData block is in 'tweaking' mode, the tracks following (and including the active track) are now correctly skipped during evaluation. * Finished coding the option of setting a single NLA-track per NLA-block to play 'solo' (i.e. only that track is enabled for evaluation). To enable this, simply click on one of the grey 'dots' beside the NLA-track names, turning this dot yellow. The 'yellow' dot means that the track will play by itself (even the 'active action' gets silenced). Only one track per AnimData block can play solo at a time. To disable, simply click on the 'yellow' dot again. NOTE: this currently uses the View3D layer-status icons. We probably need some special ones for these later (coloured vs grey star?) * Also (not related to evaluation) made the selection operators for the NLA Editor only work when not in tweaking mode, since in tweaking mode they can potentially result in data being resolved inappropriately when leaving tweaking mode. --- source/blender/blenkernel/BKE_nla.h | 4 +++ source/blender/blenkernel/BKE_utildefines.h | 1 + source/blender/blenkernel/intern/anim_sys.c | 34 +++++++++++++------ source/blender/blenkernel/intern/nla.c | 32 +++++++++++++++++ .../blender/editors/space_nla/nla_channels.c | 19 ++++++++++- source/blender/editors/space_nla/nla_intern.h | 3 ++ source/blender/editors/space_nla/nla_select.c | 4 +-- 7 files changed, 84 insertions(+), 13 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 89e5f1af7e1..da824fd2093 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -56,12 +56,16 @@ struct NlaStrip *add_nlastrip_to_stack(struct AnimData *adt, struct bAction *act struct NlaTrack *BKE_nlatrack_find_active(ListBase *tracks); void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt); +void BKE_nlatrack_solo_toggle(struct AnimData *adt, struct NlaTrack *nlt); + short BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); + struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); + void BKE_nla_action_pushdown(struct AnimData *adt); short BKE_nla_tweakmode_enter(struct AnimData *adt); diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index 6584af085cd..0bed2c095e2 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -128,6 +128,7 @@ #define IS_EQT(a, b, c) ((a > b)? (((a-b) <= c)? 1:0) : ((((b-a) <= c)? 1:0))) #define IN_RANGE(a, b, c) ((b < c)? ((bflag & (NLATRACK_MUTED|NLATRACK_DISABLED)) - return; - /* loop over strips, checking if they fall within the range */ for (strip= nlt->strips.first; strip; strip= strip->next) { /* check if current time occurs within this strip */ - if (IN_RANGE(ctime, strip->start, strip->end)) { + if (IN_RANGE_INCL(ctime, strip->start, strip->end)) { /* this strip is active, so try to use it */ estrip= strip; side= NES_TIME_WITHIN; @@ -1013,8 +1009,21 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) NlaEvalStrip *nes; /* 1. get the stack of strips to evaluate at current time (influence calculated here) */ - for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next, track_index++) + for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next, track_index++) { + /* if tweaking is on and this strip is the tweaking track, stop on this one */ + if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_DISABLED)) + break; + + /* skip if we're only considering a track tagged 'solo' */ + if ((adt->flag & ADT_NLA_SOLO_TRACK) && (nlt->flag & NLATRACK_SOLO)==0) + continue; + /* skip if track is muted */ + if (nlt->flag & NLATRACK_MUTED) + continue; + + /* otherwise, get strip to evaluate for this channel */ nlatrack_ctime_get_strip(&estrips, nlt, track_index, ctime); + } /* only continue if there are strips to evaluate */ if (estrips.first == NULL) @@ -1114,12 +1123,17 @@ void BKE_animsys_evaluate_animdata (ID *id, AnimData *adt, float ctime, short re /* evaluate NLA data */ if ((adt->nla_tracks.first) && !(adt->flag & ADT_NLA_EVAL_OFF)) { + /* evaluate NLA-stack */ animsys_evaluate_nla(&id_ptr, adt, ctime); + + /* evaluate 'active' Action (may be tweaking track) on top of results of NLA-evaluation + * - only do this if we're not exclusively evaluating the 'solo' NLA-track + */ + if ((adt->action) && !(adt->flag & ADT_NLA_SOLO_TRACK)) + animsys_evaluate_action(&id_ptr, adt->action, adt->remap, ctime); } - - /* evaluate Action data */ - // FIXME: what if the solo track was not tweaking one, then nla-solo should be checked too? - if (adt->action) + /* evaluate Active Action only */ + else if (adt->action) animsys_evaluate_action(&id_ptr, adt->action, adt->remap, ctime); /* reset tag */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 84f98096364..d3a01b6d610 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -359,6 +359,38 @@ NlaTrack *BKE_nlatrack_find_active (ListBase *tracks) return NULL; } +/* Toggle the 'solo' setting for the given NLA-track, making sure that it is the only one + * that has this status in its AnimData block. + */ +void BKE_nlatrack_solo_toggle (AnimData *adt, NlaTrack *nlt) +{ + NlaTrack *nt; + + /* sanity check */ + if ELEM(NULL, adt, adt->nla_tracks.first) + return; + + /* firstly, make sure 'solo' flag for all tracks is disabled */ + for (nt= adt->nla_tracks.first; nt; nt= nt->next) { + if (nt != nlt) + nt->flag &= ~NLATRACK_SOLO; + } + + /* now, enable 'solo' for the given track if appropriate */ + if (nlt) { + /* toggle solo status */ + nlt->flag ^= NLATRACK_SOLO; + + /* set or clear solo-status on AnimData */ + if (nlt->flag & NLATRACK_SOLO) + adt->flag |= ADT_NLA_SOLO_TRACK; + else + adt->flag &= ~ADT_NLA_SOLO_TRACK; + } + else + adt->flag &= ~ADT_NLA_SOLO_TRACK; +} + /* Make the given NLA-track the active one for the given stack. If no track is provided, * this function can be used to simply deactivate all the NLA tracks in the given stack too. */ diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 8db85ffa0b1..ed401c3596b 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -326,6 +326,19 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh case ANIMTYPE_NLATRACK: { NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + short offset; + + /* offset for start of channel (on LHS of channel-list) */ + if (ale->id) { + /* special exception for materials */ + if (GS(ale->id->name) == ID_MA) + offset= 21 + NLACHANNEL_BUTTON_WIDTH; + else + offset= 14; + } + else + offset= 0; if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { /* toggle protection (only if there's a toggle there) */ @@ -335,6 +348,10 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* toggle mute */ nlt->flag ^= NLATRACK_MUTED; } + else if (x <= ((NLACHANNEL_BUTTON_WIDTH*2)+offset)) { + /* toggle 'solo' */ + BKE_nlatrack_solo_toggle(adt, nlt); + } else { /* set selection */ if (selectmode == SELECT_INVERT) { @@ -359,7 +376,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* for now, only do something if user clicks on the 'push-down' button */ if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { - /* activate push-down operator */ + /* activate push-down function */ // TODO: make this use the operator instead of calling the function directly // however, calling the operator requires that we supply the args, and that works with proper buttons only BKE_nla_action_pushdown(adt); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index a7188a7cccd..3d8cb7548c0 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -30,6 +30,9 @@ /* internal exports only */ +/* **************************************** */ +/* Macros, etc. only used by NLA */ + /* -------------- NLA Channel Defines -------------- */ /* NLA channel heights */ diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 2e3d5572711..463479c0909 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -199,7 +199,7 @@ void NLAEDIT_OT_select_all_toggle (wmOperatorType *ot) /* api callbacks */ ot->exec= nlaedit_deselectall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= nlaop_poll_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; @@ -441,7 +441,7 @@ void NLAEDIT_OT_click_select (wmOperatorType *ot) /* api callbacks - absolutely no exec() this yet... */ ot->invoke= nlaedit_clickselect_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= nlaop_poll_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; From 4e1bb5a806d65982320f89216b24ac7267f64f4a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 6 Jun 2009 04:44:18 +0000 Subject: [PATCH 021/512] NLA SoC: Action-line is now drawn with green colouring when a strip is being tweaked to show the relationship between them. --- source/blender/editors/space_nla/nla_draw.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 6c4c64ea272..4fa27f4bc11 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -295,14 +295,23 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_NLAACTION: { + AnimData *adt= BKE_animdata_from_id(ale->id); + /* just draw a semi-shaded rect spanning the width of the viewable area if there's data */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - if (ale->data) - glColor4f(0.8f, 0.2f, 0.0f, 0.4f); // reddish color - hardcoded for now - else - glColor4f(0.6f, 0.5f, 0.5f, 0.3f); // greyish-red color - hardcoded for now + // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) + if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { + // greenish color (same as tweaking strip) - hardcoded for now + glColor4f(0.3f, 0.95f, 0.1f, 0.3f); // FIXME: only draw the actual range of the action darker? + } + else { + if (ale->data) + glColor4f(0.8f, 0.2f, 0.0f, 0.4f); // reddish color - hardcoded for now + else + glColor4f(0.6f, 0.5f, 0.5f, 0.3f); // greyish-red color - hardcoded for now + } /* draw slightly shifted up for greater separation from standard channels, * but also slightly shorter for some more contrast when viewing the strips From 9621d626a0484d19e2c18e57cbdd5f9c24c827f4 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 6 Jun 2009 05:06:46 +0000 Subject: [PATCH 022/512] NLA SoC: Various user-counts and file IO bugfixes for tweaking actions... --- source/blender/blenkernel/intern/anim_sys.c | 2 +- source/blender/blenkernel/intern/nla.c | 5 ++++- source/blender/blenloader/intern/readfile.c | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index fb4c2663c3c..390efc5ced4 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -154,7 +154,7 @@ AnimData *BKE_copy_animdata (AnimData *adt) // XXX review this... it might not be optimal behaviour yet... //id_us_plus((ID *)dadt->action); dadt->action= copy_action(adt->action); - dadt->tmpact= copy_action(adt->action); + dadt->tmpact= copy_action(adt->tmpact); /* duplicate NLA data */ copy_nladata(&dadt->nla_tracks, &adt->nla_tracks); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index d3a01b6d610..9acbad32a42 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -675,11 +675,12 @@ short BKE_nla_tweakmode_enter (AnimData *adt) /* handle AnimData level changes: * - 'real' active action to temp storage (no need to change user-counts) - * - action of active strip set to be the 'active action' + * - action of active strip set to be the 'active action', and have its usercount incremented * - editing-flag for this AnimData block should also get turned on (for more efficient restoring) */ adt->tmpact= adt->action; adt->action= activeStrip->act; + id_us_plus(&activeStrip->act->id); adt->flag |= ADT_NLA_EDIT_ON; /* done! */ @@ -706,10 +707,12 @@ void BKE_nla_tweakmode_exit (AnimData *adt) nlt->flag &= ~NLATRACK_DISABLED; /* handle AnimData level changes: + * - 'temporary' active action needs its usercount decreased, since we're removing this reference * - 'real' active action is restored from storage * - storage pointer gets cleared (to avoid having bad notes hanging around) * - editing-flag for this AnimData block should also get turned off */ + if (adt->action) adt->action->id.us--; adt->action= adt->tmpact; adt->tmpact= NULL; adt->flag &= ~ADT_NLA_EDIT_ON; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index e3869d4bc8a..c306f5bcde4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1896,6 +1896,7 @@ static void lib_link_animdata(FileData *fd, ID *id, AnimData *adt) /* link action data */ adt->action= newlibadr_us(fd, id->lib, adt->action); + adt->tmpact= newlibadr_us(fd, id->lib, adt->tmpact); /* link drivers */ lib_link_fcurves(fd, id, &adt->drivers); @@ -9406,6 +9407,7 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) /* own action */ expand_doit(fd, mainvar, adt->action); + expand_doit(fd, mainvar, adt->tmpact); /* drivers - assume that these F-Curves have driver data to be in this list... */ for (fcd= adt->drivers.first; fcd; fcd= fcd->next) { From 34f29749c8d83b279dc0dd186da32018d0b30685 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 7 Jun 2009 06:49:04 +0000 Subject: [PATCH 023/512] NLA SoC: RNA wrapping for NLA Data Most of the relevant properties have been wrapped. - There are still some properties I'm not sure about whether they should be exposed at all (which have been left out for now). Most of these are really internal flags which are used in a few select places. - To maintain the integrity of the settings, I've included some custom code for a few of the setters (i.e. scale/end-frame) where changing one should result in a change in the other and vica-versa. Also, tweaked the wrapping for a few other types. Another side effect of this commit is that I can now uncommented some code for using F-Curves to control the influence and time of the strips. These F-Curves would need to be specifically attached to the NLA-Strip they affect for now (TODO: I need to review this again...), and as such, cannot be used yet since there's no (end-user-accessible) way to do this :) --- source/blender/blenkernel/intern/anim_sys.c | 5 +- source/blender/makesrna/RNA_access.h | 2 + source/blender/makesrna/intern/makesrna.c | 1 + .../blender/makesrna/intern/rna_animation.c | 2 +- source/blender/makesrna/intern/rna_internal.h | 1 + source/blender/makesrna/intern/rna_nla.c | 329 ++++++++++++++++++ 6 files changed, 335 insertions(+), 5 deletions(-) create mode 100644 source/blender/makesrna/intern/rna_nla.c diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 390efc5ced4..44817b47860 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -657,16 +657,13 @@ void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) /* now strip's evaluate F-Curves for these settings (if applicable) */ if (strip->fcurves.first) { -#if 0 PointerRNA strip_ptr; - FCurve *fcu; /* create RNA-pointer needed to set values */ RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); /* execute these settings as per normal */ - animsys_evaluate_fcurves(&actstrip_ptr, &strip->fcurves, NULL, ctime); -#endif + animsys_evaluate_fcurves(&strip_ptr, &strip->fcurves, NULL, ctime); } } diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index eb355a34f9f..ad9869f853e 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -189,6 +189,8 @@ extern StructRNA RNA_MultiresModifier; extern StructRNA RNA_MusgraveTexture; extern StructRNA RNA_NandController; extern StructRNA RNA_NearSensor; +extern StructRNA RNA_NlaTrack; +extern StructRNA RNA_NlaStrip; extern StructRNA RNA_Node; extern StructRNA RNA_NodeTree; extern StructRNA RNA_NoiseTexture; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 1cfba4286c7..15140e4f744 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1794,6 +1794,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_mesh.c", RNA_def_mesh}, {"rna_meta.c", RNA_def_meta}, {"rna_modifier.c", RNA_def_modifier}, + {"rna_nla.c", RNA_def_nla}, {"rna_nodetree.c", RNA_def_nodetree}, {"rna_object.c", RNA_def_object}, {"rna_object_force.c", RNA_def_object_force}, diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c index 702dc9fa65d..3da8eb33bfd 100644 --- a/source/blender/makesrna/intern/rna_animation.c +++ b/source/blender/makesrna/intern/rna_animation.c @@ -184,7 +184,7 @@ void rna_def_animdata(BlenderRNA *brna) /* NLA */ prop= RNA_def_property(srna, "nla_tracks", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "nla_tracks", NULL); - RNA_def_property_struct_type(prop, "UnknownType"); // XXX! + RNA_def_property_struct_type(prop, "NlaTrack"); RNA_def_property_ui_text(prop, "NLA Tracks", "NLA Tracks (i.e. Animation Layers)."); /* Action */ diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 9071efe71f7..16f7a11d1be 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -139,6 +139,7 @@ void RNA_def_material(struct BlenderRNA *brna); void RNA_def_mesh(struct BlenderRNA *brna); void RNA_def_meta(struct BlenderRNA *brna); void RNA_def_modifier(struct BlenderRNA *brna); +void RNA_def_nla(struct BlenderRNA *brna); void RNA_def_nodetree(struct BlenderRNA *brna); void RNA_def_object(struct BlenderRNA *brna); void RNA_def_object_force(struct BlenderRNA *brna); diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c new file mode 100644 index 00000000000..35d1e415243 --- /dev/null +++ b/source/blender/makesrna/intern/rna_nla.c @@ -0,0 +1,329 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): Blender Foundation (2009), Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "rna_internal.h" + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_scene_types.h" + +#include "MEM_guardedalloc.h" + +#ifdef RNA_RUNTIME + +#include +#include + +static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + CLAMP(value, 1, data->end); + data->start= value; +} + +static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + float len, actlen; + + /* clamp value to lie within valid limits - must not have zero or negative length strip */ + CLAMP(value, data->start+0.1f, MAXFRAME); + data->end= value; + + /* calculate the lengths the strip and its action (if applicable) */ + len= data->end - data->start; + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + + /* now, adjust the 'scale' setting to reflect this (so that this change can be valid) */ + data->scale= len / ((actlen) * data->repeat); +} + +static void rna_NlaStrip_scale_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + float actlen, mapping; + + /* set scale value */ + CLAMP(value, 0.0001f, 1000.0f); /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */ + data->scale= value; + + /* calculate existing factors */ + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + mapping= data->scale * data->repeat; + + /* adjust endpoint of strip in response to this */ + if (IS_EQ(mapping, 0.0f) == 0) + data->end = (actlen * mapping) + data->start; + else + printf("NlaStrip Set Scale Error (in RNA): Scale = %0.4f, Repeat = %0.4f \n", data->scale, data->repeat); +} + +static void rna_NlaStrip_blend_in_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + float len; + + /* blend-in is limited to the length of the strip, and also cannot overlap with blendout */ + len= (data->end - data->start) - data->blendout; + CLAMP(value, 0, len); + + data->blendin= value; +} + +static void rna_NlaStrip_blend_out_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + float len; + + /* blend-out is limited to the length of the strip */ + len= (data->end - data->start); + CLAMP(value, 0, len); + + /* it also cannot overlap with blendin */ + if ((len - value) < data->blendin) + value= len - data->blendin; + + data->blendout= value; +} + +static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + CLAMP(value, 1, data->actend); + data->actstart= value; +} + +static void rna_NlaStrip_action_end_frame_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + CLAMP(value, data->actstart, MAXFRAME); + data->actend= value; +} + +#else + +void rna_def_nlastrip(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + /* enum defs */ + static EnumPropertyItem prop_type_items[] = { + {NLASTRIP_TYPE_CLIP, "CLIP", "Action Clip", "NLA Strip references some Action."}, + {NLASTRIP_TYPE_TRANSITION, "TRANSITION", "Transition", "NLA Strip 'transitions' between adjacent strips."}, + {0, NULL, NULL, NULL}}; + static EnumPropertyItem prop_mode_blend_items[] = { + {NLASTRIP_MODE_BLEND, "BLEND", "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, + {NLASTRIP_MODE_ADD, "ADD", "Add", "Weighted result of strip is added to the accumlated results."}, + {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", "Subtract", "Weighted result of strip is removed from the accumlated results."}, + {NLASTRIP_MODE_MULTIPLY, "MULITPLY", "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, + {0, NULL, NULL, NULL}}; + static EnumPropertyItem prop_mode_extend_items[] = { + {NLASTRIP_EXTEND_NOTHING, "NOTHING", "Nothing", "Strip has no influence past its extents."}, + {NLASTRIP_EXTEND_HOLD, "HOLD", "Hold", "Hold the first frame if no previous strips in track, and always hold last frame."}, + {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", "Hold Forward", "Only hold last frame."}, + {0, NULL, NULL, NULL}}; + + /* struct definition */ + srna= RNA_def_struct(brna, "NlaStrip", NULL); + RNA_def_struct_ui_text(srna, "NLA Strip", "A container referencing an existing Action."); + //RNA_def_struct_ui_icon(srna, ICON_ACTION); + + /* Enums */ + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, prop_type_items); + RNA_def_property_ui_text(prop, "Type", "Type of NLA Strip."); + + prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "extendmode"); + RNA_def_property_enum_items(prop, prop_mode_extend_items); + RNA_def_property_ui_text(prop, "Extrapolation", "Action to take for gaps past the strip extents."); + + prop= RNA_def_property(srna, "blending", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "blendmode"); + RNA_def_property_enum_items(prop, prop_mode_blend_items); + RNA_def_property_ui_text(prop, "Blending", "Method used for combining strip's result with accumulated result."); + + /* Strip extents */ + prop= RNA_def_property(srna, "start_frame", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "start"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_start_frame_set", NULL); + RNA_def_property_ui_text(prop, "Start Frame", ""); + + prop= RNA_def_property(srna, "end_frame", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "end"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_end_frame_set", NULL); + RNA_def_property_ui_text(prop, "End Frame", ""); + + /* Blending */ + prop= RNA_def_property(srna, "blend_in", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "blendin"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_in_set", NULL); + RNA_def_property_ui_text(prop, "Blend In", "Number of frames at start of strip to fade in influence."); + + prop= RNA_def_property(srna, "blend_out", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "blendout"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_out_set", NULL); + RNA_def_property_ui_text(prop, "Blend Out", ""); + + prop= RNA_def_property(srna, "auto_blending", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_AUTO_BLENDS); + RNA_def_property_ui_text(prop, "Auto Blend In/Out", "Number of frames for Blending In/Out is automatically determined from overlapping strips."); + + /* Action */ + prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "act"); + RNA_def_property_ui_text(prop, "Action", "Action referenced by this strip."); + + /* Action extents */ + prop= RNA_def_property(srna, "action_start_frame", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "actstart"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_start_frame_set", NULL); + RNA_def_property_ui_text(prop, "Action Start Frame", ""); + + prop= RNA_def_property(srna, "action_end_frame", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "actend"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_end_frame_set", NULL); + RNA_def_property_ui_text(prop, "Action End Frame", ""); + + /* Action Reuse */ + prop= RNA_def_property(srna, "repeat", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "repeat"); + RNA_def_property_range(prop, 1.0f, 1000.0f); /* these limits have currently be chosen arbitarily, but could be extended (minimum should still be > 0 though) if needed... */ + RNA_def_property_ui_text(prop, "Repeat", "Number of times to repeat the "); + + prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "scale"); + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_scale_set", NULL); + RNA_def_property_range(prop, 0.0001f, 1000.0f); /* these limits can be extended, but beyond this, we can get some crazy+annoying bugs due to numeric errors */ + RNA_def_property_ui_text(prop, "Scale", "Scaling factor for action."); + + // TODO: strip's F-Curves? + + /* Strip's F-Modifiers */ + prop= RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "FModifier"); + RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting all the F-Curves in the referenced Action."); + + /* Settings - Values necessary for evaluation */ + prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Influence", "Amount the strip contributes to the current result."); + + prop= RNA_def_property(srna, "strip_time", PROP_FLOAT, PROP_NONE); + RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate."); + + prop= RNA_def_property(srna, "animated_influence", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, not editable + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE); + RNA_def_property_ui_text(prop, "Animated Influence", "Influence setting is controlled by an F-Curve rather than automatically determined."); + + prop= RNA_def_property(srna, "animated_time", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, not editable + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE); + RNA_def_property_ui_text(prop, "Animated Strip Time", "Strip time is controlled by an F-Curve rather than automatically determined."); + + /* settings */ + prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can be made editable by hooking it up to the necessary NLA API methods */ + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_ACTIVE); + RNA_def_property_ui_text(prop, "Active", "NLA Strip is active."); + + prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_SELECT); + RNA_def_property_ui_text(prop, "Selected", "NLA Strip is selected."); + + prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_MUTED); + RNA_def_property_ui_text(prop, "Muted", "NLA Strip is not evaluated."); + + prop= RNA_def_property(srna, "reversed", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_REVERSE); + RNA_def_property_ui_text(prop, "Reversed", "NLA Strip is played back in reverse order (only when timing is automatically determined)."); + + // TODO: + // - sync length +} + +void rna_def_nlatrack(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "NlaTrack", NULL); + RNA_def_struct_ui_text(srna, "NLA Track", "A animation layer containing Actions referenced as NLA strips."); + //RNA_def_struct_ui_icon(srna, ICON_ACTION); + + /* strips collection */ + prop= RNA_def_property(srna, "strips", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "NlaStrip"); + RNA_def_property_ui_text(prop, "NLA Strips", "NLA Strips on this NLA-track."); + + /* name property */ + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", ""); + RNA_def_struct_name_property(srna, prop); + + /* settings */ + prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can be made editable by hooking it up to the necessary NLA API methods */ + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_ACTIVE); + RNA_def_property_ui_text(prop, "Active", "NLA Track is active."); + + prop= RNA_def_property(srna, "solo", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can be made editable by hooking it up to the necessary NLA API methods */ + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SOLO); + RNA_def_property_ui_text(prop, "Solo", "NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)."); + + prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SELECTED); + RNA_def_property_ui_text(prop, "Selected", "NLA Track is selected."); + + prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_MUTED); + RNA_def_property_ui_text(prop, "Muted", "NLA Track is not evaluated."); + + prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_PROTECTED); + RNA_def_property_ui_text(prop, "Locked", "NLA Track is locked."); +} + +/* --------- */ + +void RNA_def_nla(BlenderRNA *brna) +{ + rna_def_nlatrack(brna); + rna_def_nlastrip(brna); +} + + +#endif From 43c7c15e2be555454f54840307fd5ea7d61d0216 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 7 Jun 2009 07:04:31 +0000 Subject: [PATCH 024/512] NLA SoC: 2 little tweaks - Evaluation times for strips are now strictly clamped to the endpoints of the strips - i.e. if a strip has 'extend' on, the strip's evaluation time won't continue to change as time changes - New NLA Editor instances now have auto-snapping turned on by default (as they should) --- source/blender/blenkernel/intern/anim_sys.c | 10 ++++++++++ source/blender/editors/space_nla/space_nla.c | 3 +++ 2 files changed, 13 insertions(+) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 44817b47860..3290e06dfb4 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -730,6 +730,16 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index */ if ((estrip == NULL) || (estrip->flag & NLASTRIP_FLAG_MUTED)) return; + + /* if ctime was not within the boundaries of the strip, clamp! */ + switch (side) { + case NES_TIME_BEFORE: /* extend first frame only */ + ctime= estrip->start; + break; + case NES_TIME_AFTER: /* extend last frame only */ + ctime= estrip->end; + break; + } /* evaluate strip's evaluation controls * - skip if no influence (i.e. same effect as muting the strip) diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 39579ec96da..32ced127831 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -79,6 +79,9 @@ static SpaceLink *nla_new(const bContext *C) /* allocate DopeSheet data for NLA Editor */ snla->ads= MEM_callocN(sizeof(bDopeSheet), "NlaEdit DopeSheet"); + /* set auto-snapping settings */ + snla->autosnap = SACTSNAP_FRAME; + /* header */ ar= MEM_callocN(sizeof(ARegion), "header for nla"); From 019baf8b8fc0cae24b8706a557a296e598290615 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 7 Jun 2009 11:37:15 +0000 Subject: [PATCH 025/512] NLA SoC: Adding skeleton code for a buttons region in NLA If anyone's doing any testing at this point, please check if this works ok for files with new/old NLA Editors, as I was having some problems with one of my testing (saved from this branch) files with this. --- .../blender/editors/space_nla/nla_buttons.c | 198 ++++++++++++++++++ source/blender/editors/space_nla/nla_intern.h | 7 + source/blender/editors/space_nla/nla_ops.c | 7 + source/blender/editors/space_nla/space_nla.c | 104 +++++++++ 4 files changed, 316 insertions(+) create mode 100644 source/blender/editors/space_nla/nla_buttons.c diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c new file mode 100644 index 00000000000..118dc988dfb --- /dev/null +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -0,0 +1,198 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_arithb.h" +#include "BLI_blenlib.h" +#include "BLI_editVert.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_nla.h" +#include "BKE_action.h" +#include "BKE_context.h" +#include "BKE_curve.h" +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_fcurve.h" +#include "BKE_object.h" +#include "BKE_global.h" +#include "BKE_scene.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "ED_anim_api.h" +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "nla_intern.h" // own include + + +/* ******************* nla editor space & buttons ************** */ + +#define B_NOP 1 +#define B_REDR 2 + +/* -------------- */ + +static void do_nla_region_buttons(bContext *C, void *arg, int event) +{ + //Scene *scene= CTX_data_scene(C); + + switch(event) { + + } + + /* default for now */ + //WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); +} + +static int nla_panel_context(const bContext *C, bAnimListElem **ale, NlaTrack **nlt) +{ + bAnimContext ac; + bAnimListElem *elem= NULL; + + /* for now, only draw if we could init the anim-context info (necessary for all animation-related tools) + * to work correctly is able to be correctly retrieved. There's no point showing empty panels? + */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return 0; + + // XXX + return 1; + + /* try to find 'active' F-Curve */ + //elem= get_active_fcurve_channel(&ac); + if(elem == NULL) + return 0; + + if(nlt) + *nlt= (NlaTrack*)elem->data; + if(ale) + *ale= elem; + else + MEM_freeN(elem); + + return 1; +} + +static int nla_panel_poll(const bContext *C, PanelType *pt) +{ + return nla_panel_context(C, NULL, NULL); +} + +static void nla_panel_properties(const bContext *C, Panel *pa) +{ + bAnimListElem *ale; + NlaTrack *nlt; + uiBlock *block; + char name[128]; + + if(!nla_panel_context(C, &ale, &nlt)) + return; + + block= uiLayoutFreeBlock(pa->layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + /* Info - Active F-Curve */ + uiDefBut(block, LABEL, 1, "Active NLA Strip:", 10, 200, 150, 19, NULL, 0.0, 0.0, 0, 0, ""); + + + //MEM_freeN(ale); +} + + +/* ******************* general ******************************** */ + + +void nla_buttons_register(ARegionType *art) +{ + PanelType *pt; + + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel properties"); + strcpy(pt->idname, "NLA_PT_properties"); + strcpy(pt->label, "Properties"); + pt->draw= nla_panel_properties; + pt->poll= nla_panel_poll; + BLI_addtail(&art->paneltypes, pt); +} + +static int nla_properties(bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + ARegion *ar= nla_has_buttons_region(sa); + + if(ar) { + ar->flag ^= RGN_FLAG_HIDDEN; + ar->v2d.flag &= ~V2D_IS_INITIALISED; /* XXX should become hide/unhide api? */ + + ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa); + ED_area_tag_redraw(sa); + } + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_properties(wmOperatorType *ot) +{ + ot->name= "Properties"; + ot->idname= "NLAEDIT_OT_properties"; + + ot->exec= nla_properties; + ot->poll= ED_operator_nla_active; + + /* flags */ + ot->flag= 0; +} diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 3d8cb7548c0..00de0498e4b 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -48,6 +48,13 @@ /* channel toggle-buttons */ #define NLACHANNEL_BUTTON_WIDTH 16 +/* **************************************** */ +/* space_nla.c / nla_buttons.c */ + +ARegion *nla_has_buttons_region(ScrArea *sa); + +void nla_buttons_register(ARegionType *art); +void NLAEDIT_OT_properties(wmOperatorType *ot); /* **************************************** */ /* nla_draw.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 057e4b05656..f59cbd9c1d4 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -115,6 +115,9 @@ int nlaop_poll_tweakmode_on (bContext *C) void nla_operatortypes(void) { + /* view */ + WM_operatortype_append(NLAEDIT_OT_properties); + /* channels */ WM_operatortype_append(NLA_OT_channels_click); WM_operatortype_append(NLA_OT_channels_select_border); @@ -197,6 +200,10 @@ void nla_keymap(wmWindowManager *wm) { ListBase *keymap; + /* keymap for all regions */ + keymap= WM_keymap_listbase(wm, "NLA Generic", SPACE_NLA, 0); + WM_keymap_add_item(keymap, "NLAEDIT_OT_properties", NKEY, KM_PRESS, 0, 0); + /* channels */ /* Channels are not directly handled by the NLA Editor module, but are inherited from the Animation module. * Most of the relevant operations, keymaps, drawing, etc. can therefore all be found in that module instead, as there diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 32ced127831..5490f40eb03 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -66,6 +66,39 @@ #include "nla_intern.h" // own include +/* ******************** manage regions ********************* */ + +ARegion *nla_has_buttons_region(ScrArea *sa) +{ + ARegion *ar, *arnew; + + for (ar= sa->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype==RGN_TYPE_UI) + return ar; + } + + /* add subdiv level; after main */ + for (ar= sa->regionbase.first; ar; ar= ar->next) { + if (ar->regiontype==RGN_TYPE_WINDOW) + break; + } + + /* is error! */ + if (ar==NULL) return NULL; + + arnew= MEM_callocN(sizeof(ARegion), "buttons for nla"); + + BLI_insertlinkafter(&sa->regionbase, ar, arnew); + arnew->regiontype= RGN_TYPE_UI; + arnew->alignment= RGN_ALIGN_RIGHT; + + arnew->flag = RGN_FLAG_HIDDEN; + + return arnew; +} + + + /* ******************** default callbacks for nla space ***************** */ static SpaceLink *nla_new(const bContext *C) @@ -130,6 +163,14 @@ static SpaceLink *nla_new(const bContext *C) ar->v2d.align= V2D_ALIGN_NO_NEG_Y; ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + /* ui buttons */ + ar= MEM_callocN(sizeof(ARegion), "buttons area for nla"); + + BLI_addtail(&snla->regionbase, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + ar->flag = RGN_FLAG_HIDDEN; + return (SpaceLink *)snla; } @@ -178,6 +219,8 @@ static void nla_channel_area_init(wmWindowManager *wm, ARegion *ar) // TODO: cannot use generic copy, need special NLA version keymap= WM_keymap_listbase(wm, "NLA Channels", SPACE_NLA, 0); /* XXX weak? */ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + keymap= WM_keymap_listbase(wm, "NLA Generic", SPACE_NLA, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } /* draw entirely, view changes should be handled here */ @@ -221,6 +264,8 @@ static void nla_main_area_init(wmWindowManager *wm, ARegion *ar) /* own keymap */ keymap= WM_keymap_listbase(wm, "NLA Data", SPACE_NLA, 0); /* XXX weak? */ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + keymap= WM_keymap_listbase(wm, "NLA Generic", SPACE_NLA, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); } static void nla_main_area_draw(const bContext *C, ARegion *ar) @@ -309,6 +354,52 @@ static void nla_header_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } +/* add handlers, stuff you only do once or on area/region changes */ +static void nla_buttons_area_init(wmWindowManager *wm, ARegion *ar) +{ + ListBase *keymap; + + ED_region_panels_init(wm, ar); + + keymap= WM_keymap_listbase(wm, "NLA Generic", SPACE_NLA, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void nla_buttons_area_draw(const bContext *C, ARegion *ar) +{ + ED_region_panels(C, ar, 1, NULL); +} + +static void nla_region_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_OB_ACTIVE: + case ND_FRAME: + case ND_MARKERS: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_OBJECT: + switch(wmn->data) { + case ND_BONE_ACTIVE: + case ND_BONE_SELECT: + case ND_KEYS: + ED_region_tag_redraw(ar); + break; + } + break; + default: + if(wmn->data==ND_KEYS) + ED_region_tag_redraw(ar); + + } +} + + static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ @@ -439,6 +530,19 @@ void ED_spacetype_nla(void) BLI_addhead(&st->regiontypes, art); + /* regions: UI buttons */ + art= MEM_callocN(sizeof(ARegionType), "spacetype nla region"); + art->regionid = RGN_TYPE_UI; + art->minsizex= 200; + art->keymapflag= ED_KEYMAP_UI; + art->listener= nla_region_listener; + art->init= nla_buttons_area_init; + art->draw= nla_buttons_area_draw; + + BLI_addhead(&st->regiontypes, art); + + nla_buttons_register(art); + BKE_spacetype_register(st); } From 39ff455eecdacb6cc7cfcc1003b9faf6e6b8c21b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 8 Jun 2009 01:07:19 +0000 Subject: [PATCH 026/512] NLA SoC: Added button for entering/exiting TweakMode - Should the icons used for this be reversed? --- source/blender/editors/space_nla/nla_edit.c | 4 ++++ source/blender/editors/space_nla/nla_header.c | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index f7053957667..49d43f29c5f 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -120,6 +120,10 @@ static int nlaedit_enable_tweakmode_exec (bContext *C, wmOperator *op) ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); WM_event_add_notifier(C, NC_SCENE, NULL); } + else { + BKE_report(op->reports, RPT_ERROR, "No active strip(s) to enter tweakmode on."); + return OPERATOR_CANCELLED; + } /* done */ return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 0dcd3198db0..7ce7536878b 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -118,6 +118,7 @@ static void do_nla_buttons(bContext *C, void *arg, int event) void nla_header_buttons(const bContext *C, ARegion *ar) { SpaceNla *snla= (SpaceNla *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); uiBlock *block; int xco, yco= 3; @@ -178,6 +179,14 @@ void nla_header_buttons(const bContext *C, ARegion *ar) } xco += 98; + /* Tweakmode... */ + // XXX these icons need to be changed + if (scene->flag & SCE_NLA_EDIT_ON) + uiDefIconTextButO(block, BUT, "NLAEDIT_OT_tweakmode_exit", WM_OP_INVOKE_REGION_WIN, ICON_NLA, "Exit TweakMode", xco,yco,130,YIC, "Restore the true active action. (TAB)"); + else + uiDefIconTextButO(block, BUT, "NLAEDIT_OT_tweakmode_enter", WM_OP_INVOKE_REGION_WIN, ICON_EDIT, "Enter TweakMode", xco,yco,130,YIC, "Temporarily set the action referenced by the active strip as the active action so that it can be tweaked. (TAB)"); + xco+= 150; + /* always as last */ UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); From a8f81615183dea449d337b24338e60bf928b3653 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 8 Jun 2009 11:11:39 +0000 Subject: [PATCH 027/512] NLA SoC: Fixed Outliner drawing for NLA data, and set icons for RNA wrapping of this data... --- source/blender/editors/space_outliner/outliner.c | 14 ++++++++------ .../editors/space_outliner/outliner_intern.h | 1 + source/blender/makesrna/intern/rna_nla.c | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 16748af39d5..eba0aa84e85 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -949,7 +949,6 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i /* NLA Data */ if (adt->nla_tracks.first) { -#if 0 TreeElement *tenla= outliner_add_element(soops, &te->subtree, adt, te, TSE_NLA, 0); NlaTrack *nlt; int a= 0; @@ -957,17 +956,18 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i tenla->name= "NLA Tracks"; for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { - TreeElement *tenlt= outliner_add_element(soops, &te->subtree, nlt, te, TSE_NLA_TRACK, a); - bActionStrip *strip; + TreeElement *tenlt= outliner_add_element(soops, &tenla->subtree, nlt, tenla, TSE_NLA_TRACK, a); + NlaStrip *strip; TreeElement *ten; int b= 0; - for (strip=nlt->strips.first; strip; strip=strip->next, a++) { - ten= outliner_add_element(soops, &tenla->subtree, strip->act, tenla, TSE_NLA_ACTION, a); + tenlt->name= nlt->name; + + for (strip=nlt->strips.first; strip; strip=strip->next, b++) { + ten= outliner_add_element(soops, &tenlt->subtree, strip->act, tenlt, TSE_NLA_ACTION, b); if(ten) ten->directdata= strip; } } -#endif } } else if(type==TSE_SEQUENCE) { @@ -3521,6 +3521,8 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen UI_icon_draw(x, y, ICON_ANIM_DATA); break; // xxx case TSE_NLA: UI_icon_draw(x, y, ICON_NLA); break; + case TSE_NLA_TRACK: + UI_icon_draw(x, y, ICON_NLA); break; // XXX case TSE_NLA_ACTION: UI_icon_draw(x, y, ICON_ACTION); break; case TSE_DEFGROUP_BASE: diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 48c904121a5..204298f2b70 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -94,6 +94,7 @@ typedef struct TreeElement { #define TSE_RNA_STRUCT 30 #define TSE_RNA_PROPERTY 31 #define TSE_RNA_ARRAY_ELEM 32 +#define TSE_NLA_TRACK 33 /* outliner search flags */ #define OL_FIND 0 diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 35d1e415243..0a7d17adc09 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -155,7 +155,7 @@ void rna_def_nlastrip(BlenderRNA *brna) /* struct definition */ srna= RNA_def_struct(brna, "NlaStrip", NULL); RNA_def_struct_ui_text(srna, "NLA Strip", "A container referencing an existing Action."); - //RNA_def_struct_ui_icon(srna, ICON_ACTION); + RNA_def_struct_ui_icon(srna, ICON_NLA); // XXX /* Enums */ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); @@ -281,7 +281,7 @@ void rna_def_nlatrack(BlenderRNA *brna) srna= RNA_def_struct(brna, "NlaTrack", NULL); RNA_def_struct_ui_text(srna, "NLA Track", "A animation layer containing Actions referenced as NLA strips."); - //RNA_def_struct_ui_icon(srna, ICON_ACTION); + RNA_def_struct_ui_icon(srna, ICON_NLA); /* strips collection */ prop= RNA_def_property(srna, "strips", PROP_COLLECTION, PROP_NONE); From 4b8b9b222eebbfa01566b90a00bba8a35835c671 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 9 Jun 2009 04:39:33 +0000 Subject: [PATCH 028/512] NLA SoC: Added buttons in NKEY region for NLA Editor - Most of the settings wrapped in RNA have been exposed here using the new layout engine stuff from Brecht (C-API). I've tried to maintain a hierarchy of high-level (owner, generic-settings) to low-level (children, specialised-settings) here, which seems to be the prevailing guidelines? (It took a while to try to understand how this all fitted together, since there were no clear examples on how to use this anywhere) - NLA-Strip Modifiers have not been exposed yet. They still use the old-style drawing, which may/may not be compatible here. - Fixed a bug with how the notifiers from this panel get sent. I really don't know how the compiler would have missed the undeclared pointer that was being used ('ob'). --- .../blender/editors/animation/anim_filter.c | 1 - .../blender/editors/space_nla/nla_buttons.c | 224 +++++++++++++++--- 2 files changed, 194 insertions(+), 31 deletions(-) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 32405571b57..cdda13d999d 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -730,7 +730,6 @@ static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_m /* only include this track if selected in a way consistent with the filtering requirements */ if ( ANIMCHANNEL_SELOK(SEL_NLT(nlt)) ) { /* only include if this track is active */ - // XXX keep this? if (!(filter_mode & ANIMFILTER_ACTIVE) || (nlt->flag & NLATRACK_ACTIVE)) { ale= make_new_animlistelem(nlt, ANIMTYPE_NLATRACK, owner, ownertype, owner_id); diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 118dc988dfb..80982d9feb5 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -97,13 +97,16 @@ static void do_nla_region_buttons(bContext *C, void *arg, int event) } /* default for now */ - //WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); + WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_TRANSFORM, NULL); } -static int nla_panel_context(const bContext *C, bAnimListElem **ale, NlaTrack **nlt) +static int nla_panel_context(const bContext *C, PointerRNA *nlt_ptr, PointerRNA *strip_ptr) { bAnimContext ac; - bAnimListElem *elem= NULL; + bAnimListElem *ale= NULL; + ListBase anim_data = {NULL, NULL}; + short found=0; + int filter; /* for now, only draw if we could init the anim-context info (necessary for all animation-related tools) * to work correctly is able to be correctly retrieved. There's no point showing empty panels? @@ -111,20 +114,32 @@ static int nla_panel_context(const bContext *C, bAnimListElem **ale, NlaTrack ** if (ANIM_animdata_get_context(C, &ac) == 0) return 0; - // XXX - return 1; + /* extract list of active channel(s), of which we should only take the first one (expecting it to be an NLA track) */ + filter= (ANIMFILTER_VISIBLE|ANIMFILTER_ACTIVE); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* try to find 'active' F-Curve */ - //elem= get_active_fcurve_channel(&ac); - if(elem == NULL) - return 0; + for (ale= anim_data.first; ale; ale= ale->next) { + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + + /* found it, now set the pointers */ + if (nlt_ptr) { + /* NLA-Track pointer */ + RNA_pointer_create(ale->id, &RNA_NlaTrack, nlt, nlt_ptr); + } + if (strip_ptr) { + /* NLA-Strip pointer */ + NlaStrip *strip= BKE_nlastrip_find_active(nlt); + RNA_pointer_create(ale->id, &RNA_NlaStrip, strip, strip_ptr); + } + + found= 1; + break; + } + } - if(nlt) - *nlt= (NlaTrack*)elem->data; - if(ale) - *ale= elem; - else - MEM_freeN(elem); + /* free temp data */ + BLI_freelistN(&anim_data); return 1; } @@ -134,26 +149,147 @@ static int nla_panel_poll(const bContext *C, PanelType *pt) return nla_panel_context(C, NULL, NULL); } -static void nla_panel_properties(const bContext *C, Panel *pa) -{ - bAnimListElem *ale; - NlaTrack *nlt; - uiBlock *block; - char name[128]; - if(!nla_panel_context(C, &ale, &nlt)) +/* -------------- */ + +/* active NLA-Track */ +static void nla_panel_track (const bContext *C, Panel *pa) +{ + PointerRNA nlt_ptr; + uiLayout *layout= pa->layout; + uiLayout *row; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, &nlt_ptr, NULL)) + return; + if (nlt_ptr.data == NULL) return; - block= uiLayoutFreeBlock(pa->layout); + block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); - - /* Info - Active F-Curve */ - uiDefBut(block, LABEL, 1, "Active NLA Strip:", 10, 200, 150, 19, NULL, 0.0, 0.0, 0, 0, ""); - - //MEM_freeN(ale); + /* Info - Active NLA-Context:Track ---------------------- */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, ICON_NLA, &nlt_ptr, "name", 0, 0, 0); } +/* generic settings for active NLA-Strip */ +static void nla_panel_properties(const bContext *C, Panel *pa) +{ + PointerRNA strip_ptr; + uiLayout *layout= pa->layout; + uiLayout *column, *row, *subcol; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, NULL, &strip_ptr)) + return; + if (strip_ptr.data == NULL) + return; + + block= uiLayoutGetBlock(layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + /* Strip Properties ------------------------------------- */ + /* strip type */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &strip_ptr, "type", 0, 0, 0); + + /* strip extents */ + column= uiLayoutColumn(layout, 1); + uiItemL(column, "Strip Extents:", 0); + uiItemR(column, NULL, 0, &strip_ptr, "start_frame", 0, 0, 0); + uiItemR(column, NULL, 0, &strip_ptr, "end_frame", 0, 0, 0); + + /* extrapolation */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &strip_ptr, "extrapolation", 0, 0, 0); + + /* blending */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &strip_ptr, "blending", 0, 0, 0); + + /* blend in/out + autoblending + * - blend in/out can only be set when autoblending is off + */ + column= uiLayoutColumn(layout, 1); + uiItemR(column, NULL, 0, &strip_ptr, "auto_blending", 0, 0, 0); // XXX as toggle? + subcol= uiLayoutColumn(column, 1); + uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "auto_blending")==0); + uiItemR(subcol, NULL, 0, &strip_ptr, "blend_in", 0, 0, 0); + uiItemR(subcol, NULL, 0, &strip_ptr, "blend_out", 0, 0, 0); + + /* settings */ + column= uiLayoutColumn(layout, 1); + uiItemL(column, "Playback Settings:", 0); + uiItemR(column, NULL, 0, &strip_ptr, "muted", 0, 0, 0); + uiItemR(column, NULL, 0, &strip_ptr, "reversed", 0, 0, 0); +} + + +/* action-clip only settings for active NLA-Strip */ +static void nla_panel_actclip(const bContext *C, Panel *pa) +{ + PointerRNA strip_ptr; + uiLayout *layout= pa->layout; + uiLayout *column, *row; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, NULL, &strip_ptr)) + return; + if (strip_ptr.data == NULL) + return; + + // XXX FIXME: move this check into a poll callback + if (RNA_enum_get(&strip_ptr, "type") != NLASTRIP_TYPE_CLIP) + return; + + block= uiLayoutGetBlock(layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + /* Strip Properties ------------------------------------- */ + /* action pointer */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, ICON_ACTION, &strip_ptr, "action", 0, 0, 0); + + /* action extents */ + // XXX custom names were used here... probably not necessary in future? + column= uiLayoutColumn(layout, 1); + uiItemL(column, "Action Extents:", 0); + uiItemR(column, "Start Frame", 0, &strip_ptr, "action_start_frame", 0, 0, 0); + uiItemR(column, "End Frame", 0, &strip_ptr, "action_end_frame", 0, 0, 0); + + /* action usage */ + column= uiLayoutColumn(layout, 1); + uiItemL(column, "Playback Settings:", 0); + uiItemR(column, NULL, 0, &strip_ptr, "scale", 0, 0, 0); + uiItemR(column, NULL, 0, &strip_ptr, "repeat", 0, 0, 0); +} + +/* evaluation settings for active NLA-Strip */ +static void nla_panel_evaluation(const bContext *C, Panel *pa) +{ + PointerRNA strip_ptr; + uiLayout *layout= pa->layout; + //uiLayout *column, *row, *subcol; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, NULL, &strip_ptr)) + return; + if (strip_ptr.data == NULL) + return; + + block= uiLayoutGetBlock(layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + // influence + // strip_time + // animated_influence + // animated_time +} /* ******************* general ******************************** */ @@ -161,13 +297,41 @@ static void nla_panel_properties(const bContext *C, Panel *pa) void nla_buttons_register(ARegionType *art) { PanelType *pt; - + + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel track"); + strcpy(pt->idname, "NLA_PT_track"); + strcpy(pt->label, "Active Track"); + pt->draw= nla_panel_track; + pt->poll= nla_panel_poll; + BLI_addtail(&art->paneltypes, pt); + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel properties"); strcpy(pt->idname, "NLA_PT_properties"); - strcpy(pt->label, "Properties"); + strcpy(pt->label, "Active Strip"); pt->draw= nla_panel_properties; pt->poll= nla_panel_poll; BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel properties"); + strcpy(pt->idname, "NLA_PT_actionclip"); + strcpy(pt->label, "Action Clip"); + pt->draw= nla_panel_actclip; + pt->poll= nla_panel_poll; // XXX need a special one to check for 'action clip' types only + BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel evaluation"); + strcpy(pt->idname, "NLA_PT_evaluation"); + strcpy(pt->label, "Evaluation"); + pt->draw= nla_panel_evaluation; + pt->poll= nla_panel_poll; + BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel modifiers"); + strcpy(pt->idname, "NLA_PT_modifiers"); + strcpy(pt->label, "Modifiers"); + //pt->draw= nla_panel_modifiers; + pt->poll= nla_panel_poll; + BLI_addtail(&art->paneltypes, pt); } static int nla_properties(bContext *C, wmOperator *op) From 096e2f0b5ab370fcc01a265ccf77eb71a2f03a43 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 9 Jun 2009 11:26:45 +0000 Subject: [PATCH 029/512] NLA SoC: Transform tools for NLA This commit restores transform support for NLA. Grab, scale, 'extend', and tweak (i.e. grab by just click+dragging) are implemented. Notes: - As soon as one end of a strip touches another adjacent strip (within the same track), that end stops moving. This has been done to avoid the situation where overlapping strips within the same track (which is not allowed) might be caused by transforms. - Made some changes to the RNA setters for the strip extents so that the validation above could take place (and other necessary changes on a per-strip basis could also occur). TODO's ? - Strips cannot be transferred from track to track using transforms. I've yet to decide whether this needs to be done, or whether a separate operator will suffice. - What happens to the range of Actions used when the strips change sizes unexpectedly (i.e. the no-overlap condition above)? Currently range stays the same, but this doesn't always seem desirable? --- source/blender/editors/space_nla/nla_ops.c | 4 +- source/blender/editors/transform/transform.c | 3 + source/blender/editors/transform/transform.h | 7 + .../editors/transform/transform_conversions.c | 195 ++++++++++++++---- .../editors/transform/transform_generics.c | 100 ++++----- .../blender/editors/transform/transform_ops.c | 13 ++ source/blender/makesrna/intern/rna_nla.c | 26 ++- 7 files changed, 251 insertions(+), 97 deletions(-) diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index f59cbd9c1d4..6505b1deea3 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -54,6 +54,8 @@ #include "ED_space_api.h" #include "ED_screen.h" +#include "BIF_transform.h" + #include "WM_api.h" #include "WM_types.h" @@ -191,7 +193,7 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); /* transform system */ - //transform_keymap_for_space(wm, keymap, SPACE_NLA); + transform_keymap_for_space(wm, keymap, SPACE_NLA); } /* --------------- */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 674de81a9f5..fa93d2a143d 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -319,6 +319,9 @@ static void viewRedrawForce(bContext *C, TransInfo *t) else ED_area_tag_redraw(t->sa); } + else if (t->spacetype == SPACE_NLA) { + ED_area_tag_redraw(t->sa); // XXX this should use a notifier instead! + } else if(t->spacetype == SPACE_NODE) { //ED_area_tag_redraw(t->sa); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index ee767fada58..c0a57a85033 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -161,6 +161,13 @@ typedef struct TransDataSeq { } TransDataSeq; +/* for NLA transform (stored in td->extra pointer) */ +typedef struct TransDataNla { + struct NlaStrip *strip; /* NLA-strip that handle belongs to */ + float val; /* value for the handle that the transform tools write to */ + int handle; /* handle-index, 0 for start, 1 for end */ +} TransDataNla; + typedef struct TransData { float dist; /* Distance needed to affect element (for Proportionnal Editing) */ float rdist; /* Distance to the nearest element (for Proportionnal Editing) */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 6c7aa1ee49d..96f62f1e18e 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2559,7 +2559,140 @@ int clipUVTransform(TransInfo *t, float *vec, int resize) return (clipx || clipy); } -/* ********************* ACTION/NLA EDITOR ****************** */ +/* ********************* ANIMATION EDITORS (GENERAL) ************************* */ + +/* This function tests if a point is on the "mouse" side of the cursor/frame-marking */ +static short FrameOnMouseSide(char side, float frame, float cframe) +{ + /* both sides, so it doesn't matter */ + if (side == 'B') return 1; + + /* only on the named side */ + if (side == 'R') + return (frame >= cframe) ? 1 : 0; + else + return (frame <= cframe) ? 1 : 0; +} + +/* ********************* NLA EDITOR ************************* */ + +static void createTransNlaData(bContext *C, TransInfo *t) +{ + Scene *scene= CTX_data_scene(C); + TransData *td = NULL; + TransDataNla *tdn = NULL; + + bAnimContext ac; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + int count=0; + char side; + + /* determine what type of data we are operating on */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return; + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* which side of the current frame should be allowed */ + if (t->mode == TFM_TIME_EXTEND) { + /* only side on which mouse is gets transformed */ + float xmouse, ymouse; + + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); + side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side + } + else { + /* normal transform - both sides of current frame are considered */ + side = 'B'; + } + + /* loop 1: count how many strips are selected (consider each strip as 2 points) */ + for (ale= anim_data.first; ale; ale= ale->next) { + /* only if a real NLA-track */ + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* only consider selected strips */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + // TODO: we can make strips have handles later on... + if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) count++; + if (FrameOnMouseSide(side, strip->end, (float)CFRA)) count++; + } + } + } + } + + /* stop if trying to build list if nothing selected */ + if (count == 0) { + /* cleanup temp list */ + BLI_freelistN(&anim_data); + return; + } + + /* allocate memory for data */ + 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; + + /* loop 2: build transdata array */ + for (ale= anim_data.first; ale; ale= ale->next) { + /* only if a real NLA-track */ + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* only consider selected strips */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + // TODO: we can make strips have handles later on... + if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) + { + /* init the 'extra' data for NLA strip handles first */ + tdn->strip= strip; + tdn->val= strip->start; + tdn->handle= 0; + + /* now, link the transform data up to this data */ + td->val= &tdn->val; + td->ival= tdn->val; + td->extra= tdn; + td++; + tdn++; + } + if (FrameOnMouseSide(side, strip->end, (float)CFRA)) + { + /* init the 'extra' data for NLA strip handles first */ + tdn->strip= strip; + tdn->val= strip->end; + tdn->handle= 1; + + /* now, link the transform data up to this data */ + td->val= &tdn->val; + td->ival= tdn->val; + td->extra= tdn; + td++; + tdn++; + } + } + } + } + } + + /* cleanup temp list */ + BLI_freelistN(&anim_data); +} + +/* ********************* ACTION EDITOR ****************** */ /* 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). @@ -2744,19 +2877,6 @@ static void posttrans_action_clean (bAnimContext *ac, bAction *act) /* ----------------------------- */ -/* This function tests if a point is on the "mouse" side of the cursor/frame-marking */ -static short FrameOnMouseSide(char side, float frame, float cframe) -{ - /* both sides, so it doesn't matter */ - if (side == 'B') return 1; - - /* only on the named side */ - if (side == 'R') - return (frame >= cframe) ? 1 : 0; - else - return (frame <= cframe) ? 1 : 0; -} - /* fully select selected beztriples, but only include if it's on the right side of cfra */ static int count_fcurve_keys(FCurve *fcu, char side, float cfra) { @@ -3044,8 +3164,6 @@ static void createTransActionData(bContext *C, TransInfo *t) /* ********************* GRAPH EDITOR ************************* */ - - /* Helper function for createTransGraphEditData, which is reponsible for associating * source data with transform data */ @@ -3502,7 +3620,6 @@ void flushTransGraphData(TransInfo *t) } } - /* **************** IpoKey stuff, for Object TransData ********** */ /* while transforming */ @@ -4604,6 +4721,29 @@ void special_aftertrans_update(TransInfo *t) /* make sure all F-Curves are set correctly */ ANIM_editkeyframes_refresh(&ac); } + else if (t->spacetype == SPACE_NLA) { + SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; + Scene *scene; + bAnimContext ac; + + /* initialise relevant anim-context 'context' data from TransInfo data */ + /* NOTE: sync this with the code in ANIM_animdata_get_context() */ + memset(&ac, 0, sizeof(bAnimContext)); + + scene= ac.scene= t->scene; + ob= ac.obact= OBACT; + ac.sa= t->sa; + ac.ar= t->ar; + ac.spacetype= (t->sa)? t->sa->spacetype : 0; + ac.regiontype= (t->ar)? t->ar->regiontype : 0; + + if (ANIM_animdata_context_getdata(&ac) == 0) + return; + + // XXX check on the calls below... we need some of these sanity checks + //synchronize_action_strips(); + //ANIM_editkeyframes_refresh(&ac); + } else if (t->obedit) { // TRANSFORM_FIX_ME // if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE) @@ -4682,24 +4822,6 @@ void special_aftertrans_update(TransInfo *t) } } -#if 0 // TRANSFORM_FIX_ME - else if (t->spacetype == SPACE_NLA) { - recalc_all_ipos(); // bad - synchronize_action_strips(); - - /* cleanup */ - for (base=t->scene->base.first; base; base=base->next) - base->flag &= ~(BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA); - - /* after transform, remove duplicate keyframes on a frame that resulted from transform */ - if ( (G.snla->flag & SNLA_NOTRANSKEYCULL)==0 && - ((cancelled == 0) || (duplicate)) ) - { - posttrans_nla_clean(t); - } - } -#endif - clear_trans_object_base_flags(t); #if 0 // TRANSFORM_FIX_ME @@ -4932,8 +5054,7 @@ void createTransData(bContext *C, TransInfo *t) } else if (t->spacetype == SPACE_NLA) { t->flag |= T_POINTS|T_2D_EDIT; - // TRANSFORM_FIX_ME - //createTransNlaData(C, t); + createTransNlaData(C, t); } else if (t->spacetype == SPACE_SEQ) { t->flag |= T_POINTS|T_2D_EDIT; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 171665c9282..4c9592fb27a 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -102,6 +102,8 @@ #include "BLI_editVert.h" #include "BLI_rand.h" +#include "RNA_access.h" + #include "WM_types.h" #include "UI_resources.h" @@ -299,61 +301,6 @@ void recalcData(TransInfo *t) DAG_object_flush_update(G.scene, OBACT, OB_RECALC_OB|OB_RECALC_DATA); } } - } - else if (t->spacetype == SPACE_NLA) { - if (G.snla->lock) { - for (base=G.scene->base.first; base; base=base->next) { - if (base->flag & BA_HAS_RECALC_OB) - base->object->recalc |= OB_RECALC_OB; - if (base->flag & BA_HAS_RECALC_DATA) - base->object->recalc |= OB_RECALC_DATA; - - if (base->object->recalc) - base->object->ctime= -1234567.0f; // eveil! - - /* recalculate scale of selected nla-strips */ - if (base->object->nlastrips.first) { - Object *bob= base->object; - bActionStrip *strip; - - for (strip= bob->nlastrips.first; strip; strip= strip->next) { - if (strip->flag & ACTSTRIP_SELECT) { - float actlen= strip->actend - strip->actstart; - float len= strip->end - strip->start; - - strip->scale= len / (actlen * strip->repeat); - } - } - } - } - - DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0); - } - else { - for (base=G.scene->base.first; base; base=base->next) { - /* recalculate scale of selected nla-strips */ - if (base->object && base->object->nlastrips.first) { - Object *bob= base->object; - bActionStrip *strip; - - for (strip= bob->nlastrips.first; strip; strip= strip->next) { - if (strip->flag & ACTSTRIP_SELECT) { - float actlen= strip->actend - strip->actstart; - float len= strip->end - strip->start; - - /* prevent 'negative' scaling */ - if (len < 0) { - SWAP(float, strip->start, strip->end); - len= fabs(len); - } - - /* calculate new scale */ - strip->scale= len / (actlen * strip->repeat); - } - } - } - } - } } #endif if (t->obedit) { @@ -422,6 +369,47 @@ void recalcData(TransInfo *t) } } + else if (t->spacetype == SPACE_NLA) { + TransData *td= t->data; + int i; + + /* for each point we've captured, look at its 'extra' data, which is basically a wrapper around the strip + * it is for + some extra storage for the values that get set, and use RNA to set this value (performing validation + * work so that we don't need to repeat it here) + */ + for (i = 0; i < t->total; i++, td++) + { + if (td->extra) + { + TransDataNla *tdn= td->extra; + NlaStrip *strip= tdn->strip; + + /* if we're just cancelling (i.e. the user aborted the transform), + * just restore the data by directly overwriting the values with the original + * ones (i.e. don't go through RNA), as we get some artifacts... + */ + if (t->state == TRANS_CANCEL) { + /* write the value set by the transform tools to the appropriate property using RNA */ + if (tdn->handle) + strip->end= tdn->val; + else + strip->start= tdn->val; + } + else { + PointerRNA strip_ptr; + + /* make RNA-pointer */ + RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); + + /* write the value set by the transform tools to the appropriate property using RNA */ + if (tdn->handle) + RNA_float_set(&strip_ptr, "end_frame", tdn->val); + else + RNA_float_set(&strip_ptr, "start_frame", tdn->val); + } + } + } + } else if (t->obedit) { if ELEM(t->obedit->type, OB_CURVE, OB_SURF) { Curve *cu= t->obedit->data; @@ -866,7 +854,7 @@ void postTrans (TransInfo *t) if(sima->flag & SI_LIVE_UNWRAP) ED_uvedit_live_unwrap_end(t->state == TRANS_CANCEL); } - else if(t->spacetype==SPACE_ACTION) { + else if(ELEM(t->spacetype, SPACE_ACTION, SPACE_NLA)) { if (t->customData) MEM_freeN(t->customData); } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 769001b30a8..f7ddd18452e 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -607,6 +607,19 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); break; + case SPACE_NLA: + km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0); + RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); + + km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); + RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); + + km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); + RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); + + km= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0); + RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE); + break; case SPACE_NODE: km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 0a7d17adc09..b55b4e431fb 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -43,7 +43,18 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; - CLAMP(value, 1, data->end); + + /* clamp value to lie within valid limits + * - cannot start past the end of the strip + some flexibility threshold + * - cannot start before the previous strip (if present) ends + * - minimum frame is 1.0f (this can be changed) + */ + if (data->prev) { + CLAMP(value, data->prev->end, data->end-0.1f); + } + else { + CLAMP(value, 1, data->end); + } data->start= value; } @@ -52,8 +63,17 @@ static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value) NlaStrip *data= (NlaStrip*)ptr->data; float len, actlen; - /* clamp value to lie within valid limits - must not have zero or negative length strip */ - CLAMP(value, data->start+0.1f, MAXFRAME); + /* clamp value to lie within valid limits + * - must not have zero or negative length strip, so cannot start before the first frame + * + some minimum-strip-length threshold + * - cannot end later than the start of the next strip (if present) + */ + if (data->next) { + CLAMP(value, data->start+0.1f, data->next->start); + } + else { + CLAMP(value, data->start+0.1f, MAXFRAME); + } data->end= value; /* calculate the lengths the strip and its action (if applicable) */ From ca5ff43b1f3efa555b1e52d190c5a97332e01e85 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 9 Jun 2009 12:28:10 +0000 Subject: [PATCH 030/512] NLA SoC: Improved anim-channel filtering flags for NLA so that channels don't need to be checked to be NLA-Tracks before being used. --- .../blender/editors/animation/anim_filter.c | 16 ++++++------- source/blender/editors/include/ED_anim_api.h | 3 ++- source/blender/editors/space_nla/nla_select.c | 4 ++-- .../editors/transform/transform_conversions.c | 23 ++++++++----------- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index cdda13d999d..6cb24a01711 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -1050,7 +1050,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B int items = 0; /* add this object as a channel first */ - if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) { + if ((filter_mode & (ANIMFILTER_CURVESONLY|ANIMFILTER_NLATRACKS)) == 0) { /* check if filtering by selection */ if ANIMCHANNEL_SELOK((base->flag & SELECT)) { ale= make_new_animlistelem(base, ANIMTYPE_OBJECT, NULL, ANIMTYPE_NONE, NULL); @@ -1062,7 +1062,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B } /* if collapsed, don't go any further (unless adding keyframes only) */ - if ( (EXPANDED_OBJC(ob) == 0) && !(filter_mode & ANIMFILTER_CURVESONLY) ) + if ( (EXPANDED_OBJC(ob) == 0) && !(filter_mode & (ANIMFILTER_CURVESONLY|ANIMFILTER_NLATRACKS)) ) return items; /* Action, Drivers, or NLA */ @@ -1073,7 +1073,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B { /* nla */ #if 0 /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); if (ale) { BLI_addtail(anim_data, ale); @@ -1129,7 +1129,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B { /* nla */ #if 0 /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); if (ale) { BLI_addtail(anim_data, ale); @@ -1235,7 +1235,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads int items = 0; /* add scene as a channel first (even if we aren't showing scenes we still need to show the scene's sub-data */ - if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) { + if ((filter_mode & (ANIMFILTER_CURVESONLY|ANIMFILTER_NLATRACKS)) == 0) { /* check if filtering by selection */ if (ANIMCHANNEL_SELOK( (sce->flag & SCE_DS_SELECTED) )) { ale= make_new_animlistelem(sce, ANIMTYPE_SCENE, NULL, ANIMTYPE_NONE, NULL); @@ -1247,7 +1247,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads } /* if collapsed, don't go any further (unless adding keyframes only) */ - if ( (EXPANDED_SCEC(sce) == 0) && !(filter_mode & ANIMFILTER_CURVESONLY) ) + if ( (EXPANDED_SCEC(sce) == 0) && !(filter_mode & (ANIMFILTER_CURVESONLY|ANIMFILTER_NLATRACKS)) ) return items; /* Action, Drivers, or NLA for Scene */ @@ -1258,7 +1258,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads { /* nla */ #if 0 /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_SCENE (ID *)sce); if (ale) { BLI_addtail(anim_data, ale); @@ -1312,7 +1312,7 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads { /* nla */ #if 0 /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_DSWOR (ID *)wo); if (ale) { BLI_addtail(anim_data, ale); diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index dcaabb4b369..e44c7ff5603 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -162,8 +162,9 @@ typedef enum eAnimFilter_Flags { ANIMFILTER_CHANNELS = (1<<5), /* make list for interface drawing */ ANIMFILTER_ACTGROUPED = (1<<6), /* belongs to the active actiongroup */ ANIMFILTER_CURVEVISIBLE = (1<<7), /* F-Curve is visible for editing/viewing in Graph Editor */ - ANIMFILTER_ACTIVE = (1<<8), /* channel should be 'active' */ // FIXME: this is only relevant for F-Curves for now + ANIMFILTER_ACTIVE = (1<<8), /* channel should be 'active' */ ANIMFILTER_ANIMDATA = (1<<9), /* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */ + ANIMFILTER_NLATRACKS = (1<<10), /* only include NLA-tracks */ } eAnimFilter_Flags; diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 463479c0909..730814dc562 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -120,8 +120,8 @@ static void deselect_nla_strips (bAnimContext *ac, short test, short sel) int filter; short smode; - /* determine type-based settings - curvesonly eliminates all the unnecessary channels... */ - filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CURVESONLY); + /* determine type-based settings */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS); /* filter data */ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 96f62f1e18e..fb7d9c57eaf 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2595,7 +2595,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) return; /* filter data */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* which side of the current frame should be allowed */ @@ -2613,18 +2613,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) { - /* only if a real NLA-track */ - if (ale->type == ANIMTYPE_NLATRACK) { - NlaTrack *nlt= (NlaTrack *)ale->data; - NlaStrip *strip; - - /* only consider selected strips */ - for (strip= nlt->strips.first; strip; strip= strip->next) { - // TODO: we can make strips have handles later on... - if (strip->flag & NLASTRIP_FLAG_SELECT) { - if (FrameOnMouseSide(side, strip->start, (float)CFRA)) count++; - if (FrameOnMouseSide(side, strip->end, (float)CFRA)) count++; - } + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* only consider selected strips */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + // TODO: we can make strips have handles later on... + if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) count++; + if (FrameOnMouseSide(side, strip->end, (float)CFRA)) count++; } } } From abdb8fd94d90a1b9fb262c94dac1ccb52cfee36f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 9 Jun 2009 12:28:49 +0000 Subject: [PATCH 031/512] NLA SoC: Added simple delete-strips operator (XKEY/DELKEY) --- source/blender/editors/space_nla/nla_edit.c | 63 ++++++++++++++++++- source/blender/editors/space_nla/nla_intern.h | 5 ++ source/blender/editors/space_nla/nla_ops.c | 6 ++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 49d43f29c5f..ce62d36e667 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -68,7 +68,7 @@ #include "nla_intern.h" // own include /* *********************************************** */ -/* General Editing */ +/* 'Special' Editing */ /* ******************** Tweak-Mode Operators ***************************** */ /* 'Tweak mode' allows the action referenced by the active NLA-strip to be edited @@ -211,5 +211,66 @@ void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) } /* *********************************************** */ +/* NLA Editing Operations */ + +/* ******************** Delete Operator ***************************** */ +/* Deletes the selected NLA-Strips */ + +static int nlaedit_delete_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each NLA-Track, delete all selected strips */ + // FIXME: need to double-check that we've got tracks + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip, *nstrip; + + for (strip= nlt->strips.first; strip; strip= nstrip) { + nstrip= strip->next; + + /* if selected, delete */ + if (strip->flag & NLASTRIP_FLAG_SELECT) + free_nlastrip(&nlt->strips, strip); + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_delete (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete Strips"; + ot->idname= "NLAEDIT_OT_delete"; + ot->description= "Delete selected strips."; + + /* api callbacks */ + ot->exec= nlaedit_delete_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} /* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 00de0498e4b..abbb7331e28 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -89,6 +89,11 @@ void NLAEDIT_OT_click_select(wmOperatorType *ot); void NLAEDIT_OT_tweakmode_enter(wmOperatorType *ot); void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); +/* --- */ + +void NLAEDIT_OT_delete(wmOperatorType *ot); + + /* **************************************** */ /* nla_channels.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 6505b1deea3..3eb32d147f5 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -131,6 +131,8 @@ void nla_operatortypes(void) /* edit */ WM_operatortype_append(NLAEDIT_OT_tweakmode_enter); WM_operatortype_append(NLAEDIT_OT_tweakmode_exit); + + WM_operatortype_append(NLAEDIT_OT_delete); } /* ************************** registration - keymaps **********************************/ @@ -191,6 +193,10 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) */ WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_enter", TABKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); + + /* delete */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", DELKEY, KM_PRESS, 0, 0); /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_NLA); From 2f8290434ca1e36c8a60ebc405a3edaacd41e9a9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 10 Jun 2009 04:43:18 +0000 Subject: [PATCH 032/512] NLA SoC: Added BorderSelect operators (BKEY and Alt-BKEY) These work in the same way as the ones in the Action Editor... --- .../blender/editors/space_nla/nla_channels.c | 4 +- source/blender/editors/space_nla/nla_intern.h | 1 + source/blender/editors/space_nla/nla_ops.c | 6 + source/blender/editors/space_nla/nla_select.c | 145 ++++++++++++++++++ 4 files changed, 154 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index ed401c3596b..b40b1bf0f4d 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -179,7 +179,7 @@ void NLA_OT_channels_select_border(wmOperatorType *ot) ot->exec= nlachannels_borderselect_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= nlaop_poll_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -449,7 +449,7 @@ void NLA_OT_channels_click (wmOperatorType *ot) /* api callbacks */ ot->invoke= nlachannels_mouseclick_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= nlaop_poll_tweakmode_off; // xxx? /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index abbb7331e28..94e907a59db 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -81,6 +81,7 @@ enum { /* --- */ void NLAEDIT_OT_select_all_toggle(wmOperatorType *ot); +void NLAEDIT_OT_select_border(wmOperatorType *ot); void NLAEDIT_OT_click_select(wmOperatorType *ot); /* **************************************** */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 3eb32d147f5..61654338fea 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -126,6 +126,7 @@ void nla_operatortypes(void) /* select */ WM_operatortype_append(NLAEDIT_OT_click_select); + WM_operatortype_append(NLAEDIT_OT_select_border); WM_operatortype_append(NLAEDIT_OT_select_all_toggle); /* edit */ @@ -186,6 +187,11 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + /* borderselect */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_select_border", BKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); + + /* editing */ /* tweakmode * - enter and exit are separate operators with the same hotkey... diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 730814dc562..25a876d44f4 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -208,6 +208,151 @@ void NLAEDIT_OT_select_all_toggle (wmOperatorType *ot) RNA_def_boolean(ot->srna, "invert", 0, "Invert", ""); } +/* ******************** Border Select Operator **************************** */ +/* This operator currently works in one of three ways: + * -> BKEY - 1) all strips within region are selected (ACTKEYS_BORDERSEL_ALLSTRIPS) + * -> ALT-BKEY - depending on which axis of the region was larger... + * -> 2) x-axis, so select all frames within frame range (ACTKEYS_BORDERSEL_FRAMERANGE) + * -> 3) y-axis, so select all frames within channels that region included (ACTKEYS_BORDERSEL_CHANNELS) + */ + +/* defines for borderselect mode */ +enum { + NLA_BORDERSEL_ALLSTRIPS = 0, + NLA_BORDERSEL_FRAMERANGE, + NLA_BORDERSEL_CHANNELS, +} eActKeys_BorderSelect_Mode; + + +static void borderselect_nla_strips (bAnimContext *ac, rcti rect, short mode, short selectmode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + View2D *v2d= &ac->ar->v2d; + rctf rectf; + float ymin=(float)(-NLACHANNEL_HEIGHT), ymax=0; + + /* convert border-region to view coordinates */ + UI_view2d_region_to_view(v2d, rect.xmin, rect.ymin+2, &rectf.xmin, &rectf.ymin); + UI_view2d_region_to_view(v2d, rect.xmax, rect.ymax-2, &rectf.xmax, &rectf.ymax); + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* convert selection modes to selection modes */ + selectmode= selmodes_to_flagmodes(selectmode); + + /* loop over data, doing border select */ + for (ale= anim_data.first; ale; ale= ale->next) { + ymax= ymin + NLACHANNEL_STEP; + + /* perform vertical suitability check (if applicable) */ + if ( (mode == NLA_BORDERSEL_FRAMERANGE) || + !((ymax < rectf.ymin) || (ymin > rectf.ymax)) ) + { + /* loop over data selecting (only if NLA-Track) */ + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* only select strips if they fall within the required ranges (if applicable) */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if ( (mode == NLA_BORDERSEL_CHANNELS) || + BKE_nlastrip_within_bounds(strip, rectf.xmin, rectf.xmax) ) + { + /* set selection */ + ACHANNEL_SET_FLAG(strip, selectmode, NLASTRIP_FLAG_SELECT); + + /* clear active flag */ + strip->flag &= ~NLASTRIP_FLAG_ACTIVE; + } + } + } + } + + /* set maximum extent to be the minimum of the next channel */ + ymin= ymax; + } + + /* cleanup */ + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + rcti rect; + short mode=0, selectmode=0; + int event; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get settings 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"); + + event= RNA_int_get(op->ptr, "event_type"); + if (event == LEFTMOUSE) // FIXME... hardcoded + selectmode = SELECT_ADD; + else + selectmode = SELECT_SUBTRACT; + + /* selection 'mode' depends on whether borderselect region only matters on one axis */ + if (RNA_boolean_get(op->ptr, "axis_range")) { + /* mode depends on which axis of the range is larger to determine which axis to use + * - checking this in region-space is fine, as it's fundamentally still going to be a different rect size + * - the frame-range select option is favoured over the channel one (x over y), as frame-range one is often + * used for tweaking timing when "blocking", while channels is not that useful... + */ + if ((rect.xmax - rect.xmin) >= (rect.ymax - rect.ymin)) + mode= NLA_BORDERSEL_FRAMERANGE; + else + mode= NLA_BORDERSEL_CHANNELS; + } + else + mode= NLA_BORDERSEL_ALLSTRIPS; + + /* apply borderselect action */ + borderselect_nla_strips(&ac, rect, mode, selectmode); + + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_select_border(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Border Select"; + ot->idname= "NLAEDIT_OT_select_border"; + + /* api callbacks */ + ot->invoke= WM_border_select_invoke; + ot->exec= nlaedit_borderselect_exec; + ot->modal= WM_border_select_modal; + + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* rna */ + RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); + + RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); +} + /* ******************** Mouse-Click Select Operator *********************** */ /* This operator works in one of 2 ways: * 1) Select the strip directly under the mouse From 867e1291350de7c128c18c9f9a2e7c4b7a5513f4 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 10 Jun 2009 05:03:27 +0000 Subject: [PATCH 033/512] F-Modifiers (in Nla branch): For fun, added 'sinc' (i.e. y = sin(pi*x)/(pi*x)) as a type of builtin function usable through the generator modifier. This makes a nice 'jolt' which tapers off. --- source/blender/blenkernel/intern/fcurve.c | 17 ++++++++++++++++- .../blender/editors/space_graph/graph_buttons.c | 5 ++++- source/blender/makesdna/DNA_anim_types.h | 1 + source/blender/makesrna/intern/rna_fcurve.c | 1 + 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 6a3870f8f31..5820761234c 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1410,6 +1410,18 @@ static void fcm_generator_verify (FModifier *fcm) } } +/* Unary 'normalised sine' function + * y = sin(PI + x) / (PI * x), + * except for x = 0 when y = 1. + */ +static double sinc (double x) +{ + if (fabs(x) < 0.0001) + return 1.0; + else + return sin(M_PI * x) / (M_PI * x); +} + static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) { FMod_Generator *data= (FMod_Generator *)fcm->data; @@ -1490,6 +1502,9 @@ static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, case FCM_GENERATOR_FN_COS: /* cosine wave */ fn= cos; break; + case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ + fn= sinc; + break; /* validation required */ case FCM_GENERATOR_FN_TAN: /* tangent wave */ @@ -1527,7 +1542,7 @@ static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, } } break; - + default: printf("Invalid Function-Generator for F-Modifier - %d \n", data->func_type); } diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index a4babaad74c..5b00205b5d0 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -405,7 +405,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm { FMod_Generator *data= (FMod_Generator *)fcm->data; char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1|Built-In Function%x2|Expression%x3"; - char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4"; + char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; int cy= *yco - 30; uiBut *but; @@ -555,6 +555,9 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm case FCM_GENERATOR_FN_SQRT: /* square root */ sprintf(func_name, "sqrt("); break; + case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ + sprintf(func_name, "sinc("); + break; default: /* unknown */ sprintf(func_name, "("); break; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index c19318629f6..a784adaf35f 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -108,6 +108,7 @@ enum { FCM_GENERATOR_FN_TAN, FCM_GENERATOR_FN_SQRT, FCM_GENERATOR_FN_LN, + FCM_GENERATOR_FN_SINC, } eFMod_Generator_Functions; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index ea26118f267..69103536310 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -284,6 +284,7 @@ static void rna_def_fmodifier_generator_function(BlenderRNA *brna) {2, "TAN", "Tangent", ""}, {3, "SQRT", "Square Root", ""}, {4, "LN", "Natural Logarithm", ""}, + {5, "SINC", "Normalised Sine", "sin(x) / x"}, {0, NULL, NULL, NULL}}; From 64f94a670ea9a5704276f1e80f61afdcb067a2b6 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 11 Jun 2009 02:14:56 +0000 Subject: [PATCH 034/512] NLA SoC: Evaluation bugfixes * Strip scaling was being evaluated in the wrong way, resulting in scaled strips not being played too fast (for lengthened strips) or too slow (shortened strips) * Also, verified that the 'reversed' option works correctly (no changes needed to be made here) --- source/blender/blenkernel/intern/anim_sys.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 3290e06dfb4..a864e3d4e87 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -591,23 +591,23 @@ static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) float length, actlength, repeat, scale; /* get number of repeats */ - if (strip->repeat == 0.0f) strip->repeat = 1.0f; + if (IS_EQ(strip->repeat, 0.0f)) strip->repeat = 1.0f; repeat = strip->repeat; /* scaling */ - if (strip->scale == 0.0f) strip->scale= 1.0f; + if (IS_EQ(strip->scale, 0.0f)) strip->scale= 1.0f; scale = (float)fabs(strip->scale); /* scale must be positive - we've got a special flag for reversing */ /* length of referenced action */ actlength = strip->actend - strip->actstart; - if (actlength == 0.0f) actlength = 1.0f; + if (IS_EQ(actlength, 0.0f)) actlength = 1.0f; /* length of strip */ - length = repeat * scale * actlength; + length = strip->end - strip->start; + if (IS_EQ(length, 0.0f)) length= actlength * scale * repeat; /* reversed = play strip backwards */ if (strip->flag & NLASTRIP_FLAG_REVERSE) { - // FIXME: verify these /* invert = convert action-strip time to global time */ if (invert) return length*(strip->actend - cframe)/(repeat*actlength) + strip->start; @@ -651,7 +651,7 @@ void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) { /* firstly, analytically generate values for influence and time (if applicable) */ if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0) - strip->strip_time= nlastrip_get_frame(strip, ctime, 1); /* last arg '1' means current time to 'strip'/action time */ + strip->strip_time= nlastrip_get_frame(strip, ctime, 0); if ((strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) == 0) strip->influence= nlastrip_get_influence(strip, ctime); From 4a29d0c1a36359c3e08a90beb80cd40857305c80 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 11 Jun 2009 02:18:29 +0000 Subject: [PATCH 035/512] NLA SoC: 'Split' Operator (YKEY) Selected NLA Strips are split into two strips, each with half the length of the original strip. Possible improvements subject to demand: - multiple splits? - splits with variable spacing? (i.e. 3:2, or 1:5). --- source/blender/editors/space_nla/nla_edit.c | 97 ++++++++++++++++++- source/blender/editors/space_nla/nla_intern.h | 1 + source/blender/editors/space_nla/nla_ops.c | 4 + 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index ce62d36e667..93ac726c17e 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -49,6 +49,7 @@ #include "BKE_context.h" #include "BKE_report.h" #include "BKE_screen.h" +#include "BKE_utildefines.h" #include "ED_anim_api.h" #include "ED_markers.h" @@ -213,7 +214,7 @@ void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) /* *********************************************** */ /* NLA Editing Operations */ -/* ******************** Delete Operator ***************************** */ +/* ******************** Delete Strips Operator ***************************** */ /* Deletes the selected NLA-Strips */ static int nlaedit_delete_exec (bContext *C, wmOperator *op) @@ -233,7 +234,6 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* for each NLA-Track, delete all selected strips */ - // FIXME: need to double-check that we've got tracks for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip, *nstrip; @@ -273,4 +273,97 @@ void NLAEDIT_OT_delete (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ******************** Split Strips Operator ***************************** */ +/* Splits the selected NLA-Strips into two strips at the midpoint of the strip */ +// TODO's? +// - multiple splits +// - variable-length splits? + +static int nlaedit_split_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each NLA-Track, delete all selected strips */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip, *nstrip, *next; + + for (strip= nlt->strips.first; strip; strip= next) { + next= strip->next; + + /* if selected, split the strip at its midpoint */ + if (strip->flag & NLASTRIP_FLAG_SELECT) { + float midframe, midaframe, len; + + /* calculate the frames to do the splitting at */ + /* strip extents */ + len= strip->end - strip->start; + if (IS_EQ(len, 0.0f)) + continue; + else + midframe= strip->start + (len / 2.0f); + + /* action range */ + len= strip->actend - strip->actstart; + if (IS_EQ(len, 0.0f)) + midaframe= strip->actend; + else + midaframe= strip->actstart + (len / 2.0f); + + /* make a copy (assume that this is possible) and append + * it immediately after the current strip + */ + nstrip= copy_nlastrip(strip); + BLI_insertlinkafter(&nlt->strips, strip, nstrip); + + /* set the endpoint of the first strip and the start of the new strip + * to the midframe values calculated above + */ + strip->end= midframe; + nstrip->start= midframe; + + strip->actend= midaframe; + nstrip->actstart= midaframe; + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_split (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Split Strips"; + ot->idname= "NLAEDIT_OT_split"; + ot->description= "Split selected strips at their midpoints."; + + /* api callbacks */ + ot->exec= nlaedit_split_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 94e907a59db..9511f67f824 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -93,6 +93,7 @@ void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); /* --- */ void NLAEDIT_OT_delete(wmOperatorType *ot); +void NLAEDIT_OT_split(wmOperatorType *ot); /* **************************************** */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 61654338fea..14c6f2a32d2 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -134,6 +134,7 @@ void nla_operatortypes(void) WM_operatortype_append(NLAEDIT_OT_tweakmode_exit); WM_operatortype_append(NLAEDIT_OT_delete); + WM_operatortype_append(NLAEDIT_OT_split); } /* ************************** registration - keymaps **********************************/ @@ -204,6 +205,9 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", DELKEY, KM_PRESS, 0, 0); + /* split */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_split", YKEY, KM_PRESS, 0, 0); + /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_NLA); } From f0f9034966be8692250686aee74048294960aad3 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 11 Jun 2009 03:19:08 +0000 Subject: [PATCH 036/512] NLA SoC: Operator for adding new NLA-Tracks New tracks can be added in the following ways (with the mouse hovering over the channels-list): * Shift-A - this will add a new track at the top of the stack (i.e. above all the existing NLA-tracks but below the Active Action) for every AnimData block where there was a selected NLA-Track * Ctrl-Shift-A - this will add a new track above every selected one --- source/blender/blenkernel/BKE_nla.h | 2 +- source/blender/blenkernel/intern/nla.c | 13 +++- .../blender/editors/space_nla/nla_channels.c | 73 +++++++++++++++++++ source/blender/editors/space_nla/nla_edit.c | 1 + source/blender/editors/space_nla/nla_intern.h | 2 + source/blender/editors/space_nla/nla_ops.c | 9 ++- 6 files changed, 94 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index da824fd2093..078c1ba52bb 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -46,7 +46,7 @@ struct NlaStrip *copy_nlastrip(struct NlaStrip *strip); struct NlaTrack *copy_nlatrack(struct NlaTrack *nlt); void copy_nladata(ListBase *dst, ListBase *src); -struct NlaTrack *add_nlatrack(struct AnimData *adt); +struct NlaTrack *add_nlatrack(struct AnimData *adt, struct NlaTrack *prev); struct NlaStrip *add_nlastrip(struct bAction *act); struct NlaStrip *add_nlastrip_to_stack(struct AnimData *adt, struct bAction *act); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 9acbad32a42..cef14128032 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -215,8 +215,10 @@ void copy_nladata (ListBase *dst, ListBase *src) /* Adding ------------------------------------------- */ -/* Add a NLA Track to the given AnimData */ -NlaTrack *add_nlatrack (AnimData *adt) +/* Add a NLA Track to the given AnimData + * - prev: NLA-Track to add the new one after + */ +NlaTrack *add_nlatrack (AnimData *adt, NlaTrack *prev) { NlaTrack *nlt; @@ -232,7 +234,10 @@ NlaTrack *add_nlatrack (AnimData *adt) nlt->index= BLI_countlist(&adt->nla_tracks); /* add track to stack, and make it the active one */ - BLI_addtail(&adt->nla_tracks, nlt); + if (prev) + BLI_insertlinkafter(&adt->nla_tracks, prev, nlt); + else + BLI_addtail(&adt->nla_tracks, nlt); BKE_nlatrack_set_active(&adt->nla_tracks, nlt); /* must have unique name, but we need to seed this */ @@ -308,7 +313,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) (BKE_nlatrack_has_space(adt->nla_tracks.last, strip->start, strip->end)==0) ) { /* no space, so add to a new track... */ - nlt= add_nlatrack(adt); + nlt= add_nlatrack(adt, NULL); } else { diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index b40b1bf0f4d..992c5bfa756 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -459,3 +459,76 @@ void NLA_OT_channels_click (wmOperatorType *ot) } /* *********************************************** */ +/* Special Operators */ + +/* ******************** Add Tracks Operator ***************************** */ +/* Add NLA Tracks to the same AnimData block as a selected track, or above the selected tracks */ + +static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + AnimData *lastAdt = NULL; + short above_sel= RNA_boolean_get(op->ptr, "above_selected"); + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_SEL); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* add tracks... */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + + /* check if just adding a new track above this one, + * or whether we're adding a new one to the top of the stack that this one belongs to + */ + if (above_sel) { + /* just add a new one above this one */ + add_nlatrack(adt, nlt); + } + else if ((lastAdt == NULL) || (adt != lastAdt)) { + /* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */ + add_nlatrack(adt, NULL); + lastAdt= adt; + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_add_tracks (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Track(s)"; + ot->idname= "NLA_OT_add_tracks"; + ot->description= "Add NLA-Tracks above/after the selected tracks."; + + /* api callbacks */ + ot->exec= nlaedit_add_tracks_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "above_selected", 0, "Above Selected", "Add a new NLA Track above every existing selected one."); +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 93ac726c17e..e8af67aebd1 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -28,6 +28,7 @@ #include #include +#include #include "DNA_anim_types.h" #include "DNA_action_types.h" diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 9511f67f824..b0a9ba5b182 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -102,6 +102,8 @@ void NLAEDIT_OT_split(wmOperatorType *ot); void NLA_OT_channels_select_border(wmOperatorType *ot); void NLA_OT_channels_click(wmOperatorType *ot); +void NLA_OT_add_tracks(wmOperatorType *ot); + /* **************************************** */ /* nla_ops.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 14c6f2a32d2..6cba19bb2cf 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -124,6 +124,8 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_channels_click); WM_operatortype_append(NLA_OT_channels_select_border); + WM_operatortype_append(NLA_OT_add_tracks); + /* select */ WM_operatortype_append(NLAEDIT_OT_click_select); WM_operatortype_append(NLAEDIT_OT_select_border); @@ -148,9 +150,14 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); - /* borderselect */ + /* borderselect */ WM_keymap_add_item(keymap, "NLA_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); + /* channel operations */ + /* add tracks */ + WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "above_selected", 1); + /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ /* deselect all */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0); From 0bef8012bc71b1a1d3fae4f5ef82055045ef4752 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 11 Jun 2009 05:02:46 +0000 Subject: [PATCH 037/512] NLA SoC: Channel ordering change In response to user-feedback, I've changed the order in which channels appear. Now, the channel ordering is: - Object/AnimData block -- Active Action -- Last NLA Track .. .. -- First NLA Track It is important to note several things still: 1) Active action is applied AFTER the NLA Tracks have been evaluated, not before 2) In this new order, the tracks+active action are shown in the evaluation-stack order, i.e. first thing applied is at the bottom, last is at the top. As a result, I've switched the view-orientation back so that it works the same way as for DopeSheet/Graph editors (i.e. expands downwards not upwards). This may cause problems loading files saved with older builds of this branch. There are still some lingering problems due to this change which I'll fix in due course. --- .../blender/editors/animation/anim_channels.c | 8 ++ .../blender/editors/animation/anim_filter.c | 72 +++++++---- .../blender/editors/space_nla/nla_buttons.c | 2 +- .../blender/editors/space_nla/nla_channels.c | 112 +----------------- source/blender/editors/space_nla/nla_draw.c | 46 ++++--- source/blender/editors/space_nla/nla_intern.h | 1 - source/blender/editors/space_nla/nla_ops.c | 8 +- source/blender/editors/space_nla/nla_select.c | 8 +- source/blender/editors/space_nla/space_nla.c | 61 +++++----- 9 files changed, 116 insertions(+), 202 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 59fb56f3c35..2944c9519b9 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -1216,6 +1216,14 @@ static void borderselect_anim_channels (bAnimContext *ac, rcti *rect, short sele ACHANNEL_SET_FLAG(gpl, selectmode, GP_LAYER_SELECT); } break; + + case ANIMTYPE_NLATRACK: /* nla-track */ + { + NlaTrack *nlt= (NlaTrack *)ale->data; + + ACHANNEL_SET_FLAG(nlt, selectmode, NLATRACK_SELECTED); + } + break; } } diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 6cb24a01711..b47211f35d1 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -717,36 +717,21 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter return items; } +/* Include NLA-Data for NLA-Editor: + * - when ANIMFILTER_CHANNELS is used, that means we should be filtering the list for display + * Although the evaluation order is from the first track to the last and then apply the Action on top, + * we present this in the UI as the Active Action followed by the last track to the first so that we + * get the evaluation order presented as per a stack. + * - for normal filtering (i.e. for editing), we only need the NLA-tracks but they can be in 'normal' evaluation + * order, i.e. first to last. Otherwise, some tools may get screwed up. + */ static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_mode, void *owner, short ownertype, ID *owner_id) { bAnimListElem *ale; NlaTrack *nlt; + NlaTrack *first=NULL, *next=NULL; int items = 0; - /* loop over NLA Tracks - assume that the caller of this has already checked that these should be included */ - for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { - /* only work with this channel and its subchannels if it is editable */ - if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_NLT(nlt)) { - /* only include this track if selected in a way consistent with the filtering requirements */ - if ( ANIMCHANNEL_SELOK(SEL_NLT(nlt)) ) { - /* only include if this track is active */ - if (!(filter_mode & ANIMFILTER_ACTIVE) || (nlt->flag & NLATRACK_ACTIVE)) { - ale= make_new_animlistelem(nlt, ANIMTYPE_NLATRACK, owner, ownertype, owner_id); - - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } - - /* if we're in NLA-tweakmode, if this track was active, that means that it was the last active one */ - // FIXME: the channels after should still get drawn, just 'differently', and after an active-action channel - if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_ACTIVE)) - break; - } - } - } - /* if showing channels, include active action */ if (filter_mode & ANIMFILTER_CHANNELS) { /* there isn't really anything editable here, so skip if need editable */ @@ -764,6 +749,45 @@ static int animdata_filter_nla (ListBase *anim_data, AnimData *adt, int filter_m items++; } } + + /* first track to include will be the last one if we're filtering by channels */ + first= adt->nla_tracks.last; + } + else { + /* first track to include will the the first one (as per normal) */ + first= adt->nla_tracks.first; + } + + /* loop over NLA Tracks - assume that the caller of this has already checked that these should be included */ + for (nlt= first; nlt; nlt= next) { + /* 'next' NLA-Track to use depends on whether we're filtering for drawing or not */ + if (filter_mode & ANIMFILTER_CHANNELS) + next= nlt->prev; + else + next= nlt->next; + + /* if we're in NLA-tweakmode, don't show this track if it was disabled (due to tweaking) for now + * - active track should still get shown though (even though it has disabled flag set) + */ + // FIXME: the channels after should still get drawn, just 'differently', and after an active-action channel + if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_DISABLED) && !(nlt->flag & NLATRACK_ACTIVE)) + continue; + + /* only work with this channel and its subchannels if it is editable */ + if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_NLT(nlt)) { + /* only include this track if selected in a way consistent with the filtering requirements */ + if ( ANIMCHANNEL_SELOK(SEL_NLT(nlt)) ) { + /* only include if this track is active */ + if (!(filter_mode & ANIMFILTER_ACTIVE) || (nlt->flag & NLATRACK_ACTIVE)) { + ale= make_new_animlistelem(nlt, ANIMTYPE_NLATRACK, owner, ownertype, owner_id); + + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + } + } } /* return the number of items added to the list */ diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 80982d9feb5..cb21dd66934 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -141,7 +141,7 @@ static int nla_panel_context(const bContext *C, PointerRNA *nlt_ptr, PointerRNA /* free temp data */ BLI_freelistN(&anim_data); - return 1; + return found; } static int nla_panel_poll(const bContext *C, PanelType *pt) diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 992c5bfa756..f928daa523b 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -82,116 +82,6 @@ /* *********************************************** */ /* Operators for NLA channels-list which need to be different from the standard Animation Editor ones */ -/* ******************** Borderselect Operator *********************** */ - -static void borderselect_nla_channels (bAnimContext *ac, rcti *rect, short selectmode) -{ - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - - View2D *v2d= &ac->ar->v2d; - rctf rectf; - float ymin=(float)(-NLACHANNEL_HEIGHT), ymax=0; - - /* convert border-region to view coordinates */ - UI_view2d_region_to_view(v2d, rect->xmin, rect->ymin+2, &rectf.xmin, &rectf.ymin); - UI_view2d_region_to_view(v2d, rect->xmax, rect->ymax-2, &rectf.xmax, &rectf.ymax); - - /* filter data */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); - - /* loop over data, doing border select */ - for (ale= anim_data.first; ale; ale= ale->next) { - ymax= ymin + NLACHANNEL_STEP; - - /* if channel is within border-select region, alter it */ - if (!((ymax < rectf.ymin) || (ymin > rectf.ymax))) { - /* only the following types can be selected */ - switch (ale->type) { - case ANIMTYPE_OBJECT: /* object */ - { - Base *base= (Base *)ale->data; - Object *ob= base->object; - - ACHANNEL_SET_FLAG(base, selectmode, SELECT); - ACHANNEL_SET_FLAG(ob, selectmode, SELECT); - } - break; - case ANIMTYPE_NLATRACK: /* nla-track */ - { - NlaTrack *nlt= (NlaTrack *)ale->data; - - ACHANNEL_SET_FLAG(nlt, selectmode, NLATRACK_SELECTED); - } - break; - } - } - - /* set maximum extent to be the minimum of the next channel */ - ymin= ymax; - } - - /* cleanup */ - BLI_freelistN(&anim_data); -} - -/* ------------------- */ - -static int nlachannels_borderselect_exec(bContext *C, wmOperator *op) -{ - bAnimContext ac; - rcti rect; - short selectmode=0; - int event; - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* get settings 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"); - - event= RNA_int_get(op->ptr, "event_type"); - if (event == LEFTMOUSE) // FIXME... hardcoded - selectmode = ACHANNEL_SETFLAG_ADD; - else - selectmode = ACHANNEL_SETFLAG_CLEAR; - - /* apply borderselect animation channels */ - borderselect_nla_channels(&ac, &rect, selectmode); - - return OPERATOR_FINISHED; -} - -void NLA_OT_channels_select_border(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Border Select"; - ot->idname= "NLA_OT_channels_select_border"; - - /* api callbacks */ - ot->invoke= WM_border_select_invoke; - ot->exec= nlachannels_borderselect_exec; - ot->modal= WM_border_select_modal; - - ot->poll= nlaop_poll_tweakmode_off; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - /* rna */ - RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); -} - /* ******************** Mouse-Click Operator *********************** */ /* Depending on the channel that was clicked on, the mouse click will activate whichever * part of the channel is relevant. @@ -425,7 +315,7 @@ static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *e 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= NLACHANNEL_FIRST, we need to adjust by half a channel's height * so that the tops of channels get caught ok. Since NLACHANNEL_FIRST is really NLACHANNEL_HEIGHT, we simply use * NLACHANNEL_HEIGHT_HALF. */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 4fa27f4bc11..8d417a150aa 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -250,15 +250,13 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) * start of list offset, and the second is as a correction for the scrollers. */ height= ((items*NLACHANNEL_STEP) + (NLACHANNEL_HEIGHT*2)); - if (height > (v2d->mask.ymax - v2d->mask.ymin)) { - /* don't use totrect set, as the width stays the same - * (NOTE: this is ok here, the configuration is pretty straightforward) - */ - v2d->tot.ymax= (float)(height); - } + /* 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); /* loop through channels, and set up drawing depending on their type */ - y= (float)(-NLACHANNEL_FIRST); + y= (float)(-NLACHANNEL_HEIGHT); for (ale= anim_data.first; ale; ale= ale->next) { const float yminc= (float)(y - NLACHANNEL_HEIGHT_HALF); @@ -330,7 +328,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) } /* adjust y-position for next one */ - y += NLACHANNEL_STEP; + y -= NLACHANNEL_STEP; } /* free tempolary channels */ @@ -361,15 +359,13 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) * start of list offset, and the second is as a correction for the scrollers. */ height= ((items*NLACHANNEL_STEP) + (NLACHANNEL_HEIGHT*2)); - if (height > (v2d->mask.ymax - v2d->mask.ymin)) { - /* don't use totrect set, as the width stays the same - * (NOTE: this is ok here, the configuration is pretty straightforward) - */ - v2d->tot.ymax= (float)(height); - } + /* 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); /* loop through channels, and set up drawing depending on their type */ - y= (float)(-NLACHANNEL_FIRST); + y= (float)(-NLACHANNEL_HEIGHT); for (ale= anim_data.first; ale; ale= ale->next) { const float yminc= (float)(y - NLACHANNEL_HEIGHT_HALF); @@ -397,7 +393,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* only show expand if there are any channels */ if (EXPANDED_SCEC(sce)) - expand= ICON_TRIA_UP; + expand= ICON_TRIA_DOWN; else expand= ICON_TRIA_RIGHT; @@ -421,7 +417,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* only show expand if there are any channels */ if (EXPANDED_OBJC(ob)) - expand= ICON_TRIA_UP; + expand= ICON_TRIA_DOWN; else expand= ICON_TRIA_RIGHT; @@ -438,7 +434,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) special = ICON_MATERIAL_DATA; if (FILTER_MAT_OBJC(ob)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -457,7 +453,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) offset = 21; if (FILTER_MAT_OBJD(ma)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -473,7 +469,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) special = ICON_LAMP_DATA; if (FILTER_LAM_OBJD(la)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -489,7 +485,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) special = ICON_CAMERA_DATA; if (FILTER_CAM_OBJD(ca)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -505,7 +501,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) special = ICON_CURVE_DATA; if (FILTER_CUR_OBJD(cu)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -521,7 +517,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) special = ICON_SHAPEKEY_DATA; // XXX if (FILTER_SKE_OBJD(key)) - expand = ICON_TRIA_UP; + expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; @@ -629,7 +625,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) if (ELEM(ale->type, ANIMTYPE_SCENE, ANIMTYPE_OBJECT)) { /* object channel - darker */ UI_ThemeColor(TH_DOPESHEET_CHANNELOB); - uiSetRoundBox((expand == ICON_TRIA_UP)? (8):(1|8)); + uiSetRoundBox((expand == ICON_TRIA_DOWN)? (8):(1|8)); gl_round_box(GL_POLYGON, x+offset, yminc, (float)NLACHANNEL_NAMEWIDTH, ymaxc, 10); } else { @@ -763,7 +759,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) } /* adjust y-position for next one */ - y += NLACHANNEL_STEP; + y -= NLACHANNEL_STEP; } /* free tempolary channels */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index b0a9ba5b182..5c6670cfd6f 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -99,7 +99,6 @@ void NLAEDIT_OT_split(wmOperatorType *ot); /* **************************************** */ /* nla_channels.c */ -void NLA_OT_channels_select_border(wmOperatorType *ot); void NLA_OT_channels_click(wmOperatorType *ot); void NLA_OT_add_tracks(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 6cba19bb2cf..981ef9a4f87 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -122,7 +122,6 @@ void nla_operatortypes(void) /* channels */ WM_operatortype_append(NLA_OT_channels_click); - WM_operatortype_append(NLA_OT_channels_select_border); WM_operatortype_append(NLA_OT_add_tracks); @@ -150,15 +149,16 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); - /* borderselect */ - WM_keymap_add_item(keymap, "NLA_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); - /* channel operations */ /* add tracks */ WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "above_selected", 1); /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ + /* selection */ + /* borderselect */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); + /* deselect all */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 25a876d44f4..b850ec76f82 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -247,7 +247,7 @@ static void borderselect_nla_strips (bAnimContext *ac, rcti rect, short mode, sh /* loop over data, doing border select */ for (ale= anim_data.first; ale; ale= ale->next) { - ymax= ymin + NLACHANNEL_STEP; + ymin= ymax - NLACHANNEL_STEP; /* perform vertical suitability check (if applicable) */ if ( (mode == NLA_BORDERSEL_FRAMERANGE) || @@ -273,8 +273,8 @@ static void borderselect_nla_strips (bAnimContext *ac, rcti rect, short mode, sh } } - /* set maximum extent to be the minimum of the next channel */ - ymin= ymax; + /* set minimum extent to be the maximum of the next channel */ + ymax= ymin; } /* cleanup */ @@ -390,7 +390,7 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) /* use View2D to determine the index of the channel (i.e a row in the list) where keyframe was */ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y); - UI_view2d_listview_view_to_cell(v2d, 0, NLACHANNEL_STEP, 0, 0, x, y, NULL, &channel_index); + UI_view2d_listview_view_to_cell(v2d, 0, NLACHANNEL_STEP, 0, (float)NLACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index); /* x-range to check is +/- 7 (in screen/region-space) on either side of mouse click * (that is the size of keyframe icons, so user should be expecting similar tolerances) diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 5490f40eb03..a7e9844726d 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -103,6 +103,7 @@ ARegion *nla_has_buttons_region(ScrArea *sa) static SpaceLink *nla_new(const bContext *C) { + Scene *scene= CTX_data_scene(C); ARegion *ar; SpaceNla *snla; @@ -132,37 +133,6 @@ static SpaceLink *nla_new(const bContext *C) ar->v2d.scroll = V2D_SCROLL_BOTTOM; ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - /* main area */ - ar= MEM_callocN(sizeof(ARegion), "main area for nla"); - - BLI_addtail(&snla->regionbase, ar); - ar->regiontype= RGN_TYPE_WINDOW; - - ar->v2d.tot.xmin= 1.0f; - ar->v2d.tot.ymin= 0.0f; - ar->v2d.tot.xmax= 1000.0f; - ar->v2d.tot.ymax= 500.0f; - - ar->v2d.cur.xmin= -5.0f; - ar->v2d.cur.ymin= 0.0f; - ar->v2d.cur.xmax= 65.0f; - ar->v2d.cur.ymax= 250.0f; - - ar->v2d.min[0]= 0.0f; - ar->v2d.min[1]= 0.0f; - - ar->v2d.max[0]= MAXFRAMEF; - ar->v2d.max[1]= 1000.0f; - - ar->v2d.minzoom= 0.1f; - ar->v2d.maxzoom= 50.0f; - - ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); - ar->v2d.scroll |= (V2D_SCROLL_RIGHT); - ar->v2d.keepzoom= V2D_LOCKZOOM_Y; - ar->v2d.align= V2D_ALIGN_NO_NEG_Y; - ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; - /* ui buttons */ ar= MEM_callocN(sizeof(ARegion), "buttons area for nla"); @@ -171,6 +141,33 @@ static SpaceLink *nla_new(const bContext *C) ar->alignment= RGN_ALIGN_RIGHT; ar->flag = RGN_FLAG_HIDDEN; + /* main area */ + ar= MEM_callocN(sizeof(ARegion), "main area for nla"); + + BLI_addtail(&snla->regionbase, ar); + ar->regiontype= RGN_TYPE_WINDOW; + + ar->v2d.tot.xmin= (float)(SFRA-10); + ar->v2d.tot.ymin= -500.0f; + ar->v2d.tot.xmax= (float)(EFRA+10); + ar->v2d.tot.ymax= 0.0f; + + ar->v2d.cur = ar->v2d.tot; + + ar->v2d.min[0]= 0.0f; + ar->v2d.min[1]= 0.0f; + + ar->v2d.max[0]= MAXFRAMEF; + ar->v2d.max[1]= 10000.0f; + + ar->v2d.minzoom= 0.01f; + ar->v2d.maxzoom= 50; + ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT); + ar->v2d.keepzoom= V2D_LOCKZOOM_Y; + ar->v2d.align= V2D_ALIGN_NO_POS_Y; + ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; + return (SpaceLink *)snla; } @@ -213,7 +210,7 @@ static void nla_channel_area_init(wmWindowManager *wm, ARegion *ar) { ListBase *keymap; - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STACK, ar->winx, ar->winy); + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); /* own keymap */ // TODO: cannot use generic copy, need special NLA version From cdeb95e737f6995b3b4cb2ced1a966f787167c1b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 11 Jun 2009 11:53:41 +0000 Subject: [PATCH 038/512] NLA SoC: RNA Fixes - Lower bound for start values has been expanded to -MAXFRAME, to avoid clipping problems when the strip is moved past frame 0 - Removed some obsolete (+ commented out) NLA wrapping in Object stuff --- source/blender/makesrna/intern/rna_nla.c | 6 +++--- source/blender/makesrna/intern/rna_object.c | 23 --------------------- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index b55b4e431fb..4b5c14aab82 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -47,13 +47,13 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) /* clamp value to lie within valid limits * - cannot start past the end of the strip + some flexibility threshold * - cannot start before the previous strip (if present) ends - * - minimum frame is 1.0f (this can be changed) + * - minimum frame is -MAXFRAME so that we don't get clipping on frame 0 */ if (data->prev) { CLAMP(value, data->prev->end, data->end-0.1f); } else { - CLAMP(value, 1, data->end); + CLAMP(value, -MAXFRAME, data->end); } data->start= value; } @@ -137,7 +137,7 @@ static void rna_NlaStrip_blend_out_set(PointerRNA *ptr, float value) static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; - CLAMP(value, 1, data->actend); + CLAMP(value, -MAXFRAME, data->actend); data->actstart= value; } diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 08eca7b0528..edfaf5cb21a 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -1069,29 +1069,6 @@ static StructRNA *rna_def_object(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Pose Mode", "Object with armature data is in pose mode."); - // XXX this stuff should be moved to AnimData... -/* - prop= RNA_def_property(srna, "nla_disable_path", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "nlaflag", OB_DISABLE_PATH); - RNA_def_property_ui_text(prop, "NLA Disable Path", "Disable path temporally, for editing cycles."); - - prop= RNA_def_property(srna, "nla_collapsed", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "nlaflag", OB_NLA_COLLAPSED); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "NLA Collapsed", ""); - - prop= RNA_def_property(srna, "nla_override", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "nlaflag", OB_NLA_OVERRIDE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "NLA Override", ""); - - prop= RNA_def_property(srna, "nla_strips", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "nlastrips", NULL); - RNA_def_property_struct_type(prop, "UnknownType"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "NLA Strips", "NLA strips of the object."); -*/ - /* shape keys */ prop= RNA_def_property(srna, "shape_key_lock", PROP_BOOLEAN, PROP_NONE); From 4f9846b6a13184c504682853beb2647b4a77e9ac Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 12 Jun 2009 02:49:21 +0000 Subject: [PATCH 039/512] NLA SoC: Fixes for crashes when selecting keyframes in object channels in DopeSheet --- .../blender/editors/animation/anim_filter.c | 48 +------------------ .../editors/animation/keyframes_edit.c | 24 +++++++++- .../editors/space_action/action_select.c | 26 +++++----- 3 files changed, 38 insertions(+), 60 deletions(-) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index b47211f35d1..f9c1b1bb42f 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -1095,17 +1095,6 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B ANIMDATA_FILTER_CASES(ob, { /* AnimData blocks - do nothing... */ }, { /* nla */ -#if 0 - /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } -#endif - /* add NLA tracks */ items += animdata_filter_nla(anim_data, adt, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); }, @@ -1141,7 +1130,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B items += animdata_filter_action(anim_data, adt->action, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } - ) + ); } @@ -1151,17 +1140,6 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B ANIMDATA_FILTER_CASES(key, { /* AnimData blocks - do nothing... */ }, { /* nla */ -#if 0 - /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_OBJECT, (ID *)ob); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } -#endif - /* add NLA tracks */ items += animdata_filter_nla(anim_data, adt, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); }, @@ -1195,7 +1173,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } - ) + ); } /* Materials? */ @@ -1280,17 +1258,6 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads ANIMDATA_FILTER_CASES(sce, { /* AnimData blocks - do nothing... */ }, { /* nla */ -#if 0 - /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_SCENE (ID *)sce); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } -#endif - /* add NLA tracks */ items += animdata_filter_nla(anim_data, adt, filter_mode, sce, ANIMTYPE_SCENE, (ID *)sce); }, @@ -1334,17 +1301,6 @@ static int animdata_filter_dopesheet_scene (ListBase *anim_data, bDopeSheet *ads ANIMDATA_FILTER_CASES(wo, { /* AnimData blocks - do nothing... */ }, { /* nla */ -#if 0 - /* include nla-expand widget? */ - if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_NLATRACKS)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLNLA, base, ANIMTYPE_DSWOR (ID *)wo); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } -#endif - /* add NLA tracks */ items += animdata_filter_nla(anim_data, adt, filter_mode, wo, ANIMTYPE_DSWOR, (ID *)wo); }, diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index 8243629b4a6..77826eca87a 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -128,6 +128,10 @@ static short agrp_keys_bezier_loop(BeztEditData *bed, bActionGroup *agrp, BeztEd { FCurve *fcu; + /* sanity check */ + if (agrp == NULL) + return 0; + /* only iterate over the F-Curves that are in this group */ for (fcu= agrp->channels.first; fcu && fcu->grp==agrp; fcu= fcu->next) { if (ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb)) @@ -142,6 +146,10 @@ static short act_keys_bezier_loop(BeztEditData *bed, bAction *act, BeztEditFunc { FCurve *fcu; + /* sanity check */ + if (act == NULL) + return 0; + /* just loop through all F-Curves */ for (fcu= act->curves.first; fcu; fcu= fcu->next) { if (ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb)) @@ -154,6 +162,10 @@ static short act_keys_bezier_loop(BeztEditData *bed, bAction *act, BeztEditFunc /* This function is used to loop over the keyframe data of an AnimData block */ static short adt_keys_bezier_loop(BeztEditData *bed, AnimData *adt, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag) { + /* sanity check */ + if (adt == NULL) + return 0; + /* drivers or actions? */ if (filterflag & ADS_FILTER_ONLYDRIVERS) { FCurve *fcu; @@ -178,6 +190,10 @@ static short ob_keys_bezier_loop(BeztEditData *bed, Object *ob, BeztEditFunc bez { Key *key= ob_get_key(ob); + /* sanity check */ + if (ob == NULL) + return 0; + /* firstly, Object's own AnimData */ if (ob->adt) adt_keys_bezier_loop(bed, ob->adt, bezt_ok, bezt_cb, fcu_cb, filterflag); @@ -194,7 +210,11 @@ static short ob_keys_bezier_loop(BeztEditData *bed, Object *ob, BeztEditFunc bez /* This function is used to loop over the keyframe data in a Scene */ static short scene_keys_bezier_loop(BeztEditData *bed, Scene *sce, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag) { - World *wo= sce->world; + World *wo= (sce) ? sce->world : NULL; + + /* sanity check */ + if (sce == NULL) + return 0; /* Scene's own animation */ if (sce->adt) @@ -231,7 +251,7 @@ short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, bAnimListElem *ale, B return act_keys_bezier_loop(bed, (bAction *)ale->data, bezt_ok, bezt_cb, fcu_cb); case ALE_OB: /* object */ - return ob_keys_bezier_loop(bed, (Object *)ale->data, bezt_ok, bezt_cb, fcu_cb, filterflag); + return ob_keys_bezier_loop(bed, (Object *)ale->key_data, bezt_ok, bezt_cb, fcu_cb, filterflag); case ALE_SCE: /* scene */ return scene_keys_bezier_loop(bed, (Scene *)ale->data, bezt_ok, bezt_cb, fcu_cb, filterflag); } diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index d8ed3fd1068..826728e83f9 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -858,17 +858,19 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); /* Highlight Action-Group or F-Curve? */ - if (ale->type == ANIMTYPE_GROUP) { - bActionGroup *agrp= ale->data; - - agrp->flag |= AGRP_SELECTED; - ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); - } - else if (ale->type == ANIMTYPE_FCURVE) { - FCurve *fcu= ale->data; - - fcu->flag |= FCURVE_SELECTED; - ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + if (ale && ale->data) { + if (ale->type == ANIMTYPE_GROUP) { + bActionGroup *agrp= ale->data; + + agrp->flag |= AGRP_SELECTED; + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); + } + else if (ale->type == ANIMTYPE_FCURVE) { + FCurve *fcu= ale->data; + + fcu->flag |= FCURVE_SELECTED; + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + } } } else if (ac->datatype == ANIMCONT_GPENCIL) { @@ -881,7 +883,7 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, } /* only select keyframes if we clicked on a valid channel and hit something */ - if (ale) { + if (ale && found) { /* apply selection to keyframes */ if (/*gpl*/0) { /* grease pencil */ From 74884754d221a97c487d4c3630ceb4412b726863 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 12 Jun 2009 06:44:49 +0000 Subject: [PATCH 040/512] NLA SoC: Added menus including the operators coded already --- source/blender/editors/space_nla/nla_header.c | 108 ++++++++++++++---- source/blender/makesdna/DNA_space_types.h | 3 + source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_space.c | 28 ++++- 4 files changed, 112 insertions(+), 28 deletions(-) diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 7ce7536878b..0d42c544a3f 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -57,6 +57,9 @@ #include "ED_screen.h" #include "BIF_gl.h" +#include "BIF_transform.h" + +#include "RNA_access.h" #include "WM_api.h" #include "WM_types.h" @@ -74,37 +77,84 @@ enum { /* ************************ header area region *********************** */ -static void do_viewmenu(bContext *C, void *arg, int event) + +static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa= CTX_wm_area(C); + Scene *scene= CTX_data_scene(C); + SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + PointerRNA spaceptr; + /* retrieve state */ + RNA_pointer_create(&sc->id, &RNA_SpaceNLA, snla, &spaceptr); + + /* create menu */ + uiItemO(layout, NULL, ICON_MENU_PANEL, "NLAEDIT_OT_properties"); + + uiItemS(layout); + + uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0, 0, 0); + + if (snla->flag & SNLA_DRAWTIME) + uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); + else + uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); + + uiItemS(layout); + + if (scene->flag & SCE_NLA_EDIT_ON) + uiItemO(layout, NULL, 0, "NLAEDIT_OT_tweakmode_exit"); + else + uiItemO(layout, NULL, 0, "NLAEDIT_OT_tweakmode_enter"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLA_OT_view_all"); + + if (sa->full) + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow + else + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow } -static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused) +static void nla_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; + uiItemO(layout, NULL, 0, "NLAEDIT_OT_select_all_toggle"); + uiItemBooleanO(layout, "Invert All", 0, "NLAEDIT_OT_select_all_toggle", "invert", 1); - block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_viewmenu, NULL); + uiItemS(layout); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; + uiItemO(layout, NULL, 0, "NLAEDIT_OT_select_border"); + uiItemBooleanO(layout, "Border Axis Range", 0, "NLAEDIT_OT_select_border", "axis_range", 1); } +static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + // XXX these operators may change for NLA... + uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TIME_TRANSLATE); + uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); + uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); +} + +static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); + uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); + + uiItemO(layout, NULL, 0, "NLAEDIT_OT_split"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLAEDIT_OT_delete"); +} + +/* ------------------ */ + static void do_nla_buttons(bContext *C, void *arg, int event) { switch (event) { @@ -132,9 +182,17 @@ void nla_header_buttons(const bContext *C, ARegion *ar) int xmax; xmax= GetButStringLength("View"); - uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C), - "View", xco, yco-2, xmax-3, 24, ""); - xco+=XIC+xmax; + uiDefMenuBut(block, nla_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); + xco+= xmax; + + xmax= GetButStringLength("Select"); + uiDefMenuBut(block, nla_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); + xco+= xmax; + + xmax= GetButStringLength("Edit"); + uiDefMenuBut(block, nla_editmenu, NULL, "Edit", xco, yco, xmax-3, 20, ""); + xco+= xmax; + } uiBlockSetEmboss(block, UI_EMBOSS); diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index c7abd8f7f83..3740633b576 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -696,8 +696,11 @@ enum { #define IMS_INFILESLI 4 /* nla->flag */ + // depreceated #define SNLA_ALLKEYED (1<<0) + // depreceated #define SNLA_ACTIVELAYERS (1<<1) + #define SNLA_DRAWTIME (1<<2) #define SNLA_NOTRANSKEYCULL (1<<3) #define SNLA_NODRAWCFRANUM (1<<4) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 1a8bf88d1cc..d1fd3d78074 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -365,6 +365,7 @@ extern StructRNA RNA_Space; extern StructRNA RNA_Space3DView; extern StructRNA RNA_SpaceButtonsWindow; extern StructRNA RNA_SpaceImageEditor; +extern StructRNA RNA_SpaceNLA; extern StructRNA RNA_SpaceOutliner; extern StructRNA RNA_SpaceSequenceEditor; extern StructRNA RNA_SpaceTextEditor; diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 5de80cce2b5..1b776b727ce 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -92,10 +92,10 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) /*case SPACE_SOUND: return &RNA_SpaceAudioWindow; case SPACE_ACTION: - return &RNA_SpaceDopeSheetEditor; + return &RNA_SpaceDopeSheetEditor;*/ case SPACE_NLA: - return &RNA_SpaceNLAEditor; - case SPACE_SCRIPT: + return &RNA_SpaceNLA; + /*case SPACE_SCRIPT: return &RNA_SpaceScriptsWindow; case SPACE_TIME: return &RNA_SpaceTimeline; @@ -757,6 +757,27 @@ static void rna_def_space_text(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Replace Text", "Text to replace selected text with using the replace tool."); } +static void rna_def_space_nla(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "SpaceNLA", "Space"); + RNA_def_struct_sdna(srna, "SpaceNla"); + RNA_def_struct_ui_text(srna, "Space Nla Editor", "NLA editor space data."); + + /* display */ + prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SNLA_DRAWTIME); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator + RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames."); + + prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NODRAWCFRANUM); + RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); + +} + void RNA_def_space(BlenderRNA *brna) { rna_def_space(brna); @@ -767,6 +788,7 @@ void RNA_def_space(BlenderRNA *brna) rna_def_background_image(brna); rna_def_space_3dview(brna); rna_def_space_buttons(brna); + rna_def_space_nla(brna); } #endif From 74d3d136dbd98f59fb7ba2f9b908330caf15e411 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Tue, 16 Jun 2009 21:16:22 +0000 Subject: [PATCH 041/512] == Sequencer == Fixed color balance tool. Problem was: we pretended to do Lift/Gamma/Gain, but in reality we did (1-Offset)/Power/Slope. (slightly modified ASC CDL). So now, the GUI is able to switch modes between ASC CDL-mode and real Lift/Gamma/Gain. It also adds a switch to enable Neutral Black/White flipping (very usefull for black point selection) This closes: [#18078] bugfix #18010 Sequencer lift --- source/blender/blenloader/intern/readfile.c | 3 + source/blender/include/butspace.h | 2 + source/blender/makesdna/DNA_sequence_types.h | 18 +- source/blender/src/buttons_scene.c | 275 ++++++++++++++++--- source/blender/src/editseq.c | 4 + source/blender/src/sequence.c | 11 +- 6 files changed, 267 insertions(+), 46 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index b4efa5d1432..4e5789d87e8 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3703,6 +3703,9 @@ static void direct_link_scene(FileData *fd, Scene *sce) } else { seq->strip->color_balance = 0; } + if (seq->strip->color_balance) { + seq->strip->color_balance->gui = 0; + } } } END_SEQ diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h index 8aaf4a7c65b..998453ca69b 100644 --- a/source/blender/include/butspace.h +++ b/source/blender/include/butspace.h @@ -378,6 +378,8 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la #define B_SEQ_BUT_REBUILD_PROXY 1697 #define B_SEQ_SEL_PROXY_DIR 1698 #define B_SEQ_SEL_PROXY_FILE 1699 +#define B_SEQ_BUT_COLOR_BALANCE 1700 + /* *********************** */ #define B_ARMATUREBUTS 1800 #define B_POSE 1701 diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h index b6815df9fc5..707e06cf9cb 100644 --- a/source/blender/makesdna/DNA_sequence_types.h +++ b/source/blender/makesdna/DNA_sequence_types.h @@ -38,6 +38,7 @@ struct Ipo; struct Scene; +struct StripColorBalanceGUIHelper; /* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */ @@ -71,9 +72,11 @@ typedef struct StripColorBalance { float gamma[3]; float gain[3]; int flag; - int pad; + int mode; float exposure; float saturation; + int pad; + struct StripColorBalanceGUIHelper * gui; } StripColorBalance; typedef struct StripProxy { @@ -263,9 +266,16 @@ typedef struct SpeedControlVars { #define SEQ_ACTIVE 1048576 #define SEQ_USE_PROXY_CUSTOM_FILE 2097152 -#define SEQ_COLOR_BALANCE_INVERSE_GAIN 1 -#define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2 -#define SEQ_COLOR_BALANCE_INVERSE_LIFT 4 +#define SEQ_COLOR_BALANCE_INVERSE_GAIN 1 +#define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2 +#define SEQ_COLOR_BALANCE_INVERSE_LIFT 4 + +#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN 8 +#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA 16 +#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT 32 + +#define SEQ_COLOR_BALANCE_GUI_MODE_LGG 0 +#define SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL 1 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */ #define SEQ_IMAGE 0 diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index dac093b6ba8..5e0d91cfae7 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -480,6 +480,13 @@ static void sound_panel_sound(bSound *sound) /* ************************* Sequencer *********************** */ +typedef struct StripColorBalanceGUIHelper { + float lift[3]; + float gamma[3]; + float gain[3]; + int flag; +} StripColorBalanceGUIHelper; + #define SEQ_PANEL_EDITING 1 #define SEQ_PANEL_INPUT 2 #define SEQ_PANEL_FILTER 4 @@ -520,6 +527,108 @@ static char* seq_panel_blend_modes() return string; } +static char* seq_panel_color_balance_modes() +{ + static char string[2048]; + + sprintf(string, "Color balance mode: %%t|%s %%x%d|%s %%x%d", + "LiftGamGain", SEQ_COLOR_BALANCE_GUI_MODE_LGG, + "ASC CDL", SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL); + + return string; +} + +static void copy_to_color_balance_gui(StripColorBalance * cb) +{ + int c; + StripColorBalanceGUIHelper * cg = cb->gui; + + for (c = 0; c < 3; c++) { + /* well in ACL terms, + + cb->lift is actually 1 - offset + cb->gamma is actually power + cb->gain is actually slope + + sorry for the confusion, that is for + DNA backward compatibility... + + might better be renamed to low, mid, high (neutral terms) + + our lift / gamma / gain balancer sticks to neutral white + (by default, can be switched with BW_FLIP) + and therefore has: + + lift is actually 1 - lift + gain is gain :) + gamma is actually power + */ + + cg->lift[c] = cb->lift[c]; + cg->gamma[c] = cb->gamma[c]; + cg->gain[c] = cb->gain[c]; + + if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_LGG) { + float offset = cg->lift[c]; + float slope = cg->gain[c]; + + offset = 1 - offset; + + cg->gain[c] = offset + slope; + cg->lift[c] = offset/(offset + slope); + + cg->lift[c] = 1 - cg->lift[c]; + + } + + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT) { + cg->lift[c] = 1 - cg->lift[c]; + } + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA) { + cg->gamma[c] = 1 - cg->gamma[c]; + } + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN) { + cg->gain[c] = 1 - cg->gain[c]; + } + } +} + +static void copy_from_color_balance_gui(StripColorBalance * cb) +{ + int c; + StripColorBalanceGUIHelper * cg = cb->gui; + + for (c = 0; c < 3; c++) { + /* see note above regarding confusing variable names */ + + cb->lift[c] = cg->lift[c]; + cb->gamma[c] = cg->gamma[c]; + cb->gain[c] = cg->gain[c]; + + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT) { + cb->lift[c] = 1 - cb->lift[c]; + } + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA) { + cb->gamma[c] = 1 - cb->gamma[c]; + } + if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN) { + cb->gain[c] = 1 - cb->gain[c]; + } + + if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_LGG) { + float lift = cb->lift[c]; + float gain = cb->gain[c]; + + lift = 1 - lift; + + cb->gain[c] = ( 1 - lift ) * gain; + cb->lift[c] = lift * gain; + + cb->lift[c] = 1 - cb->lift[c]; + } + } +} + static char* seq_panel_scenes() { static char rstr[8192]; @@ -948,19 +1057,30 @@ static void seq_panel_filter_video() 1.0, 30.0, 100, 0, "Only display every nth frame"); - uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE, - B_SEQ_BUT_RELOAD, "Use Color Balance", - 10,50,240,19, &last_seq->flag, - 0.0, 21.0, 100, 0, - "Activate Color Balance " - "(3-Way color correction) on input"); - + if (last_seq->flag & SEQ_USE_COLOR_BALANCE) { + uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE, + B_SEQ_BUT_RELOAD, "Use CB", + 10,50,120,19, &last_seq->flag, + 0.0, 21.0, 100, 0, + "Activate Color Balance " + "(3-Way color correction) on input"); + } else { + uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE, + B_SEQ_BUT_RELOAD, "Use Color Balance", + 10,50,240,19, &last_seq->flag, + 0.0, 21.0, 100, 0, + "Activate Color Balance " + "(3-Way color correction) on input"); + } if (last_seq->flag & SEQ_USE_COLOR_BALANCE) { - if (!last_seq->strip->color_balance) { + StripColorBalance * cb = last_seq->strip->color_balance; + StripColorBalanceGUIHelper * cg; + int xofs; + + if (!cb) { int c; - StripColorBalance * cb - = last_seq->strip->color_balance + cb = last_seq->strip->color_balance = MEM_callocN( sizeof(struct StripColorBalance), "StripColorBalance"); @@ -971,43 +1091,111 @@ static void seq_panel_filter_video() } } - uiDefBut(block, LABEL, 0, "Lift", - 10,30,80,19, 0, 0, 0, 0, 0, ""); - uiDefBut(block, LABEL, 0, "Gamma", - 90,30,80,19, 0, 0, 0, 0, 0, ""); - uiDefBut(block, LABEL, 0, "Gain", - 170,30,80,19, 0, 0, 0, 0, 0, ""); + uiDefButI(block, MENU, B_SEQ_BUT_COLOR_BALANCE, + seq_panel_color_balance_modes(), + 130, 50, 120, 19, &cb->mode, + 0,0,0,0, "Color balance mode"); - uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Lift", - 10,10,80,19, last_seq->strip->color_balance->lift, - 0, 0, 0, 0, "Lift (shadows)"); + if (!cb->gui) { + cb->gui = MEM_callocN( + sizeof(struct StripColorBalanceGUIHelper), + "StripColorBalanceGUIHelper"); + copy_to_color_balance_gui(cb); + cb->gui->flag = cb->flag; + } - uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Gamma", - 90,10,80,19, last_seq->strip->color_balance->gamma, - 0, 0, 0, 0, "Gamma (midtones)"); + cg = cb->gui; - uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Gain", - 170,10,80,19, last_seq->strip->color_balance->gain, - 0, 0, 0, 0, "Gain (highlights)"); + if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL) { + uiDefBut(block, LABEL, 0, "Ofs (shad)", + 10,30,80,19, 0, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Pow (midt)", + 90,30,80,19, 0, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Slp (high)", + 170,30,80,19, 0, 0, 0, 0, 0, ""); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "1-Offset", + 10,10,80,19, cg->lift, + 0, 0, 0, 0, "1 - Offset (shadows)"); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "Gamma", + 90,10,80,19, cg->gamma, + 0, 0, 0, 0, "Power (midtones)"); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "Slope", + 170,10,80,19, cg->gain, + 0, 0, 0, 0, "Slope (highlights)"); + } else { + uiDefBut(block, LABEL, 0, "Lift (shad)", + 10,30,80,19, 0, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Gamma (mi)", + 90,30,80,19, 0, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Gain (high)", + 170,30,80,19, 0, 0, 0, 0, 0, ""); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "1-Lift", + 10,10,80,19, cg->lift, + 0, 0, 0, 0, "1 - Lift (shadows)"); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "1/Gamma", + 90,10,80,19, cg->gamma, + 0, 0, 0, 0, "1 / Gamma (midtones)"); + + uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, + "Gain", + 170,10,80,19, cg->gain, + 0, 0, 0, 0, "Gain (highlights)"); + } + + xofs = 10; uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_INVERSE_LIFT, - B_SEQ_BUT_RELOAD, "Inv Lift", - 10,-10,80,19, - &last_seq->strip->color_balance->flag, + B_SEQ_BUT_COLOR_BALANCE, "Inverse", + xofs,-10,55,19, + &cb->flag, 0.0, 21.0, 100, 0, - "Inverse Lift"); + "Inverse"); + xofs += 55; + + uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT, + B_SEQ_BUT_COLOR_BALANCE, "NB", + xofs,-10,25,19, + &cb->flag, + 0.0, 21.0, 100, 0, + "Neutral Black"); + xofs += 25; uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_INVERSE_GAMMA, - B_SEQ_BUT_RELOAD, "Inv Gamma", - 90,-10,80,19, - &last_seq->strip->color_balance->flag, + B_SEQ_BUT_COLOR_BALANCE, "Inverse", + xofs,-10,55,19, + &cb->flag, 0.0, 21.0, 100, 0, - "Inverse Gamma"); + "Inverse"); + xofs += 55; + uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA, + B_SEQ_BUT_COLOR_BALANCE, "NB", + xofs,-10,25,19, + &cb->flag, + 0.0, 21.0, 100, 0, + "Neutral Black"); + xofs += 25; uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_INVERSE_GAIN, - B_SEQ_BUT_RELOAD, "Inv Gain", - 170,-10,80,19, - &last_seq->strip->color_balance->flag, + B_SEQ_BUT_COLOR_BALANCE, "Inverse", + xofs,-10,55,19, + &cb->flag, 0.0, 21.0, 100, 0, - "Inverse Gain"); + "Inverse"); + xofs += 55; + uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN, + B_SEQ_BUT_COLOR_BALANCE, "NB", + xofs,-10,25,19, + &cb->flag, + 0.0, 21.0, 100, 0, + "Neutral Black"); } @@ -1398,6 +1586,19 @@ void do_sequencer_panels(unsigned short event) last_seq->strip->proxy->dir, sel_proxy_file); break; + case B_SEQ_BUT_COLOR_BALANCE: { + if (last_seq->strip && last_seq->strip->color_balance && + last_seq->strip->color_balance->gui) { + StripColorBalance * cb=last_seq->strip->color_balance; + if (cb->gui->flag != cb->flag) { + copy_to_color_balance_gui(cb); + cb->gui->flag = cb->flag; + } else { + copy_from_color_balance_gui(cb); + } + } + /* fall through */ + } case B_SEQ_BUT_RELOAD: case B_SEQ_BUT_RELOAD_ALL: update_seq_ipo_rect(last_seq); diff --git a/source/blender/src/editseq.c b/source/blender/src/editseq.c index 48c301ab051..603a0e6b056 100644 --- a/source/blender/src/editseq.c +++ b/source/blender/src/editseq.c @@ -2290,6 +2290,10 @@ static Sequence *dupli_seq(Sequence *seq) if (seq->strip->color_balance) { seqn->strip->color_balance = MEM_dupallocN(seq->strip->color_balance); + if (seq->strip->color_balance->gui) { + seqn->strip->color_balance->gui + =MEM_dupallocN(seq->strip->color_balance->gui); + } } if(seq->type==SEQ_META) { diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 5a63e3ea995..482654de7ca 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -141,6 +141,9 @@ void free_strip(Strip *strip) MEM_freeN(strip->transform); } if (strip->color_balance) { + if (strip->color_balance->gui) { + MEM_freeN(strip->color_balance->gui); + } MEM_freeN(strip->color_balance); } @@ -1292,12 +1295,10 @@ static StripColorBalance calc_cb(StripColorBalance * cb_) StripColorBalance cb = *cb_; int c; - if (cb.flag & SEQ_COLOR_BALANCE_INVERSE_LIFT) { - for (c = 0; c < 3; c++) { + for (c = 0; c < 3; c++) { + if (cb.flag & SEQ_COLOR_BALANCE_INVERSE_LIFT) { cb.lift[c] = 1.0 - cb.lift[c]; - } - } else { - for (c = 0; c < 3; c++) { + } else { cb.lift[c] = -(1.0 - cb.lift[c]); } } From 88f3ec3fdb087fcdcf726132c260ea1b5cdf4c06 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Tue, 16 Jun 2009 21:28:19 +0000 Subject: [PATCH 042/512] == FFMPEG == This fixes: [#18262] From FFMPEG/audio menu the PCM selection is missing (thanks to Mika Saari (mikasaari) for the patch!) --- source/blender/src/buttons_scene.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index 5e0d91cfae7..accab4a0970 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -2215,7 +2215,7 @@ static char* ffmpeg_audio_codec_pup(void) { static char string[2048]; char formatstring[2048]; strcpy(formatstring, - "FFMpeg format: %%t|%s %%x%d|%s %%x%d|%s %%x%d" + "FFMpeg format: %%t|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d" #ifdef WITH_OGG "|%s %%x%d" #endif From 5de1ddf96ccf715c4c1eeb189328a72cd250ab4d Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Wed, 17 Jun 2009 06:54:35 +0000 Subject: [PATCH 043/512] BGE bug #18931: YoFrankie bug in 249-trunk (works in 248). --- source/gameengine/Ketsji/KX_BulletPhysicsController.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp index 748b0667061..db1595db36f 100644 --- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp +++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp @@ -402,6 +402,8 @@ void KX_BulletPhysicsController::RestoreDynamics() btRigidBody *body = GetRigidBody(); if (body && m_suspended) { + // before make sure any position change that was done in this logic frame are accounted for + SetTransform(); GetPhysicsEnvironment()->updateCcdPhysicsController(this, m_savedMass, m_savedCollisionFlags, From fa3cd4aadfca4141735a59aa801dc9425e1b9ba7 Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Wed, 17 Jun 2009 08:36:37 +0000 Subject: [PATCH 044/512] BGE #18823: Loading older blend files (from the blender Gamekit 1.0 demos) that use Sumo crash on playback in 2.48.5, worked in rc3. Fixed by upgrading Sumo to support the new method of sensor synchronization introduced with Sensor objects in Bullet. Sumo demo will not crash but may still not run well as other features and methods have not been ported. --- .../Physics/Sumo/SumoPhysicsController.cpp | 75 ++++++++++++++++++- .../Physics/Sumo/SumoPhysicsController.h | 26 +++++++ .../Physics/Sumo/SumoPhysicsEnvironment.cpp | 7 +- 3 files changed, 104 insertions(+), 4 deletions(-) diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp index 56caa9236bf..5e77567a95a 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp +++ b/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp @@ -402,7 +402,13 @@ void SumoPhysicsController::SetSimulatedTime(float) void SumoPhysicsController::WriteMotionStateToDynamics(bool) { - + float tmp[4]; + m_MotionState->getWorldPosition(tmp[0], tmp[1], tmp[2]); + MT_Point3 pos(tmp); + m_sumoObj->setPosition(pos); + m_MotionState->getWorldOrientation(tmp[0], tmp[1], tmp[2], tmp[3]); + MT_Quaternion quat(tmp); + m_sumoObj->setOrientation(quat); } // this is the actual callback from sumo, and the position/orientation //is written to the scenegraph, using the motionstate abstraction @@ -493,3 +499,70 @@ float SumoPhysicsController::GetRadius() const return 0.f; } + +/////////////////////////////////////////////////////////// +///A small utility class, SumoDefaultMotionState +/// +/////////////////////////////////////////////////////////// + +SumoDefaultMotionState::SumoDefaultMotionState() +{ + m_worldTransform.setIdentity(); + m_localScaling.setValue(1.f,1.f,1.f); +} + + +SumoDefaultMotionState::~SumoDefaultMotionState() +{ + +} + +void SumoDefaultMotionState::getWorldPosition(float& posX,float& posY,float& posZ) +{ + posX = m_worldTransform.getOrigin().x(); + posY = m_worldTransform.getOrigin().y(); + posZ = m_worldTransform.getOrigin().z(); +} + +void SumoDefaultMotionState::getWorldScaling(float& scaleX,float& scaleY,float& scaleZ) +{ + scaleX = m_localScaling.x(); + scaleY = m_localScaling.y(); + scaleZ = m_localScaling.z(); +} + +void SumoDefaultMotionState::getWorldOrientation(float& quatIma0,float& quatIma1,float& quatIma2,float& quatReal) +{ + MT_Quaternion quat = m_worldTransform.getRotation(); + quatIma0 = quat.x(); + quatIma1 = quat.y(); + quatIma2 = quat.z(); + quatReal = quat.w(); +} + +void SumoDefaultMotionState::getWorldOrientation(float* ori) +{ + m_worldTransform.getBasis().getValue(ori); +} + +void SumoDefaultMotionState::setWorldOrientation(const float* ori) +{ + m_worldTransform.getBasis().setValue(ori); +} +void SumoDefaultMotionState::setWorldPosition(float posX,float posY,float posZ) +{ + MT_Point3 pos(posX,posY,posZ); + m_worldTransform.setOrigin( pos ); +} + +void SumoDefaultMotionState::setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal) +{ + MT_Quaternion orn(quatIma0,quatIma1,quatIma2,quatReal); + m_worldTransform.setRotation( orn ); +} + +void SumoDefaultMotionState::calculateWorldTransformations() +{ + +} + diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsController.h b/source/gameengine/Physics/Sumo/SumoPhysicsController.h index adf29649f18..25d6d68f3b8 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsController.h +++ b/source/gameengine/Physics/Sumo/SumoPhysicsController.h @@ -30,6 +30,7 @@ #define __SUMO_PHYSICSCONTROLLER_H #include "PHY_IPhysicsController.h" +#include "PHY_IMotionState.h" #include "SM_Scene.h" #include "SM_Callback.h" @@ -188,5 +189,30 @@ private: }; +///SumoDefaultMotionState implements standard motionstate, using btTransform +class SumoDefaultMotionState : public PHY_IMotionState + +{ + public: + SumoDefaultMotionState(); + + virtual ~SumoDefaultMotionState(); + + virtual void getWorldPosition(float& posX,float& posY,float& posZ); + virtual void getWorldScaling(float& scaleX,float& scaleY,float& scaleZ); + virtual void getWorldOrientation(float& quatIma0,float& quatIma1,float& quatIma2,float& quatReal); + + virtual void setWorldPosition(float posX,float posY,float posZ); + virtual void setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal); + virtual void getWorldOrientation(float* ori); + virtual void setWorldOrientation(const float* ori); + + virtual void calculateWorldTransformations(); + + MT_Transform m_worldTransform; + MT_Vector3 m_localScaling; + +}; + #endif //__SUMO_PHYSICSCONTROLLER_H diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp index b4daf0a3f80..941a41b1396 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp @@ -244,8 +244,8 @@ PHY_IPhysicsController* SumoPhysicsEnvironment::CreateSphereController(float rad //testing MT_Quaternion rotquatje(MT_Vector3(0,0,1),MT_radians(90)); ob->setOrientation(rotquatje); - - PHY_IPhysicsController* ctrl = new SumoPhysicsController(m_sumoScene,ob,0,false); + PHY_IMotionState* motionState = new SumoDefaultMotionState(); + PHY_IPhysicsController* ctrl = new SumoPhysicsController(m_sumoScene,ob,motionState,false); ctrl->SetMargin(radius); return ctrl; } @@ -256,8 +256,9 @@ PHY_IPhysicsController* SumoPhysicsEnvironment::CreateConeController(float coner ob->setPosition(MT_Point3(0.f,0.f,0.f)); MT_Quaternion rotquatje(MT_Vector3(0,0,1),MT_radians(90)); ob->setOrientation(rotquatje); + PHY_IMotionState* motionState = new SumoDefaultMotionState(); - PHY_IPhysicsController* ctrl = new SumoPhysicsController(m_sumoScene,ob,0,false); + PHY_IPhysicsController* ctrl = new SumoPhysicsController(m_sumoScene,ob,motionState,false); return ctrl; } From 50b22468b28b57de35ad35868265e6cfa442bdbc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 Jun 2009 09:42:04 +0000 Subject: [PATCH 045/512] BGE PyAPI while making a demo of using python to control bones found some more problems. also added channelNames attribute to BL_ActionActuator to get a list of valid channels to use. demo: http://www.graphicall.org/ftp/ideasman42/armature_python.blend its still not that useful since theres not way to know rest bone locations yet but better then nothing. --- .../Converter/BL_ActionActuator.cpp | 55 +++++++++++++++---- .../gameengine/Converter/BL_ActionActuator.h | 2 +- .../gameengine/Converter/BL_ArmatureObject.h | 1 + source/gameengine/PyDoc/GameTypes.py | 7 ++- 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index e18b8213b21..2df33f6ed4d 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -777,6 +777,10 @@ PyObject* BL_ActionActuator::PyGetChannel(PyObject* value) { bPoseChannel *pchan; + if(m_userpose==NULL && m_pose==NULL) { + BL_ArmatureObject *obj = (BL_ArmatureObject*)GetParent(); + obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ + } // get_pose_channel accounts for NULL pose, run on both incase one exists but // the channel doesnt @@ -922,14 +926,18 @@ KX_PYMETHODDEF_DOC(BL_ActionActuator, setChannel, obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ if (!m_userpose) { - obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ + if(!m_pose) + obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ game_copy_pose(&m_userpose, m_pose); } - pchan= verify_pose_channel(m_userpose, string); // adds the channel if its not there. + //pchan= verify_pose_channel(m_userpose, string); // adds the channel if its not there. + pchan= get_pose_channel(m_userpose, string); // adds the channel if its not there. - VECCOPY (pchan->loc, matrix[3]); - Mat4ToSize(matrix, pchan->size); - Mat4ToQuat(matrix, pchan->quat); + if (pchan) { + VECCOPY (pchan->loc, matrix[3]); + Mat4ToSize(matrix, pchan->size); + Mat4ToQuat(matrix, pchan->quat); + } } else { MT_Vector3 loc; @@ -941,15 +949,24 @@ KX_PYMETHODDEF_DOC(BL_ActionActuator, setChannel, // same as above if (!m_userpose) { - obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ + if(!m_pose) + obj->GetPose(&m_pose); /* Get the underlying pose from the armature */ game_copy_pose(&m_userpose, m_pose); } - pchan= verify_pose_channel(m_userpose, string); + //pchan= verify_pose_channel(m_userpose, string); // adds the channel if its not there. + pchan= get_pose_channel(m_userpose, string); // for some reason loc.setValue(pchan->loc) fails - pchan->loc[0]= loc[0]; pchan->loc[1]= loc[1]; pchan->loc[2]= loc[2]; - pchan->size[0]= size[0]; pchan->size[1]= size[1]; pchan->size[2]= size[2]; - pchan->quat[0]= quat[0]; pchan->quat[1]= quat[1]; pchan->quat[2]= quat[2]; pchan->quat[3]= quat[3]; + if(pchan) { + pchan->loc[0]= loc[0]; pchan->loc[1]= loc[1]; pchan->loc[2]= loc[2]; + pchan->size[0]= size[0]; pchan->size[1]= size[1]; pchan->size[2]= size[2]; + pchan->quat[0]= quat[0]; pchan->quat[1]= quat[1]; pchan->quat[2]= quat[2]; pchan->quat[3]= quat[3]; + } + } + + if(pchan==NULL) { + PyErr_SetString(PyExc_ValueError, "Channel could not be found, use the 'channelNames' attribute to get a list of valid channels"); + return NULL; } pchan->flag |= POSE_ROT|POSE_LOC|POSE_SIZE; @@ -1027,6 +1044,7 @@ PyAttributeDef BL_ActionActuator::Attributes[] = { KX_PYATTRIBUTE_FLOAT_RW("frameEnd", 0, MAXFRAMEF, BL_ActionActuator, m_endframe), KX_PYATTRIBUTE_FLOAT_RW("blendIn", 0, MAXFRAMEF, BL_ActionActuator, m_blendin), KX_PYATTRIBUTE_RW_FUNCTION("action", BL_ActionActuator, pyattr_get_action, pyattr_set_action), + KX_PYATTRIBUTE_RO_FUNCTION("channelNames", BL_ActionActuator, pyattr_get_channel_names), KX_PYATTRIBUTE_SHORT_RW("priority", 0, 100, false, BL_ActionActuator, m_priority), KX_PYATTRIBUTE_FLOAT_RW_CHECK("frame", 0, MAXFRAMEF, BL_ActionActuator, m_localtime, CheckFrame), KX_PYATTRIBUTE_STRING_RW("propName", 0, 31, false, BL_ActionActuator, m_propname), @@ -1083,3 +1101,20 @@ int BL_ActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF return PY_SET_ATTR_SUCCESS; } + +PyObject* BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + BL_ActionActuator* self= static_cast(self_v); + PyObject *ret= PyList_New(0); + + bPose *pose= ((BL_ArmatureObject*)self->GetParent())->GetOrigPose(); + + if(pose) { + bPoseChannel *pchan; + for(pchan= (bPoseChannel *)pose->chanbase.first; pchan; pchan= (bPoseChannel *)pchan->next) { + PyList_Append(ret, PyString_FromString(pchan->name)); + } + } + + return ret; +} diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h index 422b16bb3ec..088e7e3f4a8 100644 --- a/source/gameengine/Converter/BL_ActionActuator.h +++ b/source/gameengine/Converter/BL_ActionActuator.h @@ -119,7 +119,7 @@ public: static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); - + static PyObject* pyattr_get_channel_names(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); /* attribute check */ static int CheckFrame(void *self, const PyAttributeDef*) { diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h index d5402cfd126..fdf961d5694 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.h +++ b/source/gameengine/Converter/BL_ArmatureObject.h @@ -59,6 +59,7 @@ public: void GetMRDPose(struct bPose **pose); void GetPose(struct bPose **pose); void SetPose (struct bPose *pose); + struct bPose *GetOrigPose() {return m_pose;} // never edit this, only for accessing names void ApplyPose(); void RestorePose(); diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 63dd1a7fabf..35d8cd63c44 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -310,6 +310,8 @@ class BL_ActionActuator(SCA_IActuator): @ivar action: The name of the action to set as the current action. @type action: string + @ivar channelNames: A list of channel names that may be used with L{setChannel} and L{getChannel} + @type channelNames: list of strings @ivar frameStart: Specifies the starting frame of the animation. @type frameStart: float @ivar frameEnd: Specifies the ending frame of the animation. @@ -340,7 +342,8 @@ class BL_ActionActuator(SCA_IActuator): """ Alternative to the 2 arguments, 4 arguments (channel, matrix, loc, size, quat) are also supported. - @param channel: A string specifying the name of the bone channel, created if missing. + @note: These values are relative to the bones rest position, currently the api has no way to get this info (which is annoying), but can be worked around by using bones with a rest pose that has no translation. + @param channel: A string specifying the name of the bone channel, error raised if not in L{channelNames}. @type channel: string @param matrix: A 4x4 matrix specifying the overriding transformation as an offset from the bone's rest position. @@ -349,7 +352,7 @@ class BL_ActionActuator(SCA_IActuator): def getChannel(channel): """ - @param channel: A string specifying the name of the bone channel. error raised if missing. + @param channel: A string specifying the name of the bone channel. error raised if not in L{channelNames}. @type channel: string @rtype: tuple @return: (loc, size, quat) From 2519da917a736bfce3616e9f66e0a03e1a6c015f Mon Sep 17 00:00:00 2001 From: Remigiusz Fiedler Date: Wed, 17 Jun 2009 11:35:35 +0000 Subject: [PATCH 046/512] DXF-Importer v1.12 - 2009.06.16 by migius d7 fix for ignored BLOCKs (e.g. *X) which are members of other BLOCKs --- release/scripts/import_dxf.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/release/scripts/import_dxf.py b/release/scripts/import_dxf.py index 36a1a048075..b3bee11c464 100644 --- a/release/scripts/import_dxf.py +++ b/release/scripts/import_dxf.py @@ -7,7 +7,7 @@ Group: 'Import' Tooltip: 'Import for DWG/DXF geometry data.' """ __author__ = 'Kitsu(Ed Blake) & migius(Remigiusz Fiedler)' -__version__ = '1.12 - 2009.05.27 by migius' +__version__ = '1.12 - 2009.06.16 by migius' __url__ = ["http://blenderartists.org/forum/showthread.php?t=84319", "http://wiki.blender.org/index.php/Scripts/Manual/Import/DXF-3D"] __email__ = ["migius(at)4d-vectors.de","Kitsune_e(at)yahoo.com"] @@ -100,7 +100,7 @@ History: -- better support for long dxf-layer-names -- add configuration file.ini handles multiple material setups -- added f_layerFilter - -- to-check: obj/mat/group/_mapping-idea from ideasman42: + -- to-check: obj/mat/group/_mapping-idea from ideasman42 -- curves: added "fill/non-fill" option for closed curves: CIRCLEs,ELLIPSEs,POLYLINEs -- "normalize Z" option to correct non-planar figures -- LINEs need "width" in 3d-space incl vGroups @@ -108,11 +108,13 @@ History: -- add better support for color_index BYLAYER=256, BYBLOCK=0 -- bug: "oneMesh" produces irregularly errors -- bug: Registry recall from hd_cache ?? only win32 bug?? - -- support DXF-definitions of scene, lights and cameras + -- support DXF-definitions of autoshade: scene, lights and cameras -- support ortho mode for VIEWs and VPORTs as cameras + v1.12 - 2009.06.16 by migius + d7 fix for ignored BLOCKs (e.g. *X) which are members of other BLOCKs v1.12 - 2009.05.27 by migius - d6 todo: bugfix negative scaled INSERTs - isLeftHand(Matrix) check + d6 bugfix negative scaled INSERTs - isLeftHand(Matrix) check v1.12 - 2009.05.26 by migius d5 changed to the new 2.49 method Vector.cross() d5 bugfix WORLDY(1,1,0) to (0,1,0) @@ -161,7 +163,7 @@ History: a4 added to analyzeTool: report about VIEWs, VPORTs, unused/xref BLOCKs a4 bugfix: individual support for 2D/3DPOLYLINE/POLYMESH a4 added to UI: (*wip)BLOCK-(F): name filtering for BLOCKs - a4 added to UI: BLOCK-(n): filter anoname/hatch BLOCKs *X... + a4 added to UI: BLOCK-(n): filter noname/hatch BLOCKs *X... a2 g_scale_as is no more GUI_A-variable a2 bugfix "material": negative sign color_index a2 added support for BLOCKs defined with origin !=(0,0,0) @@ -4520,7 +4522,7 @@ def getBlocksmap(drawing, layersmap, layFrozen_on=False): #-------------------- item2str = [item2.name, item2.layer] childList.append(item2str) try: usedblocks[item.name] = [used, childList] - except KeyError: print 'Cannot map "%s" - "%s" as Block!' %(item.name, item) + except KeyError: print 'Cannot find "%s" Block!' %(item.name) #print 'deb:getBlocksmap: usedblocks=' , usedblocks #------------- #print 'deb:getBlocksmap: layersmap=' , layersmap #------------- @@ -4528,7 +4530,7 @@ def getBlocksmap(drawing, layersmap, layFrozen_on=False): #-------------------- if type(item) != list and item.type == 'insert': if not layersmap or (not layersmap[item.layer].frozen or layFrozen_on): #if insert_layer is not frozen try: usedblocks[item.name][0] = True - except: pass + except KeyError: print 'Cannot find "%s" Block!' %(item.name) key_list = usedblocks.keys() key_list.reverse() @@ -4536,7 +4538,8 @@ def getBlocksmap(drawing, layersmap, layFrozen_on=False): #-------------------- if usedblocks[key][0]: #if parent used, then set used also all child blocks for child in usedblocks[key][1]: if not layersmap or (layersmap and not layersmap[child[1]].frozen): #if insert_layer is not frozen - usedblocks[child[0]][0] = True # marked as used BLOCK + try: usedblocks[child[0]][0] = True # marked as used BLOCK + except KeyError: print 'Cannot find "%s" Block!' %(child[0]) usedblocks = [i for i in usedblocks.keys() if usedblocks[i][0]] #print 'deb:getBlocksmap: usedblocks=' , usedblocks #------------- From 95335af1b908be6044a02ccfb0a0edf529a61eff Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 Jun 2009 12:32:28 +0000 Subject: [PATCH 047/512] fix for a bug reported by zapman on blenderartist. De-activating a loop-end actuator didnt work (it kept looping). Looked into this further and it turns out that the actuators run with both positive and negative events false, the sound actuator assumes because its not negative that its a positive event and plays the sound anyway. Fix by checking that its a positive event before playing. The size limit on the message actuator was 100 which broke some scripts, set to 16384 instead. --- .../KXNetwork/KX_NetworkMessageActuator.cpp | 2 +- source/gameengine/Ketsji/KX_SoundActuator.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp index 63773352d96..32f0c3611b7 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp @@ -151,7 +151,7 @@ PyAttributeDef KX_NetworkMessageActuator::Attributes[] = { KX_PYATTRIBUTE_STRING_RW("propName", 0, 100, false, KX_NetworkMessageActuator, m_toPropName), KX_PYATTRIBUTE_STRING_RW("subject", 0, 100, false, KX_NetworkMessageActuator, m_subject), KX_PYATTRIBUTE_BOOL_RW("usePropBody", KX_NetworkMessageActuator, m_bPropBody), - KX_PYATTRIBUTE_STRING_RW("body", 0, 100, false, KX_NetworkMessageActuator, m_body), + KX_PYATTRIBUTE_STRING_RW("body", 0, 16384, false, KX_NetworkMessageActuator, m_body), { NULL } //Sentinel }; diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp index c13271f66a5..9e005cd04bb 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.cpp +++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp @@ -105,7 +105,8 @@ bool KX_SoundActuator::Update(double curtime, bool frame) // do nothing on negative events, otherwise sounds are played twice! bool bNegativeEvent = IsNegativeEvent(); - + bool bPositiveEvent = m_posevent; + RemoveAllEvents(); if (!m_soundObject) @@ -154,8 +155,17 @@ bool KX_SoundActuator::Update(double curtime, bool frame) // remember that we tried to stop the actuator m_isplaying = false; } - else - { + +#if 1 + // Warning: when de-activating the actuator, after a single negative event this runs again with... + // m_posevent==false && m_posevent==false, in this case IsNegativeEvent() returns false + // and assumes this is a positive event. + // check that we actually have a positive event so as not to play sounds when being disabled. + else if(bPositiveEvent) { // <- added since 2.49 +#else + else { // <- works in most cases except a loop-end sound will never stop unless + // the negative pulse is done continuesly +#endif if (!m_isplaying) { switch (m_type) From f1b9e76e43d5f0dd58d46cdf529e82b4647c5afa Mon Sep 17 00:00:00 2001 From: Remigiusz Fiedler Date: Wed, 17 Jun 2009 14:06:55 +0000 Subject: [PATCH 048/512] DXF-Exporter v1.35 - 2009.06.17 by migius - added export Cameras (ortho and persp) to VPORTs, incl. clipping - added export Cameras (ortho and persp) to VIEWs, incl. clipping - export multiple-instances of Mesh-Objects as BLOCK/INSERTs - on start prints dxfLibrary version --- release/scripts/export_dxf.py | 475 ++++++++++++++++++++++++---------- 1 file changed, 336 insertions(+), 139 deletions(-) diff --git a/release/scripts/export_dxf.py b/release/scripts/export_dxf.py index b32962241cc..69c8f13c2cb 100644 --- a/release/scripts/export_dxf.py +++ b/release/scripts/export_dxf.py @@ -1,13 +1,13 @@ #!BPY """ - Name: 'Autodesk DXF (.dxf)' + Name: 'Autodesk DXF (.dxf/dwg)' Blender: 249 Group: 'Export' Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).' """ -__version__ = "1.34 - 2009.06.08" +__version__ = "1.35 - 2009.06.17" __author__ = "Remigiusz Fiedler (AKA migius)" __license__ = "GPL" __url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf" @@ -31,19 +31,27 @@ IDEAs: - HPGL output, usefull for correct scaled printing of 2d drawings TODO: -- export dupligroups and dupliverts as blocks (option for the user to decide) +- export dupligroups and dupliverts as blocks (as option) - optimize POLYFACE routine: remove double-vertices -- more stable support for X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert() +- fix support for X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert() - support hierarchies: groups, instances, parented structures - support n/f-gons as POLYFACEs with invisible edges - mapping materials to DXF-styles - ProgressBar +- export rotation of Camera to VIEW/VPORT +- export parented Cameras to VIEW/VPORT - wip: write drawing extends for automatic view positioning in CAD -- wip: correct text-objects in persp-projection -- wip: translate Camera to VPORT/VIEW +- wip: fix text-objects in persp-projection - wip: translate current 3D-View to *ACTIVE-VPORT +- wip: export multiple-instances of Curve-Objects as BLOCK/INSERTs +- wip: fix support Include-Duplis, cause not conform with INSERT-method History +v1.35 - 2009.06.17 by migius +- added export Cameras (ortho and persp) to VPORTs, incl. clipping +- added export Cameras (ortho and persp) to VIEWs, incl. clipping +- export multiple-instances of Mesh-Objects as BLOCK/INSERTs +- on start prints dxfLibrary version v1.34 - 2009.06.08 by migius - export Lamps and Cameras as POINTs - export passepartout for perspective projection @@ -55,7 +63,7 @@ v1.34 - 2009.06.08 by migius - support XYmirrored 2d-curves to 2dPOLYLINEs - support thickness and elevation for curve-objects - fix extrusion 210-code (3d orientation vector) -- fix POLYFACE export, synchronized with dxfLibrary.py +- fix POLYFACE export, synchronized also dxfLibrary.py - changed to the new 2.49 method Vector.cross() - output style manager (first try) v1.33 - 2009.05.25 by migius @@ -139,10 +147,16 @@ from Blender import Registry, Object, Mesh, Curve import os import subprocess -import dxfLibrary as DXF -#reload(DXF) -#reload(dxfLibrary) -#from dxfLibrary import * +try: + import dxfLibrary as DXF + #reload(DXF) + #reload(dxfLibrary) + #from dxfLibrary import * +except: + DXF=None + print "DXF-Exporter: error! found no dxfLibrary.py module in Blender script folder" + Draw.PupMenu("Error%t|found no dxfLibrary.py module in script folder") + import math from math import atan, atan2, log10, sin, cos @@ -152,9 +166,8 @@ from math import atan, atan2, log10, sin, cos r2d = 180.0 / math.pi d2r = math.pi / 180.0 #note: d2r * angle == math.radians(angle) +#note: r2d * angle == math.degrees(angle) -print '\n\n\n' -print 'DXF-Exporter v%s *** start ***' %(__version__) #--------------------- #DEBUG = True #activates debug mode @@ -187,6 +200,7 @@ LAYERLTYPE_DEF = 0 #'CONTINUOUS' - default layer lineType ENTITYLAYER_DEF = LAYERNAME_DEF #default entity color index ENTITYCOLOR_DEF = BYLAYER #default entity color index ENTITYLTYPE_DEF = BYLAYER #default entity lineType + E_M = 0 LAB = "scroll MMB/WHEEL . wip .. todo" #"*) parts under construction" M_OBJ = 0 @@ -198,6 +212,7 @@ INIFILE_EXTENSION = '.ini' INIFILE_HEADER = '#ExportDXF.py ver.1.0 config data' INFFILE_HEADER = '#ExportDXF.py ver.1.0 analyze of DXF-data' +BLOCKREGISTRY = {} # registry and map for BLOCKs SCENE = None WORLDX = Mathutils.Vector((1,0,0)) WORLDY = Mathutils.Vector((0,1,0)) @@ -496,92 +511,136 @@ def isLeftHand(matrix): def exportMesh(ob, mx, mx_n, me=None, **common): """converts Mesh-Object to desired projection and representation(DXF-Entity type) """ + global BLOCKREGISTRY entities = [] - #print 'deb:exportMesh() common=', common #--------- - if me==None: + block = None + #print 'deb:exportMesh() given common=', common #--------- + if 1: #temp off, debug only! #me==None: me = ob.getData(mesh=1) else: me.getFromObject(ob) - # me.transform(mx); get verts data; me.transform(mx_inv)= back to the origin state - # above .transform method is faster, but bad, cause invasive: + # idea: me.transform(mx); get verts data; me.transform(mx_inv)= back to the origin state + # the .transform-method is fast, but bad, cause invasive: # it manipulates original geometry and by retransformation lefts back rounding-errors # we dont want to manipulate original data! #temp_verts = me.verts[:] #doesn't work on ubuntu(Yorik), bug? if me.verts: #print 'deb:exportMesh() started' #--------- - allpoints = [v.co for v in me.verts] - allpoints = projected_co(allpoints, mx) - allpoints = toNewOrigin(allpoints) - faces=[] - edges=[] - if me.faces and PROJECTION and HIDDEN_LINES: - #if DEBUG: print 'deb:exportMesh HIDDEN_LINES mode' #--------- - faces, edges = hidden_status(me.faces, mx, mx_n) - faces = [[v.index for v in me.faces[f_nr].verts] for f_nr in faces] - else: - #if DEBUG: print 'deb:exportMesh STANDARD mode' #--------- - for e in me.edges: edges.append(e.key) - #faces = [f.index for f in me.faces] - faces = [[v.index for v in f.verts] for f in me.faces] - #faces = [[allpoints[v.index] for v in f.verts] for f in me.faces] - #print 'deb: allpoints=\n', allpoints #--------- - #print 'deb: edges=\n', edges #--------- - #print 'deb: faces=\n', faces #--------- - if isLeftHand(mx): # then change vertex-order in every face - for f in faces: - f.reverse() - #f = [f[-1]] + f[:-1] #TODO: might be needed - #print 'deb: faces=\n', faces #--------- - c = mesh_as_list[GUI_A['mesh_as'].val] - if 'POINTs'==c: # export Mesh as multiple POINTs - for p in allpoints: - dxfPOINT = DXF.Point(points=[p],**common) - entities.append(dxfPOINT) - elif 'LINEs'==c or (not faces): - if edges and allpoints: - if DEBUG: mesh_drawBlender(allpoints, edges, None) #deb: draw to blender scene - for e in edges: - points = [allpoints[e[0]], allpoints[e[1]]] - dxfLINE = DXF.Line(points, **common) - entities.append(dxfLINE) - elif faces: - if c in ('POLYFACE','POLYLINE'): - if allpoints: - #TODO: purge allpoints: left only vertices used by faces - if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene - if not (PROJECTION and HIDDEN_LINES): - faces = [[v+1 for v in f] for f in faces] - else: - # for back-Faces-mode remove face-free verts - map=verts_state= [0]*len(allpoints) - for f in faces: - for v in f: - verts_state[v]=1 - if 0 in verts_state: # if dirty state - i,newverts=0,[] - for used_i,used in enumerate(verts_state): - if used: - newverts.append(allpoints[used_i]) - map[used_i]=i - i+=1 - allpoints = newverts - faces = [[map[v]+1 for v in f] for f in faces] - dxfPOLYFACE = DXF.PolyLine([allpoints, faces], flag=64, **common) - #print '\n deb: dxfPOLYFACE=',dxfPOLYFACE #------------- - entities.append(dxfPOLYFACE) - elif '3DFACEs'==c: - if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene + #print 'deb:exportMesh() ob.name=', ob.name #--------- + #print 'deb:exportMesh() me.name=', me.name #--------- + #print 'deb:exportMesh() me.users=', me.users #--------- + # check if there are more instances of this mesh (if used by other objects), then write to BLOCK/INSERT + if me.users>1 and not PROJECTION: + if me.name in BLOCKREGISTRY.keys(): + insert_name = BLOCKREGISTRY[me.name] + # write INSERT to entities + entities = exportInsert(ob, mx,insert_name, **common) + else: + # generate geom_output in ObjectCS + allpoints = [v.co for v in me.verts] + identity_matrix = Mathutils.Matrix().identity() + allpoints = projected_co(allpoints, identity_matrix) + #allpoints = toGlobalOrigin(allpoints) + faces=[] + edges=[] + for e in me.edges: edges.append(e.key) + faces = [[v.index for v in f.verts] for f in me.faces] + entities = writeMeshEntities(allpoints, edges, faces, **common) + if entities: # if not empty block + # write BLOCK definition and INSERT entity + # BLOCKREGISTRY = dictionary 'blender_name':'dxf_name'.append(me.name) + BLOCKREGISTRY[me.name]=validDXFr12name(('ME_'+ me.name)) + insert_name = BLOCKREGISTRY[me.name] + block = DXF.Block(insert_name,flag=0,base=(0,0,0),entities=entities) + # write INSERT as entity + entities = exportInsert(ob, mx, insert_name, **common) + + else: # no other instances, so go the standard way + allpoints = [v.co for v in me.verts] + allpoints = projected_co(allpoints, mx) + allpoints = toGlobalOrigin(allpoints) + faces=[] + edges=[] + if me.faces and PROJECTION and HIDDEN_LINES: + #if DEBUG: print 'deb:exportMesh HIDDEN_LINES mode' #--------- + faces, edges = hidden_status(me.faces, mx, mx_n) + faces = [[v.index for v in me.faces[f_nr].verts] for f_nr in faces] + else: + #if DEBUG: print 'deb:exportMesh STANDARD mode' #--------- + for e in me.edges: edges.append(e.key) + #faces = [f.index for f in me.faces] + faces = [[v.index for v in f.verts] for f in me.faces] + #faces = [[allpoints[v.index] for v in f.verts] for f in me.faces] + #print 'deb: allpoints=\n', allpoints #--------- + #print 'deb: edges=\n', edges #--------- + #print 'deb: faces=\n', faces #--------- + if isLeftHand(mx): # then change vertex-order in every face for f in faces: - #print 'deb: face=', f #--------- - points = [allpoints[key] for key in f] - #points = [p.co[:3] for p in points] - #print 'deb: pointsXX=\n', points #--------- - dxfFACE = DXF.Face(points, **common) - entities.append(dxfFACE) - + f.reverse() + #f = [f[-1]] + f[:-1] #TODO: might be needed + #print 'deb: faces=\n', faces #--------- + entities = writeMeshEntities(allpoints, edges, faces, **common) + + return entities, block + + +#------------------------------------------------- +def writeMeshEntities(allpoints, edges, faces, **common): + """help routine for exportMesh() + """ + entities = [] + + c = mesh_as_list[GUI_A['mesh_as'].val] + if 'POINTs'==c: # export Mesh as multiple POINTs + for p in allpoints: + dxfPOINT = DXF.Point(points=[p],**common) + entities.append(dxfPOINT) + elif 'LINEs'==c or (not faces): + if edges and allpoints: + if DEBUG: mesh_drawBlender(allpoints, edges, None) #deb: draw to blender scene + for e in edges: + points = [allpoints[e[0]], allpoints[e[1]]] + dxfLINE = DXF.Line(points, **common) + entities.append(dxfLINE) + elif faces: + if c in ('POLYFACE','POLYLINE'): + if allpoints: + #TODO: purge allpoints: left only vertices used by faces + if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene + if not (PROJECTION and HIDDEN_LINES): + faces = [[v+1 for v in f] for f in faces] + else: + # for back-Faces-mode remove face-free verts + map=verts_state= [0]*len(allpoints) + for f in faces: + for v in f: + verts_state[v]=1 + if 0 in verts_state: # if dirty state + i,newverts=0,[] + for used_i,used in enumerate(verts_state): + if used: + newverts.append(allpoints[used_i]) + map[used_i]=i + i+=1 + allpoints = newverts + faces = [[map[v]+1 for v in f] for f in faces] + dxfPOLYFACE = DXF.PolyLine([allpoints, faces], flag=64, **common) + #print '\n deb: dxfPOLYFACE=',dxfPOLYFACE #------------- + entities.append(dxfPOLYFACE) + elif '3DFACEs'==c: + if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene + for f in faces: + #print 'deb: face=', f #--------- + points = [allpoints[key] for key in f] + #points = [p.co[:3] for p in points] + #print 'deb: pointsXX=\n', points #--------- + dxfFACE = DXF.Face(points, **common) + entities.append(dxfFACE) + return entities + #----------------------------------------------------- def mesh_drawBlender(vertList, edgeList, faceList, name="dxfMesh", flatten=False, AT_CUR=True, link=True): #print 'deb:mesh_drawBlender started XXXXXXXXXXXXXXXXXX' #--------- @@ -640,7 +699,7 @@ def curve_drawBlender(vertList, org_point=[0.0,0.0,0.0], closed=0, name="dxfCurv #----------------------------------------------------- -def toNewOrigin(points): +def toGlobalOrigin(points): """relocates points to the new location needs a list of points [x,y,z] """ @@ -658,7 +717,7 @@ def exportEmpty(ob, mx, mw, **common): """ p = Mathutils.Vector(ob.loc) [p] = projected_co([p], mx) - [p] = toNewOrigin([p]) + [p] = toGlobalOrigin([p]) entities = [] c = empty_as_list[GUI_A['empty_as'].val] @@ -671,16 +730,50 @@ def exportEmpty(ob, mx, mw, **common): def exportCamera(ob, mx, mw, **common): """converts Camera-Object to desired projection and representation(DXF-Entity type) """ - p = Mathutils.Vector(ob.loc) - [p] = projected_co([p], mx) - [p] = toNewOrigin([p]) + location = Mathutils.Vector(ob.loc) + [location] = projected_co([location], mx) + [location] = toGlobalOrigin([location]) + view_name=validDXFr12name(('CAM_'+ ob.name)) - entities = [] + camera = Camera.Get(ob.getData(name_only=True)) + #print 'deb: camera=', dir(camera) #------------------ + if camera.type=='persp': + mode = 1+2+4+16 + # mode flags: 1=persp, 2=frontclip, 4=backclip,16=FrontZ + elif camera.type=='ortho': + mode = 0+2+4+16 + + leftBottom=(0.0,0.0) # default + rightTop=(1.0,1.0) # default + center=(0.0,0.0) # default + + direction = Mathutils.Vector(0.0,0.0,1.0) * mx.rotationPart() # in W-C-S + direction.normalize() + target=Mathutils.Vector(ob.loc) - direction # in W-C-S + #ratio=1.0 + width=height= camera.scale # for ortho-camera + lens = camera.lens # for persp-camera + frontClipping = -(camera.clipStart - 1.0) + backClipping = -(camera.clipEnd - 1.0) + + entities, vport, view = [], None, None c = camera_as_list[GUI_A['camera_as'].val] if c=="POINT": # export as POINT - dxfPOINT = DXF.Point(points=[p],**common) + dxfPOINT = DXF.Point(points=[location],**common) entities.append(dxfPOINT) - return entities + elif c=="VIEW": # export as VIEW + view = DXF.View(name=view_name, + center=center, width=width, height=height, + frontClipping=frontClipping,backClipping=backClipping, + direction=direction,target=target,lens=lens,mode=mode + ) + elif c=="VPORT": # export as VPORT + vport = DXF.VPort(name=view_name, + center=center, ratio=1.0, height=height, + frontClipping=frontClipping,backClipping=backClipping, + direction=direction,target=target,lens=lens,mode=mode + ) + return entities, vport, view #----------------------------------------------------- def exportLamp(ob, mx, mw, **common): @@ -688,7 +781,7 @@ def exportLamp(ob, mx, mw, **common): """ p = Mathutils.Vector(ob.loc) [p] = projected_co([p], mx) - [p] = toNewOrigin([p]) + [p] = toGlobalOrigin([p]) entities = [] c = lamp_as_list[GUI_A['lamp_as'].val] @@ -697,6 +790,75 @@ def exportLamp(ob, mx, mw, **common): entities.append(dxfPOINT) return entities +#----------------------------------------------------- +def exportInsert(ob, mx, insert_name, **common): + """converts Object to DXF-INSERT in given orientation + """ + WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem + sizeX = ob.SizeX + sizeY = ob.SizeY + sizeZ = ob.SizeZ + rotX = ob.RotX + rotY = ob.RotY + rotZ = ob.RotZ + #print 'deb: sizeX=%s, sizeY=%s' %(sizeX, sizeY) #--------- + + Thickness,Extrusion,ZRotation,Elevation = None,None,None,None + + AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector + if not PROJECTION: + #Extrusion, ZRotation, Elevation = getExtrusion(mx) + Extrusion, AXaxis = getExtrusion(mx) + + entities = [] + + if 1: + if not PROJECTION: + ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(mx,Extrusion,\ + AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ) + ZRotation *= r2d + point = ECS_origin + else: #TODO: fails correct location + point1 = Mathutils.Vector(ob.loc) + [point] = projected_co([point1], mx) + if PERSPECTIVE: + clipStart = 10.0 + coef = -clipStart / (point1*mx)[2] + #print 'deb: coef=', coef #-------------- + #TODO: ? sizeX *= coef + #sizeY *= coef + #sizeZ *= coef + + #print 'deb: point=', point #-------------- + [point] = toGlobalOrigin([point]) + + #if DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene + common['extrusion']= Extrusion + #common['elevation']= Elevation + #print 'deb: common=', common #------------------ + if 0: #DEBUG + #linepoints = [[0,0,0], [AXaxis[0],AXaxis[1],AXaxis[2]]] + linepoints = [[0,0,0], point] + dxfLINE = DXF.Line(linepoints,**common) + entities.append(dxfLINE) + + xscale=sizeX + yscale=sizeY + zscale=sizeZ + cols=None + colspacing=None + rows=None + rowspacing=None + + dxfINSERT = DXF.Insert(insert_name,point=point,rotation=ZRotation,\ + xscale=xscale,yscale=yscale,zscale=zscale,\ + cols=cols,colspacing=colspacing,rows=rows,rowspacing=rowspacing,\ + **common) + entities.append(dxfINSERT) + + return entities + + #----------------------------------------------------- def exportText(ob, mx, mw, **common): """converts Text-Object to desired projection and representation(DXF-Entity type) @@ -755,7 +917,7 @@ def exportText(ob, mx, mw, **common): #print 'deb: coef=', coef #-------------- #print 'deb: point=', point #-------------- - [point] = toNewOrigin([point]) + [point] = toGlobalOrigin([point]) point2 = point #if DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene @@ -835,6 +997,7 @@ def exportCurve(ob, mx, mw, **common): """converts Curve-Object to desired projection and representation(DXF-Entity type) """ entities = [] + block = None curve = ob.getData() WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem #WCS_loc = [0.0,0.0,0.0] @@ -903,7 +1066,7 @@ def exportCurve(ob, mx, mw, **common): if cur.isCyclic(): closed = 1 else: closed = 0 - points = toNewOrigin(points) + points = toGlobalOrigin(points) if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene common['extrusion']= Extrusion @@ -935,7 +1098,7 @@ def exportCurve(ob, mx, mw, **common): points = projected_co(points, mx) if cur.isCyclic(): points.append(points[0]) #print 'deb: points', points #-------------- - points = toNewOrigin(points) + points = toGlobalOrigin(points) if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene common['extrusion']= Extrusion @@ -959,7 +1122,7 @@ def exportCurve(ob, mx, mw, **common): dxfPOINT = DXF.Point(points=[p],**common) entities.append(dxfPOINT) - return entities + return entities, block #----------------------------------------------------- def getClipBox(camera): @@ -1075,12 +1238,12 @@ def drawClipBox(clip_box): verts.append([max_X2, max_Y2, max_Z]) verts.append([min_X2, max_Y2, max_Z]) faces = [[0,1,2,3],[4,5,6,7]] - nme = Mesh.New() - nme.verts.extend(verts) - nme.faces.extend(faces) + newmesh = Mesh.New() + newmesh.verts.extend(verts) + newmesh.faces.extend(faces) plan = Object.New('Mesh','clip_box') - plan.link(nme) + plan.link(newmesh) sce = Scene.GetCurrent() sce.objects.link(plan) plan.setMatrix(sce.objects.camera.matrix) @@ -1170,19 +1333,34 @@ def getCommons(ob): #----------------------------------------------------- def do_export(export_list, filepath): - global PERSPECTIVE, CAMERAVIEW + global PERSPECTIVE, CAMERAVIEW, BLOCKREGISTRY Window.WaitCursor(1) t = Blender.sys.time() # init Drawing --------------------- d=DXF.Drawing() # add Tables ----------------- - #d.blocks.append(b) #table blocks - #goes automatic: d.styles.append(DXF.Style()) #table styles + # initialized automatic: d.blocks.append(b) #section BLOCKS + # initialized automatic: d.styles.append(DXF.Style()) #table STYLE + + #table LTYPE --------------- + #d.linetypes.append(DXF.LineType(name='CONTINUOUS',description='--------',elements=[0.0])) + d.linetypes.append(DXF.LineType(name='DOT',description='. . . . . . .',elements=[0.25, 0.0, -0.25])) + d.linetypes.append(DXF.LineType(name='DASHED',description='__ __ __ __ __',elements=[0.8, 0.5, -0.3])) + d.linetypes.append(DXF.LineType(name='DASHDOT',description='__ . __ . __ .',elements=[1.0, 0.5, -0.25, 0.0, -0.25])) + d.linetypes.append(DXF.LineType(name='DIVIDE',description='____ . . ____ . . ',elements=[1.25, 0.5, -0.25, 0.0, -0.25, 0.0, -0.25])) + d.linetypes.append(DXF.LineType(name='BORDER',description='__ __ . __ __ . ',elements=[1.75, 0.5, -0.25, 0.5, -0.25, 0.0, -0.25])) + d.linetypes.append(DXF.LineType(name='HIDDEN',description='__ __ __ __ __',elements=[0.4, 0.25, -0.25])) + d.linetypes.append(DXF.LineType(name='CENTER',description='____ _ ____ _ __',elements=[2.0, 1.25, -0.25, 0.25, -0.25])) + + #d.vports.append(DXF.VPort('*ACTIVE')) + d.vports.append(DXF.VPort('*ACTIVE',center=(-5.0,1.0),height=10.0)) + #d.vports.append(DXF.VPort('*ACTIVE',leftBottom=(-100.0,-60.0),rightTop=(100.0,60.0))) #d.views.append(DXF.View('Normal')) #table view d.views.append(DXF.ViewByWindow('BF_TOPVIEW',leftBottom=(-100,-60),rightTop=(100,60))) #idem # add Entities -------------------- + BLOCKREGISTRY = {} # registry and map for BLOCKs something_ready = 0 selected_len = len(export_list) sce = Scene.GetCurrent() @@ -1246,9 +1424,10 @@ def do_export(export_list, filepath): layernames = [] for ob,mx in export_list: entities = [] + block = None #mx = ob.matrix.copy() #print 'deb: ob =', ob #--------- - print 'deb: ob.type =', ob.type #--------- + #print 'deb: ob.type =', ob.type #--------- #print 'deb: mx =\n', mx #--------- #print 'deb: mw0 =\n', mw0 #--------- #mx_n is trans-matrix for normal_vectors for front-side faces @@ -1274,10 +1453,10 @@ def do_export(export_list, filepath): d.layers.append(DXF.Layer(color=tempcolor, name=elayer)) if (ob.type == 'Mesh') and GUI_B['bmesh'].val: - entities = exportMesh(ob, mx, mx_n, tmp_me,\ + entities, block = exportMesh(ob, mx, mx_n, tmp_me,\ paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) elif (ob.type == 'Curve') and GUI_B['bcurve'].val: - entities = exportCurve(ob, mx, mw, \ + entities, block = exportCurve(ob, mx, mw, \ paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) elif (ob.type == 'Empty') and GUI_B['empty'].val: entities = exportEmpty(ob, mx, mw, \ @@ -1286,8 +1465,10 @@ def do_export(export_list, filepath): entities = exportText(ob, mx, mw, \ paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) elif (ob.type == 'Camera') and GUI_B['camera'].val: - entities = exportCamera(ob, mx, mw, \ + entities, vport, view = exportCamera(ob, mx, mw, \ paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) + if vport: d.vports.append(vport) + if view: d.views.append(view) elif (ob.type == 'Lamp') and GUI_B['lamp'].val: entities = exportLamp(ob, mx, mw, \ paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) @@ -1297,16 +1478,26 @@ def do_export(export_list, filepath): for e in entities: d.append(e) - if something_ready: - if PERSPECTIVE: # draw view border - mw2 = Mathutils.Matrix().identity() - points = projected_co(border, mw2) - closed = 1 - points = toNewOrigin(points) + if block: + d.blocks.append(block) #add to BLOCK-section - dxfPLINE = DXF.PolyLine(points,points[0],closed,\ - paperspace=espace, color=LAYERCOLOR_DEF) - d.append(dxfPLINE) + + if something_ready: + if PERSPECTIVE: # generate view border - passepartout + identity_matrix = Mathutils.Matrix().identity() + points = projected_co(border, identity_matrix) + closed = 1 + points = toGlobalOrigin(points) + c = curve_as_list[GUI_A['curve_as'].val] + if c=="LINEs": # export Curve as multiple LINEs + for i in range(len(points)-1): + linepoints = [points[i], points[i+1]] + dxfLINE = DXF.Line(linepoints,paperspace=espace,color=LAYERCOLOR_DEF) + entities.append(dxfLINE) + else: + dxfPLINE = DXF.PolyLine(points,points[0],closed,\ + paperspace=espace, color=LAYERCOLOR_DEF) + d.append(dxfPLINE) if not GUI_A['outputDWG_on'].val: @@ -1573,7 +1764,7 @@ parent_as_menu = prepareMenu("export to: %t", parent_as_list) proxy_as_list = ["..BLOCK","..XREF","..ungroup","..POINT"] proxy_as_menu = prepareMenu("export to: %t", proxy_as_list) -camera_as_list = ["..BLOCK","..A_CAMERA","..VPORT","..VIEW","POINT"] +camera_as_list = ["..BLOCK","..A_CAMERA","VPORT","VIEW","POINT"] camera_as_menu = prepareMenu("export to: %t", camera_as_list) lamp_as_list = ["..BLOCK","..A_LAMP","POINT"] @@ -2750,23 +2941,29 @@ def multi_export(DIR): #TODO: #----------------------------------------------------- if __name__=='__main__': - if not DXF.copy: - Draw.PupMenu('Error%t|The dxfLibrary.py script requires a full python install') - #Window.FileSelector(dxf_export_ui, 'EXPORT DXF', Blender.sys.makename(ext='.dxf')) - # recall last used DXF-file and INI-file names - dxffilename = check_RegistryKey('dxfFileName') - #print 'deb:start dxffilename:', dxffilename #---------------- - if dxffilename: dxfFileName.val = dxffilename - else: - dirname = Blender.sys.dirname(Blender.Get('filename')) - #print 'deb:start dirname:', dirname #---------------- - dxfFileName.val = Blender.sys.join(dirname, '') - inifilename = check_RegistryKey('iniFileName') - if inifilename: iniFileName.val = inifilename - - updateMenuCAMERA() - updateCAMERA() - - Draw.Register(draw_UI, event, bevent) - + if DXF: + print '\n\n\n' + print 'DXF-Exporter v%s *** start ***' %(__version__) #--------------------- + print 'with Library %s' %(DXF.__version__) #--------------------- + if not DXF.copy: + print "DXF-Exporter: dxfLibrary.py script requires a full Python install" + Draw.PupMenu('Error%t|The dxfLibrary.py script requires a full Python install') + else: + #Window.FileSelector(dxf_export_ui, 'EXPORT DXF', Blender.sys.makename(ext='.dxf')) + # recall last used DXF-file and INI-file names + dxffilename = check_RegistryKey('dxfFileName') + #print 'deb:start dxffilename:', dxffilename #---------------- + if dxffilename: dxfFileName.val = dxffilename + else: + dirname = Blender.sys.dirname(Blender.Get('filename')) + #print 'deb:start dirname:', dirname #---------------- + dxfFileName.val = Blender.sys.join(dirname, '') + inifilename = check_RegistryKey('iniFileName') + if inifilename: iniFileName.val = inifilename + + updateMenuCAMERA() + updateCAMERA() + + Draw.Register(draw_UI, event, bevent) + \ No newline at end of file From b033f07306bea5d210ac23544378de667f2f1324 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Wed, 17 Jun 2009 21:18:32 +0000 Subject: [PATCH 049/512] Fix for bug: [#18619] Shadow face flag ignores object's scale In time for the 2.49a ahoy :) --- .../gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp index ffff7185fe4..8ed36e860b4 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp @@ -261,6 +261,12 @@ void KX_BlenderRenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmat // couldn't find something to cast the shadow on... glMultMatrixd(oglmatrix); } + else + { // we found the "ground", but the cast matrix doesn't take + // scaling in consideration, so we must apply the object scale + MT_Vector3 size = gameobj->GetSGNode()->GetLocalScale(); + glScalef(size[0], size[1], size[2]); + } } else { @@ -384,5 +390,4 @@ void KX_BlenderRenderTools::Update2DFilter(vector& propNames, void* void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas) { m_filtermanager.RenderFilters(canvas); -} - +} \ No newline at end of file From d3537256ca44655d90357465321d0370d908a47d Mon Sep 17 00:00:00 2001 From: Remigiusz Fiedler Date: Wed, 17 Jun 2009 23:25:22 +0000 Subject: [PATCH 050/512] DXF-Exporter: apply modifiers: reactivate temporary deactivated code --- release/scripts/export_dxf.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/release/scripts/export_dxf.py b/release/scripts/export_dxf.py index 69c8f13c2cb..0f8154630e3 100644 --- a/release/scripts/export_dxf.py +++ b/release/scripts/export_dxf.py @@ -49,7 +49,7 @@ TODO: History v1.35 - 2009.06.17 by migius - added export Cameras (ortho and persp) to VPORTs, incl. clipping -- added export Cameras (ortho and persp) to VIEWs, incl. clipping +- added export Cameras (ortho and persp) to VIEWs, incl. clipping - export multiple-instances of Mesh-Objects as BLOCK/INSERTs - on start prints dxfLibrary version v1.34 - 2009.06.08 by migius @@ -515,7 +515,7 @@ def exportMesh(ob, mx, mx_n, me=None, **common): entities = [] block = None #print 'deb:exportMesh() given common=', common #--------- - if 1: #temp off, debug only! #me==None: + if me==None: me = ob.getData(mesh=1) else: me.getFromObject(ob) @@ -1361,6 +1361,7 @@ def do_export(export_list, filepath): # add Entities -------------------- BLOCKREGISTRY = {} # registry and map for BLOCKs + PERSPECTIVE = 0 something_ready = 0 selected_len = len(export_list) sce = Scene.GetCurrent() From 0489fb731afb3479df8906749fb089160cccc454 Mon Sep 17 00:00:00 2001 From: Remigiusz Fiedler Date: Thu, 18 Jun 2009 10:34:16 +0000 Subject: [PATCH 051/512] DXF-Exporter v1.35 - 2009.06.18 by migius - missing support for multiple-instances of Curve-Objects as BLOCK/INSERTs --- release/scripts/export_dxf.py | 313 +++++++++++++++++++++------------- 1 file changed, 192 insertions(+), 121 deletions(-) diff --git a/release/scripts/export_dxf.py b/release/scripts/export_dxf.py index 0f8154630e3..17f2132fbe8 100644 --- a/release/scripts/export_dxf.py +++ b/release/scripts/export_dxf.py @@ -7,7 +7,7 @@ Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).' """ -__version__ = "1.35 - 2009.06.17" +__version__ = "1.35 - 2009.06.18" __author__ = "Remigiusz Fiedler (AKA migius)" __license__ = "GPL" __url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf" @@ -43,11 +43,11 @@ TODO: - wip: write drawing extends for automatic view positioning in CAD - wip: fix text-objects in persp-projection - wip: translate current 3D-View to *ACTIVE-VPORT -- wip: export multiple-instances of Curve-Objects as BLOCK/INSERTs - wip: fix support Include-Duplis, cause not conform with INSERT-method History -v1.35 - 2009.06.17 by migius +v1.35 - 2009.06.18 by migius +- export multiple-instances of Curve-Objects as BLOCK/INSERTs - added export Cameras (ortho and persp) to VPORTs, incl. clipping - added export Cameras (ortho and persp) to VIEWs, incl. clipping - export multiple-instances of Mesh-Objects as BLOCK/INSERTs @@ -183,6 +183,7 @@ SHADOWS = 0 # sun/shadows simulation CAMERA = 1 # selected camera index PERSPECTIVE = 0 # projection (camera) type: perspective, opposite to orthographic CAMERAVIEW = 0 # use camera for projection, opposite is 3d-view +INSTANCES = 1 # Export instances of Mesh/Curve as BLOCK/INSERTs on/off APPLY_MODIFIERS = 1 INCLUDE_DUPLIS = 0 OUTPUT_DWG = 0 #optional save to DWG with extern converter @@ -531,7 +532,7 @@ def exportMesh(ob, mx, mx_n, me=None, **common): #print 'deb:exportMesh() me.name=', me.name #--------- #print 'deb:exportMesh() me.users=', me.users #--------- # check if there are more instances of this mesh (if used by other objects), then write to BLOCK/INSERT - if me.users>1 and not PROJECTION: + if GUI_A['instances_on'].val and me.users>1 and not PROJECTION: if me.name in BLOCKREGISTRY.keys(): insert_name = BLOCKREGISTRY[me.name] # write INSERT to entities @@ -999,130 +1000,194 @@ def exportCurve(ob, mx, mw, **common): entities = [] block = None curve = ob.getData() - WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem - #WCS_loc = [0.0,0.0,0.0] - #print 'deb: WCS_loc=', WCS_loc #--------- - sizeX = ob.SizeX - sizeY = ob.SizeY - sizeZ = ob.SizeZ - rotX = ob.RotX - rotY = ob.RotY - rotZ = ob.RotZ - #print 'deb: sizeX=%s, sizeY=%s' %(sizeX, sizeY) #--------- - - Thickness,Extrusion,ZRotation,Elevation = None,None,None,None - AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector - OCS_origin = [0,0,0] - if not PROJECTION: - #Extrusion, ZRotation, Elevation = getExtrusion(mx) - Extrusion, AXaxis = getExtrusion(mx) - - # no thickness/width for POLYLINEs converted into ScreenCS - #print 'deb: curve.ext1=', curve.ext1 #--------- - if curve.ext1: Thickness = curve.ext1 * sizeZ - if curve.ext2 and sizeX==sizeY: - Width = curve.ext2 * sizeX - if "POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # export as POLYLINE - ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(mx,Extrusion,\ - AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ) - - for cur in curve: - #print 'deb: START cur=', cur #-------------- - points = [] - if cur.isNurb(): - for point in cur: - #print 'deb:isNurb point=', point #--------- - vec = point[0:3] - #print 'deb: vec=', vec #--------- - pkt = Mathutils.Vector(vec) - #print 'deb: pkt=', pkt #--------- - points.append(pkt) + #print 'deb: curve=', dir(curve) #--------- + # TODO: should be: if curve.users>1 and not (PERSPECTIVE or (PROJECTION and HIDDEN_MODE): + if GUI_A['instances_on'].val and curve.users>1 and not PROJECTION: + if curve.name in BLOCKREGISTRY.keys(): + insert_name = BLOCKREGISTRY[curve.name] + # write INSERT to entities + entities = exportInsert(ob, mx,insert_name, **common) else: - for point in cur: - #print 'deb:isBezier point=', point.getTriple() #--------- - vec = point.getTriple()[1] - #print 'deb: vec=', vec #--------- - pkt = Mathutils.Vector(vec) - #print 'deb: pkt=', pkt #--------- - points.append(pkt) + # generate geom_output in ObjectCS + imx = Mathutils.Matrix().identity() + WCS_loc = [0,0,0] # WCS_loc is object location in WorldCoordSystem + #print 'deb: WCS_loc=', WCS_loc #--------- + sizeX = sizeY = sizeZ = 1.0 + rotX = rotY = rotZ = 0.0 + Thickness,Extrusion,ZRotation,Elevation = None,None,None,None + ZRotation,Zrotmatrix,OCS_origin,ECS_origin = None,None,None,None + AXaxis = imx[0].copy().resize3D() # = ArbitraryXvector + OCS_origin = [0,0,0] + if not PROJECTION: + #Extrusion, ZRotation, Elevation = getExtrusion(mx) + Extrusion, AXaxis = getExtrusion(imx) + + # no thickness/width for POLYLINEs converted into Screen-C-S + #print 'deb: curve.ext1=', curve.ext1 #--------- + if curve.ext1: Thickness = curve.ext1 * sizeZ + if curve.ext2 and sizeX==sizeY: + Width = curve.ext2 * sizeX + if "POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # export as POLYLINE + ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(imx,Extrusion,\ + AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ) - #print 'deb: points', points #-------------- - if len(points)>1: - c = curve_as_list[GUI_A['curve_as'].val] + entities = writeCurveEntities(curve, imx, + Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix, + WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ, + **common) - if c=="POLYLINE": # export Curve as POLYLINE - if not PROJECTION: - # recalculate points(2d=X,Y) into Entity-Coords-System - for p in points: # list of vectors - p[0] *= sizeX - p[1] *= sizeY - p2 = p * Zrotmatrix - p2[0] += ECS_origin[0] - p2[1] += ECS_origin[1] - p[0],p[1] = p2[0],p2[1] - else: + if entities: # if not empty block + # write BLOCK definition and INSERT entity + # BLOCKREGISTRY = dictionary 'blender_name':'dxf_name'.append(me.name) + BLOCKREGISTRY[curve.name]=validDXFr12name(('CU_'+ curve.name)) + insert_name = BLOCKREGISTRY[curve.name] + block = DXF.Block(insert_name,flag=0,base=(0,0,0),entities=entities) + # write INSERT as entity + entities = exportInsert(ob, mx, insert_name, **common) + + else: # no other instances, so go the standard way + WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem + #print 'deb: WCS_loc=', WCS_loc #--------- + sizeX = ob.SizeX + sizeY = ob.SizeY + sizeZ = ob.SizeZ + rotX = ob.RotX + rotY = ob.RotY + rotZ = ob.RotZ + #print 'deb: sizeX=%s, sizeY=%s' %(sizeX, sizeY) #--------- + + Thickness,Extrusion,ZRotation,Elevation = None,None,None,None + ZRotation,Zrotmatrix,OCS_origin,ECS_origin = None,None,None,None + AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector + OCS_origin = [0,0,0] + if not PROJECTION: + #Extrusion, ZRotation, Elevation = getExtrusion(mx) + Extrusion, AXaxis = getExtrusion(mx) + + # no thickness/width for POLYLINEs converted into Screen-C-S + #print 'deb: curve.ext1=', curve.ext1 #--------- + if curve.ext1: Thickness = curve.ext1 * sizeZ + if curve.ext2 and sizeX==sizeY: + Width = curve.ext2 * sizeX + if "POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # export as POLYLINE + ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(mx,Extrusion,\ + AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ) + entities = writeCurveEntities(curve, mx, + Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix, + WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ, + **common) + + return entities, block + + +#------------------------------------------------- +def writeCurveEntities(curve, mx, + Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix, + WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ, + **common): + """help routine for exportCurve() + """ + entities = [] + + if 1: + for cur in curve: + #print 'deb: START cur=', cur #-------------- + points = [] + if cur.isNurb(): + for point in cur: + #print 'deb:isNurb point=', point #--------- + vec = point[0:3] + #print 'deb: vec=', vec #--------- + pkt = Mathutils.Vector(vec) + #print 'deb: pkt=', pkt #--------- + points.append(pkt) + else: + for point in cur: + #print 'deb:isBezier point=', point.getTriple() #--------- + vec = point.getTriple()[1] + #print 'deb: vec=', vec #--------- + pkt = Mathutils.Vector(vec) + #print 'deb: pkt=', pkt #--------- + points.append(pkt) + + #print 'deb: points', points #-------------- + if len(points)>1: + c = curve_as_list[GUI_A['curve_as'].val] + + if c=="POLYLINE": # export Curve as POLYLINE + if not PROJECTION: + # recalculate points(2d=X,Y) into Entity-Coords-System + for p in points: # list of vectors + p[0] *= sizeX + p[1] *= sizeY + p2 = p * Zrotmatrix + p2[0] += ECS_origin[0] + p2[1] += ECS_origin[1] + p[0],p[1] = p2[0],p2[1] + else: + points = projected_co(points, mx) + #print 'deb: points', points #-------------- + + if cur.isCyclic(): closed = 1 + else: closed = 0 + points = toGlobalOrigin(points) + + if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene + + common['extrusion']= Extrusion + ##common['rotation']= ZRotation + ##common['elevation']= Elevation + common['thickness']= Thickness + #print 'deb: common=', common #------------------ + + if 0: #DEBUG + p=AXaxis[:3] + entities.append(DXF.Line([[0,0,0], p],**common)) + p=ECS_origin[:3] + entities.append(DXF.Line([[0,0,0], p],**common)) + common['color']= 5 + p=OCS_origin[:3] + entities.append(DXF.Line([[0,0,0], p],**common)) + #OCS_origin=[0,0,0] #only debug---------------- + dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) + entities.append(dxfPLINE) + + dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) + entities.append(dxfPLINE) + if Thickness: + common['thickness']= -Thickness + dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) + entities.append(dxfPLINE) + + elif c=="LINEs": # export Curve as multiple LINEs points = projected_co(points, mx) - #print 'deb: points', points #-------------- - - if cur.isCyclic(): closed = 1 - else: closed = 0 - points = toGlobalOrigin(points) - - if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene - common['extrusion']= Extrusion - ##common['rotation']= ZRotation - ##common['elevation']= Elevation - common['thickness']= Thickness - #print 'deb: common=', common #------------------ - - if 0: #DEBUG - p=AXaxis[:3] - entities.append(DXF.Line([[0,0,0], p],**common)) - p=ECS_origin[:3] - entities.append(DXF.Line([[0,0,0], p],**common)) - common['color']= 5 - p=OCS_origin[:3] - entities.append(DXF.Line([[0,0,0], p],**common)) - #OCS_origin=[0,0,0] #only debug---------------- - dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) - entities.append(dxfPLINE) - - dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) - entities.append(dxfPLINE) - if Thickness: - common['thickness']= -Thickness - dxfPLINE = DXF.PolyLine(points,OCS_origin,closed,**common) - entities.append(dxfPLINE) - - elif c=="LINEs": # export Curve as multiple LINEs - points = projected_co(points, mx) - if cur.isCyclic(): points.append(points[0]) - #print 'deb: points', points #-------------- - points = toGlobalOrigin(points) - - if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene - common['extrusion']= Extrusion - common['elevation']= Elevation - common['thickness']= Thickness - #print 'deb: common=', common #------------------ - for i in range(len(points)-1): - linepoints = [points[i], points[i+1]] - dxfLINE = DXF.Line(linepoints,**common) - entities.append(dxfLINE) - if Thickness: - common['thickness']= -Thickness + if cur.isCyclic(): points.append(points[0]) + #print 'deb: points', points #-------------- + points = toGlobalOrigin(points) + + if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene + common['extrusion']= Extrusion + common['elevation']= Elevation + common['thickness']= Thickness + #print 'deb: common=', common #------------------ for i in range(len(points)-1): linepoints = [points[i], points[i+1]] dxfLINE = DXF.Line(linepoints,**common) entities.append(dxfLINE) + if Thickness: + common['thickness']= -Thickness + for i in range(len(points)-1): + linepoints = [points[i], points[i+1]] + dxfLINE = DXF.Line(linepoints,**common) + entities.append(dxfLINE) + + elif c=="POINTs": # export Curve as multiple POINTs + points = projected_co(points, mx) + for p in points: + dxfPOINT = DXF.Point(points=[p],**common) + entities.append(dxfPOINT) + return entities - elif c=="POINTs": # export Curve as multiple POINTs - points = projected_co(points, mx) - for p in points: - dxfPOINT = DXF.Point(points=[p],**common) - entities.append(dxfPOINT) - - return entities, block #----------------------------------------------------- def getClipBox(camera): @@ -1847,6 +1912,7 @@ keywords_org = { 'outputDWG_on' : OUTPUT_DWG, 'to_polyline_on': POLYLINES, 'to_polyface_on': POLYFACES, + 'instances_on': INSTANCES, 'apply_modifiers_on': APPLY_MODIFIERS, 'include_duplis_on': INCLUDE_DUPLIS, 'camera_selected': CAMERA, @@ -1883,7 +1949,7 @@ keywords_org = { 'group_as' : 0, 'parent_as' : 0, 'proxy_as' : 0, - 'camera_as': 4, + 'camera_as': 3, 'lamp_as' : 2, } @@ -2258,7 +2324,7 @@ def draw_UI(): #--------------------------------------------------------------- but_3c = common_column #button 3.column menu_w = (3 * butt_margin) + but_0c + but_1c + but_2c + but_3c #menu width - simple_menu_h = 240 + simple_menu_h = 260 extend_menu_h = 345 menu_h = simple_menu_h # y is menu upper.y if config_UI.val: @@ -2551,6 +2617,11 @@ def draw_UI(): #--------------------------------------------------------------- GUI_A['to_polyline_on'] = Draw.Toggle('POLYLINE-Mode', EVENT_PRESETPLINE, b0, y, b0_, 20, GUI_A['to_polyline_on'].val, "Export to POLYLINE/POLYFACEs, otherwise to LINEs/3DFACEs on/off") #b0, b0_ = but2c, but_2c + butt_margin + but_3c + y -= 20 + b0, b0_ = but0c, but_0c + butt_margin +but_1c + GUI_A['instances_on'] = Draw.Toggle('Instances as BLOCKs', EVENT_NONE, b0, y, b0_, 20, GUI_A['instances_on'].val, "Export instances (multi-users) of Mesh/Curve as BLOCK/INSERTs on/off") + #b0, b0_ = but2c, but_2c + butt_margin + but_3c + y -= 20 b0, b0_ = but0c, but_0c + butt_margin +but_1c GUI_A['apply_modifiers_on'] = Draw.Toggle('Apply Modifiers', EVENT_NONE, b0, y, b0_, 20, GUI_A['apply_modifiers_on'].val, "Apply modifier stack to mesh objects before export on/off") From a9b99ab01c2c3ebd2131bfb50bd4b221757804d3 Mon Sep 17 00:00:00 2001 From: Kent Mein Date: Thu, 18 Jun 2009 12:57:39 +0000 Subject: [PATCH 052/512] coverity issue CID: 596 Checker: FORWARD_NULL (help) File: base/src/source/blender/render/intern/source/texture.c Function: do_lamp_tex Description: Variable "dx" tracked as NULL was dereferenced. Also found a typo the 3rd check was checking projx instead of projz I also expanded the elses to set dyt as well as dxt. Kent --- source/blender/render/intern/source/texture.c | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index f2169ceea12..007b69a9b97 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -2354,7 +2354,7 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef TexResult texres= {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0, NULL}; float *co = NULL, *dx = NULL, *dy = NULL, fact, stencilTin=1.0; float texvec[3], dxt[3], dyt[3], tempvec[3]; - int tex_nr, rgb= 0; + int i, tex_nr, rgb= 0; if (R.r.scemode & R_NO_TEX) return; tex_nr= 0; @@ -2430,21 +2430,33 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef else texvec[2]= mtex->size[2]*(mtex->ofs[2]); if(shi->osatex) { - if(mtex->projx) { - dxt[0]= mtex->size[0]*dx[mtex->projx-1]; - dyt[0]= mtex->size[0]*dy[mtex->projx-1]; + if (!dx) { + for(i=0;i<2;i++) { + dxt[i] = dyt[i] = 0.0; + } + } else { + if(mtex->projx) { + dxt[0]= mtex->size[0]*dx[mtex->projx-1]; + dyt[0]= mtex->size[0]*dy[mtex->projx-1]; + } else { + dxt[0]= 0.0; + dyt[0]= 0.0; + } + if(mtex->projy) { + dxt[1]= mtex->size[1]*dx[mtex->projy-1]; + dyt[1]= mtex->size[1]*dy[mtex->projy-1]; + } else { + dxt[1]= 0.0; + dyt[1]= 0.0; + } + if(mtex->projz) { + dxt[2]= mtex->size[2]*dx[mtex->projz-1]; + dyt[2]= mtex->size[2]*dy[mtex->projz-1]; + } else { + dxt[2]= 0.0; + dyt[2]= 0.0; + } } - else dxt[0]= 0.0; - if(mtex->projy) { - dxt[1]= mtex->size[1]*dx[mtex->projy-1]; - dyt[1]= mtex->size[1]*dy[mtex->projy-1]; - } - else dxt[1]= 0.0; - if(mtex->projx) { - dxt[2]= mtex->size[2]*dx[mtex->projz-1]; - dyt[2]= mtex->size[2]*dy[mtex->projz-1]; - } - else dxt[2]= 0.0; } /* texture */ From c23b23db4e19f57918f8d574609de744bc59d5be Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 Jun 2009 16:01:47 +0000 Subject: [PATCH 053/512] Attribute PolyDimensions GmbH for funding OBJ spline import/export. --- release/scripts/export_obj.py | 10 +++++----- release/scripts/import_obj.py | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/release/scripts/export_obj.py b/release/scripts/export_obj.py index 739b02bcbb3..7dffb5d2048 100644 --- a/release/scripts/export_obj.py +++ b/release/scripts/export_obj.py @@ -2,14 +2,14 @@ """ Name: 'Wavefront (.obj)...' -Blender: 248 +Blender: 249 Group: 'Export' Tooltip: 'Save a Wavefront OBJ File' """ __author__ = "Campbell Barton, Jiri Hnidek, Paolo Ciccone" __url__ = ['http://wiki.blender.org/index.php/Scripts/Manual/Export/wavefront_obj', 'www.blender.org', 'blenderartists.org'] -__version__ = "1.21" +__version__ = "1.22" __bpydoc__ = """\ This script is an exporter to OBJ file format. @@ -23,11 +23,11 @@ will be exported as mesh data. """ -# -------------------------------------------------------------------------- -# OBJ Export v1.1 by Campbell Barton (AKA Ideasman) -# -------------------------------------------------------------------------- # ***** BEGIN GPL LICENSE BLOCK ***** # +# Script copyright (C) Campbell J Barton 2007-2009 +# - V1.22- bspline import/export added (funded by PolyDimensions GmbH) +# # 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 diff --git a/release/scripts/import_obj.py b/release/scripts/import_obj.py index d88f06a2a47..679e24bb0a7 100644 --- a/release/scripts/import_obj.py +++ b/release/scripts/import_obj.py @@ -9,7 +9,7 @@ Tooltip: 'Load a Wavefront OBJ File, Shift: batch import all dir.' __author__= "Campbell Barton", "Jiri Hnidek", "Paolo Ciccone" __url__= ['http://wiki.blender.org/index.php/Scripts/Manual/Import/wavefront_obj', 'blender.org', 'blenderartists.org'] -__version__= "2.11" +__version__= "2.12" __bpydoc__= """\ This script imports a Wavefront OBJ files to Blender. @@ -21,7 +21,8 @@ Note, This loads mesh objects and materials only, nurbs and curves are not suppo # ***** BEGIN GPL LICENSE BLOCK ***** # -# Script copyright (C) Campbell J Barton 2007 +# Script copyright (C) Campbell J Barton 2007-2009 +# - V2.12- bspline import/export added (funded by PolyDimensions GmbH) # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License From 0a132c61664d97d7d6e9c749d9be060ce3daef2c Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 18 Jun 2009 17:00:47 +0000 Subject: [PATCH 054/512] Bufix #18942 Composite "Map UV" node was using false UVs (0,0) from neighbouring pixels when those pixels were not rendered (or have no UV). This commit checks for each neighbour sample it takes if the UV was correctly set. Solves bad errors on edges of UV maps. With FSA even totally smooth. :) --- .../nodes/intern/CMP_nodes/CMP_mapUV.c | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c b/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c index ae3e5875aae..0a46b02e886 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c @@ -65,18 +65,48 @@ static void do_mapuv(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *uvbuf, float thr for(x=0; x0 && x0 && y Date: Thu, 18 Jun 2009 18:11:51 +0000 Subject: [PATCH 055/512] Part one of 2.49a release commit --- release/VERSION | 2 +- release/datafiles/splash.jpg | Bin 196913 -> 197158 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/release/VERSION b/release/VERSION index 6e272ad31f5..3046e7afa7d 100644 --- a/release/VERSION +++ b/release/VERSION @@ -1 +1 @@ -2.49 +2.49a diff --git a/release/datafiles/splash.jpg b/release/datafiles/splash.jpg index deae8155ff4e2b31b4c1bd8663603489f2791698..1c34cf36f75901d09ac606101f999812254cdf48 100644 GIT binary patch delta 189948 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�r4cieVp9Z2AK?!=cE*O?0e}EaOQ5IZegq@zTupET=e0E-BM8 zv4ZP1f#*(|GZulzW-+dQyK#V|?qf&8H z<@(9g-OvhwiEUM#)&*fWZZ(3#-NTkr94fJ9>8YK~D*_6;haKUux^I&(;T6m` zDA8KZc&4ZNQB_@h*C%DH_n;&=*r3`wqv3~;*$QH^4n~9HaYI8vCA!USvoI~a2%I!y z&0ZKf8N^BHqC8E1dnTbB^J(_5a*Hqs=j$2na|-bU>%7)`Gt5Q>RR3+ORn4qIZM=@3 zR1Vd+e_l6syDL%h0}L^sm-?0wpT9puCVcnu?fZ`(0N#0+ z^ZxGjx8FaWwhO3>a9OqDt6LN-RZx|qVyWnj!yvn?Dq4bn1ic8@u>x767|l6Ht%|w{ zd@EYBog|E8X;p3}7ZJrud#yz|9hD7@y-cpMEwj{*Fe3_FpZ)sb(9F*~8OU4u6Y`vH&a^MB8t;p z-g$(xU57b*wkVMNUq=LyX`-V+aN)c+{b1S=#A%wer6LM#uRS0kA@LIs2TuIW9ystPIB`L$1P6pTpo*3ta2+SHckN}~jJN5B zkWepe)mCY2&%T*?AANm)*v2Y#ALfK9P26*p`hi*^#h#g3YC1YttxDd#qsy7<-J{We z9Hy)-aG_z2I~|OJ1ZmO{GBI>zuRku%H=sF3);E)#gGF)WqDBZ#KBTUQdLr&6AxxQK z;xCFf3lJvRZo=*s;B(WlOf@1whe*XjQ*o!;nm*w@{v_X>?LGc}2~E?4aA;G}v6Pv? zx?Z0io&G4Uek~V{HQ8bs%~`+JVvB@-kvQF0v+2C7i_X+#R>H8$wu+?+jl~&EWpg+h1wM#p2~*>o8z#x4e0bG09b5Hz81uFjy_5z;mTLQanoq__szG44&RZk} zgW#2!gdU~FMdgyfhlYxkZo`%3cO2Xr>W-*7*Ur~?L?Ue>>JzMm0E&*NP2GuqRTec? z&Nik^chWddO>T@FRE_1Zc{brjm3J7(W1g0nwM5={nVe7sNu75OH=lw2YOC^-udF6@($%%@7k{;KEw=cwgPCn{4%rEo+957QFpB$!)vQpyD}R zUG_P;H(^FlY$W>0{>itWUqZ}(OXBa&H2V-cfwo(y6yHw#hywAKLvtCk30xIXfe`4J zVVUU+jy(`$-kf}`3f>B8YoKQ6d$4~9kJvVgL!#4okQj$8RMZC>VE~%)*OIZM@rVGe z6HYf+Hxc%NdXF)CY?R*D>1?b|rup%qIhbS!aptiz!(=F3yvUekOcAkv7h@Y;FWtqT z?y}H}I$G2==8>}RLjuKg@fQ_riJzWdWPm!=fr2oOqQ`qhw`CKe9L8|6LVGe`C5B{o>G!y4J3kA==xF^ZzJQ z7lsm`!Ba0y=ibKBV_o-uqnj|E^wKtYMSp7DtOn_zYL>T?4+!gQEUv8413J~JKIgCF z5B6JB>i%@acduW(dH3Nh^;9l$Pv_4*U7UwF?`=F;zjQ?zW=-z@Rr$XH&~+`#Nd!@} z=RM32Bs>g3V>ZTbNcrJbxpJWkxBh@u%76qSA;7>qdZxYSc8^Sd(4;C;EJ%2C&wZRe z_niO4ck3B%ZKpXph#t*}f|hH$o820nof3Su=Yu38fFpF{E=&%UXnXB(Jf;Kp4(m{VGlmYYv<(kdfQo=8NLwb$bG5^{vP!9}l?p&6!~g_juVHrTdi1c;_$I6O z2>a7w>iRxFPOfz_SrlL&m2v2ub)#13upt&}Rtp(;b~_4xZ4}h`Xf(Qhe?9E?K7aX2 zndtk?&&lnr>-p@PU8b2#_A=*sCkU(nWKC+%mFEd+4>BpXiP-EaEpD@?j6$Ebkg@B8 z6b@K;4U|&)g%G!5P@Yew%mleGqRkBo7n37TvV2D!1O<(8cXYG-VILRiMmxkZ2eZv^ zrjA%*p%!8$r~2)9=jN-HQ;SahXb=+Uh@3jEhE;&*4^#V`&6M*|61Ar1K8!V{*Ps~Gpd zsT5tQEC7}wD}9}>#ofxCCGM)Ia#@)0QS`mcDsp(vX{*0V9}23HEaPLt0lTb` z_e0hOCliei4i2c`)9z)Z2G#J=oIVW85*CBZB|eOI#6g^-34c#$aM^yX(r#0fVyQn6 z$Iv|xs$To$VteOWnm3_85yCASgg43k6|E$H6fyr{Ec594aA2K^kvj1(q~YMh(81st)eL=Eph8+zh}Jn%UZEx5go-U>yyK-w{ zEf){bEaJ(FJNt*9r=M)aFn-`gqiAz$F#0h+p-tn!xzT~}`?X-eV)2;F)LL_pGgDnb zkny{!>2f!B4vxRQXEP==?j;Wmib=G8^Y!cmDg_jN`qkO}p?pYGi~ zdi><+-t9v|fwS))$CKTQ`Rv8B=WpJ9s46Q5`p%i1S2KeZwJW+Mdh}t>2t7J~+*GQtP8DPPMJ-6$9H!(f`hHz{&wGSTLC_QeoLUwr-iw> zALTfH;0ArO*SBq7*q(wVDR=29OD*yuTPAUw{#~TWMV6=Wh5C8s{ayystgrx98Os|M zjxC|f&^pGn`5D-bCd#T-)Wu3#0gD=D>m;|pzL5#ZN&%j$29`T}S>^J{!-A?M# zZ`&J_>Ee_V4h%f7T$v_+(P&zwF156cQ5{ufyIsJ{*X&@00p_Ygq$b!-i5D0?&1ACF zkX*JDOYk-6E*>5|dUgD=p<4lQ3%QbpSQ|ZS2ew4lfmPip*o||oUKY9TsB`t_p8$+q z%TC-d6tx{YahzlV3@-sfYC#nh>Z%{W50t;?qEi2qWs&*?^g$_q49t5bvD166?dgcJ z=q?L{GUGef_i-LUUn~hqN+HPnhlUpSz1`zAXOE(rCI(_h1% zxhf##5i`yEdjux2{P6M9 zXJ{wf{5xlhr-$3G*H_0Ur@ca7f4QoAx-2C6d@I^I6F1AXzL=7%lgQ6%Tq?V=fGz}m zrb=zzpTA99_wY0lOhIdE3^b=pg&2**o1$e1|G~(HXUH0G^nvwAg?59mjbOmyBab#N zELWy=ZjEh!gL0`Wg)+VdZS)b-B3FBbV#JFE0%p-HM6{%UkR++RmeM`kVy$0%!sjp$ z25uQF1|bKxGl>nGbf{SkPm;j=C==GpH=sG8vI1l8*`z(lkuaC3)H7%fw~x`Q6Bn8o z3t}y~d&#|?sXKC@6)gHZcI@o%d<4}Ga#^tsAT%I(s@OX!_h0MXBT@8iQqF8LZ`c@`!lgs2UMm}+ zc~)hA8#_h+pxQn%)t1(5BcIf2mO9;b8VB*h54!@iCR%c?*j)Gr+hu=B`eG|pwKh2E zxj3L;u{opJ5DSD17q3_TqL2|~>+x*jZGt$Dx3#aGIfob~h-JrC-r~U*B@ES&$%ZbZ zn>bg%slD?KAe7b`&q=0LswH?)P+p{!V9>^Yfa0=6@#66Bg1HBOL24<|r1-xenee*L ziB8@BE0O&XfUa}tZ5jyTxV?7Pagw?O+9KMjEl^TGoKVY|55fWNhyw>C_%ulHQINPI zD59w1CACQ_8dCDI<6ZAE4?A%xaZIFGioKr4e`bE;J2S{9o->}{!X(L^R#VM13DEd| z-LzY<;T zjd0yNm}LmEx}y$Geq;C?LSkF>LP(=EM)w|t@NT{C>OjCBPbMTOlD!Ee8fYp{p(j%+ zgF|$$wf*SH_K@!|YMJ8>Z(z=g_7WE)3$n!HT+1X^JYpTRebW zW>OkQ)#L*De$)v?yL)_5kg>dW7=;_iMklyl&WL!heYpXbJ^r8XLZdZ5KJj$GFU6r%`c_07?OFy>mk!95(oW286kyE(uwY z3^x|T+batPEvT$nCi;20LIRlD7X=4qcbk( zq3}T!i!i9}EN_1LwND0reoA7r`HcD;JevCmi&%jxpT#tqM`0z{hwivX2A5&Lw4lS7 zaWb@SF$L?+#u^yS=@I2#xhho&cC=ZWD^>`I3bwA?JUIR${mT7Yd+)!#qwfu`V9aGF zYr#Wj8PZAN<|v(&(b@KYgW$L%IiPIvB14EQZN{>W6crlM&gOl8!GA;ee*!ReHN8y( zLDXw|?KsT`Rgr2nh(Z)e`TXBU-w$%97b-N;Cl9;_jb4cOY0MqI1Z zONo%oJW7}%FBz(T8&4)AzfIN9F*-7$hC1P6UB3e;EX8jb735OYIvY0}R~Zj4;L=Db z(^Ke(cpxOF>aCO~==q?{D}Bz%U~g%O`~kCqy72T*`D78$aL@S{Yy)K*Pc9D-FW{JQu=m(+oOY- z+R0Om(_8zmVRON@2bdre9;PmwnXb*W_qPb)aH^pHCmRk1*)HdJbumcH0IM?0WXMdD z^P_~#wVK_%Fo}}~D=W8_?>My<{C7LwKexYaPS3Sq`?cHMhmTj^uDzmks^1?05*x+` z5PS{vgW&SiX4S{EIj1 zuwgltZOlrQ1U!UmGrUcz=Z+*aws;oX#4XI&vD}jhCQ{b{5J^IISj62yG8~US*K#sV z>?MU2nu%>ds?>K$cEm}S+u4FFUa)slEniv~q=`d+JlqxX8Bxn+`T3FX5FX}oJ^=m- zD>6ATx&CEMnLMCy^w>Frl&4Xa!#>%-7v%D}tM9&U2yU3RBj>0l)xO;!LHy(3n`5t)8e*q#MGWB{pOs z5ix$ru|0H;#JY|y4b+LdT}b8Wp@nz!a5Pc!7g`mLakkmn6#4il zIhqdoql1Errkv38iDUt2z;nF-&Ds><8Ix$OR2@Pb3dL@fj-Hm3$5Ku3d>EoqszII! zLLZ*>91r<9EW^YJk4HoK192zA{aarCq@IW}UzM#OhyhDlLBrZiIA!>Sv51hK@K-H= z2EqW|kgEZV@qPX=I3dQ(O;s!@2AcWbj!wS?pzK;!qX?pCS9kThd)}JCB$@<*Mg<2q zZd`~fap^+*3iqxA^$T3N@GEqq0Z{}|5d$iMju3SsKA0q=lX>*Jz4umSrUPyyi$EYr z_jK2(dv2Y3j`W{txrfM118yMBskKypvzwM~0MDHi5KtU6h)*$AK3FTueWnA|QpP+T zZl@Am99uI5ia{((vvl988Nb_x%TPj|?&}l;t;46_J5{1r#gW>4jM@-fKT$fSK}SU7 zn%l@JSw+TL(83g>Oe)?>rPtrcvkc#7rg^~T0khBr3afmvV>SKO_FxCD#_TT{?ZvC!##gNU8BmI7XSCbf>Jg#=O?GU<8-xSE zz@|U5xrYkYQ9MBTd6A51I5Sp~5z7-gM-EewDvVD$hQF6__)oWP-iFf7w5;nl?(A;& zyYJt&k1l<9{k(l_Y4PMauijdJefVHuae1@9Jv+aU#Mzar*Seq9HD>oW1KYC05MHt( zj`O2)^PMxDcOSb+lAb!T{OIwMyZ7#|K7IE2%a5&KRI~l_7cXnscVo0=*2;C#}5ix6)E>PA#m zr)f+Qu9bq2EZxlWq&!JYiN*;#U_zln_o*0yEc#S9xe+R!d`rimsIQ1cm zqL@0R%MKFt^tAo#hwp#Zqaq>QIJKPx?rWmQiZDT1L-cw>@=EhVqU{Oy%jB9}HQ18xT{=EL--fU$JMZf=NhCA~SP)o0U8 z9go8C5Z)1>Xu9WFRo}L&4)-0^vsKpy(#k!@ta%=6m_T4FwgI(&E4pi7B)0fM^?=j# z>YmGYlmQQ@9VPCsV3Rys#BEbIn|=dFAL!%DDN(DCw3)SmNvLcXjb*=dBH$62GD+1c z;SWdpVuk1pE^AOAe2R>Pz+-1v^;wZ>sCwXp8%&iJG|VwH~V41U|{uPwIounQIOEY%*B~rzeh%9MR+9p)e)UQLRlI_r$~OMJoquM z0V^%001%UZ>1iT640>c8V>cU@gF!z+`UxfTYP7(ml`Ptqt^`RKCg{4g{rThT$4@`) zY===${7B7Rd=oJLa(j6{*gqZ|&9^!~5BC65Ym5UPFufAK2#=2MG!ip5t9b>UbW;^- zBXpg_Yx5ewD=CNG~oiNn4!M0aI>b$sd?4E)RcH=CQ!x3;#Hx?T9C zYa92c=N6lOWp=g&^=N&44aQWhsKxmi+sWJQt8d?Zi1KW8<<_^|-R+&PX_7g%RR>HvYp(Kar{$`R8zFsHm7BphzcRQ+;!laBWd_#e`=z8@0)?3BTqmD~5+VN;wIC z28%cx4}8C-`ufB?PT7FC6rPW+1v6x5r76^zl)_f8Pj&W#19bb!^P@fn2J^1YPEfkM ztzg=;*5yTwE^q;?%2VVc7M}JzF)SK_8Hb8R+bI6waMmO{xriEEM!j+YiY_~ZixHty z5U@KTt`&Qe7b0T#Gw^&yMf&FS!mq=Bz48Ng*DRD7vS2X|^=G(u#c6oP^%hVRSy*A> zw3O$wx8$hzBG0xx^?BNY{;!ou257K z)3CQR7t5T?d3aJ@mWp`Pvnarwb|=+rfvK5c5&<8C1;Oh!RJax0vtdiKfLu#lh=vmD z)C8%_wdYRU`0} z2AKgJwv8T~j_2L<$f^{EM7atMxM++@PtuMPvkZsoWK8a7*d_}hMK%G#%59{C%IK3E z_GGQ5%OWGGNFHwr+_Z?gW+S+pOs@0nEP5UhJd2%l=7aNt#2=p<0*G*!7 zMWbd|Ml(W`FL*+OkGShK9Uy)jdJ@@!L(my#2~Y=M>eM!WB*SHAoAUrHjG_N6l{e%% zD%Pc4qZ^U?d4*n5rJjr3_NU_$_!>0p2Q)&;c^(voyZlg3%?=QuVq^X#NTJ#dX=M~Uot|C#yEZ^r%^ z1AbAjx1HAgjVHp>_T|$Dr`;bHGFeQNz zSJmZYlPzN@II7H)3GdQ!ZWWnv1WR%gSPcTKY0%*k!y{VEUdPrQ*--?SMl7_PY$!!r z+$f5t=2@~iBq~f7A-PnUHe=cxE2P339%am2pZ5tEArX8coH4ULYKusWEI|~cdMG}B zm++u24nN)U2A zPL@JC!bFDviA<`ZLk5H5op`?to1*A{KhSgu62Vkj@<18|ICTo?n}*x<;BOu@FODkJ zo%-mzn?F?Ms;qFVi4 z;P;d z>7uE|#MF&D(_i7z#Q)&0F!7PNH5y-Aqnp~qXsumoDy1))QlON10Q2xXD5W+M7C>ME zmwWH|?m6H2KIz2sV{e9#59_eIG55UJs-lzeyua$1gy)jY9#8liJ7 z4-bF>xcHzoRNPrR03=9EN+0QWp`n`(?%r3>IaN0G1bpp@(}kpwAO=zBVJ$mks(wH_ z#8PoNYvmZXT4ox8HemaIl$J~xDF&Xff&fTvRJO|XO+cvuCGJU~hv=s0Qma;*m4?%J zx%e8^ddrKNHqroDlSJe!6^S#D;Rd-AgmSS|hCgDhwEE`VE7xw)7sO1b zzpB-pmS@BM)7W0yES9z_2j7=g-hX)e>GQ|OPoMcd?8_QznJUPCpjTw6?S-}zI9@nA zb7Ow~-pbEK7^TaTqt~X!=kDBA6s^??>kWT>+YKmlqKW|c6itcoxi=>1J8kPnhYS|71;U}%m_v?Mb4NRjzHZKAxj;QW(!;-ZDcHe!!lItyvMIbO?>1hj8x!6 z+|m>^u4=Lr%gfrso0D_Xqa8%+xP8;Tr~4bh$f|(KkuHhj%-ul&d%h+I1T%%_De_FHbzi&S%ZL=&gRZsEDT?nst%05Sa6>|`ci!I z4IqGU>(aS@*}`ZZS#9KYhkTWMAvY4&LkhSkTd!Myh{;ccRXf<|n+Oz4JP)wRk-Y1e zbR>4j;|!-$+dB+|{PAed-K9z@1}7v-pkzXat+F-b{d0vJp}yU2j->P58Vpr#lX{Y* za*$?9Dh^TgU=J>lF|q=xfb6r#7JJRsZ4?=l`szb}09*jVl5vWXPoITCqhhBQTl2d3(L!iC1kfo5|B~S!o zwJtM%&gRVP_kHgf6M`}qMQ3^MearhTSMzsy;xs9YOTy8#fyN8$Vs~Wx#-53=$da#n z`p9FqJn=b4cZNjEl7yS8H*#Z|o{DDz@l$efrUcW5=T`9Ye2*|TiaJr#N3JRMN?8C8 zEEEEkJRl>SfoJ`yGBz(j{s>C2zkasS>a`qyGD0JzBWWg?P3ej4Upv$nfoZArhlAgZ z(|4hp(>9_Mni{>75S1OznoZ}2m=|N(fx0$-go7ZB5iWFv4_;F>?j4NDVHhN|DJtVc^zWE$ zIHt5DI`A=esRs=U_Y|zE7r6=6%a>Y$Q+m?!Fj|Z_>PF(O&~#M9HULuG7@NS+B)S=n`MP4{Aa5X^^nIuZvBL{Bv5SsENbQbAV*;{Ca4mjCaBm$C zMPH<`tbsxiPbJCgs2V0~aB)@;NQeJ-`nQjCvw+QG+>AOVgEDEm52%3x|2nO+G zh+jaEAOydNlq*Wf4EZI81hywN#~`qJf4!4>qo2H&uPhHO&-1aR0M(vK={>~UP>whr zs>75jr9v?`bt7}s^p18;D=O2T-ZIjOMBlZB4r%K#74lVIZgxC=!{NelVuLPh0NH*Ltd<_Nh3|VxB*{dkxfEX1)H#Y8GMI8W!yicFdfez zqZ|W_bkQ@pDhDaEYknYb_%8ref7h|wL=;7*yeV&*yVK+p7QiA1Pyh)bkXV7lFYr$h zA3_#L@CQhgO^6Uu5|SuNLW&`Z$M#fv%)R$LJI*Q#$JSWB<=l48RD72uuxyEr#ynoJ z90*97Hh5lxHfhnOO^;L^2I@^l?6Efd4UH0YGC)TrfPv2gY+nrWjAR(ae_OL07jA`A zu%5ci2(0_b_7Q$eNVnYY+=iKJR zMTzSO#Pxxd9PZv|jQhS5lq~Mg&eWJ6eE)IAf1gz!&s%j5LVUNM;99++1~t|{N-pzE zm-^CT6@BEIf84XZ2;q^^C^vRb_Z%L8V_tOH$WBT_SE-IYo|!wgkCL^5E~Aj)VLZv0 z@JowuCel5o`dUx}K$d2y7y=;=sKy-2MHoT!!0?ao)x)?0AOO5E;H3x~L1>Zx!t>#H zH46fjYr6o)hVrJ5mcYocNmCHpKRB_&yE!~L0rLmoe^}z>IPXs+h_SLShL8#5&`9XD zOdXTb3Q8{75OB}96DA$HA`}9zqibsDn<0MEMc2j+oc{t)buB$jL{WHNoetBXGaaTp znt}}iCIlB47ybwhKhG^Y7w+5`5)vg*)0h}V4Z1L_poKQ2kLkQ$o^$Sts z#15jlZP?(H6Er4D;YD$0V+YDBcscRil(>uSf0b6t+8BFxDC~l%dOmXR{3L=L4NmKi z`=o!AnKf(0bo>ZuHEF>Z%$P*LX+an?YPMBtKvaOB!a7Tk6o7r`x_SKN^`^RY`u=Up zS|9miB#Q)d`1hkUzP!1F!w=dAJ@>}0HUia025kn$AjMHJ^Rk#oL5f(3lOj!(AVkq6 ze;iXQxuzD=nRnG2pfAB`tTJ=6pXa}p?1M@*5Aw^YLf|$Y3!BRPLU$E80(l=A)LQ+|I zPFJf^Q1cC(BTmEkBF1~!Y}QynOe~4on z4rB}=!cfvoNTDE@2Qv%smr=D4(3q|53Hi8;yk|`xqMhb^D4YbP$ObHCS`Po zFpeO1PRMtwYPD&uS5?&m&nS{K6{40?DBn}+HbP)Vr8W|3g#b|3>c}uie^XPp5JXG$ zJ6mB0&yXsHV$EFhVh<9pIeh6^0zn-CtXiwH&}}=Lw%(Zd zQ^xc}2|o0D1rw0aHG|r3JQS6%eXi=SV)2*2hjKT?@>4Qj)3E(;R^0bLxS+pO$_GeX z4yj}TqfoHfvRY$*A})6Ke{#28{7(qIclv(?pzG>dn+BtBk~K-wH0|25I{cXI17#{Q zy&UR)@J84l5WMv72wn)g5L5;#igzM{I#EP#L}r~Z-P*OYZJLiJOY3vaX<8Lzmkn)} zyze>BdCzm6XB6L=GCXoxEjwj9+l@St4)FBe`g@u(`eJirC(rNGEi;+XTkOa1Ijg3lJ z*Rn))PyyMHTfG4Fy~;{3iU@q;hx=i_TAjUqaw~`K8xy-=hx8S$a03pme{sw&s*)AKky**l!^+bbCp+7e)~k`4)ml z-dJ3i|M2NEa6rPYP?lK~>sFa0&zd%N1z=*?nV}{JHK^lBwK?he|K$@YIAkCuE(#5T zvnsdP1*u|4e=P)9vg)OCjKoffRpWLmO;DY+0g{KL4vQEnk1`&Hd1L>>=(z(b8C+9V9BoFx*!gH z{IMt%w{}a+kss+p4YgnUAIsGb}`(BS1FWO3{qlJXgk^WVt7hAgF*p{6)NvArBLxeQ)!6QI}hmbusuM{l0 zn=neeuow1y&u_KbFF$VId3fvT=JUPXTJ1+|^UJ#zZ#E9SczNl(Vd%td!ClC3$yBCX zDXEACf7F-3Z5hQvaeL1-zWtnDIbvy3QPTs)z@?U9H@LINKr_GKv`7L?!Yx@;z!5p&)AOJI@?8x6U6}^I`QGv$oojSJ z*Bt!`Fwh_qDD$Jr#<@}-Ewq;IFD>t%?#aFCW6AKOJg-prGjYZ4 zYu>0io3kvxuJ4_C!N8iR6j zpir>s%kv^lXo+zJP_PXvu|8ApHoN=%g8^K96B^3UeALJr(P7;f{U(N)L;P*mT{<2d zb#E-nMR<6A48j-JP|7HISgYFh=?ge6oPV1nDUyUrExLl(v=#{k>jKHgIF(?UUt4 zzmE>d0D{Yz6oIjZNTft*DR0-`tgk#@S$p+zb@jz%7GYa%Vdw%V8PbKk( zckfS!5miqT$ATD{@r$mP%Av2ne;*tdaz&KzX%b3sq>o10a8LVG7t^+ zPT~mpBiv1t`BfefBw7`W#VE%nh z$Lty-c?Z%_t}Dr}Z2O_>#`90lRMGSGt)lI;6V>;qFNb9K~* zDZrDc2=k53E%bKs@E=Gdf3@*FZ#df8-u?Lb(^z|VtLjcgb<3*dC`oX>?rceJ|9JVC zQ-Y*{Q94kSum& zgSp@U$|lNm|LG!0#yHgyfHu(lDYg+Y0NybF^JEVfFg>BvwanqhL`f|9HaN{2LY07cF>EAB;f5lO_em0N3jk%u;;$;dNU-;}CvpnZ6? zt8JI; z@kf{#e~%ki{u5mot!XVy8tWHLYN-|qOv}K)jOX4r&@S8&2=E5p+R`@^0(hm6%fG?R0TYFnnn1rqx6^iUm8tMEEye|1kOR7(sMH>k;0(>*n? zC$5@2|LwK$$)|&pap)@@{oG<_#{QAnYdP?6hX+go_G};ife+od9;$)DWdc7ozJ4-1??24DzQE!^=tILF4JO z=UCG3*5Rv{FFt*E-|6-c5J-F^M0}^d&H&^)7=QoPf874~?(_DC{k`3t-JR336A`}M6ykDs)@HebJaE2co`T;T+fA5kO#5np!ggCED9=hHbDRR-CAo0Ig-m5t8e z%rO_I46En!*7BNB+056Mwr9oyPwTuF?I%|*9_+XMI@VpmS(jmUc`nV2gxu|5|N zI;pk9e;z#qYDqAZMmlvZNe7{6vel*%G`q~jItO&SO+l75UN*fGsEtIRc{c}a35V5e zt=8M;?U_mF3~TYyLDwujjR;9o$6Rk!&YV&yXETS!cjc|D9}H#O;jUEi1aS_e^9fDK zfuv%oVHm{yU7YNe95)C+g=HmI>3KaM1}Z#Cf9lZSqg{f2E18P#U+Bb3B=!I`MvAd% zmx>z=B~^5E)V+1b5uGmCJWiCuxVBWti?wxOWuiV7-;^{_6Lm_}`syy@kfbN8A#NCu`MByy^`vO4*Vh z_}FFD>t{y-%wkv^)9;vHLzKeq;g+!%K#iY5{F1svQ=tYg{;$tC&Ghz*8F2P`( zcpdjweyK1Ro{z>O#qhXz6U`J%quGp;jIQ*h<#jF_gn<%bnQ>Qo4-G!DZu#}L$+>(0 zm+6Ud&I&UB3Gx2~VC!0Xo4BIznYTTU_>qK|mV|&nqKgXgD=H)w{R91N-E>o_e>--l zsuXq6mPHF9<|$IJWrFQE@r*qlXP%tzT)U=Ky|S$9u{HP3d4A{n*8F1HN<2Qzmo0zW zFMYJO(9lpNlnUJ9GHZt>xHwc^DLz}vh5Kd$q(Kg#e|7Ea*QYNKdI-Oov37tBuN^HW z6)DE6|B-OJ+P*e8@4p+J@Xzp8e+|xhcyeGI%W*WCEh2>>HS~=WlSZX8oDC7+h(S;e zS17PK?aFim|GJQnK=ivfs)9s@Ukh-IP~IjHT>>~QT!xO}A{Z=1#E1=ghMK!5*_EB< z7o+fF4ob9Cb<#L?J9>VEff~c;o%Q;YzA$H&H}($4(HS4LN?+4V6s28ve{byFe0};- zlaeZ5KJX0ll0>OQ2le$*&roU*9arSzpa|DQGX(6fV5Oq6Frd_w6UX28A3UHf@9EDE zPhK7W_`~;6cy0sGf&ibua8ydN!Zu8M{J5LtAYA3hj~`3RLO;?p%T}P>yL+1`@BZ~i z-7cC93*Dqjn?s@yX=tNvfA#v~;aSML%@2fQ`fWcrJs+t3IvKvyQFC9e84F+~pY@(7 z%g$+BUZt+(30*KudCT7oMQVq=i|;h13DB#+(qPnuk4mk`ll}HVQ1`oot^&8$jXE1m z2?vaLIj>fwd_(#05~%s>oKfKzn2u|^ytv`DNNTA9aONaByWP3-e|Gpr0EkKxy7;nr z(4V~br22=s^JIDvPecO!GX#R1FO(t5B2H$m!exAPpJw1AgW}n zS7@hnp-5DEOgeOKXhq5g>dh>5oq7)O7^D%H=FC!4*Ee7~3Cv8*PLi3fin3DM19uMR?Wi9|N~a zB=hPpb{{T2sF7*jg8kj=oCBSV-#vSO9Jsy`RpR?l=_~mJe(?=V(wIZBU2iA3M6HZ( ze%s#$u9vE594aX?HLsGdG~+cP6vE|{639yCK*~W{@sDaZ-f)bM!OzRZ8a;wS!B(&{ ziAM4jHmAjIe`D|C^mIKFqDY9fdd*viY8bC-do9)Z`%G~|Q#iSQ3n8cvm9bRACDl44 zP~#LBe+6cCLleJQqh6l`pz2zBnuwzC?M&y3*!cfiHS>p znp+pTFacw5XQDsCg^59v7A#EZblOg5Ixo+6?z9LSe-@NU@7#OO`OfS6GW<@kT@HWK z`p6Udv5)3%=ANg|8feI;NNK{PZ^`4^TLdC7#yKnaUdRz-8FoV72~@3Bwl7Ru!tzG} zUDTYiTE8(0hLUP1o9Bfd5L~Y7IrK0dWT#{4zycO3AUudzKvC)>!IdILn=*ssmKRpY z)YA80e{Tj0kmtX0r5o8L17s#r`58uM>(-+nnKb8{_MjJ_4-lr6Zd%7VO_{`efO$F5 ztTy{2H$;{|u?lbo^l}>2COxWFsx#M$AXvvEtg4t&ve3JFz5C|ew!4FF$Z8>(5&^=` z1cc@zM>=Vc#-->}vGU4XAy>B4nx!ukv=T+We9zkNP@|KVfb@sEDDLVu!@F~}ndB9xiLDXk4*nXVNK1L2gGw+u~Zy-mwdEK?~K zwELU)s^#LRgZ;lJXK|7nkHgUj*bxl0bOwUt_|yek1CrTsz?IK*CX2vnQEmz+3st75 zf0O)QR+(gV4myI1^NX(6C$vW^?GDel?2Ugx4usK7CJ+Ruf|%X$dblv$01S<)$+y({#Fm_7g-lY0C0U;P{=yQBGXw zTgZ?lk4}F@0y!wYAUq<7fQB4h)keV}mE1|`v~7T|GC_V5R1l#|%IQ$Sj+QD*&z`>8 z|MK?m>pS7~qDj1NBDpPPEyqu8H+Kf*TJ~chI*x1nhCtqs-8o#Y&|-e=o|W z(DRBjKDB$TuH&5?g=6=?7T<^BXCT@>@cS}_jH>Wc(dyaHxA(4GT||Au)QaV~eA5zI zPM8Q`Vt3^A2DFX32J(iA-%*Q(I*w$9**_0|9Cx|dm#b&YHbx;)EF?fhpA52#*jOB% zTB%Ckw^43HEagPEPgf1{*)JaKf41#*5C$fJPHrvr0?*9rEA=&Z=)8Qm*Qhjpb&lvM zI~&_Y1O0Dwincd)TIa{KBi9#J>GEJwGK-)PN60J;ZFbeFhOGW7q~GBzU)Gd~*^2_X z@CfzW46#BEGxF#cXlelPRmcwvx>yc>g41r8rDDY{oG4Q_Xf1|ja{VR|f73*zY!;x6 zj!-NVvXO)xjWqD-B@{o)gIsP*7yl)L=;xmRTwPgD6HyqwotbtzTRXHxHVp~HB@nlS z7>$XV=uh;Q_`-{czWZVf!~jLWrL<7!GShbU@qFJMg!t5#rpvwa?dLn^%D-z>*w|`o z4gR;xB#Ye64<#`#tSC&Te@?|g71^pS9CzF2UZ1k9T<}a^kJ4gNBtfGE61k+ntH{X0 zoHlCRbWtC{S}w-tSH&wCG0Ue>dX3aFIKs% zL-qvosc?Cidb0_ws`KIFR;EY|^30!(@N4~W0&7J148ukulX6ysKV%y;j{my%B?v=e z6H9Y^m(;Rmeo<1nGjxJ#@e`t`neC5)EKswFnoQI@QZ2=F&1%arT+^7hYfjnJGtE}j znow(+W@;)vQ!Qv6f5hQI`}_VL{-ayd%f#fEm5FI9i{TFO%OX-KX1qi()<6)gYH-Ag zLq<)J!}pTiorBLGKkc`V@LVB;FuzW&D|yq@D&_1~H=4n#rz|>N2v(Ax!ui1MQUeEN z5^IQ1wa0g&7CYR6IN(Y-4a$Tts)#Jaqr~}g3GS8nGP&A)f4usnH|i8S<^On_QL=GN zx#cdywZR}M%;Us~2#)}B5|~Tqk0`K>8cuk1eyuy`kZu=@B#y0$g|8!4sVwb{PVsbY z-hR{@bhv>>>&HmOhm(PX6;NMW)A5;(Zo~Yqn@b9-Kc}?nywq6s179KO41zyO`Xk0; z(nJTRLBa+se@}sIgCWczxA=upOe2&lR&&9tu*A9%GbEqQB&%pT2TBU;8ujhSs7cG4 z8X7TeDj{X&B_=!suQp#NY4BnD{e~?bxT0AWS~S~w`!ehG;Z$tL5>K~8y-pkh(`r6}~{h=i+RZKI{@x+_w z@76c&qc+sxq8936j(Y&(D7hRbQApqlYQs|mst!*y#~|P@ZXB8QApCaRS9lAF0RXbq zUPvfO{c4F+!s(#|r5lIujtMBKaHhD_Tw_8cR_WHtpt0^9~+Df96}d zd3<)Vf81RDbN&;Twclx9`2EHD!lggh{k?;bfE2{F-3fJjN-{RcM8z`fgb}o}WQG7J zNoKflOTLk0X4zXIX^7HTDehA`W+oU?NP9BPRM zZCK>2-|`m!-W>)@^xx?xHcodBukJ3SroyNkA#++%RxBx2*tvWC-GUlL?mq?u|3PMmPWJORs z3D}(|!hQbg(_3lAC`>lq==AeD*>7BAf1G>AuT{=OvW3scHVQFErx98ZO1XyhoT9G0 zDvw(+KA#Mqji(cwP57VbEbYa8`dhU;9MnmE!CcT*op$$narJEY%`BO>6=Lf6r*D6L z@#@!QrWRSrv1pOwn0&rD+BsR9TjNcK`|-o=xF7WyLsC#&8$(Kz_yQptt=7Gue=<1! z4B~E^Q@(CRoEzdvFQ>zvM^$9XxYdESAs)zXL}u|*Hp(JxY>J$%ix5cIAC)B`z^imG zsNav$lBJ=5f@@R_uz10|%8>zJ*Co`OqwPF-iUJDe0}=vk9A8l;$aC7Jt868TJp^AF zvis7b-NW(SCC2$|bSk-u{Gs-7e?Sv^u4%jc{OJ#;A78iWM5U$K#bL+EfU~8ja0gpo zXo_*z!(n=M{>FJ`;1FDE8-(q!4%0jp76OZv|BT*XG??Uh-c~rs%2gNy_|B3RNWO&9 zS!#;Ct%GTT5X5`De~cuI$Vke>OATEazh)hOE81RWi-xPgk_)Nxr4>~Je=FR*67LdH z14VPo&~<=lQ?~vz!i65LC5I5h0}r}8$$F6&X=7922@AC@>P!)SBKBljqzWYb!9jiW z;P{U}e>rZk1v;-(g!d>DMbQY|!Ke?1>fn(ooZ2_rv#ttq?>kCZM6#I9mS5d;)LyK1 z`#XaeL5%S`GpmiVfe^uQf5gs34ZQ2CE-n~y+O6M@eB_VqfD$x#iR)CEQqUEgGb%J< zRV-V`s&K5UD8v=fE=#Pm?I>E9bfX7W{ZEllB*n$Nbd6tPwPPX>J7xy?D3*i%`q9bd zY&^O?_f>$%EYLw#tjDv-lLt>dvc}t2^9daVg7C|1JWuW(Zes?ge}m58`IGN1ZZ8q! zuw8GfRkl1EO)=(s{r&82U2A7xL!69L2yAH5t}iG;=SZ`N26h!_-zV5-(*m{k%q3#G z=~ZxfdyW8HQue}C`Z__pBFfw$Zkl$m`UWDf(=5bqD3H36=+49Esl(fwl&W zZ0b@nJ0w98yD*AE1y$(c@Z=DiK3x8#L?NT4L4b28D$7Lre;QZOodcZ^<6^$(Ve3#` ztked<39(?$)~DbxmgiT|od@$7qU@$BQ;AZuNkJ)I{b+|w#xsUu;Z;?Hxs_5L&t(Ho zv2}ByR9nBk-s-oLNhAy_Mjs#byp>g&t^^@4>!ez!o`znQ^TeTW2hG9pBr~ngoaklp zI?gvu;=+{EfA{s~?$kg6Vb58%lqXayh{ zgg*I#8t|k*;$R=#xw^K~{82F7?%By+doNDLw`+IF|EO=}jH2bj>%Ug5S;A`c_Mv8c z>DNEjcR$qkwtpY&G>^89nm;?8`f;0~3?5)e!VPO2e<9E)2xG>w7N@7nzyM59vBa!p zUUuw~WfXwTYJf6Q;7G8{P^p3t(S3}~435sRDiq3xFgOVKIx5VBX6l9+$B~j*L}XK*iqxe7$1)vFQBaGfYIGTe z)ldLOf6*v8P{u8!GC&@I{FAk(+x0DktL zmRLDUY5`$C+*rD~PreAV&H~m2sUArI4VZ4e1p5cg@=!{Jrxk^fJkdFSv~us$=G!?f zdhfA!ebyYYc{Sa5xRwq))zJB^o2*nu@P0OC@Qogv_S%gw!bIIzh9uE$*KNnrayi?8 zfBg;ow0YQW4!vQw{oRw@X>{3L*4cfR35B&rtQWH9&t5t!H3p^JG~|pH`pO$ncojUC z8cq}`wg`?IT5mU3DKT5e(elY8=y<#Pr``l3-ZPJcB#k-Uw^A*0ZO0#-5uEY?B)xv} z2Hrzw(1oRF^_sAni`Au5s7`6TP+H8Je|Z4-?Lo^A(Ga*l?A9u^xnfn*MQ_jnj0_(J zTerUc{st^uwprvI4_S~R$%MlQ$9yJVM%nu~Ofo1hTQwv}A<^83dIlFSFO`3Z>N2bV z4L*a|C$G~e&E}S6gNFm=QmFsH&b^Vztb}rX6?UPrOVz9#yH%-kLZ(TarZ>`me-?Y^ zj&&E1`hU%t^Pm3+z}2<1HW5YPJ9B3ylSw8`o3u5dRjd^sRYXA$!Ic}qy$fCV6Wj>? zEkXPN;zFUcQi?5#ByEy5ZIWgl$z(E_m*<>2QE}JOMZ?^iGv7Jqdt~#Of@(rTgzyT} z>|$Y+Da~I{V%7s!V&l>cKbQy_e_1hSaE=jZMlO%?Kk;Z7#@Z&N;G)5fHVw#6N=nHE zkkdy`Q3faRp3~*2JZCb`^E>FBi9Ma7CmAnT7WM|kyot$&3;;onoTmS1o6sR>;Pe`2 z4LB#buD9y9x^`Ezw<5qEodak`;`pN^8vx>}b)E%@M?(AbnB3^GB}W58e+>%v2*-c2 z1jScTpe5BDF|%|dyEk_UD=Jn6dwv`O-ui}3|6RFf32JSsKF7CS_-axDC9FnK$Q z8iNLWq*}S|`VInK5_6aHF_+<3fBcyjC!x>;W-8@u zzAf$k+#x!O4B)Q5xMo8yNIXi>*kW=F4o?%PlF+IXxM9#=>skQ{fy%Y-NBdBSRp?a+ zL0RMB-79y4C_qh<#H+{sPuOrQuTp=gB?9Ave~OhfIvf6cxVxqWLq>67u$CC;8N zvaKS*^yZl5OV!tJ-m&EcEa>o7fUW_4$Z;IOb6hWE=1+=bZ+|K3Grm?~IhCj$v3G3$ z=r|MP5iv3WL!_$8N*Q_=Y+OjvMQvZbQtR9OuLoaRgI3vGxO4ett+E1#vQn(}kXFY5 zBVw`wmAh9@e_#5c-yWO{C%8+ycjsaEv<bc!}_u}o%wXNgc(IoT%Sq9M* zZn_u1OP9l8O=ccByo+QPRyLL*v|^71za2VkHqT@h^l_H{ZvY0rmrKHaBGagB zL6ZqhvmqN3T5VW1VmI~1;Z*5%Q z(-0y%e;U`tD~=Jzw0$aCb%>2@U)u?jz>#Z}jRW0WYO%=r!}Mo8*WdVhQfK?TD-RETaa#T%+%%$R`6fkw0 z-uc1p2j9-V-s$cKNzjy?;e0rb7t5@$*bmi~!jiB{R(_jOn66<3n)q`3-^sB5^J47d zf0PutWjmf{Q%(TIMjM2SkH=?|usj{D`T@&*rA4>`KqjRgJU22BK*}U3{mWu>k)QO^ zVGyx$i?VJ&v1{rShwU(c48>vX^Ol7;V^+29sE5?@$lCE<>`Csh(E=m!Gd#-Ti%OjPqg`5+&>U^ z?}{W7ixl;Hk|nc|KN)0dQ(3GkNk3p7OsmnBWnoidzu9gHZQPrVqwta8d!l%}uKjtl zeA>ci>Mg|giFo<^_2J)t3FvA_f7Ak|R(+}BT}Qzw9HW>`#vk5Y-`^75HWC0!!bT_4 z_s8c(?QmVPn%)YE7crA{D!?=y@HERdTbp#Zx{^u`a~{wC9h^ooS~#@nSGJr?gG6XA9Xo`ysfHvZZ@(>koQxZ$7{M-uq|FbGE(if9^D#I;?q4 zEkc~eNB52>S~5^35ji0LGQL*Ppn0ZM-0JLJMl)3}wi?$`C}dD0%bZa7vry3;LOc>q zY53K3hcc!P)=tgsZaJM4H0GM~A;d_ow#XJH9%<<%~S{qr7%=^z48+M4_ zfYAJoS@3TVh}CQvjRsi2%+S&fY2wCq{I+9z&N(;XC8Vm0NUa|^&wIY_JA%Jj8;aR) z_ibYt!WI&~xdicDj3$wUOp>swjKYl#^eBaBdk767JPao&dNEBse}N0G1R#Q<{JE7) zKc0Y1!=FPfEY=W14Ybx-2ZtweEYd+C{2@>uI|HsZwHt$*A5ITGoo#*+VB>Q-G8%}4 zYRi0Cw^hYhu~rd~Ln?intAiLtW%-)D9-`M_Z4S;)#L&5nQ%kq}(A(YGgPT9o-59zb zMKr&>b@lz|Z+NbqfAd#9;)g{WWk#|Z&oc@ynn;pt>Q)M=qGFa|m*g+oXD_)lbQSr% zV|IuBG0CmeV&#gi>Umj!!9mgS)8NL#yAPiI`3$}Y2(w@cS(#HYLcn`T?pbSDSu`6> zs6f*hBDzkZIEgDiE`x}LVI4(vnnUQVlMH#=jhZ{t5L}_Rf2`SU!-9TFRUt4Msw|_t z4mMeuj9M5Q7F;Wa)RM%q8x&43b=-J3iH^qp(Kt97O%F%@!8kac_+gqunS*FOTrR~$ znx;B_Mx-8`D3Ss#FB@}(a=6bGqlZdNXkklW?pc}HMmHz2u{dZ(NPb!TdhhY8_pfW3 zsN=>rl2?Tqe`;1`-BwSQBxui}Txd2GD0RUPb)}Wg;MQC22fbB34RU+ykf2*L9ebUbUIdWhn)tYSyMDWa(6bbLhGihxMzGWm?It?e^Fs6`%<@^&rt^O&YZv@;56j_ zoB*SoesFpU&qXtyQc%(%>+EjqdErEqibR`A;M*07l2j8@+e_-!(52kIupj*M9OB>a zm{~Bs-yigE{d|cPIlFd+SvDTdL^+Ey2Cr}QU+9fyG$tF_WI@i=XrtNqR zbfGBDQq4}>6NU#?&^z$4@BFfN=jFSX+h>2=f8X9e9DT5Kb9j2pxtF`W-H@ zzI+ZEZfq8779>-6A$XdK{W&87T@B5Ip<5M3HiT56{57vN1Yd;n1swH!lK~X6x@wsy zm=nPx;E07pqQEH9ENLLCT}*l~2&71>=3i{SgK{cG;hM!7LNErJ`IXWYMx@Jxo%3=AIeK4G{DLY-vV! z?wot)+;g(|Rff7dqFAh1H7PC5Wt$sqf9j$rLB>nduUA@A%HUE1MCf9=Ma^6@wON3ZDo5WIT$>7(x8B1>Gp}vNYH%35}9F9DjJOpa~4*Q(1}@LD`oAkkAH5rT#*qic3l; zBE+0ya)0xy&e_owVOTIxHdmDYnc7T>4ayfqK@b~ebu!Qs+BD_vEr&wsf09dhj&C<_ z5qPHy9<#?x{MCKSaV!xD^FmY=LHxt z#4%gM1X_QInkd0K;7F5(?bUX7c;b4Kv47F1tmc4~Fu6%9p&Hy2rWbjk?6cE7M2o+( zzC#xSA!zyn{qZSe8ihe=e}}-Gi&4h7Kk9)PgJ(1x4cLsN06j}+xj<-)Lz-95XlxnH zQkOPk;MW)OMauc6v6MYTYgD27RjaP5SlM(+o$0CcB#|#mQ0iqI$Q`|`6|)+|9_P%U zBWc)iQ6iu=Km#_S$xfEt%~84w3+YcO-X0fAN=-e-B;vk}a%s zK!r$^-Y{CyqGaciq(~duw2g*s4gBAS^XbL7z}Vqs^7ky-KO?+qe*66o=H3(8%jW+x z509TT{Nqjcm!EIk`-E-Qm}%hDM*v9Yza8%nW;)Wl^qEVQpG)SwM_avqZDWQrn_`YE z&F0&cwX@*)t>#wmfBcm8X7`K7xj24%@@Lhq=j0I6g*&37)Hyq*KR+Ei2i=3(O8t1y zp;*=7AZ|2ntb;-)?Gy>WE8!yw_~#Fvb(|wLX+)p9-Ml&Rro-7lLgx79+U>#ENhLvE z0cQ~6Wn)9?<-yMm6ay&N;DIn%G-cH5ODNqXH7O#LH7wb}e^*dZxc)QP1)m5L>L2J2 zFC2pL+GLp)OarfIkyqGVk+K$pR3Bw|?Y#heUE59?Q52nH*7)@)drs-3Y zzBFmlw?6s>{fYiWU;72^SM(Q}XzYtuQg1LIGBC`*Tu%4e2k1-FHzUDuX3p7r?S1xI zYsO#2P{Ejhe;O@rDA|T{@sL=0A6pA)T6CW8(sHE-3K4xmkQCZPh;R`3Od;pI%nm!W zIZv9$^aD>~DR%!3gY!FYJA+m%+5YV7#3Bq69&`h_z%($J$mgQ!Uj3l!b`>!Fbn{?1A1!e<{Xb{;`m3-TnIh>HX>Z zgAeDoXM|X}5E1LeDpsD`qqjn}p)(q6RdAks(mZm!KHJzDU8hZ%rjRa{^JTghdtfhR zD;U2af9#;elrQ~=Vvs8g5#V%F4O#h~p|e6E9u!ZE)bo>642+ftJxPEjWoV|J07Y9E zJVZ?(c|j9qWcdPJqacbr-(wy-;A7sZQjLYW6m6+6Wx!LIKKtFdisI=o6fGmP*dz8= zVeUnG@rlPqIZ~hv;XaYdS-GLthifGo+){l4f3#$})1+ykIiu>7y$AxMy)$DF=`%w* z*6j)&+>RHxS*svNA!!To-oU5%RE|pc_P?v zCRih$_IWCiLV>U00KkPY3+Na0FD*b49rDzK@ondxNAb|-rrU(>0w$3Gfa>MV`f|f| ze{5Dq5LCiqdWzc!RK`6HyE+c}Ez0^Vd_RRILY>=Vt8(lZXSp%dF){HLg@hz}!)`*C z0-{nmLz@mnLl;|<9ixP9dXqsRvm}B59+O(AipgGmXKlGWzWn*7q!kVAg%*E0e5WMS zN^M2i+D2Pu6!78dMD%+7+eih zdWx0-8|s?r#k3dr|90qzl`#vne`tT9{agV=%%Z$HQ*oVkc_j1Vj{tOCOKa3n7|nZ< zX)?(;b{>69OQnj%3Km=l1wjkCs|!UpF5S3r;V*LG+CLz;^ACs=L9G<);M6`QlQffL z^6)#~O>H;AY=^w={qFf5=bS3O6D;6Xq*7KKS!^fJVH91ccF>{&cL7>rPADCFl%-C zW1d%9FGGJQgg4JkrKHl-X&IV0LW~-PSp!nb1?yjG1jpheKJ~sBqrOO|zaP ziI~b^{9fp~xpi}k!YJivfAqW*sv-&~mQ4pTp+DDdo0EPuaI!DNE?DLP zL|JA(feSkv4`oF=onQ)+!jNq_R?Rw&4!BvJ6JTZYZH_~QP&E?9f0RN_+GshLY=e$G zt2Ly#GD^y6A}4fVh-L|K&nALcYNK9#1z-y161m^zm$O)Oa80xxHo ziUIpvmaCSLp&F2iRA5LZwDSs{Dxq|ZP{OR+g&Tv!)o)pyb=%_!fh+|A9q6MJXHM)G z!78ezV#$J$XnWF1e?SpNs0>$wYxsC<6o9TcYQ04sXA#{-#>zd+s4D5YE8SHgHP!KY zgnVO`eZJOT|8=<6YcA0L=UWSYII>{ALpUYpjjGb45lUKWFCPcTDh9v|LD8W7<O-Z-EO~l@@o6#Ykh51$|e%%rM3SC_uaiOZ{D_?ym@zBTJj{@U=QC+ zBIr3h7<`QOl7N6Na}{CULdZJKQ_&BQG2PVTaEzTxG5sX;(Q?pg{^|I^#yv{DAQZ@C z!^PHu+wZ9bL~J&1-1+q5Gl(#f1`;{?=4J2S~4MQc2o+WsJ{nC zXoHt2K`uC32+BQjj7+EyHtODlS!`48kXL#Gm77iJSj`CpHYEBGl#))T8MsTBhLkVZ zm7d!WiOhr8Kg%^;2bIP+MP)J*m1?fc6&DRxg(>hwM`QWi<5517GO9d% zY3o&Rf4;2DV*d(2)%E=*4Mx!xT4KgAFaVru0tTb&cwd;1%3q1NF1W5=p66lWOTp*s_Use`W zH@i37;B33M?Tv>!_jkSzPN3Dr+F5klw|jR+fgi-9jqc_T_xQGR_j~xYjAc^+IaXbg zcDYk1i(1O+#jIH~>$UQwTFKBU78HeAjAof!NPnbDG=ya;wvwlhpB)|^B{4iFkyivX zmQ_~mYgjEhA(tyn$SPsEA(fgH?WHTD$Zu2{K@w`{isZ8piBAh07BgirN~MTq$saic ziJt(nDRCOXA{?72B2+$|PUt1H4OFT$-i{`Tic()&%rbVq}=wquk`sz*hdYlKNM zVIrp33*ylsG!WdC_MAp zGxy}))?Mf3_RH6=yh+-y>+4S*;wS3&m5PP68Gv`84E{`x59kIe&DD%DYcge5&`jgZ zThv(UW0r#1Y}q=UdO8r6Ng=+`ZS^(NkD}wVzxs4`IW82YbkY=1RdsDao5}yev48*i z&EAXWt(M+?bW7Q2D#pa!^lJH&@kX~#bv6~ypO3!8sc_nB z+yE?6t!$gN({bFu9fqSNqefuR4SzhV49$$qtJk??6!7*^6=$VKH8j&R3+OATX{n$Q zPQ`pB?-C;lh*`|DS03`KnQ2t$%@cX3{NG?%bWT*JH-;dK@UWbR6!e0{;DaY}JyJ^2 zgDIJbbF9<_yq(+DUQj8!p!}}pDovTZqFS~I_xuxps%u+n8j7MPmnLbFmVX8)Ers5= z4}+qPGxF%8ul|pIjt_o>ug;(Y%m6-!Tto&cXla_JX_`yp-uom2@>u9hTF%**wbx!N zov*5@L9$H=F|}nbq61a=1ij~Fe#%R_1&uA;TQ*ai-KcGK2Y-4HJU&+$}xct5V&O; zXy9~9K{5IWH`iHAA<%kc*UHULFWaYwy00>y(*c= z9cU9Yfk0W_*?fhhjwm3<%3OqMCnC4wA~0{9M~L9S13#fyx!DQ+}?zy((wm3_nlGXOOgaBq(0YlJ*Q&Ts@4Jo7w8N^AzGYS zXv{7R!@(fD7DdHzgE1-d26#Qv=`{s3RG73(T_bHWO%n|ytBHal6b(sN;1(m&8ep#x zAMWiDLp+B>DJy9riE;oNm40QbX9jC|4l+JRukiDv*3*!cs=0CzzOG3 zN@C_(NhNc_-EhcR8;@DZw4k4*DHeg$qHN?16suC9k znT1kQVWl*8d3R3Wk1%ac^JP>H-iJ7#c=$<3&8SsgfyaixD$D564CM=Lv5Gw3XPt72 zxg#bSN7%H;h%@BSOgT;+46tL0wi-{i+s|Cjbw)Pa1uOy(Zo-diyFI=Z=J^h?jN-AD zQ=yXP`ncoJOMl2QxMY+O#ZD&u&dr;5@7v{-gX6Q!)q3sqHq&I*YB52&wf z3$d(V^-{g}w{w1VVh?*p-h}K06%2$FsIob<%%uT~x-|-iSP`nm`obC{*k5;-%e6H) zV~{ehp;32x&1&Bn63G+?|2yJ6aAcAPL4s7_IFs7q%Tw%; z5I5t)>VE<-b!9zGgi&<1PNyA)PG_oAEJ9rnd4F&V65^XLJ{l7feK7t|pIw8J_@W6> zD=vTqq0B;OpL);z2JsaVCd_=_x!bwtRQm5F^D8IZo-4|#MV||GY*sy`V@hv?Ak48k z^u8jBnbC+Yd{U%mtQo@nI%~f3d=*b#p1av|`xGIuBae7+_QK4-Wb{3;F)S+uK2^N=Yje*V($}JjNidv*4|BKO zyLD-G=<@O#8vw!@=)Cn0UZGMWts^ z7EXtZsvng6W!|it^?CzB85#J$5Kd7rfTCCNY4~1}HQO>|B?JExh*MDV1g@ma-fxJT z<*aQ)VoNcYz+CZBI|b-ZL=N6F$=WHOdZn&^;=;M z2)d-V=!kFUDq^1aDO^BP@CeW3WV@Lzmd<`-R*;4+)TwEk640Ao}B86 zohZU{btIKWtwARBfu)sD{=oZX6ovU-pR~Gsmt4zY3?Ju7{ZVWcwZN7Q+b7TF->la&ZUmov$ z>tCB$dbHNKe^as?30tnpNq;9Gm#ALc+8jOi*N;M-%TF&3BJ{5)BQYqr9tKAQHDNqH zAwpNH{i>$LY<5T$k2~!Sz2C=aR9E#N3MqebEW2$w^nZEB{@&4k9F3ped(!Llb`PL4 z=veNZ%PaHU1;=y-!@=s}%Es3ZH!fb^9qm$pZ(D6D&@nxdkw9QlSAVNFYt0}IC#*)t z&|9$8Re7qd#X}|rPVtkn%IBE_4XYAB4CWIR#8+BI5>;ciNoe5zGvku}(cCMY0j^B( z&|IDqHVcRGX5(7S69>9wiN`Q z_$7*zXj-xyMY7|>mVeb6NP-|voAy-n92DrOf3ZM+LDOR|Edu1wTVo?AYQ;_r`J1N1 zFOi+uCmBHj-(*lCAK&imzMYvxd?%y4%7km9yELk9x`OaZ-}9v@#;A|`Z@B@rOjVg8 zGS;lT%(i>G0HGw!FgGluGbh)l*YPDVFNr5r4#0Ih8Oz;pOMj4~CGBj77}?G8jIvYY zvR7I$tP-BC*YNQb$fect2yXe*uvKi=lKHt38_xh{2M)nvZ*?CafL27crVMK$WT%$t zXv3emm`s`?KV7otC6%?wUaFpML%h7#?h|Em^qcFf7B08yD!v$>9c5y}CPO<(vq2U$ zRt1}Pwb=&N=6~=^F{@LqC*gHX6R*g-@!$RSV7LF}$IFuyFQ8OuJ)kVUjn{XEhXA zE?n-f4yHms!AiATT|BpG76ZJu+)yO()KzqG8J{=3km1#Ky?QIlXDI$q7k@F>J3jmO z;${;1Yxo&j%w8W7n5K>V`CAc+Xv%B?TXMg`_a%5;am8v1l1JK)~lm^&b6yqYhf@Ra4VlxL~1p&o?psNZ|O^XU0-_sPTI)4}%R z!GG4XjYr=Ow_oiKethYD^;C6x3J`+5hich>rk$5M9;@FE{`gB>snoYTno9|l6t_kt zpN3!3_%KzAk(N?342xQs<#{D!vU!b4P+75Hq_?~Pf53&UAbfxNey2CYI}R}P>)Y4I zXCL?XzCQSH0HlAN#BbjH8BK40c=gjSzkmHa8Vpa)KZ)(_9Q9(9PE-0X(tBNx!F>1l z`_n7@LxvPS=K-OE$5KeGspWA@ssk1OpHW}x^kPldgWjdc85y71l;LAkv60As-nn;G zBm;#y?A&S4eP(33@NQCfA$_UOYc3{miL_k9O$wyS8~ss5e?84!C7!5THlovi0)KFI zCA&=oQLx87`*=xggW_xi6e&nR#CG7w1%bpzbAkhR4lGI_!9>ntNAZk3$uiA_u@$SNl%eSW)(f17E`LZeHLq9BY(kH-JR2Fon`SqE)c8byp%8_?7K$EC zb_}g@dB9avV=GEVh+2y;n-!&ri-S!-#Wk_;X~%NG&Hgm0;e(F`ar zM?wi)XTl>+Y!en0Y47O*=(t({Rnm6193ZoKP84Y0Q*`a%p^&N>=uXtY)9O1`=qle= zjm%B*m}#f7vNDrR$3iRDaDPG&!6<~B7Bs9>n4p|GioO!oQ)tuNZfb>VD9=r|IYla@ zH4^#Rnq!qfbZI;kv$bdqw;Pd%!q1eZorHqgwOC5ozD*ZBk0h(PSpDT@Zn@-%arj(E zVY`dutLls*GeY8QsFx33&9ZnpyAJ(`y_2Gk5QCkoTz0~4oZVbbuYXvRdfP~;dxQP6 z@rljp2(GzCJzkI2KYo4>KPex9h4V>O*3Vi+Sujsg<)H_J3B(N{^sYg>Zc@z)&g%DNhupwMNiJzq83sBg=c zD}o@d!^+WZtHCX`GidDX=-q8=u%$XZrCWm8^=fBW+)en()qiNHzI-Y_EZ&`=Nh;dp zT+MMQd0qs5hy)a8Njqo)ZsS2~hRt59k2f3LtywywXQ#z|)X0r+XHmitEog|x@feE_ zuobpC`2WV&7jIv@<@t%ajOWSW{^K8`?^&^E0+=r5sFb7Ou-Cc$= zZ^mjh-V`3Sl1(tnsH7W{A*1jt%p05gp#M0jF2#AQdWH0H*F9z@kc=bk%r?>Pm&gY3|19CrZF zDyIx&L}`|hIQPcCiA|F?P67;>37V!H*0M9zI#Sodnw4!jvV4D3h_!kvqq;65q9bF4 zRa=va>3>+HloGM@Y< zxN{9FRr%HbiJ!D!E^yO70)Wn*>ms7+^3*mh(D00^3^VoAJco{9$)yiObsV~Rde~gr zc>ncnXVe9g4U-@jApstlrbTV2X-tqrBDb@>-G8f(9zK5d>KUM)9O$`k6C5w+Q;K#%s))rVc-q|*A4m@LqN~S`dhqV^n^jQe6fqTHM)K{d zgK;#8vRJal9Unl&fFI;g37JjR%4PhSQ9|HRxCBrOQ>2*+)jJ|DlPQ7$L13uUmK3L- zcz=|4uH8TAd?R$COKN4S%x2<#5qw1 zZ#az~y@MzUNgz###cB;JygNGaVsC40r+@37knbgx#-E)g2_DyGWApOnUe7(5vOeX| z>w;x>hKEJY%LDC4-ckP$0cO2^UdjmMfQ5fmjMP@+!d83x>B}dFy+^+}!TQ;mkrv@yG=W3K1=zor` zD|`yPUR#%J7MdhcNu^eG)+rVB>hhJ=m61P6r_wacyVvdlcSx6jIN40eMH2{u zGA+}aMpd`dy1h+1u7KcF3fC3guJ8g8WB9SQWTqLq?Zo50^t!peD;r?YPl6V?ctc8^2%ELIqjc+&Gn4*)& zw+$OhK9;fPj|}ROjCVG6p6|b~3=4U{$L}8o!O%3o9>9%kFP`|)?|Z#3$A4ew*i6ij zUxKf!)SJuB@)3!GP(M6($|)@VETTlFg$W8-1LphY2#}z&a$fu@in{z$A1*fUQ&mhk zi}VLmYA;~^%A3U08^Jbsdae~ohn-Y{i5XaQlKyLuZBtobs#8}yVM)biO$DuFQl&t0 zs$}rj(D?sXZs01EKLSv7Eq}d@Q(^SRcI?EDI1f*V`WVUxF&&Kr0hr^W*~8jBPm|9e(ol7hnGP*U!ibfqJIhUgpametR$s$59wvrE}9P z02cuFzHe4y+JRF;&9){x!pO4Bf-{`heB{vZDw;kPu}m6Wz2 zUE20+pED*lky}pN)!PMwZj^1Z!0{9rHSSq_!dZ?iE&@zZO3&hRi^J0DGC4;&k7Vt| z{F&$sbN3bB^nZrspyLJpH(!1G;L&$`(d~?@$TZSSRg37uE2*xkuL|`!IRlj02%PN-yN{#<2tl9tZ!&v zgEHKthQqzExBuCpl0K%ybz8*=_g9NT<-mC5@89(%Z+3!Fm946EDis$Qeir*PBwP~N z+j9NjJbxi)$`iH8mG3FHOSX)q{%9o^*cLv`@zt&U5f)42k+J+fqy$&7sYP0hc}_jFFZH1tqM(TDf8Wf567H(pw|P zEq}1T{w(xp@jsg<{Ni5$n7WqTrhzCrp4iU&(Lx`frjVuxN}*JxRDh5W5)xv;*T9}{ zVA~}U{03ry03o`AmY2jUkS4@w62I!PJ=`Sb{960ouWXT@Ud9!Q-^5yhf8yEL3Q+J8%)W$l&>$<<(^o&^BO5{5bSWFu$t=Td8f zUQ(k}*YK2py-oxj26RgzisNsCZvqm*O7&N288$?sc9)_*0IiY<6<=t^sI0%*TptG` zx>luFYfd%$lOCOt_D8+`q_2**^ycKXvp0IfE=7#R^OO##Mw3e7#^h$B21X#A+<$3r z&zttdpDfI_!ov{zN~*k940iM4?b-UwkHL3J`gHRGtQY_)rfr83z5aj-^i*p}Gl(~^ z)UwR!(v&NFKMB+*M5^qSIV~c}yR}l);MUI9H@tO*u*{ab{`wA~&EPh|n4qHgIW~ zX(>-@4c2#UbEdWP`86^Z&lT)a3={~e zEVLBEcppNG|m|?YoxtxWq)C{Gk`6Z z2^0h#o9M1XBoB38wcJ1-gmWs~T+e&{;u&4ngE$>}2q0y0LxY#LX&Fjcm;RTMBRqs9 zTbx;3UA)jA_b}>>3fD%u!o(9TKjYHUWiRx@$m7Z!Iue4u#oFoh{exeW<*3MM6l-qa zYTCV0Z&j+_p-+`2n(VQloPQX`fvGAd`poHaopy9O{87~pmN2JBW){IllgbAiSD|>I z-;YT!+rY^+K(huZ)3SB)VynQ%i}$8zWi z&&Q^1+5#b-MUl8tsj}r`NC03O6`A8OH=yL6hM`d?TeD5Tg0MG};eV(HXbAmx49No7 zK<^3eu4ubk9ExBjEqjl7V{_S4~<6El~qm}*-*3>`Lxv~S{oXKBM7u**gHqvqs0jhT#Byb-qziBKi;?I+FpP; zmFf`5WGok_PpSBEEo(7Iqo z)@Prp96J=Dsmo+2V&NnT@nN_#h8FmKOhX7V%|s*hSxR|5{(sZ!Rim0otfW#?DM0Sh z4WRVMyZ8u*%oH-T=`YWS%auY^jRu3P`Bwm@u4T7rAc~G1=i#_XoHhv+C^QjJh@iX# zQW2_Huw?;Xzz-lkgC!rql0RStI~J@!r~&mwLZMEm9g;YX$4~B=Nh+36quQC7d*(jR zIm35Na8ehgAb+2fi(G0@A=@7dVG&Glh-+iy+Jpeh4xMz#Rf)gR;U@ogYvVQ)TLON) zb+b`H-h=+(iSsK0sgs|^2ziiAE1Kw+Ab&Xs7Nv&&n)|E8H6RXbjQ|rw#1vbF=yge@ zsHT!;PA3-aUsbTaS!0Xr++3+?3mP9;`9`WPOk=^-7k?9o(~&X_v!t6dJ}KqOF2|UI zt`#0!d$@1yJ-+q$+i}-JM_@|6eA%e(_P_S+Ud33Ia@%!t-SHjZLi6UA;qD+FIjZNW zb32(hp*xE_4F;L^onsw|aHzYHi5hvMv)-{>i`JVqfZl{B;WY5bH+;7JG*ZI7;gJ{n zm9nW9jDPN7cjw;D`Szt=|NE+$=5j1l{a6v*RN{t~GGbwz1UwDqVO=kg|CP^z89kGL zddy2Av{;}dNCr#qKsK99Z1UkV_V|w%%s`T!EkseQ!P`|W6MI4hg%BT&D@Z?ZS=4;@gD4}2kFMs7i zCyF?E6|bJZ{(jsY&&G!*hg?YLkp&X^6NLF3p4V3EPJh?~4=6#olG)n0(HkCw33)FR zZh!jdhszlhLQ!0}loXcJBiKOl{VAxT4^2pq%|JyUWK8I`fDn(c0~y2!M6ry%Y_$(t_p#^rT|p?pC$DDE%8PA^GbDUk9wFBXcl)Ixy|woI3Cw}1bQ zzCgGksyoxS@80~deiR{_tZts)^h2)a^j4!anNO}>*rYvOGiq+&24GU+4C7|{*!v5X zEoW5HtDir9IzH{uGixi2qu~+VE3I?wcC8I{Jw>S+Ro8bT$!oG~d7+oP-M;J1XMd&x zuptRA{7f%Bo5`VzFA>zKYNlK;BY!ckAW|;Hi;a!32fkQ3BAw=Sw(wt5dXO(v?Zjw_ zWK5L)zeHbIL}UxfR3=pWQYnj#PxVp_vH?p9c}ywgQMeAo%-uf$csiHfCax%s&v@RC zj6KE=+$2r_gD6BwDCs7!1XZonR#nvnJNgy6>sMg~%Sr{oqD7)01Y*&O@P81Xijp|s zMtQnUY-h%?<9YOd&UM&1UPRY(&pr42&z$o+vPCZs@c=c1w6^99sFIG(n`>r6YT6tP z#@1A$TBwDC4)^OvspzO0VelCOLgBD1Mvc&P+L!`wY*)c6b$dJ5$T8E0)%K!bruy0I z_s_)GWA1u|YIgdBxXB3euzx%P2_%weTH)Bz(x@ZcF&$j#I3CQIP95DTdPM|-j_!t0 zcy9Xhm5pV515dQH`Ht^Tl1rldhO2|%vMGl{f#)!U1@Q4zdD&yI8yr`{3Lfl#T0LtU z?yC-ovHG2ua!Fh*5)yGy?Ncu78}$P4O(r4oo|v z(HqFYz{sel3dgYcVH$li`&Fa81_#mD{dc~0e&PJWrJueK`}Etj-?ti@zuv!bymZiy z(pQaUyVnnhKPj-r#1f#&f&`~{|KfDTwGH@z!2#t2vaYq#?+@X-X%;Ib++lULn(E=i zYWIUgIXBwCsp5&{^?$b_eDF*k2jg|)rI;e2s9M20x*KfAaSX+ibMtuS-1Ub9^t^2Y>2#_b~OnrvzW&UZ<}XD*)oy4d{l!q1nbqAhg-X|pLc+fsWk z>IShnW=x)81eqMH{u8dRC_G?EAs?R6RHFYg!(F5JU4Pfu#q&3;mni3hKP^Yf`%)n< z`8oQWF%SEjA}JY2K}Y(pCAHdAw-ZHT3`Ba{y!o~}P^n-%9`zhXd`O7K1=GpeS^V_% zHfif2UywMf2-u;vCJWWI)+!9uu^c=d9O5BO=Lq;di4R#W%8!??-d()sdwJMWt#Y!y zQRfswtbZFeb`rOB%y0;1epB+twR6}bN<|XgHXd^!+_x#?z_siGnuO;J0av;E@~GWAlOS>LM*C~4y#N4 z7l5g&>2aHiqR)2hNivhELz<6HGf9~NQBbQ=fe`A31?+|mV#iP zqJQEnUAYUQjWw;#mkj??yH}u^RMV>H5tk(v@0Ioa=7YhbnKkV-kLYZG*JT=P0UNWW zHRGDnvYn-rH0BfhzrrILW@AsM=}~c3M?@~*+b2Ub7;aFksd`w~y{*%44_)78QSy9Y zUlS6ixb>h6S1O0xZnQr=`OJ@k1XlE5&3`#-v372C9-n@3dHpxrsN(93BA-?f1q&f) z`Y}No!f;tgg(NZ&>I};DawZEuaYp&25gUi~`hHF0Y_EiX0MTZpR7qoOMVoCUR}nU` zl={0M$`e2K#y z1%L<;f&;GBb-mj>Vif^+(i5bbtbdL9dWyM`W!moh?+tc{uC3)lopBp`M2IU2^yv<3 zO?t)l*R&2G;ehf0En9gFn zxY883`Iyei^*2w?o<2W+zN0f1eVfv0?{r~LKN&vw`m1lwU;jY?KWGo>M}G?V;@&Dm zkSZ*XdeVKLVq4#Dg;8+!`L_xxU!&UxE%d}?32oDNn|B>FJt5)EjVf6X!nKxo34Gn9 zyisigNp##gc8e-c1yW0Ots3Cg*tY|lX8T@uxN=Q}iMlFP0)AXGYd*Cm8nZy$=)@td zYUmt9UaQegpu|vW;49psRDaVNau%7Jk(oqy-nh*tLxjAw6&s)MdxH1-3c;g_8m|`K z{2$g4;Tk)3rmisCMUuS`aM$>+BA2^75kPG86rYLMZiQtDa|w99oQUOAEDSL>#Q2?< z&4uHNI4Z@*XiNQB`|;dY>y^`k*1n?ZYW4on{k6AFxoeS@-=N*6k$-Nuf$qkE7vP>| z@4GM0etY{e!A&*MkBGpp1#S1J?2^vJ$HyOCJ4*`8-!ES-ojE~!ChRB@Az%u14Jiwg zu%mZ^&?i*Ba?F$72SMZyJ44eki5bw8(sxpP(1)ko*1-B7#Cl;P>II%lK@msdX6wuf z<1?;=p$CVpxv)dvrhkXxhLF%)(d7qP2LDpPZpXLagrVRLoAZvyhw-$lRkez22jRa$ z5IVo{+bt^$WhOnie$b$n0i1fI_f2<6t6kG-F&g)z0&|qI!#COYB2z>!{VM=X*V5WV z7)582NoJ-=nl$aS@!47*XwizcV#UW&T2j<>;!hQ(=BF1Low_98JE=r( z)(P!|<6f|Qhh1MHS_hV6Czz;zLg{C>y_(j;yX z1zzk$f`FLLhTPYXf-@txSZ3onK}x{8#j=PPs**wwEq|sl@JFFNA#(Ssq-z9D$fWTT zJ91k7LEUP6*{LqCysk(tpbJd|=@7gl+k}DY;0G@ckBPc9h9!ps% zb@{k4V-$^XBy$Mw%D9T~h^vRAFtY(|LH8-OS0iRelM|Q~ELGDOGlQB&EH{h%VcMAO zx@H*C(ti*fI$VFHc(iS|5l8p!79&7XWBD)-+63Ga2AG<#3L zPSiSd1`f-pk`?2$*IGL_=I*$}<>@@U_3+!)S1ps{l$i!LyoitDQYsb3QB(IFYooRf zhmN=3!sddEw)O^Y+uG;N ztbdUdOAB!wso%PAvvJT6a6nFJL;Mla0-iV0MmKwQM%#&IW;9S$eLQdYvA1KnOQ9mo zO-LO}vig!os!CQ5Z}kzQ!zmkQTTWjuGroxf#P1?TD%gpdGW9&}_Bm_7EI{$oCTjvw-p>ejUdO zW`MLwPBGwHlKu<8)3x+AaYoUxJ%8h|J>!WpaY7P1A+#ny8(;wl(M5%LY`bY$u?fG1 zf6#x>T~(>w^cPg9Y86#YTUv+^ae|!~+w*>S9-iKFKZE2|?D#Qr@BQxM+;aqerX;#Q z0xXD=4V(g7F6gt0qEXlB2c&qW(CY^M6`O&uXPIhYMk}F{I0LSZ z>Vqibsj84I;x;UYFyI&91mtB% zv6IYdR%Ixh;s%!%GZvVPa5U7wkZs77`MjJYk`o11;0|5;jW_<|Y&7r!J4vnC%t^8! zq1=QXs6*+M(!6Aai5n%d+Wh?__;>2`eg8Cw#!=ict_?!Sn|-}vP{mCKufbqF^G{G>YMXdlFCsQB@jra*~nMl^U!f&AKZ)kORT_gpotemw%A#h|&c=3QoqymN#M^ z)BtzVJc^ ztlBtr04%xCy1>!30#fcgVja3eB-;NA;EnuY#7fD#`T_qAd}P5d;FgRak0^a)BVTAiNt|dP zeK}a|A5_0R{Q2u2pC7z`>x4mDslSh=NA~GY!y}`n_w+V7SIoUx(Qp^Uu1@H&-(_I} zK%M1JyQ`gvYeiYo(hSNcCjL~Unr`UTRp?1j_T+P3z>~0=RPxCoicp~&?#1`re>P@a*Fjp-q?e`Gvp7AF6daAx=CiR(rg#fVm(`6 zEO~fSaDTBY>8jSKf|I|qyg_e3)n0`wHo9YqtQhqrI)~az>p)BvDVW+6Kqpm2jq`|` z(sMC^{a*m4uBEq)DvWx3=VgyQ&}ZGVYPlq~Grx%bZZJl{DRegX~Amqo8z zy5w3~54_R}EK{KjS&gGnlt!~WVobV1i0Hr;&zGqr{;UVpk&>AvZWE%yIh>3^K72ze zZZL2hY#}md(V&e;vqcO8S4fHTdN|OeLb%yA+k>0+YyQdQ(Q?CCh{q>i_9E4tTo_!b z|9=*JzlXexGpowl-P*+ir+JK{in7_w{;jay#*yO@TlMxNrT&ytbxKks7SfNd3_?yV zin=xnQ-+RjHzUd9PCzDQyT_MD%(~d+H9TJh9V>t*u}#-iu2V(G;@V_due+?(m;zQ- zvTQ@XPuRXzYt3AvTG0aDg$6C@2{|rDaewMk$^TI@!eTm-0a!A#s3bcQEl%XIw5)|e zg>SsUr*ZQ7{7s-j+hF(5LkekB@-oNjl11V>t;6vl`~u>Xj@Mn_eP78nkYg`IEBu|| zozWEWUD<7Raoo6G2)9e|r3hF)`{>KVvxD>KycEJLECx;jHv~JgB1D}?6=H|TV}G{5 zevU4V*g_O#72gZOW_!!;54$@I^AR&GGskLtaQnj~PrJ>I>(ugjMi6v9`+5J-@%V2f z@~2lPcq0h05bmI7`%iO`O%R=sLNtDzme)NR|A{Z$?cKcp$%DWR;(2@}gpQ6v9;2oa zq0qBz;+Wp6e_nq3#W#j?+AQHF}Ai%tVj(VtN^8F-~`qOnO0o8cziAUBPbS4)1h!&PZI$Nq^))dmBcr zS!)vJFWjgp=U{OOvZBa1hH9!fTfVGN7r2_5fs+axb=qZA$}K8W;)h%na6oFp8Siydd=SJ@n5hrSgBw4;Q)kH zCYF&myqSb=!Ka)}PN^**HEInihouhdp)}t3)c75j3bu~(>ROypW`CEYJlHK+@(=<}-G1__}X@iht9u332-Q7NYb8>|+ zFHbFr6~%V&7-1M;Jd-@q1xy+LTjL|wf*~9J_x}VS>S}tLh@$9xww-AiOG>pZB{5JS z!~~-;Dk=$y8-IaurGNerV_doPANU_!n-Dj;A`lm9T$nbBlop0zI@bCRI&D3&IW?CvP;jk>%T4%v& zW4`H)yfmXm0;vou6G^Y$y#BPitFaBFjB;tFf3BjFW*bSb!GD~v)-e%p(#o;k{Fu8N zsY|C=n8Wh`GLe)T-+Fk%APi(!Sf6h;DvO@L-7xlqN7*+`hjUq9+z=zdbS^r!oS4z3 zatuo6<35oA4*nN>5TYKSdy>deHx}hkz$)nVpyqLT27(u0yI@;e}=P+ zqbZ%oQ5q#sjI&>Ls!<$XueHWJ@>VK10QGSa`lCUs z-U_407k_TqD&w`NX3ioEuuR7&4QUK=dM?~E;o`%=&pmhG!mZaUjZ>z~{oCyv_6~0> zZQ?$_lZR0lrbN0hQK?xzp-H$D`-5M$a(PN*bE`9)a)Ao|QX`Wfi$>J*Mw*OBWZcYi zoh@b#Q{s_l{&xE1b{-m->QB}qT2zuo(= zdVi(yZs*1J^-VVpMVcTuyj5LUE>^$vJ3r3a*sL|@Dy%Xg4kyZU;rZcz`-4+S#>o?i zsy_^v*FoJ{e}EIy4^H4yaTwsu6Ryb0ekz~@DRc+G$CM$=U!?1Zy>NPEVp&qXz}T@J z&4ni5KlWOp+L@Cgb(d6<%Bif?$4P~l(|=-9*_cliRwh!Hqw$)0;pfS^vuE2+zyJ9r zr!jf1o`xLZAxvf}%memf=Mlo|s#Pe>*`+X~K3%6+rY2W)#x^Q@a$yA`5ya!feZ8}C zDf{k>Gkd&f8oL#4b7X8ik%7fUan#Ng{|P|Uwe&V|h0&Suygc?~?2yEyK@Ki5gnyO= zDoWG-2bTO1R$X;fehpj1f)zpnb=yT!*dT>OQDWkFGGmYD>Z`Q7uq z&RN-adgzNHrI}m3&Z>4t6Kw&-)VR_WX9XlvtYXB)_6viy=XlZl8jEX-umoSZ70;4c zmidQw@5!CQ_6Z(zj2oW5P#u&a(|^OSrQ{bgv{g1)AM}RP^jfq>sOm|HDD}ii0F+Bl z;X`eA^X|#`3)zC$2V1Lt3z=s=0gAJ@Ws^-%q0vedkSj9!*1YWuV$Bk z|7p(q1DKfISYmuqg?~(UKw|j=GdaFrqZtAN-ER ziL&TCJkPZPMyFgZJlB7?^MA|fEx`om9$>)GA}nkhMfAM#nZ2!d?~v+aiw#JNR_}>HnvPDlADdyM~z;`DHX3 z$0K-YNj@KJ50i8TV7{nSQJUV9=pP(mob4zH@w@kW_qx7+JUYfn^M9M|&CX^x4IkZq z)bIDt&o3IXxU(er`}sd_-o9qRWnHjPooNgUvpBmtQ$m+IHBPZbw)7$|$XaT*+O8jX zog|%hNzqn~7QkqQPP1ByGQ`@xg*X#CpN;h_kMLzs#h*bgvX|Nnw zgU#B%|K#xah?+!ue}4cBbeeQ(fj2L%FF2~Y{O#w*)A=m$+SHJ(wRJxL7NJ526DM9? zrLJic9>PD6(wd#ky&{|Zxx1nF9PR2F6Ee1k%QDZRv7mO|F4gI+%(WqWwYm~>QurO8 zj_9nnU2?%Yl#CKwum1ZzI85hp)lr4FkOtWN?gii*K$4RIVfbgR%*W2sZ zyTg+s98?KdF9yBAS1R)X0F*#$zmWNGS%T&oyuDt)7GlLm0+>%bUY7^M1E4@5)*xI{ z4ed>l>IL$+Va52tuC9NpfDx96fd)hQukd#%kU(?q)Y2Z*&@G&thOp}L=1F=JUl>hB zKmfe!d@jT|@YI>|3FK~V-`Xi_SP~nXM=^SG78ycinB&+4UZ4oKH3_3t)s0uLK&9kT zF=euTkxEPfbnQmEPt{ZY5dSuW4eXl$JYCCf8)X=^=i<5A<8gn|SWVp0i&`p3H-Hqe zL86;3x<-OM@DME6@EANoUx623fkdUM5+oH=MRDx-lCkIFx%ZrJ#%wIv8QYWJ|NnjG zyPeb8cRZB|oqB%-X?LWWNZR|lo!lY+43^J#4x)4;DPwu3P)tT-SyCJAG3n8)VAd#S zp&E$33&NkC@CAP|mwx2k4iQ&!lW9WgRW_7?W!2=&`3gWyDWMSjA3O89^?qoJo(zXm zq&jLKp(x%gqGeOF{eSiX_e45b&g|qp+Dtu{QU-qGYA=+j$p3hJFsbFB-o!!kX4pzm z9E1U7Zi~$-^gAp;=bcnD>q^(7xJvUn*_FGrl58Q?M>T&8pfJUtD7w-VRRHh}qIDv1 z(?Iyrbzsn8JbL2ysT0%{>MkaEWPlJGf&IwrN~s#MzpjW`E4IOF@Yr`X*VTpt-L-Ys z(JZ(JQ}JBQFjWg*0qX*1Liug7^XP_3)jrrUn*%JB3jCf2**3^S0EE96|E^Q%HBxI` zr;7Bw!~1{O_p|NH=vgCcgzX4x&O7aD_l_Pe!kK~KQuwxTs|4?4HNsMxFtWg&K&G7T z)5t4HUQgz;)T-O)p-XwLr65vR^nfqvxq#vSEiZxNZPRUX-y+AYXCih8OHCS1s}FO} zj3hsxIP%BvX6x;$5?Gbx$@8-p?`H21@Lu06zW;ybhu43-vMAUT%@*^;;u@Hvp$k5A z51)MU=^uaoj=usBz)}}NmU-+S&o)@tgqy@KS`Yuq!r6a9|Iot0^L$>H6yI(HG~_3x!oK z#x#Ey)3-^w!#XavE5Nih_oT|I?B|>6JrgYslBE#ozws|#rmufDdacAi{`TwTcKOTMw~r4e*KvsN%d*Vx z``5uL0=6#82i`bLcIVso@00l1?I%DjQ4)Xo@n_p4n%~TU$tc@NiZ?0c3Lg|;_;@(Z zib5zmtE<)J(1i&~T+0PMU<_nh2!n!n15e!4hvGbjy;z2;IFH04cck-$S@P4nPv3uD zU5LU#-A-jnvRYE5)$!ELB3D&kQWE zk?;6PPDMa0(!d_#Xt21-Gp+dpzhMTmO*^kk&l@sLo$-L+t~}En^?e`=?Byn_AZ;tM z#3B&|OxVarQwqCCYti-s1cVQ42Bm*w7^r2g+4Gq3_xd0JQP;BDwh=`~e7{7=4>5-F zu$(pqoK~A4KoKAdqnj285TM(BSHGi+?ustjbrxw*6zQr-9miE1OR^|YltvQ8o^wez z@X7#956L_CHRqo5zkjd$HR==1O*N3Fssaw4$Fl`gL?Gj4T|q_(q(SB$R&syiu(k?1 z8G0NN3)~1%)Z<3V@oGZ6bUjCU*okiadwo%{s20?gW3%3M0vHZH&tY;z7G?%T!L+P$ zazTi|bJc^FqiT}_62i?3TVEIY%e#GCm6NL|_9?BY<=EO;ue2=Q&3VjA6m1;Ej?DvD zRa0GJQ;m?N!V!`uL@36VdcJ=tii*7x?o3s9M8!Me>DqB*hWMpyq6TwJpWfVT`j+dX zoV6@b;dJc=+%!DCgLRlP!NN>m=*%d0Y7`_KKov%IkeZ%uTOz@CNr_@vH6Ib9p{44b zSIFc{gQybR-|%cfF4KTyno~;Vip-fryC$!}+JevwBLo1J6tFXCCZc~3u}FDuNTyGS z5j;meU1Z~I_C6gE^&PB1zR`YIr8|xUP7sA)89LL25IB0k8CcS*Y5uT0I zGQwj+Q5%ZU;89I04w{ry6`Ext&)9aD)q`iErUfIxM}+gm+O*aPk$4ypV=~Dqwa6UX zL$L35?jU8`ZMN}8$K8Kp{CDbG&8{lKGQC-U^W@u?f4zLzJ6Wz)>3D)$jbEDvDHOe4^7Tl&V#rO%++Z>=%Fh>dv3J?#9s%fBgL0#p~}M zoIbz*_;QgG?7&k{auWEC8~DKt2@#%Xr}yjo*O&R=WUqJn`Qt%4LQVg6aE1)v>qn={ zrAE?ikZ#0*XD9rp&?uhRsWU1hNO_pt8_uo>NZ)LCf*60ff6_|uaYM(OFLMg&%Awtw zbISz+Hbv$o45M~@bNN=?AjD<(#w{CF$|omf#5p(!tG2L55TCl%Py46mAJ5jT*f=D` zQ7$U7n)D$C2f3d;diHL3&M_s{Lv&vIakA748_z&SRlmi#_iY%4fggU+JL%m!LJ~Wg zjBWCD6P$mY&eI#}c!H~#ClxiOkw?2W#grp2yqT6@P{F;Cvm#&+lqh*%S-0@Zx(nZE z{3ifSSJT@#6-8~o#C9FWPU9wRnYPR@9nBO9NHYu)f+B0jv}&N4v`yPd(j@+f{cLmYeVKnCKtBi!nm9D3nX(E=N431!S&V5o%`PnR)&sT9}sV1$cAYxt`e9zXEZCEBg#@b`k zWz>K6O-U?`oT*?5C%LuuYH!fxBh2E?=If_}Q&vi2nHU;p$+7Ou+EU#iV}nmoYUON5 zRXU=S1dBA(yljO}(j2{F3+x}WsxQF2D!OIjef&IC(6dydj5k%wMA~F1LUPgqElI3a zvSwaUW|^L5nPZvv-hc12k3QLXok+E^Q$sB>Au=LE( z&ePFJbbfGgfKa#Qui-9(dT^PHiMAZtB`F3EIIqcbOu;4HeqMteg_ z**X44u(`q!!A-;O^9(mhA~c)^mbTOF#IxzqStm*+|DAMRxpDh^(B}hm5*_nAzmNqo zM1vrq3txWt#l!tyVN|P&&$SoZy^DWiq$7{JdnigK;g~>QG8S6p?&ckobhxB$(-TFK zh*U9f1DGqKu)&k`xy+f(w4~O&p|1xUxP^pdQZ(Y-WBM9NV<{H=(bkolFKui;dDw#;VSSE+xjcF+38B3y1k%HzY5$uUd@OIntZu#)%;}0^U!=a({xa_QSvzjslM^lX2knW-3zE|M|}{KchO16Aa2!~LTu`uN42C&LpuJGF?A z{NJ-K;w!68P{WI~H8dp;Dk2{8R9GF?a<8?oA>4*p7{(z?n{-zSjcKOL7JU75Sm<-$ zpjY$X+1~lP`xuXcDf{vFtBflroa(aIN{Mk#DrOiw@Gzd>^)gWg#qfV`NgD4R{e?X# zcuI|g!6;@UO%ya;kBqI9ozp`_yE`Y6(*=@RqCvG?$8^?P&kw?<$Vj%L?u{IC}PE?WyKDu zLISCqieJE*pTUj|YZg>23IZXB5CYOfsbeyZAMx1ZdC%CKd&g?Bi)721`R;e`Ip25h zIUD>gQXluF>k}dp1O$L3PNPd3Kz8y=$%%N%Dr2So^myWeKazjrHnn6@@D&TWDV$K` zqaspe!ZLt*10!Rf)09)-lBxr%NaC4Qnwk-i3+Tv<+{0a>^zThHCKzWtPwG@=P&eCv(pRTZ5=RM;#Y{;**9l||@+4bc51c}`2`^AY$Ooo|a`uKAE_#QU-5`cB3m zJ#XvecbN_(*7y&kEl#-) zi;S?@ShpzYav4zCP?buB2_USusz53|qAGb{Tle-@`O#SHi2nY;8q44GH24pcE zE9G+$R5)^>ARZ^>%X2zCLH3uKH%Q0@1Xu7`U6m|DGIf8Ee4NB0a}ws~l%QENu!K@B z)3J_BWeV>}1d+jlsmMrDQ4g0(a}(PHk6HbmW@H_P_Sre((D2MKGf_ zGEtl^Cl{`R$n!&DY}htI6aOiFXg)-ikJAuk2%E}K4L_#&z-Fb%J(?ngBHc&R^(I0b*c`!f|H}u? z%oz`d2(WX+>O*x&E&4`=6q{M3ILc~3@zhEZSo3mX1qbHZ)2rIh3#@~8nx zweU%BP}Z9zwVogjYTA}2YrD;^8_anaLTp&=Bqo#OmyJs8m0Dry2!xqfrDzlF`SoEg zzrcT^8c%H~u#4mpiqbdV{n7Umt7V)e@yXd_r$05Hs~4WF)4gkwGHh1}wm<40ef!&L z*84q*Koc9q^4AC7A3B2vH|{ib({`p}Ts>c`~1O^AO+C~hf0{oX;5UnAkwN#<1KQS3a+-gK8f4V_|hADuiG=5k5_*Q zn~}3e#Z+X)550A9?RX1({d73E_5Q7gKmD+9U0titMGMu8+@~R*lg+T!%yCz!5C+Sc zpv;uXHTr|&^TS+XY#C8u^FW9N8jVJ3WnZ9G3D`ePsYhH8{uh9$tLbf{ilQ^)8GnB_ z#?2%#DV8FTkf23KAXSlAAtALORYHFP7E~-)fP}D^?NP#gSEt_r3V0b52$yzc~a! z^{BfI*>|t;mxmo2G$|iqy$HDTb{+MD|* ze(?V1moI;J?WY?%zwhtgf9?D$wMzcxZcA@0BlVI7owjX21SS_M4g$l6{|L-kD0J+s z+89Y-5Qi5eDHi{PuQj%mvf#x0Ijz#*P>WP|v>qF0=@PsLPB{exSS)`mlgOlD_H-@ zYD4O5tO_3a!v)EiGfSabWb$j7IDg~mQ4zUyrZn+A9wD_n_xicc9-x@QPc(lmj>!a8 zVKZPOCt!mb3FauD77>3w=QE_I4=TCZ_S4(9AKtP>R_)JUTGw~3p4oc7JM1*wE!h2- z8jaKLuv^NNc%_f;7YAH8xIL2bM(Zn&4?W`LU>VeMHJM{91p#tKyyi(2k?IS!v{*(+ zILz@{ow)5-F~l)SOO%01LjcM(t>|^zqx&3=iVRKG)@90 zh|lo)tJO8^*t5+uK^P%c!GN`fC+X*6v+o^F1K&yr_l^qi-`z@`l8{KJoD??D4`P7qCPvXnl^c@V6g zaN7s>VZw*w!Du?@jeAl9;EBRE&ZA&F8yOVkOBxa1Z*88(!@HN(xE0z(%4RH z$FaTlecet&s;Vlos(g;~e9!ZK@B2Inz8{RYKH)p5%LM?+|5xOr#}_;{EJhb!Ug|r$ z@Y_eDlmOP86*0|&?UPLG*@wHVsoKifi+Atc0o8S|nP9aFG!8{@q!Tqw+2Zl>%E_+P zA#8u0V9_5>F9D{}hk;9?3q!Q)#5x)w2tzMW4Z9~ve^Mv}U~>rga-y~XUpX$dZz_+d zjU$}+f{Yov0U13|d^i^m$F8B8d!v5x!hu~Iel>EUQZ}a$Su$~67bnzd6b1|ccVu&e zVLWuAffG7TG#o{)i(Ujkv}2rhLv<;NK=XfNSrRV2dU^T9^NpYG$ddWymDLYE{5Xh& zC>HN;Y;Qm8UR{05cf+4={lTFw1Avaw5sg1{SZ1N#fRu(^l`JPQ5$o?PBY;#&gLHtU z1X$Kjv5?VmE-&Gv9Th|X^>Jz(@mkKN@nBXKaxxEq4ss-i^d02_myC%;$c2+MqBwuV z=`DYp3SqZkvBUh%u#;nwnJe0XmE%>|yeZ29&#_^(m(E=Nq1h;D<$ARa)EE|Ss3rJ_ zVD}x9T`2Mko*()np7ws*vo4%k83zDx9z4qHx7Ul>RM+n0(J(HeNM3&0tk_PE3h~j% zcYr+r)qv|$yj!^XsiYJ>P#lJAeM==aw6H8>j0_%~mst0@&9_zHKPx)pM(B z|Ew?Lbm%s)KT2IdOCk&g@$B|s2c8)q#g=DL$04SIEF761jz_&gFNh}3OdkQJkG?TG z8|^`NtJ|8=%kclZgDxMj-F|!E?IkjI>DeWa8l`-Z=5B0Qa&z;Zq3Spx5>J2TYIC60 zec$if{R^kgtvy&X6$7vaS(u!kVCTLtTbWg)ob6f}lwN`=DFvs0@{x)aa1%^bw_F?ErLGuHm8x*x;1Bp*01ba^&q-?KfG3_u zojF>WkyAIiA99#zi1Dfue+PSPu#jEG(-Da#25{Yqq*RMFxZy%7nRv(C%c5!q=thN- z1~$$q;}D3dj3CttwLN!F;(=lbIHR!d2S5%4ECE@5-=ziR14^QbS%sx|c)*LXqZu(H zW$;G^0>z5}Af4S#AC+fI|%PGUE0vZf7T z?bfm_orZw0X%dV9(h#Dcsdro=uEqsa2qf+hxBLlirg4V^Nc?{QDyUGUYE0d_c1yeU zBOQ+O;l%Mr{PA+mdD9`TEhW}#`<&;T^PK0w_|DgwM3J3X;v#m&RSrO(66*1a|C4(j zb%;i(p9w@7MaK^~Yl%rv@1Vsn3%H!6aALRzCGh6<-z2#%5l>Mfa(*x~QL$`-^WuL6 z1O#{N^RbZ-COLo70Z<91w6YV}d_fe-c63UTHOLTSQj&I0u(b1t0j;a!{tzWh8tp@N zGI)G`<05ytBe&Re5^!n)eRcxu%naPY+|*etEO3MZ7+j@su>-XNP8V>@$`n<$Jt)Sd zBx>wQLz2Sd6Js2*N1Shq2g@}8xn&k$k!x?fx$@2T=N5loF^}t7HoJK7;t#j)5T+0z z@;$0QX_>~CUwpo^Q{UO$!%-`GV`6=nQ>3h#(6f@7mNKeHi^J5)qU{odp>YDv&qF&= zcR2I`p9}zP+5v!fi2IJq90!d)Q2HZAMqoyTuqdjEsLCR3pHeO>zCfL`c{m>N2Z>gfWQaO z3otJLH>1-?(0=|HnxM-6G}fBH^ih5+3`gk<1RJ0Xbr(4Ea@(2gT& zI$@WYvD4+*w5;sz?FvLX4+HGX(A9s)a%j;~K*1T)YEpf`xW6XaC(w@qL;yHa(r4_z z=0;EO=HwKuQk-k{3?%7e)=8*nco6+708!WT+cp`7Byw5YPzf+@m;4U{3=*5nkWcK=jT&N{IlDO^YeeYp7?fWM^zOy zDrs^=RU(CAL75O=zj1x{?vMCwG%9h37g*wrPHPdbdv2(0`#@%a4n%WwRF>p%@h#bd|m5!D>YnrgR_rbr2_U6Sw;kP30Pt{cMq_h@noj4{Xl zFD&&3v@A!+|AFe9M1z0kerD18w|-POIY3a$r&oIe2RQ}-x>!5l&N?S`E@gIFte`?$ zP2e3Qe$sa%QHlOAjOX@(ofnWutzB()suMW&m-JXM}-R^cwyHz+j#MrIp*Dc3dOfRMr2DX2z?6fW<<2rH%=7;Gt zXOc7RZaY7-vUhkNF#_B9`}@BDP?svDQn^HoDLzrhOv5566RGi8KxreD&YfS;B)LEE zO0}b0CcA&UkNCU&)<-`-*j-z?j0JgIeT1yKk-M^#$^Z4}k4ZW1^c-xKH}e}y*VJ_Eq93w4AXv-|%X$0z#?JPq-+Xnu@b&Jc&I>Poe694w@tgPF zdGEQmvts%|V{fm1Fg-bYQJ;2zEU4t+FB=OcOYrA2%ZzQr%+xGG3dR>%*6do;Q%cQs zRN_mYGwy%>eviaGCL$P@z6XflR?Qk#^DCEMF4fDrsxzV8507i>xO3LX;ycra7!D8_ zFU+nqIxRdq5O+o}nGnLscnYvu*YvsRg{IXQc^|P1CF?^-hHfCcZ)P`3%~PMG5&Xc~ z3D?EsI61h6rG!Q%*ZdNJEgw}Ls5>bn)M^zLm7#y$9;%>mlQa97kj^HxJ)aF|srejV z`NsbncL+n9ib9N%`65i7npp`2$e&-5B??0S2|(1f^tMrj(eYzu{Fw2?C2<{x+DZrx zBo(AU*c7Omma3{yq!v{yx?%zR0X9h8utu;$p!N?SAy!DJNGvK@LaG8%T7gjFkYa47 zc4B{f{Fw2)@9>>FiIB2${J3}S_q^wv@5H~yG4@wtC)$!RZihaXkOabbCNoQk71vV% zk4xade#XgTaBwjZ8LsDW0b?P$z!CoUpp5I4)7g-gi&Z-1QyYu}`h-^&);q&a0=rCW z@}uJy@Edvv;4r_Co2O(P4&Ai{PRwvz)3kpk^y5d?h#O&oPaNTM%UQ5gtm@Mq74^{L zk7Rno2oxG2hEOyy!B^!R+N==sqoPR_g=D~kj`o zXy|#NbUKDgOx)eWPsDJhV<<+y~27xe#8 z`_DN)4}3Rrw0yT(dU;6cCe-9%2H;|FuCSO8eGfylDRQ4OWKcXQDX_*vE(xxigW^o-!*@Ua zx7#4+MTHbOR^8~WlvedgpX!6f!VC0pMLrd4>Fn}BXJ1qD7AT8;R?6MFd0T()>#gHM z6WSO~xp1yOI(mEUot}O~QAbT>xw4v|%Ib^d>h|6vdU#~Ow(pv@fj}Aq%P#~i1&pUu zQWlUx8s{tLpBy~K&|1gt4Ufq_L8(<|i(b2Gb@uiKu*54G-wTzZm&eRWg zUt79xHeVQ;L-GRUxpTX%dJ=y)rLa6#k)cV@9~-0n!`()=@y7D&?Ou}>bz|c?xf08< zOZj;TRQ9Chn6~G@=7G6#00?93Idzr-fMFZCw5nzl%664>mKICC)E4%XhM$6z(p5zFt|?zSX)vG`{=l z3tI`&suJd6PxgO#HNLs^(T%&`f7bpZ*t&A7+t~i`a3@H}*XLIZ4`Pi$EL<#uWUMhI^XX}h%g)^58lihz~nGup&8=XhC989@E89)MLx zZ$}x#89!j3(vj1$T7P^jqGd_hNwwbI3k09?v8(HwRL=p)6M}$Er*>kG(M#}o>KQOe zlB*>O1_O=~1UNOiz(=ExpJ}Qd7}QjKo+p8%9g7n9NC-}#r(b`@#3auqqXrbm##exmH3M7y~ z?C1idt_lJPBsPC-FjTE$2RnXDCXVfRo*r|)dlOiBHZz{NkMDlxyXT(se|!&^-(!f8 zbglr#E9_KkU|b*JLPkiq@advQ<5v=uzT1nFHwdS4bGxN;B!EvK6Nae;v)gWT>d1nL zJsGmeY}0W>O-bV4NyCKkgOH&=Gr6EhD&SZUxIXe!#Maf{A;#;64X+q_;AE; zM9XTYXBJs0GBwUX7?PEwqsQ)fBks>dj#~iZogS7 z{T5e8Swm73yffR|XGcZJv`37dD@m|)j-w4`QxJa%8C*biK`Mcic2gOO=$Onqi)8U6 zaS)-MoRp-dB;5<$l#(o)k7?hRHn4|Gik66~Sm^+Xwy)nTH>-@AMn~$=wwJP3Y;TZM z5@_J<7k2PSvul>B`=qNyZk9*QPCcD8%uWOAgcy@gx+c?kCJGS%kL!_}N~eGP?B#_@ z^T2;PF(W>88DCqEL~qbV1Ke2Iv`#Ig9rac{B!fNSwWY0Qr-3v) zr;qubTQlpJtB&U$G%9@uUq`^DYoB5)(1Cwjc2*RCb!B!L*lcln@z2A349TRDYIj-# zyN9d<1>Oc z_3Aju`TA}I!#EP2TXFp7vd3n2$WC2QhoXzDx&0&K!C|}9_6m`EpF=0TWJWT48L8Ey5f&r3h7r&r#af4gw^=G`~G{p#_TAAbFTFeco4_fs{a z74%6hCL5yO8TCq!?l14`Z1%U`|Kpv#>5s1(+0Pz*VTIwXLeU*LOvW{RHt5@)n~o>X zTnDQoupr_!c{(!Z2~JyQWN)gk9v*+!JOnOLWhUL3blj*Tn>G&rMt-i0Rp+I*x4GA0U+kB+45T533JZwT8@@nejOCGjTFKg*@Q(Tf0w6 ze`nLV`f<(mY_yqA(z8U3J!6C}F5-nz!PaA9XBmm?gpn6UjOR@x5t1t*vhsfj6UxP^ zpG)O{K1r*N#DxMDyGZ+wL?Wql5fS+IGWR_iU4&o8fin_DCXsaloBKka4my10p3Tn! z=umn(8ftRlUjeAPmL9jMC>+1-II-hNCa-B{q9kq6^q~%;wk*m5(ZT{%ErQLas6Lg5Mu_12-HYqGPFpXc9yBB-LS94nuzk zU_2^k%YXO&LNF7kQcQIenHm6iQW#0_{?rYEam<{+3f97Y^X|~=$4q}Ytjro8aU!po z0!<5oNF9@eND_YNQN4v!Jt^J-h~eMH)2$@@76ufV7-@dQRt77=DEvdx_XvE)w*iGJ zg`*kgh7Qp;M6uwk4LNIZZY(3oTL_ zmq`hxfgE4R=(vm{T7G{KcNevrtqU(+$Xn*_?q0c&KUOK}_*7xxor-ZGR${eK;y7h6 z^k2PvC3m=b>6On@D;QR24A^ z=YA-=LH)m^CJ}$BqPl(LOr!Uh4%~d((zDyOZCv@Z-NaA9lfq2Mud!vmyK^Iyh+ePb zbPJh6y-iIzrBC^ar@E3)+3G`Pw~7&!;sT4f(jA>*LN)4fY&%^+`skvUaeS1 zh86^#Mq|QCF;f7%@<#m?BZt)b#QHG+FFuOkk#mN%xn6&-7psf;te)TC7tu3oN1pVX zxl|S~;Ofh7SBvZI0kT-{xBI`^ejgCtOd8aTyI7n#epX?#ng@-0MRRqnw0?H$`Gdy( z*L&Zxsz%dNe1`XVXkOnkQW=cL?$-6i?um?X|{LyuPZa;A5)Z#NFpqB9GK?OIe);OnA3lHY<`)ge52UE|?N1j! zc}`AbuYLb%?&!ISmY@1Pdlss^44>>woZ)07Ny2}KM7L?GJZo5KMOOqF56o8eB+c@1 zB(%W9GANeIY*@N8>f+^1y;zZiQ7?$i!IPdlfI+cgAGRKZq=PVS4T<+6n_Q_E>(nDV znTV`zL53P7X~^Tx7Pd*>>ETh?JbdEn3vU6GAZZv8vm=k^IVGpz z)!To=4pud9`-Ba5JGH_KmBj2J9Eugs(?wW=rfA?FiS$8#m8U(0BCEnfx>}=C=R%<1fC7Ia z5r~d{(bF#-!xSVi8PE|d^wo~93ur%5!nxE`ln=jf-ZHm3#dLETl{%NPV#oxrie8Y5 zPk~2q;=9-ZdSk#de#eenL}<>lJm-sax_aI)%(eCVeh?mw1<8L^=1EvI zlQHlIbBjCyi#!j0zd!Lt!U~*FW6^pU)fIAGVtN+cJK>NSmE)$Y$3wJdfu@%gjHOKc zR3y{&TnZ&HRD$}lY{n9H`(R8lzL7LE{h(FXfaK9)sF)=wil;?~8x4ih@ic{{^uL;J zQ&W`g(4`}-$@*~IBL@Weg+YI3&MNI4KB0qnDqGxd)tViL_8}v@qhzwkJyZ(i>g<{G zXBTI$ocVEel^)o3>Z%%UwhvQga>w5F#zQ)Xwrf+kKtFOWSIVbzdx!hFb`EDzE>w&dnPzg6T+_%(s7)$R=Y+vN%hX zg$9&HTBVt4f7Ji^&tKa8&gIjW=vw1+90jB%-|cni>k6q{y|r&UjivGh?uQxI4|aR) z_6WMcssldsFk_~gU56f@^X7h3H(t8<;`hJ*K+i(g4qC2cBtG}Y@6qY(t0AI*^eEU?E3(?P!I!#^cEPeCFT<8 zFQSHQDKj5#tR8yqCl}txzPI@D(kr{Y=I3|sbUyuUbL;+RJF9p8`09D9bYu3S@Ap4` z_;n#&Ogo*YZ@duyHS_M@Z@zu~t(_9bZOwzg#sPf6zO=pX4AG@NGE6-WwU3*(a&x`+`09;*5ZyQwQfY|X15F3A3L;|rwY}g_m5)=s}_CQ2e ztVk-=X_E?*rX*=n8b8L)%y{OG&H2tajf9u>Xgr#G?>XOjecv%Z0n?-fHslJuFd$$g zFaFmTj}ZeDTG73Z+_S870$)0Y_RQ|Za!j--2UVT!25x|`o^uo|^q3ke{7@W_F>>@e zVyf;VU4?(LCUXM!UzgPHh831;u|_CXDpVi`NEfaVPg-`PpH1Y(#;6kIs#?EP+gB$K z%@u~f(JII?=Phm*2}zou^>q+OEhsuu@CHt;`5*#cHNPlYN-gH@y;qB5^ zu-Z;cj)KxpQd*rRxj(^E$|zhgpL5;aU}nIweUax6Mj6UE1GZmrp( zb7f)iVC%uH>J51Api2|pMLwv`cG@M%@50Omhz`lgNbMIlN0g$ zXE%N>yR*YEhL?DXcuY5*>)Aac4`$$Z(zjT#SaED4(9SKxhbD7nUE$F8$j&AZRUt zJw~U^=ybqe%Y0;l73Gk=YQxu}he3_1v;+a`IHCnUpa=7MN0XRg0$XO^2@W_Jl#98< zi8d<>c@)}to%zyyb-${hhy{O`1}H_g{b-Wb>DU5knUL@-WOM9E{md{@v%c>Q>WT5( z_)cwG=IJ~LFtG3)vVV-+4xRRXgELgDJMo_YR9#C<8&?#a@po*GA>afV0!f??Du|-S zjtyCmm@fJeMMO!qQI&m{l}a|LSa#I~>Z)0jD#{{C)GDi1C<_$Hh#-HG^0h6B0e`SP zf${u2Gw!|jO(MrDOO~zin>Xj)`|i2tIQ|~Y+KG`DInEg;z_BNe<3Djsrx7xGh5;E& zny|siw>I=g4IRITR#0fRXgPj@?fgovJsjY<$oWXDa)Jui>_d9fmU%nq?D)&Feg$Jb zG5Ch$2>v4AV_4|WF-v2NVRF1#BV{V18hc<4_p~- zdhk>V{eyV43Nw&#k0Ln`V4|na;_#%4_q#)W5@d(_4tcHyxsAb@Ca-AN1JjzOqFTC! z_rIZ8XqgHjhscy9yWlz~*0#6vQ{Q}d;r!spXd=I}o6YaRPmO;Jjf{_tzj*$9;g2VP zp|cNWpFLg3=C|tA%Jj_i=D+Xc6RA@a@61e3rql7!(NtsirkD( z3$>JLD$;QcDrFu?{YcJ*NHKZ!tDS=_K<(~u1lGAL)SWBkP)gq8hxNzKCnXqT4;q{HRqg-iY zXYE+7qyOJ=HT`+IST7~6T%AgNo7q|+Yk8EDGf{n7_ft#LrYeR6S!o0F9MsF#hsKVi zs;L;6*GmAeMd|Q#N4F%`0sYSPU(y?RZcer~XHJDW)(aa0kv_P7MN?xv12qN83pZqE zJ_Ic7O>Tb`O%A+XsO#a$-7W3@SJ^985962P)%O(@FT+bN-W~vVK)2YL3uUPcR~YgK z405)r$#n%45!`@t5G@8y$Ley~L;3_R&T?zo(9K?m4v6o_cCkM&cG*~mW9^Jp8bKIm zh^r;IWjHQWmMY^t(W1V4)PT5xr=KQS)3PbpCVhVqmL}-&b_Rl7g6p4r@u%3m`25%3 zC+=m{{l}R{C-a$~|Nbo_=N`uIh6JC~JOOA^IsFR&CaJbiSi0{|cKvwi*I#~@WX}(Y z`*X{4{oPk4Bj+Tm!E+yl&hU%^DlG`@s2fABCKk1bT`kVxcM=~6uoxWzS}3MZie!%M z66AlsApu3@bjy$xxworleQ%TGv|MZ+DuBw|0djCd?lseaXvZo5htK*4QT&c~J1MVi z5vF0Sz$0t9Q*ji_$ti+Cz0=|VOmE6sgRwslOs!_Fn4`ejBJUs$c0Ms$Y$g+FGeWt8 zkj%E66!~ljv5;|!fG%27Db)6<$%(0N7)O8bG}}2*$HNRL6cn|Al2r8iUjVYsEyjs5 zisRGHbUM>%XSTGn?e4PohRb#r-MEW{h@fI(Vq#)~KEVSdgcqJk@QoM~6T<^<3K)IY zkR|Ls0ErJ^mPFwNR92TloxSybnVnu{Iv3CRzP2%%^r4xDxqjdI{^xw>{7#?$PFsJW zdi~%#ZI{=>ztb!fmLg$Y#_@W#-s?5l{g*{{VF;q>XK2=2143D2Xx|6d9@;ZnHVWwBQlgsY1vr7yPT~<&m6J82 z;yN@T5=M+oj6XtxCI_cU`Vb6g3t4{!6b*rM2=klZ(}HtD${|?Lw_!n46x@I3aFdf& z!iX3XFeM(wC88n~DG-%7CCtfTPKgBIj~KvKFFfxT1%Itxe*END*RmujQmY!z*Ve(R zZf$Qo{P|%flYwVUO^?r|XK&p6c4$zAo1dLIFfy$E@%(ACZ9Z6i^uw*CTT6c{%gcA~ z+_`)I-u>m>&t2m%;bL`?b#&kdJt?6eg0Ndg-ZJUQZ*LX0G0FAI>)uukwnhU`iBEDQa5 z9CEzFn!$uL912MFW*J;dI{1HNalq`fj~;z%EH$cSH{gQcZ*CPf!2*c^NpDs_zi(AE z2YI}L9}^7BPRD@@!518XnQv4}dNH|Y2)^-)+zWvf<`?JlT0SPnTc)9#I@R*9a;3-9 zxmp26h!_aPhgD6>!ojJ;Z=Vb>Y zRuo8z(h13!Sdz}YJ$Gz>#E0^={A=mOm)g3- z3oW}1MqCI=svOr!o8ZwOKDhAy>&I8ue%TuvE7bGg$bt_V;$R|5)n*;c1Y8Al*}Eq` zD&{t;jVkI1A2X=LgB&mLp^x8x`_wb7@@~aw8=@ekhNrRxjnrS`Y=w6PCJeldIs)=I zRY_QO!_WCthTH$nD8pfP6p?C_6^NP*_m{gM8P6s$b!?d2it>>ophaz`WjS7yZ56C- z9kS7G%dUKO z_>-t0>|zlK?F)kGHw&?;AG1G2>*3>B`RXr4tvgJo;)t9y}SJtl3Rkj)@B^ zCjDTW#(KMf_u*%Hou0Zjgr-tc7z>yVp65Xj!`p}{alNI}`0&2ubS9U<7S%p)ySzid zncWjnnw!bP&5 z&`f2ICdHGxgCm4S*XfmlcAKjba;h6-g9$ka4k9i`1TRm658a3B7gsXf`ymBWZR*;n zasu}k5rQp)A55~n{nN=*MK8J7(9NQWQq;iyBLG>~(%ZxtMQ6r;^YUY2j{(Pk5=RJ= zf|Ro0S*e>YsDzOC6|7kC3uqoM_c)QmC0d}PsPkJBKa&iM?4GwG|ni(0|Phl4MbjFFx|aE0!CTO zw1^p8 zr&Gn*!2NyfU|F}cfzZNUEX5O~?o7~+Xt0{;v9Xz93buoP~}4g zN!@_irQvVtttGJ}A^}vj9fc9>*w0t4dY%U;_ww0`8^8S;gk5S`rJ)ES)HI213`?PZ z>GI{jU%s0D>yBI8HV#X_cTc5K(GhB;GY@C(oxgAqtL6I>-yJ!0cy{*T^u4<&;_<+G z9&{torveXu){-#ThjXtkfeK2pW9P~06N;1iV61u#=t1{Tqz>>T>dA*k_%yd_(YP5*yqj_7KE6U=gGdVzC5tNPTn|jTo7_y%Yp=oAvY5su3#kiT zF~@d{uQgY&&Q0AsTs`t=es;Vx(dc-v>_o7ivcq0~NcnWP-00M@wv)4S^>%$~VhZPN zerb-9a-@@@mbaJN?RMSwiaGbd*yPi9&)sxB?Dd+Pjg4SKua8?B zz-qWzHzg3a>2hlE!0zhX<=0&2RDqBtN)^L2-q#iZ0u9}OSGfJ;HuW+JTw)5}CU@^^ z1jr{Ob=CB69?;=!e9D zHz0XapqZxo*ehGkU zbaemeKOYC@rhgI-g!lWcZ?Byhbw|&BeIihzPT=dZ>5JOU^a-c*U1n#jqw>ZE?J|o$mM@_!85yeZL)%o;A0KQ?7|vut?jQK$~iR zo7pHLf`PhU$1d;PReiJk52H7#vDZ4aY)C=}~>P*@EBQAk9enUkpQ&AzOo{ zeG-7Nv*~T4io)=nPtQ10CvlrNIK-$8ZN!I!5G)W<1!7Tlbb;8x4?sw;C_+eOgV-Vd zM1_zlRV=!IJ)6=%7GRn*YDgm56zq8HvBw_Ic;?O>&U^2;TkzJ_WPE*d<~{d+ob$Y9 z8AMq*r22n?`;&L`lB3SFxysh(Zx-x7UUPIIMRxhXnPcc-qzhuWk%>ed7LgXC-<5P{ zNgQLk0|ITVA_C^r;qZwXI{NZa>@1Y+;V>GgY(P2RIhOm$)sMdZ{u|1X4GfnuS-!~U z+*2`)227?;-QnY2*p*(0DgnTMC!uO3{}Nn&bnIBa?GB#bT+u8F#X{QM;rR?DSXP%c zk?~QSmw%s?JY+PJC^96@_w6bCy*Y-P4Iw|J;iMo3u;HK6U}bqJjrnKSJ|Bi-#6i6P zMZh5SWXPdKNeUvBHsk$X5cK_DceYWMfG@akD$Y}DjrEOI`;U87+q$%W*}VSc7tCzD z@#f`+A0M9vKHWkz&6PEgejlzJdX#fzmNN;EFiKTx-QpDi^3B zlOn?XpmqY8lJH`bNBf=M>Bp-$l{m?tUE4bD9z{t+fh>iS94Eo9Yzth9ozmnXoD6l{ z987%rXCYBMiUV4H#|Hm@Y{t#Ik-gC!V{va{Z~?y&Rj>+gN{ z)3-LNyMknq4%;@*bGDDIQurqqqZK@O;4k#cTY7LSvEjYg|C_DQg>*Ei^q zW13d`u)XM>Nh#$oGFpUlOKZa@@B^QAgy$|_SbciuuuXgT?N_ga$@uQ>b``WW@OiQ< zGo`(Y=bRz+cjzDI(a5VV+N>Bxv?Ot}zV46voF|>2Bl~p=No^`@%SkiJPU>Nl$Rh|@ z7N>3Qm=ts55xkOr-3-hp#*JKp3!k(eX!?v#MuQ*~`uPRV&rV65&bT_0De*2ssoT;# znYKg`CaG-!fB*CT549@0_3~Hj6?WspAOFe**S4b3c6;2}$>poJ%;oubtmLY*SLzI@{cTiziCBYYGFa266Gs(CVj7>=+V? zz?R=YEZDMT3xW;^mWZJ$YEcV;f||yG)UjhfPu%l=o?BE{kgO6#@({oK&OP_ub7KBI z+{v9pJEREy|Ju@rmZiU_`hQ;AUcB;-OklhA8Xr+F=sji=%)v|=Km((cTo@{$#?3tv zqnMb-p?t3Q8}U9Bt^^Refg9hkc%Q;Z*!;pvXg+cePx^);pcYqF6F$1CrT8vEhC+%( z>_mxwBLSPlAf!d@>>U`voD|&m0@wB@cMqr#Vg?E(gy`{xP5R@wl4*iIGCCE8pvjF=-C`umcv=4R&RUpsE(d$1Uec+NrB znL}SZSdJ_NZ7{Q%Q6TF`hwwPr#@!}C#rQr*U6%p5LsAe6jVsX$he$m2p%S1-gQj`U zX`@Aq&NV1t9!DkQPI0?Zs!>!jx=pRH%h+tD)0v7kluc#bfDP%D!^4w5+TXdaI=0w< z;lU9KZNt@lA6DOgX@2%##G?$CN7`m{a{mzu-?Iy|j5%6CKRSBy)`gqzR^QPs`K|Re z2m-ZFCm5BM6@ocGO=GdKs26p|wFo#{4l1r!PhK`U9j&O*%~JFI2Wq3gOvn?`lQ38; zpB_8)!&uWwgGohM`L+}wW~J(-+V#_aR|e7idJFPS0r=};T zI)UHZ_+Hh@gKC*T=+x~S#?spQ=0*apJ&t9Y9~(=w_=fa4C61#*2Q1ev7Y8V+wmPkn zs>4$vne4f}N~wxwI7OlCTPv2@W*ZjAflsO1czwKW8oW|Xd1MFblL>iD$?d*>ScBU& zBD-KRIgSzFE)0`#aTSG2!sD`+?ndJoC0A9XVyd-lu5I?vj_rxY0>p=a%a!tp7NIXL zL+vXiraCBxktI9*ruq2EgSXF)RS%8rs&^Q76p@5+H~a~>QinXI?s>HQ^xD4T^-Blu zKfHgpa_{A@*+us0&crlj9;VZOley#1#?N(d)^doRE0ho-PBVpc$rY_iaZNY@b(w8C zrqONFZ!8Ac1`!$h3o7zIz&D96u1}0Y zzJlXw5Lpdltv|043PBxS7Ur{1&adiq)9Q%ucW&bR=jMvgz}#wX45N5|ARGs9;XLYD ztQYbYl0QINiv5|Rt+7mc+n$ZSEJ&70!M3-`4mO1E&Os!My7^i`D+<)%;XR@J7J#g4 z>1pE%qx0}QJY$R>i7~+@N-Ci$MU@gZZKSA`+C>+Ynr^}`=%QU!N&Y~j{+Fz?$RDUs zS{fF8Bm{`S!Z^i@XYkm6GoH77`+eUXQ?r%({V=ZPTRorx?S z0`mk**en+rO4DVi4wg;B$e+!BCkNQ2E9ZnIFFgya zT&%@t1S9F1>G%Uh!bhiU)Q7=nw`UK%)D#L8Rk>L$8?sU@sHQ}6Uc`S=LTY%5WNP~| z6d7f|@K7gU<$nxv{j6vFB-$wK&tqI43+ zo}Z=J^vrU5rxqN4BtZY87!CkLe~}f?^oG0U2GP#;i|5auZSQPrDk~WzSU}$+T{lM3 zG<=SNDT>S`_^}NYwgFC{VVe+yCJ6Ujaejs}OGOpEM9Ug#WEz@OQqk1}HdW}OY}{)7 z22k%>sVQP>T{a3_Y;K_?iqZ%|>2ZL1>yyxDWOn0*BSX=Dt)XT6&b7+&2n~p3h|JC> zLoaZ%DLWo??%(|m2heBC@vM)UA9wnlzq@}Wv$%kwnCfBw?eF{BNfI}!O{Jiqp^~w1 zbb1IBp>)_ibab5hY<|q4vkYj_p|1ptn+Q zb?x4#cRuf*z0>V%@7-QP%ovvJ`qC$|#U*kik~cs0tBD2B!w-b z>m)kf$qI^c>zR^nv@5r3jV#rMadM?{HI5^6Dkn2iX)s<2nBc zz}A)YHVp<*+p#~dv6CiUD9|McK?@XA%B6@4LRI0w8FAr&goHTo8~O+MDM;M8RaKFH zIDkNiZlZgVwsGAob`sZ)nHk#^6;&(sk~-eLH#6V7H!s2WFeO2rK^&=RxeLMlLWqYm z8`1{cQyj4-2{KJ3`-dfyqB$H6@NvKx^88kO+5ctwX{1Z2ncVsAY|oS}pK@(9XGtq6 z^ywBEc8cPAq!Y~sut$Q;p2v(rGLEPxl${Ija*Ck=G|Tnm9u zWUVx0RUpAJ&c^Y>E)Hvr_=(|}vU5~!xLZfg?@DvuZUg`mT{y?kWU3_!mvm(~tK>zg zh^~tQttyToZ3Di)m%%L;9D4vKt}=)poQk`z5pH|~#7n|S{WzAf$pHFFl+|#5Ot&sc zSw+(1jH$>tQBr4?&iYK8Eu%wW5C0pBZfSZFNnSa0(Ur-l5Po&=}09Yd=dsN|=fOn(ClHII%KF<7u&j5e|N)8t;-yOdVOTFPX zyFs_=R6Z?zoSUBCI^3GQF}qzuPX<%LTZqaga!-XAqcF4zxHdTc=IQHym7Ue;>ocgy zU@{cq@D-3L_nQT`Q-^bd!&d7Rc-i*t^4{Str0vy{14#6syt`kz2bYsGtP`|zYOJmO zeD+{&dG#v<=!ubAW5qGZI``~~huWEdiK64yb9#QXc%_&tlk4ZS6@Ubmgt9dWUSt4CWTLgH8`#I7jF+B#|; z@=+$uUFP+9&p-t*l0prpc0}$fL29l zE3XNC%#^vF@7xw&F=5%z+j-o3&iP)zS0VVcOkeY>{6G0~?>^n{^nZpk`k%3k_#2Ep zJ(K@1IrzN^kiX%s@;|en?joh^0tT`R07!G$FbKyFc5T`c5t6I8Y}b4lSi20ljiK*h zcBvdMnXOTOi3GNOlL53}dMjm4ODS`3tpi#@FH&1XX*-c}(`h$N4<&8bj&g@Gg>S(I zJ;&OB92}WI&oxy@lY>_)!Mbfn`BVxUy3nbla^X3QvM8X_08aM6Wg_a}0B5mN2D@}S z%r;j_h3%OAOC{Fe0P9ppmt~-ZYo6F@o7GZ%t+<6?kh&hb72aIMlk~^1jQ{`%@ZRvBl;q~oRTEpnjco;RP1f~yriFCbHFAQAV+J&rt zsyG!if_}g6`sKN&^UwU0|D{@{Dv4fbx)x`%1Jox)IzBwwLpgR5(M`O2``-N9mr4ta z-KDG??B&z`*u)p(AvtT$p7xsc68VHUK z26N0rN87>}fdLJI5{g>KR$dO*gY)}wJHcthaNC1JpBV2gJX(CQS&NsN3xi_p{>a0+ z`|0ualh?N%)EZTzV>h`qAw&7h&cxe);3ayiLDewfsik8bA!Z+t3W4)>Vphc9!o>kX8}Mm!zQVz{0pPzPXXAvmYt@eDB62Z@AI_11*C|g z0gOiCBN~hv2ZqSNA8=rdQ3p=_0OLe|Lq7-&5hlg}6@$tnr9fZz{dDhr4pbA84mxOW zn|se$XYJQolD{XCDW3xFhH7AcX|Wi7z{ItMcjfBYIXFUZiog0)=6Lti}XrK_wM@0mTcQnTuL1RCq^!CZS=FTQbBc!?pH%AM9;0nN1~`HlFKxT*cW3ac>ut2W-JbTR+jk>C#tO^1*AKO< zG{Uror31WGiV_E|9j6*)0WF4hhGwG*+-T5=~ z{9aaa7{zY+@t!Q?8xhkHxGAJ$W9e*dr`HP-S$#xaf$Iu?13iXw8#p#W4q3X2_o9pn z!Dv6AGja~V9w)f`!>yIBkO_|pU zt-s{2yt?!-$vrXRB3Yc&u_BQZ6pBe^&&~Gy0nL^d^xqMOxLL*AI>ALMav1`2Nv2Q$ zIJrRxN{xJfu#g#9oMNY5nnH+>*X{bFTMMh3tBNX{WshlV;YB`q4UtBzh>VHBbG;Ii zB(Kci%PL3lFBXcdfb8`^o1hwAB+sYDE_m@kP+x~TCNm8Ky8#in?J5=p>9;a$VTx&} zN|k4XG7QGVj4QbYqCz4d6{CZaGr_sk`kw3A3XZN1P~3yR>z zg`k3h3m-w3u65;3aN|?B@D*J62%>0FP!y?FZM~(orcI~0Oy-iAGydN>NezN_)j|@| zoP``woySSx5RjO7N$LxW)6lieXL0y)58GY z{9S?i!g9K&BhCrzBrF304jHJLJz0I+i^2M$l}}GGHB*u_2WLZHQ%mjs4z2$bk(f}y z!Td;dk=K((x31rL`S!VuZ#T)6Hd6H6+W!F&are3#7b+a@@zuTosNttp~%P0)m#DW~b{RT2n*qDfMC~+S&PBAK| z>bEV$ap+nqTb5$zlBKIQnnH;5tC)%<6s1&P^DJ>tf%q{Q(ZLY2B+dH-V_}}Au&$JU zxXrz#DOO3Qvb}6bM;&Xux&I~T#aW2U2+t-|VH<$%p$zU29e$bb&DY)9PO!}ip++eX zN1#wKGNtk@FdRmzYFxW~ZDsYTuptY2JKPmkrjK-GZH4nW^Q~YrNn$FuPaQkG+iAgM zINSq<%19Uk<^ES~rL{q8Oy z5#a^B4&6Cg-4^}tOLL8xX@7Zs>D%@fT~#lhyl~i?`S4@S&{V(bmo1x4ZdYFD|h^1i02u34eFGS8!U7+AW) zdfSVaXQjG)jXWyBmw=>4rCMUnt_1&qQ@Bu^Df+6JmIi!VXQS&Y)=VJ)af^Pw(Sk z4jzkdrr z*tPUD5k=v9=haSML#O3`DJWoUVoWqq0%768xHN7IE{q%f0q)$J_#=$J$QTzAB7_7a zLWBagrL;2dDfK(&wxZGKu1zL0nYrijednJ0os0Ur_Q(07{@?KUe{uT1%k=8DrnIQe zz&t_HXe;0XZj>G-CLZF;`mwr=FF0s!xwyk`ySdy8HrRpwb-WaRn+Rzb;Qat?JetU? z#53^tOhTvev4mtU`AmUSDYzb@mVyl>g6WXNn8u@B>2@TuPRcxketQGq`{ClFwY^mm zAtITMc(Od*>>TqRJqTu$QVLG}#7~ms{rWpNVFDlm`x7iX(Tk6}`<7med!b`jOv5_y zkEq6nfUddzxt9umy%YDo#c{(ojzb#d)rJepKGLz~J zx=BWv%9N(}$SCMh$4f$QI}oGeMr%S|R-d)qMInpOkDxC}K-eIoB2_LHYRZ{L&H_dw zjhYIuN8WUbhMTuawo$N=A!JsQU>lA!Kkc=4+a3!HaSt1RyU>(7<7CUQ-NoAS&ha)r zEgTgQDwm;2dsF3^qD>SEYXO)%IWi5vZW*>8d#!E@jz^(iXj9co2?_D55`kXHSNzzw zvvzIzde`qDj3R%m+v+nYYq$5C2SF5p9l;)oc4@*LJ7^u9Mc@4}Y@VI4USKpoIos-x#;hMjAgZoA zvGU-_?w4)6)TmRXLIL3~8`tv)8i5=(KR!nV=w3R1Rhh)o>!)?(HYAc$zYTnc2L&vZ z0~0naQxE+ccQ1=Mo1LvMRO6NG59ap_0H6ZO65w1|=7;seFg;h)O^LwpVKcyMaZ?6^>gwg$&Y(1Y{iuxY+H~$Qwf}8qF+_NqNQjFnqCA4!y@;PCgf1n)#3p>J!?Kk7;6fFi2hAqnx3lq7**_VC>p@ zqK1NSdwNc9+hrG)%c2sZftZ*O-;6vM9(*$X1^sWt2jd^W@T7?e@c~4MYb4y{zPJ~E z*zT?EwtMQ#wCrjEiSR^n6553`^UcgR-^T|y{ie;*TYprQ|NV+@I^QF&mSJ-r<6Sg3 zqpJvP;ReD}27NEUto~1@UcHrmd7YMsO%tb^x3R@-6xESQE@lw2yHN)PB{Tuyx5xTO z=1W8>Q^$j(!9o-N82k9>BBIEgGumi>H)3j@F;wvM;jjMo(;GMmH4!=1`UjPL6u?p0 zh?TE*Ybd@J;fi7LG!t z)9-7grh9bR@+J1*IF`xEh-KzXF`La!XEU~K8%&!pjC#<6yJf}PfQMI5=n_JIb}ORX z;z_9gLJ=A!*9ATRN0Sm1?XYdKFNfENSP#HMh}#zwy`ktX#3c;K{-0C)3 zBy&e(yNCmz;0RYXR$FZs63<-mzM=9$VQOh%>1%22q<$9ozGnsiV4psJd=m6~8#|kh z<>*m-TsbujJFy>nx%gt`^ZUJv!(zS&w+|A$3-uXO=8N--kC)Cqyn|m?a7Od9Q;oCB zUZ>@l8Aw0ndKn^7xmM0QS)K7*ChLX0E;)ojZYbmmjTQ!Ut}sYoN3|oug{}?9pp(OX+icB{AQ`oMgob>v#bt!m_?cFpEXiVb`L zx9j4}Ool^>WIXJDXsfCEfRdPF0}z2%siFC}`bPlDuBEk!D2&eBJ2Oe9O`FE1FDSM} z6e%rM#eG2vZu|pX`a1;whzROh5L|U32)1;gqS%*JTIe%r(nntN$UNeAzB{R{i0Cr2 znaRw(=YEg#onxGnDfNFt_P^8H{}c8vL4QX@66gg_*tUw`ZFUSu}v>fB89 zbUJ=iK6+*$m|e^ZW0eKqkK6X}-eW;KClOf|N<}|TTUn?SusB?Yt0YdU<>`q#-}lxj zyn=kCFu31@yEuW%MSY!8fu>*ggH|axMARb!#fm}!QcsIDf| zgdRz_u108o07!g($#T|h5#?>rRco!7Zb0Fo6GQ|?#aR0mR@7-uNI5l_qlecs7J;h) zqjzb!V5r$b_GVJovsskCH4Hc-!Y15-G@22*an(ckeMg=li3r$p0 zy(C@hw^Kc)<@)i`+R;(NmojaeR;6CtJb*wsbglt^3j!GJIksUp{6-zVJRzNYbY#}N z8Vq$?UZ%@#I8_SI-N0)G4rQPzVb0CWEpIH*6=kwhtR6a^dv1fyQM?i#MPNp;dEIN; zR`>ku{F4`tC$CNtWcOza6#i5GB3WLhR4o$jAJZ0sES>gr;hDtHgFjjr%b;EvI=<7_ zl^^bZ8{XXC!0Iu~;#nzUqz7|D13g3QyDPipov)i8Msg#r@7QMg?zNf4)y2xX{Ajo*24YrA+*HlsWq8Rb-#Z1ie9^6%l-1fc-M{X z%F4?(&+kvq8aR!Do=o6Ep>V z9Tqq@ATQQy6;}_ImQv)iwoIF+t`p+ymppij%#C~btZ2(V?yg(T*;5s$4GLzg$cUqV zY_;#3T3~6$p0^XRNRD8qDxJHadK@90jM(7o1qZn`LQ3REg#iu*nou?;Xn~4 zR;mja?}W=IyGeqx-;U#RluUwd<#0sb2>dLYuv}$S7kVo@w9LMpSnYm61f(;UXKVT=< zbI+W4ol)4o(Dwfd@xQ$y%~28F!HwQBRi{IiD4n652wnf^ZxA0dWhHQy)$#z9s2uq# zm8atpE%10ykx;mZA%qXZa9QC->n zZ4R2kY0?;>?4u#5@V3cfOpShjq8(Ez=gZ(8D3R`wsD?zX6ioabky;99SQ+b@h~m_0 z3}C?cUg1%5dX9>dEZ_mW0(W|okb0!hVg@dj%+vHe=c2w8)`w%AyEw^74@O2KV-E-T zH;4=X`|lTv)qJji)rG7nVeSREJj(I2VCHz16wk4XD4;A6&0gVk#mxhMp#j{BgPY2x zIPgc?@%O*?hZZ4JgPr!txju8Q_+>o#hVM1afS>@<2;V|xPr7~mVe{*OTm=iOO^go8(3B=jA-v#}*+wD&c%EUk?!|}mqk3=XxWEIjszG`|p)cSeX~9|z z9#Xm!H}h3C@(VeCnpzg%DnO))02vE0HqoXAW~Y!$-&XSq<{qKWfovIkNA9?q;tg(ZhYI00il~>rp>;8+l!X?$YsP3loisl5CIHl zH?kD3WNB}iwJ7}3%CV%QkB$o-m`UT1b6U}C*AXle_zhT~AG)GE8cR#*uhmee#KzW` zEjOSuG5g4tVg&*OS)xeuN6Sef2Pq}P|L7eka!zy@e+t0ZmFzYV1ks+|v&D;SCs7gw zB!oahLgD~_d;)hqfeQ!jd<4J1A0Tl-2u^TB5emzJlS6_Dv9U8Ak7xC4Jydm%lK>Lp z;*&ii&s4vD)%EI?{0}JqpXODZ6UbEO|9}4e_ZOJmAWoTODF#GXRu8BpTnQ_d7lfD> zugWaRs@2K66yr?7LOi=C9}HWGyi;k_4p3z%AE{J-*<@39`E%i}VQ7f5+r2dL#=Ou0 z@#@Ba*B&6w;p&-A*8Bg;CjY0##Mzx{B8T@1PgoSv6Ml= zl7w=9TC=Y5!dpbjCIne@4BLAKtb>WrjRtV=UUO~TFt$wd#%9kpw4R{>-ZQgCA;q;$ z;q9QueL(?l2czKd#CI0djRH-!?%llqYX2F)pCTGS;vg8Ni%H4OJ8^tA7O7MSx*Y2e znIyvF%Kg|kbvsTLx@H4ioyV?^=_kso;h9W-7bBcQV76$XwavB{dyq;4i4Ky5$GR39 zs>xU?*3kg0Deb^db32iboG`2^AHJihnx^O{4vvvx z7Eze7rD-y8egK-|kYzzUT{wU**kQ_27Pz1rxezdm(8GR4U=p#1cgah%^WXtY3ft&= z$>jFN6*t^_^!UZYFGshYJRoF)h#oP2BBF`}_U9%eQLhJkPxpsGT0-WbD@m}N%>6XW zHC2{u3&r*HyoxBWd7c2`JFVts&r0%i85a`D% z{3QTk*RtC*6h!a!^V)HoN7FWqs-l7b2|>jIBqSuhfF&yyd<`qM?Dzp-O~tCPDuPx( zp-2UkLSKZ?Bu$&A6Fat2(d&+Wb`>D^SNu(jSqQCNY(a;>pbP#@+_eOFbV#-?$M1J2MPXDBBwja?V71 z(2nB~(G|J0n+fm-UM38GIC+aR(kf7xu$fNNM3nxae2tC{-8%IVETkobf+y;Rd^AFu zBg$ct_Lf`@RZVgfl!uoMC_v*R(aR)ZST0xuyG87Gp+*|EsQfT)L_wok{~Uzq#RtD^ z=(a6Vy6y_oaqO(nONQO_f>v)h3<4Sr#=ecpOn78((0sP?m=X(rxVty-1IPmmU3f^t zMB-X!(1w3Aj5%C@HO-Ywa$K`<3@Jg5J>^)&*Wz-2R|T*7N+Q9 zuRCzhhB{I8+Uxdtq3wwO7}-dyGvpmSfDgV#bkl@Jz;D0d3ftcBwRB3ANov-w6|qP-$X` zB|^Pa3IRBOfUq4Q8|QF~IidtwVb#MbW;Kjw9k<~f73VKA?8tU=My?*zOX@|9ai3Hp zNlS}m-F$O*vvyby6i#viQAqQ&DDJ`dPGc9MIz#`aIG@hL#{;si^3O8t)Y|uth}=mu zCT2;=eO$av0!}ekg1y5kJOqPrIGl2)YTbquCm;fUz9g?iNqkRqcaUMpli-eTTxnK9 ziI{@o42BPSU$73f=o%9I`ZAhh-@~EnIg+PGRFF@=N z8@Bv^0xY}W2Vlt$ut2~!Ahi`#ERc!>l!r*A5SKQO)=li#VP z_uM)6oD=l#{}1ly4yL0M8#Vl2n9kEBzz?F%Bn~rTcK-LrjX%L17BNnoWO(YxlN21( zg6HXl14A>gh)_Nc_!3bRiOyKiQ+Yyh<0#R8(KPOyj1gr`>Iav*bSH|Zq7asqi_xGX zq?_3I*fWB%31dJa1X`?Okbgk!-O>O{fhSdvW06GNxJD_HWub)L25z83sUr&qSGkR* zkjhlb1n{>En>657&VSUC?agyg_UI08FDs}j?Bt8J1gMmz@0D9kJsuT9zp7;Hr>3M-=T6m%)(adB? zl4P}^3k`PpWuKy-v8OET!!8b7D7ycGP3Q&Q^@}ScOUJTEpmJKIPO4f@I1^C+;&iUe z5ooLFu_~-y)JJ1mAY||kutFWLQywpWyR9FX4TZY>M8g^{Ru_M^U0Cpi%F_Pf{@K&j z?fOSpi6HFLl{g2sZkaaxwCc?|+0lgXyAp=HJbx89_<`RMz#SDD0xR0h#4JToED2yS zB}8&(Xn1CFX8pqkrol*gfCFI;2drT4V05Vdy5T}Ge5)Hdd)>8{ zn~l|HdvCTXVbFU1jy?Uf_G-I-XJgYm#8g#XZFcYPckVEDld(<4-b&+4!S)Ha6tFj- zAjA2k%A_)2NBYv_j%ntki9rHnjYy%rsVbQhU;^S>rcuhS;D zFK(~gy)k=b^~vhJsRxhUht*Q$TJcmH&4hVBMAL*0UUv&WQsc!@AXP1Y)ThNsG+0EX zI?i*zcIs$)qVl=%mB>w!R7Z9tvCg1foP`qj7jULzN;NaIA0GxsEHxoZh6H|3;OK!P zyB>6Ubeb%|Q>i2$m`kTdY{%k5J`k1iu8(G)#X`{!eN@7vj%`WhnSy&F(htIb^7VM8 zcxT7iTd?~cHSTFp$1t*gqd&wCvS9m50M4#uH;E_=pE+}-%rFcfv_sR>D3GX8H^%e{ z>cXuH-@vVJ;>NA(zCjaXyd>Qejj?I0)Y{Zo4U`s`G6T$oneqP*Lmd-ij2lA8ABW-$#_OrVw z@YsY-v9FH99s*{6zB96*WCX_70x=zg!?7q6kw&921m-alYNv_>MgX@404ni}Ms>=b zPl*x#Vz&cfwDtIm1W4_RYDcmRz=7LvT@HE5SfyG7+k!;8uoD_!%8aENr%c)`Kwb-` zeS!T5vWPuls*=yj8bH-jVHM2hVY>zYeLS&aR^ecY5%eK{wm!ZF?^QzTOUmXNLbxa3 zp?jg%YJV!JC4juXa~d&fxW02HaDp|l6hQ&VTPiLC>Qzfd>-#=hD^ZG3=@5cbh#u^> z2Tg$cJGHf*b84tYr{4yv1reJ+w!p3cOq6q#?(hVTR5J?`*Q0_E20>2OUhO=GivWI5 zXV?*wnH(;EBdDga2=C#*>6Z;tq2ig{0V`&W&YK6#wZ`4Oqg@}ZF2BBZZ{x)VoT5>! z>o}$~xN6oc*DmX&lR+0dnn`@)@=beWEgFk^$NOf<1Pt=0K8<6z6swh$fkP{LrKlCR zKX1R>eFM*GNiBk%Jv=!C=dP?9l!{=AepqeS^@h=Z5UGqX5eoKSDJX@G)q#s?yG}l< z*UiTJFYof29)uk1q*l;6frZi$;4F*seJsO}$AmoD+*#jhJ-XGny;L`s3&*yDjiML| zl1&#S?7?||M#xh*x;?n2XCV&sr&u$*ZWhaWX6$(qPYg{~WS$WhA@qkKhm66|Odlf2 zW8>q0O{pS?h3tZhAusZj!6%PJ-dH4}O(qX(56B06!wexGc*6oV-ctx?>(wicH#zEl zgB5#YY)kJtJK7r$}yWum#@UBt$(P&X)l`lUpaX5E@))mft)D^~Z1eFFDBqp*k(FGs!T?#F=L(9y6 zn~y&4eQ%~Bx-@JEX-cLuJ@?%E&N&zJ3E<^jB~<<^xXa(EM&)$nLgsr`w^;1)G;Tgi zY*h}b{@V0(0omo@vN--v151-4c|I3SmS$D$hZUzcIsk}3cfS!RCH(#O+>JmViToX* z96;D6@HBU%4J6$LhB4%7|7;)Qf^{)YP|ME9f1$f;5esN0?sday3CgLZl^gIfw4ue8 zfSnNpT1~yx!nz)#0^KBl?M$#WsCxO ze-2;Wvqp58SQh*eZ8rOI9d_wwAHf1dks zxZON$!4*IQ0SKPY=EXsXf8*NJ*X{2kP=P|P{_}XOT!AawsIA$C7512(h`%zArw5l0 zK7HPA)EL|GZSTylDGaAKesrf;c=g~(+b1K%t#8d10DKqvoG5<1<$i4YQHJ}>XJ_3g zWX~tB0M)Q4ov##iiisKpo91aoe_B68{wX|fYRI8nau0)5#R*hmdDQ{j%TC@<^u1=Q zR=>W>B8oXECz!!<~@CxZ;MWNXWh7++TRj{o4=Sz|JcL_&=~=y~shn92#Zd;$i6`a2spZ0oJ-TqKP^oYPFnkZL;sB`={hz4iL zmZEQjgf%-(g=GAJwwmuccruAIFQmkS;8fz2+&DM3XF~vKQlW46IEh$S(BIsNJQ6`O zopNO=RnFt5piwrLK*Dl^&4i%(QxLNV2P%dooDC&d{qFGMf6e~uZztc=EQwOmEH9H7 z$zt%5h=g#}knZoSYz>?~W%(WRYEByYgB%lO;Pw#^gL@D5e-BPKSGRkki;7-_MbQ); zRi7B#uc#K?(3d1RhD~G%O|Hl;m~TYwKrNDtF>0WQiU&bsoH?eb~)@v=uKh5TLm$Jz65O}lc+nog3@*9 zja|eM(4jXPqTK{Ki$TL6vYU4rRd%;>$Cu~lPTx@m1F@<1x3_%*V`El zhFQ;!V@;Bg)sA2z(UA2fG=?N}36%BOPQCP~)x6s>%LUOgRjXR4mDHjxqVSw7Fh?^U zt|B9%b17{cKf_9>f?O+VYjxvCr|)MZpVqn|Q@F*tOm+kE$HPw_j=CLtv(`Eq zeLk?Bf5<`-prKuWey1qjix)<+C{EKbjiE0=17j#*XcD5kO=MK+cHqP)b4eK)lETqb z)X=XE7UbToHf&c6abDTa@dk@D8r-b8Y$hu3*KNvGbHzpE17R7%ne`d+{dMNcw=FFHuekeF{%lPfKWL6s6Ix)A zJQyJw(qDF2f4#xrQIYR63Ma6rr5C$VK>V}>G6-$(lP>y~r#&CYtd{4bw*(=v@%qjR zTx>6LRay1W#w8}s0=W-}nL;OIoXXx|e`XQ|SC%A};V2=u77fKJ;MN;KDsV636z!AI zqy=j>itULEn)4giFTZ~E^7fs3Gu7(C!k3K(ste&#MNgnbf*Z}b2>qh2N`@hG9y?Ba z_txEq51#DobVf(VAh?T5UvxFKpoD0GSx|7Jk7x&h2O$&~uM0JY4G$Gv$HgU1e=3Fe zc#MwWL4aC+FiexghM+{6A?ZRSYLY>28-5!NtZ_@D%a+@9;8e9d1Pl-vn2lIt4(|k1 z!pVvmrx8OnRaHmo5H5TJL?R(FUCcnmLaZ?PW9?HI@nT`%SmikUX1mk0J)4If^yxfw zA;Sb@Z9HID-N1wMZYqYZ7z4URf9BdgBv8n|^>)4Ewzk@vaPlKmLQJ3%YYJ&iCy0h3 zrQ+b?$*YLyM?E+66*SbMrCC0r$Ri}x3+cI;3ww$s9tB9&RxSv#Z-{(-TKI4>X7#YNI2P zR>+lUcV$f~<%7L9TU}t+P82?@Zq|L@4!9|qP|acZ^rNWFyUUJyc|us~e0#sP@us#6 ze;BhYSxmbz`)2bd_g31Se|E^rqIiF`v?oQMm}<@v_W(`S#LKYB4|UfGgs zZ{2q{r!GwGudFmS62h>Pz6KGl6LhJDgczm?#Mud4)ZmMQke{RA|gBOypGBG)$ z;-p0anRNuAn_(PhOx?_Ol=aJ}Q}3A?3JOd@Y8Wzx5TBjrcZWN0t|o^k+i+$G%0UL8 zN&aY;O^{Hrpesk?Uy&SWB1F(byC7zw2E9#!NUInU<_p~<&3IOMX75b`jO7p7qzQx_ zS*3iyc3ULr9`_t|e|m{9*#(cMWSE{2`2W=(NdE}H*|oGb5k=vd$@I=-Ca*S0n?9`4 zE<~h=C{|k#>#KCDn~DV$`~l*|Rti$ApjO=Y8{7+46a#l2y~K8X6Byzo%5aZeg7HX`F}X?340>@-fGlef3dzN*Sx_O$(s@XD@g@@@h7=OS=5SGx zQK|{{U;~ZPe>f3Ev;{vL5Fim%t_mVbYN(D3^xq#Ie*N~%@cE98uFlTM$?=7y6#;wu zd{pWUBQ>q#`*g$J${RPjyL-B?J%0Z5(a_L`k&&q%)3&8`w6)&qxyIS%&vZHx2|XDY z?7DbqZ0uV>)1(UV;k~;L`g%FXNKPa}D)GDsOB_Mge+>2*ysfaFQR79kASOb1(k+7u z=ktu0hD8_)#PT|XdvxF{8imGa(^@VA=LHy?FVhx^9H6%85T328?cM223Y)Cy{1kwa zShyNq>HXsHJ;$Xovs>G_3XwzuaVolPGRc1Uew4)HaV7;G0W`3;b;18>wB- zucBIje?Ke}KP*m*j;8_CgyTbMM7OqJC6fvX;{NpFIBWyDrJra%wXiV{obBvV|;s=i2sK!O-C1n2!Bv zV)Q_~5wZkWl8H!lOY7OW)RbWvOiM)}O3)vYe~1FlRoju%V{^%+>@v-Jn4CCvuS2k) zKUSO1q;=a`+*pF#C9Fmo;*BV5OD|+yGyxfdU&6s`)L}Mq0%t3M%2>%h*JX8FY*9tCGf@Jh5yrM-lx~4d= zR`BxTj_n%sfP$$ds_OFCh2jR~AXT|2f3nG27Bff%fzQ!8hF6Yfw$U#2=X06YG%`{K zEndQ}kaVwp;>pKA+|2$$f)LP13@RZK^&%if@o_SG;bc7d2t>STJeX)Adhx=a z;FWkVCLSfCNJ4y{h*41^maw#JyT5j~+jVBPMUbP{O_O%FJ2T(>=9};P-~1jVcLjtcRO9285z+77;f$6$EuHR^+v-w|va8hk!g4jA}^~VYH zF`T{-cgq)W`^S&#vZCR@l&3vZk%rw!I6<*Fo*bM}djRFyWgf5(fOV`e_a+|9&A*#@HG8P<;NX$|kDuOHYi3xIs#T#vvmPimj_WV46waMFH8whacjErk zlV{LTM-)*K{Zv97y>fYA@I-sZ&Z);w`+EB>UAx}Ct7~cT+w1waiH79(*l0^zYh073 zr=OQ`DG(uw5SW}39TUr)s5)+$h(E;&ATPkqrE(Fjzyp)Q5*^%m-8=Sj zoUq1n)JJ(FrGR4$B^*J+QesNL``w_%RarlOab)i0ER;;-p1O_}f7R_Wl)rL1*_lG@_;#y(RvP|1vVR&#cvb$w}T1#jmV_sU1bArfR zr$JOc{xC1}WFDUGK6|(=y}MBLO`aqhLI6 zQxiRSQB1sfR%0aIO^op`kc$VSM`EJ!=0!ai6A}WLcu@$*uK)u!aI9=y*LLl>W3e`wN1+Yr9ZMDpRN8{@&VnAV=irPDB-N+f$4@NI$+mpu7m6a&NuSBQN5mos2^ zWTqk>$WEed2zti5v<8Op4FX!pEaW@;*LGJ!@@w@uDF{0fe#nj}5=()^qa!I~Csa5d zA(c`Pj43hxZ>n zxbx!WtIe%)C@6?aM7a*Ity(*G=IoQlPv5CFGOI0Y!4Q|0<|13P9B@{O)&G&&2@$qvVDESFXbL_#-5=IoHs%saT#p-`XW{#esC`Bt^t5*koxIVT z99&C(FYHXNl_oa*c}q?ciK^s5YRp3!61{7U*8)}_Z!G?!JZYvzdkyg zp|$~{i9kZ(H7Fjbk&bp9VvBenfAOY#MAB3tX9(SywNG<13tNh+!dK*>C5P?%je4{3 zVdmq2o;QWc=+(QzgrEzV&Xm04tXw~S4Nj56xCtK_l3>DQM%;iPZhHGoOou*|yZBWQ zQ;c<`bDNbd!uw2Qt!{2yQSzDmY+;r(jt|so4tN|s-~NWeJ@8g`SDP&^e>;uV8IAu% zj@?8xs^!u>wQY+=G6D^c1&j9e#8w}L+reU0R;iWA9=_%Iplc}z_tefIFA0g8B>U5g z)11sr*a%-;z+3p}KV`tzRd=fJyQW+;P203ho3!zqlcW>&=1ZXvk|xdX{JwL}cfRj`@H@Lt zvEA9D&+n`7``>(zR?Y|MG%U>s8XIfFtuamNJ@!;Idq_V(5(FWRe~|@76i`=1Rs}5t z86nP6(_9+@Eo6N2MAKk6IU=x~_+UfZD9C zZB3lX+`oNuadF|^qsIuTcmbO-9j9e=D~6d$4yVV)=jY$OU-;OpH%3!~8@XR|b8p~k z0nRom`tDBQ)$Hv0#OjQA9q~fK?vS+oavHT ztXG(%wou)yyZwIHDXDVOf+$Z1cY-{|O&bk$QKW%f!x)r!vrSEoqluD*ykOTI4dNa= zt&&~@#68@X(i=J~c#9;LZLG6e5hVeY5|B7f3Mm341kGx>wu|E0tP@ug z+m$?F2M#b@f73KXQHdxKkr%zO5%_O79>6kr-8HcF9h9O<+(fku7Tt|)D<((XlI~V{ z%OXxrSPokj{6Z$xcaVo|(CKQ5R?u;PekhU5jAgQaHdIlD%K{kBZKFr)cq+YK$hr(G zDX3JW}H zr_0s0iH(*vJdP8iL+MLtDII4NjtQZ>A1Vp+Zi6h~5ukAL2)$W29NWNv9u(kF!>cQV zM1faDe^!&2RDwzM7e0J{xv=8Ucm-ywSbMT!{79*d0RR&2w`-ps-g>a~JiE5~dunj% zPHyJhz;QLe8rY&hJ{f$9A(={WD4c29Z80dpwraHMHd%RKuL?jL?$!n=u*)$e3h7RV zI1UBKavb01(-i?GJpr0Cw^~?W#JGYJ8~$+Xf1cp1XOW5qip5%y@pQuQ9f?SqjfCNj z+fV9AfYD3b?G?W}WZ^`N$ADK*AVlO~VaN0d?^Lnz2s#+@VU3WYcqa;g0UY?J!{`Cat~bc#_XRv6J)Zxs0F+(JYZE~jpWV&QWHV;7X_~f{TB?EyRY5_# ze<|wOi-HvdQK9q?&{Hp7#IrX~9z^^Ltb*W8ywn$ho@|ZOcV9_1yV;%H$*$iwn@5!* z2qENU#cWgWGSg@nqz>#%-13+{=sM~o5kQ|h;0YCw2xyYNAlcT#~mI|b= z=1Q$%S5u70uxdX)!3V=qvF5H07pw5jcIYY7u|!XG2M64xhRH^}S_GBW+(%B9QqA5WKgnbI+C z4aMU6xeNO)9wnkivRzvl0sO&7jC@Lbz=9tsVRM{xQycW&&@`3ABX1D9Kz2Ity!`Oh zy(jMsmMg&zhHHkzT)3m)@IA{7RyO(K>gPu*AL6C;`IC3|vqM&?e=+m+?EK-Y0#F>< zgR35OniM(r1D`Sm=uoDzXq8&R3nQ5CR4zug0gI8v8giUM52`feE0a#sZ$JeGOLc(F zmc9^ayGcpUVyg!#s4V+OGy005o*|i%Q^Cpv6-LkrF-?ld%$q*x*~t%hHCj4W+NsnD zY2W9zn?2e8q6C&de^?zYz;M~;cN7wW#mzL#F=xECzN{wzsSAFj5@plBTI*^Xq#GML zApB?p6|2?@&mg}ApzLaTnuwz4n@*=Q?M&^IQi>2X2F0ZszoN#43*F#Saqkb%l^bK? z&ZQgU(hw7ZVWB3tH^G=lG;u*z31I` z?m7RL-*p8Ry2VWYo_>0ugLNpYv9EipPm+oR5!${iaOV@hzcSktiHEGFWMB z#?VcRf7uZ`e|)d;SBW0%4#7zxaETd-+|1F!*y`TT(?hx8qxy~oIEjgI2t9U>Up7QIn=)l`69x@MY?rHMjNDHf8;}AWre-s!W+?IOb{guAowd( zBqp6~2nm2nj)!|Fu$-t(!XnryWC)=U)^TzT@(MIbbFkTqAq1%q{x=6{MYz2ETFz+I zVdD*Fj{^+1oCf?>7U486w>^_YtI-5*U*ME-2kKHu3NjO1K7<{Rymx@4cIulCW(qZG zqbnrce>~EE{M^`?Z^iFh_4T+IZ#k_e6Hlk+rb=5SykzsB@+COxzc_Yzp|n6AAgKS2 zQzx-7rw+g;R?VH;7sjhKW2wBTr?SWLBa3Ur(ZY$f%IaWWVPj`qj-#96+0paMYd_#Q zUy7fz=|0P`s0$#dO3L-Uv7u9&M%lDmG9Fx9e=ViKA{k~am)2dJ5>TsV)v_(rQ>$+S zQiXbEyQYi9(brXd*R0C1cqXm;zGqs^on|sg=4NIx<2mO}Y}F#@E|4&jxpVJ%eCM3+`=9xyV}tkbkV4>34MbgJ!9 zn^CtnQc?OtO7s1R4-W;t|Fgk9z|KVoF=AkJ2;rR!F-!74(O**ki^6?}YEbxCIP;=N zm275tq0r!*d)U+(Qx&1N7*F7?gM)*N#YoZ^#xb~+IS)mf2*$!lOB4BGe}ux3@)XCN zAj(W8l*-9cVY)c-ysfR>y=o&+a55BjAIek);3sghKdH+m*ceR&224OmC^L+Gi-Jg7 z@@aFDi~}wxhV5{`T}(JVEQaEH&|-`qa2JQF5GOVh8LW8-a~ugoMBt_*t0V*~1(BvD zBTtEtj;cY-J2qmbf*ec^f1aN}(i29XTR2OMEN`;HqHLHhtN3HLlCSKy_H`7?_B2^t zES|0%RJqF`2N$(0$i1?uY`t5Bm4~brZl{CYQxt1pA)aHm`|i+)8IUg{B@Q3Ju>|)6 z?^mEh#MX&Ny_6{r+`jGf@~LU82aE>Ua@@_omKxO=g>+Een7Ik(3-e$0 zH(`6s=4LnQ8|7SSuLI9$dc+S0_G?N{b%#9-XWg(h5d4!FH{icPC_ixQrP9*()-F60 zq$zc)R?e22b{#vEf8sHGy>d_*Nw*%Xu$;^69wc$h;jGWucH`da>$@MSzwO=I7cbm@ z^&UTMKVscJmaBYHX9X({8+0Thcho?O{4Ys9lKi8J#@*0aA;Z$i&eOHacb>fCI4G+T zJ%AtlZ7ls-_GYK6J-hnw{PUHuUcXXYw*29_xifFSt_eyde~PYD&CEA?+X z5bRK^3QjG>w0OsE3rbxAVaPW~l1mzOQbZgr2*$CD25UG#E@dSucSdaPL{cM1^+M8y zpn?M08X6CwehtXF)^|Q4M=UAXjY)DP2qWxA04U(;TfOEHj(`X-CjdSa_2>!H84C~n z0m)DiagBs3e=feLnubz15w4m{LLGt6Bk(%vD4De8AIAs-_xK?IW!JLXG!R8SspD6i zq#;SwidK{&(FL$WVu933bPd125AZXr*z*DW0W4T{3kVQu)km7NO`0b4D;dWg?qi(t z5(p_$lqjCe*mLikxpVJ1{}+E3f0EBG6?OlAaqb0$e=pAQScX4$NVf`ugtb{PLk}W% zbZjPFOBI%i>k$NTLT0*b6_3ay#`VN){9= zLjS)Z^+Ls46A}GbI7O-gq@9M!IV=IBSi%}Sj#RQ#HmymDX+;Zo7zijHfH@|Xqavw+ zYEUR#e~BvttP_AB2xKc%znh}7XBja{pW;0niRtu*;g`M6{y}#XO7NWyikfDWV@Ha? zczZBf3SUTQCxtyN0&^;e!U>g8o(%YU6Zs5E7BbS{gtQh!nIlZ7s3q`lSSb@gbRl;NK9(R#yg-Cnvg2+r4=>!WDIGR0-fS#*&S1hxW;eto^YF$e}zIjOp}X*$_{ zf3SUcc62;Afw4ntuuyhRkKkUyaz4eAQib6igzzeiqY^Prd#>j?$R^eghMj)bbNv}H z{!?~zK8~+48bUwlZ{ECnc;0DMn?XGGY?labbKCMzIVQ*Kl#1hDghRmll2qrw>T8un zvs4Dx2D_zpy?qf3;5XAWhPBs%{(H@ne{lHNuRMTcn8*p!RcWYy5wRW#N3VOlV zf{i%J7ptRA@5TM)(rV4fdWMkb%~h^RSJ)ab|52bfcfp%mMipMR(eR8LzOmLaHdhR3 zynO!p$*XtWSw5HR$^S(;@-f-nQ@d{t-hW8m)=hiOZN*t~IOyPM76J}4Rnj)yf3@Z< zm{&m@JlfgX|N0Fu0OB92Wl7{D6FdcVrXwi=saAC}Tk7L-?@LSQ&;RZTwo! zNegdRtSXq_jQ9nFE_z~1!tf;A=hN{ShqCct+;32@R8sqSUif0bQ*o*eiBFlw;?s~}TJX)a^kA7~W zH;PZ$D_yI7S=!P@UtgZpbqvk18gUXSL!VCCA);_BG@FB5 zoB;VtUAJs>Ri``v?QDv(+6{Ra45I`@A*5#!Cznd0p9`cHSF|jOfActzKOuIBtOKs< z-rS2{^$pWe(=c1INw=Food!y3lQa?-_uS;hbh5b(sGH;%najj$T}c8d?t%k@TQHd> zw@jI`;3_K=qBKg2WttYU873sp6bpc^?lj#n8kb5&LX^wBfj``*P35+_($GfHn0(>d z%6$Uk%ihwCzhi^-e3GzwwTFLY;&Gl&y{`mQQu7$Gjo%z*mf14iFYkA~yC{S3O zTL?zS^C;~e3~sD!`I`&9ntekt{9`d1i|G`g zyUc!lI(`1`^G2|Lb-RCg`Q*`?XJQfygDdQ`Tc;^td#?BzIuCvVHW9WZye44#ZusH# z$5-#a=Knnb;+}i^aepn!Vp?2^oV;dlGuWEV*cL4I=9seGb`O3Bf(bL++X*gBZQtq9 zoMB;!q0a*$$Y=Bq zLkxdMSdD~0+IG5UlQ1bVC7D^&R(mFbz+~x)L^{hCT*T~3vAB{Y6iUa9O?0JAS#xH} z>XKUYMpuFawN+ILe&;3EOUYy=fc+7Gv}@Om8i=BPf2`N9jhz=sNFdQhL=h1UNlit? zPw)XqNPGts4G1I}T1qN}prnG9f)of+Bq6IP`?7cK@p!oB&MdnMGze)M??bY$c4p4K z_uO;-8NXY96lc(ru$<71*+BIYig!(#Fyja^1CwXZB-3t1a&CF-O@R`Mn4Ck7;lH~s zzCeF}e||AH*TeLjr~AlD@fD%ONaU`8@dm*w(@ar3tyF_FYN<^I)QAME+JSXv%y$DNBuYqDe?dvrNk?%0-WUuMZh!)XN+H)a>31*jr=$HyR|BcTpBA5x|PkDUHs zJQxaX%`;hWx-es#@bERWj;F&7hzA%qDv1`0YLtWvOm~!86Ny3>HiN3F(A8v__*RhA ze@uSR4fG~ja}6P?_S$yKj~QGC0)xs1T*9Lg(^X)yF2n?>K$EA?WkpV_Cg+J5#ZO1r zAG~HQwFiIdbX4XIoWGs|S59F}k^PiG*HK_J5_s?QJCxXMEUjZ;6HGNd24SrxtIei= z+C4t&o>LBXu)Y7IbCeg^!Os5S@nPgee_1&!>yq-Di@aZoaUqH@Y^71Mx!k_UfW#>d ztuUpHes^QHm-qHI_fEP$AssHpe5y%$9J(dVkgh7(&AU=DoVTHx$2t>WbCy*>yV8xd zozCEto$wm;XfdGU)wvT|a+#f6s0c ziWiL56?BLKdimCz2j6tU>`7?N)3%;i*C{io-#>bD>;B6RNB*a`AD_N@_MiJZZRj@_ zw|d1ej^@sLXK=D4oL;LbSa590LWkpwFeD-L-e>?8r(`a?;tU0ZW}&OGwN??fjqy=E znObGoEV*>fF0Q=z%c9Jy9BN-uf2Pq~DN0`HRSs!9Te4u;5FP`vHnkLNzLarRnz7Ep zPRgEgTyTXOs^!E*l^K{?o}-@8t}&TKt#!xD^o}XruHS^YQ+asszB;bf3f8cSo0N# z4GTb(x}*XLRY(=x6iVMEv6I-2lbAVkZPKVKs#dMKsN^`#%$YmqaZmid2;O;6FwBwx zS$qa>aUvJWcNqsGZu|XOthy!)%lRI~`IJWPlC#B1*(y~lTQ8-RPzqWi+W}ciDN8C- zIymH2N6~?DWRxI06Q|Oge+;Y}0F^Z=L{-NpD5S}#cZz$tB3V$?mg%+S^^3yUW_}!{ zLthaUk7yW^&^qCG$x7Q!!`s^Iw3^;qCzrfO!x>h!&at=MAO&+;VJ+TS z{aEua3_ZcpDqStLLyg6?L7$mx+YAeC`x=`Rkt-%=*8{Q8EY+>A{Jc3X1+jo(o>Q|; zJA#iq+xfC+utLpXe+q?d+izV)7n-*)D`>KX;Gyc)hRM)mqJ*Oy-v#R?o4^^^5^};p zaZ<|7N1Hd%pD6Cp#U?Po0Xu4~`{c*jp)~El4?4}@@Z^wg?I0d-V!NtUDoHw~)zaF+8Bb%2^Uk6D;(^yZc)Pc{vwrW&t_-^= zYtNR~94TpPe^{!*scd*9QNa|*su}2 ztJA=A(E)?yw+49sjoD{J zOJ_zEWb|@&HDH@Tk32Pdz`J2jh`9x^Bf;wC{1&~jf1bM11sNjKybql*g)hI-7-fSA z`b~k}7YnaB*9jE~PIunZ9M<4}1>o%5b(@HSFnspr^?JR&V4Rpl2ni$_iWERW5eiy* z5Ih47kH8D?7<5Q0Vhj2u|B_;R%HZOfpIPtUm5*kyEMnBD~1>1kTw0SOJgWI;l-G_5MGQU zGaKs^n{b=;Gi)!QY|nO4&YMojK^!v-x8c{?qn&=#qvsDp4fqb>jYavRa{QZxRA%$*bWCObn^-(oqVg5I<0WZSe=gR>$(X^73UjKK5YNm9w-;%F5d~4S zzNr#(f}m(JRRKabP$twQfyfhZrFiO~4A&M@7vSU#;Guy=F84Z0mgQ4W!SMy>7fds` z80*y&eLA6Z06DR1n{lQo15VNu#(DsWBDNLqq^UsiL1$izauMX1O5OtN##yf3s`ZZ5oK8 zo*6&#s?#=6otA=13PO>PcuTC<@Bw@QU&Lqd18iBd=n7C*h*kokh%_`Nk0wrRCmwU} zow1t~7O2WYQ8tN_nKSos?m7R9?|*}PnlWdXhFzsMKutU zDsY*jWl!oB9kGZE78whne`)Hdo}Oy)8KETF;Y6|Mcz{LjaJXA0pd9*wVwJ`bcD3O8 zVZSr`4yPpqL=xFlNRA9tUpLjA6g)`MC|^E#@D5vAlC<=y0`$Mw@0rjUz2+LmI2j95 z&58!g;5tza+fpu2c&DvM8rdYMqi2t0-VR137SeUZQaHK#kyVFae-0XH;zW3@STd~T zc`%>Kco;>H^aN2d3Zjc?XlTX8mGW8HdGX|NI2mr3e7A;vKS#&Nqe!spm(aKfF(T3S zN%fty(>!IeS)s~c)$;c5NnfdIWP`tHZr&z!w+L4`dX=HWh`A((9d!7jytuh@2tgRY zA46Y5QFp!mxK}N2e~p5Hnhqm7E_^&aeD?XN z>`?iB=#m?5$h&*@PP->0>wUQgNG3!=&=e(c!`+=>>WzmeWCQT?{u=i@w{f$6>$v?1 zKBRS{bvFEoE=nXqX=2}H3C{;!a~hyM@7V~I$33?OU-SNcf9p&4t3UQtP6zL7l{N># z@b=EZkMlM_KdKrKX|-I0Wp6-EK*XUGRxiK}aq`kiVFM*oxLBfuKim?kt#Ng^0Az!U z;eLG&W$rmQEkUr6qglPa{aHRp=Kkt&^8az9gwU(&XmXc2R^u4m3J zxiS*{8YD&7iIRg?{aS!yTa=I%oU_r>l~K~1W5zPaeTT#-$N|%*g&M7JpV~}7f{3hYUx+cIb$toDHMD&1pprwv604jJ* z62^(fD$OK5$V_&bec=8#JQQ?v%IbPeA2KW#ob>thNA#!vSV^$nROO0Si43lBYaGkq zw64KiK%&Zz^dbi&4@{e#Lhz2*mgG$64fqe~e@H)`>lf0)f4SFEG0?1>r}rSoMq$-L z;wBx9qSdZoNf)@(20QaSk3cfb7d}%>QMOS(y?9cUg=luR%d@rlyhdIQ3G@Zz#MB!W zbb`o9jtP!7V9h$7zg?`yD5tesV;n}G6ETGNfouzRVg&-U)1%3r{kPb=)-de7xM&nHZR7L0`e~%_AaK$#HtP%2st- z4~~>9)(vr7hq|b9--SrUYxrWb={(=%=_rK}!fYu`sZq*3$!m0IQA(Ykp1-|(b9a9F zqgeH1P)8IgIX_s$F!Hv8+ny}$d|iJDe^D*YjUoUL1$p>N{t@9m1{o0|9nEtzYs8;1 zO%7mdY1;+{hK7^^du7S1r0C^H?BR52tN}z)nUV<6!M(+O*agvv3pWD;i3^_R@15SU z5ew}7@4mlJl!7Oeqd|bpo4V?nZDV%ik74cKEqut($dr_3~L2# z+G^Cm2)IbX+;bVG|1<95y%Zly~AX@K-me-4GyU%`r0Li{0ehS(sTY|4#Sl<%!v-GJHqMK_IS zh1sx>4x2)aqDkHs6E!ZbI%M<~CD(^-_ewgy1mNsicAEyGsK?{jNgUYrBW_$Qvk9$Y)rUfV00Rc7z8?YM>cL> zmhI6m2k1scZKzP}Hfh_9e?W$zhSULm;w=u@mKT&;0%UmrIF*Bs3Wvf3Wd|>$Vnc~t zlvBwf2cj%l+{Nxq#vasZi*o7@roLaO>|%Mo`LPQ2>emijdR2fWp;^)eT*|sPMBd{k zFxD|Fa4VQ_BqRkR3ODr&vZb!dj#@Ui(YE6{y|hdW&`q_>!e4H~e|16m4|$Ej65T*q zLMV6%3T>)Wlr2bqf5NS4Z(PTv=!_#ul^C^mbGkKjsJT|mKdLujoQL1G@u)xQIyW%E zx$0vGnHzA8=8pDBu5uh4fGNQ|H<*3z&c@5#apU)WkpO&Eg$klj>2e#b*~kT+pv&2l zC=IEMnhwXS%~uCje=YKu1fJVVVI^oqX`*4oh{(e&1Fl7j;$Z~$U|Jz&_!UVO)4o+U zShF*Kc8K<8;{`>uBuk#opV9M1SzMyI!r39M#^dSv&;2!ej=WGZpADu_8lxX<5F4&1 zjqfyFZg86(`#6iTeIX}(58>Xz5iM**1-+Nt>G`i-Jpb_de^Zhs5|m=-*&bDq!s$g{ z<>`sR8%BxCusPhm`}qFt>o@;Vzh{*i4gEBNZ945PV_glILe`Hv zCXDrIYJ7^4@epQ=NL6L#et7bUkrP4NATx2ZXUj+Pi!V1<^gk}u_2tXUoBjHF_r1mp znF-MbbeqF6f79V=l6Tb|12qS7hNCQuNVxtTthsEr>jqcUW~|l;PyK{lO$(Rkw9*X- zY#voGH9^#fkNJ+U2q>vfhI5vvL&T3*QW%tw>W=r_Mx^py#P1qc{S|<-E7@%tilTnc zjvXh?oTeaJT7gs~Bv$NM!ivA(Z3nd~^8%{}*dNLf{6nMuj> z^&QVW$M_F#>s%(vUyz?0P~2t%b=It zc0~@%ja{TsXt+zJECt&OM2yjTXS4u;Kz_fBFf~0Yb`q>W6-z|r-D{;TS!0i? z441x0{*;lKBLRIX* z=76H%1I0I`qQ;YI(r(+*7nO;Z3j>zfwRH=NdE(y+kJtP#5g0pD@_LZWHOQ&$hrO{E zcp4*gFx!urvneNK^*BNYr4On8*LN|eNbp1PxTL4P0 zjt*nc8IVOT){AzVYHI8OWSP&^7bq)q=HwYUC(qVe=^h_$PR%91XoJUv78`g4> zD#3x43iJYb8&C?0j<24ceR%)w<@xO6r_U49Hqi6~pcgB6?0DiVcau0w(=Usg7`q)> z1J@IWcw(bJ8jyW-h5h#Rn}aOsp$|XZd(m#zn~)`kIY3IPJ7G$l&V=(mH35R9woJ>h z`hU0nEt9?DMj>+@I%BHaf^bJgtO|1!Dd%@{x;=XB?mi0XZI@S<4FAvzaiGni5+|O> zj5?$B&J_sH_w=f@YI3RimL=^ByOXMrDAaf4HIPxOor-AkX^pqUFh1k{VB^^p$3dmP zsu*Md9m-wbRSK($y_60n&LXuS*^r2pet)CcZq4h6Qgw&^3c%R4^fnO#VeiYkbrK$J zDW#>Yph{Z~+>ns?xBLrEoKd;)5D%#|YFY_OvPqg`)9kKo=Hcw72&76mL{a3d9eZXx z^Ue2#w=wJDUu*=6nkpy9J;x44I6(~OZQw2AWgHg(rY8`uj4d@7f|Yu1Yj^`MOn*S$ zRXBO3n*SYHcd-SB#6&SY&5{|Gs7@%xCA~r zy4LbP&tP4vyS>gzxPp0S&sI>Y>pUwwgyM&s@Nlyj_c!*ty)zhaI)9s>S+rD1 z!{UIi;zmjAQs?~+j5y0D!z|)WwzIwq7N0r>kyH|lH4MjcXe@Mt%;6r~>M)lw#%u`| zX5q&RTaL0Jd}*3bU|G%w=dkNKy-q;M9561*mveIsA=`uI8a(ac_TlmOcd&;C;}o9d zW&6eP$$RhzRMIGszeoh_$A4`l)#>Fagyc^)4!&G`HdIQ<(Sa5PN*LOeNP%4j7lO)^ z*b^TSL*W%05G*S*{y`v}1o({2dk=q&P>B452sKeV%yV3&#GzPHf!;)cT#fIXP5ThS z8`iX_p#XR$VI6*4UVQ6xKVAO(F!;SG8?ldyU@D55p=>2G4)7|x1%K~D*(>soJ*3a{ zs0~Nk8!~oM#G)y7wzo{E#ZdyEynX%VQG55}G{ZtDmt`Ro$^9e>zhl_+?CjP@7|cE7Qfj`7aD)>==esjbKe_!8jK8D>H5XjoTZ z;S%^{RY(ngZ*}i1J$0>6TpnO6W@=s1g+$3;R+=;XZWez8pzKO|lnBCTbvF&oHozdu zILv4~_4G&*fntY(O@J?qpCcL&gf3tEP+E8jRfwtAtbXjmWD?| z7_dPn!u%9=fU`!PXi;>L`~1<%U{9IC=0>Zp?~$TkljDqJ$egFXXx-Xl0UDP z&*ArZFeR$%0!;-|p&guVmX+Kpc5{iY9lj8S1)+~(*|{7QOjN7do^KW`V{g2VC^tjFT(|PTa|ivzB7D!NLFs~@Svr+ml?hbt5M9C zz?xs4_kU*VDIz12O~MoHN_WzNEn?4uaK$eKrb|T119u6LJ1oejn~y}3f_l4Yln&=( zTwx*%;i)&rapC#iJbcMH=$yKZcB+!WXdumIq*93>x*i@Vu;Dg)jqBUzKJx5Xs#|~Q zFQ;&{F-nGKJLOI6H1Wq;BwthctL4QMMY7038lALAf+vXM6_Y~P_wFWfF zhT#J)`JuIvsSiR|9{8x!)y7D_`&E4=|KIgV-t^QLV#p~m3f;BF|`e~9GkTB21 z>3_U}smZmhM=0JfMe!&G*oT*FlmuO6+|LC&*z&m74u?TB(sX@fQ$m+teWMEEGwtuViYLC3=7EHf>kJDzCLq=*p`FPb8~AQnF=4@NXlrm%q<*Etnt!RH1W3xM zJXS297nFpZjE{LhYAAJmaN{BKw3PG;tDU|~Sz66qh0KmZU6~0F7UTxO4FL2G12o}2 zp51+3fVxsmib=_H&Q`a$Q7{gCFtt72d=dtl;_)P(U`EHbqaX|B4tg8(BV3BtJkLM; zeTbsWwrBZNd)fxOY)j*72NkbF!~Eh{t47Lbwu)6 z{pCqG1-0e}U-pO7(f8Biqpt__*!zz=uiw3;hqkt!hI+NdVf>Rix{)5-x_R&Ai&r~u zKK1ow2g7Zj8<#jSg1rH!fH4enUE>g52@O5;`O*z`rBN2PhLh8}Z7a7-1ZL^o zYi1ikWU2&3V!(DOakp;xedIirFn=@@k!@%aE`y~sl)<7)Uz+c+YI9EL%uoI!0AJVA z+C&tE=guSZNYhD7sZCQ$X$37VEV>rKwM$p(qKLQ>f1*oYh<_**q!KB$AS5Ym(|O%_ z+_|1}?#wh*F$`ogA#?AXbMAS3=Y0DAEju}|s=a95xEt&uIfD$>;N`i@Gc^k$ouCMU zVuqN6(j9theYbDo%yY}LJ!B6BM?u;x4MB}2PC+ElAEqD-#aLLgI9V!}WKuStG8QT- zz_666j9Qh-CV!{Gpef|=sHup<{8SL4U=sc+N;OQp?io`ghnFf46lt2y{L)eLDRBgc z6Bl`uCv4tp`L}(S#LX_o;Z*#IqpXMT)2Ir>$_l16BrfHp3rk@2N0HBzvQBOz8JJLZ z7Q9NHizvn`i6L~AIfsapbsW%t)3G(!YqtefMGMX*-+#W2qBu2J)u-`s|I5koEGjrM znUtW)f&>u1a!sTnINuznoVY7(9)mBhi#`#Jpj7bYJ)&VSx6IRb{n%ploBh+fsBjnT6a}oCR$d)kEEtdol!LV8GPGJ z+3Es`JcOVO4;*80%Ew_e0dbLFPx1CU{blN9Yq;)ZGj3|&4mR#y-x+S*-n_B4v$5>0 zK7Y7>Z};UcY{;kgZ(lurQQwISZ~UBpe!aKWxfLBmQ9K#F*?a!<+0p(H#ANU$K*g{! zq?J79XIOf1PNGw69Ayf1j)9=>_MDa@BpH3mZYZkK>I_f@w6V*T4zUaUtjd}V0=T-T zfj$ZpHVbq5Zcnx4DS#UsBngDLgpR~|E`PaXp3|-|m$buz{(`B0$IZ-TL3mi%T-Eca zWW7`!s>D%Amc4Ns;q5Fq9i;@=BqZ5>w*R*Pgk8&S(?AsU zjFUP^>rm7dwN<+52DPwZ!Q&5DAn`S@T*x`%<_qp7@EkZ8GHoFXP0a#N9)SCcG_uMW zc!a?E2Js-RZ8Y1kh<$aI6L+YlL4OzsFLll$C|Z=OP$n;;*7G1OUE{Y_FtrXLp32hf zPb##36nIL9E|G{&i))-~nBEu2YXJ|DqUR7Lz@hT7vZ~eTs#8!2#IRMyWo}5gGS0NX z!*6w41fC{=!zPmbb~J2YvtxmUO)Yb6e{a`cgxj{QE~W#=N#QKUWH>9@m4COfxr8!I zX3B7ALRC`{T_XWHyuKWzFMD?HtLGx0Ga+(`OeUvLnS`_j=c}T#zLEF|-*rK`4p-%o zZ6V89vQv<@2>~5=W(bpDKbj+vTv5p=N{%O_p>+)j#zOp3!QoU*?3NuyiWnI*dEc5W zVfBMF;`-3oJeqrP~JF;?;RYEXMdw82^qkH@*ouG zWmJHM8-<5G+P&MKJN?B(({NO7tN`vz6?GYh71SJGipCa^B%r_WlX#*Q46_KcY>$*| zksP0JRV--?fkU3=m_QrGcW2OCZyBKxgu$nilbzl^e8tYUA@92<_aA-y^5NOTr>Ac| zpPyg7dii2>HB#?`t$*(3)Ljk27;*9d$AKc&ZUVdNP!m7R^n2rNJ#tu-@$WV z_y#0C0s;L8UibhWkdTm2B_2Qs6_vIW(Wa%f6Wh7i%g*e^NsEZ`mdNpXW6znHGw0a< ztH#WF+~dTaBY*4@Lsc|0O~8<~Jx>II@O@Sj#KpP_;Q9sD484$p@>g&_+_>3TQCA1l ze5g|a@0W^0gdmQPLfr-`ai&ncVK!LTF)Zw;{86~X&^UyY6uOtiL{E(sD59@Xyv0IZ;An7a!JL9U9Z5AdejfL!mP`f_ z1qv9}q7qr~0QG?#O8u&bopcn0#Vzrj8fVVsunB=gMp>NWxWMYQRWiL+I3O*xF zf;&s$tvlUy1?_Qsrcj_<`y!(RtX^}j4%=N=s<{Cs{jwFbEps`5#HbdWjM5wk9zSqG z#}baiIbUoos_%UKzO7Xsj3PLZaT+IS($7>{fO4 W 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Ν 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 delta 189701 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 C?f&AV5w-J~(@ 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 Date: Thu, 18 Jun 2009 18:12:13 +0000 Subject: [PATCH 056/512] Part two of svn release commit, last one! --- source/blender/src/splash.jpg.c | 12318 +++++++++++++++--------------- 1 file changed, 6163 insertions(+), 6155 deletions(-) diff --git a/source/blender/src/splash.jpg.c b/source/blender/src/splash.jpg.c index f4d7279646e..547b23b40db 100644 --- a/source/blender/src/splash.jpg.c +++ b/source/blender/src/splash.jpg.c @@ -1,6159 +1,6167 @@ /* DataToC output of file */ -int datatoc_splash_jpg_size= 196913; +int datatoc_splash_jpg_size= 197158; char datatoc_splash_jpg[]= { -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, - 0, 1,245, 0, 0, 1, 26, 8, 2, 0, 0, 0,135, 56, 89, 17, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, - 1, 0,154,156, 24, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,174,211,164,123,114, 68, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, - 39, 0, 0,115,175, 0, 0,246,112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, 0, 0, 48,131, 0, 0, 21, 42,251,118,133, -113, 0, 3, 0,167, 73, 68, 65, 84,120,218, 98,252,255,255, 63,195, 40, 24, 5,163, 96, 20,140,130, 97, 7, 0, 2,136,133,138, -102,253,249,249,253,223,203,235,127, 63, 63, 99,150, 50,102, 19,148, 28, 13,220, 81, 48, 10, 70,193, 40, 24, 64, 0, 16, 64,140, -212,106,191,255,249,241,237,247,230,124,150,143, 55,128,236,255, 12,204,127, 52, 35,217,204, 18, 89, 88,217, 70,131,120, 20,140, -130, 81, 48, 10, 6, 4, 0, 4, 16, 19,181, 12,250,255,242, 26,164,112, 7, 85, 26, 12,127, 89,174, 45,249,190,171,121, 52,124, - 71,193, 40, 24, 5,163, 96,160, 0, 64, 0, 81,173,124,255, 39,168,248,155,153, 7,216, 25, 0, 35, 16,193,246,116,255,151,205, -165,127,190,127, 30, 13,229, 81, 48, 10, 70,193, 40,160, 63, 0, 8, 32, 70, 42,206,175,254,120,126,243,239,193, 54,150, 79,119, - 17,141,122, 6,134,191,156,162, 76,206,237,156, 82, 26,163, 97, 61, 10, 70,193, 40, 24, 5,244, 4, 0, 1,196, 72,245,245, 51, -159,143,205, 99,189, 50,159,225,255, 63, 68,211,158,145,229,183,106, 16,183, 69, 50, 11, 39,207,104,136,143,130, 81, 48, 10, 70, - 1,125, 0, 64, 0, 49,210, 98,125,228,143, 59,135,255,238,111, 96,250,247, 3,218,134, 7,227, 63,156, 18, 44,110,237,156,146, -234,163,129, 62, 10, 70,193, 40, 24, 5,116, 0, 0, 1,196, 72,163,245,239,223, 95,221,251,191,187,138,225,243, 35,132,208,127, -134,191, 76,236, 76, 86, 37,220,186,222,163,225, 62, 10, 70,193, 40, 24, 5,180, 6, 0, 1, 68, 84,249,254,237,195,235, 63,119, - 14,253,120,126,249,255,159, 95,196, 27,205,252,235, 51,215,251,179,176, 38, 60,130,248, 99, 90,194,111, 18, 60, 26,244,163, 96, - 20,140,130, 81, 0, 7,255,254,253,251,254,253,251, 71, 48, 0, 50, 88, 88, 88,254,252,249,195,205,205, 45, 36, 36,244,245,235, - 87, 70, 70,198, 31, 63,126,124,251,246, 13, 82, 98, 75, 72, 72, 8, 11, 11,179,179,179,227, 55, 19, 32,128, 8,151,239, 31, 46, -237, 96, 58,209,195,252,247, 27, 68, 61,156, 96, 64,110,153, 99, 99,162, 9, 33,217,243,255,175, 94, 18,191, 77,218,104,140,142, -130, 81, 48, 10, 70, 1, 16, 0,203,244,135, 15, 31,242,241,241,241,242,242,242,240,240,176,177,177, 1, 11,244,143, 31, 63, 29, - 63,126, 76, 89, 89, 89, 76, 76,140,131,131,131,133,133, 21, 40,200,196,196,248,239,223,255, 47, 95,190, 60,124,248, 0, 88,244, - 75, 73, 73, 1, 5,113, 25, 11, 16, 64, 4,202,247, 95, 63,127,124, 91,224,203,242,247, 43, 3, 35,169, 14,254,143, 89,214,255, - 71,106,201,255,145, 48,231,245,106, 97,225,228, 29,141, 90,234, 2,120,132,226,137,245,145,224,134, 81, 48, 10,134, 74,179,253, -237,219,183, 79,158, 60, 49, 48, 48, 0,230, 23, 96,217,253,251,207,223,175,223,126,222,185,255,114,223,190,189, 26,106, 10,110, - 46,118,236,108,172, 64,193,191,255,254,255,252,249,231,219,143, 95, 63,126,254,225,229, 98, 23, 18,228,190,127,239,174,176,176, - 16,176, 33,143,203,112,128, 0, 98, 33, 42,183, 34, 10,107,244,236,202,136,209,110,255,143,213, 0,140,246, 60,243,243, 19,159, -151,199, 50, 59,212,240, 41,153,140,198, 49,229,229, 41, 16,124,248,250,227,194,131,215,144,178, 85, 79, 78, 88,128,155,131, 9, - 88,215,195, 0, 29,138,111,136, 51, 46, 60,120,245,225,235, 79, 32,131,166,110, 24, 5,163, 96, 24,128, 63,127,254, 60,120,240, -128,149,149, 85, 87, 87, 23,152, 65,158,191,250,120,227,206,139, 7,143,223, 60,124,244,252,209,131, 91, 92, 60, 2,191,152,127, - 10, 8, 63,248,249,235,239,171,183,159,190,125,255,245,251,247,223, 63,192, 98,254,255,127, 54, 86, 22, 89, 25, 17, 1,142,239, -114,114,114,120,204, 7, 8, 32,194,227, 51,223, 30, 95,250,115,105,197,175,175, 31,153, 88, 89,177, 20,240,159,158,177,124,125, -140,117,180,230, 55,155,240,127, 1, 57, 14,126,201,127,191, 62,253,120,243,148,237,219, 35,198,255,127,224,101, 61,220,214,127, -186, 73,130,246,233,104,166, 94,186,241, 96,235,249,187, 14,186,138,198,106,178,108,108,172, 67, 40,182,110, 61,120,190,243,226, -125, 75, 85,105, 11, 61,101,186,213,255,139, 14, 93,155,186,235,226,165, 71,111,145,197,229,132,121, 34,173,212,178, 93,245,132, -120, 57,153,153,153,169, 82,194, 66,138,239,210,165, 71, 58, 35,173,244,229, 69,153,192, 0, 34, 14,172, 93, 74,150, 28,222,124, -238,222,199,111,191,144,221,144,238,172,147,235,174, 15,116, 0, 92,241, 40, 24, 5,163, 0,152,101,222,189,123,247,250,245,107, -110,110,110, 89, 89, 89, 96,153,125,226,236,189,157, 7, 46,189,127,243,250,243,231,215, 92,220,252, 95, 62,127,144, 85,212,178, - 50, 86, 97, 98,102,190,126,251, 57,166, 9,192,220,244,246,213, 51, 39, 71, 43, 27, 19, 5, 22, 22,236, 57, 11, 32,128, 40, 90, - 63,243,238,236, 70,166, 83,253, 76,255,126, 34, 23,237,255, 25,152,126, 75,219,115, 24,132,115,202,232, 48,179, 32,250, 7,127, -190,127,249,126,125,231,239,115, 11,152,127,188,130,171,133,216,253, 95, 59, 86,208, 41, 23,217,228,221, 71, 47,120, 78,218, 1, - 84, 35,192,198,116,170, 45, 86, 73,142,192,105,101,249,147, 86,223,253, 8,114,134,151,158, 98,150,191,245,128, 68,216,179, 23, -175,108,107,150, 62,253,250, 27, 88, 7,206,138,177,143,243, 50,167,138,177,223,190,255,216,126,241, 1,144, 33,203,207, 97,166, -169,112,238,230, 35, 35,117, 68,141,253,254,203,119,183,182,245,151, 30,189,193,165,157,143,147,109, 83,145,151,145,146, 56, 11, - 48, 9,128,155,210,148, 56,230,222,203, 15, 22,181, 43,128, 37,248,166, 34, 79,123, 45, 89,160,153,192,130, 27, 40, 14, 44,244, -221,219,215, 35,151,236,200, 64, 71, 70,104,115,177,183, 8, 63, 55,196, 13,163,121,123, 20,140,240,146,253, 45, 24,176,177,177, - 1, 73,126,126,254, 63,127,254,157,188,240,224,232,241,211,156,236,156,255, 25, 25,248,248,132,128,170, 24,153, 89,228, 36,249, -213,212,213, 46, 93,127,241,247,239, 95,244,130, 27, 12, 94,191,122, 42, 38, 38,157, 20, 97,205,195,141,125,162, 21, 32,128,200, - 60, 63,242,231,151, 15, 95,143,204, 96,190,179, 1,109, 64,230, 55,135, 4,139,117,177,136,166, 45, 22,155, 56,121,120,141,130, -255,104,186,127, 62, 56,137,241,246, 6,148,246,254,149,197,159,132,228,248, 12,252, 81, 4,193,133,255,135, 95,127,127,252, 36, -188,104,231,196,205,167,103, 94,129,102,128, 21, 5, 7,108, 64,255,223,191,255, 79,128,133, 59,246, 33, 42,242, 1, 23, 39,135, - 36,203, 95, 96, 92, 78,221,124,156,155,153,177,107,193,246, 21,237, 25,240,132, 18, 58, 97, 43,114,225,174, 41,201,207,199,201, -250,233,251,239,235,207, 63, 66,251, 87,223,127,249,245,109,219, 80,224,110,162, 34, 5, 47,142,201, 3,192,186, 36,124,226, 86, - 72, 33,254,235, 23,176,171,248, 27, 98,218,131,215, 31,145, 11,119, 62, 14, 86, 77, 41,126, 32,227,228, 61,168,195,174, 60,121, -231,211,179,229, 96, 77, 0, 40, 25,140, 22,241,195, 11,124,249,250,243,238,253,215,112,174,178,162, 40,176,172,217,181,239,218, -177, 83,119,173,204,148,221,156,180, 72, 50,141, 72,141,104,150, 74,136,241,137,139,241,145,231,254,187, 15, 94, 47, 94,113,162, -161,194, 23,191, 93,250, 58, 50,212, 10,177, 7, 15, 30, 0,179,143,146,146, 18, 48, 47,112,115,113,223,186,125,107,253,150,163, - 60,252, 18,146,114, 26,192,252,241,255, 31,168,248,224,229,227, 84,146,224,224,224,226,218,176,105,167,172,130, 38, 19, 19, 51, -184, 76,135,244,128,255,255,254,253,243,199,143,111,111, 95, 61, 23, 17,147,150,145, 20,192, 85,184, 3, 1, 64, 0,145, 83,190, -127,123,245,240,235,166, 34,182, 31, 79,209,196,127,113,201,243, 4, 77,229, 20, 16,129,150,245,191,127,239, 61,121,109,203,165, -251,130,220,156,206, 26,210,214, 70,234,172,172,172,192, 82, 94,208,163,234,237,215,183,204,207, 14, 51, 32,141,204,255, 62, 54, -225,151,134, 43, 27, 7,215, 80,175,155, 25, 24,168, 63,202,204,195,195, 13, 36,181,100,132, 22,108, 59,166, 41,129,168,192,128, - 5,235,225, 27,207, 32,108,115, 37,145,206, 96, 35, 57, 17, 94,200, 80, 12,176,180,109,220,120,110,205,153,135,144, 34,190,115, -243,185, 37, 89,194,224,201,119, 50,155,240,255,254,253, 75,153,181, 7, 62, 4,244,231,207, 95,160, 8,100,192,189,100,201, 97, -120,225,158,235,172,145,239,162, 9, 25,141, 1, 86, 51,115, 15,221,156,176,251, 26, 80,252,234,211,247,109, 27,207,212, 4,154, -193,135,227, 71, 75,198,225, 1,128,101, 95, 67,199, 38, 68, 90,229,102, 47,201,117,255,242,237,231,197, 43,143,245, 72, 47, 19, -137,212, 8,177, 84, 95, 71, 22,194, 37,163, 34, 65,216,248, 5,100, 35,166,248,186, 45,231, 47, 93,121, 2, 44,247, 33,118,173, - 95,146, 69,149,150,251,163, 71,160, 45, 65,106,106,106,192, 44,240,225,195,167,109,219,182,187,123,122, 91,218,114, 94,185,245, - 76,132,159, 75, 84,136, 71, 94, 86, 68, 86, 74, 72, 12,152,145,153,152,158, 60,121,250,248,169,230,227,167,207,249,248,133,254, -254,253, 3, 90,237,242,229,211,175, 95, 63,216, 56, 56,129, 36,232,156, 94, 22, 38,125, 29,124,227,239, 0, 1, 68,114,249,254, -233,206,201,159,123, 27, 89,126,189,133,159, 63, 0,201,169,255,152, 56,184,220, 26,224,133,251,142,227,151,171,150, 29,188,250, -250, 43,164,204,235,220,126, 65, 73,248, 64, 95,180,189,151,149, 46, 80,132,223,179,238,203,202,184,255,159,159,195, 87,212, 48, -254,254,242,253,226, 6, 54,243, 40,244,226, 18, 44,255,236,229,155, 77, 39,110, 60,124,253,241,195,247, 63,192, 48,146, 17,226, -246, 48, 86, 53,209, 84, 64, 81,248,255, 63, 90,211,249,205,187,143,107, 14, 94,220,113,249,193,213, 7,175,222,126,251,197,201, -194,172, 32,193,239,162,167,152,236,106, 44, 39, 41,130,203,131,251,207, 92,223,116,234,214,201,187,207, 56,216,217, 12, 20, 36, - 2,205, 84,109, 13,212,208,212,220,188,247,116,221,137,235, 79,222,125,251,241,239,191, 32, 59,179,162,164,160,135,129, 18, 59, - 11, 19, 3,194, 9, 8,135,188,251,240,105,241,222, 11,155,207,220,186,251,242,227,151, 95,127,217,153,153,100,132,185,237,117, -149, 18,157, 13, 52,228,196,177,186,225,240,133, 91,221, 27,142,223,124,242, 6, 24,201,103,102, 22,114,115,178,255,255,255, 79, - 78,148,159,143,157, 77,150,159, 3,174, 76, 78,152,247,112, 93,144,119,247, 22, 55,109,169,238, 48, 19, 96,115, 0, 84,131,130, - 27,200, 92, 92,255,166,196,219,157,184,183,238,201, 59, 80, 20,236,188,242,244,205,199, 47,146,172,172,204, 96, 64, 70,186, 44, - 89,114,104,203,185,251,136,226,254, 63,180,112,191,255,234, 35, 92, 60,200, 72,182,192, 85,139,157,157, 29,216,241, 4,218,194, -195,195, 80,233,111,242,236,227,143, 85,167,238, 1,101,231, 28,188, 81,234, 5, 29,136, 31, 45,223,135, 31,104,168,240,155, 62, -239,192,203, 87,159,128, 45, 98,204, 38, 57,164,105, 31,232, 99,120,236,228, 93, 96, 33, 14, 26,235,187,255, 26,216, 52,118,115, -212,178, 50, 87, 6,106, 89,191,249, 60,144,251,229,235, 15,252, 26,149, 21, 68,129,138, 25,161, 54,250,162, 41, 6,214, 46,174, -142, 90,192,230,252,209, 83,119,131,124, 12, 33,226,192,166, 61, 68, 4,200, 5, 22,217, 64,110,102,146, 61,208,174, 93,251,175, - 1,185,112, 19, 22,175, 60, 1,233, 19, 0,107, 23,160, 94,160,212,139, 87, 31,129,165, 60, 15, 23,123,108,132, 37, 80,252,226, -149, 39,187,247, 95, 3,106,132, 84, 39, 64,147,129,238,129,248, 2,232, 60, 98, 26,248,207,159, 63,255,251,247,175,162,162, 34, - 48,253,191,123,247,121,203,230,205, 22,150,182, 92,156, 60, 62, 46,122,198,186,114,194, 66, 60,156,236,108,192, 60,138,200,224, -114, 50, 1, 30, 44,187, 15,177,158, 61,127,233,223,191,191,156,156,188, 28,220,220,188, 2,194,156, 92, 60,204,204, 44, 64, 67, -190,125,122, 46,196,139,175, 12, 7, 8, 32,210,202,247,183, 71, 23, 49,156,155,197,252,255,247,127,120,201,206, 8, 45,201,254, -233,196,112,203,104, 66,148,205,219,124, 36,119,217,209, 63,255, 81,230, 82,239,189,249, 18, 48,113,107,223,235, 15, 57,254,182, - 44, 92,252, 76,214,229,127,182,231, 35,183,123,127,156, 91,204,143, 92,190,195,116, 55,175, 60,184,229,234,211,111,127,144,202, -205,255, 12,245, 27, 78,133,153, 40,205,206, 13,224,225,230,100,192, 54, 38,178,225,224,185,180, 57,187,223,124,255, 3, 23,249, -240,231,207,139, 7,111, 79, 60,120,219,189,229,108,178,163,118,103,130, 59, 23, 39,199,149, 91,143,138,151,236,131, 40,200,182, -215,156,184,227,252,193, 7,239,224, 21,215,161, 59, 47, 39,237,185, 20,107,174, 50, 51, 55, 0, 50,205,251,237,251,143,210,153, -155,231,159,184,251,231, 63, 74, 83,189,112,233,225, 72, 3, 89, 72,117,196,136,228,156, 61,167,174,166,204,218,249,252, 11,210, - 16,211,159,127,175,159,125, 60,255,236,252,148, 93,231,107,253, 76, 43, 34,157,129, 98,215,110, 63,154,180,227, 60, 68,222, 68, -134,175,120,245,201,239,127, 65, 70,136,177,130,134, 50,148,229, 65,211, 15, 42, 10,210,152, 99,112, 6, 10, 98,155,138, 60, 37, -249,216, 57, 57,217,129, 37, 59,164, 96,133, 53,177,255,120,235,203,207,220,127, 13,194,189,244,232,141,168, 0, 47, 43, 43, 43, - 25,133,251,194,131, 87,167,238,186,132, 85,118,211, 89,196,113,114,121,206,154, 64, 7,112,112,112,192,157, 1, 76,205, 21,126, -198,144,242, 29,216,156,223,114,254, 65,144,185,218,232, 16,205,240,108,200, 63,120,253,245, 43,168,224,134, 20,193,240, 66,115, -221,230,115,144,193, 19, 96, 51, 25, 88,250, 3, 75, 67,228,246, 50,144, 61, 67, 49,166,161,125, 19, 80, 28, 88,142,127,249,250, -147, 24,141,174, 14, 90,144, 2, 23,194, 5,202, 46, 94,121, 60, 54,220, 18, 88,224, 2,219,218, 5,153, 46,139, 87, 28,135,148, -239,192, 66, 31,210, 27, 0,137,248, 26, 1,171, 19, 96, 37, 4,113,225,221,251,175,130,124,140,128, 12,136,177,144,202, 6,200, - 0, 42, 0,150,233,112, 23, 2,221, 48,189, 99,147,181,153, 50,208,100, 96, 65, 15,148, 2,218, 5, 49, 25, 88, 1,196,133, 91, - 94,188,250, 4,168,101, 70, 95, 12,254,240,249,241,227,199,151, 47, 95,128, 45,119, 96,201,241,225,227,247,189,123,246,106,104, -104, 9,139,138, 3,115, 3, 7, 59,171,162,156, 40,214,172,247,239,239, 95, 29, 85, 33, 6, 70,147, 55, 31,190,113,114,112,178, -179, 51,179,179,177,240,114,177, 11, 10,112,241,242,112,178,177,168, 61,125,250,148,143,143, 23, 87,163, 13, 32,128,136, 45,223, -255,124,255,252,102,107, 51,235,179, 3,200, 99, 16,240,214,234, 95,102, 94, 94,195, 16,136,202,107,119, 30, 23, 44, 63,250,251, -223,127,140,129, 11, 16, 40, 91,126,196,217, 80, 77, 83, 78,156, 79,205,234,205, 9,117,198,247, 55,225, 6,177,252,124,253,245, -209,101,110, 57, 93, 84, 61,255, 87, 93,124,140,106, 6, 20,172, 58,115,239, 85,219,242,189,173, 73,152,174,221,114,248, 66,228, -212,237, 63, 65,110, 96,100,103, 98,140,183, 86, 51, 82,149,254,246,227,215,154, 99, 55,142, 61,120, 3, 20,159,182,247,202,155, - 79,223,151,151, 71,124,250,246,115,207,181,167, 16,255,156,186,253,252,211,159,127,140, 12,140, 98,236,192, 70, 38,227,115,104, -221,240,127,241,201,219,156,140,235,166, 21,133, 3, 57,153, 19,214, 46, 59, 15, 63,116,225, 63,114, 51,116,249, 5,136, 56, 35, -220,153,199, 47,221, 9,155,180,245,235,239,127,224, 81,105,230, 76, 7, 29, 69, 25,145,175,223,126,110, 63,123,103,207,205,231, -127,192,181,148, 0, 47, 87,134,143,229,235,119, 31,230, 31,185, 6,209,184,140,137,241,199,223,127, 88,189,140, 89,190, 3,227, -213, 88, 89, 18, 88,140, 66,216,144,214, 49, 92, 86,128,135, 3,121,122, 0, 14,136,111, 62, 67, 22,204,164,207,217,135, 75,246, - 8,108,128, 72, 90,144, 75, 78,132,151, 13, 12,128,181, 8,196, 25, 64, 82, 69, 82, 72, 86,152,231,241,219, 47,160, 0,185,253, -194,207, 88, 9,232, 90,200, 32,210,104,153, 56,156, 0,176, 0,133, 23,244, 72,205,234,171, 64,210,218, 92, 5, 52,226,177,249, -220,209,147,119, 32,131, 42,153, 73, 14,192,102,123, 73,237,106, 96,209, 12,108, 89, 3,203, 86,160,154,146, 92, 55, 96,123, 25, - 98, 14, 46,141,192, 18, 22, 88, 58,127,248,248,109,247,129,107,235,183,156,135, 91,228,230,164, 13, 25,162, 57,118,242,206,213, -235,207,176,186, 48, 54,220, 2,100,242,126, 80,187, 27,168, 12, 88, 31, 0,221,192,205,205, 14, 52, 31, 50,200,115,233,234, 19, - 72, 19, 30,168, 0, 84, 43, 92, 97, 0, 86, 18,144, 90, 4,232, 72, 96,245, 3,169, 51, 94,190,254, 4,233, 88, 0, 45,133,152, - 0,113, 45,126,112,251,246,109, 89, 89, 89, 72, 69,178,103,239, 30,126,126,126, 57, 5,101,118, 86,102, 46, 46,156, 77,174, 47, -159, 63,127,253,250, 85, 94, 94, 86, 67,147,247,193,227,183,192, 86,211,207, 95,127,190,127,251,253,233,235,143, 79,159,127,188, -125,247, 21,216, 8, 20,230,251,251,236,217, 51, 25, 25, 25,172, 25, 10, 32,128,136, 42,223,191, 62,190,250,121, 71, 45,203,183, - 39,240,102, 59,122,225, 45,166,195,193, 39, 8, 97, 47,216,119, 1, 81, 60,161, 15,180, 48, 0, 91,254, 51,183,159,158,144,238, - 3, 50, 71,222,238,255,187, 27, 40, 85,220,211,139,176,242,253, 63,242,102,168, 24, 51,165, 66, 31,115, 5, 41,225,223,127,254, -158,190,253,172,124,201,129,171, 47, 63,128,198, 82,110, 62, 91,115,232, 66,136,157, 1, 82, 89,248,255,231,207, 95,213, 75, 15, -252,132, 86, 48,255,235,253,140, 43, 98, 60, 32,230,231,248, 89, 59, 87,205, 59,124,239, 21,208, 11,171, 78,223, 73, 63,123,131, - 13, 82,239,129,213,126,250,253,207, 65, 73,164, 38,204,206,214, 64, 21,216,198,220,118,236,138, 95,255, 38,136,236,146, 83,247, -250,126,252, 60,113,245,254,178,243, 15,161,243, 72, 2, 92,221, 49,246,198,106,210,188,220, 92, 79, 94,189,159,186,227,236,172, -131,215, 81,154,238, 12, 12,213, 75,246,126,249, 13,154,248,102,101,100, 92, 91,224,103,103, 8, 61, 91, 45,199,223, 38,162, 99, -197,186,243,160, 97,141,170, 21,135,162, 29,244, 25,144, 22,149,255,248,251, 63, 88, 95,182, 60,208, 90, 78, 82, 8,127, 33, 8, - 31, 79,135, 47,127, 68, 83, 15, 41, 85,225,229, 47,164,112, 39, 41,211,222,127, 5,154, 59,133,176, 53, 37,249,225,211,182,240, -242,253,195, 55,104,131, 75, 70,128,139, 25, 6,224,117, 12,144, 1,228,202,193,202,247,171,207, 62, 0, 11,119, 82,235,152, 81, - 48, 36,192,250, 37, 89,187,246, 93, 3,182,100,129, 5, 52,100, 64, 3, 82,150, 65,134,203,129, 36,124,184, 28,210, 40,230,225, -102,151, 16,227, 7,150,239, 16, 17, 37, 69,148, 6, 44, 46,141,192,194, 93, 95, 71, 6, 82,230,194,199,103, 26, 58, 54,115,195, -230, 24,121,184, 57,136, 26,118,255,250, 19,121, 74,246,216,201,187,221,147,119, 2, 27,248,129, 62,134,144,230, 57,150,105, 48, -152,201,220,220,236,164, 6, 14, 36,217,115,113,113,253,248,249,231,204,153,179,191,127,124, 55,178,119, 2,230, 90, 62, 62, 14, - 60, 90, 94,189,126,253,235,247,111, 97, 97,225,119, 31,190, 61,120,242,246,227,167,239,127,254,252, 67,148, 48,224,130,248, 31, - 3,247,159,219,247, 69, 68, 68, 56, 57, 57, 49, 13, 1, 8, 32,194,229,251,155, 83,235,254,158,232,103,254,247, 3,169,112, 71, -202,153, 96, 38,139, 0, 98, 40,252,244,189, 23,200,187,157, 48,139,147,211,183,161,237, 95, 86, 65,201, 95,168, 42,152, 62,191, -196,104,241, 51,184,169, 75,204, 45, 10,101,129, 45,181,244, 18, 17,210,146, 23, 87,207,159, 9,110, 22, 51,172, 58,122, 29, 84, -190,255, 71,140,123, 95,189,251,228,242,107, 68,185,166, 34, 33,188,251, 20,162, 22,209,148, 20, 4,150,239, 16,181,235, 78,221, -138,176,212,132,219,228,168, 34,177,165, 33,134,131, 3, 26,226, 94, 86, 58,102,107, 14,157,122,252, 30, 52, 44,243,247, 63, 48, -184, 87, 31,191,254, 31,230,249,133,121,190,230, 58,208, 21,238,154,188, 60, 83,178,101,223,126,249,177,230,236, 61,120,208,220, -121,248,244,200, 3,232,108,164,180, 0,199,207, 63, 12,187, 79,223,132, 59, 67, 70,136, 7,226,243, 47,191,254,110, 63,115, 75, -156, 19, 62, 94,241, 63, 88, 79,110,113,121, 36, 11, 11, 81, 85, 47,254,185,202, 35, 55,159, 35, 26,215,194, 60,164,238, 51, 66, - 94, 48, 3, 44,220, 23,167, 88,155, 52,111,195,172,185, 49,235, 27,116, 23,194, 18,204,147,247,223,128,193, 8,153,152, 29, 45, - 16,135, 25, 0,150,185,144,150, 59,242,114, 14, 96,155, 23, 88, 70, 67,134,197,129, 69, 57,176,129, 12, 31,129, 65,148,155,224, -193, 16, 96, 19, 24, 88,118,195, 7,196,137,209,136, 92, 91, 0, 53, 2, 27,215,224,181, 46,175,228,100,132,224, 53, 4,242,128, - 62,154, 22,160,107,129, 85, 5,100, 76,233,197,235, 79, 64, 27,129, 13,124,100, 91,144,245, 2, 29, 9, 52, 25, 40, 11,116, 18, -100, 16, 31, 94, 51, 17, 3,126,252,248,241,230,205,155,237,219,119, 8,139, 72,190,121,245, 74,223,192, 24,152, 79,248,120,241, - 21,238, 79, 30, 63, 6,146, 26, 26, 26, 95,191,253, 58,124,242, 22,176,193,142,200, 52,192, 28,197, 8,109, 52,255,254,245,235, -238,203,247,198, 70,191,177,150,239, 0, 1,132,175, 16,249,253,243,199,139,173, 93, 28,143, 54, 51,161,103,103,216, 40, 51, 60, -123, 35,229,104, 14,118, 86,164,145, 27, 44,128, 29,118, 41,235,223, 63,127,208,178, 57,211,223,175,152, 99, 0, 33,150, 26,104, -133,157,130,148,168,145,172,208,201,135,160,129,242,235, 15,208, 87,254,159,190,255, 2,153, 27, 54,125, 39,142,162,145,225,202, -227, 87, 12,150,154, 8,149,150,234,240,194, 29, 2, 4,249,121, 24,192,229, 59, 52, 5, 63,120, 1,174,143, 24, 85, 5,216,225, -133, 59, 28, 68,217,106, 3,203,119,248,224,213,211,183, 8,191, 60,120,255,221,187,123, 45,174,112,190,247,236,181,184,146, 56, - 60,104, 35, 28,244,137, 44,220, 9,228,183,135,175, 31,189,133, 94,158,229,170, 41, 9,105, 74, 19, 95,184, 35, 47,152,225,227, -100,237, 10, 53, 17,230,197,183,186,233,201,135,111,184,164, 62,126,135, 78, 63, 60,125,255, 13, 62, 70, 52, 90, 32, 14, 51, 0, - 95, 69, 3, 25, 7,135,176, 51,147, 29,186, 39,237, 60,122,242, 14, 16, 65,138,126,101, 69, 49,140,118, 49, 59,164, 52, 71, 94, -135, 67,140, 70, 56, 0,150,236,245, 29,155, 50,138,150,124, 5, 13,226,139,133, 5,154,236, 63,124,163,164,118, 53,104,236, 1, - 71,173, 16,228, 99, 4,236,106, 0, 75,106, 96,169, 13,238, 34,200,172,223,124, 14, 50, 94, 4,239, 40, 0, 59, 34,192,158, 1, -100,248,222,205, 73,235,216,169,187,153, 69, 75, 32,141,247,204, 36,251,233,243, 14, 18, 31, 56,175, 95,191, 22, 19, 19, 99,102, -102, 83, 82, 82,253,249,243,199,215,175,159,248,248, 20,129, 29, 93, 92,195,158,111,223,190,101,102, 97, 17,229,227, 7,230,217, -107,183,158, 2, 11,119,112, 83, 9, 60,223,249, 15,178,156, 4,218,120,250,246,237, 51, 80,246,225,211, 79,130, 2, 88, 86,136, - 2, 4, 16,206,114,228,199,135,215,239,183,212,176,189, 62,251, 15, 92, 91, 32,236,102, 98,255, 39,105,206,252,244, 16,114,193, -254,255,251, 59,184, 2, 11, 21,169, 61,144,241,175,255, 88,134,144,129, 28, 7, 45,104,111,235,239,183, 79,255, 81,135,111,254, - 51, 48, 97,182, 12,181,101,177, 44, 50,225,231, 1,150, 53,160,162,231,215,159,191, 48,197, 80,245,159,191,126, 39,106, 9,250, -127, 96,220,127,135,116, 49, 32,190,208,149,151, 64,175, 2,152, 64,251,191,224,103,170,253,248, 5, 29,145, 23,192, 86,241, 42, -139,242, 51,192,215,240,252,255,127,239,237,199,255,255,255,163,173,150,100,196,114, 42, 15,195,183,159,191,145,122, 58,255, 85, -196,248, 41,207,108, 64,171,167,236,188, 8,231, 38,216,168, 64, 22,191, 19, 57,177, 9,212,158, 58,107, 15,124, 97,204,210, 84, - 91, 61, 57, 97,172,115,179,214,234,146, 71,110, 61,135,148,221,192,234, 68,131,139, 11,173,236,254,240,245,199,229,199,111,145, -171,141,209,194,125, 56, 1, 96,209,220, 80,225,135,204, 5,150,197,192, 82, 18, 88, 62, 66,150,165,207,232,139, 1,182,148,191, -124,249, 9, 41, 70,129,236,192, 47,134,202,224,209,152,216, 8, 11, 8,219,202, 92, 25, 50,228, 2,212,242,226,213, 39,130, 26, -209, 44,133, 40, 6,154,192,195,195, 14,180, 23, 40, 50, 29,168,247,254,107,160, 57,192,154, 6,216,244, 6, 22,202,112,245, 64, - 75,129, 34, 64, 45,202, 74,162, 64,195, 33, 85, 11, 80, 87, 79,115, 40,196,106,136, 22,136,153, 64, 17,160, 2,136,153,160,181, -146, 96,247, 64,150,202, 64,204,193,116, 12, 38,248,254,253,251,159, 63,127,128, 45,241,159, 63,255,255,254,253, 91, 86, 70,230, -253,187,215,192,182, 22, 46,245,159, 63,129, 0, 48,183, 10, 10, 10, 60, 3,173, 71,122,133,104,174, 3, 75, 20, 38,164, 65,239, -255,255,158, 63,125, 32, 35,171,242,230, 45,246,107, 80, 1, 2, 8,123,249,254,241,246,201, 47, 59,235,153,127,189,249, 15, 29, -144,129,102,200,191,108,130, 60,158,237,204, 76,140, 95,159, 30, 68, 46,131,127, 61, 60,129,168,120, 61, 77,167,238,190,240,254, -251,111,172,253,120, 1, 14,150,100, 55,232,129, 51,191, 31,159,102, 70,205,235,127,153,185, 49,138,247,255,143,223,127,177,192, -112,225,171,119,208,129, 96, 78, 54, 52, 47,252, 23,224, 67,220, 18, 37,207,195, 86, 21,110,135, 43, 28,133,161, 29, 73,232, 82, - 24,110, 14, 22, 28, 21, 1,116,149, 16, 23,176,107, 2,118,239,171, 79, 88, 58,125,159, 80,123,130,178, 66,252,112, 95,152, 43, -137, 39, 56,232,224,114,134,142,172,232,207, 47, 95,225, 5, 60, 55, 39, 27,229,185,238,194,131, 87, 75,143, 66,135,131,130,140, -228, 20, 68,249, 32,115,158,196,180,223, 33, 11,102,150, 28,129, 14,106,117,134, 24,235,201,137,128,143,175, 99,193, 28, 29,242, - 49, 84,232, 4, 79, 79, 1, 65,211,198, 11,139, 50,156,129,157, 74,228,115, 11, 38, 35, 85, 51,163, 96,248, 1, 96,105,142,185, - 52, 80, 28,117,195, 17,164,124,196,207,134, 27, 66,140, 70,172,150, 34,139,192, 21,136, 99,200,194,205,129, 51,160, 42, 97,110, - 22,199,240, 5,166, 94,100, 54, 86,199,160,140,115,190,127, 47, 36, 36,196,204,204,242,231,239,143, 79, 95,126,126, 2,118, 98, - 25, 89,190,126,253,202,195,195,131,150,239,128,213,192,215,175, 95, 62,188, 7, 77, 46, 42, 40, 40,124,254,242,243,224,177,155, -127,129, 77,162,127,240, 28, 7,106,191, 67, 51, 49, 35,195,199,247,239,132,132,196, 57, 56, 57,180,213,165,176, 90, 13, 16, 64, - 88, 74,180, 87,135, 23,253, 57, 61,141, 9,180, 8,146,145, 17,105, 44,230, 47,191,170,128,127, 47,183,136,212,231,151, 15,209, -199, 85,126,189,255,116,105, 27,159,158, 23,144, 45, 38, 34,184,182, 40, 48,160,123,237, 39,112,107, 23, 89, 37, 15, 27,243,226, - 12, 15,105,113,208,105,103, 31,159,220,100,124,126, 10,237, 88,178,255, 60, 98,152,237,247, 89, 59, 79,135, 58, 24, 32, 91,183, -255,204,181, 11,207, 63, 65,218,201, 38, 42, 82,240,186, 12, 58,140,174, 33, 3,103,191,252,250,203,215, 84, 93, 66, 84, 8, 89, -175,190,138,140, 16,172, 47,115,236,194,109, 44,189, 12,228,233, 3, 72,147, 28, 28,162,182, 26,114,199,238,131,246,100, 62,252, -240,125,243,145,139,190, 54,250,200,106, 39,111, 61, 9,107,236,131,128,129,130, 24, 59, 19, 3,100,154,247,237,199, 47, 41,158, - 40,149,212,241, 75,183,101,197,132,100, 36,160, 7,191, 29, 60,113, 9,201, 9,148, 54,111,129,109,228,180,217,123, 32,108, 62, - 14,214, 60, 23, 77,200,186,120, 98,198,103,128, 94, 56,112,237, 49,124,193, 76,181,143,110,184,185, 18, 59, 24, 96,234, 5,138, -232,203,139,234,200, 8, 93,121, 2,234,192,237,186,250, 44,119,209,145,246, 8, 75, 49, 1,232,130,173,201, 59, 47,180,111, 60, - 3, 87, 15,116,204,104,129, 56, 10, 70, 26,120,249,242,165,190,190,254,171, 55, 95,158, 62,127, 15,204, 66,204,204,108,175, 63, -126,253,248,241, 35, 48,143,252,255,247,239,215,239,223, 31, 63,126,248,252,249, 51, 48,223,127,255,241, 3,152, 79, 37, 36, 36, -126,124,252,248,237,219,247,139,160,147, 9,254,193,198, 18, 16, 99, 50,224,113, 0,208,208,194,143, 31, 95, 36,164, 20,197,132, -121,132,133,184,177, 90, 13, 16, 64,232,189,245,151,135, 22,252, 57, 57,145,225, 31,100,133, 59,164,120, 3,141,150,254,149,115, - 19,139,158, 3, 44,220,129,162,188,226,242,191, 56,164,254,195,198, 68, 32,232,235,145, 73,127,190, 66,219,212,182, 6,170,167, - 58, 18, 61,181,100,224,181, 7, 59, 19,163,151,182,212,177,166, 24, 79,107, 80,153,248,231,247,175,175,251,251, 24,254,255,133, - 89, 0, 41,158,255,115,202, 24, 98,182,157,247,222,122,145,216,179,242,210,205,135,111,222,190,127,240,248,249,170,221,167,226, - 39,109, 2,251, 21,228,198, 72, 91,109,244, 14,163,130,180, 55,172, 58,253,241,239,127, 80,199,202,243,183, 64,139, 94, 62,127, -254,178,124,215, 73,191,238,117,170,217, 83,235, 23,238,120,242,226, 45,162, 98,248,255,159, 64,169, 10, 14,218,104,103,163,255, - 48,197, 9,211,183,205,221,118,226,201,179,151,175,223,188,187,118,251, 81,214,164,181, 43,193, 75,107, 96, 6,253, 23, 17, 22, -136,180, 80,131, 24,124,231,205,151,212, 9,107,222,125, 0, 13,237,125,255,241,115,237,190, 51,190,157,107,244,139,102,181, 47, -219, 3,228,194, 45,248,255,159,129,242,161, 11,160, 11, 39,237, 56, 15,223,104, 26,111,173,172, 40,198,207,198,198, 70,204,170, -115,200,106,200,240,137,208, 73,212, 96, 99,185, 20, 59,117, 72,225,206, 10,222, 27,133,169, 5, 40, 56, 53, 1,209, 67, 90,125, -250,190, 81,205, 26,143,142,141,110,109,235,185, 19,166, 85, 44, 63,134,172, 88, 67,146,111,116,243,234, 40,160, 22, 0,175,136, -127,130, 44, 2,228,226,153,134,197, 4,164,170, 39, 15, 72, 74, 73,253,250,253,247,197,139, 15,144,116, 15,204,134,108,236,188, -215,174,223,184,116,233,226,181,235,215, 95,189,122, 5, 44,180, 5, 4, 4, 21, 20, 21,245,244,244,116,116,116,128, 69,191,136, -136,200,250,205,187,158, 60,127,135,220,108,135,150, 44,160, 85,241,160,124,247,224,238, 53,126, 65, 81, 96, 13,161,173, 38,197, -198,138,125,236, 1, 32,128, 80, 68,191,191,123,241,251,244, 12, 70,212,145, 98,208, 57, 55,166, 89, 98, 86, 49,200,135,133,177, -235, 71,254, 61,209,131, 58,200,244,250,213,186, 98,225,192, 62,118, 30, 80,211, 88, 89, 86,124, 83, 99,194,155,119, 31, 30, 61, -127, 11, 44, 24,164,197, 5,132, 4, 5, 16, 29,150,125, 83, 24, 95,157,249,143,122, 49,200, 31, 14, 9, 14, 73, 21,228,178, 6, -194, 96,101,100, 88,120,236, 38, 16, 97,186, 62,220, 72,222,217, 76, 7,101,244, 29, 76,205,202, 13,180,175,154,127, 27,178,230, -250,254,107,163,138,133,138,188,108,239,190,255,249, 4, 90, 93,196,240,245,247,191,230,141,167, 36,249, 57, 51, 2,236, 49,122, - 11, 56,134,103,192, 64, 75, 65,162,208, 85,191,127,247, 69,160,216,135, 31,127,210,231,238, 70, 87,139, 90,112,245,166,120, 93, -126,244,250, 12,120,244,121,254,145,235,203,142,221,144,228,102,125,251,253,207,103,160, 51,192,214,117,109, 62,229,160,171, 96, -169,171,194,192,192,192, 64,165, 81,233,251,175, 62,182,109, 56, 13, 97,107, 74,242, 23,184,106, 65, 22,164, 19,211,120,255,240, -245, 7,176,225, 15, 89, 48, 99,174, 36,218, 29,102, 10,212, 11,223,143,138,235,144, 35, 35, 37,137, 73,177,214, 53,107, 78,125, - 2, 15,202,125,250,254,235,216,237, 23, 88,205,215,146, 20, 24, 61,159, 96, 20, 80, 11, 96,158, 28, 0,228, 54, 84,248, 17,127, - 86, 12,169,234,201, 3, 76,140, 76,175,223,124,254, 7, 89,120,248,159,225,247,239, 95, 15,239,223,150,150, 18, 51, 52, 52, 70, - 62, 28, 23, 88, 0, 0,123,222,191,255,252, 21, 19,151,254,248,225, 29, 23,183,216,211,151, 47, 4,133,196, 64,197, 57,120, 44, -133,145,137, 9, 88,154,255,249,243,235,215,207, 31, 31, 63,189, 19, 16, 18,227,230,226, 85, 83, 6,205,115,224,178, 26, 32,128, - 80,202,247,191,239, 30, 50,252,251,245, 31,105,133,251, 95, 78, 9,110,231,106, 97, 77,244, 19, 25, 5,205,130, 95, 94, 88,204, -244,253, 37,114,177,198,248,234,252,235,249, 65,188, 78,149,252,218,206, 16,113, 17, 33, 1, 32, 66,214,248,227,211,251, 55, 59, -218,153, 31,237,193, 44, 68, 89,212, 60, 89, 88,177, 12, 61, 79, 12,183,108,217,118,254, 25, 98,200, 27, 90, 14, 38,152, 41, 77, -206, 11, 65, 8,254, 71,108,112,149, 20, 21, 60,209,157, 86, 50,119,235,242, 99, 55,127,128, 71, 72,238,127,250, 9,113, 37, 27, - 35,163,171,150, 84, 85,160,149,149,145, 22,102, 9,142,165,108, 71, 93, 10,212,150,228, 9, 36,167,236,185,248,251, 63,202,106, - 37,113, 46,214,106,111,131,188,213,167,145,117,243,241,114,239,106,138,175, 91,178,123,222,129,171,223,254,252,253,249,247,255, -131, 79,136,198,130,189,146, 72, 71,162,187,169,150, 50,102, 71,129,194,145, 25,248,105, 48,157, 33, 70,144, 13, 71,196, 52,222, -129,122,193,167,149,189,133, 84, 12,211, 99,205,129,101, 58,164, 98, 0,181, 24,254,253, 67, 41,223,193, 34, 64, 0,153,179,141, -179,211,178, 82, 17,239,220,114, 30,216,126, 71, 54, 51,200, 8,116, 56,198,186,115,208, 21,177,102, 74, 34,163,231, 19,140, 2, -208,102, 84,240, 73, 3,144,197, 42,144,165,138, 60, 92,236,152,130, 12,224,243, 97,128,229, 47,176,149,253,242,245, 39,136, 44, - 68, 25,114, 27, 28,162, 29,249, 8, 26,200,225, 1, 18,162,124,144,153, 91, 30, 30,118, 72, 75,223,205, 81,139,135,155, 29,190, -148, 19,222, 15,216, 5,222,230, 13,180, 8,104, 50, 80, 22, 50,233, 10,153,230,133,203,194,151,222,195,101, 95,192, 14, 99, 0, - 74, 65, 38,150,177,250,247,205,155, 55, 12,204,252,144, 82,132,137,153,249,225,195,123,160,205, 63, 74, 26,255,254, 51,126,255, -241,251,251,247,223, 64,167,126,251,254,243,231,239,191, 63,190,253,254,245,251, 15, 80,150,149,233,139,140, 4,251,155,247,140, - 31,222,191, 17, 18, 22, 7,230,182,159,192, 50,253,195,155,111, 95,190,112,112,113,241,240,242,139,139,203, 0,115,167,144, 0, -151,158, 6,190,202, 9, 32,128, 80,206, 7,254,249,249,253,235,153,110, 12,255,255, 66,138,236, 63,130, 58,162,161, 19,184,248, -133,176,234,124,125,112,214,239,211, 51,177,155,170, 21, 41,230,154,207,130,177,220,226,243,227, 27, 31, 54,149, 48,127,199,178, -187,236, 63, 35, 43,127,252, 6, 30, 17, 73, 88, 10,120,123,233, 22,180, 80, 48, 1,175, 68,108, 89,178,107,231,185,187,215, 62, -252, 16,101,103, 54,144, 17,204,243, 54,247,118, 64, 92, 12,114,236,204,149,175,224, 69,120,146, 98, 66, 58,234, 10,112,241,143, -159, 62,175,218,127, 97,243,201,107,111, 62,126,101,103,101, 81,147, 22,206,244, 50, 55,208, 70,244, 18,222,127,248,116,230,202, - 29,152, 69, 42,104,107,140, 46,221,184,255,242,205, 7, 8,219,193, 92, 7,190,128,228,212,149,187,141, 75,119, 95,120,244,238, -203,239,127,178, 60,108,182, 90,210, 13,241, 30,252,188, 60,135,207, 64, 15, 3, 80, 83,144,146,151, 65, 44,251,121,250,252,213, -188, 61,231,143, 94,190,243,225,243, 79,110, 78, 22, 85, 41,145,120, 39, 3, 75, 68, 5,195,240,250,237,251, 11,215, 31, 64, 42, - 18, 75, 67, 13, 30,110,114,206, 89, 3, 70,229,196,237,231,202,151, 29,133,112,115,157, 53,138, 61,116, 57,193, 0,190,161, 20, -143,222,148,153,187,225,115,170,144,115, 40,129,237, 14, 70, 80, 81,204, 4, 61,136,226,255,255,163,183, 94,192, 21, 8,112,179, -235,203,137,118, 69,219, 64,198,109,254,128,218, 21,160, 67, 37, 15,223,124,246, 15, 60,104,104,161, 44, 10,108,209,219,118,108, -131,180,235,165, 5,184, 14, 87,122,114,115,115,115,113,113, 1,221, 51, 90,196,143, 88, 0, 44,124, 23,175, 60,190,120,102,114, -207,228, 93, 64,110, 73,174, 91,108,250,220,216,112, 75,172,130,211,231, 29,232,105, 9, 5,150,170,235, 55,159,131,200,114,115, -179,103, 38,217, 67, 74,118,200, 41, 99,192,178,117,221,230,115,153, 73, 14, 64,197,192,246,248,250, 45,231,191,124,253, 1, 20, -223,181,239, 42,196, 4, 96,201, 27,232,107, 4, 52,193,202, 92,197, 10,124,210,128,155,147, 54,216, 37, 87, 75,115,221,129, 10, -128,138, 33,219, 80,103,244,197,100, 20, 45,129, 44,199,132,156, 51, 3, 89,103, 9, 84, 0,180, 2,168,184,123,242, 78,136,172, -156,140,208,230, 29, 23,225,230,224,233, 7,156, 60,121,138,131, 71,252,255, 63,102, 96, 38, 2,150,223,103, 78, 31,211, 55, 48, - 17, 23, 23,254,250,245,199,179,151,159,254, 35, 95,117, 7,107, 89,243,240,114, 11,243,253,126,250,236,229,249,203,143, 88, 88, -216,127,253, 2, 54, 83,255,243, 11, 8,241,242, 9, 49, 51, 49, 3,219, 85,192, 12,205,193,198,106,102,168, 32, 37, 33,128, 39, -168, 1, 2, 8,165,253,206,206, 43,200,233, 88,245,249,240, 52,166,191, 63, 25,229, 44,197, 61, 42, 57,120,113,106, 22, 48, 9, -123,113, 97, 25,211,175, 79,152,227, 18, 12,215,150, 61,191,187,155, 85,209,134, 77, 82,155,131, 87,240,231,215, 79,191,222, 61, -253,253,236, 34,195,171,139, 76,224,254, 1,150,242, 69,217, 3, 94,184,131,107,111, 97, 87, 49,148, 75,167,122,115, 66,122,113, -123,195,202, 4,251,234, 20,126, 62,222, 84,127, 91, 32,194,165, 17, 88,160,187,218, 24,225,146,213,211, 80,196, 42,110,166,163, -188,181, 29,203,245, 29,174, 54,134, 88,213, 75, 75,138,213,198,186, 51, 48,184,227,178, 72, 84, 88,208,213, 70,144,138, 35, 51, -210,130, 92, 73, 54,170,196, 55,222,129,101, 55,188,112, 7, 2,180,125,170,152, 0,174, 0, 88,166,179,179,179, 67, 90,250, 64, - 91,128,164,139,158, 34,124, 17,228,212,253,231, 63,193, 86, 82, 5, 25,129,206,139,167,202, 49,244,163, 96, 72, 3, 96, 57, 56, -125,222, 79, 96, 75,252,226,149,199,192,214, 49,100, 87, 17, 46, 65, 80, 67,254,222,107,200, 49, 94,199, 78,130,142,124,113,115, - 68,153,114,131,236, 98, 5,201,130,207, 12,128,156, 39, 3, 44,235, 33, 91,144, 32,130, 37,185,238,144,194,247, 18,248,140, 48, - 96,161, 12,169, 33,128,229,242,139,215,160, 18,204,213, 17,114,160,205, 99,200, 49,100,144,227, 19, 32,166, 1,155,234,192, 66, - 31,210,144, 63,134, 36, 11,172,105,144,205,193,227, 95, 81, 81,145,139, 87,110, 9, 9, 75,112,113,242, 92,184,112, 74, 84, 92, - 66, 80,144, 31,152, 93, 94,190,249,140, 88, 66,205,136,180,151,232, 63,195,151,207, 95,255,255, 99,229,229, 98,119,119, 54,191, -112,253, 57,176,253,203,196,196, 2, 89,255, 46,192,207, 33, 41,198, 47, 46,202, 7,186, 29,141,208,130, 5,128, 0, 66, 31,149, - 23, 54, 14, 4, 34, 98, 34,137,149, 27, 88, 52,214,127,222, 90,140, 60,120, 13,207,181, 76, 63, 94,255,189,190,254, 59, 16, 97, - 31,154, 70, 25,244,248,203, 45, 43,233, 81, 58,154,238,225, 69, 45, 25,197, 31,250,200, 76,176,145, 48, 31, 23,242, 81, 48, 4, - 45, 37,207,169,144,253,168,144, 82, 27,178,133, 10,190,131,233,194,131, 87, 61,219,161,167,146,241,113,176, 38,217,170,193,143, -183, 28,141,229,145, 12, 32,235, 14,119,237,191, 6, 57,120, 96,221,150,243, 16, 17,172,130, 64,238,203,215,160, 66, 63, 54, 2, -116,146, 23,232, 40,246, 92, 25,172,102, 66, 6,118, 32, 67, 55,144,130,152, 1,188, 56, 29,237,248, 95, 96, 49,141,118, 22, 2, - 16, 64,142,178,145, 16,227,135, 44,105,135,159, 64, 0, 89,125, 15, 93, 55, 9,222, 37, 11,151,197,106, 14, 86, 32, 43, 43,251, -235, 47,199,181,171, 55, 94,253,123,254,243,231, 15, 5,121, 37, 81, 97,158,171, 55,159,131, 15, 27, 64, 61,112,246, 63,116,157, - 12,176, 9,244,236,217, 11, 65,126, 14, 83, 83,197, 95,127, 88,238, 62,120,197,197,205, 38, 43, 41, 36, 43, 37, 40, 36,192,205, -196, 68,108,249, 0, 16, 64, 20,237,147,228,215,114,252,241,182,224,247,241, 9, 88,202,108, 28, 69, 57, 38,248,203, 33, 38, 28, - 52,145,149,147,103, 52,221,159,185,247,242,222,203, 15, 33,230,170, 12, 36,222, 76, 13, 89, 51, 3, 63, 11, 62,193, 74,217, 90, - 77, 2, 62, 47, 74,164, 81, 31,231,164,253,248,241, 3,216, 30,135,143,179,163,105, 4,150,227,138,101,107, 32,236,133,137,150, - 64, 43,128,230, 35, 55,198, 33, 39,225, 64,220,243,254,203,247,232,105,136,249,231, 28,103,117, 33, 94, 78, 34,167,121, 71,193, - 8,104,194,203, 66, 70, 84, 24, 64, 71, 69, 30,183, 2,159, 35,134, 85, 16, 88, 94, 79,159,119, 0,216, 82,182, 54, 3,157, 71, - 6, 41,244, 33, 3,238, 40, 67,169,224, 51, 3, 32,131,251, 64, 18,126, 96, 47,176,201,143, 89, 19,192, 15, 51, 96,128,157,142, - 80,146,235,198,195,205,142,124,109, 8,100,160, 95, 2,122,128,229, 19,160,105,112, 43, 32, 0,114, 80, 1,220, 28,124, 77, 97, - 86, 86, 49, 17,254,191,154, 90,192, 2, 93, 64, 80,228,247,175,175,207, 95,177,125,251,254, 11, 71, 94, 6,109,171,124,253,250, -197,207,159,223, 5, 4, 68,174,221,122,161,167, 37,173,166, 36,198,205, 5,236,136,147,124,178, 55, 64, 0, 81,186, 15, 94,220, - 54,238, 29, 23,223,151,125,109,140,255,127,147,161,253,175,168,137,136,103, 21,143,132,226, 48,107,128,227, 23, 4, 22,112,152, -106,128, 34,119,158,191,191,247,234, 35,100,127, 16,100,145, 9, 68, 25,164, 64, 68,187,213, 26,185,148, 68, 27,153,201, 7,175, -153,193, 85,184, 35,159, 16, 0, 63,145, 6,104, 35,176,101,205, 1,236,239,177,178, 2,203,113, 92, 93, 4, 56,155,137,153, 9, -126, 20, 48, 80, 35,230, 69,219,169,179,247, 62,122, 3,221, 83,167, 41,201,151,108,171, 6,239, 76,140,150,239,163, 0,210,202, -134,140,129, 64, 14,236,197, 37, 8, 41,166,245,181,101, 32, 37, 59,228,148,130,197, 43, 78,232,129,231, 66,129,236,140,162, 37, - 12,224,115, 8, 50,147,236,119,237,187, 10, 84, 3,108,233, 67,198,229,239,222,127,133,124, 54, 25, 4,184, 57,105, 53,180,111, - 2, 86, 21,144,114, 25, 98,102,102,209, 18, 32, 9,233, 37, 64,148, 29, 61,117, 23,114,191, 7,176,106,233,153,188, 19,210, 63, -136,141,176,128, 15,197,184, 58,106, 1,197,225,230,224, 7, 66,130,220,252,124,156, 31, 62,126, 23,228,231,186,119,239,246,187, -167,127,153,153, 89, 33, 87, 53, 65, 14,147, 1, 45,127,100, 2,173, 90, 4,102,197,143, 31,222,254,249,245, 75, 86, 86,249,255, -255,127,210,146,252,236,108, 44,236,108,100, 22,212, 0, 1,196, 72,149,205,226, 95,158, 92,123,191,163,233,255,219,155, 36, 20, -130,236,130, 92,182, 69,162,198, 62,195,111,116, 37,125,246, 30, 39,109,217, 16,115,149, 53, 39,239,236,189,250,120, 90,162,195, -218, 83,119,102,239,187, 42,200,205,158,226,168, 5,148,242,234,220,164, 32,202,123,255,245,167,169,137, 14,235, 78,221,221,123, -245,137,146, 24, 31,144,237,217,185,209, 80, 94,180, 57, 20,180,112,165,103,235,249,125, 87, 30, 43,138,241,181,132, 89, 10,241, -112,120,118,108, 4,178,129,165,127,176,153, 74,170,147, 14,100, 48, 4, 82, 80, 2,139, 93,183,182,117,240,198,251,180,104, 51, -111, 67, 5, 46, 46, 46,200,142, 83,204,146,183,116,201,225, 41,187, 46,242,115,177,181,133, 89,196,218,106,194, 7,196, 33,139, -100,240,164,135, 63,127,254,240,167,204,130,176,151,166,218, 58,233,202,115,114,114,162, 53,225, 25, 48,166,106,249, 56, 88,151, -164,218, 24, 42,138, 67,156, 52,218,126, 31, 5, 12,168,151,222, 65, 86,164,192,155,207,104,130,200,108, 72,179, 29,222,126,231, - 6,138,220,127,205,195,195, 14, 57,102, 0,178, 48, 6,126, 64,194,139, 87,159, 32,199, 21, 32, 11,194,151,232, 64, 14, 30, 0, -157, 76, 0, 51, 25,104, 8,100,193, 12, 68, 61,176,194,128, 47,212,129,200,162, 89, 1,105,227,191, 0,119, 23,128,213, 73, 79, - 75, 40,242,170, 30, 60,224,237,251,175,235, 55,237,227,231, 23,230,229, 23, 64,140,185,131,134,221, 65,163,157,239,223,190,249, -249,243,135,148,180, 60, 51, 51,147,166,170,132,172, 52, 69,211,114, 0, 1,196, 72,173,195, 64,254,252,254,253,118,223,180,159, -151,150, 50,252, 35,220,144,255, 43, 97, 45,230, 91,199, 45, 36, 54,252, 18, 46, 48, 60,103,238,190,216,181,249,236,149,206, 72, -157,242,229, 69, 94, 6,138,162,124, 49,211,118, 79,140,181,121,240,250, 83,255,142, 75,151,218,195,228,242, 23, 39,216,105, 36, -217,105,124,248, 6,186, 28,117, 83, 17,104,223,175,147,182, 76,222,162,195,247, 95,125,218, 84,236, 53, 97,199,165,121, 7,175, - 79,138,179, 93,119,250,238,131, 55,159,183,148,248,112, 39,205, 44,244,208, 87, 16,225,201, 95,114,244,112, 93,144,153,138, 36, -228, 36, 94,180, 53, 51, 26, 18,124, 53, 62,122,240,105, 85,208,234, 23,164,137, 15, 96,153,190,229,252, 3,228, 13,165,235, 11, -220,157,116,228,113,237, 93,194, 44,223,185, 19,166, 65,216,203,210,237,156,117, 21, 48, 87,194,128,220,179,237, 92,249,242,163, -112,145,142, 96,195, 72, 75, 85, 96, 77, 0,233, 28,140, 14,190,143,130,225, 1,128, 5, 61,176,147, 33, 33,198, 15,236, 37, 88, -153,171, 64, 38, 90,137, 44, 34,128,185,250,192,161,147,192, 6, 21, 19,232, 26, 38, 38,112, 33,252,239,247,239, 95, 63,127,252, - 20, 17, 17, 19, 17,149, 4,182,180, 52,213, 36,228,101,132, 40,108, 12, 1, 4, 16, 11,181,124,203,194,202, 42,238,158,255,195, - 50,238,199,189,163,223,110, 31,248,241,244, 50,243,207,151, 40,190, 98,226,248,203, 35,195, 41,111,198,165,238,194, 43,175,199, -204,194, 50, 92, 35, 62,217, 81,187,114,229,177,158, 45,231,222,127,253, 25,107,165, 50,113,231,101,160,224,188,131,160,165,147, - 31,190,253, 60,115, 23, 20, 44,126, 6,114,122,178, 66,192,194,174,208, 83, 31, 88,172, 39,216,169,219,107, 72,202,139,240, 64, -198,103,128,173,126,160,136,157,186, 4,176, 72, 13,156,184,243,247,111, 80,149,105,167, 46,110,167, 46, 9, 44,223,223,126,250, - 6, 20, 7,234,133, 92,143, 7, 31,153, 1,130, 27, 47, 62,197,204, 57,130,203, 97,214,170, 18,104,149,249,161,235, 79,109,213, -165,168,181, 38, 29,232,158,226,197, 7,145,111,122, 2, 22,238,225,230,202,144, 29,176,163, 51,171,163, 96, 56, 1, 96, 63, 3, - 50, 85, 0, 63,212,140,216, 54, 53, 35,163,138,162,232,207, 95,198,143,159,189,253,139,116, 85, 6, 19,104,148, 20,212, 98, 3, -230, 18, 53, 21, 9, 5, 89, 97,202, 29, 9, 16, 64, 84, 46,100, 57,248, 4, 57, 12,124, 4, 12, 64,163, 46,223, 62,125,248,253, -249, 61,195,159, 31, 12,204,172, 12, 44,108,236,124,194, 28, 92,220, 35, 33,226,129,241, 87,236,101, 80,187,250,100, 93,128, 49, -176,176, 6,182,154, 5,184,216,122, 35, 44,120, 57, 88, 62,125,255,173, 32, 10,186, 32, 27,114, 98, 16, 80,101,146,189,102,156, -181,170, 97,205, 26,125, 89, 33,232, 21,178,255,255, 43,136,240,158,127,240, 6, 88,135,159,127,248, 6,200,134, 76,120,254,131, - 93,137,245, 31,124,247, 41, 80, 22,152, 28,144,215,204, 16,238, 54,253,251, 43,139,122, 78,133, 20, 63, 7,181, 14,116, 4, 26, - 18,218,191,101, 51,210, 29,173,144,194, 29,216,108, 31, 45,220, 71,193,112, 45,226,201,214,171,174, 44,206,204,196,248,248,197, -123,134,127,136, 33, 26, 96, 59,139,139,131, 77, 78, 90, 8,207,150, 84,146, 0, 64, 0,209,176, 17,205,197, 39,192,192, 39, 48, -210,162, 28, 50, 87,153,226,168, 51,247,192,181, 68, 59, 13, 96,211, 56,217, 65,235,193,155,207, 38, 13,160, 91,144,234, 3,141, - 11,220,245,128, 12,102,208, 74, 66,230, 71,239,190,218, 54,175,255,240,245,167,131,166,148,190,156,200,197,199,160,227, 38,128, -218,155, 66,204,226,102,236, 21,204,152, 15, 44,220,231,167, 57, 66, 90,214,144,213,135, 96, 43,160, 5,229,129,107,143,225,195, -238,196,149,193, 12,181,190, 6, 87,159,126,184,246, 12,180,105, 43,200, 72, 46,204, 76,137,188,102, 59, 51,236,132, 72,100, 80, -233,111, 2,236, 16,124,252,254, 75, 75,138, 31,114,234, 36,164,229, 78,210, 50,158, 81, 48, 10, 70, 2, 0, 54,120, 52, 84, 37, -128,136,166,182, 0, 4, 16,227,232, 97,220, 84, 7,144, 85,225,127,254,252,129,159,148, 11, 20,249,253,251, 55,176,165,140,124, -195, 17,100, 84, 4,114, 40, 40,164,133, 14, 95, 54, 3,159,237,132,104,193, 60,176, 5,168, 23,114, 90, 47, 80,239,207,159, 63, -127,253,250, 5,100, 16, 46,148,193, 0,104,212,145,155,207,121,216, 89,180,165, 5,208,174,195, 38,208,252,255,251, 23,232,139, -239,223,191, 67,252, 5,215, 8, 95,222, 3, 20, 63,115,231,217,155,143, 95,205, 20,133,129,130,240,187, 88, 71, 11,247, 81, 48, - 10, 6, 4, 0, 4,208,104,249, 78, 19, 0, 41,154, 33, 59,149,208,150,166,192, 11,107,172, 82,152,226,200, 37, 62,242, 74,115, - 72,243,249, 47, 12,224, 90,212,136,220,177,128,235,130,219, 8,217, 80, 74,100,249, 11,175,183, 32,181, 14,230,133, 33, 16,151, - 0,235, 0,240, 24, 34, 19, 92,193,104,225, 62, 10, 70,193,128, 0,128, 0, 26, 45,223,105,216,138, 71,227, 98, 93,192,142, 75, - 28, 89, 10,235,193,235,200,106,136,140, 68,100, 93,200,245, 4,241,229, 47,164,214, 65,174, 48,208, 22,207,192, 21, 32, 87, 39, -163, 96, 20,140,130, 1, 1, 0, 1, 52, 90,190,143,130, 81, 48, 10, 70,193,240, 4, 0, 1, 52,218,188, 26, 5,163, 96, 20,140, -130,225, 9, 0, 2,104,180,124, 31, 5,163, 96, 20,140,130,225, 9, 0, 2,104,180,124, 31, 5,163, 96, 20,140,130,225, 9, 0, - 2,104,180,124, 31, 5,163, 96, 20,140,130,225, 9, 0, 2,176,118,117,185, 81, 3, 49,216, 30,207, 18,170, 5,212, 10,169, 21, -143, 32,245, 14,125,230, 0,189,112, 37, 94, 56, 70, 15, 0,136, 7,170,182,187,219,204,159,241, 79, 38,100,187,162,170,160, 43, -237, 36,217, 76, 60,182, 99, 71, 43,229,179, 63, 60,130,184,131, 34,227,139, 73,236, 13, 79,172, 79, 61, 70,116,238,192,233,204, - 64,171, 92,138,182,170,103,116,144, 69,152,198, 16, 34, 89,133,110,144, 81,113,117, 72,198, 29, 20,208, 80, 30,204,197, 56,248, -184, 42,121,105, 51,126,216,137,247,196,155,243, 40, 12,132, 41, 0,171, 16, 64, 17, 64,186, 3, 1, 35, 16, 80, 99,196, 72, 42, - 75, 17,123,100,156,124, 50, 65,103,129,108, 84, 31, 60,232,170,220,170,204,171,167,239, 78, 55,233,254,110,187,113,203,188, 89, - 68,183,150,112,223,106,134,246,241,236,211,245,183,107, 81,186, 40,161, 98,105,162,179, 72,242,162, 83,232, 96, 23, 57, 68, 39, -236, 82, 3,187, 13,202,138, 30, 99,248,112, 78,119,219,180, 25,121,147,218, 46,215, 84, 91, 46,106,175,152, 72,204, 39,235,183, -151,159, 47,190, 92,125,221, 53, 24, 83,189,125,216, 61,196,154,153,115,196, 55,235, 33,138,189,226,113, 22,205, 40,106, 37, 20, -203,181,165, 86, 46, 44,102,138,225,226, 25,113,132, 58,215,216,153, 0,104,155, 83, 74,109,252,249, 75,238, 73,201, 6,182,212, - 47,203, 96,184,204,102,116,188, 78, 51,179,124, 29,255,103,159, 23,244,183,143,222,215, 15, 52, 52, 46,185,213,167,195, 70,214, - 56,162,215,153,115,237, 51,249,185,241, 54,235, 0,199,195,241,205,120,115, 8, 6,250, 55, 8,129,214,160, 65, 72, 45,191,162, -213,201,250,253,143,219,239, 97,177,104, 95, 5,177,155,223, 99,128, 23, 5,137, 80,159,161, 63,238,217,130,143,246,157,248, 65, - 66,248,105,142, 96,152,243, 97, 95, 60,130,135, 53, 31, 56, 13,231,197, 28, 5, 21, 44, 97, 17,189, 9, 57, 30,222,160,229,255, - 65,203, 74,191,208, 56,190,230, 92, 6,182,250, 59,196, 37,222,215, 55, 62,103, 74,106, 50,244,172, 12, 81, 75, 57,104,165, 99, - 92, 53, 6, 57,200, 37, 23, 5,226,230, 36,225, 88,242,152,114,105,169,214,162,197, 34, 77,211,223, 82,106,246,183,168,197, 11, -213,252,199, 26,105, 24,235,104,247,198,147,174,233, 51,192,163,121,114, 87,235,121,140,122,214,159, 82,220,108,194,244,124,233, -180,159, 83,168,203,218,248,151, 56,255,159, 15,239, 71, 41,190,156,240,223, 2,176,118,110, 75, 13,194, 64, 24,206, 38, 80, 28, -171,118,250, 2,190,255,147, 57,163,142,227,133, 83, 75,115, 90,255, 93, 18, 74, 75,209,206, 88, 46, 40, 16,200, 97,249,247,219, -189,160, 9,253,135,236, 60,233,213,104,108, 82, 67,147,169,175,180,194, 93, 72,161,165,142,170, 2, 42,220,141, 98, 93, 87,136, - 0,104,157,252, 31, 70,192, 11, 16, 43,241,137, 81, 24, 66, 0,173, 99, 20,246,224, 21,229, 20, 81, 31,212,128, 82,202, 42, 49, -224,207, 8,181,208, 8,184, 38, 44,155,240,189,149,182,219, 86,181,171,215,165,222, 1,113, 26, 12, 80,224, 12,201, 20, 0, 84, -230,239, 29, 17,150,178, 60,139, 95,185, 63, 95,178,188,204,235, 73, 69, 38,145, 19, 20,235, 67, 64, 69,208, 99, 22, 68, 2,173, -232,116,226, 34,139,211, 21, 93,105,178,119, 26,163,156,217, 62,211,235,103,191,243,236,115, 62, 64,234,153,129,239, 28, 48, 78, -240, 66,166, 37,216,108, 31, 95,222, 63,208, 99,234,236,125,231, 54,235,110,187,110,159, 30,220, 93,135, 16, 97,124, 32,223,219, - 94, 72, 45, 54,110,156, 4,170,148, 2, 6,192,232, 79,150,136, 2, 21,247,112,161, 52,124, 2, 79,251,232,251,183,175,126,239, -163,196,146,196,202,119,253, 74,158,107, 72, 67,211, 48,110,162, 99,112,187,192,247, 51,162,241,140,194,127, 82,158,174,230, 50, - 45, 67,156,110,193,247,185,167,141, 8,113,199,197,118,104,121, 32, 60, 26,132, 23,140,112, 10,119, 90,228,175,113,116,197, 32, -146,248,215,244, 54,156, 54,116,129,236,133,134,213, 99,225, 33,195, 26,196, 86,207,240, 90,157, 93,118,121,107, 42,212, 37, 26, -216,226,194,234, 63, 36,233,142, 29,115,183, 66, 3, 58, 18, 64,211, 43, 12,166, 65,246,230, 90,193, 58,152,174,219, 10, 7,174, - 89, 9,248,187,149, 63,236, 3, 92, 40, 69, 15,182,131,238,201, 11,241,113, 1,186,132, 56, 37, 91,154,142,180,228,102, 53,202, -202, 78,230,242,224, 84,242, 41, 26,248,206,195,113,214,228,112, 84, 47,188,181,165,118,119,248, 38,241, 9,181,131, 46,170, 84, -253,244, 28,241,191,164, 50, 75, 18,181,179, 48, 57,215, 36,223, 40, 41, 57,219,126, 4,160,237,236,118,219,134, 97, 40, 44,209, -178, 21, 44, 77,209, 92, 20, 69,175,251,254, 79,182,162,197,150, 22,133,227, 72,234, 57,164,228,120, 75, 92,108, 24, 6,228,194, - 8,162, 31,155,228,225, 39, 35, 18,255, 21,219, 97,170, 77,136,239,211,251, 21,113,111, 39, 27, 83, 99,173,252,183,125, 67, 83, -240,211, 54,107,242, 48,241, 64,183, 48,113,135,176, 7,233, 66, 15, 15, 24,232, 12, 4,122,254,164,131,166,211,137, 92,214, 44, - 26, 64,242,157,166,140, 98,217,214,213,255, 90,139, 44,117,101,137, 92,217,185,134,232,114, 17,196, 82, 36,151,135,187,199,231, -159,223, 83, 37, 48,227,116, 91, 65,228, 36,116,124,120,171, 73, 60,183,240, 88, 47, 92, 50, 52,227,101, 62, 1, 76,204, 85,231, - 70,234,160,182, 58,189,103,227, 95,157,236,153,246,107,136, 87,126,103, 25, 46,138,199,228, 67,113,183, 67,153,188,123, 17,246, -131,209,115, 10,195, 80,110,121,198, 46, 26,158,238,159,246,120,104,200, 28,125,116,187,111,161, 31,186, 24,152,187,208,255, 22, -147,220, 97, 94, 61,122, 28, 71,255,246, 81, 78,199,244, 49, 10,230, 5, 74,233,178, 14,226, 37, 50,107,166,124, 2, 51,187, 17, -249, 40,104,202, 19, 62, 99,205,101,137, 84,115, 86, 4, 43, 44,227,203,117,199,243,115, 37,114,191,224,145,253,102,127, 24, 15, - 88, 59,124,237, 69, 81, 54, 83, 30,103, 56,186,202,230, 95,139,251,108,210, 93,127,115, 80,111,132,117, 78,154,141,254,234,101, - 37,228, 37,253,202,220,126,125,196,182, 48, 93,123,239,105, 12,200,235,187,184,127, 29, 95,203, 31,136,187, 95,140,182, 38,238, -107,124, 71,195,213, 86, 89,195,161,243,215,177,125,222, 38,167, 43,236,166,247,205,178,114, 33, 49, 53,138,170, 78,139,110, 95, -179,141,119,170,243, 98,149, 93, 92,165, 57,161, 31,219, 29, 73, 77,114, 21,225,157,173,206,245,160, 13,240, 92,232,161,173,253, - 48,244, 27,110,115,142, 17,215,240,224,237,246,230,240,246, 99, 10, 16,246, 35,219,101, 83, 92, 34, 18, 59, 11, 44,234,238, 75, - 94, 46, 81,102,129,231,220,213,141, 16,203,136,202,196, 96,203, 13,222, 43,150, 83,146,192,251,217,166,150,185,123, 28,225,165, -223,196, 16,209,250,152,142,174, 84, 81, 33, 9, 89,237, 97,109,215,250, 40,231,236,184,174,236,114, 1,230,191,185, 83,249, 63, -204,190, 28,229, 83, 0,210,174,174,183, 65, 24, 6,198, 14, 33,208,105,147,214,255,255, 7,167,189,172, 85, 55, 10,133,100,103, - 59,176,174,172,104,218,222,248, 8, 4, 18,231,124,119, 82,146,255,226, 59,134,238,251,101,156,123,191,236,195, 92,250,213,176, - 93,126, 83,166,185,148,254, 38,205,182,186,134,138, 81,123,224, 9,231, 98,204, 84, 58,129, 94,208, 93,214,163, 2,222, 4,188, - 40,134, 6,207,141,105, 28,186, 14,168,167, 52,120, 4, 11,197, 91, 65, 49, 69,153, 81,178, 92,146,213, 97,225, 59,148, 74, 1, - 62,175,239,230, 25,110,209,145,135,238, 56,201,218, 95,134,197,105,153, 48,154, 44,115, 37,237,103, 43,205,110, 23,119,231,177, - 83,150, 59,235,104,214,149,195,228, 49, 93,187, 95, 35, 33,251, 89, 58,107,208,139, 64,100,219, 83,151,138,187, 67,150,196,204, - 45,194,143, 77,175,253,199,203, 56,156, 82, 6,195,105,218,230,169, 9, 72, 19,129,232,161,117, 65, 60, 22, 26,197,238, 73,210, - 82,158,234,218,215, 81,248,211, 4, 98, 46,106, 65,124, 25,169, 38, 49,200, 56, 78,107,162, 11,142,135,124, 30, 38,175,249,111, -146, 26, 69, 45,212,236, 37, 63,129,234,160,116, 29,115,238, 69,163, 44,138,154, 19, 43,231, 33,253, 98,109, 64,180,240,196,133, -134,124,197,100,249,185,171, 16,181,163,195,249,109,141,218,145,227, 32,219,240, 94,109,236,158,206, 27, 81,142, 43, 59,223,118, - 83,183,228,143,181, 50, 88,170, 56, 94, 78, 55, 92,120,253,194,232,155, 97,234,215,137, 42, 25, 9,254, 45,169,183,132,183,197, -226,105,246,181, 0,238,235,207,222, 0,247,185, 48,121,199,107,177,183,145,249,188,113,211, 66,192,239,123, 50,197,132, 41, 66, -196,156, 25,173, 56,187,153, 39, 21,170,126,197, 66, 77,165,146,248,124, 84,116,185, 42,113, 21,217,182, 15, 59,105, 74, 97, 27, - 10,174,160,252, 50, 7,219,171, 23, 41,222,107,197, 65,124, 25, 95,135, 42, 52, 21,176,189,137, 77, 27, 98, 11,189,251,188,223, -247,125, 15,122,239, 44,138,113, 9,225,137,136,175,100,213, 84,113,124, 73,141, 22, 65,104, 81,239, 78,205, 94, 3,249,210, 4, -226,172,166, 12, 0,185, 0, 40, 40,233,148, 59,158,253, 22,249, 30, 92, 34,103, 83,194, 57, 27,142,251, 4, 56, 17,199, 38, 75, - 73,187,167, 3,152, 11, 33,179,157, 82,179,251, 14,241, 54, 22,242, 79,200,158,239,107,160,199,248, 8,222, 67,155,182,204,223, - 16,255, 38, 16, 63, 5, 32,237,218,118,212,134,161,160,207,177,177, 67, 83, 88, 86,187,251,208,174,250, 59,171,254,255, 3, 18, -234, 31, 84, 60,236, 74, 1, 2,142,227,158,139, 3,161,161, 66,109, 17, 2,201, 14,160,216,115,198, 51, 99, 37,208, 40,226,255, -172, 18,133,163, 7, 93,172, 11,164, 53,154,123, 96,240,115, 50, 93,196, 30,114, 0, 14,121,136,209, 94,129,133,196,228, 98,219, - 36,142,153,241,253, 74,124, 85,249,224, 67, 53, 35,222,202,121,177, 92, 81, 27,145,123, 86,166, 45,234, 57,171, 13,155, 17, 78, -192,203,124,105, 6,164,153,178,168, 8,208, 16,208,138,252, 56, 95,109,169, 64,188, 92,126, 41,241, 16,200, 60, 18,111, 70, 81, - 11,102, 85, 47,129,105,177, 19,128,106,114, 39,231,169,106, 29, 21, 67,157,204, 57, 14, 8, 16,246,129, 50,223,108, 81,164,155, -139,130, 57, 95,109,140,252,174,181,207,139,151, 67,220, 7,231,248,105, 89, 66,189,199,195, 54,238,126, 52,219, 77,251,241,179, - 37,169, 77, 93, 52,124,190, 66, 7, 4,189,132,135, 54, 53,187,190,105,242,174,205,167, 8,178, 7,129,132,219,120,164,174,220, - 69, 76,137,211,117, 78,146, 58,123, 58, 66,140,144, 18, 43,165, 16,204,106,129,143, 43,248, 92,227,211,131,123,124,176,203, 26, - 42, 82,239, 78,247, 61,140,247,174, 10,220,178,255,216,211, 96,164,226,101, 53,110, 63,211, 66, 54, 19,185, 58,161,155,242,254, -101,249,181, 25,224,123,131,249,120,237,203,119,243,232,241, 17, 81, 28,192,152, 19,105,204,105,157,232,114,154, 70,216,159,176, -162,246,158,235,255,143,162,228, 31,170, 5, 70,225,140, 25, 8,177,182,117, 98,151, 5, 99, 27, 54,101, 85, 24, 85, 62, 78,220, -227, 72,173,195,232,224,171, 16, 28, 6,229,116,237,248, 50,220,154, 20,184,125, 34,103,114,103,204,219, 75, 23,158,117,176, 26, - 92,101,246, 18,172,216,146, 88, 10, 31,194,240,183, 50,160,117,197, 79,227,100,159, 7,173,210,183,212,159,196, 52,133,244, 85, -186, 72, 26, 42, 31, 17,131,238,168,212, 45,113,187,167, 74,167,154,119,244,106, 3, 73,155,215,215,111,111,111,223, 55,235,245, -241,120, 48,195,125, 82,179, 38,178, 84,227, 44,186,122,217,141, 99, 53,196,203, 12,125, 21,199,171, 18,227,171,233, 39,117,104, -173,202, 71, 46,101, 46, 72,221, 89, 83, 54, 80, 28,227,220,213,193,122, 82,141,154, 56, 8,143, 19,193,119,146,252, 92,100, 4, - 92, 44,118, 63,198, 63,148,117,244,247,105,197,123,124,169,158,175,231,228, 63,193,181,204, 55,183,192,163, 45,228,131,219,174, -253, 91,114,167,199, 47, 1, 72,187,154,158,182,129, 32,234, 89,123, 29,190, 76, 26, 69, 92,104, 46,237,161,234, 63, 40, 2,196, -111, 65,226, 88,137,191,192,143,236, 9,142,160, 30,170, 40, 45, 18, 10, 65,155,181,151,121, 51,187,182,137, 8, 4, 53,137,162, - 85,108, 89,222,221,217, 55,111,222,139,214,255,133,239, 42,200,180,180, 93,218,193,168, 26,163, 54, 13,166, 39, 72,164, 42,154, - 3, 33, 33,119, 75,252, 72, 16,240, 87, 94,114,161,102, 44,169,177, 42,211, 83,150, 91,213,222,254,176,250,180, 61,216, 61, 63, -191,184,185,185,158, 63, 62,146,110,171,155,224, 71, 7, 94,212,248, 58, 6,186,204, 96, 30,119,239, 42,182,237, 30,151, 90,121, - 50,118, 18,184, 7, 69,124, 74,186,160,150,208,122,147,201,175,109, 24, 80,150,245,178,165,165,152, 21,121,128, 86,104, 29, 93, -200,254, 65,107,121, 80, 84,131,249,135,245, 35, 36, 39,200, 64, 64,248, 83,124,151,158,195,241, 52, 28,212,100,141, 57, 24,140, -127,207,167, 51,183,184, 93,252,253, 53,255,115,231, 31,102,217,226,201,134,157,225,214,225,184, 58, 28,237, 14, 7,150,115, 99, - 46,102,169,188, 37,111, 48,168,229,102, 96,185,184,225,142, 19,131,248, 19, 99,189, 35,231,184,226,228,194, 21, 3,107, 32,184, - 83,105,193,244,147, 72, 74,182, 12,124, 45, 14,230, 0,186,194, 81,108,156, 67, 5,203,179,195,213, 87, 46,201,203,121,159, 69, - 19, 75, 94,181,216, 86,157,217, 73,138,152, 33, 51,212,213, 60,212, 39,212, 34,177, 21,124, 26,131,251,187,110,210,187, 71, 13, -152,190,245,189, 74,124, 69,154, 87,112,255, 50,254,122,191,248,215, 63,228,131,111, 54, 86,252,179,104, 93,110, 10,238,244, 82, -178, 88, 2,220,179, 21,216,141,208,219,179,166,214, 41, 57, 41,192, 94, 21,220, 87,150, 24,173, 23,240,137, 58, 68, 90,215,145, - 62,184,247,117, 97, 74, 89,165,187,115,147, 50,128,202,170, 88, 26, 33,110,100, 97,164, 13, 94,166, 28, 78,126,141, 13, 74, 13, - 4, 94, 97, 90,238, 36, 69, 53,144, 61, 40,135,227, 85,192,160, 44,162,187, 5,143,171,118,170,209,232,224,243,100,242,227,232, -232,231,213,229,247,227,111,167, 39,103,247,211, 7, 62,141,241,195, 57, 15,216,173,235,180, 15, 7,136, 53,170, 79, 94,226, 4, -172, 96, 88, 55, 16,239,241,236,118,241,107,173,152, 78, 5, 24, 16,204,187, 38,246,152,218, 61, 57, 16,190,203,134,175,235,197, -103,195,113,206, 82,178,150,169, 67,219,148,103,121, 30, 11,220,201, 42,197,209,145,177,198,214,161,121,203,171,232, 62,189,180, - 28,221,225, 78, 45,126,219,169,242,248, 87, 73,243, 81,112,231,215,179, 0,148, 93,205,142,211, 48, 16,246,216,177, 77,178,151, -237,238,133, 69, 21, 66, 28,120, 5, 88,222, 6,238,188, 22, 55,224, 6,207,129,216, 11, 55,144,184, 32,177,170, 40,205,255,143, -119,126,236, 54,116,219, 10,218, 42,138,148,168,137,237,153,111,190,153,111,148, 28,197,119, 56,245,139, 54, 7,145,215, 9,166, - 11,187, 77,196,156,157,157, 0, 27,151, 86,153,100, 1,180,184,130, 65, 36,114, 6, 35,133, 96,136,156,128, 82, 47, 10,192, 20, - 1,164,151,198, 60,127,241,242,245,155, 87, 31, 63,124,194,149, 24, 49,233,194,181, 86,105,165, 19,195, 20,144,137,214, 20,101, - 91,202, 50,157,201,144,143,155, 84,231, 15,177, 80,200,204, 67,130, 59,168,220,230,203,203,229,186, 94,203,164, 75,205,157, 45, - 32,202,232,209,199, 52,204,231,201, 80, 47,139,126,180,184,170,154,234,250,217,245,183, 95,223, 39,182,148,199, 23,203,146,202, - 42,212, 27, 19,162,240, 67,131, 67, 64, 71,172,110,166,225,247, 72, 36,253,107,249,243,166,249,113,171, 55,165, 29,148,213,103, -222,231,222, 23,206,231, 72,216, 41,212, 17,172, 91,116, 7,206, 69,173,213,142,116, 40,237,172,121,144,241,190, 6,199, 61, 48, -185,179, 62, 83,206,138, 20, 13, 62, 51,120,189,182, 87,101, 21,214,101,104, 59,232,135,208,247, 10,169,253,166,154,234, 90, 87, -245,212,212,161,105,160,109, 71, 28,222, 48,170,166,157,106,126,244, 36,222,113,131,252,127, 32, 17, 75,100,213, 16, 31, 65, 54, -113,152, 14,120,169,243,226,162,234, 74, 41,190,225,188, 32,225,162,147, 82, 31, 67,136, 61, 21,146, 56,255,199, 7,105,248, 24, -254,170,138, 60,185,124,186, 98,200, 30,227, 27, 42,145, 38, 23, 9, 73,247,237, 19,193, 61, 9,215,187, 72,243,143, 55,224,141, -231,240,124, 32,159,216, 43,128,220, 39,239, 41,121, 5, 56,224, 65, 17,115,157,201, 49, 87, 72,190, 13, 7,149,249,251, 52,127, -219, 42,179,117,177, 19, 46, 57,235,147,129, 35,240, 63, 83, 83,119,253, 14, 42,177, 25,174,201, 32,104,111,229, 49, 70, 59, 72, - 67,208, 33, 82,118, 97,244, 59, 16,103,183,202,100,159, 73,149,166, 6, 53, 45, 60,137,191, 74,167,163,180, 13, 18, 12,164,113, -130, 11,176, 38,115, 8,240,196,224,189, 71,123, 7, 93,149, 85, 97,207,160, 86,239,223,190,187,249,242,121,181,186,253, 83,110, -186,182, 30,168,169,107, 16,185, 95, 74,187,194, 4, 53,111, 40, 11, 48,172,209,102,232, 34,198,227, 63,218,156, 40, 75,128,135, -139,171,117,189, 1, 37,109, 19, 51, 1, 31,194,162, 56,239,250,142,129, 35, 88,100,152,198,245, 99,199,152, 32, 21,170, 48,167, -240,232,109,108, 34,211, 30,144,242,196,193,188, 2,185,135,233,167,161, 24,102, 18,142, 62,158,129,165,120,112,202,170,143, 29, -186, 19,128,181,107,219,105, 27, 8,162,107,175, 77, 76,160, 16, 90, 85,170, 68, 4, 31,129, 16,170,212,255,127,225, 1,161, 42, - 42,175, 60,244,162,146, 66, 11,137,119,215,246,238, 50,103,198, 38, 23, 97,139,135, 70,138, 18,105, 19, 95,103,207,158, 57,115, - 52,126,197, 63,147,108,173, 64, 67, 27, 21,169,253, 37, 16, 91,250,220, 18,246, 78,216, 83,109,226,198,156, 64,160, 95, 26,227, -234,182, 31, 46,211,120, 89,249, 53,161, 87,134,251, 68, 48,182, 67,191,188,248,252,133,134,190,205,102, 68,100,173, 53,166, 44, - 77, 85,250,186, 70, 23, 67,226,215,156,231,176,187,137,213,159,142, 92,240, 49,193,132,169, 0,145, 64,189,140, 7, 51, 33, 35, -194, 53,100,231, 44,189,105,104,138, 90,197, 1,243, 70,240, 43, 85, 84, 84, 78, 64, 74, 13,118,160,166, 71,211,189, 98,119,246, -253,134, 78,136,165, 40,209, 29,161, 68, 57,239,254, 54,246,222,151,115,229,154, 52, 84,193, 19,177, 57, 64, 8,166, 68, 78,137, -100, 52,129, 49, 50,112, 25, 7,180, 71, 51,183,201,104,113,146,104,102,133, 41, 18,118, 23, 59,244, 7, 58,223,230,248,211, 71, -138,248,187, 63,247,163,108, 84, 58,186, 14, 4,226,113, 81,133,148,179, 84, 13,162, 15,255, 0,167,192,184, 20,180, 18,240,227, - 68,162,171,195,210,212,129, 17, 28, 58, 62, 23,224,124, 76,170, 8, 79, 14,141,228,193,206,127, 46,104, 29,173, 80,119,229,166, -148,220, 7,147,222,116, 96,147,253,247,191, 31,127, 69, 88, 50,164,155,177,134, 56,202, 69,172, 77,247, 75, 28,118, 23,236,143, - 14,150,238,169, 79,162,161,141,240,109, 74,215,235,156,161,223,127, 34,163,103,167,231, 87,183,151,111,116, 38,172,185, 3, 52, -203, 53,216,209,225,238,209, 63,243, 80,228,133,173,237, 86, 24, 20, 26,161,104,188, 77, 55,129,120, 64,121,239, 28,150,185, 15, -110, 61,172, 94,124, 53,177, 7,220,165,154, 42,156,105,203, 44, 57,112, 62,241,117, 11,210,106,254,110, 89,101, 54, 5,247,149, -199,119, 37,171, 35,249, 20,255,108,218, 58, 5,146, 14,179,146, 22,205,249,187,206,248, 67, 38, 50, 75,244,178, 11, 97, 89, 28, -192,177,229,255,137,136, 54,168,178, 49,205, 38, 96,206, 70, 57,218, 76, 19,189,161, 15,226, 54,249,100,242, 97,122, 50,189,254, -122, 93,225, 89,117,198, 88,179, 44, 9,226,157,107, 92,141, 89, 95, 33, 28, 19, 92, 28,126,105, 38,130,112,222,208,108,135, 37, - 56,198, 98, 60,126, 55, 62,188,155,255, 88,152,146,136,191,165, 68, 53, 32, 23,199, 2,161, 60,119, 78,245, 98,126,173,137,224, -224, 90, 35,219,107,253, 53,138,125,114, 12,217, 82, 56,233, 40, 14,230,148, 98,144, 13, 27, 94, 26,245, 95, 58,163,246,121,114, -226,155,211,223,190,195,120, 22,128,179,107,219,109, 34, 6,162,246,172,179,155,180, 84,130,114,121, 64, 60,151,127, 71, 60,240, - 35,252, 0, 74,121, 67,173, 16,106,213, 36,221,100, 55,182,135, 51, 30, 59,187,185,148, 2,175,145,236,100,215,227, 51, 51,231, - 28,199,238,239,140,185, 39,103, 25,250,142,108,179,205, 73, 62,199,142,104,227,212,212, 86,132, 20,180, 63, 36,184,131, 46, 43, -120, 35,221,150, 38, 97,151, 86, 74, 57, 19, 46, 96,111,148, 27,136,222, 77,207,231,243,111,139,251, 59,140,194,132, 88,162,179, -122,214,245,155,144,101,141,157,188,145,139,161, 44,237, 28,150, 59,249, 51,210,117, 33,251,242,197,171,135,246,158, 51, 95, 70, -122,121,134,146,251, 33,178, 26,120,115,248, 14,239, 20, 96,157,171, 0, 74,122, 81,178,152,179, 19, 99,125, 88,245, 75, 60, 20, - 37, 81,184, 49,168,154,195, 67,216,172, 66,255, 51,172, 86,110,219, 91,158,157, 77,102, 84,219, 64,242,207,233,108,106,107, 27, - 11,112,180,237, 58,145, 55,201,104, 61,149,168,199,251, 18,143,227,108,226, 2,197,169,171,154,137,186,212, 43, 35,234, 79,192, -182,232,186,237,135,247,111, 62, 94, 93,125,250,252, 5,184,139, 87, 28,196,244, 24,177,133,240, 56, 78, 89, 32,182,226,200,244, -253,196,162, 65, 96, 84,235,248,109, 81,110, 2,195, 46,160,181, 56, 53,121,235,229,254,167,232, 36, 21, 8,187,201, 17, 80,231, -154,154,209,180,230,243, 0, 82,202, 40,101, 40, 68, 68,244,203,118,185,235,114, 57,221, 6,149, 85,183,253, 72,197, 86, 67,114, -160,167,149,202,199,110,241, 7,254,164,160,194, 94, 32,211,115,172,206,215, 4,238,116,168, 80,169, 79,226,201,177,227,190, 1, -224, 94,220,207,135, 91, 23,160,128, 14,135, 70,148, 84,202,109,158,158,227, 54,131,220, 69,156,233, 44,115, 68,137,156,212, 99, - 83,181, 88,233,151,202, 64,169,172, 89,163,147,173, 61, 53,146, 77, 89, 35, 62, 81, 8,154,177,160,234, 6, 71,199, 30,184, 15, -174, 71,117, 53,114, 33, 99,212,232, 86,144,189, 24,154, 21,248,181,152, 51, 42,158, 37, 0, 23, 15, 90,177,199,105, 87,144,120, -239,116,121,187,228, 45,171, 71, 77,168, 88,230, 83, 98,136,233,192, 64, 34,216, 77,172,186,117,251,253,122,142, 2, 14,225, 43, -246, 93,239, 83, 27, 25,147, 16, 36,157,226, 69,115,254,216,181, 90, 11, 34,188,157, 10,118,114,175,111,117,121,241,246,110,241, -235,242,245,187,155,219, 31, 24, 80,215,117,191,101, 36, 19, 47,213, 9,208, 8, 49, 31, 80, 56,245,253, 6,115, 97,250, 34,153, - 14,106,182, 2,196, 81,188,208,206,246,198,102,204,241,252, 79, 65,125,140,227, 35,242,136, 21,209,194,254, 36, 59, 13, 31,139, -130, 77,103,255,197,121,252, 91, 0,202,174, 96, 55,106, 24,136,218, 78,156, 52,169,118,123, 64,173,144,168,170,126, 1, 7, 46, - 32, 16,159, 2, 71, 36, 14,253, 39, 40,240, 55,156,170, 94,138, 84,137, 74, 21, 72, 72, 75,183,180,155, 52,113,236,233,204,216, -241,110,183,155, 72,236, 94,179,145,157,216,111,222,188,121,179, 30, 34,239,114,224,199, 50,178,130, 85,227, 99,223,218,192,186, -136,208, 69,154,167, 34,205,100, 22,248, 4, 80, 5, 68, 11,124, 9, 9, 62, 95, 98,166, 66, 84,174, 90,184, 10,115, 34,194, 55, - 70,212, 96,175,244,116,176,235, 64,104,220,108,215,255,174, 16, 89, 16,172,246,166, 79,127,207, 46, 17,229, 58, 99,216, 22,226, - 2, 21,146,209,152, 73, 9, 92,200,172,116,162, 96,101,192,170,143,184,156, 54, 96, 66,120, 83, 43, 95,122,241,202, 54,125, 9, -227, 96,119,103,119,167,152,254,252,115,177,238,116,115,206,199, 18,199,193,136,231,196,137, 3, 91,190,110,154,219, 91, 76, 3, -165,157,219,197,175,118, 94,165, 93,155,118,197,148,124, 47, 79,240, 33, 88,205, 55, 0, 99, 73, 91, 82,148, 15, 74, 28, 32,210, - 99, 0, 22,181, 9, 74,101,174, 85,150, 39, 5,130,123,161,114, 77, 96, 75,158,121, 39,155, 6,200,195, 76, 5, 67,120,253,252, -197,217,143,243,139,203,217,251,119,111, 79, 79,206,190,159,156,150,121, 65,145, 39,129, 73,166, 29,137, 91,228,133, 57,220,127, -182,168,171,217,213,245,209,199, 15, 72,127, 62,125, 57,206,182, 20,198, 25, 36, 42, 9,105, 86,142,140,146,214,222,225,128, 26, -154, 23, 6, 46,220, 43, 9,185,224,241, 37,105,220, 91,222, 19, 10, 62,122,210,138,163, 13,217,116, 53,139,239,131,136,217, 95, -174,236, 67,163,228, 38,209,121,116,245, 3,216, 71,209, 65,110, 34,230,201,128, 75, 13,150,249,165, 24,183,178,149,186,172, 77, -229,135,143,119,107,104, 65,226,242,209,173, 53,113, 82, 29,116, 32,150, 34,125,111,136, 85, 15,201, 14,162,103,106, 96,227,225, -242, 82, 10,128, 81,113, 92,173, 56,208,195, 31, 44,247,249, 28, 46,142,201,214,100, 94,255, 93,233, 60, 88,191, 1,107,100, 16, - 81, 62,242, 65, 37, 98,103,161,140,158,125,213,187,161, 98, 53, 53,229,119,237, 13, 40,178,231,230,155,144,221,243,184, 52,176, -120, 17,128,222,123, 37,131, 99,178,135,117,230,235,224, 27, 0,101,108,110, 98, 35, 93,202, 81,129,130, 1, 65, 55, 62, 93,100, - 51,166, 37, 7, 48, 85, 66, 59,204,207,145,177,183,141,161, 83,107, 12, 31,148, 67,185,164,175,245, 39,100, 14, 99,210,195,198, -104,146,127,147,172,204,183,203,114, 27,175,120,249,234,205,254,193,193,183,175,159, 17,248,233,204,156,190, 1,199,231,193,192, -238, 57,158, 37,203, 45,114, 29,202,189,198,136, 17,200,176, 29,218,254, 79,111,196, 90,169, 99,156,118, 7,149,155,153, 16, 44, - 11, 54, 62,192,208, 74,115, 3, 8, 14,143, 12, 99,227,159,123, 1, 88,187,150,221, 38, 98, 40,234,235,121,230, 81, 2,130,150, - 6,149, 37,252, 5, 44,128, 21, 95,133, 34,190, 0,149, 63, 64,130,111,224,177, 68,176,101,133, 64,165, 84,180,145,186, 32,148, -180,204, 35,227,177,205,189,215, 54, 9,105, 42, 90,137, 89,101, 17,201, 51,158,251, 56, 62,247, 28, 77,124,174,226,238,197, 35, -139, 72,202,249,226, 32, 88,221,252, 57, 46, 23,132, 62, 53,190, 32,209,214,118,230,132, 71,100, 91,213, 68, 56, 32, 14,141, 85, -148,200, 36,141,179,110,220, 93,239, 92, 51,160, 39,234,232, 87, 91, 74,146, 51, 37, 62, 41, 49,189,233, 85,136,170, 44,146, 52, -163,102, 46,204,120,178,199,159, 57,106,153, 53, 35, 17, 35, 48, 15,239, 24, 51,175, 96,145,242,246,240,214,238,225,142,147, 96, - 58,217,185,176, 62,242, 60,213, 5,182, 86, 77, 42, 83,101,137,125, 27,244, 46, 31, 87, 39, 62,234, 53,162,131, 75, 95, 14,119, -121, 68, 36, 23, 21,170, 22,147, 23, 90, 50, 90, 89, 70,241,204,185, 89, 39,209,129,104,162,167, 99,248, 94,139,182,137,116,127, -144, 15,146,172,151,247,123,157, 84,240,192,223, 77,124,173,230, 89,167,208,164, 6,149, 34, 67,236,172,233,230, 19,247,225, 36, -142,123, 22,217, 96,212,147,217, 54, 10, 83, 5, 60,174, 12,183,134,213, 76,127, 59,216,223, 88,191,105, 69,231,213,155,215, 69, -101,238, 63,120,248,225,227,222,143, 41,118,170, 72, 25,114,238,178, 2, 89, 92,189, 50,120, 52, 26,237,238,124,125,242,116,251, -206,221,123, 8, 51,159, 61,127,129,248,147,232,108,214,108,102,105, 92,211, 6, 67,198,105, 77,235, 3,245, 94,109,161, 52,122, -173,155, 28,157,152, 36,202,112,183,165,213,122, 30, 88, 38, 76,255,255,250,146,136, 9, 76,130, 9, 68,188, 34,208,234,197,162, - 90,252,135,139,244,145,105,175,104, 10,121, 74, 95, 24,184,239, 21,150,215, 78,148, 87,186,134,127, 65,170,146,139, 59,120, 10, - 46,136,160, 72, 95,168, 86, 57,155,220, 60, 25, 59,165,166,147, 18,231,231, 31,212, 99,192,156,221,186, 0,150,124,109,167, 88, -126, 59, 15, 56, 95, 37,104,199,201,202, 99,167,213, 79,123,246, 35,132, 99, 44,248, 42,207,119,137, 59, 86,169,138,135, 84,142, - 88,159,139,219,131,237,219,103, 4,229,206,188,184,203, 40,248, 88, 3, 29, 47,231,208,158, 40, 61,112,189,128,107,108,180,108, - 94, 93,184,164, 43,241, 78,109,224, 68, 15,224,116, 6, 49,171,110,120, 53,214,199, 96, 82,131,162,159, 88,229, 49,138, 26, 69, - 76, 12,123,154,176,201, 42,219,182,215,215, 54,199,147,125, 55,117,195, 67,164,112, 85,218,178,142, 6,159, 27,155, 0,254,211, -100,121,222, 31,109, 63,126,247,246,253,198,203,205,162, 56,198,229,111,244,183, 62, 31,124,194,213,140, 66,124,213,224,142, 54, -172,162,207,211,110, 61, 43,109, 72,111, 10,212, 16,172, 60, 45, 75, 85, 83,158, 71, 37, 11, 23,128,236, 43,200,197, 28,178,154, -150,213,139,116,252,130, 96,123, 41, 90,108,107, 46,156, 79,191, 5, 96,237,218,117,155, 8,162,232,188, 60,235, 93, 39,107,227, - 6, 81,162,196, 5, 37, 66,162, 69,249,203, 84, 72,252, 0, 82,148,146,130, 10, 55, 52, 72, 20, 40, 36, 18, 5, 18, 85,112, 66, -192, 89,239,107,134,251,152,125, 57,177, 0, 9, 55,182,247, 57,218,157,189,123,238, 61,231,204, 12,248, 85,121, 55,184, 55,118, - 99,221,245,164,224, 84,224,202,140,198,164, 15,111,115, 36, 1, 73,198,218,235,194,229, 21, 32, 30, 81, 17,109, 37, 84,240,150, -226,115,192,196,163,227,123,130, 70, 52,200,112,205,163,201,195,212,166,107,159,193,246,170,113, 53, 99, 60, 36, 75, 3,201, 95, -113,102, 59,248, 66,193,165,137, 54,197,218,179,246,208,133, 81, 10, 90,136, 1, 75,174,127,173,168,247, 97, 73, 61, 40, 50,141, - 12, 12, 79,224, 96, 85, 94,230,176, 51, 82, 52, 94, 22,228, 96,110,228,249,226, 42,251,161, 24,191,176, 63,174,165,113,189, 15, -179,158, 82,225, 2,254, 71,214,226, 21, 23,245,133,251,118, 25,175,226,137,217,139, 98,184, 8, 22,186,135, 48,117, 13,249,187, -118,216, 96, 72, 89,116, 52, 50,147, 68,237, 39, 40, 85, 76,172, 49, 8, 92, 84, 94,184,178,148,176,242,234, 58,163,114, 55, 0, - 6, 88, 40, 55,104,244, 81,101,197,197, 44,249, 51,203,159, 63,125,246,100,113,240,254,195,199, 7,179,249,226,112,241,230,237, -242,240,241, 65,154, 78, 35, 27,157, 95,124,142,198,163, 56, 18,147,177,129, 12,128, 59,236,209,139, 35, 72,238, 95,159,156,158, -157,125, 90, 46,223,157,127,249,234,157,134, 3, 42, 28,126, 0, 27,111,180,178, 86,206, 98, 51, 77,245,222, 68,199, 54, 20,123, - 43, 36, 85, 93, 78,205, 33, 54, 11,111, 64,107, 17,104, 83,200,173, 33, 10, 70,218, 42, 84, 85,214, 67, 78,233,127,206,217, 52, - 79,230, 57,164,213, 28,188, 6, 97,209,239,148, 90,250,191,242,144,223, 75, 91,213, 4,216, 9,254,132,234,147,222,114,250, 48, -236, 69, 51,148, 83,189,198,200, 63,157,234, 14, 59,218,213, 7,136, 13, 17,157, 67,144,165,229,141,177,100,199, 28, 44, 93,232, -150,161,145,193, 97,130,192,144,170,224,122,240,138, 82,125,192,166, 68, 79,251, 40,216, 91,170, 24,182, 83, 17,146,244, 17, 50, -168,100,232, 55, 86,219,137,113,229, 17, 46, 4,211,102,166,175,159, 33,108,212,174, 98, 42, 20,119,160,179,199,163, 68, 52,146, - 86,228, 70,105, 27,239,130,226,153,199,197, 40,202, 12,189,170, 21,133,121,250,113,115,187,194,208,134,193,156,217, 58, 38,216, -144,108,194,253, 49, 8, 41,136, 39,155, 77,182, 47,211, 87,199, 47, 81,109,226, 69, 81,228,223,111, 46,107,114,188, 99, 0, 65, -149,179,167,244,168,158,198,179,219,124,221,225,230, 0, 43,195, 19, 95, 65, 14,135, 23,192,121, 41,123,148,134,188,239,237,188, - 77,117,195, 97,198, 72,170,215,187, 4, 79, 98, 40,244,242,216,127,252,150,140, 10,187, 22, 4, 39,223,247,135, 11,195, 14,178, -127,252,252, 22,128,178,171,233,109, 26, 8,162,158, 93,219,217,117,210,164, 52,144, 10, 21,161,246, 23, 0, 23, 14,156,250, 55, -144, 56,240, 87, 11, 8, 9,193, 1, 9,144, 80, 47, 21,135,138, 38,180, 81,210, 88,113,252,205,204,236, 58,118, 29,140, 32,202, - 41,167,120, 61,243,102,230,205,155,217, 63,227, 59,212,205,163,166,125,212,242, 25,201, 27, 92, 4,183,232,140,102, 70, 9,141, - 39,151,149,137, 89, 12,209, 96,110,173, 68,215,229,131, 2,211,195,224, 76, 53, 55,169, 69,225, 12,213,254,125, 53, 94, 36,203, -146, 8, 22,193, 83, 7, 64,157, 16,126, 25, 85,135,175,192, 40,189, 73, 56,234,154,235,229, 44,184,111,217, 67, 50,150,145, 30, -113,167,180,104,184, 6,201,119,204,126, 26, 3,244, 86,205,195, 44, 42, 62,132,116,109,184, 50, 74, 46,229, 41,194, 90, 9, 3, -189,135, 63, 12,245,232,228,240,248,250,246,166,146,211,147,211, 96,210,125,114,112,252,117,113,113, 33,102,208, 47,134,190,246, -129,164,254,202,119,181,239,154,204,168,231,121, 1,113,131,174,177, 96,223,245, 2, 61,250, 53, 11,147, 76, 32,112, 23, 25,228, -169,243,112, 50,121,253,234,101, 63, 80,211,233,205,106,181,198, 83,113,153,112, 71,252,165, 51,112,100, 76, 20, 77,217,147,242, -217,147,167, 31, 62,126, 66,208, 61,125,241,252,203,183,207,247,134, 65,154, 71,143,142, 14,227,245, 98,185,188,238, 41, 23,237, -100, 29,151, 81,148, 77,231,225,219,179,247,103,111,222,205, 87,235,171,217,252,199,229, 21,190, 38, 12, 25,113, 86, 68,148, 15, -229, 73,198, 29, 86, 12, 65, 64,114,206, 77, 92,226, 55, 78,208,172, 49,234, 22,190, 43,194, 37,230,125,144,111,111, 13,172, 86, -114, 24,229,232,238,254, 25,154, 26,183, 78,219,226,135, 1,118, 86, 14,116, 81,135, 70, 33,211,101,166,152,188, 67,231,232,108, - 59, 71,106,201, 19,219,221,152,127, 67,124,147, 20,187,194, 43,203,114,103,236,136,104,129,131, 96,188, 78, 67,177, 19,201, 96, -167,105, 6, 14,252, 5, 20,238, 14,169,218,214, 3,128,227,116, 14,199, 10, 81, 75,119,156,166,140,103, 27,255, 42,224,110, 6, - 91,209, 8, 50,150,118,135,173,236,204, 76,101,212,112, 79, 69, 36,102, 63,194,138,219,132,213,188, 49,143, 42,133, 45,111, 37, -240, 4,133,161,104,152,123, 49,125, 87,150,201, 26,121, 11, 57, 29,201,101, 28,225, 75,191,175,250,147,189, 7,105,158, 62, 30, - 31, 97, 5, 31,103, 27, 81, 63, 44,145,171,148,228,160,155,199, 49,223, 2,153, 36, 84,175,243,128, 53, 33, 1,207,175, 66, 94, - 13,201,151, 30,186, 10, 21,238,146, 23,155, 80,155, 66, 41,125,126,254,253,231,244, 18, 83, 1,140, 10,155, 56,226,101, 38,180, -166,195, 44,220,176, 27, 10,192, 25,232, 97, 24,221,194, 93,124, 47, 44,245, 14, 10,221, 89, 74,146, 71, 3, 84,239, 17,154,113, -180,171,111,196,232, 64,195,248,172,220, 5,209,156, 84,239, 54, 54,237, 13,210, 34,105, 25,137, 22, 65,198,238, 96,144, 29,255, -186,246, 52, 87,198,255,247,249, 45, 0,101, 87,215,218, 68, 16, 69,187,179,179,217,205,102,155,208, 98,240, 65, 33, 66, 41,133, - 10, 86, 5,233, 75,133, 62,180,254, 95,127, 68,245, 65,223, 90,164, 20,124, 82,168, 69,100,211, 52,219,253,156, 25,239,199,204, -102,219,198,168,144, 64,178, 33,201,102,103,230,204,185,247,158,115,179, 10,223,109, 9,188, 53,175,117,106,170,235,241, 8,198, - 64,216,238, 95,178,239,193,150,133,151,210,184, 66, 68, 71,246,239,181, 6,119,182,191, 41, 91,143,183, 14, 8,174,112,110, 70, - 27,227,248,209,143,252,138,190,147,160,157, 25, 60, 35, 60,142,190,118, 61, 36,236, 3, 2, 24,237,236, 76,118,166,194,184,194, - 78,192, 93,198,224,224,206,147,157,217,237, 53, 41,100,216,188,209,170,116, 93,160,224,105,170,253,182, 50, 47, 49, 25, 63, 75, -179,212,167, 29, 28,126, 84, 86,222,166, 55,191,140, 37, 80, 72,222, 71,253, 97, 79,246,222, 95,158,124, 51,211, 72, 96,122,189, -170,176,229, 75,153,155, 10,211, 32, 88,212,143,251, 50, 10, 2, 32,239, 40,224,241, 33, 60, 84,123,187,219, 71,135, 7, 23, 95, -207,134,137, 28, 64, 96, 22,194,254,177, 86,212,243,217, 44,125,249,106,247,248,240,237, 32,238,165,211,159,192, 65, 66, 84, 16, -145,149, 21,251,116,248, 18,199,167,217,127,179,119,126,241,165,170,179,215, 47,158, 95, 94,125,207,139,108,123,107,114,242,225, -227,187,163,227, 79,159, 79,235, 74, 81, 28,141,215, 50,144,178,168,235,178,105,146,126, 72, 13, 62,208,159,218,163, 53, 0,180, - 38, 64,203,160, 24, 0,199,136,112,117,194,108, 47, 10, 93, 86,168, 46,214,220,246, 12, 22, 55, 58,147, 26, 92,107,198,174, 44, -198,247,123, 78, 84,211, 81, 1,119,153,187,177, 13,159,240,245,200,143,181,227,194,171,163,214, 21,224,190, 20,175,255, 61, 12, - 30, 39,143, 53,101,111,239,157,255,159,178,164,162,147,141, 36,113, 83,203,139, 23, 68, 7, 78,166,192,196, 14, 28,148, 15,125, - 45,110, 35, 49, 79, 71,147,107,236,119,134,207,162, 32,230,100,206,195,179,165,126, 47,198, 21,132,169, 90,228,137,101,177,197, -146,127, 59, 92,120, 44,238,142,133,203,154, 46,134,198,243, 90, 41,164,109,225,225,132, 94, 11, 87, 32, 51,119,228,109,214, 37, - 34, 72, 33,195,144,205,138, 21,156,102,146, 53,208,198, 53,113, 18,162, 21, 77,178,244,217,111,223,194,236,158,174, 15,208,234, -121,113, 3, 48,158,229,243,188, 41,124,118, 29, 97, 56, 79,238, 68,106,104, 7, 40, 82,107, 76,195,210, 13,209, 94,145, 87,155, -124,235,172,106,177,103,189,145,108, 82,139, 39,197, 83,131,116,245,126, 81,149, 64, 1, 1, 4,146,112,125, 58, 79,105,159,224, -207, 65, 8,129,217,173,240,110,202, 58, 55,174,209,152, 97,191,121,199,159, 10, 48, 10,113, 3, 23,180, 59,219,179,215,233,181, -101, 69,225,198,161, 28, 35, 59,191, 68,138, 88,100, 0, 73,152,148,170,254, 27,171,192, 13, 71, 27,117, 23,223, 1, 73,171,142, -217,117, 88, 42,160,103,245,218,255, 59, 90,127, 11,192,218,245,252, 38, 17, 68,225,153,217, 89, 24, 22,136, 16,240,212, 30,236, -201,214,154, 52, 53, 30, 76, 60,120,178, 73,227,127,106,226,213,255, 65,189, 52,106, 82,237,165, 52,254,234,193, 72, 67,128, 89, - 22,102,240,125,111,102, 87, 32, 52,209,196, 61,193,134,100,119,225,189,239,253,250,190,199, 22,124,175,254,194, 57,217, 4,247, - 64,123,135,237,184, 5,207, 69,249,225, 51,149, 41,143, 90, 67,113,178,239,202,254,145, 14,109, 15, 17,147,133, 50,127,240,209, - 30, 9,116,121,218, 14, 8, 67,107, 94,221,205,122,163,197,212, 82, 78, 36, 19,199, 59, 26,209,213, 89,186,136,233, 28,223, 97, - 11,113, 11, 99,108, 87, 49,113,183, 82, 48, 65, 51, 69,184, 72,248,219, 54,119,102, 46,167,240,159,207,115,216,159, 96, 30,239, - 82, 69,139, 68, 84,212,135,187, 7,195,241, 80, 5, 61, 63,207,205,232, 10, 35, 59, 12, 9,137,243,174,223,234,107,173,237,124, - 22, 26,205,130,139, 82, 50,191,247,211,193, 72, 22,153, 50,161,185,239, 89, 77, 71,112,105,180, 38,120,133, 20, 15,226, 60, 84, - 10, 97,117, 26,153,215,195,131,195,231, 39, 39, 31,206,222,218,124, 74,209, 6,179, 86,143,103,255,113,253,243,205,187,179,193, -213,215, 71, 71, 71, 47, 78, 79,123,189,222,151,171,239,195,209, 84,107,209,206,210, 86, 38, 27,117,130,224,252,241,241,241,224, -242,242,215,240,102,239,222,158,243,233,249,231,193,211, 39,207, 94,190,122,189,191,255,160,223,233,126, 60,191,208,184, 30,221, - 90, 32, 89,192,193,160, 25, 75, 37,197,146,180, 38, 26, 70,180,140,106,102,178,109, 18, 10, 45,244,188, 99, 11,122, 2,249,177, - 73,233, 99,130,253, 22, 95,168,165,210, 54,183, 51, 36, 75,130,203,229,114,224,183,190,132,208,175, 80, 0,214,137, 70,248, 97, -154, 26, 41, 9, 87,160,243,127,237, 74,254,199, 35, 21, 41, 85,229,182,152, 56,112,224,208,183, 51,144,182, 46,178,180, 81, 79, - 27, 5,248,206, 91,146,250,174,233,206, 86,180,130,213, 38,153,242,173, 42,145, 52,106, 34,110, 91, 81,144,202,218, 4, 77,222, - 5,239, 44,162,128, 89, 16,196, 19,118, 84,190,176, 2,238,190, 34,164, 9, 30, 54,240,216,109,227,222, 34,117, 32,114,246,162, -140, 16,157, 15,147, 24, 15,214, 83,148,232,203, 42,117,143,232, 94,158, 20, 1,217,229,159,146, 55, 42,152, 96,164,137,136,162, -238,168, 95, 73,194, 11,208,109,165, 8,196,246, 36,168,244,248, 36,123, 46, 82,187, 74,242, 18,217,241,200,244, 57, 6, 4,117, -171,140, 53, 0, 86,105,212,120,245, 8,153,155,194, 91, 21,198,188,187,189, 29, 91,216,176,102,149, 82,186, 57,156,126, 30,123, - 42,192,229, 69,112,249, 0, 1,178,218,107, 3, 22,150,237, 52, 59, 84, 7,144,131,119,178, 78,173,222, 24, 79,110, 8,217,181, -170,221,223, 57,184,248,246,137,105,145, 14,241,130, 37,176, 16,207, 96, 32,230,185,143, 27,103, 33, 45,211,228, 75, 44,171,253, - 3, 27,236,239, 91,231,150, 82,115,192,158,201, 21,137, 89,187,222,170, 68,235,160,168,185,194,111, 41,106,215,138, 88,136, 34, - 87,106,223,141, 18, 47,184, 29,129,187,252, 11, 97,224,214,227,183, 0,156, 93, 77,111,211, 64, 16,245,238,198,235,143,124,148, - 38,148, 34, 84,181, 10, 20,232, 1,129, 56,194,129, 3, 7, 36,110, 72, 92,248,183, 92,144,184, 21, 85, 8, 33,160,173, 20,160, -106, 32,164,169, 19,215,137, 19,219,203,204,236,174,147, 64, 11,136, 28, 44,203,145,214,178,189,158,157,121,243,222,243,159,226, - 59,255, 69, 7,129,182, 65,186,111, 78,134, 95,180,149, 44,128,183, 40, 39,118, 56,205, 99,122,192,184, 21,101,165,104, 85,162, - 44,115, 76,154,205, 77,225,130, 16, 31, 20,110, 18, 25,172,178, 38,131,203,254,234,151,248,136, 78,132, 17, 30, 89,219,218, 18, -130, 50,118, 19, 83,148,102,227, 18, 13,214, 36, 36,218, 95,136,104,185, 4,248,193, 92,152, 76, 39, 48,179, 96, 9,157,102,233, -205,245,237,211,100,200, 75,173, 52,211, 70,119, 69, 63, 30, 32,105,150,116,181, 48,210,230,218, 86,146,158, 9,139,223,192,165, - 38,179,132, 86,114,117,255,250,189, 31, 81, 15, 1, 41, 37,122,197,176, 39, 71,205, 48,108, 84,189,208,171,212, 3,191,185,226, - 54,235,114,181,238, 55,194, 10,228,197,161,143,193, 86,122, 21, 95,186,180,163,164, 40,238,222,185,229, 48,236, 12, 31, 28,116, - 28,238,109, 92,221,236,124,253,166,208,155,198,133,153, 31,141,162,247, 31,222, 29,118,246,183,219, 91, 79,159, 60,222,184,182, -222, 61,238,246, 6,195, 56, 70, 95,176,254,233,100,231,246,206, 73, 52,250,124,116,124,169,177,114,163,221,126,249,234,245,163, -135, 15, 62,238,127,218,221,123,251,226,249,179,221, 55,123,221,238,247, 60,119,170,161,159,166, 25,172, 56,200, 88,163,133, 17, -187, 28, 57, 30, 80, 28, 74, 90, 22, 6,142,112,145, 52, 6,183,208, 21,172, 42, 69, 45,228, 1,172, 34,146,249, 30,148,101,220, -149, 12,146, 7, 40,109,137, 45,156,149,241,189,180, 75, 45,185,139, 48,197, 61,215,203,150,114, 82,252,171, 21, 94,129,248, 56, - 83, 89, 32,130,140,212, 61,252, 98,115,199,255,142,239,210,145, 57,121, 17,177,191,232, 96, 85, 5,129, 90, 87, 17, 36, 74, 45, - 31,172, 77,136,184,117, 62,122,163,133,224, 11, 80,143,161,216,194,229,144,183, 86, 97,223, 70, 70,224,123,161,173, 71, 23, 64, -157,242,213, 45, 10, 43, 14,208,227,228,197,108,185,121,192,184,205,220,155, 97,107, 50, 27, 83,187, 18,137,167,186, 81, 43,156, -115, 24,162,176,173,122, 53,122, 32,132, 21, 18,120, 86,168, 50,149,228,108, 89,146,162,172,114,126, 33,178,219,224,174, 12, 50, - 99, 19,252,185,130, 73,147, 84, 42, 90,198,129,108, 89,193,140,213,140, 48, 34,112,164, 91, 34, 98,163, 45,165, 40,196, 59, 70, -173, 88, 90, 23, 96,246, 6,181, 40, 39,165, 5,142, 64,251,162, 92, 12,224,156,113, 26,235,182, 97,174, 45,192,176,241,163,109, - 9,224, 38,144,154,177, 48,114,117, 8,131,150,162,168,244,119,219,199,211, 4,130, 59,214,156,156, 87,101, 45, 74, 6,173,218, -218,232, 44, 58,137,251,227, 52,161,210,159, 42, 2,139,191, 83,211,206,208, 0,244, 60, 78,103,105,177,156,191, 59,115, 39, 37, -174,173,158, 45, 65,143,145,249,146, 57, 0,195, 16,168,226,148, 33,142,196, 46, 83,173,200,179,146, 99,227,118, 85,204,215, 11, -246, 59, 93,103,185,246,117,156, 5,219,209,127, 87,125, 95,244,251, 41, 0,105,215,210,218, 68, 20,133,239,185,115,103, 38,233, -164,212, 39, 86,171,105, 65, 20, 20, 92, 84, 93, 72,161, 46, 4,221, 21, 87,118,231, 66, 87,138,255, 79,112,105,193,250,162,106, - 16,138, 40, 22, 31,168, 24, 42,109,226, 76,102, 50,147,153,235, 61,231,220,153, 76,165, 86,193, 36,171, 36, 12, 19,114,239,121, -124,223,119,190,251,247,248, 62,254,205,150,240, 1,158, 77,163,126, 13, 2,167, 53, 34,105, 8,193,241, 22,247,112,172, 29, 13, -128, 29,187,146, 4,119,240,136, 62,171,166,136,124,151,214,182,194, 83,110,211,109, 76,184,254,164, 63,249,125,240, 99,148, 15, - 25, 42,203,117, 94,254,179,118,224,128, 98, 62,175, 3, 33, 11, 46, 61, 44,208, 46,237, 75,240,188,116,195,245,230,219,243, 27, -155,239,205,146,234, 69,219,130, 89, 30, 90,187,142,117,126, 87, 84, 97, 59, 84,116, 32,191,111,154, 59, 64,142,151, 85, 99,164, -147,145,192,129,178, 23,245,135, 58,163,154, 6,190, 54,186,173, 64, 29, 48, 29, 96,160,130,134,218, 63,165, 38,154,138,189, 53, - 52,202, 29,228, 40, 67, 22, 34, 73, 81,125,130, 66,233, 28,178, 20, 22, 46, 45, 62, 95,235,156, 57,117,110,237,229,155,163, 71, -102,110,223,188,117,255,193, 74,148,232, 33,193,223, 73,162,227,184,248,242,109,243,241,211,206,139, 87,235,199,166,143, 47, 45, - 93,159,157,153,253,248,185,187,245, 51, 52, 57,230,100,251, 68,171,233,191,125,247,193,116,175, 23,206, 95,124,248,232,201, 92, -123,206,245, 26, 43,171,207, 60,207,191,119,231,238,229,133,197,229, 27,203, 87,175, 92,235,188, 94,223,248,212,141,145,230,214, -131, 97, 17, 14, 70,253, 56, 15,163,172, 23,101,113,172,163,129, 48,137,143,134,189, 11,133,234, 29,129,245,187, 98,249,133, 76, - 83,244,146, 76,135,105,191,159, 48,231,145, 23,192,241,221,244, 37,166, 37,226, 24, 36,172,181, 38,238, 69, 94,120,158,244, 1, - 83, 46,174, 88, 76,138,212,162,142,172,105, 12,236,129,113,239,234, 22, 0,255,224, 97, 96, 26, 36, 95,161,208,180,248,131,140, - 77,218,146,106,159,137,215,229,119, 42, 78,200,238, 43, 71, 40,189,115,248, 80,153,244,231,248,156, 6,156, 26, 92,169, 25,171, -169, 5,119,102,162, 78, 79,159, 13,147,144, 84,201,240,187,214,102,207,190, 69, 11, 22, 46,217,155, 73, 51, 20,155,241, 4, 7, -123, 21,194,142, 11,201, 49,142, 14, 34, 67, 81, 77, 81,145,189, 26, 71,206,164,169, 37, 8, 50,173, 15,214,142, 49,250,210, 63, -193, 14, 34,137, 50,184,107,182,113, 29, 23,239,204,145,178,108,134,252, 93,232, 83, 73,201,134,170, 34,109, 93,148, 36,239, 60, -155,254, 84,181,243,184,132, 39,167, 10, 62,195,129, 16, 27, 50, 17, 64, 85,176,227, 2, 31,236, 96,189, 39,217,254,209, 70,191, -202, 26, 3, 51, 35,105,183,200,226,151,158,185,245,137,173, 8,233,146, 54, 64,199,199, 44,217, 14,183, 76,113,158,225,180,107, - 18, 39,177,185, 6,159, 99, 64, 58, 1, 60,254,192,158,230, 32,138,177,114,151,232, 33, 0,168, 41, 14,109,225,137,120, 4, 5, - 28, 0, 41,106, 57,190,168,207,130,225, 27, 78,101, 9,196, 58,255, 67,193,225, 56,139, 37,195,209, 37,150, 99,122,230,169,224, -224, 32, 13,235, 62, 23,122,183,201, 62,168, 13, 58,253,127,112, 55,143, 95, 2, 48,118, 53,173,109, 3, 65,116,165,213,151,147, - 34, 55,182, 27,210,128, 15,134,166, 61, 4, 10,133,158,147,223,215, 63,210,107,233, 49,135, 66,219, 63,208, 30, 76,211,148,210, -224, 66,177,169, 19,199,150,237, 68,150,118, 53,221,153, 89,201, 50,197, 33, 96, 12,198, 70,200,236,232,205,236,204,123,111,189, -135,211,147,161,230,247, 75,228, 39,147,195,125, 15,100, 65, 27, 64, 73,117,135,137, 6,197,206, 90, 2, 20,234,104, 28,207,224, -176,117,215,180, 81, 91, 89,152,178,139,103,102, 94,220,110, 47, 76, 2, 44, 58, 81,124,153, 39,168, 46,203, 86,180, 45,214,220, -157, 35, 46, 7, 94,214,148,228,190,148,201,237, 12,120,117, 92,230, 92,227,155, 42,216, 90, 64,153,120, 74,139,244,235,239, 47, -100,146,232, 83, 80,150,254, 51,152,174,137, 18, 86, 54,226, 61, 22, 84,155,210, 28, 75, 81,142,120,183, 17,186,189, 39,189,243, -225,133, 64, 33,168,151,235, 28,165,181,142, 28,200,145, 66, 91, 94, 31, 83, 1, 26,233, 65,174,156,176,106,225, 75,108, 92, 38, - 6, 86,149,249,107,206, 82,233, 32, 64, 11, 76,131, 25,113,220,234,247,127, 30, 61, 59,126,113,116,124,246,233,243, 96,240,102, - 50, 95, 54,130,192,220,110, 32,189,176, 17,118,218,143,247, 59,237,110,183,123,120,248,180,213,222,107,198,123,167, 39, 61,147, - 42,222,190,123,159, 44,210, 31,191,254,188,126,245, 50,185,205,210,203, 97,150,102, 7,157, 78,255,252,219,243, 94, 47, 10,131, -179, 15, 31, 13, 36, 92, 77,174,199,227,201, 77, 50,251,123, 61, 93,209,120, 52, 80, 58,244,125,230,251,208,147,140, 94, 61,100, - 73,143,240,229, 16,145,253, 46,195, 93, 43,159,110, 96, 64, 48,203,139, 85,174, 35,179, 37, 19, 92, 69,225, 68,131,116,100,128, -138, 97, 61,173, 71, 8,172,133,165, 34,179,147, 31,231,127,105,117, 97, 7,236, 91, 9,224, 84,252,186,250, 94, 46,101, 28,198, -243, 77,201,107,174, 83,147, 68, 93,177, 33,114,131, 13,161, 16,126,156,175,166,213,227, 84, 89, 42, 26,160,209,100, 64,134,122, - 99,180,144, 91,155, 95, 34, 31, 91,103,114,237,184, 80, 17, 99,172, 91,108,201, 9,182, 77,216,139,209,119,129, 85,188, 91, 19, -211, 66, 13,156, 11,250,214, 51,120, 81,129, 57, 88,147, 58, 91,142,151, 77, 30, 96,176, 11,253, 72,171,156, 79, 11,168,161, 59, -148, 7,136,216, 43,187,246, 14,109,179,145,129,156,142, 49,216,190, 35,114,107,210, 38,214,126,160,132,220,206,117,249, 96, 15, -222, 90,151, 89, 1, 44, 4,163,139, 11, 0,255,128, 11,118,210, 35, 10,155,135,128,166,155,194, 14, 93, 45,184,187,108, 61, 98, - 25, 56,210,243,216,158, 15,235,165,114,146, 73,147, 52,186,166, 20,162,242,196, 64, 76,119, 5,158, 92, 32,205,147,236, 80,151, - 6, 44, 77,110,173,143, 32,217, 6,106,254, 20,150,137,251,173,131,200,223, 25, 92, 13, 22,249,146,184,203,208,220,109,141,103, - 35,238,232,178, 30, 17,149, 75,150,244, 14,101, 0, 99, 11, 0,202,140, 79,105,134, 20,113, 2,118,194, 71,113,163, 57,186, 25, -130,216,176,190,150,200,254,169, 22,151, 44,166,106, 5, 62,114,207,116, 74,254,150,118, 25,118,209, 39,114,154,233,244,110,177, -114, 44,155,100, 43,125,190, 46,215, 40, 30, 12,238,247, 11,157,254, 9, 64,217,181,244, 54, 13, 4, 97,239,218,241, 38,174, 21, - 68,169, 66, 3, 77, 15, 32,213, 82,169,184,112,226,128,128, 3, 87,132, 56,115,225,192, 15,226,136,248, 41, 92, 80, 65, 21, 45, -162, 82, 35,144,250,226, 17, 17,210, 42,208, 40,196, 81,227,247,178, 51,187,107, 59, 77,133,192,151, 28,226,196,113,188,243,216, -111,190,249,230, 31,245,129,249,108, 55,135, 88, 27,192, 62,129,128,140, 15, 12,250,224, 77, 32,192, 32,148,130,253,126,132, 43, -103, 46, 17,119,154, 23,223,200, 20,225, 8,198, 95,132, 32, 18,198, 97, 67, 71,170,194, 75, 46, 47,180, 14,122,123, 41,108,130, - 82, 9,189, 43, 10, 45, 52,217, 79,162,132, 32,156,106, 72, 78,164,174,252,131, 47,247, 22,189,221,222,238,234,242,202, 97,239, - 64, 82, 98,138,178,153, 10, 48,230,245,197,107,221,147, 46,229, 50,157,129,240, 99,106,101, 5,111,201, 59, 26, 28,251,193, 40, - 74,211,253,163, 67,216,150,154, 8,247, 83,195, 38,230, 32, 25,251,110, 76, 35, 38,124,195,169,184,195, 73,202, 64,231, 52, 75, - 24, 69,138, 23,220,188, 99, 91,226,245,217,211, 39, 78,205,125,254,226,101, 40,220,191, 65,231, 47,212,197,251, 39,195,225,230, -230,135, 7,247,238,190,122,189,222,104, 94,185,184,208,120,191,221,190, 84,119,239,223,185,253,248,209,195,213,155,107,253,126, -255,221,198,219,157,118,251,243,215,206,104,236, 79,130, 56,132,129, 70,188, 90,177,122,199, 93,183,118,171, 49,239,174,120, 94, -171,117,181,217,188,188,243,241, 83,231,123,103,206,101,140,210,245,141, 55,113,156,136,165, 26,101,196, 97,149,154,100, 50,160, -145, 85, 69, 58,106,129, 45, 38,224, 13, 9,146, 9,210, 83,241,171, 56, 17, 46, 91, 88,144,200,223,197,201,204, 38,182,105, 56, - 21, 82,175,177, 52,177,190,233, 84, 10,181, 84, 81,131, 79, 25,223,212, 33, 46, 21,198,129,204,227,248,217,230,155, 98, 1, 51, -152,164, 19,208, 34,180,207, 46,208,226,179,231, 58,250, 81, 56,154,245, 84, 36,119, 86,133, 96, 22,207,189, 57, 47,100, 0,140, -178, 67,100,128, 86, 67,167, 25, 22,145, 1,165,177,168, 13,219,118, 96,244,242,146,226, 92,129,162, 8,159, 53, 7,154, 10,191, -177,146,196,117,156, 0,233, 68,249,221, 57, 22, 68, 84,115, 10, 47, 77,116, 50, 51,201,184,209,109,164,180,100,146,164,212,127, - 36, 47,156, 38,161,156,111, 80, 78,222, 37, 64,172,241, 22, 69,243,144, 88, 76, 14,220,136,248, 75,242,187,252,155, 39, 40, 4, -197,168, 84,243, 85,140,100,205,177,161, 90,236, 93, 42,232, 98, 79, 32,205, 65,100,170, 70, 1, 96, 30,175, 90,187, 85, 97,150, - 27, 74,165, 64,177, 36, 13, 85,107,165,184, 99,214,149, 47,138,247,146,130,221, 98, 82,150,201,205, 62, 65, 73, 94,113, 38, 14, -177,129,150,190, 68,246,136, 59,149,234,141,165,181,173, 47, 91,170, 6,152,105, 16,131,203, 88, 10,240,237,143, 95, 93,138,220, -125, 92,176, 48,227,105,224,255, 84,131,192,148,194,112,134, 23,212,141,187, 74, 47,143, 75, 1, 62,174, 88,191,232, 78, 16,250, -141,162,104,152, 13,117,108, 80,131,137,228, 51, 53,207,115,185,154,213, 74,198,129, 63,197, 26, 72, 66,162,158, 18,252,147,217, -148, 5, 20, 38,115,102,143,155,253,103,230, 46,150,116, 90, 26,124, 86, 62,254, 8,192,217,213,173, 54, 17, 68,225,157,157,217, -217, 77,118,179, 73,136, 9,165,181,132,226, 11,120,231, 15, 22,177,106,193, 55, 17, 47,124, 49, 5, 95, 64,173, 16, 36, 84, 5, - 11, 94,137, 94, 20,105,174,180,154,182,110,178,217,217,233, 58,231,204,204,238, 54, 13, 10, 66,110,146, 16,152,221,236,156, 51, -231,124, 63,103,217, 95,140,212,124,230,220, 18,161,183, 32,171, 77,236, 72,238, 64, 30,106,196,218, 26, 3,230,192,149,100,204, -158,146, 13,184, 92,184, 70,254,239,152,252,141, 85,140,171,181, 72, 42,193,115,202, 61,202, 27,140,183,121, 24,251, 13,206,184, -112,196,228,236,104,250,251, 4, 48, 49, 36, 9,238, 94,127,244,101,242, 25, 80, 74,204,187,216, 55,144,129, 31, 98,142,145, 70, - 44,141,122, 54,141, 3,194,113, 91,168, 51,238, 2,197,114, 0,147,226, 57,161, 96,216, 88, 87,171, 57, 5,157, 61,188,165,134, -213, 75,174, 13,182,210, 44, 85,127,230, 52,249,165,109,134,168,230,216,210,218,128,169,194,121,183, 56,242, 25, 87, 25, 60,135, - 73, 57,170,120,113, 3,238,170, 15, 84,237,217, 12,136,199,224,129, 21,194,201, 50,249,228,241,211, 91,219, 59,207,159,189, 88, -100,153,202,117, 91,195,205,205,171, 27,123,163,177, 90,194,238,131,251, 47,247,222,222,187,179,189,190,190,241,122, 52, 86,215, -244,245,240,219,120,127,255,224,195,199,227,239, 63,226,184,213, 31,116, 61, 14, 78, 6,179,121,194,168,140, 90,192,120, 41,100, -254,112,231,238,237, 27, 55,215,250,107,175,222,140,222, 31,124, 74, 51, 49, 75,103,184, 31, 65,239,122,165,227,117, 59,126, 28, -146,168,201, 35, 31, 32, 83,200, 88, 5,184,143,121, 72,128,240, 28,163,149, 5,136, 24, 54, 21,220, 21,145,229, 52, 47, 84, 62, - 24,176, 70, 63, 80,161,157,116, 28,122, 56, 57, 61, 62,155,107, 83,248,115, 45, 54,195,170, 54,244, 67,196, 36,235, 6, 69, 96, -239,163,110,144, 92,237, 41,102,158, 37,237,238,203,221, 0,143, 81,197, 74,173,246,101,235, 91,242,111,198, 58, 89, 98, 34, 46, -253, 46,242, 99, 41, 69, 20,196, 34, 23,122,127, 98, 89,153, 91,207, 28,181,120, 6, 21, 39, 48,124,164, 1,253, 77,207,148,144, -138,127, 2, 43, 22, 40,103,189, 40,219, 94,150, 35,150,108, 96, 77,216, 79, 65, 94, 68, 46,147,213, 47, 84, 24,164, 26, 2,167, -121, 33,231,246,178,104, 93,145, 68,170, 65, 48, 58,184, 83,203, 92,174,232, 49,213,139,252,245,229, 88, 51, 24, 98, 24, 10,218, - 64,198,184,180, 27, 48, 74,143,236,192, 50,151, 90,223, 2,176,158,118,173, 1,171, 49, 25, 44, 91,246,214, 69, 18,219,238,232, - 22, 70,152, 9,238, 4,188, 97,169,198, 84, 93, 52, 81,197,189,213,139,186,113,179,149, 44,146,114,114, 84,165,102,208,148,120, - 71,159, 16,243,159,201, 9, 6, 74, 98,173,123, 45,130, 73,156,202, 56, 22,181, 78,122, 64, 83, 97, 40, 95,240, 96, 32,201, 90, - 14,123,195,233,108,106, 3,185,174, 69,108, 84,181, 54,178,165, 34, 82, 79,241, 83,113, 35, 14,219,153, 16,149, 50,210, 33,171, -186, 27,101, 46,182, 53, 22, 33, 53, 54,177, 44,165, 35,157, 70, 47,205,231,203,179, 16,160, 25, 40,109,207,147,252, 31, 28,101, - 66,229,170,175,254, 8, 64,217,181,172, 70, 17, 68,209,170,126, 78,143,227, 68, 76, 16, 4, 87,113, 31,226,206,224, 31,184,112, -161, 65,240,155, 92,138,127, 97, 4, 23, 17, 21, 84, 36, 11, 31, 8,126,129,138, 9, 24,204,144,153,204,164,223, 83, 15,239,189, - 85,213,221, 51, 14, 1, 7, 50,139, 33, 52,221, 93, 85,247,222, 58,117,207, 57, 23,213,239, 77,231,114, 18,245,145, 87,134, 61, - 51,230,249,208,227, 77,115, 34,145,115,213, 11,122, 53,202,239,203, 0, 89,151, 33, 51,157, 76, 92,197,154, 75,110, 29,222, 72, - 69,178, 49, 42,211,228,246,226,251,238,252, 30,198,224, 92,136,161, 98,107, 8, 74,134,116,124,226,247,226,254,172,156, 65,141, -249,230,219, 43,233, 90,221, 77,110,195, 1, 32,112, 77, 49,203,119,160,128,133,105,101,146,157,194, 13, 86, 53,178, 58, 77, 87, -107,224,135, 15,239,220,127,118,176,103, 33, 87,207, 28,251,208,137, 19, 77, 71,248,175,195,209, 33, 26,101, 32,123,195,110,177, -209,179,142,241, 28,198,131,211,161,177,230,199,114,170, 98, 6,181,112,156, 4, 48,115, 37,197, 74, 20,214,241, 45,145, 23, 81, -157, 4, 19, 90,145,177, 39, 79, 31, 95,189,178,145,102,147, 48, 66, 66,199,245,107,235,211,179, 9,196,154,237,173,173,159,191, -142,178, 34,125,190,255,242,193,189,187,131,126, 2,143, 85,207,229,209,239,209,159,227,147, 15, 31, 63,173,175, 93,190,185,121, - 99,103,231,246,238,238,163,116, 58,125,247,254,245,219,131,207, 66,212,121,149,239,189,216,159,204, 82, 40,237,171,106, 78,238, - 39,136,236, 51, 15, 95, 59,188,177, 52, 83,129,167, 32, 31, 69, 33,209,202, 20,196, 83,200,183, 80, 98, 35,249, 3, 13, 82, 52, -139,173, 64,179, 55, 12,131, 62, 44, 66,205,242,168,136, 20, 75,197,252,199,201, 56, 19,226,172, 40,185,140, 75,145, 97, 28, 20, -102,191,108,202, 30,252,147, 11,196, 85, 58, 96, 68,160, 39,234, 34,224,255,180,186, 55,192,165,174, 85,217, 13,139, 75,242,217, -250,194,126,246, 85, 27,210, 46,189,154, 67, 40, 47,170,204, 28,231, 54, 84, 35,163, 98,230,116,158, 73, 56,136,241, 36,134,152, -146,114, 10, 33,206,165,164, 53,222,133, 65, 28, 68,195, 20, 81, 29, 75,118,240, 22, 66,115, 91,113, 47,236, 81,232,235, 82,152, -148, 4,173,192,133, 39,249,184,221,198,183,101,154,215,141, 8,116, 45,204, 38,219,155,183,190,126,255,226, 83, 45, 75,145, 75, -117,120, 3, 6,201,128,104,184, 49, 78, 71, 62,250,122, 17,114,175,157, 39,164,137, 59,164, 10,176,122, 1,163, 76,174,123, 56, - 87, 56, 58,188, 88, 59,146,170, 11,214,214,173,213, 98, 52,126, 87, 56, 80, 91,163, 3, 3,112,120,172,117, 32, 52, 93, 45,134, -202, 78,123, 98,109,204,147,205, 90,243,141, 97,147, 89,116,237,160, 65, 5, 35, 24,109,217, 9,104,197,192,140,231,184,202,116, - 75,224,165, 36, 65,165,144,121,171,121,142,181,154,100,141, 18,164, 70,178,174, 34, 92,209, 52,123,106, 79,114,122,203,164,218, -163,116,227,207,108,114, 24,252, 16, 7,232, 42, 51, 8,250,165,168,132,172,181, 53,225, 52,114, 59,176,200, 97, 25, 41,115,200, - 74,236, 67,236,121,131,220, 67, 85, 37,111, 32, 30, 7, 66, 40, 7, 75,180, 41, 27,110,123, 0, 83,171, 60,231,220,229, 33, 55, -249,233, 46,212,180, 56,213, 86,123, 21,231, 94, 64,242,124, 43, 69,150,150, 36,104,254,203,165,114,233,243, 87, 0,198,174,239, - 53,106, 32, 8, 95, 54,217,187, 36, 71, 91,104, 45,130, 62, 88, 20, 5,159, 44,130,254,207,165,226,115,241,221, 55, 17, 20, 31, -172, 15,197,223, 40,229,234,213,222, 37,217,219,100,215,249,102,118,115,169, 74,245,249, 2,201,205,238,206,206,124, 51,243,125, -255,198,103,232, 83, 76,219,176, 64, 5,228,124,100,110,190, 69, 37, 10,136,225,220,254,184, 81,220,164,120,177,234, 86,138,243, -121,242, 26,152, 98,245,194,171, 64,215, 53,140,195,172,249, 50,127, 33,252, 20, 49,145,243,210,172,146,177,230, 53, 2,129,133, -173, 24,116,177, 91,249,246,121, 51, 79, 97,224, 78, 99, 91,251, 72,213,130,131,218, 32,144,244,220, 66,235,184, 9, 62, 96,145, -161,224, 26,121,146,104, 89,218,214, 60,121,254, 20, 56, 27,239, 27,174, 80,225,177, 66, 79, 76,107,240,238, 88,235,165,101, 3, -223, 58, 12,218,109,151, 91, 58,155,124,156,125,226,211,131,206,176, 51,189,184, 54,206,203, 92, 79,115,157,101,224, 98,164,196, - 64,103, 35,173,189,212,167,132,247, 15,193,174,210, 47, 95, 31,183,246,216,116, 73, 66,206,216,154,233,230,238,251,207,167, 99, -157, 63,218,127,120,112,120,200,179, 89,238,238,222,222,245,157,141,182,179,116, 2, 44,231,133, 20,105,223,187,127,231,241,131, -253,205,178,120,118,116,244,246,221,201,215,111, 95,150,117,173, 88,167,230,197,171, 55,214,182, 89,154, 22, 19, 13,149, 84,139, -185, 15, 50, 69, 69, 87, 41,143,203, 81,208, 84,228,240, 18,100,147,201, 4, 97,154, 83, 14,236,193, 35,128, 75,211,146, 98,250, -164,107, 64,109, 54, 91,154,239,103,243,165,181, 23,149,107,232,218,241, 38,232,159,193, 85, 87, 65, 87,129,129, 99, 72, 97, 96, - 78, 24,230,173,105,105, 6,245, 70, 57, 57,210,183,174,254,216,115,229,120, 99,177,250,201, 93, 7, 73, 18, 69,112,134,147,250, - 67, 29, 15, 57,180, 41,230, 56, 92, 31,224, 39,140,165,176,108,147,191, 98, 75,135, 43, 25,162,109, 25,251,214, 88, 96,228, 11, -222,249,214,216, 38, 28, 64, 68,145,122, 69,137, 93, 68, 96,124,156,165, 92, 11,211,121,119,193, 56, 76, 15, 1,145, 95,104,161, - 94,238, 3,141, 76,146, 12,133,221, 35,144,129, 11,172,178, 53,183, 69,102,157,239,123, 49,130, 52,249,173,221,219, 31, 78, 79, -146,129, 71, 8, 92, 25, 56,241,206,152, 70,245,125,196,100,210,203, 28,174,189,221,114, 93, 80, 56,153,102,193,253, 70,207,174, -152,201,229,111,243, 1, 67, 85, 61,121,153,228, 73, 42, 18,135,249, 72,249, 40, 18, 59,145,124, 70, 5,230, 13, 78,179, 25,162, - 22,218, 63, 57,177,126, 56, 60, 37, 23, 84,188, 12, 36, 11,145, 0, 86,245,179, 78,162,170, 28,134,162, 2, 6,173, 82, 95,175, - 42, 90,108,152, 11, 28,166, 64,102,100,126, 61,101, 23, 79,209, 5, 61, 15,204,150, 17, 29,128, 49, 64, 82, 85,252,155, 78, 36, -250,160, 49,230,126,203,225, 98,225, 84,166,100, 21,146,252,249, 98,198, 77,253,163,122, 85,143, 6, 75, 25,248,223,241, 52,111, -114, 23, 35,117,168,117, 50, 23, 9, 23, 31,248,103,137, 44,217,104,151, 26, 92,227, 11,161,166,224,214, 29,131,201, 58, 83,237, -211,205, 12,142, 27, 83,228,194,108,200, 77, 56,118, 24,220,244, 42,128,233,149, 46,254,255,101,141,127, 9, 64,216, 21, 43, 55, - 17, 3, 81,105, 37,221,217, 23, 76,108, 39, 36, 41, 66, 5, 13, 52, 20, 52, 20,252, 2, 29,159, 74,197, 31, 48, 20, 80, 48, 24, -147, 2, 8, 76, 10, 27, 59, 25,231,236, 59,203,210, 29,218, 93,221,141, 29, 72, 40, 51,158,156,207, 35,105,181,251,246,237,123, -250, 54,164, 78,242,116,115,251,162, 4,105,114,120,149, 92, 86, 82,184,182,194, 78,215,147,211,238, 41,154, 31,185,202, 34, 45, - 31,112,164,166,130,117,136,245, 36,165, 66,109, 80,172,190,226, 14,224, 33, 82,204,223,177,159,174,133, 78, 65,119, 49,155,132, - 69, 72, 84,221, 50,108, 6, 20,222,163, 49, 87,106,183,240,253, 94, 19, 85, 88, 33, 33,143,169,190, 17, 70,139,167,140,226, 17, - 55,125,162,249, 46,111,196,253,108, 96,148, 94,218,156,100,206,144,105, 31, 30,156,128, 62,238, 31, 93,229,151,143, 79, 30,125, -189, 24, 27,208, 79, 31, 62, 25,157,143, 80,176,223,152, 80,169, 76,175,103, 81, 52,146,146,154,239,229, 68, 62,240, 67,147, 38, - 90, 68,151, 26,192,134,100,120,230,218,162,162, 69,162,132,147,149,219, 8, 84, 29, 64,245, 46, 69,179, 25, 97,197,109,102,224, -104, 56, 56, 59, 27,191,120,254,236,224,240,222,201,113,246,250,213, 75,239,224,203,248,147,117, 46, 23, 20,144,233,210, 41,243, -213,155,119,239,223,126,252, 16,202,128,197,117,105, 11,223,239,118,122, 89,218,235,136,193,158, 70,243,238, 74,135,219, 12, 49, -116,148, 95, 3, 27, 2,143,171, 20,173,140, 65,249, 73, 92,130, 13,142,215,214, 93, 13,247, 59, 38,211, 10,175, 48, 15,222,169, -139,201, 98, 81,186,217,178, 44,200,161, 24,107, 43,194, 3,105, 83, 86,108,235, 81, 97, 69,144,176,139, 49, 94,117,178, 61, 10, - 66,238, 66, 31,183,136, 28,197, 56,105,133, 79, 43,191, 17,117,218, 40, 68,111, 11, 27, 32,108, 13,216,141,191, 97,207,205, 51, - 35,174, 41,243,194,159,133, 95,253,253, 61,209,106,135,206, 27, 27,197,132,133, 88,217, 60,188,112,102,122, 43,242,231,107, 69, -154,182,217,199, 97,123,144,227,184,160, 1, 11,191,251,220,176,130, 41,161, 79,156,164,214,161,236,115,222,209, 8,171,118, 8, -239,240,172, 5, 30,203,110,210, 57,232, 29,254,156,157, 15,247,134,243,229,156,168,162, 6, 35,146, 36, 24, 31, 53,138,160, 13, -166, 76,252,250, 49,253, 6, 91, 74,241,173, 16, 36,165, 39,114,244,235, 51,240,124,119, 93,253, 91,184, 77,202,121,254, 27,162, -119, 49,243, 94,234, 72, 98,145,172,195, 0,255,149,108, 35, 54,187, 9,233, 14,101,205,248, 27, 21, 52,231, 8,155,153, 44,211, - 45, 91, 42, 26,119,215, 4,217, 61, 10,242,128,137, 38,103, 60, 52, 46,233, 35, 22,126, 21,141,102,164,220, 22,162,137, 3,131, -154,224,120,205,148,121,217, 2, 23,225,159, 19, 79,243, 70,204,225, 9,199,124, 63,237, 95, 22,243, 72, 91,147,216,181, 70,112, -144,162, 48, 52, 14,168,209,250,174,201,142, 21,241,183,253, 13,161, 22,174,205,106,202,239, 9, 74, 45, 55,101,212, 35,167,160, -162,200,114, 27, 97, 58,142, 30, 21,130, 16,160,146,124,189,136, 65, 31, 23, 53,100, 60,177, 75, 31,206, 9,130,147,110,131, 19, -164, 82,236, 98,140, 24,211,249,125, 10, 91,110, 35,112, 17,218,111,201,229, 81,235, 38,188, 28, 34,185,212,251,145,109, 93,213, -124, 42, 90,219,222,187, 67,188, 1,195,179, 20,119, 91, 19,255, 17,128,175, 43,233,109, 26,136,194,158,113,236,113,156, 61,169, -148, 86, 21,112,229,196, 9,137, 67,111,252, 19, 46,252, 88, 36,174, 8, 84,168,144, 40, 32,150, 80,106, 39,113,237,204,100,152, -239,189,241,146, 64,145,162, 28, 34, 43,150,229,153, 55,111,249, 22,244,223, 45,157,204,157,137, 80, 35,159,211,236, 13, 41, 58, -154, 58,117,167,146, 97,228,161,182, 46,189,169, 22,201,156,243, 96,226, 18,193,119,155, 27,120,124, 62,240,234,224,148, 29, 54, -206,152,197, 66,233, 93,201, 56,142, 84, 26,165,131, 40,149, 20,123,191,108, 62,223,153,194,237,216,172,200, 52, 75,131, 6,181, -111, 75, 96, 7,201,192, 69, 48, 91, 43,219,121, 60, 61,165, 13, 76,133, 13,216,164,186,182,133, 68,107,216, 64,126,136, 71,249, -211,116, 18,194,108, 67,184, 87,187, 45, 54, 22,223, 91, 11,113, 33,113,227, 78,120, 52,232,237,233,236, 76,131, 4,107,152,194, -205,247,114,143,147,135, 27,237, 98,162, 9,225, 70, 93, 6,198, 4,132,140, 1,186,188, 42,145,227,186,104, 30,199,112, 39, 81, - 42,140, 84,160, 98, 9,197,130, 68,186, 0,253,236,233,147, 55,239,222, 62, 60, 63, 95, 46, 79, 39,163,233,124,126, 50,159,192, -100,242,242,234, 35,152,119,152, 73,131,202,133,133,190, 23,217, 26,182,194,131, 52,142,250, 73,166,205,143,245,246,250,102,179, -202,203,117,181,211, 37,114, 29, 73,162,235,176,162, 37,243, 42,100, 88, 46, 60, 9,209, 15,228, 80,138, 89,164,150,113,218,219, -201, 60,179,249,109,244,254,251,237,229,215,226,195,234,247,175,109,149,163,232,224, 6, 27, 19,131, 45, 33,106,246,204,239,195, - 40,219, 4,112, 70, 5,156,204,149, 38,137, 59,231, 52,188,194,189,140,234,255, 43, 69,188, 29, 53,222, 25,205,131,163, 23,207, - 95,190,190,122, 53, 12, 71,218, 86, 93,132,128,173,195,205,209,153, 48, 84, 99, 98, 21,121,145,178, 72, 68,214,143,232,197, 33, -105,214,170,176, 15,220, 11, 76, 31,221, 43,138,132,119, 60,199, 77,117,163,246, 69,165, 84,163,141,193,202, 34, 36,136, 68,142, -205,255, 48,220,145,110,135,107,178, 99, 68,224,115,177, 39,236, 17,234,209,142,147,105,177, 91,179, 85,174,203,234,250,113,234, -150,249,207,252, 27,129, 26,239,120,111,224, 98,223, 57, 23,212, 93,177,182,174,209, 31,204, 30,185,154, 93, 30,144, 72,133,109, - 57,175, 45,252,188, 46, 50, 90,250,119,235, 83,223,132, 93,239,188, 1, 20,233,168, 63,114, 11,194, 11, 52,222, 35,118,211, 0, - 36, 67,154, 83,169, 94,100,246,154, 60,120,137,213,207,144, 47, 84,126, 88,251, 49,123, 32, 83, 44,238,145,129, 12,109, 82,201, -146, 30, 52,173, 10,188,232, 0,174, 65,220,151,172,245, 20,120,211, 38,234,179,147,239,135,183,156, 9, 9, 34, 73,150,124, 44, - 4, 37, 67, 30,110,249,214, 31,239,110, 79, 35, 21, 39,147,121, 86,228, 52,142, 32, 40,170,151,108,195, 67,212, 2,114,123,223, -122,163, 50,128, 16, 45, 24,145,153, 67, 89, 36,119,223,197,112,177, 41,215,238, 95, 46, 30, 95,124, 90, 93,147,128, 49, 23, 95, -251,134,152, 26,122, 6, 39,126,134,212,147,169, 82,149, 98, 76,221,224,116, 36, 15, 2,144, 86,142,146,169,139,254,181, 49,113, -199,220, 51, 16,203,201,217,182, 92,183, 58, 62, 7,211,204, 86, 55,168, 73, 53, 88, 12,238,136,247, 36,142,205,255,196,223, 76, -145,238, 39,145,177,233,152, 86,222, 55,181,250, 35, 0, 95, 87,182,219, 54, 12, 4, 69,145, 18, 69, 95,177,141, 32,125,104,130, -162,255,255, 41,237, 39, 20,104,129, 62, 4, 9, 98, 1,137,101, 73,214, 65,118,119, 86, 18,164, 38,237,179, 97, 90,162,121,204, -206,238,206,176,191, 7,205,216, 62, 59, 82, 88,138, 61, 19,207, 83, 99,179,230,148, 41, 11, 33,157, 14, 10, 56, 93,177,217, 92, -128,254,140,201,238,215,247, 80,236,106, 89, 75, 63,224,236, 81,220, 33, 3, 27,142, 0, 50, 33,130,180, 22,214, 90,172,173,134, - 32,174,182,187,108,187,207,118,142,205,203,253,247,231,111,125,212, 53,140,125, 91,238, 67, 1,155, 9, 38,184,159, 66, 11, 57, -184, 39, 43, 2, 8,101, 32,117, 19,140, 8, 27,209,232,201,224, 86, 13, 93, 30,228,118,232, 22,161, 65,232,211,131,187,169,155, -146,211, 62, 20,174,199, 41, 36, 70, 53,175,123, 20, 54,105, 62, 99, 3,200,101,110,106,238,209, 64, 77,127,241,105,251, 92,175, -155, 88, 37,206,152,186, 11, 54,161,175, 4, 32,104,230, 73, 36,209,144, 89, 2,134, 62,209,200, 94,113,123, 46,107, 31,209, 52, - 60,124,190,123,124,202,233, 26,168, 59, 47, 25, 27,130,200, 70, 27,231,108, 94,122,130,252, 53,142,210, 43,171,127,169,215,170, -161, 57,117, 54,181,214, 88, 10, 95,141,127, 43,219,186,106, 8,182,115,173,162, 86,142, 85, 81,252, 6, 90,243,206,199,187,196, -126,217,178,247,252, 91, 27, 74,223,159,170,230, 92,113, 8, 49, 57,168,198,112, 49, 76,149,187,116,197, 32,229,227,105,166, 92, -213,149, 30,174, 7,108, 52,200, 98,196, 17, 12, 16, 34,246,160,132, 28, 49,180,246, 2,176,142, 28, 58,220,237,180,181, 55,151, -230,188, 60,160, 3,243,194, 20, 77,251,193,137,180,141,122,205, 72,220,167, 51, 25, 34, 89, 80, 70,219,150,238,239,145,155,153, - 86,215,195,241,235,239,252,215, 56,160,119,201,166,110, 47,255,170,157,247, 31,129, 26,194, 10,173,191, 70,163,159,226, 42, 93, -211,171,214, 93, 41,151, 52, 5, 78, 4,129, 49, 35,239,171,120,130, 40, 4,132,209, 73,152,245,129,125, 19, 79,246,179,209,224, - 18, 64,111,141,186,123, 91, 94, 47, 75,193,175,193,237, 75, 30, 44,101, 91, 40,223, 14,172,206, 44,135, 55, 62, 54, 86,218,226, -247,233, 50,119,169, 43,170,215,169, 50,114,190,239,100,181,131,217, 12,163, 61,189, 66,231,210,194, 46,254,111,151,238,105,219, -142,213, 57,130,174, 53,146,169,210, 15,168,244,140, 72, 17, 84, 4,249,121, 48,230,210,100,142, 82, 98, 20,128, 72,197, 25, 28, -168,135,172,196, 96,147, 16,208, 69,194, 39,184,156,227,216,113, 74,165,124, 89, 72,207,170,184,199,199,131,134, 48, 87, 46,249, -187,253, 39, 99,244,143,167,159, 96, 53,187,134, 81, 6, 43,130,116,190, 63,236,142, 47, 69, 94, 55,215, 46,136,181, 54, 67,143, -126,106, 97, 7, 89,207,172,186, 80, 51,113,152, 43, 55, 4,206,138,233,149,221,228,151,211,113,125, 75,241, 92, 81, 21,244, 54, - 20,186,209,141, 72, 79,145,159, 95, 88, 75,158,221, 44, 13, 69,108, 35,196,230,177,232, 44, 98, 2, 7,164,149, 84,143,209, 26, - 62,172, 14,172, 90,168, 88, 82, 91, 2, 40, 63,203, 77,210,179,152,119,127,241,188, 6, 38, 68, 11, 68, 51,114,247, 18, 22, 12, -247, 77,180,212, 22,149,212, 65, 12,190, 81,205,188, 68, 62, 28,255,255,221, 22,127, 4,224,235, 90,118,155, 6,162,232,120,108, -143, 29, 2,173, 68, 0,129,210, 5,240, 35,252, 4, 59,190,176, 43,126,130,127, 64, 98, 9,237,162,165,162, 44,226,216,181,103, - 60,220,115,238, 56,177, 83, 84, 41,202,194, 74,236,100,124,125,231,190,206, 57,201,191,207, 74,118,118,105, 43, 89,182, 52,181, - 67,135,152,133, 10, 88, 5,153,195,225, 87, 11, 83,188, 91,109, 93, 86,128,192, 33, 42,224, 88, 43,185,164, 55,129,215,148, 44, - 24, 27,184,108,145,224,130,207,235,149,117,149, 67,240, 14, 6,231,162,186,235,110,126,220,127, 23,227,104,129, 73,241, 28, 14, - 76, 61,112,121, 95, 87, 47,218,135,134, 32,101,182,240,117, 24, 32,225, 81, 45,169, 64, 24, 82, 51,189, 3, 79,151, 45, 64, 4, -246,230,227,213,237, 47,151,103,219,151, 23,127,155,123,121,176,196, 4, 47, 54,219,117,189,186,190,187,130,127,167,197,203,239, -251,242,233,243,229,183,175,137, 24, 1, 54, 39,238, 20,179, 86, 35,139, 52, 99,217,223,190,190,217, 53,185, 36, 3, 83,221,209, - 40,179,165,246,238,224, 52, 11,104,109, 24,168,241, 33,185,117, 37, 80,182, 0, 1,217, 18,208, 8, 6, 17,114,185,117,141,245, -114,165,245,222,254,222,247,146,137,238, 7,223,116,195,174,237,129, 56, 53,161,100,117,133, 18,194,176,220,182,235,201, 48,131, - 92,161,235,199,188, 42,153,200,203,195, 48,200,110, 81,120,115,142,122,190,123,123,126,230,184,183,216,177,104, 67, 3,138, 78, -142,134,177,139, 15,145, 3, 98,181,197, 28,171, 46, 52,129,168, 71,111, 84,188,216, 48,152, 39,155, 7,238,150,198, 86,145, 3, - 87, 9, 19, 31,146,151, 8,102, 33, 66,148, 6,193,159,215,103,178, 30, 18, 49,201, 54,191, 31,154, 41,146, 8, 39,168,188, 67, -105,229, 32,124,152, 27,231,205,192,129,116,207,227,137,241, 92,238,221, 67,104,151,184,190,255,103,160, 51,178,163, 92,207, 64, - 68, 73, 45, 78,166,133,154,160,254,133,120,140, 88, 78, 69,114, 18,181,245, 97, 64,126,254, 97,155,217,197,229,226,177,121,240, -212,176,131,138,254, 80,178,247, 68, 75, 73,123,116,174, 40,197,139,101, 83, 26, 65, 69,209,156,128,158,248,136, 39,114, 18,199, - 72, 81,124,220, 60,123,181,235,154, 49, 38,229,144, 5,243,217,210,173, 79,197,126,173,178, 51, 46,139, 49, 9, 96, 82,104, 35, - 55, 90, 25, 55,140,175, 83, 27, 20,193, 56,208,231,234,177,145, 13,155, 84,126, 87,242, 9,101,200,102, 35, 52, 45,149, 50, 56, -114,160, 46,242, 12, 96,201,131, 91, 71, 57,148, 55, 20,248,166,153,226,118, 70, 33, 29,188, 50,142,235,146,185, 90, 12,192,211, - 10, 37, 58,148,147,117,190, 27, 70, 15,173, 2,162,148,201, 20,198,194, 34,180,108,240, 93,206, 50, 46,217, 74,181,182,192,178, -106, 32, 12,210,149, 78,174,190,235,247, 58,139, 1, 15,141,167,193, 91, 32, 90,122, 9, 46, 65, 58,141,169,202,192, 30,236,168, -251,183, 28,105,250, 86, 3,236,145,242,173, 18,108,106,135, 35, 83,132,219,164,229, 52,179,192, 71, 35, 2,169, 54,163, 41, 99, - 22,151, 73,107,156,209,238,197, 35,108, 98,222,110, 49, 85, 89,181,132, 19,198, 83,239,159,252,251,251,205,135,235, 63, 63,195, -147, 52,245,255, 4, 32,236,218,118,156,134,129,168, 93,219,113,210, 84,105, 65,148, 21, 32,132,120, 66,226,255,127,132,229, 5, - 1,143, 72,187, 11,165,187,109,210,184,185, 56,222,153,177,147, 52, 45, 21,234, 75,164, 38, 77,218,142,199,115, 57,115,206, 68, -159,143, 95, 8,122,121,174, 57, 57, 21, 46, 9, 82, 44, 44, 76, 33,147,164, 42, 6,242,126,212,237, 38,126,189, 84,171,188, 46, -141,109, 4, 58,116, 52, 8, 47,251, 0,158,107,230,200,172, 28,237,240, 74, 67,164,163,101,146, 70,105, 42, 99,193,186, 47,219, - 91,211,228, 89,186,220, 28, 54,141,173,176,235,136, 50, 54,180,119, 14,226, 52,124, 28,170,158,133,142,208,168,237,139,185,161, - 35,203,242,133, 32,206, 99, 17, 33,150, 17,108, 14, 94, 84,193, 15,193, 5,242,233,114,141, 65, 60,149,113,218,110,145,204, 15, - 85, 9,239,146, 88,187, 35,213,158,118, 53,127,185, 45, 31, 33,147, 0, 39,221, 68,197,189,218, 31, 49, 55, 33,137, 15,106,241, - 51,231, 7,229, 2, 47, 38,101,181, 82,107, 30,107,220,123,144,151,177, 67,202,117,248,158, 17, 74,136, 67,140,207, 22, 26,219, - 55, 77,197,247, 7,145, 99,209, 7,119, 18,112,167,166,106, 42,219, 86,214,206,181, 72, 53,210,123, 64, 10, 3,102, 94, 26,212, - 23,131,203,225,153, 76, 3,155, 5,166, 14, 45, 18, 38,123, 10,108,200, 33,106, 83, 85, 69,142,108, 59,169,210,112,237, 74, 39, - 75, 72,141,112,220,140, 43,167,141, 45,168, 14,131,176, 35,238, 36,100, 17,222,125,123, 34, 55,193,164,233,140,103,109,198, 40, -221,218, 84,103,101, 93,192,199,250,232,221,121,124,195,196, 85, 5,217,201, 68, 37, 68,161, 30,236, 94,132,102,233,100,190,218, - 93,193,242, 82,224,175,124,154,201, 78,120, 81, 66, 96,196, 66, 83,139,247,170,138,184,252,184,170, 93,197, 70,152, 55, 62,131, -196,219,170, 36,138,243,106,127, 70, 51,121, 77,245,180,199,180,204,216,136, 1,193, 6,251,205,242,237,195,238, 46,139, 87, 16, - 13,124,191,251,118,138, 69,246,244,114, 74,234,166, 61,178,161,140,114,178, 50,248,191,240,203,231,164, 52, 66, 17,240,180, 25, - 10,179,190,141,116,237, 39,162,246,231,196,191, 99,126,233, 72,111,178,247,239,228,125,103, 68,185,218,183,151,123,185, 15, 42, -160,184,208,216, 68, 5, 18,170,168, 82,225, 20,195, 49, 8, 68,136,127, 81,114, 60,166, 96, 91, 80, 58, 27,100, 46, 60, 42, 82, -132,154,182,176, 1,202,138,200, 21, 48,228,186, 61, 6, 88, 98,215,203,245, 49, 10,222,135, 5,200, 4, 9,232, 5,136,100, 24, -134,101,193,215,193,218,241,124,212, 20,155, 99, 6,217, 82,240,222,208,202,195,131,206,189, 95,127,248,121,255, 3,110, 71, 89, -239, 12,178, 92,108, 37,163, 17,227,206, 32, 72,155,169, 39, 24, 68, 51, 93,196, 41,248,116,184,221,195,238, 15, 71,228,171, 93, -167,107,211, 29,119,229,211, 98,158,217,186,134, 39,205,205,254, 85,182,222, 20,191, 63,189,249,252,245,215,173, 71,114, 83,162, -218,190,123,241,241,209,252,245,163,248,219,242,169, 39, 99,119, 93,144,246, 30, 81,247,103, 35, 72,124,240,192,189, 25,192,249, -144, 67, 72, 25, 97, 76,201, 7,174,234, 75,120,240,248,215,159, 72,107,249, 17, 8, 54,104,106,187, 11,133,247,255, 98,228,253, -105,207, 2,240,117,117,189, 77, 3, 65,208, 62,251,226, 56, 73, 77,138, 68,137,224,161,240,142,148,255,255, 35, 10,127, 0, 33, -132, 64, 85, 3,253,160,197,181,207, 62,223,177,179,123,151, 56, 38, 66,170,242,210, 40,142,157,189,189,217,189,157,153, 73,126, - 79,255,169,245,210,201, 4, 91,104,137, 70, 51,107,197,160,148,247,103, 30,121,100,244, 92,229,103,155, 98, 67,121,167,177,232, -248, 50,133,117, 64, 28,225,193, 81, 34,167, 0,160, 36, 76,161, 80, 20, 26,174,209, 26,141, 26,245,237,233,243,205,243, 13, 24, - 30, 9,100,223,144,193, 68,255,223, 11,177, 88, 98, 46,138,169,114, 11, 69, 92, 3, 16, 74, 62,216,248,210,247, 2, 1, 58,199, -212,162,228,113,184,153, 42,181, 42, 87,111,170,215, 63,238,175,105, 23,218, 94,110,239, 30,111,239,255,220,162, 4,145, 66, 20, -135, 79,193,212,145,169, 64,160,120,118, 20,110,138, 50,221,170,238,107,225,226,162,160,202, 93, 91,213,143, 51,131,251, 6,101, - 58,149,102, 20,197, 39, 45, 10,185, 89,174, 55, 29,251,118,176,137, 7, 4,204, 50, 73, 79, 3,187,151, 18, 38,200,148, 43,139, -130, 86, 94, 11,117,140, 97, 6, 21, 30, 36,214,206,119,173,117,116,155,218,235,118, 72, 97, 33,233, 19, 99, 59, 99, 44,125, 68, -145, 35, 26, 29,123,199,247, 61,193, 28, 79,123, 20, 61,174,190,235, 8,178,116, 22,127, 77, 99,127, 55,125,109, 48,124,166,149, -175,178, 66, 89, 61, 75,211,245, 28,104, 70, 74, 19,203,234,224,220,148, 97, 73, 50, 39,170, 31,232,221,192,107, 27, 29, 53,170, -160,185,138, 21, 15, 74, 31,188, 40, 93, 36,254, 85,243,170, 54,245, 30, 59,164, 83,202,245,112,108, 67,124, 26,226, 10,252, 91, -134,129,197,241,230,225,153,249,237,215,139,243,119, 23,239, 63,126,189,162,159,254, 98,249,234,103,189, 43,245,146, 65, 77,200, - 52,180, 61, 16, 62,168,249, 76, 53,202,146,254, 95,176,111, 58,122, 48,150,241,226, 35,250,253, 65,212, 1,191,135, 3, 91, 30, -208,206,243,156,130, 19, 7, 53,137,167, 75,183,246,121, 89,188,160,231, 61, 62, 25, 29, 41, 3,251,100,106,213, 45,163,236,184, -202, 75, 30,121, 76,247,107,122,250, 13, 85, 80, 91, 10,154,126,234,224,127,234,133,195, 16, 61, 52,194, 93,248,104,253,203,254, -122, 50,175,238, 89, 37, 64, 44, 28,178, 76,179, 43, 49, 48,117, 14,249, 32,122, 5,238,201,104,215,201, 5,151, 48,123, 21, 67, -146, 37,222, 43,246, 56, 42,137, 21, 0,173, 21,195, 62,166,216,244, 7,110,134, 67,145,131,155,232, 88, 31, 89,198,147, 2,114, -154,138,207,227,165,153,237, 89, 78,113,146, 92, 82,166,101, 98, 5,215,109, 2,207,157, 52,103, 44, 20,191, 6,244,102,113,190, - 9, 73, 72,186, 28, 1,156, 15,151,219, 79, 95,174,184, 42, 18, 5, 3,191, 89,191,189,190,251, 46,228,128, 24,129, 40, 71,165, -226,168,202,245,147,169,187,161, 21, 2, 19,219,170, 58,173, 11,194,112,220,106, 4,135,187,135, 45,165, 56, 84, 98,205,210, 83, - 59,155, 87, 4, 20,118, 15, 59,194, 99,117,223, 38, 97,194, 59, 98,156,163,223,215,141,155,132, 11,189, 48,131, 25, 14, 97, 32, -203, 5,131,156,129, 44, 60, 6, 58,254,152,112, 38,221,207, 80,215,186, 36,114, 53,228,223, 85,121,254,208,252,146,238, 95,122, -154, 93,117,162, 99, 35,111,250, 43, 0, 97,215,178,219, 68, 16, 4,103,102,223,118,214,198,113,156, 40,201, 45, 39, 46,136,136, - 3, 7,190,158, 3,127,128, 32, 55, 16, 8,132,130,140,157,248,181, 30,239, 99,232,234, 30,239, 90,216, 18, 81, 14, 81,162,181, -156,241, 76, 79,245,163,170,186,248,174, 79,202, 88,239, 65, 73,112,176, 65,181,119, 70,195, 15, 33,179, 21,196,100, 29,140, 6, -199,227,134,134,130, 74,116,155,221,102, 97, 90,122, 17, 56,105,198,154,189, 48,116, 50,136,147,210, 69,121,154,246, 76, 66, 59, -230,211,236, 97,229, 22, 97, 16,206,215, 51,220,231, 20,226, 9,214,121,173,247,102,152,141, 10,168,254,219, 86,171,154, 89,133, -218,120, 29, 63,169, 28,170,113,255,188,110,236,118, 87,162,228, 7, 24, 98, 64, 47,245, 45, 35,202,187,144, 51,134,172,239, 76, -171,129,208,111,226, 55,119,175, 62,127,127,136, 76,248,238,229,219,247, 31, 63, 0,188,243, 48,231,253,221,235,111,191,127, 60, -109, 23, 80, 23,225,178,106,197, 87,183, 40, 88,170,160, 42, 71,197, 82,209, 27,135, 65,118, 89, 85,180, 4, 9,122, 17,176, 99, - 5,178, 70, 49,154,115,142, 90, 21,117, 19,248, 86,180,102, 59, 73, 24,201,210,170,220, 76, 46, 34,138,183,168,228, 64,172,166, - 40,154,181,221,174,119, 59,218,165,121, 63,154,228, 89, 36,227,234,104,225,214,118, 91, 33,143,230, 95,173, 45,161,144,184,224, - 62, 40, 5,124,122, 53,107, 45,189,204,134,110, 36, 8, 62, 66,231, 29, 16, 7,231, 88,165, 73, 99, 98,183, 89,171,249,170,170, -108,147,169, 96, 16,224,223,239,153,144, 46, 24,250, 0, 55,174, 0, 75,184,214, 48,193,193,177,195,179, 53, 28, 18,240, 49, 72, - 66,236, 43,100, 12, 37,235,125, 17, 35, 11, 51, 41, 95,166,156, 72,182,106,239,199,226, 72,109, 1,113,143,199,149, 62, 42, 27, - 30, 6, 65, 8, 36,107,186,222, 10, 62, 33,126, 54, 35,141,123,118,231, 13,137,246, 65,188,165, 20,249,109, 73,136,137,249, 50, - 39,105,222,210,182,114, 57, 40,227,203,150,140, 41, 70,222, 57,232,169,139, 56, 76,243,100, 56, 91, 79, 59,114, 95, 39,162,128, -235, 57,142, 99, 49,156,105,103, 68, 29, 51, 42,216, 43, 85, 31, 14,171, 12,123, 47,158,139, 39,125, 36, 51,210, 9, 29, 75, 29, -161, 5,109,238,136,149,238, 36,178,186,241,224,114,190,252,163, 15,227, 59, 47,245,213,224,122,186,122,236, 56, 4,218, 19,166, -216,207, 70, 14,166,230, 94,130, 17,145,223,136, 57,165, 81, 24, 70,220,121,162,116, 48,134, 43,169,239,133,166, 16,162,214, 35, - 19, 93,230,201, 69, 63,152,156,197, 89, 4,110, 7,192,145, 81,144, 51,218,213,171,162,126,222,170,185,117,207,133,158, 90, 12, -213,114, 59,157,161, 56,219,211, 54,226,149,166,188, 73,147, 39,178, 58, 35, 49,161, 29,119, 19,188, 76,127,188, 25, 93,127,121, -252,170,184,206,137, 93,167, 56,190,115,148,151,130, 76,201, 58, 50,182,222,209,183, 55,135,208, 18,113,133,149,138,229, 59,203, -114,202,138,230,128,201, 93, 38, 36, 42,179,141,104,165,112,201, 28, 58,180, 24, 59,227, 9,102,173,246, 81, 91, 2,119, 51, 25, - 92,173,236,114, 99, 55,172, 92,139,146, 42,246, 91, 89,240,179,210, 45,231,137,111,166,180,182, 69, 20,167,187,188,243, 8,103, -187, 14,115,248,108, 81, 32,249,191,142, 8, 34,211, 68, 71,131,224,194,121,111,252,107,241,147,171,106,129,152,125, 59,255,148, - 59,233, 98,255,223,175,191, 2, 48,118, 53,189, 77, 3, 65,212,107,123,215,137,211, 52,105, 75, 69, 20,218, 94,123, 64, 66, 66, -226, 39, 32, 14,156,248,155, 61,112,224, 79,112,226,130, 84, 9, 14, 8,113, 64, 21, 45, 65,224, 58, 78, 98,239,218,203,188, 25, -111,211, 15, 33,161, 94,218,170,173,210,216,158,125, 51,243, 62,250,250,254,176,141, 85,234, 62,204, 9, 83,154,184,231, 42,245, - 3,181, 68,138, 61, 51,181,212,116,116,176, 90,149,188,123, 71,151, 51,213,187, 71,163, 57, 76, 89, 91,224, 66,195, 28,119, 58, - 24, 7, 9,210,164, 35,100, 98,232,202, 94,127, 92,156,111, 64,115,142,172,111, 38, 59, 7,139,226,202, 69,141, 16,156,124, 72, - 93, 17,245, 68,220, 75, 66,152, 50,197,196, 95, 20,111, 22, 32, 76,178,221,132,221, 45,192,231,166, 99,153,106, 68,130, 14,145, -138,133,166,226, 78,183, 53,125,194,123,252, 73,190, 59,219,123,252,253, 18,154,166, 9,225,208,166,162, 99, 41, 51,131,117,189, - 62, 61, 58,253, 81, 92,253, 90, 46, 28,107,178,197, 52,154,179,126,173,197, 22, 9, 35,113,186,177,102,211,121, 89, 23,157,169, -203,172,132, 97,151,109, 21, 75, 21, 26,139, 51,152,202,236, 48,139, 51, 77,149, 23, 90,201, 21,114, 10,124, 16,207, 18,166,198, - 57, 55, 76,146, 71,249,240,170,107, 58,182,234,243, 48,230,109, 43,122, 41, 13,138, 44,213,246,249, 52,159,140,147, 84,131,192, -110,157,183, 72, 10, 6,193, 43, 51, 9, 61, 74,141,139,202, 37,129, 15, 13, 21, 43,221,134, 43,203,239, 56,184, 53,212, 29, 81, -117,174,157,175,241,136, 68,218, 68,212, 39, 88, 11, 1, 20, 29, 81,155,186, 19,171, 44,106,172,156,109, 76,155,238,164,113,158, -154,220, 24, 57,168, 26,203, 97,243,108,194,141, 42,239, 48,144,199, 60, 45, 49,107,137,188,241, 50, 57,161, 10,146, 58,239, 30, -110, 62, 5,139,220,205,114, 10, 35,197,116, 56,155, 30,127, 93,124,166,139, 56,210,227,202,150,234,159,246, 71, 42, 8, 67,182, -155, 33, 38,192,192,133,181,236,241,190,186, 87, 55,217,234, 25, 91,214, 12, 33, 45,120,251,117,146,219,118,163, 65,197,115,188, -186,236,115,116,111,194,140,160,216, 72,244,147,253,147,111, 63,191,132,152,151,196,223,157,105,246, 33,118, 2,109,183, 80, 41, -190,157,248, 17, 5,226, 47,135,230, 50,102, 19,184, 42,162, 2, 33,208, 49,195, 50,211, 25, 28,123, 32,200,188, 57,249, 90, 21, -188, 21,212,214, 64,205,208,247, 96,255, 16, 30,177,109, 22,135, 68,167,241, 32, 49, 14, 91,168,168, 15, 54,194, 0, 52,229,175, - 37, 99, 73,227, 17, 1, 90, 39,156,110,176,110, 34,236, 5,245, 30, 99,246,216, 40,189,175,211,217, 88,159, 76,243,227, 67,115, - 48,201, 16,226,204, 99,103,134,201, 80,186,120,145, 49,203,152, 34, 98, 47,198, 54,186, 94,186,139, 63,221,101,161, 23,117,180, -168,109,204, 35,101,223,135, 4,138, 39,113, 44,204, 11,214,172,198, 97,112,177,149, 28,135, 5,157,160,255, 78,134,239,104,219, -249, 74, 1,197,163,191,180, 84,250,115, 51,124,249,252,213,217,251, 51,239,133,245, 16,202, 2, 54,177,135, 69, 85, 56, 56,241, - 42,161, 70,201,202,146,126,100,111,188,255,187, 42,144,254,198,116, 49,250,197,161, 25,117,173, 93, 49, 67,180,183, 25,231,255, - 81,166, 46, 12, 37, 64,131,167, 94,154,206,189,141,165,199,186,238, 71, 55, 97, 60,233,165,109,242,138,254,212,186, 89, 13,210, - 65,213, 44,111, 39, 31, 16,214,217, 88, 92, 89,163, 7,116,170, 85,125,206, 95,199, 31,236,183,168,212,253,233,138,239, 94,191, -120,243,238,195, 91,234,169, 92,228,158,206,159,125,186, 56, 15,113,222,219,120,178,126,233,138, 50,204,154,220,255,171,242,127, - 5,160,235, 90,150,147, 8,162,104,207,123,152, 33, 72,120, 24,130,198,108,140,223,144,242,195,173,114,229, 66, 23,110,253, 1, -173,148, 1, 9, 68, 66,128,129,121,244, 76,123,207,237, 30,153,160, 73, 85,166, 88,144,240,232,158,251, 56,125,238, 57,255,137, -239,214, 51,222,218, 78,115,116, 16, 61,154, 19, 5, 45,215,118, 55,187, 53, 58, 59, 37,248,108,207, 7, 73, 70, 0, 71,232,198, - 93,152, 28, 42,209,246,218,227,120, 76, 87,170,248,124,219,215,118, 74,244, 46,151,233,253,175,228,254, 49,125,192,253,192, 99, -226,102,105, 33, 26,206,173,150, 14, 23, 74,155,176,215,179,215,156,165, 59,173, 14,232, 74,240,253,226,205, 92,169,113,127,156, -236, 55, 57, 4,245, 81, 80, 49,211, 11, 66,240, 28,214,161,102, 12, 29, 94,199,245,225,151,135,114, 94,211,114, 41, 88, 8,232, -207,129,146, 88,241, 95, 73, 70, 5, 11, 72,187, 74,141, 78, 20, 85,241,102,112,113,117,126,245,225,219, 71,215,243, 74,156,244, -182,179, 50, 77,101, 78,251,182,213,145,241,144,182, 76,150,231,106,135,115,101,149, 82, 89, 43, 21,128, 76,136, 1, 8,200, 94, -195,236,212,245,232, 97,165,241, 77, 86,239, 17,246,167,197,212,245,125,128,156, 92,235,100,178, 40,192, 62, 42,227,208, 59,235, - 70,173,208, 97, 67, 44,214,172, 22, 50,240,236,118, 20,218, 40,168,243,209,104,116,253,254,122,216,239,125,254,242,149, 50,209, -247,155,159,147,219, 91,215,243,217, 55,187, 76, 51,153,236,101,206,245, 78, 16, 88, 1,200,154,212,158, 43,207, 19,212, 30,100, - 82,108, 19,177,217, 85, 90,220,102, 79, 25,133, 62,109, 33, 99,215, 9, 41, 28,176,240, 26, 40,165,244, 11, 33,110,197,160, 60, -159, 76,153, 9,114, 97, 68,155, 27, 20, 46, 38, 71,158,100,249,142, 58, 8, 10, 26,227,238,232,102,249,195, 62, 46,210,141,118, -136,101, 14,102,155,225, 76, 29,177,196, 66, 47, 74,139, 29,189, 68, 39,164,133,166, 93, 84,210,206, 25,156, 12, 38,143, 19, 29, - 42,168,247,162,118, 88,203,147,169,122, 0,226, 52,234,109,247, 43,206, 58,172,187,219, 60,118, 84,199,133,188,198, 94,232, 63, - 83,208,203,181,114,239,209,105,170, 16,181, 22,152, 49,105,172, 89, 26,205,200, 94,147, 55, 44,230,199, 83,137, 19,245, 41,242, -254,222,204, 13,255, 25, 32, 87,121, 57,120, 59,123,156,102,114, 79,129,226,188,251,106,182,156,218, 60,246, 64,105, 51,246,226, -117,186,122,170, 30,168, 71, 76,173,195,208,149,168, 69, 94, 12, 62,163, 80,139,235,124,163, 88,216,139,203,118,125, 88, 74,109, - 30, 2, 58, 74,115,234,132,168, 84,135,199, 11,149, 86, 80,170,176,232, 74,187,208,163, 91,117, 20,248,175, 95,196,239,206,194, -139, 97, 28, 4,142, 6, 18,176, 66, 26,240,193,133, 39, 76, 57, 87, 49,238,129, 83, 41,186, 82, 89, 0, 44, 69, 86,250, 58, 95, -139,187,149, 59, 75,220, 85, 81,229,178, 52, 83,163,160,252,162,129, 84, 79,165, 17,254, 46,184,225, 59,131, 21,169,211, 7, 76, - 56, 37, 11,250, 2,158,101,136,144, 30,198, 17, 24,183,139,245,188, 98, 43, 55, 54,164, 54, 78,123, 6,163, 49, 29, 33,222,180, -201,201, 12,163,232,123,153, 85,228,240,156,211, 86,127,149, 62, 20, 84, 37, 89,198,199,134, 3,118, 89, 35,239,135,172, 13, 78, - 38, 26, 31, 28, 28, 80,193,167,221,203, 74, 13,170,225,165, 57,125, 24,150, 37, 44, 6,153, 75,124, 24,239,136,131, 56, 73, 19, -254,158,208,224,178,253, 90,165,221,166, 40,197, 82,127, 32,142,161,123, 32, 84,189,246,203,197,246,206,181, 52,111, 66,127, 34, -132, 91, 54, 8,111,146,251, 43, 90, 73, 40, 98,254,195, 92,120,238,231,143, 0,116, 93,237,106, 19, 65, 20,221,217,239,221,100, - 99, 99,147,210, 20, 74, 43, 84,193, 31, 5,169,130,224, 27,136, 15, 33,232,203,168, 79,164,207,160, 22, 17,127, 8, 42, 90, 69, - 83, 76, 90,226,214,205,126,207,120,239,153,221, 77,137, 52,255, 66,126,236,236,102,246,206,185,247,158,123,142,230,207, 24,151, -140,178,196,149, 2, 99,170, 61, 49, 4,139,182, 19, 68,138, 51, 22, 85,167,251,191,127,235,193,219, 47,175, 45,216,239, 54, 54, - 46,202, 12, 93,191,230,238,135, 9, 73, 54, 19, 32,218, 97,189, 46, 28,218, 92,218,208,186,100,208,149, 97,176, 40,116, 77, 70, - 53,130,239,178, 97, 16, 69,254, 32,206, 99, 91,172,234,254,252,254,219,222,176, 63, 60, 93, 76, 61,118,229,214,196, 90, 46, 30, -162, 89,196,147, 23,119,246, 15, 63, 79, 63,217,138, 97,252,192,139, 70,209,230,214, 96,244, 99,126, 66,155,198,129,115,163, 3, -225,247,107,193,128,197,226, 49,153,169,181,230, 32,103,166,186,130, 32,227,119, 85,211,229,110,238, 28, 28,127,123,207,102, 76, -104,220, 75, 30, 26, 20,147,104,231,235,217, 9, 84, 10, 40, 96, 75,155,194,168, 93, 14, 55, 5,215,136, 20,247,148,226, 88, 20, -165, 85, 21, 38, 33,123,194,117, 4,154,199,253,201,175,100, 90, 50,180,180,102,214,194, 12, 92,237,236,206, 82,154, 20,147,141, - 58, 41,233,114,214,246, 70,132,177, 35,204,158,216, 22, 37,168, 33, 19,234,121, 63,221,187,123,244,248,201,211,189,219,135,132, - 2,103,223, 63,142, 39,187, 23,243,217,139,103,207,223,188,251, 80, 85, 86, 14,244,157, 51, 59,175,102, 6, 43,106, 87,116, 75, -244,232,195,158, 17,122,116,184,169,116,105,164,153, 72, 50,150,151, 40,180,211,170, 2,234, 47,104,129,132,112,202,208,224,110, - 57,125,173, 56,115,145,204,130,111, 64, 16,106,242,141, 20, 8,170,103, 70,167,150,205,125,234, 10, 50,235,142,237,103, 85,106, - 94, 57, 97,183,238, 52, 77, 15,249,122, 56, 58, 95,206, 91,141,114,254, 55,125, 39,168,170,188,231, 71,152,245, 23,114,229,176, -129,158, 63, 39,130, 65, 59,205,212, 68, 13, 74, 13,233,208,221, 27,223, 56,255, 51, 35,120, 37, 90,130, 64,183, 14,223,241,147, - 50,209,139,247,108, 15, 58,148,249,255,238, 75,186,208,106, 94,170,106,210, 2, 92,215, 99,217, 90, 30, 75,233,164,181,120, 41, - 4,255, 43,152,120, 52,237, 51,176,182, 49,182,171,233,139,220,246, 12,189, 40, 43, 19,138,157,174,227,210,246,214,158, 51, 92, -242,195,232,118, 89,151,151,219,194,109, 3,192, 92,227,222,116,241,157, 91,166,144,221,164, 7, 78,183, 44,235, 2,109, 76,225, - 96,234,157,125, 93, 44,238, 57,247,253,200, 84, 41,237, 88, 23, 90,189,156, 50,155,246,142,239,238,110, 4, 7, 91,189,253,237, -190,227,182, 2,124,252,150, 64,159, 79, 11,115,115, 63,202,113,252,192, 13,250,102,175,111,219,190,176, 61, 5, 75, 82,238,210, - 83,150, 90,228, 69,182, 76,226, 56,253,187, 72,147,139, 44, 79,227, 11,245,243,204,251,189, 12,166, 89, 97, 1,172, 50,150, 55, - 44, 28, 91, 66,151,161,117,140,105,243, 51,176, 29, 81, 8,208,108,247, 82,187, 45,203, 58,135, 29, 7, 95,136, 83, 48, 9, 94, -141,130, 24,117,199,159,129,183, 44, 60,226, 69,211,216,111,254,223,186,157,212,165,223,182, 55, 38,211,197, 41, 39, 28, 24,120, - 96,185, 50, 77,162,209,180, 74, 93,106,105, 27,163, 58,170,202,118,187,128,153,175,217,193, 10, 3,204, 85,133, 72, 77,176,157, - 18, 47, 48,124,154,201,100,169, 33,185,108, 41,150,224,107,210, 93, 60, 60,122,244,234,248,101, 67,183, 2,226, 22,114, 37, 13, -177, 54,122,214, 14,108,137,174, 3,171,186, 83,176, 27,231, 90,189, 44,114,221, 81,231,234,207, 63, 1, 24,187,150,157,184, 97, - 40,106, 59,118,226, 56,201, 4, 24, 94, 2,132,212,130, 42, 42,212, 85, 63,128, 31, 40,127,209, 69,165,254, 41,203, 34,245, 11, -232,131, 82, 24,152,247, 76, 98,167,247, 94,219,211, 17,101,209, 93, 22, 8,101,198,119,174,239,227, 60,130,190, 88, 18,148,148, - 66,144,249,201, 93,178, 38,212,231, 21,148,178,180,176,182, 65,170, 42,124,245,212, 96,122, 15,244,155,251, 27,116, 63, 39, 98, -243,202,100, 6, 61,154,253,117, 26,149, 30,113, 60, 12,167,197,172,206, 50,114,220,118,116, 94,214, 75, 62, 33,184,195, 67, 19, -169,245,242,213,140,209,197,180,157,121,123,235,136,121, 15,214,169, 39,123,167,191,134, 63,115, 85, 64,202, 35,102,154,247,247, - 8, 86, 50,247,163, 59,248,245, 40, 90,223,195,129, 46,230,211,253,205,221,233,124, 10, 85, 1, 52, 22, 34, 50,105,209,191,139, -181,164,196, 17,134,119,190, 15,117,193,159,129, 81, 82,179,208,115,125,123,252,225, 9,131, 34, 86,153,117, 94,223, 14,111,233, - 56,221,220,182,147,133, 29,207,218,225,152,119,211,106, 48,224, 15,131,238,110,192, 21,223,251, 61, 26, 47, 45,105, 66, 73,181, -180,243, 97,243, 8, 47, 0,229, 63,119, 66, 85,203,188, 34,238, 72,130,218,108,132, 35, 99,169,132,230, 46,233, 25,165,241,237, -165,206,164,201, 83,142,176,250,110,103,171,119,121,249,225,227,167,207,208, 78,184,249,119,206, 22, 79, 15,183, 95,175,175,142, - 79, 78,123,133,190,254,114, 85,247,116, 89, 72,244,249, 86,180,117, 38,110,150,107,125, 49, 37, 89, 39,145,159,213,184, 84,118, -101, 1, 93, 8,250, 76,149,218,188, 63,127,155,184,238,225,105, 36,152,130,214,212, 24,104, 78,151, 10, 49, 26,137, 55, 69,203, - 16,254,131,145, 13,207,144, 53,224,232, 3,235,145, 10,237, 6, 97, 27,193,128,197, 71, 30,109, 92, 88,174, 76,235,220, 26,219, - 6,229, 82, 87, 10,101,124, 13,218,232, 35,166, 69,174,246, 10,197,136, 23, 13, 4,204,162, 89,136,104, 73, 1, 33, 73, 82,121, - 45,165,123,184,197, 90,191,248,132,207, 97, 32, 12,220, 50, 88, 12, 66, 14,110,103, 18, 27, 54,233, 80,179, 26,158, 36,129,249, - 81, 38,172,151,111, 64,115, 66,101, 5,198,222,179, 73,123,144, 35, 97, 46, 83,169,103,208, 28,110, 31,163, 87, 39, 46, 52, 49, - 22,196, 90,114,247,146,123, 61, 83,119,228, 64, 43, 88,244,121,236,216,217,225,249, 8,170, 31,228,178, 98, 29, 64,104, 64, 44, -107, 81,162, 93,144, 74, 97, 32, 38, 68,149,206,181, 58, 23,178, 48,210, 41, 5,243,120,152,238,175,208, 0,102,118,149,164,196, -218, 69, 18,166, 36, 7,100,137,235, 46,172,208, 53,121,135, 25,201, 77,170, 42, 5,205,114,162, 21, 60,139, 50, 73, 15, 10,243, -110,167,190,120,213,191, 56,235,191, 57, 44,183,106, 76,237,240,219, 80,208,209,102,105,154,226,172, 38,193, 5, 26,124,149, 85, -177,119, 84,238,191,214,187, 71,162,232,219,164,156,217,100,222,176, 49, 52,133, 75,135, 86,189, 86, 54, 66,243,172,202, 54,118, -138,254, 65,181,125,100,170, 45,173,217, 70, 62,169,213, 44,117,186,237, 52, 14,226,133, 31,118, 5,104, 77,180,228, 92,177,185, -240, 15,182,203,254,148,244,197, 86,170,106,109,112,210,115,113, 64,193, 98,115, 70,179, 33, 22, 8, 25, 46, 94,175,252, 69, 33, - 35,202,214,227,217,196,219, 4,113, 30,111,107, 95, 59,115, 14, 49, 76, 16,203,142,173,188,197,131, 47, 74, 24,170, 33,147, 13, - 93, 72, 55,113,174,128, 83,123,231, 29, 64, 40,173, 53,158,147, 76,171, 84, 75,240,162,160,188, 72, 43,193,160,141, 1,197,101, -139,226,197,225,223, 5,115, 15,254,130,212, 82,164, 73,241,127, 65, 50,225,117,159, 19,157,186,255, 87, 34,251, 35, 0, 93,231, -210,219, 52, 16,196,113,123,237,172,227, 36,117, 9,180, 69,180, 85, 91,160,164,128, 56,161,150, 51, 31,132, 3,220, 17, 7, 14, - 72,240,105,144,224,163, 32,113, 69, 80, 68, 81,197, 75,106,147, 86, 52,164,228,101,199,187,222,101, 30,118,226, 84,226,152, 72, -177, 20,123, 61,143,255,204,252,198,119,102,144, 79, 60,103, 60,193,133, 73,146, 59,173,166,154,105, 18,160,241,191, 49,243, 34, -255, 9,158,210, 66, 92, 67,209,142, 90, 74, 24, 67,161,209,147,105,204,112,177, 46, 13,193, 43, 85,251,141,219,140,150,134,227, - 33, 74,102,150, 58, 12,105, 65, 51, 35,252, 51,118,160,243, 43,190,221,162, 3,204, 22,221, 96,240,120,193, 76,124, 63, 57,140, -194, 38,132, 63, 9,153, 0,103,198,243,161,247,140,122,111, 93,198,209, 88,179,189,214,250,113,250, 19,226,193,170, 47,177,189, -145, 70,106,139, 21,239, 40, 23,150,215,132,154, 98,210,146,161, 55,240, 56, 91,171, 59, 39,189, 78, 53,104,128, 71, 97,222, 39, - 60,251,165,229,213, 68,103,131,184, 7, 23, 88, 95, 92,111, 4,209, 65,103,127, 37,186,218, 27,225,186,119, 48,203, 16,100,117, - 71, 29,156,252,198,240, 57,132,196,182,234,133,144, 70,107,140,238, 61, 10,225,221,122,221,213,129,128, 63,158, 76, 72, 82, 36, -123, 19, 72, 52,208, 84,158, 66, 79,166, 84, 6,135,232, 94,107,251,209,147,199,119,247, 30, 58,142, 84,163,206,231, 15, 31, 55, -175,111,189,121,253, 54,172, 6,231,189,120,119,247, 65,212,168, 97,164, 19, 59, 4,143,196, 80, 70, 40,238, 87, 23, 57, 99, 27, -110,119,170,183, 54, 55,238,180,214, 50, 92, 96,100, 15, 14,191,101, 86, 62,127,250, 12, 30,250,139, 87, 47,187,253, 62, 70, 59, - 89, 26, 53,196,224, 79, 34,226,138, 20,209,192,254,165, 93,199, 19,242,158,112, 2,180,172,212, 82, 21,243, 61, 34,126, 58, 90, -246,208,175,199,122,228,150, 30, 3,216,215,212, 41,247,252,130,111, 71,180,250,212,228, 87,132,208, 38,231, 20,197, 58, 14,249, -178, 51,233, 6,149, 80, 77,254, 0,155, 85,144, 69, 28, 67,232, 88,192,194, 4,193,181,251,200,166,199,118, 58,205,134,217,163, -118, 55, 76,207,125,206,161, 77, 45, 92, 24,196,125,131, 21,117,159,210, 20, 85,126,183,120, 0,187,204,164, 52,142,170,201, 5, -244,253,168, 19,138,118,247,248,162, 32, 99,121,237, 48, 10, 55,144,141, 78,112,189,156, 17,249,148,190,149,190,132,207,237,238, - 17,184, 67,143, 86, 82,243,210, 1, 82,171,104, 30,159, 26,147,120,139,100,226,196,132,255, 18, 37,208, 20, 10,208, 52, 54,124, - 17,219, 46,114,136,143,113,153,199, 78,163,226, 30, 1,148, 2,220,122,231,134, 62, 56,108,240, 13, 8,115, 69, 93, 18,178, 34, - 25,110, 44,134,183, 87, 22,110, 92,171, 99,162, 75,122, 72,154, 25, 41,112, 17, 60,154,117,172, 73, 81, 84, 7,153,118, 16, 86, -154,171, 94,237,146,114,196, 56,209, 73,127, 56,153,192,185, 80, 62, 81, 0,176, 68,153,231,181, 22, 77, 4, 47,109, 2, 15, 1, -151, 8, 46, 55,214,154,225,210,184,113,126, 26,253, 62, 94,105,171,163,243,168,157,164,240,162, 49,213,149,103, 1,140,157, 51, - 81,112, 35,206, 70,103, 92,208, 67,225,131, 42, 22, 97, 80,221, 89,222,252,244,107,159, 12,252,148,196,104,243, 25,245, 57,120, - 52,247, 17, 22,177, 2, 87, 62,139,105, 52,143,194, 74,176, 15,221,113,143, 12, 46,195,128,105, 65,135, 49,227,100,104,221, 98, - 10,214,157,141, 53, 48,154,211, 35,202,189,114, 85,170, 18,236,104,179, 54, 87,172, 16, 16, 21,108, 93,185,121,112,252, 69,250, -149,251,183,246,222,127,125, 71,223, 27, 94,193,152,203, 78,214,130,135,206, 50,164,147,194,205, 81, 58, 43,163,179,237,255, 6, -193,113, 73,114, 64,217,228, 69,134, 16, 89,218,140,101, 29, 41, 42, 52,164,157,205,251,130,255,134,240,255, 4, 96,236,106,122, -155, 6,130,168,215,246,218,113,154, 15,170, 38, 77, 91, 36, 10,162, 23, 78,136, 11, 23, 62, 46, 72, 32,161, 82, 84,113,132, 75, - 37,248, 33, 32, 78, 61,114, 0,241, 91, 16, 18, 20, 90, 9,144,224,130,132,138,144, 16, 81,155,146,180, 33,181,155,250, 99,215, -241, 50,179,187,118, 83,224,192,185,177,147,106,103,119,222,206,188,121,207, 46, 42,247,146, 7,141,204,187,145,145, 42, 61, 88, - 67, 28, 27,176,181, 41,141,184, 86,169,151, 18, 33,153,121,148, 48, 69, 94, 50, 84, 55,158, 76, 72,126,155,170,161, 99,116,100, - 68, 13,117,194,199,186,126, 7, 80, 88,138,223, 50, 42,200,165,170,117, 54,110, 56,174, 50, 30, 94,192,165,145, 82,166,167,208, - 17,241, 64, 72, 78,213, 91, 41, 79,208,243, 65,155, 87, 8, 69,169, 51,198,180,171, 52, 27, 75, 86, 21,155,181,198,174,223, 67, -238,128, 97, 70, 44,150, 77, 78, 75, 10, 42,104,131,191,217,250,236,246,160, 99,232,169, 13,145,106,102, 32, 22,210,234,110,125, - 55,216,163,182,227, 71,251,243,173,179, 61,191, 11,144,233,222,221,251,151,150,174, 61,121,180,186,241,254, 37,164,244,237,254, -182, 71, 7, 51,181,147,167, 26,167,183,246, 95,195,230,130,109, 15, 48, 65, 38, 60, 76, 93, 56, 51, 93,155,105,239,111, 17,194, -225, 84, 65,255, 79, 54, 28, 12,178, 93,206,241,234, 98,144,152, 1, 86,101,152,201,144,153, 38,231, 71, 9,155,107, 53,187,123, - 97, 18, 39, 15, 86, 86,110, 45,223,113,106, 45,248,239,118,190,127,110,127,219,156,158,107,193,246,107,183,187, 15, 31,175,190, - 93,123, 69,233, 84,191, 63, 2, 36, 54,140, 15, 32,248, 28, 8, 4,219,177, 57,122,188,114,134,109,232,178, 83,250, 21,248,140, - 25,139,215,111, 46,222, 94, 10, 6, 3, 88,193,103,207,159,126,248,248,169,215,235, 92,185,177,124,241,194,249, 23,111,214, 97, -195,114, 44,219,152,149, 42, 9,120, 8,215,102,120,155, 84,207, 29, 73,104,108,241, 44,182,137, 91,152,177, 99,185, 39, 19, 76, -164,174, 3, 32,146,132,236,176,136,187,131,100, 56, 30,125,174,229,100,154,216, 75, 10, 43, 52, 19,219,128, 84,169,239,146,236, -136,147, 46,183,179, 5, 89,188, 96,239,166, 90,190,180, 48, 72, 19,135,120,184, 43,228, 51,162,150,203,242,243, 35,225, 33, 60, -204,229,124, 0,252, 21, 86,100,114, 98,114,253,203,154, 50,121, 64,225,232,177,115, 6, 41, 79,163, 44,135,125,178,129, 47,200, -229,115, 87,223,125,221, 16,220, 48,201,177, 34, 9,172, 14, 22, 88,217,161, 82, 81, 52, 81,238,202,194, 61, 41,180, 89,180,156, -207,162,148,240,144,133, 38,202, 73, 33, 70,175,186, 53, 63,246, 97, 57,224,212, 38, 88,160,107,254, 12,118,144,149, 4,104,195, -114, 35, 35, 33, 25, 25,155, 67,213, 53,147, 44,247,198, 82, 84, 26,249, 50,169,147, 40, 65, 16,202,157, 98, 19,194,118,109,211, - 5,228,142, 62,153,212,179, 80, 18, 3,128, 1,172,196,153, 74,121,161, 49,177, 48, 91, 61, 81,161, 72, 55,132, 59, 75,108,200, - 66, 34, 98,252,146, 99,123,232, 30,137,117, 29, 93, 26,168, 55, 41,236, 41,226,132, 49,139, 67, 38,219,252, 2, 62, 70, 75,110, -201,149, 51, 34,232,238,128,137,148, 37, 44,100, 60, 12, 89,196,211, 56, 73, 34, 17, 35, 13, 7, 78, 7, 74,237,169,249, 70,117, -218,171,183,203, 63,250,206, 78,169,141, 70, 70, 82,191, 59, 85,186,144,202,211, 67, 11,239,232,225,104,162,228, 47,180, 42, 28, -227,108,179,179, 41,242,241, 81,114, 52, 29,244, 71, 7, 5, 23, 77, 57,161,231, 19,201, 2,208,128,231,122, 1,154,181, 41,194, - 51, 38,209, 90,169, 58,132, 56, 20,138,221, 42, 29, 61, 45, 41,143,165,154,224,249, 48, 68,165, 84,131, 60, 19,132, 62, 60,235, - 57, 30,242,115, 88,134,137, 19, 30,143,134,242, 7,226, 78,134,251,183,188,252, 73, 61, 17,101,190, 42, 91, 65, 16, 3,150,180, -130,134,181,153,112,202,240, 11, 99, 17, 33, 61,225,175, 90, 12,132, 1,188, 33, 87, 3, 24,227,251,252, 99,112, 66,140,155,155, -170, 88, 82, 12, 52,243,191, 29,157,126, 11, 64,217,181,172, 70, 17, 68,209,174,238,234,119,247,188, 53,131, 73, 52, 9, 4,141, - 10, 14,110,220,184, 16, 87,226,210,133,248, 21,238, 93, 9,234, 23,184,114,225, 87,232, 70, 3,162, 8,162, 34, 6, 84, 4, 29, - 33,234, 68,124, 48, 73, 72, 39,243,232,119,123,239,173,202, 76, 7,220, 72, 22,129, 64,146,238,233,174, 83,247,220, 58,247, 28, -233, 63,211,114, 15,145,153, 6,220, 64,156, 83,107,169,102, 55, 45,221, 0,158, 59, 41, 32,160, 56,104, 16,159, 98,172,124,176, - 86,150,251, 76, 7,170,165,140,121, 58,220, 78, 37,186, 56,182,102, 10, 20,131, 88,150,102,233,190, 85, 51,126,183, 13,151,161, -132, 60,221,215, 41, 8, 90,135, 79,193,119,170, 68,175,138, 35,181,249, 24,181, 33,184,126,162,116, 76,131,142,136,200, 53,183, -145, 83,178,138,140,181,160,133, 41, 70,153, 84,188,151, 74,175,191,145,103, 25,190,207, 76,243,128,205, 3,102,161, 11, 20, 86, -249, 98,199,106,250,173,237,193, 14, 92,141,107,187,137, 8,247, 34, 70, 34,114, 45,134,225, 48,136,134, 81, 28, 37, 41,128, 42, - 84,145, 69,231,244,217,133,206,202,218,139, 87,189,141,175, 88,251, 51,160, 20,209,206,104,183,183,213, 35, 68, 3,154,236,216, -134, 55, 8, 7,128,129, 77,127,102,115, 15, 21,172,163,120,128,242,243, 34, 25,211,112,102,172, 36, 35,150, 39,116,142, 28,166, - 34, 85, 24,159,116, 12,127, 47,227,240,159,110,221,188, 13,165,157,105, 89,215,111,220,217,221,238,119,223,191,109, 31, 93,250, -240,250,121,251,216,210,226,201,115, 94,189,181,250,240,193,194,226,242,102,127,123,118,126, 33,137,179, 43, 87,175,117, 63,173, -107,204,238,111, 6,182,101,135, 33,188,100, 69, 28,231, 71,231,230, 59,103, 58,239, 62,118,147, 36, 61,117, 98,249,209,227, 39, -119,239,221, 95,125,250,236,243,151, 31, 91,193,168,102,251,231, 47, 94,214,178,241,218,155,151,245,138,171, 98, 41,161,192, 85, -193, 34,137,195, 20, 83, 54, 21,209, 58,147,182,114, 20, 89, 89,200, 99, 55,172, 38, 16,138,194,100, 4,251, 28,192, 75, 94, 76, -135,146, 4,203, 54, 53, 83,238,193,249,164, 23, 33,222, 6,212,141,168,170, 78,211,152, 36, 92, 43, 5, 33, 89,186,153,231, 73, -121,146,154, 18,141, 19,118,192,132, 82,149,199,157,100,228, 42,222, 84, 64, 61, 49, 40,219,240, 26, 81, 26,254, 14,126,109,244, -191, 17,166,112,234, 67, 22, 69, 49,117, 74,151, 29, 36,234,233,105,251,217, 15,223,255,172, 71, 69, 66,186,113,106, 59, 11,220, -215, 68,143, 21, 97,130,180,134,232,245,134,228,149,230,135, 68,219, 21, 8,110,140,112,175,144,220, 91, 17,159,150, 48,214,206, -242,204, 50, 44,184,224,189, 48, 96, 2,198, 25, 96, 49,199,123, 84,217, 1,187, 24, 49, 68, 68,131,167,226, 71, 98, 82, 28, 73, - 39,113, 58, 29,221,157, 96, 27,225, 22,176, 66, 93,115, 77,236,198,120,150,201, 53,187,106,176, 37,223,187,116,124,230,194,202, -225,185,150, 5,107, 57,132,170, 1, 59, 12, 5,137, 35, 85,139,107,152, 0, 99,233,136,221,220, 16,225, 74,122,115, 78,171,207, -166,153, 58, 30,133,227, 33,188, 35, 64,209,116,207,179,170,190,109, 87, 29,238, 59,170,103,171,174, 13,164,149,123,142, 89,243, - 60,216, 48,129,192, 86,108, 3,106, 87,116,215,192, 72,108,241,133,234, 1,167,233,213, 61,151,239, 40, 3, 30, 80, 59, 74,220, - 95,193, 38,121,182,136,219,166,110, 54,253, 6,142, 62,208,199,151, 83,162, 86, 33,105, 51,107, 3,147, 80,217, 48, 26,203,126, -233, 68,192, 35, 48,101,146,170, 85,194, 31,142,244,197, 10,209, 27, 92,214,160, 64,248, 20, 25, 11,129,199,206,176,234,179, 34, -213, 80,245,192, 9, 55,152, 42, 45,104,152, 99,216, 56,179,138,180, 30, 86, 95,154,144, 58,222,208,116, 67,183,162, 36,148, 70, - 40,180,193, 6, 35,244,142,158,169,180,187, 63,187,162,172,119, 12,151, 18, 14, 36, 22,199, 25,192, 67, 34,203, 94,145,228, 93, -242, 36,128,135, 86,158, 56,133,223,229,220, 64,239, 98,202,110,101,255,210, 12,151,117, 71, 89,241,127, 81,125,127, 5,224,235, -218,122,154, 8,162,240,204,238,236,165,237,214, 45,136, 21,138, 37,104,176, 40, 20,208,200, 95, 48, 24, 66, 98, 98,244,135,234, -131,145,120,123, 55, 68, 99,162,196, 40,250,128, 23,140,129, 80, 96, 75,247, 62,158,203,110, 11,137, 49,105,250,210, 62, 76, 59, - 59,115,190, 57,243, 93,138,253, 61,167, 99, 72, 25,126, 13, 79,167,229,216,110,213,246, 78, 6,129, 48,216, 43, 73, 70,121, 68, - 58, 20, 41,165,252, 39,187, 94, 14,219, 27,146,227,177, 41,204, 73,150, 85, 74,138, 50, 35, 27, 59, 87,182,114,137,183, 65,182, - 5, 76, 60,162, 70,124,153, 22,102,176,178,195,148,214,220,228,220,159,222,111,246,195,130,193,192,234,197,106, 73,164, 94,163, - 32,161,137,153,139, 51,189,126,143,140,204,138,240, 72,246,171, 35, 58,129,132,178, 52,136, 78,145,252, 78,121,240, 99, 94, 3, - 86, 90, 76, 1, 32, 38,211,211, 68,118, 24,244,200, 58,198,110, 54, 46, 7,131,126,132,244, 19, 74,230,213,104,129, 75, 43, 89, -180, 47, 93, 9,146, 48, 76,208,117,107,251,243,199,215,143,159,126,218,217, 14,163,160,248,145,154,187,248, 38, 96,254,229,246, -242,126,176,127, 60, 56,154,111,117,126, 30,238, 1,166,214, 24, 7, 60, 96,122, 37,124, 17, 30, 29,223,105, 36,102,108, 86,243, - 10, 60,233,166, 42,212, 70,232, 58,137,215,230, 53,128, 87, 66, 60,122,248, 0,118,251,238,242, 66,197, 76, 94, 62,123, 18,135, -125,101,136,238,202,234,248,212, 53, 24,248,151,247,111, 54, 55,159,111,109,109, 45,117,187,240, 75,215, 54,238, 79,207, 45, 54, -253,202,236,108, 11,234,209,250,250, 26,140,169, 90, 81,139,243, 51,182,147,183,219, 87,223,190,251, 16,229,217,234,202,173,111, -187,187,219, 59, 95,211, 36,115,108,171, 14, 64, 78,229,235, 27,119,125,175,250,234,197, 83,128,159, 97, 66,138,167,152, 51, 23, -209,126,141, 32, 55,143, 92,151, 73,100, 8, 95, 49, 76, 14,239,154,120,194,140, 18,152,231,103,170,191, 49,132, 72,142,114, 19, -242,204, 27,110,241,220, 92,206,168, 13,194, 18, 11, 99,148,153, 96,162,178, 81,100, 0,172, 96,127,100, 79, 71, 74, 75, 64,175, -155,172,244, 33, 24,181,228, 70,196, 74, 3, 38,215,162, 72, 69, 77,209, 5,112,158, 69,118, 39, 6,179,100,236,116,139, 24, 86, - 41, 56,164, 17,101, 64, 91, 40, 69,203,101,201,210,162, 8,104, 28,117,179,222,132,163,147,201, 29,188, 50, 98,137,165,136,212, -169, 86,196,232,224, 99, 41,115,103,244,237,217, 59,157, 86,231,199,193,119, 70, 40, 68, 96, 47, 28,120, 17, 1, 82,158,112, 17, -164, 65,208,136,174, 16, 12,121,206,177,106,100, 93,101, 20, 47, 77,204, 5, 69,254,213,132, 80, 12,233,154, 38, 1,118,211,179, -237,186,107,215, 92,229,217, 78,203, 85, 27, 55, 38,239, 45, 77,141,121,170, 31, 3, 2, 74, 72,111,145, 19,205, 12,233,109,142, -165, 96,198,209,210, 15,213,219, 72,127,199, 37, 50, 62, 45, 26, 45,145,228,209,105, 20,133,216, 92, 70,183,144,154, 3,239, 80, - 81, 49, 67, 64,145, 78,192,166,250,230, 42,225,218,162,234,138, 9,207,108, 54,106,147, 99, 19,126,205, 87, 86, 12, 15,119,148, -114, 18, 12, 22,113, 56, 30,248,126, 77,245,245,137,121,156,178, 1,113, 41, 60, 31, 93, 11,102,200,208, 74, 83,168, 51, 41,133, -173, 94,159,234,236, 7, 7,232,246,149,231, 71,125, 12, 12,230, 93,157,157,160,116,121, 91,193,180,105,173,203,139, 26, 93,224, - 2, 88,149,167,200, 71, 44, 60,237,121, 98, 88, 52, 4, 51, 14, 21,139,182, 81,252,195,225,172, 73,118,114, 17, 53,184,140,122, -229, 2, 20, 93,118, 8, 23, 35, 66,167, 32, 96,119, 66, 92, 43,246, 38, 47, 68,196,240,103,224,249,140,138,244,205,233,133, 95, -135,123,229, 7,236,174, 89, 40, 51,100,193, 98, 28,234,207,112,239,138,211,240,140,235, 45,160, 40,178,176,194,196,105, 41,207, -103,111,201, 81,239, 69,158,109,123,234,243,180, 5,253, 95, 57,223, 95, 1, 24,187,146,221,166,161, 40,234,241, 37,118,236, 56, -131,211,129, 86,128, 90, 6, 1, 82,213, 20, 16, 18,116, 81,181,116,201, 31, 32,196,191,176, 97,199, 79, 0,223,208, 77, 23, 72, -172,144, 88, 80, 9,137, 74,176, 64,165, 69,109,131,227, 56,174,199,216,230,222,251,236, 54, 8, 33, 33,101,149, 68,206,224,247, -206, 59,119, 58,167,170,175,114, 23,204,178,182,133,217,192, 40, 9,252,208,163, 28, 29,234, 95,139, 92,203,189,186, 65,231,101, -146,226,111,215, 28,161,116,173,181,205, 89,216, 30,176, 64,177,193,128, 10,110, 92,161,168, 44,166, 97,111,105, 46,150, 57,153, -243,240,164,188, 44, 21,241,168,103, 81,128, 59,237, 78,170,217, 2, 83, 51,195, 36, 2, 62, 8, 11,130,215,109,168,112, 43,186, -103,195,150,102, 1,185,150,184, 16, 13, 37,214,169, 9, 82,153,107,207,157,184,199,107, 75,125,128, 44, 67,195,188,170,159,248, -105,140,170,235, 92, 91, 9, 62, 16, 14, 0,160, 18,110,232,245,151,251,142,239, 28,187,167,172,166, 89,134,229, 5, 99,178, 49, -161,168, 63, 75, 71,225,200, 54,102,198,225, 24,144, 15,182, 2,196,131,176,247, 2,148,170,224, 35,182,124, 8, 8, 14, 9,213, -208, 12, 8, 0,224, 37,171,209,209,213,250,205,197,219, 63, 71, 71,240,115,239, 45,223,119,206,220, 48, 13, 96,177, 13, 2,167, -217,212,229,230, 68, 99, 50, 79,203, 34,176, 87,150, 84,186,162,212,153,124,240,125,255,240,112,127,173,191,250,230,245, 91,187, -119,105,125, 99,251,211,199, 15, 55,250,143,232, 40,143, 94,189,124, 49, 14,124,169, 72,159, 61,127,250,110,119,103,117,237,110, - 26,143,116, 77, 77,146,177, 51, 56,218,218,126,124,253,218,114,171,213,220,220,220,218,219,219,155,181,231,190,236,127, 6, 92, -235,175,220, 9,252, 81, 28,143,102,218,166,213, 84,245,186, 28, 5,241,195, 7,235,246,149, 91,239,119,119, 28,207,237, 88, 6, -128,131, 34,160,154,124, 67,151,130, 48,133,205,197, 68,141, 74,163,120,122, 99,239,151,218,192,213,153, 38,170,162, 21,149,219, - 78, 53,189, 81, 22,210,170,194, 32,194,116, 94,137, 59,118,245, 94, 60,137,243, 82,158,123,218, 12,154, 55, 32,240,134, 95,137, -225, 12, 50, 3, 58,108, 27, 61, 56, 29,207,187,233,145, 85, 41, 12,137,114, 21, 28,112,209, 24,149,158,164, 29, 39,102, 25, 14, -213,201,152,220,207,176, 77, 22, 66,138,108, 2,132,149,219, 72, 9,149,209, 39, 57,236,201, 90, 77,151, 69, 70, 82,145, 60,222, - 20,184,105, 17,117,205, 70,112, 55,153, 92,231,217, 93,120, 26,187, 83,224,106,216,189,131,158, 88,100, 27, 73, 56, 76,223, 3, -118,202, 47,127,240,237,228,107,165, 77, 56,157, 63, 45,254,200,151, 34, 22,112, 41,200,115, 79,180,233, 71, 33, 94, 24, 51,149, -102, 69,185,136, 3,210,140,213, 72,174, 18,144, 26, 14, 49,214, 96,178,169, 1, 19, 87,219, 10,219, 88, 92,120,178,210, 93,154, - 55,125,184,121,201,132,198,162,115,110, 53,129,204, 29,211, 50,168,123,131, 48, 7,228, 2,207, 59,170, 79, 89, 61,161,119, 25, - 35, 74, 8, 78, 35, 68, 98, 36,147,240,103,169, 10, 6, 44, 65, 36, 56, 99, 97,224, 6, 71,158,115, 48,114, 15, 61,239,135,159, - 57,129, 22,197,104,216,163,169,130,173, 11, 11, 29, 54,223,177,235, 53, 83, 16, 49,177, 51,201,203,141, 46,201,245,150,165,137, -137, 55,204,195, 60,151, 46,140,146,170,172, 41,153, 37, 64,136,125,217,190, 58, 36,114, 54,244,135, 89, 89,158, 40,184,141, 33, -183,165,109,155,246, 89,228,243,228, 94, 94, 46, 54, 42,153, 17,232, 99,248,174,155,196,254,138, 70,205,176,140,102,132, 40, 95, -240,132, 6, 31,113,215,107, 58, 64,252, 56,244, 36,178, 5,135,160, 51,206, 18,160, 14,192,212,169,109, 72,134,203,206, 54,231, - 1, 88, 24, 67,255, 91, 42,111,200,117, 84,172, 75,187, 70, 55, 34,247,243, 10,189,164, 74, 61, 23,187,237, 79,199, 39,240, 53, -104,214, 15,104,132,148,243, 60,100,145, 87,170, 65, 23, 86,175, 40, 60,167,214, 82,120, 27,196,151, 69, 46,136, 83, 66, 43,162, - 88,252,203,255, 76,152,114,131,154,114,163, 20,255, 79, 2,254,183, 0,140,157, 73,111,211, 80, 16,199,237,103,199, 75,234,214, - 9, 89,154,110,180,168, 82, 43,214, 3, 66, 2,149, 19, 28, 64, 8, 85,112,226,171, 33,193,135,224, 2, 23,132,196, 25,169, 7, - 84,130,104,170,170,165, 37,233,146, 38,141,179,218,207,113,108,102,230,217, 73,133,122,224, 26,201,142, 18,217,243,254, 51,243, -159,223,140,253, 51,202, 37, 70,129, 28,163,124,105,239, 26, 86,162,229,240,159, 73, 60, 85,137,113,213,146, 44, 95, 69,125,194, -187, 12,134, 3,148,189, 56, 90,164,198,168,226,177,255,135,177, 4,154, 35,143, 81,195, 19,220, 93, 4, 98, 34, 16, 61,180,100, -156, 73,122,180,246,248,164, 89,243, 2, 47, 18,243, 57, 18,210, 39,200,229,138,151, 88,198, 20,129, 96,176,180,173,178,132,124, - 70,188, 11,200,188, 92,238,118,250,206,108, 6,228, 88,223, 31,114, 68,165,147,205, 6,222,127,184, 9, 72,117,184,173,101, 88, -231,157, 38,164,111, 71,141, 26,210, 45,162,192,227,144,119,138, 37, 70, 2, 92, 23,221, 94,190, 91,169, 85, 66, 57, 30,161,236, -241,110, 15,171, 85,202, 88,181,136,159, 48,159, 43,129,116, 2,241, 30,162, 24, 15,206,187,141, 83,231, 56, 36,219,220, 73,231, -108,198,204,228,166,243, 27,235, 15,127,157,236, 50, 99,196, 17,243,169, 96,170,131,171,151, 36, 67, 87, 76,141, 65, 96,181,140, -148,110,232,237,118,247,180,222, 57,216, 63,172,236,237, 15, 6,252,162, 94,111, 59,173,251, 27, 79,132,167,237,203,167, 15, 78, -187, 87, 40,206,191,220,124,253,238,237,251, 23,155,175,134,190,151, 93, 88,153, 78,155, 95, 63,127,220,254, 81,238,247,252, 63, -181, 51,144,154,181,227,189,210, 92,166, 86, 61,208, 12,233,214,218,141,102,203,169, 55,154,144,224,115,238, 95, 95, 92,152, 47, -149, 52,205, 92,189,121,239,247,238, 79,167,217,122,254,236,233,214, 86, 25,125, 31,144, 68,235,138,199,225,129,151,252,136, 19, -148, 7,143, 69,114,170, 5,132,211,195, 96, 74, 2, 35,174,170,203,201, 38, 91,198, 82,112, 84,153, 41, 19,222,165,229,220, 42, - 50,227, 8,150,228, 38,176, 26, 4, 88,211,160,195, 37,134, 71,180,152,189,142,173, 59,178,163, 8, 46,141, 88,104, 57,217, 80, -138,182,184, 81, 20, 79,205,179,100,115, 72, 84,152, 46, 66,114,169, 50,109,198,180, 57, 86, 72,133, 55, 60,202,152,185, 62,239, - 19, 48, 66, 34,248, 68, 56, 99,102,125,212, 22,145, 24, 89,130, 40, 72,245, 80,124, 46,225, 65, 93,202,173,116,112,145, 27,233, -100, 66, 74, 88,186,101,233, 83,100, 46, 8,196,226, 80, 66,109, 69,120, 96,140,130,120,106, 84,138, 12, 53, 13, 7, 25, 36, 13, -240,185, 48, 78,142,165,170,136,238, 52,143,202,146,162, 66,194,154,164,161, 61,105, 34,224, 89,236,165, 96, 44,153, 91,164,203, - 25,113, 63,136,202,167, 96,124,199,135,196,210, 85, 75,215,204,148,154,215,244, 55,119,150, 54, 31,148, 32,228,122,156, 44,133, -116,132,137, 14, 1, 18,153, 84, 69,135, 12, 6,197, 59,241,126, 25, 54, 69,209,127,160,233, 18, 36,130,169,180,228,129, 52, 10, -112,234, 20,210, 55, 13,183,235,193,223, 60,104, 94, 28, 85,170, 59,245,209,119, 55,127,168,204, 85, 89,225, 88,201,213, 34,123, -207,213,203,103,225,246,142, 83,254, 86,237, 85, 26, 5,215, 87,151, 51,210,122,209, 88,202, 21, 37, 22,116, 56, 31,134, 81, 44, - 96,101, 51, 99, 26,158,219,234,224,186, 1, 57,102, 22, 81,178, 23,207, 35, 97, 36,119,122, 23, 73, 15, 85,252, 79,194,195, 70, -182,105,196,204,132,124, 4,153, 8,174, 15,182, 77,219,245, 7,209,164, 98, 33,231,173,252,192,239, 99,107,136,154, 88,184, 24, - 4,171,222,248,229, 25, 43,235, 17,181,134, 42, 91, 56,240, 40,108,153,130, 88, 69,155, 91, 12, 52, 1,226,142,117, 84,103,112, - 31, 59,109,123,104,127,196, 96, 53, 99,216, 93,222,195,253, 57, 72,117,143,178, 83,215, 80,104, 39,184, 71,218, 4,167, 66,108, - 17,193, 97,214,158,107,187, 14, 92,130,157, 36,204, 2,208,170,175, 43,162, 23, 26,107,112,116, 55, 96,246,128,200,166,128, 92, -136, 73,225,157,220, 65,227, 0, 40, 95,177,141, 50, 97,223,179,148,162, 83, 49, 83,254, 79, 9,255, 87, 0,186,174,165, 55,137, - 40, 10,207,147, 25,102,128, 14, 72, 41,173, 90, 91, 31,216, 70, 19, 27,211, 69, 83,141,137,169, 27,119,166,191,194,165,137,255, -193, 95, 97,226, 35,113,107, 52,190,182, 70, 55,181,137,209, 90,187,210, 84, 74, 95, 52,165, 64, 41,243, 0,230,225,121, 80, 74, -109, 36, 44,128,192, 4, 46,247,222,243,221,115,190,243,125,210,137,231,199,222, 12, 33, 31,214, 97,119, 99,238,123, 27, 44, 9, -157, 16,156,248, 63, 87,191,110,207,169,232, 7,109,219,117, 34,242, 64,141,196,128,126, 9, 5,105,228,234,164, 88, 73,130,147, -110, 65,151, 26, 25,246, 68, 44, 77,221,196, 99, 53, 49,174, 23,127, 47,176,174,176,161,197, 49,223, 29,137,153,248, 41,249,240, - 8,228,180, 28, 23,171,121, 98,247, 52, 66,231, 90, 30, 30, 0, 5,112,241, 65,107,168,184,179,118, 0, 72,144,152,148, 62,210, -239, 66, 67, 55, 31,220,189,175,160,115,170,108,234, 9,248,218, 19,167, 11, 73, 35, 65, 12,162,208,195, 90,118,200, 84,253,128, -118,136,165,226,114,214,202, 49,110,181,204, 52, 4,109,192,246, 41, 45,153, 50, 82, 12, 60, 97, 5, 1,144,220,168,108,149,235, -155,128, 82, 3, 74,220,147, 66, 15,209, 77,209,165, 86,173, 54, 43, 13,167,241,114,241, 53,172,245,150, 23, 53,109,164, 1,178, - 38,137,200, 89, 42, 18,103, 32,195, 13,114, 39, 8,229, 98,169, 12,127,196, 90,105,245,205,187, 87,174,221,164, 49,238, 8, 84, - 6,135, 7,211,215,175, 22, 87,127, 85,171, 59, 45,207,134,253,167,177,189,182, 89, 44,109, 87, 14,190, 47,173,188,255,240,246, -211,231,143,143,159, 62,243,125,216,151, 53,212, 50, 85,144, 65,175,200, 82,219, 11,109, 39,112,188,112,118,230,198,252,252,189, -149,159,139, 48, 74,151, 39, 71,175, 77,141,207,221,185,173, 40, 90,171, 21,214, 27,254,250,182, 27, 80,230, 68, 21, 1,240, 41, -154, 18,227,115,111, 76,210,123,158, 65,241, 88,130,245,106,229,174,140, 45,118,136, 17,239, 5,246, 13, 23, 70,102,207,174,216, -173,131, 62, 66, 20,102,223,198,114,231,101,122, 28, 67,155, 23,108,142,135,167, 91,181,117,207,111, 82, 41, 69,162,158, 6, 36, - 65, 37,227,233,158,255, 40, 29, 29, 12,148, 7, 21, 36, 88, 93,189,233, 87,222,223,225, 45,120,223,173,242,193, 25,201,230,138, -238,117,108, 90,219,234,133,225, 9, 31, 45, 7,133,134, 87, 83,240,108,100, 96,241,134,198,156,152,251,152, 47,207, 36, 6, 75, -149, 63,240, 83, 6, 12, 43,155, 24,178,140, 12,250, 61, 5, 94,205,174,117,193, 72, 36,113,241, 1, 46, 4, 83, 78,238,241,216, - 36,209,243, 29,159,148, 68, 1,197,179,185,244,145, 71, 53, 25, 64,192, 43,176,245, 43,152, 17,140, 98,138,156, 49, 51, 28,129, -186, 37, 66,150, 58, 32,205, 22,184, 72,218,200, 88,134,101,168,216,121,143, 95,141,154,248,200, 79, 24,169,192,137,184,165, 41, -106, 92,213,100, 41,150,151,181,135, 55, 39,231,166, 71, 59,136,214,113,251,166,123, 79,247, 55,130,145, 85, 1,149, 35, 93, 18, -199,153,187,131, 2,246,124, 77, 14, 8,102, 10,207, 87, 66,168,114, 63,171, 34,147, 13, 89, 88, 47,239,126, 93,222,248,225,159, -245,199,103,140,193, 49, 57,102,162,109,140,160,234,178, 6, 1, 47,157,205,157,185, 88, 24,190, 50, 85, 29, 24,127,177,224, 62, -127,244,165,248,228, 27, 64, 0,225,214,165,115,179,133,209, 60,178,218,200,237, 14,249, 42,249, 66,110, 36,174,135, 20,112, 81, -182, 94,183, 0, 17,147,159, 8,171,118,176,209, 55, 17, 40,152,120, 30, 96,147, 35,121,215, 49,233, 72,236,144,199, 25, 78,167, -182,119, 24, 8,249,227,209,158,187, 75,149, 84, 12, 78, 72,150, 64,201,132, 14, 91,101,107,200,251,231, 10, 57, 66,125,187,221, - 28, 73,231,187, 53, 24,170,220, 38,245, 36, 73,229, 32,205,148, 84, 28,162,234,193, 30, 92, 34, 99,100, 5, 84, 1,217,103,145, - 45,246,154,173,219, 40, 50, 40,245,213,135, 0,184, 0,132, 37,227, 20, 37,159, 62, 11,255,172,174,155, 1, 81,185, 40, 57,237, -187,237, 86,159, 65,203, 17,207,209,193,250,252,209,205,212, 83,138,164,252, 75,152,228,137,195,153, 40,129, 91,133,112,242,183, - 79,180,107, 8,194,113,145,232,227,177,225,175, 0,100, 93,201,107, 26, 81, 24,159, 69,199, 25,141, 26,107, 26, 19,173, 70,141, - 9,165, 59,165,165, 80, 2, 9,180, 20, 66, 14,189,244,208, 67,255,154,254, 59,165,135,210, 36,167,208,148,134, 64,123,105, 33, - 75, 33,193, 75,160, 8,198,106, 93,102,156,205,153,215,239,251,222, 51, 38, 4,101, 46,138,206,242,222,251,150,247, 91,174,230, -239,242,196,105, 82, 24,151,132,163,105, 3,141, 23,216,197,238,200,248,141, 61, 19, 97,145, 37, 95,247,244,145,199,110,121,226, -115,142,238, 12,137,150, 37, 9, 55, 85,111,228,198, 52, 61, 21,207, 4,226,167,228,226, 76, 9,166, 13,207,173,224,229,249, 30, - 97,108, 20,117,162,166,143, 92, 83,236,149,178, 0, 30, 88, 40, 4, 44,121, 64, 70, 56, 3,207,250, 85,101,108, 94,128,252, 17, -148, 96,127,253,108,163,213,107, 57,100,132, 70, 74, 71,210, 76, 50,155,210, 19,219,191,118,168, 47, 2,211, 82,235, 15, 7,191, - 27,167,239, 86,223, 30,156, 29,248, 36,172, 75, 58, 92, 98,219,135,238,241,200,114,237,124, 38,223,177,218,186,102,180,205, 14, -226, 49,252,161,237,217,112, 61,165,108,209,116, 77,200,225, 80, 16,129, 41,235, 79, 94,213, 27,117, 56,131, 48,148,117,242, 2, -132, 59,182, 56, 87,251,211,109,224,184, 71, 38, 43, 42, 19, 56,209, 0,231,157, 10,153, 59, 51,116, 5,247,125, 49, 78, 40,134, -134, 26,127, 19, 67,142,144,171, 51,134, 11,229,194,253,219, 75, 63,247,119,156,254,249,222,222, 46, 12,166,181,213,231, 15, 31, - 61,206,229,102,203,213,197,239,223,190,124,250,248, 97,107,115,211, 30,154,134, 30,197,181, 75,138, 88,142, 31, 55,210,213, 74, -109,255,199,193, 96, 40, 21,243, 75,182, 39, 31,158,212,201, 41, 36,124,177,182, 50, 95, 40,124,221,221,125,185,241, 6,170,242, -227,195,227,106,117,249,243,214, 54,162,200,253,208,246, 71, 80, 84,194,196,119, 29,151, 83, 6, 33, 42, 59,158, 53,155,206, 15, - 49, 47,198,180, 3,117,109, 8, 7, 65, 26, 35, 92,232, 10, 31,188,166,106,220, 59, 24,147,195, 48, 72,104, 83, 84,198,137,232, -223, 49,219,112, 76,105, 73,116,224, 99,236, 82, 15, 26, 22,238, 41, 88, 85, 47,114, 19,172,151, 47,181, 4,167,244,164,229, 97, -180, 24,113,212,141,196, 93,161,233,168,136,109, 0,164,184, 49, 54,159, 45, 81,117,133,125,222,158,245,207,208, 12,170,240, 80, -119,136,144, 93,129,176, 34, 83,184, 37,146, 98,187, 22, 71,176, 67, 61, 23,215,226, 29,171, 69,128,135, 24, 97, 73, 37,168,241, -141, 24,106,146,148,178, 11,166,221,189,108,245,192,207,138, 83,222, 73,116, 51, 28,243,117,197,200, 65,222, 64, 60,233,251, 80, - 17, 98,135, 23,106, 98, 23, 29,133,144,218, 29,139,198, 4,100,147,224, 90,252,138,224,222, 58, 30,138,190, 72, 99, 89, 3,133, - 34,158, 74,146,215, 81, 53, 76,192,250,174,169, 73, 73,126,255,102,165,188,254, 64, 50,221, 8, 90,110, 17,208,145,210,119,137, -212, 89, 20, 92,149, 17, 52, 25, 71, 16, 12,226,203, 16,191,128, 32, 65, 8,126, 17, 41, 87,148,146, 25,242, 75, 14, 9,108, 79, -106,142, 65, 96,245,122, 39,245, 70, 63,121, 47, 95, 89, 30, 90,158,231, 99, 75, 1,170, 61,149,210,123,136,185,161, 28,113, 60, - 84,135, 41, 85, 74,133, 98,110,234, 70,230,168,233, 29,237,156, 86, 84,166, 61,189,101,164, 19,137,190,107, 13, 29,210,214, 99, - 42,228,171,190,220,236,120,252,134,195,133,227,200, 97,130,209,197, 59,234,156,101,178,148,175,197,162,122,199,236,222, 45,221, -113, 71,190, 77,197,250,216,155,133,145,230,157,200,205,133,227,171, 44, 92,148,133,130,189,104, 60, 8,196, 61,110,119,209,199, - 48,133,106,115,139, 16, 48,154,221,115,193, 77, 85, 34,233, 68,186, 61,104,162, 71,131,112, 75,151,225,175,203,179,229,191,102, - 11, 33,249, 92, 99, 11, 73,118,241,155,169,185,129,215, 23,163,143,186, 71, 28,217, 51,254, 59, 73,215, 18,141,206, 25,196,253, -161, 99,162, 61, 0, 60, 80,212, 7, 37, 49, 10,153,177,137,135,188, 88, 87,147, 70,154,116,113, 3,190,198, 34,155,132,170, 10, - 54, 97,247, 50,248, 14,129,202,184,127, 72, 97, 58,158, 65, 70, 57, 6, 24,233,162,103,114, 85, 14, 82,102,215,252, 64,224,240, - 95, 0,170,174, 99,183,137, 40,138, 78,121, 83,222, 52,119,167,201, 41, 44,128, 69, 16,160, 0, 18, 66, 32,177, 2,137, 95,224, -159, 34, 62,132, 44,144,224, 15,144, 40,155, 16, 33,164, 36, 36, 81,148,132, 20, 67, 20,143,237,169,246,152,123,239,123,118,156, - 85, 22,142,173,177,124,203,185,237,156,169,248, 46, 75, 96,217, 18, 29,141,121,188, 98, 57, 16,144, 52,109,240,188, 6,109,210, -162, 77,155, 30,169, 58, 12,212,155,140,216, 99,109,248, 27, 26, 37,234,100,128,142, 76, 0, 3,159, 7,216,190, 24,228, 25,201, - 48,138,183,102, 57, 46,220, 10,169, 96,217,127,156,190,136,144,159,138, 49,221,183, 43, 37, 30,196,131, 72,187,254, 69,149, 86, -117, 17, 32, 18,100, 8, 2, 59,138,224, 50, 19,229,212,246,241, 78, 63,141,158,222,126,244, 39,108,107, 84,149, 71, 89, 20,198, - 61,108,207, 50, 29,208,122, 37,168,198, 89, 82,113, 43, 59,167, 7, 96,193,189, 52,194,202,189,200,185,233, 70, 89, 44, 72,133, -144, 93, 99, 52,236, 70,221,165,153,229, 78,212,105,213, 22, 33,157,166,200,122,134, 9,167, 19,247,134, 52,203, 26,229, 69,189, -217,170, 7,205,173,253, 45, 40,118,241,182,222,176,231,170, 11,144, 96, 44,211, 90, 93, 92,221,251,187, 71,196,170, 67,112, 22, -197, 45,108,131,192, 22,138, 60,168,156, 43,220,129, 88,175,218, 76,119, 29, 53,112, 53,223, 81, 33,238, 19,197, 78, 97, 89, 35, - 67, 31,236,110,255,220,216,248,176,185,185, 9, 9,200,247, 52,219,214, 30, 60,123,179,114,103,109,103,235,219,187,245,245,195, -227, 83,240, 13,195, 68,130,179, 44, 45,146,100,216,237,165,229, 74,233,225,189,251,159,191,124, 5,131,159,159,109,150,203,193, -193,254,126,181,204, 45,134, 26,138, 58,202,176,164, 79,158,191, 62, 59,252,245,233,227,251,246,197,249,201,201,137,101,138,214, - 50,160, 32,189,217,168,246,122,113,150, 97,228, 2,244,225,154,165,139,110,187, 32,146,153,235,163, 4,121, 54, 88, 0,156, 31, -210,184, 5,187,112,116,201, 35,112, 44,218,235,100,126, 51,222, 22, 65, 86, 16, 60,131, 26, 76,111,241,142,136, 1,162, 17,204, -132,113,168,169, 55,198,114, 22, 67, 46, 51, 66, 52, 83, 99,201, 17,233,152,146, 63, 97,173, 68,226,233, 96, 93, 87,253,203, 52, -237,195, 35, 50,102, 72,138, 76, 34, 43, 35,106, 19,201,156, 83,230, 21,155, 57, 89, 46, 58, 54, 26,113, 69,224,238,184,169,179, - 12,155,179, 88,248, 79,182, 39,146, 12, 55, 62,123,228,255, 85,183, 6, 79,162,141, 41, 11, 6,228,126,194,234, 77,195,116, 44, - 15,224, 11, 20, 4, 37,175, 2,117,186,112, 34, 58,143,146,138,240, 34, 5,102, 5, 30,131, 10,219,158,171, 44, 48,102, 2,150, - 18,215,118,115,229,249, 56,141,165,109,211, 31, 58, 70,102,182,129, 50, 76,158,101,233,186,243,106,101,233,229,219, 23, 74,224, - 40,117, 87, 9,251, 44, 31, 20, 66, 7,140, 72,225,132,212,170,205,152, 11,121,201, 54, 81, 99, 61, 71, 6, 12, 98, 6, 85, 57, - 84,173,173, 91,138,239, 97,196,200,145, 53, 41,199,215, 32,172, 38, 71, 7,199, 87,198,202,242,221,181, 36, 1, 92,207,185,205, -137,139, 18,215, 17,136,235, 3, 43, 57,220,189,209, 24,247,125, 39, 40, 89,220,159,157,169, 49, 63,248,254,227,140,255, 62,171, - 62,158,183,234, 30,132,248,110, 63,193,181,122, 69, 13,106,172,127,148, 92,230,153, 46,245,165,197, 42,250,200, 53,185,103,123, - 17,194, 35,165, 81,110,236,158,238, 57, 60, 0,199,188,232,180,145,157,148,134,174, 82, 29,123, 60, 51,119,108, 31, 37,107, 5, - 93, 70, 33,195,195,120,146, 49,225,151, 22,225, 76,164,123, 76,245,181,160, 6,128, 44,205, 82, 49, 4, 66, 30, 80,141, 57,150, -139, 48,130,232,129,225, 31,225,171,135,113, 7, 64, 0,120, 99,192, 75, 17, 54,130,208, 34,255,133,231,195,241,106, 22, 4, 42, -215,118, 1,142, 13,229, 77, 31, 45,129,145, 97,147,166, 32,182,127,112, 98,135,119,115,120,114, 2,230, 15,192,177,196,203,113, -222,159, 72, 16, 99,101, 95, 12, 33, 19,200,161,145,208,107,153, 58, 38,165, 21,148, 92,178, 33,224,158,113, 39, 76, 58,116, 69, - 40, 4, 94, 71,215,212,208, 55, 67,252,164,139,174,141, 27, 56,255, 5,160,234, 90,122,154,136,162,240,188, 58, 29,166, 67,103, - 58, 76,121, 52, 5, 27, 4, 76, 8, 46, 48, 46,252, 17, 26,126,158, 91,118, 46,220,185, 49, 36, 36, 74,162,166, 49, 49,138, 26, -116, 97, 88, 65, 11,109, 74, 31,211,121,191, 60,231,220, 59, 69,119, 20,210, 91, 50, 61,247, 60,191,239, 59,165,127,151, 37,254, - 43, 26, 49,229, 8, 69,206,157, 90, 19,165,189,105,220, 95,173,160,150,130,196,151,199,228,108, 38,202, 56, 65,144, 15, 84,101, -141,246,145,230,139, 21,177,236, 86, 50,117, 54,241,159,254, 41,251, 27, 60,147, 39,219,207, 70,238, 32, 35,233,104, 70, 88,205, - 16, 84, 83, 97,178,253, 82, 89,246, 22,229, 14, 67, 66,169,177, 21,214, 2, 25,113, 66, 24,198,172, 92,153,141,239,128,136, 29, - 68,115,219,176,193, 41, 39,104, 76,148,194,139,226,206,198, 14,148, 87,240,114,226,187, 41,113, 23,219, 43,173,150,181, 49,246, -238, 80,216, 5, 83,245,124,228,222,249, 73, 4, 57, 26,156,214, 31,247, 73,255, 40, 51,107,214,138,233,248, 17,210,106,210,130, - 49,152, 49,137,128,211,130, 48,104,212,108,171,214,128,168, 0, 65,133,117,150, 32, 41, 0,251,208,117,243,248,203,235, 77,117, -235,244,253,219,150,181, 62,242,199, 72, 22, 9,230,240,239, 71,105,124,121,115, 9,135, 31,180, 15,122,238,141, 93,109, 4,170, -143, 12,218, 12,140, 65,138,163, 98,230,101, 49,145,130, 20,177, 18, 39, 69,154, 42, 65,136,162, 75, 56,166, 86,114, 77, 45,166, - 51,239,170, 55, 64, 95,130,211, 88,101,230,102, 63,207,127, 45,201,217,163,253,189, 87,199, 47,175,123, 61,184,126, 94,144,122, - 94,234, 67,244,195,221,176, 56,172,180, 45, 99,119,103,251,211,231, 46,216,252,178, 97,116, 58,155, 23, 23, 23,146,172, 10,133, -124,125, 51,252,118,254,253,197,243,163,206,222,227,238,217, 73,183,251,177, 63,188,243,253, 44, 14,243, 48, 97,219,157,242,166, -181, 12, 33,106, 48, 28,163, 59,203,101, 68,172, 39,129, 32,148,228,114,190,167,184,168,202, 85,120, 62, 84, 66,138,170,178, 4, - 49,131,161,131,165,114,228,190, 96,171,137,165,111,166,204,133,164,178,242,156,174, 86,165,160,230, 27, 56, 71,156,134,241, 69, -140,247,178,217,172,185, 44, 45,122,214,100, 99,136,244, 87, 20, 8, 46,144, 41,242,209,100,129, 26,228,135,157,167, 19,127, 12, - 23, 27,217,170,148, 74, 75,140,211, 65,221,237, 21,195,129, 83, 33,231, 66, 34,146, 0,121, 46,220,195, 70,154,199, 72,164,138, -125, 76, 30, 73,163,134, 87,159,164, 68,197,193,183, 34,175,148, 11, 62, 43, 36,168, 40, 58, 17,199, 54, 28,200, 24, 66,132,161, -164,153,144, 66, 65, 48, 15,102, 24, 6,200, 66, 9, 24, 85,214,191,240, 69,104,102,140,235,113,121, 15,223, 13,103,132,249,225, - 19, 87, 15, 87,190,229,229, 76,146, 57,119,174, 36, 3,101,150,174,194,143,194,209,110,251,129, 80, 12,191, 78, 85,165, 46,183, - 20, 97,234, 75,112, 45,176,189,136,145, 86,198,173,188,210, 18,132,154,154, 94, 81,101,112,254, 1,122, 56,220,217,139,254,189, -170,202, 91, 15,133,154,134, 54, 29, 37, 69, 24, 69, 73, 28, 5,145, 59,157, 14,102,149, 90,115,255,221,135,211,147,179, 55,231, - 63, 62, 13,110,251,150,225,216,182,195,144, 43,216,194,193,213, 57,144, 24, 33,253,213,106,154,216,229, 80,180, 90,221,180,157, -198,159, 91, 63,251,125,213, 60, 92, 83,151,117,101, 28,204,163, 24, 30, 88, 69, 83,197,121,126, 57,114,249,176,130,230, 85,120, -149,160, 70,196,118, 76,202,232, 14, 97, 28, 65,238,156,144,239, 86,213,106,211, 92,175,170,170, 7,158, 81, 36,105, 42, 68, 45, -167, 80,190,167,212,109,132,192,140, 74,109, 36,212, 10, 1,160,174,213,145, 97,144,166,166,110, 33,136,150,234,119,182,194, 16, -158, 33, 85, 12,197,154,185,230,197, 30, 36, 94,115,248,210,179, 4,130, 58,124,108, 93, 55, 69,234, 70, 72, 52,177,133, 27, 10, -135, 4, 4,221, 89,181, 86,103,161,219,118, 54,109,189, 49,241,167,140,233,137, 18,124,232,247, 10, 38, 32,161,107, 6,181,223, -120, 40, 42, 97,251, 92,213, 95,197,226, 47,129, 15,229,110,138,229,167,100,190,166, 97,251,225,172,184,239,127,112, 65,127,169, -148, 15,144,184, 28, 82,201, 2, 70,161, 96,179,101,181,198,254, 68, 92,236,238,229,110,189,248,159, 16,122,239,244,255, 10, 64, -215,213,181, 54, 13, 70,225, 36,107,146,166,105,218,181,101,117,248, 49,217, 7,202, 84,100,122, 57,212,255,224,141,176, 63, 32, -120,233,223, 17,188, 16,118, 33,168, 12, 84, 20,239, 68, 4,117,162,136,222,136,204, 58, 97,186,181,107,103,219, 52, 31, 77,150, -214,231,156,211,180, 42,200, 46, 27,218, 44,121,223,115,158,243,158,231, 60,207, 40,190, 51,101,120,228,180, 90,118,202,118,198, -209, 85,163, 23,185, 37,167, 18,114, 67, 44, 81,198,218, 80,188,119, 72,130, 78, 15,169,178,136,177, 31,240, 76,123,124,175,236, - 85, 72, 26, 94, 9, 15,171, 23,115, 37,147,144,144, 65, 14,197,169,246,157,164, 40,128, 89,209,135,146, 93,126,234,232, 25,236, -195,174,223, 17, 42,101,234, 51, 75,199,223,168,124,177,255,137,145, 74,180,226, 12, 79,216,198,146, 93,166,137,224,220,151,154, -154,135,182, 7,149,124, 21,232,137,205, 84, 89,190, 78,149,115, 30, 90,245,164,195,151, 28,178, 50,246,176, 27,184,251,189, 3, - 94, 25, 40,133,156,178, 83,233,248,184,255,161, 27,244,218,126, 87,204,237,240, 41, 32,127,195,109,162,162, 76, 82, 21,116, 30, -181, 85,243, 86,190,159, 68,109,191, 77,119,194,100,218,185,153,147,141,118, 19, 43, 53, 68, 89,224,186,153,186,113,111, 99,189, -222,220,181, 76, 11,165, 64,181, 56,211,246, 58,220, 43, 35, 36,150,168, 67, 36,228, 11, 11, 43,181,250, 86,100, 97,165,211,222, -195, 23, 35,135,120, 33, 9,108,227, 26, 27,149,176,174,101,137,234,160, 2,178, 33,183,122, 1,234,123,149,149, 96, 20, 17,248, -198, 15,247,195,126,181, 58,123,253,198,205,103,143,159,172,223,125,128,167, 14, 96, 71,248,134, 85,141,120,158, 5,161, 1,149, -129,185,186,122,121,235,235, 14,123,227,232, 11,243, 75,175,223,190, 71, 29,150,179,244,108, 70, 65,233,126,109,109,205, 41,207, - 62,186,127,187,177,223, 66,100,232,246,146,110, 47,140, 34, 42,242, 45, 4,143,188,177,184, 48,255,225,211,103,224,128,132, 93, -161, 44,179, 40,214,173, 50, 73,158, 53,109,236, 10,192,196,178, 51, 67, 77, 14,106, 80,199,147,106,115,210,243,255,203, 39, 82, -112,200, 64, 76, 92, 20, 26, 4,103, 85,110,177, 11, 82,197,144, 90, 8,176,100,213, 75,231, 24,137,157, 18,171,198,237, 86,154, -160, 84, 51, 9, 45, 48,133,116,223,104, 98, 67, 97,167, 10,131,132, 72,249, 48,151, 91, 97,185,232, 48, 48,140, 28, 48,149,129, -154,132, 70,177, 2, 4, 2,109,212,108,163,223, 33,248, 74,179,163, 9,114,131, 4, 95, 53, 53, 73, 86, 5,109,164,210,178,216, - 47,142,153,231,214, 28,225,193,146, 93,193,117, 65, 28,250,248, 99, 81, 42,110,237,150,152, 35, 63,210,135, 26,112,141, 49,230, -141,226, 75,162, 65, 63,253, 71, 88,212,141,165,153,254, 48,238,156,136,149, 76,141, 14,158,136,231,167, 83, 23, 68,207,234, 58, -178,233,213,211,199, 77,115,250, 85, 56,247,189, 30, 47, 94,180,149, 78, 71, 11, 9,163, 35,253,171, 76, 47,182,116,195,177, 45, - 59,111,146, 78,117, 20,135, 8,105,228,131, 71,128, 6, 15, 33,123,108, 94, 41, 88,116, 55, 97,148,120, 97, 47,236,251,158,223, -106,181, 95,126,220,190,243,240,214,211,205,231,123,187,181,218,143,218,230,151,119, 47,222,108, 28,122,241,242,210,121,195,208, -137,219,130,187,144,225,146,169, 76,185, 82, 82, 17, 13,168, 47,131,219, 50,138,133,226,246,158,107,124,251, 57,189,114,196,210, -166,162,166, 7,140,129, 75, 45, 67,107,236,246, 3,246, 44, 20,253,143,145,197,199, 32, 22,227,199, 32,246, 83, 46,245, 80,206, -220,221,128,184,137,216, 98,178,218, 69, 63,229,210,185, 43, 59,173, 29, 44, 12, 10, 62, 4,151, 7,210, 99, 95, 62,113,182, 69, - 50,100, 20, 49,184,137, 74,228,105,228,123,212,178, 26,169,118, 15, 1, 85,219, 94, 27,160, 45,224, 19,224, 49,106, 64, 86, 67, -220,192,155,194, 82, 65,134,176, 76,155, 78,216,152,143,159,144,208, 69, 12, 4, 32, 46,234, 26,107,173,201,225,190,112,198,241, -181,184,152, 85,162,232, 5, 22,172, 2,144,156,104,215,201, 75,198, 67,150,110,241,216,117,117, 98,199,138,152,198,217, 93,155, -224,151,161,250, 47,151, 74, 99,162,213,104,205,160,182,251,229, 31,164, 70,237, 67,110,105,168, 36,143, 51, 24,252,175,191,250, - 91, 0,182,174,101,167,137, 40, 12,159,153,182,211,150,222,176,157, 66,169, 96,116, 97, 98, 98, 34, 94, 18,227, 19, 16, 13, 27, - 19,195, 11,152,116, 33,239, 66,124, 0,221,248, 24,186,118,131, 11, 55,236, 64,162, 40, 4, 16, 42,148,206,116,102,206, 48, 29, -255,239, 59,211, 66,140, 93, 54,105,166, 61,167,231, 63,255,229,187, 24,252,187, 50, 13,126,243,189,229, 63, 58,215,232,128,174, - 57,250, 19, 96,160, 65, 38, 80,230, 71,149,141,115,165, 62, 90,104, 45,221, 95, 90,222, 63,221,147,123,213,199,146,225, 73,121, - 94,161,240,103,226,140,103, 24, 13,169,211, 91,136,228,175,156, 17,252,178,214,188, 81,115, 54,103, 89,126, 93,223, 59,245,130, -129, 53, 81,203, 51, 76, 24,201,170,238, 45, 62,184, 24,157,195,183,133,218,208,198,163, 17,178,168, 80, 58,176, 44, 74,148, 79, -129,146,230,140,133, 97, 64,161, 96,211,151,231, 69,154,208, 18,227, 10,160, 96, 27, 86, 98,125,166,222,109,118,247,251, 7, 3, -184,250, 38, 52,148,161,249,168,145, 55,162,195,186, 49,250, 77, 12, 51,135,248,219,174,187,116, 60, 56,234,222, 88,148,139,240, -240,252, 24,132, 47,174,161,148, 81,242,176, 86,181,237,199,195,111,187,219,135, 39, 7, 18,247, 53,164,171,163, 4, 94,127,146, -150,143,243, 18,164, 32,140, 26,203,155, 58,150,252,218,207, 85,109, 57,114, 65,136,131, 23,211,133, 85, 30, 89,206, 21,236,196, - 14, 66,200,129,114,248,100, 1,137, 9,210, 83, 74,190,146,164, 51, 41,109, 45, 17,250,123,189,158,108,224,198,198,219, 39,203, -143,126, 31, 29,146, 1, 4,151, 51, 41, 2, 99, 13,145, 72,137,210, 82,222,174,191, 89, 95,121,190,178,246,234,229,234,234,139, -203,200,223,252,178, 89, 42, 66,157,103, 20,232,133,246,252,218,235,158, 74,226, 15,239,222,159, 14, 35,170,158, 36,142, 5, 49, - 50,227, 23, 93, 47,149, 67, 95,127, 63, 56, 46,228,138, 40,225,211, 36,148,224, 72, 31,191, 28,232, 8,154,172,245, 84, 2,162, - 92,243,246, 20,244,165,172,127, 39, 63,153,201,193,149, 63,140,129,227,102, 0,115,146,210, 76, 47,213, 6, 68,157, 82, 51,102, - 19, 13, 54,110,108, 24, 9, 25, 86,120,138,169, 65, 83,148, 5, 57,185,157, 28, 3,164,132,104,100, 32, 26,236,157,196, 17,242, - 71,184,155, 40,243,171, 60, 34, 72,180, 42, 24,139, 81,146,159, 89,152, 97,204, 65,108, 39,179, 93,181,232, 66,147, 71, 35,254, - 82,187,141, 57,180,233,193,153,144,181,141,136,236, 78, 67, 29, 82, 49, 31, 9, 32, 27,186,152, 21, 74,254, 30, 3,105,135,196, -168, 51,187,128, 64, 64, 10,222,164,233,152, 41, 41, 77,241,144, 36, 82,165,110,173, 37, 15,146,192, 41,231,168, 84,152,169,148, -170,236,127,142,217, 53, 70,242, 14,164,163, 92, 87,146, 95,217,246, 67,215,141,231,159,158,169,162,231,235, 91, 69,219,105, 39, -170,239, 81, 95, 14,245,164,236,110, 77, 62,223,106,170, 74, 37, 9, 2, 95,210, 99, 13,155, 83,128, 39, 81, 17,230, 27,157, 91, -232,237,228,225, 63,144, 72,106,227,123,222,112,180,181,189,251,241,243,167,177,246,238, 86,213,157,138,234,150, 85,203, 81,146, -224,124,221,217,146,220,254,241,242, 51,167, 4, 73, 3,167, 40,197,118,193, 41, 22,154,157,166,197, 6, 0,135,153, 96, 78,215, -103,235,191,246,207,111,187,150,186, 89,117,250,163, 32,146, 75, 84,149,202,185, 31, 59,103, 3,169,158, 33, 89,236,200, 6,115, -193, 1,148, 77,148,233,254,211, 69,146,140,113,170, 37, 0,109,160,249, 83,108, 35, 98, 0,188, 97,254,231,201, 30, 46, 96,122, - 66,169,107,153,195,201,217, 17, 9,121,108,237,210,106,208, 6, 27, 54,202,166, 65, 22,181,177,168, 86,108,162,144, 4, 37, 89, - 27,148, 14,105,226, 0,138,156,111, 86,220,139,232, 34,146,136,103, 43,183,214,246, 34, 15,109, 70,147,145,103,176,190, 41, 85, -223, 64,251,240,106, 87,219, 82,247,215, 74, 53,176,216, 36, 25, 45, 55,180,113,112, 37, 34, 70,195, 90, 97,170,161, 96, 93,119, -251, 2, 0, 97, 18,205,101,255,165, 68, 8, 33, 1,146,102, 62, 88, 42, 19,174, 79, 39,221,201, 9,168,113, 42,149, 97,113, 14, -223, 10,244,200,200,245,252, 55,196,255, 21,128,173,171,233, 77, 34,138,162,143,199, 48, 51,204, 76,219,225,171, 20,144,166,209, -218, 68,170, 13,154, 24, 22,174,220,187, 48,113,227,143, 48, 49,254, 30, 55,174,252, 39,186, 48, 90,211, 90,154, 52,214, 47,154, -212, 82, 45, 20,152,150,129,129, 25,207,189,111,160, 93,184, 35, 16,224, 13,188,185,247,156,251,238, 61, 39,158,111, 66,158,225, -244,193,230,244, 9,249,199,107,247,135, 61,117, 14, 25,171,127,104, 38,231, 24,213,182, 76,137, 11, 36,244,231,233,161, 58,160, - 86,225,117,202,234,158, 82,168,150, 24, 42,110, 80,147,173,166,123,106, 96, 79, 92, 53,121,198, 31, 59, 39,159, 92, 69,145, 82, -249,103, 18,119,187,183, 86,255,219,107,227,147, 79, 7, 39,227,208, 87, 58,250,185,197,194,122,113, 3, 17, 36,140,139,167, 9, - 62,190,227,238, 99, 33,139, 11,203,160,204, 12,199, 98,107, 96,101, 63,153,140,253, 35,227, 41, 21, 53,169, 72, 1,129,142,210, -117,164,244, 49,219,140,226,127, 48, 12, 43,201, 52,128, 71, 21, 41, 52, 43,205, 13, 32, 38,252,202, 19,110,108,225, 16,128, 8, - 11, 6, 62,226,242, 14, 57, 57, 52,110, 63,220, 59,218,199,167,151,115,149,220, 98,174,227,117,169, 49, 92,242,225, 13,195,210, -128,165,175,184, 44, 16, 2, 71,212,202,119, 59, 67, 42,218,164,132,230,228, 72,249,207,214, 83,174,173,217,105,205,208, 9, 23, - 21, 28,195, 77,107,102, 58, 1,236,172,169, 33, 74,141, 46, 68,215, 19,184,245, 77, 93, 24,228, 79, 37,134,151,147,198,131,198, -211,103,207,177,164,223,173,195, 87, 47, 95,124,250,240,190,211,237, 33, 32,144,248, 72,136,248, 78,125,157, 1,200,119, 48,254, -254,173,185,253,241,221,231,237, 15,251,123,187, 59,187, 59,167,103, 39, 32,218,193, 36, 26, 92,250,247,235, 91,143, 30, 63,105, -125,109,190,126,243, 86, 76,129,208,185,194, 9, 34, 63,162, 72, 0, 34,190,236,218, 7, 63,142, 61,207,167,115, 48,170, 12,178, -255, 54, 39,233,155, 43, 27,157,193,153, 99, 46, 78, 25, 86,207,231,173,229, 53,163,178,153,175, 47,109,207,140, 5,202, 53,148, -137,185,146, 24, 21,155,139,110, 9,183, 7,240, 65,196,174,156,202, 27,145,247, 82, 50, 49, 87,102, 98,125, 46, 32,116, 82,107, -137, 61,122, 8,212,146, 96, 40,141,116,234, 90,146, 14, 66,211,100,171, 77, 37,104,118,153,139,117, 14,232,118,155,130, 44,107, -188,108,122, 39, 80, 27,137, 64,243,110, 14,216, 18, 14,171,217, 90,173,183,207,219, 51,147,208, 25,214,226,165,131,174, 89,122, - 26, 17,146,166,142,185,222,170,156, 57,165, 82,206,102, 14,141,239,202, 91, 89, 63, 24,202,184,195, 93,169,226, 9,226, 28, 72, -231, 19,154,146, 3, 73,197, 82,195, 48,136,251,187, 56,217, 45, 57,110, 16,128, 10,203, 74,174,210,243,122, 64, 12, 84,120,148, -212,161,193, 71,187, 4,253, 86, 50, 21,223,191,208,137,151, 72,236, 1,106,140, 20, 99,211, 46, 21, 55, 26, 74,170,232,232,168, -123,235,142, 35, 58, 93,178,121,156, 40,135,113,109,169,144, 23,107,235,194,202, 68,125,176,202, 62,181, 65, 6,156,199, 8,176, -200,229, 66, 89,184, 11,216, 76,184,188,201,185,215,233,122,157, 94,255, 75,115, 95,246,142,171,166, 40,234,194, 73,138,108, 82, -100, 82,194,209,168, 91,171,217, 58, 88,205, 87, 55, 55,235,248,201, 77,195, 48,112, 49,102, 42, 95,206, 3,104,144, 10, 77,138, - 36,137,241, 64,205,126, 95,180,142,179,181, 69,205, 15,131, 62,225, 27,211, 73,201,182,252,213,239, 71,241,191, 59,225,122, 11, -141,139,143,184, 37, 22, 79,214,170,155,120,213, 27, 94,148,178, 37, 63,240,177,203,170,217, 27,150,137,235,208, 71,228,161, 26, -225, 49,190,161,182, 90,235, 93,118, 9,106, 96,179, 38, 73,229,190,228,150, 1, 56,116, 36, 14,145,168,100,171,212,180,198,131, -185,105, 61,237,218,153, 5,219, 69,182,182,116,199, 54, 44,132,111,229,195,198,174, 36, 52, 80, 25,242,201, 63, 8, 61,130,123, -196, 27, 11, 43,241,198, 30,179,182, 68, 24,251,243,197,199, 66, 10,103,196, 26,202, 92,130,193, 58,241, 58,238,175,252, 82, 97, - 48, 60, 31,141, 71,138,225,113,241, 38,154, 41,152, 70,179, 25, 39, 25, 93,233, 75,203,235, 92, 54, 8, 3, 37,196, 50,227,174, -244, 30, 26,124,100,221,242,235,109,147,115,249, 0, 46,211, 19,227,156, 21,100,254, 19,226,255, 9,192,214,181,244, 54,113, 69, -225, 51,111,123, 30,241, 35, 9, 49, 45, 9, 1,129, 68, 23, 21,226, 87, 84, 72, 44,250, 7,250,219,186,233,166, 82,119,236, 80, - 85, 41,234,162, 45,139, 22, 68,204, 83,164, 96,203, 4,219,113,226, 25,123, 60,206, 60, 57,223,185,118, 77,171,122,101, 89,215, - 99,107,238,157,243,252,206,247,173,249,197,180,149,120,124,154, 47, 91,254,182, 95,250,104,109,161,161,161, 74, 40, 21,184,197, -101,214, 14, 77,112,113,168,188, 82,124,182,150, 11,247,205, 6, 72,131, 28, 64,255,234,218,215,175, 79, 95, 32,244, 16,126, 53, - 99,237, 0, 27, 94, 59, 90, 76, 42, 82,140, 87,255, 35,225,118,181,125,109,112,222,127, 55, 58,225,159,225,173, 26,156,245,240, -228,192, 56,150,227,104, 52, 91, 68, 10, 67,106,232, 27, 39, 38,141, 74,103, 56, 27, 34,192, 17,131,160, 28,174, 80, 96,115,218, -149,233, 6,254,117, 33, 33,129,232,119,113, 84, 5,137, 12,191, 22,224, 24,161,188, 77, 34,186, 4,112, 90,184, 12, 29,195, 69, - 48, 88,138,136, 17, 27,244, 12, 53,119, 81,178, 43, 59,205, 47, 70,225,199, 28,148,104,169,234,164,113,236,118,244,252, 8, 3, - 53,134,209, 59,235,245, 39,125, 97,206, 44,111,236, 29,142,163, 51, 62,106,149,190,166,153, 40, 74,187,238,222,216,187,249,250, -244,165, 38, 37, 85,190,124,224, 25,230, 37,137, 82,137, 14,234,235,165,158,161,212, 32, 58,174,200,199, 65, 17,174,137,102, 8, -216, 95,193, 74, 69,101, 97, 64,169, 41, 39,142,191,239, 63,120, 64, 91,222,211,159, 31,158,188, 58,254,241,135,239,163,240,220, - 6,160, 5, 1, 62,129,225,168,148,100,133,109,152,246,248,113, 55,203, 65,184,202,145, 31, 63,150,150,133,126,164,105,150,173, - 64,187,119,247, 54, 81,222,253,235,143,186, 93, 52, 27, 22,186, 73,149, 54,135, 68, 33,210,208, 70,221,234,245,199,195,179,144, -119,155, 31, 8,199,244,219,126,112,122, 62, 80,251,117, 50,124,169,163,230,190, 92, 51, 22,192, 74, 62,235, 61, 81,150,157,211, -184,188, 74, 93,203, 19,186, 96,152,242,150,191, 27,138,212, 14,123, 23,223,105, 76, 19,160, 87,129,165,193,168, 11, 31,149, 90, -145, 39,251,237,131,160,238,119, 7, 93, 5,110,175, 27,117, 54,154, 18, 14, 24,241,114, 94,173, 74,249,134,242,225, 37, 80,243, -215, 57,163,194, 49, 48, 29,215,118,121,113,195,107,145,212, 82, 5,224,204, 73,116,118,187,115,231,237,240,141, 0, 16,149, 38, -116,241,101,243,160, 63,121,239, 73,245, 15,115,231,201,244, 34,158,136, 4,250,103, 8, 4, 57, 95, 40, 67,148, 69,156,204, 92, -199,173, 89,108,229, 23,255,209,159,226, 59,201,215, 73,179,148,159, 82, 19,252, 65, 84,201, 88,175,208, 78,233, 66,145,168,244, -152,116,232,220,208,138,148, 15,212,155, 89,234, 58,245, 28,226, 49, 72, 35, 48,205,153,165,166,174,111,192,116, 18,152,153,154, -157, 36, 51, 93, 21,101,165,182, 11,154,107,189,234,236,223,163, 92,255,237,247, 71,191,254,249,232,239,193,224,238,246,119, 87, - 58,141,234, 98,202, 91,110,147, 22,248, 30,221,186, 67,123, 87, 41, 92,144,227,193,170,150, 66, 16, 38,231,179,170,146,217, 52, - 12,226, 43, 20, 56, 64,212, 27,122,154,230, 23,243,203, 50,137, 14, 93, 26,165,212,141, 41, 46,169, 99,209,129, 67,135,232,206, -210,226,156,126, 57,250,233,254, 55,223,250, 30, 12,185, 97,152, 54, 7,190,190,101,100,194, 3,140,212,202,158, 77,162,229, 60, -110,237, 52,199, 67,155,198,115,106, 58, 91, 91,181, 50, 98,119, 75,150, 91, 42,201,239, 84,177,252, 42,143, 45,108,157,138,240, -170,219, 63, 6,110,149, 72,230,213, 97,236, 62, 92,124, 80, 35,211,188, 5,251,187,215, 57, 7, 58, 25,191,123,246,254, 56,112, -125, 37,170,196,247,161,210, 87,242, 9,252,226, 27,152,164, 49,135, 98,187,222, 78,114,137, 90, 25,223,252,182,191, 13, 92, 47, - 85,211, 56, 84, 82,100,106, 94, 37, 95,105,198,107, 66, 40,132,203, 41, 37,144,149,204,129,148,131,180,226, 31,213,110,188,225, - 24, 31,131,159,151,139, 53,122, 4,133,130,173, 96,103, 18,141,228, 43,108, 78,139,221,198,222,199,233,233,122, 38, 68,145, 16, -107,245,154,183, 16,213, 48, 94,213,246, 90,170,243,247,153,226,134,166,112,114,255, 22, 66, 80, 31, 42, 99,169,134, 75,170,117, - 72,160,198, 41, 48,254, 10,204,236,134, 38,126,179, 70,189, 62, 9, 64,213,181,244, 52, 17, 69,225,219,153,206,163, 83,218,210, -148,214,130,202,195,136, 26, 9,198,196,196, 7, 6, 22,198, 13, 18, 19, 19,151,254, 52,183, 46,116, 97, 2,198,224,206, 68,127, -132, 11, 19,131, 38, 45, 88,152,210,233,180,157,206,116, 94,158,239,220,105, 17, 54, 44, 40,147,222,185,247,158,243,157,215,247, -101,248,157, 96,187, 28,254,166,245,145, 39,244, 99, 31,205,221,204, 61, 79,159, 53,208,144, 79,145,210,132, 73,223,146,199,183, -183, 8, 68, 96,140,115, 86,240,189,144, 35,200, 50,236,132,190, 19,168, 90,171,108, 95,152,182,132,229,143, 2,186,168, 57,101, -181,126, 99, 20, 12, 37,213, 80, 54,207, 11, 61, 32,184, 92,215,115,232, 97, 60,200, 78,199,210,129, 5, 44, 84, 64,120, 16,177, -128,162,212, 73,130, 43, 69,140, 54,101, 6,201, 45, 47,172,144,169,165,239,193,222, 12, 22, 32,207,127,229, 74, 55,178, 75, 6, -200, 76,164,242, 51,140,206,214,173, 71, 65, 50,105,206, 55,237, 65, 47, 64, 31, 32, 76, 43,221,180,142,115,154, 50,137,249, 0, -243,114,162, 89,109,246, 71,110,136, 44,129, 98, 21,224, 12,232,229, 52,170, 77,122, 84,173, 84,103,174, 21, 65,176,142, 71, 88, - 85, 49,165,100,161,119,245,122,247,205,185,109,119, 7,221,144,213, 66, 50, 37, 2,132,159, 9, 8,205, 71,142,116,210, 32,141, - 75,209,167, 98,229,149,185, 66,174,108,169, 53, 75, 95, 40,104, 37,138,124, 83,130,224, 24,176, 81,225,105,210, 96,130,219, 51, -246, 65,227,232,209,246,248, 16, 74, 37,220,182,212,168,127,251,124,248,254,195,199,190,227, 31,253,110,133,254, 68, 39, 99,144, - 71, 20, 68, 40, 51,137, 83, 90, 27,194, 50, 93, 43, 24, 6,194, 41, 45,111, 25,154,206,122,155,150,161, 88,166, 82, 44,104,247, - 55,239, 85,203,197, 79, 7,251,127, 79,206,226, 36, 55, 30,135,163, 17,176, 35, 24,104,233, 12, 4,201,241,169, 11,182, 6, 36, -179,227,128, 43,159,233, 76, 22,129,211,162,220, 20, 78, 22,170, 76, 81, 39,249,191,172, 50,201,234, 28,116, 4, 23,231, 23, 93, -175, 79,104,143, 86,218, 29,158,113,217, 27,255,130, 28, 8,163,155, 76, 32, 8, 80, 5, 49,187,227,245,112, 97,184, 5, 94, 87, -244, 36, 75,172,251,108, 70,231,192,224, 33,121,241,209,202,101, 72,172, 60,134,221, 23,245, 74, 99,232, 15, 98,230, 81, 24,131, -225, 43,199,180, 36, 26,189,248,155,215,238,182,237, 63,229, 2,160,156,156, 51,162,152,195, 15,188, 90,169,225,122, 61,153,141, - 1,141,196,108,160, 48, 75,161, 96, 79,117,244,138,232, 17, 75, 64,251,208,108,203, 77,103, 78,166,233,116, 5,237, 39,136,108, -210,148,229,153,192,241, 59,137,163,156,184,208,183,144, 33, 75, 30,157,254,138, 4,114, 80,124, 65,120, 68, 16, 1, 13, 57,186, -170,141,130, 65, 42,185,147,210,105,219, 0, 95,101,130,252, 38,168, 32, 66,153,148,211,161,130, 29, 45, 85,150,158, 61,125,181, -255,229,237,225,215,119,194,235, 69,147,120,221, 72,214,159,108,134, 39, 61,122,157,104,179, 89, 93, 19,235,119, 4, 55, 30,164, -238,160,111,119, 8,216,227,168, 71,153,161, 55,139,149, 74,121, 94,148, 77,161,231, 21,103,124,106,247, 90, 93,199, 59, 57, 10, -199,238,129, 45,190, 15,197,207, 64,180,125,224,247,101, 10, 25, 85,225,167,162,213,179,159,111,239, 93,185,186,136,250,134,169, - 21,203,115,249,166, 37,180,156, 48, 17,194,196,238,200,235, 13,104, 27,117, 13,228, 13, 21,191,163, 22, 13,117, 28,201, 12,179, -127, 30,254, 56,238,114,179, 47, 87,207,152,109,140, 66,162, 88, 72,128,138, 62, 25,100, 23,177,177, 56, 60,181, 82,149,190,111, -163,220,136, 88,202,137,110,159,174, 26,228,179, 95, 60,216,109,219,237, 32, 12, 76, 2,157,220, 90,234, 5,158,153,215, 87,234, -107,238,208,121,249,112,175, 81,105,252,234, 28,209, 83,118, 54,182,139, 6,250,223,232, 20,109,111,236,180,206,143,105, 71,174, - 47,172,210,229,193,164,100, 22, 65, 33,142,144, 89, 24,218,236,170, 85, 13, 89,253, 85, 72,191,195, 89,190,172, 41, 19,179, 23, - 5,114,225, 17,234,183, 25, 98,133, 28,102,228,209, 47,208,212, 0,224,171,144, 31, 24,116,177, 28,254, 4,167,221, 48, 75,197, -138, 93, 56, 81,166,110,208, 90, 12,205,228,250, 77, 34,166,137, 74,217, 44, 64, 27, 29,161, 88, 40,100, 35, 9, 59, 26,105,224, -211, 75, 40,126,150, 7,185,220,152, 46,254, 75, 6,209,207, 63, 1,184,186,178,158, 38,162, 48,122, 59, 51,237,116,182,118,104, -139,108, 26, 18,136, 75, 32,110, 9, 49, 26, 19, 53,209,159,232, 47,241,133, 23, 19,125,247,197, 24,136, 1,138,128, 75,105,161, -208,101,166,237,236,227,249,190, 59, 8,241,169, 47, 77,151,123,231,219,207,119,206,149,127,215,170,176,177,213,214, 26,252,111, -153, 73, 22,185,157, 31, 74, 98, 94, 88, 81,152, 76,157,138,131, 42,178, 85, 91, 56,238,182,207,189, 62,101, 91,185,224,153,190, - 30,165,197,164, 72,130, 70, 11, 36,114, 73,129, 87,145,145,133, 57,109,212,186,233,162, 62,130,181, 92,140,207,175,138, 87, 50, - 98,150, 79,163,244, 26,169,101,202,205,126,217,111,131, 69,173, 52,105, 94, 44,183,206, 80,109, 73,170,166,245,197,123, 8,128, -146,215, 67,202,244, 12,125,188, 71,184,196,215, 76, 34,115,118,213,122,118,247,197,209,249, 15,201,216,159,211,170, 75, 89, 18, - 55,243,102, 67,102, 27,150, 23, 76,124, 42,202,124,215,158,171, 16,247, 93,213, 11,166, 81,134,236, 9,230, 83,225,242, 48,245, -102, 19, 90, 85,231,195,199,173, 76,145, 26,228,153, 63, 29,225,215,250,225, 4,214,136,242, 25,134,141, 68, 38,229,172, 8,127, -200, 54,104, 28,255,117,239, 75, 16,134,196, 38,150,230,248, 46,169,101,205,252,162,164,114,103,232, 4,213,226, 39, 68, 81, 51, -219, 31, 5, 89,160,102, 19, 53,153,168,121,164, 90,138,233,154,213,150, 99,184,166, 49,111,215,156,178,169,103,154,173,170, 53, -161,214, 52,205,212, 84,124,166, 90,208, 58,136,195,131,246,247,253, 61,252, 71,183,166,151,137,201, 49, 43, 19,211, 86, 22,195, - 29,226,151, 69,164, 82,204,120,137, 98,172,129, 32, 90,213,224,136, 21,135,140,154, 34,135,239, 37,187, 59, 7,159, 63,126,218, -111, 31,225,185, 66, 8, 97,126,157, 92, 87,242,166,169, 85,202,217,175,110, 52,131, 87, 79, 89,116,188, 16,172, 36, 63,133,243, -129,219,165, 6, 14,202, 36,214, 16,161,106,143,239, 68, 45,118,184, 5,113,192,149,114, 26,148, 9, 97, 84, 17, 89,136, 71,137, -243,229, 18,220, 43,241,101,114,181,251,120,245, 73,111,212, 41,118,202,255,241, 54,163,100,227,152,114,203, 93,134,107,131, 65, - 82,152,199,137, 19, 17, 30, 1,230, 36, 48,151,208, 31, 81, 96, 27, 53,156,240,234,252, 90,119,208, 33,221, 46, 24, 73, 28, 91, - 21, 11, 95, 71,172, 82, 89,218, 27,157,226,233,218,188,253,168, 55,232,112, 3,143,214,143,145,140, 15, 39, 3, 9, 43,160,190, -182,166,227, 51, 29,221,134,249, 95, 55,151, 20, 86,127, 78,105,213,121,169,177,236, 7,190, 66,210, 25, 4,127,148,244, 71,140, -199,164,137, 14, 78,131,132, 13, 88,158, 2,217, 6, 67,152, 67,110,241, 11,165,152, 70, 40, 87,172,230,130, 87, 97,137,117, 35, -102, 72, 62,155, 73, 86,209,116, 14,148, 20,216, 53,234,219,145, 81,147,150, 55, 53, 52, 98,218, 84, 66,202,204, 75, 76,120, 8, - 94,109,190, 78,210,224,195,246,251, 13, 91, 60,112, 69,179, 44,180,104,182,245,246,101,214,235,195,169,216,142, 37,158,110,137, -122,157, 56, 6,166, 73,230,249,195,254,105, 80,224, 35,165,174,122, 86, 42, 27,141, 90, 67, 53, 13, 81, 55,137,117,243,108,116, -216,235,143, 47,186, 71,253,225,246, 88, 72,244,181,199, 53,251, 67, 75, 88,170,152,102,162,227,137, 55,207,223,173,111,220, 71, -109,168,195, 69, 45,212,197, 28,247, 0,198, 81,114, 57, 78,162,144,192, 21,212,134,167, 8, 84, 29,158,104,142, 65,192, 95,220, - 56, 50,235, 65,248,237,184,175,240, 22, 18, 3, 0,100,171,189,144, 80,146,250,213, 18,169,132,211, 67, 9, 74, 55, 14,223, 29, - 19, 80, 82,225, 76,113,169,185,208,247, 46,194, 48, 24, 76, 7,166,110, 45, 53,150,162, 40,108,218,205,149,230, 29, 60,132,254, -204,183,116,243,248,236,100,185,185,252,231,252, 39, 46,107,191,211,190,240,251,139,245,133, 75,127,176,251,123, 7, 33, 1, 41, -136,107,187, 19,234,246,148,100,108,144,137,138,101,216, 9, 35,104,103,201, 12, 1, 80,146,204,112,227,150,124, 35,201,204,178, -183, 66,210, 16,165,177, 82,220,167,116,204, 76, 48,164,144,246,100,154,199, 43,141,219, 7,221, 61,138,191,162, 88, 63,150,163, -245,152,166,184, 5,142, 48, 32,220, 14,179, 43,164,185,236,226,231, 55, 70,170, 45,167, 53,225,145, 94,233,154,221, 62,183,245, - 26, 3,192, 10,181, 20,229,106, 20,123, 3, 34, 89,250,207,197,203,151,191, 2, 48,117, 37,189,109, 27, 97,116, 56, 34, 69,138, -146, 44,111, 73,106,217,112,146,214, 1,138, 54, 61,244,220,254,231, 30,218, 67,110,233,165,183, 2,205,226, 54, 70, 16, 32,105, - 44, 91,114,108, 75,150, 68,137,219,112,216,247,190, 17,141,222, 4,219,176,200, 89,191,229, 45,254,189, 59, 12,150,232,191,211, - 79,108,156,238, 30, 94,221, 93, 72, 77,133, 81, 57, 66,230,180,164,172, 88, 82,172,176,115,247,250,187, 5, 53,242, 42,111, 35, -191,103,116, 75, 31,108, 29,126, 89, 78, 88,151,113,233,132,218, 80,214, 61,186, 47,209,176, 24,159,227,168,139,252, 23,123,123, -167,187,127, 83, 79, 42,209,215,151, 4, 39,192,220, 20,196,132, 34,162,203, 93, 29,179,129,254,168,239,143,127, 28,253,245, 91, - 45,244,171,101, 45, 46, 57,214,126,152,188,151, 60,196,106,145, 4,118, 67,141,103,186,158, 79,100,245,120,139,116,241,251,223, - 47,145, 58, 85, 20,132,160, 78,200,138,160,120, 18,176, 59, 81,132,251,252,213,167,183,210,140, 81,152,108,188,209,233,231,119, -178,223,184,200, 56,247,142, 95,171,156,137,100, 11,159,145,109, 20, 98,142, 78, 35,180, 32,148,114, 13,235, 57, 69, 93,121, 85, - 30,183, 98,124, 62, 25, 62, 27, 79, 39, 56,155,240, 63,211, 89,218,139,251,244,183,106,121, 56,168,147,252,130,185,160,173, 58, -237,238,245,226,234,217,240,155, 89, 50,111, 43,196,212,241, 79,223,254,252,226,213,175,203, 76, 45,178,146, 99,209, 34,199, 49, -249,124,115,180,115,178, 54,183,198,155, 14,247,227,135,219,113, 63,234, 51,134,164,160,184, 54,134,148, 40,241, 5, 66, 54, 90, -173,123, 65,101,112,252, 25,196,221, 54,167,124,221,138, 56, 55,196,147, 94, 78,135, 61,143,170,200,148,113,171, 3,109, 67, 60, -144,221,136,204,226,167,108,148, 69,218,216, 20, 57, 91, 23, 33,144,176, 63, 42, 75, 66,128, 87,233, 94, 80,191, 31,165, 37, 75, - 67, 1, 5,215,168, 26, 96,241,130,121,149, 35, 3,192,174, 75,168, 55, 71,219,121,242, 20, 5, 20,204, 7, 36, 4,216, 56,190, -162, 76,144,231,180, 77, 87,217, 74, 20,123, 8,190, 50,100,247,165, 71,187,135,227,187, 75,140,243,217,232, 84,114, 21,249, 67, -237,227,128, 38,246, 92,211,118,249,249,211, 31, 78, 63,190,110,211,137, 74, 75,179,139,195,142,147, 1,103, 75, 81,225, 14,182, -190,208, 20,227,176,135,195,244,236,252,141,243,204,192, 33,184,214, 54, 8,219, 97, 29,166,121, 42, 44, 4, 22, 43,255, 25,189, -193,104, 48,201,243,188,173,112,144,149,171, 48, 8,240,157, 37, 45,144,124, 9,165,179,212, 20,123, 91, 7,211, 4, 33,136,247, -120,255, 24, 73, 24,145,145,148,137,151, 26,186, 50,126,205, 58,254, 86,180,189,204, 22, 13, 87,131, 37, 23, 82,231, 75, 43,170, - 6, 86,184,123, 37,222, 37,164, 6,138,230,150,161,235, 0,209,166,108,253,105,132, 11, 61, 92, 75, 14, 33,134, 7, 30,116,119, -146,245, 34, 47,210,198,166,194, 19, 22,106, 93,212,153, 34,252, 68,236,201,180, 72, 21, 72,248,131,131,250,232,193,241, 31,127, -254,114,220, 98, 11,116, 94,169, 8,239, 81, 38,138,162, 17,186,131, 81, 31, 14,213,193, 35, 85, 56,181,111,182,103, 93, 21,228, -222,119,148,176,136,100, 49,157, 45,191,186,233,168,189, 88,237,246,119, 6, 49,130, 24,227,119,102, 86, 27,101, 3, 33,130,227, -136,157,139, 26,120,215, 87, 93, 92, 48,228,180, 91,191, 31,249,200, 31,219, 1, 37,104,240, 18,215,169, 50,165,160, 43, 56,103, - 84,104,196,170, 88,182,144, 85,225, 88, 87, 81,136, 43,162, 93,150, 88,105,219, 81,180, 48,233, 70, 15,172,250,159, 34,161, 72, -138,139,121,233, 26,191,196,106,199, 68, 32,118,204, 12,242, 81, 44, 7,253,245,163,147,203,217,120,116,125,238,171, 0,145, 89, -160,131,172, 88,143,103,147, 39, 15,158,122,100,141,183,175,230, 19, 58, 10, 4,225,151,217,120,158,220, 61,220,198, 12, 78, 7, -157,193,243, 39,223, 93,220, 94, 34,200, 97,187,222, 86,171,108,121, 54,154, 98,204,247,250,251,217,221,186,214,206,192,134, 56, - 25,167, 16,216,208,164, 93, 95, 80,132,206,145,102, 17, 13,236, 42,208,190, 79,176,207,166, 5,106,239,153, 75,196,118,211,171, -224,242,246, 28, 1,184,164,236,133,171,244,117,130,120, 69,148,185, 67,220, 52,237, 96,247, 45, 77,133, 90, 55, 85, 25, 45,187, -218,121,253,110,160,188,114, 75,164,249,210,186,150,165, 20,106,106, 1,213, 84, 27,230,135,106,240,145, 94,221, 24, 87,220, 51, -165,254, 19,128,171,107,217,109, 26,136,162, 51,182, 99,143,237,166,177,211, 60, 90, 90, 90, 5, 80,213, 46, 64, 8, 16, 21, 18, -143, 86,172,224, 15, 96,195, 2,144,248, 52,190,130, 5, 27,132, 80, 69,139, 64,160, 42,208,138,182,105,210, 36,205,163,182,235, -196,142,205,189,119, 76,169, 88,103, 19,123,102,174,207,185,115,238, 57, 18,191, 39, 2,109, 13, 24,217,212,165,100,118, 72,130, - 36,118, 97, 20,133, 10,170,208,197,225,201, 33, 54,125,184,252, 75,137, 66, 70, 75,131, 0,231, 80, 84,150,137,244, 53,174,162, - 59, 7, 58, 33,198,197,124,209,195,214,161,186, 88,169, 13,130, 19, 98,193,158,173, 79,193, 99, 44,207,175,162, 59, 15,230, 51, - 68,217, 77, 85,166, 18,165,102,147,130, 82,188,250,209, 14,153,140,103, 12,197,194,171,170, 8,115, 43,165, 60,158,203, 6,158, - 98,235,230, 66,169,182,126,125,189,213,111, 39,147, 72, 24, 86,140, 62, 62,234,121, 43,171, 52, 93, 9, 66, 96,214, 73,181, 80, - 61, 13,189, 44,231,137, 67,225, 14,154,131,227, 73,102, 90,159, 57,209,203,228,117,156,111,154,196,133, 41,167,239,247,225,119, - 32, 46, 24,237, 6,135, 71,183, 49,129, 26,101, 91,184, 94,183,174,220, 22,134,240, 67,111,214,189,132, 18, 32, 85, 61,236, 30, -192,147, 75,208, 10, 64, 50, 8,125,242, 5, 53,224, 73,129,196,193, 62,184,115,117,109,167,249,163, 96,186,221,179,147,189,246, - 94,156,140,111,215,238,146,255, 81,223,202, 25, 69,203,133,215,127,173, 90,179,132,213,232,237, 67,205,248,210,175,127,172,239, -126,168,239,109,255, 62,216,105, 30,109, 29, 53,127,118, 58,245,227, 54, 67, 25, 60,192,144,132, 27,214, 56, 66,160, 81, 16,198, -140,101, 45, 78, 79,151,129, 1,152,162, 98,137, 89,203,188,236,216, 37,203, 40, 0,155,213, 0,101,164,192,145, 96,153,161, 82, - 5, 33,162,251, 24,155, 25, 28,157, 99, 85, 46, 68, 90,152, 74,243, 38, 0,168,148,143, 89,163, 17, 28,116, 3,148, 0, 1, 29, -144, 6, 78, 24, 84, 34, 28,211,189,183,252,160, 53, 60,166, 84, 13,110, 96,112, 16,240,117, 84,152, 9,205,212, 13, 51,142, 35, - 37,179,136,200,166, 60, 21,169, 75, 5,142,101, 58,154,162,160, 22, 77,213,232, 50, 10,171,161, 0,142,162, 81,114,160,140, 91, - 72,101,128, 60, 2,249, 39,107, 79,183,235, 91, 8, 91,165, 97,136,228,239,240,239,146, 17,154,124,163,229,150, 0, 44, 8,231, -214,157,154, 1,148, 4,235, 10, 75, 54,231, 94,238, 12, 91, 80, 85, 95, 60,126,245,249,215, 38, 74,181, 73,184, 62, 91, 92, 40, -231,203, 94,224,147, 53, 21,166,152,146,143,105, 40, 47,209,198, 24,168,139, 87,177, 64,227, 80,147,147,166,128,241, 81,212,129, -109, 35,140, 55,153,115,230,161,238,224,248, 5,222,107, 69, 60,253, 59, 77, 35,109, 36, 9,153, 0,205,157,100,129,205,168, 68, -116,237, 25, 31,246, 63, 81,235,135,171, 27, 65,136,113,232,240, 45,177,114,150,212, 2,194,126,184,177,116,115,159,124, 17,102, -157, 5,172, 11, 82, 61,146, 2, 26, 48,221,124, 9,246, 15,154,229,161,148, 10, 79, 43, 10, 35,121,162,115,254,104,229,222,167, -205,183,115, 90,244,222, 99,239,250,172, 57, 98,243,106,186,241,112, 45, 29,120,170,161,243, 91, 55, 89,169,140,224,253,108,204, -224, 27, 61, 56,237,181, 27, 97,132,137,186,177, 12, 73,162,221,174,219,142,165,229,114,182, 1,251, 27,248,105,243,176,221, 28, -122,195,110,251,187, 39,187,211,232,178,187,172,179,251, 46, 19, 10,107,141, 88, 47,100,207,159,189,116, 86,106, 12, 74,185,105, -200, 25, 45,244,149, 55,160,240, 42,120, 46, 53,156, 40, 82,108, 17, 28, 53,180,222,110,174, 82, 98,182,142,163,229,147, 73,208, -241,118,247, 79,189, 9, 70,188,103, 30, 9, 73, 26,115,186,111,165, 90,230,218,142, 63, 58, 35, 56,229, 3, 72,122,253,228, 13, -188,135,206,160, 11, 75,209,234, 53, 97, 53, 23,171, 75,167, 80,157,210,120,161,180,152, 55,243, 0,240,219,131,150, 31,162, 33, -112,127,216,173, 85,106,115,197,170,166,139,222,160, 3, 24, 25, 62, 12,182,110,125,253,253, 13, 88,184,108,179,200, 59, 30,178, - 32, 69,146, 9,135, 17,142,249, 76,190,140,178,247,113,152,100, 80, 94,182,106, 72,146, 66,162,185, 17,245, 12, 46, 94, 94, 42, -255, 18,213,101, 88, 1, 26,124, 6,177, 79, 94,167, 81,154,205, 45,203, 6, 15, 7,204,165, 80,255,129,157,123, 35,147, 89, 9, -229,250, 42,236, 66,101,151,170, 89, 57,118,171, 82,231,132, 76,147, 56, 77,111,164,255, 44,246,206, 29,235, 46, 32,245,255,154, - 51,231, 63,255, 17,128,171,107,105,109, 34,138,194,119,230,206, 76, 38,147, 76,154, 54,105,107, 66,171, 88, 43, 62,170,136,130, - 32,130, 43, 55,130,123, 23,186,240, 39,184, 17,252, 91,130,248, 3,196,133, 66,105,165, 20, 91, 20, 73,218, 36,109,218, 36,205, - 60,146,201,100, 50, 47,207, 57,119,162,226,174,165,139,134,185, 55,103,190,115,206,247,200,230, 51, 5,213,132,134, 8,225, 21, -166,217,197,194, 42, 83,154,191,160,196,172, 7,174,196,198,165, 27,126, 48, 17, 52,178, 98,206,224, 28, 35,208,140, 92, 30,229, -127,226,209, 48,140,181, 77, 72,193, 69,131, 29,109, 26,144,159,148,148,146, 11, 32,167,143,158,162, 12, 78,226, 61,167,203, 83, -121,206,100,158,231,119,208, 59, 19,123, 58, 69, 79, 50, 94,176, 44,236, 13,138,121, 19,147, 15, 25, 0,130, 28, 57, 77,255,209, - 54,161, 67,208,192,233, 53,206, 26,112, 78,112, 93,111,213,111,117,237,174,104,111, 69,128, 61, 58, 7,208,142,196,241, 71, 73, - 54, 0,196, 85,235, 60, 11, 18,143,132,246,233, 49,185,209, 99, 75,142, 6,134, 26, 20,238, 17,142,255,100, 9,138,175,162, 64, - 75,170, 57,158, 83,175,172,155,133,242, 8, 37, 15,236,116,120,210,119, 7,104,147,228, 57, 23,227, 11, 92,168, 38, 41, 96,121, - 84,106,144, 45,118,136, 98,229, 88,248,219, 96,242,118, 20, 53, 6, 13,248, 72,181,114,221,245, 29, 4,188, 36,244,232, 1,146, - 77,211,171,171,155,238,116, 4,189, 94,107,216,108, 89, 13, 57, 85, 55,106,235,137,102,193, 87, 7,254, 55,180, 35,110, 18,184, - 51,239,220,179,154,246,112,247,180,243,169,209,216,105,181,131,136, 89,179,240,116, 52,253,101, 89,159,143, 58,251,221,179, 15, -135,205,175,205,206,118,111,240,205,181,247,135,150, 21, 76, 31,175,215,234, 75,165, 69, 93, 95,206,231, 77,158, 51, 36,213,144, -148, 69, 85, 41,202,188,172,113, 3,250, 12, 85,129,239,176,174, 49, 93,225, 35, 59, 58,108,216, 29,219, 23,235,184, 88, 4,218, -211,152, 28,215,191, 50, 63,232,236,161,141, 23,221, 35,204, 92, 68,143, 83,124,225, 97,225, 19,252,244,121,162, 34,249,169,136, - 49, 26, 82,214, 48,236, 16, 37,154, 40,141,137, 89,178, 98, 46,195,177,248, 51, 47, 78, 66,161, 9,204, 84,202,217,124, 91,218, -253,185, 67,116, 20, 25,192, 93,125,113,205,134, 94,144,120,148,162,177,197,228, 24, 28,158, 38, 80, 37,161, 85, 39,112,195,160, -191,214,181, 2, 20, 2,149,107,223,143,246,161, 16,171,208,171, 16,130,178,198,195,187, 87,238, 6, 81,128,154, 38,137, 87,139, - 85,192,227,164,139,153, 9,130,185,136,124, 64, 5, 63, 6, 90,224,146, 4, 69, 91,180, 41,186,182,186,121,114,209, 22, 2,171, - 12,204,201,217,246, 33,175, 27, 4, 71,144,232,137,108,156, 52, 41, 81, 18, 33,166,105, 5, 30, 41, 97,176,184,180, 47, 90,102, -174,224,135, 83,192,167,208, 37,247, 0,114, 98,176, 89,114,238,118, 37, 12,192,225,128,132,162, 12, 68,146, 21, 71, 20,250,193, - 24, 61,124,209,207,133, 19, 51, 76, 86,144,172, 45,151, 52,237,209,245, 7,205,189,143, 83,137,189,183,217, 48,101,103, 49,187, -109,242,231,207,158,176,225, 88, 94,169,176, 7,247,241,169,123, 33,155,248,108, 18,206, 92,199,237,183, 67,226,182, 10, 63, 79, -161,216, 82,116, 67,209, 10, 37, 56,200,106,145,153,134,218,119,155,125, 39,114,251,214,120,210, 39,227,161, 75,156, 61, 95,100, - 91, 69,132,233,205, 49,203,151,170,175,223,188, 99,203, 11, 88,208,225,173, 0, 93, 3,252,144,227, 56,130,231,184, 94,200,204, -159, 20,201,222,254, 82,212,103,124,173,194,114, 42, 81, 61, 98,239,216,254,209,113, 38,200, 35, 98,100, 2,134, 72, 85,149,149, - 50,244, 46,216,184,144,164,139,218,190,122,165,214,183,251, 95, 15,190,180, 6,173,178,185,112,231,242,205, 90,101, 5, 14,101, -165, 88,237, 33,173,142, 3, 70,196,100, 5, 42,119,175,158,190,244, 67,191, 61, 56, 25, 78,112,151,118,239,206,195,238,105, 27, -110, 29, 60,228,213,165,213,115,187,247,238,197,219,155,107, 91,199,189,163, 73,232, 3,178, 12,162, 41,220,116, 47,128,151, 46, -135,195,154,204, 60,114,120, 23,201, 46,172,108, 44, 69,104,197, 30, 11,126, 59,116,216,108,158,201, 44,232,227, 44,253,223, 0, - 12,126, 47,151,170, 65,224,163,225,140, 68,166, 81,217,130, 38, 19,154,102, 67, 54, 38,200,179,132,122, 16, 76, 43, 80,105, 52, - 52,143, 80,201,100,123,238, 62, 60, 39,110, 73, 20,188, 70,110,111,114,154,196,236,175, 45,157, 36,255, 83,150,255, 89,210,254, -241,233,251,251,135,223, 2,112,117, 45,189, 77, 99, 81,248,250,117,109, 55,169, 19, 82, 82,104,161, 45, 3, 82, 85, 81,196, 2, -186, 64,108,217,176, 0,214, 72, 51,187,249,143,136, 29, 18, 11, 16,172, 16, 11, 52, 72,157,118, 4,105,147, 52,175,218,177, 29, - 59,142,109,206,119,174, 93,164,145,186,107,155, 38,245,185,247,188,190, 71,117,191, 51, 13,140,154,249, 4,146,170, 32,104, 59, -121, 45, 21,162, 87,222,218,184,192,167, 33, 68,118, 52,174,139, 87, 28, 35,142,105,251, 84,180,234, 16, 27,217,190,182, 19, 38, -129, 35,215, 42, 27, 7,186,185,212, 98,145,245,135,233,207,122,174,199,117, 13, 94,170,221,236, 36,192, 42,169, 12, 6,136,241, - 13,111, 43, 76,124, 0,101,160, 2,175, 92,247,244,218,210, 27,169, 13,246,211, 69,198, 86,235,185,218, 88,149, 21,232, 16, 0, - 30, 68, 62,179, 18,232,153,157,207,206,107,250,139, 74, 83,218,118,103, 59,162, 24, 42, 85, 26,199, 15,239,116,247,134,193,128, - 10,109,105, 73, 44, 47, 25,221,222,105, 92,247,177, 60, 4,242, 93, 65,173, 21,179, 92, 97,225,120,114, 69,109,160, 78,151,248, - 12,190, 95, 74,221, 27, 43, 7,122,207,116,158, 43,231, 29, 81,186,114, 45, 94,198, 76, 49,197, 18,220,115,219, 17, 87,241, 89, - 70, 13,124,185, 70,223, 77,147,157,141,221,139,224,162, 33, 27, 12,224, 67, 41, 96,234, 54,189,243,131,219, 15,190,157,125,189, -211,221, 15,146,160, 41, 59,195,249,112, 28, 47,150, 89, 97,177, 31,170, 45,133, 37, 97,151,172,252, 54,165, 48, 93,195, 10, 52, -241,229,248,191,147, 97,255,231,197,216,199, 41, 41,114,203,118, 60,207,166,156, 0,138,141, 54, 8, 23, 31,143,207, 38, 97,121, - 58, 90,245, 3,150,251, 74,139,112, 5,128, 76, 74, 61,120,110,100, 32,128,148, 73, 82,250,151,197,232, 34, 63,233,165,195, 32, - 98,229, 22,101,221,128, 98,215,212, 41, 16,243,166,235, 81,170,230,138,210, 96,145,141, 82,237, 36,109,203,181,177,239, 90,233, -138, 10,173, 87, 6, 12,108,144,133,241,130,169,129,163, 68,105,207,192,248,101,169, 44, 29,114,158, 44,171,127,154, 52,156,202, - 59,164,110, 28,149, 94, 43,189,132,212, 29, 58,195,147,112,116, 21,199,154,146, 35, 96,151,109, 96,153,229, 26, 79, 87, 27, 74, -205, 63,136,125, 93,233,253, 10,140,140, 4,174,224,117,106,152,226,116,209,159,246, 22, 84, 36, 66, 25,125,149,230,171,101,154, - 66, 78, 86,171,165, 29,113,248,114, 12,156,202,218, 75, 24,204, 97, 41, 13,139, 26, 2, 38,211,225, 51, 53,153,207,117, 37,151, -221,118, 91,209, 34, 20,191, 53,164, 48, 45,196,244, 83,183, 14,247, 30,142,253,145,231,224, 89,148, 44, 82,168,235,230, 50, 75, -166,193, 72,225, 59,181,106,217,128,133, 4, 11,206,176, 23, 20, 79, 89,111,111,236,196, 80,196,211, 20,121, 3,194, 97, 2, 51, - 58,248,123,148,226,225,173,253,203,211,247,212, 17,127,138, 69,131, 5,231, 30,183,188, 23,207,158,104,243,185,184,127, 32,238, -222, 21, 73, 38, 22, 41,234,247, 36, 75,102, 35,127, 50,200,212,166,178, 88, 85,146,126,192, 60,152, 86,163, 45,203,194,166,196, -126,179,221, 18,218,184, 55, 29, 71,225, 35,195,247, 68,241,120, 93,251,243,102,249,180,133,207,212, 91,136,239, 19,241,242,249, -235,195,191,255, 18,208,213,144,168, 5, 76,173,250, 82,197,187,142,130, 83, 56, 70, 49,155,140, 63,188,187,190,191, 37,186,109, - 36, 0,150,132,141, 78,166,239,143,207,141,218,225,186,100, 53,189, 21, 20, 47, 98, 38,235, 84,128,105, 58,224,105,150,109,182, - 54,233,110,117, 37,149, 28,230, 60,158,255, 59, 56,141,146,152,170,239,113, 52,123,117,244,178, 63,237,175, 59,205,205,246,214, -101, 56, 9,227,197, 96,114, 78,105,155, 98,207, 22,178,119,246, 67,112, 33,101, 75,247,222,214, 31,244,224,222,124,126,251,189, -247,207,152,231,108,123,221,221,105, 56,117, 88,243,156, 90,132, 56,141,143,238, 29, 81,180,100,160, 76, 34,114, 64,254,101,124, -173,162, 65,243, 76,171,184,213,217,189,140,102,170, 94,108, 53,174,165, 80,200,160, 70,150, 57,161,240,103,161,162, 59,132,120, - 36,156,210,240,171,235, 14,101, 76, 29,172,157,154,219,221,114, 58, 41,104,204, 53,231, 67,136,141,102, 23,198, 86,232,128, 69, - 81, 1,103,202,255,121,107, 80, 4,186,102, 3,164,151,202,198,242,138,243, 81,109,114,180,223, 75,214, 43,240,140,130, 30,171, - 41,183,248, 37, 0, 91,215,210,219, 52, 22,133,239, 77,237,248, 21, 59,113,211,166,106,128,210, 42,154,169, 16, 20, 74, 97,168, - 6,216, 49,252, 1, 54,236, 16,191, 1,161,249, 29,179,224,223, 32, 16,171,217, 50, 26, 13,176,128,153,161,165, 29,210,196,141, -237,248,109,199,246,156,115,110,194, 75, 72, 85, 23,145, 90, 63,114,158,247,124,223,119, 4,127,181, 54, 20,179,223,238,219,198, - 50,132, 45, 36,124,115, 9,226,187, 24, 77, 34, 9,153, 36, 97, 85, 25,133, 27, 27,232, 81, 10,209,246, 16, 26, 66,120, 24, 78, - 80,244, 98,154,122, 2, 23, 92, 9, 64, 4, 69,249,115, 43,155,126, 60, 1,155,134, 63,135, 90, 88,172, 33,134, 26,104,173,179, - 14, 14, 79,228, 88,164,131, 66,248, 67,160, 62,118, 6, 92,109,106, 55, 6, 55, 63,156, 30,124, 58,219,252, 36,192,198,231,116, -100, 52, 16, 9,213,150,249,178,110,171,138,177, 98,173, 34, 32,135, 84,250, 54, 87, 7, 49,138,202,242, 53,123, 61, 68,175,195, -218, 28,156,159,136,161,115, 25,167,150,110,249,161,183,187,181, 7, 55,127,166,187, 49,116, 63,138,104,126,121,235,234,251,209, -223,240, 92, 59,231,175,124,196, 15,139, 54,202,140,100, 53,158,103, 20, 94, 52,145, 36,217,212,173, 20, 82, 69,197, 44,195, 46, -201, 95,182,207, 94,114,105,232, 42,242,123,199,236, 14,253, 99,146, 91,169,197,202, 21, 93,213,243,178, 0,131,131,162,227,167, -193,141,135,119, 31, 60,251,243, 25,124, 17, 16,102,193, 20,178, 50,167, 98,132,128,247,146,220,179,214,178,178,104, 54,154, 80, -129,166, 51, 68,116,157, 68,113, 18, 87,126, 92, 6, 17, 11,195, 58,138,234, 52,135,208, 91, 39, 25,242,182, 27, 53,119,166, 33, -184, 66,111, 89,179,219,134, 5,253,148,170, 66, 96, 52, 84, 89, 70,121, 29,108,178, 52, 25,181, 48, 54, 44,184, 86, 12,169, 37, -137,101, 55, 40,156, 96,234,184,241,112, 18, 29,141,253,163,113,112, 52,154, 30,142,252,131,113,112, 60,241,195, 52,135, 50, 7, -209,122,184, 92,138,139, 52, 77,117,252,140, 72, 61, 56, 81, 36, 5, 90, 94, 54,230, 10,229,112,159, 43, 70, 15,149,152,208,194, -150,192,220,179, 50,179,141,110, 78,100, 99,113,208,140,144,252,178,248,245,222,227, 87,239, 95,215, 52, 81,199,141,111, 36,175, - 10, 53,212,172,202,186,173,158, 44, 73,208,158, 67,185,208,108, 42, 80,234,130, 31,234, 74, 43,157,197,109,181, 3, 78, 8, 21, -108, 75, 53, 51, 4,222, 48, 18,191,197, 22, 31, 73,219,137, 91,139,137, 10, 91,146, 80, 60, 75,129, 82, 23,126,247,236,126, 71, -239,224, 10,129, 89,145, 22,137,221,234,192,229, 48, 13,160,176, 98, 19,252, 28, 12,120,197, 92, 69,130, 94, 93,169,146, 78, 88, -184,106,103,227,218,233,116,172,224, 14, 59, 13, 66,179,166,104,126,228,238,108, 94,133,214, 77, 87,113,207,248, 92, 48, 71, 60, - 58,162,194, 82,246,165,110, 59,159,163, 12,224,157, 57,129, 67,192,105,200,255, 57, 1, 70, 57,253,224,244, 20,158,139,102, 60, -165,160,164, 67,214,217,221,216,243,194,137, 40, 21,137, 54,149,192,183, 43, 20, 37,169, 38,166,182,151,212,173,161, 75,185,125, - 97, 63,248,231, 57,196,191,223, 49,179, 96,124,191, 63,232,223,250,249, 18, 43,114,118,237, 10,179,108, 60,156,137,114, 22,103, - 12, 94,223,232,191,208, 27,205,104, 80, 76, 2, 15, 11, 61,250,170, 84, 12,139, 47,193,173, 32,118,149,157,233,246,211,226,237, - 48,144, 51,247,110, 43,187,220,170, 47, 90, 56, 61,255, 55,173,255,114, 88,187,221,123,244,219, 19, 54, 88,199,248,222,144,191, -163, 69, 43,145,128,160, 34, 79,158,190, 80,179,177,126,113,147,217, 26,126, 72, 91,125,227, 55,163, 63,142, 60,218, 57,142,202, -249, 11, 38,168, 24,113,114,161,220, 69, 7, 17,204,212, 90,167,177,151,100,113, 94, 20,144,215,193, 12,240,116,174,169,117, 76, -219,241, 28,232, 66, 81,156,165,154,157,184, 39, 12, 15,172,160,119,224, 99,223,249,101,239,206,203,119, 47,183,207,254,184,191, -189,127, 56,250, 96,233,230,240,244,196, 13, 61,248, 15,215,127,184, 14,245, 59, 92, 98,125,249, 28, 52,220,216, 44,214, 44, 72, -166,240, 66,240, 52, 21,251,115, 70, 4,186, 26,154, 9, 67,183, 42,140,108, 8,169, 66,249,107, 94,107, 8,190, 8,231, 11, 56, -234,249, 38, 3, 40,100,117,213, 50, 81, 48, 39,130, 71,192, 17, 11,137, 68,129, 81,164, 89,210, 64, 86,187,152,244, 96, 16, 72, -145, 86,205,191,216,124, 7,229, 84,138,194, 53,139, 53,132, 96, 12, 52,243, 43,191,129,195, 20, 21,110,105, 89, 44,132,225,139, -133,216,252,171, 16,255, 89,161,105, 14,237,226, 11, 9,154,255, 5,160,235, 90,118,219, 54,162,232, 80,156,161, 36,202, 20,109, - 61, 16, 41,118,100,187,134,171, 32,109,146, 38, 14, 16,167, 93, 4, 69, 16, 32, 89,120,145, 85, 22,253,149,162,251,254, 65,127, -161, 64,127,160,187, 46,186,233,174, 77, 28,164, 5,106, 55,150, 93,201,162,101,201,122,152,164,248,204, 61, 51,148, 27, 32,232, - 7,216,210,140,238,220, 57,247,206,185,231,100,243,171, 12,117,119, 68,177, 88,179,106, 82, 90,156,203, 54, 55,218,212, 69, 81, -130,140,151,166, 95,175,180,166,148,193,165, 6,136,208,197,114,169, 2,203, 49, 65,103,160, 32, 21,180,117,211, 40, 41, 37,101, -161, 67,104,250,229,227,111,246,143, 94,209,249, 33,120,245,240,211, 71,221,193, 73,214,201,215, 41, 0, 10,231, 51, 39,128, 50, - 46,254, 67,164, 6, 82,114,122,185,104,123,240, 80,158,131,255,158, 46,132, 10,180, 76,112, 89,241, 82, 41, 66,247, 30,189,232, - 15,123, 82, 35, 94,163,141,163, 95, 66, 22,182,209,106,101, 77, 8,163, 51,120,167, 58,155,178,241,157,100,144, 76, 82, 63, 50, - 83,118,152,114,184,244, 65,221, 81,207,143,230,135,253,195,207, 90,183,157, 73, 63,136,227,225,229,168,140, 36,105, 59, 99,135, -162,202,204, 91,182,105, 95, 64, 30, 54,173,149, 27, 82, 39, 50,157,199, 94, 42,141,153, 27,203, 77, 47,116,125, 60,109, 70, 4, - 75,193,141,137,161, 95,234,207, 93, 2,238,150,185,156, 7, 23,219,167,203,121,181,210, 32, 48,226,140,250,180,198, 39,119,159, -254,248,235, 79,101,179,188, 89,223,164,163, 74,169,156,130,169, 85,221, 64,235, 70, 58, 58,118, 6, 7, 94,224, 79,252, 17,221, - 91,180, 21, 86,209, 10,184,143,106, 73, 79, 5,199,194, 66,136,239,164, 65, 8,227, 61,170,115, 41,125, 11,193,235, 86,201, 48, -132,105, 24, 43,132,121, 10,186, 81,228,101,105,176, 89, 18, 26, 37,119, 56,254,240, 92, 65, 19, 24,200,167,178, 20, 45,130,178, - 47, 5, 32,161, 13,144, 74,253,133, 68, 21,151,148, 80, 68,136, 57,199,228,254,230, 87,157,179,163, 43,194,176, 96,162,108,174, - 40,255, 51,181,153, 20, 27,148, 47,138,130, 32, 54,204,234,100,160, 39,180,105,202,221, 91, 14,133,210, 37,151,240, 28,223,110, -222, 34,240, 78, 23, 60,102,143,153,248,171,251,150,227, 88, 42,138, 43,163,155, 12, 86, 1,152,216, 14,130,112,126,167,117,111, -226, 78, 84,123,148,190, 19, 21, 85, 84, 49,204, 35, 87,158,192, 56,207, 11, 48,100,136, 99,182,136, 9,180,254, 18, 53, 81,130, -117,192,145, 38, 13,219,171,237,238,240,196,245, 38, 99,255,162, 81, 89,205, 1, 43, 97,114,147, 86, 66, 53,184, 41, 76, 47,242, - 66,217,103,167,123,136, 22,127,103,125,135, 46, 6, 66,208,244, 5,250,227, 83,200, 52, 10,131,210, 14,129, 59, 23,163,140,113, -127,212, 3, 49, 6,207,104, 56, 26,176, 25, 73, 1,122,150,208,114,129,208, 24,135, 52,175,158,209,216, 50,154,165, 46,109,198, -192,175, 47,228,139,148,243, 77, 99, 41,123,136,214,168, 66,245,171, 86, 93, 85,177,178,233,148, 58,211, 83,233, 73, 34, 95,150, -160,212,203, 56,144, 59,122, 89, 43,102, 53,136, 61,206,153, 65, 71,210,176,227,200,255,250,243, 47, 71,189,215,109,109,250, 79, -196,143, 3, 86, 96,233,119,187,237,181,237, 22, 91, 50,217,253, 29, 36, 1, 2,239, 72,238,132,226, 47, 39,255, 30,186,238, 37, - 91, 88,233,128, 10,145, 42,189, 97,180,164, 69,201,206, 37, 73,145, 54,180,105, 27, 13,219, 26,248,191, 15,231,211,139,113,129, -177,195,203,228,239, 89,180,127, 70,120,213,252,246,251, 31,204,189, 39,178,151,205,255,103, 30, 30, 63,105,248,199,155,238, 47, - 63,223,184,247, 9,219,172, 49,211,192,169,143, 0,144,206,127, 59,222, 31,204,116,164,119,233, 51,151, 42, 63,151,204,123,143, -182,122,253,218,198, 12,103, 54,197, 28, 89,154,205,183, 43,107,103,193,243, 91,205,173,222,249, 41,237,205,238, 23,143,115,113, -252,246,228,207,170, 93,207,201, 33,166, 11,119, 68, 71,169,115,118, 76,127,126, 58,118, 14,186, 7,181,149,250,241,160, 67,177, -170,195, 65,220,104,220, 88, 7,133, 78,218, 41, 18,126, 87,194, 71, 20,240,207, 31, 60,235, 56, 71,106,210,136, 62,119,187,121, -115,226, 77,135,179,129,132,204,241,205,181,219,131,177,147, 74,130,188, 2,206, 32,196,203,198,134,212,203,131,159, 29, 40, 6, - 80,174,193, 3, 97,178,104,202,168,215,151, 80,186, 75,106, 82, 68, 40,107, 88,178,133,175,160,162,112,253,103,176, 11, 62, 17, - 38,212, 63,208, 31, 94, 56, 4,227,181,201, 50, 45,152, 6, 94,209, 34,175,176,187, 34,101, 45, 6,169, 62,202,242,218,123, 1, -248,186,182,157, 52,162, 40, 58, 55, 25, 97,160, 92, 21, 5, 21,176, 49,154,214, 86, 77,211,167, 38,125,105,210,164,111,125,244, - 11,250, 19,253,137,190,246, 11,218,175,232, 47, 52,209,216, 23,175,164,222, 96, 64,100, 96,152,129,185,156,238,181, 15,208,151, -166,111, 70,130,227,204,156,179,247,218,251,236,181,214,140,191,138,161,130, 49, 1, 53, 90,220, 80,178, 13,231,226, 33,177,244, - 62,182, 22,210,180,232, 60,223,165,229, 74, 15, 20, 34,250,132, 32, 41,180,137, 16,225, 32,242,153, 66,206,121,153, 29,118,104, -115,158, 52,143,233, 7,158,196, 82,236,254, 29, 6,231,119,222,118, 6,173, 88,178,253,217,215,137, 69, 24, 38, 60,232, 6,114, -129,105, 96, 48,145,207, 69,213,189,250, 65,215,237, 42, 98,110,124,131,114,155, 18,195,114,174,250,171,121, 52, 28, 13, 13,157, - 21, 48,248,194,107,133,218, 8, 29,246,248,213,211,215, 41, 35,217, 3,189,141, 82,140,193,252, 99, 33,101,221,148,153, 32,105, - 44,152,106,203,246,123, 33,207,104,209, 75,245,131,201, 74,174,210, 29,118,112,114, 26,141, 29,207,161,191, 64, 1,221,238,183, -165,138, 25,130,151,164, 57, 48, 61, 55,159, 46,218,131, 54,189,197,103, 27,187,251,245,253,211,251,211,247, 7, 31,206,111,207, - 8,177,114, 33, 34,214,139, 85,172, 60,183, 71,111,133,106, 67,103, 52,216,170,224, 60,249,164,121,228,120,125,182,177, 53,186, - 78,155, 50, 77, 33, 93, 44,231,203,116, 47,246,192, 94,202, 86, 48,126, 67,216, 65,139, 41, 95,250, 17,197, 32, 87, 24, 34,192, -233,166, 26,178,242, 61, 67,103,133, 66, 60, 40,158, 24,169,231, 39,169, 24, 24, 45, 17,122,146, 0, 77,202,208, 76, 61, 1,138, -182, 48,120,136,154, 64,242,130, 38,204,200,242, 5,186, 70, 65, 20,121,190,199, 60,118,192,199,188, 85,165, 26, 11,117, 41,218, - 82, 97,202,128,167, 48,125,246,187,115, 21,197,211, 97, 40, 90, 70,104,177, 71,236,175,194,220,139,244,226, 19,143,141,114,164, - 64, 27,194,125, 34,149,179,114, 67,175, 15,215, 74, 52,184,165,250, 4,104,201,116,167, 73,211, 66,115, 70,213, 41,123, 17, 4, - 70,123,103,198, 32,210,103,134,116,172,219, 21, 60,184, 29, 47,112,179, 86, 65,142, 66,210, 22,226,189,129, 79,243,169, 28,165, -100,250, 61, 65, 15,186, 74, 53,183, 70,245, 1,136,218,233, 18, 1, 40, 29,222,123, 84,107, 6,160,242, 68,176,223, 76,176, 70, - 60,237,243, 84, 34,133, 2, 95,195, 1,128, 11, 99, 22,208, 47,232, 95, 90,128, 36, 58,228,169, 9,227,219,206, 61,143,226,161, -207, 77,183, 9,221, 5, 76, 34, 3, 0,213,203,155,245,229,134,237,216,172,142, 32,168,132,197,244, 20,183, 17,168,140,123, 28, -118,117, 28,242, 91,148,245, 89,248,126, 10, 77,132, 58,183,199, 86,229,216, 49,206,114, 99,168, 99, 98,226, 45, 10, 9, 73,244, -134,221,132, 46, 5, 68,165,114,134, 54, 29,136,134, 46,182, 38, 59, 70, 9,221,244, 38,131, 66,102, 73, 4, 1, 60, 38,181, 80, - 21,147,189,250,206,218,114,121,124,249,243, 77, 73, 43, 26,218, 11, 45,254,116,248, 78, 73,166,149,218,138,178,181,141,182,204, - 40,224,195,213,137,232,245,250,183,151,120, 34,220,120,103,240, 46, 52, 73,216,199,155, 12, 22,173,140,145, 72, 38,226,216, 48, -116,101,189, 84, 90,205,231,156,224,184, 31, 53,219,143, 45, 47, 58,115,194, 70,227,229,231, 47, 95,179,135, 31, 57,115,235,255, -115, 13,186,190, 57,253,246,189,210,200,153,251, 13,140,229,152,186, 84,215, 84,252,241,245,143,230,185,235,105,108,230,203,242, - 31,216,147, 40, 46,205, 84, 72,224,151,141, 62, 34,182,205,150,241, 1,205, 17,230,249, 55,202,141,155,135,187,205,114,237,178, -213,164, 47,157, 92, 28,223,116,110,159,215,118,233, 91,244,136,168,238,217, 88,170,245,221,135, 1,206,216,243, 16, 35, 18, 49, -193,112, 74,165,208,200,130, 14,179, 90,162, 42,217, 29, 93,180,206,101,247,117,107,117,155,210,118, 54,153,189,104, 93,129,128, -202,151, 49, 12,147, 34,187,203,100, 52,138, 41, 84,222, 81, 1, 49, 14, 70,144,223,159,185, 48,177,102, 42, 48,163,116,158,147, - 89, 89,150, 67, 82,183,101,222, 24, 23,115,221, 83,161, 9,101,238,163,141,197,158, 49, 51, 4,207,164,245, 20, 45, 3, 54,212, - 53,211,139,105, 47,240,255,237,208, 17, 43, 99, 22,104,209,254, 66,251,185, 2,136,152, 69,121,117,166,226, 58,237,242, 72,230, -197, 31, 1,232,186,150,214,168,161, 48,154,247, 36,211,100,146,113,236, 60,250,152,150, 74, 21,139, 21, 44,184, 16, 10,130, 22, -116, 87, 23,138,110, 92,186,113,225,194, 95,228,194,181,127, 64,112,231, 31, 16, 41,130, 90, 41,214,193,169,125, 76, 38,105, 38, -201,228,225,119,190,155,218,110,132,217, 14,121,221,251,221,243, 61,206, 57, 85,124, 39, 88,192,173, 72,165,172, 56,178,216, 78, -160,195, 40,186, 80,237,160, 69, 21, 38, 1,243,116, 75,110, 24, 82,112,153,206, 88, 14, 59,216,150, 4, 84,133, 8,156,170, 26, -109,194,185, 44, 46, 88,135, 34,118, 65, 97,171, 6,159,110, 48, 46,131,104, 20,196,190, 38, 99,184, 85,135, 0,157,129, 65, 55, - 74,165,185,195, 96,214,234,244,199, 60,175,180, 94,134,254, 80, 8,111,158,155, 74, 73,165,169,211, 50, 52,113,132, 24, 53, 10, -179, 6,164,150, 11,214,191,212, 8,142,197, 73,124,232, 15, 9,149,255, 51, 53, 81,225,188,149,155,102, 61, 73, 18, 49,149,195, -248,189,208,117,115,235,230, 22,133, 81,202,209,232,121, 41, 84, 69, 20, 80, 44,155, 14,100, 66,127,174,221, 60,137, 40,190,235, -151,189,238,198,202,237, 76,202,224, 34,196,239,144, 82,141,126,123,153,114,151, 81, 68,107, 17,194,226,148,244,208,162,249, 61, - 26,238, 14,191,229,152, 53,207, 84,122,105,114, 70,171,205,115, 90,132, 67,157,154,157,150,211,185,230,252,224,100, 95,136, 93, -176,204, 3,136,178,204,126, 2, 23,118, 56, 30,202,138,118, 58,193, 20, 38,133, 33,219,114,172,154,117, 28, 29,112,179, 58, 39, -192,202,230,219, 28,135, 10,161,106, 36,140, 41,133,156,180,209,114, 48,217, 6, 29,121, 86,107, 72,115,101,148,148,211, 68, 78, -232,194, 16,205, 18,226,198,201, 37,137,110,219,215, 36,104,218, 85, 30, 63,204,105,100,124, 42, 77,133,191, 55, 84,182, 49,117, - 46, 87,154, 88,176,192, 5, 94,206, 50, 21, 3,246,185, 44, 87, 45, 35, 67, 53, 32, 21,169,192,144, 76,104,231, 21, 60, 85, 66, -233, 26,161,132, 89,183, 11, 55, 6,137,171,223,178, 58,235,182,199, 19, 2, 89, 10, 4, 58,208, 71, 41,206,156,216, 49,130, 85, - 84, 77,197,146, 5, 35,209,246,164,149,128, 34,140, 80, 25,174, 6,215,240,241,216, 40, 0, 93,113,212,122,139, 60,206, 34,186, -141,140,149,123,152, 81, 85,210,117, 87,186,171, 66,106,170,227,245, 8,249,198, 44,251,124,173,191,254,235,112,175,215, 92,160, -255,207,183, 22,252,112,100,193,124,135,112, 74,206, 27, 85,165, 71, 35,148,180,212, 94, 62, 14,142, 85, 12,128, 25,130,162, 65, -251,203,169, 55, 2,192,186, 35,225, 80,136, 19, 22,242, 41, 89, 33, 23, 13,203,243,195,163,132, 91,202, 24,180,128,154,133, 73, -159, 15,202, 39, 10, 29,120, 51, 93,151,146,188,176,215,156,199, 18, 98, 10,171,202,149,217,211, 36,154, 49,235,155,107,155, 95, - 7,223,133,184, 1, 69, 94,182,137,199,225,212,110,116, 34,118,254, 84,121,152,210,174,217,154,170,196,105,168,136,180, 31,110, - 31,170,167,217, 79, 31, 63,127,255,225, 93, 95,139,111,121,250,156,161, 92,221,126,136, 81,150,235, 87,164, 86,135, 78, 69, 41, - 73,241,139,226,116,127, 55, 28,253, 65,109, 38,203,133,182,171, 90,178,193, 25, 42, 69,104, 95,193, 92,208,113,233, 90, 38, 19, -246,164,197,102,167,227,117, 51,109,144, 74,186,221,126,241,228,213,246,203,215,250,218,170,148, 77, 36,208, 75,107,255, 13,238, -187,123, 95,222,188,109, 57,121,243,238,186,180,228, 73,182,193, 30,190,153, 68,208,115,120, 48,248, 24,237, 37, 1, 1, 93,230, - 42,194,188,133,144,117,156,167,162, 31, 32, 99,186,169,199,225, 24, 59,151, 98,250, 73,232,163,229,160,213,252,211,241,131,141, -123,148,124, 65, 40,144,201,134,139,173, 5,183,223, 83, 11,136,216,108,222,184,243,233,199,103, 16,155,243,242,209,253,103,139, - 94,103,231,231, 78, 16,141, 71, 19,159,222, 91,152,134,180,100, 66,216,236,168, 20, 64, 81,127, 15,142,208, 6, 47, 83,130, 92, -112,182, 16,148,123,228, 24,153, 80, 33,108,212,189, 9,179,216,166,220, 33,175,244, 6, 42, 55,155,210,177,154, 19, 8,108, 72, -244, 33, 40, 37,157, 78, 51,112,151, 48, 13, 41, 95,176, 43, 61,183, 33, 22, 43,151, 98, 41, 70,248, 8,213,129, 42,143,126,150, -107,186, 14, 42,141,113,138,202,100, 38, 42,213, 92,153, 43, 46, 26,174, 10, 83,224,139,142,198,242,185,199,163,124, 38,101, 84, -121,250,210,214,171,224,124, 89,153,197,254, 21,128,170,235,251, 77, 26,140,162, 45,180,208, 66,233, 20, 24, 48, 39,137, 89, 71, - 88,102,162,211,196, 25, 31,244,209,196, 71,125, 48,153,255,158,137,255,128, 47, 38,190,249,104,212, 57,163, 47, 46,219, 18,167, - 83,167,163,165, 80, 90,218,175,212,123,238, 87,112,219,115, 23, 10,237,119,239,185, 63,206, 57,121,124,103,195,201,197, 54,103, -110,149, 74, 15, 32, 65,229,206, 12, 46, 46,167,170,165, 74,185, 84,229, 58, 26,248,157, 50, 36, 29, 87, 64, 33,176,243, 53,140, -200, 52, 35,148, 30, 23,204, 56,173,153, 86, 56,141, 40, 84,209,245, 82,182, 73, 69,117,105, 16,242,162,159,126, 24, 0,101,163, -193,146, 82, 57, 6, 25, 16, 33,196,181,142,227,243, 62,153,142,250, 84,109,218, 29,172,198,195,170, 13,119, 64, 7,140,158, 28, -226, 8, 23, 16,140,221,209, 59,131,166, 15,186, 74,148,134, 74,172,126,157,156,215, 5,163, 36,217,164,248, 50,241,230, 50,251, - 72, 81,251, 63,247,233,208, 74,159, 24,216, 12,177,193,215, 56,158, 80,124,255, 61, 60,181,208, 14, 75, 79,189, 95,135,167, 7, - 99,202,249, 50, 57,176, 30,197,253,235, 15,222,237,191,213, 53,222, 53,226, 86, 34,248, 89,105,218, 90,106,215,237,166, 23,120, -244, 69, 8,146, 16,102, 36,208, 29,199,185, 64, 60,189,191,172, 44,168,110,118,111,184,193,217,118,111,219, 27, 15,119,238,239, -124, 31,156, 64,171,139,181,179,232,182,111,247,238,140, 2, 63,136, 71, 27,221,205, 31,238,241,109,231,238,247,240,107, 25,203, -166, 2,114,172,186, 36,237,114,167, 80, 22,181,148,213,139, 89,179,102,214,107,229, 75,181,146,161, 83, 44, 40, 10,181, 24,205, - 50,185,144, 72,151,104, 8,203, 84,108, 37, 79, 31, 63, 59, 60, 60, 74, 98,120, 78, 34,175, 8,104, 44,171,172,218,215,176, 90, -116, 66, 46, 87,154,144, 85,194,114, 67, 42, 53, 43,218, 75, 87, 70,145,223,168, 52,130, 36,212,208, 21,201,103, 33, 18,159, 22, - 56, 44,102,202, 98,148, 74, 17,205,146, 63,114, 8, 18, 63, 1,100, 83,226, 52,130, 69, 56, 54, 81, 68,168,124, 58,157,208, 75, -104, 27,182, 20,104,173,163, 71, 17,242, 98, 66,238,100, 7,131, 27, 94, 52,160,255,180,202, 53,201, 73,158,147,131,102,185,231, - 17, 56, 69, 82,112, 49,147,202, 83, 26, 68, 30, 16,182, 70,147, 81, 12, 99, 68,236, 1, 6,161, 95,132, 91,111,252,237,207,145, -164,247,155,134,233,142, 6,107,109,199, 40,153, 84,143,138, 52,215, 8,147,100,194, 68, 76,177, 23,196,179, 95, 41, 25,152,242, -231,193, 9, 58, 21,151,160, 8, 93,167, 48, 96, 87, 80,187,176,142, 13,213, 65, 81, 65,153,187, 37,241, 54,209,140,183, 67, 52, -185, 12,134, 94,111,194, 66, 99,153, 14,175,202, 82, 20, 83,222, 74, 87, 27,171,178,184,244,199, 67,203,168, 50,107, 70, 93,109, -116, 7, 62, 22,132,150,237,118,195, 94, 38,112,192, 51,109, 33, 13, 82,192,243,162,207,130, 62, 23, 26,160,103,238,201,189,173, -187,206,205,237,151,175, 95,121,147,180, 97,215,215,159, 60,196, 79,212,239, 43, 21, 11,107, 51, 0,239, 66, 25,252,153, 28, 31, -208, 13, 84,154,171, 25,101,214,100,202,174,160,153,198,153,183,168,177,212,199, 44, 5,179,217,178,117, 58,245,116, 32, 44,147, - 66,124,163,219,234,107,166, 31, 69,199,103,127,245,233,236,114, 92, 40, 76,233,164, 41,160,170,234,218,130, 54,147,255,133, 99, -255,245,155,189, 23,207, 91, 45,189,253,232,150,178,209, 86, 74,198,220,140, 57, 37,200,160,124, 58,248,240,126, 52,152,133, 88, - 69, 72, 83,167,183,213, 89,238, 66, 13, 21,172,110,174, 0, 21,122, 88,129,224, 67, 77, 15,206, 99,238, 58, 43,160,163,147,178, -123,184,231,172,172,253,112,127,129, 24,136,201,138,177,189,126,235,227,215, 93,207,119,233,213,242, 39,227,141,110,159,234,108, - 42,160, 63, 31,125,137, 83,225,180,215,184, 1, 88,164, 90,217, 54,109,167,227,184,129, 59, 12, 71, 75, 70,141,192,160, 27,120, - 86, 25,154, 25,155, 87,175,115,201, 40,224,237,165, 42,206, 74,143,106,104,166,103, 22,208, 87, 80,211, 82, 65, 35,156,138,249, - 74,222, 37, 70, 20, 16,179,152,103,175, 60,228, 87, 51,211,168,208,155, 39,242, 80,249,191,193,178,232,156,168, 76,111, 12, 65, - 22,225, 97, 57, 15, 41,232, 5,139,193, 7, 79,228,122,164,148,164, 7, 83, 50, 19,231, 88,169, 11,120, 59,183,173,189,160, 82, -118, 65,249, 93,205, 85,154, 50,121, 69,181,108, 19,238,249, 39, 0, 85,215,182,212, 52, 20, 69, 79, 46, 77,210, 36, 45, 13, 80, - 90, 10,189,113, 31, 6, 69, 29,103,228,209, 71, 95,253, 31,253, 28, 31,252, 8, 95,157, 65, 7,152, 1,124, 16,185,136, 12, 84, -208,210, 52, 77,211, 52,151,198,189,247, 73, 6,228,177,208,153,180,156,179, 47,107,175,189, 86, 58, 95, 85, 85,131,100,155, 18, - 98,106,203, 92, 68, 7,170,242, 9,122,207,203,252,148,151,116, 11, 26, 91,186,183,108,166, 56,187, 81,219,234, 14,254,244,144, -210, 32, 38,153, 85, 27, 52,221,132,120,164,156, 58, 63, 12, 32,154, 67,136, 39, 86, 4, 57,230,208, 90,236,132, 54,221, 23,102, -235, 61,247, 30,190, 83,136, 50, 40,186, 29,249,144,127,224, 14,120, 35,151,106, 52,129,108,148, 99, 2, 31, 32,112,203, 52,208, -192,233,150,130, 98,244, 17,110,174,179,152,198,217,227,148,170, 70,171, 76,166, 86, 88,175,109, 66,127, 0,113, 89, 32,233,210, -129,111, 67,240,138, 57, 49,131,206, 11, 60,109, 81,159,226,123, 85, 50,145, 59,208, 38,104, 2,129,178,188,179,249, 10, 73, 29, - 81, 64,142,149,185, 8,213, 78, 68,110,199, 69,112,200,196,204, 23,113,104, 6,241, 26,121,126,184,122, 2,249, 28,234,240,105, -115,230,178,251,179, 49,179,108,123, 93, 56,176, 57,154,174, 80,152, 16,120,189,169,169,184,189, 9, 77,165,227, 15,110,238, 59, -163,200,151, 36, 9, 82, 72,125,174,233,122, 78,197,170, 85,173, 5, 8, 46,208, 25,132, 66,180, 56,179,208,152, 93, 26,134,131, - 65,120, 45,138,138,227, 6, 99, 82,230, 13,240,122,164,211,107, 10,104,168, 48,105,153,186, 70,218,100,154, 38, 26, 72, 86, 19, - 5, 69, 40, 26,146,174,192, 45, 70,164, 53,192, 94, 35, 62,220,219, 35,134,120, 14,137, 82, 88,204, 33,194, 8, 65, 4,206, 25, - 92, 27, 20,141, 71,135, 63, 65,201,233,136,155, 19, 99, 21,125,141,147, 4, 23, 52,232, 68, 22,140, 41, 98,139, 11,154,172,169, - 74, 94, 72, 73, 2,184, 97, 78,164, 15,145,172,216, 57,158,195,202, 83,243,152, 51, 76, 11,217, 50,147,164, 82,170,232,170,238, - 64,254,155,132, 92,172, 38,198,213,102,193, 27, 57,240,122,192,149,129, 19,206,163,148,196,204,181,146, 74,230,132,187,225,144, -179, 54, 30,179,146,105, 65, 63, 75, 83, 44, 2,169, 69,217,200, 27, 40, 86,165, 66, 35,163,143,130,225,211,230,115, 67,213, 41, -233, 86,201,201, 29, 79, 38, 4, 51, 11,165,166,194, 74,105,238,242,238,156,192, 31, 97,218,156,230,203,168, 28,188, 15,113, 64, -241,240,147,144,154, 81,171,188, 2,143, 13,129, 85,150,209,163, 25,202, 23,218, 98, 21,121,190,207, 58,229, 20,115, 71, 76, 50, -142,176,105,145, 17,103,200,161,153,114,156, 58, 24, 96,199, 20,109, 53,158,108,183,159,185,158,235,140,108,184, 11, 88, 4, 32, -220,132, 31,215,118,123,124, 45,204,243, 29,100, 25,197, 99, 45,167, 66, 37,205,245,113,199,161,151,144, 99,112,201, 40, 35,138, -157, 76,250,157,155, 55,239,222,183,203, 43, 7,199,103,155,171,245,218,235,109,166,201,172,213, 98,178,130,200,251, 40,102,131, - 33,187,248,238,219,221, 68,202,233,229,197,241,176, 31,193,253, 37,225, 64,137,251, 31,226,182, 21,212,252, 49,162, 52, 42,244, - 27, 5, 46, 36,139,244, 24,168, 26, 90,229,205,234,156, 18,248,223, 78,142,190,236,127,253,253,227, 76,177,135,122, 63,144, 28, -159,221, 13, 88,183,207,236,126,116,117,101,127,254,114,252,225, 99,231,104,119,227,197, 82,249,237, 75,214,174,193, 1,201,156, -224,136,140,233, 58,236,211,233,238,165, 23, 98, 89,193,234,165,122,239,111,231,252,234,196, 30,246,140,188, 9,217, 11, 42, 24, - 8, 41, 80,101,115,104,153, 75, 3, 22,117,107, 20, 14,177, 34, 84,141,245,133, 53, 72,176,191,238, 46,151,107,107,112,198, 32, -101, 94, 67,163,238,246,154,213,230,121,231,162,221, 88,157,175, 52, 10,106,254,240,226,208, 42, 78,195,111, 33, 92,244,220,238, -173,125, 11,255, 14,248,179,157,141,157,253,211, 3, 56,240,208,191,170,138, 6, 69, 12, 14,198, 24,131, 74, 14, 10, 43, 3,163, - 10, 46,109,195, 91, 36, 38,229, 20,117, 28,224, 26,191,174,154,158,239, 97,147,154,129, 46, 49, 21,254,180,138,195, 85,128, 80, -100,118, 28,134,240,252, 20,133,146, 12, 36,121,180, 92, 74,159, 7,122,250, 84, 49, 55,243, 83, 37,146, 72,156,100,154,192,148, -113, 37,146, 41, 14,254,119,196,123,224,200, 36, 15,130, 4,169,194,113, 38,181,197,151,167,216, 35, 33,110,198,135,213,255, 4, - 96,234,202,122,154, 8,163,232,108,157, 78, 59, 12,157,206, 84,169, 88,132,186, 32,242,224, 22, 36,196, 55, 95,124, 52, 38, 38, -250, 96,252,161, 62,187, 6, 37,241, 69, 19,162, 86, 92, 0, 11, 66,153,133,206, 62,245,158,251, 13,226, 43, 36, 76,152,249,190, -115,183,115,207,169,244,223, 75,230, 87, 78,184, 61, 87,148, 85,139, 62, 23,234,216,172,122, 74,199,148,222, 8, 65,152, 99,117, -232,125, 69, 20, 51,163, 17, 93,248,164, 72,207, 88, 51,132,251,117,214,124,231,249, 42,158,188, 60,119,179,231,246, 41, 66, 98, - 71, 30,241,224,236,133,153,133,131,209, 62,251,169, 40,173, 41, 39,140,143,130, 56,160,219,107,232, 6, 20,208, 21,117,156, 98, -243,219, 31,123,236,205, 35, 34, 17, 26,238,208,170,204, 35,222, 54,194,236,139, 85,129, 51,102,193,155,116, 50, 8, 70, 41,186, - 10,130,161,200, 57,163, 36, 26,250, 67, 31, 84, 75, 44,254,193,230, 9, 61, 53,165,218,153, 23,110,152,152,198,169, 76, 39,200, -232,123, 98, 99, 88, 86, 10,124,170,120,243,215,230,158, 55,164,175, 69, 21,147, 96, 56, 9, 31,230,110,187,119,235,210,234,208, -219,249, 19, 28,186,166, 91, 8,149,100, 9,134, 77, 66,101,148,128, 18,107,107,114,169,105,104, 80, 80,252, 32, 20,104,153,246, -131,181,135,131,223,131, 48,241,128,125,138, 74,207,162, 44,156, 14, 25, 85, 63, 40,249,203,188, 89, 55,235,245, 6,132, 50, 50, -240,127, 33,156,162, 96, 0, 69,175,226,211,240,189, 36,107,182,101,200, 74, 6,254, 39, 16,167,160,228, 9, 92, 73,153,189,223, - 16, 55,203, 89,219,146, 48,175,147,161,137, 93, 42,113, 33, 97, 2, 80, 42, 89, 50, 9,198, 89,206,224, 78,192,216,144,116, 85, -171,225,138,161, 3,138, 84,211,181,206,252,241,246,207, 59,115,116,145,178, 52,189,125,105,109,103,180, 77,153, 11,247,181,170, -113,145, 80,180, 83, 57, 55,160,247, 76, 71,188, 69,169,119,145, 68,217, 24,242, 97, 69,214,239, 46,218,102, 59,142, 99, 22,104, -149,153, 58,166, 11,234,183,194, 28,202,165,222,114, 24,121, 20,203,225,132,197, 29,109, 97,181,204,194, 45, 19, 42,230, 28,211, - 13, 40,187, 33, 4,175, 65, 33,177, 96,145, 78,136,138, 86,193,177, 58,231,104, 19,113,115, 70,176,161,166, 27, 45,186, 12, 84, - 85, 76, 53,108, 72,210,235, 84, 38,198, 96,206, 40,186,174,105,132,224,116,108,160, 54,197, 77, 21, 8,225,129,126, 35,159,179, -187,219, 7,191,184,153,138, 63, 30,177, 4,149, 60, 57,213, 21, 59, 81,132,231,234, 72, 42,141, 90,131, 78,102, 58, 73,233,229, - 19, 22, 55,245,102,175,115,193,139, 14,101,161, 43,200,231, 67, 72,141,243,220, 85, 18,246,158,220,151, 82,217,201,186,134,196, - 66,193,238,150,202,215,123,223, 31,130,203, 33,149, 20,159,226, 52, 22,166,107,106,229, 51, 87,233, 35,131, 73,153, 99,233,145, -126,235,163,133, 8,250, 17, 33,160,129,208,155,150,101,164, 41,114, 93,215,253, 96,116,219,234,246,158, 61,190,187,184, 54,123, -189, 35, 53, 50,105,202,128,160, 88,205,160, 82, 20,235,163,223,191, 78,118,191, 19, 0,209, 73, 78,188,195, 60, 14,197,170,141, -160,100, 66,119, 26,232, 14, 3, 98,138, 23,114,145, 80, 6,165, 55,166, 36, 97,129,109,168,208, 45,152,117, 58, 87,231,150,175, - 44,244, 59, 86,153,132, 59,219, 95, 62,127,220, 24,108,188,219,124,243,234,231,198,250,143,215, 47,182,222,190, 60,222,251,214, -191, 54,179,244,104,173,113,255,166,100, 57, 18,182, 92,149,147, 78, 64, 46, 81,189,184,181, 57,122,238,175, 31,133, 58,151,159, - 94, 28, 68,232, 95, 81, 70, 98, 80,112, 61, 12,142, 8,106,194,120,124, 66,132,174, 86,251, 85, 77,139,217,236,144, 42, 30,119, -218, 29,122,191,143,211,168,174,234, 65, 20, 82,254,228, 88,118,219,116,232,255,242,142,253,189,163,253, 56, 26, 63,189,247,164, -215,233,237, 30, 64,103,208,177,220, 59,151, 87,230,187, 11,142,233, 12,134,131,213,197,149,141,175, 31,110, 92,188,190, 59,218, -165, 0,223,182,218, 84,160, 99,122, 36, 35,129,192,164,174, 86,111,214,154, 65, 28, 78, 88,141,142,161,183, 96,171,171,242, 84, - 91,139,135, 76, 12,156,226, 39,101,149,207, 51, 7, 26, 86, 37,128, 24,204, 39, 42,136,175,180,140, 36,170,198,108,147,208,192, -255,103,198, 37,253,163,185, 87, 58, 3, 92,153,226,161,185, 60, 81, 78,204, 17,254,207,226,229, 83,102, 76,165, 20,172, 82, 78, -147,151,201,124,167, 79, 80, 60,109,180, 82,118,171, 23,205, 26, 66, 69,219,114,163,100,252, 87, 0,174,174,166,183,109, 43, 8, - 62,241, 75, 20, 41,209,180,100, 57,138,100,199,137, 45,171, 53,144, 4, 65,156, 54,237,169,232, 57, 40,208, 83,255, 98,129,254, -130,166,199, 94, 90, 4,200,161,183,198, 70, 80,212,138,157, 24,242, 55, 77,137, 95, 34, 59,179, 79, 50,130, 2,190,201,160, 68, - 62,190,221,217,125, 59, 51,139,248, 78, 70,121,149, 9,215, 70,119,105, 84,221,116, 5,225,149,190,231, 75, 83,140, 81, 31,247, -223,114, 3,106,153,170, 50, 69,100,172, 89,121,153,109,247,118, 1, 66, 73,154, 97,110, 88, 72,103, 78,174, 79,175,227, 75, 96, - 94, 18, 79,170, 28,128,235,120, 50,150,187,225,150, 32, 71, 75,218,217, 14, 49,178,155,229, 25,101,167,200,101,175,180, 98, 88, - 37, 60, 93,175,225,227, 43,144, 75,171,229, 17,220,242,169, 97,171,216,174, 37,243,115, 37, 54,158, 1,204, 14, 28,130,197,222, -234, 62, 64, 0,173,136,106, 77, 25,214, 68,200, 78, 45,211,209,134, 63,115, 49,153, 52, 69,126,186,100,207, 75, 42,107,147,189, - 84, 61,221,134,120,121,175,221, 39,202,230,232, 55,215, 89, 45, 92,110,213, 85,124, 49, 62, 59,202,196,134, 77,134,118,146,102, -131, 44,106,172, 10, 54,239,106,179, 13,172,205,225,153, 98, 86,167, 92, 79,194,235,154, 38, 94,145,119,227,191,251,237,193,110, -255,203,143,151, 39, 43, 94, 64,169,210,122, 64, 89,124, 27,175,239, 12, 17,243, 54,139,194,102, 27,161,109, 18,157,191, 28,125, - 19,180,130,139, 41,194, 71,181,177,190, 49,171,125,112, 29,171, 19,214, 75, 51,163,126,185,136,243,136, 8,166, 42,171,133,178, -249, 44, 41,239, 5,158,229, 88, 13, 26,186, 18,187,231, 72, 18,101, 37,116,254, 26,131,187, 24,254, 58,150,106, 84,158, 85,115, - 82,250,157,202, 56,154, 97, 77,147, 56,206,162,104, 22,145, 28, 84,113,242, 39, 78,167,184,200, 74, 99, 53, 41, 82, 93,184,220, - 95, 29, 76,133,126,130,149,106,183,186,120,110,211, 44, 6,120,111,185,161, 72,226,169,171,232,226, 50, 62,111,122, 33,195,171, -237,122,245, 86,150,207, 80,252,161, 46,254, 98,176,119,124,246,239,197,205, 36,244,215,240, 51,180,152,189, 62, 36, 48, 77, 27, -249,201,119, 26, 88, 17,230, 81, 90, 36, 35, 33,219, 28,118, 42, 88, 64, 14, 58,155,226,207,199,190,148, 37,222,207,105, 14, 68, - 90, 54,235, 1, 27, 98, 36, 85,165, 52,173, 19, 45,112,236,201,192, 95, 65,196,223,185, 63,250,231,244, 96, 45, 88, 71,238,176, - 57,149,235,227,154, 60,185, 80,213, 90,179, 59,218,220,179, 12,231, 54,142,196,255,130,130, 69, 88,190,126,123, 99, 74,114,202, -116,179,179,133,114,158,167,253,186,144,101, 29,193,159,172,169,185,182, 97,114,106,211,182,207,111,206,230, 34, 44,197, 46, 74, -179,115, 67,223, 2, 37,124,105,241,251, 52,172,166, 14,145,101,169, 27, 63, 38, 69,163,156, 82,198, 55,121, 28,101, 81,180, 54, - 74,112,107,198,102,119,235,197,206,254,209,228,200,208,116, 42, 85, 67,154, 7,160,183, 73, 41, 13,176, 1,125,199,195,213, 16, -200, 80, 55,164,244, 54, 74, 69, 85, 20,239, 22,229, 0, 16,199, 79, 14, 15,247,195,117,107,173,163,154, 99,101, 20, 40,109,148, -143, 60,238,177, 63, 51, 30,171,163, 67,149,204,120, 44,207,103,154, 7,189,135,108, 21,228,169,116,222,149, 30,214,100,124,231, - 24, 60, 67,188, 1,188,229,121, 53, 95, 68,225, 41,203,103, 41,207, 82, 97, 67, 61, 8,221, 81,191,247,124,231,209,243,225,238, -147,135,195,167,131,237,199,131,173,103, 27,143,190, 29,110,191,218, 31,252,248,210,251,234,169,234,246, 20, 32, 4,123, 15,213, -178,255, 76, 59, 47,117, 60, 86,191, 31,252,241,151,186, 82,169,111,121, 52,151, 18, 42, 41,110,141, 74, 62, 13,191,164,241, 97, -170, 22, 35, 45,165,102, 24, 22,181, 50,203,243, 74,200,100,243, 26,149,160,178, 98,193, 72,111,121, 1,254,128, 11, 91, 65,248, -254,244,253, 78,111,136,119, 28, 96,232,215,183,175,143,207, 62,238,239,125,125,240,225, 0, 72,255, 58,137,223,188,251, 51,154, -222,254,240,234,167, 95,126,251,121, 52, 24,158,156,127, 18,219,219, 57,234,197, 40,157,166,244, 95,164,247,186, 30,131,249,238, -241,247,167, 87,248,135, 12, 41,124,206, 3, 66, 7,143,165,144, 90, 83,203,227,152, 84, 7, 42,254, 63,163,190,212,233,197,154, -174, 7,189, 75,145, 51, 50, 62,179, 41,195,199,168, 98, 35,145,255,188,115,239,170, 72, 6, 10,117,216,185,211,160,251,204,200, -116,225,221,164,238, 66,250, 82,159,215, 92, 76,224, 18,105,185,134,155, 20, 72,149, 55,250,163,138,254,122,154,189, 74, 60, 81, -183,108, 68,167,255, 4,224,234, 74,118,155, 8,162, 96,143,123,246,241,146,216, 6,197,217, 8, 40, 82,144,128,136,237,192,145, - 11, 2,137,143,230, 4, 7,238, 28, 88,148, 64,130,137,156,197,142,226, 25,123,198,179, 81,245,218, 6,132,228,131, 15,118,156, -233,121,243, 94,189,126,213, 85,171,252,174, 26, 0,113, 91,221, 59, 9,107, 99, 46,170,123,158, 48,103, 42, 18,233,242,153, 72, - 6, 81,162, 75,246,172, 75,146, 31,170,202, 67, 35,147,167,104,106,128, 8, 77,147,101,154, 11, 99, 43, 86, 73, 41, 67,211, 1, -172, 23, 56, 17, 93,144,100,106, 94,175,156,217,132, 30,103,121, 54, 50,130, 55,205,110,254,168,241,137,254, 66, 33, 10,127, 45, - 20, 61,154,236, 24, 90,229,242,128,171,168,198, 86,148,140, 16,181, 22, 95, 54, 43, 74, 19, 23, 7,155,128,138,113, 42, 99, 19, -107,165,219, 71,115, 6,203,198,175,237,246,246, 38,179, 9, 73, 2,150, 18, 21,111, 10,193,151,194,180, 51, 36, 25, 60,132,200, -101,100,202,171,250,245,211,215,125, 17,115,111, 40,219,200,121, 1,237,106,170, 58, 2,214,244,103,121,130,101, 41,232,227,154, - 0,243, 36,185,176,107,164, 67, 67,102,108, 7,235,201, 34,246,133, 62, 36,206, 33,213,209,197, 17, 46, 24,104, 5,160,158,219, - 17, 20, 60, 33, 79,110,127,112,128,148, 52, 28,159, 34,203, 35,170, 80,231,206,174,135, 8,223, 82, 21,163, 25, 80, 94,142,132, - 18,184,206,132, 71,156,216, 38, 44, 42,210,222,211, 5,208,113,181, 0,170,164,237,110, 57, 64,102,243,156, 40,208,190,167,232, -218,193, 67, 33, 85, 51,208,157,168,129,167,213,119,172,208, 85,190,175, 26,153,155,228, 49,211, 78,101,101,101, 38,155,142,133, - 86,174,225,132, 32,130, 81, 8, 57, 45,104, 88,169, 48, 65, 57,117, 20,125, 37,172,167,208,166,185,221,212, 10,215, 80,158,155, -110,115,138, 84, 72,107, 36,242,179, 53,199, 42,129,232,210,120, 40,102,107,209, 26,110, 55, 34, 15,133,159, 41, 77, 59, 9, 5, -181,107,177,148,178,125,155, 46,122, 30, 73, 86,115,177,250,203,205,220,114,201, 19,227,240,185,142,194,118, 23,201, 87,213, 25, - 69,102,132,196,217, 80, 47, 31,188,154,101,241,116,118, 29,250, 17,123, 39, 69, 31, 33, 6, 59, 87,185,236,132,221, 56,187,185, -156, 94,177, 38,245,182,145, 82,247, 6,251,103,227, 19,155,211, 17, 92,115,141,122,188, 30,173,127,252,252, 30,200, 23,101, 79, - 47,189, 83,107, 50, 88,108,123,115,176,253,230,225, 43,223,117, 79, 46, 79,159,222,125,158,100, 28, 11,137,156, 78,109,186, 25, -113,163,211,129, 23,197,243,169, 88,109,214, 59,253,221,171,248, 82,206,232, 81,127, 10, 31, 16, 45,107, 30,126,244, 40,108,137, - 84,110, 76, 62, 23,198, 74,194,120,190, 75, 71,159, 70, 60, 33,197,115, 15,199,231,199, 34,173, 99,109,116, 54, 42, 74, 33, 38, -162, 82,171, 36,160, 75,124, 23,171, 13,136, 67,245, 15, 22, 51, 99,101,192, 95,210,142,246, 93, 43,173,231,231, 71,223,238,183, - 59,206,129, 60,112,200,197,192, 48,243, 76,253, 60, 81, 39,199,106, 58, 69,196, 48, 70,138, 28, 5, 36,236,111,150,105, 82,162, -175,146,134,215,182, 4,185,227,175, 57,220,149,117, 53, 48, 65,161,203, 84,123,190,106,182, 81,223,150, 47, 87, 4, 65, 92,135, -149,163,219, 86,131, 91,106,103,208,216,219,209,187,219,214, 96, 75,117,122, 74,183, 4,179,235,213,206,176,184,155,240,149,171, -209, 80,125,249, 84,126, 88,188, 59, 67,147, 84,180,201,185,154,227, 82,242,188, 8,252, 16, 9, 40,206,146,118,208, 4,220,198, -131,214, 12,155,189, 86, 31,111, 54,186, 91,179,116, 70,207, 78,139,251,168,145, 27,225,206,162,132, 35, 90,208, 16,143,227, 49, - 22, 31, 96, 43,108,117,240,255,141,175, 47,222,190,120,203,243, 19,117, 25,207,147,195,253,199, 63, 70,223,179, 98,209, 4, 48, - 93,204, 81, 41, 71,195, 97,175,115,251,209,221,195, 95,227, 33, 34, 6, 49,143,143,161, 60, 68, 65,136, 55,107, 81,151, 73,223, -170,191,254,250,130,155,130,134,143,141, 32,176,136,118,233,127, 43,101, 39, 10, 8,203,208,201,153, 35,214,202,250, 95,198,203, - 28,255,188, 78, 38, 79,238, 61, 27,223,140,213,106,188, 41, 60,106, 37,155, 96,150, 81, 73, 55, 38, 67, 70,225, 89,152, 55, 54, -247, 65,255,113, 82, 93,138,243, 88,245, 10,233,227,174,123,204, 78,198,239,227, 31,165, 73,158,161,107, 44,205,141,196,175,237, -111, 81, 97,211, 83,112, 62,244, 91, 0,178,174,101,183,105, 32,138,142, 95,177,157,196, 45,105, 74,218,180,148, 84,106, 3, 45, - 2, 85, 98,193, 2, 9, 22,176, 6,132,196,138, 63, 65,124, 15,236, 89, 32, 33,126,128, 5, 69,128,144, 88, 32, 30,229,209, 54, - 52, 47, 39,142, 95,227,216,225,220,107,167, 32, 33,101,145, 72,173, 19,123,102,206, 61,119,230,222,115, 10,124, 7,217,161,213, - 56,238, 0,160, 85, 78, 25,200,136,210, 44, 35,113,238,141,127, 19,155, 38,111,156, 4, 24, 50, 19, 52, 77, 57,172,101,103,170, -117,164,174,133, 53, 43,219,116,100,249,254,168, 16,107,245, 86, 70,117, 93, 70, 68, 71,198, 10,171,182, 38, 21,211,177, 72, 41, - 37, 98,233,203,217, 98,245, 12,230,157, 79,250,112,211,152, 5,152, 10,157,197, 60, 28,113,127,118,202, 66,157,234, 60, 75,159, -113,195, 40, 18,183,185,171, 51,166, 18,251,113,231, 26, 86,170,242,171,255, 19, 63,105,193, 92,224,166,127, 4, 0,157, 61,215, - 69, 68,213,229,169,109, 90,160,225, 25, 85, 25,102,234,169,121, 14, 29,195,146, 75, 31,136,234, 56,116,243,244,176,185,180,241, -254,235,219,206,168, 11, 38, 27, 38, 65, 46, 66, 2, 60, 50, 77,139,218, 80,211,152, 32,137, 68,110,103,123,187, 87, 31, 61,124, -252,236,213, 51, 64, 63, 57,208,115,223, 38, 56,104, 94,103,137,159, 26,167,211, 32, 9,145,199,144,248,159, 97,111,175,180,143, -199,199,152,127,152,184,195,192, 29, 4,174, 27,244, 49,134,128,158,235,151,110,222,187,245,224,221,231, 55,171,160,204, 41, 98, - 42,194,140,228,219, 85, 7,227,104, 18,101,177,100,141, 59, 62,128,138, 1, 63,200,161, 18, 50,155,170,149,203,248, 51,163,132, -192,163,112, 9,160, 22,166, 72, 51, 21,170,119, 68, 94, 38, 83, 4, 3,130,192, 80,167, 45, 41, 78, 63,241, 40,239, 92,187,127, -208,249, 70,232, 68,151,212,202, 86,153,205,196,253, 34,248,138, 66, 42,131,196, 87, 13,106, 23, 90, 91, 58, 31, 98, 53, 86,106, -174,223,199, 51, 1,193,153, 21, 14,195,116,174, 9, 16, 1, 95, 6,138,133,145,223,159,244,211, 52, 89,114, 26,146, 25,253,198, - 82,139, 74, 43,185,122,172, 98, 86, 47,183,246,240, 17,151,194,130,108, 55,119,115,153,176,235, 59, 55,142,135,157,252, 8, 7, -223,222,112, 26, 63,122, 7, 81, 20,146, 64,154, 16,139,213, 26, 86,120,119,116,226,197,222,214,218, 78,215, 61, 33,223, 75, 42, -141, 63, 59, 77, 18, 60,174,205,198,230,229,205,189,158,123, 50,101,125,202,161,215, 5,203,238, 12, 15,139,156,151, 7,218,143, -188,163,254, 33, 2,204,122,253,188,148, 17,200, 1, 11,255,170, 24,169,173,198,133,173,246,246,211,151, 79, 14,123,191, 48, 74, -101,211, 30,250,164, 66, 5, 52, 39,191, 35,100,190, 20,234, 50, 4, 63,224, 47, 80,182, 82, 34,203,142,225,100,192, 58, 7,234, - 89,103,133,195,124,181,164,105,185, 95, 15,254,183,108, 88,139, 78, 13, 88, 22,207,213, 40, 53,208, 29, 93, 87,248, 20,120,189, -182, 46,217, 44, 52, 73,162,146, 74,173,234,172, 83, 42,234,213,229, 43,173, 43, 35,127,148, 78,165,105,152,119,175,221, 5,238, -144, 46, 1,113,178,153,146,139, 38, 16, 38, 83, 70,139,245,101, 90,166, 55,141,170,110,167,117,123,155,118, 92, 1,193,169, 20, -174, 43,186, 93,225, 5, 34,198,240, 99,109,201, 76, 51,116,219,137,199,125,233,117,115,125, 87, 54,192,160,203, 25, 26,213, 50, - 80, 53, 27,205, 81,213,192,205, 38, 1,150,174,112, 28, 82,152, 65,222, 71, 46, 4,185, 22,161,198,175,211, 55, 90,113, 91,197, -190,103, 54, 71,246,252, 77, 34,134, 71,226,227, 59,241,201,219,127,109,168,149,213,138,110, 13, 38, 61, 93, 49,218,107, 23, 79, - 60,178, 78, 92,173, 53, 59,131,223, 35,170,167, 64, 22, 27, 72, 41,217,239,244, 92,156, 36,241, 52,172, 88, 11, 41,203,149,135, -113,132, 27,223,110,182, 49, 69, 39,145,111, 27, 54,150,124, 44, 99,207, 31, 25,212, 35, 25,239,108,236, 60,223,127, 97, 25, 22, -242,128,143,223, 63, 12,130,161,105,128, 61,128, 27,217, 94, 60,241,165,223,247,122, 95,142,191,208,177,153,152, 33,191, 4, 95, - 89,169, 55,151,157,229, 35, 18, 5,161,126,120,238,148, 83, 88,252, 89, 68,137, 76, 11, 19, 20,178, 6,204,247,205, 17, 32, 65, -103,229,188,248, 85, 20,117,249,167, 62, 92,108,222,167,170,152,114, 22,233, 15,166,212, 94,192,252,149, 55,137,169, 55,130,109, -240,244, 92, 43,146, 14, 59,169, 4, 19, 51,176,232, 36,253,215, 32,219,166,178,192, 84,167,174,120,194,146,138,205,154, 10, 90, -201,164, 74,129,228, 84,201,224,175,161,241,255,175,220,192, 85, 40,127, 4,160,234, 90,122, 27,167,194,232,141,237,216,137, 31, -113, 30,158, 16,245, 49,148, 17, 98, 58, 26, 9, 4, 98,131, 96,139,144,216,242, 71, 96,131,196,134, 95,134, 6, 49, 3, 18, 43, - 24,132, 10, 44, 42,230, 69,155, 54, 77, 91, 39,142, 93, 59,142,109,206,249,238,100, 24,164, 46, 34,181, 74, 19,249,126,231,126, -143,243,157, 67,124,151,151,150, 38,115,202,210,157,150, 47,163, 22,115, 83,115,131,214,115, 92, 22,203,186,191,172,154,182, 97, - 35,182,113,178, 51,182,243, 88,153, 90, 82, 86,107,187,109,145,216, 70,210,145, 80,211,177, 92,139, 87, 31,125, 41,222,222,189, -135,242, 7, 64, 47, 18,222,182,204, 64,218,226,100, 95,230, 50,154,232,185,253, 79,223,251,252,207,211, 35,211,120,121,159, 57, -162, 27, 44, 91, 86,173, 45,139,137, 9, 96,208, 9,136, 65,244, 25,210,204,186,198,146, 21,127,155,203, 38,126, 20,142,199,225, -120, 63,162,231,131,223, 13,211, 34,237, 88, 14, 62,109,219,114,226,236, 26, 17,117,240,198,193, 28,119,172,180,128,245, 62, 52, - 46, 30,156,237,211,197,169, 67,149, 23, 58,153,208, 84, 79, 88, 39, 11,100,169, 8, 53,124, 90,195,136,122,147,121, 58, 43,101, - 45,139, 22, 71, 84,188,179,147,229,234,209,227,135,101, 83, 86, 6,221, 65,201, 84,101,252, 88, 29,155, 89, 42,249, 60, 34, 71, - 46, 54,165,205,170, 76,231,201, 5,174, 25,219,114, 62, 58,252,228,235, 47,190,252,241,175,159,145, 21, 2,245, 76,187,189,204, -151, 63,252,246, 96, 24,142,163, 48,186, 74,231,166, 89, 0, 46, 0,238,125,223,172,196,180, 3,167,134,154,109, 85, 3, 12,236, -116, 12, 36,175,172,209, 77,117,123,212,107,145,194,104,108,138,218,148,208, 79, 42,138, 56,160, 68,201,215,213, 98, 89,230,249, - 6,143, 19,229, 59, 48,133,158,144,148, 61,170,143,167,199,180,179, 81,122, 17,161,149, 81, 98,211,208, 82,207,248,172, 33,187, -219,149,166, 97, 70,253,241,225,238,253, 63,254, 57,194,111,105,180, 43, 41,109, 67,186,180,237,217, 62,103, 76,108, 34,183,156, -182,171,183, 11, 6,221, 40,219,100,129,227, 41, 50,106,220,179,248,132,179, 28, 89, 92, 4,152,162,148,158,197,231, 22,135,165, -213,101,114,142,116, 30,201,218,139,249, 51,209, 25,230,238, 43,190,233, 13,203, 65,199, 11,252,111,190,250,246,193,163,239,246, -162,219, 25, 87,145,105,164,153,172, 98, 99,203, 33, 40,105,137,206,228, 46,206,226,233,197, 11,223, 13, 41,169,111, 57, 2, 92, - 70,223, 27,245,152,121,177,254,195,227, 64,204, 34,173, 70,134, 56, 91,158,227, 95,247,221, 62,254,242, 58,185,236,218,206,201, -213,201,147,231,199, 67,127, 68,166,160,209, 94,164, 75,192,122, 35,227, 98, 26,103, 7, 17, 64, 25, 87,218,206,112, 31,215, 18, -142, 25, 55, 42, 91,173,192, 13,165,179,132, 90, 42,147, 14, 57, 39,223, 2,155,134,246,109,199,133,135, 47,107,181,172, 91,225, -184, 0,200,210,139,190,210, 50, 38,192,169,142,169,217,217,181, 80, 78,169,166,135,163,181, 42, 86,167,215,211,189,193,206, 34, - 95, 14,186,131, 39,179,167, 0, 50,224,111,191, 59, 96,205,199,117,104,109, 88,223,208,190, 6,101,184, 73, 13,135,123, 97,111, -255,179, 67, 37,125, 76,137,235,182,138, 19,238,175, 22,133,202,129,241,202,223,191,235, 77,222,236, 4,163, 42, 91, 85,235, 84, - 42, 46, 50,252, 44,246,103, 72,184, 36,178,183,229,250,193,121, 66,206,148, 39,106,147, 43,223, 83,110,151,108, 25, 75,253,223, -100,238,245, 14,197,171,108,125,179,125,129,159, 27,117,254,183, 58,250, 93,165, 73,245,203,228,251,147,203, 44,191, 66, 44,208, - 2,182,222,204,227, 75, 42,208, 84,117,156, 46,134,193,208,239,122, 23,201, 92,247,162,107,170,164,148,120,154,178,145,207,134, -141, 78,251,222,154,220, 57,187,158,226,166,154, 45,102, 5,147, 6, 39,201, 19, 4,251, 48,136, 16,185,233, 77, 86,214,235,119, -118,238,246,131,161,103,187, 22, 7, 48, 14,222,173, 71, 2,119,182, 46,138,221,104, 15,111, 66,153, 95,128,210,102,237,121,195, - 15,223,255,248,167, 95, 31,238, 12, 38, 41,183,100, 11,225,234,212, 91, 21,154,218, 82,230,187, 7, 31,156,197, 83,189,200,215, -177, 92,100, 74, 69, 89,104,221, 35, 36, 13, 22,141, 85,165, 7,170, 90, 91, 65,175, 90, 4,242, 36, 67,213,134,216,134,158, 98, -116, 16,221, 56, 9,101, 83,104, 93, 80,109, 28, 42,180, 95,181,150,113,212,171, 21, 84, 61,118, 28,245,110,173,169,110,239,149, - 85,238,216,174, 45,114,229, 47, 69,164,183, 70,142, 91, 96,127,253, 89,232,209,226,127, 54, 79,248,197,191, 2, 48,117, 45,187, - 77, 3, 81,116, 60,177,157,247,163,133, 62, 64, 77, 33, 77, 17,148, 66,169, 74,169, 0, 33, 33, 36, 36,196,130,175,129, 61,223, -192,182, 75, 36,248, 13,196, 2, 1, 66,116, 7, 45, 47,137, 87, 32, 77,136,211, 36,126,213, 99,123,184,103,198, 21, 44, 42, 85, -149, 26, 59,246,157, 59,119,238, 57,247,156,163,254,140, 42,217, 20, 38,162,189,213,203,224,228, 37, 96,101, 1,206,138,197,216, - 61,144, 58,149, 34,138, 69,115,118,105, 56,113,180,151, 60,203,218, 45, 25,146,171,193, 70, 61, 11, 0,146, 37, 12,115,232,201, - 70,206,228,207,165,214, 6,189,164, 70,169,174,225, 41, 1,123,157, 8, 58, 12,232,150, 68, 20,199,223, 6,223, 4, 36,130,149, -234,175,212, 50,108,136, 68,237, 46, 69,127, 0, 90, 37, 19, 42,190,208,140, 81, 89,127,181,185, 62, 14, 70,116,173, 74,177,214, -156,106,246, 39, 61, 58, 37,237,143,122,253, 73, 95, 29,111,233,205,201,107,103,111,244,134, 93,138, 24,139,231, 41, 29, 80,141, - 38,149,196,141,201,205, 70, 13,140, 64, 58,185,211,222,158, 55,237,137, 63, 89,152,109,133,135, 33,246,149, 84,121,175, 24,236, -230,197,219,179,245,153, 31,131,239,148,244,233,230, 5, 88, 49, 0, 84, 76,219, 14, 37,122,253, 1, 21,232,169,214,146,102, 16, -111, 96,169,101,153,211,165, 41, 87,248,126, 18,168, 81,136, 84,217, 43,115, 90, 68,148,119,107,165,170,193,173,157,175,111, 40, -249,126,218,255,104, 23,242,181,114,125,173,181, 70,207,243,204,169,179,185, 2, 63,215, 94,145,204,236, 59, 93,206,209,151, 44, -230,109,103,226, 3, 82, 84, 14,149,138,251, 46, 53, 11,158,130, 63, 56, 20,205,169,154,114,148, 86,226,204,210,240, 69,110, 64, - 63, 16,161, 53, 44,108,224,210, 50,211, 82,158,214, 26,172,245,218, 51,231,130,200,135, 15,117,170,199,232,145,244, 53, 9,150, - 22, 73,166,227,175, 70,192,168,176, 3,122, 44,147,230, 76,107,231,243,107,100, 46,158, 43,216,165, 24, 40, 16, 84, 89,104, 41, -134,201,225,137,250,252, 92,227,228, 8,147, 92, 41,221, 4,244, 93,139, 53, 74,217,155, 75, 91,123,157,221,141,246,213,137, 79, -213,104,156, 51, 96,214, 72,123,219,202,194,106,103, 0, 91, 46, 19, 40, 8, 60, 54,209, 93,135, 72, 30,234,190,106,185,129, 62, - 8,231, 84,184,185,158,247,252,197, 51,186,174, 7,113, 58,244, 16, 64,202,228,134, 6, 47,109,211, 50,148,178, 46,253, 47, 37, - 71,120, 8, 75,182, 56,179,184,186,120,161, 63,238, 97,212, 27, 21,174,141,116,133,137, 39, 90,126,198,165,165,203, 94,232,135, -145,199,149, 57,116, 36, 4,125,139,181,211,235,251, 7,191, 40,203, 81,145,211, 40,214,220,192,213,180,123,165,222,170, 84,191, - 67,159, 42, 77, 52,217, 99, 65, 57, 49,140, 3, 83, 85, 78,244,153,211,229, 58,237,232,116,248,163,170, 31, 44, 97, 78,143,204, - 44,130,141, 38,149, 15, 56,174, 66,241, 64,191, 31,175, 76,175, 44,156, 31,184, 14,157,137,235,133, 90, 53, 95, 25, 3,189, 72, -116,211, 38,167,150, 18,133, 55, 70,180, 12,174,196,248, 0,253, 1,235,206,153, 76,131,111,218,116, 66,202,171,103,174, 43,158, -143, 77,219,180, 5, 66, 60,139, 34,113,165, 82,101,203,199,144, 0,192, 52, 42, 50,199, 97,110, 64,201, 61, 13, 67,163, 80,182, -102,155,128, 5, 97,111, 38,195, 81, 15,208, 16,250,239, 24,146, 5,178,129,222, 19,220, 93,209,118,183, 56, 20,193, 76, 90,246, - 30,243,198, 72,214,197, 18,163,232,249, 95,213, 42,203, 38,233,127, 53,123,114, 4,168, 10, 38, 7,236,203, 46,251,244,129, 37, - 62,219,205,191,121, 27,247, 99,159, 62, 30, 26,141,170, 43,171,156, 52,178,161,104, 47,242,105,171, 75,180, 54, 52, 8, 71, 16, -104,203,176,119,142,186, 71,139, 19, 28,184, 20, 93,201,189,173,187,239,126,188,111,205,181,189, 0,115, 42,219, 15,159,118,126, -127,125,181,247,210, 23,225,200,117,186, 7,221,206,159,239, 3,207, 25,123, 99, 14, 39, 9,177, 63,236, 66,237, 53, 5,205,131, - 66, 40, 7,158, 85,133,114,194,141, 91,119,238,111, 63,120,242,232,241,252,244,124,103,240,139,190,216,229,229,205,159, 16,143, -139,149, 90, 48,234,149,161, 55, 20,104,180,214,233, 45, 68, 10,113, 4,255, 4,109, 58,147,110,127,174, 14, 79, 2,161,117,193, -140,172,207, 62, 85, 57,118, 40, 66, 83,151,201, 80,196,194, 73, 20,226,195,112,103, 12, 45,240,253,152,134, 16,100,154,137, 70, -234,179,148,242,122,252,167,215,171, 70, 53,147, 88, 73,165,166, 82,128,220,165, 27, 64,233,145,119,241, 17, 16,153, 41,100,104, -211, 95,158, 17,151, 43,133,170, 26, 13, 6, 89,243,175, 0, 76, 93,203,110,211, 64, 20, 29, 59,206,195,113,147, 56,109, 18, 42, - 80,104, 34,160, 16, 65,121, 9,164, 34, 84,177, 96,203, 2,190,128, 31, 64,124, 6, 75, 62,130, 37,127,192, 10,118, 44, 88,129, - 80, 3,234,139,132, 66,157, 80, 59, 36,113, 28,143,159,220, 51,147, 84, 44,163, 70,181, 51, 51,247,204,125,158,115,134,239,154, -224,164, 46, 74, 65, 62, 41, 23,185,212,160, 66,182, 63, 22,194, 34,152,224, 16,215,198,200,181, 9, 1,150, 29, 58,233,146,171, - 18,127,163,195, 77,254,239,214,198,109, 40,182, 4,252,122,235,102,163,130,188, 7,253,195, 19,231, 87, 4, 82, 39, 63,141, 17, -242, 32,155, 86, 52,209, 47, 65,254,114, 16, 44, 74, 13,255, 53,247, 87,139,107, 64, 28,216, 26, 1, 38,136,136, 41,182, 10,209, -235,146, 74, 81, 77, 37,205,156, 78, 44,218,191,170, 96,125,179,198, 22,217,185,185, 82,211, 22, 52, 62,178,242,141, 84, 93,152, -198,130,171, 47, 38, 16,167, 35,101, 26,102, 73, 55,103,124, 82,202,149, 93,142, 49, 7, 93, 43, 60,184,246,112,223,218,123,124, -235,241,183,227,174,135,142,192,148,124,249,178, 81,221,237,127,237,219,189,138,177, 42,229,182,235,230,186,227, 59,192,133,230, -205, 47,195,221, 65, 60,114, 84,207, 83,231,118, 50,113, 66,119, 22,121, 26, 12, 50,237, 59,199, 58, 18,225, 80,119, 35, 19, 53, -242, 70,103,189, 99,185, 22,173, 55,109, 0,189, 9, 79,194,105,224,145,111,248,108,251,105,164,132,123,195, 35, 47,246, 43,101, - 83, 47, 24,221,195,238,206,189,157,243,237, 75,189,254,247, 85, 51,205,229, 88,168,250,177, 34,186,169,196, 13, 45,101,196,194, - 56, 9,120, 26,204,195,186, 94, 34,255, 43,159, 5, 51,122, 38, 1,245,152,151, 68,104,177, 64, 73,144, 12,150,222,129,108, 54, -153,216,228,195,103,236,241, 31, 47,152,129, 36, 61, 91,136,162, 88,131,183,171,172,150, 36,129, 15,170,137, 82, 9, 12, 9, 46, -144,251, 43,180, 50,131,241, 73, 6, 99,201,154,172,141, 99, 62,121, 49,124,132,125, 34,135,200,118,135,184,135, 10, 43,180, 17, -115, 62,167,211, 76,123,186,125,109,123,183,247,181, 89,111, 13,199, 22,198, 35,210,248,222,229,251,135,191,247,200, 89, 38,227, - 12, 69, 79,113,163,178,142,147,198,208, 86, 72,231,189,164, 87,232, 65, 11,214,138, 56, 38,107,148, 81, 27, 24,225,201,161,150, -204,215,192, 67, 81, 66,193, 8, 94,254,202,133, 78, 20,113,242, 42, 94, 61,127,253,253,184, 59,158,141, 15, 79, 14,185,144,208, - 35, 11, 36,244, 39, 8,243, 57, 60,175,173,214,157,254,176, 7, 30, 80,130,114, 37,179,181,113,163, 55, 60, 8, 19,242, 94, 40, -220,244,209, 15,151, 51, 40,132,162,184,112, 41, 41, 44,167, 71,176,129,228,251, 83, 80, 69, 31,154,144, 30,155,129,138, 64,200, -152,208,109, 1, 33, 30, 97, 7, 50,136, 17,200,149,190,120,242,242,104,208, 15, 34, 36,187, 40,252,221,233, 60,178, 39, 14, 42, -204, 76, 51, 87, 42, 63,237,222, 12,164, 90,146, 88, 46, 35,197, 76,104, 61,155,171, 23, 61,132, 2, 76,144,243, 8,197, 57, 65, - 61,169, 74, 13, 79, 69,217,168,181, 38,222, 95,107,244,123, 14, 42, 8, 2,119, 44, 70, 94,203, 78,147,192, 61,176, 59,155,117, - 86, 55, 0, 30,115,206, 70, 83,224, 59,231, 41, 15, 24, 69,135,229, 53,252, 46,160,187,199,133,198, 44,104, 92, 85, 85,226,123, - 14,157, 52, 26,146,236, 89,117,153,115, 87,145,150,137, 3,230,142,152,235,160, 7,134,206,114, 46,191,204,201,156,149, 79, 37, -202, 75,184,247, 89,122,202,172,125,182,219,101, 3, 11, 61,213,174,230,188,215, 63, 56, 78, 65,220,135,146, 55, 93,232,141,203, -235, 10, 67,249,130,108, 80,220, 95,130,157, 94,146,188, 82, 32,229,113, 94, 44, 20,105,169,133, 2, 31,108,153, 46,227,110,255, - 27,125,129,112, 67, 84,119,166,111,223,189,249, 97,253, 40, 66, 54, 89,221, 60,191,233,135, 92,207,233,173, 70,107, 50,159, 92, -189,176, 73,123,186,102,212,220,192, 13,192,164,196, 25,198,205,244,177,247, 23, 44, 91,206,168,164, 87, 63,127,252,116,124,218, -163,103,214, 86, 26, 71,195, 35,186, 87, 90,231,218,237, 90, 27,234,122,138, 82, 53,170,174,239, 70,146,215,100,217,242, 66, 47, -119,187,125,215,155,207,254, 76, 7, 96, 67, 18, 94,248,153, 94,122, 54,147, 67, 23, 95, 34,168, 83,213, 76,185, 96, 70, 98, 94, - 65,164, 92,138, 23, 27, 27, 99, 15,124,177,116, 68, 58,205,235,108,225,191,166,244, 32, 95,168,218,137,209, 18,201,152, 40,253, -127,137,190,178,136,200, 22,148,169, 76,168,246,165, 82, 22, 27,159,234,165, 26,100, 3,150, 20,242,152, 82,202,163,112, 29,136, -153,187,127, 2,240,116, 46,189, 77, 92, 81, 28,159,241,188, 31, 25,123,140, 31,184, 73,156, 0, 6, 81,136,148, 80,210, 77, 96, - 9,170, 90,169,173,170,170, 11,118,244, 43,116,215,175,194, 10,150,149, 10,130, 69,139, 68, 65, 8,196,162, 21,225, 33, 64, 21, - 37,113,192,141,242,116,157,216,206,140, 99,199,243,232,255,156,235,176,115,188,136,174,231,158,123,238,249,159, 57,231,119,100, -139, 94, 30,226, 1,106, 8,105,109,205, 25, 80, 37, 29,157, 55,215,204,134,212,180, 57, 26,140,173,169, 70,181, 80, 11, 7, 29, -238,215,143, 82,209, 81, 53,194,224, 51, 4,132,194, 97, 89,140, 26,161,233,180, 49, 5,222,216,174,130, 87,234,246,118,176,145, - 99,166, 15,171,237, 69,193, 76,245,179,215,239,159,137,177,199,220,245, 10,213,236,244, 9,113,147, 17,228, 97,121, 4, 18, 72, - 36,209,180,194,177,165,165, 81, 71,184, 99, 58,184,210,113, 60,152, 51,157, 58,186, 83,244,138, 8, 6, 29,221, 13,163,240,220, -244,231, 43, 27,203,248, 6,158,104,105,243, 29,223,159, 36,151, 68,247, 13, 87, 7,193,101, 83, 14,135, 2,207, 97, 8, 11,224, -227,171,242,178,199, 96, 55, 56,174,132, 21, 60,216,255,180,122,214, 54,220, 87, 31, 94,194, 29,219,186,189,199,241, 84,202,192, -111,252,147,114,118, 98,194, 31,111,153,189,135, 75,143, 17,146,178,199, 17,163, 6, 19,105, 4,230,163, 92, 57,149,155,226, 89, -146, 29,152,118, 70,163, 55,144,131,129,145, 81, 79, 21,142, 97,241,195, 52,250,102,246,171, 70,123, 13, 14,162,177,251,239,124, -237,252,194,249,133, 75, 63,125, 33,246,233,183,107,191,111, 53, 54,127,189,127,227,120,233,160, 31,165,175, 26,205,118,175, 31, - 16,127, 82, 96,141,137, 37, 64,149, 5, 9, 78,241,254,197,233,138,107, 27,240, 3,131, 3,202, 9,100, 93,107,165,223, 31,194, -119,211, 44, 86, 74,184,195,234,108, 53,213,195,137,213,238, 7,137,114,110,180,129, 83,197, 19,203,235,111, 69,248,224,153, 62, - 14,198,235,198, 75, 49, 69, 66, 81,181,130,119,116, 55,216,142,227, 24,138, 39,231,230,241,204,185,235, 39, 65,176,255,253,194, - 15,119,254,186, 5,107, 33, 4, 46,167,242,179,174, 63,238, 87,223,172,190, 80,152,127,165,202,170,105,216,157,112,103,252,200, - 84,217, 47,189,168, 47, 66,246, 79,150,166,222,111,215,161, 96, 12,221,204,123,165, 35,174,191, 88,127,106,106,170, 72, 2, 49, -247, 33,174, 85, 78, 47,111,188, 19, 65, 13,158, 63,244, 56,113, 90,162,254,119, 11, 87,126,121,116,253,203,249,111, 31,191,185, - 15, 45, 8,189,140,152,200, 80, 45,134,220, 36, 38,183, 52,107,138, 54,119,108, 30,246, 50,123,124,238,193,243, 63,102,166,103, -158,252,253,132,102, 16,200,113,201, 43,239, 4, 45,120,118, 75,115, 33, 92, 60,182,109,136, 24,196,221, 68, 1, 76,165, 96,208, -101,148, 33,131,120,168,209, 44,225,196, 43, 57, 89, 66, 70,167, 9,238,137, 14,115, 75, 4, 67,184,156, 45,239,244,118,185,125, - 41, 98,152,136, 98,171, 54, 46, 29,248, 43, 44,187,217, 94,243,172, 28, 92,112,142, 18, 56, 49, 98,112,149, 17, 97, 89,139,152, -107,149,220,209,102,167, 89, 45, 84, 27,205,134,170, 40, 97, 63,100,213, 78, 72,106,172, 51, 60,216,155,171,206,182,247,187,184, -168,182,186, 91, 17, 65,152, 85,172,179,213,109, 97,117,228,143, 9,134,140,219, 69,214, 53,217,212, 8,156,239,146,134,207, 92, - 60,251,117,177,249,231,133,159, 47, 75, 69, 91,234, 4,210,102, 83,106,182,165,246, 94,212, 13, 98,115,204,152, 60,195, 8, 50, - 57, 88,253, 39, 92, 95, 81,120,192,146, 66, 62, 60,163,169, 68,255,103,134,187, 70,241,187,174,177,139,231,111, 88, 47, 81,206, - 7,127, 90,142,148,247,165, 66, 94,242,115,244, 57, 99, 30,246, 55, 69, 82, 50,144,130,142,244, 95, 75,106,181,169,110, 39,138, -196, 24,136,244,182,121,243,109,119,160, 82,193,120, 60,234, 57,140,248,144, 16,141, 11,166,147,181,179,248,233,235,109,210,214, - 67,190, 32,113, 86, 17,176, 67,109, 77, 22,170,107,173, 85, 24,170, 99, 57,120, 58, 56,196, 67,154,206, 17,240,125, 18, 31,178, - 92,148, 31, 47, 95,189,187,120,207,247,242,176,165, 90,229,100,125,163,206, 41,132, 88, 55,108,236, 36,110,235,152,225, 16,204, -252,166,228,143,107,231,176, 71,148,138, 36,186,109, 60,230, 66,184,111, 83,198,129,107,217, 5, 52, 9,207, 25, 2,178,228, 86, -118,251, 29, 86,165,226, 29, 19,153,169,128,100, 83,243, 26,209, 53,168, 35,137,208, 17,220, 29, 2, 19,134, 86,144,169, 89,178, -151,145, 15, 51,243, 73, 82,251,228,116,125,115,233,227,155, 83,154,175,195, 51,249, 34, 74,227,200, 36, 21, 72,182, 36, 60, 95, - 40,225, 1, 54, 31, 61, 43,133,235,134,102,164, 60,252,143,106, 55,210, 8,238, 75,207,208, 68, 79, 68, 99, 92,212, 46, 54, 64, -176,151,184,132, 88, 84, 33, 29, 86,151,252, 47, 0, 83, 87,211,227, 54, 21, 69,159,237,216,147,100, 38, 83,135, 52, 31,157,102, -146, 50, 3,162,160, 86,165, 2, 33,212, 13, 11,216, 13, 27,196,142,191,208,223,135,132,144,168,212, 46, 88, 33, 42,102, 68,171, - 2, 29,165, 19,231, 99, 18, 39,182, 99,199,223,177,185,231,218,131,144,102, 21, 77, 62,222,243,187,239,157,115,223,189,231,148, -248,157, 5,129, 33,136, 67,176, 20,145,150,239, 2,200, 57,165,204, 79,113, 68,197, 89,186,114, 23, 68, 27,107, 90,157, 47, 25, -254,167,118,175, 64, 53,169,166, 85,209, 35, 46, 75, 44,222, 43,235,251,205, 7,131, 71, 51,107,218,107, 30,209,217, 0,175,203, - 52,216, 2, 54,102, 75,107,198, 53,165,101, 59, 75, 41,105,204, 39,248,127,133, 71, 52,204,198,158, 78,211,163,226,172,142,136, - 92,192,183, 79,134,104, 48,220,160, 88, 83,245,176,174,123, 91,167,223, 30,186,190,205,162,228,249,194,190, 38, 36, 78,113,235, - 65, 25,174, 84, 14,185,221,104,127,122,242,153, 31, 5, 9,172,232,193,154,115,214, 98,237,220,234, 60, 62,253,226,242,250,111, -182, 81,197,213, 25, 69, 62,173, 34, 10, 22, 66,208,244, 99,130, 52,132,225,178,144, 10, 73,100, 34,212, 25,148,235,229, 76, 22, -126,226,140,242, 75, 35, 54, 14,235,245,253,154,198,217, 94, 9, 1, 1,162,205, 74,169,146,198,216,138, 54,219, 74,174, 34,108, - 98, 41,245,119, 65,148, 39,126,236,141,109, 99,108, 77, 38,235,217,179,183,191, 94,204,255,186, 92,143,232, 88,189,178,141, 77, -232, 76,207,141, 87, 47, 46,246,104,220, 27,245,213,232,207,119,166,161,230,242,135,221,234,212,117,104,117, 33, 57,173,176,173, - 12, 91, 64, 20, 85,228, 52,198, 65,163,222,171,213, 8,223,107,169, 80, 19,161, 10,201, 14, 83, 43,136, 93, 63,134,250, 26,141, - 45, 76, 14,114,229,218,219, 20,192,159,177,210,206,218, 66,182,254,142,222,247, 2,135,254,101,225,206,246,112,115, 5,231, 99, -110,212, 70,167, 33,192,237, 46,182,189, 53, 29, 78,116, 12,211, 35,120, 56,120,252,203,197, 79,237,131, 94,169, 10, 0, 17, 32, - 4, 7, 92,173,235,122,183,121,196, 42, 2,240,164, 39, 72, 53, 89, 27,243,245, 20,115, 35,203,180,221,247,223, 27,236, 16, 93, - 91,203,133, 58,227, 54,246,136, 16, 87, 20,232,211, 29,214,154,244,138,237,175,105, 29, 64,194, 1,229, 1, 92,122,148, 97,127, -156,174,198,155,208,125,120,239, 17, 65, 87,154,213,182,222,165,195,142,152, 34,177,162,239,159,252,112,181, 28,105,156, 30, 49, -157,197,120,113,165, 41,112,243, 49,157,149,235,111,158,158, 61,125,126,254,124, 71,103, 44,250, 54,165,211,222,233,194,158,126, - 50,124,240,245, 87,223,156,191,254,131, 2,126,208, 30,210,143, 20,240,197,189, 85,136, 32, 85, 88, 30,245,164,251, 62,197,182, -190,223, 10,163,224,236,243,111, 21, 84,190, 70,183, 15, 90,232,137,203, 18,218,166,239, 54,239, 58,104,122, 66,194,155, 27, 85, -178, 32,132,107, 45,241, 18,248,186, 75,121,163,218, 8,146,232,184,117,236, 22, 85,158, 10,164,150,234, 90, 53,192,173,177,111, - 7, 54,205,246,189,238,112,229,154, 10, 19,117, 85,170, 4,252,184,102,214,124,106, 77, 52,102,129,184,209,137, 67, 90,213,208, - 57,136,188, 86,163,157, 64,137,161,212,192, 87,184, 69,169,166, 53,228, 44, 50, 55, 35, 51,137,238,188,113,155, 79,134, 8,121, -107, 43, 54, 62,225,247, 4,239,247, 21,130, 71, 21, 53, 94, 45,188,249, 63,172, 35,194, 53,118,236, 76, 93, 97,182,139, 36,123, - 33,224,174,241, 95, 69, 46,119,121, 34,128,216,232, 41, 62, 19,177,221, 10,203, 18,230, 18,240,124, 57, 17,203,169, 88, 24, 98, -110,136,241, 59, 49,155, 11,199, 21,113, 84,138,143,209,150,250,179,246,227,185,175,214, 43,167, 7,173,125, 69,213,213,234,253, -163,251,107,111,157,114,215, 34, 45,191, 65,187, 79, 35,221,112, 3,221,141, 3, 47,192, 61,205,222,119, 95,158,253,246,246,101, -130,155,106,162, 31, 17,129, 95, 11,218,238, 81,217, 37,157,137,143,143, 63,186,118,150, 20,152,191, 95,190, 92, 58,115,130,246, - 76,216, 81, 36, 66,192, 20,234, 26, 82, 22, 38, 97, 71,239, 4,161, 79,168,124,229,152, 39,189, 15,130,200, 31,118,134,166, 99, - 18, 51,160, 41,165,239,164,248,160, 15, 79,185,173,129,245, 63,136,245,194, 70,212, 11, 60,151,130, 34,142,196,205,214,153, 21, -198,103, 92, 9, 67, 15, 14, 91,115, 97,135,192, 77, 15,197, 13, 33,161,185,162,203, 15,180, 12,254,165,128,221,142,111,193, 9, - 67,193, 29, 54,231, 29,145, 15,227,105, 87,171,106, 21,217, 14,194,127,133, 32,116,126,227,183, 91, 86, 24,202, 76,122,112,253, -160, 65, 45, 3, 56,245, 72,239,155,238,146, 86,187,166,213, 98, 52,238, 73, 5,230, 40,101,135,111,178,239, 69,166,136, 94,250, - 87, 0,154,174,165,181,137, 48,138,206, 36,147,204, 76,147, 52,105,218,105,227,179,181, 62,208,162, 21,109,197,138,143,165,184, -208,157,232,143, 16,252, 41, 46,252, 3, 34,184, 85,144,130,149,130, 32,184, 83,169,134, 90,144,162,109,131,166, 49, 77,154, 78, - 50,153, 87,230, 17,207,189,223, 20,178, 9,132, 9, 51,115,191,251, 60,247,156, 67,252,204, 80,104,210,211,229, 88,133,196,159, - 42, 76,205, 79, 47, 52, 58,117, 73,192,119, 82,137,222,172, 19,218, 9,201, 85,194,105, 67,229, 11, 98, 94, 70,206, 14, 98,159, -203, 62,174, 2, 3,175, 97,214,197, 20,204,116, 14,108,215,130, 11, 40,228, 70, 97,254, 60, 84, 38,150, 33, 35, 63,153,205,232, - 92,144,198,162,181, 47, 90, 52,172,181, 70, 48,115, 28,131,123, 87, 31,108, 33,250,113,239, 15,166,140,251, 68,105, 60, 36,109, - 94,228,254,254,185,163,231,183,155,191,168, 11,150, 18, 93, 89, 65,207, 68,188,219,204, 4, 68,218, 30,120,247,141,206,174,237, -245, 4, 41, 61,169, 80,101,180, 48, 14,154,102,163,105,146, 40,140,104,121,148,137, 7,216, 45,231, 12,219,235,250,129,235, 34, - 26,249,253,144, 23,164, 73,220, 34, 10,188,216,139, 4, 1, 49,157, 13,185,175, 33, 5,103, 70,110,177,204,198,115,130,148,128, -119,139,101, 17, 49, 84, 37,133, 32, 90, 76, 99,224,143, 66,123, 66,228,238, 85, 73,215, 8,156,144, 73,227, 39,118,228,180,252, -131,186,213,248,178, 83, 93, 94,123,191,188,182,242, 98,249,213,106,117,165,186, 83,117, 3,155,230,170, 67,191,222,181,101,230, - 37, 87, 50, 56, 0, 60,241,130, 71, 80, 88,188, 60,150,178, 82,234,242,113, 99,198, 40, 26,227, 72,230, 16,222,149,113, 21,225, - 17, 87, 15, 71, 97,102, 3,218,130,238, 83,106,175, 70,204,142, 38, 39, 48, 43, 88,170,166, 49,102, 6, 53,141, 88,110, 22,249, -195,180, 49,219,117,205, 48,164,165, 33, 56,116,184,254, 74,241,104,219,110, 35,142,238,219, 45, 70,128,164,198,242, 99, 54,145, -185,203, 9, 48,142,176,246, 97, 65,203,163,214,193, 3,196, 19,222,235, 54,105,246,158,128,157,168,117,232, 12, 28,150, 81, 37, - 43,198,105,175,181,118,110,204,221,113,137,203,211,121,120,235,225,183,173,175, 90, 38,199, 41, 51, 13,108,120, 17, 31,197,165, - 84, 42,140,163,166,238, 59,214, 70,109, 29, 14, 29,111,191,135, 51, 35,167,116,133, 74,132, 90,115,123, 16, 17,220,240, 72,249, -248,147,251, 79, 23,238, 46,126,255,252,109,128,148, 44, 12,224,112,175,220, 95,220,253,185,235, 7, 78,177, 32,118, 97, 76,220, -255,169,201,217,183, 31, 95,227,133, 76, 79,157, 70,232,194,139,190,118,230,250,190,213, 98, 69,217,156,150, 86,225, 20, 17,105, - 98, 94,241,131, 53,194, 78, 90, 44, 86, 69,126,132,123, 37, 37,125,204,242,187,242, 80, 22, 50,103,149, 82,229,226,137,121,228, - 52, 61,167,167,103, 85, 54, 8,202,216,243, 89,125,175,187, 55, 99,204,208,242, 75, 28,149,114, 37, 26,215,179,126, 18,109,237, - 13,220,182,181,207,155, 89, 35, 41,150, 22,226, 58, 82,191,117,225,102,227,160, 33,224,128,156,210,134,248, 35,164, 5, 60,111, -164,141,110,246,236,140,182, 19,205,204,104,160,170,250,120,222,240, 99,111,199,114,151, 66, 69,154,155,144, 58,150,100,245, 37, -143,200, 17, 6,158,235,154, 45,167,221,112, 58,117, 18,146,149,197,132,239, 80,229,150, 46,199, 8, 72,133,253, 59,125, 88,178, -131,188,124, 38,161,252,101,120, 38,223, 19,211,131,161, 34,132,239,243, 60,201,243,105,132, 27,242, 38,242,144,217,109,211,188, -106,241,169, 32,119, 46, 70,197,194,203,239,239,158,175,127,120, 86, 93,125, 83,219,248,209,252,125,126,180, 82, 82,115,126,140, - 50, 52,238, 17,135, 93,200, 11, 38, 67,150,131, 28, 86,198,142,192,120,112,215,255,204, 61,179,111,206,157,188,132, 92,152,166, -169,172,222,133, 52,145, 92, 33,159, 71, 60,171,242, 72, 25,169,133,231,121,143,110, 63,254,219,254,139, 88, 14, 43, 90, 58,187, - 52, 85,158,172,181,254, 16,225,124, 24, 56,174,125,204, 56,177,185,187,105, 20, 39,154, 38,117, 84,250, 94, 31,246, 38,184, 24, - 37, 22,173, 65,224, 39,250, 7,234, 36, 68,122, 70,135,227,242,153, 59,232, 80,162,233,176, 89, 60,140,133, 72, 13,241,227,210, -164,135, 80,239,121, 61, 31,243,194, 51,147,249,112, 51, 77, 74,154, 25,244,180,104,248,136,132, 48,173,176, 67,231,142,180,162, - 48,152, 70,124,141, 89,252, 32, 45,112, 45, 28, 35,216,161,114, 51,134, 43,218, 17, 85, 19, 64, 59,102, 47,161,217,106,207,237, - 33, 56, 6,145,239, 39, 8,102, 1,229, 73,252, 58,142, 21,204, 0,105,147,156, 98,192,183, 36,253, 23,128,167,107,233,109,226, -140,162, 99,123,198, 99,123,198, 19,103,226,132, 36,118, 66,104, 77,128, 54,192, 2, 16,162,139, 10,241,216,118,211,178, 98, 19, -126, 13,255,160,255,160,187,170, 82,187,233, 47,168, 80,213, 42,170,154,182,180, 16, 33,226, 4, 59, 49,182,231,253,240, 60, 60, -189,231,126, 6,201,171,216,241, 99,230,222,251,221,199,185,231, 8,252, 76, 73,116,127, 4, 88, 16, 39, 27, 56, 25,102, 19,127, - 28,131,104, 27, 31,214,172,153,228, 69, 20,162,174,108, 94,191,243,233,157,163,179, 87,140, 40, 71, 53,192, 66, 82, 88, 54, 99, -150, 24,144, 3,243, 20, 69, 90,111,109,176,126, 83,192,156, 72, 8,187, 9,107,101, 8, 38,227, 2,224,179,134, 23,187, 50,104, -242,177,241,152,177, 62, 6,253,123,146, 70, 53, 62, 84,201,156, 77,173,125, 58,125, 91, 97, 54,189,124, 33, 22,157,138,226, 7, - 12,156,116, 11,147, 88, 22,165, 8,226, 44,106, 44,173, 90, 7,254, 93,208,103, 21, 69,163,174,211, 15, 72,241, 76,161,215, 13, -250, 43, 54, 3, 97,207, 50,213,194,140, 86, 66, 39,113, 6, 92, 29,213, 7, 81,198, 83, 85, 33, 91,196,109, 88, 92,219,142,185, -189,164,181,188,153,197, 59,136,165, 84, 46,176,200, 63,175,240, 28,146, 10, 61, 10,109, 56,228, 40, 22, 23,153, 96,192, 47,192, - 9,200,203,144, 98, 39,153,213,172,202, 80, 56,197, 13, 46, 45,102, 44, 48, 25,225,104,168,129, 33,219,144, 43,243,121, 57, 73, - 36, 39, 10,172,192, 29,186,246, 27,111,252,199,217,104,224, 5,118,146, 90,179,153,147,100, 65, 66,185, 9, 61, 80,135,210, 43, -165,121,201, 10, 19, 55, 74,100,181,249,251, 73,240,239,212,233,251,254,105, 16,141,163,184, 99, 92, 27,132,144, 55,251,114,247, -113,165,164,142,194,161, 82,110, 8,164, 19,136, 35,153,199,101,150, 6,128, 62, 20,232, 3,144, 35,181,244, 21, 0, 24,162, 41, -175,129,104,105,150,157, 57, 20,107, 64,151,182,187,126, 21,129, 91,202,155,106, 51, 2, 6, 67, 17,165, 15,175, 96,160,183,198, -109,211,144,238,233,205,157, 91,183,123,119, 95,246,255,210,106, 6, 58,250,101,153,156, 39,129,150,102,149, 98, 16, 35, 53,212, - 55,231,175, 40,217,255,231,228, 79, 74,231, 41, 77,254,237,232, 87,186, 40,171,198,218,211, 7,251,228, 13,189,245, 93, 64,101, - 98, 27, 1,183, 90,119, 3,123,255,171,253,254,217, 49,157,199,192,141, 84, 84,122, 80,189,213, 93,238,222,222,189,123, 62, 61, - 39,235,167, 0,253,226,239, 95,172,254, 68,145,101,179,185, 98, 7,246,131,251,143,126,248,238,123, 93, 51,122,221,203, 87, 54, -123,150, 59,217,110, 95,114, 98,119, 48,233,211, 15,255,230,139, 39, 35,123, 52,178,135, 32, 43,189,116, 99,111,103,239,229,187, -255,252,196,139,153,129,163,170, 52,232,228, 36, 35,169, 43, 53, 88, 69,154,117, 87,118, 32, 7,130,243, 9, 35,135,156, 47, 33, -217, 17,165, 11,126, 20,156,140,143, 45,111,196, 60,172,137,180,104,203, 2, 62, 75,145, 5,134, 81,100,100,225,109,163, 77, 86, -125,125,123,143,204,248,241,141, 71, 77, 88, 35,234,158,103, 15,159, 29, 30, 31,246,214, 62,233,152, 27, 99,151,174,124,225,133, - 14, 88,181,113,234, 0, 88,114,161,117,129,163,107, 5,164,220,121,198, 66, 64,197, 82, 99,153, 34,212,134,121, 49, 74,125,114, - 79, 25,156, 66, 81, 90, 46,228, 65,176,117,111, 75,242, 3,198, 71,198, 20,221, 65, 40, 13,230,183,132, 69,131,225, 40,101, 65, -215, 9, 16, 95, 73,180,255, 23,192, 27,249,195,136,149,146,119,245, 3,254, 29,248,200,130, 95,192, 45, 25, 65, 30, 81,250,200, - 70,190,208,130,146, 56,209, 64,250,114,176,218, 63,168,126,123,248,243,215, 63, 62, 63,120,255,214, 9,131,182, 82,127, 31, 77, -143,236,211,159,134, 71, 70, 77,239,233,109,114,174,152,123,179,162,225, 46,136, 93,157,208, 99,191,203,194, 4,128, 58,203,159, -118, 87, 59, 19,215,138,178,164,165, 25,148, 79, 76,252,169, 72, 53,221,208,171,171,208,147,160,240,247,122,240,186,161, 82,154, -136,145, 15, 5,110, 58,140, 81,253,215,154, 91,107, 59,172,167,230, 95,221,188, 70,239, 64, 85,126, 9,228, 40,169, 16,242,165, -111, 11, 5, 66,112, 35,170,201, 60,255,108,235,243,115,103, 72,230,135,201, 54,247, 21, 48,112, 82,213,148, 79,116, 33, 78, 7, - 20,205, 28,178,192, 57, 47, 23, 50, 27, 71,206,125,102,186, 58,101,250, 14,160, 83,172, 84, 77,205, 52,245,229, 20,235,129,188, -177, 7,127,103,200, 31, 26, 93,208,177, 52,117,147,204, 96,165,217, 46,164,197,122,182,192, 88,242,240,166,224, 98, 87,210, 85, -173, 81, 5, 39,127,103,121,131,222,128,170,189, 10, 87,108,116,199, 20, 89, 49,234, 75,116, 14,181,151,214,129,152, 44, 82, 48, -181, 41,128, 78,170,138, 26,231, 17, 55,165,231, 98, 2,251,191, 0, 76, 93, 75,111, 27, 85, 24,245,248,206,203, 30,123,198, 99, - 59,118, 43, 59,145,210,135, 16,136, 70, 72, 8,137, 13, 66, 98,129, 42,117, 95, 21,129,248, 3,236,145, 96,207, 63,224,143,116, -201,134, 85, 91, 80, 85,144, 16, 18, 77,219, 4, 42,146,224, 4,231, 81,123, 60, 47,219,227,225,156,239,218, 18,155, 40, 89,216, -185,115,239,157,239,121,190,115, 54,252, 4, 26,162, 47,139, 94,183,116,201,181,180, 30,120,165, 21, 88,166, 66, 25,178, 26, 71, -163, 40,141,102,121,196,152,116,133, 16,209,129, 45,158, 47, 83, 73,252, 89, 15,170, 35, 37, 51, 77,220, 38, 68,133,115, 56, 25, -131,124,248,134, 84,220, 96,224, 56,216, 66,100,206,162, 65, 27,145,102,139, 24, 6,174,144, 18,231,245,112,160, 73,133,112,179, -107,182, 7, 55,235,215,252,147,203,163,229,134,179, 16,143, 79,190,236, 69,170, 59,185, 48,184, 82,255, 45,250,126, 15,121, 25, -103, 86,149,181,187,181,139, 7, 78,243, 24, 71, 21,101,179,155,253, 91, 97,189,141, 35,199, 35,182,234,237, 73, 74,253, 41,167, -234,148,164, 72, 44,164, 31, 93, 25,132,156, 90, 20,117,109, 22,166, 12, 29,223,110, 70,146,201,157,128, 76,202,118,143, 47,143, -152,117,177,203,107,120,190, 10, 58, 86, 0, 79, 98,155,174,171, 92,167,138,144,197,181,201,180, 94,119, 89,171, 49, 5,172,172, -100,217,134,124,159,176,125,173,214,154,185, 70,181,162, 5,188, 11, 13, 90,210, 19,114, 92,142,226,212,165,146,255,163,100,132, -197,116, 36, 3,176,100,102, 81, 73,118, 36, 90,156,200, 99,105, 89, 11,131, 10,223,120,131, 79,227,228,245,249,155, 64,133,182, -193,238,161,135, 20,210,168,228,101,142,213, 37,139,196,119, 90,135,227, 67,248, 5,196, 41, 29,175,187,192,251,190,146,107, 32, -199, 94,136, 86,248, 59,195, 59,163, 41,226,187,178,219,236,226,184,113,189, 16,110,151,226, 75, 17,176,124,246,209,151,135,103, - 7,231,209,121, 41,132, 89, 88, 12,156, 4,110, 8,118,102, 69,136, 58,145, 42,196, 14,145,199,108,129,253, 28, 93, 28,177,133, - 40,202, 42,190, 23,132,205,246,150,223, 31,118,119, 24,230, 35,102, 90,102,142,213,248,224,246,135, 73,158,118,155, 29,215,169, -229,243,140, 32,232,124,246,243,254,163,227,241,223, 72,228, 79,175, 78,240, 70, 16, 98, 33,220, 65,207,246,159,230, 34,155, 32, - 58, 33,133,104,252, 58, 45,175,123, 52,254, 19, 95,184,219,187,121,255,147, 7,129, 27,196,243,248, 74, 8, 29, 29,133, 60, 70, - 77, 35, 66,161,103,217,196, 49,189, 87,255,188,252,246,139,111, 30,255,246, 8, 49, 93,219, 11,159, 31,255,129, 80,250,237, 91, -239,110,247,119,126,122,254,228, 96,116, 64, 56,141, 82, 91,254,117,118, 80, 57,255, 92,122, 86, 3, 47, 18,220, 79,178,156,217, - 85,170, 63,107,130, 60,152,146,160, 70, 36,149,210,153,163,194,227, 43, 68,250,253,112,128, 29,189,214,234,197,105, 50,100,101, -134,253, 52,153, 29, 37, 79,234, 32, 28, 18,224, 49, 29,167,121,246,106,244, 18, 59,153,137, 30,239,197,244, 50,206, 98,156,238, - 36,153,244,130,254, 52,158, 8,226,187,130,221,198, 29,222,233,236,156,145,184,152,147,200,131,246, 54,140, 90,179,214, 36,204, - 95,184, 81, 83,206,193,226, 18,100, 69,145,113, 12,213, 84,113,182,124,127,111, 80, 49,151, 8,225,203, 36,157,207,231, 11,178, -143,174,187, 80, 34, 44,186, 81,141,170,104, 44, 39, 46, 28, 47,168,134,107,211,154,107,155,238,152, 34,191, 39,229, 26,165,251, -217,213,255, 65,242,214, 68,119,242,147,197,227, 74, 13,159,245, 42, 63,212, 95, 60, 93,124,191,255,227,119,191, 62,236, 89,205, -175,223,187,247,213,222,167,159,191,245,241,221,193, 29,171, 52,126,191, 56,248,229,236, 69, 81,181,246, 90, 67, 26, 42,211, 78, -101,218, 92,114,107,218,250, 27,215,110,192, 89, 22,100,194, 48,224,152,177,141, 4, 79,211,135, 24,176,254,200, 38,109, 69,234, -105,137,109, 61,173,138,211,112,235, 13,219, 67,252, 46,162,204,116,172,233, 50,143,243,104, 60,249, 23,127,245,154,189,215,227, -191, 96,103,176, 82,191,238,195, 1, 8,171, 76, 44, 35,111,120, 51, 9,223,130, 79, 57,155,156, 82, 91, 64,106,212, 26, 84, 14, - 75, 29,214, 67,105,188,241,169,241, 59, 46, 21,108, 29,231,213,181, 56,163,204, 46, 73,123,156,185, 5,197,234,171,170,144,115, - 73,115, 14,103, 5,181,208,115,107,136,108, 76,166,239,165, 18,114, 45,139,201,188,133, 36,187,237,119,166,105,164,216, 99,180, -245, 68,210, 6, 33,201, 60, 26,134,123,187,187,125,250,230,228, 10, 97, 94,158, 90, 18, 43,138,237,224, 49,194, 48,194,120, 38, -121,164, 11,152, 50,254,183,198, 71,174, 5, 67, 54,252,239,255, 9, 64,212,213,244, 52, 17, 69,209,249,108, 59,211, 50,150,148, -106, 91, 74, 98,160, 64,136, 9, 70, 99, 84, 84, 18, 18, 55,254, 2,227, 74,253, 35,198,184,114,233, 63,240, 63,184, 54, 33,110, -116, 69, 32, 46,212,184, 48,109, 20, 41, 45, 12,195,116, 94,167,243,209,105, 61,247,190,130,187,134,164,101,230,189,119,239, 59, -247,235,156,203,249,166, 41,224, 9,171, 58, 80,115, 18, 13, 98,144, 60,102,118,217,179,115,161,118, 73, 23, 63, 48,154,169,229, -164,204,180, 84, 92,194, 97, 89,174,181,206,130,211,198,124,211, 27,121,105, 70,141, 4, 82, 25, 86, 38,146, 94,189,121,253,105, -119, 87, 99, 27, 72, 25,229,210, 76,255, 92, 69, 39,205, 54,146, 94,131, 57, 97,173, 99, 34,222,164,149, 99,189,249, 49,119, 55, - 82,151, 78,177, 48,135,231, 1,100, 34, 41, 53,190,245,240,134, 65, 24,200,176,176, 62,223,108, 84, 22, 61,129,187, 97,236, 9, -143,178,111,154, 14,231,178,190,184, 33, 70,130,233, 92,116,108, 57, 49,163, 77,229, 24,148,206,199,125, 34, 3, 28,252, 47,248, - 32, 68, 61, 64,247, 36, 13,193,213,150, 9,143, 89,113, 64, 67,251, 52, 76,133, 34,197, 54,153,196,176, 82,183,180,156, 66,219, - 5,104,170,206,254, 12,103, 25, 71, 83, 58,143,163, 52, 74,198, 82, 11,141,144, 27,235, 92, 76, 37, 27,222,148,220, 6,190,104, -231, 12,219, 50, 44,219,156, 3, 64,133,195,200, 27, 5,203,180, 1, 5,109,186, 48,168,250,101,112,165,210,100,246, 39,122, 96, - 53, 29,171,136,173,113, 87, 98,117, 19,196, 48, 25,204, 91,203,100,218, 71, 51,166,154,142,243,215, 13,250, 71,194, 59, 10,130, -163,129,127,226, 15,162, 56, 58,143,252,100,146, 30, 15,186,153,146, 16, 33,179,166,198,136, 85,112,162,213, 73,163,188,132,247, -178, 73,253,106,225,206,234,189,175,157,125, 46,252,147, 26, 42,226,253,132,217,135,238,174,220,239,249, 61,156, 92,192, 97,220, -181,197,124,233,249,206,203,131,246,190, 73, 19,148, 6,115,123,229,164,239, 0, 92,194,187,194, 23, 19, 61,249, 36,131, 17,206, - 19,156, 31,150,108, 7,176,215, 27,250,125,255, 88, 68, 60,244,203,203,129,253,237,244,126, 81, 66, 83, 55,176, 77, 42, 57,238, -172, 86,110,112, 21, 71,123,124,243,201,239,126,123,115,249,118,255,252, 24,103,191,234, 84,163, 56,188, 94,107,141,121,228,173, - 84,112, 0,234,227, 36,244, 71,131, 86,189, 21, 70,145, 47,220,178, 85,198,107, 81,205,156, 69, 24, 96,153,142, 81, 26,210, 24, -228,244, 92,184,103,194,197,135,131,159,123,238,192,133, 91,175, 87, 26,167, 76,153,251,183,219, 57,236, 29,222, 88,218,196,125, -128, 39, 15,163, 48, 76,137,116, 97,162, 82,179,124, 66,147,112, 41,246, 7,191,108,229,242,148,200,230, 86,103, 56,229, 2, 21, -252,165, 70, 38, 65, 22,141,168,231,141, 52, 25,145,200,184,153,231, 58, 91,204, 28,166,196, 35,207,200, 49,166,217, 58,172, 24, -238,108,147,238, 66,252, 82,156, 38,150,153,199,179, 97, 23,105, 10, 58, 22,163,120,244,104,227, 33,174, 31, 17,135,212,213,195, -102,226, 5,174,212,156, 13, 35, 33,165,201,137,167,158,154,221, 53,167,224,112,253, 44, 15,139,200,136, 56,136, 38,103,182,214, -174, 41,142,161,184, 3, 53,138,141, 74, 29,183, 99, 74,236,196,255,105,208, 52,166,160,145, 68, 59,218,204, 86,153, 96, 95, 99, - 1, 85,211, 80, 44, 93,177,114,138,101,112, 42,144, 19,241, 50,253,160, 48,126,159, 9, 67,179,253, 73,101,149,162,170,140, 11, -202,199,114,208,173,189,111,127,126,187,247, 97,245, 74,227,221,206,139,237,235,155,110, 28,138, 52, 65,112,120,171,186,178, 92, -172,126,233,119,126,156,181,177, 89,107,206, 85, 88,101, 66, 28, 78,148,231,194,243,195,255,246, 7,167,146,140,147, 39, 16, 85, -127, 24, 48,175,131,186,181,254, 0, 39,166, 31,156,192,167,226, 48,192,155, 39, 92,145,149,253, 84, 64, 9, 82,232, 14,128,143, - 41, 67,152,191, 72,215, 17,123,225,244,202,196,178,164,122,129,177, 99, 59,154, 11, 77,192,127,236,181, 68,181, 51, 39, 69,234, - 46,169, 36,149, 83, 89,171,143,147, 10, 49,167,197,166,178, 49,159, 42,172, 76,164, 46, 71,227, 53,245,194,207,147,117,103,207, -182,159,126,255,243, 77, 78, 99,242, 92, 61, 13, 57,194, 67,152,204, 84,152, 7,236,197,206, 35,132,215, 85,171, 80,154,179, 75, - 97, 72,125,186, 78,177, 76, 77,174,234,140,109, 84,246,228,194, 10, 68, 34,136,199,137,251,122,103,229, 82,246,221, 25,103,246, -120,209, 52,118, 43,220,230,200,216,122, 34, 3,139,139,226,168,157, 43,254, 19,128,168,107,233,109,226, 10,163, 51,227,121,121, -236,201,216, 33,137, 73,131, 28, 92,100, 8, 45, 11, 84,148,166,253, 15, 44,249, 35,172,186,234,170,252, 26,182,136, 5, 43,132, - 4,234,182,139,164,176, 65, 10,137,162,196,196,241,100,198, 30,207,203, 51,230,156,239, 58, 32, 69,222,196,178,238,243,187,231, -123,157,179,178,239,244,208, 23, 69, 74, 51,183,122,157, 85,237,142, 38,218, 2,138,169,113,165, 43,206, 10, 72,166, 88,197,136, -139,237, 23, 6,109,207,241,162,249, 53, 22,215, 22, 97, 9,190,114, 43,158, 37,179, 44,243, 15,239,222,147, 59,133,237, 19, 60, -232, 24, 55, 60,125,161, 58, 40, 69,166,135, 95, 75,201, 47,102,104,171,108,178, 62,232, 13,167,233,181,104,143, 80,213,147, 18, - 81,234,137,147, 0, 40,151,158,194,135,218,238,230,221,147,241, 23,178, 5,177, 15,182, 86,253, 22, 50,207,122, 28, 95,198, 82, - 2, 20,103,113,203, 38,155,160, 66,163,149, 40, 32, 87,100,244,199, 61, 33, 13,214,195, 59,191, 94,205, 46, 1,255,211,156,247, - 7, 48, 51, 41,102,210,111,169, 73,179,104,129,249, 50, 22,172, 47,215,220,174,129,211,222,193,205,100,247, 16,141,171, 84, 31, - 74,101,141, 16,165,147, 21,154,219,200, 22, 38,171,209, 2,190,197,237,183,201, 22,226, 0, 67,186,182, 71,188, 15,227,110,249, -109, 43,240,172,181, 22, 13,189, 50,238, 38,205,185,193,112, 61,110,131,101,185, 77,179,237,153, 77,151,171,230,152, 68, 59,166, -212, 45,195,107, 91, 86, 88, 97,189, 86,148,233, 76, 60, 80,131, 89, 7, 16,176,236,165,106,217, 23,189,177,164,204,146,178,152, -205,179, 56,205,163, 44, 11,147, 36,166,129,168,176,241,166, 97, 68,105,180, 63,248, 29,139, 19,101,209,121,120,158,107, 5,140, - 78,185, 92,120,174,255,112,231,151,211,201, 23,216,217, 48,153,224,160, 7, 78, 48, 97, 50,182,194, 48,143, 78,142,224, 7,112, -136,134,197, 42,221, 37, 21,161, 48, 57,223,109,147,212,179,225,100, 82, 58,169,148, 29,169, 85,198,156, 33,107,137, 84,140,142, -109, 38,132,189, 44, 4,182, 69, 30, 15,118,240,233,254,211,255, 79, 15, 85, 88,146,100,118, 13, 51, 47,242,203,104, 52,142, 71, -240,210,146,124, 62,216, 30, 38,233, 12,192,124, 81,169,162, 52,189, 39,209, 63, 56,194, 56,219, 81, 18,226,119,239,245,238,117, -125,255,120,116,140,147,230, 55,219,155,157,205,112, 26, 62,186,255,168,223,239,159,159, 95, 52,100,113,103, 73,242,247,243,127, -222,188,125,205,130,203,186, 96,161, 58,211, 24, 22,102,113,118,117,166,132, 46,117,106,156, 98,139,108,233, 69, 94,144,181,212, -110,181, 93, 63,240, 58, 73, 58,237,146,162,189,198,240, 4, 87, 74, 99,157,110,182, 28,143, 75,193,164, 52,153,190,155,166, 61, - 75,167,182,105,225,175,215,237,241,148,110,236, 22,139,124,248,211, 16,171, 4, 8,210, 96, 57,178, 6,155,181,127,255,201,225, -241, 17, 53,137,246,254, 0, 24,232, 52,233,212, 2,111, 94, 92, 95,112, 84,117,249,219,207,143,167,243, 89,224,181,169, 33, 91, -107,235,126, 0, 44, 66,133, 16, 38, 78,188,188, 74, 93,211, 38, 60,132,127, 32,165, 53, 59,155,123, 69, 54,249,115,119, 67,239, - 57,218,213, 53, 38,100,108, 15,151,101,158, 69, 99, 65,237,188, 93,170,211, 91,153,107, 67,248,106,117, 37,230,164,240, 59, 62, - 29,209, 89,111,187,228,130,119, 40, 25, 37,184, 94,253,247,123,112,152,206,227,170,163, 10,111,201,153, 83,191,106,125,248, 52, -255,156,143,255,250,247,101, 71,119, 95, 28, 60,187, 29,108,133,121, 22,207,231,152,203, 86,103, 35, 46,179,126,107,171,239,117, -223,143, 62,254,119,117,186,119,235,238,186,229, 45, 52,134,190, 31,236, 60,152,102,201, 36, 9,159, 12, 30,143,147, 80, 33, 0, -225, 71, 89,174,183,215,177,119,135, 39, 71, 56,168, 18,176, 94, 12,122,131,175, 84,230, 3, 32,243,225,178, 4,205, 53,120,123, -189,128, 45,196,138,143, 4, 48,159,118,188, 46, 15,134, 7, 64,129, 66,172, 65,184,166, 26,218,155, 34,213, 11,228,113,195,138, -241,131, 93, 93, 87, 1, 35, 44, 17, 3, 13,134,242, 95,225,239, 82, 32,129,230,222,169,165, 61,168,161, 91, 56, 57, 13, 97,213, -229,205,147,244, 38,190, 48,154,140,128, 0,120,215,249, 92,136,113,224,169, 51,229, 19,200,221,218,190,181, 83,214,176, 36, 54, - 54,143, 98,244,228, 44, 50,132,202, 48,199,177, 9,188, 64, 17,110,107, 18, 70,171,170, 27,175, 94,129, 74,201,165, 98,202,100, -253, 34,149,152, 2,232,218,141,116,159,170,167,252, 33,254,109, 8, 27,216, 55, 1,120,186,150,221, 54,202, 48,106,207,197,115, -181,199,227,164,177,154,184,165, 23,181, 84,144,110, 0, 41, 98,131, 68, 55, 93,116,141, 4,123,224, 33, 88,176,225, 49,120,132, -190, 2, 47,192, 2,137, 74, 85, 37, 72, 42,168,138,226,216,241, 37, 99,207,197,115,239, 57,223,140,217, 88,178, 51,182, 39,191, -255,255,251,206,119, 59,167,181,239,120, 42, 19, 58,245,254, 10,210,238, 72, 53,145,180,247,117, 59,185, 67,254, 25, 44,159,239, - 28, 68,233, 70, 82,198,242, 78,161,152,140,200,178,164, 54,218, 99,210,163, 89,193,172, 81,206, 66, 53, 16,125, 23,132, 63, 61, -225, 11,100, 46,253,200,187, 29, 34,174,228, 38,211,132,212,171,108, 40, 3,203,170,201,153,243, 21,128,154, 82, 66, 33,248, 63, -118,230,117,235,253,208, 22, 61, 25, 14,167, 72,117,212, 64, 66, 81,188, 89, 68,203,166,102,251,255,236, 5,238,137,116,178,156, -217,201,123,180,153,122, 46,165, 12,252,198,213, 94, 40, 83,145,255,241,248, 96, 82,203, 65,189,137,131,230,205,176,149,162, 56, - 8, 3,202,220, 22,155, 85,232,119, 88,130,206, 59,169,102,214,149,174, 71,113,149,230,117,178, 43,119,105, 37,217, 66,172,143, -106, 24, 64, 97,138, 65, 81,116,165, 41,170, 0,224, 27, 68,235, 68,226,166,129,240,165,235,192,160,195,120,244,196,239, 83, 39, -168, 43,212, 93, 76,242,200, 0, 33, 54, 2,251,145,217,149, 82, 53,100,127, 93, 17,179, 86,108,131,215,224,177,239,106,174,171, - 13, 7,186,107,235,174,163, 89,112, 15,166,226,185,154, 97,170, 22,190, 2,214, 5,206,132,242,219,100,231,209, 13,149,170,125, -176, 99, 54, 7, 88, 42, 21,248, 61, 15,178,109,144,135, 0, 8,127, 47,254, 93,167,210,107,164,214,186, 78, 21,233,123,135,247, -177,239,103,219,153,209,179, 70,214, 8,219, 17,214,156,119,218,213,238, 29, 61, 92,132, 51, 3,193,165,240,109,225, 86, 9,222, -201,106,132,165, 54, 97,100,129, 61,129, 76, 57,221,167,145, 87,146,188,158,204,103,169, 85,183,209, 67,151,242, 92, 75, 65,164, -176,232, 1, 95,210,115, 1,195,255, 91, 94, 2,199,219,166,219,228,190, 69,142, 91,207, 68,236, 16,150,154, 52,156, 86, 31,230, -158, 25, 73,126, 64,113,228,143,225,205,214,219, 85, 37,176, 42,203,147,231,103, 47,222,205,222, 33,224,189,190, 89,124,255,205, - 15,175,255,122,101, 81,176, 41,154, 45,230,139,197, 53, 48, 71, 67, 23,124,232, 30, 62,249,228,211, 63,254,252, 29,127, 5, 32, -128,165, 46,132, 44,243,216, 63,158,109,174,176,144,142,233,176,107,162,174,126,250,238,231,127, 46,207, 41, 12,192,122,104, 14, -224,140, 29,139, 43, 61,199, 3,178,249,250,244,171, 56,221,193,236,238,178, 84,149,130, 89, 71,130,140,201,104,226, 57, 3, 4, -224,165, 8, 95, 97, 87,108,146,224,192, 30, 78, 87, 83, 68, 60,211,245,213,217,163, 47,206,167, 23, 10,171, 92,140,105, 46,166, -111,147,116,135,117, 92,110, 87,128,105,107,202, 67,178,101, 80, 78,123, 63,140,195,121, 48, 23, 62,244,194,225,152,110,216, 82, -165,118,213,178, 83,220,241, 39, 0, 15,183,188, 91,240,244,186,162,140, 71, 39,225,110,153,102,212, 20,253,252,196, 55,238, 58, -180,239,105, 10,239, 31,175,103,249, 46, 86, 90,174,203,150, 60,178,229,170,108, 81,124,203,108, 72, 99,160, 11,109,228, 71, 7, -157, 59,163,206,192, 38,138,239, 73,149, 85,217,207, 55,213,123, 38, 90, 28, 36, 75, 33,210,127,227, 95,188, 76, 95,111,244, 90, -137,127,252,237,215,203,237,242,151,179,111, 31, 31, 78,174,227, 16,223,151,101,153,223,247,175,131, 85, 4,108, 93,150, 15,188, -113,152,236,206,183,239,223, 39,241,179,219, 79,128, 90,162, 36,254,242,227,207,182, 73, 52,191,153, 3,147, 81,182,147, 20,111, - 82,202, 21, 62, 40,192,240,241,112,156, 21,133, 80,118, 86, 87,171,203,161, 11, 19,148,184,150, 11,124,192, 24,200,180, 16, 6, - 5,241, 6,158,184,169, 15,197,121, 12,123,177, 12, 87,113, 30,137, 69,238, 72,231, 11,179,228,167,119,159,190,189,186, 16,133, -131,186,157,202,148,100,181,164, 74,171,227,209,201,120,120,148, 23, 69,223,114,132,127,176, 19,196,193,233,253,167,171,205,186, -225, 70,213, 72, 90,199,249,216, 82, 88,170,132, 60,159, 25, 88, 96, 35,223,241,147,156,138,128, 88,164,129, 61,196,209, 96,113, -149,103, 90,243, 7,126,195, 12,102,155,118, 94,151,158, 55,100,154, 58,227, 1,193, 93,121,166, 59,234,251, 64, 24,216,203, 77, - 86, 65,218, 86,100,137, 69, 34, 10,152,176,145,143,166, 20,118,145,214,162,237, 5, 8, 8, 31,216, 12, 74,201, 48, 80,203, 92, -179,231, 49,227,239,245, 65, 0,162,174,101,183,109, 35,138,142,248,126,137,146, 31, 98, 12,229, 97, 57,109, 12, 56,173, 54, 65, -128, 34, 64, 22, 70, 55, 45, 16, 32, 64,183,253,174,126, 71, 23,221, 21, 93,180,235, 44,210,160, 40,210, 85,147, 58,142,171, 56, -150,100, 81,162, 40,141, 36,138, 61,231,146,110,224,149, 1,154, 30,146,119,238,107,206, 61,231,127,255, 94,247,107,212, 39,154, -155,106, 32, 77, 85, 5, 28, 60,143,103, 11,168,136, 64,198,205,186,130,140, 18, 72,131,204, 61,172,228,198, 97,109, 21,116, 50, -244, 56, 36, 22,184, 17,162,168,199,141,148,227,213,132,120,233,122,142,244,176, 19,221,250,247,250,162, 98, 81, 45,168, 45,199, -102,189,235, 4, 48, 28,124,158,195,228,136, 44,204, 12,138,130,105, 89,229,228,130, 16,129,231,170, 7, 47, 71,213, 38, 7, 36, -132,155, 23,182,190, 46,244,151,119,251,184, 42, 39, 87, 81,236, 83, 90, 83,203,177,181,179, 94,105, 89,188,155,243,152,151, 40, -218, 56,138, 29,155, 7,176,170,166,186,196,166, 26, 33, 75,133, 35, 36, 79,136, 80,140, 45,245,124, 83, 20, 21,123, 39,220,153, -170,240,136,138,119,196,211,181,227,200, 12,241, 75,217, 68, 13,230,152, 62,189,185,217,244, 45,215, 71, 57,107, 89,162,194,233, -218, 13,184,105,120,124, 7,235, 48,101,130,133,153,190,208,153, 81,238,212, 40, 72, 56,128, 42,140,236, 32, 53, 61,221,182, 68, -130,239,146, 18,197,178,106, 62, 34, 70, 67, 75,213, 59,175,144,201,153, 6, 81, 37,184,191,225,217,130, 92,166, 1,201, 52,167, -148,204, 21,153, 51,137,118, 77, 94,131,181, 5,161, 25, 70, 8, 0, 44, 41, 96,103,210, 76, 68, 33, 98,145,242,222,144, 76,159, - 16, 35,120,142,124,186,200,198,217,236,125, 58,152, 46,211,221,160,221,246, 99,100,157,139, 98,153,173,230,221,248, 54,214, 49, - 72, 47,132,175, 87, 57,142,139, 13,112,208,238,222, 77,122,249,130, 35, 60, 27,169,101,132,199,134,162, 54, 20,163,193,163,154, - 86, 28, 52, 41,169, 42, 52,203, 68,158,177,237, 48,171, 7,207, 68, 77, 11, 70,130,143, 8,231,139,181,105,173, 17, 34,241, 48, - 34,198,100,146, 85,106,145, 57,182,135, 96,223,237,220, 65,202,182,219,108,227,143,142,187,199,248,239,212,183,154, 93, 85,132, -101,122,179,254,230,201,183, 47,255,122,249,176,119,178, 92,173,210,241, 4,183, 26,205, 70,204,199,203, 98,191,189,143,189,141, - 40, 50, 95,206, 38,249,245,239,175, 94,196, 97, 12,183,139,114,219,119,189, 4,105,126, 54,185,154, 94, 62,255,234,187,243,225, -249,110,188,151,102, 19, 56,217,159, 94,252,216,242, 91,227,233,112, 47, 78,136,173, 52,204, 8,165, 23,119, 53, 85, 64, 98, 47, -126,243,241,239,163,228,254, 36, 27, 91,108,217,119, 56, 49,159,167,240, 5,168, 74,167, 72, 20, 40, 26,158, 24,242,102,154, 94, -211,115, 92,148,225,211,124, 2, 95,118,208,190,117,124,251,225,135,209, 32, 10,155,100, 47,160,142, 77,185, 90,233,238,238,193, -108,145, 69, 48,163, 82,177,141,190,200, 43, 88,116,255,176,127,118,245, 15, 12,123, 43,186,105, 98, 27,196,146, 33, 20,145,227, -143,213,173, 70, 88,189,158,126,160, 97, 88,132,243,247, 15,246,155,159, 5,106,152,110,181, 94,164, 67,157, 77,101,174, 89,112, - 93,213, 12,254, 13,168,142,244, 33, 74,126, 56,107, 46,152,247,157, 80, 97, 13,134,167, 58, 45,149,116, 84, 20,169,200,248, 68, -167, 85, 40, 85,171, 64,155, 42,178,120,217, 47,254,248,213,157, 63,115,221,141,163, 31,254,248,249,183,139,215,223, 63, 56,125, -126,255,241,229, 34, 39,216,129,167,160,228, 36,240, 29, 55,240,131, 25, 18, 34, 60,209, 78,239,215,247,175, 47,243,193,201, 94, -239,244,243,199,131,116,132,154,254,237,224, 12, 25,192,215,143, 78,151, 75,141,164,219, 32,221,136, 3,207, 78,248, 79,161, 81, - 60,177, 83,103, 84, 72,144,242, 48,185, 55,156, 93, 17,144,190,217,238, 4, 49,114,255,164,149,224,227,134,142, 55, 95,230, 20, -212,149, 67,187, 53,231,150, 11, 4,108,138,204, 75, 24, 70,237,248,230,242,173,186, 65,136,203,240,141, 91, 54,170,148, 79, 78, -202,136,115,112, 16, 86,109, 97,143, 32, 62,117,173,159,246, 79,207, 63,158,173, 89,177,113, 72,138,163, 92, 84,100, 53,233, 67, - 12, 14,114, 63,123,244,236,221,240,156, 99, 74,172,135,232,188,246,227,100,169, 23, 54,158,129,140,170,126,139,115,239,219, 48, - 12, 3, 63,252,162,119,210,187,119,132, 36,118, 52, 25,219,228,235, 38, 56, 59,157,167, 55,212,241, 4, 87, 49, 79, 42,106, 76, - 35,143,118,109,138, 41, 71, 94,120, 51, 45,193,160,130,123, 35,103, 69,192, 32, 40, 81,242,192,178,110,225,151,117, 23,190,209, -248, 79, 0,154,174,166,183,113, 42,138,218,126,137,237, 58,142,157,198, 77,218, 50,109,153, 97, 58,154, 41, 20,144,102, 24, 36, - 4, 69, 8, 33, 86,140,216, 34, 24,193,130, 37,252, 4,254, 4, 75,126, 0, 27, 22,236, 16,235,145,216, 32, 62, 6,166, 72,101, -104,213, 64, 51,105,155,182,147,164, 73,252, 17,251,217,230,220,251, 50,187, 40,145,147,216,239,221,207,119,238, 57,115,125, 15, - 70,194,204, 27, 55,204, 11,102,205,149,114,158,225,242,225,130,227, 60, 86,163, 28,107,193, 11, 97, 66,220,129,119,111,188,133, -109,215, 31,245,120, 58,145, 88, 92,148, 78,130,100,238, 8, 22,198,164, 84, 14, 22, 14,215,223,112,155,216,235, 54,157,190, 86, - 25, 9,147, 43, 93, 79, 53,211, 68, 44, 63, 25, 28,193,236,156,251,164,154,242,179, 89, 50,159,175,226,202, 82, 77, 90, 81, 65, -196,188, 52,248,158,173, 43,219,176, 76,124,140,181,199,166,203,168,237,155,146, 88, 26, 57, 83,193, 18, 78,114,107,237,213,222, -160,203, 71,152,197,157,205,215, 79, 7,167,172,148,198, 50, 49, 52,206,146, 99,221,155,181,165,186, 67,198, 6,159,162,212,202, -217,144,170,116, 68, 41, 9, 22,105,168,121,217, 10,159,164, 57,122,197, 22,216, 63,102, 85, 95,128,121, 85,116,203,196,251,248, -121,170,160,103,169, 70, 25,111,170,150,137,180,201, 80,132,228,164, 5, 90,146, 88,173,100,205,188,162,204, 50, 61,205, 50,199, - 50,239,189,255,222,103, 31,125,178,243,198,155,179,180, 56, 56, 60,142, 99, 84,160, 21,166,147, 86,139,205, 89, 7,131,118, 24, -120, 43, 16, 81,240, 47,104,104,135, 42, 26,161,234, 56,106, 22,230, 26, 15,169, 26,117, 91,184,216, 14, 22, 99,170,241, 30, 2, - 19,145,195, 17, 88,147,177, 78,134,105,209, 60, 58,163, 66, 21,105, 35, 99,227,116,147, 57, 2, 69, 97,233,153,161,157,167,163, -147,232,252,224,226, 0,161,110,205, 95,195, 93, 6,245,224, 50, 25, 19,109, 83,158, 86,153,123,121,201, 15,234,166,143,141, 49, -140, 6, 48,134, 90,181,230,218,222,253,119, 63,253,243,240,119, 24,164, 32, 22,102,214,119,212,244,153,140,113,249, 36, 30,163, -206,101,138, 92, 1,163,162, 14, 30,205,133, 82,131, 50, 73, 97,212, 81,221,241, 92,146,233,160, 70,103, 78, 30,193, 89,116,131, -141,246,134,148,178,115,252,143, 96,115,133, 35,130,155,134,223,231, 25,110,146, 68,104, 56, 13, 44,109,167,219,137,103,211,163, -179, 78,148, 76,254, 59,233,188,114,227,246,249,160,207, 7,232, 36, 58,230,121,126, 33, 11,100,136, 6, 65, 66, 23,190,252,240, -139,135,251,191,194,168, 86, 23,159,107, 47,182,123, 23,199, 72, 71, 30,119,247, 80,148, 76,194, 49,129,190,100, 44,180,202,221, -205, 59, 40,233,112, 73,221,166, 39,138, 36, 17,169, 98,224, 6, 48, 87, 68, 97,131, 39,233,115,153, 51,155,105, 73,173,121, 67, - 95, 15, 54,112, 11, 9,201,164,104,196,187,199,244, 53,146,198, 82, 44,248,163,173, 43, 55, 95,218,216,126,242,180, 55,138, 70, -136,115,105,150, 92, 95,221,100, 58,132,226,131,215,238, 61,234, 60, 10,234, 75,253,203,126, 74,105,163,177, 96, 59,184, 65,210, -178,224,253,140, 80,100, 85,108,153,205,184,175, 82, 89,241,218, 97, 58, 29,135,195, 73, 50,150, 68,159, 34, 5,205, 79, 34,216, - 19,149,224,237,182,231,221,242,225,223, 9,247, 79,242,103,229, 51, 44, 93,201,217,122, 57, 79,219, 21, 51, 31,235,112, 8, 62, -115,165,158,204, 48,253,246,155,159, 30,254,176,155,252,184, 55,125,176, 31,224,146, 91,215,137, 11, 62,231,161,247,156, 91, 20, -102,133, 52,158, 70,177,246, 93,250,224,151,242,143,203,163,149, 70,227,224,236,240,171,159,191, 95, 93, 88,254,250,237,207, 47, -101, 18,229,210,183,173,126,239,162, 26,233,217, 68, 51, 83, 49, 24, 93, 36,101, 22,248,139, 75,181, 6,170,200,223,134,251, 71, - 81,244,241,139, 59, 79,134, 39,116,118,106, 17, 33,249,191,103, 93,196, 87, 86,157,160,134, 23,105,107,104, 74, 30, 84, 68, 60, -228,169,176, 58,174,229, 94,107, 95, 67,184, 13,179, 48,140, 67,152, 54,233,174, 20, 26,211, 76,153, 45,248,250,233,176,208,231, -192, 65,175,230,191,179,189,243,119,247, 49, 30, 5, 83,246,227,239, 87, 25, 87, 78, 56,213,101,175,149, 18,227,158, 84,204, 48, -120,224, 97, 60,193,235,101,162, 12,138,225,223,146, 52,222, 59,250, 11,123, 82,240,148, 26, 9,131, 81,204, 70,154, 40,104,186, - 30, 25, 91, 41, 59,167,135,138,118,119, 78, 36,167, 11, 36,181, 68,131,106,187,142,233,172,183,158, 31,132, 79,145,145,108,173, -223, 68,146,190,210, 88,105, 46,183, 94,190,186,189,187,191, 43,148,170,157, 58, 93, 85,109, 77,182, 73,223,106,160, 52, 41,149, - 68, 90, 89, 32,168, 76,146, 41,246, 88,193, 55,160, 32, 64, 40, 70,145, 72, 53,221,214, 36, 29, 83,175, 34, 47,140, 57,130,149, -120, 85,155, 78, 19,241,230,127, 1,136,186,150,222, 54,202, 40,234,241,140, 61, 47,207,140,227, 87,156, 2,117,172,184, 66,128, -104,137,120,137, 74,176,160, 80,196,138, 77,203,138, 29, 82,133, 4, 82, 55, 21,191,128, 53, 63,131, 29, 27,214, 44,168, 88, 20, - 4, 66, 16, 33, 4,164,137, 82,199,100, 28, 63,226,177,199,243,158,177, 57,247,142,213,100, 23,201,150, 53,243,221,239,222,115, -190,239,222,115, 54,248, 93,164, 62,238, 75,215, 39, 68, 36, 8, 8, 0, 75,156, 70,151, 54,128,236,228,151,146, 19,241,148, 85, -198, 74,253,233,241,196, 5,127, 36,199,109,106,201,164,224, 43, 22,114, 83, 56,161,200, 71, 69,164,202,132,101, 0,245, 6, 70, -198, 62,167, 41,167,192, 37, 85, 7, 86,145,196, 51,171, 52, 53, 35, 32, 23,208,145, 11,133,220,234,178,229,148, 77, 30, 12,213, -226, 11,202, 44,159,221,229,153,102,106, 1,198,218,140,249,214, 27,207,171, 42, 58,133,168,176, 89, 60,252, 97,193,240, 43,139, -208, 5, 27,160,251, 75,242,156,150,206,231, 35,240, 53, 58,223, 22,197, 92,243, 33,215,136,247, 99,207,245,157,140, 65,122,150, -155,111,225, 1,169,153,145, 6, 2,128, 49,179,117, 66, 80,154,139,163,170, 73, 85,171, 4, 2,131, 5, 46,151,133,138, 38, 42, - 37,214, 89,229, 57,239, 50, 29, 72,172,241, 31, 72, 91,156,114, 31, 22, 25, 97,179,177,110, 81,210,229, 50,160,180,161, 42,149, - 10,201,177,222,255,236,211,119,222,122,245,209,207, 63,110,153,242, 39,119, 63,110,152,250,209,241, 17, 16, 24,130, 66,225,203, -219, 13,200, 98, 58, 86,202,231, 34,168,112,228, 66, 65, 60, 78,202,151,231,116,122,130,236, 47, 51,111,144,144, 11, 8,174,224, -179,186, 42, 89,134,100,234, 34,249, 56,137, 69,230, 36,204,207, 41, 65,179,102, 96, 9,165, 92,166, 99, 29,153,202, 20,222,147, - 8, 34,131, 5, 83,145,145,164,162, 38, 22,116,164, 58, 15,136,126, 48, 25,224, 5,238,214,187,157,218,174,166,232,200, 53,143, -237,127,237,185,253,222,245,219,139, 96, 70,109,100,162, 56, 93, 78, 46, 92, 7,145,231,135,196,216,176,109,130, 40, 8, 18,239, -106,173, 67,170,106,100,238,168, 84, 84, 51,138, 66,153, 2, 38,238,182,246, 8,234,114,223, 61,138, 83,219,186, 34,235,178,239, -121,237,218, 51,115,223,137,179,192, 13,156,209,124,136, 44, 31,167, 33,202, 16, 54,149,161, 26,126, 76,243,129,205, 74,147,123, - 52, 69, 10, 69,186,143,166,235, 77,132, 56,176, 57,130,229,254,151, 15,156,153, 51, 30, 14, 17, 96,231,142, 61,153,141,177, 55, -170,122,245,218, 78, 15,249,247,215,195, 95, 18, 34,182, 2,216,244,145,253, 24,132, 0, 9, 23,175, 28,228, 18,117,200, 11,150, -228, 31, 85, 88,247,167,167, 43,182,162, 37,239, 58, 73, 10, 3,111,199,186, 66,201,177,176,182, 47, 6, 55, 95,188,121, 58,238, -243,130,172,235, 86,139, 58, 25,178, 12,175,165,215,234,197, 89,242,230,243,175, 61,177, 79,184, 37, 14, 57, 54, 13,146,112, 75, -171,150,197,242,193,201,193, 60, 88,132,177,191,223,221, 31,206,206, 1,249,169,255, 50,242,158,140, 6, 13,163,190,244, 23, 52, -252,203,230,132,219,102, 75, 41,201, 65,228, 81, 3,146,106,225,147,224,160,172, 55, 75,106, 61, 65, 28,212,180, 45, 77,214,118, -155, 93, 55,152,243, 48,132,216,176,218, 73, 76, 38,201, 47, 27,149,218, 43,181,194,212, 17, 8, 51,177, 74,209, 38,218,243,235, -195, 92,126,129, 71, 53,158,218, 80, 96, 23,201, 37, 20,165,111,190,251,163,239, 39, 86,203, 56, 75,226,147,179,201, 78,127,106, - 62, 87, 47, 60, 91,167,123,215, 36,101,216,174, 16,108,127,212, 63,250,246,183,213,172,247,123, 20,129, 38, 54,138,229,175, 15, -190, 63,116, 6, 15,110,220,105,234,166,237, 76,197,184,208, 17,187, 31,222,251,226,250, 87, 31,221,248,252,246, 11,119,223,221, -111,191,157,253,189,248,107,248,167,147, 44, 95,170,118, 31,158,253, 99,251,255, 53,138, 86, 93,214,144, 10,106,102,213,143,201, -125,155, 16,141, 80,220,104, 32,178, 23, 15, 34, 42,136,194, 60, 17, 97, 33, 80,246,102,222,108,186,152,210,168, 35, 9, 84,137, -249, 52, 43,211, 17,178,162,174,129, 42,133,238,181,237, 30,169,230,133,126,103,187,211, 31,157,118,219,123,227,197, 40, 23, 42, - 52,212,138, 86, 34,159, 22,199,189, 80,241,235,164, 59,147,230, 2, 0,124,187, 75,249, 7, 40,176,105,238, 76,150, 35, 98,224, -212,183, 93,206,211,160,200,122, 65,164, 85,153,198, 91,228, 48, 21, 92,109,117,125, 18,183,161,241,165, 55,246, 94,183,103, 54, - 31,175, 18, 54, 35,103,143,138,169,200,138, 31,122,235,226,218,241, 22,248,250,233,112,112,235,253, 91, 15,127,250, 97,225,186, -186, 86,161,139, 22,170, 25,185, 79, 67, 62, 39,155, 97,173,153,227,174, 80, 33, 12,150, 51, 65,153, 41,147,107,244, 7,199,231, -135,185,196,216, 50,162,194,230,129, 16, 11, 52, 26,141,212,202,190, 64,171, 18,176,127,154, 82,143,184, 32,252, 47, 0, 83, 87, -211,219, 70, 21, 69,103,198, 51,254,254,110,140,155, 73, 98, 82, 44, 69, 32, 33, 65,139,144, 64,170, 34,177, 66, 66,106, 65,170, -132, 4, 44,168, 88,176, 0, 9,137, 5, 43,132,196,166,172, 88,116,131,196,143, 96, 83,248, 7, 32,104, 11,162, 16,160, 78,105, -155,186, 4,181,174,227,248, 35, 30,219,227,153,121,246,112,206,125, 65,176, 77, 50,206,155,231,119, 63,206,125,247,158,115,236, -223,149, 84, 8,254, 63,149,138,112, 68,133,135,255, 42, 54,166,142, 1,210,164,169, 25,204,244,171,218,112,238,200,188,212, 98, - 9, 35,200, 37, 1,103,144,173, 83,246, 58, 16,206, 7, 74,217, 46, 73,196,147,178,146, 74, 18,158,149,226,202,104, 54,136, 69, - 33, 1,123, 7,135,235,171, 25,158,210, 50,178,194,245, 24, 74,125,143,248, 2, 6, 35,180,195,236, 48,131,203,114,156, 20,188, - 37, 62, 21,184,137, 87,172, 34,182,139, 35,171, 20,239,123,241, 77,231,156,172, 72,126,115, 8,130,234, 81,139,133,227,164,177, - 76, 0, 14,184, 27, 36,227,228,221, 94,232, 49, 99, 41,190,197,154,158,242,184, 51,169,152, 41,224,193, 84, 50, 39,234, 45, 4, -119,162,169, 29,154,199,212, 11, 5,101,168,124, 54, 93, 62, 65, 51,204,166,224,223,217,195,224, 56,114,179,202, 47,148, 77,236, -142,131,229, 81,253, 49,237, 24,142, 99,243, 66, 53,109, 21,241,112,214,201,103,141, 82, 46,174, 85, 18,197,188, 81, 44, 36, 63, -252,224,253,207, 47, 95,254,238,218, 79, 55,118,126,223,223,191,255,218,249, 87,106,149,252,205,221,150,222, 88, 70,234, 37, 13, - 58,109,219,128, 8, 76, 46, 84, 28, 4,134, 15,255, 17,152,179, 80,232,216, 89,181, 49,146,192, 32, 14, 47, 72, 82, 44,254, 9, - 95,107,108, 41,101,193,137,249,115, 90,165,193,161, 22,169,238,104, 61, 54,206,210, 37,120, 15,156,114, 10, 8,176, 88, 88, 38, -145, 73, 59,197, 44,227, 65, 62,135, 53,235, 91, 4,134, 0,101,197,115, 43,152, 89, 10, 40,152,220,141,177,177,215,223,155,132, - 64,208,166, 91,113,175,221,249,222,243, 39, 44,163, 71,115, 28,209,139, 47,189,253,245,143, 87,176,254,147,213,134,212,217, 88, - 21, 60,242,135, 11,146, 51,103,150, 66,181,200,228,215, 50,113,254,198,211,163, 34,114,235, 76,105,226,123, 60, 66,106,121,238, -245,115,157, 61, 64, 49,133,159,104,254, 90, 28,147, 9,172,194,102,192, 70, 78,192, 6, 53, 18,204, 81, 62, 45, 34,124,206,103, - 72, 79, 31, 84,114,181,237,167,183,111, 63,188,101,139,172,218,159,191,180,174,239, 92, 61,179,245,124,119,216,105,186, 91,176, -251, 49, 53, 26,167,221, 97,183,148, 43,241, 74, 31,223, 47, 14,184,112,112,123, 36,227,141,214, 87, 30, 31,122,196,203,193, 50, -168,229,106, 50,199, 88, 10, 2,228,140,120,205,147, 42, 34,213, 23,108,105,177,140,144,112,156,125,242,236, 96,220,247,102, 30, -144,205,106,213, 61,229, 62,209,168, 55,250,195, 3,156,187,253, 94, 27,177, 4, 72, 2, 7,204,161,182,165, 5,243,126,115,251, -194,206,189, 63,176,105,156, 4, 76, 16,159,225,245, 87,171,107,216,177,103,155,103,130, 48, 66,172,130, 1,107, 13, 79,210,207, -197,102,223, 59,156, 6,190,149, 16,238, 29, 21,224,191,187,149, 58, 37, 33,145, 78, 57, 41,108,160, 31,206,164, 77,128,233, 36, - 66,111, 49, 93,198,175,214,106, 27,163,233,240,153,114,161,122,186, 98,244, 70, 49,176, 36, 25, 71, 22,210, 66, 34,105,177,128, - 83,161, 26,182,116,161,230,152, 7, 26, 15,231, 83,173, 86,247,202,175,251,128, 93, 74, 69, 8, 71, 79,173,151, 27,245, 66, 18, -103, 8, 89, 84, 90,166,243, 22,182,241,195,223,187, 95,126,251,243,213,187,161,105,247,194,134, 23,249,153, 68,162, 55,241, 62, -187,241,205, 90,102,245,139,151,223,187,213,185,151,156, 21,223,248,228,146,251,233,115,230, 40,125,253,163,155,191,125,124,187, -253,213,193,134,123,106,243,157,211, 47, 84, 94,237,255,213, 82,246, 60, 86,198,206,240, 46, 14,221,139,245, 38, 86, 54,152, 30, -153, 90,215, 81, 59, 28,209,191, 93, 72, 65, 73, 11,105,193,168,109,142, 53, 49, 12,224,239,220,234,186,144, 32,153,198,191,157, - 32,154,218,100, 41,125,144,243, 32, 88, 61,225,182, 15,238,195,132, 15,199,131,209,116,208, 27,247,164, 6,192, 19,133,109,156, - 71,193,120, 54, 50, 68,186,153, 85,101,234,157, 8,221,158, 97, 62, 86,168,115,202,157,204,216, 99,161,132,228, 26, 74,153, 50, -253, 76,172,103, 98, 12,241, 81,100, 12,229, 16, 44,124, 55, 27,201, 72,104,241, 96,240, 80,247,212,172, 20,120,175,238, 5,222, -100, 62, 61,154,140, 97,115,192,190,192, 40,165, 82,117,179,177,249,214,165,119,187,187,157, 65,175, 55,143,194,153, 63, 69,122, -180,181,182,245,232,176,195, 34, 3, 75,157, 22, 89,166,133,105, 0, 24, 2,201,113,179,222,236,142, 30, 33,217,104, 31,180, 73, -179,200, 38, 11, 33, 98,210,186,191,134,197, 4, 72, 8, 19,225, 9, 54,176, 51,203, 80,107,169,255, 35, 0, 85,215,243,219, 54, - 25,134,253, 37,182,227, 56,182, 99, 59, 63,218, 77, 73, 96,168, 27,234,210,173,148, 78, 72,221,232, 1, 52,109,104,234, 16,218, - 14,136, 29,144, 42,237,194, 95,192,206, 92,198, 78,136, 11, 7,184, 32,224,134, 56, 48, 64, 28, 56, 32, 5, 16,104, 8,216, 58, - 74,164,137,117, 52,165, 67, 77,154,164,177,157,216,142, 99,123,239,251,186,157,134, 84, 85, 85,100, 85,249, 28,231,249,158,231, -253,222,247,121, 18,124, 63, 24,111,125,194,119, 82,151, 11, 0,148,255,175,200, 71,143, 47,120,108, 88,140, 46,190,188,212,119, -118,225,183,143, 70, 41, 1,172, 57, 43, 98,154, 7,219, 39,153,216,179, 15,119, 89, 83,181,149,179, 23,239,222,187, 3,170,235, - 96, 51,193,106, 21,104, 28,138,224, 72, 39,106,154,178,197,227,227,149,147, 93,171, 67,216, 58,193,162, 63,158, 94, 2, 76,163, - 15, 3,151, 68, 23,134,104,215,137,117, 52, 66, 16,134, 94,160, 26,118, 79,146,254,164, 80, 8,192,230, 16,240,229, 68,109, 1, -190,114, 92,106,223, 84, 30, 81, 27, 71, 56,241, 5, 25, 51,118, 3, 50,122,160,248,112, 46, 30,142, 93, 67, 53,247, 70,253,228, -133, 3,187, 54,252,106,228, 68,165,108, 78, 33,178,100,226,188, 46, 78,168,211, 40, 12, 24, 0,238,200,230, 6,195,120,232, 68, - 3, 39,116,156,104, 56,138, 92, 23,189, 8,128,104,199, 56,237,134,234, 82, 20,129,230,199,178, 36, 92,122,245,242,242,139,231, - 27, 63,221,145, 37,243,205, 43,171, 31,124,248,113, 16, 9, 81, 44,222,223,216,222,126,216,189,186,250,150,239,134, 63,223,250, -131, 67, 93, 6, 0, 29,165, 35, 26,127,230,176,204, 66,189, 1, 41, 13,187, 42, 89, 78, 98, 34,214,223, 89, 70, 0,169,148, 6, -233, 0, 75, 9,176,172,159, 98, 33,163,227, 92, 94,194, 73, 59, 42,136, 0,234,227,212, 56,226,181,156, 77,227,193,172, 44,228, -100, 30, 0, 29,228, 72, 14,233, 59,202, 5, 46, 25, 19,139,144, 11, 39,105, 68,113,136,211, 91,254, 56, 21,194,110,193, 98,135, -249,157, 97, 39,199, 36, 51, 87,180, 3, 43,199,171,176,121, 83,150, 5,158, 99,195,106, 47,157,185,252, 67,179, 81,210,202,245, -106, 29,168, 49, 44,220, 80, 75,240, 17,193,238, 59, 38,187, 80,228, 23, 60, 63,244, 71, 60,237,253,182,103, 93, 56,181, 50, 14, - 0,224, 60,120,148,215,111,175, 23,181,169,174,221,201,163, 97, 92, 68,145,188,252,180, 89,177,157, 30, 21,226,163,145,239, 0, -123, 0,170, 1,215,167,200,191, 8, 32, 84,147,243,160,230,215, 91,127,122,190,123,118,254,252,203,207, 45, 55,238, 54, 78,215, -151,154,173,102, 20, 5,176,175,143,124,219, 80,204,171,231, 86,215,254, 89, 95,198,233,208,109, 96,127,148,186,128,150, 68, 24, - 12,226,217,237,193, 14, 60, 51, 64,138, 45,207,162,142, 67, 76, 5, 89, 56, 50, 63, 28,143,122,131, 94, 16, 77,158,153, 62, 2, - 76, 31,125, 99,118, 54,218,131,238, 86,183, 53,165,151,225,255,119, 7, 93, 62, 98,187,253,246,192,219, 75,100,238,210,179, 75, - 32, 53, 74,249, 34,205,221,216,176,228,230,230, 61, 67,213,113, 66, 36,158,204,213,230, 64,173,251,190,223,183,251, 23, 78,157, - 91,123,176,102, 42, 6, 96, 13,178, 48, 57, 63,193,206,125, 97,182, 50,171, 72, 57,219,181, 50, 40,189, 4, 85, 82, 10, 90,241, -181, 23, 46,222,222,128,139,117,224, 64, 58,181, 21,157,168,214, 31,246,254, 43,105, 37,208, 52,176,101, 0, 43,179,157, 14,199, -103,235,130, 80,124,190,192,245, 44, 54,246,177,165, 59,201, 17,100,148,227,144,116,109, 83,160,248,129,103, 33,141,234,209,172, -229,205,198,125, 61, 35, 44, 30,206, 63, 93,208, 74, 74,214,144, 36, 35, 7, 84, 21, 8,187,200,121,105,238,199,214,111,239,125, -247,249, 23,183,254, 30, 56,162, 38,228,197, 60, 99, 71, 21,181,184, 56, 61,115,253,215,175,154,253, 7,215,230,175,164, 97,115, -115,216, 27,159,188,195,205,114,223, 31,253,229,221,247,175, 47,186, 39,231, 79,207, 77,250,254,219,159,222,248,236,163,111, 95, -127,233,149,153, 99,103, 6,155,127, 9,169,240,155,127,127,111,185,214, 74,101, 97, 20,208,228, 35, 21, 43,224, 38,152,170,110, -185, 54,188, 75, 93, 49,158, 42, 85,225,190,193, 31,240,185, 0, 26,216,158,147,212,202, 1, 79, 60,143, 58,115,180, 50, 35,167, -110,116, 63,228, 48,209, 16,227, 85, 39,254, 14,246,216, 96, 33,187,140,167, 35, 18, 77, 12,224,186, 21, 73,169, 22,107,112,195, -133, 84, 50,241,142,185,151, 69,213, 12,208,141, 10, 37, 13,108,156, 83,198, 33, 16, 85, 25, 65,170, 21,106,123,238,158,196, 3, -197, 18,112, 70, 97,223, 15,128, 28, 8, 88, 2,178,252,190, 75, 11,202, 7,148, 68, 21,179, 10, 75,241,240,128, 23, 99, 71, 51, - 98, 70,202,224,143, 12, 4,138, 23, 1, 64, 58,187,157, 66,156,255,250,230,151,195,225, 8, 71,127,168,224,211,238,183,129, 82, -151,212, 50, 60, 69, 68,182,185,153,195,199, 64, 16,103,121, 25,158,154,173,206,102, 76,222,147,232, 5,155,150,202,250, 33,208, -115,236, 9, 19,120, 58,250,194,210, 69, 81, 45,109,245, 90, 52, 93,133,111,244,145, 0, 84, 93, 93,111,219,100, 20,182,157, 38, -177,157,196,110,218,100, 77, 27,194,218,173,101, 91, 58, 13, 1, 97,211, 36, 24, 3,164, 33, 68, 65, 83,239,184, 68, 92,141, 11, -168, 16, 72,220, 33,110,249, 19,220, 76,227, 14, 9,144,248, 1, 84, 80,161, 74,213,152,186,117,237,150,118,235, 71, 58, 28,231, -195,137,227,143,248,227,229,156,243,166, 67, 92, 91, 74,172,215,246, 57,207, 57,231, 57,207,131,241,157,175, 53,137, 34, 59,177, -196, 69,236,140,171, 28,128, 62, 37,212,227, 21,255, 39,247, 60,234, 16,141, 82, 63, 19,136, 52,138,142, 31,112,214, 18,147,160, -222, 65,139, 97, 22,112, 57, 75,225,196,112, 15, 74,224,205,237,191, 73,114, 93, 34,158,162, 68,228,252, 96,102,162, 98,217, 4, -231,197,255, 10, 8, 8,238,216,231, 99, 35, 33, 76,114,164, 3,160, 18, 76,105,101, 39,176,249,130, 40,148,237,232,148, 36,107, -144, 33,198,164, 36,237,158, 96,105,231, 17, 3, 90, 87,199,253, 33, 74,152, 52,218,135,236,100,240,248,252,198, 69,238,114, 71, -110,177,233, 36,224,212, 4,250,236, 4,216,153, 25,184,131,185,169,179, 88, 88,224, 8, 5, 48,184, 74,227, 98, 7,106, 5,156, - 46,224,152,149, 41,170,108,123, 80,140, 75, 73,212,216,147,134, 36,133,199, 39,198, 56,100,143, 56,223, 22, 15,150,107, 0,114, -203, 44,192, 34,215,222,120,115,229,155,239,207, 45,190, 98, 30,215,181,108,118,241,226,197, 31,110,223, 33, 76, 33, 66,228,123, - 84,127,210, 50,141, 47,191,248,124,103,167,190,179,187,135,163, 86,244,198,196,250, 48,167, 72, 89, 53,161,103, 37, 53, 45,101, - 84,145, 22,135,169,149, 69,219, 37, 8, 67,227, 4,156,159,135,118,162,238,112,232, 3, 62, 25, 0,218,180, 3, 0,239, 16,247, - 29,151, 57, 14, 26,125,160,244, 71,140,140,192,140, 10, 97, 81, 84, 21, 81,149, 69,218, 62,165,124,136,146,241, 68,129,166,128, -128, 91,227, 17, 27,134,196,197, 36,185, 5,148,118, 85,196, 72,129, 64,218, 63, 55, 81,125,251,210,181,187,251, 27,144, 89,203, -122,217,242,172,172,162,245, 6,206, 97,107,127, 58, 95, 94,127,188,150, 78, 65, 68,102,244,188, 8,139,160,249, 92, 78,145,101, -220,250,139,163,233,124,197,193,126, 34,131,128,110, 88, 70,165, 48,235,135,174, 27, 56,173,222, 63, 18, 42,247,250,215, 47,189, -101,245,173, 24,133,143, 76, 61, 59, 1,129, 15,158, 23, 96, 94, 0,110, 70,167,145,160,253,252, 49, 52, 65,151,125,223, 75, 16, - 89,243,230,213,143,214, 30,254,105,118, 59,128, 3, 14, 90,135, 33,186, 81, 83, 41, 61,116,229,164,178,122,127,181, 90, 57,191, -186,181,138,246, 88, 97,164,171, 90,109,254,202, 81,251,168,239, 90,159,126,120,107, 99,251,175,119, 95,189,177,176,112,126,167, -190, 9, 7, 18,192,255,133,222,113,187, 1, 49,180,168, 77,182,251,166, 38,235,143,142, 30, 54,218,141, 66,174, 80,173,188, 84, -155,175,213, 27,143, 7,174, 61,153, 27, 79, 32,249,170, 11,216,105,169,182,100,116,159, 29, 52, 15,108,215,170,190,120, 1,222, - 25, 28, 21,146, 54,197,220,212, 25,148,178,121,125,105,243,233,253, 0, 73,165, 98, 41, 95,130,187,101,104,102,249, 12,125, 53, -132,248,131,215,222,135,127,244,163,160,217, 53, 50,114, 6,128, 33, 60, 45,136,254, 54,142,190,219,247,246,238, 70,196,138,245, -160, 52,141,131, 76, 74,221, 55,159,142, 37,248,139, 77,246, 32, 98, 60, 55, 83,133, 56,184,168, 8,197,171,167,132,110, 79, 8, -135, 34,146,210,194,231,126, 45, 88, 36,147,168, 2, 39,212,115, 79,160, 8, 41,252,146,101, 6, 78, 59, 62, 59,153,215,211,144, -250,229,220,152, 58,153,155,208, 94,152, 17, 10, 5,193,112,254,184,253,251,157,223,214,183,186,125, 47, 13,117,180,164, 64,224, - 17,181, 32, 42, 53,157,110,203,106,126,187,254, 75, 33, 85, 92,169,190,215,233,197, 31,255,244,157, 0,153,238, 58, 59,182,159, -124,246,227,173,242, 87,211,202,124,170,180, 92, 88,254,228,198,131,159,239,189,243,235,242,202,194,215, 11, 47, 95, 49,143, 54, -214,142,183, 91,158,121,121,170,154, 75,166,224, 76, 56,125,214, 13, 93,168,222,248, 90, 57,149, 92, 6,124,137, 5,189,216,115, -123,144, 95, 33,213,193,167, 13, 81,222,118,250, 80,193,231,115,249,203, 23,106, 15,246,183,144, 1, 24, 5,112, 73, 73,202,179, -167, 78,119,236, 78,196,197,226, 88,212,247,225, 51, 24,142,210, 25,106, 41,251, 93, 36,212, 18,163,134,123,101, 9, 12, 29,178, - 70,138,157,136,138,109,114, 3, 38,169,185,192,243, 61, 90, 5, 12, 78,156,121,121, 59, 43,230,133, 3,223,250, 31,207,142,163, -144, 9, 54, 64, 25,234, 46,112,230,229,104, 5, 72,160, 29, 71,212,116,194, 46, 51, 99,167,203,179,105, 89,217,221,219, 21,136, -116, 30, 6,216,153,161,171,145,229,208,162,165,128,130, 51,166,213,164,250,128,113,127, 77,180, 79,160, 31, 5,136, 0,112,164, -164,207,216,129,205,141,158,224,205,201, 41, 90,165, 56,215,236, 25, 72,210,199,172,147, 80,209,240, 32,250, 87, 0,162,174,231, -183,109, 50, 12,199,177,155,216,177,211,197,105,168, 19,218,245,103,146,174,104,131,181, 26,106, 37,166, 1, 18,112,217, 97,128, - 56,111, 28, 56,114,168,144, 56,193,161, 66, 8,193,145,191, 97, 2, 46, 28, 17, 98, 80, 33, 80, 55, 1, 98,168,135,137, 31,101, -109, 32, 93,211,102,249,109, 39,118,226,184,113,120,222,215,137,184, 59,118,236,239,251,222,247,249,222,239,121,159,103, 92,127, -167, 70,243,192, 93,110, 36,208,139, 29, 55,201,236,245, 59, 81, 73, 57,243,169,253, 71, 34,249,148,192, 33,115, 72, 82,217,108, - 81, 22,136, 71, 6, 18, 97,172,109, 66,101,153, 30,145, 94,252,128,114, 69,154,195,103,125,159, 12,217, 21, 34, 36, 74,145,185, -212, 66,221,105,112, 87, 43, 69, 21,203, 49,233,192,148, 93, 53,198,135,168,244, 7,216, 13,203, 27,142, 61,193,131,166,178,136, - 36, 83,219, 42,118,211,201,217,178,245, 88,100,158, 25,219, 72, 82, 7,252,144,169,108, 83,154,129,119,234,186,109, 95,240,195, -163,130, 35,123,150, 8, 62, 54, 37, 30, 27, 9,141,120,175,148,123,240, 51,175,207,149, 47,234, 2, 99,209, 77,203, 54,109,183, -131, 92, 5, 72,195,108,110,159,118,175,129, 63,166, 56, 20,197, 80,230, 73,133, 76, 54,200,147,108,136,164, 22,141,136, 64,211, - 49, 37, 12,104, 76, 39,174,196,108, 33, 91, 28, 54,183,100, 94, 49, 89, 92, 18,104, 50,146,218,243, 87,215, 7,174,245,249,103, -183, 23,231,231,117, 61,241,237,206,142,170, 42,106, 84,210,228,136,170, 68, 10,197,130, 50, 33,190,126,227,250,238,221, 31,241, -219,104, 84,226, 16, 47,176,196, 27,157,214, 34, 94,247,220, 80,219,246,129,204, 2, 29,136, 0,215,227, 98, 4,245,103, 86,159, -250,228,195, 15,222,221,218,122,227,213, 27, 87,214,214,129, 26,142,138,199,142,211, 35,170, 57,146, 53,213,110, 37, 77,145, 18, - 88,187, 36,225, 37, 32, 21,226,110, 93, 55,132,249,239,209,228, 20, 24, 99,142,253, 95, 88,234, 15,104, 89,142,144,255, 3,213, - 57,137, 6,205,253,204,162,247,111,253,168,112,114,128,160,150, 79,175,246, 6, 14,114, 12, 2,116,177,118,192,157,117, 78,234, - 92,202,236,180, 88, 65,133,182,154,192, 59, 72,252,164,239, 70,162, 18,253, 97, 24,207,237, 5, 59, 47, 32,145, 90,187,218,236, - 84, 49,172,115,169,249,186, 93, 39,233,165,168, 82,172, 20,177,145,202,101, 46, 84,172, 50,247,142,218, 44, 18,219,111,118,234, - 3,202,102, 68,212, 89, 74,231,186, 61, 7, 81,187,221,237,152,118,171,112,114,136,177, 91,207,175, 91,142,181,152, 94, 76, 39, - 12,108, 87,217,105, 93, 72,198,117,228, 12,204, 15,211,105,206, 36,103,218,221,118,126,102,101,239,240, 62, 98, 4,182,243,247, -247,127, 1,160, 46, 85, 74,165,114,137, 24, 83,124,162,142,153,134, 69, 82, 38, 82,227,179,128,210, 70, 42,157, 59,191,162, 73, -114,127,224,149,106, 71,185, 76,118,255,120, 31,241,119,251,173,143,126,126,176,187,182,116, 25, 11,242,184,250, 8, 89,117, 35, -119,101, 41,147,255,235,209, 31,147,114,220,233, 57,216, 44,111,230, 55,176,246, 42,173,202,195,211,135,118,143, 2, 19,110,142, -240,178,177,178,185,108,100, 77,199,194,103,193, 16, 61,110,158,218,125,123,117, 38, 79,156,104,215, 33,241,119, 46,254, 98,164, -241,217,175, 93,186, 90,109, 85,145,139, 37,129,220,131,147, 90, 82,215, 18, 92,186,117,169,133,146,252,103,158,168, 53, 15,231, - 50, 79,175,169,233,216, 69, 63,100,117, 66,158, 39, 32,126,112,173,131, 58, 87,153,124, 74,220, 5, 38,101,141, 84, 10, 25,244, - 16, 9,217,141,201,106, 76,155, 84, 21, 45,158, 76,234, 9, 93,143,171,114,171, 90,191,243,221,111,119,126,253,243,239,166,229, - 73, 18,210,136,203,214,136,114, 68,138,133, 21,196,247,136, 40,252,116,242,207, 15,167,123, 55,151, 95, 90,148,166, 94,219,126, - 31, 55,175,222, 50,213, 45,249,252,151,243,246,247,141,157,237, 79,191,249,234,118,225,235,221, 75,157, 23, 94,252,248, 90,233, -139,227, 55,239,189,243,222,115,111,103,197,244,131,198,222, 94,253, 96,122,114,246,162, 62,237, 0, 89, 80,201,195, 95, 54, 22, - 76,150,224,207,103,150, 25,219,136,153,169, 89,132, 20,140, 47,178,172,217,181,168,167,148,154,235,168,196,151, 62,103,220,253, -253, 30,137,123, 76, 68, 48, 46,125, 15, 16,193,173,154, 53,172,230, 87, 46,191, 92,170,151,117, 85,103, 66,187, 31, 30,215,214, -113,231,172,145,197,119,166, 15, 49, 28, 32, 50, 94,152, 93,105,116, 90,120,118, 32,238,140, 96, 50, 33,132,147,241, 20, 96,181, -174,233,115,211, 11, 77,171, 49,242, 62, 98, 25, 74,214,135,144, 12,221, 64,118,223,204,110,150,154,167, 62, 73, 35,248,129,181, - 19,174,139,201,113,114,112, 13, 75, 9,141, 76,174,249, 37, 2, 91, 62,170, 60, 80,119, 82, 72,168,213, 42, 44, 42, 67,189, 61, - 84, 65,227, 38,103,246, 51, 33,157, 77,106,123, 62, 27,208, 82,243, 57,190,242,141,255, 55,238, 16,134, 54, 21,133, 24, 37,243, - 69,152, 60, 53,179, 18, 10,144, 63,191, 36, 75, 20,132,254, 19,128,168,107,233,109,163, 10,163,227,199,204,248, 49,227,137, 75, -226, 58, 14,181,149, 16, 28, 72, 42, 72,129,176, 41, 80, 53, 45, 85, 85,161, 72, 45,170, 88,116,197, 2,248, 3,108,144,186, 97, -141, 96,135, 64,237, 31, 64, 66,172,144, 80,145, 88, 84,178,132, 84, 5,164,180, 2,161,196, 33,197,216, 78,237,196,246,248, 49, -227,121,223,225, 59,119, 18, 33,101,231,248,113,239,220,239,121,207, 57,223,137,127,143, 99,236,175,196, 78,180, 37, 99,220, 14, -125, 46, 33, 9,132,241, 76,102,150, 18, 43,174,167, 2, 30,151,192,129,253,140,147,199,224,224, 98, 34, 50, 92,207,225, 2,198, - 66,116,129, 35,252,239, 65, 25,215, 43,167,179, 33, 45, 23,171,116,202,167, 54, 24, 7,244, 9,175, 44,172,119,134,157, 4,118, -153,214,228, 71,199, 47,224, 55,244, 16,192, 97,126, 33, 55, 79,201, 56, 28,186,107, 11,156,152,225,184,166,105, 77,232,199,143, -172, 17, 55,194, 4,159, 56,194,231,150,179, 96,169, 88,213,167, 61, 42,234,161,199, 31,201,244,134, 17, 40, 52, 66, 12,161,104, - 98,130,175,202, 57,180, 89, 33,230, 71, 69,147, 42, 10,201,128, 7,201, 83,133,125,222, 54,194,176,189, 48, 37,165,185,156, 8, -110, 58,208,155, 75,192,204,146, 44, 43, 73, 9,203,101,148, 20,155, 83, 10,186, 40,205,248,197, 36,230, 88, 74, 73,242,242,130, -146, 78, 36, 37,192, 19,201, 53,131, 61,136, 17, 15,208,123,121,218,108,255, 90,171, 61,120,240,211,239, 59,127, 94,217,188,172, - 41,202,195,218, 67, 45, 43,203, 82, 60,149, 74,168, 28, 26,223,110, 62,189,118,245,210,212, 24, 63,235,180, 41,174, 95, 88, 93, - 25,143, 71,228,153,226, 33,216, 88,100,176,166,237, 27, 22, 69,209,208,243, 66,199,227,151,183,124,130,251, 25, 53,119,239,155, -175, 71, 35,227,222,253,251,181, 90,141, 54,245,253,173,247,238,124,112,179,213,170, 27, 70, 95, 83, 82, 32,119,203,113, 9, 19, - 47,232,255,163,202,131, 60,123,104,187, 32, 81, 80,196,150,192,161,142,229,178, 84, 46, 36,213, 12,149,150, 0,230,115,250, 1, -240,102, 62, 50, 65,124, 93,224, 50,107,202, 92, 63,212, 45, 83,162,138, 39, 24, 14,166,125,135, 57, 5,165,104,249,110,181,244, -242,144,210, 77,168,201,195, 12,192,197,224, 92, 97, 49, 33,250, 30,134,104, 83,228, 62,101,200,160,120, 82, 82, 96,141,135, 92, - 18, 92, 55, 7,197,153,210,135,239,126,252,111,183, 65,206,139, 10, 41,114,172,186,209, 91, 41,173,234,147, 62,213, 7,139,133, - 23,232,225,138,124, 42,214,210,217,229,131,206,190,166,228, 45, 80, 22,253,172,148,187,117,243,182,222,215, 91,199,135, 38,180, - 49,156,114,225, 92,127,116,244,246,218, 59, 61,253,136,162,142,154,202,114,101, 53, 65,149,213, 23,203,213,237,189, 71,244,240, -200,128,109,223, 53,109, 3,129, 52, 6,150, 95, 8, 90, 10, 24, 79,169,164, 44, 32,133, 52,206, 87,206, 63, 57,120,140,161,181, -142,221, 27, 30,147,125,130, 82,171,206, 22, 43,149, 65,175,187,253,215,163,163, 97,247,226, 75, 27,123,173,191, 41,162,107, 25, - 45,175,156,169, 31,238,190,182,116,225,108,190, 48, 52,135,228, 5,202,115,231,118, 91,245, 36,112, 74, 97,121,174, 34, 67,147, -160, 63, 54, 70,251,135,187,141,110,227,141,229,215,219,189, 38, 45,234,198,198,117,114, 37,150, 99,151,242,243, 18,168,236, 73, -203, 49,109,207,129,205, 3,115,229, 0, 16,198,216,115,234, 44, 5, 0,195, 54,114,105, 85,205, 40,148,237, 42,233, 44, 45,150, -246,219,117, 39, 19,167,247,188,192, 10, 27,154, 96, 77, 5,207, 22, 48, 43,142,113,250, 72, 68,204,140,224,104,113,222,143, 20, - 34,173, 18,218, 22,133,226,175,183, 16,247, 19,178,144, 43,164,139,163,105,231,224,159,206,111,251,205,157,102,247,216,113, 92, - 40, 82, 82, 73, 30, 88,136,226,184,148, 82, 82,226,188, 50,251,230,242,237,201,184,247,229,227,159,143,108,253,211,165,173,139, -151,239,100, 63, 41,220, 93,252,124,189,178,170,125,171,117,127,104,124,247,213, 23,182, 18,164, 85, 37,204,197,158,236,255,242, -106,124,115,235,163, 27,119,191,255,172,253, 71,176,117,229, 86,183,177,253,227,225, 78,144,144,175,207,175, 24, 30,196, 26,131, - 88,184, 88, 40,119, 6,228,151,103, 44,219,164,117, 33,155,182, 38,105, 49,189, 86, 94,123,166,119,128,241,141, 16,222, 28,210, -118,105,245,173,221,118, 93, 20, 1, 43,203,103,180,137,107,206,241,178,158, 50,128,250, 97, 61, 0,171,142,222,142, 50,136, 51, -126,192, 62,165, 35,167,101,181,254,248, 88, 68,203,146,178,147,106,189,189, 23, 8, 62,229, 99, 87,215, 55,169,158, 3,146, 39, - 4, 1,155, 78,237,196, 30,163,151,224,243,212, 51, 96,146, 36, 87, 75, 20, 12, 6, 28, 37, 8,112,106,116,129,143, 70, 31, 63, -211, 84, 61, 48,168,169,250, 60, 79, 2, 73, 59, 22, 37,240,145, 16,156, 64, 79,191,140,137, 73,158, 77, 70, 13, 40,142,199,255, - 40,233, 12,248,252, 46,180,151, 24, 5, 45, 29,183, 17,236, 84,151,239,164, 71, 30, 23,226, 39,252,165, 48, 98,240,224, 53,200, -141, 4,126, 41,191, 48,130, 96, 53,124, 47, 31,152,234,243,142, 92,236, 63, 1,136,186,150,222, 54,170, 48, 58,182,231,233,199, -120,236, 56, 78,210,214, 73,211, 4, 8,121, 64, 49,137, 72, 72,138,104, 68, 34,177,107, 37,216, 33,241, 7,216,128, 4,203,136, -101,197,138, 5, 27,118, 21, 72, 32,129,216,209, 5, 72, 93, 21, 4, 18, 72,108,218, 96,168, 90,199, 14,118,252,152, 76, 28,219, -241, 60, 61,230,124,247, 38,176,242,108,102, 60,115, 31,223,253,206,119,207, 61,231,255,248, 30, 48,191,199, 16, 35,233, 92, 1, -140, 87,216,169,216,192,184, 62,194,133,140,144,112,225,211, 69,143,198,175, 36, 42,125,183, 23, 39,111, 16, 78,229,230,118, 75, -231, 72, 0,159, 64, 38, 12, 83, 11,102,183,221,232,212,145, 5, 19,123, 50,100,147,217,166,227,136,154,146,196,191,147,134, 9, -227, 7, 33, 67,127,102,114, 65,145, 84,192,177, 32,112,125,228,169,140,105,131,199,106,178,194,249,215,108,253, 36,168,165, 74, -241,225,136,223,136,150,213, 78,207, 44,178, 82,100,106,156,129, 48, 36, 43,103, 73,243, 16,160,185,208, 37, 63,120,204, 98, 13, -238,194, 11,171, 10,176,133,111,187,125, 82,231, 17, 88, 23,178, 34,139, 38, 39, 73,128,109, 72,131,131,155, 54,176, 79,161,234, -143, 68,197, 28,133, 56,174, 18,137,211,171, 18,237,124,146, 98, 35,250,204, 17, 28,196, 92,172, 83,126,212,118,128,248,200, 4, -158,140,105, 98, 17,114, 47, 21, 35, 50,113, 93,163, 27,175,108,172,190,180,246,211, 47,191,191, 92, 44,206, 92,157,255,230,187, -123,126, 24, 11,135, 98, 56, 36, 51,134, 96, 40, 54, 91,157,226,139, 69, 93, 55, 30,252,252,235, 88, 54,243,201,157, 59,237,230, - 81,165, 90,137,199,101,182,239,202,217,244, 36, 66,131, 11, 13, 77, 0,244,128, 55, 16,134,235,107,215,111,108,110,236,237,125, - 84, 46,151,108,199,170, 84,254,250,241,254,247, 8,232,111,221,126,179, 84,250, 45,174,142,178,134,164, 40,120,103,182,183,207, -142,138,146,105,143, 24, 61, 87,146, 96,233, 28, 71, 27,204,166, 32, 18, 50,184,128,236,130, 84, 2, 41,237,166, 50, 20,209, 49, -153,119, 22,201,226, 73,226, 32, 66, 59, 57, 41, 73, 77, 73,186, 23,186, 41, 37, 89, 54, 31,211,190, 47,109, 96, 15,153, 20, 45, - 17, 85,177,210, 1, 18,109, 95,191, 89,110, 86, 25, 53,141,142,212,163,109, 47,101,175,216,222, 32,169, 36,208,192,219, 47,236, -224,145,102,215, 44, 85,247, 73, 87,139,220, 44,143,154,157,122, 58,105,152,157, 6,214, 9, 49, 38,159,116, 77,166,243, 76, 20, - 34, 0, 30,215, 35, 55,149, 78,255,248,217,203, 11,149,230,129,117, 98, 70,124,234, 50,204, 34, 76,212,190, 99,111, 46,173,207, - 93,154,211,147, 6, 16,200,211, 86,153,121, 4,142, 90, 39, 13,196,205,245,231, 54,144, 61,228, 51,185,106,171,162, 42,252,132, - 0, 86, 43,161,144,155,198, 8,150, 99, 50, 30,210,176,234, 91,203, 91,154,164,252, 99,214,242,153,137,222,160,139, 6,184,177, -178,105,157, 90, 72, 59,234,173,122, 72, 6,123,194,107, 75, 91,205, 78, 3,105,120, 78, 31,243, 61,183,102,214, 49, 87, 29,207, - 61,104, 84,250, 14,190,142,128, 75,215, 62,197, 88,160, 3,183,236,172, 40, 0,235,202,236, 50,176,217,226,244,226,159,135,251, - 24,146, 73, 37,213,238,180, 6,118, 15,111, 85, 24,191,114,208, 60,240, 92,218,178,222, 93,219, 93,157, 95,125,122,244, 4,152, - 48,175,143, 1,194,115,107,102, 12,101,132,254, 30,229,254,124, 66,249, 61,251,152,142,181,197,199,103, 4,111,234,213,113,146, -243,245,221, 8,134,113, 36, 60,183,226,248,207,101,143,205,236,144,157,186,160, 14, 69, 23, 89,115,251, 71,198,131,195,118,169, -237, 27,126,196,143,182, 43, 86,175, 31, 4, 54,153, 83, 34,166,227,130, 52, 48,145, 78,184,204,131, 48,165,200, 64,149, 53, 51, -218,234, 89,159,151,126, 88, 79,175,188, 55,255,118,225,238,205,187,111,124,251,213,227, 47, 63,252,250, 3, 97, 76,184,247,238, -167,106, 70, 43,232,147, 90, 76, 54, 68,189, 51,234,149, 30,221, 95,222,217,217,236,111,191,255,199, 59,123,211, 31, 95, 53,178, -159, 61,250,194, 10,195, 91,133,162, 59,114,152,140,107,250,108,208,183, 61, 55, 29, 79,158,185, 14, 86, 71, 96, 65,196,107,242, -116,100,206, 19,156,182,206,200,222, 84, 95, 61, 60,174,121, 8, 92,162,202, 76,186, 51,233,184, 81, 71, 54, 77,218, 6, 4,156, -159,191,188,232, 7,238,210,204, 18, 34,114,113,190,216,183, 7,105, 77,159,155,184, 70, 16,211,179, 73,117, 28,217,180, 63, 64, - 42, 9, 72,148, 55, 38, 30, 86, 31,178,106, 13,153, 51, 51,227,113,228,103,226,100,122, 10,121,192,235,183,118,159,148,254,206, -166,115,245,227,154,235,217,104, 51,159,164,103,137, 26,123,198, 8, 93, 92,196, 11,163,130,173,199,196,206, 50, 18,217, 9, 35, - 47,140, 24,207,155, 72, 34, 36, 87, 66,100,229, 17, 38,148,139, 85, 63,151,202, 1,125,146, 86, 29,137, 11, 5, 44,118,145,246, - 31,137, 68, 82,233, 34, 34,240,237,101,238,123, 52,186, 8,191,140, 3,103, 36,140, 76, 34,235, 4, 54,247,133, 62, 29,116,248, -202, 61,155,159, 5,208,161,244,116, 52,212,228,196,191, 2, 80,117, 45, 61,110, 83, 81, 56,126,219,113, 98,199,147, 76, 94,211, -206, 68, 73,218,162,233, 67, 29, 70,109, 89,148, 5,162,133, 5,170, 90, 16, 11, 36, 4, 21, 8,149, 31,192, 2,129,196, 14,186, - 98,207, 18,254, 0,176, 65,162, 11, 70,180, 51,160,210, 13, 98,129,170,233,148,210,150, 64,147,230,237,248,145,196,142, 19,190, -115,157, 5, 72, 81, 54,113,162,248, 30,223,115,190,115,238, 57,223,199,255, 71, 9, 60, 78,207,153,244,195,242, 97,160,251,164, -222,144,196,255,132, 92, 99,228, 5,191, 63,240, 6,110, 56, 66, 68,199, 82, 7,209, 36,134,238, 73,170,195,176, 28,134,254, 16, -192,120, 84,206,150,255,238,253,133, 96, 38, 80,165,152,234, 40, 50, 53, 0,240,164, 48,146,224,253,169, 27, 4,227,152, 57,129, - 21,172,133,253,230,221,161,215,143,153,114, 88,153, 53, 62,226, 68, 94, 51, 5,154, 22, 4,145, 58, 38, 9,145, 36,252,208,163, -122, 11,169,122, 82,188, 5, 16,195,191,141,167, 91, 73,248, 45, 12, 40, 50, 49,210,252,136,173, 12, 86,132, 81,248,135,164,239, - 17,248,142,111, 3, 10, 85, 10, 71, 25,225, 56,107, 34,103,195, 84, 1,163,225,102,162, 4,116,246, 64, 8,150,165,201,196,141, - 53, 11, 55,114, 21, 32, 56, 32, 93, 85, 96, 67,167, 34, 15,108, 75, 44, 73,115,154,108, 98, 22, 90,164, 52, 46,147, 18, 76, 3, - 57,190,144,209,113, 25, 71,180,252, 34,238, 46,106, 55, 91, 23, 94,188,144,183,204,221,221,189,114, 33,127,172, 82,210,241,169, -194,194, 59, 21,227, 66,172,196,106,161,196,113,202, 96,232,191,122,249, 74,238,112,245,210, 43,175, 33,148, 76,253, 8,158, 25, -176, 14, 48,220,212,197,252,138, 82,206,171,229,172,124, 8,239, 69,185,184,170,148, 10,105,219,238,192, 43,215, 42,229,143, 63, -252,224,250,245,207,206, 61,123,234,214,143, 55,176,216, 91, 39,143, 7,228,166,185, 40, 16,167, 83,234,176, 68,128, 15,169,194, -206,224, 63, 13,138,113,170, 44, 1,148,105,138, 72,205,118, 2,175,138, 11,100, 21,186, 42, 24, 73,209, 74,137, 25, 93, 50, 83, - 82, 10, 32, 89,151,205,180,156, 91, 81,114,150,102,192,117, 37,149, 72,155, 15,231,182, 63,115, 38,243,241, 83,239, 31, 83,205, - 32, 61,210,100,141,227,132,106,161,134, 47, 9,140,211, 21,246,106,245,219,140, 99,115,158, 78,166,147, 74, 82,150,181,190,219, -131,165,186,110, 23, 75,189,123,247,102,123,216,214, 20,221,159,122, 64,205,167, 54, 54,145,244, 34,168, 42, 98, 18,206,253, 80, -118,131,250,127, 73, 77, 34, 82, 69,117,251,200,153, 70,239, 49, 29,184,249,182,165,103,183,107,219,184,242,105,187,137,159,130, - 39,133,153,144, 95, 99,203,124,119,231, 70, 40, 17,189, 94,199,233, 22, 50,133,122,161, 2,251, 2,133,233,178,126,123,255,246, -227,246,163,135,173, 71, 28, 59,158,226,121,137,134, 33,167, 99, 4, 21, 36, 4,174,239, 88,186, 1,175,113,208,184,127,235,247, -189, 90,177,142, 12, 45, 8, 60,141,198,132,149, 98,166, 0,120,229,141,250, 43, 70, 14,169,245,137,245, 99, 0, 94,124, 20,193, - 35,231, 12,107,115,189, 94, 47, 86, 23,243, 89, 61,191,193, 47,162,103,214,142, 60,233, 55,115,169, 44, 96,192,213,151,223,174, - 22,215,219, 3,100,177,222,111,247,127,181,253, 62, 32,188,153, 52,168, 25,119,177, 56,115,252,172,194,102, 53, 15, 26,247,138, -230,234, 90,105,253,236,214,243, 7,141,253,175,247,190,129,167,128, 31, 41, 90,101,184,167,112, 22,107, 27,240, 37,171,184,150, - 91,123,233,244, 69, 82,206,153,248,108,235,207, 73,185, 3,187, 83, 76, 48,142, 95, 49,166,142, 17,165,132, 32,198,156,192, 75, - 8,200,238,154, 24,230, 96, 15,126,182,248,163,235,254,220,126,224,204,169,197,103, 72, 64, 45,225,207,129,214, 73, 30, 6,217, - 93,176, 96,145, 61,138, 21, 34, 73,144, 26, 80, 19, 11,145,149,229,157,230, 61,252,218,165,252,233,218,181,215,163, 59,137,119, -118,222,120,247,252,251,137,243,137,157,203, 95, 74,134,210, 11, 38, 31,253,242,213,155, 63,124,254,222,205, 47, 26,142, 31, 72, - 81,235,219,159, 46,126,242,156,156,200, 94,251,254,211,220,209,115, 21, 45, 63,245,123,246, 44, 84,121, 25, 62,217,153, 56,195, -201, 72,146,132, 17,137,110,211, 84,121,214,176,210,138,174, 8, 50, 30,152,173,234, 73,154,229,227, 72,104,129,137,101, 80, 44, -151,217,176,116,103,212,197,203,155,122,177, 34, 9,163, 94, 16,155,131, 39, 61,119, 0,131, 98,195, 62,108, 61, 8, 73, 7, 97, -220, 26, 18,239, 69, 54,185, 82, 47,214,169, 71,118, 50, 17, 89,221,198,245,109, 83, 53, 36, 54,113,189,236, 75,161,130, 12, 53, - 74,210,144,199,159, 45,108,147,190,211,195,163,178,121,248,196,213, 23,222, 2, 40, 65,210, 48, 34,102, 71, 30,207,115, 74, 78, -195,171,183,135, 29,172,106,222,200, 99,193,250, 78, 23, 57, 68,199,237, 16, 71, 51,163, 29,174,229,235, 29,187, 61,116,109,207, -119,224,131,108,151, 14,138,128, 87,200,233, 80,223,199,204,210, 50, 50,224,227, 2, 32, 76, 41,153,165,165,115,102,177, 60,169, -104,186,102, 80,123,149, 98,204, 72,215,112,236,142, 71, 18,167, 44,235, 37,108,188, 24, 54, 66,120, 11,200, 92,243, 24, 9,255, - 43, 0, 81,231, 18,219, 70, 21,133,225,241,204,120,102,108,143,223,140, 29,167, 78, 98, 27,112,211,135,210, 38, 66,109,104,171, -178, 96,195,162,251, 86, 72, 8,150,236,145,216,161,194, 10, 33,132,216, 32,129,216, 85,108,233, 2,129, 88,128,130, 4, 73, 33, - 18, 8, 85, 13,175, 22, 41,144, 38, 77, 98,123,226,140, 61,126,142, 61, 99,206,127,110, 18,182, 86, 20,123,230,222,123,206,185, -231,241,253, 39,241, 59,242,113,100, 95, 50,102, 86,102, 82,149,138, 54, 91,158, 2, 64, 69,198,255,191,186, 42,137,217, 67, 56, - 20, 43,158,167,139,176, 6, 77,209,192, 63, 18,233,131,254, 42, 79,123, 10, 69, 86,133,135,116,181, 70,167,206,133, 64,193, 1, - 5, 68, 34, 16, 29,253,162,167, 95, 58,134, 41, 72, 96, 50,160, 35, 88,232,171, 29, 95, 23,208,126,164,132,115,169,169, 40, 31, -126,225,188,101,110,117,138,233,230, 52, 42,117, 46, 99,197,144, 9, 96, 21,189, 32, 23,159, 2,143,226,196,119,177, 3,244,198, -128,103,198,163,105, 38, 34, 32,230, 57,236, 54,155,221, 6, 67,201,165,136,106, 84,139,243,244,214,142, 80,146,220, 95,126, 44, -117, 8,199, 3,233,112,191,231, 12,108,242,252,133,124, 12, 73,246, 48, 52, 78, 21,153, 46,107,178, 0, 9,112, 44,197, 99, 77, - 19,129,136,153,176,124, 2,186, 95,134, 92,161,105,181,155,231,206, 86,139,211,249,149,239,190,189,244,220,162, 22, 86, 30, 62, -122, 36, 6, 86, 37, 48,168, 71, 11,231,230,111,221,188,249,229, 23,119,251, 93,247,246, 59,183, 63,250,224,253,203,203,203,181, -189,189,205,199,219, 42,192, 0, 62,172,222,196,211,212,192,208, 2, 13, 2, 87,232,184,167,179, 28, 49,212, 43,215,174,223, 91, -187,103, 24,145, 87, 95,123,189, 80, 89,158, 57,149, 92, 89,249,230,116,245,188, 97,152,107,235,247,253, 32, 60, 26, 11,146,171, -204,147,176,104, 38, 99,224, 15,230, 22,121, 2, 22,121, 30,252,126,127,226,141,132, 21, 56,161,198,162,245, 50,170, 43,228,186, -196,244, 44,186,119,194, 33, 51, 42,199, 77, 89,143,135,104,207, 2, 77, 47, 43, 24, 75,153,248,169, 72,166,235,185, 20, 74, 96, -168, 4,245,101,217,140, 37,236,246,193,152, 98,124, 35,105,104,250, 65,171,174, 1,201,163,197, 80, 49, 75, 82, 20, 79,139, 14, - 55, 26, 10,165,227,105, 10, 75,233,127, 53,221,166,166, 40,221,161, 75, 71, 90,147,245,225,184, 71, 14, 8,242, 11,131,206,156, - 85,218, 59,124, 66, 7,241, 84,182,184,223,170, 53, 59, 14,237, 67, 70,120, 71,201,100,145,123,168, 20,202,213,217, 51,231,207, - 46,206, 94, 57,243,227,234, 42, 61,176,237,212, 85, 53,220,108, 31,166,204,228,142,189,235,141,135,116, 14,109,215,166,112,129, -126,228, 92,174,148, 79,231,246, 14,247,233,237,204, 62, 53, 71,159,208, 98,161, 91, 3, 5,243,209,152,149,175, 13, 57, 66, 1, -224,198,230,134,149,200,108, 53,182,105,163,210,215, 61, 51, 85, 94,255,107,157,155, 55, 96, 4,211,145, 52,153,111, 43,145, 77, -198,146,100,113,150, 42, 11, 13, 40,141,180, 74, 51,213,254,168,255,243,159,191,180,251,157,203,167, 47,209,181,198,233, 56, 10, - 72, 77,190,219,235,208,215, 21, 82,185,122,107,223,118, 26, 75,229, 11,220, 15, 51,174, 31,236,246,218,237, 17,116,131, 85, 7, -124,232, 97,198, 76, 53,187, 14, 61, 62,231,205,253,168,110,188,116,241,197,239,127,255,129,158,133,174, 29,180, 92,201, 72,138, - 98,186,106, 84,207, 95,155,146,250,125,201,243,112, 32, 66,204,140, 20, 35,239,193, 17,157, 91,164, 65,125,142,223, 39,190,178, -223, 72,212,188, 33,217, 54,207, 15,165,245, 68, 68,179, 31, 59, 46,217,247, 1,112,161, 32, 6, 12,233, 45, 48, 94, 75,204, 37, -210, 95, 68, 13,217, 82,102, 62,220, 88, 61,244,220, 79, 46,188,145,125,111,241,229,165, 87,118,123,205,207,239,222,233,124,250, -219,230,214,253,207,118, 86,239,252,241,213,243, 86,233,198,236, 69,223,239,127,252,240,235, 66,186,152,118, 58, 79,223,120, 33, -254,107,230,221,191,223,124,251,250, 91, 59, 79,254, 89,179,127, 90,204, 47,228,116, 90,190,137,114,196,235, 18,138, 23,161,100, - 60, 97,106,145,158, 55,240, 1, 43,245,234,206,129,176,187,162, 18,123,117,254, 42,189, 22,186,238,112, 48, 41, 89, 9,139, 22, - 5,199, 16, 58, 90, 18, 93,247, 81, 90, 31,244,122, 20, 41, 39,178, 1,167,186,233,225,135,128,135, 75,220,149, 23, 60,155,175, - 80, 32, 63,102, 14, 40,109, 69, 88, 15,116, 31, 2, 10,237,227,195, 16, 71,196, 37, 10, 26,234,181, 90,202, 68, 61, 70, 13,135, - 41,132,127,240,239, 3, 93, 55, 38, 96,158, 15, 5,131, 1,242, 35, 34,103,194,221, 42, 3,144, 36, 4, 20, 0, 21,184, 8, 2, -161,232, 86,125, 11,226, 80,116, 70, 56, 39, 51, 24,244, 65, 73, 11,184,131, 6,105, 55,139,174,173,176, 81, 18, 48, 42, 66, 13, -137,121,204,170,138,153,187, 1, 52,223, 25, 22, 77, 81,145,152,164,117, 33, 80,229,147,175,155,206, 22,221, 62,118, 69, 37, 87, -158,179,202,187,246,182,138,158, 23,255, 63, 1,184,186,150,222, 54,170, 40, 60, 51,142,103, 60,206,248, 49,142, 93,219, 33,105, - 66, 83, 2,106, 82,156, 38, 24, 90, 94, 82, 35,177,130,150, 42,225, 33,177, 0,177,227, 23, 32, 54,176,136, 4, 98,133,216,176, - 69, 60, 36, 40, 18, 72,236,129,136,174, 88,145, 84,170,211, 38, 21, 38, 77, 73,210,164, 52,126,140,157,153,241,204, 29,155,243, -157,113, 26, 9, 47,237,209,120, 52,247,222,115,190,243,250,190, 99,126, 2,166, 73, 11,108,200, 21,122, 97, 64,192, 72, 94,252, -175, 47, 30, 35, 6, 40,180,162,123, 29,185,103, 89,233, 4,190,116, 12,237,153,221,139,229,152,104, 83, 14,170, 58,221, 13,220, - 0, 97, 61,231, 40, 88,232, 49, 53, 86,248,161, 56, 32, 99,228,232,117,196, 84,221, 71,186, 10,101, 77,230, 4,238,191, 46,169, -223, 13, 43, 44,215, 98,141, 80,172, 84,168, 64, 14,144, 46, 92, 35,158,180,236, 70, 63,155,200,141,141, 81, 37,202, 85,181,126, -169,182,175, 78, 30,154, 43, 12,127,163, 85,144,101,206, 97,122, 41,184, 27, 98,226,114,138,233,210,122,186,110,215,253, 46,232, -139, 65, 51, 25, 8,178,149,199,242, 50,156,174,164,144,141,118, 65,214, 52,122,168,152,163, 29,197, 15,164,112,130,137,121,239, -122, 17, 41,100,148,131, 32, 26, 89,108,219,237, 30, 30, 18,188, 2,114, 5, 81, 73, 32,182,239,254,253,234,229, 87, 82, 73,237, -214,198,245,231,158,157,171,110, 92, 31,136,118,233,151, 66, 46,243,198,226,194,219,239,188,187,178,178,114,245,234, 15,175, 45, - 92,121,100,100,108,105,233,227, 98,113,120,246,220,185, 95,127, 91, 38,207,169,116,229,185,153,153,177, 17, 10,109,135, 76, 35, -147, 78,166, 83,233, 33, 50,148,170, 58,232,218,189,139,243, 47,223, 94,175,174, 85, 54,116, 77,157,156, 24,221,252,235,206,242, - 47,191,151,159, 58, 79,193,198,181,107,127, 12, 40,154, 7, 49, 75, 22,208,139,244,197,181, 9,185, 10,140, 98, 33,159, 78,199, -216,243, 17,183, 43, 96,241,101, 42,130,168, 18,143, 73,134, 14,149, 31, 45, 74,246, 93, 1, 37, 56, 88, 24,144,254,212,200,189, -233,178, 30,195,219,165,173, 96,181,157,152, 28, 5,165,159,164,180, 58, 77,114,127,130,167,148, 81,184, 96, 62,231,188, 89,192, -112,160, 28, 33, 76, 68,166, 54,202, 76, 12,244,183,123,245,189,108,170, 64, 23, 36, 33, 51,162,236,214,112, 74, 45,112, 7, 10, - 56, 17,214,143, 39, 67,239,249, 62,237, 46,211, 48, 79,229, 79,173, 86,255, 12, 39, 48,232,216, 72,224,216, 3, 40,161, 51, 73, - 8,183,229, 88,116,168, 38,138,143,223,220, 90,179, 69,231,202,194,226,193,214,131, 91,213, 27,240,220, 65,151, 32,158, 69,182, - 82,184,201, 88,162,137,156, 9,188,185, 43,108, 23,234, 31,117, 90,181,132,110, 96,234, 74,146,155,237,198, 80, 50, 71,171, 73, -248,122,216, 44,152,113,147, 32, 94,105,186,116,230,133,217, 96,223,174,181,234,244,101,209,204,251,194, 53,161,195, 23,146, 85, -245,200, 52, 20,211,133, 98,166, 80,217,170,144, 17,173,222,223,180,220, 54,164,224,232, 38,233, 66,219,105,142,102, 71, 76, 35, - 85,185, 83, 33,199,118,246,228,212,246,253,237, 23,207, 62, 95, 26,155,178,253, 78,189,241,224,201, 71, 75,171,155,171,218,128, -214,176, 45, 80, 98,161,107,203,245,122,130,160, 58,109, 81, 77,139,147,127,162,215, 63,126, 98,156,150, 96,167,126,239,230,206, -109,199, 61, 36,127,217, 66, 83, 47,217,106,155,144,200, 88, 36, 54,124, 33, 75, 17,175,132, 54,237,128, 89,124,251, 61, 5, 44, - 33, 25, 10,190, 75, 28,189, 33,229, 34,251,234, 63,181, 84,147, 14,114, 87,153, 28,157, 17,237,221,136,122,176,107,185,232,106, - 13,186,157, 0,172, 40,184,152,219,189,125,174, 66, 38, 52, 53,169,169,247, 92,235,235,245, 74, 89, 29,253,224,243, 47,157, 61, -241,214, 23,175,127,181,240,253,244,165,199,150, 63,253,246,147,245,159,214,106,155, 31,150,223, 44,229, 79,167, 6, 19,207,228, - 39, 39,226,249,207,110,252, 88,212,178, 47, 61,177, 88,126,122,110,233,231,143,222, 75,190,159,200,202,223,108,124,119, 38, 63, - 61,149, 34,207, 36,148,135, 77,127,120,208,110,108, 64,115,124, 8,203,135,106,209,202, 67, 77,101,166, 22,216, 65,170,196,213, -162, 42,161, 82, 88,121,116, 37, 58, 16, 79,227,206,150,140,145,225, 60, 1,184, 24, 13, 61, 81, 62, 61,107,129,208, 16,184, 46, - 44, 63,144, 93,250,183,117, 64,208, 90, 2,123,140, 78,155,209,233,128,191,150,249,200, 4, 43,202, 33,125,213,134,175, 69, 15, -131, 26, 85,105, 9, 2,214,113, 68, 11,124, 64, 15,230,245,142, 38, 49,195, 4,182,204,190, 19, 28,112, 50, 40, 23,115,137, 19, -109, 86, 22,242, 40,180,243, 58,243,165,249,234,126, 85, 65, 17, 11, 48, 13, 80,138,108,251,209, 36,173,211,177, 5,210, 50, 33, -225, 89,200,230,216,147,250,153, 97,164,102,125,223, 27,212, 19,227,185,241,157,218,182,204,211,121, 16, 96, 96,225, 59,100,255, - 24,185, 29, 58,237,253, 6,103,168, 88,119,226, 63, 1,168,186,150,152, 54,174, 40, 58,227,239,216, 30, 67,192, 9, 50, 4,146, - 56, 31, 84, 16, 69,141, 29, 27,178, 32, 49, 93,244, 35,138,136,146,108,163, 42,251, 46, 43,149,108, 82,177,236,170, 11,212, 85, -179, 38, 85,148, 69,148,168, 85, 86,173, 80, 22, 40,146, 17, 65, 36,229,107, 91, 20, 3,254, 96,123, 2,227,249,121,102,220,123, -239,155, 68,142, 87,150, 44, 91,227, 55,111,206,189,247,221,115,207,113,252, 61,152,181, 19, 35, 47,114,156, 51, 78,128, 99, 79, - 28,199,127,226,152, 78, 35,100,244, 12, 3, 50,152, 52, 97,131,147,111,109,232,143, 26, 58,126, 17,173,160,208,108,209,114,252, - 4,219,249,149, 92,123, 56,192,115,145,243,145, 88,229, 4, 21,174,217,135,244,166, 45,243,118,208,217,241,151,101,253, 10,198, -124, 98,240, 13,201, 17,252, 69,192,199,176,208,161, 99,182,104, 7,189, 65, 49,208, 97, 24, 42,227,235,211,162, 99, 82,208,162, -131, 2, 40, 2,144,106,211, 50,137,223,130, 82, 7,216,140, 38, 31,184, 50,218,244,224,169, 20,250, 7,241,104, 21,102, 32,227, - 30, 69,114, 32,192, 68, 79,157,197,225, 73, 23,239,119,135,252, 36,200, 14,247, 29,242, 92, 13,114, 27,131, 51, 77, 94,209,176, - 7,166, 53, 77, 69,181,116, 13,239,127, 67,179,208, 50, 21, 66, 14,145, 41, 73,118,193,117, 80,172,109,111,231,167,190,249,238, -194,249,193,145,209, 68,126,103, 55,155,223,131,159, 26, 25, 26, 25, 31, 27,127,241,252,249,194, 31, 79, 0, 67,103, 31,204, 62, -123,186,144,205,111,213,171,149,233,153,233,205,127,223,201, 39, 82,167, 40,222,153,153,158, 76,167,227,163,163,169,212, 88, 42, -149,156,152,152, 72,167,191, 76, 94, 75,220,184, 57, 25,237,141,214, 42,165,229,149,229,213, 55,171, 47,255,252,235,213,226,226, -123, 89,190,125,235,246, 81,181,252,238,237, 90, 72,244,251, 60,200,132,129,188,219, 70,225,190, 22, 74, 36,218,128,146,176,191, - 89, 0,230, 73, 63,135, 36,126,200,181,146,228,147,120, 82,125,131,154, 17,182, 56, 23, 20,248,112,144, 19,132, 22,100,238,157, - 97,151, 0,136,238, 67, 8,167,204, 7, 53, 54, 93, 22, 54,161,155,248, 20,185, 25,159, 22,106, 41,213, 84,164,227, 26, 84,202, - 60,146,250,145,156, 11,145, 98,242,234, 87, 59, 7, 91,128,218,221,225, 8,172,115, 87,168, 59, 87,202,161,148,188,199, 15,235, -143,157, 79, 82,252,208, 77,245, 98,244, 50,132, 97,193,231,133,149, 28,236, 27,204, 30,100,147,201,241,195,194,190,205,195,134, -110,156,141, 12,236,215, 11, 52,202,143,169,134,110,168, 98, 80,172,212, 43,195, 67,195,235, 27,107, 71,185,210,198,206,218,177, - 92, 71,255,191,227,106,250,243,116,177, 94, 74, 92,185, 58,149,250, 54,179,181, 66,214,242, 40, 39,103,162,250,180,238,167,150, -166, 77, 85, 12, 9,178,210, 6,230, 57,168,151,175, 15,141, 29, 73, 85, 83, 49, 50,175,151, 0, 94,139,210,225,233,142,110, 73, -174, 3,250,157,235,191,164, 55,240,220,156,108,109,206,156, 10,117,172, 23, 54, 6, 34,125,112,253,138,166,198,122, 6,106, 10, -148, 23,110,200,206,124, 8, 88,218,155,220, 42,154, 28,120,189, 80,215,195,147,187, 91,218,253,175,178, 87,172, 30,198, 47,199, -171,239, 43, 42, 94,134,151, 92,188, 61, 0,238,128,110,177, 51, 23,202, 82, 25,174, 48,228, 15, 24,228,108, 85,147,235, 10, 42, - 34,184, 1,231, 32, 90, 12,156,142,213,229,178,135,244, 9, 92,156,229,214,180,161,155,189, 16, 29, 16,223,145,237, 98,127, 96, -236,178,177, 14,199,218, 25,171, 52,130, 48,206, 16, 87, 75,112,203,112, 92,168, 44, 85,198,123,162, 69,125,247,168, 1,113, 5, - 79, 63, 77,178,166,101, 83,176, 77,250, 34, 44, 77,208,227,237, 12, 4,187, 4,215, 63,249,226, 79,177,123,241,249,175,191, 79, -220,203,170,251,143, 51,143, 78,230, 51, 63,255,253, 91, 70,206, 61,140,223, 13, 9, 62,169,121, 2,208,166,114,250, 23, 0, 76, - 82,109,161,176,116,223,159,236,250,241,210,175,191,252, 46,201,158, 31, 18,247,231,150,231,250,187,175, 76, 70,206, 73, 86,131, -231, 62, 10,157,225, 25, 5, 84, 90, 16,218, 81, 55,134, 92, 77, 44,106, 17,187, 90,156,195,239, 36, 62, 16, 96, 49, 58, 4,180, - 80, 76,159, 20,201, 28,219, 37,200,127, 67, 2,138,202,233,150, 33, 43,114,111, 87,207,250,222, 38,201,105,185,216, 60, 84, 0, -149,185, 3,228,224,134,220,107,166, 3,209,142, 85, 0, 14,159,245, 15,162,248, 29,239,118, 82, 94,219, 34, 76,195, 90,129, 71, -214,114,167,226, 40,150,147, 83, 4,131,122,167,197, 1,152,222,148,181, 6, 99,127, 32,152, 90,205, 92, 49, 71,129,181, 69,222, - 65, 28,236,124, 98,180,216, 76, 38,210,102,132,114, 7, 33,153,109, 57, 41,242,217, 16, 98, 33,227, 20, 1, 93,180,166, 82,168, -237, 83,147, 19, 83,223, 48,142,224,105,182,115,162,142,135, 25, 80, 40, 40,106, 3, 37,169,232,245,191, 0,100,157, 91,140, 19, -101, 20,199,167,157,233,116,166,211,206,108,105,103,219,221,101,239, 13,151,237, 46,186,113, 23, 9, 17, 65,197,196,196,196,196, - 4,125,130, 7, 72, 8, 47, 60,147,224, 27, 49, 38, 38,134, 7,222, 20, 48,250,174, 33, 75,216,125, 0, 18, 31,192, 44,137,194, - 11,168,172, 46,133, 58,123,235,253, 50, 59,189,204,116, 46,158,243,125,109, 99, 52,233, 67, 51, 15,115,253,190,243,253,207,249, -206,249,157, 62,255,157,182, 66,245,250,193,119,218, 46,175,135,127,167, 89, 40, 44, 69,194,186,140,227,245,108,189,215,107,178, -251, 47,139,236,194, 16, 68,211,207,208,172,103,230, 63,191,255,219,250,162, 81, 36, 53, 11,108, 31,126,134,248, 14, 86, 36, 39, -161,219, 11, 76, 95,134,179,136,117, 22, 45,215,166,182, 3,163, 6,132,178,198,208,190, 15,174, 61,180,103,180,108, 20,208,195, -165, 68, 53,207, 11,112, 2,165,157,196, 35,170, 42, 39,107, 70,197,117,104, 66, 36,140, 24,155, 24,127,132, 4, 77, 14, 78,147, -244, 33, 24,208, 22,178, 10, 40, 26, 2,231, 16,230, 55,193,167, 5,231,134,148, 67,176,160,111,195,130,168, 40,184,255,206,225, - 38, 39,171,132, 17, 49, 38, 96, 74, 60,140, 75, 68, 69, 42, 82, 32, 42,113, 74,152,147,195,156, 18, 9,192, 31, 49,128,173, 94, -120,222, 47, 10,254, 90,189,252,248,201,175,174,101, 73, 82,164, 86, 53,158,175,173,131, 85,221,218,222,120,248,243,195, 76, 38, - 3,207,152,154, 30,159, 75,207,222,184,249,237,208,160, 10, 55, 63, 59,115, 96,100, 88,253,227,249,211,102,219,124,176,250,232, -135, 91, 75,183,150, 86,150,151,239,222,185,115,247,254,189,251,203,183,151, 90, 13, 99,108, 98, 18, 91, 64,236, 29, 91,120, 99, - 49,181,111,198,178,156,106,205, 24, 31,157, 56,115,246,252,245,175,191,251,237,207,108,117,183,211, 34, 74,213, 70,147,221, 99, -250, 48, 36,170,130,113, 17, 4, 48,176,136,152,244, 19,158, 27, 46,219,216,105, 41,232,147, 4, 54, 36,120,114,196, 47,133, 24, - 73,196, 94, 22, 32,157, 97,157,224,131, 12,217,147,240, 89, 22,250,245, 56,228,120,135, 53,131, 9,105, 56, 20,144,234,205, 50, -184,150,116,240,201,226,128,217,105, 31, 61,250,214, 88,106, 84,203,110,192, 5,193,223,220, 42,108,130, 5, 18, 3,146,222,172, -128,126,223,170,104, 14,242,120, 5, 63, 38, 24,152,157,142, 3, 23,130, 47, 56, 2, 51,223,168,150,244, 98,114,207, 16,124,227, - 23,185, 23, 2, 43,204, 47,206,231,181,124, 76,142,183, 76, 67, 55,117,170,229, 97,229, 74,143,167,115,181, 2,140, 16, 49, 16, -138, 15,171,154,150,133,131, 83,137,201,205,130,214,176, 12, 89, 82, 74,122, 9, 68,235,218,246, 95,171,191,175,130,162,191,240, -193,185,204,206,203, 14, 70,172, 40,144, 20,165, 19,146, 49,177, 36,157,123,123,238,216,250,214,122, 82, 78,108, 20, 55,158,189, -122,102, 19,156, 19,216,157,244,196,204,223,185, 44, 88, 88,137, 15,229,107,249,215,210,139, 47,181,117,137, 23, 90,118, 27,140, -184, 16,148, 84, 57,174,149, 54,193,163, 63,124,112,225,253,215,143,175,174,253,178, 55, 54, 86,168,231,193,145, 5, 31, 52,196, -193, 68,148,170,205, 58,152, 9,184, 10,232,178,119, 79,124, 84,204,109, 86, 27, 85,212, 19, 62,102, 80,137, 7, 57, 94,224, 67, - 31,191,247,169,103, 90,229,221,138,209, 54, 68, 65, 74, 13, 79,101, 11, 26,169,191,198,217, 10,239, 10, 76, 24,120, 27,117, 4, -228,113,170,146,176,236,134,159,243,169, 12,183,255,157, 81,134,195,236, 40, 34,213, 40, 43, 16, 53, 27,238, 47,119, 65, 50,158, - 77, 98,234,216, 48,185, 21,229, 35, 71, 64,139,218, 78,203,114,188, 40,219, 42, 88,219, 58,110,169,123, 22,114,122, 93,162,213, - 72, 13, 10, 78, 25,140,234, 33,233,136,231,195, 2,127, 40, 22, 62,125,238,243,224, 72,226,212, 23,167,190,121,243,230,252,236, -220,247, 87,191,188,150, 93,249,236,240, 39, 81, 65,216,197, 34, 18,218, 23, 4,211,111, 22, 98, 83, 63,102,127,138,214,195,199, - 47,127,248,228,250,211,149,157,229, 75, 39, 46, 94,121,244,213,128, 60,120, 50, 62, 89,179,155,180, 28, 19, 23, 86, 76,250,193, - 54,141,245,118, 3,239,195,207,244, 58, 61,117,109, 8, 77,165,166, 48, 22, 48, 29, 60,207,131, 32,134,183, 17, 83,226,122, 75, -167,241,225,125,201,233, 76, 46,131, 45,170,125,222,118,121,135,128, 51,187, 39,162, 52, 55,171,131,153, 54,201,129, 36,104, 97, -166,215,192,142,148, 58, 58,168,237, 28,179, 92, 47, 15,132,162,224, 29,195,226, 17, 64,104, 18,149,219,222,174,169,155, 54, 97, -155, 35, 69,146,161,153,202, 30, 77,138, 39,119, 7, 71, 8,141,174,211, 43, 5,237, 54, 87, 37,228, 84, 55,200, 6, 19,114, 18, - 28, 68, 92,142, 8, 94,158, 6, 31,186, 15,215, 47,174,100,186,247, 67, 10,166,218,212,181, 81,229, 4,238, 47, 34, 4, 91, 6, - 63,152,100,123,251,167,147,169,138, 94,114,177,161,155, 69, 19,165,168,129,253, 71, 0,178,174,165,183,137, 51,138,206,140,231, -229,199,196, 30, 3,142, 1, 37,142, 16, 38, 5, 41,101,193,179, 82, 55, 93, 80, 9, 33,241, 43, 88,177,226, 23,208, 74,176,237, -166,226, 37, 80, 85, 85,221,176,236, 18, 85, 98, 81, 5, 65, 4,225, 13, 69, 9, 80,145, 0,121,121,236,248, 49,153,137,237,241, -124,156,123,191, 49, 41,173,149,133, 99,143,237,121,125,247,158,251, 58, 71, 77, 83, 33, 38,209,111, 82,182,168, 63,183,220, 72, - 66, 29,255,229, 35, 97, 6, 30,166, 79,190,180,242,170,242, 31,196,254,153, 78,230,127, 47, 10,154,173, 55,136,181, 39,142,182, -242,251, 42,147,195, 36,159,138,153, 99, 68,242, 89,114,142,120, 24, 0,104,156, 81,132, 7, 6,110,226, 27,136,188,190, 96,186, -123,133, 4,140,178,150,105, 17, 51,184,202,137, 8,161, 32, 0, 79, 41,218,168,187,179,229,175, 51, 99,220,240,107,216, 15,101, - 45, 71, 55,204,150,223,192, 75, 56,131, 56,119,111,151,231, 18, 18, 38,133,205, 31, 66,111,203, 17, 74, 79,167,138,179,129,251, -251,216,193,178,110,105, 3,161,133,189, 88,138, 39, 72,221,153,160, 31,209, 96, 53,211, 99, 99, 51,195, 20,108, 7,201,141, 80, -115, 33, 41,117, 0, 47,104, 36,251,216,239, 90, 48,147,186, 1,179, 75,195,223,212, 91, 75, 98, 73, 68, 2,168,106, 59, 10, 35, -216,177,159,175, 92,245, 60, 15, 80,238,229,179, 23, 55,126,251, 53, 8,187,212,178, 74, 67, 17, 68,168,105, 18,221, 24,150, 66, -255,210,229,203,127,191,124, 53,253,215, 29,183,184,109, 28,150,126,239,158, 74,165,162, 35,212, 74,103, 30,206,220, 59,127,225, - 34, 86,203,247, 39,190, 59,114,232,240,236,236,195,233,123,119, 83,196,227,129,245, 60,232, 70,162, 79, 5, 30,172, 37, 97,176, - 15,231, 94, 93, 2, 21,148,100,199,206,147,213, 39, 20, 39,245,193, 88,245, 26,208,131,238,161, 72, 29,224, 73,216, 21, 8, 83, - 2,120,117,238, 48,199,225,149,227,252,190,210,212,147, 15,143,240,105,110,213,162,113, 51,152,120, 55,227,206,125,124,133,192, - 6,145, 22, 34, 74, 22, 85,208,185, 30,152,116, 55,185,153,162,215, 94,131,175,101, 49,141, 77, 22, 82, 23,186, 98,142,237, 24, - 95,107,174, 96,157,155,186,121,184,122,228,209,252,236,120,105,162,209,241, 96,217,137, 96, 63,101,135,189,144,242,233,110,185, -209,169,101,109, 39,103,231,234,237,250,212,196, 20,206,219,252,210, 28, 37,229, 72, 39, 69, 45,111, 47,183,219,237,186,239, 21, -115,238,129,177,201,167,239,158,187,233,124,216,235, 53, 55, 27, 27,193,134, 96,221, 43,184, 1,108,108,165, 76, 39,237, 32,212, - 91,105,124,128,213,112,179,110, 74, 32,110,211,229,212,226,129,221,213,183,203,175,185,206,169, 2, 33, 77,148, 42,134,105,188, -175, 45, 2, 4, 26,186, 1,175,112,251,201,109,234,101, 20,184,196, 20,190, 77,238,222,215, 10,154,181,206, 58,182, 47, 56, 69, -199,202,141,100,156,153,249,251, 56,215,105, 59,131, 0, 20, 54, 8, 71, 71, 36,254,176,218, 41, 11, 55, 19, 83, 63, 17,198,236, -115, 63, 6,126,215,201,229, 87, 27,203, 60, 42,169,142, 22, 74,155, 92, 4, 38, 98, 34,149,200,103,176, 82, 28, 59, 27,139, 64, - 55,180,175, 6,169, 83, 23,143, 43,122,160, 52,154, 74, 55,160,137, 9,249,215, 31, 40, 68,230, 8, 92,209, 15,137, 5,111, 64, -242,166, 64, 51, 77,247,177, 87,182,210, 5, 63,104,192,134, 77, 22,252, 23,235,175, 91, 33, 53,118,244,184,127,134,117,127, 96, - 84, 72, 22, 25,102, 26, 87, 52,159, 54, 43,249, 17, 55,147, 51,148,232,232,254,211,127, 62, 14,206, 77,255, 36, 30, 8,239,247, - 91,223, 94, 59, 51,234,142,158,253,250, 68,160, 68,157,192,215,101,211, 23,181,155,233, 19, 78,233,199,251,127,188, 91, 93, 90, -152, 91,188,245,195,204,201,155,223,136,179, 98,236,151,106,102, 91,241,250,161,211,139, 97, 77,178,218,226,120,109, 59,221,241, - 59,240, 37,166,101,251,126, 59, 34, 61,107,110, 17,167, 92, 19,177, 96,145,182, 53,129, 54,213, 54,179, 81, 68, 4, 3,117,191, -142, 93,222,187,171,250,102,249, 31, 70,111, 84, 99,175,117,106,199,171,199, 86, 90, 43, 11,107,239,101, 73,153,197,166, 98,182, -197, 26, 95,163, 94, 82, 24,252, 55,118, 22,113,181, 92, 93,240, 22, 36, 89, 33,222, 7,186, 7, 90,199, 79, 80,211,161,102,110, -144, 63, 16,204, 39, 33,251,241, 18,112, 76,249,128, 1, 53, 18, 3, 92,110,119,100,179, 83, 44,137, 32, 82, 9,207, 79, 98, 52, - 53, 77,246, 25, 74, 25,221,225, 55, 48,251, 43,141,234,176, 20, 1,208, 35,105, 74,197, 52,158, 38,223,138, 36,121,112,204,234, -206,177,112,179, 5,191,187, 65,154,145,244,191, 24,134, 38, 67,182, 6, 77,251, 36, 0, 99,103,211,219, 70, 21,133,225, 59,159, -158,113,166, 78,226, 54,113,112,136, 81, 27,218,136, 15, 9, 33, 88, 32,164, 10,196,162,236,232, 2,177,131, 31,128,144, 96, 81, -132,144,202, 6,177, 67,252,137, 10, 33, 85,170, 88,116, 1,123, 54,165,129, 44,192, 52,105,212,144, 68,180, 41,216,241,216, 99, -143, 61,158,241,204,157, 59,156,247,222,113,183,224,173,173,201,248,250,230,204,123,238, 57,231,121,205, 50,136,178,114, 72,245, -255, 4,247, 39,239,230, 37, 71,157,105,115,149,173,207,223, 44,216,127,188,230,232, 66,138,236,242,129, 51,199,208,195, 72, 23, -196,112, 35, 19,137, 58, 44, 34, 45, 70,191, 43,233,206,146, 56,198,116, 7, 4,218, 88, 69, 4,204,169,195,225, 19, 53,116,244, -229,163,216, 89, 40,219,195, 97, 52, 80,217,128,114,190,115, 44,247,147,171, 31,125,253,253, 55,148, 35, 27, 24, 46,101,178,124, -145,207,185,167, 98, 26, 13,152, 76,159,186,195,199,189,176, 43,189, 16, 85, 2,128, 79, 66,213, 74,254, 37,184,252,232,216,177, -126,219, 29, 60,191,185,162, 89, 20,138,133,180,187,195,243, 25, 74,176,172, 46,107, 34,227,163, 56, 47,255, 62, 43,121,200,104, - 38, 81,100, 72,156,239,219, 83,248,123,115, 12, 55, 27, 66,126, 74,195, 73, 65, 14, 96,195, 63,167,193,202,242, 82, 26,243,207, -174,125, 62, 12,199,136,131,122, 1,138,128, 65,234,201,144, 67,139,146, 20, 68, 42,109,198,251,189, 32,232,251,191,238,108,163, - 44, 1, 95,112,225, 84,156,167,214, 26,235, 27,173,246, 31,247,170,182,117,105,179,121,253,203, 47,152,217,120,227,205,203, 15, - 63, 62, 62, 13,124,186,133,104,154, 43,107, 96,131,194, 40,206,212,209,213,139,125, 5, 3, 78, 3,165, 99,120,192, 21,113,138, -185,214,138,205, 92, 7,126, 38, 51,228,234,184, 85, 46, 80, 67, 38, 69,132,251, 65,237, 4, 50, 37,225,197, 40,143,246, 59,191, -211,143, 87,113, 42,113,146, 63,187,182,117,220, 61,138,146,136, 2, 89, 10, 39, 57, 78,130, 93,217, 22,184, 20, 59,165,201, 67, - 56, 25,234,186, 57,152,248,244,207, 66,162,120, 20, 7,180,252,142, 13,254,217,140,163, 11, 16,245,127, 33, 62,120,235,253,219, -119,111,175,214, 87,143,122, 7, 75, 48, 32,101,103,189,115,221, 97,231,221,215,223,251,238,167,111,109, 84,119, 5,201, 34, 29, -182,109,158,231,122,123, 64, 20,112,210,206,241,108, 26, 70,163,105, 18, 63,215,186,180,115, 48, 57,241, 79, 72,208,213,107,245, -246,163,123,141, 90,163, 23,246, 61,123, 33, 6,214, 24,172, 62,146,216, 47,182, 94,184,255,104,207,212, 13,186,200,130,229, 80, -220, 39,197, 77,169, 27,137,131, 28, 80,195, 34,229,220,180, 44, 30, 39, 27,141, 86,111,236,147, 96, 95,175,111,208, 35,199, 52, -173,246, 97,123,209, 61,147, 82,202, 95,100,180, 8,231,150,214,134, 81,224, 7, 62,237, 8,207, 93,190,176,250,244,206, 97,155, -246,240,219,175, 94, 9,147,241,221,221,237, 42,104,107,224,243,100, 89,102, 74,123, 23,207, 57, 67,234,239,208, 63,206,163,145, - 87, 93,180, 89, 49,140,104, 73,226,102,125,221, 31,247, 57, 79, 58, 65, 71,246,235, 22,146,218, 84,216,150,147,102,148,157,212, -195, 40,145, 71, 16,178, 44, 78,219,220, 49, 41,230,200, 35,120, 37,187, 25,152, 79,140, 27,185, 4, 23, 62,105, 61,208,244, 25, -159,140, 6, 65, 42,244,243, 11,158,159,157,146, 58,157,113,117, 38, 83,226, 93,132, 82,183,165,121, 50,109,137, 34, 76, 82,219, - 2,254,254,231,253, 31,106, 85,118,235,229,175,216, 43,236,198,135, 63,254,149, 13,174,109, 93,237,167,195, 52, 87,125, 62,243, -158,109, 77, 12,248,232,157,141,151, 62,237,110,179, 59,226,202,229,215,216, 77,198,122,236,153,234,230,126,250, 48, 18,146,238, - 39, 57,151,112,120, 95, 59,191,123,216,166,164,170,117,182,185, 23, 79,148,112,215, 20, 6, 86, 13,226,226,153,161,213, 97,155, -199,151,107, 43, 15,186,127, 54,151,215, 79, 6,143,143, 59, 71, 12,150,120, 38,105,126, 90,118, 90,255, 95, 14,118, 20, 54,187, -108, 1,100, 74,107, 51,199, 66,159,123,150,204,212,168,151,140, 96,170,235, 3, 95,249,254,223,251,110, 5,126,244,128, 32,201, -249,209,173,230,197, 59, 15,250,180,148,139, 14,109,149, 88,148,189, 45,114, 42, 68, 94,157,131, 5, 17,211, 37, 76, 3,161,187, - 23,246,100, 90, 9, 0, 36, 24, 45, 18,151, 86,199,137, 83, 86,115, 61, 74, 50,242, 44, 87,230,216,243, 26, 39,116,168,106, 79, - 87,129,110,209,173,205,178,116, 2, 79,237,185,221,183,226,196,104,106, 5,138, 0,117, 71,232,108, 33,135,101, 85,100, 37,157, - 74,114,228,116,140,100,241, 95, 1, 8,187,146,221,166,161, 40,106, 39,113,198,166,118, 76,155,164, 9, 67, 11,170,104, 85,132, -202, 12, 18,208, 10, 33, 1,130, 5, 18, 75, 16,123, 36, 62,128, 45,191,129, 88,176,101,203, 22, 4, 29, 16, 44, 17, 67, 85,212, -162, 22, 2, 5, 53,141, 3,169, 99,199,126,158,184,231, 61,183,168,176, 32, 89, 37,138,228, 33,126,247,157,123,238,189,231,196, -252,123,184,147, 59,137,118, 72, 17,252,255,181,165, 15, 45, 75,127, 81,245,255,188,182,189,120,229, 29,153,192,118,237, 53, 62, -162, 94,208,123,204, 38,152,131,153, 52,128, 6, 70, 41,185, 48, 84, 66,141,155,123, 36, 70, 49, 49,143, 67,249, 92,239, 55,226, -125, 42, 92, 9, 32,116, 3, 55,190, 99,241, 62,133,145,176,249,133,151,208,124,228, 30,158,244, 13, 69, 64, 45,174,172, 38,124, -116, 85, 75,241, 93,130, 12,133, 20,139,216,137, 18, 71, 2, 54,137, 65, 72,139,218,217, 59, 48,130, 57, 41,184,239, 5,174,237, - 79,238, 30, 80, 33,196, 12, 20, 76, 8,209,227, 13,155,244,199,113, 37,211, 4,125,100,116, 42, 12, 65,147, 65, 3, 45, 98, 92, -204, 94,108,201,201, 45,137, 94,232,160,248, 50,131,121, 56,136, 2,126,155, 98, 96, 48, 61,117,246,249,204, 11,194, 76,112,175, -229, 9, 41,244,135,157,192,115, 67, 15,106, 46, 96, 5, 93,215,107,172,172, 26,173, 86,207,178,138,125,133, 60, 37, 35,197,108, - 46,155,164, 53,223,179,214,251,242, 82, 38,143,211,223, 95,175,245,247, 37, 95,205,205,204,205,191,118,220,200,247, 96, 49, 28, -241,156,131,174, 51,135,190,120,176, 28, 89, 8,218, 96,102, 53,163, 64,214,145, 14,225,113,178,141,187, 77,130,138,241,125,144, -186, 46, 3,114,135,164, 32, 22, 26, 87,162, 23, 14,145,120,234, 67, 37, 64,145, 6, 77,243,158,211, 70,139, 24,157,107, 80,192, - 60,142, 74,200,157,226,118,165, 84,163,168,100,116,155, 90, 97,151,177,217, 76,167, 51, 21,109, 40,155,202,186, 1, 27,210, 43, -135,135, 39,127,180,191,115, 95,117,108,177,195,131, 35, 20,218,134,171,251, 62,172,190,255,210,252,236,193,136, 71, 25, 46,143, -180,205,230,228,254, 35, 20,190,103, 23,102, 25,115,180,130,126,116,244,228,173, 11, 55,223,173,190,163, 93,242, 91,235,107, 16, - 4,106,159, 78, 48, 42, 45, 43, 4,115,126,154,198, 98, 99, 81, 47,234,142,107, 17,112,182, 28, 84, 92,175,158,188,108,116, 58, - 90, 81,163,155,165,230,251, 15,212, 70,127,153,144, 39,164, 39, 97,176, 88, 62, 61,118,234,135,177,166,149, 6,147,138,178,242, -109, 41, 64,204, 74,213, 75,181,235,167,175, 20,246, 84, 75, 81,230,203, 70,131, 30, 39,216,233, 97,226,212,165, 19,107,118, 90, -103,198, 79, 77, 79, 78,117, 2,191,185,241,189,170,149, 7,213, 50,129,208,169,219, 55,140,165,181,245,205,141, 4, 92,123, 28, -203, 54, 63, 54,150,104,241, 13,233,117, 74, 28, 71,135, 14, 88,174, 93, 46, 14, 80, 84,109,117, 90, 37, 85,135,167, 68, 50,217, -115,123,149, 82, 21,205,112,138, 66,217,183, 86, 44,181,205, 54, 44,142, 3,159, 82,183,241,250,120,219, 52,120,165,154,242,200, - 14,212, 39, 19,242,152,146,219,125,177, 6,183,107, 68,118,193,100,114, 28, 35,192, 93, 24, 38,227,226, 42, 10,151,132,199,101, - 47,221,141,198, 51, 74,174,170, 72,197, 84,107,217, 92,219,236,161, 29,219, 19,141, 5,136, 15, 1,151, 43,229, 19, 45, 66, 95, - 92,134,218, 87, 74, 76,117, 80, 14, 35, 75,118,250, 77,243,241,147, 7,111,159, 29,171, 30, 26,219, 85,239, 48,238, 40, 34, 9, -227,110,248, 19,112,165, 14,121, 76,221,243,104,249,233,181,125,199,235,151, 14,222,127,120,255,110,229,222,203, 95,179,139,236, -211,157,137,105,202, 60, 76,167, 39,115,199,159,141,159,235,224,172,229, 16, 61, 87, 40, 33, 68,156,102, 10,233,146, 43, 90,149, -226,154,112, 2,234, 50,219,116, 76,163,219,166,223, 88, 12,178, 13, 34, 50,244, 23, 84,228,127,128,111, 18,229,106,185, 84,198, - 98,118, 40,230, 55,164,144,139,248, 19,252,247,184,182, 93, 87,138,175, 72, 48,200, 34,200, 3, 92,159, 24,133,124, 5,199,213, - 32,178, 26,198, 90,127, 94, 37, 20,130, 58,188, 44,204,103,161,156, 95,213,235,166,213, 17,225,239,220,196,249,207,205, 21,161, -129,185,213,220, 24, 70,241, 64, 56, 14,224,194,121,212,179, 88, 47,228, 45, 36,127,128,180, 20,251, 51, 71, 91, 99,153,244,182, - 61, 27,125, 89,144, 44,149,130,109,111,149, 29,108, 8,223,157,131, 72, 24,117,243,181,130, 86, 20,168,195,195,123, 66,249, 45, - 0, 89,215,210,211,198, 21, 70,231,225,121,120,198, 24, 63, 18, 99,130, 77,148, 84, 66, 85,138, 42, 37,108,218, 72, 81, 43,181, -139, 46, 42, 53,221,132, 95,208, 69,187,170,146,252,129, 72,253, 47, 89,103,145, 63, 80,161,180, 52, 44,250, 72, 8, 16,129,133, -113,138, 25,207,224,177,103, 60,111,251,246,251,190, 59,166, 40, 97, 5, 6, 12, 51,247,206,185,231,123,157,147,227,123, 38,252, - 47, 50,195, 46,209,119, 85,208,166,243,230, 72,246, 65,126,230, 61, 52,103,151, 1,251,131,159,189,152,195, 90, 91,190,101, 99, -194, 93, 16,223,127, 27,113, 30, 76,204, 96,217, 10,162,146,100,201, 44, 79,161, 32,130,207, 19, 65,188, 59, 19, 89, 60, 4,230, - 9,150,176, 89, 46, 50,198,213,101,168, 52, 86,160,189,135,128,203,200, 49, 29,239,218,140,196,212,197,148,166,203, 80, 29, 44, -155,134,145, 63,155, 79, 14,176, 75, 87,206, 9, 75, 94,122, 22, 88,185, 88,139,209, 8, 70,210, 53,211,241, 7,138,132,143, 78, -217,168, 15,131,209,110,207, 30,122,169, 41, 20, 42,170,114,179, 90, 54,100,165, 90, 80, 77,137,228,188,136,255,164,132,212,240, - 20,201,212,246,101, 40, 50,202,126,225,161, 78,192,202,255, 24, 4,113,104,248, 41,168,178,168,144, 91, 71, 17,184, 87, 81, 2, -204,234,117, 58,142,115, 78, 19, 19,240, 37, 75,162, 41,132,213, 97,146,133,240, 15, 69,233, 36,142, 61, 63, 75,179,233,153,229, -246, 78, 45, 56, 72,128,254, 71, 49, 28, 0,136,254, 34, 43,160,233, 13,119,205, 13,162,157,237, 23,207,159, 63,219,222,217,214, - 84, 86, 50, 72,176,128,190, 71,186,110,140,164,105,248, 28, 5, 83, 20,153, 75,240, 99, 27, 42,108, 3,156, 64,195, 54, 33, 8, - 77, 16,238,185,226,252, 12,101,150,138, 42,122,137,150, 53,212,200, 52, 52,169,164,162,171, 9,108,170,208, 71,217,184,213,250, - 13,160,222,181, 82, 83,196,214,186,108, 20,184,216,220, 66, 75, 20,165, 17,132,210,227, 0,245,214, 39,161,207,200,236,198, 13, - 71,134,162, 91, 67,203,246,157,107,149,229, 17, 26, 16,203, 16,153,157, 79,134, 94,224,102, 83,118, 60,232,220,191,251, 29, 14, -160,207,152,227, 89, 31, 53, 63,238,244, 59,127,119,255, 74,102,113, 1, 69, 49,213,195,254,219,223,247,183,147, 36,110, 86,155, - 74, 65, 65, 67, 37, 99,225,232,244, 16, 40, 66,187,126,253,199,251, 63,109,253,243, 43,202,143,136,146, 94, 40,114, 78,184,123, -252, 6, 62, 25,250, 3,184,240, 56, 13, 7,110,191, 94,198,185, 83,128, 1,224,227,157,211,163, 48, 10,116, 89,213,224, 87,100, - 29, 88, 66,251,202, 10,188,249,214,171,173,211,238, 49,176,123,107,100,173,181,214, 54,239,125,127,240,239,219,198, 98, 35, 74, -194,202, 66,237,143,131, 29,219,177,172, 65,111,165,222,234,218,189, 79,239,124,222, 63,123,167,219,217,222,187,189,132,152, 49, - 44,217,245,165, 85, 0,199,113,228,127,181,254,197,235,238, 46,220, 99,215,119,117,205,176,199,118, 99,241,106,148, 37, 81, 26, - 47, 45, 46, 65,200,111,141,207,224,245,205,111,127, 88, 41,213, 94, 30,236,212, 22,234,143, 31, 60,250,237,213, 11, 0,117,114, -155,139, 22,208, 73,202, 71,211, 22, 8,184, 36,225, 51,195,172,124,211,204, 51,175,128,239,210,188, 92,199,200,154,131,104,146, - 72,163,106, 41, 73, 39,161,231,124,168, 52,245,115,143, 29,237,186, 39,246, 36, 70,153, 64, 50,222,100,148,106, 16,114, 73, 97, -129,218,207, 17,217, 73, 10, 91, 70,215, 73,116,188,147, 21, 20,229,214, 51, 37,221,104, 87,110,215, 26, 89,170, 13,227,228, 74, -229,106, 28, 71,232, 84, 78,102,222, 88,201, 18,196,170,110, 60,221,127,217, 40, 55,191,124,248,245,147, 95,158,108,214,126, 62, -153,238,111, 5,127, 62,184,182,209, 71, 47, 7,234,230,150,242, 36, 44,158, 69,164,245, 82, 45, 85, 23,205,138, 31,248,128, 83, -192, 21, 96,239,222, 92,190,113,230, 58,156,180,154,197,146,174,105,126, 60,225,116, 12,109,199, 19,172,181,194,138,195, 53,140, - 67,207,139, 39,173,122,203, 40,154, 65, 18,222,106,125,130, 19,115, 35,180, 7, 73, 89,134,243,143, 18,119, 54,165,205, 47,230, -118,247,112, 87,186,118, 23,117, 86,232, 86, 81, 14, 7,187,245, 98,234,183,161, 44, 48, 23, 92,156,146,167, 43,188,136,198, 32, -142, 55, 12,147,144, 78, 50, 28, 16,108,215,219,220,208,102,198, 75,139, 36,229, 70, 46,183, 2,247,104,226, 31, 18,111, 42,164, -149, 41,105, 37,179,104,194,161,158,187, 94,231, 99,248,188,167,156,154,127, 36,233, 2,139, 69, 33,175, 56,139, 23,165, 75,124, -166, 1, 67,212,245,213,117,199,115,254, 19,128,173, 43,233,109, 26, 12,162,182, 99,127, 94, 99, 39, 77,186, 80,160, 75, 16,130, - 22, 40,168,148, 75, 17, 23,132,170,194,129, 51,226,194, 1, 9, 9,113,224, 55,244, 15,240, 83,144,184,115,171,170, 34,113, 0, -129, 16,221, 68,247, 36,109,227,186, 89,236, 36,174, 29, 51, 51,182, 43, 42,170, 86,234, 37,117,188,125,111,102,190,121,111, 94, -130,239, 97, 74,130, 60,131, 56, 82,211,114, 23,130,251,133, 16, 15,103, 54,164, 13,184,167, 56, 98, 77, 18,100,154, 74,246, 15, - 75, 38, 69,115, 56, 28,224,227,128, 49,228,249,173,248,178,255,203,244,211, 72,151, 80, 51,185,243,221,217,158, 41, 91, 62,229, -218,104,206,146, 86, 84,232,211, 45, 50,236, 20,197,247, 72, 49, 10, 6, 26, 74,140,244,151, 28,207, 78, 24, 87, 40,216,196,153, - 55,144, 57,162,151,102,167,129, 68, 89, 0, 47,162,249,103, 85,211, 79, 26,232,252,185, 22, 2,159,200, 90,105,200,170, 64,130, - 99,156,141,227,135, 93, 28,214, 26,241, 19,195, 51,101,231,168,220,112,183,142,156,223,149,230,190,221, 8, 0, 38,186,112,142, -161,201, 84, 75, 20, 46,233,202,112, 86,201,139, 82, 17, 93, 23, 5, 90, 85, 28, 67,218, 6,124,127, 47,131, 91, 46, 56,246, 0, - 78, 92,101, 16, 63, 56, 21,119, 95, 35,220,248, 6,136,151,132,147,250,113, 44, 99,147, 1,244,149, 40,171,225,152,110, 93,146, -178,138,164,201, 25, 83,145,113,162,164,206, 44,157,245,153, 56, 91, 70,135,194, 30,254, 55, 22,221,210,244, 36,146,188,114,232, -162, 43,147, 81, 33,252,240, 34,178,158, 3,234,176, 5,168, 6, 17,105, 60, 7, 64,179,162,240,186, 38, 49,114,161,194, 90, 15, -149,150,156,172, 8,186, 10,191,216, 85,211, 84,193,178,132,188, 33,105,122,198,208, 69, 93,197, 48,209, 67,237,126,207,239,112, -237,118, 47,242,185,160,121, 26,107,229,188, 54,138, 15,221, 78,211,212,114,134,154,237,248,174,144,176, 30, 0, 29,212,170, 83, -238, 55, 7, 14,142,203,177,109,102,236, 26, 6,127, 38, 71,166,152, 32,237,218,155, 10, 83, 80,214, 16, 69,111,159,190, 91, 94, - 89,242, 78, 93,141,105, 27,123,235,144, 4, 1,176, 70, 72,246,168,194, 49, 1,239, 70,139, 37,187, 89,243,124,156,249, 7,159, - 1, 0, 5,148, 28, 46, 92,190, 59,126, 27,150,122,195,109,118,131,110,213,169,124, 90,250, 56, 55, 61,191,117,184, 53,123, 99, -118,187,134,158, 12,166,130,183, 16,149, 77,228,158, 10, 49, 70, 97,104, 21,112,109,112,252,205,211,215, 43, 59,171,211,215,103, - 80,147,193,100, 40,196,225, 43, 32, 83,238, 55, 11,110,167, 14,231, 6,135,173,214, 43,240,178,237,219,229,189,195, 93, 72,219, -171, 39, 7,144,232, 65,121,119,191,116, 15, 46, 39,103, 88, 39,104,231,212, 88, 91,251,249,236,193,220,242,234, 87, 8,208, 19, - 35,183,198,138, 99,144,117,238,217, 21, 15,181, 51, 1, 19, 69,199,173,231,244,252,104,241, 74, 49, 87, 40,219,101, 56,103,159, -152, 96, 45,183,217, 14, 58, 80,162,193,138, 93,252,246, 25, 66, 17,220,190, 86,167,245,253,207, 15, 20, 60,194,107, 25, 4,147, - 35, 55,119,107, 59,240, 26, 15,229,175,118,131, 58, 78,254, 48, 6,172,199, 69, 78, 66, 97,106,108,185,148,110,160, 18,196, 83, -185,158, 33, 12,195,100, 22, 2, 54,127,186,234,108,253,114,182, 55, 28,167,222, 14, 2,140, 2,212,194, 69,209, 30,129, 51,113, -210,225,229, 97,136,236,162,198, 36,131,137,134, 44,235,140,161, 21, 0, 20,135,228, 79, 64,193, 36,108,113, 53,129,119,166,138, - 83, 86,223,248,129,189,141, 60, 88, 92,105,241,224,116,126, 80,181,150,182,215, 60,158,127,249,254,197,194,194,135,135,250,243, - 58,191,185,232,126,121, 85,122,212, 14, 91,124, 58,178,152, 50,214, 94,206,200, 73, 56, 43, 20,229,166,112,213, 1, 21,182,240, - 40, 13,197,132,226,161,214,170, 69,232,170, 26,230,179,125,240, 44,124, 36,106, 83, 38, 78, 57, 33,172,215, 99,247, 24, 34, 95, -136, 20,182, 0, 59, 52,184,215,225,149, 79,246,107,205, 26, 94, 27,122, 75,100,189,110, 59,177, 59,226, 98, 13, 87,143,182, 72, -132,196,177, 80,136, 93, 81,144,181,117,212, 60,228,163, 76,188,113,144,116,171,233,206,134, 49,169,145, 40,227,196,223,195,246, - 21, 57, 97,115, 94,187, 69, 6,150,233,254,115, 60,117, 44, 25,130,130,223, 82,208,250,176,181,203,159, 61, 30, 72,180, 67, 72, - 0, 2, 90, 8,189,116, 52,165,198, 12, 40,129,158,220,153, 95,175,172,209, 60,224,180,241,202, 37,246, 76,103,232,142,156, 72, -100,229,251,251,246, 30, 68,133,191, 2,208,117, 45, 61, 77, 68, 81,120,238,189,195, 76, 31,195,244, 33, 32, 32,181,138, 33,160, -129,132,128,184,209,141, 27,215,238, 93,185, 50,241, 47,184,117,161, 59,127,133,137, 59, 19, 55,110, 52,176,209,132,184, 64, 37, - 68,129, 0,173,138,208, 86, 94, 19,250,152, 41,115, 61,223,185, 45,190, 98,194,178,161,183,243,184,247,156,243,189,128,175, 66, -240,105,153,190,230, 87,249,127,242,231,222,125,186,223,233,255, 12,103,244, 63, 99, 25,241, 55, 24,123,122, 38,255, 97,114,240, -123, 19, 32,127,195, 93,229,127,102, 65,221, 69, 74,217, 5, 12,100, 23, 0,144,230,178, 97, 16,142, 31,236,218,180, 37, 34, 36, - 87,113,217,174,249, 50,176,118, 25,114, 27, 67,223,195,236, 82, 57, 94, 50, 91,163, 18, 9,108,253, 38, 3,104,191,244, 86,202, -156,150, 82,230,224, 90, 7,180,132, 94,164,182,136,210,118, 34,229,166,211,110,154, 30, 74,218,176, 29,229, 14,101, 10,223,130, - 13,122,142,181, 1, 57, 56, 50,129,158,107,170,144, 38, 7,175, 86,130,117,219,142,242,169, 20, 54,116,161, 83, 73,229,194,115, - 24,101, 81, 64,167, 1,156,236,129,203, 68,212,193, 1,206, 98,167, 12,118,233,118,152,109,174,148, 10,219, 49,251,151, 74,172, -193, 1,214,169,144, 46,203, 64, 11,215, 60,177,213, 54,171,165,250, 90,113, 55,221,113, 38,146, 90,217,146, 61,232, 4,235,112, -209,198, 32, 26,144,231, 51,198, 89, 27, 86,214,154, 25,191,154,147,175, 29, 24,233,128, 27, 9,136,152,137,146,108,182,236,114, - 30, 51,115,117,227,227,186, 85,231,204,115, 54,128, 22, 17,135, 31, 59,194,114,180, 14,246, 84, 51,182,246, 49,127,164,115,200, -167,242, 60, 70,182,125, 3,130,100, 44,162,167,125,210, 18,108, 21,144,112,220,193,236,240,215, 90,169,208, 87,172, 6, 53,139, -201,152, 9,183, 55, 12,235, 89, 47, 71,103,192,126, 80, 57,227,247, 83, 19, 16,115, 24,113, 15, 24,205,106, 36,119, 46,229,166, -202,213, 82,219,210,231,114,195,235,219,171,180,134,209,161,241, 48,106, 80, 9, 76, 31,246, 18,233,122,171, 94, 24,184,184,181, - 11, 89,255, 84,113, 42,104, 4,253,126,223,245,203,115, 79,231,159,249, 41,255, 75,181, 76, 85, 18,189,208,116, 45,206,102, 7, -168, 79,138,116,124,120,180,135,114,236, 36,162,155,120,247,246,189,249,183, 47,149, 22, 24,187, 75, 89, 57,216,205, 37, 51,153, -180,191,251,227, 59,221,141,217, 75,211,180,157,121,110,106,113,237,221,104,127,113,123,111,199, 79,122,116,177,111,205,220,124, -179,178,184,177,179,225,165,225, 44,198,177,203,140,148,161, 44, 80,125,153, 62,199,118, 75,213, 13,186,107,115, 99,211, 43,165, -213,176, 77, 79, 78, 79,206,203,228, 51, 3,203,165, 15, 51,163,179,239, 75, 31,111, 92,185,246,106,105,129,243,228,108,170,174, -147, 28,201, 77, 55,227,194,217,226,230,238,214,196,200,196,218,246,103, 91,186,172, 52,130, 24,216, 67, 98, 92,236, 32, 92, 79, -230,253,236, 65,171,118, 39,127,225,252,195, 49,203, 19,240,159, 57,110, 88, 17, 67,172,141, 8, 78,114,141, 16,127,199,161, 85, -143,226,102, 8, 69, 73, 11, 65, 52,207,151,202,149, 0, 96,145,113, 25,146, 92, 94, 42, 1,194, 37,103,193,112,120, 46,236, 5, - 65, 52, 16, 28, 29, 12,230,152,137,142,182,133, 49, 2, 3, 26, 4, 37, 20,181,142,173,188, 28,174, 7,231,247,227,118,130,211, -136,225,182, 7,135, 62, 49,222, 91,120,180,248, 98,179, 22, 47, 53, 23, 6,197,216,253,145,135,117,247,211,227,237, 39,175,111, - 61,168, 53,170, 70,199,110,114,107, 66,134,242,153,157,137,183,193, 75,244, 86,131,170, 97,194, 83, 75,199, 58, 66,204, 62, 32, - 21, 2,231,237,196,180, 26, 76, 70,209,177, 97, 28, 90,236, 16,203,227,111,182,110,228, 94,132,137,213,204,176,142,117, 7, 27, -235, 8,166, 90, 81,107,178, 56,185, 92, 94,161,254,192, 32,161,248, 14,252, 19, 43,227,250, 71, 72,210, 80, 45,104, 36, 89, 27, - 20, 35, 21,205,124,149, 25,167,240, 9, 97,198, 40,204,106, 17, 93,195, 90,219,226,116,209, 78,142,138,113, 33,238,148,142, 90, -158,134,240,153,140, 45, 30,233, 11,254,105,172,209,231,125,205, 17,238, 97,243,128,202, 50, 64, 26,138,225, 61,174,109,233,124, - 58,106,128, 60,150,134,172,207, 2,128,100,134, 77, 82, 83,249, 23, 70,205,159, 2,176,117, 45, 59, 77, 69, 81,180,247,158,222, -231,105,123, 11, 72, 17, 69, 3, 24,141,196, 71, 52, 24, 53, 14, 12,145,129, 63,224,192, 24,163, 14,156,250, 1,198,137,254,134, -126, 16, 26, 34, 76,140, 1, 42, 6,149, 71, 74,129,190,238,251,233,222,251, 28,168, 38, 36, 29,116,208,222, 54,247,158,179,206, -218,175,181, 36,127, 79, 36, 83, 62, 5,220, 13,213,192,210, 98, 49,252,128,137,107, 11,239,202,213,179,115,112,132, 42, 67,176, -254,239,117,106, 73, 86,149, 12, 29, 88,179,153,255, 95,187, 85,134, 39, 68, 81, 38,201,220,226,180, 50,173, 56,167,202,170,204, - 93,159, 40,212, 43, 39,241,140,200,124, 81, 5, 29,216, 4,132,117, 17, 4,107,185,140,135,196,184,174,184, 50, 44, 81, 32, 95, -126,228,101,121, 12, 39, 36, 16,204, 32,242,197,124, 28,208, 64, 33,150,143,138, 8, 24,239,104,142, 53,130,198,126, 74,233,237, -147,119,205,157, 77,146, 70, 72,117, 13,110,142, 22,192, 21,128,171,198,129,201,106,192,179,196,108,150,130, 38,167,112, 17, 13, -120,114,199, 59, 56,114,187,189, 32,216,237,186,135, 94,218,118,217,239,206,224, 87,215,219,104,121,187, 61,237, 79,183,239, 70, -128,140, 21,150,115,175, 31,106, 89,105,132,105, 13, 75, 7,120,171, 20, 37, 14, 92, 59, 78, 53,202, 2, 90, 12,237, 12,209,168, - 92, 37, 91,135, 20,211,162,128,119,213,138, 2,196, 31,109, 2,169, 89, 12,229, 77,244,156,146,233,133, 70, 51, 33,166,202, 96, -139, 36,176,147, 35,116, 36,196, 54,113,114,236, 35, 23, 94, 44,174, 38, 89, 9,207, 37, 84,243,151,189, 85,113, 74, 58, 51, 37, - 22, 33,148,167,190, 95,138,188, 60,140,242, 32,204,195, 16, 93, 6,177,136,141,121, 48,108, 24, 5,100,129, 31,178, 85,101,146, - 27,131,110,214, 13,212,126,112,132, 61, 57, 41, 58, 87,160,128, 40,245,212,170,172, 92,208, 48, 1, 68, 55, 21,171,134, 35, 27, -105, 18, 38,177, 99,143, 30, 14,218, 66, 43,207,212, 56,156,194,142, 93, 35,237, 10,224,227,134,165, 89, 85,203,177, 76, 27,159, - 84,154, 62, 91,120,202,117,254,101, 99,249,254,220, 3,192, 68, 56,178,220,176,111, 26, 54,236,127,224, 98,244, 52,179,231, 47, - 94,126, 93, 89, 70,151, 6, 12,151, 82, 64,103, 67,215,191,111,127, 91, 90,251, 76,226,224, 33,236, 77, 32,157, 16,195,249,161, -139,197,207,254,129, 86, 54, 6, 65, 15,158,227, 76, 99, 58,140,195,173,157, 31, 19,213,241,173,214, 22, 68,129, 26,182,168, 40, - 16,254,199,113, 0,104, 98,232, 0, 88, 12,168, 61, 38,151, 20, 54, 61,113, 17, 62, 6, 44,204, 13,220, 38,124,107,100, 98,191, -223,142,243,148, 2,237, 10,236, 19,128,140, 86,119,223, 48, 32,124, 51,239, 94,185,179,190,189, 14,171,235,252,216, 84,221,118, - 14,177,158, 92,132, 73, 0,220,112,241,250,194,230, 94, 51,140,130, 86,103,255,241,237, 69,128,114,244, 42, 49,249,205,233, 27, -240,255, 97,177,113,147,195,102, 6,160,132,243, 9,149,112,242, 20,238,210, 76, 99, 38, 73, 98, 52, 77,100,101,135,143,214,249, -120,152,186,243,103,230,249,189,172,228, 48,138,221,242,227, 61, 89,200, 55, 34,166, 35,112, 83, 72,201,198,210,217,218, 78,175, - 23, 36,178,250,136,188, 2,215, 21, 6,122, 12,231, 54,112,108,130, 28,178,116, 21,239, 69, 25, 21,130,209,126, 64,103,228, 28, -128, 61, 92,165,178, 34,157,148, 40,197,167, 38, 74,111,210,110,240,234,101, 55,232, 48,210, 88, 23, 70,134, 92, 55,154,157,189, -159,109,239,205,251,215, 31, 63,124,154, 50,175, 21, 90,127,201, 95,121,117,233, 97,146,123, 98,196, 69,178, 56,169, 99, 69, 34, - 39, 40, 20,147,204,158,155,237,249, 3,154, 45, 47,232,191, 35, 14,113,179,138,185,117,130,139, 84,228, 50, 4,232,146, 76,161, - 0,112,114,131, 16,148, 26,249, 96, 33, 51,178, 56,197, 78,189, 52,133, 16, 33,175,219,245, 71,183, 22, 86, 55, 87, 21, 85, 54, -203, 30,211,214,194,139,124,242, 26, 34,141, 90, 17, 25, 19,131,231,122, 37, 38, 73, 94,153,193,151, 85,142,226, 95, 44, 20, 89, - 1,217,235,129, 54, 65, 53,188, 72,158, 79,141, 93,240,226,129,160,190, 14,119, 76,102, 26, 6,118, 3, 34,112,219, 85, 44, 10, -210,111,101,216,194, 20,211, 80,149, 42,207, 8,101, 24,140,137, 25, 87,114, 13, 68,133, 68, 64, 42,180,240, 78, 19,180,174,205, -146,191, 2,240,117, 45,171, 77, 68, 97,120,238,153, 75, 50,105, 39,145,118,218,122,161,177, 22, 20,193,141, 11, 65, 5, 5, 23, - 62,130, 46, 93,235,202,157,224,198,167,112,225, 43,184,240, 17, 68,209,162,160, 40, 82,173,218,122, 75,109, 77,155, 78,115,153, -204, 37, 51,103,252,191,115,146, 26, 4,237,170,133, 36,164,201, 57,223,249,207,255,127,151,131,254, 59,147, 39,250,206,147,149, -123,134, 29,194, 38,235,241,140, 75,148,233,135,192,253, 63, 29,155,127, 84,223, 7,245,254,193, 76,120,178,113, 47,143,134, 4, -120, 20,155,236,135,203,127, 53,112,132, 82,108, 60,119, 46, 38,110, 3, 35,161, 42, 87, 64,128, 1, 8,215,101,140, 44,109,163, -130, 80,110,137,241,240, 44, 76,123, 44,205, 28, 12, 99,250, 88,147, 60,166,135, 1,190,249,187, 2,245,133,229,116, 79, 71,156, - 19,216, 73, 88, 6, 4, 28, 50, 80, 53,123,178,250,184, 23,131,245, 69, 43,159,158, 98,106,166, 36,105, 14,206,134,190,166,150, -218,253, 29, 90,255, 41, 34, 49,161,130,131,249,145,234, 34,175, 39,141,110, 93,191,243,242,237,115, 27,223,110,146,177, 1, 99, - 58, 45,144, 35,245, 19, 91,157,205,222,112,248,171, 63,216, 10,187,133,126,168, 57,216,107,165, 89, 51,140,127,118, 19,136,211, - 9,242, 36,165, 36,203,174,161,214, 77,189,110,149,234,102,105,138,126,183, 75,149,146, 50,229,168,150, 81, 24,180,137, 5, 57, -130,251, 13,100,160,176, 49, 17,227, 80,226, 62,104,156, 98, 84, 80,213,111, 91,138,227,208,181, 84,182, 44,197,208, 37, 75, 87, -109, 52,133, 16,233, 87, 49, 21, 75, 40, 74,169,192,230, 89,226,160, 2,241, 99, 50,162,131, 33,102, 73,154,247, 9,198,194, 60, - 77, 97, 93, 41,113,155,123, 75, 83,172,146, 76,101,123,217,144,142, 58,214,122,115,255, 75,208,139,179, 16,151, 17,158, 77,168, -194, 54, 0,221, 67, 25,220, 33, 58,252, 50,223,155,175,187,181,157, 96,155, 21, 66,141, 82, 32,142, 64,161, 98,100, 74,229, 91, - 96, 56,140, 84,213,184,118,249,218,202,234, 83, 97, 67, 22,244,118,184, 43,172, 76, 31,233,202,218, 10,231,115,230, 91,193,102, -146,196, 84,110,159, 58,118,122,183,211,130,201,112,184, 7, 12,201,115, 2,119,215,174,198,233,224, 88,163,113,225,236,165,245, -175,159,104,193, 84,204, 42,109,240, 90,217,131,200, 40,129,115, 17,202, 94, 58, 60,232,145, 89, 60,239,249,251,221, 93, 66, 34, -194, 11,122, 29,186,115,180,186, 45,250,223,151,230, 26, 51,211,254,242,252,210,183,237, 47,186,170, 94, 60,121,225,176, 55,243, -225,199,154,161,169,126,213, 47, 91, 54,157,220,182,110,157, 63,119,117,227,219,106,138, 49,184,126,180,126,100,183,211,134,197, - 99,212, 35, 28,255,184,181,230, 79,207,245,163,238,149, 51,151, 30, 62,123, 68, 7, 18, 21,254, 65,127, 15,121, 50, 81, 72,197, -123,173, 82,219,221,111,123,174,247, 99,167, 73,111, 50, 26,134,203,144,213,108, 10, 80,106,247, 2,145,128, 38, 99,228,227,210, - 62,239,192, 9,253,120,213,174,114, 95,229,125, 77, 83, 93,179, 66,117,101,158, 71,241, 48,176,116,135,245,182, 23, 47,207, 74, -117, 3,219, 72, 16, 88,184,206,125,164,190, 81, 4,128, 98,197,104, 69, 78,184, 92,118,236,247,223,131,189, 56, 85, 4,209,152, -207, 66,117,172, 25,212, 56,112,134,134, 15,148,170,200,197, 65, 6,144,194,211, 36,202,154,230, 89,230,225,233, 41,110,165, 94, -232, 60,160, 88,244,132,233,139,112, 97,152, 57, 31, 32, 67, 92, 43,208,108,169,210, 83, 27,179, 11,175,155, 27,111,218,155,183, -239,222,188,127,239,193,130,121, 82,214,187, 47,210,119, 55, 22,207,211, 13,111,220,190, 80,196, 45,159,137,234, 88, 98, 51,222, -108, 39,196,240, 38,133, 29,154, 80,157, 65,209,226,123, 62, 45, 12,158,222,199,193, 30, 70, 88,156, 63,204,120, 44, 49,227,163, - 54,169, 24,169,207,199, 29,111, 46, 28, 45, 4,215, 99,121, 97,185, 7, 93, 43,108,195,195, 52,124,245,249, 13,148, 56,136,109, -202,115,193, 85,225,216, 67, 69,223,226, 76,227,103,208,148,184, 71, 97, 49,134, 74,203,112,162, 12,220,121,215,169, 38,220,248, -119, 76,163,255,211,155,224,174,227,227, 6, 10, 97,183, 89,161, 27, 9,189, 90,171, 67, 27, 29, 54, 24,140,183,193,194, 36,140, -160,150,130, 48,133,224, 2, 36,119,137,147,189, 11,217,171,212,162, 52,242,189,185, 46,237,130, 63, 19, 86, 89,216,253, 42,210, -200, 50, 7,221,119, 42, 90, 81,230, 99, 36, 64,127,255, 22,128,176,107,233,105, 34,138,194,247,206,171,157,190,134, 78,203, 83, - 80,192,216,196,152,104,162, 4,194,194,133,113,105,220, 24, 92, 24, 55,250, 3,220,185, 55,241, 71, 24,127,145, 49, 46, 36, 68, - 8, 9, 72,132, 8, 5,108, 75,105,101,222, 83,234,119,206,109, 69,163,209, 93,155, 76,102, 50,115,207,227,251,206, 61,247, 59, - 23,245,119,237,143,243, 71,253,191,225,241,255,226,244,127,151,233,213,109, 77,105, 81,157,129,121,130,164,209, 86,192, 5,220, - 40, 61, 76, 76, 60,196,151,245, 99,117, 27, 95,112,208,220,114,113,135,223,118,115,185, 23,108,176, 3,253,235,120, 41, 54, 17, -210, 48,192,251, 1,218,120, 52,145, 89,137,103,224,241,153,132, 78,227, 99, 9,201, 92,242,153, 2,169, 82,112, 61, 68, 45, 5, - 27, 74, 4,211, 33,137, 49,141, 71,187,210,237, 72,102,157,148,121, 6,253,246, 6,194,247,195,197, 71,107,123,171, 36, 66, 68, - 50, 29,241,100,121,186,217, 57,230, 61,122, 16,204, 40,165, 20,156,250,137,159, 36,201,251,245,119,112,194, 4, 64, 4,246, 39, - 88,118,162, 23, 31,119,247, 45,189, 24,247, 66,199,174,152,134,117,226, 31, 81,141, 15, 1, 93,115,253,115, 47, 21,122, 39,238, -125,139,227,134,111, 28,135, 52,202,171, 13, 23,150,125,176,199,156,102,186,102,102,180,144,119, 76,179,100,100,179,125,163, 32, - 65,212, 77,252,176,117,147,140, 50,149, 41, 77,239,145, 81,208,163,142,151,132,222,118, 32, 70,199,141,214,132,188,172, 62,107, -187,139, 66, 22,161, 31, 65, 95,146,128,176, 65, 70, 69,170, 92, 44,212,148, 51,141,156, 5,140, 70, 26, 53, 21, 96,143,188,233, - 20, 13, 55,111,149,108,163, 96, 35, 67,200,172, 38,193, 54, 28,105,126,218,107,237,182, 61, 22, 24,226, 30, 54,118,161, 41,119, -198,201,150, 97,187,139,181,229,157,227,109,124, 90, 56, 42, 34, 84, 46, 67,147,246,166,202, 51, 69,155, 40, 20,214, 2, 48,121, -114,100, 26,128,221, 50,108, 63,246, 90,221, 22, 28,143, 66,191,208,166,170,151, 18, 18,226, 87, 37, 2,189,146,175,248,177,111, -103,237,218,244,245,174,223, 65, 24, 69,254, 88,185,247,184,106, 87,247, 91,251, 20,149, 12,152,120,180, 84, 91, 94,219, 92,221, -220,222, 16, 52,135,192,130,247, 58,116,224, 48, 36, 37, 39,238, 36,198, 13, 65,105,225,150,186, 26, 2, 71, 60,149,218, 99,176, -142,185, 76,254,217,253,167,158,127,214,244,218, 95, 27,123,159,235, 91, 85,103,108,102,252,138,236,165,103,129, 15, 91, 26,119, -198, 14,218,135, 49,139,106,194, 99,183,119,214,241,148, 59,215,110,239, 55, 15,130, 40, 2, 59,130, 61, 20,237,210,132, 59,118, -208, 58, 58,139,190,251, 97,216, 60, 59, 97,189,192,104,126,114,182,213, 33,141, 89, 63,138, 64, 84, 93,119, 98,229,193,147,221, - 47,219,120,169, 81,167, 74,133, 2,194, 95, 54,174,231, 17, 52, 2, 57,108,126,124,142, 10,208,189,116,170, 50,137,167,215, 79, -235,200,109, 72, 36,167,126, 27,248, 14, 15, 10, 88, 42, 7, 38,108, 90,166, 30,250, 55,238, 94, 22,115, 54, 59, 91, 95,168,198, - 43,217, 31,204,239, 25, 0, 64, 5,148, 37,192,185,176,204, 15,235,135, 97,122,174,168,155, 18,129,225,195,110, 36, 25,173,170, - 10, 61,206,214, 92,157,166,250,180,133, 79, 42,141, 66,198,154,169,140, 24, 89,227, 36, 36,173,167, 12,215, 96,126,138, 70,165, - 34,208, 61,187,157,192,223, 53, 80,150,229,218,194, 94,227, 32, 8,252,157,211,198, 70,179,241,242,213,139, 55,175,223, 94, 45, - 44, 8,163,251, 49,217,122, 62,187, 20,245, 61,238,111,254, 25, 66, 5, 55,245,151,184,103, 93, 6,164, 24,195,231, 74,104,231, -136,228,115,194, 56, 5,133,138, 18,178,110,133,217, 21, 30,191, 57,123,171,222,174, 3,171,148, 75,163, 72,171, 60,221, 71, 73, -146,139,193, 81, 81, 18,161, 26,161, 96, 42,206, 27,157, 38, 29,190, 81, 91,147, 82, 47, 23,203, 44,106,107,199,113, 2,202, 78, -144,142,199,107,192,157, 27,221,150,184,232, 95, 87, 82,142,192, 34, 36,126, 16,165,224, 79, 86,156,134,138, 37,177,252,193, 69, - 67, 11,255, 87, 19, 21,232,211, 3,161, 99, 89, 79,188,150,155,119,163, 56, 86,116, 3,136, 91, 14,229,158, 84,159,210,176,183, -142,232,133,161,153, 94, 28, 68, 52,243, 33, 29,212, 39,180, 33, 31,211,196,240, 96,144,186,188, 71, 57, 67, 69, 69, 41,126, 8, -192,216,181,245, 68, 13, 5,225,246,244,156,222,182,203, 46, 44,151, 69, 37, 68, 3, 49, 49, 33,190, 25,121, 48, 60,248,100,252, - 11,250,223,136, 15,198, 63,128,225, 73, 19, 19,226, 3,136, 18,215, 72,184,201,125,113, 47,176,221, 91,219,109,247,212,153,105, -217,213, 4, 18,225,137,228, 36,180, 11,103,230,155,153,111,190,143, 15,112,250, 77,155,165,183,254,168, 42,255,251, 21,223,116, -190, 71, 94, 45,195,230, 62,198,187,104,112, 70, 87, 17,216,194, 13,132,167, 12,250, 94,128, 89,253,159, 78,189,122, 43,253,242, - 58, 45, 17,155, 38, 78, 55,111, 99,139,219, 40,170, 35,147, 92,204, 32,100,119,163, 14, 10, 74,104, 2,194,111,143,245,145,204, -151,136, 84,166,142, 7, 73,131,133, 38,254, 49,246,241,209, 69, 68,145, 57,103,180,209,110,196,212, 60, 99,168,224,233,195, 95, -253,237,167, 55,112, 18,106, 34,114,172,245, 15, 42,251, 40,128,163,178, 17, 43, 95,239,214, 80,124, 45,196,105,137,138, 66, 43, - 82, 99, 80,226,233, 30, 58,225,146, 54, 29,181,201, 93, 31,151,176,202,238, 57, 57,184,226,194, 39,164,223,110,132,250, 68, 0, -218, 56, 45, 28,133, 74,167,223,215, 74, 77,247,232,178,229, 75,236,193,113, 44,147,149, 17,203,204,153, 98, 54,155,157,206,102, -108,219, 54,152, 54, 97, 24,245,160, 7,119,203,138,185, 1, 15,175,160,208, 37,132,236, 86, 68,185,197,147, 80,255,133, 34, 52, - 76,174, 11,124, 0,142, 38, 37, 40,218, 97,219,100, 95, 14,175, 17,177, 30,128,135, 16,185, 95,126,136, 12, 6, 0, 3, 80,149, -123,232, 13, 70, 31, 77, 4,129, 9,225, 36, 60, 97,222,214,167, 28,163,214,240,214, 15,174,160,190,135,242, 96,122,108,102,251, -188, 68, 8, 9,179,220, 97,245, 0,247,143, 66,239,199,241,247, 59, 99,247,234,205,106,140,114,172,240,240,186, 47,253,122,167, -106, 48,195, 68,235,109, 99, 97,230,209,246,201, 79,128,207,164,201,199,175,154,117, 90, 94,243,178, 86, 14,254,201, 33,250,163, -153, 34, 93,206,253,202, 30, 90,170,118,154,149,171,223,134,176, 80,131,215,180,150, 87,151, 31, 20,231,154, 94, 19, 64, 46,106, - 98,197,225,214,209,150,110,152, 36, 49,168,195,177,209, 76, 65, 8,126,117,209,240,195,224,245,243, 87,135,231,135,232, 19,194, -212,141,221, 13,184,213,109,180, 72,230,142,200,118, 17, 7, 64,193, 17,174,108,172,182,218, 46, 36,158,185,226,125, 67,229,133, -194,212,210,194,210,215,210,218, 73,253, 44,240,125,207, 12, 0,192, 62,125,248, 36,232,247, 54,118, 54, 29,203,209,163,248,184, -114,106, 26,118, 98, 63,244,114,241,197,202,231,247,123, 23,135,197,124, 17,110, 31, 36,120, 23,234, 51,166,204, 23,231, 23, 31, - 47,157,125,120, 7,191,174,224,140,230,103,167, 26,103,151,189, 78,203, 49, 51,144,126,202,245, 50, 68,162,114,173,156,119,178, - 58,227,185, 76,214, 11,123, 93,114, 8,131,220, 80,200, 21, 26, 45, 12,232, 92, 97,144,192,142,106, 71,132, 11, 89,199,111, 77, -142,221,157,152,154,254,181,191, 14, 53,102,135, 91,202,142,171, 60, 27, 71,144,222,215, 49,190,107, 56,250, 64, 70, 13, 31,184, -180, 81,183, 64,160,119, 65,235, 91, 21, 42, 51, 93, 99, 33,133,120, 25,167,179, 58, 70, 43,123,170,148,241,223, 23, 31, 96,142, -166, 90, 66, 32,161, 86,104,199, 29,183, 89,247, 0,247,100,112, 98,131,223,130, 37,128, 72, 21, 34,154, 20,166, 63, 62,123,121, -186, 11,159,210,199,210, 26, 3, 12,101, 32,146, 52, 21, 27, 71,160, 74,236,240,108, 11,181, 75, 77,162,236,147,138, 42,210, 14, -200,154, 12, 73,196,220, 50, 76,191, 31, 0, 32, 72, 92, 4,100,202,254, 80,201, 76,152,246,105,211,192,141,132,101, 50,122,235, -127,217,219, 20,156, 67, 73,238,187, 21,153,108,248,167,176, 93, 73, 61,137,224, 48,146, 41, 98, 73, 46, 96,215,163, 62,170,129, -229,112,237,177, 29, 52,137, 25, 41,227,116,208, 74, 38,115, 3,103,137,196,216, 16, 15,224, 20,132, 18, 9,242,106, 18,215, 11, -117,208, 13, 75,236, 61, 83,206,126, 34,235,151, 48,132, 36,192, 62,146,112,149,168,234,200,181,138, 91,213,200, 73,237,154,205, -151, 20, 27,248, 2,110,215,197,153,153, 12,135, 20,201,120,216,209, 86, 83,245, 1, 37, 49,199, 6, 32, 2,175, 82, 67,243,113, -245,143, 0,148, 93, 75,107, 19, 81, 24,157,185,119,102,146, 76,155, 54,141, 77, 95, 80,108,139, 40, 82, 90,172,138,251,130, 20, -220,248, 7,186,244,119, 8,254, 17, 17,212,181, 32,184,234, 66, 16,108,233, 66, 69,177, 47,171,180,208,103,210,164,143,188,230, -145,121,196,239,124,119, 82, 91, 17,209,101,102, 51,147,153,123,207,253, 30,231, 59,199, 56, 39, 83,234,255,134,236,127,167,183, -255, 39,236, 95,130,254,142,138, 36,208, 31,226, 4, 24,252,213,219,127,232,190,254,214,221,189,200,108,212,213,185,153,232,233, -116,252,168,124,244,204, 66, 48,187,152, 23,198, 42, 11,192, 31,183,237,225,189,199,130,118, 78, 34,178, 44,148,138,126,156,182, -178, 80, 41, 96,113,184, 14, 87, 73,156, 84,203,211, 19,119,190,239,173, 83,120, 5,249, 74, 97,112,191, 9,119,113, 2,151,139, -250, 58,165, 2, 77,191,238, 7,173, 82,112,136,168, 71, 4,138, 21,133, 2,166, 38,225,137,141,117, 8, 77, 63, 36, 29, 97,162, - 47,199, 93, 80, 93, 77,168, 9, 61,146,112, 93,141,208, 0,144,248,252,146,229,172,219, 34,202,219,160,171,214, 90, 49,221,128, -194, 67, 39,136, 8,140,138,177,246, 45,172,168,211,156,144,114,106, 48, 71, 15,175,103, 44, 2, 87, 3, 70,239,210,114,193, 80, -179,133,236,205,164,174,103,179, 40,127,107, 24,112, 70,132, 77,184, 3,105, 52, 35,116,227,170,135,240,199, 3, 41, 73, 4,129, -198,171,154,199,234, 88,140, 10,100,178, 22,154,168,166,122, 73,186,214,111,167,122, 76,203,245,227,165,181,163,163,134, 47,101, -218, 54,173, 74,189,184,121, 0,129,114,232, 92, 3, 22, 4, 48,218,115,108,195,110,248,141, 58,124,121, 66, 58,249,232,200,172, -121, 53, 24,234,182,188, 76,151,221,112,170, 20,158,187,129,215, 12, 28,202, 64, 83,194,156,155,153, 91,222, 88,162, 43,202,100, -167, 88, 61,116, 60,247,220, 6,157,163,120, 37, 62,138,192,140, 98,243,186,215,180,173,238,249,217,249, 39, 47, 30, 79, 94,157, - 36,200,238,207, 22, 40,252,167,252, 69,178,188, 76,169, 90, 36,220, 63,166, 45, 4, 89, 58,237,233,194, 51,137,161, 7,127,180, - 48,150, 65,189, 50,116,124,167,175, 43, 63,220, 55,188,185,191,129,213, 99,152,197,179, 82,198, 72, 15,230,134, 6,122,134,214, -119, 87,118,203, 59, 95, 55, 63,140,228, 70, 92,223,177,205,244,221,107, 51,139,171,139,159,183,190,140,246,143,210, 79, 24,225, -166,186, 11, 61, 87,104,253,213,156, 58,125,151,143, 27,159, 44,211, 74,155, 86,172,133,251,229, 67,104,137,211, 83,107, 50,155, -234,126,253,238, 21,189,118,195,150,251,229,131,241,174, 27,219,149,149,151,111,158,223,159,158, 53,112, 26, 5, 61,153,236, 81, -173, 98,154,169,135,247, 30,188, 95, 91,246,188,106,206,238,173,212,202,183, 39,110,237, 86,246, 40,107,161,248,157,130,189,238, - 20,242, 30,201, 72,194, 9, 80,171, 48, 48,196,181,230,182,103,118,109, 47,236,141, 63,186,169, 17,152, 70, 77, 30,171,227, 5, - 46, 56,132, 71,147, 30,134, 79, 90,175,137,106,244,234,233,219,229, 29,184, 38,104, 10,250, 58, 44,112,110, 64, 94,172,215, 42, -174, 30, 44, 45,165,200,103,109,153, 54, 79, 93, 39,196,217, 47,121,240, 22,153, 27,247,242, 89,209,150,125,220, 93,183,156,179, -167, 42, 80, 27, 20,204, 88,145, 17, 71,217,106,223, 55,181,192,210,140, 61,111, 39, 98,145, 28,193, 78, 85, 58,119, 65,245, 56, - 66, 58, 29,105,199,245, 99,218, 48,244, 55, 67, 33,198,243, 99, 63, 74, 91, 62,170,215,176, 1, 11, 49,194,129, 34, 76,172, 84, - 23, 48,222, 9,151, 79,118,147, 4,103,191, 29,199,231, 40,153, 4,221,202,225,136,190, 17,248,123,148,183, 24, 20, 20, 43, 87, -111,110,153,106,152,235, 10,195, 70, 84,199, 19,112,107,245, 23, 71,177,157,148,116,218,137,113, 90, 98,235, 77,121, 0, 20, 92, - 65,240, 53,242,217,126, 90, 54, 54, 70,228,154,106,182,203, 72,124,151, 84,110, 36,212, 88, 12, 51, 65,116,199,107,170,162,116, -164, 92, 2, 65,169, 96,243, 52,142, 98,206,217,248, 29,203, 37, 62,109, 47, 11, 1,136, 11,122, 55,137,161,117, 59, 62,107,158, -112,115, 5,151,126, 10,192,218,181,236, 54, 13, 5,209,107, 95, 59,177,157,135,147, 62,210,160, 6, 53,173, 64, 2, 86, 44, 88, -241, 9, 72,172,248, 1, 62,141, 47, 96,129, 16, 18, 32,182, 8,181,149,162, 46, 10,105,213,210,166, 33,143,230,221, 56,142,227, - 55, 51,115,157, 20, 4, 27, 36,126,192, 78,174,231,158, 57,243, 58,163,176,127,161,237,255, 21,226,127,123, 69,154,163, 34,188, -131, 27,189,101,170, 78,135, 44, 81, 58, 67, 59, 17,186,254,209,223, 32, 62,102,202, 74,224, 44,171,229, 1, 42, 81, 57,242, 87, - 42, 79,199, 37, 90,224,241,160, 34,161,112, 17, 67, 8, 31,134,225,178,194,141,198, 9, 23, 30,139, 21, 33,234,106,218,145, 37, -114, 48, 69,221, 76,169,122,127,122,205,104, 87,197,209, 69, 13,224,102,103,179,218, 28, 52,133,211,164, 49, 66,217, 71, 67, 80, -225,109,147,197,152, 26,253, 68, 59,166, 84,206,151,193, 61, 80, 34,221, 35, 81, 13,137, 90, 41,152,248, 59, 34,181, 20,208,176, - 50,214, 53, 17,197,169,213, 24,192,128,241,189,194,163,230,244, 28, 21, 39, 89,192, 3,120, 5,238,244, 38, 33,245, 72,161,197, - 12, 92, 44,153,167,233,123,206, 69,125, 41,172, 15,199, 58,119,113,146,147, 30,140,140, 70,198, 30, 14,240,111, 16, 25, 0,246, -223, 47, 22,171,249, 92, 1,171, 11, 89, 83,194,220, 11,112,121,148,227,103,193,204,241, 44, 41,158, 99, 23, 81, 64, 89, 34,154, -189,194,235,138,155, 7, 66, 3,184, 23, 7, 55,149, 77,113,224,143,182,227,239,127,239, 15, 45,112,158, 14,151, 82,158,103,207, -252,137,174,230,140, 84,174, 53,186,130,179,214, 84,109,238, 58,129,191, 0,128, 51,180, 2, 88, 60,254, 36,236, 88,225,147,217, - 72, 86, 20,242,197,112, 55,217,110,121,239,122,220, 61, 60, 59,128,203,112,167, 80,113,252,249,199,218,251,185, 55, 23,210, 5, - 3,171, 79,101, 52, 29, 92, 21,237,215,214,109,212, 36,137, 0,151,193,201, 25, 90,182,127,211,129, 79,144,210,244,183,251,111, - 54,138, 91,155,102, 9,133, 56, 66, 63,209, 98,141, 2, 85, 53, 82,146, 2,241,109, 62,179,182,240,236,148,162,128,165, 61,188, -251,160,222,248, 58,153, 13,189,128,186, 57, 89, 56,180, 6,192,178,205, 76,209,114,166,229,181, 74,103,208,128,208,219,118,167, -167,237, 19,143,182,223,192,175,153,185,182,198,213,157,114,181,209,109,112,206, 95, 60,125,254,250,243,187, 98,190,232,186,110, -103,220,110,223,116,101, 17,249, 73,114,107,212, 65, 85,219,200,223,200,172,195, 53, 69,201,217,216,203,166,205,246,168, 11,177, - 66, 33, 83, 0,194,190, 91,170, 86,228,226, 17,138,186,241, 47,103, 7,149,210,206,200, 26, 67, 40,224, 97,213,217,105,244,174, -198,246, 4,252, 49,192, 55,124,253, 31,131, 22,206,187,179, 8, 9, 7,147, 12,213,160, 46,239, 72, 76,191,135,129, 95, 63, 61, - 84, 32,212,195,137,144, 94,115, 24,109,191,250,148,122,249,140,161, 41, 77,152, 66,120,193, 41,179,141, 68, 0,240, 60,195,106, -221,139, 15,231, 71,245,222,208,113,129, 7, 96, 85,131,244,130, 66, 95,192, 67,210,130,181, 26, 60,164,116, 39,110,230,171,108, -228, 23,114, 52,181, 44,192, 85,128, 72, 21, 1, 50, 22, 98,108,162, 77, 13,204, 78, 33,171, 76, 43, 94, 52,179,176,184,162, 25, -243,133, 7, 55, 75,147,211,158, 23,106, 58,238,198,154,176,217,182, 86,217,159,123,102, 58, 31, 68, 46, 46,170,197,192, 55,111, - 26,153,147,206,101,110,189, 60, 31,245,113,136, 86,112,246, 40,194,138, 8,249,157, 39,247, 30,215, 46,143,225,202,109,153,165, -227,214, 55,146,131,163,125, 73, 1, 9,212,203, 44,192,108, 30,241,249, 56, 73,231,138, 33,220,248,182, 29, 3, 66, 55,197, 76, -155,125,183, 23, 45,241,145,203,136, 33, 40, 43,164,101, 33, 2, 24,206,110,100, 41, 94,201,210,222, 50,107, 81,248,165,149, 99, - 73, 71, 31, 29, 23, 60, 48,147,198, 33,231,180,162,217,174, 35, 88, 38,240, 27,176, 64, 63,116, 69,121, 52,150,150,210, 95,171, -161, 78,137,141,173, 49, 91,110, 64,103, 98,246,145, 45,197, 10, 4, 8,178, 68,145,230,143,150,147, 68, 14, 82, 74,134,255,209, - 59, 80,228,156,232, 48,254, 20,128,177, 43,217,109, 34, 8,162, 61,187,103,139, 23,217, 78,162, 36, 10, 72, 8,129,132,132,196, - 1,248, 4,238,124, 2, 23, 14,220,249, 8,126,129, 63, 64,226,130, 16,156,224,136, 34, 20,150, 3, 39,135, 4, 19, 98, 99,103, - 60, 30,207,234,217,122,168,234, 30, 39, 1, 36,196,197, 39,123, 70,158,169,126,253,170,235,213, 43,249, 31, 80,254, 63,205,171, - 56, 39,144,169,206,255,255,252,253,239, 47, 48,187, 65,156, 50,203, 82, 12,136,176,172, 30, 80, 75,184, 18, 86, 44, 47, 8, 49, - 47, 94,149, 89,146, 85,171,147,119, 41,198,153,132,133,120,118, 79, 62, 24,182, 18,121,167,210,170, 29,160,202, 80, 62, 82,169, -178,201,166,238,242,231,194, 93,195,208, 16,101,183,123,105,226,141,121,161, 3,226,213,141, 1,175, 61,220, 39,196, 74,198, 41, -175,112,125,177,109,117, 32, 53,166, 56,208, 78,165,216,222,153,226,123, 22, 11, 69, 82, 32, 24, 21,173,129,149, 22, 84, 45, 10, - 99,111, 68,152,148,150, 77, 74, 1,212, 5, 24,205,184, 29, 3,119, 64,101,169,111, 9, 36, 98,137,181, 72,212,162,211,180, 54, -110, 61,240,156, 66, 72, 85,201,192,245,140,103,140,171, 10,137,248,219,246,205, 9, 22,246,204, 99, 41,131,132, 37, 9,229,180, -102, 93,229,133,183,136,148, 77, 8,178,232, 24,182,247, 12, 88, 7, 19,161, 27, 13,224,224,189,230,218,186, 97,108,153,230,141, -205,158,109,104, 61, 67, 3,188,103,102,141, 66,138,107,157,194,219, 65,143,251,130, 2,222, 14, 70,193,225,137,239, 44,168, 27, - 5,154,108,221,187,121,255,213,254, 51,128, 63, 69, 52,128,196, 65, 48, 76, 23,147,146,157,119,226,248,108, 44, 82,169, 16,116, - 57,214, 33, 50, 73,132,199,149,251,177,111,234,118,156, 44,116,205, 6,186, 58,143, 93, 31,211, 79,148, 87,195, 51,153, 46, 70, - 56,135,192,108,209, 66,107,155,109, 47,246, 32,149, 6, 18, 29, 36, 11,143,117, 45, 54, 84,147,177, 84,172,163, 1, 88, 83,218, -129,159,234,154, 9,160,185, 63,120,127,117,251,250,254,224,131, 44,107,113,226, 75,146,166,235,198, 18,147,179, 42,202,162,182, -221,206,178,165,132,239, 8, 23,108,123,173,163, 53, 44,108,251,132, 48,192,177,121,151,199,179, 99, 21,123, 4,148, 44,207,134, -147,111, 29,187, 57, 15, 92,216,119, 85, 75, 53, 27, 56, 98,194, 82, 27,119,175,221,121,251,233,205,233, 98,210, 54,154,176,129, - 61,127,247,114,230,159, 90,200,187,203,110,179, 7,240,130, 73, 3,202,150,164,148,157,162,148, 5,237,119,250, 7,211,239,134, -170, 57, 97, 88, 85, 62,124, 71, 83, 53, 77,209, 79, 28, 28, 35,197, 44,162, 48, 99, 75,211,100,226,252, 0, 52,199, 33,203,130, -120,186,112, 0, 95,176,195,148,165, 44,112, 65, 55,114, 33, 96, 22,161,135,253,140,192, 36, 98, 15,239,146,151,104,231,193, 3, -152, 20,182,209,247,146,201,237,141, 43,110,184,247,232,241,139,135, 95,142,110, 61,121, 64,200, 6, 17, 61, 98, 68, 68, 21, 9, -236,207, 77, 70,162, 94, 15,246,158,238, 15,131,180,132,204, 67, 87,146, 96, 57,153,251,105,150,107,170, 44,217, 22,138,235,233, -121, 21, 81, 96,243, 60, 1,196,119, 90,205,205,158,149,228,233, 50, 46, 36,148,153,225,241,188,196, 26,228,169, 84, 73, 37,243, -137,226, 94, 43,104, 31, 45,202, 85,121, 50, 26, 82, 42, 65,118,149,164,115, 88,228,166,108,120,105,212,222, 89,131,144, 12,136, -219,111,160,235,125,203,178,187,118,107,232,133,144,168,194,223,159, 69,115, 93, 86, 58,221, 77,147,146, 99,119,140, 74, 25,166, -122,142,210,152, 21, 21,171,145, 59,141,178,100,153,101, 51,223,201,153,231, 23,158,232,210,210, 52,172,221,245,221,143, 71,159, - 69,194,193,189, 62,199,103,124,251,108,248, 27, 93,233, 68,242,105, 56, 21,200, 57, 21,135, 79,100,114, 2, 42,154,146,186,141, -137,252, 9,238,252,247,124,191, 32,194,118,119,203,241, 29, 8,117,248,215,192,253,191,254, 60,132,216,100, 13,116,245,178,139, -243,136,123,253,114, 59, 63,110, 93, 2,123, 98,193,165,155, 12,166,144, 66, 17,126, 48,134, 36, 84,134, 8, 44,151,132, 41,143, -107,144,175,170,218,255,145,105, 47,117, 69, 79,138, 68,168,197, 40, 43,101, 74,125, 71,158, 34,212, 0,249, 75, 0,194,174,101, -183,105, 40,136,222,235,231,181,227, 56,143,166,109, 26, 85, 69, 5, 1, 18,130,138, 5, 72, 72, 72,124, 1, 75, 86, 44,248, 26, - 86,108,217,241, 3,192,154,138, 85, 97, 85, 4,173,128, 66,145, 10, 40,133,190, 8,161, 73,154, 54, 79, 39,118,108, 51, 51,215, - 41, 20, 9,213,221,214,117,125,111, 50,247,204,204,153,115,180, 83,170, 39,167, 93, 58,214,202,163,255, 16, 25, 79,191,228,201, - 35,116, 27, 2,154,116, 1, 12,217,159,200, 46,175, 0, 13,246,254, 78, 23,142, 37,221, 21, 34,191,203,217, 1, 78,166,114, 36, -171,119,242,201,150,145,234,251,221,196,206, 68,246, 78,105,223, 33,203, 78,184,162,116,252,106,216,211,235, 26,170,181,249,171, - 60, 86,160,142,149,164, 63, 34, 45, 77, 98, 42, 25,197,147,153,233,141,189, 13,162,151,122, 62,132,190,113, 35, 4,118,102, 24, -162, 80,182, 55, 28,228,156,137,246,160, 29,199, 35,162, 43,114,105, 55, 19,224, 15,188, 76, 24,112,242, 22,103,164, 85,160, 48, - 97, 51,157,166,137, 40,253, 67,249, 26, 29, 29,186,117,234, 35, 88, 72, 75, 8, 5, 79,212, 13,249,104,132, 52, 71,148,195, 36, -237, 45,185, 28,170,154,228, 40, 40, 15, 47, 27, 80,128,198, 73,162,151, 73,194,176, 92,176, 8,118,139,216,239, 66,141, 52,108, - 81,249, 97,220,136,130, 70,181,254, 57, 8,209,139, 15,126,217,208,109, 91,164,116,221, 21,166,227,216, 89,161,151, 12,187,233, - 5,173,222,112, 24, 4, 52, 26,140,125, 27,149,153,240,200,222,160,249,108,229, 49, 37, 22,112,119,111,224, 7,144, 7, 24,186, -240,144,134,137,196,181,206,160, 13,255,102,198,201, 67,144,133, 60, 1,155, 72,184,174, 81,215, 3,100,132,224,107,232, 15,106, -157,253, 68,199,141,236,188, 33,146, 2,210,159,201,207, 86, 14,126, 64, 18, 45, 76,209,199, 94,119,224,218, 89, 47, 24,216, 34, - 3, 11, 43,139,168,105,145,246,208,152, 23,153,213, 29,239, 16, 14,143,233,236, 12,224,232,218, 81,213, 50,237,130, 59,185, 93, -219,138,208,174, 65,133,227, 51,136,131,115,197,243,111,190,190, 42,230, 75,205, 86, 67, 8,241,242,195,139,188, 83,208,208, 89, - 30, 82, 43,101,123,255, 91,218,116, 0, 33, 10,213,224, 56,139,168,180,122, 45, 13,151, 24, 3,238,252,228,153, 27, 23,174, 47, -174, 46, 46,189, 95,154,206, 20,114,169,172,107,187,181, 86, 13,206, 45,216,134,107, 11, 55, 39, 83,217,229,245,101,216,172,118, -165, 3,119,185,104,238,113,128, 68, 68, 28, 87, 54, 51,150, 3, 47, 5,175, 96, 25, 98,255,104, 31,107, 11, 33,121,103,171,234, -213,179, 11,195,145,255,182,252, 78,227,198,220,196,236,167,221, 47,230, 40,132, 40, 79, 67,244, 62, 86,232,232, 67,142,148,198, -104,132,180, 96, 18, 86, 68,103, 74, 22,102,108, 55, 73,134, 20, 20,192,130,239, 65,218,114, 11, 86,198, 25,109,173,180,118,246, -116,245,193,195,231,119,158,190,190,125,255,174,184,119,139,177, 18,211, 6, 40, 58,198,122,193,163,213,229, 39,107,112,168, 26, - 66,247,194,176, 94,107,175,174,111,247, 24,155,102, 44,199,152,113,197,140, 35,233,224,153,140,189, 2,218,176, 53,237, 82,105, -194, 18,106,187,143,190, 19, 38, 26,161,210,196, 18, 75,132,122,169, 20, 2,112, 0, 97, 59, 66, 54,206,225, 22,115, 68, 9,180, -194,170,135, 85,204,106, 24,207, 58,110,195, 59, 42,206, 95,102,216,145,237,230,140, 92, 61,168,151,212,139, 26,227, 62,169, 70, -146,150, 22,203,186,249,230,238,102,237,176, 30, 40,156,228, 4,162,144,230,105, 81,220,131,241,157,198, 46, 68,117,134,254, 77, -113, 62,157,135,143, 7,100, 93,229,159,101,216,169,181,239, 31, 17,185,147,104, 76,204,146,146,251,184,120,155, 4,156, 98,174, - 4,123,135, 85,120, 8, 6,227,112, 56,229, 78,213,186, 13, 41, 78, 64, 4,124, 73, 94,137,146,248,158,232,238, 32,195,146, 39, -193, 29,223,184,210,172,132, 18, 47, 51,249, 5, 68,160, 73,186, 5, 18, 83, 41,210,218, 19, 86,105,174, 48,183, 87,223,213, 52, - 13,114, 68,128,249,136, 3,232,207,242,228,249, 81, 60,150,175,180, 13,225,247,250,156, 39, 41,254, 49,108, 63, 86,167,116, 83, - 89,175,229,177, 19,140, 24,229, 31, 58,162,188,126, 11,192,216,181,236, 54, 13, 68,209, 25,143,199, 78,154, 58,233, 19, 20,218, -144, 74, 45,229, 81, 85,237, 10,129, 0,169, 95,128,216, 33, 54,108,249, 5, 88,118,193, 15,192,146, 31, 96,129,128,111, 64,106, - 43,168, 88, 32, 21, 9, 40, 15,145, 74, 33, 46,109, 30,173,155,216,177,199,195,189,215, 78,177,160, 18, 72, 93, 85,145, 44,207, - 36,103,238,185,115,238, 57, 39,232,223,255, 31,220,209, 29, 76, 71, 39, 54,106,248,191, 48,157,167, 75,128, 31, 68,157, 73, 28, -102,196,236,252,239,143, 27,127,130, 59, 44, 98,156, 56,201,240,212,145, 39, 41, 56,168, 5,207,211, 11, 7,134,102, 96, 17,161, -124, 30,240, 37,162, 40, 18,157,177,160,167,242,132,226,198, 81,162,163,105,220, 57, 25, 35,202,154,212, 15, 46,119,233, 78, 20, - 79, 69, 33, 44, 43, 23,163, 65, 71, 72, 55,177,241,177,103, 4,101, 19,198,128, 68, 8,180, 88,197, 32,255,128,218,187,165, 1, -150, 2, 79,170, 32,199, 34,137,186,113,141, 82, 38,203, 66, 9,189, 13,220, 64,135, 82, 71, 22, 14,174,114, 27, 77, 33,149,169, -148, 9,224,111, 25, 54,105,192,173,156, 9,149,149, 44,228,173,177,146, 44,149,196,136, 35, 70, 75,210, 25,198,241, 81,131, 9, - 96,205, 0,100, 74, 9,108, 99, 50, 82,111,226, 96,138,193,129,103,162, 80,153,212,201, 40,123,227, 36,207,199,188, 0,120, 62, - 84,234,240,103, 73,124, 0, 60, 7, 3,153, 76, 1,244,190,199, 84, 39,236,187, 61,239,251, 65,211,243, 2,203,180,240, 68, 73, -162,153,201,146, 36,201,106, 67, 23, 26,236,242,203, 62, 69, 63, 99, 79, 89,216,135, 93, 28,184, 80,116,255, 5,155,208, 11,188, -235, 23, 87, 72,150,142,101,145, 64,229,180, 72,157, 84,181,158,112, 38,160,254,197,233, 92,153, 35,208, 86,211, 99, 85, 88,189, -168,143,198,182, 64,200,224, 29, 96,133, 58, 94,167, 60, 94,118, 91, 63, 48, 27, 10,117,251,137,134, 53, 94,172, 46,254,108,187, -176,224, 11,149,165,253,195,253,179,167,171,219,245,143,176, 18, 65,216,167, 43,113, 14,108,221, 50,109,248,105,213,155,117,178, -163, 9,225,119, 37, 12,121,121,254, 42,112,240, 3,191, 35,128, 59, 42, 52, 4, 86,180,155,137, 89,138,162, 88, 18,192, 98, 74, -136,228,206,208,240,204,228,204,250,135, 13, 76,131,145,242,200,239,194,209, 50, 82,112,206,149,103, 67, 21,217,166,220,120,191, -190,227,214,150,231,150,191,184,223,128,107,195,139,163,241, 55,154,208,225, 64,163,231,123,149,241,169, 70,123, 23,216, 3,188, - 81,222, 26, 18, 92, 0, 51, 0, 84,130,157,168,237,214, 46, 76,157,175,237,238, 68, 90,181,188,246,124,121,174,209,118,251,176, - 2, 49, 54,151,224,203, 3, 95, 17, 56,120,170,147,232, 98,198, 82, 23,218, 24, 14,152, 56,142,132,105, 54,189, 38,148, 2,151, -206, 46, 0, 7,194, 28, 14, 88,193,222,193,232, 80,253,117,195,133, 98,248, 86, 55,114,246,186,107, 47, 55, 27,171,207,246,222, -108, 85,194,160,245,252, 29,123,250,105,237,213,118,207,198,166,121,136,169,170,186,218,236,222,223,239,220, 97,236, 38, 99,155, -140,189,149,198,153,130,237, 19,110, 41, 96,111, 64, 65,134,243, 75,149, 73,101,192,142,244,165,201, 29,211,204, 73, 19,131, 4, -200, 26,145, 66,123, 83, 85, 50, 39,192, 4,196,183, 76,163,148,183,109,102,213,246, 10, 17,154,214,152, 73, 12,131, 17, 25,143, -182, 94,220, 94,185,123, 99,246,202,234,147,213,123, 83, 15, 30,187, 15,171,165,202,181,226,169, 54,154, 9,243,126,136,166, 9, - 29,188,238, 22,126,164,198,139,163, 64,170, 90,168, 79,139,147,104,176,136, 74,117,156,231,128,237,212,209,244, 68,229,115,227, - 43,145,155, 36,169,142,236, 74, 98,157, 65,187, 56, 11, 37,240, 47,224, 76,201,148,106,102,104, 63, 62, 12,142, 88,106, 66,150, - 12, 9,252,158,192,209, 3, 71,118, 61,232,244,232, 52, 89,130,167, 82, 73, 62, 48,151, 78,141,216,142,197,135,124, 32, 42,229, - 93, 31,205, 62,139,133,162, 31,250,168,132, 73, 29,219,146,202, 51, 5,247, 68,164, 31,132, 1,229,235,241, 76,241,206,142,179, -183, 96,247, 61,106,220,211,160,142, 97,100, 71,127,136, 31,100,193,246,151, 0,156, 93,203,110, 18, 81, 24, 62,115,230, 74,153, - 97, 24, 64,104,135,166,169, 81, 32, 81,163,110,140,233, 19,212,133, 91, 23,190,129, 91,223,196,141, 91,215,125,131, 38,198,120, - 73,186, 41, 26, 99,211, 88,169,181,169,177, 26, 40, 45, 48,101, 6,152, 11, 51,227,255, 31,134, 58, 38,198, 24, 55,132,144,201, -153,195, 92,190,255,254,125,194,255,185,237,127,193,241,180,157,144,121, 37, 8, 93,242,123,118, 37, 78, 13,169,254,203, 73,211, -115,173,243, 30,121,142,137, 4,113, 85, 99,229,184,247,149, 75, 77,194,170,138, 6,136, 10, 56,130,163,198,104, 51,102,236,158, -241,196,159, 36, 8, 77,200,130,148,245, 81, 97, 61,188,232,198, 97,108, 65,104, 99, 67,166,224,133,113,192,188,235,104, 86,193, - 75,214,199,230, 36,234,122, 35,112,168,114,188,168,102,114,222,240, 12,204, 20, 68,136, 57, 37,111,251,231,179, 84, 95, 70, 82, - 49,188, 66, 74, 72,212, 66,129, 47, 3, 33,140, 57,137,209, 52, 98,160,205, 24,229, 89,242, 4,214, 6,236,103,119, 83,224,177, - 9,157, 98, 95, 29,135, 61, 4,204,124,103,100, 65,201, 8,140,175, 5, 98, 58, 8,135, 99, 81, 38, 34,141, 70, 99, 8,204, 99, - 38,212, 78, 21, 9,140, 0,110, 13, 0, 84,226, 25,141,234,148, 61,159, 18, 35,254,197,110, 7,194,104,235,241, 25, 9,144,218, - 23,213,142,100, 25,128, 3,183,225,186, 28,242,148,177, 74,181, 8,182, 5,137,116, 97, 39, 52,192,148, 25, 75, 53, 78,153,180, - 89,128,188, 22, 76,251, 2,251, 17,100, 17,123,194, 84, 37,159,149, 53,128,170,165,194, 42,152,207,195,118, 11,254,251,120, 98, -199,172,194,193, 18, 35,232, 67,108,125,124, 13,222,171,132,212,151,148,205, 53,132,112, 79,192, 67,247, 66,175,213,254, 84, 82, - 75, 0,121,125,231, 52, 98,212,112,125,231, 76,224, 4,107, 98, 41,130, 2,144,183, 84, 92, 6,212,171,150,140,214,247,125,180, - 86,162, 20,163,210, 33, 4,167, 16, 61,216,111, 15,154, 0,247,119,106,107, 61,231,212, 80,141, 78,191, 13, 86, 11, 34, 54,127, -108,129, 93, 1,152, 40,231, 42,221,225, 9, 28,169,102, 22, 38,174, 71, 5, 33, 12,130,156,174,189,218,121, 14, 23, 1,252,160, -206,176, 35, 38, 51, 57, 92, 70, 80, 77, 99, 17,222,195,129,211, 47, 27,166, 66,197, 51,187, 3, 86,204, 26,157, 55, 15,154,107, -141,187,123, 71,187, 62, 90, 93,126,125,237,222,198,139, 13, 56, 69,163, 90,215,113, 76,105,112,213,172, 89,174, 93,214, 75, 39, -131, 46,118, 52,147,248,198,229,155,246,200, 90, 52, 22,247,142,247,205,146, 9, 24,228, 79,125, 26,199,112, 41, 86, 43, 43, 3, -135, 86,244, 74, 81, 43,110,127,222,126,185,251, 6,158,213,146, 90, 4, 59,123,120,114, 8,206, 93, 89, 55, 40, 21,193, 20,253, -176,218,174,235, 13,163, 33, 82, 25, 97, 34, 20,236,191, 82, 80, 10, 29,171, 3, 23,211,118,157,124, 86,175,155,141,247, 95,222, -229, 53, 61, 8, 57,216, 73,173,160,117, 2, 11,165, 35,192, 89, 22,229,251, 88,134, 33,143, 9,121,178,185,179,190,213,122,116, -171,113,123,169,110, 46, 23,142,109, 7, 27, 69, 49, 20, 36,155, 46, 74,216,131,243,254,140,144,167,112,116,123,112, 77,207, 66, - 28,232, 79,177,102,120,221, 44,150,245,204,216,243, 36,158, 24,154,172,200, 60, 35, 46, 66,232, 15, 67, 14, 25,131,163,153, 62, - 68,146,199,198,199,155, 82, 69, 16, 11,217, 5, 23, 67, 94,228, 41,131, 79, 30,139,188,177, 72, 68,155, 76, 30,214, 30,144, 15, -248,134, 25, 66, 62,240,134, 5,108,188,167, 16,206,214,171, 87, 28,111,114,212,253, 6, 43,246,198,216,150,222,117,122,158, 15, -152, 15, 30, 4, 86,237,125, 4,249, 41, 83,122,159,194, 6, 74,218, 37,148, 84, 76, 36, 52, 56, 38, 46, 25,207,213, 71,211,244, -136,220,197, 24,254, 92, 32, 36, 1,165, 48,249,149,166,107,123, 81,204,165,122, 59, 46,126,227,230,203, 68,115,193,187,136,141, - 95,161,110, 80,244, 75,137, 40,205,186, 53,203,170,179, 70, 57, 86,172,238, 15,251, 6, 22,120,108,166, 19, 18,206,247, 57,171, - 19, 36,242, 79, 21,195,108,247,219,113,146,145,103,153,247, 4,220,227,164, 21, 50,169, 32,204,170,120,201, 40,236, 31, 49,248, -167, 0,172, 93, 77, 79, 19, 81, 20,157,143,190, 55,211,153,214,177,208, 22, 5, 41, 4, 82,196,104, 2,129,144, 24, 19, 87, 70, -253, 7,198,196,196,196,149,127,193,159,225,143,112,173, 11, 54,178, 80, 89,104, 72, 76,100, 99,162, 11, 62,228,187, 20, 90,106, -135,150,153, 55, 31,125,222,251,222, 76, 69,116,105,216, 16,210,148, 76,103,122,238,185,247,157,115, 46,230, 19,192,203,187, 74, -168,252, 87,112,151,191, 83,141,202,233,202,133,204,247,172,110,177,216,227,105,220,124,150,216,170, 28, 84,253,181,233,233, 2, -178,203,195,101,113,252,159, 6,150, 38, 69,242,124, 46,154, 44,205,170,218, 15, 43, 78,111,116, 34, 80, 74,248,251,239,185, 27, -129, 62, 18,249, 59, 66, 57,128,176, 77,224,105,238, 72, 27, 72,186, 13, 12, 99,200,213,254,217, 62,198, 5,235, 98,156,160,150, -157,145, 67,119,215, 34, 22,208, 76,220,235,134,211, 18,148, 83, 75, 43, 55,224,101,104, 67,139, 45, 1, 59, 35, 8,180,154,122, -171,133,117, 61, 70, 5,186, 73, 0,223, 81, 58,172,103,196, 34,111,145, 39,143, 98, 11,170, 57,121,224,236,130, 40,104, 60, 18, -145,141, 98, 63,106, 28, 74, 11, 7,222,124,205,243,196,195, 18, 69, 1, 50,131, 16,154,120,232,140,113,239, 48,222, 2,148,154, -200, 62, 16,222, 56,128,207, 93, 88, 62, 40, 69,130, 15,239, 21,196, 50,230, 25, 56,172, 66,116, 5,254,108, 26,248,202, 24, 5, -242, 28,190,186,103,141,232, 50,201,249, 44, 30,206, 85,130,216,219, 63,217, 27, 47, 87,143, 79,234,112,191, 20,164, 81,232,175, -179,241,124, 12, 93,223, 94,136, 19, 42,162, 27, 1,243, 68, 55,148, 52, 53,154, 80, 13,104, 41, 59, 6,104, 59,106,215,205,140, - 97, 80,203, 15, 58,112, 69, 51,227,179,208, 50, 3, 25,207,101,109, 52, 40,232,228, 20, 64,153,230, 58, 80, 77, 85,101,200, 41, -181,187, 46,192,186, 32,212,114, 35, 13, 55,168, 49,152,131,175,247, 62, 58,253,120, 60, 60, 48,122,228, 30,202,236, 56,248, 16, -133, 74, 74, 6, 3,200,173, 95,248,115,111,246,254,226,202, 27,138, 18,113, 83,196,134,224, 36, 27, 39, 13, 66,214, 38, 69, 11, -114, 33, 1,180, 61,151,204, 28,148,215,130,229,196, 17,208,244, 16, 40,179, 69, 12,139,152, 64,170, 15,154, 7, 4, 27, 34,232, -168, 52,145, 12,129,243, 3,185, 99,104,172, 60,214,112,155, 11, 83,243,145,166, 44,127,121, 15, 80, 56, 87, 93, 24, 31, 26,125, -187,186, 84,200, 15, 16,149,172,215,214,224, 18,138, 78,217,245, 93,198,124, 17,171,168, 86, 74,149,189, 6,238,229,185, 61, 61, -247,227,112,187,121,218,130, 43,128, 6, 2, 16, 60,159,205,139,131, 16,255,198,181,169,175,219,223, 71,160, 2,133, 94,253,231, -241, 88,185, 2, 87,182, 81, 91,179, 13, 43,236, 49, 61, 17,127,101, 30, 79, 15, 46, 31,124,250,188,223,168, 49,182,227,219,222, -153, 95, 83, 24, 78,111,252,232, 78,177,240,234,193,147,182, 79, 70,138, 91,223,154, 45, 0,248, 46,244, 57, 81,252,122,203,253, -216,246,163, 12,247,153,207,206,186, 81,200,158, 79, 94, 1,170, 97, 81, 58, 95, 41,234, 20, 19, 53, 10, 54,205,211,140,180,126, -136,252, 83,120,222,212,144, 67,185,228, 30, 6,171,138, 19,168,196,242,170, 3,184,151,157,188,161,232,123,205, 86,173,126,125, -151, 69, 20,115, 80, 80, 6, 48, 97,142, 62, 92,122,193,223,241,157,197,230,228,203,153, 15,115, 43,119, 87, 43, 79,111, 62,122, - 54,113,107,179,211, 40,230,156,136, 71,173,142,171, 96,226,147, 76, 41, 64,251,106,201, 41,175,215,183,241,223,193,157,192, 84, -125,180,149, 0,108, 6, 40, 74,102, 92,244, 25,184,193, 29,207, 84,133,253, 73, 74, 86,160, 14,241, 62,184, 75, 44,137, 47, 88, -124,184,194,251, 67,156,223, 88,222, 75, 44, 81,106, 42, 85,236,201,188, 74,193,180,120,114,218,140,165, 1, 74,178,199,188,234, -213,234, 70,125, 83, 76,117,228,129, 5, 23,234,101,180,106,155,196,132,138, 94,202,151,128,116,179,208, 63,111,224,225,231,102, - 50, 60, 89,155, 23, 75,145,102, 47, 13, 95, 17,219, 22,122,201,226,106,245, 15, 24,149,157,147,104,152,164,182,254, 31, 84,249, -151, 0,164, 93, 57,111, 19, 65, 20,246,158,222,245,181,235, 43, 81,226, 77, 16, 34,137,130, 76, 16, 2, 33, 10, 14, 41, 68, 40, - 69,126, 6, 18, 37, 5, 29, 93,254, 0, 53, 61, 53, 77,196,143,160, 0, 41, 21, 5,138, 40,156,144, 56,177, 19, 31,123,207, 94, -195,123, 51,190,160, 69, 74,225, 40,182,179,246,204,123,243,222,219,239,152,207,103,254, 51,185,255, 51, 85,225,169,121, 65,129, - 96,113,240, 66, 19, 58, 9, 45,254,123,130,124,179,120, 17,228, 78,103, 32,221, 28, 71,143,114,214, 29,122, 95, 64,132, 48, 80, -168,192, 38, 60, 18,215,181, 43,107, 70,194, 22,101,162, 36,182,104,246,202, 42,211,122,121,201,135,238,111,198,238,157, 50, 40, -224,161,161,155,252, 79,252, 60, 47,105,134, 59, 33,137,113,197, 13, 81,145,144,123,197,185,191,240,154,251,183, 31,186,129,157, - 87, 10,240,127, 96,195,122,145,131,124, 57, 52,202,192,197,195,210, 69,228,102, 45, 84, 44, 42, 54,196, 76,148, 33,110,155, 50, -137, 84, 28, 65, 74, 72,239,150,100, 93, 83,138,144, 45,100,153, 73,122, 72, 8,146, 71, 23, 3,124, 2,108,147, 40,140,155, 70, -165,144, 87,237,177,195, 60,186,181, 12,226, 15,239,105, 73,104,245,199,164,124, 89,171, 40,235,178, 84, 53,243,134, 78, 21, 49, - 61,120,249,226,253,187,183,175,158, 63,237,245,174,186,253,161,130,232, 17,129, 77, 52, 81,174, 6, 81,231,248,113, 16, 13,206, -146, 45, 69,223, 8, 9,107,118,156, 10,201,248, 3,109, 53,223,117,240,100, 18,103, 94, 72,137, 7,193,169,196, 41,185,113,110, -108,207,134, 0,210,164, 66,223,238,113, 18,177,174,160,191,185, 19,121, 36,130,102, 58,229,202, 84,170,156,199, 79, 65,163,108, - 46,129,132,229, 6,155, 9, 65,245,167, 32,102, 17, 14, 84, 12, 75, 56, 27, 74,176,250,221,225,197,155,253,215,223, 78,190,167, - 89, 18,165,164, 89, 94, 38, 49,146,197,224, 37, 17, 9,225,170, 33,221,223, 89,217, 26, 56,125,202,242, 59,230,213,156, 52,242, - 7, 57, 38,202,192,237, 35, 32, 6,247, 30,236,255, 30,156,110,174,110,247, 70, 23, 21,189, 10,139,162, 41, 58,170, 62, 49,184, - 95, 81, 45,186,161, 47, 73,114, 16,249,204,197, 87, 96,162, 59,105,156, 37, 42, 74,142, 32, 75, 19, 90, 49, 56, 72, 32, 81, 42, -178,226,248, 99,145,121,154,228, 85,117,236, 13, 60,226, 59,190, 61,112, 7,176,186, 59,235,109,200,254,110,232,178,225, 43,133, - 86,213,106, 88,149, 2,108, 30, 15, 26,142,179,235,243,206,101,199,170,175,233,186,214,179,175,143,127, 29,195,153, 7,223,117, - 89,171, 60,123,188,103,214,150, 79, 78,127,194,161,213, 94,107,111,180, 54, 86,107,173,122,165, 10, 95,230, 82,181, 1,155,237, -114,216,143,208,155,194,132,183, 10, 98, 2,125, 9,218, 70, 38, 81,119,116, 5,165,235,208, 27,187,136, 35,160, 67,111, 52, 68, -187, 9,116, 22,131,134, 65,100, 55,239, 52,170,236,110,229,142, 47,207,207,157,192,143,227,237,194,138,101,154, 77, 77, 43,201, - 2,156, 10,138,168,239,174,183, 51, 26, 12,179,158, 29,199,154, 36, 35,171, 29,193, 70,162, 33,235, 77,104, 12, 73,232, 18, 40, -235,179,157,122,233, 81,171,121,183,101,150, 11,162,101,170, 86,181, 80, 43,169, 69, 93, 68,225, 57, 89, 96,142,102, 60, 92, 69, - 70, 68,231, 82,218, 56,126,134,149, 80, 5,185, 86,212,214,234,198,143, 78,223,207, 72, 62,173,117, 67,166,112,139,117,153,236, - 6,228,203,217,215,195,143,135,159, 62, 28,117, 59,246,102,173,117, 52,250,124, 96, 61,145,133, 36, 64, 67,187, 0,253, 78, 81, -188, 23, 47,140,100, 81,156,166, 97, 26, 67, 95,130, 6,198, 80,194,208, 36, 68,119,155,200,168,212,237,192,137, 81,230,146, 50, - 50, 36,133,163,167,168,161, 95, 29, 44,200,189, 91,109,216,174, 24,226,188,178,159,227, 13, 22,105, 52,184, 89,115,217, 76, 84, -224,175,219,148,171,230,138,141, 62,230,116,170,238, 59,215, 75,160, 83, 60, 81,134, 90, 79,177,166,228, 29,226,135, 17, 97, 57, - 41,177,106,107, 46,154, 12,179,225, 61,194, 0,112,159,115, 52,167, 42,169,141,114,195, 97,246,232,188,182,159,102,118, 58,129, - 68,102,147,129, 61, 67,113,166, 76, 59, 33,157, 92, 30,115,201,204, 49, 61,126, 97,194,233,228,152,250,153, 24,162, 56, 83,184, -159,165,190, 63, 2,176,118,229,188, 77, 4, 81,120,103,111,239,122, 19, 7, 39, 36, 1, 39, 28, 49, 34, 4, 4, 40, 68, 52, 32, -132, 56,132,104,248, 7, 20, 8, 33, 16, 72, 8, 9,209,209, 82,210,240, 31,160,225, 39,208, 82,208, 16, 33, 8, 33, 66, 28,134, -156,142,157,100,109,239,225,217,147,247,158,119,131, 37, 90, 58, 75,182,155,167,153,119,205,119,252,159,252,254,111,174,151,250, -184,166, 98, 46,201,184,107, 6,194, 50,134, 51,235, 51,228,251,235,204,151,111, 91, 88,254, 95,113,247,171,252,217,154, 54,126, -208, 28,171, 38,180,192, 34,121, 48, 66, 52,164,191,236,178,254,122,131,193,163, 34,223,103, 20, 78, 96, 81, 75, 47,118,163,128, -248,105, 9,100, 16,218,224, 39, 93,244, 47, 79,123, 62,144, 89, 45,207, 73,111, 9, 66, 98,227,245,157, 21,184,216, 94,228,170, -178,234,161,141, 75, 76,156, 5,114, 31, 16, 51,133, 78,200, 56,149,189,195,204, 36, 10,174, 44, 73, 44,195, 81, 66,110, 45, 26, -138, 85,192,173, 55,130, 84,224, 94,198, 41,218, 39,163, 73, 11,214,108, 20,219, 19, 25, 52,231, 55,174, 95,126,253,234,229,237, - 59,247,102,170,213,133,133, 47, 27, 13, 84, 23,194,165,138,158, 64,139, 4, 55,154,115, 17,250, 69, 93,149, 12, 67,230, 60,118, -156,248,238,173,187, 15, 31, 60,217,217,233,140,142,142, 65,112, 23,151,190,232,106,106, 65, 9,209, 4,179,160,224, 70, 31,209, - 14, 2, 15, 66, 40, 48, 94, 23,106, 14, 27, 30, 42,186,142,139, 75,156, 84, 10,241,241, 24, 29,195,131, 0,181,254, 96,152, 38, -137, 13, 65,137, 52, 67,210,133, 72,212, 36,131,220, 54,252, 54, 26, 88,227,150, 70,151, 45,183,235,192,169,106,121, 8, 24, 32, - 50, 48, 27,177,198, 28,222, 9,168,132,147, 21, 51, 78, 35,134,106,170,170,142,212, 33, 92,248, 6,136, 68, 66,100,186,152,129, -138,133, 88, 97,242,199,218,167, 48,226,197,194,192,177,202,113,248,205,118,167,105,123, 54, 15, 61,232,211,121,232, 66,134, 9, -200,218,120,192,176,186,129, 7,231,221, 84, 12, 93, 49, 6,116,139,204,181,125, 72,160,144,127,235,237,122,199,109,109,181, 55, -225,228, 71,168,132,152, 64, 37,214, 20,210,154, 78, 16, 13, 69, 74,197,193,197,147, 87, 17,209,143,122,110,232, 43,104,168, 69, - 75,179,124, 68,145, 71, 72,170, 23,210,115, 51, 23,246, 20, 75, 60, 10,144,186,203,216,190,161,125,174,239, 13,154,131,103,171, -103,198, 75, 99,103,143,204,253,106, 46,151,140,226,150,107,155,186, 57, 53,122,184,217,217,158, 24,222,223,232, 52,206,207, 94, - 90,250,189, 40,202, 82,130, 68,100,180,104,215,100,213,135, 28, 69,124,150,117,123,253,107,109,113,101,189, 6, 13, 53, 92,220, -211,135, 79,205,255,248,240, 99,227,251,207,122,205,246, 90,155, 45,168, 94,108,203,217,166,214,145,205, 86,103, 87,183,215,166, - 39,142,114, 30,104, 16, 61,212, 70, 71, 36,173,144, 43,211,238,202,154, 84,202, 7,123,111,182,186,192,174,157, 40,124, 88,221, -172,251,190, 29,112, 83, 50,161,154,195,240,233, 71, 81,155,119,151, 29,247,242,132,176,212,249,246,126,109,227, 77,109, 25,254, - 48,102, 89,178,152,118, 99,246,205,230, 77,238,173,180, 59,237,144,151, 69,241,254, 92,117,122,220,152, 44,171,147,123, 10,229, - 1, 13, 2, 13,163, 74,230,239,218,243, 21,233, 77,195,248, 1,149, 12, 20, 89,130,163,104,106,178,165, 40,123, 75,133,233, 67, - 35,109,135,127, 94,109, 98,175, 31, 21,215,124,104,222,147,209,193,113, 57, 17, 23,154,203,243,141,157,167,207, 30, 63,127,244, - 98,206,188,178, 37,215,222,186,239,110, 78, 93,152,218, 95, 89,105,108, 36,132, 97, 39,125, 13, 34, 92, 39,232, 82, 13, 9, 49, - 76, 19,136,179, 19,184,168,193, 23, 7, 35,165,241,134,221,132,153, 6, 47, 36, 97,101, 98,114, 70,197, 73,139, 4, 50,235, 8, - 66, 55,195, 56,206,152,186,153,237, 40,235,151, 79,167,222, 51, 53, 20, 20,152,132,212, 48,100, 12, 33, 62, 59,207,239, 14,119, -224, 92, 77, 14, 79,182,225,204, 16,148,131, 12, 64,147,252,209, 46,155, 32,161, 98, 65, 87,142,198,191, 34, 57,208, 68,136,160, -135,118, 65,204, 68, 13,122,155, 4,145, 86, 49, 36,204, 23,186, 73,154,241,172,242,204,222,155, 4, 24,203, 31,180, 73, 19, 8, - 59,178, 74,249,128,237,182, 72,210, 61,238, 57,234,244, 18, 97,178, 11, 30, 79,201, 48, 61, 35,240,255,171, 63,144,254, 17,128, -179,107,105,109, 34,138,194, 51,147,233,157,201, 76, 94,109,146, 54,125, 88,165, 93,136, 72, 17, 81,172,182, 32,214, 87,233, 86, - 55, 21, 11, 42,248, 3,196,141,173, 20,164, 88, 65,173,184,241, 55,184, 23,172, 40, 8, 22,183, 69, 20,165,166, 47,219,180,177, -175,244, 97,147,180,201,188, 39,158,115,239,164, 15,209,141,155, 16,232, 36,157,204,204, 61,247, 59,231, 59,231,251,254, 51,190, -243,255,112,222, 19,246, 68,246,189,213,168,191, 98,125, 79,174,125,119, 86,122,247,175,229,109, 64,224,203, 33, 30,105,122,142, -217,210, 8,130, 55,161,193,136, 9,135, 77,253,178, 18, 6, 5, 49,136,158,105, 95,132, 83,254, 79, 2,101, 77,247,231, 24,216, - 40,105,236,156, 69, 89,139,152,139, 5,226, 68,148,117, 68,112, 59, 6, 34,184,133,198, 67, 53, 69,128,126,148, 72, 2,100,135, -160, 28,179, 45,119, 87,183, 30,192,172,232, 47,225, 28, 6,214, 25,253,146,164,243,144,240,226, 77, 38, 68, 12, 41, 36,136,205, -225,162, 36,163, 84, 19,236,193, 6, 26,165,113, 34,138,104, 11,126, 56, 32, 64, 34,170, 92, 21, 68,148,212, 80, 29, 25,232,191, - 63, 60,252,250,237,155,225,243, 29, 29, 93,157,157,147,147,227, 11, 75, 43, 2,246,246,249,168,212, 27, 70,106, 90,199,247,233, -134,189,149, 55,110,116,119,247,116, 95,123,252,252,233,163,161,161, 15, 35, 35, 83, 63,166,109, 75,235,104,107,189,213,115,141, -179,205,159,233,116, 36, 18,122, 50, 48,216,117,241,210,216,216,183,130,166, 73, 21,226,195,123,119, 31,244,245,114,142,145,156, - 72,134, 84,226,121, 17,150, 56,130,172, 25,236, 49,120, 91, 97, 61,163,198,139,102, 65, 76,132,240,164, 91, 6, 21,206,231, 25, - 47, 13,139, 48, 22,136,229,117, 8,247,232,192, 87, 52, 10,141,209,166,181, 92, 6,206, 11, 48, 56, 95,166, 45, 20, 57, 64,109, -211, 33, 60, 91, 87,219,187,211,153, 20, 54, 89,211,249, 41, 0, 37,177,112, 53,188,210,251,197,225,123,142, 75,101,102,183,182, -115, 21, 34,137, 6,226, 84,116,219,100,146,253,240,253, 40,137,199,227, 76, 10, 60, 2,104, 96,111,235,154, 99, 64, 8, 54,109, -171, 54, 82,187,158, 95, 69,181, 0,127, 88, 38,126, 88,156, 22, 29, 79, 3,168, 9,199,135,212,136,110,109,193, 74, 38, 21, 18, -196,253,233,197,113,216, 6,116, 75, 63,209,124,106, 97, 99, 14, 66, 70,209,196,246, 45,153, 40, 23,142,157, 75,206,127,207, 22, - 54, 23,215,210, 38,171,244,114,124, 78,219,164,228, 60, 36, 52,197,249,213,249, 68,101,237,151,217,175,240,156,100, 11, 89,248, -206,181,237,181,130,161,193,197, 49, 29,251,211,196,232,129,120, 35,100, 9,176, 36, 19,145,234,150,214,179,115,169, 41,195, 50, -152,150,138, 66,148,160, 63, 36, 17, 5,158,171,182, 35,167,199,230,146, 75,217,101,154,247, 48, 57,113,236, 94,135, 96, 65,127, -172, 54,159, 73,235,182,181,184,177, 4,185, 75, 88,141, 52,196, 27, 81,216,150, 94,200,186,104, 2, 50, 6,191,132,131,217,168, -195,108,228, 4,206, 86, 2,149,177,146,125,178,189,122,101,121, 61,171, 25,155,144, 57,186,188,102, 99,183,108,209, 49, 55,245, -162,102,185,151,235, 19,181,170,212,146, 80,131, 0, 15, 28,174, 70,133,147,241,197, 20,229,253, 76,102, 38,151, 85,124,165,155, -135, 27,158,117, 30, 61,211, 4, 57,133, 92, 21,146, 81,255, 25,128, 12,170, 3,179, 89, 79,222,115,107,166,212, 34, 19,152,131, -108, 16,146,200,128, 68,194,138, 88, 19, 82,234, 15, 69, 57,149,124, 28,157,213, 41,127,227,115, 69, 34, 28, 92,135,171,109, 91, - 1,222,255, 46,245, 57,230, 54,223,238,191, 62,216,247,226, 78,115,239,171,236,203, 89,123,238, 74,226,120,166,248, 43,175, 21, - 92,170, 4,201,232, 83,120, 69,139,106,116, 77,113, 96,173,224,229,197, 29,219, 53,232, 1, 5, 83, 75, 84,213,229,177, 11,197, - 13,202, 65,170,114, 81,100,147,183, 44,102,144, 10, 2,159,163,117, 12,175, 28,207,108,163, 93,234,207,231, 50,175,105,100,164, - 12, 90,188,132, 95, 33,233, 94,253,196,147,143,129,184,155, 3, 36,142, 13, 53, 88, 22,175,143,214,195, 7, 13,203,244,202,241, - 20,190, 56, 88,194,244, 76,243, 40, 84, 64, 2,204, 27,189, 19, 60,254, 22, 7,175,176, 3,136, 21, 24,202, 65,157, 86,120,168, -237, 10, 83,202,240,138, 66,110,153,190,133,212,100, 75,203, 99, 79,155, 83,250,195,242,180,156,106,112, 81, 53, 42,250,136,233, -232,140, 84,216, 23,221,105, 78,243, 91, 0,210,174,229,167,137, 56, 8,119, 95,221,110,119,183, 75, 31, 65, 42, 5, 33,160,145, - 24, 84, 66, 36,234, 69, 64,140,226,227,100,244,194,201,120,242, 17,136,120,211,120, 48,209, 68,244,226,133, 63,193, 43,241, 96, - 76, 60, 74, 68,145,132,248, 62, 17,163,162, 70, 44, 97,105,217,118,127,237,110,183,235,204,108,139, 32, 71,175,155, 38,237,110, -119,102,190,249,205, 55,223,247,191,249, 61, 72,238, 10, 20,111,164,178, 84, 54,171,128,113,155, 51,250,191, 8,157, 70, 24,188, - 28, 82, 34,188, 94,198, 85, 82,126,253,122,168,142,217,235,165, 41, 48,233, 5,100, 28,252,123, 60,113, 48,248,164,150,130,190, - 53,144, 80, 90,175, 19,126, 40, 56,117,227,188,186,105, 9, 23,218,186,165, 91,203,221,220,150, 2, 4, 24,128,185,182, 74, 2, -211,117,123, 92,191,209, 72,103,243,191, 2,225,164,218,198, 4,177,117,208,234,143, 19,232, 99, 56,125, 33,238,150, 47,224,246, -143, 31,215,101, 69,195,129, 41, 79,123,168, 34, 13,187,145,112,130, 98,115, 60, 57, 56,163,246, 0,202,181,203, 60, 96, 31, 0, -245,138, 92, 85,149,144, 83, 42, 12, 31, 31,104,206,164,239, 77, 60,152,155,127, 55,243,106,246, 80,223,193,193, 35,253, 31, 63, -189,177,214,204,176, 36, 85,171, 66,133,102, 61, 80,108, 28,215, 95, 94, 41,156, 59,115,106,108,116,252,238,196,253,169, 39,207, -160,163,142, 40,162, 36,250,169,132, 58,122,229,242,192,224,137,246,142,157, 83,143,159,246,245,246, 93,186,118,189,125, 87,215, -210,226,183,215,243,111, 19, 13,201,241,177,209,150,182,214,184, 38, 79, 79, 63, 47,227, 82, 32, 66, 20, 33, 48, 57, 39, 58, 38, -164, 29,228,224, 56,190,239,114, 17, 81,117,220, 50, 17,141,106,244, 95, 92, 28, 68, 2,131, 11, 41,134, 36,141,208,170,201,195, - 56,132, 48,243,162,114, 12,181, 57, 29, 59,152,177,184,232, 59,130, 93,202,151,236,103,230, 20,113,240,204,135,116, 57,134, 14, -180, 98,216,114, 44, 64, 94,128,157, 75,229, 34, 92,129, 7, 38,133, 37, 58,184,243,186,119,236,229, 56, 97,141,229,168,143,242, - 72, 74, 1,199, 24, 74, 56,130,134,165,196,148,128,247,187, 65,141,171,178,126,254,226,200,220,203, 89, 40,153,200, 61,117, 29, - 45,170,219,101, 40,127,229,116,178, 57, 95, 88, 1,228,187, 45,222,156,183,209,184, 3, 27, 20,242,177,132,175,131,223,147,212, -177,174,164, 98,141, 16,182, 80, 30,126,153, 63,113, 12,130, 45, 23, 61, 14, 12, 93,175,163,169,195, 70, 17,193,176, 67, 28,158, -222,206,125,138, 20,249,110,254, 32,223, 93,220, 62,132,110, 50,169,199,139, 78, 9,234, 77,158,229,224,198,151,114,217,133,133, -247,197, 18,131,236, 3,207, 7, 77,144,237, 28, 36,107,232, 99,156,170,155,205, 45, 3, 60,199,181, 4, 41,172,171, 6,170,204, -203,209,213,162, 5,207, 22, 42, 68,209, 45, 32, 99,138, 23,146,177,196, 26, 43, 88, 37, 64,247, 89, 18,135, 17,218,154,218,151, -204,223, 0, 54, 1, 63, 98,240,122, 37,145,198,241, 81,165, 97, 71,181,210,117,172,217, 48, 11, 80, 93, 92,215, 43, 84,156,197, -181,194,162,101,153,182,189,194,240,224, 98,100,119,203,254,180,150,208, 68,198,188,180, 30,231, 4,145,185, 78,131,168,124,252, - 97, 94,232,201, 60, 60,221,125,246,112, 91,122,187, 38,199, 68, 60, 58, 36,142,141, 88,211,227,219, 64, 38, 11, 2, 82, 64,206, - 0, 0, 5, 85, 6,228, 46, 25,106, 56, 5,245,160, 37, 25,106, 77,125,120,177,240,101,217, 2,180, 15,105, 26,130,209,180, 13, -230,121, 67, 61, 3,109,241,204,157,153, 71,195,253, 39,135, 15, 12,221,158,156,188,213,121,245,230,215, 27, 73, 45,214,103,100, -178, 54,178,251, 29, 98,102, 33,126, 71,114, 64, 5, 61, 70,188, 74, 88, 86, 33,195, 66,193,115,107, 18,237, 62,244,205,144,234, - 87, 89, 62, 24, 63,218, 16, 51,172, 72, 25, 60,160,144,163, 18, 9,117, 72,132, 70,106, 4, 73, 95,149, 85, 45, 18, 97,165,146, -196,139,123, 50,123,114,150, 73,187,172, 53,129, 94, 72,238, 65,206, 49,162, 6, 43,219,134, 98,224, 60,124,253,182,209,136,175, -202, 42, 44,216,105,162,197, 18, 4,213,144,113, 18,106,170, 88,182,104, 41,161,186,209,143,233,175,145, 4,132,145, 40, 30,237, - 30,130, 26, 26,208,224,235,212,124, 4, 56, 85, 58, 33,172,107,150,249,122,196, 32, 55,115,151,120, 31, 1, 29,180, 70,206,223, -224,150,193, 5,120, 0,194, 10,222,171,245,245,220, 16, 95,223, 6,170, 39,251, 63, 2,144,118, 61, 63, 77,195, 81,188,237,186, -181,221,186, 14,198, 6, 14, 80, 71, 2,122, 48, 70,193,120,224,166, 38,122,240,162,152,120,243,172,198, 72,188,155, 24,227, 95, - 32, 23, 15, 70,143,196, 68,227,205,139,122, 48, 38, 36, 4, 48,241,162, 16,144, 95, 1, 6,108,224, 88,217,186,174,237,218,111, -125,239,125, 7,193,196,155, 23, 46, 77, 51,218,244,251,222,231,189,247,121,159,143,252,255, 99, 85,146,253,100,110,232,137,255, - 82,111, 23,255,221,191,193,251,200, 58,172, 41, 9, 17, 67,236,112, 5, 92,204, 59, 98,172, 33, 30,114, 98, 18,209,164,141,182, - 33,124,155,137,228,195, 81, 55,198,131,103, 49,173, 61,145, 75,167, 97, 58,149, 72,246, 52,224,219, 4, 33, 46,121,242,197, 40, - 6,136, 15,174, 16,249,250, 47,103,192,240,200, 76, 69, 60,144,157, 68,219, 16,244,140,119,105, 13, 12,227, 27, 4,180,146, 89, -200,119,246,175,237,174,134,228,215,234,115, 82, 16,118, 36,252,144, 29, 81, 36,150, 2,137, 71, 71, 82,200, 78,168,112, 60, 66, - 42,159,144,163,237, 29,200, 69,163,155, 29,161, 30, 84,113,146,121,171, 10,233,126, 0,229,111,223, 28,129,139,151,175, 92,122, - 51, 62, 14, 15,214,147,203, 90,214,238,243,177,103,163, 15,239, 63,122,112,231,197,203, 87,155, 91,229, 80, 80, 16,151,136,114, - 29, 96, 91,181,118,238,204,217, 39,143,159,190,123,255,246,243,151,175,237, 70, 60, 26,193,217,168,215,100, 40,207, 29, 79, 74, - 49,229, 88,103,183,161,107, 34,243,154, 86, 69, 70, 57,249, 0,106, 5, 93, 13,202,165,245,158,222, 76,221,250,157, 74, 98,133, - 1,255, 24,220, 69,141, 46,116, 97,165, 19, 18,202, 49, 33,170, 10, 85, 43,176,189, 42, 87,226,195,153,125, 16,182,182,137,197, -208,117, 27, 34, 42, 99,160, 18, 47, 36,221,122,163,150,109,207,149, 42,155,150, 91,245,252,152, 17,111, 51,237, 61, 60,176,248, - 85, 99,129,143, 99, 12, 84, 16, 67, 5, 71, 87,114, 4, 20,237,179,181,104,194,245, 27, 74, 36,118,184, 4,143,186, 41,140,101, -141,182,149,226, 18,111, 71, 6, 68, 54,136,195, 81, 15,137, 26, 46,177, 40, 96,126, 89,129, 51, 54,152, 31,250,185,254, 99,165, -248,107,105,108, 30,222, 38,164,153,132,102, 12,158,190, 48,181, 48, 9,249,245,124,223,197,217,141, 89,192,197,144,100, 1, 16, -105, 81,205, 11, 93, 90,182,138,160,210, 32, 67,123,175,125,171, 2,149, 16, 54,211,153,255,109,113, 10, 80, 60,167,202,245,231, - 6,118,204, 34,228, 27, 93,209,104,116, 22,166,147, 29,142,219, 88, 46,173, 22,202,219, 88,163, 16, 5,138,107,155, 64,153, 83, - 52, 93,215,115, 42,161,233,248,126,132,172,180,211,186,177,111, 91, 54, 32, 83, 17,194,125,201,241, 92,120,174,182, 68, 10,162, -188,105, 87,195,136,132,110,142,204,217, 71,201, 26, 65,114,164,108, 42,171,200,234, 70,185,224,251, 77,195, 72, 1,106, 86, 99, -186, 22, 51, 79,228,250,138,187,219,144, 54,224,240, 47, 20,230,111, 13,143, 44,110, 45,205,109,204, 37,148,184, 30, 55, 60,207, -194,247, 27, 81,251,140, 64,232,105,239, 26, 58,121,163, 55, 57,184,150,254, 94,216,153, 92, 43, 77,108,250,203,149,150,232,235, -118,205, 62,213,145, 95, 40,238,180,163, 36, 33,160,123,200,131, 65, 38, 35,191,190, 55,156,238, 55,144,225,130, 61, 43,134,127, -125,116, 56, 67,109, 3, 68, 19,129,132,194,107, 80, 60, 82, 35, 29,237, 58,196, 22,241, 64,226, 77,249,136,164,169, 66,206, 16, -186, 51,107,159,230,102, 22,182, 20, 85,133,175,200, 67, 75, 14,219,247, 27,245,102,227,195,204,199, 1, 61,111, 10,149,209,171, -119,133, 9, 65, 23, 50,157, 41,121,199, 89,185,126,252, 26,156, 34,135,113, 19, 62, 50, 36,193,132,201,140,184, 1, 65,220,244, -246,155,152, 14,125, 42,119,241,171, 32,166, 24,235, 74,231, 54, 43, 91,132,247,153,200, 90,221,220,184,162,228, 51,249,217,194, - 44,105, 28, 31,168,213, 28,240, 56,124,190,253, 13,133,123,224,173,236,174, 54, 91, 92,118, 26,173, 51, 26,255,139, 28,187,137, -106, 84,203,165,123,106,219, 22,141,100, 4, 26, 30, 11, 22,237,235,137,173, 62, 10,183,131,197,170,172, 82, 43,147, 61,124,203, -243, 65,215, 82, 16,238,169,157, 67, 94, 18, 18, 55, 73,246,167, 23,167, 57,153,155,176, 17,190,186,128,183,240,209,127,202,128, -175,171,238, 84,225,119, 77,187, 76, 28, 13, 44, 62,168, 39,211,210,186, 57,220, 49,226, 6,173,212,116,128,152,134,174, 12,232, - 63,197,175,179, 35,246, 76,116,231, 31, 1, 56,187,182,215,166,225, 40,156, 52, 73,155, 91,155,182,116,183,202, 86,156, 34,171, -123,240, 70, 81, 68, 54,196,121,193,137,255,132,127,200, 94, 68, 17, 84, 80, 80,124,243, 69,193, 11,211,189, 56,196, 49, 95,124, - 18,113, 12,193, 9, 19,183,118,110,197,110,237,154,182,105,155, 54,105,227, 57, 39, 73, 39,236,205,151, 66, 33, 36, 77,154,223, -249,125,231,156,239,124,223,255,224,119,118,159, 98,187,179, 71,159,223, 87,225,247,191,249, 30,173,156, 15,210,105, 88,154, 17, - 52, 54,214,134, 91, 99,154,212,123,236,169,104,246,144,126,128, 36, 8, 66, 28, 35, 11,140, 40,160,174,138,172, 10, 90, 8, 50, - 66,156,165,166,185, 54, 4, 90,200,248,230,137,166,193,246,106,245,110,143,151,216, 53, 68, 94, 17,108,207,243,112,111, 0, 54, - 44,107,104,242, 71, 94,245,222, 20, 21, 29, 1,171,221, 33, 10,139,192,241, 22,246,228,217, 74,189, 76, 15, 55,192,248, 90,124, -216,218, 6, 68,202,186,228, 66,214, 23, 71, 33,172,206, 48, 49, 77,150, 36,129,212, 43,177, 98, 68,211,127, 14, 77,105, 34,251, - 80,145,216,176,202, 43, 18,167,138,232,108, 71, 19,158, 16,223,133, 43, 23, 46, 95,157,190,182,252,117,233,217,139,215, 72, 3, - 33,107,146,252, 78,229,231,106,246,252,228,197,195, 7,211, 43, 63, 86,117, 93, 15, 5, 1,181, 89, 93,219,154, 56,147,185,127, -251,230,226,226,194,189, 71,143, 17, 82,241, 2, 54,101, 58, 78,203,234, 86, 12, 51,149, 28, 78,143,141,207,207,191,123,191,240, -177, 89,111,140,166, 6, 55,114,191,230,230,222,192,213, 2,156,109, 84,244,221,157,194,171,217,217,245,141,109,203,230, 90, 45, -180,234, 6,200,100,217,144, 67, 0,148,118, 32,189,199,249,100,179,131,108,126,244, 62,238,184,192,131, 16,188,231, 56,211, 37, -179, 88,175, 48, 73,109,161,186, 89,119,251,253,176, 83, 82,229,164, 5, 81,158, 14,238, 4,121,140,155, 54, 26,234,162, 72, 3, -185,134, 49, 40,241,102,155,154, 28, 71, 19, 37, 11,121,193,174, 59, 26,196, 61,120, 90, 37,189, 8,136,123,184, 47,165, 55,116, - 88,240, 22, 73, 46,219, 88,103,181, 34, 82, 84,147, 34,229,122, 25, 80, 48, 0, 25, 36, 32,113,156, 20, 82, 4, 72, 8,154,213, -114,109, 23,197,181, 89, 39,174, 38,182, 43,121,194, 14, 28, 96,186,166,105,136,162, 18, 81, 34, 34, 47,122, 99, 35,240,223,112, - 60,128,101,242,186,107, 96,235, 59, 40, 69,149,184,137,106, 25, 44,186, 27,219, 86, 76,142,186, 37,221,173,242,150, 69,156,156, -176, 28,182, 44,248,133, 76,170,239, 32, 15,219,160,211,213, 20,173,160,227, 0,253, 80, 34,153, 25,203,100,255,108,168,162, 12, -151, 5, 48,158,219, 70,143,214,241, 84,122,189,144,117, 25, 86, 82, 80,169,154,181,254,200, 0,186, 70, 4,156, 67,201, 35, 37, -163, 12, 1, 8, 54, 9, 8, 51, 6, 10,245,224,186,134,224,149,223,205,183,108,171,214,168,194, 11, 15, 1,229,232,129,244,102, - 41,191, 83, 43,109,150,182, 52, 85, 83, 37,200,171,154, 54,201,252,194, 42, 62, 41,241,137,233, 17,212,140,140, 5,181,100,100, -108, 40,154, 73,168,147,199, 78,221,125,250,100,230,250,217,111,159,151,191,228,138, 55, 38, 78,151,171,109, 19, 27, 45,109,120, - 28, 39, 70,135,210,151,210, 82, 58,206, 40, 28, 19, 66,121, 63, 84, 18,230,221, 6, 89,192, 35, 64,225,228, 17,122,179,112, 56, -182,129, 1, 61, 40,192,163,134, 87, 87, 8,137, 2,175,138,172, 38, 49,169, 4,147,234, 47,124,248,254,114, 97,197,161,241, 10, -204, 86,177,246,100,197,248,145, 82, 27, 3, 0, 36,220,111,215, 62, 61,188,245, 96,233,121,118,109,245,247,212,224,212,157,220, -204,185,129,227,106,128, 53,176, 69,129,124, 50,248, 20, 67, 50,149,224, 80, 56,211,180,219, 98, 80,130,109,213,104,213,109,178, -242,192, 94, 21,128, 54,220,173, 13, 82, 96,151, 99, 74, 20,210,157, 14,113, 28, 10,144,229, 56,190,207,167, 43, 2, 76,122, 2, - 52,103,110,181,176,192,136,113, 5, 39, 54,252,225,214, 61,193, 89,207, 34, 21, 13, 20,139,181, 34,227,233,132,225, 59, 18,145, - 52, 27, 9,195, 29,183,159,212,147, 0,163,151,184,219, 43,126,119,200,194,137, 24,143, 1,175,160, 64,136,200,193,194,142,233, - 19,222,169, 98,227, 17,116, 48,228,195, 26, 33, 69,241, 78, 20,110,211, 52,224, 36,152, 46,211,229,124,231,144, 94, 3, 56,240, - 79,135,209, 3,150, 93,111,144,203,239, 11,120, 68,122, 60,255, 95, 1, 40,187,150,215, 38,130, 48, 62,187,155,157,201,102,204, -102,211, 52,109, 45,181, 84, 5, 21,170,130,130,120, 83,212,179, 23, 5, 43, 8,162, 66,233, 31,160,167, 94,188,136,103,111,158, - 60,136,248, 23, 88, 5,193,155,120,169, 47, 4, 61,217, 26,169,239,190,146,108,118,179, 59,187,147, 93,191,111, 54,143, 42, 69, - 16, 66,200, 33,155,108, 54, 59, 51,223,239,155,223,227,255,248,145,156,114, 69, 45, 79,254, 10, 89, 53,200, 22,202,225,118,147, -123,239,181,190,165, 71,212,173,242, 13, 24,117,168, 89,213,187,187,240,100,107, 67, 27, 13,204, 51, 77, 88, 38, 85,205,250, 48, - 84, 51, 11, 48,203, 51,164,175, 53,229,102, 75,186, 90,214,191, 84, 73,162,200, 82, 82,215, 52,201,156,251, 17, 37, 96,243, 29, -198, 51,178,224,181,129,183, 48,218,132,230, 75,158,104,102, 23,177, 92, 24,170,183, 55, 21,243,133,160,162, 7,251, 3,145, 65, -114, 24,218,171,253, 75,141,171, 20,180,105, 87,204, 71,116,147, 26,112, 7, 76,141, 86,120,137,123, 81,148,230,136, 34, 14, 64, - 33,134, 86,233,121,166,227, 46,161,178,156, 81,144, 4, 81,138,136, 82, 25,167, 34,136, 76,102, 84,157,161,181,141, 77, 33,164, - 97,154,138,205,137, 32, 45,150,226,216,145, 3,115,179,115,140, 89, 11, 11, 79, 95,188,126, 67, 13,122,230,244,169,153,243,231, - 23, 95, 46,222,188,117, 59,148, 49,165,166,114,127,140,115,232,247,159,248,190,176, 24,219, 59, 57, 81,251,250, 13,219, 32,166, -225, 20,185, 97, 36, 82, 10, 74,169,136, 58, 65, 8, 8, 88, 11, 66,153,224,217,101,172, 64, 68, 66, 82,185,107, 99,241, 0,247, -173,153,196, 94, 28,186,202, 10, 91,118,146,190, 82,187,207, 69, 69,177, 53,195, 58, 56,233,252,177, 23,163,120, 29, 14,175,184, -225, 38,252, 19, 20,128,138, 9, 32, 1, 37,102, 48, 74,179, 13,207,108, 55,186,108,149,221,160, 14,197,187,205, 29,158,231, 43, -235, 43,104, 75,171, 51, 3,169, 62,204, 67,181, 42, 57,113,240,204,243,247,207,138, 5,187, 21, 96,251, 98,196, 30,129, 35,235, -254, 6,128,232,122, 80,183,243, 14, 32, 57, 40, 99, 3,128, 2,212,114,145, 55, 45, 39, 71,119,195, 44, 21, 72, 95,205,149, 90, -197,174,166, 24,145, 97,213,126,126,130, 15,134,165, 98,205, 93, 29, 46, 86,225,157,237,208, 83,166, 99,137,158,234,200, 73, 53, -104, 1,189, 98, 36,156, 18,167, 59,218,194,131, 85,138,229, 48,197,202, 41,148, 40,174,160, 17, 20,191,202,184, 88,107,135, 65, -222, 52,131, 40,132,195,167, 70,167,150,126,124, 68,197,172,150, 43,219, 21,183,237,134,216,176,234, 84,236, 97,206,172, 47,235, -223,247,143,239, 91,107,174,194, 9,195, 76, 52,234,140, 53, 85,216,108,221,107,170,129, 72, 38, 43, 19,161, 20,152,172,109,151, -163, 72,192, 95,150,197,109,169,187, 17,190, 2, 39, 72, 76,148, 29,222,181,209, 90, 43, 50,254,189,241, 75, 17, 10,136, 34,182, - 34, 28, 12, 59,242, 90,181, 58,125,231, 56,105,182,136,240,137,140, 73, 35, 36,174, 79,190,110,144,217, 27,100,100,250,193,149, - 75,151,239, 63,158, 46,243, 50,165, 99,220, 26,138,197,245,115, 23,246, 93, 60, 74, 68,141,100,187,182, 50, 2,248,131,143, 24, -249,148,248,128, 5, 63, 82,194,230, 56,233,166, 54,232,189,161,105, 42,137, 71,222, 32,118,129,236,116,224,121,249,225,171,123, - 79,222, 25, 44, 87,130, 31, 12,215, 12,137,185,112, 71,193,225,123,150, 27,172,108,242,197,213,207,143, 86, 62,196, 75,235,243, - 39,239,238,103,135,172, 82, 99,230,237,217,249,195, 87, 5,160, 56,180, 7, 87, 61,234, 52, 41,114,238, 7, 62,101, 12,208,161, - 76,101,209, 42,181,132, 23, 70, 48,223,169, 92,140,108, 3, 22, 35,139, 53,228, 56,133, 30, 84,105,200, 87, 38,157,166,223,128, - 10, 12,150,234, 0,155, 45,125, 33,210,118,147,146,158,197, 86, 15, 84, 80, 89,246,143,102,244, 21, 67, 61, 67, 50, 37,167,130, -149, 9, 42,140,160, 19, 98,154, 20,145,153, 55,125,210,179,147, 31,240,106,180,116,172,180, 83,169, 19,210,190,207,109, 55,123, -178,255, 69, 9, 44,127,176, 58, 90,128,225,178,207,239, 40, 36, 4,139,155,105,152, 99,206,120,109,125, 89, 79, 0, 82, 23,252, - 72, 37,202,166,127,181,214,213, 54, 72, 55, 54,116, 64,248,209, 6, 42, 86,173, 23,158, 65,126, 11, 64,217,213,244, 52, 17, 69, -209, 55,157, 78,103,218,153,218, 41,165, 20, 33,104, 12,138, 75, 53,126, 69,141, 11, 23,186,193,165,226,222, 31,160, 43, 55,198, -196,157, 75, 55,198,165, 33, 38, 4,195, 66, 77,112,111,130, 49,145,104,226,130,196,148, 0, 90, 66,128, 66,161, 76, 63,166,211, -249, 30,239,189,175, 45, 96, 76,140, 9, 93, 81,166,228,245,190,123,207,187,239,220,115,254, 47,191,235, 10, 44,116,147,231,119, -225, 79,102,228, 63,147, 59, 63,192, 96,183, 36,136,122,118,175, 81,175, 53, 46,178,216, 1, 61, 97, 60,117, 72, 40, 93,194,194, -142, 54, 61,117,162,168,249, 78, 6,212, 24, 95, 9, 81,206, 43,121, 57, 33, 86,218,155,100, 99,200,168,159,133, 4, 34,216,132, - 62,231,173,242, 20,143, 19,213, 56, 31, 31, 9,251, 77,153,176,227, 91, 66,183, 34, 81, 56,112,100,176,210,216,140,161,155, 22, -255,178, 35,118,248, 94,227,175, 18, 61,216, 29,130,147, 68,224, 18, 51, 18,185,153,163,133,177,213,189,159,167,135,114,195, 71, -245, 29, 11,112, 18, 19,227, 16,136, 0,219, 5, 85,197,142,174, 97,250,109, 20, 70, 20, 1, 4,161, 89,149,132,135, 68, 15,221, -211, 0,202, 2,130, 67, 47,241,132,132, 53, 75, 18, 73,171, 0, 54,176,140,197,166,191,111, 96,226,206,221,235, 87,111,144, 28, - 89, 4, 89,224,253,236,236,244,204, 59,200, 5,154,138,104,212,243, 66,211,114,168,127, 25,242, 69,132,135,139,116,235,140,140, - 54, 72,193,200,135,196,202, 10,123,197,133, 55,162,197,152, 32, 74, 24, 64,240, 87,168, 72, 76, 58,217, 16, 18, 0,149, 28, 15, -247, 80, 96, 57, 81,155,132, 69,176, 83,200, 16, 66, 33,172,227,228, 26,228, 21,104,146,230, 96,179, 23, 67, 8, 82, 33,252,111, - 14,210,138,112,121,251,181,156,209,170,195,198, 27,206, 30, 7, 24,110, 57, 13,248,173, 44,194,105, 94,110,123, 38,137, 86,163, - 9,220,190,192, 41,229, 14,212,165,146, 20,100, 38,184,124, 8, 59, 32,121,239, 0, 73,237,212, 55, 31,204, 20,106,212, 70, 87, - 72,186,121,164,255,248,185,177, 51,223,138,223,183,234,235,113, 49,222,114, 90, 79, 38,158, 78,205, 77,149,182, 74,120,201,230, - 65,229, 75,112,212,127,113,236,242, 66,105,129, 60, 64, 80,255, 29,167, 78, 98, 97, 78, 29,128, 79,172,154, 59,183, 47,140, 87, -107,198, 82,121, 81, 79,101,143,229, 71, 22,215,138,163,133, 19,107,149,213,193,190,194,198,206,186, 28, 71, 55,197,179,163,231, -151,215,126,192,115,190, 20, 63,103,211,125,150, 99, 81, 23, 64, 80,149,148,235,123, 99, 67,167, 54,141,178,105,183,100, 60,184, -184, 90, 74,131, 69, 50,204, 90, 46,173,187, 56, 37,160, 86,205,170,101, 91,168,167, 86,223, 6,164, 10,245,204,118, 77, 23,139, -163,175,171,250,174, 89,149, 99,241, 76, 90,247,125,207,180,144, 99,135,246,119,130,160, 39,117, 0,176,165,202, 10, 44, 62, 14, - 7, 36, 20, 53,158,172,219,117,100,179, 96,233,202, 53,219,187,138, 24,131, 10,112, 43,174,221,124,121,141,121, 38,131,165,131, -111,202,178, 89,179, 29, 22, 87,230,151,216,219,245,250,243, 79, 95, 15, 70,111,158,177,138,179,205, 18, 6,155,159,100, 98, 2, - 53,200,224, 16, 7,201,221,118,153,227,225,143, 13,185, 30,113, 47,183,128,239,229, 22,204,236, 16,199, 50, 78,220,177,172, 10, -176,157, 85, 91,115, 47, 62,190,158, 43, 42, 41, 25,170,180, 36,137, 81, 24,107,120,126,217,116,151,107,205, 69,163, 5, 17, 4, -245,210, 9,220,137,225,251, 51, 31, 94,221,187,244,120,242,202,179, 7,191, 30,190,169, 77, 63, 58, 57, 94,182,247,248,141, 37, -249, 75,134, 92,239, 23,138,183,233,192, 51,144,226, 27, 16, 73,141, 38, 88,209,111,199, 39,245, 33,132, 28, 93,159, 38,128,158, - 41, 37, 93, 54,202, 88, 16,249,105,146,110, 73, 41, 74,195, 3, 26, 76, 29,178,110,151,250,209,113, 70,133,183, 42, 9, 69, 22, -147, 77,167,222, 17, 21,232,166,119, 64, 6, 27,123, 91,184, 53, 4,238, 2,200,184, 12,126, 16,113, 70, 77, 71, 84,146,245,110, -231,186,201, 48,147,202, 36,165,228,118, 3,202, 48, 33,124, 18, 79,233, 14,232,208, 16,141,192, 5, 16, 59,102,123,188, 17, 79, - 2, 51,240, 36, 81,147, 85, 64, 0,221, 36, 25, 29,234,135,119,179, 22, 53,144, 15, 25, 31,177,253,169, 31,124,253, 22,128,179, -107,105,109, 34,138,194,119, 94, 73,102, 38,143,154,144, 54, 47,109,105,107, 17,161, 10,238, 92,185, 41,184, 16,247,130,248, 19, - 92,184,209,149, 59, 55,130,250, 51, 44,232, 47, 16, 92, 41, 40,138, 82,169,186,210,182,182,181,205, 59,205,100,146,204,205,204, -100,198,115,206,157,216,170, 69,208, 93, 32, 97, 38,115,231,222,243,248,206, 57,223,247, 63,243, 77,199, 6,239,225, 33,133,192, -159,198, 29,127,133, 13,170,212,202,146, 51,243,205,126, 77,250,149, 11, 50, 68,156,221, 28,250,142, 20, 70, 76, 17, 26,211,169, -219, 19, 3,139,128, 77,148, 85, 41,237, 17,205,145, 10,126,163,232,138,158, 78,100,242,122,174,233, 84,219,163, 54,163,110,111, -164,162,244,135,148,230,251, 19, 31, 30, 10,124,255,103,131,125,128,157,139, 16, 98,196,192,232, 16,194, 59, 25, 98,150,228,127, -162,191,164,254, 23,133,251, 14,213,160,240,177,112,230, 69,145, 42,217,204,242, 66,161,193, 57,247,176,169, 53,166, 42, 66,111, - 49,158,192, 93, 7, 7, 7, 25,139,145,164, 49,140, 99,112, 43,115, 30,138, 54, 17,140,133,145,150, 38,242,197, 8,133, 35,229, - 41,142, 59, 65,148,153, 76, 40,149,147,165,194,116,113,228,121, 91, 91,187,123,213, 70,160,224,100, 40,236, 62,148,169, 12,192, - 79,224,100,127, 82,151, 77,176, 49,154, 8, 12,152,128,144, 80,102, 24,251, 22, 5,145,182,228,211,230, 36, 25, 7, 92, 80, 12, -219,225,128,187,152,112,122, 88, 12,197,247,160,197, 24, 63,224, 46, 14, 85, 33, 78,108, 38, 50, 88,243, 16,230, 56, 18,136,136, -192, 77, 73, 86, 73, 8, 86, 10, 34, 77, 75, 70,158, 18, 33, 29, 85,131,152,119,108,196, 76, 5, 57,152, 28, 60, 63,129,164, 39, -140, 62,183,112,150, 24, 89,222,100,133, 69,217, 48, 93, 86,241,199,110, 37, 95,217,111,237,235, 40,150,237,105,178,186, 88, 60, - 93, 59,168,114,151, 67, 14, 46,106, 89,144,123,101, 83,217,122,183, 10, 43, 15, 89, 45,220, 78, 7,187,167, 40,214,192, 66, 60, -199,110,247,221,161, 17, 51, 32, 95, 70, 74, 28, 62,128, 99, 9,238, 7,222,175, 64,135,136,173, 19,143,122, 41, 83, 30,184,125, -219,233,229, 83,211, 88, 15, 24, 13,178,201, 19,170,172,182,186,141, 83, 51, 21,203,182,110, 92,186,254,248,229,106, 41, 83,128, -229, 90,154, 59,251,102,253, 69, 34,110,204,164,243, 13,171,150, 75,229,251,142, 13,113,247, 98,113, 97,179,186, 1,171, 4, 49, -135,170,170, 96,125,138,185,226,148,145,254,180,253,217, 67,214, 92, 49,115, 19,206, 23,230,191,236,111,194,246,152,205,205,110, -212, 55,202,185,210, 94, 7,158,209,244,136, 31, 14,236,215,148,158,234, 14,123, 26,206,186, 97,107, 32,248, 39, 51,110,192,127, -131, 80,126,224,216, 75,165,165,239,173, 93,120, 40, 72, 83,234, 86,173,156, 45, 55,237, 58,118, 40,197, 99,248,122,229,160, 52, -146,110, 61, 88, 97, 57,151,217, 61, 72,226,152,195, 89,159,179,237,198,189,213,215,119, 63, 84,127,219,187,183, 47, 94,184,255, -234, 61,126,218,126,196,186,125, 44, 87,249,164,206, 10, 86, 30, 54,232, 72, 68,238,168,129, 22,249, 95,146,124, 36,249, 71, 21, -141,187,161,179, 66,134,165,147,157,167,107,151,239, 60,121,199,113, 80, 86, 35,122, 0, 63,248,219, 88,250,181,236,205, 78, 87, -123,118,245,225,249,231, 43, 99,189,126,165,184,108,249,195,115,115,103,222,126, 93, 19,148, 74, 20, 93, 33, 63,168,235,141, 28, -135, 79,207, 86,234,223,118, 32,216,161, 86, 21,156, 90,138,105,241,142,221, 22,148,186, 4,194,144,111,144, 36,151, 52,234,164, -136, 56, 90, 16,140, 99, 25, 13,214,112,128, 92,202, 74, 84,238,140,216,220,137,164, 70,142,234,133,164, 13, 65, 5, 5,180, 53, - 52, 30, 66,253, 26,144,117,173,239,124, 68,142, 88, 82,178, 27,147,228, 74, 16, 70,216,143, 0, 80,192,211,183,122,205, 35, 28, - 1, 17, 96, 78, 0,124, 40,234,209, 19,166, 51, 22, 30,250, 3,146,161, 34,226, 26, 9, 85, 92,124, 81, 53, 13,165,112, 34, 92, - 53,153,132, 58, 2,159, 71,224,117,212, 81, 50,105,205, 63,142, 17, 6,238,241, 67, 0,202,174,101,183,105, 32,138,122, 82,199, -175, 56, 73, 67,146,170, 21,173, 40, 69,162, 11, 96,135,196, 2,169,149,232, 26,126,129, 31,224,103, 88,177,231, 3,248, 3, 88, -176,236, 22, 16, 32,212,170,143, 52,105,155, 52, 77,234, 87, 50,142, 61,220,199, 56,229, 37, 16, 82,164, 40, 81, 60,153,177,231, -222, 57,115,231,222,115,254, 47,254, 46,254, 36,159, 93, 42,234,254,255,226,220, 11, 10, 95,156,227,177, 12,127,238,144,110, 21, - 6, 9,107,179, 96,134, 30, 68,238,232,216, 76,186,150, 42, 44, 21,215, 35, 8,226,132,204,116,217, 42, 30,145, 73,140,109,231, -109,119, 25,236, 42, 74, 67,214, 60, 17,226, 23,218,157,124,129, 90,158,135, 20, 48,249,100, 70, 68,149, 44, 40, 86,132,254,127, - 67,234,133,138,183, 38, 34,250,177,112,138, 84, 5, 72, 59, 13,149,115, 88, 2, 72,177,132, 53,120, 28,169,100,169,108, 90,147, - 20,211,138, 22,240, 48, 16, 80, 60, 0,115, 76, 44, 71, 69, 82, 3,213,160, 80,184, 18, 87, 6, 88, 39, 0, 65, 16,200, 86,168, -126, 55, 69,103,207, 50, 98,148, 62,197,123, 56, 18,211,233, 15,195, 47,123,157,253,131,238, 40,148,224, 59, 29, 20, 53,205, 40, -199,142, 20,131,241,246, 96,180, 20,190,144,208, 78, 10,123, 90, 4,230, 84, 16,133, 19, 42,163, 60, 25,240,245, 38,242, 25,148, - 44,100,164,193, 9,105, 45,136, 50, 71,152, 80, 81, 75,224,225,176, 82, 38,128,232, 72,146,218,159, 5,131,107,250, 77,128,225, - 53, 7,171, 85,245, 52, 21, 36,181, 37,224,114, 27,159, 7, 87, 44, 83,137, 25,124,195,104,165,238, 52, 12,228,228, 73, 88, 46, - 13,254,196,182, 61,223,174,142,163, 0,176,103, 44, 39,108, 38,196,225,204,180, 26,248,254,244,225,179, 79,199,159, 29,203,202, -178,212,177, 43,189,203,110, 34, 19, 54, 6,232,110,197,173, 69,147, 16, 92, 57, 91, 2, 67,123,120, 26, 0,231,225,226,171,248, -146, 37,144, 40,195, 61,231,163,245,134,223,186,189,116,103, 16,156,175, 55,215, 71,209,136,101,138,203,150,179,232, 34, 37, 8, -108, 5, 22,253,250,122,123, 99, 16, 12,166,114, 82,117,107,211,116,178,253, 96,251,240,236,232,120,112, 2, 99,135,214, 96,161, -236,156, 30,193,189,132,229,124,138, 39,165, 10,195, 59, 8,225, 85, 24, 71, 37, 98,156,246, 92,207,117,144, 77,172, 31, 12, 59, -253,174,231,250, 51, 98,252,167,236,232,124, 28, 95,101, 52,132,126,208,223,188,121,247,240,188,211,170, 54,131,120,236,217, 46, - 17,220,230,182,229,161,114, 76,142,217, 41, 21,199,191, 8,135,128,247, 37,169,206,129,213,215, 42,139,102,169, 12,174, 13,118, - 75,237,122,251, 34, 24,192,111,166,105, 12,107,175, 5,253,247,154, 39,225,240,177, 97,217, 59,203,168,166,205,154, 54,224,222, -234,238,214,198,210,106,237, 94,119, 20,244,130,177, 5, 27,113,148, 47, 86, 71,157,222,139,251,203,165,213,154,145,245, 12, 33, -209,155,171, 92,147,174,176, 53, 96,254,163, 64,111,238,130, 55,183,140, 42,188,108,163,225, 25, 55,124, 99,173,101,108,174, 24, -210,120,249,252,245,147, 87,239,186,179,124, 46,215,147,255,139,114,228, 99,178,187,167,118,223, 28,188,255,144,188,173,155,246, -154,219,138,179,228,112,208,193,211, 44, 4, 28,102,170,164,109,186,107,205, 91, 48,175,130, 56,120,180,179,181,255,245, 27, 96, - 0,196, 63, 84,203,146,200, 73, 38,120, 10,234, 76, 71, 82, 4, 82,173,234, 82, 52,189,202, 89,216,207,208,233,134,240, 97,165, -177, 50, 12, 71,218,248,181,156,147, 22,222,174, 88, 85, 48,191, 25,241, 11, 8, 93,244,196,150,132,225, 73,184,207,167,227, 51, - 14,101,227,193,184,223,160, 96,169,164,246,243,188,240,197,200, 93, 35,174, 11, 98, 53,251,161,184, 14, 52, 51,135,229,220,100, -212,156,175,146,146, 55,193, 75,192,227,131, 73,168, 51,226,185, 23,124, 38,192,180, 4,191, 8,230,229,218,193, 23,210, 23,134, - 30, 84,193, 56, 54, 7,252,223, 5, 32,237,218,117,163,134,130,232,245,227,218,222,151,119, 99,178, 33, 9, 75,136, 68,129, 20, -132, 20, 68, 71,137, 64,180,212,240, 35, 84, 20,252, 7, 53, 66, 52,116,252, 4,130, 34,136, 46,137, 18,162,144,216,121,176,187, -118,188, 94,191,152, 51,215,222, 36, 36, 13, 98, 91, 63,228,245,189,158, 57, 51,115,230,204,191,225,119,237, 58, 20, 63,203,174, -112, 34, 69,191,114,114,149,153, 49, 46,223,224,130,178,207, 95, 39, 19,166,181, 88, 62, 44,171,229,111,149,206, 66, 45, 69,128, - 29,135,185, 67,166, 48, 29, 77,150,194,104, 25, 54,197,206, 29,171,227, 53,189,163, 73,176, 23,237,161, 69,150, 11,255,220,245, -144,213,121,180, 66, 45, 30,253,220, 70,111, 20,159,178, 87,186, 86,251,178,180,165,141,190,190, 60,171,235, 24,154, 99, 53,226, - 36, 82,134, 62,199, 96, 12,141,137,181,197,131,149,135, 27,187,223,208,149, 77,246,218, 38,224,150, 26,186,129,166, 84, 93,239, - 56,214,114,191,103, 56, 22,194,111,180, 50, 19,174, 33, 84,196,218, 25,162,108, 52,173, 78,203,132,148, 58, 18, 74,240,109,170, -253,150, 54, 16, 97,115,218,192,122, 37,109,193,239, 84, 35,188,175,197,100,105,177,254,154, 9,213, 1,184, 7, 91,106,170, 73, - 40, 73, 10, 14,243, 81, 75, 55, 68,110, 35, 55,138, 67,142,212,108,137,225, 14, 73,130,127, 58,161, 0, 63,215, 1, 66, 68,225, - 88,104, 54, 7,185, 56, 1,242,151,186,110,217,232,170, 78,121, 0,218,217, 20,103,181, 27,242, 48, 24, 70, 9,136, 66, 72,207, - 34, 78, 46,149, 66, 63, 23, 72, 47,174,104, 89, 20,231,113, 34,127, 66,236, 18, 89, 7, 92,213,189,185, 23,191,234, 27,166,163, -166, 97,182,100,147,110, 55,129, 58, 13,148,212, 38,105, 36, 48,238,185,201,141,233,100,115, 27, 80, 55,201, 49, 50,151,137,215, -186,146, 4, 82,220, 5, 7, 6,183, 96, 50, 77,110,153, 50,101,193, 85, 86, 40, 68,105,148, 22,203, 52, 45,100, 51, 76, 72,158, - 41, 22, 0, 93,221,105,186, 97, 52, 46,149,140,132, 40,151,123, 3,127,184, 79,155,202,109,117,165,161,141,162, 49,249,194,181, -149,251, 4,198,151,189,165, 29,127,199, 6,235, 71, 50,200, 19,228,147,232,181,146,233, 95,154,235,211, 30,252,241,243,251, 92, - 11,101,225, 59,243,171,219,254, 54, 61,170,215,242,200,229, 80,160,176, 56,183, 16,140,142,231, 81,218, 61, 24,220, 88,217,242, - 55, 23,122, 55, 79,194, 19,197,126,160, 59, 64,230,204,144, 97, 60, 50,121, 42, 36, 5, 34,116,161, 75, 78, 43, 14,201, 31,128, - 98,203, 20,243,129, 55, 8,134, 62,183,207, 21,228,159, 48,221,183, 44, 87, 23,239, 82, 20, 53,205, 49, 91, 43, 75,167,224, 0, -232,194,145, 70,187,225, 30,133,254,211,238,173, 23,111,215,197,122, 87,248,199, 98, 52, 22,211, 41, 64,119,153,253,250,116,250, -252,221,231,141, 96,255,234,118,255,242,242,201,163, 55,207,196, 36, 22, 6, 87,216,105,183, 78, 83,192,246, 92,241, 53,116, 30, -252, 4,108, 34,108, 75,120, 77,192,246,221,240,195,235,143,175,222,127,205,255,123, 2,196, 61,247,246,227,254, 90,148,197,180, -184, 20, 57,121,205,222,102,176, 53,155,177, 45, 88,236,205, 49,101,187,237, 30,252, 14, 4, 19,102,184,183, 19, 92,154,218,190, -211,163, 57,209,100,140,190, 13,149,117,229,236,135,202, 93, 51, 57, 70,205, 29, 52,170,142,176, 10, 1,151,244,198,164, 46, 27, -210, 38,212, 2,248,204, 59,132, 62, 73,242,163, 71, 67,159, 7, 66,144,207,232, 31,134, 24,254,142,176, 26, 9,129,180,237,116, -207, 38, 97, 82,100, 74, 50,179,168,173,246, 76, 4,129,201,210, 21,137,116,150, 47,184,136,217,149, 98,113, 37, 75, 40,148,142, - 27,155,232, 74,155,178,230,204,148,213, 37,181,232,141,174, 4, 9,106,171,170, 20,252,206, 75,174,151,146,201, 76, 0,251, 35, - 0,105,215,174, 27, 53, 16, 69,253, 88,175, 95, 27, 59, 47,146,144, 64,162,141,136, 34, 34, 26,146,154,138,138,159,224, 3,144, -144,248, 14, 42, 26, 16, 72, 52,180,148, 84, 8, 65, 73, 5, 45, 5, 41, 16,164, 72, 66, 86, 81,246,101,239,218,227,241,112,207, -157, 89,118, 21,104, 16,210, 54,222,135,100, 95,237,204,156,123,239,185,231,252, 51,126,183,254, 40,206,160, 39, 97, 57,161, 27, -179,129,234, 37, 20,239,154, 52, 97,198, 17,100, 6, 38,207,158, 73,166,221,138,228,220,242,216,155, 2, 37, 20, 49, 57,135, 28, -195,127,119, 93,124,129,254,254,252, 98,110,174,135,233, 57, 79,247,145,151,226, 43, 66,137,145,200, 93, 3,227, 13,130, 87,166, -153,162,120, 90,169, 6,105,212, 82,151,186,166,179,157, 95,102,137, 76,219, 38, 40,109,227, 39,184,213,149,116, 61, 47, 51, 15, -202,239, 0, 16,180,128,245,150, 6, 38, 9, 18,127, 71,139, 45, 17, 12,173,148,236,143,198,203,161,215,190, 54,231,121, 4,128, - 26,145, 7,119,211,180,213, 76, 90,110,236, 67,241,156, 5, 74,109,143,211, 23, 20, 82,100,141, 66,205, 24,158, 95,149,168,125, -199, 13, 65,148,199, 76,233,120, 84,102,163,138, 66, 29,120, 78,236,123,177, 7, 92,197, 58, 79,112,183, 9, 92, 21, 5, 4,173, -220,148,142, 59, 23,143,214,100,201, 62,246,232,114,180,220,177, 45,217,190,204,146,141,134,211, 10, 40,110,204, 46, 70, 11, 80, - 69,244,142,143, 65, 68, 71, 66, 29,112, 62,164, 76, 3, 30, 57,253,193,120, 48, 20,218,154,103,178,224,116, 97,198, 54,225,225, -107,102, 29, 79,135, 27, 16, 15, 48,110, 84, 18, 45, 22,213, 40, 9, 23,152,238, 40,181, 38, 18,133, 46,108, 6, 85, 85,161,171, -201, 50,241,173, 32,169,153,252,160, 27,232, 77,180,230, 26, 66, 84,237,181,237,150, 31, 51,184, 14, 4, 6,149, 13,184,132, 71, - 37,166,171,192,100, 93,136, 9, 82,129, 38, 79,161,203,138,156, 86, 77,206, 19, 49,138,159,142,176, 63,120,205, 90,106, 15,254, -212,233,168,204, 27, 56,127, 61, 5,174,156,194,152, 34,251, 41,131,174,163,192,104, 36,240,222,233,119, 40,177,219, 88, 90,199, -192, 38,152,106,122, 12,194, 90, 77, 86,155, 77,255,180,123,124,214, 61,167, 28,236, 96,123,255, 71,231, 40, 47,178,131,157,253, -195,227,195,200,139,178,114, 88,214, 37,229, 55, 23,121,191, 20,227, 66, 20, 97,216, 74,163,100,115,185,125,145, 1,137, 83, 28, - 90, 97, 74, 27,253,238,198,110, 47,239,237,109,238,157,116,127, 66, 58, 92,140,249, 84,147,244, 56,116, 75,154, 33, 93, 85,178, -155,119,165, 98, 56,111, 67, 53,143,117, 38,192,230, 44,171,130,118,165, 27,107, 59,157,193, 41, 59,225, 53,232,211,188, 24,222, -222, 58,248,124,242,245,193,227, 23,119,101,115,101,235,170,181,144, 2, 47,125,207,242,119,223,238, 60,121,253,101,208,251,235, -186,126,254,240,158,221, 38, 20, 47, 24,173, 43,232, 16, 5,244,242,173, 57, 15,190,233,132,217,147,208,154,167,109, 61,177,174, - 83,102, 80,191,127,244,230,214,253,151, 31,142,252, 79,111, 63, 62,125,245,236, 63,247,119,218,208,111, 46,110,245,138, 97, 28, -205,157,247,206,224,100, 73, 56,189, 86, 83,176,224,216,148,133, 14,199, 25, 97, 72, 66,232,189,209, 0, 44, 78,201, 92,120,197, - 25, 10, 8,205, 66, 87, 99,107,173, 34,108, 27,227,163,122, 50,181,202,176, 89,114,233,156, 93, 92,121,241,151, 69,153, 87, 57, -212,190,164, 76,163,185, 82,148,188,210,171, 28,210,120,182,100,193,178, 33, 60, 6,100,109,106, 41,216,124, 41,227,172, 52, 99, -157,133,157,148, 61,229,184,224, 10, 55, 84,203,137,139, 42, 51, 48,181, 60, 71, 61,163, 93, 99, 50,139, 90,235,142,153,233, 29, - 83,186, 97,215, 41,102,197,216,186, 26,111, 10,224,179,149,117,110, 15, 78, 28,158,234,223, 3,162,202,168,140,115, 45,129, 86, -205, 47, 1, 56,187,150,221,166,161, 32,234,107,251, 94,219, 73,220,132, 52,113,210, 34,216, 20,177,168,212,138, 15,168, 84,129, -212,159, 98,203, 31,176,230, 43, 16, 27, 22,128, 42,117, 73, 5, 18,170,144, 42,186, 41,148,190, 75, 98, 39,177, 29, 39, 49,115, -230,218,164, 81, 87, 84,173, 90,117, 81,201,113,156,153, 51,119,206,227,158,248,125, 17,188,243,160, 96,152, 37, 3,178,248, 12, -222,226, 68, 46,148,239, 50, 14, 70,220,246,251,181, 88,117, 77, 24,150,243, 61,138,243, 41,141,220, 37,103,139,149,178, 85,170, - 86,182, 94, 74, 43,161, 20,180, 68,182, 3,178,150, 82,150, 84,166,116,112,200,171,142,162, 3,229,200, 40, 65,120, 38, 78,165, - 57, 25, 88, 55, 0, 42,107, 84,136,170,142, 79, 80, 72,147, 81,239, 20,247,114, 69,178,160,170, 45,211,107,203,235, 23,133,179, -205,252, 56, 74,135,190, 34, 42, 30,209, 48, 38,161,117,194,241,146,149,182,157,134,183,181,217,105, 53,189,225,120,146,140,141, - 48,206,232,103, 20, 79,211,153, 72,161,149,225,149, 21, 80, 88,174, 36,110, 38, 77,227, 84, 27,168, 81, 72,212,127,129,165, 43, -117,173,108, 74,229, 28,122, 66,155, 62, 0,244, 20,226, 5,153,124, 94,200,188, 90, 52, 24,199, 18,176,197, 54,112,240,130,251, -198, 19, 54,225,119,219, 18, 84, 12,233,111,112,238,113, 74,144, 13,199,217, 40,213, 32, 71,140, 39, 48,136, 76,245, 55,124,249, -176, 69,202,231,166,117, 26,111, 67,226, 20, 38, 61,193,177, 7,122,118,241,161, 4,137, 39, 72, 73,187,237,194, 90,188,179,250, -177,230, 95, 24,122,130,165, 85,186, 90,106,135, 26,139,107,131, 62, 51,215,182, 25, 22,220,246, 53, 54, 41, 34, 87, 76,206,174, - 7, 98,161, 89,170, 91, 95,249,121,115, 92, 10, 98, 1,195, 60,167,102,155,118, 4, 31,121,182,243,101,209, 96,133,154,193, 20, - 10,219,182,223,186,140, 46, 52,111, 97, 86,208,100, 11,193, 67,213,173, 13,147,161,201, 68, 9, 71, 57,190, 11,214, 77, 54,129, - 51,176, 37,228,132,131,226,164,148,155,143, 54,111,162, 63, 81,220,163,139, 77, 96,128, 3,118,212, 90,247,201,143,179, 67,105, -218,129, 31,116,154,193,225,201, 33,221,218, 65, 60,224,196,118, 85,171, 84,146,116, 76,173,131, 58,138,163, 60, 2,254,202,118, - 79,175,127, 61,108, 61, 70, 54, 47,155,190, 14,146,136,230,140,231, 27, 47,190, 28,237, 95, 15,192,255, 25, 33,246, 0,216,163, -225, 53,250, 73,143,179,130,161,174,160,145,212, 85,238,214,198, 86, 86, 21,187,159,222,211, 37,241, 53,139,246, 82,112, 22,158, - 47, 57,244, 42, 8,233,103,219,235,219,251, 71,159,233,214,117, 26,221, 56,237,217,121,250,250,235,135,126,150,254, 95,134,218, -222, 43,227,169,111,140, 6,156,197, 98, 96,209, 26,101,198, 77, 2, 90,114,213, 5, 96,175,123,134, 81, 49, 46,251,187, 47,223, -237,188,249,168,139,197, 3,175,121,240,118,111,117,103,253,222,149, 93, 25,118, 83,214,158, 45,175, 57, 82,210,212,176, 92,105, - 34,134,165, 90,191, 10,175,176,194, 42,206,137,208,203, 25, 94,204, 32,207,200,167, 77,191,117,222, 59,165,103,176, 93, 15,194, - 56,236,199, 97,177, 97, 35,120, 87,167,129,233,162, 3, 6,203,111, 13,240,254, 29, 97, 3,145,136, 89,219, 15,186,141,149,239, - 39,223,152,111,195, 34,193, 82,223,148,151,101,203, 18,115, 94, 13,255,151, 86,150,178,151,140,214, 97,232, 5,150,206,140, 42, -200,232,229,236,106,192, 54,131, 30,121,106,246,128,119,195,158, 16,115, 11, 98, 71,130,213,205,249, 45,122, 99, 61,117,165, 11, - 50, 68,166,121, 31, 58, 99, 10, 95,126,165, 49,202, 6, 19,244,155, 2,189, 47, 22, 94,115,174, 19, 42, 18,156,238,188,167, 57, -172,193,255, 10,192,217,185,235, 54, 17, 5, 97,248,236,205,235,245,122,125,193, 56, 49,137, 16, 18, 72, 52, 20, 41,128,130, 34, - 20,180,244, 32,120, 6, 26, 30,129, 23,224, 49,232,144,232,104, 35,133, 18,145, 20, 17, 72, 20,137, 19, 72, 28, 59,137, 55,242, - 37, 27,239,122,207, 50,255,204, 58,230, 34,132, 66,103,185, 58, 94,159,157,153, 51,231,159,239,191, 68,124,255,179, 57, 3, 78, -150,114, 98,125,126, 49,173,202, 8,176, 2,227, 92, 44,190, 50,250,197,118,105,142, 81, 87, 12, 47,196, 33,107,250, 91,151,198, - 80,118,194,139, 49,115, 33,188, 24, 71,102, 54,214, 41, 54,225, 54,235,103,216, 94, 64,217,158,237,162,156, 55,157,146,131, 56, -102, 24,110,195,175,181, 71, 59,253,168, 71,207, 31,134, 26,240, 29,194, 27,139,242, 71,229,248, 55, 11,173, 98, 59,230,241,229, -139,167, 47,213, 97, 6,210,127,171, 55,232,152,202,252, 55,177,120,174, 68,229, 43,120,199, 75,210,168, 92,172,141,147, 49,131, - 27, 21,230, 84, 45, 33,158,153, 15,110, 47,210, 2, 35, 10,162,104,125, 83, 37,230, 4, 65,209,100,170, 2,132,110,160, 76,168, - 73, 2,145, 39,224, 74,241,212, 65, 25,174, 45,166, 46,192,201, 27,192, 67, 3,141, 92,238,117,148, 44,203,167,160,130,227, 11, -206, 47,152,102,114, 49,214,171, 39,250,116, 66,233, 0,114, 98,215, 54,227, 76, 83, 6,156,164, 41,140, 1, 51,163, 85, 15,214, -183,118,167,144, 73, 66,245,149,155,195,107, 25,251,227,104,158,138,130, 75,128,121,169, 84, 41,232,212,232, 44, 40,214,233,245, -195, 42,114,191, 91,118, 77,148, 55, 71, 49,104, 1, 4,152,225,108,192,205,148, 12, 41, 18, 5,185, 73,112,161, 19,103, 50,114, -222,235,148, 4,148, 49,209,193,224,116,164,252, 66, 0,153, 13, 4, 63, 54,187,153,209,251, 85, 40,186, 69,170,196,155,149,197, - 36,137,143, 70, 80, 7,210,242,160,101,214,160, 15, 9,239,251,238,205,123,159,218, 31,105,105,215,106,173,254,232,228,140,133, -228, 28,226,231,198,142, 25,123,166, 95, 9, 26,167,163, 16, 54,223, 24,188,135,115, 38,229,229,165,250,210,238,209,206,139,167, - 47,223,175,189,251,222,223,183,185,223, 72,155,185, 92,244,207,146,200,115, 96,177, 66, 27,138,190, 92,185,177,178,185,189,185, -122,231,225,206,225, 54,149, 72,173, 70,243, 48,236, 13,198, 3,215, 41, 84, 75,213,189,227,118,201,241,233, 15,161,130, 61,240, - 42, 49,248,239, 81,173, 84, 25,199,240, 41, 12,188, 42,122,111, 9, 37, 12,171,236, 81,193, 24,209,158, 9,207, 66, 12, 86, 88, -102,169,192, 87,169,202,160, 24, 7, 39,163,225, 41,157, 18,104, 19, 21,192,169,228, 9,104,250,251, 77, 33,145, 2, 8, 65,105, -137, 45,141, 82,139,189,128,175,215, 22,223,126, 89,219, 8,191, 93, 54,206,190,121,124,255,217,235,231, 42, 48,160,186, 57, 25, -170,240, 92,245, 38,234,107, 95, 13, 38, 27,237,206,214,193, 96,161, 85,221, 63, 30,189,250,240,121, 79,205,207,232,174,114, 79, -214,183,203,171,203,255, 29,223,159,220,122, 68,137,106,161,222,236, 14,186,157,126,151,207,115,218,119, 61,250,141,227, 8,214, -178,210, 86, 86, 51,183,186,148, 39, 78, 32,157, 49,244, 20,112, 26,108,171,102,165, 73, 31, 65,110,224, 98,109, 10,157,171, 33, - 54, 82,217,108,128, 72,174,117, 36,124,194,103, 38, 77, 0, 13,101,223,164,217, 20, 59, 10,236,229,198,242, 65,216,201, 59, 32, -185,116, 64,110,104,181, 20, 58, 83,110,169,136, 66,152,150,209, 8, 26,116, 20, 75,185, 69,227,187, 62,148,184,249,164, 83, 38, -221, 72, 99, 6, 39, 99,168,118,142, 20,203,114,221, 60,100,125, 87,131, 86,119,216,201, 79,195, 90,154,239,194, 42,208, 98, 4, -152,215,143,250, 47, 83, 69, 63,169, 22, 77,238, 46,205,114, 65,174, 87,255, 33, 0,103,215,178,219, 52, 16, 69, 61, 51,126,228, - 85,167,109,162, 58, 45, 5,149, 20,132, 34, 33,241,150, 88,177,225, 3,248, 2,190,136,207,224, 7,216,178,102,209, 21,160,174, - 16,173, 4, 68, 17,105,104, 76, 30, 77,156,216, 78, 60,230,222, 59, 99, 55, 41, 44, 80,149,135,162,108, 18, 39, 51,103,238,227, -220,115,254, 23,223,255, 6,247, 52, 99,206, 48, 13,187, 74,111,128,154,120, 84, 40,149,198,170,151, 82,142,137,128, 5,162,128, -181,232, 98, 65, 84,224, 50, 71,203,158,212, 45, 58, 98, 17, 25, 44, 50, 22, 66,211,212, 81, 61, 61,213,226, 51, 66, 73,180,195, -137, 98,209,241, 0,139,220,225,112,183, 76, 64, 57,244, 5,197, 42,141, 35,236,106,193,245,195,126,103,246, 29, 78, 75, 8,136, - 36,178,169,144, 28, 25,168,190,110,170, 59, 41,120,144,164, 81,190,124,242,224, 29,182,180, 36,105,233, 85, 5,232,127,177,223, - 51,161, 51,122,205, 53,140,113, 50, 22,166,154, 21, 13,150,193,117,162, 26,182,165, 92,160,240, 78, 91,145, 52,178, 73, 80, 71, -207, 30,203,188, 29,140, 74, 44,164,235,136,165,112,114,245, 35,171, 14,193, 28, 52,210,196,137,240, 90,177,100, 88,203,243, 96, - 62,149,241, 48,138, 32,233, 9,162,100, 20, 68, 23,211,208,208,138,141, 43,229,179,178,243,226,201,227,112, 50,220, 48,249,110, - 13,253,126,142,142,145, 71,145, 96,215, 47,161,113, 17, 98, 68,162,237,147,234, 59,105,167,121,202,100,179, 66,149,193,170,229, -237,223,147,190, 82,213,200, 6,127,211,220,188, 77,234,110, 17,174,114,244, 42, 67,135, 17,115, 73, 14, 59,232,240, 69,121,113, -115,231, 16,130, 48,128, 63,134,190,134,162,238,122,253,113,175, 90,222, 26, 5, 3, 53, 29, 70,118, 92,248,120,122,248,236,243, -183,143,166,170, 65, 99,155,138,187,142, 59,137, 1,244, 49, 84, 39,211, 20, 77,191, 82,124, 89, 91,216,161,242,253,208, 37, 55, -220,144,119,247,238,157,118, 79, 72,214,251,114, 15,144, 76,136,132,160, 41, 74,226,134,187, 59,195,212, 27, 15, 81,200, 6,224, -231,253, 53,238,121,110,227,102,253,214,113,251, 19,124, 72,235, 70,235,108,248, 19, 93,148, 72,132,210,196,190,203, 18,158, 15, -188,230, 52, 64,123,222,179, 17, 42,143,123,110, 13,190,230,253,253,214,151,238, 87,127,236,171,156, 14,222,217, 42,109, 14,130, -225,237,157,131, 31,231,109,128,126, 84, 53, 32,210,106,185, 8,203,222,128,156,128,136, 67, 41,172, 94,128, 27,226,228,165,149, -194, 6, 74,166,112,177, 68, 9,127,184, 37, 84, 91,227,234,114, 1,200, 6, 23,195,253,250, 30,202,220,115,110, 90,130, 96, 35, - 73,245,168, 25,252,249,139,183, 39, 31,174, 7,181, 47,221,202,155, 87,207, 31, 61,104, 26, 11,102,116,225,248,155,189,126,127, -244,174,239, 95,153, 85, 47,217,144,157,232, 18,119,213,174,141, 34, 31, 22,166, 52,226,235,125,232,195,237, 59, 94,161, 58,151, - 49, 28, 78, 16,159, 37, 16,133,112, 93, 37,135,181, 4,104,219,238,183, 57, 38,160, 69,216,194,243, 88, 49,226,116,224,140,191, -252,102,163,227,119,164, 42,209,232,158, 38,114,184,146, 44, 72,161,127, 63, 39, 85,104, 99,107,206, 21,131, 35, 85, 58,179,228, -126,166, 20,191,164,109, 57,209, 34,230,108, 93,207,156, 93,114,101, 36,250, 53, 72,138,176, 19, 37, 7,175,250,181, 0,199,182, - 40, 33, 45, 56,103,163,167, 43,163,164, 57,199,140,101,142, 77,186, 66, 3,215, 43,200,115,130,103,200, 78, 53, 28,150, 87, 65, - 20,205,207,142,226,112,213,229, 98,205, 92,155,173,193,235,149,102,226, 31, 1, 40,187,150,221,166,129, 40,234, 25,207,216, 78, -210, 56, 9,105, 75,121,116,129, 84, 33,144,186, 67,253, 2, 62, 3,248, 14, 22, 44,248, 68,196, 2, 9, 54,133, 29,143, 64,132, - 19, 59,182,199,246, 12,247, 49,182,210, 82, 4, 72,149, 23, 85,226, 76,156,153, 59,231,222, 57,247,156,127,138,239, 55,202, 11, -120, 66,219,224, 30,226,255,188, 89, 73,240,155, 11, 44, 95,176,191, 43,192, 89,203,213,227, 84, 29,149, 46, 43,187,156, 83, 84, - 34,198, 32,193, 84,248, 77,194,135,117, 77,128, 93,146, 85, 48, 94,137,232, 1,243, 64, 75, 29, 99, 0, 84,240,154, 36,140, 19, -141, 85,154, 73,124,144,153,236, 50,251,192,253,111,120, 40,232,232,148,213,245,154, 62,100, 88, 46, 56,233,243,233,143,232, 79, -255,177,146, 96,189,169,202, 21,175, 18, 25, 92,227,214, 56,150,193,105, 93,131,185,128, 68,149, 31,233, 69, 14, 72, 30,152, 54, - 59,133,224, 29,177, 45,201,153,208, 27,240, 31,210,145,126, 60,215, 47,164,135,255,114,175,165, 98,160, 89, 57, 79,239, 65,142, -141,194,170,133,196, 77, 58, 26, 69,171, 93,193,146, 46,112,169, 13,118,230,121, 30,129,100,154, 47,124,166,154,162,108,163,126, -122,241,164, 42, 11,209,236,108,151,103,107,243,121,141,188, 28, 18,232, 11,200,137,169, 55, 44,232, 4,145,147, 28, 19, 28,109, -192,154,117, 60,127,187, 88,143, 81, 78,107,183,198, 56,140, 62, 39, 98, 8,241, 3,217, 22,238,196, 10, 4,104,173,133, 46,125, -232,192, 22,225,126, 73,245, 49,103,153, 0, 68,139,203,106,165, 59,210, 6,160, 39,137, 9, 21, 12, 2, 82,239,186, 46,170, 22, -158,100, 24,235,184,105,234,249,120,185,173, 51, 49, 48,207,130,190,130,227,155, 71, 68,172,146,227,244,112,149,173,234,182, 30, - 28, 41, 89,172, 27,226,184, 14,117, 81,231,190, 11,145,138,215,240,197,102,211,121,190,203,211, 81, 10, 35,132,217, 82,154, 82, -163,148,123,146,215,232,208,162,148, 58, 63, 61,127,123,249,230,238,252,244, 71,177,234,201,160,142, 40, 82,114,126,176,136, 97, -228,109, 7,183, 61, 89,220,249,186,254, 18,162, 90,156, 27, 69, 0, 32, 10,242,240,149,252, 35,194,125, 12, 50, 34, 68, 58,154, -231,104,214,136, 63, 99,154, 28,192,214,210,182, 13, 12, 12, 13, 41, 5,246,202,146, 87, 73,209,203,145,216,195,233,210, 88, 3, -136,164, 50, 37, 17,162,131,123,139,251,176, 11,162, 19, 23,110, 6, 6, 18, 23, 60,207,223, 59,189, 99, 35, 22,216,251,223,125, -127,159, 40, 5, 79, 40, 71,131, 0,155, 55,117,213, 53,219,198,236,200, 31,195,218,191, 91,248,156, 69, 73, 27,218, 85,101, 10, -122,109,172,208,222, 11,235,207, 40,179,131, 11,199,152,150, 81,226, 88,164,133,205, 30,222,126,252,236,197,243,215, 47, 95,137, - 99,241,191,241,125, 25, 77, 47,142, 30, 33,158,115,114, 54,154,110,170, 45, 17,189, 66,236, 83, 65,164,165,169, 85, 24,214, 10, -218,180,213,168,129, 17,112,145,132,203, 35, 48,164,134, 72,228, 48,223, 32,245, 1,248, 28, 80, 3, 7, 44,247, 7, 39,103,159, -190,125,100,251, 54,134, 44,128, 36,208,199,177,250, 41,253, 10,113,254,160,181,239, 59,191,137, 98,232,134, 22, 39,198,237,156, - 49,220, 74,151, 0,210, 0,233,163, 28, 10,167,191,130, 21,169,132,248, 67,228, 12,177, 65, 58,217,148, 27,175, 40,223, 91,185, -186, 1,179,247,139,110, 26,207, 10,179, 97, 33, 29, 54,133, 26, 69,147,188, 45, 38,106, 92, 92,117,200,232, 45, 74,174, 15,219, -238,149,116,126, 9,192,217,181,236, 54, 13, 68, 81,143,199,177,147, 56,202,171,161,161, 32,132,132,132,196, 22,169, 44,248,120, -144, 16, 95,192,130, 93, 17, 17, 80, 74, 72,154, 16,199,111,143, 61,220,115,199,118, 29,181, 27,144,186,171, 18,219,227,201,125, -156, 57,247, 28,231,159, 96,153, 46,242,174, 27,207, 13,171,163, 40,128,131,108,233,154, 49,199, 7, 11, 95, 94, 71,215,220, 83, -106,169, 17, 15,173,233,147, 9,169,182,148, 22,230, 70,101,115, 9,217, 81,142,228, 56, 44, 81, 26,243, 31, 20,169,192, 63, 4, -213,144,190, 49, 99,159, 79,209, 64,111,109,251,210, 85,255,185, 79,229, 47, 77,123,161,181,245,208,123,106, 63,233,128, 69, 75, -165, 92,222,166, 0,100,117,216,152,112,197,192,232, 52, 24, 49, 8,116,236,142,108,220,190, 44,219,163, 95, 14,208,141,138,218, - 80,161,216,109,210,182, 27,129, 12, 67, 13,169, 3,252,196, 91, 28,178, 45, 47, 40,183, 4,200,242, 0,112, 42, 7, 31, 21, 14, -133, 9,202, 14, 94, 72,197,134, 18,187, 40,167,146, 69, 14, 68, 89,178,184,139,221,155,140, 61,168,211, 22,229,212, 31, 76,125, -191, 80,217,197,242,124,243, 99, 21,236,213,175, 29,184,244,170, 0, 75, 66,179,164, 11,184,148,117,111,136,188,199, 79, 96,172, - 99, 88,224, 86, 48,225, 72, 72, 10, 70, 20,110,234, 23,100, 75, 93,149, 29,181,108,110,163,109,199,117,122,105,153, 24,160,155, -106,153,133,191,220,134,235,130,242, 31,242, 26,131, 37,186,129,178,132, 80,240, 18, 20,218, 84,167, 40, 91,144,254,254,132, 91, -211,222,184,142, 75,209, 25, 71,148, 42, 49,106,239,230,116,107,232, 80,115,173,152,127, 84,111,194, 56, 15,191,109,227, 81,127, -212,117,110, 96,130,115,213,199, 16, 50, 55,224, 26,205, 29,237,147, 92,229, 56, 56, 0, 83,130,121,110, 48,251,222,157,141,151, -187,227,198,239,251, 34, 1,248,170, 10, 21, 68,161,210,229, 54, 90,179,145, 11, 60, 65,151,179, 39, 81, 26, 82, 25, 53, 29,142, - 87,155,175, 14,172, 90,228, 49, 9, 60,183,151,194, 74,208,138,210, 68,195,136, 17,145,135, 91, 6, 92,139, 22,197,195, 8,238, -193,180, 66,204,240, 43,146, 44,166,125,171,108,176,102,103,254,236, 16,237,207,198, 11,138,104, 73,150, 60,157, 63,163,231,141, -178,184, 68,115,133,179, 67, 90,141,199,211,243,159,251,107,244, 28,121,161,100, 62, 27, 76,163, 52, 70, 63,216, 32, 54, 92, 79, - 26,223,105,186,220,224, 54, 61,246,113, 22,101,251, 66, 78,250, 30,194,189,133, 35, 90,216,138, 10,122, 47,185,211,243, 95,189, -120,254,225,243,167, 36, 77, 36, 40,197,208,179, 61,170, 34,133,211,139,190,202,211, 19,131, 55,140, 28, 43, 3, 45,160, 26, 80, -119,227, 66,177, 14,130,213, 97,115,184,125,247,241,253,219,215,111,254,163,126,207, 42, 53, 26,250,105, 4,219,116,218, 93,198, -186, 26, 50,133,172, 31,119, 76, 24,235,211,212,248, 20, 37,227, 33,204, 24,145,170,202,204,253,240,228, 19, 35, 39,130,182, 65, -102,226,102,207,150,143,230, 23, 95,110,174,232,127, 92,170,235,203,151,151, 55,251,245,245,238,123,141, 25, 50, 19,162, 13,232, - 54,135,101,166,195,213, 36,239,170, 59, 6,106, 14,228, 12, 71, 89, 24,145,112,253, 59, 88,115,217,110,215, 13,174,168,205, 88, -173, 19,158,250, 9,187,154, 22, 46,209,105,165, 27, 16,216, 60,170, 96,106,130,168, 17, 31,243, 29, 97, 17, 80, 82,159, 12,231, - 44, 81,135,136, 31,177,164, 48, 40, 33,213, 29,239,187,141, 72,229,189,136,223, 53,174,250, 43, 0,103, 87,178,219, 52, 20, 69, -253,158, 29, 59, 78,156, 57, 77, 65,180,180, 2,169, 72, 72,172,216,179,132, 21,127,193,199,241, 9,236, 88, 34,245, 3,144,232, - 10,165, 12,165,169, 51,217,113, 60,155,123,238,243,144,178,170,200, 50,147,146,231,235, 59,158,123,142,241, 31,242, 76,226,222, -206,170, 34,239, 45, 42, 73, 85,163,196,194,243,216,187,104,198, 20, 77,139,136, 17,222, 0,201,152,140,147, 1,185,101,243,186, - 48, 0,230, 17,117,151, 65, 47,187,237,138, 28,152, 27,187, 72,163,208,112,151, 76, 89, 10,182, 23,136, 24,163,245,206,104, 25, - 97,106,122, 84,236, 36, 88,129, 42,150,136,202,187,215, 74, 93,178,198, 30, 85,201,123,246, 0, 65,240,138,192, 71,237,211,178, -197,163,154, 45, 25,177,248,231,145, 7,230,101,125,164,188,148,119, 20, 70,203, 34, 59,164,138,150,124, 89, 26,134, 44, 79, 41, - 89, 91,155, 21,193,178,172, 62,152, 74,202, 24, 46,125,145,252, 41, 35, 51, 71, 2,250, 84,202,125, 98, 28,130, 46, 41, 79,165, -178,132,114, 94,186, 1, 54,251,125,146, 42,173, 40,105,181,144,109,181, 77,243,104,208,142, 2, 58,195,228,116,122,124,113,254, -184, 63,116,204,150, 17,218,246,119,207,101, 0, 25,224, 0, 88,247, 82, 89, 46,175,134, 80,138, 36,185, 39, 3, 46, 7,254, 47, -172,166,166,168,242, 10, 48,150, 97, 94, 82,170, 89,209,135, 29,123,192,204, 1, 69,195, 7,138,111, 74, 69,141, 39,213,164,221, -182,165, 47, 42, 19, 47, 23, 6, 44,179,107,235, 22, 22,243,196,191, 21, 30,175,249, 97, 34, 48,118,166,228,245, 32,153,107,144, - 83,219, 15,123, 99, 47,240, 52, 70, 38, 81, 81, 66,133,199,233,232,236,199,242,154, 92,222,172,127, 60,135, 64,163, 70,217,116, -201,183, 93, 90, 14,102, 51, 41, 15,189,212,205, 91,210, 97,105, 12,206,145,166,208,130, 32,217,177, 33,233, 12, 94, 21, 17, 57, - 8, 33, 46,102, 47,190,253,254, 74,209,229,217,209,243,109,180,221,250,107,180,219, 40, 92,165,113,175, 51,216, 4, 27,176,196, -164,133,110, 2,227,232,250,119, 26,183, 0,148, 94, 29, 29,198,160, 51, 32,139, 92,172, 23,237, 54,213,212,216, 3,200, 50,159, -171, 47, 80, 86,232,204,201, 51,114,198, 75,223, 77, 18, 80,196,121,225,134,158,217, 4, 91, 1,134, 65,208,159,165,200,143, 99, -250,197,113, 30, 14,157,137, 23,172,126,174,126,209,165,137,147, 72,210,165,143,139,254,100,120, 50, 61,153,223, 94,131,125,133, - 9, 91, 41,179,233,153, 84, 90,173,200, 46,158, 56,143,174,150, 55,172,229, 34, 85,130, 3, 45, 21,232, 5,242, 54,160, 20, 20, - 29, 95, 61, 61,251,240,254,221,203,243,217,199, 79,159, 39,166,109,160,233, 7, 64, 47, 86,240,216,241,196, 89,238, 38,113,152, -166, 95, 22, 55, 49,118, 59,180, 6,174, 39, 14,241,196, 70,127, 52, 32,251,232, 10,251,237,235, 55, 7, 89,212, 67, 31,126,186, -247,162,221,172, 55, 33, 75, 14,115,128,148, 84,119,194,148, 58,157, 9,231,125,106, 2, 4, 75,109,153,150, 99,245,111,253, 91, - 38,123,199,141, 66,230, 58,116,198, 84,183, 5,225,142,138, 88, 21,230, 40, 82,206,239,230,116,123,244,218,221,125, 20,210,219, - 46,175, 46, 25,254,161, 23,226, 64,155, 67, 37, 78, 60,145, 25,117, 70,235,157, 43, 16,158,239,233, 85,107,213,228, 82,245, 45, - 75,218, 25,118, 39, 85, 33, 81,168,239,200,107, 32,163, 86, 59, 21,209,228,211, 26,111,137, 97,124,198,253,193,198,179, 43,142, -131, 74,127, 85, 49,200, 0, 58,148,187,190,171, 20, 86, 21,123, 41, 29, 76,156, 69,106, 65,178, 33, 17, 43,253, 70,179,221,154, -215, 17,165,234, 14,253, 21,128,177,107,233,109, 34, 6,194,222,151,119,235, 36, 60,218, 82, 74, 75, 91, 65,149,182, 28,184, 33, - 33,241,111,249, 23,156, 56,163,114,227, 33, 30, 82,105,212,180, 18,148,100,147, 52,201,166,217, 93,219,204,195,217, 77, 17, 72, -149,114,136,162,200, 89, 59,246,204,120,230,155,239, 11,111, 99,214,197,191,216, 8, 22, 53, 85, 78,142,123,142, 29,140,112,130, - 24,206,219,192, 91,198,203, 56, 46, 0, 76, 79, 32, 94, 25, 91,106, 48, 4, 43,245,220,214,240, 6, 94,152,128,188,171,112,242, - 76, 53,255, 59,178,238, 98, 11, 14,137,137, 98,122,154, 37, 51, 44, 81,157, 80,140, 75,122,133, 72,126, 48, 70, 98, 41,140,225, - 90,113,107,144,165,162,166,161, 88,162,155,184,225, 96,151,235, 4,124, 22,236,255,124, 30,229,171,117, 61,177,122,161,241,149, - 19, 75,184,107,215,162,158, 52, 43, 8,201,238,209,164, 12, 43,252,217, 36, 82, 37, 54,173,104, 78,106,153,229,125,197, 16,111, -164,237,160,110, 92,143,212,254,192,210,107,146, 44,194,226,112,152,205,203,175,195, 9, 92,189,189, 40,246,176,175, 8,118,115, -112, 87, 73,137,204, 12, 94,195, 15,149,138,132,148,207, 15,158, 70, 82,199,129, 15, 70,127, 62,186,158,206, 74,188,121,184,132, - 45, 88, 99, 43,173,106, 6,205,208, 79, 18,178, 3, 62, 21,184,174,202, 65,154,247,137, 71, 37,208,142,167, 7, 57,253,168, 88, - 96, 29, 9,179,166, 43, 41,229, 55,105,255,161,116,173,229,127,158,193,186, 86,119,123,157,149,112, 5,243,206,158,173,160, 86, -215,121, 86,120, 8,197, 15, 57,225,225,110,171,148,210,162,249,239,111,236,119,123,103, 48,224,116, 54, 65,179,104,169,146,134, -197, 1, 95,197,141,146,216,165,206,251, 29, 24,113,150, 79,134, 89,196,155,108,103,125, 23, 44, 62,117, 12, 34,169, 36, 24,107, - 24,142,229,208, 88,232, 6,153,195, 61,184,213, 97, 46,101,140,217, 18, 44,204,194,143, 23,182, 28,101, 67,248,210, 52,159,192, -178,156, 15,206, 97,215,117,122,157,128,146, 57, 96, 92,148, 47,231,230, 26, 66,182, 7,205, 53,120,218,195,237,195,227,239,239, - 96, 15, 15,198, 41, 60,203,203,246,139,227,147,247,224, 15,168,164, 81, 34,127,145, 8,218,143,219, 74,170,211,203, 83, 8,201, -159,108, 28,124,185,248,108,168,148,146,163, 3, 45, 10,148, 48,180, 43,145, 2,187, 12, 46, 4,149, 41,177, 39, 62, 34,134,194, - 43, 54, 32, 88, 86,102,252,131, 64, 58, 9,240, 25,155,247, 30,254, 26,161, 16,249, 9, 17,106,162,118,152,231,184, 74,137, 67, -177,164, 2,189,137, 2,185, 26,223, 57,155,246, 33,132, 55,172,105, 81, 67, 1,240, 76,194, 58,252,184,188,248,214,233,126,186, -252,249, 97,240,123, 83, 54, 98, 31, 21,193, 84, 20, 53, 67,217, 74,100, 28,224, 85,120, 11,222,135,178, 87,228, 31,123, 72,159, -233, 81, 27,142,182, 55,100,236,164,136, 69, 83,236,108,111,153, 80,139,163, 4, 62,121,251,250,205,163,246,238,179, 87, 71,183, - 55,241, 6, 86,190,204, 74,226,237,130,165, 40,168, 65, 63, 71,209,156, 42, 60, 35,212,138, 64,105, 41,130,202, 96, 40, 69,148, -191, 8,127, 5,183, 87,234, 66, 11,189, 84,236,227,170, 40,193,192, 12,110, 43, 27, 44,240,112,130, 93, 0, 5, 2, 70, 44, 80, -133, 6, 51,102, 86, 7,174, 55,180, 66,202, 85,234,220,214, 17, 84,242,217, 37,254, 59,176,193, 42, 81,240, 0, 25,237, 49, 24, -236,126, 99, 45, 29,227,157,123,173,181,158, 78, 83, 91,145, 17,240, 37,192,165, 51,204,130,220,209,176,174,192,194, 37,240,201, -170,144, 26,254,222,234,222, 89,122,234, 90,161,184, 60,192, 86,204,212,186,164, 11,137,146,191,172, 52,103,248,221, 44,254, 8, - 64,217,149,244, 40, 17,132,209,234,110, 26,154,109,128, 65,150,113,152,209,120,240,247,250, 95, 60,121, 55, 38, 30, 60,168, 49, - 99, 98, 32,179, 36, 12, 3, 3,205,210,208,244, 86,229,183, 84,177, 68, 52, 17,110,144,244, 86, 93,223,250,190,247,114,255, 54, -235,127, 51,238,134,229,145,217,145, 73,176, 72, 11,212,146,206,165,208,173, 11,219, 20,222,177,107,224,240,163,193, 72,150, 70, - 85,121, 20,157,209,157,182, 89, 2,135, 46, 26, 9,220,109, 67, 72,102,105, 44, 13,143,134, 48, 96,131, 78,132,249, 41,236, 0, -103,141, 60,209,162,232, 34,249, 9,108,133, 89,188, 76, 36, 38,107,152, 11, 39, 33, 87, 32, 14,128,126,167, 3, 12,101, 60,161, - 50, 58, 94,186, 93, 76, 67, 57,112, 40,235, 68, 30,116,212,109, 54, 40, 13,205,105,195,202,186,204,236,204,100,165, 90,122, 69, -218, 60,212,192,242,146,135, 64, 82, 77,242, 44, 69, 38,180,176,183, 68,204, 95,113,155, 4, 14,248, 69, 39,203, 11, 79,202, 24, -226,192,167, 56,170,214,138,215,149, 26, 4,195,224,247, 96, 87,108,162,196,149,142,138,236,114,193,170,230,113,236, 11, 69, 51, -112,254, 46, 43, 86,171,219, 85,252,173,255, 8, 79, 44,197, 79,140,112,172,204, 43,169, 51,215,202,161, 76,137, 92, 6,176, 11, - 32, 42, 69,100,122,185,227,245, 46,138,151,191,130,159, 81, 22,130,177, 67,235, 97, 33,187,127,182,123,244, 22,152,206,208,225, -107, 36,127, 94, 47,159,195,239,243, 96, 74, 84,215, 5,154, 10,166, 66, 59, 56,221, 44, 43,185, 85,236,230, 18, 93, 59,124, 33, - 10, 11, 66, 31,197,178,115, 57, 42,152,168, 86,181, 61,223, 44, 88,198,230,118, 50, 96,150, 39, 11, 17, 65,158, 10,113,231,172, -163, 21,156,172, 83,107,143,252, 71, 72,143, 60, 68,193,218, 97,178, 94,134, 11,236,182, 42,245,240,124,103,248,244,144,172,220, -226,225, 65, 75,115, 47, 51,124, 23, 86,163,152, 47,129, 53,191, 60,239,205,214, 83, 68, 70, 38,155,132, 39,218,149,238,164, 5, - 91,196,158, 7,225,138, 95, 8, 76,151,136,148, 7,238, 18, 34,119, 88,144, 79, 55, 31,137, 38, 5,245,118,211, 40, 29,206,199, -184,194, 68, 24,194, 83,111,142,227,194,243,189,121,248,146,115,208, 57,117, 27,237, 84, 37,131,209, 64,154,205, 72,165, 18, 65, -116, 61, 60, 80, 96,195,109,246, 26,215,183,207,125,228,217,177, 84,183,254,210, 95, 78,225,104, 99,154,108,170,151,154,203,205, -124,232, 15,203,133,114,140,157, 9,156,106,176,109,253,126,218,130,134,206,212, 22,114, 8, 36, 57,203,210,183,205, 43,176,239, - 41,178,211,106, 13,104,146, 13,197, 59, 76, 80, 55, 53,251, 58, 25,188,123,255,225,243,253, 15,180,209,176,182, 16,188,227, 80, -133, 83,176,221, 70,228,189,168, 64,108,144, 39, 0,138,122, 85,169,125,159,140, 76,163,239, 56,118,135,243,138, 24,222,142,215, - 87,215,154,122, 88, 88, 65,176,122,211,189,248,175, 18,205,116,229,119,206,154,187,225,193,124,206,109,213, 90,253,167, 62,138, -215,199,219, 4,107, 92,130,245,211, 36, 51, 32, 97,158,139,211,121, 5,199, 75,179,112,190, 93, 40,147, 61, 31,105, 95, 96,225, - 46,220,203,185, 9,157,110,107, 19,152,106,183, 71,100, 53, 98, 17,250,132,142,144, 76,177,126, 8,156, 67,172, 29,216, 24,105, - 84,220, 48,226,214,125, 12, 93, 62,226,238,140,212, 61, 81,248, 99,188,156, 8,245, 7,182,154, 61, 9, 69,223, 58,158,179, 33, - 32,171,249,235,217,206,101,202,189, 54,183,186,159,221, 73, 42, 0, 25,190, 44,197,160, 76,235,116,224,105,142,160,246, 8,121, - 94,171,223, 2, 80,118,117,173, 77, 67, 97, 56, 57,249, 60,105,186, 78,187,110, 10,122,161, 14, 5, 81,113, 34,226,141,254, 11, -255,129,151,254, 46,111, 4,193, 95,224, 24, 40,136, 8, 94,201, 24,187, 24,115, 83, 54, 43, 93,211, 38, 77,210, 38,199,247,121, -223,100, 84,119, 37,132,194,218,174, 31,167,231,253,126,206,243,168,255, 34, 36,104,173,219,156, 59,119,186,117, 25,205, 2, 24, -131, 21,118, 84, 28,171,110,164,186, 29,167, 27, 57,218, 7,173,150,235, 25,218, 47, 62,253,233, 1,235,226,185,116,163, 60,232, -240,218,210,143, 1,157,238, 57,157, 2, 93, 1,101,158,152,250,186, 6,238,222,145,202,128, 9,103,128, 67, 97,250, 93, 70,149, - 56, 48,108, 62,231,143,116,186,145,110, 49, 54, 58,215,220,197,235,175,172, 11, 23, 92, 3,131,181,132,249,255,226,218,160,234, - 95, 94, 38,202,250,125, 39,148, 85,114,193,101,232, 94,104,197, 95,188, 26,181,214,181,120,176, 12, 65, 53, 77, 1,199,204,239, -104,168,218,242, 97,210, 34,133, 42,136, 68,118,158,207, 55,151, 40, 7,240, 93, 50,154, 72,203, 68,224,183, 6,152,247, 82,182, - 87,232,186,131, 72,107,199, 55,115,119,158, 59,245,204, 55,101,144,164,117,140, 26, 54,224, 61,100, 83,212, 59, 57, 29, 66, 78, -118,148,236,124,248,108, 24, 81, 78,222,252,254,181, 71, 87,163,205,110,213, 43,230,197,184, 72,102, 21,213, 1, 25, 5,194, 89, - 53,203, 23, 89, 86, 78,199,197, 40, 80,254,237,222, 29, 36,216,144,159, 86,180, 17, 37,100,247,194, 21,133,222,154,180,211,177, -180, 92,228, 90,227,108, 68, 30,211,112,247,205, 3, 9, 35,215, 25, 22,116, 76, 64,172, 81, 66, 59,147, 57, 54,240,221,178, 98, -194,130,219,208,214,224,164, 72,253, 74,135, 53, 83, 69, 9,144,148, 83,121,172, 88, 62, 47, 40, 9, 59, 25, 31,243,128,212, 80, -234,250,224,198, 67,230,105, 41,233, 21, 86, 59,125,153,178,180,154,187, 10,153, 29,133,186, 50, 19, 30, 44,200, 13,130, 27, 0, -232, 29, 6,104,194,125, 60,187,251,188, 0,117,165,154, 20,147,146,231,156,173,110,113,163, 96, 28,248, 96,106,123,188,249, 36, - 12, 52,197,227, 73, 62,193,140,142,109, 71, 65, 22,204, 29,244, 54,232, 71,184, 20,175,121,158,127,248,251, 16, 69,153,109,207, -242,169,246,180, 13,118,217,156,210,255,141,213, 43,190, 71, 91, 72,109,127,219,222,251,177, 39,115,118, 10, 84,145,175,203, 69, - 65,225,144,101, 25, 48, 2,161,112, 27,184,122,247,120,151,182, 28,217, 6,125,242,179,244, 44, 10, 99,246,223,118,172,227, 57, -231,230,100, 95,113, 16,147,209,196,186, 35,211, 8,158,242,160, 10, 54,136, 25,166,100, 47, 75,145, 62,240, 59,215, 59,125,176, -135, 3,127,140, 45, 5,122, 4,230,126, 6,167,187,109,232, 61, 18,144, 56, 80, 2,110, 21, 6,140, 14,217,162, 56, 43,242, 97, -158, 30,165,201,207,105,194, 34,233,166, 88, 44,214,189,112, 37,234,136,228,179,250,203,147,112, 10,106,205, 15,190,236, 15,167, -163,239,167,199, 71, 95, 15,232,177,247, 31,119, 94,191,123, 75, 15,109,109, 61, 13,245,106,139,195,248, 39,117,116, 35, 61,184, -117,243,222,203, 23,175,118,222,124,234,235,203, 14,134,219, 62, 55, 46,113, 98, 4,123, 3, 78, 1, 99, 24,230,186,198, 33,188, - 18, 26,122,232,203, 83,176,172,216,215,103,128,234, 50, 86,178, 54, 45, 32,189, 61, 16,218,234,105,154,101,203,106, 18, 97, 65, -196,183,165, 65, 37,134,213, 88,156, 12, 25,154, 99, 83,237,255,123, 10, 32,218, 74, 64,195, 12,144,172,161,243,165, 27,236, 74, -163, 44,108, 13, 39,167,117,219, 86,110,153, 8,204,210,187,215,204, 54,130,200, 84, 9,138,196,128,237, 82,226,110,221,240,251, -200,121, 44, 97,254,104, 40, 34,219,208, 36, 92, 6, 75,105, 40,131, 69,151,190, 52,223, 99,213,230,156,208,153,159,252, 71, 0, -190,174,165,181,137, 40, 10,207,157, 71,230,145,166,147,152, 82,155,166,150,210, 10, 90, 92, 88,116, 45,130,107,151,174,212, 69, - 17,113, 37,254, 68,151,190, 16, 81, 42, 72, 37, 82,106, 65, 72, 82,218,166,243,186,243,184,115, 61,231,220,153,105,170, 98, 24, -200,102, 66,230,222, 57,231,220,243,248,206,249,244,255, 91,118,114, 96, 85,123,209,188,113, 55,216, 69,114, 6, 25,174,193,203, -115,153,103,106, 22, 68, 58, 65, 17, 4,197, 12, 49, 9,165, 59,244,214,250,110,223,196,153,231,150,103,123,200, 30, 10,142,130, -180, 91, 26,130, 26, 77,156,130, 72,160, 63, 76, 65, 24,138,177,176,102,113,178, 84, 46,201,164,108, 62,101, 44, 84, 84,128, 97, - 41, 85, 25,181, 42,149, 77, 78,133, 65, 83,200,225, 81, 83, 17,135,249,169, 32, 68,193, 36,252, 85,148,106,152,120,221, 51,166, - 72, 14, 47, 85, 32, 40,210, 52,157,249,165,163,230, 83,226, 8, 14, 39, 46,242, 40, 79,216,188,215,242,111,251, 46,137,155, 93, -140,195,169,248, 19, 71, 89, 15,223,167, 81, 21,136,149, 21, 76,107, 72, 92,202, 75, 23,150,192,234,143, 34,159, 41,101,157,220, - 70, 50, 48,161,236, 44,120,149, 60, 23, 81,140, 87, 18, 67,232, 42,115, 14, 17, 41,235, 56,160,255,166, 99,107,176,215,110, 11, -172,138, 22,156, 77,190,125, 29, 69,113,106,176,170, 79,227,227,254,151,147,227, 89, 84,112,100, 50, 41, 65,149, 5, 9, 32,126, -229,154, 72, 69,202, 11, 88,127,208,179,122,139,102,143,158,154,113, 44, 9,162, 79,156,101, 41,209, 9,168, 73,206, 76, 65,129, - 28,195,198,209,246,248,114,192,217, 47, 51, 44,148,105,196, 81,213, 2,215, 31,199, 32,235,132,133, 34,178, 20,157,160,196,244, -115,253, 74,123,137, 0,130,186,234,176,213,213,248,200, 58, 6,130, 29,192,193, 62, 58,179, 13,219,214,237,171,254, 0, 92,227, - 15,223,223, 73,194,148,242, 44, 4,175,246, 47,161,213,151, 58,125, 67,107, 16,110,178,235,117,183,135,219,219,195,155,146,144, - 60,185, 72,127,140, 71,224,175, 97, 61,151, 68,192,165,177, 57,141,101,128,101,122,150, 7,135,205,225,244, 32, 77,147, 58, 29, -133, 92, 52,212, 13, 80,242, 52,155,204,198,160,165, 63,143, 15,219, 78,155,122, 0,116,175,213, 6,129,140,178,144, 38, 40,163, -106,128,204,103,121,134,252, 79, 32,252,166,233, 88, 14,200, 18, 28,234,235, 75,235,139,174,191,181,178,233,123,139, 60, 79, 58, -190,255,232,225,147,233,108,138,126, 34,188,211, 20, 15,188, 44, 79,207,249, 12, 17,186, 76, 15,227, 40, 74,130, 65,127, 5,194, -180, 73,128,156,230, 1, 79,184,160, 2, 35,229,108, 23,236, 54,102,135, 40, 37, 86,146, 3, 25, 23,217,181,238,170,192, 76,180, -172,132, 31, 73, 77,153, 58,163,104,246, 51,248,182,153,178,213, 5, 18,121, 8, 65, 25, 30, 56,198,226,148,143,195,104, 2,226, - 34,193,158,226,237,119,250,203,212,203,214,112,221,203,102,220,212,192, 29,108,220,189,190, 51,220,186,189,121, 99,109,103, 99, -217, 91,125,112,255,222,238,203, 93,216,144, 79,239,223,190,122,252,162,190, 19, 25,222,248, 57,255,252,122,111,173,115, 43, 58, -136,162,120, 50,122,179,247,252,233,179,163,253, 35,136,201,224, 77,128,138, 97,101, 72, 43,121,206,207,176,244,226,156, 68,167, -216, 56,202, 20,234, 28, 3, 65,223,237, 57, 45, 71, 72, 50,250,148,221, 80, 84,165,213, 25,160, 12,104, 99,151, 43, 29, 98, 23, -250, 89,149, 53, 27, 4,112,117, 79, 3,125, 20, 40,108, 22,230,244,221,158,106,203, 83, 0, 55, 56, 72, 18, 8,113, 9, 29,137, -245, 92,114,201, 60,167, 93, 99, 46,105,135, 5,253, 5, 83,255,142,155,153,203,130,240,176,178,185,170,231, 81,201,122,169, 58, - 84,137,163,146, 44,123,227, 54,194,219, 89,112, 58, 74, 9,176, 73, 72,178,249, 14, 29, 90, 71, 53, 57, 94,177,194, 54, 87, 89, - 79, 53, 43,231,108,255,111, 1, 8,187,150,221,166,129, 40,234, 25, 39,117,146,214,161,168, 45,106,171,116,211, 13,106, 97,195, -130,199, 31,176, 64,226,107, 96,201,247, 32, 54,236,248, 1, 36, 36, 64,149,186, 96, 1, 18,162, 82, 66,146,198,141, 83, 55,241, -216,142, 95, 99,238,195,118, 90, 30, 34,139, 72,150, 37,203, 30,123,238,251,156,243,255,250,123,187, 97, 41,132,216, 85,188, 34, -101, 77,166, 12,168,137, 20, 81,118, 77, 27, 5,154, 69, 82,181, 24, 32,246, 76,220,212, 53, 67,113,188,125,100,216,198,153,127, -166, 18,101, 73,140,140,114,137,211,138,216, 81,134, 79, 26,185,144,115,196,205, 23,220, 77,224, 57,112, 48,100,218, 66, 22,154, -154, 5,158, 60, 0,247, 23,105,100,149, 51,240, 8,129,245, 13,226, 65, 90,219,104,182, 97, 17,251,234, 44, 39,238, 80, 77,131, - 48, 16, 94,234,156, 69, 80,180, 40, 87,161, 76, 94, 68,173,231, 65, 90,186,198,111,173, 96,106, 29, 66, 60,149,165,217,159, 84, -104,255, 40,240,148, 14, 93, 34, 17,159, 22,215, 56,215, 48,189, 47,144,215, 2, 30, 34, 69,207, 33, 74,128, 67,229, 99,101, 85, -171,211, 85,167,160, 18,136, 97,171,140,203,220,144,112,101,156,105,129,135,223,234,182, 8, 60, 77, 2,135, 77, 36,251,237,104, -216,192,102,199, 2, 11,155, 90,230,218,254,222,174,191, 8,183,109, 91, 93, 76, 7,142,147,194, 89,140,201,112, 86,180, 43,111, - 99,115, 9,101,152,204,148,225,208,132,170,166, 34,186, 70, 2,116,120,125, 57, 74, 95,246,236,222, 87,207, 69, 62,103, 66,228, - 18,153, 76, 78,161, 50, 9,105, 11,206, 87, 69,103,125, 35,241, 19,190,235,130,114, 29,174,202, 35,219, 66,150,179,100,167, 32, -109, 19, 2, 58,240,204, 16, 38,193,126, 52, 71, 34,185,162,146, 81,148, 28, 79, 72, 67,235, 26, 18,140,133,248,165,130,195,169, -154,216, 45, 59,140, 20, 49, 50,104,242,190, 53, 89,194,234, 7,105,196,245,161,177,121, 52,247, 66, 15,179, 16,164,128,206,146, - 88,135,233,180, 33,132,168, 90,228,104,215, 32,130, 94,179, 90,102,123, 17, 35,184,212, 85, 46, 92, 32, 72, 34,222, 42,146, 76, - 6,246,117,139,180,211, 88, 95, 34, 15,187, 36, 65, 1,237,250, 83, 14,125, 28,223, 97,180, 46, 44, 84,147,106, 68, 99,111, 12, - 39, 44, 97,225,144,187, 16, 42,228,219, 94,246, 47, 6, 16, 3, 77,188,137, 90, 6,176,236, 87,222,229,219,119,175, 9, 7, 97, - 28,238, 30,158,254, 56,101, 10, 77, 30,222,107, 91, 45, 70, 38,143,102, 99,147,160,188,113, 22,223, 59, 56, 30,207, 70, 81, 18, - 50,128, 7,229, 65, 40,208,203,168, 0, 13, 55, 10, 15,123,180,123,183, 63,119,250,139,137,166,225,168,220, 88, 1,220,153, 42, -234, 50, 14, 43,168, 57,190, 20,141, 45, 34, 73, 64,127,225, 39,241, 68, 45, 24,102, 17,102,217, 30, 41,217, 34, 57, 62,225,170, - 88,210, 24, 2,135, 60,205, 49,129, 54,140,239,206,160,185,222, 50, 66, 35, 8,131, 79, 39, 39, 59,189,125,248,138,157,111, 67, -222,119, 79,238, 63,250,248,229,195,179,135, 79, 79,223,124, 62, 63,191,122,245,242,197,232,106,164,222, 7, 91,221,205,199,207, - 31,252, 28, 66,246, 99,220,217,216,185, 80, 83,216,177,224,109, 32, 72, 7,203,142, 44,192, 20, 62,224, 69, 80,198, 7,229, 92, -162,104, 73, 32, 57,131,169,118,117,197,201,168, 87,130, 69,101,131,177, 44,183, 49, 17, 87,113,163,237, 91, 87,104,110, 96, 42, -171,131, 91,157,205,115, 47,152, 5, 51, 26,231, 50,111, 20, 96, 11,198, 69,226,164,115,160,227, 41, 10,185,228, 92, 65, 33, 63, -128,138,143, 41, 50, 72, 49,243,185,232,109, 29, 12,221, 65,241,247, 54,158,168,205,181,172,171,243,162,180, 5,240, 71, 50, 21, -120, 8,217, 30,188,232,108,133, 12,103, 11, 81, 86,233,235, 7,215,198,170,195,168, 87, 83, 48,232,255,127, 9, 64,215,181,237, - 54, 13, 4, 81,175,247, 98, 39,118,156, 75, 19, 83,144, 2, 45,162,173,196,165, 82,145,144,248, 1,190,131,231,190,240, 13, 72, -124, 4, 2,250, 15,188,240, 1, 60, 32, 33, 33,161, 74, 60,128, 16, 42, 42,109, 41,162, 77, 75,107, 39,182,115,177,151,157,217, -141,147, 22, 17,229, 45,145,227,245,198,158, 51, 51,103,206,177,255, 87,141,153,245,184,199,137, 61, 71,216, 39,134,170,104,102, -154,128, 33,107,123,158, 8, 2,225,251,172, 38,136,139,117, 21,192,245, 11,172, 25,122, 33, 7,229,175,224,126,184,113,179,177, -162,174, 14,168,249, 80,167, 2,222, 47, 21,135, 8, 65, 28, 33,133,186, 13, 84,226, 76,161,122,195,108,176,174, 99, 88,216, 81, -249,163,112,137,203,137, 96, 64,120, 7,205, 84,117, 91, 1, 18, 1,154, 10,136,207,160,138, 23,169, 48,225,169,156,218, 38,187, -241,206,184,200,160,113, 8, 41, 41,116, 47,139,137,158, 26, 43, 80, 68, 95,163,120,139,169,108,131, 87,102,149,124,211, 43,150, -255,152,118, 88,217, 5,228, 62,107,196,206,220, 91, 46,127, 42,113, 64,217,179,231,229,252,141,115, 0,104,120, 1,100,158, 99, -208,151,214,238,197, 92,195,183, 76,232,202, 90, 34,136, 16, 20, 51, 3, 89, 80, 66, 39,178,230,177, 86, 96, 95,109,179,118,147, -119,154,180, 89,167,141, 0, 55,189,176,239,174,173, 93,105,119,154,181, 58,233,167,123, 63, 15,200, 48,162,195, 63,147,244,116, -144,156, 68,201,233,225,232, 91,143,124, 77,233,142,235,238,249,110, 79,176,212, 6,106, 7, 83, 63,194, 49,108, 3,170, 71, 3, -123, 14,154,145, 70, 51,219, 88,155, 19,139, 1,119,205, 19,156,151,254,193,209,224,212,130, 57, 5,123, 58,146,106,108,252, 60, -238, 83, 45,153, 12, 34, 10, 20, 48,172, 69, 37,178,224, 1,234, 3, 59,148,250, 85, 15, 59,233, 40, 8,139, 91,226, 59, 53,206, -156,203, 97, 19, 2,137,140,178, 56,199,113,129,213,107,171,100,122,173,112, 74, 32, 39,198,133, 71,107,188,234, 28, 8, 53,150, -209,254, 22,134, 37, 48,218,250,213, 0, 99, 38,200, 9,116,106, 29, 8, 24, 64, 66,151,235,221,245, 40, 59, 67,230, 28, 60, 15, -195,122,184,224,183,112, 37,197,131,213,135,234, 44, 4,119,150,194, 91,119,186,235, 10,218,227,248, 76,161, 64,185,246, 69, 70, - 9, 88,189,230, 92, 29,182,187,176, 84,115, 3, 76,250,101, 43,104, 91,230,114, 0,137, 81, 45, 56, 25,165, 57, 16, 60,126,224, -132,142, 37, 28,135,115,190,216, 90, 84,223,249,248,125, 91,171, 62, 24, 69,112, 34,227, 52, 78,210,164,159,169,180, 0,245,116, - 16,235,125, 62,248,162,130, 22,231,162,229, 55, 96, 86, 28,173, 32, 29,198, 3, 5,228,185, 80,123,119,156,244,223,238,110,239, - 36,199,177, 53,138,100, 22, 91,234, 89, 62, 76,173, 81,134,239,161,165, 22,204,226, 1,164, 62, 35,212, 97, 53,226,184,186, 99, - 9, 37,157,252, 60,203,122,131, 65, 54, 30,171, 48, 47, 40, 93,242,235,210, 76, 83,162, 25, 26,154,154, 17,155,135, 1, 84, 96, -122,251, 71,249, 9, 76,170, 15,172,243,128, 58,237, 9, 52,138,229,113,236, 83,241,108,243,233,251, 79,239,150, 27,107,111, 62, -188,190,253,232,158, 88,225,125,214,127,254,234,229,230,227, 39, 55, 54,186,234,188, 95,108,109,213,171,222,239,254,145,233, 96, - 25,176, 74,112, 27, 10, 24,198,134,191, 75, 81,113,170,136, 90,137,230,200, 22,134,214,162, 71, 62,115, 93, 85,201,165,161,130, -233, 20,101, 10,222, 13,233, 69,143,241,105, 25,240,139, 56, 94, 26,165, 1,180,136,248,117,118,168, 78,227,122,103,153, 16,235, - 2,236,198,177, 97,135, 85, 21, 42, 31, 79, 80, 13, 31,237, 0,165,174,203, 67,146,157,215, 42, 13, 40,103, 22,134, 72,186,223, -219,149, 37,120, 47,166,199, 50,239,130,232, 59, 30,188,223,140,157,168,113, 45, 71, 64,151, 99, 20, 85,175, 56,139,176,115, 62, -107, 25,150,154, 79, 37,253,124, 50,125,184,203, 57,150,154,156, 10,192,252, 21,128,176,115,235,105, 34,136,226,248,206,118,183, -179,151,210, 11,219, 66, 1, 67, 48, 2,194,131,138, 38, 42,137, 62,248, 1,140,241, 19,249, 98,252, 12, 62,251, 5,124,242,205, -248, 5, 36,129,128,130, 1, 75, 11, 69,177,181, 91,110,219,118,187,183, 25,231,204,236,150, 22, 18, 73,223,250,212,206,158, 61, -183, 57,231,255,187,225,126, 85, 30,213, 1, 70, 49,246, 90, 74,198, 34,101, 44,235, 37, 92,156,206,204,120, 36,232,130, 72,166, -172,145,180, 33,107,166,154, 53,152,193, 1,219, 59, 68, 40,208, 80,122,198,156, 30,199,197,131,243,159, 14,237,169, 17, 48, 45, -136, 12,123,104, 1, 31,214, 99,135,171,192,214,168,156,212, 49, 80,173, 3,155, 28, 20,165, 65, 32, 29, 40, 20,176, 29, 35, 88, -124, 16, 0, 66, 80,160, 77, 27, 42, 11, 21,106, 55,232,214, 58, 71,126,216,167,156,226, 20,145,192,202,151,255,156,254,134,150, -134,152,207,144, 98,213, 54, 1,147, 11,130, 0,221, 60, 15,249,159, 73, 34,154,215,198,221,192,245,163,254,117, 23,239,112,141, -226, 65, 52, 80, 83,152,151,108,145, 76,233,176,112,230, 85,204,161,136,199, 60, 54, 51, 63,178,115,180, 25, 95,171,199,250, 21, - 68, 36,194, 82, 44, 92, 41, 71,204,214, 0, 42, 11, 61, 28,118, 46, 32,250,136, 96,176, 40, 12, 88, 20,213,183,119,126,176, 26, -175,105,183,190,215,154,152,103, 22, 30,161, 44,199,238,199,171, 76, 82, 7, 14,150, 40, 82, 95,199,253,188, 9,253,149,208,207, -144,168,160, 32, 13,177,112,139, 52, 22, 83,187,164, 15,149, 24, 0, 16,233, 64, 88,149,192,122,129, 67,121, 70, 12, 55,138,188, -120, 23, 68,110,190,132, 39,236,149, 39,101, 78, 67,145, 85,145, 77, 25, 88, 99,174,106,126,106,177,210,216,227,232, 86,216, 15, - 96,190,146,121,121, 32,158, 80, 98,101, 96, 72,206,143, 60,199, 61,149,196,186,147,184,177, 78, 78,138,114,216, 55,229,181,209, -222,241,238,192,232,231,138,115,118,247,164,155,144, 16, 80,114,134,197,220, 68,251,188, 37,136,169, 78,207,137,162, 0, 13, 74, - 36, 42,185,196,237,157,185, 38, 54, 85,128, 78,184,107,213,181,116, 74,181,178, 37,203, 44,109,213,215, 5,201, 90, 92, 96,214, - 26, 85,118,248,174,215,179, 47, 90, 8,174,241, 13,216,113,199,152,165,228,229, 66,217,118,108,168, 81,184,189,178, 63,210, 11, -220, 74,115,151, 5,242,213,197,213,253,227,202, 47,251, 80,196,149, 91,214,108,227,188,225,123,253, 20,151,132,166,156, 97,203, -158,248,202,237,123, 27, 7, 91, 39,157,182,144, 90,203,234, 57,246, 74, 91, 99,197, 11,246, 98,195,205, 51, 50,116, 99, 42, 59, -201, 30,235, 97,179, 46,200,189, 57, 51,127,209,115,176,162,251, 48,177,238,233, 41,101,114,172,244,185,246,117,173, 93,185,102, -171,169,161,193, 46, 20,247, 99, 36,193, 11,138, 55, 78,131,209, 17, 12, 62,203, 16, 41, 18,105,187, 29, 77, 81, 44, 16,137, 70, - 15, 10,197, 58,232, 48, 35, 46, 5, 17,178, 88,130,149, 52,139,253,179,179, 51,245,205,234,163,149,251,126, 74,118,255,218,119, -115, 11,243, 11,119,124, 44,149,165,210,250,222,246,214,198,183,143,235,159,222,188,127,203,220,159,133, 38,198,176,181,180,188, -252,228,249,227,165,135,139,175, 94,191,124,241,244,153,148,145,154,155,205, 47,239, 62, 84,206, 14, 20, 62,200, 14, 93, 23,248, -132,188,249, 20,249,208,237,130,120,234,178,178,139,247, 54,113,218,232,137,109, 53, 26, 43,134,195, 20, 44, 15, 82,102,218,244, - 67, 64,220, 37,169,149, 0,107,199, 77, 12,129, 37, 41,232, 5,187,211,166, 67,121, 85,220, 9,148, 18,109,111,110,229,213,230, - 62, 20,154,104,116, 53,157,253, 16, 96,229,146,120,105,132,199,109, 13,107, 93,175, 67,248,203,105,119, 90,188, 99, 22, 35, 92, - 69, 38,159, 8,153,115,192,161,224,208, 93, 18, 1, 17,204, 1,141, 56, 25, 33,231, 33, 15, 84,177,184,169,240, 54,196,112,123, - 65,140, 1, 93,150, 35, 87, 32, 85, 3,105, 47,248,250,159, 0,116, 93,201,110,211, 64, 24,158,241,158,216,113, 26,135,210, 54, -106, 80,133, 20,169, 66, 84,156,224,192, 3,244,206,153, 19,239,193,133, 87,224, 45,184,113,129, 35, 18, 82,225,128,144,224,210, - 86, 66,168,164,180,162,169,210, 4, 55,177, 99, 59, 94,134,249,255,177, 29,167,161,183, 40, 81,226,120,153,249,183,111, 89,240, - 87,255,219,137, 95, 54,222,131,218, 78,206, 39,171,168, 0, 3,214,216, 13,187,230, 88,106,115, 22,251, 94,236,242, 93, 94, 35, -178, 46,233,134,162,171, 10, 36,233,142,110,105,154,129,217, 55, 13,147, 76, 1, 32,240,124, 56, 27,206,179,224,122,206,203,225, - 88, 42,166,243,112,123, 73, 90,104,129,137,113,130, 88, 99, 80,233,129,123, 3,120,144,233, 26, 32,223, 21,141,239,240,240,126, - 58,158, 79,230,233,140,160,181, 4, 50, 40, 69, 14, 18,167, 40,129, 91,144,231,217,106,211,157, 45, 97, 37,233, 10,214, 40, 63, -251,234,140, 34, 91,160,101,132,210, 3,187, 37, 72,200,139,137,235,226, 64,146,180, 18, 50,104, 69,126,141,145,100,231, 78,175, - 63, 58, 41, 14,135,121, 46,200,178, 96, 43, 12,166,216,160, 50,163,195,116,154,110,116, 28,144,253,149,169,170, 2,253, 75, 81, -232, 60, 6,131, 34,147, 41,145,159,216, 53,173,150,165, 13,150,189,253,122,172, 20, 56,170, 20,255,127, 92, 33,106,201,149, 23, - 9,182, 59,116,149,152, 42,113,180,182, 45,111,119,205, 93, 95,138,126,185, 71, 94,232, 34,213, 44, 43,106, 17,204, 70, 0, 9, - 4, 73,145,109, 58,188,132,244,195, 25,234,226, 8,170, 18,180,146, 55, 91, 91,103,163,223,130,118, 79,115,201, 38, 88,151,117, -163,209, 50, 91, 65,228, 95, 7, 19,254,217,230,218,214,165,123,129, 27, 23,236,143,134, 98,128, 6,100,201,138,206, 33, 76,176, -248, 45,221, 10,147, 16, 49,141,165,103, 13,166, 99, 20,219,118, 57, 79,138,224, 5,131, 24,163, 41, 6, 8,117, 65,235, 22, 3, - 10,210,146,219,117,199, 5, 11, 70, 36,103, 84,236,219,132,129, 23, 63, 67,219,106,142,167, 35,161, 25, 84,202,214, 96,228,100, -133,113, 58,100, 57,182,217,156, 4, 19, 89,180,227,168,180,179,126,191, 63, 60,145, 17, 52,198, 51,107,126, 9, 58, 78,119, 60, -189,242,163, 28,226,201, 15,179,255,104,255,224,248,128,255, 26,255,174, 59, 25,199,105,252,176,187,119,120,126, 40,161,122, 37, - 62, 73,172,183,209, 59, 31,157,193, 96, 57, 9, 91,245, 53, 30, 17, 51, 42,200,212, 64,219, 65, 23, 69, 8,171, 2, 79,202, 11, - 19, 93, 82,174, 38,127,223, 15,190, 21, 79, 93, 74, 22,175, 86,160, 22,112,167, 53,192,254, 50,169,104,249,166,120,231,227, 50, - 65,172,194,215, 77, 34,173,233, 70,215,106,238, 58,235, 31,135, 23,103,222, 52, 1,155, 98,182, 34,211,193,220,211,225,211, 7, -143,143,252,254,231, 55,239, 62,124,250,242,242,245,171,155, 11, 98, 70,126,124,255,121,250,231,148, 63,194,198,160,230, 14,220, -228,110,236,116,218, 79,182,247, 94, 60,127,118,197, 60, 94,158, 70,113,212, 80,237,203,233, 0, 61, 88, 99, 89,214,163, 12,236, - 25, 16, 20,159, 97, 55, 50,233,180,239,157, 3,118,150,148,156, 34,150,163, 78, 4,252,154, 73,148,174,210, 23, 73,185,233, 18, - 65, 60,161,172,132,211, 44, 51,236,203,190, 29,169, 8, 38, 46,203,202,102, 86,189,233, 5, 30, 26, 74, 1, 14, 95,240,203,197, -110, 37,148,138, 5, 94,233,134,233, 70, 1, 72,135, 5,100,168, 38, 3,190, 82,120, 75, 82, 9,177,166, 81,179,130, 40, 0, 65, -204, 98, 94,152,229,240,159, 84, 0,241,178, 60, 50, 45,146,247, 2, 65, 83,178, 53, 33, 2,254, 19,128,175,107,233,105, 34, 10, -163,183,115,103,110,103,250, 34, 8,150, 16, 19,218,232,134,132, 29, 91,183,196,196,248, 39, 88, 24, 23,238,220, 24,255,130, 11, -209, 52, 24, 19, 31,193,149,194, 86,255,132,110, 17,113, 67,170, 32, 41,208,118, 74,233,107,218,206,203,239,251,238,204,101, 40, -200,174,139, 54,205,204,157, 57,223,243,156,115, 29,190, 39,110,147,210,245,229,114,218,201,113,162,169,153,144,235, 17,215, 92, - 98, 40, 9, 69, 67, 86,168,155,154,153, 51, 50,144, 98,228,141, 92, 90, 88,150,110,154,186,133,125,252,192,243,176, 31,238, 67, -229,149,213, 13,248, 73,107,212,113,188, 46,196, 6,199,115, 6,110,143,236,205,201, 72, 3,201,106, 17,162, 98,161, 16, 18, 43, -158,161,253,226,194, 92,233,128,152,199, 41,202,251, 8,106, 40, 19, 20,194,193,201,158, 75,229,153, 71,205, 68,166,192, 61, 25, -225,194, 11,106, 61,255,195,247,212,132, 87,248,165,197,249,107, 24, 81, 81, 96,224, 19, 22,173,209, 95,179, 72, 51,145, 41,107, - 69, 4, 44, 83,100, 33,157,108,245,234,177,106, 49, 2,123,192, 60,137, 92,128,234, 28,135,117, 60, 45, 80,120,160, 48,155,247, -185,110, 64,253,130,210, 59,144,108,107,142,231, 58,174,159, 11,244, 28,210,186,253,210, 84,246,251,222,193,183, 63, 39,153,184, - 67,231,199, 75,156,242,189, 55,232,205,150, 16, 70, 47, 61, 83,246,169, 89,142,115,237,130, 64,153,216,208, 23,105,158,246,153, - 54, 64,154, 75,100,113, 18,219, 35, 32,131, 12,131, 7, 89,197,211, 96, 24, 31,113,193, 45, 56, 77,233, 77, 80, 42,222, 57, 62, -173, 97,237, 66,181,113, 44,187, 45, 7,169,220, 50,196, 16,149, 14,195,243, 92, 73,211,232,228, 85, 62, 33, 27, 32,200, 8, 91, - 40,150,247,235,191, 33,253,197, 47, 69, 52,190, 84, 42, 97,164, 25,119,212,145,228,199,181,104,133, 87, 24, 2, 50,238,179, 65, -155, 19,171,204, 32,251, 17,165, 11, 45, 77,224,134,227, 1, 84,134,163,241, 8,245,232,205,172, 52,209, 46, 22,230, 26,221,122, - 44,197,202,116, 46,166,178, 5,187,103,211,198,126, 20, 75,228, 86, 15,164, 26, 80,166,160,220, 60,117,168,149, 75, 27,132,174, - 70,231,164,124,179,252,183,121, 8,104, 14,103, 7,112,128,235,100,240,228,163,235,219, 44, 4,128, 48,244, 57,186, 92,209,152, - 37,140, 46, 28,174,111,126,122,254,200,174,145, 70,149, 84,116,208,102,242,211,118,223,214,153,148, 59,196,233,147,134,213,155, - 91,117, 59,235,207,222,214, 6,205,106,173,122,255,238,202,135, 47, 27,149, 79, 47, 19, 88,189,193, 22, 87, 89,243,144, 53,161, -226,217,103, 12,114,252, 29,198,126, 49,118,204, 88, 47,129,110,105, 2,125,151, 37,228,195,206,109,252,172, 2,220,208, 51,215, - 29,141,250,175,159, 60,127,188,246,148, 53, 28,199,110,195,213,218,173, 83, 55, 8, 62,111,110,189, 88,175,236,254,216,126,184, -250,232,200,110,110,190,127,119,111,229, 65,229,213,218,226,242,210,237,229,165,160,221,215,110,229,229,121,214,126,214,118,246, -118,251,195,225, 96,187, 11,241, 73,116,220,143, 95,223,140,161,152,241, 80, 95, 19,110, 1,110, 76, 97,191,195,163,154, 62,214, - 6,144, 74, 71,114,123, 17,171, 73, 89, 71,198,106, 26,209,208, 81, 58, 48, 69, 31,120,130, 1, 20, 94,177, 75, 40, 53,151, 46, -233,181,132, 90, 44, 70, 22, 94, 85,199,203, 53,155,120,201, 49,178, 6,100, 42,109, 87,200, 46, 89, 72, 65, 66,167, 37,140, 23, -117,111,100,102,144,212, 22,122, 41,169,248,122,193,118, 79,237,113,225, 88,158, 58, 51,129, 12, 88, 82, 48, 77,169, 26,168, 80, - 17, 40,205,248, 73,230,106,138, 56, 58,236,159, 0,132, 93, 59,108, 19, 65, 16,221,189,159,237,216, 65, 78,226, 72, 81,126, 10, -105, 80, 36, 26, 80,132,104, 34, 20,132, 16, 5,162,162, 70,244, 8, 72, 73, 65, 65, 67, 69, 1, 82, 10, 10,122, 10, 10, 40,160, - 39, 40,132, 46, 21,136,134,134,152,196,249, 97,199,159,179,125,119,235,221,101,118,118,247,236, 24, 36,236,147, 44, 89,150,239, -179,119, 51,111,102,222,188,241,254,203,140,148,118, 34,181,105, 69,193, 20,141, 69,157, 42, 58,183,115,239,164,107, 13,132, 26, - 3, 39, 18, 95,248, 16, 63,246,152,106,196,143,185,232,114, 14,145, 93,150, 6,137,155,128,243,139, 21, 31,142,131, 39, 0,219, - 63,149,155,132,179,107,176, 72, 49,154, 89, 61,226, 81, 76, 59,216, 41,239,154, 94, 5,219,131,234,250,252,160,182,135,140, 84, -229,193, 56,250, 78, 38,149, 14,120,156, 36,194,168, 68,112, 97, 60,187,208,121,209,129,128, 69,252, 93,101,160,125, 36,158, 66, - 91, 71, 90, 2,254, 16,216,167,196,186, 29, 99, 18,255, 89, 60,145,206,144,194,100, 10, 4, 9,153, 41,206, 29, 53,247,117,250, - 85, 17, 11,130, 28, 92,174, 12, 13,162,164, 29, 43, 5, 52,131,233, 85,203, 82,174,208, 4,195,100, 21,132,176, 68,137, 57, 26, - 41,125, 53,231,207, 99, 40,119, 4,118,159, 49,217,141, 68, 39,226,163, 35,206, 68, 54, 51,150,203,126,169, 84,148, 32, 54,198, -225,238,128, 50, 67,154,164, 75,108,123,155, 68,252,198,109,165, 55,139,158,203,179,149, 56,225, 36, 93,154,100, 92,103, 66, 89, -125, 18,115, 55,160, 65,216,165, 49,146,181,124, 87,165,104,136, 98,253,152, 14, 46,165, 30,103,106,224, 96,247,157, 90,179,218, -227, 76, 83,105, 1,216,194, 45, 11,134, 41, 27,168,185, 78, 56, 95,219,165,134,162,158,178,255,165, 51, 64,100,246,221, 0,246, -138,141,254,242,160, 94,193,196, 84, 58, 63,177,143,147,244, 68, 89,110,215,104,102,108, 58,140,219, 97, 28,194,223,157, 25, 41, -170,169, 26,182,194,161,136,249,169,178, 6,174, 38,216,220, 24,142, 16,101,203,122,188,215,236, 52,154, 81, 11, 66,240,152, 69, - 16, 80, 22,243,197, 78, 18, 50,197, 51,100,141,118, 29, 62,199, 71,199,155, 16,146,171, 67, 82,156,173,133,210, 66,185, 86,134, - 59, 80,205, 78,196, 25, 39,198,145, 11, 82, 57,217,247, 61,247,119,171,150, 0,248,192, 98,157,158, 12, 35, 0,184, 73,122, 84, - 63,196, 74, 53, 82,156,213, 29,238, 64,236,226,251,126, 39,106,195,137, 29, 54, 14, 75,197,201,130,151,219, 61,169,232, 50, 48, -132, 11,232, 70, 53,167,131,232,206,145, 72,242,155,151,110,173,172, 93,149,170, 37,136, 60, 90, 39,111, 94,188, 94, 60,187,190, -246,244, 62,122,240,152, 92,190, 75, 94, 17,146,153, 37,108,150, 52, 8,169,161,133,255,137, 91, 25,182, 29, 82,253, 74,228, 22, - 17,207, 16,241,231,136,169,197,162,242,140,235,197, 42, 85, 2,139,158,128, 95,212,151,253,219,143,239,164,210,216,219,249, 53, -179,180, 64,138,133,105, 50, 5, 95,222,168,174,240, 48,220,222,252,180,186,188, 60, 62, 89, 92,188,120,254,246,131, 59, 23,174, - 44,103,188,204,203, 39,207,183, 54,183,239, 61,126, 88,174,236, 46,205,159,155,159,158,187,190,122,141,180,200, 6,251,252,246, -253,187,143, 27, 31,230,198, 74, 61,214,203,120,217, 70,212,210,227, 77,185,126, 83,164,153, 83,253,140,105, 56,100, 58,107, 16, -177, 11, 45,107,225,162,228,169, 37,143,152,222, 59, 51, 93, 67,154,202,165, 51,240, 96,139,148,209, 70, 7,173,225,128, 85,236, -155,201, 83,154, 93,105,100,131,149,160, 20, 50,210,124,144, 7, 88,137, 34,228, 86,234, 29,249,249,180,175,212,222, 55, 61,240, -147,227,176,170,145, 1, 61,205, 93,119,184,158, 97,170,219, 26, 36, 60, 35,133,160, 84,107, 31, 39,130, 13,197,252, 42,212, 68, -132, 1, 11, 54,154,205, 55,149, 98,235,112,129, 48,125,253, 17,128,177,107,215,113, 26,136,162,227,177, 29,191, 18, 54, 43,130, -148, 8,196,163, 64,176, 20, 84, 20,136,138, 30, 68, 3, 45, 21,159, 64, 73, 9, 66, 84, 80, 33,241, 13,252, 2, 18,162,130, 98, - 87, 20, 72, 43, 45,176, 75, 4,217, 72, 72,187, 64, 30,218, 56, 78,198, 30,238,185,227,201, 26, 20, 30, 41,172, 20,113, 18, 59, - 55, 51,231, 62,206, 57,127,196,239,110,133, 41,176, 48,229, 48,132, 69,151, 79,113,224,249, 28,104,182,221,229, 30,151, 50, 79, -124, 86, 20, 8,100, 16,251,113,232,209, 42, 20,215,189, 4,210, 43, 24,132,131,156, 0, 28,236,164,136, 60,116,232, 38,121, 86, -160, 91,232, 28,204,210, 57,244,144, 97, 17, 74,129, 75, 11,253, 88,141, 11,238,137, 26, 71,115,174,201,242, 4, 42,174, 78, 97, -115, 96,123, 7, 88,211,233, 18, 74, 50,101,152,253,111, 75, 69,102, 93, 28, 26,121, 23,127,161,112,233, 10,181, 87, 44, 91,217, -233,184, 26, 29, 5, 15,226,151, 83,126, 39, 75, 73,177, 84,140,185,220,188, 9,169, 41, 71, 89, 43, 22, 51,252,196, 18, 52, 5, -142, 24, 81,112,202,182,145,228,198,191,203,200,149, 45,252, 32,236, 30,120, 26,106,148, 46,197,183,191,118,182, 93,196, 81, 70, -119, 11, 35,217,122,174,244, 36, 43, 38,169,234, 36,193, 90,189,241,226,211,231,241, 92,157,240,130,126,127, 23,170,135,140,133, -232,182,166,149, 66,141,201,204, 23,165, 89, 89, 41,215,196,166,112,235,176,127,178, 20, 99, 70, 2,117, 31,186, 55, 53, 87, 38, -129, 60,214,144, 53,175,179,217, 27, 20, 86,145, 53,103,139, 15,148,198, 76,233,144, 37, 61, 40,214, 9,174,134,126,168,104,141, - 39,212, 44, 89, 1,216,113, 40,193,224,169,157,220,116, 69, 28, 59, 2, 83, 24, 28,171, 75,125, 79,254, 7, 65,121,130, 59, 49, - 74, 91, 95, 75,201,124, 94,122, 93, 84, 75,234, 97, 35,155,165,163,233,200, 24, 93,182, 26,173, 61,216, 96, 90, 47,121, 8,226, - 67,144,203,114, 99, 17, 72, 38,147, 23,165,110,171,214,203,220,196,152,193,132,138,171,239, 6,113, 16,167,217,116,174,166, 64, - 20,218,169,121, 33,143,234, 83,106,114,170,247,173,103, 26, 36, 86, 49,220,204,142, 34,250, 40,179,170,135,216,158, 29, 88, 72, -230, 70,193,138, 62, 24, 77, 81,215,103,153, 73,158,142, 2, 31, 10,178, 0, 48,107,228, 97, 52,208,200, 56, 66,162, 48,161,171, - 77,231,236,235, 11, 82, 88, 3, 36, 47,233, 90,159, 80, 0,254,115,167, 47,188,236,191, 91,223,217,168, 70,219,151, 87,221,147, - 87,207,240,211, 35,226,218, 80, 60,181, 72,125,133,119,111, 7,149, 23,252,222,251, 66, 80, 56,211,226,240, 92,136, 39,119,133, -120, 12,230,137, 54, 53, 60, 60, 66,233, 81,246,189,159, 78, 2,202,182,163, 56,165,248,201, 14,238,220,184,125,255,217,163,241, -143, 97, 62, 43,154,181, 8,252,222, 56,106,174, 54,191,119,119, 47, 94,190,242,102,253,245,241,118, 71,185, 98,174, 20,193,253, -145,202, 30,222,123,176,245,246,227,173,235, 55, 55, 63,108,189,239,110,111,127,221,233,239,117, 23,192,232, 82,251,252, 74,210, -152,100,105, 51, 88, 25, 76,134,180, 37, 35,193, 23,202, 36,130,180, 28,172, 38,173,193,116,100, 84, 38,192,180,193,209,173, 32, - 49,205,158, 49,202, 58,244, 21,149,126,170, 40,109,168,173, 2,222, 98,129, 70,132,177,188,129, 21,150,204, 43, 51, 45,255,161, -149,111,223, 90, 91, 79, 56,254, 18,218,104, 5, 26,148, 93, 29,212,249, 87, 63,175,162,172,107, 66,210, 26,127, 6,110,148, 51, -114,181, 10,119,102,182,245,208,221, 15, 94,134,210, 3, 61,162, 82, 5, 94, 32, 81, 83,159,249, 41, 0, 95, 87,175,219, 68, 16, -132,119,247,110,125,119,118, 28,135,216,134, 20,132, 40, 17, 73, 67,129,120, 1, 30,129, 23,224, 45, 40, 41, 40, 40, 40,169,105, -104, 40,120, 0,168,160, 66,130,158, 34, 66, 74, 20, 68, 18, 34,172,224,252, 0,177,115,246,222,222,222, 50, 51,187,235, 88,178, - 21,203,178,236,213,157,239, 78,179, 59, 51, 59,243,205, 55, 49,187, 46,236, 62,113,222,253,167,235, 6, 21, 32, 52, 81,168,149, -178, 33, 99,235, 20, 30, 97,173, 8, 43,194, 75,144, 73,169, 68, 33,170,168, 38,144,199, 21, 91,198,209, 84, 46,141,202,106,245, -140,167,200, 99,136,204, 12,224,208,233,203, 98,152, 23, 72, 31, 56, 50, 35, 92, 69, 36, 52,216,198,117,235,237, 68,214, 6,122, - 80,195,191,129,227, 45, 86,239, 99, 40,223, 53, 34, 55,214, 83,240, 91, 31, 58, 96,158, 49,107,106,221,242,235, 19,169,209, 12, -185,102,208,236,172,149,182, 46,198,255,130,114,159,116,161, 98,209,140,181,156, 87, 92,102, 39,254,105,201, 74,184, 87, 25, 39, -235, 55, 55,119,123,219,161,156,192,185,111, 70, 76,104, 31,152,189,221, 89,255,117,246, 67, 18,101, 46, 56,149,145,173, 58,137, - 24,129, 56, 13,111,196, 34, 77, 76, 92, 94,130, 30, 30, 40,216,207,150,190,116, 26,161,220,124, 53,107,124,217,239,237,159, 15, -193,133, 79,154,252,193,198, 98,161,176,211, 30, 50, 77,106,163, 52, 89,197,178, 26,105,155, 27,204,181,230, 33,248,174, 3, 27, - 17,124,255, 75, 17, 27,137,100,244,104,201,155,146,129,120, 84,137,245,125,137, 68, 55,253,232,220,174,119,143, 55,186,242, 59, - 54,219, 65, 68, 13,237, 83,145,171, 94,184, 90, 17,138,191, 8,138,197, 19, 23, 32,229,226, 45, 75,101, 6,206,172, 66,133,139, -177,106, 41,226,213,206,234,225,233, 1,156,220,110, 44,159, 14, 79, 64,159,202, 40,198, 70,148,148,239,130,131,218,141,246,239, - 97,159,147, 9,116, 50,169, 92, 58,134,217,124,140,179,101,169,190,148,201, 12,105,200, 16,112, 50,116,124,194,110, 21, 55,211, -150,194,222, 35,129,106,146, 57,114, 87,187,214, 89, 67,236, 26, 13,215, 68, 76,225,221,106,154,109,194,243,105,112, 49,174, 10, -157, 23, 78, 82,221,214,173,134,108, 28,158, 28, 80, 15,113,182,223, 63, 20, 84,241,239,170, 89, 40, 74,111, 92,169, 11, 2, 25, -181, 82,186,112, 64, 81,225,219,177,225,245, 70, 42,207,169,156, 61,139,179,187, 43,155,223,126,110, 47, 38,117,100, 98, 16, 20, -204,101,188,187,176, 12, 15,117,167,179,182,119,188, 7,179, 3,230, 94,146, 36,127, 6,103,198,195,166,109, 64, 79, 68,163, 74, -213, 44,219, 61,218,241,204,184,225,222, 63,124,253,248,252,201,139,103, 47,159, 50,214,101,109,198,154, 36,230, 11,198, 54, 73, -174, 38,252,236,145, 37, 7, 67,176, 5, 39,173,120,198, 1,174, 41, 74,131,175,113, 85,166, 48, 34, 34, 42, 31, 33,195, 35,226, -215,239,222,192, 91,210,132,121,252,240, 81,179,181,240,234,253,219, 69,150,192, 98,188,176,249,214,253,123,197, 60, 38,218,207, - 59,159,102, 7, 65,208,237,133, 27,176,211,210, 90,247,139, 62,114, 85,163,138, 49,245,168,174, 96,170, 26,112,251, 36,182,106, - 18,212,112, 36,162, 38, 48,113,140, 22, 95,132,122,118,204,182,131,230,209,232,221, 9, 77,240,126, 67,224,106,158,165,105,174, - 6,156, 77,182,229,118,126,167, 54,231, 69,120, 56,138, 9, 54,129, 95, 71, 65,229,179, 80,129, 38,140,121, 15,197, 7,200, 3, -214,145, 79, 3,130,174,136, 29,231, 40, 9,130,238, 9,167, 93,225, 9, 34,186, 62,146,104, 86,106, 58,134,111, 61, 27,182, 99, -148, 39, 23, 30,183,131,134, 95, 49,185, 58,112,163,207,175,210,130, 51,255, 5,224,235,106,122,155, 6,130,232,238,122,215,113, -226,148,124, 52,130,182, 23,164, 2, 18,156, 57,112,230,231, 33, 33,254, 2, 55,254, 80, 47, 80, 36, 62,170,166,149, 19,167,110, - 99, 59,177, 99,239, 46, 51,179,177,219, 68,180, 82,110,137, 28,121, 63,222,190,153,125,243, 70, 62, 1,238,109,215,108,177,125, - 52, 37, 2,153, 75, 24,160, 27,140,104, 14, 98,119,147, 41, 92,107, 90,196, 8, 76, 12,112, 52,115, 22,181, 5,108, 81,149,174, - 37,199,126,112, 29,174, 96, 76,239, 86, 11,216,144, 58, 24,144, 57,170, 36, 47, 25,233,244,234, 36,206,215, 26, 80, 0,246, 2, - 3, 42,192,135,188,123, 18, 30, 79,250,227,105,118, 61, 95,207, 20,151,216,141,211,192,124,150,218,120,148,219,181,131,131, 73, - 90, 44,169,255,153,105,187, 15,218,157,137,181,123,205, 70,246, 61, 53,255, 55,169,190, 23,112, 60,120, 54, 15,236, 67, 57,219, - 73,172, 61,113,102,180,166,194,247, 87,223,207,186,227,100, 29,127,191, 58,107,221, 23, 30, 68, 72,172,169, 35,179,113,114, 9, -147,179,130,163,209,218, 62,205,200,239, 12,171, 19,187,194, 38,107, 35,189, 58,202,227,143, 31,142,109,136,157,158,152,167, 73, - 62, 47,120, 41, 46, 22,201, 89, 60, 11,164, 10,148, 88, 21, 37, 22, 45, 26,190, 65, 85, 59,246,209,238, 41,128, 16,148, 10, 20, - 21,219, 84,186,208,120, 31, 82,106,182, 70,202,132, 25, 27,191,169,224, 10, 26, 58, 47,104,233, 73, 18,222,212,154,163, 39, 28, - 54,227,228,121,198, 94,189,224, 82,133, 63,163, 2,129,157, 58,120, 96, 16,224,119,122,254, 32,201, 98, 90,117, 8,243,192,221, -145,223,162, 71,132, 19,255,233, 81,111,112, 52, 60,249, 21,157,195,255, 95,196,127,221, 88, 17,245, 39, 90,192,234,118, 54,224, - 7,209, 50, 98,174,247,223, 54,166,230, 7,221, 17, 96, 58,208,246, 89,138,184,191,200, 23,129,236, 82, 25,160,192, 11, 88,215, -218,134,163, 65, 49, 32, 38,192,179,239,117,194, 32,188,205, 19,167,216, 31,247, 38, 23,241, 31,107, 93, 25, 58, 16, 36,238, 46, -144, 90,247,142,173, 19, 8, 37, 79,156, 43, 35,157,192,230,250, 54, 34, 99, 72,140, 31,128,101, 72,169,202,114,173, 84, 80, 86, -107, 67,251, 46,240,187,240,134,128,236, 36,218, 99,188, 97,140, 40, 66, 23, 20,151, 8,158,150,185, 71,207,206,139,252,252,234, - 7,112,124,242, 16, 38,161, 61,133, 19,243,236, 6,248,224, 52,185, 68,102,131,213, 76, 41,154,202, 2, 5,223,164,219, 98,221, -166,177, 36,140,249,203,225,228,100, 48, 94,206, 51, 95,170, 26,171, 46,209,158,234,106, 58, 61, 61,125,227, 10,177, 1,120,241, - 51,102,236, 93,115,103,180, 33,196,135,207,130,230,216, 35,184,111,178, 32,123,222, 29,240,166,175, 15,159,207,238, 18,119,128, - 1,199,210, 70, 13, 59, 62,108,219,229, 77,242,249,203,167,163,247,111,191,242,111,253,209,208,192, 23,182, 83,213,218,183, 62, -217,169,146, 85,130,174, 31,243,113, 66,173,170,236, 45,210,155,180, 88,245, 59, 97,148,221, 22,212, 50,187,212, 21,108,240,194, - 84, 37,218,142, 98,204, 30,170,103,195,112, 4, 43, 26, 87,137,244, 5, 50, 60,201,177,247, 59,105,170, 76,205,181,178,228,210, - 13,228, 2,151, 96, 45,122, 1, 58,151,240,141,216, 58, 79,112,119,200,154,221,124,137,219,247,198, 54, 60, 31, 70,239,240,224, - 48,190,155, 11, 33,216, 78, 62,231, 33,251, 54,109, 26,222,101,202, 28,178, 27, 87, 35,181, 21,189,176, 70, 30,194,247,149, 20, -118,135, 67, 52,149, 34,110,129, 27,135,242,112,154, 82,140,246,152,118,227,158, 84, 54,138,121, 10,196, 49,220,199,240, 81,183, -250, 28, 2,250,127, 2,240,117,110,187, 77, 3, 65, 24,246, 17,187,118, 73,235,210,134, 86, 72, 84, 92, 32, 33,110,168,122, 5, - 18, 47,131,250, 60, 92,113,203,211,112, 91, 30, 0, 9, 16, 42, 74,149,150,182, 78,156, 16,175,215,217, 3, 51,179, 94, 31, 26, - 32,178,114,147,131, 44,123, 61, 59,251,239,204,247, 7,255, 14,238,221,230,106,203,118, 55,226, 59,201,169,132, 64, 34, 1,156, -228, 93,156, 43, 90, 93, 95, 25, 7, 41,109, 88,143,184, 31, 24,193, 59, 89, 96,150,117,153, 87,121,201,145,212, 92,212, 11,170, -124, 71,239,112,170, 16,129,169, 57, 76, 31,164,176,126,207,226, 17, 54, 4, 5,144,189, 60,220, 79,178, 36,140,215, 74,141,227, -199,177,151, 92,177, 41, 60, 68, 33, 57,127, 64,138, 9,115, 59,140,235, 28, 19, 28, 83, 26,101, 0,107,155,241,218,187,231, 20, -216, 15,235, 22,194,212,255,149, 17,130,113,113,196, 49,106,244,255,205,115, 7,191,237,127,214,255,243,166, 82, 62,160,229,187, - 36, 16,205,146,205, 8,231,208,234,191,170,165,136,116,176, 55,148,185,171, 37, 69,157,196,174,173, 3,186,206,129,194,240, 10, -163, 55,117,229,213,197,247,163,253,195,131, 71,123,183,188,150, 66, 37,158,255,233,226,242,235, 93,158, 4,126,234,107,183,250, -205, 96, 85, 68, 77, 41,228, 70,172, 2,218,192,137, 80,240,209, 33, 92,186, 40,172, 32, 67,144,206,138,203,109,108, 70, 87, 75, - 69, 55,207,244, 91,217, 3,114,239,146,144,242, 91,152, 63, 33, 85, 44,133,144, 77,100,212,138,171,167, 25,255,241, 75, 40, 42, - 46,241,137,180, 42, 69, 93,200,155,174,254,133, 34,101,228,195,147, 95,147,182,224,164,209, 78,193,230, 12,251,107, 92, 91,237, -128, 67, 27,251,200, 72,205,151, 82,216, 34, 8,199,232, 42,218,166, 14,228,250,162,138,213,220, 80,188, 33,230,190,126,254,230, -252,219,185,148,109, 15,154,182, 24, 39,184,107, 53,129,204, 92, 72, 6,235,178, 54,118, 2,240,208,228,236,214, 64, 37,117,243, - 77, 57,168,116,240,188,189,173, 44,142,226,201,221,196,222, 94,149, 70, 41,181,173, 67, 50,207,169, 72, 75,194, 64, 37, 44, 99, -184,147,238, 78,243,146, 12, 34, 76,175, 13,158, 39,249, 33, 34,179,200,146,234, 96, 45,234,140,210, 81, 81, 22,216,129,137,100, - 2,100, 35,179, 53, 71,190,138, 71,188, 7,172, 28, 51,173,224, 26,102,227, 21, 67,204,178,106,214,203, 6,187,212,208,154,124, - 43,221, 66,152,131,147,124,123,252,242,203,205, 79, 68,239,249, 77, 87,234,217,217,187, 15,239, 63, 26,137,197,217, 38, 29, 30, -198,208,132,100, 25, 56,155,214,109,233, 5,173,212, 96, 38,103,142,245, 81,246,250,125, 32,113, 24,156, 30, 61,153, 85,104, 81, -184,214, 93,211,157, 32, 25, 4, 22,163,187,212,169,198, 13,204,203, 65,176,145, 50, 70, 95,228, 62, 74,222,244,255,123,205,248, -226,243,245,226,111,159, 52,181,155,174, 31, 67, 18, 50,175,231,112, 28,100,175, 14,199, 39,107,153, 75,113,237,147, 81,161, 31, - 70, 16,211,208,179, 79, 48,129, 75, 37, 79,147, 53,135,212,162,132,132, 76, 49,156, 3,148,133,113,209, 14,135, 71,161,233,158, - 96,162,172,136,131, 67, 65, 8,179,103,110, 77,148, 28,107,174,167,250, 44,194, 38, 86, 27, 71, 86,213, 60,194,112, 28,143,159, - 77,243,203, 90,114, 87,187,195,237, 61, 71, 15,243,246, 1, 91,178,171,141,108,144,244, 27, 33,222,109, 66,148,220,152, 23,186, -157,116,132,128, 97,121,130,148,189,141, 68,247,143, 0,132, 93,203,110,211, 64, 20,157,135,237,113,154,135, 0, 9,177, 0, 20, - 84, 9,209, 29, 98, 83,241, 27,176,227, 59,248,138,242, 13,252, 9, 43,246,101,129,196, 6, 72,145,210, 86,130, 56,180,165,198, -137,237,201,120,134,185,247, 58,206,164, 65,144, 69,150,145,147,140,175,207, 61,247,220,115, 34,182,129,141, 91,179,102,190, 21, -112,209, 70, 39, 35,120,111, 75,188,175, 33, 26,145,251, 90,108,239,240, 38, 7,222,198,131, 60,223,126,246,101,191,159,236, 41, -217,235, 71, 74, 64, 24,158,127,158, 23,185,254, 13, 14,130,190, 7,180, 64, 69,107, 15,119, 86,240,177,104,227, 37,149,140, 71, -178, 39,146,161,130, 80,243, 94, 18, 39, 30, 87, 70, 50,209,214, 98,127, 38,123,241,240,137, 26,101,245,108,190,152,197, 44,118, -130, 12,242, 61, 68, 20,174,157, 96,152,157,175,194,194,202,238,182, 28,241,249,154,131,178, 1,158,222, 8, 77,209, 4,138, 92, -103,121,208,157,133, 35,211,191, 41, 30, 67,109, 59,121, 65, 97, 32,151,232,148, 49,155, 9, 54,239,124, 56, 89, 59,189,176,165, -179, 41, 3,174, 92, 19,180,162,102, 22,155,233, 59, 49,187, 61,136, 71,169, 28,128, 57,186, 57,254, 48, 57,247,157,105, 20, 93, -107,189, 0,158, 6,176,154,131, 40, 87,200,141, 50, 74,186, 8, 54, 37,106,235,219, 38,145, 74, 86, 64, 35, 11,149, 26,124, 56, - 33, 73, 17,124,193, 53,147,171,198, 87,123,153,160, 19,117, 9, 10, 39, 91, 65,159,200,246, 4, 64,123,133, 15, 52,227, 27, 41, -220, 47,211, 13, 80,240,195, 68, 26,143,152, 26,126,239, 86,244,227,218,198, 84,165, 57, 91,161, 11,140,149,104, 88, 64, 51, 13, -201, 64,129,131,137, 13,192, 90,232,138, 92,185,183, 71,210,174,160,116,173,110,131,204, 5, 63, 32, 82,242, 18, 68, 70,100,167, - 73,103, 31,240,245,100, 54, 33,157, 0, 11,218, 88,209,238, 88, 9, 84,195, 65,171, 59, 80,131,218,212,136,238,119, 83,184,156, -138, 20,180,104,116, 43, 91,119,185,184, 28,247,198,193, 19, 27, 7, 7, 0,192,181,227,237,108,182, 52,101, 5, 59,235,238, 59, -238,169, 90,108,208, 23, 53,253, 93, 92, 27,211,221, 66,166,213,186, 90,228,214,237, 32, 29,229,203, 95,105,172, 32,199,217,104, -109,141,104, 68, 35,121, 2,254,157,232,211,217,177,173,164,130,198,192, 68, 34, 36, 68, 23, 8, 79,225, 15,156,157, 94,100,175, - 95,190,154,206,207,223, 77, 63,209,213, 30,238, 63,189,127,240,232,232,237, 17, 54, 99, 9, 28, 26,130, 15, 75,124,127,182,254, - 86,103,140,101, 72,206,128, 7, 13,107, 15, 26,216, 75,108,142,243, 40, 73, 63,255,204,242,170, 84,177, 50,152, 81, 4,248, 16, -228, 90, 18, 53, 78, 54,125,188, 63,125,127, 76,174, 78,228, 66,143,145,244, 13,104, 95,172, 73,101, 84,253,175,196,255,251,245, -224,238, 65, 81,100, 23, 5, 36,169,206,175, 62,246,199, 47, 30, 62,127, 83,231, 95,196,226, 4,150, 32,253, 81,156,159,153, 42, -119,249, 9, 43,191, 66, 96,141,191, 42, 8, 94,107, 4,109, 59,145,195, 33,179, 29, 99,114, 83, 44,211, 10, 67,236,218,166,145, - 95, 45,209,173, 12, 6, 97,182,149,177, 7,213,128,115,215,177,120,157, 36,207,117,158,143,204,157,102,223, 44,245,133,124,139, - 25,184, 97,220, 99, 3,237, 93,128, 7,215, 66,152,176,196,139,128,131,176, 59,172,206,246, 67,163, 1, 31,242,142,144,106,171, -247, 31, 1, 40,187,126, 23, 39,130, 40, 60, 51, 59, 59,155,205,143, 75,206, 34,202,113, 90,121,255,128,133, 8,162,133,133,112, - 96, 99,119,141,130,255,129,133,149,141,157,165, 88, 88, 91,105,113,157, 28, 98, 97, 47, 54,114, 6, 69, 16, 4,201,137,130,230, -252,145,236,110,110,179,155,157, 25,231,189,153, 77,118, 35, 87,216,132,176, 11, 27,152,236,124,239,125,243,190,247, 61, 94,237, - 99, 90, 1,247, 42,178, 87,138,171, 56, 14, 25, 0, 7, 34,134, 34, 46, 68, 26,214,206, 9, 23,132, 27,160, 8, 89, 8, 98, 0, -143,107,202,114,176,180,210, 58, 7, 18, 26, 50,174, 17,182,114,231, 69,104,114, 39,102, 75,246,115, 2, 70,131,128,214,220,160, -170,201,246,253, 53,162,123,240,147,190,185,104,210, 48,159,122, 77, 42, 26,190, 58, 82,197,169,112,163,201,194, 97,114,224, 43, - 14, 16, 38,177, 55,159,228,168,162,100,170,190, 18,180,166,119,116, 62,242,165,173, 88,128,198,144,246, 28,162,228, 53,140, 46, -118, 16, 91, 88,118,254,171, 87, 39,199, 80,207, 58,194, 3,193, 71,171, 12,175,238,234, 3, 82, 83,183,110,118,158, 42,124, 15, - 25, 84,238,204,246, 24,215,159, 45,128, 97,211,126,147,172,183,120, 39,224,133,102, 89,166,198,185,138, 50, 19, 50,101,106,192, - 9, 3,128,198, 24,208, 21, 94, 40, 12, 19,130,100, 12, 38,189,194,105,165,106,163, 73, 82,160,244, 76,146,184,128, 40, 45, 60, -221,242, 76,166,175, 2,232,214, 87,179, 2,110,249, 84, 55, 36, 17, 84,207,230, 0,104, 62,177,186, 81, 88, 87,243,217, 69,147, - 44,225,177,182, 65, 68,204,133,146,148,156,238,138, 81,148, 17,104, 86,242,236,246, 55,172, 60,224,173, 56,143,113,170, 44, 69, -224,139,237,154,119, 26,157,126,239,228,183, 95, 95,149, 42,234, 53, 10, 74, 87,236,155,171,221, 26,152,102, 25,146,135, 13,201, - 64, 74,156, 2,141, 2, 22,163, 52,101, 53, 93, 90,236, 48,168, 74, 41, 57,205,166, 38,113,134, 55,143,130,185, 71, 60,139,177, - 95,130, 89, 45, 4, 71,124,119, 29,100,136,194,195,159,195, 37,199,162,122, 50,155, 16, 87,244,173, 24,228,162,129,184,180,146, - 58, 93,158,240, 19,189, 44,212,233,229,176, 8,115,231,119, 50, 54, 87, 14,163, 17,228, 32,102,137,132,192,118, 30,117,237,220, -213, 87, 31, 95,207,193, 62, 2, 30, 35,152,176,102, 89,212,190,147,204,110,123,102,165, 21, 10,233,160,201,150, 78,132,189, 36, - 75, 14,211,248,241,139,189, 39,119,239,235,205,222,238,179,231,219, 55,174,111, 93,186,176,125,254, 10,132, 21,218,128,176, 88, - 96,132,145,120, 94, 62, 45,163,205,103, 66,126,224,187,194, 74,237, 20,228,249, 11,129, 28,181, 66, 85, 32, 23, 82,114,195, 84, -136,199,149,108,122,160,212,132, 73,246, 94, 80,200,121, 63, 92, 39,109,254,126,240,214,153, 0,160, 70,154,129,155,141, 19,172, -157,237,117,191, 68,233,206,229,157,205,254,153,221, 55,123, 31, 62,237,255, 47,190, 31,124, 31, 60,186,243,244,246,131, 91, 56, - 60,135, 12, 7, 15,183,110,222, 91,219,232, 23,209, 69,146,197, 69,150, 4,201, 31,210,106, 42, 47, 79,223,189,148,163,161, 45, -206,168,163,169,134,201,149,169,156, 70,106, 50, 42,242, 88,154, 44, 6,145, 89,106, 77,171,147,123,220,159, 73, 23, 59,223, 13, -112,163,114, 89,171,172,156,209, 88,191,101, 93,247, 57,112,253, 70,229,105, 12,163,199,156,220,186,134, 42,156,214,189, 44,230, -218,171,182, 76, 96,101, 29,117,136,183,206, 29,172,116, 32,171,229, 37, 53,191,195,202,124,164,154, 40,244,175, 0,148, 93,187, -110, 19, 65, 20,157,153,157,125,248,145, 88, 78, 16, 81, 12,196,136, 14, 65, 17,164, 20, 8, 9, 92, 81,240, 49,252, 4, 5,127, -131, 16, 15,165,224, 81,208, 18, 33, 37, 18, 20, 41, 98,201, 64,129,147,152,216,235,199,122,215,243, 96,238,157, 29,123,227, 68, - 32, 74, 75,246, 74,222,157,189,115,230,220,115,207,225, 75,156, 78, 17,222,186,144, 60, 54,119, 3, 70, 70, 21,199, 86,105,104, -135,104, 35,112,137, 1, 80,197,193, 79,202,160, 70, 72,218, 8, 80, 95,152, 42, 17,104, 36,148, 48,207,195,167,116, 98,138, 41, -213,161, 71, 35, 86, 1, 99, 63,164,173, 56,241,172,115,128, 7, 69, 4,196,148, 80,250, 20, 29,202,140,205,124, 83,206,134,128, -134, 88, 8,173, 21, 86, 98, 6,249,120, 99,145,109, 86, 55,204, 79, 58,195, 54,167, 60, 48,103, 18,207,236,222,156,193,214,128, -185, 67,116, 49,204, 95,168,184,110,163,178,105, 45, 74,149,253,202, 72,197, 86, 52,189,248,190,210,133,170, 78,231, 27, 44, 59, -167,175,160,127,105,217,210, 75,198,128,153,195, 0, 26, 61, 23,225,158,122,206, 75,217,186,165,249, 82,197, 66,141,157,114,113, -254,120,234,132, 92, 49,176,221,220, 50, 83,137, 77,173,204,192, 17,209,252,201,100, 70,195,136,108, 40, 47, 69,113,137,129,199, -158, 71,106, 33,196, 6,131,108, 17,215, 14, 68, 8,227,198, 60,158,217,142, 22,157, 8,112,146,113,131, 12, 6, 80,195,227, 12, -208,106,185, 76, 1,170, 91,190, 66, 0, 35, 79,167,192,103,210, 18, 38, 84,102,146,148, 67, 90, 66,133,102, 45,162, 6, 36,121, - 96, 20,201,234, 53,118,120,204, 18, 97, 39, 80, 20,210, 80,108, 42, 18,230,110, 60,178, 34,214,176,136,140,167,163,239,199,147, -130,224,253, 98, 15,100, 46,238, 37,133,176, 61, 64, 98, 9,120, 69,128,132,133,155,253, 28, 80, 36, 65, 63, 30, 71, 36,233,101, - 45,106, 17,234, 8, 37, 70,211,145, 53,155,138,147,179,107,107, 55,186,131, 46,202, 47,116,243,234,173,246,201,145, 93,213,142, -125, 99,139, 6,187,182,199,111, 12, 74,202, 21,110,238,213, 80,110,166,129,229,243,234, 57, 69,169,151,255,148,180,181,193,148, -108,100,225,209,158, 72, 39,217,116,107,189,217, 57,233,188,223,255, 0,254, 54, 32, 20,130,235, 6,220,207,160, 39,236, 76, 73, -149,229,219,161,143,226, 5,190, 41,172, 16, 85,198,121,156,198,149,168,106, 46,222,238,247,158, 62,123,190,179,125,187,241,224, -206,187,221,221,135,143, 90, 93,146,213,130,245,129, 24, 1,114,178,245,221, 60,215, 6, 46, 38,251,186,175, 33,120, 79, 33, 65, -205,209, 33,189, 92,238, 12,180, 21, 76, 71, 69, 44, 92, 9, 67,108, 63,192, 81,221,128,113, 60, 61,224, 8, 6, 99,230,141,172, -149, 64,210,254,242,205,219, 50, 84, 0,187,140,225,144,194, 65,248, 69,165, 36,173,173,187,122,165,121,212,251,209,155,245,191, -126,250,178,255,237,224,222,227,237,255, 45,241,123,135,123,173,157, 39, 31, 63,191,194, 79,253,120,252,243,230,253,235,230,250, -226,247,170, 14, 86,171,245, 70,154,130,253, 66,180, 73,146,215, 47,228,217,169, 24,156,166,103,191,228,176,151, 77, 98,105, 14, - 88,200, 47,216,195, 16,120,159, 48, 63,149,137,212,121,178, 50,172, 87, 4,239, 78, 62,110,181, 42,194, 10, 80, 53, 30,190,208, -212,241,156,191,205,133,178,254,111,237,134,149,183, 4, 65, 37,133,196, 74,186,212,244,195,160,177, 10,196, 36,104, 89, 64,241, -212, 66, 43, 14, 99, 84,249, 46, 83, 48,118, 87,206,192, 92, 47,166, 88, 47,203,155,251, 35, 0,101,215,178,219, 52, 16, 69,231, - 78,198,113,210, 36,180,161,225, 33, 90, 20, 9,177, 1, 36,118,252, 5, 95,129,132,186,237,167,176, 71, 2, 9,248, 2, 36,150, -176, 98, 65, 23,168, 98, 67, 17,149,154,242,104, 85, 81, 53, 73,235,196,137, 61,142,205,156, 59, 99,199,137,202,130,172, 98,201, -177,146,204,248,250,204,153,115,207, 89,242, 39, 40, 37, 17,187, 77, 88, 69,115,102,142,251,231, 4, 18,147, 17,159,196,246,102, -236,254, 40,184, 88,161, 64, 99,244,173,122,141,141,210,116,102,155, 61, 8, 38,226,210, 69,170, 22,138, 84,197,241, 17, 86,120, -227,177,109,183,176, 81,210, 82,241,116, 87, 85,222,233,184, 86, 93, 1,117,163, 12, 48,196, 51,163,110,234,121, 6,169,242,170, -223, 94,141,175, 14,163, 62, 60, 91, 65, 59, 33,157,215,224, 72,237,124,223,168,104,213,165,162,245,154, 49, 90,211,111, 37,137, - 30,167, 33, 18,136,172, 71, 56, 89,115,165,204, 17,110, 37,158, 62,223,144,144,116, 9,125, 54,207, 57, 92,124,110,150,227,189, -138,213,157,253,187,113,253, 86,179, 61,157, 14, 42,100, 15,103, 73, 54, 91, 87, 21, 51,152,253, 92,135, 14, 91, 55,198, 84, 13, - 18,235, 62, 76,118, 57,148, 50, 29, 38,160,105,109,188,161,132,226, 2,190,204,102, 21,213,144,168,239,170,146,249,194,121, 53, -214, 61,107, 45,110, 38,181, 88, 83, 74,231,193, 59,224, 97, 8, 10, 86,251, 27, 26,158, 8, 19,129,229,145,132,204,209,156,149, -164,210, 0,243,118,221,220,181, 50,192,218,198, 64, 54,248,151,181,124,140,186, 25,162,134, 95,169,250, 34, 78, 48, 94,205,154, - 92,241,170,158,138,227,153,244,136,167, 35,145,102, 79, 55,155, 29,191, 0,201, 89,233,158, 22,172, 58,228,252, 46, 47,123,193, - 61, 86,170,186, 95, 15, 38, 23, 80, 58,167,182, 43, 86,218, 18,207,134,221,242,118,167,251,235,244,135,200,177, 86,202,176,145, -168,236, 6,229,114, 72, 74, 66, 99, 42, 53, 27,211, 81,255,216, 96,232,155,107, 27,177,214, 7,127,122, 68,142,208, 75,115, 80, - 84,148,248,235,173, 27,131,232, 66,199,145,189,181,124,207, 60,224, 84, 16,141,100,249, 38,202,243,116, 72,254, 99,231,158,127, -238,102,167, 59, 8,206,194,104,194, 9, 40,160, 21,127,158, 29,178,165,146,144, 52,199,109, 65, 60,194,178,194,229,148, 21, 41, - 66,248,144, 89,253,156,143,135, 49, 98, 97,204, 3,142,166,225,168,106,102, 70,205,207, 82,239,203,222,225,231,221,239, 65, 50, -126,180,241,176,221,233,138, 90,251,245,206, 75,144,238,123, 66,244,132,216,228,250, 94,180,219, 93, 17,226, 1,147,239, 22,215, -107,199,207,192,232, 62,199, 66,230,139,121,108, 52,143,119,210, 54,252, 58,199, 86,184, 90, 38,225,189,187,119,204,121,199,251, -189, 70,205,135, 6,183, 34,145, 49,134,221, 77, 14,139, 18,244,109, 24,190,223,125,229, 46,119, 11, 97, 75,207,159,189,120,186, -253,228,191,234,251,219, 15,111,182, 30,111,231,245, 93,156,238,189,187,223,221, 66, 34,202,192, 28, 12,245,254,121,118,114, 34, -143,126, 79,119, 62, 6, 95, 63,197, 73, 56, 67, 19,183, 54,211, 15,140,112,173, 57,137, 70, 89, 30,121,196,190,126,153,203,217, -179,177,241,214,129, 42, 71, 20,174,228, 59,103, 63,252, 57,140,158,179,130, 64, 39, 39,154, 47,228, 21,197,212, 98, 53,139,188, - 52,129,213, 94, 92,242,202, 66,103, 14, 40,151, 3,150, 1,205,163,132,163,251, 28,234,177, 19,117,198,174,184, 34, 41, 97,239, - 82,183, 41,229,170,150,165,109,129,229,215, 95, 1, 40,187,150, 30,167, 97, 32, 60,118,156, 87,211,150, 44, 91, 30,218,195, 2, -226,128, 56,112,225,176, 18, 87,142,252, 18,126, 19,119,126, 9,191, 1,113,219,229, 33,180,180,251,108,211,180,121,217,198, 51, -182,211,180,156,232,161, 82, 21,165,145, 44,103,102, 60,243, 61,196,144,157, 11,135,205,119,231,151,237, 28,148,176,198,177, 39, -244, 68,147,192,154, 41,189,177,234,176, 28, 36, 30,120,209, 99, 83,216,227,168,179,193,228,131,166,168,100,221,108,197, 14,181, - 23, 80,209, 62,249,160,168,175, 32, 18,187, 38, 87, 38, 20, 23, 51,201,131, 7,105, 16,231,241,136, 44,154, 80,130,188,104,218, - 44, 12, 51,243,104,180,145, 97, 91, 68, 83,233,147,241,105, 81, 47,205,234,117, 90, 40, 76,117,170, 81, 56, 24, 32,123, 14,189, - 19, 98, 0,135, 55, 72,216,100, 26, 76, 77, 80,138,147,104,173,202,197,246,119, 75,150,114, 46,246, 48, 37, 0, 6,214,128,142, -218, 74,137, 66, 74, 39,168,198,246, 33,148,236,112,180,189, 91,108, 61,236,239, 51,240,179, 11, 6, 93,189,140,201,167,117,221, - 53, 45,194,187,224, 41,249, 96,164, 30,209, 96, 62, 51, 14,227,136,111, 37, 43,129,143, 72,226, 8,225, 48, 12, 97,139,228,239, -106, 13,237, 96,221, 1,246,109,201, 24, 37,198,213, 35,140, 60, 71,169,182,233, 40,204, 71,136, 25, 94,213,232,229,201,172, 80, -140, 48,153, 82, 55, 74, 87,180,219, 77, 26,200,153,217, 94,170,236,112,206,103,246, 88, 18,177, 90, 42, 19,166,205,179,146,200, - 68,118,150,133,188, 33,107, 44,204,246,194,172, 29, 55,183,102,169, 8,200, 15, 55,127, 0,153,185,165, 5, 18, 22, 55,217, 21, - 59, 81,158, 94, 58, 84,132, 80,113, 56, 70,143,177,129,197,243, 49,105,212,244,228, 59,155, 21, 77,173, 93,214,165,217,234,121, -150,223, 22,183,187,142, 11,109,123,147, 15,126, 46, 46,104,101,131, 61, 14,235,176, 70,161, 63,154,141, 31,221,148, 55, 86,255, -213, 30,217,180,139,248, 4, 84, 97,124,190,252,131,252, 80,178, 87, 49,215,210, 56,219, 52,229,139,217,203, 31,215, 23, 30,210, - 3, 87,197,149,242,250, 37,216,118,111,183, 84, 16,234, 94,139,145,144,160, 22, 35,169,201,190,212,106,171,242, 61, 88, 28,121, -204,125,159,159, 99,233, 75,114, 5, 73,148, 38, 65, 82, 86,133,147, 66,195,111, 73,110, 7, 20,129,184, 57,224,166, 71,227, 28, -101, 41,233, 37, 39,191, 74, 4, 17,160,109,147,195,207, 57,229, 55,156,120, 9, 49,153, 30,173,155, 77, 38,158, 8, 22,117, 44, - 72,195,100,146, 60,140, 96,115,252,229,227,237,217,135,101,246,188, 61,121, 3,175, 25,188, 2,120, 11, 96, 34,243, 41,192, 51, - 71, 97,163,162,190,181,124,105,137,179, 94, 1,170, 10,106, 93,212,247, 43, 4, 96, 17,125, 23,155,132,220, 59,169,177, 45, 52, -239,207,222,153,219,190,254, 58, 47,160, 44,170, 50, 68, 8,163,216,202,141,236,227, 73,181, 65, 86,182, 72, 90,228,178, 85,179, -240,241,181, 92,252,111,124,191, 43,175, 39,163,172,255, 89, 45,190,137, 59,104, 46,101,245,233,115,115,117,169, 87,247,109,121, -215,110,150,235, 98, 94, 49,132,134, 41, 70, 6,204, 18,170,174, 33,139, 96,229,208,210, 86,103, 93,218, 90, 30,145,172,210, 65, -178,250,119,156,136,169, 76,246, 10, 47, 94,105,189,175,142,189, 19,182,143,141,202,109,101, 91,221,171, 81, 52, 89, 87, 37,223, -107, 58,242, 62, 2,113, 38,204,177, 27, 71,233,254,129, 61, 93,153, 57,180, 13,219, 73, 45,185,150,165,239, 77, 30,194,126, 58, -237,105, 80, 12,134,110,125,240,111, 9,255, 87, 0,202,174,156,183,137, 32, 10,207,236,225,117,124,132,245,154,200,137, 20,229, -144,194, 17, 10, 68, 5,252, 4, 58, 26, 42,106, 36, 34, 81,128,132,196, 47,128, 2,122,138, 72, 52,244, 52, 17, 13, 5, 8,137, - 42,101, 58, 66, 4, 66, 33, 36, 56,137, 29, 99,239,174,237,189,102,120,239,205,172, 99,163, 8,137,206,197,122,239,157,119,124, -223,251, 62,235, 44,229, 72, 62, 73,155, 97, 36,242, 78,248, 44,202,175, 91, 5,110,193,146,106,107,195,107,147, 16,103, 68,213, -104, 84, 71, 77, 21, 49,210, 42, 32, 65, 90,172,113, 48,215, 67, 82, 60,215, 93, 69, 53,227,110,209,112,135, 66,137, 83,101,166, - 65,219,192,149, 87,177,125,207,253, 36, 70,162, 2, 28, 39,197, 70,103,144,166,211,232,181, 97, 85,240, 67, 40, 12,146, 4, 78, -166, 81, 89, 62,240,191, 66, 6, 17, 35, 49, 4, 91,190, 24,105,232,241,141, 33, 10,156,188,163,141, 80, 14, 6,233,176,152, 22, - 28,163,228, 21,220,229,234,197,239,189, 29, 20, 12,202, 39, 98,228,152,241,222,136,214, 66,117,169,227, 85,235,173,222, 33, 63, - 3, 79,149,103, 78, 43,140, 48, 28, 83,147,237,148, 10, 35,162,154, 16, 18, 7,232,206,135, 68,110,120,121,151, 92,171,110, 88, - 71,153,152, 17,132,197,114, 94,181, 25, 4,206, 4,135, 94,176, 43, 7,217, 99,156,177, 48,197,219, 93, 32,219,164, 4,215, 26, -220,218, 51,105,100, 41, 99, 14,242, 79, 37,218, 89,153,134, 91,180,221,138, 61,140,196,206,126,255,184, 27,119,146, 83,208, 25, - 10,130, 90,197, 90,172, 79, 45, 54,166,252, 76,118, 3, 50,237, 69,145, 22,244, 36, 77,208,101, 11, 86, 88,195, 39,130, 95, 9, -171, 42, 35, 18,180, 91, 3,194, 0, 15, 5,119, 9, 46, 78,185, 44, 23,141, 84,240,132, 75,183,204,145,181, 41, 48,115, 47, 58, - 37,136, 34,131, 40, 68, 15, 70,165,214,162,199, 17,224, 77,136,145,186, 78, 79,197, 70,255, 57,217,236,238,207, 76,207,118,131, -118,156, 3, 87,249,164, 5,150, 96, 29,255,196,208,173, 48, 66,201,160,222,147,202,197,111,212, 74,212,181, 32,101, 68,250, 11, -225,166, 30, 83,111,251,176,184,103,231,202,181, 30,186,241,169,252,123, 98,154, 73,151,228,148,194,121,149,198, 73,216,130,125, -236,181,127,208, 10,107,144,156, 22,214,239,222,148,119,130, 22,143,252,212, 61, 57, 83, 48, 36,213,163, 8,174,176,140,244,106, -108,203, 92,168, 45, 53,131,230, 96, 24,106, 37,158,124,246,251,242,252,234,231,253,109, 66,222,176,175,211,143,134, 17,178, 19, - 32, 90, 35, 49, 84,146, 75, 10,185,207, 34,188, 53, 87,155,143,211,168,229,183,176,231,197,241, 41,155, 76,217, 52,234,152,166, -232,253,100,131,162, 60, 4, 88,216,239, 81,249, 75, 51,134,240, 10,136,248,198,194,213,247, 59, 31,218,195,117,198,215, 75, 67, -103,238,215,188,123,188, 18,190,117, 69,118, 77, 24, 55, 3,187,209,169, 55,196,162,199,174, 48,182, 9,187,220, 66, 56,205, 68, -195, 96, 50, 59, 19,237,237,111,198,165,217,137, 87,253,176,183,119,112,208, 11,124,184,226,223, 89,240,250,249,250, 67,238,212, -121,229,227,167,119,240,215,199,119,215,182,118,191, 60, 93,123,114,253,206, 45,184,189, 85,102, 61,187,255,168,108, 21, 77, 72, -240,104,161,104,167,199,176,143, 7,183,239,189,220,120,245, 95, 75,252,234,133,149,209,111,231,104,183,251,226, 77,212,252,217, -217,218,148, 38,201,196, 38, 81, 28,245,147, 56,164, 57,250, 12,181,226, 51,133, 9, 10,178, 99, 80, 55, 72,203, 64,230,164,151, -220,116,103, 52,227, 66,110,147, 42,113,226,147,186, 82, 98, 76,149,119, 12,158,148,226,239, 37,149, 67,180, 86,204, 58,121,170, -100,131,201,196,249,114,189, 21, 28,169,244, 78, 19, 42,169,210, 83,161, 93, 27, 82,141, 29,206, 26,117,138,213, 89,230, 68,123, - 85,139, 42,253,153,241,228, 93,254, 19, 13,252, 35, 0, 99,215,206,219, 52, 20,133,125,175, 31,113, 19,187,105,210, 86, 78,149, - 8, 84,202,163,168,176,241, 27,248, 9,140, 76, 12,176,179,192,200,191, 65, 8,137, 29, 88, 16, 11, 3, 98, 96,160, 67,169, 26, - 74,161,143, 60, 72,108,199,207,235,203, 57,231,198, 78, 37, 40, 98,139,146, 37,246,181,207,235, 59,223,247, 25, 23,128,131,172, - 50, 84, 82,237, 35,121, 47, 32,192,111, 27,117,174,204, 26,230,100, 50, 94,168, 38, 25, 91,123,244, 10,224,231,251, 84, 44,220, - 77, 75, 55, 33, 76,215,184,105,114, 27, 82,236, 36, 9, 4,202,138,193,185,163, 12, 24,142, 99, 80,178,134,199,228,141, 0,213, -103, 77, 71, 74,133,203,140,148, 73,155, 99,128,135, 43,108,112,131,168,140,184,237, 23, 21, 18,226, 29,100,177,164, 72, 92,203, -193, 57, 15, 51,140,130,252,223, 10, 98, 55,206,189, 79,148,142, 56,188, 52, 16, 43,225,172, 35,250,140,250,165, 73,129, 11, 16, - 29,109,189,235, 92,234, 7,251,172,100,183, 81,185, 36, 42,252, 67,150, 73, 24,174,108,136,106, 33,115, 1,163,170,253, 39, 11, - 52,246, 87, 66,154, 90,200, 34,121, 43,218, 21, 69,246,143,102, 18,172,154,166, 73, 44,113, 51,173, 91,103,155,107, 13,104,131, -252, 32,113,150, 80,236, 85, 41, 19, 16, 10,141,155,233,121,121,104, 56,126,161,159,114,202,218,130,204,105, 17,160, 51, 16, 12, - 34,215, 85,204,163, 73,193,189, 90,109,213, 49,250,131,240, 96,148,248,153, 12,168,247,206,206,139, 39,248,249,103,223,223, 60, -244,111, 95,174, 95,235,185, 80,242,132, 81,252, 43, 20,105,142,247,110,201,210,234, 57,116, 82,197, 56,214,102, 25,229, 39,139, -169,185,213, 90,157,133, 2, 39,248,182,137,100,124, 70, 40,194,233, 52,223,234,152,135, 3,116, 16, 55,240, 92,162, 52,175, 46, - 66,173,117,115,181,131,130, 18,246,134,225,181, 54,142, 6,135, 74, 53,200, 91,238,158, 76,127, 82,153, 82,206,190, 53,185,104, -113,121,197, 8, 97,114,225,209,139, 79,118,233, 80,171, 68,162, 36, 35,239,199,118, 99,101, 26,249, 42,208,171,178, 28,235,180, - 92,184, 53,103, 10,149, 50, 2,249,108,189, 73, 4, 87, 58, 36,111,101, 35, 74, 67, 63, 10, 28,219,197,194,156,132, 69,114,153, -213,204, 26, 54, 10, 34, 87,251, 19,232,165, 89, 54,102,184,211,101,152, 17, 4,148, 28,151, 68, 32, 32,182,156,246, 96, 50,208, -137,231, 2, 55,112,255,108, 15,173,227, 56, 20,187, 44, 19,139,101,148,221,163, 47,115,214,164,192, 84,143,102, 6,186, 37, 5, - 49,191,100,177,229,221, 56, 56,219, 35, 35, 14,196, 61,250,131, 62,195,105,155,238,218,110,129,144,120, 36,231,171,233, 92,165, - 59,101,138,160,220,202,154,245,229, 92,192,191,201,184,242,115, 36,204, 64,100,241,179,123,143, 94,223,125,245,224,201,227,143, -223,247,142,131, 97, 20,203,111,227, 15, 52,148,121,174,217,141,142,219,189, 37, 29,239, 71,119,188,155, 10,198, 67, 47,253,234, -247, 44,104,218,116,124, 95, 33,145,183,183,175, 91, 90, 14,245, 86,151,117,110, 94,217,218,217,217,238,245,188,246,157,171,250, -106, 19, 74,129,213, 86,107,205,235,116,154,221, 13,167, 13, 25, 52,207, 50,120, 76, 76,232, 58,152, 5,249,225,248,253,167,147, -201,172, 33,244,182,229,164,212,186,218,166, 21, 5,179,119, 47,223,222,127,250,144,226,251,255,218,112,183, 26,173,120, 52, 90, - 52,124,121,114,250,230, 69, 16, 76, 50, 45, 70,122, 35,220,192, 66,224, 72, 17,222,253,100,134,216,145, 76,181,130, 72, 31,164, - 82, 72, 72, 53, 5,196,210,213, 73,155,107, 82, 85,111, 49, 57,240,113, 99,201,118,167,228, 28, 0, 71, 28,102,225,133, 14,120, -218,159,155, 44,139,146,184, 12,238,115,120,137,228, 52,196, 40, 28,162,247,101, 73, 77,157, 75,228, 72,181,248,170,138, 14, 86, - 84,118, 20,132,242,179, 74, 39,138,136,101,240, 69,195,118, 32,132,142,103,195,115,112,126,169,153, 37,229, 63, 86, 61,126, 11, -192,216,185,181, 54, 17, 68,113,124,110,187,155,102,219,180, 73,106,226,165, 45, 6,197,162, 85, 68,170, 62,248,224,131, 95,193, -207,224,135,243,193, 87, 31,188,160, 32, 69, 95, 68, 4,161, 69, 36, 90,219,136,196,150, 52, 77,178,151,217,157, 25,231,156,217, - 77, 27,250, 82, 88,200, 13,178,201, 94,102,206,156,243, 63,255, 31,248, 19, 80,232, 90, 83,244,140, 26, 18, 95,114,100,235,112, - 15, 60, 10,225, 73, 67, 52,208,116, 91, 56,188, 55,115,178, 3, 72,172,218,233, 84, 57,145,191, 70, 50, 9, 18, 33,192, 40, 26, -237,147, 33,219,110,183, 86,216,178, 51,196,254,232,183, 13,216, 61, 80,227, 51, 31, 23,173,248,119,121, 8,198,223, 2,172, 11, -184, 15, 92, 81,194, 2,142,241, 46, 99,161, 7, 17,189,189, 24, 43,130, 71, 96, 93, 66, 83,149, 29,165,145, 96,226, 48,217,251, - 27,245, 83,149, 36, 42,145, 58,201, 92, 67,172, 41, 66, 51, 60, 0, 60, 7,104,111,142, 90, 20,251,189, 2,127, 63, 15, 89,120, -177,218,238,142,119, 10,151,155, 19, 75,119,164, 45, 57, 74, 92,217,222, 53,173, 72,184,234, 53, 32,123, 52, 73,212,100,198, 36, -104,198, 45, 8,219, 53,243,196,254,123,200,146, 35,100,214,103, 52, 73, 99, 59, 63, 53, 9,185,177,236, 95,187,180, 48,136, 84, -127,152, 77,164,246,184,177,155, 61,213, 99,168,247,195,128,142, 88, 57, 71,118,129,160, 68, 0,107, 5,139, 95, 56,195,217, 81, -205,199,240,214, 67,245,181, 2, 77, 48,105, 86,131, 78,221,235, 29,196, 63,143,146, 8,171,107, 17,234,155,147, 50,126,119, 55, -150,143, 37,183,121, 66, 46, 47,242,251,215,151, 86,218,161,141,130,250, 71,114, 56, 81,160,145,129,234, 31,141,177,159, 82,193, - 78,209,192,146,209,122, 21, 80,207,246, 69,110,192,169,185, 81,229,129, 61,133,130, 87, 3,250,113, 39,254, 55,134, 16, 74, 42, -152,150, 50, 5, 6,252,173,218,106,111,176, 87,216,162,162, 76, 72,187,174, 84, 20,174, 57, 87, 71,130, 58,150, 89,171,182,130, - 88,110,199, 89, 87, 83, 45,179,220,154,149,121,196, 82, 87, 10, 31, 53,230,155,137, 28, 75,224,255, 65,228, 14,188,212,178,151, -196, 20,142,122,184, 95,234, 46, 75,119,162,221,210,183, 88,161,163, 63,157,217, 88,189,213,237,119,239,117, 30,108,239,126,157, -200, 73, 1, 30,162,180,234,207, 31,199, 3,103,165,224, 56,166, 64,185,200,213,218,114,167, 55,216,199, 36, 64, 33,167, 55, 56, -112,219, 71,143, 10,136, 30,117,230,238,115, 85,118,138, 93,105,174,246, 14,118, 43,149, 80,202,132,226, 29,129,197,117, 3,166, - 29,208,167, 13,135,190, 94,169,167, 70,102, 89,234, 76, 43,139, 40,202,241, 16,113, 13, 13, 2, 53,240, 28,226, 14, 42,233, 67, - 70,156,249, 8,172,108, 47,182, 14,163, 33,116,193, 50,209,110,182, 52, 21,199, 81,150, 50, 59, 37,213, 55,106, 55,159,221,125, - 74,150,200,135,173, 47,207, 63,191,124,221,223,250, 17,125,135,235, 50, 63,176, 95, 90, 11,230,148,206, 61, 42, 1,179,128, 46, -152,161, 94,240,125,184,249, 80,216, 6,170, 7,158, 43,223,174, 35, 37, 76,132, 48,249, 84,124, 17,120, 81, 28,143, 70, 67, 27, - 51,123,129, 39, 4, 27, 78,134, 99, 76,229,207,145,224,113,187, 51, 82,233, 33,116, 33, 64,152,245,107,240,231,211,139, 55,236, -106,253,225,230, 38,166,128,206, 37,157,188,189,178,209, 94,184,240,118,251, 61, 58, 0,215,214,215,238, 72, 20, 97, 82, 68, 42, - 80, 36, 39,229, 50,121,178,254,232,213,183,119,176, 22, 2,222, 3,210,156, 84,201, 3,207, 93, 1, 85,155,211,157,137, 39,234, - 70,227, 90,249, 25, 58, 17,185, 75, 11,205,129,233,212,105,192, 1,153,167,157,168,244, 84, 10,247,236,136,234,220, 82, 77,161, -107, 40,192,145, 39,173, 72,122,138, 10, 33, 37,161,205,148,246,147,166, 68,127, 19, 51, 91,207, 51,133,236,135, 97,151, 59,213, -231, 26,220,139,247,254, 11, 64,217,181,228, 70, 13, 4,209,182,219,223,140,147, 56, 95,146, 33, 10, 32, 33,148, 8,150, 72,220, - 32, 11, 36, 86,236,184, 3,107,238,192,154, 59,112, 7,246, 32, 33, 36, 4, 66, 72,136,160,128, 80,130, 2,153,204,100,198, 99, -187,221,254, 52, 85,213,237,137, 19,178, 97, 22,179,178,108,181, 93,221,245,123,245, 30,158,239,180,194,186,229,195, 52,247, 63, - 87,208,182, 80,210,199, 33, 37,107,151, 7, 17,235, 85, 56,134,202,137, 49,195, 22, 8,230,104, 72, 71, 21, 95,147,193, 33, 33, -181,136,234,144,144,105, 94, 44,140,170, 86,130, 37, 27, 78,228,236,148,136,241,112, 43,186,196,133,135,185, 33, 3,115,114,240, -174, 16,194,219, 94,132, 38,227, 42, 44,225,249,112, 37, 88,176,227,240, 90, 25,228, 80, 77, 69,160, 81, 33, 68, 85,200, 38, 59, - 76,191,149,181, 20,117,129,147,205, 56,129, 95,233,153, 50, 42,162, 98, 0, 94, 33, 4,179, 34, 64, 40, 60,195,229, 68,146, 19, - 88,193,198,220,198, 81,113, 40,171, 84, 97, 91,168,238, 2, 94, 47,243, 66,156, 19,188,177, 78,166,207,216,149, 67,199, 90,123, -200,214,138, 84, 72, 52,131,149,113,207, 15,185, 55,157,156,132,182,117,119, 51,220, 94,239, 77, 69,125, 60,146, 35, 1,110, 78, - 69, 54, 22,255,192, 44,147,182,129, 15,193, 62, 50,106, 18, 8,160,209,164,184, 84,118,119,109, 93,174,197,108, 32,171,208,203, - 74,101, 57, 92, 45,123,124,119,117,110,148,200,239,195,108,130,226,199,200, 30, 3,139, 31, 43,132, 71,232, 99, 93,179, 69,134, -100, 28, 14,149,107, 54, 99,123,247, 70,188,115, 43, 30,140,139, 52,203,147,188,158, 20,104, 74,169, 84,130, 76, 41,164,204, 13, -130,219, 56,224, 61, 31, 63, 79,222, 88,162, 1,111,196,215, 34, 27, 14,125,176, 17, 89,169, 55, 95, 10, 33, 17,124, 80,160, 68, - 38, 43,145, 43, 74,219,172,225,189,135,191,133, 96, 49,151, 57, 77, 21, 88,252, 34,197,210,165,129, 52, 51,142,100,176,201,255, - 48,168, 50,195, 55, 76, 40, 29,108,225,144,142, 8, 41,250,182, 35,218, 88,223,180,168, 26, 66,112,123, 45,174,166, 58, 45, 19, -184,200,117,193,211,115, 89,151,253,184, 63, 76, 7,105,150,160, 0,136,101,201, 82,144,164,138,113, 15,112,243,208,239, 77,210, - 81,173,180, 80, 29,172,168,114, 29,175, 44,203,118, 2, 75, 19, 15, 41,159,251, 16, 74,195,226,226, 48,166,172,220, 98,109, 55, - 2, 30,236, 19,123,101, 20, 44, 8,153,234,132,216,198,166, 19,201,137,107,175,135, 32, 40,151,202,157, 58,119,214,140, 32, 92, -211, 57,224,168, 32, 6, 92,112, 5,164,194,224, 88, 57,184,132, 7,183,239,127,252,241, 73,243,111,225, 20, 43,110, 61,135,246, -158, 11, 38, 3,175,160,180, 32,184,113,114,108,124,174, 60,218,218,123,124,103,207,223,180, 89,193,198, 31,154,159, 91,246,235, -223,236,221,175,195,253,225,254, 80, 12,184, 31,185,107,247,242, 38, 56, 29,126,149,211,227, 42,159,168,100,112,131,207, 63, 92, -244,215,231,157, 36, 99, 7,121,242,118,252,170, 98,227, 76,158,228,229, 89,131,113, 72, 99, 58,115, 22, 95,245,182, 49,237,176, -231,175,241,126,224,172,157,201,247,203, 75, 71,195, 66,102, 86, 51, 21,226,128, 26, 45, 47,159,191,120,242,236,169, 7,113, 79, -121, 53, 87,101,247, 51, 67, 88,189,179,122,243,243,159,125,108, 9,187, 81, 63,190,174, 28,183, 77, 6, 77, 19, 29,249,225, 43, -129,156,180, 52, 62, 77, 39,123,101, 36,125, 76,200, 94,155,237,212, 1, 69, 41, 53, 3,179,177,218, 12,240, 40,117, 65, 82, 6, - 75,241,213, 12,213,216, 57,223,187, 28, 47,151, 98, 58,139,205,170, 40, 4, 72,225,182,134,154,104,194,140, 54, 19,101,231, 2, - 35, 90,253, 92, 83, 11, 24,253,135,150,215,106, 86, 50,190, 56,112,250, 95,135, 59,252,254, 10, 64,215,181,244, 68, 13, 69,225, -115,251, 26,218,153,206, 48, 12,143, 0, 38,110, 12,136,132, 5, 91, 19, 93,251, 23,252, 15,174,117,173,127,193,133,123, 23, 38, -110,248, 31,110,240,145,104, 76,120,133,196,240, 18, 4, 90,218, 50,189,189,173,247, 59,183, 5, 7, 48,179,106,102,210,105,111, -123,207,249,206,235,251,106,251,126,115,251,212,132, 4, 8,169, 81,192, 97,153,108,125,217, 93, 49,110, 51, 12,215,248, 65,161, -111, 1,194,190,224,252, 19, 44, 26,129, 52, 47, 92, 69,193,170, 58,108,132, 88,164, 6, 56, 5,174,162,237,181, 61,107, 44,145, - 23, 72,164,218,230,204, 26, 32, 96, 17, 90,160,192, 70, 91,125, 71,227,116, 7, 96, 55, 16,158,239,181, 4,164, 60,244,182,181, - 92, 6, 46,120,147,140, 76, 51, 59,113,237, 72, 14,210,104, 88, 22,187,231, 63, 36,201,172, 72,178, 66,155,154, 33,179, 16, 23, -149,184,146, 59,129,149,201, 73,114, 28, 4, 10,123,151, 92,174, 23,185,147,254,204,185, 58, 78,138,152, 43, 47,204,251, 38,174, -117,199,111, 88,246,255, 55, 69,142,166,224,155, 63,197,246,229, 71,138,120,129, 41,243, 29, 37,189,178, 92,158, 13,250, 61, 63, -201,228,126,148,107,192,171,111, 55,132,103,163,147,188,204,193,199, 8, 23,173, 56,212, 68, 87, 80, 77, 0, 94, 75, 21, 96, 76, - 92, 64,247, 68, 31, 38,138, 21, 30, 73,116, 29, 49,225, 89,227, 45,187,227,120,235, 71, 73, 2,206, 6,100,154, 38, 3,107, 42, -112,163,164,220, 78,165,233,120, 14,120, 98, 49, 64, 44, 65, 58,168,214, 88, 43,116,105,182,231,173, 46,244,102,166,194, 95,191, - 53,222,203, 79,211, 34,205, 81,115, 76,121,188, 92, 59, 67,151, 77,188,126, 3,186,190,118,179, 34, 85, 70, 4, 9, 5,241, 22, -128,163,152, 10,173, 40, 83,159, 55,228, 37, 68, 91,128,226,115,137, 84, 18, 19, 3, 25,114, 34,147,125,196,103,208,153, 60,142, - 79,236,209,190,153,145, 25, 65,186,181,156,213, 72, 39,177, 81, 16, 51, 27, 9,251, 72,152, 36, 88,141,152,244,143, 7,221, 65, -156, 70,243,253,249, 29, 40,108,112,150, 29,156,124,126,154,107,199, 84, 84,141, 68, 27,151,133, 48, 19, 3,133, 41, 97,143,185, - 94,219,239, 30, 71,135, 22,191,177,170,144,168, 55, 1, 2,162, 77, 14, 18, 84, 94,123, 16,246, 55, 14, 55,177,115, 85,221,194, -121, 53, 56,199, 89,116,219,106,102, 95, 52, 58, 89,156, 91,250,182,251,165,223,153,200,164,204,100,234, 92,123, 2,164,164,113, -229, 70, 85,154,111,193,164,108, 17, 3,240,215,216,128, 70,111,188, 57,114,184,217,192, 97,125, 27, 23, 96, 11,147, 94,157,150, - 47, 85,225,217,208, 62,227,213,181,140,148, 39,184, 70, 17,182, 10,125,205,113, 46, 75, 97,231,194, 30,146, 45, 43,247,126,184, -176, 52, 88,124,236,175,174,188,154,166, 21,190,166, 35, 16, 6,111,238,209,246, 25,173,239,211,250, 5, 69, 74,163, 45,122, 48, - 71, 15,167,233,105,159,150, 39,232,207, 54,173,125,165,247, 63,105, 47,165, 56,150, 50, 63,171, 10, 48,179,151,197, 80,200,210, -202, 79,124, 39,240,165,212,232,193, 86, 89,118,254, 61, 59,120,247,230,217,147,143,159,214,118, 78, 15,246,232,242,245,243, 23, - 47, 63,188,125,212,189,183, 21, 31,186,174,151,131, 73, 80,221,162,223,170,140,101,228, 62, 77, 4,118,161, 51,166, 23, 22, 74, - 65,158, 15,119,101, 25, 53,132,154,130,203, 80,131, 65, 1, 68, 25,154,234,146,213, 35, 88, 11, 68, 25, 42,170,154, 56,152,170, -170,186, 69, 61,130,196, 87,211, 29, 51, 50,113,193,230, 86,152, 70,142,154, 79,166,162,127, 78, 33,168, 42,239,226,109, 55, 15, -214,164,181,209,118,132,186,185, 5, 54,133,154, 32,168, 81, 82,102, 49,169,202, 8,122,115,153,150,113,165, 18,141, 78,179,223, - 10,178,209, 78,202,171,102,188,235,105,216, 59,140,251, 29, 36, 43,127, 5,160,235, 74,118,163, 6,130,104,119,187,237,246,216, - 51, 56, 9, 9,151, 32,144, 8, 32, 17, 1,226,128, 4, 7, 14, 92,224,146,191, 64,226,107,184,113,226, 3, 56,241, 5,156, 17, - 92,217, 36,144, 34,144,128, 32, 8,160,100,200,216, 30,175,211,110,170,170,123,150, 44, 72,115,152,163,213, 75,117,213,171, 87, -239,201,147, 36, 83,166,248, 59,157,126,138, 75, 8,246, 41, 30,216, 82,218,102, 67, 54, 16, 6,158,163,118, 77, 8, 69,229,100, -138,230, 79,189,196, 80,224,132, 65,182,230, 41,238,135, 18,189,156,242,118,136, 80, 15, 84,165,248,224, 98,143,137, 56,151, 22, - 80, 22,214,203, 76,178,128, 68,144,208,193, 38, 64, 10, 14, 87, 86, 58, 83, 56, 77,255, 70,119, 62,133,121,168, 24, 6,129,146, - 19,172, 49, 56,150,195,100,177,208, 9,215, 46, 63, 68,115,129, 10, 35,152, 80,202, 64,172, 35, 12, 59,146,190, 18,165, 13,167, -243,240,142,186,132,185, 63, 49,193, 44, 16, 48, 83, 27, 39,233,113,115,226,211,221, 49, 39, 88, 15, 43, 32, 88, 95, 45,141,209, -239, 13,193, 41, 78, 83,191,180, 78,172,239,203, 75,171,170, 31,123,163,172, 78,107, 13,121,110, 32,121,228,123,177, 52,144,113, -247,148, 84, 72, 33,231, 37,118, 94, 41, 1,163,192,136,206,215,116,107, 27, 58,183,218,166, 19,134, 53,228,158, 41, 16,253,229, - 89, 67,208, 77,221, 88,183,251,154,161,182, 39,108,216,198,122,143,235, 64,111, 31, 20,104, 28,138,176, 76,196,228,122, 24, 24, - 95,127, 41,234, 82,227, 90,143,171,246,251,110, 49,136,195, 36,150,185,105, 85,205,107, 97, 98, 40,115, 16, 4, 67, 46,252,152, - 52, 62,149,199, 14,234,110,133,139,170,129, 98,217,205,224,105,234,253, 22, 85, 55, 8,189,107, 27,252,205,103, 8,236, 72,232, -236,108,211,128,102, 47, 59,210,153,236, 28, 13,176, 67, 68,242,168,186, 30,183,179,118,221, 97,112,115,102,233, 62, 83, 1,165, -202,119,129, 24,101,236,184,154,131, 91,224,160,158,238, 47, 15,243,189,162,202, 35, 21,237, 12,119, 80,151,131,146, 42,248,206, -170, 41,140,243,154,154,143, 11,226,190, 65,192, 36,155, 14,228,101,213,249,234, 96,109,152, 15,233,121,246,238,108,222,126,241, -225, 37, 53, 56, 17,137, 28, 87, 35,120, 30, 32, 13,239,133,253, 12,246, 87, 59,119, 45, 27,220, 5, 81,200, 28, 49,153,155,186, -109,222,127,123, 7,219,145, 22, 35,120,164,165,224, 51,254,177,176,154, 82, 86, 35, 38, 76,198, 85,202, 28, 21,207,115, 93, 8, -219,145,112,127,102, 29,185,185,163,131,189,171,112,101,160, 24,178, 66,164,228, 57,131, 55, 8,142, 68, 18, 37, 41,182,184, 33, -122,232, 40,228, 69,215,194,151,193, 97,136, 49,245, 87,105,251,243,245,126,115,247,236,173,167,127,216,238, 62, 27, 5, 76,157, - 97,231, 18,118,243, 58,187,199,217,253,217,234,235, 67, 14, 6, 43, 87,216,131, 45,182,185,205,222,127, 98,123,127,253,180, 88, -203, 74,150, 52,108,121,194,178, 20, 74,233,243,233, 24,109, 0,225,215,171,181, 8,227,178,122,123, 53,220,122,248,234,209,246, -199,231, 23, 54, 46,250, 55, 46, 63,123,252,228,107,246, 99,169,151,180,228, 22, 97,105, 76,214,136, 9,222,185,200,199,198,152, - 66,250, 28,150, 40, 16,177, 81,142,144,224, 8, 21, 68,167,122,201,175,209,111, 44,170, 22,198, 34, 92,150, 78,198, 16,164, 0, - 99,141,240,166, 73,241, 20,140, 99,243, 65,211,121, 79,178,104, 75,162,222,234, 35,253, 51,116,134,241,195, 64,202,172,202,197, -127, 18,117,115,108, 22, 86, 56, 17, 27,207,184,247, 73, 8,227,202, 26,162, 29,114,231,153,128, 33, 85, 41, 47, 36, 6, 10, 92, -127, 76,132, 42, 83,210,106,192, 1,161,185, 91,198, 75, 59, 8,189,168, 89, 51,101,242,232, 5,228,209,176, 99, 76,250, 99,201, -230, 63, 1,248, 58,151, 21, 39,130, 40, 12, 87, 85, 87, 95,146,134,100,112,198, 11, 14, 56,130,139,128, 6, 21, 92,136, 43,223, -192,133, 15,224,202,119,240, 1,124, 11,223,198,133, 43, 69,241,130, 59,147,128,136,206, 48,104, 98, 58, 73,119, 87, 87,149,245, -159,170,206,164,101,116, 55, 67, 72, 72, 58,169,211,231,242,159,239,151,221,197,204, 93, 89,100,224,188,135, 1, 43,227,185,232, - 55,214,163, 0, 3,173, 1,160, 47, 43, 26,232, 79,168, 43, 68,162,251,200, 72,218, 12,247,147, 77,240, 6,253, 47, 85, 89,162, - 12,208, 1,213,173,193,108,195, 49, 95,245, 84,115, 56, 85, 32, 94,129, 10,224,254,116,103,186,138, 48,244, 43, 97, 2,217,200, - 72,246,180,238, 99,177, 27,175,158, 9, 81,161, 15, 67,186, 67,138,234,226, 12,146,195,189,221,131,217,110, 56, 17,190,152,218, - 50, 25,161,180, 60, 79, 10,226,125,119,167, 1, 19,156,119,232,160,195,252, 64,213,155, 74,111,218, 57, 9,198,164,146,251,182, - 31,227,127, 47,208,120,215,129,246, 26,186,234,216,106,120, 30,121,202,110,200,199, 40,196, 51,190,151,203, 52, 21,223,231,170, - 79, 81,170,151,136,253, 62, 39, 66, 15,191,136,153,165,165,205, 23,235, 62,105,165,108,217, 80,146,163,129,246,117, 15, 84, 45, -119, 11, 11,118,198,110, 72,118, 11, 5,142, 1,215, 85, 99, 6,204,127, 53,214, 3, 0, 61,219,192, 20, 90, 76,138,219, 71,195, -241, 97, 62,159,234, 5,211, 57,139,174,196,201,245, 75,233,236,247,186,166, 25, 60,176, 51,107, 59, 92,214,199, 39,171, 60,135, -234,198,189,179, 92,160,128, 40,149,201, 34, 92, 53, 77, 4,214,134,186, 21,181, 48,184,169,187,111, 65, 67,216, 35, 13, 75, 98, - 23, 58,113,172,134, 61,126,239, 70,242,118, 82,171, 70,248, 4, 21, 53, 66,208, 32,129, 3,234,254, 81,196,199,240,151,144,242, -131,148,120, 29,103,122,210,168,139,118, 50,161,148, 52,237, 16,164, 99,172, 67,146, 61,124, 33,145, 13,201, 59, 14,182,128,103, -155,169, 55,130, 22, 0, 16,123, 53,150, 53, 92,157, 41,133,213,214,238,238,243,133, 13, 13, 10, 19, 21,124,141,249,154,158,232, - 31, 62, 93,254, 52, 8,205,180,233, 74,166,222,149, 42,115, 23,220, 55,115, 41, 19, 84,240, 97, 68,102,201,150,188, 51,193,106, -165,151, 98,124,116,231,253,236, 93,144,193,111,239, 80, 45,150, 2,206,130,145,224,219,118,109,248, 64,161, 58, 17,228, 93, 66, - 85,165,143,240,156,250,202,144,123, 96, 60, 71,101,244,160,223,119,249,123, 81,174,168, 19,233,162, 97, 54, 47, 23,244, 92,119, -160,244,126, 62, 56, 93, 46, 82, 9,179,226,210,232,203,189,228,219,166,126, 36, 31,142,196,222,213,154,189,156,178,207, 61, 86, -221,100,211,140,125, 33, 90,112, 77,237, 59,176,106, 34, 84,123, 99, 6,137,141, 87,238,186,220,252,254,136, 61, 24,209,225,217, - 94, 68, 67,124,155,130,114,138, 21, 25,135,156, 68,147, 15,183,190,190,121, 60, 59,254,241,233,217,139,107,119,101,182, 84,207, -159, 60,125,245,241,245, 97, 54, 84,160,131,171, 24, 89, 99,156,112,236,185,164,192,181,185, 34, 61, 86,158, 78, 72,141, 61,137, - 69, 35,141,178,198,138,162, 92, 22,101,225,199,129, 30, 4, 70, 55,105,223, 33, 39, 24,184,166,230,155,135, 4,113,159,215,243, -214,178, 45,248,104,208,221, 96,107, 92,106, 2,142,226,188,114, 60, 7,138,185,248, 39,116,112,103, 89,210,116,182, 94,194,239, -147,250, 50,220,171,201,169,178,148,200, 79,184, 28,100, 23,246,210,131, 68,196,101, 93, 21,205,186,106, 84, 12, 29, 73,211,139, -212, 90,175, 42,189,242, 84,115, 50, 58,183,108, 27, 35,121,231,109,240,115,210,118,251, 31,184,241, 31, 1,248,186,186,222,166, - 97, 40,234,196,137,155,172, 99, 3,105,218,196, 3,154,216, 38,222, 16, 47,252, 4,254, 39,127, 0,241,202,127,224,137, 15, 9, -134,166,105, 15,160, 33, 13,214,181, 93,218, 38,177, 99,115,207,189,246, 84,198,152, 84,173, 90, 21,181, 81, 98,223, 28, 31,159, -123, 78,113,151,114, 70,118,231,197, 4, 24,103, 73, 31,208, 61,112,140,132,140,198,196,166,139,104,242, 17, 63, 1, 8,214,105, -200,122,252,224,114, 7,165, 5, 32,174,231,179,243,134,245,148, 62,198,152,101,137,156,194, 26,114,224,200,177,130,215,158,108, - 12, 15, 3, 66, 11,220,131,242, 77,133,219, 0, 52, 13,208,141,114,152, 83, 5,244,108,230,125,199,185, 63,165, 13,190,130,179, - 43,129,203,140, 22,113, 69,166,157,124,117,200,227,207, 4,149,218,169, 92,234,219,115, 92,132,203,192, 37, 62,227, 94,240,217, - 48,245,129, 93, 94,147,108,134, 94,215,139,137,226, 72,232,228, 35,132, 9,158,108,197,194, 45,135,247,212, 66,117,211,224, 38, -107, 52, 31,228, 84,248,217, 94,136, 56,146, 70,116, 30,174, 26,187, 77, 40, 42,135,252, 98,231, 65,185,181, 81, 90,216, 50,133, -229, 0, 35,135, 14,126,155,184,135,163, 2, 21,130, 46,241,194,178,243,127,240,120, 86,242, 70,207, 10, 97, 41,209,205, 74,224, -220,194,241, 95, 43,155, 69,145,235,112,108, 1,251, 99,238,142, 63, 95,238, 85,121, 93,102, 6,252,101,104,180,123,127,209, 78, - 90, 63, 75, 22,240, 84,232,171,107, 95, 79,236,190, 6,168, 32, 48, 4, 89, 62, 80,149,106,122,180, 39,214,236,236,213, 6,194, -164,250,124,128,126,230,209, 72, 61,220, 8, 51,171, 22, 61,253,171, 43,170, 29,160,221,195,184,206,159, 31, 20, 31, 79, 17,129, - 30, 52, 46, 2,179,161,216, 98, 25, 2,136,233,178,208, 8,191,141,116,115, 86, 22,101,207, 25,108,183, 88,205,176,214, 26, 24, -254,146,239,230, 49, 81, 52, 91,147,120, 9, 91,196, 19,118,182,154, 23,241, 24,159,197, 21, 3,184,103,116,191,201,232, 20,232, - 44,158,251, 56, 70,215,102,180,106, 87, 42,246,169,102, 4, 30, 61, 28, 31,240,213,199,223,191, 33, 48, 85,118,100, 65, 21,202, - 46, 28,194,241,202, 28,138, 45,209,127,154,204, 72,127,220,154, 22, 63,134, 51,211,167,159,206, 62,228,162,180, 18,211, 61, 42, -156, 62, 54,158,107, 38,107,180,116, 56,201,212, 99,125,103,164,158,248,152, 10, 22,149,109, 52, 99,227, 33,122,184,119, 48,109, - 46,151, 16, 97, 9,193, 28, 44,199,185,202,195,131,214, 13, 58,201,125,105,148,247,182, 27,151, 69,231, 58, 24,200,232,209,116, -222,108,142,243, 23,187,251, 52, 39,166,175,213,203, 67,117, 94,171,235, 47,170, 63, 82,205, 51,213,141, 99,222,203, 69,242, 44, - 57, 81,234, 77, 74,118, 20,220, 32,110,210,226,135,177, 9,155,120,117,184,165, 94,109,113,180,239, 79,245,235, 68,157,158,169, -221,223,106,100, 86,111,175,222, 13,167, 75,253,181, 11,174,233,251,197,211, 39, 71,214, 89, 66,121,142,239, 4, 93,201, 13, 51, -190,106,231,156,154,237, 59,201,230, 73, 81, 76, 94,130,144, 80,136, 49, 14, 99, 33,102, 98,195,152, 10,193,247,145, 50, 17, 0, -239, 19,146,143,111,209,144, 93,168,193, 88,214,253, 90,115,202, 61, 29,167,217,108, 57, 25,232, 28,255,235, 53,171,254,237,249, - 79,154, 20,222,176,148, 7, 47,138,123, 33, 52,245,182,217,217,173, 31,211, 96, 71, 0,157,109, 65,127, 14, 61, 26, 86, 85,196, -111, 52,213, 12,246, 53,219, 65,217,180,177,151,251, 20, 25,125,163, 27,190,195,233, 88,133,251,109,235,255, 8, 64,216,181,182, - 54, 17, 68,209,153,217,157,236, 38,186,166,248,104,227, 23, 69, 84, 16, 4, 63,249, 93,252,237, 34,136,127,192, 39,130, 72, 89, - 13,133, 24, 99,246, 49,143, 29,239,107, 98,138, 20,161,148, 66, 10,233, 54,115,239,156,123,239, 57,247, 64,210, 48,151,183,137, - 17, 16,214, 98,159, 45,154, 38, 3,233,181, 49,172, 95, 69,190, 34,142,118,104,253, 58,188, 4,184, 96, 86,195, 87, 89, 1, 22, - 67, 66, 59, 75,220,104,110,204,145, 89,232,108, 71, 39,181, 54, 62, 16,203,109,225, 45,176,171,200,239,171,181,135,154, 0,199, - 65, 56,248,174,169, 70,195, 44,139, 67, 39,180,154,196,222, 38,174,173, 52,150,214,113, 64, 61, 3,135,218, 77, 30, 34,176,221, -127,247,137,188, 65, 48,227,139,127, 83,190,189, 15,251,211,100, 5,217, 12, 83,188, 1, 4, 1,133,210, 62,254, 82, 82,100, 31, - 4,171,124,249,230, 62, 21,113, 34,116,190,164,165,162,209, 58,203,116,245,113, 44, 50, 47,144,127, 96,194, 59, 50,138, 89,136, -146,212,201, 92, 3, 28, 94,148,122,110, 11, 91,219,107,139, 18,192,215,249,102, 60,223,244,237,214,175,119,222, 13,126,116, 16, - 1,113,132,167,242,120,121,205, 13,228, 71, 93, 25,213,204, 52, 64,254, 10, 27, 38,200,255,130,103,231, 21,190,154, 90, 46, 29, - 69,221,142, 82, 74,153,147,123,159,241, 5,188,186, 14,169,157, 18, 96,209,117, 76,109,136,109, 64,222,164,203, 8,165, 36,235, -152,198, 26,171,211,118, 31,123, 63, 57,242,193,245, 33, 97,214,158,100,107, 69,173,211,188, 72, 85, 65,146, 87,212, 67,169, 91, - 53,166,163, 1,176,114, 84, 77, 13,159,145,234, 92, 26, 39,189, 58, 49, 23,219,136,170,123,173,109,113,157, 45,252,232, 56,193, - 1,177,203,197, 77,226,252,225,191,202, 83,138,148,236,246, 87,113, 65, 44,148, 2, 65,231, 36,222,126, 6, 42,116,239, 7,130, -196, 66,216, 85,236,229,136,231,135,177, 42, 98,220, 34, 49, 1,145,101, 71,138,220,239,208,224,244,108,185, 66, 12, 40, 68, 71, -170,168, 12, 89, 62,166,224,224, 94,149,161, 11,126,210,112,210, 40,137,243, 7,143,127, 80,101,235, 0,232,197,192,229, 84,141, - 97,160,141,246, 56,200,227,166, 57,186,136,148, 21,247,231,142,158, 65,190,157, 46, 87,131,239,120, 20, 3, 55,135, 34, 84, 97, - 50, 4, 49,148,227, 81, 86,194, 22,178,134, 91,240,134,163,134,227,104, 86,204, 72,176,170,140, 44,214, 80, 46,140, 61,100,124, - 37,106, 0, 56, 17, 46,132,130, 58,147,133, 62, 50,167,162,180,184,235,119, 1, 69,194,134,150,202, 96,210,113,209,108,253,248, -252,229,179, 27,143,213,230,131,178,239,212,221,207,202,188, 87,167, 95,213,157,159,234,199,133, 26, 44, 38,250, 94, 35, 34, 63, -152,208,150,116,210,234, 76,190, 58,112,248,224,119, 54,223, 84,251, 86,125,124, 61,149,159,252,195,206, 60, 93,232, 39, 27,245, -226,254,163, 87, 95,222,232,194, 25,168,232,235, 10,202,192,104,109, 52, 40,131,138,228,204, 14,103,108, 81, 55,221,208,241,102, -123,233,181, 37, 78,109,162, 4,156,166,220,103, 17, 34, 28,134, 54, 0, 21,220,187, 57,201,210,245,196,202,243, 60,177, 76, 98, - 73, 47,237, 27, 89, 18,250,191, 45, 2,151,183,177, 19,117,105,186,106,120,153,185, 21,250,210,146, 46, 34, 69,242, 57, 68, 17, -126,137,253, 22,204,124,183,231,103,247,154, 7, 85,105,135,224,246,190,255, 29, 6,100,127,160,195, 29, 68,185,131, 80,115, 56, -171,114, 81, 54,140, 20, 44,155,213,226,204,141, 36,171,202,206, 35,237,245,249,167,219,126, 21,143,231, 96,219,163,254, 8,192, -214,181,243, 54, 17, 4,225,221,189,243, 61,124,182, 0, 11, 9, 9, 69, 9, 21,146, 59, 68, 75,207,111,224,199,240,163,144, 40, -144,104, 40,104, 64, 2, 65, 3, 5,169, 40, 0, 41, 1, 18,236,139,239,177,187,115,204, 99,247,124, 81,220,166,200, 89, 62,239, -236, 55, 51,223,227,144, 63,129, 30,137, 62, 33, 46, 51,193,235,133,117, 70,218, 80, 94, 26,137, 81, 65,130,128,134,196,179,244, -137,183, 61, 29, 64,169,102, 96,156,193,219, 9, 58, 9, 41,178, 68, 39,152,202,212,133,158,206,147, 86,105,243,104, 76, 63,164, -156,224,144,171,196,145,249, 96, 72, 51, 68,144,142, 15,203,104, 60,106, 28,205, 84, 92,166,243, 85, 94, 54,236, 93, 78,125, 61, -107, 50, 47, 59,172, 66,110, 74, 95,156,118, 36, 38,172,215, 98, 36, 16, 13, 27,128, 41, 61, 25, 21,119,154, 31, 65, 20,184, 70, -187, 64, 61, 46, 87,195,247, 16, 48,251,254,149, 14,195,117,231,178, 81,207,200,195, 88, 49,118,229,250, 62,168,162,168, 0,224, - 86,214, 44,211, 97, 53, 51,139,138, 76,214, 46, 26,219, 52,126,219,185,173, 29, 82,214,170, 32,168,163, 51,100, 84, 99,105,176, - 78,176, 26,127,206, 25,214,116,211, 83, 70, 26,147, 54,184, 48,229, 92, 0, 1, 2, 59,190,137, 33,124, 18,204,212,237,151,195, - 33, 66,112,252, 17,216, 27, 28, 94, 31, 15, 42, 2,163,186,241,127, 52,126,177,248,233,249, 21,240, 83,176,142,231, 41, 34, 85, - 18, 55,108,189,190, 93, 26,124,250, 29, 74,252, 80,117, 11,136,235,201, 89, 30, 75,124,239, 55, 13, 22, 56, 90,154, 59,167,243, - 50,121,178, 54,111,191,116, 68,130, 85, 29,105,216, 82,242, 36, 33,171, 43,223,213,109, 47,238, 52,180, 0,129,125,142,189,158, -118,145,148,220, 96,125,212,108,227,135,169,187,141,240, 38, 22,249,188,105,119,114,201,138, 51,134, 4, 91,107,222, 64,174,143, - 30,126,251,121, 58, 26, 12, 32,250, 0, 58, 79,142,213,170,147, 46,139,236,236, 61, 23,220, 36, 67, 96,158,205,255, 97,211,198, - 92,125,186,114, 88, 93, 76, 12, 37,147,246,131, 45,243,146, 76,222,193,181,189, 51, 33,161, 41,225,134,142,103,200, 0, 29,249, - 6, 75,168,172, 12, 87, 64, 56,112,120, 73, 94,108,206,165,228,206, 8,253, 83, 67,142,181, 41, 97, 25,155,196,181,178,102, 80, -140,229,201, 68, 79, 49,182,149,158, 97,158, 21, 77,223, 33, 0, 79,204, 56, 47, 37,195,177,214,182,164,114, 99,207, 84,109,194, -248, 75,136,155,204, 55, 50,113,220,168, 69, 83,163,133,157, 65,139, 41,188, 44,125,110,178, 79,155,143, 47, 95,173,159, 62,127, -124,252, 76, 29,127, 87,234,181,122,241, 70,125,126,199, 5, 29,255,225, 82, 21, 11,181, 93,169,234, 72,149, 39,106,254, 64,109, - 23,216,140,171, 75,226,232,168, 26, 98,200,195,111,229,206,232, 13,250, 83,223,157, 67,105,251, 51,139,136, 68, 61,186,231,127, -125,205,222,255,248, 80, 44,138, 11, 60,153,120, 80,161,238,237,206, 98, 33,243,140,224, 7, 9,224, 83,127, 99,194,173, 30, 3, - 59, 98, 14,214, 16, 0,119,152,174,232,216,107, 14,180,157,186, 18, 54,179,144,219,165, 75,138, 65,228, 49,164, 52,112, 18, 14, -227, 92,125,216, 44,106,111,157, 46, 70,217,122,162,111,154, 78,114, 42, 78, 13,243, 33,248, 73,200,144, 44,176,166,251,222,240, -218,146,239,115,173,151,217,221,251,213, 73,166, 19, 68,159, 51,163,171, 36, 33,133,223,224,137,204,237,118,150, 24, 31,180,161, -132,184, 52,205,153,205, 0,244,247,240, 60, 74,254,179, 0,129, 22,127,205,118,239,198, 74, 32, 38,195, 77,124, 11,254, 11,192, -215,181,172, 56, 17, 68,209, 91,213,221,121,244, 36, 32,153,141, 11, 5, 9,130,139,193,141,130,184,213,189, 48,255, 34,248, 29, -238,252, 6, 23, 46,252, 5,151,226, 40,130,194,160,140, 12,194, 56, 34, 51,147, 76, 38,253, 72,167,186,202,123,110, 85,119, 18, -141,146, 93,210, 36,157,238,234, 91,167,110,157, 71, 76,127,187,164, 55, 45,154, 6,116,187, 52, 26,118, 99, 6, 29, 12,166,150, - 69, 93,138,255,145,145,129, 3,208, 80,218, 94, 79,199,189, 56, 77,240,164, 11, 27, 16,121, 29,181,133,138,180, 50,158, 75,222, - 88,120, 99,132,224,107,163,196, 3, 96, 73, 61, 22,130, 63,197,112, 95,142,186, 20,204, 73, 36,168,140,209,159,149, 14,137,245, - 84, 55,126,229,149,241, 45,204, 8,226, 87,116, 61, 39,139,204,109,154,247,251,140,189, 90,173, 41, 1, 2, 10, 80,141, 28, 13, -151,213,173,172,117,218,219, 29, 4, 76, 77,135, 42,140,188,166,178, 7, 75, 41,181, 25,207,189, 86,157, 92, 27,239,167, 67, 28, - 28,196,156,187, 61,186,158, 18, 8,206, 9, 40,201,147,204, 76, 11, 99,106,151,129,185,161, 96,208,167,113, 54,151, 75,180, 95, -178, 26, 53, 43,103,244,203,255,174, 86, 85, 84,227, 29,173,250, 17,163, 93,144, 38,249, 99,158,238,231,146,200, 81, 73, 17,247, - 38,128,173, 11,172,110,252, 21,116, 99, 17,248,159, 69,156,110,192,254, 89, 14, 27, 25,139, 93, 56,174,218,146,220, 78, 42, 19, -122, 99, 37,107, 28,190,212,211,194, 13, 59,122,167,163, 6, 49,226, 91,178,165,235, 56, 59,232,106,177, 62, 67,144, 8,223, 27, - 30,140,121, 97, 71, 35,253,248,110,242,246,235,112, 86,206,251,194,241, 88,168, 90,200, 2, 74,204,126,101, 77, 36, 13, 5,153, - 76, 4, 99,217,224, 24, 99,255,121,170, 80,216, 21, 85,193,227, 46,237,166, 14, 68,251, 74,251, 72,107, 29,114, 21,142, 78,143, -180,215,122,202, 67,105,144,228,136,174,109, 48, 41, 64,239,214,201,168,131, 62,163,147, 0, 74,207,139,171,156,207, 78,121,241, - 56,238,124,172, 19, 35,136, 9,237,163,202, 76,231, 23,126, 33, 40, 73,145, 8, 11, 20, 49, 17,250,134, 60,217,192,251,108, 81, -182, 81, 97,128,112, 60,150, 73,100,103, 88, 61,160, 57,197, 7,167, 73, 58, 23, 67,130, 72, 56, 57,194, 72,194, 50, 81,163, 75, - 25, 75, 20, 37,241,133,226,211, 44, 23,133,108,196,169,209, 96,247,231,229,169, 82,212,152,192,123, 65,157,242,155,201,178, 37, -160, 37, 19, 69,215, 74, 52, 95, 90,108, 49, 35,219,236, 88, 68,155,230,216, 62,201,152,231,181,197, 56,186,253,100,124,239,195, - 27,250,248,218,220,218,139,239, 60,160,253,135,180,159, 80,249,141, 14,222,211,171, 67, 58, 56,166, 31,159,240,144,236, 93,163, -167,247,233,209,152, 14,191,211,243,207,244,165,160, 89,129,235,217,139,169,159,208,216,209, 64, 83,150, 69,166,180, 39,230,252, -152,102, 47, 39,239, 50,115,242, 98,252,236,138,126, 93,152, 51,199,181, 2,198,240,208,131,161,168, 27,227,105,203,232, 74,129, -130,228, 53, 62,174,246,197,221,110, 56,166,139,181,154,228,230,250,152,179,214,208, 81,208, 58,200, 50,158,230,226,213,167,222, -230,129, 66,136, 91, 16, 48,169,237,122, 36,183,106,153,111,203,117,178, 43,199, 46,213,162,160,181, 3, 69,170, 26,252,239, 84, - 8, 92,106,251, 51,222,202, 5, 75,235, 78,212,191,185,115, 3,129,115,182,158,150, 92,183,160,206,201, 22, 89,110,242,220, 21, - 66, 92, 48, 75,104,207,133, 66, 17,126,153, 17, 93,135,191,211, 82, 59,121, 40,251,103,228,167,219, 36,143,120,110,135,221,106, -110,248, 91, 0,190,206, 37,183,137, 32, 8,195,213,143,153,248, 41,203, 4, 9,197,145,188,128, 45, 8,178,207, 18,229, 8,172, -184, 12,103,225, 0,236,184, 2, 44,216,177, 96,153, 21, 81, 4,177, 19, 63,198, 30,207, 76, 79,211,127, 85,207,216, 49, 8,175, - 60,150, 37,219,114, 79,117,117,213, 95,223,111,143,126,158,143,104,180, 54,213, 65,242, 62,176,131,176,241,230,229, 2,210,114, - 96, 54,234,214, 56,211,240,241,176,212,102, 87, 21,169,237, 12,147,158,193,152, 82, 18,178,241,240,202,198,131, 59,132,142, 16, -168,208, 44, 16, 68, 67, 78,102,183,107,148,157, 28, 43, 35,189,170, 26, 55,149, 36,193,226,175, 92, 17,150,239, 9, 76,135,116, - 71,217,112, 31, 38,198,246, 77, 55,188,109,199, 67,164,125,112,178,204,198,229, 4,252,161, 51,209,132,209,183,192,175, 6,151, -223, 84,103,218,174,115,228, 54, 52,152, 51,181, 23,178, 55,247,119, 60,103,155, 24,127,226, 32, 77,147, 64,121,173, 15,212,239, -245,158, 92,182,255, 28,214,140,180,198, 0,227, 46, 61,235,234,142,209,139,220,221,204, 86, 33,111, 92, 21,168,101,151,162, 73, - 87,116, 95,178, 77, 18,223,145, 33,170,110,124, 92, 83, 16, 17, 85,116, 10, 97, 42,120, 0, 91,222, 82,161,102,129,107, 77,164, -130, 72, 97, 52,111,254, 62, 73, 58, 82,225,137, 52,151,234,191,241, 93, 70,162, 51, 86, 18,208, 14,228,247,165,161,142,198,174, -211,179, 94, 57,189, 6,205, 45, 92,250, 20,221, 34,218, 22, 56, 98,169, 4,114,154, 10,182,174,186,116, 33,235,208, 73, 2, 45, -208, 18,126, 21,168,169,253, 90,212,211, 39,230,245,243,236,203, 15,231,234, 29,116,247, 33,186, 50, 58,177,146, 49, 61,101, 67, -162, 96,180,216, 22,169, 84,155,126,111, 56,223, 60,112,217,252, 31, 26, 73, 45,181, 9,195,102, 34,158,192,145,135,120, 28,221, -107,205, 71, 75, 45, 24,140, 72,253,110,236,199, 28, 7,119, 31,227, 34, 3,173,241, 44,124,238,168, 55,154,173,230, 18,112, 73, -237,133,198,232, 3,213,209, 98, 34,220,147,251,145, 42,175, 79,216, 60, 8,242, 6, 62, 20,158,143,207,230,171,123, 20,143,162, -144, 86,178,119, 47,221,166,168,103,142,186,118,207,112, 18, 37,177, 42, 86,247,140, 22,171, 53, 23, 1, 7,148,237,182, 33,103, - 15,171, 29, 85, 70,239,127, 47,111, 69, 97,171,116, 60, 76, 43,223,218, 20,200,254,136, 33,184, 52, 53, 48,179, 52, 44,251,146, - 34,166,143,156,107,223,142,215, 75, 67, 20,123, 1,234,163,111,245, 21,205,232,226, 21,217,202,254,188,243,159,215, 64, 47,233, - 11,154,188,163,222, 21,189,223,210,135,148,153,146,119, 52,156, 16,189, 96, 59,144,111,116,249,145, 78,111,232,161,160, 50, 71, - 72,182,150,166,138,206, 7,100,115,154,212,201,155,241,116,244,148,104,244, 50, 44,199,239,215,183,159,174,191,102, 89, 6,156, - 80,205, 19, 41,174, 44,145,109, 99,254, 72,192,246,136,196,204,158,142, 0,215, 24,163, 27,229,186,156,128,181, 29,118,134, 51, -244,195,218,201, 32,233,107,224,162,155,246,243,146, 69,188,113, 86, 40, 10,251,124,203,253,171, 15,149, 38,106,223, 11,117, 17, -206,210,166,193,135,132, 23, 17,230,169,191, 38,155,218, 98,140,122, 36,156,137, 95,149, 79, 98, 94,202,218,220,182, 55,103,189, -105,215,118,115, 87, 20,197, 38,175,214,219, 34,203,202, 13,102, 48,195,178, 66,207, 11, 86,101,146, 7,180, 96, 46,214, 70, 87, -254,160, 12,225, 31,149,250,143,165,247, 18,241,212,145,136,242,224,241, 71, 0,186,206,101,183,137, 32,136,162,213,243,176, 61, -227, 71, 18,136,147,176, 0, 34,196, 6, 20, 62,130,255, 99,207,255,192,146, 21, 11,132,132, 20, 33, 68,136, 44, 5,226,241,216, -238,121,117, 79,209, 85,221,243,112, 6,162, 44, 99, 43,242,180,171,187,111,221,186, 39, 24, 28,222,189,166,133,229,122,250,113, - 48, 45,148,220, 87,123,158,166,180,252, 90,158,184,113,132, 35,134, 94,107, 10, 2,164,198, 28, 97, 97, 71,214,237,158,147, 42, -235,148, 53,114, 23,120, 45,141, 28,155,102, 38,189,163,166, 96, 95,243, 38,116, 94, 10, 25,161, 77, 88,116, 97, 99,203,168,113, - 52, 11, 72,119, 14, 8, 56,169,142,198,177,185, 24,155,213,178,171,234, 69,104,190, 20,193,212,243,126, 84,169, 53,187,138,102, -160, 29, 7,105,142,216, 85, 51,191,135, 51,236,209, 54,154,226,142, 86,250, 4,199, 65, 19,173, 91,212, 13,126, 57,131, 36, 95, -194,133,203,115,182, 60,247, 86,160,135, 46, 51, 37, 30,225,179,133,152,120,240, 39,201,111,182, 42,227,224,115, 75, 73,155,240, - 11, 54,205,249,159,140, 40, 77,189, 86, 13, 39,207,148,163,140,241,225, 62,165,254,218, 15,132,205, 64,252,151,101,243,207,235, - 67,213, 37,239, 61,108, 49, 8,247,127,240,163, 26,141,181,224,221, 37, 2, 72, 52, 60,170, 49, 66, 94,125, 2, 39,128,210,220, - 51,180, 39, 25,255,100,170,252, 40,168, 99, 45,164,192, 74,120,143, 35, 90,161,133,134,185, 79, 86, 21, 27, 11, 97,174,104,185, -130,219, 13,158,204,188,183,111, 70, 31,191,168, 66, 7, 1, 73,227,252, 91,211,220,242,242,248,201,234,254,118, 58, 57, 74,179, -132,221,228,245, 54, 79,105, 95,228, 64, 45,135, 43,118,235,158,122,252,110, 4, 1, 45,184,155,111,193,238, 50,236,185,217, 78, - 97,115, 14,201,168,110, 14, 10, 62, 48, 11,150,117,171, 54, 41, 15,153,102,206, 97, 82,184,222,173,125,209,201,213, 77,220, 16, -109, 23,241, 40,150,133, 52, 7,151, 40,156, 73,115, 74, 17,206,146,152, 87,133,197, 97,120,108, 69, 79,247,155, 40, 28,203,114, -231,187, 29, 73,116, 24,176,218,165, 66, 91,191,158,223, 36, 11,136,182, 57,108, 91, 7, 86, 3,180,106, 11, 91,110,204,201,134, -175,166,244,220,230,147, 89, 65, 25,236, 21,180,130, 62, 12, 92,209,132, 13,122,126,243,251,103,155,221,215, 89, 57,186,231,206, -244, 84,100,221, 1, 41,108,238,197,203, 11,249, 11,190,190,215,209,165,191,188, 84,242, 56,188, 15,224,110, 5, 31, 62, 19,116, - 23, 94,153, 85, 7,250, 28,234, 51, 50,198, 92,229,180, 18,206,174,224,226, 29,188, 54, 53,105, 15,167, 18, 84, 73, 52,219,217, - 26,198, 11,184, 76,224,233, 9, 57,103,112, 5,215,223,224,211,119, 60, 79,231, 75,255,244,206,187, 46, 43,115, 34, 84, 21,113, - 10, 52,219, 38,168,174,207,227,133,249, 36,101,182,181, 30, 85,103,103,180, 45, 82,167,197,187, 33, 79,218, 25,178,164,161,164, - 58, 0, 45,167,229,209, 19,212,213,182,174,107,199,219,112, 40, 84,196,126, 95,114,112,236,173, 93, 90, 98,119,252, 65,241,144, -180,164,186,239,206,193,216, 42,192,255, 98, 94, 60,215, 63, 66, 22,105, 88, 91,155,134,139,121, 48,213,117, 41,139, 52,201,210, -125,181,163,202,142, 69, 73, 62, 56,205,101, 93, 91,213,161,151, 7, 9,220,113, 96,221,155,234,129, 66,248, 7,144,164, 55, 47, -130,226,144,152, 48,204,161,249, 43, 0,101,215,210,219, 52, 16,132,247,229, 71,156,186,105, 43, 82, 42, 85, 66, 21, 18, 82,165, - 86, 28,184, 33,129,196,157, 51,226,196, 31,224, 15,242, 7, 42,196, 25, 20, 78, 8, 9,149,240,168,104,201,171, 73,214,241,238, -178, 51,227,245, 3,114, 33,202, 37,142, 18,219,107,107, 60,243,205,124,223, 87,241,155, 90, 38, 30,156,176, 75,159,104, 3,152, -196, 84, 46,115,144,220,116, 6,247, 6,154, 62,181,225, 81,168, 74, 4,142,127, 2,142,217, 87,105, 36,146, 72,160, 63, 25, 36, -232,182,176,229,202,109, 8,221, 70, 51, 98,102,171, 54, 32, 17, 58, 16, 16,113,208,247, 33,157,123,228,230, 97,119, 66,136,190, - 76, 85, 20,247, 68,236,211,155, 65,156,165, 42,219, 75,250, 17,218,205,223, 26, 32, 42, 23,174,208,214,126,184,121, 95,152,245, -178,188,213,165, 94, 1, 50,111, 32,173, 68,116,206, 4,154, 91,235,234, 72,206, 26,145,136,234,172, 67,112,111,122,125, 33,109, - 23,132,178, 58,222,241,248,248,155,151, 81,178,154,216, 92, 45, 58, 12, 90,248,103,209,195, 59,220, 31,226,183,223,122,108,192, - 46,151, 18,234, 20,127,144,227,199, 53,171, 52,186,107, 65,225, 8, 19,240, 2,191,170,233,166,170,133,180,184, 32, 41, 19,225, -198,105,208, 1,116,109, 3,175,255,121,209,213, 73,106,207, 85,124,231,190, 6,199,147,153, 33,125, 59,194,117,233, 73, 62, 76, -101, 12,180, 28, 28, 14,144, 62, 20,130, 6,113, 28,169,157,152,101, 61, 49,209, 92, 91,151,198,190,230,147,154,185, 44,226,119, - 7,114,165,237,219,145,175,200, 64,133,210, 66, 53, 0, 59,201,179,131,171,233, 79,194, 45,241,150,176,177, 76, 4, 82,169,252, -202, 47,244, 12,235,167,142,166, 41, 57,150, 97, 7, 85,161,158, 29, 39, 55, 84, 78,193, 93,146, 24, 23, 63, 59, 62, 31, 93,126, - 68,197, 0, 72, 16, 1,242, 54,133, 37,189, 10, 44,190, 72,184,194,110, 17,118, 14,178, 36,156,157, 30,159,142, 46, 71, 18,135, -226, 9,216,165, 46, 14,150, 17,148,126,115,130,182,209,213,140,172,224, 90,102,191,232, 89,215, 56,254,176, 22,147, 85, 97, 11, - 42, 88,188, 82,243, 64, 86, 26,124,216,100, 21, 20,247, 29,111,236, 7, 42,124,134,162, 8,216, 45, 84,253, 6,148,241,151, 48, - 37, 17, 43, 48,158,142, 66, 43, 2, 31, 57,168,213,135,129,205, 71,214,163,131,163,239, 55,191,164, 76, 87,214, 60,217,127,250, -234,249,107,247,153, 93,188, 99,215,203, 57,223, 21,243,189,164,247, 88,125,186,199,150,135,108,124,159, 93, 99,119, 68,230, 16, -138,228, 14,182,255, 74,182, 65, 83,151,178, 4, 33, 10,163,225, 97,145,125,129, 63, 63,188, 96,195, 31, 11,185,156, 60, 26,176, -103,187,195,161, 73,226, 43, 22,237,179, 23,111, 94,130, 30,145, 89,104, 3, 30,239, 27,179, 6, 83, 86, 11, 74, 18, 62,224, 19, - 74,134,226, 37, 20,220, 45, 69,211,138,190, 95, 13,142,184,134,240,217,176, 26,221,201,240,100, 60,249, 42,156, 90,109,150,129, -199,228, 66,140,119,124,155, 68,140,232, 6,104, 85,207, 20,214,190,109,134,181,248, 5, 44,168,122,253, 43, 72,208, 20,240,172, - 51,213, 10,101, 36,204,204,224, 77,250, 96,247,172, 39,227,169,158, 77,215,147,105, 49,135,233,112, 88, 57, 84,238,192,200,110, - 88, 16,157,111, 28,160, 68,141, 0,251, 98,216, 54,192,170,235,226,192,245, 65,186,110,206,190,133,206,250, 71, 0,190,174, 96, -183,105, 32,136,206,174, 29,187, 78,155, 82, 43, 14, 41,160, 42,167, 34,224,194,137,111,224,111,225,196,141, 27,136, 3, 28, 42, -148, 67, 43, 84, 64, 72,105, 82,154, 82, 39,161,177,149, 56,217,101,103,102,119,157,210,170, 81, 79,105,235, 88,155,221,241,204, -188, 55,239,213,252, 25,142,116,220,115, 15,201,127,130,201, 51,214, 20,220,210, 81,212,166,137,218,166,104, 21, 33, 93,102,107, - 54,104,236,206,245,188,169, 98, 66,213,127,218,193, 43, 66, 8,121,141,150, 20,235, 66, 70,130,156,233,119,104,215,139, 38,206, - 49,255, 34,211, 82,137,238,101, 9,122, 70, 71, 33, 61, 57, 76,174, 55, 95, 45,183, 66,212, 51, 40,215,229,249,245, 80,113,159, - 79,155, 31,220, 39,107,158,138,215,190,187,162, 54,160, 59,233, 49, 17,155, 76, 89, 97, 55, 97, 33,112,247,157, 73, 59, 84, 18, -184,210,152, 73,205,238,215,156,112, 89, 22, 85,192, 97, 93, 58,189, 49,243,201,113,160, 95,117,196,180,168, 78,175, 22, 35,141, -126,123, 91,192,118,152,162, 13, 65, 27,194,125, 8, 99, 8,136, 6,163, 3, 71, 35, 86,158,186,238,182, 28,219, 48,112, 65,201, - 4,181,133,115,168,148, 55, 3,186,188,183, 15,115,255, 75, 57,244,213, 75, 5,104,176,133, 34,233,212,211,193, 54,217,189, 52, -219,147, 48, 94,105,114, 43, 19,202,169,125,175, 96, 59,194,181,174,180,104, 69,146,130, 56,214,219, 73, 3, 37, 39,243, 82, 55, -163,224,240,113, 48, 24,155, 2, 29,245,164, 49, 91, 71,178,249,156,150, 75,112,162,196, 3, 32,230, 24, 32, 65,101,189, 96, 66, -169,118,179,226,212, 80, 55, 23,140,227, 48, 81,168,231,195,157,107,201,195, 19, 28,220, 37,185,205,182,146, 7,231,249,136,250, -209,130,195,171,185,110,186,189,247,252,224,133, 41, 23, 72, 96, 84,109,150,234,183, 1,121, 86, 53, 24, 19, 46,138, 56,153,147, - 72,104,152, 29, 24, 39, 8, 18, 73,246,193,224, 1, 22,167,217,109, 83, 3,225,209,118,110, 26,179,134,148,109,225, 72,150,186, - 2,251,207,108,178, 34,153,106,101,171, 16,164,211,248,144,193,199, 80,250,193, 20,122, 66,217, 63, 32,135, 19,178, 93,197,137, - 86,246,183,164, 85,177, 61, 33, 93, 39, 42, 8,114,104,213,222,237, 76,139,217,110,210,170, 86,235,111,229,143,254,233, 73,239, - 81,239,229,235,189,103, 89,124, 50, 28,189,249,250,254,168,223, 61,251,216, 44, 62, 64,247, 51, 28, 30,193,211,239,208, 29, 64, -113, 12,205, 1,200, 75,120,146, 67, 54,133,253, 25,200, 33,164, 57,180,103,144,253,129,135,103,208, 42,161,251,107,150,253, 29, -164,203,162, 85, 70,213, 4,178,110,179,255, 73,189, 61,126,247, 19,190,152,175,178,194, 33,150, 74,169,133,201,225, 15, 58,189, -201,252,202,166,226, 96, 83,118, 82, 68,227,182,188,246,114,137,218,101,220,118,128,137,147,119,220, 89,216,164,158, 20,249,114, -101,142,252,210, 70,118,122, 95,215,220,112,237,202,104,197, 7, 83,212, 74,221, 54, 91, 86, 30, 90,243,196,136,155,193,221,121, - 59,137,218,156,201, 94,158,238, 93,200,186, 75, 38, 88,199, 69, 58, 55, 73,216,137,210,157, 70,250,123,126,121, 81,142,139,213, - 53, 78,212, 99, 88, 71, 81, 68, 22,202, 93,223, 2,123, 61, 5,207,213,154,193, 93, 15,169,255, 84, 45, 55,111,252,238,179,255, - 79, 0,210,174,101, 53,138, 32,138, 86,117,117, 77,247, 60,122, 28, 99, 38,100, 49, 66, 52, 43, 17, 55,126,128,138,191,230,222, - 47, 16, 68,220,187,116,229,218,128, 11, 23, 17,212,133,160, 4,141, 13,147, 4,157,208,207,170,174,178,238,173, 71,247, 4,116, - 99, 2, 9, 25,102, 38,116,210,125,251,220,115,207, 61,103, 11,191, 71,206,214, 18,198,163, 17,226,247, 17, 77, 35,187, 95,142, -226, 36,237, 58, 24, 29, 40,173, 16, 3, 50, 50,248, 61, 54,200, 29,198,176, 96,244,136, 91, 35,160, 3,130, 69, 25,137, 14, 48, - 16,189, 11, 24,203, 46, 30,193,214, 62,227,120, 11,177,134,156,161,203, 6,187, 27, 6, 33, 53, 6,197,115, 16, 67,242,157,100, -150,241,116,102, 62,227,113,211,129,140,104,194,226, 66,130,100,246,235,230,228,103,241,163, 33, 85, 33, 42,171, 42, 69,240,222, - 89,252,174, 66, 75, 51,176,134, 13,150, 97,182,162,187,140, 42,171,101,176,170, 33, 74,134,251, 38, 44, 56,242,108,119,105,212, -155, 87,249,238,202,122,200, 58,209,247,189,235,250,178,108,191,149, 96, 70, 39, 16,131,223,128,175,108, 66,249,148,177,101,194, -179, 17,195, 77, 84, 82,137,110, 93,214,167,170, 94, 35, 24,151,158, 56, 83, 94, 1,169,131,138,209,159,154,150,187, 79,188, 20, - 50,240,245,255,255, 97, 33,252,204,155, 71, 75,124, 36,245,131, 92,141, 25,176,115,152,252,210, 20,100, 49, 72,211, 39, 81,150, -198,133, 54, 40,158,153,255,144,196,177, 59,112,103,148, 94, 27,211,141, 0,228,187,151,113, 78,212,209, 71, 89,180, 28,183,114, -177, 17,133,123,134, 94, 76,118,215,191,115, 52,233,193,123,126, 63,213,128,191,254, 98,186,123, 94,156, 49,172,198,240,174, 26, - 11, 57, 13,181, 53, 98,142, 60,139,124, 2, 48,177,240,215, 10, 88, 36, 14,226,204,201, 96,106, 96,211, 86,152, 82,224, 96,226, - 63, 66,183, 44,186,215, 62,203,193, 41,144, 35, 52,170, 12,166, 1,254, 23,133,216, 16,236, 22, 80, 89,217, 91, 19, 14,116, 86, -248,114,243,243, 93,240, 10,254,196,252, 33,204,211,172,104, 75,102,143, 5,185,166,216, 81,231,129, 18, 12, 97,106,160,169,182, -238,168,136,250, 9,182,185,192,229,196, 24,139,154, 64,234, 55,176, 58, 73, 60, 50, 85,181,108, 42, 32, 49, 84, 39,236,105, 9, -207,137, 13,150, 80,230,138, 99,124,206,151,130,103, 59,139,131,135,171, 7,247,111,223, 26, 95, 82,178, 34,159,115,242,250,136, -188,249, 78,222,173,201,121, 3, 35,147, 71,251,228,197, 99,178,127, 72,142,143,201,211, 47, 36, 23,176, 3,149,226,220,200,224, -247,106, 35,105, 28,231,167,207,186,250, 61,149,210,244,168,185, 62,185, 73, 86,207, 15, 95,190, 18, 79, 62,144,183,157,108, 26, - 85, 73, 85,183,157,144,184, 40, 46, 33,103,131,122, 26,221,174,233, 59, 49,140,175,236, 3,228,174, 44, 0,128, 10,142,254,158, -122,155,133,199,202,174,232, 64, 67,169, 6,115,213, 43,246,142,238,186, 15, 55,117,171,250, 29,100,241,232, 1,203,225,123,137, -161,116,135, 16,152,234,131, 92,170,142,122,134, 55,162,190,190,155,239,203,233,222, 69,113,113,144,221,169,154,250, 87,123, 38, -164,169,236, 2, 97, 59, 16, 50, 18, 35,181,104,239,116,214,203,114,104,239, 54,110,103, 45,160, 68,187,194, 22, 4, 8,223,245, -130,209,191,169,224, 93,232,236, 31, 1, 72,187,122, 30,167,129, 32,186,187, 94, 39,113, 18, 69, 86,194, 73, 71, 56, 36,208, 65, -115, 58, 65,131, 68,201,255,160,165,226,255,240, 23,168,161,163,164,165,162, 2,164,147,128,230, 20,162,228,238,114,129, 96,159, -237,245,238,226,153,217,117,214,210,117, 52,105, 44,217, 27,127,204,206,188,121,243,158, 12,208,123,247,210, 11,183,104,196,166, -140, 64,117, 4, 55, 19, 29, 68,118,131, 72, 22, 77, 0,209, 71, 21,129, 38,134, 5, 51,165, 24,192, 35, 48,187, 53, 88,134,184, -138,201, 24,233, 95,216,218,143,222, 98,235,181,198, 22, 95, 4,141, 2, 3,173,187,102,253,205,103,172,181, 22,232,108,220,227, - 40, 49, 97, 77, 94,169,230,213,108,170,248,162, 86, 73, 4,142,125,101, 93, 95,148,107,200,183,180,147,115,104, 71,220,219,112, - 46,168, 18, 15, 68,103,185,163, 57, 48,240, 96,111,206, 86,221,224,199,114, 75,112, 23,251,156, 44,212, 13,183,251, 39, 65,183, -176,222,139,198, 11, 33,147, 36,157, 71, 43,169,234, 31,185,186, 64,128,133, 50,247, 33,139,211, 72, 78, 99, 57,234,247, 70,177, -188, 51,238, 13,123,114, 50,132,210,164,217,250,126,174,182, 31, 22,203, 63, 93, 12,136,210,246,216, 47, 91,251, 44, 59,196,115, -108,208, 71,101,255,145,194,135,118,175,202,131,242,116,149, 10, 47, 49,160,242,162,102, 55,104, 69, 7,152,110, 83, 98, 27,145, - 43,219,108, 81,253, 30, 75,251, 64,131, 76, 6,177, 0, 11,102, 54, 29,129, 42,192,209,132,111, 51,179, 43,204,189, 52,122,241, -132,127, 58, 83, 87, 59,137,156,111, 76,142,149, 25, 15, 70,155, 29,102,115, 72, 39,181,116, 91, 81, 12, 29,144,168, 34,227, 48, -128,134,197, 30, 35,255,220,125,112, 23, 62,184, 83, 63,243,244,232,228,124,179,160,225,195,176, 33, 6,252, 90, 93, 69,200,132, -181,236, 54, 75,202,110, 49, 99, 88,171,113, 20, 72, 74, 89,164,246, 32,231,157,251, 53,144,132, 42,201, 74,105,156,112,138,104, -186,212,201,228,180,180, 54,244, 59,128, 95,253,117,241,141,123,239,103, 80,107, 46, 51,233, 24, 50, 78,224,207, 11,136,123,197, - 30, 31,158, 4,177, 42,105,123, 1,165, 76,209,102,163,199, 7, 15,127, 93, 47,169, 7, 89, 84, 69, 94,230,212,104,110,206, 63, -159,222, 85, 70,103, 69,190,205,119, 53, 71, 97, 11, 97, 15,211, 89,145,169, 88,168,223,213,250,253,250,227,187,242,108, 48,121, -212, 59,121,252,244, 53,123,201,216,171,230, 65, 44, 88,113,206,170, 13,155, 63,192, 1,214,230,233,191, 97,227, 21, 43,150,172, - 44, 88,166, 96,111, 78,160,197, 33, 15, 19, 86,114, 49, 29,141,231,163,131,227,225,253,231,179,103, 66,170, 47,217,219,239,215, -159,107, 0,223,155,176,174, 52,238,179, 0, 74,212, 38, 29,207, 46,254, 94,210,204, 48,145,214,141,155, 68,165, 12,146, 14,112, - 55,169, 9,120, 30, 69,240, 22,165,161,190, 29,105,254, 2,117,134,108, 99, 57,137,147,118,237,143,109,103,196,211,219,242,177, -142, 18,164, 9, 66, 95, 23,118,119, 6, 26,122,239,235, 97,115,100,206, 48, 84,136,228,251, 41,131, 86, 34,131, 93,237, 46,199, -253, 52,225,241, 78, 95,130, 16, 23,146,100,180, 99,238,183,132,100, 27, 58, 64, 5,155, 10,136,181, 73,132, 37,189,239,170, 13, -255, 13,233,104,145,110,133, 13,170,247,174,118,113,199, 51,240,159, 0,172,157,203,110,211, 64, 20,134,231, 98,123, 28, 59,137, - 91, 40,148, 34,132,250, 12, 44,186,224,101,120, 45,150,188, 17,139, 34,129,144,168, 4, 41, 11, 92, 69, 33,205,165,137,237,177, - 57,183,113, 18, 82,118, 68,149,210, 38,145,162,218,137,231, 63,231,252,243,253,168,223, 59,222,212, 35,114,149,184, 68,210,124, - 55, 78, 15, 90,162, 84,123,234, 33,240,188,148,214, 34,211, 27,228,241,101, 42, 78,169,243,142,185,125, 32,189, 59, 93,131,136, -198,137, 43, 9, 8,197, 39,131,120, 66, 26,247,103, 26,230,177,200,126, 61, 90,106,180,224,179, 34,236,173,218,212, 56,139,187, - 55, 29, 8,121,107, 64,107,228, 99,151,131, 84,184,200,139,145,203,170,150, 76,161,157,158, 85,243,235,233, 53,252,181,110, 86, - 27,228, 71,194, 10, 0,143, 83,178, 43, 30,118,207,132,179,163,112, 66, 45,158, 58,172, 33, 76,219,119,225,255,186,184, 7,204, -147,218, 45,212, 93, 47,239,118,200,230, 80, 59,114,225, 86,251,238,121, 90,191,142,252,199,223,245,132,158,206,149, 58,193,204, -203,104,168,236, 48, 73, 78, 29, 66,196, 71,105,252, 36,115, 39,206,102, 41, 84, 61, 81,226,226,220,185, 79, 63,202,247,159,191, -221,134,134,120,179,227,138, 30, 32, 67,253,222,239,173,250,207, 55, 19, 10,133, 62,158,208,135,143, 75, 30, 38,186,103,212, 89, -128,195, 68,188, 55,244,174,230,137, 45, 82,139,128,255, 52,122,113, 26, 15,243, 36,207,160,218,210,117,203,243, 46,127, 59,199, - 10,250,217,200, 38,166,251,126,183,253, 50, 81, 15, 21,118, 20,224,187,155, 68,249,114,179,128,179,233, 91,137,221,234, 68,174, - 6, 39, 72,104, 27, 26,166,113, 25,222,121, 71,180, 72,173,131, 27,210,208,150,168,184,193,164,236, 96, 8,167,136,153,240,211, - 48,104,155,216,163, 58,148, 92,230,177,105,132,108,190,219, 23, 69,240,242,108,128,121,111, 20, 85, 75,189, 33, 70, 4,114,168, -136, 9,166,107, 88, 1, 60, 13,128,164,128,232,201,199,236,139, 39, 4, 25, 10,121, 78,142,226,117,130, 93,211,204, 42, 81,252, -127, 25,134, 10, 9, 6,153,186, 57, 66, 12,103, 20, 7, 86,204,184, 25, 70,219,243,226,124,186, 40, 99, 10, 84,143,177, 79, 19, - 9, 46,138,198, 21,160,139, 48, 64, 33,138, 87,219,117,229,153, 90,132, 65, 55,176, 58,100,241,200,166,133, 30,140, 47,206, 46, -167,131,194, 14, 47,151,239,222,116, 87,120,246, 51,242,203,242,161,225,129,242, 91, 90,242, 95, 42,117, 79,233,126,227, 80,216, -109,111,148, 46,213,215, 15, 51,187,248, 89, 46, 38,211,229,100,181,250, 85, 46,111,170,205,252,161,190,215,232,140,196,110, 91, -131,220, 60,124,127, 16,115,214,218, 10, 36,188, 56, 25, 15,100,123, 27,112,254, 34,193, 91, 65, 73, 4,230, 35,231,225, 50, 38, -132,239,186,253, 41, 40, 79,192,142, 63,207, 7, 26, 89,148,188, 54,255,220,149,218,245,197, 23, 95,220, 31,197, 69,246,158,105, -205, 33,166,120, 82,144, 70, 0,215,241,167,238, 85,164,220,108,125, 87,161,237,160, 33, 39,189,192,107,165, 21,114, 96,247, 16, -162,164, 17,124, 5,215,232,212,123,195, 44, 13,201,255, 59, 54, 71,122,190,168,238, 81,142,143, 83, 88,225,246, 71, 0,210,206, -103, 55,138, 24, 6,227,177, 51,127, 90, 90, 65, 85,144, 16, 72,112,225,130, 4,239,193,139,242, 62,168,234, 17,113, 0, 14,136, -138,110, 37,134,238,204,236, 36, 49,177, 29,103,103,197,194,133, 30, 87,234,238,106,147,120,190,216,159,127,110,214,112, 75,176, -122,114, 73, 26,178, 87,189, 27, 93, 72,246,255, 84,212,186, 55,178,147,147,113, 94,249, 92,119,125,147, 37,117,219, 48,237,202, - 47,249, 92,203,108,248, 69,211, 6, 5,104, 47,135, 44,137,131,187,124, 77,237, 80, 3,115,184,200,250, 50,101,199,197, 44,225, - 19, 68,140,200,179,131,138,102, 57,103,219, 37, 13,203,220, 34,191,214,123, 24,216,223,198, 30, 27, 41,207, 16,172,158, 93,229, -142, 44, 13, 97,228, 10, 52, 25,247,189, 91,116,234,251,232,216,151,235,177, 22, 84,205,104,161,211, 40,188,171,141,136, 96, 85, - 7,176, 38, 45, 88, 35,220, 64,103,243,114, 86,232,188,165, 87, 39,116,117,187,124, 57,204,110,167,130,149, 2, 53, 90,234, 10, - 69,241,201, 78,137,209,151,249, 87,126,253,252,201,187,205,240,254,251,205,242,247,121, 2,241,223,115, 6,254,251, 79, 11, 0, -104, 42,158,108,207,105, 35,149,180, 96,112,247,197, 40,205, 88,193, 43,254,140,238,102, 54,154, 95, 62,224, 93, 52,252,116,195, - 16, 18,142,188,220,224,250,206, 63,125,232,207,124,183,115, 56, 5,232, 58,124,246,184, 7, 63,127,221, 76,249, 42, 48,205,113, - 89,166,182, 99, 54,224, 24,178,202,102,251, 99, 90,129,146,176, 2, 51,196,242,167,230,105, 30,196,198,156, 31, 48,149, 42,194, -132, 91,162,120, 4,111, 14, 2,111, 94,188,189,254,124,125,228,164,107,139, 67, 1,209, 31, 13,238, 66, 63,113,174, 62,101, 52, -216, 32, 40,170,198,107,100, 23,255,140, 41,105, 1,108, 68, 6, 59,120, 80,128,153,175,229,214,234,170, 82, 24, 18, 55, 3, 61, - 58,185,216,150, 27, 6, 86,120,136,238, 32,105,202, 21, 9,102,147, 60, 17,202,211, 3,212, 9, 42,117, 35,117,239,232,188,157, -105,190, 87, 53,214,160, 98, 79,164,124,139, 94,173,191, 9,112, 14, 75,216,221, 43,103,148,228,146,145, 88,146,185,129,182,109, -194, 38, 53, 63,226,221,142,211,161,219,124, 65,107, 37,184, 95,200, 42, 7,203, 16,230,157,240, 65,106, 66,117, 92,107,178, 58, -205,252,210,253,186,113,151,225, 99, 67,159,226,242,141,166,219, 52,111,206, 60,159,127,134,228,115, 53,101,100,110, 69,100, 80, - 79,226,219, 67,142,244, 65,104,143, 82, 86,221,143, 86,138, 98,240, 81, 89, 94,232, 49, 84,195,159, 5,220,164, 6, 74, 48,193, -111,116,244,117,152,251,115, 63,187,125,254,189,184, 69,197, 96,126,228,217, 78,251,152, 75,198,224,173,111,154,200,220,207,149, -249, 66,102,180, 83, 88,191,220, 46,114,108, 58,157,120,180,119,148,236, 69, 50,233, 77,213, 0,179, 74, 14, 98,109,143, 68,131, - 79,136,228, 45,254,119,147,252,104, 62,254, 50,210,207,232,217,135, 40,224,195, 1,209,250,193,191, 5, 96,237,106,122,156,136, - 97,104, 62,166,153,233,148,118, 57, 45, 92,128, 69, 28,248, 13,252,116,126, 7, 66,218,203,114, 96, 89, 33, 10, 72, 91, 86,237, -124, 36,182, 73,236,100,102,202,114, 65,226,208,107, 59,105, 83,251,217,126,239,185,122,148,217, 36,220, 26, 81,245, 70, 64, 52, -162,197,180, 25, 22,101,138, 40, 36, 77,198, 43,201,104,183, 82,241,102,212,181,113,178,116,155,233,240, 32,201, 57, 36, 2, 65, - 66, 77,236,190,148, 18,175, 46, 11,122, 34,186,231, 94, 42,102,115,100,160, 12,143,181,150, 26, 45,134,135, 85, 26,196,153, 8, - 10,215, 85,227,184,165,239,108,124, 18, 60,248,174,169,220,214,173, 58, 8, 95, 79,123, 78, 29,169,195,195,183,135,206, 40, 12, - 66,122,231,165, 25, 86,233, 25,174,241, 96,106,100,153,162, 4,119, 53,147,220,153,203, 48, 49,158,230, 73,215,217, 90,237, 50, - 87,129,130, 13, 24,241,145,118, 22,222,182,116,119,239, 63,209,220,206,102,246,139, 78,163, 81,164, 19, 5,235, 57,192,196,227, -248,144,204,149, 86,171,214,165,105,141,231, 38,211,187,151,207,222,127,219,223,149,159,135,254, 29,125,227,127,138,242,190,168, -207,167,235,232,248,174,117,229,127, 30,207, 85,195, 12, 80, 31,250, 84,215,213, 3,116,201,225, 0, 6,102,194,141, 74, 63,177, -230, 6,240, 8,116,177,115, 87, 47,118,213,229,198, 37,183, 0,250,213,195,143,251, 30,210,222,245,158, 81, 62,178,175,121, 51, - 14, 91, 92, 8, 9,229, 86, 34,171,154,197, 86,247,213,229,213,237,247,207, 90,156, 42,108, 21,192,159, 59,201,167,215,135,219, -143, 52, 45,184,167,185,252,150, 2,157, 44,199, 15,212, 74,253, 41, 29, 97, 54, 50,237, 54, 79, 79, 99,231,195,176, 44,240,147, -231,137, 17, 77, 18,175,158,229,249,174,208,247, 35,168, 79, 61, 70,158,236,179,178, 61,127, 78, 86,229,128, 52,211, 51,202, 68, -154,164, 40,211, 36, 91,241,162, 43, 1,143,134, 5,129, 36, 30,147, 36,200, 61,126, 34, 21,179,106,169, 97, 84,230,196,175,155, -182, 15, 61, 27, 26, 43,153, 48,167, 7, 20,219,217,220,207,192,237,250, 34, 94,244,253,225,103,188, 96, 77,221, 62,244,189,228, - 33, 31,142, 6,172,247,107,163, 55,173, 13, 93,147,189, 7,166, 8, 78,133,184,229, 74,190, 15, 69, 38, 45,103, 56, 84,202, 71, -124,167,122, 74, 2,243, 1,232, 24,223, 51, 86, 57, 30,142, 3, 14,136, 49,131,251, 55,207, 95, 95,127,185,150,232,140,162,228, -225, 94, 58, 20, 72,199,243, 85,145,109, 73,151, 85, 4, 59, 58,171, 81,213, 34,184, 11, 76,132,153, 84, 51, 1,109,252,123, 50, -159, 99, 95,145, 60, 77,186, 36,189, 12,241,101, 98, 73,211,106, 83, 92, 88, 17,208, 98,151, 50,101, 13,163,201, 46,194, 69,241, - 80,234,140,120, 52,224,253,114, 73, 39, 36, 59,183, 60,247,168, 33, 55, 60,212,194,143, 30, 75,191, 69,149, 33, 30, 21, 26, 57, -150,168,108,138,164,151, 29, 56,102,229,252,194,251,252, 81,150,154,190,141,223, 2,240,118,101, 43, 78, 68, 65,180,247,155,137, -221,201,140, 50,243, 38,168, 79,226,187, 48,255,255, 11, 34,140,130,136, 8, 10, 49,147, 33, 29,123,189, 75,121,171,234, 86, 47, -130,175,230, 41,164, 59, 73,111,212, 61,117,170,206, 41,153,175, 61, 55, 99,137, 11, 26, 1, 88,255, 73,149, 61,107,116, 75, 83, - 34,153,244,225, 12, 2,227,160,154,130,123,182,201, 81,143, 6, 56, 44,203, 63, 59, 26,153,119, 86, 19, 91,142,240,108,138, 70, - 62,218, 56,114, 72,224,181, 21,159, 71, 94, 17, 51,252,255,156, 92, 23,208, 51, 68, 33, 63,238,147,131,220, 71,132,132,120, 36, -255,107, 69,130,170, 39,255,157, 67,251, 56,162, 62,214,144,171,102,112, 6, 93, 8, 81,201,212, 49,178, 19,239,230,210,121,140, -248,162, 5,136,123,146, 4, 36, 82,239,106, 40,161, 45,130,251,108, 93, 24, 45, 12,233, 22,151, 23, 80,110, 10,111, 43, 11, 3, -124, 48,110,226, 52,114,185,230, 58, 34,163, 6,226, 92,124,198,209,161,117,178,105, 70,237, 64,237,141,186, 82,133,202,147, 62, -133,106,183,125,147, 95, 29,117,167,215,247,233,191,189,146, 89, 12, 51, 31, 0, 8, 47,196, 92,252, 40,239,185,177, 71,209,214, - 39, 19,121,148,184,237,209,213,170,227,218, 78, 18,221,191,170, 94, 87,187, 47,223,235,135, 83,243,249, 56,124, 60,254,122,255, -178,187,127,247, 66,229,234,182,116,186, 55,143, 23, 51,140,208,251, 52, 30,181, 19, 81,169,154,235,141, 15, 11,123, 59, 67, 18, -188, 77,119,213, 93,221,162,149,163,135,184,223, 14, 95, 73, 31,136, 13, 45,101, 81, 62,117, 39,233, 13,134, 74,149,173,238,168, -198,137, 32,223, 58, 39, 37, 78, 8,182,236, 1,117,165, 88,183,203,232, 33,117, 34,129,167,128,139, 29, 56,219,231,191,187,243, -160,245,164,179,138, 67, 57,158, 37, 84, 49,107, 78, 83,140,238, 41,229,210, 41, 3, 44, 26, 26,132,150,188,184,171,199, 37,121, - 81,119,231, 88, 86,152,216, 5,101,243,165,187,164, 84,239,113, 76,144, 39, 50,223,129, 53,177, 60, 60,136,216,255,144, 37, 82, -207, 8, 18,238,105, 24, 3, 66, 99, 35,178,160, 79, 65,171,132, 64,242,168,172,240,135,165,173, 97, 99,150,155,242,250,112, 70, -163,227,115,123,241, 32, 26, 7,146,152,193,135,143,219,221,205,207,250,132, 46, 80,168,179,245,187,215,113, 95,152,205, 30,246, -225, 46, 59, 41,215, 79,165,123,144, 69,221,201, 86, 39,117, 32,212,178,231,141,211,195,144,248,117,186,215,113,111,160, 25,177, -166, 58,162, 14,223,186,135, 31,159, 44,149,171,201, 5,204, 3, 83,148,155, 90,105,141,129, 48,183, 80, 90, 28, 35,206,223, 98, - 88,135, 87, 2,233, 78,144,251, 42,184,195,223, 2,211, 24, 22, 13,145,176,112, 33, 93, 19,242, 97,185, 23,119, 42,152,184,107, -182, 18,114,255,152,238, 16,147,157, 17, 89,162,133,106,111,176, 44,230,220, 2,207, 7, 7, 39,155, 16,136,233,228,200, 21, 50, -165, 16, 15,171, 98,105,146, 44,234, 1,162, 58, 98,240, 30, 47, 60, 99,130,178,146, 82,185,132, 25,242,169,162, 40,107, 15, 8, -238, 92, 5,141, 63, 2,144,118, 45,187, 78,196, 48, 52,175,121,180, 21, 84,247,194, 2,137,231, 39, 32, 88,176,228,199,249, 9, -208,221, 35,196, 18, 46, 45,125,204, 52, 77, 50, 38,182,147, 76, 6,196, 2,177,233,166,173, 52, 79,251,216, 62, 62,199,212,168, - 71, 38,252,158,104,133,138,246, 11, 26,189,218,182, 15, 6,140, 56, 30,178,174, 41,178, 92,180,105, 85,172,182,251, 22,181,198, - 20, 61,154, 72,152, 1, 74,206, 30,235, 47,188,195, 30,184,148, 8, 73, 72,149,163,126, 53,208,128,217, 44, 25,203, 74, 4,220, -168, 82,214,246,102,213,234,206,232, 24,248, 90,180,172, 33, 53,177,120,135,157,112,222, 77,157,232,119,151, 29,111,193,197,164, -130,111,178, 12, 75,190, 63,214, 7, 65,206,211, 12, 85,207,169,153, 8,145,187, 82, 57,165, 97, 98,214, 69,242, 36,249,176, 44, -125,155,132,172,135,213,116,197, 38, 82,160,156, 94,110, 92, 15,242,238,120, 61, 45, 19, 41, 51,220, 59,218, 66, 54,177,160, 70, - 38, 65,172, 69, 76, 60,141,179,213,187,179,237, 26,179,238,204, 77,223,223,110,236,243,237,250,233,195,181,184, 31,203,144,243, - 95,113,247,255, 35,247, 63, 31,106, 14,247, 87,250,236, 8,212, 27, 49, 43, 66, 88, 58, 84,166,207, 31,104,163,104,164,196,246, -104, 18,239, 94, 60, 30,246, 82, 79,186,151,218, 64,248, 38,196,135,175, 39, 21,252,251, 55,207,158,108,123, 29,156,179,254,243, - 61,118,103, 61,193,158, 17, 23, 35,199,166, 65,107, 41,168,104,184,223,143, 56,145, 35,212, 76, 40, 21, 49,242,116,177,131,189, - 50,166,166,157,196, 16, 36, 73, 66,130, 76,108, 94,192,193,192,134,118, 71, 79,144, 40, 44,233,197, 36,116,172,241,143,134,140, -236,105, 37,105, 34,194,248,113, 56,246,221,202,249, 48,165, 37,109,160,182, 56,179, 22,121,221, 74,153, 6, 29,111,184,253,223, - 96,219, 48,196, 88, 63, 94, 70, 6,247,129,124, 65, 79,163, 37, 90, 1,100,234,187, 76, 38,224,132,113, 72,225, 38, 32,127, 32, -175,169,176,159, 36,170,229,179, 36, 48, 27, 70, 82,250,121,251,234,245,199, 47,159, 24,103,176,164, 25,187,131,197, 11,177, 31, -246,212,174,196,118, 13,217,150,225, 49, 17, 21, 68,162,227, 7, 51,128, 72,213,143, 62, 97,119,254, 17, 6,133, 59,194,152,141, -156, 2,242, 95, 83,224,164,149,221,220,120,241, 85,118, 15,213,168,191,124, 21,138,156,164, 17,131, 56,196,203,118,117, 63,189, - 63,128,143, 16,254,130,108,200, 9,167,139,244, 86,210, 9,229, 81,106, 50, 67,253, 45,184, 75, 72,125,153,217, 66, 47,225, 83, -224,214,167, 12,121, 31, 53,177,174,235, 46,138, 92,244,102,146, 45,117,145,141, 45,213, 82, 5,225, 43, 7,187,210,147,201,145, - 96, 9,222,103,138, 75, 37,196, 30,138, 76, 78, 62, 12, 30,193,225, 47,199,112, 88,171, 27,205,166, 80,132,151, 88,137, 3,230, -105, 22,148, 85,184,178,251,206,214, 67, 20,145,194,210, 23,129,143, 21, 45, 81,105, 42,131, 65, 88, 37,214,166,204,210,149,127, - 85,145,252, 37, 0,109,215,178,219, 54, 12, 4,185,148, 20,154,118,156,182, 48,218, 67,129,124, 64, 47,253,127,160, 31, 81,248, - 11,130, 4, 72,130, 38, 7,167, 72,244, 48,197, 71,185, 15,202, 82,140,162,167,250,100, 27,134, 45,193,228,114,118,119,118,102, -170,207,232,116, 26,254,161,229,133, 44,126,153, 17,105,244,197,214,212,121,255, 16,138,143, 52, 61,129,201, 52, 32,155,165,246, -216,186,242, 13, 77, 6,210, 32, 34, 46, 92, 15,129, 15,176, 34,135, 2,139, 49, 97, 49, 27,140, 83,195,144,182, 10,234, 0, 54, - 42,195,118,115, 89,217, 77,109,108,179,202, 63, 93, 3, 42,151, 13,201,215,192, 81, 60,230,219, 12,163,235, 66, 79,130,207,129, -240, 77, 33,232,203,177,161, 89,147,157,252,234,181,154, 41,154,128, 80,223,249,212, 89,202, 15,128,134,105, 98, 97, 82,147,144, -158,187,134, 19, 99, 5, 74,158, 36,233,227, 5,164,175,155,209,160, 48, 69,188, 57, 59,237,181, 16,149, 80,197,165, 71,245, 74, - 76, 81,141, 26,219, 81,145, 87,168,182, 72,247,172,158,234,246,170,169,158, 15, 57,178,120,243, 47,239,178,255,253, 8, 51, 5, -155, 48,195,107, 85,137,242, 80,246,185, 46,151,218,209,118,226,251, 29,232,101,126,126,255,208,221, 61,186,155,215,238,151, 26, -219, 2,249,127, 60, 12,155,245,243,247,111,159,141, 49, 95,182,238,246,224, 86,128,118,175,142,214, 68,231,213, 85,122,221,218, - 28,151,141,243, 67, 69, 99,129, 72,228, 74,101, 30, 20, 88,215, 33,195,217, 42,231, 64, 52,139,206, 4, 27,117,189,187,222,223, -237,169,116,198,168, 61,190,245, 57,178,199, 28,233,188,128,195,244,113,253,233,208,191,228, 5,140,205,119,225,196, 5,114, 97, -145, 98,206, 24,156,235,143, 84,161, 23, 42, 36,171,198,145,133, 86,141,118,240, 40,235, 11,107,187,142, 84,138,180,214,230, 47, -202,193, 29, 97,157,152,222,203,167, 99, 76, 19,160,226,145,119,246,224,212,172,167,194, 50,122, 50, 75,159,180, 76,234,115, 8, - 99, 57, 5, 89,207, 63,111,247,186,244,218,139, 5, 28,249,103, 41, 45,235, 86,178,250,152,241, 16,213,190,243, 69,132,199,223, - 79, 68, 52,192,251,204, 65,188, 61,246,137, 29, 30,129, 7, 21, 3,241,206, 72, 48, 34,142,249,191, 8, 51,108,158,102,200,119, -226, 89,135,229,155, 97, 10,250, 26,197, 75,124, 60, 6,229, 42,100, 24, 96, 86, 77, 96, 47,112, 94, 45,181, 25,234,192, 5,225, -146,198, 18,209,147, 40,147, 80, 55,238, 12,185, 19,148,134, 40, 45,243,147, 63,135, 4,181,248, 62,184, 47,232, 50,115,229,244, - 57,132, 95,132,248,180,104,192,158,117,104,223,205,139,114,137, 70, 21, 19,108, 93, 10,243,124, 98,101, 60, 9,173,111, 63,172, -118,149, 51, 35, 74,144,176,186, 14, 59, 77, 78, 71, 57, 20, 22, 95, 20, 79, 54,138, 48, 21,209,199,150, 73,134,164,144,151,205, -206,194,150, 86, 23, 90, 19,189,133,151,129, 12, 32, 96, 26, 63,250,203,227,143, 0,172,157,203,110,219, 48, 16, 69, 73, 61,104, - 75,142, 2,163, 13,242, 13,217,246,255,247, 69,151,237, 7,180,155,116,147, 44, 90,219,144,245,162, 72,150,119,134,148, 40,167, - 5, 10,180, 89, 57,139, 0,126,133,156,185,115,231,220, 34,217, 8,144,114, 17, 33, 66,134,165,156,229,124, 16,123,237,140,146, -197,174, 44,109,148,136,248,186, 43, 41,146,162,135, 4,135,156, 1,132,206,243,154, 32, 65, 24,140,152, 81, 90,153,156, 52,247, - 85,173, 54, 84,240, 46, 7,113,198, 43,140,100,115,205,177,134,167,192, 97, 45,119,254,168, 71, 36,117, 78, 73,105,206,250,142, -122,206,108,204,188,197, 51,236,116, 11,145, 11,102, 5,104, 94,188,217,188, 21,221, 36, 87, 51, 27,244, 90,244,104,186, 53, 53, -155,253,239, 1, 28, 31, 57,245,139,142, 67, 77, 5,151,240,206,109, 36,110, 26,138,213,229,168,172,246,141,174,191,135,190,143, -243,244, 7, 88,167, 14,101,175,163,161,180,185, 90, 78, 21,202,118, 98,190, 24, 89,139, 25, 4, 2, 33,191, 93,250, 2,242,238, -255, 49,179,255,251, 41,111,182,132, 3,153,120,120,230,228, 2,115, 9, 47, 97,145, 62, 79, 66,124,124,254,217,246,238, 69,160, -167,233,121,181,159, 30,124,250,122,249,240,244,240,174, 81, 93,167,238, 20, 50, 11,187, 9,127,117,165, 62,224, 60,136,247,135, -169, 82,143,175,215, 49, 2,247,163,100, 9,126, 22, 78,196,125, 85,251,175,223,217, 23,140, 46,160, 49,253, 55,242,243,243, 23, - 2, 12, 44,189, 51, 28,141,160, 90, 22, 74, 79, 44, 48,202, 65,119,254, 88,107,170, 99,175,251,193, 14,117, 89, 31,246,205,185, - 59, 17, 33, 61,160,101,227, 40, 77,114, 14, 55,138,109, 20,251,193, 85, 64, 27,166,185, 54,250,190, 57, 94, 78, 63,170,195, 93, -223, 15,206, 93,201,229, 18,198, 60, 1,108, 72,163, 3, 23, 52, 26,166,121,176,198, 71, 10, 59, 19,111,145,250,147,241,175,254, - 68, 44,179, 60, 74, 21,225, 37,147, 9,148,211, 12,237, 45,254, 53,217,120, 49,148,246, 87,228, 59,109, 90, 71,233, 43,116,121, - 57,202, 37, 9, 91,255, 68, 2, 48,132, 43,204, 28,172,207, 72, 62, 66,223, 36, 38,188,107,157,200,142,104,188,236, 6, 72,149, -152,142,223, 28,253,120,236, 91, 46, 12,206, 17,228,229,107,246, 17,224, 88, 44, 50,194, 17, 40, 9, 36,224,216,116, 71, 76,229, -101, 35,117,213,172, 67,136, 19,107,238,246,102,100, 72,122, 54,162, 63,227, 56,209,198,185,133, 93, 16, 3,127, 61,164,146,105, - 49,238,126,243,127,106,111, 55, 66,197, 27,234,100,152,205,230,107,205,106,163, 97, 34,124,106,254,178,124,157, 94,106,117,111, -167, 81,187, 16,116,188, 90, 45,131, 87,133,143,160,124,209,220, 73,127,246, 47, 83,139, 4, 67,193, 14,218, 50,175,154,226,177, -245, 55, 40,216, 21, 80,255, 74, 95, 16, 10,213, 98, 91,198, 56,145,142,123,111,127,126, 9, 64,220,213,172,182, 13, 4,225, 93, - 75,178, 45, 98, 55, 13,132,132,158,250, 2,165,239,208,158,250, 24,185,244,117,243, 12,129, 66,104, 32,113, 18,203,177,180,255, -221,249,102,181,218, 32, 67,142, 21, 58,104, 37, 97,176,100,207,206,206,124, 63,139,249, 76,149,173,195, 42,234,115,106,212,187, -164, 17,214,208,236, 68, 78,120,241, 59,104,122,145,230, 96,117,239, 77, 67, 90,234, 11, 48,117,164,247, 9,140,202,216, 53, 34, - 83, 80, 35, 37, 21, 61, 97,254, 13,227,244,132,108, 67,243, 72, 0,145, 43, 37,201,180,214,235,118,209,110, 87,103,155,134, 44, -105, 80,111, 34,187,215, 37,153, 9, 11,198,208, 6,114, 26,171,123,251,170,177, 6,132,232,141,229, 89,197,231, 82,154, 12, 57, - 62,203, 73, 71,129, 83,242,144, 53,220, 57,139,103,152, 26,133,221, 36, 5,149,153,136,204,249, 10,168,185, 2, 46, 81,141,248, - 34,118,225, 34,115,223,157, 27,142,129, 22,198, 82, 57,121,111,221,201, 70,165, 30,219,146, 10,137,109,135,183, 75,178,192,232, -231, 41,225,246,130,164,246,254, 6,115,103, 7,231,205,186, 80, 7,251,239, 91,153,184,217, 98, 47,175,250,247,195,188,221, 14, -234, 77,154,123, 24, 3, 89,252, 94, 91,236,164,142,105,205,182,173,191,124, 94,127, 90, 47, 94, 53,169,250, 48, 46, 83,129,228, -245,231,121,247,220, 61, 84,133,172,244,132, 15,195,255, 59, 70,228,167,195,142, 93,212,211, 2, 78,166,107,200, 26, 51, 83,134, - 82,167,193,196,199, 31,234,134, 12,164,122,163,190,125,253,222,155, 99, 60, 32, 45,245,224,118,221, 99,140,245,137, 71, 13, 83, - 44, 89, 80, 93, 38,100,106, 85, 95,110,175, 88,117,157,177, 42,218,234, 31, 63,127,221,220,252, 38,121,110,104,157,141,226,245, -158,157,223, 40,188, 82, 61, 62,249,130, 98, 56,122,202,145, 87, 1,166, 28,138,122, 22,222, 94, 23,220, 73, 30,227,114,112, 69, -233, 25,112, 7,153,185, 29,129,213,194, 70,150,102, 26, 6,191, 31, 58,227,252,178, 90,214, 77, 19, 63,218,162,220,141,154,169, -231, 92, 62,222,122,189,189, 2, 51,156,206,159, 73,234, 10, 35, 77, 26,252, 67, 90,120,149, 77, 84,255, 62,190,135,226,124, 74, -246, 15, 2, 10, 98,218,197, 8, 17,159, 3,129,217, 8, 26, 13,206,138, 0,195,208, 33,161, 67,111, 98,146,128,224,229,125, 78, -222,203,234,120, 8,147,140, 99, 81,136,246, 39,106,137,242,163,102,210,236,126, 57, 87, 73,151, 35, 79,181, 8,238, 97,206,127, -195,243,175,102,116,137,164, 84, 58,162,164,233, 80,153,131,178,221,166, 58,111,196,170, 1, 14,165, 66, 75, 17,190, 43,172,165, -200, 92, 14,196, 55,162,145, 53,112,179, 52, 69,157, 35,187, 86, 80,106,188,137,185,181, 83, 42, 28, 7,209,191,133,227, 62,188, -104,161, 86,162,149, 34,139,213,158,182, 35,249, 39, 0,117, 87,214,226, 68, 16,132,171,187,231,232, 9, 17, 65, 92, 88, 92, 17, - 31, 92,101,255,255,223,208, 55,241, 77,196,128,172,139,172,152,107,174, 76,119,219, 85,213, 53,135,155,252, 0,195, 60, 4, 38, - 9, 97,166,166,171,186,234, 59,102,253, 25, 37, 28,217,164,166,139, 71, 44,168, 91,232,158,235,117,146,108,198,213, 45,143,241, - 84,226,120,103, 74,156,124, 39,186,128,162,187,133, 49, 25, 78,211,193,170, 28, 35,155,190,227, 56, 94,125, 42,135,169,102,207, - 68, 6,136,244, 52,140,174,140,181, 89, 60, 42,107,138,120,145,226, 19,180, 46,202,204,168, 22,105, 2,106,204,248,241,195, 54, -211,223,126,111, 80, 71,121, 72,164, 54,199,154, 0,212,233, 83,158,183,191, 65, 45,134, 46, 11,146,226, 72, 27, 97,151, 5,166, - 24,203, 96, 93,207,184, 66,105,224,202,230,137,160,100, 51, 68, 61,158,186,221, 55, 14,114,212, 76, 81, 39, 2,208, 60,158, 3, -146,187, 25, 87, 40,155,121,122, 13,233, 9, 9, 44,218, 46,222,123,216, 34,115, 51, 73,200,255,250,181, 11,240, 12,194,107,128, - 7,145,181, 89, 83,194,139,215,225, 80,187,151, 87, 38, 86,225,119,215,213,254, 56, 52,253,169,246,105,114,139,254, 65, 30, 94, -132,147, 70,231, 65, 24,187, 26, 35, 80,141,192, 40, 40,226, 47, 14,244,180,225, 21, 72,155, 26,181,160, 83,171, 14,223, 84,133, -125,127,115,247,233,235,199,248,254,203,230,179,151,196,239,176,108, 39, 62, 21, 15, 99, 39,140,196,210, 69, 0,168,238, 37,241, - 96,134,102,145, 57,165,186,125,119,251,246,205, 77,204, 28,170,109, 25,131,239, 83, 82, 33, 12, 96, 82, 66, 76,100, 66,106,187, -115,199, 33,148,185, 93,149,177,136, 41,183,245, 35,102, 2, 55, 60,108,127, 25,147, 28, 6, 83,167, 66, 16, 35,196,223, 84, 48, -237, 98,152,186,137, 97,203,227,198, 44,164,106,157,171,244,109,183, 71,226, 9,120, 36, 24,105,232,145,193,170,201,103, 1,235, -225,251,237,125, 18,221,115,110, 55, 52, 58, 88, 60,227, 58,255,195,193, 7,227, 86, 36,156, 41, 11,226, 56, 98,245,146,185,133, -196, 78,167,254, 64,248, 25,235,155,218,187, 62, 48,143, 9, 49, 68, 72,126,139,139, 58,121, 69,224, 3,101,243,188,233,143, 33, -221, 26,201,157,105,156,121, 41,198,213, 18,205,125,134,130,175, 47,109,115, 21, 92, 42,235, 61, 9, 1, 2,252,171, 39, 62,105, - 3,203, 24, 64,192,139,147,210,186,153, 47,186, 79, 80,243,106,212, 69, 32,179,210,131,219,245,186,171,204,218,249,188, 69, 7, -143,142,126, 13,151,120,205, 29, 16,154,237, 17,174, 38, 46,155,157,130, 69,142, 11,130, 29,143,209,219,248,131, 15,253,171,213, -245,230,248,253,136,253, 75,140,151, 1,134, 2,244,185,127,178,152, 35,255, 21,128,185,171,233,109, 26, 8,162, 59,251, 97,187, -113,130, 67, 43, 85,162,133, 67, 36,238, 85, 47,252,255, 59,220,219, 67, 35,113, 0, 9, 40, 40,149, 21,226,250, 99,119,217,153, -217,117,146,198, 82,175, 88,123,112, 18,197,178, 28,103,252,230,205,155, 55,114,170, 72, 60,154, 93,120,154,233,188,227,212, 73, - 70,103, 86,110,103, 69, 84, 50,246,246,176,105, 65, 6, 40,115,214,160,115, 69, 27,168, 28,217,243,140, 91, 66,180,148,133,206, -206, 76, 94,154,188,144,153, 10,192, 65, 81,207, 74,200,158, 81, 42, 83, 20,225,115,224,175,106, 12,239, 58,128,116,199,186,221, - 14,165,244, 88, 82, 43,180, 89,100,217,221,230,190,238,107,194, 68,150, 70,244, 57, 16,169, 18,238,247,250,119,226, 79,211, 34, -101,103,196,221, 34,114,150, 40,143,244, 88,156,162,255, 21,115,239, 10,152,159,167,215, 52, 46, 87, 66, 50,140,148,254, 64, 58, -234,250, 39,203,163,243,194,147, 87,246, 22,235, 85,253, 20,242,133, 20,235, 51,218,201,105,167, 77, 87,191,163,112,214, 36,101, -241, 18,231,202,186,246, 53,211,246,255,127, 27,239,188,239, 84,212,249, 84,232,155,210,220,204,205,106,174,223, 26, 50, 13,239, -253,246, 57,100, 62,242,188, 42, 2,144,127, 99, 36, 99,141,177, 65,183,195,161, 25, 50, 13,215, 2,113, 68,145,186,153,153, 93, - 44, 46,108,170,210, 49,203,204,107,136,232, 4,129, 48, 14,184,196, 62, 59, 91, 63,111, 63,175,191, 96,109, 10, 83, 49,165,200, -151,140,122, 50,128, 27,101,174,150, 87, 30, 70, 85,245, 17,114,143, 56, 18,252,159,250,177, 42,151,204,184,134, 35,239,218,230, -221,251,235,187,251,181, 86,134,106,155,150,243, 6, 62, 43, 31,225,250, 65, 49, 49,182,196,226, 29,217, 14,237,102,187,249,181, -253, 57, 56, 6,236,196,225, 90,193, 3,137, 92,228, 85,188,139,212,117,148, 94,236,243,146, 56, 51,214,114,209,114,136,134, 28, -108, 63,136, 64,202,146, 65,186,149,238,118,117, 75,158,251,216,248,135, 77, 41, 44,153,140, 15, 65,218, 11, 40,137, 76, 30,221, -227,102, 88,199, 97, 0,125, 90, 54,193,249,209,247,116,175,146, 12,145,230, 65,136, 31,223, 80, 69,209,162,174, 29,144, 43,141, - 21, 49, 0,114,170, 68,203, 41,219,160, 30,252,240,146, 30,200, 72, 88, 51,122, 98, 17, 49, 25,248, 39,195,217,203,119, 97, 26, -188,191,108, 70,153, 0,251,209, 81,249,250,252,131,216,135, 78, 9, 39, 92,235,105,112, 79,174, 9, 76,178,243,144,206,144, 26, - 54,181,253,189,243, 79, 10, 66,158, 52,175,100,181, 16, 85,142,182,249,103, 56, 57, 70,168, 94,116,157,104,156, 28, 52,246, 43, -128, 23,199,250,238,244, 52, 15, 39,246,245,239, 67, 89,148,171,197,199, 75,121, 57, 67,223,191,240, 19,116,173,232,236,107, 65, -226,159, 0,212,157,219,110,211, 64, 16,134,247,232,198, 54, 36,170, 90, 46,168, 80,251, 0,240,246,220, 32,222, 3,245, 6,145, - 74, 61, 72, 64, 65,132, 38, 62,164,123, 96,103,198,179,182,163,136,251,222, 36, 87,145,108,199, 30,207,206,254,255,247, 3, 95, - 12, 28,240, 90,231,185, 59, 98, 30, 81,184,197,182,193,244,119,149,186,154,206,227, 32, 94, 7,115,164, 34,165,232,160,120, 21, - 85,140,202,129, 28, 65, 75,118,141,227,120, 81, 47,160,223, 47, 44,121, 52, 96,120, 3,174, 35,194, 33, 21,160,128, 4,133,101, -106,130, 22, 22, 90,248,202, 22,181,181,125, 90,102, 26,141, 20, 82,120, 38,210, 37, 40,117,209,135,221,237,110,221,248, 6,239, - 87,231, 97,106,228,112,186, 23,120, 45,155, 51, 95,148,152, 65,247, 57,177,132,228,195,120,114, 3,100, 86,146,252,136,121,179, - 92,220,135, 20, 62,118,169,137,137, 28, 82, 67,180,197,246,123,112,233,162,172,208,107,191, 52,242,175,243, 15, 51,105,205,224, -255,180,252,105, 89, 69,158,201, 86,185, 73,183,172,180,185, 48,250,201,251,199, 99, 40,231,151, 85,220, 21,211,114, 20,154, 30, - 59, 23, 46,151,230,195, 85,253,186, 50,123,231,107, 45,223, 95,158, 69,112,106,138,202,234,159,127,246,125,235,154,212, 74,112, -125, 79, 63,124,171,253,106,249,142,210,207,241,127, 36, 10, 47,197, 93,196,212,147, 54,253, 78, 28,122,136,233, 25, 27,123, 55, - 18,149,159,189, 58, 79,223,167,245,105,179,223,202,193,224,148,135, 61, 36, 63, 23,155,238,201,135,192,227, 3,201, 21, 34, 18, -103, 20,166, 51, 52,151,193,104, 80,133,158, 89,163,236,205,250,219,167,207, 31,141, 53, 29,232,229,129,229,235, 48, 13,157, 38, - 20, 4, 40,154, 24, 97,101,214,210,160,130, 1,231,251, 28,251,196,187,255,153, 19, 73,142,174,113,180, 72,140,100,201,251, 67, -131,189, 58, 3, 5,135,141,195,136, 97,236, 52,138,129, 44,143,219, 95,119, 20, 59,157, 14,191, 60,169, 91,215, 71,218,166, 37, -190, 3,160, 90, 79,148, 41,108,185,244,213,133,210,111,204, 21, 88, 22,221,100,163, 53, 23,119,207, 29, 61,149,200,231,123,225, -190, 8,191,190, 86,155,175,207,155,223,162,217, 6,152, 85,182,152,144,230,152, 23, 66,100,135, 56, 97, 48, 70, 57,177, 6,138, - 65, 9,115,144, 79, 52,237,223,229, 28,128, 62,227, 27, 30,210,123,229, 40,145,212,255, 89, 26, 28,203, 69,240, 12, 29,106,251, - 45, 66, 89,166,241,123, 71,157, 80, 81,138, 3,114,137, 28,111,189,152,143, 36, 96, 45,222,117,177,109, 33,207,184,247,144,179, -218, 18, 2,158, 54,135,209,228, 63,171,235,114,254,226, 73,239,204,199,238,135, 81,229,170, 72,111,136, 69,170,168,184, 14,144, - 97,220, 16, 57,126,174,255, 4,160,238,218,118,218, 6,130,232,222,236, 52,161, 33,240, 64,171, 74,136,103,254,255, 39,250, 13, - 21, 21, 79, 40, 34,144,128,130,154,218,216,222,221,238,153,153,141, 55,161, 72,188,242, 24, 41,137,156,216, 59, 59,123,230, 92, -220, 27, 40, 75,156, 85,140,112,122,192, 62,233, 99,251,226,183,167,118, 65,157, 65, 32, 3, 65, 95,105, 1,125,108, 52,104,233, -209, 37, 65, 56, 50,181,105,107,130,190, 17,140, 70,152,150,160,147,167,111,195, 61, 55, 85,205, 3,245,137,170,153,206,156, 94, - 84,224, 66,164, 42, 63, 73,235,167,118, 85,208, 22,242,104,231, 6,146,108, 56,168,216,251, 62, 54, 15,205, 83,186,146, 30,188, - 43, 38,188, 15,148,157, 77,208,171,140,165, 37, 86,155,158,124,225, 37,232,156,226,193, 71,120,195,195, 92,181, 95, 83,133, 33, -240,129,236,152, 45, 34,141,224,241,133, 66, 44, 82, 14,237,115,223,112,213,118,160,243,199,212,191,223,135,227, 44,152,194, 89, - 66,198, 44, 39, 25,171,209,185,252,217,204, 55,247, 0,166,145,105,251,130,188,164, 79, 92,220,247,124,121, 87,156,106,119, 74, -253,220,116,191, 54,221,204, 34,232,245,250,219,252,236,180,222, 13,221, 98,238, 42,235,174, 46,166,203,117,171,113,228,140,140, -209, 99,125, 26,112,179, 45, 35, 99,172, 15, 26,207,103,122,100,255,134,248, 95,146, 39, 91, 1,176,168,121,243,231,209,104,119, -230,234, 89,253,181,233,119,129,213, 24, 76,166,214,194,221, 72,239,155, 77,166,233,142,255,109,119,197,162,144, 39, 2, 83, 36, -143, 13,186,237, 91,227, 44,121,178,251, 47,243,217,195,122,149,138,105,247,250,250,253,252,199,237,242,183,167,225,165, 15, 25, -112,102,167, 20,237,133, 41,150, 61,142,241,224,227,218, 72,209,156, 62, 98,173,132,143, 70,105,226,130,102, 49, 54, 30,109,178, -219,140,233,164,233, 49,167,162, 73, 42,205, 99, 45,181, 62,150,246, 51, 46,244,189, 24,176,192,106,157,219,255,252, 87,193,138, -117,240,161,109, 59, 45,202, 80,203, 38,223, 17, 12, 70, 80, 83,225,130,181,125, 50,203,103,181, 62, 31, 46,199, 83,148, 42,152, -145,165,124, 26,181,254, 70,133,213, 82,109, 87,170,105, 83, 39,138, 72,209,244, 91,134,236,171,198, 56, 20,239,164, 97,239,182, - 38,110,221, 49,140,192,122,252, 64, 10, 77,134, 99,116,182, 94,137, 38, 47, 37,191,199,198,139, 26,239,222,239,253, 67, 97,146, -250,246, 13, 20,184, 34,226,178,226,146,180, 62,136,232,227,137,168, 14, 71,148,157, 28,143, 52,202,169, 14,220,141, 98,193,193, - 55,135,180,156,209,227, 86,143,155,135,201,198, 3,232, 86, 83, 35,123,215,220, 16,143, 30, 94,221, 3,154,119, 65, 80, 66, 17, -246,112,212, 23,254, 19,128,186,107,235,105, 16,134,194,180,192,128, 77,167,137, 38, 38, 62,249,238,255,255, 59,190,249,160,142, - 44, 14,156, 48,104,107,207,173, 20,182,236,221,215,101, 36, 43,131,175,167,231,124,151,236,172,139, 68,226,109,118,233,180,212, -251, 83,126,199,241,152,211,108,211,109, 10, 31, 26, 60, 82, 81,221, 1,247, 26, 60,123,129,229, 2,230, 23,232,157,225,161, 58, - 37,247, 2, 42,150,122,191, 31, 36,121, 69,124, 69,142,170,116,157,179, 57,152, 12, 2, 46,151,144,132,153, 85,104,112,112,178, -182, 72,179,155,188, 24,253,121, 79,219,147,246,165, 81, 11,161,198, 16, 34, 2,254,251,126,169, 3, 80, 48, 29,151, 94,106, 34, -180, 0, 80, 90,190,141,108,165,236, 2, 39,146, 59,232,154, 83,193,120,103, 14, 18, 52, 49,252, 84, 36, 55,158,192, 93, 71,190, -156, 26,237,137, 13, 8,204,115,196,107,255,139,145,188,177,116,227, 87,130,110,165,132,205, 23,210, 92,198, 88, 65,120, 4,214, - 66,114,239,240, 11, 79, 74,127, 98,241,254,175,193, 61,126,109, 86, 2,244,165, 72,121, 43,163,159,183,229,235,203,195,161, 7, -174,109,219,217, 34, 79, 55,155,226,241,174,234,122,155,181,195, 49,177,212,194,186,175,214,135,225,151,142, 92, 46, 17, 11,126, - 61, 51,241,116, 19,147, 98,102,197, 20,160, 31, 17, 30, 46,247,120, 87, 55,117,145,173,220, 72, 74, 82,133, 89,118, 88,108,240, -155, 8,201,127,178,247, 71,203,193, 66, 24, 53,161, 80,100,129,161,149, 81, 35,248,168, 20, 63, 77,147,175,114, 51,152,253, 80, -239, 14, 53, 40, 91,172,135, 56, 24,248, 35, 51, 18, 77,111, 33,144, 71, 26,231, 90, 98,129, 20, 15,116, 4,226, 81,225,237,130, - 24, 79,185,200, 41,151,102, 79, 6,201,199,138,200, 15,208, 28,210,236,165,163,196,148, 90,179,240,125,242,237, 66,166,178,191, -142,177, 94, 2,238,136, 37,132, 3, 12, 12,164, 48, 86,143, 35,164,112, 53,251,164,222,185,119,192,247, 49,106,101,168,249,184, -213, 6, 63,187,183, 62,249,250,208,199,111,219,159,160,211, 48,154,219, 36,107, 97, 53,134, 15, 81,150,121,140,212,150, 90, 84, -182,193, 12,192,242,120,243,202,196,201, 5, 62,137,185, 44,214, 86,241,255, 63,115, 1,156,183,101,162,168,194, 43,207,174, 91, -104,160,206, 26, 53,106, 49,238, 13,167, 10, 39,241, 80,203,106, 35,137, 78, 89, 17, 40, 7, 1,117,204, 29, 39, 22,172, 4, 40, -197,100, 37,141,141,199,222,205,220,140, 57,185,240,226,130,254, 4, 96,238, 90,146,155, 6,130,232,124, 36,217,198,113,156,176, -128, 69,170,114, 4,238,127, 21, 78, 0, 9,174, 34, 54,216, 18,210,204, 52,122,221,211,147,145, 41,168, 44,241, 94, 42,149,100, - 61,245,231,125, 10,190, 39, 5,195, 76,202, 81, 55,159,200, 68,113,196,111, 12,200, 94,142,119,254,118, 67, 45,168,138,209, 72, - 50,181,236, 49, 59,168,235, 88,190,173, 93, 31,231, 65,242,141,128, 45,169,151, 76, 66,167,113,167,100,253,206,187, 45,199,186, -118, 77,179,105,214,176,255,118,116,113, 67,234, 0, 9,131, 31,113,226,198,197,115,128,155, 55,230,169, 41,170,211, 38,106, 11, - 8, 65, 40, 27, 17,144,142,171, 64,117,225,118, 48,177,198, 81,160,217, 21, 13,106,206,209,206, 9,150,204, 17, 50,174,218,170, - 59, 35,141,139,110,217, 88, 9, 78,206,190,246, 56, 52,127,145, 78,161,143, 69,173, 0, 98,182,189,114,107,246,202, 21, 17,121, - 55, 71,196,241,126,213,105,207,155,253, 69, 50, 37,106, 62,207,214,218,249,107,241, 5, 69,217, 27,106,153,255,251,231,116,146, -190,210,124,146,119,160,222, 33,164,112,191, 93,125,122,124,127,119,127,243,249,240,125, 3, 62, 75,106, 26,234,186,246,254,166, -235,127, 78, 51, 74,180, 49,174,173,125,216,181,227,106,223,143,158,178,212, 25,245,106, 86,174,112,104,123, 38, 43, 50,231, 62, - 43,136,211, 2, 31,120,234,198,141, 27, 64, 20, 88, 14, 66,228,212, 3, 78, 49,214,143, 26, 25, 33,226, 73, 30, 17, 88,107,236, - 31, 73,204,164,246,120, 32,180,243,140, 92,222,231, 0,182,216,175, 48, 6, 24,240, 17, 18,138,224,205, 1, 86, 76,224, 49,108, - 96, 0,127,141, 0, 90,164, 1, 43,243, 89,130, 46,157,186,102,230,250,157,212,168, 3,127,101,182,246, 19,132, 76,236,183, 79, -188,160,150,236, 63,250,184,255,240,116, 60,248,236, 85, 45,254, 7, 66, 67, 4, 99, 25,188,119, 27, 36,131, 65, 36,163,133,252, - 43, 78, 99,150,115, 46,154,104,252, 24,155,203,217,159, 94,232, 16,131,241, 37,195, 40, 86,133,124,170, 17,127,190,172,175,223, -204,203,179, 57, 31,205,208,219, 48,153, 16,126, 76,151, 20, 66, 94, 48,203,125, 18, 91, 18,155, 39, 95,249, 65,169,198, 94, 11, -221, 66,123, 95, 16, 87,210, 98,150,126,189, 95,253, 7,233,155,150,108, 31, 91, 59,180,208, 95,231,251,117,141, 0,145,131,115, -211, 52,154, 55,191,140, 75, 55,152,171,131,168,118, 3, 46, 14,245,149,117, 59,181,182, 93,117,107,132,200,243,221, 21, 19,223, - 74,236, 42,235,195,164, 72, 95,228, 84,169, 12,185,110,215,187,249,216,227,112,170,175,234,183, 0,204, 93,205,110,218, 64, 16, -158,177,189, 6,219,145, 82, 72, 84,169, 82, 31,160,207, 80,245,237,163, 62, 66, 14,205,169,151, 84, 66, 77, 45,165, 2, 27, 88, -123, 55,158, 63,108, 83,200,185,156,124,192,128,176,118,246,219,153,239, 39,155,255, 56,225,250, 68,113, 52,138,234,225,210,203, - 6,148, 34, 81, 17,235, 88, 87,105, 85, 66,197,250,108,241,213, 33,128,213,171,141,126,198, 44,127,200,217,235, 52,149,193,101, -148,196, 75,106,190, 15,165,210, 33, 69,167, 2,217, 12,184, 52,205, 40,221, 13, 14,175,125, 29, 22,100,224,146,179,241,123, 89, -220, 20, 85,185,186, 91, 61, 61, 62,146, 73, 56,153, 20, 6,153,152,177,202,185, 23, 43, 74,115, 13, 83,195,112,140,230, 44,193, - 49, 63, 19,158,140,121,119, 24, 65, 72,163, 57,146,147,104,109,220, 59, 79, 57, 62,220, 84, 18,104,164, 96, 63,161,227, 49,141, -134,255,208, 25,159,208,183, 35, 81, 22,121,222, 23, 56, 3,173, 11, 67,238, 5,211,113, 88,134, 76, 89,203, 41, 77, 93,232,211, - 27,190,246,204, 87,115,252,206,143, 9,108,250,208,190,195, 10,248,239, 97,123,252,103,217,116,124,196, 1,250, 67,240,131,203, -110,171,252,243,253,205,122, 93,253,122,109,182,141,247, 30,179, 14, 51,215, 23, 11,247,105,189,232,182, 71,239,161,196,184, 42, - 93, 3,249,207,125,158,176,164, 69,117, 37, 1, 79,226,140, 1, 46,124,253,242,237,251,143, 7, 48, 37,116,156, 37,204, 91, 10, - 80, 84, 49, 9,106, 50,155,209,242,212,108, 3,196,140, 80,121, 19,242,240,195,197,245,204,229,157,184, 23, 3,176, 73,213,155, - 33,244,195, 18, 56,118, 34,203, 12, 36,215,228, 62,183, 92, 48,181, 60, 4, 85,247,128,236, 77, 66,243, 86, 31,125, 52,158,141, -240,208,134,183,102, 98, 53,140, 83,236,102, 13, 13, 97, 49, 48,144, 65,237,102,203, 16,161,245,135, 16,187, 17,121, 70,211, 76, - 13,167,108, 81,124,139, 31, 33, 21, 7, 47,220, 30,208,225, 2, 86,110,201,188,119,162,156,209, 61,199, 29,252,125,193,223, 71, - 15, 69, 52,134, 76,152,115, 34,199,254,198, 6,240,229, 25,118,117,114,216,117,251, 29, 12,207,114, 56, 81,135,168, 57, 87,113, - 66, 56, 12, 42,122, 55, 83,129,164, 88, 46,219,118, 43,105,116, 65,194,213, 97,218,146,191, 60, 77,197,235,229,243, 74,181,157, - 34,226, 75,225,117,151,110, 81, 78,187,228,254,225, 25, 57, 55, 78,118,157,247,153,153,241,204,179,183,112,101,227,183, 56,238, - 91,179,181, 66, 57, 92, 73,106,197,221,132,186,230,220, 58,209,252,143, 27,159, 50,165,236,187,200, 42,170,107, 13, 51,140,175, - 55, 1,120,187,146,221,182, 97, 32,202, 33, 41, 90,114,109,167,112, 14, 69,123, 73,111, 69,128,124, 73,144, 95, 11, 10,244,159, -218,123,111, 61, 20, 1,130,164, 11, 10,199,104,172, 72,150, 44,113, 88,207,144,180,150, 36,183,160, 71, 31,100,104,157, 25, 62, -190, 69,247,122, 27,141,188, 50, 64, 52,190,122,134,148, 81, 47,248, 38,155, 48,126, 70,121,147,151,176,157,168,108, 33,103,154, -149,219, 33, 24, 5,188, 99,157, 50,236,147, 97,157,207, 99, 18, 90,179,111,181, 84,100,242, 78,176,135, 98,229,242,110, 85,223, - 23,200,116, 91, 45,247, 19, 92,106,179,185, 94, 28, 29, 47, 63,156,158,158, 95,156,159,156,157, 92,125,189,250,116,249,113,245, -231, 23, 5, 51, 9,180,132, 11,197,151,135, 29,169, 36,211,157, 34,131,201, 47,110,165, 11,116,154,129,175,111,180, 90,141,219, -167,135, 52,143,193,246,233,232, 25,133, 67,124, 99,112, 97, 41, 79,107,154, 13,151,239, 25,223,224,210, 10,227,220, 68, 67,214, -131,155, 21, 87,127, 96,103,248,148,163, 7, 37,235,225, 21,144,117,133,161,239,128,202,253,254,131, 51,220, 56, 19,128, 91, 43, - 30, 72,227,250,191,129, 20,247, 66,127, 37, 59,135,209,142,148,235,247,144,129, 41,255, 89,139, 51,135, 91,180, 55,127, 55,235, - 93,219, 32,133, 57,217,182, 45, 42,152,166,250,120, 62, 41, 23,187, 55,211,196,168,228,186,208, 63, 55,188,237,200,118,235,243, -201,107, 66,240,235,242,237,209,187, 31,235, 27, 96, 6,241,231,111, 95, 72,246, 44, 93,240,245,139, 95,157,235, 51,223, 14,107, -230,104,225,219,155,164,163,100,242,192,109,233, 2, 95,123, 89, 48,162, 19, 83,162,159, 70, 21,209, 30,209,219,218,105,229, 34, -210,206,152,140,240, 62,166, 65, 82, 20,205,111,124,195, 86, 33,204,137, 91,136,199,190, 65, 28, 86, 30, 32, 33, 74,119, 48,248, -251, 34, 77,113, 65,216,175,194, 92,143, 17, 94,225, 12, 25,106,123,171,252,142,231, 16,145, 40,211,216, 32,209,194,224,147, 70, -191,166,233,171,135,109,193,234,114, 86, 9, 17,116,175,137,145,160, 36, 93, 13,155,234, 67, 83, 45,239,242, 89, 85, 47,161,168, -222,183,223,227,238, 81,210, 51,162,105,134, 42, 86,245, 91,152,124,189,173,238, 69, 93,226,174,102,147,115,242, 99, 13, 4, 81, -236,132,174, 17,120,193,128, 38,195,126,129,211,162, 71,190, 92,196,181,221, 8, 94,128, 24, 21,231, 15,127,146,233, 62,246,147, - 25, 86,233, 17, 26, 52,122,207,113,228,254, 47, 41,201,160,103,211,226,233, 87, 3,182, 37,157,109,102,210,253,217, 55,108,153, -254, 76,147, 24, 69,164,134,101,155, 7,233, 60,102,108,164,106,136, 34, 7,189,240, 61, 50, 7,128,167,234,144,235, 10,189, 29, -161, 67, 32, 6,121, 85,117,219,186, 71,183,233,159, 0,188,157, 49,111,219, 48, 16,133, 69,138,164,172, 56, 65,108, 20, 5,186, - 38, 75,208,108,221,186,247,207,119, 40,218,191,145,216,177,225,182,182, 68,209, 18,175,188,227,145,161,154,160, 40, 58,212,131, - 70, 66,178, 36,242,116,252,222,123,156,207,167,168,220,205, 29,234, 36,159,202,231,234, 99, 13, 14, 5,144,228,194,141, 13,239, - 38,216, 40,128, 66,225,118, 37, 85,109,156,247, 70,104, 52, 48,144, 10,171,123,169, 17,206, 33, 78,197,194,249,105,216,111,250, -237,198,109,119,118,219, 79, 39,204, 24,148, 49, 77,158,234,133,105,236,109,223,117,199,247,247,247,183, 31,111,222, 52,235, 83, -103, 15,223, 15,131, 35, 11,233, 49,252, 28,125,254, 34,241,198,133, 88,122,139,125,218, 20, 77,142, 60, 88,182, 0,123,243, 8, -130, 94,114, 28, 51,163, 50, 74, 68,227,142,104,233, 17, 59,238,117,146, 54,113, 6,114, 54,234, 35,110, 18,194,181, 28,207,167, -205,104, 91, 10, 80, 53,180, 94, 88,220,139, 64, 18,121,135,125, 84,110, 52, 95,147,116, 65,211,103,142, 49,242, 66, 75, 77, 89, - 59,148, 79, 77, 97,161,216, 27,246,173, 18, 26,228,126,242, 79,255,209,147, 64,164,181,189,108, 91,206, 98, 1,254,105,126,175, - 10,108, 38,143,239,159,217, 80, 64, 79,208, 26,133,213,199,193,225,135,123,141,233,115, 90,137,229, 66, 93, 46,244, 85, 45, 6, -104, 62, 63,200,173,149,188,165,133,255,107,221,168,139,147, 61,134,210,248,167,253, 33,146, 50,142,238, 49,174, 1, 90, 53,225, -145,136, 59, 40,249,105,135,132, 72,112,243, 46, 27,238,101,206, 38, 2,143,201,191,144, 49,115,207, 4,244,122,185,178,206, 21, -225,219,105, 86,240,153,183,137,162,161,168,228, 33,125, 27, 30, 35,148, 72,193,191,140, 13, 23, 41, 16,201, 45, 42, 47, 71,236, - 9,155, 54,248, 89, 59,157, 99, 67,170, 68,111, 9, 78, 23, 99,183,106, 54, 82,192,195,106,185, 10, 35, 59,140, 71,246,148,124, - 80,101, 62,111, 66, 98, 30, 79,199, 96, 2,120, 71, 94, 12,220, 24, 10, 47,163, 81,205,101,123,229, 66,213, 36,213, 66,212, 31, -228,250, 86,189,131,202,152,243,185,123,123,247,248,169,133, 36,205,203, 66,101, 89,200,157,240, 98,190, 86,234,219, 23,107,119, - 85,191,247,253,193, 15, 61, 56, 11,163, 35, 62,146, 22, 5,207, 51,198,188,181, 66,137, 16, 19,155, 15, 66, 57,199,165, 71,201, -151,201,162,133, 95, 22,136,231,166,204,124, 88,248,115,145,242,219,204, 14, 47,128,155,200, 34,229, 37, 70,164, 45,252,153, 82, - 24,170,235,118,229, 48,110,112, 20,179, 40,183, 87, 70,142, 4,106,142, 9, 68,232,136, 44,120, 69, 66,189,166,146,176,249,139, -215, 43,237, 32,139, 50,138,228, 69,171,231,149,161,126, 9,192,219,149,236, 52, 12, 3, 81, 47,113,186, 80, 64,112,226, 35,248, -121, 64,170,248, 6,254,128, 19, 7, 68, 15, 44,109,104,186,165,137, 61,120,102,108, 39, 41, 21,130, 11,247,180,105, 92,199,179, -188,101,178, 94,216, 1,122,231, 82,245,136, 17,197, 1,187,150,243,223, 69,136, 13, 30, 78,152, 59, 99,118, 81, 53,245,222, 22, -116,122, 98,135, 93,107,108, 12,174,154, 28, 69,180, 74, 17, 79, 11,119, 70,229,106,139,109, 67,167,152, 54, 73,160, 37,233,158, -252, 21,181, 15,233,153, 35,234,164,191, 99, 3,179,217,243,221,205,237,253,116,250,241, 49, 95,175,151,229,166, 36,255,104,122, - 43,124, 16,177, 12,181,165,129, 73,130, 92, 31, 32,122, 55,144,188,160, 67,171, 82,137, 67,192,100, 51, 69, 99, 34, 36, 83,221, -129, 73,175, 10, 66, 93,227,228,161, 60, 45,185,143, 81,213,224, 31, 79, 45,208,113, 91, 80,182, 46, 13,194,217, 92, 97,193,185, -127,124,164,134,181,110, 4, 99,173, 38, 3,180,195,242, 5,204,200, 64, 67, 86,129, 35, 52, 49,119,218, 39,234, 6,140, 53, 99, - 11,143, 85,243,254,191, 93, 20,136,124,205, 93, 20, 97,153,142,131,152,237,247,136,126, 15, 6,112,225,162, 59, 46, 5,219,176, - 80,225, 92, 45,125,124, 94,171,137,107,178,156,250,114,181, 26, 25,135,158, 13,210,157, 14,178,135, 23,253, 52, 39,249, 53,110, - 12,132,235,105, 27,186,114, 83,208,224, 23,217,226, 99, 50,200, 54, 1,141, 28, 77,133,242, 84,197,176, 56,115, 54, 68,151,141, - 0,209, 83,142, 88,182, 13,202,244, 82, 94, 30,185,228,125,185,139, 49, 67,165,150, 2,146, 27,135,136,243, 59,224, 36, 59,243, -193, 6,133, 19,164, 81,131,216, 9,162,156,213,210, 87,217, 56,126, 40,142, 14, 19, 1,135,146, 81, 50, 67,137,179, 6,215,198, -143,227,130,148,240, 41, 29, 68,117,236, 56,134,253,120,246, 32,131,249,106,145, 74, 76,151,126,101, 24,140,193,117,132, 40,214, - 5, 4,195, 83,246, 30,198,133, 66, 75,248,109,169,245,208, 95,117,157, 95, 93,100,147,215, 77,177,203,107,168,213,126, 85, 54, -226,210,111, 5,200,123, 18,214,118,222, 21,219,221,190, 45, 43,251, 41,253,202,215,149, 35,186, 67,156,213,198,196, 36, 50, 28, -145, 71,168, 42, 44,255, 73,237, 99, 78,227, 59, 57,123, 60, 19, 17, 57, 8,221, 32,104,123, 22,112, 36,123,135,223,159,236,199, -107,117,199, 62,143, 61, 10,230, 55,124, 86,136,229,182,136,244,186, 67,120, 87,180,132,153,208, 58,235, 57, 39,210,150, 29,234, -124,107, 43,186,221, 95,251,175,135,216,105, 23, 40,254,137, 29, 41,196,151, 0,188, 93,201, 78,195, 48, 16,245,146,164, 77, 41, -136, 11, 71,196,255,127, 9,191,128, 16, 18, 72, 8,164, 2, 66,173, 74,169, 27,199, 54,158,197,142, 19, 16, 32, 14,244, 86, 85, -221, 50,206,172,111,222,171,114,246,150, 20,166, 66,162, 39,150, 60,142,112,216,185, 36, 90, 82,106,150, 65,131, 29,206,166,134, -193,163, 39,168, 16, 96,194,148, 7, 50,110, 33,173, 52,112,107,246,164,153, 57,104,166, 32,145, 4, 44, 36, 17, 72, 17, 85,138, - 53,162,231,181,115, 13,224, 3, 84,136,165, 91,219,180,215,183, 87,135,119, 3, 27,170, 14,212, 59,122,215, 89, 27, 43,152, 14, - 4, 97, 2,173,125,132, 82,219, 40, 48, 36,152,177, 71,190, 72, 39, 73,232,140,146,116,252, 70,197, 36,171, 36,112,153,168,128, -201, 92,188,160, 46,135,169, 55,135, 7,207,208,182, 24,217,158,125, 71,162, 7,117,180,153, 10, 22,148,210,192, 98, 39, 26, 20, - 67,108,154,169, 46, 42, 57,107, 64,232,232,104, 70,250,207,226,164,129,228,221,128, 19,144,243,185,104, 67,184,127, 50, 55,251, -255,115,238,217,125,212,233, 71, 46,211, 83,157,128,231,135, 66,244, 85, 23, 60, 98,191, 9, 27,249,141,125,154, 64, 44, 19, 82, -173, 39,245,112,235,189,238,163,191, 90, 34,165, 90, 43,251, 70,171,104, 94,211,217,203,135,221,221,107,168,107,166,184,200, 57, - 10,165, 2,142, 73,141, 70,135, 28,228, 62, 48,111, 45,209,146, 69,129, 63,232,202, 43,150,129,144, 89,219, 67,100, 16, 65, 74, -219,139,225, 75, 88,173, 87, 42,223,201,126, 52, 64,107,103,139,141,217,192, 74, 72,146,127,160,197, 22,102,183, 33,172, 46,202, - 61,103, 25,217, 16,107,243, 80,165,114,154,142,157,156,128, 47, 84,134, 98, 38,174,220,228,233, 37,177, 90,198,188, 11,226, 46, -208, 61,106, 56,168, 10, 87,167, 4, 83, 65,177, 43,161,105, 50,190, 82, 85,141,177, 7,149, 71,123, 9,174, 66,176, 75,168, 93, - 65,249,198,159,215,199,103,245,233,227,219, 75,135,191,193,236,172,221,173,123,113,161,220,176,179, 58,233,122, 59,228, 4,146, -219,173,114,123,225, 12, 50,216,244, 36,139, 66,109,171,140,253,225, 70,177, 28,249,169, 12, 32,177,200,194,200,180,113, 12,129, -199,125,119,108, 82, 37, 3,202,193,158, 33, 7, 11, 70,221, 20,114,216,223, 63, 70,158, 29,155,212,126,114,122, 49,142,127,185, -157, 74,100,141, 66,126, 2,193,251,233,231, 11,199, 20,105,165, 59,206, 69, 65,208,117, 19, 47,215,223, 24, 71,138, 11, 17,202, - 34,219,255,244,223, 63, 4, 32,237,124,122, 19,134, 97, 40, 94, 39, 1,202,138,118,152,118, 99,199,125,255,175,179,203,166,221, -216,164, 73,101, 27,148,150,182, 73, 86,219, 73,147,180,236,143, 52,196, 1, 33,129, 16, 21,230,217,126,249, 61, 21,191, 30, 60, -223,158,175,143, 8,208, 96,235,104,166, 30,201,197, 35, 21, 62,149, 0,142, 21, 15, 76,190,230,103,104, 18, 78,233, 51, 86, 68, - 65, 35,116, 97, 48, 81,219,205,129,228,208, 5,104,210,179,248,121,209,182,139, 94,114,165,202,253,155,164,245, 45, 50,232, 12, -158, 64,196,225,140,238, 13,213,119,151,156,237,195, 12,189,175, 51,148,120,233,149,130,235,131, 97, 12, 54,115, 8,111, 0,151, -177, 6, 54, 4,172,186, 50, 32,217,125, 44,162, 89, 23,117, 53, 68,248,171,105, 61,189,193,250,142, 29,116,101, 8, 87,111, 17, -173,148,231,170,104,161, 34,205,182, 36,189,185, 86,144, 15,157, 48, 2,211, 56, 13, 2, 16,102,159,137, 53,216, 67,217, 60,236, - 78,207,218, 52,151,220,144, 42, 10,231,251,255, 77,249,247,145,126, 84, 34,253,125, 73,101,183,165,109, 65, 65, 69,121,156,171, - 52, 63,234,130, 44, 98,141,153, 84,120,138, 40, 92,112, 4, 11,107,127, 81, 90,221,203, 78, 29, 69,143,213,185,129, 51,232,219, -225,139,172,251,178,202,112, 3,143, 59, 80, 70, 9, 37, 21, 80,146,251,125,174,116,149, 80,197,170,216,235,150,147, 4,192,195, -171, 96,162,113,220, 35, 51,252,185, 10, 24,215, 91, 65,182,167,194, 80, 0, 36,126,138, 16,138,102,179,215,247,157,197, 38,147, -182,189,134,243, 66, 13,115,196, 88, 6,100,100, 0,134,160,173, 92,251, 27, 31,147,241,144,177,104, 24,198,232, 96,242,132,229, -139,149,144,114,104,140,105, 33, 76,152, 35,210, 37, 36,195,137,204, 64, 17,203,228, 76, 30,103, 23,206, 62,228,246,130, 0,215, - 87,155,122, 95,105, 16, 19,226,158,107, 44, 50,224, 98,124, 95,108,223,187,170,172, 63,113,112,216, 27,104,154, 19,149, 4, 36, -141,104,254, 89,166,171, 64, 70,217, 14, 90,224,227,128,231, 52,134,202,222,117, 20,196,169,161, 71,104, 44, 97, 17, 76, 90,221, - 82,243,158,113,139,213,187,155,237,106,153, 63,189, 60,242,225, 24, 79, 72, 14,101, 61,129, 14,153, 49,207, 34, 68,112,216,223, -103, 51,211,127, 24, 63,171,184,112, 91, 45,214,231,174,153, 75,120,238, 32,104, 64,239, 72,239,179, 46, 1,124, 83,169,163,175, -203, 78, 22,244,199,212,217, 98,190, 63, 97, 59,215,233,243, 85,179,249,155,139,250, 75, 0,210,206,109, 39, 97, 32, 8,195,157, -101, 41,148, 67,130,222,120,231,251, 63,146,222,170, 49, 98, 8, 70,208, 82,123,216,177,115, 90, 90, 90, 99,140, 60, 0,161,205, - 50,187, 59,243,255,223,239,207,239,207, 98, 77, 80,240, 23,182, 50,240, 60,134, 8,114, 97,230,196,165, 56,123, 20, 26,171, 11, -146,106,200, 25,102, 26, 96, 45,123,240, 5, 35,129,203,114,144, 4, 13, 71,241, 78,206,187,160, 54, 44,102,161, 57,168,243, 3, - 55,197, 39, 50, 54, 38, 80, 81, 77,172,106, 50,143,160,210,146,216,133, 96,106, 25, 21, 98,226,197, 54,107, 54, 37, 51,173,162, -229, 51,128, 35,157,190,224, 90,221,228, 92,223, 37,102,129, 14, 72,117,100, 57,153,101,144,158,164,173,210, 31, 85,190,102,185, - 11, 3,166, 33,206, 18, 25,174, 1,183, 62, 61,214, 95,158, 43,218,161, 12, 46,245, 89,154,204,103,126,157, 77, 55, 75,191, 72, -125, 83,134,237,238,116,255,112,188, 43,170,221, 88,203,204,219, 70,235, 58,232,221,255,159,217,107, 67,223, 76,185, 97, 66,194, - 30, 74,240,164,131,201,218,161, 39, 30, 28, 89,210, 62, 75,174,251,252,240,169,249,212,189,185, 22,135,243,216,110,252,205,100, -176, 46,193,118, 14,105, 88,181, 27,201, 28,112,202, 23,244,170,129,162, 14,101, 66,169, 40,135, 2,252, 28,110, 54,254,101, 71, - 35,137,134, 75, 15,244,164,186,202, 67,183,151,109,252, 12,238,118, 75,134, 6, 57,235,130, 8,190,232,159, 24, 79,180,216, 59, -228,232, 34,233,139,228,240,215, 75,177,161,199,144,229, 60, 32,106,131,160, 92,114,101,123, 37,202,207, 58, 35, 85,192,220,179, - 96,206, 23,134,200, 68, 20, 84,103,161, 90, 22,246,213,242,186, 14, 85, 81, 20,142,163, 16, 72, 31,105, 94, 90, 6,235, 58,161, -137, 79,248,239,202,241,156, 81, 53, 46,139,151, 10,204, 42, 91, 29,242,247,231,253,214,134,114,174,231, 7, 85, 0,123,123,219, -110,218,131,199,204,205,223,242,215,170,189, 31, 99, 73, 13,163, 34, 47, 23,169, 62,184,244, 97,188,142, 5,229,139, 24, 79,203, -119,130, 99, 30,154,138,154, 51, 72,244, 16,118, 55, 18,189, 91, 6,188, 40, 17,229,122,175, 9, 66,203,177, 99,174,230,169, 60, -237, 31,181,162, 40,210, 29,199, 90, 40,168, 18, 82,212, 44,108, 59,188,135, 46, 70, 56,249, 97, 6,139, 99,221,152,166,175, 99, -142,159, 83,117,114,195,246,152, 12,232, 1,179,116, 69,246, 8,141,115,142, 28, 89, 48,229, 21, 25, 96, 32, 74,117, 71,106, 52, - 12,133, 61, 56, 22,238,126,249, 3, 6,188,241,240, 23,127,204,183, 0,164, 93,201, 78,195, 48, 16,181,157,116, 71,130, 34,238, - 8,137,255,255, 36,184, 32, 84, 9,138, 82,138,211,198,177, 61,120, 22,167,238,130, 4,162,135, 30,122,232, 18,117,156,153, 55, -111, 41,248,145, 98,138, 12,230, 52,197, 66,218,184,128,127,175, 28, 21, 73, 97, 11,116,125, 77,106,192,211,255,202, 12,116,114, - 18, 95,104,193, 45,141, 42,180,222, 67,175, 81, 1,165, 91,121, 93, 85,136,227, 27, 86,106,144,241, 38, 90, 1,231, 21,168,172, -131,148, 24,224,161,197, 89,100, 78,126,144, 25,150,137,155, 6,197, 78, 18,203,113,240,101, 38, 32,175,146, 40, 89,198,220,249, -112,167, 80, 53,105,223,165,133, 71,136, 5,149, 30,129, 88,206,160,106,153,144,133,108, 41, 84,221,244, 17, 19,215,222,144,208, - 52,202,210, 75,198,179, 14,226,187,243,143,179, 73,179,237,215,212,247,116,160, 26,235,230, 16,166, 10,118, 59,191, 91,235,213, -214,189,108,186,215,204, 73, 48, 69, 46,210, 57, 98, 56,202,176,198, 63,187,248, 42,155,222,240,157,227, 86,169,235,154, 45, 16, -245,124,132,235,227, 61,164, 57,195, 44,200,237,205, 7,213,123,216,247, 97,235, 96,176,185,219, 11,193, 81,128, 26, 56,186, 83, - 31,149, 77, 93,240, 43,248,246, 16,179,109,228, 21,157,245,150,108, 16,107,143, 75,136, 49,102, 6,212, 99, 84, 71,192,166, 13, -203, 69,111, 56,171,123, 0, 11,243,132,112,240, 21, 58,218,119,106, 10,165,227,112, 48,226, 35,178,115,144,192, 47,204,151, 81, -167,216,203,197, 46,169,148, 76,193, 15,145,219, 24, 29,166, 99,158, 16,131, 36,221, 8,247, 38,103,117,130,248,219,210,173, 72, -196,223,186,172,112, 40,113, 93, 86, 86, 15,123,214,244,188,177,141, 97,195,108,125, 0, 75,115,109, 26, 6,125,116,137, 63, 1, - 95,121, 81,252,179,147, 89,243,213, 8, 53, 56,251,147,103,157, 22, 25, 40, 85, 66,217, 76,111,183,168,102,173,119, 31,123,219, -135,222, 58,235,252,106,233,103,222,162,124, 23,230, 92,204,178, 37,140,160,178,212,132,172, 98,163,242,246, 19,130, 27,167, 74, - 12,218, 98,249,225,107, 98, 69, 16, 36,129,131, 71,246,251,187,135,231,183,167,105, 61,105,211,249,200,250, 42,170,200,138,253, -127,148,108,185, 85,225,228,117,152,186,226, 64, 21, 4,125,222,188, 31,183, 19,191, 47,147,243, 78, 69, 95, 18, 69, 65, 49, 71, -224,210,165, 56, 13,167,163,113,215,119,252,157,211, 15, 73,141, 92,219,111,203,195, 29,179,227, 35,239, 48, 79,129, 76, 40,108, - 44,203, 83,190,224,244, 92, 88,189,254,245,100,231,199,183, 0,164, 93,201, 78,195, 48, 16,141,151, 16, 74, 23,132, 4,226, 11, -184,240,255,223,193,129, 15, 64, 8,196,173, 21, 40,105,155,205, 11,158,241,140,227, 84,149, 16, 32,245,208, 67,213, 42, 77,252, - 60,158,121,139,158, 93,173,103,167,122,254, 1, 57,131,230, 92, 54,133, 30,219, 52, 8,129, 47, 48,168,171, 3, 60,178, 40,200, -139, 29,122,233, 25,223,109,106,153, 72,168, 50,192,122, 0,199, 26, 73,208,161,226,179,111,156,197,228, 49, 96,206,199, 73, 0, - 57, 41,185, 36,202,131,123,109,189,207,214, 33,208,232,161,201, 57,141, 69,240,201,209, 81,241, 23,203, 35,106,181, 3,186, 67, -174, 6,188, 52,182, 61,169, 31,239,209, 40, 33,108, 31, 50,202, 2, 1, 50, 98,171, 42, 46, 67, 9,212, 56,177, 90,222,140,135, -157,198,188,205, 30,255,154, 0,196,131, 40,238,225,118,154,209, 95, 60, 46, 86, 79,109, 29, 45,195,194,110,244,178,183,227,190, - 29, 56,228, 72,227,231, 5,119, 96, 84, 94,145,102, 66,142,164, 43,137,159, 28,255, 81,185, 39,247,155,240,254, 86,136,235,210, -247, 66,142,133,168,148, 88,148,178,212,225, 70,202, 74,251,174,144, 43, 45, 22, 16,199,236,238,180, 62,118,110,123, 48, 95, 45, -140,199, 59, 86,222, 22, 63,233,200,211,136, 42, 82, 47, 20,155,194, 43,142,241,131,137, 43, 52,118,125, 19,202,116,169,151,208, - 91, 6,231,205,178,180,199, 74,148,149,232,186,202,218, 72, 74,151,132,237, 54,197, 96,171,156, 78, 16,151, 1, 56, 20,178, 11, - 52,173, 28,242, 53,245,121, 60,216,121,112, 39,228,197, 48,107,238, 49,161, 35, 6,159, 22, 18,109, 3, 3, 66,147,248,201, 50, -166, 39,238,141,163,177,154, 79,220,139,105, 69,170,100,136,239,167,226,157,246, 73,175,102, 64,195,121,144,201, 84, 7, 39, 95, -164,113,133, 52, 99,229, 56, 16,136,245,249,228,154,234, 4,177,253, 39, 98, 9, 22,254,114, 10,175,160,204, 11,104,224, 0, 57, -199,130,153,129,132,103, 29,118, 98, 63, 26,231, 90, 51, 28, 63, 63,214,109,109,106,112,117, 47, 54,112,208, 19, 41,169, 8,175, - 74,171,162, 15, 55, 45,156,197,154,237,195,229,230,121,247, 62, 14, 53, 50, 70, 49, 41,196,162,189, 89,162,153,226,105,248,109, -251, 10,213,177,233, 72,202,138, 93,164, 12, 73, 49, 63, 11, 29,222, 39,144, 97, 48,227,211, 23,115,103,104,203, 62, 41,222,133, -255,229,162, 56,233, 40,158,175,155,103,116, 75,113,194,190, 71,112,167,243, 8, 12,151,199,198,101, 57, 74,152, 70,120,246,236, -237, 43,117,213,217, 22,157, 35,221,201,248, 42, 71,243,101,181, 62,244, 77,206,109,251,155, 38,230, 91, 0,206,174,100,167, 97, - 24,136,122,161,164,165,133, 74, 17,234, 63,240,255,255,193, 7, 32,113,229,194, 38, 10, 52, 9,241,216,120, 54,215,109,138, 16, -220,122,107,156,216, 51,158,153,183,156,213,171,226,183, 6,213,144, 24,142, 6, 9, 85,155,223,238,133,211,228,200, 69,241,185, -177, 78,201,216,249, 90, 47, 69, 53, 23,215,142, 53, 63, 40,162,210, 85, 45, 10, 73,137,182, 2,174, 25,193, 1,104,190,237, 1, -100, 26,198,163, 21,170,132, 57,207,139,248,107, 17,191,102,105, 72,159,239,220,123,214, 48, 29, 84,147, 76,229,161, 74, 45, 26, - 75, 23,121, 67,116, 2, 65, 75,230, 68, 66,103,208,146,190, 7, 78,111,217,204, 33, 69, 9, 80,100,167,171, 45,126,191,184,110, -195,219, 22,251,175,238,220, 98,251, 17,136, 89,153,147, 6,128,125,238,135,155,118,221,135,229,253,184,163,178, 18,121, 76,189, - 98, 4,155, 74,167,201, 85,129,114,166,202,124, 94, 99,216, 76,111,193,255,107,209, 20,180, 34, 15, 60, 27,234,201, 44,157,219, - 52, 54, 56,215, 34,183,204,108, 33,215,213, 38, 32, 37, 37, 13,201,182,115,132,205,161, 71, 68, 51, 91, 45,252,250, 2,240,198, -150,198, 28,143,173,202, 23,251, 73,121,123,244,143,101, 59,250,234, 7,235, 19,128, 14, 96,103,244, 97,198,104,135,145, 91,174, -134, 76,136,204,199,118, 88, 95,197,174,243,151,139,205,238,235, 29,142,149,244,221, 41,218,139, 76,137, 4,101,156,191,103, 48, -233, 55,207, 50,105, 9,208, 17,228,193, 89,210, 26,205,240,166, 13,134,181, 97,164,254,100, 53, 25,245,190,209,126,137, 17,167, -185,226, 87, 49, 9, 50, 86, 76,216,108,170, 4,115,148, 92, 36,123, 50,113, 27, 20, 55,226,180,203,170,107,145,196,165, 92, 79, -214,227,112, 12, 4, 72,154, 89, 14, 44,167, 15,144, 33, 34,103,198,105,142, 52,105, 35,146, 84, 44, 6,244, 1,241,111, 49,244, -132, 62,102, 42, 84,234, 63,227, 3, 94, 79,108,142,242,115, 20,138, 66,250,172,147,215, 29, 70, 3, 47, 38, 62,229, 16,255,120, -251,122, 7, 99,135, 90, 33, 88, 88, 51,226, 30,216, 39, 85, 30, 40, 38, 39,228, 24, 87, 52, 35, 43, 46,161,172, 74,165,237, 43, -142, 83, 44, 5, 98, 77,223,143, 73, 93, 44,166,179,205, 63,157, 14,127, 26,102, 46,244,185, 41,116, 38,157,238,221,217,125,241, - 84, 37,128,130, 76,175,159,179,192, 64,122,216, 85, 16,154, 31,159,188, 67, 1,148, 28,229, 87, 99,200,229,116,248, 55,225,241, - 91, 0,202,174,109, 39, 97, 32,136,238,108,139, 20, 9, 70, 13, 6, 95,228, 19,252,255,127,241,133, 23, 53, 74, 52,202,213,214, -189,216,185, 45, 91, 68, 69,146, 38,132, 7, 90,150,237,116,230,204,156,115, 58,252, 85, 48,251, 29,249, 67, 79, 55,144,126, 78, -151, 33,166,208, 90, 96, 14,160,162,215,236, 84,203, 61, 29,100, 93, 80,155,147,134, 12, 88,114,157, 69,148, 2,162,237, 36,119, -138,154,222,142, 92,119, 8,177,211, 52,138,122, 28, 76,118,179,129, 63,149,131, 8, 26,226, 87,191, 87,122,137,116, 76, 84, 45, - 62,117,237,176, 98,215, 4, 4, 4,153, 82,220,178, 80, 38,172, 61,255,160,172,182,205, 54,136,201, 3,245,176,130, 79,100, 20, - 52, 16, 28, 94,247,150, 79,212,115,197,163,221, 95, 35, 75, 73,141,129, 15,231,239, 22,235,219,241,200,206,205,179,107, 80, 25, -213,132,101,166,137,184,161, 55,149, 70, 76,198, 49, 56,220, 87, 89, 9,150,102, 78,236,255, 43,178,180,207,250,212, 50,229,241, -196, 81,217, 59, 47,161, 79, 88,170,247,254,189,129,215, 54,180,211, 66,245, 10,211,183,176,105, 10,154, 67, 47, 46,134,184, 62, -163, 97,255,134,108,117,139,176,181,117,188,215,106,195,171,212,165,255,150,243,164,198,166,223, 9, 63,201,243,192, 41, 19,146, -193,253,218,181,207,188, 88,129,175,130, 89, 58,140,160,196, 36, 48,189,129,155, 92,214, 15,243, 55, 20, 39,165,100, 49, 38,115, - 11,232,232,202,228, 64,103,236, 50, 88,120, 64, 82,165,210,247,215,143,240, 54, 30,205,214,221,217,173,159, 4,106,143,242,228, - 64, 21, 12,128,233,120, 58,123,153,129, 0,146, 41,145, 84, 9,145,144,200,246,144,159, 71, 53, 49, 18,241, 74,167, 35, 57,156, - 39, 33,107, 42, 56,108,236, 92, 2,101, 13, 20,142, 89, 12, 18,233,216, 56,132,101, 4,248, 1, 26,164,137,137,242,233,147,108, -215,110,156,132,155,196,210, 81,203,240, 95,100, 4,162, 85,109,121,178,114,235, 79,242, 29,169, 73, 60,152,127,138,223,174,226, - 35,110, 80,191, 50,161, 66,239,158,246,111, 99, 29, 64,226,192,154, 98, 99,194,220, 64,179,178, 56,248,208,222, 28,152,191, 18, - 13,128,219,205, 94,204,206, 85,190, 77, 98, 73, 76, 45,178,144,185,133,132,184,115,178,137,185, 46,243,206,238, 90, 22,216, 39, -100, 38, 51, 71, 53, 71, 4,119,248, 99, 32, 69, 95, 87,103,147,249,226, 41, 67,189,225,247, 81, 28,189,194,184,175, 24,169,193, -221,101, 95, 33,247,120,113, 90,251,205, 79,181, 66, 62, 30,195,187, 26, 69,243,227, 97,159,159, 35, 35,195,151, 0,148, 93,201, -110,194, 48, 16,181, 77,128, 34,209,130, 10, 7,164,170,151,170,199,254,255,199,244,192,165, 61, 80, 37, 18, 72, 73,104,156,120, -105,102,198,118,236, 18,186,112,134, 40, 64, 60, 30,191,121, 75,224,207, 80, 30, 41,143, 26,243, 31,112,255, 56, 1, 97, 56,200, - 6,210, 9, 31, 2, 14,109, 72, 58,243,195, 8,232,133,193, 38,145,172,189,201,165,145,206, 92, 22, 27, 42, 13, 84,122,151,106, -175, 56,143, 83, 8,201,236,201,167,144,184,146,109, 60,209,231, 18, 77,243,248,102,216, 0,208,250,113, 2,201, 80,128, 42, 1, - 14,159, 57,121, 21,204, 91, 81,156, 8, 46,238, 8,253, 19,222, 72,152,167,120,222, 61,237, 63, 94, 41,215,120, 54, 91,117,147, - 2, 54, 3, 3, 32,111,135,199, 77, 78,102, 35, 66,156,154,118, 95,126,190,236,214,135, 99,157,159,155,202,234, 21, 51, 45, 51, -210,217,134,184, 59, 37,124,166,141,236, 36, 69,132,104,135,158,189,251, 39, 3,157, 69,146, 12,162,241,220, 1, 18, 40, 54, 51, -145,101,176, 69,182,157,169,149,110,113, 68, 86,145, 46, 17, 51, 15,239,165,218, 78,217, 89,234,165,176,165, 6, 91,151,237,122, - 1,242,163,206, 30,101, 51,197,223, 88, 70, 10,245,107, 99, 43, 51,194, 30,115, 95, 16, 53,113,108,142, 79,206, 13, 30,244,250, -250,189,192,158,175,108, 0,133,159,115,182,186, 85, 69,214, 54, 42,163,164,105,101,217,102,185, 57, 85, 39,154, 46, 70, 69, 42, -236,231,214,140,157,174,195, 51, 9,186, 77, 19,175,105, 18,114,184, 40, 31,238,111,211,140,173, 51,167,129,178, 38,175,114,135, -120, 12,148,140,132,219,136,101, 75, 68,235,129, 59,217,133,131,146, 38, 94, 65,205,145,200,143,231, 85,225, 39, 67, 44, 33,211, -120,171, 42,139,209, 24, 32,237,232, 47,254,184,125,120, 43,222, 49,141,160, 95, 58,194,255,218,214, 38, 24,145, 99,190,135, 94, - 93,248, 36, 74,191, 90, 81,197,131,153, 65, 8,122,235, 6, 62,210,247,239,164,201, 50,132, 58, 25, 89,235, 28, 66,197,112, 32, - 14,132, 54, 24,115,100, 78,133, 9, 14, 80, 37,227, 69, 41,235,131,110,149,214,210,128, 33,178, 70,251,125,133, 44, 34, 70, 86, -245, 60,242,105,142,156,205, 3,164, 31, 17,114,120,138, 49,143, 20,119,151,159, 65,137,163, 81,189,251, 37,193,137, 39,163,205, -225,122,134, 9,126,193,171,236,139,123,138,201,216, 49, 54,125,248,151,136, 61, 56,216,200,124,163,205, 92,222, 25,196,183, 37, -197, 61,126,255,112,222,228, 9, 84,111,237,245, 13,234, 47,175, 47, 1, 40,187,154,158,134, 97, 24,106, 39, 29,219, 64,124, 74, - 76, 66,156,184,140, 35, 71,254, 63,127, 3,137, 35, 66, 19, 19,218, 7,237,150,164, 53, 73,236,164, 25, 99, 8,122,159,218, 53, -181, 19, 63,251,189,199,252, 85, 38, 52, 35,246,234,124,120,248,149, 29,186, 99,121, 8,194,239,202, 64,188,100,233, 20,214, 73, -207,181,251,105, 3, 99,111,179,150, 1, 31, 86, 16, 75,140,149, 93, 32, 53,225,148,121,156, 56, 43,101, 3,143, 26,144, 72, 11, - 8, 53, 16, 85,148,195,137, 13,172, 72, 85,213,194, 80, 85, 98, 15,133, 82, 72,230,213, 81, 73,136,204,135,128, 53,198, 23,181, - 58, 42, 72,186,182, 30, 64,112,193,142,202,145,216, 16,203, 98,198,232, 5,154, 27,119, 82,169,251,235,179, 48,240,231,194, 48, -168,191,193, 40,212, 7, 50,120, 14, 5, 8,147,245, 72, 50,243, 19,139,182,106, 30,162,194, 3,222, 2,251,215, 32,189,243, 75, -128, 9,168,171, 65,117, 54,214, 35, 77,107, 7,181,237,222, 76,251, 66,240, 30,219, 3, 67,105, 6,168, 6,104, 1, 48,107, 97, -101,169,178,161,135,125,123, 90, 77, 46,142,181,214,239, 11,251,246,185,117, 69,111,167,253,231, 54, 3,137, 78, 53, 74,184, 60, - 79, 94, 30,133,202,137,142, 20, 19,137, 19, 54,237,107,136,177,250, 88, 85,236,170,210,197,190,136, 13,220, 63,236,129, 77,200, -134, 25, 89,245,191,175,135, 57, 80, 40, 11,194,149, 56, 13,138, 40, 65,106,216,246,123, 3,210, 55,140, 30, 51, 94,226, 31,193, - 88,135, 72,101,186, 42,130, 68,224, 63,197,193,147, 28,100,196,197, 87,228, 49,138,227, 8, 72, 7, 40,210, 83, 53, 22,102,217, - 73,243, 61,249, 2,247,106,241,225,209,182,206, 78,111,167,243,229, 60,232,231,101,159, 41,161, 86,101,235,143,157,156,149,115, -170,255,155,231,199, 23, 93,208, 5,112, 32, 84,113, 14, 45, 26,132, 70,140, 90,110, 86,129,164,228,191,113, 91, 15,111, 30,236, -221, 35,172, 27,218,232, 96, 43,180, 9, 88,188, 63,203,251,218, 83,213, 96,150,224, 22,117, 55,123,109,159,159,172,109,186,166, -118,174, 1,227,127,109, 88, 54,146, 71,224, 49,105, 62, 20, 40,121,194,114,145,118, 92, 15,177, 56,131, 99, 49, 70,253,243,169, -185, 36,177,254,129,246, 41,109, 87, 37,114,223,152,215, 2,123, 73,139,189,212,241, 7, 30,159, 84, 75,180,155,220, 75,209,131, - 67,230, 36,186, 80, 13, 11,209,170,171,113, 53,182,157,225, 76, 53,212,163,150, 28,253, 94,104,252,231,250, 18,128,178, 51,217, -105, 24, 6,194,176, 61, 73,151,180, 32,246, 69, 66, 32, 78, 72,108, 7, 36,196,251, 63, 1, 15,129,232,129,178, 21, 40, 33,139, -157,193, 30,175, 9, 20,149, 30,122,136,170,170,106,236,223,241,248,159,239,183,250,238, 45,194, 13, 91,180, 98,116,165,159, 47, - 62,148,248, 77,229, 35, 43, 29,143,107,248,113,121,203, 3,240,200,104,102,230, 98, 99, 4, 31,252,233, 81,107, 60,152, 59, 5, -173,249, 0,193, 15,102, 76,241,126, 22,129,203,238, 64, 83,124, 87, 2,159,154, 28,122,158,220,156, 92, 79,158, 39, 64,161, 13, -141, 45,241, 91,215,168,186, 88,139,202, 80,201,144, 83,219, 46, 74,144,121, 77,219,203, 20,137,196, 76,224, 48, 66,253,129,122, -159,125,213,165,148,167, 59,107,135, 27,227, 44, 77,212, 45, 83,147,178,135,132, 85, 35,173, 39,167, 57, 79,220,113,107, 63,130, -123,116, 58, 74,224, 63, 15,239,224, 78, 53, 71,140,109, 41,137, 79,146,222, 0,134, 41,188,213,106, 14,202,123, 33, 31, 8,171, -112,158, 13, 46, 55, 7,199,235,217,209,106,255,108, 99,120,177,154, 93,141,179, 45, 9, 83, 81, 79,132,122,118,147, 35,128,227, -253,209,230, 74,246, 53, 43,158,222,170, 41,109, 62, 32, 34,243, 45,239, 82,240,195, 84, 68,101, 28,109,183,231,218,186,163,203, - 98,186,117, 66,167,124, 73, 29,212,197,214,198,233,227,123,106,115, 54, 24,232,250,176, 51,240, 98, 43, 50,211, 57,119,209, 2, -211,117, 62,111, 91, 59,240,167,190, 75,227,208, 9, 97,155,136,173,249,201,218,244, 65,100,241,152,107, 88, 23, 92,101,183,146, - 16,196, 35,200, 68,224, 92, 4,113, 55,160, 47, 61,227,136,139, 77, 9,123,220, 49, 49, 66,106,100,140,185,213, 23, 43, 89,169, - 63,224,229,243,133, 89, 80,170,237, 1,179,125,179, 12, 93, 96,148,121, 62,106, 76,233,137,251, 2, 2,170,157,126, 33,168, 61, -133, 60, 54,182,242, 79, 54,122,220,235,111,127, 84,121, 46,139, 82,214, 82, 20,217,238,101,121,112,202,243,185,102, 62,169,255, - 94, 45,254,165, 62,100,231, 57,103, 57, 22,239,175,205,124,198,167,119,242,238, 86, 84,121, 83,207,177, 44,116, 24,179, 38,172, - 8,228, 81,240,109,220,121, 20,224,144,166,218, 30, 6, 44,186, 61, 62,235, 16,220, 91, 15,239,190, 42,192, 98,207,251,223, 84, - 2,110,137,131,224, 89, 35, 92, 51, 84, 18,183, 62,119, 37,126, 57,101, 15,248, 4, 92,208, 92,186, 80, 16,219, 54, 42,255, 18, - 20,104, 97, 62, 44, 80,196, 65, 31,195,222,136, 22,241, 38,254,218,241, 96, 69,141,135, 37,127,247,183, 0,148,157,207,106,219, - 64, 16,198,119,103, 37, 91,138, 28, 7,151, 6, 28,122, 44, 62,244,222, 23, 40,244,253, 15,133, 62, 64,105,155, 56, 16,155, 54, -141, 37,239, 74, 59, 83,237, 95,173,164, 38,164,198, 7, 99, 48,172,188,222,177,102,230,155,223, 39,172, 53,182,115,113, 28,110, - 21,255,185,224, 16,250,129,191,120,150,249,188, 1,157, 52,159, 33, 88,234, 50,158,208,241, 33, 29, 61,118,165,209,168, 15,195, - 81,163,151, 71, 38, 36, 36,238, 28,214,182,195,157, 52,136, 13,248, 56,229, 4, 14,242,238, 20, 89,222,181,137, 89, 33, 60, 19, -254,112,146,190, 61,220,153, 70,173, 16, 26, 17,130, 34,210,213,238,211,189, 89,102,185,214,253,223, 67,151,227, 35, 90,222,128, - 36,148,182,154,212, 50, 46, 45,215, 41, 51,250, 2,218, 75,245,253,120,106, 59,220,174,202,119, 87,171,237,170,184, 90, 44, 42, -200, 86, 4, 25, 65, 97, 10,249, 60,143,182,171,246,174,182, 75,188, 62,162,226, 80,207,200,121,207,221, 38,179, 36, 15,120,107, -226,187,216, 20,121,181,204,159, 90,218, 55,234, 1,241,142,177,143,197,242,211,251,141,168,184,206,250,213, 98,173,169,182,154, - 36,145,195,238,122,253,249,205,230,203,225,247, 79, 98,151, 29,237,182,235,155, 77,185,191, 63,125, 59,158, 31,109,190,142, 51, -137,228,255, 28, 12,175, 5, 18, 33,131, 49,218, 30,107,102,186, 16,208, 63,151,185,241,114,236, 51,158, 34, 23,199,147, 48,165, - 50, 31, 9,156, 52,100, 92,128, 79,253,175, 93, 56,177, 72,147,128, 63,229, 73,125, 37,141,239, 52, 25,146,114,158,171,200,249, -212, 22,109,118,153, 56, 77,217,157,186,125, 16, 20,165,225,158,123,171,118,175,125,140,193,157,147,143,229, 0, 65,214,197, 98, -251, 63,216, 50, 13, 53, 79,140,160, 26,235,152,224,253,200,250,235, 41, 22,165,182,129, 32, 49,255,115, 47,244,184,134, 96,222, -190, 44,215,181,161, 34, 91,136, 60,243,131,161,204,147, 43,121,131,234, 34, 43,251,239, 76,117,202, 96,179, 80, 86,215, 31,218, -155, 29,107,158, 88,171, 73,157,141,245, 80,211,160, 60,131,148,178,254,213,213, 7, 86,255,209, 15, 63,244,253, 87, 84,253,167, -207,168,140,254,157,180,178,176,204, 46, 46,138, 5, 35, 92,244, 96, 6, 26, 90,170, 44,110, 41,133,100, 41,204,127,193, 8,102, - 75, 99, 46,233, 11,197, 25, 61, 77,112,193,219, 5, 4,234, 20,119, 56, 65, 8,112,139, 48,243,158, 42,221,241,249,186,123, 0, -227,224, 88, 91, 57,161, 25, 15, 63,175, 74, 92,180,212,206,143,234,228,244, 80,200, 54,105,198,144, 49,155, 46,204, 4,255, 36, - 95,201, 32,235, 28, 31,251, 21,143,191, 2,112,118, 53,187,109,195, 48, 88,148, 28,197,104,131, 13, 5,138,157,182,167, 24, 48, - 96,143,209,103,237,131,116,192,238,189, 21, 24, 80, 52, 75,186, 38,141, 45,139, 44, 73, 73,142,236,116, 69,209, 32, 7,159, 12, -219, 34, 40,146,250,126,154,250,241,106,210,160,125, 85, 31, 89, 85,105, 48,207, 26, 79, 19, 61,149,230,181, 28, 83,101,207,140, - 68,206, 75,203, 88, 84,243, 85,231, 78,148, 83, 69,177,195,168,194, 36, 42, 80, 37, 11, 10, 23,185, 53,147,184,129,110,188, 49, - 38, 41,240,129, 10,145,138,176,152, 40, 79,176, 22,249,248, 43, 9,119,151, 11,155,179,129,218,223,232,140, 80, 96,197, 13, 36, - 29, 26,151,201, 23, 26, 6,206, 54,235,110,237,197, 65,112, 37, 53,143,120,224,164,140,129, 8, 30,100,150, 32,239,176, 84, 69, -155,189,132,182, 48,229,109, 18,210,210,116,255,143,226,175,205,246,102,179,245,198, 94, 46,151, 23,141, 96,208, 91, 47, 91,234, -243,128, 16, 67,167,144, 33,154,194,213,211,196, 70, 73,224, 38, 76,129,177,182,108, 0, 56, 13,250, 58,245,199,130, 90,105, 57, -111, 46, 92, 71,180,238,226,150,144, 43,247,239,222, 95,253,252,246,251,225,111, 12, 70,156, 50, 69,186, 82,222,159, 55,180,199, - 3,183,215,251,213,167,213, 15,127,126,221,239, 66,135,173,115,207,157,253,243, 24,118, 21,212,235,195,198, 35, 77,245,106,109, -105,185,249,239,213, 67,128, 87,229, 16,196,123,248,179, 55,103,158, 47,184,142,105,178, 34, 82,101,120, 77,163,225, 27, 20,219, -166,210,213,145,130,177,146, 52,145,142,216, 83,205,147, 69, 1,167, 79,159, 89, 72,156,220,207,218,243, 48, 4,241,174,161,153, - 88, 21,204,170,176,105,116, 85,223,126,132,200,148, 45, 4,142,157,195,209, 18,232,104,247, 88, 13, 1,142,116,120, 76,103,201, -122,176, 11, 25, 49,108,149,202, 11, 53, 70,218,229, 97,141,194, 33, 19,111,118,146,220, 99,141,182, 31,121,103,110, 65, 73, 56, -158, 10, 80, 65,234, 57, 75,168,167,221, 96,111,119,119, 95,253,151,165,243,157,235, 7,112, 92,149,211,102,141,216,131, 63,112, - 41, 98, 22,222, 58, 14, 92, 8,150,122, 1, 82, 62, 33,135,237,246,158,211,250,192, 93, 69, 8, 66, 60,228,192,143,169,145, 48, - 52,114,149, 12,197,170, 30,155,205, 2,132,148,152, 63,180, 77,167,114,105, 2, 6, 5,214,137,255, 65, 13,192,107,165, 14, 85, -180, 23,152, 67,101,114,251,132, 17,253,162, 29, 80, 58, 33, 40, 82,251,227,130, 22,116,192,200, 87, 58, 45,167, 16,230,112, 26, -170,103, 59,245, 35,243, 29,159,226, 94, 10, 26,107, 7, 68,251,214,182,241, 86, 47,210,135,254,180,142, 62, 8, 54,239,189,191, - 23, 1,104,187,150,156, 4,130, 32,218,221,243, 1, 52, 96, 12, 55, 48, 49,113,225, 25,220,235,202, 67,120, 75, 19, 19, 87, 30, -193,133, 23, 64, 65, 65,134, 95, 51,211,221,118, 85,245,111, 24,226,198,184,100, 3, 76,160,171, 94,189,126,245, 94,222,222, 63, -140, 45, 68, 31,155,253, 77,188, 62,101,100, 76,211,109, 1,194,213,125,227,111,107,157, 84,210,253,222,164,158,116, 94, 0,158, - 49,165, 33, 68,241,164,202, 83, 40, 54,167, 13, 41, 20, 20,176,204, 31, 8, 67, 77,192, 17,169, 36,138,112, 8, 15,254,200, 66, -251, 90, 0,239,149, 5, 49, 67,226,190, 36, 40,157, 18, 23,142,209, 91, 72,100,206, 59, 16,180,208,200,249,234,151,247,215,121, -189,189, 28,177,235,243,139,181, 28, 18, 75, 94, 55, 18, 45, 22,114, 72,244, 65,207,251, 61,211,118,138,149, 0,219, 13,225,241, -111,212,101,151,152,212, 97, 43,199, 26, 30, 86, 77,101,109, 1,179, 36,189,188,215,194,147, 43, 75,186,227, 96,146,151,233, 14, - 17,239,240, 6,169, 38, 60,128, 23,170,236,103,112,173,202,123, 34, 27, 20,121,181,107,118, 13, 56,192,217,143,123,184,185,154, -240, 10, 61,208,128,168, 16, 56, 66,213, 32,122,211,246, 0,111,164,121,155, 45,231, 13,128,142,113, 89,148,121,111,177,110,170, -157, 14,187,254,127,241, 46,214,254,248,209,152, 50, 36,223, 2,242, 75,245,158,118, 57,180, 82,113, 82,132,228, 77, 12,112,113, - 85, 76,120,253, 31, 75, 12,100,188,193, 32,247,112,209, 19, 54,142,191,224, 58,105, 0,168,132,114, 14, 33, 36, 15,231, 43,185, -114,107, 56,137,211, 97,122,220, 68, 71,246,200, 89,172, 90,188,123,235,230, 65, 79,228, 86,130, 28, 0, 84, 50,226, 48, 62,153, -234,177,243, 47,160, 69, 63,239,150,206, 93,149,119, 9, 32,116, 6,176,176,111,234,149,107,105,145, 9, 86,126,203,169, 61,254, - 27, 51, 91,126,196, 20,183, 24,106, 13,139, 73, 70,213, 89,206,119,172,153,170,197,184, 60,149,246,143,108, 11,186,146,166,250, -178,224,195,148, 27,157,151,232, 17,213,167, 24, 53,165,247,172, 70, 54,166,250, 84, 22,176,239,107,176,255, 81,144, 16,142,186, - 77, 82,241,152,176,135,213,229,202,211,251,241, 52,240, 40, 19, 92,133,221, 47,212, 12,137, 84,195,241,171, 86,209, 79, 58,250, - 72, 35,161, 92, 12,252, 46,253,254,232,246,238,254,249,233,113,190,152, 16, 25,143,192,239, 0,125,235,240,187, 67, 80,155,105, - 14,202, 50,111,219, 17,153, 22,114,136,224,189,204, 10, 6, 9,142,116,145,141,132,100, 49,216,218, 41,138,241,163,143,241,127, - 97, 62, 63, 2,176,118, 53, 61, 9, 3, 65,116, 63,192,130, 1,212,131,137,127,193,223,224,197,120,240,255, 95,141,119, 77,192, -128, 64, 11,133,118,103,220,157,217,217, 46, 31,145,152, 72, 54,132,148, 67, 75, 83,102,103,222,188,121,207,156, 59, 7,158, 44, -233,109,157, 36,140,135,139,163,185, 35,139,165,110,248, 43, 73,209,243,206,238,178,206,152,200,111, 59, 76, 77, 51,151,117,141, -130,143,135, 52,207,228,160, 74, 90,247, 8,208, 21,131,152,128,186,232, 3, 66, 45,252,152, 0, 98,180,159,103, 43, 6,126, 7, -140,114,221,196, 51, 11,166, 12,188,128,174,102,211,108, 22, 65,149, 80,189,175, 84,127, 48,117, 1,137,100,210, 39,237, 97,104, - 57,223,240, 91, 92,143,152, 54, 3,226,244,169,110,168, 7,119, 20,217,117,136,101,250,134,124,114,156, 20,152, 72,234,193, 99, - 50,108, 98, 5,174, 68,136,100,211,250,253,175,112,158,201,242, 20, 56, 1,139, 77, 28, 88,181,227,171, 64,238,223, 59, 66, 80, -149,122, 26, 94,223,221,247, 63, 22,213,102, 7,156, 39,214, 13,238,136, 55,225, 75,107,159,140, 65,235,102,235,237,155, 47,216, -149,122,124,152,140,134,197,114, 85, 55,117,211,254,199, 35,136, 89,186,122,149, 77,123,181,100,213,235,111,155, 99,233, 78, 12, - 42, 38,224,172,238, 26, 53, 90,212,183,129, 61,151,104,162, 57, 18, 62,252,231,150,132,211, 33,206,191,169, 40,187,206, 15,145, -192,126, 17,161,134, 4,233,164, 84,157,213,119,229,121, 11,206,139,152, 22, 58,202, 74,147,204,228,209, 44, 82,134,201, 74,119, -206,216, 92,105, 89, 16,117, 1,151, 76, 71,103, 7,153, 40,165,226, 84,116, 18, 91,215,241, 62,217,191, 47,106,215, 39,250, 99, -216,149,156,238,219, 98, 50,188,229,163,178,235,105, 29,247, 40,204,189,244,130, 36,171,225,191, 31,144,155, 9,121, 7, 6,198, -111, 40,223, 26, 5,164,108,220,124,187,237,103, 91, 90,211,215,182, 7,174,134,114,174,170,133,169, 86,182, 92,154,114,213, 86, -179,122, 59,109,170, 57,150,115, 88,127,249,111,113, 59, 15,110,171, 44,214,237,179, 35, 38, 71, 38,109,177,120, 7, 0, 15, 61, - 53, 76,236,141,105,209, 74, 48, 2, 72,211, 12, 0, 26,157,156,243,244, 73,120,202,146,206,163,132,151,126,251,101,224,208, 90, -251,252,242, 58, 26,143,143,117,234,186,204, 61,231,110, 24,154, 97,212, 71,113,240,108,112,199, 14, 70,150,115,153,130,183,253, - 54, 78,233,168, 97, 49, 74, 4, 27, 95, 15,161,186, 12,253,159, 9,193,127,127,253, 8, 64,219,181,228, 52, 12, 3,209,140,227, - 84, 41, 45, 5, 33,177, 98,129,196, 37, 88,112, 38, 14,128,196, 97,129,109, 68,127, 52,205,199,181, 7,123,198,118,156,210, 74, - 72,136, 46,171,170, 74, 27,103,252,102,252, 62,242,228, 54, 2,167, 55, 77,248, 77,147, 46,194,207,160,124,130, 40,109,128,148, - 95,159,121,148, 2, 33,128,201,199, 81,198,153, 22,132,155,238,230, 79, 64,241,195,209, 13,130, 90, 96, 18,245, 5,130, 65, 56, - 37, 3,223,222,133, 75,101,122, 14, 41, 0,165,103,229,187,138,192,252,103,183, 34,121,207,214,222,182,143,189, 5, 25, 62, 77, -229,244,105,126,187,173,171, 15,204,102, 25,212,210,229, 15,203,129, 18,103, 87, 99,110,215,181, 20, 89,163, 76, 78,147,166, 96, - 10,134,124, 70, 58, 9, 30,141, 34,252,105,228,253, 2,179, 60, 95,148,210,150,212,170, 87,141, 30,108,188,212,153,205, 28,142, - 87,243,192, 46,135,164,160, 71,102, 11,219,135,181,148,128, 72, 37,207, 54,207,238,142,221,223, 92,188,125,110,187, 78, 57,229, - 24,139,184, 40,236, 1, 92,228, 16,218,143,238, 20,190, 55,170,202,178, 71, 33, 31,238,174, 45,244, 88, 45, 91,215,133, 39,169, - 29,230, 15,245, 29,146, 96,113, 79, 9, 37,129,219,130,206, 28,103, 5,144,252,223,245, 69, 74,231, 98,236, 25,192,202,123,230, -194,155, 16,186,133,152, 82,170, 60, 24,227, 32,184, 84,191,193, 54, 69, 87,229,101,221,213, 33,153, 33, 50,173,195,119,179, 79, -237,232,188, 31, 6,102, 14, 77,232,125,108,171, 31, 27, 26, 6,213,232, 39,114,105,209,129,113, 36, 88,212,223, 82,126, 14, 14, - 2,107,195,156, 90,122, 10,128,219, 16,113, 32, 77,169, 64,182, 51,140,179, 76, 55,142,242,220, 15,219, 61,118,170,235, 45,202, -246,122, 90,198, 46, 62,228, 74, 7,103,158,209, 80, 1, 6,186, 62, 14, 26, 47, 11,202,157,165, 0,141, 17,242, 90,234, 94,235, - 50,159, 20, 80,232,174,166,189, 64, 31, 68,214, 75,131, 82, 30, 56,142,202, 34,119, 67, 38,239,251,173,113,182,192, 61,186,145, - 61, 11, 10, 44, 46,211, 6,211,100,162,116,218,252, 35, 93,149, 92,130,120,139,229,220, 28,225, 50,224, 68,132,240,156, 73, 14, -103, 9,129, 38, 41, 71, 17,185,219,171,100,141, 64, 66,139, 9, 54,203,237,254,235,245,229,121,179, 89,179, 98,102,124,164,115, -124,133, 22, 74,180, 90,195,249,246, 1,143,223, 26, 61,181, 13, 53, 88,233,107,185,171,226,198, 63, 47,230,107,189, 74,142,209, -241,255, 32,252,183, 0,164,157, 77, 83,194, 48, 16,134,119,211, 72,139, 40,234,205,209, 25,245,228, 95,241,255, 31, 61,170, 7, - 15, 58, 10, 67,129,126, 36, 89,147,221,132,182, 84, 28, 71,129, 11, 31,135, 50,180,203,126,188,251, 62,250,219,128,126,128,146, -245,171, 99,112,137,132,251,171, 40, 47, 39,108, 95, 83,159,204,163,156,143,235, 17,207, 96,165,130,143,100, 4,230,197,211,104, - 2,131, 12,153, 71,220, 87,137, 73, 56,180,188, 96, 21, 90, 97,236, 31,102,187, 90, 21, 57,206,179, 61, 21,137, 91, 7,231,245, -128,167,103, 55,231, 23,183,215,245,230,109,229,127,236, 66,163,237,146, 56,103, 27,222, 82,226,131, 87, 21,147,113,196, 98, 87, -160,219, 31, 44, 64, 4, 22,138, 64,196,106,211, 28,212,213, 44, 87, 19,245, 94, 54, 79,109,187, 29,250,175,226, 97, 77,149, 74, - 31,195,209,208,169,159,206, 79,210, 91, 5, 55, 64, 78,117, 86,100,122,134, 49, 93, 89, 84,245,227,203,231,186,106,182, 53,109, -195,190, 34, 28, 9,181,217,144, 38,220,212,246,181,181, 79, 0,119, 0, 15,247,151,211,147, 41, 53,213,106,181, 94,146, 45,147, -100,243,159,212,239, 93,139,201,240, 17,250, 71,142,120,172,194,195,223,167,153, 42,125,169,225,112, 30,118,151, 49, 52,141, 83, - 54, 42,147, 65, 9,136, 76,160, 78, 29,103, 9,142,110,136, 89,130,142,139, 20,241, 65, 44,122, 16, 27,116, 74,160,132,184, 52, - 45,176,133,152, 20, 72, 88,236, 87,208, 97,110, 79,221, 54, 85,114,224,219,117,218,145,246, 38, 85,137,191, 1, 48,166,184, 69, - 99, 86,140, 45, 35,217,177,138, 43,169, 73, 3, 16,144, 28,254, 52, 52,138,163, 60, 36,245, 75,180,207,144, 82,132, 71,180,187, -105, 84, 7, 47,219, 5,119, 75,105, 14, 64, 2, 38,118,130,183,198,193, 31, 31, 63, 49,161, 18, 13,190, 75,153, 2,211,234,194, -204, 39,181, 42,161,124, 6,165,253,107, 46,203,193,112, 14, 32,250, 75,219, 58,179,245, 97, 29,170,133,105,171,224,113, 96, 66, -221, 23, 45, 52,187, 5, 92,183, 55,139, 30, 91, 54,166,171, 79,229, 69,190,169, 54,210,114, 15,150,179,104,233,187,107,193, 65, -207,229,120,168, 67,199,193,162,127,106,212, 10,143,145,197,248, 50, 82,245,223,114, 93, 46,181,142, 5, 84,111,247, 94, 84,114, - 99,113, 20,253,208, 46,255, 65,191,136,195,193,128, 26,116, 94,121,169,197, 54, 58,250,161, 70, 60, 97, 74,158,136, 14, 39,118, -127,200,168,252,237, 75, 0,210,206,173, 39, 97, 32,136,194, 59,219, 90,138,183, 39,163, 24,245, 31,249,243,125,246,197, 16, 98, -162, 49,162, 66,233,182,187,118,110,187, 91, 69,193,248, 72, 10, 1,146,102,186, 51,115,206,119,114, 62,112,176,219, 3,162,118, -247, 18,227,247,132, 63, 84,121, 37,218,113,127, 36,155, 14,195,121,118,134,234,122,144,141,166,133,144,120,197, 41, 25, 49, 50, -222,176, 72, 19,212, 96, 84,215,149,223, 44,190, 80,114,118, 3,199, 20,179,197,142,180,146,252, 2,198, 52,190, 14, 39,209,168, -120,232,208, 41,210, 33,248, 38, 80,222,188, 60,111, 75,230,159, 28,151, 6, 90,203, 10,147, 13, 93, 42,149,209,216,234,172,121, -248,109,206,192,213, 81, 93, 77,236,253,235,234,129,176,192,189, 66,196,250, 61, 28, 76, 48,110,211,242,197,124,167, 83,248,169, -122,166,150, 36,126,183,190, 63,173,166, 23,245,193,188,129,185, 9,119,207,111,215,221,122, 56,222,172,135,106,142,189, 72,104, - 81,126,136, 15,210,101,107, 22,244, 64, 58, 55,230,246,230,114, 54, 59, 25,202,230,226,241,253,245,165, 89,145,231,214,253,187, -184,155, 44,215, 73, 90, 13,140,225,181, 53,105,102, 14,173,113, 30, 74, 11,103,147,178,117, 20,168,200,121,110, 94, 58,121, 38, - 18, 42, 25,157,198,235, 33, 9, 98,184, 78, 71,175, 18,179, 98,146,232,197, 68,171,145,215,187, 49, 29,222,189, 34, 31,133,223, -158, 9, 36,200,187, 28, 89,170,146,180, 13, 58,247, 6,149,124,248,109,102,246, 96, 82,165,143, 22, 7,201,218, 22, 66,142,108, -248,216,249,132,231,115, 43,128, 73, 14, 94, 66, 48, 16, 85,121,144, 71, 17,135,133, 83,127, 40,170, 28, 9,141,140,145, 5, 16, - 7,152,160,195,118,207,180, 98,144, 12,193, 36, 36, 71,149,130,165,175,165, 5,191,195,127,133, 11,176,170,119, 31,190,121,194, -224,190,162,238, 17,209, 52,220, 35, 64, 99, 36, 10,151, 29,250, 6,204,167, 91,225, 9, 39, 80, 38, 17, 10, 60,168, 43, 22,131, -170,175,108,229, 58, 23, 61,236,249,189, 3,116, 84,177,233, 66,216,180, 27,155,173, 59,126,148,103,143,237, 64,217,224,219,195, - 87,153, 31, 31,225,101, 93, 75,247, 69, 95,240,248,135, 53,219, 94, 80, 86, 25,238,237, 27, 84,116, 7, 25,187,136,211, 39,216, -178,236, 13,185, 40, 28,247,226,128,129, 89,141,206,223, 27,183,142,103,179, 66, 81, 7,194, 90,207,160,246,102,143,194,251,203, -186,139, 63,248, 41, 0,105,103,147,211, 48, 12, 68,225,177,155,166, 80,170, 10,177, 1,137, 61,135,224, 14,220,154, 43,176,237, - 14, 84,117, 83,241, 83, 32, 78,236,193,243,231, 36,109,165, 86, 66,234,174, 82, 42,165,201,243,204,155,231,207,213, 88, 65,176, -119,197,206, 80,121, 60,161,242, 46,157,233,216,168,202, 59, 87,118,159,219, 57,192, 58, 77,183, 70,184,255,169,196, 55, 89,113, -143,138,242, 75,176,151,118,230,111, 58, 94,200,233,165,242,177,176,244, 68, 44,120,122, 23, 93,170, 52, 64,229,229,113,176,115, -237,109,158, 70,215,245, 19,115,255,236,244,119, 50,209,126,117,162, 11, 21, 19, 37,174,193,253,240, 25,170, 51, 67, 14, 4,250, -208,125,184,175,235,155,171,233,243,230,227,109,112,219,218, 51, 58, 35, 63, 54, 34,211, 32, 42, 48, 29,226, 95, 13, 95,211, 89, - 6,113,215,194, 93,254,221,197,229,246, 51,172,227,247, 10, 96,251,222,229,126, 98,201,239, 83,195, 22,195,142, 91,141,134,175, -249,232,234,167,135,219,122,121,113, 85,195,111,211,172, 94,119,235,134, 32,198,173,181, 8,255,145,120,111,193, 77,217,225, 53, - 7,127,225, 97, 57,205,101,123,149,213,243, 43, 11, 82, 7,243,218, 47,230,254,101,227, 12,218, 39,126, 27,195,234, 64, 78,173, - 64,113,216, 20,129,168, 41, 26,254, 11,135, 85,147, 67, 60, 18,192,151,204,140, 46,234, 90,197, 11, 12, 11,212,123,119, 99, 12, - 33,150, 42,161,100,189,248,193, 75,149,156,113,173, 82, 95, 34,126,106, 55, 96, 25,189,246,202,223,245,121,111,194,153, 41,253, -215,232,184, 22, 23,118,253, 30, 30,113,109, 68,229, 25,201, 49,225, 43,139,196,115,167,153,160,167,228,155, 51,227, 64,241, 94, -194,180,101,142,182, 41,187, 12,156, 77,202,132,187, 65,219,123,163,208,202, 60,133,164,218,148, 91,219,150,208, 51, 20,226,173, -154,252,212, 71,166,132,208,253, 38, 50,119,155, 82,192, 24, 48,236,132, 73,144,139,126, 54,205,162,226,213,120,230,213,166,112, -184,234, 57,139,232,141,159, 10, 49,103,220,177, 24,199,126,117,156, 14,228, 11, 75,171, 54, 30,128, 71, 16, 71, 23,209,216,204, -244,231, 70, 95,150, 4,196,210,202,136, 16,197,212,151,222,136,167, 75,227,120,108,102, 9, 78,119,108,194,101, 94, 26,129,176, -230, 19,162,159, 56, 50,182,218, 48,217, 79,247,224,140,242, 60,185,147, 14,208,123, 53, 73,225, 22, 7,229,252,249,125,114,229, -171,144, 84, 90,254, 4, 32,237,218,117, 26,134,161,168,237, 56, 77,105, 90, 90, 30, 2,169,130, 31, 96, 65, 98,233,143,243, 13, -236, 12,140,176, 0, 18,207,161, 82, 74,234, 38,177,177,239,189, 78,156,144, 74,145,104,183, 86, 29, 92,199,199,247,117,206,233, -214,103,134,160, 60, 27, 26,203,123,190, 82,208,140,173, 81, 30,153,107,109,148,167, 1,155, 38,144,247,230,175,164, 60,135,122, -120, 60, 48,177,100,225, 28, 5, 55,125, 66,114,248, 43,231,135,128, 32, 32, 52,121,204,147, 52,159,125,203, 10, 5, 41, 77, 73, - 18, 33, 68,152,243,243, 91,110,152,210,181,195, 65, 44,216, 68,181, 29, 51, 72,129, 75, 64, 62, 9,241,239, 26,141,110, 9,194, - 72,250,209,158,184,148,201,101,154,220,127,255,188, 49,115,201,248,106, 50,191,185, 56, 93,231,234,246,249,229, 97,255,159, 26, - 72,188, 17, 62, 86,193,158,153,246,231, 35,223,177, 52,228,160,100,138,162, 84,219,226,124, 49,185, 58, 59, 28,125,154,187, 50, -127,183, 16,207,216,171,110,237,165,141,250, 87, 92, 92, 31,207,151, 39,179,116, 22,109,109, 56,159,233,167,143,205,227,215,102, - 13, 19, 65, 99, 88,218,127,234,131,156,236,174, 8,220,167, 76, 28, 9, 49, 79,226, 69, 18, 31,196, 46, 60,180, 89,179, 13, 2, - 1, 42,120,174, 98, 72, 94,121,221,180,226,232,106, 10,240, 17,128,187,107, 22,146,170, 35, 55,253,149, 81,222, 78,128, 64, 38, - 35, 77,166,153,202, 80, 15,163, 3,238, 93,254,167,215, 13,116, 42,232, 6,230, 41, 76, 68, 66,223,194, 96,253, 24, 14,163,240, -117, 36, 12, 65,240,242, 64,156,199,137,154,144,159, 2,156,104,152,216, 34, 47, 29,227, 61, 85, 65,217,177,161,116, 99,206, 1, -139,229,210,231,178,134,251,194, 16,247, 21, 40,238, 31, 71,232, 56, 99,119, 10, 88,186, 65, 45,171,241, 32,108, 56,132, 44, 34, -175, 7,247, 53,112, 38,109, 60, 46, 88, 84, 42, 45, 50,187, 99, 70,239,180,147,189,113,125, 9,184, 92,157,251, 66,101,207,129, -133,239, 82, 89,148,119,132, 38,247,116, 99,192, 67,183,155,243, 33,238,139, 59,113,211, 52,213, 67,246, 5, 1,166,106,123, 2, - 7,115,206, 61,220,178, 63,193,123, 83,165, 65, 49,115,210, 19,134,101,234, 64,138,174, 61,193,233,154, 47,135,227,133, 42,242, - 93,181, 29,174, 86,214,169,229, 73, 49,178, 88, 13, 94, 37, 76,129, 94,185,228, 18, 24,154,232,112,135,151,106,173, 70, 1, 53, -219,162,192, 26, 0,167,181,224, 8, 6, 13,164,212, 42, 44,122,208,149,211,100, 15, 53,184,219,215,175, 0,164, 93, 93, 79,219, - 48, 20,245, 87,211,148, 66, 80,217, 86,109, 8,137,189,193, 59,255,129,127,207, 95,216, 11, 82,167,105, 18, 44, 93,211, 54,137, -237, 59,251,218,215,113, 24, 97, 72,203, 83, 85, 85, 85,154,164,215,215,231,156,123,206,128,207,168,151,222,243,147, 85,254,253, -124, 90,254,114,172,255,243,109, 89,222,203,243,204,192,210, 38,255,110, 24, 52, 86,233,127,204, 99,215,110, 73,214, 46,200,106, - 12,166,124, 66,129,165,120,112,142, 8, 46, 90, 6,130,157,203, 25,152,190,214,155, 85,201,230,197,114,127,184,240, 26,182,168, -115, 73, 87, 35,148, 20, 65,177, 27, 81,201,224,206,188, 84,242,103,103, 78,101,244,104,108,227,246, 10,246, 84,203,240,126,114, -183, 58,127, 46,228, 81,247,143,166, 95, 51,126,119,122,126,123,245, 97,185,154,139, 78,222,203,203,242,241,199,131,209, 83,215, - 80, 38,247,238, 12,159,233, 51,112, 77, 17, 99,201,169, 65, 14, 31,110,152,221,105,120, 58,244, 39, 69,191, 62, 47,215,203,226, -102,219,126,171,119,155,182,109,124,194, 26,156, 49,190,146,179,139,162,248, 82, 45, 62, 85,133, 85,126,234,189,222,119, 69,169, - 54,207,250,233,185,169,181,110, 72,210, 99,216,127, 29, 65,252,126,130, 80,213,130,201,175, 85,121, 93, 45,174, 62, 86, 74,136, -239,245,113,219,105,208,230,151,209,203,146,181, 86,109, 15, 72,188,115,150, 6, 52,211,237,179,108, 40,238, 70,135, 13, 95, 10, -241,121, 67, 75, 55, 84, 7,247, 67,126,247, 77,204,201,142,195,157,150,196, 39, 0,127,225, 97, 60,214,106, 63, 0,136,158, 72, -190,110, 4,177, 7,144,183, 81,204,124,136,152, 60,100,145,103, 44,195, 40,198, 60, 30, 90,170,163,241, 69, 44,204,161,251,144, - 99,178,142, 88, 41,225, 71,115,133,171, 19, 34,153,119,199, 71, 45, 57,161,243,152,162,145, 48,153,152,106,134,157,105,224,165, - 33, 5, 13,161,222, 52,108,126,194,182, 33, 36, 82, 73,174, 93,147,107,249, 17, 58, 1,178,115,111,160, 69,144,159,216, 70,184, -204,226, 58, 24,220, 34, 91,156, 40,235,113,215,108,137,201,224, 47,134, 57,114,184, 42, 20, 48, 72, 12, 8, 55, 20,141,248, 79, - 25, 73,188,203, 48, 6,103, 96,162,184, 19, 5, 99, 96,104, 41, 57,177, 31,163,137,229,128,252,134,111,221,181, 91, 6,246,213, -179,177, 19,192,117, 62, 81,136,107,170,198, 5, 30,199,146,240,254,184, 62,218,173,135,232, 66,145, 70,154, 7, 95, 47,234,210, - 44, 49,249,190,159, 81,124,102, 60,234,229,158, 51, 37,200,138, 35, 51,229,134,247, 36,101,230,199, 31, 1, 72,187,150,157,134, - 97, 32,152,205, 67,109, 69, 3,180, 5, 33, 46,192, 13, 62,128,255,255, 13, 16,226, 7, 42, 4, 45,144, 38,109, 18,123,241,218, -187,142,211,132, 83,111,173, 26, 69,114, 19,143,237,217,217,153,212,191,203,106,208, 13, 15,199,182,153,167,168,227, 58,121, 19, - 4, 55,215,214,153,142,125,170,101, 35, 15,182,140,198,189,135, 50,137,233, 21,212,152, 17, 35,201,124, 43,106,103,168, 39,222, -104,199,102,114,126,146,184,180, 87,207,252,186, 28, 55, 74,131,219,213,229,235,142, 28,227,102, 69,244,180, 42,175,230,234,187, - 88, 82,186,148, 79,217, 70, 49,175,224,229,212,109, 81, 88,133, 55,209, 65,151, 60, 68,153, 61,192,215,178, 82,122,247, 71, 10, -228,139,227,183,114,111, 62,223, 66,102, 6,252,254,181,125,249,196,170, 33,101,250, 34, 73,111, 84,187,254,255, 81,225, 64, 61, -128, 1, 99,163, 2, 5, 85, 26,144, 57, 13,213, 3, 84, 81,181,155,140, 98,108, 51, 72,243,124,250,124, 49, 61, 80,156,173, 57, -102,227, 89, 70,249, 77, 13,154,213, 30, 63,246, 6, 63,204, 74, 64,214,253,230,159,218,253, 54,235,159,186,142,168, 72,112, 56, - 25,220,157, 1, 67, 70,248, 14,119,179,217,227,117,126,191,156,207,211,201,195, 42, 39, 83,217,166,216,150,219,202,154, 3, 46, -166,217,166, 0,218, 52, 38, 14,203,189,142,214,211, 11,124,158, 70,231, 64, 26, 24,156, 12,141, 19,226,238,180,223,153,181,210, - 13, 90,145,229, 2, 10, 14, 7, 86, 88, 2, 68,206,207, 26, 61,202,131, 20,182, 93,195,148,131, 39,140, 93, 48,145, 20, 93,149, - 64, 50,243, 54,208, 87,163, 67, 39,173, 68,191,223,145, 45,188, 99, 84, 8,120,227,222,131,102,253, 12, 53, 4, 81, 39, 26,145, -242,236,110, 37,190, 9,182,238,204,150,174,246,152,203,137, 25,212,214,212,109,219, 57, 8,201, 12, 46, 73, 19, 13,173,157,104, -108,146,115,158, 92, 38, 86, 81,102,214,173, 61,197, 24, 84,160,109, 96,172,141,221, 68,197, 29,194, 72,122,112,115, 85,141, 13, - 41,103,236, 15,182, 44,197,192,163,120,140, 62, 16, 91, 7, 18, 38,232, 80, 53, 2, 62,142,141,181, 99, 35, 14,100,230,250, 88, - 47, 1,195,194, 38,142,116,101, 98, 24,144,212, 15, 4,113, 68,149,246,246,238, 78, 66,213,111, 13, 67,232,195,160, 47, 12,135, -148,169,144, 16, 44,144,141,165, 94, 26, 89,147,196,212,118,200,211,151, 56, 21, 51,178, 56, 92,196, 93, 75, 91, 39, 11,183, 33, -240,162, 8,241,162, 19, 20,109,190, 99,240, 80,143,169,236, 70,161,255, 79, 0,218,174,102, 39, 97, 32, 8,207,110, 23, 10, 17, -149,244,100,226,201,131, 47,225,251, 63,130, 79, 96, 34,145, 16,130, 24,160,165,116,103,221,153,217,159, 82,196,139,145, 11,151, - 38,208,118, 59,157,253,230,251, 25,242, 35,109,207, 61,252, 31, 10,253,144,202, 45, 15, 82,172,242, 42,230,190,170, 40, 93,205, -128,186, 11, 9,216, 24,204,192,232,138,136,125, 7,184,108, 19,173,126,146,131, 89,201,237,147,231,205, 48, 23,131, 76,201,157, -126, 59,108,228,184, 26,224,117, 13, 47,147,175, 66,221, 29,173, 28,139,140,150,114,204, 96,160,246,135,228, 78,226,244,113, 0, -176, 0,235,136,185,194,118,144,243,181,101, 99, 53, 1,109,104,167,230, 22, 22,111,232, 71,113, 85, 31,177,113, 7,236,118,136, - 13, 9, 67,136, 52, 41,127,184,232,145, 41,109, 15,156,185,134,140,169,158, 71,124, 98, 31,154,184,202,183,208,169, 14,202,125, - 81,219,227,253,136, 8, 64,134, 87, 19,199,136,185,117,139, 53, 13,215,168,168,108, 59,152,142,117,235, 79,220,232,182, 61,125, -124, 54,171, 83,183,101,125,150,253, 27,236, 62,101,130,191, 47,238,149, 50,207,243,217,211,124, 90, 34, 44,150,123, 11,135,247, - 53,105,139,246,182,243,239, 57, 95,177,102, 6,110, 39,254, 46,104,177, 92, 78,110,136, 46,230,187,184, 20, 9,132,162, 64, 28, - 20,247,129,188, 69,210,138,122,139, 32,140, 31, 57, 27, 6, 98,243, 30,236,198,178,121, 95,234, 10, 85,228,223,132,230, 35,246, -229,161,198,115,178,188,224, 72, 2, 59,139,159,117,232,172,153, 55,207,235,217, 38, 39, 25,149,120,214, 49, 40,141,140,230, 77, -106,225, 37,216,136, 16, 63,212,234,130,109,172, 34,186,173,131,222,171,223,201, 42,151, 89, 57,241, 27,211,248, 21, 34,212, 40, -194, 15, 1,137, 81,236,103,232,149, 81,194,184, 56,217, 61, 15,253,124, 31, 80, 77,171,122, 92,236, 40,170,150,199, 14,225,242, - 74,141,247,215,139, 85, 34, 78,144, 25, 27, 38,198, 78,166,205, 49,135, 9,251,170,223,115,216, 76,177, 90, 93, 78, 38,195,232, -144,223, 7, 42, 58, 8,255,194, 79,185,160,205,184, 43, 36, 74,157,237,106, 6,195, 0, 60,223, 88, 13,167,186,238,210,140,255, -202,222,130, 42,137, 46, 71,170,104,108, 91,196,202,238, 59, 3,227, 68, 35,229, 30,170,199,245,102,169, 67,125, 55, 42,121,233, -147, 45,199,168, 57, 54,146,109,205,100, 54,166, 13,106, 50,144, 67, 38, 18,209,116, 4, 56,177, 50,123, 41,161,141,186, 92,204, - 51,194,171,159,111, 1, 72, 59,155,157,134, 97, 32, 8,123, 45, 39,208,180,252, 72, 72,156, 17, 92,120,255, 7,130, 75, 37, 14, - 20, 69,180,224, 54,142,237,197,235,181, 19, 7,210,170, 18,106, 15, 81,123,104,234, 70,238,238,102,230,155,196,159,233,167,205, - 14,254,138, 49,254, 83, 81,194, 25,183,118,225,228, 11, 48,119, 12,163,171, 27, 74, 19, 9,102, 82, 71,132,201,164, 7,219, 33, - 80,148,230,132, 19,110,128,236,177, 74, 50, 28,169,221,254,157, 38, 16,227,149,113, 47,252,245,114,241,109,198, 78, 46, 25,107, - 61, 14, 41, 82,105,102, 20,199,249,181,208,142,172,217,132,216,141,178, 63,217,209,134, 14, 44,117,199,148, 62, 42, 27,210,161, -251, 23,239,226,252, 36,236,170,182,117,118,227,253,150,242,137, 69, 45,201, 0,181,201, 99,150, 42,142,170,253,145, 75,123,230, - 43,229, 5,172,166, 8,142, 97, 74,224,114,220,113, 56, 73,109,188,113,190, 51,125,107,188,238,109,111, 9,251, 77,137,226, 16, - 74, 50,241,229,156,113, 98,183, 55,235,157,121, 19,180, 52,230, 31,195, 25, 14, 5,108, 34, 9,231,121,209, 60,221,172, 90,109, -215,173,254,212,198, 90,119,160, 20, 64,115,232,237,135, 54,225,184,243,238,182,145,245,162,126,109, 21,187,127,162, 27, 50,153, -224,252,175,226, 61,133,123, 10, 24,193,164,243, 23, 27, 76,177, 72, 99,213,148,237, 66, 69,131, 60, 41,217,208,151, 10,152,193, - 70,143,163,208,113,136,117,103,237,185, 44,202,138,204,105,194, 33,242,180,240, 84, 21,248, 2,118, 85,103,200, 76, 14, 50,198, - 76, 69,149, 56,116,139, 83,233, 93,241,228,190,146, 7,224,140,190, 74, 30, 47, 40, 64,245, 76,229,118,156,153, 4,137,163, 82, - 4,196, 69,204, 81, 77,226, 71,180, 7,215, 57,226,185,227, 18, 84,135,134,180,143, 52,141,177,209,238,213, 19,103,198, 26,218, -220,137,120,237, 40,182, 9,248,163, 60,187, 8,139, 14,189,236, 92, 32, 39,126,166,165,193,114,217,177,148, 7, 67,241,127, 48, - 24,110, 65,204,248,203,240,156,155,130,103,188,133,115, 58,145, 83,218, 25, 57,217,220,145,211,112,105,152, 16,129,160, 18, 84, - 69,218, 35,165, 42, 85, 17,161,182, 50, 93,167,164, 10,175,199,255,211,120,183, 58,205, 83,169, 85, 11, 45,108, 40,237,195, 15, -223, 92,174,194,178, 43, 38,220, 34,167,147,194, 69,213, 64,138, 34,192,161,252,125,184,123,220,238, 91,222, 28,175,170,171,200, -155, 60,122,194, 63, 2, 48,118, 29, 75, 13,195, 64, 84,213, 33, 38,148,225,192,145, 79,224,255, 47,252, 11, 3, 23, 24,202, 0, - 33, 16, 23,173,208, 22,201,138, 7, 72, 60,185,219,177,165,213,150, 87,220,222,158,253, 31,125,155,255,132,130, 15,204,226,205, -156, 38, 16, 43, 70, 2, 27,232, 68, 61,153, 41,211,191, 68, 44,188, 97,144, 2, 83,156,164, 59, 27, 35,207, 83,246, 21, 13,153, -177,130,252,124, 86,137,153,174,171,182,121,236,125, 90,188,142,192,214,217,140, 19,213,137, 32,247,103, 52, 59,111, 73, 38,103, - 78,173,126,234, 37,245, 6,212,159, 17, 1,200, 58,139,247, 70,117,104, 74,135, 64,195,135,170, 27,230,201,228,186, 77,135,120, -143,100,147, 88,209,160,108,245,102,194,111,161, 19,102,147,166, 10, 26,207, 26,188,132, 88,143,107,204,193,135,205,128,253,219, -165, 75,199, 73, 60, 35, 49,222, 77, 0,146,247, 66,183, 85,111, 81, 39, 96,208,112,238,205,166,235,215, 93,191, 33,231,230,144, -221,166,246,214,128,191, 6,247, 37,253, 46,149,185, 62, 61,249, 6,184,121,126, 77,207,115,161,236, 24, 76, 8, 14,201,241,164, -181,181,160, 65,210,177, 87,103, 11,127,255,230,186, 81,165, 21, 14,148, 31, 82,172, 98,171,236, 88,112, 77,220,119,213, 69,163, - 42,167, 99, 53,249,206,204, 63,123, 9, 37,220,138,201, 9,166,206, 82,116,177,244, 77,100,252, 87,130,108,152,106,242,202,138, -167, 36,251, 58,151,141, 32, 94, 78,218,152, 56,225,187, 35, 43,208,145, 58, 88,177, 16,148,216,158, 11, 1, 90,205, 88,136, 50, - 81,201, 70,110, 0,104,105,234,155, 56,223,188,177,162, 46,139, 12,178,128,221, 65,188, 47,118,241, 69, 24,217, 69,236, 44,238, -182, 65,140,192, 46, 77,232,245,118,101, 87,170,251,234,113, 52, 49,116,253,199, 56, 54,237,209,226, 93,111,129,135,171,196,121, -165,175, 65,123, 16,136, 75,172,217,142, 13,120, 63, 21, 55, 53,152,166,211, 32,109, 15, 53, 81, 83,139, 71,118,165, 30, 44,101, - 19,228, 12, 44,194,116, 36,231,161,108,157,206,239,192, 88, 15, 70,126,232,255,105, 74,135, 4,119, 93,165,237, 74,198,135,154, -128, 49, 8,130,196,161,187,113,222, 88, 84,170, 68,205, 5, 76, 70,155,102, 97,192, 30,185,166,117,109,107, 91,111, 27,132, 5, - 48,135, 74, 33, 67,172, 27,183, 56, 17, 69,121,159,116,118,162,210,126,176,105, 37,184, 84,235, 3,233,207,120,228,198,203, 81, -158,110,126,247,114,139,119,163, 87,241, 57,172,245, 46, 51,102,118,253, 8,192,216,181,236, 52, 12, 3, 65,175,157,166,208, 22, - 84,113, 4, 33,142,156,248,255,111,224,206, 63,112,226, 33, 84,154, 38,126, 44,222, 93,219,113, 72, 91, 56, 87,141,162,180,158, -236,206,236,206, 52,243,119, 29, 28, 3,199, 57,202,135,211, 9, 32,255, 23,160,103, 79,189, 64, 60,192,216, 38, 97, 82,230,179, -219,169, 22,155, 48,200,217, 92,186,152, 49,107,149,115, 89, 67,189, 43, 87,150, 78, 11,233, 21,203,228,102,241, 20, 46,215,193, - 90,133, 7,196,109,187,120,247,215,159,189,227,240, 88,141,101,231, 64, 37, 21,172, 96, 40, 5, 63, 41, 45, 6,126,134, 11,112, -162,221, 67,162,194,217,241,102,228, 73, 6,238, 58, 27,198, 75,207,110, 51, 77, 54, 67, 95,155, 8,238,205,253,102,249,246, 17, -143, 85,146,100,219,108, 46, 6,167,137,145, 48,109,179,218,105, 54,158,124,177,203,115, 53, 3,169,169, 52,231,126, 21,176,109, -244,192, 82, 97,124,112, 59,222, 59,108,201,234, 48,182,142,176,212, 16,156,239,173,235,156, 39,109, 54,227, 59, 86,124, 93,248, -199, 1,146,155, 89,177, 7,206,131, 49,143,219,205,203,190,127,238, 14, 33,125,228, 41, 64,194, 17,109,213,115,163,211, 42,108, - 1, 54,198,120,192,215, 29,253,198,158,137,100,113,150,144, 74,189,182,134,193,160,112,102,143, 36, 47,250, 95,195,163,179, 55, - 59, 72,216,113,154,178, 84,181,156,134,179, 83, 28,234,174, 64,234, 7,210, 84,181,130, 73, 91, 63,242,203, 5,232,171, 37,170, -248,151, 75,139,116,152,211,176,193, 20,113,144,165, 36,121, 45,176,159,150,143,151,103,227, 59, 73,233,134,180,158,115,108, 20, -101,122,115,165,188, 69,225,226, 83,217, 78, 89,198,146,147, 6, 10,167, 45, 14, 39, 64, 21,202,202,169,125,236,102, 53, 94, 45, -215, 96, 41,231,166,137,144,175,195,206,125,123,144, 42, 7,179, 5,177,207, 6, 51,158,120, 62,158, 59, 76,141, 49,212,188,112, -241,130, 40,243,166, 1, 85,205, 83,193,184, 93,148,193,221, 87,118,245,185,120, 31,231, 32,235,180, 38, 60, 1,238,248,119, 73, -121, 30,142,206,115, 50, 53,184, 39,159,127,153,157,226,212,207,134,157,253,165,102,231, 80, 56,226,109, 22,171,197,197,221,234, -118,219,222,104,173, 7,103,123,218,138,141,237, 43, 41,168,134, 25,174, 75,115,113,179,218, 70,232,143, 23,234, 54,195, 33,116, -189,235,191,236, 87,103,251,111,183,183,254, 96, 41, 26,151, 93, 24,179,121, 28,164,141,101,205, 7,211,201, 4,206,232,119, 61, -189,233, 31, 1, 40,187,186,158,198, 97, 32,104,175,227, 52, 45, 66, 21,226,238,196,235,137, 23,254,255, 51,255, 3,137, 95, 0, - 66,232, 78, 66,106, 8,181,215,183, 31,222, 58,164, 80,184, 62,166, 82,165, 52,241,122, 60, 59, 59,211,157,254, 27,252, 81,149, - 15, 75, 5,164,255, 14,207,254, 77, 58,222, 85,167, 51,111,116, 10,152, 44,222, 32,124,157,184,206,180, 61, 90, 40, 38,122,172, -163, 11,156,191,233, 33,125,148,156,114, 72,206,172, 51, 24,192,146,133, 63,253, 25,189, 43, 63, 34,125, 21, 30,105,113, 77,244, -148,178,111,204, 96,205, 12,210,195, 47, 88, 63,158,167, 78, 4, 24,189,201,149,193,215, 38,100,103, 89,163,106,197,165,137,210, -226,181,130, 23,174, 19,129, 13,127,122, 41,127, 3,184,109,132,171,243,248,123, 19,239,159,118,189, 20,196, 52,155, 87,154,108, -103,202, 95, 43,162,234,113, 33,216,178,215,214,238,216,162, 66,202, 72,119, 76, 55,156,202, 30, 66, 12,172,233, 92, 33, 15, 6, -172,185,107, 45,114, 16,151,118, 9,199,183,252,215,101,205,140,221,189,119, 61, 59, 13,225,189, 41, 53,149,150,161,123,185,137, -195,245,197,250,246,249,229, 78,212, 65,122, 84,122,145,189,152,182,156,129, 69,118,133, 64,203,218,149, 77,241,151, 14, 30,166, -254, 53, 51,230,145,226, 1,210, 82,225,242,164,240,240, 64,206,204, 43,149,159, 5,207, 91,146,210,199,111, 93, 29,154, 83,238, - 4,157,123,223, 89, 61,150,105,187, 37, 53, 44,128,155,119,198,186,174, 20, 99,180, 57,166, 38,245,178, 20,237, 58,237,227,171, -224, 10, 52, 69,167,132,234,147,231, 52,254, 75, 45, 34, 49,103,194,124,242, 34, 83,117,215, 32, 58, 40, 30, 63,211,134,204, 42, -102,235, 78, 53,246, 93, 97,187,249, 36,163,107,170,254,178,236,123,177, 32, 83,194,187,221,152,198, 9, 38, 2, 46,236,145,206, -126, 46,168,121, 78,250, 23,201, 20,168, 86,121,113,250, 17, 32,143, 74,203,219,175, 91, 55, 88,180, 7, 21,170,163, 57,136,248, - 5, 23, 98,229, 30,171,202,167,148, 22, 71,213,220,222, 77, 29, 52, 51,246,180,214,242, 41,130,229,255,129,102,249, 42, 60,231, - 56, 65,136,175, 68,217,174,233,137, 14,253,128,136, 76,203, 72, 2, 16,248,238,215,112,249,115,115,181,130, 21, 61,232,145,142, -208, 57,239,217,186,178, 28, 50, 37,247, 72,192, 43, 73,251, 14,169,244,199, 16,132,102,131, 14,227, 22,182,235,110,242, 57,150, -176, 26,211,235,232, 57, 46, 52,185, 36,240, 72,193,143,157,213, 92, 80,185, 9, 88, 18,236, 98,133,254, 19,128,177,107,219,109, - 27,134,161,162,156, 58, 78, 86,212,237,176,167,189, 15, 24,176,125,247,254,171, 29,246, 80,180, 40,146, 93, 18, 89,150,196,137, -164,110,173,219,164, 65, 30, 2, 35,177, 5, 59,162,168,195,195,115, 94,199,223, 79,236,109,240, 37, 34, 15,239,134,224,225, 61, - 95,131, 6,104,132,130, 77, 46, 46,150,247,208,213,120, 85, 98,238,186, 95,199,101, 18, 0, 26,208,179,190, 81,182,187, 32,169, - 62,253,200,128,222,121, 48,226, 49, 25, 31,148,206,180, 7, 80,213,230, 51, 79,169, 52,163,216,118, 50, 62,170, 65,219,117,136, - 43,178,236,163, 41,132, 73,222,125,204, 48, 75,159, 9,173, 91,221,197,132,253, 62,103, 94,148,245,163, 26, 59, 24,161,251,181, -179, 63,189,239, 57,238, 95,146, 34, 60, 13,221,100, 62, 76,247, 28,171,121,171,196,218,138, 71,202,107,155, 99,238,138,207,188, - 17,118, 45,134,125, 80,134,187, 98, 54,220, 93,215,105,137,143, 96, 29, 62,206,254, 73,185, 63,220,254, 58,229, 69,162,149,139, - 81,175, 73, 84, 23,146,204,192,128, 76,207,190, 34,223,251,225,203,199, 15, 63, 30,158,110,121,123,222, 53,127, 59,209, 39,152, - 20,254,230, 57,236,168, 57, 0, 63, 95, 15,119,102,227, 69, 6, 14,165,254,135, 92,198,246,169, 94, 88, 80,143,220,134,132,170, -197,144,107,147, 12, 62,215, 1, 15,133, 16, 40,253, 77,149,103,178,188,171,144, 20, 39,225, 68, 62, 8,133,182,152,214, 6,212, - 13, 45, 87,183,225,166,136,133, 23,164, 62, 21, 96, 67,241,177,204,193, 2,146, 13, 25, 93, 91,215,121, 86,124,159, 26, 49,219, -102,236,114,184,216, 94, 84,146,140, 79,153, 80,149,253, 56, 3, 68, 83,139, 30, 7,100, 79, 64,161,115, 92,213, 78,192, 58,159, -144, 54, 59,129,165, 85, 25,220, 23,145, 62, 12, 13,225, 50, 65, 78,242,188, 84, 69,226,113,201,234,131, 66, 11, 81,201,228, 28, -179, 50, 60,147, 45, 85, 53,165,194,106,139, 88,130,187, 87,111,123,107,132,115,161,190,169, 29, 98, 56, 27,152, 22,193, 93,229, -156,189, 35, 28,145,122,124, 99,170, 30, 67,243,184,185, 9,179,187, 32,246,134, 30,135,171,111,227,215,155,245,167,127,214,236, - 73,242,104,178,222,206, 97, 62,196,212,157, 72, 33, 50, 74,207,242,207, 73,126, 39,222,205,131,183,214,207,214, 77,115,136,153, -251,241,232,205, 95,119, 48,110,218,227,206,168, 3,145,250,136,118,185,202,124,249, 78, 53, 54, 50,203, 30,166,242,249,191, 0, -156, 93,203, 78,195, 48, 16, 92, 59,143, 62, 0,113,168, 42,129,196, 25,137,127,230,147,248, 5, 14,136, 19, 7, 4,162, 40,109, -146,198,198,179, 94, 59,155,182, 32, 64,170,122,202,161,137, 93,103,118,118,118,166,252,135,232, 69,163,120, 63,137, 21,254, 25, -155,255,150,175, 87, 16, 94, 42, 88,155,252, 55,164,170,141, 46,236, 98,170, 97,196,198,134, 43,238,245,229,245, 83,251, 56,168, -129,103,125,243,214,169,126, 44, 18,178, 33,254, 42,163,180,134,115,151,248,109, 10,241,108, 97, 7,231,176,120,214, 38,247,120, -146, 66,119,136, 52, 16,187,208,240, 31, 20,243,147,187, 52, 77, 87, 49,242,237, 56,229,131, 7, 92, 93,168,173,194, 43,228,182, -158,215, 93,251,128, 54, 39, 14, 80, 68, 78,183,238,185, 5,113,113,134,243,209, 44,241, 41, 55,180,239,144, 89, 47, 41, 31,217, -149,215,127,131,157,117, 44, 64,155,230,102, 93, 28,172, 77, 29,206,138, 71,218,195,195, 91,144, 93,242,211, 13,152,125,135,238, -174,237, 88, 83, 81,147,255,116,244, 78,251, 45,178,216, 36, 84,132,148,215,124,158, 67,206, 37,130, 87, 10,253, 90,117, 83,207, -137,238,230,203,213, 69,117,255,242,186, 81,180, 96,175, 74,192, 38,189,120,246, 41, 35,176,177,243,102, 64,164,145,119,153,132, -149,240, 91,177,137,209,182, 41, 71, 13,129, 99, 8,175,241,164, 33,151,204,183,188,207, 60, 48,208,232, 56, 63, 58,242, 79,134, - 78,142, 38, 30, 11, 39,132,197, 70, 76,106,202,170, 96,184, 62,149,111, 36, 10,130, 71,141, 98,161,137,227, 61,162,120, 25,245, -224,112,109,216, 32,185, 0,158,217,157, 58,166,179,198,140, 85,225,198,188, 86,196,211, 68, 34,167, 88, 71,132, 88, 13, 35,189, - 63,241, 89, 51,227, 82, 58, 61,104,195, 87,246,236,237,101,242,202,131, 99,247,209, 24,196,152,100,238,134,145, 50,146, 14,110, -132,237, 98,245,151,184, 13, 63,210, 41, 7, 39,187,182,160, 73,114, 85,118,249,203,113, 78,162,164, 87,135,187,201,130,156, 36, -131, 57, 64,238,254,111, 24, 92,111, 25, 79,191,109, 30,158, 56,220, 45,234,204, 34,102, 66, 21,182, 10,223,187,109, 19, 48,187, -177,229,213,226,102,189, 88,125,244,187, 77,251,198,134,201,212,240,202,198,125, 93,176, 47, 97, 82,196,226,134,129,201,195,186, - 27, 56,183,133,171,170, 2,244,112, 79, 67,135, 36, 69, 83,217,186,118,179,206,119, 3,245, 61,245, 97,211,204,168, 46, 33,160, - 68, 14, 46, 35,140,194,136,162,198,209,244,177,196,159,253, 37, 0,101,215,210,147, 64, 12,132,167,221, 23,130, 60, 54, 38, 38, - 72,188,120, 35, 70,255,179, 63,206,131, 23,212, 68,196,125,117,164, 51,157,217, 46, 2,234,133, 43, 75,129,233,215,175,223,163, -199,239,127, 16,192, 28, 23,189,192,111,114,154,243, 40,254,212,187, 68,142, 0,110,231, 84, 75,135,237, 19,215,172,211, 80, 41, -142,224,123,221,110,204,129,181, 53,250, 77,197, 63,246, 36,100,182,134,211, 58,121, 36,113, 54,114,203,121,189, 42,235,229,188, - 91, 44, 60,208,221,238, 44,152, 94, 7,193, 27,195,213,244,186,105, 26,235, 62,171,166, 5,182,138,208, 31,177,150,235, 77, 12, -163, 54, 16, 1,180,115,152,187, 98,180,206,138,170,109,223, 40,195,128,145,236, 2, 96, 9,233,173,201,110,210,108,255, 80,169, -247, 5,246,134, 25,236,107, 27,207,197,132, 38, 50,127,107,201, 56, 51,145, 98, 82,153,244, 54, 8,189,241,139, 36, 23, 21,186, -157, 87, 77,248,107,157, 10,186, 45,224, 70, 40, 29, 45,254, 78,132,165, 82,246, 41, 21,214, 72, 81,249, 5,125,216, 25, 33,247, -199,241,100, 85,230, 79, 47,239, 31, 81,176,229, 65,248,165,147, 85,170,233, 81, 31,198,217, 51, 78, 91,190, 38,215,152,105,213, - 62,134, 9,194,223, 96, 64,215,209,169,229, 8,132,143,108, 77,136, 90,215, 64,149,190, 8, 49, 7, 16,155,137, 66,233, 7, 30, -110,163, 56,224, 53,237,160, 49,203, 28, 1,245,178,227,168,190, 7,172, 38, 14, 12,142,189, 61,138, 87,179, 42,157, 48, 45,170, - 18,153,246, 4,212,101,137,161,250,224, 38,208,200, 44,116, 40,161,146, 16,245, 89,246,203,174,174,200,152, 3,145,235, 80, 94, - 43,135, 76, 25,132,126,218,240,234,136, 54,243, 17,195, 98, 41,230, 19,133,232, 83,153,198,137,203,248,112, 56,133,153,144, 55, -170,112, 71,185,172, 0,113,145, 73, 34,140,222,143,112,156,124, 60,220,117, 97,160, 27,100, 24,224,129,196,224,212,157,191,249, -183, 32,228,231,112,231,234, 55, 47,115, 73, 77,182,199,239,123,204,158,249, 48, 39,184,204,167,235,242,190, 44,230, 52,191, 97, - 82,140,139, 36,205, 44, 51, 56,158,217,202, 72,211, 78,237,137,206,202, 52, 97,237,141,243, 26, 54,147, 75,197, 73,131, 93, 48, -223,122,180,158,236,124, 65, 34, 50,221,223,145, 98, 50,135,220, 19,212,132,131,213, 25, 26,229,135, 27, 37, 49,191, 5, 96,236, -106,122, 18, 6,130,232, 78, 63, 86, 16, 84, 18,194, 13, 19, 61,251, 55,252,135,254, 62, 15,158,212, 4, 18,163, 64,139,237,236, -184, 51,187,179, 45, 20,212, 43, 73, 83,218,110,103, 95,223,188, 55,239,111,253, 12,156,194,227, 52, 32,109, 76,239,238, 15, 7, - 46,157, 67,241,255, 8, 23, 85, 37, 3,132,122, 33, 62,233,168,126, 14,244,135,188, 5,153,250,248, 34, 54, 35,200,224,132,113, - 34,237, 27, 66, 98,113,116, 81,238,111,156,117,136, 55, 99,186,157, 53, 13,181,213, 14,223,183,230,171, 53, 19,219, 44, 23,230, -102, 84, 60,191, 34,168, 59, 33,124,135,174, 62,223,252,161,215,224,100, 78, 7,227,194,157,228,123, 4,104, 52,150, 2,253, 29, -223, 80, 86, 57,123,100, 93,211,119,189,199, 89,110, 31,103,243,137,181, 59,135,171,106,143, 72,211, 18,166,182,240, 87,244, 89, -239,171,221,254, 67, 68, 56,173,122, 58, 26, 93,151,191,223,165, 52,122, 62,239,101,140,229, 61,177,141, 19, 74,164, 54,240,101, -220,200,192,181,252,220,106, 63, 43,216,137,173,148,233, 86,248,165,178, 55, 49, 38,113, 68, 78,207,130, 82,211, 11,197,242, 19, -173,239, 15,227,201,253, 98,244,244,178,222,104, 31,194,157,233,202,166,203,241, 39,173,203,203, 10, 57,107, 59,153,220, 99,120, -116, 36,115, 19, 16,151, 56,150,163,149,115, 12,225, 83,227, 81, 72,221, 84,185, 48,154, 39, 77, 55,123,146, 14,203,208,209, 40, - 90,232,106, 83,223, 58,117, 40, 39,210,143,196, 68,131,164, 7,133, 97, 8, 25,115, 55,153,235,249, 96,186,217, 27,130,226, 13, -191,164,148, 59, 8, 9, 78,188,120, 67, 8,147,246, 1,224, 55,117,135,170,218,197, 91, 10,154, 79,209, 41, 18, 76,151, 15, 19, -121,112,103,160,111, 43, 74,127,120,224,158,115,148,182,144,208,237,236, 88,164, 40,193,212,108, 12,119, 16, 54,126, 10,179, 83, -196,233, 81,139,119,224, 63, 10,100, 69,106,168, 26,164, 68,244,244,138, 59,198, 98, 23,143,106, 59, 5, 81,218,248,206,174, 52, - 51,120,116, 48,144,125,211,223,197,157,196,187,196, 93, 20, 41,238,156,220, 92,176,166,221,102, 44,181,160,219,171,229,114,122, -119, 1,217,166,245,152,175,174, 37,144,214,215,217, 34, 47,109, 89,230, 77,189,165,202, 49,163, 43,115, 44, 41,216,102,226,102, -134,142, 23,106,206, 29, 24,177, 75, 8, 26, 68,181, 39,251, 82,190,128,249,154,214,173,193, 82,242,214,130,129,161, 52, 23,227, -204,151,145, 13,240,176, 29,198, 96,168, 17, 37,202,225,240,105,126, 4,224,236,218, 90, 19,134,193,104,191, 68, 91, 87,111, 76, - 28,219,195, 6, 67,100, 47,123,217, 47,222,159, 27,140, 33,162, 67,172, 38,109,147, 44,183, 47, 77,171, 27,101, 62,137,136, 90, -218,126, 57,158,156,203, 95,248,189, 55,114,239, 37,144,135, 30, 68,124,219, 56,208, 42, 62, 5,175,130,111,120, 33,188,193, 66, -201, 1,222, 70, 36,188,238,213, 86,170, 21,211,143,139,131, 53, 17,232,145,145,103,245,253,188,158,164, 85,201,132,158, 76, 38, - 8, 69, 36,135, 90,158, 74,201,120,242,176,164,162,162, 71,238, 92,220,126,248,152,192, 10,170,110, 18,206,171,132,153,152, 37, -227, 23,173, 13,243,160, 68,196, 86,211, 72,206,145,217,171,228,168,228,134,177,207,130, 77, 6,131,215,187,233,122, 57, 91, 76, -244,136, 75,118, 5,255, 62,241,189,172, 11,219,174, 84, 90, 18, 35,100, 3,244, 52, 25,209,200,226,148, 68,241, 53,161,154, 32, - 69,247,157,192, 57,110, 33,128,178,102, 87,243,165,142,250,143,209,186,196, 39, 20,193,123, 0,224, 25, 70, 14,140,237,134,234, -227,112,244,246, 52,127,255,216,126, 73,195,197,195, 47,150,147,206, 99, 5,112, 30,222,250,222, 67, 2, 62, 89,197,170,249, 76, -158,149, 89,183,133, 77, 23, 10, 49,127,238,147,155,128,162, 78,221, 29,142, 24,137,139,186,231, 22,236,137, 23,161,225,175, 51, -220,155, 30,176,136, 1, 80, 73,191,110, 5,213,160,123,104,115,161,202,169,187, 32,218, 60,242,100,160,185,190,125, 13, 54,113, -246, 59, 92, 85, 0, 21,159,132, 92, 45,219,133,208, 34,107,108, 49, 65,137,216, 56, 63,227,146, 89,212,245,122,243, 40,180, 24, - 90,117, 69, 7,164, 92,206, 65,132,151, 33,136,230, 99,122, 68,181, 23,153,142,120,195,211,235,214,164,106,119,103, 91,145,201, - 42,148,226, 42,217,192,115,240,150,226, 14,114, 7,225,250,182, 46,152, 7, 21,109, 39,254,195,130,119, 89,157, 65, 46, 70, 16, -254, 41, 52, 34,119, 98, 39,146, 30,235, 84,195,118, 66,135, 68,195,246,116, 96,206,145, 90,207, 95, 86,179,103,125,180,251,211, -110,115,220,108, 79,219, 3, 63,156,203,130,137, 51,175, 25, 19, 37, 1, 50,162,153,254,249,103, 89,219,136, 80,220, 37,246,123, - 12,166,164, 83,248,254, 26, 23,213, 38, 43, 13,226,177, 91,134, 18, 50, 74,242,202, 42, 33,244,184,207, 97, 60, 25, 76, 23,233, - 44, 39,185,126, 63, 87, 37, 86,230, 53,174, 23, 68, 19,240, 35, 0,107, 87,211,147, 48, 16, 68,119, 91,218,130, 61, 20, 37,145, -131, 7,111,198,187,255, 63,222,253, 23, 30,136, 74,130, 33, 32,165,116,191,220,217,153,217,126, 96,130, 49,222, 56,208,210,108, -151,217, 55,111,230,189,249, 11,255, 62, 66,241,201, 79, 93, 55,142,135,240,157,143,178,252, 13, 17, 79, 70, 5, 29, 63, 72,179, - 25, 13, 77,179,116,174, 87,163,145,228,176,148,160, 94, 48, 49, 44, 31, 33,246, 18, 71, 63, 89,152,166,157, 56, 36,197,176,205, -110, 62,115, 11, 88, 34,219, 52, 64, 64,163, 92,210,159,188,173, 17,181, 10,113, 77,234,213,103,123,191,204,223,182, 54,205, 40, - 92, 6, 95, 8,127,151,246,160,196, 17, 84, 75,176,247, 27,212,126, 51,232,206,123,232, 27,151,248, 16, 72,240, 76,152,173, 72, - 27,113,122,223,169,151,221,118, 14,234, 86,127, 45,162, 79,120,168, 22,149,239,161, 92, 89, 15,215,249,162,129,176,101,218, 4, -103,183, 70,169, 84,204, 76, 21,181, 82,193,195, 28,131, 5,141, 14, 76, 81, 27,122, 58, 3,198,135,223,181, 28,250,243,158,169, -175,102,162,102,198,121,159, 99, 20,239, 19,130,165,152, 60,221, 85,207,155,221,171,118, 57,111, 9,125,201,120,210, 95, 91, 78, -203,189,241, 59,152,168, 91, 19, 14,113,127,228,236,213,166,214,199, 69, 81, 26, 48,229,100, 61,235,112,194,242,168,177,135,219, -101,153,186,197,186,160, 36, 3,174,144, 5, 75, 55,238,188, 22,209,144,128, 73,110, 59, 64,183, 54, 6, 74, 55, 82,184,216, 97, - 80, 72,144,134,163, 94, 34,215,131,243,154,114,107, 65,220, 73, 16,133,130,209,128,164,156,144, 28,165,164,100,204,130,147,227, -180,197, 28, 20,253,251, 3,222,179, 72,135, 15,138, 11,168,250,140,220, 8,243, 73,154,104, 27,150,242,187,177, 42,110,244,135, -197, 52,128,205,251,108,231,145,207, 22,102, 93,147, 2, 81, 69, 35, 6, 92,246,202,170,142, 49, 59, 2,118,217, 71,235,194,210, -162,118, 64,173,155,137,206,162,229, 46,184,155,115,235,149, 8,219,237,127,216, 86,199,165,136, 62,219,241, 45, 59, 72,202,147, -208,252, 36,153,150, 65,216, 14,241, 61,129,201, 10,233,195,252,241,118,122,163,204,105,181,251, 88,215,235, 47, 85, 59, 48,144, -113,153,204, 11, 7,102, 36,147,196, 40,211,250,239, 23,233,236,106,146,251,207, 32,189,231,214, 32,156, 43, 22,146, 77, 77, 62, -162, 80, 39,130,208,175,129,167, 64, 95, 8,155,138,244, 70, 86,141, 80,153, 44,202,162,186, 46,170,114, 50, 5,185, 89,237, 99, - 87,163,133, 10, 77,218,184, 38, 22,107, 59,248,178,190, 5, 32,237,124,118,218,136,129, 48,238,177,247, 95, 2, 8,165,162, 82, -197,149, 3, 18,188,255, 75,240, 12, 28,122, 42,130, 86,164,136,134,172,179,182,167, 59, 99,143,215,187,145, 40,168,183, 28,162, -172, 98,123, 63,143,190,153,249, 77,245,255, 75,227,139, 10, 57,117, 84, 75,135, 5,157,231, 51, 18,143, 71,183,139,196, 31,172, -242,124,228,244,116,178,196,156, 76,252, 88,166, 64,145, 95, 70,182, 78,216,186,253,183, 86,157,152,118,107, 73, 73, 28, 64, 99, -198, 91,151,218, 38,159, 95,169, 51,184, 98,155,236,153, 24,239, 4,122, 31, 55,147,136,228, 72,144, 14,111,221,197,169,190,252, -226, 31,127,171,218, 36, 36,206,224,253,121,235,126,236,199,104, 23,214,172,149,192,181,237,185, 70,176, 23,131, 34, 94, 9, 54, - 57,227,200, 44,120, 66,123, 56, 6, 45,108,233,243, 40,247,174,229, 74,146, 8,180,219, 75, 40,157, 27, 14,240, 51, 27, 17,138, - 2,112, 45, 2,189, 42, 24,238, 43,222,145, 3, 61,136,178,193,109, 58,205, 60, 91,129,133,126,199,223, 15,194,191,140,130,215, -138,191, 31, 85, 59, 74,127, 44,152,217, 40,115,117,177,178, 29,222,125,127,227,116,238,108,110,201, 59,111,224,181, 81, 86,159, - 4, 30,191, 41,110, 49,137,251, 75,255,112,111,233,223,212,135, 93,179, 94,107,168,230,110,195,162,125, 17,167,220, 40,138, 17, -156,174,240,130,189, 37,179,238, 74,101, 71,105, 18,138, 19,124,203, 94,214,252,163,184,172,140, 94, 68,145,147,100,234, 40, 10, -177,138,196,200,248,189,132, 81, 18,236,140, 74, 38, 43,221,196, 24,185,191,156,217,132,169, 41, 94,103,252, 48,202,153, 72,187, - 0,133,197, 63,203, 85,150,132, 53,126,126, 40,149,125,238,142, 46,135, 72,132,196,207, 21, 25,103, 79, 44,194,199,142,152, 86, -176,180,254,167,196,169, 0,160,130,122, 71,217,203,197,204,202,158, 71,251,228,105,185,152,138, 35, 61,228, 70, 86, 81,246, 49, -118,134,192, 5, 61,255, 50, 88,104,106,166,233,122,223,127,208,118,135,121,225, 0,191,125, 58, 15,137,164,222, 84, 77, 5, 51, - 21,212,181,174, 43,234, 67,130,155,205,237,166, 57, 63, 4,255,243,245,215,211,238,225,101,248, 51, 40,155,188,100,132, 6, 90, -136,221, 50,136,189, 59, 88, 82,249,182, 1,179, 87,113, 36, 40,239,133, 80,131, 18, 20,157,131,244, 52, 70, 20, 18,216, 57,160, -115,188, 20, 29,212,167,205,217,166,251,218, 85, 93,109,180, 29,252,224, 28,167, 91, 61, 46, 19, 18, 9,211,245, 87, 0,202,174, -166, 39, 97, 32,136,206,210,165,160, 73,193, 30, 48, 38,158,140,241,224,197,255,255, 27,252, 31, 28, 52,134, 64,173,116, 91,219, - 29,119,118,246,171, 88, 52,112, 5, 2,253,122, 59,251,230,205,123,242, 34, 40, 23,231,165, 48, 41,208,195,120,226, 38,213,216, -252,141,235, 24, 57, 25, 42,138,229,105,224, 49, 70,103, 38,231,241, 27,121,216,152,109,228, 43, 11, 11,244,160, 6,146,172,108, - 91,120, 41,136,251, 50,167,175,148,120,187,208,135,170, 63, 14, 86,121,132,176,144,132,107,141, 53,141,157, 83,231,130, 54, 81, -157,237, 82,215, 29,124,117,250,249,126,179,221,189,201,140,127,215,212,236,122,248,214, 53, 69, 78,186,113,198, 54, 25,247,101, -173,136,178,152,152,121,102, 3,157, 46,144, 38,122, 66, 66,166, 34,138, 99,200, 99,145, 75, 88,192, 78,191,253,229,169,120, 39, -137, 78,114,204,219, 4, 22,114,224,236, 36,136,209,128, 57, 75, 36, 1,175,124,217,210, 39, 87,170, 73, 98,161,174,237, 31, 11, -105,177,102,183, 81, 80,226,160,188,219, 20,175, 85, 85,206,108,248,173, 93, 33, 82,213,230,164,132,191, 4, 88, 47,203, 29,153, -137,105,215,184,177,143,126,219,238, 25,220,159, 76,117, 47,103,173,200, 48,217, 80,139,169,227,117, 30,170,214,232, 59,178,237, -174,109, 30,216,134,209,180,100, 96,196,217, 75, 50,216, 28, 96,122, 39,106, 16, 16,189,141,254,101, 47,217, 15,100,230,253,130, - 25,184,194, 30, 31,209,229,150, 56, 91, 48,193,139,141,141,165,177,131, 30,193,193,204,177,212,158,140,196, 95, 51,151, 56, 45, -233, 9,203, 0, 19, 77, 39,200, 46, 78,125,186,252,121,115, 69,178, 47, 39, 33,237, 79,196,209,131,137,131, 14,171,163, 14,176, - 14, 3,136, 68,240,158, 52, 48,112, 84,119,163, 72,144,221, 79,187, 96, 88, 78,124,179, 23, 82,103, 24,239,135, 57,224, 68, 60, -222,244,171,195,246, 92, 43,241,156,114, 47, 97,231,221, 94,240,102,185,106, 84, 99,213, 50,210,148,201, 12,238, 6,238, 31, 86, -143,171,188, 48, 31,168,213,225,253,248, 81, 17,184, 43,142,158,102,248, 50, 95,153, 75, 90, 12,108,216, 51,201, 31,209, 60,115, -164,148, 22,100,252, 32,156, 71, 17, 75,242, 88,232,213,219,193, 8,158, 83,115, 94, 62,168,189, 75, 71, 95, 99,167, 84, 83,183, -251, 34, 95,155,210,179,211,205,177,255, 52,111, 45,196,178,193,198, 86,105, 25,248, 97, 98,190,241,126, 4, 32,237, 90,118, 26, -134,129,160,215,118, 30,164,105, 65, 66, 42,119, 56,243, 11,252,255, 23,240, 11, 8, 36, 68, 91, 82, 74, 72, 98,227, 93,123,157, -164,105, 42, 30,215, 28, 18,201, 73,102, 71, 59, 59,179,250, 63,204, 29,230, 81,166, 27,171,213,167, 32,126, 26,250,163,228,128, -131,120, 26,196,130,173,132,145, 45, 98,210, 58,228,124,103,222,212,211,211,140, 76, 36,151, 2,151, 2,189,124,224,105,185, 55, - 3,109,243,248,105,125, 11,162, 32, 0,218,182,189,132,152,117, 14,200,172, 82, 56,159,158,107, 40, 37,144,112,186,107, 73,243, -240, 41, 31, 90, 6, 51,153,135,230, 61, 79,190,119,140,134, 9,183,185, 25,186,240, 74,203,252,151,134,190,145, 50,103,252, 67, -120,103, 83,205, 19,135,177, 36,252, 33,254,197, 14, 92, 63,146, 39,211, 61,206,230, 65, 88,135,247,192,190,209,136, 75, 37, 7, -191,109, 29,242, 52,220,163,161, 22,166, 22, 80,209,145,230, 97, 99,120,104,202,251, 47, 40,163,167,172,112,111,184,188,186,208, -217, 10,246,219,175,155, 82, 86,181,171,136, 38,177, 67,231,209,105, 91,221,125,158,190,218, 28,129, 79,113,230, 18,150, 77,177, - 16,246, 65,193,117,154, 86,160,158,160, 36, 45,221,116,220,217, 62,242, 60, 91, 59,148, 7,143, 38,220, 57,140,165,231,236, 1, -146, 66,247,128, 57,241,168, 59, 28, 83, 98,186, 31, 89,118,207,160, 60, 47,105,138,211, 62,228,128,145,177,179, 24, 70, 37,185, -125, 24,125, 79,190,251,238,183,189, 70,199, 73,100,184, 2,102,131,137, 6,251,164, 66,192,140,153,170, 4,246, 44,184, 51,176, -194, 4,214, 97, 12,130,140,236,196,132, 8,225,135, 62,170,145,124, 26,243,255,160, 47, 63, 33,250,222, 48,178,155, 81,136, 97, - 76,155,177,199,185, 64, 51, 59,133,102, 71, 33,141,133,223, 59, 46,163, 14, 66,136, 36,106,220,227,134,154,106, 2, 58,149,218, -241,119, 37,213,221,242,118,189, 88,215,142, 63,139,246,249,240,182,109,118, 7,100,238,134, 89,136,223,211,165, 50, 93,100,216, -216, 53,208,202,198, 54, 13,174, 53,175,242,164,232,148,106,218, 38,198, 91,199,152,126,202,146,192, 0, 20, 74,193,179, 38, 68, - 49, 25,242, 65, 97,226,143,251, 49,247,246,176,169, 55, 84, 49,221,173,241,192, 11, 81, 46, 85, 90,117, 27,146, 45,149,151,145, -252, 49,126, 11, 64,218,181,237, 38, 12,195,208, 56, 73, 41, 21,104, 12, 94, 54,105,223,176,255,255,172, 49, 33,110, 37,151,217, - 78,156,166, 93, 25,210,120, 68, 2,169, 52,201,177, 99, 31,159, 99,159,193,244, 71,201,248, 40,145,159,205,226, 43, 45,127,128, -169,146,106, 58, 0, 89, 46,230,206, 73, 3, 93,245,184, 99,149,110, 24,209,139, 39,194, 53, 16,130,241,205, 7, 86,209,237,125, -220, 87,116,139, 48, 94, 88, 18, 99, 65,228,194,112,169, 49,185, 34,229,135,165,214,129,102,248,193,103, 95,103,229, 50, 31, 82, - 41,113,211, 78,127,234, 82, 25,165, 90,254,104, 68,106,198,200, 80,107,194,238,158, 55,247,130, 31,219, 72,205,157, 23, 3,152, - 59, 79, 63,233, 37,228,244,255, 25,201, 27, 45,196, 69, 2, 12,190,147, 83,102,184,147,246,107,209,236,241, 84,104, 82,220, 33, - 72,128,174,185,152,156,196,116,169, 70,223,137,104, 90,201,202, 49, 12, 44, 24,223, 55,107,187,124,105, 62,118, 75, 42,254, 5, -127,245,100,219,236,165,188,163,230,180, 76, 63, 13, 28,155, 45,126, 17,227, 40, 77,253,235,204,146,195,224,123,194,220,164,233, -246, 24,120,162,101,227,183, 16,170,140,117,150,249, 58,140,195, 36,185,201,154, 36,147,196,125, 11,129, 47,153,187,192,196, 33, - 53,170,113, 77, 70,234,207, 15,103,214,255, 66,249, 10,226,197,145, 3,146,250,105, 40, 42,146,204,160,193, 35,109,178,122,130, - 25,200,217, 17, 74, 76, 18,221,225, 73,249,104,166,105, 85,206, 66,248, 93,138,153,217, 33, 80, 38,176,138,213,223,168,132, 21, - 6,153,198,145,218,135, 42,200, 94,194,228, 24,217,243, 65,116,233, 58, 18,171,238,159,143,113,144, 28, 40,227, 75,194,252,164, -137,182, 73,193, 61,222, 1,247, 39,103, 86,227, 3,178, 71,204,234,177,228,197,226, 73, 53, 12,172, 81,141,213, 45,238,234,183, -238,253,181,221, 57, 31, 22,198,124,157, 15,253,237, 4,148, 30,209,235,114,131, 22, 58, 46,160, 49,218, 34,196, 51,153,210, 58, -119, 61,134,243, 5, 47,253,253,185,109,186,100, 42, 96,228,234,169,216, 15,163, 37, 55, 68,182,214,148,154,115,200, 45, 16, 98, - 83, 67,238,172, 36,236, 6,214,184,167, 60,208,197,219, 26, 86, 96, 55, 7,247,205,237, 64,195, 79, 78, 60,215, 31, 1, 72, 59, -163,221,132, 97, 24,138,198, 33,165,168, 48, 49,177,135, 73,227, 15,246,255, 63, 52, 33,237, 21, 77,172,170,182, 54,206, 98, 39, - 78, 66, 88, 81, 37,250, 78, 31,104,123,227, 56,215,231,154, 7,203,246,251,127,147,171,161,134,245, 48, 84, 81,137,212, 86, 73, - 45, 51, 29,247, 31,131,188, 4,214,149,254, 5,166,107, 66, 34,253, 21,232,109,191,123,191,204, 4,153,166,210,146,150, 4,166, -133,117, 20,220,167,140, 49, 31,231, 95, 45,237, 66, 50,159, 32,161,116,183,156,198,151,110,254, 35,138,172,164,109,157,114,177, -147,245,208, 22,254, 69,205,126, 27,195,226, 30, 38, 93, 93,156, 5,133,150,159,171,224, 13, 34,254,119,185, 79, 32,101,125,140, -197, 6,162,165,219,122, 57, 6,102,102, 2, 7, 42, 65,177,201,112, 61, 15,121, 53,217,108,163,222, 72,217,113,160, 89, 83, 23, -226,155,155,216,193,167, 79,177,101,205,234,253, 15,105,195,178, 62,236, 59, 28,145, 88,106, 14, 46,206,117, 86,125,221, 16,202, -194,245,174,213, 97,119,248, 68, 95, 7, 33, 77,143,233, 76,248, 10,200,242,193, 53,225,141, 79, 20,177,185,217, 46, 97,235,198, - 19, 88, 20, 11, 36, 22,101,123,196,167,112, 63,217,229, 88,102, 81,115,156, 59,169,206,243, 50,203,171,120, 93,245,181,149,116, -151,162,107, 38,151,240, 42, 17,198, 66,108, 17,172, 84, 41,241, 66, 24,190, 70, 42,166,147,221, 42,128, 16,174, 3, 28,113, 73, - 10, 4,125,140,147,138, 17, 6, 16,250, 88,245, 94, 39, 69,102, 99, 94,232, 32, 31, 75,255,163,236,217,118, 36,124,122, 87,236, -188, 43,113,207,221,246,100,192,191, 21,119, 53, 83,185, 63,120,105,208,199,231,227,233,124,154,145, 56, 29, 8, 51, 60,202,100, -168, 39,163,125,241, 78, 97,146,187,102,255,178,121, 29,208, 62, 25, 26,200,139,233,122,132, 16, 53,225,192, 32,207, 95,128,175, -246,125,113,216,180,198, 11,189,238,199,190,159, 6,139,211,160, 39, 74, 80, 39,172,236,100,115,194, 38, 72,251,140, 0, 40,104, - 87,156, 25, 23,222,100,162,169,134,147,105,203,203, 0,107, 35,123,119,152,212,194,176,139,113,173, 55, 91,227, 6,251,205, 81, -142, 43,246,167,224,159, 0,172,157,203, 78,195, 64, 12, 69,199, 51,233, 12,161, 45, 2, 36, 88,148, 5,255,255, 79,172, 17, 66, - 2, 54, 72, 45,201, 60,136,237,113, 50,121, 16, 64,208,117, 43, 37, 81,227,216,215,185,231, 86,255,117,189,214,241,100,106, 86, -226,127, 75,160, 76,107, 99, 25, 20,171,182, 9, 94,126, 54, 92,166,145, 93,126,254,241, 34, 88,111,145, 18, 3, 55,181,219, 59, -247,240,244,134,220, 69,102,130, 16,124,228, 37, 86,135, 42, 60,250,230, 93,244,168, 73,203,236,133,217,203, 45,252, 73,142,204, - 74, 76,157,146,184,212,102,168,200, 93,217,197,198,121,151, 17, 66, 88, 88,173, 84, 33,255,131, 23,225,117,161,191,179,179,116, - 75,231, 79,240, 0, 76, 27,176,153, 45,133,163, 3,141, 8,233, 28,125,207, 92, 99,116, 31, 95, 16,137,155,182,137,225,168, 76, -171,226,165,172,227, 61,157, 8,228,152,103, 44,204, 72,190,246,200, 8,187,187,174,155,166, 69, 66,217, 71,120, 61, 33, 94, 6, -100,215, 90, 30,243,189, 82,183,245,197,115,218, 86,148, 91, 93, 56, 72,123, 35,211, 80,207,139,200,158, 40,178,134, 46, 85, 2, -200, 78,155,144,223,251,101,123, 68,118,172, 73,213,136, 98, 17,146, 36,163,193, 21,243, 53,189, 4,138,254, 3,166,171, 98,189, -178, 64, 42,141, 80,217,246,156,114, 2, 77,202,190,166, 62, 19,158, 99, 86,201,173, 13, 18, 22, 26, 56, 79, 82, 21,164,209,111, -111,138,181,175,193,114,243, 62, 86,102,162,228,110,143, 87, 20,105,144, 95,102, 79,213,201,236, 51, 41,238, 57,200, 35,183,119, -113,220,185,195,120,149, 58,214,100, 22,100,153, 69,214,222,159,232,181, 20, 83,178, 88,220, 85, 30,106, 53, 75,216,248, 23, 69, -208,169, 54, 96,141,238,238, 9,123,229, 14,206,184,238,250, 88, 48,109,244,148,110, 2,198, 84, 14,145, 50,109, 36, 40, 62,244, - 79, 63,252, 57,190,187,224,204,217, 6, 77, 52,221,232,239, 73,165, 81,123,187,231, 29, 43,228, 86,176,247,235, 38, 78,155, 64, -109, 8,157, 79,145,154, 36,206,198, 10,188,109,166,198,159, 23,224,217, 68, 24, 80,218,105,187, 35,172,205,238,232,143,134, 65, -119, 10, 62, 5, 32,237,202,118, 26,134,129,160,119,215,185,168, 10,170, 4,136, 7,254,255,223,224,161, 82, 57,218,230,176, 77, -118,125,196,129,164, 21, 80,245,161,170, 90,229, 33,246,120,178, 59, 59,163,255, 6,229, 87,203, 50,176,254,229, 82,222, 21, 92, -232,117,168,235, 70,113, 46, 83,180,169, 41, 26, 36,213,162,179, 9,116,209,251, 95, 49,219,105,163,214,187, 68,188,223, 84,221, - 64, 47,239, 93, 83, 20, 54,200,200,248, 2,123, 59,222,112,189, 53,246,232, 6, 15,100,231, 31,154,179,212,165, 52,177, 82, 79, -209, 23, 62,205,184,150, 66,222,165,236,206,124, 65,132,149, 88,243,213, 71, 48, 29, 90,149,108, 41,175,179,200, 4,235,149,188, -183, 82,112,167, 80, 8,194,147,207, 34,136,113, 34, 55,156,195, 11, 5,207, 92,224,136,206,189,116,255,206, 98, 80,219,104,110, - 53,107,133,141,166,118, 48,181, 5,161, 18,188,220, 62,216,110,193,139,103,200,200, 51,199,184,102,123,231, 14,159,253,237, 67, -185,219,148,175,251,142,200, 52,196, 77,109,157, 69, 9,250,215,163, 82,207,205,246, 80,220, 1, 27, 77, 64, 46,167,202,166, 49, - 81,185,153,244, 60,170, 41,102,149,252,144, 42, 17, 85, 22,236,185, 34, 49, 56, 46, 24,174, 4,212, 48,241,175, 33,163,206,126, - 83,218, 93,138,140,143,200,158, 44,105, 96,145, 94,192,236, 83,116, 28,136, 39,101, 72,102,176, 19,133, 7,165, 93, 52,209,137, - 17,113, 40, 70, 0, 58,228,202, 58,229, 69,210,128,153,207,134, 93, 67,110,192, 53,190,179, 22,221,201,179, 98, 19,184,131,200, - 49,221,100,157,157, 12, 29,229,119, 11, 32,254,235,132,210,196,228,188, 46,208, 78, 92,204,143, 47, 25,200, 12,208,220,124, 83, - 47, 62, 63,105,164,206,254, 43, 88, 12, 86,118,144,139,183, 79, 11,199, 71, 46,187,115, 67,181,224,128, 14,216, 53, 79, 4, 52, - 66,105, 61, 18,122,166,217,222,210,138,106,172, 10, 85, 27,180,106,120, 59,171, 78,216,143,245, 65,222, 98, 52,203,141, 46,159, - 71,110,132,131,159, 92, 91, 13, 37,209,120, 66,244, 98, 44,227,226, 30,231, 19, 3,188, 45, 29,167,103,105,177, 64,247, 3,112, - 8, 89,255,197,134, 69, 97, 83,178, 5,147, 69,107, 10, 44, 29, 65,111,142,222,213,252, 75, 0,210,174,100,167, 97, 24,136,198, - 75,210,146,166,149,232, 1,113,227,208,255,255, 3, 62,133, 43, 61, 0,165, 72, 45,212, 89,108, 51,139, 29,167,233,130,128, 30, -163,202,138,156,241,120,150,247,222,252, 49,126,255,177, 31,125,150,251,154,165, 90,205,165, 50, 79,178,192, 94, 81,193, 95,243, -236,163,197,253,177, 23, 72,136,205,254, 12,236,224, 35,209, 14,237, 47,191,188,102, 17, 68,173,238,170,233,234,190,122,124,250, - 80,140,137,240,169, 51, 13,171,189, 58,249,144,171,182,177,155, 56,234,232,236, 14,240, 23,168, 99, 61,154,101,200, 24, 98,200, - 12, 38,106,168, 34, 86, 78, 83, 40, 61,203,228,162,192, 76,208,161, 32,116,187,167,151, 57, 92,213,146, 28, 30, 39,166,146, 46, - 50,177, 64, 23,162,140, 71,153, 70,118,244, 96, 73, 75, 37, 80,197, 78,170, 57,181, 19, 26, 9,183, 11, 42, 98, 64,166, 50, 83, -200,144, 6, 83, 42,149,216,210, 44,201, 66,120, 91,203,218,116, 93, 4, 65,128,219,135,139,129, 68,117, 48,246,199, 36, 64,138, -174,115,111,219, 67, 81,169, 50,215, 20,236, 96,125,228, 51,178,168,248, 7,105,196, 10,146,161,106,185, 21,115, 48, 70,141, 98, -187, 26,171, 51, 24, 33, 18, 23,210,219,132,147, 9, 0,139, 48, 68,137,155,171, 99,165,199, 16,239,147, 39,178, 97,216,222,144, - 53, 31,156,123, 84, 58,232,169, 52, 67,180,184,240, 71,171, 6,240,119,150, 20,166,253, 0, 37, 32, 46,119,179, 71, 96, 69,194, -199, 48,115, 73, 72,150,140, 38,225, 48, 22,195,115,252,116,208,123,226, 16,222, 67,160,128,234, 4,178, 79, 3,236,149, 33, 0, -116,103,224, 95,101, 63,175, 56,153,129, 63, 62, 55,163,146,168, 11, 1, 78,228, 24,185, 88,153,137, 3, 79,162,160,163, 59,169, -189,252,182, 9,228,211, 88,196, 32,253,235,250,154,251,128,155,122, 10,196, 28,245,129, 79,146,236,255, 57,119, 8,192, 91, 91, -159,203, 9,152,147, 16,132,245, 8,243,142,156, 38,226,169,234, 82,221, 78,117,233,232,222,157, 32,111, 29,191, 51,184,254, 50, -207, 77, 86, 64, 76,190,144,179,169,190, 89,155,117,155, 25,216,227,198,181, 93,230, 38, 96,231,222, 63,127,189,108,204,251,206, - 30, 8, 64, 9,174,192, 54,206,192,129,179,136,157,234,224, 60,146, 94,168,160,201, 88,190,215,255, 96,137,164, 34,203, 33, 87, -110,113,138, 4,248, 7, 62, 14, 65, 76, 85, 32, 1,218, 17, 13,154,181, 40, 17, 95, 84,168,137,146,162,182,166,144,197,183, 0, -164, 93,201,110,194, 48, 16,181,157, 56, 11,164, 44, 7,212, 83, 15, 21,255,255, 61,189,245, 70,171, 74, 85, 11,180,108,137,237, -169,103,236, 24, 39, 44,221, 34, 78, 28,144, 49,120, 60,203, 91,254,213,159,249, 9,136,253,108,136,143, 36, 68,194,175,219,201, -165, 84, 95,226,185, 95, 6,154, 51,146,150, 60,138,242,188,215,252,215,109,122,251,193,196, 29,238, 29,254, 63,234, 86, 9,160, -247,144,148, 35,155,230,114, 62,171, 22, 43,243,240,188,205,165,208, 78, 80,175, 61, 10, 28,227, 38, 60,154,244, 94, 2,111,154, - 39, 47,209,121,177,173, 20, 52,182, 76,155,197, 55, 45, 78,156, 48,145,136,210, 73, 49,110,138, 42,193, 97,253,160, 16, 6,212, -170, 86,123, 6,191, 50,214,184,161,215, 56,229,163, 76,106, 16,133, 6, 68, 67,130, 88,145,101,111, 37,145,178,155, 39, 80,147, -202,216, 36, 69, 85,124, 41,108,146,130,174, 98, 20,107,248, 78,216,210, 4, 9, 29,101, 2, 54, 25, 31,164,124, 93, 39,107,165, - 55, 6,193, 45,193,109, 50, 37,233,118,187,129, 27, 13,139,183,195,176, 74,106, 80, 25, 78,102,177,246,119,151, 89, 73, 8,165, - 91,187,164, 98, 4,249,248, 29,131, 63,147,156, 20,219,221, 0, 92,128, 48,194,116, 36, 27, 13,139, 12,180,180,167,102,158,206, - 57, 77,160,107,182,122,238, 16,156, 84,161,109,184,183,144,191, 0,163, 14,200,188, 99, 25, 16, 56,198, 97, 62, 31,129, 40, 60, -163,149, 93, 21, 54,137,243, 63,136, 4, 21, 81,123,142,132,142,192, 27,207,193,105,139,134, 59,175, 7,106,248, 58, 55, 12,238, - 93, 12,224,106,250,137, 95, 66,211,125,228,134,211,166, 11, 93, 12,161,188,127, 9,241, 56, 77,238,200,241, 66,192, 32, 66,111, - 54, 11,236, 79,249,251, 9,182,135, 71, 77, 24,195,142, 76, 75,118, 74, 95, 98,151,147,247,243,243,186,239, 30,170, 56,253, 1, - 61,232,195,229,140,222, 39,239,232,215,225,216,170,200,105,194, 55,166,197, 12,251, 32,160,116,202,247, 92,203,212, 99,132,208, -214, 3,235,109,228, 25, 77,178, 81,153,204,215,205,114,167,118, 67, 89, 86, 73,150,163,244,200,242,245,243,101,171, 17, 29,239, - 90, 0,200,124,132,166,208,216,178,215,154,116, 51,209, 70, 8,251, 49, 50,132, 44,176, 69,179,118,251, 66,139,207, 9,249,225, -219,241, 52,174,161,117,122,118, 57, 78,228,237,233, 82,246,195,149,202,101, 38, 16,228, 7, 95, 2,176,118, 45,189,109,195, 48, -216,164, 44, 57, 93,147,181,197,150,174,235,101,247,237,255, 3,251, 35, 59,238,222, 94,138,162,113, 27, 63,100,113, 36, 37, 37, -118,237, 5, 25,176, 99, 14,137, 19, 68,162, 62,145,223,227, 63,232,155,254, 9,200,207,189,227,199,212,168,104,185, 68, 89, 79, -184,152, 26, 62, 55,138,123, 39,164,154,136,161, 70, 97, 11,135,123,223, 67, 1,119,224,126, 20,180, 35,207,208,187, 30, 77, 62, -163,222,231, 83, 81,220,187,234,251,221, 13, 88,247,243,151,210,222, 53, 23, 83,231,214,152,249, 97,242,177,252,198,223,193,126, - 43,139, 91,223, 51,158,125, 62, 99,178, 63,140,236, 98,202, 35,165,146,244,196,166,216,178,191, 50,184,253, 80, 53, 93,239, 51, -198, 63,135,130,109,114,191,155, 95,109, 42,119,187,182, 72,124,115,132,190,163,167,150,214,202, 21,107, 1,214,142,174, 45,215, - 98, 9,217,224,101,197,203,116, 99,101, 77, 59,131, 87, 85,121,105, 85,162,135, 12, 58, 24, 2,136,152,228,113,215,212,111, 77, -221,250,167,206,119,131, 44,160, 21,224, 78, 72, 68, 7,158,176,132,212,214, 47,158, 1,139,237,195,199,128, 91, 3, 27, 79, 43, - 3,219,149,105,204,102,103, 46,247,162,230,209, 72, 4,221,230, 16,195, 27,148, 48, 67,152, 82,228,178,234, 30,134, 99, 11,151, -178,224,126,161,207,144, 61,181, 82,219,157,142, 22, 92,177,121,147,169,103, 83,123,147, 88,104,194,180,110,192,216,182,107,178, -122, 23,186, 4,248, 87,170, 82, 24,149, 30,204,169, 52,194, 18,138,145, 99,135, 28,120, 41,223, 90,229,149, 3, 7,234,152, 65, - 33, 69, 70, 68, 43, 46,127,234,191,198, 68,158, 76, 54,238, 4, 56,253, 18, 4, 35,225,211,108,116,156,111,200, 33, 7,251, 29, -233, 70,179,226, 78, 52,219,189,112,106,214, 54,105,160, 77, 15,148,124,220, 80, 78,217, 78,164,166,201, 6,127, 23,124,186, 8, -222, 29, 90, 9, 60, 90, 14,103, 57,177,239,134,115, 32,105,134, 22, 12,168, 25, 84, 11, 39,210, 72, 30,106,241,249,226, 94,210, -103, 66, 7, 88,118,193,187,194,184, 32,246,145, 37, 67, 32, 99, 80, 99, 10,154,190,105,125,139,232,110,170,235,175, 23, 95,248, -247, 61,191, 62,188,245,175,123,241,159,169,189, 48,248,124,212,204,105,102,242,208, 82, 39, 79, 74,204, 65, 8, 3,106,144,155, - 52,118,108,116, 53, 74,179,165,116,255, 41,139, 82,225,160, 6,126,164, 38, 71,105,244,158,145, 44,222,178, 5, 23, 31, 26,124, - 50,181,180,255, 35, 0,107, 87,211,211, 70, 12, 68,109,143,157,221, 77,182, 37, 2,122, 40, 18,234,137, 35,255,188,255,165,231, - 30, 42, 36,144,232, 1, 33, 2, 37,108,146,181,103,234,177,189,142, 55, 9,208, 74, 28, 19, 69,201,106,179,126, 30,207,188,143, -143,153,175,254, 87, 33,159, 69, 73,178,244, 30, 72, 60, 7, 39,118,173, 75,104, 39, 16,253,160,251, 13,141,133, 84,121,120,139, -217, 92,111,160,214,132, 59, 75,215, 68, 83,169, 46, 76,125, 78,202,255, 91, 11,244,101,178,199, 89, 55, 99,239, 45,253,165,109, - 46,191,205,175,186,254,251,143,223, 30,235, 0,120,102,231, 80,197, 88,192,226,169,103,171, 27,255,109,191, 80,159,130,248,234, -184,219,188, 22, 41,238,227, 93, 56,118, 35, 77, 10,183, 59, 2, 99,132,150, 14, 62, 89,215, 26, 61,111, 42,213,117, 52, 16,105, -252,103,142,133, 56,231,154, 66,118,188,215,136,123,129, 55,130, 94, 18,235, 38,221, 85,110, 4, 1,156,181,250,116, 62, 53,192, - 42,230,135,165, 71, 86,235,143,108, 53,139,182,136,243,101,128, 93, 28, 12,147,128,148,135,117,163,213, 73, 51,105, 39,242,100, -198,166,214, 28, 8,169, 77, 83,105, 83, 25, 3,240,184,232, 30,255,172,174,238,159,231,203,238,161, 91,175, 28,105, 14,253,225, - 21,102,128,102, 19, 56,251, 12, 71,205,164, 2, 57,173,153, 28,252,210,214, 63,159,228,202,169, 59, 91,221,218, 64,238,244, 63, - 26,141, 7, 34, 35, 55, 74,121,252, 25,213,202, 28,163,132, 5, 67, 49,202,129,182,189,149, 49, 93, 4,139,113, 12,102,251,194, - 33,137, 34, 37,186,225, 48,204,195, 92, 16,148,228, 13,202,192,113, 64, 45, 52,138, 25, 56,208,161,112, 98, 84,164,148, 38, 28, -133,117, 1,166, 62, 11,165,104,119, 23,141,196, 98, 9,207,228, 91, 61,240, 38, 73,108, 51,251,104, 24, 25,237,111, 34,170,160, -117, 71,195, 30, 61,136,131,200,201,119, 41, 9, 5, 62, 51,178,231,144,235,156, 69,187, 3,238,180,189, 71, 99,163,244,212, 64, -122, 99,221,203,212, 24,150,219,101, 43, 15,209,118,113,239,242,168,104,161, 52,107,215,225,184, 96,143, 47, 35,184,239, 79,194, -255,241,112, 65,175,110, 77,241,132,225,107,117, 25,138,119,201,107,129,159, 87, 81, 67,219,232,214,185,141,197, 80,114, 3, 6, -193, 40,107, 35,253, 38,160,173,175,135, 60,196,171, 94,216,158,252,213,173,158,251, 5, 50,150,225,134, 77,125, 25,214,122,182, -243, 77,185,100,113, 46, 26,222,180,108, 6, 73,220,218,135,240, 60, 80,202, 10, 8,129, 42,161, 59,100,132,222, 4, 5,115,216, -251, 85,232,178,154,124,126, 21, 73, 36, 20,164,156, 28, 10,152, 74,198,232, 79, 89,169,250,175, 0,172,157,219, 78,219, 64, 16, -134,103, 15, 94,219, 52, 73,137, 43, 21, 33,138,122,150,120, 2,158,154,123, 30,130,187,222, 87,170,138, 90, 53, 64,192, 10, 34, -177,227,205, 78, 61,123,112,214, 38, 8, 42,245, 5, 34, 89, 25,205,206,254,243,239,247,255, 55,255,204, 63,157, 1, 38,106,199, - 24, 5,241, 60, 58,183,119,223,218,118, 22, 30,235,157,255,110,255,176,149,246,152,155,167,130,249, 73, 16,208,113,243,141, 94, -182,242,207,121,242, 86,164,133, 20,169, 16, 74, 50,158, 36, 37,232,179, 31,183,243,229, 90,145,175, 9, 60,150,218, 90, 46, 67, -252, 31,110, 85, 34, 34, 56,179, 63,192,199, 44,253,130,122, 6,122, 25,194,143, 86,207, 21,153,137, 4, 83,238, 77, 23,102, 14, -117,190, 54,229, 98, 53,205,149,219, 6, 79, 9, 35, 44, 78,167,197,201,241,254,197,236,250,124, 86,206,109,199,159, 0,124, 4, - 94,128,252, 14,205,189, 63,225,161, 29, 27,222, 43, 57,121,149,190, 59, 24,231,237,236, 81,233, 34,211,235, 58,105,136,112, 97, - 26,205,171,118, 84,231, 52, 61,230,100,234,133,145,148, 74,242, 81, 42,179,148,191,206, 84,150,171,198,208,251,186,203,219,234, -234,231,245,229,205,162, 92,214,111, 70,234,248,160,248,122,116,120,117,183, 92,213, 77, 91,206,169,108, 43, 27, 71, 9,222,213, -184, 64,174, 81,252,190,215,191, 30,176,164,122, 38, 54, 18, 5, 49,109, 8,163, 72, 34, 52, 8, 75,217, 98, 1, 41, 36,156,227, -174,251,118, 12,178,187, 23, 80,186,190,208,209,129,123, 9, 22,222,177, 23, 68,100,135, 31,128,167,134,119, 22,140,240,176,117, -107,128,137,154,201,176,189,227,179,230,232,184, 89,246,166,126,139, 32,102, 17,117,167, 99,206, 68, 84, 94,230,152, 91, 70,160, -227,194,115, 31,223,206, 88, 39,163, 99, 79, 83, 97,241, 5,195,129,199,236, 71,106, 10,134,115, 34,124,127,223,179,123,246,117, -224, 1,216,198,230,133,230,142,195,230,238, 18, 80,205,240, 39,120,144,204,125, 94,220, 46, 9, 22,159, 92,177,178,254,195,165, -225,240, 62, 56,102, 43,219,220, 95, 34,212,116,221, 63, 23,217,195,166,122,185,117, 27, 30, 37,213, 48, 15,104,116, 24,114,158, -216,191, 36, 21,147, 15,227, 79, 43,122,142, 68,130, 91, 99,176,214,213,158, 80,116,207,117, 88, 77, 27,135, 77,126, 1, 67, 11, -113, 67,123, 84,138, 91,178, 31,171,181,245, 56,134,248, 78,207,171,176, 6, 24,180,119, 96,107, 82,109, 47,173, 20, 36,192,156, - 3, 64,218,242,177,153, 30,104, 34, 10,158, 14,107,121,151,205,227, 32,164,238,181, 57,233,242,180,136, 73, 4, 35,102, 14,237, -125,137, 50,201,254, 10, 64,219,181,228,182, 13, 3, 81,146,162, 44, 25,141,154,192, 49, 96,160,117, 80,100,211, 77,209, 11,100, -159, 11,228,124,189, 68,183,201, 9,178,202,186, 64,145,116, 81,160,249,194,113, 16,219,144, 66, 13, 51,156, 33,101,210,118, 62, -155,122,229,133,252,163,169,225,188,153, 55,239,233,255, 17,190,223,188,102,165, 74, 99,187, 41,231,100,245, 55,163, 54,251, 2, - 89, 74, 36,234,149, 93, 34,111, 83,170,219,178, 19,155, 57,186,146,193,141,124,177,104,126,243, 97,192, 46,108,248, 71, 1,100, -153,198, 44,152,140, 15,124,173, 51,220,248, 70,121,232,100,163,206,155,251,130, 83, 1,143, 82,239, 57, 95, 22,243,151,122, 29, - 58,140,179,138,245,217,240, 77, 41, 97, 67,145,239,158, 70,154,228,189, 24,183, 98, 92,148,179,122, 81, 8, 59, 84,101,157,137, -227, 63, 87,167, 15, 15,119,225,226, 91,186,248,176,200,143,202,234,100, 58,153, 11, 40,132,220,145,121, 94,246,246, 63,239, 30, -124, 29, 77,110, 22, 83, 81,215, 77,173, 74,208, 45,108, 41, 60,213,196, 64,225,206,204,114,165,158,136,160,248, 17,247,111, 95, -151, 37, 2, 82,113, 57,173,207, 47,110,175, 39,143, 55,152,179, 55, 45,238,230,170, 95,124, 31,109,127, 27, 15,126,254,250,247, -227,236,252, 74, 56,186,239,208, 77,159,230,187, 59,131, 59,243, 97, 14,185,147, 3,112,117,123, 68, 8,109,143,155,163,248,204, -178,211,180,138,233,222, 68, 2,160,145,107, 22,245,146, 86,166,101, 4,158,216,139,170, 37, 96,163, 44,155, 95, 4, 33, 12,199, - 21,228,229,188,140,240, 98,185, 33, 65,180,145,161,115, 40,251,216,152,167, 1,235,114,214,107,249,198,187, 41, 25,193, 79,201, -184,138,172,140,224, 41, 88,110,187, 88, 47,132,202, 21, 57,233, 11, 53, 42, 24,153, 4, 33, 29,185, 57,197, 84,162, 99,141, 42, -158,109,103,246, 12, 4, 72,204,210, 96,193,213, 58,125, 19,187, 92,232, 78, 53,172, 59, 72, 98,135,188,142,127,212,166, 16, 25, -186, 17,147, 36,196,203, 85, 5,188, 72,215, 65, 46, 87, 24,108,210,244,133, 52,209, 73,168,144,239,148, 19,224, 71,174,114, 71, - 59,113,131,117,245,138, 81,240,104,235,211,245,236, 50,213,170,121, 45, 62,133,252, 26,179, 58, 85,245, 42, 99, 48,254,102,123, -213,151, 18, 33, 60, 89,138,205, 65,205, 12,230, 72,141,165, 79, 4,194,202, 26, 99, 5,104,242,250,144, 45,225, 34,178, 40, 4, -166,208,208, 65,217, 5,119, 47,233, 78,120, 29,232, 64,144,153,112,196, 60,227, 66,188,108,189,122,187,167, 45, 49,206,210,172, -192,233,171,110,236, 1,215, 6, 2, 9,183,241,241, 23,114,160, 71, 0,225,230, 19,221, 93, 7,174, 45,240, 44, 0,105,215,214, -146, 64, 16, 70,103,118,213,221, 53, 43, 72,187, 81, 18,228,131, 61, 20, 21,129, 81,253,227,254, 68,208, 99,143,209, 75, 4, 69, -153, 73,166,101,150,174,155, 59,251, 53,247,157, 49,139, 34, 89, 68,196, 21,193,111,102,206,119, 57,231,252,164, 15,156,207,231, -107,181, 90,189, 94,255,207,200,145,126, 84,171,213, 48,164,167,224,104,236,181,206,134,203,229,242,210,242, 82,167,211,254,210, -153,132,201,227, 10,223,255, 6,176,150,136,102, 27,203, 21,187,127,116,184,185,187,221,168,223,113,138, 48, 99,166,114,130,153, -124,102,157, 70, 87,216,149, 57, 34, 66,249,238, 37,202,184, 88, 85, 0,208,222,193,254,198,206, 86,243,190, 17,211, 47,129,212, -118,224,153,129,119,183,200, 96,181,204,101,181,197, 29,249, 93,163, 66,232, 19,244, 17, 68, 31,201,130,231, 15, 73,242, 10,132, - 94, 15,131,240, 42, 26,182,191,224,163,136,196, 37,112, 62, 8, 3, 5, 43, 78,118,189, 24,236, 86, 74,107, 51, 83,221,246,240, -246,105,208,163,247, 99, 84,200,209, 0,117,243,126,134,226,244,105, 47,195,234, 54, 57, 28,120,238,108,224, 6, 89,220, 27, 68, -215,141,238,217,229,227,201,101,235,162,213,125,232,135, 55,113,212,129,216,103, 36, 38,116,254,242,118,124,211, 60,125, 31,132, - 8,138, 8, 85,188,169,229,194, 42,246,231,187, 73,129, 41, 63, 58, 40, 35,138,234, 82,233,148, 9,117, 18, 9,169,177,129, 37, - 5,210, 81,154, 40, 32, 53, 63,229,112,186, 68,176,170,196, 2, 0,150,144,163,193,126, 49, 71,232,240,184,152,187,214, 12, 81, - 22, 65,186,139,104,120, 99,164,128, 40, 1, 19,186, 89,215,239,163, 29, 38, 90,214, 72,201,240,212,120, 65,120,196,224, 52, 32, -177,173,184, 33,227, 19,255,188,160, 64, 26,129, 40, 49,247, 84,158, 55, 73,145, 79, 58,246,131,173,244, 40, 77,150,144,193, 99, -146,146,141,166,253,105, 98,212,208, 19,131,180,172,128, 18,118,172,202, 20,140, 79,191, 91, 80,220,178, 71,183, 63, 53,161, 61, -240,215,177,152,196,104, 18,155,128, 61,203,149,245,195, 81, 95,229, 44,147,255, 84,108, 21,103,144,160,189,179,226, 12,199,112, -116,103, 92, 12, 86, 75,254, 28,125, 39, 26, 9,223, 29,240, 93,193,141,135, 17, 17, 42, 66,116,163,143,105,190, 75, 55,104, 66, -152,249, 6,199, 40,130,151,132, 20, 51, 76,123, 27, 48,130, 33, 63,167, 29,149,196,176,220,214, 69, 88,187,130,114,233,118,233, -255, 17, 35,225,246, 35, 92,106,245, 49,101,186, 18, 88, 42,155,252,118, 62,113,175, 38, 9, 63, 5,160,236,124,126,154, 8,162, - 56, 62,179,109,211, 31,212,154, 34, 24, 20,141, 23, 34, 9, 16, 96, 47, 16, 98, 98,252, 27,140, 73,213,131,164, 71,237,191,167, - 87,207, 38, 30,148,132,163, 17, 2, 9,193, 66, 0,221, 98,151,221,157,121,206,123,243, 99,167,203, 42,113, 51,105,246,176,109, - 38,179,221,183,111,102,222,247,243,253, 87,146,162, 2,110,191,223, 47, 68,252, 94,175,119,253,252,198, 35, 12,195,119,131,129, -238,206,122, 24,190, 29, 12,252,234,102,125,250,226,101,111, 97,241,113, 1,202,236, 11,211,111, 12,238, 62,246,160, 80,122,227, -224,165,155, 79,182, 94,245,223,172,132,235,214, 68,130, 57,218,151,129,222, 16,132, 12, 63,209,107, 1,132, 86, 70, 82, 13, 42, - 24, 47,121, 22,110,109, 62,223,126,189,180,182, 42, 41, 85,114,136,118,110, 84,163,240, 3, 23,199,171,243,172,182,192,130, 25, -194,163,119,168, 38,167,102,205,149, 74, 15,173,117, 74,204,137, 60,101,201, 81, 60,190, 95,111,222, 97,181, 11, 38,190, 51,113, - 82,246,173, 51, 6, 95,146,203, 49, 26,119,212, 30, 78,183,151,239,221, 62, 63, 79, 63,238, 14, 63, 31,168,244, 61, 81,129,189, - 85,197, 50,142, 70,149,181,235, 42, 87,228, 41,240,238, 20,239, 52,121,154,137,111,199,209,251,157,163, 15, 95, 15, 63,237,157, - 12, 71,209,129, 24, 15, 25, 50,232,103,131,160,203,216, 8,178,253, 36,254, 41,210,185,106,243,217,212,221,167,211, 43,139,179, - 27,173,246, 26,175,207,253,134, 38,141,143, 36,158, 26, 82, 28, 50, 18,103,171,225, 66, 77, 30, 97,150, 50,109,221, 96,221,128, -164,225,139,131, 99,140,147, 47,133,177,184,210,182,215,130,187, 96,100,195, 62,179, 96, 20, 43,184,183, 69,226, 34,223, 30,204, -119,237, 40,121,183,121, 59, 92, 91, 40,176,193,221, 40,188,221,114,188,238,178,215,192, 46, 38,112,248, 75,220,183,253,228,158, -199,175, 44,200, 52, 50,175, 28,199,217, 18,129,163,120,113, 48, 85,167, 26, 24,104, 74, 35,156, 98,151, 67,177, 49,107,116,228, - 52,253, 26, 62,149, 95, 35, 76, 13,162,249, 41,238,181,192, 93,230,182, 53, 12, 21,121, 34,184,187, 53,125,237,250,194,169,185, -127, 62, 51,210, 54,176,118, 29,158, 45, 44,207,131,187,156,180, 13,225,249, 80, 79, 60,242,224,109,168,252, 87,112,215, 18,197, - 7,221, 71, 45, 52,174, 47, 49,211,205,140,248, 25,187,208, 8,234,101, 55,174,124,145, 7,229, 29,149,198,173, 70,135, 42, 80, -131, 10, 50, 32, 33,198, 9, 61,102, 49,106,172,198,153,184, 76,175, 70,241,175, 40,185,136,174,162, 56,141,165,158,244,179, 10, - 33, 41, 2, 76,228, 85, 67,244, 6, 7, 67,241,215,132, 80,204,196,165,113, 30, 23,118,108, 13, 68, 93,146,131, 57,202,148, 64, -160, 6, 10,212,251, 36, 35,180, 52, 70, 23,122,208, 64, 58,214, 41, 5,125,178,232,209,247,200,153,158,209,139, 7, 68, 66, 40, -121, 53,195,248, 35, 0, 99,215,214,219, 52, 12,133, 99,167,105,147,106,192, 66, 82, 9,177, 50,132, 86,218,215,190,240,196,195, - 36,160, 63,118, 18, 2, 33,241, 63, 90,110,130, 20,129,196,117, 72,164,157,216,148, 52,113, 18, 27,251,248,210, 52,141, 4,121, -138, 83,247,216,178,156,147,227,207,159,191,243,111,124, 38, 12,195, 32, 8,162, 40,146,110,122, 54,155, 45, 22,139,213,106,197, - 99,112,115,239,121, 30,143,199,121,189,152, 23,226, 88,122,127,254, 47, 19,251, 79,167,211,197,124,158,166,105,227, 62, 8,195, - 1, 84,147, 69,115, 13,239, 12,221,126,255, 35, 52,202, 77,221, 12,130, 4,236,243,110, 4,208,161, 72,255,196, 63, 66,166,209, -250, 53,154, 76,178,116,211, 7, 35, 6,147,241,195,193,233,147, 71,111,230,139,231,103, 79,249,195,147,201,248, 34, 94,251, 97, -240, 57, 90,242,226,209,112,200,235,127, 90, 46,181, 40, 36, 58, 25,141, 54,105,246,243,219, 15,245,134,194,151,241,112,224, 63, -124,124,250,238,213,235,151,103,207,248,144,222, 27,223, 95,199,177, 48,242, 97,169,153,201,162,234,165,197,120, 57,196,157, 35, -208,120,253, 13, 75, 42,163,188,152,213,246, 87, 27,241, 72, 9,130,101,112,238,148,174,105,222,203,233,216,243, 14, 75,252,182, -224,206,183,101,157, 37, 63, 78,183,236,238,196, 63, 72,236,242,197,251,243,235, 93,231,193,221,208,239,123, 46, 70,220,167, 11, -165,123, 87,228,108,252, 67, 40,118,240,166,160, 95, 47,171, 95, 87, 21, 37,196,102,228,248,134,227,220,246,162,117,118,126,101, - 31, 31,244, 92, 33,148, 65,186,130,252, 89,102, 20, 19,220,233,117,253, 18, 13, 10,230,230,130,111,195, 8, 15,208, 75,222,226, - 53,145, 42,146, 38,157, 50,161,214, 6, 4,178,148,160,147,196, 16,101,190, 90, 45, 41, 42,102, 47,128,137, 59,104, 1, 67, 72, - 81, 95,144,242,250, 72, 3,142,134,165, 78, 65,245, 95,139,177, 48, 0,145, 21, 64,218, 16,115, 87, 40, 31,162, 76,231, 26, 82, -180, 25, 77,166,173,234, 81,176,101,240,158,214, 84,156, 38,198,175,118,145, 95,164,213,238, 88,219,218,203, 48, 45,183, 30, 90, -103, 3,215, 2,176, 10,160,135, 7, 50,251, 24,174, 39,230,144,252,123,140,218, 52, 6,244,201,169,154,171, 68,104, 63, 4,102, - 59,225, 77, 83,137,143,109,209,112, 10,199, 83,105,195,185,107,201,135, 38,241, 13,233,157, 3,173,130, 2,222,172,230,226,247, -229,148,117, 62, 28, 69,123,183,218, 2,121,179,220,249,127,231,110,250,244,253,226,139,213,150,127,162,209, 64, 70,155,108, 72, -207,113,243, 34,219, 51,139,149, 16, 60, 45, 73, 69, 48,144,202,165,183,101,172,147,148,196,166, 66,138, 93,136, 8, 49,254, 22, - 20, 57,201,153,149,116,177,195, 71,178, 35, 84, 8,145,228,177,240, 37,109, 69, 49,104, 11, 99, 91,133, 55,176, 5, 85, 67,253, -168,138,199,177,173, 56, 32, 20,171,211,227,172,220, 38,238,226, 67, 93, 74,126,176, 74,248, 44, 84, 10,176,102,104, 75, 78, 45, - 45,180, 17,102, 84,250, 96, 14, 20, 48,245,254, 10, 64,217,213,188, 54, 17, 68,241,153,217,165,171,165, 74, 64,176,146, 38, 55, - 79,122, 44, 26,221, 30,237, 77, 8, 94,196,163, 6,170,160, 32, 82,106,160,193,218,146, 82, 74, 32,133, 94,123,139, 23,193,115, -242, 55,180, 8,253, 7,252, 86, 76, 42,165, 31,177,106,210,124,236,238,140,111,230,237,236, 71, 66, 43, 46, 75,152, 44,201,100, -146,204,254,230,205,251,189,247,123,255,198,247, 82,169, 4,143, 0,193,197, 98,209,182,109,104,231,243,249,106,181, 10,248, 30, -109,227, 83, 56,182, 54, 55, 43,149,202,173,233,233,108, 54,251,112,102, 6, 81,216,158,154, 90, 43,151, 7,218, 15,114, 57,104, - 99,231,171,197, 98, 96,176,223,207,229,110,234,235,235,229,242, 68, 58, 13,246, 62,188, 17,174, 0,142, 3,190,227,167,212,106, -181,151,139,139,120,189, 48, 63,143, 16,143,183,242,139,165, 37,192,125,245,250,195,213,229,229,142, 92, 60,228,141,147,177, 51, -208, 27,156,141,122,227,243,251,143, 79,158,207,118,142, 37, 9,186, 82, 88,184,115,239,238, 53,251, 6,180,119,234,141,141,181, -117,232,229,241,220,108, 50,157,130, 43,219, 91,111,223,188,122,173,238, 45,185, 67,155,204, 92, 79,166, 38,224,252,241,125,231, -203,135, 79,143,230,158, 98, 39,165,194, 2, 44, 6, 72,173, 81,149,164, 8,199, 46, 23, 48,172,203,134,121,133, 88, 95, 61, 7, -204,240, 99, 53,215,199,180,157,110, 40,172, 39, 26,250,163, 57,159, 9, 53,233, 15,184,123,208,105,167, 70,172,219,231, 18,123, - 61,167,238,194,196,244,218,156, 91,140, 37,132, 56, 35,232, 24, 53, 92, 70,191,137,254,118,115,255,144,139,139,132, 60,187,122, -105, 50,121, 97,247, 79,119,175,237,254,246,200,187,163, 94,171, 39, 25,255, 95, 93, 79, 18, 58,138,158, 97,210,233, 36, 73, 8, - 73, 32,255,100,130,143, 90,166, 1, 0, 11, 80,205,217,104,207, 47, 51,100,186,220,114,121,162,239,177,174,215, 82, 38, 40, 10, -116, 9,233,248,147, 9,176,230, 89,107,156,137,110,171,191, 15,203, 5,134,177,115,205,111,106, 57, 14,223, 31,203, 41,165, 3, -117, 26,133,239,247, 82,154,253,156,139, 1,227, 29,203,151,197,100,220,117,212,135, 22, 73,140,137,165, 16, 47,136, 62,231, 34, - 90, 98, 52,220, 7,132, 65, 49, 52, 24,222,112, 16, 30, 27, 74,100,141,226,190, 18,136, 54,232,105,186, 6,145,152, 46,191, 48, -123, 8,241, 42, 40, 94,175, 1, 26,229,117,130, 58,198,194,121, 94,132, 0,192,255, 43,208,171,137,128, 81, 44,174, 52,174, 84, -115,162,155, 71,248, 14, 92,129,105,178,190, 32, 61, 15,115,142,130,156,175,136, 67,128, 48,237,210,161, 4,139,106,209, 32, 53, -151,137,129, 84,190,168,188,187, 16, 33,179, 26, 19,132, 16, 67, 57, 80,255, 23, 75, 31,223, 79, 49, 44, 75, 32,103,164,233,120, -206,233, 62, 46,149,246,207,201,201,217,106,128,233,125,167,111,153, 35, 18,180,193,198,106, 55, 83,231, 83, 22, 35,205,206, 17, -252, 96,240,125, 29,185,119,228,170,194,152,140, 82,119,177,236, 56,214,195,147, 58, 97,204,144,187,127,106,232,122, 33,134, 63, -108, 67, 21, 35, 35, 74,131, 12,193,151,162,153,239,179, 41, 58, 49,149,106,234,130, 5, 82,101,138,194, 81,113, 53, 92,132,180, - 98, 72, 86, 27, 40,129,227, 7,193,203,233, 1, 3,131, 45,199, 95, 1, 24,187,130,214, 38,130, 40,188, 51,155,164,113,211, 67, -139,130,135, 86, 65, 37, 93, 15,133,182, 8,197,154, 31,225, 69,196,147,120,240, 32, 10, 69, 60,229, 22,138, 87, 15, 94, 54, 6, - 68,196, 99, 61, 54,133, 80,210,122,240,228,201,123, 99,123,105, 49,130,130, 65, 67, 72,119,179, 59,227,155,247,102,103, 55,107, -136,230, 52, 25, 54,179,155,101,246,155,111,222,190,239,123,255,198,247,106,181, 10,244,188, 86,171, 1,130, 3,148, 3,160, 63, - 68,212,134,175,166, 13,141,118,187,253,126,123,155,226, 48, 59,205,230,193,254, 62,144,116, 26, 1, 64, 28,192,151, 24,183,105, - 67, 99,117,109,237,249,214, 22,128, 56, 12,101, 86,111,234,111,120, 30, 92, 58, 0,253,205, 74,229,244,228, 4, 64,252,233,230, -230,146,235,194,224, 0,229,112, 60,172, 13,112, 10,232,175,123,158, 57, 17,125,224, 48, 0,247,103,234,248,235,143,158, 60, 30, -198, 59, 3,184,113,173,157,221,178,235, 30, 29,118,168, 1,157,111,188,198,241, 97,103,189,178,177,188,186,242,182,222,128, 27, -116,239,193,253, 27,183, 54, 22, 46, 45,194, 5,212, 95,188, 92,184,188,120,251,238,157,143, 7, 31,190,157,118,105,222,239, 53, - 91, 87,151,202,199,157, 47,237,102,235,154, 91,134,158,119,175, 94,195, 32,137,109,134,149,240,120, 74, 72, 63,138,194,239,150, - 63, 99,217, 87,148, 19,140,248,161, 12, 25,101,207,146,125, 68,240, 18, 66,124, 44, 56,214,251,124,202,139,247,209, 73, 24, 22, -131, 30,208, 5,169, 10,168,175, 56, 78, 30, 75, 5,194,236, 59,139,162,189,254,175,174,140,210,228,103,121,222,249, 58,144,159, - 62,119,251,161, 28,132,176,175,228,121,181, 97, 84,110,165, 22,234, 52, 80, 25,204,208,101, 14, 11, 49, 40,113,186,162, 37,195, - 72,232, 89,132,165,241,148,179, 82,174,100,179,185, 32, 12,152,229,115, 25, 82, 8, 1,167, 33, 42, 45,133,240,229,240,183,240, -103, 11,206,185,252,197,254, 8,214, 50, 95,251,121,161, 81, 88,194,237, 48, 67,132,105,209,142,102, 48,218,191,129, 17,184, 71, - 20,177, 17, 49,212, 16,196,139, 88,215,164, 97,222, 74,228,101,127, 91,254, 38, 84,148, 37,105,145, 38,140, 47,198,201,187,250, - 11,241,139,221,137,187,168,233, 65, 91,248,185,157,174,246, 51, 53,207, 32, 13,241,220,138, 49, 57, 38,242, 26,229, 73, 80,193, - 19,174,156, 20,189, 99, 25, 11,122, 44,118,197, 13,193,231,227,111,166, 88, 70, 2,150,209, 54,197,222,200,113, 42,145,196,116, -107, 19,147, 73, 10,163,101, 19,222,210, 34,113, 90,162,152,230,155,250, 10,162,177, 76, 6,153, 90, 78,141,173,144,137,223,200, -255,145,206,228,184, 61, 81,167, 90, 80, 47, 36, 71, 25,177, 43,159, 26,182,205, 89,148,161,174, 79, 55,138, 2, 49,158,119,151, - 74,137, 67,223, 46,166, 75,178,248, 2,184, 75,112,222,185, 48, 87, 40,158,217,133, 65, 52, 4,112, 7, 46,175,116,198,168,170, - 14, 20,188,227,112, 76, 96, 84, 4,158, 29,202,158,164,180, 25,242,245,149,198,174, 57,196,125, 60,154,145,228,108, 93, 76,149, -188, 20,181,140, 25, 17, 92, 57,139, 17,128, 96,160,137, 49,157, 7, 57, 89,198,143, 15, 5, 39,107,147, 18,119,102,103,230,139, -249,162,136, 70, 63,253,222, 31, 1, 40,187,150,149,134,129, 40, 58, 51, 77,170,169,138,104, 5, 5, 65, 80,191,195,133, 15, 92, -136,186,237,119,184,240, 43,172, 63, 37,232,214,173, 47, 4,173,143, 77,139, 20,165, 53,109,103,198,251,152,153, 60,106, 17,179, -144, 80,201, 52, 49,241,230,220,123,207, 61,231,239,248,222, 30, 43,125,252,186,245,251,136, 97,175, 41,212, 98,253,164,221, 14, - 37, 23, 64,253,151, 87, 87,165,125,174,222, 60,183, 90,112,234, 28,250,249,182, 47,212,235,240,115,123,111,143,241,123, 88, 4, -118, 56, 82,195,249,192,177,176, 3,199,158,159,157, 29, 30, 31, 55, 26,141,102,179,201,248, 29,110,243, 75, 11,183,147,211,211, - 90, 82,187,163,149,243, 4,121, 81, 84,179,185,191,197,162,202, 66, 29,187,161, 91,187, 59,132,223, 91,240, 69,240, 73, 82, 75, -246,143, 14,224, 56, 64,250,142,167,204, 82, 33, 57,149, 99, 94,234,238,246, 38,215,255,119,100, 53,231,200,150, 37, 77,182, 43, -116,199,246, 86, 85,180, 30, 37,144,194, 61,153, 65, 34, 12,243, 26,217, 84, 47, 76,183, 6, 75,107,225, 75,246, 49,242,167, 16, -199,118, 70,131,233,138, 74, 42,106,104,177,234,253, 81,126,244,197, 71,170, 46,222,191, 80,170, 44, 66,145, 3,204, 25,113,232, -153,149, 87,221, 63,130,167, 42, 73, 30,129,204,177, 77,101,232,245, 25, 53, 87, 21,179,233,168, 7,185, 42, 90, 24,106,228,135, -197,104, 27, 7,201, 41, 36,176,130,236, 40,101,106,135,223,163,254, 76,117,102, 62, 90,238, 12, 95, 53,252,146,241,154,116,220, - 21,103,116,155, 53, 1,117,161,146, 96,217, 57,207, 7,119,130,232,108,154, 58, 98,115, 12, 55,183, 33,199,116,201,139, 98,238, -210,132, 86, 42,147, 31, 3, 45, 82,138,188, 97,133,241, 28, 53, 41,202,122,109,118, 18, 6,255, 99,106,181, 56,253,248, 59, 97, -140, 66,124, 32, 77, 42, 39, 39,134, 88, 56, 67,249,204,175, 12,227,167,190, 7, 87, 2,230,116,203,132,151,170,198,241, 95, 57, -153,245, 46, 73, 14,193,113, 49, 2, 75,210,189, 68,172, 48,121,169, 0, 19, 52,217, 3, 18,207,255, 73,164,199,236, 42,216,204, -123, 50,232, 56,123,173,148, 87,121, 25, 28, 43, 38,190, 47,255,177, 17,151, 92, 68,197,229, 16,194, 91, 59, 14,222, 21,189, 36, - 66,112,103, 55, 77, 74,148,229,218,210,230, 99,251,161,232,230,138,215, 85,193, 26, 75,140,110,168, 50,234, 14, 58, 75, 83, 43, -175,159,111,179,139, 27,176, 86,172,212,192,216, 41, 18,122,198,210,141,214, 76, 6,131,203, 76,169, 66, 78, 58, 72,154, 28,151, - 88, 98,195,242, 36,132,201, 58, 34,252,236,113,200, 38, 83, 27,234,215,106,223,140,176,153,177, 48,145, 45,233,137,101,198,237, -144, 66,188,242,150, 0,225,189,171,125,111,166, 42, 43,181,120, 14, 50,251, 94,218,237,235,111, 56,155, 31, 1, 56,187,154,222, -180,129, 40,184,187,150,249,176, 34,149, 6, 78, 81,114,107,213,220, 74,174,249, 17,252, 59,254, 8,201,141, 68, 72,173,108,170, - 40, 82,171,222,122,107,131,143, 1, 53, 68,114,176,189,222,205,190,247,188,187,118,155, 80,169, 28,144, 65,200, 94,153,101,118, -152,125,111,230,127,234, 35, 13, 73,119,176,235,142, 13,101, 54,180,122, 60, 30, 19, 46,195,203,211,211,171,249,252, 4, 31,211, -233,148, 62,227,142, 13, 10, 79, 38, 19,162,243,195,209,104, 25,199,116, 66,146,236,151, 73, 66,239, 39,113, 76,202,207,139, 60, -171, 31, 69,151,179, 25,232, 60,231,231,134,197,155, 43, 46,230,115, 55,182,116,117,119, 57,187, 48, 7, 31,207,206,204,243,247, -175,223,212, 95, 63, 2,196, 8,145,174, 82,115,124,147,124,217,220,175, 15, 71,195,219,100,121,116,114,108, 78,254,249,122, 1, - 75, 87,182, 75,239, 82,195,232,223,125,120,255,233,106,193,106,158,136, 81,174, 52,111,218, 77,142, 77,251,170,192, 78,190,140, -133,111, 57, 59,128,106, 19,208,148,143, 15,251,131,188,183,201,118,247,102,153,101,160,125,240, 6, 9, 10,108,204,105, 15,251, -167,204,151,244,128,198,196, 61,180,211,141, 2,209,237, 4,131, 40, 28,246,187,241,143,223, 63, 27, 55,228, 72,112,137,233,139, -102,146,150,134, 56, 40,206,253,108,113,197, 99,148,133, 66, 88,239,253, 86,112, 47, 72, 35, 67, 87, 92, 28,132, 42,218, 22,219, -167,226, 73, 50, 5,149,164,200,243, 11,220,189,201,149, 12,161,134,204,224,123, 32,192,199,134,149,170,144,225,155,110, 48,120, - 52,127, 84,184,219, 36,212, 30,198,241,244,194, 75,174,216, 65,138,248, 82, 49,202, 92, 66,237,157,217,221, 87,238,195,132,116, -219,217,255, 21,100,119,128,229,217,104,195,167,214,169, 3,173,110, 24,181,175, 25,104, 15, 31,212,194,175,191, 77,112,231,251, -106,130,161, 94,189, 78,119, 82, 45,195,164,218,139,140,214, 69,225, 70, 89,225,218,235,134,222,136, 20,242,254,154, 80, 52,205, -172,156, 34,216, 11,221, 67,218, 70, 57,249,242,254,122,213,109,102, 91,107,151, 95,216,106, 14,248,163, 50,134,210,143,149,135, -113,167, 53,181,170, 40, 93, 48,137,118, 65, 41,218,119, 48,192,158, 71,237,122,247, 15,113,102,143,201, 12,183, 14, 45,250,117, - 85,205,190,217,246, 13,129,108,206, 78, 46,115,115,233,213,230, 87,179,113,202,150,187,240, 82,131, 47, 0,180,253,193, 0, 43, -201,202,199,221,118,157, 13,163, 78,119,199, 50,236,101, 18,138,204,141,144, 26, 97,160, 51,248, 0,225,188,149,170,190,193,149, -172,209,153, 89, 88, 23, 4,238, 2,204, 6, 52,234, 51,176, 43, 27, 88,131, 22,221,142,214,171,124,160, 47,197, 10, 41,178, 33, -195,104, 79, 65,176,128,220,159,210, 86, 21,122, 23,200,135, 98,187,206, 75, 9,102, 9,160, 34, 62, 11,192,217,213,244, 52, 17, -132,225,153,217,210,118, 11, 20, 9,114, 37, 49,234,226, 79, 80,127,131,123,240, 32, 38, 92,140, 39, 19,251, 47, 56,248, 55,122, - 54,241, 66,244, 96, 66, 98,194,161, 53, 36, 36,141,120,106,226, 31, 0, 33, 17, 3,104,233,188, 59, 62, 51,243,206,126,148, 5, -163,123,218,180,187,221,118, 59,251,204, 51,239,199,243,252, 27,190,143,221,214,235,245,192,211, 1,211,249,190, 15,215, 0,235, - 1,202,253,126, 31, 8, 11,224, 78,211, 20,248, 14,228,197, 97,158, 92,151,247,113, 22,222, 5,245,238,116, 58,216, 7,142,227, -245,196,133,128,146, 36,217, 8,175, 15, 6,131,235,158, 60, 95,192,131, 57, 0, 83,194,112, 56,196,213,159,164,233,167,157,157, -188,248, 7, 27, 62,240,205,214,214,195,199,143,112,151,128,239,117,146,102,246, 81, 57, 24,141,238, 37,201,211,231,207,192,217, -191,142,190,236, 13, 62,127,124,255, 97,115,229,197,203,215,175,112,196,246,219,119,223,198,227,187,235, 9,232,252, 46,240, 61, - 56, 68,132,130,136, 66,222,118,246,217, 14, 12,205,103, 4, 79,172, 36,153,157, 12, 72,232,189,227,243,166, 18, 93, 41,215, 90, -237, 46,233, 67, 61, 61,181, 20,158,243,145, 77,103,178, 49,177,225,157, 40,182, 84,218,142, 10,112,135, 91, 45,219, 93,186, 16, - 71, 15, 86,227,184,211,222,255,126,129,193,186,150,209,177,235,112,235,138,168, 29,181,126,101,182,198,220, 38, 98,148,173,111, - 55,158,192, 11, 25,194,169, 94,148, 48,111,251,242, 43, 13,229,158, 81,114,146,191, 56, 65,181,192,220,233, 55,136,185,182, 26, - 73, 54, 29,239, 86,157,196,180, 87, 58, 39, 15, 45, 73,105,143, 64,148, 69,103,230,116,117,254,182,148,115,218, 90, 63,153,208, -141,204, 86,101,202, 57,210,208,236,162,146, 43, 74,130,130,128,119, 37,227,144,123,222,143, 90,114, 76, 13,100,179, 22,217,139, - 86,213, 16,252, 53, 37,193,194,255, 42,238,173,173, 80,140,106,192,221,220, 40, 26, 28, 66, 1,198,247,154, 74, 89, 72, 75,230, - 1, 25,195, 62, 62, 92,124,232,231,221,194, 85, 28,212, 94,138,170,234,128,170,180, 98,229,233,132,186, 17, 46,170, 38,168,179, -222,214,162,144,237,189,174, 57, 32,216, 29,115,220, 34,172, 83, 75,223, 60, 76, 76, 69,236,222, 92,209, 1,246,142, 89, 13,155, -129, 20, 84,223,117, 91,246, 62,253,203,255, 70, 85,229,123, 83, 63, 73, 76,203,119,129, 76,182,220, 94,156,156, 77,220,160,157, - 94,241,127, 47, 98,172,190,154, 69,169,198,143,203,147,249,230,210,209,249,225,253,248,142, 6,149, 33,174,204, 10,149, 76, 36, - 57,137,234,162, 95, 54,177, 73,222,153, 75,133,134, 88,119, 21,147,177,144,128, 93,189, 53, 56, 69,207, 97,119, 29,202, 40,137, -221, 60,120,253,159, 23, 92,101,174, 19,170,218, 41,198, 63,223,148,212, 55, 73, 92, 94,100, 63, 9,116,139, 89,136,249, 35, 0, -111,215,146,211, 48, 12, 68, 61,142,147,168,133,162, 34, 85, 32, 33, 88,178,226, 42,168,231, 64,176,165, 7, 40, 11,142,195,162, - 92,134, 3, 32,177, 64, 98, 17, 90,218,226,196,193, 51,254,196,137,131,248, 73,100,209,118, 81, 53, 74,226,153,190,121,158,247, - 6, 6,232, 58, 5,171,158, 65, 23, 63,216,206,190,158,205,116,226,190, 95, 44,216,191, 31, 16,245, 29,235,227,124, 58, 53,144, -252,226,234,242,118,126, 99, 62, 67, 67,198, 37,117,143, 99,101, 19,165,158,188,224, 1,240,241, 32, 55, 22, 60,130,221,179,234, -129, 18, 30, 57, 7,175, 96,197, 82,244,176,245,219, 97, 34, 78, 5, 20, 82, 62,149,106, 73, 79, 43, 39, 82,190, 32,127,184, 49, -138,210,184, 94,104,147, 44,153, 12,179,131, 81,122,118,180,243,184, 81,119, 15, 47,207,111,239,216,137,165, 49, 52,109,252, 42, -211,126,129,162, 37, 20, 87,155,174,116, 48, 25,143, 3,107,247,122,219,113, 40,220,100, 20, 11, 46, 80,120,163,120,206, 71, 80, -229, 43,249,186,213,245,110, 85,146, 33, 70, 89,186,145,108, 6,230, 27,250, 53,177,215,130, 42, 10,145,164,227,193,126,201, 86, - 75, 89, 80,163,133, 10,110,158, 93,175, 29, 20, 76, 33,234, 96, 59, 17,246,206,227,215, 52, 15, 70, 67, 30, 20,184,226, 32,144, - 56, 5,152, 61, 38,127, 67, 77, 83,199,109,252, 75,102, 32, 78,151,220, 17, 59,237,239,192,111, 86,172, 99,194,120,151, 24, 10, - 68,115,141, 41, 36,244,217,114, 0,132,211, 66,107,246,153,219,113, 29, 16, 46,113,102,247,156, 76,213,162,100, 34,191, 78,123, - 99,109,128,152,115,187,243,243,186, 83,153, 5,122,227, 62,147,119, 67, 26, 65, 3,240, 25,251,166,238,244,239, 50, 76,255,227, - 57,215, 96,104, 27, 6, 6,183,141, 46,128,229, 41, 19,153, 72, 83,200, 50,156,170, 36,134,201,222,241,238,201, 86,174, 89,181, - 89,203, 13, 33, 30,137, 61,136,181,193, 61,140,252,169,144, 96,148, 58, 88,208, 19,216,102,103,225, 24, 33,159, 97, 20,201,154, -220, 6,128,170, 45, 78, 87, 46,107,183,250,195, 61, 14,171,220, 24, 47,110,232,211, 38,231, 96, 41,144, 18, 95, 69, 44, 16,186, -101,105, 76, 70,127, 33,252, 67, 0,230,174,158,167, 97, 24,136,230,236, 36, 69, 98, 0,137,149,138, 1,248,255, 11, 27,136, 63, -192,159, 96,128, 5, 49,181, 34, 73,107,251,142,248,227,236,115, 74,133, 4, 12, 84,221, 82,169,146,229, 60,159,223,189,247,174, -253, 67,120,253, 39,159,185,174,191, 92,175,103,136, 31,135,225,241,254,225,197, 19, 62, 85, 6,108,184,185, 44,174,180,194, 58, -158, 35, 19,200, 83,192,138,223, 64, 6, 2, 60, 72, 6,161, 35, 13,186, 18,109,150,123,167, 16,117, 18, 30,116,219,200,244,205, - 79,223, 28,190,219,230,118,213,223,180,184,217,187, 9, 93,248,177, 58, 13, 36,227, 89,171,186,206,135,224, 92,159,119, 87, 23, - 39,176,234,239,158, 63,158, 94, 55, 62,180, 84,251,139,158,197, 40,131, 77, 40,160,169,104, 24,148, 60,214,138, 24, 34,142,248, - 8,102, 57,151,107, 64,132,148,233,136,198,193,100,183, 59, 28,173,115,251,102,135, 60, 30, 11,153,161,143, 95, 29,198,128,177, -255, 30,230,221, 61,237,135,190,107, 41, 36,224,130, 44, 4, 33, 71, 55, 87,248,142, 41,161,183,112, 50, 68, 44,232, 78,141, 62, - 76, 10,109,168,184,227,108,160,175,167, 54,231,116, 3, 88,228, 21,224, 17,250,229,152, 8,154,190, 66,118, 85, 63,249,182,108, -175,235, 95, 89, 33, 42,137,189, 78, 64, 53, 28,120,131, 42,101, 7,148, 65, 63,170,248,182,184,180,135, 34,158, 92, 18,219, 98, -161,228,108,235,188,194,178,208,230, 63, 78, 43, 78,165, 51,163, 50,214, 80,195, 25,253,169,111,140, 11,171, 57, 10, 31, 25,213, - 30, 28, 78,189,255,201,236,195,223, 1,213,242, 0, 28,133,110, 50, 51,137,224, 99,221,131,241,179, 91, 89, 99,148,246,211, 38, - 21,234, 17,182,150, 76,167,251,193,237,252,125,218,197,105,226,233,208, 50,100,149, 87,214, 96, 44,224,230,227,193, 54, 81, 95, -208, 24, 78,228,144, 4,154,101, 97,110,240,184, 70, 7, 70,164,101,228,134,193, 16, 28,159,250, 88,200,102,201,176,103, 92, 56, - 36,162,184, 62, 77, 65, 96, 19,143, 9, 41, 11,100,155,249,118,162, 63, 5, 32,238, 10,114, 26,134,129,160,189,182,147,182,161, -229,134,184, 33, 33,241,255, 55,240, 21, 14, 28,128, 67, 41, 18, 37,137, 99, 19,175,189,142, 55, 81,164, 34,144,120, 64,163, 42, -142,215, 51,235,153,217,223,226,247,127,175,239,146,187, 30, 60,183, 84,148,141,209,181,193, 82,144,193,250,132, 65,124,158,232, -157,111,150,126,214,163, 45,224, 12, 71,241, 50,210, 2, 73,210,101, 69,107, 54,110,145,157,134,135, 90,223, 27,120, 57,219,183, - 97,104, 20, 92,107,185,223,194, 85,109,110, 14,149,172,204,115,235, 30,159, 78,227, 25,160, 21, 32,118, 8, 90,171,220,161,142, -218, 17,242,191, 75,133,190, 82,144, 57,221, 71, 50,251, 87, 42, 24, 72, 33,131,182, 6,125,186, 88,199,140, 61, 28,251, 99,231, - 91,100,157,189, 77,157,150, 68, 72, 16,179, 43,145,140,118, 42,242, 33, 44,247,186, 49,219,166,222,189,119,175, 49,248,183, 24, -103, 52, 71,161, 20, 44,227, 41, 3, 50,254,127,231,202,188, 1, 71,146, 25,218,154,147,241,222, 51,157,181,203,131, 56,168,178, -151, 64, 50,234, 38, 57, 21,160,225, 69, 23,172, 34,240,111,227,226,202, 46,214,242,211,151, 63,159, 49, 2,201, 19,231,129,179, - 70,234,200,131, 40, 74, 62,157, 64, 98, 25,247,232,217,124,234,137,217,176,171,212,162, 39, 83,188, 34, 39,120, 46, 72, 52, 94, -102, 31, 77,185, 71,242,218,150, 82,153, 12,155,134,197, 84, 85, 70,173,214, 15,221,191, 42, 47,251,250,240,209,158,146, 6, 1, -234, 14, 43,251, 76, 37, 37, 83,243, 45,124,209,216, 81, 81, 90,104,173,116, 5,166, 18, 27, 19, 98,154, 54,183,245, 93,107,207, -126,104,237,208,127,141,133, 62, 96,246,145,227,250,207, 17,181,227,181, 28,238, 5,239, 80,225,106,147,200,221, 65,210,176, 71, - 37,217,224,167,172,130,208,163,183,147,149,140,238,132,133,118,116, 47,157,199,166,211,228,166,196,110,233,153, 97, 10,128, 11, -128, 21,168, 21,233,144, 52,104, 43,186,241, 57,223, 2,176,118,126,173, 13,194, 80, 20,207, 73, 20,103,149, 61,142, 61, 21,246, -178,126,255,207,209, 47,178,127, 48,104,215, 66,181,185,153,201, 77, 52, 70,109, 75,183, 62, 72,161, 80,131,232,207,220,147,220, -115,254,196,247,187,175,190,185,237,111,111,180,157,198, 68,159,153,229,251,101,195,232,126, 73,122,106,108,144, 80, 94, 92,138, -203,241,191, 71,239, 3, 68, 76,149,138,125,193,131,178,129, 8,253, 18,188, 37, 80,174, 20, 54, 43,245, 90, 23, 47,117,150,229, -234,171, 53, 31,173,126, 59,209,246,253, 71, 58, 94,219,213, 78,110,172,117, 71, 95,214, 89,127, 19,228, 82, 60, 61,202,170,196, -169, 53,187,163,249, 62, 72,235, 37,175,124, 67,144, 32,208,112, 53,192, 41, 19,238, 65, 85, 94,194,179,170,125, 46,154,124, 79, - 7,151, 39,192,193,143,220,207,201,209, 7,112, 69,159,234, 3, 42,227, 47, 85, 86,119,136,223,209,103, 40,216,221,208,228,168, -208, 71, 18,141, 29,186, 49, 19,184,107, 19,156,193,121,236, 52,128,135,198,158,189,227,136,165, 65, 73,160,228, 44,137,212, 51, -215,244, 56,119, 63, 72,220, 67,246,116,250,125,237, 86, 95,192, 61, 82, 39,154, 9,235,251, 24,232, 9,229, 67, 23, 82, 84,194, -153, 52,126, 47,146, 80, 68, 10,247, 51, 22, 30, 56, 51,161,188,152,207, 61, 31, 73, 97,179,112, 23,215, 82,179,177, 16, 93,245, - 95,159,204,177,126,204,119, 56,139, 24,139,120,133, 14,238, 15,202, 78,103,138,194,166,156,137,231,106, 93,162, 60, 54,123,210, - 77,199,119,109,197, 25,235, 1,169,181,230, 70,224,179,155, 75,132, 64, 70,234,219,155, 29,229,133, 30,212, 24, 46, 46, 13, 71, -170,194, 23, 52,241,164, 4,209,226, 12,239,144,225,119,128,223, 45, 27,114, 52,251,233, 27,130,107, 5,133,241,219, 30,215, 95, - 1, 88,187,182,220, 4, 98, 24,152, 9,137,208, 86, 69,170,170,222,255, 98,189, 0, 55,128,118,147,184, 49,137, 67, 94, 68,173, -138,248, 0, 62,176, 22, 99, 38, 94,219, 51,102,124,231, 91,149,165,222,244, 19,241,253,255, 75,114,241, 23,124, 31,106,154,191, -177,143, 14,226,219, 39, 96,118, 8,141, 90,132,186,253,156, 16,210,146,245,156,191,247, 16,175,147,138, 36, 98, 72, 89,168, 35, - 83,162, 85, 18, 75, 40,218, 66,169, 59,159,192, 61, 80, 89,190, 30, 99,145,142,134,231,192,226, 95,250,197,224,109, 59,124,188, -218,104,233,243, 76,187, 43,122,129,232,252, 36,223, 52,207,108,221, 34,199,120,135,107,184,236, 34, 52,224,171,228, 61,111, 28, -110, 96, 29, 2,250,102,139,143, 3,118,186, 8,195, 41,144,234,189,112,159, 23,204,188,242, 9,184, 7,209,172, 37,106, 22,185, -169, 62, 49,173,243,197,135,192,218,106,206,212,138,164,171,218,187,158, 75,193, 96, 81,157,239,222,209,208,108, 24, 38,190,241, - 56,152,177,198,250, 38, 56,111,231, 53, 38,102,168,189,128,226,117,181, 4,247, 14,148,231, 87,136,170, 21,129,246,236,174,185, - 75,106, 9,238,106,192,110,122, 82, 18,201,113,172,173,103, 9,176,213,233,160,153, 71, 16, 42, 93,147,196, 65,165,244,130,201, - 71, 58, 70, 52,239,215,230,219,103,109, 55,123, 58,153,247,111,119,117,238,203,251, 61,164,129,119, 30, 84, 99, 61, 0, 86, 17, -200,221, 35,170,221, 46,123, 86,242, 58,189,112,119, 47, 21, 22,152,252,146,144,206,170,174, 20, 55,115, 65,166,150,232, 64, 79, -121,128,212,106,178,217,148,209,255, 8, 48, 0, 40,178, 7, 34,138,237,230,163, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, + 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 2, 0, 0, 0,135, 56, 89, 17, 0, 0, 0, 9,112, + 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,174,211,164,123,114, 68, + 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, 39, 0, 0,115,175, 0, 0,246,112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, + 0, 0, 48,131, 0, 0, 21, 42,251,118,133,113, 0, 3, 1,156, 73, 68, 65, 84,120,218, 98,252,255,255, 63,195, 40, 24, 5,163, + 96, 20,140,130, 97, 7, 0, 2,136,133,138,102,253,249,249,253,223,203,235,127, 63, 63, 99,150, 50,102, 19,148, 28, 13,220, 81, + 48, 10, 70,193, 40, 24, 64, 0, 16, 64,140,212,106,191,255,249,241,237,247,230,124,150,143, 55,128,236,255, 12,204,127, 52, 35, +217,204, 18, 89, 88,217, 70,131,120, 20,140,130, 81, 48, 10, 6, 4, 0, 4, 16, 19,181, 12,250,255,242, 26,164,112, 7, 85, 26, + 12,127, 89,174, 45,249,190,171,121, 52,124, 71,193, 40, 24, 5,163, 96,160, 0, 64, 0, 81,173,124,255, 39,168,248,155,153, 7, +216, 25, 0, 35, 16,193,246,116,255,151,205,165,127,190,127, 30, 13,229, 81, 48, 10, 70,193, 40,160, 63, 0, 8, 32, 70, 42,206, +175,254,120,126,243,239,193, 54,150, 79,119, 17,141,122, 6,134,191,156,162, 76,206,237,156, 82, 26,163, 97, 61, 10, 70,193, 40, + 24, 5,244, 4, 0, 1,196, 72,245,245, 51,159,143,205, 99,189, 50,159,225,255, 63, 68,211,158,145,229,183,106, 16,183, 69, 50, + 11, 39,207,104,136,143,130, 81, 48, 10, 70, 1,125, 0, 64, 0, 49,210, 98,125,228,143, 59,135,255,238,111, 96,250,247, 3,218, +134, 7,227, 63,156, 18, 44,110,237,156,146,234,163,129, 62, 10, 70,193, 40, 24, 5,116, 0, 0, 1,196, 72,163,245,239,223, 95, +221,251,191,187,138,225,243, 35,132,208,127,134,191, 76,236, 76, 86, 37,220,186,222,163,225, 62, 10, 70,193, 40, 24, 5,180, 6, + 0, 1, 68, 84,249,254,237,195,235, 63,119, 14,253,120,126,249,255,159, 95,196, 27,205,252,235, 51,215,251,179,176, 38, 60,130, +248, 99, 90,194,111, 18, 60, 26,244,163, 96, 20,140,130, 81, 0, 7,255,254,253,251,254,253,251, 71, 48, 0, 50, 88, 88, 88,254, +252,249,195,205,205, 45, 36, 36,244,245,235, 87, 70, 70,198, 31, 63,126,124,251,246, 13, 82, 98, 75, 72, 72, 8, 11, 11,179,179, +179,227, 55, 19, 32,128, 8,151,239, 31, 46,237, 96, 58,209,195,252,247, 27, 68, 61,156, 96, 64,110,153, 99, 99,162, 9, 33,217, +243,255,175, 94, 18,191, 77,218,104,140,142,130, 81, 48, 10, 70, 1, 16, 0,203,244,135, 15, 31,242,241,241,241,242,242,242,240, +240,176,177,177, 1, 11,244,143, 31, 63, 29, 63,126, 76, 89, 89, 89, 76, 76,140,131,131,131,133,133, 21, 40,200,196,196,248,239, +223,255, 47, 95,190, 60,124,248, 0, 88,244, 75, 73, 73, 1, 5,113, 25, 11, 16, 64, 4,202,247, 95, 63,127,124, 91,224,203,242, +247, 43, 3, 35,169, 14,254,143, 89,214,255, 71,106,201,255,145, 48,231,245,106, 97,225,228, 29,141, 90,234, 2,120,132,226,137, +245,145,224,134, 81, 48, 10,134, 74,179,253,237,219,183, 79,158, 60, 49, 48, 48, 0,230, 23, 96,217,253,251,207,223,175,223,126, +222,185,255,114,223,190,189, 26,106, 10,110, 46,118,236,108,172, 64,193,191,255,254,255,252,249,231,219,143, 95, 63,126,254,225, +229, 98, 23, 18,228,190,127,239,174,176,176, 16,176, 33,143,203,112,128, 0, 98, 33, 42,183, 34, 10,107,244,236,202,136,209,110, +255,143,213, 0,140,246, 60,243,243, 19,159,151,199, 50, 59,212,240, 41,153,140,198, 49,229,229, 41, 16,124,248,250,227,194,131, +215,144,178, 85, 79, 78, 88,128,155,131, 9, 88,215,195, 0, 29,138,111,136, 51, 46, 60,120,245,225,235, 79, 32,131,166,110, 24, + 5,163, 96, 24,128, 63,127,254, 60,120,240,128,149,149, 85, 87, 87, 23,152, 65,158,191,250,120,227,206,139, 7,143,223, 60,124, +244,252,209,131, 91, 92, 60, 2,191,152,127, 10, 8, 63,248,249,235,239,171,183,159,190,125,255,245,251,247,223, 63,192, 98,254, +255,127, 54, 86, 22, 89, 25, 17, 1,142,239,114,114,114,120,204, 7, 8, 32,194,227, 51,223, 30, 95,250,115,105,197,175,175, 31, +153, 88, 89,177, 20,240,159,158,177,124,125,140,117,180,230, 55,155,240,127, 1, 57, 14,126,201,127,191, 62,253,120,243,148,237, +219, 35,198,255,127,224,101, 61,220,214,127,186, 73,130,246,233,104,166, 94,186,241, 96,235,249,187, 14,186,138,198,106,178,108, +108,172, 67, 40,182,110, 61,120,190,243,226,125, 75, 85,105, 11, 61,101,186,213,255,139, 14, 93,155,186,235,226,165, 71,111,145, +197,229,132,121, 34,173,212,178, 93,245,132,120, 57,153,153,153,169, 82,194, 66,138,239,210,165, 71, 58, 35,173,244,229, 69,153, +192, 0, 34, 14,172, 93, 74,150, 28,222,124,238,222,199,111,191,144,221,144,238,172,147,235,174, 15,116, 0, 92,241, 40, 24, 5, +163, 0,152,101,222,189,123,247,250,245,107,110,110,110, 89, 89, 89, 96,153,125,226,236,189,157, 7, 46,189,127,243,250,243,231, +215, 92,220,252, 95, 62,127,144, 85,212,178, 50, 86, 97, 98,102,190,126,251, 57,166, 9,192,220,244,246,213, 51, 39, 71, 43, 27, + 19, 5, 22, 22,236, 57, 11, 32,128, 40, 90, 63,243,238,236, 70,166, 83,253, 76,255,126, 34, 23,237,255, 25,152,126, 75,219,115, + 24,132,115,202,232, 48,179, 32,250, 7,127,190,127,249,126,125,231,239,115, 11,152,127,188,130,171,133,216,253, 95, 59, 86,208, + 41, 23,217,228,221, 71, 47,120, 78,218, 1, 84, 35,192,198,116,170, 45, 86, 73,142,192,105,101,249,147, 86,223,253, 8,114,134, +151,158, 98,150,191,245,128, 68,216,179, 23,175,108,107,150, 62,253,250, 27, 88, 7,206,138,177,143,243, 50,167,138,177,223,190, +255,216,126,241, 1,144, 33,203,207, 97,166,169,112,238,230, 35, 35,117, 68,141,253,254,203,119,183,182,245,151, 30,189,193,165, +157,143,147,109, 83,145,151,145,146, 56, 11, 48, 9,128,155,210,148, 56,230,222,203, 15, 22,181, 43,128, 37,248,166, 34, 79,123, + 45, 89,160,153,192,130, 27, 40, 14, 44,244,221,219,215, 35,151,236,200, 64, 71, 70,104,115,177,183, 8, 63, 55,196, 13,163,121, +123, 20,140,240,146,253, 45, 24,176,177,177, 1, 73,126,126,254, 63,127,254,157,188,240,224,232,241,211,156,236,156,255, 25, 25, +248,248,132,128,170, 24,153, 89,228, 36,249,213,212,213, 46, 93,127,241,247,239, 95,244,130, 27, 12, 94,191,122, 42, 38, 38,157, + 20, 97,205,195,141,125,162, 21, 32,128,200, 60, 63,242,231,151, 15, 95,143,204, 96,190,179, 1,109, 64,230, 55,135, 4,139,117, +177,136,166, 45, 22,155, 56,121,120,141,130,255,104,186,127, 62, 56,137,241,246, 6,148,246,254,149,197,159,132,228,248, 12,252, + 81, 4,193,133,255,135, 95,127,127,252, 36,188,104,231,196,205,167,103, 94,129,102,128, 21, 5, 7,108, 64,255,223,191,255, 79, +128,133, 59,246, 33, 42,242, 1, 23, 39,135, 36,203, 95, 96, 92, 78,221,124,156,155,153,177,107,193,246, 21,237, 25,240,132, 18, + 58, 97, 43,114,225,174, 41,201,207,199,201,250,233,251,239,235,207, 63, 66,251, 87,223,127,249,245,109,219, 80,224,110,162, 34, + 5, 47,142,201, 3,192,186, 36,124,226, 86, 72, 33,254,235, 23,176,171,248, 27, 98,218,131,215, 31,145, 11,119, 62, 14, 86, 77, + 41,126, 32,227,228, 61,168,195,174, 60,121,231,211,179,229, 96, 77, 0, 40, 25,140, 22,241,195, 11,124,249,250,243,238,253,215, +112,174,178,162, 40,176,172,217,181,239,218,177, 83,119,173,204,148,221,156,180, 72, 50,141, 72,141,104,150, 74,136,241,137,139, +241,145,231,254,187, 15, 94, 47, 94,113,162,161,194, 23,191, 93,250, 58, 50,212, 10,177, 7, 15, 30, 0,179,143,146,146, 18, 48, + 47,112,115,113,223,186,125,107,253,150,163, 60,252, 18,146,114, 26,192,252,241,255, 31,168,248,224,229,227, 84,146,224,224,224, +226,218,176,105,167,172,130, 38, 19, 19, 51,184, 76,135,244,128,255,255,254,253,243,199,143,111,111, 95, 61, 23, 17,147,150,145, + 20,192, 85,184, 3, 1, 64, 0,145, 83,190,127,123,245,240,235,166, 34,182, 31, 79,209,196,127,113,201,243, 4, 77,229, 20, 16, +129,150,245,191,127,239, 61,121,109,203,165,251,130,220,156,206, 26,210,214, 70,234,172,172,172,192, 82, 94,208,163,234,237,215, +183,204,207, 14, 51, 32,141,204,255, 62, 54,225,151,134, 43, 27, 7,215, 80,175,155, 25, 24,168, 63,202,204,195,195, 13, 36,181, +100,132, 22,108, 59,166, 41,129,168,192,128, 5,235,225, 27,207, 32,108,115, 37,145,206, 96, 35, 57, 17, 94,200, 80, 12,176,180, +109,220,120,110,205,153,135,144, 34,190,115,243,185, 37, 89,194,224,201,119, 50,155,240,255,254,253, 75,153,181, 7, 62, 4,244, +231,207, 95,160, 8,100,192,189,100,201, 97,120,225,158,235,172,145,239,162, 9, 25,141, 1, 86, 51,115, 15,221,156,176,251, 26, + 80,252,234,211,247,109, 27,207,212, 4,154,193,135,227, 71, 75,198,225, 1,128,101, 95, 67,199, 38, 68, 90,229,102, 47,201,117, +255,242,237,231,197, 43,143,245, 72, 47, 19,137,212, 8,177, 84, 95, 71, 22,194, 37,163, 34, 65,216,248, 5,100, 35,166,248,186, + 45,231, 47, 93,121, 2, 44,247, 33,118,173, 95,146, 69,149,150,251,163, 71,160, 45, 65,106,106,106,192, 44,240,225,195,167,109, +219,182,187,123,122, 91,218,114, 94,185,245, 76,132,159, 75, 84,136, 71, 94, 86, 68, 86, 74, 72, 12,152,145,153,152,158, 60,121, +250,248,169,230,227,167,207,249,248,133,254,254,253, 3, 90,237,242,229,211,175, 95, 63,216, 56, 56,129, 36,232,156, 94, 22, 38, +125, 29,124,227,239, 0, 1, 68,114,249,254,233,206,201,159,123, 27, 89,126,189,133,159, 63, 0,201,169,255,152, 56,184,220, 26, +224,133,251,142,227,151,171,150, 29,188,250,250, 43,164,204,235,220,126, 65, 73,248, 64, 95,180,189,151,149, 46, 80,132,223,179, +238,203,202,184,255,159,159,195, 87,212, 48,254,254,242,253,226, 6, 54,243, 40,244,226, 18, 44,255,236,229,155, 77, 39,110, 60, +124,253,241,195,247, 63,192, 48,146, 17,226,246, 48, 86, 53,209, 84, 64, 81,248,255, 63, 90,211,249,205,187,143,107, 14, 94,220, +113,249,193,213, 7,175,222,126,251,197,201,194,172, 32,193,239,162,167,152,236,106, 44, 39, 41,130,203,131,251,207, 92,223,116, +234,214,201,187,207, 56,216,217, 12, 20, 36, 2,205, 84,109, 13,212,208,212,220,188,247,116,221,137,235, 79,222,125,251,241,239, +191, 32, 59,179,162,164,160,135,129, 18, 59, 11, 19, 3,194, 9, 8,135,188,251,240,105,241,222, 11,155,207,220,186,251,242,227, +151, 95,127,217,153,153,100,132,185,237,117,149, 18,157, 13, 52,228,196,177,186,225,240,133, 91,221, 27,142,223,124,242, 6, 24, +201,103,102, 22,114,115,178,255,255,255, 79, 78,148,159,143,157, 77,150,159, 3,174, 76, 78,152,247,112, 93,144,119,247, 22, 55, +109,169,238, 48, 19, 96,115, 0, 84,131,130, 27,200, 92, 92,255,166,196,219,157,184,183,238,201, 59, 80, 20,236,188,242,244,205, +199, 47,146,172,172,204, 96, 64, 70,186, 44, 89,114,104,203,185,251,136,226,254, 63,180,112,191,255,234, 35, 92, 60,200, 72,182, +192, 85,139,157,157, 29,216,241, 4,218,194,195,195, 80,233,111,242,236,227,143, 85,167,238, 1,101,231, 28,188, 81,234, 5, 29, +136, 31, 45,223,135, 31,104,168,240,155, 62,239,192,203, 87,159,128, 45, 98,204, 38, 57,164,105, 31,232, 99,120,236,228, 93, 96, + 33, 14, 26,235,187,255, 26,216, 52,118,115,212,178, 50, 87, 6,106, 89,191,249, 60,144,251,229,235, 15,252, 26,149, 21, 68,129, +138, 25,161, 54,250,162, 41, 6,214, 46,174,142, 90,192,230,252,209, 83,119,131,124, 12, 33,226,192,166, 61, 68, 4,200, 5, 22, +217, 64,110,102,146, 61,208,174, 93,251,175, 1,185,112, 19, 22,175, 60, 1,233, 19, 0,107, 23,160, 94,160,212,139, 87, 31,129, +165, 60, 15, 23,123,108,132, 37, 80,252,226,149, 39,187,247, 95, 3,106,132, 84, 39, 64,147,129,238,129,248, 2,232, 60, 98, 26, +248,207,159, 63,255,251,247,175,162,162, 34, 48,253,191,123,247,121,203,230,205, 22,150,182, 92,156, 60, 62, 46,122,198,186,114, +194, 66, 60,156,236,108,192, 60,138,200,224,114, 50, 1, 30, 44,187, 15,177,158, 61,127,233,223,191,191,156,156,188, 28,220,220, +188, 2,194,156, 92, 60,204,204, 44, 64, 67,190,125,122, 46,196,139,175, 12, 7, 8, 32,210,202,247,183, 71, 23, 49,156,155,197, +252,255,247,127,120,201,206, 8, 45,201,254,233,196,112,203,104, 66,148,205,219,124, 36,119,217,209, 63,255, 81,230, 82,239,189, +249, 18, 48,113,107,223,235, 15, 57,254,182, 44, 92,252, 76,214,229,127,182,231, 35,183,123,127,156, 91,204,143, 92,190,195,116, + 55,175, 60,184,229,234,211,111,127,144,202,205,255, 12,245, 27, 78,133,153, 40,205,206, 13,224,225,230,100,192, 54, 38,178,225, +224,185,180, 57,187,223,124,255, 3, 23,249,240,231,207,139, 7,111, 79, 60,120,219,189,229,108,178,163,118,103,130, 59, 23, 39, +199,149, 91,143,138,151,236,131, 40,200,182,215,156,184,227,252,193, 7,239,224, 21,215,161, 59, 47, 39,237,185, 20,107,174, 50, + 51, 55, 0, 50,205,251,237,251,143,210,153,155,231,159,184,251,231, 63, 74, 83,189,112,233,225, 72, 3, 89, 72,117,196,136,228, +156, 61,167,174,166,204,218,249,252, 11,210, 16,211,159,127,175,159,125, 60,255,236,252,148, 93,231,107,253, 76, 43, 34,157,129, + 98,215,110, 63,154,180,227, 60, 68,222, 68,134,175,120,245,201,239,127, 65, 70,136,177,130,134, 50,148,229, 65,211, 15, 42, 10, +210,152, 99,112, 6, 10, 98,155,138, 60, 37,249,216, 57, 57,217,129, 37, 59,164, 96,133, 53,177,255,120,235,203,207,220,127, 13, +194,189,244,232,141,168, 0, 47, 43, 43, 43, 25,133,251,194,131, 87,167,238,186,132, 85,118,211, 89,196,113,114,121,206,154, 64, + 7,112,112,112,192,157, 1, 76,205, 21,126,198,144,242, 29,216,156,223,114,254, 65,144,185,218,232, 16,205,240,108,200, 63,120, +253,245, 43,168,224,134, 20,193,240, 66,115,221,230,115,144,193, 19, 96, 51, 25, 88,250, 3, 75, 67,228,246, 50,144, 61, 67, 49, +166,161,125, 19, 80, 28, 88,142,127,249,250,147, 24,141,174, 14, 90,144, 2, 23,194, 5,202, 46, 94,121, 60, 54,220, 18, 88,224, + 2,219,218, 5,153, 46,139, 87, 28,135,148,239,192, 66, 31,210, 27, 0,137,248, 26, 1,171, 19, 96, 37, 4,113,225,221,251,175, +130,124,140,128, 12,136,177,144,202, 6,200, 0, 42, 0,150,233,112, 23, 2,221, 48,189, 99,147,181,153, 50,208,100, 96, 65, 15, +148, 2,218, 5, 49, 25, 88, 1,196,133, 91, 94,188,250, 4,168,101, 70, 95, 12,254,240,249,241,227,199,151, 47, 95,128, 45,119, + 96,201,241,225,227,247,189,123,246,106,104,104, 9,139,138, 3,115, 3, 7, 59,171,162,156, 40,214,172,247,239,239, 95, 29, 85, + 33, 6, 70,147, 55, 31,190,113,114,112,178,179, 51,179,179,177,240,114,177, 11, 10,112,241,242,112,178,177,168, 61,125,250,148, +143,143, 23, 87,163, 13, 32,128,136, 45,223,255,124,255,252,102,107, 51,235,179, 3,200, 99, 16,240,214,234, 95,102, 94, 94,195, + 16,136,202,107,119, 30, 23, 44, 63,250,251,223,127,140,129, 11, 16, 40, 91,126,196,217, 80, 77, 83, 78,156, 79,205,234,205, 9, +117,198,247, 55,225, 6,177,252,124,253,245,209,101,110, 57, 93, 84, 61,255, 87, 93,124,140,106, 6, 20,172, 58,115,239, 85,219, +242,189,173, 73,152,174,221,114,248, 66,228,212,237, 63, 65,110, 96,100,103, 98,140,183, 86, 51, 82,149,254,246,227,215,154, 99, + 55,142, 61,120, 3, 20,159,182,247,202,155, 79,223,151,151, 71,124,250,246,115,207,181,167, 16,255,156,186,253,252,211,159,127, +140, 12,140, 98,236,192, 70, 38,227,115,104,221,240,127,241,201,219,156,140,235,166, 21,133, 3, 57,153, 19,214, 46, 59, 15, 63, +116,225, 63,114, 51,116,249, 5,136, 56, 35,220,153,199, 47,221, 9,155,180,245,235,239,127,224, 81,105,230, 76, 7, 29, 69, 25, +145,175,223,126,110, 63,123,103,207,205,231,127,192,181,148, 0, 47, 87,134,143,229,235,119, 31,230, 31,185, 6,209,184,140,137, +241,199,223,127, 88,189,140, 89,190, 3,227,213, 88, 89, 18, 88,140, 66,216,144,214, 49, 92, 86,128,135, 3,121,122, 0, 14,136, +111, 62, 67, 22,204,164,207,217,135, 75,246, 8,108,128, 72, 90,144, 75, 78,132,151, 13, 12,128,181, 8,196, 25, 64, 82, 69, 82, + 72, 86,152,231,241,219, 47,160, 0,185,253,194,207, 88, 9,232, 90,200, 32,210,104,153, 56,156, 0,176, 0,133, 23,244, 72,205, +234,171, 64,210,218, 92, 5, 52,226,177,249,220,209,147,119, 32,131, 42,153, 73, 14,192,102,123, 73,237,106, 96,209, 12,108, 89, + 3,203, 86,160,154,146, 92, 55, 96,123, 25, 98, 14, 46,141,192, 18, 22, 88, 58,127,248,248,109,247,129,107,235,183,156,135, 91, +228,230,164, 13, 25,162, 57,118,242,206,213,235,207,176,186, 48, 54,220, 2,100,242,126, 80,187, 27,168, 12, 88, 31, 0,221,192, +205,205, 14, 52, 31, 50,200,115,233,234, 19, 72, 19, 30,168, 0, 84, 43, 92, 97, 0, 86, 18,144, 90, 4,232, 72, 96,245, 3,169, + 51, 94,190,254, 4,233, 88, 0, 45,133,152, 0,113, 45,126,112,251,246,109, 89, 89, 89, 72, 69,178,103,239, 30,126,126,126, 57, + 5,101,118, 86,102, 46, 46,156, 77,174, 47,159, 63,127,253,250, 85, 94, 94, 86, 67,147,247,193,227,183,192, 86,211,207, 95,127, +190,127,251,253,233,235,143, 79,159,127,188,125,247, 21,216, 8, 20,230,251,251,236,217, 51, 25, 25, 25,172, 25, 10, 32,128,136, + 42,223,191, 62,190,250,121, 71, 45,203,183, 39,240,102, 59,122,225, 45,166,195,193, 39, 8, 97, 47,216,119, 1, 81, 60,161, 15, +180, 48, 0, 91,254, 51,183,159,158,144,238, 3, 50, 71,222,238,255,187, 27, 40, 85,220,211,139,176,242,253, 63,242,102,168, 24, + 51,165, 66, 31,115, 5, 41,225,223,127,254,158,190,253,172,124,201,129,171, 47, 63,128,198, 82,110, 62, 91,115,232, 66,136,157, + 1, 82, 89,248,255,231,207, 95,213, 75, 15,252,132, 86, 48,255,235,253,140, 43, 98, 60, 32,230,231,248, 89, 59, 87,205, 59,124, +239, 21,208, 11,171, 78,223, 73, 63,123,131, 13, 82,239,129,213,126,250,253,207, 65, 73,164, 38,204,206,214, 64, 21,216,198,220, +118,236,138, 95,255, 38,136,236,146, 83,247,250,126,252, 60,113,245,254,178,243, 15,161,243, 72, 2, 92,221, 49,246,198,106,210, +188,220, 92, 79, 94,189,159,186,227,236,172,131,215, 81,154,238, 12, 12,213, 75,246,126,249, 13,154,248,102,101,100, 92, 91,224, +103,103, 8, 61, 91, 45,199,223, 38,162, 99,197,186,243,160, 97,141,170, 21,135,162, 29,244, 25,144, 22,149,255,248,251, 63, 88, + 95,182, 60,208, 90, 78, 82, 8,127, 33, 8, 31, 79,135, 47,127, 68, 83, 15, 41, 85,225,229, 47,164,112, 39, 41,211,222,127, 5, +154, 59,133,176, 53, 37,249,225,211,182,240,242,253,195, 55,104,131, 75, 70,128,139, 25, 6,224,117, 12,144, 1,228,202,193,202, +247,171,207, 62, 0, 11,119, 82,235,152, 81, 48, 36,192,250, 37, 89,187,246, 93, 3,182,100,129, 5, 52,100, 64, 3, 82,150, 65, +134,203,129, 36,124,184, 28,210, 40,230,225,102,151, 16,227, 7,150,239, 16, 17, 37, 69,148, 6, 44, 46,141,192,194, 93, 95, 71, + 6, 82,230,194,199,103, 26, 58, 54,115,195,230, 24,121,184, 57,136, 26,118,255,250, 19,121, 74,246,216,201,187,221,147,119, 2, + 27,248,129, 62,134,144,230, 57,150,105, 48,152,201,220,220,236,164, 6, 14, 36,217,115,113,113,253,248,249,231,204,153,179,191, +127,124, 55,178,119, 2,230, 90, 62, 62, 14, 60, 90, 94,189,126,253,235,247,111, 97, 97,225,119, 31,190, 61,120,242,246,227,167, +239,127,254,252, 67,148, 48,224,130,248, 31, 3,247,159,219,247, 69, 68, 68, 56, 57, 57, 49, 13, 1, 8, 32,194,229,251,155, 83, +235,254,158,232,103,254,247, 3,169,112, 71,202,153, 96, 38,139, 0, 98, 40,252,244,189, 23,200,187,157, 48,139,147,211,183,161, +237, 95, 86, 65,201, 95,168, 42,152, 62,191,196,104,241, 51,184,169, 75,204, 45, 10,101,129, 45,181,244, 18, 17,210,146, 23, 87, +207,159, 9,110, 22, 51,172, 58,122, 29, 84,190,255, 71,140,123, 95,189,251,228,242,107, 68,185,166, 34, 33,188,251, 20,162, 22, +209,148, 20, 4,150,239, 16,181,235, 78,221,138,176,212,132,219,228,168, 34,177,165, 33,134,131, 3, 26,226, 94, 86, 58,102,107, + 14,157,122,252, 30, 52, 44,243,247, 63, 48,184, 87, 31,191,254, 31,230,249,133,121,190,230, 58,208, 21,238,154,188, 60, 83,178, +101,223,126,249,177,230,236, 61,120,208,220,121,248,244,200, 3,232,108,164,180, 0,199,207, 63, 12,187, 79,223,132, 59, 67, 70, +136, 7,226,243, 47,191,254,110, 63,115, 75,156, 19, 62, 94,241, 63, 88, 79,110,113,121, 36, 11, 11, 81, 85, 47,254,185,202, 35, + 55,159, 35, 26,215,194, 60,164,238, 51, 66, 94, 48, 3, 44,220, 23,167, 88,155, 52,111,195,172,185, 49,235, 27,116, 23,194, 18, +204,147,247,223,128,193, 8,153,152, 29, 45, 16,135, 25, 0,150,185,144,150, 59,242,114, 14, 96,155, 23, 88, 70, 67,134,197,129, + 69, 57,176,129, 12, 31,129, 65,148,155,224,193, 16, 96, 19, 24, 88,118,195, 7,196,137,209,136, 92, 91, 0, 53, 2, 27,215,224, +181, 46,175,228,100,132,224, 53, 4,242,128, 62,154, 22,160,107,129, 85, 5,100, 76,233,197,235, 79, 64, 27,129, 13,124,100, 91, +144,245, 2, 29, 9, 52, 25, 40, 11,116, 18,100, 16, 31, 94, 51, 17, 3,126,252,248,241,230,205,155,237,219,119, 8,139, 72,190, +121,245, 74,223,192, 24,152, 79,248,120,241, 21,238, 79, 30, 63, 6,146, 26, 26, 26, 95,191,253, 58,124,242, 22,176,193,142,200, + 52,192, 28,197, 8,109, 52,255,254,245,235,238,203,247,198, 70,191,177,150,239, 0, 1,132,175, 16,249,253,243,199,139,173, 93, + 28,143, 54, 51,161,103,103,216, 40, 51, 60,123, 35,229,104, 14,118, 86,164,145, 27, 44,128, 29,118, 41,235,223, 63,127,208,178, + 57,211,223,175,152, 99, 0, 33,150, 26,104,133,157,130,148,168,145,172,208,201,135,160,129,242,235, 15,208, 87,254,159,190,255, + 2,153, 27, 54,125, 39,142,162,145,225,202,227, 87, 12,150,154, 8,149,150,234,240,194, 29, 2, 4,249,121, 24,192,229, 59, 52, + 5, 63,120, 1,174,143, 24, 85, 5,216,225,133, 59, 28, 68,217,106, 3,203,119,248,224,213,211,183, 8,191, 60,120,255,221,187, +123, 45,174,112,190,247,236,181,184,146, 56, 60,104, 35, 28,244,137, 44,220, 9,228,183,135,175, 31,189,133, 94,158,229,170, 41, + 9,105, 74, 19, 95,184, 35, 47,152,225,227,100,237, 10, 53, 17,230,197,183,186,233,201,135,111,184,164, 62,126,135, 78, 63, 60, +125,255, 13, 62, 70, 52, 90, 32, 14, 51, 0, 95, 69, 3, 25, 7,135,176, 51,147, 29,186, 39,237, 60,122,242, 14, 16, 65,138,126, +101, 69, 49,140,118, 49, 59,164, 52, 71, 94,135, 67,140, 70, 56, 0,150,236,245, 29,155, 50,138,150,124, 5, 13,226,139,133, 5, +154,236, 63,124,163,164,118, 53,104,236, 1, 71,173, 16,228, 99, 4,236,106, 0, 75,106, 96,169, 13,238, 34,200,172,223,124, 14, + 50, 94, 4,239, 40, 0, 59, 34,192,158, 1,100,248,222,205, 73,235,216,169,187,153, 69, 75, 32,141,247,204, 36,251,233,243, 14, + 18, 31, 56,175, 95,191, 22, 19, 19, 99,102,102, 83, 82, 82,253,249,243,199,215,175,159,248,248, 20,129, 29, 93, 92,195,158,111, +223,190,101,102, 97, 17,229,227, 7,230,217,107,183,158, 2, 11,119,112, 83, 9, 60,223,249, 15,178,156, 4,218,120,250,246,237, + 51, 80,246,225,211, 79,130, 2, 88, 86,136, 2, 4, 16,206,114,228,199,135,215,239,183,212,176,189, 62,251, 15, 92, 91, 32,236, +102, 98,255, 39,105,206,252,244, 16,114,193,254,255,251, 59,184, 2, 11, 21,169, 61,144,241,175,255, 88,134,144,129, 28, 7, 45, +104,111,235,239,183, 79,255, 81,135,111,254, 51, 48, 97,182, 12,181,101,177, 44, 50,225,231, 1,150, 53,160,162,231,215,159,191, + 48,197, 80,245,159,191,126, 39,106, 9,250,127, 96,220,127,135,116, 49, 32,190,208,149,151, 64,175, 2,152, 64,251,191,224,103, +170,253,248, 5, 29,145, 23,192, 86,241, 42,139,242, 51,192,215,240,252,255,127,239,237,199,255,255,255,163,173,150,100,196,114, + 42, 15,195,183,159,191,145,122, 58,255, 85,196,248, 41,207,108, 64,171,167,236,188, 8,231, 38,216,168, 64, 22,191, 19, 57,177, + 9,212,158, 58,107, 15,124, 97,204,210, 84, 91, 61, 57, 97,172,115,179,214,234,146, 71,110, 61,135,148,221,192,234, 68,131,139, + 11,173,236,254,240,245,199,229,199,111,145,171,141,209,194,125, 56, 1, 96,209,220, 80,225,135,204, 5,150,197,192, 82, 18, 88, + 62, 66,150,165,207,232,139, 1,182,148,191,124,249, 9, 41, 70,129,236,192, 47,134,202,224,209,152,216, 8, 11, 8,219,202, 92, + 25, 50,228, 2,212,242,226,213, 39,130, 26,209, 44,133, 40, 6,154,192,195,195, 14,180, 23, 40, 50, 29,168,247,254,107,160, 57, +192,154, 6,216,244, 6, 22,202,112,245, 64, 75,129, 34, 64, 45,202, 74,162, 64,195, 33, 85, 11, 80, 87, 79,115, 40,196,106,136, + 22,136,153, 64, 17,160, 2,136,153,160,181,146, 96,247, 64,150,202, 64,204,193,116, 12, 38,248,254,253,251,159, 63,127,128, 45, +241,159, 63,255,255,254,253, 91, 86, 70,230,253,187,215,192,182, 22, 46,245,159, 63,129, 0, 48,183, 10, 10, 10, 60, 3,173, 71, +122,133,104,174, 3, 75, 20, 38,164, 65,239,255,255,158, 63,125, 32, 35,171,242,230, 45,246,107, 80, 1, 2, 8,123,249,254,241, +246,201, 47, 59,235,153,127,189,249, 15, 29,144,129,102,200,191,108,130, 60,158,237,204, 76,140, 95,159, 30, 68, 46,131,127, 61, + 60,129,168,120, 61, 77,167,238,190,240,254,251,111,172,253,120, 1, 14,150,100, 55,232,129, 51,191, 31,159,102, 70,205,235,127, +153,185, 49,138,247,255,143,223,127,177,192,112,225,171,119,208,129, 96, 78, 54, 52, 47,252, 23,224, 67,220, 18, 37,207,195, 86, + 21,110,135, 43, 28,133,161, 29, 73,232, 82, 24,110, 14, 22, 28, 21, 1,116,149, 16, 23,176,107, 2,118,239,171, 79, 88, 58,125, +159, 80,123,130,178, 66,252,112, 95,152, 43,137, 39, 56,232,224,114,134,142,172,232,207, 47, 95,225, 5, 60, 55, 39, 27,229,185, +238,194,131, 87, 75,143, 66,135,131,130,140,228, 20, 68,249, 32,115,158,196,180,223, 33, 11,102,150, 28,129, 14,106,117,134, 24, +235,201,137,128,143,175, 99,193, 28, 29,242, 49, 84,232, 4, 79, 79, 1, 65,211,198, 11,139, 50,156,129,157, 74,228,115, 11, 38, + 35, 85, 51,163, 96,248, 1, 96,105,142,185, 52, 80, 28,117,195, 17,164,124,196,207,134, 27, 66,140, 70,172,150, 34,139,192, 21, +136, 99,200,194,205,129, 51,160, 42, 97,110, 22,199,240, 5,166, 94,100, 54, 86,199,160,140,115,190,127, 47, 36, 36,196,204,204, +242,231,239,143, 79, 95,126,126, 2,118, 98, 25, 89,190,126,253,202,195,195,131,150,239,128,213,192,215,175, 95, 62,188, 7, 77, + 46, 42, 40, 40,124,254,242,243,224,177,155,127,129, 77,162,127,240, 28, 7,106,191, 67, 51, 49, 35,195,199,247,239,132,132,196, + 57, 56, 57,180,213,165,176, 90, 13, 16, 64, 88, 74,180, 87,135, 23,253, 57, 61,141, 9,180, 8,146,145, 17,105, 44,230, 47,191, +170,128,127, 47,183,136,212,231,151, 15,209,199, 85,126,189,255,116,105, 27,159,158, 23,144, 45, 38, 34,184,182, 40, 48,160,123, +237, 39,112,107, 23, 89, 37, 15, 27,243,226, 12, 15,105,113,208,105,103, 31,159,220,100,124,126, 10,237, 88,178,255, 60, 98,152, +237,247, 89, 59, 79,135, 58, 24, 32, 91,183,255,204,181, 11,207, 63, 65,218,201, 38, 42, 82,240,186, 12, 58,140,174, 33, 3,103, +191,252,250,203,215, 84, 93, 66, 84, 8, 89,175,190,138,140, 16,172, 47,115,236,194,109, 44,189, 12,228,233, 3, 72,147, 28, 28, +162,182, 26,114,199,238,131,246,100, 62,252,240,125,243,145,139,190, 54,250,200,106, 39,111, 61, 9,107,236,131,128,129,130, 24, + 59, 19, 3,100,154,247,237,199, 47, 41,158, 40,149,212,241, 75,183,101,197,132,100, 36,160, 7,191, 29, 60,113, 9,201, 9,148, + 54,111,129,109,228,180,217,123, 32,108, 62, 14,214, 60, 23, 77,200,186,120, 98,198,103,128, 94, 56,112,237, 49,124,193, 76,181, +143,110,184,185, 18, 59, 24, 96,234, 5,138,232,203,139,234,200, 8, 93,121, 2,234,192,237,186,250, 44,119,209,145,246, 8, 75, + 49, 1,232,130,173,201, 59, 47,180,111, 60, 3, 87, 15,116,204,104,129, 56, 10, 70, 26,120,249,242,165,190,190,254,171, 55, 95, +158, 62,127, 15,204, 66,204,204,108,175, 63,126,253,248,241, 35, 48,143,252,255,247,239,215,239,223, 31, 63,126,248,252,249, 51, + 48,223,127,255,241, 3,152, 79, 37, 36, 36,126,124,252,248,237,219,247,139,160,147, 9,254,193,198, 18, 16, 99, 50,224,113, 0, +208,208,194,143, 31, 95, 36,164, 20,197,132,121,132,133,184,177, 90, 13, 16, 64,232,189,245,151,135, 22,252, 57, 57,145,225, 31, +100,133, 59,164,120, 3,141,150,254,149,115, 19,139,158, 3, 44,220,129,162,188,226,242,191, 56,164,254,195,198, 68, 32,232,235, +145, 73,127,190, 66,219,212,182, 6,170,167, 58, 18, 61,181,100,224,181, 7, 59, 19,163,151,182,212,177,166, 24, 79,107, 80,153, +248,231,247,175,175,251,251, 24,254,255,133, 89, 0, 41,158,255,115,202, 24, 98,182,157,247,222,122,145,216,179,242,210,205,135, +111,222,190,127,240,248,249,170,221,167,226, 39,109, 2,251, 21,228,198, 72, 91,109,244, 14,163,130,180, 55,172, 58,253,241,239, +127, 80,199,202,243,183, 64,139, 94, 62,127,254,178,124,215, 73,191,238,117,170,217, 83,235, 23,238,120,242,226, 45,162, 98,248, +255,159, 64,169, 10, 14,218,104,103,163,255, 48,197, 9,211,183,205,221,118,226,201,179,151,175,223,188,187,118,251, 81,214,164, +181, 43,193, 75,107, 96, 6,253, 23, 17, 22,136,180, 80,131, 24,124,231,205,151,212, 9,107,222,125, 0, 13,237,125,255,241,115, +237,190, 51,190,157,107,244,139,102,181, 47,219, 3,228,194, 45,248,255,159,129,242,161, 11,160, 11, 39,237, 56, 15,223,104, 26, +111,173,172, 40,198,207,198,198, 70,204,170,115,200,106,200,240,137,208, 73,212, 96, 99,185, 20, 59,117, 72,225,206, 10,222, 27, +133,169, 5, 40, 56, 53, 1,209, 67, 90,125,250,190, 81,205, 26,143,142,141,110,109,235,185, 19,166, 85, 44, 63,134,172, 88, 67, +146,111,116,243,234, 40,160, 22, 0,175,136,127,130, 44, 2,228,226,153,134,197, 4,164,170, 39, 15, 72, 74, 73,253,250,253,247, +197,139, 15,144,116, 15,204,134,108,236,188,215,174,223,184,116,233,226,181,235,215, 95,189,122, 5, 44,180, 5, 4, 4, 21, 20, + 21,245,244,244,116,116,116,128, 69,191,136,136,200,250,205,187,158, 60,127,135,220,108,135,150, 44,160, 85,241,160,124,247,224, +238, 53,126, 65, 81, 96, 13,161,173, 38,197,198,138,125,236, 1, 32,128, 80, 68,191,191,123,241,251,244, 12, 70,212,145, 98,208, + 57, 55,166, 89, 98, 86, 49,200,135,133,177,235, 71,254, 61,209,131, 58,200,244,250,213,186, 98,225,192, 62,118, 30, 80,211, 88, + 89, 86,124, 83, 99,194,155,119, 31, 30, 61,127, 11, 44, 24,164,197, 5,132, 4, 5, 16, 29,150,125, 83, 24, 95,157,249,143,122, + 49,200, 31, 14, 9, 14, 73, 21,228,178, 6,194, 96,101,100, 88,120,236, 38, 16, 97,186, 62,220, 72,222,217, 76, 7,101,244, 29, + 76,205,202, 13,180,175,154,127, 27,178,230,250,254,107,163,138,133,138,188,108,239,190,255,249, 4, 90, 93,196,240,245,247,191, +230,141,167, 36,249, 57, 51, 2,236, 49,122, 11, 56,134,103,192, 64, 75, 65,162,208, 85,191,127,247, 69,160,216,135, 31,127,210, +231,238, 70, 87,139, 90,112,245,166,120, 93,126,244,250, 12,120,244,121,254,145,235,203,142,221,144,228,102,125,251,253,207,103, +160, 51,192,214,117,109, 62,229,160,171, 96,169,171,194,192,192,192, 64,165, 81,233,251,175, 62,182,109, 56, 13, 97,107, 74,242, + 23,184,106, 65, 22,164, 19,211,120,255,240,245, 7,176,225, 15, 89, 48, 99,174, 36,218, 29,102, 10,212, 11,223,143,138,235,144, + 35, 35, 37,137, 73,177,214, 53,107, 78,125, 2, 15,202,125,250,254,235,216,237, 23, 88,205,215,146, 20, 24, 61,159, 96, 20, 80, + 11, 96,158, 28, 0,228, 54, 84,248, 17,127, 86, 12,169,234,201, 3, 76,140, 76,175,223,124,254, 7, 89,120,248,159,225,247,239, + 95, 15,239,223,150,150, 18, 51, 52, 52, 70, 62, 28, 23, 88, 0, 0,123,222,191,255,252, 21, 19,151,254,248,225, 29, 23,183,216, +211,151, 47, 4,133,196, 64,197, 57,120, 44,133,145,137, 9, 88,154,255,249,243,235,215,207, 31, 31, 63,189, 19, 16, 18,227,230, +226, 85, 83, 6,205,115,224,178, 26, 32,128, 80,202,247,191,239, 30, 50,252,251,245, 31,105,133,251, 95, 78, 9,110,231,106, 97, + 77,244, 19, 25, 5,205,130, 95, 94, 88,204,244,253, 37,114,177,198,248,234,252,235,249, 65,188, 78,149,252,218,206, 16,113, 17, + 33, 1, 32, 66,214,248,227,211,251, 55, 59,218,153, 31,237,193, 44, 68, 89,212, 60, 89, 88,177, 12, 61, 79, 12,183,108,217,118, +254, 25, 98,200, 27, 90, 14, 38,152, 41, 77,206, 11, 65, 8,254, 71,108,112,149, 20, 21, 60,209,157, 86, 50,119,235,242, 99, 55, +127,128, 71, 72,238,127,250, 9,113, 37, 27, 35,163,171,150, 84, 85,160,149,149,145, 22,102, 9,142,165,108, 71, 93, 10,212,150, +228, 9, 36,167,236,185,248,251, 63,202,106, 37,113, 46,214,106,111,131,188,213,167,145,117,243,241,114,239,106,138,175, 91,178, +123,222,129,171,223,254,252,253,249,247,255,131, 79,136,198,130,189,146, 72, 71,162,187,169,150, 50,102, 71,129,194,145, 25,248, +105, 48,157, 33, 70,144, 13, 71,196, 52,222,129,122,193,167,149,189,133, 84, 12,211, 99,205,129,101, 58,164, 98, 0,181, 24,254, +253, 67, 41,223,193, 34, 64, 0,153,179,141,179,211,178, 82, 17,239,220,114, 30,216,126, 71, 54, 51,200, 8,116, 56,198,186,115, +208, 21,177,102, 74, 34,163,231, 19,140, 2,208,102, 84,240, 73, 3,144,197, 42,144,165,138, 60, 92,236,152,130, 12,224,243, 97, +128,229, 47,176,149,253,242,245, 39,136, 44, 68, 25,114, 27, 28,162, 29,249, 8, 26,200,225, 1, 18,162,124,144,153, 91, 30, 30, +118, 72, 75,223,205, 81,139,135,155, 29,190,148, 19,222, 15,216, 5,222,230, 13,180, 8,104, 50, 80, 22, 50,233, 10,153,230,133, +203,194,151,222,195,101, 95,192, 14, 99, 0, 74, 65, 38,150,177,250,247,205,155, 55, 12,204,252,144, 82,132,137,153,249,225,195, +123,160,205, 63, 74, 26,255,254, 51,126,255,241,251,251,247,223, 64,167,126,251,254,243,231,239,191, 63,190,253,254,245,251, 15, + 80,150,149,233,139,140, 4,251,155,247,140, 31,222,191, 17, 18, 22, 7,230,182,159,192, 50,253,195,155,111, 95,190,112,112,113, +241,240,242,139,139,203, 0,115,167,144, 0,151,158, 6,190,202, 9, 32,128, 80,206, 7,254,249,249,253,235,153,110, 12,255,255, + 66,138,236, 63,130, 58,162,161, 19,184,248,133,176,234,124,125,112,214,239,211, 51,177,155,170, 21, 41,230,154,207,130,177,220, +226,243,227, 27, 31, 54,149, 48,127,199,178,187,236, 63, 35, 43,127,252, 6, 30, 17, 73, 88, 10,120,123,233, 22,180, 80, 48, 1, +175, 68,108, 89,178,107,231,185,187,215, 62,252, 16,101,103, 54,144, 17,204,243, 54,247,118, 64, 92, 12,114,236,204,149,175,224, + 69,120,146, 98, 66, 58,234, 10,112,241,143,159, 62,175,218,127, 97,243,201,107,111, 62,126,101,103,101, 81,147, 22,206,244, 50, + 55,208, 70,244, 18,222,127,248,116,230,202, 29,152, 69, 42,104,107,140, 46,221,184,255,242,205, 7, 8,219,193, 92, 7,190,128, +228,212,149,187,141, 75,119, 95,120,244,238,203,239,127,178, 60,108,182, 90,210, 13,241, 30,252,188, 60,135,207, 64, 15, 3, 80, + 83,144,146,151, 65, 44,251,121,250,252,213,188, 61,231,143, 94,190,243,225,243, 79,110, 78, 22, 85, 41,145,120, 39, 3, 75, 68, + 5,195,240,250,237,251, 11,215, 31, 64, 42, 18, 75, 67, 13, 30,110,114,206, 89, 3, 70,229,196,237,231,202,151, 29,133,112,115, +157, 53,138, 61,116, 57,193, 0,190,161, 20,143,222,148,153,187,225,115,170,144,115, 40,129,237, 14, 70, 80, 81,204, 4, 61,136, +226,255,255,163,183, 94,192, 21, 8,112,179,235,203,137,118, 69,219, 64,198,109,254,128,218, 21,160, 67, 37, 15,223,124,246, 15, + 60,104,104,161, 44, 10,108,209,219,118,108,131,180,235,165, 5,184, 14, 87,122,114,115,115,115,113,113, 1,187, 80,135,111, 60, +189,244, 16, 52,153, 33, 39,194,231,103,162, 36,192,197, 62, 90,240,141, 16, 0, 44,124, 23,175, 60,190,120,102,114,207,228, 93, + 64,110, 73,174, 91,108,250,220,216,112, 75,172,130,211,231, 29,232,105, 9, 5,150,170,235, 55,159,131,200,114,115,179,103, 38, +217, 67, 74,118,200, 41, 99,192,178,117,221,230,115,153, 73, 14, 64,197,192,246,248,250, 45,231,191,124,253, 1, 20,223,181,239, + 42,196, 4, 96,201, 27,232,107, 4, 52,193,202, 92,197, 10,124,210,128,155,147, 54,216, 37, 87, 75,115,221,129, 10,128,138, 33, +219, 80,103,244,197,100, 20, 45,129, 44,199,132,156, 51, 3, 89,103, 9, 84, 0,180, 2,168,184,123,242, 78,136,172,156,140,208, +230, 29, 23,225,230,224,233, 7,156, 60,121,138,131, 71,252,255, 63,102, 96, 38, 2,150,223,103, 78, 31,211, 55, 48, 17, 23, 23, +254,250,245,199,179,151,159,254, 35, 95,117, 7,107, 89,243,240,114, 11,243,253,126,250,236,229,249,203,143, 88, 88,216,127,253, + 2, 54, 83,255,243, 11, 8,241,242, 9, 49, 51, 49, 3,219, 85,192, 12,205,193,198,106,102,168, 32, 37, 33,128, 39,168, 1, 2, + 8,165,253,206,206, 43,200,233, 88,245,249,240, 52,166,191, 63, 25,229, 44,197, 61, 42, 57,120,113,106, 22, 48, 9,123,113, 97, + 25,211,175, 79,152,227, 18, 12,215,150, 61,191,187,155, 85,209,134, 77, 82,155,131, 87,240,231,215, 79,191,222, 61,253,253,236, + 34,195,171,139, 76,224,254, 1,150,242, 69,217, 3, 94,184,131,107,111, 97, 87, 49,148, 75,167,122,115, 66,122,113,123,195,202, + 4,251,234, 20,126, 62,222, 84,127, 91, 32,194,165, 17, 88,160,187,218, 24,225,146,213,211, 80,196, 42,110,166,163,188,181, 29, +203,245, 29,174, 54,134, 88,213, 75, 75,138,213,198,186, 51, 48,184,227,178, 72, 84, 88,208,213, 70,144,138, 35, 51,210,130, 92, + 73, 54,170,196, 55,222,129,101, 55,188,112, 7, 2,180,125,170,152, 0,174, 0, 88,166,179,179,179, 67, 90,250, 64, 91,128,164, +139,158, 34,124, 17,228,212,253,231, 63,193, 86, 82, 5, 25,129,206,139,135, 56,102,243,217,187,169,179, 16,163, 91,165, 75,216, +103,167,187,248, 25, 43,143,150,125, 35, 1, 0,203,193,233,243,126, 2, 91,226, 23,175, 60, 6,182,142, 33,187,138,112, 9,130, + 26,242,247, 94, 67,142,241, 58,118, 18,116,228,139,155, 35,202,148, 27,100, 23, 43, 72, 22,124,102, 0,228, 60, 25, 96, 89, 15, +217,130, 4, 17, 44,201,117,135, 20,190,151,192,103,132, 1, 11,101, 72, 13, 1, 44,151, 95,188, 6,149, 96,174,142,144, 3,109, + 30, 67,142, 33,131, 28,159, 0, 49, 13,216, 84, 7, 22,250,144,134,252, 49, 36, 89, 96, 77,131,108, 14, 30,255,138,138,138, 92, +188,114, 75, 72, 88,130,139,147,231,194,133, 83,162,226, 18,130,130,252,192,236,242,242,205,103,196, 18,106, 70,164,189, 68,255, + 25,190,124,254,250,255, 31, 43, 47, 23,187,187,179,249,133,235,207,129,237, 95, 38, 38, 22,200,250,119, 1,126, 14, 73, 49,126, +113, 81, 62,208,237,104,132, 22, 44, 0, 4, 16,250,168,188,176,113, 32, 16, 17, 19, 73,172,220,192,162,177,254,243,214, 98,228, +193,107,120, 57,207,244,227,245,223,235,235,191, 3, 17,246,161,105,148, 65,143,191,220,178,146, 30,165,163,233, 30, 94,212,146, + 49,124,129, 62, 50, 19,108, 36,204,199,133,124, 20, 12, 65, 75,201,115, 42,100, 63, 42,164,212,134,108,161,130,239, 96,186,240, +224, 85,207,118,232,169,100,124, 28,172, 73,182,106,240,227, 45,237, 53,165,107,131,204,237, 52, 65, 39,166, 77,222,113,113,211, +217,187, 37, 75, 14,143,150,239, 35, 4, 64,214, 29,238,218,127, 13,114,240,192,186, 45,231, 33, 34, 88, 5,129,220,151,175, 65, +133,126,108, 4,232, 36, 47,208, 81,236,185, 50, 88,205,132, 12,236, 64,134,110, 32, 5, 49, 3,120,113, 58,218,241,191,192, 98, + 26,237, 44, 4, 32,128, 28,101, 35, 33,198, 15, 89,210, 14, 63,129, 0,178,250, 30,186,110, 18,188, 75, 22, 46,139,213, 28,172, + 64, 86, 86,246,215, 95,142,107, 87,111,188,250,247,252,231,207, 31, 10,242, 74,162,194, 60, 87,111, 62, 7, 31, 54,128,122,224, +236,127,232, 58, 25, 38, 38,198,103,207, 94, 8,242,115,152,154, 42,254,250,195,114,247,193, 43, 46,110, 54, 89, 73, 33, 89, 41, + 65, 33, 1,110, 38, 38, 98,203, 7,128, 0,162,104,159, 36,191,150,227,143,183, 5,191,143, 79,192, 82,102,227, 40,202, 49,193, + 95, 14, 49,225,160,137,172,156, 60,163,233,254,204,189,151,247, 94,126, 8, 49, 87,101, 32,241,102,106,200,154, 25,248, 89,240, + 9, 86,202,214,106, 18,240,121, 81, 34,141,250, 56, 39,237,199,143, 31,192,246, 56,124,156, 29, 77, 35,176, 28, 87, 44, 91, 3, + 97, 47, 76,180, 4, 90, 1, 52, 31,121, 48, 29,114, 18, 14,196, 61,239,191,124,143,158,134,104,161,231, 56,171, 11,241,114,194, +167,121,229, 69,249,106,130,204, 63,124,251,121,233,225,235, 92, 15,125, 96,249,254,240,245, 39, 32, 2,138,143, 38,131,145,209, +132,151,133,140,168, 48,128,142,138, 60,110, 5, 62, 71, 12,171, 32,176,188,158, 62,239, 0,176,165,108,109, 6, 58,143, 12, 82, +232, 67, 6,220, 81,134, 82,193,103, 6, 64, 6,247,129, 36,252,192, 94, 96,147, 31,179, 38,128, 31,102,192, 0, 59, 29,161, 36, +215,141,135,155, 29,249,218, 16,200, 64,191, 4,244, 0,203, 39, 64,211,224, 86, 64, 0,228,160, 2,184, 57,248,154,194,172,172, + 98, 34,252,127, 53,181,128, 5,186,128,160,200,239, 95, 95,159,191, 98,251,246,253, 23,142,188, 12,218, 86,249,250,245,139,159, + 63,191, 11, 8,136, 92,187,245, 66, 79, 75, 90, 77, 73,140,155, 11,216, 17, 39,249,100,111,128, 0,162,116, 31,188,184,109,220, + 59, 46,190, 47,251,218, 24,255,255, 38, 67,251, 95, 81, 19, 17,207, 42, 30, 9,197, 97,214, 0,199, 47, 8, 44,224, 48,213, 0, + 69,238, 60,127,127,239,213, 71,200,254, 32,200, 34, 19,136, 50, 72, 1,138,118,171, 53,114,225,139, 54, 50,147, 15, 94, 51,131, +171,112, 71, 62, 33, 0,126, 34, 13,208, 70, 96,203,154, 3,216,223, 99,101, 5,150,227,184,186, 8,112, 54, 19, 51, 19,252, 40, + 96,160, 70,204,139,182, 83,103,239,125,244, 6,186,167, 78, 83,146, 47,217, 86, 13,222,153, 0, 42,190,248,240, 53,176,193,126, +232, 58,202,226,182,135,111, 70,203,247,145, 2, 32,173,108,200, 24, 8,228,192, 94, 92,130,144, 98, 90, 95, 91, 6, 82,178, 67, + 78, 41, 88,188,226,132, 30,120, 46, 20,200,206, 40, 90,194, 0, 62,135, 32, 51,201,126,215,190,171, 64, 53,192,150, 62,100, 92, +254,238,253, 87,200,103,147, 65,128,155,147, 86, 67,251, 38, 96, 85, 1, 41,151, 33,102,102, 22, 45, 1,146,144, 94, 2, 68,217, +209, 83,119, 33,247,123, 0,171,150,158,201, 59, 33,253,131,216, 8, 11,248, 80,140,171,163, 22, 80, 28,110, 14,126, 32, 36,200, +205,207,199,249,225,227,119, 65,126,174,123,247,110,191,123,250,151,153,153, 21,114, 85, 19,228, 48, 25,208,242, 71, 38,208,170, + 69, 96, 86,252,248,225,237,159, 95,191,100,101,149,255,255,255, 39, 45,201,207,206,198,194,206, 70,102, 65, 13, 16, 64,140, 84, +217, 44,254,229,201,181,247, 59,154,254,191,189, 73, 66, 33,200, 46,200,101, 91, 36,106,236, 51,252, 70, 87,210,103,239,113,210, +150, 13, 49, 87, 89,115,242,206,222,171,143,167, 37, 58,172, 61,117,103,246,190,171,130,220,236, 41,142, 90, 64, 41,175,206, 77, + 10,162,188,247, 95,127,154,154,232,176,238,212,221,189, 87,159, 40,137,241, 1,217,158,157, 27, 13,229, 69,155, 67, 65, 11, 87, +122,182,158,223,119,229,177,162, 24, 95, 75,152,165, 16, 15,135,103,199, 70, 32, 27, 88,250, 7,155,169,164, 58,233, 64, 6, 67, + 32,165, 42,176,216,117,107, 91, 7,111,188, 79,139, 54,243, 54, 84,224,226,226,130,236, 56,197, 44,121, 75,151, 28,158,178,235, + 34, 63, 23, 91, 91,152, 69,172,173, 38,252, 94, 86,200, 34, 25, 60,233,225,207,159, 63,252, 41,179, 32,236,165,169,182, 78,186, +242,156,156,156,104, 77,120, 6,140,169, 90, 62, 14,214, 37,169, 54,134,138,226, 16, 39, 1,189,246,241,251, 47,245,130, 5,192, +198, 59,176, 52,143,179,213, 4, 50, 38,239,184, 0, 84,185,187, 58,200, 78, 83,102,180,236, 27, 9, 0,249,210, 59,200,138, 20, +120,243, 25, 77, 16,153, 13,105,182,195,219,239,220, 64,145,251,175,121,120,216, 33,199, 12, 64, 22,198,192, 15, 72,120,241,234, + 19,228,184, 2,100, 65,248, 18, 29,200,193, 3,160,147, 9, 96, 38, 3, 13,129, 44,152,129,168, 7, 86, 24,240,133, 58, 16, 89, + 52, 43, 32,109,252, 23,224,238, 2,176, 58,233,105, 9, 69, 94,213,131, 7,188,125,255,117,253,166,125,252,252,194,188,252, 2, +136, 49,119,208,176, 59,104,180,243,253,219, 55, 63,127,254,144,146,150,103,102,102,210, 84,149,144,149,166,104, 90, 14, 32,128, + 24,169,117, 24,200,159,223,191,223,238,155,246,243,210, 82,134,127,132, 27,242,127, 37,172,197,124,235,184,133,196,134, 95,194, + 5,134,231,204,221, 23,187, 54,159,189,210, 25,169, 83,190,188,200,203, 64, 81,148, 47,102,218,238,137,177, 54, 15, 94,127,234, +223,113,233, 82,123,152, 92,254,226, 4, 59,141, 36, 59,141, 15,223, 64,151,163,110, 42, 2,237,251,117,210,150,201, 91,116,248, +254,171, 79,155,138,189, 38,236,184, 52,239,224,245, 73,113,182,235, 78,223,125,240,230,243,150, 18, 31,238,164,153,133, 30,250, + 10, 34, 60,249, 75,142, 30,174, 11, 50, 83,145,132,156,196,139,182,102, 70, 67,130,175,198, 71, 15, 62,173, 10, 90,253,130, 52, +241, 1, 44,211,183,156,127,128,188,161,116,125,129,187,147,142, 60,174,189, 75,152,229, 59,119,194, 52, 8,123, 89,186,157,179, + 46,168, 22, 1,234, 69, 43,220, 39,110, 59, 87,190,252, 40, 92,164, 35,216, 48,210, 82, 21, 88, 19, 64, 58, 7,192,202, 0, 88, +154,151, 44, 57, 4, 44,220, 79,181, 70, 66,150,205,176,199, 76, 26, 45,223, 71,193,208, 2,192,130, 30,216,201,144, 16,227, 7, +246, 18,172,204, 85, 32, 19,173, 68, 22, 17,192, 92,125,224,208, 73, 96,131,138, 9,116, 13, 19, 19,184, 16,254,247,251,247,175, +159, 63,126,138,136,136,137,136, 74, 2, 91, 90,154,106, 18,242, 50, 66, 20,174, 36, 6, 8, 32, 22,106,249,150,133,149, 85,220, + 61,255,135,101,220,143,123, 71,191,221, 62,240,227,233,101,230,159, 47, 81,124,197,196,241,151, 71,134, 83,222,140, 75,221,133, + 87, 94,143,153,133,101,184, 70,124,178,163,118,229,202, 99, 61, 91,206,189,255,250, 51,214, 74,101,226,206,203, 64,193,121, 7, + 65, 75, 39,129,109,213, 51,119, 65,193,226,103, 32,167, 39, 43, 4, 44,236, 10, 61,245,129,197,122,130,157,186,189,134,164,188, + 8, 15,100,124, 6,216,234, 7,138,216,169, 75, 0,139,212,192,137, 59,127,255, 6, 85,153,118,234,226,118,234,146,192,242,253, +237,167,111, 64,113,160, 94,200,245,120,240,145, 25, 32,184,241,226, 83,204,156, 35,184, 28,102,173, 42,129, 86,153, 31,186,254, +212, 86, 93,138, 90,107,210,129,238, 41, 94,124, 16,249,166, 39, 96,225, 30,110,174, 12,217, 1, 11, 95,198,243, 17,124,184, 32, +176,100,135, 20,238, 15, 95,127, 26, 45, 44, 70,193,144, 3,192,126, 6,100,170, 0,126,168, 25,177,109,106, 70, 70, 21, 69,209, +159,191,140, 31, 63,123,251, 23,233,170, 12, 38,208, 40, 41,168,197, 6,204, 37,106, 42, 18, 10,178,194,148, 59, 18, 32,128,168, + 92,200,114,240, 9,114, 24,248, 8, 24,128, 70, 93,190,125,250,240,251,243,123,134, 63, 63, 24,152, 89, 25, 88,216,216,249,132, + 57,184,184, 71, 66,196, 3,227,175,216,203,160,118,245,201,186, 0, 99, 96, 97, 13,108, 53, 11,112,177,245, 70, 88,240,114,176, +124,250,254, 91, 65, 20,116, 65, 54,228,196, 32,160,202, 36,123,205, 56,107, 85,195,154, 53,250,178, 66,208, 43,100,255,255, 87, + 16,225, 61,255,224, 13,176, 14, 63,255,240, 13,144, 13,153,240,252, 7,187, 18,235, 63,248,238, 83,160, 44, 48, 57, 32,175,153, + 33,220,109,250,247, 87, 22,245,156, 10, 41,126, 14,106, 29,232, 8, 52, 36,180,127,203,102,164, 59, 90, 33,133, 59,176,217,142, + 92,184,131, 42, 42,240,178,153,139, 15, 95,167,206,218, 45, 47,194,183,232,240,117,136,248,131,215,159,237, 52, 71,203,141, 81, + 48,148,138,120,178,245,170, 43,139, 51, 51, 49, 62,126,241,158,225, 31, 98,136, 6,216,206,226,226, 96,147,147, 22,194,179, 37, +149, 36, 0, 16, 64, 52,108, 68,115,241, 9, 48,240, 9,140,180, 40,135,204, 85,166, 56,234,204, 61,112, 45,209, 78, 3,216, 52, + 78,118,208,122,240,230,179, 73, 3,232, 22,164,250, 64,227, 2,119, 61, 32,131, 25,180,146,144,249,209,187,175,182,205,235, 63, +124,253,233,160, 41,165, 47, 39,114,241, 49,232,184, 9,160,246,166, 16,179,184, 25,123, 5, 51,230, 3, 11,247,249,105,142,144, +150, 53,100,245, 33,216, 10,104, 65,121,224,218, 99,248,176, 59,113,101, 48, 67,173,175,193,213,167, 31,174, 61, 3,109,218, 10, + 50,146, 11, 51, 83, 34,175,217,206, 12, 59, 33, 18, 25, 84,250,155, 0, 59, 4, 31,191,255,210,146,226,135,156, 58, 9,105,185, +163,205,244,218,105,202,228,122, 24, 76,222,113, 97,209, 33, 80,201,174, 47, 47,106,111,167, 9,100, 79,217,121, 33,110,180,128, + 31, 5, 35, 3, 0, 27, 60, 26,170, 18, 64, 68, 83, 91, 0, 2,136,113,244, 48,110,170, 3,200,170,240, 63,127,254,192, 79,202, + 5,138,252,254,253, 27,216, 82, 70,190,225, 8, 50, 42, 2, 57, 20, 20,210, 66,135, 47,155,129,207,118, 66,180, 96, 30,216, 2, +212, 11, 57,173, 23,168,247,231,207,159,191,126,253, 2, 50, 8, 23,202, 96, 0, 52,234,200,205,231, 60,236, 44,218,210, 2,104, +215, 97, 19,104,254,255,253, 11,244,197,247,239,223, 33,254,130,107,132, 47,239, 1,138,159,185,243,236,205,199,175,102,138,194, + 64, 65,248, 93,172, 88,151,241,128, 22, 68,190,249,196,207,197, 14, 44,223,193, 35, 69, 79,128,109,249,209,245, 51,163, 96, 20, + 80, 17, 0, 4,208,104,249, 78, 19, 0, 41,154, 33, 59,149,208,150,166,192, 11,107,172, 82,152,226,200, 37, 62,242, 74,115, 72, +243,249, 47, 12,224, 90,212,136,220,177,128,235,130,219, 8,217, 80, 74,228, 26,121,120,189, 5,169,117, 48, 47, 12,129,184, 4, + 88, 7,128,199, 16,153,224, 10, 70, 79,155, 25, 5,163, 96, 64, 0, 64, 0,141,150,239, 52,108,197,163,113,177, 46, 96,199, 37, +142, 44,133,245,224,117,100, 53, 68, 70, 34,178, 46,228,122,130,248,242, 23, 82,235, 32, 87, 24,104,139,103,224, 10,144,171,147, + 81, 48, 10, 70,193,128, 0,128, 0, 26, 45,223, 71,193, 40, 24, 5,163, 96,120, 2,128, 0, 26,109, 94,141,130, 81, 48, 10, 70, +193,240, 4, 0, 1, 52, 90,190,143,130, 81, 48, 10, 70,193,240, 4, 0, 1, 52, 90,190,143,130, 81, 48, 10, 70,193,240, 4, 0, + 1, 52, 90,190,143,130, 81, 48, 10, 70,193,240, 4, 0, 1, 88,187,186,220,168,129, 24,108,143,103, 9,213, 2,106,133,212,138, + 71,144,122,135, 62,115,128, 94,184, 18, 47, 28,163, 7, 0,196, 3, 85,219,221,109,230,207,248, 39, 19,178, 93, 81, 85,208,149, +118,146,108, 38, 30,219,177,163,149,242,217, 31, 30, 65,220, 65,145,241,197, 36,246,134, 39,214,167, 30, 35, 58,119,224,116,102, +160, 85, 46, 69, 91,213, 51, 58,200, 34, 76, 99, 8,145,172, 66, 55,200,168,184, 58, 36,227, 14, 10,104, 40, 15,230, 98, 28,124, + 92,149,188,180, 25, 63,236,196,123,226,205,121, 20, 6,194, 20,128, 85, 8,160, 8, 32,221,129,128, 17, 8,168, 49, 98, 36,149, +165,136, 61, 50, 78, 62,153,160,179, 64, 54,170, 15, 30,116, 85,110, 85,230,213,211,119,167,155,116,127,183,221,184,101,222, 44, +162, 91, 75,184,111, 53, 67,251,120,246,233,250,219,181, 40, 93,148, 80,177, 52,209, 89, 36,121,209, 41,116,176,139, 28,162, 19, +118,169,129,221, 6,101, 69,143, 49,124, 56,167,187,109,218,140,188, 73,109,151,107,170, 45, 23,181, 87, 76, 36,230,147,245,219, +203,207, 23, 95,174,190,238, 26,140,169,222, 62,236, 30, 98,205,204, 57,226,155,245, 16,197, 94,241, 56,139,102, 20,181, 18,138, +229,218, 82, 43, 23, 22, 51,197,112,241,140, 56, 66,157,107,236, 76, 0,180,205, 41,165, 54,254,252, 37,247,164,100, 3, 91,234, +151,101, 48, 92,102, 51, 58, 94,167,153, 89,190,142,255,179,207, 11,250,219, 71,239,235, 7, 26, 26,151,220,234,211, 97, 35,107, + 28,209,235,204,185,246,153,252,220,120,155,117,128,227,225,248,102,188, 57, 4, 3,253, 27,132, 64,107,208, 32,164,150, 95,209, +234,100,253,254,199,237,247,176, 88,180,175,130,216,205,239, 49,192,139,130, 68,168,207,208, 31,247,108,193, 71,251, 78,252, 32, + 33,252, 52, 71, 48,204,249,176, 47, 30,193,195,154, 15,156,134,243, 98,142,130, 10,150,176,136,222,132, 28, 15,111,208,242,255, +160,101,165, 95,104, 28, 95,115, 46, 3, 91,253, 29,226, 18,239,235, 27,159, 51, 37, 53, 25,122, 86,134,168,165, 28,180,210, 49, +174, 26,131, 28,228,146,139, 2,113,115,146,112, 44,121, 76,185,180, 84,107,209, 98,145,166,233,111, 41, 53,251, 91,212,226,133, +106,254, 99,141, 52,140,117,180,123,227, 73,215,244, 25,224,209, 60,185,171,245, 60, 70, 61,235, 79, 41,110, 54, 97,122,190,116, +218,207, 41,212,101,109,252, 75,156,255,207,135,247,163, 20, 95, 78,248,111, 1, 88, 59,183,165, 6, 97, 32, 12,103, 19, 40,142, + 85, 59,125, 1,223,255,201,156, 81,199,241,194,169,165, 57,173,255, 46, 9,165,165,104,103, 44, 23, 20, 8,228,176,252,251,237, + 94,208,132,254, 67,118,158,244,106, 52, 54,169,161,201,212, 87, 90,225, 46,164,208, 82, 71, 85, 1, 21,238, 70,177,174, 43, 68, + 0,180, 78,254, 15, 35,224, 5,136,149,248,196, 40, 12, 33,128,214, 49, 10,123,240,138,114,138,168, 15,106, 64, 41,101,149, 24, +240,103,132, 90,104, 4, 92, 19,150, 77,248,222, 74,219,109,171,218,213,235, 82,239,128, 56, 13, 6, 40,112,134,100, 10, 0, 42, +243,247,142, 8, 75, 89,158,197,175,220,159, 47, 89, 94,230,245,164, 34,147,200, 9,138,245, 33,160, 34,232, 49, 11, 34,129, 86, +116, 58,113,145,197,233,138,174, 52,217, 59,141, 81,206,108,159,233,245,179,223,121,246, 57, 31, 32,245,204,192,119, 14, 24, 39, +120, 33,211, 18,108,182,143, 47,239, 31,232, 49,117,246,190,115,155,117,183, 93,183, 79, 15,238,174, 67,136, 48, 62,144,239,109, + 47,164, 22, 27, 55, 78, 2, 85, 74, 1, 3, 96,244, 39, 75, 68,129,138,123,184, 80, 26, 62,129,167,125,244,253,219, 87,191,247, + 81, 98, 73, 98,229,187,126, 37,207, 53,164,161,105, 24, 55,209, 49,184, 93,224,251, 25,209,120, 70,225, 63, 41, 79, 87,115,153, +150, 33, 78,183,224,251,220,211, 70,132,184,227, 98, 59,180, 60, 16, 30, 13,194, 11, 70, 56,133, 59, 45,242,215, 56,186, 98, 16, + 73,252,107,122, 27, 78, 27,186, 64,246, 66,195,234,177,240,144, 97, 13, 98,171,103,120,173,206, 46,187,188, 53, 21,234, 18, 13, +108,113, 97,245, 31,146,116,199,142,185, 91,161, 1, 29, 9,160,233, 21, 6,211, 32,123,115,173, 96, 29, 76,215,109,133, 3,215, +172, 4,252,221,202, 31,246, 1, 46,148,162, 7,219, 65,247,228,133,248,184, 0, 93, 66,156,146, 45, 77, 71, 90,114,179, 26,101, +101, 39,115,121,112, 42,249, 20, 13,124,231,225, 56,107,114, 56,170, 23,222,218, 82,187, 59,124,147,248,132,218, 65, 23, 85,170, +126,122,142,248, 95, 82,153, 37,137,218, 89,152,156,107,146,111,148,148,156,109, 63, 2,208,118,118,187,109,195, 48, 20,150,104, +217, 10,150,166,104, 46,138,162,215,125,255, 39, 91,209, 98, 75,139,194,113, 36,245, 28, 82,114,188, 37, 46, 54, 12, 3,114, 97, + 4,209,143, 77,242,240,147, 17,137,255,138,237, 48,213, 38,196,247,233,253,138,184,183,147,141,169,177, 86,254,219,190,161, 41, +248,105,155, 53,121,152,120,160, 91,152,184, 67,216,131,116,161,135, 7, 12,116, 6, 2, 61,127,210, 65,211,233, 68, 46,107, 22, + 13, 32,249, 78, 83, 70,177,108,235,234,127,173, 69,150,186,178, 68,174,236, 92, 67,116,185, 8, 98, 41,146,203,195,221,227,243, +207,239,169, 18,152,113,186,173, 32,114, 18, 58, 62,188,213, 36,158, 91,120,172, 23, 46, 25,154,241, 50,159, 0, 38,230,170,115, + 35,117, 80, 91,157,222,179,241,175, 78,246, 76,251, 53,196, 43,191,179, 12, 23,197, 99,242,161,184,219,161, 76,222,189, 8,251, +193,232, 57,133, 97, 40,183, 60, 99, 23, 13, 79,247, 79,123, 60, 52,100,142, 62,186,221,183,208, 15, 93, 12,204, 93,232,127,139, + 73,238, 48,175, 30, 61,142,163,127,251, 40,167, 99,250, 24, 5,243, 2,165,116, 89, 7,241, 18,153, 53, 83, 62,129,153,221,136, +124, 20, 52,229, 9,159,177,230,178, 68,170, 57, 43,130, 21,150,241,229,186,227,249,185, 18,185, 95,240,200,126,179, 63,140, 7, +172, 29,190,246,162, 40,155, 41,143, 51, 28, 93,101,243,175,197,125, 54,233,174,191, 57,168, 55,194, 58, 39,205, 70,127,245,178, + 18,242,146,126,101,110,191, 62, 98, 91,152,174,189,247, 52, 6,228,245, 93,220,191,142,175,229, 15,196,221, 47, 70, 91, 19,247, + 53,190,163,225,106,171,172,225,208,249,235,216, 62,111,147,211, 21,118,211,251,102, 89,185,144,152, 26, 69, 85,167, 69,183,175, +217,198, 59,213,121,177,202, 46,174,210,156,208,143,237,142,164, 38,185,138,240,206, 86,231,122,208, 6,120, 46,244,208,214,126, + 24,250, 13,183, 57,199,136,107,120,240,118,123,115,120,251, 49, 5, 8,251,145,237,178, 41, 46, 17,137,157, 5, 22,117,247, 37, + 47,151, 40,179,192,115,238,234, 70,136,101, 68,101, 98,176,229, 6,239, 21,203, 41, 73,224,253,108, 83,203,220, 61,142,240,210, +111, 98,136,104,125, 76, 71, 87,170,168,144,132,172,246,176,182,107,125,148,115,118, 92, 87,118,185, 0,243,223,220,169,252, 31, +102, 95,142,242, 41, 0,105, 87,215,219, 32, 12, 3, 99,135, 16,232,180, 73,235,255,255,131,211, 94,214,170, 27,133, 66,178,179, + 29, 88, 87, 86, 52,109,111,124, 4, 2,137,115,190, 59, 41,201,127,241, 29, 67,247,253, 50,206,189, 95,246, 97, 46,253,106,216, + 46,191, 41,211, 92, 74,127,147,102, 91, 93, 67,197,168, 61,240,132,115, 49,102, 42,157, 64, 47,232, 46,235, 81, 1,111, 2, 94, + 20, 67,131,231,198, 52, 14, 93, 7,212, 83, 26, 60,130,133,226,173,160,152,162,204, 40, 89, 46,201,234,176,240, 29, 74,165, 0, +159,215,119,243, 12,183,232,200, 67,119,156,100,237, 47,195,226,180, 76, 24, 77,150,185,146,246,179,149,102,183,139,187,243,216, + 41,203,157,117, 52,235,202, 97,242,152,174,221,175,145,144,253, 44,157, 53,232, 69, 32,178,237,169, 75,197,221, 33, 75, 98,230, + 22,225,199,166,215,254,227,101, 28, 78, 41,131,225, 52,109,243,212, 4,164,137, 64,244,208,186, 32, 30, 11,141, 98,247, 36,105, + 41, 79,117,237,235, 40,252,105, 2, 49, 23,181, 32,190,140, 84,147, 24,100, 28,167, 53,209, 5,199, 67, 62, 15,147,215,252, 55, + 73,141,162, 22,106,246,146,159, 64,117, 80,186,142, 57,247,162, 81, 22, 69,205,137,149,243,144,126,177, 54, 32, 90,120,226, 66, + 67,190, 98,178,252,220, 85,136,218,209,225,252,182, 70,237,200,113,144,109,120,175, 54,118, 79,231,141, 40,199,149,157,111,187, +169, 91,242,199, 90, 25, 44, 85, 28, 47,167, 27, 46,188,126, 97,244,205, 48,245,235, 68,149,140, 4,255,150,212, 91,194,219, 98, +241, 52,251, 90, 0,247,245,103,111,128,251, 92,152,188,227,181,216,219,200,124,222,184,105, 33,224,247, 61,153, 98,194, 20, 33, + 98,206,140, 86,156,221,204,147, 10, 85,191, 98,161,166, 82, 73,124, 62, 42,186, 92,149,184,138,108,219,135,157, 52,165,176, 13, + 5, 87, 80,126,153,131,237,213,139, 20,239,181,226, 32,190,140,175, 67, 21,154, 10,216,222,196,166, 13,177,133,222,125,222,239, +251,190, 7,189,119, 22,197,184,132,240, 68,196, 87,178,106,170, 56,190,164, 70,139, 32,180,168,119,167,102,175,129,124,105, 2, +113, 86, 83, 6,128, 92, 0, 20,148,116,202, 29,207,126,139,124, 15, 46,145,179, 41,225,156, 13,199,125, 2,156,136, 99,147,165, +164,221,211, 1,204,133,144,217, 78,169,217,125,135,120, 27, 11,249, 39,100,207,247, 53,208, 99,124, 4,239,161, 77, 91,230,111, +136,127, 19,136,159, 2,144,118,109, 59,106,195, 80,208,231,216,216,161, 41, 44,171,221,125,104, 87,253,157, 85,255,255, 1, 9, +245, 15, 42, 30,118,165, 0, 1,199,113,207,197,129,208, 80,161,182, 8,129,100, 7, 80,236, 57,227,153,177, 18,104, 20,241,127, + 86,137,194,209,131, 46,214, 5,210, 26,205, 61, 48,248, 57,153, 46, 98, 15, 57, 0,135, 60,196,104,175,192, 66, 98,114,177,109, + 18,199,204,248,126, 37,190,170,124,240,161,154, 17,111,229,188, 88,174,168,141,200, 61, 43,211, 22,245,156,213,134,205, 8, 39, +224,101,190, 52, 3,210, 76, 89, 84, 4,104, 8,104, 69,126,156,175,182, 84, 32, 94, 46,191,148,120, 8,100, 30,137, 55,163,168, + 5,179,170,151,192,180,216, 9, 64, 53,185,147,243, 84,181,142,138,161, 78,230, 28, 7, 4, 8,251, 64,153,111,182, 40,210,205, + 69,193,156,175, 54, 70,126,215,218,231,197,203, 33,238,131,115,252,180, 44,161,222,227, 97, 27,119, 63,154,237,166,253,248,217, +146,212,166, 46, 26, 62, 95,161, 3,130, 94,194, 67,155,154, 93,223, 52,121,215,230, 83, 4,217,131, 64,194,109, 60, 82, 87,238, + 34,166,196,233, 58, 39, 73,157, 61, 29, 33, 70, 72,137,149, 82, 8,102,181,192,199, 21,124,174,241,233,193, 61, 62,216,101, 13, + 21,169,119,167,251, 30,198,123, 87, 5,110,217,127,236,105, 48, 82,241,178, 26,183,159,105, 33,155,137, 92,157,208, 77,121,255, +178,252,218, 12,240,189,193,124,188,246,229,187,121,244,248,136, 40, 14, 96,204,137, 52,230,180, 78,116, 57, 77, 35,236, 79, 88, + 81,123,207,245,255, 71, 81,242, 15,213, 2,163,112,198, 12,132, 88,219, 58,177,203,130,177, 13,155,178, 42,140, 42, 31, 39,238, +113,164,214, 97,116,240, 85, 8, 14,131,114,186,118,124, 25,110, 77, 10,220, 62,145, 51,185, 51,230,237,165, 11,207, 58, 88, 13, +174, 50,123, 9, 86,108, 73, 44,133, 15, 97,248, 91, 25,208,186,226,167,113,178,207,131, 86,233, 91,234, 79, 98,154, 66,250, 42, + 93, 36, 13,149,143,136, 65,119, 84,234,150,184,221, 83,165, 83,205, 59,122,181,129,164,205,235,235,183,183,183,239,155,245,250, +120, 60,152,225, 62,169, 89, 19, 89,170,113, 22, 93,189,236,198,177, 26,226,101,134,190,138,227, 85,137,241,213,244,147, 58,180, + 86,229, 35,151, 50, 23,164,238,172, 41, 27, 40,142,113,238,234, 96, 61,169, 70, 77, 28,132,199,137,224, 59, 73,126, 46, 50, 2, + 46, 22,187, 31,227, 31,202, 58,250,251,180,226, 61,190, 84,207,215,115,242,159,224, 90,230,155, 91,224,209, 22,242,193,109,215, +254, 45,185,211,227,151, 0,164, 93, 77, 79,219, 64, 16,245,172,189, 14, 95, 38,141, 34, 46, 52,151,246, 80,245, 31, 20, 1,226, +183, 32,113,172,196, 95,224, 71,246, 4, 71, 80, 15, 85,148, 22, 9,133,160,205,218,203,188,153, 93,219, 68, 4,130,154, 68,209, + 42,182, 44,239,238,236,155, 55,239, 69,235,255,194,119, 21,100, 90,218, 46,237, 96, 84,141, 81,155, 6,211, 19, 36, 82, 21,205, +129,144,144,187, 37,126, 36, 8,248, 43, 47,185, 80, 51,150,212, 88,149,233, 41,203,173,106,111,127, 88,125,218, 30,236,158,159, + 95,220,220, 92,207, 31, 31, 73,183,213, 77,240,163, 3, 47,106,124, 29, 3, 93,102, 48,143,187,119, 21,219,118,143, 75,173, 60, + 25, 59, 9,220,131, 34, 62, 37, 93, 80, 75,104,189,201,228,215, 54, 12, 40,203,122,217,210, 82,204,138, 60, 64, 43,180,142, 46, +100,255,160,181, 60, 40,170,193,252,195,250, 17,146, 19,100, 32, 32,252, 41,190, 75,207,225,120, 26, 14,106,178,198, 28, 12,198, +191,231,211,153, 91,220, 46,254,254,154,255,185,243, 15,179,108,241,100,195,206,112,235,112, 92, 29,142,118,135, 3,203,185, 49, + 23,179, 84,222,146, 55, 24,212,114, 51,176, 92,220,112,199,137, 65,252,137,177,222,145,115, 92,113,114,225,138,129, 53, 16,220, +169,180, 96,250, 73, 36, 37, 91, 6,190, 22, 7,115, 0, 93,225, 40, 54,206,161,130,229,217,225,234, 43,151,228,229,188,207,162, +137, 37,175, 90,108,171,206,236, 36, 69,204,144, 25,234,106, 30,234, 19,106,145,216, 10, 62,141,193,253, 93, 55,233,221,163, 6, + 76,223,250, 94, 37,190, 34,205, 43,184,127, 25,127,189, 95,252,235, 31,242,193, 55, 27, 43,254, 89,180, 46, 55, 5,119,122, 41, + 89, 44, 1,238,217, 10,236, 70,232,237, 89, 83,235,148,156, 20, 96,175, 10,238, 43, 75,140,214, 11,248, 68, 29, 34,173,235, 72, + 31,220,251,186, 48,165,172,210,221,185, 73, 25, 64,101, 85, 44,141, 16, 55,178, 48,210, 6, 47, 83, 14, 39,191,198, 6,165, 6, + 2,175, 48, 45,119,146,162, 26,200, 30,148,195,241, 42, 96, 80, 22,209,221,130,199, 85, 59,213,104,116,240,121, 50,249,113,116, +244,243,234,242,251,241,183,211,147,179,251,233, 3,159,198,248,225,156, 7,236,214,117,218,135, 3,196, 26,213, 39, 47,113, 2, + 86, 48,172, 27,136,247,120,118,187,248,181, 86, 76,167, 2, 12, 8,230, 93, 19,123, 76,237,158, 28, 8,223,101,195,215,245,226, +179,225, 56,103, 41, 89,203,212,161,109,202,179, 60,143, 5,238,100,149,226,232,200, 88, 99,235,208,188,229, 85,116,159, 94, 90, +142,238,112,167, 22,191,237, 84,121,252,171,164,249, 40,184,243,235, 89, 0,202,174,102,199,105, 24, 8,123,236,216, 38,217,203, +118,247,194,162, 10, 33, 14,188, 2, 44,111, 3,119, 94,139, 27,112,131,231, 64,236,133, 27, 72, 92,144, 88, 85,148,230,255,199, + 59, 63,118, 27,186,109, 5,109, 21, 69, 74,212,196,246,204, 55,223,204, 55, 74,142,226, 59,156,250, 69,155,131,200,235, 4,211, +133,221, 38, 98,206,206, 78,128,141, 75,171, 76,178, 0, 90, 92,193, 32, 18, 57,131,145, 66, 48, 68, 78, 64,169, 23, 5, 96,138, + 0,210, 75, 99,158,191,120,249,250,205,171,143, 31, 62,225, 74,140,152,116,225, 90,171,180,210,137, 97, 10,200, 68,107,138,178, + 45,101,153,206,100,200,199, 77,170,243,135, 88, 40,100,230, 33,193, 29, 84,110,243,229,229,114, 93,175,101,210,165,230,206, 22, + 16,101,244,232, 99, 26,230,243,100,168,151, 69, 63, 90, 92, 85, 77,117,253,236,250,219,175,239, 19, 91,202,227,139,101, 73,101, + 21,234,141, 9, 81,248,161,193, 33,160, 35, 86, 55,211,240,123, 36,146,254,181,252,121,211,252,184,213,155,210, 14,202,234, 51, +239,115,239, 11,231,115, 36,236, 20,234, 8,214, 45,186, 3,231,162,214,106, 71, 58,148,118,214, 60,200,120, 95,131,227, 30,152, +220, 89,159, 41,103, 69,138, 6,159, 25,188, 94,219,171,178, 10,235, 50,180, 29,244, 67,232,123,133,212,126, 83, 77,117,173,171, +122,106,234,208, 52,208,182, 35, 14,111, 24, 85,211, 78, 53, 63,122, 18,239,184, 65,254, 63,144,136, 37,178,106,136,143, 32,155, + 56, 76, 7,188,212,121,113, 81,117,165, 20,223,112, 94,144,112,209, 73,169,143, 33,196,158, 10, 73,156,255,227,131, 52,124, 12, +127, 85, 69,158, 92, 62, 93, 49,100,143,241, 13,149, 72,147,139,132,164,251,246,137,224,158,132,235, 93,164,249,199, 27,240,198, +115,120, 62,144, 79,236, 21, 64,238,147,247,148,188, 2, 28,240,160,136,185,206,228,152, 43, 36,223,134,131,202,252,125,154,191, +109,149,217,186,216, 9,151,156,245,201,192, 17,248,159,169,169,187,126, 7,149,216, 12,215,100, 16,180,183,242, 24,163, 29,164, + 33,232, 16, 41,187, 48,250, 29,136,179, 91,101,178,207,164, 74, 83,131,154, 22,158,196, 95,165,211, 81,218, 6, 9, 6,210, 56, +193, 5, 88,147, 57, 4,120, 98,240,222,163,189,131,174,202,170,176,103, 80,171,247,111,223,221,124,249,188, 90,221,254, 41, 55, + 93, 91, 15,212,212, 53,136,220, 47,165, 93, 97,130,154, 55,148, 5, 24,214,104, 51,116, 17,227,241, 31,109, 78,148, 37,192,195, +197,213,186,222,128,146,182,137,153,128, 15, 97, 81,156,119,125,199,192, 17, 44, 50, 76,227,250,177, 99, 76,144, 10, 85,152, 83, +120,244, 54, 54,145,105, 15, 72,121,226, 96, 94,129,220,195,244,211, 80, 12, 51, 9, 71, 31,207,192, 82, 60, 56,101,213,199, 14, +221, 9,192,218,181,237,180, 13, 4,209,181,215, 38, 38, 80, 8,173, 42, 85, 34,130,143, 64, 8, 85,234,255,191,240,128, 80, 21, +149, 87, 30,122, 81, 73,161,133,196,187,107,123,119,153, 51, 99,147,139,176,197, 67, 35, 69,137,180,137,175,179,103,207,156, 57, + 26,191,226,159, 73,182, 86,160,161,141,138,212,254, 18,136, 45,125,110, 9,123, 39,236,169, 54,113, 99, 78, 32,208, 47,141,113, +117,219, 15,151,105,188,172,252,154,208, 43,195,125, 34, 24,219,161, 95, 94,124,254, 66, 67,223,102, 51, 34,178,214, 26, 83,150, +166, 42,125, 93,163,139, 33,241,107,206,115,216,221,196,234, 79, 71, 46,248,152, 96,194, 84,128, 72,160, 94,198,131,153,144, 17, +225, 26,178,115,150,222, 52, 52, 69,173,226,128,121, 35,248,149, 42, 42, 42, 39, 32,165, 6, 59, 80,211,163,233, 94,177, 59,251, +126, 67, 39,196, 82,148,232,142, 80,162,156,119,127, 27,123,239,203,185,114, 77, 26,170,224,137,216, 28, 32, 4, 83, 34,167, 68, + 50,154,192, 24, 25,184,140, 3,218,163,153,219,100,180, 56, 73, 52,179,194, 20, 9,187,139, 29,250, 3,157,111,115,252,233, 35, + 69,252,221,159,251, 81, 54, 42, 29, 93, 7, 2,241,184,168, 66,202, 89,170, 6,209,135,127,128, 83, 96, 92, 10, 90, 9,248,113, + 34,209,213, 97,105,234,192, 8, 14, 29,159, 11,112, 62, 38, 85,132, 39,135, 70,242, 96,231, 63, 23,180,142, 86,168,187,114, 83, + 74,238,131, 73,111, 58,176,201,254,251,223,143,191, 34, 44, 25,210,205, 88, 67, 28,229, 34,214,166,251, 37, 14,187, 11,246, 71, + 7, 75,247,212, 39,209,208, 70,248, 54,165,235,117,206,208,239, 63,145,209,179,211,243,171,219,203, 55, 58, 19,214,220, 1,154, +229, 26,236,232,112,247,232,159,121, 40,242,194,214,118, 43, 12, 10,141, 80, 52,222,166,155, 64, 60,160,188,119, 14,203,220, 7, +183, 30, 86, 47,190,154,216, 3,238, 82, 77, 21,206,180,101,150, 28, 56,159,248,186, 5,105, 53,127,183,172, 50,155,130,251,202, +227,187,146,213,145,124,138,127, 54,109,157, 2, 73,135, 89, 73,139,230,252, 93,103,252, 33, 19,153, 37,122,217,133,176, 44, 14, +224,216,242,255, 68, 68, 27, 84,217,152,102, 19, 48,103,163, 28,109,166,137,222,208, 7,113,155,124, 50,249, 48, 61,153, 94,127, +189,174,240,172, 58, 99,172, 89,150, 4,241,206, 53,174,198,172,175, 16,142, 9, 46, 14,191, 52, 19, 65, 56,111,104,182,195, 18, + 28, 99, 49, 30,191, 27, 31,222,205,127, 44, 76, 73,196,223, 82,162, 26,144,139, 99,129, 80,158, 59,167,122, 49,191,214, 68,112, +112,173,145,237,181,254, 26,197, 62, 57,134,108, 41,156,116, 20, 7,115, 74, 49,200,134, 13, 47,141,250, 47,157, 81,251, 60, 57, +241,205,233,111,223, 97, 60, 11,192,217,181,237, 54, 17, 3, 81,123,214,217, 77, 90, 42, 65,185, 60, 32,158,203,191, 35, 30,248, + 17,126, 0,165,188,161, 86, 8,181,106,146,110,178, 27,219,195, 25,143,157,221, 92, 74,129,215, 72,118,178,235,241,153,153,115, +142, 99,247,119,198,220,147,179, 12,125, 71,182,217,230, 36,159, 99, 71,180,113,106,106, 43, 66, 10,218, 31, 18,220, 65,151, 21, +188,145,110, 75,147,176, 75, 43,165,156, 9, 23,176, 55,202, 13, 68,239,166,231,243,249,183,197,253, 29, 70, 97, 66, 44,209, 89, + 61,235,250, 77,200,178,198, 78,222,200,197, 80,150,118, 14,203,157,252, 25,233,186,144,125,249,226,213, 67,123,207,153, 47, 35, +189, 60, 67,201,253, 16, 89, 13,188, 57,124,135,119, 10,176,206, 85, 0, 37,189, 40, 89,204,217,137,177, 62,172,250, 37, 30,138, +146, 40,220, 24, 84,205,225, 33,108, 86,161,255, 25, 86, 43,183,237, 45,207,206, 38, 51,170,109, 32,249,231,116, 54,181,181,141, + 5, 56,218,118,157,200,155,100,180,158, 74,212,227,125,137,199,113, 54,113,129,226,212, 85,205, 68, 93,234,149, 17,245, 39, 96, + 91,116,221,246,195,251, 55, 31,175,174, 62,125,254, 2,220,197, 43, 14, 98,122,140,216, 66,120, 28,167, 44, 16, 91,113,100,250, +126, 98,209, 32, 48,170,117,252,182, 40, 55,129, 97, 23,208, 90,156,154,188,245,114,255, 83,116,146, 10,132,221,228, 8,168,115, + 77,205,104, 90,243,121, 0, 41,101,148, 50, 20, 34, 34,250,101,187,220,117,185,156,110,131,202,170,219,126,164, 98,171, 33, 57, +208,211, 74,229, 99,183,248, 3,127, 82, 80, 97, 47,144,233, 57, 86,231,107, 2,119, 58, 84,168,212, 39,241,228,216,113,223, 0, +112, 47,238,231,195,173, 11, 80, 64,135, 67, 35, 74, 42,229, 54, 79,207,113,155, 65,238, 34,206,116,150, 57,162, 68, 78,234,177, +169, 90,172,244, 75,101,160, 84,214,172,209,201,214,158, 26,201,166,172, 17,159, 40, 4,205, 88, 80,117,131,163, 99, 15,220, 7, +215,163,186, 26,185,144, 49,106,116, 43,200, 94, 12,205, 10,252, 90,204, 25, 21,207, 18,128,139, 7,173,216,227,180, 43, 72,188, +119,186,188, 93,242,150,213,163, 38, 84, 44,243, 41, 49,196,116, 96, 32, 17,236, 38, 86,221,186,253,126, 61, 71, 1,135,240, 21, +251,174,247,169,141,140, 73, 8,146, 78,241,162, 57,127,236, 90,173, 5, 17,222, 78, 5, 59,185,215,183,186,188,120,123,183,248, +117,249,250,221,205,237, 15, 12,168,235,186,223, 50,146,137,151,234, 4,104,132,152, 15, 40,156,250,126,131,185, 48,125,145, 76, + 7, 53, 91, 1,226, 40, 94,104,103,123, 99, 51,230,120,254,167,160, 62,198,241, 17,121,196,138,104, 97,127,146,157,134,143, 69, +193,166,179,255,226, 60,254, 45, 0,101, 87,176, 27, 53, 12, 68,109, 39, 78,154, 84,187, 61,160, 86, 72, 84, 85,191,128, 3, 23, + 16,136, 79,129, 35, 18,135,254, 19, 20,248, 27, 78, 85, 47, 69,170, 68,165, 10, 36,164,165, 91,218, 77,154, 56,246,116,102,236, +120,183,219, 77, 36,118,175,217,200, 78,236, 55,111,222,188, 89, 15,145,119, 57,240, 99, 25, 89,193,170,241,177,111,109, 96, 93, + 68,232, 34,205, 83,145,102, 50, 11,124, 2,168, 2,162, 5,190,132, 4,159, 47, 49, 83, 33, 42, 87, 45, 92,133, 57, 17,225, 27, + 35,106,176, 87,122, 58,216,117, 32, 52,110,182,235,127, 87,136, 44, 8, 86,123,211,167,191,103,151,136,114,157, 49,108, 11,113, +129, 10,201,104,204,164, 4, 46,100, 86, 58, 81,176, 50, 96,213, 71, 92, 78, 27, 48, 33,188,169,149, 47,189,120,101,155,190,132, +113,176,187,179,187, 83, 76,127,254,185, 88,119,186, 57,231, 99,137,227, 96,196,115,226,196,129, 45, 95, 55,205,237, 45,166,129, +210,206,237,226, 87, 59,175,210,174, 77,187, 98, 74,190,151, 39,248, 16,172,230, 27,128,177,164, 45, 41,202, 7, 37, 14, 16,233, + 49, 0,139,218, 4,165, 50,215, 42,203,147, 2,193,189, 80,185, 38,176, 37,207,188,147, 77, 3,228, 97,166,130, 33,188,126,254, +226,236,199,249,197,229,236,253,187,183,167, 39,103,223, 79, 78,203,188,160,200,147,192, 36,211,142,196, 45,242,194, 28,238, 63, + 91,212,213,236,234,250,232,227, 7,164, 63,159,190, 28,103, 91, 10,227, 12, 18,149,132, 52, 43, 71, 70, 73,107,239,112, 64, 13, +205, 11, 3, 23,238,149,132, 92,240,248,146, 52,238, 45,239, 9, 5, 31, 61,105,197,209,134,108,186,154,197,247, 65,196,236, 47, + 87,246,161, 81,114,147,232, 60,186,250, 1,236,163,232, 32, 55, 17,243,100,192,165, 6,203,252, 82,140, 91,217, 74, 93,214,166, +242,195,199,187, 53,180, 32,113,249,232,214,154, 56,169, 14, 58, 16, 75,145,190, 55,196,170,135,100, 7,209, 51, 53,176,241,112, +121, 41, 5,192,168, 56,174, 86, 28,232,225, 15,150,251,124, 14, 23,199,100,107, 50,175,255,174,116, 30,172,223,128, 53, 50,136, + 40, 31,249,160, 18,177,179, 80, 70,207,190,234,221, 80,177,154,154,242,187,246, 6, 20,217,115,243, 77,200,238,121, 92, 26, 88, +188, 8, 64,239,189,146,193, 49,217,195, 58,243,117,240, 13,128, 50, 54, 55,177,145, 46,229,168, 64,193,128,160, 27,159, 46,178, + 25,211,146, 3,152, 42,161, 29,230,231,200,216,219,198,208,169, 53,134, 15,202,161, 92,210,215,250, 19, 50,135, 49,233, 97, 99, + 52,201,191, 73, 86,230,219,101,185,141, 87,188,124,245,102,255,224,224,219,215,207, 8,252,116,102, 78,223,128,227,243, 96, 96, +247, 28,207,146,229, 22,185, 14,229, 94, 99,196, 8,100,216, 14,109,255,167, 55, 98,173,212, 49, 78,187,131,202,205, 76, 8,150, + 5, 27, 31, 96,104,165,185, 1, 4,135, 71,134,177,241,207,189, 0,172, 93,203,110, 19, 49, 20,245,245, 60,243, 40, 1, 65, 75, +131,202, 18,254, 2, 22,192,138,175, 66, 17, 95,128,202, 31, 32,193, 55,240, 88, 34,216,178, 66,160, 82, 42,218, 72, 93, 16, 74, + 90,230,145,241,216,230,222,107,155,132, 52, 21,173,196,172,178,136,228, 25,207,125, 28,159,123,142, 38, 62, 87,113,247,226,145, + 69, 36,229,124,113, 16,172,110,254, 28,151, 11, 66,159, 26, 95,144,104,107, 59,115,194, 35,178,173,106, 34, 28, 16,135,198, 42, + 74,100,146,198, 89, 55,238,174,119,174, 25,208, 19,117,244,171, 45, 37,201,153, 18,159,148,152,222,244, 42, 68, 85, 22, 73,154, + 81, 51, 23,102, 60,217,227,207, 28,181,204,154,145,136, 17,152,135,119,140,153, 87,176, 72,121,123,120,107,247,112,199, 73, 48, +157,236, 92, 88, 31,121,158,234, 2, 91,171, 38,149,169,178,196,190, 13,122,151,143,171, 19, 31,245, 26,209,193,165, 47,135,187, + 60, 34,146,139, 10, 85,139,201, 11, 45, 25,173, 44,163,120,230,220,172,147,232, 64, 52,209,211, 49,124,175, 69,219, 68,186, 63, +200, 7, 73,214,203,251,189, 78, 42,120,224,239, 38,190, 86,243,172, 83,104, 82,131, 74,145, 33,118,214,116,243,137,251,112, 18, +199, 61,139,108, 48,234,201,108, 27,133,169, 2, 30, 87,134, 91,195,106,166,191, 29,236,111,172,223,180,162,243,234,205,235,162, + 50,247, 31, 60,252,240,113,239,199, 20, 59, 85,164, 12, 57,119, 89,129, 44,174, 94, 25, 60, 26,141,118,119,190, 62,121,186,125, +231,238, 61,132,153,207,158,191, 64,252, 73,116, 54,107, 54,179, 52,174,105,131, 33,227,180,166,245,129,122,175,182, 80, 26,189, +214, 77,142, 78, 76, 18,101,184,219,210,106, 61, 15, 44, 19,166,255,127,125, 73,196, 4, 38,193, 4, 34, 94, 17,104,245, 98, 81, + 45,254,195, 69,250,200,180, 87, 52,133, 60,165, 47, 12,220,247, 10,203,107, 39,202, 43, 93,195,191, 32, 85,201,197, 29, 60, 5, + 23, 68, 80,164, 47, 84,171,156, 77,110,158,140,157, 82,211, 73,137,243,243, 15,234, 49, 96,206,110, 93, 0, 75,190,182, 83, 44, +191,157, 7,156,175, 18,180,227,100,229,177,211,234,167, 61,251, 17,194, 49, 22,124,149,231,187,196, 29,171, 84,197, 67, 42, 71, +172,207,197,237,193,246,237, 51,130,114,103, 94,220,101, 20,124,172,129,142,151,115,104, 79,148, 30,184, 94,192, 53, 54, 90, 54, +175, 46, 92,210,149,120,167, 54,112,162, 7,112, 58,131,152, 85, 55,188, 26,235, 99, 48,169, 65,209, 79,172,242, 24, 69,141, 34, + 38,134, 61, 77,216,100,149,109,219,235,107,155,227,201,190,155,186,225, 33, 82,184, 42,109, 89, 71,131,207,141, 77, 0,255,105, +178, 60,239,143,182, 31,191,123,251,126,227,229,102, 81, 28,227,242, 55,250, 91,159, 15, 62,225,106, 70, 33,190,106,112, 71, 27, + 86,209,231,105,183,158,149, 54,164, 55, 5,106, 8, 86,158,150,165,170, 41,207,163,146,133, 11, 64,246, 21,228, 98, 14, 89, 77, +203,234, 69, 58,126, 65,176,189, 20, 45,182, 53, 23,206,167,223, 2,176,118,237,186, 77, 4, 81,116, 94,158,245,174,147,181,113, +131, 40, 81,226,130, 18, 33,209,162,252,101, 42, 36,126, 0, 41, 74, 73, 65,133, 27, 26, 36, 10, 20, 18,137, 2,137, 42, 56, 33, +224,172,247, 53,195,125,204,190,156, 88,128,132, 27,219,251, 28,237,206,222, 61,247,158,115,102, 6,252,170,188, 27,220, 27,187, +177,238,122, 82,112, 42,112,101, 70, 99,210,135,183, 57,146,128, 36, 99,237,117,225,242, 10, 16,143,168,136,182, 18, 42,120, 75, +241, 57, 96,226,209,241, 61, 65, 35, 26,100,184,230,209,228, 97,106,211,181,207, 96,123,213,184,154, 49, 30,146,165,129,228,175, + 56,179, 29,124,161,224,210, 68,155, 98,237, 89,123,232,194, 40, 5, 45,196,128, 37,215,191, 86,212,251,176,164, 30, 20,153, 70, + 6,134, 39,112,176, 42, 47,115,216, 25, 41, 26, 47, 11,114, 48, 55,242,124,113,149,253, 80,140, 95,216, 31,215,210,184,222,135, + 89, 79,169,112, 1,255, 35,107,241,138,139,250,194,125,187,140, 87,241,196,236, 69, 49, 92, 4, 11,221, 67,152,186,134,252, 93, + 59,108, 48,164, 44, 58, 26,153, 73,162,246, 19,148, 42, 38,214, 24, 4, 46, 42, 47, 92, 89, 74, 88,121,117,157, 81,185, 27, 0, + 3, 44,148, 27, 52,250,168,178,226, 98,150,252,153,229,207,159, 62,123,178, 56,120,255,225,227,131,217,124,113,184,120,243,118, +121,248,248, 32, 77,167,145,141,206, 47, 62, 71,227, 81, 28,137,201,216, 64, 6,192, 29,246,232,197, 17, 36,247,175, 79, 78,207, +206, 62, 45,151,239,206,191,124,245, 78,195, 1, 21, 14, 63,128,141, 55, 90, 89, 43,103,177,153,166,122,111,162, 99, 27,138,189, + 21,146,170, 46,167,230, 16,155,133, 55,160,181, 8,180, 41,228,214, 16, 5, 35,109, 21,170, 42,235, 33,167,244, 63,231,108,154, + 39,243, 28,210,106, 14, 94,131,176,232,119, 74, 45,253, 95,121,200,239,165,173,106, 2,236, 4,127, 66,245, 73,111, 57,125, 24, +246,162, 25,202,169, 94, 99,228,159, 78,117,135, 29,237,234, 3,196,134,136,206, 33,200,210,242,198, 88,178, 99, 14,150, 46,116, +203,208,200,224, 48, 65, 96, 72, 85,112, 61,120, 69,169, 62, 96, 83,162,167,125, 20,236, 45, 85, 12,219,169, 8, 73,250, 8, 25, + 84, 50,244, 27,171,237,196,184,242, 8, 23,130,105, 51,211,215,207, 16, 54,106, 87, 49, 21,138, 59,208,217,227, 81, 34, 26, 73, + 43,114,163,180,141,119, 65,241,204,227, 98, 20,101,134, 94,213,138,194, 60,253,184,185, 93, 97,104,195, 96,206,108, 29, 19,108, + 72, 54,225,254, 24,132, 20,196,147,205, 38,219,151,233,171,227,151,168, 54,241,162, 40,242,239, 55,151, 53, 57,222, 49,128,160, +202,217, 83,122, 84, 79,227,217,109,190,238,112,115,128,149,225,137,175, 32,135,195, 11,224,188,148, 61, 74, 67,222,247,118,222, +166,186,225, 48, 99, 36,213,235, 93,130, 39, 49, 20,122,121,236, 63,126, 75, 70,133, 93, 11,130,147,239,251,195,133, 97, 7,217, + 63,126,126, 11, 64,217,213,244, 54, 13, 4, 81,207,174,237,236, 58,105, 82, 26, 72,133,138, 80,251, 11,128, 11, 7, 78,253, 27, + 72, 28,248,171, 5,132,132,224,128, 4, 72,168,151,138, 67, 69, 19,218, 40,105,172, 56,254,102,102,118, 29,187, 14, 70, 16,229, +148, 83,188,158,121, 51,243,230,205,236,159,241, 29,234,230, 81,211, 62,106,249,140,228, 13, 46,130, 91,116, 70, 51,163,132,198, +147,203,202,196, 44,134,104, 48,183, 86,162,235,242, 65,129,233, 97,112,166,154,155,212,162,112,134,106,255,190, 26, 47,146,101, + 73, 4,139,224,169, 3,160, 78, 8,191,140,170,195, 87, 96,148,222, 36, 28,117,205,245,114, 22,220,183,236, 33, 25,203, 72,143, +184, 83, 90, 52, 92,131,228, 59,102, 63,141, 1,122,171,230, 97, 22, 21, 31, 66,186, 54, 92, 25, 37,151,242, 20, 97,173,132,129, +222,195, 31,134,122,116,114,120,124,125,123, 83,201,233,201,105, 48,233, 62, 57, 56,254,186,184,184, 16, 51,232, 23, 67, 95,251, + 64, 82,127,229,187,218,119, 77,102,212,243,188,128,184, 65,215, 88,176,239,122,129, 30,253,154,133, 73, 38, 16,184,139, 12,242, +212,121, 56,153,188,126,245,178, 31,168,233,244,102,181, 90,227,169,184, 76,184, 35,254,210, 25, 56, 50, 38,138,166,236, 73,249, +236,201,211, 15, 31, 63, 33,232,158,190,120,254,229,219,231,123,195, 32,205,163, 71, 71,135,241,122,177, 92, 94,247,148,139,118, +178,142,203, 40,202,166,243,240,237,217,251,179, 55,239,230,171,245,213,108,254,227,242, 10, 95, 19,134,140, 56, 43, 34,202,135, +242, 36,227, 14, 43,134, 32, 32, 57,231, 38, 46,241, 27, 39,104,214, 24,117, 11,223, 21,225, 18,243, 62,200,183,183, 6, 86, 43, + 57,140,114,116,119,255, 12, 77,141, 91,167,109,241,195, 0, 59, 43, 7,186,168, 67,163,144,233, 50, 83, 76,222,161,115,116,182, +157, 35,181,228,137,237,110,204,191, 33,190, 73,138, 93,225,149,101,185, 51,118, 68,180,192, 65, 48, 94,167,161,216,137,100,176, +211, 52, 3, 7,254, 2, 10,119,135, 84,109,235, 1,192,113, 58,135, 99,133,168,165, 59, 78, 83,198,179,141,127, 21,112, 55,131, +173,104, 4, 25, 75,187,195, 86,118,102,166, 50,106,184,167, 34, 18,179, 31, 97,197,109,194,106,222,152, 71,149,194,150,183, 18, +120,130,194, 80, 52,204,189,152,190, 43,203,100,141,188,133,156,142,228, 50,142,240,165,223, 87,253,201,222,131, 52, 79, 31,143, +143,176,130,143,179,141,168, 31,150,200, 85, 74,114,208,205,227,152,111,129, 76, 18,170,215,121,192,154,144,128,231, 87, 33,175, +134,228, 75, 15, 93,133, 10,119,201,139, 77,168, 77,161,148, 62, 63,255,254,115,122,137,169, 0, 70,133, 77, 28,241, 50, 19, 90, +211, 97, 22,110,216, 13, 5,224, 12,244, 48,140,110,225, 46,190, 23,150,122, 7,133,238, 44, 37,201,163, 1,170,247, 8,205, 56, +218,213, 55, 98,116,160, 97,124, 86,238,130,104, 78,170,119, 27,155,246, 6,105,145,180,140, 68,139, 32, 99,119, 48,200,142,127, + 93,123,154, 43,227,255,251,252, 22,128,178,171,107,109, 34,136,162,221,217,217,236,102,179, 77,104, 49,248,160, 16,161,148, 66, + 5,171,130,244,165, 66, 31, 90,255,175, 63,162,250,160,111, 45, 82, 10, 62, 41,212, 34,178,105,154,237,126,206,140,247, 99,102, +179,109, 99, 84, 72, 32,217,144,100,179, 51,115,230,220,123,207,185, 89,133,239,182, 4,222,154,215, 58, 53,213,245,120, 4, 99, + 32,108,247, 47,217,247, 96,203,194, 75,105, 92, 33,162, 35,251,247, 90,131, 59,219,223,148,173,199, 91, 7, 4, 87, 56, 55,163, +141,113,252,232, 71,126, 69,223, 73,208,206, 12,158, 17, 30, 71, 95,187, 30, 18,246, 1, 1,140,118,118, 38, 59, 83, 97, 92, 97, + 39,224, 46, 99,112,112,231,201,206,236,246,154, 20, 50,108,222,104, 85,186, 46, 80,240, 52,213,126, 91,153,151,152,140,159,165, + 89,234,211, 14, 14, 63, 42, 43,111,211,155, 95,198, 18, 40, 36,239,163,254,176, 39,123,239, 47, 79,190,153,105, 36, 48,189, 94, + 85,216,242,165,204, 77,133,105, 16, 44,234,199,125, 25, 5, 1,144,119, 20,240,248, 16, 30,170,189,221,237,163,195,131,139,175, +103,195, 68, 14, 32, 48, 11, 97,255, 88, 43,234,249,108,150,190,124,181,123,124,248,118, 16,247,210,233, 79,224, 32, 33, 42,136, +200,202,138,125, 58,124,137,227,211,236,191,217, 59,191,248, 82,213,217,235, 23,207, 47,175,190,231, 69,182,189, 53, 57,249,240, +241,221,209,241,167,207,167,117,165, 40,142,198,107, 25, 72, 89,212,117,217, 52, 73, 63,164, 6, 31,232, 79,237,209, 26, 0, 90, + 19,160,101, 80, 12,128, 99, 68,184, 58, 97,182, 23,133, 46, 43, 84, 23,107,110,123, 6,139, 27,157, 73, 13,174, 53, 99, 87, 22, +227,251, 61, 39,170,233,168,128,187,204,221,216,134, 79,248,122,228,199,218,113,225,213, 81,235, 10,112, 95,138,215,255, 30, 6, +143,147,199,154,178,183,247,206,255, 79, 89, 82,209,201, 70,146,184,169,229,197, 11,162, 3, 39, 83, 96, 98, 7, 14,202,135,190, + 22,183,145,152,167,163,201, 53,246, 59,195,103, 81, 16,115, 50,231,225,217, 82,191, 23,227, 10,194, 84, 45,242,196,178,216, 98, +201,191, 29, 46, 60, 22,119,199,194,101, 77, 23, 67,227,121,173, 20,210,182,240,112, 66,175,133, 43,144,153, 59,242, 54,235, 18, + 17,164,144, 97,200,102,197, 10, 78, 51,201, 26,104,227,154, 56, 9,209,138, 38, 89,250,236,183,111, 97,118, 79,215, 7,104,245, +188,184, 1, 24,207,242,121,222, 20, 62,187,142, 48,156, 39,119, 34, 53,180, 3, 20,169, 53,166, 97,233,134,104,175,200,171, 77, +190,117, 86,181,216,179,222, 72, 54,169,197,147,226,169, 65,186,122,191,168, 74,160,128, 0, 2, 73,184, 62,157,167,180, 79,240, +231, 32,132,192,236, 86,120, 55,101,157, 27,215,104,204,176,223,188,227, 79, 5, 24,133,184,129, 11,218,157,237,217,235,244,218, +178,162,112,227, 80,142,145,157, 95, 34, 69, 44, 50,128, 36, 76, 74, 85,255,141, 85,224,134,163,141,186,139,239,128,164, 85,199, +236, 58, 44, 21,208,179,122,237,255, 29,173,191, 5, 96,237,122,126,147, 8,162,240,204,236, 44, 12, 11, 68, 8,120,106, 15,246, +100,107, 77,154, 26, 15, 38, 30, 60,217,164,241, 63, 53,241,234,255,160, 94, 26, 53,169,246, 82, 26,127,245, 96,164, 33,192, 44, + 11, 51,248,190, 55,179, 43, 16,154,104,226,158, 96, 67,178,187,240,222,247,126,125,223, 99, 11,190, 87,127,225,156,108,130,123, +160,189,195,118,220,130,231,162,252,240,153,202,148, 71,173,161, 56,217,119,101,255, 72,135,182,135,136,201, 66,153, 63,248,104, +143, 4,186, 60,109, 7,132,161, 53,175,238,102,189,209, 98,106, 41, 39,146,137,227, 29,141,232,234, 44, 93,196,116,142,239,176, +133,184,133, 49,182,171,152,184, 91, 41,152,160,153, 34, 92, 36,252,109,155, 59, 51,151, 83,248,207,231, 57,236, 79, 48,143,119, +169,162, 69, 34, 42,234,195,221,131,225,120,168,130,158,159,231,102,116,133,145, 29,134,132,196,121,215,111,245,181,214,118, 62, + 11,141,102,193, 69, 41,153,223,251,233, 96, 36,139, 76,153,208,220,247,172,166, 35,184, 52, 90, 19,188, 66,138, 7,113, 30, 42, +133,176, 58,141,204,235,225,193,225,243,147,147, 15,103,111,109, 62,165,104,131, 89,171,199,179,255,184,254,249,230,221,217,224, +234,235,163,163,163, 23,167,167,189, 94,239,203,213,247,225,104,170,181,104,103,105, 43,147,141, 58, 65,112,254,248,248,120,112, +121,249,107,120,179,119,111,207,249,244,252,243,224,233,147,103, 47, 95,189,222,223,127,208,239,116, 63,158, 95,104, 92,143,110, + 45,144, 44,224, 96,208,140,165,146, 98, 73, 90, 19, 13, 35, 90, 70, 53, 51,217, 54, 9,133, 22,122,222,177, 5, 61,129,252,216, +164,244, 49,193,126,139, 47,212, 82,105,155,219, 25,146, 37,193,229,114, 57,240, 91, 95, 66,232, 87, 40, 0,235, 68, 35,252, 48, + 77,141,148,132, 43,208,249,191,118, 37,255,227,145,138,148,170,114, 91, 76, 28, 56,112,232,219, 25, 72, 91, 23, 89,218,168,167, +141, 2,124,231, 45, 73,125,215,116,103, 43, 90,193,106,147, 76,249, 86,149, 72, 26, 53, 17,183,173, 40, 72,101,109,130, 38,239, +130,119, 22, 81,192, 44, 8,226, 9, 59, 42, 95, 88, 1,119, 95, 17,210, 4, 15, 27,120,236,182,113,111,145, 58, 16, 57,123, 81, + 70,136,206,135, 73,140, 7,235, 41, 74,244,101,149,186, 71,116, 47, 79,138,128,236,242, 79,201, 27, 21, 76, 48,210, 68, 68, 81, +119,212,175, 36,225, 5,232,182, 82, 4, 98,123, 18, 84,122,124,146, 61, 23,169, 93, 37,121,137,236,120,100,250, 28, 3,130,186, + 85,198, 26, 0,171, 52,106,188,122,132,204, 77,225,173, 10, 99,222,221,222,142, 45,108, 88,179, 74, 41,221, 28, 78, 63,143, 61, + 21,224,242, 34,184,124,128, 0, 89,237,181, 1, 11,203,118,154, 29,170, 3,200,193, 59, 89,167, 86,111,140, 39, 55,132,236, 90, +213,238,239, 28, 92,124,251,196,180, 72,135,120,193, 18, 88,136,103, 48, 16,243,220,199,141,179,144,150,105,242, 37,150,213,254, +129, 13,246,247,173,115, 75,169, 57, 96,207,228,138,196,172, 93,111, 85,162,117, 80,212, 92,225,183, 20,181,107, 69, 44, 68,145, + 43,181,239, 70,137, 23,220,142,192, 93,254,133, 48,112,235,241, 91, 0,206,174,166,183,105, 32,136,122,119,227,245, 71, 62, 74, + 19, 74, 17,170, 90, 5, 10,244,128, 64, 28,225,192,129, 3, 18, 55, 36, 46,252, 91, 46, 72,220,138, 42,132, 16,208, 86, 10, 80, + 53, 16,210,212,137,235,196,137,237,101,102,118,215, 73,160, 5, 68, 14,150,229, 72,107,217, 94,207,206,188,121,239,249, 79,241, +157,255,162,131, 64,219, 32,221, 55, 39,195, 47,218, 74, 22,192, 91,148, 19, 59,156,230, 49, 61, 96,220,138,178, 82,180, 42, 81, +150, 57, 38,205,230,166,112, 65,136, 15, 10, 55,137, 12, 86, 89,147,193,101,127,245, 75,124, 68, 39,194, 8,143,172,109,109, 9, + 65, 25,187,137, 41, 74,179,113,137, 6,107, 18, 18,237, 47, 68,180, 92, 2,252, 96, 46, 76,166, 19,152, 89,176,132, 78,179,244, +230,250,246,105, 50,228,165, 86,154,105,163,187,162, 31, 15,144, 52, 75,186, 90, 24,105,115,109, 43, 73,207,132,197,111,224, 82, +147, 89, 66, 43,185,186,127,253,222,143,168,135,128,148, 18,189, 98,216,147,163,102, 24, 54,170, 94,232, 85,234,129,223, 92,113, +155,117,185, 90,247, 27, 97, 5,242,226,208,199, 96, 43,189,138, 47, 93,218, 81, 82, 20,119,239,220,114, 24,118,134, 15, 14, 58, + 14,247, 54,174,110,118,190,126, 83,232, 77,227,194,204,143, 70,209,251, 15,239, 14, 59,251,219,237,173,167, 79, 30,111, 92, 91, +239, 30,119,123,131, 97, 28,163, 47, 88,255,116,178,115,123,231, 36, 26,125, 62, 58,190,212, 88,185,209,110,191,124,245,250,209, +195, 7, 31,247, 63,237,238,189,125,241,252,217,238,155,189,110,247,123,158, 59,213,208, 79,211, 12, 86, 28,100,172,209,194,136, + 93,142, 28, 15, 40, 14, 37, 45, 11, 3, 71,184, 72, 26,131, 91,232, 10, 86,149,162, 22,242, 0, 86, 17,201,124, 15,202, 50,238, + 74, 6,201, 3,148,182,196, 22,206,202,248, 94,218,165,150,220, 69,152,226,158,235,101, 75, 57, 41,254,213, 10,175, 64,124,156, +169, 44, 16, 65, 70,234, 30,126,177,185,227,127,199,119,233,200,156,188,136,216, 95,116,176,170,130, 64,173,171, 8, 18,165,150, + 15,214, 38, 68,220, 58, 31,189,209, 66,240, 5,168,199, 80,108,225,114,200, 91,171,176,111, 35, 35,240,189,208,214,163, 11,160, + 78,249,234, 22,133, 21, 7,232,113,242, 98,182,220, 60, 96,220,102,238,205,176, 53,153,141,169, 93,137,196, 83,221,168, 21,206, + 57, 12, 81,216, 86,189, 26, 61, 16,194, 10, 9, 60, 43, 84,153, 74,114,182, 44, 73, 81, 86, 57,191, 16,217,109,112, 87, 6,153, +177, 9,254, 92,193,164, 73, 42, 21, 45,227, 64,182,172, 96,198,106, 70, 24, 17, 56,210, 45, 17,177,209,150, 82, 20,226, 29,163, + 86, 44,173, 11, 48,123,131, 90,148,147,210, 2, 71,160,125, 81, 46, 6,112,206, 56,141,117,219, 48,215, 22, 96,216,248,209,182, + 4,112, 19, 72,205, 88, 24,185, 58,132, 65, 75, 81, 84,250,187,237,227,105, 2,193, 29,107, 78,206,171,178, 22, 37,131, 86,109, +109,116, 22,157,196,253,113,154, 80,233, 79, 21,129,197,223,169,105,103,104, 0,122, 30,167,179,180, 88,206,223,157,185,147, 18, +215, 86,207,150,160,199,200,124,201, 28,128, 97, 8, 84,113,202, 16, 71, 98,151,169, 86,228, 89,201,177,113,187, 42,230,235, 5, +251,157,174,179, 92,251, 58,206,130,237,232,191,171,190, 47,250,253, 20,128,180,107,105,109, 34,138,194,247,220,185, 51,147,116, + 82,234, 19,171,213,180, 32, 10, 10, 46,170, 46,164, 80, 23,130,238,138, 43,187,115,161, 43,197,255, 39,184,180, 96,125, 81, 53, + 8, 69, 20,139, 15, 84, 12,149, 54,113, 38, 51,153,201,204,245,158,115,238, 76,166, 82,171, 96,146, 85, 18,134, 9,185,247, 60, +190,239, 59,223,253,123,124, 31,255,102, 75,248, 0,207,166, 81,191, 6,129,211, 26,145, 52,132,224,120,139,123, 56,214,142, 6, +192,142, 93, 73,130, 59,120, 68,159, 85, 83, 68,190, 75,107, 91,225, 41,183,233, 54, 38, 92,127,210,159,252, 62,248, 49,202,135, + 12,149,229, 58, 47,255, 89, 59,112, 64, 49,159,215,129,144, 5,151, 30, 22,104,151,246, 37,120, 94,186,225,122,243,237,249,141, +205,247,102, 73,245,162,109,193, 44, 15,173, 93,199, 58,191, 43,170,176, 29, 42, 58,144,223, 55,205, 29, 32,199,203,170, 49,210, +201, 72,224, 64,217,139,250, 67,157, 81, 77, 3, 95, 27,221, 86,160, 14,152, 14, 48, 80, 65, 67,237,159, 82, 19, 77,197,222, 26, + 26,229, 14,114,148, 33, 11,145,164,168, 62, 65,161,116, 14, 89, 10, 11,151, 22,159,175,117,206,156, 58,183,246,242,205,209, 35, + 51,183,111,222,186,255, 96, 37, 74,244,144,224,239, 36,209,113, 92,124,249,182,249,248,105,231,197,171,245, 99,211,199,151,150, +174,207,206,204,126,252,220,221,250, 25,154, 28,115,178,125,162,213,244,223,190,251, 96,186,215, 11,231, 47, 62,124,244,100,174, + 61,231,122,141,149,213,103,158,231,223,187,115,247,242,194,226,242,141,229,171, 87,174,117, 94,175,111,124,234,198, 72,115,235, +193,176, 8, 7,163,126,156,135, 81,214,139,178, 56,214,209, 64,152,196, 71,195,222,133, 66,245,142,192,250, 93,177,252, 66,166, + 41,122, 73,166,195,180,223, 79,152,243,200, 11,224,248,110,250, 18,211, 18,113, 12, 18,214, 90, 19,247, 34, 47, 60, 79,250,128, + 41, 23, 87, 44, 38, 69,106, 81, 71,214, 52, 6,246,192,184,119,117, 11,128,127,240, 48, 48, 13,146,175, 80,104, 90,252, 65,198, + 38,109, 73,181,207,196,235,242, 59, 21, 39,100,247,149, 35,148,222, 57,124,168, 76,250,115,124, 78, 3, 78, 13,174,212,140,213, +212,130, 59, 51, 81,167,167,207,134, 73, 72,170,100,248, 93,107,179,103,223,162, 5, 11,151,236,205,164, 25,138,205,120,130,131, +189, 10, 97,199,133,228, 24, 71, 7,145,161,168,166,168,200, 94,141, 35,103,210,212, 18, 4,153,214, 7,107,199, 24,125,233,159, + 96, 7,145, 68, 25,220, 53,219,184,142,139,119,230, 72, 89, 54, 67,254, 46,244,169,164,100, 67, 85,145,182, 46, 74,146,119,158, + 77,127,170,218,121, 92,194,147, 83, 5,159,225, 64,136, 13,153, 8,160, 42,216,113,129, 15,118,176,222,147,108,255,104,163, 95, +101,141,129,153,145,180, 91,100,241, 75,207,220,250,196, 86,132,116, 73, 27,160,227, 99,150,108,135, 91,166, 56,207,112,218, 53, +137,147,216, 92,131,207, 49, 32,157, 0, 30,127, 96, 79,115, 16,197, 88,185, 75,244, 16, 0,212, 20,135,182,240, 68, 60,130, 2, + 14,128, 20,181, 28, 95,212,103,193,240, 13,167,178, 4, 98,157,255,161,224,112,156,197,146,225,232, 18,203, 49, 61,243, 84,112, +112,144,134,117,159, 11,189,219,100, 31,212, 6,157,254, 63,184,155,199, 47, 1, 24,187,154,214,182,129, 32,186,210,234,203, 73, +145, 27,219, 13,105,192, 7, 67,211, 30, 2,133, 66,207,201,239,235, 31,233,181,244,152, 67,161,237, 31,104, 15,166,105, 74,105, +112,161,216,212,137, 99,203,118, 34, 75,187,154,238,204,172,100,153,226, 16, 48, 6, 99, 35,100,118,244,102,118,230,189,183,222, +195,233,201, 80,243,251, 37,242,147,201,225,190, 7,178,160, 13,160,164,186,195, 68,131, 98,103, 45, 1, 10,117, 52,142,103,112, +216,186,107,218,168,173, 44, 76,217,197, 51, 51, 47,110,183, 23, 38, 1, 22,157, 40,190,204, 19, 84,151,101, 43,218, 22,107,238, +206, 17,151, 3, 47,107, 74,114, 95,202,228,118, 6,188, 58, 46,115,174,241, 77, 21,108, 45,160, 76, 60,165, 69,250,245,247, 23, + 50, 73,244, 41, 40, 75,255, 25, 76,215, 68, 9, 43, 27,241, 30, 11,170, 77,105,142,165, 40, 71,188,219, 8,221,222,147,222,249, +240, 66,160, 16,212,203,117,142,210, 90, 71, 14,228, 72,161, 45,175,143,169, 0,141,244, 32, 87, 78, 88,181,240, 37, 54, 46, 19, + 3,171,202,252, 53,103,169,116, 16,160, 5,166,193,140, 56,110,245,251, 63,143,158, 29,191, 56, 58, 62,251,244,121, 48,120, 51, +153, 47, 27, 65, 96,110, 55,144, 94,216, 8, 59,237,199,251,157,118,183,219, 61, 60,124,218,106,239, 53,227,189,211,147,158, 73, + 21,111,223,189, 79, 22,233,143, 95,127, 94,191,122,153,220,102,233,229, 48, 75,179,131, 78,167,127,254,237,121,175, 23,133,193, +217,135,143, 6, 18,174, 38,215,227,241,228, 38,153,253,189,158,174,104, 60, 26, 40, 29,250, 62,243,125,232, 73, 70,175, 30,178, +164, 71,248,114,136,200,126,151,225,174,149, 79, 55, 48, 32,152,229,197, 42,215,145,217,146, 9,174,162,112,162, 65, 58, 50, 64, +197,176,158,214, 35, 4,214,194, 82,145,217,201,143,243,191,180,186,176, 3,246,173, 4,112, 42,126, 93,125, 47,151, 50, 14,227, +249,166,228, 53,215,169, 73,162,174,216, 16,185,193,134, 80, 8, 63,206, 87,211,234,113,170, 44, 21, 13,208,104, 50, 32, 67,189, + 49, 90,200,173,205, 47,145,143,173, 51,185,118, 92,168,136, 49,214, 45,182,228, 4,219, 38,236,197,232,187,192, 42,222,173,137, +105,161, 6,206, 5,125,235, 25,188,168,192, 28,172, 73,157, 45,199,203, 38, 15, 48,216,133,126,164, 85,206,167, 5,212,208, 29, +202, 3, 68,236,149, 93,123,135,182,217,200, 64, 78,199, 24,108,223, 17,185, 53,105, 19,107, 63, 80, 66,110,231,186,124,176, 7, +111,173,203,172, 0, 22,130,209,197, 5,128,127,192, 5, 59,233, 17,133,205, 67, 64,211, 77, 97,135,174, 22,220, 93,182, 30,177, + 12, 28,233,121,108,207,135,245, 82, 57,201,164, 73, 26, 93, 83, 10, 81,121, 98, 32,166,187, 2, 79, 46,144,230, 73,118,168, 75, + 3,150, 38,183,214, 71,144,108, 3, 53,127, 10,203,196,253,214, 65,228,239, 12,174, 6,139,124, 73,220,101,104,238,182,198,179, + 17,119,116, 89,143,136,202, 37, 75,122,135, 50,128,177, 5, 0,101,198,167, 52, 67,138, 56, 1, 59,225,163,184,209, 28,221, 12, + 65,108, 88, 95, 75,100,255, 84,139, 75, 22, 83,181, 2, 31,185,103, 58, 37,127, 75,187, 12,187,232, 19, 57,205,116,122,183, 88, + 57,150, 77,178,149, 62, 95,151,107, 20, 15, 6,247,251,133, 78,255, 4,160,236, 90,122,155, 6,130,176,119,237,120, 19,215, 10, +162, 84,161,129,166, 7,144,106,169, 84, 92, 56,113, 64,192,129, 43, 66,156,185,112,224, 7,113, 68,252, 20, 46,168,160,138, 22, + 81,169, 17, 72,125,241,136, 8,105, 21,104, 20,226,168,241,123,217,153,221,181,157,166, 66,224, 75, 14,113,226, 56,222,121,236, + 55,223,124,243,143,250,192,124,182,155, 67,172, 13, 96,159, 64, 64,198, 7, 6,125,240, 38, 16, 96, 16, 74,193,126, 63,194,149, + 51,151,136, 59,205,139,111,100,138,112, 4,227, 47, 66, 16, 9,227,176,161, 35, 85,225, 37,151, 23, 90, 7,189,189, 20, 54, 65, +169,132,222, 21,133, 22,154,236, 39, 81, 66, 16, 78, 53, 36, 39, 82, 87,254,193,151,123,139,222,110,111,119,117,121,229,176,119, + 32, 41, 49, 69,217, 76, 5, 24,243,250,226,181,238, 73,151,114,153,206, 64,248, 49,181,178,130,183,228, 29, 13,142,253, 96, 20, +165,233,254,209, 33,108, 75, 77,132,251,169, 97, 19,115,144,140,125, 55,166, 17, 19,190,225, 84,220,225, 36,101,160,115,154, 37, +140, 34,197, 11,110,222,177, 45,241,250,236,233, 19,167,230, 62,127,241, 50, 20,238,223,160,243, 23,234,226,253,147,225,112,115, +243,195,131,123,119, 95,189, 94,111, 52,175, 92, 92,104,188,223,110, 95,170,187,247,239,220,126,252,232,225,234,205,181,126,191, +255,110,227,237, 78,187,253,249,107,103, 52,246, 39, 65, 28,194, 64, 35, 94,173, 88,189,227,174, 91,187,213,152,119, 87, 60,175, +213,186,218,108, 94,222,249,248,169,243,189, 51,231, 50, 70,233,250,198,155, 56, 78,196, 82,141, 50,226,176, 74, 77, 50, 25,208, +200,170, 34, 29,181,192, 22, 19,240,134, 4,201, 4,233,169,248, 85,156, 8,151, 45, 44, 72,228,239,226,100,102, 19,219, 52,156, + 10,169,215, 88,154, 88,223,116, 42,133, 90,170,168,193,167,140,111,234, 16,151, 10,227, 64,230,113,252,108,243, 77,177,128, 25, + 76,210, 9,104, 17,218,103, 23,104,241,217,115, 29,253, 40, 28,205,122, 42,146, 59,171, 66, 48,139,231,222,156, 23, 50, 0, 70, +217, 33, 50, 64,171,161,211, 12,139,200,128,210, 88,212,134,109, 59, 48,122,121, 73,113,174, 64, 81,132,207,154, 3, 77,133,223, + 88, 73,226, 58, 78,128,116,162,252,238, 28, 11, 34,170, 57,133,151, 38, 58,153,153,100,220,232, 54, 82, 90, 50, 73, 82,234, 63, +146, 23, 78,147, 80,206, 55, 40, 39,239, 18, 32,214,120,139,162,121, 72, 44, 38, 7,110, 68,252, 37,249, 93,254,205, 19, 20,130, + 98, 84,170,249, 42, 70,178,230,216, 80, 45,246, 46, 21,116,177, 39,144,230, 32, 50, 85,163, 0, 48,143, 87,173,221,170, 48,203, + 13,165, 82,160, 88,146,134,170,181, 82,220, 49,235,202, 23,197,123, 73,193,110, 49, 41,203,228,102,159,160, 36,175, 56, 19,135, +216, 64, 75, 95, 34,123,196,157, 74,245,198,210,218,214,151, 45, 85, 3,204, 52,136,193,101, 44, 5,248,246,199,175, 46, 69,238, + 62, 46, 88,152,241, 52,240,127,170, 65, 96, 74, 97, 56,195, 11,234,198, 93,165,151,199,165, 0, 31, 87,172, 95,116, 39, 8,253, + 70, 81, 52,204,134, 58, 54,168,193, 68,242,153,154,231,185, 92,205,106, 37,227,192,159, 98, 13, 36, 33, 81, 79, 9,254,201,108, +202, 2, 10,147, 57,179,199,205,254, 51,115, 23, 75, 58, 45, 13, 62, 43, 31,127, 4,224,236,234, 86,155, 8,162,240,206,206,236, +236, 38,187,217, 36,196,132,210, 90, 66,241, 5,188,243, 7,139, 88,181,224,155,136, 23,190,152,130, 47,160, 86, 8, 18,170,130, + 5,175, 68, 47,138, 52, 87, 90, 77, 91, 55,217,236,236,116,157,115,102,102,119,155, 6, 5, 33, 55, 73, 8,204,110,118,206,153, +115,190,159,179,236, 47, 70,106, 62,115,110,137,208, 91,144,213, 38,118, 36,119, 32, 15, 53, 98,109,141, 1,115,224, 74, 50,102, + 79,201, 6, 92, 46, 92, 35,255,119, 76,254,198, 42,198,213, 90, 36,149,224, 57,229, 30,229, 13,198,219, 60,140,253, 6,103, 92, + 56, 98,114,118, 52,253,125, 2,152, 24,146, 4,119,175, 63,250, 50,249, 12, 40, 37,230, 93,236, 27,200,192, 15, 49,199, 72, 35, +150, 70, 61,155,198, 1,225,184, 45,212, 25,119,129, 98, 57,128, 73,241,156, 80, 48,108,172,171,213,156,130,206, 30,222, 82,195, +234, 37,215, 6, 91,105,150,170, 63,115,154,252,210, 54, 67, 84,115,108,105,109,192, 84,225,188, 91, 28,249,140,171, 12,158,195, +164, 28, 85,188,184, 1,119,213, 7,170,246,108, 6,196, 99,240,192, 10,225,100,153,124,242,248,233,173,237,157,231,207, 94, 44, +178, 76,229,186,173,225,230,230,213,141,189,209, 88, 45, 97,247,193,253,151,123,111,239,221,217, 94, 95,223,120, 61, 26,171,107, +250,122,248,109,188,191,127,240,225,227,241,247, 31,113,220,234, 15,186, 30, 7, 39,131,217, 60, 97, 84, 70, 45, 96,188, 20, 50, +127,184,115,247,246,141,155,107,253,181, 87,111, 70,239, 15, 62,165,153,152,165, 51,220,143,160,119,189,210,241,186, 29, 63, 14, + 73,212,228,145, 15,144, 41,100,172, 2,220,199, 60, 36, 64,120,142,209,202, 2, 68, 12,155, 10,238,138,200,114,154, 23, 42, 31, + 12, 88,163, 31,168,208, 78, 58, 14, 61,156,156, 30,159,205,181, 41,252,185, 22,155, 97, 85, 27,250, 33, 98,146,117,131, 34,176, +247, 81, 55, 72,174,246, 20, 51,207,146,118,247,229,110,128,199,168, 98,165, 86,251,178,245, 45,249, 55, 99,157, 44, 49, 17,151, +126, 23,249,177,148, 34, 10, 98,145, 11,189, 63,177,172,204,173,103,142, 90, 60,131,138, 19, 24, 62,210,128,254,166,103, 74, 72, +197, 63,129, 21, 11,148,179, 94,148,109, 47,203, 17, 75, 54,176, 38,236,167, 32, 47, 34,151,201,234, 23, 42, 12, 82, 13,129,211, +188,144,115,123, 89,180,174, 72, 34,213, 32, 24, 29,220,169,101, 46, 87,244,152,234, 69,254,250,114,172, 25, 12, 49, 12, 5,109, + 32, 99, 92,218, 13, 24,165, 71,118, 96,153, 75,173,111, 1, 88, 79,187,214,128,213,152, 12,150, 45,123,235, 34,137,109,119,116, + 11, 35,204, 4,119, 2,222,176, 84, 99,170, 46,154,168,226,222,234, 69,221,184,217, 74, 22, 73, 57, 57,170, 82, 51,104, 74,188, +163, 79,136,249,207,228, 4, 3, 37,177,214,189, 22,193, 36, 78,101, 28,139, 90, 39, 61,160,169, 48,148, 47,120, 48,144,100, 45, +135,189,225,116, 54,181,129, 92,215, 34, 54,170, 90, 27,217, 82, 17,169,167,248,169,184, 17,135,237, 76,136, 74, 25,233,144, 85, +221,141, 50, 23,219, 26,139,144, 26,155, 88,150,210,145, 78,163,151,230,243,229, 89, 8,208, 12,148,182,231, 73,254, 15,142, 50, +161,114,213, 87,127, 4,160,236, 90, 86,163, 8,162,104, 85, 63,167,199,113, 34, 38, 8,130,171,184, 15,113,103,240, 15, 92,184, +208, 32,248, 77, 46,197,191, 48,130,139,136, 10, 42,146,133, 15, 4,191, 64,197, 4, 12,102,200, 76,102,210,239,169,135,247,222, +170,234,238, 25,135,128, 3,153,197, 16,154,238,174,170,123,111,157,186,231,156,139,234,247,166,115, 57,137,250,200, 43,195,158, + 25,243,124,232,241,166, 57,145,200,185,234, 5,189, 26,229,247,101,128,172,203,144,153, 78, 38,174, 98,205, 37,183, 14,111,164, + 34,217, 24,149,105,114,123,241,125,119,126, 15, 99,112, 46,196, 80,177, 53, 4, 37, 67, 58, 62,241,123,113,127, 86,206,160,198, +124,243,237,149,116,173,238, 38,183,225, 0, 16,184,166,152,229, 59, 80,192,194,180, 50,201, 78,225, 6,171, 26, 89,157,166,171, + 53,240,195,135,119,238, 63, 59,216,179,144,171,103,142,125,232,196,137,166, 35,252,215,225,232, 16,141, 50,144,189, 97,183,216, +232, 89,199,120, 14,227,193,233,208, 88,243, 99, 57, 85, 49,131, 90, 56, 78, 2,152,185,146, 98, 37, 10,235,248,150,200,139,168, + 78,130, 9,173,200,216,147,167,143,175, 94,217, 72,179, 73, 24, 33,161,227,250,181,245,233,217, 4, 98,205,246,214,214,207, 95, + 71, 89,145, 62,223,127,249,224,222,221, 65, 63,129,199,170,231,242,232,247,232,207,241,201,135,143,159,214,215, 46,223,220,188, +177,179,115,123,119,247, 81, 58,157,190,123,255,250,237,193,103, 33,234,188,202,247, 94,236, 79,102, 41,148,246, 85, 53, 39,247, + 19, 68,246,153,135,175, 29,222, 88,154,169,192, 83,144,143,162,144,104,101, 10,226, 41,228, 91, 40,177,145,252,129, 6, 41,154, +197, 86,160,217, 27,134, 65, 31, 22,161,102,121, 84, 68,138,165, 98,254,227,100,156, 9,113, 86,148, 92,198,165,200, 48, 14, 10, +179, 95, 54,101, 15,254,201, 5,226, 42, 29, 48, 34,208, 19,117, 17,240,127, 90,221, 27,224, 82,215,170,236,134,197, 37,249,108, +125, 97, 63,251,170, 13,105,151, 94,205, 33,148, 23, 85,102,142,115, 27,170,145, 81, 49,115, 58,207, 36, 28,196,120, 18, 67, 76, + 73, 57,133, 16,231, 82,210, 26,239,194, 32, 14,162, 97,138,168,142, 37, 59,120, 11,161,185,173,184, 23,246, 40,244,117, 41, 76, + 74,130, 86,224,194,147,124,220,110,227,219, 50,205,235, 70, 4,186, 22,102,147,237,205, 91, 95,191,127,241,169,150,165,200,165, + 58,188, 1,131,100, 64, 52,220, 24,167, 35, 31,125,189, 8,185,215,206, 19,210,196, 29, 82, 5, 88,189,128, 81, 38,215, 61,156, + 43, 28, 29, 94,172, 29, 73,213, 5,107,235,214,106, 49, 26,191, 43, 28,168,173,209,129, 1, 56, 60,214, 58, 16,154,174, 22, 67, +101,167, 61,177, 54,230,201,102,173,249,198,176,201, 44,186,118,208,160,130, 17,140,182,236, 4,180, 98, 96,198,115, 92,101,186, + 37,240, 82,146,160, 82,200,188,213, 60,199, 90, 77,178, 70, 9, 82, 35, 89, 87, 17,174,104,154, 61,181, 39, 57,189,101, 82,237, + 81,186,241,103, 54, 57, 12,126,136, 3,116,149, 25, 4,253, 82, 84, 66,214,218,154,112, 26,185, 29, 88,228,176,140,148, 57,100, + 37,246, 33,246,188, 65,238,161,170,146, 55, 16,143, 3, 33,148,131, 37,218,148, 13,183, 61,128,169, 85,158,115,238,242,144,155, +252,116, 23,106, 90,156,106,171,189,138,115, 47, 32,121,190,149, 34, 75, 75, 18, 52,255,229, 82,185,244,249, 43, 0, 99,215,247, + 26, 53, 16,132, 47,155,236, 93,146,163, 45,180, 22, 65, 31, 44,138,130, 79, 22, 65,255,231, 82,241,185,248,238,155, 8,138, 15, +214,135,226,111,148,114,245,106,239,146,236,109,178,235,124, 51,187,185, 84,165,250,124,129,228,102,119,103,103,190,153,249,190, +127,227, 51,244, 41,166,109, 88,160, 2,114, 62, 50, 55,223,162, 18, 5,196,112,110,127,220, 40,110, 82,188, 88,117, 43,197,249, + 60,121, 13, 76,177,122,225, 85,160,235, 26,198, 97,214,124,153,191, 16,126,138,152,200,121,105, 86,201, 88,243, 26,129,192,194, + 86, 12,186,216,173,124,251,188,153,167, 48,112,167,177,173,125,164,106,193, 65,109, 16, 72,122,110,161,117,220, 4, 31,176,200, + 80,112,141, 60, 73,180, 44,109,107,158, 60,127, 10,156,141,247, 13, 87,168,240, 88,161, 39,166, 53,120,119,172,245,210,178,129, +111, 29, 6,237,182,203, 45,157, 77, 62,206, 62,241,233, 65,103,216,153, 94, 92, 27,231,101,174,167,185,206, 50,112, 49, 82, 98, +160,179,145,214, 94,234, 83,194,251,135, 96, 87,233,151,175,143, 91,123,108,186, 36, 33,103,108,205,116,115,247,253,231,211,177, +206, 31,237, 63, 60, 56, 60,228,217, 44,119,119,111,239,250,206, 70,219, 89, 58, 1,150,243, 66,138,180,239,221,191,243,248,193, +254,102, 89, 60, 59, 58,122,251,238,228,235,183, 47,203,186, 86,172, 83,243,226,213, 27,107,219, 44, 77,139,137,134, 74,170,197, +220, 7,153,162,162,171,148,199,229, 40,104, 42,114,120, 9,178,201,100,130, 48,205, 41, 7,246,224, 17,192,165,105, 73, 49,125, +210, 53,160, 54,155, 45,205,247,179,249,210,218,139,202, 53,116,237,120, 19,244,207,224,170,171,160,171,192,192, 49,164, 48, 48, + 39, 12,243,214,180, 52,131,122,163,156, 28,233, 91, 87,127,236,185,114,188,177, 88,253,228,174,131, 36,137, 34, 56,195, 73,253, +161,142,135, 28,218, 20,115, 28,174, 15,240, 19,198, 82, 88,182,201, 95,177,165,195,149, 12,209,182,140,125,107, 44, 48,242, 5, +239,124,107,108, 19, 14, 32,162, 72,189,162,196, 46, 34, 48, 62,206, 82,174,133,233,188,187, 96, 28,166,135,128,200, 47,180, 80, + 47,247,129, 70, 38, 73,134,194,238, 17,200,192, 5, 86,217,154,219, 34,179,206,247,189, 24, 65,154,252,214,238,237, 15,167, 39, +201,192, 35, 4,174, 12,156,120,103, 76,163,250, 62, 98, 50,233,101, 14,215,222,110,185, 46, 40,156, 76,179,224,126,163,103, 87, +204,228,242,183,249,128,161,170,158,188, 76,242, 36, 21,137,195,124,164,124, 20,137,157, 72, 62,163, 2,243, 6,167,217, 12, 81, + 11,237,159,156, 88, 63, 28,158,146, 11, 42, 94, 6,146,133, 72, 0,171,250, 89, 39, 81, 85, 14, 67, 81, 1,131, 86,169,175, 87, + 21, 45, 54,204, 5, 14, 83, 32, 51, 50,191,158,178,139,167,232,130,158, 7,102,203,136, 14,192, 24, 32,169, 42,254, 77, 39, 18, +125,208, 24,115,191,229,112,177,112, 42, 83,178, 10, 73,254,124, 49,227,166,254, 81,189,170, 71,131,165, 12,252,239,120,154, 55, +185,139,145, 58,212, 58,153,139,132,139, 15,252,179, 68,150,108,180, 75, 13,174,241,133, 80, 83,112,235,142,193,100,157,169,246, +233,102, 6,199,141, 41,114, 97, 54,228, 38, 28, 59, 12,110,122, 21,192,244, 74, 23,255,255,178,198,191, 4, 32,236,138,149,155, +136,129,168,180,146,238,236, 11, 38,182, 19,146, 20,161,130, 6, 26, 10, 26, 10,126,129,142, 79,165,226, 15, 24, 10, 40, 24,140, + 73, 1, 4, 38,133,141,157,140,115,246,157,101,233, 14,237,174,238,198, 14, 36,148, 25, 79,206,231,145,180,218,125,251,246, 61, +125, 27, 82, 39,121,186,185,125, 81,130, 52, 57,188, 74, 46, 43, 41, 92, 91, 97,167,235,201,105,247, 20,205,143, 92,101,145,150, + 15, 56, 82, 83,193, 58,196,122,146, 82,161, 54, 40, 86, 95,113, 7,240, 16, 41,230,239,216, 79,215, 66,167,160,187,152, 77,194, + 34, 36,170,110, 25, 54, 3, 10,239,209,152, 43,181, 91,248,126,175,137, 42,172,144,144,199, 84,223, 8,163,197, 83, 70,241,136, +155, 62,209,124,151, 55,226,126, 54, 48, 74, 47,109, 78, 50,103,200,180, 15, 15, 78, 64, 31,247,143,174,242,203,199, 39,143,190, + 94,140, 13,232,167, 15,159,140,206, 71, 40,216,111, 76,168, 84,166,215,179, 40, 26, 73, 73,205,247,114, 34, 31,248,161, 73, 19, + 45,162, 75, 13, 96, 67, 50, 60,115,109, 81,209, 34, 81,194,201,202,109, 4,170, 14,160,122,151,162,217,140,176,226, 54, 51,112, + 52, 28,156,157,141, 95, 60,127,118,112,120,239,228, 56,123,253,234,165,119,240,101,252,201, 58,151, 11, 10,200,116,233,148,249, +234,205,187,247,111, 63,126, 8,101,192,226,186,180,133,239,119, 59,189, 44,237,117,196, 96, 79,163,121,119,165,195,109,134, 24, + 58,202,175,129, 13,129,199, 85,138, 86,198,160,252, 36, 46,193, 6,199,107,235,174,134,251, 29,147,105,133, 87,152, 7,239,212, +197,100,177, 40,221,108, 89, 22,228, 80,140,181, 21,225,129,180, 41, 43,182,245,168,176, 34, 72,216,197, 24,175, 58,217, 30, 5, + 33,119,161,143, 91, 68,142, 98,156,180,194,167,149,223,136, 58,109, 20,162,183,133, 13, 16,182, 6,236,198,223,176,231,230,153, + 17,215,148,121,225,207,194,175,254,254,158,104,181, 67,231,141,141, 98,194, 66,172,108, 30, 94, 56, 51,189, 21,249,243,181, 34, + 77,219,236,227,176, 61,200,113, 92,208,128,133,223,125,110, 88,193,148,208, 39, 78, 82,235, 80,246, 57,239,104,132, 85, 59,132, +119,120,214, 2,143,101, 55,233, 28,244, 14,127,206,206,135,123,195,249,114, 78, 84, 81,131, 17, 73, 18,140,143, 26, 69,208, 6, + 83, 38,126,253,152,126,131, 45,165,248, 86, 8,146,210, 19, 57,250,245, 25,120,190,187,174,254, 45,220, 38,229, 60,255, 13,209, +187,152,121, 47,117, 36,177, 72,214, 97,128,255, 74,182, 17,155,221,132,116,135,178,102,252,141, 10,154,115,132,205, 76,150,233, +150, 45, 21,141,187,107,130,236, 30, 5,121,192, 68,147, 51, 30, 26,151,244, 17, 11,191,138, 70, 51, 82,110, 11,209,196,129, 65, + 77,112,188,102,202,188,108,129,139,240,207,137,167,121, 35,230,240,132, 99,190,159,246, 47,139,121,164,173, 73,236, 90, 35, 56, + 72, 81, 24, 26, 7,212,104,125,215,100,199,138,248,219,254,134, 80, 11,215,102, 53,229,247, 4,165,150,155, 50,234,145, 83, 80, + 81,100,185,141, 48, 29, 71,143, 10, 65, 8, 80, 73,190, 94,196,160,143,139, 26, 50,158,216,165, 15,231, 4,193, 73,183,193, 9, + 82, 41,118, 49, 70,140,233,252, 62,133, 45,183, 17,184, 8,237,183,228,242,168,117, 19, 94, 14,145, 92,234,253,200,182,174,106, + 62, 21,173,109,239,221, 33,222,128,225, 89,138,187,173,137,255, 8,192,215,149,244, 54, 13, 68, 97,207, 56,246, 56,206,158, 84, + 74,171, 10,184,114,226,132,196,161, 55,254, 9, 23,126, 44, 18, 87, 4, 42, 84, 72, 20, 16, 75, 40,181,147,184,118,102, 50,204, +247,222,120, 73,160, 72, 81, 14,145, 21,203,242,204,155,183,124, 11,250,239,150, 78,230,206, 68,168,145,207,105,246,134, 20, 29, + 77,157,186, 83,201, 48,242, 80, 91,151,222, 84,139,100,206,121, 48,113,137,224,187,205, 13, 60, 62, 31,120,117,112,202, 14, 27, +103,204, 98,161,244,174,100, 28, 71, 42,141,210, 65,148, 74,138,189, 95, 54,159,239, 76,225,118,108, 86,100,154,165, 65,131,218, +183, 37,176,131,100,224, 34,152,173,149,237, 60,158,158,210, 6,166,194, 6,108, 82, 93,219, 66,162, 53,108, 32, 63,196,163,252, +105, 58, 9, 97,182, 33,220,171,221, 22, 27,139,239,173,133,184,144,184,113, 39, 60, 26,244,246,116,118,166, 65,130, 53, 76,225, +230,123,185,199,201,195,141,118, 49,209,132,112,163, 46, 3, 99, 2, 66,198, 0, 93, 94,149,200,113, 93, 52,143, 99,184,147, 40, + 21, 70, 42, 80,177,132, 98, 65, 34, 93,128,126,246,244,201,155,119,111, 31,158,159, 47,151,167,147,209,116, 62, 63,153, 79, 96, + 50,121,121,245, 17,204, 59,204,164, 65,229,194, 66,223,139,108, 13, 91,225, 65, 26, 71,253, 36,211,230,199,122,123,125,179, 89, +229,229,186,218,233, 18,185,142, 36,209,117, 88,209,146,121, 21, 50, 44, 23,158,132,232, 7,114, 40,197, 44, 82,203, 56,237,237, +100,158,217,252, 54,122,255,253,246,242,107,241, 97,245,251,215,182,202, 81,116,112,131,141,137,193,150, 16, 53,123,230,247, 97, +148,109, 2, 56,163, 2, 78,230, 74,147,196,157,115, 26, 94,225, 94, 70,245,255,149, 34,222,142, 26,239,140,230,193,209,139,231, + 47, 95, 95,189, 26,134, 35,109,171, 46, 66,192,214,225,230,232, 76, 24,170, 49,177,138,188, 72, 89, 36, 34,235, 71,244,226,144, + 52,107, 85,216, 7,238, 5,166,143,238, 21, 69,194, 59,158,227,166,186, 81,251,162, 82,170,209,198, 96,101, 17, 18, 68, 34,199, +230,127, 24,238, 72,183,195, 53,217, 49, 34,240,185,216, 19,246, 8,245,104,199,201,180,216,173,217, 42,215,101,117,253, 56,117, +203,252,103,254,141, 64,141,119,188, 55,112,177,239,156, 11,234,174, 88, 91,215,232, 15,102,143, 92,205, 46, 15, 72,164,194,182, +156,215, 22,126, 94, 23, 25, 45,253,187,245,169,111,194,174,119,222, 0,138,116,212, 31,185, 5,225, 5, 26,239, 17,187,105, 0, +146, 33,205,169, 84, 47, 50,123, 77, 30,188,196,234,103,200, 23, 42, 63,172,253,152, 61,144, 41, 22,247,200, 64,134, 54,169,100, + 73, 15,154, 86, 5, 94,116, 0,215, 32,238, 75,214,122, 10,188,105, 19,245,217,201,247,195, 91,206,132, 4,145, 36, 75, 62, 22, +130,146, 33, 15,183,124,235,143,119,183,167,145,138,147,201, 60, 43,114, 26, 71, 16, 20,213, 75,182,225, 33,106, 1,185,189,111, +189, 81, 25, 64,136, 22,140,200,204,161, 44,146,187,239, 98,184,216,148,107,247, 47, 23,143, 47, 62,173,174, 73,192,152,139,175, +125, 67, 76, 13, 61,131, 19, 63, 67,234,201, 84,169, 74, 49,166,110,112, 58,146, 7, 1, 72, 43, 71,201,212, 69,255,218,152,184, + 99,238, 25,136,229,228,108, 91,174, 91, 29,159,131,105,102,171, 27,212,164, 26, 44, 6,119,196,123, 18,199,230,127,226,111,166, + 72,247,147,200,216,116, 76, 43,239,155, 90,253, 17,128,175, 43,219,109, 27, 6,130,162, 72,137,162,175,216, 70,144, 62, 52, 65, +209,255,255,148,246, 19, 10,180, 64, 31,130, 4,177,128,196,178, 36,235, 32,187, 59, 43, 9, 82,147,246,217, 48, 45,209, 60,102, +103,119,103,216,223,131,102,108,159, 29, 41, 44,197,158,137,231,169,177, 89,115,202,148,133,144, 78, 7, 5,156,174,216,108, 46, + 64,127,198,100,247,235,123, 40,118,181,172,165, 31,112,246, 40,238,144,129, 13, 71, 0,153, 16, 65, 90, 11,107, 45,214, 86, 67, + 16, 87,219, 93,182,221,103, 59,199,230,229,254,251,243,183, 62,234, 26,198,190, 45,247,161,128,205, 4, 19,220, 79,161,133, 28, +220,147, 21, 1,132, 50,144,186, 9, 70,132,141,104,244,100,112,171,134, 46, 15,114, 59,116,139,208, 32,244,233,193,221,212, 77, +201,105, 31, 10,215,227, 20, 18,163,154,215, 61, 10,155, 52,159,177, 1,228, 50, 55, 53,247,104,160,166,191,248,180,125,174,215, + 77,172, 18,103, 76,221, 5,155,208, 87, 2, 16, 52,243, 36,146,104,200, 44, 1, 67,159,104,100,175,184, 61,151,181,143,104, 26, + 30, 62,223, 61, 62,229,116, 13,212,157,151,140, 13, 65,100,163,141,115, 54, 47, 61, 65,254, 26, 71,233,149,213,191,212,107,213, +208,156, 58,155, 90,107, 44,133,175,198,191,149,109, 93, 53, 4,219,185, 86, 81, 43,199,170, 40,126, 3,173,121,231,227, 93, 98, +191,108,217,123,254,173, 13,165,239, 79, 85,115,174, 56,132,152, 28, 84, 99,184, 24,166,202, 93,186, 98,144,242,241, 52, 83,174, +234, 74, 15,215, 3, 54, 26,100, 49,226, 8, 6, 8, 17,123, 80, 66,142, 24, 90,123, 1, 88, 71, 14, 29,238,118,218,218,155, 75, +115, 94, 30,208,129,121, 97,138,166,253,224, 68,218, 70,189,102, 36,238,211,153, 12,145, 44, 40,163,109, 75,247,247,200,205, 76, +171,235,225,248,245,119,254,107, 28,208,187,100, 83,183,151,127,213,206,251,143, 64, 13, 97,133,214, 95,163,209, 79,113,149,174, +233, 85,235,174,148, 75,154, 2, 39,130,192,152,145,247, 85, 60, 65, 20, 2,194,232, 36,204,250,192,190,137, 39,251,217,104,112, + 9,160,183, 70,221,189, 45,175,151,165,224,215,224,246, 37, 15,150,178, 45,148,111, 7, 86,103,150,195, 27, 31, 27, 43,109,241, +251,116,153,187,212, 21,213,235, 84, 25, 57,223,119,178,218,193,108,134,209,158, 94,161,115,105, 97, 23,255,183, 75,247,180,109, +199,234, 28, 65,215, 26,201, 84,233, 7, 84,122, 70,164, 8, 42,130,252, 60, 24,115,105, 50, 71, 41, 49, 10, 64,164,226, 12, 14, +212, 67, 86, 98,176, 73, 8,232, 34,225, 19, 92,206,113,236, 56,165, 82,190, 44,164,103, 85,220,227,227, 65, 67,152, 43,151,252, +221,254,147, 49,250,199,211, 79,176,154, 93,195, 40,131, 21, 65, 58,223, 31,118,199,151, 34,175,155,107, 23,196, 90,155,161, 71, + 63,181,176,131,172,103, 86, 93,168,153, 56,204,149, 27, 2,103,197,244,202,110,242,203,233,184,190,165,120,174,168, 10,122, 27, + 10,221,232, 70,164,167,200,207, 47,172, 37,207,110,150,134, 34,182, 17, 98,243, 88,116, 22, 49,129, 3,210, 74,170,199,104, 13, + 31, 86, 7, 86, 45, 84, 44,169, 45, 1,148,159,229, 38,233, 89,204,187,191,120, 94, 3, 19,162, 5,162, 25,185,123, 9, 11,134, +251, 38, 90,106,139, 74,234, 32, 6,223,168,102, 94, 34, 31,142,255,255,110,139, 63, 2,240,117, 45,187, 77, 3, 81,116, 60,182, +199, 14,129, 86, 34,128, 64,233, 2,248, 17,126,130, 29, 95,216, 21, 63,193, 63, 32,177,132,118,209, 82, 81, 22,113,236,218, 51, + 30,238, 57,119,156,216, 41,170, 20,101, 97, 37,118, 50,190,190,115, 95,231,156,228,223,103, 37, 59,187,180,149, 44, 91,154,218, +161, 67,204, 66, 5,172,130,204,225,240,171,133, 41,222,173,182, 46, 43, 64,224, 16, 21,112,172,149, 92,210,155,192,107, 74, 22, +140, 13, 92,182, 72,112,193,231,245,202,186,202, 33,120, 7,131,115, 81,221,117, 55, 63,238,191,139,113,180,192,164,120, 14, 7, +166, 30,184,188,175,171, 23,237, 67, 67,144, 50, 91,248, 58, 12,144,240,168,150, 84, 32, 12,169,153,222,129,167,203, 22, 32, 2, +123,243,241,234,246,151,203,179,237,203,139,191,205,189, 60, 88, 98,130, 23,155,237,186, 94, 93,223, 93,193,191,211,226,229,247, +125,249,244,249,242,219,215, 68,140, 0,155, 19,119,138, 89,171,145, 69,154,177,236,111, 95,223,236,154, 92,146,129,169,238,104, +148,217, 82,123,119,112,154, 5,180, 54, 12,212,248,144,220,186, 18, 40, 91,128,128,108, 9,104, 4,131, 8,185,220,186,198,122, +185,210,122,111,127,239,123,201, 68,247,131,111,186, 97,215,246, 64,156,154, 80,178,186, 66, 9, 97, 88,110,219,245,100,152, 65, +174,208,245, 99, 94,149, 76,228,229, 97, 24,100,183, 40,188, 57, 71, 61,223,189, 61, 63,115,220, 91,236, 88,180,161, 1, 69, 39, + 71,195,216,197,135,200, 1,177,218, 98,142, 85, 23,154, 64,212,163, 55, 42, 94,108, 24,204,147,205, 3,119, 75, 99,171,200,129, +171,132,137, 15,201, 75, 4,179, 16, 33, 74,131,224,207,235, 51, 89, 15,137,152,100,155,223, 15,205, 20, 73,132, 19, 84,222,161, +180,114, 16, 62,204,141,243,102,224, 64,186,231,241,196,120, 46,247,238, 33,180, 75, 92,223,255, 51,208, 25,217, 81,174,103, 32, +162,164, 22, 39,211, 66, 77, 80,255, 66, 60, 70, 44,167, 34, 57,137,218,250, 48, 32, 63,255,176,205,236,226,114,241,216, 60,120, +106,216, 65, 69,127, 40,217,123,162,165,164, 61, 58, 87,148,226,197,178, 41,141,160,162,104, 78, 64, 79,124,196, 19, 57,137, 99, +164, 40, 62,110,158,189,218,117,205, 24,147,114,200,130,249,108,233,214,167, 98,191, 86,217, 25,151,197,152, 4, 48, 41,180,145, + 27,173,140, 27,198,215,169, 13,138, 96, 28,232,115,245,216,200,134, 77, 42,191, 43,249,132, 50,100,179, 17,154,150, 74, 25, 28, + 57, 80, 23,121, 6,176,228,193,173,163, 28,202, 27, 10,124,211, 76,113, 59,163,144, 14, 94, 25,199,117,201, 92, 45, 6,224,105, +133, 18, 29,202,201, 58,223, 13,163,135, 86, 1, 81,202,100, 10, 99, 97, 17, 90, 54,248, 46,103, 25,151,108,165, 90, 91, 96, 89, + 53, 16, 6,233, 74, 39, 87,223,245,123,157,197,128,135,198,211,224, 45, 16, 45,189, 4,151, 32,157,198, 84,101, 96, 15,118,212, +253, 91,142, 52,125,171, 1,246, 72,249, 86, 9, 54,181,195,145, 41,194,109,210,114,154, 89,224,163, 17,129, 84,155,209,148, 49, +139,203,164, 53,206,104,247,226, 17, 54, 49,111,183,152,170,172, 90,194, 9,227,169,247, 79,254,253,253,230,195,245,159,159,225, + 73,154,250,127, 2, 16,118,109, 59, 78,195, 64,212,174,237, 56,105,170,180, 32,202, 10, 16, 66, 60, 33,241,255, 63,194,242,130, +128, 71,164,221,133,210,221, 54,105,220, 92, 28,239,204,216, 73,154,150, 10,245, 37, 82,147, 38,109,199,227,185,156, 57,103,162, +207,199, 47, 4,189, 60,215,156,156, 10,151, 4, 41, 22, 22,166,144, 73, 82, 21, 3,121, 63,234,118, 19,191, 94,170, 85, 94,151, +198, 54, 2, 29, 58, 26,132,151,125, 0,207, 53,115,100, 86,142,118,120,165, 33,210,209, 50, 73,163, 52,149,177, 96,221,151,237, +173,105,242, 44, 93,110, 14,155,198, 86,216,117, 68, 25, 27,218, 59, 7,113, 26, 62, 14, 85,207, 66, 71,104,212,246,197,220,208, +145,101,249, 66, 16,231,177,136, 16,203, 8, 54, 7, 47,170,224,135,224, 2,249,116,185,198, 32,158,202, 56,109,183, 72,230,135, +170,132,119, 73,172,221,145,106, 79,187,154,191,220,150,143,144, 73,128,147,110,162,226, 94,237,143,152,155,144,196, 7,181,248, +153,243,131,114,129, 23,147,178, 90,169, 53,143, 53,238, 61,200,203,216, 33,229, 58,124,207, 8, 37,196, 33,198,103, 11,141,237, +155,166,226,251,131,200,177,232,131, 59, 9,184, 83, 83, 53,149,109, 43,107,231, 90,164, 26,233, 61, 32,133, 1, 51, 47, 13,234, +139,193,229,240, 76,166,129,205, 2, 83,135, 22, 9,147, 61, 5, 54,228, 16,181,169,170, 34, 71,182,157, 84,105,184,118,165,147, + 37,164, 70, 56,110,198,149,211,198, 22, 84,135, 65,216, 17,119, 18,178, 8,239,190, 61,145,155, 96,210,116,198,179, 54, 99,148, +110,109,170,179,178, 46,224, 99,125,244,238, 60,190, 97,226,170,130,236,100,162, 18,162, 80, 15,118, 47, 66,179,116, 50, 95,237, +174, 96,121, 41,240, 87, 62,205,100, 39,188, 40, 33, 48, 98,161,169,197,123, 85, 69, 92,126, 92,213,174, 98, 35,204, 27,159, 65, +226,109, 85, 18,197,121,181, 63,163,153,188,166,122,218, 99, 90,102,108,196,128, 96,131,253,102,249,246, 97,119,151,197, 43,136, + 6,190,223,125, 59,197, 34,123,122, 57, 37,117,211, 30,217, 80, 70, 57, 89, 25,252, 95,248,229,115, 82, 26,161, 8,120,218, 12, +133, 89,223, 70,186,246, 19, 81,251,115,226,223, 49,191,116,164, 55,217,251,119,242,190, 51,162, 92,237,219,203,189,220, 7, 21, + 80, 92,104,108,162, 2, 9, 85, 84,169,112,138,225, 24, 4, 34,196,191, 40, 57, 30, 83,176, 45, 40,157, 13, 50, 23, 30, 21, 41, + 66, 77, 91,216, 0,101, 69,228, 10, 24,114,221, 30, 3, 44,177,235,229,250, 24, 5,239,195, 2,100,130, 4,244, 2, 68, 50, 12, +195,178,224,235, 96,237,120, 62,106,138,205, 49,131,108, 41,120,111,104,229,225, 65,231,222,175, 63,252,188,255, 1,183,163,172, +119, 6, 89, 46,182,146,209,136,113,103, 16,164,205,212, 19, 12,162,153, 46,226, 20,124, 58,220,238, 97,247,135, 35,242,213,174, +211,181,233,142,187,242,105, 49,207,108, 93,195,147,230,102,255, 42, 91,111,138,223,159,222,124,254,250,235,214, 35,185, 41, 81, +109,223,189,248,248,104,254,250, 81,252,109,249,212,147,177,187, 46, 72,123,143,168,251,179, 17, 36, 62,120,224,222, 12,224,124, +200, 33,164,140, 48,166,228, 3, 87,245, 37, 60,120,252,235, 79,164,181,252, 8, 4, 27, 52,181,221,133,194,251,127, 49,242,254, +180,103, 1,248,186,186,222,166,129, 32,104,159,125,113,156,164, 38, 69,162, 68,240, 80,120, 71,202,255,255, 17,133, 63,128, 16, + 66,160,170,129,126,208,226,218,103,159,239,216,217,189, 75, 28, 19, 33, 85,121,105, 20,199,206,222,222,236,222,206,204, 36,191, +167,255,212,122,233,100,130, 45,180, 68,163,153,181, 98, 80,202,251, 51,143, 60, 50,122,174,242,179, 77,177,161,188,211, 88,116, +124,153,194, 58, 32,142,240,224, 40,145, 83, 0, 80, 18,166, 80, 40, 10, 13,215,104,141, 70,141,250,246,244,249,230,249, 6, 12, +143, 4,178,111,200, 96,162,255,239,133, 88, 44, 49, 23,197, 84,185,133, 34,174, 1, 8, 37, 31,108,124,233,123,129, 0,157, 99, +106, 81,242, 56,220, 76,149, 90,149,171, 55,213,235, 31,247,215,180, 11,109, 47,183,119,143,183,247,127,110, 81,130, 72, 33,138, +195,167, 96,234,200, 84, 32, 80, 60, 59, 10, 55, 69,153,110, 85,247,181,112,113, 81, 80,229,174,173,234,199,153,193,125,131, 50, +157, 74, 51,138,226,147, 22,133,220, 44,215,155,142,125, 59,216,196, 3, 2,102,153,164,167,129,221, 75, 9, 19,100,202,149, 69, + 65, 43,175,133, 58,198, 48,131, 10, 15, 18,107,231,187,214, 58,186, 77,237,117, 59,164,176,144,244,137,177,157, 49,150, 62,162, +200, 17,141,142,189,227,251,158, 96,142,167, 61,138, 30, 87,223,117, 4, 89, 58,139,191,166,177,191,155,190, 54, 24, 62,211,202, + 87, 89,161,172,158,165,233,122, 14, 52, 35,165,137,101,117,112,110,202,176, 36,153, 19,213, 15,244,110,224,181,141,142, 26, 85, +208, 92,197,138, 7,165, 15, 94,148, 46, 18,255,170,121, 85,155,122,143, 29,210, 41,229,122, 56,182, 33, 62, 13,113, 5,254, 45, +195,192,226,120,243,240,204,252,246,235,197,249,187,139,247, 31,191, 94,209, 79,127,177,124,245,179,222,149,122,201,160, 38,100, + 26,218, 30, 8, 31,212,124,166, 26,101, 73,255, 47,216, 55, 29, 61, 24,203,120,241, 17,253,254, 32,234,128,223,195,129, 45, 15, +104,231,121, 78,193,137,131,154,196,211,165, 91,251,188, 44, 94,208,243, 30,159,140,142,148,129,125, 50,181,234,150, 81,118, 92, +229, 37,143, 60,166,251, 53, 61,253,134, 42,168, 45, 5, 77, 63,117,240, 63,245,194, 97,136, 30, 26,225, 46,124,180,254,101,127, + 61,153, 87,247,172, 18, 32, 22, 14, 89,166,217,149, 24,152, 58,135,124, 16,189, 2,247,100,180,235,228,130, 75,152,189,138, 33, +201, 18,239, 21,123, 28,149,196, 10,128,214,138, 97, 31, 83,108,250, 3, 55,195,161,200,193, 77,116,172,143, 44,227, 73, 1, 57, + 77,197,231,241,210,204,246, 44,167, 56, 73, 46, 41,211, 50,177,130,235, 54,129,231, 78,154, 51, 22,138, 95, 3,122,179, 56,223, +132, 36, 36, 93,142, 0,206,135,203,237,167, 47, 87, 92, 21,137,130,129,223,172,223, 94,223,125, 23,114, 64,140, 64,148,163, 82, +113, 84,229,250,201,212,221,208, 10,129,137,109, 85,157,214, 5, 97, 56,110, 53,130,195,221,195,150, 82, 28, 42,177,102,233,169, +157,205, 43, 2, 10,187,135, 29,225,177,186,111,147, 48,225, 29, 49,206,209,239,235,198, 77,194,133, 94,152,193, 12,135, 48,144, +229,130, 65,206, 64, 22, 30, 3, 29,127, 76, 56,147,238,103,168,107, 93, 18,185, 26,242,239,170, 60,127,104,126, 73,247, 47, 61, +205,174, 58,209,177,145, 55,253, 21,128,176,107,217,109, 34, 8,130, 51,179,111, 59,107,227, 56, 78,148,228,150, 19, 23, 68,196, +129, 3, 95,207,129, 63, 64,144, 27, 8, 4, 66, 65,198, 78,252, 90,143,247, 49,116,117,143,119, 45,108,137, 40,135, 40,209, 90, +206,120,166,167,250, 81, 85, 93,124,215, 39,101,172,247,160, 36, 56,216,160,218, 59,163,225,135,144,217, 10, 98,178, 14, 70,131, +227,113, 67, 67, 65, 37,186,205,110,179, 48, 45,189, 8,156, 52, 99,205, 94, 24, 58, 25,196, 73,233,162, 60, 77,123, 38,161, 29, +243,105,246,176,114,139, 48, 8,231,235, 25,238,115, 10,241, 4,235,188,214,123, 51,204, 70, 5, 84,255,109,171, 85,205,172, 66, +109,188,142,159, 84, 14,213,184,127, 94, 55,118,187, 43, 81,242, 3, 12, 49,160,151,250,150, 17,229, 93,200, 25, 67,214,119,166, +213, 64,232, 55,241,155,187, 87,159,191, 63, 68, 38,124,247,242,237,251,143, 31, 0,222,121,152,243,254,238,245,183,223, 63,158, +182, 11,168,139,112, 89,181,226,171, 91, 20, 44, 85, 80,149,163, 98,169,232,141,195, 32,187,172, 42, 90,130, 4,189, 8,216,177, + 2, 89,163, 24,205, 57, 71,173,138,186, 9,124, 43, 90,179,157, 36,140,100,105, 85,110, 38, 23, 17,197, 91, 84,114, 32, 86, 83, + 20,205,218,110,215,187, 29,237,210,188, 31, 77,242, 44,146,113,117,180,112,107,187,173,144, 71,243,175,214,150, 80, 72, 92,112, + 31,148, 2, 62,189,154,181,150, 94,102, 67, 55, 18, 4, 31,161,243, 14,136,131,115,172,210,164, 49,177,219,172,213,124, 85, 85, +182,201, 84, 48, 8,240,239,247, 76, 72, 23, 12,125,128, 27, 87,128, 37, 92,107,152,224,224,216,225,217, 26, 14, 9,248, 24, 36, + 33,246, 21, 50,134,146,245,190,136,145,133,153,148, 47, 83, 78, 36, 91,181,247, 99,113,164,182,128,184,199,227, 74, 31,149, 13, + 15,131, 32, 4,146, 53, 93,111, 5,159, 16, 63,155,145,198, 61,187,243,134, 68,251, 32,222, 82,138,252,182, 36,196,196,124,153, +147, 52,111,105, 91,185, 28,148,241,101, 75,198, 20, 35,239, 28,244,212, 69, 28,166,121, 50,156,173,167, 29,185,175, 19, 81,192, +245, 28,199,177, 24,206,180, 51,162,142, 25, 21,236,149,170, 15,135, 85,134,189, 23,207,197,147, 62,146, 25,233,132,142,165,142, +208,130, 54,119,196, 74,119, 18, 89,221,120,112, 57, 95,254,209,135,241,157,151,250,106,112, 61, 93, 61,118, 28, 2,237, 9, 83, +236,103, 35, 7, 83,115, 47,193,136,200,111,196,156,210, 40, 12, 35,238, 60, 81, 58, 24,195,149,212,247, 66, 83, 8, 81,235,145, +137, 46,243,228,162, 31, 76,206,226, 44, 2,183, 3,224,200, 40,200, 25,237,234, 85, 81, 63,111,213,220,186,231, 66, 79, 45,134, +106,185,157,206, 80,156,237,105, 27,241, 74, 83,222,164,201, 19, 89,157,145,152,208,142,187, 9, 94,166, 63,222,140,174,191, 60, +126, 85, 92,231,196,174, 83, 28,223, 57,202, 75, 65,166,100, 29, 25, 91,239,232,219,155, 67,104,137,184,194, 74,197,242,157,101, + 57,101, 69,115,192,228, 46, 19, 18,149,217, 70,180, 82,184,100, 14, 29, 90,140,157,241, 4,179, 86,251,168, 45,129,187,153, 12, +174, 86,118,185,177, 27, 86,174, 69, 73, 21,251,173, 44,248, 89,233,150,243,196, 55, 83, 90,219, 34,138,211, 93,222,121,132,179, + 93,135, 57,124,182, 40,144,252, 95, 71, 4,145,105,162,163, 65,112,225,188, 55,254,181,248,201, 85,181, 64,204,190,157,127,202, +157,116,177,255,239,215, 95, 1, 24,187,154,222,166,129, 32,234,181,189,235,196,105,154,180,165, 34, 10,109,175, 61, 32, 33, 33, +241, 19, 16, 7, 78,252,205, 30, 56,240, 39, 56,113, 65,170, 4, 7,132, 56,160,138,150, 32,112, 29, 39,177,119,237,101,222,140, +183,233,135,144, 80, 47,109,213, 86,105,108,207,190,153,121, 31,125,125,127,216,198, 42,117, 31,230,132, 41, 77,220,115,149,250, +129, 90, 34,197,158,153, 90,106, 58, 58, 88,173, 74,222,189,163,203,153,234,221,163,209, 28,166,172, 45,112,161, 97,142, 59, 29, +140,131, 4,105,210, 17, 50, 49,116,101,175, 63, 46,206, 55,160, 57, 71,214, 55,147,157,131, 69,113,229,162, 70, 8, 78, 62,164, +174,136,122, 34,238, 37, 33, 76,153, 98,226, 47,138, 55, 11, 16, 38,217,110,194,238, 22,224,115,211,177, 76, 53, 34, 65,135, 72, +197, 66, 83,113,167,219,154, 62,225, 61,254, 36,223,157,237, 61,254,126, 9, 77,211,132,112,104, 83,209,177,148,153,193,186, 94, +159, 30,157,254, 40,174,126, 45, 23,142, 53,217, 98, 26,205, 89,191,214, 98,139,132,145, 56,221, 88,179,233,188,172,139,206,212, +101, 86,194,176,203,182,138,165, 10,141,197, 25, 76,101,118,152,197,153,166,202, 11,173,228, 10, 57, 5, 62,136,103, 9, 83,227, +156, 27, 38,201,163,124,120,213, 53, 29, 91,245,121, 24,243,182, 21,189,148, 6, 69,150,106,251,124,154, 79,198, 73,170, 65, 96, +183,206, 91, 36, 5,131,224,149,153,132, 30,165,198, 69,229,146,192,135,134,138,149,110,195,149,229,119, 28,220, 26,234,142,168, + 58,215,206,215,120, 68, 34,109, 34,234, 19,172,133, 0,138,142,168, 77,221,137, 85, 22, 53, 86,206, 54,166, 77,119,210, 56, 79, + 77,110,140, 28, 84,141,229,176,121, 54,225, 70,149,119, 24,200, 99,158,150,152,181, 68,222,120,153,156, 80, 5, 73,157,119, 15, + 55,159,130, 69,238,102, 57,133,145, 98, 58,156, 77,143,191, 46, 62,211, 69, 28,233,113,101, 75,245, 79,251, 35, 21,132, 33,219, +205, 16, 19, 96,224,194, 90,246,120, 95,221,171,155,108,245,140, 45,107,134,144, 22,188,253, 58,201,109,187,209,160,226, 57, 94, + 93,246, 57,186, 55, 97, 70, 80,108, 36,250,201,254,201,183,159, 95, 66,204, 75,226,239,206, 52,251, 16, 59,129,182, 91,168, 20, +223, 78,252,136, 2,241,151, 67,115, 25,179, 9, 92, 21, 81,129, 16,232,152, 97,153,233, 12,142, 61, 16,100,222,156,124,173, 10, +222, 10,106,107,160,102,232,123,176,127, 8,143,216, 54,139, 67,162,211,120,144, 24,135, 45, 84,212, 7, 27, 97, 0,154,242,215, +146,177,164,241,136, 0,173, 19, 78, 55, 88, 55, 17,246,130,122,143, 49,123,108,148,222,215,233,108,172, 79,166,249,241,161, 57, +152,100, 8,113,230,177, 51,195,100, 40, 93,188,200,152,101, 76, 17,177, 23, 99, 27, 93, 47,221,197,159,238,178,208,139, 58, 90, +212, 54,230,145,178,239, 67, 2,197,147, 56, 22,230, 5,107, 86,227, 48,184,216, 74,142,195,130, 78,208,127, 39,195,119,180,237, +124,165,128,226,209, 95, 90, 42,253,185, 25,190,124,254,234,236,253,153,247,194,122, 8,101, 1,155,216,195,162, 42, 28,156,120, +149, 80,163,100,101, 73, 63,178, 55,222,255, 93, 21, 72,127, 99,186, 24,253,226,208,140,186,214,174,152, 33,218,219,140,243,255, + 40, 83, 23,134, 18,160,193, 83, 47, 77,231,222,198,210, 99, 93,247,163,155, 48,158,244,210, 54,121, 69,127,106,221,172, 6,233, +160,106,150,183,147, 15, 8,235,108, 44,174,172,209, 3, 58,213,170, 62,231,175,227, 15,246, 91, 84,234,254,116,197,119,175, 95, +188,121,247,225, 45,245, 84, 46,114, 79,231,207, 62, 93,156,135, 56,239,109, 60, 89,191,116, 69, 25,102, 77,238,255, 85,249,191, + 2,208,117, 45,203, 73, 4, 81,180,231, 61,204, 16, 36, 60, 12, 65, 99, 54,198,111, 72,249,225, 86,185,114,161, 11,183,254,128, + 86,202,128, 4, 34, 33,192,192, 60,122,166,189,231,118,143, 76,208,164, 42, 83, 44, 72,120,116,207,125,156, 62,247,156,255,196, +119,235, 25,111,109,167, 57, 58,136, 30,205,137,130,150,107,187,155,221, 26,157,157, 18,124,182,231,131, 36, 35,128, 35,116,227, + 46, 76, 14,149,104,123,237,113, 60,166, 43, 85,124,190,237,107, 59, 37,122,151,203,244,254, 87,114,255,152, 62,224,126,224, 49, +113,179,180, 16, 13,231, 86, 75,135, 11,165, 77,216,235,217,107,206,210,157, 86, 7,116, 37,248,126,241,102,174,212,184, 63, 78, +246,155, 28,130,250, 40,168,152,233, 5, 33,120, 14,235, 80, 51,134, 14,175,227,250,240,203, 67, 57,175,105,185, 20, 44, 4,244, +231, 64, 73,172,248,175, 36,163,130, 5,164, 93,165, 70, 39,138,170,120, 51,184,184, 58,191,250,240,237,163,235,121, 37, 78,122, +219, 89,153,166, 50,167,125,219,234,200,120, 72, 91, 38,203,115,181,195,185,178, 74,169,172,149, 10, 64, 38,196, 0, 4,100,175, + 97,118,234,122,244,176,210,248, 38,171,247, 8,251,211, 98,234,250, 62, 64, 78,174,117, 50, 89, 20, 96, 31,149,113,232,157,117, +163, 86,232,176, 33, 22,107, 86, 11, 25,120,118, 59, 10,109, 20,212,249,104, 52,186,126,127, 61,236,247, 62,127,249, 74,153,232, +251,205,207,201,237,173,235,249,236,155, 93,166,153, 76,246, 50,231,122, 39, 8,172, 0,100, 77,106,207,149,231, 9,106, 15, 50, + 41,182,137,216,236, 42, 45,110,179,167,140, 66,159,182,144,177,235,132, 20, 14, 88,120, 13,148, 82,250,133, 16,183, 98, 80,158, + 79,166,204, 4,185, 48,162,205, 13, 10, 23,147, 35, 79,178,124, 71, 29, 4, 5,141,113,119,116,179,252, 97, 31, 23,233, 70, 59, +196, 50, 7,179,205,112,166,142, 88, 98,161, 23,165,197,142, 94,162, 19,210, 66,211, 46, 42,105,231, 12, 78, 6,147,199,137, 14, + 21,212,123, 81, 59,172,229,201, 84, 61, 0,113, 26,245,182,251, 21,103, 29,214,221,109, 30, 59,170,227, 66, 94, 99, 47,244,159, + 41,232,229, 90,185,247,232, 52, 85,136, 90, 11,204,152, 52,214, 44,141,102,100,175,201, 27, 22,243,227,169,196,137,250, 20,121, +127,111,230,134,255, 12,144,171,188, 28,188,157, 61, 78, 51,185,167, 64,113,222,125, 53, 91, 78,109, 30,123,160,180, 25,123,241, + 58, 93, 61, 85, 15,212, 35,166,214, 97,232, 74,212, 34, 47, 6,159, 81,168,197,117,190, 81, 44,236,197,101,187, 62, 44,165, 54, + 15, 1, 29,165, 57,117, 66, 84,170,195,227,133, 74, 43, 40, 85, 88,116,165, 93,232,209,173, 58, 10,252,215, 47,226,119,103,225, +197, 48, 14, 2, 71, 3, 9, 88, 33, 13,248,224,194, 19,166,156,171, 24,247,192,169, 20, 93,169, 44, 0,150, 34, 43,125,157,175, +197,221,202,157, 37,238,170,168,114, 89,154,169, 81, 80,126,209, 64,170,167,210, 8,127, 23,220,240,157,193,138,212,233, 3, 38, +156,146, 5,125, 1,207, 50, 68, 72, 15,227, 8,140,219,197,122, 94,177,149, 27, 27, 82, 27,167, 61,131,209,152,142, 16,111,218, +228,100,134, 81,244,189,204, 42,114,120,206,105,171,191, 74, 31, 10,170,146, 44,227, 99,195, 1,187,172,145,247, 67,214, 6, 39, + 19,141, 15, 14, 14,168,224,211,238,101,165, 6,213,240,210,156, 62, 12,203, 18, 22,131,204, 37, 62,140,119,196, 65,156,164, 9, +127, 79,104,112,217,126,173,210,110, 83,148, 98,169, 63, 16,199,208, 61, 16,170, 94,251,229, 98,123,231, 90,154, 55,161, 63, 17, +194, 45, 27,132, 55,201,253, 21,173, 36, 20, 49,255, 97, 46, 60,247,243, 71, 0,186,174,118,181,137, 32,138,238,236,247,110,178, +177,177, 73,105, 10,165, 21,170,224,143,130, 84, 65,240, 13,196,135, 16,244,101,212, 39,210,103, 80,139,136, 63, 4, 21,173,162, + 41, 38, 45,113,235,102,191,103,188,247,204,238,166, 68,154,127, 33, 63,118,118, 51,123,231,220,123,207, 61, 71,243,103,140, 75, + 70, 89,226, 74,129, 49,213,158, 24,130, 69,219, 9, 34,197, 25,139,170,211,253,223,191,245,224,237,151,215, 22,236,119, 27, 27, + 23,101,134,174, 95,115,247,195,132, 36,155, 9, 16,237,176, 94, 23, 14,109, 46,109,104, 93, 50,232,202, 48, 88, 20,186, 38,163, + 26,193,119,217, 48,136, 34,127, 16,231,177, 45, 86,117,127,126,255,109,111,216, 31,158, 46,166, 30,187,114,107, 98, 45, 23, 15, +209, 44,226,201,139, 59,251,135,159,167,159,108,197, 48,126,224, 69,163,104,115,107, 48,250, 49, 63,161, 77,227,192,185,209,129, +240,251,181, 96,192, 98,241,152,204,212, 90,115,144, 51, 83, 93, 65,144,241,187,170,233,114, 55,119, 14,142,191,189,103, 51, 38, + 52,238, 37, 15, 13,138, 73,180,243,245,236, 4, 42, 5, 20,176,165, 77, 97,212, 46,135,155,130,107, 68,138,123, 74,113, 44,138, +210,170, 10,147,144, 61,225, 58, 2,205,227,254,228, 87, 50, 45, 25, 90, 90, 51,107, 97, 6,174,118,118,103, 41, 77,138,201, 70, +157,148,116, 57,107,123, 35,194,216, 17,102, 79,108,139, 18,212,144, 9,245,188,159,238,221, 61,122,252,228,233,222,237, 67, 66, +129,179,239, 31,199,147,221,139,249,236,197,179,231,111,222,125,168, 42, 43, 7,250,206,153,157, 87, 51,131, 21,181, 43,186, 37, +122,244, 97,207, 8, 61, 58,220, 84,186, 52,210, 76, 36, 25,203, 75, 20,218,105, 85, 1,245, 23,180, 64, 66, 56,101,104,112,183, +156,190, 86,156,185, 72,102,193, 55, 32, 8, 53,249, 70, 10, 4,213, 51,163, 83,203,230, 62,117, 5,153,117,199,246,179, 42, 53, +175,156,176, 91,119,154,166,135,124, 61, 28,157, 47,231,173, 70, 57,255,155,190, 19, 84, 85,222,243, 35,204,250, 11,185,114,216, + 64,207,159, 19,193,160,157,102,106,162, 6,165,134,116,232,238,141,111,156,255,153, 17,188, 18, 45, 65,160, 91,135,239,248, 73, +153,232,197,123,182, 7, 29,202,252,127,247, 37, 93,104, 53, 47, 85, 53,105, 1,174,235,177,108, 45,143,165,116,210, 90,188, 20, +130,255, 21, 76, 60,154,246, 25, 88,219, 24,219,213,244, 69,110,123,134, 94,148,149, 9,197, 78,215,113,105,123,107,207, 25, 46, +249, 97,116,187,172,203,203,109,225,182, 1, 96,174,113,111,186,248,206, 45, 83,200,110,210, 3,167, 91,150,117,129, 54,166,112, + 48,245,206,190, 46, 22,247,156,251,126,100,170,148,118,172, 11,173, 94, 78,153, 77,123,199,119,119, 55,130,131,173,222,254,118, +223,113, 91, 1, 62,126, 75,160,207,167,133,185,185, 31,229, 56,126,224, 6,125,179,215,183,109, 95,216,158,130, 37, 41,119,233, + 41, 75, 45,242, 34, 91, 38,113,156,254, 93,164,201, 69,150,167,241,133,250,121,230,253, 94, 6,211,172,176, 0, 86, 25,203, 27, + 22,142, 45,161,203,208, 58,198,180,249, 25,216,142, 40, 4,104,182,123,169,221,150,101,157,195,142,131, 47,196, 41,152, 4,175, + 70, 65,140,186,227,207,192, 91, 22, 30,241,162,105,236, 55,255,111,221, 78,234,210,111,219, 27,147,233,226,148, 19, 14, 12, 60, +176, 92,153, 38,209,104, 90,165, 46,181,180,141, 81, 29, 85,101,187, 93,192,204,215,236, 96,133, 1,230,170, 66,164, 38,216, 78, +137, 23, 24, 62,205,100,178,212,144, 92,182, 20, 75,240, 53,233, 46, 30, 30, 61,122,117,252,178,161, 91, 1,113, 11,185,146,134, + 88, 27, 61,107, 7,182, 68,215,129, 85,221, 41,216,141,115,173, 94, 22,185,238,168,115,245,231,159, 0,140, 93,203, 78,220, 48, + 20,181, 29, 59,113,156,100, 2, 12, 47, 1, 66,106, 65, 21, 21,234,170, 31,192, 15,148,191,232,162, 82,255,148,101,145,250, 5, +244, 65, 41, 12,204,123, 38,177,211,123,175,237,233,136,178,232, 46, 11,132, 50,227, 59,215,247,113, 30, 65, 95, 44, 9, 74, 74, + 33,200,252,228, 46, 89, 19,234,243, 10, 74, 89, 90, 88,219, 32, 85, 21,190,122,106, 48,189, 7,250,205,253, 13,186,159, 19,177, +121,101, 50,131, 30,205,254, 58,141, 74,143, 56, 30,134,211, 98, 86,103, 25, 57,110, 59, 58, 47,235, 37,159, 16,220,225,161,137, +212,122,249,106,198,232, 98,218,206,188,189,117,196,188, 7,235,212,147,189,211, 95,195,159,185, 42, 32,229, 17, 51,205,251,123, + 4, 43,153,251,209, 29,252,122, 20,173,239,225, 64, 23,243,233,254,230,238,116, 62,133,170, 0, 26, 11, 17,153,180,232,223,197, + 90, 82,226, 8,195, 59,223,135,186,224,207,192, 40,169, 89,232,185,190, 61,254,240,132, 65, 17,171,204, 58,175,111,135,183,116, +156,110,110,219,201,194,142,103,237,112,204,187,105, 53, 24,240,135, 65,119, 55,224,138,239,253, 30,141,151,150, 52,161,164, 90, +218,249,176,121,132, 23,128,242,159, 59,161,170,101, 94, 17,119, 36, 65,109, 54,194,145,177, 84, 66,115,151,244,140,210,248,246, + 82,103,210,228, 41, 71, 88,125,183,179,213,187,188,252,240,241,211,103,104, 39,220,252, 59,103,139,167,135,219,175,215, 87,199, + 39,167,189, 66, 95,127,185,170,123,186, 44, 36,250,124, 43,218, 58, 19, 55,203,181,190,152,146,172,147,200,207,106, 92, 42,187, +178,128, 46, 4,125,166, 74,109,222,159,191, 77, 92,247,240, 52, 18, 76, 65,107,106, 12, 52,167, 75,133, 24,141,196,155,162,101, + 8,255,193,200,134,103,200, 26,112,244,129,245, 72,133,118,131,176,141, 96,192,226, 35,143, 54, 46, 44, 87,166,117,110,141,109, +131,114,169, 43,133, 50,190, 6,109,244, 17,211, 34, 87,123,133, 98,196,139, 6, 2,102,209, 44, 68,180,164,128,144, 36,169,188, +150,210, 61,220, 98,173, 95,124,194,231, 48, 16, 6,110, 25, 44, 6, 33, 7,183, 51,137, 13,155,116,168, 89, 13, 79,146,192,252, + 40, 19,214,203, 55,160, 57,161,178, 2, 99,239,217,164, 61,200,145, 48,151,169,212, 51,104, 14,183,143,209,171, 19, 23,154, 24, + 11, 98, 45,185,123,201,189,158,169, 59,114,160, 21, 44,250, 60,118,236,236,240,124, 4,213, 15,114, 89,177, 14, 32, 52, 32,150, +181, 40,209, 46, 72,165, 48, 16, 19,162, 74,231, 90,157, 11, 89, 24,233,148,130,121, 60, 76,247, 87,104, 0, 51,187, 74, 82, 98, +237, 34, 9, 83,146, 3,178,196,117, 23, 86,232,154,188,195,140,228, 38, 85,149,130,102, 57,209, 10,158, 69,153,164, 7,133,121, +183, 83, 95,188,234, 95,156,245,223, 28,150, 91, 53,166,118,248,109, 40,232,104,179, 52, 77,113, 86,147,224, 2, 13,190,202,170, +216, 59, 42,247, 95,235,221, 35, 81,244,109, 82,206,108, 50,111,216, 24,154,194,165, 67,171, 94, 43, 27,161,121, 86,101, 27, 59, + 69,255,160,218, 62, 50,213,150,214,108, 35,159,212,106,150, 58,221,118, 26, 7,241,194, 15,187, 2,180, 38, 90,114,174,216, 92, +248, 7,219,101,127, 74,250, 98, 43, 85,181, 54, 56,233,185, 56,160, 96,177, 57,163,217, 16, 11,132, 12, 23,175, 87,254,162,144, + 17,101,235,241,108,226,109,130, 56,143,183,181,175,157, 57,135, 24, 38,136,101,199, 86,222,226,193, 23, 37, 12,213,144,201,134, + 46,164,155, 56, 87,192,169,189,243, 14, 32,148,214, 26,207, 73,166, 85,170, 37,120, 81, 80, 94,164,149, 96,208,198,128,226,178, + 69,241,226,240,239,130,185, 7,127, 65,106, 41,210,164,248,191, 32,153,240,186,207,137, 78,221,255, 43,145,253, 17,128,174,115, +233,109, 26, 8,226,184,189,118,214,113,146,186, 4,218, 34,218,170, 45, 80, 82, 64,156, 80,203,153, 15,194, 1,238,136, 3, 7, + 36,248, 52, 72,240, 81,144,184, 34, 40,162,168,226, 37,181, 73, 43, 26, 82,242,178,227, 93,239, 50, 15, 59,113, 42,113, 76,164, + 88,138,189,158,199,127,102,126,227, 59, 51,200, 39,158, 51,158,224,194, 36,201,157, 86, 83,205, 52, 9,208,248,223,152,121,145, +255, 4, 79,105, 33,174,161,104, 71, 45, 37,140,161,208,232,201, 52,102,184, 88,151,134,224,149,170,253,198,109, 70, 75,195,241, + 16, 37, 51, 75, 29,134,180,160,153, 17,254, 25, 59,208,249, 21,223,110,209, 1,102,139,110, 48,120,188, 96, 38,190,159, 28, 70, + 97, 19,194,159,132, 76,128, 51,227,249,208,123, 70,189,183, 46,227,104,172,217, 94,107,253, 56,253, 9,241, 96,213,151,216,222, + 72, 35,181,197,138,119,148, 11,203,107, 66, 77, 49,105,201,208, 27,120,156,173,213,157,147, 94,167, 26, 52,192,163, 48,239, 19, +158,253,210,242,106,162,179, 65,220,131, 11,172, 47,174, 55,130,232,160,179,191, 18, 93,237,141,112,221, 59,152,101, 8,178,186, +163, 14, 78,126, 99,248, 28, 66, 98, 91,245, 66, 72,163, 53, 70,247, 30,133,240,110,189,238,234, 64,192, 31, 79, 38, 36, 41,146, +189, 9, 36, 26,104, 42, 79,161, 39, 83, 42,131, 67,116,175,181,253,232,201,227,187,123, 15, 29, 71,170, 81,231,243,135,143,155, +215,183,222,188,126, 27, 86,131,243, 94,188,187,251, 32,106,212, 48,210,137, 29,130, 71, 98, 40, 35, 20,247,171,139,156,177, 13, +183, 59,213, 91,155, 27,119, 90,107, 25, 46, 48,178, 7,135,223, 50, 43,159, 63,125, 6, 15,253,197,171,151,221,126, 31,163,157, + 44,141, 26, 98,240, 39, 17,113, 69,138,104, 96,255,210,174,227, 9,121, 79, 56, 1, 90, 86,106,169,138,249, 30, 17, 63, 29, 45, +123,232,215, 99, 61,114, 75,143, 1,236,107,234,148,123,126,193,183, 35, 90,125,106,242, 43, 66,104,147,115,138, 98, 29,135,124, +217,153,116,131, 74,168, 38,127,128,205, 42,200, 34,142, 33,116, 44, 96, 97,130,224,218,125,100,211, 99, 59,157,102,195,236, 81, +187, 27,166,231, 62,231,208,166, 22, 46, 12,226,190,193,138,186, 79,105,138, 42,191, 91, 60,128, 93,102, 82, 26, 71,213,228, 2, +250,126,212, 9, 69,187,123,124, 81,144,177,188,118, 24,133, 27,200, 70, 39,184, 94,206,136,124, 74,223, 74, 95,194,231,118,247, + 8,220,161, 71, 43,169,121,233, 0,169, 85, 52,143, 79,141, 73,188, 69, 50,113, 98,194,127,137, 18,104, 10, 5,104, 26, 27,190, +136,109, 23, 57,196,199,184,204, 99,167, 81,113,143, 0, 74, 1,110,189,115, 67, 31, 28, 54,248, 6,132,185,162, 46, 9, 89,145, + 12, 55, 22,195,219, 43, 11, 55,174,213, 49,209, 37, 61, 36,205,140, 20,184, 8, 30,205, 58,214,164, 40,170,131, 76, 59, 8, 43, +205, 85,175,118, 73, 57, 98,156,232,164, 63,156, 76,224, 92, 40,159, 40, 0, 88,162,204,243, 90,139, 38,130,151, 54,129,135,128, + 75, 4,151, 27,107,205,112,105,220, 56, 63,141,126, 31,175,180,213,209,121,212, 78, 82,120,209,152,234,202,179, 0,198,206,153, + 40,184, 17,103,163, 51, 46,232,161,240, 65, 21,139, 48,168,238, 44,111,126,250,181, 79, 6,126, 74, 98,180,249,140,250, 28, 60, +154,251, 8,139, 88,129, 43,159,197, 52,154, 71, 97, 37,216,135,238,184, 71, 6,151, 97,192,180,160,195,152,113, 50,180,110, 49, + 5,235,206,198, 26, 24,205,233, 17,229, 94,185, 42, 85, 9,118,180, 89,155, 43, 86, 8,136, 10,182,174,220, 60, 56,254, 34,253, +202,253, 91,123,239,191,190,163,239, 13,175, 96,204,101, 39,107,193, 67,103, 25,210, 73,225,230, 40,157,149,209,217,246,127,131, +224,184, 36, 57,160,108,242, 34, 67,136, 44,109,198,178,142, 20, 21, 26,210,206,230,125,193,127, 67,248,127, 2, 48,118, 53,189, + 77, 3, 65,212,107,123,237, 56,205, 7, 85,147,166, 45, 18, 5,209, 11, 39,196,133, 11, 31, 23, 36,144, 80, 41,170, 56,194,165, + 18,252, 16, 16,167, 30, 57,128,248, 45, 8, 9, 10,173, 4, 72,112, 65, 66, 69, 72,136,168, 77, 73,218,144,218, 77,253,177,235, +120,153,217, 93,187, 41,112,224,220,216, 73,181,179, 59,111,103,222,188,103, 23,149,123,201,131, 70,230,221,200, 72,149, 30,172, + 33,142, 13,216,218,148, 70, 92,171,212, 75,137,144,204, 60, 74,152, 34, 47, 25,170, 27, 79, 38, 36,191, 77,213,208, 49, 58, 50, +162,134, 58,225, 99, 93,191, 3, 40, 44,197,111, 25, 21,228, 82,213, 58, 27, 55, 28, 87, 25, 15, 47,224,210, 72, 41,211, 83,232, +136,120, 32, 36,167,234,173,148, 39,232,249,160,205, 43,132,162,212, 25, 99,218, 85,154,141, 37,171,138,205, 90, 99,215,239, 33, +119,192, 48, 35, 22,203, 38,167, 37, 5, 21,180,193,223,108,125,118,123,208, 49,244,212,134, 72, 53, 51, 16, 11,105,117,183,190, + 27,236, 81,219,241,163,253,249,214,217,158,223, 5,200,116,239,238,253, 75, 75,215,158, 60, 90,221,120,255, 18, 82,250,118,127, +219,163,131,153,218,201, 83,141,211, 91,251,175, 97,115,193,182, 7,152, 32, 19, 30,166, 46,156,153,174,205,180,247,183, 8,225, +112,170,160,255, 39, 27, 14, 6,217, 46,231,120,117, 49, 72,204, 0,171, 50,204,100,200, 76,147,243,163,132,205,181,154,221,189, + 48,137,147, 7, 43, 43,183,150,239, 56,181, 22,252,119, 59,223, 63,183,191,109, 78,207,181, 96,251,181,219,221,135,143, 87,223, +174,189,162,116,170,223, 31, 1, 18, 27,198, 7, 16,124, 14, 4,130,237,216, 28, 61, 94, 57,195, 54,116,217, 41,253, 10,124,198, +140,197,235, 55, 23,111, 47, 5,131, 1,172,224,179,231, 79, 63,124,252,212,235,117,174,220, 88,190,120,225,252,139, 55,235,176, + 97, 57,150,109,204, 74,149, 4, 60,132,107, 51,188, 77,170,231,142, 36, 52,182,120, 22,219,196, 45,204,216,177,220,147, 9, 38, + 82,215, 1, 16, 73, 66,118, 88,196,221, 65, 50, 28,143, 62,215,114, 50, 77,236, 37,133, 21,154,137,109, 64,170,212,119, 73,118, +196, 73,151,219,217,130, 44, 94,176,119, 83, 45, 95, 90, 24,164,137, 67, 60,220, 21,242, 25, 81,203,101,249,249,145,240, 16, 30, +230,114, 62, 0,254, 10, 43, 50, 57, 49,185,254,101, 77,153, 60,160,112,244,216, 57,131,148,167, 81,150,195, 62,217,192, 23,228, +242,185,171,239,190,110, 8,110,152,228, 88,145, 4, 86, 7, 11,172,236, 80,169, 40,154, 40,119,101,225,158, 20,218, 44, 90,206, +103, 81, 74,120,200, 66, 19,229,164, 16,163, 87,221,154, 31,251,176, 28,112,106, 19, 44,208, 53,127, 6, 59,200, 74, 2,180, 97, +185,145,145,144,140,140,205,161,234,154, 73,150,123, 99, 41, 42,141,124,153,212, 73,148, 32, 8,229, 78,177, 9, 97,187,182,233, + 2,114, 71,159, 76,234, 89, 40,137, 1,192, 0, 86,226, 76,165,188,208,152, 88,152,173,158,168, 80,164, 27,194,157, 37, 54,100, + 33, 17, 49,126,201,177, 61,116,143,196,186,142, 46, 13,212,155, 20,246, 20,113,194,152,197, 33,147,109,126, 1, 31,163, 37,183, +228,202, 25, 17,116,119,192, 68,202, 18, 22, 50, 30,134, 44,226,105,156, 36,145,136,145,134, 3,167, 3,165,246,212,124,163, 58, +237,213,219,229, 31,125,103,167,212, 70, 35, 35,169,223,157, 42, 93, 72,229,233,161,133,119,244,112, 52, 81,242, 23, 90, 21,142, +113,182,217,217, 20,249,248, 40, 57,154, 14,250,163,131,130,139,166,156,208,243,137,100, 1,104,192,115,189, 0,205,218, 20,225, + 25,147,104,173, 84, 29, 66, 28, 10,197,110,149,142,158,150,148,199, 82, 77,240,124, 24,162, 82,170, 65,158, 9, 66, 31,158,245, + 28, 15,249, 57, 44,195,196, 9,143, 71, 67,249, 3,113, 39,195,253, 91, 94,254,164,158,136, 50, 95,149,173, 32,136, 1, 75, 90, + 65,195,218, 76, 56,101,248,133,177,136,144,158,240, 87, 45, 6,194, 0,222,144,171, 1,140,241,125,254, 49, 56, 33,198,205, 77, + 85, 44, 41, 6,154,249,223,142, 78,191, 5,160,236, 90, 86,163, 8,162,104, 87,119,245,187,123,222,154,193, 36,154, 4,130, 70, + 5, 7, 55,110, 92,136, 43,113,233, 66,252, 10,247,174, 4,245, 11, 92,185,240, 43,116,163, 1, 81, 4, 81, 17, 3, 42,130,142, + 16,117, 34, 62,152, 36,164,147,121,244,187,189,247, 86,101,166, 3,110, 36,139, 64, 32, 73,247,116,215,169,123,110,157,123,142, +244,159,105,185,135,200, 76, 3,110, 32,206,169,181, 84,179,155,150,110, 0,207,157, 20, 16, 80, 28, 52,136, 79, 49, 86, 62, 88, + 43,203,125,166, 3,213, 82,198, 60, 29,110,167, 18, 93, 28, 91, 51, 5,138, 65, 44, 75,179,116,223,170, 25,191,219,134,203, 80, + 66,158,238,235, 20, 4,173,195,167,224, 59, 85,162, 87,197,145,218,124,140,218, 16, 92, 63, 81, 58,166, 65, 71, 68,228,154,219, +200, 41, 89, 69,198, 90,208,194, 20,163, 76, 42,222, 75,165,215,223,200,179, 12,223,103,166,121,192,230, 1,179,208, 5, 10,171, +124,177, 99, 53,253,214,246, 96, 7,174,198,181,221, 68,132,123, 17, 35, 17,185, 22,195,112, 24, 68,195, 40,142,146, 20, 64, 21, +170,200,162,115,250,236, 66,103,101,237,197,171,222,198, 87,172,253, 25, 80,138,104,103,180,219,219,234, 17,162, 1, 77,118,108, +195, 27,132, 3,192,192,166, 63,179,185,135, 10,214, 81, 60, 64,249,121,145,140,105, 56, 51, 86,146, 17,203, 19, 58, 71, 14, 83, +145, 42,140, 79, 58,134,191,151,113,248, 79,183,110,222,134,210,206,180,172,235, 55,238,236,110,247,187,239,223,182,143, 46,125, +120,253,188,125,108,105,241,228, 57,175,222, 90,125,248, 96, 97,113,121,179,191, 61, 59,191,144,196,217,149,171,215,186,159,214, + 53,102,247, 55, 3,219,178,195, 16, 94,178, 34,142,243,163,115,243,157, 51,157,119, 31,187, 73,146,158, 58,177,252,232,241,147, +187,247,238,175, 62,125,246,249,203,143,173, 96, 84,179,253,243, 23, 47,107,217,120,237,205,203,122,197, 85,177,148, 80,224,170, + 96,145,196, 97,138, 41,155,138,104,157, 73, 91, 57,138,172, 44,228,177, 27, 86, 19, 8, 69, 97, 50,130,125, 14,224, 37, 47,166, + 67, 73,130,101,155,154, 41,247,224,124,210,139, 16,111, 3,234, 70, 84, 85,167,105, 76, 18,174,149,130,144, 44,221,204,243,164, + 60, 73, 77,137,198, 9, 59, 96, 66,169,202,227, 78, 50,114, 21,111, 42,160,158, 24,148,109,120,141, 40, 13,127, 7,191, 54,250, +223, 8, 83, 56,245, 33,139,162,152, 58,165,203, 14, 18,245,244,180,253,236,135,239,127,214,163, 34, 33,221, 56,181,157, 5,238, +107,162,199,138, 48, 65, 90, 67,244,122, 67,242, 74,243, 67,162,237, 10, 4, 55, 70,184, 87, 72,238,173,136, 79, 75, 24,107,103, +121,102, 25, 22, 92,240, 94, 24, 48, 1,227, 12,176,152,227, 61,170,236,128, 93,140, 24, 34,162,193, 83,241, 35, 49, 41,142,164, +147, 56,157,142,238, 78,176,141,112, 11, 88,161,174,185, 38,118, 99, 60,203,228,154, 93, 53,216,146,239, 93, 58, 62,115, 97,229, +240, 92,203,130,181, 28, 66,213,128, 29,134,130,196,145,170,197, 53, 76,128,177,116,196,110,110,136,112, 37,189, 57,167,213,103, +211, 76, 29,143,194,241, 16,222, 17,160,104,186,231, 89, 85,223,182,171, 14,247, 29,213,179, 85,215, 6,210,202, 61,199,172,121, + 30,108,152, 64, 96, 43,182, 1,181, 43,186,107, 96, 36,182,248, 66,245,128,211,244,234,158,203,119,148, 1, 15,168, 29, 37,238, +175, 96,147, 60, 91,196,109, 83, 55,155,126, 3, 71, 31,232,227,203, 41, 81,171,144,180,153,181,129, 73,168,108, 24,141,101,191, +116, 34,224, 17,152, 50, 73,213, 42,225, 15, 71,250, 98,133,232, 13, 46,107, 80, 32,124,138,140,133,192, 99,103, 88,245, 89,145, +106,168,122,224,132, 27, 76,149, 22, 52,204, 49,108,156, 89, 69, 90, 15,171, 47, 77, 72, 29,111,104,186,161, 91, 81, 18, 74, 35, + 20,218, 96,131, 17,122, 71,207, 84,218,221,159, 93, 81,214, 59,134, 75, 9, 7, 18,139,227, 12,224, 33,145,101,175, 72,242, 46, +121, 18,192, 67, 43, 79,156,194,239,114,110,160,119, 49,101,183,178,127,105,134,203,186,163,172,248,191,168,190,191, 2,240,117, +109, 61, 77, 4, 81,120,102,119,246,210,118,235, 22,196, 10,197, 18, 52, 88, 20, 10,104,228, 47, 24, 12, 33, 49, 49,250, 67,245, +193, 72,188,189, 27,162, 49, 81, 98, 20,125,192, 11,198, 64, 40,176,165,123, 31,207,101,183,133,196,152, 52,125,105, 31,166,157, +157, 57,223,156,249, 46,197,254,158,211, 49,164, 12,191,134,167,211,114,108,183,106,123, 39,131, 64, 24,236,149, 36,163, 60, 34, + 29,138,148, 82,254,147, 93, 47,135,237, 13,201,241,216, 20,230, 36,203, 42, 37, 69,153,145,141,157, 43, 91,185,196,219, 32,219, + 2, 38, 30, 81, 35,190, 76, 11, 51, 88,217, 97, 74,107,110,114,238, 79,239, 55,251, 97,193, 96, 96,245, 98,181, 36, 82,175, 81, +144,208,196,204,197,153, 94,191, 71, 70,102, 69,120, 36,251,213, 17,157, 64, 66, 89, 26, 68,167, 72,126,167, 60,248, 49,175, 1, + 43, 45,166, 0, 16,147,233,105, 34, 59, 12,122,100, 29, 99, 55, 27,151,131, 65, 63, 66,250, 9, 37,243,106,180,192,165,149, 44, +218,151,174, 4, 73, 24, 38,232,186,181,253,249,227,235,199, 79, 63,237,108,135, 81, 80,252, 72,205, 93,124, 19, 48,255,114,123, +121, 63,216, 63, 30, 28,205,183, 58, 63, 15,247, 0, 83,107,140, 3, 30, 48,189, 18,190, 8,143,142,239, 52, 18, 51, 54,171,121, + 5,158,116, 83, 21,106, 35,116,157,196,107,243, 26,192, 43, 33, 30, 61,124, 0,187,125,119,121,161, 98, 38, 47,159, 61,137,195, +190, 50, 68,119,101,117,124,234, 26, 12,252,203,251, 55,155,155,207,183,182,182,150,186, 93,248,165,107, 27,247,167,231, 22,155, +126,101,118,182, 5,245,104,125,125, 13,198, 84,173,168,197,249, 25,219,201,219,237,171,111,223,125,136,242,108,117,229,214,183, +221,221,237,157,175,105,146, 57,182, 85, 7, 32,167,242,245,141,187,190, 87,125,245,226, 41,192,207, 48, 33,197, 83,204,153,139, +104,191, 70,144,155, 71,174,203, 36, 50,132,175, 24, 38,135,119, 77, 60, 97, 70, 9,204,243, 51,213,223, 24, 66, 36, 71,185, 9, +121,230, 13,183,120,110, 46,103,212, 6, 97,137,133, 49,202, 76, 48, 81,217, 40, 50, 0, 86,176, 63,178,167, 35,165, 37,160,215, + 77, 86,250, 16,140, 90,114, 35, 98,165, 1,147,107, 81,164,162,166,232, 2, 56,207, 34,187, 19,131, 89, 50,118,186, 69, 12,171, + 20, 28,210,136, 50,160, 45,148,162,229,178,100,105, 81, 4, 52,142,186, 89,111,194,209,201,228, 14, 94, 25,177,196, 82, 68,234, + 84, 43, 98,116,240,177,148,185, 51,250,246,236,157, 78,171,243,227,224, 59, 35, 20, 34,176, 23, 14,188,136, 0, 41, 79,184, 8, +210, 32,104, 68, 87, 8,134, 60,231, 88, 53,178,174, 50,138,151, 38,230,130, 34,255,106, 66, 40,134,116, 77,147, 0,187,233,217, +118,221,181,107,174,242,108,167,229,170,141, 27,147,247,150,166,198, 60,213,143, 1, 1, 37,164,183,200,137,102,134,244, 54,199, + 82, 48,227,104,233,135,234,109,164,191,227, 18, 25,159, 22,141,150, 72,242,232, 52,138, 66,108, 46,163, 91, 72,205,129,119,168, +168,152, 33,160, 72, 39, 96, 83,125,115,149,112,109, 81,117,197,132,103, 54, 27,181,201,177, 9,191,230, 43, 43,134,135, 59, 74, + 57, 9, 6,139, 56, 28, 15,124,191,166,250,250,196, 60, 78,217,128,184, 20,158,143,174, 5, 51,100,104,165, 41,212,153,148,194, + 86,175, 79,117,246,131, 3,116,251,202,243,163, 62, 6, 6,243,174,206, 78, 80,186,188,173, 96,218,180,214,229, 69,141, 46,112, + 1,172,202, 83,228, 35, 22,158,246, 60, 49, 44, 26,130, 25,135,138, 69,219, 40,254,225,112,214, 36, 59,185,136, 26, 92, 70,189, +114, 1,138, 46, 59,132,139, 17,161, 83, 16,176, 59, 33,174, 21,123,147, 23, 34, 98,248, 51,240,124, 70, 69,250,230,244,194,175, +195,189,242, 3,118,215, 44,148, 25,178, 96, 49, 14,245,103,184,119,197,105,120,198,245, 22, 80, 20, 89, 88, 97,226,180,148,231, +179,183,228,168,247, 34,207,182, 61,245,121,218,130,254,175,156,239,175, 0,140, 93,201,110,211, 80, 20,245,248, 18, 59,118,156, +193,233, 64, 43, 64, 45,131, 0,169,106, 10, 8, 9,186,168, 90,186,228, 15, 16,226, 95,216,176,227, 39,128,111,232,166, 11, 36, + 86, 72, 44,168,132, 68, 37, 88,160,210,162,182,193,113, 28,215, 99,108,115,239,125,118, 27,132,144,144,178, 74, 34,103,240,123, +231,157, 59,157, 83,213, 87,185, 11,102, 89,219,194,108, 96,148, 4,126,232, 81,142, 14,245,175, 69,174,229, 94,221,160,243, 50, + 73,241,183,107,142, 80,186,214,218,230, 44,108, 15, 88,160,216, 96, 64, 5, 55,174, 80, 84, 22,211,176,183, 52, 23,203,156,204, +121,120, 82, 94,150,138,120,212,179, 40,192,157,118, 39,213,108,129,169,153, 97, 18, 1, 31,132, 5,193,235, 54, 84,184, 21,221, +179, 97, 75,179,128, 92, 75, 92,136,134, 18,235,212, 4,169,204,181,231, 78,220,227,181,165, 62, 64,150,161, 97, 94,213, 79,252, + 52, 70,213,117,174,173, 4, 31, 8, 7, 0, 80, 9, 55,244,250,203,125,199,119,142,221, 83, 86,211, 44,195,242,130, 49,217,152, + 80,212,159,165,163,112,100, 27, 51,227,112, 12,200, 7, 91, 1,226, 65,216,123, 1, 74, 85,240, 17, 91, 62, 4, 4,135,132,106, +104, 6, 4, 0,240,146,213,232,232,106,253,230,226,237,159,163, 35,248,185,247,150,239, 59,103,110,152, 6,176,216, 6,129,211, +108,234,114,115,162, 49,153,167,101, 17,216, 43, 75, 42, 93, 81,234, 76, 62,248,190,127,120,184,191,214, 95,125,243,250,173,221, +187,180,190,177,253,233,227,135, 27,253, 71,116,148, 71,175, 94,190, 24, 7,190, 84,164,207,158, 63,125,183,187,179,186,118, 55, +141, 71,186,166, 38,201,216, 25, 28,109,109, 63,190,126,109,185,213,106,110,110,110,237,237,237,205,218,115, 95,246, 63, 3,174, +245, 87,238, 4,254, 40,142, 71, 51,109,211,106,170,122, 93,142,130,248,225,131,117,251,202,173,247,187, 59,142,231,118, 44, 3, +192, 65, 17, 80, 77,190,161, 75, 65,152,194,230, 98,162, 70,165, 81, 60,189,177,247, 75,109,224,234, 76, 19, 85,209,138,202,109, +167,154,222, 40, 11,105, 85, 97, 16, 97, 58,175,196, 29,187,122, 47,158,196,121, 41,207, 61,109, 6,205, 27, 16,120,195,175,196, +112, 6,153, 1, 29,182,141, 30,156,142,231,221,244,200,170, 20,134, 68,185, 10, 14,184,104,140, 74, 79,210,142, 19,179, 12,135, +234,100, 76,238,103,216, 38, 11, 33, 69, 54, 1,194,202,109,164,132,202,232,147, 28,246,100,173,166,203, 34, 35,169, 72, 30,111, + 10,220,180,136,186,102, 35,184,155, 76,174,243,236, 46, 60,141,221, 41,112, 53,236,222, 65, 79, 44,178,141, 36, 28,166,239, 1, + 59,229,151, 63,248,118,242,181,210, 38,156,206,159, 22,127,228, 75, 17, 11,184, 20,228,185, 39,218,244,163, 16, 47,140,153, 74, +179,162, 92,196, 1,105,198,106, 36, 87, 9, 72, 13,135, 24,107, 48,217,212,128,137,171,109,133,109, 44, 46, 60, 89,233, 46,205, +155, 62,220,188,100, 66, 99,209, 57,183,154, 64,230,142,105, 25,212,189, 65,152, 3,114,129,231, 29,213,167,172,158,208,187,140, + 17, 37, 4,167, 17, 34, 49,146, 73,248,179, 84, 5, 3,150, 32, 18,156,177, 48,112,131, 35,207, 57, 24,185,135,158,247,195,207, +156, 64,139, 98, 52,236,209, 84,193,214,133,133, 14,155,239,216,245,154, 41,136,152,216,153,228,229, 70,151,228,122,203,210,196, +196, 27,230, 97,158, 75, 23, 70, 73, 85,214,148,204, 18, 32,196,190,108, 95, 29, 18, 57, 27,250,195,172, 44, 79, 20,220,198,144, +219,210,182, 77,251, 44,242,121,114, 47, 47, 23, 27,149,204, 8,244, 49,124,215, 77, 98,127, 69,163,102, 88, 70, 51, 66,148, 47, +120, 66,131,143,184,235, 53, 29, 32,126, 28,122, 18,217,130, 67,208, 25,103, 9, 80, 7, 96,234,212, 54, 36,195,101,103,155,243, + 0, 44,140,161,255, 45,149, 55,228, 58, 42,214,165, 93,163, 27,145,251,121,133, 94, 82,165,158,139,221,246,167,227, 19,248, 26, + 52,235, 7, 52, 66,202,121, 30,178,200, 43,213,160, 11,171, 87, 20,158, 83,107, 41,188, 13,226,203, 34, 23,196, 41,161, 21, 81, + 44,254,229,127, 38, 76,185, 65, 77,185, 81,138,255, 39, 1,255, 91, 0,198,206,164,183,105, 40,136,227,246,179,227, 37,117,235, +132, 44, 77, 55, 90, 84,169, 21,235, 1, 33,129,202, 9, 14, 32,132, 42, 56,241,213,144,224, 67,112,129, 11, 66,226,140,212, 3, + 42, 65, 52, 85,213,210,146,116, 73,147,198, 89,237,231, 56, 54, 51,243,236,164, 66, 61,112,141,100, 71,137,236,121,255,153,249, +207,111,198,254, 25,229, 18,163, 64,142, 81,190,180,119, 13, 43,209,114,248,207, 36,158,170,196,184,106, 73,150,175,162, 62,225, + 93, 6,195, 1,202, 94, 28, 45, 82, 99, 84,241,216,255,195, 88, 2,205,145,199,168,225, 9,238, 46, 2, 49, 17,136, 30, 90, 50, +206, 36, 61, 90,123,124,210,172,121,129, 23,137,249, 28, 9,233, 19,228,114,197, 75, 44, 99,138, 64, 48, 88,218, 86, 89, 66, 62, + 35,222, 5,100, 94, 46,119, 59,125,103, 54, 3,114,172,239, 15, 57,162,210,201,102, 3,239, 63,220, 4,164, 58,220,214, 50,172, +243, 78, 19,210,183,163, 70, 13,233, 22, 81,224,113,200, 59,197, 18, 35, 1,174,139,110, 47,223,173,212, 42,161, 28,143, 80,246, +120,183,135,213, 42,101,172, 90,196, 79,152,207,149, 64, 58,129,120, 15, 81,140, 7,231,221,198,169,115, 28,146,109,238,164,115, + 54, 99,102,114,211,249,141,245,135,191, 78,118,153, 49,226,136,249, 84, 48,213,193,213, 75,146,161, 43,166,198, 32,176, 90, 70, + 74, 55,244,118,187,123, 90,239, 28,236, 31, 86,246,246, 7, 3,126, 81,175,183,157,214,253,141, 39,194,211,246,229,211, 7,167, +221, 43, 20,231, 95,110,190,126,247,246,253,139,205, 87, 67,223,203, 46,172, 76,167,205,175,159, 63,110,255, 40,247,123,254,159, +218, 25, 72,205,218,241, 94,105, 46, 83,171, 30,104,134,116,107,237, 70,179,229,212, 27, 77, 72,240, 57,247,175, 47, 46,204,151, + 74,154,102,174,222,188,247,123,247,167,211,108, 61,127,246,116,107,171,140,190, 15, 72,162,117,197,227,240,192, 75,126,196, 9, +202,131,199, 34, 57,213, 2,194,233, 97, 48, 37,129, 17, 87,213,229,100,147, 45, 99, 41, 56,170,204,148, 9,239,210,114,110, 21, +153,113, 4, 75,114, 19, 88, 13, 2,172,105,208,225, 18,195, 35, 90,204, 94,199,214, 29,217, 81, 4,151, 70, 44,180,156,108, 40, + 69, 91,220, 40,138,167,230, 89,178, 57, 36, 42, 76, 23, 33,185, 84,153, 54, 99,218, 28, 43,164,194, 27, 30,101,204, 92,159,247, + 9, 24, 33, 17,124, 34,156, 49,179, 62,106,139, 72,140, 44, 65, 20,164,122, 40, 62,151,240,160, 46,229, 86, 58,184,200,141,116, + 50, 33, 37, 44,221,178,244, 41, 50, 23, 4, 98,113, 40,161,182, 34, 60, 48, 70, 65, 60, 53, 42, 69,134,154,134,131, 12,146, 6, +248, 92, 24, 39,199, 82, 85, 68,119,154, 71,101, 73, 81, 33, 97, 77,210,208,158, 52, 17,240, 44,246, 82, 48,150,204, 45,210,229, +140,184, 31, 68,229, 83, 48,190,227, 67, 98,233,170,165,107,102, 74,205,107,250,155, 59, 75,155, 15, 74, 16,114, 61, 78,150, 66, + 58,194, 68,135, 0,137, 76,170,162, 67, 6,131,226,157,120,191, 12,155,162,232, 63,208,116, 9, 18,193, 84, 90,242, 64, 26, 5, + 56,117, 10,233,155,134,219,245,224,111, 30, 52, 47,142, 42,213,157,250,232,187,155, 63, 84,230,170,172,112,172,228,106,145,189, +231,234,229,179,112,123,199, 41,127,171,246, 42,141,130,235,171,203, 25,105,189,104, 44,229,138, 18, 11, 58,156, 15,195, 40, 22, +176,178,153, 49, 13,207,109,117,112,221,128, 28, 51,139, 40,217,139,231,145, 48,146, 59,189,139,164,135, 42,254, 39,225, 97, 35, +219, 52, 98,102, 66, 62,130, 76, 4,215, 7,219,166,237,250,131,104, 82,177,144,243, 86,126,224,247,177, 53, 68, 77, 44, 92, 12, +130, 85,111,252,242,140,149,245,136, 90, 67,149, 45, 28,120, 20,182, 76, 65,172,162,205, 45, 6,154, 0,113,199, 58,170, 51,184, +143,157,182, 61,180, 63, 98,176,154, 49,236, 46,239,225,254, 28,164,186, 71,217,169,107, 40,180, 19,220, 35,109,130, 83, 33,182, +136,224, 48,107,207,181, 93, 7, 46,193, 78, 18,102, 1,104,213,215, 21,209, 11,141, 53, 56,186, 27, 48,123, 64,100, 83, 64, 46, +196,164,240, 78,238,160,113, 0,148,175,216, 70,153,176,239, 89, 74,209,169,152, 41,255,167,132,255, 43, 0, 93,215,210,155, 68, + 20,133,231,201, 12, 51, 64, 7,164,148, 86,173,173, 15,108,163,137,141,233,162,169,198,196,212,141, 59,211, 95,225,210,196,255, +224,175, 48,241,145,184, 53, 26, 95, 91,163,155,218,196,104,173, 93,105, 42,165, 47,154, 82,160,148,121, 0,243,240, 60, 40,165, + 54, 18, 22, 64, 96, 2,151,123,239,249,238, 57,223,249, 62,233,196,243, 99,111,134,144, 15,235,176,187, 49,247,189, 13,150,132, + 78, 8, 78,252,159,171, 95,183,231, 84,244,131,182,237, 58, 17,121,160, 70, 98, 64,191,132,130, 52,114,117, 82,172, 36,193, 73, +183,160, 75,141, 12,123, 34,150,166,110,226,177,154, 24,215,139,191, 23, 88, 87,216,208,226,152,239,142,196, 76,252,148,124,120, + 4,114, 90,142,139,213, 60,177,123, 26,161,115, 45, 15, 15,128, 2,184,248,160, 53, 84,220, 89, 59, 0, 36, 72, 76, 74, 31,233, +119,161,161,155, 15,238,222, 87,208, 57, 85, 54,245, 4,124,237,137,211,133,164,145, 32, 6, 81,232, 97, 45, 59,100,170,126, 64, + 59,196, 82,113, 57,107,229, 24,183, 90,102, 26,130, 54, 96,251,148,150, 76, 25, 41, 6,158,176,130, 0, 72,110, 84,182,202,245, + 77, 64,169, 1, 37,238, 73,161,135,232,166,232, 82,171, 86,155,149,134,211,120,185,248, 26,214,122,203,139,154, 54,210, 0, 89, +147, 68,228, 44, 21,137, 51,144,225, 6,185, 19,132,114,177, 84,134, 63, 98,173,180,250,230,221, 43,215,110,210, 24,119, 4, 42, +131,195,131,233,235, 87,139,171,191,170,213,157,150,103,195,254,211,216, 94,219, 44,150,182, 43, 7,223,151, 86,222,127,120,251, +233,243,199,199, 79,159,249, 62,236,203, 26,106,153, 42,200,160, 87,100,169,237,133,182, 19, 56, 94, 56, 59,115, 99,126,254,222, +202,207, 69, 24,165,203,147,163,215,166,198,231,238,220, 86, 20,173,213, 10,235, 13,127,125,219, 13, 40,115,162,138, 0,248, 20, + 77,137,241,185, 55, 38,233, 61,207,160,120, 44,193,122,181,114, 87,198, 22, 59,196,136,247, 2,251,134, 11, 35,179,103, 87,236, +214, 65, 31, 33, 10,179,111, 99,185,243, 50, 61,142,161,205, 11, 54,199,195,211,173,218,186,231, 55,169,148, 34, 81, 79, 3,146, +160,146,241,116,207,127,148,142, 14, 6,202,131, 10, 18,172,174,222,244, 43,239,239,240, 22,188,239, 86,249,224,140,100,115, 69, +247, 58, 54,173,109,245,194,240,132,143,150,131, 66,195,171, 41,120, 54, 50,176,120, 67, 99, 78,204,125,204,151,103, 18,131,165, +202, 31,248, 41, 3,134,149, 77, 12, 89, 70, 6,253,158, 2,175,102,215,186, 96, 36,146,184,248, 0, 23,130, 41, 39,247,120,108, +146,232,249,142, 79, 74,162,128,226,217, 92,250,200,163,154, 12, 32,224, 21,216,250, 21,204, 8, 70, 49, 69,206,152, 25,142, 64, +221, 18, 33, 75, 29,144,102, 11, 92, 36,109,100, 44,195, 50, 84,236,188,199,175, 70, 77,124,228, 39,140, 84,224, 68,220,210, 20, + 53,174,106,178, 20,203,203,218,195,155,147,115,211,163, 29, 68,235,184,125,211,189,167,251, 27,193,200,170,128,202,145, 46,137, +227,204,221, 65, 1,123,190, 38, 7, 4, 51,133,231, 43, 33, 84,185,159, 85,145,201,134, 44,172,151,119,191, 46,111,252,240,207, +250,227, 51,198,224,152, 28, 51,209, 54, 70, 80,117, 89,131,128,151,206,230,206, 92, 44, 12, 95,153,170, 14,140,191, 88,112,159, + 63,250, 82,124,242, 13, 32,128,112,235,210,185,217,194,104, 30, 89,109,228,118,135,124,149,124, 33, 55, 18,215, 67, 10,184, 40, + 91,175, 91,128,136,201, 79,132, 85, 59,216,232,155, 8, 20, 76, 60, 15,176,201,145,188,235,152,116, 36,118,200,227, 12,167, 83, +219, 59, 12,132,252,241,104,207,221,165, 74, 42, 6, 39, 36, 75,160,100, 66,135,173,178, 53,228,253,115,133, 28,161,190,221,110, +142,164,243,221, 26, 12, 85,110,147,122,146,164,114,144,102, 74, 42, 14, 81,245, 96, 15, 46,145, 49,178, 2,170,128,236,179,200, + 22,123,205,214,109, 20, 25,148,250,234, 67, 0, 92, 0,194,146,113,138,146, 79,159,133,127, 86,215,205,128,168, 92,148,156,246, +221,118,171,207,160,229,136,231,232, 96,125,254,232,102,234, 41, 69, 82,254, 37, 76,242,196,225, 76,148,192,173, 66, 56,249,219, + 39,218, 53, 4,225,184, 72,244,241,216,240, 87, 0,178,174,228, 53,141, 40,140,207,162,227,140, 70,141, 53,141,137, 86,163,198, +132,210,157,210, 82, 40,129, 4, 90, 10, 33,135, 94,122,232,161,127, 77,255,157,210, 67,105,146, 83,104, 74, 67,160,189,180,144, +165,144,224, 37, 80, 4, 99,181, 46, 51,206,230,204,235,247,125,239, 25, 19,130, 50, 23, 69,103,121,239,125,203,251, 45, 87,243, +119,121,226, 52, 41,140, 75,194,209,180,129,198, 11,236, 98,119,100,252,198,158,137,176,200,146,175,123,250,200, 99,183, 60,241, + 57, 71,119,134, 68,203,146,132,155,170, 55,114, 99,154,158,138,103, 2,241, 83,114,113,166, 4,211,134,231, 86,240,242,124,143, + 48, 54,138, 58, 81,211, 71,174, 41,246, 74, 89, 0, 15, 44, 20, 2,150, 60, 32, 35,156,129,103,253,170, 50, 54, 47, 64,254, 8, + 74,176,191,126,182,209,234,181, 28, 50, 66, 35,165, 35,105, 38,153, 77,233,137,237, 95, 59,212, 23,129,105,169,245,135,131,223, +141,211,119,171,111, 15,206, 14,124, 18,214, 37, 29, 46,177,237, 67,247,120,100,185,118, 62,147,239, 88,109, 93, 51,218,102, 7, +241, 24,254,208,246,108,184,158, 82,182,104,186, 38,228,112, 40,136,192,148,245, 39,175,234,141, 58,156, 65, 24,202, 58,121, 1, +194, 29, 91,156,171,253,233, 54,112,220, 35,147, 21,149, 9,156,104,128,243, 78,133,204,157, 25,186,130,251,190, 24, 39, 20, 67, + 67,141,191,137, 33, 71,200,213, 25,195,133,114,225,254,237,165,159,251, 59, 78,255,124,111,111, 23, 6,211,218,234,243,135,143, + 30,231,114,179,229,234,226,247,111, 95, 62,125,252,176,181,185,105, 15, 77, 67,143,226,218, 37, 69, 44,199,143, 27,233,106,165, +182,255,227, 96, 48,148,138,249, 37,219,147, 15, 79,234,228, 20, 18,190, 88, 91,153, 47, 20,190,238,238,190,220,120, 3, 85,249, +241,225,113,181,186,252,121,107, 27, 81,228,126,104,251, 35, 40, 42, 97,226,187,142,203, 41,131, 16,149, 29,207,154, 77,231,135, +152, 23, 99,218,129,186, 54,132,131, 32,141, 17, 46,116,133, 15, 94, 83, 53,238, 29,140,201, 97, 24, 36,180, 41, 42,227, 68,244, +239,152,109, 56,166,180, 36, 58,240, 49,118,169, 7, 13, 11,247, 20,172,170, 23,185, 9,214,203,151, 90,130, 83,122,210,242, 48, + 90,140, 56,234, 70,226,174,208,116, 84,196, 54, 0, 82,220, 24,155,207,150,168,186,194, 62,111,207,250,103,104, 6, 85,120,168, + 59, 68,200,174, 64, 88,145, 41,220, 18, 73,177, 93,139, 35,216,161,158,139,107,241,142,213, 34,192, 67,140,176,164, 18,212,248, + 70, 12, 53, 73, 74,217, 5,211,238, 94,182,122,224,103,197, 41,239, 36,186, 25,142,249,186, 98,228, 32,111, 32,158,244,125,168, + 8,177,195, 11, 53,177,139,142, 66, 72,237,142, 69, 99, 2,178, 73,112, 45,126, 69,112,111, 29, 15, 69, 95,164,177,172,129, 66, + 17, 79, 37,201,235,168, 26, 38, 96,125,215,212,164, 36,191,127,179, 82, 94,127, 32,153,110, 4, 45,183, 8,232, 72,233,187, 68, +234, 44, 10,174,202, 8,154,140, 35, 8, 6,241,101,136, 95, 64,144, 32, 4,191,136,148, 43, 74,201, 12,249, 37,135, 4,182, 39, + 53,199, 32,176,122,189,147,122,163,159,188,151,175, 44, 15, 45,207,243,177,165, 0,213,158, 74,233, 61,196,220, 80,142, 56, 30, +170,195,148, 42,165, 66, 49, 55,117, 35,115,212,244,142,118, 78, 43, 42,211,158,222, 50,210,137, 68,223,181,134, 14,105,235, 49, + 21,242, 85, 95,110,118, 60,126,195,225,194,113,228, 48,193,232,226, 29,117,206, 50, 89,202,215, 98, 81,189, 99,118,239,150,238, +184, 35,223,166, 98,125,236,205,194, 72,243, 78,228,230,194,241, 85, 22, 46,202, 66,193, 94, 52, 30, 4,226, 30,183,187,232, 99, +152, 66,181,185, 69, 8, 24,205,238,185,224,166, 42,145,116, 34,221, 30, 52,209,163, 65,184,165,203,240,215,229,217,242, 95,179, +133,144,124,174,177,133, 36,187,248,205,212,220,192,235,139,209, 71,221, 35,142,236, 25,255,157,164,107,137, 70,231, 12,226,254, +208, 49,209, 30, 0, 30, 40,234,131,146, 24,133,204,216,196, 67, 94,172,171, 73, 35, 77,186,184, 1, 95, 99,145, 77, 66, 85, 5, +155,176,123, 25,124,135, 64,101,220, 63,164, 48, 29,207, 32,163, 28, 3,140,116,209, 51,185, 42, 7, 41,179,107,126, 32,112,248, + 47, 0, 85,215,177,219, 68, 20, 69,167,188, 41,111,154,187,211,228, 20, 22,192, 34, 8, 80, 0, 9, 33,144, 88,129,196, 47,240, + 79, 17, 31, 66, 22, 72,240, 7, 72,148, 77,136, 16, 82, 18,146, 40, 74, 66,138, 33,138,199,246, 84,123,204,189,247, 61, 59,206, + 42, 11,199,214, 88,190,229,220,118,206, 84,124,151, 37,176,108,137,142,198, 60, 94,177, 28, 8, 72,154, 54,120, 94,131, 54,105, +209,166, 77,143, 84, 29, 6,234, 77, 70,236,177, 54,252, 13,141, 18,117, 50, 64, 71, 38,128,129,207, 3,108, 95, 12,242,140,100, + 24,197, 91,179, 28, 23,110,133, 84,176,236, 63, 78, 95, 68,200, 79,197,152,238,219,149, 18, 15,226, 65,164, 93,255,162, 74,171, +186, 8, 16, 9, 50, 4,129, 29, 69,112,153,137,114,106,251,120,167,159, 70, 79,111, 63,250, 19,182, 53,170,202,163, 44, 10,227, + 30,182,103,153, 14,104,189, 18, 84,227, 44,169,184,149,157,211, 3,176,224, 94, 26, 97,229, 94,228,220,116,163, 44, 22,164, 66, +200,174, 49, 26,118,163,238,210,204,114, 39,234,180,106,139,144, 78, 83,100, 61,195,132,211,137,123, 67,154,101,141,242,162,222, +108,213,131,230,214,254, 22, 20,187,120, 91,111,216,115,213, 5, 72, 48,150,105,173, 46,174,238,253,221, 35, 98,213, 33, 56,139, +226, 22,182, 65, 96, 11, 69, 30, 84,206, 21,238, 64,172, 87,109,166,187,142, 26,184,154,239,168, 16,247,137, 98,167,176,172,145, +161, 15,118,183,127,110,108,124,216,220,220,132, 4,228,123,154,109,107, 15,158,189, 89,185,179,182,179,245,237,221,250,250,225, +241, 41,248,134, 97, 34,193, 89,150, 22, 73, 50,236,246,210,114,165,244,240,222,253,207, 95,190,130,193,207,207, 54,203,229,224, + 96,127,191, 90,230, 22, 67, 13, 69, 29,101, 88,210, 39,207, 95,159, 29,254,250,244,241,125,251,226,252,228,228,196, 50, 69,107, + 25, 80,144,222,108, 84,123,189, 56,203, 48,114, 1,250,112,205,210, 69,183, 93, 16,201,204,245, 81,130, 60, 27, 44, 0,206, 15, +105,220,130, 93, 56,186,228, 17, 56, 22,237,117, 50,191, 25,111,139, 32, 43, 8,158, 65, 13,166,183,120, 71,196, 0,209, 8,102, +194, 56,212,212, 27, 99, 57,139, 33,151, 25, 33,154,169,177,228,136,116, 76,201,159,176, 86, 34,241,116,176,174,171,254,101,154, +246,225, 17, 25, 51, 36, 69, 38,145,149, 17,181,137,100,206, 41,243,138,205,156, 44, 23, 29, 27,141,184, 34,112,119,220,212, 89, +134,205, 89, 44,252, 39,219, 19, 73,134, 27,159, 61,242,255,170, 91,131, 39,209,198,148, 5, 3,114, 63, 97,245,166, 97, 58,150, + 7,240, 5, 10,130,146, 87,129, 58, 93, 56, 17,157, 71, 73, 69,120,145, 2,179, 2,143, 65,133,109,207, 85, 22, 24, 51, 1, 75, +137,107,187,185,242,124,156,198,210,182,233, 15, 29, 35, 51,219, 64, 25, 38,207,178,116,221,121,181,178,244,242,237, 11, 37,112, +148,186,171,132,125,150, 15, 10,161, 3, 70,164,112, 66,106,213,102,204,133,188,100,155,168,177,158, 35, 3, 6, 49,131,170, 28, +170,214,214, 45,197,247, 48, 98,228,200,154,148,227,107, 16, 86,147,163,131,227, 43, 99,101,249,238, 90,146, 0,174,231,220,230, +196, 69,137,235, 8,196,245,129,149, 28,238,222,104,140,251,190, 19,148, 44,238,207,206,212,152, 31,124,255,113,198,127,159, 85, + 31,207, 91,117, 15, 66,124,183,159,224, 90,189,162, 6, 53,214, 63, 74, 46,243, 76,151,250,210, 98, 21,125,228,154,220,179,189, + 8,225,145,210, 40, 55,118, 79,247, 28, 30,128, 99, 94,116,218,200, 78, 74, 67, 87,169,142, 61,158,153, 59,182,143,146,181,130, + 46,163,144,225, 97, 60,201,152,240, 75,139,112, 38,210, 61,166,250, 90, 80, 3, 64,150,102,169, 24, 2, 33, 15,168,198, 28,203, + 69, 24, 65,244,192,240,143,240,213,195,184, 3, 32, 0,188, 49,224,165, 8, 27, 65,104,145,255,194,243,225,120, 53, 11, 2,149, +107,187, 0,199,134,242,166,143,150,192,200,176, 73, 83, 16,219, 63, 56,177,195,187, 57, 60, 57, 1,243, 7,224, 88,226,229, 56, +239, 79, 36,136,177,178, 47,134,144, 9,228,208, 72,232,181, 76, 29,147,210, 10, 74, 46,217, 16,112,207,184, 19, 38, 29,186, 34, + 20, 2,175,163,107,106,232,155, 33,126,210, 69,215,198, 13,156,255, 2, 80,117, 45, 61, 77, 68, 81,120, 94,157, 14,211,161, 51, + 29,166, 60,154,130, 13, 2, 38, 4, 23, 24, 23,254, 8, 13, 63,207, 45, 59, 23,238,220, 24, 18, 18, 37, 81,211,152, 24, 69, 13, +186, 48,172,160,133, 54,165,143,233,188, 95,158,115,238,157,162, 59, 10,233, 45,153,158,123,158,223,247,157,210,191,203, 18,255, + 21,141,152,114,132, 34,231, 78,173,137,210,222, 52,238,175, 86, 80, 75, 65,226,203, 99,114, 54, 19,101,156, 32,200, 7,170,178, + 70,251, 72,243,197,138, 88,118, 43,153, 58,155,248, 79,255,148,253, 13,158,201,147,237,103, 35,119,144,145,116, 52, 35,172,102, + 8,170,169, 48,217,126,169, 44,123,139,114,135, 33,161,212,216, 10,107,129,140, 56, 33, 12, 99, 86,174,204,198,119, 64,196, 14, +162,185,109,216,224,148, 19, 52, 38, 74,225, 69,113,103, 99, 7,202, 43,120, 57,241,221,148,184,139,237,149, 86,203,218, 24,123, +119, 40,236,130,169,122, 62,114,239,252, 36,130, 28, 13, 78,235,143,251,164,127,148,153, 53,107,197,116,252, 8,105, 53,105,193, + 24,204,152, 68,192,105, 65, 24, 52,106,182, 85,107, 64, 84,128,160,194, 58, 75,144, 20,128,125,232,186,121,252,229,245,166,186, +117,250,254,109,203, 90, 31,249, 99, 36,139, 4,115,248,247,163, 52,190,188,185,132,195, 15,218, 7, 61,247,198,174, 54, 2,213, + 71, 6,109, 6,198, 32,197, 81, 49,243,178,152, 72, 65,138, 88,137,147, 34, 77,149, 32, 68,209, 37, 28, 83, 43,185,166, 22,211, +153,119,213, 27,160, 47,193,105,172, 50,115,179,159,231,191,150,228,236,209,254,222,171,227,151,215,189, 30, 92, 63, 47, 72, 61, + 47,245, 33,250,225,110, 88, 28, 86,218,150,177,187,179,253,233,115, 23,108,126,217, 48, 58,157,205,139,139, 11, 73, 86,133, 66, +190,190, 25,126, 59,255,254,226,249, 81,103,239,113,247,236,164,219,253,216, 31,222,249,126, 22,135,121,152,176,237, 78,121,211, + 90,134, 16, 53, 24,142,209,157,229, 50, 34,214,147, 64, 16, 74,114, 57,223, 83, 92, 84,229, 42, 60, 31, 42, 33, 69, 85, 89,130, +152,193,208,193, 82, 57,114, 95,176,213,196,210, 55, 83,230, 66, 82, 89,121, 78, 87,171, 82, 80,243, 13,156, 35, 78,195,248, 34, +198,123,217,108,214, 92,150, 22, 61,107,178, 49, 68,250, 43, 10, 4, 23,200, 20,249,104,178, 64, 13,242,195,206,211,137, 63,134, +139,141,108, 85, 74,165, 37,198,233,160,238,246,138,225,192,169,144,115, 33, 17, 73,128, 60, 23,238, 97, 35,205, 99, 36, 82,197, + 62, 38,143,164, 81,195,171, 79, 82,162,226,224, 91,145, 87,202, 5,159, 21, 18, 84, 20,157,136, 99, 27, 14,100, 12, 33,194, 80, +210, 76, 72,161, 32,152, 7, 51, 12, 3,100,161, 4,140, 42,235, 95,248, 34, 52, 51,198,245,184,188,135,239,134, 51,194,252,240, +137,171,135, 43,223,242,114, 38,201,156, 59, 87,146,129, 50, 75, 87,225, 71,225,104,183,253, 64, 40,134, 95,167,170, 82,151, 91, +138, 48,245, 37,184, 22,216, 94,196, 72, 43,227, 86, 94,105, 9, 66, 77, 77,175,168, 50, 56,255, 0, 61, 28,238,236, 69,255, 94, + 85,229,173,135, 66, 77, 67,155,142,146, 34,140,162, 36,142,130,200,157, 78, 7,179, 74,173,185,255,238,195,233,201,217,155,243, + 31,159, 6,183,125,203,112,108,219, 97,200, 21,108,225,224,234, 28, 72,140,144,254,106, 53, 77,236,114, 40, 90,173,110,218, 78, +227,207,173,159,253,190,106, 30,174,169,203,186, 50, 14,230, 81, 12, 15,172,162,169,226, 60,191, 28,185,124, 88, 65,243, 42,188, + 74, 80, 35, 98, 59, 38,101,116,135, 48,142, 32,119, 78,200,119,171,106,181,105,174, 87, 85,213, 3,207, 40,146, 52, 21,162,150, + 83, 40,223, 83,234, 54, 66, 96, 70,165, 54, 18,106,133, 0, 80,215,234,200, 48, 72, 83, 83,183, 16, 68, 75,245, 59, 91, 97, 8, +207,144, 42,134, 98,205, 92,243, 98, 15, 18,175, 57,124,233, 89, 2, 65, 29, 62,182,174,155, 34,117, 35, 36,154,216,194, 13,133, + 67, 2,130,238,172, 90,171,179,208,109, 59,155,182,222,152,248, 83,198,244, 68, 9, 62,244,123, 5, 19,144,208, 53,131,218,111, + 60, 20,149,176,125,174,234,175, 98,241,151,192,135,114, 55,197,242, 83, 50, 95,211,176,253,112, 86,220,247, 63,184,160,191, 84, +202, 7, 72, 92, 14,169,100, 1,163, 80,176,217,178, 90, 99,127, 34, 46,118,247,114,183, 94,252, 79, 8,189,119,250,127, 5,160, +235,234, 90,155, 6,163,112,146, 53, 73,211, 52,237,218,178, 58,252,152,236, 3,101, 42, 50,189, 28,234,127,240, 70,216, 31, 16, +188,244,239, 8, 94, 8,187, 16, 84, 6, 42,138,119, 34,130, 58, 81, 68,111, 68,102,157, 48,221,218,181,179,109,154,143, 38, 75, +235,115,206,105, 90, 21,100,151, 13,109,150,188,239, 57,207,121,207,115,158,103, 20,223,153, 50, 60,114, 90, 45, 59,101, 59,227, +232,170,209,139,220,146, 83, 9,185, 33,150, 40, 99,109, 40,222, 59, 36, 65,167,135, 84, 89,196,216, 15,120,166, 61,190, 87,246, + 42, 36, 13,175,132,135,213,139,185,146, 73, 72,200, 32,135,226, 84,251, 78, 82, 20,192,172,232, 67,201, 46, 63,117,244, 12,246, + 97,215,239, 8,149, 50,245,153,165,227,111, 84,190,216,255,196, 72, 37, 90,113,134, 39,108, 99,201, 46,211, 68,112,238, 75, 77, +205, 67,219,131, 74,190, 10,244,196,102,170, 44, 95,167,202, 57, 15,173,122,210,225, 75, 14, 89, 25,123,216, 13,220,253,222, 1, +175, 12,148, 66, 78,217,169,116,124,220,255,208, 13,122,109,191, 43,230,118,248, 20,144,191,225, 54, 81, 81, 38,169, 10, 58,143, +218,170,121, 43,223, 79,162,182,223,166, 59, 97, 50,237,220,204,201, 70,187,137,149, 26,162, 44,112,221, 76,221,184,183,177, 94, +111,238, 90,166,133, 82,160, 90,156,105,123, 29,238,149, 17, 18, 75,212, 33, 18,242,133,133,149, 90,125, 43,178,176,210,105,239, +225,139,145, 67,188,144, 4,182,113,141,141, 74, 88,215,178, 68,117, 80, 1,217,144, 91,189, 0,245,189,202, 74, 48,138, 8,124, +227,135,251, 97,191, 90,157,189,126,227,230,179,199, 79,214,239, 62,192, 83, 7,176, 35,124,195,170, 70, 60,207,130,208,128,202, +192, 92, 93,189,188,245,117,135,189,113,244,133,249,165,215,111,223,163, 14,203, 89,122, 54,163,160,116,191,182,182,230,148,103, + 31,221,191,221,216,111, 33, 50,116,123, 73,183, 23, 70, 17, 21,249, 22,130, 71,222, 88, 92,152,255,240,233, 51,112, 64,194,174, + 80,150, 89, 20,235, 86,153, 36,207,154, 54,118, 5, 96, 98,217,153,161, 38, 7, 53,168,227, 73,181, 57,233,249,255,229, 19, 41, + 56,100, 32, 38, 46, 10, 13,130,179, 42,183,216, 5,169, 98, 72, 45, 4, 88,178,234,165,115,140,196, 78,137, 85,227,118, 43, 77, + 80,170,153,132, 22,152, 66,186,111, 52,177,161,176, 83,133, 65, 66,164,124,152,203,173,176, 92,116, 24, 24, 70, 14,152,202, 64, + 77, 66,163, 88, 1, 2,129, 54,106,182,209,239, 16,124,165,217,209, 4,185, 65,130,175,154,154, 36,171,130, 54, 82,105, 89,236, + 23,199,204,115,107,142,240, 96,201,174,224,186, 32, 14,125,252,177, 40, 21,183,118, 75,204,145, 31,233, 67, 13,184,198, 24,243, + 70,241, 37,209,160,159,254, 35, 44,234,198,210, 76,127, 24,119, 78,196, 74,166, 70, 7, 79,196,243,211,169, 11,162,103,117, 29, +217,244,234,233,227,166, 57,253, 42,156,251, 94,143, 23, 47,218, 74,167,163,133,132,209,145,254, 85,166, 23, 91,186,225,216,150, +157, 55, 73,167, 58,138, 67,132, 52,242,193, 35, 64,131,135,144, 61, 54,175, 20, 44,186,155, 48, 74,188,176, 23,246,125,207,111, +181,218, 47, 63,110,223,121,120,235,233,230,243,189,221, 90,237, 71,109,243,203,187, 23,111, 54, 14,189,120,121,233,188, 97,232, +196,109,193, 93,200,112,201, 84,166, 92, 41,169,136, 6,212,151,193,109, 25,197, 66,113,123,207, 53,190,253,156, 94, 57, 98,105, + 83, 81,211, 3,198,192,165,150,161, 53,118,251, 1,123, 22,138,254,199,200,226, 99, 16,139,241, 99, 16,251, 41,151,122, 40,103, +238,110, 64,220, 68,108, 49, 89,237,162,159,114,233,220,149,157,214, 14, 22, 6, 5, 31,130,203, 3,233,177, 47,159, 56,219, 34, + 25, 50,138, 24,220, 68, 37,242, 52,242, 61,106, 89,141, 84,187,135,128,170,109,175, 13,208, 22,240, 9,240, 24, 53, 32,171, 33, +110,224, 77, 97,169, 32, 67, 88,166, 77, 39,108,204,199, 79, 72,232, 34, 6, 2, 16, 23,117,141,181,214,228,112, 95, 56,227,248, + 90, 92,204, 42, 81,244, 2, 11, 86, 1, 72, 78,180,235,228, 37,227, 33, 75,183,120,236,186, 58,177, 99, 69, 76,227,236,174, 77, +240,203, 80,253,151, 75,165, 49,209,106,180,102, 80,219,253,242, 15, 82,163,246, 33,183, 52, 84,146,199, 25, 12,254,215, 95,253, + 45, 0, 91,215,178,211, 68, 20,134,207, 76,219,105, 75,111,216, 78,161, 84, 48,186, 48, 49, 49, 17, 47,137,241, 9,136,134,141, +137,225, 5, 76,186,144,119, 33, 62,128,110,124, 12, 93,187,193,133, 27,118, 32, 81, 20, 2, 8, 21, 74,103, 58, 51,103,152,142, +255,247,157,105, 33,198, 46,155, 52,211,158,211,243,159,255,242, 93, 12,254, 93,153, 6,191,249,222,242, 31,157,107,116, 64,215, + 28,253, 9, 48,208, 32, 19, 40,243,163,202,198,185, 82, 31, 45,180,150,238, 47, 45,239,159,238,201,189,234, 99,201,240,164, 60, +175, 80,248, 51,113,198, 51,140,134,212,233, 45, 68,242, 87,206, 8,126, 89,107,222,168, 57,155,179, 44,191,174,239,157,122,193, +192,154,168,229, 25, 38,140,100, 85,247, 22, 31, 92,140,206,225,219, 66,109,104,227,209, 8, 89, 84, 40, 29, 88, 22, 37,202,167, + 64, 73,115,198,194, 48,160, 80,176,233,203,243, 34, 77,104,137,113, 5, 80,176, 13, 43,177, 62, 83,239, 54,187,251,253,131, 1, + 92,125, 19, 26,202,208,124,212,200, 27,209, 97,221, 24,253, 38,134,153, 67,252,109,215, 93, 58, 30, 28,117,111, 44,202, 69,120, +120,126, 12,194, 23,215, 80,202, 40,121, 88,171,218,246,227,225,183,221,237,195,147, 3,137,251, 26,210,213, 81, 2,175, 63, 73, +203,199,121, 9, 82, 16, 70,141,229, 77, 29, 75,126,237,231,170,182, 28,185, 32,196,193,139,233,194, 42,143, 44,231, 10,118, 98, + 7, 33,228, 64, 57,124,178,128,196, 4,233, 41, 37, 95, 73,210,153,148,182,150, 8,253,189, 94, 79, 54,112, 99,227,237,147,229, + 71,191,143, 14,201, 0,130,203,153, 20,129,177,134, 72,164, 68,105, 41,111,215,223,172,175, 60, 95, 89,123,245,114,117,245,197, +101,228,111,126,217, 44, 21,161,206, 51, 10,244, 66,123,126,237,117, 79, 37,241,135,119,239, 79,135, 17, 85, 79, 18,199,130, 24, +153,241,139,174,151,202,161,175,191, 31, 28, 23,114, 69,148,240,105, 18, 74,112,164,143, 95, 14,116, 4, 77,214,122, 42, 1, 81, +174,121,123, 10,250, 82,214,191,147,159,204,228,224,202, 31,198,192,113, 51,128, 57, 73,105,166,151,106, 3,162, 78,169, 25,179, +137, 6, 27, 55, 54,140,132, 12, 43, 60,197,212,160, 41,202,130,156,220, 78,142, 1, 82, 66, 52, 50, 16, 13,246, 78,226, 8,249, + 35,220, 77,148,249, 85, 30, 17, 36, 90, 21,140,197, 40,201,207, 44,204, 48,230, 32,182,147,217,174, 90,116,161,201,163, 17,127, +169,221,198, 28,218,244,224, 76,200,218, 70, 68,118,167,161, 14,169,152,143, 4,144, 13, 93,204, 10, 37,127,143,129,180, 67, 98, +212,153, 93, 64, 32, 32, 5,111,210,116,204,148,148,166,120, 72, 18,169, 82,183,214,146, 7, 73,224,148,115, 84, 42,204, 84, 74, + 85,246, 63,199,236, 26, 35,121, 7,210, 81,174, 43,201,175,108,251,161,235,198,243, 79,207, 84,209,243,245,173,162,237,180, 19, +213,247,168, 47,135,122, 82,118,183, 38,159,111, 53, 85,165,146, 4,129, 47,233,177,134,205, 41,192,147,168, 8,243,141,206, 45, +244,118,242,240, 31, 72, 36,181,241, 61,111, 56,218,218,222,253,248,249,211, 88,123,119,171,234, 78, 69,117,203,170,229, 40, 73, +112,190,238,108, 73,110,255,120,249,153, 83,130,164,129, 83,148, 98,187,224, 20, 11,205, 78,211, 98, 3,128,195, 76, 48,167,235, +179,245, 95,251,231,183, 93, 75,221,172, 58,253, 81, 16,201, 37,170, 74,229,220,143,157,179,129, 84,207,144, 44,118,100,131,185, +224, 0,202, 38,202,116,255,233, 34, 73,198, 56,213, 18,128, 54,208,252, 41,182, 17, 49, 0,222, 48,255,243,100, 15, 23, 48, 61, +161,212,181,204,225,228,236,136,132, 60,182,118,105, 53,104,131, 13, 27,101,211, 32,139,218, 88, 84, 43, 54, 81, 72,130,146,172, + 13, 74,135, 52,113, 0, 69,206, 55, 43,238, 69,116, 17, 73,196,179,149, 91,107,123,145,135, 54,163,201,200, 51, 88,223,148,170, +111,160,125,120,181,171,109,169,251,107,165, 26, 88,108,146,140,150, 27,218, 56,184, 18, 17,163, 97,173, 48,213, 80,176,174,187, +125, 1,128, 48,137,230,178,255, 82, 34,132,144, 0, 73, 51, 31, 44,149, 9,215,167,147,238,228, 4,212, 56,149,202,176, 56,135, +111, 5,122,100,228,122,254, 27,226,255, 10,192,214,213,244, 38, 17, 69,209,199, 99,152, 25,102,166,237,240, 85, 10, 72,211,104, +109, 34,213, 6, 77, 12, 11, 87,238, 93,152,184,241, 71,152, 24,127,143, 27, 87,254, 19, 93, 24,173,105, 45, 77, 26,235, 23, 77, +106,169, 22, 10, 76,203,192,192,140,231,222, 55,208, 46,220, 17, 8,240, 6,222,220,123,206,125,247,158, 19,207, 55, 33,207,112, +250, 96,115,250,132,252,227,181,251,195,158, 58,135,140,213, 63, 52,147,115,140,106, 91,166,196, 5, 18,250,243,244, 80, 29, 80, +171,240, 58,101,117, 79, 41, 84, 75, 12, 21, 55,168,201, 86,211, 61, 53,176, 39,174,154, 60,227,143,157,147, 79,174,162, 72,169, +252, 51,137,187,221, 91,171,255,237,181,241,201,167,131,147,113,232, 43, 29,253,220, 98, 97,189,184,129, 8, 18,198,197,211, 4, + 31,223,113,247,177,144,197,133,101, 80,102,134, 99,177, 53,176,178,159, 76,198,254,145,241,148,138,154, 84,164,128, 64, 71,233, + 58, 82,250,152,109, 70,241, 63, 24,134,149,100, 26,192,163,138, 20,154,149,230, 6, 16, 19,126,229, 9, 55,182,112, 8, 64,132, + 5, 3, 31,113,121,135,156, 28, 26,183, 31,238, 29,237,227,211,203,185, 74,110, 49,215,241,186,212, 24, 46,249,240,134, 97,105, +192,210, 87, 92, 22, 8,129, 35,106,229,187,157, 33, 21,109, 82, 66,115,114,164,252,103,235, 41,215,214,236,180,102,232,132,139, + 10,142,225,166, 53, 51,157, 0,118,214,212, 16,165, 70, 23,162,235, 9,220,250,166, 46, 12,242,167, 18,195,203, 73,227, 65,227, +233,179,231, 88,210,239,214,225,171,151, 47, 62,125,120,223,233,246, 16, 16, 72,124, 36, 68,124,167,190,206, 0,228, 59, 24,127, +255,214,220,254,248,238,243,246,135,253,189,221,157,221,157,211,179, 19, 16,237, 96, 18, 13, 46,253,251,245,173, 71,143,159,180, +190, 54, 95,191,121, 43,166, 64,232, 92,225, 4,145, 31, 81, 36, 0, 17, 95,118,237,131, 31,199,158,231,211, 57, 24, 85, 6,217, +127,155,147,244,205,149,141,206,224,204, 49, 23,167, 12,171,231,243,214,242,154, 81,217,204,215,151,182,103,198, 2,229, 26,202, +196, 92, 73,140,138,205, 69,183,132,219, 3,248, 32, 98, 87, 78,229,141,200,123, 41,153,152, 43, 51,177, 62, 23, 16, 58,169,181, +196, 30, 61, 4,106, 73, 48,148, 70, 58,117, 45, 73, 7,161,105,178,213,166, 18, 52,187,204,197, 58, 7,116,187, 77, 65,150, 53, + 94, 54,189, 19,168,141, 68,160,121, 55, 7,108, 9,135,213,108,173,214,219,231,237,153, 73,232, 12,107,241,210, 65,215, 44, 61, +141, 8, 73, 83,199, 92,111, 85,206,156, 82, 41,103, 51,135,198,119,229,173,172, 31, 12,101,220,225,174, 84,241, 4,113, 14,164, +243, 9, 77,201,129,164, 98,169, 97, 24,196,253, 93,156,236,150, 28, 55, 8, 64,133,101, 37, 87,233,121, 61, 32, 6, 42, 60, 74, +234,208,224,163, 93,130,126, 43,153,138,239, 95,232,196, 75, 36,246, 0, 53, 70,138,177,105,151,138, 27, 13, 37, 85,116,116,212, +189,117,199, 17,157, 46,217, 60, 78,148,195,184,182, 84,200,139,181,117, 97,101,162, 62, 88,101,159,218, 32, 3,206, 99, 4, 88, +228,114,161, 44,220, 5,108, 38, 92,222,228,220,235,116,189, 78,175,255,165,185, 47,123,199, 85, 83, 20,117,225, 36, 69, 54, 41, + 50, 41,225,104,212,173,213,108, 29,172,230,171,155,155,117,252,228,166, 97, 24,184, 24, 51,149, 47,231, 1, 52, 72,133, 38, 69, +146,196,120,160,102,191, 47, 90,199,217,218,162,230,135, 65,159,240,141,233,164,100, 91,254,234,247,163,248,223,157,112,189,133, +198,197, 71,220, 18,139, 39,107,213, 77,188,234, 13, 47, 74,217,146, 31,248,216,101,213,236, 13,203,196,117,232, 35,242, 80,141, +240, 24,223, 80, 91,173,245, 46,187, 4, 53,176, 89,147,164,114, 95,114,203, 0, 28, 58, 18,135, 72, 84,178, 85,106, 90,227,193, +220,180,158,118,237,204,130,237, 34, 91, 91,186, 99, 27, 22,194,183,242, 97, 99, 87, 18, 26,168, 12,249,228, 31,132, 30,193, 61, +226,141,133,149,120, 99,143, 89, 91, 34,140,253,249,226, 99, 33,133, 51, 98, 13,101, 46,193, 96,157,120, 29,247, 87,126,169, 48, + 24,158,143,198, 35,197,240,184,120, 19,205, 20, 76,163,217,140,147,140,174,244,165,229,117, 46, 27,132,129, 18, 98,153,113, 87, +122, 15, 13, 62,178,110,249,245,182,201,185,124, 0,151,233,137,113,206, 10, 50,255, 9,241,255, 4, 96,235, 90,122,155,184,162, +240,153,183, 61,143,248,145,132,152,150,132,128, 64,162,139, 10,241, 43, 42, 36, 22,253, 3,253,109,221,116, 83,169, 59,118,168, +170, 20,117,209,150, 69, 11, 34,230, 41, 82,176,101,130,237, 56,241,140, 61, 30,103,158,156,239, 92,187,166, 85,189,178,172,235, +177, 53,247,206,121,126,231,251,214,252, 98,218, 74, 60, 62,205,151, 45,127,219, 47,125,180,182,208,208, 80, 37,148, 10,220,226, + 50,107,135, 38,184, 56, 84, 94, 41, 62, 91,203,133,251,102, 3,164, 65, 14,160,127,117,237,235,215,167, 47, 16,122, 8,191,154, +177,118,128, 13,175, 29, 45, 38, 21, 41,198,171,255,145,112,187,218,190, 54, 56,239,191, 27,157,240,207,240, 86, 13,206,122,120, +114, 96, 28,203,113, 52,154, 45, 34,133, 33, 53,244,141, 19,147, 70,165, 51,156, 13, 17,224,136, 65, 80, 14, 87, 40,176, 57,237, +202,116, 3,255,186,144,144, 64,244,187, 56,170,130, 68,134, 95, 11,112,140, 80,222, 38, 17, 93, 2, 56, 45, 92,134,142,225, 34, + 24, 44, 69,196,136, 13,122,134,154,187, 40,217,149,157,230, 23,163,240, 99, 14, 74,180, 84,117,210, 56,118, 59,122,126,132,129, + 26,195,232,157,245,250,147,190, 48,103,150, 55,246, 14,199,209, 25, 31,181, 74, 95,211, 76, 20,165, 93,119,111,236,221,124,125, +250, 82,147,146, 42, 95, 62,240, 12,243,146, 68,169, 68, 7,245,245, 82,207, 80,106, 16, 29, 87,228,227,160, 8,215, 68, 51, 4, +236,175, 96,165,162,178, 48,160,212,148, 19,199,223,247, 31, 60,160, 45,239,233,207, 15, 79, 94, 29,255,248,195,247, 81,120,110, + 3,208,130, 0,159,192,112, 84, 74,178,194, 54, 76,123,252,184,155,229, 32, 92,229,200,143, 31, 75,203, 66, 63,210, 52,203, 86, +160,221,187,123,155, 40,239,254,245, 71,221, 46,154, 13, 11,221,164, 74,155, 67,162, 16,105,104,163,110,245,250,227,225, 89,200, +187,205, 15,132, 99,250,109, 63, 56, 61, 31,168,253, 58, 25,190,212, 81,115, 95,174, 25, 11, 96, 37,159,245,158, 40,203,206,105, + 92, 94,165,174,229, 9, 93, 48, 76,121,203,223, 13, 69,106,135,189,139,239, 52,166, 9,208,171,192,210, 96,212,133,143, 74,173, +200,147,253,246, 65, 80,247,187,131,174, 2,183,215,141, 58, 27, 77, 9, 7,140,120, 57,175, 86,165,124, 67,249,240, 18,168,249, +235,156, 81,225, 24,152,142,107,187,188,184,225,181, 72,106,169, 2,112,230, 36, 58,187,221,185,243,118,248, 70, 0,136, 74, 19, +186,248,178,121,208,159,188,247,164,250,135,185,243,100,122, 17, 79, 68, 2,253, 51, 4,130,156, 47,148, 33,202, 34, 78,102,174, +227,214, 44,182,242,139,255,232, 79,241,157,228,235,164, 89,202, 79,169, 9,254, 32,170,100,172, 87,104,167,116,161, 72, 84,122, + 76, 58,116,110,104, 69,202, 7,234,205, 44,117,157,122, 14,241, 24,164, 17,152,230,204, 82, 83,215, 55, 96, 58, 9,204, 76,205, + 78,146,153,174,138,178, 82,219, 5,205,181, 94,117,246,239, 81,174,255,246,251,163, 95,255,124,244,247, 96,112,119,251,187, 43, +157, 70,117, 49,229, 45,183, 73, 11,124,143,110,221,161,189,171, 20, 46,200,241, 96, 85, 75, 33, 8,147,243, 89, 85,201,108, 26, + 6,241, 21, 10, 28, 32,234, 13, 61, 77,243,139,249,101,153, 68,135, 46,141, 82,234,198, 20,151,212,177,232,192,161, 67,116,103, +105,113, 78,191, 28,253,116,255,155,111,125, 15,134,220, 48, 76,155, 3, 95,223, 50, 50,225, 1, 70,106,101,207, 38,209,114, 30, +183,118,154,227,161, 77,227, 57, 53,157,173,173, 90, 25,177,187, 37,203, 45,149,228,119,170, 88,126,149,199, 22,182, 78, 69,120, +213,237, 31, 3,183, 74, 36,243,234, 48,118, 31, 46, 62,168,145,105,222,130,253,221,235,156, 3,157,140,223, 61,123,127, 28,184, +190, 18, 85,226,251, 80,233, 43,249, 4,126,241, 13, 76,210,152, 67,177, 93,111, 39,185, 68,173,140,111,126,219,223, 6,174,151, +170,105, 28, 42, 41, 50, 53,175,146,175, 52,227, 53, 33, 20,194,229,148, 18,200, 74,230, 64,202, 65, 90,241,143,106, 55,222,112, +140,143,193,207,203,197, 26, 61,130, 66,193, 86,176, 51,137, 70,242, 21, 54,167,197,110, 99,239,227,244,116, 61, 19,162, 72,136, +181,122,205, 91,136,106, 24,175,106,123, 45,213,249,251, 76,113, 67, 83, 56,185,127, 11, 33,168, 15,149,177, 84,195, 37,213, 58, + 36, 80,227, 20, 24,127, 5,102,118, 67, 19,191, 89,163, 94,159, 4,160,234, 90,122,154,136,162,240,237, 76,231,209, 41,109,105, + 74,107, 65,229, 97, 68,141, 4, 99, 98,226, 3, 3, 11,227, 6,137,137,137, 75,127,154, 91, 23,186, 48, 1, 99,112,103,162, 63, +194,133,137, 65,147, 22, 44, 76,233,116,218, 78,103, 58, 47,207,119,238,180, 8, 27, 22,148, 73,239,220,123,207,249,206,235,251, + 50,252, 78,176, 93, 14,127,211,250,200, 19,250,177,143,230,110,230,158,167,207, 26,104,200,167, 72,105,194,164,111,201,227,219, + 91, 4, 34, 48,198, 57, 43,248, 94,200, 17,100, 25,118, 66,223, 9, 84,173, 85,182, 47, 76, 91,194,242, 71, 1, 93,212,156,178, + 90,191, 49, 10,134,146,106, 40,155,231,133, 30, 16, 92,174,235, 57,244, 48, 30,100,167, 99,233,192, 2, 22, 42, 32, 60,136, 88, + 64, 81,234, 36,193,149, 34, 70,155, 50,131,228,150, 23, 86,200,212,210,247, 96,111, 6, 11,144,231,191,114,165, 27,217, 37, 3, +100, 38, 82,249, 25, 70,103,235,214,163, 32,153, 52,231,155,246,160, 23,160, 15, 16,166,149,110, 90,199, 57, 77,153,196,124,128, +121, 57,209,172, 54,251, 35, 55, 68,150, 64,177, 10,112, 6,244,114, 26,213, 38, 61,170, 86,170, 51,215,138, 32, 88,199, 35,172, +170,152, 82,178,208,187,122,189,251,230,220,182,187,131,110,200,106, 33,153, 18, 1,194,207, 4,132,230, 35, 71, 58,105,144,198, +165,232, 83,177,242,202, 92, 33, 87,182,212,154,165, 47, 20,180, 18, 69,190, 41, 65,112, 12,216,168,240, 52,105, 48,193,237, 25, +251,160,113,244,104,123,124, 8,165, 18,110, 91,106,212,191,125, 62,124,255,225, 99,223,241,143,126,183, 66,127,162,147, 49,200, + 35, 10, 34,148,153,196, 41,173, 13, 97,153,174, 21, 12, 3,225,148,150,183, 12, 77,103,189, 77,203, 80, 44, 83, 41, 22,180,251, +155,247,170,229,226,167,131,253,191, 39,103,113,146, 27,143,195,209, 8,216, 17, 12,180,116, 6,130,228,248,212, 5, 91, 3,146, +217,113,192,149,207,116, 38,139,192,105, 81,110, 10, 39, 11, 85,166,168,147,252, 95, 86,153,100,117, 14, 58,130,139,243,139,174, +215, 39,180, 71, 43,237, 14,207,184,236,141,127, 65, 14,132,209, 77, 38, 16, 4,168,130,152,221,241,122,184, 48,220, 2,175, 43, +122,146, 37,214,125, 54,163,115, 96,240,144,188,248,104,229, 50, 36, 86, 30,195,238,139,122,165, 49,244, 7, 49,243, 40,140,193, +240,149, 99, 90, 18,141, 94,252,205,107,119,219,246,159,114, 1, 80, 78,206, 25, 81,204,225, 7, 94,173,212,112,189,158,204,198, +128, 70, 98, 54, 80,152,165, 80,176,167, 58,122, 69,244,136, 37,160,125,104,182,229,166, 51, 39,211,116,186,130,246, 19, 68, 54, +105,202,242, 76,224,248,157,196, 81, 78, 92,232, 91,200,144, 37,143, 78,127, 69, 2, 57, 40,190, 32, 60, 34,136,128,134, 28, 93, +213, 70,193, 32,149,220, 73,233,180,109,128,175, 50, 65,126, 19, 84, 16,161, 76,202,233, 80,193,142,150, 42, 75,207,158,190,218, +255,242,246,240,235, 59,225,245,162, 73,188,110, 36,235, 79, 54,195,147, 30,189, 78,180,217,172,174,137,245, 59,130, 27, 15, 82, +119,208,183, 59, 4,236,113,212,163,204,208,155,197, 74,165, 60, 47,202,166,208,243,138, 51, 62,181,123,173,174,227,157, 28,133, + 99,247,192, 22,223,135,226,103, 32,218, 62,240,251, 50,133,140,170,240, 83,209,234,217,207,183,247,174, 92, 93, 68,125,195,212, +138,229,185,124,211, 18, 90, 78,152, 8, 97, 98,119,228,245, 6,180,141,186, 6,242,134,138,223, 81,139,134, 58,142,100,134,217, + 63, 15,127, 28,119,185,217,151,171,103,204, 54, 70, 33, 81, 44, 36, 64, 69,159, 12,178,139,216, 88, 28,158, 90,169, 74,223,183, + 81,110, 68, 44,229, 68,183, 79, 87, 13,242,217, 47, 30,236,182,237,118, 16, 6, 38,129, 78,110, 45,245, 2,207,204,235, 43,245, + 53,119,232,188,124,184,215,168, 52,126,117,142,232, 41, 59, 27,219, 69, 3,253,111,116,138,182, 55,118, 90,231,199,180, 35,215, + 23, 86,233,242, 96, 82, 50,139,160, 16, 71,200, 44, 12,109,118,213,170,134,172,254, 42,164,223,225, 44, 95,214,148,137,217,139, + 2,185,240, 8,245,219, 12,177, 66, 14, 51,242,232, 23,104,106, 0,240, 85,200, 15, 12,186, 88, 14,127,130,211,110,152,165, 98, +197, 46,156, 40, 83, 55,104, 45,134,102,114,253, 38, 17,211, 68,165,108, 22,160,141,142, 80, 44, 20,178,145,132, 29,141, 52,240, +233, 37, 20, 63,203,131, 92,110, 76, 23,255, 37,131,232,231,159, 0, 92, 93, 89, 79, 19, 81, 24,189,157,153,118, 58, 91, 59,180, + 69, 54, 13, 9,196, 37, 16,183,132, 24,141,137,154,232, 79,244,151,248,194,139,137,190,251, 98, 12,196, 0, 69,192,165,180, 80, +232, 50,211,118,246,241,124,223, 29,132,248,212,151,166,203,189,243,237,231, 59,231,202,191,107, 85,216,216,106,107, 13,254,183, +204, 36,139,220,206, 15, 37, 49, 47,172, 40, 76,166, 78,197, 65, 21,217,170, 45, 28,119,219,231, 94,159,178,173, 92,240, 76, 95, +143,210, 98, 82, 36, 65,163, 5, 18,185,164,192,171,200,200,194,156, 54,106,221,116, 81, 31,193, 90, 46,198,231, 87,197, 43, 25, + 49,203,167, 81,122,141,212, 50,229,102,191,236,183,193,162, 86,154, 52, 47,150, 91,103,168,182, 36, 85,211,250,226, 61, 4, 64, +201,235, 33,101,122,134, 62,222, 35, 92,226,107, 38,145, 57,187,106, 61,187,251,226,232,252,135,100,236,207,105,213,165, 44,137, +155,121,179, 33,179, 13,203, 11, 38, 62, 21,101,190,107,207, 85,136,251,174,234, 5,211, 40, 67,246, 4,243,169,112,121,152,122, +179, 9,173,170,243,225,227, 86,166, 72, 13,242,204,159,142,240,107,253,112, 2,107, 68,249, 12,195, 70, 34,147,114, 86,132, 63, +100, 27, 52,142,255,186,247, 37, 8, 67, 98, 19, 75,115,124,151,212,178,102,126, 81, 82,185, 51,116,130,106,241, 19,162,168,153, +237,143,130, 44, 80,179,137,154, 76,212, 60, 82, 45,197,116,205,106,203, 49, 92,211,152,183,107, 78,217,212, 51,205, 86,213,154, + 80,107,154,102,106, 42, 62, 83, 45,104, 29,196,225, 65,251,251,254, 30,254,163, 91,211,203,196,228,152,149,137,105, 43,139,225, + 14,241,203, 34, 82, 41,102,188, 68, 49,214, 64, 16,173,106,112,196,138, 67, 70, 77,145,195,247,146,221,157,131,207, 31, 63,237, +183,143,240, 92, 33,132, 48,191, 78,174, 43,121,211,212, 42,229,236, 87, 55,154,193,171,167, 44, 58, 94, 8, 86,146,159,194,249, +192,237, 82, 3, 7,101, 18,107,136, 80,181,199,119,162, 22, 59,220,130, 56,224, 74, 57, 13,202,132, 48,170,136, 44,196,163,196, +249,114, 9,238,149,248, 50,185,218,125,188,250,164, 55,234, 20, 59,229,255,120,155, 81,178,113, 76,185,229, 46,195,181,193, 32, + 41,204,227,196,137, 8,143, 0,115, 18,152, 75,232,143, 40,176,141, 26, 78,120,117,126,173, 59,232,144,110, 23,140, 36,142,173, +138,133,175, 35, 86,169, 44,237,141, 78,241,116,109,222,126,212, 27,116,184,129, 71,235,199, 72,198,135,147,129,132, 21, 80, 95, + 91,211,241,153,142,110,195,252,175,155, 75, 10,171, 63,167,180,234,188,212, 88,246, 3, 95, 33,233, 12,130, 63, 74,250, 35,198, + 99,210, 68, 7,167, 65,194, 6, 44, 79,129,108,131, 33,204, 33,183,248,133, 82, 76, 35,148, 43, 86,115,193,171,176,196,186, 17, + 51, 36,159,205, 36,171,104, 58, 7, 74, 10,236, 26,245,237,200,168, 73,203,155, 26, 26, 49,109, 42, 33,101,230, 37, 38, 60, 4, +175, 54, 95, 39,105,240, 97,251,253,134, 45, 30,184,162, 89, 22, 90, 52,219,122,251, 50,235,245,225, 84,108,199, 18, 79,183, 68, +189, 78, 28, 3,211, 36,243,252, 97,255, 52, 40,240,145, 82, 87, 61, 43,149,141, 70,173,161,154,134,168,155,196,186,121, 54, 58, +236,245,199, 23,221,163,254,112,123, 44, 36,250,218,227,154,253,161, 37, 44, 85, 76, 51,209,241,196,155,231,239,214, 55,238,163, + 54,212,225,162, 22,234, 98,142,123, 0,227, 40,185, 28, 39, 81, 72,224, 10,106,195, 83, 4,170, 14, 79, 52,199, 32,224, 47,110, + 28,153,245, 32,252,118,220, 87,120, 11,137, 1, 0,178,213, 94, 72, 40, 73,253,106,137, 84,194,233,161, 4,165, 27,135,239,142, + 9, 40,169,112,166,184,212, 92,232,123, 23, 97, 24, 12,166, 3, 83,183,150, 26, 75, 81, 20, 54,237,230, 74,243, 14, 30, 66,127, +230, 91,186,121,124,118,178,220, 92,254,115,254, 19,151,181,223,105, 95,248,253,197,250,194,165, 63,216,253,189,131,144,128, 20, +196,181,221, 9,117,123, 74, 50, 54,200, 68,197, 50,236,132, 17,180,179,100,134, 0, 40, 73,102,184,113, 75,190,145,100,102,217, + 91, 33,105,136,210, 88, 41,238, 83, 58,102, 38, 24, 82, 72,123, 50,205,227,149,198,237,131,238, 30,197, 95, 81,172, 31,203,209, +122, 76, 83,220, 2, 71, 24, 16,110,135,217, 21,210, 92,118,241,243, 27, 35,213,150,211,154,240, 72,175,116,205,110,159,219,122, +141, 1, 96,133, 90,138,114, 53,138,189, 1,145, 44,253,231,226,229,203, 95, 1,152,186,146,222,182,141, 48, 58, 28,145, 34, 69, + 73,150,183, 36,181,108, 56, 73,235, 0, 69,155, 30,122,110,255,115, 15,237, 33,183,244,210, 91,129,102,113, 27, 35, 8,144, 52, +150, 45, 57,182, 37, 75,162,196,109, 56,236,123,223,136, 70,111,130,109, 88,228,172,223,242, 22,255,222, 29, 6, 75,244,223,233, + 39, 54, 78,119, 15,175,238, 46,164,166,194,168, 28, 33,115, 90, 82, 86, 44, 41, 86,216,185,123,253,221,130, 26,121,149,183,145, +223, 51,186,165, 15,182, 14,191, 44, 39,172,203,184,116, 66,109, 40,235, 30,221,151,104, 88,140,207,113,212, 69,254,139,189,189, +211,221,191,169, 39,149,232,235, 75,130, 19, 96,110, 10, 98, 66, 17,209,229,174,142,217, 64,127,212,247,199, 63,142,254,250,173, + 22,250,213,178, 22,151, 28,107, 63, 76,222, 75, 30, 98,181, 72, 2,187,161,198, 51, 93,207, 39,178,122,188, 69,186,248,253,239, +151, 72,157, 42, 10, 66, 80, 39,100, 69, 80, 60, 9,216,157, 40,194,125,254,234,211, 91,105,198, 40, 76, 54,222,232,244,243, 59, +217,111, 92,100,156,123,199,175, 85,206, 68,178,133,207,200, 54, 10, 49, 71,167, 17, 90, 16, 74,185,134,245,156,162,174,188, 42, +143, 91, 49, 62,159, 12,159,141,167, 19,156, 77,248,159,233, 44,237,197,125,250, 91,181, 60, 28,212, 73,126,193, 92,208, 86,157, +118,247,122,113,245,108,248,205, 44,153,183, 21, 98,234,248,167,111,127,126,241,234,215,101,166, 22, 89,201,177,104,145,227,152, +124,190, 57,218, 57, 89,155, 91,227, 77,135,251,241,195,237,184, 31,245, 25, 67, 82, 80, 92, 27, 67, 74,148,248, 2, 33, 27,173, +214,189,160, 50, 56,254, 12,226,110,155, 83,190,110, 69,156, 27,226, 73, 47,167,195,158, 71, 85,100,202,184,213,129,182, 33, 30, +200,110, 68,102,241, 83, 54,202, 34,109,108,138,156,173,139, 16, 72,216, 31,149, 37, 33,192,171,116, 47,168,223,143,210,146,165, +161,128,130,107, 84, 13,176,120,193,188,202,145, 1, 96,215, 37,212,155,163,237, 60,121,138, 2, 10,230, 3, 18, 2,108, 28, 95, + 81, 38,200,115,218,166,171,108, 37,138, 61, 4, 95, 25,178,251,210,163,221,195,241,221, 37,198,249,108,116, 42,185,138,252,161, +246,113, 64, 19,123,174,105,187,252,252,233, 15,167, 31, 95,183,233, 68,165,165,217,197, 97,199,201,128,179,165,168,112, 7, 91, + 95,104,138,113,216,195, 97,122,118,254,198,121,102,224, 16, 92,107, 27,132,237,176, 14,211, 60, 21, 22, 2,139,149,255,140,222, + 96, 52,152,228,121,222, 86, 56,200,202, 85, 24, 4,248,206,146, 22, 72,190,132,210, 89,106,138,189,173,131,105,130, 16,196,123, +188,127,140, 36,140,200, 72,202,196, 75, 13, 93, 25,191,102, 29,127, 43,218, 94,102,139,134,171,193,146, 11,169,243,165, 21, 85, + 3, 43,220,189, 18,239, 18, 82, 3, 69,115,203,208,117,128,104, 83,182,254, 52,194,133, 30,174, 37,135, 16,195, 3, 15,186, 59, +201,122,145, 23,105, 99, 83,225, 9, 11,181, 46,234, 76, 17,126, 34,246,100, 90,164, 10, 36,252,193, 65,125,244,224,248,143, 63, +127, 57,110,177, 5, 58,175, 84,132,247, 40, 19, 69,209, 8,221,193,168, 15,135,234,224,145, 42,156,218, 55,219,179,174, 10,114, +239, 59, 74, 88, 68,178,152,206,150, 95,221,116,212, 94,172,118,251, 59,131, 24, 65,140,241, 59, 51,171,141,178,129, 16,193,113, +196,206, 69, 13,188,235,171, 46, 46, 24,114,218,173,223,143,124,228,143,237,128, 18, 52,120,137,235, 84,153, 82,208, 21,156, 51, + 42, 52, 98, 85, 44, 91,200,170,112,172,171, 40,196, 21,209, 46, 75,172,180,237, 40, 90,152,116,163, 7, 86,253, 79,145, 80, 36, +197,197,188,116,141, 95, 98,181, 99, 34, 16, 59,102, 6,249, 40,150,131,254,250,209,201,229,108, 60,186, 62,247, 85,128,200, 44, +208, 65, 86,172,199,179,201,147, 7, 79, 61,178,198,219, 87,243, 9, 29, 5,130,240,203,108, 60, 79,238, 30,110, 99, 6,167,131, +206,224,249,147,239, 46,110, 47, 17,228,176, 93,111,171, 85,182, 60, 27, 77, 49,230,123,253,253,236,110, 93,107,103, 96, 67,156, +140, 83, 8,108,104,210,174, 47, 40, 66,231, 72,179,136, 6,118, 21,104,223, 39,216,103,211, 2,181,247,204, 37, 98,187,233, 85, +112,121,123,142, 0, 92, 82,246,194, 85,250, 58, 65,188, 34,202,220, 33,110,154,118,176,251,150,166, 66,173,155,170,140,150, 93, +237,188,126, 55, 80, 94,185, 37,210,124,105, 93,203, 82, 10, 53,181,128,106,170, 13,243, 67, 53,248, 72,175,110,140, 43,238,153, + 82,255, 9,192,213,181,236, 54, 13, 68,209, 25,219,177,199,118,211,216,105, 30, 45, 45,173, 2,168,106, 23, 32, 4,136, 10,137, + 71, 43, 86,240, 7,176, 97, 1, 72,124, 26, 95,193,130, 13, 66,168,162, 69, 32, 80, 21,104, 69,219, 52,105,146,230, 81,219,117, + 98,199,230,222, 59,166, 84,172,179,137, 61, 51,215,231,220, 57,247, 28,137,223, 19,129,182, 6,140,108,234, 82, 50, 59, 36, 65, + 18,187, 48,138, 66, 5, 85,232,226,240,228, 16,155, 62, 92,254,165, 68, 33,163,165, 65,128,115, 40, 42,203, 68,250, 26, 87,209, +157, 3,157, 16,227, 98,190,232, 97,235, 80, 93,172,212, 6,193, 9,177, 96,207,214,167,224, 49,150,231, 87,209,157, 7,243, 25, +162,236,166, 42, 83,137, 82,179, 73, 65, 41, 94,253,104,135, 76,198, 51,134, 98,225, 85, 85,132,185,149, 82, 30,207,101, 3, 79, +177,117,115,161, 84, 91,191,190,222,234,183,147, 73, 36, 12, 43, 70, 31, 31,245,188,149, 85,154,174, 4, 33, 48,235,164, 90,168, +158,134, 94,150,243,196,161,112, 7,205,193,241, 36, 51,173,207,156,232,101,242, 58,206, 55, 77,226,194,148,211,247,251,240, 59, + 16, 23,140,118,131,195,163,219,152, 64,141,178, 45, 92,175, 91, 87,110, 11, 67,248,161, 55,235, 94, 66, 9,144,170, 30,118, 15, +224,201, 37,104, 5, 32, 25,132, 62,249,130, 26,240,164, 64,226, 96, 31,220,185,186,182,211,252, 81, 48,221,238,217,201, 94,123, + 47, 78,198,183,107,119,201,255,168,111,229,140,162,229,194,235,191, 86,173, 89,194,106,244,246,161,102,124,233,215, 63,214,119, + 63,212,247,182,127, 31,236, 52,143,182,142,154, 63, 59,157,250,113,155,161, 12, 30, 96, 72,194, 13,107, 28, 33,208, 40, 8, 99, +198,178, 22,167,167,203,192, 0, 76, 81,177,196,172,101, 94,118,236,146,101, 20,128,205,106,128, 50, 82,224, 72,176,204, 80,169, +130, 16,209,125,140,205, 12,142,206,177, 42, 23, 34, 45, 76,165,121, 19, 0, 84,202,199,172,209, 8, 14,186, 1, 74,128,128, 14, + 72, 3, 39, 12, 42, 17,142,233,222, 91,126,208, 26, 30, 83,170, 6, 55, 48, 56, 8,248, 58, 42,204,132,102,234,134, 25,199,145, +146, 89, 68,100, 83,158,138,212,165, 2,199, 50, 29, 77, 81, 80,139,166,106,116, 25,133,213, 80, 0, 71,209, 40, 57, 80,198, 45, +164, 50, 64, 30,129,252,147,181,167,219,245, 45,132,173,210, 48, 68,242,119,248,119,201, 8, 77,190,209,114, 75, 0, 22,132,115, +235, 78,205, 0, 74,130,117,133, 37,155,115, 47,119,134, 45,168,170, 47, 30,191,250,252,107, 19,165,218, 36, 92,159, 45, 46,148, +243,101, 47,240,201,154, 10, 83, 76,201,199, 52,148,151,104, 99, 12,212,197,171, 88,160,113,168,201, 73, 83,192,248, 40,234,192, +182, 17,198,155,204, 57,243, 80,119,112,252, 2,239,181, 34,158,254,157,166,145, 54,146,132, 76,128,230, 78,178,192,102, 84, 34, +186,246,140, 15,251,159,168,245,195,213,141, 32,196, 56,116,248,150, 88, 57, 75,106, 1, 97, 63,220, 88,186,185, 79,190, 8,179, +206, 2,214, 5,169, 30, 73, 1, 13,152,110,190, 4,251, 7,205,242, 80, 74,133,167, 21,133,145, 60,209, 57,127,180,114,239,211, +230,219, 57, 45,122,239,177,119,125,214, 28,177,121, 53,221,120,184,150, 14, 60,213,208,249,173,155,172, 84, 70,240,126, 54,102, +240,141, 30,156,246,218,141, 48,194, 68,221, 88,134, 36,209,110,215,109,199,210,114, 57,219,128,253, 13,252,180,121,216,110, 14, +189, 97,183,253,221,147,221,105,116,217, 93,214,217,125,151, 9,133,181, 70,172, 23,178,231,207, 94, 58, 43, 53, 6,165,220, 52, +228,140, 22,250,202, 27, 80,120, 21, 60,151, 26, 78, 20, 41,182, 8,142, 26, 90,111, 55, 87, 41, 49, 91,199,209,242,201, 36,232, +120,187,251,167,222, 4, 35,222, 51,143,132, 36,141, 57,221,183, 82, 45,115,109,199, 31,157, 17,156,242, 1, 36,189,126,242, 6, +222, 67,103,208,133,165,104,245,154,176,154,139,213,165, 83,168, 78,105,188, 80, 90,204,155,121, 0,248,237, 65,203, 15,209, 16, +184, 63,236,214, 42,181,185, 98, 85,211, 69,111,208, 1,140, 12, 31, 6, 91,183,190,254,254, 6, 44, 92,182, 89,228, 29, 15, 89, +144, 34,201,132,195, 8,199,124, 38, 95, 70,217,251, 56, 76, 50, 40, 47, 91, 53, 36, 73, 33,209,220,136,122, 6, 23, 47, 47,149, +127,137,234, 50,172, 0, 13, 62,131,216, 39,175,211, 40,205,230,150,101,131,135, 3,230, 82,168,255,192,206,189,145,201,172,132, +114,125, 21,118,161,178, 75,213,172, 28,187, 85,169,115, 66,166, 73,156,166, 55,210,127, 22,123,231,142,117, 23,144,250,127,205, +153,243,159,255, 8,192,213,181,180, 54, 17, 69,225, 59,115,103, 38,147, 73, 38, 77,155,180, 53,161, 85,172, 21, 31, 85, 68, 65, + 16,193,149, 27,193,189, 11, 93,248, 19,220, 8,254, 45, 65,252, 1,226, 66,161,180, 82,138, 45,138, 36,109,146, 54,109,146,102, + 30,201,100, 50,153,151,231,156, 59, 81,113,215,210, 69,195,220,155, 51,223, 57,231,123,100,243,153,130,106, 66, 67,132,240, 10, +211,236, 98, 97,149, 41,205, 95, 80, 98,214, 3, 87, 98,227,210, 13, 63,152, 8, 26, 89, 49,103,112,142, 17,104, 70, 46,143,242, + 63,241,104, 24,198,218, 38,164,224,162,193,142, 54, 13,200, 79, 74, 74,201, 5,144,211, 71, 79, 81, 6, 39,241,158,211,229,169, + 60,103, 50,207,243, 59,232,157,137, 61,157,162, 39, 25, 47, 88, 22,246, 6,197,188,137,201,135, 12, 0, 65,142,156,166,255,104, +155,208, 33,104,224,244, 26,103, 13, 56, 39,184,174,183,234,183,186,118, 87,180,183, 34,192, 30,157, 3,104, 71,226,248,163, 36, + 27, 0,226,170,117,158, 5,137, 71, 66,251,244,152,220,232,177, 37, 71, 3, 67, 13, 10,247, 8,199,127,178, 4,197, 87, 81,160, + 37,213, 28,207,169, 87,214,205, 66,121,132,146, 7,118, 58, 60,233,187, 3,180, 73,242,156,139,241, 5, 46, 84,147, 20,176, 60, + 42, 53,200, 22, 59, 68,177,114, 44,252,109, 48,121, 59,138, 26,131, 6,124,164, 90,185,238,250, 14, 2, 94, 18,122,244, 0,201, +166,233,213,213, 77,119, 58,130, 94,175, 53,108,182,172,134,156,170, 27,181,245, 68,179,224,171, 3,255, 27,218, 17, 55, 9,220, +153,119,238, 89, 77,123,184,123,218,249,212,104,236,180,218, 65,196,172, 89,120, 58,154,254,178,172,207, 71,157,253,238,217,135, +195,230,215,102,103,187, 55,248,230,218,251, 67,203, 10,166,143,215,107,245,165,210,162,174, 47,231,243, 38,207, 25,146,106, 72, +202,162,170, 20,101, 94,214,184, 1,125,134,170,192,119, 88,215,152,174,240,145, 29, 29, 54,236,142,237,139,117, 92, 44, 2,237, +105, 76,142,235, 95,153, 31,116,246,208,198,139,238, 17,102, 46,162,199, 41,190,240,176,240, 9,126,250, 60, 81,145,252, 84,196, + 24, 13, 41,107, 24,118,136, 18, 77,148,198,196, 44, 89, 49,151,225, 88,252,153, 23, 39,161,208, 4,102, 42,229,108,190, 45,237, +254,220, 33, 58,138, 12,224,174,190,184,102, 67, 47, 72, 60, 74,209,216, 98,114, 12, 14, 79, 19,168,146,208,170, 19,184, 97,208, + 95,235, 90, 1, 10,129,202,181,239, 71,251, 80,136, 85,232, 85, 8, 65, 89,227,225,221, 43,119,131, 40, 64, 77,147,196,171,197, + 42,224,113,210,197,204, 4,193, 92, 68, 62,160,130, 31, 3, 45,112, 73,130,162, 45,218, 20, 93, 91,221, 60,185,104, 11,129, 85, + 6,230,228,108,251,144,215, 13,130, 35, 72,244, 68, 54, 78,154,148, 40,137, 16,211,180, 2,143,148, 48, 88, 92,218, 23, 45, 51, + 87,240,195, 41,224, 83,232,146,123, 0, 57, 49,216, 44, 57,119,187, 18, 6,224,112, 64, 66, 81, 6, 34,201,138, 35, 10,253, 96, +140, 30,190,232,231,194,137, 25, 38, 43, 72,214,150, 75,154,246,232,250,131,230,222,199,169,196,222,219,108,152,178,179,152,221, + 54,249,243,103, 79,216,112, 44,175, 84,216,131,251,248,212,189,144, 77,124, 54, 9,103,174,227,246,219, 33,113, 91,133,159,167, + 80,108, 41,186,161,104,133, 18, 28,100,181,200, 76, 67,237,187,205,190, 19,185,125,107, 60,233,147,241,208, 37,206,158, 47,178, +173, 34,194,244,230,152,229, 75,213,215,111,222,177,229, 5, 44,232,240, 86,128,174, 1,126,200,113, 28,193,115, 92, 47,100,230, + 79,138,100,111,127, 41,234, 51,190, 86, 97, 57,149,168, 30,177,119,108,255,232, 56, 19,228, 17, 49, 50, 1, 67,164,170,202, 74, + 25,122, 23,108, 92, 72,210, 69,109, 95,189, 82,235,219,253,175, 7, 95, 90,131, 86,217, 92,184,115,249,102,173,178, 2,135,178, + 82,172,246,144, 86,199, 1, 35, 98,178, 2,149,187, 87, 79, 95,250,161,223, 30,156, 12, 39,184, 75,187,119,231, 97,247,180, 13, +183, 14, 30,242,234,210,234,185,221,123,247,226,237,205,181,173,227,222,209, 36,244, 1, 89, 6,209, 20,110,186, 23,192, 75,151, +195, 97, 77,102, 30, 57,188,139,100, 23, 86, 54,150, 34,180, 98,143, 5,191, 29, 58,108, 54,207,100, 22,244,113,150,254,111, 0, + 6,191,151, 75,213, 32,240,209,112, 70, 34,211,168,108, 65,147, 9, 77,179, 33, 27, 19,228, 89, 66, 61, 8,166, 21,168, 52, 26, +154, 71,168,100,178, 61,119, 31,158, 19,183, 36, 10, 94, 35,183, 55, 57, 77, 98,246,215,150, 78,146,255, 41,203,255, 44,105,255, +248,244,253,253,195,111, 1,184,186,150,222,166,177, 40,124,253,186,182,155,212, 9, 41, 41,180,208,150, 1,169,170, 40, 98, 1, + 93, 32,182,108, 88, 0,107,164,153,221,252, 71,196, 14,137, 5, 8, 86,136, 5, 26,164, 78, 59,130,180, 73,154, 87,237,216,142, + 29,199, 54,231, 59,215, 46,210, 72,221,181, 77,147,250,220,123, 94,223,163,186,223,153, 6, 70,205,124, 2, 73, 85, 16,180,157, +188,150, 10,209, 43,111,109, 92,224,211, 16, 34, 59, 26,215,197, 43,142, 17,199,180,125, 42, 90,117,136,141,108, 95,219, 9,147, +192,145,107,149,141, 3,221, 92,106,177,200,250,195,244,103, 61,215,227,186, 6, 47,213,110,118, 18, 96,149, 84, 6, 3,196,248, +134,183, 21, 38, 62,128, 50, 80,129, 87,174,123,122,109,233,141,212, 6,251,233, 34, 99,171,245, 92,109,172,202, 10,116, 8, 0, + 15, 34,159, 89, 9,244,204,206,103,231, 53,253, 69,165, 41,109,187,179, 29, 81, 12,149, 42,141,227,135,119,186,123,195, 96, 64, +133,182,180, 36,150,151,140,110,239, 52,174,251, 88, 30, 2,249,174,160,214,138, 89,174,176,112, 60,185,162, 54, 80,167, 75,124, + 6,223, 47,165,238,141,149, 3,189,103, 58,207,149,243,142, 40, 93,185, 22, 47, 99,166,152, 98, 9,238,185,237,136,171,248, 44, +163, 6,190, 92,163,239,166,201,206,198,238, 69,112,209,144, 13, 6,240,161, 20, 48,117,155,222,249,193,237, 7,223,206,190,222, +233,238, 7, 73,208,148,157,225,124, 56,142, 23,203,172,176,216, 15,213,150,194,146,176, 75, 86,126,155, 82,152,174, 97, 5,154, +248,114,252,223,201,176,255,243, 98,236,227,148, 20,185,101, 59,158,103, 83, 78, 0,197, 70, 27,132,139,143,199,103,147,176, 60, + 29,173,250, 1,203,125,165, 69,184, 2, 64, 38,165, 30, 60, 55, 50, 16, 64,202, 36, 41,253,203, 98,116,145,159,244,210, 97, 16, +177,114,139,178,110, 64,177,107,234, 20,136,121,211,245, 40, 85,115, 69,105,176,200, 70,169,118,146,182,229,218,216,119,173,116, + 69,133,214, 43, 3, 6, 54,200,194,120,193,212,192, 81,162,180,103, 96,252,178, 84,150, 14, 57, 79,150,213, 63, 77, 26, 78,229, + 29, 82, 55,142, 74,175,149, 94, 66,234, 14,157,225, 73, 56,186,138, 99, 77,201, 17,176,203, 54,176,204,114,141,167,171, 13,165, +230, 31,196,190,174,244,126, 5, 70, 70, 2, 87,240, 58, 53, 76,113,186,232, 79,123, 11, 42, 18,161,140,190, 74,243,213, 50, 77, + 33, 39,171,213,210,142, 56,124, 57, 6, 78,101,237, 37, 12,230,176,148,134, 69, 13, 1,147,233,240,153,154,204,231,186,146,203, +110,187,173,104, 17,138,223, 26, 82,152, 22, 98,250,169, 91,135,123, 15,199,254,200,115,240, 44, 74, 22, 41,212,117,115,153, 37, +211, 96,164,240,157, 90,181,108,192, 66,130, 5,103,216, 11,138,167,172,183, 55,118, 98, 40,226,105,138,188, 1,225, 48,129, 25, + 29,252, 61, 74,241,240,214,254,229,233,123,234,136, 63,197,162,193,130,115,143, 91,222,139,103, 79,180,249, 92,220, 63, 16,119, +239,138, 36, 19,139, 20,245,123,146, 37,179,145, 63, 25,100,106, 83, 89,172, 42, 73, 63, 96, 30, 76,171,209,150,101, 97, 83, 98, +191,217,110, 9,109,220,155,142,163,240,145,225,123,162,120,188,174,253,121,179,124,218,194,103,234, 45,196,247,137,120,249,252, +245,225,223,127, 9,232,106, 72,212, 2,166, 86,125,169,226, 93, 71,193, 41, 28,163,152, 77,198, 31,222, 93,223,223, 18,221, 54, + 18, 0, 75,194, 70, 39,211,247,199,231, 70,237,112, 93,178,154,222, 10,138, 23, 49,147,117, 42,192, 52, 29,240, 52,203, 54, 91, +155,116,183,186,146, 74, 14,115, 30,207,255, 29,156, 70, 73, 76,213,247, 56,154,189, 58,122,217,159,246,215,157,230,102,123,235, + 50,156,132,241, 98, 48, 57,167,180, 77,177,103, 11,217, 59,251, 33,184,144,178,165,123,111,235, 15,122,112,111, 62,191,253,222, +251,103,204,115,182,189,238,238, 52,156, 58,172,121, 78, 45, 66,156,198, 71,247,142, 40, 90, 50, 80, 38, 17, 57, 32,255, 50,190, + 86,209,160,121,166, 85,220,234,236, 94, 70, 51, 85, 47,182, 26,215, 82, 40,100, 80, 35,203,156, 80,248,179, 80,209, 29, 66, 60, + 18, 78,105,248,213,117,135, 50,166, 14,214, 78,205,237,110, 57,157, 20, 52,230,154,243, 33,196, 70,179, 11, 99, 43,116,192,162, +168,128, 51,229,255,188, 53, 40, 2, 93,179, 1,210, 75,101, 99,121,197,249,168, 54, 57,218,239, 37,235, 21,120, 70, 65,143,213, +148, 91,252, 18,128,173,107,233,109, 26,139,194,247,166,118,252,138,157,184,105, 83, 53, 64,105, 21,205, 84, 8, 10,165, 48, 84, + 3,236, 24,254, 0, 27,118,136,223,128,208,252,142, 89,240,111, 16,136,213,108, 25,141, 6, 88,192,204,208,210, 14,105,226,198, +118,252,182, 99,123,206, 57, 55,225, 37,164,170,139, 72,173, 31, 57,207,123,190,239, 59,130,191, 90, 27,138,217,111,247,109, 99, + 25,194, 22, 18,190,185, 4,241, 93,140, 38,145,132, 76,146,176,170,140,194,141, 13,244, 40,133,104,123, 8, 13, 33, 60, 12, 39, + 40,122, 49, 77, 61,129, 11,174, 4, 32,130,162,252,185,149, 77, 63,158,128, 77,195,159, 67, 45, 44,214, 16, 67, 13,180,214, 89, + 7,135, 39,114, 44,210, 65, 33,252, 33, 80, 31, 59, 3,174, 54,181, 27,131,155, 31, 78, 15, 62,157,109,126, 18, 96,227,115, 58, + 50, 26,136,132,106,203,124, 89,183, 85,197, 88,177, 86, 17,144, 67, 42,125,155,171,131, 24, 69,101,249,154,189, 30,162,215, 97, +109, 14,206, 79,196,208,185,140, 83, 75,183,252,208,219,221,218,131,155, 63,211,221, 24,186, 31, 69, 52,191,188,117,245,253,232, +111,120,174,157,243, 87, 62,226,135, 69, 27,101, 70,178, 26,207, 51, 10, 47,154, 72,146,108,234, 86, 10,169,162, 98,150, 97,151, +228, 47,219,103, 47,185, 52,116, 21,249,189, 99,118,135,254, 49,201,173,212, 98,229,138,174,234,121, 89,128,193, 65,209,241,211, +224,198,195,187, 15,158,253,249, 12,190, 8, 8,179, 96, 10, 89,153, 83, 49, 66,192,123, 73,238, 89,107, 89, 89, 52, 27, 77,168, + 64,211, 25, 34,186, 78,162, 56,137, 43, 63, 46,131,136,133, 97, 29, 69,117,154, 67,232,173,147, 12,121,219,141,154, 59,211, 16, + 92,161,183,172,217,109,195,130,126, 74, 85, 33, 48, 26,170, 44,163,188, 14, 54, 89,154,140, 90, 24, 27, 22, 92, 43,134,212,146, +196,178, 27, 20, 78, 48,117,220,120, 56,137,142,198,254,209, 56, 56, 26, 77, 15, 71,254,193, 56, 56,158,248, 97,154, 67,153,131, +104, 61, 92, 46,197, 69,154,166, 58,126, 70,164, 30,156, 40,146, 2, 45, 47, 27,115,133,114,184,207, 21,163,135, 74, 76,104, 97, + 75, 96,238, 89,153,217, 70, 55, 39,178,177, 56,104, 70, 72,126, 89,252,122,239,241,171,247,175,107,154,168,227,198, 55,146, 87, +133, 26,106, 86,101,221, 86, 79,150, 36,104,207,161, 92,104, 54, 21, 40,117,193, 15,117,165,149,206,226,182,218, 1, 39,132, 10, +182,165,154, 25, 2,111, 24,137,223, 98,139,143,164,237,196,173,197, 68,133, 45, 73, 40,158,165, 64,169, 11,191,123,118,191,163, +119,112,133,192,172, 72,139,196,110,117,224,114,152, 6, 80, 88,177, 9,126, 14, 6,188, 98,174, 34, 65,175,174, 84, 73, 39, 44, + 92,181,179,113,237,116, 58, 86,112,135,157, 6,161, 89, 83, 52, 63,114,119, 54,175, 66,235,166,171,184,103,124, 46,152, 35, 30, + 29, 81, 97, 41,251, 82,183,157,207, 81, 6,240,206,156,192, 33,224, 52,228,255,156, 0,163,156,126,112,122, 10,207, 69, 51,158, + 82, 80,210, 33,235,236,110,236,121,225, 68,148,138, 68,155, 74,224,219, 21,138,146, 84, 19, 83,219, 75,234,214,208,165,220,190, +176, 31,252,243, 28,226,223,239,152, 89, 48,190,223, 31,244,111,253,124,137, 21, 57,187,118,133, 89, 54, 30,206, 68, 57,139, 51, + 6,175,111,244, 95,232,141,102, 52, 40, 38,129,135,133, 30,125, 85, 42,134,197,151,224, 86, 16,187,202,206,116,251,105,241,118, + 24,200,153,123,183,149, 93,110,213, 23, 45,156,158,255,155,214,127, 57,172,221,238, 61,250,237, 9, 27,172, 99,124,111,200,223, +209,162,149, 72, 64, 80,145, 39, 79, 95,168,217, 88,191,184,201,108, 13, 63,164,173,190,241,155,209, 31, 71, 30,237, 28, 71,229, +252, 5, 19, 84,140, 56,185, 80,238,162,131, 8,102,106,173,211,216, 75,178, 56, 47, 10,200,235, 96, 6,120, 58,215,212, 58,166, +237,120, 14,116,161, 40,206, 82,205, 78,220, 19,134, 7, 86,208, 59,240,177,239,252,178,119,231,229,187,151,219,103,127,220,223, +222, 63, 28,125,176,116,115,120,122,226,134, 30,252,135,235, 63, 92,135,250, 29, 46,177,190,124, 14, 26,110,108, 22,107, 22, 36, + 83,120, 33,120,154,138,253, 57, 35, 2, 93, 13,205,132,161, 91, 21, 70, 54,132, 84,161,252, 53,175, 53, 4, 95,132,243, 5, 28, +245,124,147, 1, 20,178,186,106,153, 40,152, 19,193, 35,224,136,133, 68,162,192, 40,210, 44,105, 32,171, 93, 76,122, 48, 8,164, + 72,171,230, 95,108,190,131,114, 42, 69,225,154,197, 26, 66, 48, 6,154,249,149,223,192, 97,138, 10,183,180, 44, 22,194,240,197, + 66,108,254, 85,136,255,172,208, 52,135,118,241,133, 4,205,255, 2,208,117, 45,187,109, 27, 81,116, 40,206, 80, 18,101,138,182, + 30,136, 20, 59,178, 93,195, 85,144, 54, 73, 19, 7,136,211, 46,130, 34, 8,144, 44,188,200, 42,139,254, 74,209,125,255,160,191, + 80,160, 63,208, 93, 23,221,116,215, 38, 14,210, 2,181, 27,203,174,100,209,178,100, 61, 76, 82,124,230,158, 25,202, 13, 16,244, + 3,108,105, 70,119,238,156,123,231,220,115,178,249, 85,134,186, 59,162, 88,172, 89, 53, 41, 45,206,101,155, 27,109,234,162, 40, + 65,198, 75,211,175, 87, 90, 83,202,224, 82, 3, 68,232, 98,185, 84,129,229,152,160, 51, 80,144, 10,218,186,105,148,148,146,178, +208, 33, 52,253,242,241, 55,251, 71,175,232,252, 16,188,122,248,233,163,238,224, 36,235,228,235, 20, 0,133,243,153, 19, 64, 25, + 23,255, 33, 82, 3, 41, 57,189, 92,180, 61,120, 40,207,193,127, 79, 23, 66, 5, 90, 38,184,172,120,169, 20,161,123,143, 94,244, +135, 61,169, 17,175,209,198,209, 47, 33, 11,219,104,181,178, 38,132,209, 25,188, 83,157, 77,217,248, 78, 50, 72, 38,169, 31,153, + 41, 59, 76, 57, 92,250,160,238,168,231, 71,243,195,254,225,103,173,219,206,164, 31,196,241,240,114, 84, 70,146,180,157,177, 67, + 81,101,230, 45,219,180, 47, 32, 15,155,214,202, 13,169, 19,153,206, 99, 47,149,198,204,141,229,166, 23,186, 62,158, 54, 35,130, +165,224,198,196,208, 47,245,231, 46, 1,119,203, 92,206,131,139,237,211,229,188, 90,105, 16, 24,113, 70,125, 90,227,147,187, 79, +127,252,245,167,178, 89,222,172,111,210, 81,165, 84, 78,193,212,170,110,160,117, 35, 29, 29, 59,131, 3, 47,240, 39,254,136,238, + 45,218, 10,171,104, 5,220, 71,181,164,167,130, 99, 97, 33,196,119,210, 32,132,241, 30,213,185,148,190,133,224,117,171,100, 24, +194, 52,140, 21,194, 60, 5,221, 40,242,178, 52,216, 44, 9,141,146, 59, 28,127,120,174,160, 9, 12,228, 83, 89,138, 22, 65,217, +151, 2,144,208, 6, 72,165,254, 66,162,138, 75, 74, 40, 34,196,156, 99,114,127,243,171,206,217,209, 21, 97, 88, 48, 81, 54, 87, +148,255,153,218, 76,138, 13,202, 23, 69, 65, 16, 27,102,117, 50,208, 19,218, 52,229,238, 45,135, 66,233,146, 75,120,142,111, 55, +111, 17,120,167, 11, 30,179,199, 76,252,213,125,203,113, 44, 21,197,149,209, 77, 6,171, 0, 76,108, 7, 65, 56,191,211,186, 55, +113, 39,170, 61, 74,223,137,138, 42,170, 24,230,145, 43, 79, 96,156,231, 5, 24, 50,196, 49, 91,196, 4, 90,127,137,154, 40,193, + 58,224, 72,147,134,237,213,118,119,120,226,122,147,177,127,209,168,172,230,128,149, 48,185, 73, 43,161, 26,220, 20,166, 23,121, +161,236,179,211, 61, 68,139,191,179,190, 67, 23, 3, 33,104,250, 2,253,241, 41,100, 26,133, 65,105,135,192,157,139, 81,198,184, + 63,234,129, 24,131,103, 52, 28, 13,216,140,164, 0, 61, 75,104,185, 64,104,140, 67,154, 87,207,104,108, 25,205, 82,151, 54, 99, +224,215, 23,242, 69,202,249,166,177,148, 61, 68,107, 84,161,250, 85,171,174,170, 88,217,116, 74,157,233,169,244, 36,145, 47, 75, + 80,234,101, 28,200, 29,189,172, 21,179, 26,196, 30,231,204,160, 35,105,216,113,228,127,253,249,151,163,222,235,182, 54,253, 39, +226,199, 1, 43,176,244,187,221,246,218,118,139, 45,153,236,254, 14,146, 0,129,119, 36,119, 66,241,151,147,127, 15, 93,247,146, + 45,172,116, 64,133, 72,149,222, 48, 90,210,162,100,231,146,164, 72, 27,218,180,141,134,109, 13,252,223,135,243,233,197,184,192, +216,225,101,242,247, 44,218, 63, 35,188,106,126,251,253, 15,230,222, 19,217,203,230,255, 51, 15,143,159, 52,252,227, 77,247,151, +159,111,220,251,132,109,214,152,105,224,212, 71, 0, 72,231,191, 29,239, 15,102, 58,210,187,244,153, 75,149,159, 75,230,189, 71, + 91,189,126,109, 99,134, 51,155, 98,142, 44,205,230,219,149,181,179,224,249,173,230, 86,239,252,148,246,102,247,139,199,185, 56, +126,123,242,103,213,174,231,228, 16,211,133, 59,162,163,212, 57, 59,166, 63, 63, 29, 59, 7,221,131,218, 74,253,120,208,161, 88, +213,225, 32,110, 52,110,172,131, 66, 39,237, 20, 9,191, 43,225, 35, 10,248,231, 15,158,117,156, 35, 53,105, 68,159,187,221,188, + 57,241,166,195,217, 64, 66,230,248,230,218,237,193,216, 73, 37, 65, 94, 1,103, 16,226,101, 99, 67,234,229,193,207, 14, 20, 3, + 40,215,224,129, 48, 89, 52,101,212,235, 75, 40,221, 37, 53, 41, 34,148, 53, 44,217,194, 87, 80, 81,184,254, 51,216, 5,159, 8, + 19,234, 31,232, 15, 47, 28,130,241,218,100,153, 22, 76, 3,175,104,145, 87,216, 93,145,178, 22,131, 84, 31,101,121,237,189, 0, +124, 93,219, 78, 26, 81, 20,157,155,140, 48, 80,174,138,130, 10,216, 24, 77,107,171,166,233, 83,147,190, 52,105,210,183, 62,250, + 5,253,137,254, 68, 95,251, 5,237, 87,244, 23,154,104,236,139, 87, 82,111, 48, 32, 50, 48,204,192, 92, 78,247,218, 7,232, 75, +211, 55, 35,193,113,102,206,217,123,237,125,246, 90,107,198, 95,197, 80,193,152,128, 26, 45,110, 40,217,134,115,241,144, 88,122, + 31, 91, 11,105, 90,116,158,239,210,114,165, 7, 10, 17,125, 66,144, 20,218, 68,136,112, 16,249, 76, 33,231,188,204, 14, 59,180, + 57, 79,154,199,244, 3, 79, 98, 41,118,255, 14,131,243, 59,111, 59,131, 86, 44,217,254,236,235,196, 34, 12, 19, 30,116, 3,185, +192, 52, 48,152,200,231,162,234, 94,253,160,235,118, 21, 49, 55,190, 65,185, 77,137, 97, 57, 87,253,213, 60, 26,142,134,134,206, + 10, 24,124,225,181, 66,109,132, 14,123,252,234,233,235,148,145,236,129,222, 70, 41,198, 96,254,177,144,178,110,202, 76,144, 52, + 22, 76,181,101,251,189,144,103,180,232,165,250,193,100, 37, 87,233, 14, 59, 56, 57,141,198,142,231,208, 95,160,128,110,247,219, + 82,197, 12,193, 75,210, 28,152,158,155, 79, 23,237, 65,155,222,226,179,141,221,253,250,254,233,253,233,251,131, 15,231,183,103, +132, 88,185, 16, 17,235,197, 42, 86,158,219,163,183, 66,181,161, 51, 26,108, 85,112,158,124,210, 60,114,188, 62,219,216, 26, 93, +167, 77,153,166,144, 46,150,243,101,186, 23,123, 96, 47,101, 43, 24,191, 33,236,160,197,148, 47,253,136, 98,144, 43, 12, 17,224, +116, 83, 13, 89,249,158,161,179, 66, 33, 30, 20, 79,140,212,243,147, 84, 12,140,150, 8, 61, 73,128, 38,101,104,166,158, 0, 69, + 91, 24, 60, 68, 77, 32,121, 65, 19,102,100,249, 2, 93,163, 32,138, 60,223, 99, 30, 59,224, 99,222,170, 82,141,133,186, 20,109, +169, 48,101,192, 83,152, 62,251,221,185,138,226,233, 48, 20, 45, 35,180,216, 35,246, 87, 97,238, 69,122,241,137,199, 70, 57, 82, +160, 13,225, 62,145,202, 89,185,161,215,135,107, 37, 26,220, 82,125, 2,180,100,186,211,164,105,161, 57,163,234,148,189, 8, 2, +163,189, 51, 99, 16,233, 51, 67, 58,214,237, 10, 30,220,142, 23,184, 89,171, 32, 71, 33,105, 11,241,222,192,167,249, 84,142, 82, + 50,253,158,160, 7, 93,165,154, 91,163,250, 0, 68,237,116,137, 0,148, 14,239, 61,170, 53, 3, 80,121, 34,216,111, 38, 88, 35, +158,246,121, 42,145, 66,129,175,225, 0,192,133, 49, 11,232, 23,244, 47, 45, 64, 18, 29,242,212,132,241,109,231,158, 71,241,208, +231,166,219,132,238, 2, 38,145, 1,128,234,229,205,250,114,195,118,108, 86, 71, 16, 84,194, 98,122,138,219, 8, 84,198, 61, 14, +187, 58, 14,249, 45,202,250, 44,124, 63,133, 38, 66,157,219, 99,171,114,236, 24,103,185, 49,212, 49, 49,241, 22,133,132, 36,122, +195,110, 66,151, 2,162, 82, 57, 67,155, 14, 68, 67, 23, 91,147, 29,163,132,110,122,147, 65, 33,179, 36,130, 0, 30,147, 90,168, +138,201, 94,125,103,109,185, 60,190,252,249,166,164, 21, 13,237,133, 22,127, 58,124,167, 36,211, 74,109, 69,217,218, 70, 91,102, + 20,240,225,234, 68,244,122,253,219, 75, 60, 17,110,188, 51,120, 23,154, 36,236,227, 77, 6,139, 86,198, 72, 36, 19,113,108, 24, +186,178, 94, 42,173,230,115, 78,112,220,143,154,237,199,150, 23,157, 57, 97,163,241,242,243,151,175,217,195,143,156,185,245,255, +185, 6, 93,223,156,126,251, 94,105,228,204,253, 6,198,114, 76, 93,170,107, 42,254,248,250, 71,243,220,245, 52, 54,243,101,249, + 15,236, 73, 20,151,102, 42, 36,240,203, 70, 31, 17,219,102,203,248,128,230, 8,243,252, 27,229,198,205,195,221,102,185,118,217, +106,210,151, 78, 46,142,111, 58,183,207,107,187,244, 45,122, 68, 84,247,108, 44,213,250,238,195, 0,103,236,121,136, 17,137,152, + 96, 56,165, 82,104,100, 65,135, 89, 45, 81,149,236,142, 46, 90,231,178,251,186,181,186, 77,105, 59,155,204, 94,180,174, 64, 64, +229,203, 24,134, 73,145,221,101, 50, 26,197, 20, 42,239,168,128, 24, 7, 35,200,239,207, 92,152, 88, 51, 21,152, 81, 58,207,201, +172, 44,203, 33,169,219, 50,111,140,139,185,238,169,208,132, 50,247,209,198, 98,207,152, 25,130,103,210,122,138,150, 1, 27,234, +154,233,197,180, 23,248,255,118,232,136,149, 49, 11,180,104,127,161,253, 92, 1, 68,204,162,188, 58, 83,113,157,118,121, 36,243, +226,143, 0,116, 93, 75,107,212, 80, 24,205,123,146,105, 50,201, 56,118, 30,125, 76, 75,165,138,197, 10, 22, 92, 8, 5, 65, 11, +186,171, 11, 69, 55, 46,221,184,112,225, 47,114,225,218, 63, 32,184,243, 15,136, 20, 65,173, 20,235,224,212, 62, 38,147, 52,147, +100,242,240, 59,223, 77,109, 55,194,108,135,188,238,253,238,249, 30,231,156, 42,190, 19, 44,224, 86,164, 82, 86, 28, 89,108, 39, +208, 97, 20, 93,168,118,208,162, 10,147,128,121,186, 37, 55, 12, 41,184, 76,103, 44,135, 29,108, 75, 2,170, 66, 4, 78, 85,141, + 54,225, 92, 22, 23,172, 67, 17,187,160,176, 85,131, 79, 55, 24,151, 65, 52, 10, 98, 95,147, 49,220,170, 67,128,206,192,160, 27, +165,210,220, 97, 48,107,117,250, 99,158, 87, 90, 47, 67,127, 40,132, 55,207, 77,165,164,210,212,105, 25,154, 56, 66,140, 26,133, + 89, 3, 82,203, 5,235, 95,106, 4,199,226, 36, 62,244,135,132,202,255,153,154,168,112,222,202, 77,179,158, 36,137,152,202, 97, +252, 94,232,186,185,117,115,139,194, 40,229,104,244,188, 20,170, 34, 10, 40,150, 77, 7, 50,161, 63,215,110,158, 68, 20,223,245, +203, 94,119, 99,229,118, 38,101,112, 17,226,119, 72,169, 70,191,189, 76,185,203, 40,162,181, 8, 97,113, 74,122,104,209,252, 30, + 13,119,135,223,114,204,154,103, 42,189, 52, 57,163,213,230, 57, 45,194,161, 78,205, 78,203,233, 92,115,126,112,178, 47,196, 46, + 88,230, 1, 68, 89,102, 63,129, 11, 59, 28, 15,101, 69, 59,157, 96, 10,147,194,144,109, 57, 86,205, 58,142, 14,184, 89,157, 19, + 96,101,243,109,142, 67,133, 80, 53, 18,198,148, 66, 78,218,104, 57,152,108,131,142, 60,171, 53,164,185, 50, 74,202,105, 34, 39, +116, 97,136,102, 9,113,227,228,146, 68,183,237,107, 18, 52,237, 42,143, 31,230, 52, 50, 62,149,166,194,223, 27, 42,219,152, 58, +151, 43, 77, 44, 88,224, 2, 47,103,153,138, 1,251, 92,150,171,150,145,161, 26,144,138, 84, 96, 72, 38,180,243, 10,158, 42,161, +116,141, 80,194,172,219,133, 27,131,196,213,111, 89,157,117,219,227, 9,129, 44, 5, 2, 29,232,163, 20,103, 78,236, 24,193, 42, +170,166, 98,201,130,145,104,123,210, 74, 64, 17, 70,168, 12, 87,131,107,248,120,108, 20,128,174, 56,106,189, 69, 30,103, 17,221, + 70,198,202, 61,204,168, 42,233,186, 43,221, 85, 33, 53,213,241,122,132,124, 99,150,125,190,214, 95,255,117,184,215,107, 46,208, +255,231, 91, 11,126, 56,178, 96,190, 67, 56, 37,231,141,170,210,163, 17, 74, 90,106, 47, 31, 7,199, 42, 6,192, 12, 65,209,160, +253,229,212, 27, 1, 96,221,145,112, 40,196, 9, 11,249,148,172,144,139,134,229,249,225, 81,194, 45,101, 12, 90, 64,205,194,164, +207, 7,229, 19,133, 14,188,153,174, 75, 73, 94,216,107,206, 99, 9, 49,133, 85,229,202,236,105, 18,205,152,245,205,181,205,175, +131,239, 66,220,128, 34, 47,219,196,227,112,106, 55, 58, 17, 59,127,170, 60, 76,105,215,108, 77, 85,226, 52, 84, 68,218, 15,183, + 15,213,211,236,167,143,159,191,255,240,174,175,197,183, 60,125,206, 80,174,110, 63,196, 40,203,245, 43, 82,171, 67,167,162,148, +164,248, 69,113,186,191, 27,142,254,160, 54,147,229, 66,219, 85, 45,217,224, 12,149, 34,180,175, 96, 46,232,184,116, 45,147, 9, +123,210, 98,179,211,241,186,153, 54, 72, 37,221,110,191,120,242,106,251,229,107,125,109, 85,202, 38, 18,232,165,181,255, 6,247, +221,189, 47,111,222,182,156,188,121,119, 93, 90,242, 36,219, 96, 15,223, 76, 34,232, 57, 60, 24,124,140,246,146,128,128, 46,115, + 21, 97,222, 66,200, 58,206, 83,209, 15,144, 49,221,212,227,112,140,157, 75, 49,253, 36,244,209,114,208,106,254,233,248,193,198, + 61, 74,190, 32, 20,200,100,195,197,214,130,219,239,169, 5, 68,108, 54,111,220,249,244,227, 51,136,205,121,249,232,254,179, 69, +175,179,243,115, 39,136,198,163,137, 79,239, 45, 76, 67, 90, 50, 33,108,118, 84, 10,160,168,191, 7, 71,104,131,151, 41, 65, 46, + 56, 91, 8,202, 61,114,140, 76,168, 16, 54,234,222,132, 89,108, 83,238,144, 87,122, 3,149,155, 77,233, 88,205, 9, 4, 54, 36, +250, 16,148,146, 78,167, 25,184, 75,152,134,148, 47,216,149,158,219, 16,139,149, 75,177, 20, 35,124,132,234, 64,149, 71, 63,203, + 53, 93, 7,149,198, 56, 69,101, 50, 19,149,106,174,204, 21, 23, 13, 87,133, 41,240, 69, 71, 99,249,220,227, 81, 62,147, 50,170, + 60,125,105,235, 85,112,190,172,204, 98,255, 10, 64,213,245,253, 38, 13, 70,209, 22, 90,104,161,116, 10, 12,152,147,196,172, 35, + 44, 51,209,105,226,140, 15,250,104,226,163, 62,152,204,127,207,196,127,192, 23, 19,223,124, 52,234,156,209, 23,151,109,137,211, +169,211,209, 82, 40, 45,237, 87,234, 61,247, 43,184,237,185, 11,133,246,187,247,220, 31,231,156, 60,190,179,225,228, 98,155, 51, +183, 74,165, 7,144,160,114,103, 6, 23,151, 83,213, 82,165, 92,170,114, 29, 13,252, 78, 25,146,142, 43,160, 16,216,249, 26, 70, +100,154, 17, 74,143, 11,102,156,214, 76, 43,156, 70, 20,170,232,122, 41,219,164,162,186, 52, 8,121,209, 79, 63, 12,128,178,209, + 96, 73,169, 28,131, 12,136, 16,226, 90,199,241,121,159, 76, 71,125,170, 54,237, 14, 86,227, 97,213,134, 59,160, 3, 70, 79, 14, +113,132, 11, 8,198,238,232,157, 65,211, 7, 93, 37, 74, 67, 37, 86,191, 78,206,235,130, 81,146,108, 82,124,153,120,115,153,125, +164,168,253,159,251,116,104,165, 79, 12,108,134,216,224,107, 28, 79, 40,190,255, 30,158, 90,104,135,165,167,222,175,195,211,131, + 49,229,124,153, 28, 88,143,226,254,245, 7,239,246,223,234, 26,239, 26,113, 43, 17,252,172, 52,109, 45,181,235,118,211, 11, 60, +250, 34, 4, 73, 8, 51, 18,232,142,227, 92, 32,158,222, 95, 86, 22, 84, 55,187, 55,220,224,108,187,183,237,141,135, 59,247,119, +190, 15, 78,160,213,197,218, 89,116,219,183,123,119, 70,129, 31,196,163,141,238,230, 15,247,248,182,115,247,123,248,181,140,101, + 83, 1, 57, 86, 93,146,118,185, 83, 40,139, 90,202,234,197,172, 89, 51,235,181,242,165, 90,201,208, 41, 22, 20,133, 90,140,102, +153, 92, 72,164, 75, 52,132,101, 42,182,146,167,143,159, 29, 30, 30, 37, 49, 60, 39,145, 87, 4, 52,150, 85, 86,237,107, 88, 45, + 58, 33,151, 43, 77,200, 42, 97,185, 33,149,154, 21,237,165, 43,163,200,111, 84, 26, 65, 18,106,232,138,228,179, 16,137, 79, 11, + 28, 22, 51,101, 49, 74,165,136,102,201, 31, 57, 4,137,159, 0,178, 41,113, 26,193, 34, 28,155, 40, 34, 84, 62,157, 78,232, 37, +180, 13, 91, 10,180,214,209,163, 8,121, 49, 33,119,178,131,193, 13, 47, 26,208,127, 90,229,154,228, 36,207,201, 65,179,220,243, + 8,156, 34, 41,184,152, 73,229, 41, 13, 34, 15, 8, 91,163,201, 40,134, 49, 34,246, 0,131,208, 47,194,173, 55,254,246,231, 72, +210,251, 77,195,116, 71,131,181,182, 99,148, 76,170, 71, 69,154,107,132, 73, 50, 97, 34,166,216, 11,226,217,175,148, 12, 76,249, +243,224, 4,157,138, 75, 80,132,174, 83, 24,176, 43,168, 93, 88,199,134,234,160,168,160,204,221,146,120,155,104,198,219, 33,154, + 92, 6, 67,175, 55, 97,161,177, 76,135, 87,101, 41,138, 41,111,165,171,141, 85, 89, 92,250,227,161,101, 84,153, 53,163,174, 54, +186, 3, 31, 11, 66,203,118,187, 97, 47, 19, 56,224,153,182,144, 6, 41,224,121,209,103, 65,159, 11, 13,208, 51,247,228,222,214, + 93,231,230,246,203,215,175,188, 73,218,176,235,235, 79, 30,226, 39,234,247,149,138,133,181, 25,128,119,161, 12,254, 76,142, 15, +232, 6, 42,205,213,140, 50,107, 50,101, 87,208, 76,227,204, 91,212, 88,234, 99,150,130,217,108,217, 58,157,122, 58, 16,150, 73, + 33,190,209,109,245, 53,211,143,162,227,179,191,250,116,118, 57, 46, 20,166,116,210, 20, 80, 85,117,109, 65,155,201,255,194,177, +255,250,205,222,139,231,173,150,222,126,116, 75,217,104, 43, 37, 99,110,198,156, 18,100, 80, 62, 29,124,120, 63, 26,204, 66,172, + 34,164,169,211,219,234, 44,119,161,134, 10, 86, 55, 87,128, 10, 61,172, 64,240,161,166, 7,231, 49,119,157, 21,208,209, 73,217, + 61,220,115, 86,214,126,184,191, 64, 12,196,100,197,216, 94,191,245,241,235,174,231,187,244,106,249,147,241, 70,183, 79,117, 54, + 21,208,159,143,190,196,169,112,218,107,220, 0, 44, 82,173,108,155,182,211,113,220,192, 29,134,163, 37,163, 70, 96,208, 13, 60, +171, 12,205,140,205,171,215,185,100, 20,240,246, 82, 21,103,165, 71, 53, 52,211, 51, 11,232, 43,168,105,169,160, 17, 78,197,124, + 37,239, 18, 35, 10,136, 89,204,179, 87, 30,242,171,153,105, 84,232,205, 19,121,168,252,223, 96, 89,116, 78, 84,166, 55,134, 32, +139,240,176,156,135, 20,244,130,197,224,131, 39,114, 61, 82, 74,210,131, 41,153,137,115,172,212, 5,188,157,219,214, 94, 80, 41, +187,160,252,174,230, 42, 77,153,188,162, 90,182, 9,247,252, 19,128,170,107, 91,106, 26,138,162, 39,151, 38,105,146,150, 6, 40, + 45,133,222,184, 15,131,162,142, 51,242,232,163,175,254,143,126,142, 15,126,132,175,206,160, 3,204, 0, 62,136, 92, 68, 6, 42, +104,105,154,166,105,154, 75,227,222,251, 36, 3,242, 88,232, 76, 90,206,217,151,181,215, 94, 43,157,175,170,170, 65,178, 77, 9, + 49,181,101, 46,162, 3, 85,249, 4,189,231,101,126,202, 75,186, 5,141, 45,221, 91, 54, 83,156,221,168,109,117, 7,127,122, 72, +105, 16,147,204,170, 13,154,110, 66, 60, 82, 78,157, 31, 6, 16,205, 33,196, 19, 43,130, 28,115,104, 45,118, 66,155,238, 11,179, +245,158,123, 15,223, 41, 68, 25, 20,221,142,124,200, 63,112, 7,188,145, 75, 53,154, 64, 54,202, 49,129, 15, 16,184,101, 26,104, +224,116, 75, 65, 49,250, 8, 55,215, 89, 76,227,236,113, 74, 85,163, 85, 38, 83, 43,172,215, 54,161, 63,128,184, 44,144,116,233, +192,183, 33,120,197,156,152, 65,231, 5,158,182,168, 79,241,189, 42,153,200, 29,104, 19, 52,129, 64, 89,222,217,124,133,164,142, + 40, 32,199,202, 92,132,106, 39, 34,183,227, 34, 56,100, 98,230,139, 56, 52,131,120,141, 60, 63, 92, 61,129,124, 14,117,248,180, + 57,115,217,253,217,152, 89,182,189, 46, 28,216, 28, 77, 87, 40, 76, 8,188,222,212, 84,220,222,132,166,210,241, 7, 55,247,157, + 81,228, 75,146, 4, 41,164, 62,215,116, 61,167, 98,213,170,214, 2, 4, 23,232, 12, 66, 33, 90,156, 89,104,204, 46, 13,195,193, + 32,188, 22, 69,197,113,131, 49, 41,243, 6,120, 61,210,233, 53, 5, 52, 84,152,180, 76, 93, 35,109, 50, 77, 19, 13, 36,171,137, +130, 34, 20, 13, 73, 87,224, 22, 35,210, 26, 96,175, 17, 31,238,237, 17, 67, 60,135, 68, 41, 44,230, 16, 97,132, 32, 2,231, 12, +174, 13,138,198,163,195,159,160,228,116,196,205,137,177,138,190,198, 73,130, 11, 26,116, 34, 11,198, 20,177,197, 5, 77,214, 84, + 37, 47,164, 36, 1,220, 48, 39,210,135, 72, 86,236, 28,207, 97,229,169,121,204, 25,166,133,108,153, 73, 82, 41, 85,116, 85,119, + 32,255, 77, 66, 46, 86, 19,227,106,179,224,141, 28,120, 61,224,202,192, 9,231, 81, 74, 98,230, 90, 73, 37,115,194,221,112,200, + 89, 27,143, 89,201,180,160,159,165, 41, 22,129,212,162,108,228, 13, 20,171, 82,161,145,209, 71,193,240,105,243,185,161,234,148, +116,171,228,228,142, 39, 19,130,153,133, 82, 83, 97,165, 52,119,121,119, 78,224,143, 48,109, 78,243,101, 84, 14,222,135, 56,160, +120,248, 73, 72,205,168, 85, 94,129,199,134,192, 42,203,232,209, 12,229, 11,109,177,138, 60,223,103,157,114,138,185, 35, 38, 25, + 71,216,180,200,136, 51,228,208, 76, 57, 78, 29, 12,176, 99,138,182, 26, 79,182,219,207, 92,207,117, 70, 54,220, 5, 44, 2, 16, +110,194,143,107,187, 61,190, 22,230,249, 14,178,140,226,177,150, 83,161,146,230,250,184,227,208, 75,200, 49,184,100,148, 17,197, + 78, 38,253,206,205,155,119,239,219,229,149,131,227,179,205,213,122,237,245, 54,211,100,214,106, 49, 89, 65,228,125, 20,179,193, +144, 93,124,247,237,110, 34,229,244,242,226,120,216,143,224,254,146,112,160,196,253, 15,113,219, 10,106,254, 24, 81, 26, 21,250, +141, 2, 23,146, 69,122, 12, 84, 13,173,242,102,117, 78, 9,252,111, 39, 71, 95,246,191,254,254,113,166,216, 67,189, 31, 72,142, +207,238, 6,172,219,103,118, 63,186,186,178, 63,127, 57,254,240,177,115,180,187,241, 98,169,252,246, 37,107,215,224,128,100, 78, +112, 68,198,116, 29,246,233,116,247,210, 11,177,172, 96,245, 82,189,247,183,115,126,117, 98, 15,123, 70,222,132,236, 5, 21, 12, +132, 20,168,178, 57,180,204,165, 1,139,186, 53, 10,135, 88, 17,170,198,250,194, 26, 36,216, 95,119,151,203,181, 53, 56, 99,144, + 50,175,161, 81,119,123,205,106,243,188,115,209,110,172,206, 87, 26, 5, 53,127,120,113,104, 21,167,225,183, 16, 46,122,110,247, +214,190,133,127, 7,252,217,206,198,206,254,233, 1, 28,120,232, 95, 85, 69,131, 34, 6, 7, 99,140, 65, 37, 7,133,149,129, 81, + 5,151,182,225, 45, 18,147,114,138, 58, 14,112,141, 95, 87, 77,207,247,176, 73,205, 64,151,152, 10,127, 90,197,225, 42, 64, 40, + 50, 59, 14, 67,120,126,138, 66, 73, 6,146, 60, 90, 46,165,207, 3, 61,125,170,152,155,249,169, 18, 73, 36, 78, 50, 77, 96,202, +184, 18,201, 20, 7,255, 59,226, 61,112,100,146, 7, 65,130, 84,225, 56,147,218,226,203, 83,236,145, 16, 55,227,195,234,127, 2, + 48,117,101, 61, 77,132, 81,116,182, 78,167, 29,134, 78,103,170, 84, 44, 66, 93, 16,121,112, 11, 18,226,155, 47, 62, 26, 19, 19, +125, 48,254, 80,159, 93,131,146,248,162, 9, 81, 43, 46,128, 5,161,204, 66,103,159,122,207,253, 6,241, 21, 18, 38,204,124,223, +185,219,185,231, 84,250,239, 37,243, 43, 39,220,158, 43,202,170, 69,159, 11,117,108, 86, 61,165, 99, 74,111,132, 32,204,177, 58, +244,190, 34,138,153,209,136, 46,124, 82,164,103,172, 25,194,253, 58,107,190,243,124, 21, 79, 94,158,187,217,115,251, 20, 33,177, + 35,143,120,112,246,194,204,194,193,104,159,253, 84,148,214,148, 19,198, 71, 65, 28,208,237, 53,116, 3, 10,232,138, 58, 78,177, +249,237,143, 61,246,230, 17,145, 8, 13,119,104, 85,230, 17,111, 27, 97,246,197,170,192, 25,179,224, 77, 58, 25, 4,163, 20, 93, + 5,193, 80,228,156, 81, 18, 13,253,161, 15,170, 37, 22,255, 96,243,132,158,154, 82,237,204, 11, 55, 76, 76,227, 84,166, 19,100, +244, 61,177, 49, 44, 43, 5, 62, 85,188,249,107,115,207, 27,210,215,162,138, 73, 48,156,132, 15,115,183,221,187,117,105,117,232, +237,252, 9, 14, 93,211, 45,132, 74,178, 4,195, 38,161, 50, 74, 64,137,181, 53,185,212, 52, 52, 40, 40,126, 16, 10,180, 76,251, +193,218,195,193,239, 65,152,120,192, 62, 69,165,103, 81, 22, 78,135,140,170, 31,148,252,101,222,172,155,245,122, 3, 66, 25, 25, +248,191, 16, 78, 81, 48,128,162, 87,241,105,248, 94,146, 53,219, 50,100, 37, 3,255, 19,136, 83, 80,242, 4,174,164,204,222,111, +136,155,229,172,109, 73,152,215,201,208,196, 46,149,184,144, 48, 1, 40,149, 44,153, 4,227, 44,103,112, 39, 96,108, 72,186,170, +213,112,197,208, 1, 69,170,233, 90,103,254,120,251,231,157, 57,186, 72, 89,154,222,190,180,182, 51,218,166,204,133,251, 90,213, +184, 72, 40,218,169,156, 27,208,123,166, 35,222,162,212,187, 72,162,108, 12,249,176, 34,235,119, 23,109,179, 29,199, 49, 11,180, +202, 76, 29,211, 5,245, 91, 97, 14,229, 82,111, 57,140, 60,138,229,112,194,226,142,182,176, 90,102,225,150, 9, 21,115,142,233, + 6,148,221, 16,130,215,160,144, 88,176, 72, 39, 68, 69,171,224, 88,157,115,180,137,184, 57, 35,216, 80,211,141, 22, 93, 6,170, + 42,166, 26, 54, 36,233,117, 42, 19, 99, 48,103, 20, 93,215, 52, 66,112, 58, 54, 80,155,226,166, 10,132,240, 64,191,145,207,217, +221,237,131, 95,220, 76,197, 31,143, 88,130, 74,158,156,234,138,157, 40,194,115,117, 36,149, 70,173, 65, 39, 51,157,164,244,242, + 9,139,155,122,179,215,185,224, 69,135,178,208, 21,228,243, 33,164,198,121,238, 42, 9,123, 79,238, 75,169,236,100, 93, 67, 98, +161, 96,119, 75,229,235,189,239, 15,193,229,144, 74,138, 79,113, 26, 11,211, 53,181,242,153,171,244,145,193,164,204,177,244, 72, +191,245,209, 66, 4,253,136, 16,208, 64,232, 77,203, 50,210, 20,185,174,235,126, 48,186,109,117,123,207, 30,223, 93, 92,155,189, +222,145, 26,153, 52,101, 64, 80,172,102, 80, 41,138,245,209,239, 95, 39,187,223, 9,128,232, 36, 39,222, 97, 30,135, 98,213, 70, + 80, 50,161, 59, 13,116,135, 1, 49,197, 11,185, 72, 40,131,210, 27, 83,146,176,192, 54, 84,232, 22,204, 58,157,171,115,203, 87, + 22,250, 29,171, 76,194,157,237, 47,159, 63,110, 12, 54,222,109,190,121,245,115, 99,253,199,235, 23, 91,111, 95, 30,239,125,235, + 95,155, 89,122,180,214,184,127, 83,178, 28, 9, 91,174,202, 73, 39, 32,151,168, 94,220,218, 28, 61,247,215,143, 66,157,203, 79, + 47, 14, 34,244,175, 40, 35, 49, 40,184, 30, 6, 71, 4, 53, 97, 60, 62, 33, 66, 87,171,253,170,166,197,108,118, 72, 21,143, 59, +237, 14,189,223,199,105, 84, 87,245, 32, 10, 41,127,114, 44,187,109, 58,244,127,121,199,254,222,209,126, 28,141,159,222,123,210, +235,244,118, 15,160, 51,232, 88,238,157,203, 43,243,221, 5,199,116, 6,195,193,234,226,202,198,215, 15, 55, 46, 94,223, 29,237, + 82,128,111, 91,109, 42,208, 49, 61,146,145, 64, 96, 82, 87,171, 55,107,205, 32, 14, 39,172, 70,199,208, 91,176,213, 85,121,170, +173,197, 67, 38, 6, 78,241,147,178,202,231,153, 3, 13,171, 18, 64, 12,230, 19, 21,196, 87, 90, 70, 18, 85, 99,182, 73,104,224, +255, 51,227,146,254,209,220, 43,157, 1,174, 76,241,208, 92,158, 40, 39,230, 8,255,103,241,242, 41, 51,166, 82, 10, 86, 41,167, +201,203,100,190,211, 39, 40,158, 54, 90, 41,187,213,139,102, 13,161,162,109,185, 81, 50,254, 43, 0, 87, 87,211,219,182, 21, 4, +159,248, 37,138,148,104, 90,178, 28, 69,178,227,196,150,213, 26, 72,130, 32, 78,155,246, 84,244, 28, 20,232,169,127,177, 64,127, + 65,211, 99, 47, 45, 2,228,208, 91, 99, 35, 40,106,197, 78, 12,249,155,166,196, 47,145,157,217, 39, 25, 65, 1,223,100, 80, 34, + 31,223,238,236,190,157,153, 69,124, 39,163,188,202,132,107,163,187, 52,170,110,186,130,240, 74,223,243,165, 41,198,168,143,251, +111,185, 1,181, 76, 85,153, 34, 50,214,172,188,204,182,123,187, 0,161, 36,205, 48, 55, 44,164, 51, 39,215,167,215,241, 37, 48, + 47,137, 39, 85, 14,192,117, 60, 25,203,221,112, 75,144,163, 37,237,108,135, 24,217,205,242,140,178, 83,228,178, 87, 90, 49,172, + 18,158,174,215,240,241, 21,200,165,213,242, 8,110,249,212,176, 85,108,215,146,249,185, 18, 27,207, 0,102, 7, 14,193, 98,111, +117, 31, 32,128, 86, 68,181,166, 12,107, 34,100,167,150,233,104,195,159,185,152, 76,154, 34, 63, 93,178,231, 37,149,181,201, 94, +170,158,110, 67,188,188,215,238, 19,101,115,244,155,235,172, 22, 46,183,234, 42,190, 24,159, 29,101, 98,195, 38, 67, 59, 73,179, + 65, 22, 53, 86, 5,155,119,181,217, 6,214,230,240, 76, 49,171, 83,174, 39,225,117, 77, 19,175,200,187,241,223,253,246, 96,183, +255,229,199,203,147, 21, 47,160, 84,105, 61,160, 44,190,141,215,119,134,136,121,155, 69, 97,179,141,208, 54,137,206, 95,142,190, + 9, 90,193,197, 20,225,163,218, 88,223,152,213, 62,184,142,213, 9,235,165,153, 81,191, 92,196,121, 68, 4, 83,149,213, 66,217, +124,150,148,247, 2,207,114,172, 6, 13, 93,137,221,115, 36,137,178, 18, 58,127,141,193, 93, 12,127, 29, 75, 53, 42,207,170, 57, + 41,253, 78,101, 28,205,176,166, 73, 28,103, 81, 52,139, 72, 14,170, 56,249, 19,167, 83, 92,100,165,177,154, 20,169, 46, 92,238, +175, 14,166, 66, 63,193, 74,181, 91, 93, 60,183,105, 22, 3,188,183,220, 80, 36,241,212, 85,116,113, 25,159, 55,189,144,225,213, +118,189,122, 43,203,103, 40,254, 80, 23,127, 49,216, 59, 62,251,247,226,102, 18,250,107,248, 25, 90,204, 94, 31, 18,152,166,141, +252,228, 59, 13,172, 8,243, 40, 45,146,145,144,109, 14, 59, 21, 44, 32, 7,157, 77,241,231, 99, 95,202, 18,239,231, 52, 7, 34, + 45,155,245,128, 13, 49,146,170, 82,154,214,137, 22, 56,246,100,224,175, 32,226,239,220, 31,253,115,122,176, 22,172, 35,119,216, +156,202,245,113, 77,158, 92,168,106,173,217, 29,109,238, 89,134,115, 27, 71,226,127, 65,193, 34, 44, 95,191,189, 49, 37, 57,101, +186,217,217, 66, 57,207,211,126, 93,200,178,142,224, 79,214,212, 92,219, 48, 57,181,105,219,231, 55,103,115, 17,150, 98, 23,165, +217,185,161,111,129, 18,190,180,248,125, 26, 86, 83,135,200,178,212,141, 31,147,162, 81, 78, 41,227,155, 60,142,178, 40, 90, 27, + 37,184, 53, 99,179,187,245, 98,103,255,104,114,100,104, 58,149,170, 33,205, 3,208,219,164,148, 6,216,128,190,227,225,106, 8, +100,168, 27, 82,122, 27,165,162, 42,138,119,139,114, 0,136,227, 39,135,135,251,225,186,181,214, 81,205,177, 50, 10,148, 54,202, + 71, 30,247,216,159, 25,143,213,209,161, 74,102, 60,150,231, 51,205,131,222, 67,182, 10,242, 84, 58,239, 74, 15,107, 50,190,115, + 12,158, 33,222, 0,222,242,188,154, 47,162,240,148,229,179,148,103,169,176,161, 30,132,238,168,223,123,190,243,232,249,112,247, +201,195,225,211,193,246,227,193,214,179,141, 71,223, 14,183, 95,237, 15,126,124,233,125,245, 84,117,123, 10, 16,130,189,135,106, +217,127,166,157,151, 58, 30,171,223, 15,254,248, 75, 93,169,212,183, 60,154, 75, 9,149, 20,183, 70, 37,159,134, 95,210,248, 48, + 85,139,145,150, 82, 51, 12,139, 90,153,229,121, 37,100,178,121,141, 74, 80, 89,177, 96,164,183,188, 0,127,192,133,173, 32,124, +127,250,126,167, 55,196, 59, 14, 48,244,235,219,215,199,103, 31,247,247,190, 62,248,112, 0,164,127,157,196,111,222,253, 25, 77, +111,127,120,245,211, 47,191,253, 60, 26, 12, 79,206, 63,137,237,237, 28,245, 98,148, 78, 83,250, 47,210,123, 93,143,193,124,247, +248,251,211, 43,252, 67,134, 20, 62,231, 1,161,131,199, 82, 72,173,169,229,113, 76,170, 3, 21,255,159, 81, 95,234,244, 98, 77, +215,131,222,165,200, 25, 25,159,217,148,225, 99, 84,177,145,200,127,222,185,119, 85, 36, 3,133, 58,236,220,105,208,125,102,100, +186,240,110, 82,119, 33,125,169,207,107, 46, 38,112,137,180, 92,195, 77, 10,164,202, 27,253, 81, 69,127, 61,205, 94, 37,158,168, + 91, 54,162,211,127, 2,112,117, 37,187, 77, 4, 81,176,199, 61,251,120, 73,108,131,226,108, 4, 20, 41, 72, 64,196,118,224,200, + 5,129,196, 71,115,130, 3,119, 14, 44, 74, 32,193, 68,206, 98, 71,241,140, 61,227,217,168,122,109, 3, 66,242,193, 7, 59,206, +244,188,121,175, 94,191,234,170, 85,126, 87, 13,128,184,173,238,157,132,181, 49, 23,213, 61, 79,152, 51, 21,137,116,249, 76, 36, +131, 40,209, 37,123,214, 37,201, 15, 85,229,161,145,201, 83, 52, 53, 64,132,166,201, 50,205,133,177, 21,171,164,148,161,233, 0, +214, 11,156,136, 46, 72, 50, 53,175, 87,206,108, 66,143,179, 60, 27, 25,193,155,102, 55,127,212,248, 68,127,161, 16,133,191, 22, +138, 30, 77,118, 12,173,114,121,192, 85, 84, 99, 43, 74, 70,136, 90,139, 47,155, 21,165,137,139,131, 77, 64,197, 56,149,177,137, +181,210,237,163, 57,131,101,227,215,118,123,123,147,217,132, 36, 1, 75,137,138, 55,133,224, 75, 97,218, 25,146, 12, 30, 66,228, + 50, 50,229, 85,253,250,233,235,190,136,185, 55,148,109,228,188,128,118, 53, 85, 29, 1,107,250,179, 60,193,178, 20,244,113, 77, +128,121,146, 92,216, 53,210,161, 33, 51,182,131,245,100, 17,251, 66, 31, 18,231,144,234,232,226, 8, 23, 12,180, 2, 80,207,237, + 8, 10,158,144, 39,183, 63, 56, 64, 74, 26,142, 79,145,229, 17, 85,168,115,103,215, 67,132,111,169,138,209, 12, 40, 47, 71, 66, + 9, 92,103,194, 35, 78,108, 19, 22, 21,105,239,233, 2,232,184, 90, 0, 85,210,118,183, 28, 32,179,121, 78, 20,104,223, 83,116, +237,224,161,144,170, 25,232, 78,212,192,211,234, 59, 86,232, 42,223, 87,141,204, 77,242,152,105,167,178,178, 50,147, 77,199, 66, + 43,215,112, 66, 16,193, 40,132,156, 22, 52,172, 84,152,160,156, 58,138,190, 18,214, 83,104,211,220,110,106,133,107, 40,207, 77, +183, 57, 69, 42,164, 53, 18,249,217,154, 99,149, 64,116,105, 60, 20,179,181,104, 13,183, 27,145,135,194,207,148,166,157,132,130, +218,181, 88, 74,217,190, 77, 23, 61,143, 36,171,185, 88,253,229,102,110,185,228,137,113,248, 92, 71, 97,187,139,228,171,234,140, + 34, 51, 66,226,108,168,151, 15, 94,205,178,120, 58,187, 14,253,136,189,147,162,143, 16,131,157,171, 92,118,194,110,156,221, 92, + 78,175, 88,147,122,219, 72,169,123,131,253,179,241,137,205,233, 8,174,185, 70, 61, 94,143,214, 63,126,126, 15,228,139,178,167, +151,222,169, 53, 25, 44,182,189, 57,216,126,243,240,149,239,186, 39,151,167, 79,239, 62, 79, 50,142,133, 68, 78,167, 54,221,140, +184,209,233,192,139,226,249, 84,172, 54,235,157,254,238, 85,124, 41,103,244,168, 63,133, 15,136,150, 53, 15, 63,122, 20,182, 68, + 42, 55, 38,159, 11, 99, 37, 97, 60,223,165,163, 79, 35,158,144,226,185,135,227,243, 99,145,214,177, 54, 58, 27, 21,165, 16, 19, + 81,169, 85, 18,208, 37,190,139,213, 6,196,161,250, 7,139,153,177, 50,224, 47,105, 71,251,174,149,214,243,243,163,111,247,219, + 29,231, 64, 30, 56,228, 98, 96,152,121,166,126,158,168,147, 99, 53,157, 34, 98, 24, 35, 69,142, 2, 18,246, 55,203, 52, 41,209, + 87, 73,195,107, 91,130,220,241,215, 28,238,202,186, 26,152,160,208,101,170, 61, 95, 53,219,168,111,203,151, 43,130, 32,174,195, +202,209,109,171,193, 45,181, 51,104,236,237,232,221,109,107,176,165, 58, 61,165, 91,130,217,245,106,103, 88,220, 77,248,202,213, +104,168,190,124, 42, 63, 44,222,157,161, 73, 42,218,228, 92,205,113, 41,121, 94, 4,126,136, 4, 20,103, 73, 59,104, 2,110,227, + 65,107,134,205, 94,171,143, 55, 27,221,173, 89, 58,163,103,167,197,125,212,200,141,112,103, 81,194, 17, 45,104,136,199,241, 24, +139, 15,176, 21,182, 58,248,255,198,215, 23,111, 95,188,229,249,137,186,140,231,201,225,254,227, 31,163,239, 89,177,104, 2,152, + 46,230,168,148,163,225,176,215,185,253,232,238,225,175,241, 16, 17,131,152,199,199, 80, 30,162, 32,196,155,181,168,203,164,111, +213, 95,127,125,193, 77, 65,195,199, 70, 16, 88, 68,187,244,191,149,178, 19, 5,132,101,232,228,204, 17,107,101,253, 47,227,101, +142,127, 94, 39,147, 39,247,158,141,111,198,106, 53,222, 20, 30,181,146, 77, 48,203,168,164, 27,147, 33,163,240, 44,204, 27,155, +251,160,255, 56,169, 46,197,121,172,122,133,244,113,215, 61,102, 39,227,247,241,143,210, 36,207,208, 53,150,230, 70,226,215,246, +183,168,176,233, 41, 56, 31,250, 45, 0, 89,215,178,219, 52, 16, 69,199,175,216, 78,226,150, 52, 37,109, 90, 74, 42,181,129, 22, +129, 42,177, 96,129, 4, 11, 88, 3, 66, 98,197,159, 32,190, 7,246, 44,144, 16, 63,192,130, 34, 64, 72, 44, 16,143,242,104, 27, +154,151, 19,199,175,113,236,112,238,181, 83,144,144,178, 72,164,214,137, 61, 51,231,158, 59,115,239, 57, 5,190,131,236,208,106, + 28,119, 0,208, 42,167, 12,100, 68,105,150,145, 56,247,198,191,137, 77,147, 55, 78, 2, 12,153, 9,154,166, 28,214,178, 51,213, + 58, 82,215,194,154,149,109, 58,178,124,127, 84,136,181,122, 43,163,186, 46, 35,162, 35, 99,133, 85, 91,147,138,233, 88,164,148, + 18,177,244,229,108,177,122, 6,243,206, 39,125,184,105,204, 2, 76,133,206, 98, 30,142,184, 63, 59,101,161, 78,117,158,165,207, +184, 97, 20,137,219,220,213, 25, 83,137,253,184,115, 13, 43, 85,249,213,255,137,159,180, 96, 46,112,211, 63, 2,128,206,158,235, + 34,162,234,242,212, 54, 45,208,240,140,170, 12, 51,245,212, 60,135,142, 97,201,165, 15, 68,117, 28,186,121,122,216, 92,218,120, +255,245,109,103,212, 5,147, 13,147, 32, 23, 33, 1, 30,153,166, 69,109,168,105, 76,144, 68, 34,183,179,189,221,171,143, 30, 62, +126,246,234, 25,160,159, 28,232,185,111, 19, 28, 52,175,179,196, 79,141,211,105,144,132,200, 99, 72,252,207,176,183, 87,218,199, +227, 99,204, 63, 76,220, 97,224, 14, 2,215, 13,250, 24, 67, 64,207,245, 75, 55,239,221,122,240,238,243,155, 85, 80,230, 20, 49, + 21, 97, 70,242,237,170,131,113, 52,137,178, 88,178,198, 29, 31, 64,197,128, 31,228, 80, 9,153, 77,213,202,101,252,153, 81, 66, +224, 81,184, 4, 80, 11, 83,164,153, 10,213, 59, 34, 47,147, 41,130, 1, 65, 96,168,211,150, 20,167,159,120,148,119,174,221, 63, +232,124, 35,116,162, 75,106,101,171,204,102,226,126, 17,124, 69, 33,149, 65,226,171, 6,181, 11,173, 45,157, 15,177, 26, 43, 53, +215,239,227,153,128,224,204, 10,135, 97, 58,215, 4,136,128, 47, 3,197,194,200,239, 79,250,105,154, 44, 57, 13,201,140,126, 99, +169, 69,165,149, 92, 61, 86, 49,171,151, 91,123,248,136, 75, 97, 65,182,155,187,185, 76,216,245,157, 27,199,195, 78,126,132,131, +111,111, 56,141, 31,189,131, 40, 10, 73, 32, 77,136,197,106, 13, 43,188, 59, 58,241, 98,111,107,109,167,235,158,144,239, 37,149, +198,159,157, 38, 9, 30,215,102, 99,243,242,230, 94,207, 61,153,178, 62,229,208,235,130,101,119,134,135, 69,206,203, 3,237, 71, +222, 81,255, 16, 1,102,189,126, 94,202, 8,228,128,133,127, 85,140,212, 86,227,194, 86,123,251,233,203, 39,135,189, 95, 24,165, +178,105, 15,125, 82,161, 2,154,147,223, 17, 50, 95, 10,117, 25,130, 31,240, 23, 40, 91, 41,145,101,199,112, 50, 96,157, 3,245, +172,179,194, 97,190, 90,210,180,220,175, 7,255, 91, 54,172, 69,167, 6, 44,139,231,106,148, 26,232,142,174, 43,124, 10,188, 94, + 91,151,108, 22,154, 36, 81, 73,165, 86,117,214, 41, 21,245,234,242,149,214,149,145, 63, 74,167,210, 52,204,187,215,238, 2,119, + 72,151,128, 56,217, 76,201, 69, 19, 8,147, 41,163,197,250, 50, 45,211,155, 70, 85,183,211,186,189, 77, 59,174,128,224, 84, 10, +215, 21,221,174,240, 2, 17, 99,248,177,182,100,166, 25,186,237,196,227,190,244,186,185,190, 43, 27, 96,208,229, 12,141,106, 25, +168,154,141,230,168,106,224,102,147, 0, 75, 87, 56, 14, 41,204, 32,239, 35, 23,130, 92,139, 80,227,215,233, 27,173,184,173, 98, +223, 51,155, 35,123,254, 38, 17,195, 35,241,241,157,248,228,237,191, 54,212,202,106, 69,183, 6,147,158,174, 24,237,181,139, 39, + 30, 89, 39,174,214,154,157,193,239, 17,213, 83, 32,139, 13,164,148,236,119,122, 46, 78,146,120, 26, 86,172,133,148,229,202,195, + 56,194,141,111, 55,219,152,162,147,200,183, 13, 27, 75, 62,150,177,231,143, 12,234,145,140,119, 54,118,158,239,191,176, 12, 11, +121,192,199,239, 31, 6,193,208, 52,192, 30,192,141,108, 47,158,248,210,239,123,189, 47,199, 95,232,216, 76,204,144, 95,130,175, +172,212,155,203,206,242, 17,137,130, 80, 63, 60,119,202, 41, 44,254, 44,162, 68,166,133, 9, 10, 89, 3,230,251,230, 8,144,160, +179,114, 94,252, 42,138,186,252, 83, 31, 46, 54,239, 83, 85, 76, 57,139,244, 7, 83,106, 47, 96,254,202,155,196,212, 27,193, 54, +120,122,174, 21, 73,135,157, 84,130,137, 25, 88,116,146,254,107,144,109, 83, 89, 96,170, 83, 87, 60, 97, 73,197,102, 77, 5,173, +100, 82,165, 64,114,170,100,240,215,208,248,255, 87,110,224, 42,148, 63, 2, 80,117, 45,189,141, 83, 97,244,198,118,236,196,143, + 56, 15, 79,136,250, 24,202, 8, 49, 29,141, 4, 2,177, 65,176, 69, 72,108,249, 35,176, 65, 98,195, 47, 67,131,152, 1,137, 21, + 12, 66, 5, 22, 21,243,162, 77,155,166,173, 19,199,174, 29,199, 54,231,124,119, 50, 12, 82, 23,145, 90,165,137,124,191,115,191, +199,249,206, 33,190,203, 75, 75,147, 57,101,233, 78,203,151, 81,139,185,169,185, 65,235, 57, 46,139,101,221, 95, 86, 77,219,176, + 17,219, 56,217, 25,219,121,172, 76, 45, 41,171,181,221,182, 72,108, 35,233, 72,168,233, 88,174,197,171,143,190, 20,111,239,222, + 67,249, 3,160, 23, 9,111, 91,102, 32,109,113,178, 47,115, 25, 77,244,220,254,167,239,125,254,231,233,145,105,188,188,207, 28, +209, 13,150, 45,171,214,150,197,196, 4, 48,232, 4,196, 32,250, 12,105,102, 93, 99,201,138,191,205,101, 19, 63, 10,199,227,112, +188, 31,209,243,193,239,134,105,145,118, 44, 7,159,182,109, 57,113,118,141,136, 58,120,227, 96,142, 59, 86, 90,192,122, 31, 26, + 23, 15,206,246,233,226,212,161,202, 11,157, 76,104,170, 39,172,147, 5,178, 84,132, 26, 62,173, 97, 68,189,201, 60,157,149,178, +150, 69,139, 35, 42,222,217,201,114,245,232,241,195,178, 41, 43,131,238,160,100,170, 50,126,172,142,205, 44,149,124, 30,145, 35, + 23,155,210,102, 85,166,243,228, 2,215,140,109, 57, 31, 29,126,242,245, 23, 95,254,248,215,207,200, 10,129,122,166,221, 94,230, +203, 31,126,123, 48, 12,199, 81, 24, 93,165,115,211, 44, 0, 23, 0,247,190,111, 86, 98,218,129, 83, 67,205,182,170, 1, 6,118, + 58, 6,146, 87,214,232,166,186, 61,234,181, 72, 97, 52, 54, 69,109, 74,232, 39, 21, 69, 28, 80,162,228,235,106,177, 44,243,124, +131,199,137,242, 29,152, 66, 79, 72,202, 30,213,199,211, 99,218,217, 40,189,136,208,202, 40,177,105,104,169,103,124,214,144,221, +237, 74,211, 48,163,254,248,112,247,254, 31,255, 28,225,183, 52,218,149,148,182, 33, 93,218,246,108,159, 51, 38, 54,145, 91, 78, +219,213,219, 5,131,110,148,109,178,192,241, 20, 25, 53,238, 89,124,194, 89,142, 44, 46, 2, 76, 81, 74,207,226,115,139,195,210, +234, 50, 57, 71, 58,143,100,237,197,252,153,232, 12,115,247, 21,223,244,134,229,160,227, 5,254, 55, 95,125,251,224,209,119,123, +209,237,140,171,200, 52,210, 76, 86,177,177,229, 16,148,180, 68,103,114, 23,103,241,244,226,133,239,134,148,212,183, 28, 1, 46, +163,239,141,122,204,188, 88,255,225,113, 32,102,145, 86, 35, 67,156, 45,207,241,175,251,110, 31,127,121,157, 92,118,109,231,228, +234,228,201,243,227,161, 63, 34, 83,208,104, 47,210, 37, 96,189,145,113, 49,141,179,131, 8,160,140, 43,109,103,184,143,107, 9, +199,140, 27,149,173, 86,224,134,210, 89, 66, 45,149, 73,135,156,147,111,129, 77, 67,251,182,227,194,195,151,181, 90,214,173,112, + 92, 0,100,233, 69, 95,105, 25, 19,224, 84,199,212,236,236, 90, 40,167, 84,211,195,209, 90, 21,171,211,235,233,222, 96,103,145, + 47, 7,221,193,147,217, 83, 0, 25,240,183,223, 29,176,230,227, 58,180, 54,172,111,104, 95,131, 50,220,164,134,195,189,176,183, +255,217,161,146, 62,166,196,117, 91,197, 9,247, 87,139, 66,229,192,120,229,239,223,245, 38,111,118,130, 81,149,173,170,117, 42, + 21, 23, 25,126, 22,251, 51, 36, 92, 18,217,219,114,253,224, 60, 33,103,202, 19,181,201,149,239, 41,183, 75,182,140,165,254,111, + 50,247,122,135,226, 85,182,190,217,190,192,207,141, 58,255, 91, 29,253,174,210,164,250,101,242,253,201,101,150, 95, 33, 22,104, + 1, 91,111,230,241, 37, 21,104,170, 58, 78, 23,195, 96,232,119,189,139,100,174,123,209, 53, 85, 82, 74, 60, 77,217,200,103,195, + 70,167,125,111, 77,238,156, 93, 79,113, 83,205, 22,179,130, 73,131,147,228, 9,130,125, 24, 68,136,220,244, 38, 43,235,245, 59, + 59,119,251,193,208,179, 93,139, 3, 24, 7,239,214, 35,129, 59, 91, 23,197,110,180,135, 55,161,204, 47, 64,105,179,246,188,225, +135,239,127,252,211,175, 15,119, 6,147,148, 91,178,133,112,117,234,173, 10, 77,109, 41,243,221,131, 15,206,226,169, 94,228,235, + 88, 46, 50,165,162, 44,180,238, 17,146, 6,139,198,170,210, 3, 85,173,173,160, 87, 45, 2,121,146,161,106, 67,108, 67, 79, 49, + 58,136,110,156,132,178, 41,180, 46,168, 54, 14, 21,218,175, 90,203, 56,234,213, 10,170, 30, 59,142,122,183,214, 84,183,247,202, + 42,119,108,215, 22,185,242,151, 34,210, 91, 35,199, 45,176,191,254, 44,244,104,241, 63,155, 39,252,226, 95, 1,152,186,150,221, +166,129, 40, 58,158,216,206,251,209, 66, 31,160,166,144,166, 8, 74,161, 84,165, 84,128,144, 16, 18, 18, 98,193,215,192,158,111, + 96,219, 37, 18,252, 6, 98,129, 0, 33,186,131,150,151,196, 43,144, 38,196,105, 18,191,234,177, 61,220, 51,227, 10, 22,149,170, + 74,141, 29,251,206,157, 59,247,156,123,206, 81,127, 70,149,108, 10, 19,209,222,234,101,112,242, 18,176,178, 0,103,197, 98,236, + 30, 72,157, 74, 17,197,162, 57,187, 52,156, 56,218, 75,158,101,237,150, 12,201,213, 96,163,158, 5, 0,201, 18,134, 57,244,100, + 35,103,242,231, 82,107,131, 94, 82,163, 84,215,240,148,128,189, 78, 4, 29, 6,116, 75, 34,138,227,111,131,111, 2, 18,193, 74, +245, 87,106, 25, 54, 68,162,118,151,162, 63, 0,173,146, 9, 21, 95,104,198,168,172,191,218, 92, 31, 7, 35,186, 86,165, 88,107, + 78, 53,251,147, 30,157,146,246, 71,189,254,164,175,142,183,244,230,228,181,179, 55,122,195, 46, 69,140,197,243,148, 14,168, 70, +147, 74,226,198,228,102,163, 6, 70, 32,157,220,105,111,207,155,246,196,159, 44,204,182,194,195, 16,251, 74,170,188, 87, 12,118, +243,226,237,217,250,204,143,193,119, 74,250,116,243, 2,172, 24, 0, 42,166,109,135, 18,189,254,128, 10,244, 84,107, 73, 51,136, + 55,176,212,178,204,233,210,148, 43,124, 63, 9,212, 40, 68,170,236,149, 57, 45, 34,202,187,181, 82,213,224,214,206,215, 55,148, +124, 63,237,127,180, 11,249, 90,185,190,214, 90,163,231,121,230,212,217, 92,129,159,107,175, 72,102,246,157, 46,231,232, 75, 22, +243,182, 51,241, 1, 41, 42,135, 74,197,125,151,154, 5, 79,193, 31, 28,138,230, 84, 77, 57, 74, 43,113,102,105,248, 34, 55,160, + 31,136,208, 26, 22, 54,112,105,153,105, 41, 79,107, 13,214,122,237,153,115, 65,228,195,135, 58,213, 99,244, 72,250,154, 4, 75, +139, 36,211,241, 87, 35, 96, 84,216, 1, 61,150, 73,115,166,181,243,249, 53, 50, 23,207, 21,236, 82, 12, 20, 8,170, 44,180, 20, +195,228,240, 68,125,126,174,113,114,132, 73,174,148,110, 2,250,174,197, 26,165,236,205,165,173,189,206,238, 70,251,234,196,167, +106, 52,206, 25, 48,107,164,189,109,101, 97,181, 51,128, 45,151, 9, 20, 4, 30,155,232,174, 67, 36, 15,117, 95,181,220, 64, 31, +132,115, 42,220, 92,207,123,254,226, 25, 93,215,131, 56, 29,122, 8, 32,101,114, 67,131,151,182,105, 25, 74, 89,151,254,151,146, + 35, 60,132, 37, 91,156, 89, 92, 93,188,208, 31,247, 48,234,141, 10,215, 70,186,194,196, 19, 45, 63,227,210,210,101, 47,244,195, +200,227,202, 28, 58, 18,130,190,197,218,233,245,253,131, 95,148,229,168,200,105, 20,107,110,224,106,218,189, 82,111, 85,170,223, +161, 79,149, 38,154,236,177,160,156, 24,198,129,169, 42, 39,250,204,233,114,157,118,116, 58,252, 81,213, 15,150, 48,167, 71,102, + 22,193, 70,147,202, 7, 28, 87,161,120,160,223,143, 87,166, 87, 22,206, 15, 92,135,206,196,245, 66,173,154,175,140,129, 94, 36, +186,105,147, 83, 75,137,194, 27, 35, 90, 6, 87, 98,124,128,254,128,117,231, 76,166,193, 55,109, 58, 33,229,213, 51,215, 21,207, +199,166,109,218, 2, 33,158, 69,145,184, 82,169,178,229, 99, 72, 0, 96, 26, 21,153,227, 48, 55,160,228,158,134,161, 81, 40, 91, +179, 77,192,130,176, 55,147,225,168, 7,104, 8,253,119, 12,201, 2,217, 64,239, 9,238,174,104,187, 91, 28,138, 96, 38, 45,123, +143,121, 99, 36,235, 98,137, 81,244,252,175,106,149,101,147,244,191,154, 61, 57, 2, 84, 5,147, 3,246,101,151,125,250,192, 18, +159,237,230,223,188,141,251,177, 79, 31, 15,141, 70,213,149, 85, 78, 26,217, 80,180, 23,249,180,213, 37, 90, 27, 26,132, 35, 8, +180,101,216, 59, 71,221,163,197, 9, 14, 92,138,174,228,222,214,221,119, 63,222,183,230,218, 94,128, 57,149,237,135, 79, 59,191, +191,190,218,123,233,139,112,228, 58,221,131,110,231,207,247,129,231,140,189, 49,135,147,132,216, 31,118,161,246,154,130,230, 65, + 33,148, 3,207,170, 66, 57,225,198,173, 59,247,183, 31, 60,121,244,120,126,122,190, 51,248, 69, 95,236,242,242,230, 79,136,199, +197, 74, 45, 24,245,202,208, 27, 10, 52, 90,235,244, 22, 34,133, 56,130,127,130, 54,157, 73,183, 63, 87,135, 39,129,208,186, 96, + 70,214,103,159,170, 28, 59, 20,161,169,203,100, 40, 98,225, 36, 10,241, 97,184, 51,134, 22,248,126, 76, 67, 8, 50,205, 68, 35, +245, 89, 74,121, 61,254,211,235, 85,163,154, 73,172,164, 82, 83, 41, 64,238,210, 13,160,244,200,187,248, 8,136,204, 20, 50,180, +233, 47,207,136,203,149, 66, 85,141, 6,131,172,249, 87, 0,166,174,101,183,105, 32,138,142, 29,231,225,184, 73,156, 54, 9, 21, + 40, 52, 17, 80,136,160,188, 4, 82, 17,170, 88,176,101, 1, 95,192, 15, 32, 62,131, 37, 31,193,146, 63, 96, 5, 59, 22,172, 64, +168, 1,245, 69, 66,161, 78,168, 29,146, 56,142,199, 79,238,153, 73, 42,150, 81,163,218,153,153,123,230, 62,207, 57,195,119, 77, +112, 82, 23,165, 32,159,148,139, 92,106, 80, 33,219, 31, 11, 97, 17, 76,112,136,107, 99,228,218,132, 0,203, 14,157,116,201, 85, +137,191,209,225, 38,255,119,107,227, 54, 20, 91, 2,126,189,117,179, 81, 65,222,131,254,225,137,243, 43, 2,169,147,159,198, 8, +121,144, 77, 43,154,232,151, 32,127, 57, 8, 22,165,134,255,154,251,171,197, 53, 32, 14,108,141, 0, 19, 68,196, 20, 91,133,232, +117, 73,165,168,166,146,102, 78, 39, 22,237, 95, 85,176,190, 89, 99,139,236,220, 92,169,105, 11, 26, 31, 89,249, 70,170, 46, 76, + 99,193,213, 23, 19,136,211,145, 50, 13,179,164,155, 51, 62, 41,229,202, 46,199,152,131,174, 21, 30, 92,123,184,111,237, 61,190, +245,248,219,113,215, 67, 71, 96, 74,190,124,217,168,238,246,191,246,237, 94,197, 88,149,114,219,117,115,221,241, 29,224, 66,243, +230,151,225,238, 32, 30, 57,170,231,169,115, 59,153, 56,161, 59,139, 60, 13, 6,153,246,157, 99, 29,137,112,168,187,145,137, 26, +121,163,179,222,177, 92,139,214,155, 54,128,222,132, 39,225, 52,240,200, 55,124,182,253, 52, 82,194,189,225,145, 23,251,149,178, +169, 23,140,238, 97,119,231,222,206,249,246,165, 94,255,251,170,153,230,114, 44, 84,253, 88, 17,221, 84,226,134,150, 50, 98, 97, +156, 4, 60, 13,230, 97, 93, 47,145,255,149,207,130, 25, 61,147,128,122,204, 75, 34,180, 88,160, 36, 72, 6, 75,239, 64, 54,155, + 76,108,242,225, 51,246,248,143, 23,204, 64,146,158, 45, 68, 81,172,193,219, 85, 86, 75,146,192, 7,213, 68,169, 4,134, 4, 23, +200,253, 21, 90,153,193,248, 36,131,177,100, 77,214,198, 49,159,188, 24, 62,194, 62,145, 67,100,187, 67,220, 67,133, 21,218,136, + 57,159,211,105,166, 61,221,190,182,189,219,251,218,172,183,134, 99, 11,227, 17,105,124,239,242,253,195,223,123,228, 44,147,113, +134,162,167,184, 81, 89,199, 73, 99,104, 43,164,243, 94,210, 43,244,160, 5,107, 69, 28,147, 53,202,168, 13,140,240,228, 80, 75, +230,107,224,161, 40,161, 96, 4, 47,127,229, 66, 39,138, 56,121, 21,175,158,191,254,126,220, 29,207,198,135, 39,135, 92, 72,232, +145, 5, 18,250, 19,132,249, 28,158,215, 86,235, 78,127,216, 3, 15, 40, 65,185,146,217,218,184,209, 27, 30,132, 9,121, 47, 20, +110,250,232,135,203, 25, 20, 66, 81, 92,184,148, 20,150,211, 35,216, 64,242,253, 41,168,162, 15, 77, 72,143,205, 64, 69, 32,100, + 76,232,182,128, 16,143,176, 3, 25,196, 8,228, 74, 95, 60,121,121, 52,232, 7, 17,146, 93, 20,254,238,116, 30,217, 19, 7, 21, +102,166,153, 43,149,159,118,111, 6, 82, 45, 73, 44,151,145, 98, 38,180,158,205,213,139, 30, 66, 1, 38,200,121,132,226,156,160, +158, 84,165,134,167,162,108,212, 90, 19,239,175, 53,250, 61, 7, 21, 4,129, 59, 22, 35,175,101,167, 73,224, 30,216,157,205, 58, +171, 27, 0,143, 57,103,163, 41,240,157,243,148, 7,140,162,195,242, 26,126, 23,208,221,227, 66, 99, 22, 52,174,170, 42,241, 61, +135, 78, 26, 13, 73,246,172,186,204,185,171, 72,203,196, 1,115, 71,204,117,208, 3, 67,103, 57,151, 95,230,100,206,202,167, 18, +229, 37,220,251, 44, 61,101,214, 62,219,237,178,129,133,158,106, 87,115,222,235, 31, 28,167, 32,238, 67,201,155, 46,244,198,229, +117,133,161,124, 65, 54, 40,238, 47,193, 78, 47, 73, 94, 41,144,242, 56, 47, 22,138,180,212, 66,129, 15,182, 76,151,113,183,255, +141,190, 64,184, 33,170, 59,211,183,239,222,252,176,126, 20, 33,155,172,110,158,223,244, 67,174,231,244, 86,163, 53,153, 79,174, + 94,216,164, 61, 93, 51,106,110,224, 6, 96, 82,226, 12,227,102,250,216,251, 11,150, 45,103, 84,210,171,159, 63,126, 58, 62,237, +209, 51,107, 43,141,163,225, 17,221, 43,173,115,237,118,173, 13,117, 61, 69,169, 26, 85,215,119, 35,201,107,178,108,121,161,151, +187,221,190,235,205,103,127,166, 3,176, 33, 9, 47,252, 76, 47, 61,155,201,161,139, 47, 17,212,169,106,166, 92, 48, 35, 49,175, + 32, 82, 46,197,139,141,141,177, 7,190, 88, 58, 34,157,230,117,182,240, 95, 83,122,144, 47, 84,237,196,104,137,100, 76,148,254, +191, 68, 95, 89, 68,100, 11,202, 84, 38, 84,251, 82, 41,139,141, 79,245, 82, 13,178, 1, 75, 10,121, 76, 41,229, 81,184, 14,196, +204,221, 63, 1,120, 58,151,222, 38,174, 40,142,207,120,222,143,140, 61,198, 15,220, 36, 78, 0,131, 40, 68, 74, 40,233, 38,176, + 4, 85,173,212, 86, 85,213, 5, 59,250, 21,186,235, 87, 97, 5,203, 74, 5,193,162, 69,162, 32, 4, 98,209,138,240, 16,160,138, +146, 56,224, 70,121,186, 78,108,103,198,177,227,121,244,127,206,117,216, 57, 94, 68,215,115,207, 61,247,252,207,156,243, 59,178, + 69, 47, 15,241, 0, 53,132,180,182,230, 12,168,146,142,206,155,107,102, 67,106,218, 28, 13,198,214, 84,163, 90,168,133,131, 14, +247,235, 71,169,232,168, 26, 97,240, 25, 2, 66,225,176, 44, 70,141,208,116,218,152, 2,111,108, 87,193, 43,117,123, 59,216,200, + 49,211,135,213,246,162, 96,166,250,217,235,247,207,196,216, 99,238,122,133,106,118,250,132,184,201, 8,242,176, 60, 2, 9, 36, +146,104, 90,225,216,210,210,168, 35,220, 49, 29, 92,233, 56, 30,204,153, 78, 29,221, 41,122, 69, 4,131,142,238,134, 81,120,110, +250,243,149,141,101,124, 3, 79,180,180,249,142,239, 79,146, 75,162,251,134,171,131,224,178, 41,135, 67,129,231, 48,132, 5,240, +241, 85,121,217, 99,176, 27, 28, 87,194, 10, 30,236,127, 90, 61,107, 27,238,171, 15, 47,225,142,109,221,222,227,120, 42,101,224, + 55,254, 73, 57, 59, 49,225,143,183,204,222,195,165,199, 8, 73,217,227,136, 81,131,137, 52, 2,243, 81,174,156,202, 77,241, 44, +201, 14, 76, 59,163,209, 27,200,193,192,200,168,167, 10,199,176,248, 97, 26,125, 51,251, 85,163,189, 6, 7,209,216,253,119,190, +118,126,225,252,194,165,159,190, 16,251,244,219,181,223,183, 26,155,191,222,191,113,188,116,208,143,210, 87,141,102,187,215, 15, +136, 63, 41,176,198,196, 18,160,202,130, 4,167,120,255,226,116,197,181, 13,248,129,193, 1,229, 4,178,174,181,210,239, 15,225, +187,105, 22, 43, 37,220, 97,117,182,154,234,225,196,106,247,131, 68, 57, 55,218,192,169,226,137,229,245,183, 34,124,240, 76, 31, + 7,227,117,227,165,152, 34,161,168, 90,193, 59,186, 27,108,199,113, 12,197,147,115,243,120,230,220,245,147, 32,216,255,126,225, +135, 59,127,221,130,181, 16, 2,151, 83,249, 89,215, 31,247,171,111, 86, 95, 40,204,191, 82,101,213, 52,236, 78,184, 51,126,100, +170,236,151, 94,212, 23, 33,251, 39, 75, 83,239,183,235, 80, 48,134,110,230,189,210, 17,215, 95,172, 63, 53, 53, 85, 36,129,152, +251, 16,215, 42,167,151, 55,222,137,160, 6,207, 31,122,156, 56, 45, 81,255,187,133, 43,191, 60,186,254,229,252,183,143,223,220, +135, 22,132, 94, 70, 76,100,168, 22, 67,110, 18,147, 91,154, 53, 69,155, 59, 54, 15,123,153, 61, 62,247,224,249, 31, 51,211, 51, + 79,254,126, 66, 51, 8,228,184,228,149,119,130, 22, 60,187,165,185, 16, 46, 30,219, 54, 68, 12,226,110,162, 0,166, 82, 48,232, + 50,202,144, 65, 60,212,104,150,112,226,149,156, 44, 33,163,211, 4,247, 68,135,185, 37,130, 33, 92,206,150,119,122,187,220,190, + 20, 49, 76, 68,177, 85, 27,151, 14,252, 21,150,221,108,175,121, 86, 14, 46, 56, 71, 9,156, 24, 49,184,202,136,176,172, 69,204, +181, 74,238,104,179,211,172, 22,170,141,102, 67, 85,148,176, 31,178,106, 39, 36, 53,214, 25, 30,236,205, 85,103,219,251, 93, 92, + 84, 91,221,173,136, 32,204, 42,214,217,234,182,176, 58,242,199, 4, 67,198,237, 34,235,154,108,106, 4,206,119, 73,195,103, 46, +158,253,186,216,252,243,194,207,151,165,162, 45,117, 2,105,179, 41, 53,219, 82,123, 47,234, 6,177, 57,102, 76,158, 97, 4,153, + 28,172,254, 19,174,175, 40, 60, 96, 73, 33, 31,158,209, 84,162,255, 51,195, 93,163,248, 93,215,216,197,243, 55,172,151, 40,231, +131, 63, 45, 71,202,251, 82, 33, 47,249, 57,250,156, 49, 15,251,155, 34, 41, 25, 72, 65, 71,250,175, 37,181,218, 84,183, 19, 69, + 98, 12, 68,122,219,188,249,182, 59, 80,169, 96, 60, 30,245, 28, 70,124, 72,136,198, 5,211,201,218, 89,252,244,245, 54,105,235, + 33, 95,144, 56,171, 8,216,161,182, 38, 11,213,181,214, 42, 12,213,177, 28, 60, 29, 28,226, 33, 77,231, 8,248, 62,137, 15, 89, + 46,202,143,151,175,222, 93,188,231,123,121,216, 82,173,114,178,190, 81,231, 20, 66,172, 27, 54,118, 18,183,117,204,112, 8,102, +126, 83,242,199,181,115,216, 35, 74, 69, 18,221, 54, 30,115, 33,220,183, 41,227,192,181,236, 2,154,132,231, 12, 1, 89,114, 43, +187,253, 14,171, 82,241,142,137,204, 84, 64,178,169,121,141,232, 26,212,145, 68,232, 8,238, 14,129, 9, 67, 43,200,212, 44,217, +203,200,135,153,249, 36,169,125,114,186,190,185,244,241,205, 41,205,215,225,153,124, 17,165,113,100,146, 10, 36, 91, 18,158, 47, +148,240, 0,155,143,158,149,194,117, 67, 51, 82, 30,254, 71,181, 27,105, 4,247,165,103,104,162, 39,162, 49, 46,106, 23, 27, 32, +216, 75, 92, 66, 44,170,144, 14,171, 75,254, 23,128,169,171,233,113,155,138,162,207,118,236, 73, 50,147,169, 67,154,143, 78, 51, + 73,153, 1, 81, 80,171, 82,129, 16,234,134, 5,236,134, 13, 98,199, 95,232,239, 67, 66, 72, 84,106, 23,172, 16, 21, 51,162, 85, +129,142,210,137,243, 49,137, 19,219,177,227,239,216,220,115,237, 65, 72,179,138, 38, 31,239,249,221,247,206,185,239,222,115, 74, +252,206,130,192, 16,196, 33, 88,138, 72,203,119, 1,228,156, 82,230,167, 56,162,226, 44, 93,185, 11,162,141, 53,173,206,151, 12, +255, 83,187, 87,160,154, 84,211,170,232, 17,151, 37, 22,239,149,245,253,230,131,193,163,153, 53,237, 53,143,232,108,128,215,101, + 26,108, 1, 27,179,165, 53,227,154,210,178,157,165,148, 52,230, 19,252,191,194, 35, 26,102, 99, 79,167,233, 81,113, 86, 71, 68, + 46,224,219, 39, 67, 52, 24,110, 80,172,169,122, 88,215,189,173,211,111, 15, 93,223,102, 81,242,124, 97, 95, 19, 18,167,184,245, +160, 12, 87, 42,135,220,110,180, 63, 61,249,204,143,130, 4, 86,244, 96,205, 57,107,177,118,110,117, 30,159,126,113,121,253, 55, +219,168,226,234,140, 34,159, 86, 17, 5, 11, 33,104,250, 49, 65, 26,194,112, 89, 72,133, 36, 50, 17,234, 12,202,245,114, 38, 11, + 63,113, 70,249,165, 17, 27,135,245,250,126, 77,227,108,175,132,128, 0,209,102,165, 84, 73, 99,108, 69,155,109, 37, 87, 17, 54, +177,148,250,187, 32,202, 19, 63,246,198,182, 49,182, 38,147,245,236,217,219, 95, 47,230,127, 93,174, 71,116,172, 94,217,198, 38, +116,166,231,198,171, 23, 23,123, 52,238,141,250,106,244,231, 59,211, 80,115,249,195,110,117,234, 58,180,186,144,156, 86,216, 86, +134, 45, 32,138, 42,114, 26,227,160, 81,239,213,106,132,239,181, 84,168,137, 80,133,100,135,169, 21,196,174, 31, 67,125,141,198, + 22, 38, 7,185,114,237,109, 10,224,207, 88,105,103,109, 33, 91,127, 71,239,123,129, 67,255,178,112,103,123,184,185,130,243, 49, + 55,106,163,211, 16,224,118, 23,219,222,154, 14, 39, 58,134,233, 17, 60, 28, 60,254,229,226,167,246, 65,175, 84, 5,128, 8, 16, +130, 3,174,214,117,189,219, 60, 98, 21, 1,120,210, 19,164,154,172,141,249,122,138,185,145,101,218,238,251,239, 13,118,136,174, +173,229, 66,157,113, 27,123, 68,136, 43, 10,244,233, 14,107, 77,122,197,246,215,180, 14, 32,225,128,242, 0, 46, 61,202,176, 63, + 78, 87,227, 77,232, 62,188,247,136,160, 43,205,106, 91,239,210, 97, 71, 76,145, 88,209,247, 79,126,184, 90,142, 52, 78,143,152, +206, 98,188,184,210, 20,184,249,152,206,202,245, 55, 79,207,158, 62, 63,127,190,163, 51, 22,125,155,210,105,239,116, 97, 79, 63, + 25, 62,248,250,171,111,206, 95,255, 65, 1, 63,104, 15,233, 71, 10,248,226,222, 42, 68,144, 42, 44,143,122,210,125,159, 98, 91, +223,111,133, 81,112,246,249,183, 10, 42, 95,163,219, 7, 45,244,196,101, 9,109,211,119,155,119, 29, 52, 61, 33,225,205,141, 42, + 89, 16,194,181,150,120, 9,124,221,165,188, 81,109, 4, 73,116,220, 58,118,139, 42, 79, 5, 82, 75,117,173, 26,224,214,216,183, + 3,155,102,251, 94,119,184,114, 77,133,137,186, 42, 85, 2,126, 92, 51,107, 62,181, 38, 26,179, 64,220,232,196, 33,173,106,232, + 28, 68, 94,171,209, 78,160,196, 80,106,224, 43,220,162, 84,211, 26,114, 22,153,155,145,153, 68,119,222,184,205, 39, 67,132,188, +181, 21, 27,159,240,123,130,247,251, 10,193,163,138, 26,175, 22,222,252, 31,214, 17,225, 26, 59,118,166,174, 48,219, 69,146,189, + 16,112,215,248,175, 34,151,187, 60, 17, 64,108,244, 20,159,137,216,110,133,101, 9,115, 9,120,190,156,136,229, 84, 44, 12, 49, + 55,196,248,157,152,205,133,227,138, 56, 42,197,199,104, 75,253, 89,251,241,220, 87,235,149,211,131,214,190,162,234,106,245,254, +209,253,181,183, 78,185,107,145,150,223,160,221,167,145,110,184,129,238,198,129, 23,224,158,102,239,187, 47,207,126,123,251, 50, +193, 77, 53,209,143,136,192,175, 5,109,247,168,236,146,206,196,199,199, 31, 93, 59, 75, 10,204,223, 47, 95, 46,157, 57, 65,123, + 38,236, 40, 18, 33, 96, 10,117, 13, 41, 11,147,176,163,119,130,208, 39, 84,190,114,204,147,222, 7, 65,228, 15, 59, 67,211, 49, +137, 25,208,148,210,119, 82,124,208,135,167,220,214,192,250, 31,196,122, 97, 35,234, 5,158, 75, 65, 17, 71,226,102,235,204, 10, +227, 51,174,132,161, 7,135,173,185,176, 67,224,166,135,226,134,144,208, 92,209,229, 7, 90, 6,255, 82,192,110,199,183,224,132, +161,224, 14,155,243,142,200,135,241,180,171, 85,181,138,108, 7,225,191, 66, 16, 58,191,241,219, 45, 43, 12,101, 38, 61,184,126, +208,160,150, 1,156,122,164,247, 77,119, 73,171, 93,211,106, 49, 26,247,164, 2,115,148,178,195, 55,217,247, 34, 83, 68, 47,253, + 43, 0, 77,215,210,218, 68, 24, 69,103,146, 73,102,166, 73,154, 52,237,180,241,217, 90, 31,104,209,138,182, 98,197,199, 82, 92, +232, 78,244, 71, 8,254, 20, 23,254, 1, 17,220, 42, 72,193, 74, 65, 16,220,169, 84, 67, 45, 72,209,182, 65,211,152, 38, 77, 39, +153,204, 43,243,136,231,222,111, 10,217, 4,194,132,153,185,223,125,158,123,206, 33,126,102, 40, 52,233,233,114,172, 66,226, 79, + 21,166,230,167, 23, 26,157,186, 36,224, 59,169, 68,111,214, 9,237,132,228, 42,225,180,161,242, 5, 49, 47, 35,103, 7,177,207, +101, 31, 87,129,129,215, 48,235, 98, 10,102, 58, 7,182,107,193, 5, 20,114,163, 48,127, 30, 42, 19,203,144,145,159,204,102,116, + 46, 72, 99,209,218, 23, 45, 26,214, 90, 35,152, 57,142,193,189,171, 15,182, 16,253,184,247, 7, 83,198,125,162, 52, 30,146, 54, + 47,114,127,255,220,209,243,219,205, 95,212, 5, 75,137,174,172,160,103, 34,222,109,102, 2, 34,109, 15,188,251, 70,103,215,246, +122,130,148,158, 84,168, 50, 90, 24, 7, 77,179,209, 52, 73, 20, 70,180, 60,202,196, 3,236,150,115,134,237,117,253,192,117, 17, +141,252,126,200, 11,210, 36,110, 17, 5, 94,236, 69,130,128,152,206,134,220,215,144,130, 51, 35,183, 88,102,227, 57, 65, 74,192, +187,197,178,136, 24,170,146, 66, 16, 45,166, 49,240, 71,161, 61, 33,114,247,170,164,107, 4, 78,200,164,241, 19, 59,114, 90,254, + 65,221,106,124,217,169, 46,175,189, 95, 94, 91,121,177,252,106,181,186, 82,221,169,186,129, 77,115,213,161, 95,239,218, 50,243, +146, 43, 25, 28, 0,158,120,193, 35, 40, 44, 94, 30, 75, 89, 41,117,249,184, 49, 99, 20,141,113, 36,115, 8,239,202,184,138,240, +136,171,135,163, 48,179, 1,109, 65,247, 41,181, 87, 35,102, 71,147, 19,152, 21, 44, 85,211, 24, 51,131,154, 70, 44, 55,139,252, + 97,218,152,237,186,102, 24,210,210, 16, 28, 58, 92,127,165,120,180,109,183, 17, 71,247,237, 22, 35, 64, 82, 99,249, 49,155,200, +220,229, 4, 24, 71, 88,251,176,160,229, 81,235,224, 1,226, 9,239,117,155, 52,123, 79,192, 78,212, 58,116, 6, 14,203,168,146, + 21,227,180,215, 90, 59, 55,230,238,184,196,229,233, 60,188,245,240,219,214, 87, 45,147,227,148,153, 6, 54,188,136,143,226, 82, + 42, 21,198, 81, 83,247, 29,107,163,182, 14,135,142,183,223,195,153,145, 83,186, 66, 37, 66,173,185, 61,136, 8,110,120,164,124, +252,201,253,167, 11,119, 23,191,127,254, 54, 64, 74, 22, 6,112,184, 87,238, 47,238,254,220,245, 3,167, 88, 16,187, 48, 38,238, +255,212,228,236,219,143,175,241, 66,166,167, 78, 35,116,225, 69, 95, 59,115,125,223,106,177,162,108, 78, 75,171,112,138,136, 52, + 49,175,248,193, 26, 97, 39, 45, 22,171, 34, 63,194,189,146,146, 62,102,249, 93,121, 40, 11,153,179, 74,169,114,241,196, 60,114, +154,158,211,211,179, 42, 27, 4,101,236,249,172,190,215,221,155, 49,102,104,249, 37,142, 74,185, 18,141,235, 89, 63,137,182,246, + 6,110,219,218,231,205,172,145, 20, 75, 11,113, 29,169,223,186,112,179,113,208, 16,112, 64, 78,105, 67,252, 17,210, 2,158, 55, +210, 70, 55,123,118, 70,219,137,102,102, 52, 80, 85,125, 60,111,248,177,183, 99,185, 75,161, 34,205, 77, 72, 29, 75,178,250,146, + 71,228, 8, 3,207,117,205,150,211,110, 56,157, 58, 9,201,202, 98,194,119,168,114, 75,151, 99, 4,164,194,254,157, 62, 44,217, + 65, 94, 62,147, 80,254, 50, 60,147,239,137,233,193, 80, 17,194,247,121,158,228,249, 52,194, 13,121, 19,121,200,236,182,105, 94, +181,248, 84,144, 59, 23,163, 98,225,229,247,119,207,215, 63, 60,171,174,190,169,109,252,104,254, 62, 63, 90, 41,169, 57, 63, 70, + 25, 26,247,136,195, 46,228, 5,147, 33,203, 65, 14, 43, 99, 71, 96, 60,184,235,127,230,158,217, 55,231, 78, 94, 66, 46, 76,211, + 84, 86,239, 66,154, 72,174,144,207, 35,158, 85,121,164,140,212,194,243,188, 71,183, 31,255,109,255, 69, 44,135, 21, 45,157, 93, +154, 42, 79,214, 90,127,136,112, 62, 12, 28,215, 62,102,156,216,220,221, 52,138, 19, 77,147, 58, 42,125,175, 15,123, 19, 92,140, + 18,139,214, 32,240, 19,253, 3,117, 18, 34, 61,163,195,113,249,204, 29,116, 40,209,116,216, 44, 30,198, 66,164,134,248,113,105, +210, 67,168,247,188,158,143,121,225,153,201,124,184,153, 38, 37,205, 12,122, 90, 52,124, 68, 66,152, 86,216,161,115, 71, 90, 81, + 24, 76, 35,190,198, 44,126,144, 22,184, 22,142, 17,236, 80,185, 25,195, 21,237,136,170, 9,160, 29,179,151,208,108,181,231,246, + 16, 28,131,200,247, 19, 4,179,128,242, 36,126, 29,199, 10,102,128,180, 73, 78, 49,224, 91,146,254, 11,192,211,181,244, 54,113, + 70,209,177, 61,227,177, 61,227,137, 51,113, 66, 18, 59, 33,180, 38, 64, 27, 96, 1, 8,209, 69,133,120,108,187,105, 89,177, 9, +191,134,127,208,127,208, 93, 85,169,221,244, 23, 84,168,106, 21, 85, 77, 91, 90,136, 16,113,130,157, 24,219,243,126,120, 30,158, +222,115, 63,131,228, 85,236,248, 49,115,239,253,238,227,220,115, 4,126,166, 36,186, 63, 2, 44,136,147, 13,156, 12,179,137, 63, +142, 65,180,141, 15,107,214, 76,242, 34, 10, 81, 87, 54,175,223,249,244,206,209,217, 43, 70,148,163, 26, 96, 33, 41, 44,155, 49, + 75, 12,200,129,121,138, 34,173,183, 54, 88,191, 41, 96, 78, 36,132,221,132,181, 50, 4,147,113, 1,240, 89,195,139, 93, 25, 52, +249,216,120,204, 88, 31,131,254, 61, 73,163, 26, 31,170,100,206,166,214, 62,157,190,173, 48,155, 94,190, 16,139, 78, 69,241, 3, + 6, 78,186,133, 73, 44,139, 82, 4,113, 22, 53,150, 86,173, 3,255, 46,232,179,138,162, 81,215,233, 7,164,120,166,208,235, 6, +253, 21,155,129,176,103,153,106, 97, 70, 43,161,147, 56, 3,174,142,234,131, 40,227,169,170,144, 45,226, 54, 44,174,109,199,220, + 94,210, 90,222,204,226, 29,196, 82, 42, 23, 88,228,159, 87,120, 14, 73,133, 30,133, 54, 28,114, 20,139,139, 76, 48,224, 23,224, + 4,228,101, 72,177,147,204,106, 86,101, 40,156,226, 6,151, 22, 51, 22,152,140,112, 52,212,192,144,109,200,149,249,188,156, 36, +146, 19, 5, 86,224, 14, 93,251,141, 55,254,227,108, 52,240, 2, 59, 73,173,217,204, 73,178, 32,161,220,132, 30,168, 67,233,149, +210,188,100,133,137, 27, 37,178,218,252,253, 36,248,119,234,244,125,255, 52,136,198, 81,220, 49,174, 13, 66,200,155,125,185,251, +184, 82, 82, 71,225, 80, 41, 55, 4,210, 9,196,145,204,227, 50, 75, 3, 64, 31, 10,244, 1,200,145, 90,250, 10, 0, 12,209,148, +215, 64,180, 52,203,206, 28,138, 53,160, 75,219, 93,191,138,192, 45,229, 77,181, 25, 1,131,161,136,210,135, 87, 48,208, 91,227, +182,105, 72,247,244,230,206,173,219,189,187, 47,251,127,105, 53, 3, 29,253,178, 76,206,147, 64, 75,179, 74, 49,136,145, 26,234, +155,243, 87,148,236,255,115,242, 39,165,243,148, 38,255,118,244, 43, 93,148, 85, 99,237,233,131,125,242,134,222,250, 46,160, 50, +177,141,128, 91,173,187,129,189,255,213,126,255,236,152,206, 99,224, 70, 42, 42, 61,168,222,234, 46,119,111,239,222, 61,159,158, +147,245, 83,128,126,241,247, 47, 86,127,162,200,178,217, 92,177, 3,251,193,253, 71, 63,124,247,189,174, 25,189,238,229, 43,155, + 61,203,157,108,183, 47, 57,177, 59,152,244,233,135,127,243,197,147,145, 61, 26,217, 67,144,149, 94,186,177,183,179,247,242,221, +127,126,226,197,204,192, 81, 85, 26,116,114,146,145,212,149, 26,172, 34,205,186, 43, 59,144, 3,193,249,132,145, 67,206,151,144, +236,136,210, 5, 63, 10, 78,198,199,150, 55, 98, 30,214, 68, 90,180,101, 1,159,165,200, 2,195, 40, 50,178,240,182,209, 38,171, +190,190,189, 71,102,252,248,198,163, 38,172, 17,117,207,179,135,207, 14,143, 15,123,107,159,116,204,141,177, 75, 87,190,240, 66, + 7,172,218, 56,117, 0, 44,185,208,186,192,209,181, 2, 82,238, 60, 99, 33,160, 98,169,177, 76, 17,106,195,188, 24,165, 62,185, +167, 12, 78,161, 40, 45, 23,242, 32,216,186,183, 37,249, 1,227, 35, 99,138,238, 32,148, 6,243, 91,194,162,193,112,148,178,160, +235, 4,136,175, 36,218,255, 11,224,141,252, 97,196, 74,201,187,250, 1,255, 14,124,100,193, 47,224,150,140, 32,143, 40,125,100, + 35, 95,104, 65, 73,156,104, 32,125, 57, 88,237, 31, 84,191, 61,252,249,235, 31,159, 31,188,127,235,132, 65, 91,169,191,143,166, + 71,246,233, 79,195, 35,163,166,247,244, 54, 57, 87,204,189, 89,209,112, 23,196,174, 78,232,177,223,101, 97, 2, 64,157,229, 79, +187,171,157,137,107, 69, 89,210,210, 12,202, 39, 38,254, 84,164,154,110,232,213, 85,232, 73, 80,248,123, 61,120,221, 80, 41, 77, +196,200,135, 2, 55, 29,198,168,254,107,205,173,181, 29,214, 83,243,175,110, 94,163,119,160, 42,191, 4,114,148, 84, 8,249,210, +183,133, 2, 33,184, 17,213,100,158,127,182,245,249,185, 51, 36,243,195,100,155,251, 10, 24, 56,169,106,202, 39,186, 16,167, 3, +138,102, 14, 89,224,156,151, 11,153,141, 35,231, 62, 51, 93,157, 50,125, 7,208, 41, 86,170,166,102,154,250,114,138,245, 64,222, +216,131,191, 51,228, 15,141, 46,232, 88,154,186, 73,102,176,210,108, 23,210, 98, 61, 91, 96, 44,121,120, 83,112,177, 43,233,170, +214,168,130,147,191,179,188, 65,111, 64,213, 94,133, 43, 54,186, 99,138,172, 24,245, 37, 58,135,218, 75,235, 64, 76, 22, 41,152, +218, 20, 64, 39, 85, 69,141,243,136,155,210,115, 49,129,253, 95, 0,166,174,165,183,141, 42,140,122,124,231,101,143, 61,227,177, + 29,187,149,157, 72,233, 67, 8, 68, 35, 36,132,196, 6, 33,177, 64,149,186,175,138, 64,252, 1,246, 72,176,231, 31,240, 71,186, +100,195,170, 45,168, 42, 72, 8,137,166,109, 2, 21, 73,112,130,243,168, 61,158,151,237,241,112,206,119,109,137, 77,148, 44,236, +220,185,247,206,247, 60,223, 57, 27,126, 2, 13,209,151, 69,175, 91,186,228, 90, 90, 15,188,210, 10, 44, 83,161, 12, 89,141,163, + 81,148, 70,179, 60, 98, 76,186, 66,136,232,192, 22,207,151,169, 36,254,172, 7,213,145,146,153, 38,110, 19,162,194, 57,156,140, + 65, 62,124, 67, 42,110, 48,112, 28,108, 33, 50,103,209,160,141, 72,179, 69, 12, 3, 87, 72,137,243,122, 56,208,164, 66,184,217, + 53,219,131,155,245,107,254,201,229,209,114,195, 89,136,199, 39, 95,246, 34,213,157, 92, 24, 92,169,255, 22,125,191,135,188,140, + 51,171,202,218,221,218,197, 3,167,121,140,163,138,178,217,205,254,173,176,222,198,145,227, 17, 91,245,246, 36,165,254,148, 83, +117, 74, 82, 36, 22,210,143,174, 12, 66, 78, 45,138,186, 54, 11, 83,134,142,111, 55, 35,201,228, 78, 64, 38,101,187,199,151, 71, +204,186,216,229, 53, 60, 95, 5, 29, 43,128, 39,177, 77,215, 85,174, 83, 69,200,226,218,100, 90,175,187,172,213,152, 2, 86, 86, +178,108, 67,190, 79,216,190, 86,107,205, 92,163, 90,209, 2,222,133, 6, 45,233, 9, 57, 46, 71,113,234, 82,201,255, 81, 50,194, + 98, 58,146, 1, 88, 50,179,168, 36, 59, 18, 45, 78,228,177,180,172,133, 65,133,111,188,193,167,113,242,250,252, 77,160, 66,219, + 96,247,208, 67, 10,105, 84,242, 50,199,234,146, 69,226, 59,173,195,241, 33,252, 2,226,148,142,215, 93,224,125, 95,201, 53,144, + 99, 47, 68, 43,252,157,225,157,209, 20,241, 93,217,109,118,113,220,184, 94, 8,183, 75,241,165, 8, 88, 62,251,232,203,195,179, +131,243,232,188, 20,194, 44, 44, 6, 78, 2, 55, 4, 59,179, 34, 68,157, 72, 21, 98,135,200, 99,182,192,126,142, 46,142,216, 66, + 20,101, 21,223, 11,194,102,123,203,239, 15,187, 59, 12,243, 17, 51, 45, 51,199,106,124,112,251,195, 36, 79,187,205,142,235,212, +242,121, 70, 16,116, 62,251,121,255,209,241,248,111, 36,242,167, 87, 39,120, 35, 8,177, 16,238,160,103,251, 79,115,145, 77, 16, +157,144, 66, 52,126,157,150,215, 61, 26,255,137, 47,220,237,221,188,255,201,131,192, 13,226,121,124, 37,132,142,142, 66, 30,163, +166, 17,161,208,179,108,226,152,222,171,127, 94,126,251,197, 55,143,127,123,132,152,174,237,133,207,143,255, 64, 40,253,246,173, +119,183,251, 59, 63, 61,127,114, 48, 58, 32,156, 70,169, 45,255, 58, 59,168,156,127, 46, 61,171,129, 23, 9,238, 39, 89,206,236, + 42,213,159, 53, 65, 30, 76, 73, 80, 35,146, 74,233,204, 81,225,241, 21, 34,253,126, 56,192,142, 94,107,245,226, 52, 25,178, 50, +195,126,154,204,142,146, 39,117, 16, 14, 9,240,152,142,211, 60,123, 53,122,137,157,204, 68,143,247, 98,122, 25,103, 49, 78,119, +146, 76,122, 65,127, 26, 79, 4,241, 93,193,110,227, 14,239,116,118,206, 72, 92,204, 73,228, 65,123, 27, 70,173, 89,107, 18,230, + 47,220,168, 41,231, 96,113, 9,178,162,200, 56,134,106,170, 56, 91,190,191, 55,168,152, 75,132,240,101,146,206,231,243, 5,217, + 71,215, 93, 40, 17, 22,221,168, 70, 85, 52,150, 19, 23,142, 23, 84,195,181,105,205,181, 77,119, 76,145,223,147,114,141,210,253, +236,234,255, 32,121,107,162, 59,249,201,226,113,165,134,207,122,149, 31,234, 47,158, 46,190,223,255,241,187, 95, 31,246,172,230, +215,239,221,251,106,239,211,207,223,250,248,238,224,142, 85, 26,191, 95, 28,252,114,246,162,168, 90,123,173, 33, 13,149,105,167, + 50,109, 46,185, 53,109,253,141,107, 55,224, 44, 11, 50, 97, 24,112,204,216, 70,130,167,233, 67, 12, 88,127,100,147,182, 34,245, +180,196,182,158, 86,197,105,184,245,134,237, 33,126, 23, 81,102, 58,214,116,153,199,121, 52,158,252,139,191,122,205,222,235,241, + 95,176, 51, 88,169, 95,247,225, 0,132, 85, 38,150,145, 55,188,153,132,111,193,167,156, 77, 78,169, 45, 32, 53,106, 13, 42,135, +165, 14,235,161, 52,222,248,212,248, 29,151, 10,182,142,243,234, 90,156, 81,102,151,164, 61,206,220,130, 98,245, 85, 85,200,185, +164, 57,135,179,130, 90,232,185, 53, 68, 54, 38,211,247, 82, 9,185,150,197,100,222, 66,146,221,246, 59,211, 52, 82,236, 49,218, +122, 34,105,131,144,100, 30, 13,195,189,221,221, 62,125,115,114,133, 48, 47, 79, 45,137, 21,197,118,240, 24, 97, 24, 97, 60,147, + 60,210, 5, 76, 25,255, 91,227, 35,215,130, 33, 27,254,247,255, 4, 32,234,106,122,154,136,162,232,124,182,157,105, 25, 75, 74, +181, 45, 37, 49, 80, 32,196, 4,163, 49, 42, 42, 9,137, 27,127,129,113,165,254, 17, 99, 92,185,244, 31,248, 31, 92,155, 16, 55, +186, 34, 16, 23,106, 92,152, 54,138,148, 22,134, 97, 58,175,211,249,232,180,158,123, 95,193, 93, 67,210, 50,243,222,187,247,157, +251,117,206,229,124,211, 20,240,132, 85, 29,168, 57,137, 6, 49, 72, 30, 51,187,236,217,185, 80,187,164,139, 31, 24,205,212,114, + 82,102, 90, 42, 46,225,176, 44,215, 90,103,193,105, 99,190,233,141,188, 52,163, 70, 2,169, 12, 43, 19, 73,175,222,188,254,180, +187,171,177, 13,164,140,114,105,166,127,174,162,147,102, 27, 73,175,193,156,176,214, 49, 17,111,210,202,177,222,252,152,187, 27, +169, 75,167, 88,152,195,243, 0, 50,145,148, 26,223,122,120,195, 32, 12,100, 88, 88,159,111, 54, 42,139,158,192,221, 48,246,132, + 71,217, 55, 77,135,115, 89, 95,220, 16, 35,193,116, 46, 58,182,156,152,209,166,114, 12, 74,231,227, 62,145, 1, 14,254, 23,124, + 16,162, 30,160,123,146,134,224,106,203,132,199,172, 56,160,161,125, 26,166, 66,145, 98,155, 76, 98, 88,169, 91, 90, 78,161,237, + 2, 52, 85,103,127,134,179,140,163, 41,157,199, 81, 26, 37, 99,169,133, 70,200,141,117, 46,166,146, 13,111, 74,110, 3, 95,180, +115,134,109, 25,150,109,206, 1,160,194, 97,228,141,130,101,218,128,130, 54, 93, 24, 84,253, 50,184, 82,105, 50,251, 19, 61,176, +154,142, 85,196,214,184, 43,177,186, 9, 98,152, 12,230,173,101, 50,237,163, 25, 83, 77,199,249,235, 6,253, 35,225, 29, 5,193, +209,192, 63,241, 7, 81, 28,157, 71,126, 50, 73,143, 7,221, 76, 73,136,144, 89, 83, 99,196, 42, 56,209,234,164, 81, 94,194,123, +217,164,126,181,112,103,245,222,215,206, 62, 23,254, 73, 13, 21,241,126,194,236, 67,119, 87,238,247,252, 30, 78, 46,224, 48,238, +218, 98,190,244,124,231,229, 65,123,223,164, 9, 74,131,185,189,114,210,119, 0, 46,225, 93,225,139,137,158,124,146,193, 8,231, + 9,206, 15, 75,182, 3,216,235, 13,253,190,127, 44, 34, 30,250,229,229,192,254,118,122,191, 40,161,169, 27,216, 38,149, 28,119, + 86, 43, 55,184,138,163, 61,190,249,228,119,191,189,185,124,187,127,126,140,179, 95,117,170, 81, 28, 94,175,181,198, 60,242, 86, + 42, 56, 0,245,113, 18,250,163, 65,171,222, 10,163,200, 23,110,217, 42,227,181,168,102,206, 34, 12,176, 76,199, 40, 13,105, 12, +114,122, 46,220, 51,225,226,195,193,207, 61,119,224,194,173,215, 43,141, 83,166,204,253,219,237, 28,246, 14,111, 44,109,226, 62, +192,147,135, 81, 24,166, 68,186, 48, 81,169, 89, 62,161, 73,184, 20,251,131, 95,182,114,121, 74,100,115,171, 51,156,114,129, 10, +254, 82, 35,147, 32,139, 70,212,243, 70,154,140, 72,100,220,204,115,157, 45,102, 14, 83,226,145,103,228, 24,211,108, 29, 86, 12, +119,182, 73,119, 33,126, 41, 78, 19,203,204,227,217,176,139, 52, 5, 29,139, 81, 60,122,180,241, 16,215,143,136, 67,234,234, 97, + 51,241, 2, 87,106,206,134,145,144,210,228,196, 83, 79,205,238,154, 83,112,184,126,150,135, 69,100, 68, 28, 68,147, 51, 91,107, +215, 20,199, 80,220,129, 26,197, 70,165,142,219, 49, 37,118,226,255, 52,104, 26, 83,208, 72,162, 29,109,102,171, 76,176,175,177, +128,170,105, 40,150,174, 88, 57,197, 50, 56, 21,200,137,120,153,126, 80, 24,191,207,132,161,217,254,164,178, 74, 81, 85,198, 5, +229, 99, 57,232,214,222,183, 63,191,221,251,176,122,165,241,110,231,197,246,245, 77, 55, 14, 69,154, 32, 56,188, 85, 93, 89, 46, + 86,191,244, 59, 63,206,218,216,172, 53,231, 42,172, 50, 33, 14, 39,202,115,225,249,225,127,251,131, 83, 73,198,201, 19,136,170, + 63, 12,152,215, 65,221, 90,127,128, 19,211, 15, 78,224, 83,113, 24,224,205, 19,174,200,202,126, 42,160, 4, 41,116, 7,192,199, +148, 33,204, 95,164,235,136,189,112,122,101, 98, 89, 82,189,192,216,177, 29,205,133, 38,224, 63,246, 90,162,218,153,147, 34,117, +151, 84,146,202,169,172,213,199, 73,133,152,211, 98, 83,217,152, 79, 21, 86, 38, 82,151,163,241,154,122,225,231,201,186,179,103, +219, 79,191,255,249, 38,167, 49,121,174,158,134, 28,225, 33, 76,102, 42,204, 3,246, 98,231, 17,194,235,170, 85, 40,205,217,165, + 48,164, 62, 93,167, 88,166, 38, 87,117,198, 54, 42,123,114, 97, 5, 34, 17,196,227,196,125,189,179,114, 41,251,238,140, 51,123, +188,104, 26,187, 21,110,115,100,108, 61,145,129,197, 69,113,212,206, 21,255, 9, 64,212,181,244, 54,113,133,209,153,241,188, 60, +246,100,236,144,196,164, 65, 14, 46, 50,132,150, 5, 42, 74,211,254, 7,150,252, 17, 86, 93,117, 85,126, 13, 91,196,130, 21, 66, + 2,117,219, 69, 82,216, 32,133, 68, 81, 98,226,120, 50, 99,143,231,229, 25,115,206,119, 29,144, 34,111, 98, 89,247,249,221,243, +189,206, 89,217,119,122,232,139, 34,165,153, 91,189,206,170,118, 71, 19,109, 1,197,212,184,210, 21,103, 5, 36, 83,172, 98,196, +197,246, 11,131,182,231,120,209,252, 26,139,107,139,176, 4, 95,185, 21,207,146, 89,150,249,135,119,239,201,157,194,246, 9, 30, +116,140, 27,158,190, 80, 29,148, 34,211,195,175,165,228, 23, 51,180, 85, 54, 89, 31,244,134,211,244, 90,180, 71,168,234, 73,137, + 40,245,196, 73, 0,148, 75, 79,225, 67,109,119,243,238,201,248, 11,217,130,216, 7, 91,171,126, 11,153,103, 61,142, 47, 99, 41, + 1,138,179,184,101,147, 77, 80,161,209, 74, 20,144, 43, 50,250,227,158,144, 6,235,225,157, 95,175,102,151,128,255,105,206,251, + 3,152,153, 20, 51,233,183,212,164, 89,180,192,124, 25, 11,214,151,107,110,215,192,105,239,224,102,178,123,136,198, 85,170, 15, +165,178, 70,136,210,201, 10,205,109,100, 11,147,213,104, 1,223,226,246,219,100, 11,113,128, 33, 93,219, 35,222,135,113,183,252, +182, 21,120,214, 90,139,134, 94, 25,119,147,230,220, 96,184, 30,183,193,178,220,166,217,246,204,166,203, 85,115, 76,162, 29, 83, +234,150,225,181, 45, 43,172,176, 94, 43,202,116, 38, 30,168,193,172, 3, 8, 88,246, 82,181,236,139,222, 88, 82,102, 73, 89,204, +230, 89,156,230, 81,150,133, 73, 18,211, 64, 84,216,120,211, 48,162, 52,218, 31,252,142,197,137,178,232, 60, 60,207,181, 2, 70, +167, 92, 46, 60,215,127,184,243,203,233,228, 11,236,108,152, 76,112,208, 3, 39,152, 48, 25, 91, 97,152, 71, 39, 71,240, 3, 56, + 68,195, 98,149,238,146,138, 80,152,156,239,182, 73,234,217,112, 50, 41,157, 84,202,142,212, 42, 99,206,144,181, 68, 42, 70,199, + 54, 19,194, 94, 22, 2,219, 34,143, 7, 59,248,116,255,233,255,167,135, 42, 44, 73, 50,187,134,153, 23,249,101, 52, 26,199, 35, +120,105, 73, 62, 31,108, 15,147,116, 6, 96,190,168, 84, 81,154,222,147,232, 31, 28, 97,156,237, 40, 9,241,187,247,122,247,186, +190,127, 60, 58,198, 73,243,155,237,205,206,102, 56, 13, 31,221,127,212,239,247,207,207, 47, 26,178,184,179, 36,249,251,249, 63, +111,222,190,102,193,101, 93,176, 80,157,105, 12, 11,179, 56,187, 58, 83, 66,151, 58, 53, 78,177, 69,182,244, 34, 47,200, 90,106, +183,218,174, 31,120,157, 36,157,118, 73,209, 94, 99,120,130, 43,165,177, 78, 55, 91,142,199,165, 96, 82,154, 76,223, 77,211,158, +165, 83,219,180,240,215,235,246,120, 74, 55,118,139, 69, 62,252,105,136, 85, 2, 4,105,176, 28, 89,131,205,218,191,255,228,240, +248,136,154, 68,123,127, 0, 12,116,154,116,106,129, 55, 47,174, 47, 56,170,186,252,237,231,199,211,249, 44,240,218,212,144,173, +181,117, 63, 0, 22,161, 66, 8, 19, 39, 94, 94,165,174,105, 19, 30,194, 63,144,210,154,157,205,189, 34,155,252,185,187,161,247, + 28,237,234, 26, 19, 50,182,135,203, 50,207,162,177,160,118,222, 46,213,233,173,204,181, 33,124,181,186, 18,115, 82,248, 29,159, +142,232,172,183, 93,114,193, 59,148,140, 18, 92,175,254,251, 61, 56, 76,231,113,213, 81,133,183,228,204,169, 95,181, 62,124,154, +127,206,199,127,253,251,178,163,187, 47, 14,158,221, 14,182,194, 60,139,231,115,204,101,171,179, 17,151, 89,191,181,213,247,186, +239, 71, 31,255,187, 58,221,187,117,119,221,242, 22, 26, 67,223, 15,118, 30, 76,179,100,146,132, 79, 6,143,199, 73,168, 16,128, +240,163, 44,215,219,235,216,187,195,147, 35, 28, 84, 9, 88, 47, 6,189,193, 87, 42,243, 1,144,249,112, 89,130,230, 26,188,189, + 94,192, 22, 98,197, 71, 2,152, 79, 59, 94,151, 7,195, 3,160, 64, 33,214, 32, 92, 83, 13,237, 77,145,234, 5,242,184, 97,197, +248,193,174,174,171,128, 17,150,136,129, 6, 67,249,175,240,119, 41,144, 64,115,239,212,210, 30,212,208, 45,156,156,134,176,234, +242,230, 73,122, 19, 95, 24, 77, 70, 64, 0,188,235,124, 46,196, 56,240,212,153,242, 9,228,110,109,223,218, 41,107, 88, 18, 27, +155, 71, 49,122,114, 22, 25, 66,101,152,227,216, 4, 94,160, 8,183, 53, 9,163, 85,213,141, 87,175, 64,165,228, 82, 49,101,178, +126,145, 74, 76, 1,116,237, 70,186, 79,213, 83,254, 16,255, 54,132, 13,236,155, 0, 60, 93,203,110, 27,101, 24,181,231,226,185, +218,227,113,210, 88, 77,220,210,139, 90, 42, 72, 55,128, 20,177, 65,162,155, 46,186, 70,130, 61,240, 16, 44,216,240, 24, 60, 66, + 95,129, 23, 96,129, 68,165,170, 18, 36, 21, 84, 69,113,236,248,146,177,231,226,185,247,156,111,198,108, 44,217, 25,219,147,223, +255,255,125,231,187,157,211,218,119, 60,149, 9,157,122,127, 5,105,119,164,154, 72,218,251,186,157,220, 33,255, 12,150,207,119, + 14,162,116, 35, 41, 99,121,167, 80, 76, 70,100, 89, 82, 27,237, 49,233,209,172, 96,214, 40,103,161, 26,136,190, 11,194,159,158, +240, 5, 50,151,126,228,221, 14, 17, 87,114,147,105, 66,234, 85, 54,148,129,101,213,228,204,249, 10, 64, 77, 41,161, 16,252, 31, + 59,243,186,245,126,104,139,158, 12,135, 83,164, 58,106, 32,161, 40,222, 44,162,101, 83,179,253,127,246, 2,247, 68, 58, 89,206, +236,228, 61,218, 76, 61,151, 82, 6,126,227,106, 47,148,169,200,255,120,124, 48,169,229,160,222,196, 65,243,102,216, 74, 81, 28, +132, 1,101,110,139,205, 42,244, 59, 44, 65,231,157, 84, 51,235, 74,215,163,184, 74,243, 58,217,149,187,180,146,108, 33,214, 71, + 53, 12,160, 48,197,160, 40,186,210, 20, 85, 0,240, 13,162,117, 34,113,211, 64,248,210,117, 96,208, 97, 60,122,226,247,169, 19, +212, 21,234, 46, 38,121,100,128, 16, 27,129,253,200,236, 74,169, 26,178,191,174,136, 89, 43,182,193,107,240,216,119, 53,215,213, +134, 3,221,181,117,215,209, 44,184, 7, 83,241, 92,205, 48, 85, 11, 95, 1,235, 2,103, 66,249,109,178,243,232,134, 74,213, 62, +216, 49,155, 3, 44,149, 10,252,158, 7,217, 54,200, 67, 0,132,191, 23,255,174, 83,233, 53, 82,107, 93,167,138,244,189,195,251, +216,247,179,237,204,232, 89, 35,107,132,237, 8,107,206, 59,237,106,247,142, 30, 46,194,153,129,224, 82,248,182,112,171, 4,239, +100, 53,194, 82,155, 48,178,192,158, 64,166,156,238,211,200, 43, 73, 94, 79,230,179,212,170,219,232,161, 75,121,174,165, 32, 82, + 88,244,128, 47,233,185,128,225,255, 45, 47,129,227,109,211,109,114,223, 34,199,173,103, 34,118, 8, 75, 77, 26, 78,171, 15,115, +207,140, 36, 63,160, 56,242,199,240,102,235,237,170, 18, 88,149,229,201,243,179, 23,239,102,239, 16,240, 94,223, 44,190,255,230, +135,215,127,189,178, 40,216, 20,205, 22,243,197,226, 26,152,163,161, 11, 62,116, 15,159,124,242,233, 31,127,254,142,191, 2, 16, +192, 82, 23, 66,150,121,236, 31,207, 54, 87, 88, 72,199,116,216, 53, 81, 87, 63,125,247,243, 63,151,231, 20, 6, 96, 61, 52, 7, +112,198,142,197,149,158,227, 1,217,124,125,250, 85,156,238, 96,118,119, 89,170, 74,193,172, 35, 65,198,100, 52,241,156, 1, 2, +240, 82,132,175,176, 43, 54, 73,112, 96, 15,167,171, 41, 34,158,233,250,234,236,209, 23,231,211, 11,133, 85, 46,198, 52, 23,211, +183, 73,186,195, 58, 46,183, 43,192,180, 53,229, 33,217, 50, 40,167,189, 31,198,225, 60,152, 11, 31,122,225,112, 76, 55,108,169, + 82,187,106,217, 41,238,248, 19,128,135, 91,222, 45,120,122, 93, 81,198,163,147,112,183, 76, 51,106,138,126,126,226, 27,119, 29, +218,247, 52,133,247,143,215,179,124, 23, 43, 45,215,101, 75, 30,217,114, 85,182, 40,190,101, 54,164, 49,208,133, 54,242,163,131, +206,157, 81,103, 96, 19,197,247,164,202,170,236,231,155,234, 61, 19, 45, 14,146,165, 16,233,191,241, 47, 94,166,175, 55,122,173, +196, 63,254,246,235,229,118,249,203,217,183,143, 15, 39,215,113,136,239,203,178,204,239,251,215,193, 42, 2,182, 46,203, 7,222, + 56, 76,118,231,219,247,239,147,248,217,237, 39, 64, 45, 81, 18,127,249,241,103,219, 36,154,223,204,129,201, 40,219, 73,138, 55, + 41,229, 10, 31, 20, 96,248,120, 56,206,138, 66, 40, 59,171,171,213,229,208,133, 9, 74, 92,203, 5, 62, 96, 12,100, 90, 8,131, +130,120, 3, 79,220,212,135,226, 60,134,189, 88,134,171, 56,143,196, 34,119,164,243,133, 89,242,211,187, 79,223, 94, 93,136,194, + 65,221, 78,101, 74,178, 90, 82,165,213,241,232,100, 60, 60,202,139,162,111, 57,194, 63,216, 9,226,224,244,254,211,213,102,221, +112,163,106, 36,173,227,124,108, 41, 44, 85, 66,158,207, 12, 44,176,145,239,248, 73, 78, 69, 64, 44,210,192, 30,226,104,176,184, +202, 51,173,249, 3,191, 97, 6,179, 77, 59,175, 75,207, 27, 50, 77,157,241,128,224,174, 60,211, 29,245,125, 32, 12,236,229, 38, +171, 32,109, 43,178,196, 34, 17, 5, 76,216,200, 71, 83, 10,187, 72,107,209,246, 2, 4,132, 15,108, 6,165,100, 24,168,101,174, +217,243,152,241,247,250, 32, 0, 81,215,178,219,182, 17, 69, 71,124,191, 68,201, 15, 49,134,242,176,156, 54, 6,156, 86,155, 32, + 64, 17, 32, 11,163,155, 22, 8, 16,160,219,126, 87,191,163,139,238,138, 46,218,117, 22,105, 80, 20,233,170, 73, 29,199, 85, 28, + 75,178, 40, 81,148, 70, 18,197,158,115, 73, 55,240,202, 0, 77, 15,201, 59,247, 53,231,158,243,191,127,175,251, 53,234, 19,205, + 77, 53,144,166,170, 2, 14,158,199,179, 5, 84, 68, 32,227,102, 93, 65, 70, 9,164, 65,230, 30, 86,114,227,176,182, 10, 58, 25, +122, 28, 18, 11,220, 8, 81,212,227, 70,202,241,106, 66,188,116, 61, 71,122,216,137,110,253,123,125, 81,177,168, 22,212,150, 99, +179,222,117, 2, 24, 14, 62,207, 97,114, 68, 22,102, 6, 69,193,180,172,114,114, 65,136,192,115,213,131,151,163,106,147, 3, 18, +194,205, 11, 91, 95, 23,250,203,187,125, 92,149,147,171, 40,246, 41,173,169,229,216,218, 89,175,180, 44,222,205,121,204, 75, 20, +109, 28,197,142,205, 3, 88, 85, 83, 93, 98, 83,141,144,165,194, 17,146, 39, 68, 40,198,150,122,190, 41,138,138,189, 19,238, 76, + 85,120, 68,197, 59,226,233,218,113,100,134,248,165,108,162, 6,115, 76,159,222,220,108,250,150,235,163,156,181, 44, 81,225,116, +237, 6,220, 52, 60,190,131,117,152, 50,193,194, 76, 95,232,204, 40,119,106, 20, 36, 28, 64, 21, 70,118,144,154,158,110, 91, 34, +193,119, 73,137, 98, 89, 53, 31, 17,163,161,165,234,157, 87,200,228, 76,131,168, 18,220,223,240,108, 65, 46,211,128,100,154, 83, + 74,230,138,204,153, 68,187, 38,175,193,218,130,208, 12, 35, 4, 0,150, 20,176, 51,105, 38,162, 16,177, 72,121,111, 72,166, 79, +136, 17, 60, 71, 62, 93,100,227,108,246, 62, 29, 76,151,233,110,208,110,251, 49,178,206, 69,177,204, 86,243,110,124, 27,235, 24, +164, 23,194,215,171, 28,199,197, 6, 56,104,119,239, 38,189,124,193, 17,158,141,212, 50,194, 99, 67, 81, 27,138,209,224, 81, 77, + 43, 14,154,148, 84, 21,154,101, 34,207,216,118,152,213,131,103,162,166, 5, 35,193, 71,132,243,197,218,180,214, 8,145,120, 24, + 17, 99, 50,201, 42,181,200, 28,219, 67,176,239,118,238, 32,101,219,109,182,241, 71,199,221, 99,252,119,234, 91,205,174, 42,194, + 50,189, 89,127,243,228,219,151,127,189,124,216, 59, 89,174, 86,233,120,130, 91,141,102, 35,230,227,101,177,223,222,199,222, 70, + 20,153, 47,103,147,252,250,247, 87, 47,226, 48,134,219, 69,185,237,187, 94,130, 52, 63,155, 92, 77, 47,159,127,245,221,249,240, +124, 55,222, 75,179, 9,156,236, 79, 47,126,108,249,173,241,116,184, 23, 39,196, 86, 26,102,132,210,139,187,154, 42, 32,177, 23, +191,249,248,247, 81,114,127,146,141, 45,182,236, 59,156,152,207, 83,248, 2, 84,165, 83, 36, 10, 20, 13, 79, 12,121, 51, 77,175, +233, 57, 46,202,240,105, 62,129, 47, 59,104,223, 58,190,253,240,195,104, 16,133, 77,178, 23, 80,199,166, 92,173,116,119,247, 96, +182,200, 34,152, 81,169,216, 70, 95,228, 21, 44,186,127,216, 63,187,250, 7,134,189, 21,221, 52,177, 13, 98,201, 16,138,200,241, +199,234, 86, 35,172, 94, 79, 63,208, 48, 44,194,249,251, 7,251,205,207, 2, 53, 76,183, 90, 47,210,161,206,166, 50,215, 44,184, +174,106, 6,255, 6, 84, 71,250, 16, 37, 63,156, 53, 23,204,251, 78,168,176, 6,195, 83,157,150, 74, 58, 42,138, 84,100,124,162, +211, 42,148,170, 85,160, 77, 21, 89,188,236, 23,127,252,234,206,159,185,238,198,209, 15,127,252,252,219,197,235,239, 31,156, 62, +191,255,248,114,145, 19,236,192, 83, 80,114, 18,248,142, 27,248,193, 12, 9, 17,158,104,167,247,235,251,215,151,249,224,100,175, +119,250,249,227, 65, 58, 66, 77,255,118,112,134, 12,224,235, 71,167,203,165, 70,210,109,144,110,196,129,103, 39,252,167,208, 40, +158,216,169, 51, 42, 36, 72,121,152,220, 27,206,174, 8, 72,223,108,119,130, 24,185,127,210, 74,240,113, 67,199,155, 47,115, 10, +234,202,161,221,154,115,203, 5, 2, 54, 69,230, 37, 12,163,118,124,115,249, 86,221, 32,196,101,248,198, 45, 27, 85,202, 39, 39, +101,196, 57, 56, 8,171,182,176, 71, 16,159,186,214, 79,251,167,231, 31,207,214,172,216, 56, 36,197, 81, 46, 42,178,154,244, 33, + 6, 7,185,159, 61,122,246,110,120,206, 49, 37,214, 67,116, 94,251,113,178,212, 11, 27,207, 64, 70, 85,191,197,185,247,109, 24, +134,129, 31,126,209, 59,233,221, 59, 66, 18, 59,154,140,109,242,117, 19,156,157,206,211, 27,234,120,130,171,152, 39, 21, 53,166, +145, 71,187, 54,197,148, 35, 47,188,153,150, 96, 80,193,189,145,179, 34, 96, 16,148, 40,121, 96, 89,183,240,203,186, 11,223,104, +252, 39, 0, 77, 87,211,219, 56, 21, 69,109,191,196,118, 29,199, 78,227, 38,109,153,182,204, 48, 29,205, 20, 10, 72, 51, 12, 18, +130, 34,132, 16, 43, 70,108, 17,140, 96,193, 18,126, 2,127,130, 37, 63,128, 13, 11,118,136,245, 72,108, 16, 31, 3, 83,164, 50, +180,106,160,153,180, 77,219, 73,210, 36,254,136,253,108,115,238,125,153, 93,148,200, 73,236,247,238,231, 59,247,156,185,190, 7, + 35, 97,230,141, 27,230, 5,179,230, 74, 57,207,112,249,112,193,113, 30,171, 81,142,181,224,133, 48, 33,238,192,187, 55,222,194, +182,235,143,122, 60,157, 72, 44, 46, 74, 39, 65, 50,119, 4, 11, 99, 82, 42, 7, 11,135,235,111,184, 77,236,117,155, 78, 95,171, +140,132,201,149,174,167,154,105, 34,150,159, 12,142, 96,118,206,125, 82, 77,249,217, 44,153,207, 87,113,101,169, 38,173,168, 32, + 98, 94, 26,124,207,214,149,109, 88, 38, 62,198,218, 99,211,101,212,246, 77, 73, 44,141,156,169, 96, 9, 39,185,181,246,106,111, +208,229, 35,204,226,206,230,235,167,131, 83, 86, 74, 99,153, 24, 26,103,201,177,238,205,218, 82,221, 33, 99,131, 79, 81,106,229, +108, 72, 85, 58,162,148, 4,139, 52,212,188,108,133, 79,210, 28,189, 98, 11,236, 31,179,170, 47,192,188, 42,186,101,226,125,252, + 60, 85,208,179, 84,163,140, 55, 85,203, 68,218,100, 40, 66,114,210, 2, 45, 73,172, 86,178,102, 94, 81,102,153,158,102,153, 99, +153,247,222,127,239,179,143, 62,217,121,227,205, 89, 90, 28, 28, 30,199, 49, 42,208, 10,211, 73,171,197,230,172,131, 65, 59, 12, +188, 21,136, 40,248, 23, 52,180, 67, 21,141, 80,117, 28, 53, 11,115,141,135, 84,141,186, 45, 92,108, 7,139, 49,213,120, 15,129, +137,200,225, 8,172,201, 88, 39,195,180,104, 30,157, 81,161,138,180,145,177,113,186,201, 28,129,162,176,244,204,208,206,211,209, + 73,116,126,112,113,128, 80,183,230,175,225, 46,131,122,112,153,140,137,182, 41, 79,171,204,189,188,228, 7,117,211,199,198, 24, + 70, 3, 24, 67,173, 90,115,109,239,254,187,159,254,121,248, 59, 12, 82, 16, 11, 51,235, 59,106,250, 76,198,184,124, 18,143, 81, +231, 50, 69,174,128, 81, 81, 7,143,230, 66,169, 65,153,164, 48,234,168,238,120, 46,201,116, 80,163, 51, 39,143,224, 44,186,193, + 70,123, 67, 74,217, 57,254, 71,176,185,194, 17,193, 77,195,239,243, 12, 55, 73, 34, 52,156, 6,150,182,211,237,196,179,233,209, + 89, 39, 74, 38,255,157,116, 94,185,113,251,124,208,231, 3,116, 18, 29,243, 60,191,144, 5, 50, 68,131, 32,161, 11, 95,126,248, +197,195,253, 95, 97, 84,171,139,207,181, 23,219,189,139, 99,164, 35,143,187,123, 40, 74, 38,225,152, 64, 95, 50, 22, 90,229,238, +230, 29,148,116,184,164,110,211, 19, 69,146,136, 84, 49,112, 3,152, 43,162,176,193,147,244,185,204,153,205,180,164,214,188,161, +175, 7, 27,184,133,132,100, 82, 52,226,221, 99,250, 26, 73, 99, 41, 22,252,209,214,149,155, 47,109,108, 63,121,218, 27, 69, 35, +196,185, 52, 75,174,175,110, 50, 29, 66,241,193,107,247, 30,117, 30, 5,245,165,254,101, 63,165,180,209, 88,176, 29,220, 32,105, + 89,240,126, 70, 40,178, 42,182,204,102,220, 87,169,172,120,237, 48,157,142,195,225, 36, 25, 75,162, 79,145,130,230, 39, 17,236, +137, 74,240,118,219,243,110,249,240,239,132,251, 39,249,179,242, 25,150,174,228,108,189,156,167,237,138,153,143,117, 56, 4,159, +185, 82, 79,102,152,126,251,205, 79, 15,127,216, 77,126,220,155, 62,216, 15,112,201,173,235,196, 5,159,243,208,123,206, 45, 10, +179, 66, 26, 79,163, 88,251, 46,125,240, 75,249,199,229,209, 74,163,113,112,118,248,213,207,223,175, 46, 44,127,253,246,231,151, + 50,137,114,233,219, 86,191,119, 81,141,244,108,162,153,169, 24,140, 46,146, 50, 11,252,197,165, 90, 3, 85,228,111,195,253,163, + 40,250,248,197,157, 39,195, 19, 58, 59,181,136,144,252,223,179, 46,226, 43,171, 78, 80,195,139,180, 53, 52, 37, 15, 42, 34, 30, +242, 84, 88, 29,215,114,175,181,175, 33,220,134, 89, 24,198, 33, 76,155,116, 87, 10,141,105,166,204, 22,124,253,116, 88,232,115, +224,160, 87,243,223,217,222,249,187,251, 24,143,130, 41,251,241,247,171,140, 43, 39,156,234,178,215, 74,137,113, 79, 42,102, 24, + 60,240, 48,158,224,245, 50, 81, 6,197,240,111, 73, 26,239, 29,253,133, 61, 41,120, 74,141,132,193, 40,102, 35, 77, 20, 52, 93, +143,140,173,148,157,211, 67, 69,187, 59, 39,146,211, 5,146, 90,162, 65,181, 93,199,116,214, 91,207, 15,194,167,200, 72,182,214, +111, 34, 73, 95,105,172, 52,151, 91, 47, 95,221,222,221,223, 21, 74,213, 78,157,174,170,182, 38,219,164,111, 53, 80,154,148, 74, + 34,173, 44, 16, 84, 38,201, 20,123,172,224, 27, 80, 16, 32, 20,163, 72,164,154,110,107,146,142,169, 87,145, 23,198, 28,193, 74, +188,170, 77,167,137,120,243,191, 0, 68, 93, 75,111, 27,101, 20,245,120,198,158,151,103,198,241, 43, 78,129, 58, 86, 92, 33, 64, +180, 68,188, 68, 37, 88, 80, 40, 98,197,166,101,197, 14,169, 66, 2,169,155,138, 95,192,154,159,193,142, 13,107, 22, 84, 44, 10, + 2, 33,136, 16, 2,210, 68,169, 99, 50,142, 31,241,216,227,121,207,216,156,123,199,106,178,139,100,203,154,249,238,119,239, 57, +223,119,239, 57, 27,252, 46, 82, 31,247,165,235, 19, 34, 18, 4, 4,128, 37, 78,163, 75, 27, 64,118,242, 75,201,137,120,202, 42, + 99,165,254,244,120,226,130, 63,146,227, 54,181,100, 82,240, 21, 11,185, 41,156, 80,228,163, 34, 82,101,194, 50,128,122, 3, 35, + 99,159,211,148, 83,224,146,170, 3,171, 72,226,153, 85,154,154, 17,144, 11,232,200,133, 66,110,117,217,114,202, 38, 15,134,106, +241, 5,101,150,207,238,242, 76, 51,181, 0, 99,109,198,124,235,141,231, 85, 21,157, 66, 84,216, 44, 30,254,176, 96,248,149, 69, +232,130, 13,208,253, 37,121, 78, 75,231,243, 17,248, 26,157,111,139, 98,174,249,144,107,196,251,177,231,250, 78,198, 32, 61,203, +205,183,240,128,212,204, 72, 3, 1,192,152,217, 58, 33, 40,205,197, 81,213,164,170, 85, 2,129,193, 2,151,203, 66, 69, 19,149, + 18,235,172,242,156,119,153, 14, 36,214,248, 15,164, 45, 78,185, 15,139,140,176,217, 88,183, 40,233,114, 25, 80,218, 80,149, 74, +133,228, 88,239,127,246,233, 59,111,189,250,232,231, 31,183, 76,249,147,187, 31, 55, 76,253,232,248, 8, 8, 12, 65,161,240,229, +237, 6,100, 49, 29, 43,229,115, 17, 84, 56,114,161, 32, 30, 39,229,203,115, 58, 61, 65,246,151,153, 55, 72,200, 5, 4, 87,240, + 89, 93,149, 44, 67, 50,117,145,124,156,196, 34,115, 18,230,231,148,160, 89, 51,176,132, 82, 46,211,177,142, 76,101, 10,239, 73, + 4,145,193,130,169,200, 72, 82, 81, 19, 11, 58, 82,157, 7, 68, 63,152, 12,240, 2,119,235,221, 78,109, 87, 83,116,228,154,199, +246,191,246,220,126,239,250,237, 69, 48,163, 54, 50, 81,156, 46, 39, 23,174,131,200,243, 67, 98,108,216, 54, 65, 20, 4,137,119, +181,214, 33, 85, 53, 50,119, 84, 42,170, 25, 69,161, 76, 1, 19,119, 91,123, 4,117,185,239, 30,197,169,109, 93,145,117,217,247, +188,118,237,153,185,239,196, 89,224, 6,206,104, 62, 68,150,143,211, 16,101, 8,155,202, 80, 13, 63,166,249,192,102,165,201, 61, +154, 34,133, 34,221, 71,211,245, 38, 66, 28,216, 28,193,114,255,203, 7,206,204, 25, 15,135, 8,176,115,199,158,204,198,216, 27, + 85,189,122,109,167,135,252,251,235,225, 47, 9, 17, 91, 1,108,250,200,126, 12, 66,128,132,139, 87, 14,114,137, 58,228, 5, 75, +242,143, 42,172,251,211,211, 21, 91,209,146,119,157, 36,133,129,183, 99, 93,161,228, 88, 88,219, 23,131,155, 47,222, 60, 29,247, +121, 65,214,117,171, 69,157, 12, 89,134,215,210,107,245,226, 44,121,243,249,215,158,216, 39,220, 18,135, 28,155, 6, 73,184,165, + 85,203, 98,249,224,228, 96, 30, 44,194,216,223,239,238, 15,103,231,128,252,212,127, 25,121, 79, 70,131,134, 81, 95,250, 11, 26, +254,101,115,194,109,179,165,148,228, 32,242,168, 1, 73,181,240, 73,112, 80,214,155, 37,181,158, 32, 14,106,218,150, 38,107,187, +205,174, 27,204,121, 24, 66,108, 88,237, 36, 38,147,228,151,141, 74,237,149, 90, 97,234, 8,132,153, 88,165,104, 19,237,249,245, + 97, 46,191,192,163, 26, 79,109, 40,176,139,228, 18,138,210, 55,223,253,209,247, 19,171,101,156, 37,241,201,217,100,167, 63, 53, +159,171, 23,158,173,211,189,107,146, 50,108, 87, 8,182, 63,234, 31,125,251,219,106,214,251, 61,138, 64, 19, 27,197,242,215, 7, +223, 31, 58,131, 7, 55,238, 52,117,211,118,166, 98, 92,232,136,221, 15,239,125,113,253,171,143,110,124,126,251,133,187,239,238, +183,223,206,254, 94,252, 53,252,211, 73,150, 47, 85,187, 15,207,254,177,253,255, 26, 69,171, 46,107, 72, 5, 53,179,234,199,228, +190, 77,136, 70, 40,110, 52, 16,217,139, 7, 17, 21, 68, 97,158,136,176, 16, 40,123, 51,111, 54, 93, 76,105,212,145, 4,170,196, +124,154,149,233, 8, 89, 81,215, 64,149, 66,247,218,118,143, 84,243, 66,191,179,221,233,143, 78,187,237,189,241, 98,148, 11, 21, + 26,106, 69, 43,145, 79,139,227, 94,168,248,117,210,157, 73,115, 1, 0,190,221,165,252, 3, 20,216, 52,119, 38,203, 17, 49,112, +234,219, 46,231,105, 80,100,189, 32,210,170, 76,227, 45,114,152, 10,174,182,186, 62,137,219,208,248,210, 27,123,175,219, 51,155, +143, 87, 9,155,145,179, 71,197, 84,100,197, 15,189,117,113,237,120, 11,124,253,116, 56,184,245,254,173,135, 63,253,176,112, 93, + 93,171,208, 69, 11,213,140,220,167, 33,159,147,205,176,214,204,113, 87,168, 16, 6,203,153,160,204,148,201, 53,250,131,227,243, +195, 92, 98,108, 25, 81, 97,243, 64,136, 5, 26,141, 70,106,101, 95,160, 85, 9,216, 63, 77,169, 71, 92, 16,254, 23,128,169,171, +233,109,163,138,162, 51,227, 25,127,127, 55,198,205, 36, 49, 41,150, 34,144,144,160, 69, 72, 32, 85,145, 88, 33, 33,181, 32, 85, + 66, 2, 22, 84, 44, 88,128,132,196,130, 21, 66, 98, 83, 86, 44,186, 65,226, 71,176, 41,252, 3, 16,180, 5, 81, 8, 80,167,180, + 77, 93,130, 90,215,113,252, 17,143,237,241,204, 60,123, 56,231,190, 32,216, 38, 25,231,205,243,187, 31,231,190,123,207, 57,246, +239, 74, 42, 4,255,159, 74, 69, 56,162,194,195,127, 21, 27, 83,199, 0,105,210,212, 12,102,250, 85,109, 56,119,100, 94,106,177, +132, 17,228,146,128, 51,200,214, 41,123, 29, 8,231, 3,165,108,151, 36,226, 73, 89, 73, 37, 9,207, 74,113,101, 52, 27,196,162, +144,128,189,131,195,245,213, 12, 79,105, 25, 89,225,122, 12,165,190, 71,124, 1,131, 17,218, 97,118,152,193,101, 57, 78, 10,222, + 18,159, 10,220,196, 43, 86, 17,219,197,145, 85,138,247,189,248,166,115, 78, 86, 36,191, 57, 4, 65,245,168,197,194,113,210, 88, + 38, 0, 7,220, 13,146,113,242,110, 47,244,152,177, 20,223, 98, 77, 79,121,220,153, 84,204, 20,240, 96, 42,153, 19,245, 22,130, + 59,209,212, 14,205, 99,234,133,130, 50, 84, 62,155, 46,159,160, 25,102, 83,240,239,236, 97,112, 28,185, 89,229, 23,202, 38,118, +199,193,242,168,254,152,118, 12,199,177,121,161,154,182,138,120, 56,235,228,179, 70, 41, 23,215, 42,137, 98,222, 40, 22,146, 31, +126,240,254,231,151, 47,127,119,237,167, 27, 59,191,239,239,223,127,237,252, 43,181, 74,254,230,110, 75,111, 44, 35,245,146, 6, +157,182,109, 64, 4, 38, 23, 42, 14, 2,195,135,255, 8,204, 89, 40,116,236,172,218, 24, 73, 96, 16,135, 23, 36, 41, 22,255,132, +175, 53,182,148,178,224,196,252, 57,173,210,224, 80,139, 84,119,180, 30, 27,103,233, 18,188, 7, 78, 57, 5, 4, 88, 44, 44,147, +200,164,157, 98,150,241, 32,159,195,154,245, 45, 2, 67,128,178,226,185, 21,204, 44, 5, 20, 76,238,198,216,216,235,239, 77, 66, + 32,104,211,173,184,215,238,124,239,249, 19,150,209,163, 57,142,232,197,151,222,254,250,199, 43, 88,255,201,106, 67,234,108,172, + 10, 30,249,195, 5,201,153, 51, 75,161, 90,100,242,107,153, 56,127,227,233, 81, 17,185,117,166, 52,241, 61, 30, 33,181, 60,247, +250,185,206, 30,160,152,194, 79, 52,127, 45,142,201, 4, 86, 97, 51, 96, 35, 39, 96,131, 26, 9,230, 40,159, 22, 17, 62,231, 51, +164,167, 15, 42,185,218,246,211,219,183, 31,222,178, 69, 86,237,207, 95, 90,215,119,174,158,217,122,190, 59,236, 52,221, 45,216, +253,152, 26,141,211,238,176, 91,202,149,120,165,143,239, 23, 7, 92, 56,184, 61,146,241, 70,235, 43,143, 15, 61,226,229, 96, 25, +212,114, 53,153, 99, 44, 5, 1,114, 70,188,230, 73, 21,145,234, 11,182,180, 88, 70, 72, 56,206, 62,121,118, 48,238,123, 51, 15, +200,102,181,234,158,114,159,104,212, 27,253,225, 1,206,221,126,175,141, 88, 2, 36,129, 3,230, 80,219,210,130,121,191,185,125, + 97,231,222, 31,216, 52, 78, 2, 38,136,207,240,250,171,213, 53,236,216,179,205, 51, 65, 24, 33, 86,193,128,181,134, 39,233,231, + 98,179,239, 29, 78, 3,223, 74, 8,247,142, 10,240,223,221, 74,157,146,144, 72,167,156, 20, 54,208, 15,103,210, 38,192,116, 18, +161,183,152, 46,227, 87,107,181,141,209,116,248, 76,185, 80, 61, 93, 49,122,163, 24, 88,146,140, 35, 11,105, 33,145,180, 88,192, +169, 80, 13, 91,186, 80,115,204, 3,141,135,243,169, 86,171,123,229,215,125,192, 46,165, 34,132,163,167,214,203,141,122, 33,137, + 51,132, 44, 42, 45,211,121, 11,219,248,225,239,221, 47,191,253,249,234,221,208,180,123, 97,195,139,252, 76, 34,209,155,120,159, +221,248,102, 45,179,250,197,203,239,221,234,220, 75,206,138,111,124,114,201,253,244, 57,115,148,190,254,209,205,223, 62,190,221, +254,234, 96,195, 61,181,249,206,233, 23, 42,175,246,255,106, 41,123, 30, 43, 99,103,120, 23,135,238,197,122, 19, 43, 27, 76,143, + 76,173,235,168, 29,142,232,223, 46,164,160,164,133,180, 96,212, 54,199,154, 24, 6,240,119,110,117, 93, 72,144, 76,227,223, 78, + 16, 77,109,178,148, 62,200,121, 16,172,158,112,219, 7,247, 97,194,135,227,193,104, 58,232,141,123, 82, 3,224,137,194, 54,206, +163, 96, 60, 27, 25, 34,221,204,170, 50,245, 78,132,110,207, 48, 31, 43,212, 57,229, 78,102,236,177, 80, 66,114, 13,165, 76,153, +126, 38,214, 51, 49,134,248, 40, 50,134,114, 8, 22,190,155,141,100, 36,180,120, 48,120,168,123,106, 86, 10,188, 87,247, 2,111, + 50,159, 30, 77,198,176, 57, 96, 95, 96,148, 82,169,186,217,216,124,235,210,187,221,221,206,160,215,155, 71,225,204,159, 34, 61, +218, 90,219,122,116,216, 97,145,129,165, 78,139, 44,211,194, 52, 0, 12,129,228,184, 89,111,118, 71,143,144,108,180, 15,218,164, + 89,100,147,133, 16, 49,105,221, 95,195, 98, 2, 36,132,137,240, 4, 27,216,153,101,168,181,212,255, 17,128,170,235,249,109,155, + 12,195,254, 18,219,113, 28,219,177,157, 31,237,166, 36, 48,212, 13,117,233, 86, 74, 39,164,110,244, 0,154, 54, 52,117, 8,109, + 7,196, 14, 72,149,118,225, 47, 96,103, 46, 99, 39,196,133, 3, 92, 16,112, 67, 28, 24, 32, 14, 28,144, 2, 8, 52, 4,108, 29, + 37,210,196, 58,154,210,161, 38, 77,210,216, 78,108,199,177,189,247,125,221, 78, 67,170,170, 42,178,170,124,142,243,124,207,243, +126,239,251, 60, 9,190, 31,140,183, 62,225, 59,169,203, 5, 0,202,255, 87,228,163,199, 23, 60, 54, 44, 70, 23, 95, 94,234, 59, +187,240,219, 71,163,148, 0,214,156, 21, 49,205,131,237,147, 76,236,217,135,187,172,169,218,202,217,139,119,239,221, 1,213,117, +176,153, 96,181, 10, 52, 14, 69,112,164, 19, 53, 77,217,226,241,241,202,201,174,213, 33,108,157, 96,209, 31, 79, 47, 1,166,209, +135,129, 75,162, 11, 67,180,235,196, 58, 26, 33, 8, 67, 47, 80, 13,187, 39, 73,127, 82, 40, 4, 96,115, 8,248,114,162,182, 0, + 95, 57, 46,181,111, 42,143,168,141, 35,156,248,130,140, 25,187, 1, 25, 61, 80,124, 56, 23, 15,199,174,161,154,123,163,126,242, +194,129, 93, 27,126, 53,114,162, 82, 54,167, 16, 89, 50,113, 94, 23, 39,212,105, 20, 6, 12, 0,119,100,115,131, 97, 60,116,162, +129, 19, 58, 78, 52, 28, 69,174,139, 94, 4, 64,180, 99,156,118, 67,117, 41,138, 64,243, 99, 89, 18, 46,189,122,121,249,197,243, +141,159,238,200,146,249,230,149,213, 15, 62,252, 56,136,132, 40, 22,239,111,108,111, 63,236, 94, 93,125,203,119,195,159,111,253, +193,161, 46, 3,128,142,210, 17,141, 63,115, 88,102,161,222,128,148,134, 93,149, 44, 39, 49, 17,235,239, 44, 35,128, 84, 74,131, +116,128,165, 4, 88,214, 79,177,144,209,113, 46, 47,225,164, 29, 21, 68, 0,245,113,106, 28,241, 90,206,166,241, 96, 86, 22,114, + 50, 15,128, 14,114, 36,135,244, 29,229, 2,151,140,137, 69,200,133,147, 52,162, 56,196,233, 45,127,156, 10, 97,183, 96,177,195, +252,206,176,147, 99,146,153, 43,218,129,149,227, 85,216,188, 41,203, 2,207,177, 97,181,151,206, 92,254,161,217, 40,105,229,122, +181, 14,212, 24, 22,110,168, 37,248,136, 96,247, 29,147, 93, 40,242, 11,158, 31,250, 35,158,246,126,219,179, 46,156, 90, 25, 7, + 0,112, 30, 60,202,235,183,215,139,218, 84,215,238,228,209, 48, 46,162, 72, 94,126,218,172,216, 78,143, 10,241,209,200,119,128, + 61, 0,213,128,235, 83,228, 95, 4, 16,170,201,121, 80,243,235,173, 63, 61,223, 61, 59,127,254,229,231,150, 27,119, 27,167,235, + 75,205, 86, 51,138, 2,216,215, 71,190,109, 40,230,213,115,171,107,255,172, 47,227,116,232, 54,176, 63, 74, 93, 64, 75, 34, 12, + 6,241,236,246, 96, 7,158, 25, 32,197,150,103, 81,199, 33,166,130, 44, 28,153, 31,142, 71,189, 65, 47,136, 38,207, 76, 31, 1, +166,143,190, 49, 59, 27,237, 65,119,171,219,154,210,203,240,255,187,131, 46, 31,177,221,126,123,224,237, 37, 50,119,233,217, 37, +144, 26,165,124,145,230,110,108, 88,114,115,243,158,161,234, 56, 33, 18, 79,230,106,115,160,214,125,223,239,219,253, 11,167,206, +173, 61, 88, 51, 21, 3,176, 6, 89,152,156,159, 96,231,190, 48, 91,153, 85,164,156,237, 90, 25,148, 94,130, 42, 41, 5,173,248, +218, 11, 23,111,111,192,197, 58,112, 32,157,218,138, 78, 84,235, 15,123,255,149,180, 18,104, 26,216, 50,128,149,217, 78,135,227, +179,117, 65, 40, 62, 95,224,122, 22, 27,251,216,210,157,228, 8, 50,202,113, 72,186,182, 41, 80,252,192,179,144, 70,245,104,214, +242,102,227,190,158, 17, 22, 15,231,159, 46,104, 37, 37,107, 72,146,145, 3,170, 10,132, 93,228,188, 52,247, 99,235,183,247,190, +251,252,139, 91,127, 15, 28, 81, 19,242, 98,158,177,163,138, 90, 92,156,158,185,254,235, 87,205,254,131,107,243, 87,210,176,185, + 57,236,141, 79,222,225,102,185,239,143,254,242,238,251,215, 23,221,147,243,167,231, 38,125,255,237, 79,111,124,246,209,183,175, +191,244,202,204,177, 51,131,205,191,132, 84,248,205,191,191,183, 92,107,165,178, 48, 10,104,242,145,138, 21,112, 19, 76, 85,183, + 92, 27,222,165,174, 24, 79,149,170,112,223,224, 15,248, 92, 0, 13,108,207, 73,106,229,128, 39,158, 71,157, 57, 90,153,145, 83, + 55,186, 31,114,152,104,136,241,170, 19,127, 7,123,108,176,144, 93,198,211, 17,137, 38, 6,112,221,138,164, 84,139, 53,184,225, + 66, 42,153,120,199,220,203,162,106, 6,232, 70,133,146, 6, 54,206, 41,227, 16,136,170,140, 32,213, 10,181, 61,119, 79,226,129, + 98, 9, 56,163,176,239, 7, 64, 14, 4, 44, 1, 89,126,223,165, 5,229, 3, 74,162,138, 89,133,165,120,120,192,139,177,163, 25, + 49, 35,101,240, 71, 6, 2,197,139, 0, 32,157,221, 78, 33,206,127,125,243,203,225,112,132,163, 63, 84,240,105,247,219, 64,169, + 75,106, 25,158, 34, 34,219,220,204,225, 99, 32,136,179,188, 12, 79,205, 86,103, 51, 38,239, 73,244,130, 77, 75,101,253, 16,232, + 57,246,132, 9, 60, 29,125, 97,233,162,168,150,182,122, 45,154,174,194, 55,250, 72, 0,170,174,174,183,109, 50, 10,219, 78,147, +216, 78, 98, 55,109,178,166, 13, 97,237,214,178, 45,157,134,128,176,105, 18,140, 1,210, 16,162,160,169,119, 92, 34,174,198, 5, + 84, 8, 36,238, 16,183,252, 9,110,166,113,135, 4, 72,252, 0, 42,168, 80,165,106, 76,221,186,118, 75,187,245, 35, 29,142,243, +225,196,241, 71,252,241,114,206,121,211, 33,174, 45, 37,214,107,251,156,231,156,243,156,231,193,248,206,215,154, 68,145,157, 88, +226, 34,118,198, 85, 14, 64,159, 18,234,241,138,255,147,123, 30,117,136, 70,169,159, 9, 68, 26, 69,199, 15, 56,107,137, 73, 80, +239,160,197, 48, 11,184,156,165,112, 98,184, 7, 37,240,230,246,223, 36,185, 46, 17, 79, 81, 34,114,126, 48, 51, 81,177,108,130, +243,226,127, 5, 4, 4,119,236,243,177,145, 16, 38, 57,210, 1, 80, 9,166,180,178, 19,216,124, 65, 20,202,118,116, 74,146, 53, +200, 16, 99, 82,146,118, 79,176,180,243,136, 1,173,171,227,254, 16, 37, 76, 26,237, 67,118, 50,120,124,126,227, 34,119,185, 35, +183,216,116, 18,112,106, 2,125,118, 2,236,204, 12,220,193,220,212, 89, 44, 44,112,132, 2, 24, 92,165,113,177, 3,181, 2, 78, + 23,112,204,202, 20, 85,182, 61, 40,198,165, 36,106,236, 73, 67,146,194,227, 19, 99, 28,178, 71,156,111,139, 7,203, 53, 0,185, +101, 22, 96,145,107,111,188,185,242,205,247,231, 22, 95, 49,143,235, 90, 54,187,120,241,226, 15,183,239, 16,166, 16, 33,242, 61, +170, 63,105,153,198,151, 95,124,190,179, 83,223,217,221,195, 81, 43,122, 99, 98,125,152, 83,164,172,154,208,179,146,154,150, 50, +170, 72,139,195,212,202,162,237, 18,132,161,113, 2,206,207, 67, 59, 81,119, 56,244, 1,159, 12, 0,109,218, 1,128,119,136,251, +142,203, 28, 7,141, 62, 80,250, 35, 70, 70, 96, 70,133,176, 40,170,138,168,202, 34,109,159, 82, 62, 68,201,120,162, 64, 83, 64, +192,173,241,136, 13, 67,226, 98,146,220, 2, 74,187, 42, 98,164, 64, 32,237,159,155,168,190,125,233,218,221,253, 13,200,172,101, +189,108,121, 86, 86,209,122, 3,231,176,181, 63,157, 47,175, 63, 94, 75,167, 32, 34, 51,122, 94,132, 69,208,124, 46,167,200, 50, +110,253,197,209,116,190,226, 96, 63,145, 65, 64, 55, 44,163, 82,152,245, 67,215, 13,156, 86,239, 31, 9,149,123,253,235,151,222, +178,250, 86,140,194, 71,166,158,157,128,192, 7,207, 11, 48, 47, 0, 55,163,211, 72,208,126,254, 24,154,160,203,190,239, 37,136, +172,121,243,234, 71,107, 15,255, 52,187, 29,192, 1, 7,173,195, 16,221,168,169,148, 30,186,114, 82, 89,189,191, 90,173,156, 95, +221, 90, 69,123,172, 48,210, 85,173, 54,127,229,168,125,212,119,173, 79, 63,188,181,177,253,215,187,175,222, 88, 88, 56,191, 83, +223,132, 3, 9,224,255, 66,239,184,221,128, 24, 90,212, 38,219,125, 83,147,245, 71, 71, 15, 27,237, 70, 33, 87,168, 86, 94,170, +205,215,234,141,199, 3,215,158,204,141, 39,144,124,213, 5,236,180, 84, 91, 50,186,207, 14,154, 7,182,107, 85, 95,188, 0,239, + 12,142, 10, 73,155, 98,110,234, 12, 74,217,188,190,180,249,244,126,128,164, 82,177,148, 47,193,221, 50, 52,179,124,134,190, 26, + 66,252,193,107,239,195, 63,250, 81,208,236, 26, 25, 57, 3,192, 16,158, 22, 68,127, 27, 71,223,237,123,123,119, 35, 98,197,122, + 80,154,198, 65, 38,165,238,155, 79,199, 18,252,197, 38,123, 16, 49,158,155,169, 66, 28, 92, 84,132,226,213, 83, 66,183, 39,132, + 67, 17, 73,105,225,115,191, 22, 44,146, 73, 84,129, 19,234,185, 39, 80,132, 20,126,201, 50, 3,167, 29,159,157,204,235,105, 72, +253,114,110, 76,157,204, 77,104, 47,204, 8,133,130, 96, 56,127,220,254,253,206,111,235, 91,221,190,151,134, 58, 90, 82, 32,240, +136, 90, 16,149,154, 78,183,101, 53,191, 93,255,165,144, 42,174, 84,223,235,244,226,143,127,250, 78,128, 76,119,157, 29,219, 79, + 62,251,241, 86,249,171,105,101, 62, 85, 90, 46, 44,127,114,227,193,207,247,222,249,117,121,101,225,235,133,151,175,152, 71, 27, +107,199,219, 45,207,188, 60, 85,205, 37, 83,112, 38,156, 62,235,134, 46, 84,111,124,173,156, 74, 46, 3,190,196,130, 94,236,185, + 61,200,175,144,234,224,211,134, 40,111, 59,125,168,224,243,185,252,229, 11,181, 7,251, 91,200, 0,140, 2,184,164, 36,229,217, + 83,167, 59,118, 39,226, 98,113, 44,234,251,240, 25, 12, 71,233, 12,181,148,253, 46, 18,106,137, 81,195,189,178, 4,134, 14, 89, + 35,197, 78, 68,197, 54,185, 1,147,212, 92,224,249, 30,173, 2, 6, 39,206,188,188,157, 21,243,194,129,111,253,143,103,199, 81, +200, 4, 27,160, 12,117, 23, 56,243,114,180, 2, 36,208,142, 35,106, 58, 97,151,153,177,211,229,217,180,172,236,238,237, 10, 68, + 58, 15, 3,236,204,208,213,200,114,104,209, 82, 64,193, 25,211,106, 82,125,192,184,191, 38,218, 39,208,143, 2, 68, 0, 56, 82, +210,103,236,192,230, 70, 79,240,230,228, 20,173, 82,156,107,246, 12, 36,233, 99,214, 73,168,104,120, 16,253, 43, 0, 81,215,243, +219, 54, 25,134,227,216, 77,236,216,233,226, 52,212, 9,237,250, 51, 73, 87,180,193, 90, 13,181, 18,211, 0, 9,184,236, 48, 64, +156, 55, 14, 28, 57, 84, 72,156,224, 80, 33,132,224,200,223, 48, 1, 23,142, 8, 49,168, 16,168,155, 0, 49,212,195,196,143,178, + 54,144,174,105,179,252,182, 19, 59,113,220, 56, 60,239,235, 68,220, 29, 59,246,247,125,239,251,124,239,247,188,207, 51,174,191, + 83,163,121,224, 46, 55, 18,232,197,142,155,100,246,250,157,168,164,156,249,212,254, 35,145,124, 74,224,144, 57, 36,169,108,182, + 40, 11,196, 35, 3,137, 48,214, 54,161,178, 76,143, 72, 47,126, 64,185, 34,205,225,179,190, 79,134,236, 10, 17, 18,165,200, 92, +106,161,238, 52,184,171,149,162,138,229,152,116, 96,202,174, 26,227, 67, 84,250, 3,236,134,229, 13,199,158,224, 65, 83, 89, 68, +146,169,109, 21,187,233,228,108,217,122, 44, 50,207,140,109, 36,169, 3,126,200, 84,182, 41,205,192, 59,117,221,182, 47,248,225, + 81,193,145, 61, 75, 4, 31,155, 18,143,141,132, 70,188, 87,202, 61,248,153,215,231,202, 23,117,129,177,232,166,101,155,182,219, + 65,174, 2,164, 97, 54,183, 79,187,215,192, 31, 83, 28,138, 98, 40,243,164, 66, 38, 27,228, 73, 54, 68, 82,139, 70, 68,160,233, +152, 18, 6, 52,166, 19, 87, 98,182,144, 45, 14,155, 91, 50,175,152, 44, 46, 9, 52, 25, 73,237,249,171,235, 3,215,250,252,179, +219,139,243,243,186,158,248,118,103, 71, 85, 21, 53, 42,105,114, 68, 85, 34,133, 98, 65,153, 16, 95,191,113,125,247,238,143,248, +109, 52, 42,113,136, 23, 88,226,141, 78,107, 17,175,123,110,168,109,251, 64,102,129, 14, 68,128,235,113, 49,130,250, 51,171, 79, +125,242,225, 7,239,110,109,189,241,234,141, 43,107,235, 64, 13, 71,197, 99,199,233, 17,213, 28,201,154,106,183,146,166, 72, 9, +172, 93,146,240, 18,144, 10,113,183,174, 27,194,252,247,104,114, 10,140, 49,199,254, 47, 44,245, 7,180, 44, 71,200,255,129,234, +156, 68,131,230,126,102,209,251,183,126, 84, 56, 57, 64, 80,203,167, 87,123, 3, 7, 57, 6, 1,186, 88, 59,224,206, 58, 39,117, + 46,101,118, 90,172,160, 66, 91, 77,224, 29, 36,126,210,119, 35, 81,137,254, 48,140,231,246,130,157, 23,144, 72,173, 93,109,118, +170, 24,214,185,212,124,221,174,147,244, 82, 84, 41, 86,138,216, 72,229, 50, 23, 42, 86,153,123, 71,109, 22,137,237, 55, 59,245, + 1,101, 51, 34,234, 44,165,115,221,158,131,168,221,238,118, 76,187, 85, 56, 57,196,216,173,231,215, 45,199, 90, 76, 47,166, 19, + 6,182,171,236,180, 46, 36,227, 58,114, 6,230,135,233, 52,103,146, 51,237,110, 59, 63,179,178,119,120, 31, 49, 2,219,249,251, +251,191, 0, 80,151, 42,165, 82,185, 68,140, 41, 62, 81,199, 76,195, 34, 41, 19,169,241, 89, 64,105, 35,149,206,157, 95,209, 36, +185, 63,240, 74,181,163, 92, 38,187,127,188,143,248,187,253,214, 71, 63, 63,216, 93, 91,186,140, 5,121, 92,125,132,172,186,145, +187,178,148,201,255,245,232,143, 73, 57,238,244, 28,108,150, 55,243, 27, 88,123,149, 86,229,225,233, 67,187, 71,129, 9, 55, 71, +120,217, 88,217, 92, 54,178,166, 99,225,179, 96,136, 30, 55, 79,237,190,189, 58,147, 39, 78,180,235,144,248, 59, 23,127, 49,210, +248,236,215, 46, 93,173,182,170,200,197,146, 64,238,193, 73, 45,169,107, 9, 46,221,186,212, 66, 73,254, 51, 79,212,154,135,115, +153,167,215,212,116,236,162, 31,178, 58, 33,207, 19, 16, 63,184,214, 65,157,171, 76, 62, 37,238, 2,147,178, 70, 42,133, 12,122, +136,132,236,198,100, 53,166, 77,170,138, 22, 79, 38,245,132,174,199, 85,185, 85,173,223,249,238,183, 59,191,254,249,119,211,242, + 36, 9,105,196,101,107, 68, 57, 34,197,194, 10,226,123, 68, 20,126, 58,249,231,135,211,189,155,203, 47, 45, 74, 83,175,109,191, +143,155, 87,111,153,234,150,124,254,203,121,251,251,198,206,246,167,223,124,117,187,240,245,238,165,206, 11, 47,126,124,173,244, +197,241,155,247,222,121,239,185,183,179, 98,250, 65, 99,111,175,126, 48, 61, 57,123, 81,159,118,128, 44,168,228,225, 47, 27, 11, + 38, 75,240,231, 51,203,140,109,196,204,212, 44, 66, 10,198, 23, 89,214,236, 90,212, 83, 74,205,117, 84,226, 75,159, 51,238,254, +126,143,196, 61, 38, 34, 24,151,190, 7,136,224, 86,205, 26, 86,243, 43,151, 95, 46,213,203,186,170, 51,161,221, 15,143,107,235, +184,115,214,200,226, 59,211,135, 24, 14, 16, 25, 47,204,174, 52, 58, 45, 60, 59, 16,119, 70, 48,153, 16,194,201,120, 10,176, 90, +215,244,185,233,133,166,213, 24,121, 31,177, 12, 37,235, 67, 72,134,110, 32,187,111,102, 55, 75,205, 83,159,164, 17,252,192,218, + 9,215,197,228, 56, 57,184,134,165,132, 70, 38,215,252, 18,129, 45, 31, 85, 30,168, 59, 41, 36,212,106, 21, 22,149,161,222, 30, +170,160,113,147, 51,251,153,144,206, 38,181, 61,159, 13,104,169,249, 28, 95,249,198,255, 27,119, 8, 67,155,138, 66,140,146,249, + 34, 76,158,154, 89, 9, 5,200,159, 95,146, 37, 10, 66,255, 9, 64,212,181,244,182, 81,133,209,241, 99,102,252,152,241,196, 37, +113, 29,135,218, 74, 8, 14, 36, 21,164, 64,216, 20,168,154,150,170,170, 80,164, 22, 85, 44,186, 98, 1,252, 1, 54, 72,221,176, + 70,176, 67,160,246, 15, 32, 33, 86, 72,168, 72, 44, 42, 89, 66,170, 2, 82, 90,129, 80,226,144, 98,108,167,118, 98,123,252,152, +241,188,239,240,157, 59,137,144,178,115,252,184,119,238,247,188,231,156,239,196,191,199, 49,246, 87, 98, 39,218,146, 49,110,135, + 62,151,144, 4,194,120, 38, 51, 75,137, 21,215, 83, 1,143, 75,224,192,126,198,201, 99,112,112, 49, 17, 25,174,231,112, 1, 99, + 33,186,192, 17,254,247,160,140,235,149,211,217,144,150,139, 85, 58,229, 83, 27,140, 3,250,132, 87, 22,214, 59,195, 78, 2,187, + 76,107,242,163,227, 23,240, 27,122, 8,224, 48,191,144,155,167,100, 28, 14,221,181, 5, 78,204,112, 92,211,180, 38,244,227, 71, +214,136, 27, 97,130, 79, 28,225,115,203, 89,176, 84,172,234,211, 30, 21,245,208,227,143,100,122,195, 8, 20, 26, 33,134, 80, 52, + 49,193, 87,229, 28,218,172, 16,243,163,162, 73, 21,133,100,192,131,228,169,194, 62,111, 27, 97,216, 94,152,146,210, 92, 78, 4, + 55, 29,232,205, 37, 96,102, 73,150,149,164,132,229, 50, 74,138,205, 41, 5, 93,148,102,252, 98, 18,115, 44,165, 36,121,121, 65, + 73, 39,146, 18,224,137,228,154,193, 30,196,136, 7,232,189, 60,109,182,127,173,213, 30, 60,248,233,247,157, 63,175,108, 94,214, + 20,229, 97,237,161,150,149,101, 41,158, 74, 37, 84, 14,141,111, 55,159, 94,187,122,105,106,140,159,117,218, 20,215, 47,172,174, +140,199, 35,242, 76,241, 16,108, 44, 50, 88,211,246, 13,139,162,104,232,121,161,227,241,203, 91, 62,193,253,140,154,187,247,205, +215,163,145,113,239,254,253, 90,173, 70,155,250,254,214,123,119, 62,184,217,106,213, 13,163,175, 41, 41,144,187,229,184,132,137, + 23,244,255, 81,229, 65,158, 61,180, 93,144, 40, 40, 98, 75,224, 80,199,114, 89, 42, 23,146,106,134, 74, 75, 0,243, 57,253, 0, +120, 51, 31,153, 32,190, 46,112,153, 53,101,174, 31,234,150, 41, 81,197, 19, 12, 7,211,190,195,156,130, 82,180,124,183, 90,122, +121, 72,233, 38,212,228, 97, 6,224, 98,112,174,176,152, 16,125, 15, 67,180, 41,114,159, 50,100, 80, 60, 41, 41,176,198, 67, 46, + 9,174,155,131,226, 76,233,195,119, 63,254,183,219, 32,231, 69,133, 20, 57, 86,221,232,173,148, 86,245, 73,159,234,131,197,194, + 11,244,112, 69, 62, 21,107,233,236,242, 65,103, 95, 83,242, 22, 40,139,126, 86,202,221,186,121, 91,239,235,173,227, 67, 19,218, + 24, 78,185,112,174, 63, 58,122,123,237,157,158,126, 68, 81, 71, 77,101,185,178,154,160,202,234,139,229,234,246,222, 35,122,120, +100,192,182,239,154,182,129, 64, 26, 3,203, 47, 4, 45, 5,140,167, 84, 82, 22,144, 66, 26,231, 43,231,159, 28, 60,198,208, 90, +199,238, 13,143,201, 62, 65,169, 85,103,139,149,202,160,215,221,254,235,209,209,176,123,241,165,141,189,214,223, 20,209,181,140, +150, 87,206,212, 15,119, 95, 91,186,112, 54, 95, 24,154, 67,242, 2,229,185,115,187,173,122, 18, 56,165,176, 60, 87,145,161, 73, +208, 31, 27,163,253,195,221, 70,183,241,198,242,235,237, 94,147, 22,117, 99,227, 58,185, 18,203,177, 75,249,121, 9, 84,246,164, +229,152,182,231,192,230,129,185,114, 0, 8, 99,236, 57,117,150, 2,128, 97, 27,185,180,170,102, 20,202,118,149,116,150, 22, 75, +251,237,186,147,137,211,123, 94, 96,133, 13, 77,176,166,130,103, 11,152, 21,199, 56,125, 36, 34,102, 70,112,180, 56,239, 71, 10, +145, 86, 9,109,139, 66,241,215, 91,136,251, 9, 89,200, 21,210,197,209,180,115,240, 79,231,183,253,230, 78,179,123,236, 56, 46, + 20, 41,169, 36, 15, 44, 68,113, 92, 74, 41, 41,113, 94,153,125,115,249,246,100,220,251,242,241,207, 71,182,254,233,210,214,197, +203,119,178,159, 20,238, 46,126,190, 94, 89,213,190,213,186, 63, 52,190,251,234, 11, 91, 9,210,170, 18,230, 98, 79,246,127,121, + 53,190,185,245,209,141,187,223,127,214,254, 35,216,186,114,171,219,216,254,241,112, 39, 72,200,215,231, 87, 12, 15, 98,141, 65, + 44, 92, 44,148, 59, 3,242,203, 51,150,109,210,186,144, 77, 91,147,180,152, 94, 43,175, 61,211, 59,192,248, 70, 8,111, 14,105, +187,180,250,214,110,187, 46,138,128,149,229, 51,218,196, 53,231,120, 89, 79, 25, 64,253,176, 30,128, 85, 71,111, 71, 25,196, 25, + 63, 96,159,210,145,211,178, 90,127,124, 44,162,101, 73,217, 73,181,222,222, 11, 4,159,242,177,171,235,155, 84,207, 1,201, 19, +130,128, 77,167,118, 98,143,209, 75,240,121,234, 25, 48, 73,146,171, 37, 10, 6, 3,142, 18, 4, 56, 53,186,192, 71,163,143,159, +105,170, 30, 24,212, 84,125,158, 39,129,164, 29,139, 18,248, 72, 8, 78,160,167, 95,198,196, 36,207, 38,163, 6, 20,199,227,127, +148,116, 6,124,126, 23,218, 75,140,130,150,142,219, 8,118,170,203,119,210, 35,143, 11,241, 19,254, 82, 24, 49,120,240, 26,228, + 70, 2,191,148, 95, 24, 65,176, 26,190,151, 15, 76,245,121, 71, 46,246,159, 0, 68, 93, 75,111, 27, 85, 24, 29,219,243,244, 99, + 60,118, 28, 39,105,235,164,105, 2,132, 60,160,152, 68, 36, 36, 69, 52, 34,145,216,181, 18,236,144,248, 3,108, 64,130,101,196, +178, 98,197,130, 13,187, 10, 36,144, 64,236,232, 2,164,174, 10, 2, 9, 36, 54,109, 48, 84,173, 99, 7, 59,126, 76, 38,142,237, +120,158, 30,115,190,123, 19, 88,121, 54, 51,158,185,143,239,126,231,187,231,158,243,127,124, 15,152,223, 99,136,145,116,174, 0, +198, 43,236, 84,108, 96, 92, 31,225, 66, 70, 72,184,240,233,162, 71,227, 87, 18,149,190,219,139,147, 55, 8,167,114,115,187,165, +115, 36,128, 79, 32, 19,134,169, 5,179,219,110,116,234,200,130,137, 61, 25,178,201,108,211,113, 68, 77, 73,226,223, 73,195,132, +241,131,144,161, 63, 51,185,160, 72, 42,224, 88, 16,184, 62,242, 84,198,180,193, 99, 53, 89,225,252,107,182,126, 18,212, 82,165, +248,112,196,111, 68,203,106,167,103, 22, 89, 41, 50, 53,206, 64, 24,146,149,179,164,121, 8,208, 92,232,146, 31, 60,102,177, 6, +119,225,133, 85, 5,216,194,183,221, 62,169,243, 8,172, 11, 89,145, 69,147,147, 36,192, 54,164,193,193, 77, 27,216,167, 80,245, + 71,162, 98,142, 66, 28, 87,137,196,233, 85,137,118, 62, 73,177, 17,125,230, 8, 14, 98, 46,214, 41, 63,106, 59, 64,124,100, 2, + 79,198, 52,177, 8,185,151,138, 17,153,184,174,209,141, 87, 54, 86, 95, 90,251,233,151,223, 95, 46, 22,103,174,206,127,243,221, + 61, 63,140,133, 67, 49, 28,146, 25, 67, 48, 20,155,173, 78,241,197,162,174, 27, 15,126,254,117, 44,155,249,228,206,157,118,243, +168, 82,173,196,227, 50,219,119,229,108,122, 18,161,193,133,134, 38, 0,122,192, 27, 8,195,245,181,235, 55, 54, 55,246,246, 62, + 42,151, 75,182, 99, 85, 42,127,253,120,255,123, 4,244,183,110,191, 89, 42,253, 22, 87, 71, 89, 67, 82, 20,188, 51,219,219,103, + 71, 69,201,180, 71,140,158, 43, 73,176,116,142,163, 13,102, 83, 16, 9, 25, 92, 64,118, 65, 42,129,148,118, 83, 25,138,232,152, +204, 59,139,100,241, 36,113, 16,161,157,156,148,164,166, 36,221, 11,221,148,146, 44,155,143,105,223,151, 54,176,135, 76,138,150, +136,170, 88,233, 0,137,182,175,223, 44, 55,171,140,154, 70, 71,234,209,182,151,178, 87,108,111,144, 84, 18,104,224,237, 23,118, +240, 72,179,107,150,170,251,164,171, 69,110,150, 71,205, 78, 61,157, 52,204, 78, 3,235,132, 24,147, 79,186, 38,211,121, 38, 10, + 17, 0,143,235,145,155, 74,167,127,252,236,229,133, 74,243,192, 58, 49, 35, 62,117, 25,102, 17, 38,106,223,177, 55,151,214,231, + 46,205,233, 73, 3, 8,228,105,171,204, 60, 2, 71,173,147, 6,226,230,250,115, 27,200, 30,242,153, 92,181, 85, 81, 21,126, 66, + 0,171,149, 80,200, 77, 99, 4,203, 49, 25, 15,105, 88,245,173,229, 45, 77, 82,254, 49,107,249,204, 68,111,208, 69, 3,220, 88, +217,180, 78, 45,164, 29,245, 86, 61, 36,131, 61,225,181,165,173,102,167,129, 52, 60,167,143,249,158, 91, 51,235,152,171,142,231, + 30, 52, 42,125, 7, 95, 71,192,165,107,159, 98, 44,208,129, 91,118, 86, 20,128,117,101,118, 25,216,108,113,122,241,207,195,125, + 12,201,164,146,106,119, 90, 3,187,135,183, 42,140, 95, 57,104, 30,120, 46,109, 89,239,174,237,174,206,175, 62, 61,122, 2, 76, +152,215,199, 0,225,185, 53, 51,134, 50, 66,127,143,114,127, 62,161,252,158,125, 76,199,218,226,227, 51,130, 55,245,234, 56,201, +249,250,110, 4,195, 56, 18,158, 91,113,252,231,178,199,102,118,200, 78, 93, 80,135,162,139,172,185,253, 35,227,193, 97,187,212, +246, 13, 63,226, 71,219, 21,171,215, 15, 2,155,204, 41, 17,211,113, 65, 26,152, 72, 39, 92,230, 65,152, 82,100,160,202,154, 25, +109,245,172,207, 75, 63,172,167, 87,222,155,127,187,112,247,230,221, 55,190,253,234,241,151, 31,126,253,129, 48, 38,220,123,247, + 83, 53,163, 21,244, 73, 45, 38, 27,162,222, 25,245, 74,143,238, 47,239,236,108,246,183,223,255,227,157,189,233,143,175, 26,217, +207, 30,125, 97,133,225,173, 66,209, 29, 57, 76,198, 53,125, 54,232,219,158,155,142, 39,207, 92, 7,171, 35,176, 32,226, 53,121, + 58, 50,231, 9, 78, 91,103,100,111,170,175, 30, 30,215, 60, 4, 46, 81,101, 38,221,153,116,220,168, 35,155, 38,109, 3, 2,206, +207, 95, 94,244, 3,119,105,102, 9, 17,185, 56, 95,236,219,131,180,166,207, 77, 92, 35,136,233,217,164, 58,142,108,218, 31, 32, +149, 4, 36,202, 27, 19, 15,171, 15, 89,181,134,204,153,153,241, 56,242, 51,113, 50, 61,133, 60,224,245, 91,187, 79, 74,127,103, +211,185,250,113,205,245,108,180,153, 79,210,179, 68,141, 61, 99,132, 46, 46,226,133, 81,193,214, 99, 98,103, 25,137,236,132,145, + 23, 70,140,231, 77, 36, 17,146, 43, 33,178,242, 8, 19,202,197,170,159, 75,229,128, 62, 73,171,142,196,133, 2, 22,187, 72,251, +143, 68, 34,169,116, 17, 17,248,246, 50,247, 61, 26, 93,132, 95,198,129, 51, 18, 70, 38,145,117, 2,155,251, 66,159, 14, 58,124, +229,158,205,207, 2,232, 80,122, 58, 26,106,114,226, 95, 1,168,186,150, 30,183,169, 40, 28,191,237, 56,177,227, 73, 38,175,105, +103,162, 36,109,209,244,161, 14,163,182, 44,202, 2,209,194, 2, 85, 45,136, 5, 18,130, 10,132,202, 15, 96,129, 64, 98, 7, 93, +177,103, 9,127, 0,216, 32,209, 5, 35,218, 25, 80,233, 6,177, 64,213,116, 74,105, 75,160, 73,243,118,252, 72, 98,199, 9,223, +185,206, 2,164, 40,155, 56, 81,124,143,239, 57,223, 57,247,156,239,227,255,163, 4, 30,167,231, 76,250, 97,249, 48,208,125, 82, +111, 72,226,127, 66,174, 49,242,130,223, 31,120, 3, 55, 28, 33,162, 99,169,131,104, 18, 67,247, 36,213, 97, 88, 14, 67,127, 8, + 96, 60, 42,103,203,127,247,254, 66, 48, 19,168, 82, 76,117, 20,153, 26, 0,120, 82, 24, 73,240,254,212, 13,130,113,204,156,192, + 10,214,194,126,243,238,208,235,199, 76, 57,172,204, 26, 31,113, 34,175,153, 2, 77, 11,130, 72, 29,147,132, 72, 18,126,232, 81, +189,133, 84, 61, 41,222, 2,136,225,223,198,211,173, 36,252, 22, 6, 20,153, 24,105,126,196, 86, 6, 43,194, 40,252, 67,210,247, + 8,124,199,183, 1,133, 42,133,163,140,112,156, 53,145,179, 97,170,128,209,112, 51, 81, 2, 58,123, 32, 4,203,210,100,226,198, +154,133, 27,185, 10, 16, 28,144,174, 42,176,161, 83,145, 7,182, 37,150,164, 57, 77, 54, 49, 11, 45, 82, 26,151, 73, 9,166,129, + 28, 95,200,232,184,140, 35, 90,126, 17,119, 23,181,155,173, 11, 47, 94,200, 91,230,238,238, 94,185,144, 63, 86, 41,233,248, 84, + 97,225,157,138,113, 33, 86, 98,181, 80,226, 56,101, 48,244, 95,189,124, 37,119,184,122,233,149,215, 16, 74,166,126, 4,207, 12, + 88, 7, 24,110,234, 98,126, 69, 41,231,213,114, 86, 62,132,247,162, 92, 92, 85, 74,133,180,109,119,224,149,107,149,242,199, 31, +126,112,253,250,103,231,158, 61,117,235,199, 27, 88,236,173,147,199, 3,114,211, 92, 20,136,211, 41,117, 88, 34,192,135, 84, 97, +103,240,159, 6,197, 56, 85,150, 0,202, 52, 69,164,102, 59,129, 87,197, 5,178, 10, 93, 21,140,164,104,165,196,140, 46,153, 41, + 41, 5,144,172,203,102, 90,206,173, 40, 57, 75, 51,224,186,146, 74,164,205,135,115,219,159, 57,147,249,248,169,247,143,169,102, +144, 30,105,178,198,113, 66,181, 80,195,151, 4,198,233, 10,123,181,250,109,198,177, 57, 79, 39,211, 73, 37, 41,203, 90,223,237, +193, 82, 93,183,139,165,222,189,123,179, 61,108,107,138,238, 79, 61,160,230, 83, 27,155, 72,122, 17, 84, 21, 49, 9,231,126, 40, +187, 65,253,191,164, 38, 17,169,162,186,125,228, 76,163,247,152, 14,220,124,219,210,179,219,181,109, 92,249,180,221,196, 79,193, +147,194, 76,200,175,177,101,190,187,115, 35,148,136, 94,175,227,116, 11,153, 66,189, 80,129,125,129,194,116, 89,191,189,127,251, +113,251,209,195,214, 35,142, 29, 79,241,188, 68,195,144,211, 49,130, 10, 18, 2,215,119, 44,221,128,215, 56,104,220,191,245,251, + 94,173, 88, 71,134, 22, 4,158, 70, 99,194, 74, 49, 83, 0,188,242, 70,253, 21, 35,135,212,250,196,250, 49, 0, 47, 62,138,224, +145,115,134,181,185, 94,175, 23,171,139,249,172,158,223,224, 23,209, 51,107, 71,158,244,155,185, 84, 22, 48,224,234,203,111, 87, +139,235,237, 1,178, 88,239,183,251,191,218,126, 31, 16,222, 76, 26,212,140,187, 88,156, 57,126, 86, 97,179,154, 7,141,123, 69, +115,117,173,180,126,118,235,249,131,198,254,215,123,223,192, 83,192,143, 20,173, 50,220, 83, 56,139,181, 13,248,146, 85, 92,203, +173,189,116,250, 34, 41,231, 76,124,182,245,231,164,220,129,221, 41, 38, 24,199,175, 24, 83,199,136, 82, 66, 16, 99, 78,224, 37, + 4,100,119, 77, 12,115,176, 7, 63, 91,252,209,117,127,110, 63,112,230,212,226, 51, 36,160,150,240,231, 64,235, 36, 15,131,236, + 46, 88,176,200, 30,197, 10,145, 36, 72, 13,168,137,133,200,202,242, 78,243, 30,126,237, 82,254,116,237,218,235,209,157,196, 59, + 59,111,188,123,254,253,196,249,196,206,229, 47, 37, 67,233, 5,147,143,126,249,234,205, 31, 62,127,239,230, 23, 13,199, 15,164, +168,245,237, 79, 23, 63,121, 78, 78,100,175,125,255,105,238,232,185,138,150,159,250, 61,123, 22,170,188, 12,159,236, 76,156,225, +100, 36, 73,194,136, 68,183,105,170, 60,107, 88,105, 69, 87, 4, 25, 15,204, 86,245, 36,205,242,113, 36,180,192,196, 50, 40,150, +203,108, 88,186, 51,234,226,229, 77,189, 88,145,132, 81, 47,136,205,193,147,158, 59,128, 65,177, 97, 31,182, 30,132,164,131, 48, +110, 13,137,247, 34,155, 92,169, 23,235,212, 35, 59,153,136,172,110,227,250,182,169, 26, 18,155,184, 94,246,165, 80, 65,134, 26, + 37,105,200,227,207, 22,182, 73,223,233,225, 81,217, 60,124,226,234, 11,111, 1,148, 32,105, 24, 17,179, 35,143,231, 57, 37,167, +225,213,219,195, 14, 86, 53,111,228,177, 96,125,167,139, 28,162,227,118,136,163,153,209, 14,215,242,245,142,221, 30,186,182,231, + 59,240, 65,182, 75, 7, 69,192, 43,228,116,168,239, 99,102,105, 25, 25,240,113, 1, 16,166,148,204,210,210, 57,179, 88,158, 84, + 52, 93, 51,168,189, 74, 49,102,164,107, 56,118,199, 35,137, 83,150,245, 18, 54, 94, 12, 27, 33,188, 5,100,174,121,140,132,255, + 21,128,168,115,137,109,163,138,194,240,120,102, 60, 51,182,199,111,198,142, 83, 39,177, 13,184,233, 67,105, 19,161, 54,180, 85, + 89,176, 97,209,125, 43, 36, 4, 75,246, 72,236, 80, 97,133, 16, 66,108,144, 64,236, 42,182,116,129, 64, 44, 64, 65,130,164, 16, + 9,132,170,134, 87,139, 20, 72,147, 38,177, 61,113,198, 30, 63,199,158, 49,231, 63, 55, 9, 91, 43,138, 61,115,239, 61,231,220, +243,248,254,147,248, 29,249, 56,178, 47, 25, 51, 43, 51,169, 74, 69,155, 45, 79, 1,160, 34,227,255, 95, 93,149,196,236, 33, 28, +138, 21,207,211, 69, 88,131,166,104,224, 31,137,244, 65,127,149,167, 61,133, 34,171,194, 67,186, 90,163, 83,231, 66,160,224,128, + 2, 34, 17,136,142,126,209,211, 47, 29,195, 20, 36, 48, 25,208, 17, 44,244,213,142,175, 11,104, 63, 82,194,185,212, 84,148, 15, +191,112,222, 50,183, 58,197,116,115, 26,149, 58,151,177, 98,200, 4,176,138, 94,144,139, 79,129, 71,113,226,187,216, 1,122, 99, +192, 51,227,209, 52, 19, 17, 16,243, 28,118,155,205,110,131,161,228, 82, 68, 53,170,197,121,122,107, 71, 40, 73,238, 47, 63,150, + 58,132,227,129,116,184,223,115, 6, 54,121,254, 66, 62,134, 36,123, 24, 26,167,138, 76,151, 53, 89,128, 4, 56,150,226,177,166, +137, 64,196, 76, 88, 62, 1,221, 47, 67,174,208,180,218,205,115,103,171,197,233,252,202,119,223, 94,122,110, 81, 11, 43, 15, 31, + 61, 18, 3,171, 18, 24,212,163,133,115,243,183,110,222,252,242,139,187,253,174,123,251,157,219, 31,125,240,254,229,229,229,218, +222,222,230,227,109, 21, 96, 0, 31, 86,111,226,105,106, 96,104,129, 6,129, 43,116,220,211, 89,142, 24,234,149,107,215,239,173, +221, 51,140,200,171,175,189, 94,168, 44,207,156, 74,174,172,124,115,186,122,222, 48,204,181,245,251,126, 16, 30,141, 5,201, 85, +230, 73, 88, 52,147, 49,240, 7,115,139, 60, 1,139, 60, 15,126,191, 63,241, 70,194, 10,156, 80, 99,209,122, 25,213, 21,114, 93, + 98,122, 22,221, 59,225,144, 25,149,227,166,172,199, 67,180,103,129,166,151, 21,140,165, 76,252, 84, 36,211,245, 92, 10, 37, 48, + 84,130,250,178,108,198, 18,118,251, 96, 76, 49,190,145, 52, 52,253,160, 85,215,128,228,209, 98,168,152, 37, 41,138,167, 69,135, + 27, 13,133,210,241, 52,133,165,244,191,154,110, 83, 83,148,238,208,165, 35,173,201,250,112,220, 35, 7, 4,249,133, 65,103,206, + 42,237, 29, 62,161,131,120, 42, 91,220,111,213,154, 29,135,246, 33, 35,188,163,100,178,200, 61, 84, 10,229,234,236,153,243,103, + 23,103,175,156,249,113,117,149, 30,216,118,234,170, 26,110,182, 15, 83,102,114,199,222,245,198, 67, 58,135,182,107, 83,184, 64, + 63,114, 46, 87,202,167,115,123,135,251,244,118,102,159,154,163, 79,104,177,208,173,129,130,249,104,204,202,215,134, 28,161, 0, +112, 99,115,195, 74,100,182, 26,219,180, 81,233,235,158,153, 42,175,255,181,206,205, 27, 48,130,233, 72,154,204,183,149,200, 38, + 99, 73,178, 56, 75,149,133, 6,148, 70, 90,165,153,106,127,212,255,249,207, 95,218,253,206,229,211,151,232, 90,227,116, 28, 5, +164, 38,223,237,117,232,235, 10,169, 92,189,181,111, 59,141,165,242, 5,238,135, 25,215, 15,118,123,237,246, 8,186,193,170, 3, + 62,244, 48, 99,166,154, 93,135, 30,159,243,230,126, 84, 55, 94,186,248,226,247,191,255, 64,207, 66,215, 14, 90,174,100, 36, 69, + 49, 93, 53,170,231,175, 77, 73,253,190,228,121, 56, 16, 33,102, 70,138,145,247,224,136,206, 45,210,160, 62,199,239, 19, 95,217, +111, 36,106,222,144,108,155,231,135,210,122, 34,162,217,143, 29,151,236,251, 0,184, 80, 16, 3,134,244, 22, 24,175, 37,230, 18, +233, 47,162,134,108, 41, 51, 31,110,172, 30,122,238, 39, 23,222,200,190,183,248,242,210, 43,187,189,230,231,119,239,116, 62,253, +109,115,235,254,103, 59,171,119,254,248,234,121,171,116, 99,246,162,239,247, 63,126,248,117, 33, 93, 76, 59,157,167,111,188, 16, +255, 53,243,238,223,111,190,125,253,173,157, 39,255,172,217, 63, 45,230, 23,114, 58, 45,223, 68, 57,226,117, 9,197,139, 80, 50, +158, 48,181, 72,207, 27,248,128,149,122,117,231, 64,216, 93, 81,137,189, 58,127,149, 94, 11, 93,119, 56,152,148,172,132, 69,139, +130, 99, 8, 29, 45,137,174,251, 40,173, 15,122, 61,138,148, 19,217,128, 83,221,244,240, 67,192,195, 37,238,202, 11,158,205, 87, + 40,144, 31, 51, 7,148,182, 34,172, 7,186, 15, 1,133,246,241, 97,136, 35,226, 18, 5, 13,245, 90, 45,101,162, 30,163,134,195, + 20,194, 63,248,247,129,174, 27, 19, 48,207,135,130,193, 0,249, 17,145, 51,225,110,149, 1, 72, 18, 2, 10,128, 10, 92, 4,129, + 80,116,171,190, 5,113, 40, 58, 35,156,147, 25, 12,250,160,164, 5,220, 65,131,180,155, 69,215, 86,216, 40, 9, 24, 21,161,134, +196, 60,102, 85,197,204,221, 0,154,239, 12,139,166,168, 72, 76,210,186, 16,168,242,201,215, 77,103,139,110, 31,187,162,146, 43, +207, 89,229, 93,123, 91, 69,207,139,255,159, 0, 92, 93, 75,111, 27, 85, 20,158, 25,199, 51, 30,103,252, 24,199,174,237,144, 52, +161, 41, 1, 53, 41, 78, 19, 12, 45, 47,169,145, 88, 65, 75,149,240,144, 88,128,216,241, 11, 16, 27, 88, 68, 2,177, 66,108,216, + 34, 30, 18, 20, 9, 36,246, 64, 68, 87,172, 72, 42,213,105,147, 10,147,166, 36,105, 82, 26, 63,198,206,204,120,230,142,205,249, +206, 56,141,132,151,246,104, 60,154,123,239, 57,223,121,125,223, 49, 63, 1,211,164, 5, 54,228, 10,189, 48, 32, 96, 36, 47,254, +215, 23,143, 17, 3, 20, 90,209,189,142,220,179,172,116, 2, 95, 58,134,246,204,238,197,114, 76,180, 41, 7, 85,157,238, 6,110, +128,176,158,115, 20, 44,244,152, 26, 43,252, 80, 28,144, 49,114,244, 58, 98,170,238, 35, 93,133,178, 38,115, 2,247, 95,151,212, +239,134, 21,150,107,177, 70, 40, 86, 42, 84, 32, 7, 72, 23,174, 17, 79, 90,118,163,159, 77,228,198,198,168, 18,229,170, 90,191, + 84,219, 87, 39, 15,205, 21,134,191,209, 42,200, 50,231, 48,189, 20,220, 13, 49,113, 57,197,116,105, 61, 93,183,235,126, 23,244, +197,160,153, 12, 4,217,202, 99,121, 25, 78, 87, 82,200, 70,187, 32,107, 26, 61, 84,204,209,142,226, 7, 82, 56,193,196,188,119, +189,136, 20, 50,202, 65, 16,141, 44,182,237,118, 15, 15, 9, 94, 1,185,130,168, 36, 16,219,119,255,126,245,242, 43,169,164,118, +107,227,250,115,207,206, 85, 55,174, 15, 68,187,244, 75, 33,151,121, 99,113,225,237,119,222, 93, 89, 89,185,122,245,135,215, 22, +174, 60, 50, 50,182,180,244,113,177, 56, 60,123,238,220,175,191, 45,147,231, 84,186,242,220,204,204,216, 8,133,182, 67,166,145, + 73, 39,211,169,244, 16, 25, 74, 85, 29,116,237,222,197,249,151,111,175, 87,215, 42, 27,186,166, 78, 78,140,110,254,117,103,249, +151,223,203, 79,157,167, 96,227,218,181, 63, 6, 20,205,131,152, 37, 11,232, 69,250,226,218,132, 92, 5, 70,177,144, 79,167, 99, +236,249,136,219, 21,176,248, 50, 21, 65, 84,137,199, 36, 67,135,202,143, 22, 37,251,174,128, 18, 28, 44, 12, 72,127,106,228,222, +116, 89,143,225,237,210, 86,176,218, 78, 76,142,130,210, 79, 82, 90,157, 38,185, 63,193, 83,202, 40, 92, 48,159,115,222, 44, 96, + 56, 80,142, 16, 38, 34, 83, 27,101, 38, 6,250,219,189,250, 94, 54, 85,160, 11,146,144, 25, 81,118,107, 56,165, 22,184, 3, 5, +156, 8,235,199,147,161,247,124,159,118,151,105,152,167,242,167, 86,171,127,134, 19, 24,116,108, 36,112,236, 1,148,208,153, 36, +132,219,114, 44, 58, 84, 19,197,199,111,110,173,217,162,115,101, 97,241, 96,235,193,173,234, 13,120,238,160, 75, 16,207, 34, 91, + 41,220,100, 44,209, 68,206, 4,222,220, 21,182, 11,245,143, 58,173, 90, 66, 55, 48,117, 37,201,205,118, 99, 40,153,163,213, 36, +124, 61,108, 22,204,184, 73, 16,175, 52, 93, 58,243,194,108,176,111,215, 90,117,250,178,104,230,125,225,154,208,225, 11,201,170, +122,100, 26,138,233, 66, 49, 83,168,108, 85,200,136, 86,239,111, 90,110, 27, 82,112,116,147,116,161,237, 52, 71,179, 35,166,145, +170,220,169,144, 99, 59,123,114,106,251,254,246,139,103,159, 47,141, 77,217,126,167,222,120,240,228,163,165,213,205, 85,109, 64, +107,216, 22, 40,177,208,181,229,122, 61, 65, 80,157,182,168,166,197,201, 63,209,235, 31, 63, 49, 78, 75,176, 83,191,119,115,231, +182,227, 30,146,191,108,161,169,151,108,181, 77, 72,100, 44, 18, 27,190,144,165,136, 87, 66,155,118,192, 44,190,253,158, 2,150, +144, 12, 5,223, 37,142,222,144,114,145,125,245,159, 90,170, 73, 7,185,171, 76,142,206,136,246,110, 68, 61,216,181, 92,116,181, + 6,221, 78, 0, 86, 20, 92,204,237,222, 62, 87, 33, 19,154,154,212,212,123,174,245,245,122,165,172,142,126,240,249,151,206,158, +120,235,139,215,191, 90,248,126,250,210, 99,203,159,126,251,201,250, 79,107,181,205, 15,203,111,150,242,167, 83,131,137,103,242, +147, 19,241,252,103, 55,126, 44,106,217,151,158, 88, 44, 63, 61,183,244,243, 71,239, 37,223, 79,100,229,111, 54,190, 59,147,159, +158, 74,145,103, 18,202,195,166, 63, 60,104, 55, 54,160, 57, 62,132,229, 67,181,104,229,161,166, 50, 83, 11,236, 32, 85,226,106, + 81,149, 80, 41,172, 60,186, 18, 29,136,167,113,103, 75,198,200,112,158, 0, 92,140,134,158, 40,159,158,181, 64,104, 8, 92, 23, +150, 31,200, 46,253,219, 58, 32,104, 45,129, 61, 70,167,205,232,116,192, 95,203,124,100,130, 21,229,144,190,106,195,215,162,135, + 65,141,170,180, 4, 1,235, 56,162, 5, 62,160, 7,243,122, 71,147,152, 97, 2, 91,102,223, 9, 14, 56, 25,148,139,185,196,137, + 54, 43, 11,121, 20,218,121,157,249,210,124,117,191,170,160,136, 5,152, 6, 40, 69,182,253,104,146,214,233,216, 2,105,153,144, +240, 44,100,115,236, 73,253,204, 48, 82,179,190,239, 13,234,137,241,220,248, 78,109, 91,230,233, 60, 8, 48,176,240, 29,178,127, +140,220, 14,157,246,126,131, 51, 84,172, 59,241,159, 0, 84, 93, 75, 76, 27, 87, 20,157,241,119,108,143, 33,224, 4, 25, 2, 73, +156, 15, 42,136,162,198,142, 13, 89,144,152, 46,250, 17, 69, 68, 73,182, 81,149,125,151,149, 74, 54,169, 88,118,213, 5,234,170, + 89,147, 42,202, 34, 74,212, 42,171, 86, 40, 11, 20,201,136, 32,146,242,181, 45,138, 1,127,176, 61,129,241,252, 60, 51,238,189, +247, 77, 34,199, 43, 75,150,173,241,155, 55,231,222,251,238,185,231, 56,254, 30,204,218,137,145, 23, 57,206, 25, 39,192,177, 39, +142,227, 63,113, 76,167, 17, 50,122,134, 1, 25, 76,154,176,193,201,183, 54,244, 71, 13, 29,191,136, 86, 80,104,182,104, 57,126, +130,237,252, 74,174, 61, 28,224,185,200,249, 72,172,114,130, 10,215,236, 67,122,211,150,121, 59,232,236,248,203,178,126, 5, 99, + 62, 49,248,134,228, 8,254, 34,224, 99, 88,232,208, 49, 91,180,131,222,160, 24,232, 48, 12,149,241,245,105,209, 49, 41,104,209, + 65, 1, 20, 1, 72,181,105,153,196,111, 65,169, 3,108, 70,147, 15, 92, 25,109,122,240, 84, 10,253,131,120,180, 10, 51,144,113, +143, 34, 57, 16, 96,162,167,206,226,240,164,139,247,187, 67,126, 18,100,135,251, 14,121,174, 6,185,141,193,153, 38,175,104,216, + 3,211,154,166,162, 90,186,134,247,191,161, 89,104,153, 10, 33,135,200,148, 36,187,224, 58, 40,214,182,183,243, 83,223,124,119, +225,252,224,200,104, 34,191,179,155,205,239,193, 79,141, 12,141,140,143,141,191,120,254,124,225,143, 39,128,161,179, 15,102,159, + 61, 93,200,230,183,234,213,202,244,204,244,230,191,239,228, 19,169, 83, 20,239,204, 76, 79,166,211,241,209,209, 84,106, 44,149, + 74, 78, 76, 76,164,211, 95, 38,175, 37,110,220,156,140,246, 70,107,149,210,242,202,242,234,155,213,151,127,254,245,106,113,241, +189, 44,223,190,117,251,168, 90,126,247,118, 45, 36,250,125, 30,100,194, 64,222,109,163,112, 95, 11, 37, 18,109, 64, 73,216,223, + 44, 0,243,164,159, 67, 18, 63,228, 90, 73,242, 73, 60,169,190, 65,205, 8, 91,156, 11, 10,124, 56,200, 9, 66, 11, 50,247,206, +176, 75, 0, 68,247, 33,132, 83,230,131, 26,155, 46, 11,155,208, 77,124,138,220,140, 79, 11,181,148,106, 42,210,113, 13, 42,101, + 30, 73,253, 72,206,133, 72, 49,121,245,171,157,131, 45, 64,237,238,112, 4,214,185, 43,212,157, 43,229, 80, 74,222,227,135,245, +199,206, 39, 41,126,232,166,122, 49,122, 25,194,176,224,243,194, 74, 14,246, 13,102, 15,178,201,228,248, 97, 97,223,230, 97, 67, + 55,206, 70, 6,246,235, 5, 26,229,199, 84, 67, 55, 84, 49, 40, 86,234,149,225,161,225,245,141,181,163, 92,105, 99,103,237, 88, +174,163,255,223,113, 53,253,121,186, 88, 47, 37,174, 92,157, 74,125,155,217, 90, 33,107,121,148,147, 51, 81,125, 90,247, 83, 75, +211,166, 42,134, 4, 89,105, 3,243, 28,212,203,215,135,198,142,164,170,169, 24,153,215, 75, 0,175, 69,233,240,116, 71,183, 36, +215, 1,253,206,245, 95,210, 27,120,110, 78,182, 54,103, 78,133, 58,214, 11, 27, 3,145, 62,184,126, 69, 83, 99, 61, 3, 53, 5, +202, 11, 55,100,103, 62, 4, 44,237, 77,110, 21, 77, 14,188, 94,168,235,225,201,221, 45,237,254, 87,217, 43, 86, 15,227,151,227, +213,247, 21, 21, 47,195, 75, 46,222, 30, 0,119, 64,183,216,153, 11,101,169, 12, 87, 24,242, 7, 12,114,182,170,201,117, 5, 21, + 17,220,128,115, 16, 45, 6, 78,199,234,114,217, 67,250, 4, 46,206,114,107,218,208,205, 94,136, 14,136,239,200,118,177, 63, 48, +118,217, 88,135, 99,237,140, 85, 26, 65, 24,103,136,171, 37,184,101, 56, 46, 84,150, 42,227, 61,209,162,190,123,212,128,184,130, +167,159, 38, 89,211,178, 41,216, 38,125, 17,150, 38,232,241,118, 6,130, 93,130,235,159,124,241,167,216,189,248,252,215,223, 39, +238,101,213,253,199,153, 71, 39,243,153,159,255,254, 45, 35,231, 30,198,239,134, 4,159,212, 60, 1,104, 83, 57,253, 11, 0, 38, +169,182, 80, 88,186,239, 79,118,253,120,233,215, 95,126,151,100,207, 15,137,251,115,203,115,253,221, 87, 38, 35,231, 36,171,193, +115, 31,133,206,240,140, 2, 42, 45, 8,237,168, 27, 67,174, 38, 22,181,136, 93, 45,206,225,119, 18, 31, 8,176, 24, 29, 2, 90, + 40,166, 79,138,100,142,237, 18,228,191, 33, 1, 69,229,116,203,144, 21,185,183,171,103,125,111,147,228,180, 92,108, 30, 42,128, +202,220, 1,114,112, 67,238, 53,211,129,104,199, 42, 0,135,207,250, 7, 81,252,142,119, 59, 41,175,109, 17,166, 97,173,192, 35, +107,185, 83,113, 20,203,201, 41,130, 65,189,211,226, 0, 76,111,202, 90,131,177, 63, 16, 76,173,102,174,152,163,192,218, 34,239, + 32, 14,118, 62, 49, 90,108, 38, 19,105, 51, 66,185,131,144,204,182,156, 20,249,108, 8,177,144,113,138,128, 46, 90, 83, 41,212, +246,169,201,137,169,111, 24, 71,240, 52,219, 57, 81,199,195, 12, 40, 20, 20,181,129,146, 84,244,250, 95, 0,178,206, 45,198,137, + 50,138,227,211,206,116, 58,211,105,103,182,180,179,237,238,178,247,134,203,118, 23,221,184,139,132,136,160, 98, 98, 98, 98, 98, +130, 62,193, 3, 36,132, 23,158, 73,240,141, 24, 19, 19,195, 3,111, 10, 24,125,215,144, 37,236, 62, 0,137, 15, 96,150, 68,225, + 5, 84, 86,151, 66,157,189,245,126,153,157, 94,102, 58, 23,207,249,190,182, 49,154,244,161,153,135,185,126,223,249,254,231,124, +231,252, 78,159,255, 78, 91,161,122,253,224, 59,109,151,215,195,191,211, 44, 20,150, 34, 97, 93,198,241,122,182,222,235, 53,217, +253,151, 69,118, 97, 8,162,233,103,104,214, 51,243,159,223,255,109,125,209, 40,146,154, 5,182, 15, 63, 67,124, 7, 43,146,147, +208,237, 5,166, 47,195, 89,196, 58,139,150,107, 83,219,129, 81, 3, 66, 89, 99,104,223, 7,215, 30,218, 51, 90, 54, 10,232,225, + 82,162,154,231, 5, 56,129,210, 78,226, 17, 85,149,147, 53,163,226, 58, 52, 33, 18, 70,140, 77,140, 63, 66,130, 38, 7,167, 73, +250, 16, 12,104, 11, 89, 5, 20, 13,129,115, 8,243,155,224,211,130,115, 67,202, 33, 88,208,183, 97, 65, 84, 20,220,127,231,112, +147,147, 85,194,136, 24, 19, 48, 37, 30,198, 37,162, 34, 21, 41, 16,149, 56, 37,204,201, 97, 78,137, 4,224,143, 24,192, 86, 47, + 60,239, 23, 5,127,173, 94,126,252,228, 87,215,178, 36, 41, 82,171, 26,207,215,214,193,170,110,109,111, 60,252,249, 97, 38,147, +129,103, 76, 77,143,207,165,103,111,220,252,118,104, 80,133,155,159,157, 57, 48, 50,172,254,241,252,105,179,109, 62, 88,125,244, +195,173,165, 91, 75, 43,203,203,119,239,220,185,123,255,222,253,229,219, 75,173,134, 49, 54, 49,137, 45, 32,246,142, 45,188,177, +152,218, 55, 99, 89, 78,181,102,140,143, 78,156, 57,123,254,250,215,223,253,246,103,182,186,219,105, 17,165,106,163,201,238, 49, +125, 24, 18, 85,193,184, 8, 2, 24, 88, 68, 76,250, 9,207, 13,151,109,236,180, 20,244, 73, 2, 27, 18, 60, 57,226,151, 66,140, + 36, 98, 47, 11,144,206,176, 78,240, 65,134,236, 73,248, 44, 11,253,122, 28,114,188,195,154,193,132, 52, 28, 10, 72,245,102, 25, + 92, 75, 58,248,100,113,192,236,180,143, 30,125,107, 44, 53,170,101, 55,224,130,224,111,110, 21, 54,193, 2,137, 1, 73,111, 86, + 64,191,111, 85, 52, 7,121,188,130, 31, 19, 12,204, 78,199,129, 11,193, 23, 28,129,153,111, 84, 75,122, 49,185,103, 8,190,241, +139,220, 11,129, 21,230, 23,231,243, 90, 62, 38,199, 91,166,161,155, 58,213,242,176,114,165,199,211,185, 90, 1, 70,136, 24, 8, +197,135, 85, 77,203,194,193,169,196,228,102, 65,107, 88,134, 44, 41, 37,189, 4,162,117,109,251,175,213,223, 87, 65,209, 95,248, +224, 92,102,231,101, 7, 35, 86, 20, 72,138,210, 9,201,152, 88,146,206,189, 61,119,108,125,107, 61, 41, 39, 54,138, 27,207, 94, + 61,179, 9,206, 9,236, 78,122, 98,230,239, 92, 22, 44,172,196,135,242,181,252,107,233,197,151,218,186,196, 11, 45,187, 13, 70, + 92, 8, 74,170, 28,215, 74,155,224,209, 31, 62,184,240,254,235,199, 87,215,126,217, 27, 27, 43,212,243,224,200,130, 15, 26,226, + 96, 34, 74,213,102, 29,204, 4, 92, 5,116,217,187, 39, 62, 42,230, 54,171,141, 42,234, 9, 31, 51,168,196,131, 28, 47,240,161, +143,223,251,212, 51,173,242,110,197,104, 27,162, 32,165,134,167,178, 5,141,212, 95,227,108,133,119, 5, 38, 12,188,141, 58, 2, +242, 56, 85, 73, 88,118,195,207,249, 84,134,219,255,206, 40,195, 97,118, 20,145,106,148, 21,136,154, 13,247,151,187, 32, 25,207, + 38, 49,117,108,152,220,138,242,145, 35,160, 69,109,167,101, 57, 94,148,109, 21,172,109, 29,183,212, 61, 11, 57,189, 46,209,106, +164, 6, 5,167, 12, 70,245,144,116,196,243, 97,129, 63, 20, 11,159, 62,247,121,112, 36,113,234,139, 83,223,188,121,115,126,118, +238,251,171, 95, 94,203,174,124,118,248,147,168, 32,236, 98, 17, 9,237, 11,130,233, 55, 11,177,169, 31,179, 63, 69,235,225,227, +151, 63,124,114,253,233,202,206,242,165, 19, 23,175, 60,250,106, 64, 30, 60, 25,159,172,217, 77, 90,142,137, 11, 43, 38,253, 96, +155,198,122,187,129,247,225,103,122,157,158,186, 54,132,166, 82, 83, 24, 11,152, 14,158,231, 65, 16,195,219,136, 41,113,189,165, +211,248,240,190,228,116, 38,151,193, 22,213, 62,111,187,188, 67,192,153,221, 19, 81,154,155,213,193, 76,155,228, 64, 18,180, 48, +211,107, 96, 71, 74, 29, 29,212,118,142, 89,174,151, 7, 66, 81,240,142, 97,241, 8, 32, 52,137,202,109,111,215,212, 77,155,176, +205,145, 34,201,208, 76,101,143, 38,197,147,187,131, 35,132, 70,215,233,149,130,118,155,171, 18,114,170, 27,100,131, 9, 57, 9, + 14, 34, 46, 71, 4, 47, 79,131, 15,221,135,235, 23, 87, 50,221,251, 33, 5, 83,109,234,218,168,114, 2,247, 23, 17,130, 45,131, + 31, 76,178,189,253,211,201, 84, 69, 47,185,216,208,205,162,137, 82,212,192,254, 35, 0, 89,215,210,219,196, 25, 69,103,198,243, +242, 99, 98,143, 1,199,128, 18, 71, 8,147,130,148,178,224, 89,169,155, 46,168,132,144,248, 21,172, 88,241, 11,104, 37,216,118, + 83,241, 18,168,170,170,110, 88,118,137, 42,177,168,130, 32,130,240,134,162, 4,168, 72,128,188, 60,118,252,152,204,196,246,120, + 62,206,189,223,152,148,214,202,194,177,199,246,188,190,123,207,125,157,163,166,169, 16,147,232, 55, 41, 91,212,159, 91,110, 36, +161,142,255,242,145, 48, 3, 15,211, 39, 95, 90,121, 85,249, 15, 98,255, 76, 39,243,191, 23, 5,205,214, 27,196,218, 19, 71, 91, +249,125,149,201, 97,146, 79,197,204, 49, 34,249, 44, 57, 71, 60, 12, 0, 52,206, 40,194, 3, 3, 55,241, 13, 68, 94, 95, 48,221, +189, 66, 2, 70, 89,203,180,136, 25, 92,229, 68,132, 80, 16,128,167, 20,109,212,221,217,242,215,153, 49,110,248, 53,236,135,178, +150,163, 27,102,203,111,224, 37,156, 65,156,187,183,203,115, 9, 9,147,194,230, 15,161,183,229, 8,165,167, 83,197,217,192,253, +125,236, 96, 89,183,180,129,208,194, 94, 44,197, 19,164,238, 76,208,143,104,176,154,233,177,177,153, 97, 10,182,131,228, 70,168, +185,144,148, 58,128, 23, 52,146,125,236,119, 45,152, 73,221,128,217,165,225,111,234,173, 37,177, 36, 34, 1, 84,181, 29,133, 17, +236,216,207, 87,174,122,158, 7, 40,247,242,217,139, 27,191,253, 26,132, 93,106, 89,165,161, 8, 34,212, 52,137,110, 12, 75,161, +127,233,242,229,191, 95,190,154,254,235,142, 91,220, 54, 14, 75,191,119, 79,165, 82,209, 17,106,165, 51, 15,103,238,157,191,112, + 17,171,229,251, 19,223, 29, 57,116,120,118,246,225,244,189,187, 41,226,241,192,122, 30,116, 35,209,167, 2, 15,214,146, 48,216, +135,115,175, 46,129, 10, 74,178, 99,231,201,234, 19,138,147,250, 96,172,122, 13,232, 65,247, 80,164, 14,240, 36,236, 10,132, 41, + 1,188, 58,119,152,227,240,202,113,126, 95,105,234,201,135, 71,248, 52,183,106,209,184, 25, 76,188,155,113,231, 62,190, 66, 96, +131, 72, 11, 17, 37,139, 42,232, 92, 15, 76,186,155,220, 76,209,107,175,193,215,178,152,198, 38, 11,169, 11, 93, 49,199,118,140, +175, 53, 87,176,206, 77,221, 60, 92, 61,242,104,126,118,188, 52,209,232,120,176,236, 68,176,159,178,195, 94, 72,249,116,183,220, +232,212,178,182,147,179,115,245,118,125,106, 98, 10,231,109,126,105,142,146,114,164,147,162,150,183,151,219,237,118,221,247,138, + 57,247,192,216,228,211,119,207,221,116, 62,236,245,154,155,141,141, 96, 67,176,238, 21,220, 0, 54,182, 82,166,147,118, 16,234, +173, 52, 62,192,106,184, 89, 55, 37, 16,183,233,114,106,241,192,238,234,219,229,215, 92,231, 84,129,144, 38, 74, 21,195, 52,222, +215, 22, 1, 2, 13,221,128, 87,184,253,228, 54,245, 50, 10, 92, 98, 10,223, 38,119,239,107, 5,205, 90,103, 29,219, 23,156,162, + 99,229, 70, 50,206,204,252,125,156,235,180,157, 65, 0, 10, 27,132,163, 35, 18,127, 88,237,148,133,155,137,169,159, 8, 99,246, +185, 31, 3,191,235,228,242,171,141,101, 30,149, 84, 71, 11,165, 77, 46, 2, 19, 49,145, 74,228, 51, 88, 41,142,157,141, 69,160, + 27,218, 87,131,212,169,139,199, 21, 61, 80, 26, 77,165, 27,208,196,132,252,235, 15, 20, 34,115, 4,174,232,135,196,130, 55, 32, +121, 83,160,153,166,251,216, 43, 91,233,130, 31, 52, 96,195, 38, 11,254,139,245,215,173,144, 26, 59,122,220, 63,195,186, 63, 48, + 42, 36,139, 12, 51,141, 43,154, 79,155,149,252,136,155,201, 25, 74,116,116,255,233, 63, 31, 7,231,166,127, 18, 15,132,247,251, +173,111,175,157, 25,117, 71,207,126,125, 34, 80,162, 78,224,235,178,233,139,218,205,244, 9,167,244,227,253, 63,222,173, 46, 45, +204, 45,222,250, 97,230,228,205,111,196, 89, 49,246, 75, 53,179,173,120,253,208,233,197,176, 38, 89,109,113,188,182,157,238,248, + 29,248, 18,211,178,125,191, 29,145,158, 53,183,136, 83,174,137, 88,176, 72,219,154, 64,155,106,155,217, 40, 34,130,129,186, 95, +199, 46,239,221, 85,125,179,252, 15,163, 55,170,177,215, 58,181,227,213, 99, 43,173,149,133,181,247,178,164,204, 98, 83, 49,219, + 98,141,175, 81, 47, 41, 12,254, 27, 59,139,184, 90,174, 46,120, 11,146,172, 16,239, 3,221, 3,173,227, 39,168,233, 80, 51, 55, +200, 31, 8,230,147,144,253,120, 9, 56,166,124,192,128, 26,137, 1, 46,183, 59,178,217, 41,150, 68, 16,169,132,231, 39, 49,154, +154, 38,251, 12,165,140,238,240, 27,152,253,149, 70,117, 88,138, 0,232,145, 52,165, 98, 26, 79,147,111, 69,146, 60, 56,102,117, +231, 88,184,217,130,223,221, 32,205, 72,250, 95, 12, 67,147, 33, 91,131,166,125, 18,128,177,179,233,109,163,138,194,240,157, 79, +207, 56, 83, 39,113,155, 56, 56,196,168, 13,109,196,135,132, 16, 44, 16, 82, 5, 98, 81,118,116,129,216,193, 15, 64, 72,176, 40, + 66, 72,101,131,216, 33,254, 68,133,144, 42, 85, 44,186,128, 61,155,210, 64, 22, 96,154, 52,106, 72, 34,218, 20,236,120,236,177, +199, 30,207,120,230,206, 29,206,123,239,184, 91,240,214,214,100,124,125,115,230, 61,247,156,243,188,102, 25, 68, 89, 57,164,250, +127,130,251,147,119,243,146,163,206,180,185,202,214,231,111, 22,236, 63, 94,115,116, 33, 69,118,249,192,153, 99,232, 97,164, 11, + 98,184,145,137, 68, 29, 22,145, 22,163,223,149,116,103, 73, 28, 99,186, 3, 2,109,172, 34, 2,230,212,225,240,137, 26, 58,250, +242, 81,236, 44,148,237,225, 48, 26,168,108, 64, 57,223, 57,150,251,201,213,143,190,254,254, 27,202,145, 13, 12,151, 50, 89,190, +200,231,220, 83, 49,141, 6, 76,166, 79,221,225,227, 94,216,149, 94,136, 42, 1,192, 39,161,106, 37,255, 18, 92,126,116,236, 88, +191,237, 14,158,223, 92,209, 44, 10,197, 66,218,221,225,249, 12, 37, 88, 86,151, 53,145,241, 81,156,151,127,159,149, 60,100, 52, +147, 40, 50, 36,206,247,237, 41,252,189, 57,134,155, 13, 33, 63,165,225,164, 32, 7,176,225,159,211, 96,101,121, 41,141,249,103, +215, 62, 31,134, 99,196, 65,189, 0, 69,192, 32,245,100,200,161, 69, 73, 10, 34,149, 54,227,253, 94, 16,244,253, 95,119,182, 81, +150,128, 47,184,112, 42,206, 83,107,141,245,141, 86,251,143,123, 85,219,186,180,217,188,254,229, 23,204,108,188,241,230,229,135, + 31, 31,159, 6, 62,221, 66, 52,205,149, 53,176, 65, 97, 20,103,234,232,234,197,190,130, 1,167,129,210, 49, 60,224,138, 56,197, + 92,107,197,102,174, 3, 63,147, 25,114,117,220, 42, 23,168, 33,147, 34,194,253,160,118, 2,153,146,240, 98,148, 71,251,157,223, +233,199,171, 56,149, 56,201,159, 93,219, 58,238, 30, 69, 73, 68,129, 44,133,147, 28, 39,193,174,108, 11, 92,138,157,210,228, 33, +156, 12,117,221, 28, 76,124,250,103, 33, 81, 60,138, 3, 90,126,199, 6,255,108,198,209, 5,136,250,191, 16, 31,188,245,254,237, +187,183, 87,235,171, 71,189,131, 37, 24,144,178,179,222,185,238,176,243,238,235,239,125,247,211,183, 54,170,187,130,100,145, 14, +219, 54,207,115,189, 61, 32, 10, 56,105,231,120, 54, 13,163,209, 52,137,159,107, 93,218, 57,152,156,248, 39, 36,232,234,181,122, +251,209,189, 70,173,209, 11,251,158,189, 16, 3,107, 12, 86, 31, 73,236, 23, 91, 47,220,127,180,103,234, 6, 93,100,193,114, 40, +238,147,226,166,212,141,196, 65, 14,168, 97,145,114,110, 90, 22,143,147,141, 70,171, 55,246, 73,176,175,215, 55,232,145, 99,154, + 86,251,176,189,232,158, 73, 41,229, 47, 50, 90,132,115, 75,107,195, 40,240, 3,159,118,132,231, 46, 95, 88,125,122,231,176, 77, +123,248,237, 87,175,132,201,248,238,238,118, 21,180, 53,240,121,178, 44, 51,165,189,139,231,156, 33,245,119,232, 31,231,209,200, +171, 46,218,172, 24, 70,180, 36,113,179,190,238,143,251,156, 39,157,160, 35,251,117, 11, 73,109, 42,108,203, 73, 51,202, 78,234, + 97,148,200, 35, 8, 89, 22,167,109,238,152, 20,115,228, 17,188,146,221, 12,204, 39,198,141, 92,130, 11,159,180, 30,104,250,140, + 79, 70,131, 32, 21,250,249, 5,207,207, 78, 73,157,206,184, 58,147, 41,241, 46, 66,169,219,210, 60,153,182, 68, 17, 38,169,109, + 1,127,255,243,254, 15,181, 42,187,245,242, 87,236, 21,118,227,195, 31,255,202, 6,215,182,174,246,211, 97,154,171, 62,159,121, +207,182, 38, 6,124,244,206,198, 75,159,118,183,217, 29,113,229,242,107,236, 38, 99, 61,246, 76,117,115, 63,125, 24, 9, 73,247, +147,156, 75, 56,188,175,157,223, 61,108, 83, 82,213, 58,219,220,139, 39, 74,184,107, 10, 3,171, 6,113,241,204,208,234,176,205, +227,203,181,149, 7,221, 63,155,203,235, 39,131,199,199,157, 35, 6, 75, 60,147, 52, 63, 45, 59,173,255, 47, 7, 59, 10,155, 93, +182, 0, 50,165,181,153, 99,161,207, 61, 75,102,106,212, 75, 70, 48,213,245,129,175,124,255,239,125,183, 2, 63,122, 64,144,228, +252,232, 86,243,226,157, 7,125, 90,202, 69,135,182, 74, 44,202,222, 22, 57, 21, 34,175,206,193,130,136,233, 18,166,129,208,221, + 11,123, 50,173, 4, 0, 18,140, 22,137, 75,171,227,196, 41,171,185, 30, 37, 25,121,150, 43,115,236,121,141, 19, 58, 84,181,167, +171, 64,183,232,214,102, 89, 58,129,167,246,220,238, 91,113, 98, 52,181, 2, 69,128,186, 35,116,182,144,195,178, 42,178,146, 78, + 37, 57,114, 58, 70,178,248,175, 0,132, 93,201,110,211, 80, 20,181,147, 56, 99, 83, 59,166, 77,210,132,161, 5, 85,180, 42, 66, +101, 6, 9,104,133,144, 0,193, 2,137, 37,136, 61, 18, 31,192,150,223, 64, 44,216,178,101, 11,130, 14, 8,150,136,161, 42,106, + 81, 11,129,130,154,198,129,212,177, 99, 63, 79,220,243,158, 91, 84, 88,144,172, 18, 69,242, 16,191,251,206, 61,247,222,115, 98, +254, 61,220,201,157, 68, 59,164, 8,254,255,218,210,135,150,165,191,168,250,127, 94,219, 94,188,242,142, 76, 96,187,246, 26, 31, + 81, 47,232, 61,102, 19,204,193, 76, 26, 64, 3,163,148, 92, 24, 42,161,198,205, 61, 18,163,152,152,199,161,124,174,247, 27,241, + 62, 21,174, 4, 16,186,129, 27,223,177,120,159,194, 72,216,252,194, 75,104, 62,114, 15, 79,250,134, 34,160, 22, 87, 86, 19, 62, +186,170,165,248, 46, 65,134, 66,138, 69,236, 68,137, 35, 1,155,196, 32,164, 69,237,236, 29, 24,193,156, 20,220,247, 2,215,246, + 39,119, 15,168, 16, 98, 6, 10, 38,132,232,241,134, 77,250,227,184,146,105,130, 62, 50, 58, 21,134,160,201,160,129, 22, 49, 46, +102, 47,182,228,228,150, 68, 47,116, 80,124,153,193, 60, 28, 68, 1,191, 77, 49, 48,152,158, 58,251,124,230, 5, 97, 38,184,215, +242,132, 20,250,195, 78,224,185,161, 7, 53, 23,176,130,174,235, 53, 86, 86,141, 86,171,103, 89,197,190, 66,158,146,145, 98, 54, +151, 77,210,154,239, 89,235,125,121, 41,147,199,233,239,175,215,250,251,146,175,230,102,230,230, 95, 59,110,228,123,176, 24,142, +120,206, 65,215,153, 67, 95, 60, 88,142, 44, 4,109, 48,179,154, 81, 32,235, 72,135,240, 56,217,198,221, 38, 65,197,248, 62, 72, + 93,151, 1,185, 67, 82, 16, 11,141, 43,209, 11,135, 72, 60,245,161, 18,160, 72,131,166,121,207,105,163, 69,140,206, 53, 40, 96, + 30, 71, 37,228, 78,113,187, 82,170, 81, 84, 50,186, 77,173,176,203,216,108,166,211,153,138, 54,148, 77,101,221,128, 13,233,149, +195,195,147, 63,218,223,185,175, 58,182,216,225,193, 17, 10,109,195,213,125, 31, 86,223,127,105,126,246, 96,196,163, 12,151, 71, +218,102,115,114,255, 17, 10,223,179, 11,179,140, 57, 90, 65, 63, 58,122,242,214,133,155,239, 86,223,209, 46,249,173,245, 53, 8, + 2,181, 79, 39, 24,149,150, 21,130, 57, 63, 77, 99,177,177,168, 23,117,199,181, 8, 56, 91, 14, 42,174, 87, 79, 94, 54, 58, 29, +173,168,209,205, 82,243,253, 7,106,163,191, 76,200, 19,210,147, 48, 88, 44,159, 30, 59,245,195, 88,211, 74,131, 73, 69, 89,249, +182, 20, 32,102,165,234,165,218,245,211, 87, 10,123,170,165, 40,243,101,163, 65,143, 19,236,244, 48,113,234,210,137, 53, 59,173, + 51,227,167,166, 39,167, 58,129,223,220,248, 94,213,202,131,106,153, 64,232,212,237, 27,198,210,218,250,230, 70, 2,174, 61,142, +101,155, 31, 27, 75,180,248,134,244, 58, 37,142,163, 67, 7, 44,215, 46, 23, 7, 40,170,182, 58,173,146,170,195, 83, 34,153,236, +185,189, 74,169,138,102, 56, 69,161,236, 91, 43,150,218,102, 27, 22,199,129, 79,169,219,120,125,188,109, 26,188, 82, 77,121,100, + 7,234,147, 9,121, 76,201,237,190, 88,131,219, 53, 34,187, 96, 50, 57,142, 17,224, 46, 12,147,113,113, 21,133, 75,194,227,178, +151,238, 70,227, 25, 37, 87, 85,164, 98,170,181,108,174,109,246,208,142,237,137,198, 2,196,135,128,203,149,242,137, 22,161, 47, + 46, 67,237, 43, 37,166, 58, 40,135,145, 37, 59,253,166,249,248,201,131,183,207,142, 85, 15,141,237,170,119, 24,119, 20,145,132, +113, 55,252, 9,184, 82,135, 60,166,238,121,180,252,244,218,190,227,245, 75, 7,239, 63,188,127,183,114,239,229,175,217, 69,246, +233,206,196, 52,101, 30,166,211,147,185,227,207,198,207,117,112,214,114,136,158, 43,148, 16, 34, 78, 51,133,116,201, 21,173, 74, +113, 77, 56, 1,117,153,109, 58,166,209,109,211,111, 44, 6,217, 6, 17, 25,250, 11, 42,242, 63,192, 55,137,114,181, 92, 42, 99, + 49, 59, 20,243, 27, 82,200, 69,252, 9,254,123, 92,219,174, 43,197, 87, 36, 24,100, 17,228, 1,174, 79,140, 66,190,130,227,106, + 16, 89, 13, 99,173, 63,175, 18, 10, 65, 29, 94, 22,230,179, 80,206,175,234,117,211,234,136,240,119,110,226,252,231,230,138,208, +192,220,106,110, 12,163,120, 32, 28, 7,112,225, 60,234, 89,172, 23,242, 22,146, 63, 64, 90,138,253,153,163,173,177, 76,122,219, +158,141,190, 44, 72,150, 74,193,182,183,202, 14, 54,132,239,206, 65, 36,140,186,249, 90, 65, 43, 10,212,225,225, 61,161,252, 22, +128,172,107,233,105,227, 10,163,243,240, 60, 60, 99,140, 31,137, 49,193, 38, 74, 42,161, 42, 69,149, 18, 54,109,164,168,149,218, + 69, 23,149,154,110,194, 47,232,162, 93, 85, 73,254, 64,164,254,151,172,179,200, 31,168, 80, 90, 26, 22,125, 36, 4,136,192,194, + 56,197,140,103,240,216, 51,158,183,125,251,125,223, 29, 83,148,176, 2, 3,134,153,123,231,220,243,189,206,201,241, 61, 19,254, + 23,153, 97,151,232,187, 42,104,211,121,115, 36,251, 32, 63,243, 30,154,179,203,128,253,193,207, 94,204, 97,173, 45,223,178, 49, +225, 46,136,239,191,141, 56, 15, 38,102,176,108, 5, 81, 73,178,100,150,167, 80, 16,193,231,137, 32,222,157,137, 44, 30, 2,243, + 4, 75,216, 44, 23, 25,227,234, 50, 84, 26, 43,208,222, 67,192,101,228,152,142,119,109, 70, 98,234, 98, 74,211,101,168, 14,150, + 77,195,200,159,205, 39, 7,216,165, 43,231,132, 37, 47, 61, 11,172, 92,172,197,104, 4, 35,233,154,233,248, 3, 69,194, 71,167, +108,212,135,193,104,183,103, 15,189,212, 20, 10, 21, 85,185, 89, 45, 27,178, 82, 45,168,166, 68,114, 94,196,127, 82, 66,106,120, +138,100,106,251, 50, 20, 25,101,191,240, 80, 39, 96,229,127, 12,130, 56, 52,252, 20, 84, 89, 84,200,173,163, 8,220,171, 40, 1, +102,245, 58, 29,199, 57,167,137, 9,248,146, 37,209, 20,194,234, 48,201, 66,248,135,162,116, 18,199,158,159,165,217,244,204,114, +123,167, 22, 28, 36, 64,255,163, 24, 14, 0, 68,127,145, 21,208,244,134,187,230, 6,209,206,246,139,231,207,159,109,239,108,107, + 42, 43, 25, 36, 88, 64,223, 35, 93, 55, 70,210, 52,124,142,130, 41,138,204, 37,248,177, 13, 21,182, 1, 78,160, 97,155, 16,132, + 38, 8,247, 92,113,126,134, 50, 75, 69, 21,189, 68,203, 26,106,100, 26,154, 84, 82,209,213, 4, 54, 85,232,163,108,220,106,253, + 6, 80,239, 90,169, 41, 98,107, 93, 54, 10, 92,108,110,161, 37,138,210, 8, 66,233,113,128,122,235,147,208,103,100,118,227,134, + 35, 67,209,173,161,101,251,206,181,202,242, 8, 13,136,101,136,204,206, 39, 67, 47,112,179, 41, 59, 30,116,238,223,253, 14, 7, +208,103,204,241,172,143,154, 31,119,250,157,191,187,127, 37,179,184,128,162,152,234, 97,255,237,239,251,219, 73, 18, 55,171, 77, +165,160,160,161,146,177,112,116,122, 8, 20,161, 93,191,254,227,253,159,182,254,249, 21,229, 71, 68, 73, 47, 20, 57, 39,220, 61, +126, 3,159, 12,253, 1, 92,120,156,134, 3,183, 95, 47,227,220, 41,192, 0,240,241,206,233, 81, 24, 5,186,172,106,240, 43,178, + 14, 44,161,125,101, 5,222,124,235,213,214,105,247, 24,216,189, 53,178,214, 90,107,155,247,190, 63,248,247,109, 99,177, 17, 37, + 97,101,161,246,199,193,142,237, 88,214,160,183, 82,111,117,237,222,167,119, 62,239,159,189,211,237,108,239,221, 94, 66,204, 24, +150,236,250,210, 42,128,227, 56,242,191, 90,255,226,117,119, 23,238,177,235,187,186,102,216, 99,187,177,120, 53,202,146, 40,141, +151, 22,151, 32,228,183,198,103,240,250,230,183, 63,172,148,106, 47, 15,118,106, 11,245,199, 15, 30,253,246,234, 5,128, 58,185, +205, 69, 11,232, 36,229,163,105, 11, 4, 92,146,240,153, 97, 86,190,105,230,153, 87,192,119,105, 94,174, 99,100,205, 65, 52, 73, +164, 81,181,148,164,147,208,115, 62, 84,154,250,185,199,142,118,221, 19,123, 18,163, 76, 32, 25,111, 50, 74, 53, 8,185,164,176, + 64,237,231,136,236, 36,133, 45,163,235, 36, 58,222,201, 10,138,114,235,153,146,110,180, 43,183,107,141, 44,213,134,113,114,165, +114, 53,142, 35,116, 42, 39, 51,111,172,100, 9, 98, 85, 55,158,238,191,108,148,155, 95, 62,252,250,201, 47, 79, 54,107, 63,159, + 76,247,183,130, 63, 31, 92,219,232,163,151, 3,117,115, 75,121, 18, 22,207, 34,210,122,169,150,170,139,102,197, 15,124,192, 41, +224, 10,176,119,111, 46,223, 56,115, 29, 78, 90,205, 98, 73,215, 52, 63,158,112, 58,134,182,227, 9,214, 90, 97,197,225, 26,198, +161,231,197,147, 86,189,101, 20,205, 32, 9,111,181, 62,193,137,185, 17,218,131,164, 44,195,249, 71,137, 59,155,210,230, 23,115, +187,123,184, 43, 93,187,139, 58, 43,116,171, 40,135,131,221,122, 49,245,219, 80, 22,152, 11, 46, 78,201,211, 21, 94, 68, 99, 16, +199, 27,134, 73, 72, 39, 25, 14, 8,182,235,109,110,104, 51,227,165, 69,146,114, 35,151, 91,129,123, 52,241, 15,137, 55, 21,210, +202,148,180,146, 89, 52,225, 80,207, 93,175,243, 49,124,222, 83, 78,205, 63,146,116,129,197,162,144, 87,156,197,139,210, 37, 62, +211,128, 33,234,250,234,186,227, 57,255, 9,192,214,149,244, 54, 13, 6, 81,219,177, 63,175,177,147, 38, 93, 40,208, 37, 8, 65, + 11, 20, 84,202,165,136, 11, 66, 85,225,192, 25,113,225,128,132,132, 56,240, 27,250, 7,248, 41, 72,220,185, 85, 85,145, 56,128, + 64,136,110,162,123,146,182,113,221, 44,118, 18,215,142,153, 25,219, 21, 21, 85, 43,245,146, 58,222,190, 55, 51,223,188, 55, 47, +193,247, 48, 37, 65,158, 65, 28,169,105,185, 11,193,253, 66,136,135, 51, 27,210, 6,220, 83, 28,177, 38, 9, 50, 77, 37,251,135, + 37,147,162, 57, 28, 14,240,113,192, 24,242,252, 86,124,217,255,101,250,105,164, 75,168,153,220,249,238,108,207,148, 45,159,114, +109, 52,103, 73, 43, 42,244,233, 22, 25,118,138,226,123,164, 24, 5, 3, 13, 37, 70,250, 75,142,103, 39,140, 43, 20,108,226,204, + 27,200, 28,209, 75,179,211, 64,162, 44,128, 23,209,252,179,170,233, 39, 13,116,254, 92, 11,129, 79,100,173, 52,100, 85, 32,193, + 49,206,198,241,195, 46, 14,107,141,248,137,225,153,178,115, 84,110,184, 91, 71,206,239, 74,115,223,110, 4, 0, 19, 93, 56,199, +208,100,170, 37, 10,151,116,101, 56,171,228, 69,169,136,174,139, 2,173, 42,142, 33,109, 3,190,191,151,193, 45, 23, 28,123, 0, + 39,174, 50,136, 31,156,138,187,175, 17,110,124, 3,196, 75,194, 73,253, 56,150,177,201, 0,250, 74,148,213,112, 76,183, 46, 73, + 89, 69,210,228,140,169,200, 56, 81, 82,103,150,206,250, 76,156, 45,163, 67, 97, 15,255, 27,139,110,105,122, 18, 73, 94, 57,116, +209,149,201,168, 16,126,120, 17, 89,207, 1,117,216, 2, 84,131,136, 52,158, 3,160, 89, 81,120, 93,147, 24,185, 80, 97,173,135, + 74, 75, 78, 86, 4, 93,133, 95,236,170,105,170, 96, 89, 66,222,144, 52, 61, 99,232,162,174, 98,152,232,161,118,191,231,119,184, +118,187, 23,249, 92,208, 60,141,181,114, 94, 27,197,135,110,167,105,106, 57, 67,205,118,124, 87, 72, 88, 15,128, 14,106,213, 41, +247,155, 3, 7,199,229,216, 54, 51,118, 13,131, 63,147, 35, 83, 76,144,118,237, 77,133, 41, 40,107,136,162,183, 79,223, 45,175, + 44,121,167,174,198,180,141,189,117, 72,130, 0, 88, 35, 36,123, 84,225,152,128,119,163,197,146,221,172,121, 62,206,252,131,207, + 0,128, 2, 74, 14, 23, 46,223, 29,191, 13, 75,189,225, 54,187, 65,183,234, 84, 62, 45,125,156,155,158,223, 58,220,154,189, 49, +187, 93, 67, 79, 6, 83,193, 91,136,202, 38,114, 79,133, 24,163, 48,180, 10,184, 54, 56,254,230,233,235,149,157,213,233,235, 51, +168,201, 96, 50, 20,226,240, 21,144, 41,247,155, 5,183, 83,135,115,131,195, 86,235, 21,120,217,246,237,242,222,225, 46,164,237, +213,147, 3, 72,244,160,188,187, 95,186, 7,151,147, 51,172, 19,180,115,106,172,173,253,124,246, 96,110,121,245, 43, 4,232,137, +145, 91, 99,197, 49,200, 58,247,236,138,135,218,153,128,137,162,227,214,115,122,126,180,120,165,152, 43,148,237, 50,156,179, 79, + 76,176,150,219,108, 7, 29, 40,209, 96,197, 46,126,251, 12,161, 8,110, 95,171,211,250,254,231, 7, 10, 30,225,181, 12,130,201, +145,155,187,181, 29,120,141,135,242, 87,187, 65, 29, 39,127, 24, 3,214,227, 34, 39,161, 48, 53,182, 92, 74, 55, 80, 9,226,169, + 92,207, 16,134, 97, 50, 11, 1,155, 63, 93,117,182,126, 57,219, 27,142, 83,111, 7, 1, 70, 1,106,225,162,104,143,192,153, 56, +233,240,242, 48, 68,118, 81, 99,146,193, 68, 67,150,117,198,208, 10, 0,138, 67,242, 39,160, 96, 18,182,184,154,192, 59, 83,197, + 41,171,111,252,192,222, 70, 30, 44,174,180,120,112, 58, 63,168, 90, 75,219,107, 30,207,191,124,255, 98, 97,225,195, 67,253,121, +157,223, 92,116,191,188, 42, 61,106,135, 45, 62, 29, 89, 76, 25,107, 47,103,228, 36,156, 21,138,114, 83,184,234,128, 10, 91,120, +148,134, 98, 66,241, 80,107,213, 34,116, 85, 13,243,217, 62,120, 22, 62, 18,181, 41, 19,167,156, 16,214,235,177,123, 12,145, 47, + 68, 10, 91,128, 29, 26,220,235,240,202, 39,251,181,102, 13,175, 13,189, 37,178, 94,183,157,216, 29,113,177,134,171, 71, 91, 36, + 66,226, 88, 40,196,174, 40,200,218, 58,106, 30,242, 81, 38,222, 56, 72,186,213,116,103,195,152,212, 72,148,113,226,239, 97,251, +138,156,176, 57,175,221, 34, 3,203,116,255, 57,158, 58,150, 12, 65,193,111, 41,104,125,216,218,229,207, 30, 15, 36,218, 33, 36, + 0, 1, 45,132, 94, 58,154, 82, 99, 6,148, 64, 79,238,204,175, 87,214,104, 30,112,218,120,229, 18,123,166, 51,116, 71, 78, 36, +178,242,253,125,123, 15,162,194, 95, 1,232,186,150,158, 38,162, 40, 60,247,222, 97,166,143, 97,250, 16, 16,144, 90,197, 16,208, + 64, 66, 64,220,232,198,141,107,247,174, 92,153,248, 23,220,186,208,157,191,194,196,157,137, 27, 55, 26,216,104, 66, 92,160, 18, +162, 64,128, 86, 69,104, 43,175, 9,125,204,148,185,158,239,220, 22, 95, 49, 97,217,208,219,121,220,123,206,249, 94,192, 87, 33, +248,180, 76, 95,243,171,252, 63,249,115,239, 62,221,239,244,127,134, 51,250,159,177,140,248, 27,140, 61, 61,147,255, 48, 57,248, +189, 9,144,191,225,174,242, 63,179,160,238, 34,165,236, 2, 6,178, 11, 0, 72,115,217, 48, 8,199, 15,118,109,218, 18, 17,146, +171,184,108,215,124, 25, 88,187, 12,185,141,161,239, 97,118,169, 28, 47,153,173, 81,137, 4,182,126,147, 1,180, 95,122, 43,101, + 78, 75, 41,115,112,173, 3, 90, 66, 47, 82, 91, 68,105, 59,145,114,211,105, 55, 77, 15, 37,109,216,142,114,135, 50,133,111,193, + 6, 61,199,218,128, 28, 28,153, 64,207, 53, 85, 72,147,131, 87, 43,193,186,109, 71,249, 84, 10, 27,186,208,169,164,114,225, 57, +140,178, 40,160,211, 0, 78,246,192,101, 34,234,224, 0,103,177, 83, 6,187,116, 59,204, 54, 87, 74,133,237,152,253, 75, 37,214, +224, 0,235, 84, 72,151,101,160,133,107,158,216,106,155,213, 82,125,173,184,155,238, 56, 19, 73,173,108,201, 30,116,130,117,184, +104, 99, 16, 13,200,243, 25,227,172, 13, 43,107,205,140, 95,205,201,215, 14,140,116,192,141, 4, 68,204, 68, 73, 54, 91,118, 57, +143,153,185,186,241,113,221,170,115,230, 57, 27, 64,139,136,195,143, 29, 97, 57, 90, 7,123,170, 25, 91,251,152, 63,210, 57,228, + 83,121, 30, 35,219,190, 1, 65, 50, 22,209,211, 62,105, 9,182, 10, 72, 56,238, 96,118,248,107,173, 84,232, 43, 86,131,154,197, +100,204,132,219, 27,134,245,172,151,163, 51, 96, 63,168,156,241,251,169, 9,136, 57,140,184, 7,140,102, 53,146, 59,151,114, 83, +229,106,169,109,233,115,185,225,245,237, 85, 90,195,232,208,120, 24, 53,168, 4,166, 15,123,137,116,189, 85, 47, 12, 92,220,218, +133,172,127,170, 56, 21, 52,130,126,191,239,250,229,185,167,243,207,252,148,255,165, 90,166, 42,137, 94,104,186, 22,103,179, 3, +212, 39, 69, 58, 62, 60,218, 67, 57,118, 18,209, 77,188,123,251,222,252,219,151, 74, 11,140,221,165,172, 28,236,230,146,153, 76, +218,223,253,241,157,238,198,236,165,105,218,206, 60, 55,181,184,246,110,180,191,184,189,183,227, 39, 61,186,216,183,102,110,190, + 89, 89,220,216,217,240,210,112, 22,227,216,101, 70,202, 80, 22,168,190, 76,159, 99,187,165,234, 6,221,181,185,177,233,149,210, +106,216,166, 39,167, 39,231,101,242,153,129,229,210,135,153,209,217,247,165,143, 55,174, 92,123,181,180,192,121,114, 54, 85,215, + 73,142,228,166,155,113,225,108,113,115,119,107, 98,100, 98,109,251,179, 45, 93, 86, 26, 65, 12,236, 33, 49, 46,118, 16,174, 39, +243,126,246,160, 85,187,147,191,112,254,225,152,229, 9,248,207, 28, 55,172,136, 33,214, 70, 4, 39,185, 70,136,191,227,208,170, + 71,113, 51,132,162,164,133, 32,154,231, 75,229, 74, 0,176,200,184, 12, 73, 46, 47,149, 0,225,146,179, 96, 56, 60, 23,246,130, + 32, 26, 8,142, 14, 6,115,204, 68, 71,219,194, 24,129, 1, 13,130, 18,138, 90,199, 86, 94, 14,215,131,243,251,113, 59,193,105, +196,112,219,131, 67,159, 24,239, 45, 60, 90,124,177, 89,139,151,154, 11,131, 98,236,254,200,195,186,251,233,241,246,147,215,183, + 30,212, 26, 85,163, 99, 55,185, 53, 33, 67,249,204,206,196,219,224, 37,122,171, 65,213, 48,225,169,165, 99, 29, 33,102, 31,144, + 10,129,243,118, 98, 90, 13, 38,163,232,216, 48, 14, 45,118,136,229,241, 55, 91, 55,114, 47,194,196,106,102, 88,199,186,131,141, +117, 4, 83,173,168, 53, 89,156, 92, 46,175, 80,127, 96,144, 80,124, 7,254,137,149,113,253, 35, 36,105,168, 22, 52,146,172, 13, +138,145,138,102,190,202,140, 83,248,132, 48, 99, 20,102,181,136,174, 97,173,109,113,186,104, 39, 71,197,184, 16,119, 74, 71, 45, + 79, 67,248, 76,198, 22,143,244, 5,255, 52,214,232,243,190,230, 8,247,176,121, 64,101, 25, 32, 13,197,240, 30,215,182,116, 62, + 29, 53, 64, 30, 75, 67,214,103, 1, 64, 50,195, 38,169,169,252, 11,163,230, 79, 1,216,186,150,157,166,162, 40,218,123, 79,239, +243,180,189, 5,164,136,162, 1,140, 70,226, 35, 26,140, 26, 7,134,200,192, 31,112, 96,140, 81, 7, 78,253, 0,227, 68,127, 67, + 63, 8, 13, 17, 38,198, 0, 21,131,202, 35,165, 64, 95,247,253,116,239,125, 14, 84, 19,146, 14, 58,104,111,155,123,207, 89,103, +237,215, 90,146,191, 39,146, 41,159, 2,238,134,106, 96,105,177, 24,126,192,196,181,133,119,229,234,217, 57, 56, 66,149, 33, 88, +255,247, 58,181, 36,171, 74,134, 14,172,217,204,255,175,221, 42,195, 19,162, 40,147,100,110,113, 90,153, 86,156, 83,101, 85,230, +174, 79, 20,234,149,147,120, 70,100,190,168,130, 14,108, 2,194,186, 8,130,181, 92,198, 67, 98, 92, 87, 92, 25,150, 40,144, 47, + 63,242,178, 60,134, 19, 18, 8,102, 16,249, 98, 62, 14,104,160, 16,203, 71, 69, 4,140,119, 52,199, 26, 65, 99, 63,165,244,246, +201,187,230,206, 38, 73, 35,164,186, 6, 55, 71, 11,224, 10,192, 85,227,192,100, 53,224, 89, 98, 54, 75, 65,147, 83,184,136, 6, + 60,185,227, 29, 28,185,221, 94, 16,236,118,221, 67, 47,109,187,236,119,103,240,171,235,109,180,188,221,158,246,167,219,119, 35, + 64,198, 10,203,185,215, 15,181,172, 52,194,180,134,165, 3,188, 85,138, 18, 7,174, 29,167, 26,101, 1, 45,134,118,134,104, 84, +174,146,173, 67,138,105, 81,192,187,106, 69, 1,226,143, 54,129,212, 44,134,242, 38,122, 78,201,244, 66,163,153, 16, 83,101,176, + 69, 18,216,201, 17, 58, 18, 98,155, 56, 57,246,145, 11, 47, 22, 87,147,172,132,231, 18,170,249,203,222,170, 56, 37,157,153, 18, +139, 16,202, 83,223, 47, 69, 94, 30, 70,121, 16,230, 97,136, 46,131, 88,196,198, 60, 24, 54,140, 2,178,192, 15,217,170, 50,201, +141, 65, 55,235, 6,106, 63, 56,194,158,156, 20,157, 43, 80, 64,148,122,106, 85, 86, 46,104,152, 0,162,155,138, 85,195,145,141, + 52, 9,147,216,177, 71, 15, 7,109,161,149,103,106, 28, 78, 97,199,174,145,118, 5,240,113,195,210,172,170,229, 88,166,141, 79, + 42, 77,159, 45, 60,229, 58,255,178,177,124,127,238, 1, 96, 34, 28, 89,110,216, 55, 13, 27,246, 63,112, 49,122,154,217,243, 23, + 47,191,174, 44,163, 75, 3,134, 75, 41,160,179,161,235,223,183,191, 45,173,125, 38,113,240, 16,246, 38,144, 78,136,225,252,208, +197,226,103,255, 64, 43, 27,131,160, 7,207,113,166, 49, 29,198,225,214,206,143,137,234,248, 86,107, 11,162, 64, 13, 91, 84, 20, + 8,255,227, 56, 0, 52, 49,116, 0, 44, 6,212, 30,147, 75, 10,155,158,184, 8, 31, 3, 22,230, 6,110, 19,190, 53, 50,177,223, +111,199,121, 74,129,118, 5,246, 9, 64, 70,171,187,111, 24, 16,190,153,119,175,220, 89,223, 94,135,213,117,126,108,170,110, 59, +135, 88, 79, 46,194, 36, 0,110,184,120,125, 97,115,175, 25, 70, 65,171,179,255,248,246, 34, 64, 57,122,149,152,252,230,244, 13, +248,255,176,216,184,201, 97, 51, 3, 80,194,249,132, 74, 56,121, 10,119,105,166, 49,147, 36, 49,154, 38,178,178,195, 71,235,124, + 60, 76,221,249, 51,243,252, 94, 86,114, 24,197,110,249,241,158, 44,228, 27, 17,211, 17,184, 41,164,100, 99,233,108,109,167,215, + 11, 18, 89,125, 68, 94,129,235, 10, 3, 61,134,115, 27, 56, 54, 65, 14, 89,186,138,247,162,140, 10,193,104, 63,160, 51,114, 14, +192, 30,174, 82, 89,145, 78, 74,148,226, 83, 19,165, 55,105, 55,120,245,178, 27,116, 24,105,172, 11, 35, 67,174, 27,205,206,222, +207,182,247,230,253,235,143, 31, 62, 77,153,215, 10,173,191,228,175,188,186,244, 48,201, 61, 49,226, 34, 89,156,212,177, 34,145, + 19, 20,138, 73,102,207,205,246,252, 1,205,150, 23,244,223, 17,135,184, 89,197,220, 58,193, 69, 42,114, 25, 2,116, 73,166, 80, + 0, 56,185, 65, 8, 74,141,124,176,144, 25, 89,156, 98,167, 94,154, 66,136,144,215,237,250,163, 91, 11,171,155,171,138, 42,155, +101,143,105,107,225, 69, 62,121, 13,145, 70,173,136,140,137,193,115,189, 18,147, 36,175,204,224,203, 42, 71,241, 47, 22,138,172, +128,236,245, 64,155,160, 26, 94, 36,207,167,198, 46,120,241, 64, 80, 95,135, 59, 38, 51, 13, 3,187, 1, 17,184,237, 42, 22, 5, +233,183, 50,108, 97,138,105,168, 74,149,103,132, 50, 12,198,196,140, 43,185, 6,162, 66, 34, 32, 21, 90,120,167, 9, 90,215,102, +201, 95, 1,248,186,150,213, 38,162, 48, 60,247,204, 37,153,180,147, 72, 59,109,189,208, 88, 11,138,224,198,133,160,130,130, 11, + 31, 65,151,174,117,229, 78,112,227, 83,184,240, 21, 92,248, 8,162,104, 81, 80, 20,169, 86,109,189,165,182,166, 77,167,185, 76, +230,146,153, 51,254,223, 57, 73, 13,130,118,213, 66, 18,210,228,156,239,252,231,255,191,203, 65,255,157,201, 19,125,231,201,202, + 61,195, 14, 97,147,245,120,198, 37,202,244, 67,224,254,159,142,205, 63,170,239,131,122,255, 96, 38, 60,217,184,151, 71, 67, 2, + 60,138, 77,246,195,229,191, 26, 56, 66, 41, 54,158, 59, 23, 19,183,129,145, 80,149, 43, 32,192, 0,132,235, 50, 70,150,182, 81, + 65, 40,183,196,120,120, 22,166, 61,150,102, 14,134, 49,125,172, 73, 30,211,195, 0,223,252, 93,129,250,194,114,186,167, 35,206, + 9,236, 36, 44, 3, 2, 14, 25,168,154, 61, 89,125,220,139,193,250,162,149, 79, 79, 49, 53, 83,146, 52, 7,103, 67, 95, 83, 75, +237,254, 14,173,255, 20,145,152, 80,193,193,252, 72,117,145,215,147, 70,183,174,223,121,249,246,185,141,111, 55,201,216,128, 49, +157, 22,200,145,250,137,173,206,102,111, 56,252,213, 31,108,133,221, 66, 63,212, 28,236,181,210,172, 25,198, 63,187, 9,196,233, + 4,121,146, 82,146,101,215, 80,235,166, 94,183, 74,117,179, 52, 69,191,219,165, 74, 73,153,114, 84,203, 40, 12,218,196,130, 28, +193,253, 6, 50, 80,216,152,136,113, 40,113, 31, 52, 78, 49, 42,168,234,183, 45,197,113,232, 90, 42, 91,150, 98,232,146,165,171, + 54,154, 66,136,244,171,152,138, 37, 20,165, 84, 96,243, 44,113, 80,129,248, 49, 25,209,193, 16,179, 36,205,251, 4, 99, 97,158, +166,176,174,148,184,205,189,165, 41, 86, 73,166,178,189,108, 72, 71, 29,107,189,185,255, 37,232,197, 89,136,203, 8,207, 38, 84, + 97, 27,128,238,161, 12,238, 16, 29,126,153,239,205,215,221,218, 78,176,205, 10,161, 70, 41, 16, 71,160, 80, 49, 50,165,242, 45, + 48, 28, 70,170,106, 92,187,124,109,101,245,169,176, 33, 11,122, 59,220, 21, 86,166,143,116,101,109,133,243, 57,243,173, 96, 51, + 73, 98, 42,183, 79, 29, 59,189,219,105,193,100, 56,220, 3,134,228, 57,129,187,107, 87,227,116,112,172,209,184,112,246,210,250, +215, 79,180, 96, 42,102,149, 54,120,173,236, 65,100,148,192,185, 8,101, 47, 29, 30,244,200, 44,158,247,252,253,238, 46, 33, 17, +225, 5,189, 14,221, 57, 90,221, 22,253,239, 75,115,141,153,105,127,121,126,233,219,246, 23, 93, 85, 47,158,188,112,216,155,249, +240, 99,205,208, 84,191,234,151, 45,155, 78,110, 91,183,206,159,187,186,241,109, 53,197, 24, 92, 63, 90, 63,178,219,105,195,226, + 49,234, 17,142,127,220, 90,243,167,231,250, 81,247,202,153, 75, 15,159, 61,162, 3,137, 10,255,160,191,135, 60,153, 40,164,226, +189, 86,169,237,238,183, 61,215,251,177,211,164, 55, 25, 13,195,101,200,106, 54, 5, 40,181,123,129, 72, 64,147, 49,242,113,105, +159,119,224,132,126,188,106, 87,185,175,242,190,166,169,174, 89,161,186, 50,207,163,120, 24, 88,186,195,122,219,139,151,103,165, +186,129,109, 36, 8, 44, 92,231, 62, 82,223, 40, 2, 64,177, 98,180, 34, 39, 92, 46, 59,246,251,239,193, 94,156, 42,130,104,204, +103,161, 58,214, 12,106, 28, 56, 67,195, 7, 74, 85,228,226, 32, 3, 72,225,105, 18,101, 77,243, 44,243,240,244, 20,183, 82, 47, +116, 30, 80, 44,122,194,244, 69,184, 48,204,156, 15,144, 33,174, 21,104,182, 84,233,169,141,217,133,215,205,141, 55,237,205,219, +119,111,222,191,247, 96,193, 60, 41,235,221, 23,233,187, 27,139,231,233,134, 55,110, 95, 40,226,150,207, 68,117, 44,177, 25,111, +182, 19, 98,120,147,194, 14, 77,168,206,160,104,241, 61,159, 22, 6, 79,239,227, 96, 15, 35, 44,206, 31,102, 60,150,152,241, 81, +155, 84,140,212,231,227,142, 55, 23,142, 22,130,235,177,188,176,220,131,174, 21,182,225, 97, 26,190,250,252, 6, 74, 28,196, 54, +229,185,224,170,112,236,161,162,111,113,166,241, 51,104, 74,220,163,176, 24, 67,165,101, 56, 81, 6,238,188,235, 84, 19,110,252, + 59,166,209,255,233, 77,112,215,241,113, 3,133,176,219,172,208,141,132, 94,173,213,161,141, 14, 27, 12,198,219, 96, 97, 18, 70, + 80, 75, 65,152, 66,112, 1,146,187,196,201,222,133,236, 85,106, 81, 26,249,222, 92,151,118,193,159, 9,171, 44,236,126, 21,105, +100,153,131,238, 59, 21,173, 40,243, 49, 18,160,191,127, 11, 64,216,181,244, 52, 17, 69,225,123,231,213, 78, 95, 67,167,229, 41, + 40, 96,108, 98, 76, 52, 81, 2, 97,225,194,184, 52,110, 12, 46,140, 27,253, 1,238,220,155,248, 35,140,191,200, 24, 23, 18, 34, +132, 4, 36, 66,132, 2,182,165,180, 50,239, 41,245, 59,231,182,162,209,232,174, 77, 38, 51,153,185,231,241,125,231,158,251,157, +139,250,187,246,199,249,163,254,223,240,248,127,113,250,191,203,244,234,182,166,180,168,206,192, 60, 65,210,104, 43,224, 2,110, +148, 30, 38, 38, 30,226,203,250,177,186,141, 47, 56,104,110,185,184,195,111,187,185,220, 11, 54,216,129,254,117,188, 20,155, 8, +105, 24,224,253, 0,109, 60,154,200,172,196, 51,240,248, 76, 66,167,241,177,132,100, 46,249, 76,129, 84, 41,184, 30,162,150,130, + 13, 37,130,233,144,196,152,198,163, 93,233,118, 36,179, 78,202, 60,131,126,123, 3,225,251,225,226,163,181,189, 85, 18, 33, 34, +153,142,120,178, 60,221,236, 28,243, 30, 61, 8,102,148, 82, 10, 78,253,196, 79,146,228,253,250, 59, 56, 97, 2, 32, 2,251, 19, + 44, 59,209,139,143,187,251,150, 94,140,123,161, 99, 87, 76,195, 58,241,143,168,198,135,128,174,185,254,185,151, 10,189, 19,247, +190,197,113,195, 55,142, 67, 26,229,213,134, 11,203, 62,216, 99, 78, 51, 93, 51, 51, 90,200, 59,166, 89, 50,178,217,190, 81,144, + 32,234, 38,126,216,186, 73, 70,153,202,148,166,247,200, 40,232, 81,199, 75, 66,111, 59, 16,163,227, 70,107, 66, 94, 86,159,181, +221, 69, 33,139,208,143,160, 47, 73, 64,216, 32,163, 34, 85, 46, 22,106,202,153, 70,206, 2, 70, 35,141,154, 10,176, 71,222,116, +138,134,155,183, 74,182, 81,176,145, 33,100, 86,147, 96, 27,142, 52, 63,237,181,118,219, 30, 11, 12,113, 15, 27,187,208,148, 59, +227,100,203,176,221,197,218,242,206,241, 54, 62, 45, 28, 21, 17, 42,151,161, 73,123, 83,229,153,162, 77, 20, 10,107, 1,152, 60, + 57, 50, 13,192,110, 25,182, 31,123,173,110, 11,142, 71,161, 95,104, 83,213, 75, 9, 9,241,171, 18,129, 94,201, 87,252,216,183, +179,118,109,250,122,215,239, 32,140, 34,127,172,220,123, 92,181,171,251,173,125,138, 74, 6, 76, 60, 90,170, 45,175,109,174,110, +110,111, 8,154, 67, 96,193,123, 29, 58,112, 24,146,146, 19,119, 18,227,134,160,180,112, 75, 93, 13,129, 35,158, 74,237, 49, 88, +199, 92, 38,255,236,254, 83,207, 63,107,122,237,175,141,189,207,245,173,170, 51, 54, 51,126, 69,246,210,179,192,135, 45,141, 59, + 99, 7,237,195,152, 69, 53,225,177,219, 59,235,120,202,157,107,183,247,155, 7, 65, 20,129, 29,193, 30,138,118,105,194, 29, 59, +104, 29,157, 69,223,253, 48,108,158,157,176, 94, 96, 52, 63, 57,219,234,144,198,172, 31, 69, 32,170,174, 59,177,242,224,201,238, +151,109,188,212,168, 83,165, 66, 1,225, 47, 27,215,243, 8, 26,129, 28, 54, 63, 62, 71, 5,232, 94, 58, 85,153,196,211,235,167, +117,228, 54, 36,146, 83,191, 13,124,135, 7, 5, 44,149, 3, 19, 54, 45, 83, 15,253, 27,119, 47,139, 57,155,157,173, 47, 84,227, +149,236, 15,230,247, 12, 0,160, 2,202, 18,224, 92, 88,230,135,245,195, 48, 61, 87,212, 77,137,192,240, 97, 55,146,140, 86, 85, +133, 30,103,107,174, 78, 83,125,218,194, 39,149, 70, 33, 99,205, 84, 70,140,172,113, 18,146,214, 83,134,107, 48, 63, 69,163, 82, + 17,232,158,221, 78,224,239, 26, 40,203,114,109, 97,175,113, 16, 4,254,206,105, 99,163,217,120,249,234,197,155,215,111,175, 22, + 22,132,209,253,152,108, 61,159, 93,138,250, 30,247, 55,255, 12,161,130,155,250, 75,220,179, 46, 3, 82,140,225,115, 37,180,115, + 68,242, 57, 97,156,130, 66, 69, 9, 89,183,194,236, 10,143,223,156,189, 85,111,215,129, 85,202,165, 81,164, 85,158,238,163, 36, +201,197,224,168, 40,137, 80,141, 80, 48, 21,231,141, 78,147, 14,223,168,173, 73,169,151,139,101, 22,181,181,227, 56, 1,101, 39, + 72,199,227, 53,224,206,141,110, 75, 92,244,175, 43, 41, 71, 96, 17, 18, 63,136, 82,240, 39, 43, 78, 67,197,146, 88,254,224,162, +161,133,255,171,137, 10,244,233,129,208,177,172, 39, 94,203,205,187, 81, 28, 43,186, 1,196, 45,135,114, 79,170, 79,105,216, 91, + 71,244,194,208, 76, 47, 14, 34,154,249,144, 14,234, 19,218,144,143,105, 98,120, 48, 72, 93,222,163,156,161,162,162, 20, 63, 4, + 96,236,218,122,162,134,130,112,123,122, 78,111,219,101, 23,150,203,162, 18,162,129,152,152, 16,223,140, 60, 24, 30,124, 50,254, + 5,253,111,196, 7,227, 31,192,240,164,137, 9,241, 1, 68,137,107, 36,220,228,190,184, 23,216,238,173,237,182,123,234,204,180, +236,106, 2,137,240, 68,114, 18,218,133, 51,243,205,204, 55,223,199, 7, 56,253,166,205,210, 91,127, 84,149,255,253,138,111, 58, +223, 35,175,150, 97,115, 31,227, 93, 52, 56,163,171, 8,108,225, 6,194, 83, 6,125, 47,192,172,254, 79,167, 94,189,149,126,121, +157,150,136, 77, 19,167,155,183,177,197,109, 20,213,145, 73, 46,102, 16,178,187, 81, 7, 5, 37, 52, 1,225,183,199,250, 72,230, + 75, 68, 42, 83,199,131,164,193, 66, 19,255, 24,251,248,232, 34,162,200,156, 51,218,104, 55, 98,106,158, 49, 84,240,244,225,175, +254,246,211, 27, 56, 9, 53, 17, 57,214,250, 7,149,125, 20,192, 81,217,136,149,175,119,107, 40,190, 22,226,180, 68, 69,161, 21, +169, 49, 40,241,116, 15,157,112, 73,155,142,218,228,174,143, 75, 88,101,247,156, 28, 92,113,225, 19,210,111, 55, 66,125, 34, 0, +109,156, 22,142, 66,165,211,239,107,165,166,123,116,217,242, 37,246,224, 56,150,201,202,136,101,230, 76, 49,155,205, 78,103, 51, +182,109, 27, 76,155, 48,140,122,208,131,187,101,197,220,128,135, 87, 80,232, 18, 66,118, 43,162,220,226, 73,168,255, 66, 17, 26, + 38,215, 5, 62, 0, 71,147, 18, 20,237,176,109,178, 47,135,215,136, 88, 15,192, 67,136,220, 47, 63, 68, 6, 3,128, 1,168,202, + 61,244, 6,163,143, 38,130,192,132,112, 18,158, 48,111,235, 83,142, 81,107,120,235, 7, 87, 80,223, 67,121, 48, 61, 54,179,125, + 94, 34,132,132, 89,238,176,122,128,251, 71,161,247,227,248,251,157,177,123,245,102, 53, 70, 57, 86,120,120,221,151,126,189, 83, + 53,152, 97,162,245,182,177, 48,243,104,251,228, 39,192,103,210,228,227, 87,205, 58, 45,175,121, 89, 43, 7,255,228, 16,253,209, + 76,145, 46,231,126,101, 15, 45, 85, 59,205,202,213,111, 67, 88,168,193,107, 90,203,171,203, 15,138,115, 77,175, 9, 32, 23, 53, +177,226,112,235,104, 75, 55, 76,146, 24,212,225,216,104,166, 32, 4,191,186,104,248, 97,240,250,249,171,195,243, 67,244, 9, 97, +234,198,238, 6,220,234, 54, 90, 36,115, 71,100,187,136, 3,160,224, 8, 87, 54, 86, 91,109, 23, 18,207, 92,241,190,161,242, 66, + 97,106,105, 97,233,107,105,237,164,126, 22,248,190,103, 6, 0, 96,159, 62,124, 18,244,123, 27, 59,155,142,229,232, 81,124, 92, + 57, 53, 13, 59,177, 31,122,185,248, 98,229,243,251,189,139,195, 98,190, 8,183, 15, 18,188, 11,245, 25, 83,230,139,243,139,143, +151,206, 62,188,131, 95, 87,112, 70,243,179, 83,141,179,203, 94,167,229,152, 25, 72, 63,229,122, 25, 34, 81,185, 86,206, 59, 89, +157,241, 92, 38,235,133,189, 46, 57,132, 65,110, 40,228, 10,141, 22, 6,116,174, 48, 72, 96, 71,181, 35,194,133,172,227,183, 38, +199,238, 78, 76, 77,255,218, 95,135, 26,179,195, 45,101,199, 85,158,141, 35, 72,239,235, 24,223, 53, 28,125, 32,163,134, 15, 92, +218,168, 91, 32,208,187,160,245,173, 10,149,153,174,177,144, 66,188,140,211, 89, 29,163,149, 61, 85,202,248,239,139, 15, 48, 71, + 83, 45, 33,144, 80, 43,180,227,142,219,172,123,128,123, 50, 56,177,193,111,193, 18, 64,164, 10, 17, 77, 10,211, 31,159,189, 60, +221,133, 79,233, 99,105,141, 1,134, 50, 16, 73,154,138,141, 35, 80, 37,118,120,182,133,218,165, 38, 81,246, 73, 69, 21,105, 7, +100, 77,134, 36, 98,110, 25,166,223, 15, 0, 16, 36, 46, 2, 50,101,127,168,100, 38, 76,251,180,105,224, 70,194, 50, 25,189,245, +191,236,109, 10,206,161, 36,247,221,138, 76, 54,252, 83,216,174,164,158, 68,112, 24,201, 20,177, 36, 23,176,235, 81, 31,213,192, +114,184,246,216, 14,154,196,140,148,113, 58,104, 37,147,185,129,179, 68, 98,108,136, 7,112, 10, 66,137, 4,121, 53,137,235,133, + 58,232,134, 37,246,158, 41,103, 63,145,245, 75, 24, 66, 18, 96, 31, 73,184, 74, 84,117,228, 90,197,173,106,228,164,118,205,230, + 75,138, 13,124, 1,183,235,226,204, 76,134, 67,138,100, 60,236,104,171,169,250,128,146,152, 99, 3, 16,129, 87,169,161,249,184, +250, 71, 0,202,174,165,181,137, 40,140,206,220, 59, 51, 73,166, 77,155,198,166, 47, 40,182, 69, 20, 41, 45, 86,197,125, 65, 10, +110,252, 3, 93,250, 59, 4,255,136, 8,234, 90, 16, 92,117, 33, 8,182,116,161,162,216,151, 85, 90,232, 51,105,210, 71, 94,243, +200, 60,226,119,190, 59,169,173,136,232, 50,179,153,201,204,189,231,126,143,243,157, 99,156,147, 41,245,127, 67,246,191,211,219, +255, 19,246, 47, 65,127, 71, 69, 18,232, 15,113, 2, 12,254,234,237, 63,116, 95,127,235,238, 94,100, 54,234,234,220, 76,244,116, + 58,126, 84, 62,122,102, 33,152, 93,204, 11, 99,149, 5,224,143,219,246,240,222, 99, 65, 59, 39, 17, 89, 22, 74, 69, 63, 78, 91, + 89,168, 20,176, 56, 92,135,171, 36, 78,170,229,233,137, 59,223,247,214, 41,188,130,124,165, 48,184,223,132,187, 56,129,203, 69, +125,157, 82,129,166, 95,247,131, 86, 41, 56, 68,212, 35, 2,197,138, 66, 1, 83,147,240,196,198, 58,132,166, 31,146,142, 48,209, +151,227, 46,168,174, 38,212,132, 30, 73,184,174, 70,104, 0, 72,124,126,201,114,214,109, 17,229,109,208, 85,107,173,152,110, 64, +225,161, 19, 68, 4, 70,197, 88,251, 22, 86,212,105, 78, 72, 57, 53,152,163,135,215, 51, 22,129,171, 1,163,119,105,185, 96,168, +217, 66,246,102, 82,215,179, 89,148,191, 53, 12, 56, 35,194, 38,220,129, 52,154, 17,186,113,213, 67,248,227,129,148, 36,130, 64, +227, 85,205, 99,117, 44, 70, 5, 50, 89, 11, 77, 84, 83,189, 36, 93,235,183, 83, 61,166,229,250,241,210,218,209, 81,195,151, 50, +109,155, 86,165, 94,220, 60,128, 64, 57,116,174, 1, 11, 2, 24,237, 57,182, 97, 55,252, 70, 29,190, 60, 33,157,124,116,100,214, +188, 26, 12,117, 91, 94,166,203,110, 56, 85, 10,207,221,192,107, 6, 14,101,160, 41, 97,206,205,204, 45,111, 44,209, 21,101,178, + 83,172, 30, 58,158,123,110,131,206, 81,188, 18, 31, 69, 96, 70,177,121,221,107,218, 86,247,252,236,252,147, 23,143, 39,175, 78, + 18,100,247,103, 11, 20,254, 83,254, 34, 89, 94,166, 84, 45, 18,238, 31,211, 22,130, 44,157,246,116,225,153,196,208,131, 63, 90, + 24,203,160, 94, 25, 58,190,211,215,149, 31,238, 27,222,220,223,192,234, 49,204,226, 89, 41, 99,164, 7,115, 67, 3, 61, 67,235, +187, 43,187,229,157,175,155, 31, 70,114, 35,174,239,216,102,250,238,181,153,197,213,197,207, 91, 95, 70,251, 71,233, 39,140,112, + 83,221,133,158, 43,180,254,106, 78,157,190,203,199,141, 79,150,105,165, 77, 43,214,194,253,242, 33,180,196,233,169, 53,153, 77, +117,191,126,247,138, 94,187, 97,203,253,242,193,120,215,141,237,202,202,203, 55,207,239, 79,207, 26, 56,141,130,158, 76,246,168, + 86, 49,205,212,195,123, 15,222,175, 45,123, 94, 53,103,247, 86,106,229,219, 19,183,118, 43,123,148,181, 80,252, 78,193, 94,119, + 10,121,143,100, 36,225, 4,168, 85, 24, 24,226, 90,115,219, 51,187,182, 23,246,198, 31,221,212, 8, 76,163, 38,143,213,241, 2, + 23, 28,194,163, 73, 15,195, 39,173,215, 68, 53,122,245,244,237,242, 14, 92, 19, 52, 5,125, 29, 22, 56, 55, 32, 47,214,107, 21, + 87, 15,150,150, 82,228,179,182, 76,155,167,174, 19,226,236,151, 60,120,139,204,141,123,249,172,104,203, 62,238,174, 91,206,217, + 83, 21,168, 13, 10,102,172,200,136,163,108,181,239,155, 90, 96,105,198,158,183, 19,177, 72,142, 96,167, 42,157,187,160,122, 28, + 33,157,142,180,227,250, 49,109, 24,250,155,161, 16,227,249,177, 31,165, 45, 31,213,107,216,128,133, 24,225, 64, 17, 38, 86,170, + 11, 24,239,132,203, 39,187, 73,130,179,223,142,227,115,148, 76,130,110,229,112, 68,223, 8,252, 61,202, 91, 12, 10,138,149,171, + 55,183, 76, 53,204,117,133, 97, 35,170,227, 9,184,181,250,139,163,216, 78, 74, 58,237,196, 56, 45,177,245,166, 60, 0, 10,174, + 32,248, 26,249,108, 63, 45, 27, 27, 35,114, 77, 53,219,101, 36,190, 75, 42, 55, 18,106, 44,134,153, 32,186,227, 53, 85, 81, 58, + 82, 46,129,160, 84,176,121, 26, 71, 49,231,108,252,142,229, 18,159,182,151,133, 0,196, 5,189,155,196,208,186, 29,159, 53, 79, +184,185,130, 75, 63, 5, 96,237, 90,118,155,134,130,232,181,175,157,216,206,195, 73, 31,105, 80,131,154, 86, 32, 1, 43, 22,172, +248, 4, 36, 86,252, 0,159,198, 23,176, 64, 8, 9, 16, 91,132,218, 74, 81, 23,133,180,106,105,211,144, 71,243,110, 28,199,241, +155,153,185, 78, 10,130, 13, 18, 63, 96, 39,215,115,207,156,121,157, 81,216,191,208,246,255, 10,241,191,189, 34,205, 81, 17,222, +193,141,222, 50, 85,167, 67,150, 40,157,161,157, 8, 93,255,232,111, 16, 31, 51,101, 37,112,150,213,242, 0,149,168, 28,249, 43, +149,167,227, 18, 45,240,120, 80,145, 80,184,136, 33,132, 15,195,112, 89,225, 70,227,132, 11,143,197,138, 16,117, 53,237,200, 18, + 57,152,162,110,166, 84,189, 63,189,102,180,171,226,232,162, 6,112,179,179, 89,109, 14,154,194,105,210, 24,161,236,163, 33,168, +240,182,201, 98, 76,141,126,162, 29, 83, 42,231,203,224, 30, 40,145,238,145,168,134, 68,173, 20, 76,252, 29,145, 90, 10,104, 88, + 25,235,154,136,226,212,106, 12, 96,192,248, 94,225, 81,115,122,142,138,147, 44,224, 1,188, 2,119,122,147,144,122,164,208, 98, + 6, 46,150,204,211,244, 61,231,162,190, 20,214,135, 99,157,187, 56,201, 73, 15, 70, 70, 35, 99, 15, 7,248, 55,136, 12, 0,251, +239, 23,139,213,124,174,128,213,133,172, 41, 97,238, 5,184, 60,202,241,179, 96,230,120,150, 20,207,177,139, 40,160, 44, 17,205, + 94,225,117,197,205, 3,161, 1,220,139,131,155,202,166, 56,240, 71,219,241,247,191,247,135, 22, 56, 79,135, 75, 41,207,179,103, +254, 68, 87,115, 70, 42,215, 26, 93,193, 89,107,170, 54,119,157,192, 95, 0,192, 25, 90, 1, 44, 30,127, 18,118,172,240,201,108, + 36, 43, 10,249, 98,184,155,108,183,188,119, 61,238, 30,158, 29,192,101,184, 83,168, 56,254,252, 99,237,253,220,155, 11,233,130, +129,213,167, 50,154, 14,174,138,246,107,235, 54,106,146, 68,128,203,224,228, 12, 45,219,191,233,192, 39, 72,105,250,219,253, 55, + 27,197,173, 77,179,132, 66, 28,161,159,104,177, 70,129,170, 26, 41, 73,129,248, 54,159, 89, 91,120,118, 74, 81,192,210, 30,222, +125, 80,111,124,157,204,134, 94, 64,221,156, 44, 28, 90, 3, 96,217,102,166,104, 57,211,242, 90,165, 51,104, 64,232,109,187,211, +211,246,137, 71,219,111,224,215,204, 92, 91,227,234, 78,185,218,232, 54, 56,231, 47,158, 62,127,253,249, 93, 49, 95,116, 93,183, + 51,110,183,111,186,178,136,252, 36,185, 53,234,160,170,109,228,111,100,214,225,154,162,228,108,236,101,211,102,123,212,133, 88, +161,144, 41, 0, 97,223, 45, 85, 43,114,241, 8, 69,221,248,151,179,131, 74,105,103,100,141, 33, 20,240,176,234,236, 52,122, 87, + 99,123, 2,254, 24,224, 27,190,254,143, 65, 11,231,221, 89,132,132,131, 73,134,106, 80,151,119, 36,166,223,195,192,175,159, 30, + 42, 16,234,225, 68, 72,175, 57,140,182, 95,125, 74,189,124,198,208,148, 38, 76, 33,188,224,148,217, 70, 34, 0,120,158, 97,181, +238,197,135,243,163,122,111,232,184,192, 3,176,170, 65,122, 65,161, 47,224, 33,105,193, 90, 13, 30, 82,186, 19, 55,243, 85, 54, +242, 11, 57,154, 90, 22,224, 42, 64,164,138, 0, 25, 11, 49, 54,209,166, 6,102,167,144, 85,166, 21, 47,154, 89, 88, 92,209,140, +249,194,131,155,165,201,105,207, 11, 53, 29,119, 99, 77,216,108, 91,171,236,207, 61, 51,157, 15, 34, 23, 23,213, 98,224,155, 55, +141,204, 73,231, 50,183, 94,158,143,250, 56, 68, 43, 56,123, 20, 97, 69,132,252,206,147,123,143,107,151,199,112,229,182,204,210, +113,235, 27,201,193,209,190,164,128, 4,234,101, 22, 96, 54,143,248,124,156,164,115,197, 16,110,124,219,142, 1,161,155, 98,166, +205,190,219,139,150,248,200,101,196, 16,148, 21,210,178, 16, 1, 12,103, 55,178, 20,175,100,105,111,153,181, 40,252,210,202,177, +164,163,143,142, 11, 30,152, 73,227,144,115, 90,209,108,215, 17, 44, 19,248, 13, 88,160, 31,186,162, 60, 26, 75, 75,233,175,213, + 80,167,196,198,214,152, 45, 55,160, 51, 49,251,200,150, 98, 5, 2, 4, 89,162, 72,243, 71,203, 73, 34, 7, 41, 37,195,255,232, + 29, 40,114, 78,116, 24,127, 10,192,216,149,236, 54, 17, 4,209,158,221,179,197,139,108, 39, 81, 18, 5, 36,132, 64, 66, 66,226, + 0,124, 2,119, 62,129, 11, 7,238,124, 4,191,192, 31, 32,113, 65, 8, 78,112, 68, 17, 10,203,129,147, 67,130, 9,177,177, 51, + 30,143,103,245,108, 61, 84,117,143,147, 0, 18,226,226,147, 61, 35,207, 84,191,126,213,245,234,149,252, 15, 40,255,159,230, 85, +156, 19,200, 84,231,255,127,254,254,247, 23,152,221, 32, 78,153,101, 41, 6, 68, 88, 86, 15,168, 37, 92, 9, 43,150, 23,132,152, + 23,175,202, 44,201,170,213,201,187, 20,227, 76,194, 66, 60,187, 39, 31, 12, 91,137,188, 83,105,213, 14, 80,101, 40, 31,169, 84, +217,100, 83,119,249,115,225,174, 97,104,136,178,219,189, 52,241,198,188,208, 1,241,234,198,128,215, 30,238, 19, 98, 37,227,148, + 87,184,190,216,182, 58,144, 26, 83, 28,104,167, 82,108,239, 76,241, 61,139,133, 34, 41, 16,140,138,214,192, 74, 11,170, 22,133, +177, 55, 34, 76, 74,203, 38,165, 0,234, 2,140,102,220,142,129, 59,160,178,212,183, 4, 18,177,196, 90, 36,106,209,105, 90, 27, +183, 30,120, 78, 33,164,170,100,224,122,198, 51,198, 85,133, 68,252,109,251,230, 4, 11,123,230,177,148, 65,194,146,132,114, 90, +179,174,242,194, 91, 68,202, 38, 4, 89,116, 12,219,123, 6,172,131,137,208,141, 6,112,240, 94,115,109,221, 48,182, 76,243,198, +102,207, 54,180,158,161, 1,222, 51,179, 70, 33,197,181, 78,225,237,160,199,125, 65, 1,111, 7,163,224,240,196,119, 22,212,141, + 2, 77,182,238,221,188,255,106,255, 25,192,159, 34, 26, 64,226, 32, 24,166,139, 73,201,206, 59,113,124, 54, 22,169, 84, 8,186, + 28,235, 16,153, 36,194,227,202,253,216, 55,117, 59, 78, 22,186,102, 3, 93,157,199,174,143,233, 39,202,171,225,153, 76, 23, 35, +156, 67, 96,182,104,161,181,205,182, 23,123,144, 74, 3,137, 14,146,133,199,186, 22, 27,170,201, 88, 42,214,209, 0,172, 41,237, +192, 79,117,205, 4,208,220, 31,188,191,186,125,125,127,240, 65,150,181, 56,241, 37, 73,211,117, 99,137,201, 89, 21,101, 81,219, +110,103,217, 82,194,119,132, 11,182,189,214,209, 26, 22,182,125, 66, 24,224,216,188,203,227,217,177,138, 61, 2, 74,150,103,195, +201,183,142,221,156, 7, 46,236,187,170,165,154, 13, 28, 49, 97,169,141,187,215,238,188,253,244,230,116, 49,105, 27, 77,216,192, +158,191,123, 57,243, 79, 45,228,221,101,183,217, 3,120,193,164, 1,101, 75, 82,202, 78, 81,202,130,246, 59,253,131,233,119, 67, +213,156, 48,172, 42, 31,190,163,169,154,166,232, 39, 14,142,145, 98, 22, 81,152,177,165,105, 50,113,126, 0,154,227,144,101, 65, + 60, 93, 56,128, 47,216, 97,202, 82, 22,184,160, 27,185, 16, 48,139,208,195,126, 70, 96, 18,177,135,119,201, 75,180,243,224, 1, + 76, 10,219,232,123,201,228,246,198, 21, 55,220,123,244,248,197,195, 47, 71,183,158, 60, 32,100,131,136, 30, 49, 34,162,138, 4, +246,231, 38, 35, 81,175, 7,123, 79,247,135, 65, 90, 66,230,161, 43, 73,176,156,204,253, 52,203, 53, 85,150,108, 11,197,245,244, +188,138, 40,176,121,158, 0,226, 59,173,230,102,207, 74,242,116, 25, 23, 18,202,204,240,120, 94, 98, 13,242, 84,170,164,146,249, + 68,113,175, 21,180,143, 22,229,170, 60, 25, 13, 41,149, 32,187, 74,210, 57, 44,114, 83, 54,188, 52,106,239,172, 65, 72, 6,196, +237, 55,208,245,190,101,217, 93,187, 53,244, 66, 72, 84,225,239,207,162,185, 46, 43,157,238,166, 73,201,177, 59, 70,165, 12, 83, + 61, 71,105,204,138,138,213,200,157, 70, 89,178,204,178,153,239,228,204,243, 11, 79,116,105,105, 26,214,238,250,238,199,163,207, + 34,225,224, 94,159,227, 51,190,125, 54,252,141,174,116, 34,249, 52,156, 10,228,156,138,195, 39, 50, 57, 1, 21, 77, 73,221,198, + 68,254, 4,119,254,123,190, 95, 16, 97,187,187,229,248, 14,132, 58,252,107,224,254, 95,127, 30, 66,108,178, 6,186,122,217,197, +121,196,189,126,185,157, 31,183, 46,129, 61,177,224,210, 77, 6, 83, 72,161, 8, 63, 24, 67, 18, 42, 67, 4,150, 75,194,148,199, + 53,200, 87, 85,237,255,200,180,151,186,162, 39, 69, 34,212, 98,148,149, 50,165,190, 35, 79, 17,106,128,252, 37, 0, 97,215,178, +219, 52, 20, 68,239,245,243,218,113,156, 71,211, 54,141,170,162,130, 0, 9, 65,197, 2, 36, 36, 36,190,128, 37, 43, 22,124, 13, + 43,182,236,248, 1, 96, 77,197,170,176, 42,130, 86, 64,161, 72, 5,148, 66, 95,132,208, 36, 77,155,167, 19, 59,182,153,153,235, + 20,138,132,234,110,235,186,190, 55,153,123,102,230,204, 57,218, 41,213,147,211, 46, 29,107,229,209,127,136,140,167, 95,242,228, + 17,186, 13, 1, 77,186, 0,134,236, 79,100,151, 87,128, 6,123,127,167, 11,199,146,238, 10,145,223,229,236, 0, 39, 83, 57,146, +213, 59,249,100,203, 72,245,253,110, 98,103, 34,123,167,180,239,144,101, 39, 92, 81, 58,126, 53,236,233,117, 13,213,218,252, 85, + 30, 43, 80,199, 74,210, 31,145,150, 38, 49,149,140,226,201,204,244,198,222, 6,209, 75, 61, 31, 66,223,184, 17, 2, 59, 51, 12, + 81, 40,219, 27, 14,114,206, 68,123,208,142,227, 17,209, 21,185,180,155, 9,240, 7, 94, 38, 12, 56,121,139, 51,210, 42, 80,152, +176,153, 78,211, 68,148,254,161,124,141,142, 14,221, 58,245, 17, 44,164, 37,132,130, 39,234,134,124, 52, 66,154, 35,202, 97,146, +246,150, 92, 14, 85, 77,114, 20,148,135,151, 13, 40, 64,227, 36,209,203, 36, 97, 88, 46, 88, 4,187, 69,236,119,161, 70, 26,182, +168,252, 48,110, 68, 65,163, 90,255, 28,132,232,197, 7,191,108,232,182, 45, 82,186,238, 10,211,113,236,172,208, 75,134,221,244, +130, 86,111, 56, 12, 2, 26, 13,198,190,141,202, 76,120,100,111,208,124,182,242,152, 18, 11,184,187, 55,240, 3,200, 3, 12, 93, +120, 72,195, 68,226, 90,103,208,134,127, 51,227,228, 33,200, 66,158,128, 77, 36, 92,215,168,235, 1, 50, 66,240, 53,244, 7,181, +206,126,162,227, 70,118,222, 16, 73, 1,233,207,228,103, 43, 7, 63, 32,137, 22,166,232, 99,175, 59,112,237,172, 23, 12,108,145, +129,133,149, 69,212,180, 72,123,104,204,139,204,234,142,119, 8,135,199,116,118, 6,112,116,237,168,106,153,118,193,157,220,174, +109, 69,104,215,160,194,241, 25,196,193,185,226,249, 55, 95, 95, 21,243,165,102,171, 33,132,120,249,225, 69,222, 41,104,232, 44, + 15,169,149,178,189,255, 45,109, 58,128, 16,133,106,112,156, 69, 84, 90,189,150,134, 75,140, 1,119,126,242,204,141, 11,215, 23, + 87, 23,151,222, 47, 77,103, 10,185, 84,214,181,221, 90,171, 6,231, 22,108,195,181,133,155,147,169,236,242,250, 50,108, 86,187, +210,129,187, 92, 52,247, 56, 64, 34, 34,142, 43,155, 25,203,129,151,130, 87,176, 12,177,127,180,143,181,133,144,188,179, 85,245, +234,217,133,225,200,127, 91,126,167,113, 99,110, 98,246,211,238, 23,115, 20, 66,148,167, 33,122, 31, 43,116,244, 33, 71, 74, 99, + 52, 66, 90, 48, 9, 43,162, 51, 37, 11, 51,182,155, 36, 67, 10, 10, 96,193,247, 32,109,185, 5, 43,227,140,182, 86, 90, 59,123, +186,250,224,225,243, 59, 79, 95,223,190,127, 87,220,187,197, 88,137,105, 3, 20, 29, 99,189,224,209,234,242,147, 53, 56, 84, 13, +161,123, 97, 88,175,181, 87,215,183,123,140, 77, 51,150, 99,204,184, 98,198,145,116,240, 76,198, 94, 1,109,216,154,118,169, 52, + 97, 9,181,221, 71,223, 9, 19,141, 80,105, 98,137, 37, 66,189, 84, 10, 1, 56,128,176, 29, 33, 27,231,112,139, 57,162, 4, 90, + 97,213,195, 42,102, 53,140,103, 29,183,225, 29, 21,231, 47, 51,236,200,118,115, 70,174, 30,212, 75,234, 69,141,113,159, 84, 35, + 73, 75,139,101,221,124,115,119,179,118, 88, 15, 20, 78,114, 2, 81, 72,243,180, 40,238,193,248, 78, 99, 23,162, 58, 67,255,166, + 56,159,206,195,199, 3,178,174,242,207, 50,236,212,218,247,143,136,220, 73, 52, 38,102, 73,201,125, 92,188, 77, 2, 78, 49, 87, +130,189,195, 42, 60, 4,131,113, 56,156,114,167,106,221,134, 20, 39, 32, 2,190, 36,175, 68, 73,124, 79,116,119,144, 97,201,147, +224,142,111, 92,105, 86, 66,137,151,153,252, 2, 34,208, 36,221, 2,137,169, 20,105,237, 9,171, 52, 87,152,219,171,239,106,154, + 6, 57, 34,192,124,196, 1,244,103,121,242,252, 40, 30,203, 87,218,134,240,123,125,206,147, 20,255, 24,182, 31,171, 83,186,169, +172,215,242,216, 9, 70,140,242, 15, 29, 81, 94,191, 5, 96,236, 90,118,155, 6,162,232,140,199, 99, 39, 77,157,244, 9, 10,109, + 72,165,150,242,168,170,118,133, 64,128,212, 47, 64,236, 16, 27,182,252, 2, 44,187,224, 7, 96,201, 15,176, 64,192, 55, 32,181, + 21, 84, 44,144,138, 4,148,135, 72,165, 16,151, 54,143,214, 77,236,216,227,225,222,107,167, 88, 80, 9,164,174,170, 72,150,103, +146, 51,247,220, 57,247,156, 19,244,239,255, 15,238,232, 14,166,163, 19, 27, 53,252, 95,152,206,211, 37,192, 15,162,206, 36, 14, + 51, 98,118,254,247,199,141, 63,193, 29, 22, 49, 78,156,100,120,234,200,147, 20, 28,212,130,231,233,133, 3, 67, 51,176,136, 80, + 62, 15,248, 18, 81, 20,137,206, 88,208, 83,121, 66,113,227, 40,209,209, 52,238,156,140, 17,101, 77,234, 7,151,187,116, 39,138, +167,162, 16,150,149,139,209,160, 35,164,155,216,248,216, 51,130,178, 9, 99, 64, 34, 4, 90,172, 98,144,127, 64,237,221,210, 0, + 75,129, 39, 85,144, 99,145, 68,221,184, 70, 41,147,101,161,132,222, 6,110,160, 67,169, 35, 11, 7, 87,185,141,166,144,202, 84, +202, 4,240,183, 12,155, 52,224, 86,206,132,202, 74, 22,242,214, 88, 73,150, 74, 98,196, 17,163, 37,233, 12,227,248,168,193, 4, +176,102, 0, 50,165, 4,182, 49, 25,169, 55,113, 48,197,224,192, 51, 81,168, 76,234,100,148,189,113,146,231, 99, 94, 0, 60, 31, + 42,117,248,179, 36, 62, 0,158,131,129, 76,166, 0,122,223, 99,170, 19,246,221,158,247,253,160,233,121,129,101, 90,120,162, 36, +209,204,100, 73,146,100,181,161, 11, 13,118,249,101,159,162,159,177,167, 44,236,195, 46, 14, 92, 40,186,255,130, 77,232, 5,222, +245,139, 43, 36, 75,199,178, 72,160,114, 90,164, 78,170, 90, 79, 56, 19, 80,255,226,116,174,204, 17,104,171,233,177, 42,172, 94, +212, 71, 99, 91, 32,100,240, 14,176, 66, 29,175, 83, 30, 47,187,173, 31,152, 13,133,186,253, 68,195, 26, 47, 86, 23,127,182, 93, + 88,240,133,202,210,254,225,254,217,211,213,237,250, 71, 88,137, 32,236,211,149, 56, 7,182,110,153, 54,252,180,234,205, 58,217, +209,132,240,187, 18,134,188, 60,127, 21, 56,248,129,223, 17,192, 29, 21, 26, 2, 43,218,205,196, 44, 69, 81, 44, 9, 96, 49, 37, + 68,114,103,104,120,102,114,102,253,195, 6,166,193, 72,121,228,119,225,104, 25, 41, 56,231,202,179,161,138,108, 83,110,188, 95, +223,113,107,203,115,203, 95,220,111,192,181,225,197,209,248, 27, 77,232,112,160,209,243,189,202,248, 84,163,189, 11,236, 1,222, + 40,111, 13, 9, 46,128, 25, 0, 42,193, 78,212,118,107, 23,166,206,215,118,119, 34,173, 90, 94,123,190, 60,215,104,187,125, 88, +129, 24,155, 75,240,229,129,175, 8, 28, 60,213, 73,116, 49, 99,169, 11,109, 12, 7, 76, 28, 71,194, 52,155, 94, 19, 74,129, 75, +103, 23,128, 3, 97, 14, 7,172, 96,239, 96,116,168,254,186,225, 66, 49,124,171, 27, 57,123,221,181,151,155,141,213,103,123,111, +182, 42, 97,208,122,254,142, 61,253,180,246,106,187,103, 99,211, 60,196, 84, 85, 93,109,118,239,239,119,238, 48,118,147,177, 77, +198,222, 74,227, 76,193,246, 9,183, 20,176, 55,160, 32,195,249,165,202,164, 50, 96, 71,250,210,228,142,105,230,164,137, 65, 2, +100,141, 72,161,189,169, 42,153, 19, 96, 2,226, 91,166, 81,202,219, 54,179,106,123,133, 8, 77,107,204, 36,134,193,136,140, 71, + 91, 47,110,175,220,189, 49,123,101,245,201,234,189,169, 7,143,221,135,213, 82,229, 90,241, 84, 27,205,132,121, 63, 68,211,132, + 14, 94,119, 11, 63, 82,227,197, 81, 32, 85, 45,212,167,197, 73, 52, 88, 68,165, 58,206,115,192,118,234,104,122,162,242,185,241, +149,200, 77,146, 84, 71,118, 37,177,206,160, 93,156,133, 18,248, 23,112,166,100, 74, 53, 51,180, 31, 31, 6, 71, 44, 53, 33, 75, +134, 4,126, 79,224,232,129, 35,187, 30,116,122,116,154, 44,193, 83,169, 36, 31,152, 75,167, 70,108,199,226, 67, 62, 16,149,242, +174,143,102,159,197, 66,209, 15,125, 84,194,164,142,109, 73,229,153,130,123, 34,210, 15,194,128,242,245,120,166,120,103,199,217, + 91,176,251, 30, 53,238,105, 80,199, 48,178,163, 63,196, 15,178, 96,251, 75, 0,206,174,101, 55,137, 40, 12,159, 57,115,165,204, + 48, 12, 32,180, 67,211,212, 40,144,168, 81, 55,198,244, 9,234,194,173, 11,223,192,173,111,226,198,173,235,190, 65, 19, 99,188, + 36,221, 20,141,177,105,172,212,218,212, 88, 13,148, 22,152, 50, 3,204,133,153,241,255, 15, 67, 29, 19, 99,140, 27, 66,200,228, +204, 97, 46,223,127,255, 62,225,255,220,246,191,224,120,218, 78,200,188, 18,132, 46,249, 61,187, 18,167,134, 84,255,229,164,233, +185,214,121,143, 60,199, 68,130,184,170,177,114,220,251,202,165, 38, 97, 85, 69, 3, 68, 5, 28,193, 81, 99,180, 25, 51,118,207, +120,226, 79, 18,132, 38,100, 65,202,250,168,176, 30, 94,116,227, 48,182, 32,180,177, 33, 83,240,194, 56, 96,222,117, 52,171,224, + 37,235, 99,115, 18,117,189, 17, 56, 84, 57, 94, 84, 51, 57,111,120, 6,102, 10, 34,196,156,146,183,253,243, 89,170, 47, 35,169, + 24, 94, 33, 37, 36,106,161,192,151,129, 16,198,156,196,104, 26, 49,208,102,140,242, 44,121, 2,107, 3,246,179,187, 41,240,216, +132, 78,177,175,142,195, 30, 2,102,190, 51,178,160,100, 4,198,215, 2, 49, 29,132,195,177, 40, 19,145, 70,163, 49, 4,230, 49, + 19,106,167,138, 4, 70, 0,183, 6, 0, 42,241,140, 70,117,202,158, 79,137, 17,255, 98,183, 3, 97,180,245,248,140, 4, 72,237, +139,106, 71,178, 12,192,129,219,112, 93, 14,121,202, 88,165, 90, 4,219,130, 68,186,176, 19, 26, 96,202,140,165, 26,167, 76,218, + 44, 64, 94, 11,166,125,129,253, 8,178,136, 61, 97,170,146,207,202, 26, 64,213, 82, 97, 21,204,231, 97,187, 5,255,125, 60,177, + 99, 86,225, 96,137, 17,244, 33,182, 62,190, 6,239, 85, 66,234, 75,202,230, 26, 66,184, 39,224,161,123,161,215,106,127, 42,169, + 37,128,188,190,115, 26, 49,106,184,190,115, 38,112,130, 53,177, 20, 65, 1,200, 91, 42, 46, 3,234, 85, 75, 70,235,251, 62, 90, + 43, 81,138, 81,233, 16,130, 83,136, 30,236,183, 7, 77,128,251, 59,181,181,158,115,106,168, 70,167,223, 6,171, 5, 17,155, 63, +182,192,174, 0, 76,148,115,149,238,240, 4,142, 84, 51, 11, 19,215,163,130, 16, 6, 65, 78,215, 94,237, 60,135,139, 0,126, 80, +103,216, 17,147,153, 28, 46, 35,168,166,177, 8,239,225,192,233,151, 13, 83,161,226,153,221, 1, 43,102,141,206,155, 7,205,181, +198,221,189,163, 93, 31,173, 46,191,190,118,111,227,197, 6,156,162, 81,173,235, 56,166, 52,184,106,214, 44,215, 46,235,165,147, + 65, 23, 59,154, 73,124,227,242, 77,123,100, 45, 26,139,123,199,251,102,201, 4, 12,242,167, 62,141, 99,184, 20,171,149,149,129, + 67, 43,122,165,168, 21,183, 63,111,191,220,125, 3,207,106, 73, 45,130,157, 61, 60, 57, 4,231,174,172, 27,148,138, 96,138,126, + 88,109,215,245,134,209, 16,169,140, 48, 17, 10,246, 95, 41, 40,133,142,213,129,139,105,187, 78, 62,171,215,205,198,251, 47,239, +242,154, 30,132, 28,236,164, 86,208, 58,129,133,210, 17,224, 44,139,242,125, 44,195,144,199,132, 60,217,220, 89,223,106, 61,186, +213,184,189, 84, 55,151, 11,199,182,131,141,162, 24, 10,146, 77, 23, 37,236,193,121,127, 70,200, 83, 56,186, 61,184,166,103, 33, + 14,244,167, 88, 51,188,110, 22,203,122,102,236,121, 18, 79, 12, 77, 86,100,158, 17, 23, 33,244,135, 33,135,140,193,209, 76, 31, + 34,201, 99,227,227, 77,169, 34,136,133,236,130,139, 33, 47,242,148,193, 39,143, 69,222, 88, 36,162, 77, 38, 15,107, 15,200, 7, +124,195, 12, 33, 31,120,195, 2, 54,222, 83, 8,103,235,213, 43,142, 55, 57,234,126,131, 21,123, 99,108, 75,239, 58, 61,207, 7, +204, 7, 15, 2,171,246, 62,130,252,148, 41,189, 79, 97, 3, 37,237, 18, 74, 42, 38, 18, 26, 28, 19,151,140,231,234,163,105,122, + 68,238, 98, 12,127, 46, 16,146,128, 82,152,252, 74,211,181,189, 40,230, 82,189, 29, 23,191,113,243,101,162,185,224, 93,196,198, +175, 80, 55, 40,250,165, 68,148,102,221,154,101,213, 89,163, 28, 43, 86,247,135,125, 3, 11, 60, 54,211, 9, 9,231,251,156,213, + 9, 18,249,167,138, 97,182,251,237, 56,201,200,179,204,123, 2,238,113,210, 10,153, 84, 16,102, 85,188,100, 20,246,143, 24,252, + 83, 0,214,174,166,167,137, 40,138,206, 71,223,155,233, 76,235, 88,104,139,130, 20, 2, 41, 98, 52,129, 64, 72,140,137, 43,163, +254, 3, 99, 98, 98,226,202,191,224,207,240, 71,184,214, 5, 27, 89,168, 44, 52, 36, 38,178, 49,209, 5, 31,242, 93, 10, 45,181, + 67,203,204,155,143, 62,239,125,111,166, 34,186, 52,108, 8,105, 74,166, 51, 61,247,220,251,206, 57, 23,243, 9,224,229, 93, 37, + 84,254, 43,184,203,223,169, 70,229,116,229, 66,230,123, 86,183, 88,236,241, 52,110, 62, 75,108, 85, 14,170,254,218,244,116, 1, +217,229,225,178, 56,254, 79, 3, 75,147, 34,121, 62, 23, 77,150,102, 85,237,135, 21,167, 55, 58, 17, 40, 37,252,253,247,220,141, + 64, 31,137,252, 29,161, 28, 64,216, 38,240, 52,119,164, 13, 36,221, 6,134, 49,228,106,255,108, 31,227,130,117, 49, 78, 80,203, +206,200,161,187,107, 17, 11,104, 38,238,117,195,105, 9,202,169,165,149, 27,240, 50,180,161,197,150,128,157, 17, 4, 90, 77,189, +213,194,186, 30,163, 2,221, 36,128,239, 40, 29,214, 51, 98,145,183,200,147, 71,177, 5,213,156, 60,112,118, 65, 20, 52, 30,137, +200, 70,177, 31, 53, 14,165,133, 3,111,190,230,121,226, 97,137,162, 0,153, 65, 8, 77, 60,116,198,184,119, 24,111, 1, 74, 77, +100, 31, 8,111, 28,192,231, 46, 44, 31,148, 34,193,135,247, 10, 98, 25,243, 12, 28, 86, 33,186, 2,127, 54, 13,124,101,140, 2, +121, 14, 95,221,179, 70,116,153,228,124, 22, 15,231, 42, 65,236,237,159,236,141,151,171,199, 39,117,184, 95, 10,210, 40,244,215, +217,120, 62,134,174,111, 47,196, 9, 21,209,141,128,121,162, 27, 74,154, 26, 77,168, 6,180,148, 29, 3,180, 29,181,235,102,198, + 48,168,229, 7, 29,184,162,153,241, 89,104,153,129,140,231,178, 54, 26, 20,116,114, 10,160, 76,115, 29,168,166,170, 50,228,148, +218, 93, 23, 96, 93, 16,106,185,145,134, 27,212, 24,204,193,215,123, 31,157,126, 60, 30, 30, 24, 61,114, 15,101,118, 28,124,136, + 66, 37, 37,131, 1,228,214, 47,252,185, 55,123,127,113,229, 13, 69,137,184, 41, 98, 67,112,146,141,147, 6, 33,107,147,162, 5, +185,144, 0,218,158, 75,102, 14,202,107,193,114,226, 8,104,122, 8,148,217, 34,134, 69, 76, 32,213, 7,205, 3,130, 13, 17,116, + 84,154, 72,134,192,249,129,220, 49, 52, 86, 30,107,184,205,133,169,249, 72, 83,150,191,188, 7, 40,156,171, 46,140, 15,141,190, + 93, 93, 42,228, 7,136, 74,214,107,107,112, 9, 69,167,236,250, 46, 99,190,136, 85, 84, 43,165,202, 94, 3,247,242,220,158,158, +251,113,184,221, 60,109,193, 21, 64, 3, 1, 8,158,207,230,197, 65,136,127,227,218,212,215,237,239, 35, 80,129, 66,175,254,243, +120,172, 92,129, 43,219,168,173,217,134, 21,246,152,158,136,191, 50,143,167, 7,151, 15, 62,125,222,111,212, 24,219,241,109,239, +204,175, 41, 12,167, 55,126,116,167, 88,120,245,224, 73,219, 39, 35,197,173,111,205, 22, 0,124, 23,250,156, 40,126,189,229,126, +108,251, 81,134,251,204,103,103,221, 40,100,207, 39,175, 0,213,176, 40,157,175, 20,117,138,137, 26, 5,155,230,105, 70, 90, 63, + 68,254, 41, 60,111,106,200,161, 92,114, 15,131, 85,197, 9, 84, 98,121,213, 1,220,203, 78,222, 80,244,189,102,171, 86,191,190, +203, 34,138, 57, 40, 40, 3,152, 48, 71, 31, 46,189,224,239,248,206, 98,115,242,229,204,135,185,149,187,171,149,167, 55, 31, 61, +155,184,181,217,105, 20,115, 78,196,163, 86,199, 85, 48,241, 73,166, 20,160,125,181,228,148,215,235,219,248,239,224, 78, 96,170, + 62,218, 74, 0, 54, 3, 20, 37, 51, 46,250, 12,220,224,142,103,170,194,254, 36, 37, 43, 80,135,120, 31,220, 37,150,196, 23, 44, + 62, 92,225,253, 33,206,111, 44,239, 37,150, 40, 53,149, 42,246,100, 94,165, 96, 90, 60, 57,109,198,210, 0, 37,217, 99, 94,245, +106,117,163,190, 41,166, 58,242,192,130, 11,245, 50, 90,181, 77, 98, 66, 69, 47,229, 75, 64,186, 89,232,159, 55,240,240,115, 51, + 25,158,172,205,139,165, 72,179,151,134,175,136,109, 11,189,100,113,181,250, 7,140,202,206, 73, 52, 76, 82, 91,255, 15,170,252, + 75, 0,210,174,156,183,137, 32, 10,123, 79,239,250,218,245,149, 40,241, 38, 8,145, 68, 65, 38, 8,129, 16, 5,135, 20, 34,148, + 34, 63, 3,137,146,130,142, 46,127,128,154,158,154, 38,226, 71, 80,128,148,138, 2, 69, 20, 78, 72,156,216,137,143,189,103,175, +225,189, 25, 95,208, 34,165,112, 20,219, 89,123,230,189,121,239,237,119,204,231, 51,255,153,220,255,153,170,240,212,188,160, 64, +176, 56,120,161, 9,157,132, 22,255, 61, 65,190, 89,188, 8,114,167, 51,144,110,142,163, 71, 57,235, 14,189, 47, 32, 66, 24, 40, + 84, 96, 19, 30,137,235,218,149, 53, 35, 97,139, 50, 81, 18, 91, 52,123,101,149,105,189,188,228, 67,247, 55, 99,247, 78, 25, 20, +240,208,208, 77,254, 39,126,158,151, 52,195,157,144,196,184,226,134,168, 72,200,189,226,220, 95,120,205,253,219, 15,221,192,206, + 43, 5,248, 63,176, 97,189,200, 65,190, 28, 26,101,224,226, 97,233, 34,114,179, 22, 42, 22, 21, 27, 98, 38,202, 16,183, 77,153, + 68, 42,142, 32, 37,164,119, 75,178,174, 41, 69,200, 22,178,204, 36, 61, 36, 4,201,163,139, 1, 62, 1,182, 73, 20,198, 77,163, + 82,200,171,246,216, 97, 30,221, 90, 6,241,135,247,180, 36,180,250, 99, 82,190,172, 85,148,117, 89,170,154,121, 67,167,138,152, + 30,188,124,241,254,221,219, 87,207,159,246,122, 87,221,254, 80, 65,244,136,192, 38,154, 40, 87,131,168,115,252, 56,136, 6,103, +201,150,162,111,132,132, 53, 59, 78,133,100,252,129,182,154,239, 58,120, 50,137, 51, 47,164,196,131,224, 84,226,148,220, 56, 55, +182,103, 67, 0,105, 82,161,111,247, 56,137, 88, 87,208,223,220,137, 60, 18, 65, 51,157,114,101, 42, 85,206,227,167,160, 81, 54, +151, 64,194,114,131,205,132,160,250, 83, 16,179, 8, 7, 42,134, 37,156, 13, 37, 88,253,238,240,226,205,254,235,111, 39,223,211, + 44,137, 82,210, 44, 47,147, 24,201, 98,240,146,136,132,112,213,144,238,239,172,108, 13,156, 62,101,249, 29,243,106, 78, 26,249, +131, 28, 19,101,224,246, 17, 16,131,123, 15,246,127, 15, 78, 55, 87,183,123,163,139,138, 94,133, 69,209, 20, 29, 85,159, 24,220, +175,168, 22,221,208,151, 36, 57,136,124,230,226, 43, 48,209,157, 52,206, 18, 21, 37, 71,144,165, 9,173, 24, 28, 36,144, 40, 21, + 89,113,252,177,200, 60, 77,242,170, 58,246, 6, 30,241, 29,223, 30,184, 3, 88,221,157,245, 54,100,127, 55,116,217,240,149, 66, +171,106, 53,172, 74, 1, 54,143, 7, 13,199,217,245,121,231,178, 99,213,215,116, 93,235,217,215,199,191,142,225,204,131,239,186, +172, 85,158, 61,222, 51,107,203, 39,167, 63,225,208,106,175,181, 55, 90, 27,171,181, 86,189, 82,133, 47,115,169,218,128,205,118, + 57,236, 71,232, 77, 97,194, 91, 5, 49,129,190, 4,109, 35,147,168, 59,186,130,210,117,232,141, 93,196, 17,208,161, 55, 26,162, +221, 4, 58,139, 65,195, 32,178,155,119, 26, 85,118,183,114,199,151,231,231, 78,224,199,241,118, 97,197, 50,205,166,166,149,100, + 1, 78, 5, 69,212,119,215,219, 25, 13,134, 89,207,142, 99, 77,146,145,213,142, 96, 35,209,144,245, 38, 52,134, 36,116, 9,148, +245,217, 78,189,244,168,213,188,219, 50,203, 5,209, 50, 85,171, 90,168,149,212,162, 46,162,240,156, 44, 48, 71, 51, 30,174, 34, + 35,162,115, 41,109, 28, 63,195, 74,168,130, 92, 43,106,107,117,227, 71,167,239,103, 36,159,214,186, 33, 83,184,197,186, 76,118, + 3,242,229,236,235,225,199,195, 79, 31,142,186, 29,123,179,214, 58, 26,125, 62,176,158,200, 66, 18,160,161, 93,128,126,167, 40, +222,139, 23, 70,178, 40, 78,211, 48,141,161, 47, 65, 3, 99, 40, 97,104, 18,162,187, 77,100, 84,234,118,224,196, 40,115, 73, 25, + 25,146,194,209, 83,212,208,175, 14, 22,228,222,173, 54,108, 87, 12,113, 94,217,207,241, 6,139, 52, 26,220,172,185,108, 38, 42, +240,215,109,202, 85,115,197, 70, 31,115, 58, 85,247,157,235, 37,208, 41,158, 40, 67,173,167, 88, 83,242, 14,241,195,136,176,156, +148, 88,181, 53, 23, 77,134,217,240, 30, 97, 0,184,207, 57,154, 83,149,212, 70,185,225, 48,123,116, 94,219, 79, 51, 59,157, 64, + 34,179,201,192,158,161, 56, 83,166,157,144, 78, 46,143,185,100,230,152, 30,191, 48,225,116,114, 76,253, 76, 12, 81,156, 41,220, +207, 82,223, 31, 1, 88,187,114,222, 38,130, 40,188,179,183,119,189,137,131, 19,146,128, 19,142, 24, 17, 2, 2, 20, 34, 26, 16, + 66, 28, 66, 52,252, 3, 10,132, 16, 8, 36,132,132,232,104, 41,105,248, 15,208,240, 19,104, 41,104,136, 16,132, 16, 33, 14, 67, + 78,199, 78,178,182,247,240,236,201,123,207,187,193, 18, 45,157, 37,219,205,211,204,187,230, 59,254, 79,126,255, 55,215, 75,125, + 92, 83, 49,151,100,220, 53, 3, 97, 25,195,153,245, 25,242,253,117,230,203,183, 45, 44,255,175,184,251, 85,254,108, 77, 27, 63, +104,142, 85, 19, 90, 96,145, 60, 24, 33, 26,210, 95,118, 89,127,189,193,224, 81,145,239, 51, 10, 39,176,168,165, 23,187, 81, 64, +252,180, 4, 50, 8,109,240,147, 46,250,151,167, 61, 31,200,172,150,231,164,183, 4, 33,177,241,250,206, 10, 92,108, 47,114, 85, + 89,245,208,198, 37, 38,206, 2,185, 15,136,153, 66, 39,100,156,202,222, 97,102, 18, 5, 87,150, 36,150,225, 40, 33,183, 22, 13, +197, 42,224,214, 27, 65, 42,112, 47,227, 20,237,147,209,164, 5,107, 54,138,237,137, 12,154,243, 27,215, 47,191,126,245,242,246, +157,123, 51,213,234,194,194,151,141, 6,170, 11,225, 82, 69, 79,160, 69,130, 27,205,185, 8,253,162,174, 74,134, 33,115, 30, 59, + 78,124,247,214,221,135, 15,158,236,236,116, 70, 71,199, 32,184,139, 75, 95,116, 53,181,160,132,104,130, 89, 80,112,163,143,104, + 7,129, 7, 33, 20, 24,175, 11, 53,135, 13, 15, 21, 93,199,197, 37, 78, 42,133,248,120,140,142,225, 65,128, 90,127, 48, 76,147, +196,134,160, 68,154, 33,233, 66, 36,106,146, 65,110, 27,126, 27, 13,172,113, 75,163,203,150,219,117,224, 84,181, 60, 4, 12, 16, + 25,152,141, 88, 99, 14,239, 4, 84,194,201,138, 25,167, 17, 67, 53, 85, 85, 71,234, 16, 46,124, 3, 68, 34, 33, 50, 93,204, 64, +197, 66,172, 48,249, 99,237, 83, 24,241, 98, 97,224, 88,229, 56,252,102,187,211,180, 61,155,135, 30,244,233, 60,116, 33,195, 4, +100,109, 60, 96, 88,221,192,131,243,110, 42,134,174, 24, 3,186, 69,230,218, 62, 36, 80,200,191,245,118,189,227,182,182,218,155, +112,242, 35, 84, 66, 76,160, 18,107, 10,105, 77, 39,136,134, 34,165,226,224,226,201,171,136,232, 71, 61, 55,244, 21, 52,212,162, +165, 89, 62,162,200, 35, 36,213, 11,233,185,153, 11,123,138, 37, 30, 5, 72,221,101,108,223,208, 62,215,247, 6,205,193,179,213, + 51,227,165,177,179, 71,230,126, 53,151, 75, 70,113,203,181, 77,221,156, 26, 61,220,236,108, 79, 12,239,111,116, 26,231,103, 47, + 45,253, 94, 20,101, 41, 65, 34, 50, 90,180,107,178,234, 67,142, 34, 62,203,186,189,254,181,182,184,178, 94,131,134, 26, 46,238, +233,195,167,230,127,124,248,177,241,253,103,189,102,123,173,205, 22, 84, 47,182,229,108, 83,235,200,102,171,179,171,219,107,211, + 19, 71, 57, 15, 52,136, 30,106,163, 35,146, 86,200,149,105,119,101, 77, 42,229,131,189, 55, 91, 93, 96,215, 78, 20, 62,172,110, +214,125,223, 14,184, 41,153, 80,205, 97,248,244,163,168,205,187,203,142,123,121, 66, 88,234,124,123,191,182,241,166,182, 12,127, + 24,179, 44, 89, 76,187, 49,251,102,243, 38,247, 86,218,157,118,200,203,162,120,127,174, 58, 61,110, 76,150,213,201, 61,133,242, +128, 6,129,134, 81, 37,243,119,237,249,138,244,166, 97,252,128, 74, 6,138, 44,193, 81, 52, 53,217, 82,148,189,165,194,244,161, +145,182,195, 63,175, 54,177,215,143,138,107, 62, 52,239,201,232,224,184,156,136, 11,205,229,249,198,206,211,103,143,159, 63,122, + 49,103, 94,217,146,107,111,221,119, 55,167, 46, 76,237,175,172, 52, 54, 18,194,176,147,190, 6, 17,174, 19,116,169,134,132, 24, +166, 9,196,217, 9, 92,212,224,139,131,145,210,120,195,110,194, 76,131, 23,146,176, 50, 49, 57,163,226,164, 69, 2,153,117, 4, +161,155, 97, 28,103, 76,221,204,118,148,245,203,167, 83,239,153, 26, 10, 10, 76, 66,106, 24, 50,134, 16,159,157,231,119,135, 59, +112,174, 38,135, 39,219,112,102, 8,202, 65, 6,160, 73,254,104,151, 77,144, 80,177,160, 43, 71,227, 95,145, 28,104, 34, 68,208, + 67,187, 32,102,162, 6,189, 77,130, 72,171, 24, 18,230, 11,221, 36,205,120, 86,121,102,239, 77, 2,140,229, 15,218,164, 9,132, + 29, 89,165,124,192,118, 91, 36,233, 30,247, 28,117,122,137, 48,217, 5,143,167,100,152,158, 17,248,255,213, 31, 72,255, 8,192, +217,181,180, 54, 17, 69,225,153,201,244,206,100, 38,175, 54, 73,155, 62,172,210, 46, 68,164,136, 40, 86, 91, 16,235,171,116,171, +155,138, 5, 21,252, 1,226,198, 86, 10, 82,172,160, 86,220,248, 27,220, 11, 86, 20, 4,139,219, 34,138, 82,211,151,109,218,216, + 87,250,176, 73,218,100,222, 19,207,185,119,210,135,232,198, 77, 8,116,146, 78,102,230,158,251,157,243,157,243,125,255, 25,223, +249,127, 56,239, 9,123, 34,251,222,106,212, 95,177,190, 39,215,190, 59, 43,189,251,215,242, 54, 32,240,229, 16,143, 52, 61,199, +108,105, 4,193,155,208, 96,196,132,195,166,126, 89, 9,131,130, 24, 68,207,180, 47,194, 41,255, 39,129,178,166,251,115, 12,108, +148, 52,118,206,162,172, 69,204,197, 2,113, 34,202, 58, 34,184, 29, 3, 17,220, 66,227,161,154, 34, 64, 63, 74, 36, 1,178, 67, + 80,142,217,150,187,171, 91, 15, 96, 86,244,151,112, 14, 3,235,140,126, 73,210,121, 72,120,241, 38, 19, 34,134, 20, 18,196,230, +112, 81,146, 81,170, 9,246, 96, 3,141,210, 56, 17, 69,180, 5, 63, 28, 16, 32, 17, 85,174, 10, 34, 74,106,168,142, 12,244,223, + 31, 30,126,253,246,205,240,249,142,142,174,206,206,201,201,241,133,165, 21, 1,123,251,124, 84,234, 13, 35, 53,173,227,251,116, +195,222,202, 27, 55,186,187,123,186,175, 61,126,254,244,209,208,208,135,145,145,169, 31,211,182,165,117,180,181,222,234,185,198, +217,230,207,116, 58, 18, 9, 61, 25, 24,236,186,120,105,108,236, 91, 65,211,164, 10,241,225,189,187, 15,250,122, 57,199, 72, 78, + 36, 67, 42,241,188, 8, 75, 28, 65,214, 12,246, 24,188,173,176,158, 81,227, 69,179, 32, 38, 66,120,210, 45,131, 10,231,243,140, +151,134, 69, 24, 11,196,242, 58,132,123,116,224, 43, 26,133,198,104,211, 90, 46, 3,231, 5, 24,156, 47,211, 22,138, 28,160,182, +233, 16,158,173,171,237,221,233, 76, 10,155,172,233,252, 20,128,146, 88,184, 26, 94,233,253,226,240, 61,199,165, 50,179, 91,219, +185, 10,145, 68, 3,113, 42,186,109, 50,201,126,248,126,148,196,227,113, 38, 5, 30, 1, 52,176,183,117,205, 49, 32, 4,155,182, + 85, 27,169, 93,207,175,162, 90,128, 63, 44, 19, 63, 44, 78,139,142,167, 1,212,132,227, 67,106, 68,183,182, 96, 37,147, 10, 9, +226,254,244,226, 56,108, 3,186,165,159,104, 62,181,176, 49, 7, 33,163,104, 98,251,150, 76,148, 11,199,206, 37,231,191,103, 11, +155,139,107,105,147, 85,122, 57, 62,167,109, 82,114, 30, 18,154,226,252,234,124,162,178,246,203,236, 87,120, 78,178,133, 44,124, +231,218,246, 90,193,208,224,226,152,142,253,105, 98,244, 64,188, 17,178, 4, 88,146,137, 72,117, 75,235,217,185,212,148, 97, 25, + 76, 75, 69, 33, 74,208, 31,146,136, 2,207, 85,219,145,211, 99,115,201,165,236, 50,205,123,152,156, 56,118,175, 67,176,160, 63, + 86,155,207,164,117,219, 90,220, 88,130,220, 37,172, 70, 26,226,141, 40,108, 75, 47,100, 93, 52, 1, 25,131, 95,194,193,108,212, + 97, 54,114, 2,103, 43,129,202, 88,201, 62,217, 94,189,178,188,158,213,140, 77,200, 28, 93, 94,179,177, 91,182,232,152,155,122, + 81,179,220,203,245,137, 90, 85,106, 73,168, 65,128, 7, 14, 87,163,194,201,248, 98,138,242,126, 38, 51,147,203, 42,190,210,205, +195, 13,207, 58,143,158,105,130,156, 66,174, 10,201,168,255, 12, 64, 6,213,129,217,172, 39,239,185, 53, 83,106,145, 9,204, 65, + 54, 8, 73,100, 64, 34, 97, 69,172, 9, 41,245,135,162,156, 74, 62,142,206,234,148,191,241,185, 34, 17, 14,174,195,213,182,173, + 0,239,127,151,250, 28,115,155,111,247, 95, 31,236,123,113,167,185,247, 85,246,229,172, 61,119, 37,113, 60, 83,252,149,215, 10, + 46, 85,130,100,244, 41,188,162, 69, 53,186,166, 56,176, 86,240,242,226,142,237, 26,244,128,130,169, 37,170,234,242,216,133,226, + 6,229, 32, 85,185, 40,178,201, 91, 22, 51, 72, 5,129,207,209, 58,134, 87,142,103,182,209, 46,245,231,115,153,215, 52, 50, 82, + 6, 45, 94,194,175,144,116,175,126,226,201,199, 64,220,205, 1, 18,199,134, 26, 44,139,215, 71,235,225,131,134,101,122,229,120, + 10, 95, 28, 44, 97,122,166,121, 20, 42, 32, 1,230,141,222, 9, 30,127,139,131, 87,216, 1,196, 10, 12,229,160, 78, 43, 60,212, +118,133, 41,101,120, 69, 33,183, 76,223, 66,106,178,165,229,177,167,205, 41,253, 97,121, 90, 78, 53,184,168, 26, 21,125,196,116, +116, 70, 42,236,139,238, 52,167,249, 45, 0,105,215,242,211, 68, 28,132,187,175,110,183,187,219,165,143, 32,149,130, 16,208, 72, + 12, 42, 33, 18,245, 34, 32, 70,241,113, 50,122,225,100, 60,249, 8, 68,188,105, 60,152,104, 34,122,241,194,159,224,149,120, 48, + 38, 30, 37,162, 72, 66,124,159,136, 81, 81, 35,150,176,180,108,187,191,118,183,219,117,102,182, 69,144,163,215, 77,147,118,183, + 59, 51,223,252,230,155,239,251,223,252, 30, 36,119, 5,138, 55, 82, 89, 42,155, 85,192,184,205, 25,253, 95,132, 78, 35, 12, 94, + 14, 41, 17, 94, 47,227, 42, 41,191,126, 61, 84,199,236,245,210, 20,152,244, 2, 50, 14,254, 61,158, 56, 24,124, 82, 75, 65,223, + 26, 72, 40,173,215, 9, 63, 20,156,186,113, 94,221,180,132, 11,109,221,210,173,229,110,110, 75, 1, 2, 12,192, 92, 91, 37,129, +233,186, 61,174,223,104,164,179,249, 95,129,112, 82,109, 99,130,216, 58,104,245,199, 9,244, 49,156,190, 16,119,203, 23,112,251, +199,143,235,178,162,225,192,148,167, 61, 84,145,134,221, 72, 56, 65,177, 57,158, 28,156, 81,123, 0,229,218,101, 30,176, 15,128, +122, 69,174,170, 74,200, 41, 21,134,143, 15, 52,103,210,247, 38, 30,204,205,191,155,121, 53,123,168,239,224,224,145,254,143,159, +222, 88,107,102, 88,146,170, 85,161, 66,179, 30, 40, 54,142,235, 47,175, 20,206,157, 57, 53, 54, 58,126,119,226,254,212,147,103, +208, 81, 71, 20, 81, 18,253, 84, 66, 29,189,114,121, 96,240, 68,123,199,206,169,199, 79,251,122,251, 46, 93,187,222,190,171,107, +105,241,219,235,249,183,137,134,228,248,216,104, 75, 91,107, 92,147,167,167,159,151,113, 41, 16, 33,138, 16,152,156, 19, 29, 19, +210, 14,114,112, 28,223,119,185,136,168, 58,110,153,136, 70, 53,250, 47, 46, 14, 34,129,193,133, 20, 67,146, 70,104,213,228, 97, + 28, 66,152,121, 81, 57,134,218,156,142, 29,204, 88, 92,244, 29,193, 46,229, 75,246, 51,115,138, 56,120,230, 67,186, 28, 67, 7, + 90, 49,108, 57, 22, 32, 47,192,206,165,114, 17,174,192, 3,147,194, 18, 29,220,121,221, 59,246,114,156,176,198,114,212, 71,121, + 36,165,128, 99, 12, 37, 28, 65,195, 82, 98, 74,192,251,221,160,198, 85, 89, 63,127,113,100,238,229, 44,148, 76,228,158,186,142, + 22,213,237, 50,148,191,114, 58,217,156, 47,172, 0,242,221, 22,111,206,219,104,220,129, 13, 10,249, 88,194,215,193,239, 73,234, + 88, 87, 82,177, 70, 8, 91, 40, 15,191,204,159, 56, 6,193,150,139, 30, 7,134,174,215,209,212, 97,163,136, 96,216, 33, 14, 79, +111,231, 62, 69,138,124, 55,127,144,239, 46,110, 31, 66, 55,153,212,227, 69,167, 4,245, 38,207,114,112,227, 75,185,236,194,194, +251, 98,137, 65,246,129,231,131, 38,200,118, 14,146, 53,244, 49, 78,213,205,230,150, 1,158,227, 90,130, 20,214, 85, 3, 85,230, +229,232,106,209,130,103, 11, 21,162,232, 22,144, 49,197, 11,201, 88, 98,141, 21,172, 18,160,251, 44,137,195, 8,109, 77,237, 75, +230,111, 0,155,128, 31, 49,120,189,146, 72,227,248,168,210,176,163, 90,233, 58,214,108,152, 5,168, 46,174,235, 21, 42,206,226, + 90, 97,209,178, 76,219, 94, 97,120,112, 49,178,187,101,127, 90, 75,104, 34, 99, 94, 90,143,115,130,200, 92,167, 65, 84, 62,254, + 48, 47,244,100, 30,158,238, 62,123,184, 45,189, 93,147, 99, 34, 30, 29, 18,199, 70,172,233,241,109, 32,147, 5, 1, 41, 32,103, + 0,128,130, 42, 3,114,151, 12, 53,156,130,122,208,146, 12,181,166, 62,188, 88,248,178,108, 1,218,135, 52, 13,193,104,218, 6, +243,188,161,158,129,182,120,230,206,204,163,225,254,147,195, 7,134,110, 79, 78,222,234,188,122,243,235,141,164, 22,235, 51, 50, + 89, 27,217,253, 14, 49,179, 16,191, 35, 57,160,130, 30, 35, 94, 37, 44,171,144, 97,161,224,185, 53,137,118, 31,250,102, 72,245, +171, 44, 31,140, 31,109,136, 25, 86,164, 12, 30, 80,200, 81,137,132, 58, 36, 66, 35, 53,130,164,175,202,170, 22,137,176, 82, 73, +226,197, 61,153, 61, 57,203,164, 93,214,154, 64, 47, 36,247, 32,231, 24, 81,131,149,109, 67, 49,112, 30,190,126,219,104,196, 87, +101, 21, 22,236, 52,209, 98, 9,130,106,200, 56, 9, 53, 85, 44, 91,180,148, 80,221,232,199,244,215, 72, 2,194, 72, 20,143,118, + 15, 65, 13, 13,104,240,117,106, 62, 2,156, 42,157, 16,214, 53,203,124, 61, 98,144,155,185, 75,188,143,128, 14, 90, 35,231,111, +112,203,224, 2, 60, 0, 97, 5,239,213,250,122,110,136,175,111, 3,213,147,253, 31, 1, 72,187,158,159,166,225, 40,222,118,221, +218,110, 93, 7, 99, 3, 7,168, 35, 1, 61, 24,163, 96, 60,112, 83, 19, 61,120, 81, 76,188,121, 86, 99, 36,222, 77,140,241, 47, +144,139, 7,163, 71, 98,162,241,230, 69, 61, 24, 19, 18, 2,152,120, 81, 8,200,175, 0, 3, 54,112,172,108, 93,215,118,237,183, +190,247,190,131, 96,226,205, 11,151,166, 25,109,250,125,239,243,222,251,188,207, 71,254,255,177, 42,201,126, 50, 55,244,196,127, +169,183,139,255,238,223,224,125,100, 29,214,148,132,136, 33,118,184, 2, 46,230, 29, 49,214, 16, 15, 57, 49,137,104,210, 70,219, + 16,190,205, 68,242,225,168, 27,227,193,179,152,214,158,200,165,211, 48,157, 74, 36,123, 26,240,109,130, 16,151, 60,249, 98, 20, + 3,196, 7, 87,136,124,253,151, 51, 96,120,100,166, 34, 30,200, 78,162,109, 8,122,198,187,180, 6,134,241, 13, 2, 90,201, 44, +228, 59,251,215,118, 87, 67,242,107,245, 57, 41, 8, 59, 18,126,200,142, 40, 18, 75,129,196,163, 35, 41,100, 39, 84, 56, 30, 33, +149, 79,200,209,246, 14,228,162,209,205,142, 80, 15,170, 56,201,188, 85,133,116, 63,128,242,183,111,142,192,197,203, 87, 46,189, + 25, 31,135, 7,235,201,101, 45,107,247,249,216,179,209,135,247, 31, 61,184,243,226,229,171,205,173,114, 40, 40,136, 75, 68,185, + 14,176,173, 90, 59,119,230,236,147,199, 79,223,189,127,251,249,203,215,118, 35, 30,141,224,108,212,107, 50,148,231,142, 39,165, +152,114,172,179,219,208, 53,145,121, 77,171, 34,163,156,124, 0,181,130,174, 6,229,210,122, 79,111,166,110,253, 78, 37,177,194, +128,127, 12,238,162, 70, 23,186,176,210, 9, 9,229,152, 16, 85,133,170, 21,216, 94,149, 43,241,225,204, 62, 8, 91,219,196, 98, +232,186, 13, 17,149, 49, 80,137, 23,146,110,189, 81,203,182,231, 74,149, 77,203,173,122,126,204,136,183,153,246, 30, 30, 88,252, +170,177,192,199, 49, 6, 42,136,161,130,163, 43, 57, 2,138,246,217, 90, 52,225,250, 13, 37, 18, 59, 92,130, 71,221, 20,198,178, + 70,219, 74,113,137,183, 35, 3, 34, 27,196,225,168,135, 68, 13,151, 88, 20, 48,191,172,192, 25, 27,204, 15,253, 92,255,177, 82, +252,181, 52, 54, 15,111, 19,210, 76, 66, 51, 6, 79, 95,152, 90,152,132,252,122,190,239,226,236,198, 44,224, 98, 72,178, 0,136, +180,168,230,133, 46, 45, 91, 69, 80,105,144,161,189,215,190, 85,129, 74, 8,155,233,204,255,182, 56, 5, 40,158, 83,229,250,115, + 3, 59,102, 17,242,141,174,104, 52, 58, 11,211,201, 14,199,109, 44,151, 86, 11,229,109,172, 81,136, 2,197,181, 77,160,204, 41, +154,174,235, 57,149,208,116,124, 63, 66, 86,218,105,221,216,183, 45, 27,144,169, 8,225,190,228,120, 46, 60, 87, 91, 34, 5, 81, +222,180,171, 97, 68, 66, 55, 71,230,236,163,100,141, 32, 57, 82, 54,149, 85,100,117,163, 92,240,253,166, 97,164, 0, 53,171, 49, + 93,139,153, 39,114,125,197,221,109, 72, 27,112,248, 23, 10,243,183,134, 71, 22,183,150,230, 54,230, 18, 74, 92,143, 27,158,103, +225,251,141,168,125, 70, 32,244,180,119, 13,157,188,209,155, 28, 92, 75,127, 47,236, 76,174,149, 38, 54,253,229, 74, 75,244,117, +187,102,159,234,200, 47, 20,119,218, 81,146, 16,208, 61,228,193, 32,147,145, 95,223, 27, 78,247, 27,200,112,193,158, 21,195,191, + 62, 58,156,161,182, 1,162,137, 64, 66,225, 53, 40, 30,169,145,142,118, 29, 98,139,120, 32,241,166,124, 68,210, 84, 33,103, 8, +221,153,181, 79,115, 51, 11, 91,138,170,194, 87,228,161, 37,135,237,251,141,122,179,241, 97,230,227,128,158, 55,133,202,232,213, +187,194,132,160, 11,153,206,148,188,227,172, 92, 63,126, 13, 78,145,195,184, 9, 31, 25,146, 96,194,100, 70,220,128, 32,110,122, +251, 77, 76,135, 62,149,187,248, 85, 16, 83,140,117,165,115,155,149, 45,194,251, 76,100,173,110,110, 92, 81,242,153,252,108, 97, +150, 52,142, 15,212,106, 14,120, 28, 62,223,254,134,194, 61,240, 86,118, 87,155, 45, 46, 59,141,214, 25,141,255, 69,142,221, 68, + 53,170,229,210, 61,181,109,139, 70, 50, 2, 13,143, 5,139,246,245,196, 86, 31,133,219,193, 98, 85, 86,169,149,201, 30,190,229, +249,160,107, 41, 8,247,212,206, 33, 47, 9,137,155, 36,251,211,139,211,156,204, 77,216, 8, 95, 93,192, 91,248,232, 63,101,192, +215, 85,119,170,240,187,166, 93, 38,142, 6, 22, 31,212,147,105,105,221, 28,238, 24,113,131, 86,106, 58, 64, 76, 67, 87, 6,244, +159,226,215,217, 17,123, 38,186,243,143, 0,156, 93,219,107,211,112, 20, 78,154,164,205,173, 77, 91,186, 91,101, 43, 78,145,213, + 61,120,163, 40, 34, 27,226,188,224,196,127,194, 63,100, 47,162, 8, 42, 40, 40,190,249,162,224,133,233, 94, 28,226,152, 47, 62, +137, 56,134,224,132,137, 91, 59,183, 98,183,118, 77,219,180, 77,155,180,241,156,147,164, 19,246,230, 75,161, 16,146, 38,205,239, +252,190,115,206,119,190,239,127,240, 59,187, 79,177,221,217,163,207,239,171,240,251,223,124,143, 86,206, 7,233, 52, 44,205, 8, + 26, 27,107,195,173, 49, 77,234, 61,246, 84, 52,123, 72, 63, 64, 18, 4, 33,142,145, 5, 70, 20, 80, 87, 69, 86, 5, 45, 4, 25, + 33,206, 82,211, 92, 27, 2, 45,100,124,243, 68,211, 96,123,181,122,183,199, 75,236, 26, 34,175, 8,182,231,121,184, 55, 0, 27, +150, 53, 52,249, 35,175,122,111,138,138,142,128,213,238, 16,133, 69,224,120, 11,123,242,108,165, 94,166,135, 27, 96,124, 45, 62, +108,109, 3, 34,101, 93,114, 33,235,139,163, 16, 86,103,152,152, 38, 75,146, 64,234,149, 88, 49,162,233, 63,135,166, 52,145,125, +168, 72,108, 88,229, 21,137, 83, 69,116,182,163, 9, 79,136,239,194,149, 11,151,175, 78, 95, 91,254,186,244,236,197,107,164,129, +144, 53, 73,126,167,242,115, 53,123,126,242,226,225,131,233,149, 31,171,186,174,135,130,128,218,172,174,109, 77,156,201,220,191, +125,115,113,113,225,222,163,199, 8,169,120, 1,155, 50, 29,167,101,117, 43,134,153, 74, 14,167,199,198,231,231,223,189, 95,248, +216,172, 55, 70, 83,131, 27,185, 95,115,115,111,224,106, 1,206, 54, 42,250,238, 78,225,213,236,236,250,198,182,101,115,173, 22, + 90,117, 3,100,178,108,200, 33, 0, 74, 59,144,222,227,124,178,217, 65, 54, 63,122, 31,119, 92,224, 65, 8,222,115,156,233,146, + 89,172, 87,152,164,182, 80,221,172,187,253,126,216, 41,169,114,210,130, 40, 79, 7,119,130, 60,198, 77, 27, 13,117, 81,164,129, + 92,195, 24,148,120,179, 77, 77,142,163,137,146,133,188, 96,215, 29, 13,226, 30, 60,173,146, 94, 4,196, 61,220,151,210, 27, 58, + 44,120,139, 36,151,109,172,179, 90, 17, 41,170, 73,145,114,189, 12, 40, 24,128, 12, 18,144, 56, 78, 10, 41, 2, 36, 4,205,106, +185,182,139,226,218,172, 19, 87, 19,219,149, 60, 97, 7, 14, 48, 93,211, 52, 68, 81,137, 40, 17,145, 23,189,177, 17,248,111, 56, + 30,192, 50,121,221, 53,176,245, 29,148,162, 74,220, 68,181, 12, 22,221,141,109, 43, 38, 71,221,146,238, 86,121,203, 34, 78, 78, + 88, 14, 91, 22,252, 66, 38,213,119,144,135,109,208,233,106,138, 86,208,113,128,126, 40,145,204,140,101,178,127, 54, 84, 81,134, +203, 2, 24,207,109,163, 71,235,120, 42,189, 94,200,186, 12, 43, 41,168, 84,205, 90,127,100, 0, 93, 35, 2,206,161,228,145,146, + 81,134, 0, 4,155, 4,132, 25, 3,133,122,112, 93, 67,240,202,239,230, 91,182, 85,107, 84,225,133,135,128,114,244, 64,122,179, +148,223,169,149, 54, 75, 91,154,170,169, 18,228, 85, 77,155,100,126, 97, 21,159,148,248,196,244, 8,106, 70,198,130, 90, 50, 50, + 54, 20,205, 36,212,201, 99,167,238, 62,125, 50,115,253,236,183,207,203, 95,114,197, 27, 19,167,203,213,182,137,141,150, 54, 60, +142, 19,163, 67,233, 75,105, 41, 29,103, 20,142, 9,161,188, 31, 42, 9,243,110,131, 44,224, 17,160,112,242, 8,189, 89, 56, 28, +219,192,128, 30, 20,224, 81,195,171, 43,132, 68,129, 87, 69, 86,147,152, 84,130, 73,245, 23, 62,124,127,185,176,226,208,120, 5, +102,171, 88,123,178, 98,252, 72,169,141, 1, 0, 18,238,183,107,159, 30,222,122,176,244, 60,187,182,250,123,106,112,234, 78,110, +230,220,192,113, 53,192, 26,216,162, 64, 62, 25,124,138, 33,153, 74,112, 40,156,105,218,109, 49, 40,193,182,106,180,234, 54, 89, +121, 96,175, 10, 64, 27,238,214, 6, 41,176,203, 49, 37, 10,233, 78,135, 56, 14, 5,200,114, 28,223,231,211, 21, 1, 38, 61, 1, +154, 51,183, 90, 88, 96,196,184,130, 19, 27,254,112,235,158,224,172,103,145,138, 6,138,197, 90,145,241,116,194,240, 29,137, 72, +154,141,132,225,142,219, 79,234, 73,128,209, 75,220,237, 21,191, 59,100,225, 68,140,199,128, 87, 80, 32, 68,228, 96, 97,199,244, + 9,239, 84,177,241, 8, 58, 24,242, 97,141,144,162,120, 39, 10,183,105, 26,112, 18, 76,151,233,114,190,115, 72,175, 1, 28,248, +167,195,232, 1,203,174, 55,200,229,247, 5, 60, 34, 61,158,255,175, 0,148, 93,203,107, 19, 65, 24,159,221,205,206,100, 51,102, +179,105,154,182,150, 90,170,130, 10, 85, 65, 65,188, 41,234,217,139,130, 21, 4, 81,161,244, 15,208, 83, 47, 94,196,179, 55, 79, + 30, 68,252, 11,172,130,224, 77,188,212, 23,130,158,108,141,212,119, 95, 73, 54,187,217,157,221,201,174,223, 55,155, 71,149, 34, + 8, 33,228,144, 77, 54,155,157,153,239,247,205,239,241,127,252, 72, 78,185,162,150, 39,127,133,172, 26,100, 11,229,112,187,201, +189,247, 90,223,210, 35,234, 86,249, 6,140, 58,212,172,234,221, 93,120,178,181,161,141, 6,230,153, 38, 44,147,170,102,125, 24, +170,153, 5,152,229, 25,210,215,154,114,179, 37, 93, 45,235, 95,170, 36, 81,100, 41,169,107,154,100,206,253,136, 18,176,249, 14, +227, 25, 89,240,218,192, 91, 24,109, 66,243, 37, 79, 52,179,139, 88, 46, 12,213,219,155,138,249, 66, 80,209,131,253,129,200, 32, + 57, 12,237,213,254,165,198, 85, 10,218,180, 43,230, 35,186, 73, 13,184, 3,166, 70, 43,188,196,189, 40, 74,115, 68, 17, 7,160, + 16, 67,171,244, 60,211,113,151, 80, 89,206, 40, 72,130, 40, 69, 68,169,140, 83, 17, 68, 38, 51,170,206,208,218,198,166, 16,210, + 48, 77,197,230, 68,144, 22, 75,113,236,200,129,185,217, 57,198,172,133,133,167, 47, 94,191,161, 6, 61,115,250,212,204,249,243, +139, 47, 23,111,222,186, 29,202,152, 82, 83,185, 63,198, 57,244,251, 79,124, 95, 88,140,237,157,156,168,125,253,134,109, 16,211, +112,138,220, 48, 18, 41, 5,165, 84, 68,157, 32, 4, 4,172, 5,161, 76,240,236, 50, 86, 32, 34, 33,169,220,181,177,120,128,251, +214, 76, 98, 47, 14, 93,101,133, 45, 59, 73, 95,169,221,231,162,162,216,154, 97, 29,156,116,254,216,139, 81,188, 14,135, 87,220, +112, 19,254, 9, 10, 64,197, 4,144,128, 18, 51, 24,165,217,134,103,182, 27, 93,182,202,110, 80,135,226,221,230, 14,207,243,149, +245, 21,180,165,213,153,129, 84, 31,230,161, 90,149,156, 56,120,230,249,251,103,197,130,221, 10,176,125, 49, 98,143,192,145,117, +127, 3, 64,116, 61,168,219,121, 7,144, 28,148,177, 1, 64, 1,106,185,200,155,150,147,163,187, 97,150, 10,164,175,230, 74,173, + 98, 87, 83,140,200,176,106, 63, 63,193, 7,195, 82,177,230,174, 14, 23,171,240,206,118,232, 41,211,177, 68, 79,117,228,164, 26, +180,128, 94, 49, 18, 78,137,211, 29,109,225,193, 42,197,114,152, 98,229, 20, 74, 20, 87,208, 8,138, 95,101, 92,172,181,195, 32, +111,154, 65, 20,194,225, 83,163, 83, 75, 63, 62,162, 98, 86,203,149,237,138,219,118, 67,108, 88,117, 42,246, 48,103,214,151,245, +239,251,199,247,173, 53, 87,225,132, 97, 38, 26,117,198,154, 42,108,182,238, 53,213, 64, 36,147,149,137, 80, 10, 76,214,182,203, + 81, 36,224, 47,203,226,182,212,221, 8, 95,129, 19, 36, 38,202, 14,239,218,104,173, 21, 25,255,222,248,165, 8, 5, 68, 17, 91, + 17, 14,134, 29,121,173, 90,157,190,115,156, 52, 91, 68,248, 68,198,164, 17, 18,215, 39, 95, 55,200,236, 13, 50, 50,253,224,202, +165,203,247, 31, 79,151,121,153,210, 49,110, 13,197,226,250,185, 11,251, 46, 30, 37,162, 70,178, 93, 91, 25, 1,252,193, 71,140, +124, 74,124,192,130, 31, 41, 97,115,156,116, 83, 27,244,222,208, 52,149,196, 35,111, 16,187, 64,118, 58,240,188,252,240,213,189, + 39,239, 12,150, 43,193, 15,134,107,134,196, 92,184,163,224,240, 61,203, 13, 86, 54,249,226,234,231, 71, 43, 31,226,165,245,249, +147,119,247,179, 67, 86,169, 49,243,246,236,252,225,171, 2, 80, 28,218,131,171, 30,117,154, 20, 57,247, 3,159, 50, 6,232, 80, +166,178,104,149, 90,194, 11, 35,152,239, 84, 46, 70,182, 1,139,145,197, 26,114,156, 66, 15,170, 52,228, 43,147, 78,211,111, 64, + 5, 6, 75,117,128,205,150,190, 16,105,187, 73, 73,207, 98,171, 7, 42,168, 44,251, 71, 51,250,138,161,158, 33,153,146, 83,193, +202, 4, 21, 70,208, 9, 49, 77,138,200,204,155, 62,233,217,201, 15,120, 53, 90, 58, 86,218,169,212, 9,105,223,231,182,155, 61, +217,255,162, 4,150, 63, 88, 29, 45,192,112,217,231,119, 20, 18,130,197,205, 52,204, 49,103,188,182,190,172, 39, 0,169, 11,126, +164, 18,101,211,191, 90,235,106, 27,164, 27, 27, 58, 32,252,104, 3, 21,171,214, 11,207, 32,191, 5,160,236,106,122,154,136,162, +232,155, 78,167, 51,237, 76,237,148, 82,138, 16, 52, 6,197,165, 26,191,162,198,133, 11,221,224, 82,113,239, 15,208,149, 27, 99, +226,206,165, 27,227,210, 16, 19,130, 97,161, 38,184, 55,193,152, 72, 52,113, 65, 98, 74, 0, 45, 33, 64,161, 80,166, 31,211,233, +124,143,247,222,215, 22, 48, 38,198,132,174, 40, 83,242,122,223,189,231,221,119,238, 57,255,151,223,117, 5, 22,186,201,243,187, +240, 39, 51,242,159,201,157, 31, 96,176, 91, 18, 68, 61,187,215,168,215, 26, 23, 89,236,128,158, 48,158, 58, 36,148, 46, 97, 97, + 71,155,158, 58, 81,212,124, 39, 3,106,140,175,132, 40,231,149,188,156, 16, 43,237, 77,178, 49,100,212,207, 66, 2, 17,108, 66, +159,243, 86,121,138,199,137,106,156,143,143,132,253,166, 76,216,241, 45,161, 91,145, 40, 28, 56, 50, 88,105,108,198,208, 77,139, +127,217, 17, 59,124,175,241, 87,137, 30,236, 14,193, 73, 34,112,137, 25,137,220,204,209,194,216,234,222,207,211, 67,185,225,163, +250,142, 5, 56,137,137,113, 8, 68,128,237,130,170, 98, 71,215, 48,253, 54, 10, 35,138, 0,130,208,172, 74,194, 67,162,135,238, +105, 0,101, 1,193,161,151,120, 66,194,154, 37,137,164, 85, 0, 27, 88,198, 98,211,223, 55, 48,113,231,238,245,171, 55, 72,142, + 44,130, 44,240,126,118,118,122,230, 29,228, 2, 77, 69, 52,234,121,161,105, 57,212,191, 12,249, 34,194,195, 69,186,117, 70, 70, + 27,164, 96,228, 67, 98,101,133,189,226,194, 27,209, 98, 76, 16, 37, 12, 32,248, 43, 84, 36, 38,157,108, 8, 9,128, 74,142,135, +123, 40,176,156,168, 77,194, 34,216, 41,100, 8,161, 16,214,113,114, 13,242, 10, 52, 73,115,176,217,139, 33, 4,169, 16,254, 55, + 7,105, 69,184,188,253, 90,206,104,213, 97,227, 13,103,143, 3, 12,183,156, 6,252, 86, 22,225, 52, 47,183, 61,147, 68,171,209, + 4,110, 95,224,148,114, 7,234, 82, 73, 10, 50, 19, 92, 62,132, 29,144,188,119,128,164,118,234,155, 15,102, 10, 53,106,163, 43, + 36,221, 60,210,127,252,220,216,153,111,197,239, 91,245,245,184, 24,111, 57,173, 39, 19, 79,167,230,166, 74, 91, 37,188,100,243, +160,242, 37, 56,234,191, 56,118,121,161,180, 64, 30, 32,168,255,142, 83, 39,177, 48,167, 14,192, 39, 86,205,157,219, 23,198,171, + 53, 99,169,188,168,167,178,199,242, 35,139,107,197,209,194,137,181,202,234, 96, 95, 97, 99,103, 93,142,163,155,226,217,209,243, +203,107, 63,224, 57, 95,138,159,179,233, 62,203,177,168, 11, 32,168, 74,202,245,189,177,161, 83,155, 70,217,180, 91, 50, 30, 92, + 92, 45,165,193, 34, 25,102, 45,151,214, 93,156, 18, 80,171,102,213,178, 45,212, 83,171,111, 3, 82,133,122,102,187,166,139,197, +209,215, 85,125,215,172,202,177,120, 38,173,251,190,103, 90,200,177, 67,251, 59, 65,208,147, 58, 0,216, 82,101, 5, 22, 31,135, + 3, 18,138, 26, 79,214,237, 58,178, 89,176,116,229,154,237, 93, 69,140, 65, 5,184, 21,215,110,190,188,198, 60,147,193,210,193, + 55,101,217,172,217, 14,139, 43,243, 75,236,237,122,253,249,167,175, 7,163, 55,207, 88,197,217,102, 9,131,205, 79, 50, 49,129, + 26,100,112,136,131,228,110,187,204,241,240,199,134, 92,143,184,151, 91,192,247,114, 11,102,118,136, 99, 25, 39,238, 88, 86, 5, +216,206,170,173,185, 23, 31, 95,207, 21,149,148, 12, 85, 90,146,196, 40,140, 53, 60,191,108,186,203,181,230,162,209,130, 8,130, +122,233, 4,238,196,240,253,153, 15,175,238, 93,122, 60,121,229,217,131, 95, 15,223,212,166, 31,157, 28, 47,219,123,252,198,146, +252, 37, 67,174,247, 11,197,219,116,224, 25, 72,241, 13,136,164, 70, 19,172,232,183,227,147,250, 16, 66,142,174, 79, 19, 64,207, +148,146, 46, 27,101, 44,136,252, 52, 73,183,164, 20,165,225, 1, 13,166, 14, 89,183, 75,253,232, 56,163,194, 91,149,132, 34,139, +201,166, 83,239,136, 10,116,211, 59, 32,131,141,189, 45,220, 26, 2,119, 1,100, 92, 6, 63,136, 56,163,166, 35, 42,201,122,183, +115,221,100,152, 73,101,146, 82,114,187, 1,101,152, 16, 62,137,167,116, 7,116,104,136, 70,224, 2,136, 29,179, 61,222,136, 39, +129, 25,120,146,168,201, 42, 32,128,110,146,140, 14,245,195,187, 89,139, 26,200,135,140,143,216,254,212, 15,190,126, 11,192,217, +181,180, 54, 17, 69,225, 59,175, 36, 51,147, 71, 77, 72,155,151,182,180,181,136, 80, 5,119,174,220, 20, 92,136,123, 65,252, 9, + 46,220,232,202,157, 27, 65,253, 25, 22,244, 23, 8,174, 20, 20, 69,169, 84, 93,105, 91,219,218,230,157,102, 50, 73,230,102,102, + 50,227, 57,231, 78,108,213, 34,232, 46,144, 48,147,185,115,239,121,124,231,156,239,251,159,249,166, 99,131,247,240,144, 66,224, + 79,227,142,191,194, 6, 85,106,101,201,153,249,102,191, 38,253,202, 5, 25, 34,206,110, 14,125, 71, 10, 35,166, 8,141,233,212, +237,137,129, 69,192, 38,202,170,148,246,136,230, 72, 5,191, 81,116, 69, 79, 39, 50,121, 61,215,116,170,237, 81,155, 81,183, 55, + 82, 81,250, 67, 74,243,253,137, 15, 15, 5,190,255,179,193, 62,192,206, 69, 8, 49, 98, 96,116, 8,225,157, 12, 49, 75,242, 63, +209, 95, 82,255,139,194,125,135,106, 80,248, 88, 56,243,162, 72,149,108,102,121,161,208,224,156,123,216,212, 26, 83, 21,161,183, + 24, 79,224,174,131,131,131,140,197, 72,210, 24,198, 49,184,149, 57, 15, 69,155, 8,198,194, 72, 75, 19,249, 98,132,194,145,242, + 20,199,157, 32,202, 76, 38,148,202,201, 82, 97,186, 56,242,188,173,173,221,189,106, 35, 80,112, 50, 20,118, 31,202, 84, 6,224, + 39,112,178, 63,169,203, 38,216, 24, 77, 4, 6, 76, 64, 72, 40, 51,140,125,139,130, 72, 91,242,105,115,146,140, 3, 46, 40,134, +237,112,192, 93, 76, 56, 61, 44,134,226,123,208, 98,140, 31,112, 23,135,170, 16, 39, 54, 19, 25,172,121, 8,115, 28, 9, 68, 68, +224,166, 36,171, 36, 4, 43, 5,145,166, 37, 35, 79,137,144,142,170, 65,204, 59, 54, 98,166,130, 28, 76, 14,158,159, 64,210, 19, + 70,159, 91, 56, 75,140, 44,111,178,194,162,108,152, 46,171,248, 99,183,146,175,236,183,246,117, 20,203,246, 52, 89, 93, 44,158, +174, 29, 84,185,203, 33, 7, 23,181, 44,200,189,178,169,108,189, 91,133,149,135,172, 22,110,167,131,221, 83, 20,107, 96, 33,158, + 99,183,251,238,208,136, 25,144, 47, 35, 37, 14, 31,192,177, 4,247, 3,239, 87,160, 67,196,214,137, 71,189,148, 41, 15,220,190, +237,244,242,169,105,172, 7,140, 6,217,228, 9, 85, 86, 91,221,198,169,153,138,101, 91, 55, 46, 93,127,252,114,181,148, 41,192, +114, 45,205,157,125,179,254, 34, 17, 55,102,210,249,134, 85,203,165,242,125,199,134,184,123,177,184,176, 89,221,128, 85,130,152, + 67, 85, 85,176, 62,197, 92,113,202, 72,127,218,254,236, 33,107,174,152,185, 9,231, 11,243, 95,246, 55, 97,123,204,230,102, 55, +234, 27,229, 92,105,175, 3,207,104,122,196, 15, 7,246,107, 74, 79,117,135, 61, 13,103,221,176, 53, 16,252,147, 25, 55,224,191, + 65, 40, 63,112,236,165,210,210,247,214, 46, 60, 20,164, 41,117,171, 86,206,150,155,118, 29, 59,148,226, 49,124,189,114, 80, 26, + 73,183, 30,172,176,156,203,236, 30, 36,113,204,225,172,207,217,118,227,222,234,235,187, 31,170,191,237,221,219, 23, 47,220,127, +245, 30, 63,109, 63, 98,221, 62,150,171,124, 82,103, 5, 43, 15, 27,116, 36, 34,119,212, 64,139,252, 47, 73, 62,146,252,163,138, +198,221,208, 89, 33,195,210,201,206,211,181,203,119,158,188,227, 56, 40,171, 17, 61,128, 31,252,109, 44,253, 90,246,102,167,171, + 61,187,250,240,252,243,149,177, 94,191, 82, 92,182,252,225,185,185, 51,111,191,174, 9, 74, 37,138,174,144, 31,212,245, 70,142, +195,167,103, 43,245,111, 59, 16,236, 80,171, 10, 78, 45,197,180,120,199,110, 11, 74, 93, 2, 97,200, 55, 72,146, 75, 26,117, 82, + 68, 28, 45, 8,198,177,140, 6,107, 56, 64, 46,101, 37, 42,119, 70,108,238, 68, 82, 35, 71,245, 66,210,134,160,130, 2,218, 26, + 26, 15,161,126, 13,200,186,214,119, 62, 34, 71, 44, 41,217,141, 73,114, 37, 8, 35,236, 71, 0, 40,224,233, 91,189,230, 17,142, +128, 8, 48, 39, 0, 62, 20,245,232, 9,211, 25, 11, 15,253, 1,201, 80, 17,113,141,132, 42, 46,190,168,154,134, 82, 56, 17,174, +154, 76, 66, 29,129,207, 35,240, 58,234, 40,153,180,230, 31,199, 8, 3,247,248, 33, 0,101,215,178,219, 52, 16, 69, 61,169,227, + 87,156,164, 33, 73,213,138, 86,148, 34,209, 5,176, 67, 98,129,212, 74,116, 13,191,192, 15,240, 51,172,216,243, 1,252, 1, 44, + 88,118, 11, 8, 16,106,213, 71,154,180, 77,154, 38,245, 43, 25,199, 30,238, 99,156,242, 18, 8, 41, 82,148, 40,158,204,216,115, +239,156,185,115,239, 57,255, 23,127, 23,127,146,207, 46, 21,117,255,127,113,238, 5,133, 47,206,241, 88,134, 63,119, 72,183, 10, +131,132,181, 89, 48, 67, 15, 34,119,116,108, 38, 93, 75, 21,150,138,235, 17, 4,113, 66,102,186,108, 21,143,200, 36,198,182,243, +182,187, 12,118, 21,165, 33,107,158, 8,241, 11,237, 78,190, 64, 45,207, 67, 10,152,124, 50, 35,162, 74, 22, 20, 43, 66,255,191, + 33,245, 66,197, 91, 19, 17,253, 88, 56, 69,170, 2,164,157,134,202, 57, 44, 1,164, 88,194, 26, 60,142, 84,178, 84, 54,173, 73, +138,105, 69, 11,120, 24, 8, 40, 30,128, 57, 38,150,163, 34,169,129,106, 80, 40, 92,137, 43, 3,172, 19,128, 32, 8,100, 43, 84, +191,155,162,179,103, 25, 49, 74,159,226, 61, 28,137,233,244,135,225,151,189,206,254, 65,119, 20, 74,240,157, 14,138,154,102,148, + 99, 71,138,193,120,123, 48, 90, 10, 95, 72,104, 39,133, 61, 45, 2,115, 42,136,194, 9,149, 81,158, 12,248,122, 19,249, 12, 74, + 22, 50,210,224,132,180, 22, 68,153, 35, 76,168,168, 37,240,112, 88, 41, 19, 64,116, 36, 73,237,207,130,193, 53,253, 38,192,240, +154,131,213,170,122,154, 10,146,218, 18,112,185,141,207,131, 43,150,169,196, 12,190, 97,180, 82,119, 26, 6,114,242, 36, 44,151, + 6,127, 98,219,158,111, 87,199, 81, 0,216, 51,150, 19, 54, 19,226,112,102, 90, 13,124,127,250,240,217,167,227,207,142,101,101, + 89,234,216,149,222,101, 55,145, 9, 27, 3,116,183,226,214,162, 73, 8,174,156, 45,129,161, 61, 60, 13,128,243,112,241, 85,124, +201, 18, 72,148,225,158,243,209,122,195,111,221, 94,186, 51, 8,206,215,155,235,163,104,196, 50,197,101,203, 89,116,145, 18, 4, +182, 2,139,126,125,189,189, 49, 8, 6, 83, 57,169,186,181,105, 58,217,126,176,125,120,118,116, 60, 56,129,177, 67,107,176, 80, +118, 78,143,224, 94,194,114, 62,197,147, 82,133,225, 29,132,240, 42,140,163, 18, 49, 78,123,174,231, 58,200, 38,214, 15,134,157, +126,215,115,253, 25, 49,254, 83,118,116, 62,142,175, 50, 26, 66, 63,232,111,222,188,123,120,222,105, 85,155, 65, 60,246,108,151, + 8,110,115,219,242, 80, 57, 38,199,236,148,138,227, 95,132, 67,192,251,146, 84,231,192,234,107,149, 69,179, 84, 6,215, 6,187, +165,118,189,125, 17, 12,224, 55,211, 52,134,181,215,130,254,123,205,147,112,248,216,176,236,157,101, 84,211,102, 77, 27,112,111, +117,119,107, 99,105,181,118,175, 59, 10,122,193,216,130,141, 56,202, 23,171,163, 78,239,197,253,229,210,106,205,200,122,134,144, +232,205, 85,174, 73, 87,216, 26, 48,255, 81,160, 55,119,193,155, 91, 70, 21, 94,182,209,240,140, 27,190,177,214, 50, 54, 87, 12, +105,188,124,254,250,201,171,119,221, 89, 62,151,235,201,255, 69, 57,242, 49,217,221, 83,187,111, 14,222,127, 72,222,214, 77,123, +205,109,197, 89,114, 56,232,224,105, 22, 2, 14, 51, 85,210, 54,221,181,230, 45,152, 87, 65, 28, 60,218,217,218,255,250, 13, 48, + 0,226, 31,170,101, 73,228, 36, 19, 60, 5,117,166, 35, 41, 2,169, 86,117, 41,154, 94,229, 44,236,103,232,116, 67,248,176,210, + 88, 25,134, 35,109,252, 90,206, 73, 11,111, 87,172, 42,152,223,140,248, 5,132, 46,122, 98, 75,194,240, 36,220,231,211,241, 25, +135,178,241, 96,220,111, 80,176, 84, 82,251,121, 94,248, 98,228,174, 17,215, 5,177,154,253, 80, 92, 7,154,153,195,114,110, 50, +106,206, 87, 73,201,155,224, 37,224,241,193, 36,212, 25,241,220, 11, 62, 19, 96, 90,130, 95, 4,243,114,237,224, 11,233, 11, 67, + 15,170, 96, 28,155, 3,254,239, 2,144,118,237,186, 81, 67, 65,244,250,113,109,239,203,187, 49,217,144,132, 37, 68,162, 64, 10, + 66, 10,162,163, 68, 32, 90,106,248, 17, 42, 10,254,131, 26, 33, 26, 58,126, 2, 65, 17, 68,151, 68, 9, 81, 72,236, 60,216, 93, + 59, 94,175, 95,204,153,107,111, 18,146, 6,177,173, 31,242,250, 94,207,156,153, 57,115,230,223,240,187,118, 29,138,159,101, 87, + 56,145,162, 95, 57,185,202,204, 24,151,111,112, 65,217,231,175,147, 9,211, 90, 44, 31,150,213,242,183, 74,103,161,150, 34,192, +142,195,220, 33, 83,152,142, 38, 75, 97,180, 12,155, 98,231,142,213,241,154,222,209, 36,216,139,246,208, 34,203,133,127,238,122, +200,234, 60, 90,161, 22,143,126,110,163, 55,138, 79,217, 43, 93,171,125, 89,218,210, 70, 95, 95,158,213,117, 12,205,177, 26,113, + 18, 41, 67,159, 99, 48,134,198,196,218,226,193,202,195,141,221,111,232,202, 38,123,109, 19,112, 75, 13,221, 64, 83,170,174,119, + 28,107,185,223, 51, 28, 11,225, 55, 90,153, 9,215, 16, 42, 98,237, 12, 81, 54,154, 86,167,101, 66, 74, 29, 9, 37,248, 54,213, +126, 75, 27,136,176, 57,109, 96,189,146,182,224,119,170, 17,222,215, 98,178,180, 88,127,205,132,234, 0,220,131, 45, 53,213, 36, +148, 36, 5,135,249,168,165, 27, 34,183,145, 27,197, 33, 71,106,182,196,112,135, 36,193, 63,157, 80,128,159,235, 0, 33,162,112, + 44, 52,155,131, 92,156, 0,249, 75, 93,183,108,116, 85,167, 60, 0,237,108,138,179,218, 13,121, 24, 12,163, 4, 68, 33,164,103, + 17, 39,151, 74,161,159, 11,164, 23, 87,180, 44,138,243, 56,145, 63, 33,118,137,172, 3,174,234,222,220,139, 95,245, 13,211, 81, +211, 48, 91,178, 73,183,155, 64,157, 6, 74,106,147, 52, 18, 24,247,220,228,198,116,178,185, 13,168,155,228, 24,153,203,196,107, + 93, 73, 2, 41,238,130, 3,131, 91, 48,153, 38,183, 76,153,178,224, 42, 43, 20,162, 52, 74,139,101,154, 22,178, 25, 38, 36,207, + 20, 11,128,174,238, 52,221, 48, 26,151, 74, 70, 66,148,203,189,129, 63,220,167, 77,229,182,186,210,208, 70,209,152,124,225,218, +202,125, 2,227,203,222,210,142,191, 99,131,245, 35, 25,228, 9,242, 73,244, 90,201,244, 47,205,245,105, 15,254,248,249,125,174, +133,178,240,157,249,213,109,127,155, 30,213,107,121,228,114, 40, 80, 88,156, 91, 8, 70,199,243, 40,237, 30, 12,110,172,108,249, +155, 11,189,155, 39,225,137, 98, 63,208, 29, 32,115,102,200, 48, 30,153, 60, 21,146, 2, 17,186,208, 37,167, 21,135,228, 15, 64, +177,101,138,249,192, 27, 4, 67,159,219,231, 10,242, 79,152,238, 91,150,171,139,119, 41,138,154,230,152,173,149,165, 83,112, 0, +116,225, 72,163,221,112,143, 66,255,105,247,214,139,183,235, 98,189, 43,252, 99, 49, 26,139,233, 20,160,187,204,126,125, 58,125, +254,238,243, 70,176,127,117,187,127,121,249,228,209,155,103, 98, 18, 11,131, 43,236,180, 91,167, 41, 96,123,174,248, 26, 58, 15, +126, 2, 54, 17,182, 37,188, 38, 96,251,110,248,225,245,199, 87,239,191,230,255, 61, 1,226,158,123,251,113,127, 45,202, 98, 90, + 92,138,156,188,102,111, 51,216,154,205,216, 22, 44,246,230,152,178,221,118, 15,126, 7,130, 9, 51,220,219, 9, 46, 77,109,223, +233,209,156,104, 50, 70,223,134,202,186,114,246, 67,229,174,153, 28,163,230, 14, 26, 85, 71, 88,133,128, 75,122, 99, 82,151, 13, +105, 19,106, 1,124,230, 29, 66,159, 36,249,209,163,161,207, 3, 33,200,103,244, 15, 67, 12,127, 71, 88,141,132, 64,218,118,186, +103,147, 48, 41, 50, 37,153, 89,212, 86,123, 38,130,192,100,233,138, 68, 58,203, 23, 92,196,236, 74,177,184,146, 37, 20, 74,199, +141, 77,116,165, 77, 89,115,102,202,234,146, 90,244, 70, 87,130, 4,181, 85, 85, 10,126,231, 37,215, 75,201,100, 38,128,253, 17, +128,180,107,215,141, 26,136,162,126,172,215,175,141,157, 23, 73, 72, 32,209, 70, 68, 17, 17, 13, 73, 77, 69,197, 79,240, 1, 72, + 72,124, 7, 21, 13, 8, 36, 26, 90, 74, 42,132,160,164,130,150,130, 20, 8, 82, 36, 33,171, 40,251,178,119,237,241,120,184,231, +206, 44,187, 10, 52, 8,105, 27,239, 67,178,175,118,102,206,189,247,220,115,254, 25,191, 91,127, 20,103,208,147,176,156,208,141, +217, 64,245, 18,138,119, 77,154, 48,227, 8, 50, 3,147,103,207, 36,211,110, 69,114,110,121,236, 77,129, 18,138,152,156, 67,142, +225,191,187, 46,190, 64,127,127,126, 49, 55,215,195,244,156,167,251,200, 75,241, 21,161,196, 72,228,174,129,241, 6,193, 43,211, + 76, 81, 60,173, 84,131, 52,106,169, 75, 93,211,217,206, 47,179, 68,166,109, 19,148,182,241, 19,220,234, 74,186,158,151,153, 7, +229,119, 0, 8, 90,192,122, 75, 3,147, 4,137,191,163,197,150, 8,134, 86, 74,246, 71,227,229,208,107, 95,155,243, 60, 2, 64, +141,200,131,187,105,218,106, 38, 45, 55,246,161,120,206, 2,165,182,199,233, 11, 10, 41,178, 70,161,102, 12,207,175, 74,212,190, +227,134, 32,202, 99,166,116, 60, 42,179, 81, 69,161, 14, 60, 39,246,189,216, 3,174, 98,157, 39,184,219, 4,174,138, 2,130, 86, +110, 74,199,157,139, 71,107,178,100, 31,123,116, 57, 90,238,216,150,108, 95,102,201, 70,195,105, 5, 20, 55,102, 23,163, 5,168, + 34,122,199,199, 32,162, 35,161, 14, 56, 31, 82,166, 1,143,156,254, 96, 60, 24, 10,109,205, 51, 89,112,186, 48, 99,155,240,240, + 53,179,142,167,195, 13,136, 7, 24, 55, 42,137, 22,139,106,148,132, 11, 76,119,148, 90, 19,137, 66, 23, 54,131,170,170,208,213, +100,153,248, 86,144,212, 76,126,208, 13,244, 38, 90,115, 13, 33,170,246,218,118,203,143, 25, 92, 7, 2,131,202, 6, 92,194,163, + 18,211, 85, 96,178, 46,196, 4,169, 64,147,167,208,101, 69, 78,171, 38,231,137, 24,197, 79, 71,216, 31,188,102, 45,181, 7,127, +234,116, 84,230, 13,156,191,158, 2, 87, 78, 97, 76,145,253,148, 65,215, 81, 96, 52, 18,120,239,244, 59,148,216,109, 44,173, 99, + 96, 19, 76, 53, 61, 6, 97,173, 38,171,205,166,127,218, 61, 62,235,158, 83, 14,118,176,189,255,163,115,148, 23,217,193,206,254, +225,241, 97,228, 69, 89, 57, 44,235,146,242,155,139,188, 95,138,113, 33,138, 48,108,165, 81,178,185,220,190,200,128,196, 41, 14, +173, 48,165,141,126,119, 99,183,151,247,246, 54,247, 78,186, 63, 33, 29, 46,198,124,170, 73,122, 28,186, 37,205,144,174, 42,217, +205,187, 82, 49,156,183,161,154,199, 58, 19, 96,115,150, 85, 65,187,210,141,181,157,206,224,148,157,240, 26,244,105, 94, 12,111, +111, 29,124, 62,249,250,224,241,139,187,178,185,178,117,213, 90, 72,129,151,190,103,249,187,111,119,158,188,254, 50,232,253,117, + 93, 63,127,120,207,110, 19,138, 23,140,214, 21,116,136, 2,122,249,214,156, 7,223,116,194,236, 73,104,205,211,182,158, 88,215, + 41, 51,168,223, 63,122,115,235,254,203, 15, 71,254,167,183, 31,159,190,122,246,159,251, 59,109,232, 55, 23,183,122,197, 48,142, +230,206,123,103,112,178, 36,156, 94,171, 41, 88,112,108,202, 66,135,227,140, 48, 36, 33,244,222,104, 0, 22,167,100, 46,188,226, + 12, 5,132,102,161,171,177,181, 86, 17,182,141,241, 81, 61,153, 90,101,216, 44,185,116,206, 46,174,188,248,203,162,204,171, 28, +106, 95, 82,166,209, 92, 41, 74, 94,233, 85, 14,105, 60, 91,178, 96,217, 16, 30, 3,178, 54,181, 20,108,190,148,113, 86,154,177, +206,194, 78,202,158,114, 92,112,133, 27,170,229,196, 69,149, 25,152, 90,158,163,158,209,174, 49,153, 69,173,117,199,204,244,142, + 41,221,176,235, 20,179, 98,108, 93,141, 55, 5,240,217,202, 58,183, 7, 39, 14, 79,245,239, 1, 81,101, 84,198,185,150, 64,171, +230,151, 0,156, 93,203,110,211, 80, 16,245,181,125,175,237, 36,110, 66,154, 56,105, 17,108,138, 88, 84,106,197, 7, 84,170, 64, +234, 79,177,229, 15, 88,243, 21,136, 13, 11, 64,149,186,164, 2, 9, 85, 72, 21,221, 20, 74,223, 37,177,147,216,142,147,152, 57, +115,109,210,168, 43,170, 86,173,186,168,228, 56,206,204,153, 59,231,113, 79,252,190, 8,222,121, 80, 48,204,146, 1, 89,124, 6, +111,113, 34, 23,202,119, 25, 7, 35,110,251,253, 90,172,186, 38, 12,203,249, 30,197,249,148, 70,238,146,179,197, 74,217, 42, 85, + 43, 91, 47,165,149, 80, 10, 90, 34,219, 1, 89, 75, 41, 75, 42, 83, 58, 56,228, 85, 71,209,129,114,100,148, 32, 60, 19,167,210, +156, 12,172, 27, 0,149, 53, 42, 68, 85,199, 39, 40,164,201,168,119,138,123,185, 34, 89, 80,213,150,233,181,229,245,139,194,217, +102,126, 28,165, 67, 95, 17, 21,143,104, 24,147,208, 58,225,120,201, 74,219, 78,195,219,218,236,180,154,222,112, 60, 73,198, 70, + 24,103,244, 51,138,167,233, 76,164,208,202,240,202, 10, 40, 44, 87, 18, 55,147,166,113,170, 13,212, 40, 36,234,191,192,210,149, +186, 86, 54,165,114, 14, 61,161, 77, 31, 0,122, 10,241,130, 76, 62, 47,100, 94, 45, 26,140, 99, 9,216, 98, 27, 56,120,193,125, +227, 9,155,240,187,109, 9, 42,134,244, 55, 56,247, 56, 37,200,134,227,108,148,106,144, 35,198, 19, 24, 68,166,250, 27,190,124, +216, 34,229,115,211, 58,141,183, 33,113, 10,147,158,224,216, 3, 61,187,248, 80,130,196, 19,164,164,221,118, 97, 45,222, 89,253, + 88,243, 47, 12, 61,193,210, 42, 93, 45,181, 67,141,197,181, 65,159,153,107,219, 12, 11,110,251, 26,155, 20,145, 43, 38,103,215, + 3,177,208, 44,213,173,175,252,188, 57, 46, 5,177,128, 97,158, 83,179, 77, 59,130,143, 60,219,249,178,104,176, 66,205, 96, 10, +133,109,219,111, 93, 70, 23,154,183, 48, 43,104,178,133,224,161,234,214,134,201,208,100,162,132,163, 28,223, 5,235, 38,155,192, + 25,216, 18,114,194, 65,113, 82,202,205, 71,155, 55,209,159, 40,238,209,197, 38, 48,192, 1, 59,106,173,251,228,199,217,161, 52, +237,192, 15, 58,205,224,240,228,144,110,237, 32, 30,112, 98,187,170, 85, 42, 73, 58,166,214, 65, 29,197, 81, 30, 1,127,101,187, +167,215,191, 30,182, 30, 35,155,151, 77, 95, 7, 73, 68,115,198,243,141, 23, 95,142,246,175, 7,224,255,140, 16,123, 0,236,209, +240, 26,253,164,199, 89,193, 80, 87,208, 72,234, 42,119,107, 99, 43,171,138,221, 79,239,233,146,248,154, 69,123, 41, 56, 11,207, +151, 28,122, 21,132,244,179,237,245,237,253,163,207,116,235, 58,141,110,156,246,236, 60,125,253,245, 67, 63, 75,255, 47, 67,109, +239,149,241,212, 55, 70, 3,206, 98, 49,176,104,141, 50,227, 38, 1, 45,185,234, 2,176,215, 61,195,168, 24,151,253,221,151,239, +118,222,124,212,197,226,129,215, 60,120,187,183,186,179,126,239,202,174, 12,187, 41,107,207,150,215, 28, 41,105,106, 88,174, 52, + 17,195, 82,173, 95,133, 87, 88, 97, 21,231, 68,232,229, 12, 47,102,144,103,228,211,166,223, 58,239,157,210, 51,216,174, 7, 97, + 28,246,227,176,216,176, 17,188,171,211,192,116,209, 1,131,229,183, 6,120,255,142,176,129, 72,196,172,237, 7,221,198,202,247, +147,111,204,183, 97,145, 96,169,111,202,203,178,101,137, 57,175,134,255, 75, 43, 75,217, 75, 70,235, 48,244, 2, 75,103, 70, 21, +100,244,114,118, 53, 96,155, 65,143, 60, 53,123,192,187, 97, 79,136,185, 5,177, 35,193,234,230,252, 22,189,177,158,186,210, 5, + 25, 34,211,188, 15,157, 49,133, 47,191,210, 24,101,131, 9,250, 77,129,222, 23, 11,175, 57,215, 9, 21, 9, 78,119,222,211, 28, +214,224,127, 5,224,236,220,117,155,136,130, 48,124,246,230,245,122,189,190, 96,156,152, 68, 8, 9, 36, 26,138, 20, 64, 65, 17, + 10, 90,122, 16, 60, 3, 13,143,192, 11,240, 24,116, 72,116,180,145, 66,137, 72,138, 8, 36,138,196, 9, 36,142,157,196, 27,249, +146,141,119,189,103,153,127,102, 29,115, 17, 66,161,179, 92, 29,175,207,206,204,153,243,207,247, 95, 34,190,255,217,156, 1, 39, + 75, 57,177, 62,191,152, 86,101, 4, 88,129,113, 46, 22, 95, 25,253, 98,187, 52,199,168, 43,134, 23,226,144, 53,253,173, 75, 99, + 40, 59,225,197,152,185, 16, 94,140, 35, 51, 27,235, 20,155,112,155,245, 51,108, 47,160,108,207,118, 81,206,155, 78,201, 65, 28, + 51, 12,183,225,215,218,163,157,126,212,163,231, 15, 67, 13,248, 14,225,141, 69,249,163,114,252,155,133, 86,177, 29,243,248,242, +197,211,151,234, 48, 3,233,191,213, 27,116, 76,101,254,155, 88, 60, 87,162,242, 21,188,227, 37,105, 84, 46,214,198,201,152,193, +141, 10,115,170,150, 16,207,204, 7,183, 23,105,129, 17, 5, 81,180,190,169, 18,115,130,160,104, 50, 85, 1, 66, 55, 80, 38,212, + 36,129,200, 19,112,165,120,234,160, 12,215, 22, 83, 23,224,228, 13,224,161,129, 70, 46,247, 58, 74,150,229, 83, 80,193,241, 5, +231, 23, 76, 51,185, 24,235,213, 19,125, 58,161,116, 0, 57,177,107,155,113,166, 41, 3, 78,210, 20,198,128,153,209,170, 7,235, + 91,187, 83,200, 36,161,250,202,205,225,181,140,253,113, 52, 79, 69,193, 37,192,188, 84,170, 20,116,106,116, 22, 20,235,244,250, + 97, 21,185,223, 45,187, 38,202,155,163, 24,180, 0, 2,204,112, 54,224,102, 74,134, 20,137,130,220, 36,184,208,137, 51, 25, 57, +239,117, 74, 2,202,152,232, 96,112, 58, 82,126, 33,128,204, 6,130, 31,155,221,204,232,253, 42, 20,221, 34, 85,226,205,202, 98, +146,196, 71, 35,168, 3,105,121,208, 50,107,208,135,132,247,125,247,230,189, 79,237,143,180,180,107,181, 86,127,116,114,198, 66, +114, 14,241,115, 99,199,140, 61,211,175, 4,141,211, 81, 8,155,111, 12,222,195, 57,147,242,242, 82,125,105,247,104,231,197,211, +151,239,215,222,125,239,239,219,220,111,164,205, 92, 46,250,103, 73,228, 57,176, 88,161, 13, 69, 95,174,220, 88,217,220,222, 92, +189,243,112,231,112,155, 74,164, 86,163,121, 24,246, 6,227,129,235, 20,170,165,234,222,113,187,228,248,244,135, 80,193, 30,120, +149, 24,252,247,168, 86,170,140, 99,248, 20, 6, 94, 21,189,183,132, 18,134, 85,246,168, 96,140,104,207,132,103, 33, 6, 43, 44, +179, 84,224,171, 84,101, 80,140,131,147,209,240,148, 78, 9,180,137, 10,224, 84,242, 4, 52,253,253,166,144, 72, 1,132,160,180, +196,150, 70,169,197, 94,192,215,107,139,111,191,172,109,132,223, 46, 27,103,223, 60,190,255,236,245,115, 21, 24, 80,221,156, 12, + 85,120,174,122, 19,245,181,175, 6,147,141,118,103,235, 96,176,208,170,238, 31,143, 94,125,248,188,167,230,103,116, 87,185, 39, +235,219,229,213,229,255,142,239, 79,110, 61,162, 68,181, 80,111,118, 7,221, 78,191,203,231, 57,237,187, 30,253,198,113, 4,107, + 89,105, 43,171,153, 91, 93,202, 19, 39,144,206, 24,122, 10, 56, 13,182, 85,179,210,164,143, 32, 55,112,177, 54,133,206,213, 16, + 27,169,108, 54, 64, 36,215, 58, 18, 62,225, 51,147, 38,128,134,178,111,210,108,138, 29, 5,246,114, 99,249, 32,236,228, 29,144, + 92, 58, 32, 55,180, 90, 10,157, 41,183, 84, 68, 33, 76,203,104, 4, 13, 58,138,165,220,162,241, 93, 31, 74,220,124,210, 41,147, +110,164, 49,131,147, 49, 84, 59, 71,138,101,185,110, 30,178,190,171, 65,171, 59,236,228,167, 97, 45,205,119, 97, 21,104, 49, 2, +204,235, 71,253,151,169,162,159, 84,139, 38,119,151,102,185, 32,215,171,255, 16,128,179,107,217,109, 26,136,162,158, 25, 63,242, +170,211, 54, 81,157,150,130, 74, 10, 66,145,144,120, 75,172,216,240, 1,124, 1, 95,196,103,240, 3,108, 89,179,232, 10, 80, 87, +136, 86, 2,162,136, 52, 52, 38,143, 38, 78,108, 39, 30,115,239,157,177,155, 20, 22,168,202, 67, 81, 54,137,147,153, 51,247,113, +238, 57,255,139,239,127,131,123,154, 49,103,152,134, 93,165, 55, 64, 77, 60, 42,148, 74, 99,213, 75, 41,199, 68,192, 2, 81,192, + 90,116,177, 32, 42,112,153,163,101, 79,234, 22, 29,177,136, 12, 22, 25, 11,161,105,234,168,158,158,106,241, 25,161, 36,218,225, + 68,177,232,120,128, 69,238,112,184, 91, 38,160, 28,250,130, 98,149,198, 17,118,181,224,250, 97,191, 51,251, 14,167, 37, 4, 68, + 18,217, 84, 72,142, 12, 84, 95, 55,213,157, 20, 60, 72,210, 40, 95, 62,121,240, 14, 91, 90,146,180,244,170, 2,244,191,216,239, +153,208, 25,189,230, 26,198, 56, 25, 11, 83,205,138, 6,203,224, 58, 81, 13,219, 82, 46, 80,120,167,173, 72, 26,217, 36,168,163, +103,143,101,222, 14, 70, 37, 22,210,117,196, 82, 56,185,250,145, 85,135, 96, 14, 26,105,226, 68,120,173, 88, 50,172,229,121, 48, +159,202,120, 24, 69,144,244, 4, 81, 50, 10,162,139,105,104,104,197,198,149,242, 89,217,121,241,228,113, 56, 25,110,152,124,183, +134,126, 63, 71,199,200,163, 72,176,235,151,208,184, 8, 49, 34,209,246, 73,245,157,180,211, 60,101,178, 89,161,202, 96,213,242, +246,239, 73, 95,169,106,100,131,191,105,110,222, 38,117,183, 8, 87, 57,122,149,161,195,136,185, 36,135, 29,116,248,162,188,184, +185,115, 8, 65, 24,192, 31, 67, 95, 67, 81,119,189,254,184, 87, 45,111,141,130,129,154, 14, 35, 59, 46,124, 60, 61,124,246,249, +219, 71, 83,213,160,177, 77,197, 93,199,157,196, 0,250, 24,170,147,105,138,166, 95, 41,190,172, 45,236, 80,249,126,232,146, 27, +110,200,187,123,247, 78,187, 39, 36,235,125,185, 7, 72, 38, 68, 66,208, 20, 37,113,195,221,157, 97,234,141,135, 40,100, 3,240, +243,254, 26,247, 60,183,113,179,126,235,184,253, 9, 62,164,117,163,117, 54,252,137, 46, 74, 36, 66,105, 98,223,101, 9,207, 7, + 94,115, 26,160, 61,239,217, 8,149,199, 61,183, 6, 95,243,254,126,235, 75,247,171, 63,246, 85, 78, 7,239,108,149, 54, 7,193, +240,246,206,193,143,243, 54, 64, 63,170, 26, 16,105,181, 92,132,101,111, 64, 78, 64,196,161, 20, 86, 47,192, 13,113,242,210, 74, + 97, 3, 37, 83,184, 88,162,132, 63,220, 18,170,173,113,117,185, 0,100,131,139,225,126,125, 15,101,238, 57, 55, 45, 65,176,145, +164,122,212, 12,254,252,197,219,147, 15,215,131,218,151,110,229,205,171,231,143, 30, 52,141, 5, 51,186,112,252,205, 94,191, 63, +122,215,247,175,204,170,151,108,200, 78,116,137,187,106,215, 70,145, 15, 11, 83, 26,241,245, 62,244,225,246, 29,175, 80,157,203, + 24, 14, 39,136,207, 18,136, 66,184,174,146,195, 90, 2,180,109,247,219, 28, 19,208, 34,108,225,121,172, 24,113, 58,112,198, 95, +126,179,209,241, 59, 82,149,104,116, 79, 19, 57, 92, 73, 22,164,208,191,159,147, 42,180,177, 53,231,138,193,145, 42,157, 89,114, + 63, 83,138, 95,210,182,156,104, 17,115,182,174,103,206, 46,185, 50, 18,253, 26, 36, 69,216,137,146,131, 87,253, 90,128, 99, 91, +148,144, 22,156,179,209,211,149, 81,210,156, 99,198, 50,199, 38, 93,161,129,235, 21,228, 57,193, 51,100,167, 26, 14,203,171, 32, +138,230,103, 71,113,184,234,114,177,102,174,205,214,224,245, 74, 51,241,143, 0,148, 93,203,110,211, 64, 20,245,140,103,108, 39, +105,156,132,180,165, 60,186, 64,170, 16, 72,221,161,126, 1,159, 1,124, 7, 11, 22,124, 34, 98,129, 4,155,194,142, 71, 32,194, +137, 29,219, 99,123,134,251, 24, 91,105, 41, 2,164,202,139, 42,113, 38,206,204,157,115,239,156,123,206, 63,197,247, 27,229, 5, + 60,161,109,112, 15,241,127,222,172, 36,248,205, 5,150, 47,216,223, 21,224,172,229,234,113,170,142, 74,151,149, 93,206, 41, 42, + 17, 99,144, 96, 42,252, 38,225,195,186, 38,192, 46,201, 42, 24,175, 68,244,128,121,160,165,142, 49, 0, 42,120, 77, 18,198,137, +198, 42,205, 36, 62,200, 76,118,153,125,224,254, 55, 60, 20,116,116,202,234,122, 77, 31, 50, 44, 23,156,244,249,244, 71,244,167, +255, 88, 73,176,222, 84,229,138, 87,137, 12,174,113,107, 28,203,224,180,174,193, 92, 64,162,202,143,244, 34, 7, 36, 15, 76,155, +157, 66,240,142,216,150,228, 76,232, 13,248, 15,233, 72, 63,158,235, 23,210,195,127,185,215, 82, 49,208,172,156,167,247, 32,199, + 70, 97,213, 66,226, 38, 29,141,162,213,174, 96, 73, 23,184,212, 6, 59,243, 60,143, 64, 50,205, 23, 62, 83, 77, 81,182, 81, 63, +189,120, 82,149,133,104,118,182,203,179,181,249,188, 70, 94, 14, 9,244, 5,228,196,212, 27, 22,116,130,200, 73,142, 9,142, 54, + 96,205, 58,158,191, 93,172,199, 40,167,181, 91, 99, 28, 70,159, 19, 49,132,248,129,108, 11,119, 98, 5, 2,180,214, 66,151, 62, +116, 96,139,112,191,164,250,152,179, 76, 0,162,197,101,181,210, 29,105, 3,208,147,196,132, 10, 6, 1,169,119, 93, 23, 85, 11, + 79, 50,140,117,220, 52,245,124,188,220,214,153, 24,152,103, 65, 95,193,241,205, 35, 34, 86,201,113,122,184,202, 86,117, 91, 15, +142,148, 44,214, 13,113, 92,135,186,168,115,223,133, 72,197,107,248, 98,179,233, 60,223,229,233, 40,133, 17,194,108, 41, 77,169, + 81,202, 61,201,107,116,104, 81, 74,157,159,158,191,189,124,115,119,126,250,163, 88,245,100, 80, 71, 20, 41, 57, 63, 88,196, 48, +242,182,131,219,158, 44,238,124, 93,127, 9, 81, 45,206,141, 34, 0, 16, 5,121,248, 74,254, 17,225, 62, 6, 25, 17, 34, 29,205, +115, 52,107,196,159, 49, 77, 14, 96,107,105,219, 6, 6,134,134,148, 2,123,101,201,171,164,232,229, 72,236,225,116,105,172, 1, + 68, 82,153,146, 8,209,193,189,197,125,216, 5,209,137, 11, 55, 3, 3,137, 11,158,231,239,157,222,177, 17, 11,236,253,239,190, +191, 79,148,130, 39,148,163, 65,128,205,155,186,234,154,109, 99,118,228,143, 97,237,223, 45,124,206,162,164, 13,237,170, 50, 5, +189, 54, 86,104,239,133,245,103,148,217,193,133, 99, 76,203, 40,113, 44,210,194,102, 15,111, 63,126,246,226,249,235,151,175,196, +177,248,223,248,190,140,166, 23, 71,143, 16,207, 57, 57, 27, 77, 55,213,150,136, 94, 33,246,169, 32,210,210,212, 42, 12,107, 5, +109,218,106,212,192, 8,184, 72,194,229, 17, 24, 82, 67, 36,114,152,111,144,250, 0,124, 14,168,129, 3,150,251,131,147,179, 79, +223, 62,178,125, 27, 67, 22, 64, 18,232,227, 88,253,148,126,133, 56,127,208,218,247,157,223, 68, 49,116, 67,139, 19,227,118,206, + 24,110,165, 75, 0,105,128,244, 81, 14,133,211, 95,193,138, 84, 66,252, 33,114,134,216, 32,157,108,202,141, 87,148,239,173, 92, +221,128,217,251, 69, 55,141,103,133,217,176,144, 14,155, 66,141,162, 73,222, 22, 19, 53, 46,174, 58,100,244, 22, 37,215,135,109, +247, 74, 58,191, 4,224,236, 90,118,155, 6,162,168,199,227,216, 73, 28,229,213,208, 80, 16, 66, 66, 66, 98,139, 84, 22,124, 60, + 72,136, 47, 96,193,174,136, 8, 40, 37, 36, 77,136,227,183,199, 30,238,185, 99,187,142,218, 13, 72,221, 85,137,237,241,228, 62, +206,156,123,142,243, 79,176, 76, 23,121,215,141,231,134,213, 81, 20,192, 65,182,116,205,152,227,131,133, 47,175,163,107,238, 41, +181,212,136,135,214,244,201,132, 84, 91, 74, 11,115,163,178,185,132,236, 40, 71,114, 28,150, 40,141,249, 15,138, 84,224, 31,130, +106, 72,223,152,177,207,167,104,160,183,182,125,233,170,255,220,167,242,151,166,189,208,218,122,232, 61,181,159,116,192,162,165, + 82, 46,111, 83, 0,178, 58,108, 76,184, 98, 96,116, 26,140, 24, 4, 58,118, 71, 54,110, 95,150,237,209, 47, 7,232, 70, 69,109, +168, 80,236, 54,105,219,141, 64,134,161,134,212, 1,126,226, 45, 14,217,150, 23,148, 91, 2,100,121, 0, 56,149,131,143, 10,135, +194, 4,101, 7, 47,164, 98, 67,137, 93,148, 83,201, 34, 7,162, 44, 89,220,197,238, 77,198, 30,212,105,139,114,234, 15,166,190, + 95,168,236, 98,121,190,249,177, 10,246,234,215, 14, 92,122, 85,128, 37,161, 89,210, 5, 92,202,186, 55, 68,222,227, 39, 48,214, + 49, 44,112, 43,152,112, 36, 36, 5, 35, 10, 55,245, 11,178,165,174,202,142, 90, 54,183,209,182,227, 58,189,180, 76, 12,208, 77, +181,204,194, 95,110,195,117, 65,249, 15,121,141,193, 18,221, 64, 89, 66, 40,120, 9, 10,109,170, 83,148, 45, 72,127,127,194,173, +105,111, 92,199,165,232,140, 35, 74,149, 24,181,119,115,186, 53,116,168,185, 86,204, 63,170, 55, 97,156,135,223,182,241,168, 63, +234, 58, 55, 48,193,185,234, 99, 8,153, 27,112,141,230,142,246, 73,174,114, 28, 28,128, 41,193, 60, 55,152,125,239,206,198,203, +221,113,227,247,125,145, 0,124, 85,133, 10,162, 80,233,114, 27,173,217,200, 5,158,160,203,217,147, 40, 13,169,140,154, 14,199, +171,205, 87, 7, 86, 45,242,152, 4,158,219, 75, 97, 37,104, 69,105,162, 97,196,136,200,195, 45, 3,174, 69,139,226, 97, 4,247, + 96, 90, 33,102,248, 21, 73, 22,211,190, 85, 54, 88,179, 51,127,118,136,246,103,227, 5, 69,180, 36, 75,158,206,159,209,243, 70, + 89, 92,162,185,194,217, 33,173,198,227,233,249,207,253, 53,122,142,188, 80, 50,159, 13,166, 81, 26,163, 31,108, 16, 27,174, 39, +141,239, 52, 93,110,112,155, 30,251, 56,139,178,125, 33, 39,125, 15,225,222,194, 17, 45,108, 69, 5,189,151,220,233,249,175, 94, + 60,255,240,249, 83,146, 38, 18,148, 98,232,217, 30, 85,145,194,233, 69, 95,229,233,137,193, 27, 70,142,149,129, 22, 80, 13,168, +187,113,161, 88, 7,193,234,176, 57,220,190,251,248,254,237,235, 55,255, 81,191,103,149, 26, 13,253, 52,130,109, 58,237, 46, 99, + 93, 13,153, 66,214,143, 59, 38,140,245,105,106,124,138,146,241, 16,102,140, 72, 85,101,230,126,120,242,137,145, 19, 65,219, 32, + 51,113,179,103,203, 71,243,139, 47, 55, 87,244, 63, 46,213,245,229,203,203,155,253,250,122,247,189,198, 12,153, 9,209, 6,116, +155,195, 50,211,225,106,146,119,213, 29, 3, 53, 7,114,134,163, 44,140, 72,184,254, 29,172,185,108,183,235, 6, 87,212,102,172, +214, 9, 79,253,132, 93, 77, 11,151,232,180,210, 13, 8,108, 30, 85, 48, 53, 65,212,136,143,249,142,176, 8, 40,169, 79,134,115, +150,168, 67,196,143, 88, 82, 24,148,144,234,142,247,221, 70,164,242, 94,196,239, 26, 87,253, 21,128,179, 43,217,109, 26,138,162, +126,207,142, 29, 39,206,156,166, 32, 90, 90,129, 84, 36, 36, 86,236, 89,194,138,191,224,227,248, 4,118, 44,145,250, 1, 72,116, +133, 82,134,210,212,153,236, 56,158,205, 61,247,121, 72, 89, 85,100,153, 73,201,243,245, 29,207, 61,199,248, 15,121, 38,113,111, +103, 85,145,247, 22,149,164,170, 81, 98,225,121,236, 93, 52, 99,138,166, 69,196, 8,111,128,100, 76,198,201,128,220,178,121, 93, + 24, 0,243,136,186,203,160,151,221,118, 69, 14,204,141, 93,164, 81,104,184, 75,166, 44, 5,219, 11, 68,140,209,122,103,180,140, + 48, 53, 61, 42,118, 18,172, 64, 21, 75, 68,229,221,107,165, 46, 89, 99,143,170,228, 61,123,128, 32,120, 69,224,163,246,105,217, +226, 81,205,150,140, 88,252,243,200, 3,243,178, 62, 82, 94,202, 59, 10,163,101,145, 29, 82, 69, 75,190, 44, 13, 67,150,167,148, +172,173,205,138, 96, 89, 86, 31, 76, 37,101, 12,151,190, 72,254,148,145,153, 35, 1,125, 42,229, 62, 49, 14, 65,151,148,167, 82, + 89, 66, 57, 47,221, 0,155,253, 62, 73,149, 86,148,180, 90,200,182,218,166,121, 52,104, 71, 1,157, 97,114, 58, 61,190, 56,127, +220, 31, 58,102,203, 8,109,251,187,231, 50,128, 12,112, 0,172,123,169, 44,151, 87, 67, 40, 69,146,220,147, 1,151, 3,255, 23, + 86, 83, 83, 84,121, 5, 24,203, 48, 47, 41,213,172,232,195,142, 61, 96,230,128,162,225, 3,197, 55,165,162,198,147,106,210,110, +219,210, 23,149,137,151, 11, 3,150,217,181,117, 11,139,121,226,223, 10,143,215,252, 48, 17, 24, 59, 83,242,122,144,204, 53,200, +169,237,135,189,177, 23,120, 26, 35,147,168, 40,161,194,227,116,116,246, 99,121, 77, 46,111,214, 63,158, 67,160, 81,163,108,186, +228,219, 46, 45, 7,179,153,148,135, 94,234,230, 45,233,176, 52, 6,231, 72, 83,104, 65,144,236,216,144,116, 6,175,138,136, 28, +132, 16, 23,179, 23,223,126,127,165,232,242,236,232,249, 54,218,110,253, 53,218,109, 20,174,210,184,215, 25,108,130, 13, 88, 98, +210, 66, 55,129,113,116,253, 59,141, 91, 0, 74,175,142, 14, 99,208, 25,144, 69, 46,214,139,118,155,106,106,236, 1,100,153,207, +213, 23, 40, 43,116,230,228, 25, 57,227,165,239, 38, 9, 40,226,188,112, 67,207,108,130,173, 0,195, 32,232,207, 82,228,199, 49, +253,226, 56, 15,135,206,196, 11, 86, 63, 87,191,232,210,196, 73, 36,233,210,199, 69,127, 50, 60,153,158,204,111,175,193,190,194, +132,173,148,217,244, 76, 42,173, 86,100, 23, 79,156, 71, 87,203, 27,214,114,145, 42,193,129,150, 10,244, 2,121, 27, 80, 10,138, +142,175,158,158,125,120,255,238,229,249,236,227,167,207, 19,211, 54,208,244, 3,160, 23, 43,120,236,120,226, 44,119,147, 56, 76, +211, 47,139,155, 24,187, 29, 90, 3,215, 19,135,120, 98,163, 63, 26,144,125,116,133,253,246,245,155,131, 44,234,161, 15, 63,221, +123,209,110,214,155,144, 37,135, 57, 64, 74,170, 59, 97, 74,157,206,132,243, 62, 53, 1,130,165,182, 76,203,177,250,183,254, 45, +147,189,227, 70, 33,115, 29, 58, 99,170,219,130,112, 71, 69,172, 10,115, 20, 41,231,119,115,186, 61,122,237,238, 62, 10,233,109, +151, 87,151, 12,255,208, 11,113,160,205,161, 18, 39,158,200,140, 58,163,245,206, 21, 8,207,247,244,170,181,106,114,169,250,150, + 37,237, 12,187,147,170,144, 40,212,119,228, 53,144, 81,171,157,138,104,242,105,141,183,196, 48, 62,227,254, 96,227,217, 21,199, + 65,165,191,170, 24,100, 0, 29,202, 93,223, 85, 10,171,138,189,148, 14, 38,206, 34,181, 32,217,144,136,149,126,163,217,110,205, +235,136, 82,117,135,254, 10,192,216,181,244, 54, 17, 3, 97,239,203,187,117, 18, 30,109, 41,165,165,173,160, 74, 91, 14,220,144, +144,248,183,252, 11, 78,156, 81,185,241, 16, 15,169, 52,106, 90, 9, 74,178, 73,154,100,211,236,174,109,230,225,236,166, 8,164, + 74, 57, 68, 81,228,172, 29,123,102, 60,243,205,247,133,183, 49,235,226, 95,108, 4,139,154, 42, 39,199, 61,199, 14, 70, 56, 65, + 12,231,109,224, 45,227,101, 28, 23, 0,166, 39, 16,175,140, 45, 53, 24,130,149,122,110,107,120, 3, 47, 76, 64,222, 85, 56,121, +166,154,255, 29, 89,119,177, 5,135,196, 68, 49, 61,205,146, 25,150,168, 78, 40,198, 37,189, 66, 36, 63, 24, 35,177, 20,198,112, +173,184, 53,200, 82, 81,211, 80, 44,209, 77,220,112,176,203,117, 2, 62, 11,246,127, 62,143,242,213,186,158, 88,189,208,248,202, +137, 37,220,181,107, 81, 79,154, 21,132,100,247,104, 82,134, 21,254,108, 18,169, 18,155, 86, 52, 39,181,204,242,190, 98,136, 55, +210,118, 80, 55,174, 71,106,127, 96,233, 53, 73, 22, 97,113, 56,204,230,229,215,225, 4,174,222, 94, 20,123,216, 87, 4,187, 57, +184,171,164, 68,102, 6,175,225,135, 74, 69, 66,202,231, 7, 79, 35,169,227,192, 7,163, 63, 31, 93, 79,103, 37,222, 60, 92,194, + 22,172,177,149, 86, 53,131,102,232, 39, 9,217, 1,159, 10, 92, 87,229, 32,205,251,196,163, 18,104,199,211,131,156,126, 84, 44, +176,142,132, 89,211,149,148,242,155,180,255, 80,186,214,242, 63,207, 96, 93,171,187,189,206, 74,184,130,121,103,207, 86, 80,171, +235, 60, 43, 60,132,226,135,156,240,112,183, 85, 74,105,209,252,247, 55,246,187,189, 51, 24,112, 58,155,160, 89,180, 84, 73,195, +226,128,175,226, 70, 73,236, 82,231,253, 14,140, 56,203, 39,195, 44,226, 77,182,179,190, 11, 22,159, 58, 6,145, 84, 18,140, 53, + 12,199,114,104, 44,116,131,204,225, 30,220,234, 48,151, 50,198,108, 9, 22,102,225,199, 11, 91,142,178, 33,124,105,154, 79, 96, + 89,206, 7,231,176,235, 58,189, 78, 64,201, 28, 48, 46,202,151,115,115, 13, 33,219,131,230, 26, 60,237,225,246,225,241,247,119, +176,135, 7,227, 20,158,229,101,251,197,241,201,123,240, 7, 84,210, 40,145,191, 72, 4,237,199,109, 37,213,233,229, 41,132,228, + 79, 54, 14,190, 92,124, 54, 84, 74,201,209,129, 22, 5, 74, 24,218,149, 72,129, 93, 6, 23,130,202,148,216, 19, 31, 17, 67,225, + 21, 27, 16, 44, 43, 51,254, 65, 32,157, 4,248,140,205,123, 15,127,141, 80,136,252,132, 8, 53, 81, 59,204,115, 92,165,196,161, + 88, 82,129,222, 68,129, 92,141,239,156, 77,251, 16,194, 27,214,180,168,161, 0,120, 38, 97, 29,126, 92, 94,124,235,116, 63, 93, +254,252, 48,248,189, 41, 27,177,143,138, 96, 42,138,154,161,108, 37, 50, 14,240, 42,188, 5,239, 67,217, 43,242,143, 61,164,207, +244,168, 13, 71,219, 27, 50,118, 82,196,162, 41,118,182,183, 76,168,197, 81, 2,159,188,125,253,230, 81,123,247,217,171,163,219, +155,120, 3, 43, 95,102, 37,241,118,193, 82, 20,212,160,159,163,104, 78, 21,158, 17,106, 69,160,180, 20, 65,101, 48,148, 34,202, + 95,132,191,130,219, 43,117,161,133, 94, 42,246,113, 85,148, 96, 96, 6,183,149, 13, 22,120, 56,193, 46,128, 2, 1, 35, 22,168, + 66,131, 25, 51,171, 3,215, 27, 90, 33,229, 42,117,110,235, 8, 42,249,236, 18,255, 29,216, 96,149, 40,120,128,140,246, 24, 12, +118,191,177,150,142,241,206,189,214, 90, 79,167,169,173,200, 8,248, 18,224,210, 25,102, 65,238,104, 88, 87, 96,225, 18,248,100, + 85, 72, 13,127,111,117,239, 44, 61,117,173, 80, 92, 30, 96, 43,102,106, 93,210,133, 68,201, 95, 86,154, 51,252,110, 22,127, 4, +160,236, 74,122,148, 8,194,104,117, 55, 13,205, 54,192, 32,203, 56,204,104, 60,248,123,253, 47,158,188, 27, 19, 15, 30,212,152, + 49, 49,144, 89, 18,134,129,129,102,105,104,122,171,242, 91,170, 88, 34,154, 8, 55, 72,122,171,174,111,125,223,123,185,127,155, +245,191, 25,119,195,242,200,236,200, 36, 88,164, 5,106, 73,231, 82,232,214,133,109, 10,239,216, 53,112,248,209, 96, 36, 75,163, +170, 60,138,206,232, 78,219, 44,129, 67, 23,141, 4,238,182, 33, 36,179, 52,150,134, 71, 67, 24,176, 65, 39,194,252, 20,118,128, +179, 70,158,104, 81,116,145,252, 4,182,194, 44, 94, 38, 18,147, 53,204,133,147,144, 43, 16, 7, 64,191,211, 1,134, 50,158, 80, + 25, 29, 47,221, 46,166,161, 28, 56,148,117, 34, 15, 58,234, 54, 27,148,134,230,180, 97,101, 93,102,118,102,178, 82, 45,189, 34, +109, 30,106, 96,121,201, 67, 32,169, 38,121,150, 34, 19, 90,216, 91, 34,230,175,184, 77, 2, 7,252,162,147,229,133, 39,101, 12, +113,224, 83, 28, 85,107,197,235, 74, 13,130, 97,240,123,176, 43, 54, 81,226, 74, 71, 69,118,185, 96, 85,243, 56,246,133,162, 25, + 56,127,151, 21,171,213,237, 42,254,214,127,132, 39,150,226, 39, 70, 56, 86,230,149,212,153,107,229, 80,166, 68, 46, 3,216, 5, + 16,149, 34, 50,189,220,241,122, 23,197,203, 95,193,207, 40, 11,193,216,161,245,176,144,221, 63,219, 61,122, 11, 76,103,232,240, + 53,146, 63,175,151,207,225,247,121, 48, 37,170,235, 2, 77, 5, 83,161, 29,156,110,150,149,220, 42,118,115,137,174, 29,190, 16, +133, 5,161,143, 98,217,185, 28, 21, 76, 84,171,218,158,111, 22, 44, 99,115, 59, 25, 48,203,147,133,136, 32, 79,133,184,115,214, +209, 10, 78,214,169,181, 71,254, 35,164, 71, 30,162, 96,237, 48, 89, 47,195, 5,118, 91,149,122,120,190, 51,124,122, 72, 86,110, +241,240,160,165,185,151, 25,190, 11,171, 81,204,151,192,154, 95,158,247,102,235, 41, 34, 35,147, 77,194, 19,237, 74,119,210,130, + 45, 98,207,131,112,197, 47, 4,166, 75, 68,202, 3,119, 9,145, 59, 44,200,167,155,143, 68,147,130,122,187,105,148, 14,231, 99, + 92, 97, 34, 12,225,169, 55,199,113,225,249,222, 60,124,201, 57,232,156,186,141,118,170,146,193,104, 32,205,102,164, 82,137, 32, +186, 30, 30, 40,176,225, 54,123,141,235,219,231, 62,242,236, 88,170, 91,127,233, 47,167,112,180, 49, 77, 54,213, 75,205,229,102, + 62,244,135,229, 66, 57,198,206, 4, 78, 53,216,182,126, 63,109, 65, 67,103,106, 11, 57, 4,146,156,101,233,219,230, 21,216,247, + 20,217,105,181, 6, 52,201,134,226, 29, 38,168,155,154,125,157, 12,222,189,255,240,249,254, 7,218,104, 88, 91, 8,222,113,168, +194, 41,216,110, 35,242, 94, 84, 32, 54,200, 19, 0, 69,189,170,212,190, 79, 70,166,209,119, 28,187,195,121, 69, 12,111,199,235, +171,107, 77, 61, 44,172, 32, 88,189,233, 94,252, 87,137,102,186,242, 59,103,205,221,240, 96, 62,231,182,106,173,254, 83, 31,197, +235,227,109,130, 53, 46,193,250,105,146, 25,144, 48,207,197,233,188,130,227,165, 89, 56,223, 46,148,201,158,143,180, 47,176,112, + 23,238,229,220,132, 78,183,181, 9, 76,181,219, 35,178, 26,177, 8,125, 66, 71, 72,166, 88, 63, 4,206, 33,214, 14,108,140, 52, + 42,110, 24,113,235, 62,134, 46, 31,113,119, 70,234,158, 40,252, 49, 94, 78,132,250, 3, 91,205,158,132,162,111, 29,207,217, 16, +144,213,252,245,108,231, 50,229, 94,155, 91,221,207,238, 36, 21,128, 12, 95,150, 98, 80,166,117, 58,240, 52, 71, 80,123,132, 60, +175,213,111, 1, 40,187,186,214,166,161, 48,156,156,124,158, 52, 93,167, 93, 55, 5,189, 80,135,130,168, 56, 17,241, 70,255,133, +255,192, 75,127,151, 55,130,224, 47,112, 12, 20, 68, 4,175,100,140, 93,140,185, 41,155,149,174,105,147, 38,105,147,227,251,188, +111, 50,170,187, 18, 66, 97,109,215,143,211,243,126, 63,231,121,212,127, 17, 18,180,214,109,206,157, 59,221,186,140,102, 1,140, +193, 10, 59, 42,142, 85, 55, 82,221,142,211,141, 28,237,131, 86,203,245, 12,237, 23,159,254,244,128,117,241, 92,186, 81, 30,116, +120,109,233,199,128, 78,247,156, 78,129,174,128, 50, 79, 76,125, 93, 3,119,239, 72,101,192,132, 51,192,161, 48,253, 46,163, 74, + 28, 24, 54,159,243, 71, 58,221, 72,183, 24, 27,157,107,238,226,245, 87,214,133, 11,174,129,193, 90,194,252,127,113,109, 80,245, + 47, 47, 19,101,253,190, 19,202, 42,185,224, 50,116, 47,180,226, 47, 94,141, 90,235, 90, 60, 88,134,160,154,166,128, 99,230,119, + 52, 84,109,249, 48,105,145, 66, 21, 68, 34, 59,207,231,155, 75,148, 3,248, 46, 25, 77,164,101, 34,240, 91, 3,204,123, 41,219, + 43,116,221, 65,164,181,227,155,185, 59,207,157,122,230,155, 50, 72,210, 58, 70, 13, 27,240, 30,178, 41,234,157,156, 14, 33, 39, + 59, 74,118, 62,124, 54,140, 40, 39,111,126,255,218,163,171,209,102,183,234, 21,243, 98, 92, 36,179,138,234,128,140, 2,225,172, +154,229,139, 44, 43,167,227, 98, 20, 40,255,118,239, 14, 18,108,200, 79, 43,218,136, 18,178,123,225,138, 66,111, 77,218,233, 88, + 90, 46,114,173,113, 54, 34,143,105,184,251,230,129,132,145,235, 12, 11, 58, 38, 32,214, 40,161,157,201, 28, 27,248,110, 89, 49, + 97,193,109,104,107,112, 82,164,126,165,195,154,169,162, 4, 72,202,169, 60, 86, 44,159, 23,148,132,157,140,143,121, 64,106, 40, +117,125,112,227, 33,243,180,148,244, 10,171,157,190, 76, 89, 90,205, 93,133,204,142, 66, 93,153, 9, 15, 22,228, 6,193, 13, 0, +244, 14, 3, 52,225, 62,158,221,125, 94,128,186, 82, 77,138, 73,201,115,206, 86,183,184, 81, 48, 14,124, 48,181, 61,222,124, 18, + 6,154,226,241, 36,159, 96, 70,199,182,163, 32, 11,230, 14,122, 27,244, 35, 92,138,215, 60,207, 63,252,125,136,162,204,182,103, +249, 84,123,218, 6,187,108, 78,233,255,198,234, 21,223,163, 45,164,182,191,109,239,253,216,147, 57, 59, 5,170,200,215,229,162, +160,112,200,178, 12, 24,129, 80,184, 13, 92,189,123,188, 75, 91,142,108,131, 62,249, 89,122, 22,133, 49,251,111, 59,214,241,156, +115,115,178,175, 56,136,201,104, 98,221,145,105, 4, 79,121, 80, 5, 27,196, 12, 83,178,151,165, 72, 31,248,157,235,157, 62,216, +195,129, 63,198,150, 2, 61, 2,115, 63,131,211,221, 54,244, 30, 9, 72, 28, 40, 1,183, 10, 3, 70,135,108, 81,156, 21,249, 48, + 79,143,210,228,231, 52, 97,145,116, 83, 44, 22,235, 94,184, 18,117, 68,242, 89,253,229, 73, 56, 5,181,230, 7, 95,246,135,211, +209,247,211,227,163,175, 7,244,216,251,143, 59,175,223,189,165,135,182,182,158,134,122,181,197, 97,252,147, 58,186,145, 30,220, +186,121,239,229,139, 87, 59,111, 62,245,245,101, 7,195,109,159, 27,151, 56, 49,130,189, 1,167,128, 49, 12,115, 93,227, 16, 94, + 9, 13, 61,244,229, 41, 88, 86,236,235, 51, 64,117, 25, 43, 89,155, 22,144,222, 30, 8,109,245, 52,205,178,101, 53,137,176, 32, +226,219,210,160, 18,195,106, 44, 78,134, 12,205,177,169,246,255, 61, 5, 16,109, 37,160, 97, 6, 72,214,208,249,210, 13,118,165, + 81, 22,182,134,147,211,186,109, 43,183, 76, 4,102,233,221,107,102, 27, 65,100,170, 4, 69, 98,192,118, 41,113,183,110,248,125, +228, 60,150, 48,127, 52, 20,145,109,104, 18, 46,131,165, 52,148,193,162, 75, 95,154,239,177,106,115, 78,232,204, 79,254, 35, 0, + 95,215,210,218, 68, 20,133,231,206, 35,243, 72,211, 73, 76,169, 77, 83, 75,105, 5, 45, 46, 44,186, 22,193,181, 75, 87,234,162, +136,184, 18,127,162, 75, 95,136, 40, 21,164, 18, 41,181, 32, 36, 41,109,211,121,221,121,220,185,158,115,238,204, 52, 85, 49, 12, +100, 51, 33,115,239,156,115,238,121,124,231,124,250,255, 45, 59, 57,176,170,189,104,222,184, 27,236, 34, 57,131, 12,215,224,229, +185,204, 51, 53, 11, 34,157,160, 8,130, 98,134,152,132,210, 29,122,107,125,183,111,226,204,115,203,179, 61,100, 15, 5, 71, 65, +218, 45, 13, 65,141, 38, 78, 65, 36,208, 31,166, 32, 12,197, 88, 88,179, 56, 89, 42,151,100, 82, 54,159, 50, 22, 42, 42,192,176, +148,170,140, 90,149,202, 38,167,194,160, 41,228,240,168,169,136,195,252, 84, 16,162, 96, 18,254, 42, 74, 53, 76,188,238, 25, 83, + 36,135,151, 42, 16, 20,105,154,206,252,210, 81,243, 41,113, 4,135, 19, 23,121,148, 39,108,222,107,249,183,125,151,196,205, 46, +198,225, 84,252,137,163,172,135,239,211,168, 10,196,202, 10,166, 53, 36, 46,229,165, 11, 75, 96,245, 71,145,207,148,178, 78,110, + 35, 25,152, 80,118, 22,188, 74,158,139, 40,198, 43,137, 33,116,149, 57,135,136,148,117, 28,208,127,211,177, 53,216,107,183, 5, + 86, 69, 11,206, 38,223,190,142,162, 56, 53, 88,213,167,241,113,255,203,201,241, 44, 42, 56, 50,153,148,160,202,130, 4, 16,191, +114, 77,164, 34,229, 5,172, 63,232, 89,189, 69,179, 71, 79,205, 56,150, 4,209, 39,206,178,148,232, 4,212, 36,103,166,160, 64, +142, 97,227,104,123,124, 57,224,236,151, 25, 22,202, 52,226,168,106,129,235,143, 99,144,117,194, 66, 17, 89,138, 78, 80, 98,250, +185,126,165,189, 68, 0, 65, 93,117,216,234,106,124,100, 29, 3,193, 14,224, 96, 31,157,217,134,109,235,246, 85,127, 0,174,241, +135,239,239, 36, 97, 74,121, 22,130, 87,251,151,208,234, 75,157,190,161, 53, 8, 55,217,245,186,219,195,237,237,225, 77, 73, 72, +158, 92,164, 63,198, 35,240,215,176,158, 75, 34,224,210,216,156,198, 50,192, 50, 61,203,131,195,230,112,122,144,166, 73,157,142, + 66, 46, 26,234, 6, 40,121,154, 77,102, 99,208,210,159,199,135,109,167, 77, 61, 0,186,215,106,131, 64, 70, 89, 72, 19,148, 81, + 53, 64,230,179, 60, 67,254, 39, 16,126,211,116, 44, 7,100, 9, 14,245,245,165,245, 69,215,223, 90,217,244,189, 69,158, 39, 29, +223,127,244,240,201,116, 54, 69, 63, 17,222,105,138, 7, 94,150,167,231,124,134, 8, 93,166,135,113, 20, 37,193,160,191, 2, 97, +218, 36, 64, 78,243,128, 39, 92, 80,129,145,114,182, 11,118, 27,179, 67,148, 18, 43,201,129,140,139,236, 90,119, 85, 96, 38, 90, + 86,194,143,164,166, 76,157, 81, 52,251, 25,124,219, 76,217,234, 2,137, 60,132,160, 12, 15, 28, 99,113,202,199, 97, 52, 1,113, +145, 96, 79,241,246, 59,253,101,234,101,107,184,238,101, 51,110,106,224, 14, 54,238, 94,223, 25,110,221,222,188,177,182,179,177, +236,173, 62,184,127,111,247,229, 46,108,200,167,247,111, 95, 61,126, 81,223,137, 12,111,252,156,127,126,189,183,214,185, 21, 29, + 68, 81, 60, 25,189,217,123,254,244,217,209,254, 17,196,100,240, 38, 64,197,176, 50,164,149, 60,231,103, 88,122,113, 78,162, 83, +108, 28,101, 10,117,142,129,160,239,246,156,150, 35, 36, 25,125,202,110, 40,170,210,234, 12, 80, 6,180,177,203,149, 14,177, 11, +253,172,202,154, 13, 2,184,186,167,129, 62, 10, 20, 54, 11,115,250,110, 79,181,229, 41,128, 27, 28, 36, 9,132,184,132,142,196, +122, 46,185,100,158,211,174, 49,151,180,195,130,254,130,169,127,199,205,204,101, 65,120, 88,217, 92,213,243,168,100,189, 84, 29, +170,196, 81, 73,150,189,113, 27,225,237, 44, 56, 29,165, 4,216, 36, 36,217,124,135, 14,173,163,154, 28,175, 88, 97,155,171,172, +167,154,149,115,182,255,183, 0,132, 93,203,110,211, 64, 20,245,140,147, 58, 73,235, 80,212, 22,181, 85,186,233, 6,181,176, 97, +193,227, 15, 88, 32,241, 53,176,228,123, 16, 27,118,252, 0, 18, 18,160, 74, 93,176, 0, 9, 81, 41, 33, 73,227,198,169,155,120, +108,199,175, 49,247, 97, 59, 45, 15,145, 69, 36,203,146,101,143, 61,247,125,206,249,127,253,189,221,176, 20, 66,236, 42, 94,145, +178, 38, 83, 6,212, 68,138, 40,187,166,141, 2,205, 34,169, 90, 12, 16,123, 38,110,234,154,161, 56,222, 62, 50,108,227,204, 63, + 83,137,178, 36, 70, 70,185,196,105, 69,236, 40,195, 39,141, 92,200, 57,226,230, 11,238, 38,240, 28, 56, 24, 50,109, 33, 11, 77, +205, 2, 79, 30,128,251,139, 52,178,202, 25,120,132,192,250, 6,241, 32,173,109, 52,219,176,136,125,117,150, 19,119,168,166, 65, + 24, 8, 47,117,206, 34, 40, 90,148,171, 80, 38, 47,162,214,243, 32, 45, 93,227,183, 86, 48,181, 14, 33,158,202,210,236, 79, 42, +180,127, 20,120, 74,135, 46,145,136, 79,139,107,156,107,152,222, 23,200,107, 1, 15,145,162,231, 16, 37,192,161,242,177,178,170, +213,233,170, 83, 80, 9,196,176, 85,198,101,110, 72,184, 50,206,180,192,195,111,117, 91, 4,158, 38,129,195, 38,146,253,118, 52, +108, 96,179, 99,129,133, 77, 45,115,109,127,111,215, 95,132,219,182,173, 46,166, 3,199, 73,225, 44,198,100, 56, 43,218,149,183, +177,185,132, 50, 76,102,202,112,104, 66, 85, 83, 17, 93, 35, 1, 58,188,190, 28,165, 47,123,118,239,171,231, 34,159, 51, 33,114, +137, 76, 38,167, 80,153,132,180, 5,231,171,162,179,190,145,248, 9,223,117, 65,185, 14, 87,229,145,109, 33,203, 89,178, 83,144, +182, 9, 1, 29,120,102, 8,147, 96, 63,154, 35,145, 92, 81,201, 40, 74,142, 39,164,161,117, 13, 9,198, 66,252, 82,193,225, 84, + 77,236,150, 29, 70,138, 24, 25, 52,121,223,154, 44, 97,245,131, 52,226,250,208,216, 60,154,123,161,135, 89, 8, 82, 64,103, 73, +172,195,116,218, 16, 66, 84, 45,114,180,107, 16, 65,175, 89, 45,179,189,136, 17, 92,234, 42, 23, 46, 16, 36, 17,111, 21, 73, 38, + 3,251,186, 69,218,105,172, 47,145,135, 93,146,160,128,118,253, 41,135, 62,142,239, 48, 90, 23, 22,170, 73, 53,162,177, 55,134, + 19,150,176,112,200, 93, 8, 21,242,109, 47,251, 23, 3,136,129, 38,222, 68, 45, 3, 88,246, 43,239,242,237,187,215,132,131, 48, + 14,119, 15, 79,127,156, 50,133, 38, 15,239,181,173, 22, 35,147, 71,179,177, 73, 80,222, 56,139,239, 29, 28,143,103,163, 40, 9, + 25,192,131,242, 32, 20,232,101, 84,128,134, 27,133,135, 61,218,189,219,159, 59,253,197, 68,211,112, 84,110,172, 0,238, 76, 21, +117, 25,135, 21,212, 28, 95,138,198, 22,145, 36,160,191,240,147,120,162, 22, 12,179, 8,179,108,143,148,108,145, 28,159,112, 85, + 44,105, 12,129, 67,158,230,152, 64, 27,198,119,103,208, 92,111, 25,161, 17,132,193,167,147,147,157,222, 62,124,197,206,183, 33, +239,187, 39,247, 31,125,252,242,225,217,195,167,167,111, 62,159,159, 95,189,122,249, 98,116, 53, 82,239,131,173,238,230,227,231, + 15,126, 14, 33,251, 49,238,108,236, 92,168, 41,236, 88,240, 54, 16,164,131,101, 71, 22, 96, 10, 31,240, 34, 40,227,131,114, 46, + 81,180, 36,144,156,193, 84,187,186,226,100,212, 43,193,162,178,193, 88,150,219,152,136,171,184,209,246,173, 43, 52, 55, 48,149, +213,193,173,206,230,185, 23,204,130, 25,141,115,153, 55, 10,176, 5,227, 34,113,210, 57,208,241, 20,133, 92,114,174,160,144, 31, + 64,197,199, 20, 25,164,152,249, 92,244,182, 14,134,238,160,248,123, 27, 79,212,230, 90,214,213,121, 81,218, 2,248, 35,153, 10, + 60,132,108, 15, 94,116,182, 66,134,179,133, 40,171,244,245,131,107, 99,213, 97,212,171, 41, 24,244,255,191, 4,160,235,218,118, +155, 6,130,168,215,123,177, 19, 59,206,165,137, 41, 72,129, 22,209, 86,226, 82,169, 72, 72,252, 0,223,193,115, 95,248, 6, 36, + 62, 2, 1,253, 7, 94,248, 0, 30,144,144,144, 80, 37, 30, 64, 8, 21,149,182, 20,209,166,165,181, 19,219,185,216,203,206,236, +198, 73,139,136,242,150,200,241,122, 99,207,153,153, 51,231,216,255,171,198,204,122,220,227,196,158, 35,236, 19, 67, 85, 52, 51, + 77,192,144,181, 61, 79, 4,129,240,125, 86, 19,196,197,186, 10,224,250, 5,214, 12,189,144,131,242, 87,112, 63,220,184,217, 88, + 81, 87, 7,212,124,168, 83, 1,239,151,138, 67,132, 32,142,144, 66,221, 6, 42,113,166, 80,189, 97, 54, 88,215, 49, 44,236,168, +252, 81,184,196,229, 68, 48, 32,188,131,102,170,186,173, 0,137, 0, 77, 5,196,103, 80,197,139, 84,152,240, 84, 78,109,147,221, +120,103, 92,100,208, 56,132,148, 20,186,151,197, 68, 79,141, 21, 40,162,175, 81,188,197, 84,182,193, 43,179, 74,190,233, 21,203, +127, 76, 59,172,236, 2,114,159, 53, 98,103,238, 45,151, 63,149, 56,160,236,217,243,114,254,198, 57, 0, 52,188, 0, 50,207, 49, +232, 75,107,247, 98,174,225, 91, 38,116,101, 45, 17, 68, 8,138,153,129, 44, 40,161, 19, 89,243, 88, 43,176,175,182, 89,187,201, + 59, 77,218,172,211, 70,128,155, 94,216,119,215,214,174,180, 59,205, 90,157,244,211,189,159, 7,100, 24,209,225,159, 73,122, 58, + 72, 78,162,228,244,112,244,173, 71,190,166,116,199,117,247,124,183, 39, 88,106, 3,181,131,169, 31,225, 24,182, 1,213,163,129, + 61, 7,205, 72,163,153,109,172,205,137,197,128,187,230, 9,206, 75,255,224,104,112,106,193,156,130, 61, 29, 73, 53, 54,126, 30, +247,169,150, 76, 6, 17, 5, 10, 24,214,162, 18, 89,240, 0,245,129, 29, 74,253,170,135,157,116, 20,132,197, 45,241,157, 26,103, +206,229,176, 9,129, 68, 70, 89,156,227,184,192,234,181, 85, 50,189, 86, 56, 37,144, 19,227,194,163, 53, 94,117, 14,132, 26,203, +104,127, 11,195, 18, 24,109,253,106,128, 49, 19,228, 4, 58,181, 14, 4, 12, 32,161,203,245,238,122,148,157, 33,115, 14,158,135, + 97, 61, 92,240, 91,184,146,226,193,234, 67,117, 22,130, 59, 75,225,173, 59,221,117, 5,237,113,124,166, 80,160, 92,251, 34,163, + 4,172, 94,115,174, 14,219, 93, 88,170,185, 1, 38,253,178, 21,180, 45,115, 57,128,196,168, 22,156,140,210, 28, 8, 30, 63,112, + 66,199, 18,142,195, 57, 95,108, 45,170,239,124,252,190,173, 85, 31,140, 34, 56,145,113, 26, 39,105,210,207, 84, 90,128,122, 58, +136,245, 62, 31,124, 81, 65,139,115,209,242, 27, 48, 43,142, 86,144, 14,227,129, 2,242, 92,168,189, 59, 78,250,111,119,183,119, +146,227,216, 26, 69, 50,139, 45,245, 44, 31,166,214, 40,195,247,208, 82, 11,102,241, 0, 82,159, 17,234,176, 26,113, 92,221,177, +132,146, 78,126,158,101,189,193, 32, 27,143, 85,152, 23,148, 46,249,117,105,166, 41,209, 12, 13, 77,205,136,205,195, 0, 42, 48, +189,253,163,252, 4, 38,213, 7,214,121, 64,157,246, 4, 26,197,242, 56,246,169,120,182,249,244,253,167,119,203,141,181, 55, 31, + 94,223,126,116, 79,172,240, 62,235, 63,127,245,114,243,241,147, 27, 27, 93,117,222, 47,182,182,234, 85,239,119,255,200,116,176, + 12, 88, 37,184, 13, 5, 12, 99,195,223,165,168, 56, 85, 68,173, 68,115,100, 11, 67,107,209, 35,159,185,174,170,228,210, 80,193, +116,138, 50, 5,239,134,244,162,199,248,180, 12,248, 69, 28, 47,141,210, 0, 90, 68,252, 58, 59, 84,167,113,189,179, 76,136,117, + 1,118,227,216,176,195,170, 10,149,143, 39,168,134,143,118,128, 82,215,229, 33,201,206,107,149, 6,148, 51, 11, 67, 36,221,239, +237,202, 18,188, 23,211, 99,153,119, 65,244, 29, 15,222,111,198, 78,212,184,150, 35,160,203, 49,138,170, 87,156, 69,216, 57,159, +181, 12, 75,205,167,146,126, 62,153, 62,220,229, 28, 75, 77, 78, 5, 96,254, 10, 64,216,185,245, 52, 17, 68,113,124,103,187,219, +217, 75,233,133,109,161,128, 33, 24, 1,225, 65, 69, 19,149, 68, 31,252, 0,198,248,137,124, 49,126, 6,159,253, 2, 62,249,102, +252, 2,146, 64, 64,193,128,165,133,162,216,218, 45,183,109,187,221,219,140,115,102,118, 75, 11,137,164,111,125,106,103,207,158, +219,156,243,255,221,112,191, 42,143,234, 0,163, 24,123, 45, 37, 99,145, 50,150,245, 18, 46, 78,103,102, 60, 18,116, 65, 36, 83, +214, 72,218,144, 53, 83,205, 26,204,224,128,237, 29, 34, 20,104, 40, 61, 99, 78,143,227,226,193,249, 79,135,246,212, 8,152, 22, + 68,134, 61,180,128, 15,235,177,195, 85, 96,107, 84, 78,234, 24,168,214,129, 77, 14,138,210, 32,144, 14, 20, 10,216,142, 17, 44, + 62, 8, 0, 33, 40,208,166, 13,149,133, 10,181, 27,116,107,157, 35, 63,236, 83, 78,113,138, 72, 96,229,203,127, 78,127, 67, 75, + 67,204,103, 72,177,106,155,128,201, 5, 65,128,110,158,135,252,207, 36, 17,205,107,227,110,224,250, 81,255,186,139,119,184, 70, +241, 32, 26,168, 41,204, 75,182, 72,166,116, 88, 56,243, 42,230, 80,196, 99, 30,155,153, 31,217, 57,218,140,175,213, 99,253, 10, + 34, 18, 97, 41, 22,174,148, 35,102,107, 0,149,133, 30, 14, 59, 23, 16,125, 68, 48, 88, 20, 6, 44,138,234,219, 59, 63, 88,141, +215,180, 91,223,107, 77,204, 51, 11,143, 80,150, 99,247,227, 85, 38,169, 3, 7, 75, 20,169,175,227,126,222,132,254, 74,232,103, + 72, 84, 80,144,134, 88,184, 69, 26,139,169, 93,210,135, 74, 12, 0,136,116, 32,172, 74, 96,189,192,161, 60, 35,134, 27, 69, 94, +188, 11, 34, 55, 95,194, 19,246,202,147, 50,167,161,200,170,200,166, 12,172, 49, 87, 53, 63,181, 88,105,236,113,116, 43,236, 7, + 48, 95,201,188, 60, 16, 79, 40,177, 50, 48, 36,231, 71,158,227,158, 74, 98,221, 73,220, 88, 39, 39, 69, 57,236,155,242,218,104, +239,120,119, 96,244,115,197, 57,187,123,210, 77, 72, 8, 40, 57,195, 98,110,162,125,222, 18,196, 84,167,231, 68, 81,128, 6, 37, + 18,149, 92,226,246,206, 92, 19,155, 42, 64, 39,220,181,234, 90, 58,165, 90,217,146,101,150,182,234,235,130,100, 45, 46, 48,107, +141, 42, 59,124,215,235,217, 23, 45, 4,215,248, 6,236,184, 99,204, 82,242,114,161,108, 59, 54,212, 40,220, 94,217, 31,233, 5, +110,165,185,203, 2,249,234,226,234,254,113,229,151,125, 40,226,202, 45,107,182,113,222,240,189,126,138, 75, 66, 83,206,176,101, + 79,124,229,246,189,141,131,173,147, 78, 91, 72,173,101,245, 28,123,165,173,177,226, 5,123,177,225,230, 25, 25,186, 49,149,157, +100,143,245,176, 89, 23,228,222,156,153,191,232, 57, 88,209,125,152, 88,247,244,148, 50, 57, 86,250, 92,251,186,214,174, 92,179, +213,212,208, 96, 23,138,251, 49,146,224, 5,197, 27,167,193,232, 8, 6,159,101,136, 20,137,180,221,142,166, 40, 22,136, 68,163, + 7,133, 98, 29,116,152, 17,151,130, 8, 89, 44,193, 74,154,197,254,217,217,153,250,102,245,209,202,125, 63, 37,187,127,237,187, +185,133,249,133, 59, 62,150,202, 82,105,125,111,123,107,227,219,199,245, 79,111,222,191,101,238,207, 66, 19, 99,216, 90, 90, 94, +126,242,252,241,210,195,197, 87,175, 95,190,120,250, 76,202, 72,205,205,230,151,119, 31, 42,103, 7, 10, 31,100,135,174, 11,124, + 66,222,124,138,124,232,118, 65, 60,117, 89,217,197,123,155, 56,109,244,196,182, 26,141, 21,195, 97, 10,150, 7, 41, 51,109,250, + 33, 32,238,146,212, 74,128,181,227, 38,134,192,146, 20,244,130,221,105,211,161,188, 42,238, 4, 74,137,182, 55,183,242,106,115, + 31, 10, 77, 52,186,154,206,126, 8,176,114, 73,188, 52,194,227,182,134,181,174,215, 33,252,229,180, 59, 45,222, 49,139, 17,174, + 34,147, 79,132,204, 57,224, 80,112,232, 46,137,128, 8,230,128, 70,156,140,144,243,144, 7,170, 88,220, 84,120, 27, 98,184,189, + 32,198,128, 46,203,145, 43,144,170,129,180, 23,124,253, 79, 0,186,174,100,183,105, 32, 12,207,120, 79,236, 56,141, 67,105, 27, + 53,168, 66,138, 84, 33, 42, 78,112,224, 1,122,231,204,137,247,224,194, 43,240, 22,220,184,192, 17, 9,169,112, 64, 72,112,105, + 43, 33, 84, 82, 90,209, 84,105,130,155,216,177, 29, 47,195,252,255,216,142,211,208, 91,148, 40,113,188,204,252,219,183, 44,248, +171,255,237,196, 47, 27,239, 65,109, 39,231,147, 85, 84,128, 1,107,236,134, 93,115, 44,181, 57,139,125, 47,118,249, 46,175, 17, + 89,151,116, 67,209, 85, 5,146,116, 71,183, 52,205,192,236,155,134, 73,166, 0, 16,120, 62,156, 13,231, 89,112, 61,231,229,112, + 44, 21,211,121,184,189, 36, 45,180,192,196, 56, 65,172, 49,168,244,192,189, 1, 60,200,116, 13,144,239,138,198,119,120,120, 63, + 29,207, 39,243,116, 70,208, 90, 2, 25,148, 34, 7,137, 83,148,192, 45,200,243,108,181,233,206,150,176,146,116, 5,107,148,159, +125,117, 70,145, 45,208, 50, 66,233,129,221, 18, 36,228,197,196,117,113, 32, 73, 90, 9, 25,180, 34,191,198, 72,178,115,167,215, + 31,157, 20,135,195, 60, 23,100, 89,176, 21, 6, 83,108, 80,153,209, 97, 58, 77, 55, 58, 14,200,254,202, 84, 85,129,254,165, 40, +116, 30,131, 65,145,201,148,200, 79,236,154, 86,203,210, 6,203,222,126, 61, 86, 10, 28, 85,138,255, 63,174, 16,181,228,202,139, + 4,219, 29,186, 74, 76,149, 56, 90,219,150,183,187,230,174, 47, 69,191,220, 35, 47,116,145,106,150, 21,181, 8,102, 35,128, 4, +130,164,200, 54, 29, 94, 66,250,225, 12,117,113, 4, 85, 9, 90,201,155,173,173,179,209,111, 65,187,167,185,100, 19,172,203,186, +209,104,153,173, 32,242,175,131, 9,255,108,115,109,235,210,189,192,141, 11,246, 71, 67, 49, 64, 3,178,100, 69,231, 16, 38, 88, +252,150,110,133, 73,136,152,198,210,179, 6,211, 49,138,109,187,156, 39, 69,240,130, 65,140,209, 20, 3,132,186,160,117,139, 1, + 5,105,201,237,186,227,130, 5, 35,146, 51, 42,246,109,194,192,139,159,161,109, 53,199,211,145,208, 12, 42,101,107, 48,114,178, +194, 56, 29,178, 28,219,108, 78,130,137, 44,218,113, 84,218, 89,191,223, 31,158,200, 8, 26,227,153, 53,191, 4, 29,167, 59,158, + 94,249, 81, 14,241,228,135,217,127,180,127,112,124,192,127,141,127,215,157,140,227, 52,126,216,221, 59, 60, 63,148, 80,189, 18, +159, 36,214,219,232,157,143,206, 96,176,156,132,173,250, 26,143,136, 25, 21,100,106,160,237,160,139, 34,132, 85,129, 39,229,133, +137, 46, 41, 87,147,191,239, 7,223,138,167, 46, 37,139, 87, 43, 80, 11,184,211, 26, 96,127,153, 84,180,124, 83,188,243,113,153, + 32, 86,225,235, 38,145,214,116,163,107, 53,119,157,245,143,195,139, 51,111,154,128, 77, 49, 91,145,233, 96,238,233,240,233,131, +199, 71,126,255,243,155,119, 31, 62,125,121,249,250,213,205, 5, 49, 35, 63,190,255, 60,253,115,202, 31, 97, 99, 80,115, 7,110, +114, 55,118, 58,237, 39,219,123, 47,158, 63,187, 98, 30, 47, 79,163, 56,106,168,246,229,116,128, 30,172,177, 44,235, 81, 6,246, + 12, 8,138,207,176, 27,153,116,218,247,206, 1, 59, 75, 74, 78, 17,203, 81, 39, 2,126,205, 36, 74, 87,233,139,164,220,116,137, + 32,158, 80, 86,194,105,150, 25,246,101,223,142, 84, 4, 19,151,101,101, 51,171,222,244, 2, 15, 13,165, 0,135, 47,248,229, 98, +183, 18, 74,197, 2,175,116,195,116,163, 0,164,195, 2, 50, 84,147, 1, 95, 41,188, 37,169,132, 88,211,168, 89, 65, 20,128, 32, +102, 49, 47,204,114,248, 79, 42,128,120, 89, 30,153, 22,201,123,129,160, 41,217,154, 16, 1,255, 9,192,215,181,244, 52, 17,133, +209,219,185, 51,183, 51,125, 17, 4, 75,136, 9,109,116, 67,194,142,173, 91, 98, 98,252, 19, 44,140, 11,119,110,140,127,193,133, +104, 26,140,137,143,224, 74, 97,171,127, 66,183,136,184, 33, 85,144, 20,104, 59,165,244, 53,109,231,229,247,125,119,230, 50, 20, +100,215, 69,155,102,230,206,156,239,121,206,185, 14,223, 19,183, 73,233,250,114, 57,237,228, 56,209,212, 76,200,245,136,107, 46, + 49,148,132,162, 33, 43,212, 77,205,204, 25, 25, 72, 49,242, 70, 46, 45, 44, 75, 55, 77,221,194, 62,126,224,121,216, 15,247,161, +242,202,234, 6,252,164, 53,234, 56, 94, 23, 98,131,227, 57, 3,183, 71,246,230,100,164,129,100,181, 8, 81,177, 80, 8,137, 21, +207,208,126,113, 97,174,116, 64,204,227, 20,229,125, 4, 53,148, 9, 10,225,224,100,207,165,242,204,163,102, 34, 83,224,158,140, +112,225, 5,181,158,255,225,123,106,194, 43,252,210,226,252, 53,140,168, 40, 48,240, 9,139,214,232,175, 89,164,153,200,148,181, + 34, 2,150, 41,178,144, 78,182,122,245, 88,181, 24,129, 61, 96,158, 68, 46, 64,117,142,195, 58,158, 22, 40, 60, 80,152,205,251, + 92, 55,160,126, 65,233, 29, 72,182, 53,199,115, 29,215,207, 5,122, 14,105,221,126,105, 42,251,125,239,224,219,159,147, 76,220, +161,243,227, 37, 78,249,222, 27,244,102, 75, 8,163,151,158, 41,251,212, 44,199,185,118, 65,160, 76,108,232,139, 52, 79,251, 76, + 27, 32,205, 37,178, 56,137,237, 17,144, 65,134,193,131,172,226,105, 48,140,143,184,224, 22,156,166,244, 38, 40, 21,239, 28,159, +214,176,118,161,218, 56,150,221,150,131, 84,110, 25, 98,136, 74,135,225,121,174,164,105,116,242, 42,159,144, 13, 16,100,132, 45, + 20,203,251,245,223,144,254,226,151, 34, 26, 95, 42,149, 48,210,140, 59,234, 72,242,227, 90,180,194, 43, 12, 1, 25,247,217,160, +205,137, 85,102,144,253,136,210,133,150, 38,112,195,241, 0, 42,195,209,120,132,122,244,102, 86,154,104, 23, 11,115,141,110, 61, +150, 98,101, 58, 23, 83,217,130,221,179,105, 99, 63,138, 37,114,171, 7, 82, 13, 40, 83, 80,110,158, 58,212,202,165, 13, 66, 87, +163,115, 82,190, 89,254,219, 60, 4, 52,135,179, 3, 56,192,117, 50,120,242,209,245,109, 22, 2, 64, 24,250, 28, 93,174,104,204, + 18, 70, 23, 14,215, 55, 63, 61,127,100,215, 72,163, 74, 42, 58,104, 51,249,105,187,111,235, 76,202, 29,226,244, 73,195,234,205, +173,186,157,245,103,111,107,131,102,181, 86,189,127,119,229,195,151,141,202,167,151, 9,172,222, 96,139,171,172,121,200,154, 80, +241,236, 51, 6, 57,254, 14, 99,191, 24, 59,102,172,151, 64,183, 52,129,190,203, 18,242, 97,231, 54,126, 86, 1,110,232,153,235, +142, 70,253,215, 79,158, 63, 94,123,202, 26,142, 99,183,225,106,237,214,169, 27, 4,159, 55,183, 94,172, 87,118,127,108, 63, 92, +125,116,100, 55, 55,223,191,187,183,242,160,242,106,109,113,121,233,246,242, 82,208,238,107,183,242,242, 60,107, 63,107, 59,123, +187,253,225,112,176,221,133,248, 36, 58,238,199,175,111,198, 80,204,120,168,175, 9,183, 0, 55,166,176,223,225, 81, 77, 31,107, + 3, 72,165, 35,185,189,136,213,164,172, 35, 99, 53,141,104,232, 40, 29,152,162, 15, 60,193, 0, 10,175,216, 37,148,154, 75,151, +244, 90, 66, 45, 22, 35, 11,175,170,227,229,154, 77,188,228, 24, 89, 3, 50,149,182, 43,100,151, 44,164, 32,161,211, 18,198,139, +186, 55, 50, 51, 72,106, 11,189,148, 84,124,189, 96,187,167,246,184,112, 44, 79,157,153, 64, 6, 44, 41,152,166, 84, 13, 84,168, + 8,148,102,252, 36,115, 53, 69, 28, 29,246, 79, 0,194,174, 29,182,137, 32,136,238,222,207,118,236, 32, 39,113,164, 40, 63,133, + 52, 40, 18, 13, 40, 66, 52, 17, 10, 66,136, 2, 81, 81, 35,122, 4,164,164,160,160,161,162, 0, 41, 5, 5, 61, 5, 5, 20,208, + 19, 20, 66,151, 10, 68, 67, 67, 76,226,252,176,227,207,217,190,187,245,238, 50, 59,187,123,118, 12, 18,246, 73,150, 44,203,247, +217,187,153, 55, 51,111,222,120,255,101, 70, 74, 59,145,218,180,162, 96,138,198,162, 78, 21,157,219,185,119,210,181, 6, 66,141, +129, 19,137, 47,124,136, 31,123, 76, 53,226,199, 92,116, 57,135,200, 46, 75,131,196, 77,192,249,197,138, 15,199,193, 19,128,237, +159,202, 77,194,217, 53, 88,164, 24,205,172, 30,241, 40,166, 29,236,148,119, 77,175,130,237, 65,117,125,126, 80,219, 67, 70,170, +242, 96, 28,125, 39,147, 74, 7, 60, 78, 18, 97, 84, 34,184, 48,158, 93,232,188,232, 64,192, 34,254,174, 50,208, 62, 18, 79,161, +173, 35, 45, 1,127, 8,236, 83, 98,221,142, 49,137,255, 44,158, 72,103, 72, 97, 50, 5,130,132,204, 20,231,142,154,251, 58,253, +170,136, 5, 65, 14, 46, 87,134, 6, 81,210,142,149, 2,154,193,244,170,101, 41, 87,104,130, 97,178, 10, 66, 88,162,196, 28,141, +148,190,154,243,231, 49,148, 59, 2,187,207,152,236, 70,162, 19,241,209, 17,103, 34,155, 25,203,101,191, 84, 42, 74, 16, 27,227, +112,119, 64,153, 33, 77,210, 37,182,189, 77, 34,126,227,182,210,155, 69,207,229,217, 74,156,112,146, 46, 77, 50,174, 51,161,172, + 62,137,185, 27,208, 32,236,210, 24,201, 90,190,171, 82, 52, 68,177,126, 76, 7,151, 82,143, 51, 53,112,176,251, 78,173, 89,237, +113,166,169,180, 0,108,225,150, 5,195,148, 13,212, 92, 39,156,175,237, 82, 67, 81, 79,217,255,210, 25, 32, 50,251,110, 0,123, +197, 70,127,121, 80,175, 96, 98, 42,157,159,216,199, 73,122,162, 44,183,107, 52, 51, 54, 29,198,237, 48, 14,225,239,206,140, 20, +213, 84, 13, 91,225, 80,196,252, 84, 89, 3, 87, 19,108,110, 12, 71,136,178,101, 61,222,107,118, 26,205,168, 5, 33,120,204, 34, + 8, 40,139,249, 98, 39, 9,153,226, 25,178, 70,187, 14,159,227,163,227, 77, 8,201,213, 33, 41,206,214, 66,105,161, 92, 43,195, + 29,168,102, 39,226,140, 19,227,200, 5,169,156,236,251,158,251,187, 85, 75, 0,124, 96,177, 78, 79,134, 17, 0,220, 36, 61,170, + 31, 98,165, 26, 41,206,234, 14,119, 32,118,241,125,191, 19,181,225,196, 14, 27,135,165,226,100,193,203,237,158, 84,116, 25, 24, +194, 5,116,163,154,211, 65,116,231, 72, 36,249,205, 75,183, 86,214,174, 74,213, 18, 68, 30,173,147, 55, 47, 94, 47,158, 93, 95, +123,122, 31, 61,120, 76, 46,223, 37,175, 8,201,204, 18, 54, 75, 26,132,212,208,194,255,196,173, 12,219, 14,169,126, 37,114,139, +136,103,136,248,115,196,212, 98, 81,121,198,245, 98,149, 42,129, 69, 79,192, 47,234,203,254,237,199,119, 82,105,236,237,252,154, + 89, 90, 32,197,194, 52,153,130, 47,111, 84, 87,120, 24,110,111,126, 90, 93, 94, 30,159, 44, 46, 94, 60,127,251,193,157, 11, 87, +150, 51, 94,230,229,147,231, 91,155,219,247, 30, 63, 44, 87,118,151,230,207,205, 79,207, 93, 95,189, 70, 90,100,131,125,126,251, +254,221,199,141, 15,115, 99,165, 30,235,101,188,108, 35,106,233,241,166, 92,191, 41,210,204,169,126,198, 52, 28, 50,157, 53,136, +216,133,150,181,112, 81,242,212,146, 71, 76,239,157,153,174, 33, 77,229,210, 25,120,176, 69,202,104,163,131,214,112,192, 42,246, +205,228, 41,205,174, 52,178,193, 74, 80, 10, 25,105, 62,200, 3,172, 68, 17,114, 43,245,142,252,124,218, 87,106,239,155, 30,248, +201,113, 88,213,200,128,158,230,174, 59, 92,207, 48,213,109, 13, 18,158,145, 66, 80,170,181,143, 19,193,134, 98,126, 21,106, 34, +194,128, 5, 27,205,230,155, 74,177,117,184, 64,152,190,254, 8,192,216,181,235, 56, 13, 68,209,241,216,142, 95, 9,155, 21, 65, + 74, 4,226, 81, 32, 88, 10, 42, 10, 68, 69, 15,162,129,150,138, 79,160,164, 4, 33, 42,168,144,248, 6,126, 1, 9, 81, 65,177, + 43, 10,164,149, 22,216, 37,130,108, 36,164, 93, 32, 15,109, 28, 39, 99, 15,247,220,241,100, 13, 10,143, 20, 86,138, 56,137,157, +155,153,115, 31,231,156, 63,226,119,183,194, 20, 88,152,114, 24,194,162,203,167, 56,240,124, 14, 52,219,238,114,143, 75,153, 39, + 62, 43, 10, 4, 50,136,253, 56,244,104, 21,138,235, 94, 2,233, 21, 12,194, 65, 78, 0, 14,118, 82, 68, 30, 58,116,147, 60, 43, +208, 45,116, 14,102,233, 28,122,200,176, 8,165,192,165,133,126,172,198, 5,247, 68,141,163, 57,215,100,121, 2, 21, 87,167,176, + 57,176,189, 3,172,233,116, 9, 37,153, 50,204,254,183,165, 34,179, 46, 14,141,188,139,191, 80,184,116,133,218, 43,150,173,236, +116, 92,141,142,130, 7,241,203, 41,191,147,165,164, 88, 42,198, 92,110,222,132,212,148,163,172, 21,139, 25,126, 98, 9,154, 2, + 71,140, 40, 56,101,219, 72,114,227,223,101,228,202, 22,126, 16,118, 15, 60, 13, 53, 74,151,226,219, 95, 59,219, 46,226, 40,163, +187,133,145,108, 61, 87,122,146, 21,147, 84,117,146, 96,173,222,120,241,233,243,120,174, 78,120, 65,191,191, 11,213, 67,198, 66, +116, 91,211, 74,161,198,100,230,139,210,172,172,148,107, 98, 83,184,117,216, 63, 89,138, 49, 35,129,186, 15,221,155,154, 43,147, + 64, 30,107,200,154,215,217,236, 13, 10,171,200,154,179,197, 7, 74, 99,166,116,200,146, 30, 20,235, 4, 87, 67, 63, 84,180,198, + 19,106,150,172, 0,236, 56,148, 96,240,212, 78,110,186, 34,142, 29,129, 41, 12,142,213,165,190, 39,255,131,160, 60,193,157, 24, +165,173,175,165,100, 62, 47,189, 46,170, 37,245,176,145,205,210,209,116,100,140, 46, 91,141,214, 30,108, 48,173,151, 60, 4,241, + 33,200,101,185,177, 8, 36,147,201,139, 82,183, 85,235,101,110, 98,204, 96, 66,197,213,119,131, 56,136,211,108, 58, 87, 83, 32, + 10,237,212,188,144, 71,245, 41, 53, 57,213,251,214, 51, 13, 18,171, 24,110,102, 71, 17,125,148, 89,213, 67,108,207, 14, 44, 36, +115,163, 96, 69, 31,140,166,168,235,179,204, 36, 79, 71,129, 15, 5, 89, 0,152, 53,242, 48, 26,104,100, 28, 33, 81,152,208,213, +166,115,246,245, 5, 41,172, 1,146,151,116,173, 79, 40, 0,255,185,211, 23, 94,246,223,173,239,108, 84,163,237,203,171,238,201, +171,103,248,233, 17,113,109, 40,158, 90,164,190,194,187,183,131,202, 11,126,239,125, 33, 40,156,105,113,120, 46,196,147,187, 66, + 60, 6,243, 68,155, 26, 30, 30,161,244, 40,251,222, 79, 39, 1,101,219, 81,156, 82,252,100, 7,119,110,220,190,255,236,209,248, +199, 48,159, 21,205, 90, 4,126,111, 28, 53, 87,155,223,187,187, 23, 47, 95,121,179,254,250,120,187,163, 92, 49, 87,138,224,254, + 72,101, 15,239, 61,216,122,251,241,214,245,155,155, 31,182,222,119,183,183,191,238,244,247,186, 11, 96,116,169,125,126, 37,105, + 76,178,180, 25,172, 12, 38, 67,218,146,145,224, 11,101, 18, 65, 90, 14, 86,147,214, 96, 58, 50, 42, 19, 96,218,224,232, 86,144, +152,102,207, 24,101, 29,250,138, 74, 63, 85,148, 54,212, 86, 1,111,177, 64, 35,194, 88,222,192, 10, 75,230,149,153,150,255,208, +202,183,111,173,173, 39, 28,127, 9,109,180, 2, 13,202,174, 14,234,252,171,159, 87, 81,214, 53, 33,105,141, 63, 3, 55,202, 25, +185, 90,133, 59, 51,219,122,232,238, 7, 47, 67,233,129, 30, 81,169, 2, 47,144,168,169,207,252, 20,128,175,171,215,109, 34, 8, +194,187,123,183,190, 59, 59,142, 67,108, 67, 10, 66,148,136,164,161, 64,188, 0,143,192, 11,240, 22,148, 20, 20, 20,148,212, 52, + 52, 20, 60, 0, 84, 80, 33, 65, 79, 17, 33, 37, 10, 34, 9, 17, 86,112,126,128,216, 57,123,111,111,111,153,153,221,117, 44,217, +138,101, 89,246,234,206,119,167,217,157,153,157,249,230,155,152, 93, 23,118,159, 56,239,254,211,117,131, 10, 16,154, 40,212, 74, +217,144,177,117, 10,143,176, 86,132, 21,225, 37,200,164, 84,162, 16, 85, 84, 19,200,227,138, 45,227,104, 42,151, 70,101,181,122, +198, 83,228, 49, 68,102, 6,112,232,244,101, 49,204, 11,164, 15, 28,153, 17,174, 34, 18, 26,108,227,186,245,118, 34,107, 3, 61, +168,225,223,192,241, 22,171,247, 49,148,239, 26,145, 27,235, 41,248,173, 15, 29, 48,207,152, 53,181,110,249,245,137,212,104,134, + 92, 51,104,118,214, 74, 91, 23,227,127, 65,185, 79,186, 80,177,104,198, 90,206, 43, 46,179, 19,255,180,100, 37,220,171,140,147, +245,155,155,187,189,237, 80, 78,224,220, 55, 35, 38,180, 15,204,222,238,172,255, 58,251, 33,137, 50, 23,156,202,200, 86,157, 68, +140, 64,156,134, 55, 98,145, 38, 38, 46, 47, 65, 15, 15, 20,236,103, 75, 95, 58,141, 80,110,190,154, 53,190,236,247,246,207,135, +224,194, 39, 77,254, 96, 99,177, 80,216,105, 15,153, 38,181, 81,154,172, 98, 89,141,180,205, 13,230, 90,243, 16,124,215,129,141, + 8,190,255,165,136,141, 68, 50,122,180,228, 77,201, 64, 60,170,196,250,190, 68,162,155,126,116,110,215,187,199, 27, 93,249, 29, +155,237, 32,162,134,246,169,200, 85, 47, 92,173, 8,197, 95, 4,197,226,137, 11,144,114,241,150,165, 50, 3,103, 86,161,194,197, + 88,181, 20,241,106,103,245,240,244, 0, 78,110, 55,150, 79,135, 39,160, 79,101, 20, 99, 35, 74,202,119,193, 65,237, 70,251,247, +176,207,201, 4, 58,153, 84, 46, 29,195,108, 62,198,217,178, 84, 95,202,100,134, 52,100, 8, 56, 25, 58, 62, 97,183,138,155,105, + 75, 97,239,145, 64, 53,201, 28,185,171, 93,235,172, 33,118,141,134,107, 34,166,240,110, 53,205, 54,225,249, 52,184, 24, 87,133, +206, 11, 39,169,110,235, 86, 67, 54, 14, 79, 14,168,135, 56,219,239, 31, 10,170,248,119,213, 44, 20,165, 55,174,212, 5,129,140, + 90, 41, 93, 56,160,168,240,237,216,240,122, 35,149,231, 84,206,158,197,217,221,149,205,111, 63,183, 23,147, 58, 50, 49, 8, 10, +230, 50,222, 93, 88,134,135,186,211, 89,219, 59,222,131,217, 1,115, 47, 73,146, 63,131, 51,227, 97,211, 54,160, 39,162, 81,165, +106,150,237, 30,237,120,102,220,112,239, 31,190,126,124,254,228,197,179,151, 79, 25,235,178, 54, 99, 77, 18,243, 5, 99,155, 36, + 87, 19,126,246,200,146,131, 33,216,130,147, 86, 60,227, 0,215, 20,165,193,215,184, 42, 83, 24, 17, 17,149,143,144,225, 17,241, +235,119,111,224, 45,105,194, 60,126,248,168,217, 90,120,245,254,237, 34, 75, 96, 49, 94,216,124,235,254,189, 98, 30, 19,237,231, +157, 79,179,131, 32,232,246,194, 13,216,105,105,173,251, 69, 31,185,170, 81,197,152,122, 84, 87, 48, 85, 13,184,125, 18, 91, 53, + 9,106, 56, 18, 81, 19,152, 56, 70,139, 47, 66, 61, 59,102,219, 65,243,104,244,238,132, 38,120,191, 33,112, 53,207,210, 52, 87, + 3,206, 38,219,114, 59,191, 83,155,243, 34, 60, 28,197, 4,155,192,175,163,160,242, 89,168, 64, 19,198,188,135,226, 3,228, 1, +235,200,167, 1, 65, 87,196,142,115,148, 4, 65,247,132,211,174,240, 4, 17, 93, 31, 73, 52, 43, 53, 29,195,183,158, 13,219, 49, +202,147, 11,143,219, 65,195,175,152, 92, 29,184,209,231, 87,105,193,153,255, 2,240,117, 53,189, 77, 3, 65,116,119,189,235, 56, +113, 74, 62, 26, 65,219, 11, 82, 1, 9,206, 28, 56,243,243,144, 16,127,129, 27,127,168, 23, 40, 18, 31, 85,211,202,137, 83,183, +177,157,216,177,119,151,153,217,216,109, 34, 90, 41,183, 68,142,188, 31,111,223,204,190,121, 35,159, 0,247,182,107,182,216, 62, +154, 18,129,204, 37, 12,208, 13, 70, 52, 7,177,187,201, 20,174, 53, 45, 98, 4, 38, 6, 56,154, 57,139,218, 2,182,168, 74,215, +146, 99, 63,184, 14, 87, 48,166,119,171, 5,108, 72, 29, 12,200, 28, 85,146,151,140,116,122,117, 18,231,107, 13, 40, 0,123,129, + 1, 21,224, 67,222, 61, 9,143, 39,253,241, 52,187,158,175,103,138, 75,236,198,105, 96, 62, 75,109, 60,202,237,218,193,193, 36, + 45,150,212,255,204,180,221, 7,237,206,196,218,189,102, 35,251,158,154,255,155, 84,223, 11, 56, 30, 60,155, 7,246,161,156,237, + 36,214,158, 56, 51, 90, 83,225,251,171,239,103,221,113,178,142,191, 95,157,181,238, 11, 15, 34, 36,214,212,145,217, 56,185,132, +201, 89,193,209,104,109,159,102,228,119,134,213,137, 93, 97,147,181,145, 94, 29,229,241,199, 15,199, 54,196, 78, 79,204,211, 36, +159, 23,188, 20, 23,139,228, 44,158, 5, 82, 5, 74,172,138, 18,139, 22, 13,223,160,170, 29,251,104,247, 20, 64, 8, 74, 5,138, +138,109, 42, 93,104,188, 15, 41, 53, 91, 35,101,194,140,141,223, 84,112, 5, 13,157, 23,180,244, 36, 9,111,106,205,209, 19, 14, +155,113,242, 60, 99,175, 94,112,169,194,159, 81,129,192, 78, 29, 60, 48, 8,240, 59, 61,127,144,100, 49,173, 58,132,121,224,238, +200,111,209, 35,194,137,255,244,168, 55, 56, 26,158,252,138,206,225,255, 47,226,191,110,172,136,250, 19, 45, 96,117, 59, 27,240, +131,104, 25, 49,215,251,111, 27, 83,243,131,238, 8, 48, 29,104,251, 44, 69,220, 95,228,139, 64,118,169, 12, 80,224, 5,172,107, +109,195,209,160, 24, 16, 19,224,217,247, 58, 97, 16,222,230,137, 83,236,143,123,147,139,248,143,181,174, 12, 29, 8, 18,119, 23, + 72,173,123,199,214, 9,132,146, 39,206,149,145, 78, 96,115,125, 27,145, 49, 36,198, 15,192, 50,164, 84,101,185, 86, 42, 40,171, +181,161,125, 23,248, 93,120, 67, 64,118, 18,237, 49,222, 48, 70, 20,161, 11,138, 75, 4, 79,203,220,163,103,231, 69,126,126,245, + 3, 56, 62,121, 8,147,208,158,194,137,121,118, 3,124,112,154, 92, 34,179,193,106,166, 20, 77,101,129,130,111,210,109,177,110, +211, 88, 18,198,252,229,112,114, 50, 24, 47,231,153, 47, 85,141, 85,151,104, 79,117, 53,157,158,158,190,113,133,216, 0,188,248, + 25, 51,246,174,185, 51,218, 16,226,195,103, 65,115,236, 17,220, 55, 89,144, 61,239, 14,120,211,215,135,207,103,119,137, 59,192, +128, 99,105,163,134, 29, 31,182,237,242, 38,249,252,229,211,209,251,183, 95,249,183,254,104,104,224, 11,219,169,106,237, 91,159, +236, 84,201, 42, 65,215,143,249, 56,161, 86, 85,246, 22,233, 77, 90,172,250,157, 48,202,110, 11,106,153, 93,234, 10, 54,120, 97, +170, 18,109, 71, 49,102, 15,213,179, 97, 56,130, 21,141,171, 68,250, 2, 25,158,228,216,251,157, 52, 85,166,230, 90, 89,114,233, + 6,114,129, 75,176, 22,189, 0,157, 75,248, 70,108,157, 39,184, 59,100,205,110,190,196,237,123, 99, 27,158, 15,163,119,120,112, + 24,223,205,133, 16,108, 39,159,243,144,125,155, 54, 13,239, 50,101, 14,217,141,171,145,218,138, 94, 88, 35, 15,225,251, 74, 10, +187,195, 33,154, 74, 17,183,192,141, 67,121, 56, 77, 41, 70,123, 76,187,113, 79, 42, 27,197, 60, 5,226, 24,238, 99,248,168, 91, +125, 14, 1,253, 63, 1,248, 58,183,221,166,129, 32, 12,251,136, 93,187,164,117,105, 67, 43, 36, 42, 46,144, 16, 55, 84,189, 2, +137,151, 65,125, 30,174,184,229,105,184, 45, 15,128, 4, 8, 21,165, 74, 75, 91, 39, 78,136,215,235,236,129,153, 89,175, 15, 13, + 16, 89,185,201, 65,150,189,158,157,253,119,230,251,131,127, 7,247,110,115,181,101,187, 27,241,157,228, 84, 66, 32,145, 0, 78, +242, 46,206, 21,173,174,175,140,131,148, 54,172, 71,220, 15,140,224,157, 44, 48,203,186,204,171,188,228, 72,106, 46,234, 5, 85, +190,163,119, 56, 85,136,192,212, 28,166, 15, 82, 88,191,103,241, 8, 27,130, 2,200, 94, 30,238, 39, 89, 18,198,107,165,198,241, +227,216, 75,174,216, 20, 30,162,144,156, 63, 32,197,132,185, 29,198,117,142, 9,142, 41,141, 50,128,181,205,120,237,221,115, 10, +236,135,117, 11, 97,234,255,202, 8,193,184, 56,226, 24, 53,250,255,230,185,131,223,246, 63,235,255,121, 83, 41, 31,208,242, 93, + 18,136,102,201,102,132,115,104,245, 95,213, 82, 68, 58,216, 27,202,220,213,146,162, 78, 98,215,214, 1, 93,231, 64, 97,120,133, +209,155,186,242,234,226,251,209,254,225,193,163,189, 91, 94, 75,161, 18,207,255,116,113,249,245, 46, 79, 2, 63,245,181, 91,253, +102,176, 42,162,166, 20,114, 35, 86, 1,109,224, 68, 40,248,232, 16, 46, 93, 20, 86,144, 33, 72,103,197,229, 54, 54,163,171,165, +162,155,103,250,173,236, 1,185,119, 73, 72,249, 45,204,159,144, 42,150, 66,200, 38, 50,106,197,213,211,140,255,248, 37, 20, 21, +151,248, 68, 90,149,162, 46,228, 77, 87,255, 66,145, 50,242,225,201,175, 73, 91,112,210,104,167, 96,115,134,253, 53,174,173,118, +192,161,141,125,100,164,230, 75, 41,108, 17,132, 99,116, 21,109, 83, 7,114,125, 81,197,106,110, 40,222, 16,115, 95, 63,127,115, +254,237, 92,202,182, 7, 77, 91,140, 19,220,181,154, 64,102, 46, 36,131,117, 89, 27, 59, 1,120,104,114,118,107,160,146,186,249, +166, 28, 84, 58,120,222,222, 86, 22, 71,241,228,110, 98,111,175, 74,163,148,218,214, 33,153,231, 84,164, 37, 97,160, 18,150, 49, +220, 73,119,167,121, 73, 6, 17,166,215, 6,207,147,252, 16,145, 89,100, 73,117,176, 22,117, 70,233,168, 40, 11,236,192, 68, 50, + 1,178,145,217,154, 35, 95,197, 35,222, 3, 86,142,153, 86,112, 13,179,241,138, 33,102, 89, 53,235,101,131, 93,106,104, 77,190, +149,110, 33,204,193, 73,190, 61,126,249,229,230, 39,162,247,252,166, 43,245,236,236,221,135,247, 31,141,196,226,108,147, 14, 15, + 99,104, 66,178, 12,156, 77,235,182,244,130, 86,106, 48,147, 51,199,250, 40,123,253, 62,144, 56, 12, 78,143,158,204, 42,180, 40, + 92,235,174,233, 78,144, 12, 2,139,209, 93,234, 84,227, 6,230,229, 32,216, 72, 25,163, 47,114, 31, 37,111,250,255,189,102,124, +241,249,122,241,183, 79,154,218, 77,215,143, 33, 9,153,215,115, 56, 14,178, 87,135,227,147,181,204,165,184,246,201,168,208, 15, + 35,136,105,232,217, 39,152,192,165,146,167,201,154, 67,106, 81, 66, 66,166, 24,206, 1,202,194,184,104,135,195,163,208,116, 79, + 48, 81, 86,196,193,161, 32,132,217, 51,183, 38, 74,142, 53,215, 83,125, 22, 97, 19,171,141, 35,171,106, 30, 97, 56,142,199,207, +166,249,101, 45,185,171,221,225,246,158,163,135,121,251,128, 45,217,213, 70, 54, 72,250,141, 16,239, 54, 33, 74,110,204, 11,221, + 78, 58, 66,192,176, 60, 65,202,222, 70,162,251, 71, 0,194,174,101,183,105, 32,138,206,195,246, 56,205, 67,128,132, 88, 0, 10, +170,132,232, 14,177,169,248, 13,216,241, 29,124, 69,249, 6,254,132, 21,251,178, 64, 98, 3,164, 72,105, 43, 65, 28,218, 82,227, +196,246,100, 60,195,220,123, 29,103,210, 32,200, 34,203,200, 73,198,215,231,158,123,238, 57, 17,219,192,198,173, 89, 51,223, 10, +184,104,163,147, 17,188,183, 37,222,215, 16,141,200,125, 45,182,119,120,147, 3,111,227, 65,158,111, 63,251,178,223, 79,246,148, +236,245, 35, 37, 32, 12,207, 63,207,139, 92,255, 6, 7, 65,223, 3, 90,160,162,181,135, 59, 43,248, 88,180,241,146, 74,198, 35, +217, 19,201, 80, 65,168,121, 47,137, 19,143, 43, 35,153,104,107,177, 63,147,189,120,248, 68,141,178,122, 54, 95,204, 98, 22, 59, + 65, 6,249, 30, 34, 10,215, 78, 48,204,206, 87, 97, 97,101,119, 91,142,248,124,205, 65,217, 0, 79,111,132,166,104, 2, 69,174, +179, 60,232,206,194,145,233,223, 20,143,161,182,157,188,160, 48,144, 75,116,202,152,205, 4,155,119, 62,156,172,157, 94,216,210, +217,148, 1, 87,174, 9, 90, 81, 51,139,205,244,157,152,221, 30,196,163, 84, 14,192, 28,221, 28,127,152,156,251,206, 52,138,174, +181, 94, 0, 79, 3, 88,205, 65,148, 43,228, 70, 25, 37, 93, 4,155, 18,181,245,109,147, 72, 37, 43,160,145,133, 74, 13, 62,156, +144,164, 8,190,224,154,201, 85,227,171,189, 76,208,137,186, 4,133,147,173,160, 79,100,123, 2,160,189,194, 7,154,241,141, 20, +238,151,233, 6, 40,248, 97, 34,141, 71, 76, 13,191,119, 43,250,113,109, 99,170,210,156,173,208, 5,198, 74, 52, 44,160,153,134, +100,160,192,193,196, 6, 96, 45,116, 69,174,220,219, 35,105, 87, 80,186, 86,183, 65,230,130, 31, 16, 41,121, 9, 34, 35,178,211, +164,179, 15,248,122, 50,155,144, 78,128, 5,109,172,104,119,172, 4,170,225,160,213, 29,168, 65,109,106, 68,247,187, 41, 92, 78, + 69, 10, 90, 52,186,149,173,187, 92, 92,142,123,227,224,137,141,131, 3, 0,224,218,241,118, 54, 91,154,178,130,157,117,247, 29, +247, 84, 45, 54,232,139,154,254, 46,174,141,233,110, 33,211,106, 93, 45,114,235,118,144,142,242,229,175, 52, 86,144,227,108,180, +182, 70, 52,162,145, 60, 1,255, 78,244,233,236,216, 86, 82, 65, 99, 96, 34, 17, 18,162, 11,132,167,240, 7,206, 78, 47,178,215, + 47, 95, 77,231,231,239,166,159,232,106, 15,247,159,222, 63,120,116,244,246, 8,155,177, 4, 14, 13,193,135, 37,190, 63, 91,127, +171, 51,198, 50, 36,103,192,131,134,181, 7, 13,236, 37, 54,199,121,148,164,159,127,102,121, 85,170, 88, 25,204, 40, 2,124, 8, +114, 45,137, 26, 39,155, 62,222,159,190, 63, 38, 87, 39,114,161,199, 72,250, 6,180, 47,214,164, 50,170,254, 87,226,255,253,122, +112,247,160, 40,178,139, 2,146, 84,231, 87, 31,251,227, 23, 15,159,191,169,243, 47, 98,113, 2, 75,144,254, 40,206,207, 76,149, +187,252,132,149, 95, 33,176,198, 95, 21, 4,175, 53,130,182,157,200,225,144,217,142, 49,185, 41,150,105,133, 33,118,109,211,200, +175,150,232, 86, 6,131, 48,219,202,216,131,106,192,185,235, 88,188, 78,146,231, 58,207, 71,230, 78,179,111,150,250, 66,190,197, + 12,220, 48,238,177,129,246, 46,192,131,107, 33, 76, 88,226, 69,192, 65,216, 29, 86,103,251,161,209,128, 15,121, 71, 72,181,213, +251,143, 0,148, 93,191,139, 19, 65, 20,158,153,157,157,205,230,199, 37,103, 17,229, 56,173,188,127,192, 66, 4,209,194, 66, 56, +176,177,187, 70,193,255,192,194,202,198,206, 82, 44,172,173,180,184, 78, 14,177,176, 23, 27, 57,131, 34, 8,130,228, 68, 65,115, +254, 72,118, 55,183,217,205,206,140,243,222,204, 38,187,145, 43,108, 66,216,133, 13, 76,118,190,247,190,121,223,251, 30,175,246, + 49,173,128,123, 21,217, 43,197, 85, 28,135, 12,128, 3, 17, 67, 17, 23, 34, 13,107,231,132, 11,194, 13, 80,132, 44, 4, 49,128, +199, 53,101, 57, 88, 90,105,157, 3, 9, 13, 25,215, 8, 91,185,243, 34, 52,185, 19,179, 37,251, 57, 1,163, 65, 64,107,110, 80, +213,100,251,254, 26,209, 61,248, 73,223, 92, 52,105,152, 79,189, 38, 21, 13, 95, 29,169,226, 84,184,209,100,225, 48, 57,240, 21, + 7, 8,147,216,155, 79,114, 84, 81, 50, 85, 95, 9, 90,211, 59, 58, 31,249,210, 86, 44, 64, 99, 72,123, 14, 81,242, 26, 70, 23, + 59,136, 45, 44, 59,255,213,171,147, 99,168,103, 29,225,129,224,163, 85,134, 87,119,245, 1,169,169, 91, 55, 59, 79, 21,190,135, + 12, 42,119,102,123,140,235,207, 22,192,176,105,191, 73,214, 91,188, 19,240, 66,179, 44, 83,227, 92, 69,153, 9,153, 50, 53,224, +132, 1, 64, 99, 12,232, 10, 47, 20,134, 9, 65, 50, 6,147, 94,225,180, 82,181,209, 36, 41, 80,122, 38, 73, 92, 64,148, 22,158, +110,121, 38,211, 87, 1,116,235,171, 89, 1,183,124,170, 27,146, 8,170,103,115, 0, 52,159, 88,221, 40,172,171,249,236,162, 73, +150,240, 88,219, 32, 34,230, 66, 73, 74, 78,119,197, 40,202, 8, 52, 43,121,118,251, 27, 86, 30,240, 86,156,199, 56, 85,150, 34, +240,197,118,205, 59,141, 78,191,119,242,219,175,175, 74, 21,245, 26, 5,165, 43,246,205,213,110, 13, 76,179, 12,201,195,134,100, + 32, 37, 78,129, 70, 1,139, 81,154,178,154, 46, 45,118, 24, 84,165,148,156,102, 83,147, 56,195,155, 71,193,220, 35,158,197,216, + 47,193,172, 22,130, 35,190,187, 14, 50, 68,225,225,207,225,146, 99, 81, 61,153, 77,136, 43,250, 86, 12,114,209, 64, 92, 90, 73, +157, 46, 79,248,137, 94, 22,234,244,114, 88,132,185,243, 59, 25,155, 43,135,209, 8,114, 16,179, 68, 66, 96, 59,143,186,118,238, +234,171,143,175,231, 96, 31, 1,143, 17, 76, 88,179, 44,106,223, 73,102,183, 61,179,210, 10,133,116,208,100, 75, 39,194, 94,146, + 37,135,105,252,248,197,222,147,187,247,245,102,111,247,217,243,237, 27,215,183, 46, 93,216, 62,127, 5,194, 10,109, 64, 88, 44, + 48,194, 72, 60, 47,159,150,209,230, 51, 33, 63,240, 93, 97,165,118, 10,242,252,133, 64,142, 90,161, 42,144, 11, 41,185, 97, 42, +196,227, 74, 54, 61, 80,106,194, 36,123, 47, 40,228,188, 31,174,147, 54,127, 63,120,235, 76, 0, 80, 35,205,192,205,198, 9,214, +206,246,186, 95,162,116,231,242,206,102,255,204,238,155,189, 15,159,246,255, 23,223, 15,190, 15, 30,221,121,122,251,193, 45, 28, +158, 67,134,131,135, 91, 55,239,173,109,244,139,232, 34,201,226, 34, 75,130,228, 15,105, 53,149,151,167,239, 94,202,209,208, 22, +103,212,209, 84,195,228,202, 84, 78, 35, 53, 25, 21,121, 44, 77, 22,131,200, 44,181,166,213,201, 61,238,207,164,139,157,239, 6, +184, 81,185,172, 85, 86,206,104,172,223,178,174,251, 28,184,126,163,242, 52,134,209, 99, 78,110, 93, 67, 21, 78,235, 94, 22,115, +237, 85, 91, 38,176,178,142, 58,196, 91,231, 14, 86, 58,144,213,242,146,154,223, 97,101, 62, 82, 77, 20,250, 87, 0,202,174, 93, +183,137, 32,138,206,204,206, 62,252, 72, 44, 39,136, 40, 6, 98, 68,135,160, 8, 82, 10,132, 4,174, 40,248, 24,126,130,130,191, + 65,136,135, 82,240, 40,104,137,144, 18, 9,138, 20,177,100,160,192, 73, 76,236,245, 99,189,235,121, 48,247,206,142,189,113, 34, + 16,165, 37,123, 37,239,206,222, 57,115,238,185,231,240, 37, 78,167, 8,111, 93, 72, 30,155,187, 1, 35,163,138, 99,171, 52,180, + 67,180, 17,184,196, 0,168,226,224, 39,101, 80, 35, 36,109, 4,168, 47, 76,149, 8, 52, 18, 74,152,231,225, 83, 58, 49,197,148, +234,208,163, 17,171,128,177, 31,210, 86,156,120,214, 57,192,131, 34, 2, 98, 74, 40,125,138, 14,101,198,102,190, 41,103, 67, 64, + 67, 44,132,214, 10, 43, 49,131,124,188,177,200, 54,171, 27,230, 39,157, 97,155, 83, 30,152, 51,137,103,118,111,206, 96,107,192, +220, 33,186, 24,230, 47, 84, 92,183, 81,217,180, 22,165,202,126,101,164, 98, 43,154, 94,124, 95,233, 66, 85,167,243, 13,150,157, +211, 87,208,191,180,108,233, 37, 99,192,204, 97, 0,141,158,139,112, 79, 61,231,165,108,221,210,124,169, 98,161,198, 78,185, 56, +127, 60,117, 66,174, 24,216,110,110,153,169,196,166, 86,102,224,136,104,254,100, 50,163, 97, 68, 54,148,151,162,184,196,192, 99, +207, 35,181, 16, 98,131, 65,182,136,107, 7, 34,132,113, 99, 30,207,108, 71,139, 78, 4, 56,201,184, 65, 6, 3,168,225,113, 6, +104,181, 92,166, 0,213, 45, 95, 33,128,145,167, 83,224, 51,105, 9, 19, 42, 51, 73,202, 33, 45,161, 66,179, 22, 81, 3,146, 60, + 48,138,100,245, 26, 59, 60,102,137,176, 19, 40, 10,105, 40, 54, 21, 9,115, 55, 30, 89, 17,107, 88, 68,198,211,209,247,227, 73, + 65,240,126,177, 7, 50, 23,247,146, 66,216, 30, 32,177, 4,188, 34, 64,194,194,205,126, 14, 40,146,160, 31,143, 35,146,244,178, + 22,181, 8,117,132, 18,163,233,200,154, 77,197,201,217,181,181, 27,221, 65, 23,229, 23,186,121,245, 86,251,228,200,174,106,199, +190,177, 69,131, 93,219,227, 55, 6, 37,229, 10, 55,247,106, 40, 55,211,192,242,121,245,156,162,212,203,127, 74,218,218, 96, 74, + 54,178,240,104, 79,164,147,108,186,181,222,236,156,116,222,239,127, 0,127, 27, 16, 10,193,117, 3,238,103,208, 19,118,166,164, +202,242,237,208, 71,241, 2,223, 20, 86,136, 42,227, 60, 78,227, 74, 84, 53, 23,111,247,123, 79,159, 61,223,217,190,221,120,112, +231,221,238,238,195, 71,173, 46,201,106,193,250, 64,140, 0, 57,217,250,110,158,107, 3, 23,147,125,221,215, 16,188,167,144,160, +230,232,144, 94, 46,119, 6,218, 10,166,163, 34, 22,174,132, 33,182, 31,224,168,110,192, 56,158, 30,112, 4,131, 49,243, 70,214, + 74, 32,105,127,249,230,109, 25, 42,128, 93,198,112, 72,225, 32,252,162, 82,146,214,214, 93,189,210, 60,234,253,232,205,250, 95, + 63,125,217,255,118,112,239,241,246,255,150,248,189,195,189,214,206,147,143,159, 95,225,167,126, 60,254,121,243,254,117,115,125, +241,123, 85, 7,171,213,122, 35, 77,193,126, 33,218, 36,201,235, 23,242,236, 84, 12, 78,211,179, 95,114,216,203, 38,177, 52, 7, + 44,228, 23,236, 97, 8,188, 79,152,159,202, 68,234, 60, 89, 25,214, 43,130,119, 39, 31,183, 90, 21, 97, 5,168, 26, 15, 95,104, +234,120,206,223,230, 66, 89,255,183,118,195,202, 91,130,160,146, 66, 98, 37, 93,106,250, 97,208, 88, 5, 98, 18,180, 44,160,120, +106,161, 21,135, 49,170,124,151, 41, 24,187, 43,103, 96,174, 23, 83,172,151,229,205,253, 17,128,178,107,217,109, 26,136,162,115, + 39,227, 56,105, 18,218,208,240, 16, 45,138,132,216, 0, 18, 59,254,130,175, 64, 66,221,246, 83,216, 35,129, 4,124, 1, 18, 75, + 88,177,160, 11, 84,177,161,136, 74, 77,121,180,170,168,154,164,117,226,196, 30,199,102,206,157,177,227, 68,101, 65, 86,177,228, + 88, 73,102,124,125,230,204,185,231, 44,249, 19,148,146,136,221, 38,172,162, 57, 51,199,253,115, 2,137,201,136, 79, 98,123, 51, +118,127, 20, 92,172, 80,160, 49,250, 86,189,198, 70,105, 58,179,205, 30, 4, 19,113,233, 34, 85, 11, 69,170,226,248, 8, 43,188, +241,216,182, 91,216, 40,105,169,120,186,171, 42,239,116, 92,171,174,128,186, 81, 6, 24,226,153, 81, 55,245, 60,131, 84,121,213, +111,175,198, 87,135, 81, 31,158,173,160,157,144,206,107,112,164,118,190,111, 84,180,234, 82,209,122,205, 24,173,233,183,146, 68, +143,211, 16, 9, 68,214, 35,156,172,185, 82,230, 8,183, 18, 79,159,111, 72, 72,186,132, 62,155,231, 28, 46, 62, 55,203,241, 94, +197,234,206,254,221,184,126,171,217,158, 78, 7, 21,178,135,179, 36,155,173,171,138, 25,204,126,174, 67,135,173, 27, 99,170, 6, +137,117, 31, 38,187, 28, 74,153, 14, 19,208,180, 54,222, 80, 66,113, 1, 95,102,179,138,106, 72,212,119, 85,201,124,225,188, 26, +235,158,181, 22, 55,147, 90,172, 41,165,243,224, 29,240, 48, 4, 5,171,253, 13, 13, 79,132,137,192,242, 72, 66,230,104,206, 74, + 82,105,128,121,187,110,238, 90, 25, 96,109, 99, 32, 27,252,203, 90, 62, 70,221, 12, 81,195,175, 84,125, 17, 39, 24,175,102, 77, +174,120, 85, 79,197,241, 76,122,196,211,145, 72,179,167,155,205,142, 95,128,228,172,116, 79, 11, 86, 29,114,126,151,151,189,224, + 30, 43, 85,221,175, 7,147, 11, 40,157, 83,219, 21, 43,109,137,103,195,110,121,187,211,253,117,250, 67,228, 88, 43,101,216, 72, + 84,118,131,114, 57, 36, 37,161, 49,149,154,141,233,168,127,108, 48,244,205,181,141, 88,235,131, 63, 61, 34, 71,232,165, 57, 40, + 42, 74,252,245,214,141, 65,116,161,227,200,222, 90,190,103, 30,112, 42,136, 70,178,124, 19,229,121, 58, 36,255,177,115,207, 63, +119,179,211, 29, 4,103, 97, 52,225, 4, 20,208,138, 63,207, 14,217, 82, 73, 72,154,227,182, 32, 30, 97, 89,225,114,202,138, 20, + 33,124,200,172,126,206,199,195, 24,177, 48,230, 1, 71,211,112, 84, 53, 51,163,230,103,169,247,101,239,240,243,238,247, 32, 25, + 63,218,120,216,238,116, 69,173,253,122,231, 37, 72,247, 61, 33,122, 66,108,114,125, 47,218,237,174, 8,241,128,201,119,139,235, +181,227,103, 96,116,159, 99, 33,243,197, 60, 54,154,199, 59,105, 27,126,157, 99, 43, 92, 45,147,240,222,221, 59,230,188,227,253, + 94,163,230, 67,131, 91,145,200, 24,195,238, 38,135, 69, 9,250, 54, 12,223,239,190,114,151,187,133,176,165,231,207, 94, 60,221, +126,242, 95,245,253,237,135, 55, 91,143,183,243,250, 46, 78,247,222,221,239,110, 33, 17,101, 96, 14,134,122,255, 60, 59, 57,145, + 71,191,167, 59, 31,131,175,159,226, 36,156,161,137, 91,155,233, 7, 70,184,214,156, 68,163, 44,143, 60, 98, 95,191,204,229,236, +217,216,120,235, 64,149, 35, 10, 87,242,157,179, 31,254, 28, 70,207, 89, 65,160,147, 19,205, 23,242,138, 98,106,177,154, 69, 94, +154,192,106, 47, 46,121,101,161, 51, 7,148,203, 1,203,128,230, 81,194,209,125, 14,245,216,137, 58, 99, 87, 92,145,148,176,119, +169,219,148,114, 85,203,210,182,192,242,235,175, 0,148, 93, 75,143,211, 48, 16, 30, 59,206,171,105, 75,150, 45, 15,237, 97, 1, +113, 64, 28,184,112, 88,137, 43, 71,126, 9,191,137, 59,191,132,223,128,184,237,242, 16, 90,218,125,182,105,218,188,108,227, 25, +219,105, 90, 78,244, 80,169,138,210, 72,150, 51, 51,158,249, 30, 98,200,206,133,195,230,187,243,203,118, 14, 74, 88,227,216, 19, +122,162, 73, 96,205,148,222, 88,117, 88, 14, 18, 15,188,232,177, 41,236,113,212,217, 96,242, 65, 83, 84,178,110,182, 98,135,218, + 11,168,104,159,124, 80,212, 87, 16,137, 93,147, 43, 19,138,139,153,228,193,131, 52,136,243,120, 68, 22, 77, 40, 65, 94, 52,109, + 22,134,153,121, 52,218,200,176, 45,162,169,244,201,248,180,168,151,102,245, 58, 45, 20,166, 58,213, 40, 28, 12,144, 61,135,222, + 9, 49,128,195, 27, 36,108, 50, 13,166, 38, 40,197, 73,180, 86,229, 98,251,187, 37, 75, 57, 23,123,152, 18, 0, 3,107, 64, 71, +109,165, 68, 33,165, 19, 84, 99,251, 16, 74,118, 56,218,222, 45,182, 30,246,247, 25,248,217, 5,131,174, 94,198,228,211,186,238, +154, 22,225, 93,240,148,124, 48, 82,143,104, 48,159, 25,135,113,196,183,146,149,192, 71, 36,113,132,112, 24,134,176, 69,242,119, +181,134,118,176,238, 0,251,182,100,140, 18,227,234, 17, 70,158,163, 84,219,116, 20,230, 35,196, 12,175,106,244,242,100, 86, 40, + 70,152, 76,169, 27,165, 43,218,237, 38, 13,228,204,108, 47, 85,118, 56,231, 51,123, 44,137, 88, 45,149, 9,211,230, 89, 73,100, + 34, 59,203, 66,222,144, 53, 22,102,123, 97,214,142,155, 91,179, 84, 4,228,135,155, 63,128,204,220,210, 2, 9,139,155,236,138, +157, 40, 79, 47, 29, 42, 66,168, 56, 28,163,199,216,192,226,249,152, 52,106,122,242,157,205,138,166,214, 46,235,210,108,245, 60, +203,111,139,219, 93,199,133,182,189,201, 7, 63, 23, 23,180,178,193, 30,135,117, 88,163,208, 31,205,198,143,110,202, 27,171,255, +106,143,108,218, 69,124, 2,170, 48, 62, 95,254, 65,126, 40,217,171,152,107,105,156,109,154,242,197,236,229,143,235, 11, 15,233, +129,171,226, 74,121,253, 18,108,187,183, 91, 42, 8,117,175,197, 72, 72, 80,139,145,212,100, 95,106,181, 85,249, 30, 44,142, 60, +230,190,207,207,177,244, 37,185,130, 36, 74,147, 32, 41,171,194, 73,161,225,183, 36,183, 3,138, 64,220, 28,112,211,163,113,142, +178,148,244,146,147, 95, 37,130, 8,208,182,201,225,231,156,242, 27, 78,188,132,152, 76,143,214,205, 38, 19, 79, 4,139, 58, 22, +164, 97, 50, 73, 30, 70,176, 57,254,242,241,246,236,195, 50,123,222,158,188,129,215, 12, 94, 1,188, 5, 48,145,249, 20,224,153, +163,176, 81, 81,223, 90,190,180,196, 89,175, 0, 85, 5,181, 46,234,251, 21, 2,176,136,190,139, 77, 66,238,157,212,216, 22,154, +247,103,239,204,109, 95,127,157, 23, 80, 22, 85, 25, 34,132, 81,108,229, 70,246,241,164,218, 32, 43, 91, 36, 45,114,217,170, 89, +248,248, 90, 46,254, 55,190,223,149,215,147, 81,214,255,172, 22,223,196, 29, 52,151,178,250,244,185,185,186,212,171,251,182,188, +107, 55,203,117, 49,175, 24, 66,195, 20, 35, 3,102, 9, 85,215,144, 69,176,114,104,105,171,179, 46,109, 45,143, 72, 86,233, 32, + 89,253, 59, 78,196, 84, 38,123,133, 23,175,180,222, 87,199,222, 9,219,199, 70,229,182,178,173,238,213, 40,154,172,171,146,239, + 53, 29,121, 31,129, 56, 19,230,216,141,163,116,255,192,158,174,204, 28,218,134,237,164,150, 92,203,210,247, 38, 15, 97, 63,157, +246, 52, 40, 6, 67,183, 62,248,183,132,255, 43, 0,101, 87,206,219, 68, 16,133,103,246,240, 58, 62,194,122, 77,228, 68,138,114, + 72,225, 8, 5,162, 2,126, 2, 29, 13, 21, 53, 18,145, 40, 64, 66,226, 23, 64, 1, 61, 69, 36, 26,122,154,136,134, 2,132, 68, +149, 50, 29, 33, 2,161, 16, 18,156,196,142,177,119,215,246, 94, 51,188,247,102,214,177, 81,132, 68,231, 98,189,247,206, 59,190, +239,125,159,117,150,114, 36,159,164,205, 48, 18,121, 39,124, 22,229,215,173, 2,183, 96, 73,181,181,225,181, 73,136, 51,162,106, + 52,170,163,166,138, 24,105, 21,144, 32, 45,214, 56,152,235, 33, 41,158,235,174,162,154,113,183,104,184, 67,161,196,169, 50,211, +160,109,224,202,171,216,190,231,126, 18, 35, 81, 1,142,147, 98,163, 51, 72,211,105,244,218,176, 42,248, 33, 20, 6, 73, 2, 39, +211,168, 44, 31,248, 95, 33,131,136,145, 24,130, 45, 95,140, 52,244,248,198, 16, 5, 78,222,209, 70, 40, 7,131,116, 88, 76, 11, +142, 81,242, 10,238,114,245,226,247,222, 14, 10, 6,229, 19, 49,114,204,120,111, 68,107,161,186,212,241,170,245, 86,239,144,159, +129,167,202, 51,167, 21, 70, 24,142,169,201,118, 74,133, 17, 81, 77, 8,137, 3,116,231, 67, 34, 55,188,188, 75,174, 85, 55,172, +163, 76,204, 8,194, 98, 57,175,218, 12, 2,103,130, 67, 47,216,149,131,236, 49,206, 88,152,226,237, 46,144,109, 82,130,107, 13, +110,237,153, 52,178,148, 49, 7,249,167, 18,237,172, 76,195, 45,218,110,197, 30, 70, 98,103,191,127,220,141, 59,201, 41,232, 12, + 5, 65,173, 98, 45,214,167, 22, 27, 83,126, 38,187, 1,153,246,162, 72, 11,122,146, 38,232,178, 5, 43,172,225, 19,193,175,132, + 85,149, 17, 9,218,173, 1, 97,128,135,130,187, 4, 23,167, 92,150,139, 70, 42,120,194,165, 91,230,200,218, 20,152,185, 23,157, + 18, 68,145, 65, 20,162, 7,163, 82,107,209,227, 8,240, 38,196, 72, 93,167,167, 98,163,255,156,108,118,247,103,166,103,187, 65, + 59,206,129,171,124,210, 2, 75,176,142,127, 98,232, 86, 24,161,100, 80,239, 73,229,226, 55,106, 37,234, 90,144, 50, 34,253,133, +112, 83,143,169,183,125, 88,220,179,115,229, 90, 15,221,248, 84,254, 61, 49,205,164, 75,114, 74,225,188, 74,227, 36,108,193, 62, +246,218, 63,104,133, 53, 72, 78, 11,235,119,111,202, 59, 65,139, 71,126,234,158,156, 41, 24,146,234, 81, 4, 87, 88, 70,122, 53, +182,101, 46,212,150,154, 65,115, 48, 12,181, 18, 79, 62,251,125,121,126,245,243,254, 54, 33,111,216,215,233, 71,195, 8,217, 9, + 16,173,145, 24, 42,201, 37,133,220,103, 17,222,154,171,205,199,105,212,242, 91,216,243,226,248,148, 77,166,108, 26,117, 76, 83, +244,126,178, 65, 81, 30, 2, 44,236,247,168,252,165, 25, 67,120, 5, 68,124, 99,225,234,251,157, 15,237,225, 58,227,235,165,161, + 51,247,107,222, 61, 94, 9,223,186, 34,187, 38,140,155,129,221,232,212, 27, 98,209, 99, 87, 24,219,132, 93,110, 33,156,102,162, + 97, 48,153,157,137,246,246, 55,227,210,236,196,171,126,216,219, 59, 56,232, 5, 62, 92,241,239, 44,120,253,124,253, 33,119,234, +188,242,241,211, 59,248,235,227,187,107, 91,187, 95,158,174, 61,185,126,231, 22,220,222, 42,179,158,221,127, 84,182,138, 38, 36, +120,180, 80,180,211, 99,216,199,131,219,247, 94,110,188,250,175, 37,126,245,194,202,232,183,115,180,219,125,241, 38,106,254,236, +108,109, 74,147,100, 98,147, 40,142,250, 73, 28,210, 28,125,134, 90,241,153,194, 4, 5,217, 49,168, 27,164,101, 32,115,210, 75, +110,186, 51,154,113, 33,183, 73,149, 56,241, 73, 93, 41, 49,166,202, 59, 6, 79, 74,241,247,146,202, 33, 90, 43,102,157, 60, 85, +178,193,100,226,124,185,222, 10,142, 84,122,167, 9,149, 84,233,169,208,174, 13,169,198, 14,103,141, 58,197,234, 44,115,162,189, +170, 69,149,254,204,120,242, 46,255,137, 6,254, 17,128,177,107,231,109, 26,138,194,190,215,143,184,137,221, 52,105, 43,167, 74, + 4, 42,229, 81, 84,216,248, 13,252, 4, 70, 38, 6,216, 89, 96,228,223, 32,132,196, 14, 44,136,133, 1, 49, 48,208,161, 84, 13, +165,208, 71, 30, 36,182,227,231,245,229,156,115, 99,167, 18, 20,177, 69,201, 18,251,218,231,245,157,239,251,140, 11,192, 65, 86, + 25, 42,169,246,145,188, 23, 16,224,183,141, 58, 87,102, 13,115, 50, 25, 47, 84,147,140,173, 61,122, 5,240,243,125, 42, 22,238, +166,165,155, 16,166,107,220, 52,185, 13, 41,118,146, 4, 2,101,197,224,220, 81, 6, 12,199, 49, 40, 89,195, 99,242, 70,128,234, +179,166, 35,165,194,101, 70,202,164,205, 49,192,195, 21, 54,184, 65, 84, 70,220,246,139, 10, 9,241, 14,178, 88, 82, 36,174,229, +224,156,135, 25, 70, 65,254,111, 5,177, 27,231,222, 39, 74, 71, 28, 94, 26,136,149,112,214, 17,125, 70,253,210,164,192, 5,136, +142,182,222,117, 46,245,131,125, 86,178,219,168, 92, 18, 21,254, 33,203, 36, 12, 87, 54, 68,181,144,185,128, 81,213,254,147, 5, + 26,251, 43, 33, 77, 45,100,145,188, 21,237,138, 34,251, 71, 51, 9, 86, 77,211, 36,150,184,153,214,173,179,205,181, 6,180, 65, +126,144, 56, 75, 40,246,170,148, 9, 8,133,198,205,244,188, 60, 52, 28,191,208, 79, 57,101,109, 65,230,180, 8,208, 25, 8, 6, +145,235, 42,230,209,164,224, 94,173,182,234, 24,253, 65,120, 48, 74,252, 76, 6,212,123,103,231,197, 19,252,252,179,239,111, 30, +250,183, 47,215,175,245, 92, 40,121,194, 40,254, 21,138, 52,199,123,183,100,105,245, 28, 58,169, 98, 28,107,179,140,242,147,197, +212,220,106,173,206, 66,129, 19,124,219, 68, 50, 62, 35, 20,225,116,154,111,117,204,195, 1, 58,136, 27,120, 46, 81,154, 87, 23, +161,214,186,185,218, 65, 65, 9,123,195,240, 90, 27, 71,131, 67,165, 26,228, 45,119, 79,166, 63,169, 76, 41,103,223,154, 92,180, +184,188, 98,132, 48,185,240,232,197, 39,187,116,168, 85, 34, 81,146,145,247, 99,187,177, 50,141,124, 21,232, 85, 89,142,117, 90, + 46,220,154, 51,133, 74, 25,129,124,182,222, 36,130, 43, 29,146,183,178, 17,165,161, 31, 5,142,237, 98, 97, 78,194, 34,185,204, +106,102, 13, 27, 5,145,171,253, 9,244,210, 44, 27, 51,220,233, 50,204, 8, 2, 74,142, 75, 34, 16, 16, 91, 78,123, 48, 25,232, +196,115,129, 27,184,127,182,135,214,113, 28,138, 93,150,137,197, 50,202,238,209,151, 57,107, 82, 96,170, 71, 51, 3,221,146,130, +152, 95,178,216,242,110, 28,156,237,145, 17, 7,226, 30,253, 65,159,225,180, 77,119,109,183, 64, 72, 60,146,243,213,116,174,210, +157, 50, 69, 80,110,101,205,250,114, 46,224,223,100, 92,249, 57, 18,102, 32,178,248,217,189, 71,175,239,190,122,240,228,241,199, +239,123,199,193, 48,138,229,183,241, 7, 26,202, 60,215,236, 70,199,237,222,146,142,247,163, 59,222, 77, 5,227,161,151,126,245, +123, 22, 52,109, 58,190,175,144,200,219,219,215, 45, 45,135,122,171,203, 58, 55,175,108,237,236,108,247,122, 94,251,206, 85,125, +181, 9,165,192,106,171,181,230,117, 58,205,238,134,211,134, 12,154,103, 25, 60, 38, 38,116, 29,204,130,252,112,252,254,211,201, +100,214, 16,122,219,114, 82,106, 93,109,211,138,130,217,187,151,111,239, 63,125, 72,241,253,127,109,184, 91,141, 86, 60, 26, 45, + 26,190, 60, 57,125,243, 34, 8, 38,153, 22, 35,189, 17,110, 96, 33,112,164, 8,239,126, 50, 67,236, 72,166, 90, 65,164, 15, 82, + 41, 36,164,154, 2, 98,233,234,164,205, 53,169,170,183,152, 28,248,184,177,100,187, 83,114, 14,128, 35, 14,179,240, 66, 7, 60, +237,207, 77,150, 69, 73, 92, 6,247, 57,188, 68,114, 26, 98, 20, 14,209,251,178,164,166,206, 37,114,164, 90,124, 85, 69, 7, 43, + 42, 59, 10, 66,249, 89,165, 19, 69,196, 50,248,162, 97, 59, 16, 66,199,179,225, 57, 56,191,212,204,146,242, 31,171, 30,191, 5, + 96,236,220, 90,155, 8,162, 56, 62,183,221, 77,179,109,218, 36, 53,241,210, 22,131, 98,209, 42, 34, 85, 31,124,240,193,175,224, +103,240,195,249,224,171, 15, 94, 80,144,162, 47, 34,130,208, 34, 18,173,109, 68, 98, 75,154, 38,217,203,236,206,140,115,206,236, +166, 13,125, 41, 44,228, 6,217,100, 47, 51,103,206,249,159,255, 15,252, 9, 40,116,173, 41,122, 70, 13,137, 47, 57,178,117,184, + 7, 30,133,240,164, 33, 26,104,186, 45, 28,222,155, 57,217, 1, 36, 86,237,116,170,156,200, 95, 35,153, 4,137, 16, 96, 20,141, +246,201,144,109,183, 91, 43,108,217, 25, 98,127,244,219, 6,236, 30,168,241,153,143,139, 86,252,187, 60, 4,227,111, 1,214, 5, +220, 7,174, 40, 97, 1,199,120,151,177,208,131,136,222, 94,140, 21,193, 35,176, 46,161,169,202,142,210, 72, 48,113,152,236,253, +141,250,169, 74, 18,149, 72,157,100,174, 33,214, 20,161, 25, 30, 0,158, 3,180, 55, 71, 45,138,253, 94,129,191,159,135, 44,188, + 88,109,119,199, 59,133,203,205,137,165, 59,210,150, 28, 37,174,108,239,154, 86, 36, 92,245, 26,144, 61,154, 36,106, 50, 99, 18, + 52,227, 22,132,237,154,121, 98,255, 61,100,201, 17, 50,235, 51,154,164,177,157,159,154,132,220, 88,246,175, 93, 90, 24, 68,170, + 63,204, 38, 82,123,220,216,205,158,234, 49,212,251, 97, 64, 71,172,156, 35,187, 64, 80, 34,128,181,130,197, 47,156,225,236,168, +230, 99,120,235,161,250, 90,129, 38,152, 52,171, 65,167,238,245, 14,226,159, 71, 73,132,213,181, 8,245,205, 73, 25,191,187, 27, +203,199,146,219, 60, 33,151, 23,249,253,235, 75, 43,237,208, 70, 65,253, 35, 57,156, 40,208,200, 64,245,143,198,216, 79,169, 96, +167,104, 96,201,104,189, 10,168,103,251, 34, 55,224,212,220,168,242,192,158, 66,193,171, 1,253,184, 19,255, 27, 67, 8, 37, 21, + 76, 75,153, 2, 3,254, 86,109,181, 55,216, 43,108, 81, 81, 38,164, 93, 87, 42, 10,215,156,171, 35, 65, 29,203,172, 85, 91, 65, + 44,183,227,172,171,169,150, 89,110,205,202, 60, 98,169, 43,133,143, 26,243,205, 68,142, 37,240,255, 32,114, 7, 94,106,217, 75, + 98, 10, 71, 61,220, 47,117,151,165, 59,209,110,233, 91,172,208,209,159,206,108,172,222,234,246,187,247, 58, 15,182,119,191, 78, +228,164, 0, 15, 81, 90,245,231,143,227,129,179, 82,112, 28, 83,160, 92,228,106,109,185,211, 27,236, 99, 18,160,144,211, 27, 28, +184,237,163, 71, 5, 68,143, 58,115,247,185, 42, 59,197,174, 52, 87,123, 7,187,149, 74, 40,101, 66,241,142,192,226,186, 1,211, + 14,232,211,134, 67, 95,175,212, 83, 35,179, 44,117,166,149, 69, 20,229,120,136,184,134, 6,129, 26,120, 14,113, 7,149,244, 33, + 35,206,124, 4, 86,182, 23, 91,135,209, 16,186, 96,153,104, 55, 91,154,138,227, 40, 75,153,157,146,234, 27,181,155,207,238, 62, + 37, 75,228,195,214,151,231,159, 95,190,238,111,253,136,190,195,117,153, 31,216, 47,173, 5,115, 74,231, 30,149,128, 89, 64, 23, +204, 80, 47,248, 62,220,124, 40,108, 3,213, 3,207,149,111,215,145, 18, 38, 66,152,124, 42,190, 8,188, 40,142, 71,163,161,141, +153,189,192, 19,130, 13, 39,195, 49,166,242,231, 72,240,184,221, 25,169,244, 16,186, 16, 32,204,250, 53,248,243,233,197, 27,118, +181,254,112,115, 19, 83, 64,231,146, 78,222, 94,217,104, 47, 92,120,187,253, 30, 29,128,107,235,107,119, 36,138, 48, 41, 34, 21, + 40,146,147,114,153, 60, 89,127,244,234,219, 59, 88, 11, 1,239, 1,105, 78,170,228,129,231,174,128,170,205,233,206,196, 19,117, +163,113,173,252, 12,157,136,220,165,133,230,192,116,234, 52,224,128,204,211, 78, 84,122, 42,133,123,118, 68,117,110,169,166,208, + 53, 20,224,200,147, 86, 36, 61, 69,133,144,146,208,102, 74,251, 73, 83,162,191,137,153,173,231,153, 66,246,195,176,203,157,234, +115, 13,238,197,123,255, 5,160,236, 90,114,163, 6,130,104,219,237,111,198, 73,156, 47,201, 16, 5,144, 16, 74, 4, 75, 36,110, +144, 5, 18, 43,118,220,129, 53,119, 96,205, 29,184, 3,123,144, 16, 18, 2, 33, 36, 68, 80, 64, 40, 65,129, 76,102, 50,227,177, +221,110,127,154,170,234,246,196, 9,217, 48,139, 89, 89,182,218,174,238,250,189,122, 15,207,119, 90, 97,221,242, 97,154,251,159, + 43,104, 91, 40,233,227,144,146,181,203,131,136,245, 42, 28, 67,229,196,152, 97, 11, 4,115, 52,164,163,138,175,201,224,144,144, + 90, 68,117, 72,200, 52, 47, 22, 70, 85, 43,193,146, 13, 39,114,118, 74,196,120,184, 21, 93,226,194,195,220,144,129, 57, 57,120, + 87, 8,225,109, 47, 66,147,113, 21,150,240,124,184, 18, 44,216,113,120,173, 12,114,168,166, 34,208,168, 16,162, 42,100,147, 29, +166,223,202, 90,138,186,192,201,102,156,192,175,244, 76, 25, 21, 81, 49, 0,175, 16,130, 89, 17, 32, 20,158,225,114, 34,201, 9, +172, 96, 99,110,227,168, 56,148, 85,170,176, 45, 84,119, 1,175,151,121, 33,206, 9,222, 88, 39,211,103,236,202,161, 99,173, 61, +100,107, 69, 42, 36,154,193,202,184,231,135,220,155, 78, 78, 66,219,186,187, 25,110,175,247,166,162, 62, 30,201,145, 0, 55,167, + 34, 27,139,127, 96,150, 73,219,192,135, 96, 31, 25, 53, 9, 4,208,104, 82, 92, 42,187,187,182, 46,215, 98, 54,144, 85,232,101, +165,178, 28,174,150, 61,190,187, 58, 55, 74,228,247, 97, 54, 65,241, 99,100,143,129,197,143, 21,194, 35,244,177,174,217, 34, 67, + 50, 14,135,202, 53,155,177,189,123, 35,222,185, 21, 15,198, 69,154,229, 73, 94, 79, 10, 52,165, 84, 42, 65,166, 20, 82,230, 6, +193,109, 28,240,158,143,159, 39,111, 44,209,128, 55,226,107,145, 13,135, 62,216,136,172,212,155, 47,133,144, 8, 62, 40, 80, 34, +147,149,200, 21,165,109,214,240,222,195,223, 66,176,152,203,156,166, 10, 44,126,145, 98,233,210, 64,154, 25, 71, 50,216,228,127, + 24, 84,153,225, 27, 38,148, 14,182,112, 72, 71,132, 20,125,219, 17,109,172,111, 90, 84, 13, 33,184,189, 22, 87, 83,157,150, 9, + 92,228,186,224,233,185,172,203,126,220, 31,166,131, 52, 75, 80, 0,196,178,100, 41, 72, 82,197,184, 7,184,121,232,247, 38,233, +168, 86, 90,168, 14, 86, 84,185,142, 87,150,101, 59,129,165,137,135,148,207,125, 8,165, 97,113,113, 24, 83, 86,110,177,182, 27, + 1, 15,246,137,189, 50, 10, 22,132, 76,117, 66,108, 99,211,137,228,196,181,215, 67, 16,148, 75,229, 78,157, 59,107, 70, 16,174, +233, 28,112, 84, 16, 3, 46,184, 2, 82, 97,112,172, 28, 92,194,131,219,247, 63,254,248,164,249,183,112,138, 21,183,158, 67,123, +207, 5,147,129, 87, 80, 90, 16,220, 56, 57, 54, 62, 87, 30,109,237, 61,190,179,231,111,218,172, 96,227, 15,205,207, 45,251,245, +111,246,238,215,225,254,112,127, 40, 6,220,143,220,181,123,121, 19,156, 14,191,202,233,113,149, 79, 84, 50,184,193,231, 31, 46, +250,235,243, 78,146,177,131, 60,121, 59,126, 85,177,113, 38, 79,242,242,172,193, 56,164, 49,157, 57,139,175,122,219,152,118,216, +243,215,120, 63,112,214,206,228,251,229,165,163, 97, 33, 51,171,153, 10,113, 64,141,150,151,207, 95, 60,121,246,212,131,184,167, +188,154,171,178,251,153, 33,172,222, 89,189,249,249,207, 62,182,132,221,168, 31, 95, 87,142,219, 38,131,166,137,142,252,240,149, + 64, 78, 90, 26,159,166,147,189, 50,146, 62, 38,100,175,205,118,234,128,162,148,154,129,217, 88,109, 6,120,148,186, 32, 41,131, +165,248,106,134,106,236,156,239, 93,142,151, 75, 49,157,197,102, 85, 20, 2,164,112, 91, 67, 77, 52, 97, 70,155,137,178,115,129, + 17,173,126,174,169, 5,140,254, 67,203,107, 53, 43, 25, 95, 28, 56,253,175,195, 29,126,127, 5,160,235, 90,122,162,134,162,240, +185,125, 13,237, 76,103, 24,134, 71, 0, 19, 55, 6, 68,194,130,173,137,174,253, 11,254, 7,215,186,214,191,224,194,189, 11, 19, + 55,252, 15, 55,248, 72, 52, 38,188, 66, 98,120, 9, 2, 45,109,153,222,222,214,251,157,219,130, 3,152, 89, 53, 51,233,180,183, +189,231,124,231,245,125,181,125,191,185,125,106, 66, 2,132,212, 40,224,176, 76,182,190,236,174, 24,183, 25,134,107,252,160,208, +183, 0, 97, 95,112,254, 9, 22,141, 64,154, 23,174,162, 96, 85, 29, 54, 66, 44, 82, 3,156, 2, 87,209,246,218,158, 53,150,200, + 11, 36, 82,109,115,102, 13, 16,176, 8, 45, 80, 96,163,173,190,163,113,186, 3,176, 27, 8,207,247, 90, 2, 82, 30,122,219, 90, + 46, 3, 23,188, 73, 70,166,153,157,184,118, 36, 7,105, 52, 44,139,221,243, 31,146,100, 86, 36, 89,161, 77,205,144, 89,136,139, + 74, 92,201,157,192,202,228, 36, 57, 14, 2,133,189, 75, 46,215,139,220, 73,127,230, 92, 29, 39, 69,204,149, 23,230,125, 19,215, +186,227, 55, 44,251,255,155, 34, 71, 83,240,205,159, 98,251,242, 35, 69,188,192,148,249,142,146, 94, 89, 46,207, 6,253,158,159, +100,114, 63,202, 53,224,213,183, 27,194,179,209, 73, 94,230,224, 99,132,139, 86, 28,106,162, 43,168, 38, 0,175,165, 10, 48, 38, + 46,160,123,162, 15, 19,197, 10,143, 36,186,142,152,240,172,241,150,221,113,188,245,163, 36, 1,103, 3, 50, 77,147,129, 53, 21, +184, 81, 82,110,167,210,116, 60, 7, 60,177, 24, 32,150, 32, 29, 84,107,172, 21,186, 52,219,243, 86, 23,122, 51, 83,225,175,223, + 26,239,229,167,105,145,230,168, 57,166, 60, 94,174,157,161,203, 38, 94,191, 1, 93, 95,187, 89,145, 42, 35,130,132,130,120, 11, +192, 81, 76,133, 86,148,169,207, 27,242, 18,162, 45, 64,241,185, 68, 42,137,137,129, 12, 57,145,201, 62,226, 51,232, 76, 30,199, + 39,246,104,223,204,200,140, 32,221, 90,206,106,164,147,216, 40,136,153,141,132,125, 36, 76, 18,172, 70, 76,250,199,131,238, 32, + 78,163,249,254,252, 14, 20, 54, 56,203, 14, 78, 62, 63,205,181, 99, 42,170, 70,162,141,203, 66,152,137,129,194,148,176,199, 92, +175,237,119,143,163, 67,139,223, 88, 85, 72,212,155, 0, 1,209, 38, 7, 9, 42,175, 61, 8,251, 27,135,155,216,185,170,110,225, +188, 26,156,227, 44,186,109, 53,179, 47, 26,157, 44,206, 45,125,219,253,210,239, 76,100, 82,102, 50,117,174, 61, 1, 82,210,184, +114,163, 42,205,183, 96, 82,182,136, 1,248,107,108, 64,163, 55,222, 28, 57,220,108,224,176,190,141, 11,176,133, 73,175, 78,203, +151,170,240,108,104,159,241,234, 90, 70,202, 19, 92,163, 8, 91,133,190,230, 56,151,165,176,115, 97, 15,201,150,149,123, 63, 92, + 88, 26, 44, 62,246, 87, 87, 94, 77,211, 10, 95,211, 17, 8,131, 55,247,104,251,140,214,247,105,253,130, 34,165,209, 22, 61,152, +163,135,211,244,180, 79,203, 19,244,103,155,214,190,210,251,159,180,151, 82, 28, 75,153,159, 85, 5,152,217,203, 98, 40,100,105, +229, 39,190, 19,248, 82,106,244, 96,171, 44, 59,255,158, 29,188,123,243,236,201,199, 79,107, 59,167, 7,123,116,249,250,249,139, +151, 31,222, 62,234,222,219,138, 15, 93,215,203,193, 36,168,110,209,111, 85,198, 50,114,159, 38, 2,187,208, 25,211, 11, 11,165, + 32,207,135,187,178,140, 26, 66, 77,193,101,168,193,160, 0,162, 12, 77,117,201,234, 17,172, 5,162, 12, 21, 85, 77, 28, 76, 85, + 85,221,162, 30, 65,226,171,233,142, 25,153,184, 96,115, 43, 76, 35, 71,205, 39, 83,209, 63,167, 16, 84,149,119,241,182,155, 7, +107,210,218,104, 59, 66,221,220, 2,155, 66, 77, 16,212, 40, 41,179,152, 84,101, 4,189,185, 76,203,184, 82,137, 70,167,217,111, + 5,217,104, 39,229, 85, 51,222,245, 52,236, 29,198,253, 14,146,149,191, 2,208,117, 37,187, 81, 3, 65,180,187,221,118,123,236, + 25,156,132,132, 75, 16, 72, 4,144,136, 0,113, 64,130, 3, 7, 46,112,201, 95, 32,241, 53,220, 56,241, 1,156,248, 2,206, 8, +174,108, 18, 72, 17, 72, 64, 16, 4, 80, 50,100,108,143,215,105, 55, 85,213, 61, 75, 22,164, 57,204,209,234,165,186,234,213,171, +247,228, 73,146, 41, 83,252,157, 78, 63,197, 37, 4,251, 20, 15,108, 41,109,179, 33, 27, 8, 3,207, 81,187, 38,132,162,114, 50, + 69,243,167, 94, 98, 40,112,194, 32, 91,243, 20,247, 67,137, 94, 78,121, 59, 68,168, 7,170, 82,124,112,177,199, 68,156, 75, 11, + 40, 11,235,101, 38, 89, 64, 34, 72,232, 96, 19, 32, 5,135, 43, 43,157, 41,156,166,127,163, 59,159,194, 60, 84, 12,131, 64,201, + 9,214, 24, 28,203, 97,178, 88,232,132,107,151, 31,162,185, 64,133, 17, 76, 40,101, 32,214, 17,134, 29, 73, 95,137,210,134,211, +121,120, 71, 93,194,220,159,152, 96, 22, 8,152,169,141,147,244,184, 57,241,233,238,152, 19,172,135, 21, 16,172,175,150,198,232, +247,134,224, 20,167,169, 95, 90, 39,214,247,229,165, 85,213,143,189, 81, 86,167,181,134, 60, 55,144, 60,242,189, 88, 26,200,184, +123, 74, 42,164,144,243, 18, 59,175,148,128, 81, 96, 68,231,107,186,181, 13,157, 91,109,211, 9,195, 26,114,207, 20,136,254,242, +172, 33,232,166,110,172,219,125,205, 80,219, 19, 54,108, 99,189,199,117,160,183, 15, 10, 52, 14, 69, 88, 38, 98,114, 61, 12,140, +175,191, 20,117,169,113,173,199, 85,251,125,183, 24,196, 97, 18,203,220,180,170,230,181, 48, 49,148, 57, 8,130, 33, 23,126, 76, + 26,159,202, 99, 7,117,183,194, 69,213, 64,177,236,102,240, 52,245,126,139,170, 27,132,222,181, 13,254,230, 51, 4,118, 36,116, +118,182,105, 64,179,151, 29,233, 76,118,142, 6,216, 33, 34,121, 84, 93,143,219, 89,187,238, 48,184, 57,179,116,159,169,128, 82, +229,187, 64,140, 50,118, 92,205,193, 45,112, 80, 79,247,151,135,249, 94, 81,229,145,138,118,134, 59,168,203, 65, 73, 21,124,103, +213, 20,198,121, 77,205,199, 5,113,223, 32, 96,146, 77, 7,242,178,234,124,117,176, 54,204,135,244, 60,123,119, 54,111,191,248, +240,146, 26,156,136, 68,142,171, 17, 60, 15,144,134,247,194,126, 6,251,171,157,187,150, 13,238,130, 40,100,142,152,204, 77,221, + 54,239,191,189,131,237, 72,139, 17, 60,210, 82,240, 25,255, 88, 88, 77, 41,171, 17, 19, 38,227, 42,101,142,138,231,185, 46,132, +237, 72,184, 63,179,142,220,220,209,193,222, 85,184, 50, 80, 12, 89, 33, 82,242,156,193, 27, 4, 71, 34,137,146, 20, 91,220, 16, + 61,116, 20,242,162,107,225,203,224, 48,196,152,250,171,180,253,249,122,191,185,123,246,214,211, 63,108,119,159,141, 2,166,206, +176,115, 9,187,121,157,221,227,236,254,108,245,245, 33, 7,131,149, 43,236,193, 22,219,220,102,239, 63,177,189,191,126, 90,172, +101, 37, 75, 26,182, 60, 97, 89, 10,165,244,249,116,140, 54,128,240,235,213, 90,132,113, 89,189,189, 26,110, 61,124,245,104,251, +227,243, 11, 27, 23,253, 27,151,159, 61,126,242, 53,251,177,212, 75, 90,114,139,176, 52, 38,107,196, 4,239, 92,228, 99, 99, 76, + 33,125, 14, 75, 20,136,216, 40, 71, 72,112,132, 10,162, 83,189,228,215,232, 55, 22, 85, 11, 99, 17, 46, 75, 39, 99, 8, 82,128, +177, 70,120,211,164,120, 10,198,177,249,160,233,188, 39, 89,180, 37, 81,111,245,145,254, 25, 58,195,248, 97, 32,101, 86,229,226, + 63,137,186, 57, 54, 11, 43,156,136,141,103,220,251, 36,132,113,101, 13,209, 14,185,243, 76,192,144,170,148, 23, 18, 3, 5,174, + 63, 38, 66,149, 41,105, 53,224,128,208,220, 45,227,165, 29,132, 94,212,172,153, 50,121,244, 2,242,104,216, 49, 38,253,177,100, +243,159, 0,124,157,203,138, 19, 65, 20,134,171,170,171, 47, 73, 67, 50, 56,227, 5, 7, 28,193, 69, 64,131, 10, 46,196,149,111, +224,194, 7,112,229, 59,248, 0,190,133,111,227,194,149,162,120,193,157, 73, 64, 68,103, 24, 52, 49,157,164,187,171,171,202,250, + 79, 85,103,210, 50,186,155, 33, 36, 36,157,212,233,115,249,207,247,203,238, 98,230,174, 44, 50,112,222,195,128,149,241, 92,244, + 27,235, 81,128,129,214, 0,208,151, 21, 13,244, 39,212, 21, 34,209,125,100, 36,109,134,251,201, 38,120,131,254,151,170, 44, 81, + 6,232,128,234,214, 96,182,225,152,175,122,170, 57,156, 42, 16,175, 64, 5,112,127,186, 51, 93, 69, 24,250,149, 48,129,108,100, + 36,123, 90,247,177,216,141, 87,207,132,168,208,135, 33,221, 33, 69,117,113, 6,201,225,222,238,193,108, 55,156, 8, 95, 76,109, +153,140, 80, 90,158, 39, 5,241,190,187,211,128, 9,206, 59,116,208, 97,126,160,234, 77,165, 55,237,156, 4, 99, 82,201,125,219, +143,241,191, 23,104,188,235, 64,123, 13, 93,117,108, 53, 60,143, 60,101, 55,228, 99, 20,226, 25,223,203,101,154,138,239,115,213, +167, 40,213, 75,196,126,159, 19,161,135, 95,196,204,210,210,230,139,117,159,180, 82,182,108, 40,201,209, 64,251,186, 7,170,150, +187,133, 5, 59, 99, 55, 36,187,133, 2,199,128,235,170, 49, 3,230,191, 26,235, 1,128,158,109, 96, 10, 45, 38,197,237,163,225, +248, 48,159, 79,245,130,233,156, 69, 87,226,228,250,165,116,246,123, 93,211, 12, 30,216,153,181, 29, 46,235,227,147, 85,158, 67, +117,227,222, 89, 46, 80, 64,148,202,100, 17,174,154, 38, 2,107, 67,221,138, 90, 24,220,212,221,183,160, 33,236,145,134, 37,177, + 11,157, 56, 86,195, 30,191,119, 35,121, 59,169, 85, 35,124,130,138, 26, 33,104,144,192, 1,117,255, 40,226, 99,248, 75, 72,249, + 65, 74,188,142, 51, 61,105,212, 69, 59,153, 80, 74,154,118, 8,210, 49,214, 33,201, 30,190,144,200,134,228, 29, 7, 91,192,179, +205,212, 27, 65, 11, 0,136,189, 26,203, 26,174,206,148,194,106,107,119,247,249,194,134, 6,133,137, 10,190,198,124, 77, 79,244, + 15,159, 46,127, 26,132,102,218,116, 37, 83,239, 74,149,185, 11,238,155,185,148, 9, 42,248, 48, 34,179,100, 75,222,153, 96,181, +210, 75, 49, 62,186,243,126,246, 46,200,224,183,119,168, 22, 75, 1,103,193, 72,240,109,187, 54,124,160, 80,157, 8,242, 46,161, +170,210, 71,120, 78,125,101,200, 61, 48,158,163, 50,122,208,239,187,252,189, 40, 87,212,137,116,209, 48,155,151, 11,122,174, 59, + 80,122, 63, 31,156, 46, 23,169,132, 89,113,105,244,229, 94,242,109, 83, 63,146, 15, 71, 98,239,106,205, 94, 78,217,231, 30,171, +110,178,105,198,190, 16, 45,184,166,246, 29, 88, 53, 17,170,189, 49,131,196,198, 43,119, 93,110,126,127,196, 30,140,232,240,108, + 47,162, 33,190, 77, 65, 57,197,138,140, 67, 78,162,201,135, 91, 95,223, 60,158, 29,255,248,244,236,197,181,187, 50, 91,170,231, + 79,158,190,250,248,250, 48, 27, 42,208,193, 85,140,172, 49, 78, 56,246, 92, 82,224,218, 92,145, 30, 43, 79, 39,164,198,158,196, +162,145, 70, 89, 99, 69, 81, 46,139,178,240,227, 64, 15, 2,163,155,180,239,144, 19, 12, 92, 83,243,205, 67,130,184,207,235,121, +107,217, 22,124, 52,232,110,176, 53, 46, 53, 1, 71,113, 94, 57,158, 3,197, 92,252, 19, 58,184,179, 44,105, 58, 91, 47,225,247, + 73,125, 25,238,213,228, 84, 89, 74,228, 39, 92, 14,178, 11,123,233, 65, 34,226,178,174,138,102, 93, 53, 42,134,142,164,233, 69, +106,173, 87,149, 94,121,170, 57, 25,157, 91,182,141,145,188,243, 54,248, 57,105,187,253, 15,220,248,143, 0,124, 93, 93,111,211, + 48, 20,117,226,196, 77,214,177,129, 52,109,226, 1, 77,108, 19,111,136, 23,126, 2,255,147, 63,128,120,229, 63,240,196,135, 4, + 67,211,180, 7,208,144, 6,235,218, 46,109,147,216,177,185,231, 94,123, 42, 99, 76,170, 86,173,138,218, 40,177,111,142,143,207, + 61,167,184, 75, 57, 35,187,243, 98, 2,140,179,164, 15,232, 30, 56, 70, 66, 70, 99, 98,211, 69, 52,249,136,159, 0, 4,235, 52, +100, 61,126,112,185,131,210, 2, 16,215,243,217,121,195,122, 74, 31, 99,204,178, 68, 78, 97, 13, 57,112,228, 88,193,107, 79, 54, +134,135, 1,161, 5,238, 65,249,166,194,109, 0,154, 6,232, 70, 57,204,169, 2,122, 54,243,190,227,220,159,210, 6, 95,193,217, +149,192,101, 70,139,184, 34,211, 78,190, 58,228,241,103,130, 74,237, 84, 46,245,237, 57, 46,194,101,224, 18,159,113, 47,248,108, +152,250,192, 46,175, 73, 54, 67,175,235,197, 68,113, 36,116,242, 17,194, 4, 79,182, 98,225,150,195,123,106,161,186,105,112,147, + 53,154, 15,114, 42,252,108, 47, 68, 28, 73, 35, 58, 15, 87,141,221, 38, 20,149, 67,126,177,243,160,220,218, 40, 45,108,153,194, +114,128,145, 67, 7,191, 77,220,195, 81,129, 10, 65,151,120, 97,217,249, 63,120, 60, 43,121,163,103,133,176,148,232,102, 37,112, +110,225,248,175,149,205,162,200,117, 56,182,128,253, 49,119,199,159, 47,247,170,188, 46, 51, 3,254, 50, 52,218,189,191,104, 39, +173,159, 37, 11,120, 42,244,213,181,175, 39,118, 95, 3, 84, 16, 24,130, 44, 31,168, 74, 53, 61,218, 19,107,118,246,106, 3, 97, + 82,125, 62, 64, 63,243,104,164, 30,110,132,153, 85,139,158,254,213, 21,213, 14,208,238, 97, 92,231,207, 15,138,143,167,136, 64, + 15, 26, 23,129,217, 80,108,177, 12, 1,196,116, 89,104,132,223, 70,186, 57, 43,139,178,231, 12,182, 91,172,102, 88,107, 13, 12, +127,201,119,243,152, 40,154,173, 73,188,132, 45,226, 9, 59, 91,205,139,120,140,207,226,138, 1,220, 51,186,223,100,116, 10,116, + 22,207,125, 28,163,107, 51, 90,181, 43, 21,251, 84, 51, 2,143, 30,142, 15,248,234,227,239,223, 16,152, 42, 59,178,160, 10,101, + 23, 14,225,120,101, 14,197,150,232, 63, 77,102,164, 63,110, 77,139, 31,195,153,233,211, 79,103, 31,114, 81, 90,137,233, 30, 21, + 78, 31, 27,207, 53,147, 53, 90, 58,156,100,234,177,190, 51, 82, 79,124, 76, 5,139,202, 54,154,177,241, 16, 61,220, 59,152, 54, +151, 75,136,176,132, 96, 14,150,227, 92,229,225, 65,235, 6,157,228,190, 52,202,123,219,141,203,162,115, 29, 12,100,244,104, 58, +111, 54,199,249,139,221,125,154, 19,211,215,234,229,161, 58,175,213,245, 23,213, 31,169,230,153,234,198, 49,239,229, 34,121,150, +156, 40,245, 38, 37, 59, 10,110, 16, 55,105,241,195,216,132, 77,188, 58,220, 82,175,182, 56,218,247,167,250,117,162, 78,207,212, +238,111, 53, 50,171,183, 87,239,134,211,165,254,218, 5,215,244,253,226,233,147, 35,235, 44,161, 60,199,119,130,174,228,134, 25, + 95,181,115, 78,205,246,157,100,243,164, 40, 38, 47, 65, 72, 40,196, 24,135,177, 16, 51,177, 97, 76,133,224,251, 72,153, 8,128, +247, 9,201,199,183,104,200, 46,212, 96, 44,235,126,173, 57,229,158,142,211,108,182,156, 12,116,142,255,245,154, 85,255,246,252, + 39, 77, 10,111, 88,202,131, 23,197,189, 16,154,122,219,236,236,214,143,105,176, 35,128,206,182,160, 63,135, 30, 13,171, 42,226, + 55,154,106, 6,251,154,237,160,108,218,216,203,125,138,140,190,209, 13,223,225,116,172,194,253,182,245,127, 4, 32,236, 90, 91, +155, 8,162,232,204,236, 78,118, 19, 93, 83,124,180,241,139, 34, 42, 8,130,159,252, 46,254,118, 17,196, 63,224, 19, 65,164,172, +134, 66,140, 49,251,152,199,142,247, 53, 49, 69,138, 80, 74, 33,133,116,155,185,119,206,189,247,156,123, 32,105,152,203,219,196, + 8, 8,107,177,207, 22, 77,147,129,244,218, 24,214,175, 34, 95, 17, 71, 59,180,126, 29, 94, 2, 92, 48,171,225,171,172, 0,139, + 33,161,157, 37,110, 52, 55,230,200, 44,116,182,163,147, 90, 27, 31,136,229,182,240, 22,216, 85,228,247,213,218, 67, 77,128,227, + 32, 28,124,215, 84,163, 97,150,197,161, 19, 90, 77, 98,111, 19,215, 86, 26, 75,235, 56,160,158,129, 67,237, 38, 15, 17,216,238, +191,251, 68,222, 32,152,241,197,191, 41,223,222,135,253,105,178,130,108,134, 41,222, 0,130,128, 66,105, 31,127, 41, 41,178, 15, +130, 85,190,124,115,159,138, 56, 17, 58, 95,210, 82,209,104,157,101,186,250, 56, 22,153, 23,200, 63, 48,225, 29, 25,197, 44, 68, + 73,234,100,174, 1, 14, 47, 74, 61,183,133,173,237,181, 69, 9,224,235,124, 51,158,111,250,118,235,215, 59,239, 6, 63, 58,136, +128, 56,194, 83,121,188,188,230, 6,242,163,174,140,106,102, 26, 32,127,133, 13, 19,228,127,193,179,243, 10, 95, 77, 45,151,142, +162,110, 71, 41,165,204,201,189,207,248, 2, 94, 93,135,212, 78, 9,176,232, 58,166, 54,196, 54, 32,111,210,101,132, 82,146,117, + 76, 99,141,213,105,187,143,189,159, 28,249,224,250,144, 48,107, 79,178,181,162,214,105, 94,164,170, 32,201, 43,234,161,212,173, + 26,211,209, 0, 88, 57,170,166,134,207, 72,117, 46,141,147, 94,157,152,139,109, 68,213,189,214,182,184,206, 22,126,116,156,224, +128,216,229,226, 38,113,254,240, 95,229, 41, 69, 74,118,251,171,184, 32, 22, 74,129,160,115, 18,111, 63, 3, 21,186,247, 3, 65, + 98, 33,236, 42,246,114,196,243,195, 88, 21, 49,110,145,152,128,200,178, 35, 69,238,119,104,112,122,182, 92, 33, 6, 20,162, 35, + 85, 84,134, 44, 31, 83,112,112,175,202,208, 5, 63,105, 56,105,148,196,249,131,199, 63,168,178,117, 0,244, 98,224,114,170,198, + 48,208, 70,123, 28,228,113,211, 28, 93, 68,202,138,251,115, 71,207, 32,223, 78,151,171,193,119, 60,138,129,155, 67, 17,170, 48, + 25,130, 24,202,241, 40, 43, 97, 11, 89,195, 45,120,195, 81,195,113, 52, 43,102, 36, 88, 85, 70, 22,107, 40, 23,198, 30, 50,190, + 18, 53, 0,156, 8, 23, 66, 65,157,201, 66, 31,153, 83, 81, 90,220,245,187,128, 34, 97, 67, 75,101, 48,233,184,104,182,126,124, +254,242,217,141,199,106,243, 65,217,119,234,238,103,101,222,171,211,175,234,206, 79,245,227, 66, 13, 22, 19,125,175, 17,145, 31, + 76,104, 75, 58,105,117, 38, 95, 29, 56,124,240, 59,155,111,170,125,171, 62,190,158,202, 79,254, 97,103,158, 46,244,147,141,122, +113,255,209,171, 47,111,116,225, 12, 84,244,117, 5,101, 96,180, 54, 26,148, 65, 69,114,102,135, 51,182,168,155,110,232,120,179, +189,244,218, 18,167, 54, 81, 2, 78, 83,238,179, 8, 17, 14, 67, 27,128, 10,238,221,156,100,233,122, 98,229,121,158, 88, 38,177, +164,151,246,141, 44, 9,253,223, 22,129,203,219,216,137,186, 52, 93, 53,188,204,220, 10,125,105, 73, 23,145, 34,249, 28,162, 8, +191,196,126, 11,102,190,219,243,179,123,205,131,170,180, 67,112,123,223,255, 14, 3,178, 63,208,225, 14,162,220, 65,168, 57,156, + 85,185, 40, 27, 70, 10,150,205,106,113,230, 70,146, 85,101,231,145,246,250,252,211,109,191,138,199,115,176,237, 81,127, 4, 96, +235,218,121,155, 8,130,240,238,222,249, 30, 62, 91,128,133,132,132,162,132, 10,201, 29,162,165,231, 55,240, 99,248, 81, 72, 20, + 72, 52, 20, 52, 32,129,160,129,130, 84, 20,128,148, 0, 9,246,197,247,216,221, 57,230,177,123,190, 40,110, 83,228, 44,159,119, +246,155,153,239,113,200,159, 64,143, 68,159, 16,151,153,224,245,194, 58, 35,109, 40, 47,141,196,168, 32, 65, 64, 67,226, 89,250, +196,219,158, 14,160, 84, 51, 48,206,224,237, 4,157,132, 20, 89,162, 19, 76,101,234, 66, 79,231, 73,171,180,121, 52,166, 31, 82, + 78,112,200, 85,226,200,124, 48,164, 25, 34, 72,199,135,101, 52, 30, 53,142,102, 42, 46,211,249, 42, 47, 27,246, 46,167,190,158, + 53,153,151, 29, 86, 33, 55,165, 47, 78, 59, 18, 19,214,107, 49, 18,136,134, 13,192,148,158,140,138, 59,205,143, 32, 10, 92,163, + 93,160, 30,151,171,225,123, 8,152,125,255, 74,135,225,186,115,217,168,103,228, 97,172, 24,187,114,125, 31, 84, 81, 84, 0,112, + 43,107,150,233,176,154,153, 69, 69, 38,107, 23,141,109, 26,191,237,220,214, 14, 41,107, 85, 16,212,209, 25, 50,170,177, 52, 88, + 39, 88,141, 63,231, 12,107,186,233, 41, 35,141, 73, 27, 92,152,114, 46,128, 0,129, 29,223,196, 16, 62, 9,102,234,246,203,225, + 16, 33, 56,254, 8,236, 13, 14,175,143, 7, 21,129, 81,221,248, 63, 26,191, 88,252,244,252, 10,248, 41, 88,199,243, 20,145, 42, +137, 27,182, 94,223, 46, 13, 62,253, 14, 37,126,168,186, 5,196,245,228, 44,143, 37,190,247,155, 6, 11, 28, 45,205,157,211,121, +153, 60, 89,155,183, 95, 58, 34,193,170,142, 52,108, 41,121,146,144,213,149,239,234,182, 23,119, 26, 90,128,192, 62,199, 94, 79, +187, 72, 74,110,176, 62,106,182,241,195,212,221, 70,120, 19,139,124,222,180, 59,185,100,197, 25, 67,130,173, 53,111, 32,215, 71, + 15,191,253, 60, 29, 13, 6, 16,125, 0,157, 39,199,106,213, 73,151, 69,118,246,158, 11,110,146, 33, 48,207,230,255,176,105, 99, +174, 62, 93, 57,172, 46, 38,134,146, 73,251,193,150,121, 73, 38,239,224,218,222,153,144,208,148,112, 67,199, 51,100,128,142,124, +131, 37, 84, 86,134, 43, 32, 28, 56,188, 36, 47, 54,231, 82,114,103,132,254,169, 33,199,218,148,176,140, 77,226, 90, 89, 51, 40, +198,242,100,162,167, 24,219, 74,207, 48,207,138,166,239, 16,128, 39,102,156,151,146,225, 88,107, 91, 82,185,177,103,170, 54, 97, +252, 37,196, 77,230, 27,153, 56,110,212,162,169,209,194,206,160,197, 20, 94,150, 62, 55,217,167,205,199,151,175,214, 79,159, 63, + 62,126,166,142,191, 43,245, 90,189,120,163, 62,191,227,130,142,255,112,169,138,133,218,174, 84,117,164,202, 19, 53,127,160,182, + 11,108,198,213, 37,113,116, 84, 13, 49,228,225,183,114,103,244, 6,253,169,239,206,161,180,253,153, 69, 68,162, 30,221,243,191, +190,102,239,127,124, 40, 22,197, 5,158, 76, 60,168, 80,247,118,103,177,144,121, 70,240,131, 4,240,169,191, 49,225, 86,143,129, + 29, 49, 7,107, 8,128, 59, 76, 87,116,236, 53, 7,218, 78, 93, 9,155, 89,200,237,210, 37,197, 32,242, 24, 82, 26, 56, 9,135, +113,174, 62,108, 22,181,183, 78, 23,163,108, 61,209, 55, 77, 39, 57, 21,167,134,249, 16,252, 36,100, 72, 22, 88,211,125,111,120, +109,201,247,185,214,203,236,238,253,234, 36,211, 9,162,207,153,209, 85,146,144,194,111,240, 68,230,118, 59, 75,140, 15,218, 80, + 66, 92,154,230,204,102, 0,250,123,120, 30, 37,255, 89,128, 64,139,191,102,187,119, 99, 37, 16,147,225, 38,190, 5,255, 5,224, +235, 90, 86,156, 8,162,232,173,234,238, 60,122, 18,144,204,198,133,130, 4,193,197,224, 70, 65,220,234, 94,152,127, 17,252, 14, +119,126,131, 11, 23,254,130, 75,113, 20, 65, 97, 80, 70, 6, 97, 28,145,153, 73, 38,147,126,164, 83, 93,229, 61,183,170, 59,137, + 70,201, 46,105,146, 78,119,245,173, 83,183,206, 35,166,191, 93,210,155, 22, 77, 3,186, 93, 26, 13,187, 49,131, 14, 6, 83,203, +162, 46,197,255,200,200,192, 1,104, 40,109,175,167,227, 94,156, 38,120,210,133, 13,136,188,142,218, 66, 69, 90, 25,207, 37,111, + 44,188, 49, 66,240,181, 81,226, 1,176,164, 30, 11,193,159, 98,184, 47, 71, 93, 10,230, 36, 18, 84,198,232,207, 74,135,196,122, +170, 27,191,242,202,248, 22,102, 4,241, 43,186,158,147, 69,230, 54,205,251,125,198, 94,173,214,148, 0, 1, 5,168, 70,142,134, +203,234, 86,214, 58,237,237, 14, 2,166,166, 67, 21, 70, 94, 83,217,131,165,148,218,140,231, 94,171, 78,174,141,247,211, 33, 14, + 14, 98,206,221, 30, 93, 79, 9, 4,231, 4,148,228, 73,102,166,133, 49,181,203,192,220, 80, 48,232,211, 56,155,203, 37,218, 47, + 89,141,154,149, 51,250,229,127, 87,171, 42,170,241,142, 86,253,136,209, 46, 72,147,252, 49, 79,247,115, 73,228,168,164,136,123, + 19,192,214, 5, 86, 55,254, 10,186,177, 8,252,207, 34, 78, 55, 96,255, 44,135,141,140,197, 46, 28, 87,109, 73,110, 39,149, 9, +189,177,146, 53, 14, 95,234,105,225,134, 29,189,211, 81,131, 24,241, 45,217,210,117,156, 29,116,181, 88,159, 33, 72,132,239, 13, + 15,198,188,176,163,145,126,124, 55,121,251,117, 56, 43,231,125,225,120, 44, 84, 45,100, 1, 37,102,191,178, 38,146,134,130, 76, + 38,130,177,108,112,140,177,255, 60, 85, 40,236,138,170,224,113,151,118, 83, 7,162,125,165,125,164,181, 14,185, 10, 71,167, 71, +218,107, 61,229,161, 52, 72,114, 68,215, 54,152, 20,160,119,235,100,212, 65,159,209, 73, 0,165,231,197, 85,206,103,167,188,120, + 28,119, 62,214,137, 17,196,132,246, 81,101,166,243, 11,191, 16,148,164, 72,132, 5,138,152, 8,125, 67,158,108,224,125,182, 40, +219,168, 48, 64, 56, 30,203, 36,178, 51,172, 30,208,156,226,131,211, 36,157,139, 33, 65, 36,156, 28, 97, 36, 97,153,168,209,165, +140, 37,138,146,248, 66,241,105,150,139, 66, 54,226,212,104,176,251,243,242, 84, 41,106, 76,224,189,160, 78,249,205,100,217, 18, +208,146,137,162,107, 37,154, 47, 45,182,152,145,109,118, 44,162, 77,115,108,159,100,204,243,218, 98, 28,221,126, 50,190,247,225, + 13,125,124,109,110,237,197,119, 30,208,254, 67,218, 79,168,252, 70, 7,239,233,213, 33, 29, 28,211,143, 79,120, 72,246,174,209, +211,251,244,104, 76,135,223,233,249,103,250, 82,208,172,192,245,236,197,212, 79,104,236,104,160, 41,203, 34, 83,218, 19,115,126, + 76,179,151,147,119,153, 57,121, 49,126,118, 69,191, 46,204,153,227, 90, 1, 99,120,232,193, 80,212,141,241,180,101,116,165, 64, + 65,242, 26, 31, 87,251,226,110, 55, 28,211,197, 90, 77,114,115,125,204, 89,107,232, 40,104, 29,100, 25, 79,115,241,234, 83,111, +243, 64, 33,196, 45, 8,152,212,118, 61,146, 91,181,204,183,229, 58,217,149, 99,151,106, 81,208,218,129, 34, 85, 13,254,119, 42, + 4, 46,181,253, 25,111,229,130,165,117, 39,234,223,220,185,129,192, 57, 91, 79, 75,174, 91, 80,231,100,139, 44, 55,121,238, 10, + 33, 46,152, 37,180,231, 66,161, 8,191,204,136,174,195,223,105,169,157, 60,148,253, 51,242,211,109,146, 71, 60,183,195,110, 53, + 55,252, 45, 0, 95,231,146,219, 68, 16,132,225,234,199, 76,252,148,101,130,132,226, 72, 94,192, 22, 4,217,103,137,114, 4, 86, + 92,134,179,112, 0,118, 92, 1, 22,236, 88,176,204,138, 40,130,216,137, 31, 99,143,103,166,167,233,191,170,103,236, 24,132, 87, + 30,203,146,109,185,167,186,186,234,175,239,183, 71, 63,207, 71, 52, 90,155,234, 32,121, 31,216, 65,216,120,243,114, 1,105, 57, + 48, 27,117,107,156,105,248,120, 88,106,179,171,138,212,118,134, 73,207, 96, 76, 41, 9,217,120,120,101,227,193, 29, 66, 71, 8, + 84,104, 22, 8,162, 33, 39,179,219, 53,202, 78,142,149,145, 94, 85,141,155, 74,146, 96,241, 87,174, 8,203,247, 4,166, 67,186, +163,108,184, 15, 19, 99,251,166, 27,222,182,227, 33,210, 62, 56, 89,102,227,114, 2,254,208,153,104,194,232, 91,224, 87,131,203, +111,170, 51,109,215, 57,114, 27, 26,204,153,218, 11,217,155,251, 59,158,179, 77,140, 63,113,144,166, 73,160,188,214, 7,234,247, +122, 79, 46,219,127, 14,107, 70, 90, 99,128,113,151,158,117,117,199,232, 69,238,110,102,171,144, 55,174, 10,212,178, 75,209,164, + 43,186, 47,217, 38,137,239,200, 16, 85, 55, 62,174, 41,136,136, 42, 58,133, 48, 21, 60,128, 45,111,169, 80,179,192,181, 38, 82, + 65,164, 48,154, 55,127,159, 36, 29,169,240, 68,154, 75,245,223,248, 46, 35,209, 25, 43, 9,104, 7,242,251,210, 80, 71, 99,215, +233, 89,175,156, 94,131,230, 22, 46,125,138,110, 17,109, 11, 28,177, 84, 2, 57, 77, 5, 91, 87, 93,186,144,117,232, 36,129, 22, +104, 9,191, 10,212,212,126, 45,234,233, 19,243,250,121,246,229,135,115,245, 14,186,251, 16, 93, 25,157, 88,201,152,158,178, 33, + 81, 48, 90,108,139, 84,170, 77,191, 55,156,111, 30,184,108,254, 15,141,164,150,218,132, 97, 51, 17, 79,224,200, 67, 60,142,238, +181,230,163,165, 22, 12, 70,164,126, 55,246, 99,142,131,187,143,113,145,129,214,120, 22, 62,119,212, 27,205, 86,115, 9,184,164, +246, 66, 99,244,129,234,104, 49, 17,238,201,253, 72,149,215, 39,108, 30, 4,121, 3, 31, 10,207,199,103,243,213, 61,138, 71, 81, + 72, 43,217,187,151,110, 83,212, 51, 71, 93,187,103, 56,137,146, 88, 21,171,123, 70,139,213,154,139,128, 3,202,118,219,144,179, +135,213,142, 42,163,247,191,151,183,162,176, 85, 58, 30,166,149,111,109, 10,100,127,196, 16, 92,154, 26,152, 89, 26,150,125, 73, + 17,211, 71,206,181,111,199,235,165, 33,138,189, 0,245,209,183,250,138,102,116,241,138,108,101,127,222,249,207,107,160,151,244, + 5, 77,222, 81,239,138,222,111,233, 67,202, 76,201, 59, 26, 78,136, 94,176, 29,200, 55,186,252, 72,167, 55,244, 80, 80,153, 35, + 36, 91, 75, 83, 69,231, 3,178, 57, 77,234,228,205,120, 58,122, 74, 52,122, 25,150,227,247,235,219, 79,215, 95,179, 44, 3, 78, +168,230,137, 20, 87,150,200,182, 49,127, 36, 96,123, 68, 98,102, 79, 71,128,107,140,209,141,114, 93, 78,192,218, 14, 59,195, 25, +250, 97,237,100,144,244, 53,112,209, 77,251,121,201, 34,222, 56, 43, 20,133,125,190,229,254,213,135, 74, 19,181,239,133,186, 8, +103,105,211,224, 67,194,139, 8,243,212, 95,147, 77,109, 49, 70, 61, 18,206,196,175,202, 39, 49, 47,101,109,110,219,155,179,222, +180,107,187,185, 43,138, 98,147, 87,235,109,145,101,229, 6, 51,152, 97, 89,161,231, 5,171, 50,201, 3, 90, 48, 23,107,163, 43, +127, 80,134,240,143, 74,253,199,210,123,137,120,234, 72, 68,121,240,248, 35, 0, 93,231,178,219, 68, 16, 68,209,234,121,216,158, +241, 35, 9,196, 73, 88, 0, 17, 98, 3, 10, 31,193,255,177,231,127, 96,201,138, 5, 66, 66,138, 16, 34, 68,150, 2,241,120,108, +247,188,186,167,232,170,238,121, 56, 3, 81,150,177, 21,121,218,213,221,183,110,221, 19, 12, 14,239, 94,211,194,114, 61,253, 56, +152, 22, 74,238,171, 61, 79, 83, 90,126, 45, 79,220, 56,194, 17, 67,175, 53, 5, 1, 82, 99,142,176,176, 35,235,118,207, 73,149, +117,202, 26,185, 11,188,150, 70,142, 77, 51,147,222, 81, 83,176,175,121, 19, 58, 47,133,140,208, 38, 44,186,176,177,101,212, 56, +154, 5,164, 59, 7, 4,156, 84, 71,227,216, 92,140,205,106,217, 85,245, 34, 52, 95,138, 96,234,121, 63,170,212,154, 93, 69, 51, +208,142,131, 52, 71,236,170,153,223,195, 25,246,104, 27, 77,113, 71, 43,125,130,227,160,137,214, 45,234, 6,191,156, 65,146, 47, +225,194,229, 57, 91,158,123, 43,208, 67,151,153, 18,143,240,217, 66, 76, 60,248,147,228, 55, 91,149,113,240,185,165,164, 77,248, + 5,155,230,252, 79, 70,148,166, 94,171,134,147,103,202, 81,198,248,112,159, 82,127,237, 7,194,102, 32,254,203,178,249,231,245, +161,234,146,247, 30,182, 24,132,251, 63,248, 81,141,198, 90,240,238, 18, 1, 36, 26, 30,213, 24, 33,175, 62,129, 19, 64,105,238, + 25,218,147,140,127, 50, 85,126, 20,212,177, 22, 82, 96, 37,188,199, 17,173,208, 66,195,220, 39,171,138,141,133, 48, 87,180, 92, +193,237, 6, 79,102,222,219, 55,163,143, 95, 84,161,131,128,164,113,254,173,105,110,121,121,252,100,117,127, 59,157, 28,165, 89, +194,110,242,122,155,167,180, 47,114,160,150,195, 21,187,117, 79, 61,126, 55,130,128, 22,220,205,183, 96,119, 25,246,220,108,167, +176, 57,135,100, 84, 55, 7, 5, 31,152, 5,203,186, 85,155,148,135, 76, 51,231, 48, 41, 92,239,214,190,232,228,234, 38,110,136, +182,139,120, 20,203, 66,154,131, 75, 20,206,164, 57,165, 8,103, 73,204,171,194,226, 48, 60,182,162,167,251, 77, 20,142,101,185, +243,221,142, 36, 58, 12, 88,237, 82,161,173, 95,207,111,146, 5, 68,219, 28,182,173, 3,171, 1, 90,181,133, 45, 55,230,100,195, + 87, 83,122,110,243,201,172,160, 12,246, 10, 90, 65, 31, 6,174,104,194, 6, 61,191,249,253,179,205,238,235,172, 28,221,115,103, +122, 42,178,238,128, 20, 54,247,226,229,133,252, 5, 95,223,235,232,210, 95, 94, 42,121, 28,222, 7,112,183,130, 15,159, 9,186, + 11,175,204,170, 3,125, 14,245, 25, 25, 99,174,114, 90, 9,103, 87,112,241, 14, 94,155,154,180,135, 83, 9,170, 36,154,237,108, + 13,227, 5, 92, 38,240,244,132,156, 51,184,130,235,111,240,233, 59,158,167,243,165,127,122,231, 93,151,149, 57, 17,170,138, 56, + 5,154,109, 19, 84,215,231,241,194,124,146, 50,219, 90,143,170,179, 51,218, 22,169,211,226,221,144, 39,237, 12, 89,210, 80, 82, + 29,128,150,211,242,232, 9,234,106, 91,215,181,227,109, 56, 20, 42, 98,191, 47, 57, 56,246,214, 46, 45,177, 59,254,160,120, 72, + 90, 82,221,119,231, 96,108, 21,224,127, 49, 47,158,235, 31, 33,139, 52,172,173, 77,195,197, 60,152,234,186,148, 69,154,100,233, +190,218, 81,101,199,162, 36, 31,156,230,178,174,173,234,208,203,131, 4,238, 56,176,238, 77,245, 64, 33,252, 3, 72,210,155, 23, + 65,113, 72, 76, 24,230,208,252, 21,128,178,107,233,109, 26, 8,194,251,242, 35, 78,221,180, 21, 41,149, 42,161, 10, 9,169, 82, + 43, 14,220,144, 64,226,206, 25,113,226, 15,240, 7,249, 3, 21,226, 12, 10, 39,132,132, 74,120, 84,180,228,213, 36,235,120,119, +217,153,241,250, 1,185, 16,229, 18, 71,137,237,181, 53,158,249,102,190,239,171,248, 77, 45, 19, 15, 78,216,165, 79,180, 1, 76, + 98, 42,151, 57, 72,110, 58,131,123, 3, 77,159,218,240, 40, 84, 37, 2,199, 63, 1,199,236,171, 52, 18, 73, 36,208,159, 12, 18, +116, 91,216,114,229, 54,132,110,163, 25, 49,179, 85, 27,144, 8, 29, 8,136, 56,232,251,144,206, 61,114,243,176, 59, 33, 68, 95, +166, 42,138,123, 34,246,233,205, 32,206, 82,149,237, 37,253, 8,237,230,111, 13, 16,149, 11, 87,104,107, 63,220,188, 47,204,122, + 89,222,234, 82,175, 0,153, 55,144, 86, 34, 58,103, 2,205,173,117,117, 36,103,141, 72, 68,117,214, 33,184, 55,189,190,144,182, + 11, 66, 89, 29,239,120,124,252,205,203, 40, 89, 77,108,174, 22, 29, 6, 45,252,179,232,225, 29,238, 15,241,219,111, 61, 54, 96, +151, 75, 9,117,138, 63,200,241,227,154, 85, 26,221,181,160,112,132, 9,120,129, 95,213,116, 83,213, 66, 90, 92,144,148,137,112, +227, 52,232, 0,186,182,129,215,255,188,232,234, 36,181,231, 42,190,115, 95,131,227,201,204,144,190, 29,225,186,244, 36, 31,166, + 50, 6, 90, 14, 14, 7, 72, 31, 10, 65,131, 56,142,212, 78,204,178,158,152,104,174,173, 75, 99, 95,243, 73,205, 92, 22,241,187, + 3,185,210,246,237,200, 87,100,160, 66,105,161, 26,128,157,228,217,193,213,244, 39,225,150,120, 75,216, 88, 38, 2,169, 84,126, +229, 23,122,134,245, 83, 71,211,148, 28,203,176,131,170, 80,207,142,147, 27, 42,167,224, 46, 73,140,139,159, 29,159,143, 46, 63, +162, 98, 0, 36,136, 0,121,155,194,146, 94, 5, 22, 95, 36, 92, 97,183, 8, 59, 7, 89, 18,206, 78,143, 79, 71,151, 35,137, 67, +241, 4,236, 82, 23, 7,203, 8, 74,191, 57, 65,219,232,106, 70, 86,112, 45,179, 95,244,172,107, 28,127, 88,139,201,170,176, 5, + 21, 44, 94,169,121, 32, 43, 13, 62,108,178, 10,138,251,142, 55,246, 3, 21, 62, 67, 81, 4,236, 22,170,126, 3,202,248, 75,152, +146,136, 21, 24, 79, 71,161, 21,129,143, 28,212,234,195,192,230, 35,235,209,193,209,247,155, 95, 82,166, 43,107,158,236, 63,125, +245,252,181,251,204, 46,222,177,235,229,156,239,138,249, 94,210,123,172, 62,221, 99,203, 67, 54,190,207,174,177, 59, 34,115, 8, + 69,114, 7,219,127, 37,219,160,169, 75, 89,130, 16,133,209,240,176,200,190,192,159, 31, 94,176,225,143,133, 92, 78, 30, 13,216, +179,221,225,208, 36,241, 21,139,246,217,139, 55, 47, 65,143,200, 44,180, 1,143,247,141, 89,131, 41,171, 5, 37, 9, 31,240, 9, + 37, 67,241, 18, 10,238,150,162,105, 69,223,175, 6, 71, 92, 67,248,108, 88,141,238,100,120, 50,158,124, 21, 78,173, 54,203,192, + 99,114, 33,198, 59,190, 77, 34, 70,116, 3,180,170,103, 10,107,223, 54,195, 90,252, 2, 22, 84,189,254, 21, 36,104, 10,120,214, +153,106,133, 50, 18,102,102,240, 38,125,176,123,214,147,241, 84,207,166,235,201,180,152,195,116, 56,172, 28, 42,119, 96,100, 55, + 44,136,206, 55, 14, 80,162, 70,128,125, 49,108, 27, 96,213,117,113,224,250, 32, 93, 55,103,223, 66,103,253, 35, 0, 95, 87,176, +219, 52, 16, 68,103,215,142, 93,167, 77,169, 21,135, 20, 80,149, 83, 17,112,225,196, 55,240,183,112,226,198, 13,196, 1, 14, 21, +202,161, 21, 42, 32,164, 52, 41, 77,169,147,208,216, 74,156,236,178, 51,179,187, 78,105,213,168,167,180,117,172,205,238,120,102, +222,155,247,106,254, 12, 71, 58,238,185,135,228, 63,193,228, 25,107, 10,110,233, 40,106,211, 68,109, 83,180,138,144, 46,179, 53, + 27, 52,118,231,122,222, 84, 49,161,234, 63,237,224, 21, 33,132,188, 70, 75,138,117, 33, 35, 65,206,244, 59,180,235, 69, 19,231, +152,127,145,105,169, 68,247,178, 4, 61,163,163,144,158, 28, 38,215,155,175,150, 91, 33,234, 25,148,235,242,252,122,168,184,207, +167,205, 15,238,147, 53, 79,197,107,223, 93, 81, 27,208,157,244,152,136, 77,166,172,176,155,176, 16,184,251,206,164, 29, 42, 9, + 92,105,204,164,102,247,107, 78,184, 44,139, 42,224,176, 46,157,222,152,249,228, 56,208,175, 58, 98, 90, 84,167, 87,139,145, 70, +191,189, 45, 96, 59, 76,209,134,160, 13,225, 62,132, 49, 4, 68,131,209,129,163, 17, 43, 79, 93,119, 91,142,109, 24,184,160,100, +130,218,194, 57, 84,202,155, 1, 93,222,219,135,185,255,165, 28,250,234,165, 2, 52,216, 66,145,116,234,233, 96,155,236, 94,154, +237, 73, 24,175, 52,185,149, 9,229,212,190, 87,176, 29,225, 90, 87, 90,180, 34, 73, 65, 28,235,237,164,129,146,147,121,169,155, + 81,112,248, 56, 24,140, 77,129,142,122,210,152,173, 35,217,124, 78,203, 37, 56, 81,226, 1, 16,115, 12,144,160,178, 94, 48,161, + 84,187, 89,113,106,168,155, 11,198,113,152, 40,212,243,225,206,181,228,225, 9, 14,238,146,220,102, 91,201,131,243,124, 68,253, +104,193,225,213, 92, 55,221,222,123,126,240,194,148, 11, 36, 48,170, 54, 75,245,219,128, 60,171, 26,140, 9, 23, 69,156,204, 73, + 36, 52,204, 14,140, 19, 4,137, 36,251, 96,240, 0,139,211,236,182,169,129,240,104, 59, 55,141, 89, 67,202,182,112, 36, 75, 93, +129,253,103, 54, 89,145, 76,181,178, 85, 8,210,105,124,200,224, 99, 40,253, 96, 10, 61,161,236, 31,144,195, 9,217,174,226, 68, + 43,251, 91,210,170,216,158,144,174, 19, 21, 4, 57,180,106,239,118,166,197,108, 55,105, 85,171,245,183,242, 71,255,244,164,247, +168,247,242,245,222,179, 44, 62, 25,142,222,124,125,127,212,239,158,125,108, 22, 31,160,251, 25, 14,143,224,233,119,232, 14,160, + 56,134,230, 0,228, 37, 60,201, 33,155,194,254, 12,228, 16,210, 28,218, 51,200,254,192,195, 51,104,149,208,253, 53,203,254, 14, +210,101,209, 42,163,106, 2, 89,183,217,255,164,222, 30,191,251, 9, 95,204, 87, 89,225, 16, 75,165,212,194,228,240, 7,157,222, +100,126,101, 83,113,176, 41, 59, 41,162,113, 91, 94,123,185, 68,237, 50,110, 59,192,196,201, 59,238, 44,108, 82, 79,138,124,185, + 50, 71,126,105, 35, 59,189,175,107,110,184,118,101,180,226,131, 41,106,165,110,155, 45, 43, 15,173,121, 98,196,205,224,238,188, +157, 68,109,206,100, 47, 79,247, 46,100,221, 37, 19,172,227, 34,157,155, 36,236, 68,233, 78, 35,253, 61,191,188, 40,199,197,234, + 26, 39,234, 49,172,163, 40, 34, 11,229,174,111,129,189,158,130,231,106,205,224,174,135,212,127,170,150,155, 55,126,247,217,255, + 39, 0,105,215,178, 26, 69, 16, 69,171,186,186,166,123, 30, 61,142, 49, 19,178, 24, 33,154,149,136, 27, 63, 64,197, 95,115,239, + 23, 8, 34,238, 93,186,114,109,192,133,139, 8,234, 66, 80,130,198,134, 73,130, 78,232,103, 85, 87, 89,247,214,163,123, 2,186, + 49,129,132, 12, 51, 19, 58,233,190,125,238,185,231,158,179,133,223, 35,103,107, 9,227,209, 8,241,251,136,166,145,221, 47, 71, +113,146,118, 29,140, 14,148, 86,136, 1, 25, 25,252, 30, 27,228, 14, 99, 88, 48,122,196,173, 17,208, 1,193,162,140, 68, 7, 24, +136,222, 5,140,101, 23,143, 96,107,159,113,188,133, 88, 67,206,208,101,131,221, 13,131,144, 26,131,226, 57,136, 33,249, 78, 50, +203,120, 58, 51,159,241,184,233, 64, 70, 52, 97,113, 33, 65, 50,251,117,115,242,179,248,209,144,170, 16,149, 85,149, 34,120,239, + 44,126, 87,161,165, 25, 88,195, 6,203, 48, 91,209, 93, 70,149,213, 50, 88,213, 16, 37,195,125, 19, 22, 28,121,182,187, 52,234, +205,171,124,119,101, 61,100,157,232,251,222,117,125, 89,182,223, 74, 48,163, 19,136,193,111,192, 87, 54,161,124,202,216, 50,225, +217,136,225, 38, 42,169, 68,183, 46,235, 83, 85,175, 17,140, 75, 79,156, 41,175,128,212, 65,197,232, 79, 77,203,221, 39, 94, 10, + 25,248,250,255,255,176, 16,126,230,205,163, 37, 62,146,250, 65,174,198, 12,216, 57, 76,126,105, 10,178, 24,164,233,147, 40, 75, +227, 66, 27, 20,207,204,127, 72,226,216, 29,184, 51, 74,175,141,233, 70, 0,242,221,203, 56, 39,234,232,163, 44, 90,142, 91,185, +216,136,194, 61, 67, 47, 38,187,235,223, 57,154,244,224, 61,191,159,106,192, 95,127, 49,221, 61, 47,206, 24, 86, 99,120, 87,141, +133,156,134,218, 26, 49, 71,158, 69, 62, 1,152, 88,248,107, 5, 44, 18, 7,113,230,100, 48, 53,176,105, 43, 76, 41,112, 48,241, + 31,161, 91, 22,221,107,159,229,224, 20,200, 17, 26, 85, 6,211, 0,255,139, 66,108, 8,118, 11,168,172,236,173, 9, 7, 58, 43, +124,185,249,249, 46,120, 5,127, 98,254, 16,230,105, 86,180, 37,179,199,130, 92, 83,236,168,243, 64, 9,134, 48, 53,208, 84, 91, +119, 84, 68,253, 4,219, 92,224,114, 98,140, 69, 77, 32,245, 27, 88,157, 36, 30,153,170, 90, 54, 21,144, 24,170, 19,246,180,132, +231,196, 6, 75, 40,115,197, 49, 62,231, 75,193,179,157,197,193,195,213,131,251,183,111,141, 47, 41, 89,145,207, 57,121,125, 68, +222,124, 39,239,214,228,188,129,145,201,163,125,242,226, 49,217, 63, 36,199,199,228,233, 23,146, 11,216,129, 74,113,110,100,240, +123,181,145, 52,142,243,211,103, 93,253,158, 74,105,122,212, 92,159,220, 36,171,231,135, 47, 95,137, 39, 31,200,219, 78, 54,141, +170,164,170,219, 78, 72, 92, 20,151,144,179, 65, 61,141,110,215,244,157, 24,198, 87,246, 1,114, 87, 22, 0, 64, 5, 71,127, 79, +189,205,194, 99,101, 87,116,160,161, 84,131,185,234, 21,123, 71,119,221,135,155,186, 85,253, 14,178,120,244,128,229,240,189,196, + 80,186, 67, 8, 76,245, 65, 46, 85, 71, 61,195, 27, 81, 95,223,205,247,229,116,239,162,184, 56,200,238, 84, 77,253,171, 61, 19, +210, 84,118,129,176, 29, 8, 25,137,145, 90,180,119, 58,235,101, 57,180,119, 27,183,179, 22, 80,162, 93, 97, 11, 2,132,239,122, +193,232,223, 84,240, 46,116,246,143, 0,164, 93, 61,143,211, 64, 16,221, 93,175,147, 56,137, 34, 43,225,164, 35, 28, 18,232,160, + 57,157,160, 65,162,228,127,208, 82,241,127,248, 11,212,208, 81,210, 82, 81, 1,210, 73, 64,115, 10, 81,114,119,185, 64,176,207, +246,122,119,241,204,236, 58,107,233, 58,154, 52,150,236,141, 63,102,103,222,188,121, 79, 6,232,189,123,233,133, 91, 52, 98, 83, + 70,160, 58,130,155,137, 14, 34,187, 65, 36,139, 38,128,232,163,138, 64, 19,195,130,153, 82, 12,224, 17,152,221, 26, 44, 67, 92, +197,100,140,244, 47,108,237, 71,111,177,245, 90, 99,139, 47,130, 70,129,129,214, 93,179,254,230, 51,214, 90, 11,116, 54,238,113, +148,152,176, 38,175, 84,243,106, 54, 85,124, 81,171, 36, 2,199,190,178,174, 47,202, 53,228, 91,218,201, 57,180, 35,238,109, 56, + 23, 84,137, 7,162,179,220,209, 28, 24,120,176, 55,103,171,110,240, 99,185, 37,184,139,125, 78, 22,234,134,219,253,147,160, 91, + 88,239, 69,227,133,144, 73,146,206,163,149, 84,245,143, 92, 93, 32,192, 66,153,251,144,197,105, 36,167,177, 28,245,123,163, 88, +222, 25,247,134, 61, 57, 25, 66,105,210,108,125, 63, 87,219, 15,139,229,159, 46, 6, 68,105,123,236,151,173,125,150, 29,226, 57, + 54,232,163,178,255, 72,225, 67,187, 87,229, 65,121,186, 74,133,151, 24, 80,121, 81,179, 27,180,162, 3, 76,183, 41,177,141,200, +149,109,182,168,126,143,165,125,160, 65, 38,131, 88,128, 5, 51,155,142, 64, 21,224,104,194,183,153,217, 21,230, 94, 26,189,120, +194, 63,157,169,171,157, 68,206, 55, 38,199,202,140, 7,163,205, 14,179, 57,164,147, 90,186,173, 40,134, 14, 72, 84,145,113, 24, + 64,195, 98,143,145,127,238, 62,184, 11, 31,220,169,159,121,122,116,114,190, 89,208,240, 97,216, 16, 3,126,173,174, 34,100,194, + 90,118,155, 37,101,183,152, 49,172,213, 56, 10, 36,165, 44, 82,123,144,243,206,253, 26, 72, 66,149,100,165, 52, 78, 56, 69, 52, + 93,234,100,114, 90, 90, 27,250, 29,192,175,254,186,248,198,189,247, 51,168, 53,151,153,116, 12, 25, 39,240,231, 5,196,189, 98, +143, 15, 79,130, 88,149,180,189,128, 82,166,104,179,209,227,131,135,191,174,151,212,131, 44,170, 34, 47,115,106, 52, 55,231,159, + 79,239, 42,163,179, 34,223,230,187,154,163,176,133,176,135,233,172,200, 84, 44,212,239,106,253,126,253,241, 93,121, 54,152, 60, +234,157, 60,126,250,154,189,100,236, 85,243, 32, 22,172, 56,103,213,134,205, 31,224, 0,107,243,244,223,176,241,138, 21, 75, 86, + 22, 44, 83,176, 55, 39,208,226,144,135, 9, 43,185,152,142,198,243,209,193,241,240,254,243,217, 51, 33,213,151,236,237,247,235, +207, 53,128,239, 77, 88, 87, 26,247, 89, 0, 37,106,147,142,103, 23,127, 47,105,102,152, 72,235,198, 77,162, 82, 6, 73, 7,184, +155,212, 4, 60,143, 34,120,139,210, 80,223,142, 52,127,129, 58, 67,182,177,156,196, 73,187,246,199,182, 51,226,233,109,249, 88, + 71, 9,210, 4,161,175, 11,187, 59, 3, 13,189,247,245,176, 57, 50,103, 24, 42, 68,242,253,148, 65, 43,145,193,174,118,151,227, +126,154,240,120,167, 47, 65,136, 11, 73, 50,218, 49,247, 91, 66,178, 13, 29,160,130, 77, 5,196,218, 36,194,146,222,119,213,134, +255,134,116,180, 72,183,194, 6,213,123, 87,187,184,227, 25,248, 79, 0,214,206,101,183,105, 32, 10,195,115,177, 61,142,157,196, + 45, 20, 74, 17, 66,125, 6, 22, 93,240, 50,188, 22, 75,222,136, 69,145, 64, 72, 84,130,148, 5,174,162,144,230,210,196,246,216, +156,219, 56, 9, 41, 59,162, 74,105,147, 72, 81,237,196,243,159,115,254,249,126,212,239, 29,111,234, 17,185, 74, 92, 34,105,190, + 27,167, 7, 45, 81,170, 61,245, 16,120, 94, 74,107,145,233, 13,242,248, 50, 21,167,212,121,199,220, 62,144,222,157,174, 65, 68, +227,196,149, 4,132,226,147, 65, 60, 33,141,251, 51, 13,243, 88,100,191, 30, 45, 53, 90,240, 89, 17,246, 86,109,106,156,197,221, +155, 14,132,188, 53,160, 53,242,177,203, 65, 42, 92,228,197,200,101, 85, 75,166,208, 78,207,170,249,245,244, 26,254, 90, 55,171, + 13,242, 35, 97, 5,128,199, 41,217, 21, 15,187,103,194,217, 81, 56,161, 22, 79, 29,214, 16,166,237,187,240,127, 93,220, 3,230, + 73,237, 22,234,174,151,119, 59,100,115,168, 29,185,112,171,125,247, 60,173, 95, 71,254,227,239,122, 66, 79,231, 74,157, 96,230, +101, 52, 84,118,152, 36,167, 14, 33,226,163, 52,126,146,185, 19,103,179, 20,170,158, 40,113,113,238,220,167, 31,229,251,207,223, +110, 67, 67,188,217,113, 69, 15,144,161,126,239,247, 86,253,231,155, 9,133, 66, 31, 79,232,195,199, 37, 15, 19,221, 51,234, 44, +192, 97, 34,222, 27,122, 87,243,196, 22,169, 69,192,127, 26,189, 56,141,135,121,146,103, 80,109,233,186,229,121,151,191,157, 99, + 5,253,108,100, 19,211,125,191,219,126,153,168,135, 10, 59, 10,240,221, 77,162,124,185, 89,192,217,244,173,196,110,117, 34, 87, +131, 19, 36,180, 13, 13,211,184, 12,239,188, 35, 90,164,214,193, 13,105,104, 75, 84,220, 96, 82,118, 48,132, 83,196, 76,248,105, + 24,180, 77,236, 81, 29, 74, 46,243,216, 52, 66, 54,223,237,139, 34,120,121, 54,192,188, 55,138,170,165,222, 16, 35, 2, 57, 84, +196, 4,211, 53,172, 0,158, 6, 64, 82, 64,244,228, 99,246,197, 19,130, 12,133, 60, 39, 71,241, 58,193,174,105,102,149, 40,254, +191, 12, 67,133, 4,131, 76,221, 28, 33,134, 51,138, 3, 43,102,220, 12,163,237,121,113, 62, 93,148, 49, 5,170,199,216,167,137, + 4, 23, 69,227, 10,208, 69, 24,160, 16,197,171,237,186,242, 76, 45,194,160, 27, 88, 29,178,120,100,211, 66, 15,198, 23,103,151, +211, 65, 97,135,151,203,119,111,186, 43, 60,251, 25,249,101,249,208,240, 64,249, 45, 45,249, 47,149,186,167,116,191,113, 40,236, +182, 55, 74,151,234,235,135,153, 93,252, 44, 23,147,233,114,178, 90,253, 42,151, 55,213,102,254, 80,223,107,116, 70, 98,183,173, + 65,110, 30,190, 63,136, 57,107,109, 5, 18, 94,156,140, 7,178,189, 13, 56,127,145,224,173,160, 36, 2,243,145,243,112, 25, 19, +194,119,221,254, 20,148, 39, 96,199,159,231, 3,141, 44, 74, 94,155,127,238, 74,237,250,226,139, 47,238,143,226, 34,123,207,180, +230, 16, 83, 60, 41, 72, 35,128,235,248, 83,247, 42, 82,110,182,190,171,208,118,208,144,147, 94,224,181,210, 10, 57,176,123, 8, + 81,210, 8,190,130,107,116,234,189, 97,150,134,228,255, 29,155, 35, 61, 95, 84,247, 40,199,199, 41,172,112,251, 35, 0,105,231, +179, 27, 69, 12,131,241,216,153, 63, 45,173,160, 42, 72, 8, 36,184,112, 65,130,247,224, 69,121, 31, 84,245,136, 56, 0, 7, 68, + 69,183, 18, 67,119,102,118,146,152,216,142,179,179, 98,225, 66,143, 43,117,119,181, 73, 60, 95,236,207, 63, 55,107,184, 37, 88, + 61,185, 36, 13,217,171,222,141, 46, 36,251,127, 42,106,221, 27,217,201,201, 56,175,124,174,187,190,201,146,186,109,152,118,229, +151,124,174,101, 54,252,162,105,131, 2,180,151, 67,150,196,193, 93,190,166,118,168,129, 57, 92,100,125,153,178,227, 98,150,240, + 9, 34, 70,228,217, 65, 69,179,156,179,237,146,134,101,110,145, 95,235, 61, 12,236,111, 99,143,141,148,103, 8, 86,207,174,114, + 71,150,134, 48,114, 5,154,140,251,222, 45, 58,245,125,116,236,203,245, 88, 11,170,102,180,208,105, 20,222,213, 70, 68,176,170, + 3, 88,147, 22,172, 17,110,160,179,121, 57, 43,116,222,210,171, 19,186,186, 93,190, 28,102,183, 83,193, 74,129, 26, 45,117,133, +162,248,100,167,196,232,203,252, 43,191,126,254,228,221,102,120,255,253,102,249,251, 60,129,248,239, 57, 3,255,253,167, 5, 0, + 52, 21, 79,182,231,180,145, 74, 90, 48,184,251, 98,148,102,172,224, 21,127, 70,119, 51, 27,205, 47, 31,240, 46, 26,126,186, 97, + 8, 9, 71, 94,110,112,125,231,159, 62,244,103,190,219, 57,156, 2,116, 29, 62,123,220,131,159,191,110,166,124, 21,152,230,184, + 44, 83,219, 49, 27,112, 12, 89,101,179,253, 49,173, 64, 73, 88,129, 25, 98,249, 83,243, 52, 15, 98, 99,206, 15,152, 74, 21, 97, +194, 45, 81, 60,130, 55, 7,129, 55, 47,222, 94,127,190, 62,114,210,181,197,161,128,232,143, 6,119,161,159, 56, 87,159, 50, 26, +108, 16, 20, 85,227, 53,178,139,127,198,148,180, 0, 54, 34,131, 29, 60, 40,192,204,215,114,107,117, 85, 41, 12,137,155,129, 30, +157, 92,108,203, 13, 3, 43, 60, 68,119,144, 52,229,138, 4,179, 73,158, 8,229,233, 1,234, 4,149,186,145,186,119,116,222,206, + 52,223,171, 26,107, 80,177, 39, 82,190, 69,175,214,223, 4, 56,135, 37,236,238,149, 51, 74,114,201, 72, 44,201,220, 64,219, 54, + 97,147,154, 31,241,110,199,233,208,109,190,160,181, 18,220, 47,100,149,131,101, 8,243, 78,248, 32, 53,161, 58,174, 53, 89,157, +102,126,233,126,221,184,203,240,177,161, 79,113,249, 70,211,109,154, 55,103,158,207, 63, 67,242,185,154, 50, 50,183, 34, 50,168, + 39,241,237, 33, 71,250, 32,180, 71, 41,171,238, 71, 43, 69, 49,248,168, 44, 47,244, 24,170,225,207, 2,110, 82, 3, 37,152,224, + 55, 58,250, 58,204,253,185,159,221, 62,255, 94,220,162, 98, 48, 63,242,108,167,125,204, 37, 99,240,214, 55, 77,100,238,231,202, +124, 33, 51,218, 41,172, 95,110, 23, 57, 54,157, 78, 60,218, 59, 74,246, 34,153,244,166,106,128, 89, 37, 7,177,182, 71,162,193, + 39, 68,242, 22,255,187, 73,126, 52, 31,127, 25,233,103,244,236, 67, 20,240,225,128,104,253,224,223, 2,176,118, 53, 61, 78,196, + 48, 52, 31,211,204,116, 74,187,156, 22, 46,192, 34, 14,252, 6,126, 58,191, 3, 33,237,101, 57,176,172, 16, 5,164, 45,171,118, + 62, 18,219, 36,118, 50, 51,101,185, 32,113,232,181,157,180,169,253,108,191,247, 92, 61,202,108, 18,110,141,168,122, 35, 32, 26, +209, 98,218, 12,139, 50, 69, 20,146, 38,227,149,100,180, 91,169,120, 51,234,218, 56, 89,186,205,116,120,144,228, 28, 18,129, 32, +161, 38,118, 95, 74,137, 87,151, 5, 61, 17,221,115, 47, 21,179, 57, 50, 80,134,199, 90, 75,141, 22,195,195, 42, 13,226, 76, 4, +133,235,170,113,220,210,119, 54, 62, 9, 30,124,215, 84,110,235, 86, 29,132,175,167, 61,167,142,212,225,225,219, 67,103, 20, 6, + 33,189,243,210, 12,171,244, 12,215,120, 48, 53,178, 76, 81,130,187,154, 73,238,204,101,152, 24, 79,243,164,235,108,173,118,153, +171, 64,193, 6,140,248, 72, 59, 11,111, 91,186,187,247,159,104,110,103, 51,251, 69,167,209, 40,210,137,130,245, 28, 96,226,113, +124, 72,230, 74,171, 85,235,210,180,198,115,147,233,221,203,103,239,191,237,239,202,207, 67,255,142,190,241, 63, 69,121, 95,212, +231,211,117,116,124,215,186,242, 63,143,231,170, 97, 6,168, 15,125,170,235,234, 1,186,228,112, 0, 3, 51,225, 70,165,159, 88, +115, 3,120, 4,186,216,185,171, 23,187,234,114,227,146, 91, 0,253,234,225,199,125, 15,105,239,122,207, 40, 31,217,215,188, 25, +135, 45, 46,132,132,114, 43,145, 85,205, 98,171,251,234,242,234,246,251,103, 45, 78, 21,182, 10,224,207,157,228,211,235,195,237, + 71,154, 22,220,211, 92,126, 75,129, 78,150,227, 7,106,165,254,148,142, 48, 27,153,118,155,167,167,177,243, 97, 88, 22,248,201, +243,196,136, 38,137, 87,207,242,124, 87,232,251, 17,212,167, 30, 35, 79,246, 89,217,158, 63, 39,171,114, 64,154,233, 25,101, 34, + 77, 82,148,105,146,173,120,209,149,128, 71,195,130, 64, 18,143, 73, 18,228, 30, 63,145,138, 89,181,212, 48, 42,115,226,215, 77, +219,135,158, 13,141,149, 76,152,211, 3,138,237,108,238,103,224,118,125, 17, 47,250,254,240, 51, 94,176,166,110, 31,250, 94,242, +144, 15, 71, 3,214,251,181,209,155,214,134,174,201,222, 3, 83, 4,167, 66,220,114, 37,223,135, 34,147,150, 51, 28, 42,229, 35, +190, 83, 61, 37,129,249, 0,116,140,239, 25,171, 28, 15,199, 1, 7,196,152,193,253,155,231,175,175,191, 92, 75,116, 70, 81,242, +112, 47, 29, 10,164,227,249,170,200,182,164,203, 42,130, 29,157,213,168,106, 17,220, 5, 38,194, 76,170,153,128, 54,254, 61,153, +207,177,175, 72,158, 38, 93,146, 94,134,248, 50,177,164,105,181, 41, 46,172, 8,104,177, 75,153,178,134,209,100, 23,225,162,120, + 40,117, 70, 60, 26,240,126,185,164, 19,146,157, 91,158,123,212,144, 27, 30,106,225, 71,143,165,223,162,202, 16,143, 10,141, 28, + 75, 84, 54, 69,210,203, 14, 28,179,114,126,225,125,254, 40, 75, 77,223,198,111, 1,120,187,178, 21, 39,162, 32,218,251,205,196, +238,100, 70,153,121, 19,212, 39,241, 93,152,255,255, 5, 17, 70, 65, 68, 4,133,152,201,144,142,189,222,165,188, 85,117,171, 23, +193, 87,243, 20,210,157,164, 55,234,158, 58, 85,231,148,204,215,158,155,177,196, 5,141, 0,172,255,164,202,158, 53,186,165, 41, +145, 76,250,112, 6,129,113, 80, 77,193, 61,219,228,168, 71, 3, 28,150,229,159, 29,141,204, 59,171,137, 45, 71,120, 54, 69, 35, + 31,109, 28, 57, 36,240,218,138,207, 35,175,136, 25,254,127, 78,174, 11,232, 25,162,144, 31,247,201, 65,238, 35, 66, 66, 60,146, +255,181, 34, 65,213,147,255,206,161,125, 28, 81, 31,107,200, 85, 51, 56,131, 46,132,168,100,234, 24,217,137,119,115,233, 60, 70, +124,209, 2,196, 61, 73, 2, 18,169,119, 53,148,208, 22,193,125,182, 46,140, 22,134,116,139,203, 11, 40, 55,133,183,149,133, 1, + 62, 24, 55,113, 26,185, 92,115, 29,145, 81, 3,113, 46, 62,227,232,208, 58,217, 52,163,118,160,246, 70, 93,169, 66,229, 73,159, + 66,181,219,190,201,175,142,186,211,235,251,244,223, 94,201, 44,134,153, 15, 0,132, 23, 98, 46,126,148,247,220,216,163,104,235, +147,137, 60, 74,220,246,232,106,213,113,109, 39,137,238, 95, 85,175,171,221,151,239,245,195,169,249,124, 28, 62, 30,127,189,127, +217,221,191,123,161,114,117, 91, 58,221,155,199,139, 25, 70,232,125, 26,143,218,137,168, 84,205,245,198,135,133,189,157, 33, 9, +222,166,187,234,174,110,209,202,209, 67,220,111,135,175,164, 15,196,134,150,178, 40,159,186,147,244, 6, 67,165,202, 86,119, 84, +227, 68,144,111,157,147, 18, 39, 4, 91,246,128,186, 82,172,219,101,244,144, 58,145,192, 83,192,197, 14,156,237,243,223,221,121, +208,122,210, 89,197,161, 28,207, 18,170,152, 53,167, 41, 70,247,148,114,233,148, 1, 22, 13, 13, 66, 75, 94,220,213,227,146,188, +168,187,115, 44, 43, 76,236,130,178,249,210, 93, 82,170,247, 56, 38,200, 19,153,239,192,154, 88, 30, 30, 68,236,127,200, 18,169, +103, 4, 9,247, 52,140, 1,161,177, 17, 89,208,167,160, 85, 66, 32,121, 84, 86,248,195,210,214,176, 49,203, 77,121,125, 56,163, +209,241,185,189,120, 16,141, 3, 73,204,224,195,199,237,238,230,103,125, 66, 23, 40,212,217,250,221,235,184, 47,204,102, 15,251, +112,151,157,148,235,167,210, 61,200,162,238,100,171,147, 58, 16,106,217,243,198,233, 97, 72,252, 58,221,235,184, 55,208,140, 88, + 83, 29, 81,135,111,221,195,143, 79,150,202,213,228, 2,230,129, 41,202, 77,173,180,198, 64,152, 91, 40, 45,142, 17,231,111, 49, +172,195, 43,129,116, 39,200,125, 21,220,225,111,129,105, 12,139,134, 72, 88,184,144,174, 9,249,176,220,139, 59, 21, 76,220, 53, + 91, 9,185,127, 76,119,136,201,206,136, 44,209, 66,181, 55, 88, 22,115,110,129,231,131,131,147, 77, 8,196,116,114,228, 10,153, + 82,136,135, 85,177, 52, 73, 22,245, 0, 81, 29, 49,120,143, 23,158, 49, 65, 89, 73,169, 92,194, 12,249, 84, 81,148,181, 7, 4, +119,174,130,198, 31, 1, 72,187,150, 93, 39, 98, 24,154,215, 60,218, 10,170,123, 97,129,196,243, 19, 16, 44, 88,242,227,252, 4, +232,238, 17, 98, 9,151,150, 62,102,154, 38, 25, 19,219, 73, 38, 3, 98,129,216,116,211, 86,154,167,125,108, 31,159, 99,106,212, + 35, 19,126, 79,180, 66, 69,251, 5,141, 94,109,219, 7, 3, 70, 28, 15, 89,215, 20, 89, 46,218,180, 42, 86,219,125,139, 90, 99, +138, 30, 77, 36,204, 0, 37,103,143,245, 23,222, 97, 15, 92, 74,132, 36,164,202, 81,191, 26,104,192,108,150,140,101, 37, 2,110, + 84, 41,107,123,179,106,117,103,116, 12,124, 45, 90,214,144,154, 88,188,195, 78, 56,239,166, 78,244,187,203,142,183,224, 98, 82, +193, 55, 89,134, 37,223, 31,235,131, 32,231,105,134,170,231,212, 76,132,200, 93,169,156,210, 48, 49,235, 34,121,146,124, 88,150, +190, 77, 66,214,195,106,186, 98, 19, 41, 80, 78, 47, 55,174, 7,121,119,188,158,150,137,148, 25,238, 29,109, 33,155, 88, 80, 35, +147, 32,214, 34, 38,158,198,217,234,221,217,118,141, 89,119,230,166,239,111, 55,246,249,118,253,244,225, 90,220,143,101,200,249, +175,184,251,255,145,251,159, 15, 53,135,251, 43,125,118, 4,234,141,152, 21, 33, 44, 29, 42,211,231, 15,180, 81, 52, 82, 98,123, + 52,137,119, 47, 30, 15,123,169, 39,221, 75,109, 32,124, 19,226,195,215,147, 10,254,253,155,103, 79,182,189, 14,206, 89,255,249, + 30,187,179,158, 96,207,136,139,145, 99,211,160,181, 20, 84, 52,220,239, 71,156,200, 17,106, 38,148,138, 24,121,186,216,193, 94, + 25, 83,211, 78, 98, 8,146, 36, 33, 65, 38, 54, 47,224, 96, 96, 67,187,163, 39, 72, 20,150,244, 98, 18, 58,214,248, 71, 67, 70, +246,180,146, 52, 17, 97,252, 56, 28,251,110,229,124,152,210,146, 54, 80, 91,156, 89,139,188,110,165, 76,131,142, 55,220,254,111, +176,109, 24, 98,172, 31, 47, 35,131,251, 64,190,160,167,209, 18,173, 0, 50,245, 93, 38, 19,112,194, 56,164,112, 19,144, 63,144, +215, 84,216, 79, 18,213,242, 89, 18,152, 13, 35, 41,253,188,125,245,250,227,151, 79,140, 51, 88,210,140,221,193,226,133,216, 15, +123,106, 87, 98,187,134,108,203,240,152,136, 10, 34,209,241,131, 25, 64,164,234, 71,159,176, 59,255, 8,131,194, 29, 97,204, 70, + 78, 1,249,175, 41,112,210,202,110,110,188,248, 42,187,135,106,212, 95,190, 10, 69, 78,210,136, 65, 28,226,101,187,186,159,222, + 31,192, 71, 8,127, 65, 54,228,132,211, 69,122, 43,233,132,242, 40, 53,153,161,254, 22,220, 37,164,190,204,108,161,151,240, 41, +112,235, 83,134,188,143,154, 88,215,117, 23, 69, 46,122, 51,201,150,186,200,198,150,106,169,130,240,149,131, 93,233,201,228, 72, +176, 4,239, 51,197,165, 18, 98, 15, 69, 38, 39, 31, 6,143,224,240,151, 99, 56,172,213,141,102, 83, 40,194, 75,172,196, 1,243, + 52, 11,202, 42, 92,217,125,103,235, 33,138, 72, 97,233,139,192,199,138,150,168, 52,149,193, 32,172, 18,107, 83,102,233,202,191, +170, 72,254, 18,128,182,107,217,109, 27, 6,130, 92, 74, 10, 77, 59, 78, 91, 24,237,161, 64, 62,160,151,254, 63,208,143, 40,252, + 5, 65, 2, 36, 65,147,131, 83, 36,122,152,226,163,220, 7,101, 41, 70,209, 83,125,178, 13,195,150, 96,114, 57,187, 59, 59, 51, +213,103,116, 58, 13,255,208,242, 66, 22,191,204,136, 52,250, 98,107,234,188,127, 8,197, 71,154,158,192,100, 26,144,205, 82,123, +108, 93,249,134, 38, 3,105, 16, 17, 23,174,135,192, 7, 88,145, 67,129,197,152,176,152, 13,198,169, 97, 72, 91, 5,117, 0, 27, +149, 97,187,185,172,236,166, 54,182, 89,229,159,174, 1,149,203,134,228,107,224, 40, 30,243,109,134,209,117,161, 39,193,231, 64, +248,166, 16,244,229,216,208,172,201, 78,126,245, 90,205, 20, 77, 64,168,239,124,234, 44,229, 7, 64,195, 52,177, 48,169, 73, 72, +207, 93,195,137,177, 2, 37, 79,146,244,241, 2,210,215,205,104, 80,152, 34,222,156,157,246, 90,136, 74,168,226,210,163,122, 37, +166,168, 70,141,237,168,200, 43, 84, 91,164,123, 86, 79,117,123,213, 84,207,135, 28, 89,188,249,151,119,217,255,126,132,153,130, + 77,152,225,181,170, 68,121, 40,251, 92,151, 75,237,104, 59,241,253, 14,244, 50, 63,191,127,232,238, 30,221,205,107,247, 75,141, +109,129,252, 63, 30,134,205,250,249,251,183,207,198,152, 47, 91,119,123,112, 43, 64,187, 87, 71,107,162,243,234, 42,189,110,109, +142,203,198,249,161,162,177, 64, 36,114,165, 50, 15, 10,172,235,144,225,108,149,115, 32,154, 69,103,130,141,186,222, 93,239,239, +246, 84, 58, 99,212, 30,223,250, 28,217, 99,142,116, 94,192, 97,250,184,254,116,232, 95,242, 2,198,230,187,112,226, 2,185,176, + 72, 49,103, 12,206,245, 71,170,208, 11, 21,146, 85,227,200, 66,171, 70, 59,120,148,245,133,181, 93, 71, 42, 69, 90,107,243, 23, +229,224,142,176, 78, 76,239,229,211, 49,166, 9, 80,241,200, 59,123,112,106,214, 83, 97, 25, 61,153,165, 79, 90, 38,245, 57,132, +177,156,130,172,231,159,183,123, 93,122,237,197, 2,142,252,179,148,150,117, 43, 89,125,204,120,136,106,223,249, 34,194,227,239, + 39, 34, 26,224,125,230, 32,222, 30,251,196, 14,143,192,131,138,129,120,103, 36, 24, 17,199,252, 95,132, 25, 54, 79, 51,228, 59, +241,172,195,242,205, 48, 5,125,141,226, 37, 62, 30,131,114, 21, 50, 12, 48,171, 38,176, 23, 56,175,150,218, 12,117,224,130,112, + 73, 99,137,232, 73,148, 73,168, 27,119,134,220, 9, 74, 67,148,150,249,201,159, 67,130, 90,124, 31,220, 23,116,153,185,114,250, + 28,194, 47, 66,124, 90, 52, 96,207, 58,180,239,230, 69,185, 68,163,138, 9,182, 46,133,121, 62,177, 50,158,132,214,183, 31, 86, +187,202,153, 17, 37, 72, 88, 93,135,157, 38,167,163, 28, 10,139, 47,138, 39, 27, 69,152,138,232, 99,203, 36, 67, 82,200,203,102, +103, 97, 75,171, 11,173,137,222,194,203, 64, 6, 16, 48,141, 31,253,229,241, 71, 0,214,206,101,183,109, 24,136,162,164, 30,180, + 37, 71,129,209, 6,249,134,108,251,255,251,162,203,246, 3,218, 77,186, 73, 22,173,109,200,122, 81, 36,203, 59, 67, 74,148,211, + 2, 5,218,172,156, 69, 0,191, 66,206,220,185,115,110,145,108, 4, 72,185,136, 16, 33,195, 82,206,114, 62,136,189,118, 70,201, + 98, 87,150, 54, 74, 68,124,221,149, 20, 73,209, 67,130, 67,206, 0, 66,231,121, 77,144, 32, 12, 70,204, 40,173, 76, 78,154,251, +170, 86, 27, 42,120,151,131, 56,227, 21, 70,178,185,230, 88,195, 83,224,176,150, 59,127,212, 35,146, 58,167,164, 52,103,125, 71, + 61,103, 54,102,222,226, 25,118,186,133,200, 5,179, 2, 52, 47,222,108,222,138,110,146,171,153, 13,122, 45,122, 52,221,154,154, +205,254,247, 0,142,143,156,250, 69,199,161,166,130, 75,120,231, 54, 18, 55, 13,197,234,114, 84, 86,251, 70,215,223, 67,223,199, +121,250, 3,172, 83,135,178,215,209, 80,218, 92, 45,167, 10,101, 59, 49, 95,140,172,197, 12, 2,129,144,223, 46,125, 1,121,247, +255,152,217,255,253,148, 55, 91,194,129, 76, 60, 60,115,114,129,185,132,151,176, 72,159, 39, 33, 62, 62,255,108,123,247, 34,208, +211,244,188,218, 79, 15, 62,125,189,124,120,122,120,215,168,174, 83,119, 10,153,133,221,132,191,186, 82, 31,112, 30,196,251,195, + 84,169,199,215,235, 24,129,251, 81,178, 4, 63, 11, 39,226,190,170,253,215,239,236, 11, 70, 23,208,152,254, 27,249,249,249, 11, + 1, 6,150,222, 25,142, 70, 80, 45, 11,165, 39, 22, 24,229,160, 59,127,172, 53,213,177,215,253, 96,135,186,172, 15,251,230,220, +157,136,144, 30,208,178,113,148, 38, 57,135, 27,197, 54,138,253,224, 42,160, 13,211, 92, 27,125,223, 28, 47,167, 31,213,225,174, +239, 7,231,174,228,114, 9, 99,158, 0, 54,164,209,129, 11, 26, 13,211, 60, 88,227, 35,133,157,137,183, 72,253,201,248, 87,127, + 34,150, 89, 30,165,138,240,146,201, 4,202,105,134,246, 22,255,154,108,188, 24, 74,251, 43,242,157, 54,173,163,244, 21,186,188, + 28,229,146,132,173,127, 34, 1, 24,194, 21,102, 14,214,103, 36, 31,161,111, 18, 19,222,181, 78,100, 71, 52, 94,118, 3,164, 74, + 76,199,111,142,126, 60,246, 45, 23, 6,231, 8,242,242, 53,251, 8,112, 44, 22, 25,225, 8,148, 4, 18,112,108,186, 35,166,242, +178,145,186,106,214, 33,196,137, 53,119,123, 51, 50, 36, 61, 27,209,159,113,156,104,227,220,194, 46,136,129,191, 30, 82,201,180, + 24,119,191,249, 63,181,183, 27,161,226, 13,117, 50,204,102,243,181,102,181,209, 48, 17, 62, 53,127, 89,190, 78, 47,181,186,183, +211,168, 93, 8, 58, 94,173,150,193,171,194, 71, 80,190,104,238,164, 63,251,151,169, 69,130,161, 96, 7,109,153, 87, 77,241,216, +250, 27, 20,236, 10,168,127,165, 47, 8,133,106,177, 45, 99,156, 72,199,189,183, 63,191, 4, 32,238,106, 86,219, 6,130,240,174, + 37,217, 22,177,155, 6, 66, 66, 79,125,129,210,119,104, 79,125,140, 92,250,186,121,134, 64, 33, 52,144, 56,137,229, 88,218,255, +238,124,179, 90,109,144, 33,199, 10, 29,180,146, 48, 88,178,103,103,103,190,159,197,124,166,202,214, 97, 21,245, 57, 53,234, 93, +210, 8,107,104,118, 34, 39,188,248, 29, 52,189, 72,115,176,186,247,166, 33, 45,245, 5,152, 58,210,251, 4, 70,101,236, 26,145, + 41,168,145,146,138,158, 48,255,134,113,122, 66,182,161,121, 36,128,200,149,146,100, 90,235,117,187,104,183,171,179, 77, 67,150, + 52,168, 55,145,221,235,146,204,132, 5, 99,104, 3, 57,141,213,189,125,213, 88, 3, 66,244,198,242,172,226,115, 41, 77,134, 28, +159,229,164,163,192, 41,121,200, 26,238,156,197, 51, 76,141,194,110,146,130,202, 76, 68,230,124, 5,212, 92, 1,151,168, 70,124, + 17,187,112,145,185,239,206, 13,199, 64, 11, 99,169,156,188,183,238,100,163, 82,143,109, 73,133,196,182,195,219, 37, 89, 96,244, +243,148,112,123, 65, 82,123,127,131,185,179,131,243,102, 93,168,131,253,247,173, 76,220,108,177,151, 87,253,251, 97,222,110, 7, +245, 38,205, 61,140,129, 44,126,175, 45,118, 82,199,180,102,219,214, 95, 62,175, 63,173, 23,175,154, 84,125, 24,151,169, 64,242, +250,243,188,123,238, 30,170, 66, 86,122,194,135,225,255, 29, 35,242,211, 97,199, 46,234,105, 1, 39,211, 53,100,141,153, 41, 67, +169,211, 96,226,227, 15,117, 67, 6, 82,189, 81,223,190,126,239,205, 49, 30,144,150,122,112,187,238, 49,198,250,196,163,134, 41, +150, 44,168, 46, 19, 50,181,170, 47,183, 87,172,186,206, 88, 21,109,245,143,159,191,110,110,126,147, 60, 55,180,206, 70,241,122, +207,206,111, 20, 94,169, 30,159,124, 65, 49, 28, 61,229,200,171, 0, 83, 14, 69, 61, 11,111,175, 11,238, 36,143,113, 57,184,162, +244, 12,184,131,204,220,142,192,106, 97, 35, 75, 51, 13,131,223, 15,157,113,126, 89, 45,235,166,137, 31,109, 81,238, 70,205,212, +115, 46, 31,111,189,222, 94,129, 25, 78,231,207, 36,117,133,145, 38, 13,254, 33, 45,188,202, 38,170,127, 31,223, 67,113, 62, 37, +251, 7, 1, 5, 49,237, 98,132,136,207,129,192,108, 4,141, 6,103, 69,128, 97,232,144,208,161, 55, 49, 73, 64,240,242, 62, 39, +239,101,117, 60,132, 73,198,177, 40, 68,251, 19,181, 68,249, 81, 51,105,118,191,156,171,164,203,145,167, 90, 4,247, 48,231,191, +225,249, 87, 51,186, 68, 82, 42, 29, 81,210,116,168,204, 65,217,110, 83,157, 55, 98,213, 0,135, 82,161,165, 8,223, 21,214, 82, +100, 46, 7,226, 27,209,200, 26,184, 89,154,162,206,145, 93, 43, 40, 53,222,196,220,218, 41, 21,142,131,232,223,194,113, 31, 94, +180, 80, 43,209, 74,145,197,106, 79,219,145,252, 19,128,186, 43,107,113, 34, 8,194,213,221,115,244,132,136, 32, 46, 44,174,136, + 15,174,178,255,255,111,232,155,248, 38, 98, 64,214, 69, 86,204, 53, 87,166,187,237,170,234,154,195, 77,126,128, 97, 30, 2,147, +132, 48, 83,211, 85, 93,245, 29,179,254,140, 18,142,108, 82,211,197, 35, 22,212, 45,116,207,245, 58, 73, 54,227,234,150,199,120, + 42,113,188, 51, 37, 78,190, 19, 93, 64,209,221,194,152, 12,167,233, 96, 85,142,145, 77,223,113, 28,175, 62,149,195, 84,179,103, + 34, 3, 68,122, 26, 70, 87,198,218, 44, 30,149, 53, 69,188, 72,241, 9, 90, 23,101,102, 84,139, 52, 1, 53,102,252,248, 97,155, +233,111,191, 55,168,163, 60, 36, 82,155, 99, 77, 0,234,244, 41,207,219,223,160, 22, 67,151, 5, 73,113,164,141,176,203, 2, 83, +140,101,176,174,103, 92,161, 52,112,101,243, 68, 80,178, 25,162, 30, 79,221,238, 27, 7, 57,106,166,168, 19, 1,104, 30,207, 1, +201,221,140, 43,148,205, 60,189,134,244,132, 4, 22,109, 23,239, 61,108,145,185,153, 36,228,127,253,218, 5,120, 6,225, 53,192, +131,200,218,172, 41,225,197,235,112,168,221,203, 43, 19,171,240,187,235,106,127, 28,154,254, 84,251, 52,185, 69,255, 32, 15, 47, +194, 73,163,243, 32,140, 93,141, 17,168, 70, 96, 20, 20,241, 23, 7,122,218,240, 10,164, 77,141, 90,208,169, 85,135,111,170,194, +190,191,185,251,244,245, 99,124,255,101,243,217, 75,226,119, 88,182, 19,159,138,135,177, 19, 70, 98,233, 34, 0, 84,247,146,120, + 48, 67,179,200,156, 82,221,190,187,125,251,230, 38,102, 14,213,182,140,193,247, 41,169, 16, 6, 48, 41, 33, 38, 50, 33,181,221, +185,227, 16,202,220,174,202, 88,196,148,219,250, 17, 51,129, 27, 30,182,191,140, 73, 14,131,169, 83, 33,136, 17,226,111, 42,152, +118, 49, 76,221,196,176,229,113, 99, 22, 82,181,206, 85,250,182,219, 35,241, 4, 60, 18,140, 52,244,200, 96,213,228,179,128,245, +240,253,246, 62,137,238, 57,183, 27, 26, 29, 44,158,113,157,255,225,224,131,113, 43, 18,206,148, 5,113, 28,177,122,201,220, 66, + 98,167, 83,127, 32,252,140,245, 77,237, 93, 31,152,199,132, 24, 34, 36,191,197, 69,157,188, 34,240,129,178,121,222,244,199,144, +110,141,228,206, 52,206,188, 20,227,106,137,230, 62, 67,193,215,151,182,185, 10, 46,149,245,158,132, 0, 1,254,213, 19,159,180, +129,101, 12, 32,224,197, 73,105,221,204, 23,221, 39,168,121, 53,234, 34,144, 89,233,193,237,122,221, 85,102,237,124,222,162,131, + 71, 71,191,134, 75,188,230, 14, 8,205,246, 8, 87, 19,151,205, 78,193, 34,199, 5,193,142,199,232,109,252,193,135,254,213,234, +122,115,252,126,196,254, 37,198,203, 0, 67, 1,250,220, 63, 89,204,145,255, 10,192,220,213,244, 54, 13, 4,209,157,253,176,221, + 56,193,161,149, 42,209,194, 33, 18,247,170, 23,254,255, 29,238,237,161,145, 56,128, 4, 20,148,202, 10,113,253,177,187,236,204, +236, 58, 73, 99,169, 87,172, 61, 56,137, 98, 89,142, 51,126,243,230,205, 27, 57, 85, 36, 30,205, 46, 60,205,116,222,113,234, 36, +163, 51, 43,183,179, 34, 42, 25,123,123,216,180, 32, 3,148, 57,107,208,185,162, 13, 84,142,236,121,198, 45, 33, 90,202, 66,103, +103, 38, 47, 77, 94,200, 76, 5,224,160,168,103, 37,100,207, 40,149, 41,138,240, 57,240, 87, 53,134,119, 29, 64,186, 99,221,110, +135, 82,122, 44,169, 21,218, 44,178,236,110,115, 95,247, 53, 97, 34, 75, 35,250, 28,136, 84, 9,247,123,253, 59,241,167,105,145, +178, 51,226,110, 17, 57, 75,148, 71,122, 44, 78,209,255,138,185,119, 5,204,207,211,107, 26,151, 43, 33, 25, 70, 74,127, 32, 29, +117,253,147,229,209,121,225,201, 43,123,139,245,170,126, 10,249, 66,138,245, 25,237,228,180,211,166,171,223, 81, 56,107,146,178, +120,137,115,101, 93,251,154,105,251,255,191,141,119,222,119, 42,234,124, 42,244, 77,105,110,230,102, 53,215,111, 13,153,134,247, +126,251, 28, 50, 31,121, 94, 21, 1,200,191, 49,146,177,198,216,160,219,225,208, 12,153,134,107,129, 56,162, 72,221,204,204, 46, + 22, 23, 54, 85,233,152,101,230, 53, 68,116,130, 64, 24, 7, 92, 98,159,157,173,159,183,159,215, 95,176, 54,133,169,152, 82,228, + 75, 70, 61, 25,192,141, 50, 87,203, 43, 15,163,170,250, 8,185, 71, 28, 9,254, 79,253, 88,149, 75,102, 92,195,145,119,109,243, +238,253,245,221,253, 90, 43, 67,181, 77,203,121, 3,159,149,143,112,253,160,152, 24, 91, 98,241,142,108,135,118,179,221,252,218, +254, 28, 28, 3,118,226,112,173,224,129, 68, 46,242, 42,222, 69,234, 58, 74, 47,246,121, 73,156, 25,107,185,104, 57, 68, 67, 14, +182, 31, 68, 32,101,201, 32,221, 74,119,187,186, 37,207,125,108,252,195,166, 20,150, 76,198,135, 32,237, 5,148, 68, 38,143,238, +113, 51,172,227, 48,128, 62, 45,155,224,252,232,123,186, 87, 73,134, 72,243, 32,196,143,111,168,162,104, 81,215, 14,200,149,198, +138, 24, 0, 57, 85,162,229,148,109, 80, 15,126,120, 73, 15,100, 36,172, 25, 61,177,136,152, 12,252,147,225,236,229,187, 48, 13, +222, 95, 54,163, 76,128,253,232,168,124,125,254, 65,236, 67,167,132, 19,174,245, 52,184, 39,215, 4, 38,217,121, 72,103, 72, 13, +155,218,254,222,249, 39, 5, 33, 79,154, 87,178, 90,136, 42, 71,219,252, 51,156, 28, 35, 84, 47,186, 78, 52, 78, 14, 26,251, 21, +192,139, 99,125,119,122,154,135, 19,251,250,247,161, 44,202,213,226,227,165,188,156,161,239, 95,248, 9,186, 86,116,246,181, 32, +241, 79, 0,234,206,109,183,105, 32, 8,195,123,116, 99, 27, 18, 85, 45, 23, 84,168,125, 0,120,123,110, 16,239,129,122,131, 72, +165, 30, 36,160, 32, 66, 19, 31,210, 61,176, 51,227, 89,219, 81,196,125,111,146,171, 72,182, 99,143,103,103,255,255,251,129, 47, + 6, 14,120,173,243,220, 29, 49,143, 40,220, 98,219, 96,250,187, 74, 93, 77,231,113, 16,175,131, 57, 82,145, 82,116, 80,188,138, + 42, 70,229, 64,142,160, 37,187,198,113,188,168, 23,208,239, 23,150, 60, 26, 48,188, 1,215, 17,225,144, 10, 80, 64,130,194, 50, + 53, 65, 11, 11, 45,124,101,139,218,218, 62, 45, 51,141, 70, 10, 41, 60, 19,233, 18,148,186,232,195,238,118,183,110,124,131,247, +171,243, 48, 53,114, 56,221, 11,188,150,205,153, 47, 74,204,160,251,156, 88, 66,242, 97, 60,185, 1, 50, 43, 73,126,196,188, 89, + 46,238, 67, 10, 31,187,212,196, 68, 14,169, 33,218, 98,251, 61,184,116, 81, 86,232,181, 95, 26,249,215,249,135,153,180,102,240, +127, 90,254,180,172, 34,207,100,171,220,164, 91, 86,218, 92, 24,253,228,253,227, 49,148,243,203, 42,238,138,105, 57, 10, 77,143, +157, 11,151, 75,243,225,170,126, 93,153,189,243,181,150,239, 47,207, 34, 56, 53, 69,101,245,207, 63,251,190,117, 77,106, 37,184, +190,167, 31,190,213,126,181,124, 71,233,231,248, 63, 18,133,151,226, 46, 98,234, 73,155,126, 39, 14, 61,196,244,140,141,189, 27, +137,202,207, 94,157,167,239,211,250,180,217,111,229, 96,112,202,195, 30,146,159,139, 77,247,228, 67,224,241,129,228, 10, 17,137, + 51, 10,211, 25,154,203, 96, 52,168, 66,207,172, 81,246,102,253,237,211,231,143,198,154, 14,244,242,192,242,117,152,134, 78, 19, + 10, 2, 20, 77,140,176, 50,107,105, 80,193,128,243,125,142,125,226,221,255,204,137, 36, 71,215, 56, 90, 36, 70,178,228,253,161, +193, 94,157,129,130,195,198, 97,196, 48,118, 26,197, 64,150,199,237,175, 59,138,157, 78,135, 95,158,212,173,235, 35,109,211, 18, +223, 1, 80,173, 39,202, 20,182, 92,250,234, 66,233, 55,230, 10, 44,139,110,178,209,154,139,187,231,142,158, 74,228,243,189,112, + 95,132, 95, 95,171,205,215,231,205,111,209,108, 3,204, 42, 91, 76, 72,115,204, 11, 33,178, 67,156, 48, 24,163,156, 88, 3,197, +160,132, 57,200, 39,154,246,239,114, 14, 64,159,241, 13, 15,233,189,114,148, 72,234,255, 44, 13,142,229, 34,120,134, 14,181,253, + 22,161, 44,211,248,189,163, 78,168, 40,197, 1,185, 68,142,183, 94,204, 71, 18,176, 22,239,186,216,182,144,103,220,123,200, 89, +109, 9, 1, 79,155,195,104,242,159,213,117, 57,127,241,164,119,230, 99,247,195,168,114, 85,164, 55,196, 34, 85, 84, 92, 7,200, + 48,110,136, 28, 63,215,127, 2, 80,119,109, 59,109, 3, 65,116,111,118,154,208, 16,120,160, 85, 37,196, 51,255,255, 19,253,134, +138,138, 39, 20, 17, 72, 64, 65, 77,109,108,239,110,247,204,204,198,155, 80, 36, 94,121,140,148, 68, 78,236,157,157, 61,115, 46, +238, 13,148, 37,206, 42, 70, 56, 61, 96,159,244,177,125,241,219, 83,187,160,206, 32,144,129,160,175,180,128, 62, 54, 26,180,244, +232,146, 32, 28,153,218,180, 53, 65,223, 8, 70, 35, 76, 75,208,201,211,183,225,158,155,170,230,129,250, 68,213, 76,103, 78, 47, + 42,112, 33, 82,149,159,164,245, 83,187, 42,104, 11,121,180,115, 3, 73, 54, 28, 84,236,125, 31,155,135,230, 41, 93, 73, 15,222, + 21, 19,222, 7,202,206, 38,232, 85,198,210, 18,171, 77, 79,190,240, 18,116, 78,241,224, 35,188,225, 97,174,218,175,169,194, 16, +248, 64,118,204, 22,145, 70,240,248, 66, 33, 22, 41,135,246,185,111,184,106, 59,208,249, 99,234,223,239,195,113, 22, 76,225, 44, + 33, 99,150,147,140,213,232, 92,254,108,230,155,123, 0,211,200,180,125, 65, 94,210, 39, 46,238,123,190,188, 43, 78,181, 59,165, +126,110,186, 95,155,110,102, 17,244,122,253,109,126,118, 90,239,134,110, 49,119,149,117, 87, 23,211,229,186,213, 56,114, 70,198, +232,177, 62, 13,184,217,150,145, 49,214, 7,141,231, 51, 61,178,127, 67,252, 47,201,147,173, 0, 88,212,188,249,243,104,180, 59, +115,245,172,254,218,244,187,192,106, 12, 38, 83,107,225,110,164,247,205, 38,211,116,199,255,182,187, 98, 81,200, 19,129, 41,146, +199, 6,221,246,173,113,150, 60,217,253,151,249,236, 97,189, 74,197,180,123,125,253,126,254,227,118,249,219,211,240,210,135, 12, + 56,179, 83,138,246,194, 20,203, 30,199,120,240,113,109,164,104, 78, 31,177, 86,194, 71,163, 52,113, 65,179, 24, 27,143, 54,217, +109,198,116,210,244,152, 83,209, 36,149,230,177,150, 90, 31, 75,251, 25, 23,250, 94, 12, 88, 96,181,206,237,127,254,171, 96,197, + 58,248,208,182,157, 22,101,168,101,147,239, 8, 6, 35,168,169,112,193,218, 62,153,229,179, 90,159, 15,151,227, 41, 74, 21,204, +200, 82, 62,141, 90,127,163,194,106,169,182, 43,213,180,169, 19, 69,164,104,250, 45, 67,246, 85, 99, 28,138,119,210,176,119, 91, + 19,183,238, 24, 70, 96, 61,126, 32,133, 38,195, 49, 58, 91,175, 68,147,151,146,223, 99,227, 69,141,119,239,247,254,161, 48, 73, +125,251, 6, 10, 92, 17,113, 89,113, 73, 90, 31, 68,244,241, 68, 84,135, 35,202, 78,142, 71, 26,229, 84, 7,238, 70,177,224,224, +155, 67, 90,206,232,113,171,199,205,195,100,227, 1,116,171,169,145,189,107,110,136, 71, 15,175,238, 1,205,187, 32, 40,161, 8, +123, 56,234, 11,255, 9, 64,221,181,245, 52, 8, 67, 97, 90, 96,192,166,211, 68, 19, 19,159,124,247,255,255, 29,223,124, 80, 71, + 22, 7, 78, 24,180,181,231, 86, 10, 91,246,238,235, 50,146,149,193,215,211,115,190, 75,118,214, 69, 34,241, 54,187,116, 90,234, +253, 41,191,227,120,204,105,182,233, 54,133, 15, 13, 30,169,168,238,128,123, 13,158,189,192,114, 1,243, 11,244,206,240, 80,157, +146,123, 1, 21, 75,189,223, 15,146,188, 34,190, 34, 71, 85,186,206,217, 28, 76, 6, 1,151, 75, 72,194,204, 42, 52, 56, 56, 89, + 91,164,217, 77, 94,140,254,188,167,237, 73,251,210,168,133, 80, 99, 8, 17, 1,255,125,191,212, 1, 40,152,142, 75, 47, 53, 17, + 90, 0, 40, 45,223, 70,182, 82,118,129, 19,201, 29,116,205,169, 96,188, 51, 7, 9,154, 24,126, 42,146, 27, 79,224,174, 35, 95, + 78,141,246,196, 6, 4,230, 57,226,181,255,197, 72,222, 88,186,241, 43, 65,183, 82,194,230, 11,105, 46, 99,172, 32, 60, 2,107, + 33,185,119,248,133, 39,165, 63,177,120,255,215,224, 30,191, 54, 43, 1,250, 82,164,188,149,209,207,219,242,245,229,225,208, 3, +215,182,237,108,145,167,155, 77,241,120, 87,117,189,205,218,225,152, 88,106, 97,221, 87,235,195,240, 75, 71, 46,151,136, 5,191, +158,153,120,186,137, 73, 49,179, 98, 10,208,143, 8, 15,151,123,188,171,155,186,200, 86,110, 36, 37,169,194, 44, 59, 44, 54,248, + 77,132,228, 63,217,251,163,229, 96, 33,140,154, 80, 40,178,192,208,202,168, 17,124, 84,138,159,166,201, 87,185, 25,204,126,168, +119,135, 26,148, 45,214, 67, 28, 12,252,145, 25,137,166,183, 16,200, 35,141,115, 45,177, 64,138, 7, 58, 2,241,168,240,118, 65, +140,167, 92,228,148, 75,179, 39,131,228, 99, 69,228, 7,104, 14,105,246,210, 81, 98, 74,173, 89,248, 62,249,118, 33, 83,217, 95, +199, 88, 47, 1,119,196, 18,194, 1, 6, 6, 82, 24,171,199, 17, 82,184,154,125, 82,239,220, 59,224,251, 24,181, 50,212,124,220, +106,131,159,221, 91,159,124,125,232,227,183,237, 79,208,105, 24,205,109,146,181,176, 26,195,135, 40,203, 60, 70,106, 75, 45, 42, +219, 96, 6, 96,121,188,121,101,226,228, 2,159,196, 92, 22,107,171,248,255,159,185, 0,206,219, 50, 81, 84,225,149,103,215, 45, + 52, 80,103,141, 26,181, 24,247,134, 83,133,147,120,168,101,181,145, 68,167,172, 8,148,131,128, 58,230,142, 19, 11, 86, 2,148, + 98,178,146,198,198, 99,239,102,110,198,156, 92,120,113, 65,127, 2, 48,119, 45,201, 77, 3, 65,116, 62,146,108,227, 56, 78, 88, +192, 34, 85, 57, 2,247,191, 10, 39,128, 4, 87, 17, 27,108, 9,105,102, 26,189,238,233,201,200, 20, 84,150,120, 47,149, 74,178, +158,250,243, 62, 5,223,147,130, 97, 38,229,168,155, 79,100,162, 56,226, 55, 6,100, 47,199, 59,127,187,161, 22, 84,197,104, 36, +153, 90,246,152, 29,212,117, 44,223,214,174,143,243, 32,249, 70,192,150,212, 75, 38,161,211,184, 83,178,126,231,221,150, 99, 93, +187,166,217, 52,107,216,127, 59,186,184, 33,117,128,132,193,143, 56,113,227,226, 57,192,205, 27,243,212, 20,213,105, 19,181, 5, +132, 32,148,141, 8, 72,199, 85,160,186,112, 59,152, 88,227, 40,208,236,138, 6, 53,231,104,231, 4, 75,230, 8, 25, 87,109,213, +157,145,198, 69,183,108,172, 4, 39,103, 95,123, 28,154,191, 72,167,208,199,162, 86, 0, 49,219, 94,185, 53,123,229,138,136,188, +155, 35,226,120,191,234,180,231,205,254, 34,153, 18, 53,159,103,107,237,252,181,248,130,162,236, 13,181,204,255,253,115, 58, 73, + 95,105, 62,201, 59, 80,239, 16, 82,184,223,174, 62, 61,190,191,187,191,249,124,248,190, 1,159, 37, 53, 13,117, 93,123,127,211, +245, 63,167, 25, 37,218, 24,215,214, 62,236,218,113,181,239, 71, 79, 89,234,140,122, 53, 43, 87, 56,180, 61,147, 21,153,115,159, + 21,196,105,129, 15, 60,117,227,198, 13, 32, 10, 44, 7, 33,114,234, 1,167, 24,235, 71,141,140, 16,241, 36,143, 8,172, 53,246, +143, 36,102, 82,123, 60, 16,218,121, 70, 46,239,115, 0, 91,236, 87, 24, 3, 12,248, 8, 9, 69,240,230, 0, 43, 38,240, 24, 54, + 48,128,191, 70, 0, 45,210,128,149,249, 44, 65,151, 78, 93, 51,115,253, 78,106,212,129,191, 50, 91,251, 9, 66, 38,246,219, 39, + 94, 80, 75,246, 31,125,220,127,120, 58, 30,124,246,170, 22,255, 3,161, 33,130,177, 12,222,187, 13,146,193, 32,146,209, 66,254, + 21,167, 49,203, 57, 23, 77, 52,126,140,205,229,236, 79, 47,116,136,193,248,146, 97, 20,171, 66, 62,213,136, 63, 95,214,215,111, +230,229,217,156,143,102,232,109,152, 76, 8, 63,166, 75, 10, 33, 47,152,229, 62,137, 45,137,205,147,175,252,160, 84, 99,175,133, +110,161,189, 47,136, 43,105, 49, 75,191,222,175,254,131,244, 77, 75,182,143,173, 29, 90,232,175,243,253,186, 70,128,200,193,185, +105, 26,205,155, 95,198,165, 27,204,213, 65, 84,187, 1, 23,135,250,202,186,157, 90,219,174,186, 53, 66,228,249,238,138,137,111, + 37,118,149,245, 97, 82,164, 47,114,170, 84,134, 92,183,235,221,124,236,113, 56,213, 87,245, 91, 0,230,174,102, 55,109, 32, 8, +207,216, 94,131,237, 72, 41, 36,170, 84,169, 15,208,103,168,250,246, 81, 31, 33,135,230,212, 75, 42,161,166,150, 82,129, 13,172, +189, 27,207, 31,182, 41,228, 92, 78, 62, 96, 64, 88, 59,251,237,204,247,147,205,127,156,112,125,162, 56, 26, 69,245,112,233,101, + 3, 74,145,168,136,117,172,171,180, 42,161, 98,125,182,248,234, 16,192,234,213, 70, 63, 99,150, 63,228,236,117,154,202,224, 50, + 74,226, 37, 53,223,135, 82,233,144,162, 83,129,108, 6, 92,154,102,148,238, 6,135,215,190, 14, 11, 50,112,201,217,248,189, 44, +110,138,170, 92,221,173,158, 30, 31,201, 36,156, 76, 10,131, 76,204, 88,229,220,139, 21,165,185,134,169, 97, 56, 70,115,150,224, +152,159, 9, 79,198,188, 59,140, 32,164,209, 28,201, 73,180, 54,238,157,167, 28, 31,110, 42, 9, 52, 82,176,159,208,241,152, 70, +195,127,232,140, 79,232,219,145, 40,139, 60,239, 11,156,129,214,133, 33,247,130,233, 56, 44, 67,166,172,229,148,166, 46,244,233, + 13, 95,123,230,171, 57,126,231,199, 4, 54,125,104,223, 97, 5,252,247,176, 61,254,179,108, 58, 62,226, 0,253, 33,248,193,101, +183, 85,254,249,254,102,189,174,126,189, 54,219,198,123,143, 89,135,153,235,139,133,251,180, 94,116,219,163,247, 80, 98, 92,149, +174,129,252,231, 62, 79, 88,210,162,186,146,128, 39,113,198, 0, 23,190,126,249,246,253,199, 3,152, 18, 58,206, 18,230, 45, 5, + 40,170,152, 4, 53,153,205,104,121,106,182, 1, 98, 70,168,188, 9,121,248,225,226,122,230,242, 78,220,139, 1,216,164,234,205, + 16,250, 97, 9, 28, 59,145,101, 6,146,107,114,159, 91, 46,152, 90, 30,130,170,123, 64,246, 38,161,121,171,143, 62, 26,207, 70, +120,104,195, 91, 51,177, 26,198, 41,118,179,134,134,176, 24, 24,200,160,118,179,101,136,208,250, 67,136,221,136, 60,163,105,166, +134, 83,182, 40,190,197,143,144,138,131, 23,110, 15,232,112, 1, 43,183,100,222, 59, 81,206,232,158,227, 14,254,190,224,239,163, +135, 34, 26, 67, 38,204, 57,145, 99,127, 99, 3,248,242, 12,187, 58, 57,236,186,253, 14,134,103, 57,156,168, 67,212,156,171, 56, + 33, 28, 6, 21,189,155,169, 64, 82, 44,151,109,187,149, 52,186, 32,225,234, 48,109,201, 95,158,166,226,245,242,121,165,218, 78, + 17,241,165,240,186, 75,183, 40,167, 93,114,255,240,140,156, 27, 39,187,206,251,204,204,120,230,217, 91,184,178,241, 91, 28,247, +173,217, 90,161, 28,174, 36,181,226,110, 66, 93,115,110,157,104,254,199,141, 79,153, 82,246, 93,100, 21,213,181,134, 25,198,215, +155, 0,188, 93,201,110,219, 48, 16,229,144, 20, 45,185,182, 83, 56,135,162,189,164,183, 34, 64,190, 36,200,175, 5, 5,250, 79, +237,189,183, 30,138, 0, 65,210, 5,133, 99, 52, 86, 36, 75,150, 56,172,103, 72, 90, 75,146, 91,208,163, 15, 50,180,206, 12, 31, +223,162,123,189,141, 70, 94, 25, 32, 26, 95, 61, 67,202,168, 23,124,147, 77, 24, 63,163,188,201, 75,216, 78, 84,182,144, 51,205, +202,237, 16,140, 2,222,177, 78, 25,246,201,176,206,231, 49, 9,173,217,183, 90, 42, 50,121, 39,216, 67,177,114,121,183,170,239, + 11,100,186,173,150,251, 9, 46,181,217, 92, 47,142,142,151, 31, 78, 79,207, 47,206, 79,206, 78,174,190, 94,125,186,252,184,250, +243,139,130,153, 4, 90,194,133,226,203,195,142, 84,146,233, 78,145,193,228, 23,183,210, 5, 58,205,192,215, 55, 90,173,198,237, +211, 67,154,199, 96,251,116,244,140,194, 33,190, 49,184,176,148,167, 53,205,134,203,247,140,111,112,105,133,113,110,162, 33,235, +193,205,138,171, 63,176, 51,124,202,209,131,146,245,240, 10,200,186,194,208,119, 64,229,126,255,193, 25,110,156, 9,192,173, 21, + 15,164,113,253,223, 64,138,123,161,191,146,157,195,104, 71,202,245,123,200,192,148,255,172,197,153,195, 45,218,155,191,155,245, +174,109,144,194,156,108,219, 22, 21, 76, 83,125, 60,159,148,139,221,155,105, 98, 84,114, 93,232,159, 27,222,118,100,187,245,249, +228, 53, 33,248,117,249,246,232,221,143,245, 13, 48,131,248,243,183, 47, 36,123,150, 46,248,250,197,175,206,245,153,111,135, 53, +115,180,240,237, 77,210, 81, 50,121,224,182,116,129,175,189, 44, 24,209,137, 41,209, 79,163,138,104,143,232,109,237,180,114, 17, +105,103, 76, 70,120, 31,211, 32, 41,138,230, 55,190, 97,171, 16,230,196, 45,196, 99,223, 32, 14, 43, 15,144, 16,165, 59, 24,252, +125,145,166,184, 32,236, 87, 97,174,199, 8,175,112,134, 12,181,189, 85,126,199,115,136, 72,148,105,108,144,104, 97,240, 73,163, + 95,211,244,213,195,182, 96,117, 57,171,132, 8,186,215,196, 72, 80,146,174,134, 77,245,161,169,150,119,249,172,170,151, 80, 84, +239,219,239,113,247, 40,233, 25,209, 52, 67, 21,171,250, 45, 76,190,222, 86,247,162, 46,113, 87,179,201, 57,249,177, 6,130, 40, +118, 66,215, 8,188, 96, 64,147, 97,191,192,105,209, 35, 95, 46,226,218,110, 4, 47, 64,140,138,243,135, 63,201,116, 31,251,201, + 12,171,244, 8, 13, 26,189,231, 56,114,255,151,148,100,208,179,105,241,244,171, 1,219,146,206, 54, 51,233,254,236, 27,182, 76, +127,166, 73,140, 34, 82,195,178,205,131,116, 30, 51, 54, 82, 53, 68,145,131, 94,248, 30,153, 3,192, 83,117,200,117,133,222,142, +208, 33, 16,131,188,170,186,109,221,163,219,244, 79, 0,222,206,152,183,109, 24,136,194, 34, 69, 82, 86,156, 32, 54,138, 2, 93, +147, 37,104,182,110,221,251,231, 59, 20,237,223, 72,236,216,112, 91, 91,162,104,137, 87,222,241,200, 80, 77, 80, 20, 29,234, 65, + 35, 33, 89, 18,121, 58,126,239, 61,206,231, 83, 84,238,230, 14,117,146, 79,229,115,245,177, 6,135, 2, 72,114,225,198,134,119, + 19,108, 20, 64,161,112,187,146,170, 54,206,123, 35, 52, 26, 24, 72,133,213,189,212, 8,231, 16,167, 98,225,252, 52,236, 55,253, +118,227,182, 59,187,237,167, 19,102, 12,202,152, 38, 79,245,194, 52,246,182,239,186,227,251,251,251,219,143, 55,111,154,245,169, +179,135,239,135,193,145,133,244, 24,126,142, 62,127,145,120,227, 66, 44,189,197, 62,109,138, 38, 71, 30, 44, 91,128,189,121, 4, + 65, 47, 57,142,153, 81, 25, 37,162,113, 71,180,244,136, 29,247, 58, 73,155, 56, 3, 57, 27,245, 17, 55, 9,225, 90,142,231,211, +102,180, 45, 5,168, 26, 90, 47, 44,238, 69, 32,137,188,195, 62, 42, 55,154,175, 73,186,160,233, 51,199, 24,121,161,165,166,172, + 29,202,167,166,176, 80,236, 13,251, 86, 9, 13,114, 63,249,167,255,232, 73, 32,210,218, 94,182, 45,103,177, 0,255, 52,191, 87, + 5, 54,147,199,247,207,108, 40,160, 39,104,141,194,234,227,224,240,195,189,198,244, 57,173,196,114,161, 46, 23,250,170, 22, 3, + 52,159, 31,228,214, 74,222,210,194,255,181,110,212,197,201, 30, 67,105,252,211,254, 16, 73, 25, 71,247, 24,215, 0,173,154,240, + 72,196, 29,148,252,180, 67, 66, 36,184,121,151, 13,247, 50,103, 19,129,199,228, 95,200,152,185,103, 2,122,189, 92, 89,231,138, +240,237, 52, 43,248,204,219, 68,209, 80, 84,242,144,190, 13,143, 17, 74,164,224, 95,198,134,139, 20,136,228, 22,149,151, 35,246, +132, 77, 27,252,172,157,206,177, 33, 85,162,183, 4,167,139,177, 91, 53, 27, 41,224, 97,181, 92,133,145, 29,198, 35,123, 74, 62, +168, 50,159, 55, 33, 49,143,167, 99, 48, 1,188, 35, 47, 6,110, 12,133,151,209,168,230,178,189,114,161,106,146,106, 33,234, 15, +114,125,171,222, 65,101,204,249,220,189,189,123,252,212, 66,146,230,101,161,178, 44,228, 78,120, 49, 95, 43,245,237,139,181,187, +170,223,251,254,224,135, 30,156,133,209, 17, 31, 73,139,130,231, 25, 99,222, 90,161, 68,136,137,205, 7,161,156,227,210,163,228, +203,100,209,194, 47, 11,196,115, 83,102, 62, 44,252,185, 72,249,109,102,135, 23,192, 77,100,145,242, 18, 35,210, 22,254, 76, 41, + 12,213,117,187,114, 24, 55, 56,138, 89,148,219, 43, 35, 71, 2, 53,199, 4, 34,116, 68, 22,188, 34,161, 94, 83, 73,216,252,197, +235,149,118,144, 69, 25, 69,242,162,213,243,202, 80,191, 4,224,237, 74,118, 26,134,129,168,151, 56, 93, 40, 32, 56,241, 17,252, + 60, 32, 85,124, 3,127,192,137, 3,162, 7,150, 54, 52,221,210,196, 30, 60, 51,182,147,148, 10,193,133,123,218, 52,174,227, 89, +222, 50, 89, 47,236, 0,189,115,169,122,196,136,226,128, 93,203,249,239, 34,196, 6, 15, 39,204,157, 49,187,168,154,122,111, 11, + 58, 61,177,195,174, 53, 54, 6, 87, 77,142, 34, 90,165,136,167,133, 59,163,114,181,197,182,161, 83, 76,155, 36,208,146,116, 79, +254,138,218,135,244,204, 17,117,210,223,177,129,217,236,249,238,230,246,126, 58,253,248,152,175,215,203,114, 83,146,127, 52,189, + 21, 62,136, 88,134,218,210,192, 36, 65,174, 15, 16,189, 27, 72, 94,208,161, 85,169,196, 33, 96,178,153,162, 49, 17,146,169,238, +192,164, 87, 5,161,174,113,242, 80,158,150,220,199,168,106,240,143,167, 22,232,184, 45, 40, 91,151, 6,225,108,174,176,224,220, + 63, 62, 82,195, 90, 55,130,177, 86,147, 1,218, 97,249, 2,102,100,160, 33,171,192, 17,154,152, 59,237, 19,117, 3,198,154,177, +133,199,170,121,255,223, 46, 10, 68,190,230, 46,138,176, 76,199, 65,204,246,123, 68,191, 7, 3,184,112,209, 29,151,130,109, 88, +168,112,174,150, 62, 62,175,213,196, 53, 89, 78,125,185, 90,141,140, 67,207, 6,233, 78, 7,217,195,139,126,154,147,252, 26, 55, + 6,194,245,180, 13, 93,185, 41,104,240,139,108,241, 49, 25,100,155,128, 70,142,166, 66,121,170, 98, 88,156, 57, 27,162,203, 70, +128,232, 41, 71, 44,219, 6,101,122, 41, 47,143, 92,242,190,220,197,152,161, 82, 75, 1,201,141, 67,196,249, 29,112,146,157,249, + 96,131,194, 9,210,168, 65,236, 4, 81,206,106,233,171,108, 28, 63, 20, 71,135,137,128, 67,201, 40,153,161,196, 89,131,107,227, +199,113, 65, 74,248,148, 14,162, 58,118, 28,195,126, 60,123,144,193,124,181, 72, 37,166, 75,191, 50, 12,198,224, 58, 66, 20,235, + 2,130,225, 41,123, 15,227, 66,161, 37,252,182,212,122,232,175,186,206,175, 46,178,201,235,166,216,229, 53,212,106,191, 42, 27, +113,233,183, 2,228, 61, 9,107, 59,239,138,237,110,223,150,149,253,148,126,229,235,202, 17,221, 33,206,106, 99, 98, 18, 25,142, +200, 35, 84, 21,150,255,164,246, 49,167,241,157,156, 61,158,137,136, 28,132,110, 16,180, 61, 11, 56,146,189,195,239, 79,246,227, +181,186, 99,159,199, 30, 5,243, 27, 62, 43,196,114, 91, 68,122,221, 33,188, 43, 90,194, 76,104,157,245,156, 19,105,203, 14,117, +190,181, 21,221,238,175,253,215, 67,236,180, 11, 20,255,196,142, 20,226, 75, 0,222,174,100,167, 97, 24,136,122, 73,210,166, 20, +196,133, 35,226,255,191,132, 95, 64, 8, 9, 36, 4, 82, 1,161, 86,165,212,141, 99, 27,207, 98,199, 9, 8, 16, 7,122,171,170, +110, 25,103,214, 55,239, 85, 57,123, 75, 10, 83, 33,209, 19, 75, 30, 71, 56,236, 92, 18, 45, 41, 53,203,160,193, 14,103, 83,195, +224,209, 19, 84, 8, 48, 97,202, 3, 25,183,144, 86, 26,184, 53,123,210,204, 28, 52, 83,144, 72, 2, 22,146, 8,164,136, 42,197, + 26,209,243,218,185, 6,240, 1, 42,196,210,173,109,218,235,219,171,195,187,129, 13, 85, 7,234, 29,189,235,172,141, 21, 76, 7, +130, 48,129,214, 62, 66,169,109, 20, 24, 18,204,216, 35, 95,164,147, 36,116, 70, 73, 58,126,163, 98,146, 85, 18,184, 76, 84,192, +100, 46, 94, 80,151,195,212,155,195,131,103,104, 91,140,108,207,190, 35,209,131, 58,218, 76, 5, 11, 74,105, 96,177, 19, 13,138, + 33, 54,205, 84, 23,149,156, 53, 32,116,116, 52, 35,253,103,113,210, 64,242,110,192, 9,200,249, 92,180, 33,220, 63,153,155,253, +255, 57,247,236, 62,234,244, 35,151,233,169, 78,192,243, 67, 33,250,170, 11, 30,177,223,132,141,252,198, 62, 77, 32,150, 9,169, +214,147,122,184,245, 94,247,209, 95, 45,145, 82,173,149,125,163, 85, 52,175,233,236,229,195,238,238, 53,212, 53, 83, 92,228, 28, +133, 82, 1,199,164, 70,163, 67, 14,114, 31,152,183,150,104,201,162,192, 31,116,229, 21,203, 64,200,172,237, 33, 50,136, 32,165, +237,197,240, 37,172,214, 43,149,239,100, 63, 26,160,181,179,197,198,108, 96, 37, 36,201, 63,208, 98, 11,179,219, 16, 86, 23,229, +158,179,140,108,136,181,121,168, 82, 57, 77,199, 78, 78,192, 23, 42, 67, 49, 19, 87,110,242,244,146, 88, 45, 99,222, 5,113, 23, +232, 30, 53, 28, 84,133,171, 83,130,169,160,216,149,208, 52, 25, 95,169,170,198,216,131,202,163,189, 4, 87, 33,216, 37,212,174, +160,124,227,207,235,227,179,250,244,241,237,165,195,223, 96,118,214,238,214,189,184, 80,110,216, 89,157,116,189, 29,114, 2,201, +237, 86,185,189,112, 6, 25,108,122,146, 69,161,182, 85,198,254,112,163, 88,142,252, 84, 6,144, 88,100, 97,100,218, 56,134,192, +227,190, 59, 54,169,146, 1,229, 96,207,144,131, 5,163,110, 10, 57,236,239, 31, 35,207,142, 77,106, 63, 57,189, 24,199,191,220, + 78, 37,178, 70, 33, 63,129,224,253,244,243,133, 99,138,180,210, 29,231,162, 32,232,186,137,151,235,111,140, 35,197,133, 8,101, +145,237,127,250,239, 31, 2,144,118, 62,189, 9,195, 48, 20,175,147, 0,101, 69, 59, 76,187,177,227,190,255,215,217,101,211,110, +108,210,164,178, 13, 74, 75,219, 36,171,237,164, 73, 90,246, 71, 26,226,128,144, 64,136, 10,243,108,191,252,158,138, 95, 15,158, +111,207,215, 71, 4,104,176,117, 52, 83,143,228,226,145, 10,159, 74, 0,199,138, 7, 38, 95,243, 51, 52, 9,167,244, 25, 43,162, +160, 17,186, 48,152,168,237,230, 64,114,232, 2, 52,233, 89,252,188,104,219, 69, 47,185, 82,229,254, 77,210,250, 22, 25,116, 6, + 79, 32,226,112, 70,247,134,234,187, 75,206,246, 97,134,222,215, 25, 74,188,244, 74,193,245,193, 48, 6,155, 57,132, 55,128,203, + 88, 3, 27, 2, 86, 93, 25,144,236, 62, 22,209,172,139,186, 26, 34,252,213,180,158,222, 96,125,199, 14,186, 50,132,171,183,136, + 86,202,115, 85,180, 80,145,102, 91,146,222, 92, 43,200,135, 78, 24,129,105,156, 6, 1, 8,179,207,196, 26,236,161,108, 30,118, +167,103,109,154, 75,110, 72, 21,133,243,253,255,166,252,251, 72, 63, 42,145,254,190,164,178,219,210,182,160,160,162, 60,206, 85, +154, 31,117, 65, 22,177,198, 76, 42, 60, 69, 20, 46, 56,130,133,181,191, 40,173,238,101,167,142,162,199,234,220,192, 25,244,237, +240, 69,214,125, 89,101,184,129,199, 29, 40,163,132,146, 10, 40,201,253, 62, 87,186, 74,168, 98, 85,236,117,203, 73, 2,224,225, + 85, 48,209, 56,238,145, 25,254, 92, 5,140,235,173, 32,219, 83, 97, 40, 0, 18, 63, 69, 8, 69,179,217,235,251,206, 98,147, 73, +219, 94,195,121,161,134, 57, 98, 44, 3, 50, 50, 0, 67,208, 86,174,253,141,143,201,120,200, 88, 52, 12, 99,116, 48,121,194,242, +197, 74, 72, 57, 52,198,180, 16, 38,204, 17,233, 18,146,225, 68,102,160,136,101,114, 38,143,179, 11,103, 31,114,123, 65,128,235, +171, 77,189,175, 52,136, 9,113,207, 53, 22, 25,112, 49,190, 47,182,239, 93, 85,214,159, 56, 56,236, 13, 52,205,137, 74, 2,146, + 70, 52,255, 44,211, 85, 32,163,108, 7, 45,240,113,192,115, 26, 67,101,239, 58, 10,226,212,208, 35, 52,150,176, 8, 38,173,110, +169,121,207,184,197,234,221,205,118,181,204,159, 94, 30,249,112,140, 39, 36,135,178,158, 64,135,204,152,103, 17, 34, 56,236,239, +179,153,233, 63,140,159, 85, 92,184,173, 22,235,115,215,204, 37, 60,119, 16, 52,160,119,164,247, 89,151, 0,190,169,212,209,215, +101, 39, 11,250, 99,234,108, 49,223,159,176,157,235,244,249,170,217,252,205, 69,253, 37, 0,105,231,182,147, 48, 16,132,225,206, +178, 20,202, 33, 65,111,188,243,253, 31, 73,111,213, 24, 49, 4, 35,104,169, 61,236,216, 57, 45, 45,173, 49, 70, 30,128,208,102, +153,221,157,249,255,239,247,231,247,103,177, 38, 40,248, 11, 91, 25,120, 30, 67, 4,185, 48,115,226, 82,156, 61, 10,141,213, 5, + 73, 53,228, 12, 51, 13,176,150, 61,248,130,145,192,101, 57, 72,130,134,163,120, 39,231, 93, 80, 27, 22,179,208, 28,212,249,129, +155,226, 19, 25, 27, 19,168,168, 38, 86, 53,153, 71, 80,105, 73,236, 66, 48,181,140, 10, 49,241, 98,155, 53,155,146,153, 86,209, +242, 25,192,145, 78, 95,112,173,110,114,174,239, 18,179, 64, 7,164, 58,178,156,204, 50, 72, 79,210, 86,233,143, 42, 95,179,220, +133, 1,211, 16,103,137, 12,215,128, 91,159, 30,235, 47,207, 21,237, 80, 6,151,250, 44, 77,230, 51,191,206,166,155,165, 95,164, +190, 41,195,118,119,186,127, 56,222, 21,213,110,172,101,230,109,163,117, 29,244,238,255,207,236,181,161,111,166,220, 48, 33, 97, + 15, 37,120,210,193,100,237,208, 19, 15,142, 44,105,159, 37,215,125,126,248,212,124,234,222, 92,139,195,121,108, 55,254,102, 50, + 88,151, 96, 59,135, 52,172,218,141,100, 14, 56,229, 11,122,213, 64, 81,135, 50,161, 84,148, 67, 1,126, 14, 55, 27,255,178,163, +145, 68,195,165, 7,122, 82, 93,229,161,219,203, 54,126, 6,119,187, 37, 67,131,156,117, 65, 4, 95,244, 79,140, 39, 90,236, 29, +114,116,145,244, 69,114,248,235,165,216,208, 99,200,114, 30, 16,181, 65, 80, 46,185,178,189, 18,229,103,157,145, 42, 96,238, 89, + 48,231, 11, 67,100, 34, 10,170,179, 80, 45, 11,251,106,121, 93,135,170, 40, 10,199, 81, 8,164,143, 52, 47, 45,131,117,157,208, +196, 39,252,119,229,120,206,168, 26,151,197, 75, 5,102,149,173, 14,249,251,243,126,107, 67, 57,215,243,131, 42,128,189,189,109, + 55,237,193, 99,230,230,111,249,107,213,222,143,177,164,134, 81,145,151,139, 84, 31, 92,250, 48, 94,199,130,242, 69,140,167,229, + 59,193, 49, 15, 77, 69,205, 25, 36,122, 8,187, 27,137,222, 45, 3, 94,148,136,114,189,215, 4,161,229,216, 49, 87,243, 84,158, +246,143, 90, 81, 20,233,142, 99, 45, 20, 84, 9, 41,106, 22,182, 29,222, 67, 23, 35,156,252, 48,131,197,177,110, 76,211,215, 49, +199,207,169, 58,185, 97,123, 76, 6,244,128, 89,186, 34,123,132,198, 57, 71,142, 44,152,242,138, 12, 48, 16,165,186, 35, 53, 26, +134,194, 30, 28, 11,119,191,252, 1, 3,222,120,248,139, 63,230, 91, 0,210,174,100,167, 97, 24,136,218, 78,186, 35, 65, 17,119, +132,196,255,127, 18, 92, 16,170, 4, 69, 41,197,105,227,216, 30, 60,139, 83,119, 65, 2,209, 67, 15, 61,116,137, 58,206,204,155, +183, 20,252, 72, 49, 69, 6,115,154, 98, 33,109, 92,192,191, 87,142,138,164,176, 5,186,190, 38, 53,224,233,127,101, 6, 58, 57, +137, 47,180,224,150, 70, 21, 90,239,161,215,168,128,210,173,188,174, 42,196,241, 13, 43, 53,200,120, 19,173,128,243, 10, 84,214, + 65, 74, 12,240,208,226, 44, 50, 39, 63,200, 12,203,196, 77,131, 98, 39,137,229, 56,248, 50, 19,144, 87, 73,148, 44, 99,238,124, +184, 83,168,154,180,239,210,194, 35,196,130, 74,143, 64, 44,103, 80,181, 76,200, 66,182, 20,170,110,250,136,137,107,111, 72,104, + 26,101,233, 37,227, 89, 7,241,221,249,199,217,164,217,246,107,234,123, 58, 80,141,117,115, 8, 83, 5,187,157,223,173,245,106, +235, 94, 54,221,107,230, 36,152, 34, 23,233, 28, 49, 28,101, 88,227,159, 93,124,149, 77,111,248,206,113,171,212,117,205, 22,136, +122, 62,194,245,241, 30,210,156, 97, 22,228,246,230,131,234, 61,236,251,176,117, 48,216,220,237,133,224, 40, 64, 13, 28,221,169, +143,202,166, 46,248, 21,124,123,136,217, 54,242,138,206,122, 75, 54,136,181,199, 37,196, 24, 51, 3,234, 49,170, 35, 96,211,134, +229,162, 55,156,213, 61,128,133,121, 66, 56,248, 10, 29,237, 59, 53,133,210,113, 56, 24,241, 17,217, 57, 72,224, 23,230,203,168, + 83,236,229, 98,151, 84, 74,166,224,135,200,109,140, 14,211, 49, 79,136, 65,146,110,132,123,147,179, 58, 65,252,109,233, 86, 36, +226,111, 93, 86, 56,148,184, 46, 43,171,135, 61,107,122,222,216,198,176, 97,182, 62,128,165,185, 54, 13,131, 62,186,196,159,128, +175,188, 40,254,217,201,172,249,106,132, 26,156,253,201,179, 78,139, 12,148, 42,161,108,166,183, 91, 84,179,214,187,143,189,237, + 67,111,157,117,126,181,244, 51,111, 81,190, 11,115, 46,102,217, 18, 70, 80, 89,106, 66, 86,177, 81,121,251, 9,193,141, 83, 37, + 6,109,177,252,240, 53,177, 34, 8,146,192,193, 35,251,253,221,195,243,219,211,180,158,180,233,124,100,125, 21, 85,100,197,254, + 63, 74,182,220,170,112,242, 58, 76, 93,113,160, 10,130, 62,111,222,143,219,137,223,151,201,121,167,162, 47,137,162,160,152, 35, +112,233, 82,156,134,211,209,184,235, 59,254,206,233,135,164, 70,174,237,183,229,225,142,217,241,145,119,152,167, 64, 38, 20, 54, +150,229, 41, 95,112,122, 46,172, 94,255,122,178,243,227, 91, 0,210,174,100,167, 97, 24,136,198, 75, 8,165, 11, 66, 2,241, 5, + 92,248,255,239,224,192, 7, 32, 4,226,214, 10,148,180,205,230, 5,207,120,198,113,170, 74, 8,144,122,232,161,106,149, 38,126, + 30,207,188, 69,207,174,214,179, 83, 61,255,128,156, 65,115, 46,155, 66,143,109, 26,132,192, 23, 24,212,213, 1, 30, 89, 20,228, +197, 14,189,244,140,239, 54,181, 76, 36, 84, 25, 96, 61,128, 99,141, 36,232, 80,241,217, 55,206, 98,242, 24, 48,231,227, 36,128, +156,148, 92, 18,229,193,189,182,222,103,235, 16,104,244,208,228,156,198, 34,248,228,232,168,248,139,229, 17,181,218, 1,221, 33, + 87, 3, 94, 26,219,158,212,143,247,104,148, 16,182, 15, 25,101,129, 0, 25,177, 85, 21,151,161, 4,106,156, 88, 45,111,198,195, + 78, 99,222,102,143,127, 77, 0,226, 65, 20,247,112, 59,205,232, 47, 30, 23,171,167,182,142,150, 97, 97, 55,122,217,219,113,223, + 14, 28,114,164,241,243,130, 59, 48, 42,175, 72, 51, 33, 71,210,149,196, 79,142,255,168,220,147,251, 77,120,127, 43,196,117,233, +123, 33,199, 66, 84, 74, 44, 74, 89,234,112, 35,101,165,125, 87,200,149, 22, 11,136, 99,118,119, 90, 31, 59,183, 61,152,175, 22, +198,227, 29, 43,111,139,159,116,228,105, 68, 21,169, 23,138, 77,225, 21,199,248,193,196, 21, 26,187,190, 9,101,186,212, 75,232, + 45,131,243,102, 89,218, 99, 37,202, 74,116, 93,101,109, 36,165, 75,194,118,155, 98,176, 85, 78, 39,136,203, 0, 28, 10,217, 5, +154, 86, 14,249,154,250, 60, 30,236, 60,184, 19,242, 98,152, 53,247,152,208, 17,131, 79, 11,137,182,129, 1,161, 73,252,100, 25, +211, 19,247,198,209, 88,205, 39,238,197,180, 34, 85, 50,196,247, 83,241, 78,251,164, 87, 51,160,225, 60,200,100,170,131,147, 47, +210,184, 66,154,177,114, 28, 8,196,250,124,114, 77,117,130,216,254, 19,177, 4, 11,127, 57,133, 87, 80,230, 5, 52,112,128,156, + 99,193,204, 64,194,179, 14, 59,177, 31,141,115,173, 25,142,159, 31,235,182, 54, 53,184,186, 23, 27, 56,232,137,148, 84,132, 87, +165, 85,209,135,155, 22,206, 98,205,246,225,114,243,188,123, 31,135, 26, 25,163,152, 20, 98,209,222, 44,209, 76,241, 52,252,182, +125,133,234,216,116, 36,101,197, 46, 82,134,164,152,159,133, 14,239, 19,200, 48,152,241,233,139,185, 51,180,101,159, 20,239,194, +255,114, 81,156,116, 20,207,215,205, 51,186,165, 56, 97,223, 35,184,211,121, 4,134,203, 99,227,178, 28, 37, 76, 35, 60,123,246, +246,149,186,234,108,139,206,145,238,100,124,149,163,249,178, 90, 31,250, 38,231,182,253, 77, 19,243, 45, 0,103, 87,178,211, 48, + 12, 68,189, 80,210,210, 66,165, 8,245, 31,248,255,255,224, 3,144,184,114, 97, 19, 5,154,132,120,108, 60,155,235, 54, 69, 8, +110,189, 53, 78,236, 25,207,204, 91,206,234, 85,241, 91,131,106, 72, 12, 71,131,132,170,205,111,247,194,105,114,228,162,248,220, + 88,167,100,236,124,173,151,162,154,139,107,199,154, 31, 20, 81,233,170, 22,133,164, 68, 91, 1,215,140,224, 0, 52,223,246, 0, + 50, 13,227,209, 10, 85,194,156,231, 69,252,181,136, 95,179, 52,164,207,119,238, 61,107,152, 14,170, 73,166,242, 80,165, 22,141, +165,139,188, 33, 58,129,160, 37,115, 34,161, 51,104, 73,223, 3,167,183,108,230,144,162, 4, 40,178,211,213, 22,191, 95, 92,183, +225,109,139,253, 87,119,110,177,253, 8,196,172,204, 73, 3,192, 62,247,195, 77,187,238,195,242,126,220, 81, 89,137, 60,166, 94, + 49,130, 77,165,211,228,170, 64, 57, 83,101, 62,175, 49,108,166,183,224,255,181,104, 10, 90,145, 7,158, 13,245,100,150,206,109, + 26, 27,156,107,145, 91,102,182,144,235,106, 19,144,146,146,134,100,219, 57,194,230,208, 35,162,153,173, 22,126,125, 1,120, 99, + 75, 99,142,199, 86,229,139,253,164,188, 61,250,199,178, 29,125,245,131,245, 9, 64, 7,176, 51,250, 48, 99,180,195,200, 45, 87, + 67, 38, 68,230, 99, 59,172,175, 98,215,249,203,197,102,247,245, 14,199, 74,250,238, 20,237, 69,166, 68,130, 50,206,223, 51,152, +244,155,103,153,180, 4,232, 8,242,224, 44,105,141,102,120,211, 6,195,218, 48, 82,127,178,154,140,122,223,104,191,196,136,211, + 92,241,171,152, 4, 25, 43, 38,108, 54, 85,130, 57, 74, 46,146, 61,153,184, 13,138, 27,113,218,101,213,181, 72,226, 82,174, 39, +235,113, 56, 6, 2, 36,205, 44, 7,150,211, 7,200, 16,145, 51,227, 52, 71,154,180, 17, 73, 42, 22, 3,250,128,248,183, 24,122, + 66, 31, 51, 21, 42,245,159,241, 1,175, 39, 54, 71,249, 57, 10, 69, 33,125,214,201,235, 14,163,129, 23, 19,159,114,136,127,188, +125,189,131,177, 67,173, 16, 44,172, 25,113, 15,236,147, 42, 15, 20,147, 19,114,140, 43,154,145, 21,151, 80, 86,165,210,246, 21, +199, 41,150, 2,177,166,239,199,164, 46, 22,211,217,230,159, 78,135, 63, 13, 51, 23,250,220, 20, 58,147, 78,247,238,236,190,120, +170, 18, 64, 65,166,215,207, 89, 96, 32, 61,236, 42, 8,205,143, 79,222,161, 0, 74,142,242,171, 49,228,114, 58,252,155,240,248, + 45, 0,101,215,182,147, 48, 16, 68,119,182, 69,138, 4,163, 6,131, 47,242, 9,254,255,191,248,194,139, 26, 37, 26,229,106,235, + 94,236,220,150, 45,162, 34, 73, 19,194, 3, 45,203,118, 58,115,102,206, 57, 29,254, 42,152,253,142,252,161,167, 27, 72, 63,167, +203, 16, 83,104, 45, 48, 7, 80,209,107,118,170,229,158, 14,178, 46,168,205, 73, 67, 6, 44,185,206, 34, 74, 1,209,118,146, 59, + 69, 77,111, 71,174, 59,132,216,105, 26, 69, 61, 14, 38,187,217,192,159,202, 65, 4, 13,241,171,223, 43,189, 68, 58, 38,170, 22, +159,186,118, 88,177,107, 2, 2,130, 76, 41,110, 89, 40, 19,214,158,127, 80, 86,219,102, 27,196,228,129,122, 88,193, 39, 50, 10, + 26, 8, 14,175,123,203, 39,234,185,226,209,238,175,145,165,164,198,192,135,243,119,139,245,237,120,100,231,230,217, 53,168,140, +106,194, 50,211, 68,220,208,155, 74, 35, 38,227, 24, 28,238,171,172, 4, 75, 51, 39,246,255, 21, 89,218,103,125,106,153,242,120, +226,168,236,157,151,208, 39, 44,213,123,255,222,192,107, 27,218,105,161,122,133,233, 91,216, 52, 5,205,161, 23, 23, 67, 92,159, +209,176,127, 67,182,186, 69,216,218, 58,222,107,181,225, 85,234,210,127,203,121, 82, 99,211,239,132,159,228,121,224,148, 9,201, +224,126,237,218,103, 94,172,192, 87,193, 44, 29, 70, 80, 98, 18,152,222,192, 77, 46,235,135,249, 27,138,147, 82,178, 24,147,185, + 5,116,116,101,114,160, 51,118, 25, 44, 60, 32,169, 82,233,251,235, 71,120, 27,143,102,235,238,236,214, 79, 2,181, 71,121,114, +160, 10, 6,192,116, 60,157,189,204, 64, 0,201,148, 72,170,132, 72, 72,100,123,200,207,163,154, 24,137,120,165,211,145, 28,206, +147,144, 53, 21, 28, 54,118, 46,129,178, 6, 10,199, 44, 6,137,116,108, 28,194, 50, 2,252, 0, 13,210,196, 68,249,244, 73,182, +107, 55, 78,194, 77, 98,233,168,101,248, 47, 50, 2,209,170,182, 60, 89,185,245, 39,249,142,212, 36, 30,204, 63,197,111, 87,241, + 17, 55,168, 95,153, 80,161,119, 79,251,183,177, 14, 32,113, 96, 77,177, 49, 97,110,160, 89, 89, 28,124,104,111, 14,204, 95,137, + 6,192,237,102, 47,102,231, 42,223, 38,177, 36,166, 22, 89,200,220, 66, 66,220, 57,217,196, 92,151,121,103,119, 45, 11,236, 19, + 50,147,153,163,154, 35,130, 59,252, 49,144,162,175,171,179,201,124,241,148,161,222,240,251, 40,142, 94, 97,220, 87,140,212,224, +238,178,175,144,123,188, 56,173,253,230,167, 90, 33, 31,143,225, 93,141,162,249,241,176,207,207,145,145,225, 75, 0,202,174,100, + 55, 97, 24,136,218, 38, 64,145,104, 65,133, 3, 82,213, 75,213, 99,255,255, 99,122,224,210, 30,168, 18, 9,164, 36, 52, 78,188, + 52, 51, 99, 59,118, 9, 93, 56, 67, 20, 32, 30,143,223,188, 37,240,103, 40,143,148, 71,141,249, 15,184,127,156,128, 48, 28,100, + 3,233,132, 15, 1,135, 54, 36,157,249, 97, 4,244,194, 96,147, 72,214,222,228,210, 72,103, 46,139, 13,149, 6, 42,189, 75,181, + 87,156,199, 41,132,100,246,228, 83, 72, 92,201, 54,158,232,115,137,166,121,124, 51,108, 0,104,253, 56,129,100, 40, 64,149, 0, +135,207,156,188, 10,230,173, 40, 78, 4, 23,119,132,254, 9,111, 36,204, 83, 60,239,158,246, 31,175,148,107, 60,155,173,186, 73, + 1,155,129, 1,144,183,195,227, 38, 39,179, 17, 33, 78, 77,187, 47, 63, 95,118,235,195,177,206,207, 77,101,245,138,153,150, 25, +233,108, 67,220,157, 18, 62,211, 70,118,146, 34, 66,180, 67,207,222,253,147,129,206, 34, 73, 6,209,120,238, 0, 9, 20,155,153, +200, 50,216, 34,219,206,212, 74,183, 56, 34,171, 72,151,136,153,135,247, 82,109,167,236, 44,245, 82,216, 82,131,173,203,118,189, + 0,249, 81,103,143,178,153,226,111, 44, 35,133,250,181,177,149, 25, 97,143,185, 47,136,154, 56, 54,199, 39,231, 6, 15,122,125, +253, 94, 96,207, 87, 54,128,194,207, 57, 91,221,170, 34,107, 27,149, 81,210,180,178,108,179,220,156,170, 19, 77, 23,163, 34, 21, +246,115,107,198, 78,215,225,153, 4,221,166,137,215, 52, 9, 57, 92,148, 15,247,183,105,198,214,153,211, 64, 89,147, 87,185, 67, + 60, 6, 74, 70,194,109,196,178, 37,162,245,192,157,236,194, 65, 73, 19,175,160,230, 72,228,199,243,170,240,147, 33,150,144,105, +188, 85,149,197,104, 12,144,118,244, 23,127,220, 62,188, 21,239,152, 70,208, 47, 29,225,127,109,107, 19,140,200, 49,223, 67,175, + 46,124, 18,165, 95,173,168,226,193,204, 32, 4,189,117, 3, 31,233,251,119,210,100, 25, 66,157,140,172,117, 14,161, 98, 56, 16, + 7, 66, 27,140, 57, 50,167,194, 4, 7,168,146,241,162,148,245, 65,183, 74,107,105,192, 16, 89,163,253,190, 66, 22, 17, 35,171, +122, 30,249, 52, 71,206,230, 1,210,143, 8, 57, 60,197,152, 71,138,187,203,207,160,196,209,168,222,253,146,224,196,147,209,230, +112, 61,195, 4,191,224, 85,246,197, 61,197,100,236, 24,155, 62,252, 75,196, 30, 28,108,100,190,209,102, 46,239, 12,226,219,146, +226, 30,191,127, 56,111,242, 4,170,183,246,250, 6,245,151,215,151, 0,148, 93, 77, 79,195, 48, 12,181,147,142,109, 32, 62, 37, + 38, 33, 78, 92,198,145, 35,255,159,191,129,196, 17,161,137, 9,237,131,118, 75,210,154, 36,118,210,140, 49, 4,189, 79,237,154, +218,137,159,253,222, 99,254, 42, 19,154, 17,123,117, 62, 60,252,202, 14,221,177, 60, 4,225,119,101, 32, 94,178,116, 10,235,164, +231,218,253,180,129,177,183, 89,203,128, 15, 43,136, 37,198,202, 46,144,154,112,202, 60, 78,156,149,178,129, 71, 13, 72,164, 5, +132, 26,136, 42,202,225,196, 6, 86,164,170,106, 97,168, 42,177,135, 66, 41, 36,243,234,168, 36, 68,230, 67,192, 26,227,139, 90, + 29, 21, 36, 93, 91, 15, 32,184, 96, 71,229, 72,108,136,101, 49, 99,244, 2,205,141, 59,169,212,253,245, 89, 24,248,115, 97, 24, +212,223, 96, 20,234, 3, 25, 60,135, 2,132,201,122, 36,153,249,137, 69, 91, 53, 15, 81,225, 1,111,129,253,107,144,222,249, 37, +192, 4,212,213,160, 58, 27,235,145,166,181,131,218,118,111,166,125, 33,120,143,237,129,161, 52, 3, 84, 3,180, 0,152,181,176, +178, 84,217,208,195,190, 61,173, 38, 23,199, 90,235,247,133,125,251,220,186,162,183,211,254,115,155,129, 68,167, 26, 37, 92,158, + 39, 47,143, 66,229, 68, 71,138,137,196, 9,155,246, 53,196, 88,125,172, 42,118, 85,233, 98, 95,196, 6,238, 31,246,192, 38,100, +195,140,172,250,223,215,195, 28, 40,148, 5,225, 74,156, 6, 69,148, 32, 53,108,251,189, 1,233, 27, 70,143, 25, 47,241,143, 96, +172, 67,164, 50, 93, 21, 65, 34,240,159,226,224, 73, 14, 50,226,226, 43,242, 24,197,113, 4,164, 3, 20,233,169, 26, 11,179,236, +164,249,158,124,129,123,181,248,240,104, 91,103,167,183,211,249,114, 30,244,243,178,207,148, 80,171,178,245,199, 78,206,202, 57, +213,255,205,243,227,139, 46,232, 2, 56, 16,170, 56,135, 22, 13, 66, 35, 70, 45, 55,171, 64, 82,242,223,184,173,135, 55, 15,246, +238, 17,214, 13,109,116,176, 21,218, 4, 44,222,159,229,125,237,169,106, 48, 75,112,139,186,155,189,182,207, 79,214, 54, 93, 83, + 59,215,128,241,191, 54, 44, 27,201, 35,240,152, 52, 31, 10,148, 60, 97,185, 72, 59,174,135, 88,156,193,177, 24,163,254,249,212, + 92,146, 88,255, 64,251,148,182,171, 18,185,111,204,107,129,189,164,197, 94,234,248, 3,143, 79,170, 37,218, 77,238,165,232,193, + 33,115, 18, 93,168,134,133,104,213,213,184, 26,219,206,112,166, 26,234, 81, 75,142,126, 47, 52,254,115,125, 9, 64,217,153,236, + 52, 12, 3, 97,216,158,164, 75, 90, 16,251, 34, 33, 16, 39, 36,182, 3, 18,226,253,159,128,135, 64,244, 64,217, 10,148,144,197, +206, 96,143,215, 4,138, 74, 15, 61, 68, 85, 85, 53,246,239,120,252,207,247, 91,125,247, 22,225,134, 45, 90, 49,186,210,207, 23, + 31, 74,252,166,242,145,149,142,199, 53,252,184,188,229, 1,120,100, 52, 51,115,177, 49,130, 15,254,244,168, 53, 30,204,157,130, +214,124,128,224, 7, 51,166,120, 63,139,192,101,119,160, 41,190, 43,129, 79, 77, 14, 61, 79,110, 78,174, 39,207, 19,160,208,134, +198,150,248,173,107, 84, 93,172, 69,101,168,100,200,169,109, 23, 37,200,188,166,237,101,138, 68, 98, 38,112, 24,161,254, 64,189, +207,190,234, 82,202,211,157,181,195,141,113,150, 38,234,150,169, 73,217, 67,194,170,145,214,147,211,156, 39,238,184,181, 31,193, + 61, 58, 29, 37,240,159,135,119,112,167,154, 35,198,182,148,196, 39, 73,111, 0,195, 20,222,106, 53, 7,229,189,144, 15,132, 85, + 56,207, 6,151,155,131,227,245,236,104,181,127,182, 49,188, 88,205,174,198,217,150,132,169,168, 39, 66, 61,187,201, 17,192,241, +254,104,115, 37,251,154, 21, 79,111,213,148, 54, 31, 16,145,249,150,119, 41,248, 97, 42,162, 50,142,182,219,115,109,221,209,101, + 49,221, 58,161, 83,190,164, 14,234, 98,107,227,244,241, 61,181, 57, 27, 12,116,125,216, 25,120,177, 21,153,233,156,187,104,129, +233, 58,159,183,173, 29,248, 83,223,165,113,232,132,176, 77,196,214,252,100,109,250, 32,178,120,204, 53,172, 11,174,178, 91, 73, + 8,226, 17,100, 34,112, 46,130,184, 27,208,151,158,113,196,197,166,132, 61,238,152, 24, 33, 53, 50,198,220,234,139,149,172,212, + 31,240,242,249,194, 44, 40,213,246,128,217,190, 89,134, 46, 48,202, 60, 31, 53,166,244,196,125, 1, 1,213, 78,191, 16,212,158, + 66, 30, 27, 91,249, 39, 27, 61,238,245,183, 63,170, 60,151, 69, 41,107, 41,138,108,247,178, 60, 56,229,249, 92, 51,159,212,127, +175, 22,255, 82, 31,178,243,156,179, 28,139,247,215,102, 62,227,211, 59,121,119, 43,170,188,169,231, 88, 22, 58,140, 89, 19, 86, + 4,242, 40,248, 54,238, 60, 10,112, 72, 83,109, 15, 3, 22,221, 30,159,117, 8,238,173,135,119, 95, 21, 96,177,231,253,111, 42, + 1,183,196, 65,240,172, 17,174, 25, 42,137, 91,159,187, 18,191,156,178, 7,124, 2, 46,104, 46, 93, 40,136,109, 27,149,127, 9, + 10,180, 48, 31, 22, 40,226,160,143, 97,111, 68,139,120, 19,127,237,120,176,162,198,195,146,191,251, 91, 0,202,206,103,181,109, + 32, 8,227,187,179,146, 45, 69,142,131, 75, 3, 14, 61, 22, 31,122,239, 11, 20,250,254,135, 66, 31,160,180, 77, 28,136, 77,155, +198,146,119,165,157,169,246,175, 86, 82, 19, 82,227,131, 49, 24, 86, 94,239, 88, 51,243,205,239, 19,214, 26,219,185, 56, 14,183, +138,255, 92,112, 8,253,192, 95, 60,203,124,222,128, 78,154,207, 16, 44,117, 25, 79,232,248,144,142, 30,187,210,104,212,135,225, +168,209,203, 35, 19, 18, 18,119, 14,107,219,225, 78, 26,196, 6,124,156,114, 2, 7,121,119,138, 44,239,218,196,172, 16,158, 9, +127, 56, 73,223, 30,238, 76,163, 86, 8,141, 8, 65, 17,233,106,247,233,222, 44,179, 92,235,254,239,161,203,241, 17, 45,111, 64, + 18, 74, 91, 77,106, 25,151,150,235,148, 25,125, 1,237,165,250,126, 60,181, 29,110, 87,229,187,171,213,118, 85, 92, 45, 22, 21, +100, 43,130,140,160, 48,133,124,158, 71,219, 85,123, 87,219, 37, 94, 31, 81,113,168,103,228,188,231,110,147, 89,146, 7,188, 53, +241, 93,108,138,188, 90,230, 79, 45,237, 27,245,128,120,199,216,199, 98,249,233,253, 70, 84, 92,103,253,106,177,214, 84, 91, 77, +146,200, 97,119,189,254,252,102,243,229,240,251, 39,177,203,142,118,219,245,205,166,220,223,159,190, 29,207,143, 54, 95,199,153, + 68,242,127, 14,134,215, 2,137,144,193, 24,109,143, 53, 51, 93, 8,232,159,203,220,120, 57,246, 25, 79,145,139,227, 73,152, 82, +153,143, 4, 78, 26, 50, 46,192,167,254,215, 46,156, 88,164, 73,192,159,242,164,190,146,198,119,154, 12, 73, 57,207, 85,228,124, +106,139, 54,187, 76,156,166,236, 78,221, 62, 8,138,210,112,207,189, 85,187,215, 62,198,224,206,201,199,114,128, 32,235, 98,177, +253, 31,108,153,134,154, 39, 70, 80,141,117, 76,240,126,100,253,245, 20,139, 82,219, 64,144,152,255,185, 23,122, 92, 67, 48,111, + 95,150,235,218, 80,145, 45, 68,158,249,193, 80,230,201,149,188, 65,117,145,149,253,119,166, 58,101,176, 89, 40,171,235, 15,237, +205,142, 53, 79,172,213,164,206,198,122,168,105, 80,158, 65, 74, 89,255,234,234, 3,171,255,232,135, 31,250,254, 43,170,254,211, +103, 84, 70,255, 78, 90, 89, 88,102, 23, 23,197,130, 17, 46,122, 48, 3, 13, 45, 85, 22,183,148, 66,178, 20,230,191, 96, 4,179, +165, 49,151,244,133,226,140,158, 38,184,224,237, 2, 2,117,138, 59,156, 32, 4,184, 69,152,121, 79,149,238,248,124,221, 61,128, +113,112,172,173,156,208,140,135,159, 87, 37, 46, 90,106,231, 71,117,114,122, 40,100,155, 52, 99,200,152, 77, 23,102,130,127,146, +175,100,144,117,142,143,253,138,199, 95, 1, 56,187,154,221,182, 97, 24, 44, 74,142, 98,180,193,134, 2,197, 78,219, 83, 12, 24, +176,199,232,179,246, 65, 58, 96,247,222, 10, 12, 40,154, 37, 93,147,198,150, 69,150,164, 36, 71,118,186,162,104,144,131, 79,134, +109, 17, 20, 73,125, 63, 77,253,120, 53,105,208,190,170,143,172,170, 52,152,103,141,167,137,158, 74,243, 90,142,169,178,103, 70, + 34,231,165,101, 44,170,249,170,115, 39,202,169,162,216, 97, 84, 97, 18, 21,168,146, 5,133,139,220,154, 73,220, 64, 55,222, 24, +147, 20,248, 64,133, 72, 69, 88, 76,148, 39, 88,139,124,252,149,132,187,203,133,205,217, 64,237,111,116, 70, 40,176,226, 6,146, + 14,141,203,228, 11, 13, 3,103,155,117,183,246,226, 32,184,146,154, 71, 60,112, 82,198, 64, 4, 15, 50, 75,144,119, 88,170,162, +205, 94, 66, 91,152,242, 54, 9,105,105,186,255, 71,241,215,102,123,179,217,122, 99, 47,151,203,139, 70, 48,232,173,151, 45,245, +121, 64,136,161, 83,200, 16, 77,225,234,105, 98,163, 36,112, 19,166,192, 88, 91, 54, 0,156, 6,125,157,250, 99, 65,173,180,156, + 55, 23,174, 35, 90,119,113, 75,200,149,251,119,239,175,126,126,251,253,240, 55, 6, 35, 78,153, 34, 93, 41,239,207, 27,218,227, +129,219,235,253,234,211,234,135, 63,191,238,119,161,195,214,185,231,206,254,121, 12,187, 10,234,245, 97,227,145,166,122,181,182, +180,220,252,247,234, 33,192,171,114, 8,226, 61,252,217,155, 51,207, 23, 92,199, 52, 89, 17,169, 50,188,166,209,240, 13,138,109, + 83,233,234, 72,193, 88, 73,154, 72, 71,236,169,230,201,162,128,211,167,207, 44, 36, 78,238,103,237,121, 24,130,120,215,208, 76, +172, 10,102, 85,216, 52,186,170,111, 63, 66,100,202, 22, 2,199,206,225,104, 9,116,180,123,172,134, 0, 71, 58, 60,166,179,100, + 61,216,133,140, 24,182, 74,229,133, 26, 35,237,242,176, 70,225,144,137, 55, 59, 73,238,177, 70,219,143,188, 51,183,160, 36, 28, + 79, 5,168, 32,245,156, 37,212,211,110,176,183,187,187,175,254,203,210,249,206,245, 3, 56,174,202,105,179, 70,236,193, 31,184, + 20, 49, 11,111, 29, 7, 46, 4, 75,189, 0, 41,159,144,195,118,123,207,105,125,224,174, 34, 4, 33, 30,114,224,199,212, 72, 24, + 26,185, 74,134, 98, 85,143,205,102, 1, 66, 74,204, 31,218,166, 83,185, 52, 1,131, 2,235,196,255,160, 6,224,181, 82,135, 42, +218, 11,204,161, 50,185,125,194,136,126,209, 14, 40,157, 16, 20,169,253,113, 65, 11, 58, 96,228, 43,157,150, 83, 8,115, 56, 13, +213,179,157,250,145,249,142, 79,113, 47, 5,141,181, 3,162,125,107,219,120,171, 23,233, 67,127, 90, 71, 31, 4,155,247,222,223, +139, 0,180, 93, 75, 78, 2, 65, 16,237,238,249, 0, 26, 48,134, 27,152,152,184,240, 12,238,117,229, 33,188,165,137,137, 43,143, +224,194, 11,160,160, 32,195,175,153,233,110,187,170,250, 55, 12,113, 99, 92,178, 1, 38,208, 85,175, 94,191,122, 47,111,239, 31, +198, 22,162,143,205,254, 38, 94,159, 50, 50,166,233,182, 0,225,234,190,241,183,181, 78, 42,233,126,111, 82, 79, 58, 47, 0,207, +152,210, 16,162,120, 82,229, 41, 20,155,211,134, 20, 10, 10, 88,230, 15,132,161, 38,224,136, 84, 18, 69, 56,132, 7,127,100,161, +125, 45,128,247,202,130,152, 33,113, 95, 18,148, 78,137, 11,199,232, 45, 36, 50,231, 29, 8, 90,104,228,124,245,203,251,235,188, +222, 94,142,216,245,249,197, 90, 14,137, 37,175, 27,137, 22, 11, 57, 36,250,160,231,253,158,105, 59,197, 74,128,237,134,240,248, + 55,234,178, 75, 76,234,176,149, 99, 13, 15,171,166,178,182,128, 89,146, 94,222,107,225,201,149, 37,221,113, 48,201,203,116,135, +136,119,120,131, 84, 19, 30,192, 11, 85,246, 51,184, 86,229, 61,145, 13,138,188,218, 53,187, 6, 28,224,236,199, 61,220, 92, 77, +120,133, 30,104, 64, 84, 8, 28,161,106, 16,189,105,123,128, 55,210,188,205,150,243, 6, 64,199,184, 44,202,188,183, 88, 55,213, + 78,135, 93,255,191,120, 23,107,127,252,104, 76, 25,146,111, 1,249,165,122, 79,187, 28, 90,169, 56, 41, 66,242, 38, 6,184,184, + 42, 38,188,254,143, 37, 6, 50,222, 96,144,123,184,232, 9, 27,199, 95,112,157, 52, 0, 84, 66, 57,135, 16,146,135,243,149, 92, +185, 53,156,196,233, 48, 61,110,162, 35,123,228, 44, 86, 45,222,189,117,243,160, 39,114, 43, 65, 14, 0, 42, 25,113, 24,159, 76, +245,216,249, 23,208,162,159,119, 75,231,174,202,187, 4, 16, 58, 3, 88,216, 55,245,202,181,180,200, 4, 43,191,229,212, 30,255, +141,153, 45, 63, 98,138, 91, 12,181,134,197, 36,163,234, 44,231, 59,214, 76,213, 98, 92,158, 74,251, 71,182, 5, 93, 73, 83,125, + 89,240, 97,202,141,206, 75,244,136,234, 83,140,154,210,123, 86, 35, 27, 83,125, 42, 11,216,247, 53,216,255, 40, 72, 8, 71,221, + 38,169,120, 76,216,195,234,114,229,233,253,120, 26,120,148, 9,174,194,238, 23,106,134, 68,170,225,248, 85,171,232, 39, 29,125, +164,145, 80, 46, 6,126,151,126,127,116,123,119,255,252,244, 56, 95, 76,136,140, 71,224,119,128,190,117,248,221, 33,168,205, 52, + 7,101,153,183,237,136, 76, 11, 57, 68,240, 94,102, 5,131, 4, 71,186,200, 70, 66,178, 24,108,237, 20,197,248,209,199,248,191, + 48,159, 31, 1, 88,187,154,158,132,129, 32,186, 31, 96,193, 0,234,193,196,191,224,111,240, 98, 60,248,255,175,198,187, 38, 96, + 64,160,133, 66,187, 51,238,206,236,108,151,143, 72, 76, 36, 27, 66,202,161,165, 41,179, 51,111,222,188,103,206,157, 3, 79,150, +244,182, 78, 18,198,195,197,209,220,145,197, 82, 55,252,149,164,232,121,103,119, 89,103, 76,228,183, 29,166,166,153,203,186, 70, +193,199, 67,154,103,114, 80, 37,173,123, 4,232,138, 65, 76, 64, 93,244, 1,161, 22,126, 76, 0, 49,218,207,179, 21, 3,191, 3, + 70,185,110,226,153, 5, 83, 6, 94, 64, 87,179,105, 54,139,160, 74,168,222, 87,170, 63,152,186,128, 68, 50,233,147,246, 48,180, +156,111,248, 45,174, 71, 76,155, 1,113,250, 84, 55,212,131, 59,138,236, 58,196, 50,125, 67, 62, 57, 78, 10, 76, 36,245,224, 49, + 25, 54,177, 2, 87, 34, 68,178,105,253,254, 87, 56,207,100,121, 10,156,128,197, 38, 14,172,218,241, 85, 32,247,239, 29, 33,168, + 74, 61, 13,175,239,238,251, 31,139,106,179, 3,206, 19,235, 6,119,196,155,240,165,181, 79,198,160,117,179,245,246,205, 23,236, + 74, 61, 62, 76, 70,195, 98,185,170,155,186,105,255,227, 17,196, 44, 93,189,202,166,189, 90,178,234,245,183,205,177,116, 39, 6, + 21, 19,112, 86,119,141, 26, 45,234,219,192,158, 75, 52,209, 28, 9, 31,254,115, 75,194,233, 16,231,223, 84,148, 93,231,135, 72, + 96,191,136, 80, 67,130,116, 82,170,206,234,187,242,188, 5,231, 69, 76, 11, 29,101,165, 73,102,242,104, 22, 41,195,100,165, 59, +103,108,174,180, 44,136,186,128, 75,166,163,179,131, 76,148, 82,113, 42, 58,137,173,235,120,159,236,223, 23,181,235, 19,253, 49, +236, 74, 78,247,109, 49, 25,222,242, 81,217,245,180,142,123, 20,230, 94,122, 65,146,213,240,223, 15,200,205,132,188, 3, 3,227, + 55,148,111,141, 2, 82, 54,110,190,221,246,179, 45,173,233,107,219, 3, 87, 67, 57, 87,213,194, 84, 43, 91, 46, 77,185,106,171, + 89,189,157, 54,213, 28,203, 57,172,191,252,183,184,157, 7,183, 85, 22,235,246,217, 17,147, 35,147,182, 88,188, 3,128,135,158, + 26, 38,246,198,180,104, 37, 24, 1,164,105, 6, 0,141, 78,206,121,250, 36, 60,101, 73,231, 81,194, 75,191,253, 50,112,104,173, +125,126,121, 29,141,199,199, 58,117, 93,230,158,115, 55, 12,205, 48,234,163, 56,120, 54,184, 99, 7, 35,203,185, 76,193,219,126, + 27,167,116,212,176, 24, 37,130,141,175,135, 80, 93,134,254,207,132,224,191,191,126, 4,160,237, 90,114, 26,134,129,104,198,113, +170,148,150,130,144, 88,177, 64,226, 18, 44, 56, 19, 7, 64,226,176,192, 54,162, 63,154,230,227,218,131, 61, 99, 59, 78,105, 37, + 36, 68,151, 85, 85,165,141, 51,126, 51,126, 31,121,114, 27,129,211,155, 38,252,166, 73, 23,225,103, 80, 62, 65,148, 54, 64,202, +175,207, 60, 74,129, 16,192,228,227, 40,227, 76, 11,194, 77,119,243, 39,160,248,225,232, 6, 65, 45, 48,137,250, 2,193, 32,156, +146,129,111,239,194,165, 50, 61,135, 20,128,210,179,242, 93, 69, 96,254,179, 91,145,188,103,107,111,219,199,222,130, 12,159,166, +114,250, 52,191,221,214,213, 7,102,179, 12,106,233,242,135,229, 64,137,179,171, 49,183,235, 90,138,172, 81, 38,167, 73, 83, 48, + 5, 67, 62, 35,157, 4,143, 70, 17,254, 52,242,126,129, 89,158, 47, 74,105, 75,106,213,171, 70, 15, 54, 94,234,204,102, 14,199, +171,121, 96,151, 67, 82,208, 35,179,133,237,195, 90, 74, 64,164,146,103,155,103,119,199,238,111, 46,222, 62,183, 93,167,156,114, +140, 69, 92, 20,246, 0, 46,114, 8,237, 71,119, 10,223, 27, 85,101,217,163,144, 15,119,215, 22,122,172,150,173,235,194,147,212, + 14,243,135,250, 14, 73,176,184,167,132,146,192,109, 65,103,142,179, 2, 72,254,239,250, 34,165,115, 49,246, 12, 96,229, 61,115, +225, 77, 8,221, 66, 76, 41, 85, 30,140,113, 16, 92,170,223, 96,155,162,171,242,178,238,234,144,204, 16,153,214,225,187,217,167, +118,116,222, 15, 3, 51,135, 38,244, 62,182,213,143, 13, 13,131,106,244, 19,185,180,232,192, 56, 18, 44,234,111, 41, 63, 7, 7, +129,181, 97, 78, 45, 61, 5,192,109,136, 56,144,166, 84, 32,219, 25,198, 89,166, 27, 71,121,238,135,237, 30, 59,213,245, 22,101, +123, 61, 45, 99, 23, 31,114,165,131, 51,207,104,168, 0, 3, 93, 31, 7,141,151, 5,229,206, 82,128,198, 8,121, 45,117,175,117, +153, 79, 10, 40,116, 87,211, 94,160, 15, 34,235,165, 65, 41, 15, 28, 71,101,145,187, 33,147,247,253,214, 56, 91,224, 30,221,200, +158, 5, 5, 22,151,105,131,105, 50, 81, 58,109,254,145,174, 74, 46, 65,188,197,114,110,142,112, 25,112, 34, 66,120,206, 36,135, +179,132, 64,147,148,163,136,220,237, 85,178, 70, 32,161,197, 4,155,229,118,255,245,250,242,188,217,172, 89, 49, 51, 62,210, 57, +190, 66, 11, 37, 90,173,225,124,251,128,199,111,141,158,218,134, 26,172,244,181,220, 85,113,227,159, 23,243,181, 94, 37,199,232, +248,127, 16,254, 91, 0,210,206,166, 41, 97, 24, 8,195,187,105,164, 69, 20,245,230,232,140,122,242,175,248,255,143, 30,213,131, + 7, 29,133,161, 64, 63,146,172,201,110, 66, 91, 42,142,163,192,133,143, 67, 25,218,101, 63,222,125, 31,253,109, 64, 63, 64,201, +250,213, 49,184, 68,194,253, 85,148,151, 19,182,175,169, 79,230, 81,206,199,245,136,103,176, 82,193, 71, 50, 2,243,226,105, 52, +129, 65,134,204, 35,238,171,196, 36, 28, 90, 94,176, 10,173, 48,246, 15,179, 93,173,138, 28,231,217,158,138,196,173,131,243,122, +192,211,179,155,243,139,219,235,122,243,182,242, 63,118,161,209,118, 73,156,179, 13,111, 41,241,193,171,138,201, 56, 98,177, 43, +208,237, 15, 22, 32, 2, 11, 69, 32, 98,181,105, 14,234,106,150,171,137,122, 47,155,167,182,221, 14,253, 87,241,176,166, 74,165, +143,225,104,232,212, 79,231, 39,233,173,130, 27, 32,167, 58, 43, 50, 61,195,152,174, 44,170,250,241,229,115, 93, 53,219,154,182, + 97, 95, 17,142,132,218,108, 72, 19,110,106,251,218,218, 39,128, 59,128,135,251,203,233,201,148,154,106,181, 90, 47,201,150, 73, +178,249, 79,234,247,174,197,100,248, 8,253, 35, 71, 60, 86,225,225,239,211, 76,149,190,212,112, 56, 15,187,203, 24,154,198, 41, + 27,149,201,160, 4, 68, 38, 80,167,142,179, 4, 71, 55,196, 44, 65,199, 69,138,248, 32, 22, 61,136, 13, 58, 37, 80, 66, 92,154, + 22,216, 66, 76, 10, 36, 44,246, 43,232, 48,183,167,110,155, 42, 57,240,237, 58,237, 72,123,147,170,196,223, 0, 24, 83,220,162, + 49, 43,198,150,145,236, 88,197,149,212,164, 1, 8, 72, 14,127, 26, 26,197, 81, 30,146,250, 37,218,103, 72, 41,194, 35,218,221, + 52,170,131,151,237,130,187,165, 52, 7, 32, 1, 19, 59,193, 91,227,224,143,143,159,152, 80,137, 6,223,165, 76,129,105,117, 97, +230,147, 90,149, 80, 62,131,210,254, 53,151,229, 96, 56, 7, 16,253,165,109,157,217,250,176, 14,213,194,180, 85,240, 56, 48,161, +238,139, 22,154,221, 2,174,219,155, 69,143, 45, 27,211,213,167,242, 34,223, 84, 27,105,185, 7,203, 89,180,244,221,181,224,160, +231,114, 60,212,161,227, 96,209, 63, 53,106,133,199,200, 98,124, 25,169,250,111,185, 46,151, 90,199, 2,170,183,123, 47, 42,185, +177, 56,138,126,104,151,255,160, 95,196,225, 96, 64, 13, 58,175,188,212, 98, 27, 29,253, 80, 35,158, 48, 37, 79, 68,135, 19,187, + 63,100, 84,254,246, 37, 0,105,231,214,147, 48, 16, 68,225,157,109, 45,197,219,147, 81,140,250,143,252,249, 62,251, 98, 8, 49, +209, 24, 81,161,116,219, 93, 59,183,221,173,162, 96,124, 36,133, 0, 73, 51,221,153, 57,231, 59, 57, 31, 56,216,237, 1, 81,187, +123,137,241,123,194, 31,170,188, 18,237,184, 63,146, 77,135,225, 60, 59, 67,117, 61,200, 70,211, 66, 72,188,226,148,140, 24, 25, +111, 88,164, 9,106, 48,170,235,202,111, 22, 95, 40, 57,187,129, 99,138,217, 98, 71, 90, 73,126, 1, 99, 26, 95,135,147,104, 84, + 60,116,232, 20,233, 16,124, 19, 40,111, 94,158,183, 37,243, 79,142, 75, 3,173,101,133,201,134, 46,149,202,104,108,117,214, 60, +252, 54,103,224,234,168,174, 38,246,254,117,245, 64, 88,224, 94, 33, 98,253, 30, 14, 38, 24,183,105,249, 98,190,211, 41,252, 84, + 61, 83, 75, 18,191, 91,223,159, 86,211,139,250, 96,222,192,220,132,187,231,183,235,110, 61, 28,111,214, 67, 53,199, 94, 36,180, + 40, 63,196, 7,233,178, 53, 11,122, 32,157, 27,115,123,115, 57,155,157, 12,101,115,241,248,254,250,210,172,200,115,235,254, 93, +220, 77,150,235, 36,173, 6,198,240,218,154, 52, 51,135,214, 56, 15,165,133,179, 73,217, 58, 10, 84,228, 60, 55, 47,157, 60, 19, + 9,149,140, 78,227,245,144, 4, 49, 92,167,163, 87,137, 89, 49, 73,244, 98,162,213,200,235,221,152, 14,239, 94,145,143,194,111, +207, 4, 18,228, 93,142, 44, 85, 73,218, 6,157,123,131, 74, 62,252, 54, 51,123, 48,169,210, 71,139,131,100,109, 11, 33, 71, 54, +124,236,124,194,243,185, 21,192, 36, 7, 47, 33, 24,136,170, 60,200,163,136,195,194,169, 63, 20, 85,142,132, 70,198,200, 2,136, + 3, 76,208, 97,187,103, 90, 49, 72,134, 96, 18,146,163, 74,193,210,215,210,130,223,225,191,194, 5, 88,213,187, 15,223, 60, 97, +112, 95, 81,247,136,104, 26,238, 17,160, 49, 18,133,203, 14,125, 3,230,211,173,240,132, 19, 40,147, 8, 5, 30,212, 21,139, 65, +213, 87,182,114,157,139, 30,246,252,222, 1, 58,170,216,116, 33,108,218,141,205,214, 29, 63,202,179,199,118,160,108,240,237,225, +171,204,143,143,240,178,174,165,251,162, 47,120,252,195,154,109, 47, 40,171, 12,247,246, 13, 42,186,131,140, 93,196,233, 19,108, + 89,246,134, 92, 20,142,123,113,192,192,172, 70,231,239,141, 91,199,179, 89,161,168, 3, 97,173,103, 80,123,179, 71,225,253,101, +221,197, 31,252, 20,128,180,179,201,105, 24, 6,162,240,216, 77, 83, 40, 85,133,216,128,196,158, 67,112, 7,110,205, 21,216,118, + 7,170,186,169,248, 41, 16, 39,246,224,249,115,146,182, 82, 43, 33,117, 87, 41,149,210,228,121,230,205,243,231,106,172, 32,216, +187, 98,103,168, 60,158, 80,121,151,206,116,108, 84,229,157, 43,187,207,237, 28, 96,157,166, 91, 35,220,255, 84,226,155,172,184, + 71, 69,249, 37,216, 75, 59,243, 55, 29, 47,228,244, 82,249, 88, 88,122, 34, 22, 60,189,139, 46, 85, 26,160,242,242, 56,216,185, +246, 54, 79,163,235,250,137,185,127,118,250, 59,153,104,191, 58,209,133,138,137, 18,215,224,126,248, 12,213,153, 33, 7, 2,125, +232, 62,220,215,245,205,213,244,121,243,241, 54,184,109,237, 25,157,145, 31, 27,145,105, 16, 21,152, 14,241,175,134,175,233, 44, +131,184,107,225, 46,255,238,226,114,251, 25,214,241,123, 5,176,125,239,114, 63,177,228,247,169, 97,139, 97,199,173, 70,195,215, +124,116,245,211,195,109,189,188,184,170,225,183,105, 86,175,187,117, 67, 16,227,214, 90,132,255, 72,188,183,224,166,236,240,154, +131,191,240,176,156,230,178,189,202,234,249,149, 5,169,131,121,237, 23,115,255,178,113, 6,237, 19,191,141, 97,117, 32,167, 86, +160, 56,108,138, 64,212, 20, 13,255,133,195,170,201, 33, 30, 9,224, 75,102, 70, 23,117,173,226, 5,134, 5,234,189,187, 49,134, + 16, 75,149, 80,178, 94,252,224,165, 74,206,184, 86,169, 47, 17, 63,181, 27,176,140, 94,123,229,239,250,188, 55,225,204,148,254, +107,116, 92,139, 11,187,126, 15,143,184, 54,162,242,140,228,152,240,149, 69,226,185,211, 76,208, 83,242,205,153,113,160,120, 47, + 97,218, 50, 71,219,148, 93, 6,206, 38,101,194,221,160,237,189, 81,104,101,158, 66, 82,109,202,173,109, 75,232, 25, 10,241, 86, + 77,126,234, 35, 83, 66,232,126, 19,153,187, 77, 41, 96, 12, 24,118,194, 36,200, 69, 63,155,102, 81,241,106, 60,243,106, 83, 56, + 92,245,156, 69,244,198, 79,133,152, 51,238, 88,140, 99,191, 58, 78, 7,242,133,165, 85, 27, 15,192, 35,136,163,139,104,108,102, +250,115,163, 47, 75, 2, 98,105,101, 68,136, 98,234, 75,111,196,211,165,113, 60, 54,179, 4,167, 59, 54,225, 50, 47,141, 64, 88, +243, 9,209, 79, 28, 25, 91,109,152,236,167,123,112, 70,121,158,220, 73, 7,232,189,154,164,112,139,131,114,254,252, 62,185,242, + 85, 72, 42, 45,127, 2,144,118,237, 58, 13,195, 80,212,118,156,166, 52, 45, 45, 15,129, 84,193, 15,176, 32,177,244,199,249, 6, +118, 6, 70, 88, 0,137,231, 80, 41, 37,117,147,216,216,247, 94, 39, 78, 72,165, 72,180, 91,171, 14,174,227,227,251, 58,231,116, +235, 51, 67, 80,158, 13,141,229, 61, 95, 41,104,198,214, 40,143,204,181, 54,202,211,128, 77, 19,200,123,243, 87, 82,158, 67, 61, + 60, 30,152, 88,178,112,142,130,155, 62, 33, 57,252,149,243, 67, 64, 16, 16,154, 60,230, 73,154,207,190,101,133,130,148,166, 36, +137, 16, 34,204,249,249, 45, 55, 76,233,218,225, 32, 22,108,162,218,142, 25,164,192, 37, 32,159,132,248,119,141, 70,183, 4, 97, + 36,253,104, 79, 92,202,228, 50, 77,238,191,127,222,152,185,100,124, 53,153,223, 92,156,174,115,117,251,252,242,176,255, 79, 13, + 36,222, 8, 31,171, 96,207, 76,251,243,145,239, 88, 26,114, 80, 50, 69, 81,170,109,113,190,152, 92,157, 29,142, 62,205, 93,153, +191, 91,136,103,236, 85,183,246,210, 70,253, 43, 46,174,143,231,203,147, 89, 58,139,182, 54,156,207,244,211,199,230,241,107,179, +134,137,160, 49, 44,237, 63,245, 65, 78,118, 87, 4,238, 83, 38,142,132,152, 39,241, 34,137, 15, 98, 23, 30,218,172,217, 6,129, + 0, 21, 60, 87, 49, 36,175,188,110, 90,113,116, 53, 5,248, 8,192,221, 53, 11, 73,213,145,155,254,202, 40,111, 39, 64, 32,147, +145, 38,211, 76,101,168,135,209, 1,247, 46,255,211,235, 6, 58, 21,116, 3,243, 20, 38, 34,161,111, 97,176,126, 12,135, 81,248, + 58, 18,134, 32,120,121, 32,206,227, 68, 77,200, 79, 1, 78, 52, 76,108,145,151,142,241,158,170,160,236,216, 80,186, 49,231,128, +197,114,233,115, 89,195,125, 97,136,251, 10, 20,247,143, 35,116,156,177, 59, 5, 44,221,160,150,213,120, 16, 54, 28, 66, 22,145, +215,131,251, 26, 56,147, 54, 30, 23, 44, 42,149, 22,153,221, 49,163,119,218,201,222,184,190, 4, 92,174,206,125,161,178,231,192, +194,119,169, 44,202, 59, 66,147,123,186, 49,224,161,219,205,249, 16,247,197,157,184,105,154,234, 33,251,130, 0, 83,181, 61,129, +131, 57,231, 30,110,217,159,224,189,169,210,160,152, 57,233, 9,195, 50,117, 32, 69,215,158,224,116,205,151,195,241, 66, 21,249, +174,218, 14, 87, 43,235,212,242,164, 24, 89,172, 6,175, 18,166, 64,175, 92,114, 9, 12, 77,116,184,195, 75,181, 86,163,128,154, +109, 81, 96, 13,128,211, 90,112, 4,131, 6, 82,106, 21, 22, 61,232,202,105,178,135, 26,220,237,235, 87, 0,210,174,174,167,109, + 24,138,250,171,105, 74, 33,168,108,171, 54,132,196,222,224,157,255,192,191,231, 47,236, 5,169,211, 52, 9,150,174,105,155,196, +246,157,125,237,235, 56,140, 48,164,229,169,170,170, 42, 77,210,235,235,115,206, 61,103,192,103,212, 75,239,249,201, 42,255,126, + 62, 45,127, 57,214,255,249,182, 44,239,229,121,102, 96,105,147,127, 55, 12, 26,171,244, 63,230,177,107,183, 36,107, 23,100, 53, + 6, 83, 62,161,192, 82, 60, 56, 71, 4, 23, 45, 3,193,206,229, 12, 76, 95,235,205,170,100,243, 98,185, 63, 92,120, 13, 91,212, +185,164,171, 17, 74,138,160,216,141,168,100,112,103, 94, 42,249,179, 51,167, 50,122, 52,182,113,123, 5,123,170,101,120, 63,185, + 91,157, 63, 23,242,168,251, 71,211,175, 25,191, 59, 61,191,189,250,176, 92,205, 69, 39,239,229,101,249,248,227,193,232,169,107, + 40,147,123,119,134,207,244, 25,184,166,136,177,228,212, 32,135, 15, 55,204,238, 52, 60, 29,250,147,162, 95,159,151,235,101,113, +179,109,191,213,187, 77,219, 54, 62, 97, 13,206, 24, 95,201,217, 69, 81,124,169, 22,159,170,194, 42, 63,245, 94,239,187,162, 84, +155,103,253,244,220,212, 90, 55, 36,233, 49,236,191,142, 32,126, 63, 65,168,106,193,228,215,170,188,174, 22, 87, 31, 43, 37,196, +247,250,184,237, 52,104,243,203,232,101,201, 90,171,182, 7, 36,222, 57, 75, 3,154,233,246, 89, 54, 20,119,163,195,134, 47,133, +248,188,161,165, 27,170,131,251, 33,191,251, 38,230,100,199,225, 78, 75,226, 19,128,191,240, 48, 30,107,181, 31, 0, 68, 79, 36, + 95, 55,130,216, 3,200,219, 40,102, 62, 68, 76, 30,178,200, 51,150, 97, 20, 99, 30, 15, 45,213,209,248, 34, 22,230,208,125,200, + 49, 89, 71,172,148,240,163,185,194,213, 9,145,204,187,227,163,150,156,208,121, 76,209, 72,152, 76, 76, 53,195,206, 52,240,210, +144,130,134, 80,111, 26, 54, 63, 97,219, 16, 18,169, 36,215,174,201,181,252, 8,157, 0,217,185, 55,208, 34,200, 79,108, 35, 92, +102,113, 29, 12,110,145, 45, 78,148,245,184,107,182,196,100,240, 23,195, 28, 57, 92, 21, 10, 24, 36, 6,132, 27,138, 70,252,167, +140, 36,222,101, 24,131, 51, 48, 81,220,137,130, 49, 48,180,148,156,216,143,209,196,114, 64,126,195,183,238,218, 45, 3,251,234, +217,216, 9,224, 58,159, 40,196, 53, 85,227, 2,143, 99, 73,120,127, 92, 31,237,214, 67,116,161, 72, 35,205,131,175, 23,117,105, +150,152,124,223,207, 40, 62, 51, 30,245,114,207,153, 18,100,197,145,153,114,195,123,146, 50,243,227,143, 0,164, 93,203, 78,195, + 48, 16,204,230,161,182,162, 1,218,130, 16, 23,224, 6, 31,192,255,255, 6, 8,241, 3, 21,130, 22, 72,147, 54,137,189,120,237, + 93,199,105,194,169,183, 86,141, 34,185,137,199,246,236,236, 76,234,223,101, 53,232,134,135, 99,219,204, 83,212,113,157,188, 9, +130,155,107,235, 76,199, 62,213,178,145, 7, 91, 70,227,222, 67,153,196,244, 10,106,204,136,145,100,190, 21,181, 51,212, 19,111, +180, 99, 51, 57, 63, 73, 92,218,171,103,126, 93,142, 27,165,193,237,234,242,117, 71,142,113,179, 34,122, 90,149, 87,115,245, 93, + 44, 41, 93,202,167,108,163,152, 87,240,114,234,182, 40,172,194,155,232,160, 75, 30,162,204, 30,224,107, 89, 41,189,251, 35, 5, +242,197,241, 91,185, 55,159,111, 33, 51, 3,126,255,218,190,124, 98,213,144, 50,125,145,164, 55,170, 93,255,255,168,112,160, 30, +192,128,177, 81,129,130, 42, 13,200,156,134,234, 1,170,168,218, 77, 70, 49,182, 25,164,121, 62,125,190,152, 30, 40,206,214, 28, +179,241, 44,163,252,166, 6,205,106,143, 31,123,131, 31,102, 37, 32,235,126,243, 79,237,126,155,245, 79, 93, 71, 84, 36, 56,156, + 12,238,206,128, 33, 35,124,135,187,217,236,241, 58,191, 95,206,231,233,228, 97,149,147,169,108, 83,108,203,109,101,205, 1, 23, +211,108, 83, 0,109, 26, 19,135,229, 94, 71,235,233, 5, 62, 79,163,115, 32, 13, 12, 78,134,198, 9,113,119,218,239,204, 90,233, + 6,173,200,114, 1, 5,135, 3, 43, 44, 1, 34,231,103,141, 30,229, 65, 10,219,174, 97,202,193, 19,198, 46,152, 72,138,174, 74, + 32,153,121, 27,232,171,209,161,147, 86,162,223,239,200, 22,222, 49, 42, 4,188,113,239, 65,179,126,134, 26,130,168, 19,141, 72, +121,118,183, 18,223, 4, 91,119,102, 75, 87,123,204,229,196, 12,106,107,234,182,237, 28,132,100, 6,151,164,137,134,214, 78, 52, + 54,201, 57, 79, 46, 19,171, 40, 51,235,214,158, 98, 12, 42,208, 54, 48,214,198,110,162,226, 14, 97, 36, 61,184,185,170,198,134, +148, 51,246, 7, 91,150, 98,224, 81, 60, 70, 31,136,173, 3, 9, 19,116,168, 26, 1, 31,199,198,218,177, 17, 7, 50,115,125,172, +151,128, 97, 97, 19, 71,186, 50, 49, 12, 72,234, 7,130, 56,162, 74,123,123,119, 39,161,234,183,134, 33,244, 97,208, 23,134, 67, +202, 84, 72, 8, 22,200,198, 82, 47,141,172, 73, 98,106, 59,228,233, 75,156,138, 25, 89, 28, 46,226,174,165,173,147,133,219, 16, +120, 81,132,120,209, 9,138, 54,223, 49,120,168,199, 84,118,163,208,255, 39, 0,109, 87,179,147, 48, 16,132,103,183, 11,133,136, + 74,122, 50,241,228,193,151,240,253, 31,193, 39, 48,145, 72, 8, 65, 12,208, 82,186,179,238,204,236, 79, 41,226,197,200,133, 75, + 19,104,187,157,206,126,243,253, 12,249,145,182,231, 30,254, 15,133,126, 72,229,150, 7, 41, 86,121, 21,115, 95, 85,148,174,102, + 64,221,133, 4,108, 12,102, 96,116, 69,196,190, 3, 92,182,137, 86, 63,201,193,172,228,246,201,243,102,152,139, 65,166,228, 78, +191, 29, 54,114, 92, 13,240,186,134,151,201, 87,161,238,142, 86,142, 69, 70, 75, 57,102, 48, 80,251, 67,114, 39,113,250, 56, 0, + 88,128,117,196, 92, 97, 59,200,249,218,178,177,154,128, 54,180, 83,115, 11,139, 55,244,163,184,170,143,216,184, 3,118, 59,196, +134,132, 33, 68,154,148, 63, 92,244,200,148,182, 7,206, 92, 67,198, 84,207, 35, 62,177, 15, 77, 92,229, 91,232, 84, 7,229,190, +168,237,241,126, 68, 4, 32,195,171,137, 99,196,220,186,197,154,134,107, 84, 84,182, 29, 76,199,186,245, 39,110,116,219,158, 62, + 62,155,213,169,219,178, 62,203,254, 13,118,159, 50,193,223, 23,247, 74,153,231,249,236,105, 62, 45, 17, 22,203,189,133,195,251, +154,180, 69,123,219,249,247,156,175, 88, 51, 3,183, 19,127, 23,180, 88, 46, 39, 55, 68, 23,243, 93, 92,138, 4, 66, 81, 32, 14, +138,251, 64,222, 34,105, 69,189, 69, 16,198,143,156, 13, 3,177,121, 15,118, 99,217,188, 47,117,133, 42,242,111, 66,243, 17,251, +242, 80,227, 57, 89, 94,112, 36,129,157,197,207, 58,116,214,204,155,231,245,108,147,147,140, 74, 60,235, 24,148, 70, 70,243, 38, +181,240, 18,108, 68,136, 31,106,117,193, 54, 86, 17,221,214, 65,239,213,239,100,149,203,172,156,248,141,105,252, 10, 17,106, 20, +225,135,128,196, 40,246, 51,244,202, 40, 97, 92,156,236,158,135,126,190, 15,168,166, 85, 61, 46,118, 20, 85,203, 99,135,112,121, +165,198,251,235,197, 42, 17, 39,200,140, 13, 19, 99, 39,211,230,152,195,132,125,213,239, 57,108,166, 88,173, 46, 39,147, 97,116, +200,239, 3, 21, 29,132,127,225,167, 92,208,102,220, 21, 18,165,206,118, 53,131, 97, 0,158,111,172,134, 83, 93,119,105,198,127, +101,111, 65,149, 68,151, 35, 85, 52,182, 45, 98,101,247,157,129,113,162,145,114, 15,213,227,122,179,212,161,190, 27,149,188,244, +201,150, 99,212, 28, 27,201,182,102, 50, 27,211, 6, 53, 25,200, 33, 19,137,104, 58, 2,156, 88,153,189,148,208, 70, 93, 46,230, + 25,225,213,207,183, 0,164,157,205, 78,195, 48, 16,132,189,150, 19,104, 90,126, 36, 36,206, 8, 46,188,255, 3,193,165, 18, 7, +138, 34, 90,112, 27,199,246,226,245,218,137, 3,105, 85, 9,181,135,168, 61, 52,117, 35,119,119, 51,243, 77,226,207,244,211,102, + 7,127,197, 24,255,169, 40,225,140, 91,187,112,242, 5,152, 59,134,209,213, 13,165,137, 4, 51,169, 35,194,100,210,131,237, 16, + 40, 74,115,194, 9, 55, 64,246, 88, 37, 25,142,212,110,255, 78, 19,136,241,202,184, 23,254,122,185,248, 54, 99, 39,151,140,181, + 30,135, 20,169, 52, 51,138,227,252, 90,104, 71,214,108, 66,236, 70,217,159,236,104, 67, 7,150,186, 99, 74, 31,149, 13,233,208, +253,139,119,113,126, 18,118, 85,219, 58,187,241,126, 75,249,196,162,150,100,128,218,228, 49, 75, 21, 71,213,254,200,165, 61,243, +149,242, 2, 86, 83, 4,199, 48, 37,112, 57,238, 56,156,164, 54,222, 56,223,153,190, 53, 94,247,182,183,132,253,166, 68,113, 8, + 37,153,248,114,206, 56,177,219,155,245,206,188, 9, 90, 26,243,143,225, 12,135, 2, 54,145,132,243,188,104,158,110, 86,173,182, +235, 86,127,106, 99,173, 59, 80, 10,160, 57,244,246, 67,155,112,220,121,119,219,200,122, 81,191,182,138,221, 63,209, 13,153, 76, +112,254, 87,241,158,194, 61, 5,140, 96,210,249,139, 13,166, 88,164,177,106,202,118,161,162, 65,158,148,108,232, 75, 5,204, 96, +163,199, 81,232, 56,196,186,179,246, 92, 22,101, 69,230, 52,225, 16,121, 90,120,170, 10,124, 1,187,170, 51,100, 38, 7, 25, 99, +166,162, 74, 28,186,197,169,244,174,120,114, 95,201, 3,112, 70, 95, 37,143, 23, 20,160,122,166,114, 59,206, 76,130,196, 81, 41, + 2,226, 34,230,168, 38,241, 35,218,131,235, 28,241,220,113, 9,170, 67, 67,218, 71,154,198,216,104,247,234,137, 51, 99, 13,109, +238, 68,188,118, 20,219, 4,252, 81,158, 93,132, 69,135, 94,118, 46,144, 19, 63,211,210, 96,185,236, 88,202,131,161,248, 63, 24, + 12,183, 32,102,252,101,120,206, 77,193, 51,222,194, 57,157,200, 41,237,140,156,108,238,200,105,184, 52, 76,136, 64, 80, 9,170, + 34,237,145, 82,149,170,136, 80, 91,153,174, 83, 82,133,215,227,255,105,188, 91,157,230,169,212,170,133, 22, 54,148,246,225,135, +111, 46, 87, 97,217, 21, 19,110,145,211, 73,225,162,106, 32, 69, 17,224, 80,254, 62,220, 61,110,247, 45,111,142, 87,213, 85,228, + 77, 30, 61,225, 31, 1, 24,187,142,165,134, 97, 32,170,234, 16, 19,202,112,224,200, 39,240,255, 23,254,133,129, 11, 12,101,128, + 16,136,139, 86,104,139,100,197, 3, 36,158,220,237,216,210,106,203, 43,110,111,207,254,143,190,205,127, 66,193, 7,102,241,102, + 78, 19,136, 21, 35,129, 13,116,162,158,204,148,233, 95, 34, 22,222, 48, 72,129, 41, 78,210,157,141,145,231, 41,251,138,134,204, + 88, 65,126, 62,171,196, 76,215, 85,219, 60,246, 62, 45, 94, 71, 96,235,108,198,137,234, 68,144,251, 51,154,157,183, 36,147, 51, +167, 86, 63,245,146,122, 3,234,207,136, 0,100,157,197,123,163, 58, 52,165, 67,160,225, 67,213, 13,243,100,114,221,166, 67,188, + 71,178, 73,172,104, 80,182,122, 51,225,183,208, 9,179, 73, 83, 5,141,103, 13, 94, 66,172,199, 53,230,224,195,102,192,254,237, +210,165,227, 36,158,145, 24,239, 38, 0,201,123,161,219,170,183,168, 19, 48,104, 56,247,102,211,245,235,174,223,144,115,115,200, +110, 83,123,107,192, 95,131,251,146,126,151,202, 92,159,158,124, 3,220, 60,191,166,231,185, 80,118, 12, 38, 4,135,228,120,210, +218, 90,208, 32,233,216,171,179,133,191,127,115,221,168,210, 10, 7,202, 15, 41, 86,177, 85,118, 44,184, 38,238,187,234,162, 81, +149,211,177,154,124,103,230,159,189,132, 18,110,197,228, 4, 83,103, 41,186, 88,250, 38, 50,254, 43, 65, 54, 76, 53,121,101,197, + 83,146,125,157,203, 70, 16, 47, 39,109, 76,156,240,221,145, 21,232, 72, 29,172, 88, 8, 74,108,207,133, 0,173,102, 44, 68,153, +168,100, 35, 55, 0,180, 52,245, 77,156,111,222, 88, 81,151, 69, 6, 89,192,238, 32,222, 23,187,248, 34,140,236, 34,118, 22,119, +219, 32, 70, 96,151, 38,244,122,187,178, 43,213,125,245, 56,154, 24,186,254, 99, 28,155,246,104,241,174,183,192,195, 85,226,188, +210,215,160, 61, 8,196, 37,214,108,199, 6,188,159,138,155, 26, 76,211,105,144,182,135,154,168,169,197, 35,187, 82, 15,150,178, + 9,114, 6, 22, 97, 58,146,243, 80,182, 78,231,119, 96,172, 7, 35, 63,244,255, 52,165, 67,130,187,174,210,118, 37,227, 67, 77, +192, 24, 4, 65,226,208,221, 56,111, 44, 42, 85,162,230, 2, 38,163, 77,179, 48, 96,143, 92,211,186,182,181,173,183, 13,194, 2, +152, 67,165,144, 33,214,141, 91,156,136,162,188, 79, 58, 59, 81,105, 63,216,180, 18, 92,170,245,129,244,103, 60,114,227,229, 40, + 79, 55,191,123,185,197,187,209,171,248, 28,214,122,151, 25, 51,187,126, 4, 96,236, 90,118, 26,134,129,160,215, 78, 83,104, 11, +170, 56,130, 16, 71, 78,252,255, 55,112,231, 31, 56,241, 16, 42, 77, 19, 63, 22,239,174,237, 56,164, 45,156,171, 70, 81, 90, 79, +118,103,118,103,154,249,187, 14,142,129,227, 28,229,195,233, 4,144,255, 11,208,179,167, 94, 32, 30, 96,108,147, 48, 41,243,217, +237, 84,139, 77, 24,228,108, 46, 93,204,152,181,202,185,172,161,222,149, 43, 75,167,133,244,138,101,114,179,120, 10,151,235, 96, +173,194, 3,226,182, 93,188,251,235,207,222,113,120,172,198,178,115,160,146, 10, 86, 48,148,130,159,148, 22, 3, 63,195, 5, 56, +209,238, 33, 81,225,236,120, 51,242, 36, 3,119,157, 13,227,165,103,183,153, 38,155,161,175, 77, 4,247,230,126,179,124,251,136, +199, 42, 73,178,109, 54, 23,131,211,196, 72,152,182, 89,237, 52, 27, 79,190,216,229,185,154,129,212, 84,154,115,191, 10,216, 54, +122, 96,169, 48, 62,184, 29,239, 29,182,100,117, 24, 91, 71, 88,106, 8,206,247,214,117,206,147, 54,155,241, 29, 43,190, 46,252, +227, 0,201,205,172,216, 3,231,193,152,199,237,230,101,223, 63,119,135,144, 62,242, 20, 32,225,136,182,234,185,209,105, 21,182, + 0, 27, 99, 60,224,235,142,126, 99,207, 68,178, 56, 75, 72,165, 94, 91,195, 96, 80, 56,179, 71,146, 23,253,175,225,209,217,155, + 29, 36,236, 56, 77, 89,170, 90, 78,195,217, 41, 14,117, 87, 32,245, 3,105,170, 90,193,164,173, 31,249,229, 2,244,213, 18, 85, +252,203,165, 69, 58,204,105,216, 96,138, 56,200, 82,146,188, 22,216, 79,203,199,203,179,241,157,164,116, 67, 90,207, 57, 54,138, + 50,189,185, 82,222,162,112,241,169,108,167, 44, 99,201, 73, 3,133,211, 22,135, 19,160, 10,101,229,212, 62,118,179, 26,175,150, +107,176,148,115,211, 68,200,215, 97,231,190, 61, 72,149,131,217,130,216,103,131, 25, 79, 60, 31,207, 29,166,198, 24,106, 94,184, +120, 65,148,121,211,128,170,230,169, 96,220, 46,202,224,238, 43,187,250, 92,188,143,115,144,117, 90, 19,158, 0,119,252,187,164, + 60, 15, 71,231, 57,153, 26,220,147,207,191,204, 78,113,234,103,195,206,254, 82,179,115, 40, 28,241, 54,139,213,226,226,110,117, +187,109,111,180,214,131,179, 61,109,197,198,246,149, 20, 84,195, 12,215,165,185,184, 89,109, 35,244,199, 11,117,155,225, 16,186, +222,245, 95,246,171,179,253,183,219, 91,127,176, 20,141,203, 46,140,217, 60, 14,210,198,178,230,131,233,100, 2,103,244,187,158, +222,244,143, 0,148, 93, 93, 79,227, 48, 16,180,215,113,154, 22,161, 10,113,119,226,245,196, 11,255,255,153,255,129,196, 47, 0, + 33,116, 39, 33, 53,132,218,235,219, 15,111, 29, 82, 40, 92, 31, 83,169, 82,154,120, 61,158,157,157,233, 78,255, 13,254,168,202, +135,165, 2,210,127,135,103,255, 38, 29,239,170,211,153, 55, 58, 5, 76, 22,111, 16,190, 78, 92,103,218, 30, 45, 20, 19, 61,214, +209, 5,206,223,244,144, 62, 74, 78, 57, 36,103,214, 25, 12, 96,201,194,159,254,140,222,149, 31,145,190, 10,143,180,184, 38,122, + 74,217, 55,102,176,102, 6,233,225, 23,172, 31,207, 83, 39, 2,140,222,228,202,224,107, 19,178,179,172, 81,181,226,210, 68,105, +241, 90,193, 11,215,137,192,134, 63,189,148,191, 1,220, 54,194,213,121,252,189,137,247, 79,187, 94, 10, 98,154,205, 43, 77,182, + 51,229,175, 21, 81,245,184, 16,108,217,107,107,119,108, 81, 33,101,164, 59,166, 27, 78,101, 15, 33, 6,214,116,174,144, 7, 3, +214,220,181, 22, 57,136, 75,187,132,227, 91,254,235,178,102,198,238,222,187,158,157,134,240,222,148,154, 74,203,208,189,220,196, +225,250, 98,125,251,252,114, 39,234, 32, 61, 42,189,200, 94, 76, 91,206,192, 34,187, 66,160,101,237,202,166,248, 75, 7, 15, 83, +255,154, 25,243, 72,241, 0,105,169,112,121, 82,120,120, 32,103,230,149,202,207,130,231, 45, 73,233,227,183,174, 14,205, 41,119, +130,206,189,239,172, 30,203,180,221,146, 26, 22,192,205, 59, 99, 93, 87,138, 49,218, 28, 83,147,122, 89,138,118,157,246,241, 85, +112, 5,154,162, 83, 66,245,201,115, 26,255,165, 22,145,152, 51, 97, 62,121,145,169,186,107, 16, 29, 20,143,159,105, 67,102, 21, +179,117,167, 26,251,174,176,221,124,146,209, 53, 85,127, 89,246,189, 88,144, 41,225,221,110, 76,227, 4, 19, 1, 23,246, 72,103, + 63, 23,212, 60, 39,253,139,100, 10, 84,171,188, 56,253, 8,144, 71,165,229,237,215,173, 27, 44,218,131, 10,213,209, 28, 68,252, +130, 11,177,114,143, 85,229, 83, 74,139,163,106,110,239,166, 14,154, 25,123, 90,107,249, 20,193,242,255, 64,179,124, 21,158,115, +156, 32,196, 87,162,108,215,244, 68,135,126, 64, 68,166,101, 36, 1, 8,124,247,107,184,252,185,185, 90,193,138, 30,244, 72, 71, +232,156,247,108, 93, 89, 14,153,146,123, 36,224,149,164,125,135, 84,250, 99, 8, 66,179, 65,135,113, 11,219,117, 55,249, 28, 75, + 88,141,233,117,244, 28, 23,154, 92, 18,120,164,224,199,206,106, 46,168,220, 4, 44, 9,118,177, 66,255, 9,192,216,181,237,182, + 13,195, 80, 81, 78, 29, 39, 43,234,118,216,211,222, 7, 12,216,190,123,255,213, 14,123, 40, 90, 20,201, 46,137, 44, 75,226, 68, + 82,183,214,109,210, 32, 15,129,145,216,130, 29, 81,212,225,225, 57,175,227,239, 39,246, 54,248, 18,145,135,119, 67,240,240,158, +175, 65, 3, 52, 66,193, 38, 23, 23,203,123,232,106,188, 42, 49,119,221,175,227, 50, 9, 0, 13,232, 89,223, 40,219, 93,144, 84, +159,126,100, 64,239, 60, 24,241,152,140, 15, 74,103,218, 3,168,106,243,153,167, 84,154, 81,108, 59, 25, 31,213,160,237, 58,196, + 21, 89,246,209, 20,194, 36,239, 62,102,152,165,207,132,214,173,238, 98,194,126,159, 51, 47,202,250, 81,141, 29,140,208,253,218, +217,159,222,247, 28,247, 47, 73, 17,158,134,110, 50, 31,166,123,142,213,188, 85, 98,109,197, 35,229,181,205, 49,119,197,103,222, + 8,187, 22,195, 62, 40,195, 93, 49, 27,238,174,235,180,196, 71,176, 14, 31,103,255,164,220, 31,110,127,157,242, 34,209,202,197, +168,215, 36,170, 11, 73,102, 96, 64,166,103, 95,145,239,253,240,229,227,135, 31, 15, 79,183,188, 61,239,154,191,157,232, 19, 76, + 10,127,243, 28,118,212, 28,128,159,175,135, 59,179,241, 34, 3,135, 82,255, 67, 46, 99,251, 84, 47, 44,168, 71,110, 67, 66,213, + 98,200,181, 73, 6,159,235,128,135, 66, 8,148,254,166,202, 51, 89,222, 85, 72,138,147,112, 34, 31,132, 66, 91, 76,107, 3,234, +134,150,171,219,112, 83,196,194, 11, 82,159, 10,176,161,248, 88,230, 96, 1,201,134,140,174,173,235, 60, 43,190, 79,141,152,109, + 51,118, 57, 92,108, 47, 42, 73,198,167, 76,168,202,126,156, 1,162,169, 69,143, 3,178, 39,160,208, 57,174,106, 39, 96,157, 79, + 72,155,157,192,210,170, 12,238,139, 72, 31,134,134,112,153, 32, 39,121, 94,170, 34,241,184,100,245, 65,161,133,168,100,114,142, + 89, 25,158,201,150,170,154, 82, 97,181, 69, 44,193,221,171,183,189, 53,194,185, 80,223,212, 14, 49,156, 13, 76,139,224,174,114, +206,222, 17,142, 72, 61,190, 49, 85,143,161,121,220,220,132,217, 93, 16,123, 67,143,195,213,183,241,235,205,250,211, 63,107,246, + 36,121, 52, 89,111,231, 48, 31, 98,234, 78,164, 16, 25,165,103,249,231, 36,191, 19,239,230,193, 91,235,103,235,166, 57,196,204, +253,120,244,230,175, 59, 24, 55,237,113,103,212,129, 72,125, 68,187, 92,101,190,124,167, 26, 27,153,101, 15, 83,249,252, 95, 0, +206,174,101,167, 97, 24, 8,174,157, 71, 31,128, 56, 84,149, 64,226,140,196, 63,243, 73,252, 2, 7,196,137, 3, 2, 81,148, 54, + 73, 99,227, 89,175,157, 77, 91, 16, 32, 85, 61,229,208,196,174, 51, 59, 59, 59, 83,254, 67,244,162, 81,188,159,196, 10,255,140, +205,127,203,215, 43, 8, 47, 21,172, 77,254, 27, 82,213, 70, 23,118, 49,213, 48, 98, 99,195, 21,247,250,242,250,169,125, 28,212, +192,179,190,121,235, 84, 63, 22, 9,217, 16,127,149, 81, 90,195,185, 75,252, 54,133,120,182,176,131,115, 88, 60,107,147,123, 60, + 73,161, 59, 68, 26,136, 93,104,248, 15,138,249,201, 93,154,166,171, 24,249,118,156,242,193, 3,174, 46,212, 86,225, 21,114, 91, +207,235,174,125, 64,155, 19, 7, 40, 34,167, 91,247,220,130,184, 56,195,249,104,150,248,148, 27,218,119,200,172,151,148,143,236, +202,235,191,193,206, 58, 22,160, 77,115,179, 46, 14,214,166, 14,103,197, 35,237,225,225, 45,200, 46,249,233, 6,204,190, 67,119, +215,118,172,169,168,201,127, 58,122,167,253, 22, 89,108, 18, 42, 66,202,107, 62,207, 33,231, 18,193, 43,133,126,173,186,169,231, + 68,119,243,229,234,162,186,127,121,221, 40, 90,176, 87, 37, 96,147, 94, 60,251,148, 17,216,216,121, 51, 32,210,200,187, 76,194, + 74,248,173,216,196,104,219,148,163,134,192, 49,132,215,120,210,144, 75,230, 91,222,103, 30, 24,104,116,156, 31, 29,249, 39, 67, + 39, 71, 19,143,133, 19,194, 98, 35, 38, 53,101, 85, 48, 92,159,202, 55, 18, 5,193,163, 70,177,208,196,241, 30, 81,188,140,122, +112,184, 54,108,144, 92, 0,207,236, 78, 29,211, 89, 99,198,170,112, 99, 94, 43,226,105, 34,145, 83,172, 35, 66,172,134,145,222, +159,248,172,153,113, 41,157, 30,180,225, 43,123,246,246, 50,121,229,193,177,251,104, 12, 98, 76, 50,119,195, 72, 25, 73, 7, 55, +194,118,177,250, 75,220,134, 31,233,148,131,147, 93, 91,208, 36,185, 42,187,252,229, 56, 39, 81,210,171,195,221,100, 65, 78,146, +193, 28, 32,119,255, 55, 12,174,183,140,167,223, 54, 15, 79, 28,238, 22,117,102, 17, 51,161, 10, 91,133,239,221,182, 9,152,221, +216,242,106,113,179, 94,172, 62,250,221,166,125, 99,195,100,106,120,101,227,190, 46,216,151, 48, 41, 98,113,195,192,228, 97,221, + 13,156,219,194, 85, 85, 1,122,184,167,161, 67,146,162,169,108, 93,187, 89,231,187,129,250,158,250,176,105,102, 84,151, 16, 80, + 34, 7,151, 17, 70, 97, 68, 81,227,104,250, 88,226,207,254, 18,128,178,107,233, 73, 32, 6,194,211,238, 11, 65, 30, 27, 19, 19, + 36, 94,188, 17,163,255,217, 31,231,193, 11,106, 34,226,190, 58,210,153,206,108, 23, 1,245,194,149,165,192,244,235,215,239,209, +227,247, 63, 8, 96,142,139, 94,224, 55, 57,205,121, 20,127,234, 93, 34, 71, 0,183,115,170,165,195,246,137,107,214,105,168, 20, + 71,240,189,110, 55,230,192,218, 26,253,166,226, 31,123, 18, 50, 91,195,105,157, 60,146, 56, 27,185,229,188, 94,149,245,114,222, + 45, 22, 30,232,110,119, 22, 76,175,131,224,141,225,106,122,221, 52,141,117,159, 85,211, 2, 91, 69,232,143, 88,203,245, 38,134, + 81, 27,136, 0,218, 57,204, 93, 49, 90,103, 69,213,182,111,148, 97,192, 72,118, 1,176,132,244,214,100, 55,105,182,127,168,212, +251, 2,123,195, 12,246,181,141,231, 98, 66, 19,153,191,181,100,156,153, 72, 49,169, 76,122, 27,132,222,248, 69,146,139, 10,221, +206,171, 38,252,181, 78, 5,221, 22,112, 35,148,142, 22,127, 39,194, 82, 41,251,148, 10,107,164,168,252,130, 62,236,140,144,251, +227,120,178, 42,243,167,151,247,143, 40,216,242, 32,252,210,201, 42,213,244,168, 15,227,236, 25,167, 45, 95,147,107,204,180,106, + 31,195, 4,225,111, 48,160,235,232,212,114, 4,194, 71,182, 38, 68,173,107,160, 74, 95,132,152, 3,136,205, 68,161,244, 3, 15, +183, 81, 28,240,154,118,208,152,101,142,128,122,217,113, 84,223, 3, 86, 19, 7, 6,199,222, 30,197,171, 89,149, 78,152, 22, 85, +137, 76,123, 2,234,178,196, 80,125,112, 19,104,100, 22, 58,148, 80, 73,136,250, 44,251,101, 87, 87,100,204,129,200,117, 40,175, +149, 67,166, 12, 66, 63,109,120,117, 68,155,249,136, 97,177, 20,243,137, 66,244,169, 76,227,196,101,124, 56,156,194, 76,200, 27, + 85,184,163, 92, 86,128,184,200, 36, 17, 70,239, 71, 56, 78, 62, 30,238,186, 48,208, 13, 50, 12,240, 64, 98,112,234,206,223,252, + 91, 16,242,115,184,115,245,155,151,185,164, 38,219,227,247, 61,102,207,124,152, 19, 92,230,211,117,121, 95, 22,115,154,223, 48, + 41,198, 69,146,102,150, 25, 28,207,108,101,164,105,167,246, 68,103,101,154,176,246,198,121, 13,155,201,165,226,164,193, 46,152, +111, 61, 90, 79,118,190, 32, 17,153,238,239, 72, 49,153, 67,238, 9,106,194,193,234, 12,141,242,195,141,146,152,223, 2, 48,118, + 53, 61, 9, 3, 65,116,167, 31, 43, 8, 42, 9,225,134,137,158,253, 27,254, 67,127,159, 7, 79,106, 2,137, 81,160,197,118,118, +220,153,221,217, 22, 10,234,149,164, 41,109,183,179,175,111,222,155,247,183,126, 6, 78,225,113, 26,144, 54,166,119,247,135, 3, +151,206,161,248,127,132,139,170,146, 1, 66,189, 16,159,116, 84, 63, 7,250, 67,222,130, 76,125,124, 17,155, 17,100,112,194, 56, +145,246, 13, 33,177, 56,186, 40,247, 55,206, 58,196,155, 49,221,206,154,134,218,106,135,239, 91,243,213,154,137,109,150, 11,115, + 51, 42,158, 95, 17,212,157, 16,190, 67, 87,159,111,254,208,107,112, 50,167,131,113,225, 78,242, 61, 2, 52, 26, 75,129,254,142, +111, 40,171,156, 61,178,174,233,187,222,227, 44,183,143,179,249,196,218,157,195, 85,181, 71,164,105, 9, 83, 91,248, 43,250,172, +247,213,110,255, 33, 34,156, 86, 61, 29,141,174,203,223,239, 82, 26, 61,159,247, 50,198,242,158,216,198, 9, 37, 82, 27,248, 50, +110,100,224, 90,126,110,181,159, 21,236,196, 86,202,116, 43,252, 82,217,155, 24,147, 56, 34,167,103, 65,169,233,133, 98,249,137, +214,247,135,241,228,126, 49,122,122, 89,111,180, 15,225,206,116,101,211,229,248,147,214,229,101,133,156,181,157, 76,238, 49, 60, + 58,146,185, 9,136, 75, 28,203,209,202, 57,134,240,169,241, 40,164,110,170, 92, 24,205,147,166,155, 61, 73,135,101,232,104, 20, + 45,116,181,169,111,157, 58,148, 19,233, 71, 98,162, 65,210,131,194, 48,132,140,185,155,204,245,124, 48,221,236, 13, 65,241,134, + 95, 82,202, 29,132, 4, 39, 94,188, 33,132, 73,251, 0,240,155,186, 67, 85,237,226, 45, 5,205,167,232, 20, 9,166,203,135,137, + 60,184, 51,208,183, 21,165, 63, 60,112,207, 57, 74, 91, 72,232,118,118, 44, 82,148, 96,106, 54,134, 59, 8, 27, 63,133,217, 41, +226,244,168,197, 59,240, 31, 5,178, 34, 53, 84, 13, 82, 34,122,122,197, 29, 99,177,139, 71,181,157,130, 40,109,124,103, 87,154, + 25, 60, 58, 24,200,190,233,239,226, 78,226, 93,226, 46,138, 20,119, 78,110, 46, 88,211,110, 51,150, 90,208,237,213,114, 57,189, +187,128,108,211,122,204, 87,215, 18, 72,235,235,108,145,151,182, 44,243,166,222, 82,229,152,209,149, 57,150, 20,108, 51,113, 51, + 67,199, 11, 53,231, 14,140,216, 37, 4, 13,162,218,147,125, 41, 95,192,124, 77,235,214, 96, 41,121,107,193,192, 80,154,139,113, +230,203,200, 6,120,216, 14, 99, 48,212,136, 18,229,112,248, 52, 63, 2,112,118,109,173, 9,195, 96,180, 95,162,173,171, 55, 38, +142,237, 97,131, 33,178,151,189,236, 23,239,207, 13,198, 16,209, 33, 86,147,182, 73,150,219,151,166,213,141, 50,159, 68, 68, 45, +109,191, 28, 79,206,229, 47,252,222, 27,185,247, 18,200, 67, 15, 34,190,109, 28,104, 21,159,130, 87,193, 55,188, 16,222, 96,161, +228, 0,111, 35, 18, 94,247,106, 43,213,138,233,199,197,193,154, 8,244,200,200,179,250,126, 94, 79,210,170,100, 66, 79, 38, 19, +132, 34,146, 67, 45, 79,165,100, 60,121, 88, 82, 81,209, 35,119, 46,110, 63,124, 76, 96, 5, 85, 55, 9,231, 85,194, 76,204,146, +241,139,214,134,121, 80, 34, 98,171,105, 36,231,200,236, 85,114, 84,114,195,216,103,193, 38,131,193,235,221,116,189,156, 45, 38, +122,196, 37,187,130,127,159,248, 94,214,133,109, 87, 42, 45,137, 17,178, 1,122,154,140,104,100,113, 74,162,248,154, 80, 77,144, +162,251, 78,224, 28,183, 16, 64, 89,179,171,249, 82, 71,253,199,104, 93,226, 19,138,224, 61, 0,240, 12, 35, 7,198,118, 67,245, +113, 56,122,123,154,191,127,108,191,164,225,226,225, 23,203, 73,231,177, 2, 56, 15,111,125,239, 33, 1,159,172, 98,213,124, 38, +207,202,172,219,194,166, 11,133,152, 63,247,201, 77, 64, 81,167,238, 14, 71,140,196, 69,221,115, 11,246,196,139,208,240,215, 25, +238, 77, 15, 88,196, 0,168,164, 95,183,130,106,208, 61,180,185, 80,229,212, 93, 16,109, 30,121, 50,208, 92,223,190, 6,155, 56, +251, 29,174, 42,128,138, 79, 66,174,150,237, 66,104,145, 53,182,152,160, 68,108,156,159,113,201, 44,234,122,189,121, 20, 90, 12, +173,186,162, 3, 82, 46,231, 32,194,203, 16, 68,243, 49, 61,162,218,139, 76, 71,188,225,233,117,107, 82,181,187,179,173,200,100, + 21, 74,113,149,108,224, 57,120, 75,113, 7,185,131,112,125, 91, 23,204,131,138,182, 19,255, 97,193,187,172,206, 32, 23, 35, 8, +255, 20, 26,145, 59,177, 19, 73,143,117,170, 97, 59,161, 67,162, 97,123, 58, 48,231, 72,173,231, 47,171,217,179, 62,218,253,105, +183, 57,110,182,167,237,129, 31,206,101,193,196,153,215,140,137,146, 0, 25,209, 76,255,252,179,172,109, 68, 40,238, 18,251, 61, + 6, 83,210, 41,124,127,141,139,106,147,149, 6,241,216, 45, 67, 9, 25, 37,121,101,149, 16,122,220,231, 48,158, 12,166,139,116, +150,147, 92,191,159,171, 18, 43,243, 26,215, 11,162, 9,248, 17,128,181,171,233, 73, 24, 8,162,187, 45,109,193, 30,138,146,200, +193,131, 55,227,221,255, 31,239,254, 11, 15, 68, 37,193, 16,144, 82,186, 95,238,236,204,108, 63, 48,193, 24,111, 28,104,105,182, +203,236,155, 55,243,222,252,133,127, 31,161,248,228,167,174, 27,199, 67,248,206, 71, 89,254,134,136, 39,163,130,142, 31,164,217, +140,134,166, 89, 58,215,171,209, 72,114, 88, 74, 80, 47,152, 24,150,143, 16,123,137,163,159, 44, 76,211, 78, 28,146, 98,216,102, + 55,159,185, 5, 44,145,109, 26, 32,160, 81, 46,233, 79,222,214,136, 90,133,184, 38,245,234,179,189, 95,230,111, 91,155,102, 20, + 46,131, 47,132,191, 75,123, 80,226, 8,170, 37,216,251, 13,106,191, 25,116,231, 61,244,141, 75,124, 8, 36,120, 38,204, 86,164, +141, 56,189,239,212,203,110, 59, 7,117,171,191, 22,209, 39, 60, 84,139,202,247, 80,174,172,135,235,124,209, 64,216, 50,109,130, +179, 91,163, 84, 42,102,166,138, 90,169,224, 97,142,193,130, 70, 7,166,168, 13, 61,157, 1,227,195,239, 90, 14,253,121,207,212, + 87, 51, 81, 51,227,188,207, 49,138,247, 9,193, 82, 76,158,238,170,231,205,238, 85,187,156,183,132,190,100, 60,233,175, 45,167, +229,222,248, 29, 76,212,173, 9,135,184, 63,114,246,106, 83,235,227,162, 40, 13,152,114,178,158,117, 56, 97,121,212,216,195,237, +178, 76,221, 98, 93, 80,146, 1, 87,200,130,165, 27,119, 94,139,104, 72,192, 36,183, 29,160, 91, 27, 3,165, 27, 41, 92,236, 48, + 40, 36, 72,195, 81, 47,145,235,193,121, 77,185,181, 32,238, 36,136, 66,193,104, 64, 82, 78, 72,142, 82, 82, 50,102,193,201,113, +218, 98, 14,138,254,253, 1,239, 89,164,195, 7,197, 5, 84,125, 70,110,132,249, 36, 77,180, 13, 75,249,221, 88, 21, 55,250,195, + 98, 26,192,230,125,182,243,200,103, 11,179,174, 73,129,168,162, 17, 3, 46,123,101, 85,199,152, 29, 1,187,236,163,117, 97,105, + 81, 59,160,214,205, 68,103,209,114, 23,220,205,185,245, 74,132,237,246, 63,108,171,227, 82, 68,159,237,248,150, 29, 36,229, 73, +104,126,146, 76,203, 32,108,135,248,158,192,100,133,244, 97,254,120, 59,189, 81,230,180,218,125,172,235,245,151,170, 29, 24,200, +184, 76,230,133, 3, 51,146, 73, 98,148,105,253,247,139,116,118, 53,201,253,103,144,222,115,107, 16,206, 21, 11,201,166, 38, 31, + 81,168, 19, 65,232,215,192, 83,160, 47,132, 77, 69,122, 35,171, 70,168, 76, 22,101, 81, 93, 23, 85, 57,153,130,220,172,246,177, +171,209, 66,133, 38,109, 92, 19,139,181, 29,124, 89,223, 2,144,118, 62, 59,109,196, 64, 24,247,216,251, 47, 1,132, 82, 81,169, +226,202, 1, 9,222,255, 37,120, 6, 14, 61, 21, 65, 43, 82, 68, 67,214, 89,219,211,157,177,199,235,221, 72, 20,212, 91, 14, 81, + 86,177,189,159, 71,223,204,252,166,250,255,165,241, 69,133,156, 58,170,165,195,130,206,243, 25,137,199,163,219, 69,226, 15, 86, +121, 62,114,122, 58, 89, 98, 78, 38,126, 44, 83,160,200, 47, 35, 91, 39,108,221,254, 91,171, 78, 76,187,181,164, 36, 14,160, 49, +227,173, 75,109,147,207,175,212, 25, 92,177, 77,246, 76,140,119, 2,189,143,155, 73, 68,114, 36, 72,135,183,238,226, 84, 95,126, +241,143,191, 85,109, 18, 18,103,240,254,188,117, 63,246, 99,180, 11,107,214, 74,224,218,246, 92, 35,216,139, 65, 17,175, 4,155, +156,113,100, 22, 60,161, 61, 28,131, 22,182,244,121,148,123,215,114, 37, 73, 4,218,237, 37,148,206, 13, 7,248,153,141, 8, 69, + 1,184, 22,129, 94, 21, 12,247, 21,239,200,129, 30, 68,217,224, 54,157,102,158,173,192, 66,191,227,239, 7,225, 95, 70,193,107, +197,223,143,170, 29,165, 63, 22,204,108,148,185,186, 88,217, 14,239,190,191,113, 58,119, 54,183,228,157, 55,240,218, 40,171, 79, + 2,143,223, 20,183,152,196,253,165,127,184,183,244,111,234,195,174, 89,175, 53, 84,115,183, 97,209,190,136, 83,110, 20,197, 8, + 78, 87,120,193,222,146, 89,119,165,178,163, 52, 9,197, 9,190,101, 47,107,254, 81, 92, 86, 70, 47,162,200, 73, 50,117, 20,133, + 88, 69, 98,100,252, 94,194, 40, 9,118, 70, 37,147,149,110, 98,140,220, 95,206,108,194,212, 20,175, 51,126, 24,229, 76,164, 93, +128,194,226,159,229, 42, 75,194, 26, 63, 63,148,202, 62,119, 71,151, 67, 36, 66,226,231,138,140,179, 39, 22,225, 99, 71, 76, 43, + 88, 90,255, 83,226, 84, 0, 80, 65,189,163,236,229, 98,102,101,207,163,125,242,180, 92, 76,197,145, 30,114, 35,171, 40,251, 24, + 59, 67,224,130,158,127, 25, 44, 52, 53,211,116,189,239, 63,104,187,195,188,112,128,223, 62,157,135, 68, 82,111,170,166,130,153, + 10,234, 90,215, 21,245, 33,193,205,230,118,211,156, 31,130,255,249,250,235,105,247,240, 50,252, 25,148, 77, 94, 50, 66, 3, 45, +196,110, 25,196,222, 29, 44,169,124,219,128,217,171, 56, 18,148,247, 66,168, 65, 9,138,206, 65,122, 26, 35, 10, 9,236, 28,208, + 57, 94,138, 14,234,211,230,108,211,125,237,170,174, 54,218, 14,126,112,142,211,173, 30,151, 9,137,132,233,250, 43, 0,101, 87, +211,147, 48, 16, 68,103,233, 82,208,164, 96, 15, 24, 19, 79,198,120,240,226,255,255, 13,254, 15, 14, 26, 67,160, 86,186,173,237, +142, 59, 59,251, 85, 44, 26,184, 2,129,126,189,157,125,243,230, 61,121, 17,148,139,243, 82,152, 20,232, 97, 60,113,147,106,108, +254,198,117,140,156, 12, 21,197,242, 52,240, 24,163, 51,147,243,248,141, 60,108,204, 54,242,149,133, 5,122, 80, 3, 73, 86,182, + 45,188, 20,196,125,153,211, 87, 74,188, 93,232, 67,213, 31, 7,171, 60, 66, 88, 72,194,181,198,154,198,206,169,115, 65,155,168, +206,118,169,235, 14,190, 58,253,124,191,217,238,222,100,198,191,107,106,118, 61,124,235,154, 34, 39,221, 56, 99,155,140,251,178, + 86, 68, 89, 76,204, 60,179,129, 78, 23, 72, 19, 61, 33, 33, 83, 17,197, 49,228,177,200, 37, 44, 96,167,223,254,242, 84,188,147, + 68, 39, 57,230,109, 2, 11, 57,112,118, 18,196,104,192,156, 37,146,128, 87,190,108,233,147, 43,213, 36,177, 80,215,246,143,133, +180, 88,179,219, 40, 40,113, 80,222,109,138,215,170, 42,103, 54,252,214,174, 16,169,106,115, 82,194, 95, 2,172,151,229,142,204, +196,180,107,220,216, 71,191,109,247, 12,238, 79,166,186,151,179, 86,100,152,108,168,197,212,241, 58, 15, 85,107,244, 29,217,118, +215, 54, 15,108,195,104, 90, 50, 48,226,236, 37, 25,108, 14, 48,189, 19, 53, 8,136,222, 70,255,178,151,236, 7, 50,243,126,193, + 12, 92, 97,143,143,232,114, 75,156, 45,152,224,197,198,198,210,216, 65,143,224, 96,230, 88,106, 79, 70,226,175,153, 75,156,150, +244,132,101,128,137,166, 19,100, 23,167, 62, 93,254,188,185, 34,217,151,147,144,246, 39,226,232,193,196, 65,135,213, 81, 7, 88, +135, 1, 68, 34,120, 79, 26, 24, 56,170,187, 81, 36,200,238,167, 93, 48, 44, 39,190,217, 11,169, 51,140,247,195, 28,112, 34, 30, +111,250,213, 97,123,174,149,120, 78,185,151,176,243,110, 47,120,179, 92, 53,170,177,106, 25,105,202,100, 6,119, 3,247, 15,171, +199, 85, 94,152, 15,212,234,240,126,252,168, 8,220, 21, 71, 79, 51,124,153,175,204, 37, 45, 6, 54,236,153,228,143,104,158, 57, + 82, 74, 11, 50,126, 16,206,163,136, 37,121, 44,244,234,237, 96, 4,207,169, 57, 47, 31,212,222,165,163,175,177, 83,170,169,219, +125,145,175, 77,233,217,233,230,216,127,154,183, 22, 98,217, 96, 99,171,180, 12,252, 48, 49,223,120, 63, 2,144,118, 45, 59, 13, +195, 64,208,107, 59, 15,210,180, 32, 33,149, 59,156,249, 5,254,255, 11,248, 5, 4, 18,162, 45, 41, 37, 36,177,241,174,189, 78, +210, 52, 21,143,107, 14,137,228, 36,179,163,157,157, 89,253, 31,230, 14,243, 40,211,141,213,234, 83, 16, 63, 13,253, 81,114,192, + 65, 60, 13, 98,193, 86,194,200, 22, 49,105, 29,114,190, 51,111,234,233,105, 70, 38,146, 75,129, 75,129, 94, 62,240,180,220,155, +129,182,121,252,180,190, 5, 81, 16, 0,109,219, 94, 66,204, 58, 7,100, 86, 41,156, 79,207, 53,148, 18, 72, 56,221,181,164,121, +248,148, 15, 45,131,153,204, 67,243,158, 39,223, 59, 70,195,132,219,220, 12, 93,120,165,101,254, 75, 67,223, 72,153, 51,254, 33, +188,179,169,230,137,195, 88, 18,254, 16,255, 98, 7,174, 31,201,147,233, 30,103,243, 32,172,195,123, 96,223,104,196,165,146,131, +223,182, 14,121, 26,238,209, 80, 11, 83, 11,168,232, 72,243,176, 49, 60, 52,229,253, 23,148,209, 83, 86,184, 55, 92, 94, 93,232, +108, 5,251,237,215, 77, 41,171,218, 85, 68,147,216,161,243,232,180,173,238, 62, 79, 95,109,142,192,167, 56,115, 9,203,166, 88, + 8,251,160,224, 58, 77, 43, 80, 79, 80,146,150,110, 58,238,108, 31,121,158,173, 29,202,131, 71, 19,238, 28,198,210,115,246, 0, + 73,161,123,192,156,120,212, 29,142, 41, 49,221,143, 44,187,103, 80,158,151, 52,197,105, 31,114,192,200,216, 89, 12,163,146,220, + 62,140,190, 39,223,125,247,219, 94,163,227, 36, 50, 92, 1,179,193, 68,131,125, 82, 33, 96,198, 76, 85, 2,123, 22,220, 25, 88, + 97, 2,235, 48, 6, 65, 70,118, 98, 66,132,240, 67, 31,213, 72, 62,141,249,127,208,151,159, 16,125,111, 24,217,205, 40,196, 48, +166,205,216,227, 92,160,153,157, 66,179,163,144,198,194,239, 29,151, 81, 7, 33, 68, 18, 53,238,113, 67, 77, 53, 1,157, 74,237, +248,187,146,234,110,121,187, 94,172,107,199,159, 69,251,124,120,219, 54,187, 3, 50,119,195, 44,196,239,233, 82,153, 46, 50,108, +236, 26,104,101, 99,155, 6,215,154, 87,121, 82,116, 74, 53,109, 19,227,173, 99, 76, 63,101, 73, 96, 0, 10,165,224, 89, 19,162, +152, 12,249,160, 48,241,199,253,152,123,123,216,212, 27,170,152,238,214,120,224,133, 40,151, 42,173,186, 13,201,150,202,203, 72, +254, 24,191, 5, 32,237,218,118, 19,134, 97,104,156,164,148, 10, 52, 6, 47,155,180,111,216,255,127,214,152, 16,183,146,203,108, + 39, 78,211,174, 12,105, 60, 34,129, 84,154,228,216,177,143,207,177,207, 96,250,163,100,124,148,200,207,102,241,149,150, 63,192, + 84, 73, 53, 29,128, 44, 23,115,231,164,129,174,122,220,177, 74, 55,140,232,197, 19,225, 26, 8,193,248,230, 3,171,232,246, 62, +238, 43,186, 69, 24, 47, 44,137,177, 32,114, 97,184,212,152, 92,145,242,195, 82,235, 64, 51,252,224,179,175,179,114,153, 15,169, +148,184,105,167, 63,117,169,140, 82, 45,127, 52, 34, 53, 99,100,168, 53, 97,119,207,155,123,193,143,109,164,230,206,139, 1,204, +157,167,159,244, 18,114,250,255,140,228,141, 22,226, 34, 1, 6,223,201, 41, 51,220, 73,251,181,104,246,120, 42, 52, 41,238, 16, + 36, 64,215, 92, 76, 78, 98,186, 84,163,239, 68, 52,173,100,229, 24, 6, 22,140,239,155,181, 93,190, 52, 31,187, 37, 21,255,130, +191,122,178,109,246, 82,222, 81,115, 90,166,159, 6,142,205, 22,191,136,113,148,166,254,117,102,201, 97,240, 61, 97,110,210,116, +123, 12, 60,209,178,241, 91, 8, 85,198, 58,203,124, 29,198, 97,146,220,100, 77,146, 73,226,190,133,192,151,204, 93, 96,226,144, + 26,213,184, 38, 35,245,231,135, 51,235,127,161,124, 5,241,226,200, 1, 73,253, 52, 20, 21, 73,102,208,224,145, 54, 89, 61,193, + 12,228,236, 8, 37, 38,137,238,240,164,124, 52,211,180, 42,103, 33,252, 46,197,204,236, 16, 40, 19, 88,197,234,111, 84,194, 10, +131, 76,227, 72,237, 67, 21,100, 47, 97,114,140,236,249, 32,186,116, 29,137, 85,247,207,199, 56, 72, 14,148,241, 37, 97,126,210, + 68,219,164,224, 30,239,128,251,147, 51,171,241, 1,217, 35,102,245, 88,242, 98,241,164, 26, 6,214,168,198,234, 22,119,245, 91, +247,254,218,238,156, 15, 11, 99,190,206,135,254,118, 2, 74,143,232,117,185, 65, 11, 29, 23,208, 24,109, 17,226,153, 76,105,157, +187, 30,195,249,130,151,254,254,220, 54, 93, 50, 21, 48,114,245, 84,236,135,209,146, 27, 34, 91,107, 74,205, 57,228, 22, 8,177, +169, 33,119, 86, 18,118, 3,107,220, 83, 30,232,226,109, 13, 43,176,155,131,251,230,118,160,225, 39, 39,158,235,143, 0,164,157, +209,110,194, 48, 12, 69,227,144, 82, 84,152,152,216,195,164,241, 7,251,255, 31,154,144,246,138, 38, 86, 85, 91, 27,103,177, 19, + 39, 33,172,168, 18,125,167, 15,180,189,113,156,235,115,205,131,101,251,253,191,201,213, 80,195,122, 24,170,168, 68,106,171,164, +150,153,142,251,143, 65, 94, 2,235, 74,255, 2,211, 53, 33,145,254, 10,244,182,223,189, 95,102,130, 76, 83,105, 73, 75, 2,211, +194, 58, 10,238, 83,198,152,143,243,175,150,118, 33,153, 79,144, 80,186, 91, 78,227, 75, 55,255, 17, 69, 86,210,182, 78,185,216, +201,122,104, 11,255,162,102,191,141, 97,113, 15,147,174, 46,206,130, 66,203,207, 85,240, 6, 17,255,187,220, 39,144,178, 62,198, + 98, 3,209,210,109,189, 28, 3, 51, 51,129, 3,149,160,216,100,184,158,135,188,154,108,182, 81,111,164,236, 56,208,172,169, 11, +241,205, 77,236,224,211,167,216,178,102,245,254,135,180, 97, 89, 31,246, 29,142, 72, 44, 53, 7, 23,231, 58,171,190,110, 8,101, +225,122,215,234,176, 59,124,162,175,131,144,166,199,116, 38,124, 5,100,249,224,154,240,198, 39,138,216,220,108,151,176,117,227, + 9, 44,138, 5, 18,139,178, 61,226, 83,184,159,236,114, 44,179,168, 57,206,157, 84,231,121,153,229, 85,188,174,250,218, 74,186, + 75,209, 53,147, 75,120,149, 8, 99, 33,182, 8, 86,170,148,120, 33, 12, 95, 35, 21,211,201,110, 21, 64, 8,215, 1,142,184, 36, + 5,130, 62,198, 73,197, 8, 3, 8,125,172,122,175,147, 34,179, 49, 47,116,144,143,165,255, 81,246,108, 59, 18, 62,189, 43,118, +222,149,184,231,110,123, 50,224,223,138,187,154,169,220, 31,188, 52,232,227,243,241,116, 62,205, 72,156, 14,132, 25, 30,101, 50, +212,147,209,190,120,167, 48,201, 93,179,127,217,188, 14,104,159, 12, 13,228,197,116, 61, 66,136,154,112, 96,144,231, 47,192, 87, +251,190, 56,108, 90,227,133, 94,247, 99,223, 79,131,197,105,208, 19, 37,168, 19, 86,118,178, 57, 97, 19,164,125, 70, 0, 20,180, + 43,206,140, 11,111, 50,209, 84,195,201,180,229,101,128,181,145,189, 59, 76,106, 97,216,197,184,214,155,173,113,131,253,230, 40, +199, 21,251, 83,240, 79, 0,214,206,101,167, 97, 32,134,162,227,153,116,134,208, 22, 1, 18, 44,202,130,255,255, 39,214, 8, 33, + 1, 27,164,150,100, 30,196,246, 56,153, 60, 8, 32,232,186,149,146,168,113,236,235,220,115,171,255,186, 94,235,120, 50, 53, 43, +241,191, 37, 80,166,181,177, 12,138, 85,219, 4, 47, 63, 27, 46,211,200, 46, 63,255,120, 17,172,183, 72,137,129,155,218,237,157, +123,120,122, 67,238, 34, 51, 65, 8, 62,242, 18,171, 67, 21, 30,125,243, 46,122,212,164,101,246,194,236,229, 22,254, 36, 71,102, + 37,166, 78, 73, 92,106, 51, 84,228,174,236, 98,227,188,203, 8, 33, 44,172, 86,170,144,255,193,139,240,186,208,223,217, 89,186, +165,243, 39,120, 0,166, 13,216,204,150,194,209,129, 70,132,116,142,190,103,174, 49,186,143, 47,136,196, 77,219,196,112, 84,166, + 85,241, 82,214,241,158, 78, 4,114,204, 51, 22,102, 36, 95,123,100,132,221, 93,215, 77,211, 34,161,236, 35,188,158, 16, 47, 3, +178,107, 45,143,249, 94,169,219,250,226, 57,109, 43,202,173, 46, 28,164,189,145,105,168,231, 69,100, 79, 20, 89, 67,151, 42, 1, +100,167, 77,200,239,253,178, 61, 34, 59,214,164,106, 68,177, 8, 73,146,209,224,138,249,154, 94, 2, 69,255, 1,211, 85,177, 94, + 89, 32,149, 70,168,108,123, 78, 57,129, 38,101, 95, 83,159, 9,207, 49,171,228,214, 6, 9, 11, 13,156, 39,169, 10,210,232,183, + 55,197,218,215, 96,185,121, 31, 43, 51, 81,114,183,199, 43,138, 52,200, 47,179,167,234,100,246,153, 20,247, 28,228,145,219,187, + 56,238,220, 97,188, 74, 29,107, 50, 11,178,204, 34,107,239, 79,244, 90,138, 41, 89, 44,238, 42, 15,181,154, 37,108,252,139, 34, +232, 84, 27,176, 70,119,247,132,189,114, 7,103, 92,119,125, 44,152, 54,122, 74, 55, 1, 99, 42,135, 72,153, 54, 18, 20, 31,250, +167, 31,254, 28,223, 93,112,230,108,131, 38,154,110,244,247,164,210,168,189,221,243,142, 21,114, 43,216,251,117, 19,167, 77,160, + 54,132,206,167, 72, 77, 18,103, 99, 5,222, 54, 83,227,207, 11,240,108, 34, 12, 40,237,180,221, 17,214,102,119,244, 71,195,160, + 59, 5,159, 2,144,118,101, 59, 13,195, 64,208,187,235, 92, 84, 5, 85, 2,196, 3,255,255,111,240, 80,169, 28,109,115,216, 38, +187, 62,226, 64,210, 10,168,250, 80, 85,173,242, 16,123, 60,217,157,157,209,127,131,242,171,101, 25, 88,255,114, 41,239, 10, 46, +244, 58,212,117,163, 56,151, 41,218,212, 20, 13,146,106,209,217, 4,186,232,253,175,152,237,180, 81,235, 93, 34,222,111,170,110, +160,151,247,174, 41, 10, 27,100,100,124,129,189, 29,111,184,222, 26,123,116,131, 7,178,243, 15,205, 89,234, 82,154, 88,169,167, +232, 11,159,102, 92, 75, 33,239, 82,118,103,190, 32,194, 74,172,249,234, 35,152, 14,173, 74,182,148,215, 89,100,130,245, 74,222, + 91, 41,184, 83, 40, 4,225,201,103, 17,196, 56,145, 27,206,225,133,130,103, 46,112, 68,231, 94,186,127,103, 49,168,109, 52,183, +154,181,194, 70, 83, 59,152,218,130, 80, 9, 94,110, 31,108,183,224,197, 51,100,228,153, 99, 92,179,189,115,135,207,254,246,161, +220,109,202,215,125, 71,100, 26,226,166,182,206,162, 4,253,235, 81,169,231,102,123, 40,238,128,141, 38, 32,151, 83,101,211,152, +168,220, 76,122, 30,213, 20,179, 74,126, 72,149,136, 42, 11,246, 92,145, 24, 28, 23, 12, 87, 2,106,152,248,215,144, 81,103,191, + 41,237, 46, 69,198, 71,100, 79,150, 52,176, 72, 47, 96,246, 41, 58, 14,196,147, 50, 36, 51,216,137,194,131,210, 46,154,232,196, +136, 56, 20, 35, 0, 29,114,101,157,242, 34,105,192,204,103,195,174, 33, 55,224, 26,223, 89,139,238,228, 89,177, 9,220, 65,228, +152,110,178,206, 78,134,142,242,187, 5, 16,255,117, 66,105, 98,114, 94, 23,104, 39, 46,230,199,151, 12,100, 6,104,110,190,169, + 23,159,159, 52, 82,103,255, 21, 44, 6, 43, 59,200,197,219,167,133,227, 35,151,221,185,161, 90,112, 64, 7,236,154, 39, 2, 26, +161,180, 30, 9, 61,211,108,111,105, 69, 53, 86,133,170, 13, 90, 53,188,157, 85, 39,236,199,250, 32,111, 49,154,229, 70,151,207, + 35, 55,194,193, 79,174,173,134,146,104, 60, 33,122, 49,150,113,113,143,243,137, 1,222,150,142,211,179,180, 88,160,251, 1, 56, +132,172,255, 98,195,162,176, 41,217,130,201,162, 53, 5,150,142,160, 55, 71,239,106,254, 37, 0,105, 87,178,211, 48, 12, 68,227, + 37,105, 73,211, 74,244,128,184,113,232,255,255, 1,159,194,149, 30,128, 82,164, 22,234, 44,182,153,197,142,211,116, 65, 64,143, + 81,101, 69,206,120, 60,203,123,111,254, 24,191,255,216,143, 62,203,125,205, 82,173,230, 82,153, 39, 89, 96,175,168,224,175,121, +246,209,226,254,216, 11, 36,196,102,127, 6,118,240,145,104,135,246,151, 95, 94,179, 8,162, 86,119,213,116,117, 95, 61, 62,125, + 40,198, 68,248,212,153,134,213, 94,157,124,200, 85,219,216, 77, 28,117,116,118, 7,248, 11,212,177, 30,205, 50,100, 12, 49,100, + 6, 19, 53, 84, 17, 43,167, 41,148,158,101,114, 81, 96, 38,232, 80, 16,186,221,211,203, 28,174,106, 73, 14,143, 19, 83, 73, 23, +153, 88,160, 11, 81,198,163, 76, 35, 59,122,176,164,165, 18,168, 98, 39,213,156,218, 9,141,132,219, 5, 21, 49, 32, 83,153, 41, +100, 72,131, 41,149, 74,108,105,150,100, 33,188,173,101,109,186, 46,130, 32,192,237,195,197, 64,162, 58, 24,251, 99, 18, 32, 69, +215,185,183,237,161,168, 84,153,107, 10,118,176, 62,242, 25, 89, 84,252,131, 52, 98, 5,201, 80,181,220,138, 57, 24,163, 70,177, + 93,141,213, 25,140, 16,137, 11,233,109,194,201, 4,128, 69, 24,162,196,205,213,177,210, 99,136,247,201, 19,217, 48,108,111,200, +154, 15,206, 61, 42, 29,244, 84,154, 33, 90, 92,248,163, 85, 3,248, 59, 75, 10,211,126,128, 18, 16,151,187,217, 35,176, 34,225, + 99,152,185, 36, 36, 75, 70,147,112, 24,139,225, 57,126, 58,232, 61,113, 8,239, 33, 80, 64,117, 2,217,167, 1,246,202, 16, 0, +186, 51,240,175,178,159, 87,156,204,192, 31,159,155, 81, 73,212,133, 0, 39,114,140, 92,172,204,196,129, 39, 81,208,209,157,212, + 94,126,219, 4,242,105, 44, 98,144,254,117,125,205,125,192, 77, 61, 5, 98,142,250,192, 39, 73,246,255,156, 59, 4,224,173,173, +207,229, 4,204, 73, 8,194,122,132,121, 71, 78, 19,241, 84,117,169,110,167,186,116,116,239, 78,144,183,142,223, 25, 92,127,153, +231, 38, 43, 32, 38, 95,200,217, 84,223,172,205,186,205, 12,236,113,227,218, 46,115, 19,176,115,239,159,191, 94, 54,230,125,103, + 15, 4,160, 4, 87, 96, 27,103,224,192, 89,196, 78,117,112, 30, 73, 47, 84,208,100, 44,223,235,127,176, 68, 82,145,229,144, 43, +183, 56, 69, 2,252, 3, 31,135, 32,166, 42,144, 0,237,136, 6,205, 90,148,136, 47, 42,212, 68, 73, 81, 91, 83,200,226, 91, 0, +210,174,100, 55, 97, 24,136,218, 78,156, 5, 82,150, 3,234,169,135,138,255,255,158,222,122,163, 85,165,170, 5, 90,182,196,246, +212, 51,118,140, 19,150,110, 17, 39, 14,200, 24, 60,158,229, 45,255,234,207,252, 4,196,126, 54,196, 71, 18, 34,225,215,237,228, + 82,170, 47,241,220, 47, 3,205, 25, 73, 75, 30, 69,121,222,107,254,235, 54,189,253, 96,226, 14,247, 14,255, 31,117,171, 4,208, +123, 72,202,145, 77,115, 57,159, 85,139,149,121,120,222,230, 82,104, 39,168,215, 30, 5,142,113, 19, 30, 77,122, 47,129, 55,205, +147,151,232,188,216, 86, 10, 26, 91,166,205,226,155, 22, 39, 78,152, 72, 68,233,164, 24, 55, 69,149,224,176,126, 80, 8, 3,106, + 85,171, 61,131, 95, 25,107,220,208,107,156,242, 81, 38, 53,136, 66, 3,162, 33, 65,172,200,178,183,146, 72,217,205, 19,168, 73, +101,108,146,162, 42,190, 20, 54, 73, 65, 87, 49,138, 53,124, 39,108,105,130,132,142, 50, 1,155,140, 15, 82,190,174,147,181,210, + 27,131,224,150,224, 54,153,146,116,187,221,192,141,134,197,219, 97, 88, 37, 53,168, 12, 39,179, 88,251,187,203,172, 36,132,210, +173, 93, 82, 49,130,124,252,142,193,159, 73, 78,138,237,110, 0, 46, 64, 24, 97, 58,146,141,134, 69, 6, 90,218, 83, 51, 79,231, +156, 38,208, 53, 91, 61,119, 8, 78,170,208, 54,220, 91,200, 95,128, 81, 7,100,222,177, 12, 8, 28,227, 48,159,143, 64, 20,158, +209,202,174, 10,155,196,249, 31, 68,130,138,168, 61, 71, 66, 71,224,141,231,224,180, 69,195,157,215, 3, 53,124,157, 27, 6,247, + 46, 6,112, 53,253,196, 47,161,233, 62,114,195,105,211,133, 46,134, 80,222,191,132,120,156, 38,119,228,120, 33, 96, 16,161, 55, +155, 5,246,167,252,253, 4,219,195,163, 38,140, 97, 71,166, 37, 59,165, 47,177,203,201,251,249,121,221,119, 15, 85,156,254,128, + 30,244,225,114, 70,239,147,119,244,235,112,108, 85,228, 52,225, 27,211, 98,134,125, 16, 80, 58,229,123,174,101,234, 49, 66,104, +235,129,245, 54,242,140, 38,217,168, 76,230,235,102,185, 83,187,161, 44,171, 36,203, 81,122,100,249,250,249,178,213,136,142,119, + 45, 0,100, 62, 66, 83,104,108,217,107, 77,186,153,104, 35,132,253, 24, 25, 66, 22,216,162, 89,187,125,161,197,231,132,252,240, +237,120, 26,215,208, 58, 61,187, 28, 39,242,246,116, 41,251,225, 74,229, 50, 19, 8,242,131, 47, 1, 88,187,150,222,182, 97, 24, +108, 82,150,156,174,201,218, 98, 75,215,245,178,251,246,255,129,253,145, 29,119,111, 47, 69,209,184,141, 31,178, 56,146,146, 18, +187,246,130, 12,216, 49,135,196, 9, 34, 81,159,200,239,241, 31,244, 77,255, 4,228,231,222,241, 99,106, 84,180, 92,162,172, 39, + 92, 76, 13,159, 27,197,189, 19, 82, 77,196, 80,163,176,133,195,189,239,161,128, 59,112, 63, 10,218,145,103,232, 93,143, 38,159, + 81,239,243,169, 40,238, 93,245,253,238, 6,172,251,249, 75,105,239,154,139,169,115,107,204,252, 48,249, 88,126,227,239, 96,191, +149,197,173,239, 25,207, 62,159, 49,217, 31, 70,118, 49,229,145, 82, 73,122, 98, 83,108,217, 95, 25,220,126,168,154,174,247, 25, +227,159, 67,193, 54,185,223,205,175, 54,149,187, 93, 91, 36,190, 57, 66,223,209, 83, 75,107,229,138,181, 0,107, 71,215,150,107, +177,132,108,240,178,226,101,186,177,178,166,157,193,171,170,188,180, 42,209, 67, 6, 29, 12, 1, 68, 76,242,184,107,234,183,166, +110,253, 83,231,187, 65, 22,208, 10,112, 39, 36,162, 3, 79, 88, 66,106,235, 23,207,128,197,246,225, 99,192,173,129,141,167,149, +129,237,202, 52,102,179, 51,151,123, 81,243,104, 36,130,110,115,136,225, 13, 74,152, 33, 76, 41,114, 89,117, 15,195,177,133, 75, + 89,112,191,208,103,200,158, 90,169,237, 78, 71, 11,174,216,188,201,212,179,169,189, 73, 44, 52, 97, 90, 55, 96,108,219, 53, 89, +189, 11, 93, 2,252, 43, 85, 41,140, 74, 15,230, 84, 26, 97, 9,197,200,177, 67, 14,188,148,111,173,242,202,129, 3,117,204,160, +144, 34, 35,162, 21,151, 63,245, 95, 99, 34, 79, 38, 27,119, 2,156,126, 9,130,145,240,105, 54, 58,206, 55,228,144,131,253,142, +116,163, 89,113, 39,154,237, 94, 56, 53,107,155, 52,208,166, 7, 74, 62,110, 40,167,108, 39, 82,211,100,131,191, 11, 62, 93, 4, +239, 14,173, 4, 30, 45,135,179,156,216,119,195, 57,144, 52, 67, 11, 6,212, 12,170,133, 19,105, 36, 15,181,248,124,113, 47,233, + 51,161, 3, 44,187,224, 93, 97, 92, 16,251,200,146, 33,144, 49,168, 49, 5, 77,223,180,190, 69,116, 55,213,245,215,139, 47,252, +251,158, 95, 31,222,250,215,189,248,207,212, 94, 24,124, 62,106,230, 52, 51,121,104,169,147, 39, 37,230, 32,132, 1, 53,200, 77, + 26, 59, 54,186, 26,165,217, 82,186,255,148, 69,169,112, 80, 3, 63, 82,147,163, 52,122,207, 72, 22,111,217,130,139, 15, 13, 62, +153, 90,218,255, 17,128,181,171,233,105, 35, 6,162,182,199,206,238, 38,219, 18, 1, 61, 20, 9,245,196,145,127,222,255,210,115, + 15, 21, 18, 72,244,128, 16,129, 18, 54,201,218, 51,245,216, 94,199,155, 4,104, 37,142,137,162,100,181, 89, 63,143,103,222,199, +199,204, 87,255,171,144,207,162, 36, 89,122, 15, 36,158,131, 19,187,214, 37,180, 19,136,126,208,253,134,198, 66,170, 60,188,197, +108,174, 55, 80,107,194,157,165,107,162,169, 84, 23,166, 62, 39,229,255,173, 5,250, 50,217,227,172,155,177,247,150,254,210, 54, +151,223,230, 87, 93,255,253,199,111,143,117, 0, 60,179,115,168, 98, 44, 96,241,212,179,213,141,255,182, 95,168, 79, 65,124,117, +220,109, 94,139, 20,247,241, 46, 28,187,145, 38,133,219, 29,129, 49, 66, 75, 7,159,172,107,141,158, 55,149,234, 58, 26,136, 52, +254, 51,199, 66,156,115, 77, 33, 59,222,107,196,189,192, 27, 65, 47,137,117,147,238, 42, 55,130, 0,206, 90,125, 58,159, 26, 96, + 21,243,195,210, 35,171,245, 71,182,154, 69, 91,196,249, 50,192, 46, 14,134, 73, 64,202,195,186,209,234,164,153,180, 19,121, 50, + 99, 83,107, 14,132,212,166,169,180,169,140, 1,120, 92,116,143,127, 86, 87,247,207,243,101,247,208,173, 87,142, 52,135,254,240, + 10, 51, 64,179, 9,156,125,134,163,102, 82,129,156,214, 76, 14,126,105,235,159, 79,114,229,212,157,173,110,109, 32,119,250, 31, +141,198, 3,145,145, 27,165, 60,254,140,106,101,142, 81,194,130,161, 24,229, 64,219,222,202,152, 46,130,197, 56, 6,179,125,225, +144, 68,145, 18,221,112, 24,230, 97, 46, 8, 74,242, 6,101,224, 56,160, 22, 26,197, 12, 28,232, 80, 56, 49, 42, 82, 74, 19,142, +194,186, 0, 83,159,133, 82,180,187,139, 70, 98,177,132,103,242,173, 30,120,147, 36,182,153,125, 52,140,140,246, 55, 17, 85,208, +186,163, 97,143, 30,196, 65,228,228,187,148,132, 2,159, 25,217,115,200,117,206,162,221, 1,119,218,222,163,177, 81,122,106, 32, +189,177,238,101,106, 12,203,237,178,149,135,104,187,184,119,121, 84,180, 80,154,181,235,112, 92,176,199,151, 17,220,247, 39,225, +255,120,184,160, 87,183,166,120,194,240,181,186, 12,197,187,228,181,192,207,171,168,161,109,116,235,220,198, 98, 40,185, 1,131, + 96,148,181,145,126, 19,208,214,215, 67, 30,226, 85, 47,108, 79,254,234, 86,207,253, 2, 25,203,112,195,166,190, 12,107, 61,219, +249,166, 92,178, 56, 23, 13,111, 90, 54,131, 36,110,237, 67,120, 30, 40,101, 5,132, 64,149,208, 29, 50, 66,111,130,130, 57,236, +253, 42,116, 89, 77, 62,191,138, 36, 18, 10, 82, 78, 14, 5, 76, 37, 99,244,167,172, 84,253, 87, 0,214,206,109,167,109, 32, 8, +195,179, 7,175,109,154,164,196,149,138, 16, 69, 61, 75, 60, 1, 79,205, 61, 15,193, 93,239, 43, 85, 69,173, 26, 32, 96, 5,145, +216,241,102,167,158, 61, 56,107, 19, 4,149,250, 2,145,172,140,102,103,255,249,247,251,255,155,127,230,159,206, 0, 19,181, 99, +140,130,120, 30,157,219,187,111,109, 59, 11,143,245,206,127,183,127,216, 74,123,204,205, 83,193,252, 36, 8,232,184,249, 70, 47, + 91,249,231, 60,121, 43,210, 66,138, 84, 8, 37, 25, 79,146, 18,244,217,143,219,249,114,173,200,215, 4, 30, 75,109, 45,151, 33, +254, 15,183, 42, 17, 17,156,217, 31,224, 99,150,126, 65, 61, 3,189, 12,225, 71,171,231,138,204, 68,130, 41,247,166, 11, 51,135, + 58, 95,155,114,177,154,230,202,109,131,167,132, 17, 22,167,211,226,228,120,255, 98,118,125, 62, 43,231,182,227, 79, 0, 62, 2, + 47, 64,126,135,230,222,159,240,208,142, 13,239,149,156,188, 74,223, 29,140,243,118,246,168,116,145,233,117,157, 52, 68,184, 48, +141,230, 85, 59,170,115,154, 30,115, 50,245,194, 72, 74, 37,249, 40,149, 89,202, 95,103, 42,203, 85, 99,232,125,221,229,109,117, +245,243,250,242,102, 81, 46,235, 55, 35,117,124, 80,124, 61, 58,188,186, 91,174,234,166, 45,231, 84,182,149,141,163, 4,239,106, + 92, 32,215, 40,126,223,235, 95, 15, 88, 82, 61, 19, 27,137,130,152, 54,132, 81, 36, 17, 26,132,165,108,177,128, 20, 18,206,113, +215,125, 59, 6,217,221, 11, 40, 93, 95,232,232,192,189, 4, 11,239,216, 11, 34,178,195, 15,192, 83,195, 59, 11, 70,120,216,186, + 53,192, 68,205,100,216,222,241, 89,115,116,220, 44,123, 83,191, 69, 16,179,136,186,211, 49,103, 34, 42, 47,115,204, 45, 35,208, +113,225,185,143,111,103,172,147,209,177,167,169,176,248,130,225,192, 99,246, 35, 53, 5,195, 57, 17,190,191,239,217, 61,251, 58, +240, 0,108, 99,243, 66,115,199, 97,115,119, 9,168,102,248, 19, 60, 72,230, 62, 47,110,151, 4,139, 79,174, 88, 89,255,225,210, +112,120, 31, 28,179,149,109,238, 47, 17,106,186,238,159,139,236, 97, 83,189,220,186, 13,143,146,106,152, 7, 52, 58, 12, 57, 79, +236, 95,146,138,201,135,241,167, 21, 61, 71, 34,193,173, 49, 88,235,106, 79, 40,186,231, 58,172,166,141,195, 38,191,128,161,133, +184,161, 61, 42,197, 45,217,143,213,218,122, 28, 67,124,167,231, 85, 88, 3, 12,218, 59,176, 53,169,182,151, 86, 10, 18, 96,206, + 1, 32,109,249,216, 76, 15, 52, 17, 5, 79,135,181,188,203,230,113, 16, 82,247,218,156,116,121, 90,196, 36,130, 17, 51,135,246, +190, 68,153,100,127, 5,160,237, 90,114,219,134,129, 40, 73, 81,150,140, 70, 77,224, 24, 48,208, 58, 40,178,233,166,232, 5,178, +207, 5,114,190, 94,162,219,228, 4, 89,101, 93,160, 72,186, 40,208,124,225, 56,136,109, 72,161,134, 25,206,144, 50,105, 59,159, + 77,189,242, 66,254,209,212,112,222,204,155,247,244,255, 8,223,111, 94,179, 82,165,177,221,148,115,178,250,155, 81,155,125,129, + 44, 37, 18,245,202, 46,145,183, 41,213,109,217,137,205, 28, 93,201,224, 70,190, 88, 52,191,249, 48, 96, 23, 54,252,163, 0,178, + 76, 99, 22, 76,198, 7,190,214, 25,110,124,163, 60,116,178, 81,231,205,125,193,169,128, 71,169,247,156, 47,139,249, 75,189, 14, + 29,198, 89,197,250,108,248,166,148,176,161,200,119, 79, 35, 77,242, 94,140, 91, 49, 46,202, 89,189, 40,132, 29,170,178,206,196, +241,159,171,211,135,135,187,112,241, 45, 93,124, 88,228, 71,101,117, 50,157,204, 5, 20, 66,238,200, 60, 47,123,251,159,119, 15, +190,142, 38, 55,139,169,168,235,166, 86, 37,232, 22,182, 20,158,106, 98,160,112,103,102,185, 82, 79, 68, 80,252,136,251,183,175, +203, 18, 1,169,184,156,214,231, 23,183,215,147,199, 27,204,217,155, 22,119,115,213, 47,190,143,182,191,141, 7, 63,127,253,251, +113,118,126, 37, 28,221,119,232,166, 79,243,221,157,193,157,249, 48,135,220,201, 1,184,186, 61, 34,132,182,199,205, 81,124,102, +217,105, 90,197,116,111, 34, 1,208,200, 53,139,122, 73, 43,211, 50, 2, 79,236, 69,213, 18,176, 81,150,205, 47,130, 16,134,227, + 10,242,114, 94, 70,120,177,220,144, 32,218,200,208, 57,148,125,108,204,211,128,117, 57,235,181,124,227,221,148,140,224,167,100, + 92, 69, 86, 70,240, 20, 44,183, 93,172, 23, 66,229,138,156,244,133, 26, 21,140, 76,130,144,142,220,156, 98, 42,209,177, 70, 21, +207,182, 51,123, 6, 2, 36,102,105,176,224,106,157,190,137, 93, 46,116,167, 26,214, 29, 36,177, 67, 94,199, 63,106, 83,136, 12, +221,136, 73, 18,226,229,170, 2, 94,164,235, 32,151, 43, 12, 54,105,250, 66,154,232, 36, 84,200,119,202, 9,240, 35, 87,185,163, +157,184,193,186,122,197, 40,120,180,245,233,122,118,153,106,213,188, 22,159, 66,126,141, 89,157,170,122,149, 49, 24,127,179,189, +234, 75,137, 16,158, 44,197,230,160,102, 6,115,164,198,210, 39, 2, 97,101,141,177, 2, 52,121,125,200,150,112, 17, 89, 20, 2, + 83,104,232,160,236,130,187,151,116, 39,188, 14,116, 32,200, 76, 56, 98,158,113, 33, 94,182, 94,189,221,211,150, 24,103,105, 86, +224,244, 85, 55,246,128,107, 3,129,132,219,248,248, 11, 57,208, 35,128,112,243,137,238,174, 3,215, 22,120, 22,128,180,107,107, + 73, 32, 8,163, 51,187,234,238,154, 21,164,221, 40, 9,242,193, 30,138,138,192,168,254,113,127, 34,232,177,199,232, 37,130,162, +204, 36,211, 50, 75,215,205,157,253,154,251,206,152, 69,145, 44, 34,226,138,224, 55, 51,231,187,156,115,126,210, 7,206,231,243, +181, 90,173, 94,175,255,103,228, 72, 63,170,213,106, 24,210, 83,112, 52,246, 90,103,195,229,114,121,105,121,169,211,105,127,233, + 76,194,228,113,133,239,127, 3, 88, 75, 68,179,141,229,138,221, 63, 58,220,220,221,110,212,239, 56, 69,152, 49, 83, 57,193, 76, + 62,179, 78,163, 43,236,202, 28, 17,161,124,247, 18,101, 92,172, 42, 0,104,239, 96,127, 99,103,171,121,223,136,233,151, 64,106, + 59,240,204,192,187, 91,100,176, 90,230,178,218,226,142,252,174, 81, 33,244, 9,250, 8,162,143,100,193,243,135, 36,121, 5, 66, +175,135, 65,120, 21, 13,219, 95,240, 81, 68,226, 18, 56, 31,132,129,130, 21, 39,187, 94, 12,118, 43,165,181,153,169,110,123,120, +251, 52,232,209,251, 49, 42,228,104,128,186,121, 63, 67,113,250,180,151, 97,117,155, 28, 14, 60,119, 54,112,131, 44,238, 13,162, +235, 70,247,236,242,241,228,178,117,209,234, 62,244,195,155, 56,234, 64,236, 51, 18, 19, 58,127,121, 59,190,105,158,190, 15, 66, + 4, 69,132, 42,222,212,114, 97, 21,251,243,221,164,192,148, 31, 29,148, 17, 69,117,169,116,202,132, 58,137,132,212,216,192,146, + 2,233, 40, 77, 20,144,154,159,114, 56, 93, 34, 88, 85, 98, 1, 0, 75,200,209, 96,191,152, 35,116,120, 92,204, 93,107,134, 40, +139, 32,221, 69, 52,188, 49, 82, 64,148,128, 9,221,172,235,247,209, 14, 19, 45,107,164,100,120,106,188, 32, 60, 98,112, 26,144, +216, 86,220,144,241,137,127, 94, 80, 32,141, 64,148,152,123, 42,207,155,164,200, 39, 29,251,193, 86,122,148, 38, 75,200,224, 49, + 73,201, 70,211,254, 52, 49,106,232,137, 65, 90, 86, 64, 9, 59, 86,101, 10,198,167,223, 45, 40,110,217,163,219,159,154,208, 30, +248,235, 88, 76, 98, 52,137, 77,192,158,229,202,250,225,168,175,114,150,201,127, 42,182,138, 51, 72,208,222, 89,113,134, 99, 56, +186, 51, 46, 6,171, 37,127,142,190, 19,141,132,239, 14,248,174,224,198,195,136, 8, 21, 33,186,209,199, 52,223,165, 27, 52, 33, +204,124,131, 99, 20,193, 75, 66,138, 25,166,189, 13, 24,193,144,159,211,142, 74, 98, 88,110,235, 34,172, 93, 65,185,116,187,244, +255,136,145,112,251, 17, 46,181,250,152, 50, 93, 9, 44,149, 77,126, 59,159,184, 87,147,132,159, 2, 80,118, 62, 63, 77, 4, 81, + 28,159,217,182,233, 15,106, 77, 17, 12,138,198, 11,145, 4, 8,176, 23, 8, 49, 49,254, 13,198,164,234, 65,210,163,246,223,211, +171,103, 19, 15, 74,194,209, 8,129,132, 96, 33,128,110,177,203,238,206, 60,231,189,249,177,211,101,149,184,153, 52,123,216, 54, +147,217,238,219, 55, 51,239,251,249,254, 43, 73, 81, 1,183,223,239, 23, 34,126,175,215,187,126,126,227, 17,134,225,187,193, 64, +119,103, 61, 12,223, 14, 6,126,117,179, 62,125,241,178,183,176,248,184, 0,101,246,133,233, 55, 6,119, 31,123, 80, 40,189,113, +240,210,205, 39, 91,175,250,111, 86,194,117,107, 34,193, 28,237,203, 64,111, 8, 66,134,159,232,181, 0, 66, 43, 35,169, 6, 21, +140,151, 60, 11,183, 54,159,111,191, 94, 90, 91,149,148, 42, 57, 68, 59, 55,170, 81,248,129,139,227,213,121, 86, 91, 96,193, 12, +225,209, 59, 84,147, 83,179,230, 74,165,135,214, 58, 37,230, 68,158,178,228, 40, 30,223,175, 55,239,176,218, 5, 19,223,153, 56, + 41,251,214, 25,131, 47,201,229, 24,141, 59,106, 15,167,219,203,247,110,159,159,167, 31,119,135,159, 15, 84,250,158,168,192,222, +170, 98, 25, 71,163,202,218,117,149, 43,242, 20,120,119,138,119,154, 60,205,196,183,227,232,253,206,209,135,175,135,159,246, 78, +134,163,232, 64,140,135, 12, 25,244,179, 65,208,101,108, 4,217,126, 18,255, 20,233, 92,181,249,108,234,238,211,233,149,197,217, +141, 86,123,141,215,231,126, 67,147,198, 71, 18, 79, 13, 41, 14, 25,137,179,213,112,161, 38,143, 48, 75,153,182,110,176,110, 64, +210,240,197,193, 49,198,201,151,194, 88, 92,105,219,107,193, 93, 48,178, 97,159, 89, 48,138, 21,220,219, 34,113,145,111, 15,230, +187,118,148,188,219,188, 29,174, 45, 20,216,224,110, 20,222,110, 57, 94,119,217,107, 96, 23, 19, 56,252, 37,238,219,126,114,207, +227, 87, 22,100, 26,153, 87,142,227,108,137,192, 81,188, 56,152,170, 83, 13, 12, 52,165, 17, 78,177,203,161,216,152, 53, 58,114, +154,126, 13,159,202,175, 17,166, 6,209,252, 20,247, 90,224, 46,115,219, 26,134,138, 60, 17,220,221,154,190,118,125,225,212,220, + 63,159, 25,105, 27, 88,187, 14,207, 22,150,231,193, 93, 78,218,134,240,124,168, 39, 30,121,240, 54, 84,254, 43,184,107,137,226, +131,238,163, 22, 26,215,151,152,233,102, 70,252,140, 93,104, 4,245,178, 27, 87,190,200,131,242,142, 74,227, 86,163, 67, 21,168, + 65, 5, 25,144, 16,227,132, 30,179, 24, 53, 86,227, 76, 92,166, 87,163,248, 87,148, 92, 68, 87, 81,156,198, 82, 79,250, 89,133, +144, 20, 1, 38,242,170, 33,122,131,131,161,248,107, 66, 40,102,226,210, 56,143, 11, 59,182, 6,162, 46,201,193, 28,101, 74, 32, + 80, 3, 5,234,125,146, 17, 90, 26,163, 11, 61,104, 32, 29,235,148,130, 62, 89,244,232,123,228, 76,207,232,197, 3, 34, 33,148, +188,154, 97,252, 17,128,177,107,235,109, 26,134,194,177,211,180, 73, 53, 96, 33,169,132, 88, 25, 66, 43,237,107, 95,120,226, 97, + 18,208, 31, 59, 9,129,144,248, 31, 45, 55, 65,138, 64,226, 58, 36,210, 78,108, 74,154, 56,137,141,125,124,105,154, 70,130, 60, +197,169,123,108, 89,206,201,241,231,207,223,249, 55, 62, 19,134, 97, 16, 4, 81, 20, 73, 55, 61,155,205, 22,139,197,106,181,226, + 49,184,185,247, 60,143,199,227,188, 94,204, 11,113, 44,189, 63,255,151,137,253,167,211,233, 98, 62, 79,211,180,113, 31,132,225, + 0,170,201,162,185,134,119,134,110,191,255, 17, 26,229,166,110, 6, 65, 2,246,121, 55, 2,232, 80,164,127,226, 31, 33,211,104, +253, 26, 77, 38, 89,186,233,131, 17,131,201,248,225,224,244,201,163, 55,243,197,243,179,167,252,225,201,100,124, 17,175,253, 48, +248, 28, 45,121,241,104, 56,228,245, 63, 45,151, 90, 20, 18,157,140, 70,155, 52,251,249,237,135,122, 67,225,203,120, 56,240, 31, + 62, 62,125,247,234,245,203,179,103,124, 72,239,141,239,175,227, 88, 24,249,176,212,204,100, 81,245,210, 98,188, 28,226,206, 17, +104,188,254,134, 37,149, 81, 94,204,106,251,171,141,120,164, 4,193, 50, 56,119, 74,215, 52,239,229,116,236,121,135, 37,126, 91, +112,231,219,178,206,146, 31,167, 91,118,119,226, 31, 36,118,249,226,253,249,245,174,243,224,110,232,247, 61, 23, 35,238,211,133, +210,189, 43,114, 54,254, 33, 20, 59,120, 83,208,175,151,213,175,171,138, 18, 98, 51,114,124,195,113,110,123,209, 58, 59,191,178, +143, 15,122,174, 16,202, 32, 93, 65,254, 44, 51,138, 9,238,244,186,126,137, 6, 5,115,115,193,183, 97,132, 7,232, 37,111,241, +154, 72, 21, 73,147, 78,153, 80,107, 3, 2, 89, 74,208, 73, 98,136, 50, 95,173,150, 20, 21,179, 23,192,196, 29,180,128, 33,164, +168, 47, 72,121,125,164, 1, 71,195, 82,167,160,250,175,197, 88, 24,128,200, 10, 32,109,136,185, 43,148, 15, 81,166,115, 13, 41, +218,140, 38,211, 86,245, 40,216, 50,120, 79,107, 42, 78, 19,227, 87,187,200, 47,210,106,119,172,109,237,101,152,150, 91, 15,173, +179,129,107, 1, 88, 5,208,195, 3,153,125, 12,215, 19,115, 72,254, 61, 70,109, 26, 3,250,228, 84,205, 85, 34,180, 31, 2,179, +157,240,166,169,196,199,182,104, 56,133,227,169,180,225,220,181,228, 67,147,248,134,244,206,129, 86, 65, 1,111, 86,115,241,251, +114,202, 58, 31,142,162,189, 91,109,129,188, 89,238,252,191,115, 55,125,250,126,241,197,106,203, 63,209,104, 32,163, 77, 54,164, +231,184,121,145,237,153,197, 74, 8,158,150,164, 34, 24, 72,229,210,219, 50,214, 73, 74, 98, 83, 33,197, 46, 68,132, 24,127, 11, +138,156,228,204, 74,186,216,225, 35,217, 17, 42,132, 72,242, 88,248,146,182,162, 24,180,133,177,173,194, 27,216,130,170,161,126, + 84,197,227,216, 86, 28, 16,138,213,233,113, 86,110, 19,119,241,161, 46, 37, 63, 88, 37,124, 22, 42, 5, 88, 51,180, 37,167,150, + 22,218, 8, 51, 42,125, 48, 7, 10,152,122,127, 5,160,236,106, 94,155, 8,162,248,204,236,210,213, 82, 37, 32, 88, 73,147,155, + 39, 61, 22,141,110,143,246, 38, 4, 47,226, 81, 3, 85, 80, 16, 41, 53,208, 96,109, 73, 41, 37,144, 66,175,189,197,139,224, 57, +249, 27, 90,132,254, 3,126, 43, 38,149,210,143, 88, 53,105, 62,118,119,198, 55,243,118,246, 35,161, 21,151, 37, 76,150,100, 50, + 73,102,127,243,230,253,222,251,189,127,227,123,169, 84,130, 71,128,224, 98,177,104,219, 54,180,243,249,124,181, 90, 5,124,143, +182,241, 41, 28, 91,155,155,149, 74,229,214,244,116, 54,155,125, 56, 51,131, 40,108, 79, 77,173,149,203, 3,237, 7,185, 28,180, +177,243,213, 98, 49, 48,216,239,231,114, 55,245,245,245,114,121, 34,157, 6,123, 31,222, 8, 87, 0,199, 1,223,241, 83,106,181, +218,203,197, 69,188, 94,152,159, 71,136,199, 91,249,197,210, 18,224,190,122,253,225,234,242,114, 71, 46, 30,242,198,201,216, 25, +232, 13,206, 70,189,241,249,253,199, 39,207,103, 59,199,146, 4, 93, 41, 44,220,185,119,247,154,125, 3,218, 59,245,198,198,218, + 58,244,242,120,110, 54,153, 78,193,149,237,173,183,111, 94,189, 86,247,150,220,161, 77,102,174, 39, 83, 19,112,254,248,190,243, +229,195,167, 71,115, 79,177,147, 82, 97, 1, 22, 3,164,214,168, 74, 82,132, 99,151, 11, 24,214,101,195,188, 66,172,175,158, 3, +102,248,177,154,235, 99,218, 78, 55, 20,214, 19, 13,253,209,156,207,132,154,244, 7,220, 61,232,180, 83, 35,214,237,115,137,189, +158, 83,119, 97, 98,122,109,206, 45,198, 18, 66,156, 17,116,140, 26, 46,163,223, 68,127,187,185,127,200,197, 69, 66,158, 93,189, + 52,153,188,176,251,167,187,215,118,127,123,228,221, 81,175,213,147,140,255,175,174, 39, 9, 29, 69,207, 48,233,116,146, 36,132, + 36,144,127, 50,193, 71, 45,211, 0,128, 5,168,230,108,180,231,151, 25, 50, 93,110,185, 60,209,247, 88,215,107, 41, 19, 20, 5, +186,132,116,252,201, 4, 88,243,172, 53,206, 68,183,213,223,135,229, 2,195,216,185,230, 55,181, 28,135,239,143,229,148,210,129, + 58,141,194,247,123, 41,205,126,206,197,128,241,142,229,203, 98, 50,238, 58,234, 67,139, 36,198,196, 82,136, 23, 68,159,115, 17, + 45, 49, 26,238, 3,194,160, 24, 26, 12,111, 56, 8,143, 13, 37,178, 70,113, 95, 9, 68, 27,244, 52, 93,131, 72, 76,151, 95,152, + 61,132,120, 21, 20,175,215, 0,141,242, 58, 65, 29, 99,225, 60, 47, 66, 0,224,255, 21,232,213, 68,192, 40, 22, 87, 26, 87,170, + 57,209,205, 35,124, 7,174,192, 52, 89, 95,144,158,135, 57, 71, 65,206, 87,196, 33, 64,152,118,233, 80,130, 69,181,104,144,154, +203,196, 64, 42, 95, 84,222, 93,136,144, 89,141, 9, 66,136,161, 28,168,255,139,165,143,239,167, 24,150, 37,144, 51,210,116, 60, +231,116, 31,151, 74,251,231,228,228,108, 53,192,244,190,211,183,204, 17, 9,218, 96, 99,181,155,169,243, 41,139,145,102,231, 8, +126, 48,248,190,142,220, 59,114, 85, 97, 76, 70,169,187, 88,118, 28,235,225, 73,157, 48,102,200,221, 63, 53,116,189, 16,195, 31, +182,161,138,145, 17,165, 65,134,224, 75,209,204,247,217, 20,157,152, 74, 53,117,193, 2,169, 50, 69,225,168,184, 26, 46, 66, 90, + 49, 36,171, 13,148,192,241,131,224,229,244,128,129,193,150,227,175, 0,140, 93, 65,107, 19, 65, 20,222,153, 77,210,184,233,161, + 69,193, 67,171,160,146,174,135, 66, 91,132, 98,205,143,240, 34,226, 73, 60,120, 16,133, 34,158,114, 11,197,171, 7, 47, 27, 3, + 34,226,177, 30,155, 66, 40,105, 61,120,242,228,189,177,189,180, 24, 65,193,160, 33,164,187,217,157,241,205,123,179,179,155, 53, + 68,115,154, 12,155,217,205, 50,251,205, 55,111,223,247,189,127,227,123,181, 90, 5,122, 94,171,213, 0,193, 1,202, 1,208, 31, + 34,106,195, 87,211,134, 70,187,221,126,191,189, 77,113,152,157,102,243, 96,127, 31, 72, 58,141, 0, 32, 14,224, 75,140,219,180, +161,177,186,182,246,124,107, 11, 64, 28,134, 50,171, 55,245, 55, 60, 15, 46, 29,128,254,102,165,114,122,114, 2, 32,254,116,115, +115,201,117, 97,112,128,114, 56, 30,214, 6, 56, 5,244,215, 61,207,156,136, 62,112, 24,128,251, 51,117,252,245, 71, 79, 30, 15, +227,157, 1,220,184,214,206,110,217,117,143, 14, 59,212,128,206, 55, 94,227,248,176,179, 94,217, 88, 94, 93,121, 91,111,192, 13, +186,247,224,254,141, 91, 27, 11,151, 22,225, 2,234, 47, 94, 46, 92, 94,188,125,247,206,199,131, 15,223, 78,187, 52,239,247,154, +173,171, 75,229,227,206,151,118,179,117,205, 45, 67,207,187, 87,175, 97,144,196, 54,195, 74,120, 60, 37,164, 31, 69,225,119,203, +159,177,236, 43,202, 9, 70,252, 80,134,140,178,103,201, 62, 34,120, 9, 33, 62, 22, 28,235,125, 62,229,197,251,232, 36, 12,139, + 65, 15,232,130, 84, 5,212, 87, 28, 39,143,165, 2, 97,246,157, 69,209, 94,255, 87, 87, 70,105,242,179, 60,239,124, 29,200, 79, +159,187,253, 80, 14, 66,216, 87,242,188,218, 48, 42,183, 82, 11,117, 26,168, 12,102,232, 50,135,133, 24,148, 56, 93,209,146, 97, + 36,244, 44,194,210,120,202, 89, 41, 87,178,217, 92, 16, 6,204,242,185, 12, 41,132,128,211, 16,149,150, 66,248,114,248, 91,248, +179, 5,231, 92,254, 98,127, 4,107,153,175,253,188,208, 40, 44,225,118,152, 33,194,180,104, 71, 51, 24,237,223,192, 8,220, 35, +138,216,136, 24,106, 8,226, 69,172,107,210, 48,111, 37,242,178,191, 45,127, 19, 42,202,146,180, 72, 19,198, 23,227,228, 93,253, +133,248,197,238,196, 93,212,244,160, 45,252,220, 78, 87,251,153,154,103,144,134,120,110,197,152, 28, 19,121,141,242, 36,168,224, + 9, 87, 78,138,222,177,140, 5, 61, 22,187,226,134,224,243,241, 55, 83, 44, 35, 1,203,104,155, 98,111,228, 56,149, 72, 98,186, +181,137,201, 36,133,209,178, 9,111,105,145, 56, 45, 81, 76,243, 77,125, 5,209, 88, 38,131, 76, 45,167,198, 86,200,196,111,228, +255, 72,103,114,220,158,168, 83, 45,168, 23,146,163,140,216,149, 79, 13,219,230, 44,202, 80,215,167, 27, 69,129, 24,207,187, 75, +165,196,161,111, 23,211, 37, 89,124, 1,220, 37, 56,239, 92,152, 43, 20,207,236,194, 32, 26, 2,184, 3,151, 87, 58, 99, 84, 85, + 7, 10,222,113, 56, 38, 48, 42, 2,207, 14,101, 79, 82,218, 12,249,250, 74, 99,215, 28,226, 62, 30,205, 72,114,182, 46,166, 74, + 94,138, 90,198,140, 8,174,156,197, 8, 64, 48,208,196,152,206,131,156, 44,227,199,135,130,147,181, 73,137, 59,179, 51,243,197, +124, 81, 68,163,159,126,239,143, 0,148, 93,203, 74,195, 64, 20,157,153, 38,213, 84, 69,180,130,130, 32,168,223,225,194, 7, 46, + 68,221,246, 59, 92,248, 21,214,159, 18,116,235,214, 23,130,214,199,166, 69,138,210,154,182, 51,227,125,204, 76, 30,181,136, 89, + 72,168,100,154,152,120,115,238,189,231,158,243,119,124,111,143,149, 62,126,221,250,125,196,176,215, 20,106,177,126,210,110,135, +146, 11,160,254,203,171,171,210, 62, 87,111,158, 91, 45, 56,117, 14,253,124,219, 23,234,117,248,185,189,183,199,248, 61, 44, 2, + 59, 28,169,225,124,224, 88,216,129, 99,207,207,206, 14,143,143, 27,141, 70,179,217,100,252, 14,183,249,165,133,219,201,233,105, + 45,169,221,209,202,121,130,188, 40,170,217,220,223, 98, 81,101,161,142,221,208,173,221, 29,194,239, 45,248, 34,248, 36,169, 37, +251, 71, 7,112, 28, 32,125,199, 83,102,169,144,156,202, 49, 47,117,119,123,147,235,255, 59,178,154,115,100,203,146, 38,219, 21, +186, 99,123,171, 42, 90,143, 18, 72,225,158,204, 32, 17,134,121,141,108,170, 23,166, 91,131,165,181,240, 37,251, 24,249, 83,136, + 99, 59,163,193,116, 69, 37, 21, 53,180, 88,245,254, 40, 63,250,226, 35, 85, 23,239, 95, 40, 85, 22,161,200, 1,230,140, 56,244, +204,202,171,238, 31,193, 83,149, 36,143, 64,230,216,166, 50,244,250,140,154,171,138,217,116,212,131, 92, 21, 45, 12, 53,242,195, + 98,180,141,131,228, 20, 18, 88, 65,118,148, 50,181,195,239, 81,127,166, 58, 51, 31, 45,119,134,175, 26,126,201,120, 77, 58,238, +138, 51,186,205,154,128,186, 80, 73,176,236,156,231,131, 59, 65,116, 54, 77, 29,177, 57,134,155,219,144, 99,186,228, 69, 49,119, +105, 66, 43,149,201,143,129, 22, 41, 69,222,176,194,120,142,154, 20,101,189, 54, 59, 9,131,255, 49,181, 90,156,126,252,157, 48, + 70, 33, 62,144, 38,149,147, 19, 67, 44,156,161,124,230, 87,134,241, 83,223,131, 43, 1,115,186,101,194, 75, 85,227,248,175,156, +204,122,151, 36,135,224,184, 24,129, 37,233, 94, 34, 86,152,188, 84,128, 9,154,236, 1,137,231,255, 36,210, 99,118, 21,108,230, + 61, 25,116,156,189, 86,202,171,188, 12,142, 21, 19,223,151,255,216,136, 75, 46,162,226,114, 8,225,173, 29, 7,239,138, 94, 18, + 33,184,179,155, 38, 37,202,114,109,105,243,177,253, 80,116,115,197,235,170, 96,141, 37, 70, 55, 84, 25,117, 7,157,165,169,149, +215,207,183,217,197, 13, 88, 43, 86,106, 96,236, 20, 9, 61, 99,233, 70,107, 38,131,193,101,166, 84, 33, 39, 29, 36, 77,142, 75, + 44,177, 97,121, 18,194,100, 29, 17,126,246, 56,100,147,169, 13,245,107,181,111, 70,216,204, 88,152,200,150,244,196, 50,227,118, + 72, 33, 94,121, 75,128,240,222,213,190, 55, 83,149,149, 90, 60, 7,153,125, 47,237,246,245, 55,156,205,143, 0,156, 93, 77,111, +218, 64, 20,220, 93,203,124, 88,145, 74, 3,167, 40,185,181,106,110, 37,215,252, 8,254, 29,127,132,228, 70, 34,164, 86, 54, 85, + 20,169, 85,111,189,181,193,199,128, 26, 34, 57,216, 94,239,102,223,123,222, 93,187, 77,168, 84, 14,200, 32,100,175,204, 50, 59, +204,190, 55,243, 63,245,145,134,164, 59,216,117,199,134, 50, 27, 90, 61, 30,143, 9,151,225,229,233,233,213,124,126,130,143,233, +116, 74,159,113,199, 6,133, 39,147, 9,209,249,225,104,180,140, 99, 58, 33, 73,246,203, 36,161,247,147, 56, 38,229,231, 69,158, +213,143,162,203,217, 12,116,158,243,115,195,226,205, 21, 23,243,185, 27, 91,186,186,187,156, 93,152,131,143,103,103,230,249,251, +215,111,234,175, 31, 1, 98,132, 72, 87,169, 57,190, 73,190,108,238,215,135,163,225,109,178, 60, 58, 57, 54, 39,255,124,189,128, +165, 43,219,165,119,169, 97,244,239, 62,188,255,116,181, 96, 53, 79,196, 40, 87,154, 55,237, 38,199,166,125, 85, 96, 39, 95,198, +194,183,156, 29, 64,181, 9,104,202,199,135,253, 65,222,219,100,187,123,179,204, 50,208, 62,120,131, 4, 5, 54,230,180,135,253, + 83,230, 75,122, 64, 99,226, 30,218,233, 70,129,232,118,130, 65, 20, 14,251,221,248,199,239,159,141, 27,114, 36,184,196,244, 69, + 51, 73, 75, 67, 28, 20,231,126,182,184,226, 49,202, 66, 33,172,247,126, 43,184, 23,164,145,161, 43, 46, 14, 66, 21,109,139,237, + 83,241, 36,153,130, 74, 82,228,249, 5,238,222,228, 74,134, 80, 67,102,240, 61, 16,224, 99,195, 74, 85,200,240, 77, 55, 24, 60, +154, 63, 42,220,109, 18,106, 15,227,120,122,225, 37, 87,236, 32, 69,124,169, 24,101, 46,161,246,206,236,238, 43,247, 97, 66,186, +237,236,255, 10,178, 59,192,242,108,180,225, 83,235,212,129, 86, 55,140,218,215, 12,180,135, 15,106,225,215,223, 38,184,243,125, + 53,193, 80,175, 94,167, 59,169,150, 97, 82,237, 69, 70,235,162,112,163,172,112,237,117, 67,111, 68, 10,121,127, 77, 40,154,102, + 86, 78, 17,236,133,238, 33,109,163,156,124,121,127,189,234, 54,179,173,181,203, 47,108, 53, 7,252, 81, 25, 67,233,199,202,195, +184,211,154, 90, 85,148, 46,152, 68,187,160, 20,237, 59, 24, 96,207,163,118,189,251,135, 56,179,199,100,134, 91,135, 22,253,186, +170,102,223,108,251,134, 64, 54,103, 39,151,185,185,244,106,243,171,217, 56,101,203, 93,120,169,193, 23, 0,218,254, 96,128,149, +100,229,227,110,187,206,134, 81,167,187, 99, 25,246, 50, 9, 69,230, 70, 72,141, 48,208, 25,124,128,112,222, 74, 85,223,224, 74, +214,232,204, 44,172, 11, 2,119, 1,102, 3, 26,245, 25,216,149, 13,172, 65,139,110, 71,235, 85, 62,208,151, 98,133, 20,217,144, + 97,180,167, 32, 88, 64,238, 79,105,171, 10,189, 11,228, 67,177, 93,231,165, 4,179, 4, 80, 17,159, 5,224,236,106,122,154, 8, +194,240,204,108,105,187, 5,138, 4,185,146, 24,117,241, 39,168,191,193, 61,120, 16, 19, 46,198,147,137,253, 23, 28,252, 27, 61, +155,120, 33,122, 48, 33, 49,225,208, 26, 18,146, 70, 60, 53,241, 15,128,144,136, 1,180,116,222, 29,159,153,121,103, 63,202,130, +209, 61,109,218,221,110,187,157,125,230,153,247,227,121,254, 13,223,199,110,235,245,122,224,233,128,233,124,223,135,107,128,245, + 0,229,126,191, 15,132, 5,112,167,105, 10,124, 7,242,226, 48, 79,174,203,251, 56, 11,239,130,122,119, 58, 29,236, 3,199,241, +122,226, 66, 64, 73,146,108,132,215, 7,131,193,117, 79,158, 47,224,193, 28,128, 41, 97, 56, 28,226,234, 79,210,244,211,206, 78, + 94,252,131, 13, 31,248,102,107,235,225,227, 71,184, 75,192,247, 58, 73, 51,251,168, 28,140, 70,247,146,228,233,243,103,224,236, + 95, 71, 95,246, 6,159, 63,190,255,176,185,242,226,229,235, 87, 56, 98,251,237,187,111,227,241,221,245, 4,116,126, 23,248, 30, + 28, 34, 66, 65, 68, 33,111, 59,251,108, 7,134,230, 51,130, 39, 86,146,204, 78, 6, 36,244,222,241,121, 83,137,174,148,107,173, +118,151,244,161,158,158, 90, 10,207,249,200,166, 51,217,152,216,240, 78, 20, 91, 42,109, 71, 5,184,195,173,150,237, 46, 93,136, +163, 7,171,113,220,105,239,127,191,192, 96, 93,203,232,216,117,184,117, 69,212,142, 90,191, 50, 91, 99,110, 19, 49,202,214,183, + 27, 79,224,133, 12,225, 84, 47, 74,152,183,125,249,149,134,114,207, 40, 57,201, 95,156,160, 90, 96,238,244, 27,196, 92, 91,141, + 36,155,142,119,171, 78, 98,218, 43,157,147,135,150,164,180, 71, 32,202,162, 51,115,186, 58,127, 91,202, 57,109,173,159, 76,232, + 70,102,171, 50,229, 28,105,104,118, 81,201, 21, 37, 65, 65,192,187,146,113,200, 61,239, 71, 45, 57,166, 6,178, 89,139,236, 69, +171,106, 8,254,154,146, 96,225,127, 21,247,214, 86, 40, 70, 53,224,110,110, 20, 13, 14,161, 0,227,123, 77,165, 44,164, 37,243, +128,140, 97, 31, 31, 46, 62,244,243,110,225, 42, 14,106, 47, 69, 85,117, 64, 85, 90,177,242,116, 66,221, 8, 23, 85, 19,212, 89, +111,107, 81,200,246, 94,215, 28, 16,236,142, 57,110, 17,214,169,165,111, 30, 38,166, 34,118,111,174,232, 0,123,199,172,134,205, + 64, 10,170,239,186, 45,123,159,254,229,127,163,170,242,189,169,159, 36,166,229,187, 64, 38, 91,110, 47, 78,206, 38,110,208, 78, +175,248,191, 23, 49, 86, 95,205,162, 84,227,199,229,201,124,115,233,232,252,240,126,124, 71,131,202, 16, 87,102,133, 74, 38,146, +156, 68,117,209, 47,155,216, 36,239,204,165, 66, 67,172,187,138,201, 88, 72,192,174,222, 26,156,162,231,176,187, 14,101,148,196, +110, 30,188,254,207, 11,174, 50,215, 9, 85,237, 20,227,159,111, 74,234,155, 36, 46, 47,178,159, 4,186,197, 44,196,252, 17,128, +183,107,201,105, 24, 6,162, 30,199, 73,212, 66, 81,145, 42,144, 16, 44, 89,113, 21,212,115, 32,216,210, 3,148, 5,199, 97, 81, + 46,195, 1,144, 88, 32,177, 8, 45,109,113,226,224, 25,127,226,196, 65,252, 36,178,104,187,168, 26, 37,241, 76,223, 60,207,123, + 3, 3,116,157,130, 85,207,160,139, 31,108,103, 95,207,102, 58,113,223, 47, 22,236,223, 15,136,250,142,245,113, 62,157, 26, 72, +126,113,117,121, 59,191, 49,159,161, 33,227,146,186,199,177,178,137, 82, 79, 94,240, 0,248,120,144, 27, 11, 30,193,238, 89,245, + 64, 9,143,156,131, 87,176, 98, 41,122,216,250,237, 48, 17,167, 2, 10, 41,159, 74,181,164,167,149, 19, 41, 95,144, 63,220, 24, + 69,105, 92, 47,180, 73,150, 76,134,217,193, 40, 61, 59,218,121,220,168,187,135,151,231,183,119,236,196,210, 24,154, 54,126,149, +105,191, 64,209, 18,138,171, 77, 87, 58,152,140,199,129,181,123,189,237, 56, 20,110, 50,138, 5, 23, 40,188, 81, 60,231, 35,168, +242,149,124,221,234,122,183, 42,201, 16,163, 44,221, 72, 54, 3,243, 13,253,154,216,107, 65, 21,133, 72,210,241, 96,191,100,171, +165, 44,168,209, 66, 5, 55,207,174,215, 14, 10,166, 16,117,176,157, 8,123,231,241,107,154, 7,163, 33, 15, 10, 92,113, 16, 72, +156, 2,204, 30,147,191,161,166,169,227, 54,254, 37, 51, 16,167, 75,238,136,157,246,119,224, 55, 43,214, 49, 97,188, 75, 12, 5, +162,185,198, 20, 18,250,108, 57, 0,194,105,161, 53,251,204,237,184, 14, 8,151, 56,179,123, 78,166,106, 81, 50,145, 95,167,189, +177, 54, 64,204,185,221,249,121,221,169,204, 2,189,113,159,201,187, 33,141,160, 1,248,140,125, 83,119,250,119, 25,166,255,241, +156,107, 48,180, 13, 3,131,219, 70, 23,192,242,148,137, 76,164, 41,100, 25, 78, 85, 18,195,100,239,120,247,100, 43,215,172,218, +172,229,134, 16,143,196, 30,196,218,224, 30, 70,254, 84, 72, 48, 74, 29, 44,232, 9,108,179,179,112,140,144,207, 48,138,100, 77, +110, 3, 64,213, 22,167, 43,151,181, 91,253,225, 30,135, 85,110,140, 23, 55,244,105,147,115,176, 20, 72,137,175, 34, 22, 8,221, +178, 52, 38,163,191, 16,254, 33, 0,115, 87,207,211, 48, 12, 68,115,118,146, 34, 49,128,196, 74,197, 0,252,255,133, 13,196, 31, +224, 79, 48,192,130,152, 90,145,164,181,125, 71,252,113,246, 57,165, 66, 2, 6,170,110,169, 84,201,114,158,207,239,222,123,215, +254, 33,188,254,147,207, 92,215, 95,174,215, 51,196,143,195,240,120,255,240,226, 9,159, 42, 3, 54,220, 92, 22, 87, 90, 97, 29, +207,145, 9,228, 41, 96,197,111, 32, 3, 1, 30, 36,131,208,145, 6, 93,137, 54,203,189, 83,136, 58, 9, 15,186,109,100,250,230, +167,111, 14,223,109,115,187,234,111, 90,220,236,221,132, 46,252, 88,157, 6,146,241,172, 85, 93,231, 67,112,174,207,187,171,139, + 19, 88,245,119,207, 31, 79,175, 27, 31, 90,170,253, 69,207, 98,148,193, 38, 20,208, 84, 52, 12, 74, 30,107, 69, 12, 17, 71,124, + 4,179,156,203, 53, 32, 66,202,116, 68,227, 96,178,219, 29,142,214,185,125,179, 67, 30,143,133,204,208,199,175, 14, 99,192,216, +127, 15,243,238,158,246, 67,223,181, 20, 18,112, 65, 22,130,144,163,155, 43,124,199,148,208, 91, 56, 25, 34, 22,116,167, 70, 31, + 38,133, 54, 84,220,113, 54,208,215, 83,155,115,186, 1, 44,242, 10,240, 8,253,114, 76, 4, 77, 95, 33,187,170,159,124, 91,182, +215,245,175,172, 16,149,196, 94, 39,160, 26, 14,188, 65,149,178, 3,202,160, 31, 85,124, 91, 92,218, 67, 17, 79, 46,137,109,177, + 80,114,182,117, 94, 97, 89,104,243, 31,167, 21,167,210,153, 81, 25,107,168,225,140,254,212, 55,198,133,213, 28,133,143,140,106, + 15, 14,167,222,255,100,246,225,239,128,106,121, 0,142, 66, 55,153,153, 68,240,177,238,193,248,217,173,172, 49, 74,251,105,147, + 10,245, 8, 91, 75,166,211,253,224,118,254, 62,237,226, 52,241,116,104, 25,178,202, 43,107, 48, 22,112,243,241, 96,155,168, 47, +104, 12, 39,114, 72, 2,205,178, 48, 55,120, 92,163, 3, 35,210, 50,114,195, 96, 8,142, 79,125, 44,100,179,100,216, 51, 46, 28, + 18, 81, 92,159,166, 32,176,137,199,132,148, 5,178,205,124, 59,209,159, 2, 16,119, 5, 57, 13,195, 64,208, 94,219, 73,219,208, +114, 67,220,144,144,248,255, 27,248, 10, 7, 14,192,161, 20,137,146,196,177,137,215, 94,199,155, 40, 82, 17, 72, 60,160, 81, 21, +199,235,153,245,204,236,111,241,251,191,215,119,201, 93, 15,158, 91, 42,202,198,232,218, 96, 41,200, 96,125,194, 32, 62, 79,244, +206, 55, 75, 63,235,209, 22,112,134,163,120, 25,105,129, 36,233,178,162, 53, 27,183,200, 78,195, 67,173,239, 13,188,156,237,219, + 48, 52, 10,174,181,220,111,225,170, 54, 55,135, 74, 86,230,185,117,143, 79,167,241, 12,208, 10, 16, 59, 4,173, 85,238, 80, 71, +237, 8,249,223,165, 66, 95, 41,200,156,238, 35,153,253, 43, 21, 12,164,144, 65, 91,131, 62, 93,172, 99,198, 30,142,253,177,243, + 45,178,206,222,166, 78, 75, 34, 36,136,217,149, 72, 70, 59, 21,249, 16,150,123,221,152,109, 83,239,222,187,215, 24,252, 91,140, + 51,154,163, 80, 10,150,241,148, 1, 25,255,191,115,101,222,128, 35,201, 12,109,205,201,120,239,153,206,218,229, 65, 28, 84,217, + 75, 32, 25,117,147,156, 10,208,240,162, 11, 86, 17,248,183,113,113,101, 23,107,249,233,203,159,207, 24,129,228,137,243,192, 89, + 35,117,228, 65, 20, 37,159, 78, 32,177,140,123,244,108, 62,245,196,108,216, 85,106,209,147, 41, 94,145, 19, 60, 23, 36, 26, 47, +179,143,166,220, 35,121,109, 75,169, 76,134, 77,195, 98,170, 42,163, 86,235,135,238, 95,149,151,125,125,248,104, 79, 73,131, 0, +117,135,149,125,166,146,146,169,249, 22,190,104,236,168, 40, 45,180, 86,186, 2, 83,137,141, 9, 49, 77,155,219,250,174,181,103, + 63,180,118,232,191,198, 66, 31, 48,251,200,113,253,231,136,218,241, 90, 14,247,130,119,168,112,181, 73,228,238, 32,105,216,163, +146,108,240, 83, 86, 65,232,209,219,201, 74, 70,119,194, 66, 59,186,151,206, 99,211,105,114, 83, 98,183,244,204, 48, 5,192, 5, +192, 10,212,138,116, 72, 26,180, 21,221,248,156,111, 1, 88, 59,191,214, 6, 97, 40,138,231, 36,138,179,202, 30,199,158, 10,123, + 89,191,255,231,232, 23,217, 63, 24,180,107,161,218,220,204,228, 38, 26,163,182,165, 91, 31,164, 80,168, 65,244,103,238, 73,238, + 57,127,226,251,221, 87,223,220,246,183, 55,218, 78, 99,162,207,204,242,253,178, 97,116,191, 36, 61, 53, 54, 72, 40, 47, 46,197, +229,248,223,163,247, 1, 34,166, 74,197,190,224, 65,217, 64,132,126, 9,222, 18, 40, 87, 10,155,149,122,173,139,151, 58,203,114, +245,213,154,143, 86,191,157,104,251,254, 35, 29,175,237,106, 39, 55,214,186,163, 47,235,172,191, 9,114, 41,158, 30,101, 85,226, +212,154,221,209,124, 31,164,245,146, 87,190, 33, 72, 16,104,184, 26,224,148, 9,247,160, 42, 47,225, 89,213, 62, 23, 77,190,167, +131,203, 19,224,224, 71,238,231,228,232, 3,184,162, 79,245, 1,149,241,151, 42,171, 59,196,239,232, 51, 20,236,110,104,114, 84, +232, 35,137,198, 14,221,152, 9,220,181, 9,206,224, 60,118, 26,192, 67, 99,207,222,113,196,210,160, 36, 80,114,150, 68,234,153, +107,122,156,187, 31, 36,238, 33,123, 58,253,190,118,171, 47,224, 30,169, 19,205,132,245,125, 12,244,132,242,161, 11, 41, 42,225, + 76, 26,191, 23, 73, 40, 34,133,251, 25, 11, 15,156,153, 80, 94,204,231,158,143,164,176, 89,184,139,107,169,217, 88,136,174,250, +175, 79,230, 88, 63,230, 59,156, 69,140, 69,188, 66, 7,247, 7,101,167, 51, 69, 97, 83,206,196,115,181, 46, 81, 30,155, 61,233, +166,227,187,182,226,140,245,128,212, 90,115, 35,240,217,205, 37, 66, 32, 35,245,237,205,142,242, 66, 15,106, 12, 23,151,134, 35, + 85,225, 11,154,120, 82,130,104,113,134,119,200,240, 59,192,239,150, 13, 57,154,253,244, 13,193,181,130,194,248,109,143,235,175, + 0,172, 93, 91,110, 2, 49, 12,204,132, 68,104,171, 34, 85, 85,239,127,177, 94,128, 27, 64,187, 73,220,152,196, 33, 47,162, 86, + 69,124, 0, 31, 88,139, 49, 19,175,237, 25, 51,190,243,173,202, 82,111,250,137,248,254,255, 37,185,248, 11,190, 15, 53,205,223, +216, 71, 7,241,237, 19, 48, 59,132, 70, 45, 66,221,126, 78, 8,105,201,122,206,223,123,136,215, 73, 69, 18, 49,164, 44,212,145, + 41,209, 42,137, 37, 20,109,161,212,157, 79,224, 30,168, 44, 95,143,177, 72, 71,195,115, 96,241, 47,253, 98,240,182, 29, 62, 94, +109,180,244,121,166,221, 21,189, 64,116,126,146,111,154,103,182,110,145, 99,188,195, 53, 92,118, 17, 26,240, 85,242,158, 55, 14, + 55,176, 14, 1,125,179,197,199, 1, 59, 93,132,225, 20, 72,245, 94,184,207, 11,102, 94,249, 4,220,131,104,214, 18, 53,139,220, + 84,159,152,214,249,226, 67, 96,109, 53,103,106, 69,210, 85,237, 93,207,165, 96,176,168,206,119,239,104,104, 54, 12, 19,223,120, + 28,204, 88, 99,125, 19,156,183,243, 26, 19, 51,212, 94, 64,241,186, 90,130,123, 7,202,243, 43, 68,213,138, 64,123,118,215,220, + 37,181, 4,119, 53, 96, 55, 61, 41,137,228, 56,214,214,179, 4,216,234,116,208,204, 35, 8,149,174, 73,226,160, 82,122,193,228, + 35, 29, 35,154,247,107,243,237,179,182,155, 61,157,204,251,183,187, 58,247,229,253, 30,210,192, 59, 15,170,177, 30, 0,171, 8, +228,238, 17,213,110,151, 61, 43,121,157, 94,184,187,151, 10, 11, 76,126, 73, 72,103, 85, 87,138,155,185, 32, 83, 75,116,160,167, + 60, 64,106, 53,217,108,202,232,127, 4, 24, 0, 58, 21,119, 57, 95, 10,227, 13, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, }; From 504fa6e2bc978d25ca1e75d061bd9b1c0dba7ef1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 Jun 2009 18:23:22 +0000 Subject: [PATCH 057/512] own copy/paste error, euler.wrapped would give a bad value --- source/blender/python/api2_2x/euler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/api2_2x/euler.c b/source/blender/python/api2_2x/euler.c index ae7eeed5d33..ce01d92dbda 100644 --- a/source/blender/python/api2_2x/euler.c +++ b/source/blender/python/api2_2x/euler.c @@ -432,7 +432,7 @@ static int Euler_setAxis( EulerObject * self, PyObject * value, void * type ) return 0; } -static PyObject *Euler_getWrapped( VectorObject * self, void *type ) +static PyObject *Euler_getWrapped( EulerObject * self, void *type ) { if (self->wrapped == Py_WRAP) Py_RETURN_TRUE; From a87bc73d321f5bddc17fb5c6332637738bfb7fa6 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 19 Jun 2009 04:45:56 +0000 Subject: [PATCH 058/512] NLA SoC: Transition Strips + Strip Adding Operators + Bugfixes == Transitions == Transition strips are now able to be created + evaluated. Transitions allow for interpolation between the endpoints of two adjacent strips in the same track (i.e. two strips which occur in the same track one after the other, but with a gap between them). - The current behaviour when only one endpoint affects some setting is non-optimal, since it appears somewhat inconsistently extend/replace values... - Transform code needs a few fixes still to deal with these == Strip Adding Operators == * New strips referencing Actions can be added using the Shift-A hotkey while in the strips-area. You must have a track selected first though. The new strip will get added, starting from the current frame, in the selected track(s) only if there is enough space to do so. Otherwise, the new strip gets added at the top of the stack in a new track. * New transition strips can be added with the Shift-T hotkey while in the strips area. You must have two adjacent strips selected for this to work. == New Backend Methods == * Recoded the strip/track adding API to be more flexible * Added a new method for testing whether F-Curve has any modifiers of with certain attributes. Will be used in a later bugfix... == Bugfixes == - Fixed bug with strip-blending which caused the blending modes to be useless. - NLA buttons now use proper poll callbacks instead of defining checks - Commented out missing operator in menus, silencing warnings in console - Removed obsolete/incorrect comments --- source/blender/blenkernel/BKE_fcurve.h | 2 + source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenkernel/intern/anim_sys.c | 156 +++++++++++- source/blender/blenkernel/intern/fcurve.c | 36 +++ source/blender/blenkernel/intern/nla.c | 72 +++--- .../blender/editors/space_nla/nla_buttons.c | 65 +++-- source/blender/editors/space_nla/nla_draw.c | 23 +- source/blender/editors/space_nla/nla_edit.c | 229 +++++++++++++++++- source/blender/editors/space_nla/nla_header.c | 5 +- source/blender/editors/space_nla/nla_intern.h | 3 + source/blender/editors/space_nla/nla_ops.c | 7 + 11 files changed, 536 insertions(+), 64 deletions(-) diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index 7058b9d236a..af272e892f2 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -112,6 +112,8 @@ void fcurve_free_modifiers(struct FCurve *fcu); struct FModifier *fcurve_find_active_modifier(struct FCurve *fcu); void fcurve_set_active_modifier(struct FCurve *fcu, struct FModifier *fcm); +short fcurve_has_suitable_modifier(FCurve *fcu, int mtype, short acttype); + float evaluate_time_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float cvalue, float evaltime); void evaluate_value_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float *cvalue, float evaltime); diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 078c1ba52bb..5200ca6d4d7 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -61,6 +61,8 @@ void BKE_nlatrack_solo_toggle(struct AnimData *adt, struct NlaTrack *nlt); short BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); +short BKE_nlatrack_add_strip(struct NlaTrack *nlt, struct NlaStrip *strip); + struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index a864e3d4e87..2efb4f2b2d3 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -558,13 +558,20 @@ typedef struct NlaEvalStrip { short track_index; /* the index of the track within the list */ short strip_mode; /* which end of the strip are we looking at */ + + float strip_time; /* time at which which strip is being evaluated */ } NlaEvalStrip; /* NlaEvalStrip->strip_mode */ enum { + /* standard evaluation */ NES_TIME_BEFORE = -1, NES_TIME_WITHIN, NES_TIME_AFTER, + + /* transition-strip evaluations */ + NES_TIME_TRANSITION_START, + NES_TIME_TRANSITION_END, } eNlaEvalStrip_StripMode; @@ -583,10 +590,10 @@ typedef struct NlaEvalChannel { /* ---------------------- */ -/* non clipped mapping for strip-time <-> global time +/* non clipped mapping for strip-time <-> global time (for Action-Clips) * invert = convert action-strip time to global time */ -static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) +static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short invert) { float length, actlength, repeat, scale; @@ -603,8 +610,8 @@ static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) if (IS_EQ(actlength, 0.0f)) actlength = 1.0f; /* length of strip */ - length = strip->end - strip->start; - if (IS_EQ(length, 0.0f)) length= actlength * scale * repeat; + length= actlength * scale * repeat; + if (IS_EQ(length, 0.0f)) length= strip->end - strip->start; /* reversed = play strip backwards */ if (strip->flag & NLASTRIP_FLAG_REVERSE) { @@ -623,6 +630,48 @@ static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) } } +/* non clipped mapping for strip-time <-> global time (for Transitions) + * invert = convert action-strip time to global time + */ +static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short invert) +{ + float length; + + /* length of strip */ + length= strip->end - strip->start; + + /* reversed = play strip backwards */ + if (strip->flag & NLASTRIP_FLAG_REVERSE) { + /* invert = convert within-strip-time to global time */ + if (invert) + return strip->end - (length * cframe); + else + return (strip->end - cframe) / length; + } + else { + /* invert = convert within-strip-time to global time */ + if (invert) + return (length * cframe) + strip->start; + else + return (cframe - strip->start) / length; + } +} + +/* non clipped mapping for strip-time <-> global time + * invert = convert action-strip time to global time + */ +static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) +{ + switch (strip->type) { + case NLASTRIP_TYPE_TRANSITION: /* transition */ + return nlastrip_get_frame_transition(strip, cframe, invert); + + case NLASTRIP_TYPE_CLIP: /* action-clip (default) */ + default: + return nlastrip_get_frame_actionclip(strip, cframe, invert); + } +} + /* calculate influence of strip based for given frame based on blendin/out values */ static float nlastrip_get_influence (NlaStrip *strip, float cframe) { @@ -631,7 +680,6 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe) strip->blendout= (float)fabs(strip->blendout); /* result depends on where frame is in respect to blendin/out values */ - // the +0.0001 factors are to combat rounding errors if (IS_EQ(strip->blendin, 0)==0 && (cframe <= (strip->start + strip->blendin))) { /* there is some blend-in */ return (float)fabs(cframe - strip->start) / (strip->blendin); @@ -746,12 +794,13 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index * - negative influence is not supported yet... how would that be defined? */ // TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on... - // TODO: should we clamp the time to only be on the endpoints of the strip? nlastrip_evaluate_controls(estrip, ctime); if (estrip->influence <= 0.0f) // XXX is it useful to invert the strip? return; - /* check if strip has valid data to evaluate */ + /* check if strip has valid data to evaluate, + * and/or perform any additional type-specific actions + */ switch (estrip->type) { case NLASTRIP_TYPE_CLIP: /* clip must have some action to evaluate */ @@ -760,9 +809,12 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index break; case NLASTRIP_TYPE_TRANSITION: /* there must be strips to transition from and to (i.e. prev and next required) */ - // TODO: what happens about cross-track transitions? if (ELEM(NULL, estrip->prev, estrip->next)) return; + + /* evaluate controls for the relevant extents of the bordering strips... */ + nlastrip_evaluate_controls(estrip->prev, estrip->start); + nlastrip_evaluate_controls(estrip->next, estrip->end); break; } @@ -773,6 +825,7 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index nes->strip= estrip; nes->strip_mode= side; nes->track_index= index; + nes->strip_time= estrip->strip_time; BLI_addtail(list, nes); } @@ -847,6 +900,8 @@ static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, nec->prop= prop; nec->index= fcu->array_index; } + else + *newChan= 0; /* we can now return */ return nec; @@ -856,6 +911,7 @@ static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, short newChan, float value) { NlaStrip *strip= nes->strip; + short blendmode= strip->blendmode; float inf= strip->influence; /* if channel is new, just store value regardless of blending factors, etc. */ @@ -863,13 +919,19 @@ static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, shor nec->value= value; return; } + + /* if this is being performed as part of transition evaluation, incorporate + * an additional weighting factor for the influence + */ + if (nes->strip_mode == NES_TIME_TRANSITION_END) + inf *= nes->strip_time; /* premultiply the value by the weighting factor */ if (IS_EQ(inf, 0)) return; value *= inf; /* perform blending */ - switch (strip->blendmode) { + switch (blendmode) { case NLASTRIP_MODE_ADD: /* simply add the scaled value on to the stack */ nec->value += value; @@ -938,8 +1000,80 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N } } +/* evaluate transition strip */ +static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +{ + ListBase tmp_channels = {NULL, NULL}; + NlaEvalChannel *nec, *necn, *necd; + NlaEvalStrip tmp_nes; + NlaStrip *s1, *s2; + + /* get the two strips to operate on + * - we use the endpoints of the strips directly flanking our strip + * using these as the endpoints of the transition (destination and source) + * - these should have already been determined to be valid... + * - if this strip is being played in reverse, we need to swap these endpoints + * otherwise they will be interpolated wrong + */ + if (nes->strip->flag & NLASTRIP_FLAG_REVERSE) { + s1= nes->strip->next; + s2= nes->strip->prev; + } + else { + s1= nes->strip->prev; + s2= nes->strip->next; + } + + /* prepare template for 'evaluation strip' + * - based on the transition strip's evaluation strip data + * - strip_mode is NES_TIME_TRANSITION_* based on which endpoint + * - strip_time is the 'normalised' (i.e. in-strip) time for evaluation, + * which doubles up as an additional weighting factor for the strip influences + * which allows us to appear to be 'interpolating' between the two extremes + */ + tmp_nes= *nes; + + /* evaluate these strips into a temp-buffer (tmp_channels) */ + /* first strip */ + tmp_nes.strip_mode= NES_TIME_TRANSITION_START; + tmp_nes.strip= s1; + nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_nes); + + /* second strip */ + tmp_nes.strip_mode= NES_TIME_TRANSITION_END; + tmp_nes.strip= s2; + nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_nes); + + + /* optimise - abort if no channels */ + if (tmp_channels.first == NULL) + return; + + + /* accumulate results in tmp_channels buffer to the accumulation buffer */ + for (nec= tmp_channels.first; nec; nec= necn) { + /* get pointer to next channel in case we remove the current channel from the temp-buffer */ + necn= nec->next; + + /* try to find an existing matching channel for this setting in the accumulation buffer */ + necd= nlaevalchan_find_match(channels, &nec->ptr, nec->prop, nec->index); + + /* if there was a matching channel already in the buffer, accumulate to it, + * otherwise, add the current channel to the buffer for efficiency + */ + if (necd) + nlaevalchan_accumulate(necd, nes, 0, nec->value); + else { + BLI_remlink(&tmp_channels, nec); + BLI_addtail(channels, nec); + } + } + + /* free temp-channels that haven't been assimilated into the buffer */ + BLI_freelistN(&tmp_channels); +} + /* evaluates the given evaluation strip */ -// TODO: only evaluate here, but flush in one go using the accumulated channels at end... static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) { /* actions to take depend on the type of strip */ @@ -948,7 +1082,7 @@ static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip nlastrip_evaluate_actionclip(ptr, channels, nes); break; case NLASTRIP_TYPE_TRANSITION: /* transition */ - // XXX code this... + nlastrip_evaluate_transition(ptr, channels, nes); break; } } diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 5820761234c..d8b5135a1b1 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2242,6 +2242,42 @@ void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm) fcm->flag |= FMODIFIER_FLAG_ACTIVE; } +/* Do we have any modifiers which match certain criteria + * - mtype - type of modifier (if 0, doesn't matter) + * - acttype - type of action to perform (if -1, doesn't matter) + */ +short fcurve_has_suitable_modifier (FCurve *fcu, int mtype, short acttype) +{ + FModifier *fcm; + + /* if there are no specific filtering criteria, just skip */ + if ((mtype == 0) && (acttype == 0)) + return (fcu && fcu->modifiers.first); + + /* sanity checks */ + if ELEM(NULL, fcu, fcu->modifiers.first) + return 0; + + /* find the first mdifier fitting these criteria */ + for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + short mOk=1, aOk=1; /* by default 1, so that when only one test, won't fail */ + + /* check if applicable ones are fullfilled */ + if (mtype) + mOk= (fcm->type == mtype); + if (acttype > -1) + aOk= (fmi->acttype == acttype); + + /* if both are ok, we've found a hit */ + if (mOk && aOk) + return 1; + } + + /* no matches */ + return 0; +} + /* Evaluation API --------------------------- */ /* evaluate time modifications imposed by some F-Curve Modifiers diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index cef14128032..0684d943754 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -293,9 +293,8 @@ NlaStrip *add_nlastrip (bAction *act) /* Add new NLA-strip to the top of the NLA stack - i.e. into the last track if space, or a new one otherwise */ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) { - NlaStrip *strip, *ns; + NlaStrip *strip; NlaTrack *nlt; - short not_added = 1; /* sanity checks */ if ELEM(NULL, adt, act) @@ -306,35 +305,14 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) if (strip == NULL) return NULL; - /* check if the last NLA-track (if it exists) has any space for this strip: - * - if so, add this strip to that track - */ - if ( (adt->nla_tracks.last == NULL) || - (BKE_nlatrack_has_space(adt->nla_tracks.last, strip->start, strip->end)==0) ) - { - /* no space, so add to a new track... */ + /* firstly try adding strip to last track, but if that fails, add to a new track */ + if (BKE_nlatrack_add_strip(adt->nla_tracks.last, strip) == 0) { + /* trying to add to the last track failed (no track or no space), + * so add a new track to the stack, and add to that... + */ nlt= add_nlatrack(adt, NULL); + BKE_nlatrack_add_strip(nlt, strip); } - else - { - /* there's some space, so add to this track... */ - nlt= adt->nla_tracks.last; - } - - /* find the right place to add the strip to the nominated track */ - for (ns= nlt->strips.first; ns; ns= ns->next) { - /* if current strip occurs after the new strip, add it before */ - if (ns->start > strip->end) { - BLI_insertlinkbefore(&nlt->strips, ns, strip); - not_added= 0; - break; - } - } - if (not_added) { - /* just add to the end of the list of the strips then... */ - BLI_addtail(&nlt->strips, strip); - } - /* returns the strip added */ return strip; @@ -490,6 +468,40 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) nlt->strips.last= tmp.last; } +/* Add the given NLA-Strip to the given NLA-Track, assuming that it + * isn't currently attached to another one + */ +short BKE_nlatrack_add_strip (NlaTrack *nlt, NlaStrip *strip) +{ + NlaStrip *ns; + short not_added = 1; + + /* sanity checks */ + if ELEM(NULL, nlt, strip) + return 0; + + /* check if any space to add */ + if (BKE_nlatrack_has_space(nlt, strip->start, strip->end)==0) + return 0; + + /* find the right place to add the strip to the nominated track */ + for (ns= nlt->strips.first; ns; ns= ns->next) { + /* if current strip occurs after the new strip, add it before */ + if (ns->start > strip->end) { + BLI_insertlinkbefore(&nlt->strips, ns, strip); + not_added= 0; + break; + } + } + if (not_added) { + /* just add to the end of the list of the strips then... */ + BLI_addtail(&nlt->strips, strip); + } + + /* added... */ + return 1; +} + /* NLA Strips -------------------------------------- */ /* Find the active NLA-strip within the given track */ @@ -571,7 +583,7 @@ short nlastrip_is_first (AnimData *adt, NlaStrip *strip) /* should be first now */ return 1; } - + /* Tools ------------------------------------------- */ /* For the given AnimData block, add the active action to the NLA diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index cb21dd66934..cb76f7fc735 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -144,11 +144,38 @@ static int nla_panel_context(const bContext *C, PointerRNA *nlt_ptr, PointerRNA return found; } +#if 0 static int nla_panel_poll(const bContext *C, PanelType *pt) { return nla_panel_context(C, NULL, NULL); } +#endif +static int nla_track_panel_poll(const bContext *C, PanelType *pt) +{ + PointerRNA ptr; + return (nla_panel_context(C, &ptr, NULL) && (ptr.data != NULL)); +} + +static int nla_strip_panel_poll(const bContext *C, PanelType *pt) +{ + PointerRNA ptr; + return (nla_panel_context(C, NULL, &ptr) && (ptr.data != NULL)); +} + +static int nla_strip_actclip_panel_poll(const bContext *C, PanelType *pt) +{ + PointerRNA ptr; + NlaStrip *strip; + + if (!nla_panel_context(C, NULL, &ptr)) + return 0; + if (ptr.data == NULL) + return 0; + + strip= ptr.data; + return (strip->type == NLASTRIP_TYPE_CLIP); +} /* -------------- */ @@ -163,8 +190,6 @@ static void nla_panel_track (const bContext *C, Panel *pa) /* check context and also validity of pointer */ if (!nla_panel_context(C, &nlt_ptr, NULL)) return; - if (nlt_ptr.data == NULL) - return; block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); @@ -185,8 +210,6 @@ static void nla_panel_properties(const bContext *C, Panel *pa) /* check context and also validity of pointer */ if (!nla_panel_context(C, NULL, &strip_ptr)) return; - if (strip_ptr.data == NULL) - return; block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); @@ -239,8 +262,6 @@ static void nla_panel_actclip(const bContext *C, Panel *pa) /* check context and also validity of pointer */ if (!nla_panel_context(C, NULL, &strip_ptr)) return; - if (strip_ptr.data == NULL) - return; // XXX FIXME: move this check into a poll callback if (RNA_enum_get(&strip_ptr, "type") != NLASTRIP_TYPE_CLIP) @@ -279,8 +300,6 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) /* check context and also validity of pointer */ if (!nla_panel_context(C, NULL, &strip_ptr)) return; - if (strip_ptr.data == NULL) - return; block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); @@ -291,6 +310,24 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) // animated_time } +/* F-Modifiers for active NLA-Strip */ +static void nla_panel_modifiers(const bContext *C, Panel *pa) +{ + PointerRNA strip_ptr; + uiLayout *layout= pa->layout; + //uiLayout *column, *row, *subcol; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, NULL, &strip_ptr)) + return; + + block= uiLayoutGetBlock(layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + // TODO... +} + /* ******************* general ******************************** */ @@ -302,35 +339,35 @@ void nla_buttons_register(ARegionType *art) strcpy(pt->idname, "NLA_PT_track"); strcpy(pt->label, "Active Track"); pt->draw= nla_panel_track; - pt->poll= nla_panel_poll; + pt->poll= nla_track_panel_poll; BLI_addtail(&art->paneltypes, pt); pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel properties"); strcpy(pt->idname, "NLA_PT_properties"); strcpy(pt->label, "Active Strip"); pt->draw= nla_panel_properties; - pt->poll= nla_panel_poll; + pt->poll= nla_strip_panel_poll; BLI_addtail(&art->paneltypes, pt); pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel properties"); strcpy(pt->idname, "NLA_PT_actionclip"); strcpy(pt->label, "Action Clip"); pt->draw= nla_panel_actclip; - pt->poll= nla_panel_poll; // XXX need a special one to check for 'action clip' types only + pt->poll= nla_strip_actclip_panel_poll; BLI_addtail(&art->paneltypes, pt); pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel evaluation"); strcpy(pt->idname, "NLA_PT_evaluation"); strcpy(pt->label, "Evaluation"); pt->draw= nla_panel_evaluation; - pt->poll= nla_panel_poll; + pt->poll= nla_strip_panel_poll; BLI_addtail(&art->paneltypes, pt); pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel modifiers"); strcpy(pt->idname, "NLA_PT_modifiers"); strcpy(pt->label, "Modifiers"); - //pt->draw= nla_panel_modifiers; - pt->poll= nla_panel_poll; + pt->draw= nla_panel_modifiers; + pt->poll= nla_strip_panel_poll; BLI_addtail(&art->paneltypes, pt); } diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 8d417a150aa..3a3f86bb5a3 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -202,11 +202,20 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View char str[256]; rctf rect; - /* for now, just init the string with a fixed-format */ - if (strip->act) - sprintf(str, "%d | Act: %s | %.2f <-> %.2f", index, strip->act->id.name+2, strip->start, strip->end); - else - sprintf(str, "%d | Act: ", index); + /* for now, just init the string with fixed-formats */ + switch (strip->type) { + case NLASTRIP_TYPE_TRANSITION: /* Transition */ + sprintf(str, "%d | Transition | %.2f <-> %.2f", index, strip->start, strip->end); + break; + + case NLASTRIP_TYPE_CLIP: /* Action-Clip (default) */ + default: + if (strip->act) + sprintf(str, "%d | Act: %s | %.2f <-> %.2f", index, strip->act->id.name+2, strip->start, strip->end); + else + sprintf(str, "%d | Act: ", index); // xxx... need a better format? + break; + } /* set text colour - if colours (see above) are light, draw black text, otherwise draw white */ if (strip->flag & (NLASTRIP_FLAG_ACTIVE|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_TWEAKUSER)) @@ -295,7 +304,9 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) { AnimData *adt= BKE_animdata_from_id(ale->id); - /* just draw a semi-shaded rect spanning the width of the viewable area if there's data */ + /* just draw a semi-shaded rect spanning the width of the viewable area if there's data, + * and a second darker rect within which we draw keyframe indicator dots if there's data + */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index e8af67aebd1..2996a005177 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -48,6 +48,8 @@ #include "BKE_animsys.h" #include "BKE_nla.h" #include "BKE_context.h" +#include "BKE_library.h" +#include "BKE_main.h" #include "BKE_report.h" #include "BKE_screen.h" #include "BKE_utildefines.h" @@ -215,6 +217,229 @@ void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) /* *********************************************** */ /* NLA Editing Operations */ +/* ******************** Add Action-Clip Operator ***************************** */ +/* Add a new Action-Clip strip to the active track (or the active block if no space in the track) */ + +/* pop up menu allowing user to choose the action to use */ +static int nlaedit_add_actionclip_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + Main *m= CTX_data_main(C); + bAction *act; + uiPopupMenu *pup; + uiLayout *layout; + + pup= uiPupMenuBegin(C, "Add Action Clip", 0); + layout= uiPupMenuLayout(pup); + + /* loop through Actions in Main database, adding as items in the menu */ + for (act= m->action.first; act; act= act->id.next) + uiItemStringO(layout, act->id.name+2, 0, "NLAEDIT_OT_add_actionclip", "action", act->id.name); + uiItemS(layout); + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +/* add the specified action as new strip */ +static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + Scene *scene; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter, items; + + bAction *act = NULL; + char actname[22]; + float cfra; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + scene= ac.scene; + cfra= (float)CFRA; + + /* get action to use */ + RNA_string_get(op->ptr, "action", actname); + act= (bAction *)find_id("AC", actname+2); + + if (act == NULL) { + BKE_report(op->reports, RPT_ERROR, "No valid Action to add."); + //printf("Add strip - actname = '%s' \n", actname); + return OPERATOR_CANCELLED; + } + + /* get a list of the editable tracks being shown in the NLA + * - this is limited to active ones for now, but could be expanded to + */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ACTIVE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + items= ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + if (items == 0) { + BKE_report(op->reports, RPT_ERROR, "No active track(s) to add strip to."); + return OPERATOR_CANCELLED; + } + + /* for every active track, try to add strip to free space in track or to the top of the stack if no space */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + NlaStrip *strip= NULL; + + /* create a new strip, and offset it to start on the current frame */ + strip= add_nlastrip(act); + + strip->end += (cfra - strip->start); + strip->start = cfra; + + /* firstly try adding strip to our current track, but if that fails, add to a new track */ + if (BKE_nlatrack_add_strip(nlt, strip) == 0) { + /* trying to add to the current failed (no space), + * so add a new track to the stack, and add to that... + */ + nlt= add_nlatrack(adt, NULL); + BKE_nlatrack_add_strip(nlt, strip); + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_add_actionclip (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Action Strip"; + ot->idname= "NLAEDIT_OT_add_actionclip"; + ot->description= "Add an Action-Clip strip (i.e. an NLA Strip referencing an Action) to the active track."; + + /* api callbacks */ + ot->invoke= nlaedit_add_actionclip_invoke; + ot->exec= nlaedit_add_actionclip_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* props */ + // TODO: this would be nicer as an ID-pointer... + RNA_def_string(ot->srna, "action", "", 21, "Action", "Name of Action to add as a new Action-Clip Strip."); +} + +/* ******************** Add Transition Operator ***************************** */ +/* Add a new transition strip between selected strips */ + +/* add the specified action as new strip */ +static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + int done = 0; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each track, find pairs of strips to add transitions to */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *s1, *s2; + + /* get initial pair of strips */ + if ELEM(nlt->strips.first, NULL, nlt->strips.last) + continue; + s1= nlt->strips.first; + s2= s1->next; + + /* loop over strips */ + for (; s1 && s2; s1=s2, s2=s2->next) { + NlaStrip *strip; + + /* check if both are selected */ + if ELEM(0, (s1->flag & NLASTRIP_FLAG_SELECT), (s2->flag & NLASTRIP_FLAG_SELECT)) + continue; + /* check if there's space between the two */ + if (IS_EQ(s1->end, s2->start)) + continue; + + /* allocate new strip */ + strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip"); + BLI_insertlinkafter(&nlt->strips, s1, strip); + + /* set the type */ + strip->type= NLASTRIP_TYPE_TRANSITION; + + /* generic settings + * - selected flag to highlight this to the user + * - auto-blends to ensure that blend in/out values are automatically + * determined by overlaps of strips + */ + strip->flag = NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_AUTO_BLENDS; + + /* range is simply defined as the endpoints of the adjacent strips */ + strip->start = s1->end; + strip->end = s2->start; + + /* scale and repeat aren't of any use, but shouldn't ever be 0 */ + strip->scale= 1.0f; + strip->repeat = 1.0f; + + /* make note of this */ + done++; + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* was anything added? */ + if (done) { + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; + } + else { + BKE_report(op->reports, RPT_ERROR, "Needs at least a pair of adjacent selected strips."); + return OPERATOR_CANCELLED; + } +} + +void NLAEDIT_OT_add_transition (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Transition"; + ot->idname= "NLAEDIT_OT_add_transition"; + ot->description= "Add a transition strip between two adjacent selected strips."; + + /* api callbacks */ + ot->exec= nlaedit_add_transition_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************** Delete Strips Operator ***************************** */ /* Deletes the selected NLA-Strips */ @@ -230,7 +455,7 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - /* get a list of the AnimData blocks being shown in the NLA */ + /* get a list of the editable tracks being shown in the NLA */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); @@ -292,7 +517,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - /* get a list of the AnimData blocks being shown in the NLA */ + /* get a list of editable tracks being shown in the NLA */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 0d42c544a3f..970d602c0af 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -110,7 +110,7 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemO(layout, NULL, 0, "NLA_OT_view_all"); + //uiItemO(layout, NULL, 0, "NLA_OT_view_all"); if (sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow @@ -146,6 +146,9 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); + uiItemO(layout, NULL, 0, "NLA_OT_add_actionclip"); + uiItemO(layout, NULL, 0, "NLA_OT_add_transition"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_split"); uiItemS(layout); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 5c6670cfd6f..f1bde40f4ab 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -92,6 +92,9 @@ void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); /* --- */ +void NLAEDIT_OT_add_actionclip(wmOperatorType *ot); +void NLAEDIT_OT_add_transition(wmOperatorType *ot); + void NLAEDIT_OT_delete(wmOperatorType *ot); void NLAEDIT_OT_split(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 981ef9a4f87..a9b7022157e 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -134,6 +134,9 @@ void nla_operatortypes(void) WM_operatortype_append(NLAEDIT_OT_tweakmode_enter); WM_operatortype_append(NLAEDIT_OT_tweakmode_exit); + WM_operatortype_append(NLAEDIT_OT_add_actionclip); + WM_operatortype_append(NLAEDIT_OT_add_transition); + WM_operatortype_append(NLAEDIT_OT_delete); WM_operatortype_append(NLAEDIT_OT_split); } @@ -208,6 +211,10 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_enter", TABKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); + /* add strips */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_add_actionclip", AKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLAEDIT_OT_add_transition", TKEY, KM_PRESS, KM_SHIFT, 0); + /* delete */ WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", DELKEY, KM_PRESS, 0, 0); From 8ffb1dacad032e42830debe9b51fdd961def354f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 19 Jun 2009 04:58:40 +0000 Subject: [PATCH 059/512] NLA SoC: Bugfix for Deleting Keyframes When an F-Curve doesn't contain any keyframes anymore but it still exists, the F-Curve's value is not recalculated and flushed anymore if the F-Curve's value will not change. That is, if the F-Curve doesn't have any other data, i.e. drivers or generator-modifiers, which would still change its value, it wouldn't be recalculated to have a value of zero. This solves the problem of deleting all scale keyframes, whereby objects/bones would appear to 'vanish' --- source/blender/blenkernel/BKE_fcurve.h | 2 +- source/blender/blenkernel/intern/fcurve.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index af272e892f2..5c77e3c2ae4 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -112,7 +112,7 @@ void fcurve_free_modifiers(struct FCurve *fcu); struct FModifier *fcurve_find_active_modifier(struct FCurve *fcu); void fcurve_set_active_modifier(struct FCurve *fcu, struct FModifier *fcm); -short fcurve_has_suitable_modifier(FCurve *fcu, int mtype, short acttype); +short fcurve_has_suitable_modifier(struct FCurve *fcu, int mtype, short acttype); float evaluate_time_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float cvalue, float evaltime); void evaluate_value_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float *cvalue, float evaltime); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index d8b5135a1b1..856930e5a44 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2415,10 +2415,16 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) } /* Calculate the value of the given F-Curve at the given frame, and set its curval */ -// TODO: will this be necessary? void calculate_fcurve (FCurve *fcu, float ctime) { - /* calculate and set curval (evaluates driver too) */ - fcu->curval= evaluate_fcurve(fcu, ctime); + /* only calculate + set curval (overriding the existing value) if curve has + * any data which warrants this... + */ + if ( (fcu->totvert) || (fcu->driver && !(fcu->driver->flag & DRIVER_FLAG_INVALID)) || + fcurve_has_suitable_modifier(fcu, 0, FMI_TYPE_GENERATE_CURVE) ) + { + /* calculate and set curval (evaluates driver too if necessary) */ + fcu->curval= evaluate_fcurve(fcu, ctime); + } } From e3fc5481b9da35336e5f7b7413938a089eb384af Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 19 Jun 2009 11:56:53 +0000 Subject: [PATCH 060/512] NLA SoC: Bugfixes * Loading old Action Editors resulted in wrong view settings being used * Wrong operator names used in previous commit... --- source/blender/blenloader/intern/readfile.c | 2 +- source/blender/editors/space_nla/nla_header.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index fe19496bd38..31f97e1d41d 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5755,7 +5755,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) ar->v2d.scroll = (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_HORIZONTAL); ar->v2d.scroll |= (V2D_SCROLL_RIGHT); ar->v2d.keepzoom= V2D_LOCKZOOM_Y; - ar->v2d.align= V2D_ALIGN_NO_NEG_Y; + ar->v2d.align= V2D_ALIGN_NO_POS_Y; ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL; break; } diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 970d602c0af..175f40befeb 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -146,8 +146,8 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); - uiItemO(layout, NULL, 0, "NLA_OT_add_actionclip"); - uiItemO(layout, NULL, 0, "NLA_OT_add_transition"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_actionclip"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_transition"); uiItemO(layout, NULL, 0, "NLAEDIT_OT_split"); From d525ae17829ae13640488e6f50022b317a8eba63 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 19 Jun 2009 12:45:08 +0000 Subject: [PATCH 061/512] NLA SoC: Duplicate Strips Operator (Shift D) It is now possible to Duplicate Strips again. Strips are added into the first available space in the track above the original track (or a new track above the original if there wasn't any space). Also, separated out the 'add' operators into their own menu. This might need to be changed later... --- source/blender/editors/space_nla/nla_edit.c | 88 +++++++++++++++++++ source/blender/editors/space_nla/nla_header.c | 21 +++-- source/blender/editors/space_nla/nla_intern.h | 1 + source/blender/editors/space_nla/nla_ops.c | 4 + 4 files changed, 108 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 2996a005177..d2cf728ea58 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -440,6 +440,94 @@ void NLAEDIT_OT_add_transition (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ******************** Duplicate Strips Operator ************************** */ +/* Duplicates the selected NLA-Strips, putting them on new tracks above the one + * the originals were housed in. + */ + +static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + short done = 0; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* duplicate strips in tracks starting from the last one so that we're + * less likely to duplicate strips we just duplicated... + */ + for (ale= anim_data.last; ale; ale= ale->prev) { + NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + NlaStrip *strip, *nstrip, *next; + NlaTrack *track; + + for (strip= nlt->strips.first; strip; strip= next) { + next= strip->next; + + /* if selected, split the strip at its midpoint */ + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* make a copy (assume that this is possible) */ + nstrip= copy_nlastrip(strip); + + /* in case there's no space in the track above, or we haven't got a reference to it yet, try adding */ + if (BKE_nlatrack_add_strip(nlt->next, nstrip) == 0) { + /* need to add a new track above the one above the current one + * - if the current one is the last one, nlt->next will be NULL, which defaults to adding + * at the top of the stack anyway... + */ + track= add_nlatrack(adt, nlt->next); + BKE_nlatrack_add_strip(track, nstrip); + } + + /* deselect the original */ + strip->flag &= ~NLASTRIP_FLAG_SELECT; + + done++; + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + if (done) { + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done + allow for tweaking to be invoked */ + return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; + } + else + return OPERATOR_CANCELLED; +} + +void NLAEDIT_OT_duplicate (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Duplicate Strips"; + ot->idname= "NLAEDIT_OT_duplicate"; + ot->description= "Duplicate selected NLA-Strips, adding the new strips in new tracks above the originals."; + + /* api callbacks */ + ot->exec= nlaedit_duplicate_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************** Delete Strips Operator ***************************** */ /* Deletes the selected NLA-Strips */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 175f40befeb..f8c6ba2131a 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -143,12 +143,7 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); - uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); - - uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_actionclip"); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_transition"); - + uiItemO(layout, NULL, 0, "NLAEDIT_OT_duplicate"); uiItemO(layout, NULL, 0, "NLAEDIT_OT_split"); uiItemS(layout); @@ -156,6 +151,17 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLAEDIT_OT_delete"); } +static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_actionclip"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_transition"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); + uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); +} + /* ------------------ */ static void do_nla_buttons(bContext *C, void *arg, int event) @@ -196,6 +202,9 @@ void nla_header_buttons(const bContext *C, ARegion *ar) uiDefMenuBut(block, nla_editmenu, NULL, "Edit", xco, yco, xmax-3, 20, ""); xco+= xmax; + xmax= GetButStringLength("Add"); + uiDefMenuBut(block, nla_addmenu, NULL, "Add", xco, yco, xmax-3, 20, ""); + xco+= xmax; } uiBlockSetEmboss(block, UI_EMBOSS); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index f1bde40f4ab..1237542172f 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -95,6 +95,7 @@ void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); void NLAEDIT_OT_add_actionclip(wmOperatorType *ot); void NLAEDIT_OT_add_transition(wmOperatorType *ot); +void NLAEDIT_OT_duplicate(wmOperatorType *ot); void NLAEDIT_OT_delete(wmOperatorType *ot); void NLAEDIT_OT_split(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index a9b7022157e..52b529661cb 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -137,6 +137,7 @@ void nla_operatortypes(void) WM_operatortype_append(NLAEDIT_OT_add_actionclip); WM_operatortype_append(NLAEDIT_OT_add_transition); + WM_operatortype_append(NLAEDIT_OT_duplicate); WM_operatortype_append(NLAEDIT_OT_delete); WM_operatortype_append(NLAEDIT_OT_split); } @@ -215,6 +216,9 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLAEDIT_OT_add_actionclip", AKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_add_transition", TKEY, KM_PRESS, KM_SHIFT, 0); + /* duplicate */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + /* delete */ WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", DELKEY, KM_PRESS, 0, 0); From bb9323a720483b0c02bf25ecfca9c6ccc8699519 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 19 Jun 2009 12:57:31 +0000 Subject: [PATCH 062/512] NLA SoC: Minor Tweaks (Duplicate + Muted-Strip Drawing) * Duplicate operator now inits transform once strips have been created * Muted strips now draw with a dotted outline --- source/blender/editors/space_nla/nla_draw.c | 15 ++++++++++++++- source/blender/editors/space_nla/nla_edit.c | 20 ++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 3a3f86bb5a3..9a9cbeeff21 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -68,6 +68,7 @@ #include "ED_screen.h" #include "BIF_gl.h" +#include "BIF_glutil.h" #include "WM_api.h" #include "WM_types.h" @@ -184,7 +185,10 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 uiSetRoundBox(15); /* all corners rounded */ gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); - /* draw strip outline - different colors are used here... */ + + /* draw strip outline + * - color used here is to indicate active vs non-active + */ if (strip->flag & NLASTRIP_FLAG_ACTIVE) { /* strip should appear 'sunken', so draw a light border around it */ glColor3f(0.9f, 1.0f, 0.9f); // FIXME: hardcoded temp-hack colors @@ -193,7 +197,16 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 /* strip should appear to stand out, so draw a dark border around it */ glColor3f(0.0f, 0.0f, 0.0f); } + + /* - line style: dotted for muted */ + if (strip->flag & NLASTRIP_FLAG_MUTED) + setlinestyle(4); + + /* draw outline */ gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1); + + /* reset linestyle */ + setlinestyle(0); } /* add the relevant text to the cache of text-strings to draw in pixelspace */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index d2cf728ea58..8b7c6bb99c6 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -59,6 +59,8 @@ #include "ED_space_api.h" #include "ED_screen.h" +#include "BIF_transform.h" + #include "RNA_access.h" #include "RNA_define.h" @@ -506,13 +508,23 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); WM_event_add_notifier(C, NC_SCENE, NULL); - /* done + allow for tweaking to be invoked */ - return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; + /* done */ + return OPERATOR_FINISHED; } else return OPERATOR_CANCELLED; } +static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + nlaedit_duplicate_exec(C, op); + + RNA_int_set(op->ptr, "mode", TFM_TIME_TRANSLATE); // XXX + WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + + return OPERATOR_FINISHED; +} + void NLAEDIT_OT_duplicate (wmOperatorType *ot) { /* identifiers */ @@ -521,11 +533,15 @@ void NLAEDIT_OT_duplicate (wmOperatorType *ot) ot->description= "Duplicate selected NLA-Strips, adding the new strips in new tracks above the originals."; /* api callbacks */ + ot->invoke= nlaedit_duplicate_invoke; ot->exec= nlaedit_duplicate_exec; ot->poll= nlaop_poll_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* to give to transform */ + RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); } /* ******************** Delete Strips Operator ***************************** */ From 6393e9b3ca7e40e95830d009020b0f106c00b529 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 20 Jun 2009 03:58:25 +0000 Subject: [PATCH 063/512] NLA SoC: Fixes for problems arising from the merge --- .../blender/editors/space_nla/nla_buttons.c | 6 +---- source/blender/editors/space_nla/nla_select.c | 8 +++---- source/blender/makesrna/intern/makesrna.c | 2 +- source/blender/makesrna/intern/rna_nla.c | 24 +++++++++---------- 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index cb76f7fc735..0d5cdf80830 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -206,11 +206,7 @@ static void nla_panel_properties(const bContext *C, Panel *pa) uiLayout *layout= pa->layout; uiLayout *column, *row, *subcol; uiBlock *block; - - /* check context and also validity of pointer */ - if (!nla_panel_context(C, NULL, &strip_ptr)) - return; - + block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index b850ec76f82..ee4ed01ab81 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -361,10 +361,10 @@ void NLAEDIT_OT_select_border(wmOperatorType *ot) /* defines for left-right select tool */ static EnumPropertyItem prop_nlaedit_leftright_select_types[] = { - {NLAEDIT_LRSEL_TEST, "CHECK", "Check if Select Left or Right", ""}, - {NLAEDIT_LRSEL_NONE, "OFF", "Don't select", ""}, - {NLAEDIT_LRSEL_LEFT, "LEFT", "Before current frame", ""}, - {NLAEDIT_LRSEL_RIGHT, "RIGHT", "After current frame", ""}, + {NLAEDIT_LRSEL_TEST, "CHECK", 0, "Check if Select Left or Right", ""}, + {NLAEDIT_LRSEL_NONE, "OFF", 0, "Don't select", ""}, + {NLAEDIT_LRSEL_LEFT, "LEFT", 0, "Before current frame", ""}, + {NLAEDIT_LRSEL_RIGHT, "RIGHT", 0, "After current frame", ""}, {0, NULL, NULL, NULL} }; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index eacf3a65c7d..18734fbcb18 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1846,7 +1846,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_mesh.c", "rna_mesh_api.c", RNA_def_mesh}, {"rna_meta.c", NULL, RNA_def_meta}, {"rna_modifier.c", NULL, RNA_def_modifier}, - {"rna_nla.c", RNA_def_nla}, + {"rna_nla.c", NULL, RNA_def_nla}, {"rna_nodetree.c", NULL, RNA_def_nodetree}, {"rna_object.c", "rna_object_api.c", RNA_def_object}, {"rna_object_force.c", NULL, RNA_def_object_force}, diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 4b5c14aab82..dacd257dc17 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -157,20 +157,20 @@ void rna_def_nlastrip(BlenderRNA *brna) /* enum defs */ static EnumPropertyItem prop_type_items[] = { - {NLASTRIP_TYPE_CLIP, "CLIP", "Action Clip", "NLA Strip references some Action."}, - {NLASTRIP_TYPE_TRANSITION, "TRANSITION", "Transition", "NLA Strip 'transitions' between adjacent strips."}, - {0, NULL, NULL, NULL}}; + {NLASTRIP_TYPE_CLIP, "CLIP", 0, "Action Clip", "NLA Strip references some Action."}, + {NLASTRIP_TYPE_TRANSITION, "TRANSITION", 0, "Transition", "NLA Strip 'transitions' between adjacent strips."}, + {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_blend_items[] = { - {NLASTRIP_MODE_BLEND, "BLEND", "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, - {NLASTRIP_MODE_ADD, "ADD", "Add", "Weighted result of strip is added to the accumlated results."}, - {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", "Subtract", "Weighted result of strip is removed from the accumlated results."}, - {NLASTRIP_MODE_MULTIPLY, "MULITPLY", "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, - {0, NULL, NULL, NULL}}; + {NLASTRIP_MODE_BLEND, "BLEND", 0, "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, + {NLASTRIP_MODE_ADD, "ADD", 0, "Add", "Weighted result of strip is added to the accumlated results."}, + {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", 0, "Subtract", "Weighted result of strip is removed from the accumlated results."}, + {NLASTRIP_MODE_MULTIPLY, "MULITPLY", 0, "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, + {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_extend_items[] = { - {NLASTRIP_EXTEND_NOTHING, "NOTHING", "Nothing", "Strip has no influence past its extents."}, - {NLASTRIP_EXTEND_HOLD, "HOLD", "Hold", "Hold the first frame if no previous strips in track, and always hold last frame."}, - {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", "Hold Forward", "Only hold last frame."}, - {0, NULL, NULL, NULL}}; + {NLASTRIP_EXTEND_NOTHING, "NOTHING", 0, "Nothing", "Strip has no influence past its extents."}, + {NLASTRIP_EXTEND_HOLD, "HOLD", 0, "Hold", "Hold the first frame if no previous strips in track, and always hold last frame."}, + {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame."}, + {0, NULL, 0, NULL, NULL}}; /* struct definition */ srna= RNA_def_struct(brna, "NlaStrip", NULL); From 6394ee9e8143988b2a0f9316fb7bca5dc78e6e53 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 20 Jun 2009 04:02:49 +0000 Subject: [PATCH 064/512] NLA SoC: Drawing + Editing Fixes * Strips using the same action as the 'tweaking action' now get the error flag cleared after tweakmode is exited. (These strips draw with red shading) * The direction in which strips get played (as a result of the 'reversed' option) now gets indicated on strips by the direction of the arrow text printed on each strip * The active strip flag is now cleared after duplicating/splitting strips. --- source/blender/blenkernel/intern/nla.c | 12 +++++++++--- source/blender/editors/space_nla/nla_draw.c | 12 +++++++++--- source/blender/editors/space_nla/nla_edit.c | 7 +++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 0684d943754..1ce6d9f98c7 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -648,7 +648,6 @@ short BKE_nla_tweakmode_enter (AnimData *adt) /* if block is already in tweakmode, just leave, but we should report * that this block is in tweakmode (as our returncode) */ - // FIXME: hopefully the flag is correct! if (adt->flag & ADT_NLA_EDIT_ON) return 1; @@ -707,6 +706,7 @@ short BKE_nla_tweakmode_enter (AnimData *adt) /* Exit tweakmode for this AnimData block */ void BKE_nla_tweakmode_exit (AnimData *adt) { + NlaStrip *strip; NlaTrack *nlt; /* verify that data is valid */ @@ -719,9 +719,15 @@ void BKE_nla_tweakmode_exit (AnimData *adt) // TODO: need to sync the user-strip with the new state of the action! - /* for all NLA-tracks, clear the 'disabled' flag */ - for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) + /* for all NLA-tracks, clear the 'disabled' flag + * for all NLA-strips, clear the 'tweak-user' flag + */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { nlt->flag &= ~NLATRACK_DISABLED; + + for (strip= nlt->strips.first; strip; strip= strip->next) + strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER; + } /* handle AnimData level changes: * - 'temporary' active action needs its usercount decreased, since we're removing this reference diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 9a9cbeeff21..2ac2b557243 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -212,19 +212,25 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 /* add the relevant text to the cache of text-strings to draw in pixelspace */ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View2D *v2d, float yminc, float ymaxc) { - char str[256]; + char str[256], dir[3]; rctf rect; + /* 'dir' - direction that strip is played in */ + if (strip->flag & NLASTRIP_FLAG_REVERSE) + sprintf(dir, "<-"); + else + sprintf(dir, "->"); + /* for now, just init the string with fixed-formats */ switch (strip->type) { case NLASTRIP_TYPE_TRANSITION: /* Transition */ - sprintf(str, "%d | Transition | %.2f <-> %.2f", index, strip->start, strip->end); + sprintf(str, "%d | Transition | %.2f %s %.2f", index, strip->start, dir, strip->end); break; case NLASTRIP_TYPE_CLIP: /* Action-Clip (default) */ default: if (strip->act) - sprintf(str, "%d | Act: %s | %.2f <-> %.2f", index, strip->act->id.name+2, strip->start, strip->end); + sprintf(str, "%d | Act: %s | %.2f %s %.2f", index, strip->act->id.name+2, strip->start, dir, strip->end); else sprintf(str, "%d | Act: ", index); // xxx... need a better format? break; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 8b7c6bb99c6..ebb0589a82d 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -492,8 +492,8 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) BKE_nlatrack_add_strip(track, nstrip); } - /* deselect the original */ - strip->flag &= ~NLASTRIP_FLAG_SELECT; + /* deselect the original and the active flag */ + strip->flag &= ~(NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_ACTIVE); done++; } @@ -666,6 +666,9 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) strip->actend= midaframe; nstrip->actstart= midaframe; + + /* clear the active flag from the copy */ + nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE; } } } From 9e498c7ddd131b5fed4ad1e5b934d8e67f897545 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 20 Jun 2009 04:03:13 +0000 Subject: [PATCH 065/512] Mistake in FBX export broke importing on some apps (but not the ones I tested with. grr) Reported by James Dolan on autodesks forum http://area.autodesk.com/forum/autodesk-fbx/fbx-sdk/fbx-files-exported-from-blender-cause-assert/ --- release/scripts/export_fbx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/export_fbx.py b/release/scripts/export_fbx.py index 4115140a852..50357cbfa75 100644 --- a/release/scripts/export_fbx.py +++ b/release/scripts/export_fbx.py @@ -1464,7 +1464,7 @@ def write(filename, batch_objects = None, \ # Write Edge Smoothing file.write(''' - LayerElementSmoothing: 0 { + LayerElementSmoothing: 1 { Version: 101 Name: "" MappingInformationType: "ByEdge" From bc77cc3a818364b1af84203ebef8381f55aef6d4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 20 Jun 2009 05:16:09 +0000 Subject: [PATCH 066/512] typo in logic buttons --- source/blender/src/buttons_logic.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index 6a14bbaec6c..f9e109b98e7 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -3213,7 +3213,7 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_AXIS, 0, "Lock X Axis", xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of linear motion along the X axis"); - uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_ROT_AXIS, 0, "Lock X Rot Xxis", + uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_ROT_AXIS, 0, "Lock X Rotation Axis", xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of angular motion along the X axis"); yco -= 20; @@ -3221,7 +3221,7 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_AXIS, 0, "Lock Y Axis", xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of linear motion along the Y axis"); - uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_ROT_AXIS, 0, "Lock Y Rot Axis", + uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_ROT_AXIS, 0, "Lock Y Rotation Axis", xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of angular motion along the Y axis"); @@ -3230,7 +3230,7 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_AXIS, 0, "Lock Z Axis", xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of linear motion along the Z axis"); - uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_ROT_AXIS, 0, "Lock Z Rot Axis", + uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_ROT_AXIS, 0, "Lock Z Rotation Axis", xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0, "Disable simulation of angular motion along the Z axis"); } From ef7860ed9a68e3b92346697028ef0bdd9d21932f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 20 Jun 2009 09:36:55 +0000 Subject: [PATCH 067/512] NLA SoC: Conversions for old NLA-data to the new system Old NLA-data now gets mostly ported converted over to the new system, with strips and their respective Actions being handled correctly in the test cases I've got. The conversion procedure now tries to fit multiple strips into since tracks as it is assumed that quite a few old setups tried to do. However, some old setups may be adversely affected by this (i.e. if they depend on a certain order of holding adds for example). For now, there are no complete replacements for the NLA-Modifier/Auto-Walking stuff yet, so that info is currently just ignored (but correctly freed). The current plan here is to get Armature-level pose-offset system + F-Modifiers where appropriate. This should be one of the major causes of file breakage now... Also, I've yet to restore some patching for group instancing NLA stuff, since more trickery here is required. This is probably the second major cause of file breakage... --- source/blender/blenkernel/intern/ipo.c | 111 ++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 54618813a0b..5642e63326f 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -58,6 +58,7 @@ #include "DNA_key_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" +#include "DNA_nla_types.h" #include "DNA_object_types.h" #include "DNA_object_force.h" #include "DNA_particle_types.h" @@ -85,6 +86,7 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_mesh.h" +#include "BKE_nla.h" #include "BKE_object.h" @@ -1463,6 +1465,87 @@ static void action_to_animdata (ID *id, bAction *act) action_to_animato(act, &adt->action->groups, &adt->action->curves, &adt->drivers); } +/* ------------------------- */ + +// TODO: +// - NLA group duplicators info +// - NLA curve/stride modifiers... + +/* Convert NLA-Strip to new system */ +static void nlastrips_to_animdata (ID *id, ListBase *strips) +{ + AnimData *adt= BKE_animdata_from_id(id); + NlaTrack *nlt = NULL; + NlaStrip *strip; + bActionStrip *as, *asn; + + /* for each one of the original strips, convert to a new strip and free the old... */ + for (as= strips->first; as; as= asn) { + asn= as->next; + + /* this old strip is only worth something if it had an action... */ + if (as->act) { + /* convert Action data (if not yet converted), storing the results in the same Action */ + action_to_animato(as->act, &as->act->groups, &as->act->curves, &adt->drivers); + + /* create a new-style NLA-strip which references this Action, then copy over relevant settings */ + { + /* init a new strip, and assign the action to it + * - no need to muck around with the user-counts, since this is just + * passing over the ref to the new owner, not creating an additional ref + */ + strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip"); + strip->act= as->act; + + /* endpoints */ + strip->start= as->start; + strip->end= as->end; + strip->actstart= as->actstart; + strip->actend= as->actend; + + /* action reuse */ + strip->repeat= as->repeat; + strip->scale= as->scale; + if (as->flag & ACTSTRIP_LOCK_ACTION) strip->flag |= NLASTRIP_FLAG_SYNC_LENGTH; + + /* blending */ + strip->blendin= as->blendin; + strip->blendout= as->blendout; + strip->blendmode= (as->mode==ACTSTRIPMODE_ADD) ? NLASTRIP_MODE_ADD : NLASTRIP_MODE_BLEND; + if (as->flag & ACTSTRIP_AUTO_BLENDS) strip->flag |= NLASTRIP_FLAG_AUTO_BLENDS; + + /* assorted setting flags */ + if (as->flag & ACTSTRIP_SELECT) strip->flag |= NLASTRIP_FLAG_SELECT; + if (as->flag & ACTSTRIP_ACTIVE) strip->flag |= NLASTRIP_FLAG_ACTIVE; + + if (as->flag & ACTSTRIP_MUTE) strip->flag |= NLASTRIP_FLAG_MUTED; + if (as->flag & ACTSTRIP_REVERSE) strip->flag |= NLASTRIP_FLAG_REVERSE; + + /* by default, we now always extrapolate, while in the past this was optional */ + if ((as->flag & ACTSTRIP_HOLDLASTFRAME)==0) + strip->extendmode= NLASTRIP_EXTEND_NOTHING; + } + + /* try to add this strip to the current NLA-Track (i.e. the 'last' one on the stack atm) */ + if (BKE_nlatrack_add_strip(nlt, strip) == 0) { + /* trying to add to the current failed (no space), + * so add a new track to the stack, and add to that... + */ + nlt= add_nlatrack(adt, NULL); + BKE_nlatrack_add_strip(nlt, strip); + } + } + + /* modifiers */ + // FIXME: for now, we just free them... + if (as->modifiers.first) + BLI_freelistN(&as->modifiers); + + /* free the old strip */ + BLI_freelinkN(strips, as); + } +} + /* *************************************************** */ /* External API - Only Called from do_versions() */ @@ -1509,7 +1592,30 @@ void do_versions_ipos_to_animato(Main *main) if (G.f & G_DEBUG) printf("\tconverting ob %s \n", id->name+2); /* check if object has any animation data */ - if ((ob->ipo) || (ob->action) || (ob->nlastrips.first)) { + if (ob->nlastrips.first) { + /* Add AnimData block */ + adt= BKE_id_add_animdata(id); + + /* IPO first to take into any non-NLA'd Object Animation */ + if (ob->ipo) { + ipo_to_animdata(id, ob->ipo, NULL, NULL); + + ob->ipo->id.us--; + ob->ipo= NULL; + } + + /* Action is skipped since it'll be used by some strip in the NLA anyway, + * causing errors with evaluation in the new evaluation pipeline + */ + if (ob->action) { + ob->action->id.us--; + ob->action= NULL; + } + + /* finally NLA */ + nlastrips_to_animdata(id, &ob->nlastrips); + } + else if ((ob->ipo) || (ob->action)) { /* Add AnimData block */ adt= BKE_id_add_animdata(id); @@ -1530,9 +1636,6 @@ void do_versions_ipos_to_animato(Main *main) ob->ipo->id.us--; ob->ipo= NULL; } - - /* finally NLA */ - // XXX todo... for now, new NLA code not hooked up yet, so keep old stuff (but not for too long!) } /* check PoseChannels for constraints with local data */ From 6ff4a7229f316548046ab5593070b082cc1a4a7a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 20 Jun 2009 11:44:56 +0000 Subject: [PATCH 068/512] NLA SoC: Conversion fixes - Curve 'Speed' Curves + Constraints These fixes get the 'pathJumper.blend' file from our testing suite workable in 2.5 (with a few minor tweaks still needed *) Changes required: - Added a 'ctime' var to curve structs for storing the value that used to be obtained by specially evaluating the 'speed' curve when evaluating objects parented to the curve. This can now be animated as a 'proper' var as per normal. - Added a special hack for detecting constraint blocks, as the old method resulted in paths for Objects instead... (*) Issues: - Unfortunately, the paths still don't work out of the box. For some reason, the constraint names in the paths are spelt incorrectly - "Ar" and "Br" instead of "Ap" and "Bp". I'm not sure where this problem is coming from, but changing the paths manually in the Datablocks viewer fixes this error... - I noticed that in the buttons view, only 1st of the constraints gets shown. This seems a bit like some of the intermittent problems I've had with some arrays/lists not expanding properly in Datablocks view. --- source/blender/blenkernel/intern/anim_sys.c | 14 +++++++++++++- source/blender/blenkernel/intern/ipo.c | 11 +++++++++-- source/blender/blenkernel/intern/object.c | 16 ++++++++-------- source/blender/makesdna/DNA_curve_types.h | 5 +++-- source/blender/makesrna/intern/rna_curve.c | 6 ++++++ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 2efb4f2b2d3..7a6706b7c5a 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1341,10 +1341,22 @@ void BKE_animsys_evaluate_all_animation (Main *main, float ctime) EVAL_ANIM_IDS(main->camera.first, ADT_RECALC_ANIM); /* shapekeys */ + // TODO: we probably need the same hack as for curves (ctime-hack) EVAL_ANIM_IDS(main->key.first, ADT_RECALC_ANIM); /* curves */ - // TODO... + /* we need to perform a special hack here to ensure that the ctime + * value of the curve gets set in case there's no animation for that + * - it needs to be set before animation is evaluated just so that + * animation can successfully override... + */ + for (id= main->curve.first; id; id= id->next) { + AnimData *adt= BKE_animdata_from_id(id); + Curve *cu= (Curve *)id; + + cu->ctime= ctime; + BKE_animsys_evaluate_animdata(id, adt, ctime, ADT_RECALC_ANIM); + } /* meshes */ // TODO... diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 5642e63326f..968a0e68fb9 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -827,6 +827,10 @@ char *get_rna_access (int blocktype, int adrcode, char actname[], char constname char buf[512]; int dummy_index= 0; + /* hack: if constname is set, we can only be dealing with an Constraint curve */ + if (constname) + blocktype= ID_CO; + /* get property name based on blocktype */ switch (blocktype) { case ID_OB: /* object */ @@ -842,7 +846,7 @@ char *get_rna_access (int blocktype, int adrcode, char actname[], char constname break; case ID_CO: /* constraint */ - propname= constraint_adrcodes_to_paths(adrcode, &dummy_index); + propname= constraint_adrcodes_to_paths(adrcode, &dummy_index); break; case ID_TE: /* texture */ @@ -872,7 +876,10 @@ char *get_rna_access (int blocktype, int adrcode, char actname[], char constname /* XXX problematic blocktypes */ case ID_CU: /* curve */ - propname= "speed"; // XXX this was a 'dummy curve' that didn't really correspond to any real var... + /* this used to be a 'dummy' curve which got evaluated on the fly... + * now we've got real var for this! + */ + propname= "eval_time"; break; case ID_SEQ: /* sequencer strip */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index c2916bc2231..6490ff3c724 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1569,14 +1569,14 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4]) } /* catch exceptions: curve paths used as a duplicator */ else if(enable_cu_speed) { - ctime= bsystem_time(scene, ob, (float)scene->r.cfra, 0.0); - -#if 0 // XXX old animation system - if(calc_ipo_spec(cu->ipo, CU_SPEED, &ctime)==0) { - ctime /= cu->pathlen; - CLAMP(ctime, 0.0, 1.0); - } -#endif // XXX old animation system + /* ctime is now a proper var setting of Curve which gets set by Animato like any other var that's animated, + * but this will only work if it actually is animated... + * + * we firstly calculate the modulus of cu->ctime/cu->pathlen to clamp ctime within the 0.0 to 1.0 times pathlen + * range, then divide this (the modulus) by pathlen to get a value between 0.0 and 1.0 + */ + ctime= fmod(cu->ctime, cu->pathlen) / cu->pathlen; + CLAMP(ctime, 0.0, 1.0); } else { ctime= scene->r.cfra - give_timeoffset(ob); diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h index f8ea5f95d65..b0f089d670f 100644 --- a/source/blender/makesdna/DNA_curve_types.h +++ b/source/blender/makesdna/DNA_curve_types.h @@ -148,7 +148,7 @@ typedef struct Curve { ListBase *editnurb; /* edited data, not in file, use pointer so we can check for it */ struct Object *bevobj, *taperobj, *textoncurve; - struct Ipo *ipo; + struct Ipo *ipo; // XXX depreceated... old animation system Path *path; struct Key *key; struct Material **mat; @@ -193,7 +193,8 @@ typedef struct Curve { int sepchar; - int totbox, actbox, pad; + float ctime; /* current evaltime - for use by Objects parented to curves */ + int totbox, actbox; struct TextBox *tb; int selstart, selend; diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 41a47e279e9..91488aa2a49 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -31,6 +31,7 @@ #include "DNA_curve_types.h" #include "DNA_material_types.h" +#include "DNA_scene_types.h" EnumPropertyItem beztriple_handle_type_items[] = { {HD_FREE, "FREE", 0, "Free", ""}, @@ -558,6 +559,11 @@ static void rna_def_curve(BlenderRNA *brna) RNA_def_property_ui_range(prop, 1, 1024, 1, 0); RNA_def_property_ui_text(prop, "Render Resolution V", "Surface resolution in V direction used while rendering. Zero skips this property."); + + prop= RNA_def_property(srna, "eval_time", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "ctime"); + RNA_def_property_ui_text(prop, "Evaluation Time", "Parametric position along the length of the curve that Objects 'following' it should be at."); + /* pointers */ prop= RNA_def_property(srna, "bevel_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "bevobj"); From 6bca54aac17212f9c40b0a54a50a6c39e0817815 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 21 Jun 2009 02:03:50 +0000 Subject: [PATCH 069/512] NLA SoC: Click-Select Operator and TweakMode To make TweakMode seem less modal/blocking, selection now works in TweakMode. The caveat though, is that TweakMode must be immediately exited as a result of this, or else the internal state could become rather inconsistent and confused. All other operators will still continue to operate as per normal though, since in TweakMode, some operations are still very dangerous. --- source/blender/editors/space_nla/nla_select.c | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index ee4ed01ab81..28027d0d9cd 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -365,7 +365,7 @@ static EnumPropertyItem prop_nlaedit_leftright_select_types[] = { {NLAEDIT_LRSEL_NONE, "OFF", 0, "Don't select", ""}, {NLAEDIT_LRSEL_LEFT, "LEFT", 0, "Before current frame", ""}, {NLAEDIT_LRSEL_RIGHT, "RIGHT", 0, "After current frame", ""}, - {0, NULL, NULL, NULL} + {0, NULL, 0, NULL, NULL} }; /* sensitivity factor for frame-selections */ @@ -375,13 +375,14 @@ static EnumPropertyItem prop_nlaedit_leftright_select_types[] = { /* ------------------- */ /* option 1) select strip directly under mouse */ -static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) +static void mouse_nla_strips (bContext *C, bAnimContext *ac, int mval[2], short select_mode) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale = NULL; int filter; View2D *v2d= &ac->ar->v2d; + Scene *scene= ac->scene; NlaStrip *strip = NULL; int channel_index; float xmin, xmax, dummy; @@ -429,6 +430,12 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) BLI_freelistN(&anim_data); } + /* if currently in tweakmode, exit tweakmode before changing selection states + * now that we've found our target... + */ + if (scene->flag & SCE_NLA_EDIT_ON) + WM_operator_name_call(C, "NLAEDIT_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); + /* for replacing selection, firstly need to clear existing selection */ if (select_mode == SELECT_REPLACE) { /* reset selection mode for next steps */ @@ -470,7 +477,7 @@ static void mouse_nla_strips (bAnimContext *ac, int mval[2], short select_mode) } /* Option 2) Selects all the strips on either side of the current frame (depends on which side the mouse is on) */ -static void nlaedit_mselect_leftright (bAnimContext *ac, short leftright, short select_mode) +static void nlaedit_mselect_leftright (bContext *C, bAnimContext *ac, short leftright, short select_mode) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; @@ -479,6 +486,10 @@ static void nlaedit_mselect_leftright (bAnimContext *ac, short leftright, short Scene *scene= ac->scene; float xmin, xmax; + /* if currently in tweakmode, exit tweakmode first */ + if (scene->flag & SCE_NLA_EDIT_ON) + WM_operator_name_call(C, "NLAEDIT_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); + /* if select mode is replace, deselect all keyframes (and channels) first */ if (select_mode==SELECT_REPLACE) { select_mode= SELECT_ADD; @@ -564,11 +575,11 @@ static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even else RNA_int_set(op->ptr, "left_right", NLAEDIT_LRSEL_RIGHT); - nlaedit_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode); + nlaedit_mselect_leftright(C, &ac, RNA_enum_get(op->ptr, "left_right"), selectmode); } else { /* select strips based upon mouse position */ - mouse_nla_strips(&ac, mval, selectmode); + mouse_nla_strips(C, &ac, mval, selectmode); } /* set notifier that things have changed */ @@ -586,7 +597,7 @@ void NLAEDIT_OT_click_select (wmOperatorType *ot) /* api callbacks - absolutely no exec() this yet... */ ot->invoke= nlaedit_clickselect_invoke; - ot->poll= nlaop_poll_tweakmode_off; + ot->poll= ED_operator_nla_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; From ed316ad8e967b85a79bb67b79ffc5e3cd90820a5 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 21 Jun 2009 03:02:40 +0000 Subject: [PATCH 070/512] NLA SoC: Fixes for Operator Poll Callbacks * Clicking on NLA tracks while in TweakMode now works so that channels can be muted/protected/expanded as per usual. However, they cannot be selected, as changing the selection state can interfere with TweakMode state changes * Operators for animation channel-lists now use proper poll callbacks, which also take into account TweakMode where appropriate (i.e. all selection operators are now allowed to operate in NLA while in TweakMode, and all other operators will only work in Animation Editors) * Action Editor operators now use the poll callback for Action Editors/DopeSheet instead of the generic active-araa one. --- .../blender/editors/animation/anim_channels.c | 59 ++++++++++++++++--- .../editors/space_action/action_edit.c | 30 +++++----- .../editors/space_action/action_select.c | 8 +-- .../blender/editors/space_nla/nla_channels.c | 16 ++--- source/blender/editors/space_nla/nla_edit.c | 2 +- source/blender/editors/space_nla/nla_intern.h | 2 + source/blender/editors/space_nla/nla_ops.c | 12 +++- 7 files changed, 91 insertions(+), 38 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index d753f65ff50..9230cdfc9a2 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -271,6 +271,47 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short /* ************************************************************************** */ /* OPERATORS */ +/* ****************** Operator Utilities ********************************** */ + +/* poll callback for being in an Animation Editor channels list region */ +int animedit_poll_channels_active (bContext *C) +{ + ScrArea *sa= CTX_wm_area(C); + + /* channels region test */ + // TODO: could enhance with actually testing if channels region? + if (ELEM(NULL, sa, CTX_wm_region(C))) + return 0; + /* animation editor test */ + if (ELEM3(sa->spacetype, SPACE_ACTION, SPACE_IPO, SPACE_NLA) == 0) + return 0; + + return 1; +} + +/* poll callback for Animation Editor channels list region + not in NLA-tweakmode for NLA */ +int animedit_poll_channels_nla_tweakmode_off (bContext *C) +{ + ScrArea *sa= CTX_wm_area(C); + Scene *scene = CTX_data_scene(C); + + /* channels region test */ + // TODO: could enhance with actually testing if channels region? + if (ELEM(NULL, sa, CTX_wm_region(C))) + return 0; + /* animation editor test */ + if (ELEM3(sa->spacetype, SPACE_ACTION, SPACE_IPO, SPACE_NLA) == 0) + return 0; + + /* NLA TweakMode test */ + if (sa->spacetype == SPACE_NLA) { + if ((scene == NULL) || (scene->flag & SCE_NLA_EDIT_ON)) + return 0; + } + + return 1; +} + /* ****************** Rearrange Channels Operator ******************* */ /* This operator only works for Action Editor mode for now, as having it elsewhere makes things difficult */ @@ -961,7 +1002,7 @@ void ANIM_OT_channels_setting_enable (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= animchannels_setflag_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -982,7 +1023,7 @@ void ANIM_OT_channels_setting_disable (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= animchannels_setflag_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1003,7 +1044,7 @@ void ANIM_OT_channels_setting_toggle (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= animchannels_setflag_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1024,7 +1065,7 @@ void ANIM_OT_channels_editable_toggle (wmOperatorType *ot) /* api callbacks */ ot->exec= animchannels_setflag_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1068,7 +1109,7 @@ void ANIM_OT_channels_expand (wmOperatorType *ot) /* api callbacks */ ot->exec= animchannels_expand_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1109,7 +1150,7 @@ void ANIM_OT_channels_collapse (wmOperatorType *ot) /* api callbacks */ ot->exec= animchannels_collapse_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1148,7 +1189,7 @@ void ANIM_OT_channels_select_all_toggle (wmOperatorType *ot) /* api callbacks */ ot->exec= animchannels_deselectall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_nla_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1277,7 +1318,7 @@ void ANIM_OT_channels_select_border(wmOperatorType *ot) ot->exec= animchannels_borderselect_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_nla_tweakmode_off; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1636,7 +1677,7 @@ void ANIM_OT_channels_click (wmOperatorType *ot) /* api callbacks */ ot->invoke= animchannels_mouseclick_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= animedit_poll_channels_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index a0f1adbd97e..27be82ccec0 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -181,7 +181,7 @@ void ACT_OT_previewrange_set (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_previewrange_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -228,7 +228,7 @@ void ACT_OT_view_all (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_viewall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -315,7 +315,7 @@ void ACT_OT_keyframes_copy (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_copy_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -359,7 +359,7 @@ void ACT_OT_keyframes_paste (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_paste_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -456,7 +456,7 @@ void ACT_OT_keyframes_insert (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_insertkey_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -533,7 +533,7 @@ void ACT_OT_keyframes_duplicate (wmOperatorType *ot) /* api callbacks */ ot->invoke= actkeys_duplicate_invoke; ot->exec= actkeys_duplicate_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -600,7 +600,7 @@ void ACT_OT_keyframes_delete (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_operator_confirm; ot->exec= actkeys_delete_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -663,7 +663,7 @@ void ACT_OT_keyframes_clean (wmOperatorType *ot) /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! ot->exec= actkeys_clean_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -786,7 +786,7 @@ void ACT_OT_keyframes_sample (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_sample_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -862,7 +862,7 @@ void ACT_OT_keyframes_extrapolation_type_set (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_expo_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -932,7 +932,7 @@ void ACT_OT_keyframes_interpolation_type (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_ipo_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1020,7 +1020,7 @@ void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_handletype_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1079,7 +1079,7 @@ void ACT_OT_keyframes_cfrasnap (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_cfrasnap_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1175,7 +1175,7 @@ void ACT_OT_keyframes_snap (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_snap_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1291,7 +1291,7 @@ void ACT_OT_keyframes_mirror (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= actkeys_mirror_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 6bfdf77e2e7..f99a08bc26d 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -187,7 +187,7 @@ void ACT_OT_keyframes_select_all_toggle (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_deselectall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -349,7 +349,7 @@ void ACT_OT_keyframes_select_border(wmOperatorType *ot) ot->exec= actkeys_borderselect_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -563,7 +563,7 @@ void ACT_OT_keyframes_select_column (wmOperatorType *ot) /* api callbacks */ ot->exec= actkeys_columnselect_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -968,7 +968,7 @@ void ACT_OT_keyframes_clickselect (wmOperatorType *ot) /* api callbacks - absolutely no exec() this yet... */ ot->invoke= actkeys_clickselect_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_action_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index f928daa523b..a1c0de1e552 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -143,7 +143,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* toggle expand */ ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX } - else { + else if (nlaedit_is_tweakmode_on(ac) == 0) { /* set selection status */ if (selectmode == SELECT_INVERT) { /* swap select */ @@ -242,7 +242,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* toggle 'solo' */ BKE_nlatrack_solo_toggle(adt, nlt); } - else { + else if (nlaedit_is_tweakmode_on(ac) == 0) { /* set selection */ if (selectmode == SELECT_INVERT) { /* inverse selection status of this F-Curve only */ @@ -266,10 +266,12 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* for now, only do something if user clicks on the 'push-down' button */ if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { - /* activate push-down function */ - // TODO: make this use the operator instead of calling the function directly - // however, calling the operator requires that we supply the args, and that works with proper buttons only - BKE_nla_action_pushdown(adt); + /* activate push-down function - only usable when not in TweakMode */ + if (nlaedit_is_tweakmode_on(ac) == 0) { + // TODO: make this use the operator instead of calling the function directly + // however, calling the operator requires that we supply the args, and that works with proper buttons only + BKE_nla_action_pushdown(adt); + } } } break; @@ -339,7 +341,7 @@ void NLA_OT_channels_click (wmOperatorType *ot) /* api callbacks */ ot->invoke= nlachannels_mouseclick_invoke; - ot->poll= nlaop_poll_tweakmode_off; // xxx? + ot->poll= ED_operator_nla_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index ebb0589a82d..70a033052bd 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -625,7 +625,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* for each NLA-Track, delete all selected strips */ + /* for each NLA-Track, split all selected strips into two strips */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip, *nstrip, *next; diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 1237542172f..79ee5396f36 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -113,6 +113,8 @@ void NLA_OT_add_tracks(wmOperatorType *ot); int nlaop_poll_tweakmode_off(bContext *C); int nlaop_poll_tweakmode_on (bContext *C); +short nlaedit_is_tweakmode_on(bAnimContext *ac); + /* --- */ void nla_operatortypes(void); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 52b529661cb..df731e9d0fb 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -113,6 +113,14 @@ int nlaop_poll_tweakmode_on (bContext *C) return 1; } +/* is tweakmode enabled - for use in NLA operator code */ +short nlaedit_is_tweakmode_on (bAnimContext *ac) +{ + if (ac && ac->scene) + return (ac->scene->flag & SCE_NLA_EDIT_ON); + return 0; +} + /* ************************** registration - operator types **********************************/ void nla_operatortypes(void) @@ -160,10 +168,10 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ /* selection */ - /* borderselect */ + /* borderselect - not in tweakmode */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); - /* deselect all */ + /* deselect all - not in tweakmode */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); From 4dec9f3cb620098aba742c43b69031eb6b3f4591 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Sun, 21 Jun 2009 12:02:40 +0000 Subject: [PATCH 071/512] == Sequencer == Very, very last minute patch for Blender on Windows systems: move blender's internal AVI reader the last try in the list of codecs, when opening movie files. Otherwise, it will fail on Movie Maker captured DV-AVI files. (isavi() seems to mistreat these files as RAW/MJPEG AVI and fails later on IMB_anim_absolute() ) --- source/blender/imbuf/intern/util.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c index ffd5d3431af..26434583118 100644 --- a/source/blender/imbuf/intern/util.c +++ b/source/blender/imbuf/intern/util.c @@ -401,8 +401,6 @@ int imb_get_anim_type(char * name) { if (ib_stat(name,&st) == -1) return(0); if (((st.st_mode) & S_IFMT) != S_IFREG) return(0); - if (isavi(name)) return (ANIM_AVI); - if (ismovie(name)) return (ANIM_MOVIE); # ifdef WITH_QUICKTIME if (isqtime(name)) return (ANIM_QTIME); @@ -410,6 +408,7 @@ int imb_get_anim_type(char * name) { # ifdef WITH_FFMPEG if (isffmpeg(name)) return (ANIM_FFMPEG); # endif + if (isavi(name)) return (ANIM_AVI); #endif #ifdef WITH_REDCODE if (isredcode(name)) return (ANIM_REDCODE); From 29c6440bb39e20b6e0650be22c0d459fa434a608 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Sun, 21 Jun 2009 17:00:18 +0000 Subject: [PATCH 072/512] == AVI == Only open AVI files with at least one supported video track type. (This is the real fix for DV-Type1-AVIs, since the FCC of iads, that is used there, wasn't detected. But the code will happily open AVI-files with only audio tracks... So the real fix is: only try to open things, that contains something we know how to handle :) ) --- source/blender/avi/intern/avi.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c index 386597c6d85..005c05dec1d 100644 --- a/source/blender/avi/intern/avi.c +++ b/source/blender/avi/intern/avi.c @@ -214,6 +214,7 @@ int AVI_is_avi (char *name) { AviMovie movie; AviMainHeader header; AviBitmapInfoHeader bheader; + int movie_tracks = 0; DEBUG("opening movie\n"); @@ -303,6 +304,7 @@ int AVI_is_avi (char *name) { fclose(movie.fp); return 0; } + movie_tracks++; } movie.streams[temp].sh.Flags = GET_FCC (movie.fp); @@ -394,7 +396,10 @@ int AVI_is_avi (char *name) { MEM_freeN(movie.streams); fclose(movie.fp); - return 1; + + /* at least one video track is needed */ + return (movie_tracks != 0); + } AviError AVI_open_movie (char *name, AviMovie *movie) { From 320fc51a2b94a00c41ad433b061bca37577181c0 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Sun, 21 Jun 2009 17:40:56 +0000 Subject: [PATCH 073/512] BGE pyAPI update (adding "when accessing it from the Game Engine use Mathutils instead of Blender.Mathutils" message in Blender pyAPI doc) --- source/blender/python/api2_2x/doc/BGL.py | 1 + source/blender/python/api2_2x/doc/Geometry.py | 1 + source/blender/python/api2_2x/doc/Mathutils.py | 1 + source/gameengine/PyDoc/API_intro.py | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/python/api2_2x/doc/BGL.py b/source/blender/python/api2_2x/doc/BGL.py index 4a10de4a05c..b054e762273 100644 --- a/source/blender/python/api2_2x/doc/BGL.py +++ b/source/blender/python/api2_2x/doc/BGL.py @@ -7,6 +7,7 @@ B{New}: some GLU functions: L{gluLookAt}, etc. The Blender.BGL submodule ========================= +(when accessing it from the Game Engine use BGL instead of Blender.BGL) This module wraps OpenGL constants and functions, making them available from within Blender Python. diff --git a/source/blender/python/api2_2x/doc/Geometry.py b/source/blender/python/api2_2x/doc/Geometry.py index 97f97e8833e..da5ce045b44 100644 --- a/source/blender/python/api2_2x/doc/Geometry.py +++ b/source/blender/python/api2_2x/doc/Geometry.py @@ -5,6 +5,7 @@ The Blender.Geometry submodule. Geometry ======== +(when accessing it from the Game Engine use Geometry instead of Blender.Geometry) This new module provides access to a geometry function. """ diff --git a/source/blender/python/api2_2x/doc/Mathutils.py b/source/blender/python/api2_2x/doc/Mathutils.py index 73a2ce46c4f..92836237fa6 100644 --- a/source/blender/python/api2_2x/doc/Mathutils.py +++ b/source/blender/python/api2_2x/doc/Mathutils.py @@ -5,6 +5,7 @@ The Blender.Mathutils submodule. Mathutils ========= +(when accessing it from the Game Engine use Mathutils instead of Blender.Mathutils) This module provides access to matrices, eulers, quaternions and vectors. diff --git a/source/gameengine/PyDoc/API_intro.py b/source/gameengine/PyDoc/API_intro.py index 578b56eb2b0..0a687088627 100644 --- a/source/gameengine/PyDoc/API_intro.py +++ b/source/gameengine/PyDoc/API_intro.py @@ -24,7 +24,7 @@ The Blender Game Engine Python API Reference Additional Modules: ------------------- - These modules have no GameEngine spesific functionality but are useful in many cases. + These modules have no GameEngine specific functionality but are useful in many cases. - L{Mathutils} - L{Geometry} From aea9dd598c72fa5ee4bcbe6198b3b81e739373a1 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 22 Jun 2009 03:26:36 +0000 Subject: [PATCH 074/512] NLA SoC: DopeSheet Cleanups * Replaced old-style menu defines with the new-style Layout Engine ones. These are now much cleaner as a result :) * Wrapped DopeSheet and Graph Editors in RNA to allow them to use the new Layout Engine for menu drawing * Shortened the names of operators in the DopeSheet, removing the "keyframes" prefix since that's the only real context which can operate there. * Standardised a few names, and renamed a confusingly named operator (cfrasnap -> jump to frame) --- source/blender/editors/include/ED_anim_api.h | 3 +- .../editors/space_action/action_edit.c | 60 +- .../editors/space_action/action_header.c | 1643 ++--------------- .../editors/space_action/action_intern.h | 35 +- .../blender/editors/space_action/action_ops.c | 89 +- .../editors/space_action/action_select.c | 16 +- source/blender/editors/space_nla/nla_header.c | 5 + source/blender/makesrna/RNA_access.h | 2 + source/blender/makesrna/intern/rna_space.c | 102 +- 9 files changed, 370 insertions(+), 1585 deletions(-) diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index e44c7ff5603..8c54c4e8f67 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -142,7 +142,6 @@ typedef enum eAnim_KeyType { ALE_GPFRAME, /* Grease Pencil Frames */ ALE_NLASTRIP, /* NLA Strips */ - // XXX the following are for summaries... should these be kept? ALE_SCE, /* Scene summary */ ALE_OB, /* Object summary */ ALE_ACT, /* Action summary */ @@ -311,7 +310,7 @@ void ipo_rainbow(int cur, int tot, float *out); /* ------------- NLA-Mapping ----------------------- */ /* anim_draw.c */ -// XXX these are soon to be depreceated? +// XXX these need attention for the new editing method... /* Obtain the Object providing NLA-scaling for the given channel if applicable */ struct Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale); diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 27be82ccec0..b2f4751fa25 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -307,11 +307,11 @@ static int actkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_copy (wmOperatorType *ot) +void ACT_OT_copy (wmOperatorType *ot) { /* identifiers */ ot->name= "Copy Keyframes"; - ot->idname= "ACT_OT_keyframes_copy"; + ot->idname= "ACT_OT_copy"; /* api callbacks */ ot->exec= actkeys_copy_exec; @@ -351,11 +351,11 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_paste (wmOperatorType *ot) +void ACT_OT_paste (wmOperatorType *ot) { /* identifiers */ ot->name= "Paste Keyframes"; - ot->idname= "ACT_OT_keyframes_paste"; + ot->idname= "ACT_OT_paste"; /* api callbacks */ ot->exec= actkeys_paste_exec; @@ -447,11 +447,11 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_insert (wmOperatorType *ot) +void ACT_OT_insert (wmOperatorType *ot) { /* identifiers */ ot->name= "Insert Keyframes"; - ot->idname= "ACT_OT_keyframes_insert"; + ot->idname= "ACT_OT_insert"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -524,11 +524,11 @@ static int actkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_duplicate (wmOperatorType *ot) +void ACT_OT_duplicate (wmOperatorType *ot) { /* identifiers */ ot->name= "Duplicate Keyframes"; - ot->idname= "ACT_OT_keyframes_duplicate"; + ot->idname= "ACT_OT_duplicate"; /* api callbacks */ ot->invoke= actkeys_duplicate_invoke; @@ -591,11 +591,11 @@ static int actkeys_delete_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_delete (wmOperatorType *ot) +void ACT_OT_delete (wmOperatorType *ot) { /* identifiers */ ot->name= "Delete Keyframes"; - ot->idname= "ACT_OT_keyframes_delete"; + ot->idname= "ACT_OT_delete"; /* api callbacks */ ot->invoke= WM_operator_confirm; @@ -654,11 +654,11 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_clean (wmOperatorType *ot) +void ACT_OT_clean (wmOperatorType *ot) { /* identifiers */ ot->name= "Clean Keyframes"; - ot->idname= "ACT_OT_keyframes_clean"; + ot->idname= "ACT_OT_clean"; /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! @@ -778,11 +778,11 @@ static int actkeys_sample_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_sample (wmOperatorType *ot) +void ACT_OT_sample (wmOperatorType *ot) { /* identifiers */ ot->name= "Sample Keyframes"; - ot->idname= "ACT_OT_keyframes_sample"; + ot->idname= "ACT_OT_sample"; /* api callbacks */ ot->exec= actkeys_sample_exec; @@ -853,11 +853,11 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_extrapolation_type_set (wmOperatorType *ot) +void ACT_OT_extrapolation_type_set (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Extrapolation"; - ot->idname= "ACT_OT_keyframes_extrapolation_type_set"; + ot->idname= "ACT_OT_extrapolation_type_set"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -923,11 +923,11 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_interpolation_type (wmOperatorType *ot) +void ACT_OT_interpolation_type_set (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Interpolation"; - ot->idname= "ACT_OT_keyframes_interpolation_type"; + ot->idname= "ACT_OT_interpolation_type_set"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1011,11 +1011,11 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot) +void ACT_OT_handle_type_set (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Handle Type"; - ot->idname= "ACT_OT_keyframes_handle_type_set"; + ot->idname= "ACT_OT_handle_type_set"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1032,10 +1032,10 @@ void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot) /* ************************************************************************** */ /* TRANSFORM STUFF */ -/* ***************** Snap Current Frame Operator *********************** */ +/* ***************** Jump to Selected Frames Operator *********************** */ /* snap current-frame indicator to 'average time' of selected keyframe */ -static int actkeys_cfrasnap_exec(bContext *C, wmOperator *op) +static int actkeys_framejump_exec(bContext *C, wmOperator *op) { bAnimContext ac; ListBase anim_data= {NULL, NULL}; @@ -1071,14 +1071,14 @@ static int actkeys_cfrasnap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_cfrasnap (wmOperatorType *ot) +void ACT_OT_frame_jump (wmOperatorType *ot) { /* identifiers */ - ot->name= "Snap Current Frame to Keys"; - ot->idname= "ACT_OT_keyframes_cfrasnap"; + ot->name= "Jump to Frame"; + ot->idname= "ACT_OT_frame_jump"; /* api callbacks */ - ot->exec= actkeys_cfrasnap_exec; + ot->exec= actkeys_framejump_exec; ot->poll= ED_operator_action_active; /* flags */ @@ -1166,11 +1166,11 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_snap (wmOperatorType *ot) +void ACT_OT_snap (wmOperatorType *ot) { /* identifiers */ ot->name= "Snap Keys"; - ot->idname= "ACT_OT_keyframes_snap"; + ot->idname= "ACT_OT_snap"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1282,11 +1282,11 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_mirror (wmOperatorType *ot) +void ACT_OT_mirror (wmOperatorType *ot) { /* identifiers */ ot->name= "Mirror Keys"; - ot->idname= "ACT_OT_keyframes_mirror"; + ot->idname= "ACT_OT_mirror"; /* api callbacks */ ot->invoke= WM_menu_invoke; diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index fa96e1ea81f..1bc30b2ac42 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -51,11 +51,14 @@ #include "ED_types.h" #include "ED_util.h" +#include "RNA_access.h" + #include "WM_api.h" #include "WM_types.h" #include "BIF_gl.h" #include "BIF_glutil.h" +#include "BIF_transform.h" #include "UI_interface.h" #include "UI_resources.h" @@ -63,1494 +66,183 @@ #include "action_intern.h" +enum { + B_REDR= 0, +} eActHeader_Events; + /* ********************************************************* */ /* Menu Defines... */ -/* button events */ -enum { - B_REDR = 0, - B_ACTCOPYKEYS, - B_ACTPASTEKEYS, -} eActHeader_ButEvents; - -/* ------------------------------- */ -/* enums declaring constants that are used as menu event codes */ - -enum { - ACTMENU_VIEW_CENTERVIEW= 0, - ACTMENU_VIEW_AUTOUPDATE, - ACTMENU_VIEW_PLAY3D, - ACTMENU_VIEW_PLAYALL, - ACTMENU_VIEW_ALL, - ACTMENU_VIEW_MAXIMIZE, - ACTMENU_VIEW_LOCK, - ACTMENU_VIEW_SLIDERS, - ACTMENU_VIEW_NEXTMARKER, - ACTMENU_VIEW_PREVMARKER, - ACTMENU_VIEW_NEXTKEYFRAME, - ACTMENU_VIEW_PREVKEYFRAME, - ACTMENU_VIEW_TIME, - ACTMENU_VIEW_NOHIDE, - ACTMENU_VIEW_FRANUM, - ACTMENU_VIEW_TRANSDELDUPS, - ACTMENU_VIEW_HORIZOPTIMISE, - ACTMENU_VIEW_GCOLORS, - ACTMENU_VIEW_PREVRANGESET, - ACTMENU_VIEW_PREVRANGECLEAR, - ACTMENU_VIEW_PREVRANGEAUTO -}; - -enum { - ACTMENU_SEL_BORDER = 0, - ACTMENU_SEL_BORDERC, - ACTMENU_SEL_BORDERM, - ACTMENU_SEL_ALL_KEYS, - ACTMENU_SEL_ALL_CHAN, - ACTMENU_SEL_ALL_MARKERS, - ACTMENU_SEL_INVERSE_KEYS, - ACTMENU_SEL_INVERSE_MARKERS, - ACTMENU_SEL_INVERSE_CHANNELS, - ACTMENU_SEL_LEFTKEYS, - ACTMENU_SEL_RIGHTKEYS -}; - -enum { - ACTMENU_SEL_COLUMN_KEYS = 1, - ACTMENU_SEL_COLUMN_CFRA, - ACTMENU_SEL_COLUMN_MARKERSCOLUMN, - ACTMENU_SEL_COLUMN_MARKERSBETWEEN -}; - -enum { - ACTMENU_CHANNELS_OPENLEVELS = 0, - ACTMENU_CHANNELS_CLOSELEVELS, - ACTMENU_CHANNELS_EXPANDALL, - ACTMENU_CHANNELS_SHOWACHANS, - ACTMENU_CHANNELS_DELETE -}; - -enum { - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_UP = 0, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_DOWN, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_TOP, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_BOTTOM -}; - -enum { - ACTMENU_CHANNELS_GROUP_ADD_TOACTIVE = 0, - ACTMENU_CHANNELS_GROUP_ADD_TONEW, - ACTMENU_CHANNELS_GROUP_REMOVE, - ACTMENU_CHANNELS_GROUP_SYNCPOSE -}; - -enum { - ACTMENU_CHANNELS_SETTINGS_TOGGLE = 0, - ACTMENU_CHANNELS_SETTINGS_ENABLE, - ACTMENU_CHANNELS_SETTINGS_DISABLE, -}; - -enum { - ACTMENU_KEY_DUPLICATE = 0, - ACTMENU_KEY_DELETE, - ACTMENU_KEY_CLEAN, - ACTMENU_KEY_SAMPLEKEYS, - ACTMENU_KEY_INSERTKEY -}; - -enum { - ACTMENU_KEY_TRANSFORM_MOVE = 0, - ACTMENU_KEY_TRANSFORM_SCALE, - ACTMENU_KEY_TRANSFORM_SLIDE, - ACTMENU_KEY_TRANSFORM_EXTEND -}; - -enum { - ACTMENU_KEY_HANDLE_AUTO = 0, - ACTMENU_KEY_HANDLE_ALIGN, - ACTMENU_KEY_HANDLE_FREE, - ACTMENU_KEY_HANDLE_VECTOR -}; - -enum { - ACTMENU_KEY_INTERP_CONST = 0, - ACTMENU_KEY_INTERP_LINEAR, - ACTMENU_KEY_INTERP_BEZIER -}; - -enum { - ACTMENU_KEY_EXTEND_CONST = 0, - ACTMENU_KEY_EXTEND_EXTRAPOLATION, - ACTMENU_KEY_EXTEND_CYCLIC, - ACTMENU_KEY_EXTEND_CYCLICEXTRAPOLATION -}; - -enum { - ACTMENU_KEY_SNAP_NEARFRAME = 1, - ACTMENU_KEY_SNAP_CURFRAME, - ACTMENU_KEY_SNAP_NEARMARK, - ACTMENU_KEY_SNAP_NEARTIME, - ACTMENU_KEY_SNAP_CFRA2KEY, -}; - -enum { - ACTMENU_KEY_MIRROR_CURFRAME = 1, - ACTMENU_KEY_MIRROR_YAXIS, - ACTMENU_KEY_MIRROR_XAXIS, - ACTMENU_KEY_MIRROR_MARKER -}; - -enum { - ACTMENU_MARKERS_ADD = 0, - ACTMENU_MARKERS_DUPLICATE, - ACTMENU_MARKERS_DELETE, - ACTMENU_MARKERS_NAME, - ACTMENU_MARKERS_MOVE, - ACTMENU_MARKERS_LOCALADD, - ACTMENU_MARKERS_LOCALRENAME, - ACTMENU_MARKERS_LOCALDELETE, - ACTMENU_MARKERS_LOCALMOVE -}; - -/* ------------------------------- */ -/* macros for easier state testing (only for use here) */ - -/* test if active action editor is showing any markers */ -#if 0 - #define SACTION_HASMARKERS \ - ((saction->action && saction->action->markers.first) \ - || (scene->markers.first)) -#endif - -/* need to find out how to get scene from context */ -#define SACTION_HASMARKERS (saction->action && saction->action->markers.first) - -/* ------------------------------- */ - -/* *************************************************************** */ -/* menus */ - -/* Key menu --------------------------- */ - -static void do_keymenu_transformmenu(bContext *C, void *arg, int event) +static void act_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { - switch (event) - { - case ACTMENU_KEY_TRANSFORM_MOVE: - //transform_action_keys('g', 0); - break; - case ACTMENU_KEY_TRANSFORM_SCALE: - //transform_action_keys('s', 0); - break; - case ACTMENU_KEY_TRANSFORM_SLIDE: - //transform_action_keys('t', 0); - break; - case ACTMENU_KEY_TRANSFORM_EXTEND: - //transform_action_keys('e', 0); - break; - } -} - -static uiBlock *action_keymenu_transformmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa= CTX_wm_area(C); + SpaceAction *sact= (SpaceAction*)CTX_wm_space_data(C); + PointerRNA spaceptr; - block= uiBeginBlock(C, ar, "action_keymenu_transformmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_transformmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_TRANSFORM_MOVE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Grab/Extend from Frame|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_TRANSFORM_EXTEND, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_TRANSFORM_SCALE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Time Slide|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_TRANSFORM_SLIDE, ""); + /* retrieve state */ + RNA_pointer_create(&sc->id, &RNA_SpaceDopeSheetEditor, sact, &spaceptr); - uiBlockSetDirection(block, UI_RIGHT); + /* create menu */ + //uiItemO(layout, NULL, ICON_MENU_PANEL, "ACT_OT_properties"); - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); + //uiItemS(layout); - return block; -} - -static void do_keymenu_snapmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_KEY_SNAP_NEARFRAME: - case ACTMENU_KEY_SNAP_CURFRAME: - case ACTMENU_KEY_SNAP_NEARMARK: - case ACTMENU_KEY_SNAP_NEARTIME: - //snap_action_keys(event); - break; - - case ACTMENU_KEY_SNAP_CFRA2KEY: - //snap_cfra_action(); - break; - } -} - -static uiBlock *action_keymenu_snapmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - uiBlock *block; - short yco= 0, menuwidth=120; - + uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0, 0, 0); + uiItemR(layout, NULL, 0, &spaceptr, "show_sliders", 0, 0, 0); + uiItemR(layout, NULL, 0, &spaceptr, "automerge_keyframes", 0, 0, 0); - block= uiBeginBlock(C, ar, "action_keymenu_snapmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_snapmenu, NULL); - - if (saction->flag & SACTION_DRAWTIME) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Key -> Nearest Second|Shift S, 1", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_NEARTIME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Key -> Current Time|Shift S, 2", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_CURFRAME, ""); - - } - else { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Key -> Nearest Frame|Shift S, 1", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_NEARFRAME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Key -> Current Frame|Shift S, 2", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_CURFRAME, ""); - } - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Key -> Nearest Marker|Shift S, 3", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_NEARMARK, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Current Frame -> Key|Ctrl Shift S", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SNAP_NEARMARK, ""); + if (sact->flag & SACTION_DRAWTIME) + uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); + else + uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); - uiBlockSetDirection(block, UI_RIGHT); + uiItemS(layout); - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); - return block; -} - -static void do_keymenu_mirrormenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_KEY_MIRROR_CURFRAME: - case ACTMENU_KEY_MIRROR_YAXIS: - //mirror_action_keys(event); - break; - } - -} - -static uiBlock *action_keymenu_mirrormenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; + uiItemO(layout, NULL, 0, "ACT_OT_previewrange_set"); - block= uiBeginBlock(C, ar, "action_keymenu_mirrormenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_mirrormenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Current Frame|Shift M, 1", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_MIRROR_CURFRAME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Vertical Axis|Shift M, 2", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_MIRROR_YAXIS, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Horizontal Axis|Shift M, 3", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_MIRROR_XAXIS, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Selected Marker|Shift M, 4", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_MIRROR_MARKER, ""); + uiItemS(layout); - uiBlockSetDirection(block, UI_RIGHT); + uiItemO(layout, NULL, 0, "ACT_OT_frame_jump"); - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); + uiItemO(layout, NULL, 0, "ACT_OT_view_all"); - return block; -} - -static void do_keymenu_handlemenu(bContext *C, void *arg, int event) -{ - switch (event) { - case ACTMENU_KEY_HANDLE_AUTO: - //sethandles_action_keys(HD_AUTO); - break; - - case ACTMENU_KEY_HANDLE_ALIGN: - case ACTMENU_KEY_HANDLE_FREE: - /* OK, this is kinda dumb, need to fix the - * toggle crap in sethandles_ipo_keys() - */ - //sethandles_action_keys(HD_ALIGN); - break; - - case ACTMENU_KEY_HANDLE_VECTOR: - //sethandles_action_keys(HD_VECT); - break; - } -} - -static uiBlock *action_keymenu_handlemenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_keymenu_handlemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_handlemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Auto|Shift H", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_HANDLE_AUTO, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Aligned|H", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_HANDLE_ALIGN, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Free|H", 0, yco-=20, menuwidth, - 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_HANDLE_FREE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Vector|V", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_HANDLE_VECTOR, ""); - - uiBlockSetDirection(block, UI_RIGHT); - - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); - - return block; -} - -static void do_keymenu_extendmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_KEY_EXTEND_CONST: - //action_set_ipo_flags(SET_EXTEND_MENU, SET_EXTEND_CONSTANT); - break; - case ACTMENU_KEY_EXTEND_EXTRAPOLATION: - //action_set_ipo_flags(SET_EXTEND_MENU, SET_EXTEND_EXTRAPOLATION); - break; - case ACTMENU_KEY_EXTEND_CYCLIC: - //action_set_ipo_flags(SET_EXTEND_MENU, SET_EXTEND_CYCLIC); - break; - case ACTMENU_KEY_EXTEND_CYCLICEXTRAPOLATION: - //action_set_ipo_flags(SET_EXTEND_MENU, SET_EXTEND_CYCLICEXTRAPOLATION); - break; - } -} - -static uiBlock *action_keymenu_extendmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_keymenu_extendmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_extendmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Constant", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_EXTEND_CONST, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Extrapolation", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_EXTEND_EXTRAPOLATION, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Cyclic", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_EXTEND_CYCLIC, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Cyclic Extrapolation", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_EXTEND_CYCLICEXTRAPOLATION, ""); - - uiBlockSetDirection(block, UI_RIGHT); - - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); - - return block; -} - -static void do_keymenu_intpolmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_KEY_INTERP_CONST: - //action_set_ipo_flags(SET_IPO_MENU, SET_IPO_CONSTANT); - break; - case ACTMENU_KEY_INTERP_LINEAR: - //action_set_ipo_flags(SET_IPO_MENU, SET_IPO_LINEAR); - break; - case ACTMENU_KEY_INTERP_BEZIER: - //action_set_ipo_flags(SET_IPO_MENU, SET_IPO_BEZIER); - break; - } -} - -static uiBlock *action_keymenu_intpolmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_keymenu_intpolmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_keymenu_intpolmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Constant|Shift T, 1", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_INTERP_CONST, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Linear|Shift T, 2", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_INTERP_LINEAR, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Bezier|Shift T, 3", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_INTERP_BEZIER, ""); - - uiBlockSetDirection(block, UI_RIGHT); - - uiTextBoundsBlock(block, 60); - uiEndBlock(C, block); - - return block; -} - -static void do_action_keymenu(bContext *C, void *arg, int event) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - bAction *act; - //Key *key; - - if (!saction) return; - - act = saction->action; - //key = get_action_mesh_key(); - - switch(event) - { - case ACTMENU_KEY_DUPLICATE: - //duplicate_action_keys(); - break; - case ACTMENU_KEY_DELETE: - //delete_action_keys(); - break; - case ACTMENU_KEY_CLEAN: - //clean_action(); - break; - case ACTMENU_KEY_SAMPLEKEYS: - //sample_action_keys(); - break; - case ACTMENU_KEY_INSERTKEY: - //insertkey_action(); - break; - } -} - -static uiBlock *action_keymenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_keymenu", UI_EMBOSSP); - - - uiBlockSetButmFunc(block, do_action_keymenu, NULL); - - uiDefIconTextBlockBut(block, action_keymenu_transformmenu, - NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_keymenu_snapmenu, - NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_keymenu_mirrormenu, - NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Insert Key|I", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_INSERTKEY, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Duplicate|Shift D", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_DUPLICATE, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Delete|X", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_DELETE, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Clean Action|O", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_CLEAN, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Sample Keys|Alt O", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_SAMPLEKEYS, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, action_keymenu_handlemenu, - NULL, ICON_RIGHTARROW_THIN, - "Handle Type", 0, yco-=20, 120, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, action_keymenu_extendmenu, - NULL, ICON_RIGHTARROW_THIN, - "Extend Mode", 0, yco-=20, 120, 20, ""); - uiDefIconTextBlockBut(block, action_keymenu_intpolmenu, - NULL, ICON_RIGHTARROW_THIN, - "Interpolation Mode", 0, yco-=20, 120, 20, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -/* Frame menu --------------------------- */ - - -// framemenu uses functions from keymenu -static uiBlock *action_framemenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_framemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_action_keymenu, NULL); - - uiDefIconTextBlockBut(block, action_keymenu_transformmenu, - NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_keymenu_snapmenu, - NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_keymenu_mirrormenu, - NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Duplicate|Shift D", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_DUPLICATE, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Delete|X", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_KEY_DELETE, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -/* Marker menu --------------------------- */ - -static void do_markermenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_MARKERS_ADD: - //add_marker(CFRA); - break; - case ACTMENU_MARKERS_DUPLICATE: - //duplicate_marker(); - break; - case ACTMENU_MARKERS_DELETE: - //remove_marker(); - break; - case ACTMENU_MARKERS_NAME: - //rename_marker(); - break; - case ACTMENU_MARKERS_MOVE: - //transform_markers('g', 0); - break; - case ACTMENU_MARKERS_LOCALADD: - //action_add_localmarker(G.saction->action, CFRA); - break; - case ACTMENU_MARKERS_LOCALDELETE: - //action_remove_localmarkers(G.saction->action); - break; - case ACTMENU_MARKERS_LOCALRENAME: - //action_rename_localmarker(G.saction->action); - break; - case ACTMENU_MARKERS_LOCALMOVE: - /*G.saction->flag |= SACTION_POSEMARKERS_MOVE; - transform_markers('g', 0); - G.saction->flag &= ~SACTION_POSEMARKERS_MOVE;*/ - break; - } -} - -static uiBlock *action_markermenu(bContext *C, ARegion *ar, void *arg_unused) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_markermenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_markermenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Marker|M", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_ADD, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DUPLICATE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DELETE, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "(Re)Name Marker|Ctrl M", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_NAME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Marker|Ctrl G", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_MOVE, ""); - - if (saction->mode == SACTCONT_ACTION) { - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Pose Marker|Shift L", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALADD, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename Pose Marker|Ctrl Shift L", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALRENAME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Pose Marker|Alt L", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALDELETE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Pose Marker|Ctrl L", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALMOVE, ""); - } - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - - -/* Channel menu --------------------------- */ - -static void do_channelmenu_posmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_DOWN: - //rearrange_action_channels(REARRANGE_ACTCHAN_DOWN); - break; - case ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_UP: - //rearrange_action_channels(REARRANGE_ACTCHAN_UP); - break; - case ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_TOP: - //rearrange_action_channels(REARRANGE_ACTCHAN_TOP); - break; - case ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_BOTTOM: - //rearrange_action_channels(REARRANGE_ACTCHAN_BOTTOM); - break; - } -} - -static uiBlock *action_channelmenu_posmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_channelmenu_posmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_channelmenu_posmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Move Up|Shift Page Up", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_UP, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Move Down|Shift Page Down", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_DOWN, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Move to Top|Ctrl Shift Page Up", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_TOP, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Move to Bottom|Ctrl Shift Page Down", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_CHANPOS_MOVE_CHANNEL_BOTTOM, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_channelmenu_groupmenu(bContext *C, void *arg, int event) -{ - switch(event) - { - case ACTMENU_CHANNELS_GROUP_ADD_TOACTIVE: - //action_groups_group(0); - break; - case ACTMENU_CHANNELS_GROUP_ADD_TONEW: - //action_groups_group(1); - break; - case ACTMENU_CHANNELS_GROUP_REMOVE: - //action_groups_ungroup(); - break; - case ACTMENU_CHANNELS_GROUP_SYNCPOSE: /* Syncronise Pose-data and Action-data */ - //sync_pchan2achan_grouping(); - break; - } -} - -static uiBlock *action_channelmenu_groupmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_channelmenu_groupmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_channelmenu_groupmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Add to Active Group|Shift G", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_GROUP_ADD_TOACTIVE, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Add to New Group|Ctrl Shift G", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_GROUP_ADD_TONEW, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Remove From Group|Alt G", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_GROUP_REMOVE, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Synchronise with Armature", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_GROUP_SYNCPOSE, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_channelmenu_settingsmenu(bContext *C, void *arg, int event) -{ - //setflag_action_channels(event); -} - -static uiBlock *action_channelmenu_settingsmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_channelmenu_settingsmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_channelmenu_settingsmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Toggle a Setting|Shift W", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_SETTINGS_TOGGLE, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Enable a Setting|Ctrl Shift W", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_SETTINGS_ENABLE, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Disable a Setting|Alt W", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_CHANNELS_SETTINGS_DISABLE, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_channelmenu(bContext *C, void *arg, int event) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - - if (saction == NULL) return; - - switch(event) - { - case ACTMENU_CHANNELS_OPENLEVELS: /* Unfold selected channels one step */ - //openclose_level_action(1); - break; - case ACTMENU_CHANNELS_CLOSELEVELS: /* Fold selected channels one step */ - //openclose_level_action(-1); - break; - case ACTMENU_CHANNELS_EXPANDALL: /* Expands all channels */ - //expand_all_action(); - break; - case ACTMENU_CHANNELS_SHOWACHANS: /* Unfold groups that are hiding selected achans */ - //expand_obscuregroups_action(); - break; - case ACTMENU_CHANNELS_DELETE: /* Deletes selected channels */ - //delete_action_channels(); - break; - } -} - -static uiBlock *action_channelmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_channelmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_channelmenu, NULL); - - uiDefIconTextBlockBut(block, action_channelmenu_groupmenu, - NULL, ICON_RIGHTARROW_THIN, - "Grouping", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_channelmenu_posmenu, - NULL, ICON_RIGHTARROW_THIN, - "Ordering", 0, yco-=20, 120, 20, ""); - - uiDefIconTextBlockBut(block, action_channelmenu_settingsmenu, - NULL, ICON_RIGHTARROW_THIN, - "Settings", 0, yco-=20, 120, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Delete|X", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_DELETE, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Toggle Show Hierachy|~", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_EXPANDALL, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Show Group-Hidden Channels|Shift ~", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_SHOWACHANS, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Expand One Level|Ctrl NumPad+", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_OPENLEVELS, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Collapse One Level|Ctrl NumPad-", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_CLOSELEVELS, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -/* Grease Pencil --------------------------- */ - -/* Uses channelmenu functions */ -static uiBlock *action_gplayermenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_gplayermenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_channelmenu, NULL); - - uiDefIconTextBlockBut(block, action_channelmenu_settingsmenu, - NULL, ICON_RIGHTARROW_THIN, - "Settings", 0, yco-=20, 120, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Delete|X", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_CHANNELS_DELETE, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -/* Select menu --------------------------- */ - -static void do_selectmenu_columnmenu(bContext *C, void *arg, int event) -{ - switch (event) { - case ACTMENU_SEL_COLUMN_MARKERSBETWEEN: - //markers_selectkeys_between(); - break; - case ACTMENU_SEL_COLUMN_KEYS: - //column_select_action_keys(1); - break; - case ACTMENU_SEL_COLUMN_MARKERSCOLUMN: - //column_select_action_keys(2); - break; - case ACTMENU_SEL_COLUMN_CFRA: - //column_select_action_keys(3); - break; - } -} - -static uiBlock *action_selectmenu_columnmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_selectmenu_columnmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_selectmenu_columnmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "On Selected Keys|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_COLUMN_KEYS, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "On Current Frame|Ctrl K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_COLUMN_CFRA, ""); - - if (SACTION_HASMARKERS) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "On Selected Markers|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_COLUMN_MARKERSCOLUMN, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Between Selected Markers|Alt K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_COLUMN_MARKERSBETWEEN, ""); - } - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_selectmenu(bContext *C, void *arg, int event) -{ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - //Key *key; - - if (saction == NULL) return; - - //key = get_action_mesh_key(); - - switch(event) - { - case ACTMENU_SEL_BORDER: /* Border Select */ - //borderselect_action(); - break; - - case ACTMENU_SEL_BORDERC: /* Border Select */ - //borderselect_actionchannels(); - break; - - case ACTMENU_SEL_BORDERM: /* Border Select */ - //borderselect_markers(); - break; - - case ACTMENU_SEL_ALL_KEYS: /* Select/Deselect All Keys */ - /*deselect_action_keys(1, 1); - BIF_undo_push("(De)Select Keys"); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWIPO, 0);*/ - break; - - case ACTMENU_SEL_ALL_CHAN: /* Select/Deselect All Channels */ - /*deselect_action_channels(1); - BIF_undo_push("(De)Select Action Channels"); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWIPO, 0);*/ - break; - - case ACTMENU_SEL_ALL_MARKERS: /* select/deselect all markers */ - /*deselect_markers(1, 0); - BIF_undo_push("(De)Select Markers"); - allqueue(REDRAWMARKER, 0);*/ - break; - - case ACTMENU_SEL_INVERSE_KEYS: /* invert selection status of keys */ - /*deselect_action_keys(0, 2); - BIF_undo_push("Inverse Keys"); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWIPO, 0);*/ - break; - - case ACTMENU_SEL_INVERSE_CHANNELS: /* invert selection status of channels */ - /*deselect_action_channels(2); - BIF_undo_push("Inverse Action Channels"); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWIPO, 0);*/ - break; - - case ACTMENU_SEL_INVERSE_MARKERS: /* invert selection of markers */ - /*deselect_markers(0, 2); - BIF_undo_push("Inverse Action Channels"); - allqueue(REDRAWMARKER, 0);*/ - break; - - case ACTMENU_SEL_LEFTKEYS: - //selectkeys_leftright(1, SELECT_REPLACE); - break; - - case ACTMENU_SEL_RIGHTKEYS: - //selectkeys_leftright(0, SELECT_REPLACE); - break; - } -} - -static uiBlock *action_selectmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "action_selectmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_selectmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Border Select Keys|B", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_BORDER, ""); - if (SACTION_HASMARKERS) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Border Select Markers|Ctrl B", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_BORDERM, ""); - } - if (saction->mode != SACTCONT_SHAPEKEY) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Border Select Channels|B", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_BORDERC, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Select/Deselect All Keys|A", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_ALL_KEYS, ""); - if (SACTION_HASMARKERS) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Select/Deselect All Markers|Ctrl A", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_ALL_MARKERS, ""); - } - if (saction->mode != SACTCONT_SHAPEKEY) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Select/Deselect All Channels|A", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_ALL_CHAN, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Inverse Keys|Ctrl I", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_INVERSE_KEYS, ""); - if (SACTION_HASMARKERS) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Inverse Markers|Ctrl Shift I", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_INVERSE_MARKERS, ""); - } - if (saction->mode != SACTCONT_SHAPEKEY) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Inverse All Channels|Ctrl I", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_INVERSE_CHANNELS, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Back In Time|Alt RMB", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_LEFTKEYS, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Ahead In Time|Alt RMB", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_SEL_RIGHTKEYS, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, action_selectmenu_columnmenu, - NULL, ICON_RIGHTARROW_THIN, "Column Select Keys", 0, yco-=20, 120, 20, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -/* View menu --------------------------- */ - -static void do_viewmenu(bContext *C, void *arg, int event) -{ - switch(event) { - case ACTMENU_VIEW_CENTERVIEW: /* Center View to Current Frame */ - //center_currframe(); - break; - case ACTMENU_VIEW_AUTOUPDATE: /* Update Automatically */ - /*if (BTST(G.saction->lock, 0)) - G.saction->lock = BCLR(G.saction->lock, 0); - else - G.saction->lock = BSET(G.saction->lock, 0);*/ - break; - case ACTMENU_VIEW_PLAY3D: /* Play Back Animation */ - //play_anim(0); - break; - case ACTMENU_VIEW_PLAYALL: /* Play Back Animation in All */ - //play_anim(1); - break; - case ACTMENU_VIEW_ALL: /* View All */ - //do_action_buttons(B_ACTHOME); - break; - case ACTMENU_VIEW_LOCK: - /*G.v2d->flag ^= V2D_VIEWLOCK; - if (G.v2d->flag & V2D_VIEWLOCK) - view2d_do_locks(curarea, 0);*/ - break; - case ACTMENU_VIEW_SLIDERS: /* Show sliders (when applicable) */ - //G.saction->flag ^= SACTION_SLIDERS; - break; - case ACTMENU_VIEW_MAXIMIZE: /* Maximize Window */ - /* using event B_FULL */ - break; - case ACTMENU_VIEW_NEXTMARKER: /* Jump to next marker */ - //nextprev_marker(1); - break; - case ACTMENU_VIEW_PREVMARKER: /* Jump to previous marker */ - //nextprev_marker(-1); - break; - case ACTMENU_VIEW_TIME: /* switch between frames and seconds display */ - //G.saction->flag ^= SACTION_DRAWTIME; - break; - case ACTMENU_VIEW_NOHIDE: /* Show hidden channels */ - //G.saction->flag ^= SACTION_NOHIDE; - break; - case ACTMENU_VIEW_NEXTKEYFRAME: /* Jump to next keyframe */ - //nextprev_action_keyframe(1); - break; - case ACTMENU_VIEW_PREVKEYFRAME: /* Jump to previous keyframe */ - //nextprev_action_keyframe(-1); - break; - case ACTMENU_VIEW_TRANSDELDUPS: /* Don't delete duplicate/overlapping keyframes after transform */ - //G.saction->flag ^= SACTION_NOTRANSKEYCULL; - break; - case ACTMENU_VIEW_HORIZOPTIMISE: /* Include keyframes not in view (horizontally) when preparing to draw */ - //G.saction->flag ^= SACTION_HORIZOPTIMISEON; - break; - case ACTMENU_VIEW_GCOLORS: /* Draw grouped-action channels using its group's color */ - //G.saction->flag ^= SACTION_NODRAWGCOLORS; - break; - case ACTMENU_VIEW_PREVRANGESET: /* Set preview range */ - //anim_previewrange_set(); - break; - case ACTMENU_VIEW_PREVRANGECLEAR: /* Clear preview range */ - //anim_previewrange_clear(); - break; - case ACTMENU_VIEW_PREVRANGEAUTO: /* Auto preview-range length */ - //action_previewrange_set(G.saction->action); - break; - } -} - -static uiBlock *action_viewmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); - View2D *v2d= UI_view2d_fromcontext_rwin(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "viewmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_viewmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Center View to Current Frame|C", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_CENTERVIEW, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if (saction->flag & SACTION_DRAWTIME) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Show Frames|Ctrl T", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_TIME, ""); - } - else { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Show Seconds|Ctrl T", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_TIME, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if (saction->mode == SACTCONT_GPENCIL) { - // this option may get removed in future - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_HORIZOPTIMISEON)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Cull Out-of-View Keys (Time)|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_HORIZOPTIMISE, ""); - } - else { - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_SLIDERS)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Show Sliders|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_SLIDERS, ""); - - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_NOHIDE)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Show Hidden Channels|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_NOHIDE, ""); - - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_NODRAWGCOLORS)?ICON_CHECKBOX_DEHLT:ICON_CHECKBOX_HLT, - "Use Group Colors|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_GCOLORS, ""); - - // this option may get removed in future - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_HORIZOPTIMISEON)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Cull Out-of-View Keys (Time)|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_HORIZOPTIMISE, ""); - - uiDefIconTextBut(block, BUTM, 1, (saction->flag & SACTION_NOTRANSKEYCULL)?ICON_CHECKBOX_DEHLT:ICON_CHECKBOX_HLT, - "AutoMerge Keyframes|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_TRANSDELDUPS, ""); - } - - - uiDefIconTextBut(block, BUTM, 1, (v2d->flag & V2D_VIEWSYNC_SCREEN_TIME)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Lock Time to Other Windows|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_LOCK, ""); - - /*uiDefIconTextBut(block, BUTM, 1, BTST(saction->lock, 0)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, - "Update Automatically|", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_AUTOUPDATE, "");*/ - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Jump To Next Marker|PageUp", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_VIEW_NEXTMARKER, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Jump To Prev Marker|PageDown", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_VIEW_PREVMARKER, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Jump To Next Keyframe|Ctrl PageUp", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_VIEW_NEXTKEYFRAME, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Jump To Prev Keyframe|Ctrl PageDown", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, ACTMENU_VIEW_PREVKEYFRAME, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Play Back Animation|Alt A", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_PLAY3D, ""); - //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - // "Play Back Animation in 3D View|Alt Shift A", 0, yco-=20, - // menuwidth, 19, NULL, 0.0, 0.0, 1, - // ACTMENU_VIEW_PLAYALL, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Set Preview Range|Ctrl P", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_PREVRANGESET, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Clear Preview Range|Alt P", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_PREVRANGECLEAR, ""); - - if ((saction->mode == SACTCONT_ACTION) && (saction->action)) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Preview Range from Action Length|Ctrl Alt P", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_PREVRANGEAUTO, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, - menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "View All|Home", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, - ACTMENU_VIEW_ALL, ""); - -/* if (!curarea->full) - uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, - "Maximize Window|Ctrl UpArrow", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_VIEW_MAXIMIZE, ""); + if (sa->full) + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow else - uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, - "Tile Window|Ctrl DownArrow", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 0, - ACTMENU_VIEW_MAXIMIZE, ""); -*/ + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctrl DownArrow +} + +static void act_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "ACT_OT_select_all_toggle"); + uiItemBooleanO(layout, "Invert All", 0, "ACT_OT_select_all_toggle", "invert", 1); - if (curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } + uiItemS(layout); - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); + uiItemO(layout, NULL, 0, "ACT_OT_select_border"); + uiItemBooleanO(layout, "Border Axis Range", 0, "ACT_OT_select_border", "axis_range", 1); - return block; + uiItemS(layout); + + uiItemEnumO(layout, "Columns on Selected Keys", 0, "ACT_OT_select_column", "mode", ACTKEYS_COLUMNSEL_KEYS); + uiItemEnumO(layout, "Column on Current Frame", 0, "ACT_OT_select_column", "mode", ACTKEYS_COLUMNSEL_CFRA); + + uiItemEnumO(layout, "Columns on Selected Markers", 0, "ACT_OT_select_column", "mode", ACTKEYS_COLUMNSEL_MARKERS_COLUMN); + uiItemEnumO(layout, "Between Selected Markers", 0, "ACT_OT_select_column", "mode", ACTKEYS_COLUMNSEL_MARKERS_BETWEEN); +} + +static void act_channelmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_toggle"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_enable"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_disable"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ANIM_OT_channels_editable_toggle"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ANIM_OT_channels_expand"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_collapse"); +} + +static void act_gplayermenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + //uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu); + //uiItemS(layout); + //uiItemO(layout, NULL, 0, "NLAEDIT_OT_duplicate"); +} + +static void act_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TIME_TRANSLATE); + uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); + uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); +} + +static void act_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "To Current Frame", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_CFRA); + uiItemEnumO(layout, "To Nearest Frame", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_FRAME); + uiItemEnumO(layout, "To Nearest Second", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_SECOND); + uiItemEnumO(layout, "To Nearest Marker", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_MARKER); +} + +static void act_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "Over Current Frame", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_CFRA); + uiItemEnumO(layout, "Over Vertical Axis", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_YAXIS); + uiItemEnumO(layout, "Over Horizontal Axis", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_XAXIS); + uiItemEnumO(layout, "Over Selected Marker", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_MARKER); +} + +static void act_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_FREE); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_AUTO); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_VECT); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_ALIGN); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_AUTO_ANIM); // xxx? +} + +static void act_edit_ipomenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_CONST); + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_LIN); + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_BEZ); +} + +static void act_edit_expomenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type_set", "type", FCURVE_EXTRAPOLATE_CONSTANT); + uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type_set", "type", FCURVE_EXTRAPOLATE_LINEAR); +} + +static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemMenuF(layout, "Transform", 0, act_edit_transformmenu); + uiItemMenuF(layout, "Snap", 0, act_edit_snapmenu); + uiItemMenuF(layout, "Mirror", 0, act_edit_mirrormenu); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ACT_OT_insert"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ACT_OT_duplicate"); + uiItemO(layout, NULL, 0, "ACT_OT_delete"); + + uiItemS(layout); + + uiItemMenuF(layout, "Handle Type", 0, act_edit_handlesmenu); + uiItemMenuF(layout, "Interpolation Mode", 0, act_edit_ipomenu); + uiItemMenuF(layout, "Extrapolation Mode", 0, act_edit_expomenu); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ACT_OT_clean"); + uiItemO(layout, NULL, 0, "ACT_OT_sample"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ACT_OT_copy"); + uiItemO(layout, NULL, 0, "ACT_OT_paste"); } /* ************************ header area region *********************** */ static void do_action_buttons(bContext *C, void *arg, int event) { - switch(event) { + switch (event) { case B_REDR: ED_area_tag_redraw(CTX_wm_area(C)); break; - - case B_ACTCOPYKEYS: - WM_operator_name_call(C, "ACT_OT_keyframes_copy", WM_OP_EXEC_REGION_WIN, NULL); - break; - case B_ACTPASTEKEYS: - WM_operator_name_call(C, "ACT_OT_keyframes_paste", WM_OP_EXEC_REGION_WIN, NULL); - break; } } @@ -1622,45 +314,38 @@ void action_header_buttons(const bContext *C, ARegion *ar) if ((sa->flag & HEADER_NO_PULLDOWN)==0) { xmax= GetButStringLength("View"); - uiDefPulldownBut(block, action_viewmenu, CTX_wm_area(C), - "View", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, act_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); xco+= xmax; xmax= GetButStringLength("Select"); - uiDefPulldownBut(block, action_selectmenu, CTX_wm_area(C), - "Select", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, act_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); xco+= xmax; if ( (saction->mode == SACTCONT_DOPESHEET) || ((saction->action) && (saction->mode==SACTCONT_ACTION)) ) { xmax= GetButStringLength("Channel"); - uiDefPulldownBut(block, action_channelmenu, CTX_wm_area(C), - "Channel", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, act_channelmenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); xco+= xmax; } else if (saction->mode==SACTCONT_GPENCIL) { xmax= GetButStringLength("Channel"); - uiDefPulldownBut(block, action_gplayermenu, CTX_wm_area(C), - "Channel", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, act_gplayermenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); xco+= xmax; } - xmax= GetButStringLength("Marker"); - uiDefPulldownBut(block, action_markermenu, CTX_wm_area(C), - "Marker", xco, yco-2, xmax-3, 24, ""); - xco+= xmax; + //xmax= GetButStringLength("Marker"); + //uiDefMenuBut(block, act_markermenu, NULL, "Marker", xco, yco, xmax-3, 20, ""); + //xco+= xmax; if (saction->mode == SACTCONT_GPENCIL) { - xmax= GetButStringLength("Frame"); - uiDefPulldownBut(block, action_framemenu, CTX_wm_area(C), - "Frame", xco, yco-2, xmax-3, 24, ""); - xco+= xmax; + //xmax= GetButStringLength("Frame"); + //uiDefMenuBut(block, act_selectmenu, NULL, "Frame", xco, yco, xmax-3, 20, ""); + //xco+= xmax; } else { xmax= GetButStringLength("Key"); - uiDefPulldownBut(block, action_keymenu, CTX_wm_area(C), - "Key", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, act_editmenu, NULL, "Key", xco, yco, xmax-3, 20, ""); xco+= xmax; } } @@ -1712,8 +397,8 @@ void action_header_buttons(const bContext *C, ARegion *ar) /* COPY PASTE */ uiBlockBeginAlign(block); - uiDefIconBut(block, BUT, B_ACTCOPYKEYS, ICON_COPYDOWN, xco,yco,XIC,YIC, 0, 0, 0, 0, 0, "Copies the selected keyframes from the selected channel(s) to the buffer"); - uiDefIconBut(block, BUT, B_ACTPASTEKEYS, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the keyframes from the buffer"); + uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); + uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); uiBlockEndAlign(block); xco += (XIC + 8); diff --git a/source/blender/editors/space_action/action_intern.h b/source/blender/editors/space_action/action_intern.h index b4d2528b3b4..377b25030e5 100644 --- a/source/blender/editors/space_action/action_intern.h +++ b/source/blender/editors/space_action/action_intern.h @@ -53,10 +53,10 @@ void action_header_buttons(const struct bContext *C, struct ARegion *ar); /* ***************************************** */ /* action_select.c */ -void ACT_OT_keyframes_select_all_toggle(struct wmOperatorType *ot); -void ACT_OT_keyframes_select_border(struct wmOperatorType *ot); -void ACT_OT_keyframes_select_column(struct wmOperatorType *ot); -void ACT_OT_keyframes_clickselect(struct wmOperatorType *ot); +void ACT_OT_select_all_toggle(struct wmOperatorType *ot); +void ACT_OT_select_border(struct wmOperatorType *ot); +void ACT_OT_select_column(struct wmOperatorType *ot); +void ACT_OT_clickselect(struct wmOperatorType *ot); /* defines for left-right select tool */ enum { @@ -80,22 +80,23 @@ enum { void ACT_OT_previewrange_set(struct wmOperatorType *ot); void ACT_OT_view_all(struct wmOperatorType *ot); -void ACT_OT_keyframes_copy(struct wmOperatorType *ot); -void ACT_OT_keyframes_paste(struct wmOperatorType *ot); +void ACT_OT_copy(struct wmOperatorType *ot); +void ACT_OT_paste(struct wmOperatorType *ot); -void ACT_OT_keyframes_insert(struct wmOperatorType *ot); -void ACT_OT_keyframes_duplicate(struct wmOperatorType *ot); -void ACT_OT_keyframes_delete(struct wmOperatorType *ot); -void ACT_OT_keyframes_clean(struct wmOperatorType *ot); -void ACT_OT_keyframes_sample(struct wmOperatorType *ot); +void ACT_OT_insert(struct wmOperatorType *ot); +void ACT_OT_duplicate(struct wmOperatorType *ot); +void ACT_OT_delete(struct wmOperatorType *ot); +void ACT_OT_clean(struct wmOperatorType *ot); +void ACT_OT_sample(struct wmOperatorType *ot); -void ACT_OT_keyframes_handle_type_set(struct wmOperatorType *ot); -void ACT_OT_keyframes_interpolation_type(struct wmOperatorType *ot); -void ACT_OT_keyframes_extrapolation_type_set(struct wmOperatorType *ot); +void ACT_OT_handle_type_set(struct wmOperatorType *ot); +void ACT_OT_interpolation_type_set(struct wmOperatorType *ot); +void ACT_OT_extrapolation_type_set(struct wmOperatorType *ot); -void ACT_OT_keyframes_cfrasnap(struct wmOperatorType *ot); -void ACT_OT_keyframes_snap(struct wmOperatorType *ot); -void ACT_OT_keyframes_mirror(struct wmOperatorType *ot); +void ACT_OT_frame_jump(struct wmOperatorType *ot); + +void ACT_OT_snap(struct wmOperatorType *ot); +void ACT_OT_mirror(struct wmOperatorType *ot); /* defines for snap keyframes * NOTE: keep in sync with eEditKeyframes_Snap (in ED_keyframes_edit.h) diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index 49a0befdbe2..1a677e9191d 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -63,25 +63,25 @@ void action_operatortypes(void) { /* keyframes */ /* selection */ - WM_operatortype_append(ACT_OT_keyframes_clickselect); - WM_operatortype_append(ACT_OT_keyframes_select_all_toggle); - WM_operatortype_append(ACT_OT_keyframes_select_border); - WM_operatortype_append(ACT_OT_keyframes_select_column); + WM_operatortype_append(ACT_OT_clickselect); + WM_operatortype_append(ACT_OT_select_all_toggle); + WM_operatortype_append(ACT_OT_select_border); + WM_operatortype_append(ACT_OT_select_column); /* editing */ - WM_operatortype_append(ACT_OT_keyframes_snap); - WM_operatortype_append(ACT_OT_keyframes_mirror); - WM_operatortype_append(ACT_OT_keyframes_cfrasnap); - WM_operatortype_append(ACT_OT_keyframes_handle_type_set); - WM_operatortype_append(ACT_OT_keyframes_interpolation_type); - WM_operatortype_append(ACT_OT_keyframes_extrapolation_type_set); - WM_operatortype_append(ACT_OT_keyframes_sample); - WM_operatortype_append(ACT_OT_keyframes_clean); - WM_operatortype_append(ACT_OT_keyframes_delete); - WM_operatortype_append(ACT_OT_keyframes_duplicate); - WM_operatortype_append(ACT_OT_keyframes_insert); - WM_operatortype_append(ACT_OT_keyframes_copy); - WM_operatortype_append(ACT_OT_keyframes_paste); + WM_operatortype_append(ACT_OT_snap); + WM_operatortype_append(ACT_OT_mirror); + WM_operatortype_append(ACT_OT_frame_jump); + WM_operatortype_append(ACT_OT_handle_type_set); + WM_operatortype_append(ACT_OT_interpolation_type_set); + WM_operatortype_append(ACT_OT_extrapolation_type_set); + WM_operatortype_append(ACT_OT_sample); + WM_operatortype_append(ACT_OT_clean); + WM_operatortype_append(ACT_OT_delete); + WM_operatortype_append(ACT_OT_duplicate); + WM_operatortype_append(ACT_OT_insert); + WM_operatortype_append(ACT_OT_copy); + WM_operatortype_append(ACT_OT_paste); WM_operatortype_append(ACT_OT_previewrange_set); WM_operatortype_append(ACT_OT_view_all); @@ -95,57 +95,58 @@ static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) /* action_select.c - selection tools */ /* click-select */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, 0, 0); - kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "ACT_OT_clickselect", SELECTMOUSE, KM_PRESS, 0, 0); + kmi= WM_keymap_add_item(keymap, "ACT_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0); RNA_boolean_set(kmi->ptr, "column", 1); - kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + kmi= WM_keymap_add_item(keymap, "ACT_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", 1); - kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0); + kmi= WM_keymap_add_item(keymap, "ACT_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", 1); RNA_boolean_set(kmi->ptr, "column", 1); - kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); + kmi= WM_keymap_add_item(keymap, "ACT_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "left_right", ACTKEYS_LRSEL_TEST); /* deselect all */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_all_toggle", AKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + WM_keymap_add_item(keymap, "ACT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); /* borderselect */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_border", BKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); + WM_keymap_add_item(keymap, "ACT_OT_select_border", BKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); /* column select */ - RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_column", KKEY, KM_PRESS, 0, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_KEYS); - RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_column", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_CFRA); - RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_column", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_COLUMN); - RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_column", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_BETWEEN); + RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_select_column", KKEY, KM_PRESS, 0, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_KEYS); + RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_select_column", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_CFRA); + RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_select_column", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_COLUMN); + RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_select_column", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_BETWEEN); /* action_edit.c */ /* snap - current frame to selected keys */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_cfrasnap", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + // TODO: maybe since this is called jump, we're better to have it on -J? + WM_keymap_add_item(keymap, "ACT_OT_frame_jump", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); /* menu + single-step transform */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_snap", SKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); /* menu + set setting */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_handle_type_set", HKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_extrapolation_type_set", EKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_handle_type_set", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_interpolation_type_set", TKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_extrapolation_type_set", EKEY, KM_PRESS, KM_SHIFT, 0); /* destructive */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_clean", OKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_sample", OKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_clean", OKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_sample", OKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_delete", DELKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_insert", IKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_insert", IKEY, KM_PRESS, 0, 0); /* copy/paste */ - WM_keymap_add_item(keymap, "ACT_OT_keyframes_copy", CKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "ACT_OT_keyframes_paste", VKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "ACT_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "ACT_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); /* auto-set range */ WM_keymap_add_item(keymap, "ACT_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index f99a08bc26d..4cb39712f84 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -179,11 +179,11 @@ static int actkeys_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_select_all_toggle (wmOperatorType *ot) +void ACT_OT_select_all_toggle (wmOperatorType *ot) { /* identifiers */ ot->name= "Select All"; - ot->idname= "ACT_OT_keyframes_select_all_toggle"; + ot->idname= "ACT_OT_select_all_toggle"; /* api callbacks */ ot->exec= actkeys_deselectall_exec; @@ -338,11 +338,11 @@ static int actkeys_borderselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_select_border(wmOperatorType *ot) +void ACT_OT_select_border(wmOperatorType *ot) { /* identifiers */ ot->name= "Border Select"; - ot->idname= "ACT_OT_keyframes_select_border"; + ot->idname= "ACT_OT_select_border"; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -555,11 +555,11 @@ static int actkeys_columnselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_keyframes_select_column (wmOperatorType *ot) +void ACT_OT_select_column (wmOperatorType *ot) { /* identifiers */ ot->name= "Select All"; - ot->idname= "ACT_OT_keyframes_select_column"; + ot->idname= "ACT_OT_select_column"; /* api callbacks */ ot->exec= actkeys_columnselect_exec; @@ -960,11 +960,11 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void ACT_OT_keyframes_clickselect (wmOperatorType *ot) +void ACT_OT_clickselect (wmOperatorType *ot) { /* identifiers */ ot->name= "Mouse Select Keys"; - ot->idname= "ACT_OT_keyframes_clickselect"; + ot->idname= "ACT_OT_clickselect"; /* api callbacks - absolutely no exec() this yet... */ ot->invoke= actkeys_clickselect_invoke; diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index f8c6ba2131a..1971b062c2b 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -110,6 +110,11 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); + + uiItemS(layout); + //uiItemO(layout, NULL, 0, "NLA_OT_view_all"); if (sa->full) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index d4e952882ce..01abc5450aa 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -366,6 +366,8 @@ extern StructRNA RNA_SoundSequence; extern StructRNA RNA_Space; extern StructRNA RNA_Space3DView; extern StructRNA RNA_SpaceButtonsWindow; +extern StructRNA RNA_SpaceDopeSheetEditor; +extern StructRNA RNA_SpaceGraphEditor; extern StructRNA RNA_SpaceImageEditor; extern StructRNA RNA_SpaceNLA; extern StructRNA RNA_SpaceOutliner; diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 78c49a493f4..d4f7c5b0bd1 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -30,6 +30,7 @@ #include "rna_internal.h" +#include "DNA_action_types.h" #include "DNA_object_types.h" #include "DNA_space_types.h" #include "DNA_view3d_types.h" @@ -89,9 +90,8 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) switch(space->spacetype) { case SPACE_VIEW3D: return &RNA_Space3DView; - /*case SPACE_IPO: + case SPACE_IPO: return &RNA_SpaceGraphEditor; - */ case SPACE_OUTLINER: return &RNA_SpaceOutliner; case SPACE_BUTS: @@ -109,9 +109,9 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) //case SPACE_IMASEL: // return &RNA_SpaceImageBrowser; /*case SPACE_SOUND: - return &RNA_SpaceAudioWindow; + return &RNA_SpaceAudioWindow;*/ case SPACE_ACTION: - return &RNA_SpaceDopeSheetEditor;*/ + return &RNA_SpaceDopeSheetEditor; case SPACE_NLA: return &RNA_SpaceNLA; /*case SPACE_SCRIPT: @@ -868,6 +868,94 @@ static void rna_def_space_text(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Replace Text", "Text to replace selected text with using the replace tool."); } +static void rna_def_space_dopesheet(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem mode_items[] = { + {SACTCONT_DOPESHEET, "DOPESHEET", 0, "DopeSheet", ""}, + {SACTCONT_ACTION, "ACTION", 0, "Action Editor", ""}, + {SACTCONT_SHAPEKEY, "SHAPEKEY", 0, "ShapeKey Editor", ""}, // XXX to be depreceated? + {SACTCONT_GPENCIL, "GPENCIL", 0, "Grease Pencil", ""}, + {0, NULL, 0, NULL, NULL}}; + + + srna= RNA_def_struct(brna, "SpaceDopeSheetEditor", "Space"); + RNA_def_struct_sdna(srna, "SpaceAction"); + RNA_def_struct_ui_text(srna, "Space DopeSheet Editor", "DopeSheet space data."); + + /* mode */ + prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mode"); + RNA_def_property_enum_items(prop, mode_items); + RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed."); + + /* display */ + prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_DRAWTIME); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator + RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames."); + + prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NODRAWCFRANUM); + RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); + + prop= RNA_def_property(srna, "show_sliders", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_SLIDERS); + RNA_def_property_ui_text(prop, "Show Sliders", "Show sliders beside F-Curve channels."); + + /* editing */ + prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOTRANSKEYCULL); + RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Show handles of Bezier control points."); + + // TODO... autosnap, dopesheet? +} + +static void rna_def_space_graph(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem mode_items[] = { + {SIPO_MODE_ANIMATION, "FCURVES", 0, "F-Curves", ""}, + {SIPO_MODE_DRIVERS, "DRIVERS", 0, "Drivers", ""}, + {0, NULL, 0, NULL, NULL}}; + + + srna= RNA_def_struct(brna, "SpaceGraphEditor", "Space"); + RNA_def_struct_sdna(srna, "SpaceIpo"); + RNA_def_struct_ui_text(srna, "Space Graph Editor", "Graph Editor space data."); + + /* mode */ + prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mode"); + RNA_def_property_enum_items(prop, mode_items); + RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed."); + + /* display */ + prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_DRAWTIME); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator + RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames."); + + prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NODRAWCFRANUM); + RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); + + prop= RNA_def_property(srna, "show_handles", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_NOHANDLES); + RNA_def_property_ui_text(prop, "Show Handles", "Show handles of Bezier control points."); + + /* editing */ + prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL); + RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Show handles of Bezier control points."); + + // TODO... autosnap, dopesheet? +} + static void rna_def_space_nla(BlenderRNA *brna) { StructRNA *srna; @@ -886,7 +974,9 @@ static void rna_def_space_nla(BlenderRNA *brna) prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NODRAWCFRANUM); RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); - + + /* editing */ + // TODO... autosnap, dopesheet? } void RNA_def_space(BlenderRNA *brna) @@ -899,6 +989,8 @@ void RNA_def_space(BlenderRNA *brna) rna_def_background_image(brna); rna_def_space_3dview(brna); rna_def_space_buttons(brna); + rna_def_space_dopesheet(brna); + rna_def_space_graph(brna); rna_def_space_nla(brna); } From f1fb09a493b79e6320a651a035203dff98c3b580 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 22 Jun 2009 04:23:06 +0000 Subject: [PATCH 075/512] NLA SoC: Graph Editor Menus + Operator Name Cleanup As with the DopeSheet, the names of operators in the Graph Editor have been cleaned up, and operators have been added to menus as appropriate to show their availability. Tweaked a few DopeSheet operator names to be more in line with the Graph Editor equivalents, and vica versa. TODO: now, the operator poll callbacks here need checking... --- .../editors/space_action/action_edit.c | 12 +- .../editors/space_action/action_header.c | 20 +- .../editors/space_action/action_intern.h | 6 +- .../blender/editors/space_action/action_ops.c | 12 +- .../editors/space_graph/graph_buttons.c | 6 +- .../blender/editors/space_graph/graph_edit.c | 92 +++---- .../editors/space_graph/graph_header.c | 259 +++++++++++++----- .../editors/space_graph/graph_intern.h | 50 ++-- .../blender/editors/space_graph/graph_ops.c | 135 ++++----- .../editors/space_graph/graph_select.c | 16 +- 10 files changed, 361 insertions(+), 247 deletions(-) diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index b2f4751fa25..deaa6597bd2 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -853,11 +853,11 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_extrapolation_type_set (wmOperatorType *ot) +void ACT_OT_extrapolation_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Extrapolation"; - ot->idname= "ACT_OT_extrapolation_type_set"; + ot->idname= "ACT_OT_extrapolation_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -923,11 +923,11 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_interpolation_type_set (wmOperatorType *ot) +void ACT_OT_interpolation_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Interpolation"; - ot->idname= "ACT_OT_interpolation_type_set"; + ot->idname= "ACT_OT_interpolation_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1011,11 +1011,11 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_handle_type_set (wmOperatorType *ot) +void ACT_OT_handle_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Handle Type"; - ot->idname= "ACT_OT_handle_type_set"; + ot->idname= "ACT_OT_handle_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 1bc30b2ac42..a9ce145088d 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -183,24 +183,24 @@ static void act_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) static void act_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_FREE); - uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_AUTO); - uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_VECT); - uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_ALIGN); - uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type_set", "type", HD_AUTO_ANIM); // xxx? + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_FREE); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_AUTO); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_VECT); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_ALIGN); + uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_AUTO_ANIM); // xxx? } static void act_edit_ipomenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_CONST); - uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_LIN); - uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type_set", "type", BEZT_IPO_BEZ); + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_CONST); + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_LIN); + uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_BEZ); } static void act_edit_expomenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type_set", "type", FCURVE_EXTRAPOLATE_CONSTANT); - uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type_set", "type", FCURVE_EXTRAPOLATE_LINEAR); + uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_CONSTANT); + uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_LINEAR); } static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused) diff --git a/source/blender/editors/space_action/action_intern.h b/source/blender/editors/space_action/action_intern.h index 377b25030e5..6ccdc07421b 100644 --- a/source/blender/editors/space_action/action_intern.h +++ b/source/blender/editors/space_action/action_intern.h @@ -89,9 +89,9 @@ void ACT_OT_delete(struct wmOperatorType *ot); void ACT_OT_clean(struct wmOperatorType *ot); void ACT_OT_sample(struct wmOperatorType *ot); -void ACT_OT_handle_type_set(struct wmOperatorType *ot); -void ACT_OT_interpolation_type_set(struct wmOperatorType *ot); -void ACT_OT_extrapolation_type_set(struct wmOperatorType *ot); +void ACT_OT_handle_type(struct wmOperatorType *ot); +void ACT_OT_interpolation_type(struct wmOperatorType *ot); +void ACT_OT_extrapolation_type(struct wmOperatorType *ot); void ACT_OT_frame_jump(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index 1a677e9191d..c023062453c 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -72,9 +72,9 @@ void action_operatortypes(void) WM_operatortype_append(ACT_OT_snap); WM_operatortype_append(ACT_OT_mirror); WM_operatortype_append(ACT_OT_frame_jump); - WM_operatortype_append(ACT_OT_handle_type_set); - WM_operatortype_append(ACT_OT_interpolation_type_set); - WM_operatortype_append(ACT_OT_extrapolation_type_set); + WM_operatortype_append(ACT_OT_handle_type); + WM_operatortype_append(ACT_OT_interpolation_type); + WM_operatortype_append(ACT_OT_extrapolation_type); WM_operatortype_append(ACT_OT_sample); WM_operatortype_append(ACT_OT_clean); WM_operatortype_append(ACT_OT_delete); @@ -130,9 +130,9 @@ static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "ACT_OT_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); /* menu + set setting */ - WM_keymap_add_item(keymap, "ACT_OT_handle_type_set", HKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ACT_OT_interpolation_type_set", TKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_extrapolation_type_set", EKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_handle_type", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ACT_OT_extrapolation_type", EKEY, KM_PRESS, KM_SHIFT, 0); /* destructive */ WM_keymap_add_item(keymap, "ACT_OT_clean", OKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 5b00205b5d0..ea4f017c9bb 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -989,7 +989,7 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) /* 'add modifier' button at top of panel */ // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator - uiDefButO(block, BUT, "GRAPHEDIT_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 225, 150, 20, "Adds a new F-Curve Modifier for the active F-Curve"); + uiDefButO(block, BUT, "GRAPH_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 225, 150, 20, "Adds a new F-Curve Modifier for the active F-Curve"); /* draw each modifier */ for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) @@ -1069,10 +1069,10 @@ static int graph_properties(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_properties(wmOperatorType *ot) +void GRAPH_OT_properties(wmOperatorType *ot) { ot->name= "Properties"; - ot->idname= "GRAPHEDIT_OT_properties"; + ot->idname= "GRAPH_OT_properties"; ot->exec= graph_properties; ot->poll= ED_operator_ipo_active; // xxx diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 49397ed0edd..8903d95b288 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -180,11 +180,11 @@ static int graphkeys_previewrange_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_previewrange_set (wmOperatorType *ot) +void GRAPH_OT_previewrange_set (wmOperatorType *ot) { /* identifiers */ ot->name= "Auto-Set Preview Range"; - ot->idname= "GRAPHEDIT_OT_previewrange_set"; + ot->idname= "GRAPH_OT_previewrange_set"; /* api callbacks */ ot->exec= graphkeys_previewrange_exec; @@ -227,11 +227,11 @@ static int graphkeys_viewall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_view_all (wmOperatorType *ot) +void GRAPH_OT_view_all (wmOperatorType *ot) { /* identifiers */ ot->name= "View All"; - ot->idname= "GRAPHEDIT_OT_view_all"; + ot->idname= "GRAPH_OT_view_all"; /* api callbacks */ ot->exec= graphkeys_viewall_exec; @@ -334,11 +334,11 @@ static int graphkeys_create_ghostcurves_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_ghost_curves_create (wmOperatorType *ot) +void GRAPH_OT_ghost_curves_create (wmOperatorType *ot) { /* identifiers */ ot->name= "Create Ghost Curves"; - ot->idname= "GRAPHEDIT_OT_ghost_curves_create"; + ot->idname= "GRAPH_OT_ghost_curves_create"; ot->description= "Create snapshot (Ghosts) of selected F-Curves as background aid for active Graph Editor."; /* api callbacks */ @@ -377,11 +377,11 @@ static int graphkeys_clear_ghostcurves_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_ghost_curves_clear (wmOperatorType *ot) +void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot) { /* identifiers */ ot->name= "Create Ghost Curves"; - ot->idname= "GRAPHEDIT_OT_ghost_curves_clear"; + ot->idname= "GRAPH_OT_ghost_curves_clear"; ot->description= "Clear F-Curve snapshots (Ghosts) for active Graph Editor."; /* api callbacks */ @@ -461,11 +461,11 @@ static int graphkeys_click_insert_invoke (bContext *C, wmOperator *op, wmEvent * return graphkeys_click_insert_exec(C, op); } -void GRAPHEDIT_OT_keyframes_click_insert (wmOperatorType *ot) +void GRAPH_OT_click_insert (wmOperatorType *ot) { /* identifiers */ ot->name= "Click-Insert Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_click_insert"; + ot->idname= "GRAPH_OT_click_insert"; /* api callbacks */ ot->invoke= graphkeys_click_insert_invoke; @@ -544,11 +544,11 @@ static int graphkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_copy (wmOperatorType *ot) +void GRAPH_OT_copy (wmOperatorType *ot) { /* identifiers */ ot->name= "Copy Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_copy"; + ot->idname= "GRAPH_OT_copy"; /* api callbacks */ ot->exec= graphkeys_copy_exec; @@ -583,11 +583,11 @@ static int graphkeys_paste_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_paste (wmOperatorType *ot) +void GRAPH_OT_paste (wmOperatorType *ot) { /* identifiers */ ot->name= "Paste Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_paste"; + ot->idname= "GRAPH_OT_paste"; /* api callbacks */ ot->exec= graphkeys_paste_exec; @@ -650,11 +650,11 @@ static int graphkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *even return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_duplicate (wmOperatorType *ot) +void GRAPH_OT_duplicate (wmOperatorType *ot) { /* identifiers */ ot->name= "Duplicate Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_duplicate"; + ot->idname= "GRAPH_OT_duplicate"; /* api callbacks */ ot->invoke= graphkeys_duplicate_invoke; @@ -711,11 +711,11 @@ static int graphkeys_delete_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_delete (wmOperatorType *ot) +void GRAPH_OT_delete (wmOperatorType *ot) { /* identifiers */ ot->name= "Delete Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_delete"; + ot->idname= "GRAPH_OT_delete"; /* api callbacks */ ot->invoke= WM_operator_confirm; @@ -772,11 +772,11 @@ static int graphkeys_clean_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_clean (wmOperatorType *ot) +void GRAPH_OT_clean (wmOperatorType *ot) { /* identifiers */ ot->name= "Clean Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_clean"; + ot->idname= "GRAPH_OT_clean"; /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! @@ -853,11 +853,11 @@ static int graphkeys_bake_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_bake (wmOperatorType *ot) +void GRAPH_OT_bake (wmOperatorType *ot) { /* identifiers */ ot->name= "Bake Curve"; - ot->idname= "GRAPHEDIT_OT_keyframes_bake"; + ot->idname= "GRAPH_OT_bake"; /* api callbacks */ ot->invoke= WM_operator_confirm; // FIXME... @@ -979,11 +979,11 @@ static int graphkeys_sample_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_sample (wmOperatorType *ot) +void GRAPH_OT_sample (wmOperatorType *ot) { /* identifiers */ ot->name= "Sample Keyframes"; - ot->idname= "GRAPHEDIT_OT_keyframes_sample"; + ot->idname= "GRAPH_OT_sample"; /* api callbacks */ ot->exec= graphkeys_sample_exec; @@ -1053,11 +1053,11 @@ static int graphkeys_expo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_extrapolation_type (wmOperatorType *ot) +void GRAPH_OT_extrapolation_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Extrapolation"; - ot->idname= "GRAPHEDIT_OT_keyframes_extrapolation_type"; + ot->idname= "GRAPH_OT_extrapolation_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1121,11 +1121,11 @@ static int graphkeys_ipo_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_interpolation_type (wmOperatorType *ot) +void GRAPH_OT_interpolation_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Interpolation"; - ot->idname= "GRAPHEDIT_OT_keyframes_interpolation_type"; + ot->idname= "GRAPH_OT_interpolation_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1208,11 +1208,11 @@ static int graphkeys_handletype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_handletype (wmOperatorType *ot) +void GRAPH_OT_handletype (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Handle Type"; - ot->idname= "GRAPHEDIT_OT_keyframes_handletype"; + ot->idname= "GRAPH_OT_handletype"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1298,11 +1298,11 @@ static int graphkeys_euler_filter_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -void GRAPHEDIT_OT_keyframes_euler_filter (wmOperatorType *ot) +void GRAPH_OT_euler_filter (wmOperatorType *ot) { /* identifiers */ ot->name= "Euler Filter"; - ot->idname= "GRAPHEDIT_OT_keyframes_euler_filter"; + ot->idname= "GRAPH_OT_euler_filter"; /* api callbacks */ ot->exec= graphkeys_euler_filter_exec; @@ -1314,10 +1314,10 @@ void GRAPHEDIT_OT_keyframes_euler_filter (wmOperatorType *ot) #endif // XXX this is not ready for the primetime yet -/* ***************** Snap Current Frame Operator *********************** */ +/* ***************** Jump to Selected Frames Operator *********************** */ /* snap current-frame indicator to 'average time' of selected keyframe */ -static int graphkeys_cfrasnap_exec(bContext *C, wmOperator *op) +static int graphkeys_framejump_exec(bContext *C, wmOperator *op) { bAnimContext ac; ListBase anim_data= {NULL, NULL}; @@ -1353,14 +1353,14 @@ static int graphkeys_cfrasnap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_cfrasnap (wmOperatorType *ot) +void GRAPH_OT_frame_jump (wmOperatorType *ot) { /* identifiers */ - ot->name= "Snap Current Frame to Keys"; - ot->idname= "GRAPHEDIT_OT_keyframes_cfrasnap"; + ot->name= "Jump to Frame"; + ot->idname= "GRAPH_OT_frame_jump"; /* api callbacks */ - ot->exec= graphkeys_cfrasnap_exec; + ot->exec= graphkeys_framejump_exec; ot->poll= ED_operator_areaactive; /* flags */ @@ -1444,11 +1444,11 @@ static int graphkeys_snap_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_snap (wmOperatorType *ot) +void GRAPH_OT_snap (wmOperatorType *ot) { /* identifiers */ ot->name= "Snap Keys"; - ot->idname= "GRAPHEDIT_OT_keyframes_snap"; + ot->idname= "GRAPH_OT_snap"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1555,11 +1555,11 @@ static int graphkeys_mirror_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_mirror (wmOperatorType *ot) +void GRAPH_OT_mirror (wmOperatorType *ot) { /* identifiers */ ot->name= "Mirror Keys"; - ot->idname= "GRAPHEDIT_OT_keyframes_mirror"; + ot->idname= "GRAPH_OT_mirror"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1609,11 +1609,11 @@ static int graphkeys_smooth_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_smooth (wmOperatorType *ot) +void GRAPH_OT_smooth (wmOperatorType *ot) { /* identifiers */ ot->name= "Smooth Keys"; - ot->idname= "GRAPHEDIT_OT_keyframes_smooth"; + ot->idname= "GRAPH_OT_smooth"; /* api callbacks */ ot->exec= graphkeys_smooth_exec; @@ -1671,11 +1671,11 @@ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_fmodifier_add (wmOperatorType *ot) +void GRAPH_OT_fmodifier_add (wmOperatorType *ot) { /* identifiers */ ot->name= "Add F-Curve Modifier"; - ot->idname= "GRAPHEDIT_OT_fmodifier_add"; + ot->idname= "GRAPH_OT_fmodifier_add"; /* api callbacks */ ot->invoke= WM_menu_invoke; diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 178b4b4562f..0bd08625d68 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -47,11 +47,14 @@ #include "ED_types.h" #include "ED_util.h" +#include "RNA_access.h" + #include "WM_api.h" #include "WM_types.h" #include "BIF_gl.h" #include "BIF_glutil.h" +#include "BIF_transform.h" #include "UI_interface.h" #include "UI_resources.h" @@ -62,76 +65,173 @@ /* ********************************************************* */ /* Menu Defines... */ -/* button events */ +static void graph_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa= CTX_wm_area(C); + SpaceIpo *sipo= (SpaceIpo*)CTX_wm_space_data(C); + PointerRNA spaceptr; + + /* retrieve state */ + RNA_pointer_create(&sc->id, &RNA_SpaceGraphEditor, sipo, &spaceptr); + + /* create menu */ + uiItemO(layout, NULL, ICON_MENU_PANEL, "GRAPH_OT_properties"); + + uiItemS(layout); + + uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0, 0, 0); + + if (sipo->flag & SIPO_NOHANDLES) + uiItemO(layout, "Show Handles", ICON_CHECKBOX_DEHLT, "GRAPH_OT_handles_view_toggle"); + else + uiItemO(layout, "Show Handles", ICON_CHECKBOX_HLT, "GRAPH_OT_handles_view_toggle"); + + uiItemR(layout, NULL, 0, &spaceptr, "automerge_keyframes", 0, 0, 0); + + if (sipo->flag & SIPO_DRAWTIME) + uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); + else + uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); + uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); + + uiItemO(layout, NULL, 0, "GRAPH_OT_previewrange_set"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "GRAPH_OT_frame_jump"); + + uiItemO(layout, NULL, 0, "GRAPH_OT_view_all"); + + if (sa->full) + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow + else + uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctrl DownArrow +} + +static void graph_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "GRAPH_OT_select_all_toggle"); + uiItemBooleanO(layout, "Invert All", 0, "GRAPH_OT_select_all_toggle", "invert", 1); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "GRAPH_OT_select_border"); + uiItemBooleanO(layout, "Border Axis Range", 0, "GRAPH_OT_select_border", "axis_range", 1); + + uiItemS(layout); + + uiItemEnumO(layout, "Columns on Selected Keys", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_KEYS); + uiItemEnumO(layout, "Column on Current Frame", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_CFRA); + + uiItemEnumO(layout, "Columns on Selected Markers", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN); + uiItemEnumO(layout, "Between Selected Markers", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_MARKERS_BETWEEN); +} + +static void graph_channelmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_toggle"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_enable"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_disable"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ANIM_OT_channels_editable_toggle"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "ANIM_OT_channels_expand"); + uiItemO(layout, NULL, 0, "ANIM_OT_channels_collapse"); +} + +static void graph_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TIME_TRANSLATE); + uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); + uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); +} + +static void graph_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "To Current Frame", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_CFRA); + uiItemEnumO(layout, "To Nearest Frame", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_FRAME); + uiItemEnumO(layout, "To Nearest Second", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_SECOND); + uiItemEnumO(layout, "To Nearest Marker", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_MARKER); +} + +static void graph_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, "Over Current Frame", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_CFRA); + uiItemEnumO(layout, "Over Vertical Axis", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_YAXIS); + uiItemEnumO(layout, "Over Horizontal Axis", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_XAXIS); + uiItemEnumO(layout, "Over Selected Marker", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_MARKER); +} + +static void graph_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_FREE); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_AUTO); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_VECT); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_ALIGN); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_AUTO_ANIM); // xxx? +} + +static void graph_edit_ipomenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_CONST); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_LIN); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_BEZ); +} + +static void graph_edit_expomenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_CONSTANT); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_LINEAR); +} + +static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemMenuF(layout, "Transform", 0, graph_edit_transformmenu); + uiItemMenuF(layout, "Snap", 0, graph_edit_snapmenu); + uiItemMenuF(layout, "Mirror", 0, graph_edit_mirrormenu); + + uiItemS(layout); + + //uiItemO(layout, NULL, 0, "GRAPH_OT_insert"); + uiItemO(layout, NULL, 0, "GRAPH_OT_fmodifier_add"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "GRAPH_OT_duplicate"); + uiItemO(layout, NULL, 0, "GRAPH_OT_delete"); + + uiItemS(layout); + + uiItemMenuF(layout, "Handle Type", 0, graph_edit_handlesmenu); + uiItemMenuF(layout, "Interpolation Mode", 0, graph_edit_ipomenu); + uiItemMenuF(layout, "Extrapolation Mode", 0, graph_edit_expomenu); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "GRAPH_OT_clean"); + uiItemO(layout, NULL, 0, "GRAPH_OT_sample"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "GRAPH_OT_copy"); + uiItemO(layout, NULL, 0, "GRAPH_OT_paste"); +} + +/* ********************************************************* */ + enum { - B_REDR = 0, + B_REDR = 0, B_MODECHANGE, -} eActHeader_ButEvents; - -/* ************************ header area region *********************** */ - -static void do_viewmenu(bContext *C, void *arg, int event) -{ - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); - - switch (event) { - case 1: /* Show time/frames */ - sipo->flag ^= SIPO_DRAWTIME; - break; - case 2: /* AutoMerge Keyframes */ - sipo->flag ^= SIPO_NOTRANSKEYCULL; - break; - case 3: /* Show/Hide handles */ - sipo->flag ^= SIPO_NOHANDLES; - break; - case 4: /* Show current frame number beside indicator */ - sipo->flag ^= SIPO_NODRAWCFRANUM; - break; - } -} - -static uiBlock *graph_viewmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "graph_viewmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_viewmenu, NULL); - - // XXX these options should use new menu-options - - if (sipo->flag & SIPO_DRAWTIME) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Show Frames|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - } - else { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, - "Show Seconds|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - } - - - uiDefIconTextBut(block, BUTM, 1, (sipo->flag & SIPO_NOTRANSKEYCULL)?ICON_CHECKBOX_DEHLT:ICON_CHECKBOX_HLT, - "AutoMerge Keyframes|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, (sipo->flag & SIPO_NOHANDLES)?ICON_CHECKBOX_DEHLT:ICON_CHECKBOX_HLT, - "Show Handles|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, (sipo->flag & SIPO_NODRAWCFRANUM)?ICON_CHECKBOX_DEHLT:ICON_CHECKBOX_HLT, - "Show Current Frame Number|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - if (curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} +} eGraphEdit_Events; static void do_graph_buttons(bContext *C, void *arg, int event) { @@ -163,8 +263,19 @@ void graph_header_buttons(const bContext *C, ARegion *ar) int xmax; xmax= GetButStringLength("View"); - uiDefPulldownBut(block, graph_viewmenu, CTX_wm_area(C), - "View", xco, yco-2, xmax-3, 24, ""); + uiDefMenuBut(block, graph_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); + xco+= xmax; + + xmax= GetButStringLength("Select"); + uiDefMenuBut(block, graph_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); + xco+= xmax; + + xmax= GetButStringLength("Channel"); + uiDefMenuBut(block, graph_channelmenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); + xco+= xmax; + + xmax= GetButStringLength("Key"); + uiDefMenuBut(block, graph_editmenu, NULL, "Key", xco, yco, xmax-3, 20, ""); xco+= xmax; } @@ -202,8 +313,8 @@ void graph_header_buttons(const bContext *C, ARegion *ar) /* copy + paste */ uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "GRAPHEDIT_OT_keyframes_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); - uiDefIconButO(block, BUT, "GRAPHEDIT_OT_keyframes_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); + uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); + uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); uiBlockEndAlign(block); xco += (XIC + 8); @@ -225,9 +336,9 @@ void graph_header_buttons(const bContext *C, ARegion *ar) /* ghost curves */ // XXX these icons need to be changed if (sipo->ghostCurves.first) - uiDefIconButO(block, BUT, "GRAPHEDIT_OT_ghost_curves_clear", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_DATA_CURVE, xco,yco,XIC,YIC, "Clear F-Curve snapshots (Ghosts) for this Graph Editor instance"); + uiDefIconButO(block, BUT, "GRAPH_OT_ghost_curves_clear", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_DATA_CURVE, xco,yco,XIC,YIC, "Clear F-Curve snapshots (Ghosts) for this Graph Editor instance"); else - uiDefIconButO(block, BUT, "GRAPHEDIT_OT_ghost_curves_create", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_OB_CURVE, xco,yco,XIC,YIC, "Create snapshot (Ghosts) of selected F-Curves as background aid for this Graph Editor instance"); + uiDefIconButO(block, BUT, "GRAPH_OT_ghost_curves_create", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_OB_CURVE, xco,yco,XIC,YIC, "Create snapshot (Ghosts) of selected F-Curves as background aid for this Graph Editor instance"); xco+= XIC; diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index 7ba636302a5..93e3df1c728 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -58,10 +58,10 @@ void graph_header_buttons(const bContext *C, struct ARegion *ar); /* ***************************************** */ /* graph_select.c */ -void GRAPHEDIT_OT_keyframes_select_all_toggle(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_select_border(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_columnselect(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_clickselect(struct wmOperatorType *ot); +void GRAPH_OT_select_all_toggle(struct wmOperatorType *ot); +void GRAPH_OT_select_border(struct wmOperatorType *ot); +void GRAPH_OT_select_column(struct wmOperatorType *ot); +void GRAPH_OT_clickselect(struct wmOperatorType *ot); /* defines for left-right select tool */ enum { @@ -82,28 +82,28 @@ enum { /* ***************************************** */ /* graph_edit.c */ -void GRAPHEDIT_OT_previewrange_set(struct wmOperatorType *ot); -void GRAPHEDIT_OT_view_all(struct wmOperatorType *ot); +void GRAPH_OT_previewrange_set(struct wmOperatorType *ot); +void GRAPH_OT_view_all(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_click_insert(struct wmOperatorType *ot); +void GRAPH_OT_click_insert(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_copy(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_paste(struct wmOperatorType *ot); +void GRAPH_OT_copy(struct wmOperatorType *ot); +void GRAPH_OT_paste(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_duplicate(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_delete(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_clean(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_sample(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_bake(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_smooth(struct wmOperatorType *ot); +void GRAPH_OT_duplicate(struct wmOperatorType *ot); +void GRAPH_OT_delete(struct wmOperatorType *ot); +void GRAPH_OT_clean(struct wmOperatorType *ot); +void GRAPH_OT_sample(struct wmOperatorType *ot); +void GRAPH_OT_bake(struct wmOperatorType *ot); +void GRAPH_OT_smooth(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_handletype(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_interpolation_type(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_extrapolation_type(struct wmOperatorType *ot); +void GRAPH_OT_handletype(struct wmOperatorType *ot); +void GRAPH_OT_interpolation_type(struct wmOperatorType *ot); +void GRAPH_OT_extrapolation_type(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_cfrasnap(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_snap(struct wmOperatorType *ot); -void GRAPHEDIT_OT_keyframes_mirror(struct wmOperatorType *ot); +void GRAPH_OT_frame_jump(struct wmOperatorType *ot); +void GRAPH_OT_snap(struct wmOperatorType *ot); +void GRAPH_OT_mirror(struct wmOperatorType *ot); /* defines for snap keyframes * NOTE: keep in sync with eEditKeyframes_Snap (in ED_keyframes_edit.h) @@ -128,16 +128,16 @@ enum { /* ----------- */ -void GRAPHEDIT_OT_fmodifier_add(struct wmOperatorType *ot); +void GRAPH_OT_fmodifier_add(struct wmOperatorType *ot); /* ----------- */ -void GRAPHEDIT_OT_ghost_curves_create(struct wmOperatorType *ot); -void GRAPHEDIT_OT_ghost_curves_clear(struct wmOperatorType *ot); +void GRAPH_OT_ghost_curves_create(struct wmOperatorType *ot); +void GRAPH_OT_ghost_curves_clear(struct wmOperatorType *ot); /* ***************************************** */ /* graph_buttons.c */ -void GRAPHEDIT_OT_properties(struct wmOperatorType *ot); +void GRAPH_OT_properties(struct wmOperatorType *ot); void graph_buttons_register(struct ARegionType *art); struct bAnimListElem *get_active_fcurve_channel(struct bAnimContext *ac); diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index a23f0081c04..f7799023f34 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -58,6 +58,10 @@ #include "WM_api.h" #include "WM_types.h" +/* ************************** poll callbacks **********************************/ + + + /* ************************** view-based operators **********************************/ // XXX this probably shouldn't be here.. @@ -80,11 +84,11 @@ static int view_toggle_handles_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_view_togglehandles (wmOperatorType *ot) +void GRAPH_OT_view_togglehandles (wmOperatorType *ot) { /* identification */ ot->name= "Show/Hide All Handles"; - ot->idname= "GRAPHEDIT_OT_handles_view_toggle"; + ot->idname= "GRAPH_OT_handles_view_toggle"; /* callbacks */ ot->exec= view_toggle_handles_exec; @@ -96,45 +100,43 @@ void GRAPHEDIT_OT_view_togglehandles (wmOperatorType *ot) void graphedit_operatortypes(void) { /* view */ - WM_operatortype_append(GRAPHEDIT_OT_view_togglehandles); - WM_operatortype_append(GRAPHEDIT_OT_previewrange_set); - WM_operatortype_append(GRAPHEDIT_OT_view_all); - WM_operatortype_append(GRAPHEDIT_OT_properties); + WM_operatortype_append(GRAPH_OT_view_togglehandles); + WM_operatortype_append(GRAPH_OT_previewrange_set); + WM_operatortype_append(GRAPH_OT_view_all); + WM_operatortype_append(GRAPH_OT_properties); - WM_operatortype_append(GRAPHEDIT_OT_ghost_curves_create); - WM_operatortype_append(GRAPHEDIT_OT_ghost_curves_clear); + WM_operatortype_append(GRAPH_OT_ghost_curves_create); + WM_operatortype_append(GRAPH_OT_ghost_curves_clear); /* keyframes */ /* selection */ - WM_operatortype_append(GRAPHEDIT_OT_keyframes_clickselect); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_select_all_toggle); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_select_border); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_columnselect); + WM_operatortype_append(GRAPH_OT_clickselect); + WM_operatortype_append(GRAPH_OT_select_all_toggle); + WM_operatortype_append(GRAPH_OT_select_border); + WM_operatortype_append(GRAPH_OT_select_column); /* editing */ - WM_operatortype_append(GRAPHEDIT_OT_keyframes_snap); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_mirror); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_cfrasnap); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_handletype); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_interpolation_type); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_extrapolation_type); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_sample); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_bake); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_smooth); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_clean); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_delete); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_duplicate); + WM_operatortype_append(GRAPH_OT_snap); + WM_operatortype_append(GRAPH_OT_mirror); + WM_operatortype_append(GRAPH_OT_frame_jump); + WM_operatortype_append(GRAPH_OT_handletype); + WM_operatortype_append(GRAPH_OT_interpolation_type); + WM_operatortype_append(GRAPH_OT_extrapolation_type); + WM_operatortype_append(GRAPH_OT_sample); + WM_operatortype_append(GRAPH_OT_bake); + WM_operatortype_append(GRAPH_OT_smooth); + WM_operatortype_append(GRAPH_OT_clean); + WM_operatortype_append(GRAPH_OT_delete); + WM_operatortype_append(GRAPH_OT_duplicate); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_copy); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_paste); + WM_operatortype_append(GRAPH_OT_copy); + WM_operatortype_append(GRAPH_OT_paste); - WM_operatortype_append(GRAPHEDIT_OT_keyframes_click_insert); - - //TODO: insertkey... + WM_operatortype_append(GRAPH_OT_click_insert); /* F-Curve Modifiers */ // XXX temporary? - WM_operatortype_append(GRAPHEDIT_OT_fmodifier_add); + WM_operatortype_append(GRAPH_OT_fmodifier_add); } /* ************************** registration - keymaps **********************************/ @@ -144,81 +146,82 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) wmKeymapItem *kmi; /* view */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_handles_view_toggle", HKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_handles_view_toggle", HKEY, KM_PRESS, KM_CTRL, 0); /* graph_select.c - selection tools */ /* click-select */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, 0, 0); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, 0, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0); RNA_boolean_set(kmi->ptr, "column", 1); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", 1); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", 1); RNA_boolean_set(kmi->ptr, "column", 1); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "left_right", GRAPHKEYS_LRSEL_TEST); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0); RNA_boolean_set(kmi->ptr, "curves", 1); - kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0); + kmi= WM_keymap_add_item(keymap, "GRAPH_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "curves", 1); RNA_boolean_set(kmi->ptr, "extend", 1); /* deselect all */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_select_all_toggle", AKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); /* borderselect */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_select_border", BKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); + WM_keymap_add_item(keymap, "GRAPH_OT_select_border", BKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); /* column select */ // XXX KKEY would be nice to keep for 'keyframe' lines - RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, 0, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_KEYS); - RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_CFRA); - RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN); - RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_columnselect", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_MARKERS_BETWEEN); + RNA_enum_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_column", KKEY, KM_PRESS, 0, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_KEYS); + RNA_enum_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_column", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_CFRA); + RNA_enum_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_column", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN); + RNA_enum_set(WM_keymap_add_item(keymap, "GRAPH_OT_select_column", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", GRAPHKEYS_COLUMNSEL_MARKERS_BETWEEN); /* graph_edit.c */ /* snap - current frame to selected keys */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_cfrasnap", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + // TODO: maybe since this is called jump, we're better to have it on -J? + WM_keymap_add_item(keymap, "GRAPH_OT_frame_jump", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); /* menu + single-step transform */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_snap", SKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_handletype", HKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_extrapolation_type", EKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_handletype", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_extrapolation_type", EKEY, KM_PRESS, KM_SHIFT, 0); /* destructive */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clean", OKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_smooth", OKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_sample", OKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_clean", OKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_smooth", OKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_sample", OKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_bake", CKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_bake", CKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_delete", DELKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); /* insertkey */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_click_insert", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_click_insert", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); /* copy/paste */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_copy", CKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_paste", VKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); /* auto-set range */ - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); /* F-Curve Modifiers */ // XXX these are temporary? operators... - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); /* transform system */ @@ -233,7 +236,7 @@ void graphedit_keymap(wmWindowManager *wm) /* keymap for all regions */ keymap= WM_keymap_listbase(wm, "GraphEdit Generic", SPACE_IPO, 0); - WM_keymap_add_item(keymap, "GRAPHEDIT_OT_properties", NKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_properties", NKEY, KM_PRESS, 0, 0); /* channels */ /* Channels are not directly handled by the Graph Editor module, but are inherited from the Animation module. diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index a222109b0fe..632ce30863d 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -173,11 +173,11 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_select_all_toggle (wmOperatorType *ot) +void GRAPH_OT_select_all_toggle (wmOperatorType *ot) { /* identifiers */ ot->name= "Select All"; - ot->idname= "GRAPHEDIT_OT_keyframes_select_all_toggle"; + ot->idname= "GRAPH_OT_select_all_toggle"; /* api callbacks */ ot->exec= graphkeys_deselectall_exec; @@ -304,11 +304,11 @@ static int graphkeys_borderselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_select_border(wmOperatorType *ot) +void GRAPH_OT_select_border(wmOperatorType *ot) { /* identifiers */ ot->name= "Border Select"; - ot->idname= "GRAPHEDIT_OT_keyframes_select_border"; + ot->idname= "GRAPH_OT_select_border"; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -497,11 +497,11 @@ static int graphkeys_columnselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPHEDIT_OT_keyframes_columnselect (wmOperatorType *ot) +void GRAPH_OT_select_column (wmOperatorType *ot) { /* identifiers */ ot->name= "Select All"; - ot->idname= "GRAPHEDIT_OT_keyframes_columnselect"; + ot->idname= "GRAPH_OT_select_column"; /* api callbacks */ ot->exec= graphkeys_columnselect_exec; @@ -908,11 +908,11 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void GRAPHEDIT_OT_keyframes_clickselect (wmOperatorType *ot) +void GRAPH_OT_clickselect (wmOperatorType *ot) { /* identifiers */ ot->name= "Mouse Select Keys"; - ot->idname= "GRAPHEDIT_OT_keyframes_clickselect"; + ot->idname= "GRAPH_OT_clickselect"; /* api callbacks */ ot->invoke= graphkeys_clickselect_invoke; From b4acd77526f32faab0c3d86436eef56096985c3d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 23 Jun 2009 13:25:31 +0000 Subject: [PATCH 076/512] NLA SoC: Big Commit - Restored NLA-Mapping Corrections In TweakMode, the keyframes of the Active Action are now shown (and can be edited) in NLA-mapped time, with appropriate corrections applied when editing. This works in the DopeSheet and Graph Editors :) To do this, got rid of the old wrappers/API-methods, replacing them with new-style ones. A few methods previously (in this branch) used only for evaluation are now used for this purpose too. As the same code is used for editing + evaluation, this should now be much better to work with. I've only done a few brief tests now, but I think I might've muddled the invert-flags on one or two cases which I'll need to check out tomorrow. So, beware that there may be some weird and critical bugs for the next few days here... Also, added proper license headers to new NLA files. TODO: - testing + bugfixing due to this commit - show range of keyframes in NLA Editor active-action line --- source/blender/blenkernel/BKE_action.h | 6 - source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenkernel/intern/action.c | 42 ----- source/blender/blenkernel/intern/anim_sys.c | 158 ++++-------------- source/blender/blenkernel/intern/fcurve.c | 29 +++- source/blender/blenkernel/intern/nla.c | 136 +++++++++++++++ source/blender/blenkernel/nla_private.h | 78 +++++++++ source/blender/blenloader/intern/readfile.c | 4 + source/blender/editors/animation/anim_draw.c | 72 ++++---- .../editors/animation/keyframes_draw.c | 18 +- source/blender/editors/include/ED_anim_api.h | 14 +- .../editors/include/ED_keyframes_draw.h | 5 +- .../editors/space_action/action_draw.c | 24 +-- .../editors/space_action/action_edit.c | 48 +++--- .../editors/space_action/action_select.c | 45 ++--- .../blender/editors/space_graph/graph_draw.c | 10 +- .../blender/editors/space_graph/graph_edit.c | 51 ++++-- .../editors/space_graph/graph_select.c | 46 +++-- source/blender/editors/transform/transform.c | 58 +++---- .../editors/transform/transform_conversions.c | 103 +++++++----- .../editors/transform/transform_generics.c | 31 ---- source/blender/makesdna/DNA_anim_types.h | 29 +++- 22 files changed, 569 insertions(+), 440 deletions(-) create mode 100644 source/blender/blenkernel/nla_private.h diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 1fb200b94a8..0c9bba5e413 100644 --- a/source/blender/blenkernel/BKE_action.h +++ b/source/blender/blenkernel/BKE_action.h @@ -148,12 +148,6 @@ void copy_pose_result(struct bPose *to, struct bPose *from); /* clear all transforms */ void rest_pose(struct bPose *pose); -/* map global time (frame nr) to strip converted time, doesn't clip */ -float get_action_frame(struct Object *ob, float cframe); -/* map strip time to global time (frame nr) */ -float get_action_frame_inv(struct Object *ob, float cframe); - - /* functions used by the game engine */ void game_copy_pose(struct bPose **dst, struct bPose *src); void game_free_pose(struct bPose *pose); diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 5200ca6d4d7..cc73ac02690 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -73,5 +73,7 @@ void BKE_nla_action_pushdown(struct AnimData *adt); short BKE_nla_tweakmode_enter(struct AnimData *adt); void BKE_nla_tweakmode_exit(struct AnimData *adt); +float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short invert); + #endif diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index f88e249d38c..96896509f60 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -769,48 +769,6 @@ void framechange_poses_clear_unkeyed(void) /* ************** time ****************** */ -static bActionStrip *get_active_strip(Object *ob) -{ -#if 0 // XXX old animation system - bActionStrip *strip; - - if(ob->action==NULL) - return NULL; - - for (strip=ob->nlastrips.first; strip; strip=strip->next) - if(strip->flag & ACTSTRIP_ACTIVE) - break; - - if(strip && strip->act==ob->action) - return strip; -#endif // XXX old animation system - - return NULL; -} - -/* if the conditions match, it converts current time to strip time */ -// TODO: change this adt -float get_action_frame(Object *ob, float cframe) -{ - bActionStrip *strip= get_active_strip(ob); - - //if(strip) - // return get_actionstrip_frame(strip, cframe, 0); - return cframe; -} - -/* inverted, strip time to current time */ -// TODO: change this to adt -float get_action_frame_inv(Object *ob, float cframe) -{ - bActionStrip *strip= get_active_strip(ob); - - //if(strip) - // return get_actionstrip_frame(strip, cframe, 1); - return cframe; -} - - /* Check if the given action has any keyframes */ short action_has_motion(const bAction *act) { diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 7a6706b7c5a..877353a85e9 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1,5 +1,30 @@ -/* Testing code for new animation system in 2.5 - * Copyright 2009, Joshua Leung +/** + * $Id: anim_sys.c 21023 2009-06-20 04:02:49Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #include @@ -14,6 +39,8 @@ #include "BLI_arithb.h" #include "BLI_dynstr.h" +#include "DNA_anim_types.h" + #include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_fcurve.h" @@ -25,7 +52,7 @@ #include "RNA_access.h" #include "RNA_types.h" -#include "DNA_anim_types.h" +#include "nla_private.h" /* ***************************************** */ /* AnimData API */ @@ -549,129 +576,6 @@ void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, /* ***************************************** */ /* NLA System - Evaluation */ -/* used for list of strips to accumulate at current time */ -typedef struct NlaEvalStrip { - struct NlaEvalStrip *next, *prev; - - NlaTrack *track; /* track that this strip belongs to */ - NlaStrip *strip; /* strip that's being used */ - - short track_index; /* the index of the track within the list */ - short strip_mode; /* which end of the strip are we looking at */ - - float strip_time; /* time at which which strip is being evaluated */ -} NlaEvalStrip; - -/* NlaEvalStrip->strip_mode */ -enum { - /* standard evaluation */ - NES_TIME_BEFORE = -1, - NES_TIME_WITHIN, - NES_TIME_AFTER, - - /* transition-strip evaluations */ - NES_TIME_TRANSITION_START, - NES_TIME_TRANSITION_END, -} eNlaEvalStrip_StripMode; - - -/* temp channel for accumulating data from NLA (avoids needing to clear all values first) */ -// TODO: maybe this will be used as the 'cache' stuff needed for editable values too? -typedef struct NlaEvalChannel { - struct NlaEvalChannel *next, *prev; - - PointerRNA ptr; /* pointer to struct containing property to use */ - PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */ - int index; /* array index (where applicable) */ - - float value; /* value of this channel */ -} NlaEvalChannel; - - -/* ---------------------- */ - -/* non clipped mapping for strip-time <-> global time (for Action-Clips) - * invert = convert action-strip time to global time - */ -static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short invert) -{ - float length, actlength, repeat, scale; - - /* get number of repeats */ - if (IS_EQ(strip->repeat, 0.0f)) strip->repeat = 1.0f; - repeat = strip->repeat; - - /* scaling */ - if (IS_EQ(strip->scale, 0.0f)) strip->scale= 1.0f; - scale = (float)fabs(strip->scale); /* scale must be positive - we've got a special flag for reversing */ - - /* length of referenced action */ - actlength = strip->actend - strip->actstart; - if (IS_EQ(actlength, 0.0f)) actlength = 1.0f; - - /* length of strip */ - length= actlength * scale * repeat; - if (IS_EQ(length, 0.0f)) length= strip->end - strip->start; - - /* reversed = play strip backwards */ - if (strip->flag & NLASTRIP_FLAG_REVERSE) { - /* invert = convert action-strip time to global time */ - if (invert) - return length*(strip->actend - cframe)/(repeat*actlength) + strip->start; - else - return strip->actend - repeat*actlength*(cframe - strip->start)/length; - } - else { - /* invert = convert action-strip time to global time */ - if (invert) - return length*(cframe - strip->actstart)/(repeat*actlength) + strip->start; - else - return repeat*actlength*(cframe - strip->start)/length + strip->actstart; - } -} - -/* non clipped mapping for strip-time <-> global time (for Transitions) - * invert = convert action-strip time to global time - */ -static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short invert) -{ - float length; - - /* length of strip */ - length= strip->end - strip->start; - - /* reversed = play strip backwards */ - if (strip->flag & NLASTRIP_FLAG_REVERSE) { - /* invert = convert within-strip-time to global time */ - if (invert) - return strip->end - (length * cframe); - else - return (strip->end - cframe) / length; - } - else { - /* invert = convert within-strip-time to global time */ - if (invert) - return (length * cframe) + strip->start; - else - return (cframe - strip->start) / length; - } -} - -/* non clipped mapping for strip-time <-> global time - * invert = convert action-strip time to global time - */ -static float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) -{ - switch (strip->type) { - case NLASTRIP_TYPE_TRANSITION: /* transition */ - return nlastrip_get_frame_transition(strip, cframe, invert); - - case NLASTRIP_TYPE_CLIP: /* action-clip (default) */ - default: - return nlastrip_get_frame_actionclip(strip, cframe, invert); - } -} - /* calculate influence of strip based for given frame based on blendin/out values */ static float nlastrip_get_influence (NlaStrip *strip, float cframe) { @@ -695,7 +599,7 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe) } /* evaluate the evaluation time and influence for the strip, storing the results in the strip */ -void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) +static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) { /* firstly, analytically generate values for influence and time (if applicable) */ if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0) diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 856930e5a44..27ca6332cdc 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1,5 +1,30 @@ -/* Testing code for new animation system in 2.5 - * Copyright 2009, Joshua Leung +/** + * $Id: fcurve.c 21023 2009-06-20 04:02:49Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 1ce6d9f98c7..a5b3b59d310 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -49,6 +49,9 @@ #include "BKE_object.h" #include "BKE_utildefines.h" +#include "RNA_access.h" +#include "nla_private.h" + #ifdef HAVE_CONFIG_H #include @@ -318,6 +321,135 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) return strip; } +/* *************************************************** */ +/* NLA Evaluation <-> Editing Stuff */ + +/* Strip Mapping ------------------------------------- */ + +/* non clipped mapping for strip-time <-> global time (for Action-Clips) + * invert = convert action-strip time to global time + */ +static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short invert) +{ + float length, actlength, repeat, scale; + + /* get number of repeats */ + if (IS_EQ(strip->repeat, 0.0f)) strip->repeat = 1.0f; + repeat = strip->repeat; + + /* scaling */ + if (IS_EQ(strip->scale, 0.0f)) strip->scale= 1.0f; + scale = (float)fabs(strip->scale); /* scale must be positive - we've got a special flag for reversing */ + + /* length of referenced action */ + actlength = strip->actend - strip->actstart; + if (IS_EQ(actlength, 0.0f)) actlength = 1.0f; + + /* length of strip */ + length= actlength * scale * repeat; + if (IS_EQ(length, 0.0f)) length= strip->end - strip->start; + + /* reversed = play strip backwards */ + if (strip->flag & NLASTRIP_FLAG_REVERSE) { + /* invert = convert action-strip time to global time */ + if (invert) + return length*(strip->actend - cframe)/(repeat*actlength) + strip->start; + else + return strip->actend - repeat*actlength*(cframe - strip->start)/length; + } + else { + /* invert = convert action-strip time to global time */ + if (invert) + return length*(cframe - strip->actstart)/(repeat*actlength) + strip->start; + else + return repeat*actlength*(cframe - strip->start)/length + strip->actstart; + } +} + +/* non clipped mapping for strip-time <-> global time (for Transitions) + * invert = convert action-strip time to global time + */ +static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short invert) +{ + float length; + + /* length of strip */ + length= strip->end - strip->start; + + /* reversed = play strip backwards */ + if (strip->flag & NLASTRIP_FLAG_REVERSE) { + /* invert = convert within-strip-time to global time */ + if (invert) + return strip->end - (length * cframe); + else + return (strip->end - cframe) / length; + } + else { + /* invert = convert within-strip-time to global time */ + if (invert) + return (length * cframe) + strip->start; + else + return (cframe - strip->start) / length; + } +} + +/* non clipped mapping for strip-time <-> global time + * invert = convert action-strip time to global time + * + * only secure for 'internal' (i.e. within AnimSys evaluation) operations, + * but should not be directly relied on for stuff which interacts with editors + */ +float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) +{ + switch (strip->type) { + case NLASTRIP_TYPE_TRANSITION: /* transition */ + return nlastrip_get_frame_transition(strip, cframe, invert); + + case NLASTRIP_TYPE_CLIP: /* action-clip (default) */ + default: + return nlastrip_get_frame_actionclip(strip, cframe, invert); + } +} + + +/* Non clipped mapping for strip-time <-> global time + * invert = convert strip-time to global time + * + * Public API method - perform this mapping using the given AnimData block + * and perform any necessary sanity checks on the value + */ +float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short invert) +{ + NlaStrip *strip; + + /* sanity checks + * - obviously we've got to have some starting data + * - when not in tweakmode, the active Action does not have any scaling applied :) + */ + if ((adt == NULL) || (adt->flag & ADT_NLA_EDIT_ON)==0) + return cframe; + + /* if the active-strip info has been stored already, access this, otherwise look this up + * and store for (very probable) future usage + */ + if (adt->actstrip == NULL) { + NlaTrack *nlt= BKE_nlatrack_find_active(adt); + adt->actstrip= BKE_nlastrip_find_active(nlt); + } + strip= adt->actstrip; + + /* sanity checks + * - in rare cases, we may not be able to find this strip for some reason (internal error) + * - for now, if the user has defined a curve to control the time, this correction cannot be performed + * reliably... + */ + if ((strip == NULL) || (strip->flag & NLASTRIP_FLAG_USR_TIME)) + return cframe; + + /* perform the correction now... */ + return nlastrip_get_frame(strip, cframe, invert); +} + /* *************************************************** */ /* Basic Utilities */ @@ -693,9 +825,11 @@ short BKE_nla_tweakmode_enter (AnimData *adt) * - 'real' active action to temp storage (no need to change user-counts) * - action of active strip set to be the 'active action', and have its usercount incremented * - editing-flag for this AnimData block should also get turned on (for more efficient restoring) + * - take note of the active strip for mapping-correction of keyframes in the action being edited */ adt->tmpact= adt->action; adt->action= activeStrip->act; + adt->actstrip= activeStrip; id_us_plus(&activeStrip->act->id); adt->flag |= ADT_NLA_EDIT_ON; @@ -734,10 +868,12 @@ void BKE_nla_tweakmode_exit (AnimData *adt) * - 'real' active action is restored from storage * - storage pointer gets cleared (to avoid having bad notes hanging around) * - editing-flag for this AnimData block should also get turned off + * - clear pointer to active strip */ if (adt->action) adt->action->id.us--; adt->action= adt->tmpact; adt->tmpact= NULL; + adt->actstrip= NULL; adt->flag &= ~ADT_NLA_EDIT_ON; } diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h new file mode 100644 index 00000000000..af886fb7de8 --- /dev/null +++ b/source/blender/blenkernel/nla_private.h @@ -0,0 +1,78 @@ +/** + * $Id: BKE_nla.h 20999 2009-06-19 04:45:56Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef NLA_PRIVATE +#define NLA_PRIVATE + +/* --------------- NLA Evaluation DataTypes ----------------------- */ + +/* used for list of strips to accumulate at current time */ +typedef struct NlaEvalStrip { + struct NlaEvalStrip *next, *prev; + + NlaTrack *track; /* track that this strip belongs to */ + NlaStrip *strip; /* strip that's being used */ + + short track_index; /* the index of the track within the list */ + short strip_mode; /* which end of the strip are we looking at */ + + float strip_time; /* time at which which strip is being evaluated */ +} NlaEvalStrip; + +/* NlaEvalStrip->strip_mode */ +enum { + /* standard evaluation */ + NES_TIME_BEFORE = -1, + NES_TIME_WITHIN, + NES_TIME_AFTER, + + /* transition-strip evaluations */ + NES_TIME_TRANSITION_START, + NES_TIME_TRANSITION_END, +} eNlaEvalStrip_StripMode; + + +/* temp channel for accumulating data from NLA (avoids needing to clear all values first) */ +// TODO: maybe this will be used as the 'cache' stuff needed for editable values too? +typedef struct NlaEvalChannel { + struct NlaEvalChannel *next, *prev; + + PointerRNA ptr; /* pointer to struct containing property to use */ + PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */ + int index; /* array index (where applicable) */ + + float value; /* value of this channel */ +} NlaEvalChannel; + +/* --------------- NLA Functions (not to be used as a proper API) ----------------------- */ + +/* convert from strip time <-> global time */ +float nlastrip_get_frame(NlaStrip *strip, float cframe, short invert); + +#endif // NLA_PRIVATE diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index af4f61fccc4..d7f60e1928b 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1933,6 +1933,10 @@ static void direct_link_animdata(FileData *fd, AnimData *adt) /* link NLA-data */ link_list(fd, &adt->nla_tracks); direct_link_nladata(fd, &adt->nla_tracks); + + /* clear temp pointers that may have been set... */ + // TODO: it's probably only a small cost to reload this anyway... + adt->actstrip= NULL; } /* ************ READ NODE TREE *************** */ diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index c176f20c26b..6d079fe148a 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -43,10 +43,12 @@ #include "BLI_blenlib.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_fcurve.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_screen.h" #include "BKE_utildefines.h" @@ -232,37 +234,16 @@ void ANIM_draw_previewrange (const bContext *C, View2D *v2d) /* *************************************************** */ /* NLA-MAPPING UTILITIES (required for drawing and also editing keyframes) */ -/* Obtain the Object providing NLA-scaling for the given channel (if applicable) */ -Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale) +/* Obtain the AnimData block providing NLA-mapping for the given channel (if applicable) */ +AnimData *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale) { /* sanity checks */ if (ac == NULL) return NULL; /* handling depends on the type of animation-context we've got */ - if (ac->datatype == ANIMCONT_ACTION) { - /* Action Editor (action mode) or Graph Editor (ipo mode): - * Only use if editor is not pinned, and active object has action - */ - if (ac->obact && ac->obact->action) { - SpaceAction *saction= (SpaceAction *)ac->sa->spacedata.first; - - if (saction->pin == 0) - return ac->obact; - } - } - else if ((ac->datatype == ANIMCONT_DOPESHEET) && (ale)) { - /* Dopesheet: - * Only if channel is available, and is owned by an Object with an Action - */ - if ((ale->id) && (GS(ale->id->name) == ID_OB)) { - Object *ob= (Object *)ale->id; - - if (ob->action) - return ob; - } - } - // XXX todo: add F-Curves mode (Graph Editor) ... + if (ale && ale->id) + return BKE_animdata_from_id(ale->id); /* no appropriate object found */ return NULL; @@ -273,7 +254,8 @@ Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale) * (where this is called) is single-threaded anyway */ // XXX was called: map_active_strip() -void ANIM_nla_mapping_draw(gla2DDrawInfo *di, Object *ob, short restore) +// TODO: should this be depreceated? +void ANIM_nla_mapping_draw(gla2DDrawInfo *di, AnimData *adt, short restore) { static rctf stored; @@ -288,8 +270,8 @@ void ANIM_nla_mapping_draw(gla2DDrawInfo *di, Object *ob, short restore) gla2DGetMap(di, &stored); map= stored; - map.xmin= get_action_frame(ob, map.xmin); - map.xmax= get_action_frame(ob, map.xmax); + map.xmin= BKE_nla_tweakedit_remap(adt, map.xmin, 0); + map.xmax= BKE_nla_tweakedit_remap(adt, map.xmax, 0); if (map.xmin == map.xmax) map.xmax += 1.0f; gla2DSetMap(di, &map); @@ -298,36 +280,38 @@ void ANIM_nla_mapping_draw(gla2DDrawInfo *di, Object *ob, short restore) /* ------------------- */ -/* helper function for ANIM_nla_mapping_apply_ipocurve() -> "restore", i.e. mapping points back to IPO-time */ +/* helper function for ANIM_nla_mapping_apply_fcurve() -> "restore", i.e. mapping points back to action-time */ static short bezt_nlamapping_restore(BeztEditData *bed, BezTriple *bezt) { - /* object providing scaling is stored in 'data', only_keys option is stored in i1 */ - Object *ob= (Object *)bed->data; + /* AnimData block providing scaling is stored in 'data', only_keys option is stored in i1 */ + AnimData *adt= (AnimData *)bed->data; short only_keys= (short)bed->i1; /* adjust BezTriple handles only if allowed to */ if (only_keys == 0) { - bezt->vec[0][0]= get_action_frame(ob, bezt->vec[0][0]); - bezt->vec[2][0]= get_action_frame(ob, bezt->vec[2][0]); - } - bezt->vec[1][0]= get_action_frame(ob, bezt->vec[1][0]); + bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], 0); + bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], 0); + } + + bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], 0); return 0; } -/* helper function for ANIM_nla_mapping_apply_ipocurve() -> "apply", i.e. mapping points to NLA-mapped global time */ +/* helper function for ANIM_nla_mapping_apply_fcurve() -> "apply", i.e. mapping points to NLA-mapped global time */ static short bezt_nlamapping_apply(BeztEditData *bed, BezTriple *bezt) { - /* object providing scaling is stored in 'data', only_keys option is stored in i1 */ - Object *ob= (Object *)bed->data; + /* AnimData block providing scaling is stored in 'data', only_keys option is stored in i1 */ + AnimData *adt= (AnimData *)bed->data; short only_keys= (short)bed->i1; /* adjust BezTriple handles only if allowed to */ if (only_keys == 0) { - bezt->vec[0][0]= get_action_frame_inv(ob, bezt->vec[0][0]); - bezt->vec[2][0]= get_action_frame_inv(ob, bezt->vec[2][0]); + bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], 1); + bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], 1); } - bezt->vec[1][0]= get_action_frame_inv(ob, bezt->vec[1][0]); + + bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], 1); return 0; } @@ -338,17 +322,17 @@ static short bezt_nlamapping_apply(BeztEditData *bed, BezTriple *bezt) * - restore = whether to map points back to non-mapped time * - only_keys = whether to only adjust the location of the center point of beztriples */ -void ANIM_nla_mapping_apply_fcurve(Object *ob, FCurve *fcu, short restore, short only_keys) +void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, short only_keys) { BeztEditData bed; BeztEditFunc map_cb; /* init edit data - * - ob is stored in 'data' + * - AnimData is stored in 'data' * - only_keys is stored in 'i1' */ memset(&bed, 0, sizeof(BeztEditData)); - bed.data= (void *)ob; + bed.data= (void *)adt; bed.i1= (int)only_keys; /* get editing callback */ diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 144cd68f6df..07db47c8fed 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -451,7 +451,7 @@ void ob_to_keylist(Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki /* Add action keyframes */ if (ob->adt && ob->adt->action) - action_nlascaled_to_keylist(ob, ob->adt->action, keys, blocks, aki); + action_nlascaled_to_keylist(ob->adt, ob->adt->action, keys, blocks, aki); /* Add shapekey keyframes (only if dopesheet allows, if it is available) */ // TODO: when we adapt NLA system, this needs to be the NLA-scaled version @@ -602,34 +602,34 @@ void action_to_keylist(bAction *act, ListBase *keys, ListBase *blocks, ActKeysIn } } -void action_nlascaled_to_keylist(Object *ob, bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void action_nlascaled_to_keylist(AnimData *adt, bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki) { FCurve *fcu; - Object *oldob= NULL; + AnimData *oldadt= NULL; - /* although apply and clearing NLA-scaling pre-post creating keylist does impact on performance, + /* although apply and clearing NLA-mapping pre-post creating keylist does impact on performance, * the effects should be fairly minimal, as we're already going through the keyframes multiple times * already for blocks too... */ if (act) { /* if 'aki' is provided, store it's current ob to restore later as it might not be the same */ if (aki) { - oldob= aki->ob; - aki->ob= ob; + oldadt= aki->adt; + aki->adt= adt; } /* loop through F-Curves * - scaling correction only does times for center-points, so should be faster */ for (fcu= act->curves.first; fcu; fcu= fcu->next) { - ANIM_nla_mapping_apply_fcurve(ob, fcu, 0, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); fcurve_to_keylist(fcu, keys, blocks, aki); - ANIM_nla_mapping_apply_fcurve(ob, fcu, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } /* if 'aki' is provided, restore ob */ if (aki) - aki->ob= oldob; + aki->adt= oldadt; } } diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 8c54c4e8f67..4bfcbde8f1e 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -310,16 +310,14 @@ void ipo_rainbow(int cur, int tot, float *out); /* ------------- NLA-Mapping ----------------------- */ /* anim_draw.c */ -// XXX these need attention for the new editing method... +/* Obtain the AnimData block providing NLA-scaling for the given channel if applicable */ +struct AnimData *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale); -/* Obtain the Object providing NLA-scaling for the given channel if applicable */ -struct Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale); +/* Set/clear temporary mapping of coordinates from 'local-action' time to 'global-nla-mapped' time */ +void ANIM_nla_mapping_draw(struct gla2DDrawInfo *di, struct AnimData *adt, short restore); -/* Set/clear temporary mapping of coordinates from 'local-action' time to 'global-nla-scaled' time */ -void ANIM_nla_mapping_draw(struct gla2DDrawInfo *di, struct Object *ob, short restore); - -/* Apply/Unapply NLA mapping to all keyframes in the nominated IPO block */ -void ANIM_nla_mapping_apply_fcurve(struct Object *ob, struct FCurve *fcu, short restore, short only_keys); +/* Apply/Unapply NLA mapping to all keyframes in the nominated F-Curve */ +void ANIM_nla_mapping_apply_fcurve(struct AnimData *adt, struct FCurve *fcu, short restore, short only_keys); /* ------------- Utility macros ----------------------- */ diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h index 81420ac95e5..153b10cf832 100644 --- a/source/blender/editors/include/ED_keyframes_draw.h +++ b/source/blender/editors/include/ED_keyframes_draw.h @@ -30,6 +30,7 @@ #ifndef ED_KEYFRAMES_DRAW_H #define ED_KEYFRAMES_DRAW_H +struct AnimData; struct BezTriple; struct FCurve; struct gla2DDrawInfo; @@ -69,7 +70,7 @@ typedef struct ActKeyBlock { /* Inclusion-Range Limiting Struct (optional) */ typedef struct ActKeysInc { struct bDopeSheet *ads; /* dopesheet data (for dopesheet mode) */ - struct Object *ob; /* owner object for NLA-scaling info (if Object channels, is just Object) */ + struct AnimData *adt; /* owner for NLA-mapping info */ short actmode; /* mode of the Action Editor (-1 is for NLA) */ float start, end; /* frames (global-time) to only consider keys between */ // XXX not used anymore! @@ -89,7 +90,7 @@ void draw_gpl_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct bGPDlaye void fcurve_to_keylist(struct FCurve *fcu, ListBase *keys, ListBase *blocks, ActKeysInc *aki); void agroup_to_keylist(struct bActionGroup *agrp, ListBase *keys, ListBase *blocks, ActKeysInc *aki); void action_to_keylist(struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void action_nlascaled_to_keylist(struct Object *ob, struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki); +void action_nlascaled_to_keylist(struct AnimData *adt, struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki); void ob_to_keylist(struct Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki); void scene_to_keylist(struct Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc *aki); void gpl_to_keylist(struct bGPDlayer *gpl, ListBase *keys, ListBase *blocks, ActKeysInc *aki); diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 6eae581aa40..61048598644 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -964,7 +964,7 @@ ActKeysInc *init_aki_data(bAnimContext *ac, bAnimListElem *ale) return NULL; /* if strip is mapped, store settings */ - aki.ob= ANIM_nla_mapping_get(ac, ale); + aki.adt= ANIM_nla_mapping_get(ac, ale); if (ac->datatype == ANIMCONT_DOPESHEET) aki.ads= (bDopeSheet *)ac->data; @@ -985,7 +985,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) int filter; View2D *v2d= &ar->v2d; - Object *nob= NULL; + AnimData *adt= NULL; gla2DDrawInfo *di; rcti scr_rct; @@ -1016,18 +1016,18 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* if in NLA there's a strip active, map the view */ if (ac->datatype == ANIMCONT_ACTION) { - nob= ANIM_nla_mapping_get(ac, NULL); + adt= ANIM_nla_mapping_get(ac, NULL); - if (nob) - ANIM_nla_mapping_draw(di, nob, 0); + if (adt) + ANIM_nla_mapping_draw(di, adt, 0); /* start and end of action itself */ calc_action_range(ac->data, &sta, &end, 0); gla2DDrawTranslatePt(di, sta, 0.0f, &act_start, &dummy); gla2DDrawTranslatePt(di, end, 0.0f, &act_end, &dummy); - if (nob) - ANIM_nla_mapping_draw(di, nob, 1); + if (adt) + ANIM_nla_mapping_draw(di, adt, 1); } /* build list of channels to draw */ @@ -1191,10 +1191,10 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* check if anything to show for this channel */ if (ale->datatype != ALE_NONE) { ActKeysInc *aki= init_aki_data(ac, ale); - nob= ANIM_nla_mapping_get(ac, ale); + adt= ANIM_nla_mapping_get(ac, ale); - if (nob) - ANIM_nla_mapping_draw(di, nob, 0); + if (adt) + ANIM_nla_mapping_draw(di, adt, 0); /* draw 'keyframes' for each specific datatype */ switch (ale->datatype) { @@ -1218,8 +1218,8 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) break; } - if (nob) - ANIM_nla_mapping_draw(di, nob, 1); + if (adt) + ANIM_nla_mapping_draw(di, adt, 1); } } diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index deaa6597bd2..272ef3222ce 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -67,6 +67,7 @@ #include "BKE_fcurve.h" #include "BKE_key.h" #include "BKE_material.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_context.h" #include "BKE_report.h" @@ -112,16 +113,16 @@ static void get_keyframe_extents (bAnimContext *ac, float *min, float *max) if (anim_data.first) { /* go through channels, finding max extents */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); FCurve *fcu= (FCurve *)ale->key_data; float tmin, tmax; /* get range and apply necessary scaling before */ calc_fcurve_range(fcu, &tmin, &tmax); - if (nob) { - tmin= get_action_frame_inv(nob, tmin); - tmax= get_action_frame_inv(nob, tmax); + if (adt) { + tmin= BKE_nla_tweakedit_remap(adt, tmin, 1); + tmax= BKE_nla_tweakedit_remap(adt, tmax, 1); } /* try to set cur using these values, if they're more extreme than previously set values */ @@ -400,14 +401,14 @@ static void insert_action_keys(bAnimContext *ac, short mode) /* insert keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { - //Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); FCurve *fcu= (FCurve *)ale->key_data; /* adjust current frame for NLA-scaling */ - //if (nob) - // cfra= get_action_frame(nob, CFRA); - //else - // cfra= (float)CFRA; + if (adt) + cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); + else + cfra= (float)CFRA; /* if there's an id */ if (ale->id) @@ -1054,8 +1055,17 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - for (ale= anim_data.first; ale; ale= ale->next) - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + 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); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); + } + else + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + } BLI_freelistN(&anim_data); @@ -1125,12 +1135,12 @@ static void snap_action_keys(bAnimContext *ac, short mode) /* snap keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } //else if (ale->type == ACTTYPE_GPLAYER) // snap_gplayer_frames(ale->data, mode); @@ -1241,12 +1251,12 @@ static void mirror_action_keys(bAnimContext *ac, short mode) /* mirror keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } //else if (ale->type == ACTTYPE_GPLAYER) // snap_gplayer_frames(ale->data, mode); diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 4cb39712f84..3583d16fd8c 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -64,6 +64,7 @@ #include "BKE_fcurve.h" #include "BKE_key.h" #include "BKE_material.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_context.h" #include "BKE_utildefines.h" @@ -245,7 +246,7 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short /* loop over data, doing border select */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* get new vertical minimum extent of channel */ ymin= ymax - ACHANNEL_STEP; @@ -253,9 +254,9 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short /* set horizontal range (if applicable) */ if (ELEM(mode, ACTKEYS_BORDERSEL_FRAMERANGE, ACTKEYS_BORDERSEL_ALLKEYS)) { /* if channel is mapped in NLA, apply correction */ - if (nob) { - bed.f1= get_action_frame(nob, rectf.xmin); - bed.f2= get_action_frame(nob, rectf.xmax); + if (adt) { + bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); + bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); } else { bed.f1= rectf.xmin; @@ -413,12 +414,12 @@ static void markers_selectkeys_between (bAnimContext *ac) /* select keys in-between */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else { ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); @@ -495,15 +496,15 @@ 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) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* loop over cfraelems (stored in the BeztEditData->list) * - we need to do this here, as we can apply fewer NLA-mapping conversions */ for (ce= bed.list.first; ce; ce= ce->next) { /* set frame for validation callback to refer to */ - if (nob) - bed.f1= get_action_frame(nob, ce->cfra); + if (adt) + bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, 0); else bed.f1= ce->cfra; @@ -658,12 +659,12 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short /* select keys on the side where most data occurs */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + 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); @@ -702,11 +703,11 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* set frame for validation callback to refer to */ - if (nob) - bed.f1= get_action_frame(nob, selx); + if (adt) + bed.f1= BKE_nla_tweakedit_remap(adt, selx, 0); else bed.f1= selx; @@ -771,15 +772,15 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, } else { /* found match - must return here... */ - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); ActKeysInc *aki= init_aki_data(ac, ale); ActKeyColumn *ak; float xmin, xmax; /* apply NLA-scaling correction? */ - if (nob) { - xmin= get_action_frame(nob, rectf.xmin); - xmax= get_action_frame(nob, rectf.xmax); + if (adt) { + xmin= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); + xmax= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); } else { xmin= rectf.xmin; diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index acf712d0147..d9e12afc947 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -836,11 +836,11 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri for (ale=anim_data.first; ale; ale=ale->next) { FCurve *fcu= (FCurve *)ale->key_data; FModifier *fcm= fcurve_find_active_modifier(fcu); - //Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* map keyframes for drawing if scaled F-Curve */ - //if (nob) - // ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 0); + if (adt) + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 0); /* draw curve: * - curve line may be result of one or more destructive modifiers or just the raw data, @@ -918,8 +918,8 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri } /* undo mapping of keyframes for drawing if scaled F-Curve */ - //if (nob) - // ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 0); + if (adt) + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 0); } /* free list of curves */ diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 8903d95b288..a1888e252d2 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -67,6 +67,7 @@ #include "BKE_fcurve.h" #include "BKE_key.h" #include "BKE_material.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_context.h" #include "BKE_report.h" @@ -114,16 +115,16 @@ static void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xm if (anim_data.first) { /* go through channels, finding max extents */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= NULL; //ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); FCurve *fcu= (FCurve *)ale->key_data; float txmin, txmax, tymin, tymax; /* get range and apply necessary scaling before */ calc_fcurve_bounds(fcu, &txmin, &txmax, &tymin, &tymax); - if (nob) { - txmin= get_action_frame_inv(nob, txmin); - txmax= get_action_frame_inv(nob, txmax); + if (adt) { + txmin= BKE_nla_tweakedit_remap(adt, txmin, 1); + txmax= BKE_nla_tweakedit_remap(adt, txmax, 1); } /* try to set cur using these values, if they're more extreme than previously set values */ @@ -271,6 +272,7 @@ static void create_ghost_curves (bAnimContext *ac, int start, int end) for (ale= anim_data.first; ale; ale= ale->next) { FCurve *fcu= (FCurve *)ale->key_data; FCurve *gcu= MEM_callocN(sizeof(FCurve), "Ghost FCurve"); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); ChannelDriver *driver= fcu->driver; FPoint *fpt; int cfra; @@ -286,8 +288,10 @@ static void create_ghost_curves (bAnimContext *ac, int start, int end) /* use the sampling callback at 1-frame intervals from start to end frames */ for (cfra= start; cfra <= end; cfra++, fpt++) { - fpt->vec[0]= (float)cfra; - fpt->vec[1]= fcurve_samplingcb_evalcurve(fcu, NULL, (float)cfra); + float cfrae= BKE_nla_tweakedit_remap(adt, cfra, 1); + + fpt->vec[0]= cfrae; + fpt->vec[1]= fcurve_samplingcb_evalcurve(fcu, NULL, cfrae); } /* set color of ghost curve @@ -403,6 +407,7 @@ static int graphkeys_click_insert_exec (bContext *C, wmOperator *op) { bAnimContext ac; bAnimListElem *ale; + AnimData *adt; float frame, val; /* get animation context */ @@ -420,6 +425,10 @@ static int graphkeys_click_insert_exec (bContext *C, wmOperator *op) frame= RNA_float_get(op->ptr, "frame"); val= RNA_float_get(op->ptr, "value"); + /* apply inverse NLA-mapping to frame to get correct time in un-scaled action */ + adt= ANIM_nla_mapping_get(&ac, ale); + frame= BKE_nla_tweakedit_remap(adt, frame, 1); + /* insert keyframe on the specified frame + value */ insert_vert_fcurve((FCurve *)ale->data, frame, val, 0); @@ -1336,8 +1345,18 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| ANIMFILTER_CURVESONLY); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - for (ale= anim_data.first; ale; ale= ale->next) - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + 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); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); + } + else + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); + + } BLI_freelistN(&anim_data); @@ -1405,12 +1424,12 @@ static void snap_graph_keys(bAnimContext *ac, short mode) /* snap keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); @@ -1516,12 +1535,12 @@ static void mirror_graph_keys(bAnimContext *ac, short mode) /* mirror keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 632ce30863d..4451cfae227 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -63,6 +63,7 @@ #include "BKE_fcurve.h" #include "BKE_key.h" #include "BKE_material.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_context.h" #include "BKE_utildefines.h" @@ -231,14 +232,14 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho /* loop over data, doing border select */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* set horizontal range (if applicable) */ if (mode != BEZT_OK_VALUERANGE) { /* if channel is mapped in NLA, apply correction */ - if (nob) { - bed.f1= get_action_frame(nob, rectf.xmin); - bed.f2= get_action_frame(nob, rectf.xmax); + if (adt) { + bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); + bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); } else { bed.f1= rectf.xmin; @@ -379,12 +380,12 @@ static void markers_selectkeys_between (bAnimContext *ac) /* select keys in-between */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else { ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); @@ -450,15 +451,15 @@ static void columnselect_graph_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) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* loop over cfraelems (stored in the BeztEditData->list) * - we need to do this here, as we can apply fewer NLA-mapping conversions */ for (ce= bed.list.first; ce; ce= ce->next) { /* set frame for validation callback to refer to */ - if (nob) - bed.f1= get_action_frame(nob, ce->cfra); + if (ale) + bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, 0); else bed.f1= ce->cfra; @@ -566,11 +567,16 @@ static short findnearest_fcurve_vert (bAnimContext *ac, int mval[2], FCurve **fc for (ale= anim_data.first; ale; ale= ale->next) { FCurve *fcu= (FCurve *)ale->key_data; + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* try to progressively get closer to the right point... */ if (fcu->bezt) { BezTriple *bezt1=fcu->bezt, *prevbezt=NULL; + /* apply NLA mapping to all the keyframes */ + if (adt) + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); + for (i=0; i < fcu->totvert; i++, prevbezt=bezt1, bezt1++) { /* convert beztriple points to screen-space */ UI_view2d_to_region_no_clip(v2d, bezt1->vec[0][0], bezt1->vec[0][1], &sco[0][0], &sco[0][1]); @@ -624,6 +630,10 @@ static short findnearest_fcurve_vert (bAnimContext *ac, int mval[2], FCurve **fc } } } + + /* un-apply NLA mapping from all the keyframes */ + if (adt) + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } } @@ -767,12 +777,12 @@ static void graphkeys_mselect_leftright (bAnimContext *ac, short leftright, shor /* select keys on the side where most data occurs */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); - ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); @@ -827,11 +837,11 @@ static void graphkeys_mselect_column (bAnimContext *ac, int mval[2], short selec ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* set frame for validation callback to refer to */ - if (nob) - bed.f1= get_action_frame(nob, selx); + if (adt) + bed.f1= BKE_nla_tweakedit_remap(adt, selx, 0); else bed.f1= selx; diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index fa93d2a143d..f115bb9a068 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -45,6 +45,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_anim_types.h" #include "DNA_armature_types.h" #include "DNA_action_types.h" /* for some special action-editor settings */ #include "DNA_constraint_types.h" @@ -76,9 +77,9 @@ //#include "BIF_editmesh.h" //#include "BIF_editsima.h" //#include "BIF_editparticle.h" -//#include "BIF_editaction.h" -#include "BKE_action.h" /* get_action_frame */ +#include "BKE_action.h" +#include "BKE_nla.h" //#include "BKE_bad_level_calls.h"/* popmenu and error */ #include "BKE_bmesh.h" #include "BKE_context.h" @@ -89,7 +90,6 @@ #include "BKE_utildefines.h" #include "BKE_context.h" -//#include "BSE_editaction_types.h" //#include "BSE_view.h" #include "ED_image.h" @@ -4354,7 +4354,7 @@ static short getAnimEdit_DrawTime(TransInfo *t) /* This function is used by Animation Editor specific transform functions to do * the Snap Keyframe to Nearest Frame/Marker */ -static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short autosnap) +static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, short autosnap) { /* snap key to nearest frame? */ if (autosnap == SACTSNAP_FRAME) { @@ -4364,8 +4364,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short double val; /* convert frame to nla-action time (if needed) */ - if (ob) - val= get_action_frame_inv(ob, *(td->val)); + if (adt) + val= BKE_nla_tweakedit_remap(adt, *(td->val), 1); else val= *(td->val); @@ -4376,8 +4376,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short val= (float)( floor(val+0.5f) ); /* convert frame out of nla-action time */ - if (ob) - *(td->val)= get_action_frame(ob, val); + if (adt) + *(td->val)= BKE_nla_tweakedit_remap(adt, val, 0); else *(td->val)= val; } @@ -4386,8 +4386,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short float val; /* convert frame to nla-action time (if needed) */ - if (ob) - val= get_action_frame_inv(ob, *(td->val)); + if (adt) + val= BKE_nla_tweakedit_remap(adt, *(td->val), 1); else val= *(td->val); @@ -4396,8 +4396,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short val= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, val); /* convert frame out of nla-action time */ - if (ob) - *(td->val)= get_action_frame(ob, val); + if (adt) + *(td->val)= BKE_nla_tweakedit_remap(adt, val, 0); else *(td->val)= val; } @@ -4473,10 +4473,10 @@ static void applyTimeTranslate(TransInfo *t, float sval) /* it is assumed that td->ob is a pointer to the object, * whose active action is where this keyframe comes from */ - Object *ob= td->ob; + AnimData *adt= td->extra; - /* check if any need to apply nla-scaling */ - if (ob) { + /* check if any need to apply nla-mapping */ + if (adt) { deltax = t->values[0]; if (autosnap == SACTSNAP_STEP) { @@ -4486,9 +4486,9 @@ static void applyTimeTranslate(TransInfo *t, float sval) deltax= (float)( floor(deltax + 0.5f) ); } - val = get_action_frame_inv(ob, td->ival); + val = BKE_nla_tweakedit_remap(adt, td->ival, 1); val += deltax; - *(td->val) = get_action_frame(ob, val); + *(td->val) = BKE_nla_tweakedit_remap(adt, val, 0); } else { deltax = val = t->values[0]; @@ -4504,7 +4504,7 @@ static void applyTimeTranslate(TransInfo *t, float sval) } /* apply nearest snapping */ - doAnimEdit_SnapFrame(t, td, ob, autosnap); + doAnimEdit_SnapFrame(t, td, adt, autosnap); } } @@ -4604,15 +4604,15 @@ static void applyTimeSlide(TransInfo *t, float sval) /* 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++) { - /* it is assumed that td->ob is a pointer to the object, + /* it is assumed that td->extra is a pointer to the AnimData, * whose active action is where this keyframe comes from */ - Object *ob= td->ob; + AnimData *adt= td->extra; float cval = t->values[0]; - /* apply scaling to necessary values */ - if (ob) - cval= get_action_frame(ob, cval); + /* apply NLA-mapping to necessary values */ + if (adt) + cval= BKE_nla_tweakedit_remap(adt, cval, 0); /* only apply to data if in range */ if ((sval > minx) && (sval < maxx)) { @@ -4707,10 +4707,10 @@ static void applyTimeScale(TransInfo *t) { for (i = 0 ; i < t->total; i++, td++) { - /* it is assumed that td->ob is a pointer to the object, + /* it is assumed that td->extra is a pointer to the AnimData, * whose active action is where this keyframe comes from */ - Object *ob= td->ob; + AnimData *adt= td->extra; float startx= CFRA; float fac= t->values[0]; @@ -4721,9 +4721,9 @@ static void applyTimeScale(TransInfo *t) { fac= (float)( floor(fac + 0.5f) ); } - /* check if any need to apply nla-scaling */ - if (ob) - startx= get_action_frame(ob, startx); + /* check if any need to apply nla-mapping */ + if (adt) + startx= BKE_nla_tweakedit_remap(adt, startx, 0); /* now, calculate the new value */ *(td->val) = td->ival - startx; @@ -4731,7 +4731,7 @@ static void applyTimeScale(TransInfo *t) { *(td->val) += startx; /* apply nearest snapping */ - doAnimEdit_SnapFrame(t, td, ob, autosnap); + doAnimEdit_SnapFrame(t, td, adt, autosnap); } } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index cb210a37bf4..fc5a6b85de4 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -90,6 +90,7 @@ #include "BKE_mball.h" #include "BKE_mesh.h" #include "BKE_modifier.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_particle.h" #include "BKE_sequence.h" @@ -2857,12 +2858,12 @@ static void posttrans_action_clean (bAnimContext *ac, bAction *act) * - all keyframes are converted in/out of global time */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(ac, ale); + AnimData *adt= ANIM_nla_mapping_get(ac, ale); - if (nob) { - //ANIM_nla_mapping_apply_ipocurve(nob, ale->key_data, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); posttrans_fcurve_clean(ale->key_data); - //ANIM_nla_mapping_apply_ipocurve(nob, ale->key_data, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else posttrans_fcurve_clean(ale->key_data); @@ -2920,17 +2921,16 @@ static int count_gplayer_frames(bGPDlayer *gpl, char side, float cfra) } /* This function assigns the information to transdata */ -static void TimeToTransData(TransData *td, float *time, Object *ob) +static void TimeToTransData(TransData *td, float *time, AnimData *adt) { /* memory is calloc'ed, so that should zero everything nicely for us */ td->val = time; td->ival = *(time); - /* store the Object where this keyframe exists as a keyframe of the - * active action as td->ob. Usually, this member is only used for constraints - * drawing + /* store the AnimData where this keyframe exists as a keyframe of the + * active action as td->extra. */ - td->ob= ob; + td->extra= adt; } /* This function advances the address to which td points to, so it must return @@ -2940,7 +2940,7 @@ static void TimeToTransData(TransData *td, float *time, Object *ob) * The 'side' argument is needed for the extend mode. 'B' = both sides, 'R'/'L' mean only data * on the named side are used. */ -static TransData *FCurveToTransData(TransData *td, FCurve *fcu, Object *ob, char side, float cfra) +static TransData *FCurveToTransData(TransData *td, FCurve *fcu, AnimData *adt, char side, float cfra) { BezTriple *bezt; int i; @@ -2954,13 +2954,13 @@ static TransData *FCurveToTransData(TransData *td, FCurve *fcu, Object *ob, char /* only add if on the right 'side' of the current frame */ if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) { /* each control point needs to be added separetely */ - TimeToTransData(td, bezt->vec[0], ob); + TimeToTransData(td, bezt->vec[0], adt); td++; - TimeToTransData(td, bezt->vec[1], ob); + TimeToTransData(td, bezt->vec[1], adt); td++; - TimeToTransData(td, bezt->vec[2], ob); + TimeToTransData(td, bezt->vec[2], adt); td++; } } @@ -3068,13 +3068,13 @@ 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) { - Object *nob= ANIM_nla_mapping_get(&ac, ale); + AnimData *adt= ANIM_nla_mapping_get(&ac, ale); /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ - if (nob) - cfra = get_action_frame(nob, (float)CFRA); + if (adt) + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); else cfra = (float)CFRA; @@ -3121,18 +3121,18 @@ static void createTransActionData(bContext *C, TransInfo *t) // tfd += i; //} //else { - Object *nob= ANIM_nla_mapping_get(&ac, ale); + AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ - if (nob) - cfra = get_action_frame(nob, (float)CFRA); + if (adt) + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); else cfra = (float)CFRA; - td= FCurveToTransData(td, fcu, nob, side, cfra); + td= FCurveToTransData(td, fcu, adt, side, cfra); //} } @@ -3164,23 +3164,23 @@ static void createTransActionData(bContext *C, TransInfo *t) /* Helper function for createTransGraphEditData, which is reponsible for associating * source data with transform data */ -static void bezt_to_transdata (TransData *td, TransData2D *td2d, Object *nob, float *loc, float *cent, short selected, short ishandle, short intvals) +static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, float *loc, float *cent, short selected, short ishandle, short intvals) { /* New location from td gets dumped onto the old-location of td2d, which then * gets copied to the actual data at td2d->loc2d (bezt->vec[n]) * - * Due to NLA scaling, we apply NLA scaling to some of the verts here, - * and then that scaling will be undone after transform is done. + * Due to NLA mapping, we apply NLA mapping to some of the verts here, + * and then that mapping will be undone after transform is done. */ - if (nob) { - td2d->loc[0] = get_action_frame_inv(nob, loc[0]); + if (adt) { + td2d->loc[0] = BKE_nla_tweakedit_remap(adt, loc[0], 0); td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; td->loc = td2d->loc; - td->center[0] = get_action_frame_inv(nob, cent[0]); + td->center[0] = BKE_nla_tweakedit_remap(adt, cent[0], 0); td->center[1] = cent[1]; td->center[2] = 0.0f; @@ -3201,6 +3201,9 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, Object *nob, fl td->axismtx[2][2] = 1.0f; td->ext= NULL; td->tdi= NULL; td->val= NULL; + + /* store AnimData info in td->extra, for applying mapping when flushing */ + td->extra= adt; if (selected) { td->flag |= TD_SELECTED; @@ -3261,14 +3264,14 @@ 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) { - Object *nob= NULL; //ANIM_nla_mapping_get(&ac, ale); // XXX we don't handle NLA mapping for now here... + AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ - if (nob) - cfra = get_action_frame(nob, (float)CFRA); + if (adt) + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); else cfra = (float)CFRA; @@ -3318,13 +3321,19 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) td2d= t->data2d; /* loop 2: build transdata arrays */ - cfra = (float)CFRA; - for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= NULL; //ANIM_nla_mapping_get(&ac, ale); // XXX we don't handle NLA mapping here yet + 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, espcially under + * higher scaling ratios, but is faster than converting all points) + */ + if (adt) + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); + else + cfra = (float)CFRA; + /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse (if applicable) */ bezt= fcu->bezt; prevbezt= NULL; @@ -3338,7 +3347,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) if ( (!prevbezt && (bezt->ipo==BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo==BEZT_IPO_BEZ)) ) { if (bezt->f1 & SELECT) { hdata = initTransDataCurveHandes(td, bezt); - bezt_to_transdata(td++, td2d++, nob, bezt->vec[0], bezt->vec[1], 1, 1, intvals); + bezt_to_transdata(td++, td2d++, adt, bezt->vec[0], bezt->vec[1], 1, 1, intvals); } else h1= 0; @@ -3347,7 +3356,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) if (bezt->f3 & SELECT) { if (hdata==NULL) hdata = initTransDataCurveHandes(td, bezt); - bezt_to_transdata(td++, td2d++, nob, bezt->vec[2], bezt->vec[1], 1, 1, intvals); + bezt_to_transdata(td++, td2d++, adt, bezt->vec[2], bezt->vec[1], 1, 1, intvals); } else h2= 0; @@ -3363,7 +3372,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) hdata = initTransDataCurveHandes(td, bezt); } - bezt_to_transdata(td++, td2d++, nob, bezt->vec[1], bezt->vec[1], 1, 0, intvals); + bezt_to_transdata(td++, td2d++, adt, bezt->vec[1], bezt->vec[1], 1, 0, intvals); } /* special hack (must be done after initTransDataCurveHandes(), as that stores handle settings to restore...): @@ -3587,6 +3596,8 @@ void flushTransGraphData(TransInfo *t) /* flush to 2d vector from internally used 3d vector */ for (a=0, td= t->data, td2d=t->data2d; atotal; 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) @@ -3604,9 +3615,9 @@ void flushTransGraphData(TransInfo *t) } /* we need to unapply the nla-scaling from the time in some situations */ - //if (NLA_IPO_SCALED) - // td2d->loc2d[0]= get_action_frame(OBACT, td2d->loc[0]); - //else + if (adt) + td2d->loc2d[0]= BKE_nla_tweakedit_remap(adt, td2d->loc[0], 0); + else td2d->loc2d[0]= td2d->loc[0]; /* if int-values only, truncate to integers */ @@ -4584,16 +4595,16 @@ void special_aftertrans_update(TransInfo *t) /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(&ac, ale); + AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, fcu, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); posttrans_fcurve_clean(fcu); - ANIM_nla_mapping_apply_fcurve(nob, fcu, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } else posttrans_fcurve_clean(fcu); @@ -4695,16 +4706,16 @@ void special_aftertrans_update(TransInfo *t) /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { - Object *nob= ANIM_nla_mapping_get(&ac, ale); + AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; if ( (sipo->flag & SIPO_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { - if (nob) { - ANIM_nla_mapping_apply_fcurve(nob, fcu, 0, 1); + if (adt) { + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); posttrans_fcurve_clean(fcu); - ANIM_nla_mapping_apply_fcurve(nob, fcu, 1, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } else posttrans_fcurve_clean(fcu); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 4c9592fb27a..a60135107bc 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -272,37 +272,6 @@ void recalcData(TransInfo *t) Scene *scene = t->scene; Base *base; -#if 0 // TRANSFORM_FIX_ME - if (t->spacetype == SPACE_ACTION) { - Object *ob= OBACT; - void *data; - short context; - - /* determine what type of data we are operating on */ - data = get_action_context(&context); - if (data == NULL) return; - - /* always flush data if gpencil context */ - if (context == ACTCONT_GPENCIL) { - flushTransGPactionData(t); - } - - if (G.saction->lock) { - if (context == ACTCONT_ACTION) { - if(ob) { - ob->ctime= -1234567.0f; - if(ob->pose || ob_get_key(ob)) - DAG_object_flush_update(G.scene, ob, OB_RECALC); - else - DAG_object_flush_update(G.scene, ob, OB_RECALC_OB); - } - } - else if (context == ACTCONT_SHAPEKEY) { - DAG_object_flush_update(G.scene, OBACT, OB_RECALC_OB|OB_RECALC_DATA); - } - } - } -#endif if (t->obedit) { } else if(G.f & G_PARTICLEEDIT) { diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index a784adaf35f..2b089530236 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -1,5 +1,28 @@ -/* Testing code for new animation system in 2.5 - * Copyright 2009, Joshua Leung +/** + * $Id: DNA_anim_types.h 21023 2009-06-20 04:02:49Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #ifndef DNA_ANIM_TYPES_H @@ -668,6 +691,8 @@ typedef struct AnimData { /* nla-tracks */ ListBase nla_tracks; + /* active NLA-strip (only set/used during tweaking, so no need to worry about dangling pointers) */ + NlaStrip *actstrip; /* 'drivers' for this ID-block's settings - FCurves, but are completely * separate from those for animation data From 0336c2e7f5df2b104532a04161b3924870567ab3 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 24 Jun 2009 01:04:01 +0000 Subject: [PATCH 077/512] NLA SoC: Fixing a few cases where the wrong flags got used in last night's commit --- source/blender/editors/space_action/action_edit.c | 2 +- source/blender/editors/space_graph/graph_edit.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 272ef3222ce..70dbc42fe6e 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -406,7 +406,7 @@ static void insert_action_keys(bAnimContext *ac, short mode) /* adjust current frame for NLA-scaling */ if (adt) - cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); + cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); else cfra= (float)CFRA; diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index a1888e252d2..057c3c40ddf 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -288,7 +288,7 @@ static void create_ghost_curves (bAnimContext *ac, int start, int end) /* use the sampling callback at 1-frame intervals from start to end frames */ for (cfra= start; cfra <= end; cfra++, fpt++) { - float cfrae= BKE_nla_tweakedit_remap(adt, cfra, 1); + float cfrae= BKE_nla_tweakedit_remap(adt, cfra, 0); fpt->vec[0]= cfrae; fpt->vec[1]= fcurve_samplingcb_evalcurve(fcu, NULL, cfrae); @@ -427,7 +427,7 @@ static int graphkeys_click_insert_exec (bContext *C, wmOperator *op) /* apply inverse NLA-mapping to frame to get correct time in un-scaled action */ adt= ANIM_nla_mapping_get(&ac, ale); - frame= BKE_nla_tweakedit_remap(adt, frame, 1); + frame= BKE_nla_tweakedit_remap(adt, frame, 0); /* insert keyframe on the specified frame + value */ insert_vert_fcurve((FCurve *)ale->data, frame, val, 0); From 717916c2b9975b08ed35a8224bf17ccb6df3310b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 24 Jun 2009 01:41:12 +0000 Subject: [PATCH 078/512] NLA SoC: Fixes for segfaults during NLA Transforms The snapping code was incorrectly assuming that td->extra was always AnimData, but for NLA this is incorrect as it is used for special data used for checking back. --- source/blender/editors/transform/transform.c | 23 ++++++------------- .../editors/transform/transform_conversions.c | 4 ++-- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index f115bb9a068..a417aa46773 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4470,10 +4470,11 @@ static void applyTimeTranslate(TransInfo *t, float sval) /* 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++) { - /* it is assumed that td->ob is a pointer to the object, + /* 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= td->extra; + AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; /* check if any need to apply nla-mapping */ if (adt) { @@ -4606,8 +4607,9 @@ static void applyTimeSlide(TransInfo *t, float sval) 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= td->extra; + AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; float cval = t->values[0]; /* apply NLA-mapping to necessary values */ @@ -4709,8 +4711,9 @@ static void applyTimeScale(TransInfo *t) { 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= td->extra; + AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; float startx= CFRA; float fac= t->values[0]; @@ -4745,18 +4748,6 @@ int TimeScale(TransInfo *t, short mval[2]) sval= t->imval[0]; cval= mval[0]; - // XXX ewww... we need a better factor! -#if 0 // TRANSFORM_FIX_ME - switch (t->spacetype) { - case SPACE_ACTION: - width= ACTWIDTH; - break; - case SPACE_NLA: - width= NLAWIDTH; - break; - } -#endif - /* calculate scaling factor */ startx= sval-(width/2+(t->ar->winx)/2); deltax= cval-(width/2+(t->ar->winx)/2); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index fc5a6b85de4..1f75384880e 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -3271,7 +3271,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); else cfra = (float)CFRA; @@ -3330,7 +3330,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 1); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); else cfra = (float)CFRA; From e5119ee2c0d5b9510d89364600e08e40a4407f40 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 24 Jun 2009 10:32:13 +0000 Subject: [PATCH 079/512] NLA SoC: Drawing Tweaks * Transition tracks are now drawn in a different colour (bluish) * Action line now shows keyframe indicators for the action it is representing. These are drawn as small empty diamonds to show that they're not directly editable (and never ever will be) via the NLA Editor. * Action line is also drawn with borders to help differentiate it from the other tracks. * As an experiment, removed the 'TweakMode' buttons from the header. I had originally added this as a way of indicating that this functionality was there (and to allow for keeping track of it), though it seems to have caused far too much confusion and frustration about 'modality' instead. --- source/blender/blenkernel/intern/nla.c | 2 +- source/blender/editors/space_nla/nla_draw.c | 154 +++++++++++++++--- source/blender/editors/space_nla/nla_header.c | 9 - 3 files changed, 130 insertions(+), 35 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index a5b3b59d310..747113b6531 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -433,7 +433,7 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short invert) * and store for (very probable) future usage */ if (adt->actstrip == NULL) { - NlaTrack *nlt= BKE_nlatrack_find_active(adt); + NlaTrack *nlt= BKE_nlatrack_find_active(&adt->nla_tracks); adt->actstrip= BKE_nlastrip_find_active(nlt); } strip= adt->actstrip; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 2ac2b557243..5a22da2eb25 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -64,6 +64,7 @@ #include "BKE_utildefines.h" #include "ED_anim_api.h" +#include "ED_keyframes_draw.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -89,33 +90,120 @@ extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, flo /* *********************************************** */ /* Strips */ +/* Keyframe Ghosts ---------------------- */ + +/* helper func - draw keyframe as a frame only */ +static void draw_nla_keyframe_ghost (float x, float y, float xscale, float hsize) +{ + static GLuint displist=0; + + /* initialise empty diamond shape */ + if (displist == 0) { + const float dist= 1.0f; + + displist= glGenLists(1); + glNewList(displist, GL_COMPILE); + + glBegin(GL_LINE_LOOP); + glVertex2f(0.0f, dist); + glVertex2f(dist, 0.0f); + glVertex2f(0.0f, -dist); + glVertex2f(-dist, 0.0f); + glEnd(); + + glEndList(); + } + + /* adjust view transform before starting */ + glTranslatef(x, y, 0.0f); + glScalef(1.0f/xscale*hsize, hsize, 1.0f); + + /* anti-aliased lines for more consistent appearance */ + glEnable(GL_LINE_SMOOTH); + + /* draw! */ + glCallList(displist); + + glDisable(GL_LINE_SMOOTH); + + /* restore view transform */ + glScalef(xscale/hsize, 1.0f/hsize, 1.0); + glTranslatef(-x, -y, 0.0f); +} + +/* draw the keyframes in the specified Action */ +static void nla_action_draw_keyframes (AnimData *adt, View2D *v2d, float y) +{ + ListBase keys = {NULL, NULL}; + ActKeyColumn *ak; + float xscale; + + /* for now, color is hardcoded to be black */ + glColor3f(0.0f, 0.0f, 0.0f); + + /* get a list of the keyframes with NLA-scaling applied */ + action_nlascaled_to_keylist(adt, adt->action, &keys, NULL, NULL); + + /* get View2D scaling factor */ + UI_view2d_getscale(v2d, &xscale, NULL); + + /* just draw each keyframe as a simple dot (regardless of the selection status) */ + for (ak= keys.first; ak; ak= ak->next) + draw_nla_keyframe_ghost(ak->cfra, y, xscale, 3.0f); + + /* free icons */ + BLI_freelistN(&keys); +} + +/* Strips (Proper) ---------------------- */ + static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float color[3]) { - if ((strip->flag & NLASTRIP_FLAG_ACTIVE) && (adt && (adt->flag & ADT_NLA_EDIT_ON))) { - /* 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; - } - 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; - } - else if (strip->flag & NLASTRIP_FLAG_SELECT) { - /* selected strip - use theme color for selected */ - UI_GetThemeColor3fv(TH_STRIP_SELECT, color); - } + if (strip->type == NLASTRIP_TYPE_TRANSITION) { + /* 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; + } + else { + /* normal, unselected strip - use (hardly noticable) blue tinge */ + // FIXME: hardcoded temp-hack colors + color[0]= 0.11f; + color[1]= 0.15f; + color[2]= 0.19f; + } + } else { - /* normal, unselected strip - use standard strip theme color */ - UI_GetThemeColor3fv(TH_STRIP, color); + /* Action Clip (default/normal type of strip) */ + if ((strip->flag & NLASTRIP_FLAG_ACTIVE) && (adt && (adt->flag & ADT_NLA_EDIT_ON))) { + /* 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; + } + 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; + } + else if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* selected strip - use theme color for selected */ + UI_GetThemeColor3fv(TH_STRIP_SELECT, color); + } + else { + /* normal, unselected strip - use standard strip theme color */ + UI_GetThemeColor3fv(TH_STRIP, color); + } } } @@ -328,7 +416,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - + // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { // greenish color (same as tweaking strip) - hardcoded for now @@ -351,6 +439,22 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) glVertex2f(v2d->cur.xmax, yminc+NLACHANNEL_SKIP); glEnd(); + /* draw keyframes in the action */ + nla_action_draw_keyframes(adt, v2d, y); + + /* draw 'embossed' lines above and below the strip for effect */ + /* white base-lines */ + glLineWidth(2.0f); + glColor4f(1.0f, 1.0f, 1.0f, 0.3); + fdrawline(v2d->cur.xmin, yminc+NLACHANNEL_SKIP, v2d->cur.xmax, yminc+NLACHANNEL_SKIP); + fdrawline(v2d->cur.xmin, ymaxc-NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc-NLACHANNEL_SKIP); + + /* black top-lines */ + glLineWidth(1.0f); + glColor3f(0.0f, 0.0f, 0.0f); + fdrawline(v2d->cur.xmin, yminc+NLACHANNEL_SKIP, v2d->cur.xmax, yminc+NLACHANNEL_SKIP); + fdrawline(v2d->cur.xmin, ymaxc-NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc-NLACHANNEL_SKIP); + glDisable(GL_BLEND); } break; diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 1971b062c2b..2cbf3adcba7 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -182,7 +182,6 @@ static void do_nla_buttons(bContext *C, void *arg, int event) void nla_header_buttons(const bContext *C, ARegion *ar) { SpaceNla *snla= (SpaceNla *)CTX_wm_space_data(C); - Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); uiBlock *block; int xco, yco= 3; @@ -254,14 +253,6 @@ void nla_header_buttons(const bContext *C, ARegion *ar) } xco += 98; - /* Tweakmode... */ - // XXX these icons need to be changed - if (scene->flag & SCE_NLA_EDIT_ON) - uiDefIconTextButO(block, BUT, "NLAEDIT_OT_tweakmode_exit", WM_OP_INVOKE_REGION_WIN, ICON_NLA, "Exit TweakMode", xco,yco,130,YIC, "Restore the true active action. (TAB)"); - else - uiDefIconTextButO(block, BUT, "NLAEDIT_OT_tweakmode_enter", WM_OP_INVOKE_REGION_WIN, ICON_EDIT, "Enter TweakMode", xco,yco,130,YIC, "Temporarily set the action referenced by the active strip as the active action so that it can be tweaked. (TAB)"); - xco+= 150; - /* always as last */ UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); From 3533cda80c7b52f8ffca3e3928bedb5bfa96b320 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 24 Jun 2009 12:12:11 +0000 Subject: [PATCH 080/512] NLA SoC: Delete Tracks Operator (XKEY / DELKEY) over the channel list This deletes all the strips in the relevant (selected) tracks too. --- .../blender/editors/space_nla/nla_channels.c | 54 +++++++++++++++++++ source/blender/editors/space_nla/nla_draw.c | 5 +- source/blender/editors/space_nla/nla_intern.h | 1 + source/blender/editors/space_nla/nla_ops.c | 5 ++ 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index a1c0de1e552..0a2c32b5f52 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -423,4 +423,58 @@ void NLA_OT_add_tracks (wmOperatorType *ot) RNA_def_boolean(ot->srna, "above_selected", 0, "Above Selected", "Add a new NLA Track above every existing selected one."); } +/* ******************** Delete Tracks Operator ***************************** */ +/* Delete selected NLA Tracks */ + +static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_SEL); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* delete tracks */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + + /* call delete on this track - deletes all strips too */ + free_nlatrack(&adt->nla_tracks, nlt); + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_delete_tracks (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete Tracks"; + ot->idname= "NLA_OT_delete_tracks"; + ot->description= "Delete selected NLA-Tracks and the strips they contain."; + + /* api callbacks */ + ot->exec= nlaedit_delete_tracks_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 5a22da2eb25..51c1960c4c6 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -391,9 +391,6 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) NlaStrip *strip; int index; - /* draw backdrop? */ - // TODO... - /* draw each strip in the track (if visible) */ for (strip=nlt->strips.first, index=1; strip; strip=strip->next, index++) { if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) { @@ -420,7 +417,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { // greenish color (same as tweaking strip) - hardcoded for now - glColor4f(0.3f, 0.95f, 0.1f, 0.3f); // FIXME: only draw the actual range of the action darker? + glColor4f(0.3f, 0.95f, 0.1f, 0.3f); } else { if (ale->data) diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 79ee5396f36..ef37185fd10 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -106,6 +106,7 @@ void NLAEDIT_OT_split(wmOperatorType *ot); void NLA_OT_channels_click(wmOperatorType *ot); void NLA_OT_add_tracks(wmOperatorType *ot); +void NLA_OT_delete_tracks(wmOperatorType *ot); /* **************************************** */ /* nla_ops.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index df731e9d0fb..2a6a0c64ea9 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -132,6 +132,7 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_channels_click); WM_operatortype_append(NLA_OT_add_tracks); + WM_operatortype_append(NLA_OT_delete_tracks); /* select */ WM_operatortype_append(NLAEDIT_OT_click_select); @@ -166,6 +167,10 @@ static void nla_keymap_channels (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_add_tracks", AKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "above_selected", 1); + /* delete tracks */ + WM_keymap_add_item(keymap, "NLA_OT_delete_tracks", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_delete_tracks", DELKEY, KM_PRESS, 0, 0); + /* General Animation Channels keymap (see anim_channels.c) ----------------------- */ /* selection */ /* borderselect - not in tweakmode */ From e5f6a41b1b7125a4c3bc7ef2554c04b768ac765c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 24 Jun 2009 12:50:20 +0000 Subject: [PATCH 081/512] NLA SoC: Scale Operators - Clear (Alt-S) and Apply (Ctrl-A) These two operators work only on Action-Clip strips. * Clear (Alt-S) resets the scale of selected strips to 1.0 * Apply (Ctrl-A) applies the scale of the selected strips to their referenced Actions. If this referenced Action is also used by several other strips, a copy of the Action is made, and the scaling is applied to that Action instead. --- source/blender/editors/space_nla/nla_edit.c | 165 +++++++++++++++++- source/blender/editors/space_nla/nla_header.c | 5 + source/blender/editors/space_nla/nla_intern.h | 3 + source/blender/editors/space_nla/nla_ops.c | 7 + 4 files changed, 179 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 70a033052bd..df30e112b5a 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -46,6 +46,8 @@ #include "BLI_rand.h" #include "BKE_animsys.h" +#include "BKE_action.h" +#include "BKE_fcurve.h" #include "BKE_nla.h" #include "BKE_context.h" #include "BKE_library.h" @@ -55,6 +57,7 @@ #include "BKE_utildefines.h" #include "ED_anim_api.h" +#include "ED_keyframes_edit.h" #include "ED_markers.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -72,6 +75,7 @@ #include "UI_view2d.h" #include "nla_intern.h" // own include +#include "nla_private.h" // FIXME... maybe this shouldn't be included? /* *********************************************** */ /* 'Special' Editing */ @@ -217,7 +221,7 @@ void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) } /* *********************************************** */ -/* NLA Editing Operations */ +/* NLA Editing Operations (Constructive/Destructive) */ /* ******************** Add Action-Clip Operator ***************************** */ /* Add a new Action-Clip strip to the active track (or the active block if no space in the track) */ @@ -700,3 +704,162 @@ void NLAEDIT_OT_split (wmOperatorType *ot) } /* *********************************************** */ +/* NLA Editing Operations (Modifying) */ + +/* ******************** Apply Scale Operator ***************************** */ +/* Reset the scaling of the selected strips to 1.0f */ + +/* apply scaling to keyframe */ +static short bezt_apply_nlamapping (BeztEditData *bed, BezTriple *bezt) +{ + /* NLA-strip which has this scaling is stored in bed->data */ + NlaStrip *strip= (NlaStrip *)bed->data; + + /* adjust all the times */ + bezt->vec[0][0]= nlastrip_get_frame(strip, bezt->vec[0][0], 1); + bezt->vec[1][0]= nlastrip_get_frame(strip, bezt->vec[1][0], 1); + bezt->vec[2][0]= nlastrip_get_frame(strip, bezt->vec[2][0], 1); + + /* nothing to return or else we exit */ + return 0; +} + +static int nlaedit_apply_scale_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + BeztEditData bed; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* init the editing data */ + memset(&bed, 0, sizeof(BeztEditData)); + + /* for each NLA-Track, apply scale of all selected strips */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* strip must be selected, and must be action-clip only (transitions don't have scale) */ + if ((strip->flag & NLASTRIP_FLAG_SELECT) && (strip->type == NLASTRIP_TYPE_CLIP)) { + /* if the referenced action is used by other strips, make this strip use its own copy */ + if (strip->act == NULL) + continue; + if (strip->act->id.us > 1) { + /* make a copy of the Action to work on */ + bAction *act= copy_action(strip->act); + + /* set this as the new referenced action, decrementing the users of the old one */ + strip->act->id.us--; + strip->act= act; + } + + /* setup iterator, and iterate over all the keyframes in the action, applying this scaling */ + bed.data= strip; + ANIM_animchanneldata_keys_bezier_loop(&bed, strip->act, ALE_ACT, NULL, bezt_apply_nlamapping, calchandles_fcurve, 0); + + /* clear scale of strip now that it has been applied, but leave everything else alone */ + strip->scale= 1.0f; + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_apply_scale (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Apply Scale"; + ot->idname= "NLAEDIT_OT_apply_scale"; + ot->description= "Apply scaling of selected strips to their referenced Actions."; + + /* api callbacks */ + ot->exec= nlaedit_apply_scale_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ******************** Clear Scale Operator ***************************** */ +/* Reset the scaling of the selected strips to 1.0f */ + +static int nlaedit_clear_scale_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each NLA-Track, reset scale of all selected strips */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* strip must be selected, and must be action-clip only (transitions don't have scale) */ + if ((strip->flag & NLASTRIP_FLAG_SELECT) && (strip->type == NLASTRIP_TYPE_CLIP)) { + PointerRNA strip_ptr; + + RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); + RNA_float_set(&strip_ptr, "scale", 1.0f); + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_clear_scale (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Clear Scale"; + ot->idname= "NLAEDIT_OT_clear_scale"; + ot->description= "Reset scaling of selected strips."; + + /* api callbacks */ + ot->exec= nlaedit_clear_scale_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 2cbf3adcba7..11dfc5575b1 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -154,6 +154,11 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); uiItemO(layout, NULL, 0, "NLAEDIT_OT_delete"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLAEDIT_OT_apply_scale"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_clear_scale"); } static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index ef37185fd10..17fad5db47f 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -99,6 +99,9 @@ void NLAEDIT_OT_duplicate(wmOperatorType *ot); void NLAEDIT_OT_delete(wmOperatorType *ot); void NLAEDIT_OT_split(wmOperatorType *ot); +void NLAEDIT_OT_apply_scale(wmOperatorType *ot); +void NLAEDIT_OT_clear_scale(wmOperatorType *ot); + /* **************************************** */ /* nla_channels.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 2a6a0c64ea9..531e049d29a 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -149,6 +149,9 @@ void nla_operatortypes(void) WM_operatortype_append(NLAEDIT_OT_duplicate); WM_operatortype_append(NLAEDIT_OT_delete); WM_operatortype_append(NLAEDIT_OT_split); + + WM_operatortype_append(NLAEDIT_OT_apply_scale); + WM_operatortype_append(NLAEDIT_OT_clear_scale); } /* ************************** registration - keymaps **********************************/ @@ -239,6 +242,10 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* split */ WM_keymap_add_item(keymap, "NLAEDIT_OT_split", YKEY, KM_PRESS, 0, 0); + /* apply scale */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_apply_scale", AKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "NLAEDIT_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); + /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_NLA); } From 122808b839aba1118b8c717e91347e1c885b4ec9 Mon Sep 17 00:00:00 2001 From: Jens Ole Wund Date: Wed, 24 Jun 2009 23:42:45 +0000 Subject: [PATCH 082/512] bug fix SoftBody module vertex groups are not notified on deletion .. and other relevant changes .. sneak in Mass and Spring Painting --- source/blender/blenkernel/BKE_softbody.h | 4 +- source/blender/blenkernel/intern/softbody.c | 63 +++- source/blender/include/butspace.h | 4 + source/blender/makesdna/DNA_object_force.h | 16 +- source/blender/src/buttons_object.c | 316 ++++++++++++++++---- 5 files changed, 333 insertions(+), 70 deletions(-) diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h index 1756734813b..a0691b635da 100644 --- a/source/blender/blenkernel/BKE_softbody.h +++ b/source/blender/blenkernel/BKE_softbody.h @@ -43,7 +43,9 @@ typedef struct BodyPoint { float choke,choke2,frozen; float colball; short flag; - char octantflag; + //char octantflag; + float mass; + float springweight; } BodyPoint; /* allocates and initializes general main data */ diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 011660a7f8b..25eb999cc4f 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -82,7 +82,7 @@ variables on the UI for now #include "BKE_DerivedMesh.h" #include "BKE_pointcache.h" #include "BKE_modifier.h" - +#include "BKE_deform.h" #include "BIF_editdeform.h" #include "BIF_graphics.h" #include "PIL_time.h" @@ -2052,7 +2052,7 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo BodyPoint *bp1,*bp2; float dir[3],dvel[3]; - float distance,forcefactor,kd,absvel,projvel; + float distance,forcefactor,kd,absvel,projvel,kw; int ia,ic; /* prepare depending on which side of the spring we are on */ if (bpi == bs->v1){ @@ -2086,7 +2086,10 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo forcefactor = iks/bs->len; else forcefactor = iks; - forcefactor *= bs->strength; + kw = (bp1->springweight+bp2->springweight)/2.0f; + kw = kw * kw; + kw = kw * kw; + forcefactor *= bs->strength * kw; Vec3PlusStVec(bp1->force,(bs->len - distance)*forcefactor,dir); /* do bp1 <--> bp2 viscous */ @@ -2185,14 +2188,14 @@ static int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, VecMidf(velcenter, bp->vec, obp->vec); VecSubf(dvel,velcenter,bp->vec); - VecMulf(dvel,sb->nodemass); + VecMulf(dvel,bp->mass); Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); Vec3PlusStVec(bp->force,sb->balldamp,dvel); /* exploit force(a,b) == -force(b,a) part2/2 */ VecSubf(dvel,velcenter,obp->vec); - VecMulf(dvel,sb->nodemass); + VecMulf(dvel,bp->mass); Vec3PlusStVec(obp->force,sb->balldamp,dvel); Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); @@ -2237,7 +2240,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, /* gravitation */ if (sb){ float gravity = sb->grav * sb_grav_force_scale(ob); - bp->force[2]-= gravity*sb->nodemass; /* individual mass of node here */ + bp->force[2]-= gravity*bp->mass; /* individual mass of node here */ } /* particle field & vortex */ @@ -2549,7 +2552,7 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int VecMidf(velcenter, bp->vec, obp->vec); VecSubf(dvel,velcenter,bp->vec); - VecMulf(dvel,sb->nodemass); + VecMulf(dvel,bp->mass); Vec3PlusStVec(bp->force,f*(1.0f-sb->balldamp),def); Vec3PlusStVec(bp->force,sb->balldamp,dvel); @@ -2580,7 +2583,7 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int /* exploit force(a,b) == -force(b,a) part2/2 */ VecSubf(dvel,velcenter,obp->vec); - VecMulf(dvel,sb->nodemass); + VecMulf(dvel,(bp->mass+obp->mass)/2.0f); Vec3PlusStVec(obp->force,sb->balldamp,dvel); Vec3PlusStVec(obp->force,-f*(1.0f-sb->balldamp),def); @@ -2640,8 +2643,7 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int /* gravitation */ - bp->force[2]-= gravity*sb->nodemass; /* individual mass of node here */ - //bp->force[1]-= gravity*sb->nodemass; /* individual mass of node here */ + bp->force[2]-= gravity*bp->mass; /* individual mass of node here */ /* particle field & vortex */ @@ -2850,11 +2852,20 @@ static void softbody_apply_forces(Object *ob, float forcetime, int mode, float * aabbmin[0]=aabbmin[1]=aabbmin[2] = 1e20f; aabbmax[0]=aabbmax[1]=aabbmax[2] = -1e20f; + /* old one with homogenous masses */ /* claim a minimum mass for vertex */ + /* if (sb->nodemass > 0.009999f) timeovermass = forcetime/sb->nodemass; else timeovermass = forcetime/0.009999f; + */ for(a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { +/* now we have individual masses */ +/* claim a minimum mass for vertex */ + if (bp->mass > 0.009999f) timeovermass = forcetime/bp->mass; + else timeovermass = forcetime/0.009999f; + + if(bp->goal < SOFTGOALSNAP){ /* this makes t~ = t */ if(mid_flags & MID_PRESERVE) VECCOPY(dx,bp->vec); @@ -3228,10 +3239,36 @@ static void mesh_to_softbody(Object *ob) /* to proove the concept this would enable per vertex *mass painting* - strcpy(name,"SOFTMASS"); - error = get_scalar_from_named_vertexgroup(ob,name, a,&temp); - if (!error) bp->mass = temp * ob->rangeofmass; */ + /* first set the default */ + bp->mass = sb->nodemass; + + if (sb->namedVG_Mass[0]) + { + int grp= get_named_vertexgroup_num (ob,sb->namedVG_Mass); + /* printf("VGN %s %d \n",sb->namedVG_Mass,grp); */ + if(grp > -1){ + get_scalar_from_vertexgroup(ob, a,(short) (grp), &bp->mass); + bp->mass = bp->mass * sb->nodemass; + /* printf("bp->mass %f \n",bp->mass); */ + + } + } + /* first set the default */ + bp->springweight = 1.0f; + + if (sb->namedVG_Spring_K[0]) + { + int grp= get_named_vertexgroup_num (ob,sb->namedVG_Spring_K); + //printf("VGN %s %d \n",sb->namedVG_Spring_K,grp); + if(grp > -1){ + get_scalar_from_vertexgroup(ob, a,(short) (grp), &bp->springweight); + //printf("bp->springweight %f \n",bp->springweight); + + } + } + + } /* but we only optionally add body edge springs */ diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h index 998453ca69b..7c713a0fec9 100644 --- a/source/blender/include/butspace.h +++ b/source/blender/include/butspace.h @@ -288,6 +288,10 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la #define B_SOFTBODY_DEL_VG 1421 #define B_SOFTBODY_BAKE 1422 #define B_SOFTBODY_BAKE_FREE 1423 +#define B_SOFTBODY_UP_GRMASS 1424 +#define B_SOFTBODY_DEL_VGMASS 1425 +#define B_SOFTBODY_UP_GRSPRING 1426 +#define B_SOFTBODY_DEL_VGSPRING 1427 /* Fluidsim button defines */ #define B_FLUIDSIM_BAKE 1450 diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index 718d1a17834..28b5786917d 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -144,12 +144,17 @@ typedef struct SoftBody { int totpoint, totspring; struct BodyPoint *bpoint; /* not saved in file */ struct BodySpring *bspring; /* not saved in file */ - float pad; + char pad; + char msg_lock; + short msg_value; /* part of UI: */ /* general options */ float nodemass; /* softbody mass of *vertex* */ + char namedVG_Mass[32]; /* along with it introduce mass painting + starting to fix old bug .. nastyness that VG are indexes + rather find them by name tag to find it -> jow20090613 */ float grav; /* softbody amount of gravitaion to apply */ float mediafrict; /* friction to env */ float rklimit; /* error limit for ODE solver */ @@ -162,13 +167,18 @@ typedef struct SoftBody { float maxgoal; float defgoal; /* default goal for vertices without vgroup */ short vertgroup; /* index starting at 1 */ + char namedVG_Softgoal[32]; /* starting to fix old bug .. nastyness that VG are indexes + rather find them by name tag to find it -> jow20090613 */ short fuzzyness; /* */ /* springs */ float inspring; /* softbody inner springs */ float infrict; /* softbody inner springs friction */ - + char namedVG_Spring_K[32]; /* along with it introduce Spring_K painting + starting to fix old bug .. nastyness that VG are indexes + rather find them by name tag to find it -> jow20090613 */ + /* baking */ int sfra, efra; int interval; @@ -262,7 +272,7 @@ typedef struct SoftBody { #define OB_SB_FACECOLL 1024 #define OB_SB_EDGECOLL 2048 #define OB_SB_COLLFINAL 4096 -//#define OB_SB_PROTECT_CACHE 8192 +#define OB_SB_BIG_UI 8192 #define OB_SB_AERO_ANGLE 16384 /* sb->solverflags */ diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index 36517982d9c..b62769c2815 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -2423,12 +2423,61 @@ void do_object_panels(unsigned short event) case B_SOFTBODY_DEL_VG: if(ob->soft) { ob->soft->vertgroup= 0; + ob->soft->namedVG_Softgoal[0] = 0; //ob->softflag |= OB_SB_REDO; DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); allqueue(REDRAWBUTSOBJECT, 0); allqueue(REDRAWVIEW3D, 0); } break; + + case B_SOFTBODY_UP_GRMASS: + if(ob->soft) { + ob->soft->msg_lock = 1; + if(ob->soft->msg_value) { + bDeformGroup *defGroup = BLI_findlink(&ob->defbase, ob->soft->msg_value-1); + if(defGroup){ + strncpy((char*)&ob->soft->namedVG_Mass,defGroup->name,32); // ugly type casting and size assumtion + } + } + DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); + allqueue(REDRAWBUTSOBJECT, 0); + allqueue(REDRAWVIEW3D, 0); + ob->soft->msg_lock = 0; + } + break; + case B_SOFTBODY_UP_GRSPRING: + if(ob->soft) { + ob->soft->msg_lock = 1; + if(ob->soft->msg_value) { + bDeformGroup *defGroup = BLI_findlink(&ob->defbase, ob->soft->msg_value-1); + if(defGroup){ + strncpy((char*)&ob->soft->namedVG_Spring_K,defGroup->name,32); // ugly type casting and size assumtion + } + } + DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); + allqueue(REDRAWBUTSOBJECT, 0); + allqueue(REDRAWVIEW3D, 0); + ob->soft->msg_lock = 0; + } + break; + + case B_SOFTBODY_DEL_VGMASS: + if(ob->soft) { + ob->soft->namedVG_Mass[0] = 0; + DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); + allqueue(REDRAWBUTSOBJECT, 0); + allqueue(REDRAWVIEW3D, 0); + } + break; + case B_SOFTBODY_DEL_VGSPRING: + if(ob->soft) { + ob->soft->namedVG_Spring_K[0] = 0; + DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); + allqueue(REDRAWBUTSOBJECT, 0); + allqueue(REDRAWVIEW3D, 0); + } + break; case B_FLUIDSIM_BAKE: /* write config files (currently no simulation) */ fluidsimBake(ob); @@ -4034,7 +4083,7 @@ static void object_softbodies(Object *ob) int ob_has_hair = psys_ob_has_hair(ob); static short actsoft= -1; - if(!_can_softbodies_at_all(ob)) return; + if(!_can_softbodies_at_all(ob)) return; block= uiNewBlock(&curarea->uiblocks, "object_softbodies", UI_EMBOSS, UI_HELV, curarea->win); uiNewPanelTabbed("Soft Body", "Physics"); if(uiNewPanel(curarea, block, "Soft Body", "Physics", 640, 0, 318, 204)==0) return; @@ -4080,6 +4129,8 @@ static void object_softbodies(Object *ob) but= uiDefIconButBitI(block, TOG, eModifierMode_Realtime, B_BAKE_CACHE_CHANGE, VICON_VIEW3D, 165, 200, 20, 20,&md->mode, 0, 0, 1, 0, "Enable soft body during interactive display"); uiBlockEndAlign(block); } + + uiDefButBitS(block, TOG, OB_SB_BIG_UI, REDRAWBUTSOBJECT , "Big UI",190,200,25,20, softflag, 0, 0, 0, 0, "Big UI"); } if(ob_has_hair) { @@ -4087,12 +4138,12 @@ static void object_softbodies(Object *ob) but=uiDefButS(block, MENU, B_BAKE_REDRAWEDIT, menustr, 210,200,100,20, &actsoft, 14.0, 0.0, 0, 0, "Browse systems"); uiButSetFunc(but, PE_change_act, ob, &actsoft); - + MEM_freeN(menustr); } - + uiDefBut(block, LABEL, 0, "",10,10,300,0, NULL, 0.0, 0, 0, 0, ""); /* tell UI we go to 10,10*/ if(val) { @@ -4102,7 +4153,7 @@ static void object_softbodies(Object *ob) if(sb->pointcache->flag & PTCACHE_BAKED) uiSetButLock(1, "Simulation frames are baked"); - + // this is old baking not sure if i want to throw it away now .. leave it for inspiration //if(ob->softflag & OB_SB_BAKESET) { // uiBlockBeginAlign(block); // uiDefButI(block, NUM, B_DIFF, "Start:", 10, 170,100,20, &sb->sfra, 1.0, 10000.0, 10, 0, "Start frame for baking"); @@ -4126,58 +4177,60 @@ static void object_softbodies(Object *ob) // uiDefBut(block, BUT, B_SOFTBODY_BAKE, "BAKE", 10, 120,300,20, NULL, 0.0, 0.0, 10, 0, "Start baking. Press ESC to exit without baking"); //} //else { - /* GENERAL STUFF */ - if (sb->totpoint){ +// if(G.rt == 0){ + if(! (*softflag & OB_SB_BIG_UI)){ + /* GENERAL STUFF */ + if (sb->totpoint){ sprintf(str, "Vertex Mass; Object mass %f [k]",sb->nodemass*sb->totpoint/1000.0f); - } - else{ + } + else{ sprintf(str, "Vertex Mass"); - } - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Friction:", 10, 170,150,20, &sb->mediafrict, 0.0, 50.0, 10, 0, "General media friction for point movements"); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Mass:", 160, 170,150,20, &sb->nodemass , 0.001, 50000.0, 10, 0, str); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Grav:", 10,150,150,20, &sb->grav , -10.0, 10.0, 10, 0, "Apply gravitation to point movement"); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Speed:", 160,150,150,20, &sb->physics_speed , 0.01, 100.0, 10, 0, "Tweak timing for physics to control frequency and speed"); - uiBlockEndAlign(block); + } + uiBlockBeginAlign(block); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Friction:", 10, 170,150,20, &sb->mediafrict, 0.0, 50.0, 10, 0, "General media friction for point movements"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Mass:", 160, 170,150,20, &sb->nodemass , 0.001, 50000.0, 10, 0, str); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Grav:", 10,150,150,20, &sb->grav , -10.0, 10.0, 10, 0, "Apply gravitation to point movement"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Speed:", 160,150,150,20, &sb->physics_speed , 0.01, 100.0, 10, 0, "Tweak timing for physics to control frequency and speed"); + uiBlockEndAlign(block); - /* GOAL STUFF */ - uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, OB_SB_GOAL, B_BAKE_CACHE_CHANGE, "Use Goal", 10,120,130,20, softflag, 0, 0, 0, 0, "Define forces for vertices to stick to animated position"); - if (*softflag & OB_SB_GOAL){ - if(ob->type==OB_MESH) { - menustr= get_vertexgroup_menustr(ob); - defCount=BLI_countlist(&ob->defbase); - if(defCount==0) sb->vertgroup= 0; - uiDefButS(block, MENU, B_BAKE_CACHE_CHANGE, menustr, 140,120,20,20, &sb->vertgroup, 0, defCount, 0, 0, "Browses available vertex groups"); - MEM_freeN (menustr); + /* GOAL STUFF */ + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG, OB_SB_GOAL, B_BAKE_CACHE_CHANGE, "Use Goal", 10,120,130,20, softflag, 0, 0, 0, 0, "Define forces for vertices to stick to animated position"); + if (*softflag & OB_SB_GOAL){ + if(ob->type==OB_MESH) { + menustr= get_vertexgroup_menustr(ob); + defCount=BLI_countlist(&ob->defbase); + if(defCount==0) sb->vertgroup= 0; + uiDefButS(block, MENU, B_BAKE_CACHE_CHANGE, menustr, 140,120,20,20, &sb->vertgroup, 0, defCount, 0, 0, "Browses available vertex groups"); + MEM_freeN (menustr); - if(sb->vertgroup) { - bDeformGroup *defGroup = BLI_findlink(&ob->defbase, sb->vertgroup-1); - if(defGroup) - uiDefBut(block, BUT, B_BAKE_CACHE_CHANGE, defGroup->name, 160,120,130,20, NULL, 0.0, 0.0, 0, 0, "Name of current vertex group"); - else - uiDefBut(block, BUT, B_BAKE_CACHE_CHANGE, "(no group)", 160,120,130,20, NULL, 0.0, 0.0, 0, 0, "Vertex Group doesn't exist anymore"); - uiDefIconBut(block, BUT, B_SOFTBODY_DEL_VG, ICON_X, 290,120,20,20, 0, 0, 0, 0, 0, "Disable use of vertex group"); - } + if(sb->vertgroup) { + bDeformGroup *defGroup = BLI_findlink(&ob->defbase, sb->vertgroup-1); + if(defGroup) + uiDefBut(block, BUT, B_BAKE_CACHE_CHANGE, defGroup->name, 160,120,130,20, NULL, 0.0, 0.0, 0, 0, "Name of current vertex group"); else - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Goal:", 160,120,150,20, &sb->defgoal, 0.0, 1.0, 10, 0, "Default Goal (vertex target position) value, when no Vertex Group used"); + uiDefBut(block, BUT, B_BAKE_CACHE_CHANGE, "(no group)", 160,120,130,20, NULL, 0.0, 0.0, 0, 0, "Vertex Group doesn't exist anymore"); + uiDefIconBut(block, BUT, B_SOFTBODY_DEL_VG, ICON_X, 290,120,20,20, 0, 0, 0, 0, 0, "Disable use of vertex group"); } - else { - uiDefButS(block, TOG, B_BAKE_CACHE_CHANGE, "W", 140,120,20,20, &sb->vertgroup, 0, 1, 0, 0, "Use control point weight values"); + else uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Goal:", 160,120,150,20, &sb->defgoal, 0.0, 1.0, 10, 0, "Default Goal (vertex target position) value, when no Vertex Group used"); - } - - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Stiff:", 10,100,150,20, &sb->goalspring, 0.0, 0.999, 10, 0, "Goal (vertex target position) spring stiffness"); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Damp:", 160,100,150,20, &sb->goalfrict , 0.0, 50.0, 10, 0, "Goal (vertex target position) friction"); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Min:", 10,80,150,20, &sb->mingoal, 0.0, 1.0, 10, 0, "Goal minimum, vertex group weights are scaled to match this range"); - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Max:", 160,80,150,20, &sb->maxgoal, 0.0, 1.0, 10, 0, "Goal maximum, vertex group weights are scaled to match this range"); } - uiBlockEndAlign(block); + else { + uiDefButS(block, TOG, B_BAKE_CACHE_CHANGE, "W", 140,120,20,20, &sb->vertgroup, 0, 1, 0, 0, "Use control point weight values"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Goal:", 160,120,150,20, &sb->defgoal, 0.0, 1.0, 10, 0, "Default Goal (vertex target position) value, when no Vertex Group used"); + } - /* EDGE SPRING STUFF */ - if(ob->type!=OB_SURF) { - uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, OB_SB_EDGES, B_BAKE_CACHE_CHANGE, "Use Edges", 10,50,90,20, softflag, 0, 0, 0, 0, "Use Edges as springs"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Stiff:", 10,100,150,20, &sb->goalspring, 0.0, 0.999, 10, 0, "Goal (vertex target position) spring stiffness"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Damp:", 160,100,150,20, &sb->goalfrict , 0.0, 50.0, 10, 0, "Goal (vertex target position) friction"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Min:", 10,80,150,20, &sb->mingoal, 0.0, 1.0, 10, 0, "Goal minimum, vertex group weights are scaled to match this range"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Max:", 160,80,150,20, &sb->maxgoal, 0.0, 1.0, 10, 0, "Goal maximum, vertex group weights are scaled to match this range"); + } + uiBlockEndAlign(block); + + /* EDGE SPRING STUFF */ + if(ob->type!=OB_SURF) { + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG, OB_SB_EDGES, B_BAKE_CACHE_CHANGE, "Use Edges", 10,50,90,20, softflag, 0, 0, 0, 0, "Use Edges as springs"); if (*softflag & OB_SB_EDGES){ uiDefButBitS(block, TOG, OB_SB_QUADS, B_BAKE_CACHE_CHANGE, "Stiff Quads", 110,50,90,20, softflag, 0, 0, 0, 0, "Adds diagonal springs on 4-gons"); uiDefButBitS(block, TOG, OB_SB_EDGECOLL, B_BAKE_CACHE_CHANGE, "CEdge", 220,50,45,20, softflag, 0, 0, 0, 0, "Edge collide too"); @@ -4185,23 +4238,180 @@ static void object_softbodies(Object *ob) uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Pull:", 10,30,75,20, &sb->inspring, 0.0, 0.999, 10, 0, "Edge spring stiffness when longer than rest length"); uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Push:", 85,30,75,20, &sb->inpush, 0.0, 0.999, 10, 0, "Edge spring stiffness when shorter than rest length"); uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Damp:", 160,30,70,20, &sb->infrict, 0.0, 50.0, 10, 0, "Edge spring friction"); - uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "SL:",250 ,30,60,20, &sb->springpreload, 0.0, 200.0, 10, 0, "Alter spring lenght to shrink/blow up (unit %) 0 to disable "); - + uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "SL:",250 ,30,60,20, &sb->springpreload, 0.0, 200.0, 10, 0, "Alter spring lenght to shrink/blow up (unit %) 0 to disable "); + uiDefButBitS(block, TOG,OB_SB_AERO_ANGLE,B_BAKE_CACHE_CHANGE, "N",10,10,20,20, softflag, 0, 0, 0, 0, "New aero(uses angle and length)"); uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "Aero:", 30,10,60,20, &sb->aeroedge, 0.00, 30000.0, 10, 0, "Make edges 'sail'"); - uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "Plas:", 90,10,60,20, &sb->plastic, 0.0, 100.0, 10, 0, "Permanent deform"); + uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "Plas:", 90,10,60,20, &sb->plastic, 0.0, 100.0, 10, 0, "Permanent deform"); if(ob->type==OB_MESH) { uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Be:", 150,10,80,20, &sb->secondspring, 0.0, 10.0, 10, 0, "Bending Stiffness"); if (*softflag & OB_SB_QUADS){ - uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Sh:", 230,10,80,20, &sb->shearstiff, 0.0, 1.0, 10, 0, "Shear Stiffness"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Sh:", 230,10,80,20, &sb->shearstiff, 0.0, 1.0, 10, 0, "Shear Stiffness"); } } else sb->secondspring = 0; uiDefBut(block, LABEL, 0, "",10,10,1,0, NULL, 0.0, 0, 0, 0, ""); /* tell UI we go to 10,10*/ } - uiBlockEndAlign(block); + uiBlockEndAlign(block); + } + } // fi (true)(G.rt != 0) + else{ + static char section = 0; + int l_top = 170, l_dy =21; + uiBlockBeginAlign(block); + uiDefButC(block, ROW, B_BAKE_CACHE_CHANGE, "Object", 10,l_top,100,20, §ion, 3.0, 0.0, 0, 0, "Object"); + uiDefButC(block, ROW, B_BAKE_CACHE_CHANGE, "Goal", 111,l_top,100,20, §ion, 3.0, 1.0, 0, 0, "Goals"); + uiDefButC(block, ROW, B_BAKE_CACHE_CHANGE, "Edges", 212,l_top,100,20, §ion, 3.0, 2.0, 0, 0, "Edges"); + uiBlockEndAlign(block); + switch (section){ + case 0: + { + int _loc_group; + uiBlockBeginAlign(block); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Friction:", 10, l_top - l_dy,150,20, &sb->mediafrict, 0.0, 50.0, 10, 0, "General media friction for point movements"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Mass:", 160, l_top - l_dy,150,20, &sb->nodemass , 0.001, 50000.0, 10, 0, str); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Grav:", 10,l_top - 2*l_dy,150,20, &sb->grav , -10.0, 10.0, 10, 0, "Apply gravitation to point movement"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Speed:", 160,l_top - 2*l_dy,150,20, &sb->physics_speed , 0.01, 100.0, 10, 0, "Tweak timing for physics to control frequency and speed"); + uiBlockEndAlign(block); + + uiDefBut(block, LABEL, 0, "Mass Vertex Group", 10, l_top - 4*l_dy , 150,20, NULL, 0.0, 0, 0, 0, ""); + uiBlockBeginAlign(block); + /* but i like doing the spinner */ + menustr= get_vertexgroup_menustr(ob); + defCount=BLI_countlist(&ob->defbase); + if(defCount==0) _loc_group= 0; + if(!sb->msg_lock){ + uiDefButS(block, MENU, B_SOFTBODY_UP_GRMASS, menustr,10,l_top - 5*l_dy,20,20, &sb->msg_value, 0, defCount, 0, 0, "Browses available vertex groups"); + } + /* but defined by some magic */ + but= uiDefBut(block, TEX, B_BAKE_CACHE_CHANGE, "VG:", 30, l_top - 5*l_dy,260,20, &sb->namedVG_Mass, 0, 24, 0, 0, "Name of Vertex Group defining 'target' points"); + uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob); + uiDefIconBut(block, BUT, B_SOFTBODY_DEL_VGMASS, ICON_X, 290,l_top - 5*l_dy,20,20, 0, 0, 0, 0, 0, "Disable use of vertex group"); + MEM_freeN (menustr); + uiBlockEndAlign(block); + + if(_loc_group) { + bDeformGroup *defGroup = BLI_findlink(&ob->defbase, _loc_group-1); + if(defGroup){ + strncpy((char*)&sb->namedVG_Mass,defGroup->name,32); // ugly type casting and size assumtion + } + } + + + // ll++; + break; + } + case 1: + { + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG, OB_SB_GOAL, B_BAKE_CACHE_CHANGE, "Use Goal", 10,l_top - l_dy,150,20, softflag, 0, 0, 0, 0, "Define forces for vertices to stick to animated position"); + if (*softflag & OB_SB_GOAL){ + if(ob->type==OB_MESH) { + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Goal:", 160,l_top - l_dy,150,20, &sb->defgoal, 0.0, 1.0, 10, 0, "Default Goal (vertex target position) value, when no Vertex Group used"); + } + else { + uiDefButS(block, TOG, B_BAKE_CACHE_CHANGE, "W", 140,l_top - l_dy,20,20, &sb->vertgroup, 0, 1, 0, 0, "Use control point weight values"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Goal:", 160,l_top - l_dy,150,20, &sb->defgoal, 0.0, 1.0, 10, 0, "Default Goal (vertex target position) value, when no Vertex Group used"); + } + + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Stiff:", 10,l_top - 2*l_dy,150,20, &sb->goalspring, 0.0, 0.999, 10, 0, "Goal (vertex target position) spring stiffness"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Damp:", 160,l_top - 2*l_dy,150,20, &sb->goalfrict , 0.0, 50.0, 10, 0, "Goal (vertex target position) friction"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Min:", 10,l_top - 3*l_dy,150,20, &sb->mingoal, 0.0, 1.0, 10, 0, "Goal minimum, vertex group weights are scaled to match this range"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "G Max:", 160,l_top - 3*l_dy,150,20, &sb->maxgoal, 0.0, 1.0, 10, 0, "Goal maximum, vertex group weights are scaled to match this range"); + + if(ob->type==OB_MESH) { + int ll = 4; + /* rather do this loading old files */ + if(sb->vertgroup) { + bDeformGroup *defGroup = BLI_findlink(&ob->defbase, sb->vertgroup-1); + if(defGroup){ + strncpy((char*)&sb->namedVG_Softgoal,defGroup->name,32); // ugly type casting and size assumtion + } + } + + /*this would be the 'offical' way to do */ + + /* but i like doing the spinner */ + menustr= get_vertexgroup_menustr(ob); + defCount=BLI_countlist(&ob->defbase); + if(defCount==0) sb->vertgroup= 0; + uiDefButS(block, MENU, B_BAKE_CACHE_CHANGE, menustr,10,l_top - ll*l_dy,20,20, &sb->vertgroup, 0, defCount, 0, 0, "Browses available vertex groups"); + MEM_freeN (menustr); + + /* but defined by some magic */ + but= uiDefBut(block, TEX, B_BAKE_CACHE_CHANGE, "VG:", 30, l_top - ll*l_dy,260,20, &sb->namedVG_Softgoal, 0, 24, 0, 0, "Name of Vertex Group defining 'target' points"); + uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob); + + //if(sb->vertgroup) { + uiDefIconBut(block, BUT, B_SOFTBODY_DEL_VG, ICON_X, 290,l_top - ll*l_dy,20,20, 0, 0, 0, 0, 0, "Disable use of vertex group"); + //} + + + } + } + uiBlockEndAlign(block); + break; + } + case 2: + { + int _loc_group; + if(ob->type!=OB_SURF) { + uiDefButBitS(block, TOG, OB_SB_EDGES, B_BAKE_CACHE_CHANGE, "Use Edges", 10,l_top - l_dy,90,20, softflag, 0, 0, 0, 0, "Use Edges as springs"); + if (*softflag & OB_SB_EDGES){ + uiBlockBeginAlign(block); + + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Pull:", 10,l_top - 2*l_dy,100,20, &sb->inspring, 0.0, 0.999, 10, 0, "Edge spring stiffness when longer than rest length"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Push:", 111,l_top - 2*l_dy,100,20, &sb->inpush, 0.0, 0.999, 10, 0, "Edge spring stiffness when shorter than rest length"); + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Damp:", 212,l_top - 2*l_dy,100,20, &sb->infrict, 0.0, 50.0, 10, 0, "Edge spring friction"); + + uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "Plas:", 10,l_top - 3*l_dy,100,20, &sb->plastic, 0.0, 100.0, 10, 0, "Permanent deform"); + uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "SL:", 111,l_top - 3*l_dy,100,20, &sb->springpreload, 0.0, 200.0, 10, 0, "Alter spring lenght to shrink/blow up (unit %) 0 to disable "); + if(ob->type==OB_MESH) { + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Be:", 212,l_top - 3*l_dy,100,20, &sb->secondspring, 0.0, 10.0, 10, 0, "Bending Stiffness"); + } +// uiBlockEndAlign(block); +// uiBlockBeginAlign(block); + /* but i like doing the spinner */ + menustr= get_vertexgroup_menustr(ob); + defCount=BLI_countlist(&ob->defbase); + if(defCount==0) _loc_group= 0; + if(!sb->msg_lock){ + uiDefButS(block, MENU, B_SOFTBODY_UP_GRSPRING, menustr,10,l_top - 4*l_dy,20,20, &sb->msg_value, 0, defCount, 0, 0, "Browses available vertex groups"); + } + /* but defined by some magic */ + but= uiDefBut(block, TEX, B_BAKE_CACHE_CHANGE, "VG:", 30, l_top - 4*l_dy,260,20, &sb->namedVG_Spring_K, 0, 24, 0, 0, "Name of Vertex Group defining 'target' points"); + uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob); + uiDefIconBut(block, BUT, B_SOFTBODY_DEL_VGSPRING, ICON_X, 290,l_top - 4*l_dy,20,20, 0, 0, 0, 0, 0, "Disable use of vertex group"); + MEM_freeN (menustr); + uiBlockEndAlign(block); + + + + + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG, OB_SB_QUADS, B_BAKE_CACHE_CHANGE, "Stiff Quads", 10,l_top - 5*l_dy,100,20, softflag, 0, 0, 0, 0, "Adds diagonal springs on 4-gons"); + if(ob->type==OB_MESH) { + if (*softflag & OB_SB_QUADS){ + uiDefButF(block, NUM, B_BAKE_CACHE_CHANGE, "Sh:", 111,l_top - 5*l_dy,100,20, &sb->shearstiff, 0.0, 1.0, 10, 0, "Shear Stiffness"); + } + } + else sb->secondspring = 0; + uiBlockEndAlign(block); + + uiBlockBeginAlign(block); + uiDefButBitS(block, TOG,OB_SB_AERO_ANGLE,B_BAKE_CACHE_CHANGE, "N",10,l_top - 6*l_dy,20,20, softflag, 0, 0, 0, 0, "New aero(uses angle and length)"); + uiDefButS(block, NUM, B_BAKE_CACHE_CHANGE, "Aero:", 30,l_top - 6*l_dy,80,20, &sb->aeroedge, 0.00, 30000.0, 10, 0, "Make edges 'sail'"); + uiBlockEndAlign(block); + + uiDefButBitS(block, TOG, OB_SB_EDGECOLL, B_BAKE_CACHE_CHANGE, "Collide Edges", 111,l_top - 6*l_dy,100,20, softflag, 0, 0, 0, 0, "Edge collide too"); + uiDefButBitS(block, TOG, OB_SB_FACECOLL, B_BAKE_CACHE_CHANGE, "Collide Faces", 212,l_top - 6*l_dy,100,20, softflag, 0, 0, 0, 0, "Faces collide too SLOOOOOW warning "); + + } + } + break; + } } - //} + } } uiBlockEndAlign(block); } From 434a994f30705a86bf429588138617d89fed7c1f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 25 Jun 2009 01:37:19 +0000 Subject: [PATCH 083/512] Mathutils quat1 * quat2 was broken, returned quat1*quat1 instead. --- source/blender/python/api2_2x/quat.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/blender/python/api2_2x/quat.c b/source/blender/python/api2_2x/quat.c index 585b76a34dc..516fe210cc4 100644 --- a/source/blender/python/api2_2x/quat.c +++ b/source/blender/python/api2_2x/quat.c @@ -417,7 +417,6 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) { int x; float quat[4], scalar; - double dot = 0.0f; QuaternionObject *quat1 = NULL, *quat2 = NULL; PyObject *f = NULL; VectorObject *vec = NULL; @@ -466,10 +465,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) return quat_rotation((PyObject*)quat1, (PyObject*)vec); } }else{ //QUAT * QUAT (dot product) - for(x = 0; x < 4; x++) { - dot += quat1->quat[x] * quat1->quat[x]; - } - return PyFloat_FromDouble(dot); + return PyFloat_FromDouble(QuatDot(quat1->quat, quat2->quat)); } } From a50be876d37d4add34d809ebe6546f0097c17761 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 25 Jun 2009 05:05:35 +0000 Subject: [PATCH 084/512] NLA SoC: Quick crash fix Pointer for accessing settings of active NLA-strip was not getting set. The code for this was accidentally removed during an earlier commit to clean up the poll callbacks here. --- source/blender/editors/space_nla/nla_buttons.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 0d5cdf80830..a25f741c193 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -207,6 +207,9 @@ static void nla_panel_properties(const bContext *C, Panel *pa) uiLayout *column, *row, *subcol; uiBlock *block; + if (!nla_panel_context(C, NULL, &strip_ptr)) + return; + block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); @@ -259,10 +262,6 @@ static void nla_panel_actclip(const bContext *C, Panel *pa) if (!nla_panel_context(C, NULL, &strip_ptr)) return; - // XXX FIXME: move this check into a poll callback - if (RNA_enum_get(&strip_ptr, "type") != NLASTRIP_TYPE_CLIP) - return; - block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); From deffe4a315f30a8f8a2a2e2f23f16cfcb0ac5f18 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 25 Jun 2009 10:52:09 +0000 Subject: [PATCH 085/512] NLA SoC: Armature Drawing Code Fixes * Compiling broke for some users on this file due to my scaling-fixes commit. Dunno why this didn't give any errors here (silly compiler!) * Restored code to make ghost poses (and supposedly paths) work again. This doesn't totally seem to be the case yet though. --- .../editors/space_view3d/drawarmature.c | 58 ++++++++----------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 68a9bf3f555..a4332ea1709 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -37,6 +37,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_armature_types.h" #include "DNA_constraint_types.h" @@ -52,6 +53,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_armature.h" #include "BKE_constraint.h" @@ -61,6 +63,7 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_modifier.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_utildefines.h" @@ -2019,10 +2022,9 @@ static void draw_ebones(View3D *v3d, RegionView3D *rv3d, Object *ob, int dt) */ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob) { + AnimData *adt= BKE_animdata_from_id(&ob->id); bArmature *arm= ob->data; bPoseChannel *pchan; - // bAction *act; // XXX old animsys - watch it! - // bActionChannel *achan; ActKeyColumn *ak; ListBase keys; float *fp, *fp_start; @@ -2168,14 +2170,11 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec /* build list of all keyframes in active action for pchan */ keys.first = keys.last = NULL; - #if 0 // XXX old animation system - act= ob->action; - if (act) { - achan= get_action_channel(act, pchan->name); - if (achan) - ipo_to_keylist(achan->ipo, &keys, NULL, NULL); + if (adt) { + bActionGroup *agrp= action_groups_find_named(adt->action, pchan->name); + if (agrp) + agroup_to_keylist(agrp, &keys, NULL, NULL); } - #endif // XXX old animation system /* Draw slightly-larger yellow dots at each keyframe */ UI_ThemeColor(TH_VERTEX_SELECT); @@ -2254,6 +2253,7 @@ static void ghost_poses_tag_unselected(Object *ob, short unset) static void draw_ghost_poses_range(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base) { Object *ob= base->object; + AnimData *adt= BKE_animdata_from_id(&ob->id); bArmature *arm= ob->data; bPose *posen, *poseo; float start, end, stepsize, range, colfac; @@ -2290,7 +2290,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, RegionView3D *rv3d colfac = (end - (float)CFRA) / range; UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128-(int)(120.0*sqrt(colfac))); - //do_all_pose_actions(scene, ob); // XXX old animation system + BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE); } @@ -2315,7 +2315,8 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, RegionView3D *rv3d static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base) { Object *ob= base->object; - bAction *act= ob->action; // XXX old animsys stuff... watch it! + AnimData *adt= BKE_animdata_from_id(&ob->id); + bAction *act= (adt) ? adt->action : NULL; bArmature *arm= ob->data; bPose *posen, *poseo; ListBase keys= {NULL, NULL}; @@ -2366,7 +2367,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, CFRA= (int)ak->cfra; - //do_all_pose_actions(scene, ob); // XXX old animation system + BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE); } @@ -2391,38 +2392,27 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base) { Object *ob= base->object; + AnimData *adt= BKE_animdata_from_id(&ob->id); bArmature *arm= ob->data; bPose *posen, *poseo; - //bActionStrip *strip; float cur, start, end, stepsize, range, colfac, actframe, ctime; - int cfrao, maptime, flago; + int cfrao, flago; /* pre conditions, get an action with sufficient frames */ - //if (ob->action==NULL) - // return; + if ELEM(NULL, adt, adt->action) + return; - calc_action_range(ob->action, &start, &end, 0); + calc_action_range(adt->action, &start, &end, 0); if (start == end) return; stepsize= (float)(arm->ghostsize); range= (float)(arm->ghostep)*stepsize + 0.5f; /* plus half to make the for loop end correct */ -#if 0 // XXX old animation system - /* we only map time for armature when an active strip exists */ - for (strip=ob->nlastrips.first; strip; strip=strip->next) - if (strip->flag & ACTSTRIP_ACTIVE) - break; -#endif // XXX old animsys - - //maptime= (strip!=NULL); - maptime= 0; - /* store values */ ob->flag &= ~OB_POSEMODE; cfrao= CFRA; - if (maptime) actframe= get_action_frame(ob, (float)CFRA); - else actframe= (float)CFRA; + actframe= BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); flago= arm->flag; arm->flag &= ~(ARM_DRAWNAMES|ARM_DRAWAXES); @@ -2444,11 +2434,10 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base /* only within action range */ if (actframe+ctime >= start && actframe+ctime <= end) { - if (maptime) CFRA= (int)get_action_frame_inv(ob, actframe+ctime); - else CFRA= (int)floor(actframe+ctime); + CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe+ctime, 1); if (CFRA != cfrao) { - //do_all_pose_actions(scene, ob); // xxx old animation system crap + BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE); } @@ -2460,11 +2449,10 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base /* only within action range */ if ((actframe-ctime >= start) && (actframe-ctime <= end)) { - if (maptime) CFRA= (int)get_action_frame_inv(ob, actframe-ctime); - else CFRA= (int)floor(actframe-ctime); + CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe-ctime, 1); if (CFRA != cfrao) { - //do_all_pose_actions(scene, ob); // XXX old animation system crap... + BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE); } From 6510da4ce2c7d3ffef9d95d7adedd31f59c1fc4b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 25 Jun 2009 12:30:49 +0000 Subject: [PATCH 086/512] NLA SoC: Fix transforms for transition strips. --- .../editors/transform/transform_conversions.c | 68 ++++++++++--------- .../editors/transform/transform_generics.c | 16 ++++- source/blender/makesrna/intern/rna_nla.c | 49 ++++++++++--- 3 files changed, 88 insertions(+), 45 deletions(-) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 08ce1b1d554..3bc950d5863 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2620,9 +2620,12 @@ static void createTransNlaData(bContext *C, TransInfo *t) /* only consider selected strips */ for (strip= nlt->strips.first; strip; strip= strip->next) { // TODO: we can make strips have handles later on... - if (strip->flag & NLASTRIP_FLAG_SELECT) { - if (FrameOnMouseSide(side, strip->start, (float)CFRA)) count++; - if (FrameOnMouseSide(side, strip->end, (float)CFRA)) count++; + /* transition strips can't get directly transformed */ + if (strip->type != NLASTRIP_TYPE_TRANSITION) { + if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) count++; + if (FrameOnMouseSide(side, strip->end, (float)CFRA)) count++; + } } } } @@ -2652,34 +2655,37 @@ static void createTransNlaData(bContext *C, TransInfo *t) /* only consider selected strips */ for (strip= nlt->strips.first; strip; strip= strip->next) { // TODO: we can make strips have handles later on... - if (strip->flag & NLASTRIP_FLAG_SELECT) { - if (FrameOnMouseSide(side, strip->start, (float)CFRA)) - { - /* init the 'extra' data for NLA strip handles first */ - tdn->strip= strip; - tdn->val= strip->start; - tdn->handle= 0; - - /* now, link the transform data up to this data */ - td->val= &tdn->val; - td->ival= tdn->val; - td->extra= tdn; - td++; - tdn++; - } - if (FrameOnMouseSide(side, strip->end, (float)CFRA)) - { - /* init the 'extra' data for NLA strip handles first */ - tdn->strip= strip; - tdn->val= strip->end; - tdn->handle= 1; - - /* now, link the transform data up to this data */ - td->val= &tdn->val; - td->ival= tdn->val; - td->extra= tdn; - td++; - tdn++; + /* transition strips can't get directly transformed */ + if (strip->type != NLASTRIP_TYPE_TRANSITION) { + if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) + { + /* init the 'extra' data for NLA strip handles first */ + tdn->strip= strip; + tdn->val= strip->start; + tdn->handle= 0; + + /* now, link the transform data up to this data */ + td->val= &tdn->val; + td->ival= tdn->val; + td->extra= tdn; + td++; + tdn++; + } + if (FrameOnMouseSide(side, strip->end, (float)CFRA)) + { + /* init the 'extra' data for NLA strip handles first */ + tdn->strip= strip; + tdn->val= strip->end; + tdn->handle= 1; + + /* now, link the transform data up to this data */ + td->val= &tdn->val; + td->ival= tdn->val; + td->extra= tdn; + td++; + tdn++; + } } } } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index db7c6d6ee99..1474a30fbed 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -358,11 +358,21 @@ void recalcData(TransInfo *t) * ones (i.e. don't go through RNA), as we get some artifacts... */ if (t->state == TRANS_CANCEL) { - /* write the value set by the transform tools to the appropriate property using RNA */ - if (tdn->handle) + /* clear the values by directly overwriting the originals, but also need to restore + * endpoints of neighboring transition-strips + */ + if (tdn->handle) { strip->end= tdn->val; - else + + if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) + strip->next->start= tdn->val; + } + else { strip->start= tdn->val; + + if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) + strip->prev->end= tdn->val; + } } else { PointerRNA strip_ptr; diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index dacd257dc17..84a84492ea3 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -40,17 +40,30 @@ #include #include +/* temp constant defined for these funcs only... */ +#define NLASTRIP_MIN_LEN_THRESH 0.1f + static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; /* clamp value to lie within valid limits * - cannot start past the end of the strip + some flexibility threshold - * - cannot start before the previous strip (if present) ends + * - cannot start before the previous strip (if present) ends + * -> but if it was a transition, we could go up to the start of the strip + some flexibility threshold + * as long as we re-adjust the transition afterwards * - minimum frame is -MAXFRAME so that we don't get clipping on frame 0 */ if (data->prev) { - CLAMP(value, data->prev->end, data->end-0.1f); + if (data->prev->type == NLASTRIP_TYPE_TRANSITION) { + CLAMP(value, data->prev->start+NLASTRIP_MIN_LEN_THRESH, data->end-NLASTRIP_MIN_LEN_THRESH); + + /* readjust the transition to stick to the endpoints of the action-clips */ + data->prev->end= value; + } + else { + CLAMP(value, data->prev->end, data->end-NLASTRIP_MIN_LEN_THRESH); + } } else { CLAMP(value, -MAXFRAME, data->end); @@ -61,28 +74,42 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; - float len, actlen; /* clamp value to lie within valid limits * - must not have zero or negative length strip, so cannot start before the first frame * + some minimum-strip-length threshold * - cannot end later than the start of the next strip (if present) + * -> but if it was a transition, we could go up to the start of the end - some flexibility threshold + * as long as we re-adjust the transition afterwards */ if (data->next) { - CLAMP(value, data->start+0.1f, data->next->start); + if (data->next->type == NLASTRIP_TYPE_TRANSITION) { + CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, data->next->end-NLASTRIP_MIN_LEN_THRESH); + + /* readjust the transition to stick to the endpoints of the action-clips */ + data->next->start= value; + } + else { + CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, data->next->start); + } } else { - CLAMP(value, data->start+0.1f, MAXFRAME); + CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, MAXFRAME); } data->end= value; - /* calculate the lengths the strip and its action (if applicable) */ - len= data->end - data->start; - actlen= data->actend - data->actstart; - if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; - /* now, adjust the 'scale' setting to reflect this (so that this change can be valid) */ - data->scale= len / ((actlen) * data->repeat); + /* calculate the lengths the strip and its action (if applicable) */ + if (data->type == NLASTRIP_TYPE_CLIP) { + float len, actlen; + + len= data->end - data->start; + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + + /* now, adjust the 'scale' setting to reflect this (so that this change can be valid) */ + data->scale= len / ((actlen) * data->repeat); + } } static void rna_NlaStrip_scale_set(PointerRNA *ptr, float value) From 8cda8abefe31292c3647d7e22f1cefed84b5127a Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 25 Jun 2009 12:32:55 +0000 Subject: [PATCH 087/512] Bugfix, testing venom's lab .blends Using LightGroups override for material doesn't work for preview renders. Code didn't correctly return correct light listbase then, crashing Blender on preview render. --- source/blender/render/intern/source/shadeoutput.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 130cda9f107..2fbd93df0ce 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -61,12 +61,14 @@ extern struct Render R; static ListBase *get_lights(ShadeInput *shi) { + if(R.r.scemode & R_PREVIEWBUTS) + return &R.lights; if(shi->light_override) return &shi->light_override->gobject; - else if(shi->mat && shi->mat->group) + if(shi->mat && shi->mat->group) return &shi->mat->group->gobject; - else - return &R.lights; + + return &R.lights; } #if 0 From 23f48b8bb1154f6d2571d6c1c328e64d1e58a8b0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Jun 2009 02:22:53 +0000 Subject: [PATCH 088/512] using the edge length to weight the vertex blue wasnt wokring very well (removed) --- release/scripts/vertexpaint_selfshadow_ao.py | 71 ++++++++++---------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/release/scripts/vertexpaint_selfshadow_ao.py b/release/scripts/vertexpaint_selfshadow_ao.py index 54c67fd27e2..3554e016f79 100644 --- a/release/scripts/vertexpaint_selfshadow_ao.py +++ b/release/scripts/vertexpaint_selfshadow_ao.py @@ -43,7 +43,7 @@ import bpy import BPyMesh -def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY): +def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_STRENGTH, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY): Window.WaitCursor(1) Ang= Mathutils.AngleBetweenVecs @@ -83,32 +83,34 @@ def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PRE if vert_tone_count[i]: vert_tone[i] = vert_tone[i] / vert_tone_count[i] + + # Below we use edges to blur along so the edges need counting, not the faces + vert_tone_count= [0] * len(me.verts) + for ed in me.edges: + vert_tone_count[ed.v1.index] += 1 + vert_tone_count[ed.v2.index] += 1 - # BLUR TONE - edge_lengths= [ ed.length for ed in me.edges] + + # Blur tone + blur = PREF_BLUR_STRENGTH + blur_inv = 1.0 - PREF_BLUR_STRENGTH for i in xrange(PREF_BLUR_ITERATIONS): + + # backup the original tones orig_vert_tone= list(vert_tone) - for ii, ed in enumerate(me.edges): + + for ed in me.edges: + i1= ed.v1.index i2= ed.v2.index - l= edge_lengths[ii] + + val1= (orig_vert_tone[i2]*blur) + (orig_vert_tone[i1]*blur_inv) + val2= (orig_vert_tone[i1]*blur) + (orig_vert_tone[i2]*blur_inv) - f=1.0 - if l > PREF_MIN_EDLEN and l < PREF_BLUR_RADIUS: - f= l/PREF_BLUR_RADIUS - - len_vert_tone_list_i1 = vert_tone_count[i1] - len_vert_tone_list_i2 = vert_tone_count[i2] - - if not len_vert_tone_list_i1: len_vert_tone_list_i1=1 - if not len_vert_tone_list_i2: len_vert_tone_list_i2=1 - - val1= (orig_vert_tone[i2]/len_vert_tone_list_i1)/ f - val2= (orig_vert_tone[i1]/len_vert_tone_list_i2)/ f - - vert_tone[i1]+= val1 - vert_tone[i2]+= val2 + # Apply the ton divided by the number of faces connected + vert_tone[i1]+= val1 / max(vert_tone_count[i1], 1) + vert_tone[i2]+= val2 / max(vert_tone_count[i2], 1) min_tone= min(vert_tone) @@ -144,21 +146,19 @@ def main(): me= ob.getData(mesh=1) - PREF_BLUR_ITERATIONS= Draw.Create(1) - PREF_BLUR_RADIUS= Draw.Create(0.05) - PREF_MIN_EDLEN= Draw.Create(0.01) + PREF_BLUR_ITERATIONS= Draw.Create(1) + PREF_BLUR_STRENGTH= Draw.Create(0.5) PREF_CLAMP_CONCAVE= Draw.Create(90) PREF_CLAMP_CONVEX= Draw.Create(20) PREF_SHADOW_ONLY= Draw.Create(0) PREF_SEL_ONLY= Draw.Create(0) pup_block= [\ 'Post AO Blur',\ - (' Iterations:', PREF_BLUR_ITERATIONS, 0, 40, 'Number times to blur the colors. (higher blurs more)'),\ - (' Blur Radius:', PREF_BLUR_RADIUS, 0.01, 40.0, 'How much distance effects blur transfur (higher blurs more).'),\ - (' Min EdgeLen:', PREF_MIN_EDLEN, 0.00001, 1.0, 'Minimim edge length to blur (very low values can cause errors).'),\ + ('Strength:', PREF_BLUR_STRENGTH, 0, 1, 'Blur strength per iteration'),\ + ('Iterations:', PREF_BLUR_ITERATIONS, 0, 40, 'Number times to blur the colors. (higher blurs more)'),\ 'Angle Clipping',\ - (' Highlight Angle:', PREF_CLAMP_CONVEX, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ - (' Shadow Angle:', PREF_CLAMP_CONCAVE, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ + ('Highlight Angle:', PREF_CLAMP_CONVEX, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ + ('Shadow Angle:', PREF_CLAMP_CONCAVE, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ ('Shadow Only', PREF_SHADOW_ONLY, 'Dont calculate highlights for convex areas.'),\ ('Sel Faces Only', PREF_SEL_ONLY, 'Only apply to UV/Face selected faces (mix vpain/uvface select).'),\ ] @@ -166,19 +166,16 @@ def main(): if not Draw.PupBlock('SelfShadow...', pup_block): return - PREF_BLUR_ITERATIONS= PREF_BLUR_ITERATIONS.val - PREF_BLUR_RADIUS= PREF_BLUR_RADIUS.val - PREF_MIN_EDLEN= PREF_MIN_EDLEN.val - PREF_CLAMP_CONCAVE= PREF_CLAMP_CONCAVE.val - PREF_CLAMP_CONVEX= PREF_CLAMP_CONVEX.val - PREF_SHADOW_ONLY= PREF_SHADOW_ONLY.val - PREF_SEL_ONLY= PREF_SEL_ONLY.val - if not me.vertexColors: me.vertexColors= 1 t= sys.time() - vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY) + vertexFakeAO(me, PREF_BLUR_ITERATIONS.val, \ + PREF_BLUR_STRENGTH.val, \ + PREF_CLAMP_CONCAVE.val, \ + PREF_CLAMP_CONVEX.val, \ + PREF_SHADOW_ONLY.val, \ + PREF_SEL_ONLY.val) if ob.modifiers: me.update() From 6b9e817032b3d2b78a3724d58fabd8c65b6dc49d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Jun 2009 02:49:47 +0000 Subject: [PATCH 089/512] bugfix [#18949] bvh import does not do single rigid bodies these BVH files are not that common but may as well support it. --- release/scripts/bvh_import.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/release/scripts/bvh_import.py b/release/scripts/bvh_import.py index 5cdd8a71231..4134503c511 100644 --- a/release/scripts/bvh_import.py +++ b/release/scripts/bvh_import.py @@ -277,12 +277,17 @@ def read_bvh(file_path, GLOBAL_SCALE=1.0): for bvh_node in bvh_nodes.itervalues(): if not bvh_node.rest_tail_world: - if len(bvh_node.children)==1: + if len(bvh_node.children)==0: + # could just fail here, but rare BVH files have childless nodes + bvh_node.rest_tail_world = Vector(bvh_node.rest_head_world) + bvh_node.rest_tail_local = Vector(bvh_node.rest_head_local) + elif len(bvh_node.children)==1: bvh_node.rest_tail_world= Vector(bvh_node.children[0].rest_head_world) bvh_node.rest_tail_local= Vector(bvh_node.children[0].rest_head_local) else: - if not bvh_node.children: - raise 'error, bvh node has no end and no children. bad file' + # allow this, see above + #if not bvh_node.children: + # raise 'error, bvh node has no end and no children. bad file' # Removed temp for now rest_tail_world= Vector(0,0,0) From 6f87d03b3c9724689f8bc10c609f5e87a6bafdca Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Fri, 26 Jun 2009 07:32:24 +0000 Subject: [PATCH 090/512] == Sequencer == This fixes several issues with the Speed Control Effect: * IPO curve-deletion resulted in non-working effect * easy retiming only allowed enlarging of strips, now shrinking is also possible (easy retiming: use the right display handle of input strip and shrink or enlarge, will make the speed of the strip exactly fit the effect strip's length) * frames after end-of-display of input strips can now be accessed (which is necessary for fix #2) => just use easy retiming from now on, it's fun :) --- source/blender/include/BSE_sequence.h | 6 +- source/blender/src/buttons_scene.c | 7 +- source/blender/src/editseq.c | 2 +- source/blender/src/seqeffects.c | 24 ++-- source/blender/src/sequence.c | 163 +++++++++++++++----------- 5 files changed, 111 insertions(+), 91 deletions(-) diff --git a/source/blender/include/BSE_sequence.h b/source/blender/include/BSE_sequence.h index 33a43e1a458..3973bf8fcdc 100644 --- a/source/blender/include/BSE_sequence.h +++ b/source/blender/include/BSE_sequence.h @@ -66,8 +66,10 @@ char *give_seqname_by_type(int type); char *give_seqname(struct Sequence *seq); int evaluate_seq_frame(int cfra); -struct StripElem *give_stripelem(struct Sequence *seq, int cfra); -struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra); +struct StripElem *give_stripelem(struct Sequence *seq, int cfra, + int in_display_range); +struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra, + int in_display_range); struct ImBuf *give_ibuf_seq(int rectx, int recty, int cfra, int chansel, int render_size); /* chansel: render this channel. Default=0 (renders end result)*/ diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index accab4a0970..45bdaf15499 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -767,7 +767,7 @@ static void seq_panel_editing() if(last_seq->type==SEQ_IMAGE) { if (last_seq->len > 1) { /* CURRENT */ - StripElem * se= give_stripelem(last_seq, CFRA); + StripElem * se= give_stripelem(last_seq, CFRA, TRUE); StripElem * last; /* FIRST AND LAST */ @@ -809,7 +809,8 @@ static void seq_panel_editing() } } else if(last_seq->type==SEQ_SCENE) { - TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra)); + TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra), + TRUE); if(se && last_seq->scene) { sprintf(str, "First: %d\nLast: %d\nCur: %d\n", last_seq->sfra+se->nr, last_seq->sfra, last_seq->sfra+last_seq->len-1); } @@ -882,7 +883,7 @@ static void seq_panel_input() cfra = last_seq->enddisp - 1; } - se = give_stripelem(last_seq, cfra); + se = give_stripelem(last_seq, cfra, TRUE); if (se) { uiDefBut(block, TEX, diff --git a/source/blender/src/editseq.c b/source/blender/src/editseq.c index 603a0e6b056..9ac82ed08c9 100644 --- a/source/blender/src/editseq.c +++ b/source/blender/src/editseq.c @@ -3720,7 +3720,7 @@ void seq_separate_images(void) while (cfra < frame_end) { /* new seq */ - se = give_stripelem(seq, cfra); + se = give_stripelem(seq, cfra, TRUE); seq_new= alloc_sequence(((Editing *)G.scene->ed)->seqbasep, start_ofs, seq->machine); seq_new->type= SEQ_IMAGE; diff --git a/source/blender/src/seqeffects.c b/source/blender/src/seqeffects.c index 1bffe25164c..2e339f433c3 100644 --- a/source/blender/src/seqeffects.c +++ b/source/blender/src/seqeffects.c @@ -32,6 +32,7 @@ #include "MEM_guardedalloc.h" #include "PIL_dynlib.h" +#include "DNA_ipo_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" @@ -2805,20 +2806,11 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force) /* if there is no IPO, try to make retiming easy by stretching the strip */ - if (!seq->ipo && seq->seq1 && seq->seq1->enddisp != seq->seq1->start + if ((!seq->ipo || !seq->ipo->curve.first) && + seq->seq1 && seq->seq1->enddisp != seq->seq1->start && seq->seq1->len != 0) { fallback_fac = (float) seq->seq1->len / (float) (seq->seq1->enddisp - seq->seq1->start); - /* FIXME: this strip stretching gets screwed by stripdata - handling one layer up. - - So it currently works by enlarging, never by shrinking! - - (IPOs still work, if used correctly) - */ - if (fallback_fac > 1.0) { - fallback_fac = 1.0; - } } if ((v->flags & SEQ_SPEED_INTEGRATE) != 0) { @@ -2828,7 +2820,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force) v->lastValidFrame = 0; for (cfra = 1; cfra < v->length; cfra++) { - if(seq->ipo) { + if(seq->ipo && seq->ipo->curve.first) { if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) { ctime = frame_to_float(seq->startdisp + cfra); @@ -2848,7 +2840,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force) cursor += seq->facf0; - if (cursor >= v->length) { + if (cursor >= seq->seq1->len) { v->frameMap[cfra] = v->length - 1; } else { v->frameMap[cfra] = cursor; @@ -2858,7 +2850,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force) } else { v->lastValidFrame = 0; for (cfra = 0; cfra < v->length; cfra++) { - if(seq->ipo) { + if(seq->ipo && seq->ipo->curve.first) { if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) { ctime = frame_to_float(seq->startdisp + cfra); @@ -2876,11 +2868,11 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force) if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) { seq->facf0 *= v->length; } - if (!seq->ipo) { + if ((!seq->ipo || !seq->ipo->curve.first)) { seq->facf0 = (float) cfra * fallback_fac; } seq->facf0 *= v->globalSpeed; - if (seq->facf0 >= v->length) { + if (seq->facf0 >= seq->seq1->len) { seq->facf0 = v->length - 1; } else { v->lastValidFrame = cfra; diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 482654de7ca..2eea7fe9d0f 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -838,11 +838,13 @@ static void do_effect(int cfra, Sequence *seq, TStripElem * se) se->ibuf); } -static int give_stripelem_index(Sequence *seq, int cfra) +static int give_stripelem_index(Sequence *seq, int cfra, int in_display_range) { int nr; - if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1; + if (in_display_range) { + if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1; + } if(seq->len == 0) return -1; if(seq->flag&SEQ_REVERSE_FRAMES) { /*reverse frame in this sequence */ @@ -872,7 +874,7 @@ static TStripElem* alloc_tstripdata(int len, const char * name) return se; } -TStripElem *give_tstripelem(Sequence *seq, int cfra) +TStripElem *give_tstripelem(Sequence *seq, int cfra, int in_display_range) { TStripElem *se; int nr; @@ -882,7 +884,7 @@ TStripElem *give_tstripelem(Sequence *seq, int cfra) se = seq->strip->tstripdata = alloc_tstripdata(seq->len, "tstripelems"); } - nr = give_stripelem_index(seq, cfra); + nr = give_stripelem_index(seq, cfra, in_display_range); if (nr == -1) return 0; if (se == 0) return 0; @@ -943,13 +945,13 @@ TStripElem *give_tstripelem(Sequence *seq, int cfra) return se; } -StripElem *give_stripelem(Sequence *seq, int cfra) +StripElem *give_stripelem(Sequence *seq, int cfra, int in_display_range) { StripElem *se; int nr; se = seq->strip->stripdata; - nr = give_stripelem_index(seq, cfra); + nr = give_stripelem_index(seq, cfra, in_display_range); if (nr == -1) return 0; if (se == 0) return 0; @@ -1051,7 +1053,7 @@ static int get_shown_sequences( #define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE) static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name, - int render_size) + int render_size, int in_display_range) { int frameno; char dir[FILE_MAXDIR]; @@ -1060,7 +1062,8 @@ static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name, return FALSE; } - if (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) { + if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) || + (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) { strcpy(dir, seq->strip->proxy->dir); } else { if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) { @@ -1082,12 +1085,12 @@ static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name, /* generate a seperate proxy directory for each preview size */ if (seq->type == SEQ_IMAGE) { - StripElem * se = give_stripelem(seq, cfra); + StripElem * se = give_stripelem(seq, cfra, in_display_range); snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir, render_size, se->name); frameno = 1; } else if (seq->type == SEQ_MOVIE) { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra,in_display_range); frameno = tse->nr + seq->anim_startofs; @@ -1095,7 +1098,7 @@ static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name, seq->strip->stripdata->name, render_size); } else { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra,in_display_range); frameno = tse->nr + seq->anim_startofs; @@ -1113,7 +1116,7 @@ static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name, } static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra, - int render_size) + int render_size, int in_display_range) { char name[PROXY_MAXFILE]; @@ -1127,10 +1130,11 @@ static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra, } if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra,in_display_range); int frameno = tse->nr + seq->anim_startofs; if (!seq->strip->proxy->anim) { - if (!seq_proxy_get_fname(seq, cfra,name,render_size)) { + if (!seq_proxy_get_fname(seq, cfra,name,render_size, + in_display_range)) { return 0; } @@ -1143,7 +1147,8 @@ static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra, return IMB_anim_absolute(seq->strip->proxy->anim, frameno); } - if (!seq_proxy_get_fname(seq, cfra, name, render_size)) { + if (!seq_proxy_get_fname(seq, cfra, name, render_size, + in_display_range)) { return 0; } @@ -1155,7 +1160,8 @@ static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra, } static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, - int build_proxy_run, int render_size); + int build_proxy_run, int render_size, + int in_display_range); static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size) { @@ -1180,11 +1186,11 @@ static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size) return; } - if (!seq_proxy_get_fname(seq, cfra, name, render_size)) { + if (!seq_proxy_get_fname(seq, cfra, name, render_size, TRUE)) { return; } - se = give_tstripelem(seq, cfra); + se = give_tstripelem(seq, cfra, TRUE); if (!se) { return; } @@ -1194,7 +1200,7 @@ static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size) se->ibuf = 0; } - do_build_seq_ibuf(seq, se, cfra, TRUE, render_size); + do_build_seq_ibuf(seq, se, cfra, TRUE, render_size, TRUE); if (!se->ibuf) { return; @@ -1244,7 +1250,7 @@ void seq_proxy_rebuild(Sequence * seq) */ for (cfra = seq->startdisp; cfra < seq->enddisp; cfra++) { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra, TRUE); tse->flag &= ~STRIPELEM_PREVIEW_DONE; } @@ -1256,7 +1262,7 @@ void seq_proxy_rebuild(Sequence * seq) if (seq->flag & SEQ_REVERSE_FRAMES) { for (cfra = seq->enddisp-seq->endstill-1; cfra >= seq->startdisp + seq->startstill; cfra--) { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra, TRUE); if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) { set_timecursor(cfra); @@ -1270,7 +1276,7 @@ void seq_proxy_rebuild(Sequence * seq) } else { for (cfra = seq->startdisp + seq->startstill; cfra < seq->enddisp - seq->endstill; cfra++) { - TStripElem * tse = give_tstripelem(seq, cfra); + TStripElem * tse = give_tstripelem(seq, cfra, TRUE); if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) { set_timecursor(cfra); @@ -1707,7 +1713,7 @@ static void free_metastrip_imbufs(ListBase *seqbasep, int cfra, int chanshown) if (!video_seq_is_rendered(seq_arr[i])) { continue; } - se = give_tstripelem(seq_arr[i], cfra); + se = give_tstripelem(seq_arr[i], cfra, FALSE); if (se) { if (se->ibuf) { IMB_freeImBuf(se->ibuf); @@ -1765,7 +1771,8 @@ static TStripElem* do_build_seq_array_recursively( ListBase *seqbasep, int cfra, int chanshown, int render_size); static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, - int build_proxy_run, int render_size) + int build_proxy_run, int render_size, + int in_display_range) { char name[FILE_MAXDIR+FILE_MAXFILE]; int use_limiter = TRUE; @@ -1779,7 +1786,8 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, use_limiter = FALSE; if (!build_proxy_run && se->ibuf == 0) { - se->ibuf = seq_proxy_fetch(seq, cfra, render_size); + se->ibuf = seq_proxy_fetch(seq, cfra, render_size, + in_display_range); if (se->ibuf) { use_limiter = TRUE; use_preprocess = TRUE; @@ -1832,7 +1840,8 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, /* should the effect be recalculated? */ if (!build_proxy_run && se->ibuf == 0) { - se->ibuf = seq_proxy_fetch(seq, cfra, render_size); + se->ibuf = seq_proxy_fetch(seq, cfra, render_size, + in_display_range); if (se->ibuf) { use_preprocess = TRUE; } @@ -1867,13 +1876,15 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, } } else if(seq->type == SEQ_IMAGE) { if(se->ok == STRIPELEM_OK && se->ibuf == 0) { - StripElem * s_elem = give_stripelem(seq, cfra); + StripElem * s_elem = give_stripelem( + seq, cfra, in_display_range); BLI_join_dirfile(name, seq->strip->dir, s_elem->name); BLI_convertstringcode(name, G.sce); BLI_convertstringframe(name, G.scene->r.cfra); if (!build_proxy_run) { - se->ibuf = seq_proxy_fetch(seq, cfra, - render_size); + se->ibuf = seq_proxy_fetch( + seq, cfra, render_size, + in_display_range); } copy_from_ibuf_still(seq, se); @@ -1898,8 +1909,9 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, } else if(seq->type == SEQ_MOVIE) { if(se->ok == STRIPELEM_OK && se->ibuf==0) { if(!build_proxy_run) { - se->ibuf = seq_proxy_fetch(seq, cfra, - render_size); + se->ibuf = seq_proxy_fetch( + seq, cfra, render_size, + in_display_range); } copy_from_ibuf_still(seq, se); @@ -1945,7 +1957,8 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, int sce_valid =sce&& (sce->camera || sce->r.scemode & R_DOSEQ); if (se->ibuf == NULL && sce_valid && !build_proxy_run) { - se->ibuf = seq_proxy_fetch(seq, cfra, render_size); + se->ibuf = seq_proxy_fetch(seq, cfra, render_size, + in_display_range); if (se->ibuf) { input_preprocess(seq, se, cfra); } @@ -2045,10 +2058,11 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, } static TStripElem* do_build_seq_recursively(Sequence * seq, int cfra, - int render_size); + int render_size, + int in_display_range); static void do_effect_seq_recursively(Sequence * seq, TStripElem *se, int cfra, - int render_size) + int render_size, int in_display_range) { float fac, facf; struct SeqEffectHandle sh = get_sequence_effect(seq); @@ -2074,27 +2088,27 @@ static void do_effect_seq_recursively(Sequence * seq, TStripElem *se, int cfra, /* no input needed */ break; case 0: - se->se1 = do_build_seq_recursively(seq->seq1, cfra, - render_size); - se->se2 = do_build_seq_recursively(seq->seq2, cfra, - render_size); + se->se1 = do_build_seq_recursively( + seq->seq1, cfra, render_size, in_display_range); + se->se2 = do_build_seq_recursively( + seq->seq2, cfra, render_size, in_display_range); if (seq->seq3) { - se->se3 = do_build_seq_recursively(seq->seq3, cfra, - render_size); + se->se3 = do_build_seq_recursively( + seq->seq3, cfra, render_size,in_display_range); } break; case 1: - se->se1 = do_build_seq_recursively(seq->seq1, cfra, - render_size); + se->se1 = do_build_seq_recursively( + seq->seq1, cfra, render_size, in_display_range); break; case 2: - se->se2 = do_build_seq_recursively(seq->seq2, cfra, - render_size); + se->se2 = do_build_seq_recursively( + seq->seq2, cfra, render_size, in_display_range); break; } - do_build_seq_ibuf(seq, se, cfra, FALSE, render_size); + do_build_seq_ibuf(seq, se, cfra, FALSE, render_size, in_display_range); /* children are not needed anymore ... */ @@ -2111,17 +2125,20 @@ static void do_effect_seq_recursively(Sequence * seq, TStripElem *se, int cfra, } static TStripElem* do_build_seq_recursively_impl(Sequence * seq, int cfra, - int render_size) + int render_size, + int in_display_range) { TStripElem *se; - se = give_tstripelem(seq, cfra); + se = give_tstripelem(seq, cfra, in_display_range); if(se) { if (seq->type & SEQ_EFFECT) { - do_effect_seq_recursively(seq, se, cfra, render_size); + do_effect_seq_recursively(seq, se, cfra, render_size, + in_display_range); } else { - do_build_seq_ibuf(seq, se, cfra, FALSE, render_size); + do_build_seq_ibuf(seq, se, cfra, FALSE, render_size, + in_display_range); } } check_limiter_refcount("do_build_seq_recursively_impl", se); @@ -2137,7 +2154,8 @@ instead of faking using the blend code below... */ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, - int render_size) + int render_size, + int in_display_range) { SpeedControlVars * s = (SpeedControlVars *)seq->effectdata; int nr = cfra - seq->start; @@ -2155,7 +2173,7 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, cfra_left = (int) floor(f_cfra); cfra_right = (int) ceil(f_cfra); - se = give_tstripelem(seq, cfra); + se = give_tstripelem(seq, cfra, in_display_range); if (!se) { return se; @@ -2167,7 +2185,7 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, if (se->ibuf == NULL) { se1 = do_build_seq_recursively_impl( - seq->seq1, cfra_left, render_size); + seq->seq1, cfra_left, render_size, FALSE); if((se1 && se1->ibuf && se1->ibuf->rect_float)) se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0); @@ -2200,9 +2218,9 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, if (se->ibuf == NULL) { se1 = do_build_seq_recursively_impl( - seq->seq1, cfra_left, render_size); + seq->seq1, cfra_left, render_size, FALSE); se2 = do_build_seq_recursively_impl( - seq->seq1, cfra_right, render_size); + seq->seq1, cfra_right, render_size, FALSE); if((se1 && se1->ibuf && se1->ibuf->rect_float)) se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0); @@ -2255,13 +2273,16 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, */ static TStripElem* do_build_seq_recursively(Sequence * seq, int cfra, - int render_size) + int render_size, + int in_display_range) { TStripElem* se; if (seq->type == SEQ_SPEED) { - se = do_handle_speed_effect(seq, cfra, render_size); + se = do_handle_speed_effect(seq, cfra, render_size, + in_display_range); } else { - se = do_build_seq_recursively_impl(seq, cfra, render_size); + se = do_build_seq_recursively_impl(seq, cfra, render_size, + in_display_range); } check_limiter_refcount("do_build_seq_recursively", se); @@ -2283,7 +2304,7 @@ static TStripElem* do_build_seq_array_recursively( return 0; } - se = give_tstripelem(seq_arr[count - 1], cfra); + se = give_tstripelem(seq_arr[count - 1], cfra, TRUE); if (!se) { return 0; @@ -2300,7 +2321,8 @@ static TStripElem* do_build_seq_array_recursively( if(count == 1) { - se = do_build_seq_recursively(seq_arr[0], cfra, render_size); + se = do_build_seq_recursively(seq_arr[0], cfra, render_size, + TRUE); if (se->ibuf) { se->ibuf_comp = se->ibuf; IMB_refImBuf(se->ibuf_comp); @@ -2314,7 +2336,7 @@ static TStripElem* do_build_seq_array_recursively( Sequence * seq = seq_arr[i]; struct SeqEffectHandle sh; - se = give_tstripelem(seq, cfra); + se = give_tstripelem(seq, cfra, TRUE); test_and_auto_discard_ibuf(se); @@ -2322,7 +2344,7 @@ static TStripElem* do_build_seq_array_recursively( break; } if (seq->blend_mode == SEQ_BLEND_REPLACE) { - do_build_seq_recursively(seq, cfra, render_size); + do_build_seq_recursively(seq, cfra, render_size, TRUE); if (se->ibuf) { se->ibuf_comp = se->ibuf; IMB_refImBuf(se->ibuf); @@ -2355,7 +2377,7 @@ static TStripElem* do_build_seq_array_recursively( switch (early_out) { case -1: case 2: - do_build_seq_recursively(seq, cfra, render_size); + do_build_seq_recursively(seq, cfra, render_size, TRUE); if (se->ibuf) { se->ibuf_comp = se->ibuf; IMB_refImBuf(se->ibuf_comp); @@ -2379,7 +2401,7 @@ static TStripElem* do_build_seq_array_recursively( } break; case 0: - do_build_seq_recursively(seq, cfra, render_size); + do_build_seq_recursively(seq, cfra, render_size, TRUE); if (!se->ibuf) { se->ibuf = IMB_allocImBuf( (short)seqrectx, (short)seqrecty, @@ -2405,8 +2427,8 @@ static TStripElem* do_build_seq_array_recursively( for (; i < count; i++) { Sequence * seq = seq_arr[i]; struct SeqEffectHandle sh = get_sequence_blend(seq); - TStripElem* se1 = give_tstripelem(seq_arr[i-1], cfra); - TStripElem* se2 = give_tstripelem(seq_arr[i], cfra); + TStripElem* se1 = give_tstripelem(seq_arr[i-1], cfra, TRUE); + TStripElem* se2 = give_tstripelem(seq_arr[i], cfra, TRUE); int early_out = sh.early_out(seq, seq->facf0, seq->facf1); switch (early_out) { @@ -2535,7 +2557,7 @@ ImBuf *give_ibuf_seq_direct(int rectx, int recty, int cfra, int render_size, seqrectx= rectx; /* bad bad global! */ seqrecty= recty; - se = do_build_seq_recursively(seq, cfra, render_size); + se = do_build_seq_recursively(seq, cfra, render_size, TRUE); if(!se) { return 0; @@ -2934,7 +2956,7 @@ void free_imbuf_seq_except(int cfra) WHILE_SEQ(&ed->seqbase) { if(seq->strip) { - TStripElem * curelem = give_tstripelem(seq, cfra); + TStripElem * curelem = give_tstripelem(seq, cfra,TRUE); for(a = 0, se = seq->strip->tstripdata; a < seq->strip->len && se; a++, se++) { @@ -2967,6 +2989,9 @@ void free_imbuf_seq_except(int cfra) if(seq->type==SEQ_MOVIE) if(seq->startdisp > cfra || seq->enddisp < cfra) free_anim_seq(seq); + if(seq->type==SEQ_SPEED) { + sequence_effect_speed_rebuild_map(seq, TRUE); + } free_proxy_seq(seq); } } @@ -3008,7 +3033,7 @@ static void free_imbuf_seq_editing(Editing * ed) if(seq->type==SEQ_MOVIE) free_anim_seq(seq); if(seq->type==SEQ_SPEED) { - sequence_effect_speed_rebuild_map(seq, 1); + sequence_effect_speed_rebuild_map(seq, TRUE); } free_proxy_seq(seq); } @@ -3083,7 +3108,7 @@ static int update_changed_seq_recurs(Sequence *seq, Sequence *changed_seq, int l if(seq->type == SEQ_MOVIE) free_anim_seq(seq); if(seq->type == SEQ_SPEED) { - sequence_effect_speed_rebuild_map(seq, 1); + sequence_effect_speed_rebuild_map(seq, TRUE); } free_proxy_seq(seq); } From efcdd16b0712389eb07d064fa873e46feb2a95de Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Fri, 26 Jun 2009 15:09:39 +0000 Subject: [PATCH 091/512] == Sequencer == Additional speed control fixes: frame blending can now be done on more than two frames, enabling really fine grained motion blur if you speed up a sequence with high factors (bigger than two). Next step: add morphing support using motion estimation. --- source/blender/makesdna/DNA_sequence_types.h | 2 + source/blender/src/buttons_scene.c | 17 +++- source/blender/src/sequence.c | 99 ++++++++++++++++---- 3 files changed, 96 insertions(+), 22 deletions(-) diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h index 707e06cf9cb..ed2025e55fd 100644 --- a/source/blender/makesdna/DNA_sequence_types.h +++ b/source/blender/makesdna/DNA_sequence_types.h @@ -234,6 +234,8 @@ typedef struct SpeedControlVars { int flags; int length; int lastValidFrame; + int blendFrames; + int pad; } SpeedControlVars; /* SpeedControlVars->flags */ diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index 45bdaf15499..fdbd39874c4 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -1319,12 +1319,12 @@ static void seq_panel_effect() SpeedControlVars *sp = (SpeedControlVars *)last_seq->effectdata; - uiDefButF(block, NUM, B_SEQ_BUT_RELOAD, "Global Speed:", 10,70,150,19, &sp->globalSpeed, 0.0, 100.0, 0, 0, "Global Speed"); + uiDefButF(block, NUM, B_SEQ_BUT_RELOAD, "Global Speed:", 10,70,240,19, &sp->globalSpeed, 0.0, 100.0, 0, 0, "Global Speed"); uiDefButBitI(block, TOG, SEQ_SPEED_INTEGRATE, B_SEQ_BUT_RELOAD, "IPO is velocity", - 10,50,150,19, &sp->flags, + 10,50,240,19, &sp->flags, 0.0, 1.0, 0, 0, "Interpret the IPO value as a " "velocity instead of a frame number"); @@ -1332,15 +1332,24 @@ static void seq_panel_effect() uiDefButBitI(block, TOG, SEQ_SPEED_BLEND, B_SEQ_BUT_RELOAD, "Enable frame blending", - 10,30,150,19, &sp->flags, + 10,30,240,19, &sp->flags, 0.0, 1.0, 0, 0, "Blend two frames into the " "target for a smoother result"); + + if (sp->blendFrames == 0) { + sp->blendFrames = 2; + } + + uiDefButI(block, NUM, B_SEQ_BUT_RELOAD, "Blend Frames:", + 10,10,240,19, &sp->blendFrames, + 2.0, 100.0, 0, 0, + "Maximum number of frames to blend"); uiDefButBitI(block, TOG, SEQ_SPEED_COMPRESS_IPO_Y, B_SEQ_BUT_RELOAD, "IPO value runs from [0..1]", - 10,10,150,19, &sp->flags, + 10,-10,240,19, &sp->flags, 0.0, 1.0, 0, 0, "Scale IPO value to get the " "target frame number."); diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 2eea7fe9d0f..315745bed57 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -20,7 +20,7 @@ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * - * Contributor(s): Peter Schlaile 2005/2006 + * Contributor(s): Peter Schlaile 2005-2009 * * ***** END GPL LICENSE BLOCK ***** */ @@ -2159,7 +2159,8 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, { SpeedControlVars * s = (SpeedControlVars *)seq->effectdata; int nr = cfra - seq->start; - float f_cfra; + float f_cfra_left; + float f_cfra_right; int cfra_left; int cfra_right; TStripElem * se = 0; @@ -2168,21 +2169,24 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, sequence_effect_speed_rebuild_map(seq, 0); - f_cfra = seq->start + s->frameMap[nr]; + f_cfra_left = seq->start + s->frameMap[nr]; + if (nr != s->length - 1) { + f_cfra_right = seq->start + s->frameMap[nr+1]; + } else { + f_cfra_right = f_cfra_left; + } - cfra_left = (int) floor(f_cfra); - cfra_right = (int) ceil(f_cfra); - se = give_tstripelem(seq, cfra, in_display_range); if (!se) { return se; } - if (cfra_left == cfra_right || - (s->flags & SEQ_SPEED_BLEND) == 0) { + if ((s->flags & SEQ_SPEED_BLEND) == 0) { test_and_auto_discard_ibuf(se); + cfra_left = rint(f_cfra_left); + if (se->ibuf == NULL) { se1 = do_build_seq_recursively_impl( seq->seq1, cfra_left, render_size, FALSE); @@ -2217,27 +2221,86 @@ static TStripElem* do_handle_speed_effect(Sequence * seq, int cfra, } if (se->ibuf == NULL) { + int bl_frames = s->blendFrames; + int diff = rint(fabs(f_cfra_right - f_cfra_left)) + 1; + int i; + float fac; + + if (bl_frames > diff) { + bl_frames = diff; + } + if (bl_frames < 2) { + bl_frames = 0; + } else { + bl_frames -= 2; + } + + if (bl_frames == 0) { + cfra_left = (int) floor(f_cfra_left); + cfra_right = (int) ceil(f_cfra_left); + fac = f_cfra_left - (float) cfra_left; + } else { + cfra_left = (int) rint(f_cfra_left); + cfra_right = (int) rint(f_cfra_right); + } + se1 = do_build_seq_recursively_impl( seq->seq1, cfra_left, render_size, FALSE); - se2 = do_build_seq_recursively_impl( - seq->seq1, cfra_right, render_size, FALSE); if((se1 && se1->ibuf && se1->ibuf->rect_float)) se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0); else se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect, 0); - - if (!se1 || !se2) { - make_black_ibuf(se->ibuf); - } else { + + if (se->ibuf) { sh = get_sequence_effect(seq); + for (i = 0; i < bl_frames; i++) { + int bl_cfra = rint( + cfra_left + + ((float) i + 1.0) / + ((float) bl_frames + 1.0) * + (cfra_right - cfra_left)); + se2 = do_build_seq_recursively_impl( + seq->seq1, bl_cfra, + render_size, FALSE); + + fac = 1.0 / ((float) i + 2.0); + + sh.execute(seq, cfra, + fac, + fac, + se->ibuf->x, se->ibuf->y, + se1 ? se1->ibuf : se->ibuf, + se2->ibuf, 0, + se->ibuf); + if (se1 && se1->ibuf) { + IMB_cache_limiter_unref( + se1->ibuf); + se1 = 0; + } + if (se2 && se2->ibuf) + IMB_cache_limiter_unref( + se2->ibuf); + } + + if (bl_frames != 0) { + fac = 1.0 / ((float) bl_frames + 2.0); + } + + se2 = do_build_seq_recursively_impl( + seq->seq1, cfra_right, + render_size, FALSE); + sh.execute(seq, cfra, - f_cfra - (float) cfra_left, - f_cfra - (float) cfra_left, + fac, + fac, se->ibuf->x, se->ibuf->y, - se1->ibuf, se2->ibuf, 0, se->ibuf); - } + se1 ? se1->ibuf : se->ibuf, + se2->ibuf, 0, + se->ibuf); + + } } } From b1a5b08b1ae9c657312d0393e7b069c25e0e4283 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Fri, 26 Jun 2009 19:40:28 +0000 Subject: [PATCH 092/512] == Sequencer == Small fix by jms: rint() isn't available on win32... (hmm, rint() is conforming to C99, that is _really_ strange...) --- source/blender/src/sequence.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 315745bed57..2183dd655be 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -73,6 +73,12 @@ #ifdef WIN32 #define snprintf _snprintf + +static double rint(double x) +{ + return floor(x < 0.0 ? x - 0.5 : x + 0.5); +} + #endif int seqrectx, seqrecty; From d7d60f4ab9c184a82be0064b12964ce072c57000 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Fri, 26 Jun 2009 21:51:23 +0000 Subject: [PATCH 093/512] fix for importing of transparent faces from .mtl files - ZTrans now is set for them as well. (what makes importing from SketchUp really nice) --- release/scripts/import_obj.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/release/scripts/import_obj.py b/release/scripts/import_obj.py index 679e24bb0a7..a8c655ada48 100644 --- a/release/scripts/import_obj.py +++ b/release/scripts/import_obj.py @@ -9,7 +9,7 @@ Tooltip: 'Load a Wavefront OBJ File, Shift: batch import all dir.' __author__= "Campbell Barton", "Jiri Hnidek", "Paolo Ciccone" __url__= ['http://wiki.blender.org/index.php/Scripts/Manual/Import/wavefront_obj', 'blender.org', 'blenderartists.org'] -__version__= "2.12" +__version__= "2.13" __bpydoc__= """\ This script imports a Wavefront OBJ files to Blender. @@ -208,6 +208,7 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_ context_material.setIOR( max(1, min(float(line_split[1]), 3))) # Between 1 and 3 elif line_lower.startswith('d') or line_lower.startswith('tr'): context_material.setAlpha(float(line_split[1])) + context_material.mode |= Material.Modes.ZTRANSP elif line_lower.startswith('map_ka'): img_filepath= line_value(line.split()) if img_filepath: From 13d18c5f777710fc396adde64725ecc5ecee019b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 27 Jun 2009 00:40:25 +0000 Subject: [PATCH 094/512] NLA SoC: Theme colours in old defaults files for NLA now get replaced with the nice new colours --- source/blender/editors/interface/resources.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 4b2d5af956d..2798f7a473f 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -1075,19 +1075,6 @@ void init_userdef_do_versions(void) SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); } } - if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) { - bTheme *btheme; - for (btheme= U.themes.first; btheme; btheme= btheme->next) { - /* these should all use the same color */ - SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); - } - } if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) { bTheme *btheme; for (btheme= U.themes.first; btheme; btheme= btheme->next) { @@ -1210,6 +1197,13 @@ void init_userdef_do_versions(void) /* Graph Editor - Group Channel color */ SETCOL(btheme->tipo.group, 79, 101, 73, 255); SETCOL(btheme->tipo.group_active, 135, 177, 125, 255); + + /* Nla Editor - (Object) Channel color */ + SETCOL(btheme->tnla.ds_channel, 82, 96, 110, 255); + SETCOL(btheme->tnla.ds_subchannel, 124, 137, 150, 255); + /* NLA Editor - New Strip colors */ + SETCOL(btheme->tnla.strip, 12, 10, 10, 128); + SETCOL(btheme->tnla.strip_select, 255, 140, 0, 255); } /* adjust grease-pencil distances */ From f508319fc8c54e918446482392ab6e1b01c63fe6 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 27 Jun 2009 04:56:20 +0000 Subject: [PATCH 095/512] NLA SoC: Apply-Scale Operator now recalculates action length after scale is applied --- source/blender/editors/space_nla/nla_edit.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index df30e112b5a..44528714732 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -769,8 +769,12 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *op) bed.data= strip; ANIM_animchanneldata_keys_bezier_loop(&bed, strip->act, ALE_ACT, NULL, bezt_apply_nlamapping, calchandles_fcurve, 0); - /* clear scale of strip now that it has been applied, but leave everything else alone */ + /* clear scale of strip now that it has been applied, + * and recalculate the extents of the action now that it has been scaled + * but leave everything else alone + */ strip->scale= 1.0f; + calc_action_range(strip->act, &strip->actstart, &strip->actend, 1); } } } From d3557fc487bc5e5c02c9758b6a05200575e82e84 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 27 Jun 2009 12:35:11 +0000 Subject: [PATCH 096/512] NLA SoC: Recoded the strip<->global time conversion code * Strip evaluation now takes into account repeats * Increasing the number of repeats lengthens the strip, while decreasing the number of repeats does the opposite. TODO: - inverse correction doesn't take into account repeats != 1, so tweaking strips with repeats is currently not recommended! --- source/blender/blenkernel/intern/nla.c | 44 ++++++++++++++++++------ source/blender/makesrna/intern/rna_nla.c | 24 ++++++++++++- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 747113b6531..760139bee15 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -331,7 +331,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) */ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short invert) { - float length, actlength, repeat, scale; + float actlength, repeat, scale; /* get number of repeats */ if (IS_EQ(strip->repeat, 0.0f)) strip->repeat = 1.0f; @@ -345,24 +345,46 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short actlength = strip->actend - strip->actstart; if (IS_EQ(actlength, 0.0f)) actlength = 1.0f; - /* length of strip */ - length= actlength * scale * repeat; - if (IS_EQ(length, 0.0f)) length= strip->end - strip->start; - /* reversed = play strip backwards */ if (strip->flag & NLASTRIP_FLAG_REVERSE) { /* invert = convert action-strip time to global time */ if (invert) - return length*(strip->actend - cframe)/(repeat*actlength) + strip->start; - else - return strip->actend - repeat*actlength*(cframe - strip->start)/length; + return scale*(strip->actend - cframe) + strip->start; // FIXME: this doesn't work for multiple repeats yet + else { + if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { + /* this case prevents the motion snapping back to the first frame at the end of the strip + * by catching the case where repeats is a whole number, which means that the end of the strip + * could also be interpreted as the end of the start of a repeat + */ + return strip->actstart; + } + else { + /* - the 'fmod(..., actlength*scale)' is needed to get the repeats working + * - the '/ scale' is needed to ensure that scaling influences the timing within the repeat + */ + return strip->actend - fmod(cframe - strip->start, actlength*scale) / scale; + } + } } else { /* invert = convert action-strip time to global time */ if (invert) - return length*(cframe - strip->actstart)/(repeat*actlength) + strip->start; - else - return repeat*actlength*(cframe - strip->start)/length + strip->actstart; + return scale*(cframe - strip->actstart) + strip->start; // FIXME: this doesn't work for mutiple repeats yet + else { + if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { + /* this case prevents the motion snapping back to the first frame at the end of the strip + * by catching the case where repeats is a whole number, which means that the end of the strip + * could also be interpreted as the end of the start of a repeat + */ + return strip->actend; + } + else { + /* - the 'fmod(..., actlength*scale)' is needed to get the repeats working + * - the '/ scale' is needed to ensure that scaling influences the timing within the repeat + */ + return strip->actstart + fmod(cframe - strip->start, actlength*scale) / scale; + } + } } } diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 84a84492ea3..5dc624b67bc 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -133,6 +133,27 @@ static void rna_NlaStrip_scale_set(PointerRNA *ptr, float value) printf("NlaStrip Set Scale Error (in RNA): Scale = %0.4f, Repeat = %0.4f \n", data->scale, data->repeat); } +static void rna_NlaStrip_repeat_set(PointerRNA *ptr, float value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + float actlen, mapping; + + /* set scale value */ + CLAMP(value, 0.01f, 1000.0f); /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */ + data->repeat= value; + + /* calculate existing factors */ + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + mapping= data->scale * data->repeat; + + /* adjust endpoint of strip in response to this */ + if (IS_EQ(mapping, 0.0f) == 0) + data->end = (actlen * mapping) + data->start; + else + printf("NlaStrip Set Repeat Error (in RNA): Scale = %0.4f, Repeat = %0.4f \n", data->scale, data->repeat); +} + static void rna_NlaStrip_blend_in_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; @@ -265,7 +286,8 @@ void rna_def_nlastrip(BlenderRNA *brna) /* Action Reuse */ prop= RNA_def_property(srna, "repeat", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "repeat"); - RNA_def_property_range(prop, 1.0f, 1000.0f); /* these limits have currently be chosen arbitarily, but could be extended (minimum should still be > 0 though) if needed... */ + RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_repeat_set", NULL); + RNA_def_property_range(prop, 0.1f, 1000.0f); /* these limits have currently be chosen arbitarily, but could be extended (minimum should still be > 0 though) if needed... */ RNA_def_property_ui_text(prop, "Repeat", "Number of times to repeat the "); prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE); From bc0cd9607e1e2d25f92216332d73c23ef1e7c786 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 27 Jun 2009 13:00:22 +0000 Subject: [PATCH 097/512] NLA SoC: Move Strips Up/Down Operators These operators may be temporary only, depending on if a workable solution via transform is found. * PageUp moves strips into the track above if there's space * PageDown moves strips into the track below if there's space * Also fixed a button-alignment bug in the DopeSheet header --- .../editors/space_action/action_header.c | 3 +- source/blender/editors/space_nla/nla_edit.c | 154 ++++++++++++++++++ source/blender/editors/space_nla/nla_header.c | 5 + source/blender/editors/space_nla/nla_intern.h | 3 + source/blender/editors/space_nla/nla_ops.c | 9 + 5 files changed, 173 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index a9ce145088d..62e7a2d8e3f 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -398,7 +398,8 @@ void action_header_buttons(const bContext *C, ARegion *ar) /* COPY PASTE */ uiBlockBeginAlign(block); uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); - uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); + xco += XIC; + uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); uiBlockEndAlign(block); xco += (XIC + 8); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 44528714732..efde2d0b537 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -706,6 +706,160 @@ void NLAEDIT_OT_split (wmOperatorType *ot) /* *********************************************** */ /* NLA Editing Operations (Modifying) */ +/* ******************** Move Strips Up Operator ************************** */ +/* Tries to move the selected strips into the track above if possible. */ + +static int nlaedit_move_up_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + BeztEditData bed; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* init the editing data */ + memset(&bed, 0, sizeof(BeztEditData)); + + /* since we're potentially moving strips from lower tracks to higher tracks, we should + * loop over the tracks in reverse order to avoid moving earlier strips up multiple tracks + */ + for (ale= anim_data.last; ale; ale= ale->prev) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaTrack *nltn= nlt->next; + NlaStrip *strip, *stripn; + + /* if this track has no tracks after it, skip for now... */ + if (nltn == NULL) + continue; + + /* for every selected strip, try to move */ + for (strip= nlt->strips.first; strip; strip= stripn) { + stripn= strip->next; + + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* check if the track above has room for this strip */ + if (BKE_nlatrack_has_space(nltn, strip->start, strip->end)) { + /* remove from its current track, and add to the one above (it 'should' work, so no need to worry) */ + BLI_remlink(&nlt->strips, strip); + BKE_nlatrack_add_strip(nltn, strip); + } + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_move_up (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Move Strips Up"; + ot->idname= "NLAEDIT_OT_move_up"; + ot->description= "Move selected strips up a track if there's room."; + + /* api callbacks */ + ot->exec= nlaedit_move_up_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ******************** Move Strips Down Operator ************************** */ +/* Tries to move the selected strips into the track above if possible. */ + +static int nlaedit_move_down_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + BeztEditData bed; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* init the editing data */ + memset(&bed, 0, sizeof(BeztEditData)); + + /* loop through the tracks in normal order, since we're pushing strips down, + * strips won't get operated on twice + */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaTrack *nltp= nlt->prev; + NlaStrip *strip, *stripn; + + /* if this track has no tracks before it, skip for now... */ + if (nltp == NULL) + continue; + + /* for every selected strip, try to move */ + for (strip= nlt->strips.first; strip; strip= stripn) { + stripn= strip->next; + + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* check if the track below has room for this strip */ + if (BKE_nlatrack_has_space(nltp, strip->start, strip->end)) { + /* remove from its current track, and add to the one above (it 'should' work, so no need to worry) */ + BLI_remlink(&nlt->strips, strip); + BKE_nlatrack_add_strip(nltp, strip); + } + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLAEDIT_OT_move_down (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Move Strips Down"; + ot->idname= "NLAEDIT_OT_move_down"; + ot->description= "Move selected strips down a track if there's room."; + + /* api callbacks */ + ot->exec= nlaedit_move_down_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************** Apply Scale Operator ***************************** */ /* Reset the scaling of the selected strips to 1.0f */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 11dfc5575b1..939e886abeb 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -159,6 +159,11 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLAEDIT_OT_apply_scale"); uiItemO(layout, NULL, 0, "NLAEDIT_OT_clear_scale"); + + uiItemS(layout); + + uiItemO(layout, NULL, 0, "NLAEDIT_OT_move_up"); + uiItemO(layout, NULL, 0, "NLAEDIT_OT_move_down"); } static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 17fad5db47f..7056139d734 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -99,6 +99,9 @@ void NLAEDIT_OT_duplicate(wmOperatorType *ot); void NLAEDIT_OT_delete(wmOperatorType *ot); void NLAEDIT_OT_split(wmOperatorType *ot); +void NLAEDIT_OT_move_up(wmOperatorType *ot); +void NLAEDIT_OT_move_down(wmOperatorType *ot); + void NLAEDIT_OT_apply_scale(wmOperatorType *ot); void NLAEDIT_OT_clear_scale(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 531e049d29a..35db79a0b38 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -150,6 +150,9 @@ void nla_operatortypes(void) WM_operatortype_append(NLAEDIT_OT_delete); WM_operatortype_append(NLAEDIT_OT_split); + WM_operatortype_append(NLAEDIT_OT_move_up); + WM_operatortype_append(NLAEDIT_OT_move_down); + WM_operatortype_append(NLAEDIT_OT_apply_scale); WM_operatortype_append(NLAEDIT_OT_clear_scale); } @@ -242,8 +245,14 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* split */ WM_keymap_add_item(keymap, "NLAEDIT_OT_split", YKEY, KM_PRESS, 0, 0); + /* move up */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_move_up", PAGEUPKEY, KM_PRESS, 0, 0); + /* move down */ + WM_keymap_add_item(keymap, "NLAEDIT_OT_move_down", PAGEDOWNKEY, KM_PRESS, 0, 0); + /* apply scale */ WM_keymap_add_item(keymap, "NLAEDIT_OT_apply_scale", AKEY, KM_PRESS, KM_CTRL, 0); + /* clear scale */ WM_keymap_add_item(keymap, "NLAEDIT_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); /* transform system */ From 61e30f0f001285dcbf0c7ec8ba44151544bfc8d9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 28 Jun 2009 03:13:01 +0000 Subject: [PATCH 098/512] NLA SoC: Renamed NLA-Editor operators to be more in line with those in other editors --- .../blender/editors/space_nla/nla_buttons.c | 4 +- source/blender/editors/space_nla/nla_edit.c | 46 ++++++------ source/blender/editors/space_nla/nla_header.c | 32 ++++----- source/blender/editors/space_nla/nla_intern.h | 30 ++++---- source/blender/editors/space_nla/nla_ops.c | 70 +++++++++---------- source/blender/editors/space_nla/nla_select.c | 16 ++--- 6 files changed, 99 insertions(+), 99 deletions(-) diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index a25f741c193..003eba64ed9 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -381,10 +381,10 @@ static int nla_properties(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_properties(wmOperatorType *ot) +void NLA_OT_properties(wmOperatorType *ot) { ot->name= "Properties"; - ot->idname= "NLAEDIT_OT_properties"; + ot->idname= "NLA_OT_properties"; ot->exec= nla_properties; ot->poll= ED_operator_nla_active; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index efde2d0b537..bcf3bd4746a 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -139,11 +139,11 @@ static int nlaedit_enable_tweakmode_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_tweakmode_enter (wmOperatorType *ot) +void NLA_OT_tweakmode_enter (wmOperatorType *ot) { /* identifiers */ ot->name= "Enter Tweak Mode"; - ot->idname= "NLAEDIT_OT_tweakmode_enter"; + ot->idname= "NLA_OT_tweakmode_enter"; ot->description= "Enter tweaking mode for the action referenced by the active strip."; /* api callbacks */ @@ -205,11 +205,11 @@ static int nlaedit_disable_tweakmode_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_tweakmode_exit (wmOperatorType *ot) +void NLA_OT_tweakmode_exit (wmOperatorType *ot) { /* identifiers */ ot->name= "Exit Tweak Mode"; - ot->idname= "NLAEDIT_OT_tweakmode_exit"; + ot->idname= "NLA_OT_tweakmode_exit"; ot->description= "Exit tweaking mode for the action referenced by the active strip."; /* api callbacks */ @@ -239,7 +239,7 @@ static int nlaedit_add_actionclip_invoke (bContext *C, wmOperator *op, wmEvent * /* loop through Actions in Main database, adding as items in the menu */ for (act= m->action.first; act; act= act->id.next) - uiItemStringO(layout, act->id.name+2, 0, "NLAEDIT_OT_add_actionclip", "action", act->id.name); + uiItemStringO(layout, act->id.name+2, 0, "NLA_OT_add_actionclip", "action", act->id.name); uiItemS(layout); uiPupMenuEnd(C, pup); @@ -322,11 +322,11 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_add_actionclip (wmOperatorType *ot) +void NLA_OT_add_actionclip (wmOperatorType *ot) { /* identifiers */ ot->name= "Add Action Strip"; - ot->idname= "NLAEDIT_OT_add_actionclip"; + ot->idname= "NLA_OT_add_actionclip"; ot->description= "Add an Action-Clip strip (i.e. an NLA Strip referencing an Action) to the active track."; /* api callbacks */ @@ -431,11 +431,11 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) } } -void NLAEDIT_OT_add_transition (wmOperatorType *ot) +void NLA_OT_add_transition (wmOperatorType *ot) { /* identifiers */ ot->name= "Add Transition"; - ot->idname= "NLAEDIT_OT_add_transition"; + ot->idname= "NLA_OT_add_transition"; ot->description= "Add a transition strip between two adjacent selected strips."; /* api callbacks */ @@ -529,11 +529,11 @@ static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } -void NLAEDIT_OT_duplicate (wmOperatorType *ot) +void NLA_OT_duplicate (wmOperatorType *ot) { /* identifiers */ ot->name= "Duplicate Strips"; - ot->idname= "NLAEDIT_OT_duplicate"; + ot->idname= "NLA_OT_duplicate"; ot->description= "Duplicate selected NLA-Strips, adding the new strips in new tracks above the originals."; /* api callbacks */ @@ -592,11 +592,11 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_delete (wmOperatorType *ot) +void NLA_OT_delete (wmOperatorType *ot) { /* identifiers */ ot->name= "Delete Strips"; - ot->idname= "NLAEDIT_OT_delete"; + ot->idname= "NLA_OT_delete"; ot->description= "Delete selected strips."; /* api callbacks */ @@ -688,11 +688,11 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_split (wmOperatorType *ot) +void NLA_OT_split (wmOperatorType *ot) { /* identifiers */ ot->name= "Split Strips"; - ot->idname= "NLAEDIT_OT_split"; + ot->idname= "NLA_OT_split"; ot->description= "Split selected strips at their midpoints."; /* api callbacks */ @@ -768,11 +768,11 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_move_up (wmOperatorType *ot) +void NLA_OT_move_up (wmOperatorType *ot) { /* identifiers */ ot->name= "Move Strips Up"; - ot->idname= "NLAEDIT_OT_move_up"; + ot->idname= "NLA_OT_move_up"; ot->description= "Move selected strips up a track if there's room."; /* api callbacks */ @@ -845,11 +845,11 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_move_down (wmOperatorType *ot) +void NLA_OT_move_down (wmOperatorType *ot) { /* identifiers */ ot->name= "Move Strips Down"; - ot->idname= "NLAEDIT_OT_move_down"; + ot->idname= "NLA_OT_move_down"; ot->description= "Move selected strips down a track if there's room."; /* api callbacks */ @@ -944,11 +944,11 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_apply_scale (wmOperatorType *ot) +void NLA_OT_apply_scale (wmOperatorType *ot) { /* identifiers */ ot->name= "Apply Scale"; - ot->idname= "NLAEDIT_OT_apply_scale"; + ot->idname= "NLA_OT_apply_scale"; ot->description= "Apply scaling of selected strips to their referenced Actions."; /* api callbacks */ @@ -1005,11 +1005,11 @@ static int nlaedit_clear_scale_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_clear_scale (wmOperatorType *ot) +void NLA_OT_clear_scale (wmOperatorType *ot) { /* identifiers */ ot->name= "Clear Scale"; - ot->idname= "NLAEDIT_OT_clear_scale"; + ot->idname= "NLA_OT_clear_scale"; ot->description= "Reset scaling of selected strips."; /* api callbacks */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 939e886abeb..fc6db76ba65 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -90,7 +90,7 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) RNA_pointer_create(&sc->id, &RNA_SpaceNLA, snla, &spaceptr); /* create menu */ - uiItemO(layout, NULL, ICON_MENU_PANEL, "NLAEDIT_OT_properties"); + uiItemO(layout, NULL, ICON_MENU_PANEL, "NLA_OT_properties"); uiItemS(layout); @@ -104,9 +104,9 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); if (scene->flag & SCE_NLA_EDIT_ON) - uiItemO(layout, NULL, 0, "NLAEDIT_OT_tweakmode_exit"); + uiItemO(layout, NULL, 0, "NLA_OT_tweakmode_exit"); else - uiItemO(layout, NULL, 0, "NLAEDIT_OT_tweakmode_enter"); + uiItemO(layout, NULL, 0, "NLA_OT_tweakmode_enter"); uiItemS(layout); @@ -125,13 +125,13 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) static void nla_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemO(layout, NULL, 0, "NLAEDIT_OT_select_all_toggle"); - uiItemBooleanO(layout, "Invert All", 0, "NLAEDIT_OT_select_all_toggle", "invert", 1); + uiItemO(layout, NULL, 0, "NLA_OT_select_all_toggle"); + uiItemBooleanO(layout, "Invert All", 0, "NLA_OT_select_all_toggle", "invert", 1); uiItemS(layout); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_select_border"); - uiItemBooleanO(layout, "Border Axis Range", 0, "NLAEDIT_OT_select_border", "axis_range", 1); + uiItemO(layout, NULL, 0, "NLA_OT_select_border"); + uiItemBooleanO(layout, "Border Axis Range", 0, "NLA_OT_select_border", "axis_range", 1); } static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) @@ -148,28 +148,28 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_duplicate"); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_split"); + uiItemO(layout, NULL, 0, "NLA_OT_duplicate"); + uiItemO(layout, NULL, 0, "NLA_OT_split"); uiItemS(layout); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_delete"); + uiItemO(layout, NULL, 0, "NLA_OT_delete"); uiItemS(layout); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_apply_scale"); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_clear_scale"); + uiItemO(layout, NULL, 0, "NLA_OT_apply_scale"); + uiItemO(layout, NULL, 0, "NLA_OT_clear_scale"); uiItemS(layout); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_move_up"); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_move_down"); + uiItemO(layout, NULL, 0, "NLA_OT_move_up"); + uiItemO(layout, NULL, 0, "NLA_OT_move_down"); } static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_actionclip"); - uiItemO(layout, NULL, 0, "NLAEDIT_OT_add_transition"); + uiItemO(layout, NULL, 0, "NLA_OT_add_actionclip"); + uiItemO(layout, NULL, 0, "NLA_OT_add_transition"); uiItemS(layout); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 7056139d734..f8df41d6225 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -54,7 +54,7 @@ ARegion *nla_has_buttons_region(ScrArea *sa); void nla_buttons_register(ARegionType *art); -void NLAEDIT_OT_properties(wmOperatorType *ot); +void NLA_OT_properties(wmOperatorType *ot); /* **************************************** */ /* nla_draw.c */ @@ -80,30 +80,30 @@ enum { /* --- */ -void NLAEDIT_OT_select_all_toggle(wmOperatorType *ot); -void NLAEDIT_OT_select_border(wmOperatorType *ot); -void NLAEDIT_OT_click_select(wmOperatorType *ot); +void NLA_OT_select_all_toggle(wmOperatorType *ot); +void NLA_OT_select_border(wmOperatorType *ot); +void NLA_OT_click_select(wmOperatorType *ot); /* **************************************** */ /* nla_edit.c */ -void NLAEDIT_OT_tweakmode_enter(wmOperatorType *ot); -void NLAEDIT_OT_tweakmode_exit(wmOperatorType *ot); +void NLA_OT_tweakmode_enter(wmOperatorType *ot); +void NLA_OT_tweakmode_exit(wmOperatorType *ot); /* --- */ -void NLAEDIT_OT_add_actionclip(wmOperatorType *ot); -void NLAEDIT_OT_add_transition(wmOperatorType *ot); +void NLA_OT_add_actionclip(wmOperatorType *ot); +void NLA_OT_add_transition(wmOperatorType *ot); -void NLAEDIT_OT_duplicate(wmOperatorType *ot); -void NLAEDIT_OT_delete(wmOperatorType *ot); -void NLAEDIT_OT_split(wmOperatorType *ot); +void NLA_OT_duplicate(wmOperatorType *ot); +void NLA_OT_delete(wmOperatorType *ot); +void NLA_OT_split(wmOperatorType *ot); -void NLAEDIT_OT_move_up(wmOperatorType *ot); -void NLAEDIT_OT_move_down(wmOperatorType *ot); +void NLA_OT_move_up(wmOperatorType *ot); +void NLA_OT_move_down(wmOperatorType *ot); -void NLAEDIT_OT_apply_scale(wmOperatorType *ot); -void NLAEDIT_OT_clear_scale(wmOperatorType *ot); +void NLA_OT_apply_scale(wmOperatorType *ot); +void NLA_OT_clear_scale(wmOperatorType *ot); /* **************************************** */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 35db79a0b38..d7bd894ce4d 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -126,7 +126,7 @@ short nlaedit_is_tweakmode_on (bAnimContext *ac) void nla_operatortypes(void) { /* view */ - WM_operatortype_append(NLAEDIT_OT_properties); + WM_operatortype_append(NLA_OT_properties); /* channels */ WM_operatortype_append(NLA_OT_channels_click); @@ -135,26 +135,26 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_delete_tracks); /* select */ - WM_operatortype_append(NLAEDIT_OT_click_select); - WM_operatortype_append(NLAEDIT_OT_select_border); - WM_operatortype_append(NLAEDIT_OT_select_all_toggle); + WM_operatortype_append(NLA_OT_click_select); + WM_operatortype_append(NLA_OT_select_border); + WM_operatortype_append(NLA_OT_select_all_toggle); /* edit */ - WM_operatortype_append(NLAEDIT_OT_tweakmode_enter); - WM_operatortype_append(NLAEDIT_OT_tweakmode_exit); + WM_operatortype_append(NLA_OT_tweakmode_enter); + WM_operatortype_append(NLA_OT_tweakmode_exit); - WM_operatortype_append(NLAEDIT_OT_add_actionclip); - WM_operatortype_append(NLAEDIT_OT_add_transition); + WM_operatortype_append(NLA_OT_add_actionclip); + WM_operatortype_append(NLA_OT_add_transition); - WM_operatortype_append(NLAEDIT_OT_duplicate); - WM_operatortype_append(NLAEDIT_OT_delete); - WM_operatortype_append(NLAEDIT_OT_split); + WM_operatortype_append(NLA_OT_duplicate); + WM_operatortype_append(NLA_OT_delete); + WM_operatortype_append(NLA_OT_split); - WM_operatortype_append(NLAEDIT_OT_move_up); - WM_operatortype_append(NLAEDIT_OT_move_down); + WM_operatortype_append(NLA_OT_move_up); + WM_operatortype_append(NLA_OT_move_down); - WM_operatortype_append(NLAEDIT_OT_apply_scale); - WM_operatortype_append(NLAEDIT_OT_clear_scale); + WM_operatortype_append(NLA_OT_apply_scale); + WM_operatortype_append(NLA_OT_clear_scale); } /* ************************** registration - keymaps **********************************/ @@ -208,19 +208,19 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* selection */ /* click select */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, 0, 0); - kmi= WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, 0, 0); + kmi= WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", 1); - kmi= WM_keymap_add_item(keymap, "NLAEDIT_OT_click_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); + kmi= WM_keymap_add_item(keymap, "NLA_OT_click_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "left_right", NLAEDIT_LRSEL_TEST); /* deselect all */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); + WM_keymap_add_item(keymap, "NLA_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); /* borderselect */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_select_border", BKEY, KM_PRESS, 0, 0); - RNA_boolean_set(WM_keymap_add_item(keymap, "NLAEDIT_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); + WM_keymap_add_item(keymap, "NLA_OT_select_border", BKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); /* editing */ @@ -228,32 +228,32 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) * - enter and exit are separate operators with the same hotkey... * This works as they use different poll()'s */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_enter", TABKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "NLAEDIT_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_tweakmode_enter", TABKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_tweakmode_exit", TABKEY, KM_PRESS, 0, 0); /* add strips */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_add_actionclip", AKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "NLAEDIT_OT_add_transition", TKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLA_OT_add_actionclip", AKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLA_OT_add_transition", TKEY, KM_PRESS, KM_SHIFT, 0); /* duplicate */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLA_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); /* delete */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "NLAEDIT_OT_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_delete", DELKEY, KM_PRESS, 0, 0); /* split */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_split", YKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_split", YKEY, KM_PRESS, 0, 0); /* move up */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_move_up", PAGEUPKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_move_up", PAGEUPKEY, KM_PRESS, 0, 0); /* move down */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_move_down", PAGEDOWNKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_move_down", PAGEDOWNKEY, KM_PRESS, 0, 0); /* apply scale */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_apply_scale", AKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "NLA_OT_apply_scale", AKEY, KM_PRESS, KM_CTRL, 0); /* clear scale */ - WM_keymap_add_item(keymap, "NLAEDIT_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "NLA_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_NLA); @@ -267,7 +267,7 @@ void nla_keymap(wmWindowManager *wm) /* keymap for all regions */ keymap= WM_keymap_listbase(wm, "NLA Generic", SPACE_NLA, 0); - WM_keymap_add_item(keymap, "NLAEDIT_OT_properties", NKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NLA_OT_properties", NKEY, KM_PRESS, 0, 0); /* channels */ /* Channels are not directly handled by the NLA Editor module, but are inherited from the Animation module. diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 28027d0d9cd..c238818dd1e 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -191,11 +191,11 @@ static int nlaedit_deselectall_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_select_all_toggle (wmOperatorType *ot) +void NLA_OT_select_all_toggle (wmOperatorType *ot) { /* identifiers */ ot->name= "Select All"; - ot->idname= "NLAEDIT_OT_select_all_toggle"; + ot->idname= "NLA_OT_select_all_toggle"; /* api callbacks */ ot->exec= nlaedit_deselectall_exec; @@ -327,11 +327,11 @@ static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void NLAEDIT_OT_select_border(wmOperatorType *ot) +void NLA_OT_select_border(wmOperatorType *ot) { /* identifiers */ ot->name= "Border Select"; - ot->idname= "NLAEDIT_OT_select_border"; + ot->idname= "NLA_OT_select_border"; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -434,7 +434,7 @@ static void mouse_nla_strips (bContext *C, bAnimContext *ac, int mval[2], short * now that we've found our target... */ if (scene->flag & SCE_NLA_EDIT_ON) - WM_operator_name_call(C, "NLAEDIT_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); + WM_operator_name_call(C, "NLA_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); /* for replacing selection, firstly need to clear existing selection */ if (select_mode == SELECT_REPLACE) { @@ -488,7 +488,7 @@ static void nlaedit_mselect_leftright (bContext *C, bAnimContext *ac, short left /* if currently in tweakmode, exit tweakmode first */ if (scene->flag & SCE_NLA_EDIT_ON) - WM_operator_name_call(C, "NLAEDIT_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); + WM_operator_name_call(C, "NLA_OT_tweakmode_exit", WM_OP_EXEC_DEFAULT, NULL); /* if select mode is replace, deselect all keyframes (and channels) first */ if (select_mode==SELECT_REPLACE) { @@ -589,11 +589,11 @@ static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -void NLAEDIT_OT_click_select (wmOperatorType *ot) +void NLA_OT_click_select (wmOperatorType *ot) { /* identifiers */ ot->name= "Mouse Select"; - ot->idname= "NLAEDIT_OT_click_select"; + ot->idname= "NLA_OT_click_select"; /* api callbacks - absolutely no exec() this yet... */ ot->invoke= nlaedit_clickselect_invoke; From aa4ed13e4a216a3464f7b9d6643c195927aea98a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 28 Jun 2009 07:32:00 +0000 Subject: [PATCH 099/512] NLA SoC: NLA Mapping Cleanup While trying to fix the mapping conversions for repeat, I came across some limitations with the current (soon to be previous) mapping methods. Now the mapping conversions should work nicely for all places that use them. --- source/blender/blenkernel/BKE_nla.h | 17 +++++- source/blender/blenkernel/intern/anim_sys.c | 2 +- source/blender/blenkernel/intern/nla.c | 59 ++++++++++++------- source/blender/blenkernel/nla_private.h | 3 +- source/blender/editors/animation/anim_draw.c | 16 ++--- .../editors/space_action/action_edit.c | 6 +- .../editors/space_action/action_select.c | 12 ++-- .../blender/editors/space_graph/graph_edit.c | 8 +-- .../editors/space_graph/graph_select.c | 8 +-- source/blender/editors/space_nla/nla_edit.c | 6 +- .../editors/space_view3d/drawarmature.c | 4 +- source/blender/editors/transform/transform.c | 16 ++--- .../editors/transform/transform_conversions.c | 14 ++--- 13 files changed, 103 insertions(+), 68 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index cc73ac02690..e2b1dd89deb 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -73,7 +73,22 @@ void BKE_nla_action_pushdown(struct AnimData *adt); short BKE_nla_tweakmode_enter(struct AnimData *adt); void BKE_nla_tweakmode_exit(struct AnimData *adt); -float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short invert); +/* ----------------------------- */ +/* Time Mapping */ + +/* time mapping conversion modes */ +enum { + /* convert from global time to strip time - for evaluation */ + NLATIME_CONVERT_EVAL = 0, + /* convert from global time to strip time - for editing corrections */ + // XXX old 0 invert + NLATIME_CONVERT_UNMAP, + /* convert from strip time to global time */ + // xxx old 1 invert + NLATIME_CONVERT_MAP, +} eNlaTime_ConvertModes; + +float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short mode); #endif diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 288867505be..4c0c30fe5c1 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -604,7 +604,7 @@ static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) { /* firstly, analytically generate values for influence and time (if applicable) */ if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0) - strip->strip_time= nlastrip_get_frame(strip, ctime, 0); + strip->strip_time= nlastrip_get_frame(strip, ctime, NLATIME_CONVERT_EVAL); if ((strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) == 0) strip->influence= nlastrip_get_influence(strip, ctime); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 760139bee15..2b95584dc25 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -329,7 +329,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) /* non clipped mapping for strip-time <-> global time (for Action-Clips) * invert = convert action-strip time to global time */ -static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short invert) +static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short mode) { float actlength, repeat, scale; @@ -347,9 +347,20 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short /* reversed = play strip backwards */ if (strip->flag & NLASTRIP_FLAG_REVERSE) { - /* invert = convert action-strip time to global time */ - if (invert) - return scale*(strip->actend - cframe) + strip->start; // FIXME: this doesn't work for multiple repeats yet + // FIXME: this won't work right with Graph Editor? + if (mode == NLATIME_CONVERT_MAP) { + return strip->end - scale*(cframe - strip->actstart); + } + else if (mode == NLATIME_CONVERT_UNMAP) { + int repeatsNum = (int)((cframe - strip->start) / (actlength * scale)); + + /* this method doesn't clip the values to lie within the action range only + * - the '(repeatsNum * actlength * scale)' compensates for the fmod(...) + * - the fmod(...) works in the same way as for eval + */ + return strip->actend - (repeatsNum * actlength * scale) + - (fmod(cframe - strip->start, actlength*scale) / scale); + } else { if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { /* this case prevents the motion snapping back to the first frame at the end of the strip @@ -367,10 +378,20 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short } } else { - /* invert = convert action-strip time to global time */ - if (invert) - return scale*(cframe - strip->actstart) + strip->start; // FIXME: this doesn't work for mutiple repeats yet - else { + if (mode == NLATIME_CONVERT_MAP) { + return strip->start + scale*(cframe - strip->actstart); + } + else if (mode == NLATIME_CONVERT_UNMAP) { + int repeatsNum = (int)((cframe - strip->start) / (actlength * scale)); + + /* this method doesn't clip the values to lie within the action range only + * - the '(repeatsNum * actlength * scale)' compensates for the fmod(...) + * - the fmod(...) works in the same way as for eval + */ + return strip->actstart + (repeatsNum * actlength * scale) + + (fmod(cframe - strip->start, actlength*scale) / scale); + } + else /* if (mode == NLATIME_CONVERT_EVAL) */{ if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { /* this case prevents the motion snapping back to the first frame at the end of the strip * by catching the case where repeats is a whole number, which means that the end of the strip @@ -391,7 +412,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short /* non clipped mapping for strip-time <-> global time (for Transitions) * invert = convert action-strip time to global time */ -static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short invert) +static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short mode) { float length; @@ -400,15 +421,13 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short /* reversed = play strip backwards */ if (strip->flag & NLASTRIP_FLAG_REVERSE) { - /* invert = convert within-strip-time to global time */ - if (invert) + if (mode == NLATIME_CONVERT_MAP) return strip->end - (length * cframe); else return (strip->end - cframe) / length; } else { - /* invert = convert within-strip-time to global time */ - if (invert) + if (mode == NLATIME_CONVERT_MAP) return (length * cframe) + strip->start; else return (cframe - strip->start) / length; @@ -416,31 +435,31 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short } /* non clipped mapping for strip-time <-> global time - * invert = convert action-strip time to global time + * mode = eNlaTime_ConvertModes[] -> NLATIME_CONVERT_* * * only secure for 'internal' (i.e. within AnimSys evaluation) operations, * but should not be directly relied on for stuff which interacts with editors */ -float nlastrip_get_frame (NlaStrip *strip, float cframe, short invert) +float nlastrip_get_frame (NlaStrip *strip, float cframe, short mode) { switch (strip->type) { case NLASTRIP_TYPE_TRANSITION: /* transition */ - return nlastrip_get_frame_transition(strip, cframe, invert); + return nlastrip_get_frame_transition(strip, cframe, mode); case NLASTRIP_TYPE_CLIP: /* action-clip (default) */ default: - return nlastrip_get_frame_actionclip(strip, cframe, invert); + return nlastrip_get_frame_actionclip(strip, cframe, mode); } } /* Non clipped mapping for strip-time <-> global time - * invert = convert strip-time to global time + * mode = eNlaTime_ConvertModesp[] -> NLATIME_CONVERT_* * * Public API method - perform this mapping using the given AnimData block * and perform any necessary sanity checks on the value */ -float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short invert) +float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) { NlaStrip *strip; @@ -469,7 +488,7 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short invert) return cframe; /* perform the correction now... */ - return nlastrip_get_frame(strip, cframe, invert); + return nlastrip_get_frame(strip, cframe, mode); } /* *************************************************** */ diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h index af886fb7de8..1514a79f03b 100644 --- a/source/blender/blenkernel/nla_private.h +++ b/source/blender/blenkernel/nla_private.h @@ -73,6 +73,7 @@ typedef struct NlaEvalChannel { /* --------------- NLA Functions (not to be used as a proper API) ----------------------- */ /* convert from strip time <-> global time */ -float nlastrip_get_frame(NlaStrip *strip, float cframe, short invert); +float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode); + #endif // NLA_PRIVATE diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 6d079fe148a..f7702379645 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -270,8 +270,8 @@ void ANIM_nla_mapping_draw(gla2DDrawInfo *di, AnimData *adt, short restore) gla2DGetMap(di, &stored); map= stored; - map.xmin= BKE_nla_tweakedit_remap(adt, map.xmin, 0); - map.xmax= BKE_nla_tweakedit_remap(adt, map.xmax, 0); + map.xmin= BKE_nla_tweakedit_remap(adt, map.xmin, NLATIME_CONVERT_MAP); + map.xmax= BKE_nla_tweakedit_remap(adt, map.xmax, NLATIME_CONVERT_MAP); if (map.xmin == map.xmax) map.xmax += 1.0f; gla2DSetMap(di, &map); @@ -289,11 +289,11 @@ static short bezt_nlamapping_restore(BeztEditData *bed, BezTriple *bezt) /* adjust BezTriple handles only if allowed to */ if (only_keys == 0) { - bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], 0); - bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], 0); + bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], NLATIME_CONVERT_UNMAP); + bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], NLATIME_CONVERT_UNMAP); } - bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], 0); + bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], NLATIME_CONVERT_UNMAP); return 0; } @@ -307,11 +307,11 @@ static short bezt_nlamapping_apply(BeztEditData *bed, BezTriple *bezt) /* adjust BezTriple handles only if allowed to */ if (only_keys == 0) { - bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], 1); - bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], 1); + bezt->vec[0][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[0][0], NLATIME_CONVERT_MAP); + bezt->vec[2][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[2][0], NLATIME_CONVERT_MAP); } - bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], 1); + bezt->vec[1][0]= BKE_nla_tweakedit_remap(adt, bezt->vec[1][0], NLATIME_CONVERT_MAP); return 0; } diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 61dbc41e7c8..dd351c92cf2 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -121,8 +121,8 @@ static void get_keyframe_extents (bAnimContext *ac, float *min, float *max) calc_fcurve_range(fcu, &tmin, &tmax); if (adt) { - tmin= BKE_nla_tweakedit_remap(adt, tmin, 1); - tmax= BKE_nla_tweakedit_remap(adt, tmax, 1); + tmin= BKE_nla_tweakedit_remap(adt, tmin, NLATIME_CONVERT_MAP); + tmax= BKE_nla_tweakedit_remap(adt, tmax, NLATIME_CONVERT_MAP); } /* try to set cur using these values, if they're more extreme than previously set values */ @@ -406,7 +406,7 @@ static void insert_action_keys(bAnimContext *ac, short mode) /* adjust current frame for NLA-scaling */ if (adt) - cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); + cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra= (float)CFRA; diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 451d120ff9b..d45e32dd3bb 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -255,8 +255,8 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short if (ELEM(mode, ACTKEYS_BORDERSEL_FRAMERANGE, ACTKEYS_BORDERSEL_ALLKEYS)) { /* if channel is mapped in NLA, apply correction */ if (adt) { - bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); - bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, NLATIME_CONVERT_UNMAP); + bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, NLATIME_CONVERT_UNMAP); } else { bed.f1= rectf.xmin; @@ -504,7 +504,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) for (ce= bed.list.first; ce; ce= ce->next) { /* set frame for validation callback to refer to */ if (adt) - bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, NLATIME_CONVERT_UNMAP); else bed.f1= ce->cfra; @@ -707,7 +707,7 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se /* set frame for validation callback to refer to */ if (adt) - bed.f1= BKE_nla_tweakedit_remap(adt, selx, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, selx, NLATIME_CONVERT_UNMAP); else bed.f1= selx; @@ -779,8 +779,8 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, /* apply NLA-scaling correction? */ if (adt) { - xmin= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); - xmax= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); + xmin= BKE_nla_tweakedit_remap(adt, rectf.xmin, NLATIME_CONVERT_UNMAP); + xmax= BKE_nla_tweakedit_remap(adt, rectf.xmax, NLATIME_CONVERT_UNMAP); } else { xmin= rectf.xmin; diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index fc04308077c..e38c24ed223 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -123,8 +123,8 @@ static void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xm calc_fcurve_bounds(fcu, &txmin, &txmax, &tymin, &tymax); if (adt) { - txmin= BKE_nla_tweakedit_remap(adt, txmin, 1); - txmax= BKE_nla_tweakedit_remap(adt, txmax, 1); + txmin= BKE_nla_tweakedit_remap(adt, txmin, NLATIME_CONVERT_MAP); + txmax= BKE_nla_tweakedit_remap(adt, txmax, NLATIME_CONVERT_MAP); } /* try to set cur using these values, if they're more extreme than previously set values */ @@ -288,7 +288,7 @@ static void create_ghost_curves (bAnimContext *ac, int start, int end) /* use the sampling callback at 1-frame intervals from start to end frames */ for (cfra= start; cfra <= end; cfra++, fpt++) { - float cfrae= BKE_nla_tweakedit_remap(adt, cfra, 0); + float cfrae= BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP); fpt->vec[0]= cfrae; fpt->vec[1]= fcurve_samplingcb_evalcurve(fcu, NULL, cfrae); @@ -427,7 +427,7 @@ static int graphkeys_click_insert_exec (bContext *C, wmOperator *op) /* apply inverse NLA-mapping to frame to get correct time in un-scaled action */ adt= ANIM_nla_mapping_get(&ac, ale); - frame= BKE_nla_tweakedit_remap(adt, frame, 0); + frame= BKE_nla_tweakedit_remap(adt, frame, NLATIME_CONVERT_UNMAP); /* insert keyframe on the specified frame + value */ insert_vert_fcurve((FCurve *)ale->data, frame, val, 0); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index d600396fd77..afe66ed179e 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -238,8 +238,8 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho if (mode != BEZT_OK_VALUERANGE) { /* if channel is mapped in NLA, apply correction */ if (adt) { - bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, 0); - bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, rectf.xmin, NLATIME_CONVERT_UNMAP); + bed.f2= BKE_nla_tweakedit_remap(adt, rectf.xmax, NLATIME_CONVERT_UNMAP); } else { bed.f1= rectf.xmin; @@ -459,7 +459,7 @@ static void columnselect_graph_keys (bAnimContext *ac, short mode) for (ce= bed.list.first; ce; ce= ce->next) { /* set frame for validation callback to refer to */ if (ale) - bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, ce->cfra, NLATIME_CONVERT_UNMAP); else bed.f1= ce->cfra; @@ -841,7 +841,7 @@ static void graphkeys_mselect_column (bAnimContext *ac, int mval[2], short selec /* set frame for validation callback to refer to */ if (adt) - bed.f1= BKE_nla_tweakedit_remap(adt, selx, 0); + bed.f1= BKE_nla_tweakedit_remap(adt, selx, NLATIME_CONVERT_UNMAP); else bed.f1= selx; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index bcf3bd4746a..6d82e3d4be2 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -870,9 +870,9 @@ static short bezt_apply_nlamapping (BeztEditData *bed, BezTriple *bezt) NlaStrip *strip= (NlaStrip *)bed->data; /* adjust all the times */ - bezt->vec[0][0]= nlastrip_get_frame(strip, bezt->vec[0][0], 1); - bezt->vec[1][0]= nlastrip_get_frame(strip, bezt->vec[1][0], 1); - bezt->vec[2][0]= nlastrip_get_frame(strip, bezt->vec[2][0], 1); + bezt->vec[0][0]= nlastrip_get_frame(strip, bezt->vec[0][0], NLATIME_CONVERT_MAP); + bezt->vec[1][0]= nlastrip_get_frame(strip, bezt->vec[1][0], NLATIME_CONVERT_MAP); + bezt->vec[2][0]= nlastrip_get_frame(strip, bezt->vec[2][0], NLATIME_CONVERT_MAP); /* nothing to return or else we exit */ return 0; diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index a4332ea1709..0827bcaa9ae 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -2434,7 +2434,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base /* only within action range */ if (actframe+ctime >= start && actframe+ctime <= end) { - CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe+ctime, 1); + CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe+ctime, NLATIME_CONVERT_MAP); if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); @@ -2449,7 +2449,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base /* only within action range */ if ((actframe-ctime >= start) && (actframe-ctime <= end)) { - CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe-ctime, 1); + CFRA= (int)BKE_nla_tweakedit_remap(adt, actframe-ctime, NLATIME_CONVERT_MAP); if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index ded6edbbb0e..9d8371afd61 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4365,7 +4365,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* convert frame to nla-action time (if needed) */ if (adt) - val= BKE_nla_tweakedit_remap(adt, *(td->val), 1); + val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else val= *(td->val); @@ -4377,7 +4377,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* convert frame out of nla-action time */ if (adt) - *(td->val)= BKE_nla_tweakedit_remap(adt, val, 0); + *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); else *(td->val)= val; } @@ -4387,7 +4387,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* convert frame to nla-action time (if needed) */ if (adt) - val= BKE_nla_tweakedit_remap(adt, *(td->val), 1); + val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else val= *(td->val); @@ -4397,7 +4397,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* convert frame out of nla-action time */ if (adt) - *(td->val)= BKE_nla_tweakedit_remap(adt, val, 0); + *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); else *(td->val)= val; } @@ -4487,9 +4487,9 @@ static void applyTimeTranslate(TransInfo *t, float sval) deltax= (float)( floor(deltax + 0.5f) ); } - val = BKE_nla_tweakedit_remap(adt, td->ival, 1); + val = BKE_nla_tweakedit_remap(adt, td->ival, NLATIME_CONVERT_MAP); val += deltax; - *(td->val) = BKE_nla_tweakedit_remap(adt, val, 0); + *(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); } else { deltax = val = t->values[0]; @@ -4614,7 +4614,7 @@ static void applyTimeSlide(TransInfo *t, float sval) /* apply NLA-mapping to necessary values */ if (adt) - cval= BKE_nla_tweakedit_remap(adt, cval, 0); + cval= BKE_nla_tweakedit_remap(adt, cval, NLATIME_CONVERT_UNMAP); /* only apply to data if in range */ if ((sval > minx) && (sval < maxx)) { @@ -4726,7 +4726,7 @@ static void applyTimeScale(TransInfo *t) { /* check if any need to apply nla-mapping */ if (adt) - startx= BKE_nla_tweakedit_remap(adt, startx, 0); + startx= BKE_nla_tweakedit_remap(adt, startx, NLATIME_CONVERT_UNMAP); /* now, calculate the new value */ *(td->val) = td->ival - startx; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index d23f8fdfe40..b2afaac23de 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -3080,7 +3080,7 @@ static void createTransActionData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; @@ -3134,7 +3134,7 @@ static void createTransActionData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; @@ -3180,13 +3180,13 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, */ if (adt) { - td2d->loc[0] = BKE_nla_tweakedit_remap(adt, loc[0], 0); + td2d->loc[0] = BKE_nla_tweakedit_remap(adt, loc[0], NLATIME_CONVERT_UNMAP); td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; td->loc = td2d->loc; - td->center[0] = BKE_nla_tweakedit_remap(adt, cent[0], 0); + td->center[0] = BKE_nla_tweakedit_remap(adt, cent[0], NLATIME_CONVERT_UNMAP); td->center[1] = cent[1]; td->center[2] = 0.0f; @@ -3277,7 +3277,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; @@ -3336,7 +3336,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) * higher scaling ratios, but is faster than converting all points) */ if (adt) - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; @@ -3622,7 +3622,7 @@ void flushTransGraphData(TransInfo *t) /* we need to unapply the nla-scaling from the time in some situations */ if (adt) - td2d->loc2d[0]= BKE_nla_tweakedit_remap(adt, td2d->loc[0], 0); + td2d->loc2d[0]= BKE_nla_tweakedit_remap(adt, td2d->loc[0], NLATIME_CONVERT_UNMAP); else td2d->loc2d[0]= td2d->loc[0]; From 417aeb935a9a2ca94f54e177e92bc7b616e04458 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 28 Jun 2009 14:55:22 +0000 Subject: [PATCH 100/512] patch [#18950] Get/set bone and type of drivers by Alberto Torres Ruiz (dithi) --- quoting the patch submission This patchs adds the properties IpoCurve.driverBone and IpoCurve.driverBone2 and modifies IpoCurve.driverChannel to allow OB_ROT_DIFF. It sets the driver type to pose if IpoCurve.driverBone is not empty or None. Otherwise the driver type is set to object. Attached is the patch (with python doc) and an example .blend. It also fixes the confusing description of IpoCurve.driver --- source/blender/python/api2_2x/Ipocurve.c | 112 +++++++++++++++++- source/blender/python/api2_2x/doc/IpoCurve.py | 10 +- 2 files changed, 119 insertions(+), 3 deletions(-) diff --git a/source/blender/python/api2_2x/Ipocurve.c b/source/blender/python/api2_2x/Ipocurve.c index 5dfb52f2733..d286eda6904 100644 --- a/source/blender/python/api2_2x/Ipocurve.c +++ b/source/blender/python/api2_2x/Ipocurve.c @@ -89,10 +89,14 @@ static PyObject *IpoCurve_getDriverObject( C_IpoCurve * self); static int IpoCurve_setDriverObject( C_IpoCurve * self, PyObject * args ); static PyObject *IpoCurve_getDriverChannel( C_IpoCurve * self); static int IpoCurve_setDriverChannel( C_IpoCurve * self, PyObject * args ); +static PyObject *IpoCurve_getDriverBone( C_IpoCurve * self); +static PyObject *IpoCurve_getDriverBone2( C_IpoCurve * self); static PyObject *IpoCurve_getDriverExpression( C_IpoCurve * self); static PyObject *IpoCurve_getFlag( C_IpoCurve * self, void *type); static int IpoCurve_setFlag( C_IpoCurve * self, PyObject *value, void *type); +static int IpoCurve_setDriverBone( C_IpoCurve * self, PyObject * args ); +static int IpoCurve_setDriverBone2( C_IpoCurve * self, PyObject * args ); static int IpoCurve_setDriverExpression( C_IpoCurve * self, PyObject * args ); static PyObject *IpoCurve_getCurval( C_IpoCurve * self, PyObject * args ); static int IpoCurve_setCurval( C_IpoCurve * self, PyObject * key, @@ -159,6 +163,14 @@ static PyGetSetDef C_IpoCurve_getseters[] = { (getter)IpoCurve_getDriverChannel, (setter)IpoCurve_setDriverChannel, "The channel on the driver object used to drive the IpoCurve", NULL}, + {"driverBone", + (getter)IpoCurve_getDriverBone, (setter)IpoCurve_setDriverBone, + "The armature bone used to drive the IpoCurve", + NULL}, + {"driverBone2", + (getter)IpoCurve_getDriverBone2, (setter)IpoCurve_setDriverBone2, + "The second armature bone used to drive the IpoCurve (only with ROT_DIFF channel)", + NULL}, {"driverExpression", (getter)IpoCurve_getDriverExpression, (setter)IpoCurve_setDriverExpression, "The python expression on the driver used to drive the IpoCurve", @@ -912,7 +924,8 @@ static int IpoCurve_setDriverChannel( C_IpoCurve * self, PyObject * args ) param = (short)PyInt_AS_LONG ( args ); if( ( param >= OB_LOC_X && param <= OB_LOC_Z ) || ( param >= OB_ROT_X && param <= OB_ROT_Z ) - || ( param >= OB_SIZE_X && param <= OB_SIZE_Z ) ) { + || ( param >= OB_SIZE_X && param <= OB_SIZE_Z ) + || ( param == OB_ROT_DIFF && ipo->driver->blocktype==ID_AR ) ) { ipo->driver->adrcode = (short)PyInt_AS_LONG ( args ); return 0; } @@ -920,6 +933,102 @@ static int IpoCurve_setDriverChannel( C_IpoCurve * self, PyObject * args ) return EXPP_ReturnIntError( PyExc_ValueError, "invalid int argument" ); } +static PyObject *IpoCurve_getDriverBone( C_IpoCurve * self ) +{ + IpoCurve *ipo = self->ipocurve; + + if( ipo->driver && ipo->driver->type == IPO_DRIVER_TYPE_NORMAL && + ipo->driver->ob->type==OB_ARMATURE && + ipo->driver->blocktype==ID_AR ) + return PyString_FromString( ipo->driver->name ); + + Py_RETURN_NONE; +} + +static PyObject *IpoCurve_getDriverBone2( C_IpoCurve * self ) +{ + IpoCurve *ipo = self->ipocurve; + + if( ipo->driver && ipo->driver->type == IPO_DRIVER_TYPE_NORMAL && + ipo->driver->ob->type==OB_ARMATURE && + ipo->driver->blocktype==ID_AR ) + return PyString_FromString( ipo->driver->name+DRIVER_NAME_OFFS ); + + Py_RETURN_NONE; +} + +static int IpoCurve_setDriverBone( C_IpoCurve * self, PyObject * arg ) +{ + IpoCurve *ipo = self->ipocurve; + char *bone; /* bone name */ + + if( !ipo->driver ) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "This IpoCurve does not have an active driver" ); + + if (ipo->driver->type != IPO_DRIVER_TYPE_NORMAL || + ipo->driver->ob->type!=OB_ARMATURE) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "This driver is not of object type or object is not an armature" ); + + if(!PyString_Check(arg) && arg!=Py_None) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "expected a string argument or None" ); + + if( arg!=Py_None ){ + bone = PyString_AsString(arg); + if (strlen(bone)>31) + return EXPP_ReturnIntError( PyExc_ValueError, + "string is too long, use 31 characters or less" ); + + strcpy(ipo->driver->name, bone); + + if (strlen(bone)>0) + ipo->driver->blocktype=ID_AR; + else + ipo->driver->blocktype=ID_OB; + } else { + ipo->driver->name[0]=0; + ipo->driver->blocktype=ID_OB; + } + + return 0; +} + +static int IpoCurve_setDriverBone2( C_IpoCurve * self, PyObject * arg ) +{ + IpoCurve *ipo = self->ipocurve; + char *bone; /* bone name */ + + if( !ipo->driver ) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "This IpoCurve does not have an active driver" ); + + if (ipo->driver->type != IPO_DRIVER_TYPE_NORMAL || + ipo->driver->ob->type!=OB_ARMATURE) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "This driver is not of object type or object is not an armature" ); + + if(!PyString_Check(arg) && arg!=Py_None) + return EXPP_ReturnIntError( PyExc_RuntimeError, + "expected a string argument or None" ); + + if( arg!=Py_None ){ + bone = PyString_AsString(arg); + if (strlen(bone)>31) + return EXPP_ReturnIntError( PyExc_ValueError, + "string is too long, use 31 characters or less" ); + + strcpy(ipo->driver->name+DRIVER_NAME_OFFS, bone); + + } else { + ipo->driver->name[DRIVER_NAME_OFFS]=0; + } + + return 0; +} + + static PyObject *IpoCurve_getDriverExpression( C_IpoCurve * self ) { IpoCurve *ipo = self->ipocurve; @@ -1010,6 +1119,7 @@ PyObject *IpoCurve_Init( void ) PyModule_AddIntConstant( submodule, "SIZE_X", OB_SIZE_X ); PyModule_AddIntConstant( submodule, "SIZE_Y", OB_SIZE_Y ); PyModule_AddIntConstant( submodule, "SIZE_Z", OB_SIZE_Z ); + PyModule_AddIntConstant( submodule, "ROT_DIFF", OB_ROT_DIFF ); if( ExtendTypes ) PyModule_AddObject( submodule, "ExtendTypes", ExtendTypes ); diff --git a/source/blender/python/api2_2x/doc/IpoCurve.py b/source/blender/python/api2_2x/doc/IpoCurve.py index 850a1825325..c96dafe0625 100644 --- a/source/blender/python/api2_2x/doc/IpoCurve.py +++ b/source/blender/python/api2_2x/doc/IpoCurve.py @@ -50,10 +50,16 @@ class IpoCurve: the IPO Curve Editor window. Positive rotations are in a counter-clockwise direction, following the standard convention. - @ivar driver: Status of the driver. 1= on, 0= object, 2= python expression. + @ivar driver: Status of the driver. 1= object or armature/bone driver, 2= python expression, 0= no driver @type driver: int @ivar driverObject: Object used to drive the Ipo curve. @type driverObject: Blender Object or None + @ivar driverBone: Name of the armature bone used to drive the Ipo curve. + If empty or None, sets driver type to object, otherwise sets driver type to pose. [0 - 31 chars] + @type driverBone: string or None + @ivar driverBone2: Name of the second bone used to drive the Ipo curve. + Only to be used with ROT_DIFF channel. [0 - 31 chars] + @type driverBone2: string or None @ivar driverExpression: Python expression used to drive the Ipo curve. [0 - 127 chars] @type driverExpression: string @ivar sel: The selection state of this curve. @@ -61,7 +67,7 @@ class IpoCurve: @ivar driverChannel: Object channel used to drive the Ipo curve. Use module constants: IpoCurve.LOC_X, IpoCurve.LOC_Y, IpoCurve.LOC_Z, IpoCurve.ROT_X, IpoCurve.ROT_Y, IpoCurve.ROT_Z, IpoCurve.SIZE_X, - IpoCurve.SIZE_Y, IpoCurve.SIZE_Z + IpoCurve.SIZE_Y, IpoCurve.SIZE_Z, IpoCurve.ROT_DIFF (this last one is only for pose type drivers) @type driverChannel: int @ivar name: The IpoCurve data name. @type name: string From 26c7c01c32957f17a3f6cffb52975eddc7cd40f1 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 29 Jun 2009 01:00:35 +0000 Subject: [PATCH 101/512] NLA SoC: Lines are now drawn on action-clip strips for indicating the timing of repeats --- source/blender/editors/space_nla/nla_draw.c | 17 +++++++++++++++++ source/blender/makesrna/intern/rna_nla.c | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 51c1960c4c6..6d4f65fe249 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -293,6 +293,23 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 /* draw outline */ gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1); + /* if action-clip strip, draw lines delimiting repeats too (in the same colour */ + if ((strip->type == NLASTRIP_TYPE_CLIP) && IS_EQ(strip->repeat, 1.0f)==0) { + float repeatLen = (strip->actend - strip->actstart) * strip->scale; + int i; + + /* only draw lines for whole-numbered repeats, starting from the first full-repeat + * up to the last full repeat (but not if it lies on the end of the strip) + */ + for (i = 1; i < strip->repeat; i++) { + float repeatPos = strip->start + (repeatLen * i); + + /* don't draw if line would end up on or after the end of the strip */ + if (repeatPos < strip->end) + fdrawline(repeatPos, yminc, repeatPos, ymaxc); + } + } + /* reset linestyle */ setlinestyle(0); } diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 5dc624b67bc..965692212a5 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -288,7 +288,7 @@ void rna_def_nlastrip(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "repeat"); RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_repeat_set", NULL); RNA_def_property_range(prop, 0.1f, 1000.0f); /* these limits have currently be chosen arbitarily, but could be extended (minimum should still be > 0 though) if needed... */ - RNA_def_property_ui_text(prop, "Repeat", "Number of times to repeat the "); + RNA_def_property_ui_text(prop, "Repeat", "Number of times to repeat the action range."); prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "scale"); From b5a4492069d5d17d9c24f99f2056b14e51f1850c Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Mon, 29 Jun 2009 02:37:44 +0000 Subject: [PATCH 102/512] fix for bug while importing transparent faces: image.has_data can't be called before you load an image, otherwise it will return false even for valid images. The workaround is to try to run image.glLoad() before. That will crash if the image is corrupted (for we are using try/catch here). Campbell (ideasman42) thinks it would be better to have an api call proper for that. Since 2.4xx is close to its end I really don't think it's time to keep working in its API. Specially if we have similar functions doing what we need. @ Arystanbek (kazanbas): I'm done with the obj fixes I told you. You are free to go with the importers :) You may want to take a look at implementing a proper image.load() to 2.5 as Campbell suggested. --- release/scripts/import_obj.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/release/scripts/import_obj.py b/release/scripts/import_obj.py index a8c655ada48..81230bfcf03 100644 --- a/release/scripts/import_obj.py +++ b/release/scripts/import_obj.py @@ -125,6 +125,16 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_ image= obj_image_load(imagepath, DIR, IMAGE_SEARCH) has_data = image.has_data texture.image = image + + if not has_data: + try: + # first time using this image. We need to load it first + image.glLoad() + except: + # probably the image is crashed + pass + else: + has_data = image.has_data # Adds textures for materials (rendering) if type == 'Kd': From 2c3e8850a53020310a6a8f5c51b764ca261c24c0 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 29 Jun 2009 03:02:41 +0000 Subject: [PATCH 103/512] NLA SoC: Insert Keyframe Operator Tweaks (Anim Editor Versions) * Insert Keyframe (IKEY) operator for Graph Editor * Renamed the DopeSheet version to make it more consistent with the other keyframing operators --- .../editors/space_action/action_edit.c | 8 +- .../editors/space_action/action_header.c | 2 +- .../editors/space_action/action_intern.h | 2 +- .../blender/editors/space_action/action_ops.c | 4 +- .../blender/editors/space_graph/graph_edit.c | 98 ++++++++++++++++++- .../editors/space_graph/graph_header.c | 2 +- .../editors/space_graph/graph_intern.h | 1 + .../blender/editors/space_graph/graph_ops.c | 2 + 8 files changed, 109 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index dd351c92cf2..505ff18d7bd 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -433,10 +433,10 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) if (ac.datatype == ANIMCONT_GPENCIL) return OPERATOR_CANCELLED; - /* get snapping mode */ + /* what channels to affect? */ mode= RNA_enum_get(op->ptr, "type"); - /* snap keyframes */ + /* insert keyframes */ insert_action_keys(&ac, mode); /* validate keyframes after editing */ @@ -448,11 +448,11 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ACT_OT_insert (wmOperatorType *ot) +void ACT_OT_insert_keyframe (wmOperatorType *ot) { /* identifiers */ ot->name= "Insert Keyframes"; - ot->idname= "ACT_OT_insert"; + ot->idname= "ACT_OT_insert_keyframe"; /* api callbacks */ ot->invoke= WM_menu_invoke; diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 62e7a2d8e3f..b2614411002 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -211,7 +211,7 @@ static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - uiItemO(layout, NULL, 0, "ACT_OT_insert"); + uiItemO(layout, NULL, 0, "ACT_OT_insert_keyframe"); uiItemS(layout); diff --git a/source/blender/editors/space_action/action_intern.h b/source/blender/editors/space_action/action_intern.h index 6ccdc07421b..26655892176 100644 --- a/source/blender/editors/space_action/action_intern.h +++ b/source/blender/editors/space_action/action_intern.h @@ -83,7 +83,7 @@ void ACT_OT_view_all(struct wmOperatorType *ot); void ACT_OT_copy(struct wmOperatorType *ot); void ACT_OT_paste(struct wmOperatorType *ot); -void ACT_OT_insert(struct wmOperatorType *ot); +void ACT_OT_insert_keyframe(struct wmOperatorType *ot); void ACT_OT_duplicate(struct wmOperatorType *ot); void ACT_OT_delete(struct wmOperatorType *ot); void ACT_OT_clean(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index c023062453c..674506ddba0 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -79,7 +79,7 @@ void action_operatortypes(void) WM_operatortype_append(ACT_OT_clean); WM_operatortype_append(ACT_OT_delete); WM_operatortype_append(ACT_OT_duplicate); - WM_operatortype_append(ACT_OT_insert); + WM_operatortype_append(ACT_OT_insert_keyframe); WM_operatortype_append(ACT_OT_copy); WM_operatortype_append(ACT_OT_paste); @@ -142,7 +142,7 @@ static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "ACT_OT_delete", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "ACT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "ACT_OT_insert", IKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ACT_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0); /* copy/paste */ WM_keymap_add_item(keymap, "ACT_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index e38c24ed223..1fc4572b9c6 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -399,7 +399,103 @@ void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot) /* ************************************************************************** */ /* GENERAL STUFF */ -// TODO: insertkey +/* ******************** Insert Keyframes Operator ************************* */ + +/* defines for insert keyframes tool */ +EnumPropertyItem prop_graphkeys_insertkey_types[] = { + {1, "ALL", 0, "All Channels", ""}, + {2, "SEL", 0, "Only Selected Channels", ""}, + {0, NULL, 0, NULL, NULL} +}; + +/* this function is responsible for snapping keyframes to frame-times */ +static void insert_graph_keys(bAnimContext *ac, short mode) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + Scene *scene= ac->scene; + float cfra= (float)CFRA; + short flag = 0; + + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); + if (mode == 2) filter |= ANIMFILTER_SEL; + + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* init keyframing flag */ + if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX; + if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED; + // if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE; + + /* insert keyframes */ + for (ale= anim_data.first; ale; ale= ale->next) { + AnimData *adt= ANIM_nla_mapping_get(ac, ale); + FCurve *fcu= (FCurve *)ale->key_data; + + /* adjust current frame for NLA-mapping */ + if (adt) + cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); + else + cfra= (float)CFRA; + + /* if there's an id */ + if (ale->id) + insert_keyframe(ale->id, NULL, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag); + else + insert_vert_fcurve(fcu, cfra, fcu->curval, 0); + } + + BLI_freelistN(&anim_data); +} + +/* ------------------- */ + +static int graphkeys_insertkey_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + short mode; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + if (ac.datatype == ANIMCONT_GPENCIL) + return OPERATOR_CANCELLED; + + /* which channels to affect? */ + mode= RNA_enum_get(op->ptr, "type"); + + /* insert keyframes */ + insert_graph_keys(&ac, mode); + + /* validate keyframes after editing */ + ANIM_editkeyframes_refresh(&ac); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + + return OPERATOR_FINISHED; +} + +void GRAPH_OT_insert_keyframe (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Insert Keyframes"; + ot->idname= "GRAPH_OT_insert_keyframe"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= graphkeys_insertkey_exec; + ot->poll= ED_operator_ipo_active; // xxx + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* id-props */ + RNA_def_enum(ot->srna, "type", prop_graphkeys_insertkey_types, 0, "Type", ""); +} /* ******************** Click-Insert Keyframes Operator ************************* */ diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 0bd08625d68..b07bd4b0ded 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -201,7 +201,7 @@ static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - //uiItemO(layout, NULL, 0, "GRAPH_OT_insert"); + uiItemO(layout, NULL, 0, "GRAPH_OT_insert_keyframe"); uiItemO(layout, NULL, 0, "GRAPH_OT_fmodifier_add"); uiItemS(layout); diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index 93e3df1c728..d520a63c126 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -86,6 +86,7 @@ void GRAPH_OT_previewrange_set(struct wmOperatorType *ot); void GRAPH_OT_view_all(struct wmOperatorType *ot); void GRAPH_OT_click_insert(struct wmOperatorType *ot); +void GRAPH_OT_insert_keyframe(struct wmOperatorType *ot); void GRAPH_OT_copy(struct wmOperatorType *ot); void GRAPH_OT_paste(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index f7799023f34..012bfd944b4 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -132,6 +132,7 @@ void graphedit_operatortypes(void) WM_operatortype_append(GRAPH_OT_copy); WM_operatortype_append(GRAPH_OT_paste); + WM_operatortype_append(GRAPH_OT_insert_keyframe); WM_operatortype_append(GRAPH_OT_click_insert); /* F-Curve Modifiers */ @@ -209,6 +210,7 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "GRAPH_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); /* insertkey */ + WM_keymap_add_item(keymap, "GRAPH_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "GRAPH_OT_click_insert", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); /* copy/paste */ From 66c86278204a3b9fac090c36539ce8efcb2bf0ba Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 1 Jul 2009 01:17:58 +0000 Subject: [PATCH 104/512] NLA SoC: Renamed a few options for the Mirror operators since their purpose wasn't clear (in practice) --- .../blender/editors/space_action/action_edit.c | 8 ++++---- .../blender/editors/space_action/action_header.c | 16 ++++++++-------- source/blender/editors/space_graph/graph_edit.c | 8 ++++---- .../blender/editors/space_graph/graph_header.c | 16 ++++++++-------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 505ff18d7bd..910bcbef7e0 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -1198,10 +1198,10 @@ void ACT_OT_snap (wmOperatorType *ot) /* defines for mirror keyframes tool */ EnumPropertyItem prop_actkeys_mirror_types[] = { - {ACTKEYS_MIRROR_CFRA, "CFRA", 0, "Current frame", ""}, - {ACTKEYS_MIRROR_YAXIS, "YAXIS", 0, "Vertical Axis", ""}, - {ACTKEYS_MIRROR_XAXIS, "XAXIS", 0, "Horizontal Axis", ""}, - {ACTKEYS_MIRROR_MARKER, "MARKER", 0, "First Selected Marker", ""}, + {ACTKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current frame", ""}, + {ACTKEYS_MIRROR_YAXIS, "YAXIS", 0, "By Times over Time=0", ""}, + {ACTKEYS_MIRROR_XAXIS, "XAXIS", 0, "By Values over Value=0", ""}, + {ACTKEYS_MIRROR_MARKER, "MARKER", 0, "By Times over First Selected Marker", ""}, {0, NULL, 0, NULL, NULL} }; diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index b2614411002..f4bb5b335a4 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -167,18 +167,18 @@ static void act_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unus static void act_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, "To Current Frame", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_CFRA); - uiItemEnumO(layout, "To Nearest Frame", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_FRAME); - uiItemEnumO(layout, "To Nearest Second", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_SECOND); - uiItemEnumO(layout, "To Nearest Marker", 0, "ACT_OT_snap", "mode", ACTKEYS_SNAP_NEAREST_MARKER); + uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_CFRA); + uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_FRAME); + uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_SECOND); + uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_MARKER); } static void act_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, "Over Current Frame", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_CFRA); - uiItemEnumO(layout, "Over Vertical Axis", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_YAXIS); - uiItemEnumO(layout, "Over Horizontal Axis", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_XAXIS); - uiItemEnumO(layout, "Over Selected Marker", 0, "ACT_OT_mirror", "mode", ACTKEYS_MIRROR_MARKER); + uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_CFRA); + uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_YAXIS); + uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_XAXIS); + uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_MARKER); } static void act_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused) diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 1fc4572b9c6..4ea14a365e4 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -1581,10 +1581,10 @@ void GRAPH_OT_snap (wmOperatorType *ot) /* defines for mirror keyframes tool */ EnumPropertyItem prop_graphkeys_mirror_types[] = { - {GRAPHKEYS_MIRROR_CFRA, "CFRA", 0, "Current frame", ""}, - {GRAPHKEYS_MIRROR_YAXIS, "YAXIS", 0, "Vertical Axis", ""}, - {GRAPHKEYS_MIRROR_XAXIS, "XAXIS", 0, "Horizontal Axis", ""}, - {GRAPHKEYS_MIRROR_MARKER, "MARKER", 0, "First Selected Marker", ""}, + {GRAPHKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current frame", ""}, + {GRAPHKEYS_MIRROR_YAXIS, "YAXIS", 0, "By Times over Time=0", ""}, + {GRAPHKEYS_MIRROR_XAXIS, "XAXIS", 0, "By Values over Value=0", ""}, + {GRAPHKEYS_MIRROR_MARKER, "MARKER", 0, "By Times over First Selected Marker", ""}, {0, NULL, 0, NULL, NULL} }; diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index b07bd4b0ded..6c12b44f082 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -157,18 +157,18 @@ static void graph_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_un static void graph_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, "To Current Frame", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_CFRA); - uiItemEnumO(layout, "To Nearest Frame", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_FRAME); - uiItemEnumO(layout, "To Nearest Second", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_SECOND); - uiItemEnumO(layout, "To Nearest Marker", 0, "GRAPH_OT_snap", "mode", GRAPHKEYS_SNAP_NEAREST_MARKER); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_CFRA); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_FRAME); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_SECOND); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_MARKER); } static void graph_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemEnumO(layout, "Over Current Frame", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_CFRA); - uiItemEnumO(layout, "Over Vertical Axis", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_YAXIS); - uiItemEnumO(layout, "Over Horizontal Axis", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_XAXIS); - uiItemEnumO(layout, "Over Selected Marker", 0, "GRAPH_OT_mirror", "mode", GRAPHKEYS_MIRROR_MARKER); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_CFRA); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_YAXIS); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_XAXIS); + uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_MARKER); } static void graph_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused) From 8a35439e2364a40b828bd7e171707def0b107c8b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 1 Jul 2009 13:07:28 +0000 Subject: [PATCH 105/512] converting nurbs to a mesh ignored smoothing for Alt+C and from pythons getFromObject() --- source/blender/blenkernel/intern/mesh.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 77b9ea4fa2d..0c8cd1d9593 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -803,6 +803,8 @@ void nurbs_to_mesh(Object *ob) dl= cu->disp.first; while(dl) { + int smooth= dl->rt & CU_SMOOTH ? 1 : 0; + if(dl->type==DL_SEGM) { startvert= vertcount; a= dl->parts*dl->nr; @@ -819,6 +821,7 @@ void nurbs_to_mesh(Object *ob) for(b=1; bnr; b++) { mface->v1= startvert+ofs+b-1; mface->v2= startvert+ofs+b; + if(smooth) mface->flag |= ME_SMOOTH; mface++; } } @@ -843,6 +846,7 @@ void nurbs_to_mesh(Object *ob) mface->v1= startvert+ofs+b; if(b==dl->nr-1) mface->v2= startvert+ofs; else mface->v2= startvert+ofs+b+1; + if(smooth) mface->flag |= ME_SMOOTH; mface++; } } @@ -868,6 +872,7 @@ void nurbs_to_mesh(Object *ob) mface->v4= 0; test_index_face(mface, NULL, 0, 3); + if(smooth) mface->flag |= ME_SMOOTH; mface++; index+= 3; } @@ -915,6 +920,8 @@ void nurbs_to_mesh(Object *ob) mface->v4= p2; mface->mat_nr= (unsigned char)dl->col; test_index_face(mface, NULL, 0, 4); + + if(smooth) mface->flag |= ME_SMOOTH; mface++; p4= p3; From ede921fdfac1c76b8c54cae1723fbe9efd891939 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 01:01:18 +0000 Subject: [PATCH 106/512] NLA SoC: Proper poll callbacks for Graph Editor For now, some of these polls may be a bit too restrictive, but at least we have some unified+cleaned bases to work from now (instead of relying on the generic ED_operator_area_active). --- .../editors/space_graph/graph_buttons.c | 28 -- .../blender/editors/space_graph/graph_draw.c | 40 --- .../blender/editors/space_graph/graph_edit.c | 46 +-- .../editors/space_graph/graph_intern.h | 9 + .../blender/editors/space_graph/graph_ops.c | 2 +- .../editors/space_graph/graph_select.c | 8 +- .../blender/editors/space_graph/graph_utils.c | 288 ++++++++++++++++++ 7 files changed, 325 insertions(+), 96 deletions(-) create mode 100644 source/blender/editors/space_graph/graph_utils.c diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index ea4f017c9bb..f2dcd297866 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -1000,34 +1000,6 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) /* ******************* general ******************************** */ -/* Find 'active' F-Curve. It must be editable, since that's the purpose of these buttons (subject to change). - * We return the 'wrapper' since it contains valuable context info (about hierarchy), which will need to be freed - * when the caller is done with it. - */ -// TODO: move this to anim api with another name? -bAnimListElem *get_active_fcurve_channel (bAnimContext *ac) -{ - ListBase anim_data = {NULL, NULL}; - int filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_ACTIVE | ANIMFILTER_CURVESONLY); - int items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); - - /* We take the first F-Curve only, since some other ones may have had 'active' flag set - * if they were from linked data. - */ - if (items) { - bAnimListElem *ale= (bAnimListElem *)anim_data.first; - - /* remove first item from list, then free the rest of the list and return the stored one */ - BLI_remlink(&anim_data, ale); - BLI_freelistN(&anim_data); - - return ale; - } - - /* no active F-Curve */ - return NULL; -} - void graph_buttons_register(ARegionType *art) { PanelType *pt; diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 6393b6877b9..66168f2ed87 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -775,46 +775,6 @@ void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, Vie glDisable(GL_BLEND); } -/* check if any FModifiers to draw controls for - fcm is 'active' modifier */ -static short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm) -{ - /* don't draw if there aren't any modifiers at all */ - if (fcu->modifiers.first == NULL) - return 0; - - /* if there's an active modifier - don't draw if it doesn't drastically - * alter the curve... - */ - if (fcm) { - switch (fcm->type) { - /* clearly harmless */ - case FMODIFIER_TYPE_CYCLES: - return 0; - - /* borderline... */ - case FMODIFIER_TYPE_NOISE: - return 0; - } - } - - /* if only one modifier - don't draw if it is muted or disabled */ - if (fcu->modifiers.first == fcu->modifiers.last) { - fcm= fcu->modifiers.first; - if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) - return 0; - } - - /* if only active modifier - don't draw if it is muted or disabled */ - if (fcm) { - if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) - return 0; - } - - /* if we're still here, this means that there are modifiers with controls to be drawn */ - // FIXME: what happens if all the modifiers were muted/disabled - return 1; -} - /* This is called twice from space_graph.c -> graph_main_area_draw() * Unselected then selected F-Curves are drawn so that they do not occlude each other. */ diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 4ea14a365e4..ca47e69cc75 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -189,7 +189,7 @@ void GRAPH_OT_previewrange_set (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_previewrange_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -236,7 +236,7 @@ void GRAPH_OT_view_all (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_viewall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -347,7 +347,7 @@ void GRAPH_OT_ghost_curves_create (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_create_ghostcurves_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -390,7 +390,7 @@ void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_clear_ghostcurves_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_ipo_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -488,7 +488,7 @@ void GRAPH_OT_insert_keyframe (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_insertkey_exec; - ot->poll= ED_operator_ipo_active; // xxx + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -575,7 +575,7 @@ void GRAPH_OT_click_insert (wmOperatorType *ot) /* api callbacks */ ot->invoke= graphkeys_click_insert_invoke; ot->exec= graphkeys_click_insert_exec; - ot->poll= ED_operator_areaactive; // XXX active + editable poll + ot->poll= graphop_active_fcurve_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -657,7 +657,7 @@ void GRAPH_OT_copy (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_copy_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -696,7 +696,7 @@ void GRAPH_OT_paste (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_paste_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -764,7 +764,7 @@ void GRAPH_OT_duplicate (wmOperatorType *ot) /* api callbacks */ ot->invoke= graphkeys_duplicate_invoke; ot->exec= graphkeys_duplicate_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -825,7 +825,7 @@ void GRAPH_OT_delete (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_operator_confirm; ot->exec= graphkeys_delete_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -886,7 +886,7 @@ void GRAPH_OT_clean (wmOperatorType *ot) /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! ot->exec= graphkeys_clean_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -967,7 +967,7 @@ void GRAPH_OT_bake (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_operator_confirm; // FIXME... ot->exec= graphkeys_bake_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1092,7 +1092,7 @@ void GRAPH_OT_sample (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_sample_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1167,7 +1167,7 @@ void GRAPH_OT_extrapolation_type (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_expo_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1235,7 +1235,7 @@ void GRAPH_OT_interpolation_type (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_ipo_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1322,7 +1322,7 @@ void GRAPH_OT_handletype (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_handletype_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1411,7 +1411,7 @@ void GRAPH_OT_euler_filter (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_euler_filter_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1438,7 +1438,7 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *op) memset(&bed, 0, sizeof(BeztEditData)); /* loop over action data, averaging values */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); for (ale= anim_data.first; ale; ale= ale->next) { @@ -1476,7 +1476,7 @@ void GRAPH_OT_frame_jump (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_framejump_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1568,7 +1568,7 @@ void GRAPH_OT_snap (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_snap_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1679,7 +1679,7 @@ void GRAPH_OT_mirror (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graphkeys_mirror_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1732,7 +1732,7 @@ void GRAPH_OT_smooth (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_smooth_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_editable_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1795,7 +1795,7 @@ void GRAPH_OT_fmodifier_add (wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= graph_fmodifier_add_exec; - ot->poll= ED_operator_areaactive; // XXX need active F-Curve + ot->poll= graphop_active_fcurve_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index d520a63c126..fd7fe7cc6c9 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -141,8 +141,17 @@ void GRAPH_OT_ghost_curves_clear(struct wmOperatorType *ot); void GRAPH_OT_properties(struct wmOperatorType *ot); void graph_buttons_register(struct ARegionType *art); +/* ***************************************** */ +/* graph_utils.c */ + struct bAnimListElem *get_active_fcurve_channel(struct bAnimContext *ac); +short fcurve_needs_draw_fmodifier_controls(struct FCurve *fcu, struct FModifier *fcm); + +int graphop_visible_keyframes_poll(struct bContext *C); +int graphop_editable_keyframes_poll(struct bContext *C); +int graphop_active_fcurve_poll(struct bContext *C); + /* ***************************************** */ /* graph_ops.c */ void graphedit_keymap(struct wmWindowManager *wm); diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index 012bfd944b4..d5e93dafaf0 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -92,7 +92,7 @@ void GRAPH_OT_view_togglehandles (wmOperatorType *ot) /* callbacks */ ot->exec= view_toggle_handles_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_ipo_active; } /* ************************** registration - operator types **********************************/ diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index afe66ed179e..11af86ca83b 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -182,7 +182,7 @@ void GRAPH_OT_select_all_toggle (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_deselectall_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; @@ -316,7 +316,7 @@ void GRAPH_OT_select_border(wmOperatorType *ot) ot->exec= graphkeys_borderselect_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; @@ -506,7 +506,7 @@ void GRAPH_OT_select_column (wmOperatorType *ot) /* api callbacks */ ot->exec= graphkeys_columnselect_exec; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* flags */ ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; @@ -926,7 +926,7 @@ void GRAPH_OT_clickselect (wmOperatorType *ot) /* api callbacks */ ot->invoke= graphkeys_clickselect_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= graphop_visible_keyframes_poll; /* id-props */ // XXX should we make this into separate operators? diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c new file mode 100644 index 00000000000..b1ec795a089 --- /dev/null +++ b/source/blender/editors/space_graph/graph_utils.c @@ -0,0 +1,288 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_arithb.h" +#include "BLI_blenlib.h" +#include "BLI_editVert.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_action.h" +#include "BKE_context.h" +#include "BKE_curve.h" +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_fcurve.h" +#include "BKE_object.h" +#include "BKE_global.h" +#include "BKE_scene.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "ED_anim_api.h" +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "graph_intern.h" // own include + +/* ************************************************************** */ +/* Active F-Curve */ + +/* Find 'active' F-Curve. It must be editable, since that's the purpose of these buttons (subject to change). + * We return the 'wrapper' since it contains valuable context info (about hierarchy), which will need to be freed + * when the caller is done with it. + */ +bAnimListElem *get_active_fcurve_channel (bAnimContext *ac) +{ + ListBase anim_data = {NULL, NULL}; + int filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_ACTIVE | ANIMFILTER_CURVESONLY); + int items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* We take the first F-Curve only, since some other ones may have had 'active' flag set + * if they were from linked data. + */ + if (items) { + bAnimListElem *ale= (bAnimListElem *)anim_data.first; + + /* remove first item from list, then free the rest of the list and return the stored one */ + BLI_remlink(&anim_data, ale); + BLI_freelistN(&anim_data); + + return ale; + } + + /* no active F-Curve */ + return NULL; +} + +/* ************************************************************** */ +/* Operator Polling Callbacks */ + +/* check if any FModifiers to draw controls for - fcm is 'active' modifier + * used for the polling callbacks + also for drawing + */ +short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm) +{ + /* don't draw if there aren't any modifiers at all */ + if (fcu->modifiers.first == NULL) + return 0; + + /* if there's an active modifier - don't draw if it doesn't drastically + * alter the curve... + */ + if (fcm) { + switch (fcm->type) { + /* clearly harmless */ + case FMODIFIER_TYPE_CYCLES: + return 0; + + /* borderline... */ + case FMODIFIER_TYPE_NOISE: + return 0; + } + } + + /* if only one modifier - don't draw if it is muted or disabled */ + if (fcu->modifiers.first == fcu->modifiers.last) { + fcm= fcu->modifiers.first; + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if only active modifier - don't draw if it is muted or disabled */ + if (fcm) { + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if we're still here, this means that there are modifiers with controls to be drawn */ + // FIXME: what happens if all the modifiers were muted/disabled + return 1; +} + +/* ------------------- */ + +/* Check if there are any visible keyframes (for selection tools) */ +int graphop_visible_keyframes_poll (bContext *C) +{ + bAnimContext ac; + bAnimListElem *ale; + ListBase anim_data = {NULL, NULL}; + ScrArea *sa= CTX_wm_area(C); + int filter, items; + short found = 0; + + /* firstly, check if in Graph Editor */ + // TODO: also check for region? + if ((sa == NULL) || (sa->spacetype != SPACE_IPO)) + return 0; + + /* try to init Anim-Context stuff ourselves and check */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return 0; + + /* loop over the visible (selection doesn't matter) F-Curves, and see if they're suitable + * stopping on the first successful match + */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); + items = ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + if (items == 0) + return 0; + + for (ale = anim_data.first; ale; ale= ale->next) { + FCurve *fcu= (FCurve *)ale->data; + FModifier *fcm; + + /* visible curves for selection must fulfull the following criteria: + * - it has bezier keyframes + * - F-Curve modifiers do not interfere with the result too much + * (i.e. the modifier-control drawing check returns false) + */ + if (fcu->bezt == NULL) + continue; + fcm= fcurve_find_active_modifier(fcu); + + found= (fcurve_needs_draw_fmodifier_controls(fcu, fcm) == 0); + if (found) break; + } + + /* cleanup and return findings */ + BLI_freelistN(&anim_data); + return found; +} + +/* Check if there are any visible + editable keyframes (for editing tools) */ +int graphop_editable_keyframes_poll (bContext *C) +{ + bAnimContext ac; + bAnimListElem *ale; + ListBase anim_data = {NULL, NULL}; + ScrArea *sa= CTX_wm_area(C); + int filter, items; + short found = 0; + + /* firstly, check if in Graph Editor */ + // TODO: also check for region? + if ((sa == NULL) || (sa->spacetype != SPACE_IPO)) + return 0; + + /* try to init Anim-Context stuff ourselves and check */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return 0; + + /* loop over the editable (selected + editable) F-Curves, and see if they're suitable + * stopping on the first successful match + */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); + items = ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + if (items == 0) + return 0; + + for (ale = anim_data.first; ale; ale= ale->next) { + FCurve *fcu= (FCurve *)ale->data; + FModifier *fcm; + + /* editable curves must fulfull the following criteria: + * - it has bezier keyframes + * - it must not be protected from editing (this is already checked for with the foredit flag + * - F-Curve modifiers do not interfere with the result too much + * (i.e. the modifier-control drawing check returns false) + */ + if (fcu->bezt == NULL) + continue; + fcm= fcurve_find_active_modifier(fcu); + + found= (fcurve_needs_draw_fmodifier_controls(fcu, fcm) == 0); + if (found) break; + } + + /* cleanup and return findings */ + BLI_freelistN(&anim_data); + return found; +} + +/* has active F-Curve that's editable */ +int graphop_active_fcurve_poll (bContext *C) +{ + bAnimContext ac; + bAnimListElem *ale; + ScrArea *sa= CTX_wm_area(C); + short has_fcurve= 0; + + /* firstly, check if in Graph Editor */ + // TODO: also check for region? + if ((sa == NULL) || (sa->spacetype != SPACE_IPO)) + return 0; + + /* try to init Anim-Context stuff ourselves and check */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return 0; + + /* try to get the Active F-Curve */ + ale= get_active_fcurve_channel(&ac); + if (ale == NULL) + return 0; + + /* free temp data... */ + has_fcurve= ((ale->data) && (ale->type == ANIMTYPE_FCURVE)); + MEM_freeN(ale); + + /* return success */ + return has_fcurve; +} + +/* ************************************************************** */ From 1588de008a7c9c80d193034c0f8b4dc766620a38 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 02:12:37 +0000 Subject: [PATCH 107/512] NLA SoC: Separated 'Built-In Function Generator' FModifier into a separate FModifier Started cleaning up FModifiers in preparation for allowing them to be used on NLA Strips. This commit separates the 'Built-in Function' mode for the Generator modifier out into its own modifier, since it was being quite frequently used (and the RNA wrapping for this used to be quite hackish). BACKWARDS COMPATABILITY WARNING: Old files with FModifiers saved (i.e. old 2.5 files, but not any others) will not load correctly as a result of these changes (the wrong modifiers will be shown). I've decided that there are not likely to be many files affected by this yet, but doing this will result in a much nicer modifiers-define list in the long run. --- source/blender/blenkernel/intern/fcurve.c | 256 +++++++++--------- .../editors/space_graph/graph_buttons.c | 129 +++------ .../editors/space_graph/graph_intern.h | 2 + source/blender/makesdna/DNA_anim_types.h | 45 ++- source/blender/makesrna/RNA_access.h | 2 +- source/blender/makesrna/intern/rna_fcurve.c | 109 ++------ 6 files changed, 231 insertions(+), 312 deletions(-) diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 27ca6332cdc..e52c63d1b21 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1,5 +1,5 @@ /** - * $Id: fcurve.c 21023 2009-06-20 04:02:49Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -1314,11 +1314,6 @@ static FModifierTypeInfo FMI_MODNAME = { * 1) simple polynomial generator: * - Exanded form - (y = C[0]*(x^(n)) + C[1]*(x^(n-1)) + ... + C[n]) * - Factorised form - (y = (C[0][0]*x + C[0][1]) * (C[1][0]*x + C[1][1]) * ... * (C[n][0]*x + C[n][1])) - * 2) simple builin 'functions': - * of the form (y = C[0] * fn( C[1]*x + C[2] ) + C[3]) - * where fn() can be any one of: - * sin, cos, tan, ln, sqrt - * 3) expression... */ static void fcm_generator_free (FModifier *fcm) @@ -1408,45 +1403,11 @@ static void fcm_generator_verify (FModifier *fcm) data->coefficients= nc; data->arraysize= data->poly_order * 2; } - } - break; - - case FCM_GENERATOR_FUNCTION: /* builtin function */ - { - /* arraysize needs to be 4*/ - if (data->arraysize != 4) { - float *nc; - - /* free the old data */ - if (data->coefficients) - MEM_freeN(data->coefficients); - - /* make new coefficients array, and init using default values */ - nc= data->coefficients= MEM_callocN(sizeof(float)*4, "FMod_Generator_Coefs"); - data->arraysize= 4; - - nc[0]= 1.0f; - nc[1]= 1.0f; - nc[2]= 0.0f; - nc[3]= 0.0f; - } } break; } } -/* Unary 'normalised sine' function - * y = sin(PI + x) / (PI * x), - * except for x = 0 when y = 1. - */ -static double sinc (double x) -{ - if (fabs(x) < 0.0001) - return 1.0; - else - return sin(M_PI * x) / (M_PI * x); -} - static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) { FMod_Generator *data= (FMod_Generator *)fcm->data; @@ -1509,86 +1470,6 @@ static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, } } break; - - case FCM_GENERATOR_FUNCTION: /* builtin function */ - { - double arg= data->coefficients[1]*evaltime + data->coefficients[2]; - double (*fn)(double v) = NULL; - - /* get function pointer to the func to use: - * WARNING: must perform special argument validation hereto guard against crashes - */ - switch (data->func_type) - { - /* simple ones */ - case FCM_GENERATOR_FN_SIN: /* sine wave */ - fn= sin; - break; - case FCM_GENERATOR_FN_COS: /* cosine wave */ - fn= cos; - break; - case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ - fn= sinc; - break; - - /* validation required */ - case FCM_GENERATOR_FN_TAN: /* tangent wave */ - { - /* check that argument is not on one of the discontinuities (i.e. 90deg, 270 deg, etc) */ - if IS_EQ(fmod((arg - M_PI_2), M_PI), 0.0) { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - else - fn= tan; - } - break; - case FCM_GENERATOR_FN_LN: /* natural log */ - { - /* check that value is greater than 1? */ - if (arg > 1.0f) { - fn= log; - } - else { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - } - break; - case FCM_GENERATOR_FN_SQRT: /* square root */ - { - /* no negative numbers */ - if (arg > 0.0f) { - fn= sqrt; - } - else { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - } - break; - - default: - printf("Invalid Function-Generator for F-Modifier - %d \n", data->func_type); - } - - /* execute function callback to set value if appropriate */ - if (fn) { - float value= (float)(data->coefficients[0]*fn(arg) + data->coefficients[3]); - - if (data->flag & FCM_GENERATOR_ADDITIVE) - *cvalue += value; - else - *cvalue= value; - } - } - break; - -#ifndef DISABLE_PYTHON - case FCM_GENERATOR_EXPRESSION: /* py-expression */ - // TODO... - break; -#endif /* DISABLE_PYTHON */ } } @@ -1607,6 +1488,128 @@ static FModifierTypeInfo FMI_GENERATOR = { fcm_generator_evaluate /* evaluate */ }; +/* Built-In Function Generator F-Curve Modifier --------------------------- */ + +/* This uses the general equation for equations: + * y = amplitude * fn(phase_multiplier*x + phase_offset) + y_offset + * + * where amplitude, phase_multiplier/offset, y_offset are user-defined coefficients, + * x is the evaluation 'time', and 'y' is the resultant value + * + * Functions available are + * sin, cos, tan, sinc (normalised sin), natural log, square root + */ + +static void fcm_fn_generator_new_data (void *mdata) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)mdata; + + /* set amplitude and phase multiplier to 1.0f so that something is generated */ + data->amplitude= 1.0f; + data->phase_multiplier= 1.0f; +} + +/* Unary 'normalised sine' function + * y = sin(PI + x) / (PI * x), + * except for x = 0 when y = 1. + */ +static double sinc (double x) +{ + if (fabs(x) < 0.0001) + return 1.0; + else + return sin(M_PI * x) / (M_PI * x); +} + +static void fcm_fn_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; + double arg= data->phase_multiplier*evaltime + data->phase_offset; + double (*fn)(double v) = NULL; + + /* get function pointer to the func to use: + * WARNING: must perform special argument validation hereto guard against crashes + */ + switch (data->type) + { + /* simple ones */ + case FCM_GENERATOR_FN_SIN: /* sine wave */ + fn= sin; + break; + case FCM_GENERATOR_FN_COS: /* cosine wave */ + fn= cos; + break; + case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ + fn= sinc; + break; + + /* validation required */ + case FCM_GENERATOR_FN_TAN: /* tangent wave */ + { + /* check that argument is not on one of the discontinuities (i.e. 90deg, 270 deg, etc) */ + if IS_EQ(fmod((arg - M_PI_2), M_PI), 0.0) { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + else + fn= tan; + } + break; + case FCM_GENERATOR_FN_LN: /* natural log */ + { + /* check that value is greater than 1? */ + if (arg > 1.0f) { + fn= log; + } + else { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + } + break; + case FCM_GENERATOR_FN_SQRT: /* square root */ + { + /* no negative numbers */ + if (arg > 0.0f) { + fn= sqrt; + } + else { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + } + break; + + default: + printf("Invalid Function-Generator for F-Modifier - %d \n", data->type); + } + + /* execute function callback to set value if appropriate */ + if (fn) { + float value= (float)(data->amplitude*fn(arg) + data->value_offset); + + if (data->flag & FCM_GENERATOR_ADDITIVE) + *cvalue += value; + else + *cvalue= value; + } +} + +static FModifierTypeInfo FMI_FN_GENERATOR = { + FMODIFIER_TYPE_FN_GENERATOR, /* type */ + sizeof(FMod_FunctionGenerator), /* size */ + FMI_TYPE_GENERATE_CURVE, /* action type */ + FMI_REQUIRES_NOTHING, /* requirements */ + "Built-In Function", /* name */ + "FMod_FunctionGenerator", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + fcm_fn_generator_new_data, /* new data */ + NULL, /* verify */ + NULL, /* evaluate time */ + fcm_fn_generator_evaluate /* evaluate */ +}; + /* Envelope F-Curve Modifier --------------------------- */ static void fcm_envelope_free (FModifier *fcm) @@ -2081,12 +2084,13 @@ static void fmods_init_typeinfo () { fmodifiersTypeInfo[0]= NULL; /* 'Null' F-Curve Modifier */ fmodifiersTypeInfo[1]= &FMI_GENERATOR; /* Generator F-Curve Modifier */ - fmodifiersTypeInfo[2]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */ - fmodifiersTypeInfo[3]= &FMI_CYCLES; /* Cycles F-Curve Modifier */ - fmodifiersTypeInfo[4]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */ - fmodifiersTypeInfo[5]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented - fmodifiersTypeInfo[6]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */ - fmodifiersTypeInfo[7]= &FMI_LIMITS; /* Limits F-Curve Modifier */ + fmodifiersTypeInfo[2]= &FMI_FN_GENERATOR; /* Built-In Function Generator F-Curve Modifier */ + fmodifiersTypeInfo[3]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */ + fmodifiersTypeInfo[4]= &FMI_CYCLES; /* Cycles F-Curve Modifier */ + fmodifiersTypeInfo[5]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */ + fmodifiersTypeInfo[6]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented + fmodifiersTypeInfo[7]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */ + fmodifiersTypeInfo[8]= &FMI_LIMITS; /* Limits F-Curve Modifier */ } /* This function should be used for getting the appropriate type-info when only diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index f2dcd297866..e68ee53521d 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -404,8 +404,7 @@ static void delete_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) { FMod_Generator *data= (FMod_Generator *)fcm->data; - char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1|Built-In Function%x2|Expression%x3"; - char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; + char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1"; int cy= *yco - 30; uiBut *but; @@ -418,22 +417,16 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ (*height) += 20 * data->poly_order + 15; break; - case FCM_GENERATOR_FUNCTION: /* builtin function */ - (*height) += 55; // xxx - break; - case FCM_GENERATOR_EXPRESSION: /* py-expression */ - // xxx nothing to draw - break; } /* basic settings (backdrop + mode selector + some padding) */ DRAW_BACKDROP((*height)); uiBlockBeginAlign(block); - but= uiDefButS(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); + but= uiDefButI(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); cy -= 20; - uiDefButBitS(block, TOG, FCM_GENERATOR_ADDITIVE, B_FMODIFIER_REDRAW, "Additive", 10,cy,width-30,19, &data->flag, 0, 0, 0, 0, "Values generated by this modifier are applied on top of the existing values instead of overwriting them"); + uiDefButBitI(block, TOG, FCM_GENERATOR_ADDITIVE, B_FMODIFIER_REDRAW, "Additive", 10,cy,width-30,19, &data->flag, 0, 0, 0, 0, "Values generated by this modifier are applied on top of the existing values instead of overwriting them"); cy -= 35; uiBlockEndAlign(block); @@ -446,7 +439,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm unsigned int i; /* draw polynomial order selector */ - but= uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); cy -= 35; @@ -481,7 +474,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm unsigned int i; /* draw polynomial order selector */ - but= uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); cy -= 35; @@ -510,82 +503,42 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm } } break; - - case FCM_GENERATOR_FUNCTION: /* built-in function */ - { - float *cp= data->coefficients; - - /* draw function selector */ - but= uiDefButS(block, MENU, B_FMODIFIER_REDRAW, fn_type, 10,cy,width-30,19, &data->func_type, 0, 0, 0, 0, "Built-In Function to use"); - uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); - cy -= 35; - - /* draw controls for equation of coefficients */ - /* row 1 */ - { - uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp+3, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (D) for function"); - uiDefBut(block, LABEL, 1, "+", 200, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - cy -= 20; - } - - /* row 2 */ - { - char func_name[32]; - - /* coefficient outside bracket */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5, cy, 80, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (A) for function"); - - /* opening bracket */ - switch (data->func_type) - { - case FCM_GENERATOR_FN_SIN: /* sine wave */ - sprintf(func_name, "sin("); - break; - case FCM_GENERATOR_FN_COS: /* cosine wave */ - sprintf(func_name, "cos("); - break; - case FCM_GENERATOR_FN_TAN: /* tangent wave */ - sprintf(func_name, "tan("); - break; - case FCM_GENERATOR_FN_LN: /* natural log */ - sprintf(func_name, "ln("); - break; - case FCM_GENERATOR_FN_SQRT: /* square root */ - sprintf(func_name, "sqrt("); - break; - case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ - sprintf(func_name, "sinc("); - break; - default: /* unknown */ - sprintf(func_name, "("); - break; - } - uiDefBut(block, LABEL, 1, func_name, 85, cy, 40, 20, NULL, 0.0, 0.0, 0, 0, ""); - - /* coefficients inside bracket */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 120, cy, 75, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (B) of x"); - - uiDefBut(block, LABEL, 1, "x+", 195, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 225, cy, 80, 20, cp+2, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (C) of function"); - - /* closing bracket */ - uiDefBut(block, LABEL, 1, ")", 300, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - cy -= 20; - } - } - break; - - case FCM_GENERATOR_EXPRESSION: /* py-expression */ - // TODO... - break; } } /* --------------- */ +/* draw settings for noise modifier */ +static void draw_modifier__fn_generator(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; + int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; + + /* set the height */ + (*height) = 80; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + uiDefButI(block, MENU, B_FMODIFIER_REDRAW, fn_type, + 3, cy, 300, 20, &data->type, 0, 0, 0, 0, "Type of function used to generate values"); + + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Amplitude:", + 3, cy1, 150, 20, &data->amplitude, 0.000001, 10000.0, 0.01, 3, "Scale factor determining the maximum/minimum values."); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Value Offset:", + 3, cy2, 150, 20, &data->value_offset, 0.0, 10000.0, 0.01, 3, "Constant factor to offset values by."); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Multiplier:", + 155, cy1, 150, 20, &data->phase_multiplier, 0.0, 100000.0, 0.1, 3, "Scale factor determining the 'speed' of the function."); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Offset:", + 155, cy2, 150, 20, &data->phase_offset, 0.0, 100000.0, 0.1, 3, "Constant factor to offset time by for function."); + +} + +/* --------------- */ + /* draw settings for cycles modifier */ static void draw_modifier__cycles(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) { @@ -621,7 +574,7 @@ static void draw_modifier__noise(uiBlock *block, FCurve *fcu, FModifier *fcm, in { FMod_Noise *data= (FMod_Noise *)fcm->data; int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - char cyc_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; + char blend_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; /* set the height */ (*height) = 80; @@ -629,8 +582,8 @@ static void draw_modifier__noise(uiBlock *block, FCurve *fcu, FModifier *fcm, in /* basic settings (backdrop + some padding) */ DRAW_BACKDROP((*height)); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, - 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of modifying the existing F-Curve use before first keyframe"); + uiDefButS(block, MENU, B_FMODIFIER_REDRAW, blend_mode, + 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of combining the results of this modifier and other modifiers."); uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:", 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, ""); @@ -946,6 +899,10 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc draw_modifier__generator(block, fcu, fcm, yco, &height, width, active, rb_col); break; + case FMODIFIER_TYPE_FN_GENERATOR: /* Built-In Function Generator */ + draw_modifier__fn_generator(block, fcu, fcm, yco, &height, width, active, rb_col); + break; + case FMODIFIER_TYPE_CYCLES: /* Cycles */ draw_modifier__cycles(block, fcu, fcm, yco, &height, width, active, rb_col); break; diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index fd7fe7cc6c9..86e5451122d 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -32,6 +32,8 @@ struct bContext; struct wmWindowManager; struct bAnimContext; struct bAnimListElem; +struct FCurve; +struct FModifier; struct SpaceIpo; struct ScrArea; struct ARegion; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 2b089530236..ad3edde6552 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -1,5 +1,5 @@ /** - * $Id: DNA_anim_types.h 21023 2009-06-20 04:02:49Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -66,6 +66,7 @@ typedef struct FModifier { enum { FMODIFIER_TYPE_NULL = 0, FMODIFIER_TYPE_GENERATOR, + FMODIFIER_TYPE_FN_GENERATOR, FMODIFIER_TYPE_ENVELOPE, FMODIFIER_TYPE_CYCLES, FMODIFIER_TYPE_NOISE, /* unimplemented - generate variations using some basic noise generator... */ @@ -91,39 +92,55 @@ enum { /* --- */ -/* generator modifier data */ +/* Generator modifier data */ typedef struct FMod_Generator { - /* generator based on PyExpression */ - char expression[256]; /* python expression to use as generator */ - /* general generator information */ float *coefficients; /* coefficients array */ unsigned int arraysize; /* size of the coefficients array */ - short poly_order; /* order of polynomial generated (i.e. 1 for linear, 2 for quadratic) */ - short func_type; /* builtin math function eFMod_Generator_Functions */ - - int pad; + int poly_order; /* order of polynomial generated (i.e. 1 for linear, 2 for quadratic) */ + int mode; /* which 'generator' to use eFMod_Generator_Modes */ /* settings */ - short flag; /* settings */ - short mode; /* which 'generator' to use eFMod_Generator_Modes */ + int flag; /* settings */ } FMod_Generator; /* generator modes */ enum { FCM_GENERATOR_POLYNOMIAL = 0, FCM_GENERATOR_POLYNOMIAL_FACTORISED, - FCM_GENERATOR_FUNCTION, - FCM_GENERATOR_EXPRESSION, } eFMod_Generator_Modes; -/* generator flags */ + +/* generator flags + * - shared by Generator and Function Generator + */ enum { /* generator works in conjunction with other modifiers (i.e. doesn't replace those before it) */ FCM_GENERATOR_ADDITIVE = (1<<0), } eFMod_Generator_Flags; + +/* 'Built-In Function' Generator modifier data + * + * This uses the general equation for equations: + * y = amplitude * fn(phase_multiplier*x + phase_offset) + y_offset + * + * where amplitude, phase_multiplier/offset, y_offset are user-defined coefficients, + * x is the evaluation 'time', and 'y' is the resultant value + */ +typedef struct FMod_FunctionGenerator { + /* coefficients for general equation (as above) */ + float amplitude; + float phase_multiplier; + float phase_offset; + float value_offset; + + /* flags */ + int type; /* eFMod_Generator_Functions */ + int flag; /* eFMod_Generator_flags */ +} FMod_FunctionGenerator; + /* 'function' generator types */ enum { FCM_GENERATOR_FN_SIN = 0, diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index dda0d57f8ad..cf74a863401 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -177,8 +177,8 @@ extern StructRNA RNA_FCurve; extern StructRNA RNA_FModifier; extern StructRNA RNA_FModifierCycles; extern StructRNA RNA_FModifierEnvelope; +extern StructRNA RNA_FModifierFunctionGenerator; extern StructRNA RNA_FModifierGenerator; -extern StructRNA RNA_FModifierGenerator_Function; extern StructRNA RNA_FModifierGenerator_PolyExpanded; extern StructRNA RNA_FModifierLimits; extern StructRNA RNA_FModifierNoise; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index a1cd95c9d90..4a83b80a6cf 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -37,6 +37,7 @@ EnumPropertyItem fmodifier_type_items[] = { {FMODIFIER_TYPE_NULL, "NULL", 0, "Invalid", ""}, {FMODIFIER_TYPE_GENERATOR, "GENERATOR", 0, "Generator", ""}, + {FMODIFIER_TYPE_FN_GENERATOR, "FNGENERATOR", 0, "Built-In Function", ""}, {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", 0, "Envelope", ""}, {FMODIFIER_TYPE_CYCLES, "CYCLES", 0, "Cycles", ""}, {FMODIFIER_TYPE_NOISE, "NOISE", 0, "Noise", ""}, @@ -47,62 +48,6 @@ EnumPropertyItem fmodifier_type_items[] = { #ifdef RNA_RUNTIME -float FModGenFunc_amplitude_get(PointerRNA *ptr) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - return (data->coefficients) ? (float)data->coefficients[0] : 1.0f; -} - -void FModGenFunc_amplitude_set(PointerRNA *ptr, float value) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - if (data->coefficients) data->coefficients[0]= value; -} - -float FModGenFunc_pre_multiplier_get(PointerRNA *ptr) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - return (data->coefficients) ? (float)data->coefficients[1] : 1.0f; -} - -void FModGenFunc_pre_multiplier_set(PointerRNA *ptr, float value) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - if (data->coefficients) data->coefficients[1]= value; -} - -float FModGenFunc_x_offset_get(PointerRNA *ptr) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - return (data->coefficients) ? (float)data->coefficients[2] : 0.0f; -} - -void FModGenFunc_x_offset_set(PointerRNA *ptr, float value) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - if (data->coefficients) data->coefficients[2]= value; -} - -float FModGenFunc_y_offset_get(PointerRNA *ptr) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - return (data->coefficients) ? (float)data->coefficients[3] : 0.0f; -} - -void FModGenFunc_y_offset_set(PointerRNA *ptr, float value) -{ - FModifier *fcm = (FModifier *)(ptr->data); - FMod_Generator *data= (FMod_Generator*)(fcm->data); - if (data->coefficients) data->coefficients[3]= value; -} - /* --------- */ StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) @@ -118,13 +63,12 @@ StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) case FCM_GENERATOR_POLYNOMIAL: return &RNA_FModifierGenerator_PolyExpanded; //case FCM_GENERATOR_POLYNOMIAL_FACTORISED: - case FCM_GENERATOR_FUNCTION: - return &RNA_FModifierGenerator_Function; - //case FCM_GENERATOR_EXPRESSION: default: return &RNA_FModifierGenerator; } } + case FMODIFIER_TYPE_FN_GENERATOR: + return &RNA_FModifierFunctionGenerator; case FMODIFIER_TYPE_ENVELOPE: return &RNA_FModifierEnvelope; case FMODIFIER_TYPE_CYCLES: @@ -222,8 +166,6 @@ static void rna_def_fmodifier_generator_common(StructRNA *srna) static EnumPropertyItem prop_mode_items[] = { {FCM_GENERATOR_POLYNOMIAL, "POLYNOMIAL", 0, "Expanded Polynomial", ""}, {FCM_GENERATOR_POLYNOMIAL_FACTORISED, "POLYNOMIAL_FACTORISED", 0, "Factorised Polynomial", ""}, - {FCM_GENERATOR_FUNCTION, "FUNCTION", 0, "Built-In Function", ""}, - {FCM_GENERATOR_EXPRESSION, "EXPRESSION", 0, "Expression", ""}, {0, NULL, 0, NULL, NULL}}; /* struct wrapping settings */ @@ -273,7 +215,7 @@ static void rna_def_fmodifier_generator_polyexpanded(BlenderRNA *brna) //RNA_def_property_ui_text(prop, "Coefficients", "Coefficients for 'x' (starting from lowest power)."); } -static void rna_def_fmodifier_generator_function(BlenderRNA *brna) +static void rna_def_fmodifier_function_generator(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; @@ -286,35 +228,32 @@ static void rna_def_fmodifier_generator_function(BlenderRNA *brna) {4, "LN", 0, "Natural Logarithm", ""}, {5, "SINC", 0, "Normalised Sine", "sin(x) / x"}, {0, NULL, 0, NULL, NULL}}; - - srna= RNA_def_struct(brna, "FModifierGenerator_Function", "FModifier"); - RNA_def_struct_ui_text(srna, "Built-In Function Generator", "Generates values for modified F-Curve using Built-In Function."); - - /* common settings */ - rna_def_fmodifier_generator_common(srna); - - /* type */ - prop= RNA_def_property(srna, "func_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, prop_type_items); - RNA_def_property_ui_text(prop, "Type", "Type of Built-In function to use as generator."); + srna= RNA_def_struct(brna, "FModifierFunctionGenerator", "FModifier"); + RNA_def_struct_ui_text(srna, "Built-In Function F-Curve Modifier", "Generates values using a Built-In Function."); + RNA_def_struct_sdna_from(srna, "FMod_FunctionGenerator", "data"); /* coefficients */ prop= RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "FModGenFunc_amplitude_get", "FModGenFunc_amplitude_set", NULL); - RNA_def_property_ui_text(prop, "Amplitude", "Scale factor for y-values generated by the function."); + RNA_def_property_ui_text(prop, "Amplitude", "Scale factor determining the maximum/minimum values."); - prop= RNA_def_property(srna, "pre_multiplier", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "FModGenFunc_pre_multiplier_get", "FModGenFunc_pre_multiplier_set", NULL); - RNA_def_property_ui_text(prop, "PreMultiplier", "Scale factor for x-value inputs to function."); + prop= RNA_def_property(srna, "phase_multiplier", PROP_FLOAT, PROP_NONE); + RNA_def_property_ui_text(prop, "Phase Multiplier", "Scale factor determining the 'speed' of the function."); - prop= RNA_def_property(srna, "x_offset", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "FModGenFunc_x_offset_get", "FModGenFunc_x_offset_set", NULL); - RNA_def_property_ui_text(prop, "X Offset", "Offset for x-value inputs to function."); + prop= RNA_def_property(srna, "phase_offset", PROP_FLOAT, PROP_NONE); + RNA_def_property_ui_text(prop, "Phase Offset", "Constant factor to offset time by for function."); - prop= RNA_def_property(srna, "y_offset", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "FModGenFunc_y_offset_get", "FModGenFunc_y_offset_set", NULL); - RNA_def_property_ui_text(prop, "Y Offset", "Offset for y-values generated by the function."); + prop= RNA_def_property(srna, "value_offset", PROP_FLOAT, PROP_NONE); + RNA_def_property_ui_text(prop, "Value Offset", "Constant factor to offset values by."); + + /* flags */ + prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE); + RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them."); + + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, prop_type_items); + RNA_def_property_ui_text(prop, "Type", "Type of built-in function to use."); } /* --------- */ @@ -646,7 +585,7 @@ void RNA_def_fcurve(BlenderRNA *brna) rna_def_fmodifier_generator(brna); rna_def_fmodifier_generator_polyexpanded(brna); - rna_def_fmodifier_generator_function(brna); + rna_def_fmodifier_function_generator(brna); rna_def_fmodifier_envelope(brna); rna_def_fmodifier_cycles(brna); rna_def_fmodifier_python(brna); From 78939898c735d6f2048e9fc2aa64a3188ff5732f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 02:53:18 +0000 Subject: [PATCH 108/512] NLA SoC: Adding some files that seem to have been missed during some merges. Hopefully all of these should really be in the repositry... --- release/scripts/animation_clean.py | 192 ++ release/scripts/image_2d_cutout.py | 559 ++++ release/scripts/object_active_to_other.py | 58 + .../scripttemplate_gamelogic_module.py | 45 + release/scripts/textplugin_convert_ge.py | 863 +++++ release/scripts/wizard_bolt_factory.py | 2804 +++++++++++++++++ release/scripts/wizard_landscape_ant.py | 2148 +++++++++++++ release/ui/space_sequencer.py | 559 ++++ .../Converter/BL_ModifierDeformer.cpp | 183 ++ .../Converter/BL_ModifierDeformer.h | 107 + source/gameengine/Ketsji/KX_PythonSeq.cpp | 382 +++ source/gameengine/Ketsji/KX_PythonSeq.h | 60 + source/gameengine/PyDoc/API_intro.py | 103 + source/gameengine/SceneGraph/SG_DList.h | 161 + source/gameengine/SceneGraph/SG_QList.h | 157 + 15 files changed, 8381 insertions(+) create mode 100644 release/scripts/animation_clean.py create mode 100644 release/scripts/image_2d_cutout.py create mode 100644 release/scripts/object_active_to_other.py create mode 100644 release/scripts/scripttemplate_gamelogic_module.py create mode 100644 release/scripts/textplugin_convert_ge.py create mode 100644 release/scripts/wizard_bolt_factory.py create mode 100644 release/scripts/wizard_landscape_ant.py create mode 100644 release/ui/space_sequencer.py create mode 100644 source/gameengine/Converter/BL_ModifierDeformer.cpp create mode 100644 source/gameengine/Converter/BL_ModifierDeformer.h create mode 100644 source/gameengine/Ketsji/KX_PythonSeq.cpp create mode 100644 source/gameengine/Ketsji/KX_PythonSeq.h create mode 100644 source/gameengine/PyDoc/API_intro.py create mode 100644 source/gameengine/SceneGraph/SG_DList.h create mode 100644 source/gameengine/SceneGraph/SG_QList.h diff --git a/release/scripts/animation_clean.py b/release/scripts/animation_clean.py new file mode 100644 index 00000000000..fc44f264ac1 --- /dev/null +++ b/release/scripts/animation_clean.py @@ -0,0 +1,192 @@ +#!BPY + +""" +Name: 'Clean Animation Curves' +Blender: 249 +Group: 'Animation' +Tooltip: 'Remove unused keyframes for ipo curves' +""" + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Copyright (C) 2008-2009: Blender Foundation +# +# 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, +# -------------------------------------------------------------------------- + +import bpy +from Blender import IpoCurve, Draw, Window + +def clean_ipos(ipos): + eul = 0.001 + + def isflat(vec): + prev_y = vec[0][1] + mid_y = vec[1][1] + next_y = vec[2][1] + + # flat status for prev and next + return abs(mid_y-prev_y) < eul, abs(mid_y-next_y) < eul + + + + X=0 + Y=1 + PREV=0 + MID=1 + NEXT=2 + + LEFT = 0 + RIGHT = 1 + + TOT = 0 + TOTBEZ = 0 + # for ipo in bpy.data.ipos: + for ipo in ipos: + if ipo.lib: + continue + # print ipo + for icu in ipo: + interp = icu.interpolation + extend = icu.extend + + bezierPoints = icu.bezierPoints + bezierVecs = [bez.vec for bez in bezierPoints] + + l = len(bezierPoints) + + TOTBEZ += l + + # our aim is to simplify this ipo as much as possible! + if interp == IpoCurve.InterpTypes.BEZIER or interp == interp == IpoCurve.InterpTypes.LINEAR: + #print "Not yet supported" + + if interp == IpoCurve.InterpTypes.BEZIER: + flats = [isflat(bez) for bez in bezierVecs] + else: + # A bit of a waste but fake the locations for these so they will always be flats + # IS better then too much duplicate code. + flats = [(True, True)] * l + for v in bezierVecs: + v[PREV][Y] = v[NEXT][Y] = v[MID][Y] + + + # remove middle points + if l>2: + done_nothing = False + + while not done_nothing and len(bezierVecs) > 2: + done_nothing = True + i = l-2 + + while i > 0: + #print i + #print i, len(bezierVecs) + if flats[i]==(True,True) and flats[i-1][RIGHT] and flats[i+1][LEFT]: + + if abs(bezierVecs[i][MID][Y] - bezierVecs[i-1][MID][Y]) < eul and abs(bezierVecs[i][MID][Y] - bezierVecs[i+1][MID][Y]) < eul: + done_nothing = False + + del flats[i] + del bezierVecs[i] + icu.delBezier(i) + TOT += 1 + l-=1 + i-=1 + + # remove endpoints + if extend == IpoCurve.ExtendTypes.CONST and len(bezierVecs) > 1: + #print l, len(bezierVecs) + # start + + while l > 2 and (flats[0][RIGHT] and flats[1][LEFT] and (abs(bezierVecs[0][MID][Y] - bezierVecs[1][MID][Y]) < eul)): + print "\tremoving 1 point from start of the curve" + del flats[0] + del bezierVecs[0] + icu.delBezier(0) + TOT += 1 + l-=1 + + + # End + while l > 2 and flats[-2][RIGHT] and flats[-1][LEFT] and (abs(bezierVecs[-2][MID][Y] - bezierVecs[-1][MID][Y]) < eul): + print "\tremoving 1 point from end of the curve", l + del flats[l-1] + del bezierVecs[l-1] + icu.delBezier(l-1) + TOT += 1 + l-=1 + + + + if l==2: + if isflat( bezierVecs[0] )[RIGHT] and isflat( bezierVecs[1] )[LEFT] and abs(bezierVecs[0][MID][Y] - bezierVecs[1][MID][Y]) < eul: + # remove the second point + print "\tremoving 1 point from 2 point bez curve" + # remove the second point + del flats[1] + del bezierVecs[1] + icu.delBezier(1) + TOT+=1 + l-=1 + + # Change to linear for faster evaluation + ''' + if l==1: + print 'Linear' + icu.interpolation = IpoCurve.InterpTypes.LINEAR + ''' + + + + + if interp== IpoCurve.InterpTypes.CONST: + print "Not yet supported" + + print 'total', TOT, TOTBEZ + return TOT, TOTBEZ + +def main(): + ret = Draw.PupMenu('Clean Selected Objects Ipos%t|Object IPO%x1|Object Action%x2|%l|All IPOs (be careful!)%x3') + + sce = bpy.data.scenes.active + ipos = [] + + if ret == 3: + ipos.extend(list(bpy.data.ipos)) + else: + for ob in sce.objects.context: + if ret == 1: + ipo = ob.ipo + if ipo: + ipos.append(ipo) + + elif ret == 2: + action = ob.action + if action: + ipos.extend([ipo for ipo in action.getAllChannelIpos().values() if ipo]) + + + + if not ipos: + Draw.PupMenu('Error%t|No ipos found') + else: + total_removed, total = clean_ipos(ipos) + Draw.PupMenu('Done!%t|Removed ' + str(total_removed) + ' of ' + str(total) + ' points') + + Window.RedrawAll() + + +if __name__ == '__main__': + main() diff --git a/release/scripts/image_2d_cutout.py b/release/scripts/image_2d_cutout.py new file mode 100644 index 00000000000..16d0805256b --- /dev/null +++ b/release/scripts/image_2d_cutout.py @@ -0,0 +1,559 @@ +#!BPY + +""" +Name: '2D Cutout Image Importer' +Blender: 249 +Group: 'Image' +Tooltip: 'Batch UV Map images to Planes' +""" + +__author__ = "Kevin Morgan (forTe)" +__url__ = ("Home page, http://gamulabs.freepgs.com") +__version__ = "1.2.1" +__bpydoc__ = """\ +This Script will take an image and +UV map it to a plane sharing the same width to height ratio as the image. +Import options allow for the image to be a still or sequence type image +

+Imports can be single images or whole directories of images depending on the chosen +option. +""" + +#################################################### +#Copyright (C) 2008: Kevin Morgan +#################################################### +#-------------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 3 of the License, or +#(at your option) any later version. +# +#This program is distributed in the hopes 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, see . +#################################################### +#################################################### +#V1.0 +#Basic Functionality +#Published June 28, 2007 +#################################################### +#V1.1 +#Added Support for enabling viewport transparency +#Added more options to the UI for materials +#Added Proportionality code (Pixels per unit) +#Added GPL License Block +#Published June 29, 2007 +#################################################### +#V1.2 +#Added Support for Copying Existing Materials +#Import Images as Sequences +#Refreshed GUI - now with more clutter :( +#Miscellaneous and Housekeeping +#Published June 16, 2008 +#################################################### +#V1.2.1 +#Added Extend Texture Mode option at request of a user +#Published September 24, 2008 +#################################################### + +import Blender +from Blender import BGL, Draw, Image, Mesh, Material, Texture, Window +from Blender.Mathutils import * +import bpy + +# Global Constants +DIR = 0 +SINGLE = 1 +CUROFFS = 0 + +# GUI CONSTANTS +NO_EVT = 0 +SINGLE_IMG = 1 +DIRECTORY_IMG = 2 +CLR_PATH = 3 +CHG_EXT = 4 +EXIT = 5 +DO_SCRIPT = 6 + +VERSIONSTRING = '1.2.1' + +# Note the two parameter dicts could be combined, I just, liked them seperate... +# GUI Buttons Dict +GUIPARAMS = { + 'Path': Draw.Create(''), + 'ImageExt': Draw.Create(''), + 'Seq': Draw.Create(0), + 'PackImage': Draw.Create(0), + 'PPU': Draw.Create(50), + 'VPTransp': Draw.Create(1), + 'XOff': Draw.Create(0.0), + 'YOff': Draw.Create(0.0), + 'ZOff': Draw.Create(0.0), + 'CopyMat': Draw.Create(0), + 'MatId': Draw.Create(0), + 'MatCol': Draw.Create(1.0, 0.0, 0.0), + 'Ref': Draw.Create(0.8), + 'Spec': Draw.Create(0.5), + 'Hard': Draw.Create(50), + 'Alpha': Draw.Create(1.0), + 'ZTransp': Draw.Create(1), + 'Shadeless': Draw.Create(0), + 'TexChan': Draw.Create(1), + 'MPTCol': Draw.Create(1), + 'MPTAlpha': Draw.Create(1), + 'UseAlpha': Draw.Create(1), + 'CalcAlpha': Draw.Create(0), + 'ExtendMode': Draw.Create(0), + 'AutoRefresh': Draw.Create(0), + 'Cyclic': Draw.Create(0), + 'Frames': Draw.Create(100), + 'Offs': Draw.Create(0), + 'StartFr': Draw.Create(1), + 'RedrawImp': Draw.Create(0) +} + +# Script Execution Paramaters +PARAMS = { + 'ImagePaths': [], # Path to images to import + 'ImportType': SINGLE, # Import a Directory or a Single Image? + 'ImageProp': Image.Sources.STILL, # What sources for the image, still or sequence + 'PackImage': 0, # Pack the Image(s)? + 'PPU': 20, # Pixels Per Blender Unit + 'MakeTransp': 1, # Make face transparent in viewport + + 'NewMat': 1, # If true make a new material, otherwise duplicate an existing one, replacing appropriate attributes + 'MaterialId': 0, # ID to take from the Materials list upon copy + 'Materials': None, # Materials in Scene + 'MatProps': {'Col': [1.0, 0.0, 0.0], 'Shadeless': 1, 'Ref': 0.5, 'Spec': 0.5, 'Hard': 200, 'Alpha': 1.0, 'ZTransp': 1}, + + 'TexProps': {'UseAlpha': 1, 'CalcAlpha': 0, 'ExtendMode': 0}, # Texture Properties + 'TexChannel': 0, # Texture Channel + 'TexMapTo': {'Col': 1, 'Alpha': 1}, # Map to Col and/or Alpha + 'SeqProps': {'AutoRefresh': 0, 'Cyclic': 0, 'Frames': 100, 'Offs': 0, 'StartFr': 1}, + 'ObOffset': Vector(1, 0, 0) # Offset by this vector upon creation for multifile import +} + +# Get the Active Scene, of course +scn = bpy.data.scenes.active + +########################################## +# MAIN SCRIPT FUNCTIONS +########################################## + +def imgImport(imgPath): + global CUROFFS, PARAMS + ###################################### + # Load the image + ###################################### + try: + img = Image.Load(imgPath) + imgDimensions = img.getSize() # do this to ensure the data is available + except: + Blender.Draw.PupMenu('Error%t|Unsupported image format for "'+ imgPath.split('\\')[-1].split('/')[-1] +'"') + return + + if PARAMS['PackImage']: + img.pack() + name = Blender.sys.makename(imgPath, strip = 1) + + ###################################### + # Construct the mesh + ###################################### + + me = Mesh.New(name) + + # Calculate Dimensions from Image Size + dim = [float(i)/PARAMS['PPU'] for i in imgDimensions] + v = [[dim[0], dim[1], 0], [-dim[0], dim[1], 0], [-dim[0], -dim[1], 0], [dim[0], -dim[1], 0]] + me.verts.extend(v) + me.faces.extend([0, 1, 2, 3]) + + me.faces[0].image = img + me.faces[0].uv = [Vector(1.0, 1.0), Vector(0.0, 1.0), Vector(0.0, 0.0), Vector(1.0, 0.0)] + + if PARAMS['MakeTransp']: + me.faces[0].transp = Mesh.FaceTranspModes.ALPHA + + ###################################### + # Modify the Material + ###################################### + + mat = None + if not PARAMS['NewMat']: + mat = PARAMS['Materials'][PARAMS['MaterialId']].__copy__() + mat.setName(name) + else: + mat = Material.New(name) + properties = PARAMS['MatProps'] + mat.setRGBCol(properties['Col']) + mat.setRef(properties['Ref']) + mat.setSpec(properties['Spec']) + mat.setHardness(properties['Hard']) + mat.setAlpha(properties['Alpha']) + + if properties['Shadeless']: + mat.mode |= Material.Modes.SHADELESS + if properties['ZTransp']: + mat.mode |= Material.Modes.ZTRANSP + + properties = PARAMS['TexProps'] + + tex = Texture.New(name) + tex.setType('Image') + tex.setImage(img) + if properties['UseAlpha']: + tex.useAlpha = Texture.ImageFlags.USEALPHA + + if properties['CalcAlpha']: + tex.calcAlpha = Texture.ImageFlags.CALCALPHA + + if properties['ExtendMode']: + tex.setExtend('Extend') + + if PARAMS['ImageProp'] == Image.Sources.SEQUENCE: + properties = PARAMS['SeqProps'] + + img.source = PARAMS['ImageProp'] # Needs to be done here, otherwise an error with earlier getSize() + + tex.animStart = properties['StartFr'] + tex.animOffset = properties['Offs'] + tex.animFrames = properties['Frames'] + tex.autoRefresh = properties['AutoRefresh'] + tex.cyclic = properties['Cyclic'] + + texMapSetters = Texture.TexCo.UV + + # PARAMS['TexMapTo']['Col'] (and alpha) will either be 0 or 1 because its from a toggle, otherwise this line doesn't work + texChanSetters = Texture.MapTo.COL * PARAMS['TexMapTo']['Col'] | Texture.MapTo.ALPHA * PARAMS['TexMapTo']['Alpha'] + + mat.setTexture(PARAMS['TexChannel'], tex, texMapSetters, texChanSetters) + me.materials += [mat] + + ###################################### + # Object Construction + ###################################### + + ob = scn.objects.new(me, name) + p = Vector(ob.getLocation()) # Should be the origin, but just to be safe, get it + ob.setLocation((CUROFFS * PARAMS['ObOffset']) + p) + + return + +def translateParams(): + # Translates (or assigns for the most part) GUI values to those that can be read by the + # Import Function + + global GUIPARAMS, PARAMS + + if GUIPARAMS['Seq'].val and PARAMS['ImportType'] != DIR: + PARAMS['ImageProp'] = Image.Sources.SEQUENCE + + PARAMS['PackImage'] = GUIPARAMS['PackImage'].val + PARAMS['PPU'] = GUIPARAMS['PPU'].val + PARAMS['MakeTransp'] = GUIPARAMS['VPTransp'].val + PARAMS['ObOffset'] = Vector(GUIPARAMS['XOff'].val, GUIPARAMS['YOff'].val, GUIPARAMS['ZOff'].val) + + PARAMS['NewMat'] = not GUIPARAMS['CopyMat'].val + PARAMS['MaterialId'] = GUIPARAMS['MatId'].val + PARAMS['MatProps']['Col'] = list(GUIPARAMS['MatCol'].val) + PARAMS['MatProps']['Ref'] = GUIPARAMS['Ref'].val + PARAMS['MatProps']['Spec'] = GUIPARAMS['Spec'].val + PARAMS['MatProps']['Hard'] = GUIPARAMS['Hard'].val + PARAMS['MatProps']['Alpha'] = GUIPARAMS['Alpha'].val + PARAMS['MatProps']['ZTransp'] = GUIPARAMS['ZTransp'].val + PARAMS['MatProps']['Shadeless'] = GUIPARAMS['Shadeless'].val + + PARAMS['TexChannel'] = GUIPARAMS['TexChan'].val - 1 #Channels are 0-9, but GUI shows 1-10 + PARAMS['TexProps']['UseAlpha'] = GUIPARAMS['UseAlpha'].val + PARAMS['TexProps']['CalcAlpha'] = GUIPARAMS['CalcAlpha'].val + PARAMS['TexProps']['ExtendMode'] = GUIPARAMS['ExtendMode'].val + PARAMS['TexMapTo']['Col'] = GUIPARAMS['MPTCol'].val + PARAMS['TexMapTo']['Alpha'] = GUIPARAMS['MPTAlpha'].val + + PARAMS['SeqProps']['AutoRefresh'] = GUIPARAMS['AutoRefresh'].val + PARAMS['SeqProps']['Cyclic'] = GUIPARAMS['Cyclic'].val + PARAMS['SeqProps']['Frames'] = GUIPARAMS['Frames'].val + PARAMS['SeqProps']['Offs'] = GUIPARAMS['Offs'].val + PARAMS['SeqProps']['StartFr'] = GUIPARAMS['StartFr'].val + return + +def doScript(): + # Main script Function + # Consists of choosing between 2 loops, one with a redraw, one without, see comments for why + + global CUROFFS + + translateParams() + + total = len(PARAMS['ImagePaths']) + broken = 0 + + if GUIPARAMS['RedrawImp'].val: # Reduces the need to compare on every go through the loop + for i, path in enumerate(PARAMS['ImagePaths']): + CUROFFS = i # Could be passed to the import Function, but I chose a global instead + Window.DrawProgressBar(float(i)/total, "Importing %i of %i Images..." %(i+1, total)) + imgImport(path) + Blender.Redraw() + if Blender.Get('version') >= 246: + if Window.TestBreak(): + broken = 1 + break + else: + for i, path in enumerate(PARAMS['ImagePaths']): + CUROFFS = i + Window.DrawProgressBar(float(i)/total, "Importing %i of %i Images..." %(i+1, total)) + imgImport(path) + if Blender.Get('version') >= 246: + if Window.TestBreak(): + broken = 1 + break + + if broken: + Window.DrawProgressBar(1.0, "Script Execution Aborted") + else: + Window.DrawProgressBar(1.0, "Finished Importing") + + Blender.Redraw() # Force a refresh, since the user may have chosen to not refresh as they go along + + return + +########################################## +# PATH SETTERS AND CHANGERS +########################################## + +def setSinglePath(filename): + global GUIPARAMS, PARAMS + GUIPARAMS['Path'].val = filename + PARAMS['ImagePaths'] = [filename] + return + +def setDirPath(filename): + global GUIPARAMS, PARAMS + + try: + import os + except: + Draw.PupMenu('Full install of python required to be able to set Directory Paths') + Draw.Exit() + return + + path = os.path.dirname(filename) # Blender.sys.dirname fails on '/' + GUIPARAMS['Path'].val = path + + ext_lower = GUIPARAMS['ImageExt'].val.lower() + for f in os.listdir(path): + if f.lower().endswith(ext_lower): + PARAMS['ImagePaths'].append(os.path.join(path, f)) + + return + +def changeExtension(): + global GUIPARAMS, PARAMS + + if PARAMS['ImportType'] == SINGLE: + return + + try: + import os + except: + Draw.PupMenu('Full install of python required to be able to set Directory Paths') + Draw.Exit() + return + + PARAMS['ImagePaths'] = [] + + ext_lower = GUIPARAMS['ImageExt'].val.lower() + for f in os.listdir(GUIPARAMS['Path'].val): + if f.lower().endswith(ext_lower): + PARAMS['ImagePaths'].append(os.path.join(GUIPARAMS['Path'].val, f)) + + return + +########################################## +# INTERFACE FUNCTIONS +########################################## +def compileMaterialList(): + # Pretty straight forward, just grabs the materials in the blend file and constructs + # an appropriate string for use as a menu + + mats = [mat for mat in bpy.data.materials] + PARAMS['Materials'] = mats + title = 'Materials%t|' + menStrs = [mat.name + '%x' + str(i) + '|' for i, mat in enumerate(mats)] + return title + ''.join(menStrs) + +def event(evt, val): + # Disabled, since Esc is often used from the file browser + #if evt == Draw.ESCKEY: + # Draw.Exit() + + return + +def bevent(evt): + global GUIPARAMS, PARAMS + + if evt == NO_EVT: + Draw.Redraw() + + elif evt == SINGLE_IMG: + Window.FileSelector(setSinglePath, 'Image', Blender.sys.expandpath('//')) + Draw.Redraw() + PARAMS['ImportType'] = SINGLE + + elif evt == DIRECTORY_IMG: + Window.FileSelector(setDirPath, 'Directory', Blender.sys.expandpath('//')) + Draw.Redraw() + PARAMS['ImportType'] = DIR + + elif evt == CLR_PATH: + GUIPARAMS['Path'].val = '' + PARAMS['ImagePaths'] = [] + GUIPARAMS['ImageExt'].val = '' + Draw.Redraw() + + elif evt == CHG_EXT: + changeExtension() + Draw.Redraw() + + elif evt == EXIT: + Draw.Exit() + + elif evt == DO_SCRIPT: + doScript() + + else: + print "ERROR: UNEXPECTED BUTTON EVENT" + + return + +# GUI Colors ###### +ScreenColor = [0.7, 0.7, 0.7] +BackgroundColor = [0.8, 0.8, 0.8] +TitleBG = [0.6, 0.6, 0.6] +TitleCol = [1.0, 1.0, 1.0] +ErrCol = [1.0, 0.0, 0.0] +TextCol = [0.4, 0.4, 0.5] +################### + +def GUI(): + global GUIPARAMS, PARAMS + + BGL.glClearColor(*(ScreenColor + [1.0])) + BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) + + minx = 5 + maxx = 500 + miny = 5 + maxy = 450 + + lineheight = 24 + buPad = 5 # Generic Button Padding, most buttons should have 24-19 (or 5) px space around them + + lP = 5 # Left Padding + rP = 5 # Right Padding + + # Draw Background Box + BGL.glColor3f(*BackgroundColor) + BGL.glRecti(minx, miny, maxx, maxy) + + # Draw Title + BGL.glColor3f(*TitleBG) + BGL.glRecti(minx, maxy - (lineheight), maxx, maxy) + BGL.glColor3f(*TitleCol) + + title = "2D Cutout Image Importer v" + VERSIONSTRING + BGL.glRasterPos2i(minx + lP, maxy - 15) + Draw.Text(title, 'large') + + Draw.PushButton('Exit', EXIT, maxx-50-rP, maxy - lineheight + 2, 50, 19, "Exit Script") + + # Path Buttons + if GUIPARAMS['Path'].val == '': + Draw.PushButton('Single Image', SINGLE_IMG, minx + lP, maxy - (2*lineheight), 150, 19, "Select a Single Image to Import") + Draw.PushButton('Directory', DIRECTORY_IMG, minx + lP + 150, maxy - (2*lineheight), 150, 19, "Select a Directory of Images to Import") + + else: + Draw.PushButton('Clear', CLR_PATH, minx+lP, maxy - (2*lineheight), 50, 19, "Clear Path and Change Import Options") + + GUIPARAMS['Path'] = Draw.String('Path: ', NO_EVT, minx + lP, maxy - (3*lineheight), (maxx-minx-lP-rP), 19, GUIPARAMS['Path'].val, 399, 'Path to Import From') + if PARAMS['ImportType'] == DIR: + GUIPARAMS['ImageExt'] = Draw.String('Image Ext: ', CHG_EXT, minx + lP, maxy - (4*lineheight), 110, 19, GUIPARAMS['ImageExt'].val, 6, 'Image extension for batch directory importing (case insensitive)') + GUIPARAMS['PackImage'] = Draw.Toggle('Pack', NO_EVT, maxx - rP - 50, maxy - (4*lineheight), 50, 19, GUIPARAMS['PackImage'].val, 'Pack Image(s) into .Blend File') + + # Geometry and Viewport Options + BGL.glColor3f(*TextCol) + BGL.glRecti(minx+lP, maxy - (5*lineheight), maxx-rP, maxy - (5*lineheight) + 1) + BGL.glRasterPos2i(minx + lP, maxy-(5*lineheight) + 3) + Draw.Text('Geometry and Display Options', 'small') + + GUIPARAMS['PPU'] = Draw.Slider('Pixels Per Unit: ', NO_EVT, minx + lP, maxy - (6*lineheight), (maxx-minx)/2 - lP, 19, GUIPARAMS['PPU'].val, 1, 5000, 0, 'Set the Number of Pixels Per Blender Unit to preserve Image Size Relations') + GUIPARAMS['VPTransp'] = Draw.Toggle('Viewport Transparency', NO_EVT, minx + lP, maxy - (8*lineheight), (maxx-minx)/2 - lP, 2*lineheight - buPad, GUIPARAMS['VPTransp'].val, 'Display Alpha Transparency in the Viewport') + + GUIPARAMS['XOff'] = Draw.Slider('Offs X: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (6*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['XOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the X-Direction if Importing Multiple Images') + GUIPARAMS['YOff'] = Draw.Slider('Offs Y: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (7*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['YOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the Y-Direction if Importing Multiple Images') + GUIPARAMS['ZOff'] = Draw.Slider('Offs Z: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (8*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['ZOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the Z-Direction if Importing Multiple Images') + + # Material and Texture Options + BGL.glColor3f(*TextCol) + BGL.glRecti(minx+lP, maxy - (9*lineheight), maxx-rP, maxy - (9*lineheight) + 1) + BGL.glRasterPos2i(minx + lP, maxy-(9*lineheight) + 3) + Draw.Text('Material and Texture Options', 'small') + + half = (maxx-minx-lP-rP)/2 + GUIPARAMS['CopyMat'] = Draw.Toggle('Copy Existing Material', NO_EVT, minx + lP, maxy-(10*lineheight), half, 19, GUIPARAMS['CopyMat'].val, 'Copy an Existing Material') + if GUIPARAMS['CopyMat'].val: + menStr = compileMaterialList() + GUIPARAMS['MatId'] = Draw.Menu(menStr, NO_EVT, minx + lP, maxy - (11*lineheight), half, 19, GUIPARAMS['MatId'].val, 'Material to Copy Settings From') + else: + GUIPARAMS['MatCol'] = Draw.ColorPicker(NO_EVT, minx+lP, maxy - (13*lineheight), 40, (3*lineheight) - buPad, GUIPARAMS['MatCol'].val, 'Color of Newly Created Material') + GUIPARAMS['Ref'] = Draw.Slider('Ref: ', NO_EVT, minx +lP+45, maxy - (11*lineheight), half-45, 19, GUIPARAMS['Ref'].val, 0.0, 1.0, 0, 'Set the Ref Value for Created Materials') + GUIPARAMS['Spec'] = Draw.Slider('Spec: ', NO_EVT, minx +lP+45, maxy - (12*lineheight), half-45, 19, GUIPARAMS['Spec'].val, 0.0, 2.0, 0, 'Set the Spec Value for Created Materials') + GUIPARAMS['Hard'] = Draw.Slider('Hard: ', NO_EVT, minx +lP+45, maxy - (13*lineheight), half-45, 19, GUIPARAMS['Hard'].val, 1, 500, 0, 'Set the Hardness Value for Created Materials') + GUIPARAMS['Alpha'] = Draw.Slider('A: ', NO_EVT, minx +lP, maxy - (14*lineheight), half, 19, GUIPARAMS['Alpha'].val, 0.0, 1.0, 0, 'Set the Alpha Value for Created Materials') + + GUIPARAMS['ZTransp'] = Draw.Toggle('ZTransparency', NO_EVT, minx + lP, maxy - (15*lineheight), half, 19, GUIPARAMS['ZTransp'].val, 'Enable ZTransparency') + GUIPARAMS['Shadeless'] = Draw.Toggle('Shadeless', NO_EVT, minx + lP, maxy - (16*lineheight), half, 19, GUIPARAMS['Shadeless'].val, 'Enable Shadeless') + + GUIPARAMS['TexChan'] = Draw.Number('Texture Channel: ', NO_EVT, minx + lP+ half + buPad, maxy - (10*lineheight), half-rP, 19, GUIPARAMS['TexChan'].val, 1, 10, 'Texture Channel for Image Texture') + + GUIPARAMS['MPTCol'] = Draw.Toggle('Color', NO_EVT, minx + lP + half + buPad, maxy - (11*lineheight), half/2, 19, GUIPARAMS['MPTCol'].val, 'Map To Color Channel') + GUIPARAMS['MPTAlpha'] = Draw.Toggle('Alpha', NO_EVT, minx + lP + int((1.5)*half) + buPad, maxy - (11*lineheight), half/2 - rP, 19, GUIPARAMS['MPTAlpha'].val, 'Map To Alpha Channel') + + third = int((maxx-minx-lP-rP)/6) + GUIPARAMS['UseAlpha'] = Draw.Toggle('Use Alpha', NO_EVT, minx + lP + half + buPad, maxy - (12*lineheight), third, 19, GUIPARAMS['UseAlpha'].val, "Use the Images' Alpha Values") + GUIPARAMS['CalcAlpha'] = Draw.Toggle('Calc Alpha', NO_EVT, minx + lP + half + third + buPad, maxy - (12*lineheight), third, 19, GUIPARAMS['CalcAlpha'].val, "Calculate Images' Alpha Values") + GUIPARAMS['ExtendMode'] = Draw.Toggle('Extend', NO_EVT, minx+lP+half+third+third+buPad, maxy - (12*lineheight), third-3, 19, GUIPARAMS['ExtendMode'].val, "Use Extend texture mode. If deselected, Repeat is used") + GUIPARAMS['Seq'] = Draw.Toggle('Sequence', NO_EVT, minx + lP + half + buPad, maxy - (13*lineheight), half-rP, 19, GUIPARAMS['Seq'].val, 'Set the Image(s) to use a Sequence instead of a Still') + + if GUIPARAMS['Seq'].val and not PARAMS['ImportType'] == DIR: + GUIPARAMS['AutoRefresh'] = Draw.Toggle('Auto Refresh', NO_EVT, minx + lP + half + buPad, maxy - (14*lineheight), half/2, 19, GUIPARAMS['AutoRefresh'].val, 'Use Auto Refresh') + GUIPARAMS['Cyclic'] = Draw.Toggle('Cyclic', NO_EVT, minx + lP + half + buPad + half/2, maxy - (14*lineheight), half/2 - rP, 19, GUIPARAMS['Cyclic'].val, 'Repeat Frames Cyclically`') + + GUIPARAMS['Frames'] = Draw.Number('Frames: ', NO_EVT, minx +lP + half + buPad, maxy - (15*lineheight), half - rP, 19, GUIPARAMS['Frames'].val, 1, 30000, 'Sets the Number of Images of a Movie to Use') + GUIPARAMS['Offs'] = Draw.Number('Offs: ', NO_EVT, minx +lP + half + buPad, maxy - (16*lineheight), half/2, 19, GUIPARAMS['Offs'].val, -30000, 30000, 'Offsets the Number of the Frame to use in the Animation') + GUIPARAMS['StartFr'] = Draw.Number('StartFr: ', NO_EVT, minx +lP + half + buPad + half/2, maxy - (16*lineheight), half/2 - rP, 19, GUIPARAMS['StartFr'].val, 1, 30000, 'Sets the Global Starting Frame of the Movie') + elif GUIPARAMS['Seq'].val and PARAMS['ImportType'] == DIR: + BGL.glColor3f(*ErrCol) + BGL.glRasterPos2i(minx + lP + half + buPad + 7, maxy-(14 * lineheight) + 5) + Draw.Text('Sequence only available for Single Image Import', 'small') + + # Import Options + BGL.glColor3f(*TextCol) + BGL.glRecti(minx+lP, maxy - (17*lineheight), maxx-rP, maxy - (17*lineheight) + 1) + BGL.glRasterPos2i(minx + lP, maxy-(17*lineheight) + 3) + Draw.Text('Import', 'small') + + if GUIPARAMS['Path'].val and GUIPARAMS['ImageExt'].val or GUIPARAMS['Path'].val and PARAMS['ImportType'] == SINGLE: + Draw.PushButton('Import', DO_SCRIPT, minx + lP, maxy - (18*lineheight), 75, 19, "Import Image(s)") + else: + BGL.glColor3f(*ErrCol) + BGL.glRasterPos2i(minx+lP, maxy - (18*lineheight) + 5) + Draw.Text('A path and image type must be specified to import images') + + GUIPARAMS['RedrawImp'] = Draw.Toggle('Redraw During Import', NO_EVT, maxx - rP - 150, maxy - (18*lineheight), 150, 19, GUIPARAMS['RedrawImp'].val, 'Redraw the View as Images Import') + +Draw.Register(GUI, event, bevent) \ No newline at end of file diff --git a/release/scripts/object_active_to_other.py b/release/scripts/object_active_to_other.py new file mode 100644 index 00000000000..131d1f63d74 --- /dev/null +++ b/release/scripts/object_active_to_other.py @@ -0,0 +1,58 @@ +#!BPY +""" +Name: 'Copy Active to Selected' +Blender: 249 +Group: 'Object' +Tooltip: 'For every selected object, copy the active to their loc/size/rot' +""" + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Script copyright (C) Campbell Barton +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + + +from Blender import Window, sys, Draw +import bpy + +def my_object_util(sce): + ob_act = sce.objects.active + + if not ob_act: + Draw.PupMenu('Error%t|No active object selected') + return + + mats = [ob.matrixWorld for ob in sce.objects.context if ob != ob_act] + + for m in mats: + ob_copy = ob_act.copy() + sce.objects.link(ob_copy) + ob_copy.setMatrix(m) + ob_copy.Layers = ob.Layers + + +def main(): + sce = bpy.data.scenes.active + + Window.WaitCursor(1) + my_object_util(sce) + Window.WaitCursor(0) + +if __name__ == '__main__': + main() diff --git a/release/scripts/scripttemplate_gamelogic_module.py b/release/scripts/scripttemplate_gamelogic_module.py new file mode 100644 index 00000000000..2ef4950917b --- /dev/null +++ b/release/scripts/scripttemplate_gamelogic_module.py @@ -0,0 +1,45 @@ +#!BPY +""" +Name: 'GameLogic Module' +Blender: 249 +Group: 'ScriptTemplate' +Tooltip: 'Basic template for new game logic modules' +""" + +from Blender import Window +import bpy + +script_data = \ +''' +# This module can be accessed by a python controller with +# its execution method set to 'Module' +# * Set the module string to "gamelogic_module.main" (without quotes) +# * When renaming the script it MUST have a .py extension +# * External text modules are supported as long as they are at +# the same location as the blendfile or one of its libraries. + +import GameLogic + +# variables defined here will only be set once when the +# module is first imported. Set object spesific vars +# inside the function if you intend to use the module +# with multiple objects. + +def main(cont): + own = cont.owner + + sens = cont.sensors['mySensor'] + actu = cont.actuators['myActuator'] + + if sens.positive: + cont.activate(actu) + else: + cont.deactivate(actu) + +# dont call main(GameLogic.getCurrentController()), the py controller will +''' + +new_text = bpy.data.texts.new('gamelogic_module.py') +new_text.write(script_data) +bpy.data.texts.active = new_text +Window.RedrawAll() diff --git a/release/scripts/textplugin_convert_ge.py b/release/scripts/textplugin_convert_ge.py new file mode 100644 index 00000000000..f3b44cdb14b --- /dev/null +++ b/release/scripts/textplugin_convert_ge.py @@ -0,0 +1,863 @@ +#!BPY +""" +Name: 'Convert BGE 2.49' +Blender: 246 +Group: 'TextPlugin' +Shortcut: '' +Tooltip: 'Attemps to update deprecated usage of game engine API.' +""" + +# +# Copyright 2009 Alex Fraser +# +# 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 3 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, see . +# + +# +# This script updates game engine scripts that were designed for pre-2.49 +# versions of Blender to run with the new API. Deprecated function calls are +# listed in attributeRenameDict. This script searches for instances of the keys +# in a target script and re-writes them. +# +# Some deprecated functions are complicated to re-write. The most common +# conversions have been implemented, but some have not. Running this will reduce +# the number of deprecation warnings in your scripts, but may not eliminate them +# entirely. +# +# NOTE: The conversion is not guaranteed to be perfect. It is strongly +# recommended that you review all changes after running this script. +# +# TODO: The following attributes are either ambiguous or need special processing +# to handle parameters. Deprecated attributes that map to multiple target +# attributes will require a refactor of the main conversion loop in the +# convert248to249 function: currently, it doesn't allow any conversion to +# advance the row index by more than one. +# +# getLinearVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator) +# Conflicts with KX_GameObject. +# Maps to multiple attributes. +# setLinearVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator) +# Conflicts with KX_GameObject. +# Maps to multiple attributes. +# getAngularVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator) +# Conflicts with KX_GameObject. +# Maps to multiple attributes. +# setAngularVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator) +# Conflicts with KX_GameObject. +# Maps to multiple attributes. +# setAction (BL_ShapeActionActuator, BL_ActionActuator) +# `reset' argument has no conversion target. +# set (KX_VisibilityActuator, KX_IpoActuator) +# Different numbers of arguments. +# Arguments map to multiple attributes. +# getIndex (SCA_JoystickSensor) +# Incompatible values: Old = 1-based index; new = 0-based. +# getMesh (KX_SCA_ReplaceMeshActuator) +# Return types differ. Need to call object.name. +# getObject (KX_SCA_AddObjectActuator, KX_CameraActuator, +# KX_TrackToActuator, KX_ParentActuator) +# Default return type differs between classes. +# setIndex (SCA_JoystickSensor) +# Incompatible values: Old = 1-based index; new = 0-based. +# setObject (KX_SCA_AddObjectActuator, KX_CameraActuator, +# KX_TrackToActuator, KX_ParentActuator) +# Incompatible types: Old = KX_GameObject or String; new = +# KX_GameObject. +# setOperation (KX_SCA_DynamicActuator, KX_StateActuator) +# Ambiguous: different target names. +# getDRot (KX_ObjectActuator) +# Maps to multiple attributes. +# setDRot (KX_ObjectActuator) +# Arguments map to multiple attributes. +# getDLoc (KX_ObjectActuator) +# Maps to multiple attributes. +# setDLoc (KX_ObjectActuator) +# Arguments map to multiple attributes. +# getTorque (KX_ObjectActuator) +# Maps to multiple attributes. +# setTorque (KX_ObjectActuator) +# Arguments map to multiple attributes. +# getForce (KX_ObjectActuator) +# Maps to multiple attributes. +# setForce (KX_ObjectActuator) +# Arguments map to multiple attributes. +# position (KX_GameObject) +# Conflicts with KX_SoundActuator. +# orientation (KX_GameObject) +# Conflicts with KX_SoundActuator. +# + +import string +import re + +COMMENTCHAR = '#' + +class ParseError(Exception): pass +class ConversionError(Exception): pass + +def findBalancedParens(lines, row, col, openChar = '(', closeChar = ')'): + """Finds a balanced pair of parentheses, searching from lines[row][col]. + The opening parenthesis must be on the starting line. + + Returns two tuples containing the row and column of the opening paren, and + the row and column of the matching paren. + + Throws a ParseError if the first character is not openChar, or if a matching + paren cannot be found.""" + + # + # Find the opening coordinates. + # + oRow = row + oCol = col + line = lines[oRow] + while oCol < len(line): + if line[oCol] == openChar: + break + elif line[oCol] == COMMENTCHAR: + break + oCol = oCol + 1 + + if oCol >= len(line) or line[oCol] != openChar or not re.match(r'^\s*$', line[col:oCol]): + raise ParseError, "Can't find opening parenthesis. '%s'" % openChar + + # + # Find the closing coordinates. + # + eRow = oRow + eCol = oCol + 1 + level = 1 + while eRow < len(lines) and level > 0: + line = lines[eRow] + while eCol < len(line) and level > 0: + c = line[eCol] + if c == openChar: + # Found a nested paren. + level = level + 1 + elif c == closeChar: + # Exiting one level of nesting. + level = level - 1 + if level == 0: + # Back to top level! + return (oRow, oCol), (eRow, eCol) + elif c == COMMENTCHAR: + # Comment. Skip the rest of the line. + break + eCol = eCol + 1 + eRow = eRow + 1 + eCol = 0 + raise ParseError, "Couldn't find closing parenthesis." + +def findLastAssignment(lines, row, attrName): + """Finds the most recent assignment of `attrName' before `row'. Returns + everything after the '=' sign or None, if there was no match.""" + contRegex = re.compile(r'[^#]*?' + # Don't search in comments. + attrName + + r'\s*=\s*(.*)') # Assignment + + cRow = row - 1 + while cRow >= 0: + match = contRegex.search(lines[cRow]) + if match: + return match.group(1) + cRow = cRow - 1 + return None + +def replaceSubstr(s, start, end, newSubStr): + """Replace the contents of `s' between `start' and `end' with + `newSubStr'.""" + return s[:start] + newSubStr + s[end:] + +def replaceNextParens(lines, row, colStart, newOpenChar, newCloseChar, + oldOpenChar = '(', oldCloseChar = ')'): + """Replace the next set of parentheses with different characters. The + opening parenthesis must be located on line `row', and on or after + `colStart'. The closing parenthesis may be on the same line or any following + line. The strings are edited in-place. + + Throws a ParseError if the set of parentheses can't be found. In this case, + the strings in `lines' will be untouched.""" + try: + pOpen, pClose = findBalancedParens(lines, row, colStart, oldOpenChar, + oldCloseChar) + except ParseError: + raise + + # Replacement may change string length. Replace closing paren first. + r, c = pClose + lines[r] = replaceSubstr(lines[r], c, c + 1, newCloseChar) + # Replace opening paren. + r, c = pOpen + lines[r] = replaceSubstr(lines[r], c, c + 1, newOpenChar) + +def replaceSimpleGetter(lines, row, colStart, colEnd, newName): + """Replace a call to a simple getter function with a reference to a + property, e.g. foo.getBar() -> foo.bar + + The function identifier being replaced must be on line `row' and + between `colStart' and `colEnd'. The opening parenthesis must follow + immediately (whitespace is allowed). The closing parenthesis may be on the + same or following lines. + + Throws a ConversionError if the parentheses can't be found. In this case + the content of `lines' will be untouched.""" + try: + replaceNextParens(lines, row, colEnd, newOpenChar = '', newCloseChar = '') + except ParseError: + raise ConversionError, ("Deprecated function reference.") + + lines[row] = replaceSubstr(lines[row], colStart, colEnd, newName) + +def replaceSimpleSetter(lines, row, colStart, colEnd, newName): + """Replace a call to a simple setter function with a reference to a + property, e.g. foo.setBar(baz) -> foo.bar = baz + + The function identifier being replaced must be on line `row' and + between `colStart' and `colEnd'. The opening parenthesis must follow + immediately (whitespace is allowed). The closing parenthesis may be on the + same or following lines. + + Throws a ConversionError if the parentheses can't be found. In this case + the content of `lines' will be untouched.""" + try: + replaceNextParens(lines, row, colEnd, newOpenChar = '', newCloseChar = '') + except ParseError: + raise ConversionError, ("Deprecated function reference.") + + lines[row] = replaceSubstr(lines[row], colStart, colEnd, newName + ' = ') + +def replaceArgsWithListSetter(lines, row, colStart, colEnd, newName): + """Replace a call to a multi-agument setter function with a reference to a + list property, e.g. foo.setBar(baz, bazZ) -> foo.bar = [baz, bazZ] + + The function identifier being replaced must be on line `row' and + between `colStart' and `colEnd'. The opening parenthesis must follow + immediately (whitespace is allowed). The closing parenthesis may be on the + same or following lines. + + Throws a ConversionError if the parentheses can't be found. In this case + the content of `lines' will be untouched.""" + try: + replaceNextParens(lines, row, colEnd, newOpenChar = '[', newCloseChar = ']') + except ParseError: + raise ConversionError, ("Deprecated function reference.") + + lines[row] = replaceSubstr(lines[row], colStart, colEnd, newName + ' = ') + + +def replaceKeyedGetter(lines, row, colStart, colEnd, newName): + """Replace a call to a keyed getter function with a reference to a + property, e.g. foo.getBar(baz) -> foo.bar[baz] + + The function identifier being replaced must be on line `row' and + between `colStart' and `colEnd'. The opening parenthesis must follow + immediately (whitespace is allowed). The closing parenthesis may be on the + same or following lines. + + Throws a ConversionError if the parentheses can't be found. In this case + the content of `lines' will be untouched.""" + try: + replaceNextParens(lines, row, colEnd, newOpenChar = '[', newCloseChar = ']') + except ParseError: + raise ConversionError, ("Deprecated function reference.") + + lines[row] = replaceSubstr(lines[row], colStart, colEnd, newName) + +def replaceGetXYPosition(lines, row, colStart, colEnd, axis): + '''SCA_MouseSensor.getXPosition; SCA_MouseSensor.getYPosition. + This is like a keyed getter, but the key is embedded in the attribute + name. + + Throws a ConversionError if the parentheses can't be found. In this case + the content of `lines' will be untouched.''' + try: + (openRow, openCol), (closeRow, closeCol) = findBalancedParens(lines, + row, colEnd) + except ParseError: + raise ConversionError, "Deprecated function reference." + if closeRow != row: + raise ConversionError, "Can't modify multiple lines." + + lines[row] = replaceSubstr(lines[row], openCol, closeCol + 1, + "[%s]" % axis) + + lines[row] = replaceSubstr(lines[row], colStart, colEnd, 'position') + +def replaceRename(lines, row, colStart, colEnd, newName): + """Replace an identifier with another, e.g. + foo.getBar() -> foo.getBaz() + foo.bar -> foo.baz + + The identifier being replaced must be on line `row' and between `colStart' + and `colEnd'.""" + lines[row] = replaceSubstr(lines[row], colStart, colEnd, newName) + +def replaceAddActiveActuator(lines, row, colStart, colEnd, closure): + '''Extra work needs to be done here to find out the name of the controller, + and whether the actuator should be activated or deactivated. + + Throws a ConversionError if the actuator, controller or condition can't be + found. In this case the content of `lines' will be untouched.''' + try: + (openRow, openCol), (closeRow, closeCol) = findBalancedParens(lines, row, colEnd) + except ParseError: + ConversionError, "Can't find arguments." + + if closeRow != openRow: + raise ConversionError, ("Can't perform conversion: arguments span multiple lines.") + + args = lines[row][openCol + 1:closeCol] + match = re.search(r'([a-zA-Z_]\w*)' # Actuator identifier + r',\s*' + r'([0-9a-zA-Z_]\w*)', # Condition (boolean) + args) + if not match: + raise ConversionError, "Can't find arguments." + + actuator = match.group(1) + condition = match.group(2) + controller = None + + assn = findLastAssignment(lines, row, actuator) + if assn: + match = re.search(r'([a-zA-Z_]\w*)' # Controller identifier + r'\s*\.\s*' # Dot + r'(actuators\s*\[|getActuator\s*\()', # Dictionary/getter identifier + assn) + if match: + controller = match.group(1) + + if not controller: + raise ConversionError, "Can't find actuator's controller." + + gameLogicStart = lines[row].rfind("GameLogic", 0, colStart) + if gameLogicStart < 0: + raise ConversionError, "Can't find GameLogic identifier." + + newExpr = None + if condition in ['1', 'True']: + newExpr = "%s.activate(%s)" % (controller, actuator) + elif condition in ['0', 'False']: + newExpr = "%s.deactivate(%s)" % (controller, actuator) + else: + newExpr = "(lambda: %s and (%s.activate(%s) or True) or %s.deactivate(%s))()" % ( + condition, controller, actuator, controller, actuator) + lines[row] = replaceSubstr(lines[row], gameLogicStart, closeCol + 1, newExpr) + +def getObject(line, attributeStart): + '''Get the object that an attribute belongs to. `attributeStart' is the + index of the first character of the attribute name in the string `line'. + Returns: the identifier preceding `attributeStart', or None if one can't be + found.''' + match = re.search(r'([a-zA-Z_]\w*)\s*\.\s*$', line[0:attributeStart]) + if not match: + return None + return match.group(1) + +def replaceGetActuator(lines, row, colStart, colEnd, closure): + '''getActuator is ambiguous: it could belong to SCA_IController or + SCA_ActuatorSensor. Try to resolve and then convert. + + Raises a ConversionError if the parentheses can't be found, or if the + ambiguity can't be resolved.''' + # Get the name of the object this attribute is attached to. + obName = getObject(lines[row], colStart) + if obName: + # Try to find out whether the object is a controller. + assn = findLastAssignment(lines, row, obName) + if assn and re.search(r'GameLogic\s*\.\s*getCurrentController', assn): + # It is (probably) a controller! + replaceKeyedGetter(lines, row, colStart, colEnd, 'actuators') + return + + raise ConversionError, "Ambiguous: addActiveActuator -> actuators[key] (SCA_IController) or actuator (SCA_ActuatorSensor)." + +def replaceSetOrientation(lines, row, colStart, colEnd, closure): + '''setOrientation is ambiguous: it could belong to KX_SoundActuator or + KX_GameObject. Try to resolve and then convert. If the type can't be + determined, it is assumed to be a KX_GameObject. Currently, only the + conversion for KX_GameObject is implemented. + + Raises a ConversionError if the parentheses can't be found, or if the + object is found to be a KX_SoundActuator.''' + # Get the name of the object this attribute is attached to. + obName = getObject(lines[row], colStart) + if obName: + # Try to find out whether the object is an actuator. + assn = findLastAssignment(lines, row, obName) + if assn: + match = re.search(r'([a-zA-Z_]\w*)' # Controller identifier + r'\s*\.\s*' # Dot + r'(actuators\s*\[|getActuator\s*\()', # Dictionary/getter identifier + assn) + if match: + # It's probably a KX_SoundActuator. + raise ConversionError, "Not implemented: Can't convert arguments to matrix." + + # It's probably a KX_GameObject. + replaceSimpleSetter(lines, row, colStart, colEnd, 'localOrientation') + +def replaceSetPosition(lines, row, colStart, colEnd, closure): + '''setPosition is ambiguous: it could belong to KX_SoundActuator or + KX_GameObject. Try to resolve and then convert. If the type can't be + determined, it is assumed to be a KX_GameObject. + + Raises a ConversionError if the parentheses can't be found.''' + # Get the name of the object this attribute is attached to. + obName = getObject(lines[row], colStart) + if obName: + # Try to find out whether the object is an actuator. + assn = findLastAssignment(lines, row, obName) + if assn: + match = re.search(r'([a-zA-Z_]\w*)' # Controller identifier + r'\s*\.\s*' # Dot + r'(actuators\s*\[|getActuator\s*\()', # Dictionary/getter identifier + assn) + if match: + # It's probably a KX_SoundActuator. + replaceSimpleSetter(lines, row, colStart, colEnd, 'position') + + # It's probably a KX_GameObject. + replaceSimpleSetter(lines, row, colStart, colEnd, 'localPosition') + +def replaceSplitProperty(lines, row, colStart, colEnd, (newGetter, newSetter)): + '''Some property attributes behave differently when being written to or read + from. Try to determine the operation, and replace accordingly. E.G. + o.position = foo -> o.localPosition = foo # set + foo = o.position -> foo = o.worldPosition # get + + This implementation can not handle cases where the object is returned from + a function, e.g. + foo = bar.getObject().position # Error! + + Raises a ConversionError if the operation can't be determined, or if the + object is returned from a function.''' + assnRegex = re.compile(r'(=\s*)?' # Getter + r'[a-zA-Z_]\w*' # Object identifier + r'\.([a-zA-Z_][a-zA-Z0-9_.]*)+' # Trailing attributes + r'(\s*=)?') # Setter + match = assnRegex.search(lines[row]) + + if not match: + raise ConversionError, "Can't determine operation (getting or setting)." + + setting = False + getting = False + if match.group(1): + getting = True + if match.group(3): + setting = True + if (getting and setting) or ((not getting) and (not setting)): + raise ConversionError, "Can't determine operation (getting or setting)." + + if getting: + replaceRename(lines, row, colStart, colEnd, newGetter) + else: + replaceRename(lines, row, colStart, colEnd, newSetter) + +def notImplemented(lines, row, colStart, colEnd, classNames): + message = "Conversion not implemented. See documentation for " +\ + string.join(classNames, ', ') + raise ConversionError, message + +# +# Deprecated attribute information. The format is: +# deprecatedAttributeName: (conversionFunction, closure) +# Usually the closure will be the name of the superceding attribute. +# +# Since each deprecated attribute can appear in this dictionary only once, it is +# the conversion function's responsibility to resolve ambiguity. +# +attributeRenameDict = { + # Special cases + 'addActiveActuator': (replaceAddActiveActuator, None), # + 'getActuator': (replaceGetActuator, None), # SCA_IController, SCA_ActuatorSensor + 'getXPosition': (replaceGetXYPosition, '0'), # SCA_MouseSensor + 'getYPosition': (replaceGetXYPosition, '1'), # SCA_MouseSensor + 'setOrientation': (replaceSetOrientation, None), # KX_GameObject, KX_SoundActuator + 'setPosition': (replaceSetPosition, None), # KX_GameObject, KX_SoundActuator + + # Keyed getters/setters + 'getSensor': (replaceKeyedGetter, 'sensors'), # SCA_IController + + # Multi-arg -> List setter + 'setAxis': (replaceArgsWithListSetter, 'axis'), # SCA_JoystickSensor + 'setForceLimitX': (replaceArgsWithListSetter, 'forceLimitX'), # KX_ObjectActuator + 'setForceLimitY': (replaceArgsWithListSetter, 'forceLimitY'), # KX_ObjectActuator + 'setForceLimitZ': (replaceArgsWithListSetter, 'forceLimitZ'), # KX_ObjectActuator + 'setHat': (replaceArgsWithListSetter, 'hat'), # SCA_JoystickSensor + 'setPID': (replaceArgsWithListSetter, 'pid'), # KX_ObjectActuator + 'setVelocity': (replaceArgsWithListSetter, 'velocity'), # KX_SoundActuator + + # Straight rename + 'getButtonValue': (replaceRename, 'getButtonActiveList'), # SCA_JoystickSensor + + # Split properties + 'scaling': (replaceSplitProperty, ('worldScaling', 'localScaling')), # KX_GameObject + + # Simple getters/setters + 'getSensors': (replaceSimpleGetter, 'sensors'), # SCA_IController + 'getActuators': (replaceSimpleGetter, 'actuators'), # SCA_IController + 'enableViewport': (replaceSimpleSetter, 'useViewport'), # KX_Camera + 'getAction': (replaceSimpleGetter, 'action'), # BL_ShapeActionActuator, BL_ActionActuator + 'getAxis': (replaceSimpleGetter, 'axis'), # SCA_JoystickSensor + 'getAxisValue': (replaceSimpleGetter, 'axisValues'), # SCA_JoystickSensor + 'getBlendin': (replaceSimpleGetter, 'blendIn'), # BL_ShapeActionActuator, BL_ActionActuator + 'getBodies': (replaceSimpleGetter, 'bodies'), # KX_NetworkMessageSensor + 'getButton': (replaceSimpleGetter, 'button'), # SCA_JoystickSensor + 'getCamera': (replaceSimpleGetter, 'camera'), # KX_SceneActuator + 'getConeOrigin': (replaceSimpleGetter, 'coneOrigin'), # KX_RadarSensor + 'getConeTarget': (replaceSimpleGetter, 'coneTarget'), # KX_RadarSensor + 'getContinue': (replaceSimpleGetter, 'useContinue'), # BL_ActionActuator + 'getCurrentlyPressedKeys': (replaceSimpleGetter, 'events'), # SCA_KeyboardSensor + 'getDamping': (replaceSimpleGetter, 'damping'), # KX_ObjectActuator + 'getDelay': (replaceSimpleGetter, 'delay'), # SCA_DelaySensor + 'getDistribution': (replaceSimpleGetter, 'distribution'), # SCA_RandomActuator + 'getDuration': (replaceSimpleGetter, 'duration'), # SCA_DelaySensor + 'getEnd': (replaceSimpleGetter, 'frameEnd'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'getExecutePriority': (replaceSimpleGetter, 'executePriority'), # SCA_ILogicBrick + 'getFile': (replaceSimpleGetter, 'fileName'), # KX_GameActuator + 'getFilename': (replaceSimpleGetter, 'fileName'), # KX_SoundActuator + 'getForceIpoActsLocal': (replaceSimpleGetter, 'useIpoLocal'), # KX_IpoActuator + 'getForceLimitX': (replaceSimpleGetter, 'forceLimitX'), # KX_ObjectActuator + 'getForceLimitY': (replaceSimpleGetter, 'forceLimitY'), # KX_ObjectActuator + 'getForceLimitZ': (replaceSimpleGetter, 'forceLimitZ'), # KX_ObjectActuator + 'getFrame': (replaceSimpleGetter, 'frame'), # BL_ShapeActionActuator, BL_ActionActuator + 'getFrameMessageCount': (replaceSimpleGetter, 'frameMessageCount'), # KX_NetworkMessageSensor + 'getFrameProperty': (replaceSimpleGetter, 'framePropName'), # BL_ShapeActionActuator, BL_ActionActuator + 'getFrequency': (replaceSimpleGetter, 'frequency'), # SCA_ISensor + 'getGain': (replaceSimpleGetter, 'volume'), # KX_SoundActuator, KX_CDActuator + 'getHat': (replaceSimpleGetter, 'hat'), # SCA_JoystickSensor + 'getHeight': (replaceSimpleGetter, 'height'), # KX_CameraActuator + 'getHitNormal': (replaceSimpleGetter, 'hitNormal'), # KX_MouseFocusSensor, KX_RaySensor + 'getHitObject': (replaceSimpleGetter, 'hitObject'), # KX_MouseFocusSensor, KX_RaySensor, KX_TouchSensor + 'getHitObjectList': (replaceSimpleGetter, 'hitObjectList'), # KX_TouchSensor + 'getHitPosition': (replaceSimpleGetter, 'hitPosition'), # KX_MouseFocusSensor, KX_RaySensor + 'getHold1': (replaceSimpleGetter, 'hold1'), # SCA_KeyboardSensor + 'getHold2': (replaceSimpleGetter, 'hold2'), # SCA_KeyboardSensor + 'getInvert': (replaceSimpleGetter, 'invert'), # SCA_ISensor + 'getIpoAdd': (replaceSimpleGetter, 'useIpoAdd'), # KX_IpoActuator + 'getIpoAsForce': (replaceSimpleGetter, 'useIpoAsForce'), # KX_IpoActuator + 'getKey': (replaceSimpleGetter, 'key'), # SCA_KeyboardSensor + 'getLastCreatedObject': (replaceSimpleGetter, 'objectLastCreated'), # KX_SCA_AddObjectActuator + 'getLevel': (replaceSimpleGetter, 'level'), # SCA_ISensor + 'getLightList': (replaceSimpleGetter, 'lights'), # KX_Scene + 'getLooping': (replaceSimpleGetter, 'looping'), # KX_SoundActuator + 'getMass': (replaceSimpleGetter, 'mass'), # KX_GameObject + 'getMax': (replaceSimpleGetter, 'max'), # KX_CameraActuator + 'getMin': (replaceSimpleGetter, 'min'), # KX_CameraActuator + 'getName': (replaceSimpleGetter, 'name'), # KX_Scene + 'getNumAxes': (replaceSimpleGetter, 'numAxis'), # SCA_JoystickSensor + 'getNumButtons': (replaceSimpleGetter, 'numButtons'), # SCA_JoystickSensor + 'getNumHats': (replaceSimpleGetter, 'numHats'), # SCA_JoystickSensor + 'getObjectList': (replaceSimpleGetter, 'objects'), # KX_Scene + 'getOperation': (replaceSimpleGetter, 'mode'), # KX_SCA_DynamicActuator + 'getOrientation': (replaceSimpleGetter, 'worldOrientation'), # KX_GameObject + 'getOwner': (replaceSimpleGetter, 'owner'), # SCA_ILogicBrick + 'getPara1': (replaceSimpleGetter, 'para1'), # SCA_RandomActuator + 'getPara2': (replaceSimpleGetter, 'para2'), # SCA_RandomActuator + 'getParent': (replaceSimpleGetter, 'parent'), # KX_GameObject + 'getPID': (replaceSimpleGetter, 'pid'), # KX_ObjectActuator + 'getPitch': (replaceSimpleGetter, 'pitch'), # KX_SoundActuator + 'getPosition': (replaceSimpleGetter, 'worldPosition'), # KX_GameObject + 'getPressedKeys': (replaceSimpleGetter, 'events'), # SCA_KeyboardSensor + 'getPriority': (replaceSimpleGetter, 'priority'), # BL_ShapeActionActuator, BL_ActionActuator + 'getProjectionMatrix': (replaceSimpleGetter, 'projection_matrix'), # KX_Camera + 'getProperty': (replaceSimpleGetter, 'propName'), # SCA_PropertySensor, SCA_RandomActuator, SCA_PropertyActuator + 'getRayDirection': (replaceSimpleGetter, 'rayDirection'), # KX_MouseFocusSensor, KX_RaySensor + 'getRaySource': (replaceSimpleGetter, 'raySource'), # KX_MouseFocusSensor + 'getRayTarget': (replaceSimpleGetter, 'rayTarget'), # KX_MouseFocusSensor + 'getRepeat': (replaceSimpleGetter, 'repeat'), # SCA_DelaySensor + 'getRollOffFactor': (replaceSimpleGetter, 'rollOffFactor'), # KX_SoundActuator + 'getScene': (replaceSimpleGetter, 'scene'), # KX_SceneActuator + 'getScript': (replaceSimpleGetter, 'script'), # SCA_PythonController + 'getSeed': (replaceSimpleGetter, 'seed'), # SCA_RandomActuator + 'getStart': (replaceSimpleGetter, 'frameStart'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'getState': (replaceSimpleGetter, 'state'), # SCA_IController, KX_GameObject + 'getSubject': (replaceSimpleGetter, 'subject'), # KX_NetworkMessageSensor + 'getSubjects': (replaceSimpleGetter, 'subjects'), # KX_NetworkMessageSensor + 'getThreshold': (replaceSimpleGetter, 'threshold'), # SCA_JoystickSensor + 'getTime': (replaceSimpleGetter, 'time'), # KX_SCA_AddObjectActuator, KX_TrackToActuator + 'getTouchMaterial': (replaceSimpleGetter, 'useMaterial'), # KX_TouchSensor + 'getType': (replaceSimpleGetter, 'mode'), # SCA_PropertySensor + 'getUse3D': (replaceSimpleGetter, 'use3D'), # KX_TrackToActuator + 'getUseNegPulseMode': (replaceSimpleGetter, 'useNegPulseMode'), # SCA_ISensor + 'getUsePosPulseMode': (replaceSimpleGetter, 'usePosPulseMode'), # SCA_ISensor + 'getUseRestart': (replaceSimpleGetter, 'useRestart'), # KX_SceneActuator + 'getValue': (replaceSimpleGetter, 'value'), # SCA_PropertySensor, SCA_PropertyActuator + 'getVisible': (replaceSimpleGetter, 'visible'), # KX_GameObject + 'getXY': (replaceSimpleGetter, 'useXY'), # KX_CameraActuator + 'isConnected': (replaceSimpleGetter, 'connected'), # SCA_JoystickSensor + 'isPositive': (replaceSimpleGetter, 'positive'), # SCA_ISensor + 'isTriggered': (replaceSimpleGetter, 'triggered'), # SCA_ISensor + 'setActuator': (replaceSimpleSetter, 'actuator'), # SCA_ActuatorSensor + 'setBlendin': (replaceSimpleSetter, 'blendIn'), # BL_ShapeActionActuator, BL_ActionActuator + 'setBlendtime': (replaceSimpleSetter, 'blendTime'), # BL_ShapeActionActuator, BL_ActionActuator + 'setBodyType': (replaceSimpleSetter, 'usePropBody'), # KX_NetworkMessageActuator + 'setBody': (replaceSimpleSetter, 'body'), # KX_NetworkMessageActuator + 'setButton': (replaceSimpleSetter, 'button'), # SCA_JoystickSensor + 'setCamera': (replaceSimpleSetter, 'camera'), # KX_SceneActuator + 'setContinue': (replaceSimpleSetter, 'useContinue'), # BL_ActionActuator + 'setDamping': (replaceSimpleSetter, 'damping'), # KX_ObjectActuator + 'setDelay': (replaceSimpleSetter, 'delay'), # SCA_DelaySensor + 'setDuration': (replaceSimpleSetter, 'duration'), # SCA_DelaySensor + 'setEnd': (replaceSimpleSetter, 'frameEnd'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'setExecutePriority': (replaceSimpleSetter, 'executePriority'), # SCA_ILogicBrick + 'setFile': (replaceSimpleSetter, 'fileName'), # KX_GameActuator + 'setFilename': (replaceSimpleSetter, 'fileName'), # KX_SoundActuator + 'setForceIpoActsLocal': (replaceSimpleSetter, 'useIpoLocal'), # KX_IpoActuator + 'setFrame': (replaceSimpleSetter, 'frame'), # BL_ShapeActionActuator, BL_ActionActuator + 'setFrameProperty': (replaceSimpleSetter, 'framePropName'), # BL_ShapeActionActuator, BL_ActionActuator + 'setFrequency': (replaceSimpleSetter, 'frequency'), # SCA_ISensor + 'setGain': (replaceSimpleSetter, 'volume'), # KX_SoundActuator, KX_CDActuator + 'setHeight': (replaceSimpleSetter, 'height'), # KX_CameraActuator + 'setHold1': (replaceSimpleSetter, 'hold1'), # SCA_KeyboardSensor + 'setHold2': (replaceSimpleSetter, 'hold2'), # SCA_KeyboardSensor + 'setInvert': (replaceSimpleSetter, 'invert'), # SCA_ISensor + 'setIpoAdd': (replaceSimpleSetter, 'useIpoAdd'), # KX_IpoActuator + 'setIpoAsForce': (replaceSimpleSetter, 'useIpoAsForce'), # KX_IpoActuator + 'setKey': (replaceSimpleSetter, 'key'), # SCA_KeyboardSensor + 'setLevel': (replaceSimpleSetter, 'level'), # SCA_ISensor + 'setLooping': (replaceSimpleSetter, 'looping'), # KX_SoundActuator + 'setMask': (replaceSimpleSetter, 'mask'), # KX_StateActuator + 'setMax': (replaceSimpleSetter, 'max'), # KX_CameraActuator + 'setMesh': (replaceSimpleSetter, 'mesh'), # KX_SCA_ReplaceMeshActuator + 'setMin': (replaceSimpleSetter, 'min'), # KX_CameraActuator + 'setPitch': (replaceSimpleSetter, 'pitch'), # KX_SoundActuator + 'setPriority': (replaceSimpleSetter, 'priority'), # BL_ShapeActionActuator, BL_ActionActuator + 'setProjectionMatrix': (replaceSimpleSetter, 'projection_matrix'), # KX_Camera + 'setProperty': (replaceSimpleSetter, 'propName'), # KX_IpoActuator, SCA_PropertySensor, SCA_RandomActuator, SCA_PropertyActuator + 'setRepeat': (replaceSimpleSetter, 'repeat'), # SCA_DelaySensor + 'setRollOffFactor': (replaceSimpleSetter, 'rollOffFactor'), # KX_SoundActuator + 'setScene': (replaceSimpleSetter, 'scene'), # KX_SceneActuator + 'setScript': (replaceSimpleSetter, 'script'), # SCA_PythonController + 'setSeed': (replaceSimpleSetter, 'seed'), # SCA_RandomActuator + 'setStart': (replaceSimpleSetter, 'frameStart'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'setState': (replaceSimpleSetter, 'state'), # KX_GameObject + 'setSubject': (replaceSimpleSetter, 'subject'), # KX_NetworkMessageActuator + 'setSubjectFilterText': (replaceSimpleSetter, 'subject'), # KX_NetworkMessageSensor + 'setThreshold': (replaceSimpleSetter, 'threshold'), # SCA_JoystickSensor + 'setTime': (replaceSimpleSetter, 'time'), # KX_SCA_AddObjectActuator, KX_TrackToActuator + 'setToPropName': (replaceSimpleSetter, 'propName'), # KX_NetworkMessageActuator + 'setType': (replaceSimpleSetter, 'mode'), # SCA_PropertySensor + 'setUse3D': (replaceSimpleSetter, 'use3D'), # KX_TrackToActuator + 'setUseNegPulseMode': (replaceSimpleSetter, 'useNegPulseMode'), # SCA_ISensor + 'setUsePosPulseMode': (replaceSimpleSetter, 'usePosPulseMode'), # SCA_ISensor + 'setUseRestart': (replaceSimpleSetter, 'useRestart'), # KX_SceneActuator + 'setValue': (replaceSimpleSetter, 'value'), # SCA_PropertySensor, SCA_PropertyActuator + 'setXY': (replaceSimpleSetter, 'useXY'), # KX_CameraActuator + + # Unimplemented! + 'getLinearVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setLinearVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'getAngularVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setAngularVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setAction': (notImplemented, ['BL_ShapeActionActuator', 'BL_ActionActuator']), + 'set': (notImplemented, ['KX_VisibilityActuator', 'KX_IpoActuator']), + 'getIndex': (notImplemented, ['SCA_JoystickSensor']), + 'getMesh': (notImplemented, ['KX_SCA_ReplaceMeshActuator']), + 'getObject': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_CameraActuator', 'KX_TrackToActuator', 'KX_ParentActuator']), + 'setIndex': (notImplemented, ['SCA_JoystickSensor']), + 'setObject': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_CameraActuator', 'KX_TrackToActuator', 'KX_ParentActuator']), + 'setOperation': (notImplemented, ['KX_SCA_DynamicActuator', 'KX_StateActuator']), + 'position': (notImplemented, ['KX_GameObject', 'KX_SoundActuator']), + 'orientation': (notImplemented, ['KX_GameObject', 'KX_SoundActuator']), + 'getDRot': (notImplemented, ['KX_ObjectActuator']), + 'setDRot': (notImplemented, ['KX_ObjectActuator']), + 'getDLoc': (notImplemented, ['KX_ObjectActuator']), + 'setDLoc': (notImplemented, ['KX_ObjectActuator']), + 'getTorque': (notImplemented, ['KX_ObjectActuator']), + 'getTorque': (notImplemented, ['KX_ObjectActuator']), + 'getForce': (notImplemented, ['KX_ObjectActuator']), + 'setForce': (notImplemented, ['KX_ObjectActuator']), +} + +def convert248to249(lines, log = True, logErrors = True, fileName = None): + # Regular expression for finding attributes. For the string 'a.b', this + # returns three groups: ['a.b', 'a.', 'b']. The last is the attribute name. + attrRegex = re.compile(r'\.\s*' # Dot + r'([a-zA-Z_]\w*)') # Identifier + + fileIdStr = "" + if fileName: + fileIdStr = fileName + ": " + row = 0 + col = 0 + nconverted = 0 + nerrors = 0 + while row < len(lines): + originalLine = lines[row] + changed = False + while col < len(lines[row]): + # Don't search past comment. We have to check each iteration + # because the line contents may have changed. + commentStart = lines[row].find('#', col) + if commentStart < 0: + commentStart = len(lines[row]) + + # Search for an attribute identifier. + match = attrRegex.search(lines[row], col, commentStart) + if not match: + break + + attrName = match.group(1) + if attributeRenameDict.has_key(attrName): + # name is deprecated. + func, closure = attributeRenameDict[attrName] + try: + # Convert! + func(lines, row, match.start(1), match.end(1), closure) + except ConversionError as e: + # Insert a comment saying the conversion failed. + print "ERROR: %sline %d, %s: %s\n" % ( + fileIdStr, row + 1, attrName, e) + if logErrors: + lines.insert(row, + "##248## ERROR: %s: %s\n" % + (attrName, e)) + row = row + 1 + nerrors = nerrors + 1 + else: + changed = True + nconverted = nconverted + 1 + # Search the rest of this line. + col = match.start(1) + + if changed and log: + # Insert a comment to showing difference in lines. + if originalLine[-1] != '\n': + originalLine = originalLine + '\n' + lines.insert(row, "##248##%s" % originalLine) + row = row + 1 + + row = row + 1 + col = 0 + return nconverted, nerrors + +def usage(): + print "Usage: blender248to249.py [options] [outfile]" + print "Options:" + print "\t--nolog Don't include old lines as comments." + print "\t--quieterrors Don't insert errors as comments." + +def runAsConsoleScript(): + '''Called when being run as a console script.''' + try: + opts, args = getopt.getopt(sys.argv[1:], "", ["nolog", "quieterrors"]) + except getopt.GetoptError, err: + # print help information and exit: + print str(err) + usage() + sys.exit(2) + + log = True + logErrors = True + for o, a in opts: + if o == "--nolog": + log = False + elif o == "--quieterrors": + logErrors = False + + try: + inpath = args.pop(0) + except IndexError: + usage() + sys.exit(2) + try: + outpath = args.pop(0) + except IndexError: + outpath = inpath + + infile = io.FileIO(inpath, 'r') + # arbitrary file size of around 100kB + lines = infile.readlines(100000) + infile.close() + + nconverted, nerrors = convert248to249(lines, log, logErrors) + + outfile = io.FileIO(outpath, 'w') + outfile.writelines(lines) + outfile.close() + print "Conversion finished. Modified %d attributes." % nconverted + print "There were %d errors." % nerrors + print "Please review all the changes." + +def runAsTextPlugin(): + '''Called when run as a text plugin.''' + + import Blender + from Blender import Window, sys, Draw + import BPyTextPlugin, bpy + + message = ("Convert Game Engine script from 4.48 API to 2.49 API%t|" + "Run on active script only%x1|" + "Run on ALL text buffers%x2") + convertAllBuffers = Draw.PupMenu(message) == 2 + + Window.WaitCursor(1) + try: + nconverted = 0 + nerrors = 0 + + if convertAllBuffers: + texts = bpy.data.texts + else: + if not bpy.data.texts.active: + Draw.PupMenu("No active buffer.") + return + texts = [bpy.data.texts.active] + + Blender.SaveUndoState('Convert BGE 2.49') + + for txt in texts: + bufName = txt.name + if txt.lib: + bufName = txt.lib + '/' + bufName + lines = txt.asLines() + for i in range(0, len(lines)): + if not lines[i].endswith('\n'): + lines[i] = lines[i] + '\n' + + nc, ne = convert248to249(lines, fileName = bufName) + nconverted = nconverted + nc + nerrors = nerrors + ne + txt.clear() + for line in lines: + txt.write(line) + + finally: + Window.WaitCursor(0) + + message = "Converted %d attributes." % nconverted + if nerrors == 1: + message = message + " There was 1 error (see console)." + if nerrors > 1: + message = message + " There were %d errors (see console)." % nerrors + message = message + "|Please review all the changes." + Draw.PupMenu(message) + +def main(): + try: + import Blender + except ImportError: + runAsConsoleScript() + else: + runAsTextPlugin() + +# This lets you import the script without running it +if __name__ == "__main__": + import sys + import getopt + import io + main() diff --git a/release/scripts/wizard_bolt_factory.py b/release/scripts/wizard_bolt_factory.py new file mode 100644 index 00000000000..6a280eccc58 --- /dev/null +++ b/release/scripts/wizard_bolt_factory.py @@ -0,0 +1,2804 @@ +#!BPY +# -*- coding: latin-1 -*- +""" +Name: 'Bolt Factory' +Blender: 248 +Group: 'Wizards' +Tooltip: 'Create models of various types of screw fasteners.' +""" + +__author__ = " Aaron Keith (Spudmn) " +__version__ = "2.00 2009/05/22" +__url__ = ["Author's site,http://sourceforge.net/projects/boltfactory/", "Blender,http://wiki.blender.org/index.php/Extensions:Py/Scripts/Manual/Misc/Bolt_Factory"] +__bpydoc__ = """\ +Bolt_Factory.py + +Bolt Factory is a Python script for Blender 3D. + +The script allows the user to create models of various types of screw fasteners. + +For best results set the material to smooth and apply a Edge Split modifier +with default settings. + + +History: + +V2.00 22/05/09 by Aaron Keith + +- Better error checking. +- Lock Nut and Hex Nut meshes added. +- Pre-sets for common metric bolts and nuts. +- Improved GUI. +- Meshes scaled to a smaller size +- Fixed bug when using crest and root percent other than 10% +- Can now create meshes in Edit Mode. This will add to the + current mesh and align with the current view. + +V1.00 01/04/08 by Aaron Keith + +- This version is very much a work in progress. +- This is my first attempt to program in Python. This version is + unpolished and doesn't do much error checking. Therefore + if the user sets strange variable the model created will be + as equally strange. + +- To Do: +- Better error checking. +- More Head and Bit types. +- Better documentation. + + +""" + +# -------------------------------------------------------------------------- +# Bolt_Factory.py +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Copyright (C) 2009: Aaron Keith +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + + + + +import Blender +from Blender import Draw, BGL,Mesh +from Blender import * +from math import * +from Blender import Mathutils +from Blender.Mathutils import * + + +#Global_Scale = 0.001 #1 blender unit = X mm +Global_Scale = 0.1 #1 blender unit = X mm +#Global_Scale = 1.0 #1 blender unit = X mm +Global_NutRad = 0.0 +MAX_INPUT_NUMBER = 50 + +No_Event,On_Preset_Click,On_Apply_Click,On_Create_Click,On_Hex_Click, On_Cap_Click,On_Dome_Click,On_Pan_Click,On_Bit_None_Click,On_Bit_Allen_Click,On_Bit_Philips_Click,On_Exit_Click,On_Model_Bolt_Click,On_Model_Nut_Click,On_Hex_Nut_Click,On_Lock_Nut_Click,On_Test_Click = range(17) # this is like a ENUM + + +Head_Type={'HEX' : [Draw.Create(1),On_Hex_Click,""], + 'CAP' : [Draw.Create(0),On_Cap_Click,""], + 'DOME': [Draw.Create(0),On_Dome_Click,""], + 'PAN' : [Draw.Create(0),On_Pan_Click,""]} + + +Bit_Type={'NONE' : [Draw.Create(1),On_Bit_None_Click,""], + 'ALLEN' : [Draw.Create(0),On_Bit_Allen_Click,""], + 'PHILLIPS': [Draw.Create(0),On_Bit_Philips_Click,""]} + +Model_Type={'BOLT' : [Draw.Create(1),On_Model_Bolt_Click,"Bolt Settings"], + 'NUT' : [Draw.Create(0),On_Model_Nut_Click,"Nut Settings"]} + +Nut_Type={'HEX' : [Draw.Create(1),On_Hex_Nut_Click,""], + 'LOCK' : [Draw.Create(0),On_Lock_Nut_Click,""]} + + +Phillips_Bit_Depth = Draw.Create(3.27) +Philips_Bit_Dia = Draw.Create(5.20) + +Allen_Bit_Depth = Draw.Create(4.0) +Allen_Bit_Flat_Distance = Draw.Create(6.0) + +Hex_Head_Height = Draw.Create(5.3) +Hex_Head_Flat_Distance = Draw.Create(13.0) + +Cap_Head_Dia = Draw.Create(13.5) +Cap_Head_Height = Draw.Create(8.0) + +Dome_Head_Dia = Draw.Create(16.0) + +Pan_Head_Dia = Draw.Create(16.0) + +Shank_Dia = Draw.Create(8.0) +Shank_Length = Draw.Create(0.0) + +Thread_Length = Draw.Create(16.0) +Major_Dia = Draw.Create(8.0) +Minor_Dia = Draw.Create(6.917) +Pitch = Draw.Create(1.0) +Crest_Percent = Draw.Create(10) +Root_Percent = Draw.Create(10) + +Hex_Nut_Height = Draw.Create(8.0) +Hex_Nut_Flat_Distance = Draw.Create(13.0) + +Preset_Menu = Draw.Create(5) + + +########################################################################################## +########################################################################################## +## Miscellaneous Utilities +########################################################################################## +########################################################################################## + +# Returns a list of verts rotated by the given matrix. Used by SpinDup +def Rot_Mesh(verts,matrix): + return [list(Vector(v) * matrix) for v in verts] + +# Returns a list of faces that has there index incremented by offset +def Copy_Faces(faces,offset): + ret = [] + for f in faces: + fsub = [] + for i in range(len(f)): + fsub.append(f[i]+ offset) + ret.append(fsub) + return ret + + +# Much like Blenders built in SpinDup. +def SpinDup(VERTS,FACES,DEGREE,DIVISIONS,AXIS): + verts=[] + faces=[] + + if DIVISIONS == 0: + DIVISIONS = 1 + + step = DEGREE/DIVISIONS # set step so pieces * step = degrees in arc + + for i in xrange(int(DIVISIONS)): + rotmat = Mathutils.RotationMatrix(step*i, 4, AXIS) # 4x4 rotation matrix, 30d about the x axis. + Rot = Rot_Mesh(VERTS,rotmat) + faces.extend(Copy_Faces(FACES,len(verts))) + verts.extend(Rot) + return verts,faces + + +# Returns a list of verts that have been moved up the z axis by DISTANCE +def Move_Verts_Up_Z(VERTS,DISTANCE): + return [[v[0],v[1],v[2]+DISTANCE] for v in VERTS] + + +# Returns a list of verts and faces that has been mirrored in the AXIS +def Mirror_Verts_Faces(VERTS,FACES,AXIS,FLIP_POINT =0): + ret_vert = [] + ret_face = [] + offset = len(VERTS) + if AXIS == 'y': + for v in VERTS: + Delta = v[0] - FLIP_POINT + ret_vert.append([FLIP_POINT-Delta,v[1],v[2]]) + if AXIS == 'x': + for v in VERTS: + Delta = v[1] - FLIP_POINT + ret_vert.append([v[0],FLIP_POINT-Delta,v[2]]) + if AXIS == 'z': + for v in VERTS: + Delta = v[2] - FLIP_POINT + ret_vert.append([v[0],v[1],FLIP_POINT-Delta]) + + for f in FACES: + fsub = [] + for i in range(len(f)): + fsub.append(f[i]+ offset) + fsub.reverse() # flip the order to make norm point out + ret_face.append(fsub) + + return ret_vert,ret_face + + + +# Returns a list of faces that +# make up an array of 4 point polygon. +def Build_Face_List_Quads(OFFSET,COLUM,ROW,FLIP = 0): + Ret =[] + RowStart = 0; + for j in range(ROW): + for i in range(COLUM): + Res1 = RowStart + i; + Res2 = RowStart + i + (COLUM +1) + Res3 = RowStart + i + (COLUM +1) +1 + Res4 = RowStart+i+1 + if FLIP: + Ret.append([OFFSET+Res1,OFFSET+Res2,OFFSET+Res3,OFFSET+Res4]) + else: + Ret.append([OFFSET+Res4,OFFSET+Res3,OFFSET+Res2,OFFSET+Res1]) + RowStart += COLUM+1 + return Ret + + +# Returns a list of faces that makes up a fill pattern for a +# circle +def Fill_Ring_Face(OFFSET,NUM,FACE_DOWN = 0): + Ret =[] + Face = [1,2,0] + TempFace = [0,0,0] + A = 0 + B = 1 + C = 2 + if NUM < 3: + return None + for i in range(NUM-2): + if (i%2): + TempFace[0] = Face[C]; + TempFace[1] = Face[C] + 1; + TempFace[2] = Face[B]; + if FACE_DOWN: + Ret.append([OFFSET+Face[2],OFFSET+Face[1],OFFSET+Face[0]]) + else: + Ret.append([OFFSET+Face[0],OFFSET+Face[1],OFFSET+Face[2]]) + else: + TempFace[0] =Face[C]; + if Face[C] == 0: + TempFace[1] = NUM-1; + else: + TempFace[1] = Face[C] - 1; + TempFace[2] = Face[B]; + if FACE_DOWN: + Ret.append([OFFSET+Face[0],OFFSET+Face[1],OFFSET+Face[2]]) + else: + Ret.append([OFFSET+Face[2],OFFSET+Face[1],OFFSET+Face[0]]) + + Face[0] = TempFace[0] + Face[1] = TempFace[1] + Face[2] = TempFace[2] + return Ret + + +########################################################################################## +########################################################################################## +## Converter Functions For Bolt Factory +########################################################################################## +########################################################################################## + + +def Flat_To_Radius(FLAT): + h = (float(FLAT)/2)/cos(radians(30)) + return h + +def Get_Phillips_Bit_Height(Bit_Dia): + Flat_Width_half = (Bit_Dia*(0.5/1.82))/2.0 + Bit_Rad = Bit_Dia / 2.0 + x = Bit_Rad - Flat_Width_half + y = tan(radians(60))*x + return y + +########################################################################################## +########################################################################################## +## Error Checking +########################################################################################## +########################################################################################## + + +def Error_Check(): + + #global Phillips_Bit_Depth + #global Philips_Bit_Dia + + #global Allen_Bit_Depth + #global Allen_Bit_Flat_Distance + + #global Hex_Head_Height + #global Hex_Head_Flat_Distance + + #global Cap_Head_Dia + #global Cap_Head_Height + + + #global Dome_Head_Dia + + #global Pan_Head_Dia + + #global Shank_Dia + #global Shank_Length + + global Thread_Length + global Major_Dia + global Minor_Dia + global Pitch + global Hex_Nut_Flat_Distance + global Model_Type + #global Crest_Percent + #global Root_Percent + + Error_Result = 0 + + if Minor_Dia.val >= Major_Dia.val: + error_txt = "Error%t|Major Dia must be larger than Minor Dia" + Blender.Draw.PupMenu(error_txt) + print error_txt + Error_Result = TRUE + + elif (Model_Type['BOLT'][0].val) and ((Pitch.val*7.0) > Thread_Length.val): + error_txt = "Error%t|Thread length must be at least 7 times the Pitch" + Blender.Draw.PupMenu(error_txt) + print error_txt + Error_Result = TRUE + + elif (Model_Type['NUT'][0].val) and (Hex_Nut_Flat_Distance.val < Major_Dia.val): + error_txt = "Error%t|Nut Flat Distance must be greater than Major Dia" + Blender.Draw.PupMenu(error_txt) + print error_txt + Error_Result = TRUE + + elif (Model_Type['NUT'][0].val) and ((Pitch.val * 2.5 )> Hex_Nut_Height.val): + error_txt = "Error%t|Nut Height must be greater than 2.5 * Pitch" + Blender.Draw.PupMenu(error_txt) + print error_txt + Error_Result = TRUE + + elif (Model_Type['BOLT'][0].val): + Check_Head_Height = None + Check_Bit_Height = None + if (Bit_Type['ALLEN'][0].val): + Check_Bit_Height = Allen_Bit_Depth.val + if (Bit_Type['PHILLIPS'][0].val): + Check_Bit_Height = Phillips_Bit_Depth.val + if (Head_Type['HEX'][0].val): + Check_Head_Height = Hex_Head_Height.val + if (Head_Type['CAP'][0].val): + Check_Head_Height = Cap_Head_Height.val + + if Check_Head_Height != None and Check_Bit_Height != None : + if Check_Bit_Height > Check_Head_Height: + error_txt = "Error%t|Bit Depth must not be greater that Head Height" + Blender.Draw.PupMenu(error_txt) + print error_txt + Error_Result = TRUE + + + return Error_Result + + + +########################################################################################## +########################################################################################## +## Create Allen Bit +########################################################################################## +########################################################################################## + + +def Allen_Fill(OFFSET,FLIP= 0): + faces = [] + Lookup = [[19,1,0], + [19,2,1], + [19,3,2], + [19,20,3], + [20,4,3], + [20,5,4], + [20,6,5], + [20,7,6], + [20,8,7], + [20,9,8], + + [20,21,9], + + [21,10,9], + [21,11,10], + [21,12,11], + [21,13,12], + [21,14,13], + [21,15,14], + + [21,22,15], + [22,16,15], + [22,17,16], + [22,18,17] + ] + for i in Lookup: + if FLIP: + faces.append([OFFSET+i[2],OFFSET+i[1],OFFSET+i[0]]) + else: + faces.append([OFFSET+i[0],OFFSET+i[1],OFFSET+i[2]]) + + return faces + +def Allen_Bit_Dia(FLAT_DISTANCE): + Flat_Radius = (float(FLAT_DISTANCE)/2.0)/cos(radians(30)) + return (Flat_Radius * 1.05) * 2.0 + +def Allen_Bit_Dia_To_Flat(DIA): + Flat_Radius = (DIA/2.0)/1.05 + return (Flat_Radius * cos (radians(30)))* 2.0 + + + +def Create_Allen_Bit(FLAT_DISTANCE,HEIGHT): + Div = 36 + verts = [] + faces = [] + + Flat_Radius = (float(FLAT_DISTANCE)/2.0)/cos(radians(30)) + OUTTER_RADIUS = Flat_Radius * 1.05 + Outter_Radius_Height = Flat_Radius * (0.1/5.77) + FaceStart_Outside = len(verts) + Deg_Step = 360.0 /float(Div) + + for i in range((Div/2)+1): # only do half and mirror later + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,0]) + + FaceStart_Inside = len(verts) + + Deg_Step = 360.0 /float(6) + for i in range((6/2)+1): + x = sin(radians(i*Deg_Step))* Flat_Radius + y = cos(radians(i*Deg_Step))* Flat_Radius + verts.append([x,y,0-Outter_Radius_Height]) + + faces.extend(Allen_Fill(FaceStart_Outside,0)) + + + FaceStart_Bottom = len(verts) + + Deg_Step = 360.0 /float(6) + for i in range((6/2)+1): + x = sin(radians(i*Deg_Step))* Flat_Radius + y = cos(radians(i*Deg_Step))* Flat_Radius + verts.append([x,y,0-HEIGHT]) + + faces.extend(Build_Face_List_Quads(FaceStart_Inside,3,1,TRUE)) + faces.extend(Fill_Ring_Face(FaceStart_Bottom,4)) + + + M_Verts,M_Faces = Mirror_Verts_Faces(verts,faces,'y') + verts.extend(M_Verts) + faces.extend(M_Faces) + + return verts,faces,OUTTER_RADIUS * 2.0 + + +########################################################################################## +########################################################################################## +## Create Phillips Bit +########################################################################################## +########################################################################################## + + +def Phillips_Fill(OFFSET,FLIP= 0): + faces = [] + Lookup = [[0,1,10], + [1,11,10], + [1,2,11], + [2,12,11], + + [2,3,12], + [3,4,12], + [4,5,12], + [5,6,12], + [6,7,12], + + [7,13,12], + [7,8,13], + [8,14,13], + [8,9,14], + + + [10,11,16,15], + [11,12,16], + [12,13,16], + [13,14,17,16], + [15,16,17,18] + + + ] + for i in Lookup: + if FLIP: + if len(i) == 3: + faces.append([OFFSET+i[2],OFFSET+i[1],OFFSET+i[0]]) + else: + faces.append([OFFSET+i[3],OFFSET+i[2],OFFSET+i[1],OFFSET+i[0]]) + else: + if len(i) == 3: + faces.append([OFFSET+i[0],OFFSET+i[1],OFFSET+i[2]]) + else: + faces.append([OFFSET+i[0],OFFSET+i[1],OFFSET+i[2],OFFSET+i[3]]) + return faces + + + +def Create_Phillips_Bit(FLAT_DIA,FLAT_WIDTH,HEIGHT): + Div = 36 + verts = [] + faces = [] + + FLAT_RADIUS = FLAT_DIA * 0.5 + OUTTER_RADIUS = FLAT_RADIUS * 1.05 + + Flat_Half = float(FLAT_WIDTH)/2.0 + + FaceStart_Outside = len(verts) + Deg_Step = 360.0 /float(Div) + for i in range((Div/4)+1): # only do half and mirror later + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,0]) + + + FaceStart_Inside = len(verts) + verts.append([0,FLAT_RADIUS,0]) #10 + verts.append([Flat_Half,FLAT_RADIUS,0]) #11 + verts.append([Flat_Half,Flat_Half,0]) #12 + verts.append([FLAT_RADIUS,Flat_Half,0]) #13 + verts.append([FLAT_RADIUS,0,0]) #14 + + + verts.append([0,Flat_Half,0-HEIGHT]) #15 + verts.append([Flat_Half,Flat_Half,0-HEIGHT]) #16 + verts.append([Flat_Half,0,0-HEIGHT]) #17 + + verts.append([0,0,0-HEIGHT]) #18 + + faces.extend(Phillips_Fill(FaceStart_Outside,TRUE)) + + Spin_Verts,Spin_Face = SpinDup(verts,faces,360,4,'z') + + return Spin_Verts,Spin_Face,OUTTER_RADIUS * 2 + + +########################################################################################## +########################################################################################## +## Create Head Types +########################################################################################## +########################################################################################## + +def Max_Pan_Bit_Dia(HEAD_DIA): + HEAD_RADIUS = HEAD_DIA * 0.5 + XRad = HEAD_RADIUS * 1.976 + return (sin(radians(10))*XRad) * 2.0 + + +def Create_Pan_Head(HOLE_DIA,HEAD_DIA,SHANK_DIA,HEIGHT,RAD1,RAD2,FACE_OFFSET): + + DIV = 36 + HOLE_RADIUS = HOLE_DIA * 0.5 + HEAD_RADIUS = HEAD_DIA * 0.5 + SHANK_RADIUS = SHANK_DIA * 0.5 + + verts = [] + faces = [] + Row = 0 + BEVEL = HEIGHT * 0.01 + #Dome_Rad = HEAD_RADIUS * (1.0/1.75) + + Dome_Rad = HEAD_RADIUS * 1.12 + RAD_Offset = HEAD_RADIUS * 0.96 + OtherRad = HEAD_RADIUS * 0.16 + OtherRad_X_Offset = HEAD_RADIUS * 0.84 + OtherRad_Z_Offset = HEAD_RADIUS * 0.504 + XRad = HEAD_RADIUS * 1.976 + ZRad = HEAD_RADIUS * 1.768 + EndRad = HEAD_RADIUS * 0.284 + EndZOffset = HEAD_RADIUS * 0.432 + HEIGHT = HEAD_RADIUS * 0.59 + +# Dome_Rad = 5.6 +# RAD_Offset = 4.9 +# OtherRad = 0.8 +# OtherRad_X_Offset = 4.2 +# OtherRad_Z_Offset = 2.52 +# XRad = 9.88 +# ZRad = 8.84 +# EndRad = 1.42 +# EndZOffset = 2.16 +# HEIGHT = 2.95 + + FaceStart = FACE_OFFSET + + z = cos(radians(10))*ZRad + verts.append([HOLE_RADIUS,0.0,(0.0-ZRad)+z]) + Start_Height = 0 - ((0.0-ZRad)+z) + Row += 1 + + #for i in range(0,30,10): was 0 to 30 more work needed to make this look good. + for i in range(10,30,10): + x = sin(radians(i))*XRad + z = cos(radians(i))*ZRad + verts.append([x,0.0,(0.0-ZRad)+z]) + Row += 1 + + for i in range(20,140,10): + x = sin(radians(i))*EndRad + z = cos(radians(i))*EndRad + if ((0.0 - EndZOffset)+z) < (0.0-HEIGHT): + verts.append([(HEAD_RADIUS -EndRad)+x,0.0,0.0 - HEIGHT]) + else: + verts.append([(HEAD_RADIUS -EndRad)+x,0.0,(0.0 - EndZOffset)+z]) + Row += 1 + + + verts.append([SHANK_RADIUS,0.0,(0.0-HEIGHT)]) + Row += 1 + + verts.append([SHANK_RADIUS,0.0,(0.0-HEIGHT)-Start_Height]) + Row += 1 + + + sVerts,sFaces = SpinDup(verts,faces,360,DIV,'z') + sVerts.extend(verts) #add the start verts to the Spin verts to complete the loop + + faces.extend(Build_Face_List_Quads(FaceStart,Row-1,DIV)) + + Global_Head_Height = HEIGHT ; + + + return Move_Verts_Up_Z(sVerts,Start_Height),faces,HEIGHT + + + +def Create_Dome_Head(HOLE_DIA,HEAD_DIA,SHANK_DIA,HEIGHT,RAD1,RAD2,FACE_OFFSET): + DIV = 36 + HOLE_RADIUS = HOLE_DIA * 0.5 + HEAD_RADIUS = HEAD_DIA * 0.5 + SHANK_RADIUS = SHANK_DIA * 0.5 + + verts = [] + faces = [] + Row = 0 + BEVEL = HEIGHT * 0.01 + #Dome_Rad = HEAD_RADIUS * (1.0/1.75) + + Dome_Rad = HEAD_RADIUS * 1.12 + #Head_Height = HEAD_RADIUS * 0.78 + RAD_Offset = HEAD_RADIUS * 0.98 + Dome_Height = HEAD_RADIUS * 0.64 + OtherRad = HEAD_RADIUS * 0.16 + OtherRad_X_Offset = HEAD_RADIUS * 0.84 + OtherRad_Z_Offset = HEAD_RADIUS * 0.504 + + +# Dome_Rad = 5.6 +# RAD_Offset = 4.9 +# Dome_Height = 3.2 +# OtherRad = 0.8 +# OtherRad_X_Offset = 4.2 +# OtherRad_Z_Offset = 2.52 +# + + FaceStart = FACE_OFFSET + + verts.append([HOLE_RADIUS,0.0,0.0]) + Row += 1 + + + for i in range(0,60,10): + x = sin(radians(i))*Dome_Rad + z = cos(radians(i))*Dome_Rad + if ((0.0-RAD_Offset)+z) <= 0: + verts.append([x,0.0,(0.0-RAD_Offset)+z]) + Row += 1 + + + for i in range(60,160,10): + x = sin(radians(i))*OtherRad + z = cos(radians(i))*OtherRad + z = (0.0-OtherRad_Z_Offset)+z + if z < (0.0-Dome_Height): + z = (0.0-Dome_Height) + verts.append([OtherRad_X_Offset+x,0.0,z]) + Row += 1 + + verts.append([SHANK_RADIUS,0.0,(0.0-Dome_Height)]) + Row += 1 + + + sVerts,sFaces = SpinDup(verts,faces,360,DIV,'z') + sVerts.extend(verts) #add the start verts to the Spin verts to complete the loop + + faces.extend(Build_Face_List_Quads(FaceStart,Row-1,DIV)) + + return sVerts,faces,Dome_Height + + + +def Create_Cap_Head(HOLE_DIA,HEAD_DIA,SHANK_DIA,HEIGHT,RAD1,RAD2): + DIV = 36 + + HOLE_RADIUS = HOLE_DIA * 0.5 + HEAD_RADIUS = HEAD_DIA * 0.5 + SHANK_RADIUS = SHANK_DIA * 0.5 + + verts = [] + faces = [] + Row = 0 + BEVEL = HEIGHT * 0.01 + + + FaceStart = len(verts) + + verts.append([HOLE_RADIUS,0.0,0.0]) + Row += 1 + + #rad + + for i in range(0,100,10): + x = sin(radians(i))*RAD1 + z = cos(radians(i))*RAD1 + verts.append([(HEAD_RADIUS-RAD1)+x,0.0,(0.0-RAD1)+z]) + Row += 1 + + + verts.append([HEAD_RADIUS,0.0,0.0-HEIGHT+BEVEL]) + Row += 1 + + verts.append([HEAD_RADIUS-BEVEL,0.0,0.0-HEIGHT]) + Row += 1 + + #rad2 + + for i in range(0,100,10): + x = sin(radians(i))*RAD2 + z = cos(radians(i))*RAD2 + verts.append([(SHANK_RADIUS+RAD2)-x,0.0,(0.0-HEIGHT-RAD2)+z]) + Row += 1 + + + sVerts,sFaces = SpinDup(verts,faces,360,DIV,'z') + sVerts.extend(verts) #add the start verts to the Spin verts to complete the loop + + + faces.extend(Build_Face_List_Quads(FaceStart,Row-1,DIV)) + + return sVerts,faces,HEIGHT+RAD2 + + + +def Create_Hex_Head(FLAT,HOLE_DIA,SHANK_DIA,HEIGHT): + + verts = [] + faces = [] + HOLE_RADIUS = HOLE_DIA * 0.5 + Half_Flat = FLAT/2 + TopBevelRadius = Half_Flat - (Half_Flat* (0.05/8)) + Undercut_Height = (Half_Flat* (0.05/8)) + Shank_Bevel = (Half_Flat* (0.05/8)) + Flat_Height = HEIGHT - Undercut_Height - Shank_Bevel + #Undercut_Height = 5 + SHANK_RADIUS = SHANK_DIA/2 + Row = 0; + + verts.append([0.0,0.0,0.0]) + + + FaceStart = len(verts) + #inner hole + + x = sin(radians(0))*HOLE_RADIUS + y = cos(radians(0))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/6))*HOLE_RADIUS + y = cos(radians(60/6))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/3))*HOLE_RADIUS + y = cos(radians(60/3))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/2))*HOLE_RADIUS + y = cos(radians(60/2))*HOLE_RADIUS + verts.append([x,y,0.0]) + Row += 1 + + #bevel + + x = sin(radians(0))*TopBevelRadius + y = cos(radians(0))*TopBevelRadius + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/6))*TopBevelRadius + y = cos(radians(60/6))*TopBevelRadius + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/3))*TopBevelRadius + y = cos(radians(60/3))*TopBevelRadius + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/2))*TopBevelRadius + y = cos(radians(60/2))*TopBevelRadius + vec4 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + Row += 1 + + #Flats + + x = tan(radians(0))*Half_Flat + dvec = vec1 - Mathutils.Vector([x,Half_Flat,0.0]) + verts.append([x,Half_Flat,-dvec.length]) + + + x = tan(radians(60/6))*Half_Flat + dvec = vec2 - Mathutils.Vector([x,Half_Flat,0.0]) + verts.append([x,Half_Flat,-dvec.length]) + + + x = tan(radians(60/3))*Half_Flat + dvec = vec3 - Mathutils.Vector([x,Half_Flat,0.0]) + Lowest_Point = -dvec.length + verts.append([x,Half_Flat,-dvec.length]) + + + x = tan(radians(60/2))*Half_Flat + dvec = vec4 - Mathutils.Vector([x,Half_Flat,0.0]) + Lowest_Point = -dvec.length + verts.append([x,Half_Flat,-dvec.length]) + Row += 1 + + #down Bits Tri + x = tan(radians(0))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + x = tan(radians(60/6))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + x = tan(radians(60/3))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + x = tan(radians(60/2))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + Row += 1 + + #down Bits + + x = tan(radians(0))*Half_Flat + verts.append([x,Half_Flat,-Flat_Height]) + + x = tan(radians(60/6))*Half_Flat + verts.append([x,Half_Flat,-Flat_Height]) + + x = tan(radians(60/3))*Half_Flat + verts.append([x,Half_Flat,-Flat_Height]) + + x = tan(radians(60/2))*Half_Flat + verts.append([x,Half_Flat,-Flat_Height]) + Row += 1 + + + #under cut + + x = sin(radians(0))*Half_Flat + y = cos(radians(0))*Half_Flat + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height]) + + x = sin(radians(60/6))*Half_Flat + y = cos(radians(60/6))*Half_Flat + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height]) + + x = sin(radians(60/3))*Half_Flat + y = cos(radians(60/3))*Half_Flat + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height]) + + x = sin(radians(60/2))*Half_Flat + y = cos(radians(60/2))*Half_Flat + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height]) + Row += 1 + + #under cut down bit + x = sin(radians(0))*Half_Flat + y = cos(radians(0))*Half_Flat + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/6))*Half_Flat + y = cos(radians(60/6))*Half_Flat + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/3))*Half_Flat + y = cos(radians(60/3))*Half_Flat + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/2))*Half_Flat + y = cos(radians(60/2))*Half_Flat + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + Row += 1 + + #under cut to Shank BEVEAL + x = sin(radians(0))*(SHANK_RADIUS+Shank_Bevel) + y = cos(radians(0))*(SHANK_RADIUS+Shank_Bevel) + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/6))*(SHANK_RADIUS+Shank_Bevel) + y = cos(radians(60/6))*(SHANK_RADIUS+Shank_Bevel) + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/3))*(SHANK_RADIUS+Shank_Bevel) + y = cos(radians(60/3))*(SHANK_RADIUS+Shank_Bevel) + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + + x = sin(radians(60/2))*(SHANK_RADIUS+Shank_Bevel) + y = cos(radians(60/2))*(SHANK_RADIUS+Shank_Bevel) + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height]) + Row += 1 + + #under cut to Shank BEVEAL + x = sin(radians(0))*SHANK_RADIUS + y = cos(radians(0))*SHANK_RADIUS + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height-Shank_Bevel]) + + x = sin(radians(60/6))*SHANK_RADIUS + y = cos(radians(60/6))*SHANK_RADIUS + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height-Shank_Bevel]) + + x = sin(radians(60/3))*SHANK_RADIUS + y = cos(radians(60/3))*SHANK_RADIUS + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height-Shank_Bevel]) + + x = sin(radians(60/2))*SHANK_RADIUS + y = cos(radians(60/2))*SHANK_RADIUS + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,-Flat_Height-Undercut_Height-Shank_Bevel]) + Row += 1 + + + #Global_Head_Height = 0 - (-HEIGHT-0.1) + faces.extend(Build_Face_List_Quads(FaceStart,3,Row - 1)) + + + Mirror_Verts,Mirror_Faces = Mirror_Verts_Faces(verts,faces,'y') + verts.extend(Mirror_Verts) + faces.extend(Mirror_Faces) + + Spin_Verts,Spin_Faces = SpinDup(verts,faces,360,6,'z') + + return Spin_Verts,Spin_Faces,0 - (-HEIGHT) + + +########################################################################################## +########################################################################################## +## Create Bolt +########################################################################################## +########################################################################################## + + + +def MakeBolt(): + global Phillips_Bit_Depth + global Philips_Bit_Dia + + global Allen_Bit_Depth + global Allen_Bit_Flat_Distance + + global Hex_Head_Height + global Hex_Head_Flat_Distance + + global Cap_Head_Dia + global Cap_Head_Height + + + global Dome_Head_Dia + + global Pan_Head_Dia + + global Shank_Dia + global Shank_Length + + global Thread_Length + global Major_Dia + global Minor_Dia + global Pitch + global Crest_Percent + global Root_Percent + + verts = [] + faces = [] + Bit_Verts = [] + Bit_Faces = [] + Bit_Dia = 0.001 + Head_Verts = [] + Head_Faces= [] + Head_Height = 0.0 + ReSized_Allen_Bit_Flat_Distance = Allen_Bit_Flat_Distance.val # set default + + + Head_Height = Hex_Head_Height.val # will be changed by the Head Functions + + if Bit_Type['ALLEN'][0].val and Head_Type['PAN'][0].val: + #need to size Allen bit if it is too big. + if Allen_Bit_Dia(Allen_Bit_Flat_Distance.val) > Max_Pan_Bit_Dia(Pan_Head_Dia.val): + ReSized_Allen_Bit_Flat_Distance = Allen_Bit_Dia_To_Flat(Max_Pan_Bit_Dia(Pan_Head_Dia.val)) * 1.05 + print "Resized Allen Bit Flat Distance to ",ReSized_Allen_Bit_Flat_Distance + + #bit Mesh + if Bit_Type['ALLEN'][0].val: + Bit_Verts,Bit_Faces,Bit_Dia = Create_Allen_Bit(ReSized_Allen_Bit_Flat_Distance,Allen_Bit_Depth.val) + + if Bit_Type['PHILLIPS'][0].val: + Bit_Verts,Bit_Faces,Bit_Dia = Create_Phillips_Bit(Philips_Bit_Dia.val,Philips_Bit_Dia.val*(0.5/1.82),Phillips_Bit_Depth.val) + + + #Head Mesh + if Head_Type['HEX'][0].val: + Head_Verts,Head_Faces,Head_Height = Create_Hex_Head(Hex_Head_Flat_Distance.val,Bit_Dia,Shank_Dia.val,Hex_Head_Height.val) + + elif Head_Type['CAP'][0].val: + Head_Verts,Head_Faces,Head_Height = Create_Cap_Head(Bit_Dia,Cap_Head_Dia.val,Shank_Dia.val,Cap_Head_Height.val,Cap_Head_Dia.val*(1.0/19.0),Cap_Head_Dia.val*(1.0/19.0)) + + elif Head_Type['DOME'][0].val: + Head_Verts,Head_Faces,Head_Height = Create_Dome_Head(Bit_Dia,Dome_Head_Dia.val,Shank_Dia.val,Hex_Head_Height.val,1,1,0) + + elif Head_Type['PAN'][0].val: + Head_Verts,Head_Faces,Head_Height = Create_Pan_Head(Bit_Dia,Pan_Head_Dia.val,Shank_Dia.val,Hex_Head_Height.val,1,1,0) + + + Face_Start = len(verts) + verts.extend(Move_Verts_Up_Z(Bit_Verts,Head_Height)) + faces.extend(Copy_Faces(Bit_Faces,Face_Start)) + + Face_Start = len(verts) + verts.extend(Move_Verts_Up_Z(Head_Verts,Head_Height)) + faces.extend(Copy_Faces(Head_Faces,Face_Start)) + + Face_Start = len(verts) + Thread_Verts,Thread_Faces,Thread_Height = Create_External_Thread(Shank_Dia.val,Shank_Length.val,Minor_Dia.val,Major_Dia.val,Pitch.val,Thread_Length.val,Crest_Percent.val,Root_Percent.val) + + verts.extend(Move_Verts_Up_Z(Thread_Verts,00)) + faces.extend(Copy_Faces(Thread_Faces,Face_Start)) + + return Move_Verts_Up_Z(verts,Thread_Height),faces + + + + + + + +########################################################################################## +########################################################################################## +## Create Internal Thread +########################################################################################## +########################################################################################## + + +def Create_Internal_Thread_Start_Verts(verts,INNER_RADIUS,OUTTER_RADIUS,PITCH,DIV,CREST_PERCENT,ROOT_PERCENT,Height_Offset): + + + Ret_Row = 0; + + Height_Offset = Height_Offset + PITCH #Move the offset up so that the verts start at + #at the correct place (Height_Start) + + Half_Pitch = float(PITCH)/2 + Height_Start = Height_Offset - PITCH + Height_Step = float(PITCH)/float(DIV) + Deg_Step = 360.0 /float(DIV) + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + + Rank = float(OUTTER_RADIUS - INNER_RADIUS)/float(DIV) + for j in range(1): + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z]) + Height_Offset -= Crest_Height + Ret_Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z ]) + Height_Offset -= Crest_to_Root_Height + Ret_Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Height_Offset -= Root_Height + Ret_Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Height_Offset -= Root_to_Crest_Height + Ret_Row += 1 + + return Ret_Row,Height_Offset + + +def Create_Internal_Thread_End_Verts(verts,INNER_RADIUS,OUTTER_RADIUS,PITCH,DIV,CREST_PERCENT,ROOT_PERCENT,Height_Offset): + + + Ret_Row = 0; + + Half_Pitch = float(PITCH)/2 + #Height_End = Height_Offset - PITCH - PITCH - PITCH- PITCH - PITCH- PITCH + Height_End = Height_Offset - PITCH + #Height_End = -2.1 + Height_Step = float(PITCH)/float(DIV) + Deg_Step = 360.0 /float(DIV) + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + + + Rank = float(OUTTER_RADIUS - INNER_RADIUS)/float(DIV) + + Num = 0 + + for j in range(2): + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z < Height_End: + z = Height_End + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z]) + Height_Offset -= Crest_Height + Ret_Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z < Height_End: + z = Height_End + + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z ]) + Height_Offset -= Crest_to_Root_Height + Ret_Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z < Height_End: + z = Height_End + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + if j == Num: + x = sin(radians(i*Deg_Step))*(INNER_RADIUS + (i*Rank)) + y = cos(radians(i*Deg_Step))*(INNER_RADIUS + (i*Rank)) + if j > Num: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS ) + + verts.append([x,y,z ]) + Height_Offset -= Root_Height + Ret_Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z < Height_End: + z = Height_End + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + + if j == Num: + x = sin(radians(i*Deg_Step))*(INNER_RADIUS + (i*Rank)) + y = cos(radians(i*Deg_Step))*(INNER_RADIUS + (i*Rank)) + if j > Num: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS ) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS ) + + verts.append([x,y,z ]) + Height_Offset -= Root_to_Crest_Height + Ret_Row += 1 + + + return Ret_Row,Height_End # send back Height End as this is the lowest point + + +def Create_Internal_Thread(INNER_DIA,OUTTER_DIA,PITCH,HEIGHT,CREST_PERCENT,ROOT_PERCENT,INTERNAL = 1): + verts = [] + faces = [] + + DIV = 36 + + INNER_RADIUS = INNER_DIA/2 + OUTTER_RADIUS = OUTTER_DIA/2 + + Half_Pitch = float(PITCH)/2 + Deg_Step = 360.0 /float(DIV) + Height_Step = float(PITCH)/float(DIV) + + Num = int(round((HEIGHT- PITCH)/PITCH)) # less one pitch for the start and end that is 1/2 pitch high + + Col = 0 + Row = 0 + + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + Height_Offset = 0 + FaceStart = len(verts) + + Row_Inc,Height_Offset = Create_Internal_Thread_Start_Verts(verts,INNER_RADIUS,OUTTER_RADIUS,PITCH,DIV,CREST_PERCENT,ROOT_PERCENT,Height_Offset) + Row += Row_Inc + + for j in range(Num): + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,Height_Offset - (Height_Step*i) ]) + Height_Offset -= Crest_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,Height_Offset - (Height_Step*i) ]) + Height_Offset -= Crest_to_Root_Height + Row += 1 + + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + verts.append([x,y,Height_Offset - (Height_Step*i) ]) + Height_Offset -= Root_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + verts.append([x,y,Height_Offset - (Height_Step*i) ]) + Height_Offset -= Root_to_Crest_Height + Row += 1 + + + Row_Inc,Height_Offset = Create_Internal_Thread_End_Verts(verts,INNER_RADIUS,OUTTER_RADIUS,PITCH,DIV,CREST_PERCENT,ROOT_PERCENT,Height_Offset) + Row += Row_Inc + + faces.extend(Build_Face_List_Quads(FaceStart,DIV,Row -1,INTERNAL)) + + return verts,faces,0 - Height_Offset + + + +########################################################################################## +########################################################################################## +## Create External Thread +########################################################################################## +########################################################################################## + + + +def Thread_Start3(verts,INNER_RADIUS,OUTTER_RADIUS,PITCH,DIV,CREST_PERCENT,ROOT_PERCENT,Height_Offset): + + + Ret_Row = 0; + + Half_Pitch = float(PITCH)/2 + Height_Start = Height_Offset - PITCH + Height_Step = float(PITCH)/float(DIV) + Deg_Step = 360.0 /float(DIV) + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + +#theard start + + Rank = float(OUTTER_RADIUS - INNER_RADIUS)/float(DIV) + for j in range(4): + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z]) + Height_Offset -= Crest_Height + Ret_Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z ]) + Height_Offset -= Crest_to_Root_Height + Ret_Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Height_Offset -= Root_Height + Ret_Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Height_Offset -= Root_to_Crest_Height + Ret_Row += 1 + + return Ret_Row,Height_Offset + + +def Create_Shank_Verts(START_DIA,OUTTER_DIA,LENGTH,Z_LOCATION = 0): + + verts = [] + DIV = 36 + + START_RADIUS = START_DIA/2 + OUTTER_RADIUS = OUTTER_DIA/2 + + Opp = abs(START_RADIUS - OUTTER_RADIUS) + Taper_Lentgh = Opp/tan(radians(31)); + + if Taper_Lentgh > LENGTH: + Taper_Lentgh = 0 + + Stright_Length = LENGTH - Taper_Lentgh + + Deg_Step = 360.0 /float(DIV) + + Row = 0 + + Lowest_Z_Vert = 0; + + Height_Offset = Z_LOCATION + + + #ring + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*START_RADIUS + y = cos(radians(i*Deg_Step))*START_RADIUS + z = Height_Offset - 0 + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Stright_Length + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*START_RADIUS + y = cos(radians(i*Deg_Step))*START_RADIUS + z = Height_Offset - 0 + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Taper_Lentgh + Row += 1 + + + return verts,Row,Height_Offset + + +def Create_Thread_Start_Verts(INNER_DIA,OUTTER_DIA,PITCH,CREST_PERCENT,ROOT_PERCENT,Z_LOCATION = 0): + + verts = [] + DIV = 36 + + INNER_RADIUS = INNER_DIA/2 + OUTTER_RADIUS = OUTTER_DIA/2 + + Half_Pitch = float(PITCH)/2 + Deg_Step = 360.0 /float(DIV) + Height_Step = float(PITCH)/float(DIV) + + Row = 0 + + Lowest_Z_Vert = 0; + + Height_Offset = Z_LOCATION + + Height_Start = Height_Offset + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + Rank = float(OUTTER_RADIUS - INNER_RADIUS)/float(DIV) + + Height_Offset = Z_LOCATION + PITCH + Cut_off = Z_LOCATION + + + for j in range(1): + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + if z > Cut_off : z = Cut_off + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + if z > Cut_off : z = Cut_off + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_to_Root_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + if z > Cut_off : z = Cut_off + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + if z > Cut_off : z = Cut_off + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_to_Crest_Height + Row += 1 + + + for j in range(2): + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_Height + Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + verts.append([x,y,z ]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_to_Root_Height + Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_Height + Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + if z > Height_Start: + z = Height_Start + + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + + if j == 0: + x = sin(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + y = cos(radians(i*Deg_Step))*(OUTTER_RADIUS - (i*Rank)) + verts.append([x,y,z ]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_to_Crest_Height + Row += 1 + + + return verts,Row,Height_Offset + + + +def Create_Thread_Verts(INNER_DIA,OUTTER_DIA,PITCH,HEIGHT,CREST_PERCENT,ROOT_PERCENT,Z_LOCATION = 0): + verts = [] + + DIV = 36 + + INNER_RADIUS = INNER_DIA/2 + OUTTER_RADIUS = OUTTER_DIA/2 + + Half_Pitch = float(PITCH)/2 + Deg_Step = 360.0 /float(DIV) + Height_Step = float(PITCH)/float(DIV) + + NUM_OF_START_THREADS = 4.0 + NUM_OF_END_THREADS = 3.0 + Num = int((HEIGHT- ((NUM_OF_START_THREADS*PITCH) + (NUM_OF_END_THREADS*PITCH) ))/PITCH) + Row = 0 + + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + + Height_Offset = Z_LOCATION + + Lowest_Z_Vert = 0; + FaceStart = len(verts) + + + for j in range(Num): + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*OUTTER_RADIUS + y = cos(radians(i*Deg_Step))*OUTTER_RADIUS + z = Height_Offset - (Height_Step*i) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_to_Root_Height + Row += 1 + + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + z = Height_Offset - (Height_Step*i) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_Height + Row += 1 + + for i in range(DIV+1): + x = sin(radians(i*Deg_Step))*INNER_RADIUS + y = cos(radians(i*Deg_Step))*INNER_RADIUS + z = Height_Offset - (Height_Step*i) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_to_Crest_Height + Row += 1 + + return verts,Row,Height_Offset + + + +def Create_Thread_End_Verts(INNER_DIA,OUTTER_DIA,PITCH,CREST_PERCENT,ROOT_PERCENT,Z_LOCATION = 0): + verts = [] + + DIV = 36 + + INNER_RADIUS = INNER_DIA/2 + OUTTER_RADIUS = OUTTER_DIA/2 + + Half_Pitch = float(PITCH)/2 + Deg_Step = 360.0 /float(DIV) + Height_Step = float(PITCH)/float(DIV) + + Crest_Height = float(PITCH) * float(CREST_PERCENT)/float(100) + Root_Height = float(PITCH) * float(ROOT_PERCENT)/float(100) + Root_to_Crest_Height = Crest_to_Root_Height = (float(PITCH) - (Crest_Height + Root_Height))/2.0 + + Col = 0 + Row = 0 + + Height_Offset = Z_LOCATION + + Tapper_Height_Start = Height_Offset - PITCH - PITCH + + Max_Height = Tapper_Height_Start - PITCH + + Lowest_Z_Vert = 0; + + FaceStart = len(verts) + for j in range(4): + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + z = max(z,Max_Height) + Tapper_Radius = OUTTER_RADIUS + if z < Tapper_Height_Start: + Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z) + + x = sin(radians(i*Deg_Step))*(Tapper_Radius) + y = cos(radians(i*Deg_Step))*(Tapper_Radius) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_Height + Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + z = max(z,Max_Height) + Tapper_Radius = OUTTER_RADIUS + if z < Tapper_Height_Start: + Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z) + + x = sin(radians(i*Deg_Step))*(Tapper_Radius) + y = cos(radians(i*Deg_Step))*(Tapper_Radius) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Crest_to_Root_Height + Row += 1 + + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + z = max(z,Max_Height) + Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z) + if Tapper_Radius > INNER_RADIUS: + Tapper_Radius = INNER_RADIUS + + x = sin(radians(i*Deg_Step))*(Tapper_Radius) + y = cos(radians(i*Deg_Step))*(Tapper_Radius) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_Height + Row += 1 + + for i in range(DIV+1): + z = Height_Offset - (Height_Step*i) + z = max(z,Max_Height) + Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z) + if Tapper_Radius > INNER_RADIUS: + Tapper_Radius = INNER_RADIUS + + x = sin(radians(i*Deg_Step))*(Tapper_Radius) + y = cos(radians(i*Deg_Step))*(Tapper_Radius) + verts.append([x,y,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Height_Offset -= Root_to_Crest_Height + Row += 1 + + return verts,Row,Height_Offset,Lowest_Z_Vert + + + + +def Create_External_Thread(SHANK_DIA,SHANK_LENGTH,INNER_DIA,OUTTER_DIA,PITCH,LENGTH,CREST_PERCENT,ROOT_PERCENT): + + verts = [] + faces = [] + + DIV = 36 + + Total_Row = 0 + Thread_Len = 0; + + Face_Start = len(verts) + Offset = 0.0; + + + Shank_Verts,Shank_Row,Offset = Create_Shank_Verts(SHANK_DIA,OUTTER_DIA,SHANK_LENGTH,Offset) + Total_Row += Shank_Row + + Thread_Start_Verts,Thread_Start_Row,Offset = Create_Thread_Start_Verts(INNER_DIA,OUTTER_DIA,PITCH,CREST_PERCENT,ROOT_PERCENT,Offset) + Total_Row += Thread_Start_Row + + + Thread_Verts,Thread_Row,Offset = Create_Thread_Verts(INNER_DIA,OUTTER_DIA,PITCH,LENGTH,CREST_PERCENT,ROOT_PERCENT,Offset) + Total_Row += Thread_Row + + + Thread_End_Verts,Thread_End_Row,Offset,Lowest_Z_Vert = Create_Thread_End_Verts(INNER_DIA,OUTTER_DIA,PITCH,CREST_PERCENT,ROOT_PERCENT,Offset ) + Total_Row += Thread_End_Row + + + verts.extend(Shank_Verts) + verts.extend(Thread_Start_Verts) + verts.extend(Thread_Verts) + verts.extend(Thread_End_Verts) + + faces.extend(Build_Face_List_Quads(Face_Start,DIV,Total_Row -1,0)) + faces.extend(Fill_Ring_Face(len(verts)-DIV,DIV,1)) + + return verts,faces,0.0 - Lowest_Z_Vert + + +########################################################################################## +########################################################################################## +## Create Nut +########################################################################################## +########################################################################################## + + +def add_Hex_Nut(FLAT,HOLE_DIA,HEIGHT): + global Global_Head_Height + global Global_NutRad + + verts = [] + faces = [] + HOLE_RADIUS = HOLE_DIA * 0.5 + Half_Flat = FLAT/2 + Half_Height = HEIGHT/2 + TopBevelRadius = Half_Flat - 0.05 + + Global_NutRad = TopBevelRadius + + Row = 0; + Lowest_Z_Vert = 0.0; + + verts.append([0.0,0.0,0.0]) + + + FaceStart = len(verts) + #inner hole + + x = sin(radians(0))*HOLE_RADIUS + y = cos(radians(0))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/6))*HOLE_RADIUS + y = cos(radians(60/6))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/3))*HOLE_RADIUS + y = cos(radians(60/3))*HOLE_RADIUS + verts.append([x,y,0.0]) + + + x = sin(radians(60/2))*HOLE_RADIUS + y = cos(radians(60/2))*HOLE_RADIUS + verts.append([x,y,0.0]) + Row += 1 + + #bevel + + x = sin(radians(0))*TopBevelRadius + y = cos(radians(0))*TopBevelRadius + vec1 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/6))*TopBevelRadius + y = cos(radians(60/6))*TopBevelRadius + vec2 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/3))*TopBevelRadius + y = cos(radians(60/3))*TopBevelRadius + vec3 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + + + x = sin(radians(60/2))*TopBevelRadius + y = cos(radians(60/2))*TopBevelRadius + vec4 = Mathutils.Vector([x,y,0.0]) + verts.append([x,y,0.0]) + Row += 1 + + #Flats + + x = tan(radians(0))*Half_Flat + dvec = vec1 - Mathutils.Vector([x,Half_Flat,0.0]) + verts.append([x,Half_Flat,-dvec.length]) + Lowest_Z_Vert = min(Lowest_Z_Vert,-dvec.length) + + + x = tan(radians(60/6))*Half_Flat + dvec = vec2 - Mathutils.Vector([x,Half_Flat,0.0]) + verts.append([x,Half_Flat,-dvec.length]) + Lowest_Z_Vert = min(Lowest_Z_Vert,-dvec.length) + + + x = tan(radians(60/3))*Half_Flat + dvec = vec3 - Mathutils.Vector([x,Half_Flat,0.0]) + Lowest_Point = -dvec.length + verts.append([x,Half_Flat,-dvec.length]) + Lowest_Z_Vert = min(Lowest_Z_Vert,-dvec.length) + + x = tan(radians(60/2))*Half_Flat + dvec = vec4 - Mathutils.Vector([x,Half_Flat,0.0]) + Lowest_Point = -dvec.length + verts.append([x,Half_Flat,-dvec.length]) + Lowest_Z_Vert = min(Lowest_Z_Vert,-dvec.length) + Row += 1 + + #down Bits Tri + x = tan(radians(0))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + + x = tan(radians(60/6))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + x = tan(radians(60/3))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + + x = tan(radians(60/2))*Half_Flat + verts.append([x,Half_Flat,Lowest_Point]) + Lowest_Z_Vert = min(Lowest_Z_Vert,Lowest_Point) + Row += 1 + + #down Bits + + x = tan(radians(0))*Half_Flat + verts.append([x,Half_Flat,-Half_Height]) + + x = tan(radians(60/6))*Half_Flat + verts.append([x,Half_Flat,-Half_Height]) + + x = tan(radians(60/3))*Half_Flat + verts.append([x,Half_Flat,-Half_Height]) + + x = tan(radians(60/2))*Half_Flat + verts.append([x,Half_Flat,-Half_Height]) + Lowest_Z_Vert = min(Lowest_Z_Vert,-Half_Height) + Row += 1 + + + + + faces.extend(Build_Face_List_Quads(FaceStart,3,Row - 1)) + + + Global_Head_Height = HEIGHT + + Tvert,tface = Mirror_Verts_Faces(verts,faces,'z',Lowest_Z_Vert) + verts.extend(Tvert) + faces.extend(tface) + + + Tvert,tface = Mirror_Verts_Faces(verts,faces,'y') + verts.extend(Tvert) + faces.extend(tface) + + S_verts,S_faces = SpinDup(verts,faces,360,6,'z') + return S_verts,S_faces,TopBevelRadius + + +def add_Nylon_Head(OUTSIDE_RADIUS,Z_LOCATION = 0): + DIV = 36 + verts = [] + faces = [] + Row = 0 + + INNER_HOLE = OUTSIDE_RADIUS - (OUTSIDE_RADIUS * (1.25/4.75)) + EDGE_THICKNESS = (OUTSIDE_RADIUS * (0.4/4.75)) + RAD1 = (OUTSIDE_RADIUS * (0.5/4.75)) + OVER_ALL_HEIGTH = (OUTSIDE_RADIUS * (2.0/4.75)) + + + FaceStart = len(verts) + + Start_Height = 0 - 3 + Height_Offset = Z_LOCATION + Lowest_Z_Vert = 0 + + x = INNER_HOLE + z = (Height_Offset - OVER_ALL_HEIGTH) + EDGE_THICKNESS + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + x = INNER_HOLE + z = (Height_Offset - OVER_ALL_HEIGTH) + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + + for i in range(180,80,-10): + x = sin(radians(i))*RAD1 + z = cos(radians(i))*RAD1 + verts.append([(OUTSIDE_RADIUS-RAD1)+x,0.0,((Height_Offset - OVER_ALL_HEIGTH)+RAD1)+z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + + x = OUTSIDE_RADIUS - 0 + z = Height_Offset + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + sVerts,sFaces = SpinDup(verts,faces,360,DIV,'z') + sVerts.extend(verts) #add the start verts to the Spin verts to complete the loop + + faces.extend(Build_Face_List_Quads(FaceStart,Row-1,DIV)) + + return Move_Verts_Up_Z(sVerts,0),faces,Lowest_Z_Vert + + + +def add_Nylon_Part(OUTSIDE_RADIUS,Z_LOCATION = 0): + DIV = 36 + verts = [] + faces = [] + Row = 0 + + INNER_HOLE = OUTSIDE_RADIUS - (OUTSIDE_RADIUS * (1.5/4.75)) + EDGE_THICKNESS = (OUTSIDE_RADIUS * (0.4/4.75)) + RAD1 = (OUTSIDE_RADIUS * (0.5/4.75)) + OVER_ALL_HEIGTH = (OUTSIDE_RADIUS * (2.0/4.75)) + PART_THICKNESS = OVER_ALL_HEIGTH - EDGE_THICKNESS + PART_INNER_HOLE = (OUTSIDE_RADIUS * (2.5/4.75)) + + FaceStart = len(verts) + + Start_Height = 0 - 3 + Height_Offset = Z_LOCATION + Lowest_Z_Vert = 0 + + + x = INNER_HOLE + EDGE_THICKNESS + z = Height_Offset + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + x = PART_INNER_HOLE + z = Height_Offset + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + x = PART_INNER_HOLE + z = Height_Offset - PART_THICKNESS + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + x = INNER_HOLE + EDGE_THICKNESS + z = Height_Offset - PART_THICKNESS + verts.append([x,0.0,z]) + Lowest_Z_Vert = min(Lowest_Z_Vert,z) + Row += 1 + + + sVerts,sFaces = SpinDup(verts,faces,360,DIV,'z') + sVerts.extend(verts) #add the start verts to the Spin verts to complete the loop + + faces.extend(Build_Face_List_Quads(FaceStart,Row-1,DIV)) + + return sVerts,faces,0 - Lowest_Z_Vert + + + +def Nut_Mesh(): + + verts = [] + faces = [] + Head_Verts = [] + Head_Faces= [] + + Face_Start = len(verts) + Thread_Verts,Thread_Faces,New_Nut_Height = Create_Internal_Thread(Minor_Dia.val,Major_Dia.val,Pitch.val,Hex_Nut_Height.val,Crest_Percent.val,Root_Percent.val,1) + verts.extend(Thread_Verts) + faces.extend(Copy_Faces(Thread_Faces,Face_Start)) + + Face_Start = len(verts) + Head_Verts,Head_Faces,Lock_Nut_Rad = add_Hex_Nut(Hex_Nut_Flat_Distance.val,Major_Dia.val,New_Nut_Height) + verts.extend((Head_Verts)) + faces.extend(Copy_Faces(Head_Faces,Face_Start)) + + LowZ = 0 - New_Nut_Height + + if Nut_Type['LOCK'][0].val: + Face_Start = len(verts) + Nylon_Head_Verts,Nylon_Head_faces,LowZ = add_Nylon_Head(Lock_Nut_Rad,0-New_Nut_Height) + verts.extend((Nylon_Head_Verts)) + faces.extend(Copy_Faces(Nylon_Head_faces,Face_Start)) + + Face_Start = len(verts) + Nylon_Verts,Nylon_faces,Temp_LowZ = add_Nylon_Part(Lock_Nut_Rad,0-New_Nut_Height) + verts.extend((Nylon_Verts)) + faces.extend(Copy_Faces(Nylon_faces,Face_Start)) + + + return Move_Verts_Up_Z(verts,0 - LowZ),faces + + + +################################################################################################## + + +def Create_Nut(): + + verts = [] + faces = [] + + + if Error_Check() : + return + + + verts, faces = Nut_Mesh() + Add_Mesh_To_Scene('Nut', verts, faces) + + +################################################################################################## + + +def Create_Bolt(): + verts = [] + faces = [] + + + if Error_Check() : + return + + verts, faces = MakeBolt() + Add_Mesh_To_Scene('Bolt', verts, faces) + + + +def Remove_Doubles_From_Mesh(verts,faces): + Ret_verts = [] + Ret_faces = [] + + is_editmode = Window.EditMode() # Store edit mode state + if is_editmode: Window.EditMode(0) # Python must get a mesh in object mode. + + Temp_mesh = Mesh.New('MeshTemp') # create a new mesh + + Temp_mesh.verts.extend(verts) # add vertices to mesh + Temp_mesh.faces.extend(faces) # add faces to the mesh (also adds edges) + + scn = Scene.GetCurrent() # link object to current scene + Temp_Object = scn.objects.new(Temp_mesh, 'ObjectTemp') + + Temp_mesh.remDoubles(0.010) + Temp_mesh.transform(Mathutils.Matrix([Global_Scale,0,0,0], [0,Global_Scale,0,0], [0,0,Global_Scale,0], [0,0,0, Global_Scale])) + Ret_verts[:] = [v.co for v in Temp_mesh.verts] + Ret_faces[:] = [ [v.index for v in f] for f in Temp_mesh.faces] + + #delete temp mesh + scn.objects.unlink(Temp_Object) + scn.update(0) + + if is_editmode: Window.EditMode(1) + return Ret_verts,Ret_faces + + + +def Add_Mesh_To_Scene(name, verts, faces): + + scn = Scene.GetCurrent() + if scn.lib: return + ob_act = scn.objects.active + + is_editmode = Window.EditMode() + + cursor = Window.GetCursorPos() + quat = None + + if is_editmode or Blender.Get('add_view_align'): # Aligning seems odd for editmode, but blender does it, oh well + try: quat = Blender.Mathutils.Quaternion(Window.GetViewQuat()) + except: pass + + + # Exist editmode for non mesh types + if ob_act and ob_act.type != 'Mesh' and is_editmode: + EditMode(0) + + # We are in mesh editmode + if Window.EditMode(): + me = ob_act.getData(mesh=1) + + if me.multires: + error_txt = 'Error%t|Unable to complete action with multires enabled' + Blender.Draw.PupMenu(error_txt) + print error_txt + return + + #Don't want to remove doubles and scale the existing + # mesh so we need to get the verts and the faces from + # a mesh that has been scaled. + verts,faces = Remove_Doubles_From_Mesh(verts, faces) + + # Add to existing mesh + # must exit editmode to modify mesh + Window.EditMode(0) + + me.sel = False + + vert_offset = len(me.verts) + face_offset = len(me.faces) + + + # transform the verts + txmat = Blender.Mathutils.TranslationMatrix(Blender.Mathutils.Vector(cursor)) + if quat: + mat = quat.toMatrix() + mat.invert() + mat.resize4x4() + txmat = mat * txmat + + txmat = txmat * ob_act.matrixWorld.copy().invert() + + + me.verts.extend(verts) + # Transform the verts by the cursor and view rotation + me.transform(txmat, selected_only=True) + + if vert_offset: + me.faces.extend([[i+vert_offset for i in f] for f in faces]) + else: + # Mesh with no data, unlikely + me.faces.extend(faces) + else: + + # Object mode add new + me = Mesh.New(name) + me.verts.extend(verts) + me.faces.extend(faces) + + + me.sel = True + + # Object creation and location + scn.objects.selected = [] + ob_act = scn.objects.new(me, name) + + me.remDoubles(0.010) + me.transform(Mathutils.Matrix([Global_Scale,0,0,0], [0,Global_Scale,0,0], [0,0,Global_Scale,0], [0,0,0, Global_Scale])) + + scn.objects.active = ob_act + + if quat: + mat = quat.toMatrix() + mat.invert() + mat.resize4x4() + ob_act.setMatrix(mat) + + ob_act.loc = cursor + + me.calcNormals() + + if is_editmode or Blender.Get('add_editmode'): + Window.EditMode(1) + + Blender.Redraw(-1)#Redraw all + +################################################################################################## + + + +def Load_Preset(): + + global Preset_Menu + global Shank_Dia + global Shank_Length + global Thread_Length + global Major_Dia + global Minor_Dia + global Pitch + global Crest_Percent + global Root_Percent + global Allen_Bit_Flat_Distance + global Allen_Bit_Depth + global Head_Height + global Hex_Head_Flat_Distance + global Head_Dia + global Dome_Head_Dia + global Pan_Head_Dia + global Philips_Bit_Dia + global Phillips_Bit_Depth + global Cap_Head_Height + + global Hex_Nut_Height + global Hex_Nut_Flat_Distance + + + if Preset_Menu.val == 1 : #M3 + Shank_Dia.val = 3.0 + #Pitch.val = 0.5 #Coarse + Pitch.val = 0.35 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 3.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 5.5 + Hex_Head_Height.val = 2.0 + Cap_Head_Dia.val = 5.5 + Cap_Head_Height.val = 3.0 + Allen_Bit_Flat_Distance.val = 2.5 + Allen_Bit_Depth.val = 1.5 + Pan_Head_Dia.val = 5.6 + Dome_Head_Dia.val = 5.6 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 2.4 + Hex_Nut_Flat_Distance.val = 5.5 + Thread_Length.val = 6 + Shank_Length.val = 0.0 + + + if Preset_Menu.val == 2 : #M4 + Shank_Dia.val = 4.0 + #Pitch.val = 0.7 #Coarse + Pitch.val = 0.5 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 4.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 7.0 + Hex_Head_Height.val = 2.8 + Cap_Head_Dia.val = 7.0 + Cap_Head_Height.val = 4.0 + Allen_Bit_Flat_Distance.val = 3.0 + Allen_Bit_Depth.val = 2.0 + Pan_Head_Dia.val = 8.0 + Dome_Head_Dia.val = 8.0 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 3.2 + Hex_Nut_Flat_Distance.val = 7.0 + Thread_Length.val = 8 + Shank_Length.val = 0.0 + + + if Preset_Menu.val == 3 : #M5 + Shank_Dia.val = 5.0 + #Pitch.val = 0.8 #Coarse + Pitch.val = 0.5 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 5.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 8.0 + Hex_Head_Height.val = 3.5 + Cap_Head_Dia.val = 8.5 + Cap_Head_Height.val = 5.0 + Allen_Bit_Flat_Distance.val = 4.0 + Allen_Bit_Depth.val = 2.5 + Pan_Head_Dia.val = 9.5 + Dome_Head_Dia.val = 9.5 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 4.0 + Hex_Nut_Flat_Distance.val = 8.0 + Thread_Length.val = 10 + Shank_Length.val = 0.0 + + + if Preset_Menu.val == 4 : #M6 + Shank_Dia.val = 6.0 + #Pitch.val = 1.0 #Coarse + Pitch.val = 0.75 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 6.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 10.0 + Hex_Head_Height.val = 4.0 + Cap_Head_Dia.val = 10.0 + Cap_Head_Height.val = 6.0 + Allen_Bit_Flat_Distance.val = 5.0 + Allen_Bit_Depth.val = 3.0 + Pan_Head_Dia.val = 12.0 + Dome_Head_Dia.val = 12.0 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 5.0 + Hex_Nut_Flat_Distance.val = 10.0 + Thread_Length.val = 12 + Shank_Length.val = 0.0 + + + if Preset_Menu.val == 5 : #M8 + Shank_Dia.val = 8.0 + #Pitch.val = 1.25 #Coarse + Pitch.val = 1.00 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 8.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 13.0 + Hex_Head_Height.val = 5.3 + Cap_Head_Dia.val = 13.5 + Cap_Head_Height.val = 8.0 + Allen_Bit_Flat_Distance.val = 6.0 + Allen_Bit_Depth.val = 4.0 + Pan_Head_Dia.val = 16.0 + Dome_Head_Dia.val = 16.0 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 6.5 + Hex_Nut_Flat_Distance.val = 13.0 + Thread_Length.val = 16 + Shank_Length.val = 0.0 + + if Preset_Menu.val == 6 : #M10 + Shank_Dia.val = 10.0 + #Pitch.val = 1.5 #Coarse + Pitch.val = 1.25 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 10.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 17.0 + Hex_Head_Height.val = 6.4 + Cap_Head_Dia.val = 16.0 + Cap_Head_Height.val = 10.0 + Allen_Bit_Flat_Distance.val = 8.0 + Allen_Bit_Depth.val = 5.0 + Pan_Head_Dia.val = 20.0 + Dome_Head_Dia.val = 20.0 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 8.0 + Hex_Nut_Flat_Distance.val = 17.0 + Thread_Length.val = 20 + Shank_Length.val = 0.0 + + + if Preset_Menu.val == 7 : #M12 + #Pitch.val = 1.75 #Coarse + Pitch.val = 1.50 #Fine + Crest_Percent.val = 10 + Root_Percent.val = 10 + Major_Dia.val = 12.0 + Minor_Dia.val = Major_Dia.val - (1.082532 * Pitch.val) + Hex_Head_Flat_Distance.val = 19.0 + Hex_Head_Height.val = 7.5 + Cap_Head_Dia.val = 18.5 + Cap_Head_Height.val = 12.0 + Allen_Bit_Flat_Distance.val = 10.0 + Allen_Bit_Depth.val = 6.0 + Pan_Head_Dia.val = 24.0 + Dome_Head_Dia.val = 24.0 + Philips_Bit_Dia.val = Pan_Head_Dia.val*(1.82/5.6) + Phillips_Bit_Depth.val = Get_Phillips_Bit_Height(Philips_Bit_Dia.val) + Hex_Nut_Height.val = 10.0 + Hex_Nut_Flat_Distance.val = 19.0 + Shank_Dia.val = 12.0 + Shank_Length.val = 33.0 + Thread_Length.val = 32.0 + +############################################################################################## + +def Test(): + verts = [] + faces = [] + + if Error_Check() : + return + + verts, faces = MakeBolt() + + Add_Mesh_To_Scene("TestBolt", verts,faces) + + Window.Redraw(-1) + + + + +def event(evt, val): # the function to handle input events + + if evt == Draw.ESCKEY: + Draw.Exit() # exit when user presses ESC + return + + +def button_event(evt): # the function to handle Draw Button events + + if evt == On_Exit_Click: + Draw.Exit() # exit when user presses ESC + return + + if evt == On_Test_Click: + Test() + Draw.Redraw(1) + + if evt == On_Preset_Click: + Load_Preset() + Draw.Redraw(1) + + if evt == On_Create_Click: + if Model_Type['BOLT'][0].val: + Create_Bolt() + if Model_Type['NUT'][0].val: + Create_Nut() + Draw.Redraw(1) + + elif (evt in [On_Hex_Click, On_Cap_Click,On_Dome_Click,On_Pan_Click]): + for k in Head_Type.iterkeys(): + if Head_Type[k][1]!=evt: + Head_Type[k][0].val=0 + else: + Head_Type[k][0].val=1 + Draw.Redraw(1) + + elif (evt in [On_Bit_None_Click,On_Bit_Allen_Click,On_Bit_Philips_Click]): + for k in Bit_Type.iterkeys(): + if Bit_Type[k][1]!=evt: + Bit_Type[k][0].val=0 + else: + Bit_Type[k][0].val=1 + Draw.Redraw(1) + + elif (evt in [On_Model_Bolt_Click,On_Model_Nut_Click]): + for k in Model_Type.iterkeys(): + if Model_Type[k][1]!=evt: + Model_Type[k][0].val=0 + else: + Model_Type[k][0].val=1 + Draw.Redraw(1) + + elif (evt in [On_Hex_Nut_Click,On_Lock_Nut_Click]): + for k in Nut_Type.iterkeys(): + if Nut_Type[k][1]!=evt: + Nut_Type[k][0].val=0 + else: + Nut_Type[k][0].val=1 + Draw.Redraw(1) + +##################################################################################### + + +def Draw_Border(X1,Y1,X2,Y2): # X1,Y1 = Top Left X2,Y2 = Bottom Right + INDENT = 3 + + BGL.glColor3f(1.0,1.0,1.0) + BGL.glBegin(BGL.GL_LINES) + BGL.glVertex2i(X1+INDENT,Y1-INDENT) #top line + BGL.glVertex2i(X2-INDENT,Y1-INDENT) + + BGL.glVertex2i(X1+INDENT,Y1-INDENT) #left line + BGL.glVertex2i(X1+INDENT,Y2+INDENT) + BGL.glEnd() + + BGL.glColor3f(0.5,0.5,0.5) + BGL.glBegin(BGL.GL_LINES) + BGL.glVertex2i(X2-INDENT,Y1-INDENT) #Right line + BGL.glVertex2i(X2-INDENT,Y2+INDENT) + + BGL.glVertex2i(X1+INDENT,Y2+INDENT) #bottom line + BGL.glVertex2i(X2-INDENT,Y2+INDENT) + BGL.glEnd() + + + + +def Create_Tab(X1,Y1,X2,Y2,Title,Buttons): # X1,Y1 = Top Left X2,Y2 = Bottom Right + + BIT_BUTTON_WIDTH = 55 + BIT_BUTTON_HEIGHT = 18 + TITLE_HEIGHT = 15 + INDENT = 6 + BUTTON_GAP = 4 + + BGL.glColor3f(0.75, 0.75, 0.75) + BGL.glRecti(X1,Y1,X2,Y2) + + Draw_Border(X1,Y1,X2,Y2); + + BGL.glColor3f(0.0,0.0,0.0) + BGL.glRasterPos2d(X1+INDENT,Y1 - TITLE_HEIGHT) + Draw.Text(Title) + + Button_X = X1 + INDENT + Button_Y = Y1 - TITLE_HEIGHT - BIT_BUTTON_HEIGHT - 8 + + #Nut_Number_X = Nut_Button_X + #Nut_Number_Y = Nut_Button_Y - 25 + if (Buttons != 0): + key= Buttons.keys() + for k in key: + Buttons[k][0]= Draw.Toggle(k,Buttons[k][1],Button_X,Button_Y, BIT_BUTTON_WIDTH,BIT_BUTTON_HEIGHT,Buttons[k][0].val,Buttons[k][2]) + Button_X += BIT_BUTTON_WIDTH + BUTTON_GAP + + + +def Dispaly_Title_Bar(Y_POS,CONTROL_HEIGHT): + CONTROL_WIDTH = 250 + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS -CONTROL_HEIGHT,"Bolt Factory V2.00",Model_Type) + + + +def Dispaly_Preset_Tab(Y_POS,CONTROL_HEIGHT): + CONTROL_WIDTH = 250 + BUTTON_Y_OFFSET = 40 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Preset",0) + + name = "M3%x1|M4%x2|M5%x3|M6%x4|M8%x5|M10%x6|M12%x7" + + global Preset_Menu + Preset_Menu = Draw.Menu(name,No_Event,9,Y_POS-BUTTON_Y_OFFSET,50,18, Preset_Menu.val, "Predefined metric screw sizes.") + Draw.Button("Apply",On_Preset_Click,150,Y_POS-BUTTON_Y_OFFSET,55,18,"Apply the preset screw sizes.") + + +def Dispaly_Bit_Tab(Y_POS,CONTROL_HEIGHT): + + CONTROL_WIDTH = 250 + NUMBER_HEIGHT = 18 + NUMBER_WIDTH = CONTROL_WIDTH -3-3-3-3-3 + + Bit_Number_X = 3+3+3 + Bit_Number_Y = Y_POS - 64 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Bit Type",Bit_Type) + + if Bit_Type['NONE'][0].val: + DoNothing = 1; + + elif Bit_Type['ALLEN'][0].val: + global Allen_Bit_Depth + Allen_Bit_Depth = Draw.Number('Bit Depth: ',No_Event,Bit_Number_X,Bit_Number_Y,NUMBER_WIDTH, NUMBER_HEIGHT,Allen_Bit_Depth.val, 0,100, '') + Bit_Number_Y -= NUMBER_HEIGHT + global Allen_Bit_Flat_Distance + Allen_Bit_Flat_Distance = Draw.Number('Flat Dist: ',No_Event,Bit_Number_X,Bit_Number_Y,NUMBER_WIDTH,NUMBER_HEIGHT,Allen_Bit_Flat_Distance.val, 0,100, '') + Bit_Number_Y -= NUMBER_HEIGHT + + elif Bit_Type['PHILLIPS'][0].val: + global Phillips_Bit_Depth + Phillips_Bit_Depth = Draw.Number('Bit Depth: ',No_Event,Bit_Number_X,Bit_Number_Y,NUMBER_WIDTH, NUMBER_HEIGHT,Phillips_Bit_Depth.val, 0,100, '') + Bit_Number_Y -= NUMBER_HEIGHT + global Philips_Bit_Dia + Philips_Bit_Dia = Draw.Number('Bit Dia: ',No_Event,Bit_Number_X,Bit_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Philips_Bit_Dia.val, 0,100, '') + Bit_Number_Y -= NUMBER_HEIGHT + + + +def Dispaly_Shank_Tab(Y_POS,CONTROL_HEIGHT): + + CONTROL_WIDTH = 250 + NUMBER_HEIGHT = 18 + NUMBER_WIDTH = CONTROL_WIDTH -3-3-3-3-3 + + Number_X = 3+3+3 + Number_Y_Pos = Y_POS - 40 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Shank",0) + + global Shank_Length + Shank_Length = Draw.Number('Shank Length: ',No_Event,Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT, Shank_Length.val, 0,MAX_INPUT_NUMBER, 'some text tip') + Number_Y_Pos -= NUMBER_HEIGHT + + global Shank_Dia + Shank_Dia = Draw.Number('Shank Dia: ',No_Event,Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT, Shank_Dia.val, 0,MAX_INPUT_NUMBER, 'some text tip') + Number_Y_Pos -= NUMBER_HEIGHT + + + +def Dispaly_Thread_Tab(Y_POS,CONTROL_HEIGHT): + + CONTROL_WIDTH = 250 + NUMBER_HEIGHT = 18 + NUMBER_WIDTH = CONTROL_WIDTH -3-3-3-3-3 + + + Number_X = 3+3+3 + Number_Y_Pos = Y_POS - 40 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Thread",0) + + global Thread_Length + if Model_Type['BOLT'][0].val: + Thread_Length = Draw.Number('Thread Length: ',No_Event, Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT, Thread_Length.val, 0,MAX_INPUT_NUMBER, '') + Number_Y_Pos -= NUMBER_HEIGHT + + global Major_Dia + Major_Dia = Draw.Number('Major Dia: ',No_Event,Number_X,Number_Y_Pos, NUMBER_WIDTH,NUMBER_HEIGHT, Major_Dia.val, 0,MAX_INPUT_NUMBER, '') + Number_Y_Pos -= NUMBER_HEIGHT + + global Minor_Dia + Minor_Dia = Draw.Number('Minor Dia: ',No_Event,Number_X,Number_Y_Pos, NUMBER_WIDTH,NUMBER_HEIGHT, Minor_Dia.val, 0,MAX_INPUT_NUMBER, '') + Number_Y_Pos -= NUMBER_HEIGHT + + global Pitch + Pitch = Draw.Number('Pitch: ',No_Event,Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT, Pitch.val, 0.1,7.0, '') + Number_Y_Pos -= NUMBER_HEIGHT + + global Crest_Percent + Crest_Percent = Draw.Number('Crest %: ',No_Event,Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT,Crest_Percent.val, 1,90, '') + Number_Y_Pos -= NUMBER_HEIGHT + + global Root_Percent + Root_Percent = Draw.Number('Root %: ',No_Event,Number_X,Number_Y_Pos,NUMBER_WIDTH,NUMBER_HEIGHT,Root_Percent.val, 1,90, '') + Number_Y_Pos -= NUMBER_HEIGHT + + + + +def Dispaly_Head_Tab(Y_POS,CONTROL_HEIGHT): + + CONTROL_WIDTH = 250 + NUMBER_HEIGHT = 18 + NUMBER_WIDTH = CONTROL_WIDTH -3-3-3-3-3 + + Head_Number_X = 3+3+3 + Head_Number_Y = Y_POS - 64 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Head Type",Head_Type) + + if Head_Type['HEX'][0].val: + global Hex_Head_Height + Hex_Head_Height = Draw.Number('Head Height: ',No_Event,Head_Number_X ,Head_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Hex_Head_Height.val, 0,100, '') + Head_Number_Y -= NUMBER_HEIGHT + global Hex_Head_Flat_Distance + Hex_Head_Flat_Distance = Draw.Number('Head Hex Flat Distance ',No_Event,Head_Number_X,Head_Number_Y,NUMBER_WIDTH, NUMBER_HEIGHT,Hex_Head_Flat_Distance.val, 0,MAX_INPUT_NUMBER, '') + Head_Number_Y -= NUMBER_HEIGHT + + elif Head_Type['CAP'][0].val: + global Cap_Head_Height + Cap_Head_Height = Draw.Number('Head Height: ',No_Event, Head_Number_X,Head_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Cap_Head_Height.val, 0,100, '') + Head_Number_Y -= NUMBER_HEIGHT + global Cap_Head_Dia + Cap_Head_Dia = Draw.Number('Head Dia ',No_Event,Head_Number_X,Head_Number_Y,NUMBER_WIDTH, NUMBER_HEIGHT,Cap_Head_Dia.val, 0,MAX_INPUT_NUMBER, '') + Head_Number_Y -= NUMBER_HEIGHT + + elif Head_Type['DOME'][0].val: + global Dome_Head_Dia + Dome_Head_Dia = Draw.Number(' Dome Head Dia ',No_Event,Head_Number_X,Head_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Dome_Head_Dia.val, 0,MAX_INPUT_NUMBER, '') + Head_Number_Y -= NUMBER_HEIGHT + + elif Head_Type['PAN'][0].val: + global Pan_Head_Dia + Pan_Head_Dia = Draw.Number('Pan Head Dia ',No_Event,Head_Number_X,Head_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Pan_Head_Dia.val, 0,MAX_INPUT_NUMBER, '') + Head_Number_Y -= NUMBER_HEIGHT + + + + +def Dispaly_Nut_Tab(Y_POS,CONTROL_HEIGHT): + + CONTROL_WIDTH = 250 + NUMBER_HEIGHT = 18 + NUMBER_WIDTH = CONTROL_WIDTH -3-3-3-3-3 + + Nut_Number_X = 3+3+3 + Nut_Number_Y = Y_POS - 64 + + Create_Tab(3,Y_POS,CONTROL_WIDTH,Y_POS-CONTROL_HEIGHT,"Nut Type",Nut_Type) + + #if Nut_Type['HEX'][0].val: + global Hex_Nut_Height + Hex_Nut_Height = Draw.Number('Nut Height: ',No_Event,Nut_Number_X ,Nut_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Hex_Nut_Height.val, 0,MAX_INPUT_NUMBER, '') + Nut_Number_Y -= NUMBER_HEIGHT + global Hex_Nut_Flat_Distance + Hex_Nut_Flat_Distance = Draw.Number('Nut Flat Distance ',No_Event,Nut_Number_X,Nut_Number_Y, NUMBER_WIDTH, NUMBER_HEIGHT,Hex_Nut_Flat_Distance.val, 0,MAX_INPUT_NUMBER, '') + Nut_Number_Y -= NUMBER_HEIGHT + + +def Dispaly_Bolt_Tab(): + + Dispaly_Shank_Tab(284,66) + Dispaly_Head_Tab(374,90) + Dispaly_Bit_Tab(464,90) + + +########################################################################################## + +def gui(): # the function to draw the screen + + CONTROL_WIDTH = 250 + + BGL.glClearColor(0.6, 0.6, 0.6, 1.0) + BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) + + BGL.glColor3f(0.75, 0.75, 0.75) + BGL.glRecti(3,30,CONTROL_WIDTH,3) + + Dispaly_Title_Bar(514,50); + + if Model_Type['BOLT'][0].val: + Dispaly_Bolt_Tab(); + + if Model_Type['NUT'][0].val: + Dispaly_Nut_Tab(464,246); + + Dispaly_Thread_Tab(218,138) + + Dispaly_Preset_Tab(80,50) + + Draw.PushButton("Create",On_Create_Click,6,8,55,18,"Create Bolt") + Draw.Button("Exit",On_Exit_Click,6+55+4,8,55,18) + +# Draw.Button("Test",On_Test_Click,150,10,55,20) + +Load_Preset() +Draw.Register(gui, event, button_event) # registering the 3 callbacks diff --git a/release/scripts/wizard_landscape_ant.py b/release/scripts/wizard_landscape_ant.py new file mode 100644 index 00000000000..405c06432ca --- /dev/null +++ b/release/scripts/wizard_landscape_ant.py @@ -0,0 +1,2148 @@ +#!BPY +""" +Name: 'Landscape Generator (A.N.T)' +Blender: 248 +Group: 'Wizards' +Tip: 'Create landscape mesh.' +""" + +__author__ = "Jimmy Hazevoet" +__url__ = ('http://wiki.blender.org/index.php/Scripts/Manual/Wizards/ANTLandscape','elysiun') +__version__ = "v.1.05 03-2007" +__bpydoc__ = """\ + +Another Noise Tool 'Landscape' v.1.05 + +This script uses noise functions to create a terrain from a grid mesh. + +Usage: + +Make new terrain: press the "Add New Grid" button, change some noise settings and press the "Update" button. + +Work on previous made grid: select the grid/terrain in the 3D view, and press the "Assign" button. + +Tip: use a low resolution grid mesh and add some Multires levels for detail + +Note: when using Multires materials can get weird, +only apply materials when your terrain is ready, or not use Multires. + +This Script creates a landscape mesh. +Press the Auto button when you start the script. +Then the Generate Button & read it's tooltip. +The mesh created is average 16000 verts. +To me the mesh appears quite small in the 3d view. +Just Press S in the 3d view to scale it up. +This saves overhead drawing the Mesh. + +Known Issues: +If the mesh is not drawn in the 3d view first time, +Move your mouse to the 3d view, or press the button again. + +Not really an issue, more to be aware. +Due to the complex nature & design of the script, it only creates one mesh at a time. +When you press Generate or Reset, +Even if you have Closed then Opened the script or .blend file, +The mesh Will be Overwritten. +To create Multiple Landscapes you Must Re-Name or save the Mesh +in Blender's F7 menu Links & Materials Panel. + +Readme: +v.1.04: +_ New G.U.I. +_ New noise types like: +Double_Terrain, +StatsByAlt_Terrain, +slickRock, +ditorted_heteroTerrain, +vlNoise_turbulence, +and many more. + +New fractalized Effect functions. +Effect types such as: gradient, +waves and bumps, dome, piramide, +squares, grid, shattered rocks, +lunar, and many more. + +Bias types: Sin, Cos, Tri, Saw, +and Default(no bias). + +For example the 'Rings' effect +with 'Sin Bias' makes 'Rings' +and 'Default Bias' makes 'Dome'. +The Effect 'Mix factor' Slider gives control over how much of the Effect is vissible, +-1.0=noise, 0.0=average, 1.0=effect +this slider controls also the 'Warp amount' if mix type 'Warp' is selected. + +Image effect: mix image with noise +_ IPOCurve Filter: use Ipo curve to filter terrain height. +I know it's a bit strange to use animation curves for landscape modelling, (actualy i want a curves panel in my G.U.I. but i dont know how to do that) +the downside of this method is that you have this 'Empty' moving around in your scene, so put it on another layer and 'Pin' the Ipo block so that it stays visible. +Usage: +Add one 'Empty' Object to your scene, now add one Loc Key at Frame 1, go to Frame 101 (UpArrow ten times), +move the 'Empty' +100 units in X+ direction and add another Loc Key, open the Ipo Curve Editor Window, rename this IpoBlock if you want, +Copie the first curve to buffer and Paste it in the empty slots (from top to bottom), now you can edit the curves freely. +(use the 'Pin' option to keep the curves visible while other objects are selected) +Set the CurveLength and CurveHeight Button value's according to the length and height of the selected curve. +A curve filter is very versatile when it comes to 'height' filtering. + +_ PreView in UV/Image Editor Window: +The preview image is now rendered as Blender.Image and will be saved to file directory as 'ANTview_size.tga' +you have to select 'ANTview_size.tga' in the UV/Image Editor Window +now it's posible to render and save a large HeightMap image (you can also create nice texture images when the VertCol gradient is enabled), +! If you Change the preview image Size a New Blender.Image object is created. (one for size 256, one for size 512 one for.....) ! + +_ VertexColours: use any image as colour gradient. +This function actualy uses one 'row' of pixels from a image to produce the color gradient, +Make one or more custom gradient images with the Gimp or any other graphics software, the gradients must go from left to right (left is bottom and right is top. +you only need one row of pixels so you can put 10 gradients in a 256*10 image.(higher resolutions like 512*n or 1024*n gives smoother result) +Set Window DrawMode 'Textured' , and set the 'VCol Paint' option in the Materials panel ! + +_ Mesh Tiles: Create large scale terrains. + +_ Vertices Selection: select flat areas. + +_ Keyboard HotKeys: +SPACE = Update mesh. +R = Randomise. +V = Redraw preview. + +_ and more... + +""" + + + + +### +# +# Alt+P to start script. +# +### +# scroll down to see info about updates +## +################################################################################################################ +# Another Noise Tool 'Landscape' +# Jimmy Hazevoet +# license: Do whatever you want with it. +################################################################################################################ + +################################################################################################################ +# v.1.04: +# +# _ New G.U.I. +# _ New noise types like: Double_Terrain, StatsByAlt_Terrain, slickRock, ditorted_heteroTerrain, vlNoise_turbulence, and many more. +# _ New fractalized Effect functions. +# Effect types such as: gradient, waves and bumps, dome, piramide, squares, grid, shattered rocks, lunar, and many more. +# Bias types: Sin, Cos, Tri, Saw, and Default(no bias). +# For example the 'Rings' effect with 'Sin Bias' makes 'Rings' and 'Default Bias' makes 'Dome'. +# _ The Effect 'Mix factor' Slider gives control over how much of the Effect is vissible, -1.0=noise, 0.0=average, 1.0=effect +# this slider controls also the 'Warp amount' if mix type 'Warp' is selected. +# _ Image effect: mix image with noise +# _ IPOCurve Filter: use Ipo curve to filter terrain height. +# I know it's a bit strange to use animation curves for landscape modelling, (actualy i want a curves panel in my G.U.I. but i dont know how to do that) +# the downside of this method is that you have this 'Empty' moving around in your scene, so put it on another layer and 'Pin' the Ipo block so that it stays visible. +# Usage: +# Add one 'Empty' Object to your scene, now add one Loc Key at Frame 1, go to Frame 101 (UpArrow ten times), +# move the 'Empty' +100 units in X+ direction and add another Loc Key, open the Ipo Curve Editor Window, rename this IpoBlock if you want, +# Copie the first curve to buffer and Paste it in the empty slots (from top to bottom), now you can edit the curves freely. +# (use the 'Pin' option to keep the curves visible while other objects are selected) +# Set the CurveLength and CurveHeight Button value's according to the length and height of the selected curve. +# A curve filter is very versatile when it comes to 'height' filtering. +# _ PreView in UV/Image Editor Window: +# The preview image is now rendered as Blender.Image and will be saved to file directory as 'ANTview_size.tga' +# you have to select 'ANTview_size.tga' in the UV/Image Editor Window +# now it's posible to render and save a large HeightMap image (you can also create nice texture images when the VertCol gradient is enabled), +# ! If you Change the preview image Size a New Blender.Image object is created. (one for size 256, one for size 512 one for.....) ! +# _ VertexColours: use any image as colour gradient. +# This function actualy uses one 'row' of pixels from a image to produce the color gradient, +# Make one or more custom gradient images with the Gimp or any other graphics software, the gradients must go from left to right (left is bottom and right is top. +# you only need one row of pixels so you can put 10 gradients in a 256*10 image.(higher resolutions like 512*n or 1024*n gives smoother result) +# Set Window DrawMode 'Textured' , and set the 'VCol Paint' option in the Materials panel ! +# _ Mesh Tiles: Create large scale terrains. +# _ Vertices Selection: select flat areas. +# _ Keyboard HotKeys: +# SPACE = Update mesh. +# R = Randomise. +# V = Redraw preview. +# _ and more... +################################################################################################################ + +################################################################################################################ +# BugFix: Sept./2006 v.1.04a +#----------------------------- +# _Image Effect did not worked well with tiled mesh. Fixed (now use Freq. and Loc. buttons to scale and position image). +# +################################################################################################################ + + +################################################################################################################ +# UPDATE: v.1.05 03-2007 +#--------------------------------------------------------------------------------------------------------------- +# +# _ New: Save and Load function, save your settings to a .ant file. +# __NOTE: when saving/loading settings to/from a file, +# make sure the filename/path is not too long! +# __HOTKEY__ Load from file: L +# __HOTKEY__ Save to file : S +# +# _ New mesh code, uses Mesh instead of NMesh, +# this gives a small speed improvement and alows you to use Multires. +# +# Usage: Select a Grid/Terrain mesh and hit the Assign button, now you can work on it, when ready you assign another. +# +# _ New: 'Musgrave' noise types, 'Random noise' and 'Constant' in 'Effects' section. +# _ New: 'Custom Effect', write custom formulae ( x,y, a,b, from math import *, from Blender.Noise import * ) +# _ New: 'Custom Height Filter', write custom formulae ( x,y, h, a,b, from math import *, from Blender.Noise import * ) +# _ New: 'Change Filter Order', Toggle: OFF = Noise+Effect+Falloff+FILTER / ON = Noise+FILTER+Effect+Falloff +# +# _ If you want to make a tiled terrain, you need to set the coordinates to "WorldSpace" or "Center at Cursor" (in G.U.I.Noise panel), +# create and place the grid meshes. now one by one select, assign and update, you may need to adjust the "EdgeFalloff" size. +# +# WARNING!: when using Multires, materials can get weird (?), so apply materials when your terrain is finnished. +# +############################################################################################################### + + +############################################################################################################### +# +## Execute Script: Alt P +# + + +import Blender +from Blender import * +from math import * +from Blender.Noise import * +from Blender.Draw import * +from Blender.BGL import * +from Blender import Image +import string +from string import strip +import BPyMathutils +from BPyMathutils import genrand +from random import choice +scene = Scene.GetCurrent() + +###--------------------------------------------------------------------------- + +CurVersion = 'A.N.T.Landscape v.1.05' + +##--------------------------------------------------------------------------- +# Customise default settings: ---------------------------------------------- + +# Names: +antfilename = 'Terrain' # Default filename +previewname = Create('') # Default preview Image name +DefaultIpoName = '' # Default Ipo DataBlock name (for height filter) +# G.U.I.: +FullScreen = Create( 0 ) # FullScreen on/off +# gui colors: +ledcolors = [ [1.0,0.498,0.498], [1.0,0.698,0.498], [1.0,0.898,0.498], [0.898,1.0,0.498], [0.698,1.0,0.498], [0.498,1.0,0.498], [0.498,1.0,0.698], [0.498,1.0,0.898], [0.600,0.918,1.0], [0.6,0.757,1.0], [0.6,0.6,1.0], [0.757,0.6,1.0], [0.898,0.498,1.0], [1.0,0.498,0.898] ] +#ledcolor = [ 1.0, 0.5, 0.0 ] +lightgrey = [ 0.76, 0.76, 0.76 ] # gui col. +grey = [ 0.6, 0.6, 0.6 ] # panel col. +background = [ 0.7, 0.7, 0.7, 1.0 ] # background col. +black = [ 0.0, 0.0, 0.0 ] # text col. +white = [ 1.0, 1.0, 1.0 ] +# gui size +size_x = 320 # gui x size +size_y = 280 # gui y size +# tabs +guitabs = [ Create( 1 ), Create( 0 ), Create( 0 ), Create( 0 ), Create( 0 ) ] # gui Tabs +# How long does it take to generate a mesh or image ? +print_time = 0 # 1 = Print time in console. + +# end customise. ---------------------------------------------------------- +##-------------------------------------------------------------------------- +###-------------------------------------------------------------------------- +####-------------------------------------------------------------------------- +##--------------------------------------------------------------------------- + +dirpath=Blender.sys.dirname(Blender.Get('filename')) +fname=dirpath.replace('\\','/')+'/' + antfilename + '.ant' +txtFile = Create( fname ) + +###--------------------------------------------------------------------------- +columns = 10 # gui columns +rows = 13 # gui rows +actob = [] # active object +actme = [] # active mesh +ipoblockname='' +thiscurve=[] +selectedcurve=0 +phi=3.14159265359 +# events +App_Evt = 144 +New_Evt = 166 +SelFile_Evt = 71 +LoadFile_Evt = 72 +SaveFile_Evt = 73 +UseMe_Evt = 74 +No_Evt = 1 +Btn_Evt = 2 +Msh_Evt = 12 +Upd_Evt = 3 +Rndm_Evt = 4 +Load_Evt = 5 +Sel_Evt = 6 +Save_Evt = 7 +Rend_Evt = 8 +End_Evt = 9 +Scrn_Evt = 15 +Im_Evt = 16 +gt0_Evt = 20 +gt1_Evt = 21 +gt2_Evt = 22 +gt3_Evt = 23 +gt4_Evt = 24 +Ipo_Evt = 17 +New_Ipo_Evt=700 + +###--------------------------------------------------------------------------- +# menus +noisetypemenu = "Noise type: %t|multiFractal %x0|ridgedMFractal %x1|hybridMFractal %x2|heteroTerrain %x3|fBm %x4|turbulence %x5|Voronoi turb. %x6|vlNoise turb. %x7|noise %x8|cellNoise %x9|Marble %x10|lava_multiFractal %x11|slopey_noise %x12|duo_multiFractal %x13|distorted_heteroTerrain %x14|slickRock %x15|terra_turbulence %x16|rocky_fBm %x17|StatsByAlt_Terrain %x18|Double_Terrain %x19|Shattered_hTerrain %x20|vlhTerrain %x21" +noisebasismenu = "Basis %t|Blender Original%x0|Original Perlin%x1|Improved Perlin%x2|Voronoi_F1%x3|Voronoi_F2%x4|Voronoi_F3%x5|Voronoi_F4%x6|Voronoi_F2-F1%x7|Voronoi Crackle%x8|CellNoise%x9" +voronitypemenu = "Voronoi type %t|Distance %x0|Distance Squared %x1|Manhattan %x2|Chebychev %x3|Minkovsky 1/2 %x4|Minkovsky 4 %x5|Minkovsky %x6" +tBasismodemenu = "Terrain basis mode: %t|noise %x0|ridged noise %x1|vlNoise %x2|ridged vlNoise %x3" +effecttypemenu = ['Effect Type %t','No Effect %x0','Image %x1','Turbulence %x2','vlNoise %x3','Marble %x4', 'multiFractal %x5','ridgedMFractal %x6','hybridMFractal %x7','heteroTerrain %x8','fBm %x9', 'Gradient %x10','Waves and Bumps %x11','ZigZag %x12','Wavy %x13','Sine Bump %x14','Dots %x15','Rings / Dome %x16','Spiral %x17','Square / Piramide %x18','Blocks %x19','Grid %x20','Tech %x21','Crackle %x22','Sparse Cracks %x23','Shattered Rocks %x24','Lunar %x25','Cosine noise %x26','Spike noise %x27','Stone noise %x28','Flat Turb %x29','Flat Voroni %x30','Random noise %x31','Constant %x32','Custom Effect %x33' ] +mixtypemenu = ['Mix Type %t','Effect only %x0','%l','Mix %x1','Add %x2','Subtract %x3','Multiply %x4','Difference %x5','Screen %x6','addmodulo %x7','Minimum %x8','Maximum %x9','%l','Warp Effect %x10','Warp Noise %x11'] +biastypemenu = "Bias %t|Sin bias %x0|Cos bias %x1|Tri bias %x2|Saw bias %x3|Default (no bias)%x4" +sharptypemenu = "Sharpen %t|Soft %x0|Sharp %x1|Sharper %x2" +filtermodemenu = "Filter Mode %t|No Filter %x0| %l|Default Filters %x1|IPOCurve Filter %x2|Custom Filter %x3" +filtertypemenu = "Filter Type %t|Default Terrace %x0|Sharper Terrace %x1|Rounded Terrace %x2|Posterise Mixed %x3|Posterise %x4|Layered Peaks %x5|Peaked %x6|Smooth-thing %x7|Sin bias %x8|Cos bias %x9|Tri bias %x10|Saw bias %x11|Clamp Max. %x12" +falloftypemenu = "Edge Falloff %t|No Edge Falloff %x0| %l|Soft Falloff %x1|Default Falloff %x2|Hard Falloff %x3|Linear Falloff Y %x4|Linear Falloff X %x5|Diagonal Falloff + %x6|Diagonal Falloff - %x7|Square %x8|Round %x9" +randomtypemenu = "Random type: %t|setRandomSeed() : Blender.Noise %x0|Rand() : Blender.Mathutils %x1|genrand() : BPyMathutils MersenneTwister %x2" + +##-------------------------------------------------- +def Set_ReSet_Values(): + global fileinfo, filemessage + global iScale, Offset, Invert, NSize, Sx, Sy, Lx, Ly, WorldSpaceCo + global NType, Basis, musgr, vlnoi, vlnoiTwo, voron, turbOne, turbTwo, marbleOne, marbleTwo, tBasismod, musgrTwo + global CustomFX, effect_image, Effect_Ctrl, Min, Max, Falloff, CustomFilt, Filter_Mode, Def_Filter_Ctrl, Ipo_Filter_Ctrl, Filter_Order + global RandMod, RSeed, rand_H, rand_S, rand_L, rand_I, AutoUpd, PreView, DefaultIpoName + + filemessage = '' + fileinfo = '' + effect_image = 'Load and Select image.' + AutoUpd = Create( 0 ) + PreView = [ Create( 0 ), Create( 1.0 ), Create( 0.0 ) ] + ## Coords controls: + WorldSpaceCo = Create(0) + iScale = [ Create( 1.0 ), Create( 1.0 ), Create( 0.25) ] + Offset = [ Create( 0.0 ), Create( 0.0), Create( 0.0) ] + Invert = [ Create( 0 ), Create( 0 ), Create( 0 ) ] + NSize = [ Create( 1.0 ), Create( 2.0 ) ] + Sx = [ Create( 1.0 ), Create( 1.0 ) ] + Sy = [ Create( 1.0 ), Create( 1.0 ) ] + Lx = [ Create( 0.0 ), Create( 0.0 ) ] + Ly = [ Create( 0.0 ), Create( 0.0 ) ] + ## Noise controls: + NType = Create( 3 ) + Basis = [ Create( 0 ), Create( 0 ) ] + musgr = [ Create( 1.0 ), Create( 2.0 ), Create( 8 ), Create( 1.0 ), Create( 1.0 ), Create( 0.5 ) ] + vlnoi = [ Create( 1.0 ), Create( 0 ) ] + vlnoiTwo = [ Create( 1.0 ), Create( 0 ) ] + voron = [ Create( 0 ), Create( 2.5 ) ] + turbOne = [ Create( 6 ), Create( 0 ), Create( 0.5 ), Create( 2.0 ) ] + marbleOne = [ Create( 6 ), Create( 0 ), Create( 2.0 ), Create( 0 ), Create( 0 ), Create( 1.0 ) ] + tBasismod = Create(0) + ## Effect controls: + musgrTwo = [ Create( 1.0 ), Create( 2.0 ), Create( 8 ), Create( 1.0 ), Create( 1.0 ) ] + turbTwo = [ Create( 6 ), Create( 0 ), Create( 0.5 ), Create( 2.0 ) ] + marbleTwo = [ Create( 6 ), Create( 0 ), Create( 2.0 ), Create( 0 ), Create( 0 ), Create( 1.0 ) ] + Effect_Ctrl = [ Create( 0 ),Create( 2 ),Create( 0.0 ),Create( 0 ),Create( 0.0 ) ,Create( 0 ),Create( 2.0 ),Create( 0.5 ),Create( 0.5 ) ] + CustomFX = [ Create('sin(x*pi)'), Create('cos(y*pi)'), Create('abs(a*b)*0.5') ] + ## Filter controls: + Min = Create( 0.0 ) + Max = Create( 1.0 ) + Falloff = [ Create( 2 ), Create( 1.0 ), Create( 1.0 ), Create( 0 ) , Create( 0 ) ] + Filter_Mode = Create( 0 ) + Def_Filter_Ctrl = [ Create( 0 ), Create( 3.0 ) ] + Ipo_Filter_Ctrl = [ Create( DefaultIpoName ), Create( 0 ), Create( 100.0 ), Create( 100.0 ) ] + Filter_Order = Create( 0 ) + CustomFilt = [ Create('sqrt(h*h)**2'), Create('0'), Create('a') ] + ## Randomise noise buttons: + RandMod = Create( 1 ) + RSeed = Create( 0 ) + rand_I = Create( 0 ) + rand_H = Create( 0 ) + rand_S = Create( 0 ) + rand_L = Create( 1 ) + +##------------------------- +Set_ReSet_Values() + + +####---------------------------------------------------------------------------------------------------- +###---------------------------------------------------------------------------------------------------- +## G.U.I.: text,backpanel,panel +#-------------------------------------------------- +def draw_Text( ( x, y ), text, color, size ): + glColor3f( color[0],color[1],color[2] ) + glRasterPos2d(x,y) + txtsize = 'small', 'normal', 'large' + Text( text, txtsize[ size ] ) +def draw_BackPanel( text, x, y, w, h, colors ): + glColor3f( colors[0]*0.76, colors[1]*0.76, colors[2]*0.76 ) + glRecti( x, h, w, h+20 ) + glColor3f( colors[0], colors[1], colors[2] ) + glRecti( x, y, w, h ) + glColor3f( colors[0], colors[1], colors[2] ) + glRasterPos2d( x+10, h+5 ) + Text( text, 'small' ) +def draw_Panel( x, y, w, h, colors ): + glColor3f( colors[0], colors[1], colors[2] ) + glRecti( x,y, w,h ) +def draw_Frame( text, x, y, w, h, color ): + glColor3f( color[0], color[1], color[2] ) + glRasterPos2i(x+3,h-3) + Text(text ,'small') + stringwidth = GetStringWidth( text,'small' ) + glColor3f( color[0], color[1], color[2] ) + glBegin(Blender.BGL.GL_LINE_STRIP) + glVertex2i(x,h) + glVertex2i(x,y) + glVertex2i(w,y) + glVertex2i(w,h) + glVertex2i(x+stringwidth+10,h) + glEnd() +def draw_Led( x, y, colors ): + glColor3f( colors[0], colors[1], colors[2] ) + glRecti( x,y, x+4,y+4 ) + + +###---------------------------------------------------------------------------------------------------- +## G.U.I. Buttons: +#---------------------------------------------------------------------------------------------------- + +###------------------------- +## Main / Mesh Buttons: +# +def MeshButtons( col, row, width, height ): + global actme, actob, AutoUpd, txtFile, filemessage, fileinfo + + PushButton("I", UseMe_Evt, col[8], row[3], width[0], height[1], "Info: Here you can write some text to save with the file." ) + draw_Text( ( col[0], row[1]+5 ), 'Info: ' + fileinfo, black, 0 ) + txtFile = String("", No_Evt, col[0], row[2], width[9], height[1], txtFile.val, 256, "File: Full path and filename" ) + PushButton( "Select", SelFile_Evt, col[1], row[3], width[0], height[1], "File: Open FileBrowser and select *.ant file" ) + PushButton( "Load", LoadFile_Evt,col[2], row[3], width[2], height[1], "File: Load settings from file ( HotKey: L )" ) + PushButton( "Save", SaveFile_Evt,col[5], row[3], width[2], height[1], "File: Save settings to file ( HotKey: S )" ) + + activeobname = '' + if actme !=[]: + activeobname = actob[0].name + draw_Text( ( col[5]+5, row[7]-5 ), 'OB: ' + activeobname, [0.0,0.0,1.0], 1 ) + PushButton( "Add New Grid", New_Evt, col[0], row[6], width[4], height[2] ) + PushButton( "Assign Selected", App_Evt, col[5], row[6], width[4], height[2], 'Assign selected terrain') + +###------------------------- +## Noise Buttons: +# +def NoiseButtons( col, row, width, height ): + global NSize, iScale, Offset, Invert, Lx, Ly, Sx, Sy, WorldSpaceCo + global Ha, La, Oc, Of, Ga, Basis, NType, musgr, vlnoi, voron, turbOne, tBasismod + global Depth, Hard, Amp, Freq, vlBasis, Distort, VFunc, VExp, VDep, marbleOne + global RandMod, RSeed, rand_H, rand_S, rand_L, rand_I + + bth = height[1]/2+5 + iScale[0] = Number("iScale:", Btn_Evt, col[5], row[2]+bth, width[3], height[1], iScale[0].val, -10.0, 10.0 , "Noise: Intensity Scale." ) + Invert[0] = Toggle("Inv.", Btn_Evt, col[9], row[2]+bth, width[0], height[1], Invert[0].val, "Noise: Invert") + Offset[0] = Number("Offset:", Btn_Evt, col[5], row[3]+bth, width[4], height[1], Offset[0].val, -10.0, 10.0 , "Noise: Offset " ) + NSize[0] = Number("Noise Size:",Btn_Evt, col[5], row[5], width[4], height[2], NSize[0].val, 0.001, 10.0 , "Noise Size" ) + Sx[0] = Number("Size X:", Btn_Evt, col[5], row[6], width[4], height[1], Sx[0].val, 0.001, 10.0 , "Size X" ) + Sy[0] = Number("Size Y:", Btn_Evt, col[5], row[7], width[4], height[1], Sy[0].val, 0.001, 10.0 , "Size Y" ) + Lx[0] = Number("Loc X:", Btn_Evt, col[5], row[8], width[4], height[1], Lx[0].val, -10000.0, 10000.0 , "Loc X" ) + Ly[0] = Number("Loc Y:", Btn_Evt, col[5], row[9],width[4], height[1], Ly[0].val, -10000.0, 10000.0 , "Loc Y" ) + WorldSpaceCo = Menu( "Coordinates %t|Local Space %x0|World Space %x1|Center at CursorPos %x2", Btn_Evt, col[5], row[10], width[4], height[1], WorldSpaceCo.val, "x,y,z coordinates for noise, effect and height falloff " ) + + NType = Menu( noisetypemenu, Btn_Evt, col[0], row[2], width[4], height[2], NType.val, "Noise type" ) + if NType.val == 6: + voron[0] = Menu( voronitypemenu, Btn_Evt, col[0], row[3], width[4], height[1], voron[0].val, "Voronoi type" ) + else: + if NType.val != 9: + Basis[0] = Menu( noisebasismenu, Btn_Evt, col[0], row[3], width[4], height[1], Basis[0].val, "Noise Basis" ) + + if NType.val in [0,1,2,3,4,11,12,13,14,15,17,18,19,20,21]: + musgr[0] = Slider( "H: ", Btn_Evt, col[0], row[5], width[4], height[1], musgr[0].val, 0.0, 3.0, 0 , "H" ) + musgr[1] = Slider( "Lacu: ", Btn_Evt, col[0], row[6], width[4], height[1], musgr[1].val, 0.0, 6.0, 0 , "Lacunarity" ) + musgr[2] = Slider( "Octs: ", Btn_Evt, col[0], row[4], width[4], height[1], musgr[2].val, 0, 12, 0 , "Octaves" ) + if NType.val in [1,2,3,13,14,15,18,19,20,21]: + musgr[3] = Slider( "Offst: ", Btn_Evt, col[0], row[7], width[4], height[1], musgr[3].val, 0.0, 6.0, 0 , "Offset" ) + if NType.val in [1,2,13,15,18]: + musgr[4] = Slider( "Gain: ", Btn_Evt, col[0], row[8], width[4], height[1], musgr[4].val, 0.0, 6.0, 0 , "Gain" ) + if NType.val == 19: + musgr[5] = Slider( "Thresh: ", Btn_Evt, col[0], row[8], width[4], height[1], musgr[5].val, 0.001, 2.0, 0 , "Threshold" ) + if NType.val in [5,6,7,16]: + turbOne[0] = Number( "Depth:", Btn_Evt, col[0], row[4], width[4], height[1], turbOne[0].val, 0, 12, "Octaves") + turbOne[1] = Toggle( "Hard noise", Btn_Evt, col[0], row[5], width[4], height[1], turbOne[1].val, "Soft noise / Hard noise") + turbOne[2] = Slider( "Amp:", Btn_Evt, col[0], row[6], width[4], height[1], turbOne[2].val, 0.0, 3.0, 0, "Ampscale ") + turbOne[3] = Slider( "Freq:", Btn_Evt, col[0], row[7], width[4], height[1], turbOne[3].val, 0.0, 6.0, 0, "Freqscale") + if NType.val in [18,19]: + tBasismod = Menu( tBasismodemenu, Btn_Evt, col[0], row[9], width[4], height[1], tBasismod.val, "Terrain basis mode.") + if NType.val == 6: + if voron[0].val == 6: + voron[1] = Slider( "Exp: ", Btn_Evt, col[0], row[8], width[4], height[1], voron[1].val, 0.0,10.0, 0, "Minkovsky exponent") + if NType.val in [7,11,12,14,20,21]: + vlnoi[0] = Slider( "Dist: ", Btn_Evt, col[0], row[8], width[4], height[1], vlnoi[0].val, 0.0, 10.0, 0 , "Distort" ) + if NType.val in [7,13,14,15,21]: + vlnoi[1] = Menu(noisebasismenu, Btn_Evt, col[0], row[9], width[4], height[1], vlnoi[1].val, "Distortion Noise") + if NType.val == 10: + marbleOne[0] = Number( "Depth: ", Btn_Evt, col[0], row[6], width[4], height[1], marbleOne[0].val, 0, 12, "Octaves") + marbleOne[2] = Slider( "Turb: ", Btn_Evt, col[0], row[7], width[4], height[1], marbleOne[2].val, 0.0,20.0, 0, "Turbulence ") + marbleOne[3] = Menu( biastypemenu, Btn_Evt ,col[0], row[4], width[4], height[1], marbleOne[3].val, "Bias") + marbleOne[5] = Slider("ReScale: ", Btn_Evt, col[0], row[8], width[4], height[1], marbleOne[5].val, 0.0,20.0, 0, "ReScale") + if marbleOne[3].val != 4: + marbleOne[4] = Menu(sharptypemenu, Btn_Evt ,col[0], row[5], width[4], height[1], marbleOne[4].val, "Sharpen") + + RandMod = Menu( randomtypemenu, No_Evt, col[0], row[10], width[0], height[1], RandMod.val, "Random Type" ) + rand_H = Toggle("TH",No_Evt ,col[1], row[10], width[0], height[1], rand_H.val, "Randomise Terrain Height ( in Height panel )") + rand_I = Toggle("NH",No_Evt ,col[2], row[10], width[0], height[1], rand_I.val, "Randomise Noise Height") + rand_S = Toggle("NS",No_Evt ,col[3], row[10], width[0], height[1], rand_S.val, "Randomise Noise Size") + rand_L = Toggle("NL",No_Evt ,col[4], row[10], width[0], height[1], rand_L.val, "Randomise Noise Location") + +###------------------------- +## Effect Buttons: +# +def EffectButtons( col, row, width, height ): + global Effect_Type, Effect_Ctrl, Blend_Effect, CustomFX + global NSize, iScale, Offset, Invert, Lx, Ly, Sx, Sy + global BasisTwo, turbTwo, marbleTwo, vlnoiTwo, musgrTwo + + Effect_Ctrl[0] = Menu( '|'.join( effecttypemenu ), Btn_Evt, col[0], row[2], width[4], height[2], Effect_Ctrl[0].val, "Effect: Type" ) + if Effect_Ctrl[0].val != 0: + Effect_Ctrl[1] = Menu( '|'.join( mixtypemenu ), Btn_Evt, col[5], row[2], width[4], height[2], Effect_Ctrl[1].val, "Mix: Type" ) + if Effect_Ctrl[1].val in [10,11]: + Effect_Ctrl[2] = Slider("Warp: ", Btn_Evt, col[5], row[3], width[4], height[1], Effect_Ctrl[2].val, -1.0, 1.0, 0, "Mix factor / Warp amount" ) + else: Effect_Ctrl[2] = Slider("Mix: ",Btn_Evt, col[5], row[3], width[4], height[1], Effect_Ctrl[2].val, -1.0, 1.0, 0, "Mix factor / Warp amount" ) + + iScale[1] = Number("iScale:", Btn_Evt, col[5], row[4], width[3], height[1], iScale[1].val, -20.0, 20.0 , "Effect: Intensity Scale " ) + Invert[1] = Toggle("Inv.", Btn_Evt, col[9], row[4], width[0], height[1], Invert[1].val, "Effect: Invert") + Offset[1] = Number("Offset:", Btn_Evt, col[5], row[5], width[4], height[1], Offset[1].val, -20.0, 20.0 , "Effect: Offset " ) + NSize[1] = Number("Frequency:",Btn_Evt, col[5], row[6], width[4], height[1], NSize[1].val, 0.001, 100.0, "Effect Frequency ( Scale )" ) + Sx[1] = Number("Freq X:", Btn_Evt, col[5], row[7], width[4], height[1], Sx[1].val, -50.0, 50.0 , "Effect Frequency X ( ScaleX )" ) + Sy[1] = Number("Freq Y:", Btn_Evt, col[5], row[8], width[4], height[1], Sy[1].val, -50.0, 50.0 , "Effect Frequency Y ( ScaleY )" ) + Lx[1] = Number("Loc X:", Btn_Evt, col[5], row[9], width[4], height[1], Lx[1].val, -1000.0, 1000.0 , "Effect Loc X" ) + Ly[1] = Number("Loc Y:", Btn_Evt, col[5], row[10], width[4], height[1], Ly[1].val, -1000.0, 1000.0 , "Effect Loc Y" ) + + if Effect_Ctrl[0].val == 1: + PushButton("Load Image", Load_Evt, col[0], row[4], width[4], height[2] , "Load Image") + PushButton("Select Image", Sel_Evt, col[0], row[6], width[4], height[3] , "Select Image") + draw_Text( ( col[0]+5, row[7] ), effect_image, black, 1 ) + + if Effect_Ctrl[0].val in [2,3,4,5,6,7,8,9]: + Basis[1] = Menu( noisebasismenu, Btn_Evt, col[0], row[3], width[4], height[1], Basis[1].val, "Basis" ) + + if Effect_Ctrl[0].val == 2: + turbTwo[0] = Number( "Depth:", Btn_Evt, col[0], row[4], width[4], height[1], turbTwo[0].val, 1, 12, "Octaves") + turbTwo[1] = Toggle("Hard noise", Btn_Evt, col[0], row[5], width[4], height[1], turbTwo[1].val, "Hard noise") + turbTwo[2] = Slider( "Amp:", Btn_Evt, col[0], row[6], width[4], height[1], turbTwo[2].val, 0.0, 3.0, 0, "Ampscale ") + turbTwo[3] = Slider( "Freq:", Btn_Evt, col[0], row[7], width[4], height[1], turbTwo[3].val, 0.0, 6.0, 0, "Freqscale") + if Effect_Ctrl[0].val == 3: + vlnoiTwo[1] = Menu(noisebasismenu, Btn_Evt, col[0], row[4], width[4], height[1], vlnoiTwo[1].val, "Distortion Noise") + vlnoiTwo[0] = Slider( "Dist: ", Btn_Evt, col[0], row[5], width[4], height[1], vlnoiTwo[0].val, 0.0, 10.0, 0 , "Distort" ) + if Effect_Ctrl[0].val == 4: + marbleTwo[0] = Number( "Depth: ", Btn_Evt, col[0], row[6], width[4], height[1], marbleTwo[0].val, 1, 12, "Octaves") + marbleTwo[2] = Slider( "Turb: ", Btn_Evt, col[0], row[7], width[4], height[1], marbleTwo[2].val, 0.0,20.0, 0, "Turbulence") + marbleTwo[3] = Menu( biastypemenu, Btn_Evt ,col[0], row[4], width[4], height[1], marbleTwo[3].val, "Bias") + marbleTwo[5] = Slider("ReScale: ", Btn_Evt, col[0], row[8], width[4], height[1], marbleTwo[5].val, 0.0,20.0, 0, "ReScale") + if marbleTwo[3].val != 4: + marbleTwo[4] = Menu(sharptypemenu,Btn_Evt ,col[0], row[5], width[4], height[1], marbleTwo[4].val, "Sharpen") + + if Effect_Ctrl[0].val in [5,6,7,8,9]: + musgrTwo[0] = Slider( "H: ", Btn_Evt, col[0], row[5], width[4], height[1], musgrTwo[0].val, 0.0, 3.0, 0 , "H" ) + musgrTwo[1] = Slider( "Lacu: ", Btn_Evt, col[0], row[6], width[4], height[1], musgrTwo[1].val, 0.0, 6.0, 0 , "Lacunarity" ) + musgrTwo[2] = Slider( "Octs: ", Btn_Evt, col[0], row[4], width[4], height[1], musgrTwo[2].val, 0, 12, 0 , "Octaves" ) + if Effect_Ctrl[0].val in [6,7,8]: + musgrTwo[3] = Slider( "Offst: ", Btn_Evt, col[0], row[7], width[4], height[1], musgrTwo[3].val, 0.0, 6.0, 0 , "Offset" ) + if Effect_Ctrl[0].val in [6,7]: + musgrTwo[4] = Slider( "Gain: ", Btn_Evt, col[0], row[8], width[4], height[1], musgrTwo[4].val, 0.0, 6.0, 0 , "Gain" ) + + if Effect_Ctrl[0].val > 9 and Effect_Ctrl[0].val < 31: + Effect_Ctrl[5] = Number("Depth:", Btn_Evt, col[0], row[4], width[4], height[1], Effect_Ctrl[5].val, 0, 12 , "Fractalize Effect: Octaves" ) + Effect_Ctrl[4] = Number("Distort:",Btn_Evt, col[0], row[7], width[4], height[1], Effect_Ctrl[4].val, 0.0, 50.0 , "Distort Effect: Amount" ) + Effect_Ctrl[6] = Slider("Freq:", Btn_Evt, col[0], row[5], width[4], height[1], Effect_Ctrl[6].val, 0.0, 6.0, 0, "Fractalize Effect: Frequency" ) + Effect_Ctrl[7] = Slider("Amp:", Btn_Evt, col[0], row[6], width[4], height[1], Effect_Ctrl[7].val, 0.0, 3.0, 0, "Fractalize Effect: Amplitude" ) + if Effect_Ctrl[0].val < 22: + Effect_Ctrl[3] = Menu(biastypemenu, Btn_Evt ,col[0], row[3], width[4], height[1], Effect_Ctrl[3].val, "Effect bias") + if Effect_Ctrl[0].val in [31,32]: + Effect_Ctrl[8] = Number("Amount:", Btn_Evt, col[0], row[4], width[4], height[1], Effect_Ctrl[8].val, -20.0, 20.0, "Effect: Amount" ) + if Effect_Ctrl[0].val == 33: + draw_Text( ( col[0]+5, row[4] ), 'Custom math ( h, x,y, a,b )' , black, 0 ) + CustomFX[0] = String( "a = ", Btn_Evt, col[0], row[5], width[4], height[1] ,CustomFX[0].val,96, "a" ) + CustomFX[1] = String( "b = ", Btn_Evt, col[0], row[6], width[4], height[1] ,CustomFX[1].val,96, "b" ) + CustomFX[2] = String( "result = ", Btn_Evt, col[0], row[7], width[4], height[1] ,CustomFX[2].val,96, "result" ) + +###------------------------- +## Filter / Height Buttons: +# +def FilterButtons( col, row, width, height ): + global iScale, Offset, Invert, Min, Max, Falloff, CustomFilt + global Filter_Mode, Def_Filter_Ctrl, Ipo_Filter_Ctrl, DefaultIpoName, Filter_Order + + iScale[2] = Number("Height:", Btn_Evt, col[5], row[2], width[3], height[2], iScale[2].val, -10.0, 10.0 , "Terrain Height: Scale" ) + Invert[2] = Toggle("Inv.", Btn_Evt, col[9], row[2], width[0], height[2], Invert[2].val, "Terrain Height: Invert") + Offset[2] = Number("Offset:", Btn_Evt, col[5], row[3], width[4], height[1], Offset[2].val, -10.0, 10.0 , "Terrain Height: Offset" ) + Max = Number( "Plateau:", Btn_Evt, col[5], row[5], width[4], height[1], Max.val, Min.val, 1.0 , "Terrain Height: Clamp Max. ( Plateau )" ) + Min = Number( "Sealevel:", Btn_Evt, col[5], row[6], width[4], height[1], Min.val, -1.0, Max.val , "Terrain Height: Clamp Min. ( Sealevel )" ) + Falloff[0] = Menu( falloftypemenu, Btn_Evt ,col[5], row[9], width[4], height[2], Falloff[0].val, "Terrain Height: Edge falloff") + if Falloff[0].val !=0: + Falloff[1] = Number("X:", Btn_Evt, col[5], row[10], width[1], height[1], Falloff[1].val , 0.01, 100.0 , "Edge falloff: X Size" ) + Falloff[2] = Number("Y:", Btn_Evt, col[8], row[10], width[1], height[1], Falloff[2].val , 0.01, 100.0 , "Edge falloff: Y Size" ) + Falloff[4] = Toggle("Inv.", Btn_Evt, col[7], row[10], width[0], height[1], Falloff[4].val, "Edge falloff: Invert") + Falloff[3] = Toggle("Edge At Sealevel", Btn_Evt, col[5], row[7], width[4], height[1], Falloff[3].val, "Edge falloff: Edge at Sealevel") + + Filter_Mode = Menu( filtermodemenu, No_Evt, col[0], row[2], width[4], height[2], Filter_Mode.val, "Filter: Mode") + if Filter_Mode.val ==1: + Def_Filter_Ctrl[0] = Menu( filtertypemenu, Btn_Evt, col[0], row[5], width[4], height[2], Def_Filter_Ctrl[0].val, "Filter: Type") + Def_Filter_Ctrl[1] = Number("Amount: ", Btn_Evt, col[0], row[6], width[4], height[1], Def_Filter_Ctrl[1].val, 0.1, 100.0 , "Filter: Amount" ) + + if Filter_Mode.val ==2: + Ipo_Filter_Ctrl[0] = String("IP:", Ipo_Evt, col[0], row[5], width[4], height[2], Ipo_Filter_Ctrl[0].val,20, "Ipo datablock name" ) + if Ipo_Filter_Ctrl[0].val !='': + Ipo_Filter_Ctrl[1] = Number("Use This Curve:",Ipo_Evt, col[0], row[7], width[4], height[3], Ipo_Filter_Ctrl[1].val, 0, 29, "Select curve to use" ) + Ipo_Filter_Ctrl[2] = Number("Curve Length:", Ipo_Evt, col[0], row[8], width[4], height[1], Ipo_Filter_Ctrl[2].val, 0.0, 1000.0, "X: Length (number of frames) of the selected curve." ) + Ipo_Filter_Ctrl[3] = Number("Curve Height:", Ipo_Evt, col[0], row[9], width[4], height[1], Ipo_Filter_Ctrl[3].val, 0.0, 1000.0, "Y: Height (offset) of the selected curve." ) + else: + draw_Text( ( col[0]+5, row[6] ), 'Enter Ipo DataBlock name,' , black, 0 ) + draw_Text( ( col[0]+5, row[9] ), 'or else:' , black, 0 ) + PushButton( "New IpoDataBlock/Object", New_Ipo_Evt, col[0], row[10], width[4], height[1], "Creates new Ipo Object(Empty), and Ipo DataBlock(curves)' to use as height filter") + + if Filter_Mode.val ==3: + draw_Text( ( col[0]+5, row[4] ), 'Custom math ( h, x,y, a,b )' , black, 0 ) + CustomFilt[0] = String( "a = ", Btn_Evt, col[0], row[5], width[4], height[1] ,CustomFilt[0].val,96, "a" ) + CustomFilt[1] = String( "b = ", Btn_Evt, col[0], row[6], width[4], height[1] ,CustomFilt[1].val,96, "b" ) + CustomFilt[2] = String( "result = ", Btn_Evt, col[0], row[7], width[4], height[1] ,CustomFilt[2].val,96, "result" ) + if Filter_Mode.val !=0: + Filter_Order = Toggle("Change Filter Order", Btn_Evt, col[0], row[3], width[4], height[1], Filter_Order.val, "Filter Order: OFF = Noise+Effect+Falloff+FILTER / ON = Noise+FILTER+Effect+Falloff.") + +###------------------------- +## Option / Generate Image Buttons: +# +def OptionButtons( col, row, width, height ): + global PreView, previewname + + PreView[0] = Toggle("Make Image", No_Evt, col[0], row[2], width[4], height[2], PreView[0].val, "Image: On/Off (Make a new Image in UV/ImageEditor Window, and give a name to it)") + if PreView[0].val !=0: + previewname = String( "IM:", No_Evt, col[0], row[3], width[4], height[1] ,previewname.val, 16, "IM:Name, Render terrain height to this image" ) + PreView[1] = Number("", Im_Evt, col[0], row[4], width[1], height[1], PreView[1].val, 0.0, 10.0, "Image: Intensity Scale") + PreView[2] = Number("", Im_Evt, col[3], row[4], width[1], height[1], PreView[2].val,-10.0, 10.0, "Image: Offset") + PushButton( "Draw Image", Im_Evt, col[0], row[5], width[4], height[1] , "Image: Update image ( KEY: V )") + draw_Text( ( col[5], row[1] ), 'Create yourself a new image', black, 0 ) + draw_Text( ( col[5], row[2] ), 'in UV/Image Editor Window,', black, 0 ) + draw_Text( ( col[5], row[3] ), 'give it a name,', black, 0 ) + draw_Text( ( col[5], row[4] ), 'and save it manualy.', black, 0 ) + +####-------------------------------------------------------------------------- +###-------------------------------------------------------------------------- +## Draw G.U.I. ------------------------------------------------------------- +#-------------------------------------------------------------------------- +def drawgui(): + global guitabs, ledcolor, FullScreen, AutoUpd, RandMod, RSeed, filemessage + global Effect_Ctrl, Filter_Mode, Falloff, PreView, rand_H, rand_S, rand_L, rand_I + + glClearColor(background[0],background[1],background[2],background[3]) + glClear(GL_COLOR_BUFFER_BIT) + scissorbox=Buffer(GL_FLOAT,4) + glGetFloatv(GL_SCISSOR_BOX,scissorbox) + scissbleft=int(scissorbox[0]) + scissbbase=int(scissorbox[1]) + scissbwidth=int(scissorbox[2]) + scissbheight=int(scissorbox[3]) + xstart = 5 + ystart = 5 + xgap = 5 + ygap = 5 + if FullScreen.val==1: + guiwidth = scissbwidth-10 + guiheight = scissbheight-25 + if guiwidth < size_x/2: + guiwidth = size_x/2 + if guiheight < size_y/2: + guiheight = size_y/2 + else: + guiwidth = size_x + guiheight = size_y + col,row = [],[] + xpart = ( ( guiwidth-xstart ) / columns ) + ypart = ( ( guiheight-ystart ) / rows ) + width = [] + for c in xrange( columns ): + col.append( xgap + xpart * c + xstart ) + width.append( xpart*(c+1)-xgap ) + height = [ (ypart-ygap)/2 , ypart-ygap, (ypart*3-ygap)/2, ypart*2-ygap, (ypart*5-ygap)/2 ] + for r in xrange( rows ): + row.append( ygap + ypart * r + ystart ) + row.reverse() + + ###------------------------- + ## Draw G.U.I.: + draw_BackPanel( 'Another Noise Tool 1.05', xstart, ystart, guiwidth, guiheight + ygap, lightgrey ) + + FullScreen = Toggle("", Scrn_Evt, guiwidth-32, guiheight+ygap+3, 15, 15, FullScreen.val ,"FullScreen" ) + PushButton( "X", End_Evt, guiwidth-16, guiheight+ygap+3, 15, 15, "Exit" ) + draw_Text(( guiwidth-(guiwidth/2)-width[0], guiheight+ygap+5 ), filemessage, white, 0 ) + + # gui tabs + guitabs[0] = Toggle("Main", gt0_Evt, col[0], row[0], width[1], height[1], guitabs[0].val ,"Main / Mesh settings" ) + guitabs[1] = Toggle("Noise", gt1_Evt, col[2], row[0], width[1], height[1], guitabs[1].val ,"Noise settings" ) + guitabs[2] = Toggle("Effect", gt2_Evt, col[4], row[0], width[1], height[1], guitabs[2].val ,"Add Effect" ) + guitabs[3] = Toggle("Height", gt3_Evt, col[6], row[0], width[1], height[1], guitabs[3].val ,"Height Filter" ) + guitabs[4] = Toggle("Options", gt4_Evt, col[8], row[0], width[1], height[1], guitabs[4].val ,"Options" ) + + if guitabs[0].val !=0: MeshButtons( col, row, width, height ) + elif guitabs[1].val !=0: NoiseButtons( col, row, width, height ) + elif guitabs[2].val !=0: EffectButtons( col, row, width, height ) + elif guitabs[3].val !=0: FilterButtons( col, row, width, height ) + elif guitabs[4].val !=0: OptionButtons( col, row, width, height ) + else: # some info + draw_Panel( col[0], row[0]-5, col[9]+width[0], row[10]-10, black ) + draw_Text( ( col[0]+5, row[1] ), 'Another Noise Tool v.1.05', ledcolors[0], 2 ) + draw_Text( ( col[0]+5, row[2] ), 'by: Jimmy Hazevoet, 01/2005-03/2007', ledcolors[1], 2 ) + draw_Text( ( col[0]+5, row[3] ), 'v.1.05: build/tested in: Blender 2.43 (Wndws)', ledcolors[2], 1 ) + draw_Text( ( col[0]+5, row[4] ), 'HotKeys: ----------------------------', ledcolors[3], 2 ) + draw_Text( ( col[0]+5, row[5] ), 'Space = Update mesh', ledcolors[4], 2 ) + draw_Text( ( col[0]+5, row[6] ), 'V = Update Image', ledcolors[5], 2 ) + draw_Text( ( col[0]+5, row[7] ), 'R = Randomise', ledcolors[6], 2 ) + draw_Text( ( col[0]+5, row[8] ), 'L = Load from file', ledcolors[7], 2 ) + draw_Text( ( col[0]+5, row[9] ), 'S = Save to file', ledcolors[8], 2 ) + draw_Text( ( col[0]+5, row[10] ),'Q = Quit', ledcolors[9], 2 ) + + # auto/generate/randomise buttons + rand_on_off = 0 + if rand_H.val !=0: rand_on_off = 1 + elif rand_I.val !=0: rand_on_off = 1 + elif rand_S.val !=0: rand_on_off = 1 + elif rand_L.val !=0: rand_on_off = 1 + else: rand_on_off = 0 + if rand_on_off != 0: + if RandMod.val in [1,2]: + PushButton( "Randomise", Rndm_Evt, col[2], row[12], width[2], height[2] , "Randomise Noise ( KEY: R )") + else: RSeed = Number("Seed: ", Rndm_Evt, col[2], row[12], width[2], height[2], RSeed.val, 0, 255 , "Random Seed: If seed = 0, the current time will be used as seed." ) + AutoUpd = Toggle("Auto", No_Evt, col[0], row[12], width[1], height[2], AutoUpd.val ,"Automatic update" ) + PushButton("Update", Upd_Evt, col[5], row[12], width[4], height[2] , "Generate / Update. ( KEY: SPACE )") + else: + AutoUpd = Toggle("Auto", No_Evt, col[0], row[12], width[1], height[2], AutoUpd.val ,"Automatic update" ) + PushButton("Update", Upd_Evt, col[2], row[12], width[7], height[2] , "Generate / Update. ( KEY: SPACE )") + ####--------------------------------------------------------------------------- + +###--------------------------------------------------------------------------- +##--------------------------------------------------------------------------- +# Key Events: + +def events(evt, val): + global PreView, txtFile, AutoUpd, PreView + + ## hotkey: Q = Quit + if (evt == QKEY and not val): + name = "Quit ?%t|No %x0|Yes %x1" + result = Blender.Draw.PupMenu(name) + if result==1: + Exit() + + ## hotkey: Space = Generate/Update terrain + if (evt == SPACEKEY and not val): + do_it() + + ## hotkey: R = Randomise noise + if (evt in [ RKEY ] and not val): + if AutoUpd.val != 0: + do_it_random() + else: + randomiseNoise() + Draw() + + ## hotkey: V = Update image + if PreView[0].val != 0: + if (evt in [ VKEY, RKEY ] and not val): + do_it_preview() + + ## hotkey: L = Load from file + if (evt == LKEY and not val): + loadmenu = "Load file ?%t|" + txtFile.val + loadresult = Blender.Draw.PupMenu(loadmenu) + if loadresult==1: + LoadPreset(txtFile.val) + if AutoUpd.val != 0: + do_it() + else: Draw() + + ## hotkey: S = Save to file + if (evt == SKEY and not val): + savemenu = "Save file ?%t|" + txtFile.val + saveresult = Blender.Draw.PupMenu(savemenu) + if saveresult==1: + SavePreset(txtFile.val) + Draw() + +###--------------------------------------------------------------------------- +##--------------------------------------------------------------------------- +# Button events: + +def bevents(evt): + global txtFile, effect_image, PreView, fileinfo, filemessage + global Filter_Mode, Ipo_Filter_Ctrl, iponame, thiscurve, selectedcurve + global antfilename, terrainname + global actob, actme + + # quit/reset event + if (evt == End_Evt ): + name = "OK ?%t|Reset %x1|Quit %x2" + result = Blender.Draw.PupMenu(name) + if result==1: + Set_ReSet_Values() + Draw() + elif result==2: + Exit() + + ## file info string event + if (evt == UseMe_Evt ): + result = Blender.Draw.PupStrInput("Info: ", fileinfo, 96) + if result: + fileinfo = result + Draw() + else: return + + ## none event + if (evt in [No_Evt, Scrn_Evt] ): + Draw() + + ## image event + if (evt == Im_Evt ): + do_it_preview() + + ## generate/update event + if (evt == Upd_Evt ): + if PreView[0].val != 0: + do_it_preview() + do_it() + + ## mesh button event + if (evt == Msh_Evt): + if AutoUpd.val != 0: + do_it() + else: Draw() + + ## button event + if (evt == Btn_Evt ): + if AutoUpd.val != 0: + if PreView[0].val != 0: + do_it_preview() + do_it() + else: Draw() + + ## randomise event + if (evt == Rndm_Evt ): + if AutoUpd.val != 0: + do_it_random() + else: + randomiseNoise() + if PreView[0].val != 0: + do_it_preview() + Draw() + + ###--------------------------------------------------------- + ## Effect Image Load/Select: + if (evt == Load_Evt ): + Blender.Window.FileSelector ( load_image, 'LOAD IMAGE') + if (evt == Sel_Evt ): + try: effect_image = Image_Menu() + except: pass + if AutoUpd.val != 0: + do_it() + else: Draw() + + ###--------------------------------------------------------- + ## Make New IPOCurve to use as Filter: + if (evt == New_Ipo_Evt ): + objname = Create("ANT_Ipo_Empty") + iponame = Create("ANT_IPO") + block = [] + block.append("Enter new names") + block.append("and hit OK button") + block.append(("OB: ", objname, 0, 30, "New Ipo Object Name. (Object type = 'Empty')")) + block.append(("IP: ", iponame, 0, 30, "New Ipo DataBlock Name")) + block.append("Open IpoCurveEditor") + block.append("select Ipo DataBlock" ) + block.append("'Pin' the view" ) + block.append("and edit the curves." ) + retval = PupBlock("Make A.N.T. IpoCurve Object", block) + if retval !=0: + ANTAutoIpo( objname.val, iponame.val ) + Ipo_Filter_Ctrl[0].val = iponame.val + + ###--------------------------------------------------------- + ## get IPOCurve to use as Filter: + if (evt in [Ipo_Evt, New_Ipo_Evt] ): + if Filter_Mode.val == 2: + if AutoUpd.val != 0: + try: + ipoblockname = Ipo.Get( Ipo_Filter_Ctrl[0].val ) + thiscurve = ipoblockname.getCurves() + selectedcurve = thiscurve[ Ipo_Filter_Ctrl[1].val ] + if PreView[0].val != 0: + do_it_preview() + #if AutoUpd.val != 0: + do_it() + except: pass + else: + try: + ipoblockname = Ipo.Get( Ipo_Filter_Ctrl[0].val ) + thiscurve = ipoblockname.getCurves() + selectedcurve = thiscurve[ Ipo_Filter_Ctrl[1].val ] + if PreView[0].val != 0: + do_it_preview() + else: + Draw() + except: pass + + ###--------------------------------------------------------- + ## gui tabs + if (evt == gt0_Evt ): + if guitabs[0].val == 1: + guitabs[1].val = ( 0 ) + guitabs[2].val = ( 0 ) + guitabs[3].val = ( 0 ) + guitabs[4].val = ( 0 ) + Draw() + if (evt == gt1_Evt ): + if guitabs[1].val == 1: + guitabs[0].val = ( 0 ) + guitabs[2].val = ( 0 ) + guitabs[3].val = ( 0 ) + guitabs[4].val = ( 0 ) + Draw() + if (evt == gt2_Evt ): + if guitabs[2].val == 1: + guitabs[0].val = ( 0 ) + guitabs[1].val = ( 0 ) + guitabs[3].val = ( 0 ) + guitabs[4].val = ( 0 ) + Draw() + if (evt == gt3_Evt ): + if guitabs[3].val == 1: + guitabs[0].val = ( 0 ) + guitabs[1].val = ( 0 ) + guitabs[2].val = ( 0 ) + guitabs[4].val = ( 0 ) + Draw() + if (evt == gt4_Evt ): + if guitabs[4].val == 1: + guitabs[0].val = ( 0 ) + guitabs[1].val = ( 0 ) + guitabs[2].val = ( 0 ) + guitabs[3].val = ( 0 ) + Draw() + + ###--------------------------------------------------------- + ## load and save all settings: + if (evt == SelFile_Evt ): + Blender.Window.FileSelector ( callback, "Select .ant File") + if (evt == LoadFile_Evt ): + loadmenu = "Load file ?%t|" + txtFile.val + loadresult = Blender.Draw.PupMenu(loadmenu) + if loadresult==1: + LoadPreset(txtFile.val) + Draw() + if AutoUpd.val != 0: + do_it() + if (evt == SaveFile_Evt ): + savemenu = "Save file ?%t|" + txtFile.val + saveresult = Blender.Draw.PupMenu(savemenu) + if saveresult==1: + SavePreset(txtFile.val) + Draw() + + ###--------------------------------------------------------- + # New Grid + ###------------------------- + if (evt == New_Evt): + scn = Blender.Scene.GetCurrent() + gridname = Create("Terrain") + gridres = Create(256) + curspos = Create(0) + block = [] + block.append(("OB: ", gridname, 0, 30, "New Object Name.")) + block.append(("Resol: ", gridres, 4, 1024, "New grid resolution")) + block.append(("At Cursor", curspos, "New grid at cursor position")) + retval = PupBlock("New Grid Mesh", block) + if retval !=0: + MakeGridMesh( gridres.val, gridname.val, curspos.val, scn ) + obj = scn.objects.active + if obj.type == 'Mesh': + actob=[] + actme=[] + actob.append( obj ) + actme.append( actob[0].getData(mesh=1) ) + Blender.Redraw() + + ###--------------------------------------------------------- + # Assign Grid + ###------------------------- + if (evt == App_Evt): + scn = Blender.Scene.GetCurrent() + obj = scn.objects.active + if obj: + if obj.type == 'Mesh': + actob=[] + actme=[] + actob.append( obj ) + actme.append( actob[0].getData(mesh=1) ) + Draw() + + ###------------------------- + if (evt not in [LoadFile_Evt,SaveFile_Evt] ): + filemessage = '' + #Draw() + + ### end events. ------------------------- + +####------------------------------------------------------------------------------------- +###------------------------------------------------------------------------------------- +##------------------------------------------------------------------------------------- +#------------------------------------------------------------------------------------- + +##---------------------------------- +# A.N.T. Auto Ipo generator: +def ANTAutoIpo( objname, iponame ): + scn=Scene.GetCurrent() + # Deselect all objects: + scn.objects.selected=[] + # Create new 'ANT_IPO_OBJECT': + obj = scn.objects.new('Empty', objname ) + obj.setDrawMode(8) + obj.select(1) + obj.layers = Window.ViewLayers() + # Set current frame at 1: + frame = Get('curframe') + if frame !=1: + Set('curframe',1) + frame = Get('curframe') + # Insert IpoKeys: + obj.setLocation(0.0, 0.0, 0.0) + obj.insertIpoKey(0) + Set('curframe',101) + obj.setLocation(100.0, 100.0, 100.0) + obj.insertIpoKey(0) + Set('curframe',1) + # Set Ipo name: + ip = obj.getIpo() + ip.name = iponame + #------------------------- + print "New ANT_IPO: " + objname +" (Object) and " + iponame + " (Ipo DataBlock) Created!" + #------------------------- + +##------------------------------------------------------------------------------------- + +##------------------------- +# Generate random numbers: +def randnum(low,high): + global RandMod, RSeed + if RandMod.val == 0: + # Noise.random setRandomSeed + s = Noise.setRandomSeed( RSeed.val ) + num = Noise.random() + num = num*(high-low) + num = num+low + elif RandMod.val == 1: + # Mathutils.Rand + num = Mathutils.Rand(low,high) + else: + # BPyMathutils Mersenne Twister genrand + num = genrand() + num = num*(high-low) + num = num+low + return num + +##------------------------- +# Randomise noise: height, size and location: +def randomiseNoise(): + global rand_I, rand_H, rand_S, rand_L, NSize, iScale, Offset, Invert, Lx, Ly, Sx, Sy + + if rand_I.val !=0: + iScale[0] = Create( randnum( 0.2 , 3.0 ) ) + Offset[0] = Create( randnum(-1.0 , 1.0 ) ) + if rand_H.val !=0: + iScale[2] = Create( randnum( 0.10 , 1.0 ) ) + Offset[2] = Create( randnum(-0.25 , 0.25 ) ) + if rand_S.val !=0: + NSize[0] = Create( randnum( 0.25 , 2.5 ) ) + #Sx[0] = Create( randnum( 0.5 , 1.5 ) ) + #Sy[0] = Create( randnum( 0.5 , 1.5 ) ) + if rand_L.val !=0: + Lx[0] = Create( randnum( -10000 , 10000 ) ) + Ly[0] = Create( randnum( -10000 , 10000 ) ) + +##------------------------------------------------------------------------------------- + +###-------------------------- +# Load Image: +def load_image( ImageFileName ): + Image.Load( ImageFileName ) + +###-------------------------- +# Select Image Menu: +def Image_Menu(): + try: + names=[] + imagelist = Image.Get() + imagelist.reverse() + for numbers, obnames in enumerate( imagelist ): + n = obnames.getName() + names.append( n ) + imlistText = string.join( [ '|' + str(names[key]) + '%x' + str(key) for key in xrange(numbers+1) ], '' ) + image_menu = Blender.Draw.PupMenu( "Images: %t" + imlistText ) + if image_menu == -1: + return '' + return imagelist[ image_menu ].getName() + except: + return 'No image found!' + +###-------------------------- +# Get Image Pixels: +def Image_Func( x,y ): + try: + pic = Image.Get( effect_image ) + except: + return 0.0 + w, h = pic.getSize() + x, y = x,-y + x = int(w * ((x + 1.0) % 2.0) / 2.0) + y = int((h-1) - h * ((y + 1.0) % 2.0) / 2.0) + c = pic.getPixelF( x,y ) + return ( c[0] + c[1] + c[2] ) / 3.0 + +##------------------------------------------------------------------------------------- + +# Transpose noise coords: +def Trans((x,y,z), size, loc ): + x = ( x / size[1] / size[0] + loc[0] ) + y = ( y / size[2] / size[0] + loc[1] ) + z = 0.0 #( z / size[3] / size[0] + loc[2] ) + return x,y,z + +# Transpose effect coords: +def Trans_Effect((x,y,z), size, loc ): + x = ( x * size[1] * size[0] + loc[0] ) + y = ( y * size[2] * size[0] + loc[1] ) + z = 0.0 + return x,y,z + +# Height scale: +def HeightScale( input, iscale, offset, invert ): + if invert !=0: + return (1.0-input) * iscale + offset + else: + return input * iscale + offset + +# dist. +def Dist(x,y): + return sqrt( (x*x)+(y*y) ) + +##----------------------------------- +# bias types: +def no_bias(a): + return a +def sin_bias(a): + return 0.5 + 0.5 * sin(a) +def cos_bias(a): + return 0.5 + 0.5 * cos(a) +def tri_bias(a): + b = 2 * phi + a = 1 - 2 * abs(floor((a * (1/b))+0.5) - (a*(1/b))) + return a +def saw_bias(a): + b = 2 * phi + n = int(a/b) + a -= n * b + if a < 0: a += b + return a / b +# sharpen types: +def soft(a): + return a +def sharp(a): + return a**0.5 +def sharper(a): + return sharp(sharp(a)) +Bias_Types = [ sin_bias, cos_bias, tri_bias, saw_bias, no_bias ] +Sharp_Types = [ soft, sharp, sharper ] + +##----------------------------------- +# clamp height +def clamp( height, min, max ): + if ( height < min ): height = min + if ( height > max ): height = max + return height + +##----------------------------------- +# Mix modes +def maximum( a, b ): + if ( a > b ): b = a + return b +def minimum( a, b ): + if ( a < b ): b = a + return b + +def Mix_Modes( (i,j),(x,y,z) , a,b, mixfactor, mode ): + a = a * ( 1.0 - mixfactor ) + b = b * ( 1.0 + mixfactor ) + if mode == 0: return ( b ) #0 effect only + elif mode == 1: return ( a*(1.0-0.5) + (b*0.5) ) #1 mix + elif mode == 2: return ( a + b ) #2 add + elif mode == 3: return ( a - b ) #3 sub. + elif mode == 4: return ( a * b ) #4 mult. + elif mode == 5: return (abs( a - b )) #5 abs diff. + elif mode == 6: return 1.0-((1.0-a)*(1.0-b)/1.0) #6 screen + elif mode == 7: return ( a + b ) % 1.0 #7 addmodulo + elif mode == 8: return min( a, b ) #8 min. + elif mode == 9: return max( a, b ) #9 max. + elif mode == 10: #10 warp: effect + noise = mixfactor * Noise_Function(x,y,z) + return Effects( (i,j),(x+noise,y+noise,z) ) + elif mode == 11: #11 warp: noise + effect = mixfactor * Effects( (i,j),(x,y,z) ) + return Noise_Function( x+effect, y+effect, z ) + else: return a + +###---------------------------------------------------------------------- +# Effect functions: + +# Effect_Basis_Function: +def Effect_Basis_Function((x,y), type, bias ): + + iscale = 1.0 + offset = 0.0 + ## gradient: + if type == 0: + effect = offset + iscale * ( Bias_Types[ bias ]( x + y ) ) + ## waves / bumps: + if type == 1: + effect = offset + iscale * 0.5 * ( Bias_Types[ bias ]( x*phi ) + Bias_Types[ bias ]( y*phi ) ) + ## zigzag: + if type == 2: + effect = offset + iscale * Bias_Types[ bias ]( offset + iscale * sin( x*phi + sin( y*phi ) ) ) + ## wavy: + if type == 3: + effect = offset + iscale * ( Bias_Types[ bias ]( cos( x ) + sin( y ) + cos( x*2+y*2 ) - sin( -x*4+y*4) ) ) + ## sine bump: + if type == 4: + effect = offset + iscale * 1-Bias_Types[ bias ](( sin( x*phi ) + sin( y*phi ) )) + ## dots: + if type == 5: + effect = offset + iscale * ( Bias_Types[ bias ](x*phi*2) * Bias_Types[ bias ](y*phi*2) )-0.5 + ## rings / dome: + if type == 6: + effect = offset + iscale * ( Bias_Types[ bias ]( 1.0-(x*x+y*y) ) ) + ## spiral: + if type == 7: + effect = offset + iscale * Bias_Types[ bias ](( x*sin( x*x+y*y ) + y*cos( x*x+y*y ) ))*0.5 + ## square / piramide: + if type == 8: + effect = offset + iscale * Bias_Types[ bias ](1.0-sqrt( (x*x)**10 + (y*y)**10 )**0.1) + ## blocks: + if type == 9: + effect = ( 0.5-max( Bias_Types[ bias ](x*phi) , Bias_Types[ bias ](y*phi) )) + if effect > 0.0: effect = 1.0 + effect = offset + iscale * effect + ## grid: + if type == 10: + effect = ( 0.025-min( Bias_Types[ bias ](x*phi) , Bias_Types[ bias ](y*phi) )) + if effect > 0.0: effect = 1.0 + effect = offset + iscale * effect + ## tech: + if type == 11: + a = ( max( Bias_Types[ bias ](x*pi) , Bias_Types[ bias ](y*pi) )) + b = ( max( Bias_Types[ bias ](x*pi*2+2) , Bias_Types[ bias ](y*pi*2+2) )) + effect = ( min( Bias_Types[ bias ](a) , Bias_Types[ bias ](b) ))*3.0-2.0 + if effect > 0.5: effect = 1.0 + effect = offset + iscale * effect + + ## crackle: + if type == 12: + t = turbulence(( x, y, 0 ), 6, 0, 0 ) * 0.25 + effect = vlNoise(( x, y, t ), 0.25, 0, 8 ) + if effect > 0.5: effect = 0.5 + effect = offset + iscale * ( effect ) + ## sparse cracks noise: + if type == 13: + effect = 2.5 * abs( noise((x*0.5,y*0.5, 0 ), 1 ) )-0.1 + if effect > 0.25: effect = 0.25 + effect = offset + iscale * ( effect * 2.5 ) + ## shattered rock noise: + if type == 14: + effect = 0.5 + noise((x,y,0), 7 ) + if effect > 0.75: effect = 0.75 + effect = offset + iscale * effect + ## lunar noise: + if type == 15: + effect = 0.25 + 1.5 * voronoi(( x+2, y+2, 0 ), 1 )[0][0] + if effect > 0.5: effect = 0.5 + effect = offset + iscale * ( effect * 2.0 ) + ## cosine noise: + if type == 16: + effect = cos( 5*noise(( x, y, 0 ), 0 ) ) + effect = offset + iscale * ( effect*0.5 ) + ## spikey noise: + if type == 17: + n = 0.5 + 0.5 * turbulence(( x*5, y*5, 0 ), 8, 0, 0 ) + effect = ( ( n*n )**5 ) + effect = offset + iscale * effect + ## stone noise: + if type == 18: + effect = offset + iscale *( noise((x*2,y*2, 0 ), 0 ) * 1.5 - 0.75) + ## Flat Turb: + if type == 19: + t = turbulence(( x, y, 0 ), 6, 0, 0 ) + effect = t*2.0 + if effect > 0.25: effect = 0.25 + effect = offset + iscale * ( effect ) + ## Flat Voroni: + if type == 20: + t = 1-noise(( x, y, 0 ), 3 ) + effect = t*2-1.75 + if effect > 0.25: effect = 0.25 + effect = offset + iscale * ( effect ) + + if effect < 0.0: effect = 0.0 + return effect + +# fractalize Effect_Basis_Function: ------------------------------ +def Effect_Function((x,y), type,bias, turb, depth,frequency,amplitude ): + + ## effect distortion: + if turb != 0.0: + t = vTurbulence(( x, y, 0 ), 6, 0, 0 ) + x = x + ( 0.5 + 0.5 * t[0] ) * turb + y = y + ( 0.5 + 0.5 * t[1] ) * turb + + result = Effect_Basis_Function((x,y), type, bias ) + ## fractalize effect: + if depth != 0: + i=0 + while i < depth: + i+=1 + x *= frequency + y *= frequency + amplitude = amplitude / i + result += Effect_Basis_Function( (x,y), type, bias ) * amplitude + return result + +###-------------------------------------------------- +# Custom effect: +def CustomEffect( x,y,z,h ): + global CustomFX + try: + a = eval( CustomFX[0].val ) + b = eval( CustomFX[1].val ) + result = eval( CustomFX[2].val ) + return result + except: + return 0.0 + +###-------------------------------------------------- +## Effect Selector: + +def Effects( (i,j),(x,y,z), h=0.0 ): + global Effect_Type, Effect_Ctrl, iScale, Offset, Invert + global NSize, Lx, Ly, Lz, Sx, Sy, Sz, marbleTwo, turbTwo, vlnoiTwo, Basis, musgrTwo + + x,y,z = Trans_Effect((x,y,z),( NSize[1].val, Sx[1].val, Sy[1].val, 0 ),( Lx[1].val, Ly[1].val, 0 ) ) + basis = Basis[1].val + if basis == 9: basis = 14 + vbasis = vlnoiTwo[1].val + if vbasis == 9: vbasis = 14 + if Effect_Ctrl[0].val == 1: + try: effect = Image_Func( x,y ) + except: effect = 0.0 + elif Effect_Ctrl[0].val == 2: effect = 0.5+0.5*turbulence(( x,y,z ),turbTwo[0].val, turbTwo[1].val, basis, turbTwo[2].val, turbTwo[3].val ) + elif Effect_Ctrl[0].val == 3: effect = 0.5+0.5*vlNoise(( x,y,z ),vlnoiTwo[0].val, vbasis, basis ) + elif Effect_Ctrl[0].val == 4: effect = 0.5*marbleNoise((x,y,z), marbleTwo[0].val, basis, marbleTwo[2].val, marbleTwo[3].val, marbleTwo[4].val, marbleTwo[5].val ) + elif Effect_Ctrl[0].val == 5: effect = 0.5*multiFractal(( x,y,z ),musgrTwo[0].val, musgrTwo[1].val, musgrTwo[2].val, basis ) + elif Effect_Ctrl[0].val == 6: effect = 0.5*ridgedMFractal(( x,y,z ),musgrTwo[0].val, musgrTwo[1].val, musgrTwo[2].val, musgrTwo[3].val, musgrTwo[4].val, basis ) + elif Effect_Ctrl[0].val == 7: effect = 0.5*hybridMFractal(( x,y,z ),musgrTwo[0].val, musgrTwo[1].val, musgrTwo[2].val, musgrTwo[3].val, musgrTwo[4].val, basis ) + elif Effect_Ctrl[0].val == 8: effect = 0.5*heteroTerrain(( x,y,z ),musgrTwo[0].val, musgrTwo[1].val, musgrTwo[2].val, musgrTwo[3].val, basis )*0.5 + elif Effect_Ctrl[0].val == 9: effect = 0.5*fBm(( x,y,z ),musgrTwo[0].val, musgrTwo[1].val, musgrTwo[2].val, basis )+0.5 + elif Effect_Ctrl[0].val > 9 and Effect_Ctrl[0].val < 31: + effect = Effect_Function((x,y), Effect_Ctrl[0].val-10, Effect_Ctrl[3].val, Effect_Ctrl[4].val, Effect_Ctrl[5].val, Effect_Ctrl[6].val, Effect_Ctrl[7].val ) + elif Effect_Ctrl[0].val == 31: effect = Effect_Ctrl[8].val * random() + elif Effect_Ctrl[0].val == 32: effect = Effect_Ctrl[8].val + elif Effect_Ctrl[0].val == 33: effect = CustomEffect( x,y,z, h ) + effect = HeightScale( effect, iScale[1].val , Offset[1].val, Invert[1].val ) + return effect*2.0 + +###---------------------------------------------------------------------- +# Noise: +##----------------------------------- + +## voronoi_turbulence: +def voroTurbMode((x,y,z), voro, mode ): + if mode == 0: # soft + return voronoi(( x,y,z ),voro[0], voro[1] )[0][0] + if mode == 1: # hard + return ( abs( 0.5-voronoi(( x,y,z ),voro[0], voro[1] )[0][0] ) )+0.5 +def voronoi_turbulence((x,y,z), voro, tur ): + result = voroTurbMode((x,y,z), voro, tur[1] ) + depth = tur[0] + amp = tur[2] + freq = tur[3] + i=0 + for i in xrange( depth ): + i+=1 + result += voroTurbMode( ( x*(freq*i), y*(freq*i), z ), voro, tur[1] )* ( amp*0.5/i ) + return (result*4.0-2.0) + +## DistortedNoise / vlNoise_turbulence: +def vlnTurbMode((x,y,z), vlno, basis, mode ): + if mode == 0: # soft + return vlNoise(( x,y,z ),vlno[0], vlno[1], basis ) + if mode == 1: # hard + return ( abs( -vlNoise(( x,y,z ),vlno[0], vlno[1], basis ) ) ) +def vlNoise_turbulence((x,y,z), vlno, tur, basis ): + result = vlnTurbMode((x,y,z), vlno, basis, tur[1] ) + depth = tur[0] + amp = tur[2] + freq = tur[3] + i=0 + for i in xrange( depth ): + i+=1 + result += vlnTurbMode( ( x*(freq*i), y*(freq*i), z ), vlno, basis, tur[1] ) * ( amp*0.5/i ) + return result*2.0+0.5 + +## marbleNoise: +def marbleNoise( (x,y,z), depth, basis, turb, bias, sharpnes, rescale ): + m = ( x * rescale + y * rescale + z ) * 5 + height = m + turb * turbulence( ( x ,y ,z ), depth, 0, basis, 0.5, 2.0 ) + height = Bias_Types[ bias ]( height ) + if bias != 4: + height = Sharp_Types[ sharpnes ]( height ) + return height*2.0 + +## lava_multiFractal: +def lava_multiFractal( ( x,y,z ),Ha, La, Oc, distort, Basis ): + m = multiFractal( ( x,y,z ), Ha, La, Oc, Basis) + d = m * distort + m2 = 0.5 * multiFractal( ( x+d,y+d,d*0.5 ), Ha, La, Oc, Basis) + return (m * m2)**0.5 + +## slopey_noise: +def slopey_noise((x,y,z), H, lacunarity, octaves, distort, basis ): + x=x*2 + y=y*2 + turb = fBm((x,y,z), H, lacunarity, octaves, 2 ) * 0.5 + map = 0.5 + noise( ( x+turb, y+turb, z ), basis ) + result = map + turb * distort + return result + +## duo_multiFractal: +def double_multiFractal((x,y,z), H, lacunarity, octaves, offset, gain, basis ): + n1 = multiFractal( (x*1.5+1,y*1.5+1,z), 1.0, 1.0, 1.0, basis[0] ) * offset + n2 = multiFractal( (x-1,y-1,z), H, lacunarity, octaves, basis[1] ) * gain + result = ( n1*n1 + n2*n2 )*0.5 + return result + +## distorted_heteroTerrain: +def distorted_heteroTerrain((x,y,z), H, lacunarity, octaves, offset, distort, basis ): + h1 = ( heteroTerrain((x,y,z), 1.0, 2.0, 1.0, 1.0, basis[0] ) * 0.5 ) + h2 = ( heteroTerrain(( x, y, h1*distort ), H, lacunarity, octaves, offset, basis[1] ) * 0.25 ) + result = ( h1*h1 + h2*h2 ) + return result + +## SlickRock: +def SlickRock((x,y,z), H, lacunarity, octaves, offset, gain, basis ): + n = multiFractal( (x,y,z), 1.0, 2.0, 1.0, basis[0] ) + r = ridgedMFractal((x,y,n*0.5), H, lacunarity, octaves, offset, gain, basis[1] )*0.5 + return n+(n*r) + +## terra_turbulence: +def terra_turbulence((x,y,z), depth, hard, basis, amp, freq ): + t2 = turbulence( ( x, y, z ), depth, hard , basis, amp, freq ) + return (t2*t2*t2)+0.5 + +## rocky_fBm: +def rocky_fBm((x,y,z), H, lacunarity, octaves, basis ): + turb = fBm((x,y,z), H, lacunarity, octaves, 2 ) * 0.25 + coords = ( x+turb, y+turb, z ) + map = noise( coords, 7 ) + result = map + fBm( coords, H, lacunarity, octaves, basis ) + 1.0 + return result + +## Shattered_hTerrain: +def Shattered_hTerrain((x,y,z), H, lacunarity, octaves, offset, distort, basis ): + d = ( turbulence( ( x, y, z ), 6, 0, 0, 0.5, 2.0 ) * 0.5 + 0.5 )*distort*0.25 + t0 = ( turbulence( ( x+d, y+d, z ), 0, 0, 7, 0.5, 2.0 ) + 0.5 ) + t2 = ( heteroTerrain(( x*2, y*2, t0*0.5 ), H, lacunarity, octaves, offset, basis ) ) + return (( t0*t2 )+t2*0.5)*0.75 + +## vlhTerrain +def vlhTerrain((x,y,z), H, lacunarity, octaves, offset, basis, vlbasis, distort ): + ht = heteroTerrain(( x, y, z ), H, lacunarity, octaves, offset, basis )*0.5 + vl = ht * vlNoise((x,y,z), distort, basis, vlbasis )*0.5+0.5 + return vl * ht + +####---------------------------------------. +### StatsByAlt, double terrain basis mode: +def TerrainBasisMode((x,y,z), basis, mode ): + if mode == 0: # noise + return noise((x,y,z),basis) + if mode == 1: # noise ridged + return ( 1.0-abs( noise((x,y,z),basis) ) )-0.5 + if mode == 2: # vlNoise + return vlNoise((x,y,z), 1.0, 0, basis ) + else: # vlNoise ridged + return ( 1.0-abs( vlNoise((x,y,z), 1.0, 0, basis ) ) )-0.5 + +#### StatsByAlt terrain: +def StatsByAltTerrain((x,y,z), exp, lacu, octs, offset, amp, basis, mode ): + result = 0.5 * (offset + TerrainBasisMode((x,y,z), basis, mode ) ) + octs = int( octs ) + i = 0 + for i in xrange( 1, octs ): + i += 1 + result += result * amp * 0.5 * (offset + TerrainBasisMode((x,y,z), basis, mode ) ) + x *= lacu + y *= lacu + amp /= ( exp * 0.5 ) * i + return result + +##### double terrain: +def doubleTerrain((x,y,z), exp, lacu, octs, offset, threshold, basis, mode ): + result = amp = freq = 1.0 + #octs = int( octs ) + offset*=0.5 + i = 1 + signal = result = 0.5 * (offset + TerrainBasisMode((x,y,z), basis, mode ) ) + for i in xrange( 1, octs ): + i += 1 + x = x * lacu + y = y * lacu + freq *= lacu + amp = pow( freq, -exp ) + amp *= i + weight = signal / threshold + if weight > 1.0: weight = 1.0 + if weight < 0.0: weigth = 0.0 + signal = weight * 0.5 * ( offset + TerrainBasisMode((x,y,z), basis, mode ) ) + result += amp * signal + return result * 2.0 + +##------------------------------------------------------------ +# Noise Functions: +def Noise_Function(x,y,z): + global Basis, NType, musgr, vlnoi, voron, turbOne, marbleOne, tBasismod + global vlBasis, Distort, VFunc, VExp, VDep + global iScale, Offset, Invert, NSize, Lx, Ly, Sx, Sy + + x,y,z = Trans((x,y,z),( NSize[0].val, Sx[0].val, Sy[0].val, 0 ),( Lx[0].val, Ly[0].val, 0 ) ) + basis = Basis[0].val + if basis == 9: basis = 14 + vbasis = vlnoi[1].val + if vbasis == 9: vbasis = 14 + if NType.val == 0: z = multiFractal(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, basis ) + elif NType.val == 1: z = ridgedMFractal(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[4].val, basis ) + elif NType.val == 2: z = hybridMFractal(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[4].val, basis ) + elif NType.val == 3: z = heteroTerrain(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, basis )*0.5 + elif NType.val == 4: z = fBm(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, basis )+0.5 + elif NType.val == 5: z = turbulence(( x,y,z ),turbOne[0].val, turbOne[1].val, basis, turbOne[2].val, turbOne[3].val )+0.5 + elif NType.val == 6: z = voronoi_turbulence((x,y,z),(voron[0].val,voron[1].val),(turbOne[0].val,turbOne[1].val,turbOne[2].val,turbOne[3].val) )*0.5+0.5 + elif NType.val == 7: z = vlNoise_turbulence((x,y,z),(vlnoi[0].val,vbasis), (turbOne[0].val,turbOne[1].val,turbOne[2].val,turbOne[3].val), basis )*0.5+0.5 + elif NType.val == 8: z = noise(( x,y,z ),basis )+0.5 + elif NType.val == 9: z = cellNoise(( x,y,z ))+0.5 + elif NType.val == 10: z = marbleNoise(( x,y,z), marbleOne[0].val, basis, marbleOne[2].val, marbleOne[3].val, marbleOne[4].val, marbleOne[5].val ) + elif NType.val == 11: z = lava_multiFractal(( x,y,z ), musgr[0].val, musgr[1].val, musgr[2].val, vlnoi[0].val, basis ) + elif NType.val == 12: z = slopey_noise(( x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, vlnoi[0].val, basis )+0.5 + elif NType.val == 13: z = double_multiFractal(( x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[4].val, (vbasis,basis) ) + elif NType.val == 14: z = distorted_heteroTerrain((x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, vlnoi[0].val, (vbasis,basis) ) + elif NType.val == 15: z = SlickRock(( x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[4].val, (vbasis,basis) ) + elif NType.val == 16: z = terra_turbulence(( x,y,z), turbOne[0].val, turbOne[1].val, basis, turbOne[2].val, turbOne[3].val ) + elif NType.val == 17: z = rocky_fBm(( x,y,z ),musgr[0].val, musgr[1].val, musgr[2].val, basis ) + elif NType.val == 18: z = StatsByAltTerrain( (x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[4].val*0.5, basis, tBasismod.val ) + elif NType.val == 19: z = doubleTerrain( (x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, musgr[5].val, basis, tBasismod.val ) + elif NType.val == 20: z = Shattered_hTerrain((x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, vlnoi[0].val, basis ) + elif NType.val == 21: z = vlhTerrain((x,y,z), musgr[0].val, musgr[1].val, musgr[2].val, musgr[3].val, basis, vbasis, vlnoi[0].val ) + else: z = 0.0 + return HeightScale( z, iScale[0].val , Offset[0].val, Invert[0].val ) + +###---------------------------------------------------------------------- +##----------------------------------- +# Filter functions: + +##----------------------------------- +# Filter: Clamp height +def Clamp_Max( height, max ): + if ( height > max ): height = max + return height +def Clamp_Min( height, min ): + if ( height < min ): height = min + return height + +##----------------------------------- +# Filters: terrace / posterise / peaked / bias: +def Def_Filter((x,y,z), input, numb, type ): + if type == 0: + s = ( sin( input*numb*phi ) * ( 0.1/numb*phi ) ) + return ( input * (1.0-0.5) + s*0.5 ) * 2.0 + elif type == 1: + s = -abs( sin( input*(numb*0.5)*phi ) * ( 0.1/(numb*0.5)*phi ) ) + return ( input * (1.0-0.5) + s*0.5 ) * 2.0 + elif type == 2: + s = abs( sin( input*(numb*0.5)*phi ) * ( 0.1/(numb*0.5)*phi ) ) + return ( input * (1.0-0.5) + s*0.5 ) * 2.0 + elif type == 3: + numb = numb*0.5 + s = ( int( input*numb ) * 1.0/numb ) + return ( input * (1.0-0.5) + s*0.5 ) * 2.0 + elif type == 4: + numb = numb*0.5 + s = ( int( input*numb ) * 1.0/numb ) + return ( s ) * 2.0 + elif type == 5: + s = ( sin( input*(2*numb)*phi ) * ( 0.1/(2*numb)*phi ) ) + l = ( input * (1.0-0.5) + s*0.5 ) * 2.0 + p = ( ( l*numb*0.25 ) * ( l*numb*0.25 ) )**2 + return ( l * (1.0-0.5) + p*0.5 ) * 2.0 + elif type == 6: + return ( input*numb*0.25 )**4 + elif type == 7: + return 2.0-exp( 1.0-(input*numb/3.0) ) + elif type == 8: + return sin_bias( input*numb )*2.0 + elif type == 9: + return cos_bias( input*numb )*2.0 + elif type == 10: + return tri_bias( input*numb )*2.0 + elif type == 11: + return saw_bias( input*numb )*2.0 + elif type == 12: + return Clamp_Max( input, numb ) + else: + return input + +##----------------------------------- +# Filter: Edge falloff +def EdgeFalloff( (x,y,z), height, type ): + global Falloff, iScale, Offset + + x = x / Falloff[1].val + y = y / Falloff[2].val + + if Falloff[3].val != 0: + sealevel = (Min.val-Offset[2].val)*2.0/iScale[2].val + else: + sealevel = 0.0 + + falltypes = ( 0, sqrt(x*x+y*y), sqrt((x*x)**2+(y*y)**2), sqrt((x*x)**10+(y*y)**10), sqrt(y*y), sqrt(x*x), abs(x-y), abs(x+y), ((x*x)**10+(y*y)**10)**0.1, ((x*x)+(y*y)) ) + + dist = falltypes[ type ] + if Falloff[4].val != 0: + dist = 1.0 - dist + radius = 1.0 + height = height - sealevel + if( dist < radius ): + dist = dist / radius + dist = ( (dist) * (dist) * ( 3-2*(dist) ) ) + height = ( height - height * dist ) + sealevel + else: + height = sealevel + + if Falloff[3].val != 0: + height = Clamp_Min( height, sealevel ) + else: + height = Clamp_Min( height, Min.val ) + + return height + +##----------------------------------- +# Filter: Custom height filter: +def CustomFilter( x,y,z, h ): + global CustomFilt + try: + a = eval(CustomFilt[0].val) + b = eval(CustomFilt[1].val) + result = eval(CustomFilt[2].val) + return result + except: + return 0.0 + +#####-------------------------------------------------------------------------------------##### +####-------------------------------------------------------------------------------------#### +### Combine Functions: (get noise, Add effect, filter height and return result) ### +##-------------------------------------------------------------------------------------## + +def Combine_Functions( (i,j),(x,y,z) ): + global Effect_Ctrl, Blend_Effect, Filter_Mode, Def_Filter_Ctrl, Ipo_Filter_Ctrl, Filter_Order + global iScale, Offset, Invert, Min, Max, Falloff + + # get noise height: + height = Noise_Function(x,y,0.0) + + ### Filter On + if Filter_Mode.val !=0: + ### 0= Default Filter Order: Noise>Effect>Filter --------------------- + if Filter_Order.val ==0: + # mix noise with effect: + if Effect_Ctrl[0].val !=0: + height = Mix_Modes( (i,j),(x,y,z), height , Effects( (i,j),(x,y,z),height ), Effect_Ctrl[2].val, Effect_Ctrl[1].val ) + # edge fallof: + if Falloff[0].val !=0: + height = EdgeFalloff( (x,y,z), height, Falloff[0].val ) + #else: pass + + if Filter_Mode.val !=0: + # height Def_Filter (Terrace/peaked/bias): + if Filter_Mode.val ==1: + height = Def_Filter((x,y,z), height, Def_Filter_Ctrl[ 1 ].val, Def_Filter_Ctrl[ 0 ].val ) + + ## 'IPOCurve' height filter: + elif Filter_Mode.val ==2: + try: + height = selectedcurve.evaluate( 1 + ( height*Ipo_Filter_Ctrl[2].val/2 ) )*2.0/Ipo_Filter_Ctrl[3].val + except: + height = height + + ## Custom filter: + elif Filter_Mode.val ==3: + height = CustomFilter( x,y,z, height ) + + ### 1= Changed Filter Order: Noise>Filter>Effect --------------------- + if Filter_Order.val !=0: + # mix noise with effect: + if Effect_Ctrl[0].val !=0: + height = Mix_Modes( (i,j),(x,y,z), height , Effects( (i,j),(x,y,z),height ), Effect_Ctrl[2].val, Effect_Ctrl[1].val ) + # edge fallof: + if Falloff[0].val !=0: + height = EdgeFalloff( (x,y,z), height, Falloff[0].val ) + #else: pass + + ### Filter Off --------------------- + else: + # mix noise with effect: + if Effect_Ctrl[0].val !=0: + height = Mix_Modes( (i,j),(x,y,z), height , Effects( (i,j),(x,y,z),height ), Effect_Ctrl[2].val, Effect_Ctrl[1].val ) + # edge fallof: + if Falloff[0].val !=0: + height = EdgeFalloff( (x,y,z), height, Falloff[0].val ) + + # height scale: + height = HeightScale( height, 0.5*iScale[2].val , Offset[2].val, Invert[2].val ) + + # clamp height min. max.: + if Falloff[0].val !=1: + height = Clamp_Min( height, Min.val ) + height = Clamp_Max( height, Max.val ) + + # return height: + return height + + +#------------------------------------------------------------ +##------------------------------------------------------------ +### Render Noise to a Image('NAME') (you must create one first) +##------------------------------------------------------------ +#------------------------------------------------------------ + +def HeightFieldImage(): + global PreView, previewname + + iname = previewname.val + try: + pic = Image.Get( iname ) + except: + #print iname, ' No Image with this name' + PupMenu( 'No Image with this name' ) + return + res = pic.getMaxXY() + for i in xrange( res[0] ): + x = i - (res[0]) / 2.0 + x = (x*2.0) / (res[0]) + for j in xrange( res[1] ): + y = j - (res[1]) / 2.0 + y = (y*2.0) / (res[1]) + height = PreView[2].val + PreView[1].val * Combine_Functions( (i,j),(x,y,0) ) + if height > 1.0: height = 1.0 + if height < 0.0: height = 0.0 + pic.setPixelF( i, j, ( height,height,height, 1.0 ) ) + + +#------------------------------------------------------------ +##------------------------------------------------------------ +### Mesh +##------------------------------------------------------------ +#------------------------------------------------------------ + +#------------------------------------------------------------ +## Mesh: make new grid +###------------------------------------------------------------ + +def MakeGridMesh( RESOL=32, NAME='GridMesh', CURSORPOS=0, SCENE=None ): + # scene, object, mesh --------------------------------------- + if not SCENE: + SCENE = Blender.Scene.GetCurrent() + SCENE.objects.selected=[] + newme = Blender.Mesh.New( NAME ) + newob = SCENE.objects.new( newme, NAME ) + n = RESOL + # verts --------------------------------------- + v=[] + for i in xrange( n ): + x = i-(n-1)/2.0 + x = x*2.0/(n-1) + for j in xrange( n ): + y = j-(n-1)/2.0 + y = y*2.0/(n-1) + v.append( [ x, y, 0 ] ) + newme.verts.extend(v) + # faces --------------------------------------- + f=[] + for i in xrange( n-1 ): + for j in xrange( n-1 ): + f.append( [ i*n+j,\ + (i+1)*n+j,\ + (i+1)*n+j+1,\ + i*n+j+1 ] ) + + newme.faces.extend(f, smooth=True) + #--------------------------------------- + newme.calcNormals() + #--------------------------------------- + if CURSORPOS !=0: + newob.loc = Window.GetCursorPos() + newob.select(1) + +#------------------------------------------------------------ +## Mesh: Grid vert displace / update terrain +###------------------------------------------------------------ + +def displace( OB, ME, WORLD=0 ): + if WORLD == 1: + wx,wy,wz = OB.getLocation( 'worldspace' ) + elif WORLD ==2: + l = OB.getLocation( 'worldspace' ) + w = Window.GetCursorPos() + wx,wy,wz = l[0]-w[0], l[1]-w[1], l[2]-w[2] + else: + wx,wy,wz = 0,0,0 + + for v in ME.verts: + co = v.co + co[2] = Combine_Functions( (co[0]+wx,co[1]+wy),(co[0]+wx, co[1]+wy, 0.0+wz) ) + ME.update() + ME.calcNormals() + #OB.makeDisplayList() + + +#---------------------------------------------------------------------------------------------------- +##---------------------------------------------------------------------------------------------------- +###---------------------------------------------------------------------------------------------------- +####---------------------------------------------------------------------------------------------------- +###---------------------------------------------------------------------------------------------------- +## Do_it: +#-------------------------------------- + +#-------------------------------------- +def do_it(): + global PreView, actme, actob, WorldSpaceCo + if actme !=[]: + if print_time !=0: + t= sys.time() + Window.WaitCursor(1) + in_editmode = Window.EditMode() + if in_editmode: Window.EditMode(0) + if PreView[0].val != 0: + do_it_preview() + displace( actob[0], actme[0], WorldSpaceCo.val ) + Window.RedrawAll() + else: + displace( actob[0], actme[0], WorldSpaceCo.val ) + Window.RedrawAll() + if in_editmode: Window.EditMode(1) + Window.WaitCursor(0) + if print_time !=0: + print 'Generate Mesh: done in %.6f' % (sys.time()-t) + +#-------------------------------------- +def do_it_random(): + global PreView, actme, actob + if actme !=[]: + if print_time !=0: + t= sys.time() + Window.WaitCursor(1) + in_editmode = Window.EditMode() + if in_editmode: Window.EditMode(0) + randomiseNoise() + if PreView[0].val != 0: + do_it_preview() + displace( actob[0], actme[0], WorldSpaceCo.val ) + Window.RedrawAll() + else: + displace( actob[0], actme[0], WorldSpaceCo.val ) + Window.RedrawAll() + if in_editmode: Window.EditMode(1) + Window.WaitCursor(0) + if print_time !=0: + print 'Generate Mesh: done in %.6f' % (sys.time()-t) + +#-------------------------------------- +def do_it_preview(): + if print_time !=0: + t= sys.time() + HeightFieldImage() + Window.RedrawAll() + if print_time !=0: + print 'Generate Image: done in %.6f' % (sys.time()-t) + +###--------------------------------------------------------- +###--------------------------------------------------------- +## load and save: +#------------------------- + +def callback( filename ): + txtFile.val = filename + Register(drawgui, events, bevents) +def writeln(f,x): + f.write(str(x)) + f.write("\n") +def readint(f): + return int(f.readline()) +def readfloat(f): + return float(f.readline()) +def readstr(f): + s = (f.readline()) + return strip(s) + +#-------------------------------------------------- +# Save settings to .ant file +def SavePreset(FName): + global iScale, Offset, Invert, NSize, Sx, Sy, Lx, Ly + global NType, Basis, musgr, tBasismod, vlnoi, vlnoiTwo, voron, turbOne, turbTwo, marbleOne, marbleTwo, musgrTwo + global CustomFX, effect_image, Effect_Ctrl, Min, Max, Falloff, CustomFilt, Filter_Mode, Def_Filter_Ctrl, Ipo_Filter_Ctrl, Filter_Order + global RandMod, RSeed, rand_H, rand_S, rand_L, rand_I, filemessage, fileinfo + + try: + f = open(FName,'w') + writeln(f,CurVersion) + except: + filemessage = "Unable to save file." + return + + writeln(f,fileinfo) + writeln(f,iScale[0].val) + writeln(f,iScale[1].val) + writeln(f,iScale[2].val) + writeln(f,Offset[0].val) + writeln(f,Offset[1].val) + writeln(f,Offset[2].val) + writeln(f,Invert[0].val) + writeln(f,Invert[1].val) + writeln(f,Invert[2].val) + writeln(f,NSize[0].val) + writeln(f,NSize[1].val) + writeln(f,Sx[0].val) + writeln(f,Sx[1].val) + writeln(f,Sy[0].val) + writeln(f,Sy[1].val) + writeln(f,Lx[0].val) + writeln(f,Lx[1].val) + writeln(f,Ly[0].val) + writeln(f,Ly[1].val) + writeln(f,NType.val) + writeln(f,Basis[0].val) + writeln(f,Basis[1].val) + writeln(f,musgr[0].val) + writeln(f,musgr[1].val) + writeln(f,musgr[2].val) + writeln(f,musgr[3].val) + writeln(f,musgr[4].val) + writeln(f,musgr[5].val) + writeln(f,tBasismod.val) + writeln(f,vlnoi[0].val) + writeln(f,vlnoi[1].val) + writeln(f,vlnoiTwo[0].val) + writeln(f,vlnoiTwo[1].val) + writeln(f,voron[0].val) + writeln(f,voron[1].val) + writeln(f,turbOne[0].val) + writeln(f,turbOne[1].val) + writeln(f,turbOne[2].val) + writeln(f,turbOne[3].val) + writeln(f,turbTwo[0].val) + writeln(f,turbTwo[1].val) + writeln(f,turbTwo[2].val) + writeln(f,turbTwo[3].val) + writeln(f,marbleOne[0].val) + writeln(f,marbleOne[1].val) + writeln(f,marbleOne[2].val) + writeln(f,marbleOne[3].val) + writeln(f,marbleOne[4].val) + writeln(f,marbleOne[5].val) + writeln(f,marbleTwo[0].val) + writeln(f,marbleTwo[1].val) + writeln(f,marbleTwo[2].val) + writeln(f,marbleTwo[3].val) + writeln(f,marbleTwo[4].val) + writeln(f,marbleTwo[5].val) + writeln(f,musgrTwo[0].val) + writeln(f,musgrTwo[1].val) + writeln(f,musgrTwo[2].val) + writeln(f,musgrTwo[3].val) + writeln(f,musgrTwo[4].val) + writeln(f,effect_image) + writeln(f,Effect_Ctrl[0].val) + writeln(f,Effect_Ctrl[1].val) + writeln(f,Effect_Ctrl[2].val) + writeln(f,Effect_Ctrl[3].val) + writeln(f,Effect_Ctrl[4].val) + writeln(f,Effect_Ctrl[5].val) + writeln(f,Effect_Ctrl[6].val) + writeln(f,Effect_Ctrl[7].val) + writeln(f,Effect_Ctrl[8].val) + writeln(f,CustomFX[0].val) + writeln(f,CustomFX[1].val) + writeln(f,CustomFX[2].val) + writeln(f,Min.val) + writeln(f,Max.val) + writeln(f,Falloff[0].val) + writeln(f,Falloff[1].val) + writeln(f,Falloff[2].val) + writeln(f,Falloff[3].val) + writeln(f,Falloff[4].val) + writeln(f,Filter_Mode.val) + writeln(f,Filter_Order.val) + writeln(f,CustomFilt[0].val) + writeln(f,CustomFilt[1].val) + writeln(f,CustomFilt[2].val) + writeln(f,Def_Filter_Ctrl[0].val) + writeln(f,Def_Filter_Ctrl[1].val) + writeln(f,Ipo_Filter_Ctrl[0].val) + writeln(f,Ipo_Filter_Ctrl[1].val) + writeln(f,Ipo_Filter_Ctrl[2].val) + writeln(f,Ipo_Filter_Ctrl[3].val) + writeln(f,RandMod.val) + writeln(f,RSeed.val) + writeln(f,rand_H.val) + writeln(f,rand_I.val) + writeln(f,rand_S.val) + writeln(f,rand_L.val) + filemessage = 'Settings saved to file.' + f.close() + +#-------------------------------------------------- +# load settings from .ant file +def LoadPreset(FName): + global iScale, Offset, Invert, NSize, Sx, Sy, Lx, Ly + global NType, Basis, musgr, tBasismod, vlnoi, vlnoiTwo, voron, turbOne, turbTwo, marbleOne, marbleTwo, musgrTwo + global CustomFX, effect_image, Effect_Ctrl, Min, Max, Falloff, CustomFilt, Filter_Mode, Def_Filter_Ctrl, Ipo_Filter_Ctrl, Filter_Order + global RandMod, RSeed, rand_H, rand_S, rand_L, rand_I, filemessage, fileinfo + + try: + f = open(FName,'r') + FVersion = readstr(f) + except: + filemessage = "Unable to open file." + return + + fileinfo = readstr(f) + iScale[0].val = readfloat(f) + iScale[1].val = readfloat(f) + iScale[2].val = readfloat(f) + Offset[0].val = readfloat(f) + Offset[1].val = readfloat(f) + Offset[2].val = readfloat(f) + Invert[0].val = readint(f) + Invert[1].val = readint(f) + Invert[2].val = readint(f) + NSize[0].val = readfloat(f) + NSize[1].val = readfloat(f) + Sx[0].val = readfloat(f) + Sx[1].val = readfloat(f) + Sy[0].val = readfloat(f) + Sy[1].val = readfloat(f) + Lx[0].val = readfloat(f) + Lx[1].val = readfloat(f) + Ly[0].val = readfloat(f) + Ly[1].val = readfloat(f) + NType.val = readint(f) + Basis[0].val = readint(f) + Basis[1].val = readint(f) + musgr[0].val = readfloat(f) + musgr[1].val = readfloat(f) + musgr[2].val = readint(f) + musgr[3].val = readfloat(f) + musgr[4].val = readfloat(f) + musgr[5].val = readfloat(f) + tBasismod.val = readint(f) + vlnoi[0].val = readfloat(f) + vlnoi[1].val = readint(f) + vlnoiTwo[0].val = readfloat(f) + vlnoiTwo[1].val = readint(f) + voron[0].val = readint(f) + voron[1].val = readfloat(f) + turbOne[0].val = readint(f) + turbOne[1].val = readint(f) + turbOne[2].val = readfloat(f) + turbOne[3].val = readfloat(f) + turbTwo[0].val = readint(f) + turbTwo[1].val = readint(f) + turbTwo[2].val = readfloat(f) + turbTwo[3].val = readfloat(f) + marbleOne[0].val = readint(f) + marbleOne[1].val = readint(f) + marbleOne[2].val = readfloat(f) + marbleOne[3].val = readint(f) + marbleOne[4].val = readint(f) + marbleOne[5].val = readfloat(f) + marbleTwo[0].val = readint(f) + marbleTwo[1].val = readint(f) + marbleTwo[2].val = readfloat(f) + marbleTwo[3].val = readint(f) + marbleTwo[4].val = readint(f) + marbleTwo[5].val = readfloat(f) + musgrTwo[0].val = readfloat(f) + musgrTwo[1].val = readfloat(f) + musgrTwo[2].val = readint(f) + musgrTwo[3].val = readfloat(f) + musgrTwo[4].val = readfloat(f) + effect_image = readstr(f) + Effect_Ctrl[0].val = readint(f) + Effect_Ctrl[1].val = readint(f) + Effect_Ctrl[2].val = readfloat(f) + Effect_Ctrl[3].val = readint(f) + Effect_Ctrl[4].val = readfloat(f) + Effect_Ctrl[5].val = readint(f) + Effect_Ctrl[6].val = readfloat(f) + Effect_Ctrl[7].val = readfloat(f) + Effect_Ctrl[8].val = readfloat(f) + CustomFX[0].val = readstr(f) + CustomFX[1].val = readstr(f) + CustomFX[2].val = readstr(f) + Min.val = readfloat(f) + Max.val = readfloat(f) + Falloff[0].val = readint(f) + Falloff[1].val = readfloat(f) + Falloff[2].val = readfloat(f) + Falloff[3].val = readint(f) + Falloff[4].val = readint(f) + Filter_Mode.val = readint(f) + Filter_Order.val = readint(f) + CustomFilt[0].val = readstr(f) + CustomFilt[1].val = readstr(f) + CustomFilt[2].val = readstr(f) + Def_Filter_Ctrl[0].val = readint(f) + Def_Filter_Ctrl[1].val = readfloat(f) + Ipo_Filter_Ctrl[0].val = readstr(f) + Ipo_Filter_Ctrl[1].val = readint(f) + Ipo_Filter_Ctrl[2].val = readfloat(f) + Ipo_Filter_Ctrl[3].val = readfloat(f) + RandMod.val = readint(f) + RSeed.val = readint(f) + rand_H.val = readint(f) + rand_I.val = readint(f) + rand_S.val = readint(f) + rand_L.val = readint(f) + filemessage = 'Settings loaded from file.' + f.close() + +##--------------------------------------------------------------------------- +# Register: + +Register( drawgui, events, bevents ) +###-------------------------------------------------------------------------- + \ No newline at end of file diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py new file mode 100644 index 00000000000..b64e7d8e0c4 --- /dev/null +++ b/release/ui/space_sequencer.py @@ -0,0 +1,559 @@ + +import bpy + +def act_strip(context): + try: return context.scene.sequence_editor.active_strip + except: return None + +# Header +class SEQUENCER_HT_header(bpy.types.Header): + __space_type__ = "SEQUENCE_EDITOR" + __idname__ = "SEQUENCE_HT_header" + + def draw(self, context): + + st = context.space_data + layout = self.layout + + layout.template_header() + + if context.area.show_menus: + row = layout.row() + row.itemM("SEQUENCER_MT_view") + + row.itemR(st, "display_mode") + + layout.itemS() + + if st.display_mode == 'SEQUENCER': + row.itemM("SEQUENCER_MT_select") + row.itemM("SEQUENCER_MT_marker") + row.itemM("SEQUENCER_MT_add") + row.itemM("SEQUENCER_MT_strip") + layout.itemS() + row.itemO("SEQUENCER_OT_reload") + else: + row.itemR(st, "display_channel") # text="Chan" + +class SEQUENCER_MT_view(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "View (TODO)" + + def draw(self, context): + layout = self.layout + st = context.space_data + + layout.column() + + """ + uiBlock *block= uiBeginBlock(C, ar, "seq_viewmenu", UI_EMBOSSP); + short yco= 0, menuwidth=120; + + if (sseq->mainb == SEQ_DRAW_SEQUENCE) { + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, + "Play Back Animation " + "in all Sequence Areas|Alt A", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + } + else { + uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, + "Grease Pencil...", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); + uiDefMenuSep(block); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, + "Play Back Animation " + "in this window|Alt A", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + } + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, + "Play Back Animation in all " + "3D Views and Sequence Areas|Alt Shift A", + 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + + """ + layout.itemS() + layout.itemO("SEQUENCER_OT_view_all") + layout.itemO("SEQUENCER_OT_view_selected") + layout.itemS() + """ + + + /* Lock Time */ + uiDefIconTextBut(block, BUTM, 1, (v2d->flag & V2D_VIEWSYNC_SCREEN_TIME)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, + "Lock Time to Other Windows|", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); + + /* Draw time or frames.*/ + uiDefMenuSep(block); + """ + + layout.itemR(st, "draw_frames") + + """ + if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0,0, ""); + else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); + + """ + +class SEQUENCER_MT_select(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "Select" + + def draw(self, context): + layout = self.layout + st = context.space_data + + layout.column() + layout.item_enumO("SEQUENCER_OT_select_active_side", "side", 'LEFT', text="Strips to the Left") + layout.item_enumO("SEQUENCER_OT_select_active_side", "side", 'RIGHT', text="Strips to the Right") + layout.itemS() + layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'BOTH', text="Surrounding Handles") + layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'LEFT', text="Left Handle") + layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'RIGHT', text="Right Handle") + layout.itemS() + layout.itemO("SEQUENCER_OT_select_linked") + layout.itemO("SEQUENCER_OT_select_all_toggle") + layout.itemO("SEQUENCER_OT_select_invert") + +class SEQUENCER_MT_marker(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "Marker (TODO)" + + def draw(self, context): + layout = self.layout + st = context.space_data + + layout.column() + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Add Marker|Ctrl Alt M") + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Duplicate Marker|Ctrl Shift D") + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Delete Marker|Shift X") + layout.itemS() + layout.itemO("SEQUENCER_OT_sound_strip_add", text="(Re)Name Marker|Ctrl M") + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Grab/Move Marker|Ctrl G") + layout.itemS() + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Transform Markers") # toggle, will be rna - (sseq->flag & SEQ_MARKER_TRANS) + +class SEQUENCER_MT_add(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "Add" + + def draw(self, context): + layout = self.layout + st = context.space_data + + layout.column() + layout.itemO("SEQUENCER_OT_scene_strip_add", text="Scene") + layout.itemO("SEQUENCER_OT_movie_strip_add", text="Movie") + layout.item_booleanO("SEQUENCER_OT_movie_strip_add", "sound", True, text="Movie & Sound") # FFMPEG ONLY + layout.itemO("SEQUENCER_OT_image_strip_add", text="Image") + layout.itemO("SEQUENCER_OT_sound_strip_add", text="Sound (Ram)") + layout.item_booleanO("SEQUENCER_OT_sound_strip_add", "hd", True, text="Sound (Streaming)") # FFMPEG ONLY + + layout.itemM("SEQUENCER_MT_add_effect") + + +class SEQUENCER_MT_add_effect(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "Effect Strip..." + + def draw(self, context): + layout = self.layout + st = context.space_data + + self.layout.column() + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ADD') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'SUBTRACT') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ALPHA_OVER') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ALPHA_UNDER') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'GAMMA_CROSS') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'MULTIPLY') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'OVER_DROP') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'PLUGIN') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'WIPE') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'GLOW') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'TRANSFORM') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'COLOR') + self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'SPEED') + +class SEQUENCER_MT_strip(bpy.types.Menu): + __space_type__ = "SEQUENCE_EDITOR" + __label__ = "Strip" + + def draw(self, context): + layout = self.layout + st = context.space_data + + layout.operator_context = 'INVOKE_REGION_WIN' + + layout.column() + layout.item_enumO("TFM_OT_transform", "mode", 'TRANSLATION', text="Grab/Move") + layout.item_enumO("TFM_OT_transform", "mode", 'TIME_EXTEND', text="Grab/Extend from frame") + # uiItemO(layout, NULL, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator + layout.itemS() + + layout.item_enumO("SEQUENCER_OT_cut", "type", 'HARD', text="Cut (hard) at frame") + layout.item_enumO("SEQUENCER_OT_cut", "type", 'SOFT', text="Cut (soft) at frame") + layout.itemO("SEQUENCER_OT_images_separate") + layout.itemS() + + layout.itemO("SEQUENCER_OT_duplicate_add") + layout.itemO("SEQUENCER_OT_delete") + + strip = act_strip(context) + + if strip: + stype = strip.type + + if stype=='EFFECT': + layout.itemS() + layout.itemO("SEQUENCER_OT_effect_change") + layout.itemO("SEQUENCER_OT_effect_reassign_inputs") + elif stype=='IMAGE': + layout.itemS() + layout.itemO("SEQUENCER_OT_image_change") + elif stype=='SCENE': + layout.itemS() + layout.itemO("SEQUENCER_OT_scene_change", text="Change Scene") + elif stype=='MOVIE': + layout.itemS() + layout.itemO("SEQUENCER_OT_movie_change") + + layout.itemS() + + layout.itemO("SEQUENCER_OT_meta_make") + layout.itemO("SEQUENCER_OT_meta_separate") + + #if (ed && (ed->metastack.first || (ed->act_seq && ed->act_seq->type == SEQ_META))) { + # uiItemS(layout); + # uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_toggle"); + #} + + layout.itemS() + layout.itemO("SEQUENCER_OT_reload") + layout.itemS() + layout.itemO("SEQUENCER_OT_lock") + layout.itemO("SEQUENCER_OT_unlock") + layout.itemO("SEQUENCER_OT_mute") + layout.itemO("SEQUENCER_OT_unmute") + + layout.item_enumO("SEQUENCER_OT_mute", property="type", value='UNSELECTED', text="Mute Deselected Strips") + + layout.itemO("SEQUENCER_OT_snap") + +# Panels +class SequencerButtonsPanel(bpy.types.Panel): + __space_type__ = "SEQUENCE_EDITOR" + __region_type__ = "UI" + + def poll(self, context): + return context.space_data.display_mode == 'SEQUENCER' and act_strip(context) != None + +class SequencerButtonsPanel_Output(bpy.types.Panel): + __space_type__ = "SEQUENCE_EDITOR" + __region_type__ = "UI" + + def poll(self, context): + return context.space_data.display_mode != 'SEQUENCER' + +class SEQUENCER_PT_edit(SequencerButtonsPanel): + __label__ = "Edit Strip" + __idname__ = "SEQUENCER_PT_edit" + + def draw(self, context): + layout = self.layout + + strip = act_strip(context) + + layout.itemR(strip, "name") + + layout.itemR(strip, "type") + + layout.itemR(strip, "blend_mode") + + layout.itemR(strip, "blend_opacity", text="Opacity", slider=True) + + split = layout.split() + + col = split.column() + col.itemR(strip, "mute") + col.itemR(strip, "lock") + col.itemR(strip, "frame_locked") + + col = split.column() + col.itemR(strip, "channel") + col.itemR(strip, "start_frame") + col.itemR(strip, "length") + + split = layout.split() + + col = split.column() + col.itemR(strip, "start_offset") + col.itemR(strip, "start_still") + + col = split.column() + col.itemR(strip, "end_offset") + col.itemR(strip, "end_still") + +class SEQUENCER_PT_effect(SequencerButtonsPanel): + __label__ = "Effect Strip" + __idname__ = "SEQUENCER_PT_effect" + + def poll(self, context): + if context.space_data.display_mode != 'SEQUENCER': + return False + + strip = act_strip(context) + if not strip: + return False + + return strip.type in ('COLOR', 'WIPE', 'GLOW', 'SPEED', 'TRANSFORM') + + def draw(self, context): + layout = self.layout + + strip = act_strip(context) + + if strip.type == 'COLOR': + layout.itemR(strip, "color") + + elif strip.type == 'WIPE': + row = layout.row() + row.itemL(text="Transition Type:") + row.itemL(text="Direction:") + + row = layout.row() + row.itemR(strip, "transition_type", text="") + row.itemR(strip, "direction", text="") + + row = layout.row() + row.itemR(strip, "blur_width") + if strip.transition_type in ('SINGLE', 'DOUBLE'): + row.itemR(strip, "angle") + + elif strip.type == 'GLOW': + flow = layout.column_flow() + flow.itemR(strip, "threshold") + flow.itemR(strip, "clamp") + flow.itemR(strip, "boost_factor") + flow.itemR(strip, "blur_distance") + + row = layout.row() + row.itemR(strip, "quality", slider=True) + row.itemR(strip, "only_boost") + + elif strip.type == 'SPEED': + layout.itemR(strip, "global_speed") + + flow = layout.column_flow() + flow.itemR(strip, "curve_velocity") + flow.itemR(strip, "curve_compress_y") + flow.itemR(strip, "frame_blending") + + elif strip.type == 'TRANSFORM': + row = layout.row() + row.itemL(text="Interpolation:") + row.itemL(text="Translation Unit:") + + row = layout.row() + row.itemR(strip, "interpolation", text="") + row.itemR(strip, "translation_unit", text="") + + split = layout.split() + + col = split.column() + sub = col.column(align=True) + sub.itemL(text="Position X:") + sub.itemR(strip, "translate_start_x", text="Start") + sub.itemR(strip, "translate_end_x", text="End") + + sub = col.column(align=True) + sub.itemL(text="Scale X:") + sub.itemR(strip, "scale_start_x", text="Start") + sub.itemR(strip, "scale_end_x", text="End") + + sub = col.column(align=True) + sub.itemL(text="Rotation:") + sub.itemR(strip, "rotation_start", text="Start") + sub.itemR(strip, "rotation_end", text="End") + + col = split.column() + sub = col.column(align=True) + sub.itemL(text="Position Y:") + sub.itemR(strip, "translate_start_y", text="Start") + sub.itemR(strip, "translate_end_y", text="End") + + sub = col.column(align=True) + sub.itemL(text="Scale Y:") + sub.itemR(strip, "scale_start_y", text="Start") + sub.itemR(strip, "scale_end_y", text="End") + +class SEQUENCER_PT_input(SequencerButtonsPanel): + __label__ = "Strip Input" + __idname__ = "SEQUENCER_PT_input" + + def poll(self, context): + if context.space_data.display_mode != 'SEQUENCER': + return False + + strip = act_strip(context) + if not strip: + return False + + return strip.type in ('MOVIE', 'IMAGE', 'SOUND') + + def draw(self, context): + layout = self.layout + + strip = act_strip(context) + + split = layout.split(percentage=0.3) + sub = split.column() + sub.itemL(text="Directory:") + sub = split.column() + sub.itemR(strip, "directory", text="") + + # Current element for the filename + split = layout.split(percentage=0.3) + sub = split.column() + sub.itemL(text="File Name:") + sub = split.column() + + elem = strip.getStripElem(context.scene.current_frame) + if elem: + sub.itemR(elem, "filename", text="") # strip.elements[0] could be a fallback + + layout.itemR(strip, "use_translation") + if strip.transform: + flow = layout.column_flow() + flow.active = strip.use_translation + flow.itemR(strip.transform, "offset_x") + flow.itemR(strip.transform, "offset_y") + + + layout.itemR(strip, "use_crop") + if strip.crop: + flow = layout.column_flow() + flow.active = strip.use_crop + flow.itemR(strip.crop, "top") + flow.itemR(strip.crop, "left") + flow.itemR(strip.crop, "bottom") + flow.itemR(strip.crop, "right") + + layout.itemR(strip, "animation_start_offset") + layout.itemR(strip, "animation_end_offset") + + +class SEQUENCER_PT_filter(SequencerButtonsPanel): + __label__ = "Filter" + __idname__ = "SEQUENCER_PT_filter" + + def poll(self, context): + if context.space_data.display_mode != 'SEQUENCER': + return False + + strip = act_strip(context) + if not strip: + return False + + return strip.type in ('MOVIE', 'IMAGE', 'SCENE', 'META') + + def draw(self, context): + layout = self.layout + + strip = act_strip(context) + + split = layout.split() + + col = split.column() + col.itemR(strip, "premultiply") + col.itemR(strip, "convert_float") + col.itemR(strip, "de_interlace") + col.itemR(strip, "multiply_colors") + col.itemR(strip, "strobe") + + col = split.column() + col.itemL(text="Flip:") + col.itemR(strip, "flip_x", text="X") + col.itemR(strip, "flip_y", text="Y") + col.itemR(strip, "reverse_frames", text="Backwards") + + layout.itemR(strip, "use_color_balance") + if strip.color_balance: # TODO - need to add this somehow + row = layout.row() + row.active = strip.use_color_balance + col = row.column() + col.itemR(strip.color_balance, "lift") + col.itemR(strip.color_balance, "inverse_lift") + col = row.column() + col.itemR(strip.color_balance, "gamma") + col.itemR(strip.color_balance, "inverse_gamma") + col = row.column() + col.itemR(strip.color_balance, "gain") + col.itemR(strip.color_balance, "inverse_gain") + + +class SEQUENCER_PT_proxy(SequencerButtonsPanel): + __label__ = "Proxy" + __idname__ = "SEQUENCER_PT_proxy" + + def poll(self, context): + if context.space_data.display_mode != 'SEQUENCER': + return False + + strip = act_strip(context) + if not strip: + return False + + return strip.type in ('MOVIE', 'IMAGE', 'SCENE', 'META') + + def draw_header(self, context): + strip = act_strip(context) + + layout = self.layout + + layout.itemR(strip, "use_proxy", text="") + + def draw(self, context): + strip = act_strip(context) + + layout = self.layout + + flow = layout.column_flow() + flow.itemR(strip, "proxy_custom_directory") + if strip.proxy: # TODO - need to add this somehow + flow.itemR(strip.proxy, "directory") + flow.itemR(strip.proxy, "file") + + +class SEQUENCER_PT_view(SequencerButtonsPanel_Output): + __label__ = "View Settings" + __idname__ = "SEQUENCER_PT_view" + + def draw(self, context): + st = context.space_data + + layout = self.layout + + flow = layout.column_flow() + flow.itemR(st, "draw_overexposed") # text="Zebra" + flow.itemR(st, "draw_safe_margin") + + +bpy.types.register(SEQUENCER_HT_header) # header/menu classes +bpy.types.register(SEQUENCER_MT_view) +bpy.types.register(SEQUENCER_MT_select) +bpy.types.register(SEQUENCER_MT_marker) +bpy.types.register(SEQUENCER_MT_add) +bpy.types.register(SEQUENCER_MT_add_effect) +bpy.types.register(SEQUENCER_MT_strip) + +bpy.types.register(SEQUENCER_PT_edit) # sequencer panels +bpy.types.register(SEQUENCER_PT_effect) +bpy.types.register(SEQUENCER_PT_input) +bpy.types.register(SEQUENCER_PT_filter) +bpy.types.register(SEQUENCER_PT_proxy) + +bpy.types.register(SEQUENCER_PT_view) # view panels + diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp b/source/gameengine/Converter/BL_ModifierDeformer.cpp new file mode 100644 index 00000000000..eb27820c92f --- /dev/null +++ b/source/gameengine/Converter/BL_ModifierDeformer.cpp @@ -0,0 +1,183 @@ +/** + * $Id: BL_ModifierDeformer.cpp 20741 2009-06-08 20:08:19Z blendix $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif //WIN32 + +#include "MEM_guardedalloc.h" +#include "BL_ModifierDeformer.h" +#include "GEN_Map.h" +#include "STR_HashedString.h" +#include "RAS_IPolygonMaterial.h" +#include "BL_SkinMeshObject.h" +#include "PHY_IGraphicController.h" + +//#include "BL_ArmatureController.h" +#include "DNA_armature_types.h" +#include "DNA_action_types.h" +#include "DNA_key_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_ipo_types.h" +#include "DNA_curve_types.h" +#include "DNA_modifier_types.h" +#include "DNA_scene_types.h" +#include "BKE_armature.h" +#include "BKE_action.h" +#include "BKE_key.h" +#include "BKE_ipo.h" +#include "MT_Point3.h" + +extern "C"{ + #include "BKE_customdata.h" + #include "BKE_DerivedMesh.h" + #include "BKE_lattice.h" + #include "BKE_modifier.h" +} + #include "BKE_utildefines.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" + +#define __NLA_DEFNORMALS +//#undef __NLA_DEFNORMALS + + +BL_ModifierDeformer::~BL_ModifierDeformer() +{ + if (m_dm) { + // deformedOnly is used as a user counter + if (--m_dm->deformedOnly == 0) { + m_dm->needsFree = 1; + m_dm->release(m_dm); + } + } +}; + +RAS_Deformer *BL_ModifierDeformer::GetReplica() +{ + BL_ModifierDeformer *result; + + result = new BL_ModifierDeformer(*this); + result->ProcessReplica(); + return result; +} + +void BL_ModifierDeformer::ProcessReplica() +{ + /* Note! - This is not inherited from PyObjectPlus */ + BL_ShapeDeformer::ProcessReplica(); + if (m_dm) + // by default try to reuse mesh, deformedOnly is used as a user count + m_dm->deformedOnly++; + // this will force an update and if the mesh cannot be reused, a new one will be created + m_lastModifierUpdate = -1; +} + +bool BL_ModifierDeformer::HasCompatibleDeformer(Object *ob) +{ + if (!ob->modifiers.first) + return false; + // soft body cannot use mesh modifiers + if ((ob->gameflag & OB_SOFT_BODY) != 0) + return false; + ModifierData* md; + for (md = (ModifierData*)ob->modifiers.first; md; md = (ModifierData*)md->next) { + if (modifier_dependsOnTime(md)) + continue; + if (!(md->mode & eModifierMode_Realtime)) + continue; + return true; + } + return false; +} + +bool BL_ModifierDeformer::Update(void) +{ + bool bShapeUpdate = BL_ShapeDeformer::Update(); + + if (bShapeUpdate || m_lastModifierUpdate != m_gameobj->GetLastFrame()) { + // static derived mesh are not updated + if (m_dm == NULL || m_bDynamic) { + /* execute the modifiers */ + Object* blendobj = m_gameobj->GetBlendObject(); + /* hack: the modifiers require that the mesh is attached to the object + It may not be the case here because of replace mesh actuator */ + Mesh *oldmesh = (Mesh*)blendobj->data; + blendobj->data = m_bmesh; + /* execute the modifiers */ + DerivedMesh *dm = mesh_create_derived_no_virtual(m_scene, blendobj, m_transverts, CD_MASK_MESH); + /* restore object data */ + blendobj->data = oldmesh; + /* free the current derived mesh and replace, (dm should never be NULL) */ + if (m_dm != NULL) { + // HACK! use deformedOnly as a user counter + if (--m_dm->deformedOnly == 0) { + m_dm->needsFree = 1; + m_dm->release(m_dm); + } + } + m_dm = dm; + // get rid of temporary data + m_dm->needsFree = 0; + m_dm->release(m_dm); + // HACK! use deformedOnly as a user counter + m_dm->deformedOnly = 1; + /* update the graphic controller */ + PHY_IGraphicController *ctrl = m_gameobj->GetGraphicController(); + if (ctrl) { + float min_r[3], max_r[3]; + INIT_MINMAX(min_r, max_r); + m_dm->getMinMax(m_dm, min_r, max_r); + ctrl->setLocalAabb(min_r, max_r); + } + } + m_lastModifierUpdate=m_gameobj->GetLastFrame(); + bShapeUpdate = true; + } + return bShapeUpdate; +} + +bool BL_ModifierDeformer::Apply(RAS_IPolyMaterial *mat) +{ + if (!Update()) + return false; + + // drawing is based on derived mesh, must set it in the mesh slots + int nmat = m_pMeshObject->NumMaterials(); + for (int imat=0; imatGetMeshMaterial(imat); + RAS_MeshSlot **slot = mmat->m_slots[(void*)m_gameobj]; + if(!slot || !*slot) + continue; + (*slot)->m_pDerivedMesh = m_dm; + } + return true; +} diff --git a/source/gameengine/Converter/BL_ModifierDeformer.h b/source/gameengine/Converter/BL_ModifierDeformer.h new file mode 100644 index 00000000000..74de54152eb --- /dev/null +++ b/source/gameengine/Converter/BL_ModifierDeformer.h @@ -0,0 +1,107 @@ +/** + * $Id: BL_ModifierDeformer.h 20741 2009-06-08 20:08:19Z blendix $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BL_MODIFIERDEFORMER +#define BL_MODIFIERDEFORMER + +#ifdef WIN32 +#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning +#endif //WIN32 + +#include "BL_ShapeDeformer.h" +#include "BL_DeformableGameObject.h" +#include + +struct DerivedMesh; +struct Object; + +class BL_ModifierDeformer : public BL_ShapeDeformer +{ +public: + static bool HasCompatibleDeformer(Object *ob); + + + BL_ModifierDeformer(BL_DeformableGameObject *gameobj, + Scene *scene, + Object *bmeshobj, + BL_SkinMeshObject *mesh) + : + BL_ShapeDeformer(gameobj,bmeshobj, mesh), + m_lastModifierUpdate(-1), + m_scene(scene), + m_dm(NULL) + { + m_recalcNormal = false; + }; + + /* this second constructor is needed for making a mesh deformable on the fly. */ + BL_ModifierDeformer(BL_DeformableGameObject *gameobj, + struct Scene *scene, + struct Object *bmeshobj_old, + struct Object *bmeshobj_new, + class BL_SkinMeshObject *mesh, + bool release_object, + BL_ArmatureObject* arma = NULL) + : + BL_ShapeDeformer(gameobj, bmeshobj_old, bmeshobj_new, mesh, release_object, false, arma), + m_lastModifierUpdate(-1), + m_scene(scene), + m_dm(NULL) + { + }; + + virtual void ProcessReplica(); + virtual RAS_Deformer *GetReplica(); + virtual ~BL_ModifierDeformer(); + virtual bool UseVertexArray() + { + return false; + } + + bool Update (void); + bool Apply(RAS_IPolyMaterial *mat); + void ForceUpdate() + { + m_lastModifierUpdate = -1.0; + }; + virtual struct DerivedMesh* GetFinalMesh() + { + return m_dm; + } + + +protected: + double m_lastModifierUpdate; + Scene *m_scene; + DerivedMesh *m_dm; + +}; + +#endif + diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp new file mode 100644 index 00000000000..cc8021fc2e4 --- /dev/null +++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp @@ -0,0 +1,382 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: none of this file. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + * Readonly sequence wrapper for lookups on logic bricks + */ + + +#include "KX_PythonSeq.h" +#include "KX_GameObject.h" +#include "SCA_ISensor.h" +#include "SCA_IController.h" +#include "SCA_IActuator.h" + + +PyObject *KX_PythonSeq_CreatePyObject( PyObject *base, short type ) +{ + KX_PythonSeq *seq = PyObject_NEW( KX_PythonSeq, &KX_PythonSeq_Type); + seq->base = base; + Py_INCREF(base); /* so we can always access to check if its valid */ + seq->type = type; + seq->iter = -1; /* init */ + return (PyObject *)seq; + } + + static void KX_PythonSeq_dealloc( KX_PythonSeq * self ) +{ + Py_DECREF(self->base); + PyObject_DEL( self ); +} + +static Py_ssize_t KX_PythonSeq_len( PyObject * self ) +{ + PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); + + if(self_plus==NULL) { + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return -1; + } + + switch(((KX_PythonSeq *)self)->type) { + case KX_PYGENSEQ_CONT_TYPE_SENSORS: + return ((SCA_IController *)self_plus)->GetLinkedSensors().size(); + case KX_PYGENSEQ_CONT_TYPE_ACTUATORS: + return ((SCA_IController *)self_plus)->GetLinkedActuators().size(); + case KX_PYGENSEQ_OB_TYPE_SENSORS: + return ((KX_GameObject *)self_plus)->GetSensors().size(); + case KX_PYGENSEQ_OB_TYPE_CONTROLLERS: + return ((KX_GameObject *)self_plus)->GetControllers().size(); + case KX_PYGENSEQ_OB_TYPE_ACTUATORS: + return ((KX_GameObject *)self_plus)->GetActuators().size(); + default: + /* Should never happen */ + PyErr_SetString(PyExc_SystemError, "invalid type, internal error"); + return -1; + } +} + +static PyObject *KX_PythonSeq_getIndex(PyObject* self, int index) +{ + PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); + + if(self_plus==NULL) { + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return NULL; + } + + switch(((KX_PythonSeq *)self)->type) { + case KX_PYGENSEQ_CONT_TYPE_SENSORS: + { + vector& linkedsensors = ((SCA_IController *)self_plus)->GetLinkedSensors(); + if(index<0) index += linkedsensors.size(); + if(index<0 || index>= linkedsensors.size()) { + PyErr_SetString(PyExc_IndexError, "seq[i]: index out of range"); + return NULL; + } + return linkedsensors[index]->GetProxy(); + } + case KX_PYGENSEQ_CONT_TYPE_ACTUATORS: + { + vector& linkedactuators = ((SCA_IController *)self_plus)->GetLinkedActuators(); + if(index<0) index += linkedactuators.size(); + if(index<0 || index>= linkedactuators.size()) { + PyErr_SetString(PyExc_IndexError, "seq[i]: index out of range"); + return NULL; + } + return linkedactuators[index]->GetProxy(); + } + case KX_PYGENSEQ_OB_TYPE_SENSORS: + { + SCA_SensorList& linkedsensors= ((KX_GameObject *)self_plus)->GetSensors(); + if(index<0) index += linkedsensors.size(); + if(index<0 || index>= linkedsensors.size()) { + PyErr_SetString(PyExc_IndexError, "seq[i]: index out of range"); + return NULL; + } + return linkedsensors[index]->GetProxy(); + } + case KX_PYGENSEQ_OB_TYPE_CONTROLLERS: + { + SCA_ControllerList& linkedcontrollers= ((KX_GameObject *)self_plus)->GetControllers(); + if(index<0) index += linkedcontrollers.size(); + if(index<0 || index>= linkedcontrollers.size()) { + PyErr_SetString(PyExc_IndexError, "seq[i]: index out of range"); + return NULL; + } + return linkedcontrollers[index]->GetProxy(); + } + case KX_PYGENSEQ_OB_TYPE_ACTUATORS: + { + SCA_ActuatorList& linkedactuators= ((KX_GameObject *)self_plus)->GetActuators(); + if(index<0) index += linkedactuators.size(); + if(index<0 || index>= linkedactuators.size()) { + PyErr_SetString(PyExc_IndexError, "seq[i]: index out of range"); + return NULL; + } + return linkedactuators[index]->GetProxy(); + } + } + + PyErr_SetString(PyExc_SystemError, "invalid sequence type, this is a bug"); + return NULL; +} + + +static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) +{ + PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); + char *name = NULL; + + if(self_plus==NULL) { + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return NULL; + } + + if (PyInt_Check(key)) { + return KX_PythonSeq_getIndex(self, PyInt_AS_LONG( key )); + } else if ( PyString_Check(key) ) { + name = PyString_AsString( key ); + } else { + PyErr_SetString( PyExc_TypeError, "expected a string or an index" ); + return NULL; + } + + switch(((KX_PythonSeq *)self)->type) { + case KX_PYGENSEQ_CONT_TYPE_SENSORS: + { + vector& linkedsensors = ((SCA_IController *)self_plus)->GetLinkedSensors(); + SCA_ISensor* sensor; + for (unsigned int index=0;indexGetName() == name) + return sensor->GetProxy(); + } + break; + } + case KX_PYGENSEQ_CONT_TYPE_ACTUATORS: + { + vector& linkedactuators = ((SCA_IController *)self_plus)->GetLinkedActuators(); + SCA_IActuator* actuator; + for (unsigned int index=0;indexGetName() == name) + return actuator->GetProxy(); + } + break; + } + case KX_PYGENSEQ_OB_TYPE_SENSORS: + { + SCA_SensorList& linkedsensors= ((KX_GameObject *)self_plus)->GetSensors(); + SCA_ISensor *sensor; + for (unsigned int index=0;indexGetName() == name) + return sensor->GetProxy(); + } + break; + } + case KX_PYGENSEQ_OB_TYPE_CONTROLLERS: + { + SCA_ControllerList& linkedcontrollers= ((KX_GameObject *)self_plus)->GetControllers(); + SCA_IController *controller; + for (unsigned int index=0;indexGetName() == name) + return controller->GetProxy(); + } + break; + } + case KX_PYGENSEQ_OB_TYPE_ACTUATORS: + { + SCA_ActuatorList& linkedactuators= ((KX_GameObject *)self_plus)->GetActuators(); + SCA_IActuator *actuator; + for (unsigned int index=0;indexGetName() == name) + return actuator->GetProxy(); + } + break; + } + } + + PyErr_Format( PyExc_KeyError, "requested item \"%s\" does not exist", name); + return NULL; +} + +static PyMappingMethods KX_PythonSeq_as_mapping = { + KX_PythonSeq_len, /* mp_length */ + KX_PythonSeq_subscript, /* mp_subscript */ + 0, /* mp_ass_subscript */ +}; + + +/* + * Initialize the interator index + */ + +static PyObject *KX_PythonSeq_getIter(KX_PythonSeq *self) +{ + if(BGE_PROXY_REF(self->base)==NULL) { + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return NULL; + } + + /* create a new iterator if were alredy using this one */ + if (self->iter == -1) { + self->iter = 0; + Py_INCREF(self); + return (PyObject *)self; + } else { + return KX_PythonSeq_CreatePyObject(self->base, self->type); + } + } + + +/* + * Return next KX_PythonSeq iter. + */ + +static PyObject *KX_PythonSeq_nextIter(KX_PythonSeq *self) +{ + PyObject *object = KX_PythonSeq_getIndex((PyObject *)self, self->iter); + + self->iter++; + if( object==NULL ) { + self->iter= -1; /* for reuse */ + PyErr_SetString(PyExc_StopIteration, "iterator at end"); + } + return object; /* can be NULL for end of iterator */ +} + + +static int KX_PythonSeq_compare( KX_PythonSeq * a, KX_PythonSeq * b ) /* TODO - python3.x wants richcmp */ +{ + return ( a->type == b->type && a->base == b->base) ? 0 : -1; +} + +/* + * repr function + * convert to a list and get its string value + */ +static PyObject *KX_PythonSeq_repr( KX_PythonSeq * self ) +{ + PyObject *list = PySequence_List((PyObject *)self); + PyObject *repr = PyObject_Repr(list); + Py_DECREF(list); + return repr; +} + + +/*****************************************************************************/ +/* Python KX_PythonSeq_Type structure definition: */ +/*****************************************************************************/ +PyTypeObject KX_PythonSeq_Type = { +#if (PY_VERSION_HEX >= 0x02060000) + PyVarObject_HEAD_INIT(NULL, 0) +#else + /* python 2.5 and below */ + PyObject_HEAD_INIT( NULL ) /* required py macro */ + 0, /* ob_size */ +#endif + /* For printing, in format "." */ + "KX_PythonSeq", /* char *tp_name; */ + sizeof( KX_PythonSeq ), /* int tp_basicsize; */ + 0, /* tp_itemsize; For allocation */ + + /* Methods to implement standard operations */ + + ( destructor ) KX_PythonSeq_dealloc, /* destructor tp_dealloc; */ + NULL, /* printfunc tp_print; */ + NULL, /* getattrfunc tp_getattr; */ + NULL, /* setattrfunc tp_setattr; */ + ( cmpfunc ) KX_PythonSeq_compare, /* cmpfunc tp_compare; */ + ( reprfunc ) KX_PythonSeq_repr, /* reprfunc tp_repr; */ + + /* Method suites for standard classes */ + + NULL, /* PyNumberMethods *tp_as_number; */ + NULL, /* PySequenceMethods *tp_as_sequence; */ + &KX_PythonSeq_as_mapping, /* PyMappingMethods *tp_as_mapping; */ + + /* More standard operations (here for binary compatibility) */ + + NULL, /* hashfunc tp_hash; */ + NULL, /* ternaryfunc tp_call; */ + NULL, /* reprfunc tp_str; */ + NULL, /* getattrofunc tp_getattro; */ + NULL, /* setattrofunc tp_setattro; */ + + /* Functions to access object as input/output buffer */ + NULL, /* PyBufferProcs *tp_as_buffer; */ + + /*** Flags to define presence of optional/expanded features ***/ + Py_TPFLAGS_DEFAULT, /* long tp_flags; */ + + NULL, /* char *tp_doc; Documentation string */ + /*** Assigned meaning in release 2.0 ***/ + /* call function for all accessible objects */ + NULL, /* traverseproc tp_traverse; */ + + /* delete references to contained objects */ + NULL, /* inquiry tp_clear; */ + + /*** Assigned meaning in release 2.1 ***/ + /*** rich comparisons ***/ + NULL, /* richcmpfunc tp_richcompare; */ + + /*** weak reference enabler ***/ + 0, /* long tp_weaklistoffset; */ + + /*** Added in release 2.2 ***/ + /* Iterators */ + ( getiterfunc) KX_PythonSeq_getIter, /* getiterfunc tp_iter; */ + ( iternextfunc ) KX_PythonSeq_nextIter, /* iternextfunc tp_iternext; */ + + /*** Attribute descriptor and subclassing stuff ***/ + NULL, /* struct PyMethodDef *tp_methods; */ + NULL, /* struct PyMemberDef *tp_members; */ + NULL, /* struct PyGetSetDef *tp_getset; */ + NULL, /* struct _typeobject *tp_base; */ + NULL, /* PyObject *tp_dict; */ + NULL, /* descrgetfunc tp_descr_get; */ + NULL, /* descrsetfunc tp_descr_set; */ + 0, /* long tp_dictoffset; */ + NULL, /* initproc tp_init; */ + NULL, /* allocfunc tp_alloc; */ + NULL, /* newfunc tp_new; */ + /* Low-level free-memory routine */ + NULL, /* freefunc tp_free; */ + /* For PyObject_IS_GC */ + NULL, /* inquiry tp_is_gc; */ + NULL, /* PyObject *tp_bases; */ + /* method resolution order */ + NULL, /* PyObject *tp_mro; */ + NULL, /* PyObject *tp_cache; */ + NULL, /* PyObject *tp_subclasses; */ + NULL, /* PyObject *tp_weaklist; */ + NULL +}; diff --git a/source/gameengine/Ketsji/KX_PythonSeq.h b/source/gameengine/Ketsji/KX_PythonSeq.h new file mode 100644 index 00000000000..15a016224a9 --- /dev/null +++ b/source/gameengine/Ketsji/KX_PythonSeq.h @@ -0,0 +1,60 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + * Readonly sequence wrapper for lookups on logic bricks + */ + +#ifndef _adr_py_seq_h_ // only process once, +#define _adr_py_seq_h_ // even if multiply included + +#include "PyObjectPlus.h" + +// ------------------------- +enum KX_PYGENSEQ_TYPE { + KX_PYGENSEQ_CONT_TYPE_SENSORS, + KX_PYGENSEQ_CONT_TYPE_ACTUATORS, + KX_PYGENSEQ_OB_TYPE_SENSORS, + KX_PYGENSEQ_OB_TYPE_CONTROLLERS, + KX_PYGENSEQ_OB_TYPE_ACTUATORS +}; + +/* The Main PyType Object defined in Main.c */ +extern PyTypeObject KX_PythonSeq_Type; + +#define BPy_KX_PythonSeq_Check(v) \ + ((v)->ob_type == &KX_PythonSeq_Type) + +typedef struct { + PyObject_VAR_HEAD + PyObject *base; + short type; + short iter; +} KX_PythonSeq; + +PyObject *KX_PythonSeq_CreatePyObject(PyObject *base, short type); + +#endif // _adr_py_seq_h_ diff --git a/source/gameengine/PyDoc/API_intro.py b/source/gameengine/PyDoc/API_intro.py new file mode 100644 index 00000000000..ad37e34fbac --- /dev/null +++ b/source/gameengine/PyDoc/API_intro.py @@ -0,0 +1,103 @@ +# This is not a real module, it's simply an introductory text. + +""" +The Blender Game Engine Python API Reference +============================================ + + See U{release notes} for updates, changes and new functionality in the Game Engine Python API. + + Top Module: + ----------- + + - L{GameLogic} + - L{GameKeys} + - L{GameTypes} + - L{Mathutils} + - L{Geometry} + - L{BGL} + + Undocumented modules: + --------------------- + - VideoTexture + - CValue + - Expression + - PhysicsConstraints + + +Introduction: +============= + + This reference documents the Blender Python API, a growing collection of + Python modules (libraries) that give access to part of the program's internal + data and functions. + + Through scripting Blender can be extended in real-time via + U{Python }, an impressive high level, multi-paradigm, open + source language. Newcomers are recommended to start with the tutorial that + comes with it. + + This opens many interesting possibilities not available with logic bricks. + + Game Engine API Stability: + -------------------------- + + When writing python scripts there are a number of situations you should avoid to prevent crashes or unstable behavior. + While the API tries to prevent problems there are some situations where error checking would be too time consuming. + + Known cases: + - Memory Limits. + + There is nothing stopping you from filling a list or making a string so big that that causes blender to run out of memory, in this case python should rasie a MemoryError, but its likely blender will crash before this point. + + - Accessing any data that has been freed. + + For instance accessing a KX_GameObject after its End Object actuator runs. + This will cause a SystemError, however for L{KX_MeshProxy}, L{KX_VertexProxy} and L{KX_VertexProxy} it will crash the blender game engine. + + See: L{GameTypes.PyObjectPlus.invalid} which many types inherit. + + - Mixing L{KX_GameObject} between scenes. + + For instance tracking/parenting an L{KX_GameObject} object to an object from other scene. + + External Modules: + ----------------- + + Since 2.49 support for importing modules has been added. + + This allows you to import any blender textblock with a .py extension. + + External python scripts may be imported as modules when the script is in the same directory as the blend file. + + The current blend files path is included in the sys.path for loading modules. + All linked libraries will also be included so you can be sure when linking in assets from another blend file the scripts will load too. + + A note to newbie script writers: + -------------------------------- + + Interpreted languages are known to be much slower than compiled code, but for + many applications the difference is negligible or acceptable. Also, with + profiling (or even simple direct timing with L{Blender.sys.time}) to + identify slow areas and well thought optimizations, the speed can be + I{considerably} improved in many cases. Try some of the best BPython scripts + to get an idea of what can be done, you may be surprised. + +@author: The Blender Python Team +@requires: Blender 2.49 or newer. +@version: 2.49 +@see: U{www.blender.org}: documentation and forum +@see: U{blenderartists.org}: user forum +@see: U{projects.blender.org} +@see: U{www.python.org} +@see: U{www.python.org/doc} +@see: U{Blending into Python}: User contributed documentation, featuring a blender/python cookbook with many examples. + +@note: the official version of this reference guide is only updated for each + new Blender release. But you can build the current SVN + version yourself: install epydoc, grab all files in the + source/gameengine/PyDoc/ folder of Blender's SVN and use the + epy_docgen.sh script also found there to generate the html docs. + Naturally you will also need a recent Blender binary to try the new + features. If you prefer not to compile it yourself, there is a testing + builds forum at U{blender.org}. +""" diff --git a/source/gameengine/SceneGraph/SG_DList.h b/source/gameengine/SceneGraph/SG_DList.h new file mode 100644 index 00000000000..eea19a85c7a --- /dev/null +++ b/source/gameengine/SceneGraph/SG_DList.h @@ -0,0 +1,161 @@ +/** + * $Id: SG_DList.h 20741 2009-06-08 20:08:19Z blendix $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __SG_DLIST +#define __SG_DLIST + +#include + +/** + * Double circular linked list + */ +class SG_DList +{ +protected : + SG_DList* m_flink; + SG_DList* m_blink; + +public: + template class iterator + { + private: + SG_DList& m_head; + T* m_current; + public: + typedef iterator _myT; + iterator(SG_DList& head) : m_head(head), m_current(NULL) {} + ~iterator() {} + + void begin() + { + m_current = (T*)m_head.Peek(); + } + void back() + { + m_current = (T*)m_head.Back(); + } + bool end() + { + return (m_current == (T*)m_head.Self()); + } + bool add_back(T* item) + { + return m_current->AddBack(item); + } + T* operator*() + { + return m_current; + } + _myT& operator++() + { + // no check of NULL! make sure you don't try to increment beyond end + m_current = (T*)m_current->Peek(); + return *this; + } + _myT& operator--() + { + // no check of NULL! make sure you don't try to increment beyond end + m_current = (T*)m_current->Back(); + return *this; + } + }; + + SG_DList() + { + m_flink = m_blink = this; + } + SG_DList(const SG_DList& other) + { + m_flink = m_blink = this; + } + virtual ~SG_DList() + { + Delink(); + } + + inline bool Empty() // Check for empty queue + { + return ( m_flink == this ); + } + bool AddBack( SG_DList *item ) // Add to the back + { + if (!item->Empty()) + return false; + item->m_blink = m_blink; + item->m_flink = this; + m_blink->m_flink = item; + m_blink = item; + return true; + } + bool AddFront( SG_DList *item ) // Add to the back + { + if (!item->Empty()) + return false; + item->m_flink = m_flink; + item->m_blink = this; + m_flink->m_blink = item; + m_flink = item; + return true; + } + SG_DList *Remove() // Remove from the front + { + if (Empty()) + { + return NULL; + } + SG_DList* item = m_flink; + m_flink = item->m_flink; + m_flink->m_blink = this; + item->m_flink = item->m_blink = item; + return item; + } + bool Delink() // Remove from the middle + { + if (Empty()) + return false; + m_blink->m_flink = m_flink; + m_flink->m_blink = m_blink; + m_flink = m_blink = this; + return true; + } + inline SG_DList *Peek() // Look at front without removing + { + return m_flink; + } + inline SG_DList *Back() // Look at front without removing + { + return m_blink; + } + inline SG_DList *Self() + { + return this; + } +}; + +#endif //__SG_DLIST + diff --git a/source/gameengine/SceneGraph/SG_QList.h b/source/gameengine/SceneGraph/SG_QList.h new file mode 100644 index 00000000000..6656f5a45c8 --- /dev/null +++ b/source/gameengine/SceneGraph/SG_QList.h @@ -0,0 +1,157 @@ +/** + * $Id: SG_QList.h 20741 2009-06-08 20:08:19Z blendix $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __SG_QLIST +#define __SG_QLIST + +#include "SG_DList.h" + +/** + * Double-Double circular linked list + * For storing an object is two lists simultaneously + */ +class SG_QList : public SG_DList +{ +protected : + SG_QList* m_fqlink; + SG_QList* m_bqlink; + +public: + template class iterator + { + private: + SG_QList& m_head; + T* m_current; + public: + typedef iterator _myT; + iterator(SG_QList& head, SG_QList* current=NULL) : m_head(head) { m_current = (T*)current; } + ~iterator() {} + + void begin() + { + m_current = (T*)m_head.QPeek(); + } + void back() + { + m_current = (T*)m_head.QBack(); + } + bool end() + { + return (m_current == (T*)m_head.Self()); + } + bool add_back(T* item) + { + return m_current->QAddBack(item); + } + T* operator*() + { + return m_current; + } + _myT& operator++() + { + m_current = (T*)m_current->QPeek(); + return *this; + } + _myT& operator--() + { + // no check on NULL! make sure you don't try to increment beyond end + m_current = (T*)m_current->QBack(); + return *this; + } + }; + + SG_QList() : SG_DList() + { + m_fqlink = m_bqlink = this; + } + SG_QList(const SG_QList& other) : SG_DList() + { + m_fqlink = m_bqlink = this; + } + virtual ~SG_QList() + { + QDelink(); + } + + inline bool QEmpty() // Check for empty queue + { + return ( m_fqlink == this ); + } + bool QAddBack( SG_QList *item ) // Add to the back + { + if (!item->QEmpty()) + return false; + item->m_bqlink = m_bqlink; + item->m_fqlink = this; + m_bqlink->m_fqlink = item; + m_bqlink = item; + return true; + } + bool QAddFront( SG_QList *item ) // Add to the back + { + if (!item->Empty()) + return false; + item->m_fqlink = m_fqlink; + item->m_bqlink = this; + m_fqlink->m_bqlink = item; + m_fqlink = item; + return true; + } + SG_QList *QRemove() // Remove from the front + { + if (QEmpty()) + { + return NULL; + } + SG_QList* item = m_fqlink; + m_fqlink = item->m_fqlink; + m_fqlink->m_bqlink = this; + item->m_fqlink = item->m_bqlink = item; + return item; + } + bool QDelink() // Remove from the middle + { + if (QEmpty()) + return false; + m_bqlink->m_fqlink = m_fqlink; + m_fqlink->m_bqlink = m_bqlink; + m_fqlink = m_bqlink = this; + return true; + } + inline SG_QList *QPeek() // Look at front without removing + { + return m_fqlink; + } + inline SG_QList *QBack() // Look at front without removing + { + return m_bqlink; + } +}; + +#endif //__SG_QLIST + From b1a106dd49a8653977cdfd722b1d30abf827fa28 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 03:32:57 +0000 Subject: [PATCH 109/512] NLA SoC: Merge from 2.5 21210 to 21300 Note to self: the next merge will be messy again, since 2 commits occurred this one was complete --- CMakeLists.txt | 4 +- intern/string/intern/STR_String.cpp | 6 +- .../blender/BPY_python/BPY_python.vcproj | 8 +- projectfiles_vc9/blender/blender.vcproj | 12 +- .../blender/blenkernel/BKE_blenkernel.vcproj | 12 +- .../blender/blenlib/BLI_blenlib.vcproj | 2 +- .../blender/editors/ED_editors.vcproj | 12 +- .../blender/makesrna/RNA_makesrna.vcproj | 2 +- .../blender/makesrna/RNA_rna.vcproj | 2 +- projectfiles_vc9/blender/nodes/nodes.vcproj | 8 +- .../blenderhook/KX_blenderhook.vcproj | 4 +- .../gameengine/converter/KX_converter.vcproj | 12 +- .../expression/EXP_expressions.vcproj | 12 +- .../gameengine/gamelogic/SCA_GameLogic.vcproj | 12 +- .../gameplayer/axctl/GP_axctl.vcproj | 4 +- .../gameplayer/common/GP_common.vcproj | 8 +- .../gameplayer/ghost/GP_ghost.vcproj | 4 +- .../gameengine/ketsji/KX_ketsji.vcproj | 12 +- .../ketsji/network/KX_network.vcproj | 12 +- .../PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj | 12 +- .../rasterizer/RAS_rasterizer.vcproj | 12 +- .../gameengine/videotexture/TEX_Video.vcproj | 4 +- .../kernel/system/SYS_system.vcproj | 4 +- release/ui/buttons_data_mesh.py | 107 ++- release/ui/buttons_data_modifier.py | 2 +- release/ui/buttons_particle.py | 6 +- release/ui/space_buttons.py | 2 +- release/ui/space_filebrowser.py | 65 ++ release/ui/space_image.py | 42 +- release/ui/space_info.py | 119 +++ source/blender/blenkernel/BKE_packedFile.h | 52 +- source/blender/blenkernel/BKE_particle.h | 4 +- source/blender/blenkernel/BKE_report.h | 5 +- .../blender/blenkernel/intern/cdderivedmesh.c | 2 +- source/blender/blenkernel/intern/context.c | 3 + source/blender/blenkernel/intern/displist.c | 36 +- source/blender/blenkernel/intern/font.c | 8 +- source/blender/blenkernel/intern/image.c | 6 +- source/blender/blenkernel/intern/packedFile.c | 227 ++--- source/blender/blenkernel/intern/particle.c | 6 +- source/blender/blenkernel/intern/report.c | 4 +- source/blender/blenlib/BLI_util.h | 1 + source/blender/blenlib/intern/storage.c | 42 +- source/blender/blenlib/intern/util.c | 19 + source/blender/blenloader/intern/readfile.c | 21 +- .../blender/editors/include/ED_fileselect.h | 32 +- source/blender/editors/include/ED_mesh.h | 4 +- source/blender/editors/include/UI_interface.h | 6 +- source/blender/editors/interface/interface.c | 10 +- .../editors/interface/interface_handlers.c | 41 +- .../editors/interface/interface_icons.c | 17 +- .../editors/interface/interface_layout.c | 2 +- .../editors/interface/interface_panel.c | 4 + .../editors/interface/interface_regions.c | 55 +- .../editors/interface/interface_templates.c | 311 +++--- .../editors/interface/interface_utils.c | 2 +- .../editors/interface/interface_widgets.c | 4 +- source/blender/editors/mesh/mesh_intern.h | 9 + source/blender/editors/mesh/mesh_layers.c | 424 +++++++++ source/blender/editors/mesh/mesh_ops.c | 6 + source/blender/editors/object/editkey.c | 144 ++- source/blender/editors/object/object_intern.h | 14 + source/blender/editors/object/object_ops.c | 12 + .../editdeform.c => object/object_vgroup.c} | 274 +++++- source/blender/editors/screen/screen_ops.c | 5 +- source/blender/editors/sculpt_paint/sculpt.c | 144 ++- .../editors/space_buttons/buttons_intern.h | 4 +- .../editors/space_buttons/buttons_ops.c | 20 +- .../editors/space_buttons/space_buttons.c | 5 +- source/blender/editors/space_file/file_draw.c | 128 --- .../blender/editors/space_file/file_intern.h | 12 +- source/blender/editors/space_file/file_ops.c | 220 +++-- .../blender/editors/space_file/file_panels.c | 165 ++++ source/blender/editors/space_file/filelist.c | 8 +- source/blender/editors/space_file/filelist.h | 1 - source/blender/editors/space_file/filesel.c | 2 +- source/blender/editors/space_file/fsmenu.c | 39 +- source/blender/editors/space_file/fsmenu.h | 13 +- .../blender/editors/space_file/space_file.c | 126 +-- .../editors/space_image/image_buttons.c | 4 +- .../blender/editors/space_image/image_ops.c | 97 +- .../blender/editors/space_info/info_header.c | 507 ---------- .../blender/editors/space_info/info_intern.h | 7 + source/blender/editors/space_info/info_ops.c | 397 ++++++++ .../blender/editors/space_info/space_info.c | 28 +- .../editors/space_view3d/view3d_header.c | 1 + .../editors/space_view3d/view3d_toolbar.c | 2 +- .../editors/space_view3d/view3d_view.c | 3 + source/blender/makesdna/DNA_brush_types.h | 1 + source/blender/makesdna/DNA_scene_types.h | 6 +- source/blender/makesdna/DNA_screen_types.h | 4 + source/blender/makesdna/DNA_space_types.h | 48 +- .../makesdna/DNA_windowmanager_types.h | 3 +- source/blender/makesrna/RNA_access.h | 10 + source/blender/makesrna/RNA_types.h | 19 +- source/blender/makesrna/intern/makesrna.c | 89 +- source/blender/makesrna/intern/rna_access.c | 377 +++++++- source/blender/makesrna/intern/rna_brush.c | 4 + .../blender/makesrna/intern/rna_constraint.c | 4 +- source/blender/makesrna/intern/rna_context.c | 20 +- source/blender/makesrna/intern/rna_define.c | 13 +- source/blender/makesrna/intern/rna_image.c | 19 + source/blender/makesrna/intern/rna_internal.h | 1 + .../makesrna/intern/rna_internal_types.h | 4 + source/blender/makesrna/intern/rna_mesh.c | 235 +++-- source/blender/makesrna/intern/rna_mesh_api.c | 221 ++++- source/blender/makesrna/intern/rna_object.c | 103 +- source/blender/makesrna/intern/rna_rna.c | 16 +- source/blender/makesrna/intern/rna_scene.c | 5 + source/blender/makesrna/intern/rna_screen.c | 28 + source/blender/makesrna/intern/rna_space.c | 123 ++- source/blender/makesrna/intern/rna_ui.c | 16 +- source/blender/makesrna/intern/rna_ui_api.c | 7 + source/blender/makesrna/intern/rna_wm.c | 46 + source/blender/python/generic/BGL.c | 9 +- source/blender/python/generic/Geometry.c | 12 +- source/blender/python/generic/Mathutils.c | 36 +- source/blender/python/generic/euler.c | 84 +- source/blender/python/generic/euler.h | 5 +- source/blender/python/generic/matrix.c | 216 +++-- source/blender/python/generic/matrix.h | 5 +- source/blender/python/generic/quat.c | 110 ++- source/blender/python/generic/quat.h | 5 +- source/blender/python/generic/vector.c | 888 ++++++++++-------- source/blender/python/generic/vector.h | 5 +- .../blender/python/intern/bpy_operator_wrap.c | 3 +- source/blender/python/intern/bpy_rna.c | 550 +++++++++-- source/blender/windowmanager/WM_api.h | 2 +- source/blender/windowmanager/WM_types.h | 5 + .../windowmanager/intern/wm_event_system.c | 14 +- .../blender/windowmanager/intern/wm_files.c | 2 +- .../blender/windowmanager/intern/wm_keymap.c | 2 +- .../windowmanager/intern/wm_operators.c | 2 +- source/creator/CMakeLists.txt | 5 +- source/gameengine/BlenderRoutines/Makefile | 1 + .../Converter/BL_ActionActuator.cpp | 43 +- .../gameengine/Converter/BL_ActionActuator.h | 9 +- .../Converter/BL_ShapeActionActuator.cpp | 40 +- .../Converter/BL_ShapeActionActuator.h | 9 +- source/gameengine/Expressions/BoolValue.cpp | 3 +- source/gameengine/Expressions/IntValue.cpp | 2 +- source/gameengine/Expressions/ListValue.cpp | 59 +- source/gameengine/Expressions/ListValue.h | 4 +- .../gameengine/Expressions/PyObjectPlus.cpp | 371 +++----- source/gameengine/Expressions/PyObjectPlus.h | 95 +- source/gameengine/Expressions/StringValue.h | 2 +- source/gameengine/Expressions/Value.cpp | 124 +-- source/gameengine/Expressions/Value.h | 16 +- .../GameLogic/SCA_2DFilterActuator.cpp | 42 +- .../GameLogic/SCA_2DFilterActuator.h | 13 +- .../GameLogic/SCA_ANDController.cpp | 31 +- .../gameengine/GameLogic/SCA_ANDController.h | 10 +- .../GameLogic/SCA_ActuatorSensor.cpp | 37 +- .../gameengine/GameLogic/SCA_ActuatorSensor.h | 7 +- .../gameengine/GameLogic/SCA_AlwaysSensor.cpp | 31 +- .../gameengine/GameLogic/SCA_AlwaysSensor.h | 12 +- .../gameengine/GameLogic/SCA_DelaySensor.cpp | 40 +- source/gameengine/GameLogic/SCA_DelaySensor.h | 7 +- .../GameLogic/SCA_ExpressionController.cpp | 5 +- .../GameLogic/SCA_ExpressionController.h | 11 +- source/gameengine/GameLogic/SCA_IActuator.cpp | 5 +- source/gameengine/GameLogic/SCA_IActuator.h | 3 +- .../gameengine/GameLogic/SCA_IController.cpp | 47 +- source/gameengine/GameLogic/SCA_IController.h | 6 +- .../gameengine/GameLogic/SCA_ILogicBrick.cpp | 44 +- source/gameengine/GameLogic/SCA_ILogicBrick.h | 6 +- source/gameengine/GameLogic/SCA_IObject.cpp | 81 +- source/gameengine/GameLogic/SCA_IObject.h | 7 +- source/gameengine/GameLogic/SCA_ISensor.cpp | 46 +- source/gameengine/GameLogic/SCA_ISensor.h | 7 +- .../GameLogic/SCA_JoystickSensor.cpp | 73 +- .../gameengine/GameLogic/SCA_JoystickSensor.h | 7 +- .../GameLogic/SCA_KeyboardSensor.cpp | 61 +- .../gameengine/GameLogic/SCA_KeyboardSensor.h | 7 +- .../gameengine/GameLogic/SCA_LogicManager.cpp | 1 + .../gameengine/GameLogic/SCA_MouseSensor.cpp | 47 +- source/gameengine/GameLogic/SCA_MouseSensor.h | 7 +- .../GameLogic/SCA_NANDController.cpp | 31 +- .../gameengine/GameLogic/SCA_NANDController.h | 6 +- .../GameLogic/SCA_NORController.cpp | 31 +- .../gameengine/GameLogic/SCA_NORController.h | 10 +- .../gameengine/GameLogic/SCA_ORController.cpp | 32 +- .../gameengine/GameLogic/SCA_ORController.h | 9 +- .../GameLogic/SCA_PropertyActuator.cpp | 38 +- .../GameLogic/SCA_PropertyActuator.h | 8 +- .../GameLogic/SCA_PropertySensor.cpp | 42 +- .../gameengine/GameLogic/SCA_PropertySensor.h | 7 +- .../GameLogic/SCA_PythonController.cpp | 63 +- .../GameLogic/SCA_PythonController.h | 6 +- .../GameLogic/SCA_RandomActuator.cpp | 48 +- .../gameengine/GameLogic/SCA_RandomActuator.h | 7 +- .../gameengine/GameLogic/SCA_RandomSensor.cpp | 46 +- .../gameengine/GameLogic/SCA_RandomSensor.h | 7 +- .../GameLogic/SCA_XNORController.cpp | 31 +- .../gameengine/GameLogic/SCA_XNORController.h | 5 +- .../GameLogic/SCA_XORController.cpp | 31 +- .../gameengine/GameLogic/SCA_XORController.h | 10 +- source/gameengine/Ketsji/BL_Shader.cpp | 43 +- source/gameengine/Ketsji/BL_Shader.h | 6 +- .../KXNetwork/KX_NetworkMessageActuator.cpp | 37 +- .../KXNetwork/KX_NetworkMessageActuator.h | 7 +- .../KXNetwork/KX_NetworkMessageSensor.cpp | 43 +- .../KXNetwork/KX_NetworkMessageSensor.h | 7 +- .../gameengine/Ketsji/KX_BlenderMaterial.cpp | 43 +- source/gameengine/Ketsji/KX_BlenderMaterial.h | 9 +- source/gameengine/Ketsji/KX_CDActuator.cpp | 47 +- source/gameengine/Ketsji/KX_CDActuator.h | 7 +- source/gameengine/Ketsji/KX_Camera.cpp | 65 +- source/gameengine/Ketsji/KX_Camera.h | 7 +- .../gameengine/Ketsji/KX_CameraActuator.cpp | 39 +- source/gameengine/Ketsji/KX_CameraActuator.h | 8 +- .../Ketsji/KX_ConstraintActuator.cpp | 50 +- .../gameengine/Ketsji/KX_ConstraintActuator.h | 7 +- .../Ketsji/KX_ConstraintWrapper.cpp | 42 +- .../gameengine/Ketsji/KX_ConstraintWrapper.h | 5 +- source/gameengine/Ketsji/KX_GameActuator.cpp | 45 +- source/gameengine/Ketsji/KX_GameActuator.h | 7 +- source/gameengine/Ketsji/KX_GameObject.cpp | 185 +--- source/gameengine/Ketsji/KX_GameObject.h | 17 +- source/gameengine/Ketsji/KX_IpoActuator.cpp | 37 +- source/gameengine/Ketsji/KX_IpoActuator.h | 7 +- source/gameengine/Ketsji/KX_Light.cpp | 56 +- source/gameengine/Ketsji/KX_Light.h | 6 +- source/gameengine/Ketsji/KX_MeshProxy.cpp | 55 +- source/gameengine/Ketsji/KX_MeshProxy.h | 3 - .../gameengine/Ketsji/KX_MouseFocusSensor.cpp | 33 +- .../gameengine/Ketsji/KX_MouseFocusSensor.h | 5 +- source/gameengine/Ketsji/KX_NearSensor.cpp | 46 +- source/gameengine/Ketsji/KX_NearSensor.h | 9 +- .../gameengine/Ketsji/KX_ObjectActuator.cpp | 43 +- source/gameengine/Ketsji/KX_ObjectActuator.h | 7 +- .../gameengine/Ketsji/KX_ParentActuator.cpp | 37 +- source/gameengine/Ketsji/KX_ParentActuator.h | 7 +- .../Ketsji/KX_PhysicsObjectWrapper.cpp | 49 +- .../Ketsji/KX_PhysicsObjectWrapper.h | 6 +- source/gameengine/Ketsji/KX_PolyProxy.cpp | 61 +- source/gameengine/Ketsji/KX_PolyProxy.h | 2 - .../gameengine/Ketsji/KX_PolygonMaterial.cpp | 44 +- source/gameengine/Ketsji/KX_PolygonMaterial.h | 7 +- .../Ketsji/KX_PyConstraintBinding.cpp | 2 +- source/gameengine/Ketsji/KX_PyMath.cpp | 12 +- source/gameengine/Ketsji/KX_PyMath.h | 14 +- source/gameengine/Ketsji/KX_PythonInit.cpp | 38 +- .../gameengine/Ketsji/KX_PythonInitTypes.cpp | 225 +++-- source/gameengine/Ketsji/KX_PythonSeq.cpp | 137 ++- source/gameengine/Ketsji/KX_RadarSensor.cpp | 40 +- source/gameengine/Ketsji/KX_RadarSensor.h | 7 +- source/gameengine/Ketsji/KX_RaySensor.cpp | 39 +- source/gameengine/Ketsji/KX_RaySensor.h | 8 +- .../Ketsji/KX_SCA_AddObjectActuator.cpp | 45 +- .../Ketsji/KX_SCA_AddObjectActuator.h | 7 +- .../Ketsji/KX_SCA_DynamicActuator.cpp | 45 +- .../Ketsji/KX_SCA_DynamicActuator.h | 8 +- .../Ketsji/KX_SCA_EndObjectActuator.cpp | 35 +- .../Ketsji/KX_SCA_EndObjectActuator.h | 6 +- .../Ketsji/KX_SCA_ReplaceMeshActuator.cpp | 45 +- .../Ketsji/KX_SCA_ReplaceMeshActuator.h | 9 +- source/gameengine/Ketsji/KX_Scene.cpp | 88 +- source/gameengine/Ketsji/KX_Scene.h | 10 +- source/gameengine/Ketsji/KX_SceneActuator.cpp | 50 +- source/gameengine/Ketsji/KX_SceneActuator.h | 7 +- source/gameengine/Ketsji/KX_SoundActuator.cpp | 53 +- source/gameengine/Ketsji/KX_SoundActuator.h | 7 +- source/gameengine/Ketsji/KX_StateActuator.cpp | 41 +- source/gameengine/Ketsji/KX_StateActuator.h | 9 +- source/gameengine/Ketsji/KX_TouchSensor.cpp | 44 +- source/gameengine/Ketsji/KX_TouchSensor.h | 7 +- .../gameengine/Ketsji/KX_TrackToActuator.cpp | 51 +- source/gameengine/Ketsji/KX_TrackToActuator.h | 5 +- .../gameengine/Ketsji/KX_VehicleWrapper.cpp | 44 +- source/gameengine/Ketsji/KX_VehicleWrapper.h | 5 +- source/gameengine/Ketsji/KX_VertexProxy.cpp | 96 +- source/gameengine/Ketsji/KX_VertexProxy.h | 3 - .../Ketsji/KX_VisibilityActuator.cpp | 43 +- .../gameengine/Ketsji/KX_VisibilityActuator.h | 8 +- .../VideoTexture/FilterBlueScreen.cpp | 20 +- .../gameengine/VideoTexture/FilterColor.cpp | 8 +- .../gameengine/VideoTexture/FilterNormal.cpp | 4 +- .../gameengine/VideoTexture/ImageRender.cpp | 16 +- .../gameengine/VideoTexture/ImageViewport.cpp | 16 +- source/gameengine/VideoTexture/VideoBase.cpp | 4 +- .../gameengine/VideoTexture/VideoFFmpeg.cpp | 4 +- .../gameengine/VideoTexture/blendVideoTex.cpp | 2 +- 283 files changed, 6697 insertions(+), 5513 deletions(-) create mode 100644 release/ui/space_filebrowser.py create mode 100644 release/ui/space_info.py create mode 100644 source/blender/editors/mesh/mesh_layers.c rename source/blender/editors/{mesh/editdeform.c => object/object_vgroup.c} (80%) create mode 100644 source/blender/editors/space_file/file_panels.c delete mode 100644 source/blender/editors/space_info/info_header.c create mode 100644 source/blender/editors/space_info/info_ops.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 99f1c10027b..714ec4095af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,10 +193,10 @@ IF(WIN32) ENDIF(CMAKE_CL_64) SET(PYTHON ${LIBDIR}/python) - SET(PYTHON_VERSION 2.5) + SET(PYTHON_VERSION 2.6) SET(PYTHON_INC "${PYTHON}/include/python${PYTHON_VERSION}") SET(PYTHON_BINARY python) - SET(PYTHON_LIB python25) + SET(PYTHON_LIB python26) SET(PYTHON_LIBPATH ${PYTHON}/lib) IF(CMAKE_CL_64) diff --git a/intern/string/intern/STR_String.cpp b/intern/string/intern/STR_String.cpp index dcc52e2a3e7..646b1a853dc 100644 --- a/intern/string/intern/STR_String.cpp +++ b/intern/string/intern/STR_String.cpp @@ -559,7 +559,8 @@ STR_String& STR_String::TrimLeft() { int skip; assertd(pData != NULL); - for (skip=0; isSpace(pData[skip]); skip++, Len--); + for (skip=0; isSpace(pData[skip]); skip++, Len--) + {}; memmove(pData, pData+skip, Len+1); return *this; } @@ -598,7 +599,8 @@ STR_String& STR_String::TrimLeft(char *set) { int skip; assertd(pData != NULL); - for (skip=0; Len && strchr(set, pData[skip]); skip++, Len--); + for (skip=0; Len && strchr(set, pData[skip]); skip++, Len--) + {}; memmove(pData, pData+skip, Len+1); return *this; } diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj index 341275a5b5a..f6a740ee5b0 100644 --- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj +++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj @@ -43,7 +43,7 @@ diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj index cc464b9101a..63b2b21971f 100644 --- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj +++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj @@ -43,7 +43,7 @@ + + @@ -795,11 +799,11 @@ Name="space_info" > 1: + col.itemO("OBJECT_OT_vertex_group_copy_to_linked", icon="ICON_BLANK1", text="") + + if context.edit_object: + row = layout.row(align=True) + + row.itemO("OBJECT_OT_vertex_group_assign", text="Assign") + row.itemO("OBJECT_OT_vertex_group_remove_from", text="Remove") + row.itemO("OBJECT_OT_vertex_group_select", text="Select") + row.itemO("OBJECT_OT_vertex_group_deselect", text="Deselect") + + layout.itemR(context.tool_settings, "vertex_group_weight", text="Weight") + +class DATA_PT_shape_keys(DataButtonsPanel): + __idname__ = "DATA_PT_shape_keys" + __label__ = "Shape Keys" + + def poll(self, context): + return (context.object and context.object.type in ('MESH', 'LATTICE')) + + def draw(self, context): + layout = self.layout + ob = context.object + + row = layout.row() + + key = ob.data.shape_keys + + row.template_list(key, "keys", ob, "active_shape_key_index") + + col = row.column(align=True) + col.itemO("OBJECT_OT_shape_key_add", icon="ICON_ZOOMIN", text="") + col.itemO("OBJECT_OT_shape_key_remove", icon="ICON_ZOOMOUT", text="") + + if context.edit_object: + layout.enabled = False + +class DATA_PT_uv_texture(DataButtonsPanel): + __idname__ = "DATA_PT_uv_texture" + __label__ = "UV Texture" + + def draw(self, context): + layout = self.layout + me = context.mesh + + row = layout.row() + + row.template_list(me, "uv_textures", me, "active_uv_texture_index") + + col = row.column(align=True) + col.itemO("MESH_OT_uv_texture_add", icon="ICON_ZOOMIN", text="") + col.itemO("MESH_OT_uv_texture_remove", icon="ICON_ZOOMOUT", text="") + +class DATA_PT_vertex_colors(DataButtonsPanel): + __idname__ = "DATA_PT_vertex_colors" + __label__ = "Vertex Colors" + + def draw(self, context): + layout = self.layout + me = context.mesh + + row = layout.row() + + row.template_list(me, "vertex_colors", me, "active_vertex_color_index") + + col = row.column(align=True) + col.itemO("MESH_OT_vertex_color_add", icon="ICON_ZOOMIN", text="") + col.itemO("MESH_OT_vertex_color_remove", icon="ICON_ZOOMOUT", text="") bpy.types.register(DATA_PT_mesh) bpy.types.register(DATA_PT_materials) +bpy.types.register(DATA_PT_vertex_groups) +bpy.types.register(DATA_PT_shape_keys) +bpy.types.register(DATA_PT_uv_texture) +bpy.types.register(DATA_PT_vertex_colors) diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py index 9d24cd2d534..af0a8582174 100644 --- a/release/ui/buttons_data_modifier.py +++ b/release/ui/buttons_data_modifier.py @@ -350,7 +350,7 @@ class DATA_PT_modifiers(DataButtonsPanel): sub.itemR(md, "factor") sub.itemR(md, "repeat") - layout.template_pointer(md, "vertex_group", ob, "vertex_groups") + layout.item_pointerR(md, "vertex_group", ob, "vertex_groups") def softbody(self, layout, ob, md): layout.itemL(text="See Softbody panel.") diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index e51df6ef7fd..49ceaf6aae1 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -33,11 +33,11 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): if ob: row = layout.row() - row.template_list(ob, "particle_systems", "active_particle_system_index") + row.template_list(ob, "particle_systems", ob, "active_particle_system_index") col = row.column(align=True) - col.itemO("OBJECT_OT_particle_system_slot_add", icon="ICON_ZOOMIN", text="") - col.itemO("OBJECT_OT_particle_system_slot_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("OBJECT_OT_particle_system_add", icon="ICON_ZOOMIN", text="") + col.itemO("OBJECT_OT_particle_system_remove", icon="ICON_ZOOMOUT", text="") if psys: split = layout.split(percentage=0.65) diff --git a/release/ui/space_buttons.py b/release/ui/space_buttons.py index a669690b8bc..cae9a813433 100644 --- a/release/ui/space_buttons.py +++ b/release/ui/space_buttons.py @@ -11,7 +11,7 @@ class Buttons_HT_header(bpy.types.Header): so = context.space_data scene = context.scene - layout.template_header(context) + layout.template_header() if context.area.show_menus: row = layout.row(align=True) diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py new file mode 100644 index 00000000000..820134d3e87 --- /dev/null +++ b/release/ui/space_filebrowser.py @@ -0,0 +1,65 @@ + +import bpy + + +class FILEBROWSER_HT_header(bpy.types.Header): + __space_type__ = "FILE_BROWSER" + __idname__ = "FILEBROWSER_HT_header" + + def draw(self, context): + st = context.space_data + layout = self.layout + + params = st.params + layout.template_header() + + if context.area.show_menus: + row = layout.row() + row.itemM("FILEBROWSER_MT_directory") + row.itemM("FILEBROWSER_MT_bookmarks") + + row = layout.row(align=True) + row.itemO("FILE_OT_parent", text="", icon='ICON_FILE_PARENT') + row.itemO("FILE_OT_refresh", text="", icon='ICON_FILE_REFRESH') + + layout.itemR(params, "display", expand=True, text="") + layout.itemR(params, "sort", expand=True, text="") + + layout.itemR(params, "hide_dot") + layout.itemR(params, "do_filter") + + row = layout.row(align=True) + row.itemR(params, "filter_folder", text=""); + row.itemR(params, "filter_blender", text=""); + row.itemR(params, "filter_image", text=""); + row.itemR(params, "filter_movie", text=""); + row.itemR(params, "filter_script", text=""); + row.itemR(params, "filter_font", text=""); + row.itemR(params, "filter_sound", text=""); + row.itemR(params, "filter_text", text=""); + + row.active = params.do_filter + +class FILEBROWSER_MT_directory(bpy.types.Menu): + __space_type__ = "FILE_BROWSER" + __label__ = "Directory" + + def draw(self, context): + layout = self.layout + + layout.itemO("FILE_OT_refresh", text="Refresh", icon='ICON_FILE_REFRESH') + layout.itemO("FILE_OT_parent", text="Parent", icon='ICON_FILE_PARENT') + +class FILEBROWSER_MT_bookmarks(bpy.types.Menu): + __space_type__ = "FILE_BROWSER" + __label__ = "Bookmarks" + + def draw(self, context): + layout = self.layout + + layout.itemO("FILE_OT_add_bookmark", text="Add current directory", icon='ICON_BOOKMARKS') + + +bpy.types.register(FILEBROWSER_HT_header) +bpy.types.register(FILEBROWSER_MT_directory) +bpy.types.register(FILEBROWSER_MT_bookmarks) diff --git a/release/ui/space_image.py b/release/ui/space_image.py index 63ca316efe7..49ef18705c4 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -96,9 +96,9 @@ class IMAGE_MT_image(bpy.types.Menu): else: layout.itemO("IMAGE_OT_pack") - # only for dirty && specific image types : XXX poll? - #if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) - if False: + # only for dirty && specific image types, perhaps + # this could be done in operator poll too + if ima.dirty: if ima.source in ("FILE", "GENERATED") and ima.type != "MULTILAYER": layout.item_booleanO("IMAGE_OT_pack", "as_png", True, text="Pack As PNG") @@ -215,8 +215,10 @@ class IMAGE_HT_header(bpy.types.Header): if show_uvedit: row.itemM("IMAGE_MT_select") - # XXX menuname= (ibuf && (ibuf->userflags & IB_BITMAPDIRTY))? "Image*": "Image"; - row.itemM("IMAGE_MT_image") + if ima and ima.dirty: + row.itemM("IMAGE_MT_image", text="Image*") + else: + row.itemM("IMAGE_MT_image", text="Image") if show_uvedit: row.itemM("IMAGE_MT_uvs") @@ -344,6 +346,10 @@ class IMAGE_PT_view_properties(bpy.types.Panel): __region_type__ = "UI" __label__ = "View Properties" + def poll(self, context): + sima = context.space_data + return (sima and (sima.image or sima.show_uvedit)) + def draw(self, context): sima = context.space_data layout = self.layout @@ -358,10 +364,12 @@ class IMAGE_PT_view_properties(bpy.types.Panel): if ima: col.itemR(ima, "display_aspect") - col = split.column() - col.itemR(sima, "draw_repeated", text="Repeat") - if show_uvedit: - col.itemR(uvedit, "normalized_coordinates") + col = split.column() + col.itemR(sima, "draw_repeated", text="Repeat") + if show_uvedit: + col.itemR(uvedit, "normalized_coordinates", text="Normalized") + elif show_uvedit: + col.itemR(uvedit, "normalized_coordinates", text="Normalized") if show_uvedit: col = layout.column() @@ -377,21 +385,6 @@ class IMAGE_PT_view_properties(bpy.types.Panel): #col.itemR(uvedit, "draw_edges") #col.itemR(uvedit, "draw_faces") -class IMAGE_PT_curves(bpy.types.Panel): - __space_type__ = "IMAGE_EDITOR" - __region_type__ = "UI" - __label__ = "Curves" - - def poll(self, context): - sima = context.space_data - return (sima and sima.image) - - def draw(self, context): - sima = context.space_data - layout = self.layout - - layout.template_curve_mapping(sima.curves) - bpy.types.register(IMAGE_MT_view) bpy.types.register(IMAGE_MT_select) bpy.types.register(IMAGE_MT_image) @@ -403,5 +396,4 @@ bpy.types.register(IMAGE_MT_uvs) bpy.types.register(IMAGE_HT_header) bpy.types.register(IMAGE_PT_game_properties) bpy.types.register(IMAGE_PT_view_properties) -#bpy.types.register(IMAGE_PT_curves) diff --git a/release/ui/space_info.py b/release/ui/space_info.py new file mode 100644 index 00000000000..de3346711e9 --- /dev/null +++ b/release/ui/space_info.py @@ -0,0 +1,119 @@ + +import bpy + +class INFO_HT_header(bpy.types.Header): + __space_type__ = "USER_PREFERENCES" + __idname__ = "INFO_HT_header" + + def draw(self, context): + st = context.space_data + layout = self.layout + + layout.template_header() + + if context.area.show_menus: + row = layout.row() + row.itemM("INFO_MT_file") + row.itemM("INFO_MT_add") + row.itemM("INFO_MT_timeline") + row.itemM("INFO_MT_game") + row.itemM("INFO_MT_render") + row.itemM("INFO_MT_help") + + layout.template_ID(context.window, "screen") #, new="SCREEN_OT_new", open="SCREEN_OT_unlink") + layout.template_ID(context.screen, "scene") #, new="SCENE_OT_new", unlink="SCENE_OT_unlink") + + layout.itemS() + + layout.template_operator_search() + layout.template_running_jobs() + +class INFO_MT_file(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "File" + + def draw(self, context): + layout = self.layout + + layout.operator_context = "EXEC_AREA" + layout.itemO("WM_OT_read_homefile") + layout.operator_context = "INVOKE_AREA" + layout.itemO("WM_OT_open_mainfile") + + layout.itemS() + + layout.operator_context = "EXEC_AREA" + layout.itemO("WM_OT_save_mainfile") + layout.operator_context = "INVOKE_AREA" + layout.itemO("WM_OT_save_as_mainfile") + + layout.itemS() + + layout.itemM("INFO_MT_file_external_data") + +class INFO_MT_file_external_data(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "External Data" + + def draw(self, context): + layout = self.layout + + layout.itemO("FILE_OT_pack_all", text="Pack into .blend file") + layout.itemO("FILE_OT_unpack_all", text="Unpack into Files...") + + layout.itemS() + + layout.itemO("FILE_OT_make_paths_relative") + layout.itemO("FILE_OT_make_paths_absolute") + layout.itemO("FILE_OT_report_missing_files") + layout.itemO("FILE_OT_find_missing_files") + +class INFO_MT_add(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Add" + + def draw(self, context): + layout = self.layout + layout.itemL(text="Nothing yet") + +class INFO_MT_timeline(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Timeline" + + def draw(self, context): + layout = self.layout + layout.itemL(text="Nothing yet") + +class INFO_MT_game(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Game" + + def draw(self, context): + layout = self.layout + layout.itemL(text="Nothing yet") + +class INFO_MT_render(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Render" + + def draw(self, context): + layout = self.layout + layout.itemL(text="Nothing yet") + +class INFO_MT_help(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Help" + + def draw(self, context): + layout = self.layout + layout.itemL(text="Nothing yet") + +bpy.types.register(INFO_HT_header) +bpy.types.register(INFO_MT_file) +bpy.types.register(INFO_MT_file_external_data) +bpy.types.register(INFO_MT_add) +bpy.types.register(INFO_MT_timeline) +bpy.types.register(INFO_MT_game) +bpy.types.register(INFO_MT_render) +bpy.types.register(INFO_MT_help) + diff --git a/source/blender/blenkernel/BKE_packedFile.h b/source/blender/blenkernel/BKE_packedFile.h index 2d5acc51b7b..efd930d375a 100644 --- a/source/blender/blenkernel/BKE_packedFile.h +++ b/source/blender/blenkernel/BKE_packedFile.h @@ -31,31 +31,43 @@ #ifndef BKE_PACKEDFILE_H #define BKE_PACKEDFILE_H -#define RET_OK 0 -#define RET_ERROR 1 +#define RET_OK 0 +#define RET_ERROR 1 -struct PackedFile; -struct VFont; struct bSample; struct bSound; struct Image; +struct Main; +struct PackedFile; +struct ReportList; +struct VFont; -struct PackedFile * newPackedFile(char * filename); -struct PackedFile * newPackedFileMemory(void *mem, int memlen); +/* pack */ +struct PackedFile *newPackedFile(struct ReportList *reports, char *filename); +struct PackedFile *newPackedFileMemory(void *mem, int memlen); + +void packAll(struct Main *bmain, struct ReportList *reports); + +/* unpack */ +char *unpackFile(struct ReportList *reports, char *abs_name, char *local_name, struct PackedFile *pf, int how); +int unpackVFont(struct ReportList *reports, struct VFont *vfont, int how); +int unpackSample(struct ReportList *reports, struct bSample *sample, int how); +int unpackImage(struct ReportList *reports, struct Image *ima, int how); +void unpackAll(struct Main *bmain, struct ReportList *reports, int how); + +int writePackedFile(struct ReportList *reports, char *filename, struct PackedFile *pf, int guimode); + +/* free */ +void freePackedFile(struct PackedFile *pf); + +/* info */ +int countPackedFiles(struct Main *bmain); +int checkPackedFile(char *filename, struct PackedFile *pf); + +/* read */ +int seekPackedFile(struct PackedFile *pf, int offset, int whence); +void rewindPackedFile(struct PackedFile *pf); +int readPackedFile(struct PackedFile *pf, void *data, int size); -int seekPackedFile(struct PackedFile * pf, int offset, int whence); -void rewindPackedFile(struct PackedFile * pf); -int readPackedFile(struct PackedFile * pf, void * data, int size); -int countPackedFiles(void); -void freePackedFile(struct PackedFile * pf); -void packAll(void); -int writePackedFile(char * filename, struct PackedFile *pf, int guimode); -int checkPackedFile(char * filename, struct PackedFile * pf); -char * unpackFile(char * abs_name, char * local_name, struct PackedFile * pf, int how); -int unpackVFont(struct VFont * vfont, int how); -int unpackSample(struct bSample *sample, int how); -int unpackImage(struct Image * ima, int how); -void unpackAll(int how); - #endif diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 4d9916b9557..73f0195d1d8 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -251,8 +251,8 @@ void copy_particle_key(struct ParticleKey *to, struct ParticleKey *from, int tim void psys_particle_on_emitter(struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor); struct ParticleSystemModifierData *psys_get_modifier(struct Object *ob, struct ParticleSystem *psys); -void object_add_particle_system_slot(struct Scene *scene, struct Object *ob); -void object_remove_particle_system_slot(struct Scene *scene, struct Object *ob); +void object_add_particle_system(struct Scene *scene, struct Object *ob); +void object_remove_particle_system(struct Scene *scene, struct Object *ob); struct ParticleSettings *psys_new_settings(char *name, struct Main *main); struct ParticleSettings *psys_copy_settings(struct ParticleSettings *part); void psys_flush_particle_settings(struct Scene *scene, struct ParticleSettings *part, int recalc); diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h index 21221026b8b..1bb7152fbf3 100644 --- a/source/blender/blenkernel/BKE_report.h +++ b/source/blender/blenkernel/BKE_report.h @@ -34,7 +34,10 @@ extern "C" { #include "DNA_listBase.h" -/* Reporting Information and Errors */ +/* Reporting Information and Errors + * + * These functions also accept NULL in case no error reporting + * is needed. */ typedef enum ReportType { RPT_DEBUG = 0, diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 57ef920f75b..706eece108c 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1220,7 +1220,7 @@ void CDDM_calc_edges(DerivedMesh *dm) BLI_edgehashIterator_free(ehi); /* free old CustomData and assign new one */ - CustomData_free(&dm->edgeData, dm->numVertData); + CustomData_free(&dm->edgeData, dm->numEdgeData); dm->edgeData = edgeData; dm->numEdgeData = numEdges; diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 90880e354ec..fbad585d9b7 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -358,6 +358,9 @@ static int ctx_data_collection_get(const bContext *C, const char *member, ListBa return 1; } + list->first= NULL; + list->last= NULL; + return 0; } diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 736165a8a98..cdf4b90cee1 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -315,13 +315,19 @@ static void init_fastshade_shadeinput(Render *re) static Render *fastshade_get_render(Scene *scene) { - Render *re= RE_GetRender("_Shade View_"); - if(re==NULL) { - re= RE_NewRender("_Shade View_"); - - RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */ + /* XXX ugly global still, but we can't do preview while rendering */ + if(G.rendering==0) { + + Render *re= RE_GetRender("_Shade View_"); + if(re==NULL) { + re= RE_NewRender("_Shade View_"); + + RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */ + } + return re; } - return re; + + return NULL; } /* called on file reading */ @@ -611,18 +617,20 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un void shadeMeshMCol(Scene *scene, Object *ob, Mesh *me) { + Render *re= fastshade_get_render(scene); int a; char *cp; unsigned int *mcol= (unsigned int*)me->mcol; - Render *re= fastshade_get_render(scene); - mesh_create_shadedColors(re, ob, 1, &mcol, NULL); - me->mcol= (MCol*)mcol; + if(re) { + mesh_create_shadedColors(re, ob, 1, &mcol, NULL); + me->mcol= (MCol*)mcol; - /* swap bytes */ - for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) { - SWAP(char, cp[0], cp[3]); - SWAP(char, cp[1], cp[2]); + /* swap bytes */ + for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) { + SWAP(char, cp[0], cp[3]); + SWAP(char, cp[1], cp[2]); + } } } @@ -641,6 +649,8 @@ void shadeDispList(Scene *scene, Base *base) int a, need_orco; re= fastshade_get_render(scene); + if(re==NULL) + return; dl = find_displist(&ob->disp, DL_VERTCOL); if (dl) { diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 60a7ffc28d9..70901778585 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -333,11 +333,11 @@ static VFontData *vfont_get_data(VFont *vfont) BLI_addtail(&ttfdata, tmpfnt); } } else { - pf= newPackedFile(vfont->name); + pf= newPackedFile(NULL, vfont->name); if(!tmpfnt) { - tpf= newPackedFile(vfont->name); + tpf= newPackedFile(NULL, vfont->name); // Add temporary packed file to globals tmpfnt= (struct TmpFont *) MEM_callocN(sizeof(struct TmpFont), "temp_font"); @@ -385,8 +385,8 @@ VFont *load_vfont(char *name) strcpy(dir, name); BLI_splitdirstring(dir, filename); - pf= newPackedFile(name); - tpf= newPackedFile(name); + pf= newPackedFile(NULL, name); + tpf= newPackedFile(NULL, name); is_builtin= 0; } diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 8eef9984c92..ef0984bf93d 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -1431,7 +1431,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal) /* try to repack file */ if(ima->packedfile) { PackedFile *pf; - pf = newPackedFile(ima->name); + pf = newPackedFile(NULL, ima->name); if (pf) { freePackedFile(ima->packedfile); ima->packedfile = pf; @@ -1750,7 +1750,7 @@ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra) /* make packed file for autopack */ if ((ima->packedfile == NULL) && (G.fileflags & G_AUTOPACK)) - ima->packedfile = newPackedFile(str); + ima->packedfile = newPackedFile(NULL, str); } if(ima->flag & IMA_DO_PREMUL) @@ -1812,7 +1812,7 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser) Render *re= NULL; RenderResult *rr= NULL; - if(iuser->scene) { + if(iuser && iuser->scene) { re= RE_GetRender(iuser->scene->id.name); rr= RE_GetResult(re); } diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index 22e4e8a8309..4d88556d8bf 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -61,8 +61,9 @@ #include "BKE_image.h" #include "BKE_font.h" #include "BKE_packedFile.h" +#include "BKE_report.h" -int seekPackedFile(PackedFile * pf, int offset, int whence) +int seekPackedFile(PackedFile *pf, int offset, int whence) { int oldseek = -1, seek = 0; @@ -92,12 +93,12 @@ int seekPackedFile(PackedFile * pf, int offset, int whence) return(oldseek); } -void rewindPackedFile(PackedFile * pf) +void rewindPackedFile(PackedFile *pf) { seekPackedFile(pf, 0, SEEK_SET); } -int readPackedFile(PackedFile * pf, void * data, int size) +int readPackedFile(PackedFile *pf, void *data, int size) { if ((pf != NULL) && (size >= 0) && (data != NULL)) { if (size + pf->seek > pf->size) { @@ -118,66 +119,55 @@ int readPackedFile(PackedFile * pf, void * data, int size) return(size); } -int countPackedFiles() +int countPackedFiles(Main *bmain) { - int count = 0; Image *ima; VFont *vf; bSample *sample; + int count = 0; // let's check if there are packed files... - ima = G.main->image.first; - while (ima) { - if (ima->packedfile) { + for(ima=bmain->image.first; ima; ima=ima->id.next) + if(ima->packedfile) count++; - } - ima= ima->id.next; - } - vf = G.main->vfont.first; - while (vf) { - if (vf->packedfile) { + for(vf=bmain->vfont.first; vf; vf=vf->id.next) + if(vf->packedfile) count++; - } - vf = vf->id.next; - } - sample = samples->first; - while (sample) { - if (sample->packedfile) { - count++; - } - sample = sample->id.next; - } + if(samples) + for(sample=samples->first; sample; sample=sample->id.next) + if(sample->packedfile) + count++; - return(count); + return count; } -void freePackedFile(PackedFile * pf) +void freePackedFile(PackedFile *pf) { - if (pf) { + if(pf) { MEM_freeN(pf->data); MEM_freeN(pf); - } else { - printf("freePackedFile: Trying to free a NULL pointer\n"); } + else + printf("freePackedFile: Trying to free a NULL pointer\n"); } -PackedFile * newPackedFileMemory(void *mem, int memlen) +PackedFile *newPackedFileMemory(void *mem, int memlen) { - PackedFile * pf = MEM_callocN(sizeof(*pf), "PackedFile"); + PackedFile *pf = MEM_callocN(sizeof(*pf), "PackedFile"); pf->data = mem; pf->size = memlen; return pf; } -PackedFile * newPackedFile(char * filename) +PackedFile *newPackedFile(ReportList *reports, char *filename) { - PackedFile * pf = NULL; + PackedFile *pf = NULL; int file, filelen; char name[FILE_MAXDIR+FILE_MAXFILE]; - void * data; + void *data; //XXX waitcursor(1); @@ -191,7 +181,7 @@ PackedFile * newPackedFile(char * filename) file= open(name, O_BINARY|O_RDONLY); if (file <= 0) { - // error("Can't open file: %s", name); + BKE_reportf(reports, RPT_ERROR, "Can't open file: %s", name); } else { filelen = BLI_filesize(file); @@ -214,36 +204,24 @@ PackedFile * newPackedFile(char * filename) return (pf); } -void packAll() +void packAll(Main *bmain, ReportList *reports) { Image *ima; VFont *vf; bSample *sample; - ima = G.main->image.first; - while (ima) { - if (ima->packedfile == NULL) { - ima->packedfile = newPackedFile(ima->name); - } - ima= ima->id.next; - } - - vf = G.main->vfont.first; - while (vf) { - if (vf->packedfile == NULL) { - vf->packedfile = newPackedFile(vf->name); - } - vf = vf->id.next; - } + for(ima=bmain->image.first; ima; ima=ima->id.next) + if(ima->packedfile == NULL) + ima->packedfile = newPackedFile(reports, ima->name); + for(vf=bmain->vfont.first; vf; vf=vf->id.next) + if(vf->packedfile == NULL) + vf->packedfile = newPackedFile(reports, vf->name); - sample = samples->first; - while (sample) { - if (sample->packedfile == NULL) { - sound_set_packedfile(sample, newPackedFile(sample->name)); - } - sample = sample->id.next; - } + if(samples) + for(sample=samples->first; sample; sample=sample->id.next) + if(sample->packedfile == NULL) + sound_set_packedfile(sample, newPackedFile(reports, sample->name)); } @@ -252,10 +230,10 @@ void packAll() // attempt to create a function that generates an unique filename // this will work when all funtions in fileops.c understand relative filenames... -char * find_new_name(char * name) +char *find_new_name(char *name) { char tempname[FILE_MAXDIR + FILE_MAXFILE]; - char * newname; + char *newname; if (fop_exists(name)) { for (number = 1; number <= 999; number++) { @@ -274,13 +252,13 @@ char * find_new_name(char * name) */ -int writePackedFile(char * filename, PackedFile *pf, int guimode) +int writePackedFile(ReportList *reports, char *filename, PackedFile *pf, int guimode) { int file, number, remove_tmp = FALSE; int ret_value = RET_OK; char name[FILE_MAXDIR + FILE_MAXFILE]; char tempname[FILE_MAXDIR + FILE_MAXFILE]; -/* void * data; */ +/* void *data; */ if (guimode); //XXX waitcursor(1); @@ -305,23 +283,23 @@ int writePackedFile(char * filename, PackedFile *pf, int guimode) file = open(name, O_BINARY + O_WRONLY + O_CREAT + O_TRUNC, 0666); if (file >= 0) { if (write(file, pf->data, pf->size) != pf->size) { - if(guimode) ; //XXX error("Error writing file: %s", name); + BKE_reportf(reports, RPT_ERROR, "Error writing file: %s", name); ret_value = RET_ERROR; } close(file); } else { - if(guimode); //XXX error("Error creating file: %s", name); + BKE_reportf(reports, RPT_ERROR, "Error creating file: %s", name); ret_value = RET_ERROR; } if (remove_tmp) { if (ret_value == RET_ERROR) { if (BLI_rename(tempname, name) != 0) { - if(guimode); //XXX error("Error restoring tempfile. Check files: '%s' '%s'", tempname, name); + BKE_reportf(reports, RPT_ERROR, "Error restoring tempfile. Check files: '%s' '%s'", tempname, name); } } else { if (BLI_delete(tempname, 0, 0) != 0) { - if(guimode); //XXX error("Error deleting '%s' (ignored)"); + BKE_reportf(reports, RPT_ERROR, "Error deleting '%s' (ignored)", tempname); } } } @@ -342,7 +320,7 @@ PF_NOFILE - the original file doens't exist */ -int checkPackedFile(char * filename, PackedFile * pf) +int checkPackedFile(char *filename, PackedFile *pf) { struct stat st; int ret_val, i, len, file; @@ -390,68 +368,23 @@ int checkPackedFile(char * filename, PackedFile * pf) /* -unpackFile() looks at the existing files (abs_name, local_name) and a packed file. -If how == PF_ASK it offers the user a couple of options what to do with the packed file. + unpackFile() looks at the existing files (abs_name, local_name) and a packed file. -It returns a char * to the existing file name / new file name or NULL when +It returns a char *to the existing file name / new file name or NULL when there was an error or when the user desides to cancel the operation. */ -char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how) +char *unpackFile(ReportList *reports, char *abs_name, char *local_name, PackedFile *pf, int how) { - char menu[6 * (FILE_MAXDIR + FILE_MAXFILE + 100)]; + char menu[6 *(FILE_MAXDIR + FILE_MAXFILE + 100)]; char line[FILE_MAXDIR + FILE_MAXFILE + 100]; - char * newname = NULL, * temp = NULL; + char *newname = NULL, *temp = NULL; // char newabs[FILE_MAXDIR + FILE_MAXFILE]; // char newlocal[FILE_MAXDIR + FILE_MAXFILE]; if (pf != NULL) { - if (how == PF_ASK) { - sprintf(menu, "UnPack file%%t|Remove Pack %%x%d", PF_REMOVE); - - if (strcmp(abs_name, local_name)) { - switch (checkPackedFile(local_name, pf)) { - case PF_NOFILE: - sprintf(line, "|Create %s%%x%d", local_name, PF_WRITE_LOCAL); - strcat(menu, line); - break; - case PF_EQUAL: - sprintf(line, "|Use %s (identical)%%x%d", local_name, PF_USE_LOCAL); - strcat(menu, line); - break; - case PF_DIFFERS: - sprintf(line, "|Use %s (differs)%%x%d", local_name, PF_USE_LOCAL); - strcat(menu, line); - sprintf(line, "|Overwrite %s%%x%d", local_name, PF_WRITE_LOCAL); - strcat(menu, line); - break; - } - // sprintf(line, "|%%x%d", PF_INVALID); - // strcat(menu, line); - } - - switch (checkPackedFile(abs_name, pf)) { - case PF_NOFILE: - sprintf(line, "|Create %s%%x%d", abs_name, PF_WRITE_ORIGINAL); - strcat(menu, line); - break; - case PF_EQUAL: - sprintf(line, "|Use %s (identical)%%x%d", abs_name, PF_USE_ORIGINAL); - strcat(menu, line); - break; - case PF_DIFFERS: - sprintf(line, "|Use %s (differs)%%x%d", abs_name, PF_USE_ORIGINAL); - strcat(menu, line); - sprintf(line, "|Overwrite %s%%x%d", abs_name, PF_WRITE_ORIGINAL); - strcat(menu, line); - break; - } - - //XXX how = pupmenu(menu); - } - switch (how) { case -1: case PF_KEEP: @@ -467,7 +400,7 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how) } // else fall through and create it case PF_WRITE_LOCAL: - if (writePackedFile(local_name, pf, 1) == RET_OK) { + if (writePackedFile(reports, local_name, pf, 1) == RET_OK) { temp = local_name; } break; @@ -479,7 +412,7 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how) } // else fall through and create it case PF_WRITE_ORIGINAL: - if (writePackedFile(abs_name, pf, 1) == RET_OK) { + if (writePackedFile(reports, abs_name, pf, 1) == RET_OK) { temp = abs_name; } break; @@ -498,10 +431,10 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how) } -int unpackVFont(VFont * vfont, int how) +int unpackVFont(ReportList *reports, VFont *vfont, int how) { char localname[FILE_MAXDIR + FILE_MAXFILE], fi[FILE_MAXFILE]; - char * newname; + char *newname; int ret_value = RET_ERROR; if (vfont != NULL) { @@ -510,7 +443,7 @@ int unpackVFont(VFont * vfont, int how) sprintf(localname, "//fonts/%s", fi); - newname = unpackFile(vfont->name, localname, vfont->packedfile, how); + newname = unpackFile(reports, vfont->name, localname, vfont->packedfile, how); if (newname != NULL) { ret_value = RET_OK; freePackedFile(vfont->packedfile); @@ -523,10 +456,10 @@ int unpackVFont(VFont * vfont, int how) return (ret_value); } -int unpackSample(bSample *sample, int how) +int unpackSample(ReportList *reports, bSample *sample, int how) { char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX]; - char * newname; + char *newname; int ret_value = RET_ERROR; PackedFile *pf; @@ -535,7 +468,7 @@ int unpackSample(bSample *sample, int how) BLI_splitdirstring(localname, fi); sprintf(localname, "//samples/%s", fi); - newname = unpackFile(sample->name, localname, sample->packedfile, how); + newname = unpackFile(reports, sample->name, localname, sample->packedfile, how); if (newname != NULL) { strcpy(sample->name, newname); MEM_freeN(newname); @@ -553,10 +486,10 @@ int unpackSample(bSample *sample, int how) return(ret_value); } -int unpackImage(Image * ima, int how) +int unpackImage(ReportList *reports, Image *ima, int how) { char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX]; - char * newname; + char *newname; int ret_value = RET_ERROR; if (ima != NULL) { @@ -564,7 +497,7 @@ int unpackImage(Image * ima, int how) BLI_splitdirstring(localname, fi); sprintf(localname, "//textures/%s", fi); - newname = unpackFile(ima->name, localname, ima->packedfile, how); + newname = unpackFile(reports, ima->name, localname, ima->packedfile, how); if (newname != NULL) { ret_value = RET_OK; freePackedFile(ima->packedfile); @@ -578,33 +511,23 @@ int unpackImage(Image * ima, int how) return(ret_value); } -void unpackAll(int how) +void unpackAll(Main *bmain, ReportList *reports, int how) { Image *ima; VFont *vf; bSample *sample; - - ima = G.main->image.first; - while (ima) { - if (ima->packedfile) { - unpackImage(ima, how); - } - ima= ima->id.next; - } - - vf = G.main->vfont.first; - while (vf) { - if (vf->packedfile) { - unpackVFont(vf, how); - } - vf = vf->id.next; - } - sample = samples->first; - while (sample) { - if (sample->packedfile) { - unpackSample(sample, how); - } - sample = sample->id.next; - } + for(ima=bmain->image.first; ima; ima=ima->id.next) + if(ima->packedfile) + unpackImage(reports, ima, how); + + for(vf=bmain->vfont.first; vf; vf=vf->id.next) + if(vf->packedfile) + unpackVFont(reports, vf, how); + + if(samples) + for(sample=samples->first; sample; sample=sample->id.next) + if(sample->packedfile) + unpackSample(reports, sample, how); } + diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 2474053298d..5bf9335d211 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -230,7 +230,7 @@ void psys_set_current_num(Object *ob, int index) if(ob==0) return; for(psys=ob->particlesystem.first, i=0; psys; psys=psys->next, i++) { - if(i == index - 1) + if(i == index) psys->flag |= PSYS_CURRENT; else psys->flag &= ~PSYS_CURRENT; @@ -2929,7 +2929,7 @@ void psys_mat_hair_to_global(Object *ob, DerivedMesh *dm, short from, ParticleDa /************************************************/ /* ParticleSettings handling */ /************************************************/ -void object_add_particle_system_slot(Scene *scene, Object *ob) +void object_add_particle_system(Scene *scene, Object *ob) { ParticleSystem *psys; ModifierData *md; @@ -2961,7 +2961,7 @@ void object_add_particle_system_slot(Scene *scene, Object *ob) DAG_scene_sort(scene); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); } -void object_remove_particle_system_slot(Scene *scene, Object *ob) +void object_remove_particle_system(Scene *scene, Object *ob) { ParticleSystem *psys = psys_get_current(ob); ParticleSystemModifierData *psmd; diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index 116fd069948..8de8cf8d0f4 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -65,8 +65,8 @@ void BKE_reports_init(ReportList *reports, int flag) memset(reports, 0, sizeof(ReportList)); - reports->storelevel= RPT_WARNING; - reports->printlevel= RPT_WARNING; + reports->storelevel= RPT_INFO; + reports->printlevel= RPT_INFO; reports->flag= flag; } diff --git a/source/blender/blenlib/BLI_util.h b/source/blender/blenlib/BLI_util.h index 30c9fc353b3..a138ea780ea 100644 --- a/source/blender/blenlib/BLI_util.h +++ b/source/blender/blenlib/BLI_util.h @@ -50,6 +50,7 @@ void BLI_make_existing_file(char *name); void BLI_split_dirfile(char *string, char *dir, char *file); void BLI_split_dirfile_basic(const char *string, char *dir, char *file); void BLI_join_dirfile(char *string, const char *dir, const char *file); +void BLI_getlastdir(const char* dir, char *last, int maxlen); int BLI_testextensie(const char *str, const char *ext); void BLI_uniquename(struct ListBase *list, void *vlink, char defname[], char delim, short name_offs, short len); void BLI_newname(char * name, int add); diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 0ae17a13e43..3204d5f74e1 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -218,7 +218,7 @@ void BLI_builddir(char *dirname, char *relname) { struct dirent *fname; struct dirlink *dlink; - int rellen, newnum = 0, seen_ = 0, seen__ = 0; + int rellen, newnum = 0, ignore; char buf[256]; DIR *dir; @@ -238,21 +238,17 @@ void BLI_builddir(char *dirname, char *relname) if ( (dir = (DIR *)opendir(".")) ){ while ((fname = (struct dirent*) readdir(dir)) != NULL) { - if(hide_dot && fname->d_name[0]=='.' && fname->d_name[1]!='.' && fname->d_name[1]!=0); + if(hide_dot && fname->d_name[0]=='.' && fname->d_name[1]!='.' && fname->d_name[1]!=0) { + } + else if ( ( (fname->d_name[0] == '.') && (fname->d_name[1] == 0) ) || + ( (fname->d_name[0] == '.') && (fname->d_name[1] == '.') && (fname->d_name[2] == 0)) ) { + /* ignore '.' and '..' */ + } else { - dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); if (dlink){ strcpy(buf+rellen,fname->d_name); - dlink->name = BLI_strdup(buf); - - if (dlink->name[0] == '.') { - if (dlink->name[1] == 0) seen_ = 1; - else if (dlink->name[1] == '.') { - if (dlink->name[2] == 0) seen__ = 1; - } - } BLI_addhead(dirbase,dlink); newnum++; } @@ -260,30 +256,6 @@ void BLI_builddir(char *dirname, char *relname) } if (newnum){ -#ifndef WIN32 - if (seen_ == 0) { /* Cachefs PATCH */ - dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); - strcpy(buf+rellen,"./."); - dlink->name = BLI_strdup(buf); - BLI_addhead(dirbase,dlink); - newnum++; - } - if (seen__ == 0) { /* MAC PATCH */ - dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); - strcpy(buf+rellen,"./.."); - dlink->name = BLI_strdup(buf); - BLI_addhead(dirbase,dlink); - newnum++; - } -#else // WIN32 - if (seen_ == 0) { /* should only happen for root paths like "C:\" */ - dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); - strcpy(buf+rellen,"."); - dlink->name = BLI_strdup(buf); - BLI_addhead(dirbase,dlink); - newnum++; - } -#endif if (files) files=(struct direntry *)realloc(files,(totnum+newnum) * sizeof(struct direntry)); else files=(struct direntry *)malloc(newnum * sizeof(struct direntry)); diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c index 26f4c2dd415..b9d4daaf5b2 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/util.c @@ -736,6 +736,25 @@ void BLI_splitdirstring(char *di, char *fi) } } +void BLI_getlastdir(const char* dir, char *last, int maxlen) +{ + char *s = dir; + char *lslash = NULL; + char *prevslash = NULL; + while (*s) { + if ((*s == '\\') || (*s == '/')) { + prevslash = lslash; + lslash = s; + } + s++; + } + if (prevslash) { + BLI_strncpy(last, prevslash+1, maxlen); + } else { + BLI_strncpy(last, dir, maxlen); + } +} + char *BLI_gethome(void) { #if !defined(WIN32) return getenv("HOME"); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 6df907fe132..0c1ba32c543 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5658,21 +5658,6 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) /* temporarily hide it */ ar->flag = RGN_FLAG_HIDDEN; break; - - case SPACE_FILE: - /* channel (bookmarks/directories) region */ - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_CHANNELS; - ar->alignment= RGN_ALIGN_LEFT; - ar->v2d.scroll= V2D_SCROLL_RIGHT; - /* button UI region */ - ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); - BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_TOP; - break; - #if 0 case SPACE_BUTS: /* context UI region */ @@ -9089,12 +9074,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main) */ //do_versions_ipos_to_animato(main); - /* struct audio data moved to renderdata */ + /* toolsettings */ for(scene= main->scene.first; scene; scene= scene->id.next) { scene->r.audio = scene->audio; - if(!scene->toolsettings->uv_selectmode) + if(!scene->toolsettings->uv_selectmode) { scene->toolsettings->uv_selectmode= UV_SELECT_VERTEX; + scene->toolsettings->vgroup_weight= 1.0f; + } } /* shader, composit and texture node trees have id.name empty, put something in diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index 34aefa91225..01882ecd9bc 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -29,34 +29,8 @@ #define ED_FILES_H struct SpaceFile; - -#define FILE_SHORTDISPLAY 1 -#define FILE_LONGDISPLAY 2 -#define FILE_IMGDISPLAY 3 - -typedef struct FileSelectParams { - char title[24]; /* title, also used for the text of the execute button */ - char dir[240]; /* directory */ - char file[80]; /* file */ - - short flag; /* settings for filter, hiding files and display mode */ - short sort; /* sort order */ - short display; /* display mode flag */ - short filter; /* filter when (flags & FILE_FILTER) is true */ - - /* XXX - temporary, better move to filelist */ - short active_bookmark; - int active_file; - int selstate; - - /* XXX --- still unused -- */ - short f_fp; /* show font preview */ - char fp_str[8]; /* string to use for font preview */ - - char *pupmenu; /* allows menu for save options - result stored in menup */ - short menu; /* currently selected option in pupmenu */ - /* XXX --- end unused -- */ -} FileSelectParams; +struct ARegion; +struct FileSelectParams; #define FILE_LAYOUT_HOR 1 #define FILE_LAYOUT_VER 2 @@ -93,7 +67,7 @@ typedef struct FileLayout float column_widths[MAX_FILE_COLUMN]; } FileLayout; -FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile); +struct FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile); short ED_fileselect_set_params(struct SpaceFile *sfile, const char *title, const char *path, short flag, short display, short filter, short sort); diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 937f6384f6a..8952305d6ab 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -110,7 +110,6 @@ void undo_push_mesh(struct bContext *C, char *name); struct EditFace *EM_get_actFace(struct EditMesh *em, int sloppy); void EM_set_actFace(struct EditMesh *em, struct EditFace *efa); float EM_face_area(struct EditFace *efa); -void EM_add_data_layer(struct EditMesh *em, struct CustomData *data, int type); void EM_select_edge(struct EditEdge *eed, int sel); void EM_select_face(struct EditFace *efa, int sel); @@ -134,6 +133,9 @@ struct UvVertMap *EM_make_uv_vert_map(struct EditMesh *em, int selected, int do_ struct UvMapVert *EM_get_uv_map_vert(struct UvVertMap *vmap, unsigned int v); void EM_free_uv_vert_map(struct UvVertMap *vmap); +void EM_add_data_layer(struct EditMesh *em, struct CustomData *data, int type); +void EM_free_data_layer(struct EditMesh *em, struct CustomData *data, int type); + /* editmesh_mods.c */ extern unsigned int em_vertoffs, em_solidoffs, em_wireoffs; diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b6d71759373..cc8b936b04f 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -456,7 +456,7 @@ typedef void (*uiBlockHandleFunc)(struct bContext *C, void *arg, int event); /* use inside searchfunc to add items */ int uiSearchItemAdd(uiSearchItems *items, const char *name, void *poin, int iconid); /* bfunc gets search item *poin as arg2, or if NULL the old string */ -void uiButSetSearchFunc (uiBut *but, uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc); +void uiButSetSearchFunc (uiBut *but, uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc, void *active); /* height in pixels, it's using hardcoded values still */ int uiSearchBoxhHeight(void); @@ -617,7 +617,9 @@ void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int type); void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname); void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser); -ListBase uiTemplateList(uiLayout *layout, struct PointerRNA *ptr, char *propname, char *activeprop, int rows, int columns, int compact); +ListBase uiTemplateList(uiLayout *layout, struct PointerRNA *ptr, char *propname, struct PointerRNA *activeptr, char *activeprop, int rows, int columns, int compact); +void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); +void uiTemplateOperatorSearch(uiLayout *layout); /* items */ void uiItemO(uiLayout *layout, char *name, int icon, char *opname); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index a9866d8898e..00ec875bd86 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2184,7 +2184,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1, RNA_property_int_range(ptr, prop, &hardmin, &hardmax); RNA_property_int_ui_range(ptr, prop, &softmin, &softmax, &step); - if(min == max) { + if(type != ROW && min == max) { min= hardmin; max= hardmax; } @@ -2199,7 +2199,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1, RNA_property_float_range(ptr, prop, &hardmin, &hardmax); RNA_property_float_ui_range(ptr, prop, &softmin, &softmax, &step, &precision); - if(min == max) { + if(type != ROW && min == max) { min= hardmin; max= hardmax; } @@ -2919,15 +2919,15 @@ uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxle } /* arg is user value, searchfunc and handlefunc both get it as arg */ -void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandleFunc bfunc) +/* if active set, button opens with this item visible and selected */ +void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandleFunc bfunc, void *active) { but->search_func= sfunc; but->search_arg= arg; - uiButSetFunc(but, bfunc, arg, NULL); + uiButSetFunc(but, bfunc, arg, active); } - /* Program Init/Exit */ void UI_init(void) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5049fc0b130..7ad422ef3b5 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -112,6 +112,9 @@ typedef struct uiHandleButtonData { /* tooltip */ ARegion *tooltip; wmTimer *tooltiptimer; + + /* auto open */ + int used_mouse; wmTimer *autoopentimer; /* text selection/editing */ @@ -284,16 +287,6 @@ static void ui_apply_but_funcs_after(bContext *C) if(after.context) CTX_store_set(C, after.context); - if(after.func) - after.func(C, after.func_arg1, after.func_arg2); - if(after.funcN) - after.funcN(C, after.func_argN, after.func_arg2); - - if(after.handle_func) - after.handle_func(C, after.handle_func_arg, after.retval); - if(after.butm_func) - after.butm_func(C, after.butm_func_arg, after.a2); - if(after.optype) WM_operator_name_call(C, after.optype->idname, after.opcontext, after.opptr); if(after.opptr) { @@ -308,6 +301,16 @@ static void ui_apply_but_funcs_after(bContext *C) CTX_store_set(C, NULL); CTX_store_free(after.context); } + + if(after.func) + after.func(C, after.func_arg1, after.func_arg2); + if(after.funcN) + after.funcN(C, after.func_argN, after.func_arg2); + + if(after.handle_func) + after.handle_func(C, after.handle_func_arg, after.retval); + if(after.butm_func) + after.butm_func(C, after.butm_func_arg, after.a2); } } @@ -3344,7 +3347,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s /* automatic open pulldown block timer */ if(ELEM3(but->type, BLOCK, PULLDOWN, ICONTEXTROW)) { - if(!data->autoopentimer) { + if(data->used_mouse && !data->autoopentimer) { int time; if(but->block->auto_open==2) time= 1; // test for toolbox @@ -3447,6 +3450,9 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA if(but->block->auto_open_last+BUTTON_AUTO_OPEN_THRESH < PIL_check_seconds_timer()) but->block->auto_open= 0; + if(type == BUTTON_ACTIVATE_OVER) { + data->used_mouse= 1; + } button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); if(type == BUTTON_ACTIVATE_OPEN) { @@ -3765,12 +3771,19 @@ static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut * button_activate_exit(C, data, but, 1); } else if(menu->menuretval == UI_RETURN_OUT) { - if(ui_mouse_inside_button(data->region, but, event->x, event->y)) { + if(event->type==MOUSEMOVE && ui_mouse_inside_button(data->region, but, event->x, event->y)) { button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); } else { - data->cancel= 1; - button_activate_exit(C, data, but, 1); + but= ui_but_find_activated(data->region); + if(but) { + but->active->used_mouse= 0; + button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); + } + else { + data->cancel= 1; + button_activate_exit(C, data, but, 1); + } } } } diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index 4d8ec5996be..315b8693905 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -728,21 +728,28 @@ static void icon_create_mipmap(struct PreviewImage* prv_img, int miplevel) } /* create single icon from jpg, png etc. */ -static void icon_from_image(Image *img, int miplevel) +static void icon_from_image(Scene *scene, Image *img, int miplevel) { + ImBuf *ibuf= NULL; + ImageUser iuser; + PreviewImage *pi; unsigned int pr_size; short image_loaded = 0; - struct ImBuf* ibuf=NULL; - PreviewImage* pi; /* img->ok is zero when Image cannot load */ if (img==NULL || img->ok==0) return; + /* setup dummy image user */ + memset(&iuser, 0, sizeof(ImageUser)); + iuser.ok= iuser.framenr= 1; + iuser.scene= scene; + /* elubie: this needs to be changed: here image is always loaded if not already there. Very expensive for large images. Need to find a way to only get existing ibuf */ - ibuf = BKE_image_get_ibuf(img, NULL); + + ibuf = BKE_image_get_ibuf(img, &iuser); if(ibuf==NULL || ibuf->rect==NULL) { return; } @@ -788,7 +795,7 @@ static void icon_set_image(Scene *scene, ID *id, PreviewImage* prv_img, int mipl /* no drawing (see last parameter doDraw, just calculate preview image - hopefully small enough to be fast */ if (GS(id->name) == ID_IM) - icon_from_image((struct Image*)id, miplevel); + icon_from_image(scene, (struct Image*)id, miplevel); else { /* create the preview rect */ icon_create_mipmap(prv_img, miplevel); diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 94280ec37d3..f9816235b88 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -936,7 +936,7 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN but->rnasearchprop= searchprop; but->flag |= UI_ICON_LEFT|UI_TEXT_LEFT; - uiButSetSearchFunc(but, rna_search_cb, but, NULL); + uiButSetSearchFunc(but, rna_search_cb, but, NULL, NULL); } } diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index eaf78ae89ef..a20884a61a3 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -104,6 +104,8 @@ static int panel_aligned(ScrArea *sa, ARegion *ar) SpaceButs *sbuts= sa->spacedata.first; return sbuts->align; } + else if(sa->spacetype==SPACE_FILE && ar->regiontype == RGN_TYPE_CHANNELS) + return BUT_VERTICAL; else if(ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS)) return BUT_VERTICAL; @@ -126,6 +128,8 @@ static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa) } else if(ar->regiontype==RGN_TYPE_UI) return 1; + else if(sa->spacetype==SPACE_FILE && ar->regiontype == RGN_TYPE_CHANNELS) + return 1; /* in case panel is added or disappears */ for(pa=ar->panels.first; pa; pa=pa->next) { diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 61cf612e912..27fb0731d67 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -437,6 +437,7 @@ struct uiSearchItems { int *icons; AutoComplete *autocpl; + void *active; }; typedef struct uiSearchboxData { @@ -459,6 +460,14 @@ int uiSearchItemAdd(uiSearchItems *items, const char *name, void *poin, int icon return 1; } + /* hijack for finding active item */ + if(items->active) { + if(poin==items->active) + items->offset_i= items->totitem; + items->totitem++; + return 1; + } + if(items->totitem>=items->maxitem) { items->more= 1; return 0; @@ -597,20 +606,52 @@ void ui_searchbox_update(bContext *C, ARegion *ar, uiBut *but, int reset) /* reset vars */ data->items.totitem= 0; data->items.more= 0; - if(reset==0) + if(reset==0) { data->items.offset_i= data->items.offset; + } else { data->items.offset_i= data->items.offset= 0; data->active= 0; + + /* handle active */ + if(but->search_func && but->func_arg2) { + data->items.active= but->func_arg2; + but->search_func(C, but->search_arg, but->editstr, &data->items); + data->items.active= NULL; + + /* found active item, calculate real offset by centering it */ + if(data->items.totitem) { + /* first case, begin of list */ + if(data->items.offset_i < data->items.maxitem) { + data->active= data->items.offset_i+1; + data->items.offset_i= 0; + } + else { + /* second case, end of list */ + if(data->items.totitem - data->items.offset_i <= data->items.maxitem) { + data->active= 1 + data->items.offset_i - data->items.totitem + data->items.maxitem; + data->items.offset_i= data->items.totitem - data->items.maxitem; + } + else { + /* center active item */ + data->items.offset_i -= data->items.maxitem/2; + data->active= 1 + data->items.maxitem/2; + } + } + } + data->items.offset= data->items.offset_i; + data->items.totitem= 0; + } } /* callback */ if(but->search_func) but->search_func(C, but->search_arg, but->editstr, &data->items); - if(reset) { + /* handle case where editstr is equal to one of items */ + if(reset && data->active==0) { int a; - /* handle case where editstr is equal to one of items */ + for(a=0; aitems.totitem; a++) { char *cpoin= strchr(data->items.names[a], '|'); @@ -666,13 +707,15 @@ static void ui_searchbox_region_draw(const bContext *C, ARegion *ar) } /* indicate more */ if(data->items.more) { + ui_searchbox_butrect(&rect, data, data->items.maxitem-1); glEnable(GL_BLEND); - UI_icon_draw((data->bbox.xmax-data->bbox.xmin)/2, 8, ICON_TRIA_DOWN); + UI_icon_draw((rect.xmax-rect.xmin)/2, rect.ymin-9, ICON_TRIA_DOWN); glDisable(GL_BLEND); } if(data->items.offset) { + ui_searchbox_butrect(&rect, data, 0); glEnable(GL_BLEND); - UI_icon_draw((data->bbox.xmax-data->bbox.xmin)/2, data->bbox.ymax-13, ICON_TRIA_UP); + UI_icon_draw((rect.xmax-rect.xmin)/2, rect.ymax-7, ICON_TRIA_UP); glDisable(GL_BLEND); } } @@ -2719,6 +2762,8 @@ void uiPupMenuReports(bContext *C, ReportList *reports) BLI_dynstr_appendf(ds, "Error %%i%d%%t|%s", ICON_ERROR, report->message); else if(report->type >= RPT_WARNING) BLI_dynstr_appendf(ds, "Warning %%i%d%%t|%s", ICON_ERROR, report->message); + else if(report->type >= RPT_INFO) + BLI_dynstr_appendf(ds, "Info %%t|%s", report->message); } str= BLI_dynstr_get_cstring(ds); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index a006187c4aa..8f1d57b28ed 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -112,6 +112,7 @@ static uiBlock *search_menu(bContext *C, ARegion *ar, void *arg_litem) { static char search[256]; static TemplateID template; + PointerRNA idptr; wmEvent event; wmWindow *win= CTX_wm_window(C); uiBlock *block; @@ -122,6 +123,9 @@ static uiBlock *search_menu(bContext *C, ARegion *ar, void *arg_litem) /* arg_litem is malloced, can be freed by parent button */ template= *((TemplateID*)arg_litem); + /* get active id for showing first item */ + idptr= RNA_property_pointer_get(&template.ptr, template.prop); + block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS); uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1); @@ -129,7 +133,7 @@ static uiBlock *search_menu(bContext *C, ARegion *ar, void *arg_litem) uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL); but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 0, 150, 19, ""); - uiButSetSearchFunc(but, id_search_cb, &template, id_search_call_cb); + uiButSetSearchFunc(but, id_search_cb, &template, id_search_call_cb, idptr.data); uiBoundsBlock(block, 6); uiBlockSetDirection(block, UI_DOWN); @@ -157,9 +161,15 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event) switch(event) { case UI_ID_BROWSE: case UI_ID_PIN: + printf("warning, id event %d shouldnt come here\n", event); + break; case UI_ID_OPEN: case UI_ID_ADD_NEW: - printf("warning, id event %d shouldnt come here\n", event); + if(template->idlb->last) { + RNA_id_pointer_create(template->idlb->last, &idptr); + RNA_property_pointer_set(&template->ptr, template->prop, idptr); + RNA_property_update(C, &template->ptr, template->prop); + } break; case UI_ID_DELETE: memset(&idptr, 0, sizeof(idptr)); @@ -197,12 +207,13 @@ static void template_ID(bContext *C, uiBlock *block, TemplateID *template, Struc idptr= RNA_property_pointer_get(&template->ptr, template->prop); lb= template->idlb; + uiBlockBeginAlign(block); + if(idptr.type) type= idptr.type; if(type) uiDefIconBut(block, LABEL, 0, RNA_struct_ui_icon(type), 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); - uiBlockBeginAlign(block); if(flag & UI_ID_BROWSE) uiDefBlockButN(block, search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X, UI_UNIT_Y, "Browse ID data"); @@ -221,6 +232,7 @@ static void template_ID(bContext *C, uiBlock *block, TemplateID *template, Struc if(newop) { but= uiDefIconTextButO(block, BUT, newop, WM_OP_EXEC_REGION_WIN, ICON_ZOOMIN, "Add New", 0, 0, w, UI_UNIT_Y, NULL); + uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_ADD_NEW)); } else { but= uiDefIconTextBut(block, BUT, 0, ICON_ZOOMIN, "Add New", 0, 0, w, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL); @@ -1474,93 +1486,63 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname) /************************* List Template **************************/ -#if 0 -typedef struct ListItem { - PointerRNA ptr; - PropertyRNA *prop; - PropertyRNA *activeprop; - - PointerRNA activeptr; - int activei; - - int selected; -} ListItem; - -static void list_item_cb(bContext *C, void *arg_item, void *arg_unused) -{ - ListItem *item= (ListItem*)arg_item; - PropertyType activetype; - char *activename; - - if(item->selected) { - activetype= RNA_property_type(item->activeprop); - - if(activetype == PROP_POINTER) - RNA_property_pointer_set(&item->ptr, item->activeprop, item->activeptr); - else if(activetype == PROP_INT) - RNA_property_int_set(&item->ptr, item->activeprop, item->activei); - else if(activetype == PROP_STRING) { - activename= RNA_struct_name_get_alloc(&item->activeptr, NULL, 0); - RNA_property_string_set(&item->ptr, item->activeprop, activename); - MEM_freeN(activename); - } - } -} -#endif - -ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, char *activepropname, int rows, int columns, int compact) +ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, PointerRNA *activeptr, char *activepropname, int rows, int columns, int compact) { CollectionPointerLink *link; - PropertyRNA *prop, *activeprop; + PropertyRNA *prop= NULL, *activeprop; PropertyType type, activetype; - PointerRNA activeptr; uiLayout *box, *row, *col; uiBlock *block; uiBut *but; + Panel *pa; ListBase lb; - char *name, *activename= NULL, str[32]; - int i= 1, activei= 0, len, items, found; - static int scroll = 1; + char *name, str[32]; + int i= 0, activei= 0, len, items, found, min, max; lb.first= lb.last= NULL; /* validate arguments */ - if(!ptr->data) - return lb; - - prop= RNA_struct_find_property(ptr, propname); - if(!prop) { - printf("uiTemplateList: property not found: %s\n", propname); + block= uiLayoutGetBlock(layout); + pa= block->panel; + + if(!pa) { + printf("uiTemplateList: only works inside a panel.\n"); return lb; } - activeprop= RNA_struct_find_property(ptr, activepropname); + if(!activeptr->data) + return lb; + + if(ptr->data) { + prop= RNA_struct_find_property(ptr, propname); + if(!prop) { + printf("uiTemplateList: property not found: %s\n", propname); + return lb; + } + } + + activeprop= RNA_struct_find_property(activeptr, activepropname); if(!activeprop) { printf("uiTemplateList: property not found: %s\n", activepropname); return lb; } - type= RNA_property_type(prop); - if(type != PROP_COLLECTION) { - printf("uiTemplateList: expected collection property.\n"); - return lb; + if(prop) { + type= RNA_property_type(prop); + if(type != PROP_COLLECTION) { + printf("uiTemplateList: expected collection property.\n"); + return lb; + } } activetype= RNA_property_type(activeprop); - if(!ELEM3(activetype, PROP_POINTER, PROP_INT, PROP_STRING)) { - printf("uiTemplateList: expected pointer, integer or string property.\n"); + if(activetype != PROP_INT) { + printf("uiTemplateList: expected integer property.\n"); return lb; } /* get active data */ - if(activetype == PROP_POINTER) - activeptr= RNA_property_pointer_get(ptr, activeprop); - else if(activetype == PROP_INT) - activei= RNA_property_int_get(ptr, activeprop); - else if(activetype == PROP_STRING) - activename= RNA_property_string_get_alloc(ptr, activeprop, NULL, 0); - - block= uiLayoutGetBlock(layout); + activei= RNA_property_int_get(activeptr, activeprop); if(compact) { /* compact layout */ @@ -1568,111 +1550,196 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, char row= uiLayoutRow(layout, 1); - RNA_PROP_BEGIN(ptr, itemptr, prop) { - if(activetype == PROP_POINTER) - found= (activeptr.data == itemptr.data); - else if(activetype == PROP_INT) + if(ptr->data && prop) { + /* create list items */ + RNA_PROP_BEGIN(ptr, itemptr, prop) { found= (activei == i); - else if(activetype == PROP_STRING) - found= (strcmp(activename, name) == 0); - if(found) { - name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); - if(name) { - uiItemL(row, name, RNA_struct_ui_icon(itemptr.type)); - MEM_freeN(name); + if(found) { + /* create button */ + name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); + if(name) { + uiItemL(row, name, RNA_struct_ui_icon(itemptr.type)); + MEM_freeN(name); + } + + /* add to list to return */ + link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); + link->ptr= itemptr; + BLI_addtail(&lb, link); } - link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); - link->ptr= itemptr; - BLI_addtail(&lb, link); + i++; } - - i++; + RNA_PROP_END; } - RNA_PROP_END; - if(i == 1) + /* if not found, add in dummy button */ + if(i == 0) uiItemL(row, "", 0); - sprintf(str, "%d :", i-1); - but= uiDefIconTextButR(block, NUM, 0, 0, str, 0,0,UI_UNIT_X*5,UI_UNIT_Y, ptr, activepropname, 0, 0, 0, 0, 0, ""); - if(i == 1) + /* next/prev button */ + sprintf(str, "%d :", i); + but= uiDefIconTextButR(block, NUM, 0, 0, str, 0,0,UI_UNIT_X*5,UI_UNIT_Y, activeptr, activepropname, 0, 0, 0, 0, 0, ""); + if(i == 0) uiButSetFlag(but, UI_BUT_DISABLED); } else { + /* default rows/columns */ if(rows == 0) rows= 5; if(columns == 0) columns= 1; - items= rows*columns; - + /* layout */ box= uiLayoutBox(layout); row= uiLayoutRow(box, 0); col = uiLayoutColumn(row, 1); uiBlockSetEmboss(block, UI_EMBOSSN); - len= RNA_property_collection_length(ptr, prop); - scroll= MIN2(scroll, len-items+1); - scroll= MAX2(scroll, 1); + /* init numbers */ + RNA_property_int_range(activeptr, activeprop, &min, &max); - RNA_PROP_BEGIN(ptr, itemptr, prop) { - if(i >= scroll && ilist_scroll= MIN2(pa->list_scroll, len-items); + pa->list_scroll= MAX2(pa->list_scroll, 0); - item->ptr= *ptr; - item->prop= prop; - item->activeprop= activeprop; - item->activeptr= itemptr; - item->activei= i; + if(ptr->data && prop) { + /* create list items */ + RNA_PROP_BEGIN(ptr, itemptr, prop) { + if(i >= pa->list_scroll && ilist_scroll+items) { + name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); - if(activetype == PROP_POINTER) - item->selected= (activeptr.data == itemptr.data)? i: -1; - else if(activetype == PROP_INT) - item->selected= (activei == i)? i: -1; - else if(activetype == PROP_STRING) - item->selected= (strcmp(activename, name) == 0)? i: -1; -#endif + if(name) { + /* create button */ + but= uiDefIconTextButR(block, ROW, 0, RNA_struct_ui_icon(itemptr.type), name, 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); + uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); - //but= uiDefIconTextButI(block, ROW, 0, RNA_struct_ui_icon(itemptr.type), name, 0,0,UI_UNIT_X*10,UI_UNIT_Y, &item->selected, 0, i, 0, 0, ""); - but= uiDefIconTextButR(block, ROW, 0, RNA_struct_ui_icon(itemptr.type), name, 0,0,UI_UNIT_X*10,UI_UNIT_Y, ptr, activepropname, 0/*&item->selected*/, 0, i, 0, 0, ""); - uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); - //uiButSetNFunc(but, list_item_cb, item, NULL); - - MEM_freeN(name); + MEM_freeN(name); + } + /* add to list to return */ link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); link->ptr= itemptr; BLI_addtail(&lb, link); } + + i++; } - - i++; + RNA_PROP_END; } - RNA_PROP_END; - while(i < scroll+items) { - if(i >= scroll) + /* add dummy buttons to fill space */ + while(i < pa->list_scroll+items) { + if(i >= pa->list_scroll) uiItemL(col, "", 0); i++; } uiBlockSetEmboss(block, UI_EMBOSS); + /* add scrollbar */ if(len > items) { col= uiLayoutColumn(row, 0); - uiDefButI(block, SCROLL, 0, "", 0,0,UI_UNIT_X*0.75,UI_UNIT_Y*items, &scroll, 1, len-items+1, items, 0, ""); + uiDefButI(block, SCROLL, 0, "", 0,0,UI_UNIT_X*0.75,UI_UNIT_Y*items, &pa->list_scroll, 0, len-items, items, 0, ""); } - - //uiDefButI(block, SCROLL, 0, "", 0,0,UI_UNIT_X*15,UI_UNIT_Y*0.75, &scroll, 1, 16-5, 5, 0, ""); } + /* return items in list */ return lb; } +/************************* Operator Search Template **************************/ + +static void operator_call_cb(struct bContext *C, void *arg1, void *arg2) +{ + wmOperatorType *ot= arg2; + + if(ot) + WM_operator_name_call(C, ot->idname, WM_OP_INVOKE_DEFAULT, NULL); +} + +static void operator_search_cb(const struct bContext *C, void *arg, char *str, uiSearchItems *items) +{ + wmOperatorType *ot = WM_operatortype_first(); + + for(; ot; ot= ot->next) { + + if(BLI_strcasestr(ot->name, str)) { + if(ot->poll==NULL || ot->poll((bContext *)C)) { + char name[256]; + int len= strlen(ot->name); + + /* display name for menu, can hold hotkey */ + BLI_strncpy(name, ot->name, 256); + + /* check for hotkey */ + if(len < 256-6) { + if(WM_key_event_operator_string(C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, &name[len+1], 256-len-1)) + name[len]= '|'; + } + + if(0==uiSearchItemAdd(items, name, ot, 0)) + break; + } + } + } +} + +void uiTemplateOperatorSearch(uiLayout *layout) +{ + uiBlock *block; + uiBut *but; + static char search[256]= ""; + + block= uiLayoutGetBlock(layout); + uiBlockSetCurLayout(block, layout); + + but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 0, 0, UI_UNIT_X*6, UI_UNIT_Y, ""); + uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb, NULL); +} + +/************************* Running Jobs Template **************************/ + +#define B_STOPRENDER 1 +#define B_STOPCAST 2 +#define B_STOPANIM 3 + +static void do_running_jobs(bContext *C, void *arg, int event) +{ + switch(event) { + case B_STOPRENDER: + G.afbreek= 1; + break; + case B_STOPCAST: + WM_jobs_stop(CTX_wm_manager(C), CTX_wm_screen(C)); + break; + case B_STOPANIM: + ED_screen_animation_timer(C, 0, 0); + break; + } +} + +void uiTemplateRunningJobs(uiLayout *layout, bContext *C) +{ + bScreen *screen= CTX_wm_screen(C); + Scene *scene= CTX_data_scene(C); + wmWindowManager *wm= CTX_wm_manager(C); + uiBlock *block; + + block= uiLayoutGetBlock(layout); + uiBlockSetCurLayout(block, layout); + + uiBlockSetHandleFunc(block, do_running_jobs, NULL); + + if(WM_jobs_test(wm, scene)) + uiDefIconTextBut(block, BUT, B_STOPRENDER, ICON_REC, "Render", 0,0,75,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop rendering"); + if(WM_jobs_test(wm, screen)) + uiDefIconTextBut(block, BUT, B_STOPCAST, ICON_REC, "Capture", 0,0,85,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop screencast"); + if(screen->animtimer) + uiDefIconTextBut(block, BUT, B_STOPANIM, ICON_REC, "Anim Player", 0,0,85,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop animation playback"); +} + diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 3ed81a3e9bc..eb79848d7d2 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -327,7 +327,7 @@ static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_params) uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL); but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 0, 150, 19, ""); - uiButSetSearchFunc(but, id_search_cb, ¶ms, id_search_call_cb); + uiButSetSearchFunc(but, id_search_cb, ¶ms, id_search_call_cb, NULL); uiBoundsBlock(block, 6); uiBlockSetDirection(block, UI_DOWN); diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index ddf31c0db66..ed2d00cb00d 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1679,12 +1679,12 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat rect1= *rect; if(horizontal) { - fac= (rect->xmax - rect->xmin)/(size-1); + fac= (rect->xmax - rect->xmin)/(size); rect1.xmin= rect1.xmin + ceil(fac*(value - but->softmin)); rect1.xmax= rect1.xmin + ceil(fac*(but->a1 - but->softmin)); } else { - fac= (rect->ymax - rect->ymin)/(size-1); + fac= (rect->ymax - rect->ymin)/(size); rect1.ymax= rect1.ymax - ceil(fac*(value - but->softmin)); rect1.ymin= rect1.ymax - ceil(fac*(but->a1 - but->softmin)); } diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 83a4211dda1..22e3b4060a4 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -234,5 +234,14 @@ void MESH_OT_colors_mirror(struct wmOperatorType *ot); void MESH_OT_delete(struct wmOperatorType *ot); void MESH_OT_rip(struct wmOperatorType *ot); +/* ******************* mesh_layers.c */ + +void MESH_OT_uv_texture_add(struct wmOperatorType *ot); +void MESH_OT_uv_texture_remove(struct wmOperatorType *ot); +void MESH_OT_vertex_color_add(struct wmOperatorType *ot); +void MESH_OT_vertex_color_remove(struct wmOperatorType *ot); +void MESH_OT_sticky_add(struct wmOperatorType *ot); +void MESH_OT_sticky_remove(struct wmOperatorType *ot); + #endif // MESH_INTERN_H diff --git a/source/blender/editors/mesh/mesh_layers.c b/source/blender/editors/mesh/mesh_layers.c new file mode 100644 index 00000000000..99d50d1a9b0 --- /dev/null +++ b/source/blender/editors/mesh/mesh_layers.c @@ -0,0 +1,424 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_customdata_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" +#include "DNA_windowmanager_types.h" + +#include "BKE_context.h" +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_displist.h" +#include "BKE_global.h" +#include "BKE_mesh.h" + +#include "BLI_editVert.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_mesh.h" +#include "ED_view3d.h" + +#include "mesh_intern.h" + +static void delete_customdata_layer(Mesh *me, CustomDataLayer *layer) +{ + CustomData *data= (me->edit_mesh)? &me->edit_mesh->fdata: &me->fdata; + void *actlayerdata, *rndlayerdata, *clonelayerdata, *masklayerdata, *layerdata=layer->data; + int type= layer->type; + int index= CustomData_get_layer_index(data, type); + int i, actindex, rndindex, cloneindex, maskindex; + + /* ok, deleting a non-active layer needs to preserve the active layer indices. + to do this, we store a pointer to the .data member of both layer and the active layer, + (to detect if we're deleting the active layer or not), then use the active + layer data pointer to find where the active layer has ended up. + + this is necassary because the deletion functions only support deleting the active + layer. */ + actlayerdata = data->layers[CustomData_get_active_layer_index(data, type)].data; + rndlayerdata = data->layers[CustomData_get_render_layer_index(data, type)].data; + clonelayerdata = data->layers[CustomData_get_clone_layer_index(data, type)].data; + masklayerdata = data->layers[CustomData_get_mask_layer_index(data, type)].data; + CustomData_set_layer_active(data, type, layer - &data->layers[index]); + + if(me->edit_mesh) { + EM_free_data_layer(me->edit_mesh, data, type); + } + else { + CustomData_free_layer_active(data, type, me->totface); + mesh_update_customdata_pointers(me); + } + + if(!CustomData_has_layer(data, type)) + if(type == CD_MCOL && (G.f & G_VERTEXPAINT)) + G.f &= ~G_VERTEXPAINT; /* get out of vertexpaint mode */ + + /* reconstruct active layer */ + if (actlayerdata != layerdata) { + /* find index */ + actindex = CustomData_get_layer_index(data, type); + for (i=actindex; itotlayer; i++) { + if (data->layers[i].data == actlayerdata) { + actindex = i - actindex; + break; + } + } + + /* set index */ + CustomData_set_layer_active(data, type, actindex); + } + + if (rndlayerdata != layerdata) { + /* find index */ + rndindex = CustomData_get_layer_index(data, type); + for (i=rndindex; itotlayer; i++) { + if (data->layers[i].data == rndlayerdata) { + rndindex = i - rndindex; + break; + } + } + + /* set index */ + CustomData_set_layer_render(data, type, rndindex); + } + + if (clonelayerdata != layerdata) { + /* find index */ + cloneindex = CustomData_get_layer_index(data, type); + for (i=cloneindex; itotlayer; i++) { + if (data->layers[i].data == clonelayerdata) { + cloneindex = i - cloneindex; + break; + } + } + + /* set index */ + CustomData_set_layer_clone(data, type, cloneindex); + } + + if (masklayerdata != layerdata) { + /* find index */ + maskindex = CustomData_get_layer_index(data, type); + for (i=maskindex; itotlayer; i++) { + if (data->layers[i].data == masklayerdata) { + maskindex = i - maskindex; + break; + } + } + + /* set index */ + CustomData_set_layer_mask(data, type, maskindex); + } +} + +/*********************** UV texture operators ************************/ + +static int uv_texture_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + EditMesh *em; + int layernum; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + + if(scene->obedit == ob) { + em= me->edit_mesh; + + layernum= CustomData_number_of_layers(&em->fdata, CD_MTFACE); + if(layernum >= MAX_MTFACE) + return OPERATOR_CANCELLED; + + EM_add_data_layer(em, &em->fdata, CD_MTFACE); + CustomData_set_layer_active(&em->fdata, CD_MTFACE, layernum); + } + else if(ob) { + layernum= CustomData_number_of_layers(&me->fdata, CD_MTFACE); + if(layernum >= MAX_MTFACE) + return OPERATOR_CANCELLED; + + if(me->mtface) + CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface); + else + CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface); + + CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum); + mesh_update_customdata_pointers(me); + } + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_uv_texture_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add UV Texture"; + ot->idname= "MESH_OT_uv_texture_add"; + + /* api callbacks */ + ot->exec= uv_texture_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int uv_texture_remove_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + CustomDataLayer *cdl; + int index; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + index= CustomData_get_active_layer_index(&me->fdata, CD_MTFACE); + cdl= (index == -1)? NULL: &me->fdata.layers[index]; + + if(!cdl) + return OPERATOR_CANCELLED; + + delete_customdata_layer(me, cdl); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_uv_texture_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove UV Texture"; + ot->idname= "MESH_OT_uv_texture_remove"; + + /* api callbacks */ + ot->exec= uv_texture_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/*********************** vertex color operators ************************/ + +static int vertex_color_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + EditMesh *em; + MCol *mcol; + int layernum; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + + if(scene->obedit == ob) { + em= me->edit_mesh; + + layernum= CustomData_number_of_layers(&em->fdata, CD_MCOL); + if(layernum >= MAX_MCOL) + return OPERATOR_CANCELLED; + + EM_add_data_layer(em, &em->fdata, CD_MCOL); + CustomData_set_layer_active(&em->fdata, CD_MCOL, layernum); + } + else { + layernum= CustomData_number_of_layers(&me->fdata, CD_MCOL); + if(layernum >= MAX_MCOL) + return OPERATOR_CANCELLED; + + mcol= me->mcol; + + if(me->mcol) + CustomData_add_layer(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface); + else + CustomData_add_layer(&me->fdata, CD_MCOL, CD_DEFAULT, NULL, me->totface); + + CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum); + mesh_update_customdata_pointers(me); + + if(!mcol) + shadeMeshMCol(scene, ob, me); + } + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_vertex_color_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Vertex Color"; + ot->idname= "MESH_OT_vertex_color_add"; + + /* api callbacks */ + ot->exec= vertex_color_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_color_remove_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + CustomDataLayer *cdl; + int index; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + index= CustomData_get_active_layer_index(&me->fdata, CD_MCOL); + cdl= (index == -1)? NULL: &me->fdata.layers[index]; + + if(!cdl) + return OPERATOR_CANCELLED; + + delete_customdata_layer(me, cdl); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_vertex_color_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Vertex Color"; + ot->idname= "MESH_OT_vertex_color_remove"; + + /* api callbacks */ + ot->exec= vertex_color_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/*********************** sticky operators ************************/ + +static int sticky_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + + if(me->msticky) + return OPERATOR_CANCELLED; + + // XXX RE_make_sticky(); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_sticky_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Sticky"; + ot->idname= "MESH_OT_sticky_add"; + + /* api callbacks */ + ot->exec= sticky_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int sticky_remove_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Mesh *me; + + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; + + me= (Mesh*)ob->data; + + if(!me->msticky) + return OPERATOR_CANCELLED; + + CustomData_free_layer_active(&me->vdata, CD_MSTICKY, me->totvert); + me->msticky= NULL; + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void MESH_OT_sticky_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Sticky"; + ot->idname= "MESH_OT_sticky_remove"; + + /* api callbacks */ + ot->exec= sticky_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 5a86180a60f..2a9357ed0f0 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -183,6 +183,12 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_knife_cut); WM_operatortype_append(MESH_OT_rip); + WM_operatortype_append(MESH_OT_uv_texture_add); + WM_operatortype_append(MESH_OT_uv_texture_remove); + WM_operatortype_append(MESH_OT_vertex_color_add); + WM_operatortype_append(MESH_OT_vertex_color_remove); + WM_operatortype_append(MESH_OT_sticky_add); + WM_operatortype_append(MESH_OT_sticky_remove); } /* note mesh keymap also for other space? */ diff --git a/source/blender/editors/object/editkey.c b/source/blender/editors/object/editkey.c index 913046c5ab8..1c31c7c7653 100644 --- a/source/blender/editors/object/editkey.c +++ b/source/blender/editors/object/editkey.c @@ -55,6 +55,7 @@ #include "BKE_action.h" #include "BKE_anim.h" +#include "BKE_context.h" #include "BKE_curve.h" #include "BKE_depsgraph.h" #include "BKE_global.h" @@ -70,11 +71,15 @@ #include "ED_object.h" +#include "RNA_access.h" + +#include "WM_api.h" +#include "WM_types.h" + #include "object_intern.h" /* XXX */ static void BIF_undo_push() {} -static void error() {} /* XXX */ #if 0 // XXX old animation system @@ -394,25 +399,6 @@ void insert_curvekey(Scene *scene, Curve *cu, short rel) /* ******************** */ -void insert_shapekey(Scene *scene, Object *ob) -{ - if(get_mesh(ob) && get_mesh(ob)->mr) { - error("Cannot create shape keys on a multires mesh."); - } - else { - Key *key; - - if(ob->type==OB_MESH) insert_meshkey(scene, ob->data, 1); - else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob->data, 1); - else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob->data, 1); - - key= ob_get_key(ob); - ob->shapenr= BLI_countlist(&key->block); - - BIF_undo_push("Add Shapekey"); - } -} - void delete_key(Scene *scene, Object *ob) { KeyBlock *kb, *rkb; @@ -473,6 +459,123 @@ void delete_key(Scene *scene, Object *ob) BIF_undo_push("Delete Shapekey"); } +/********************** shape key operators *********************/ + +static int shape_key_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Key *key; + + if(!ob) + return OPERATOR_CANCELLED; + + if(ob->type==OB_MESH) insert_meshkey(scene, ob->data, 1); + else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob->data, 1); + else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob->data, 1); + + key= ob_get_key(ob); + ob->shapenr= BLI_countlist(&key->block); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_shape_key_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Shape Key"; + ot->idname= "OBJECT_OT_shape_key_add"; + + /* api callbacks */ + ot->exec= shape_key_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int shape_key_remove_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Scene *scene= CTX_data_scene(C); + Main *bmain= CTX_data_main(C); + KeyBlock *kb, *rkb; + Key *key; + //IpoCurve *icu; + + if(!ob) + return OPERATOR_CANCELLED; + + key= ob_get_key(ob); + if(key==NULL) + return OPERATOR_CANCELLED; + + kb= BLI_findlink(&key->block, ob->shapenr-1); + + if(kb) { + for(rkb= key->block.first; rkb; rkb= rkb->next) + if(rkb->relative == ob->shapenr-1) + rkb->relative= 0; + + BLI_remlink(&key->block, kb); + key->totkey--; + if(key->refkey== kb) + key->refkey= key->block.first; + + if(kb->data) MEM_freeN(kb->data); + MEM_freeN(kb); + + for(kb= key->block.first; kb; kb= kb->next) + if(kb->adrcode>=ob->shapenr) + kb->adrcode--; + +#if 0 // XXX old animation system + if(key->ipo) { + + for(icu= key->ipo->curve.first; icu; icu= icu->next) { + if(icu->adrcode==ob->shapenr-1) { + BLI_remlink(&key->ipo->curve, icu); + free_ipo_curve(icu); + break; + } + } + for(icu= key->ipo->curve.first; icu; icu= icu->next) + if(icu->adrcode>=ob->shapenr) + icu->adrcode--; + } +#endif // XXX old animation system + + if(ob->shapenr>1) ob->shapenr--; + } + + if(key->totkey==0) { + if(GS(key->from->name)==ID_ME) ((Mesh *)key->from)->key= NULL; + else if(GS(key->from->name)==ID_CU) ((Curve *)key->from)->key= NULL; + else if(GS(key->from->name)==ID_LT) ((Lattice *)key->from)->key= NULL; + + free_libblock_us(&(bmain->key), key); + } + + DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_shape_key_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Shape Key"; + ot->idname= "OBJECT_OT_shape_key_remove"; + + /* api callbacks */ + ot->exec= shape_key_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + void move_keys(Object *ob) { #if 0 @@ -560,3 +663,4 @@ void move_keys(Object *ob) BIF_undo_push("Move Shapekey(s)"); #endif } + diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 1eb867e19a0..a52acdd4e1e 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -92,5 +92,19 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); +/* object_vgroup.c */ +void OBJECT_OT_vertex_group_add(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_remove(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_assign(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_remove_from(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_select(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_deselect(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_copy_to_linked(struct wmOperatorType *ot); +void OBJECT_OT_vertex_group_copy(struct wmOperatorType *ot); + +/* editkey.c */ +void OBJECT_OT_shape_key_add(struct wmOperatorType *ot); +void OBJECT_OT_shape_key_remove(struct wmOperatorType *ot); + #endif /* ED_OBJECT_INTERN_H */ diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index cfee6a55152..6fa78a53840 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -104,6 +104,18 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_mdef_bind); WM_operatortype_append(OBJECT_OT_constraint_add); + + WM_operatortype_append(OBJECT_OT_vertex_group_add); + WM_operatortype_append(OBJECT_OT_vertex_group_remove); + WM_operatortype_append(OBJECT_OT_vertex_group_assign); + WM_operatortype_append(OBJECT_OT_vertex_group_remove_from); + WM_operatortype_append(OBJECT_OT_vertex_group_select); + WM_operatortype_append(OBJECT_OT_vertex_group_deselect); + WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_linked); + WM_operatortype_append(OBJECT_OT_vertex_group_copy); + + WM_operatortype_append(OBJECT_OT_shape_key_add); + WM_operatortype_append(OBJECT_OT_shape_key_remove); } void ED_keymap_object(wmWindowManager *wm) diff --git a/source/blender/editors/mesh/editdeform.c b/source/blender/editors/object/object_vgroup.c similarity index 80% rename from source/blender/editors/mesh/editdeform.c rename to source/blender/editors/object/object_vgroup.c index 3ccd4d56ece..fb71fc09108 100644 --- a/source/blender/editors/mesh/editdeform.c +++ b/source/blender/editors/object/object_vgroup.c @@ -48,19 +48,26 @@ #include "BLI_blenlib.h" #include "BLI_editVert.h" +#include "BKE_context.h" #include "BKE_customdata.h" -#include "BKE_DerivedMesh.h" -#include "BKE_depsgraph.h" #include "BKE_deform.h" +#include "BKE_depsgraph.h" +#include "BKE_DerivedMesh.h" #include "BKE_displist.h" #include "BKE_global.h" #include "BKE_lattice.h" #include "BKE_mesh.h" #include "BKE_utildefines.h" +#include "RNA_access.h" + +#include "WM_api.h" +#include "WM_types.h" + #include "ED_mesh.h" #include "ED_view3d.h" -#include "mesh_intern.h" + +#include "object_intern.h" /* XXX */ static void BIF_undo_push() {} @@ -719,18 +726,13 @@ void add_vert_to_defgroup (Object *ob, bDeformGroup *dg, int vertnum, } /* Only available in editmode */ -void assign_verts_defgroup (Object *obedit, float weight) +void assign_verts_defgroup (Object *ob, float weight) { - Object *ob; EditVert *eve; bDeformGroup *dg, *eg; MDeformWeight *newdw; MDeformVert *dvert; int i, done; - -// XXX if(multires_level1_test()) return; - - ob= obedit; if (!ob) return; @@ -883,18 +885,13 @@ float get_vert_defgroup (Object *ob, bDeformGroup *dg, int vertnum) /* Only available in editmode */ /* removes from active defgroup, if allverts==0 only selected vertices */ -void remove_verts_defgroup (Object *obedit, int allverts) +void remove_verts_defgroup (Object *ob, int allverts) { - Object *ob; EditVert *eve; MDeformVert *dvert; MDeformWeight *newdw; bDeformGroup *dg, *eg; int i; - -// XXX if(multires_level1_test()) return; - - ob= obedit; if (!ob) return; @@ -966,14 +963,10 @@ void remove_verts_defgroup (Object *obedit, int allverts) /* Only available in editmode */ /* removes from all defgroup, if allverts==0 only selected vertices */ -void remove_verts_defgroups(Object *obedit, int allverts) +void remove_verts_defgroups(Object *ob, int allverts) { - Object *ob; int actdef, defCount; - -// XXX if (multires_level1_test()) return; - ob= obedit; if (ob == NULL) return; actdef= ob->actdef; @@ -1107,4 +1100,245 @@ void vgroup_operation_with_menu(Object *ob) } } +/********************** vertex group operators *********************/ + +static int vertex_group_add_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Scene *scene= CTX_data_scene(C); + + if(!ob) + return OPERATOR_CANCELLED; + + add_defgroup(ob); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_add"; + + /* api callbacks */ + ot->exec= vertex_group_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_remove_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Scene *scene= CTX_data_scene(C); + + if(!ob) + return OPERATOR_CANCELLED; + + if(scene->obedit == ob) { + del_defgroup(ob); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + } + else { + del_defgroup_in_object_mode(ob); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + } + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_remove"; + + /* api callbacks */ + ot->exec= vertex_group_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_assign_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + ToolSettings *ts= CTX_data_tool_settings(C); + Object *ob= CTX_data_edit_object(C); + + if(!ob) + return OPERATOR_CANCELLED; + + assign_verts_defgroup(ob, ts->vgroup_weight); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_assign(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Assign Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_assign"; + + /* api callbacks */ + ot->exec= vertex_group_assign_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_remove_from_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_edit_object(C); + + if(!ob) + return OPERATOR_CANCELLED; + + remove_verts_defgroup(ob, 0); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_remove_from(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove from Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_remove_from"; + + /* api callbacks */ + ot->exec= vertex_group_remove_from_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_select_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_edit_object(C); + + if(!ob) + return OPERATOR_CANCELLED; + + sel_verts_defgroup(ob, 1); /* runs countall() */ + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_select(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_select"; + + /* api callbacks */ + ot->exec= vertex_group_select_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_deselect_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_edit_object(C); + + if(!ob) + return OPERATOR_CANCELLED; + + sel_verts_defgroup(ob, 0); /* runs countall() */ + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_deselect(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Deselect Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_deselect"; + + /* api callbacks */ + ot->exec= vertex_group_deselect_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_copy_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + + if(!ob) + return OPERATOR_CANCELLED; + + duplicate_defgroup(ob); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_vertex_group_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Vertex Group"; + ot->idname= "OBJECT_OT_vertex_group_copy"; + + /* api callbacks */ + ot->exec= vertex_group_copy_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int vertex_group_copy_to_linked_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Base *base; + int retval= OPERATOR_CANCELLED; + + if(!ob) + return retval; + + for(base=scene->base.first; base; base= base->next) { + if(base->object->type==ob->type) { + if(base->object!=ob && base->object->data==ob->data) { + BLI_freelistN(&base->object->defbase); + BLI_duplicatelist(&base->object->defbase, &ob->defbase); + base->object->actdef= ob->actdef; + + DAG_object_flush_update(scene, base->object, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, base->object); + + retval = OPERATOR_FINISHED; + } + } + } + + return retval; +} + +void OBJECT_OT_vertex_group_copy_to_linked(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Vertex Group to Linked"; + ot->idname= "OBJECT_OT_vertex_group_copy_to_linked"; + + /* api callbacks */ + ot->exec= vertex_group_copy_to_linked_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 14121ccdc4d..5bf090e459b 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -59,6 +59,7 @@ #include "ED_util.h" #include "ED_screen.h" #include "ED_mesh.h" +#include "ED_object.h" #include "ED_screen_types.h" #include "RE_pipeline.h" @@ -2515,7 +2516,9 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) /* flush multires changes (for sculpt) */ multires_force_update(CTX_data_active_object(C)); - // get editmode results + /* get editmode results */ + ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */ + // store spare // get view3d layer, local layer, make this nice api call to render // store spare diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 8f0b52ef3a1..a2b883eabfc 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -156,7 +156,6 @@ typedef struct StrokeCache { float old_grab_location[3]; int symmetry; /* Symmetry index between 0 and 7 */ float view_normal[3], view_normal_symmetry[3]; - int last_dot[2]; /* Last location of stroke application */ int last_rake[2]; /* Last location of updating rake rotation */ } StrokeCache; @@ -849,15 +848,6 @@ static void do_symmetrical_brush_actions(Sculpt *sd, StrokeCache *cache) const char symm = sd->flags & 7; int i; - /* Brush spacing: only apply dot if next dot is far enough away */ - if((sd->brush->flag & BRUSH_SPACE) && !(sd->brush->flag & BRUSH_ANCHORED) && !cache->first_time) { - int dx = cache->last_dot[0] - cache->mouse[0]; - int dy = cache->last_dot[1] - cache->mouse[1]; - if(sqrt(dx*dx+dy*dy) < sd->brush->spacing) - return; - } - memcpy(cache->last_dot, cache->mouse, sizeof(int) * 2); - VecCopyf(cache->location, cache->true_location); VecCopyf(cache->grab_delta_symmetry, cache->grab_delta); cache->symmetry = 0; @@ -1050,16 +1040,21 @@ static void draw_paint_cursor(bContext *C, int x, int y, void *customdata) { Sculpt *sd= CTX_data_tool_settings(C)->sculpt; - glTranslatef((float)x, (float)y, 0.0f); - glColor4ub(255, 100, 100, 128); glEnable( GL_LINE_SMOOTH ); glEnable(GL_BLEND); + + glTranslatef((float)x, (float)y, 0.0f); glutil_draw_lined_arc(0.0, M_PI*2.0, sd->brush->size, 40); + glTranslatef((float)-x, (float)-y, 0.0f); + + if(sd->session && sd->session->cache && sd->brush && (sd->brush->flag & BRUSH_SMOOTH_STROKE)) { + ARegion *ar = CTX_wm_region(C); + sdrawline(x, y, sd->session->cache->mouse[0] - ar->winrct.xmin, sd->session->cache->mouse[1] - ar->winrct.ymin); + } + glDisable(GL_BLEND); glDisable( GL_LINE_SMOOTH ); - - glTranslatef((float)-x, (float)-y, 0.0f); } static void toggle_paint_cursor(bContext *C) @@ -1202,6 +1197,9 @@ static void sculpt_update_cache_invariants(Sculpt *sd, bContext *C, wmOperator * RNA_int_get_array(op->ptr, "initial_mouse", cache->initial_mouse); cache->depth = RNA_float_get(op->ptr, "depth"); + cache->mouse[0] = cache->initial_mouse[0]; + cache->mouse[1] = cache->initial_mouse[1]; + /* Truly temporary data that isn't stored in properties */ view3d_set_viewcontext(C, &cache->vc); @@ -1407,13 +1405,99 @@ static void sculpt_flush_update(bContext *C) ED_region_tag_redraw(ar); } +/* Returns zero if no sculpt changes should be made, non-zero otherwise */ +static int sculpt_smooth_stroke(Sculpt *s, int output[2], wmEvent *event) +{ + output[0] = event->x; + output[1] = event->y; + + if(s->brush->flag & BRUSH_SMOOTH_STROKE && s->brush->sculpt_tool != SCULPT_TOOL_GRAB) { + StrokeCache *cache = s->session->cache; + float u = .9, v = 1.0 - u; + int dx = cache->mouse[0] - event->x, dy = cache->mouse[1] - event->y; + int radius = 50; + + /* If the mouse is moving within the radius of the last move, + don't update the mouse position. This allows sharp turns. */ + if(dx*dx + dy*dy < radius*radius) + return 0; + + output[0] = event->x * v + cache->mouse[0] * u; + output[1] = event->y * v + cache->mouse[1] * u; + } + + return 1; +} + +/* Returns zero if the stroke dots should not be spaced, non-zero otherwise */ +int sculpt_space_stroke_enabled(Sculpt *s) +{ + Brush *br = s->brush; + return (br->flag & BRUSH_SPACE) && !(br->flag & BRUSH_ANCHORED) && (br->sculpt_tool != SCULPT_TOOL_GRAB); +} + +/* Put the location of the next sculpt stroke dot into the stroke RNA and apply it to the mesh */ +static void sculpt_brush_stroke_add_step(bContext *C, wmOperator *op, wmEvent *event, int mouse[2]) +{ + Sculpt *sd = CTX_data_tool_settings(C)->sculpt; + StrokeCache *cache = sd->session->cache; + PointerRNA itemptr; + float cur_depth; + float center[3]; + + cur_depth = read_cached_depth(&cache->vc, mouse[0], mouse[1]); + unproject(sd->session->cache->mats, center, mouse[0], mouse[1], cur_depth); + + /* Add to stroke */ + RNA_collection_add(op->ptr, "stroke", &itemptr); + RNA_float_set_array(&itemptr, "location", center); + RNA_int_set_array(&itemptr, "mouse", mouse); + RNA_boolean_set(&itemptr, "flip", event->shift); + sculpt_update_cache_variants(sd, &itemptr); + + sculpt_restore_mesh(sd); + do_symmetrical_brush_actions(sd, cache); + + sculpt_post_stroke_free(sd->session); +} + +/* For brushes with stroke spacing enabled, moves mouse in steps + towards the final mouse location. */ +static int sculpt_space_stroke(bContext *C, wmOperator *op, wmEvent *event, Sculpt *s, const int final_mouse[2]) +{ + StrokeCache *cache = s->session->cache; + int cnt = 0; + + if(sculpt_space_stroke_enabled(s)) { + float vec[2] = {final_mouse[0] - cache->mouse[0], final_mouse[1] - cache->mouse[1]}; + int mouse[2] = {cache->mouse[0], cache->mouse[1]}; + float length, scale; + int steps = 0, i; + + /* Normalize the vector between the last stroke dot and the goal */ + length = sqrt(vec[0]*vec[0] + vec[1]*vec[1]); + + if(length > FLT_EPSILON) { + scale = s->brush->spacing / length; + vec[0] *= scale; + vec[1] *= scale; + + steps = (int)(length / s->brush->spacing); + for(i = 0; i < steps; ++i, ++cnt) { + mouse[0] += vec[0]; + mouse[1] += vec[1]; + sculpt_brush_stroke_add_step(C, op, event, mouse); + } + } + } + + return cnt; +} + static int sculpt_brush_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) { - PointerRNA itemptr; Sculpt *sd = CTX_data_tool_settings(C)->sculpt; ARegion *ar = CTX_wm_region(C); - float center[3]; - int mouse[2] = {event->x, event->y}; float cur_depth; sculpt_update_mesh_elements(C); @@ -1433,21 +1517,19 @@ static int sculpt_brush_stroke_modal(bContext *C, wmOperator *op, wmEvent *event } if(sd->session->cache) { - cur_depth = read_cached_depth(&sd->session->cache->vc, event->x, event->y); - unproject(sd->session->cache->mats, center, event->x, event->y, cur_depth); + int mouse[2]; - /* Add to stroke */ - RNA_collection_add(op->ptr, "stroke", &itemptr); - RNA_float_set_array(&itemptr, "location", center); - RNA_int_set_array(&itemptr, "mouse", mouse); - RNA_boolean_set(&itemptr, "flip", event->shift); - sculpt_update_cache_variants(sd, &itemptr); - - sculpt_restore_mesh(sd); - do_symmetrical_brush_actions(CTX_data_tool_settings(C)->sculpt, sd->session->cache); - - sculpt_flush_update(C); - sculpt_post_stroke_free(sd->session); + if(sculpt_smooth_stroke(sd, mouse, event)) { + if(sculpt_space_stroke_enabled(sd)) { + if(!sculpt_space_stroke(C, op, event, sd, mouse)) + ED_region_tag_redraw(ar); + } + else + sculpt_brush_stroke_add_step(C, op, event, mouse); + sculpt_flush_update(C); + } + else + ED_region_tag_redraw(ar); } /* Finished */ diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index 13ea778fb00..65c2976d57c 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -71,8 +71,8 @@ void MATERIAL_OT_new(struct wmOperatorType *ot); void TEXTURE_OT_new(struct wmOperatorType *ot); void WORLD_OT_new(struct wmOperatorType *ot); -void OBJECT_OT_particle_system_slot_add(struct wmOperatorType *ot); -void OBJECT_OT_particle_system_slot_remove(struct wmOperatorType *ot); +void OBJECT_OT_particle_system_add(struct wmOperatorType *ot); +void OBJECT_OT_particle_system_remove(struct wmOperatorType *ot); void PARTICLE_OT_new(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 6ca92674c6e..df3e8c62d37 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -412,7 +412,7 @@ void WORLD_OT_new(wmOperatorType *ot) /********************** particle system slot operators *********************/ -static int particle_system_slot_add_exec(bContext *C, wmOperator *op) +static int particle_system_add_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Scene *scene = CTX_data_scene(C); @@ -420,26 +420,26 @@ static int particle_system_slot_add_exec(bContext *C, wmOperator *op) if(!scene || !ob) return OPERATOR_CANCELLED; - object_add_particle_system_slot(scene, ob); + object_add_particle_system(scene, ob); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); return OPERATOR_FINISHED; } -void OBJECT_OT_particle_system_slot_add(wmOperatorType *ot) +void OBJECT_OT_particle_system_add(wmOperatorType *ot) { /* identifiers */ ot->name= "Add Particle System Slot"; - ot->idname= "OBJECT_OT_particle_system_slot_add"; + ot->idname= "OBJECT_OT_particle_system_add"; /* api callbacks */ - ot->exec= particle_system_slot_add_exec; + ot->exec= particle_system_add_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -static int particle_system_slot_remove_exec(bContext *C, wmOperator *op) +static int particle_system_remove_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Scene *scene = CTX_data_scene(C); @@ -447,20 +447,20 @@ static int particle_system_slot_remove_exec(bContext *C, wmOperator *op) if(!scene || !ob) return OPERATOR_CANCELLED; - object_remove_particle_system_slot(scene, ob); + object_remove_particle_system(scene, ob); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); return OPERATOR_FINISHED; } -void OBJECT_OT_particle_system_slot_remove(wmOperatorType *ot) +void OBJECT_OT_particle_system_remove(wmOperatorType *ot) { /* identifiers */ ot->name= "Remove Particle System Slot"; - ot->idname= "OBJECT_OT_particle_system_slot_remove"; + ot->idname= "OBJECT_OT_particle_system_remove"; /* api callbacks */ - ot->exec= particle_system_slot_remove_exec; + ot->exec= particle_system_remove_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 7954d5254cc..b89a13ce218 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -220,8 +220,8 @@ void buttons_operatortypes(void) WM_operatortype_append(TEXTURE_OT_new); WM_operatortype_append(WORLD_OT_new); - WM_operatortype_append(OBJECT_OT_particle_system_slot_add); - WM_operatortype_append(OBJECT_OT_particle_system_slot_remove); + WM_operatortype_append(OBJECT_OT_particle_system_add); + WM_operatortype_append(OBJECT_OT_particle_system_remove); WM_operatortype_append(PARTICLE_OT_new); } @@ -331,6 +331,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) case NC_SCENE: switch(wmn->data) { case ND_FRAME: + case ND_MODE: ED_area_tag_redraw(sa); break; diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index bb47d3458fe..02ee8f508c1 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -550,132 +550,4 @@ void file_draw_list(const bContext *C, ARegion *ar) } } -static void file_draw_fsmenu_category_name(ARegion *ar, const char *category_name, short *starty) -{ - short sx, sy; - int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*TILE_BORDER_X - ICON_DEFAULT_WIDTH - 4; - int fontsize = file_font_pointsize(); - - sx = ar->v2d.cur.xmin + TILE_BORDER_X; - sy = *starty; - - UI_ThemeColor(TH_TEXT_HI); - file_draw_string(sx, sy, category_name, bmwidth, fontsize, FILE_SHORTEN_END); - - sy -= fontsize*2.0f; - - *starty= sy; -} - -static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCategory category, short *starty) -{ - struct FSMenu* fsmenu = fsmenu_get(); - char bookmark[FILE_MAX]; - int nentries = fsmenu_get_nentries(fsmenu, category); - - short sx, sy, xpos, ypos; - int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*TILE_BORDER_X - ICON_DEFAULT_WIDTH - 4; - int fontsize = file_font_pointsize(); - int cat_icon; - int i; - - sx = ar->v2d.cur.xmin + TILE_BORDER_X; - sy = *starty; - - switch(category) { - case FS_CATEGORY_SYSTEM: - cat_icon = ICON_DISK_DRIVE; break; - case FS_CATEGORY_BOOKMARKS: - cat_icon = ICON_BOOKMARKS; break; - case FS_CATEGORY_RECENT: - cat_icon = ICON_FILE_FOLDER; break; - } - - for (i=0; i< nentries && (sy > ar->v2d.cur.ymin) ;++i) { - char *fname = fsmenu_get_entry(fsmenu, category, i); - - if (fname) { - int sl; - BLI_strncpy(bookmark, fname, FILE_MAX); - - sl = strlen(bookmark)-1; - if (sl > 1) { - while (bookmark[sl] == '\\' || bookmark[sl] == '/') { - bookmark[sl] = '\0'; - sl--; - } - } - - if (fsmenu_is_selected(fsmenu, category, i) ) { - UI_ThemeColor(TH_HILITE); - uiRoundBox(sx, sy - fontsize*2.0f, ar->v2d.cur.xmax - TILE_BORDER_X, sy, 4.0f); - UI_ThemeColor(TH_TEXT); - } else { - UI_ThemeColor(TH_TEXT_HI); - } - - xpos = sx; - ypos = sy - (TILE_BORDER_Y * 0.5); - - file_draw_icon(xpos, ypos, cat_icon, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH); - xpos += ICON_DEFAULT_WIDTH + 4; - file_draw_string(xpos, ypos, bookmark, bmwidth, fontsize, FILE_SHORTEN_FRONT); - sy -= fontsize*2.0; - fsmenu_set_pos(fsmenu, category, i, xpos, ypos); - } - } - - *starty = sy; -} - -void file_draw_fsmenu_operator(const bContext *C, ARegion *ar, wmOperator *op, short *starty) -{ - uiStyle *style= U.uistyles.first; - uiBlock *block; - uiLayout *layout; - int sy; - - sy= *starty; - - block= uiBeginBlock(C, ar, "file_options", UI_EMBOSS); - layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, TILE_BORDER_X, sy, ar->winx-2*TILE_BORDER_X, 20, style); - - RNA_STRUCT_BEGIN(op->ptr, prop) { - if(strcmp(RNA_property_identifier(prop), "rna_type") == 0) - continue; - if(strcmp(RNA_property_identifier(prop), "filename") == 0) - continue; - - uiItemFullR(layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0); - } - RNA_STRUCT_END; - - uiBlockLayoutResolve(C, block, NULL, &sy); - uiEndBlock(C, block); - uiDrawBlock(C, block); - - *starty= sy; -} - -void file_draw_fsmenu(const bContext *C, ARegion *ar) -{ - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); - int linestep = file_font_pointsize()*2.0f; - short sy= ar->v2d.cur.ymax-2*TILE_BORDER_Y; - - file_draw_fsmenu_category_name(ar, "SYSTEM", &sy); - file_draw_fsmenu_category(C, ar, FS_CATEGORY_SYSTEM, &sy); - sy -= linestep; - file_draw_fsmenu_category_name(ar, "BOOKMARKS", &sy); - file_draw_fsmenu_category(C, ar, FS_CATEGORY_BOOKMARKS, &sy); - sy -= linestep; - file_draw_fsmenu_category_name(ar, "RECENT", &sy); - file_draw_fsmenu_category(C, ar, FS_CATEGORY_RECENT, &sy); - - if(sfile->op) { - sy -= linestep; - file_draw_fsmenu_category_name(ar, "OPTIONS", &sy); - file_draw_fsmenu_operator(C, ar, sfile->op, &sy); - } -} diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index 642189ad3fd..668e14c95e6 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -30,6 +30,9 @@ /* internal exports only */ +struct ARegion; +struct ARegionType; +struct SpaceFile; /* file_header.c */ void file_header_buttons(const bContext *C, ARegion *ar); @@ -45,7 +48,6 @@ void file_draw_buttons(const bContext *C, ARegion *ar); void file_calc_previews(const bContext *C, ARegion *ar); void file_draw_previews(const bContext *C, ARegion *ar); void file_draw_list(const bContext *C, ARegion *ar); -void file_draw_fsmenu(const bContext *C, ARegion *ar); /* file_ops.h */ struct wmOperatorType; @@ -56,6 +58,9 @@ void FILE_OT_select(struct wmOperatorType *ot); void FILE_OT_select_all_toggle(struct wmOperatorType *ot); void FILE_OT_select_border(struct wmOperatorType *ot); void FILE_OT_select_bookmark(struct wmOperatorType *ot); +void FILE_OT_add_bookmark(struct wmOperatorType *ot); +void FILE_OT_delete_bookmark(struct wmOperatorType *ot); +void FILE_OT_hidedot(struct wmOperatorType *ot); void FILE_OT_loadimages(struct wmOperatorType *ot); void FILE_OT_exec(struct wmOperatorType *ot); void FILE_OT_cancel(struct wmOperatorType *ot); @@ -66,11 +71,14 @@ void FILE_OT_bookmark_toggle(struct wmOperatorType *ot); int file_exec(bContext *C, struct wmOperator *unused); int file_cancel_exec(bContext *C, struct wmOperator *unused); int file_parent_exec(bContext *C, struct wmOperator *unused); -int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my); +int file_hilight_set(struct SpaceFile *sfile, struct ARegion *ar, int mx, int my); /* filesel.c */ float file_string_width(const char* str); float file_font_pointsize(); +/* file_panels.c */ +void file_panels_register(struct ARegionType *art); + #endif /* ED_FILE_INTERN_H */ diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index ab02147d020..aaa1793efbb 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -42,6 +42,8 @@ #include "ED_screen.h" #include "ED_fileselect.h" +#include "MEM_guardedalloc.h" + #include "RNA_access.h" #include "RNA_define.h" @@ -135,22 +137,15 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v params->active_file = last_file; if(file && S_ISDIR(file->type)) { - /* the path is too long and we are not going up! */ - if (strcmp(file->relname, ".") && - strcmp(file->relname, "..") && - strlen(params->dir) + strlen(file->relname) >= FILE_MAX ) + /* the path is too long! */ + if (strlen(params->dir) + strlen(file->relname) >= FILE_MAX ) { // XXX error("Path too long, cannot enter this directory"); } else { - if (strcmp(file->relname, "..")==0) { - /* avoids /../../ */ - BLI_parent_dir(params->dir); - } else { - strcat(params->dir, file->relname); - strcat(params->dir,"/"); - params->file[0] = '\0'; - BLI_cleanup_dir(G.sce, params->dir); - } + strcat(params->dir, file->relname); + strcat(params->dir,"/"); + params->file[0] = '\0'; + BLI_cleanup_dir(G.sce, params->dir); filelist_setdir(sfile->files, params->dir); filelist_free(sfile->files); params->active_file = -1; @@ -234,7 +229,7 @@ static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) /* single select, deselect all selected first */ file_deselect_all(sfile); file_select(sfile, ar, &rect, val ); - WM_event_add_notifier(C, NC_WINDOW, NULL); + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); } return OPERATOR_FINISHED; } @@ -299,75 +294,25 @@ void FILE_OT_select_all_toggle(wmOperatorType *ot) /* ---------- BOOKMARKS ----------- */ -static int file_select_bookmark_category(SpaceFile* sfile, ARegion* ar, short x, short y, FSMenuCategory category) -{ - struct FSMenu* fsmenu = fsmenu_get(); - int nentries = fsmenu_get_nentries(fsmenu, category); - int linestep = file_font_pointsize()*2.0f; - short xs, ys; - int i; - int selected = -1; - - for (i=0; i < nentries; ++i) { - fsmenu_get_pos(fsmenu, category, i, &xs, &ys); - if ( (y<=ys) && (y>ys-linestep) ) { - fsmenu_select_entry(fsmenu, category, i); - selected = i; - break; - } - } - return selected; -} - -static void file_select_bookmark(SpaceFile* sfile, ARegion* ar, short x, short y) -{ - float fx, fy; - int selected; - FSMenuCategory category = FS_CATEGORY_SYSTEM; - - if (BLI_in_rcti(&ar->v2d.mask, x, y)) { - char *entry; - - UI_view2d_region_to_view(&ar->v2d, x, y, &fx, &fy); - selected = file_select_bookmark_category(sfile, ar, fx, fy, FS_CATEGORY_SYSTEM); - if (selected<0) { - category = FS_CATEGORY_BOOKMARKS; - selected = file_select_bookmark_category(sfile, ar, fx, fy, category); - } - if (selected<0) { - category = FS_CATEGORY_RECENT; - selected = file_select_bookmark_category(sfile, ar, fx, fy, category); - } - - if (selected>=0) { - entry= fsmenu_get_entry(fsmenu_get(), category, selected); - /* which string */ - if (entry) { - FileSelectParams* params = sfile->params; - BLI_strncpy(params->dir, entry, sizeof(params->dir)); - BLI_cleanup_dir(G.sce, params->dir); - filelist_free(sfile->files); - filelist_setdir(sfile->files, params->dir); - params->file[0] = '\0'; - params->active_file = -1; - } - } - } -} - static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { - ScrArea *sa= CTX_wm_area(C); - ARegion *ar= CTX_wm_region(C); SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); - short x, y; + if(RNA_struct_find_property(op->ptr, "dir")) { + char entry[256]; + FileSelectParams* params = sfile->params; - x = event->x - ar->winrct.xmin; - y = event->y - ar->winrct.ymin; + RNA_string_get(op->ptr, "dir", entry); + BLI_strncpy(params->dir, entry, sizeof(params->dir)); + BLI_cleanup_dir(G.sce, params->dir); + filelist_free(sfile->files); + filelist_setdir(sfile->files, params->dir); + params->file[0] = '\0'; + params->active_file = -1; - file_select_bookmark(sfile, ar, x, y); - ED_area_tag_redraw(sa); + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + } + return OPERATOR_FINISHED; } @@ -380,8 +325,75 @@ void FILE_OT_select_bookmark(wmOperatorType *ot) /* api callbacks */ ot->invoke= bookmark_select_invoke; ot->poll= ED_operator_file_active; + + RNA_def_string(ot->srna, "dir", "", 256, "Dir", ""); } +static int bookmark_add_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + ScrArea *sa= CTX_wm_area(C); + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + struct FSMenu* fsmenu = fsmenu_get(); + struct FileSelectParams* params= ED_fileselect_get_params(sfile); + + if (params->dir[0] != '\0') { + char name[FILE_MAX]; + + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir, 0, 1); + BLI_make_file_string("/", name, BLI_gethome(), ".Bfs"); + fsmenu_write_file(fsmenu, name); + } + + ED_area_tag_redraw(sa); + return OPERATOR_FINISHED; +} + +void FILE_OT_add_bookmark(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Bookmark"; + ot->idname= "FILE_OT_add_bookmark"; + + /* api callbacks */ + ot->invoke= bookmark_add_invoke; + ot->poll= ED_operator_file_active; +} + +static int bookmark_delete_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + ScrArea *sa= CTX_wm_area(C); + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + struct FSMenu* fsmenu = fsmenu_get(); + int nentries = fsmenu_get_nentries(fsmenu, FS_CATEGORY_BOOKMARKS); + if(RNA_struct_find_property(op->ptr, "index")) { + int index = RNA_int_get(op->ptr, "index"); + if ( (index >-1) && (index < nentries)) { + char name[FILE_MAX]; + + fsmenu_remove_entry(fsmenu, FS_CATEGORY_BOOKMARKS, index); + BLI_make_file_string("/", name, BLI_gethome(), ".Bfs"); + fsmenu_write_file(fsmenu, name); + ED_area_tag_redraw(sa); + } + } + + return OPERATOR_FINISHED; +} + +void FILE_OT_delete_bookmark(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete Bookmark"; + ot->idname= "FILE_OT_delete_bookmark"; + + /* api callbacks */ + ot->invoke= bookmark_delete_invoke; + ot->poll= ED_operator_file_active; + + RNA_def_int(ot->srna, "index", -1, -1, 20000, "Index", "", -1, 20000); +} + + static int loadimages_invoke(bContext *C, wmOperator *op, wmEvent *event) { ScrArea *sa= CTX_wm_area(C); @@ -548,7 +560,7 @@ int file_parent_exec(bContext *C, wmOperator *unused) filelist_free(sfile->files); sfile->params->active_file = -1; } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); return OPERATOR_FINISHED; @@ -575,8 +587,8 @@ int file_refresh_exec(bContext *C, wmOperator *unused) filelist_setdir(sfile->files, sfile->params->dir); filelist_free(sfile->files); sfile->params->active_file = -1; - } - ED_area_tag_redraw(CTX_wm_area(C)); + } + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); return OPERATOR_FINISHED; @@ -594,14 +606,58 @@ void FILE_OT_refresh(struct wmOperatorType *ot) ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ } +int file_hidedot_exec(bContext *C, wmOperator *unused) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + + if(sfile->params) { + sfile->params->flag ^= FILE_HIDE_DOT; + filelist_free(sfile->files); + sfile->params->active_file = -1; + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + } + + return OPERATOR_FINISHED; + +} + + +void FILE_OT_hidedot(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Hide Dot Files"; + ot->idname= "FILE_OT_hidedot"; + + /* api callbacks */ + ot->exec= file_hidedot_exec; + ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ +} + struct ARegion *file_buttons_region(struct ScrArea *sa) { - ARegion *ar; + ARegion *ar, *arnew; for(ar= sa->regionbase.first; ar; ar= ar->next) if(ar->regiontype==RGN_TYPE_CHANNELS) return ar; - return NULL; + + /* add subdiv level; after header */ + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_HEADER) + break; + + /* is error! */ + if(ar==NULL) return NULL; + + arnew= MEM_callocN(sizeof(ARegion), "buttons for file panels"); + + BLI_insertlinkafter(&sa->regionbase, ar, arnew); + arnew->regiontype= RGN_TYPE_CHANNELS; + arnew->alignment= RGN_ALIGN_LEFT; + + arnew->flag = RGN_FLAG_HIDDEN; + + return arnew; } int file_bookmark_toggle_exec(bContext *C, wmOperator *unused) diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c new file mode 100644 index 00000000000..29c759d43c0 --- /dev/null +++ b/source/blender/editors/space_file/file_panels.c @@ -0,0 +1,165 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, Andrea Weikert + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include "BKE_context.h" +#include "BKE_screen.h" + +#include "BLI_blenlib.h" + +#include "DNA_screen_types.h" +#include "DNA_space_types.h" +#include "DNA_userdef_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "RNA_access.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "file_intern.h" +#include "fsmenu.h" + +#include + +static void do_file_panel_events(bContext *C, void *arg, int event) +{ + +} + +static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, int icon, int allow_delete) +{ + uiBlock *block; + uiStyle *style= U.uistyles.first; + int i; + int fontsize = file_font_pointsize(); + struct FSMenu* fsmenu = fsmenu_get(); + int nentries = fsmenu_get_nentries(fsmenu, category); + + uiLayoutSetAlignment(pa->layout, UI_LAYOUT_ALIGN_LEFT); + block= uiLayoutFreeBlock(pa->layout); + uiBlockSetHandleFunc(block, do_file_panel_events, NULL); + uiBlockSetEmboss(block, UI_EMBOSSP); + uiBlockBeginAlign(block); + for (i=0; i< nentries;++i) { + char dir[FILE_MAX]; + char temp[FILE_MAX]; + uiLayout* layout = uiLayoutRow(pa->layout, UI_LAYOUT_ALIGN_LEFT); + char *entry = fsmenu_get_entry(fsmenu, category, i); + + /* create nice bookmark name, shows last directory in the full path currently */ + BLI_strncpy(temp, entry, FILE_MAX); + BLI_add_slash(temp); + BLI_getlastdir(temp, dir, FILE_MAX); + BLI_del_slash(dir); + + /* operator shows the short bookmark name, should eventually have tooltip */ + uiItemStringO(layout, dir, icon, "FILE_OT_select_bookmark", "dir", entry); + if (allow_delete && fsmenu_can_save(fsmenu, category, i) ) + uiItemIntO(layout, "", ICON_X, "FILE_OT_delete_bookmark", "index", i); + } + uiBlockEndAlign(block); +} + +static void file_panel_system(const bContext *C, Panel *pa) +{ + file_panel_category(C, pa, FS_CATEGORY_SYSTEM, ICON_DISK_DRIVE, 0); +} + +static void file_panel_bookmarks(const bContext *C, Panel *pa) +{ + file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, ICON_BOOKMARKS, 1); +} + + +static void file_panel_recent(const bContext *C, Panel *pa) +{ + file_panel_category(C, pa, FS_CATEGORY_RECENT, ICON_FILE_FOLDER, 0); +} + + +static void file_panel_operator(const bContext *C, Panel *pa) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + struct wmOperator *op = sfile ? sfile->op : NULL; + uiBlock *block; + int sy; + + block= uiLayoutFreeBlock(pa->layout); + uiBlockSetHandleFunc(block, do_file_panel_events, NULL); + + sy= 0; + if (op) { + uiBlockBeginAlign(block); + RNA_STRUCT_BEGIN(op->ptr, prop) { + if(strcmp(RNA_property_identifier(prop), "rna_type") == 0) + continue; + if(strcmp(RNA_property_identifier(prop), "filename") == 0) + continue; + + uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0); + } + RNA_STRUCT_END; + uiBlockEndAlign(block); + } + uiBlockLayoutResolve(C, block, NULL, &sy); + uiEndBlock(C, block); + uiDrawBlock(C, block); +} + + +void file_panels_register(ARegionType *art) +{ + PanelType *pt; + + pt= MEM_callocN(sizeof(PanelType), "spacetype file system directories"); + strcpy(pt->idname, "FILE_PT_system"); + strcpy(pt->label, "System"); + pt->draw= file_panel_system; + BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype file bookmarks"); + strcpy(pt->idname, "FILE_PT_bookmarks"); + strcpy(pt->label, "Bookmarks"); + pt->draw= file_panel_bookmarks; + BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype file recent directories"); + strcpy(pt->idname, "FILE_PT_recent"); + strcpy(pt->label, "Recent"); + pt->draw= file_panel_recent; + BLI_addtail(&art->paneltypes, pt); + + pt= MEM_callocN(sizeof(PanelType), "spacetype file operator properties"); + strcpy(pt->idname, "FILE_PT_operator"); + strcpy(pt->label, "Operator"); + pt->draw= file_panel_operator; + BLI_addtail(&art->paneltypes, pt); +} \ No newline at end of file diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 766dec7c064..573aed72728 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -823,16 +823,16 @@ void filelist_sort(struct FileList* filelist, short sort) int num;/* , act= 0; */ switch(sort) { - case FILE_SORTALPHA: + case FILE_SORT_ALPHA: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_name); break; - case FILE_SORTDATE: + case FILE_SORT_TIME: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_date); break; - case FILE_SORTSIZE: + case FILE_SORT_SIZE: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_size); break; - case FILE_SORTEXTENS: + case FILE_SORT_EXTENSION: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_extension); } diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index f10c89926d6..e929e028849 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -49,7 +49,6 @@ void filelist_free_icons(); struct FileList * filelist_copy(struct FileList* filelist); int filelist_find(struct FileList* filelist, char *file); void filelist_free(struct FileList* filelist); -void filelist_freelib(struct FileList* filelist); void filelist_sort(struct FileList* filelist, short sort); int filelist_numfiles(struct FileList* filelist); const char * filelist_dir(struct FileList* filelist); diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 9c0bcc6b991..e1d81138e5a 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -84,7 +84,7 @@ FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile) { if (!sfile->params) { - ED_fileselect_set_params(sfile, "", "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORTALPHA); + ED_fileselect_set_params(sfile, "", "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA); } return sfile->params; } diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 59e8dcf82e6..a87ad4c4fd8 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -65,7 +65,6 @@ struct _FSMenuEntry { char *path; short save; - short xs, ys; }; typedef struct FSMenu @@ -74,9 +73,6 @@ typedef struct FSMenu FSMenuEntry *fsmenu_bookmarks; FSMenuEntry *fsmenu_recent; - FSMenuCategory selected_category; - int selected_entry; - } FSMenu; static FSMenu *g_fsmenu = NULL; @@ -89,17 +85,6 @@ struct FSMenu* fsmenu_get(void) return g_fsmenu; } -void fsmenu_select_entry(struct FSMenu* fsmenu, FSMenuCategory category, int index) -{ - fsmenu->selected_category = category; - fsmenu->selected_entry = index; -} - -int fsmenu_is_selected(struct FSMenu* fsmenu, FSMenuCategory category, int index) -{ - return (category==fsmenu->selected_category) && (index==fsmenu->selected_entry); -} - static FSMenuEntry *fsmenu_get_category(struct FSMenu* fsmenu, FSMenuCategory category) { FSMenuEntry *fsms = NULL; @@ -154,36 +139,16 @@ char *fsmenu_get_entry(struct FSMenu* fsmenu, FSMenuCategory category, int idx) return fsme?fsme->path:NULL; } -void fsmenu_set_pos(struct FSMenu* fsmenu, FSMenuCategory category, int idx, short xs, short ys) +short fsmenu_can_save (struct FSMenu* fsmenu, FSMenuCategory category, int idx) { FSMenuEntry *fsme; for (fsme= fsmenu_get_category(fsmenu, category); fsme && idx; fsme= fsme->next) idx--; - if (fsme) { - fsme->xs = xs; - fsme->ys = ys; - } + return fsme?fsme->save:0; } -int fsmenu_get_pos (struct FSMenu* fsmenu, FSMenuCategory category, int idx, short* xs, short* ys) -{ - FSMenuEntry *fsme; - - for (fsme= fsmenu_get_category(fsmenu, category); fsme && idx; fsme= fsme->next) - idx--; - - if (fsme) { - *xs = fsme->xs; - *ys = fsme->ys; - return 1; - } - - return 0; -} - - void fsmenu_insert_entry(struct FSMenu* fsmenu, FSMenuCategory category, char *path, int sorted, short save) { FSMenuEntry *prev; diff --git a/source/blender/editors/space_file/fsmenu.h b/source/blender/editors/space_file/fsmenu.h index c51c45b7dc4..2cab622d523 100644 --- a/source/blender/editors/space_file/fsmenu.h +++ b/source/blender/editors/space_file/fsmenu.h @@ -52,22 +52,15 @@ int fsmenu_get_nentries (struct FSMenu* fsmenu, FSMenuCategory category); */ char* fsmenu_get_entry (struct FSMenu* fsmenu, FSMenuCategory category, int index); -void fsmenu_select_entry (struct FSMenu* fsmenu, FSMenuCategory category, int index); - -int fsmenu_is_selected (struct FSMenu* fsmenu, FSMenuCategory category, int index); - - /** Sets the position of the fsmenu entry at @a index */ -void fsmenu_set_pos (struct FSMenu* fsmenu, FSMenuCategory category, int index, short xs, short ys); - - /** Returns the position of the fsmenu entry at @a index. return value is 1 if successful, 0 otherwise */ -int fsmenu_get_pos (struct FSMenu* fsmenu, FSMenuCategory category, int index, short* xs, short* ys); - /** Inserts a new fsmenu entry with the given @a path. * Duplicate entries are not added. * @param sorted Should entry be inserted in sorted order? */ void fsmenu_insert_entry (struct FSMenu* fsmenu, FSMenuCategory category, char *path, int sorted, short save); + /** Return whether the entry was created by the user and can be saved and deleted */ +short fsmenu_can_save (struct FSMenu* fsmenu, FSMenuCategory category, int index); + /** Removes the fsmenu entry at the given @a index. */ void fsmenu_remove_entry (struct FSMenu* fsmenu, FSMenuCategory category, int index); diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 37d8f2bffa4..156c7d6f9be 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -163,6 +163,46 @@ static SpaceLink *file_duplicate(SpaceLink *sl) return (SpaceLink *)sfilen; } +static void file_refresh(const bContext *C, ScrArea *sa) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + FileSelectParams *params = ED_fileselect_get_params(sfile); + + if (!sfile->files) { + sfile->files = filelist_new(); + filelist_setdir(sfile->files, params->dir); + params->active_file = -1; // added this so it opens nicer (ton) + } + filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); + if (filelist_empty(sfile->files)) + { + filelist_readdir(sfile->files); + } + filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0); + if(params->sort!=FILE_SORT_NONE) filelist_sort(sfile->files, params->sort); +} + +static void file_listener(ScrArea *sa, wmNotifier *wmn) +{ + SpaceFile* sfile = (SpaceFile*)sa->spacedata.first; + + /* context changes */ + switch(wmn->category) { + case NC_FILE: + switch (wmn->data) { + case ND_FILELIST: + if (sfile->files) filelist_free(sfile->files); + ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); + break; + case ND_PARAMS: + ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); + break; + } + break; + } +} /* add handlers, stuff you only do once or on area/region changes */ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) @@ -188,31 +228,9 @@ static void file_main_area_draw(const bContext *C, ARegion *ar) View2D *v2d= &ar->v2d; View2DScrollers *scrollers; float col[3]; - - if (!sfile->files) { - sfile->files = filelist_new(); - filelist_setdir(sfile->files, params->dir); - params->active_file = -1; // added this so it opens nicer (ton) - } layout = ED_fileselect_get_layout(sfile, ar); - if (filelist_empty(sfile->files)) - { - unsigned int filter = 0; - filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); - if (params->flag & FILE_FILTER) { - filter = params->filter ; - } else { - filter = 0; - } - - filelist_setfilter(sfile->files, filter); - filelist_readdir(sfile->files); - - if(params->sort!=FILE_SORTALPHA) filelist_sort(sfile->files, params->sort); - } - /* clear and setup matrix */ UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); @@ -274,20 +292,25 @@ void file_operatortypes(void) WM_operatortype_append(FILE_OT_parent); WM_operatortype_append(FILE_OT_refresh); WM_operatortype_append(FILE_OT_bookmark_toggle); + WM_operatortype_append(FILE_OT_add_bookmark); + WM_operatortype_append(FILE_OT_delete_bookmark); + WM_operatortype_append(FILE_OT_hidedot); } /* NOTE: do not add .blend file reading on this level */ void file_keymap(struct wmWindowManager *wm) { ListBase *keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); + WM_keymap_add_item(keymap, "FILE_OT_bookmark_toggle", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select", LEFTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_border", BKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_highlight", MOUSEMOVE, KM_ANY, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_parent", PKEY, KM_PRESS, 0, 0); - + WM_keymap_add_item(keymap, "FILE_OT_add_bookmark", BKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "FILE_OT_hidedot", HKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_loadimages", TIMER1, KM_ANY, KM_ANY, 0); - + keymap= WM_keymap_listbase(wm, "FileBookmark", SPACE_FILE, 0); WM_keymap_add_item(keymap, "FILE_OT_select_bookmark", LEFTMOUSE, KM_PRESS, 0, 0); } @@ -295,56 +318,31 @@ void file_keymap(struct wmWindowManager *wm) static void file_channel_area_init(wmWindowManager *wm, ARegion *ar) { - ListBase *keymap; - - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); - - /* own keymap */ - keymap= WM_keymap_listbase(wm, "FileBookmark", SPACE_FILE, 0); - WM_event_add_keymap_handler_bb(&ar->handlers, keymap, NULL, NULL); + ED_region_panels_init(wm, ar); } static void file_channel_area_draw(const bContext *C, ARegion *ar) { - View2D *v2d= &ar->v2d; - float col[3]; + ED_region_panels(C, ar, 1, NULL); +} - UI_GetThemeColor3fv(TH_PANEL, col); - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* data... */ - UI_view2d_view_ortho(C, v2d); - - file_draw_fsmenu(C, ar); +static void file_channel_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + + } } /* add handlers, stuff you only do once or on area/region changes */ static void file_header_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + ED_region_header_init(ar); } static void file_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - file_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } /* add handlers, stuff you only do once or on area/region changes */ @@ -386,6 +384,8 @@ void ED_spacetype_file(void) st->free= file_free; st->init= file_init; st->duplicate= file_duplicate; + st->refresh= file_refresh; + st->listener= file_listener; st->operatortypes= file_operatortypes; st->keymap= file_keymap; @@ -405,6 +405,7 @@ void ED_spacetype_file(void) art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; art->init= file_header_area_init; art->draw= file_header_area_draw; + // art->listener= file_header_area_listener; BLI_addhead(&st->regiontypes, art); /* regions: ui */ @@ -421,10 +422,13 @@ void ED_spacetype_file(void) art->regionid = RGN_TYPE_CHANNELS; art->minsizex= 240; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + art->listener= file_channel_area_listener; art->init= file_channel_area_init; art->draw= file_channel_area_draw; BLI_addhead(&st->regiontypes, art); - + file_panels_register(art); + + BKE_spacetype_register(st); } diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index a08a23c1263..edf9bcbd896 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -1088,7 +1088,7 @@ static void image_pack_cb(bContext *C, void *ima_v, void *iuser_v) } if ((G.fileflags & G_AUTOPACK) == 0) { - unpackImage(ima, PF_ASK); + unpackImage(NULL, ima, PF_ASK); /* XXX report errors */ ED_undo_push(C, "Unpack image"); } } @@ -1097,7 +1097,7 @@ static void image_pack_cb(bContext *C, void *ima_v, void *iuser_v) if (ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) { // XXX error("Can't pack painted image. Save image or use Repack as PNG."); } else { - ima->packedfile = newPackedFile(ima->name); + ima->packedfile = newPackedFile(NULL, ima->name); /* XXX report errors */ ED_undo_push(C, "Pack image"); } } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 8f9bb0d05fe..24781cc115e 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1114,7 +1114,7 @@ static int pack_exec(bContext *C, wmOperator *op) if(as_png) BKE_image_memorypack(ima); else - ima->packedfile= newPackedFile(ima->name); + ima->packedfile= newPackedFile(op->reports, ima->name); return OPERATOR_FINISHED; } @@ -1162,13 +1162,76 @@ void IMAGE_OT_pack(wmOperatorType *ot) /********************* unpack operator *********************/ +/* XXX move this to some place where it can be reused */ + +const EnumPropertyItem unpack_method_items[] = { + {PF_USE_LOCAL, "USE_LOCAL", 0, "Use Local File", ""}, + {PF_WRITE_LOCAL, "WRITE_LOCAL", 0, "Write Local File (overwrite existing)", ""}, + {PF_USE_ORIGINAL, "USE_ORIGINAL", 0, "Use Original File", ""}, + {PF_WRITE_ORIGINAL, "WRITE_ORIGINAL", 0, "Write Original File (overwrite existing)", ""}, + {0, NULL, 0, NULL, NULL}}; + +void unpack_menu(bContext *C, char *opname, char *abs_name, char *folder, PackedFile *pf) +{ + uiPopupMenu *pup; + uiLayout *layout; + char line[FILE_MAXDIR + FILE_MAXFILE + 100]; + char local_name[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX]; + + strcpy(local_name, abs_name); + BLI_splitdirstring(local_name, fi); + sprintf(local_name, "//%s/%s", folder, fi); + + pup= uiPupMenuBegin(C, "Unpack file", 0); + layout= uiPupMenuLayout(pup); + + uiItemEnumO(layout, "Remove Pack", 0, opname, "method", PF_REMOVE); + + if(strcmp(abs_name, local_name)) { + switch(checkPackedFile(local_name, pf)) { + case PF_NOFILE: + sprintf(line, "Create %s", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_WRITE_LOCAL); + break; + case PF_EQUAL: + sprintf(line, "Use %s (identical)", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_USE_LOCAL); + break; + case PF_DIFFERS: + sprintf(line, "Use %s (differs)", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_USE_LOCAL); + sprintf(line, "Overwrite %s", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_WRITE_LOCAL); + break; + } + } + + switch(checkPackedFile(abs_name, pf)) { + case PF_NOFILE: + sprintf(line, "Create %s", abs_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_WRITE_ORIGINAL); + break; + case PF_EQUAL: + sprintf(line, "Use %s (identical)", abs_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_USE_ORIGINAL); + break; + case PF_DIFFERS: + sprintf(line, "Use %s (differs)", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_USE_ORIGINAL); + sprintf(line, "Overwrite %s", local_name); + uiItemEnumO(layout, line, 0, opname, "method", PF_WRITE_ORIGINAL); + break; + } + + uiPupMenuEnd(C, pup); +} + static int unpack_exec(bContext *C, wmOperator *op) { Image *ima= CTX_data_edit_image(C); + int method= RNA_enum_get(op->ptr, "method"); - if(!ima) - return OPERATOR_CANCELLED; - if(!ima->packedfile) + if(!ima || !ima->packedfile) return OPERATOR_CANCELLED; if(ima->source==IMA_SRC_SEQUENCE || ima->source==IMA_SRC_MOVIE) { @@ -1179,7 +1242,27 @@ static int unpack_exec(bContext *C, wmOperator *op) if(G.fileflags & G_AUTOPACK) BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save."); - unpackImage(ima, PF_ASK); + unpackImage(op->reports, ima, method); + + return OPERATOR_FINISHED; +} + +static int unpack_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Image *ima= CTX_data_edit_image(C); + + if(!ima || !ima->packedfile) + return OPERATOR_CANCELLED; + + if(ima->source==IMA_SRC_SEQUENCE || ima->source==IMA_SRC_MOVIE) { + BKE_report(op->reports, RPT_ERROR, "Can't unpack movie or image sequence."); + return OPERATOR_CANCELLED; + } + + if(G.fileflags & G_AUTOPACK) + BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save."); + + unpack_menu(C, "IMAGE_OT_unpack", ima->name, "textures", ima->packedfile); return OPERATOR_FINISHED; } @@ -1192,10 +1275,14 @@ void IMAGE_OT_unpack(wmOperatorType *ot) /* api callbacks */ ot->exec= unpack_exec; + ot->invoke= unpack_invoke; ot->poll= space_image_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "method", unpack_method_items, PF_USE_LOCAL, "Method", "How to unpack."); } /******************** sample image operator ********************/ diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c deleted file mode 100644 index 7b65a70117c..00000000000 --- a/source/blender/editors/space_info/info_header.c +++ /dev/null @@ -1,507 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2008 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include -#include - -#include "DNA_packedFile_types.h" -#include "DNA_space_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_userdef_types.h" -#include "DNA_windowmanager_types.h" - -#include "MEM_guardedalloc.h" - -#include "BLI_blenlib.h" -#include "BLI_bpath.h" - -#include "BKE_context.h" -#include "BKE_global.h" -#include "BKE_image.h" -#include "BKE_main.h" -#include "BKE_packedFile.h" -#include "BKE_screen.h" - -#include "ED_screen.h" -#include "ED_types.h" -#include "ED_util.h" - -#include "WM_api.h" -#include "WM_types.h" - -#include "BIF_gl.h" -#include "BIF_glutil.h" - -#include "UI_interface.h" -#include "UI_resources.h" -#include "UI_view2d.h" - -#include "IMB_imbuf_types.h" - -#include "info_intern.h" - -static int pupmenu() {return 0;} -static int okee() {return 0;} -static int error() {return 0;} - -/* ************************ header area region *********************** */ - -#define B_STOPRENDER 1 -#define B_STOPCAST 2 -#define B_STOPANIM 3 - -static void do_viewmenu(bContext *C, void *arg, int event) -{ -} - -static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_viewmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20, - menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - -static int buttons_do_unpack() -{ - int how; - char menu[2048]; - char *line = menu; - int ret_value = 1, count = 0; - - count = countPackedFiles(); - - if(!count) { - pupmenu("No packed files. Autopack disabled"); - return ret_value; - } - if (count == 1) - line += sprintf(line, "Unpack 1 file%%t"); - else - line += sprintf(line, "Unpack %d files%%t", count); - - line += sprintf(line, "|Use files in current directory (create when necessary)%%x%d", PF_USE_LOCAL); - line += sprintf(line, "|Write files to current directory (overwrite existing files)%%x%d", PF_WRITE_LOCAL); - line += sprintf(line, "|%%l|Use files in original location (create when necessary)%%x%d", PF_USE_ORIGINAL); - line += sprintf(line, "|Write files to original location (overwrite existing files)%%x%d", PF_WRITE_ORIGINAL); - line += sprintf(line, "|%%l|Disable AutoPack, keep all packed files %%x%d", PF_KEEP); - line += sprintf(line, "|Ask for each file %%x%d", PF_ASK); - - how = pupmenu(menu); - - if(how == -1) - ret_value = 0; - else { - if (how != PF_KEEP) unpackAll(how); - G.fileflags &= ~G_AUTOPACK; - } - - return ret_value; -} - -static void check_packAll() -{ - // first check for dirty images - Image *ima; - - for(ima = G.main->image.first; ima; ima= ima->id.next) { - if (ima->ibufs.first) { /* XXX FIX */ - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); - - if (ibuf && (ibuf->userflags &= IB_BITMAPDIRTY)) - break; - } - } - - if (ima == NULL || okee("Some images are painted on. These changes will be lost. Continue ?")) { - packAll(); - G.fileflags |= G_AUTOPACK; - } -} - -static void do_info_externalfiles(bContext *C, void *arg, int event) -{ - switch (event) { - - case 1: /* pack data */ - check_packAll(); - break; - case 3: /* unpack data */ - if (buttons_do_unpack() != 0) { - /* Clear autopack bit only if user selected one of the unpack options */ - G.fileflags &= ~G_AUTOPACK; - } - break; - case 10: /* make all paths relative */ - if (G.relbase_valid) { - int tot,changed,failed,linked; - char str[512]; - char txtname[24]; /* text block name */ - txtname[0] = '\0'; - makeFilesRelative(txtname, &tot, &changed, &failed, &linked); - if (failed) sprintf(str, "Make Relative%%t|Total files %i|Changed %i|Failed %i, See Text \"%s\"|Linked %i", tot, changed, failed, txtname, linked); - else sprintf(str, "Make Relative%%t|Total files %i|Changed %i|Failed %i|Linked %i", tot, changed, failed, linked); - pupmenu(str); - } else { - pupmenu("Can't set relative paths with an unsaved blend file"); - } - break; - case 11: /* make all paths absolute */ - { - int tot,changed,failed,linked; - char str[512]; - char txtname[24]; /* text block name */ - txtname[0] = '\0'; - makeFilesAbsolute(txtname, &tot, &changed, &failed, &linked); - sprintf(str, "Make Absolute%%t|Total files %i|Changed %i|Failed %i|Linked %i", tot, changed, failed, linked); - if (failed) sprintf(str, "Make Absolute%%t|Total files %i|Changed %i|Failed %i, See Text \"%s\"|Linked %i", tot, changed, failed, txtname, linked); - else sprintf(str, "Make Absolute%%t|Total files %i|Changed %i|Failed %i|Linked %i", tot, changed, failed, linked); - - pupmenu(str); - } - break; - case 12: /* check images exist */ - { - char txtname[24]; /* text block name */ - txtname[0] = '\0'; - - /* run the missing file check */ - checkMissingFiles( txtname ); - - if (txtname[0] == '\0') { - okee("No external files missing"); - } else { - char str[128]; - sprintf(str, "Missing files listed in Text \"%s\"", txtname ); - error(str); - } - } - break; - case 13: /* search for referenced files that are not available */ -// XXX if(curarea->spacetype==SPACE_INFO) { -// ScrArea *sa; -// sa= closest_bigger_area(); -// areawinset(sa->win); -// } -// activate_fileselect(FILE_SPECIAL, "Find Missing Files", "", findMissingFiles); - break; - } - -} - - -uiBlock *info_externalfiles(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "info_externalfiles", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_info_externalfiles, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pack into .blend file", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unpack into Files...", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make all Paths Relative", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make all Paths Absolute", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Report Missing Files...", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 12, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find Missing Files...", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 13, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - - - -static void info_filemenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - - uiLayoutSetOperatorContext(layout, WM_OP_EXEC_AREA); - uiItemO(layout, NULL, 0, "WM_OT_read_homefile"); - uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_AREA); - uiItemO(layout, NULL, 0, "WM_OT_open_mainfile"); -// uiDefIconTextBlockBut(block, info_openrecentmenu, NULL, ICON_RIGHTARROW_THIN, "Open Recent",0, yco-=20, 120, 19, ""); -// uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recover Last Session", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - - uiItemS(layout); - - uiLayoutSetOperatorContext(layout, WM_OP_EXEC_AREA); - uiItemO(layout, NULL, 0, "WM_OT_save_mainfile"); - uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_AREA); - uiItemO(layout, NULL, 0, "WM_OT_save_as_mainfile"); - -#if 0 - if(U.flag & USER_FILECOMPRESS) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Compress File", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 35, "Enable file compression"); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Compress File", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 35, "Enable file compression"); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Rendered Image...|F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Screenshot Subwindow|Ctrl F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Screenshot All|Ctrl Shift F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, ""); -#if GAMEBLENDER == 1 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Game As Runtime...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, ""); -#endif - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Default Settings|Ctrl U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 31, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Load Factory Settings", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 32, ""); - - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Append or Link|Shift F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Append or Link (Image Browser)|Ctrl F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); -// uiDefIconTextBlockBut(block, info_file_importmenu, NULL, ICON_RIGHTARROW_THIN, "Import", 0, yco-=20, menuwidth, 19, ""); -// uiDefIconTextBlockBut(block, info_file_exportmenu, NULL, ICON_RIGHTARROW_THIN, "Export", 0, yco-=20, menuwidth, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, info_externalfiles, NULL, ICON_RIGHTARROW_THIN, "External Data",0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Quit Blender|Ctrl Q", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - uiEndBlock(C, block); - return block; -#endif -} - - -static void do_info_buttons(bContext *C, void *arg, int event) -{ - switch(event) { - case B_STOPRENDER: - G.afbreek= 1; - break; - case B_STOPCAST: - WM_jobs_stop(CTX_wm_manager(C), CTX_wm_screen(C)); - break; - case B_STOPANIM: - ED_screen_animation_timer(C, 0, 0); - break; - } -} - -static void screen_idpoin_handle(bContext *C, ID *id, int event) -{ - switch(event) { - case UI_ID_BROWSE: - /* exception: can't set screens inside of area/region handers */ - WM_event_add_notifier(C, NC_SCREEN|ND_SCREENBROWSE, id); - break; - case UI_ID_DELETE: - ED_undo_push(C, ""); - break; - case UI_ID_RENAME: - break; - case UI_ID_ADD_NEW: - /* XXX not implemented */ - break; - case UI_ID_OPEN: - /* XXX not implemented */ - break; - case UI_ID_ALONE: - /* XXX not implemented */ - break; - case UI_ID_PIN: - break; - } -} - -static void scene_idpoin_handle(bContext *C, ID *id, int event) -{ - switch(event) { - case UI_ID_BROWSE: - /* exception: can't set screens inside of area/region handers */ - WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, id); - break; - case UI_ID_DELETE: - ED_undo_push(C, ""); - break; - case UI_ID_RENAME: - break; - case UI_ID_ADD_NEW: - /* XXX not implemented */ - break; - case UI_ID_OPEN: - /* XXX not implemented */ - break; - case UI_ID_ALONE: - /* XXX not implemented */ - break; - case UI_ID_PIN: - break; - } -} - -static void operator_call_cb(struct bContext *C, void *arg1, void *arg2) -{ - wmOperatorType *ot= arg2; - - if(ot) - WM_operator_name_call(C, ot->idname, WM_OP_INVOKE_DEFAULT, NULL); -} - -static void operator_search_cb(const struct bContext *C, void *arg, char *str, uiSearchItems *items) -{ - wmOperatorType *ot = WM_operatortype_first(); - - for(; ot; ot= ot->next) { - - if(BLI_strcasestr(ot->name, str)) { - if(ot->poll==NULL || ot->poll((bContext *)C)) { - char name[256]; - int len= strlen(ot->name); - - /* display name for menu, can hold hotkey */ - BLI_strncpy(name, ot->name, 256); - - /* check for hotkey */ - if(len < 256-6) { - if(WM_key_event_operator_string(C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, &name[len+1], 256-len-1)) - name[len]= '|'; - } - - if(0==uiSearchItemAdd(items, name, ot, 0)) - break; - } - } - } -} - -void info_header_buttons(const bContext *C, ARegion *ar) -{ - wmWindow *win= CTX_wm_window(C); - bScreen *screen= CTX_wm_screen(C); - ScrArea *sa= CTX_wm_area(C); - uiBlock *block; - int xco, yco= 3; - - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); - uiBlockSetHandleFunc(block, do_info_buttons, NULL); - - xco= ED_area_header_standardbuttons(C, block, yco); - - if((sa->flag & HEADER_NO_PULLDOWN)==0) { - int xmax; - - xmax= GetButStringLength("File"); - uiDefMenuBut(block, info_filemenu, NULL, "File", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Add"); - uiDefPulldownBut(block, dummy_viewmenu, sa, "Add", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Timeline"); - uiDefPulldownBut(block, dummy_viewmenu, sa, "Timeline", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Game"); - uiDefPulldownBut(block, dummy_viewmenu, sa, "Game", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Render"); - uiDefPulldownBut(block, dummy_viewmenu, sa, "Render", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Help"); - uiDefPulldownBut(block, dummy_viewmenu, NULL, "Help", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - - uiBlockSetEmboss(block, UI_EMBOSS); - - if(screen->full==0) { - xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)win->screen, ID_SCR, NULL, xco, yco, - screen_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_DELETE); - xco += 8; - xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)screen->scene, ID_SCE, NULL, xco, yco, - scene_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_DELETE); - xco += 8; - } - - if(WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C))) { - uiDefIconTextBut(block, BUT, B_STOPRENDER, ICON_REC, "Render", xco+5,yco,75,19, NULL, 0.0f, 0.0f, 0, 0, "Stop rendering"); - xco+= 80; - } - if(WM_jobs_test(CTX_wm_manager(C), CTX_wm_screen(C))) { - uiDefIconTextBut(block, BUT, B_STOPCAST, ICON_REC, "Capture", xco+5,yco,85,19, NULL, 0.0f, 0.0f, 0, 0, "Stop screencast"); - xco+= 90; - } - if(screen->animtimer) { - uiDefIconTextBut(block, BUT, B_STOPANIM, ICON_REC, "Anim Player", xco+5,yco,85,19, NULL, 0.0f, 0.0f, 0, 0, "Stop animation playback"); - xco+= 90; - } - - { - static char search[256]= ""; - uiBut *but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, xco+5, yco, 120, 19, ""); - - uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb); - - xco+= 125; - } - - - /* always as last */ - UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); - - uiEndBlock(C, block); - uiDrawBlock(C, block); -} - - diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h index 213c0688f20..519364b58d9 100644 --- a/source/blender/editors/space_info/info_intern.h +++ b/source/blender/editors/space_info/info_intern.h @@ -30,10 +30,17 @@ /* internal exports only */ +struct wmOperatorType; /* info_header.c */ void info_header_buttons(const bContext *C, ARegion *ar); +void FILE_OT_pack_all(struct wmOperatorType *ot); +void FILE_OT_unpack_all(struct wmOperatorType *ot); +void FILE_OT_make_paths_relative(struct wmOperatorType *ot); +void FILE_OT_make_paths_absolute(struct wmOperatorType *ot); +void FILE_OT_report_missing_files(struct wmOperatorType *ot); +void FILE_OT_find_missing_files(struct wmOperatorType *ot); #endif /* ED_INFO_INTERN_H */ diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c new file mode 100644 index 00000000000..56f925a2e81 --- /dev/null +++ b/source/blender/editors/space_info/info_ops.c @@ -0,0 +1,397 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "DNA_packedFile_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_bpath.h" + +#include "BKE_context.h" +#include "BKE_global.h" +#include "BKE_image.h" +#include "BKE_main.h" +#include "BKE_packedFile.h" +#include "BKE_report.h" +#include "BKE_screen.h" + +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "BIF_gl.h" +#include "BIF_glutil.h" + +#include "UI_interface.h" +#include "UI_resources.h" + +#include "IMB_imbuf_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_types.h" + +#include "info_intern.h" + +/********************* pack all operator *********************/ + +static int pack_all_exec(bContext *C, wmOperator *op) +{ + Main *bmain= CTX_data_main(C); + + packAll(bmain, op->reports); + G.fileflags |= G_AUTOPACK; + + return OPERATOR_FINISHED; +} + +static int pack_all_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Main *bmain= CTX_data_main(C); + Image *ima; + ImBuf *ibuf; + + // first check for dirty images + for(ima=bmain->image.first; ima; ima=ima->id.next) { + if(ima->ibufs.first) { /* XXX FIX */ + ibuf= BKE_image_get_ibuf(ima, NULL); + + if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) + break; + } + } + + if(ima) { + uiPupMenuOkee(C, "FILE_OT_pack_all", "Some images are painted on. These changes will be lost. Continue?"); + return OPERATOR_CANCELLED; + } + + return pack_all_exec(C, op); +} + +void FILE_OT_pack_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Pack All"; + ot->idname= "FILE_OT_pack_all"; + + /* api callbacks */ + ot->exec= pack_all_exec; + ot->invoke= pack_all_invoke; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/********************* unpack all operator *********************/ + +static const EnumPropertyItem unpack_all_method_items[] = { + {PF_USE_LOCAL, "USE_LOCAL", 0, "Use files in current directory (create when necessary)", ""}, + {PF_WRITE_LOCAL, "WRITE_LOCAL", 0, "Write files to current directory (overwrite existing files)", ""}, + {PF_USE_ORIGINAL, "USE_ORIGINAL", 0, "Use files in original location (create when necessary)", ""}, + {PF_WRITE_ORIGINAL, "WRITE_ORIGINAL", 0, "Write files to original location (overwrite existing files)", ""}, + {PF_KEEP, "KEEP", 0, "Disable AutoPack, keep all packed files", ""}, + {PF_ASK, "ASK", 0, "Ask for each file", ""}, + {0, NULL, 0, NULL, NULL}}; + +static int unpack_all_exec(bContext *C, wmOperator *op) +{ + Main *bmain= CTX_data_main(C); + int method= RNA_enum_get(op->ptr, "method"); + + if(method != PF_KEEP) unpackAll(bmain, op->reports, method); /* XXX PF_ASK can't work here */ + G.fileflags &= ~G_AUTOPACK; + + return OPERATOR_FINISHED; +} + +static int unpack_all_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Main *bmain= CTX_data_main(C); + uiPopupMenu *pup; + uiLayout *layout; + char title[128]; + int count = 0; + + count = countPackedFiles(bmain); + + if(!count) { + BKE_report(op->reports, RPT_WARNING, "No packed files. Autopack disabled."); + G.fileflags &= ~G_AUTOPACK; + return OPERATOR_CANCELLED; + } + + if(count == 1) + sprintf(title, "Unpack 1 file"); + else + sprintf(title, "Unpack %d files", count); + + pup= uiPupMenuBegin(C, title, 0); + layout= uiPupMenuLayout(pup); + + uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); + uiItemsEnumO(layout, "FILE_OT_unpack_all", "method"); + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +void FILE_OT_unpack_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Unpack All"; + ot->idname= "FILE_OT_unpack_all"; + + /* api callbacks */ + ot->exec= unpack_all_exec; + ot->invoke= unpack_all_invoke; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "method", unpack_all_method_items, PF_USE_LOCAL, "Method", "How to unpack."); +} + +/********************* make paths relative operator *********************/ + +static int make_paths_relative_exec(bContext *C, wmOperator *op) +{ + char txtname[24]; /* text block name */ + int tot, changed, failed, linked; + + if(!G.relbase_valid) { + BKE_report(op->reports, RPT_WARNING, "Can't set relative paths with an unsaved blend file."); + return OPERATOR_CANCELLED; + } + + txtname[0] = '\0'; + makeFilesRelative(txtname, &tot, &changed, &failed, &linked); + + if(failed) + BKE_reportf(op->reports, RPT_ERROR, "Total files %i|Changed %i|Failed %i, See Text \"%s\"|Linked %i", tot, changed, failed, txtname, linked); + else + BKE_reportf(op->reports, RPT_INFO, "Total files %i|Changed %i|Failed %i|Linked %i", tot, changed, failed, linked); + + return OPERATOR_FINISHED; +} + +void FILE_OT_make_paths_relative(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Make All Paths Relative"; + ot->idname= "FILE_OT_make_paths_relative"; + + /* api callbacks */ + ot->exec= make_paths_relative_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/********************* make paths absolute operator *********************/ + +static int make_paths_absolute_exec(bContext *C, wmOperator *op) +{ + char txtname[24]; /* text block name */ + int tot, changed, failed, linked; + + if(!G.relbase_valid) { + BKE_report(op->reports, RPT_WARNING, "Can't set absolute paths with an unsaved blend file."); + return OPERATOR_CANCELLED; + } + + txtname[0] = '\0'; + makeFilesAbsolute(txtname, &tot, &changed, &failed, &linked); + + if(failed) + BKE_reportf(op->reports, RPT_ERROR, "Total files %i|Changed %i|Failed %i, See Text \"%s\"|Linked %i", tot, changed, failed, txtname, linked); + else + BKE_reportf(op->reports, RPT_INFO, "Total files %i|Changed %i|Failed %i|Linked %i", tot, changed, failed, linked); + + return OPERATOR_FINISHED; +} + +void FILE_OT_make_paths_absolute(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Make All Paths Absolute"; + ot->idname= "FILE_OT_make_paths_absolute"; + + /* api callbacks */ + ot->exec= make_paths_absolute_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/********************* report missing files operator *********************/ + +static int report_missing_files_exec(bContext *C, wmOperator *op) +{ + char txtname[24]; /* text block name */ + + txtname[0] = '\0'; + + /* run the missing file check */ + checkMissingFiles(txtname); + + if(txtname[0] == '\0') + BKE_report(op->reports, RPT_INFO, "No external files missing."); + else + BKE_reportf(op->reports, RPT_ERROR, "Missing files listed in Text \"%s\"", txtname); + + return OPERATOR_FINISHED; +} + +void FILE_OT_report_missing_files(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Report Missing Files..."; + ot->idname= "FILE_OT_report_missing_files"; + + /* api callbacks */ + ot->exec= report_missing_files_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/********************* find missing files operator *********************/ + +static int find_missing_files_exec(bContext *C, wmOperator *op) +{ + char *filename; + + filename= RNA_string_get_alloc(op->ptr, "filename", NULL, 0); + findMissingFiles(filename); + MEM_freeN(filename); + + return OPERATOR_FINISHED; +} + +static int find_missing_files_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + /* XXX file open button text "Find Missing Files" */ + WM_event_add_fileselect(C, op); + return OPERATOR_RUNNING_MODAL; +} + +void FILE_OT_find_missing_files(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Find Missing Files..."; + ot->idname= "FILE_OT_find_missing_files"; + + /* api callbacks */ + ot->exec= find_missing_files_exec; + ot->invoke= find_missing_files_invoke; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open."); +} + +#if 0 +static void info_filemenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + + uiLayoutSetOperatorContext(layout, WM_OP_EXEC_AREA); + uiItemO(layout, NULL, 0, "WM_OT_read_homefile"); + uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_AREA); + uiItemO(layout, NULL, 0, "WM_OT_open_mainfile"); +// uiDefIconTextBlockBut(block, info_openrecentmenu, NULL, ICON_RIGHTARROW_THIN, "Open Recent",0, yco-=20, 120, 19, ""); +// uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recover Last Session", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); + + uiItemS(layout); + + uiLayoutSetOperatorContext(layout, WM_OP_EXEC_AREA); + uiItemO(layout, NULL, 0, "WM_OT_save_mainfile"); + uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_AREA); + uiItemO(layout, NULL, 0, "WM_OT_save_as_mainfile"); + +#if 0 + if(U.flag & USER_FILECOMPRESS) { + uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Compress File", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 35, "Enable file compression"); + } else { + uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Compress File", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 35, "Enable file compression"); + } + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Rendered Image...|F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Screenshot Subwindow|Ctrl F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Screenshot All|Ctrl Shift F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, ""); +#if GAMEBLENDER == 1 + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Game As Runtime...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, ""); +#endif + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Default Settings|Ctrl U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 31, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Load Factory Settings", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 32, ""); + + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Append or Link|Shift F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Append or Link (Image Browser)|Ctrl F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); +// uiDefIconTextBlockBut(block, info_file_importmenu, NULL, ICON_RIGHTARROW_THIN, "Import", 0, yco-=20, menuwidth, 19, ""); +// uiDefIconTextBlockBut(block, info_file_exportmenu, NULL, ICON_RIGHTARROW_THIN, "Export", 0, yco-=20, menuwidth, 19, ""); + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBlockBut(block, info_externalfiles, NULL, ICON_RIGHTARROW_THIN, "External Data",0, yco-=20, 120, 19, ""); + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Quit Blender|Ctrl Q", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); + uiBlockSetDirection(block, UI_DOWN); + uiTextBoundsBlock(block, 80); + + uiEndBlock(C, block); + return block; +#endif +} +#endif + diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index d72ecd60da9..7b24e8f4e07 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -151,7 +151,12 @@ static void info_main_area_draw(const bContext *C, ARegion *ar) void info_operatortypes(void) { - + WM_operatortype_append(FILE_OT_pack_all); + WM_operatortype_append(FILE_OT_unpack_all); + WM_operatortype_append(FILE_OT_make_paths_relative); + WM_operatortype_append(FILE_OT_make_paths_absolute); + WM_operatortype_append(FILE_OT_report_missing_files); + WM_operatortype_append(FILE_OT_find_missing_files); } void info_keymap(struct wmWindowManager *wm) @@ -162,29 +167,12 @@ void info_keymap(struct wmWindowManager *wm) /* add handlers, stuff you only do once or on area/region changes */ static void info_header_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + ED_region_header_init(ar); } static void info_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - info_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } static void info_main_area_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 79ea90864f3..5edcd203e16 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -4557,6 +4557,7 @@ static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused) uiItemR(layout, NULL, 0, &rna, "rake", 0, 0, 0); uiItemR(layout, NULL, 0, &rna, "anchored", 0, 0, 0); uiItemR(layout, NULL, 0, &rna, "space", 0, 0, 0); + uiItemR(layout, NULL, 0, &rna, "smooth_stroke", 0, 0, 0); uiItemR(layout, NULL, 0, &rna, "flip_direction", 0, 0, 0); } diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 34a935103a7..ea365d59ac7 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -204,7 +204,7 @@ static uiBlock *tool_search_menu(bContext *C, ARegion *ar, void *arg_listbase) uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL); but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, OP_MAX_TYPENAME, 10, 0, 150, 19, ""); - uiButSetSearchFunc(but, operator_search_cb, arg_listbase, operator_call_cb); + uiButSetSearchFunc(but, operator_search_cb, arg_listbase, operator_call_cb, NULL); uiBoundsBlock(block, 6); uiBlockSetDirection(block, UI_DOWN); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 782d426641f..b57f4a91004 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1431,6 +1431,9 @@ static int game_engine_exec(bContext *C, wmOperator *unused) Scene *startscene = CTX_data_scene(C); #if GAMEBLENDER == 1 + + view3d_operator_needs_opengl(C); + SaveState(C); StartKetsjiShell(C, 1); RestoreState(C); diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 8ce0b439b29..93a974c1180 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -84,6 +84,7 @@ typedef struct Brush { #define BRUSH_ANCHORED 256 #define BRUSH_DIR_IN 512 #define BRUSH_SPACE 1024 +#define BRUSH_SMOOTH_STROKE 2048 /* Brush.blend */ #define BRUSH_BLEND_MIX 0 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index d0cd169905f..3549cdbe75f 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -439,6 +439,9 @@ typedef struct ToolSettings { VPaint *wpaint; /* weight paint */ Sculpt *sculpt; + /* Vertex groups */ + float vgroup_weight; + /* Subdivide Settings */ short cornertype; short editbutflag; @@ -470,7 +473,6 @@ typedef struct ToolSettings { float uvcalc_radius; float uvcalc_cubesize; float uvcalc_margin; - float pad; short uvcalc_mapdir; short uvcalc_mapalign; short uvcalc_flag; @@ -537,7 +539,7 @@ typedef struct ToolSettings { /* Alt+RMB option */ char edge_mode; - /* transform */ + /* Transform */ short snap_mode, snap_flag, snap_target; short proportional, prop_mode; } ToolSettings; diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index 4891f44e1cd..d9d68490425 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -53,6 +53,7 @@ typedef struct bScreen { ListBase regionbase; /* screen level regions (menus), runtime only */ struct Scene *scene; + struct Scene *newscene; /* temporary when switching */ short full; /* fade out? */ short winid; /* winid from WM, starts with 1 */ @@ -104,6 +105,9 @@ typedef struct Panel { /* the part from uiBlock that needs saved in file */ int sortorder; /* panels are aligned according to increasing sortorder */ struct Panel *paneltab; /* this panel is tabbed in *paneltab */ void *activedata; /* runtime for panel manipulation */ + + int list_scroll, list_size; + char list_search[64]; } Panel; typedef struct Header { diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index f66c0c31fda..329a3aac148 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -165,6 +165,48 @@ typedef struct SpaceSeq { struct bGPdata *gpd; /* grease-pencil data */ } SpaceSeq; +typedef struct FileSelectParams { + char title[24]; /* title, also used for the text of the execute button */ + char dir[240]; /* directory */ + char file[80]; /* file */ + + short flag; /* settings for filter, hiding files and display mode */ + short sort; /* sort order */ + short display; /* display mode flag */ + short filter; /* filter when (flags & FILE_FILTER) is true */ + + /* XXX - temporary, better move to filelist */ + short active_bookmark; + short pad; + int active_file; + int selstate; + + /* XXX --- still unused -- */ + short f_fp; /* show font preview */ + short menu; /* currently selected option in pupmenu */ + char fp_str[8]; /* string to use for font preview */ + + char *pupmenu; /* allows menu for save options - result stored in menup */ + + /* XXX --- end unused -- */ +} FileSelectParams; + +/* FileSelectParams.display */ +enum FileDisplayTypeE { + FILE_SHORTDISPLAY = 1, + FILE_LONGDISPLAY, + FILE_IMGDISPLAY +}; + +/* FileSelectParams.sort */ +enum FileSortTypeE { + FILE_SORT_NONE = 0, + FILE_SORT_ALPHA = 1, + FILE_SORT_EXTENSION, + FILE_SORT_TIME, + FILE_SORT_SIZE +}; + typedef struct SpaceFile { SpaceLink *next, *prev; ListBase regionbase; /* storage of regions for inactive spaces */ @@ -555,12 +597,6 @@ typedef struct SpaceImaSel { #define FILE_FILTER 256 #define FILE_BOOKMARKS 512 -/* sfile->sort */ -#define FILE_SORTALPHA 0 -#define FILE_SORTDATE 1 -#define FILE_SORTSIZE 2 -#define FILE_SORTEXTENS 3 - /* files in filesel list: 2=ACTIVE */ #define HILITE 1 #define BLENDERFILE 4 diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index e02d2984771..b63fb35c193 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -88,7 +88,8 @@ typedef struct wmWindow { int winid, pad; /* winid also in screens, is for retrieving this window after read */ - struct bScreen *screen; /* active screen */ + struct bScreen *screen; /* active screen */ + struct bScreen *newscreen; /* temporary when switching */ char screenname[32]; /* MAX_ID_NAME for matching window with active screen after file read */ short posx, posy, sizex, sizey; /* window coords */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index cf74a863401..c0a1c979147 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -174,6 +174,7 @@ extern StructRNA RNA_ExplodeModifier; extern StructRNA RNA_ExpressionController; extern StructRNA RNA_Event; extern StructRNA RNA_FCurve; +extern StructRNA RNA_FileSelectParams; extern StructRNA RNA_FModifier; extern StructRNA RNA_FModifierCycles; extern StructRNA RNA_FModifierEnvelope; @@ -374,6 +375,7 @@ extern StructRNA RNA_SpaceNLA; extern StructRNA RNA_SpaceOutliner; extern StructRNA RNA_SpaceSequenceEditor; extern StructRNA RNA_SpaceTextEditor; +extern StructRNA RNA_SpaceFileBrowser; extern StructRNA RNA_SpaceUVEditor; extern StructRNA RNA_SpeedControlSequence; extern StructRNA RNA_SpotLamp; @@ -605,6 +607,14 @@ int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop); int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr); int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr); +/* efficient functions to set properties for arrays */ +int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, PropertyRNA *itemprop, RawArray *array); +int RNA_property_collection_raw_get(struct ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, char *propname, void *array, RawPropertyType type, int len); +int RNA_property_collection_raw_set(struct ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, char *propname, void *array, RawPropertyType type, int len); +int RNA_raw_type_sizeof(RawPropertyType type); +RawPropertyType RNA_property_raw_type(PropertyRNA *prop); + + /* to create ID property groups */ void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop); diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 75f52ededd0..923191cba78 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -110,7 +110,9 @@ typedef enum PropertyFlag { PROP_BUILTIN = 128, PROP_EXPORT = 256, PROP_RUNTIME = 512, - PROP_IDPROPERTY = 1024 + PROP_IDPROPERTY = 1024, + PROP_RAW_ACCESS = 8192, + PROP_RAW_ARRAY = 16384, } PropertyFlag; typedef struct CollectionPropertyIterator { @@ -132,6 +134,21 @@ typedef struct CollectionPointerLink { PointerRNA ptr; } CollectionPointerLink; +typedef enum RawPropertyType { + PROP_RAW_CHAR, + PROP_RAW_SHORT, + PROP_RAW_INT, + PROP_RAW_FLOAT, + PROP_RAW_DOUBLE +} RawPropertyType; + +typedef struct RawArray { + void *array; + RawPropertyType type; + int len; + int stride; +} RawArray; + /* Iterator Utility */ typedef struct EnumPropertyItem { diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 222b9bc4d29..4098ca70356 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -762,6 +762,42 @@ static char *rna_def_property_end_func(FILE *f, StructRNA *srna, PropertyRNA *pr return func; } +static void rna_set_raw_property(PropertyDefRNA *dp, PropertyRNA *prop) +{ + if(dp->dnapointerlevel != 0) + return; + if(!dp->dnatype || !dp->dnaname || !dp->dnastructname) + return; + + if(strcmp(dp->dnatype, "char") == 0) { + prop->rawtype= PROP_RAW_CHAR; + prop->flag |= PROP_RAW_ACCESS; + } + else if(strcmp(dp->dnatype, "short") == 0) { + prop->rawtype= PROP_RAW_SHORT; + prop->flag |= PROP_RAW_ACCESS; + } + else if(strcmp(dp->dnatype, "int") == 0) { + prop->rawtype= PROP_RAW_INT; + prop->flag |= PROP_RAW_ACCESS; + } + else if(strcmp(dp->dnatype, "float") == 0) { + prop->rawtype= PROP_RAW_FLOAT; + prop->flag |= PROP_RAW_ACCESS; + } + else if(strcmp(dp->dnatype, "double") == 0) { + prop->rawtype= PROP_RAW_DOUBLE; + prop->flag |= PROP_RAW_ACCESS; + } +} + +static void rna_set_raw_offset(FILE *f, StructRNA *srna, PropertyRNA *prop) +{ + PropertyDefRNA *dp= rna_find_struct_property_def(srna, prop); + + fprintf(f, "\toffsetof(%s, %s), %d", dp->dnastructname, dp->dnaname, prop->rawtype); +} + static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) { PropertyRNA *prop; @@ -773,6 +809,9 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; if(!prop->arraylength) { + if(!bprop->get && !bprop->set && !dp->booleanbit) + rna_set_raw_property(dp, prop); + bprop->get= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)bprop->get); bprop->set= (void*)rna_def_property_set_func(f, srna, prop, dp, (char*)bprop->set); } @@ -786,10 +825,16 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) IntPropertyRNA *iprop= (IntPropertyRNA*)prop; if(!prop->arraylength) { + if(!iprop->get && !iprop->set) + rna_set_raw_property(dp, prop); + iprop->get= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)iprop->get); iprop->set= (void*)rna_def_property_set_func(f, srna, prop, dp, (char*)iprop->set); } else { + if(!iprop->getarray && !iprop->setarray) + rna_set_raw_property(dp, prop); + iprop->getarray= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)iprop->getarray); iprop->setarray= (void*)rna_def_property_set_func(f, srna, prop, dp, (char*)iprop->setarray); } @@ -799,10 +844,16 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; if(!prop->arraylength) { + if(!fprop->get && !fprop->set) + rna_set_raw_property(dp, prop); + fprop->get= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)fprop->get); fprop->set= (void*)rna_def_property_set_func(f, srna, prop, dp, (char*)fprop->set); } else { + if(!fprop->getarray && !fprop->setarray) + rna_set_raw_property(dp, prop); + fprop->getarray= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)fprop->getarray); fprop->setarray= (void*)rna_def_property_set_func(f, srna, prop, dp, (char*)fprop->setarray); } @@ -841,6 +892,13 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) else if(dp->dnalengthname || dp->dnalengthfixed) cprop->length= (void*)rna_def_property_length_func(f, srna, prop, dp, (char*)cprop->length); + /* test if we can allow raw array access, if it is using our standard + * array get/next function, we can be sure it is an actual array */ + if(cprop->next && cprop->get) + if(strcmp((char*)cprop->next, "rna_iterator_array_next") == 0 && + strcmp((char*)cprop->get, "rna_iterator_array_get") == 0) + prop->flag |= PROP_RAW_ARRAY; + cprop->get= (void*)rna_def_property_get_func(f, srna, prop, dp, (char*)cprop->get); cprop->begin= (void*)rna_def_property_begin_func(f, srna, prop, dp, (char*)cprop->begin); cprop->next= (void*)rna_def_property_next_func(f, srna, prop, dp, (char*)cprop->next); @@ -1538,7 +1596,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr DefRNA.error= 1; } break; - } + } case PROP_BOOLEAN: { BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; unsigned int i; @@ -1558,7 +1616,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr fprintf(f, "};\n\n"); } break; - } + } case PROP_INT: { IntPropertyRNA *iprop= (IntPropertyRNA*)prop; unsigned int i; @@ -1578,7 +1636,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr fprintf(f, "};\n\n"); } break; - } + } case PROP_FLOAT: { FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; unsigned int i; @@ -1598,7 +1656,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr fprintf(f, "};\n\n"); } break; - } + } default: break; } @@ -1613,10 +1671,14 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_print_c_string(f, prop->identifier); fprintf(f, ", %d, ", prop->flag); rna_print_c_string(f, prop->name); fprintf(f, ",\n\t"); - rna_print_c_string(f, prop->description); fprintf(f, ",\n"); - fprintf(f, "%d, ", prop->icon); + rna_print_c_string(f, prop->description); fprintf(f, ",\n\t"); + fprintf(f, "%d,\n", prop->icon); fprintf(f, "\t%s, %s, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), prop->arraylength); - fprintf(f, "\t%s, %d, %s},\n", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable)); + fprintf(f, "\t%s, %d, %s,\n", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable)); + + if(prop->flag & PROP_RAW_ACCESS) rna_set_raw_offset(f, srna, prop); + else fprintf(f, "\t0, 0"); + fprintf(f, "},\n"); switch(prop->type) { case PROP_BOOLEAN: { @@ -1625,7 +1687,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier); else fprintf(f, "NULL\n"); break; - } + } case PROP_INT: { IntPropertyRNA *iprop= (IntPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, %s, %s,\n\t", rna_function_string(iprop->get), rna_function_string(iprop->set), rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), rna_function_string(iprop->range)); @@ -1638,7 +1700,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier); else fprintf(f, "NULL\n"); break; - } + } case PROP_FLOAT: { FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, %s, %s, ", rna_function_string(fprop->get), rna_function_string(fprop->set), rna_function_string(fprop->getarray), rna_function_string(fprop->setarray), rna_function_string(fprop->range)); @@ -1652,13 +1714,13 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier); else fprintf(f, "NULL\n"); break; - } + } case PROP_STRING: { StringPropertyRNA *sprop= (StringPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, %d, ", rna_function_string(sprop->get), rna_function_string(sprop->length), rna_function_string(sprop->set), sprop->maxlength); rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n"); break; - } + } case PROP_ENUM: { EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, ", rna_function_string(eprop->get), rna_function_string(eprop->set), rna_function_string(eprop->itemf)); @@ -1668,14 +1730,14 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr fprintf(f, "NULL, "); fprintf(f, "%d, %d\n", eprop->totitem, eprop->defaultvalue); break; - } + } case PROP_POINTER: { PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, ", rna_function_string(pprop->get), rna_function_string(pprop->set), rna_function_string(pprop->typef)); if(pprop->type) fprintf(f, "&RNA_%s\n", (char*)pprop->type); else fprintf(f, "NULL\n"); break; - } + } case PROP_COLLECTION: { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, ", rna_function_string(cprop->begin), rna_function_string(cprop->next), rna_function_string(cprop->end), rna_function_string(cprop->get), rna_function_string(cprop->length), rna_function_string(cprop->lookupint), rna_function_string(cprop->lookupstring)); @@ -1891,6 +1953,7 @@ static void rna_generate(BlenderRNA *brna, FILE *f, char *filename, char *api_fi fprintf(f, "#include \n"); fprintf(f, "#include \n"); fprintf(f, "#include \n\n"); + fprintf(f, "#include \n\n"); fprintf(f, "#include \"DNA_ID.h\"\n"); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 7defb0676c6..cc8704dc350 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -1522,6 +1522,323 @@ int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, co } } +int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, PropertyRNA *itemprop, RawArray *array) +{ + CollectionPropertyIterator iter; + ArrayIterator *internal; + char *arrayp; + + if(!(prop->flag & PROP_RAW_ARRAY) || !(itemprop->flag & PROP_RAW_ACCESS)) + return 0; + + RNA_property_collection_begin(ptr, prop, &iter); + + if(iter.valid) { + /* get data from array iterator and item property */ + internal= iter.internal; + arrayp= (iter.valid)? iter.ptr.data: NULL; + + if(internal->skip || !RNA_property_editable(&iter.ptr, itemprop)) { + /* we might skip some items, so it's not a proper array */ + RNA_property_collection_end(&iter); + return 0; + } + + array->array= arrayp + itemprop->rawoffset; + array->stride= internal->itemsize; + array->len= ((char*)internal->endptr - arrayp)/internal->itemsize; + array->type= itemprop->rawtype; + } + else + memset(array, 0, sizeof(RawArray)); + + RNA_property_collection_end(&iter); + + return 1; +} + +#define RAW_GET(dtype, var, raw, a) \ +{ \ + switch(raw.type) { \ + case PROP_RAW_CHAR: var = (dtype)((char*)raw.array)[a]; break; \ + case PROP_RAW_SHORT: var = (dtype)((short*)raw.array)[a]; break; \ + case PROP_RAW_INT: var = (dtype)((int*)raw.array)[a]; break; \ + case PROP_RAW_FLOAT: var = (dtype)((float*)raw.array)[a]; break; \ + case PROP_RAW_DOUBLE: var = (dtype)((double*)raw.array)[a]; break; \ + default: var = (dtype)0; \ + } \ +} + +#define RAW_SET(dtype, raw, a, var) \ +{ \ + switch(raw.type) { \ + case PROP_RAW_CHAR: ((char*)raw.array)[a] = (char)var; break; \ + case PROP_RAW_SHORT: ((short*)raw.array)[a] = (short)var; break; \ + case PROP_RAW_INT: ((int*)raw.array)[a] = (int)var; break; \ + case PROP_RAW_FLOAT: ((float*)raw.array)[a] = (float)var; break; \ + case PROP_RAW_DOUBLE: ((double*)raw.array)[a] = (double)var; break; \ + } \ +} + +int RNA_raw_type_sizeof(RawPropertyType type) +{ + switch(type) { + case PROP_RAW_CHAR: return sizeof(char); + case PROP_RAW_SHORT: return sizeof(short); + case PROP_RAW_INT: return sizeof(int); + case PROP_RAW_FLOAT: return sizeof(float); + case PROP_RAW_DOUBLE: return sizeof(double); + default: return 0; + } +} + +static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, char *propname, void *inarray, RawPropertyType intype, int inlen, int set) +{ + StructRNA *ptype; + PointerRNA itemptr; + PropertyRNA *itemprop, *iprop; + PropertyType itemtype; + RawArray in; + int itemlen= 0; + + /* initialize in array, stride assumed 0 in following code */ + in.array= inarray; + in.type= intype; + in.len= inlen; + in.stride= 0; + + ptype= RNA_property_pointer_type(ptr, prop); + + /* try to get item property pointer */ + RNA_pointer_create(NULL, ptype, NULL, &itemptr); + itemprop= RNA_struct_find_property(&itemptr, propname); + + if(itemprop) { + /* we have item property pointer */ + RawArray out; + + /* check type */ + itemtype= RNA_property_type(itemprop); + + if(!ELEM3(itemtype, PROP_BOOLEAN, PROP_INT, PROP_FLOAT)) { + BKE_report(reports, RPT_ERROR, "Only boolean, int and float properties supported."); + return 0; + } + + /* check item array */ + itemlen= RNA_property_array_length(itemprop); + + /* try to access as raw array */ + if(RNA_property_collection_raw_array(ptr, prop, itemprop, &out)) { + if(in.len != itemlen*out.len) { + BKE_reportf(reports, RPT_ERROR, "Array length mismatch (expected %d, got %d).", out.len*itemlen, in.len); + return 0; + } + + /* matching raw types */ + if(out.type == in.type) { + void *inp= in.array; + void *outp= out.array; + int a, size; + + itemlen= (itemlen == 0)? 1: itemlen; + size= RNA_raw_type_sizeof(out.type) * itemlen; + + for(a=0; a in.len) { + BKE_reportf(reports, RPT_ERROR, "Array length mismatch (got %d, expected more).", in.len); + err= 1; + break; + } + + if(itemlen == 0) { + /* handle conversions */ + if(set) { + switch(itemtype) { + case PROP_BOOLEAN: { + int b; + RAW_GET(int, b, in, a); + RNA_property_boolean_set(&itemptr, iprop, b); + break; + } + case PROP_INT: { + int i; + RAW_GET(int, i, in, a); + RNA_property_int_set(&itemptr, iprop, i); + break; + } + case PROP_FLOAT: { + float f; + RAW_GET(float, f, in, a); + RNA_property_float_set(&itemptr, iprop, f); + break; + } + default: + break; + } + } + else { + switch(itemtype) { + case PROP_BOOLEAN: { + int b= RNA_property_boolean_get(&itemptr, iprop); + RAW_SET(int, in, a, b); + break; + } + case PROP_INT: { + int i= RNA_property_int_get(&itemptr, iprop); + RAW_SET(int, in, a, i); + break; + } + case PROP_FLOAT: { + float f= RNA_property_float_get(&itemptr, iprop); + RAW_SET(float, in, a, f); + break; + } + default: + break; + } + } + a++; + } + else { + /* allocate temporary array if needed */ + if(tmparray && tmplen != itemlen) { + MEM_freeN(tmparray); + tmparray= NULL; + } + if(!tmparray) { + tmparray= MEM_callocN(sizeof(float)*itemlen, "RNA tmparray\n"); + tmplen= itemlen; + } + + /* handle conversions */ + if(set) { + switch(itemtype) { + case PROP_BOOLEAN: { + for(j=0; jrawtype; +} + +int RNA_property_collection_raw_get(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, char *propname, void *array, RawPropertyType type, int len) +{ + return rna_raw_access(reports, ptr, prop, propname, array, type, len, 0); +} + +int RNA_property_collection_raw_set(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, char *propname, void *array, RawPropertyType type, int len) +{ + return rna_raw_access(reports, ptr, prop, propname, array, type, len, 1); +} + /* Standard iterator functions */ void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip) @@ -2733,23 +3050,46 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop if(prop->flag & PROP_RNAPTR) { *((PointerRNA*)dest)= *((PointerRNA*)src); + break; + } + + if (ptype!=srna && !RNA_struct_is_a(srna, ptype)) { + fprintf(stderr, "%s.%s: wrong type for parameter %s, an object of type %s was expected, passed an object of type %s\n", tid, fid, pid, RNA_struct_identifier(ptype), RNA_struct_identifier(srna)); + return -1; } - else if (ptype!=srna) { - if (!RNA_struct_is_a(srna, ptype)) { - fprintf(stderr, "%s.%s: wrong type for parameter %s, an object of type %s was expected, passed an object of type %s\n", tid, fid, pid, RNA_struct_identifier(ptype), RNA_struct_identifier(ptype)); - return -1; - } - - *((void**)dest)= *((void**)src); - } + + *((void**)dest)= *((void**)src); break; } case PROP_COLLECTION: { - /* XXX collections are not supported yet */ - fprintf(stderr, "%s.%s: for parameter %s, collections are not supported yet\n", tid, fid, pid); - return -1; + StructRNA *ptype; + ListBase *lb, *clb; + Link *link; + CollectionPointerLink *clink; + + if (ftype!='C') { + fprintf(stderr, "%s.%s: wrong type for parameter %s, a collection was expected\n", tid, fid, pid); + return -1; + } + + lb= (ListBase *)src; + clb= (ListBase *)dest; + ptype= RNA_property_pointer_type(ptr, prop); + + if (ptype!=srna && !RNA_struct_is_a(srna, ptype)) { + fprintf(stderr, "%s.%s: wrong type for parameter %s, a collection of objects of type %s was expected, passed a collection of objects of type %s\n", tid, fid, pid, RNA_struct_identifier(ptype), RNA_struct_identifier(srna)); + return -1; + } + + for (link= lb->first; link; link= link->next) { + clink= MEM_callocN(sizeof(CollectionPointerLink), "CCollectionPointerLink"); + RNA_pointer_create(NULL, srna, link, &clink->ptr); + BLI_addtail(clb, clink); + } + + break; } default: { @@ -2847,6 +3187,13 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, srna, tid, fid, pid); break; } + case PROP_COLLECTION: + { + StructRNA *srna= va_arg(args, StructRNA*); + ListBase *arg= va_arg(args, ListBase*); + err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, srna, tid, fid, pid); + break; + } default: { /* handle errors */ @@ -2904,6 +3251,13 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, srna, tid, fid, pid); break; } + case PROP_COLLECTION: + { + StructRNA *srna= va_arg(args, StructRNA*); + ListBase **arg= va_arg(args, ListBase**); + err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, srna, tid, fid, pid); + break; + } default: { /* handle errors */ @@ -2932,3 +3286,4 @@ int RNA_function_call_direct_va_lookup(bContext *C, ReportList *reports, Pointer return 0; } + diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 90617d01833..7355261c5aa 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -184,6 +184,10 @@ void rna_def_brush(BlenderRNA *brna) prop= RNA_def_property(srna, "space", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SPACE); RNA_def_property_ui_text(prop, "Space", "Limit brush application to the distance specified by spacing."); + + prop= RNA_def_property(srna, "smooth_stroke", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SMOOTH_STROKE); + RNA_def_property_ui_text(prop, "Smooth Stroke", "Brush lags behind mouse and follows a smoother path."); /* not exposed in the interface yet prop= RNA_def_property(srna, "fixed_tex", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 8200a21f4ac..5c4b6a95524 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -535,10 +535,8 @@ static void rna_def_constraint_locate_like(BlenderRNA *brna) srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint"); RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target."); - RNA_def_struct_sdna(srna, "bConstraint"); - prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_PERCENTAGE); - RNA_def_property_float_sdna(prop, NULL, "headtail"); + RNA_def_property_float_sdna(prop, "bConstraint", "headtail"); RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1."); RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c index 07a50235733..7fa27348002 100644 --- a/source/blender/makesrna/intern/rna_context.c +++ b/source/blender/makesrna/intern/rna_context.c @@ -40,11 +40,11 @@ static PointerRNA rna_Context_manager_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C)); } -/*static PointerRNA rna_Context_window_get(PointerRNA *ptr) +static PointerRNA rna_Context_window_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C)); -}*/ +} static PointerRNA rna_Context_screen_get(PointerRNA *ptr) { @@ -96,6 +96,12 @@ static PointerRNA rna_Context_scene_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_Scene, CTX_data_scene(C)); } +static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr) +{ + bContext *C= (bContext*)ptr->data; + return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C)); +} + #else void RNA_def_context(BlenderRNA *brna) @@ -113,10 +119,10 @@ void RNA_def_context(BlenderRNA *brna) RNA_def_property_struct_type(prop, "WindowManager"); RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL); - /* prop= RNA_def_property(srna, "window", PROP_POINTER, PROP_NONE); + prop= RNA_def_property(srna, "window", PROP_POINTER, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_struct_type(prop, "Window"); - RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL); */ + RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL); prop= RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -153,6 +159,12 @@ void RNA_def_context(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_struct_type(prop, "Scene"); RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL); + + prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "ToolSettings"); + RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL); + } #endif diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index bd449acc050..715f03bb3f1 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -112,7 +112,7 @@ StructDefRNA *rna_find_struct_def(StructRNA *srna) return NULL; } -PropertyDefRNA *rna_find_struct_property_def(PropertyRNA *prop) +PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop) { StructDefRNA *dsrna; PropertyDefRNA *dprop; @@ -123,7 +123,7 @@ PropertyDefRNA *rna_find_struct_property_def(PropertyRNA *prop) return NULL; } - dsrna= rna_find_struct_def(DefRNA.laststruct); + dsrna= rna_find_struct_def(srna); dprop= dsrna->cont.properties.last; for (; dprop; dprop= dprop->prev) if (dprop->prop==prop) @@ -150,7 +150,7 @@ PropertyDefRNA *rna_find_property_def(PropertyRNA *prop) return NULL; } - dprop= rna_find_struct_property_def(prop); + dprop= rna_find_struct_property_def(DefRNA.laststruct, prop); if (dprop) return dprop; @@ -1311,7 +1311,7 @@ static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *stru StructDefRNA *ds; PropertyDefRNA *dp; - dp= rna_find_struct_property_def(prop); + dp= rna_find_struct_property_def(DefRNA.laststruct, prop); if (dp==NULL) return NULL; ds= rna_find_struct_def((StructRNA*)dp->cont); @@ -1371,7 +1371,7 @@ void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *struc RNA_def_property_boolean_sdna(prop, structname, propname, booleanbit); - dp= rna_find_struct_property_def(prop); + dp= rna_find_struct_property_def(DefRNA.laststruct, prop); if(dp) dp->booleannegative= 1; @@ -1468,7 +1468,7 @@ void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structnam RNA_def_property_enum_sdna(prop, structname, propname); - dp= rna_find_struct_property_def(prop); + dp= rna_find_struct_property_def(DefRNA.laststruct, prop); if(dp) dp->enumbitflags= 1; @@ -2249,7 +2249,6 @@ int rna_parameter_size(PropertyRNA *parm) #endif } case PROP_COLLECTION: - /* XXX does not work yet */ return sizeof(ListBase); } } diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 4a6fdf5a734..c74e46c17da 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -39,6 +39,8 @@ #ifdef RNA_RUNTIME +#include "IMB_imbuf_types.h" + static void rna_Image_animated_update(bContext *C, PointerRNA *ptr) { Image *ima= (Image*)ptr->data; @@ -52,6 +54,18 @@ static void rna_Image_animated_update(bContext *C, PointerRNA *ptr) } } +static int rna_Image_dirty_get(PointerRNA *ptr) +{ + Image *ima= (Image*)ptr->data; + ImBuf *ibuf; + + for(ibuf=ima->ibufs.first; ibuf; ibuf=ibuf->next) + if(ibuf->userflags & IB_BITMAPDIRTY) + return 1; + + return 0; +} + #else static void rna_def_imageuser(BlenderRNA *brna) @@ -174,6 +188,11 @@ static void rna_def_image(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha."); RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL); + prop= RNA_def_property(srna, "dirty", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Dirty", "Image has changed and is not saved."); + /* generated image (image_generated_change_cb) */ prop= RNA_def_property(srna, "generated_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "gen_type"); diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index c2f2e1d519f..5b8e7c76636 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -256,6 +256,7 @@ void rna_freelistN(struct ListBase *listbase); StructDefRNA *rna_find_struct_def(StructRNA *srna); FunctionDefRNA *rna_find_function_def(FunctionRNA *func); PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm); +PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop); /* Pointer Handling */ diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index 8bae21cca2b..401b430ebc9 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -146,6 +146,10 @@ struct PropertyRNA { /* callback for testing if editable/evaluated */ EditableFunc editable; + + /* raw access */ + int rawoffset; + RawPropertyType rawtype; }; /* Property Types */ diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index e56760f5ca3..39fa6f36f23 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -34,10 +34,37 @@ #include "DNA_meshdata_types.h" #include "DNA_object_types.h" -#include "BKE_customdata.h" - #ifdef RNA_RUNTIME +#include "DNA_scene_types.h" + +#include "BLI_editVert.h" + +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_main.h" +#include "BKE_mesh.h" +#include "BKE_utildefines.h" + +#include "WM_api.h" +#include "WM_types.h" + +static void rna_Mesh_update_data(bContext *C, PointerRNA *ptr) +{ + Main *bmain= CTX_data_main(C); + Scene *scene= CTX_data_scene(C); + ID *id= ptr->id.data; + Object *ob; + + for(ob=bmain->object.first; ob; ob= ob->id.next) { + if(ob->data == id) { + /* XXX this will loop over all objects again (slow) */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + } + } +} + static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value) { MVert *mvert= (MVert*)ptr->data; @@ -183,13 +210,19 @@ static void rna_MeshFace_material_index_range(PointerRNA *ptr, int *min, int *ma *max= me->totcol-1; } +static CustomData *rna_mesh_fdata(Mesh *me) +{ + return (me->edit_mesh)? &me->edit_mesh->fdata: &me->fdata; +} + static int rna_CustomDataLayer_length(PointerRNA *ptr, int type) { Mesh *me= (Mesh*)ptr->id.data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *layer; int i, length= 0; - for(layer=me->fdata.layers, i=0; ifdata.totlayer; layer++, i++) + for(layer=fdata->layers, i=0; itotlayer; layer++, i++) if(layer->type == type) length++; @@ -199,64 +232,96 @@ static int rna_CustomDataLayer_length(PointerRNA *ptr, int type) static int rna_CustomDataLayer_active_get(PointerRNA *ptr, int type, int render) { Mesh *me= (Mesh*)ptr->id.data; - int n= ((CustomDataLayer*)ptr->data) - me->fdata.layers; + CustomData *fdata= rna_mesh_fdata(me); + int n= ((CustomDataLayer*)ptr->data) - fdata->layers; - if(render) return (n == CustomData_get_render_layer_index(&me->fdata, type)); - else return (n == CustomData_get_active_layer_index(&me->fdata, type)); + if(render) return (n == CustomData_get_render_layer_index(fdata, type)); + else return (n == CustomData_get_active_layer_index(fdata, type)); } static void rna_CustomDataLayer_active_set(PointerRNA *ptr, int value, int type, int render) { Mesh *me= (Mesh*)ptr->id.data; - int n= ((CustomDataLayer*)ptr->data) - me->fdata.layers; + CustomData *fdata= rna_mesh_fdata(me); + int n= ((CustomDataLayer*)ptr->data) - fdata->layers; if(value == 0) return; - if(render) CustomData_set_layer_render_index(&me->fdata, type, n); - else CustomData_set_layer_active_index(&me->fdata, type, n); + if(render) CustomData_set_layer_render_index(fdata, type, n); + else CustomData_set_layer_active_index(fdata, type, n); } -static int rna_uv_layer_check(CollectionPropertyIterator *iter, void *data) +static int rna_uv_texture_check(CollectionPropertyIterator *iter, void *data) { CustomDataLayer *layer= (CustomDataLayer*)data; return (layer->type != CD_MTFACE); } -static void rna_Mesh_uv_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +static void rna_Mesh_uv_textures_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_uv_layer_check); + CustomData *fdata= rna_mesh_fdata(me); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_uv_texture_check); } -static int rna_Mesh_uv_layers_length(PointerRNA *ptr) +static int rna_Mesh_uv_textures_length(PointerRNA *ptr) { return rna_CustomDataLayer_length(ptr, CD_MTFACE); } -static PointerRNA rna_Mesh_active_uv_layer_get(PointerRNA *ptr) +static PointerRNA rna_Mesh_active_uv_texture_get(PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - int index= CustomData_get_active_layer_index(&me->fdata, CD_MTFACE); - CustomDataLayer *cdl= (index == -1)? NULL: &me->fdata.layers[index]; + CustomData *fdata= rna_mesh_fdata(me); + int index= CustomData_get_active_layer_index(fdata, CD_MTFACE); + CustomDataLayer *cdl= (index == -1)? NULL: &fdata->layers[index]; return rna_pointer_inherit_refine(ptr, &RNA_MeshTextureFaceLayer, cdl); } -static void rna_Mesh_active_uv_layer_set(PointerRNA *ptr, PointerRNA value) +static void rna_Mesh_active_uv_texture_set(PointerRNA *ptr, PointerRNA value) { Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *cdl; int a; - for(cdl=me->fdata.layers, a=0; afdata.totlayer; cdl++, a++) { + for(cdl=fdata->layers, a=0; atotlayer; cdl++, a++) { if(value.data == cdl) { - CustomData_set_layer_active_index(&me->fdata, CD_MTFACE, a); + CustomData_set_layer_active_index(fdata, CD_MTFACE, a); + mesh_update_customdata_pointers(me); return; } } } +static int rna_Mesh_active_uv_texture_index_get(PointerRNA *ptr) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + return CustomData_get_active_layer(fdata, CD_MTFACE); +} + +static void rna_Mesh_active_uv_texture_index_set(PointerRNA *ptr, int value) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + + CustomData_set_layer_active(fdata, CD_MTFACE, value); + mesh_update_customdata_pointers(me); +} + +static void rna_Mesh_active_uv_texture_index_range(PointerRNA *ptr, int *min, int *max) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + + *min= 0; + *max= CustomData_number_of_layers(fdata, CD_MTFACE)-1; + *max= MAX2(0, *max); +} + static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values) { MTFace *mtface= (MTFace*)ptr->data; @@ -354,46 +419,84 @@ static void rna_MeshTextureFaceLayer_active_set(PointerRNA *ptr, int value) rna_CustomDataLayer_active_set(ptr, value, CD_MTFACE, 0); } -static int rna_vcol_layer_check(CollectionPropertyIterator *iter, void *data) +static void rna_MeshTextureFaceLayer_name_set(PointerRNA *ptr, const char *value) +{ + Mesh *me= (Mesh*)ptr->id.data; + CustomDataLayer *cdl= (CustomDataLayer*)ptr->data; + BLI_strncpy(cdl->name, value, sizeof(cdl->name)); + CustomData_set_layer_unique_name(&me->fdata, cdl - me->fdata.layers); +} + +static int rna_vertex_color_check(CollectionPropertyIterator *iter, void *data) { CustomDataLayer *layer= (CustomDataLayer*)data; return (layer->type != CD_MCOL); } -static void rna_Mesh_vcol_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +static void rna_Mesh_vertex_colors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_vcol_layer_check); + CustomData *fdata= rna_mesh_fdata(me); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_vertex_color_check); } -static int rna_Mesh_vcol_layers_length(PointerRNA *ptr) +static int rna_Mesh_vertex_colors_length(PointerRNA *ptr) { return rna_CustomDataLayer_length(ptr, CD_MCOL); } -static PointerRNA rna_Mesh_active_vcol_layer_get(PointerRNA *ptr) +static PointerRNA rna_Mesh_active_vertex_color_get(PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - int index= CustomData_get_active_layer_index(&me->fdata, CD_MCOL); - CustomDataLayer *cdl= (index == -1)? NULL: &me->fdata.layers[index]; + CustomData *fdata= rna_mesh_fdata(me); + int index= CustomData_get_active_layer_index(fdata, CD_MCOL); + CustomDataLayer *cdl= (index == -1)? NULL: &fdata->layers[index]; return rna_pointer_inherit_refine(ptr, &RNA_MeshColorLayer, cdl); } -static void rna_Mesh_active_vcol_layer_set(PointerRNA *ptr, PointerRNA value) +static void rna_Mesh_active_vertex_color_set(PointerRNA *ptr, PointerRNA value) { Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *cdl; int a; - for(cdl=me->fdata.layers, a=0; afdata.totlayer; cdl++, a++) { + for(cdl=fdata->layers, a=0; atotlayer; cdl++, a++) { if(value.data == cdl) { - CustomData_set_layer_active_index(&me->fdata, CD_MCOL, a); + CustomData_set_layer_active_index(fdata, CD_MCOL, a); + mesh_update_customdata_pointers(me); return; } } } +static int rna_Mesh_active_vertex_color_index_get(PointerRNA *ptr) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + return CustomData_get_active_layer(fdata, CD_MCOL); +} + +static void rna_Mesh_active_vertex_color_index_set(PointerRNA *ptr, int value) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + + CustomData_set_layer_active(fdata, CD_MCOL, value); + mesh_update_customdata_pointers(me); +} + +static void rna_Mesh_active_vertex_color_index_range(PointerRNA *ptr, int *min, int *max) +{ + Mesh *me= (Mesh*)ptr->data; + CustomData *fdata= rna_mesh_fdata(me); + + *min= 0; + *max= CustomData_number_of_layers(fdata, CD_MCOL)-1; + *max= MAX2(0, *max); +} + static void rna_MeshColorLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->id.data; @@ -427,6 +530,14 @@ static void rna_MeshColorLayer_active_set(PointerRNA *ptr, int value) rna_CustomDataLayer_active_set(ptr, value, CD_MCOL, 0); } +static void rna_MeshColorLayer_name_set(PointerRNA *ptr, const char *value) +{ + Mesh *me= (Mesh*)ptr->id.data; + CustomDataLayer *cdl= (CustomDataLayer*)ptr->data; + BLI_strncpy(cdl->name, value, sizeof(cdl->name)); + CustomData_set_layer_unique_name(&me->fdata, cdl - me->fdata.layers); +} + static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->id.data; @@ -449,7 +560,8 @@ static int rna_float_layer_check(CollectionPropertyIterator *iter, void *data) static void rna_Mesh_float_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_float_layer_check); + CustomData *fdata= rna_mesh_fdata(me); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_float_layer_check); } static int rna_Mesh_float_layers_length(PointerRNA *ptr) @@ -479,7 +591,8 @@ static int rna_MeshIntPropertyLayer_data_length(PointerRNA *ptr) static void rna_Mesh_int_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_int_layer_check); + CustomData *fdata= rna_mesh_fdata(me); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_int_layer_check); } static int rna_Mesh_int_layers_length(PointerRNA *ptr) @@ -509,7 +622,8 @@ static int rna_MeshStringPropertyLayer_data_length(PointerRNA *ptr) static void rna_Mesh_string_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Mesh *me= (Mesh*)ptr->data; - rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_string_layer_check); + CustomData *fdata= rna_mesh_fdata(me); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_string_layer_check); } static int rna_Mesh_string_layers_length(PointerRNA *ptr) @@ -568,17 +682,18 @@ static char *rna_MeshVertex_path(PointerRNA *ptr) static char *rna_MeshTextureFaceLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("uv_layers[%s]", ((CustomDataLayer*)ptr->data)->name); + return BLI_sprintfN("uv_textures[%s]", ((CustomDataLayer*)ptr->data)->name); } static char *rna_CustomDataData_path(PointerRNA *ptr, char *collection, int type) { Mesh *me= (Mesh*)ptr->id.data; + CustomData *fdata= rna_mesh_fdata(me); CustomDataLayer *cdl; int a; size_t b; - for(cdl=me->fdata.layers, a=0; afdata.totlayer; cdl++, a++) { + for(cdl=fdata->layers, a=0; atotlayer; cdl++, a++) { if(cdl->type == type) { b= ((char*)ptr->data - ((char*)cdl->data))/CustomData_sizeof(type); if(b >= 0 && b < me->totface) @@ -591,17 +706,17 @@ static char *rna_CustomDataData_path(PointerRNA *ptr, char *collection, int type static char *rna_MeshTextureFace_path(PointerRNA *ptr) { - return rna_CustomDataData_path(ptr, "uv_layers", CD_MTFACE); + return rna_CustomDataData_path(ptr, "uv_textures", CD_MTFACE); } static char *rna_MeshColorLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("vcol_layers[%s]", ((CustomDataLayer*)ptr->data)->name); + return BLI_sprintfN("vertex_colors[%s]", ((CustomDataLayer*)ptr->data)->name); } static char *rna_MeshColor_path(PointerRNA *ptr) { - return rna_CustomDataData_path(ptr, "vcol_layers", CD_MCOL); + return rna_CustomDataData_path(ptr, "vertex_colors", CD_MCOL); } static char *rna_MeshSticky_path(PointerRNA *ptr) @@ -716,8 +831,8 @@ static void rna_def_medge(BlenderRNA *brna) prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "v1"); RNA_def_property_array(prop, 2); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Vertices", "Vertex indices"); + // XXX allows creating invalid meshes prop= RNA_def_property(srna, "crease", PROP_FLOAT, PROP_NONE); RNA_def_property_float_funcs(prop, "rna_MEdge_crease_get", "rna_MEdge_crease_set", NULL); @@ -758,8 +873,8 @@ static void rna_def_mface(BlenderRNA *brna) prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "v1"); RNA_def_property_array(prop, 4); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Vertices", "Vertex indices"); + // XXX allows creating invalid meshes prop= RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "mat_nr"); @@ -798,6 +913,7 @@ static void rna_def_mtface(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_struct_name_property(srna, prop); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshTextureFaceLayer_name_set"); RNA_def_property_ui_text(prop, "Name", ""); prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); @@ -935,6 +1051,7 @@ static void rna_def_mcol(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_struct_name_property(srna, prop); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshColorLayer_name_set"); RNA_def_property_ui_text(prop, "Name", ""); prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); @@ -1104,7 +1221,6 @@ static void rna_def_mesh(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert"); RNA_def_property_struct_type(prop, "MeshVertex"); RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh."); - // XXX RNA_def_property_collection_funcs(prop, "rna_Mesh_verts_begin", 0, 0, 0, 0, 0, 0, "add_verts", "remove_verts"); prop= RNA_def_property(srna, "edges", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "medge", "totedge"); @@ -1121,33 +1237,45 @@ static void rna_def_mesh(BlenderRNA *brna) RNA_def_property_struct_type(prop, "MeshSticky"); RNA_def_property_ui_text(prop, "Sticky", "Sticky texture coordinates."); - /* UV layers */ + /* UV textures */ - prop= RNA_def_property(srna, "uv_layers", PROP_COLLECTION, PROP_NONE); + prop= RNA_def_property(srna, "uv_textures", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer"); - RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_layers_begin", 0, 0, 0, "rna_Mesh_uv_layers_length", 0, 0, 0, 0); + RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_textures_begin", 0, 0, 0, "rna_Mesh_uv_textures_length", 0, 0, 0, 0); RNA_def_property_struct_type(prop, "MeshTextureFaceLayer"); - RNA_def_property_ui_text(prop, "UV Layers", ""); + RNA_def_property_ui_text(prop, "UV Textures", ""); - prop= RNA_def_property(srna, "active_uv_layer", PROP_POINTER, PROP_UNSIGNED); + prop= RNA_def_property(srna, "active_uv_texture", PROP_POINTER, PROP_UNSIGNED); RNA_def_property_struct_type(prop, "MeshTextureFaceLayer"); - RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_layer_get", "rna_Mesh_active_uv_layer_set", NULL); + RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_texture_get", "rna_Mesh_active_uv_texture_set", NULL); RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Active UV Layer", "Active UV layer."); + RNA_def_property_ui_text(prop, "Active UV Texture", "Active UV texture."); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); - /* VCol layers */ + prop= RNA_def_property(srna, "active_uv_texture_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_Mesh_active_uv_texture_index_get", "rna_Mesh_active_uv_texture_index_set", "rna_Mesh_active_uv_texture_index_range"); + RNA_def_property_ui_text(prop, "Active UV Texture Index", "Active UV texture index."); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); - prop= RNA_def_property(srna, "vcol_layers", PROP_COLLECTION, PROP_NONE); + /* Vertex colors */ + + prop= RNA_def_property(srna, "vertex_colors", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer"); - RNA_def_property_collection_funcs(prop, "rna_Mesh_vcol_layers_begin", 0, 0, 0, "rna_Mesh_vcol_layers_length", 0, 0, 0, 0); + RNA_def_property_collection_funcs(prop, "rna_Mesh_vertex_colors_begin", 0, 0, 0, "rna_Mesh_vertex_colors_length", 0, 0, 0, 0); RNA_def_property_struct_type(prop, "MeshColorLayer"); - RNA_def_property_ui_text(prop, "Vertex Color Layers", ""); + RNA_def_property_ui_text(prop, "Vertex Colors", ""); - prop= RNA_def_property(srna, "active_vcol_layer", PROP_POINTER, PROP_UNSIGNED); + prop= RNA_def_property(srna, "active_vertex_color", PROP_POINTER, PROP_UNSIGNED); RNA_def_property_struct_type(prop, "MeshColorLayer"); - RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vcol_layer_get", "rna_Mesh_active_vcol_layer_set", NULL); + RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vertex_color_get", "rna_Mesh_active_vertex_color_set", NULL); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer."); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); + + prop= RNA_def_property(srna, "active_vertex_color_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_Mesh_active_vertex_color_index_get", "rna_Mesh_active_vertex_color_index_set", "rna_Mesh_active_vertex_color_index_range"); + RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index."); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); prop= RNA_def_property(srna, "float_layers", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer"); @@ -1183,6 +1311,7 @@ static void rna_def_mesh(BlenderRNA *brna) prop= RNA_def_property(srna, "double_sided", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_TWOSIDED); RNA_def_property_ui_text(prop, "Double Sided", "Render/display the mesh with double or single sided lighting"); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); prop= RNA_def_property(srna, "texco_mesh", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "texcomesh"); diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c index 26fb77777d7..c98b3fb7b09 100644 --- a/source/blender/makesrna/intern/rna_mesh_api.c +++ b/source/blender/makesrna/intern/rna_mesh_api.c @@ -34,74 +34,207 @@ #ifdef RNA_RUNTIME -#include "BKE_customdata.h" -#include "BKE_DerivedMesh.h" - #include "DNA_mesh_types.h" #include "DNA_scene_types.h" -/* -void rna_Mesh_copy(Mesh *me, Mesh *from) +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_DerivedMesh.h" +#include "BKE_main.h" +#include "BKE_mesh.h" + +#include "BLI_edgehash.h" + +#include "WM_api.h" +#include "WM_types.h" + +static void rna_Mesh_calc_edges(Mesh *mesh) { - copy_mesh_data(me, from); + CustomData edata; + EdgeHashIterator *ehi; + MFace *mf = mesh->mface; + MEdge *med; + EdgeHash *eh = BLI_edgehash_new(); + int i, *index, totedge, totface = mesh->totface; + + for (i = 0; i < totface; i++, mf++) { + if (!BLI_edgehash_haskey(eh, mf->v1, mf->v2)) + BLI_edgehash_insert(eh, mf->v1, mf->v2, NULL); + if (!BLI_edgehash_haskey(eh, mf->v2, mf->v3)) + BLI_edgehash_insert(eh, mf->v2, mf->v3, NULL); + + if (mf->v4) { + if (!BLI_edgehash_haskey(eh, mf->v3, mf->v4)) + BLI_edgehash_insert(eh, mf->v3, mf->v4, NULL); + if (!BLI_edgehash_haskey(eh, mf->v4, mf->v1)) + BLI_edgehash_insert(eh, mf->v4, mf->v1, NULL); + } else { + if (!BLI_edgehash_haskey(eh, mf->v3, mf->v1)) + BLI_edgehash_insert(eh, mf->v3, mf->v1, NULL); + } + } + + totedge = BLI_edgehash_size(eh); + + /* write new edges into a temporary CustomData */ + memset(&edata, 0, sizeof(edata)); + CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge); + + ehi = BLI_edgehashIterator_new(eh); + med = CustomData_get_layer(&edata, CD_MEDGE); + for(i = 0; !BLI_edgehashIterator_isDone(ehi); + BLI_edgehashIterator_step(ehi), ++i, ++med, ++index) { + BLI_edgehashIterator_getKey(ehi, (int*)&med->v1, (int*)&med->v2); + + med->flag = ME_EDGEDRAW|ME_EDGERENDER; + } + BLI_edgehashIterator_free(ehi); + + /* free old CustomData and assign new one */ + CustomData_free(&mesh->edata, mesh->totedge); + mesh->edata = edata; + mesh->totedge = totedge; + + mesh->medge = CustomData_get_layer(&mesh->edata, CD_MEDGE); + + BLI_edgehash_free(eh, NULL); } -void rna_Mesh_copy_applied(Mesh *me, Scene *sce, Object *ob) +static void rna_Mesh_update(Mesh *mesh, bContext *C) { - DerivedMesh *dm= mesh_create_derived_view(sce, ob, CD_MASK_MESH); - DM_to_mesh(dm, me); - dm->release(dm); -} -*/ + Main *bmain= CTX_data_main(C); + Object *ob; -void rna_Mesh_transform(Mesh *me, float **mat) -{ + if(mesh->totface && mesh->totedge == 0) + rna_Mesh_calc_edges(mesh); + + mesh_calc_normals(mesh->mvert, mesh->totvert, mesh->mface, mesh->totface, NULL); + + for(ob=bmain->object.first; ob; ob=ob->id.next) { + if(ob->data == mesh) { + ob->recalc |= OB_RECALC_DATA; + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + } + } } -#if 0 -/* extern struct EditVert *addvertlist(EditMesh *em, float *vec, struct EditVert *example); */ - -static void rna_Mesh_verts_add(PointerRNA *ptr, PointerRNA *ptr_item) +static void rna_Mesh_add_verts(Mesh *mesh, int len) { - //Mesh *me= (Mesh*)ptr->data; + CustomData vdata; + MVert *mvert; + int i, totvert; - /* - // XXX if item is not MVert we fail silently - if (item->type == RNA_MeshVertex) + if(len == 0) return; - // XXX this must be slow... - EditMesh *em= BKE_mesh_get_editmesh(me); + totvert= mesh->totvert + len; + CustomData_copy(&mesh->vdata, &vdata, CD_MASK_MESH, CD_DEFAULT, totvert); + CustomData_copy_data(&mesh->vdata, &vdata, 0, 0, mesh->totvert); - MVert *v = (MVert*)ptr_item->ptr->data; - addvertlist(em, v->co, NULL); + if(!CustomData_has_layer(&vdata, CD_MVERT)) + CustomData_add_layer(&vdata, CD_MVERT, CD_CALLOC, NULL, totvert); - BKE_mesh_end_editmesh(me, em); - */ + CustomData_free(&mesh->vdata, mesh->totvert); + mesh->vdata= vdata; + mesh_update_customdata_pointers(mesh); + + /* scan the input list and insert the new vertices */ + + mvert= &mesh->mvert[mesh->totvert]; + for(i=0; iflag |= SELECT; + + /* set final vertex list size */ + mesh->totvert= totvert; +} + +static void rna_Mesh_add_edges(Mesh *mesh, int len) +{ + CustomData edata; + MEdge *medge; + int i, totedge; + + if(len == 0) + return; + + totedge= mesh->totedge+len; + + /* update customdata */ + CustomData_copy(&mesh->edata, &edata, CD_MASK_MESH, CD_DEFAULT, totedge); + CustomData_copy_data(&mesh->edata, &edata, 0, 0, mesh->totedge); + + if(!CustomData_has_layer(&edata, CD_MEDGE)) + CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge); + + CustomData_free(&mesh->edata, mesh->totedge); + mesh->edata= edata; + mesh_update_customdata_pointers(mesh); + + /* set default flags */ + medge= &mesh->medge[mesh->totedge]; + for(i=0; iflag= ME_EDGEDRAW|ME_EDGERENDER|SELECT; + + mesh->totedge= totedge; +} + +static void rna_Mesh_add_faces(Mesh *mesh, int len) +{ + CustomData fdata; + MFace *mface; + int i, totface; + + if(len == 0) + return; + + totface= mesh->totface + len; /* new face count */ + + /* update customdata */ + CustomData_copy(&mesh->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface); + CustomData_copy_data(&mesh->fdata, &fdata, 0, 0, mesh->totface); + + if(!CustomData_has_layer(&fdata, CD_MFACE)) + CustomData_add_layer(&fdata, CD_MFACE, CD_CALLOC, NULL, totface); + + CustomData_free(&mesh->fdata, mesh->totface); + mesh->fdata= fdata; + mesh_update_customdata_pointers(mesh); + + /* set default flags */ + mface= &mesh->mface[mesh->totface]; + for(i=0; iflag= SELECT; + + mesh->totface= totface; +} + +static void rna_Mesh_add_geometry(Mesh *mesh, int verts, int edges, int faces) +{ + if(verts) + rna_Mesh_add_verts(mesh, verts); + if(edges) + rna_Mesh_add_edges(mesh, edges); + if(faces) + rna_Mesh_add_faces(mesh, faces); } -#endif #else void RNA_api_mesh(StructRNA *srna) { - /*FunctionRNA *func; - PropertyRNA *prop;*/ + FunctionRNA *func; + PropertyRNA *parm; - /* - func= RNA_def_function(srna, "copy", "rna_Mesh_copy"); - RNA_def_function_ui_description(func, "Copy mesh data."); - prop= RNA_def_pointer(func, "src", "Mesh", "", "A mesh to copy data from."); - RNA_def_property_flag(prop, PROP_REQUIRED);*/ + func= RNA_def_function(srna, "add_geometry", "rna_Mesh_add_geometry"); + parm= RNA_def_int(func, "verts", 0, 0, INT_MAX, "Number", "Number of vertices to add.", 0, INT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_int(func, "edges", 0, 0, INT_MAX, "Number", "Number of edges to add.", 0, INT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_int(func, "faces", 0, 0, INT_MAX, "Number", "Number of faces to add.", 0, INT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); - /* - func= RNA_def_function(srna, "add_geom", "rna_Mesh_add_geom"); - RNA_def_function_ui_description(func, "Add geometry data to mesh."); - prop= RNA_def_collection(func, "verts", "?", "", "Vertices."); - RNA_def_property_flag(prop, PROP_REQUIRED); - prop= RNA_def_collection(func, "faces", "?", "", "Faces."); - RNA_def_property_flag(prop, PROP_REQUIRED); - */ + func= RNA_def_function(srna, "update", "rna_Mesh_update"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); } #endif diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 3b54409ffb0..2be0d115dc9 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -42,10 +42,13 @@ #ifdef RNA_RUNTIME +#include "DNA_key_types.h" + #include "BKE_armature.h" #include "BKE_context.h" #include "BKE_curve.h" #include "BKE_depsgraph.h" +#include "BKE_key.h" #include "BKE_material.h" #include "BKE_mesh.h" #include "BKE_particle.h" @@ -131,6 +134,27 @@ static PointerRNA rna_Object_active_vertex_group_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef)); } +static int rna_Object_active_vertex_group_index_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + return MAX2(ob->actdef-1, 0); +} + +static void rna_Object_active_vertex_group_index_set(PointerRNA *ptr, int value) +{ + Object *ob= (Object*)ptr->id.data; + ob->actdef= value+1; +} + +static void rna_Object_active_vertex_group_index_range(PointerRNA *ptr, int *min, int *max) +{ + Object *ob= (Object*)ptr->id.data; + + *min= 0; + *max= BLI_countlist(&ob->defbase)-1; + *max= MAX2(0, *max); +} + void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index) { Object *ob= (Object*)ptr->id.data; @@ -228,11 +252,23 @@ void rna_object_vcollayer_name_set(PointerRNA *ptr, const char *value, char *res BLI_strncpy(result, "", maxlen); } +static int rna_Object_active_material_index_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + return MAX2(ob->actcol-1, 0); +} + +static void rna_Object_active_material_index_set(PointerRNA *ptr, int value) +{ + Object *ob= (Object*)ptr->id.data; + ob->actcol= value+1; +} + static void rna_Object_active_material_index_range(PointerRNA *ptr, int *min, int *max) { Object *ob= (Object*)ptr->id.data; - *min= 1; - *max= ob->totcol; + *min= 0; + *max= MAX2(ob->totcol-1, 0); } static PointerRNA rna_Object_active_material_get(PointerRNA *ptr) @@ -244,14 +280,15 @@ static PointerRNA rna_Object_active_material_get(PointerRNA *ptr) static void rna_Object_active_particle_system_index_range(PointerRNA *ptr, int *min, int *max) { Object *ob= (Object*)ptr->id.data; - *min= 1; - *max= BLI_countlist(&ob->particlesystem); + *min= 0; + *max= BLI_countlist(&ob->particlesystem)-1; + *max= MAX2(0, *max); } static int rna_Object_active_particle_system_index_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; - return psys_get_current_num(ob) + 1; + return psys_get_current_num(ob); } static void rna_Object_active_particle_system_index_set(struct PointerRNA *ptr, int value) @@ -384,6 +421,41 @@ static void rna_GameObjectSettings_state_set(PointerRNA *ptr, const int *values) } } +static void rna_Object_active_shape_key_index_range(PointerRNA *ptr, int *min, int *max) +{ + Object *ob= (Object*)ptr->id.data; + Key *key= ob_get_key(ob); + + *min= 0; + *max= (key)? BLI_countlist(&key->block)-1: 0; + *max= MAX2(0, *max); +} + +static int rna_Object_active_shape_key_index_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + + return MAX2(ob->shapenr-1, 0); +} + +static void rna_Object_active_shape_key_index_set(PointerRNA *ptr, int value) +{ + Object *ob= (Object*)ptr->id.data; + + ob->shapenr= value+1; + ob->shapeflag |= OB_SHAPE_TEMPLOCK; +} + +static void rna_Object_shape_key_lock_set(PointerRNA *ptr, int value) +{ + Object *ob= (Object*)ptr->id.data; + + if(value) ob->shapeflag |= OB_SHAPE_LOCK; + else ob->shapeflag &= ~OB_SHAPE_LOCK; + + ob->shapeflag &= ~OB_SHAPE_TEMPLOCK; +} + #else static void rna_def_vertex_group(BlenderRNA *brna) @@ -814,7 +886,7 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "actcol"); - RNA_def_property_int_funcs(prop, NULL, NULL, "rna_Object_active_material_index_range"); + RNA_def_property_int_funcs(prop, "rna_Object_active_material_index_get", "rna_Object_active_material_index_set", "rna_Object_active_material_index_range"); RNA_def_property_ui_text(prop, "Active Material Index", "Index of active material slot."); /* transform */ @@ -895,8 +967,15 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "active_vertex_group", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "VertexGroup"); - RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", NULL, NULL); + RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", "rna_Object_active_vertex_group_set", NULL); RNA_def_property_ui_text(prop, "Active Vertex Group", "Vertex groups of the object."); + RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_Object_update_data"); + + prop= RNA_def_property(srna, "active_vertex_group_index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "actdef"); + RNA_def_property_int_funcs(prop, "rna_Object_active_vertex_group_index_get", "rna_Object_active_vertex_group_index_set", "rna_Object_active_vertex_group_index_range"); + RNA_def_property_ui_text(prop, "Active Vertex Group Index", "Active index in vertex group array."); + RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_Object_update_data"); /* empty */ @@ -1148,13 +1227,15 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "shape_key_lock", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "shapeflag", OB_SHAPE_LOCK); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_shape_key_lock_set"); RNA_def_property_ui_text(prop, "Shape Key Lock", "Always show the current Shape for this Object."); + RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_Object_update_data"); - prop= RNA_def_property(srna, "active_shape_key", PROP_INT, PROP_NONE); + prop= RNA_def_property(srna, "active_shape_key_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "shapenr"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Active Shape Key", "Current shape key index."); + RNA_def_property_int_funcs(prop, "rna_Object_active_shape_key_index_get", "rna_Object_active_shape_key_index_set", "rna_Object_active_shape_key_index_range"); + RNA_def_property_ui_text(prop, "Active Shape Key Index", "Current shape key index."); + RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_Object_update_data"); RNA_api_object(srna); } diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index 6fa275cec91..14db8ea3377 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -309,14 +309,16 @@ PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key } } while((srna=srna->base)); - group= RNA_struct_idproperties(ptr, 0); + if(ptr->data) { + group= RNA_struct_idproperties(ptr, 0); - if(group) { - for(idp=group->data.group.first; idp; idp=idp->next) { - if(strcmp(idp->name, key) == 0) { - propptr.type= &RNA_Property; - propptr.data= idp; - return propptr; + if(group) { + for(idp=group->data.group.first; idp; idp=idp->next) { + if(strcmp(idp->name, key) == 0) { + propptr.type= &RNA_Property; + propptr.data= idp; + return propptr; + } } } } diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 47c9025149a..5f03b7167f4 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -245,6 +245,11 @@ void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_enum_items(prop, mesh_select_mode_items); RNA_def_property_ui_text(prop, "Mesh Selection Mode", "Mesh selection and display mode."); + prop= RNA_def_property(srna, "vertex_group_weight", PROP_FLOAT, PROP_PERCENTAGE); + RNA_def_property_float_sdna(prop, NULL, "vgroup_weight"); + RNA_def_property_ui_text(prop, "Vertex Group Weight", "Weight to assign in vertex groups."); + + /* Sculpt */ rna_def_sculpt(brna); } diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index b7279757455..a4ba6ec172b 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -42,6 +42,31 @@ EnumPropertyItem region_type_items[] = { #ifdef RNA_RUNTIME +#include "WM_api.h" +#include "WM_types.h" + +static void rna_Screen_scene_set(PointerRNA *ptr, PointerRNA value) +{ + bScreen *sc= (bScreen*)ptr->data; + + if(value.data == NULL) + return; + + /* exception: can't set screens inside of area/region handers */ + sc->newscene= value.data; +} + +static void rna_Screen_scene_update(bContext *C, PointerRNA *ptr) +{ + bScreen *sc= (bScreen*)ptr->data; + + /* exception: can't set screens inside of area/region handers */ + if(sc->newscene) { + WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, sc->newscene); + sc->newscene= NULL; + } +} + #else static void rna_def_scrarea(BlenderRNA *brna) @@ -94,6 +119,9 @@ static void rna_def_bscreen(BlenderRNA *brna) prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the screen."); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL); + RNA_def_property_update(prop, 0, "rna_Screen_scene_update"); prop= RNA_def_property(srna, "areas", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "areabase", NULL); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 9335b3619fc..b29186513f8 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -96,8 +96,8 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) return &RNA_SpaceOutliner; case SPACE_BUTS: return &RNA_SpaceButtonsWindow; - /* case SPACE_FILE: - return &RNA_SpaceFileBrowser;*/ + case SPACE_FILE: + return &RNA_SpaceFileBrowser; case SPACE_IMAGE: return &RNA_SpaceImageEditor; /*case SPACE_INFO: @@ -210,6 +210,13 @@ void rna_SpaceTextEditor_text_set(PointerRNA *ptr, PointerRNA value) st->top= 0; } +void rna_SpaceFileBrowser_params_set(PointerRNA *ptr, PointerRNA value) +{ + SpaceFile *sfile= (SpaceFile*)(ptr->data); + + sfile->params= value.data; +} + /* Space Buttons */ StructRNA *rna_SpaceButtonsWindow_pin_id_typef(PointerRNA *ptr) @@ -971,12 +978,124 @@ static void rna_def_space_nla(BlenderRNA *brna) // TODO... autosnap, dopesheet? } +static void rna_def_fileselect_params(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem file_display_items[] = { + {FILE_SHORTDISPLAY, "FILE_SHORTDISPLAY", ICON_SHORTDISPLAY, "Short List", "Display files as short list"}, + {FILE_LONGDISPLAY, "FILE_LONGDISPLAY", ICON_LONGDISPLAY, "Long List", "Display files as a detailed list"}, + {FILE_IMGDISPLAY, "FILE_IMGDISPLAY", ICON_IMGDISPLAY, "Thumbnails", "Display files as thumbnails"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem file_sort_items[] = { + {FILE_SORT_ALPHA, "FILE_SORT_ALPHA", ICON_SORTALPHA, "Sort alphabetically", "Sort the file list alphabetically."}, + {FILE_SORT_EXTENSION, "FILE_SORT_EXTENSION", ICON_SORTBYEXT, "Sort by extension", "Sort the file list by extension."}, + {FILE_SORT_TIME, "FILE_SORT_TIME", ICON_SORTTIME, "Sort by time", "Sort files by modification time."}, + {FILE_SORT_SIZE, "FILE_SORT_SIZE", ICON_SORTSIZE, "Sort by size", "Sort files by size."}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "FileSelectParams", NULL); + RNA_def_struct_ui_text(srna, "File Select Parameters", "File Select Parameters."); + + prop= RNA_def_property(srna, "display", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "display"); + RNA_def_property_enum_items(prop, file_display_items); + RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list"); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "do_filter", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_FILTER); + RNA_def_property_ui_text(prop, "Filter Files", "Enable filtering of files."); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "hide_dot", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_HIDE_DOT); + RNA_def_property_ui_text(prop, "Hide Dot Files", "Hide hidden dot files."); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST , NULL); + + prop= RNA_def_property(srna, "sort", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "sort"); + RNA_def_property_enum_items(prop, file_sort_items); + RNA_def_property_ui_text(prop, "Sort", ""); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_image", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE); + RNA_def_property_ui_text(prop, "Filter Images", "Show image files."); + RNA_def_property_ui_icon(prop, ICON_FILE_IMAGE, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_blender", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE); + RNA_def_property_ui_text(prop, "Filter Blender", "Show .blend files."); + RNA_def_property_ui_icon(prop, ICON_FILE_BLEND, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_movie", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE); + RNA_def_property_ui_text(prop, "Filter Movies", "Show movie files."); + RNA_def_property_ui_icon(prop, ICON_FILE_MOVIE, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_script", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", PYSCRIPTFILE); + RNA_def_property_ui_text(prop, "Filter Script", "Show script files."); + RNA_def_property_ui_icon(prop, ICON_FILE_SCRIPT, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_font", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", FTFONTFILE); + RNA_def_property_ui_text(prop, "Filter Fonts", "Show font files."); + RNA_def_property_ui_icon(prop, ICON_FILE_FONT, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_sound", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", SOUNDFILE); + RNA_def_property_ui_text(prop, "Filter Sound", "Show sound files."); + RNA_def_property_ui_icon(prop, ICON_FILE_SOUND, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_text", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", TEXTFILE); + RNA_def_property_ui_text(prop, "Filter Text", "Show text files."); + RNA_def_property_ui_icon(prop, ICON_FILE_BLANK, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + prop= RNA_def_property(srna, "filter_folder", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); + RNA_def_property_ui_text(prop, "Filter Folder", "Show folders."); + RNA_def_property_ui_icon(prop, ICON_FILE_FOLDER, 0); + RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + + +} + +static void rna_def_space_filebrowser(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "SpaceFileBrowser", "Space"); + RNA_def_struct_sdna(srna, "SpaceFile"); + RNA_def_struct_ui_text(srna, "Space File Browser", "File browser space data."); + + prop= RNA_def_property(srna, "params", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "params"); + RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceFileBrowser_params_set", NULL); + RNA_def_property_ui_text(prop, "Filebrowser Parameter", "Parameters and Settings for the Filebrowser."); + +} + void RNA_def_space(BlenderRNA *brna) { rna_def_space(brna); rna_def_space_image(brna); rna_def_space_sequencer(brna); rna_def_space_text(brna); + rna_def_fileselect_params(brna); + rna_def_space_filebrowser(brna); rna_def_space_outliner(brna); rna_def_background_image(brna); rna_def_space_3dview(brna); diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 825b3711b97..eef221e45a4 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -416,12 +416,12 @@ static int rna_UILayout_active_get(struct PointerRNA *ptr) static void rna_UILayout_active_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetActive(ptr->data, value); + uiLayoutSetActive(ptr->data, value); } static void rna_UILayout_op_context_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetOperatorContext(ptr->data, value); + uiLayoutSetOperatorContext(ptr->data, value); } static int rna_UILayout_op_context_get(struct PointerRNA *ptr) @@ -436,7 +436,7 @@ static int rna_UILayout_enabled_get(struct PointerRNA *ptr) static void rna_UILayout_enabled_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetEnabled(ptr->data, value); + uiLayoutSetEnabled(ptr->data, value); } static int rna_UILayout_red_alert_get(struct PointerRNA *ptr) @@ -446,7 +446,7 @@ static int rna_UILayout_red_alert_get(struct PointerRNA *ptr) static void rna_UILayout_red_alert_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetRedAlert(ptr->data, value); + uiLayoutSetRedAlert(ptr->data, value); } static int rna_UILayout_keep_aspect_get(struct PointerRNA *ptr) @@ -456,7 +456,7 @@ static int rna_UILayout_keep_aspect_get(struct PointerRNA *ptr) static void rna_UILayout_keep_aspect_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetKeepAspect(ptr->data, value); + uiLayoutSetKeepAspect(ptr->data, value); } static int rna_UILayout_alignment_get(struct PointerRNA *ptr) @@ -466,7 +466,7 @@ static int rna_UILayout_alignment_get(struct PointerRNA *ptr) static void rna_UILayout_alignment_set(struct PointerRNA *ptr, int value) { - return uiLayoutSetAlignment(ptr->data, value); + uiLayoutSetAlignment(ptr->data, value); } static float rna_UILayout_scale_x_get(struct PointerRNA *ptr) @@ -476,7 +476,7 @@ static float rna_UILayout_scale_x_get(struct PointerRNA *ptr) static void rna_UILayout_scale_x_set(struct PointerRNA *ptr, float value) { - return uiLayoutSetScaleX(ptr->data, value); + uiLayoutSetScaleX(ptr->data, value); } static float rna_UILayout_scale_y_get(struct PointerRNA *ptr) @@ -486,7 +486,7 @@ static float rna_UILayout_scale_y_get(struct PointerRNA *ptr) static void rna_UILayout_scale_y_set(struct PointerRNA *ptr, float value) { - return uiLayoutSetScaleY(ptr->data, value); + uiLayoutSetScaleY(ptr->data, value); } #else // RNA_RUNTIME diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index a4aa60775f2..3df3fad3f15 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -259,6 +259,8 @@ void RNA_api_ui_layout(StructRNA *srna) func= RNA_def_function(srna, "template_list", "uiTemplateList"); api_ui_item_rna_common(func); + parm= RNA_def_pointer(func, "active_data", "AnyType", "", "Data from which to take property for the active element."); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR); parm= RNA_def_string(func, "active_property", "", 0, "", "Identifier of property in data, for the active element."); RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_int(func, "rows", 5, 0, INT_MAX, "", "Number of rows to display.", 0, INT_MAX); @@ -266,6 +268,11 @@ void RNA_api_ui_layout(StructRNA *srna) parm= RNA_def_boolean(func, "compact", 0, "", "Use compact, single row list template."); parm= RNA_def_collection(func, "items", 0, "", "Items visible in the list."); RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "template_running_jobs", "uiTemplateRunningJobs"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + + func= RNA_def_function(srna, "template_operator_search", "uiTemplateOperatorSearch"); } #endif diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 1bfc3b6f8f6..f8ab3a86744 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -147,6 +147,8 @@ EnumPropertyItem event_type_items[] = { #ifdef RNA_RUNTIME +#include "WM_api.h" + #include "BKE_idprop.h" static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr) @@ -215,6 +217,28 @@ static int rna_Event_ascii_length(PointerRNA *ptr) return (event->ascii)? 1 : 0; } +static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value) +{ + wmWindow *win= (wmWindow*)ptr->data; + + if(value.data == NULL) + return; + + /* exception: can't set screens inside of area/region handers */ + win->newscreen= value.data; +} + +static void rna_Window_screen_update(bContext *C, PointerRNA *ptr) +{ + wmWindow *win= (wmWindow*)ptr->data; + + /* exception: can't set screens inside of area/region handers */ + if(win->newscreen) { + WM_event_add_notifier(C, NC_SCREEN|ND_SCREENBROWSE, win->newscreen); + win->newscreen= NULL; + } +} + #else static void rna_def_operator(BlenderRNA *brna) @@ -349,6 +373,23 @@ static void rna_def_event(BlenderRNA *brna) RNA_def_property_ui_text(prop, "OS Key", "True when the shift key is held."); } +static void rna_def_window(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "Window", NULL); + RNA_def_struct_ui_text(srna, "Window", "Open window."); + RNA_def_struct_sdna(srna, "wmWindow"); + + prop= RNA_def_property(srna, "screen", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_struct_type(prop, "Screen"); + RNA_def_property_ui_text(prop, "Screen", "Active screen showing in the window."); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_screen_set", NULL); + RNA_def_property_update(prop, 0, "rna_Window_screen_update"); +} + static void rna_def_windowmanager(BlenderRNA *brna) { StructRNA *srna; @@ -362,6 +403,10 @@ static void rna_def_windowmanager(BlenderRNA *brna) RNA_def_property_struct_type(prop, "Operator"); RNA_def_property_ui_text(prop, "Operators", "Operator registry."); + prop= RNA_def_property(srna, "windows", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "Window"); + RNA_def_property_ui_text(prop, "Windows", "Open windows."); + RNA_api_wm(srna); } @@ -371,6 +416,7 @@ void RNA_def_wm(BlenderRNA *brna) rna_def_operator_utils(brna); rna_def_operator_filelist_element(brna); rna_def_event(brna); + rna_def_window(brna); rna_def_windowmanager(brna); } diff --git a/source/blender/python/generic/BGL.c b/source/blender/python/generic/BGL.c index a90fabd3586..de82781cf3a 100644 --- a/source/blender/python/generic/BGL.c +++ b/source/blender/python/generic/BGL.c @@ -83,8 +83,13 @@ static PyObject *Buffer_getattr( PyObject * self, char *name ); static PyObject *Buffer_repr( PyObject * self ); PyTypeObject buffer_Type = { - PyObject_HEAD_INIT( NULL ) /* required python macro */ - 0, /*ob_size */ +#if (PY_VERSION_HEX >= 0x02060000) + PyVarObject_HEAD_INIT(NULL, 0) +#else + /* python 2.5 and below */ + PyObject_HEAD_INIT( NULL ) /* required py macro */ + 0, /* ob_size */ +#endif "buffer", /*tp_name */ sizeof( Buffer ), /*tp_basicsize */ 0, /*tp_itemsize */ diff --git a/source/blender/python/generic/Geometry.c b/source/blender/python/generic/Geometry.c index 8a748241570..b4a34d30051 100644 --- a/source/blender/python/generic/Geometry.c +++ b/source/blender/python/generic/Geometry.c @@ -273,7 +273,7 @@ static PyObject *M_Geometry_LineIntersect2D( PyObject * self, PyObject * args ) /*X of vert, Y of hoz. no calculation needed */ newvec[0]= a1x; newvec[1]= b1y; - return newVectorObject(newvec, 2, Py_NEW); + return newVectorObject(newvec, 2, Py_NEW, NULL); } yi = (float)(((b1y / fabs(b1x - b2x)) * fabs(b2x - a1x)) + ((b2y / fabs(b1x - b2x)) * fabs(b1x - a1x))); @@ -285,7 +285,7 @@ static PyObject *M_Geometry_LineIntersect2D( PyObject * self, PyObject * args ) } newvec[0]= a1x; newvec[1]= yi; - return newVectorObject(newvec, 2, Py_NEW); + return newVectorObject(newvec, 2, Py_NEW, NULL); } else if (fabs(a2y-a1y) < eul) { /* hoz line1 */ if (fabs(b2y-b1y) < eul) { /*hoz line2*/ Py_RETURN_NONE; /*2 hoz lines dont intersect*/ @@ -300,7 +300,7 @@ static PyObject *M_Geometry_LineIntersect2D( PyObject * self, PyObject * args ) } newvec[0]= xi; newvec[1]= a1y; - return newVectorObject(newvec, 2, Py_NEW); + return newVectorObject(newvec, 2, Py_NEW, NULL); } b1 = (a2y-a1y)/(a2x-a1x); @@ -317,7 +317,7 @@ static PyObject *M_Geometry_LineIntersect2D( PyObject * self, PyObject * args ) if ((a1x-xi)*(xi-a2x) >= 0 && (b1x-xi)*(xi-b2x) >= 0 && (a1y-yi)*(yi-a2y) >= 0 && (b1y-yi)*(yi-b2y)>=0) { newvec[0]= xi; newvec[1]= yi; - return newVectorObject(newvec, 2, Py_NEW); + return newVectorObject(newvec, 2, Py_NEW, NULL); } Py_RETURN_NONE; } @@ -355,7 +355,7 @@ static PyObject *M_Geometry_ClosestPointOnLine( PyObject * self, PyObject * args lambda = lambda_cp_line_ex(pt_in, l1, l2, pt_out); ret = PyTuple_New(2); - PyTuple_SET_ITEM( ret, 0, newVectorObject(pt_out, 3, Py_NEW) ); + PyTuple_SET_ITEM( ret, 0, newVectorObject(pt_out, 3, Py_NEW, NULL) ); PyTuple_SET_ITEM( ret, 1, PyFloat_FromDouble(lambda) ); return ret; } @@ -535,7 +535,7 @@ static PyObject *M_Geometry_BezierInterp( PyObject * self, PyObject * args ) list= PyList_New(resolu); fp= coord_array; for(i=0; iquat[3]*quat->quat[3]*vec->vec[2] - 2*quat->quat[0]*quat->quat[2]*vec->vec[0] - quat->quat[2]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[1]*vec->vec[1] - quat->quat[1]*quat->quat[1]*vec->vec[2] + quat->quat[0]*quat->quat[0]*vec->vec[2]; - return newVectorObject(rot, 3, Py_NEW); + return newVectorObject(rot, 3, Py_NEW, NULL); } }else if(VectorObject_Check(arg1)){ vec = (VectorObject*)arg1; @@ -201,7 +201,7 @@ PyObject *quat_rotation(PyObject *arg1, PyObject *arg2) quat->quat[3]*quat->quat[3]*vec->vec[2] - 2*quat->quat[0]*quat->quat[2]*vec->vec[0] - quat->quat[2]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[1]*vec->vec[1] - quat->quat[1]*quat->quat[1]*vec->vec[2] + quat->quat[0]*quat->quat[0]*vec->vec[2]; - return newVectorObject(rot, 3, Py_NEW); + return newVectorObject(rot, 3, Py_NEW, NULL); } } @@ -311,7 +311,7 @@ static PyObject *M_Mathutils_MidpointVecs(PyObject * self, PyObject * args) for(x = 0; x < vec1->size; x++) { vec[x] = 0.5f * (vec1->vec[x] + vec2->vec[x]); } - return newVectorObject(vec, vec1->size, Py_NEW); + return newVectorObject(vec, vec1->size, Py_NEW, NULL); } //----------------------------------Mathutils.ProjectVecs() ------------- //projects vector 1 onto vector 2 @@ -348,7 +348,7 @@ static PyObject *M_Mathutils_ProjectVecs(PyObject * self, PyObject * args) for(x = 0; x < size; x++) { vec[x] = (float)(dot * vec2->vec[x]); } - return newVectorObject(vec, size, Py_NEW); + return newVectorObject(vec, size, Py_NEW, NULL); } //----------------------------------MATRIX FUNCTIONS-------------------- //----------------------------------Mathutils.RotationMatrix() ---------- @@ -493,7 +493,7 @@ static PyObject *M_Mathutils_RotationMatrix(PyObject * self, PyObject * args) mat[3] = 0.0f; } //pass to matrix creation - return newMatrixObject(mat, matSize, matSize, Py_NEW); + return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL); } //----------------------------------Mathutils.TranslationMatrix() ------- //creates a translation matrix @@ -520,7 +520,7 @@ static PyObject *M_Mathutils_TranslationMatrix(PyObject * self, VectorObject * v mat[13] = vec->vec[1]; mat[14] = vec->vec[2]; - return newMatrixObject(mat, 4, 4, Py_NEW); + return newMatrixObject(mat, 4, 4, Py_NEW, NULL); } //----------------------------------Mathutils.ScaleMatrix() ------------- //mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc. @@ -598,7 +598,7 @@ static PyObject *M_Mathutils_ScaleMatrix(PyObject * self, PyObject * args) mat[3] = 0.0f; } //pass to matrix creation - return newMatrixObject(mat, matSize, matSize, Py_NEW); + return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL); } //----------------------------------Mathutils.OrthoProjectionMatrix() --- //mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc. @@ -701,7 +701,7 @@ static PyObject *M_Mathutils_OrthoProjectionMatrix(PyObject * self, PyObject * a mat[3] = 0.0f; } //pass to matrix creation - return newMatrixObject(mat, matSize, matSize, Py_NEW); + return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL); } //----------------------------------Mathutils.ShearMatrix() ------------- //creates a shear matrix @@ -768,7 +768,7 @@ static PyObject *M_Mathutils_ShearMatrix(PyObject * self, PyObject * args) mat[3] = 0.0f; } //pass to matrix creation - return newMatrixObject(mat, matSize, matSize, Py_NEW); + return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL); } //----------------------------------QUATERNION FUNCTIONS----------------- @@ -801,7 +801,7 @@ static PyObject *M_Mathutils_DifferenceQuats(PyObject * self, PyObject * args) tempQuat[x] /= (float)(dot * dot); } QuatMul(quat, tempQuat, quatV->quat); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //----------------------------------Mathutils.Slerp() ------------------ //attemps to interpolate 2 quaternions and return the result @@ -862,7 +862,7 @@ static PyObject *M_Mathutils_Slerp(PyObject * self, PyObject * args) quat[2] = (float)(quat_u[2] * x + quat_v[2] * y); quat[3] = (float)(quat_u[3] * x + quat_v[3] * y); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //----------------------------------EULER FUNCTIONS---------------------- //---------------------------------INTERSECTION FUNCTIONS-------------------- @@ -936,7 +936,7 @@ static PyObject *M_Mathutils_Intersect( PyObject * self, PyObject * args ) VecMulf(dir, t); VecAddf(pvec, orig, dir); - return newVectorObject(pvec, 3, Py_NEW); + return newVectorObject(pvec, 3, Py_NEW, NULL); } //----------------------------------Mathutils.LineIntersect() ------------------- /* Line-Line intersection using algorithm from mathworld.wolfram.com */ @@ -993,8 +993,8 @@ static PyObject *M_Mathutils_LineIntersect( PyObject * self, PyObject * args ) } else { tuple = PyTuple_New( 2 ); - PyTuple_SetItem( tuple, 0, newVectorObject(i1, vec1->size, Py_NEW) ); - PyTuple_SetItem( tuple, 1, newVectorObject(i2, vec1->size, Py_NEW) ); + PyTuple_SetItem( tuple, 0, newVectorObject(i1, vec1->size, Py_NEW, NULL) ); + PyTuple_SetItem( tuple, 1, newVectorObject(i2, vec1->size, Py_NEW, NULL) ); return tuple; } } @@ -1055,7 +1055,7 @@ static PyObject *M_Mathutils_QuadNormal( PyObject * self, PyObject * args ) VecAddf(n1, n2, n1); Normalize(n1); - return newVectorObject(n1, 3, Py_NEW); + return newVectorObject(n1, 3, Py_NEW, NULL); } //----------------------------Mathutils.TriangleNormal() ------------------- @@ -1091,7 +1091,7 @@ static PyObject *M_Mathutils_TriangleNormal( PyObject * self, PyObject * args ) Crossf(n, e2, e1); Normalize(n); - return newVectorObject(n, 3, Py_NEW); + return newVectorObject(n, 3, Py_NEW, NULL); } //--------------------------------- AREA FUNCTIONS-------------------- @@ -1244,7 +1244,7 @@ PyObject *BaseMathObject_getOwner( BaseMathObject * self, void *type ) PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void *type ) { - PyBool_FromLong((self->wrapped == Py_WRAP) ? 1:0); + return PyBool_FromLong((self->wrapped == Py_WRAP) ? 1:0); } void BaseMathObject_dealloc(BaseMathObject * self) @@ -1254,6 +1254,6 @@ void BaseMathObject_dealloc(BaseMathObject * self) PyMem_Free(self->data); Py_XDECREF(self->cb_user); - PyObject_DEL(self); + Py_TYPE(self)->tp_free(self); // PyObject_DEL(self); // breaks subtypes } diff --git a/source/blender/python/generic/euler.c b/source/blender/python/generic/euler.c index 9041eb84a3d..1e0632f4040 100644 --- a/source/blender/python/generic/euler.c +++ b/source/blender/python/generic/euler.c @@ -34,13 +34,6 @@ //-------------------------DOC STRINGS --------------------------- -static char Euler_Zero_doc[] = "() - set all values in the euler to 0"; -static char Euler_Unique_doc[] ="() - sets the euler rotation a unique shortest arc rotation - tests for gimbal lock"; -static char Euler_ToMatrix_doc[] = "() - returns a rotation matrix representing the euler rotation"; -static char Euler_ToQuat_doc[] = "() - returns a quaternion representing the euler rotation"; -static char Euler_Rotate_doc[] = "() - rotate a euler by certain amount around an axis of rotation"; -static char Euler_copy_doc[] = "() - returns a copy of the euler."; -static char Euler_MakeCompatible_doc[] = "(euler) - Make this user compatible with another (no axis flipping)."; static PyObject *Euler_Zero( EulerObject * self ); static PyObject *Euler_Unique( EulerObject * self ); @@ -52,22 +45,21 @@ static PyObject *Euler_copy( EulerObject * self, PyObject *args ); //-----------------------METHOD DEFINITIONS ---------------------- static struct PyMethodDef Euler_methods[] = { - {"zero", (PyCFunction) Euler_Zero, METH_NOARGS, Euler_Zero_doc}, - {"unique", (PyCFunction) Euler_Unique, METH_NOARGS, Euler_Unique_doc}, - {"toMatrix", (PyCFunction) Euler_ToMatrix, METH_NOARGS, Euler_ToMatrix_doc}, - {"toQuat", (PyCFunction) Euler_ToQuat, METH_NOARGS, Euler_ToQuat_doc}, - {"rotate", (PyCFunction) Euler_Rotate, METH_VARARGS, Euler_Rotate_doc}, - {"makeCompatible", (PyCFunction) Euler_MakeCompatible, METH_O, Euler_MakeCompatible_doc}, - {"__copy__", (PyCFunction) Euler_copy, METH_VARARGS, Euler_copy_doc}, - {"copy", (PyCFunction) Euler_copy, METH_VARARGS, Euler_copy_doc}, + {"zero", (PyCFunction) Euler_Zero, METH_NOARGS, NULL}, + {"unique", (PyCFunction) Euler_Unique, METH_NOARGS, NULL}, + {"toMatrix", (PyCFunction) Euler_ToMatrix, METH_NOARGS, NULL}, + {"toQuat", (PyCFunction) Euler_ToQuat, METH_NOARGS, NULL}, + {"rotate", (PyCFunction) Euler_Rotate, METH_VARARGS, NULL}, + {"makeCompatible", (PyCFunction) Euler_MakeCompatible, METH_O, NULL}, + {"__copy__", (PyCFunction) Euler_copy, METH_VARARGS, NULL}, + {"copy", (PyCFunction) Euler_copy, METH_VARARGS, NULL}, {NULL, NULL, 0, NULL} }; //----------------------------------Mathutils.Euler() ------------------- //makes a new euler for you to play with -static PyObject *Euler_new(PyObject * self, PyObject * args) +static PyObject *Euler_new(PyTypeObject * type, PyObject * args, PyObject * kwargs) { - PyObject *listObject = NULL; int size, i; float eul[3]; @@ -84,7 +76,7 @@ static PyObject *Euler_new(PyObject * self, PyObject * args) } } else if (size == 0) { //returns a new empty 3d euler - return newEulerObject(NULL, Py_NEW); + return newEulerObject(NULL, Py_NEW, NULL); } else { listObject = args; } @@ -110,7 +102,7 @@ static PyObject *Euler_new(PyObject * self, PyObject * args) return NULL; } } - return newEulerObject(eul, Py_NEW); + return newEulerObject(eul, Py_NEW, NULL); } //-----------------------------METHODS---------------------------- @@ -118,8 +110,11 @@ static PyObject *Euler_new(PyObject * self, PyObject * args) //return a quaternion representation of the euler static PyObject *Euler_ToQuat(EulerObject * self) { - float eul[3], quat[4]; + float quat[4]; +#ifdef USE_MATHUTILS_DEG + float eul[3]; int x; +#endif if(!BaseMath_ReadCallback(self)) return NULL; @@ -133,7 +128,7 @@ static PyObject *Euler_ToQuat(EulerObject * self) EulToQuat(self->eul, quat); #endif - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //----------------------------Euler.toMatrix()--------------------- //return a matrix representation of the euler @@ -154,16 +149,17 @@ static PyObject *Euler_ToMatrix(EulerObject * self) #else EulToMat3(self->eul, (float (*)[3]) mat); #endif - return newMatrixObject(mat, 3, 3 , Py_NEW); + return newMatrixObject(mat, 3, 3 , Py_NEW, NULL); } //----------------------------Euler.unique()----------------------- //sets the x,y,z values to a unique euler rotation static PyObject *Euler_Unique(EulerObject * self) { +#define PI_2 (Py_PI * 2.0) +#define PI_HALF (Py_PI / 2.0) +#define PI_INV (1.0 / Py_PI) + double heading, pitch, bank; - double pi2 = Py_PI * 2.0f; - double piO2 = Py_PI / 2.0f; - double Opi2 = 1.0f / pi2; if(!BaseMath_ReadCallback(self)) return NULL; @@ -173,35 +169,39 @@ static PyObject *Euler_Unique(EulerObject * self) heading = self->eul[0] * (float)Py_PI / 180; pitch = self->eul[1] * (float)Py_PI / 180; bank = self->eul[2] * (float)Py_PI / 180; +#else + heading = self->eul[0]; + pitch = self->eul[1]; + bank = self->eul[2]; #endif //wrap heading in +180 / -180 pitch += Py_PI; - pitch -= floor(pitch * Opi2) * pi2; + pitch -= floor(pitch * PI_INV) * PI_2; pitch -= Py_PI; - if(pitch < -piO2) { + if(pitch < -PI_HALF) { pitch = -Py_PI - pitch; heading += Py_PI; bank += Py_PI; - } else if(pitch > piO2) { + } else if(pitch > PI_HALF) { pitch = Py_PI - pitch; heading += Py_PI; bank += Py_PI; } //gimbal lock test - if(fabs(pitch) > piO2 - 1e-4) { + if(fabs(pitch) > PI_HALF - 1e-4) { heading += bank; bank = 0.0f; } else { bank += Py_PI; - bank -= (floor(bank * Opi2)) * pi2; + bank -= (floor(bank * PI_INV)) * PI_2; bank -= Py_PI; } heading += Py_PI; - heading -= (floor(heading * Opi2)) * pi2; + heading -= (floor(heading * PI_INV)) * PI_2; heading -= Py_PI; #ifdef USE_MATHUTILS_DEG @@ -271,8 +271,10 @@ static PyObject *Euler_Rotate(EulerObject * self, PyObject *args) static PyObject *Euler_MakeCompatible(EulerObject * self, EulerObject *value) { +#ifdef USE_MATHUTILS_DEG float eul_from_rad[3]; int x; +#endif if(!EulerObject_Check(value)) { PyErr_SetString(PyExc_TypeError, "euler.makeCompatible(euler):expected a single euler argument."); @@ -311,7 +313,7 @@ static PyObject *Euler_copy(EulerObject * self, PyObject *args) if(!BaseMath_ReadCallback(self)) return NULL; - return newEulerObject(self->eul, Py_NEW); + return newEulerObject(self->eul, Py_NEW, Py_TYPE(self)); } //----------------------------print object (internal)-------------- @@ -376,8 +378,7 @@ static PyObject* Euler_richcmpr(PyObject *objectA, PyObject *objectB, int compar Py_RETURN_FALSE; } } -//------------------------tp_doc -static char EulerObject_doc[] = "This is a wrapper for euler objects."; + //---------------------SEQUENCE PROTOCOLS------------------------ //----------------------------len(object)------------------------ //sequence length @@ -460,7 +461,7 @@ static int Euler_ass_slice(EulerObject * self, int begin, int end, PyObject *e; if(!BaseMath_ReadCallback(self)) - return NULL; + return -1; CLAMP(begin, 0, 3); if (end<0) end= 4+end; @@ -562,8 +563,8 @@ PyTypeObject euler_Type = { 0, //tp_getattro 0, //tp_setattro 0, //tp_as_buffer - Py_TPFLAGS_DEFAULT, //tp_flags - EulerObject_doc, //tp_doc + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, //tp_flags + 0, //tp_doc 0, //tp_traverse 0, //tp_clear (richcmpfunc)Euler_richcmpr, //tp_richcompare @@ -596,12 +597,13 @@ PyTypeObject euler_Type = { (i.e. it was allocated elsewhere by MEM_mallocN()) pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON (i.e. it must be created here with PyMEM_malloc())*/ -PyObject *newEulerObject(float *eul, int type) +PyObject *newEulerObject(float *eul, int type, PyTypeObject *base_type) { EulerObject *self; int x; - self = PyObject_NEW(EulerObject, &euler_Type); + if(base_type) self = base_type->tp_alloc(base_type, 0); + else self = PyObject_NEW(EulerObject, &euler_Type); /* init callbacks as NULL */ self->cb_user= NULL; @@ -628,7 +630,7 @@ PyObject *newEulerObject(float *eul, int type) PyObject *newEulerObject_cb(PyObject *cb_user, int cb_type, int cb_subtype) { - EulerObject *self= (EulerObject *)newEulerObject(NULL, Py_NEW); + EulerObject *self= (EulerObject *)newEulerObject(NULL, Py_NEW, NULL); if(self) { Py_INCREF(cb_user); self->cb_user= cb_user; @@ -636,5 +638,5 @@ PyObject *newEulerObject_cb(PyObject *cb_user, int cb_type, int cb_subtype) self->cb_subtype= (unsigned char)cb_subtype; } - return self; + return (PyObject *)self; } diff --git a/source/blender/python/generic/euler.h b/source/blender/python/generic/euler.h index 0bff6de6964..a3706d53756 100644 --- a/source/blender/python/generic/euler.h +++ b/source/blender/python/generic/euler.h @@ -35,8 +35,7 @@ #include "../intern/bpy_compat.h" extern PyTypeObject euler_Type; - -#define EulerObject_Check(v) (Py_TYPE(v) == &euler_Type) +#define EulerObject_Check(_v) PyObject_TypeCheck((_v), &euler_Type) typedef struct { PyObject_VAR_HEAD @@ -55,7 +54,7 @@ be stored in py_data) or be a wrapper for data allocated through blender (stored in blend_data). This is an either/or struct not both*/ //prototypes -PyObject *newEulerObject( float *eul, int type ); +PyObject *newEulerObject( float *eul, int type, PyTypeObject *base_type); PyObject *newEulerObject_cb(PyObject *cb_user, int cb_type, int cb_subtype); #endif /* EXPP_euler_h */ diff --git a/source/blender/python/generic/matrix.c b/source/blender/python/generic/matrix.c index b546aa1226c..5bdbf804618 100644 --- a/source/blender/python/generic/matrix.c +++ b/source/blender/python/generic/matrix.c @@ -97,18 +97,6 @@ Mathutils_Callback mathutils_matrix_vector_cb = { /* matrix vector callbacks, this is so you can do matrix[i][j] = val */ /*-------------------------DOC STRINGS ---------------------------*/ -static char Matrix_Zero_doc[] = "() - set all values in the matrix to 0"; -static char Matrix_Identity_doc[] = "() - set the square matrix to it's identity matrix"; -static char Matrix_Transpose_doc[] = "() - set the matrix to it's transpose"; -static char Matrix_Determinant_doc[] = "() - return the determinant of the matrix"; -static char Matrix_Invert_doc[] = "() - set the matrix to it's inverse if an inverse is possible"; -static char Matrix_TranslationPart_doc[] = "() - return a vector encompassing the translation of the matrix"; -static char Matrix_RotationPart_doc[] = "() - return a vector encompassing the rotation of the matrix"; -static char Matrix_scalePart_doc[] = "() - convert matrix to a 3D vector"; -static char Matrix_Resize4x4_doc[] = "() - resize the matrix to a 4x4 square matrix"; -static char Matrix_toEuler_doc[] = "(eul_compat) - convert matrix to a euler angle rotation, optional euler argument that the new euler will be made compatible with."; -static char Matrix_toQuat_doc[] = "() - convert matrix to a quaternion rotation"; -static char Matrix_copy_doc[] = "() - return a copy of the matrix"; static PyObject *Matrix_Zero( MatrixObject * self ); static PyObject *Matrix_Identity( MatrixObject * self ); @@ -125,19 +113,19 @@ static PyObject *Matrix_copy( MatrixObject * self ); /*-----------------------METHOD DEFINITIONS ----------------------*/ static struct PyMethodDef Matrix_methods[] = { - {"zero", (PyCFunction) Matrix_Zero, METH_NOARGS, Matrix_Zero_doc}, - {"identity", (PyCFunction) Matrix_Identity, METH_NOARGS, Matrix_Identity_doc}, - {"transpose", (PyCFunction) Matrix_Transpose, METH_NOARGS, Matrix_Transpose_doc}, - {"determinant", (PyCFunction) Matrix_Determinant, METH_NOARGS, Matrix_Determinant_doc}, - {"invert", (PyCFunction) Matrix_Invert, METH_NOARGS, Matrix_Invert_doc}, - {"translationPart", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, Matrix_TranslationPart_doc}, - {"rotationPart", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc}, - {"scalePart", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc}, - {"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc}, - {"toEuler", (PyCFunction) Matrix_toEuler, METH_VARARGS, Matrix_toEuler_doc}, - {"toQuat", (PyCFunction) Matrix_toQuat, METH_NOARGS, Matrix_toQuat_doc}, - {"copy", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc}, - {"__copy__", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc}, + {"zero", (PyCFunction) Matrix_Zero, METH_NOARGS, NULL}, + {"identity", (PyCFunction) Matrix_Identity, METH_NOARGS, NULL}, + {"transpose", (PyCFunction) Matrix_Transpose, METH_NOARGS, NULL}, + {"determinant", (PyCFunction) Matrix_Determinant, METH_NOARGS, NULL}, + {"invert", (PyCFunction) Matrix_Invert, METH_NOARGS, NULL}, + {"translationPart", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, NULL}, + {"rotationPart", (PyCFunction) Matrix_RotationPart, METH_NOARGS, NULL}, + {"scalePart", (PyCFunction) Matrix_scalePart, METH_NOARGS, NULL}, + {"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, NULL}, + {"toEuler", (PyCFunction) Matrix_toEuler, METH_VARARGS, NULL}, + {"toQuat", (PyCFunction) Matrix_toQuat, METH_NOARGS, NULL}, + {"copy", (PyCFunction) Matrix_copy, METH_NOARGS, NULL}, + {"__copy__", (PyCFunction) Matrix_copy, METH_NOARGS, NULL}, {NULL, NULL, 0, NULL} }; @@ -158,7 +146,7 @@ static PyObject *Matrix_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyErr_SetString(PyExc_AttributeError, "Mathutils.Matrix(): expects 0-4 numeric sequences of the same size\n"); return NULL; } else if (argSize == 0) { //return empty 4D matrix - return (PyObject *) newMatrixObject(NULL, 4, 4, Py_NEW); + return (PyObject *) newMatrixObject(NULL, 4, 4, Py_NEW, NULL); }else if (argSize == 1){ //copy constructor for matrix objects argObject = PyTuple_GET_ITEM(args, 0); @@ -167,11 +155,7 @@ static PyObject *Matrix_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if(!BaseMath_ReadCallback(mat)) return NULL; - argSize = mat->rowSize; //rows - seqSize = mat->colSize; //col - for(i = 0; i < (seqSize * argSize); i++){ - matrix[i] = mat->contigPtr[i]; - } + memcpy(matrix, mat->contigPtr, sizeof(float) * mat->rowSize * mat->colSize); } }else{ //2-4 arguments (all seqs? all same size?) for(i =0; i < argSize; i++){ @@ -216,7 +200,7 @@ static PyObject *Matrix_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } } } - return newMatrixObject(matrix, argSize, seqSize, Py_NEW); + return newMatrixObject(matrix, argSize, seqSize, Py_NEW, NULL); } /*-----------------------------METHODS----------------------------*/ @@ -239,14 +223,16 @@ static PyObject *Matrix_toQuat(MatrixObject * self) Mat4ToQuat((float (*)[4])*self->matrix, quat); } - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } /*---------------------------Matrix.toEuler() --------------------*/ PyObject *Matrix_toEuler(MatrixObject * self, PyObject *args) { float eul[3], eul_compatf[3]; EulerObject *eul_compat = NULL; +#ifdef USE_MATHUTILS_DEG int x; +#endif if(!BaseMath_ReadCallback(self)) return NULL; @@ -288,7 +274,7 @@ PyObject *Matrix_toEuler(MatrixObject * self, PyObject *args) eul[x] *= (float) (180 / Py_PI); } #endif - return newEulerObject(eul, Py_NEW); + return newEulerObject(eul, Py_NEW, NULL); } /*---------------------------Matrix.resize4x4() ------------------*/ PyObject *Matrix_Resize4x4(MatrixObject * self) @@ -364,7 +350,7 @@ PyObject *Matrix_TranslationPart(MatrixObject * self) vec[1] = self->matrix[3][1]; vec[2] = self->matrix[3][2]; - return newVectorObject(vec, 3, Py_NEW); + return newVectorObject(vec, 3, Py_NEW, NULL); } /*---------------------------Matrix.rotationPart() ---------------*/ PyObject *Matrix_RotationPart(MatrixObject * self) @@ -390,7 +376,7 @@ PyObject *Matrix_RotationPart(MatrixObject * self) mat[7] = self->matrix[2][1]; mat[8] = self->matrix[2][2]; - return newMatrixObject(mat, 3, 3, Py_NEW); + return newMatrixObject(mat, 3, 3, Py_NEW, Py_TYPE(self)); } /*---------------------------Matrix.scalePart() --------------------*/ PyObject *Matrix_scalePart(MatrixObject * self) @@ -419,7 +405,7 @@ PyObject *Matrix_scalePart(MatrixObject * self) scale[0]= tmat[0][0]; scale[1]= tmat[1][1]; scale[2]= tmat[2][2]; - return newVectorObject(scale, 3, Py_NEW); + return newVectorObject(scale, 3, Py_NEW, NULL); } /*---------------------------Matrix.invert() ---------------------*/ PyObject *Matrix_Invert(MatrixObject * self) @@ -589,7 +575,7 @@ PyObject *Matrix_copy(MatrixObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - return (PyObject*)(MatrixObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW); + return (PyObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW, Py_TYPE(self)); } /*----------------------------print object (internal)-------------*/ @@ -674,8 +660,7 @@ static PyObject* Matrix_richcmpr(PyObject *objectA, PyObject *objectB, int compa Py_RETURN_FALSE; } } -/*------------------------tp_doc*/ -static char MatrixObject_doc[] = "This is a wrapper for matrix objects."; + /*---------------------SEQUENCE PROTOCOLS------------------------ ----------------------------len(object)------------------------ sequence length*/ @@ -775,8 +760,7 @@ static PyObject *Matrix_slice(MatrixObject * self, int begin, int end) } /*----------------------------object[z:y]------------------------ sequence slice (set)*/ -static int Matrix_ass_slice(MatrixObject * self, int begin, int end, - PyObject * seq) +static int Matrix_ass_slice(MatrixObject * self, int begin, int end, PyObject * seq) { int i, x, y, size, sub_size = 0; float mat[16], f; @@ -882,7 +866,7 @@ static PyObject *Matrix_add(PyObject * m1, PyObject * m2) } } - return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW); + return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW, NULL); } /*------------------------obj - obj------------------------------ subtraction*/ @@ -915,7 +899,7 @@ static PyObject *Matrix_sub(PyObject * m1, PyObject * m2) } } - return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW); + return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW, NULL); } /*------------------------obj * obj------------------------------ mulplication*/ @@ -954,7 +938,7 @@ static PyObject *Matrix_mul(PyObject * m1, PyObject * m2) } } - return newMatrixObject(mat, mat1->rowSize, mat2->colSize, Py_NEW); + return newMatrixObject(mat, mat1->rowSize, mat2->colSize, Py_NEW, NULL); } if(mat1==NULL){ @@ -965,7 +949,7 @@ static PyObject *Matrix_mul(PyObject * m1, PyObject * m2) mat[((x * mat2->colSize) + y)] = scalar * mat2->matrix[x][y]; } } - return newMatrixObject(mat, mat2->rowSize, mat2->colSize, Py_NEW); + return newMatrixObject(mat, mat2->rowSize, mat2->colSize, Py_NEW, NULL); } PyErr_SetString(PyExc_TypeError, "Matrix multiplication: arguments not acceptable for this operation"); @@ -984,7 +968,7 @@ static PyObject *Matrix_mul(PyObject * m1, PyObject * m2) mat[((x * mat1->colSize) + y)] = scalar * mat1->matrix[x][y]; } } - return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW); + return newMatrixObject(mat, mat1->rowSize, mat1->colSize, Py_NEW, NULL); } } PyErr_SetString(PyExc_TypeError, "Matrix multiplication: arguments not acceptable for this operation"); @@ -1012,6 +996,123 @@ static PySequenceMethods Matrix_SeqMethods = { (ssizeobjargproc) Matrix_ass_item, /* sq_ass_item */ (ssizessizeobjargproc) Matrix_ass_slice, /* sq_ass_slice */ }; + + + +#if (PY_VERSION_HEX >= 0x03000000) +static PyObject *Matrix_subscript(MatrixObject* self, PyObject* item) +{ + if (PyIndex_Check(item)) { + Py_ssize_t i; + i = PyNumber_AsSsize_t(item, PyExc_IndexError); + if (i == -1 && PyErr_Occurred()) + return NULL; + if (i < 0) + i += self->rowSize; + return Matrix_item(self, i); + } else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)item, self->rowSize, &start, &stop, &step, &slicelength) < 0) + return NULL; + + if (slicelength <= 0) { + return PyList_New(0); + } + else if (step == 1) { + return Matrix_slice(self, start, stop); + } + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with matricies"); + return NULL; + } + } + else { + PyErr_Format(PyExc_TypeError, + "vector indices must be integers, not %.200s", + item->ob_type->tp_name); + return NULL; + } +} + +static int Matrix_ass_subscript(MatrixObject* self, PyObject* item, PyObject* value) +{ + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); + if (i == -1 && PyErr_Occurred()) + return -1; + if (i < 0) + i += self->rowSize; + return Matrix_ass_item(self, i, value); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)item, self->rowSize, &start, &stop, &step, &slicelength) < 0) + return -1; + + if (step == 1) + return Matrix_ass_slice(self, start, stop, value); + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with matricies"); + return -1; + } + } + else { + PyErr_Format(PyExc_TypeError, + "matrix indices must be integers, not %.200s", + item->ob_type->tp_name); + return -1; + } +} + +static PyMappingMethods Matrix_AsMapping = { + (lenfunc)Matrix_len, + (binaryfunc)Matrix_subscript, + (objobjargproc)Matrix_ass_subscript +}; +#endif /* (PY_VERSION_HEX >= 0x03000000) */ + + + +#if (PY_VERSION_HEX >= 0x03000000) +static PyNumberMethods Matrix_NumMethods = { + (binaryfunc) Matrix_add, /*nb_add*/ + (binaryfunc) Matrix_sub, /*nb_subtract*/ + (binaryfunc) Matrix_mul, /*nb_multiply*/ + 0, /*nb_remainder*/ + 0, /*nb_divmod*/ + 0, /*nb_power*/ + (unaryfunc) 0, /*nb_negative*/ + (unaryfunc) 0, /*tp_positive*/ + (unaryfunc) 0, /*tp_absolute*/ + (inquiry) 0, /*tp_bool*/ + (unaryfunc) Matrix_inv, /*nb_invert*/ + 0, /*nb_lshift*/ + (binaryfunc)0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ + 0, /*nb_int*/ + 0, /*nb_reserved*/ + 0, /*nb_float*/ + 0, /* nb_inplace_add */ + 0, /* nb_inplace_subtract */ + 0, /* nb_inplace_multiply */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + 0, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + 0, /* nb_inplace_true_divide */ + 0, /* nb_index */ +}; +#else static PyNumberMethods Matrix_NumMethods = { (binaryfunc) Matrix_add, /* __add__ */ (binaryfunc) Matrix_sub, /* __sub__ */ @@ -1037,6 +1138,7 @@ static PyNumberMethods Matrix_NumMethods = { (unaryfunc) 0, /* __oct__ */ (unaryfunc) 0, /* __hex__ */ }; +#endif static PyObject *Matrix_getRowSize( MatrixObject * self, void *type ) { @@ -1080,15 +1182,19 @@ PyTypeObject matrix_Type = { (reprfunc) Matrix_repr, /*tp_repr*/ &Matrix_NumMethods, /*tp_as_number*/ &Matrix_SeqMethods, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ +#if (PY_VERSION_HEX >= 0x03000000) + &Matrix_AsMapping, /*tp_as_mapping*/ +#else + 0, +#endif 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - MatrixObject_doc, /*tp_doc*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ (richcmpfunc)Matrix_richcmpr, /*tp_richcompare*/ @@ -1132,7 +1238,7 @@ self->matrix[1][1] = self->contigPtr[4] */ (i.e. it was allocated elsewhere by MEM_mallocN()) pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON (i.e. it must be created here with PyMEM_malloc())*/ -PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type) +PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type, PyTypeObject *base_type) { MatrixObject *self; int x, row, col; @@ -1143,7 +1249,9 @@ PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type) return NULL; } - self = PyObject_NEW(MatrixObject, &matrix_Type); + if(base_type) self = (MatrixObject *)base_type->tp_alloc(base_type, 0); + else self = PyObject_NEW(MatrixObject, &matrix_Type); + self->rowSize = rowSize; self->colSize = colSize; @@ -1201,7 +1309,7 @@ PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type) PyObject *newMatrixObject_cb(PyObject *cb_user, int rowSize, int colSize, int cb_type, int cb_subtype) { - MatrixObject *self= (MatrixObject *)newMatrixObject(NULL, rowSize, colSize, Py_NEW); + MatrixObject *self= (MatrixObject *)newMatrixObject(NULL, rowSize, colSize, Py_NEW, NULL); if(self) { Py_INCREF(cb_user); self->cb_user= cb_user; @@ -1246,5 +1354,5 @@ static PyObject *column_vector_multiplication(MatrixObject * mat, VectorObject* vecNew[z++] = (float)dot; dot = 0.0f; } - return newVectorObject(vecNew, vec->size, Py_NEW); + return newVectorObject(vecNew, vec->size, Py_NEW, NULL); } diff --git a/source/blender/python/generic/matrix.h b/source/blender/python/generic/matrix.h index 4b073668969..856c711c4ef 100644 --- a/source/blender/python/generic/matrix.h +++ b/source/blender/python/generic/matrix.h @@ -33,8 +33,7 @@ #include extern PyTypeObject matrix_Type; - -#define MatrixObject_Check(v) ((v)->ob_type == &matrix_Type) +#define MatrixObject_Check(_v) PyObject_TypeCheck((_v), &matrix_Type) typedef float **ptRow; typedef struct _Matrix { /* keep aligned with BaseMathObject in Mathutils.h */ @@ -58,7 +57,7 @@ be stored in py_data) or be a wrapper for data allocated through blender (stored in blend_data). This is an either/or struct not both*/ /*prototypes*/ -PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type); +PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type, PyTypeObject *base_type); PyObject *newMatrixObject_cb(PyObject *user, int rowSize, int colSize, int cb_type, int cb_subtype); extern int mathutils_matrix_vector_cb_index; diff --git a/source/blender/python/generic/quat.c b/source/blender/python/generic/quat.c index c004bcd1bf2..b9c491e24e4 100644 --- a/source/blender/python/generic/quat.c +++ b/source/blender/python/generic/quat.c @@ -34,16 +34,6 @@ //-------------------------DOC STRINGS --------------------------- -static char Quaternion_Identity_doc[] = "() - set the quaternion to it's identity (1, vector)"; -static char Quaternion_Negate_doc[] = "() - set all values in the quaternion to their negative"; -static char Quaternion_Conjugate_doc[] = "() - set the quaternion to it's conjugate"; -static char Quaternion_Inverse_doc[] = "() - set the quaternion to it's inverse"; -static char Quaternion_Normalize_doc[] = "() - normalize the vector portion of the quaternion"; -static char Quaternion_ToEuler_doc[] = "(eul_compat) - return a euler rotation representing the quaternion, optional euler argument that the new euler will be made compatible with."; -static char Quaternion_ToMatrix_doc[] = "() - return a rotation matrix representing the quaternion"; -static char Quaternion_Cross_doc[] = "(other) - return the cross product between this quaternion and another"; -static char Quaternion_Dot_doc[] = "(other) - return the dot product between this quaternion and another"; -static char Quaternion_copy_doc[] = "() - return a copy of the quat"; static PyObject *Quaternion_Identity( QuaternionObject * self ); static PyObject *Quaternion_Negate( QuaternionObject * self ); @@ -58,17 +48,17 @@ static PyObject *Quaternion_copy( QuaternionObject * self ); //-----------------------METHOD DEFINITIONS ---------------------- static struct PyMethodDef Quaternion_methods[] = { - {"identity", (PyCFunction) Quaternion_Identity, METH_NOARGS, Quaternion_Identity_doc}, - {"negate", (PyCFunction) Quaternion_Negate, METH_NOARGS, Quaternion_Negate_doc}, - {"conjugate", (PyCFunction) Quaternion_Conjugate, METH_NOARGS, Quaternion_Conjugate_doc}, - {"inverse", (PyCFunction) Quaternion_Inverse, METH_NOARGS, Quaternion_Inverse_doc}, - {"normalize", (PyCFunction) Quaternion_Normalize, METH_NOARGS, Quaternion_Normalize_doc}, - {"toEuler", (PyCFunction) Quaternion_ToEuler, METH_VARARGS, Quaternion_ToEuler_doc}, - {"toMatrix", (PyCFunction) Quaternion_ToMatrix, METH_NOARGS, Quaternion_ToMatrix_doc}, - {"cross", (PyCFunction) Quaternion_Cross, METH_O, Quaternion_Cross_doc}, - {"dot", (PyCFunction) Quaternion_Dot, METH_O, Quaternion_Dot_doc}, - {"__copy__", (PyCFunction) Quaternion_copy, METH_NOARGS, Quaternion_copy_doc}, - {"copy", (PyCFunction) Quaternion_copy, METH_NOARGS, Quaternion_copy_doc}, + {"identity", (PyCFunction) Quaternion_Identity, METH_NOARGS, NULL}, + {"negate", (PyCFunction) Quaternion_Negate, METH_NOARGS, NULL}, + {"conjugate", (PyCFunction) Quaternion_Conjugate, METH_NOARGS, NULL}, + {"inverse", (PyCFunction) Quaternion_Inverse, METH_NOARGS, NULL}, + {"normalize", (PyCFunction) Quaternion_Normalize, METH_NOARGS, NULL}, + {"toEuler", (PyCFunction) Quaternion_ToEuler, METH_VARARGS, NULL}, + {"toMatrix", (PyCFunction) Quaternion_ToMatrix, METH_NOARGS, NULL}, + {"cross", (PyCFunction) Quaternion_Cross, METH_O, NULL}, + {"dot", (PyCFunction) Quaternion_Dot, METH_O, NULL}, + {"__copy__", (PyCFunction) Quaternion_copy, METH_NOARGS, NULL}, + {"copy", (PyCFunction) Quaternion_copy, METH_NOARGS, NULL}, {NULL, NULL, 0, NULL} }; @@ -127,7 +117,7 @@ static PyObject *Quaternion_new(PyTypeObject *type, PyObject *args, PyObject *kw } } } else if (size == 0) { //returns a new empty quat - return newQuaternionObject(NULL, Py_NEW); + return newQuaternionObject(NULL, Py_NEW, NULL); } else { listObject = args; } @@ -167,7 +157,7 @@ static PyObject *Quaternion_new(PyTypeObject *type, PyObject *args, PyObject *kw AxisAngleToQuat(quat, quat, angle); #endif - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //-----------------------------METHODS------------------------------ @@ -211,7 +201,7 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args) eul[x] *= (180 / (float)Py_PI); } #endif - return newEulerObject(eul, Py_NEW); + return newEulerObject(eul, Py_NEW, NULL); } //----------------------------Quaternion.toMatrix()------------------ //return the quat as a matrix @@ -223,7 +213,7 @@ static PyObject *Quaternion_ToMatrix(QuaternionObject * self) return NULL; QuatToMat3(self->quat, (float (*)[3]) mat); - return newMatrixObject(mat, 3, 3, Py_NEW); + return newMatrixObject(mat, 3, 3, Py_NEW, NULL); } //----------------------------Quaternion.cross(other)------------------ @@ -241,7 +231,7 @@ static PyObject *Quaternion_Cross(QuaternionObject * self, QuaternionObject * va return NULL; QuatMul(quat, self->quat, value->quat); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //----------------------------Quaternion.dot(other)------------------ @@ -331,7 +321,7 @@ static PyObject *Quaternion_copy(QuaternionObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - return newQuaternionObject(self->quat, Py_NEW); + return newQuaternionObject(self->quat, Py_NEW, Py_TYPE(self)); } //----------------------------print object (internal)-------------- @@ -394,8 +384,7 @@ static PyObject* Quaternion_richcmpr(PyObject *objectA, PyObject *objectB, int c Py_RETURN_FALSE; } } -//------------------------tp_doc -static char QuaternionObject_doc[] = "This is a wrapper for quaternion objects."; + //---------------------SEQUENCE PROTOCOLS------------------------ //----------------------------len(object)------------------------ //sequence length @@ -529,7 +518,7 @@ static PyObject *Quaternion_add(PyObject * q1, PyObject * q2) return NULL; QuatAdd(quat, quat1->quat, quat2->quat, 1.0f); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //------------------------obj - obj------------------------------ //subtraction @@ -554,7 +543,7 @@ static PyObject *Quaternion_sub(PyObject * q1, PyObject * q2) quat[x] = quat1->quat[x] - quat2->quat[x]; } - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } //------------------------obj * obj------------------------------ //mulplication @@ -585,7 +574,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) if ((scalar == -1.0 && PyErr_Occurred())==0) { /* FLOAT*QUAT */ QUATCOPY(quat, quat2->quat); QuatMulf(quat, scalar); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } PyErr_SetString(PyExc_TypeError, "Quaternion multiplication: val * quat, val is not an acceptable type"); return NULL; @@ -604,7 +593,7 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2) if ((scalar == -1.0 && PyErr_Occurred())==0) { /* QUAT*FLOAT */ QUATCOPY(quat, quat1->quat); QuatMulf(quat, scalar); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } } @@ -622,6 +611,45 @@ static PySequenceMethods Quaternion_SeqMethods = { (ssizeobjargproc) Quaternion_ass_item, /* sq_ass_item */ (ssizessizeobjargproc) Quaternion_ass_slice, /* sq_ass_slice */ }; + +#if (PY_VERSION_HEX >= 0x03000000) +static PyNumberMethods Quaternion_NumMethods = { + (binaryfunc) Quaternion_add, /*nb_add*/ + (binaryfunc) Quaternion_sub, /*nb_subtract*/ + (binaryfunc) Quaternion_mul, /*nb_multiply*/ + 0, /*nb_remainder*/ + 0, /*nb_divmod*/ + 0, /*nb_power*/ + (unaryfunc) 0, /*nb_negative*/ + (unaryfunc) 0, /*tp_positive*/ + (unaryfunc) 0, /*tp_absolute*/ + (inquiry) 0, /*tp_bool*/ + (unaryfunc) 0, /*nb_invert*/ + 0, /*nb_lshift*/ + (binaryfunc)0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ + 0, /*nb_int*/ + 0, /*nb_reserved*/ + 0, /*nb_float*/ + 0, /* nb_inplace_add */ + 0, /* nb_inplace_subtract */ + 0, /* nb_inplace_multiply */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + 0, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + 0, /* nb_inplace_true_divide */ + 0, /* nb_index */ +}; +#else static PyNumberMethods Quaternion_NumMethods = { (binaryfunc) Quaternion_add, /* __add__ */ (binaryfunc) Quaternion_sub, /* __sub__ */ @@ -646,9 +674,8 @@ static PyNumberMethods Quaternion_NumMethods = { (unaryfunc) 0, /* __float__ */ (unaryfunc) 0, /* __oct__ */ (unaryfunc) 0, /* __hex__ */ - }; - +#endif static PyObject *Quaternion_getAxis( QuaternionObject * self, void *type ) { @@ -692,7 +719,7 @@ static PyObject *Quaternion_getAxisVec( QuaternionObject * self, void *type ) EXPP_FloatsAreEqual(vec[2], 0.0f, 10) ){ vec[0] = 1.0f; } - return (PyObject *) newVectorObject(vec, 3, Py_NEW); + return (PyObject *) newVectorObject(vec, 3, Py_NEW, NULL); } @@ -768,8 +795,8 @@ PyTypeObject quaternion_Type = { 0, //tp_getattro 0, //tp_setattro 0, //tp_as_buffer - Py_TPFLAGS_DEFAULT, //tp_flags - QuaternionObject_doc, //tp_doc + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, //tp_flags + 0, //tp_doc 0, //tp_traverse 0, //tp_clear (richcmpfunc)Quaternion_richcmpr, //tp_richcompare @@ -802,11 +829,12 @@ PyTypeObject quaternion_Type = { (i.e. it was allocated elsewhere by MEM_mallocN()) pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON (i.e. it must be created here with PyMEM_malloc())*/ -PyObject *newQuaternionObject(float *quat, int type) +PyObject *newQuaternionObject(float *quat, int type, PyTypeObject *base_type) { QuaternionObject *self; - self = PyObject_NEW(QuaternionObject, &quaternion_Type); + if(base_type) self = base_type->tp_alloc(base_type, 0); + else self = PyObject_NEW(QuaternionObject, &quaternion_Type); /* init callbacks as NULL */ self->cb_user= NULL; @@ -831,7 +859,7 @@ PyObject *newQuaternionObject(float *quat, int type) PyObject *newQuaternionObject_cb(PyObject *cb_user, int cb_type, int cb_subtype) { - QuaternionObject *self= (QuaternionObject *)newQuaternionObject(NULL, Py_NEW); + QuaternionObject *self= (QuaternionObject *)newQuaternionObject(NULL, Py_NEW, NULL); if(self) { Py_INCREF(cb_user); self->cb_user= cb_user; diff --git a/source/blender/python/generic/quat.h b/source/blender/python/generic/quat.h index 2e74b5fa7f9..a7cfb7898b1 100644 --- a/source/blender/python/generic/quat.h +++ b/source/blender/python/generic/quat.h @@ -35,8 +35,7 @@ #include "../intern/bpy_compat.h" extern PyTypeObject quaternion_Type; - -#define QuaternionObject_Check(v) (Py_TYPE(v) == &quaternion_Type) +#define QuaternionObject_Check(_v) PyObject_TypeCheck((_v), &quaternion_Type) typedef struct { /* keep aligned with BaseMathObject in Mathutils.h */ PyObject_VAR_HEAD @@ -55,7 +54,7 @@ be stored in py_data) or be a wrapper for data allocated through blender (stored in blend_data). This is an either/or struct not both*/ //prototypes -PyObject *newQuaternionObject( float *quat, int type ); +PyObject *newQuaternionObject( float *quat, int type, PyTypeObject *base_type); PyObject *newQuaternionObject_cb(PyObject *cb_user, int cb_type, int cb_subtype); #endif /* EXPP_quat_h */ diff --git a/source/blender/python/generic/vector.c b/source/blender/python/generic/vector.c index 9ce0a7ca2f9..b4c74787e05 100644 --- a/source/blender/python/generic/vector.c +++ b/source/blender/python/generic/vector.c @@ -41,19 +41,6 @@ static PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat); /* utility func */ -/*-------------------------DOC STRINGS ---------------------------*/ -static char Vector_Zero_doc[] = "() - set all values in the vector to 0"; -static char Vector_Normalize_doc[] = "() - normalize the vector"; -static char Vector_Negate_doc[] = "() - changes vector to it's additive inverse"; -static char Vector_Resize2D_doc[] = "() - resize a vector to [x,y]"; -static char Vector_Resize3D_doc[] = "() - resize a vector to [x,y,z]"; -static char Vector_Resize4D_doc[] = "() - resize a vector to [x,y,z,w]"; -static char Vector_ToTrackQuat_doc[] = "(track, up) - extract a quaternion from the vector and the track and up axis"; -static char Vector_Reflect_doc[] = "(mirror) - return a vector reflected on the mirror normal"; -static char Vector_Cross_doc[] = "(other) - return the cross product between this vector and another"; -static char Vector_Dot_doc[] = "(other) - return the dot product between this vector and another"; -static char Vector_copy_doc[] = "() - return a copy of the vector"; -static char Vector_swizzle_doc[] = "Swizzle: Get or set axes in specified order"; /*-----------------------METHOD DEFINITIONS ----------------------*/ static PyObject *Vector_Zero( VectorObject * self ); static PyObject *Vector_Normalize( VectorObject * self ); @@ -68,18 +55,18 @@ static PyObject *Vector_Dot( VectorObject * self, VectorObject * value ); static PyObject *Vector_copy( VectorObject * self ); static struct PyMethodDef Vector_methods[] = { - {"zero", (PyCFunction) Vector_Zero, METH_NOARGS, Vector_Zero_doc}, - {"normalize", (PyCFunction) Vector_Normalize, METH_NOARGS, Vector_Normalize_doc}, - {"negate", (PyCFunction) Vector_Negate, METH_NOARGS, Vector_Negate_doc}, - {"resize2D", (PyCFunction) Vector_Resize2D, METH_NOARGS, Vector_Resize2D_doc}, - {"resize3D", (PyCFunction) Vector_Resize3D, METH_NOARGS, Vector_Resize3D_doc}, - {"resize4D", (PyCFunction) Vector_Resize4D, METH_NOARGS, Vector_Resize4D_doc}, - {"toTrackQuat", ( PyCFunction ) Vector_ToTrackQuat, METH_VARARGS, Vector_ToTrackQuat_doc}, - {"reflect", ( PyCFunction ) Vector_Reflect, METH_O, Vector_Reflect_doc}, - {"cross", ( PyCFunction ) Vector_Cross, METH_O, Vector_Dot_doc}, - {"dot", ( PyCFunction ) Vector_Dot, METH_O, Vector_Cross_doc}, - {"copy", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc}, - {"__copy__", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc}, + {"zero", (PyCFunction) Vector_Zero, METH_NOARGS, NULL}, + {"normalize", (PyCFunction) Vector_Normalize, METH_NOARGS, NULL}, + {"negate", (PyCFunction) Vector_Negate, METH_NOARGS, NULL}, + {"resize2D", (PyCFunction) Vector_Resize2D, METH_NOARGS, NULL}, + {"resize3D", (PyCFunction) Vector_Resize3D, METH_NOARGS, NULL}, + {"resize4D", (PyCFunction) Vector_Resize4D, METH_NOARGS, NULL}, + {"toTrackQuat", ( PyCFunction ) Vector_ToTrackQuat, METH_VARARGS, NULL}, + {"reflect", ( PyCFunction ) Vector_Reflect, METH_O, NULL}, + {"cross", ( PyCFunction ) Vector_Cross, METH_O, NULL}, + {"dot", ( PyCFunction ) Vector_Dot, METH_O, NULL}, + {"copy", (PyCFunction) Vector_copy, METH_NOARGS, NULL}, + {"__copy__", (PyCFunction) Vector_copy, METH_NOARGS, NULL}, {NULL, NULL, 0, NULL} }; @@ -104,7 +91,7 @@ static PyObject *Vector_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } } else if (size == 0) { //returns a new empty 3d vector - return newVectorObject(NULL, 3, Py_NEW); + return newVectorObject(NULL, 3, Py_NEW, type); } else { listObject = args; } @@ -131,7 +118,7 @@ static PyObject *Vector_new(PyTypeObject *type, PyObject *args, PyObject *kwds) vec[i]= f; Py_DECREF(v); } - return newVectorObject(vec, size, Py_NEW); + return newVectorObject(vec, size, Py_NEW, type); } /*-----------------------------METHODS---------------------------- */ @@ -362,7 +349,7 @@ static PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args ) vectoquat(vec, track, up, quat); - return newQuaternionObject(quat, Py_NEW); + return newQuaternionObject(quat, Py_NEW, NULL); } /*----------------------------Vector.reflect(mirror) ---------------------- @@ -414,7 +401,7 @@ static PyObject *Vector_Reflect( VectorObject * self, VectorObject * value ) reflect[1] = (dot2 * mirror[1]) - vec[1]; reflect[2] = (dot2 * mirror[2]) - vec[2]; - return newVectorObject(reflect, self->size, Py_NEW); + return newVectorObject(reflect, self->size, Py_NEW, NULL); } static PyObject *Vector_Cross( VectorObject * self, VectorObject * value ) @@ -434,7 +421,7 @@ static PyObject *Vector_Cross( VectorObject * self, VectorObject * value ) if(!BaseMath_ReadCallback(self) || !BaseMath_ReadCallback(value)) return NULL; - vecCross = (VectorObject *)newVectorObject(NULL, 3, Py_NEW); + vecCross = (VectorObject *)newVectorObject(NULL, 3, Py_NEW, NULL); Crossf(vecCross->vec, self->vec, value->vec); return (PyObject *)vecCross; } @@ -470,7 +457,7 @@ static PyObject *Vector_copy(VectorObject * self) if(!BaseMath_ReadCallback(self)) return NULL; - return newVectorObject(self->vec, self->size, Py_NEW); + return newVectorObject(self->vec, self->size, Py_NEW, Py_TYPE(self)); } /*----------------------------print object (internal)------------- @@ -647,7 +634,7 @@ static PyObject *Vector_add(PyObject * v1, PyObject * v2) for(i = 0; i < vec1->size; i++) { vec[i] = vec1->vec[i] + vec2->vec[i]; } - return newVectorObject(vec, vec1->size, Py_NEW); + return newVectorObject(vec, vec1->size, Py_NEW, NULL); } PyErr_SetString(PyExc_AttributeError, "Vector addition: arguments not valid for this operation....\n"); @@ -717,7 +704,7 @@ static PyObject *Vector_sub(PyObject * v1, PyObject * v2) vec[i] = vec1->vec[i] - vec2->vec[i]; } - return newVectorObject(vec, vec1->size, Py_NEW); + return newVectorObject(vec, vec1->size, Py_NEW, NULL); } /*------------------------obj -= obj------------------------------ @@ -812,7 +799,7 @@ static PyObject *Vector_mul(PyObject * v1, PyObject * v2) for(i = 0; i < vec1->size; i++) { vec[i] = vec1->vec[i] * scalar; } - return newVectorObject(vec, vec1->size, Py_NEW); + return newVectorObject(vec, vec1->size, Py_NEW, NULL); } @@ -912,7 +899,7 @@ static PyObject *Vector_div(PyObject * v1, PyObject * v2) for(i = 0; i < vec1->size; i++) { vec[i] = vec1->vec[i] / scalar; } - return newVectorObject(vec, vec1->size, Py_NEW); + return newVectorObject(vec, vec1->size, Py_NEW, NULL); } /*------------------------obj /= obj------------------------------ @@ -960,11 +947,9 @@ static PyObject *Vector_neg(VectorObject *self) vec[i] = -self->vec[i]; } - return newVectorObject(vec, self->size, Py_NEW); + return newVectorObject(vec, self->size, Py_NEW, Py_TYPE(self)); } -/*------------------------tp_doc*/ -static char VectorObject_doc[] = "This is a wrapper for vector objects."; /*------------------------vec_magnitude_nosqrt (internal) - for comparing only */ static double vec_magnitude_nosqrt(float *data, int size) { @@ -1066,17 +1051,139 @@ static PyObject* Vector_richcmpr(PyObject *objectA, PyObject *objectB, int compa Py_RETURN_FALSE; } } + /*-----------------PROTCOL DECLARATIONS--------------------------*/ static PySequenceMethods Vector_SeqMethods = { (inquiry) Vector_len, /* sq_length */ (binaryfunc) 0, /* sq_concat */ - (ssizeargfunc) 0, /* sq_repeat */ + (ssizeargfunc) 0, /* sq_repeat */ (ssizeargfunc) Vector_item, /* sq_item */ - (ssizessizeargfunc) Vector_slice, /* sq_slice */ +#if (PY_VERSION_HEX < 0x03000000) + (ssizessizeargfunc) Vector_slice, /* sq_slice */ /* PY2 ONLY */ +#else + NULL, +#endif (ssizeobjargproc) Vector_ass_item, /* sq_ass_item */ - (ssizessizeobjargproc) Vector_ass_slice, /* sq_ass_slice */ +#if (PY_VERSION_HEX < 0x03000000) + (ssizessizeobjargproc) Vector_ass_slice, /* sq_ass_slice */ /* PY2 ONLY */ +#else + NULL, +#endif }; + + +#if (PY_VERSION_HEX >= 0x03000000) +static PyObject *Vector_subscript(VectorObject* self, PyObject* item) +{ + if (PyIndex_Check(item)) { + Py_ssize_t i; + i = PyNumber_AsSsize_t(item, PyExc_IndexError); + if (i == -1 && PyErr_Occurred()) + return NULL; + if (i < 0) + i += self->size; + return Vector_item(self, i); + } else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)item, self->size, &start, &stop, &step, &slicelength) < 0) + return NULL; + + if (slicelength <= 0) { + return PyList_New(0); + } + else if (step == 1) { + return Vector_slice(self, start, stop); + } + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with vectors"); + return NULL; + } + } + else { + PyErr_Format(PyExc_TypeError, + "vector indices must be integers, not %.200s", + item->ob_type->tp_name); + return NULL; + } +} + +static int Vector_ass_subscript(VectorObject* self, PyObject* item, PyObject* value) +{ + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); + if (i == -1 && PyErr_Occurred()) + return -1; + if (i < 0) + i += self->size; + return Vector_ass_item(self, i, value); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)item, self->size, &start, &stop, &step, &slicelength) < 0) + return -1; + + if (step == 1) + return Vector_ass_slice(self, start, stop, value); + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with vectors"); + return -1; + } + } + else { + PyErr_Format(PyExc_TypeError, + "vector indices must be integers, not %.200s", + item->ob_type->tp_name); + return -1; + } +} + +static PyMappingMethods Vector_AsMapping = { + (lenfunc)Vector_len, + (binaryfunc)Vector_subscript, + (objobjargproc)Vector_ass_subscript +}; +#endif /* (PY_VERSION_HEX >= 0x03000000) */ +#if (PY_VERSION_HEX >= 0x03000000) +static PyNumberMethods Vector_NumMethods = { + (binaryfunc) Vector_add, /*nb_add*/ + (binaryfunc) Vector_sub, /*nb_subtract*/ + (binaryfunc) Vector_mul, /*nb_multiply*/ + 0, /*nb_remainder*/ + 0, /*nb_divmod*/ + 0, /*nb_power*/ + (unaryfunc) Vector_neg, /*nb_negative*/ + (unaryfunc) 0, /*tp_positive*/ + (unaryfunc) 0, /*tp_absolute*/ + (inquiry) 0, /*tp_bool*/ + (unaryfunc) 0, /*nb_invert*/ + 0, /*nb_lshift*/ + (binaryfunc)0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ + 0, /*nb_int*/ + 0, /*nb_reserved*/ + 0, /*nb_float*/ + Vector_iadd, /* nb_inplace_add */ + Vector_isub, /* nb_inplace_subtract */ + Vector_imul, /* nb_inplace_multiply */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + Vector_div, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + Vector_idiv, /* nb_inplace_true_divide */ + 0, /* nb_index */ +}; +#else static PyNumberMethods Vector_NumMethods = { (binaryfunc) Vector_add, /* __add__ */ (binaryfunc) Vector_sub, /* __sub__ */ @@ -1122,6 +1229,8 @@ static PyNumberMethods Vector_NumMethods = { (binaryfunc) NULL, /*__ifloordiv__*/ (binaryfunc) NULL, /*__itruediv__*/ }; +#endif + /*------------------PY_OBECT DEFINITION--------------------------*/ /* @@ -1225,7 +1334,7 @@ static PyObject *Vector_getSwizzle(VectorObject * self, void *closure) axisA++; } - return newVectorObject(vec, axisA, Py_NEW); + return newVectorObject(vec, axisA, Py_NEW, Py_TYPE(self)); } /* Set the items of this vector using a swizzle. @@ -1373,342 +1482,342 @@ static PyGetSetDef Vector_getseters[] = { NULL}, /* autogenerated swizzle attrs, see python script below */ - {"xx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, Vector_swizzle_doc, (void *)((unsigned int)((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<= 0x03000000) + &Vector_AsMapping, /* PyMappingMethods *tp_as_mapping; */ +#else + NULL, +#endif /* More standard operations (here for binary compatibility) */ @@ -1802,8 +1915,8 @@ PyTypeObject vector_Type = { NULL, /* PyBufferProcs *tp_as_buffer; */ /*** Flags to define presence of optional/expanded features ***/ - Py_TPFLAGS_DEFAULT, - VectorObject_doc, /* char *tp_doc; Documentation string */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + NULL, /* char *tp_doc; Documentation string */ /*** Assigned meaning in release 2.0 ***/ /* call function for all accessible objects */ NULL, /* traverseproc tp_traverse; */ @@ -1855,10 +1968,13 @@ PyTypeObject vector_Type = { (i.e. it was allocated elsewhere by MEM_mallocN()) pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON (i.e. it must be created here with PyMEM_malloc())*/ -PyObject *newVectorObject(float *vec, int size, int type) +PyObject *newVectorObject(float *vec, int size, int type, PyTypeObject *base_type) { int i; - VectorObject *self = PyObject_NEW(VectorObject, &vector_Type); + VectorObject *self; + + if(base_type) self = base_type->tp_alloc(base_type, 0); + else self = PyObject_NEW(VectorObject, &vector_Type); if(size > 4 || size < 2) return NULL; @@ -1894,7 +2010,7 @@ PyObject *newVectorObject(float *vec, int size, int type) PyObject *newVectorObject_cb(PyObject *cb_user, int size, int cb_type, int cb_subtype) { float dummy[4] = {0.0, 0.0, 0.0, 0.0}; /* dummy init vector, callbacks will be used on access */ - VectorObject *self= (VectorObject *)newVectorObject(dummy, size, Py_NEW); + VectorObject *self= (VectorObject *)newVectorObject(dummy, size, Py_NEW, NULL); if(self) { Py_INCREF(cb_user); self->cb_user= cb_user; @@ -1941,7 +2057,7 @@ static PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat vecNew[z++] = (float)dot; dot = 0.0f; } - return newVectorObject(vecNew, vec_size, Py_NEW); + return newVectorObject(vecNew, vec_size, Py_NEW, NULL); } /*----------------------------Vector.negate() -------------------- diff --git a/source/blender/python/generic/vector.h b/source/blender/python/generic/vector.h index f519b2808cb..f6babac7ed9 100644 --- a/source/blender/python/generic/vector.h +++ b/source/blender/python/generic/vector.h @@ -34,8 +34,7 @@ #include "../intern/bpy_compat.h" extern PyTypeObject vector_Type; - -#define VectorObject_Check(v) (((PyObject *)v)->ob_type == &vector_Type) +#define VectorObject_Check(_v) PyObject_TypeCheck((_v), &vector_Type) typedef struct { /* keep aligned with BaseMathObject in Mathutils.h */ PyObject_VAR_HEAD @@ -50,7 +49,7 @@ typedef struct { /* keep aligned with BaseMathObject in Mathutils.h */ } VectorObject; /*prototypes*/ -PyObject *newVectorObject(float *vec, int size, int type); +PyObject *newVectorObject(float *vec, int size, int type, PyTypeObject *base_type); PyObject *newVectorObject_cb(PyObject *user, int size, int callback_type, int subtype); #endif /* EXPP_vector_h */ diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index b7e3c86dd91..60a9afda0c4 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -353,7 +353,8 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) /* remove if it already exists */ if ((ot=WM_operatortype_find(idname))) { - Py_XDECREF((PyObject*)ot->pyop_data); + if(ot->pyop_data) + Py_XDECREF((PyObject*)ot->pyop_data); WM_operatortype_remove(idname); } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 558722cc5e6..4729620bb8a 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -35,6 +35,7 @@ #include "RNA_define.h" /* for defining our own rna */ #include "MEM_guardedalloc.h" +#include "BKE_utildefines.h" #include "BKE_context.h" #include "BKE_global.h" /* evil G.* */ #include "BKE_report.h" @@ -204,13 +205,13 @@ static long pyrna_struct_hash( BPy_StructRNA * self ) /* use our own dealloc so we can free a property if we use one */ static void pyrna_struct_dealloc( BPy_StructRNA * self ) { - /* Note!! for some weired reason calling PyObject_DEL() directly crashes blender! */ if (self->freeptr && self->ptr.data) { IDP_FreeProperty(self->ptr.data); MEM_freeN(self->ptr.data); self->ptr.data= NULL; } + /* Note, for subclassed PyObjects we cant just call PyObject_DEL() directly or it will crash */ Py_TYPE(self)->tp_free(self); return; } @@ -820,108 +821,246 @@ static Py_ssize_t pyrna_prop_len( BPy_PropertyRNA * self ) return len; } -static PyObject *pyrna_prop_subscript( BPy_PropertyRNA * self, PyObject *key ) +/* internal use only */ +static PyObject *prop_subscript_collection_int(BPy_PropertyRNA * self, int keynum) { - PyObject *ret; PointerRNA newptr; - int keynum = 0; - char *keyname = NULL; - + + if(keynum < 0) keynum += RNA_property_collection_length(&self->ptr, self->prop); + + if(RNA_property_collection_lookup_int(&self->ptr, self->prop, keynum, &newptr)) + return pyrna_struct_CreatePyObject(&newptr); + + PyErr_SetString(PyExc_IndexError, "out of range"); + return NULL; +} +static PyObject *prop_subscript_array_int(BPy_PropertyRNA * self, int keynum) +{ + int len= RNA_property_array_length(self->prop); + + if(keynum < 0) keynum += len; + + if(keynum >= 0 && keynum < len) + return pyrna_prop_to_py_index(&self->ptr, self->prop, keynum); + + PyErr_SetString(PyExc_IndexError, "out of range"); + return NULL; +} + +static PyObject *prop_subscript_collection_str(BPy_PropertyRNA * self, char *keyname) +{ + PointerRNA newptr; + if(RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr)) + return pyrna_struct_CreatePyObject(&newptr); + + PyErr_SetString(PyExc_KeyError, "key not found"); + return NULL; +} +/* static PyObject *prop_subscript_array_str(BPy_PropertyRNA * self, char *keyname) */ + + + + +#if PY_VERSION_HEX >= 0x03000000 +static PyObject *prop_subscript_collection_slice(BPy_PropertyRNA * self, int start, int stop) +{ + PointerRNA newptr; + PyObject *list = PyList_New(stop - start); + int count; + + start = MIN2(start,stop); /* values are clamped from */ + + for(count = start; count < stop; count++) { + if(RNA_property_collection_lookup_int(&self->ptr, self->prop, count - start, &newptr)) { + PyList_SetItem(list, count - start, pyrna_struct_CreatePyObject(&newptr)); + } + else { + Py_DECREF(list); + + PyErr_SetString(PyExc_RuntimeError, "error getting an rna struct from a collection"); + return NULL; + } + } + + return list; +} +static PyObject *prop_subscript_array_slice(BPy_PropertyRNA * self, int start, int stop) +{ + PyObject *list = PyList_New(stop - start); + int count; + + start = MIN2(start,stop); /* values are clamped from PySlice_GetIndicesEx */ + + for(count = start; count < stop; count++) + PyList_SetItem(list, count - start, pyrna_prop_to_py_index(&self->ptr, self->prop, count)); + + return list; +} +#endif + +static PyObject *prop_subscript_collection(BPy_PropertyRNA * self, PyObject *key) +{ if (PyUnicode_Check(key)) { - keyname = _PyUnicode_AsString(key); - } else if (PyLong_Check(key)) { - keynum = PyLong_AsSsize_t(key); - } else { + return prop_subscript_collection_str(self, _PyUnicode_AsString(key)); + } + else if (PyLong_Check(key)) { + return prop_subscript_collection_int(self, PyLong_AsSsize_t(key)); + } +#if PY_VERSION_HEX >= 0x03000000 + else if (PySlice_Check(key)) { + int len= RNA_property_collection_length(&self->ptr, self->prop); + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)key, len, &start, &stop, &step, &slicelength) < 0) + return NULL; + + if (slicelength <= 0) { + return PyList_New(0); + } + else if (step == 1) { + return prop_subscript_collection_slice(self, start, stop); + } + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with rna"); + return NULL; + } + } +#endif + else { PyErr_SetString(PyExc_AttributeError, "invalid key, key must be a string or an int"); return NULL; } - - if (RNA_property_type(self->prop) == PROP_COLLECTION) { - int ok; - if (keyname) ok = RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr); - else ok = RNA_property_collection_lookup_int(&self->ptr, self->prop, keynum, &newptr); - - if (ok) { - ret = pyrna_struct_CreatePyObject(&newptr); - } else { - PyErr_SetString(PyExc_AttributeError, "out of range"); - ret = NULL; - } - - } else if (keyname) { - PyErr_SetString(PyExc_AttributeError, "string keys are only supported for collections"); - ret = NULL; - } else { - int len = RNA_property_array_length(self->prop); - - if (len==0) { /* not an array*/ - PyErr_Format(PyExc_AttributeError, "not an array or collection %d", keynum); - ret = NULL; - } - - if (keynum >= len){ - PyErr_SetString(PyExc_AttributeError, "index out of range"); - ret = NULL; - } else { /* not an array*/ - ret = pyrna_prop_to_py_index(&self->ptr, self->prop, keynum); - } - } - - return ret; } - -static int pyrna_prop_assign_subscript( BPy_PropertyRNA * self, PyObject *key, PyObject *value ) +static PyObject *prop_subscript_array(BPy_PropertyRNA * self, PyObject *key) { - int ret = 0; - int keynum = 0; - char *keyname = NULL; + /*if (PyUnicode_Check(key)) { + return prop_subscript_array_str(self, _PyUnicode_AsString(key)); + } else*/ + if (PyLong_Check(key)) { + return prop_subscript_array_int(self, PyLong_AsSsize_t(key)); + } +#if PY_VERSION_HEX >= 0x03000000 + else if (PySlice_Check(key)) { + int len= RNA_property_array_length(self->prop); + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)key, len, &start, &stop, &step, &slicelength) < 0) + return NULL; + + if (slicelength <= 0) { + return PyList_New(0); + } + else if (step == 1) { + return prop_subscript_array_slice(self, start, stop); + } + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with rna"); + return NULL; + } + } +#endif + else { + PyErr_SetString(PyExc_AttributeError, "invalid key, key must be an int"); + return NULL; + } +} + +static PyObject *pyrna_prop_subscript( BPy_PropertyRNA * self, PyObject *key ) +{ + if (RNA_property_type(self->prop) == PROP_COLLECTION) { + return prop_subscript_collection(self, key); + } else if (RNA_property_array_length(self->prop)) { /* arrays are currently fixed length, zero length means its not an array */ + return prop_subscript_array(self, key); + } else { + PyErr_SetString(PyExc_TypeError, "rna type is not an array or a collection"); + return NULL; + } + +} + +#if PY_VERSION_HEX >= 0x03000000 +static int prop_subscript_ass_array_slice(BPy_PropertyRNA * self, int begin, int end, PyObject *value) +{ + int count; + + /* values are clamped from */ + begin = MIN2(begin,end); + + for(count = begin; count < end; count++) { + if(pyrna_py_to_prop_index(&self->ptr, self->prop, count - begin, value) == -1) { + /* TODO - this is wrong since some values have been assigned... will need to fix that */ + return -1; /* pyrna_struct_CreatePyObject should set the error */ + } + } + + return 0; +} +#endif + +static int prop_subscript_ass_array_int(BPy_PropertyRNA * self, int keynum, PyObject *value) +{ + + int len= RNA_property_array_length(self->prop); + + if(keynum < 0) keynum += len; + + if(keynum >= 0 && keynum < len) + return pyrna_py_to_prop_index(&self->ptr, self->prop, keynum, value); + + PyErr_SetString(PyExc_IndexError, "out of range"); + return -1; +} + +static int pyrna_prop_ass_subscript( BPy_PropertyRNA * self, PyObject *key, PyObject *value ) +{ + /* char *keyname = NULL; */ /* not supported yet */ if (!RNA_property_editable(&self->ptr, self->prop)) { PyErr_Format( PyExc_AttributeError, "PropertyRNA - attribute \"%s\" from \"%s\" is read-only", RNA_property_identifier(self->prop), RNA_struct_identifier(self->ptr.type) ); return -1; } - if (PyUnicode_Check(key)) { - keyname = _PyUnicode_AsString(key); - } else if (PyLong_Check(key)) { - keynum = PyLong_AsSsize_t(key); - } else { - PyErr_SetString(PyExc_AttributeError, "PropertyRNA - invalid key, key must be a string or an int"); + /* maybe one day we can support this... */ + if (RNA_property_type(self->prop) == PROP_COLLECTION) { + PyErr_Format( PyExc_AttributeError, "PropertyRNA - attribute \"%s\" from \"%s\" is a collection, assignment not supported", RNA_property_identifier(self->prop), RNA_struct_identifier(self->ptr.type) ); return -1; } - - if (RNA_property_type(self->prop) == PROP_COLLECTION) { - PyErr_SetString(PyExc_AttributeError, "PropertyRNA - assignment is not supported for collections (yet)"); - ret = -1; - } else if (keyname) { - PyErr_SetString(PyExc_AttributeError, "PropertyRNA - string keys are only supported for collections"); - ret = -1; - } else { - int len = RNA_property_array_length(self->prop); - - if (len==0) { /* not an array*/ - PyErr_Format(PyExc_AttributeError, "PropertyRNA - not an array or collection %d", keynum); - ret = -1; + + if (PyLong_Check(key)) { + return prop_subscript_ass_array_int(self, PyLong_AsSsize_t(key), value); + } +#if PY_VERSION_HEX >= 0x03000000 + else if (PySlice_Check(key)) { + int len= RNA_property_array_length(self->prop); + Py_ssize_t start, stop, step, slicelength; + + if (PySlice_GetIndicesEx((PySliceObject*)key, len, &start, &stop, &step, &slicelength) < 0) + return -1; + + if (slicelength <= 0) { + return 0; } - - if (keynum >= len){ - PyErr_SetString(PyExc_AttributeError, "PropertyRNA - index out of range"); - ret = -1; - } else { - ret = pyrna_py_to_prop_index(&self->ptr, self->prop, keynum, value); + else if (step == 1) { + return prop_subscript_ass_array_slice(self, start, stop, value); + } + else { + PyErr_SetString(PyExc_TypeError, "slice steps not supported with rna"); + return -1; } } - - return ret; +#endif + else { + PyErr_SetString(PyExc_AttributeError, "invalid key, key must be an int"); + return -1; + } } - static PyMappingMethods pyrna_prop_as_mapping = { ( lenfunc ) pyrna_prop_len, /* mp_length */ ( binaryfunc ) pyrna_prop_subscript, /* mp_subscript */ - ( objobjargproc ) pyrna_prop_assign_subscript, /* mp_ass_subscript */ + ( objobjargproc ) pyrna_prop_ass_subscript, /* mp_ass_subscript */ }; static int pyrna_prop_contains(BPy_PropertyRNA * self, PyObject *value) @@ -1130,7 +1269,7 @@ static int pyrna_struct_setattro( BPy_StructRNA * self, PyObject *pyname, PyObje return pyrna_py_to_prop(&self->ptr, prop, NULL, value); } -PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) +static PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) { PyObject *ret; if (RNA_property_type(self->prop) != PROP_COLLECTION) { @@ -1162,7 +1301,7 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) return ret; } -PyObject *pyrna_prop_items(BPy_PropertyRNA *self) +static PyObject *pyrna_prop_items(BPy_PropertyRNA *self) { PyObject *ret; if (RNA_property_type(self->prop) != PROP_COLLECTION) { @@ -1203,7 +1342,7 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self) } -PyObject *pyrna_prop_values(BPy_PropertyRNA *self) +static PyObject *pyrna_prop_values(BPy_PropertyRNA *self) { PyObject *ret; @@ -1225,6 +1364,243 @@ PyObject *pyrna_prop_values(BPy_PropertyRNA *self) return ret; } +#if (PY_VERSION_HEX >= 0x03000000) /* foreach needs py3 */ +static void foreach_attr_type( BPy_PropertyRNA *self, char *attr, + /* values to assign */ + RawPropertyType *raw_type, int *attr_tot, int *attr_signed ) +{ + PropertyRNA *prop; + *raw_type= -1; + *attr_tot= 0; + *attr_signed= 0; + + RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + prop = RNA_struct_find_property(&itemptr, attr); + *raw_type= RNA_property_raw_type(prop); + *attr_tot = RNA_property_array_length(prop); + *attr_signed= (RNA_property_subtype(prop)==PROP_UNSIGNED) ? 0:1; + break; + } + RNA_PROP_END; +} + +/* pyrna_prop_foreach_get/set both use this */ +static int foreach_parse_args( + BPy_PropertyRNA *self, PyObject *args, + + /*values to assign */ + char **attr, PyObject **seq, int *tot, int *size, RawPropertyType *raw_type, int *attr_tot, int *attr_signed) +{ +#if 0 + int array_tot; + int target_tot; +#endif + + *size= *raw_type= *attr_tot= *attr_signed= 0; + + if(!PyArg_ParseTuple(args, "sO", attr, seq) || (!PySequence_Check(*seq) && PyObject_CheckBuffer(*seq))) { + PyErr_SetString( PyExc_TypeError, "foreach_get(attr, sequence) expects a string and a sequence" ); + return -1; + } + + *tot= PySequence_Length(*seq); // TODO - buffer may not be a sequence! array.array() is tho. + + if(*tot>0) { + foreach_attr_type(self, *attr, raw_type, attr_tot, attr_signed); + *size= RNA_raw_type_sizeof(*raw_type); + +#if 0 // works fine but not strictly needed, we could allow RNA_property_collection_raw_* to do the checks + if((*attr_tot) < 1) + *attr_tot= 1; + + if (RNA_property_type(self->prop) == PROP_COLLECTION) + array_tot = RNA_property_collection_length(&self->ptr, self->prop); + else + array_tot = RNA_property_array_length(self->prop); + + + target_tot= array_tot * (*attr_tot); + + /* rna_access.c - rna_raw_access(...) uses this same method */ + if(target_tot != (*tot)) { + PyErr_Format( PyExc_TypeError, "foreach_get(attr, sequence) sequence length mismatch given %d, needed %d", *tot, target_tot); + return -1; + } +#endif + } + + return 0; +} + +static int foreach_compat_buffer(RawPropertyType raw_type, int attr_signed, const char *format) +{ + char f = format ? *format:'B'; /* B is assumed when not set */ + + switch(raw_type) { + case PROP_RAW_CHAR: + if (attr_signed) return (f=='b') ? 1:0; + else return (f=='B') ? 1:0; + case PROP_RAW_SHORT: + if (attr_signed) return (f=='h') ? 1:0; + else return (f=='H') ? 1:0; + case PROP_RAW_INT: + if (attr_signed) return (f=='i') ? 1:0; + else return (f=='I') ? 1:0; + case PROP_RAW_FLOAT: + return (f=='f') ? 1:0; + case PROP_RAW_DOUBLE: + return (f=='d') ? 1:0; + } + + return 0; +} + +static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set) +{ + PyObject *item; + int i=0, ok, buffer_is_compat; + void *array= NULL; + + /* get/set both take the same args currently */ + char *attr; + PyObject *seq; + int tot, size, attr_tot, attr_signed; + RawPropertyType raw_type; + + if(foreach_parse_args(self, args, &attr, &seq, &tot, &size, &raw_type, &attr_tot, &attr_signed) < 0) + return NULL; + + if(tot==0) + Py_RETURN_NONE; + + + + if(set) { /* get the array from python */ + buffer_is_compat = 0; + if(PyObject_CheckBuffer(seq)) { + Py_buffer buf; + PyObject_GetBuffer(seq, &buf, PyBUF_SIMPLE | PyBUF_FORMAT); + + /* check if the buffer matches */ + + buffer_is_compat = foreach_compat_buffer(raw_type, attr_signed, buf.format); + + if(buffer_is_compat) { + ok = RNA_property_collection_raw_set(NULL, &self->ptr, self->prop, attr, buf.buf, raw_type, tot); + } + + PyBuffer_Release(&buf); + } + + /* could not use the buffer, fallback to sequence */ + if(!buffer_is_compat) { + array= PyMem_Malloc(size * tot); + + for( ; iptr, self->prop, attr, array, raw_type, tot); + } + } + else { + buffer_is_compat = 0; + if(PyObject_CheckBuffer(seq)) { + Py_buffer buf; + PyObject_GetBuffer(seq, &buf, PyBUF_SIMPLE | PyBUF_FORMAT); + + /* check if the buffer matches, TODO - signed/unsigned types */ + + buffer_is_compat = foreach_compat_buffer(raw_type, attr_signed, buf.format); + + if(buffer_is_compat) { + ok = RNA_property_collection_raw_get(NULL, &self->ptr, self->prop, attr, buf.buf, raw_type, tot); + } + + PyBuffer_Release(&buf); + } + + /* could not use the buffer, fallback to sequence */ + if(!buffer_is_compat) { + array= PyMem_Malloc(size * tot); + + ok = RNA_property_collection_raw_get(NULL, &self->ptr, self->prop, attr, array, raw_type, tot); + + if(!ok) i= tot; /* skip the loop */ + + for( ; i= 0x03000000) */ + /* A bit of a kludge, make a list out of a collection or array, * then return the lists iter function, not especially fast but convenient for now */ PyObject *pyrna_prop_iter(BPy_PropertyRNA *self) @@ -1259,14 +1635,20 @@ PyObject *pyrna_prop_iter(BPy_PropertyRNA *self) } static struct PyMethodDef pyrna_struct_methods[] = { - {"__dir__", (PyCFunction)pyrna_struct_dir, METH_NOARGS, ""}, + {"__dir__", (PyCFunction)pyrna_struct_dir, METH_NOARGS, NULL}, {NULL, NULL, 0, NULL} }; static struct PyMethodDef pyrna_prop_methods[] = { - {"keys", (PyCFunction)pyrna_prop_keys, METH_NOARGS, ""}, - {"items", (PyCFunction)pyrna_prop_items, METH_NOARGS, ""}, - {"values", (PyCFunction)pyrna_prop_values, METH_NOARGS, ""}, + {"keys", (PyCFunction)pyrna_prop_keys, METH_NOARGS, NULL}, + {"items", (PyCFunction)pyrna_prop_items, METH_NOARGS,NULL}, + {"values", (PyCFunction)pyrna_prop_values, METH_NOARGS, NULL}, + +#if (PY_VERSION_HEX >= 0x03000000) + /* array accessor function */ + {"foreach_get", (PyCFunction)pyrna_prop_foreach_get, METH_VARARGS, NULL}, + {"foreach_set", (PyCFunction)pyrna_prop_foreach_set, METH_VARARGS, NULL}, +#endif {NULL, NULL, 0, NULL} }; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 92b71e9fff0..ffeb342df77 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -79,7 +79,7 @@ void WM_keymap_tweak (ListBase *lb, short type, short val, int modifier, short ListBase *WM_keymap_listbase (struct wmWindowManager *wm, const char *nameid, int spaceid, int regionid); -char *WM_key_event_string(short type); +const char *WM_key_event_string(short type); char *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len); /* handlers */ diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 9b987cdfa51..e3a7a906fef 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -128,6 +128,7 @@ typedef struct wmNotifier { #define NC_BRUSH (11<<24) #define NC_TEXT (12<<24) #define NC_WORLD (13<<24) +#define NC_FILE (14<<24) /* data type, 256 entries is enough, it can overlap */ #define NOTE_DATA 0x00FF0000 @@ -182,6 +183,10 @@ typedef struct wmNotifier { /* NC_TEXT Text */ #define ND_CURSOR (50<<16) #define ND_DISPLAY (51<<16) + + /* NC_FILE Filebrowser */ +#define ND_PARAMS (60<<16) +#define ND_FILELIST (61<<16) /* subtype, 256 entries too */ #define NOTE_SUBTYPE 0x0000FF00 diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 286d1216f66..e520067b9e5 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -733,17 +733,20 @@ static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, wmEvent *eve ScrArea *area= CTX_wm_area(C); ARegion *region= CTX_wm_region(C); ARegion *menu= CTX_wm_menu(C); - int retval; + int retval, always_pass; /* we set context to where ui handler came from */ if(handler->ui_area) CTX_wm_area_set(C, handler->ui_area); if(handler->ui_region) CTX_wm_region_set(C, handler->ui_region); if(handler->ui_menu) CTX_wm_menu_set(C, handler->ui_menu); + /* in advance to avoid access to freed event on window close */ + always_pass= wm_event_always_pass(event); + retval= handler->ui_handle(C, event, handler->ui_userdata); /* putting back screen context */ - if((retval != WM_UI_HANDLER_BREAK) || wm_event_always_pass(event)) { + if((retval != WM_UI_HANDLER_BREAK) || always_pass) { CTX_wm_area_set(C, area); CTX_wm_region_set(C, region); CTX_wm_menu_set(C, menu); @@ -776,7 +779,7 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa case EVT_FILESELECT_OPEN: case EVT_FILESELECT_FULL_OPEN: { - short flag =0; short display =FILE_SHORTDISPLAY; short filter =0; short sort =FILE_SORTALPHA; + short flag =0; short display =FILE_SHORTDISPLAY; short filter =0; short sort =FILE_SORT_ALPHA; char *path= RNA_string_get_alloc(handler->op->ptr, "filename", NULL, 0); if(event->val==EVT_FILESELECT_OPEN) @@ -872,6 +875,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) { wmEventHandler *handler, *nexthandler; int action= WM_HANDLER_CONTINUE; + int always_pass; if(handlers==NULL) return action; @@ -881,6 +885,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) /* optional boundbox */ if(handler_boundbox_test(handler, event)) { + /* in advance to avoid access to freed event on window close */ + always_pass= wm_event_always_pass(event); /* modal+blocking handler */ if(handler->flag & WM_HANDLER_BLOCKING) @@ -912,7 +918,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) action= wm_handler_operator_call(C, handlers, handler, event, NULL); } - if(!wm_event_always_pass(event) && action==WM_HANDLER_BREAK) + if(!always_pass && action==WM_HANDLER_BREAK) break; } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 861080f30ba..29ec58befd9 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -575,7 +575,7 @@ void WM_write_file(bContext *C, char *target, ReportList *reports) // } if (G.fileflags & G_AUTOPACK) { - packAll(); + packAll(G.main, reports); } ED_object_exit_editmode(C, 0); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index 85028e3ea1a..b914e63788d 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -154,7 +154,7 @@ ListBase *WM_keymap_listbase(wmWindowManager *wm, const char *nameid, int spacei /* ***************** get string from key events **************** */ -char *WM_key_event_string(short type) +const char *WM_key_event_string(short type) { const char *name= NULL; if(RNA_enum_name(event_type_items, (int)type, &name)) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 410cd11f1bf..7f9a2153dc3 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -418,7 +418,7 @@ static uiBlock *wm_block_search_menu(bContext *C, ARegion *ar, void *arg_op) uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_RET_1); but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 10, 180, 19, ""); - uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb); + uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb, NULL); /* fake button, it holds space for search items */ uiDefBut(block, LABEL, 0, "", 10, 10 - uiSearchBoxhHeight(), 180, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL); diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index ade5a2a64a8..cd0d551211f 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -151,7 +151,7 @@ IF(WIN32) COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\release\\ui\\*.*\" \"${TARGETDIR}\\.blender\\ui\" COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\release\\plugins\\*.*\" \"${TARGETDIR}\\plugins\" COMMAND copy /Y \"${WIN_SOURCE_DIR}\\release\\text\\*.*\" \"${TARGETDIR}\" - COMMAND copy /Y \"${WIN_SOURCE_DIR}\\release\\windows\\extra\\python25.zip\" \"${TARGETDIR}\\\" + COMMAND copy /Y \"${WIN_SOURCE_DIR}\\release\\windows\\extra\\python26.zip\" \"${TARGETDIR}\\\" ) FILE(TO_NATIVE_PATH "${LIBDIR}" WIN_LIBDIR) @@ -164,7 +164,8 @@ IF(WIN32) COMMAND copy /Y \"${WIN_LIBDIR}\\sdl\\lib\\SDL.dll\" \"${TARGETDIR}\\\" COMMAND copy /Y \"${WIN_LIBDIR}\\zlib\\lib\\zlib.dll\" \"${TARGETDIR}\\\" COMMAND copy /Y \"${WIN_LIBDIR}\\tiff\\lib\\libtiff.dll\" \"${TARGETDIR}\\\" - COMMAND copy /Y \"${WIN_LIBDIR}\\python\\lib\\python25.dll\" \"${TARGETDIR}\\\" + COMMAND copy /Y \"${WIN_LIBDIR}\\python\\lib\\python26.dll\" \"${TARGETDIR}\\\" + COMMAND copy /Y \"${WIN_LIBDIR}\\python\\lib\\python26_d.dll\" \"${TARGETDIR}\\\" COMMAND copy /Y \"${WIN_LIBDIR}\\pthreads\\lib\\pthreadVC2.dll\" \"${TARGETDIR}\\\" ) diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile index 549e466c4e0..ffa99a0c1b2 100644 --- a/source/gameengine/BlenderRoutines/Makefile +++ b/source/gameengine/BlenderRoutines/Makefile @@ -54,6 +54,7 @@ CPPFLAGS += -I../../blender/render/extern/include CPPFLAGS += -I../../blender/blenloader CPPFLAGS += -I../../blender/blenfont CPPFLAGS += -I../../blender/gpu +CPPFLAGS += -I../../blender/makesrna CPPFLAGS += -I../Converter CPPFLAGS += -I../Expressions CPPFLAGS += -I../GameLogic diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index ce4311f57bf..bed99a4f502 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -446,7 +446,7 @@ PyObject* BL_ActionActuator::PyGetAction(PyObject* args, ShowDeprecationWarning("getAction()", "the action property"); if (m_action){ - return PyString_FromString(m_action->id.name+2); + return PyUnicode_FromString(m_action->id.name+2); } Py_RETURN_NONE; } @@ -796,7 +796,7 @@ PyObject* BL_ActionActuator::PySetFrameProperty(PyObject* args, } PyObject* BL_ActionActuator::PyGetChannel(PyObject* value) { - char *string= PyString_AsString(value); + char *string= _PyUnicode_AsString(value); if (!string) { PyErr_SetString(PyExc_TypeError, "expected a single string"); @@ -888,7 +888,7 @@ PyObject* BL_ActionActuator::PySetType(PyObject* args, PyObject* BL_ActionActuator::PyGetContinue() { ShowDeprecationWarning("getContinue()", "the continue property"); - return PyInt_FromLong((long)(m_end_reset==0)); + return PyLong_FromSsize_t((long)(m_end_reset==0)); } PyObject* BL_ActionActuator::PySetContinue(PyObject* value) { @@ -1005,19 +1005,15 @@ PyTypeObject BL_ActionActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject BL_ActionActuator::Parents[] = { - &BL_ActionActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef BL_ActionActuator::Methods[] = { @@ -1065,37 +1061,24 @@ PyAttributeDef BL_ActionActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* BL_ActionActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* BL_ActionActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int BL_ActionActuator::py_setattro(PyObject *attr, PyObject* value) { - py_setattro_up(SCA_IActuator); -} - - PyObject* BL_ActionActuator::pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { BL_ActionActuator* self= static_cast(self_v); - return PyString_FromString(self->GetAction() ? self->GetAction()->id.name+2 : ""); + return PyUnicode_FromString(self->GetAction() ? self->GetAction()->id.name+2 : ""); } int BL_ActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { BL_ActionActuator* self= static_cast(self_v); - if (!PyString_Check(value)) + if (!PyUnicode_Check(value)) { PyErr_SetString(PyExc_ValueError, "actuator.action = val: Action Actuator, expected the string name of the action"); return PY_SET_ATTR_FAIL; } bAction *action= NULL; - STR_String val = PyString_AsString(value); + STR_String val = _PyUnicode_AsString(value); if (val != "") { diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h index 422b16bb3ec..e328ce126ca 100644 --- a/source/gameengine/Converter/BL_ActionActuator.h +++ b/source/gameengine/Converter/BL_ActionActuator.h @@ -49,9 +49,8 @@ public: short blendin, short priority, short end_reset, - float stride, - PyTypeObject* T=&Type) - : SCA_IActuator(gameobj,T), + float stride) + : SCA_IActuator(gameobj), m_lastpos(0, 0, 0), m_blendframe(0), @@ -113,10 +112,6 @@ public: KX_PYMETHOD_DOC(BL_ActionActuator,setChannel); - virtual PyObject* py_getattro(PyObject* attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject* attr, PyObject* value); - static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp index 7aa8714de3a..970539777f4 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp +++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp @@ -427,20 +427,17 @@ PyTypeObject BL_ShapeActionActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_IActuator::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject BL_ShapeActionActuator::Parents[] = { - &BL_ShapeActionActuator::Type, - &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL -}; PyMethodDef BL_ShapeActionActuator::Methods[] = { {"setAction", (PyCFunction) BL_ShapeActionActuator::sPySetAction, METH_VARARGS, (PY_METHODCHAR)SetAction_doc}, @@ -480,19 +477,6 @@ PyAttributeDef BL_ShapeActionActuator::Attributes[] = { { NULL } //Sentinel }; - -PyObject* BL_ShapeActionActuator::py_getattro(PyObject* attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* BL_ShapeActionActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int BL_ShapeActionActuator::py_setattro(PyObject *attr, PyObject* value) { - py_setattro_up(SCA_IActuator); -} - /* setStart */ const char BL_ShapeActionActuator::GetAction_doc[] = "getAction()\n" @@ -501,7 +485,7 @@ const char BL_ShapeActionActuator::GetAction_doc[] = PyObject* BL_ShapeActionActuator::PyGetAction() { ShowDeprecationWarning("getAction()", "the action property"); if (m_action){ - return PyString_FromString(m_action->id.name+2); + return PyUnicode_FromString(m_action->id.name+2); } Py_RETURN_NONE; } @@ -860,21 +844,21 @@ PyObject* BL_ShapeActionActuator::PySetType(PyObject* args) { PyObject* BL_ShapeActionActuator::pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { BL_ShapeActionActuator* self= static_cast(self_v); - return PyString_FromString(self->GetAction() ? self->GetAction()->id.name+2 : ""); + return PyUnicode_FromString(self->GetAction() ? self->GetAction()->id.name+2 : ""); } int BL_ShapeActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { BL_ShapeActionActuator* self= static_cast(self_v); /* exact copy of BL_ActionActuator's function from here down */ - if (!PyString_Check(value)) + if (!PyUnicode_Check(value)) { PyErr_SetString(PyExc_ValueError, "actuator.action = val: Shape Action Actuator, expected the string name of the action"); return PY_SET_ATTR_FAIL; } bAction *action= NULL; - STR_String val = PyString_AsString(value); + STR_String val = _PyUnicode_AsString(value); if (val != "") { diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h index d268eef6d23..890fe3f9de9 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.h +++ b/source/gameengine/Converter/BL_ShapeActionActuator.h @@ -50,9 +50,8 @@ public: short playtype, short blendin, short priority, - float stride, - PyTypeObject* T=&Type) - : SCA_IActuator(gameobj,T), + float stride) + : SCA_IActuator(gameobj), m_lastpos(0, 0, 0), m_blendframe(0), @@ -106,10 +105,6 @@ public: KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetType); KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetType); - virtual PyObject* py_getattro(PyObject* attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject* attr, PyObject* value); - static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp index d90da8b3a92..6779c2ea780 100644 --- a/source/gameengine/Expressions/BoolValue.cpp +++ b/source/gameengine/Expressions/BoolValue.cpp @@ -29,7 +29,6 @@ const STR_String CBoolValue::sTrueString = "TRUE"; const STR_String CBoolValue::sFalseString = "FALSE"; - CBoolValue::CBoolValue() /* pre: false @@ -210,5 +209,5 @@ CValue* CBoolValue::GetReplica() PyObject* CBoolValue::ConvertValueToPython() { - return PyInt_FromLong(m_bool != 0); + return PyBool_FromLong(m_bool != 0); } diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp index 227518e9439..b782de4bef6 100644 --- a/source/gameengine/Expressions/IntValue.cpp +++ b/source/gameengine/Expressions/IntValue.cpp @@ -330,7 +330,7 @@ void CIntValue::SetValue(CValue* newval) PyObject* CIntValue::ConvertValueToPython() { if((m_int > INT_MIN) && (m_int < INT_MAX)) - return PyInt_FromLong(m_int); + return PyLong_FromSsize_t(m_int); else return PyLong_FromLongLong(m_int); } diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp index 59344ddb7b7..38b00dcc8fb 100644 --- a/source/gameengine/Expressions/ListValue.cpp +++ b/source/gameengine/Expressions/ListValue.cpp @@ -76,9 +76,9 @@ PyObject* listvalue_mapping_subscript(PyObject* self, PyObject* pyindex) return NULL; } - if (PyString_Check(pyindex)) + if (PyUnicode_Check(pyindex)) { - CValue *item = ((CListValue*) list)->FindValue(PyString_AsString(pyindex)); + CValue *item = ((CListValue*) list)->FindValue(_PyUnicode_AsString(pyindex)); if (item) { PyObject* pyobj = item->ConvertValueToPython(); if(pyobj) @@ -87,14 +87,14 @@ PyObject* listvalue_mapping_subscript(PyObject* self, PyObject* pyindex) return item->GetProxy(); } } - else if (PyInt_Check(pyindex)) + else if (PyLong_Check(pyindex)) { - int index = PyInt_AsLong(pyindex); + int index = PyLong_AsSsize_t(pyindex); return listvalue_buffer_item(self, index); /* wont add a ref */ } PyObject *pyindex_str = PyObject_Repr(pyindex); /* new ref */ - PyErr_Format(PyExc_KeyError, "CList[key]: '%s' key not in list", PyString_AsString(pyindex_str)); + PyErr_Format(PyExc_KeyError, "CList[key]: '%s' key not in list", _PyUnicode_AsString(pyindex_str)); Py_DECREF(pyindex_str); return NULL; } @@ -220,12 +220,12 @@ static int listvalue_buffer_contains(PyObject *self_v, PyObject *value) return -1; } - if (PyString_Check(value)) { - if (self->FindValue((const char *)PyString_AsString(value))) { + if (PyUnicode_Check(value)) { + if (self->FindValue((const char *)_PyUnicode_AsString(value))) { return 1; } } - else if (BGE_PROXY_CHECK_TYPE(value)) { /* not dict like at all but this worked before __contains__ was used */ + else if (PyObject_TypeCheck(value, &CValue::Type)) { /* not dict like at all but this worked before __contains__ was used */ CValue *item= static_cast(BGE_PROXY_REF(value)); for (int i=0; i < self->GetCount(); i++) if (self->GetValue(i) == item) // Com @@ -289,25 +289,19 @@ PyTypeObject CListValue::Type = { 0, /*tp_hash*/ 0, /*tp_call */ 0, - py_base_getattro, - py_base_setattro, + NULL, + NULL, 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, 0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject CListValue::Parents[] = { - &CListValue::Type, + Methods, + 0, + 0, &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - - PyMethodDef CListValue::Methods[] = { /* List style access */ {"append", (PyCFunction)CListValue::sPyappend,METH_O}, @@ -329,21 +323,12 @@ PyAttributeDef CListValue::Attributes[] = { { NULL } //Sentinel }; -PyObject* CListValue::py_getattro(PyObject* attr) { - py_getattro_up(CValue); -} - -PyObject* CListValue::py_getattro_dict() { - py_getattro_dict_up(CValue); -} - - ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// -CListValue::CListValue(PyTypeObject *T ) -: CPropValue(T) +CListValue::CListValue() +: CPropValue() { m_bReleaseContents=true; } @@ -559,7 +544,7 @@ PyObject* CListValue::Pyindex(PyObject *value) CValue* elem = GetValue(i); if (checkobj==elem || CheckEqual(checkobj,elem)) { - result = PyInt_FromLong(i); + result = PyLong_FromSsize_t(i); break; } } @@ -582,7 +567,7 @@ PyObject* CListValue::Pycount(PyObject* value) if (checkobj==NULL) { /* in this case just return that there are no items in the list */ PyErr_Clear(); - return PyInt_FromLong(0); + return PyLong_FromSsize_t(0); } int numelem = GetCount(); @@ -596,7 +581,7 @@ PyObject* CListValue::Pycount(PyObject* value) } checkobj->Release(); - return PyInt_FromLong(numfound); + return PyLong_FromSsize_t(numfound); } /* Matches python dict.get(key, [default]) */ @@ -623,7 +608,7 @@ PyObject* CListValue::Pyget(PyObject *args) /* Matches python dict.has_key() */ PyObject* CListValue::Pyhas_key(PyObject* value) { - if (PyString_Check(value) && FindValue((const char *)PyString_AsString(value))) + if (PyUnicode_Check(value) && FindValue((const char *)_PyUnicode_AsString(value))) Py_RETURN_TRUE; Py_RETURN_FALSE; diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h index 68e900e25e0..98e6f216f11 100644 --- a/source/gameengine/Expressions/ListValue.h +++ b/source/gameengine/Expressions/ListValue.h @@ -24,7 +24,7 @@ class CListValue : public CPropValue //PLUGIN_DECLARE_SERIAL (CListValue,CValue) public: - CListValue(PyTypeObject *T = &Type); + CListValue(); virtual ~CListValue(); void AddConfigurationData(CValue* menuvalue); @@ -60,8 +60,6 @@ public: bool CheckEqual(CValue* first,CValue* second); - virtual PyObject* py_getattro(PyObject* attr); - virtual PyObject* py_getattro_dict(); virtual PyObject* py_repr(void) { PyObject *py_proxy= this->GetProxy(); PyObject *py_list= PySequence_List(py_proxy); diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 2d4cc612aef..729fff31052 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -74,11 +74,13 @@ PyTypeObject PyObjectPlus::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + NULL // no subtype }; @@ -91,106 +93,9 @@ PyObjectPlus::~PyObjectPlus() // assert(ob_refcnt==0); } -void PyObjectPlus::py_base_dealloc(PyObject *self) // python wrapper -{ - PyObjectPlus *self_plus= BGE_PROXY_REF(self); - if(self_plus) { - if(BGE_PROXY_PYOWNS(self)) { /* Does python own this?, then delete it */ - self_plus->m_proxy = NULL; /* Need this to stop ~PyObjectPlus from decrefing m_proxy otherwise its decref'd twice and py-debug crashes */ - delete self_plus; - } - - BGE_PROXY_REF(self)= NULL; // not really needed - } - PyObject_DEL( self ); -}; - -PyObjectPlus::PyObjectPlus(PyTypeObject *T) : SG_QList() // constructor -{ - MT_assert(T != NULL); - m_proxy= NULL; -}; - -/*------------------------------ - * PyObjectPlus Methods -- Every class, even the abstract one should have a Methods -------------------------------*/ -PyMethodDef PyObjectPlus::Methods[] = { - {"isA", (PyCFunction) sPyisA, METH_O}, - {NULL, NULL} /* Sentinel */ -}; - -PyAttributeDef PyObjectPlus::Attributes[] = { - KX_PYATTRIBUTE_RO_FUNCTION("invalid", PyObjectPlus, pyattr_get_invalid), - {NULL} //Sentinel -}; - -PyObject* PyObjectPlus::pyattr_get_invalid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) -{ - Py_RETURN_FALSE; -} - -/*------------------------------ - * PyObjectPlus Parents -- Every class, even the abstract one should have parents -------------------------------*/ -PyParentObject PyObjectPlus::Parents[] = {&PyObjectPlus::Type, NULL}; - -/*------------------------------ - * PyObjectPlus attributes -- attributes -------------------------------*/ - - -/* This should be the entry in Type since it takes the C++ class from PyObjectPlus_Proxy */ -PyObject *PyObjectPlus::py_base_getattro(PyObject * self, PyObject *attr) -{ - PyObjectPlus *self_plus= BGE_PROXY_REF(self); - if(self_plus==NULL) { - if(!strcmp("invalid", PyString_AsString(attr))) { - Py_RETURN_TRUE; - } - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); - return NULL; - } - - PyObject *ret= self_plus->py_getattro(attr); - - /* Attribute not found, was this a __dict__ lookup?, otherwise set an error if none is set */ - if(ret==NULL) { - char *attr_str= PyString_AsString(attr); - - if (strcmp(attr_str, "__dict__")==0) - { - /* the error string will probably not - * be set but just incase clear it */ - PyErr_Clear(); - ret= self_plus->py_getattro_dict(); - } - else if (!PyErr_Occurred()) { - /* We looked for an attribute but it wasnt found - * since py_getattro didnt set the error, set it here */ - PyErr_Format(PyExc_AttributeError, "'%s' object has no attribute '%s'", self->ob_type->tp_name, attr_str); - } - } - return ret; -} - -/* This should be the entry in Type since it takes the C++ class from PyObjectPlus_Proxy */ -int PyObjectPlus::py_base_setattro(PyObject *self, PyObject *attr, PyObject *value) -{ - PyObjectPlus *self_plus= BGE_PROXY_REF(self); - if(self_plus==NULL) { - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); - return -1; - } - - if (value==NULL) - return self_plus->py_delattro(attr); - - return self_plus->py_setattro(attr, value); -} PyObject *PyObjectPlus::py_base_repr(PyObject *self) // This should be the entry in Type. { - PyObjectPlus *self_plus= BGE_PROXY_REF(self); if(self_plus==NULL) { PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); @@ -200,42 +105,134 @@ PyObject *PyObjectPlus::py_base_repr(PyObject *self) // This should be the ent return self_plus->py_repr(); } -PyObject *PyObjectPlus::py_getattro(PyObject* attr) + +PyObject * PyObjectPlus::py_base_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \ - if (descr == NULL) { - return NULL; /* py_base_getattro sets the error, this way we can avoid setting the error at many levels */ - } else { - /* Copied from py_getattro_up */ - if (PyCObject_Check(descr)) { - return py_get_attrdef((void *)this, (const PyAttributeDef*)PyCObject_AsVoidPtr(descr)); - } else if (descr->ob_type->tp_descr_get) { - return PyCFunction_New(((PyMethodDescrObject *)descr)->d_method, this->m_proxy); - } else { - return NULL; - } - /* end py_getattro_up copy */ + PyTypeObject *base_type; + PyObjectPlus_Proxy *base = NULL; + + if (!PyArg_ParseTuple(args, "O:Base PyObjectPlus", &base)) + return NULL; + + /* the 'base' PyObject may be subclassed (multiple times even) + * we need to find the first C++ defined class to check 'type' + * is a subclass of the base arguments type. + * + * This way we can share one tp_new function for every PyObjectPlus + * + * eg. + * + * # CustomOb is called 'type' in this C code + * class CustomOb(GameTypes.KX_GameObject): + * pass + * + * # this calls py_base_new(...), the type of 'CustomOb' is checked to be a subclass of the 'cont.owner' type + * ob = CustomOb(cont.owner) + * + * */ + base_type= Py_TYPE(base); + while(base_type && !BGE_PROXY_CHECK_TYPE(base_type)) + base_type= base_type->tp_base; + + if(base_type==NULL || !BGE_PROXY_CHECK_TYPE(base_type)) { + PyErr_SetString(PyExc_TypeError, "can't subclass from a blender game type because the argument given is not a game class or subclass"); + return NULL; } + + /* use base_type rather then Py_TYPE(base) because we could alredy be subtyped */ + if(!PyType_IsSubtype(type, base_type)) { + PyErr_Format(PyExc_TypeError, "can't subclass blender game type <%s> from <%s> because it is not a subclass", base_type->tp_name, type->tp_name); + return NULL; + } + + /* invalidate the existing base and return a new subclassed one, + * this is a bit dodgy in that it also attaches its self to the existing object + * which is not really 'correct' python OO but for our use its OK. */ + + PyObjectPlus_Proxy *ret = (PyObjectPlus_Proxy *) type->tp_alloc(type, 0); /* starts with 1 ref, used for the return ref' */ + ret->ref= base->ref; + base->ref= NULL; /* invalidate! disallow further access */ + + ret->py_owns= base->py_owns; + + ret->ref->m_proxy= NULL; + + /* 'base' may be free'd after this func finished but not necessarily + * there is no reference to the BGE data now so it will throw an error on access */ + Py_DECREF(base); + + ret->ref->m_proxy= (PyObject *)ret; /* no need to add a ref because one is added when creating. */ + Py_INCREF(ret); /* we return a new ref but m_proxy holds a ref so we need to add one */ + + + /* 'ret' will have 2 references. + * - One ref is needed because ret->ref->m_proxy holds a refcount to the current proxy. + * - Another is needed for returning the value. + * + * So we should be ok with 2 refs, but for some reason this crashes. so adding a new ref... + * */ + + return (PyObject *)ret; } -PyObject* PyObjectPlus::py_getattro_dict() { - return py_getattr_dict(NULL, Type.tp_dict); -} - -int PyObjectPlus::py_delattro(PyObject* attr) +void PyObjectPlus::py_base_dealloc(PyObject *self) // python wrapper { - PyErr_SetString(PyExc_AttributeError, "attribute cant be deleted"); - return 1; + PyObjectPlus *self_plus= BGE_PROXY_REF(self); + if(self_plus) { + if(BGE_PROXY_PYOWNS(self)) { /* Does python own this?, then delete it */ + self_plus->m_proxy = NULL; /* Need this to stop ~PyObjectPlus from decrefing m_proxy otherwise its decref'd twice and py-debug crashes */ + delete self_plus; + } + + BGE_PROXY_REF(self)= NULL; // not really needed + } + +#if 0 + /* is ok normally but not for subtyping, use tp_free instead. */ + PyObject_DEL( self ); +#else + Py_TYPE(self)->tp_free(self); +#endif +}; + +PyObjectPlus::PyObjectPlus() : SG_QList() // constructor +{ + m_proxy= NULL; +}; + +/*------------------------------ + * PyObjectPlus Methods -- Every class, even the abstract one should have a Methods +------------------------------*/ +PyMethodDef PyObjectPlus::Methods[] = { + {NULL, NULL} /* Sentinel */ +}; + +#define attr_invalid (&(PyObjectPlus::Attributes[0])) +PyAttributeDef PyObjectPlus::Attributes[] = { + KX_PYATTRIBUTE_RO_FUNCTION("invalid", PyObjectPlus, pyattr_get_invalid), + {NULL} //Sentinel +}; + + + +PyObject* PyObjectPlus::pyattr_get_invalid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + return PyBool_FromLong(self_v ? 1:0); } -int PyObjectPlus::py_setattro(PyObject *attr, PyObject* value) +/* note, this is called as a python 'getset, where the PyAttributeDef is the closure */ +PyObject *PyObjectPlus::py_get_attrdef(PyObject *self_py, const PyAttributeDef *attrdef) { - PyErr_SetString(PyExc_AttributeError, "attribute cant be set"); - return PY_SET_ATTR_MISSING; -} + void *self= (void *)(BGE_PROXY_REF(self_py)); + if(self==NULL) { + if(attrdef == attr_invalid) + Py_RETURN_TRUE; // dont bother running the function + + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return NULL; + } + -PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef) -{ if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_DUMMY) { // fake attribute, ignore @@ -259,14 +256,14 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef { bool *val = reinterpret_cast(ptr); ptr += sizeof(bool); - PyList_SET_ITEM(resultlist,i,PyInt_FromLong(*val)); + PyList_SET_ITEM(resultlist,i,PyLong_FromSsize_t(*val)); break; } case KX_PYATTRIBUTE_TYPE_SHORT: { short int *val = reinterpret_cast(ptr); ptr += sizeof(short int); - PyList_SET_ITEM(resultlist,i,PyInt_FromLong(*val)); + PyList_SET_ITEM(resultlist,i,PyLong_FromSsize_t(*val)); break; } case KX_PYATTRIBUTE_TYPE_ENUM: @@ -281,7 +278,7 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef { int *val = reinterpret_cast(ptr); ptr += sizeof(int); - PyList_SET_ITEM(resultlist,i,PyInt_FromLong(*val)); + PyList_SET_ITEM(resultlist,i,PyLong_FromSsize_t(*val)); break; } case KX_PYATTRIBUTE_TYPE_FLOAT: @@ -305,12 +302,12 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef case KX_PYATTRIBUTE_TYPE_BOOL: { bool *val = reinterpret_cast(ptr); - return PyInt_FromLong(*val); + return PyLong_FromSsize_t(*val); } case KX_PYATTRIBUTE_TYPE_SHORT: { short int *val = reinterpret_cast(ptr); - return PyInt_FromLong(*val); + return PyLong_FromSsize_t(*val); } case KX_PYATTRIBUTE_TYPE_ENUM: // enum are like int, just make sure the field size is the same @@ -322,7 +319,7 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef case KX_PYATTRIBUTE_TYPE_INT: { int *val = reinterpret_cast(ptr); - return PyInt_FromLong(*val); + return PyLong_FromSsize_t(*val); } case KX_PYATTRIBUTE_TYPE_FLOAT: { @@ -334,7 +331,7 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef MT_Vector3 *val = reinterpret_cast(ptr); #ifdef USE_MATHUTILS float fval[3]= {(*val)[0], (*val)[1], (*val)[2]}; - return newVectorObject(fval, 3, Py_NEW); + return newVectorObject(fval, 3, Py_NEW, NULL); #else PyObject* resultlist = PyList_New(3); for (unsigned int i=0; i<3; i++) @@ -347,7 +344,7 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef case KX_PYATTRIBUTE_TYPE_STRING: { STR_String *val = reinterpret_cast(ptr); - return PyString_FromString(*val); + return PyUnicode_FromString(*val); } default: return NULL; @@ -355,8 +352,15 @@ PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef } } -int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyObject *value) +/* note, this is called as a python getset */ +int PyObjectPlus::py_set_attrdef(PyObject *self_py, PyObject *value, const PyAttributeDef *attrdef) { + void *self= (void *)(BGE_PROXY_REF(self_py)); + if(self==NULL) { + PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + return PY_SET_ATTR_FAIL; + } + void *undoBuffer = NULL; void *sourceBuffer = NULL; size_t bufferSize = 0; @@ -421,9 +425,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb { bool *var = reinterpret_cast(ptr); ptr += sizeof(bool); - if (PyInt_Check(item)) + if (PyLong_Check(item)) { - *var = (PyInt_AsLong(item) != 0); + *var = (PyLong_AsSsize_t(item) != 0); } else if (PyBool_Check(item)) { @@ -440,9 +444,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb { short int *var = reinterpret_cast(ptr); ptr += sizeof(short int); - if (PyInt_Check(item)) + if (PyLong_Check(item)) { - long val = PyInt_AsLong(item); + long val = PyLong_AsSsize_t(item); if (attrdef->m_clamp) { if (val < attrdef->m_imin) @@ -476,9 +480,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb { int *var = reinterpret_cast(ptr); ptr += sizeof(int); - if (PyInt_Check(item)) + if (PyLong_Check(item)) { - long val = PyInt_AsLong(item); + long val = PyLong_AsSsize_t(item); if (attrdef->m_clamp) { if (val < attrdef->m_imin) @@ -611,9 +615,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb case KX_PYATTRIBUTE_TYPE_BOOL: { bool *var = reinterpret_cast(ptr); - if (PyInt_Check(value)) + if (PyLong_Check(value)) { - *var = (PyInt_AsLong(value) != 0); + *var = (PyLong_AsSsize_t(value) != 0); } else if (PyBool_Check(value)) { @@ -629,9 +633,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb case KX_PYATTRIBUTE_TYPE_SHORT: { short int *var = reinterpret_cast(ptr); - if (PyInt_Check(value)) + if (PyLong_Check(value)) { - long val = PyInt_AsLong(value); + long val = PyLong_AsSsize_t(value); if (attrdef->m_clamp) { if (val < attrdef->m_imin) @@ -664,9 +668,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb case KX_PYATTRIBUTE_TYPE_INT: { int *var = reinterpret_cast(ptr); - if (PyInt_Check(value)) + if (PyLong_Check(value)) { - long val = PyInt_AsLong(value); + long val = PyLong_AsSsize_t(value); if (attrdef->m_clamp) { if (val < attrdef->m_imin) @@ -751,9 +755,9 @@ int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyOb case KX_PYATTRIBUTE_TYPE_STRING: { STR_String *var = reinterpret_cast(ptr); - if (PyString_Check(value)) + if (PyUnicode_Check(value)) { - char *val = PyString_AsString(value); + char *val = _PyUnicode_AsString(value); if (attrdef->m_clamp) { if (strlen(val) < attrdef->m_imin) @@ -834,48 +838,6 @@ PyObject *PyObjectPlus::py_repr(void) return NULL; } -/*------------------------------ - * PyObjectPlus isA -- the isA functions -------------------------------*/ -bool PyObjectPlus::isA(PyTypeObject *T) // if called with a Type, use "typename" -{ - int i; - PyParentObject P; - PyParentObject *Ps = GetParents(); - - for (P = Ps[i=0]; P != NULL; P = Ps[i++]) - if (P==T) - return true; - - return false; -} - - -bool PyObjectPlus::isA(const char *mytypename) // check typename of each parent -{ - int i; - PyParentObject P; - PyParentObject *Ps = GetParents(); - - for (P = Ps[i=0]; P != NULL; P = Ps[i++]) - if (strcmp(P->tp_name, mytypename)==0) - return true; - - return false; -} - -PyObject *PyObjectPlus::PyisA(PyObject *value) // Python wrapper for isA -{ - if (PyType_Check(value)) { - return PyBool_FromLong(isA((PyTypeObject *)value)); - } else if (PyString_Check(value)) { - return PyBool_FromLong(isA(PyString_AsString(value))); - } - PyErr_SetString(PyExc_TypeError, "object.isA(value): expected a type or a string"); - return NULL; -} - - void PyObjectPlus::ProcessReplica() { /* Clear the proxy, will be created again if needed with GetProxy() @@ -900,27 +862,6 @@ void PyObjectPlus::InvalidateProxy() // check typename of each parent } } -/* Utility function called by the macro py_getattro_up() - * for getting ob.__dict__() values from our PyObject - * this is used by python for doing dir() on an object, so its good - * if we return a list of attributes and methods. - * - * Other then making dir() useful the value returned from __dict__() is not useful - * since every value is a Py_None - * */ -PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict) -{ - if(pydict==NULL) { /* incase calling __dict__ on the parent of this object raised an error */ - PyErr_Clear(); - pydict = PyDict_New(); - } - - PyDict_Update(pydict, tp_dict); - return pydict; -} - - - PyObject *PyObjectPlus::GetProxy_Ext(PyObjectPlus *self, PyTypeObject *tp) { if (self->m_proxy==NULL) @@ -991,7 +932,7 @@ void PyObjectPlus::ShowDeprecationWarning_func(const char* old_way,const char* n co_filename= PyObject_GetAttrString(f_code, "co_filename"); if (co_filename) { - printf("\t%s:%d\n", PyString_AsString(co_filename), (int)PyInt_AsLong(f_lineno)); + printf("\t%s:%d\n", _PyUnicode_AsString(co_filename), (int)PyLong_AsSsize_t(f_lineno)); Py_DECREF(f_lineno); Py_DECREF(f_code); diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index 3b5eebe9893..a18df9d36a9 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -51,19 +51,9 @@ extern "C" { } #endif -#if PY_VERSION_HEX > 0x03000000 -#define PyString_FromString PyUnicode_FromString -#define PyString_FromFormat PyUnicode_FromFormat -#define PyString_Check PyUnicode_Check -#define PyString_Size PyUnicode_GetSize - -#define PyInt_FromLong PyLong_FromSsize_t -#define PyInt_AsLong PyLong_AsSsize_t -#define PyString_AsString _PyUnicode_AsString -#define PyInt_Check PyLong_Check -#define PyInt_AS_LONG PyLong_AsLong // TODO - check this one -#endif - +extern "C" { +#include "../../blender/python/intern/bpy_compat.h" +} /* @@ -145,7 +135,7 @@ typedef struct { #define BGE_PROXY_PYOWNS(_self) (((PyObjectPlus_Proxy *)_self)->py_owns) /* Note, sometimes we dont care what BGE type this is as long as its a proxy */ -#define BGE_PROXY_CHECK_TYPE(_self) ((_self)->ob_type->tp_dealloc == PyObjectPlus::py_base_dealloc) +#define BGE_PROXY_CHECK_TYPE(_type) ((_type)->tp_dealloc == PyObjectPlus::py_base_dealloc) // This must be the first line of each @@ -155,41 +145,10 @@ typedef struct { static PyTypeObject Type; \ static PyMethodDef Methods[]; \ static PyAttributeDef Attributes[]; \ - static PyParentObject Parents[]; \ virtual PyTypeObject *GetType(void) {return &Type;}; \ - virtual PyParentObject *GetParents(void) {return Parents;} \ virtual PyObject *GetProxy() {return GetProxy_Ext(this, &Type);}; \ virtual PyObject *NewProxy(bool py_owns) {return NewProxy_Ext(this, &Type, py_owns);}; \ - - - - // This defines the py_getattro_up macro - // which allows attribute and method calls - // to be properly passed up the hierarchy. - // - // Note, PyDict_GetItem() WONT set an exception! - // let the py_base_getattro function do this. - -#define py_getattro_up(Parent) \ - \ - PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \ - \ - if(descr) { \ - if (PyCObject_Check(descr)) { \ - return py_get_attrdef((void *)this, (const PyAttributeDef*)PyCObject_AsVoidPtr(descr)); \ - } else if (descr->ob_type->tp_descr_get) { \ - return PyCFunction_New(((PyMethodDescrObject *)descr)->d_method, this->m_proxy); \ - } else { \ - return NULL; \ - } \ - } else { \ - return Parent::py_getattro(attr); \ - } - -#define py_getattro_dict_up(Parent) \ - return py_getattr_dict(Parent::py_getattro_dict(), Type.tp_dict); - /* * nonzero values are an error for setattr * however because of the nested lookups we need to know if the errors @@ -201,29 +160,6 @@ typedef struct { #define PY_SET_ATTR_MISSING -1 #define PY_SET_ATTR_SUCCESS 0 -#define py_setattro_up(Parent) \ - PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \ - \ - if(descr) { \ - if (PyCObject_Check(descr)) { \ - const PyAttributeDef* attrdef= reinterpret_cast(PyCObject_AsVoidPtr(descr)); \ - if (attrdef->m_access == KX_PYATTRIBUTE_RO) { \ - PyErr_Format(PyExc_AttributeError, "\"%s\" is read only", PyString_AsString(attr)); \ - return PY_SET_ATTR_FAIL; \ - } \ - else { \ - return py_set_attrdef((void *)this, attrdef, value); \ - } \ - } else { \ - PyErr_Format(PyExc_AttributeError, "\"%s\" cannot be set", PyString_AsString(attr)); \ - return PY_SET_ATTR_FAIL; \ - } \ - } else { \ - PyErr_Clear(); \ - return Parent::py_setattro(attr, value); \ - } - - /** * These macros are helpfull when embedding Python routines. The second * macro is one that also requires a documentation string @@ -493,7 +429,7 @@ class PyObjectPlus : public SG_QList Py_Header; // Always start with Py_Header public: - PyObjectPlus(PyTypeObject *T); + PyObjectPlus(); PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */ @@ -501,30 +437,19 @@ public: /* These static functions are referenced by ALL PyObjectPlus_Proxy types * they take the C++ reference from the PyObjectPlus_Proxy and call - * its own virtual py_getattro, py_setattro etc. functions. + * its own virtual py_repr, py_base_dealloc ,etc. functions. */ + + static PyObject* py_base_new(PyTypeObject *type, PyObject *args, PyObject *kwds); /* allows subclassing */ static void py_base_dealloc(PyObject *self); - static PyObject* py_base_getattro(PyObject * self, PyObject *attr); - static int py_base_setattro(PyObject *self, PyObject *attr, PyObject *value); static PyObject* py_base_repr(PyObject *self); /* These are all virtual python methods that are defined in each class * Our own fake subclassing calls these on each class, then calls the parent */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_delattro(PyObject *attr); - virtual int py_setattro(PyObject *attr, PyObject *value); virtual PyObject* py_repr(void); - static PyObject* py_get_attrdef(void *self, const PyAttributeDef *attrdef); - static int py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyObject *value); - - /* isA() methods, shonky replacement for pythons issubclass() - * which we cant use because we have our own subclass system */ - bool isA(PyTypeObject *T); - bool isA(const char *mytypename); - - KX_PYMETHOD_O(PyObjectPlus,isA); + static PyObject* py_get_attrdef(PyObject *self_py, const PyAttributeDef *attrdef); + static int py_set_attrdef(PyObject *self_py, PyObject *value, const PyAttributeDef *attrdef); /* Kindof dumb, always returns True, the false case is checked for, before this function gets accessed */ static PyObject* pyattr_get_invalid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h index 52f8a580f4d..c580e8fd23a 100644 --- a/source/gameengine/Expressions/StringValue.h +++ b/source/gameengine/Expressions/StringValue.h @@ -40,7 +40,7 @@ public: virtual void SetValue(CValue* newval) { m_strString = newval->GetText(); SetModified(true); }; virtual CValue* GetReplica(); virtual PyObject* ConvertValueToPython() { - return PyString_FromString(m_strString.Ptr()); + return PyUnicode_FromString(m_strString.Ptr()); } private: diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 61dabff510b..d8c81f56f66 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -54,15 +54,17 @@ PyTypeObject CValue::Type = { py_base_repr, 0, 0,0,0,0,0, - py_base_getattro, - py_base_setattro, - 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject CValue::Parents[] = { - &CValue::Type, - NULL + NULL, + NULL, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; PyMethodDef CValue::Methods[] = { @@ -74,7 +76,7 @@ PyObject* CValue::PyGetName() { ShowDeprecationWarning("getName()", "the name property"); - return PyString_FromString(this->GetName()); + return PyUnicode_FromString(this->GetName()); } /*#define CVALUE_DEBUG*/ @@ -100,8 +102,8 @@ std::vector gRefList; //int gRefCountValue; #endif -CValue::CValue(PyTypeObject *T) - : PyObjectPlus(T), +CValue::CValue() + : PyObjectPlus(), #else CValue::CValue() : @@ -553,33 +555,9 @@ PyAttributeDef CValue::Attributes[] = { { NULL } //Sentinel }; - -PyObject* CValue::py_getattro(PyObject *attr) -{ - char *attr_str= PyString_AsString(attr); - CValue* resultattr = GetProperty(attr_str); - if (resultattr) - { - /* only show the wanting here because python inspects for __class__ and KX_MeshProxy uses CValues name attr */ - ShowDeprecationWarning("val = ob.attr", "val = ob['attr']"); - - PyObject* pyconvert = resultattr->ConvertValueToPython(); - - if (pyconvert) - return pyconvert; - else - return resultattr->GetProxy(); - } - py_getattro_up(PyObjectPlus); -} - -PyObject* CValue::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - PyObject * CValue::pyattr_get_name(void * self_v, const KX_PYATTRIBUTE_DEF * attrdef) { CValue * self = static_cast (self_v); - return PyString_FromString(self->GetName()); + return PyUnicode_FromString(self->GetName()); } CValue* CValue::ConvertPythonToValue(PyObject* pyobj, const char *error_prefix) @@ -623,30 +601,23 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj, const char *error_prefix) { vallie = new CFloatValue( (float)PyFloat_AsDouble(pyobj) ); } else +#if PY_VERSION_HEX < 0x03000000 if (PyInt_Check(pyobj)) { vallie = new CIntValue( (cInt)PyInt_AS_LONG(pyobj) ); } else +#endif if (PyLong_Check(pyobj)) { vallie = new CIntValue( (cInt)PyLong_AsLongLong(pyobj) ); } else - if (PyString_Check(pyobj)) + if (PyUnicode_Check(pyobj)) { - vallie = new CStringValue(PyString_AsString(pyobj),""); + vallie = new CStringValue(_PyUnicode_AsString(pyobj),""); } else - if (BGE_PROXY_CHECK_TYPE(pyobj)) /* Note, dont let these get assigned to GameObject props, must check elsewhere */ + if (PyObject_TypeCheck(pyobj, &CValue::Type)) /* Note, dont let these get assigned to GameObject props, must check elsewhere */ { - if (BGE_PROXY_REF(pyobj) && (BGE_PROXY_REF(pyobj))->isA(&CValue::Type)) - { - vallie = (static_cast(BGE_PROXY_REF(pyobj)))->AddRef(); - } else { - - if(BGE_PROXY_REF(pyobj)) /* this is not a CValue */ - PyErr_Format(PyExc_TypeError, "%sgame engine python type cannot be used as a property", error_prefix); - else /* PyObjectPlus_Proxy has been removed, cant use */ - PyErr_Format(PyExc_SystemError, "%s"BGE_PROXY_ERROR_MSG, error_prefix); - } + vallie = (static_cast(BGE_PROXY_REF(pyobj)))->AddRef(); } else { /* return an error value from the caller */ @@ -656,57 +627,6 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj, const char *error_prefix) } -int CValue::py_delattro(PyObject *attr) -{ - ShowDeprecationWarning("del ob.attr", "del ob['attr']"); - - char *attr_str= PyString_AsString(attr); - if (RemoveProperty(attr_str)) - return 0; - - PyErr_Format(PyExc_AttributeError, "attribute \"%s\" dosnt exist", attr_str); - return PY_SET_ATTR_MISSING; -} - -int CValue::py_setattro(PyObject *attr, PyObject* pyobj) -{ - ShowDeprecationWarning("ob.attr = val", "ob['attr'] = val"); - - char *attr_str= PyString_AsString(attr); - CValue* oldprop = GetProperty(attr_str); - CValue* vallie; - - /* Dissallow python to assign GameObjects, Scenes etc as values */ - if ((BGE_PROXY_CHECK_TYPE(pyobj)==0) && (vallie = ConvertPythonToValue(pyobj, "cvalue.attr = value: "))) - { - if (oldprop) - oldprop->SetValue(vallie); - else - SetProperty(attr_str, vallie); - - vallie->Release(); - } - else { - // ConvertPythonToValue sets the error message - // must return missing so KX_GameObect knows this - // attribute was not a function or bult in attribute, - // - // CValue attributes override internal attributes - // so if it exists as a CValue attribute already, - // assume your trying to set it to a differnt CValue attribute - // otherwise return PY_SET_ATTR_MISSING so children - // classes know they can set it without conflict - - if (GetProperty(attr_str)) - return PY_SET_ATTR_COERCE_FAIL; /* failed to set an existing attribute */ - else - return PY_SET_ATTR_MISSING; /* allow the KX_GameObject dict to set */ - } - - //PyObjectPlus::py_setattro(attr,value); - return PY_SET_ATTR_SUCCESS; -}; - PyObject* CValue::ConvertKeysToPython( void ) { PyObject *pylist = PyList_New( 0 ); @@ -717,7 +637,7 @@ PyObject* CValue::ConvertKeysToPython( void ) std::map::iterator it; for (it= m_pNamedPropertyArray->begin(); (it != m_pNamedPropertyArray->end()); it++) { - pystr = PyString_FromString( (*it).first ); + pystr = PyUnicode_FromString( (*it).first ); PyList_Append(pylist, pystr); Py_DECREF( pystr ); } diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h index 29ef19b46c9..8c9f99b335e 100644 --- a/source/gameengine/Expressions/Value.h +++ b/source/gameengine/Expressions/Value.h @@ -215,26 +215,18 @@ public: // Construction / Destruction #ifndef NO_EXP_PYTHON_EMBEDDING - CValue(PyTypeObject *T = &Type); + CValue(); //static PyObject* PyMake(PyObject*,PyObject*); virtual PyObject *py_repr(void) { - return PyString_FromString((const char*)GetText()); + return PyUnicode_FromString((const char*)GetText()); } - - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); virtual PyObject* ConvertValueToPython() { return NULL; } virtual CValue* ConvertPythonToValue(PyObject* pyobj, const char *error_prefix); - - - virtual int py_delattro(PyObject *attr); - virtual int py_setattro(PyObject *attr, PyObject* value); static PyObject * pyattr_get_name(void * self, const KX_PYATTRIBUTE_DEF * attrdef); @@ -417,8 +409,8 @@ class CPropValue : public CValue public: #ifndef NO_EXP_PYTHON_EMBEDDING - CPropValue(PyTypeObject* T=&Type) : - CValue(T), + CPropValue() : + CValue(), #else CPropValue() : #endif //NO_EXP_PYTHON_EMBEDDING diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp index caed85b9938..04d46e259d3 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp @@ -42,9 +42,8 @@ SCA_2DFilterActuator::SCA_2DFilterActuator( float float_arg, int int_arg, RAS_IRasterizer* rasterizer, - RAS_IRenderTools* rendertools, - PyTypeObject* T) - : SCA_IActuator(gameobj, T), + RAS_IRenderTools* rendertools) + : SCA_IActuator(gameobj), m_type(type), m_disableMotionBlur(flag), m_float_arg(float_arg), @@ -124,23 +123,17 @@ PyTypeObject SCA_2DFilterActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_IActuator::Type, + 0,0,0,0,0,0, + py_base_new }; - -PyParentObject SCA_2DFilterActuator::Parents[] = { - &SCA_2DFilterActuator::Type, - &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL -}; - - PyMethodDef SCA_2DFilterActuator::Methods[] = { /* add python functions to deal with m_msg... */ {NULL,NULL} @@ -154,18 +147,3 @@ PyAttributeDef SCA_2DFilterActuator::Attributes[] = { KX_PYATTRIBUTE_FLOAT_RW("value", 0.0, 100.0, SCA_2DFilterActuator, m_float_arg), { NULL } //Sentinel }; - -PyObject* SCA_2DFilterActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* SCA_2DFilterActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int SCA_2DFilterActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.h b/source/gameengine/GameLogic/SCA_2DFilterActuator.h index 13b9997a010..c357c4f3e37 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.h +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.h @@ -56,23 +56,12 @@ public: float float_arg, int int_arg, RAS_IRasterizer* rasterizer, - RAS_IRenderTools* rendertools, - PyTypeObject* T=&Type - ); + RAS_IRenderTools* rendertools); void SetShaderText(const char *text); virtual ~SCA_2DFilterActuator(); virtual bool Update(); virtual CValue* GetReplica(); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - }; #endif diff --git a/source/gameengine/GameLogic/SCA_ANDController.cpp b/source/gameengine/GameLogic/SCA_ANDController.cpp index 87f7c612e7c..78e1350428e 100644 --- a/source/gameengine/GameLogic/SCA_ANDController.cpp +++ b/source/gameengine/GameLogic/SCA_ANDController.cpp @@ -42,10 +42,9 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_ANDController::SCA_ANDController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_ANDController::SCA_ANDController(SCA_IObject* gameobj) : - SCA_IController(gameobj,T) + SCA_IController(gameobj) { } @@ -116,19 +115,15 @@ PyTypeObject SCA_ANDController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_ANDController::Parents[] = { - &SCA_ANDController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_ANDController::Methods[] = { @@ -139,12 +134,4 @@ PyAttributeDef SCA_ANDController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_ANDController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_ANDController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ANDController.h b/source/gameengine/GameLogic/SCA_ANDController.h index 9a359d57cb4..cb16d7fca01 100644 --- a/source/gameengine/GameLogic/SCA_ANDController.h +++ b/source/gameengine/GameLogic/SCA_ANDController.h @@ -39,18 +39,10 @@ class SCA_ANDController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_ANDController(SCA_IObject* gameobj,PyTypeObject* T=&Type); + SCA_ANDController(SCA_IObject* gameobj); virtual ~SCA_ANDController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_ANDCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp index 4dad65c5a25..bdcc923e1d9 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp @@ -40,9 +40,8 @@ SCA_ActuatorSensor::SCA_ActuatorSensor(SCA_EventManager* eventmgr, SCA_IObject* gameobj, - const STR_String& actname, - PyTypeObject* T ) - : SCA_ISensor(gameobj,eventmgr,T), + const STR_String& actname) + : SCA_ISensor(gameobj,eventmgr), m_checkactname(actname) { m_actuator = GetParent()->FindActuator(m_checkactname); @@ -138,19 +137,15 @@ PyTypeObject SCA_ActuatorSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_ActuatorSensor::Parents[] = { - &SCA_ActuatorSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_ActuatorSensor::Methods[] = { @@ -166,18 +161,6 @@ PyAttributeDef SCA_ActuatorSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_ActuatorSensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_ActuatorSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_ActuatorSensor::py_setattro(PyObject *attr, PyObject *value) { - py_setattro_up(SCA_ISensor); -} - int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*) { SCA_ActuatorSensor* sensor = reinterpret_cast(self); @@ -197,7 +180,7 @@ const char SCA_ActuatorSensor::GetActuator_doc[] = PyObject* SCA_ActuatorSensor::PyGetActuator() { ShowDeprecationWarning("getActuator()", "the actuator property"); - return PyString_FromString(m_checkactname); + return PyUnicode_FromString(m_checkactname); } /* 4. setActuator */ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h index 6655e08dc70..cf8e735cad4 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h @@ -46,8 +46,7 @@ class SCA_ActuatorSensor : public SCA_ISensor public: SCA_ActuatorSensor(class SCA_EventManager* eventmgr, SCA_IObject* gameobj, - const STR_String& actname, - PyTypeObject* T=&Type ); + const STR_String& actname); virtual ~SCA_ActuatorSensor(); virtual CValue* GetReplica(); @@ -61,10 +60,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* 3. setProperty */ KX_PYMETHOD_DOC_VARARGS(SCA_ActuatorSensor,SetActuator); /* 4. getProperty */ diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp index ff02680f191..ddb54c580b8 100644 --- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp +++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp @@ -48,9 +48,8 @@ /* ------------------------------------------------------------------------- */ SCA_AlwaysSensor::SCA_AlwaysSensor(class SCA_EventManager* eventmgr, - SCA_IObject* gameobj, - PyTypeObject* T) - : SCA_ISensor(gameobj,eventmgr, T) + SCA_IObject* gameobj) + : SCA_ISensor(gameobj,eventmgr) { //SetDrawColor(255,0,0); Init(); @@ -121,19 +120,15 @@ PyTypeObject SCA_AlwaysSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_AlwaysSensor::Parents[] = { - &SCA_AlwaysSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_AlwaysSensor::Methods[] = { @@ -144,12 +139,4 @@ PyAttributeDef SCA_AlwaysSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_AlwaysSensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_AlwaysSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.h b/source/gameengine/GameLogic/SCA_AlwaysSensor.h index 0f85a641ef1..d58e05564d1 100644 --- a/source/gameengine/GameLogic/SCA_AlwaysSensor.h +++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.h @@ -39,22 +39,12 @@ class SCA_AlwaysSensor : public SCA_ISensor bool m_alwaysresult; public: SCA_AlwaysSensor(class SCA_EventManager* eventmgr, - SCA_IObject* gameobj, - PyTypeObject* T =&Type); + SCA_IObject* gameobj); virtual ~SCA_AlwaysSensor(); virtual CValue* GetReplica(); virtual bool Evaluate(); virtual bool IsPositiveTrigger(); virtual void Init(); - - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_ALWAYSSENSOR diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp index dcdae0b4e75..11c6996a0a1 100644 --- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp +++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp @@ -51,9 +51,8 @@ SCA_DelaySensor::SCA_DelaySensor(class SCA_EventManager* eventmgr, SCA_IObject* gameobj, int delay, int duration, - bool repeat, - PyTypeObject* T) - : SCA_ISensor(gameobj,eventmgr, T), + bool repeat) + : SCA_ISensor(gameobj,eventmgr), m_repeat(repeat), m_delay(delay), m_duration(duration) @@ -147,19 +146,15 @@ PyTypeObject SCA_DelaySensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_DelaySensor::Parents[] = { - &SCA_DelaySensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_DelaySensor::Methods[] = { @@ -183,19 +178,6 @@ PyAttributeDef SCA_DelaySensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_DelaySensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_DelaySensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_DelaySensor::py_setattro(PyObject *attr, PyObject *value) { - py_setattro_up(SCA_ISensor); -} - - const char SCA_DelaySensor::SetDelay_doc[] = "setDelay(delay)\n" "\t- delay: length of the initial OFF period as number of frame\n" @@ -262,7 +244,7 @@ const char SCA_DelaySensor::GetDelay_doc[] = PyObject* SCA_DelaySensor::PyGetDelay() { ShowDeprecationWarning("getDelay()", "the delay property"); - return PyInt_FromLong(m_delay); + return PyLong_FromSsize_t(m_delay); } const char SCA_DelaySensor::GetDuration_doc[] = @@ -271,7 +253,7 @@ const char SCA_DelaySensor::GetDuration_doc[] = PyObject* SCA_DelaySensor::PyGetDuration() { ShowDeprecationWarning("getDuration()", "the duration property"); - return PyInt_FromLong(m_duration); + return PyLong_FromSsize_t(m_duration); } const char SCA_DelaySensor::GetRepeat_doc[] = diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.h b/source/gameengine/GameLogic/SCA_DelaySensor.h index 5ccb33f8a16..8270e8959b7 100644 --- a/source/gameengine/GameLogic/SCA_DelaySensor.h +++ b/source/gameengine/GameLogic/SCA_DelaySensor.h @@ -47,8 +47,7 @@ public: SCA_IObject* gameobj, int delay, int duration, - bool repeat, - PyTypeObject* T =&Type); + bool repeat); virtual ~SCA_DelaySensor(); virtual CValue* GetReplica(); virtual bool Evaluate(); @@ -59,10 +58,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); /* setProperty */ KX_PYMETHOD_DOC_VARARGS(SCA_DelaySensor,SetDelay); diff --git a/source/gameengine/GameLogic/SCA_ExpressionController.cpp b/source/gameengine/GameLogic/SCA_ExpressionController.cpp index 8e044b89c71..60969300474 100644 --- a/source/gameengine/GameLogic/SCA_ExpressionController.cpp +++ b/source/gameengine/GameLogic/SCA_ExpressionController.cpp @@ -46,9 +46,8 @@ /* ------------------------------------------------------------------------- */ SCA_ExpressionController::SCA_ExpressionController(SCA_IObject* gameobj, - const STR_String& exprtext, - PyTypeObject* T) - :SCA_IController(gameobj,T), + const STR_String& exprtext) + :SCA_IController(gameobj), m_exprText(exprtext), m_exprCache(NULL) { diff --git a/source/gameengine/GameLogic/SCA_ExpressionController.h b/source/gameengine/GameLogic/SCA_ExpressionController.h index 6a34d7b2dff..705f6dfc415 100644 --- a/source/gameengine/GameLogic/SCA_ExpressionController.h +++ b/source/gameengine/GameLogic/SCA_ExpressionController.h @@ -42,8 +42,7 @@ class SCA_ExpressionController : public SCA_IController public: SCA_ExpressionController(SCA_IObject* gameobj, - const STR_String& exprtext, - PyTypeObject* T=&Type ); + const STR_String& exprtext); virtual ~SCA_ExpressionController(); virtual CValue* GetReplica(); @@ -54,14 +53,6 @@ public: * so that self references are removed before the controller itself is released */ virtual void Delete(); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - -// virtual PyObject* py_getattro(PyObject *attr); -// virtual PyObject* py_getattro_dict(); - }; #endif //__KX_EXPRESSIONCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_IActuator.cpp b/source/gameengine/GameLogic/SCA_IActuator.cpp index be7c2651686..0fda75590c1 100644 --- a/source/gameengine/GameLogic/SCA_IActuator.cpp +++ b/source/gameengine/GameLogic/SCA_IActuator.cpp @@ -34,9 +34,8 @@ using namespace std; -SCA_IActuator::SCA_IActuator(SCA_IObject* gameobj, - PyTypeObject* T) : - SCA_ILogicBrick(gameobj,T), +SCA_IActuator::SCA_IActuator(SCA_IObject* gameobj) : + SCA_ILogicBrick(gameobj), m_links(0), m_posevent(false), m_negevent(false) diff --git a/source/gameengine/GameLogic/SCA_IActuator.h b/source/gameengine/GameLogic/SCA_IActuator.h index 27afcbc386b..13c718ee837 100644 --- a/source/gameengine/GameLogic/SCA_IActuator.h +++ b/source/gameengine/GameLogic/SCA_IActuator.h @@ -61,8 +61,7 @@ public: * This class also inherits the default copy constructors */ - SCA_IActuator(SCA_IObject* gameobj, - PyTypeObject* T =&Type); + SCA_IActuator(SCA_IObject* gameobj); /** * UnlinkObject(...) diff --git a/source/gameengine/GameLogic/SCA_IController.cpp b/source/gameengine/GameLogic/SCA_IController.cpp index f2c3c83a2d9..7cbb728753a 100644 --- a/source/gameengine/GameLogic/SCA_IController.cpp +++ b/source/gameengine/GameLogic/SCA_IController.cpp @@ -37,10 +37,9 @@ #include #endif -SCA_IController::SCA_IController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_IController::SCA_IController(SCA_IObject* gameobj) : - SCA_ILogicBrick(gameobj,T), + SCA_ILogicBrick(gameobj), m_statemask(0), m_justActivated(false) { @@ -216,17 +215,15 @@ PyTypeObject SCA_IController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_IController::Parents[] = { - &SCA_IController::Type, - &CValue::Type, - NULL + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_ILogicBrick::Type, + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_IController::Methods[] = { @@ -248,22 +245,6 @@ PyAttributeDef SCA_IController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_IController::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ILogicBrick); -} - -PyObject* SCA_IController::py_getattro_dict() { - py_getattro_dict_up(SCA_ILogicBrick); -} - -int SCA_IController::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ILogicBrick); -} - - - PyObject* SCA_IController::PyGetActuators() { ShowDeprecationWarning("getActuators()", "the actuators property"); @@ -281,7 +262,7 @@ PyObject* SCA_IController::PyGetSensor(PyObject* value) { ShowDeprecationWarning("getSensor(string)", "the sensors[string] property"); - char *scriptArg = PyString_AsString(value); + char *scriptArg = _PyUnicode_AsString(value); if (scriptArg==NULL) { PyErr_SetString(PyExc_TypeError, "controller.getSensor(string): Python Controller, expected a string (sensor name)"); return NULL; @@ -305,7 +286,7 @@ PyObject* SCA_IController::PyGetActuator(PyObject* value) { ShowDeprecationWarning("getActuator(string)", "the actuators[string] property"); - char *scriptArg = PyString_AsString(value); + char *scriptArg = _PyUnicode_AsString(value); if (scriptArg==NULL) { PyErr_SetString(PyExc_TypeError, "controller.getActuator(string): Python Controller, expected a string (actuator name)"); return NULL; @@ -340,13 +321,13 @@ PyObject* SCA_IController::PyGetSensors() PyObject* SCA_IController::PyGetState() { ShowDeprecationWarning("getState()", "the state property"); - return PyInt_FromLong(m_statemask); + return PyLong_FromSsize_t(m_statemask); } PyObject* SCA_IController::pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_IController* self= static_cast(self_v); - return PyInt_FromLong(self->m_statemask); + return PyLong_FromSsize_t(self->m_statemask); } PyObject* SCA_IController::pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) diff --git a/source/gameengine/GameLogic/SCA_IController.h b/source/gameengine/GameLogic/SCA_IController.h index a52c57ab3ed..523878bee26 100644 --- a/source/gameengine/GameLogic/SCA_IController.h +++ b/source/gameengine/GameLogic/SCA_IController.h @@ -47,7 +47,7 @@ protected: bool m_justActivated; bool m_bookmark; public: - SCA_IController(SCA_IObject* gameobj,PyTypeObject* T); + SCA_IController(SCA_IObject* gameobj); virtual ~SCA_IController(); virtual void Trigger(class SCA_LogicManager* logicmgr)=0; void LinkToSensor(SCA_ISensor* sensor); @@ -98,10 +98,6 @@ public: } } - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - KX_PYMETHOD_NOARGS(SCA_IController,GetSensors); KX_PYMETHOD_NOARGS(SCA_IController,GetActuators); KX_PYMETHOD_O(SCA_IController,GetSensor); diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp index 2dc80f54568..ccb79a2d49f 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp @@ -35,10 +35,9 @@ SCA_LogicManager* SCA_ILogicBrick::m_sCurrentLogicManager = NULL; -SCA_ILogicBrick::SCA_ILogicBrick(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_ILogicBrick::SCA_ILogicBrick(SCA_IObject* gameobj) : - CValue(T), + CValue(), m_gameobj(gameobj), m_Execute_Priority(0), m_Execute_Ueber_Priority(0), @@ -194,23 +193,17 @@ PyTypeObject SCA_ILogicBrick::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject SCA_ILogicBrick::Parents[] = { - &SCA_ILogicBrick::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef SCA_ILogicBrick::Methods[] = { // --> Deprecated {"getOwner", (PyCFunction) SCA_ILogicBrick::sPyGetOwner, METH_NOARGS}, @@ -245,21 +238,6 @@ int SCA_ILogicBrick::CheckProperty(void *self, const PyAttributeDef *attrdef) return 0; } -PyObject* SCA_ILogicBrick::py_getattro(PyObject *attr) -{ - py_getattro_up(CValue); -} - -PyObject* SCA_ILogicBrick::py_getattro_dict() { - py_getattro_dict_up(CValue); -} - -int SCA_ILogicBrick::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(CValue); -} - - PyObject* SCA_ILogicBrick::PyGetOwner() { ShowDeprecationWarning("getOwner()", "the owner property"); @@ -296,7 +274,7 @@ PyObject* SCA_ILogicBrick::PySetExecutePriority(PyObject* args) PyObject* SCA_ILogicBrick::PyGetExecutePriority() { ShowDeprecationWarning("getExecutePriority()", "the executePriority property"); - return PyInt_FromLong(m_Execute_Priority); + return PyLong_FromSsize_t(m_Execute_Priority); } @@ -326,5 +304,5 @@ bool SCA_ILogicBrick::PyArgToBool(int boolArg) PyObject* SCA_ILogicBrick::BoolToPyArg(bool boolarg) { - return PyInt_FromLong(boolarg? KX_TRUE: KX_FALSE); + return PyLong_FromSsize_t(boolarg? KX_TRUE: KX_FALSE); } diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h index 779e5397a6a..50679856802 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.h +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h @@ -53,7 +53,7 @@ protected: CValue* GetEvent(); public: - SCA_ILogicBrick(SCA_IObject* gameobj,PyTypeObject* T ); + SCA_ILogicBrick(SCA_IObject* gameobj); virtual ~SCA_ILogicBrick(); void SetExecutePriority(int execute_Priority); @@ -121,10 +121,6 @@ public: } virtual bool LessComparedTo(SCA_ILogicBrick* other); - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); static class SCA_LogicManager* m_sCurrentLogicManager; diff --git a/source/gameengine/GameLogic/SCA_IObject.cpp b/source/gameengine/GameLogic/SCA_IObject.cpp index 9876f2512c0..6cd11f9e553 100644 --- a/source/gameengine/GameLogic/SCA_IObject.cpp +++ b/source/gameengine/GameLogic/SCA_IObject.cpp @@ -41,8 +41,11 @@ MT_Point3 SCA_IObject::m_sDummy=MT_Point3(0,0,0); SG_QList SCA_IObject::m_activeBookmarkedControllers; -SCA_IObject::SCA_IObject(PyTypeObject* T): CValue(T), m_initState(0), m_state(0), m_firstState(NULL) - +SCA_IObject::SCA_IObject(): + CValue(), + m_initState(0), + m_state(0), + m_firstState(NULL) { m_suspended = false; } @@ -218,51 +221,6 @@ SCA_IActuator* SCA_IObject::FindActuator(const STR_String& actuatorname) } - -#if 0 -const MT_Point3& SCA_IObject::ConvertPythonPylist(PyObject* pylist) -{ - bool error = false; - m_sDummy = MT_Vector3(0,0,0); - if (pylist->ob_type == &CListValue::Type) - { - CListValue* listval = (CListValue*) pylist; - int numelem = listval->GetCount(); - if ( numelem <= 3) - { - int index; - for (index = 0;indexGetValue(index)->GetNumber(); - } - } else - { - error = true; - } - - } else - { - - // assert the list is long enough... - int numitems = PyList_Size(pylist); - if (numitems <= 3) - { - int index; - for (index=0;indexIsTriggered(this); - return PyInt_FromLong(retval); + return PyLong_FromSsize_t(retval); } /** @@ -355,7 +354,7 @@ const char SCA_ISensor::GetFrequency_doc[] = PyObject* SCA_ISensor::PyGetFrequency() { ShowDeprecationWarning("getFrequency()", "the frequency property"); - return PyInt_FromLong(m_pulse_frequency); + return PyLong_FromSsize_t(m_pulse_frequency); } /** @@ -489,19 +488,17 @@ PyTypeObject SCA_ISensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_ILogicBrick::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject SCA_ISensor::Parents[] = { - &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL -}; PyMethodDef SCA_ISensor::Methods[] = { //Deprecated functions -----> {"isPositive", (PyCFunction) SCA_ISensor::sPyIsPositive, @@ -548,19 +545,6 @@ PyAttributeDef SCA_ISensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_ISensor::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ILogicBrick); -} - -PyObject* SCA_ISensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ILogicBrick); -} - -int SCA_ISensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ILogicBrick); -} PyObject* SCA_ISensor::pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { @@ -568,13 +552,13 @@ PyObject* SCA_ISensor::pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_D int retval = 0; if (SCA_PythonController::m_sCurrentController) retval = SCA_PythonController::m_sCurrentController->IsTriggered(self); - return PyInt_FromLong(retval); + return PyLong_FromSsize_t(retval); } PyObject* SCA_ISensor::pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_ISensor* self= static_cast(self_v); - return PyInt_FromLong(self->GetState()); + return PyLong_FromSsize_t(self->GetState()); } int SCA_ISensor::pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h index 9bbd6ed41e4..81864ab6a34 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.h +++ b/source/gameengine/GameLogic/SCA_ISensor.h @@ -101,8 +101,7 @@ public: }; SCA_ISensor(SCA_IObject* gameobj, - class SCA_EventManager* eventmgr, - PyTypeObject* T );; + class SCA_EventManager* eventmgr);; ~SCA_ISensor(); virtual void ReParent(SCA_IObject* parent); @@ -173,10 +172,6 @@ public: { return !m_links; } /* Python functions: */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); //Deprecated functions -----> KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,IsPositive); diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp index 336529667d7..f55921e648b 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp @@ -46,9 +46,8 @@ SCA_JoystickSensor::SCA_JoystickSensor(class SCA_JoystickManager* eventmgr, short int joymode, int axis, int axisf,int prec, int button, - int hat, int hatf, bool allevents, - PyTypeObject* T ) - :SCA_ISensor(gameobj,eventmgr,T), + int hat, int hatf, bool allevents) + :SCA_ISensor(gameobj,eventmgr), m_pJoystickMgr(eventmgr), m_axis(axis), m_axisf(axisf), @@ -269,23 +268,17 @@ PyTypeObject SCA_JoystickSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - -PyParentObject SCA_JoystickSensor::Parents[] = { - &SCA_JoystickSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - PyMethodDef SCA_JoystickSensor::Methods[] = { //Deprecated functions ------> {"getIndex", (PyCFunction) SCA_JoystickSensor::sPyGetIndex, METH_NOARGS, (PY_METHODCHAR)GetIndex_doc}, @@ -328,20 +321,6 @@ PyAttributeDef SCA_JoystickSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_JoystickSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_JoystickSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_JoystickSensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ISensor); -} - /* get index ---------------------------------------------------------- */ const char SCA_JoystickSensor::GetIndex_doc[] = @@ -349,7 +328,7 @@ const char SCA_JoystickSensor::GetIndex_doc[] = "\tReturns the joystick index to use.\n"; PyObject* SCA_JoystickSensor::PyGetIndex( ) { ShowDeprecationWarning("getIndex()", "the index property"); - return PyInt_FromLong(m_joyindex); + return PyLong_FromSsize_t(m_joyindex); } @@ -359,7 +338,7 @@ const char SCA_JoystickSensor::SetIndex_doc[] = "\tSets the joystick index to use.\n"; PyObject* SCA_JoystickSensor::PySetIndex( PyObject* value ) { ShowDeprecationWarning("setIndex()", "the index property"); - int index = PyInt_AsLong( value ); /* -1 on error, will raise an error in this case */ + int index = PyLong_AsSsize_t( value ); /* -1 on error, will raise an error in this case */ if (index < 0 || index >= JOYINDEX_MAX) { PyErr_SetString(PyExc_ValueError, "joystick index out of range or not an int"); return NULL; @@ -410,7 +389,7 @@ PyObject* SCA_JoystickSensor::PyGetAxisValue( ) { PyObject *list= PyList_New(axis_index); while(axis_index--) { - PyList_SET_ITEM(list, axis_index, PyInt_FromLong(joy->GetAxisPosition(axis_index))); + PyList_SET_ITEM(list, axis_index, PyLong_FromSsize_t(joy->GetAxisPosition(axis_index))); } return list; @@ -423,7 +402,7 @@ const char SCA_JoystickSensor::GetThreshold_doc[] = "\tReturns the threshold of the axis.\n"; PyObject* SCA_JoystickSensor::PyGetThreshold( ) { ShowDeprecationWarning("getThreshold()", "the threshold property"); - return PyInt_FromLong(m_precision); + return PyLong_FromSsize_t(m_precision); } @@ -447,7 +426,7 @@ const char SCA_JoystickSensor::GetButton_doc[] = "\tReturns the current button this sensor is checking.\n"; PyObject* SCA_JoystickSensor::PyGetButton( ) { ShowDeprecationWarning("getButton()", "the button property"); - return PyInt_FromLong(m_button); + return PyLong_FromSsize_t(m_button); } /* set button -------------------------------------------------------- */ @@ -456,7 +435,7 @@ const char SCA_JoystickSensor::SetButton_doc[] = "\tSets the button the sensor reacts to.\n"; PyObject* SCA_JoystickSensor::PySetButton( PyObject* value ) { ShowDeprecationWarning("setButton()", "the button property"); - int button = PyInt_AsLong(value); + int button = PyLong_AsSsize_t(value); if(button==-1 && PyErr_Occurred()) { PyErr_SetString(PyExc_ValueError, "expected an int"); return NULL; @@ -487,7 +466,7 @@ PyObject* SCA_JoystickSensor::PyGetButtonActiveList( ) { if(joy) { for (i=0; i < joy->GetNumberOfButtons(); i++) { if (joy->aButtonPressIsPositive(i)) { - value = PyInt_FromLong(i); + value = PyLong_FromSsize_t(i); PyList_Append(ls, value); Py_DECREF(value); } @@ -549,7 +528,7 @@ PyObject* SCA_JoystickSensor::PyNumberOfAxes( ) { ShowDeprecationWarning("getNumAxes()", "the numAxis property"); SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex); // when the joystick is null their is 0 exis still. dumb but scripters should use isConnected() - return PyInt_FromLong( joy ? joy->GetNumberOfAxes() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfAxes() : 0 ); } @@ -559,7 +538,7 @@ const char SCA_JoystickSensor::NumberOfButtons_doc[] = PyObject* SCA_JoystickSensor::PyNumberOfButtons( ) { ShowDeprecationWarning("getNumButtons()", "the numButtons property"); SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex); - return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfButtons() : 0 ); } @@ -569,7 +548,7 @@ const char SCA_JoystickSensor::NumberOfHats_doc[] = PyObject* SCA_JoystickSensor::PyNumberOfHats( ) { ShowDeprecationWarning("getNumHats()", "the numHats property"); SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex); - return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfHats() : 0 ); } const char SCA_JoystickSensor::Connected_doc[] = @@ -591,7 +570,7 @@ PyObject* SCA_JoystickSensor::pyattr_get_axis_values(void *self_v, const KX_PYAT PyObject *list= PyList_New(axis_index); while(axis_index--) { - PyList_SET_ITEM(list, axis_index, PyInt_FromLong(joy->GetAxisPosition(axis_index))); + PyList_SET_ITEM(list, axis_index, PyLong_FromSsize_t(joy->GetAxisPosition(axis_index))); } return list; @@ -607,7 +586,7 @@ PyObject* SCA_JoystickSensor::pyattr_get_axis_single(void *self_v, const KX_PYAT return NULL; } - return PyInt_FromLong(joy->GetAxisPosition(self->m_axis-1)); + return PyLong_FromSsize_t(joy->GetAxisPosition(self->m_axis-1)); } PyObject* SCA_JoystickSensor::pyattr_get_hat_values(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) @@ -619,7 +598,7 @@ PyObject* SCA_JoystickSensor::pyattr_get_hat_values(void *self_v, const KX_PYATT PyObject *list= PyList_New(hat_index); while(hat_index--) { - PyList_SET_ITEM(list, hat_index, PyInt_FromLong(joy->GetHat(hat_index))); + PyList_SET_ITEM(list, hat_index, PyLong_FromSsize_t(joy->GetHat(hat_index))); } return list; @@ -630,28 +609,28 @@ PyObject* SCA_JoystickSensor::pyattr_get_hat_single(void *self_v, const KX_PYATT SCA_JoystickSensor* self= static_cast(self_v); SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex); - return PyInt_FromLong(joy->GetHat(self->m_hat-1)); + return PyLong_FromSsize_t(joy->GetHat(self->m_hat-1)); } PyObject* SCA_JoystickSensor::pyattr_get_num_axis(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_JoystickSensor* self= static_cast(self_v); SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex); - return PyInt_FromLong( joy ? joy->GetNumberOfAxes() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfAxes() : 0 ); } PyObject* SCA_JoystickSensor::pyattr_get_num_buttons(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_JoystickSensor* self= static_cast(self_v); SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex); - return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfButtons() : 0 ); } PyObject* SCA_JoystickSensor::pyattr_get_num_hats(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_JoystickSensor* self= static_cast(self_v); SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex); - return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 ); + return PyLong_FromSsize_t( joy ? joy->GetNumberOfHats() : 0 ); } PyObject* SCA_JoystickSensor::pyattr_get_connected(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h index e6a1d2eef32..32f8ce567d2 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.h +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h @@ -106,8 +106,7 @@ public: short int joymode, int axis, int axisf,int prec, int button, - int hat, int hatf, bool allevents, - PyTypeObject* T=&Type ); + int hat, int hatf, bool allevents); virtual ~SCA_JoystickSensor(); virtual CValue* GetReplica(); @@ -123,10 +122,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* Joystick Index */ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetIndex); KX_PYMETHOD_DOC_O(SCA_JoystickSensor,SetIndex); diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp index f8ee8ed8b41..999e34dfa36 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp @@ -48,9 +48,8 @@ SCA_KeyboardSensor::SCA_KeyboardSensor(SCA_KeyboardManager* keybdmgr, bool bAllKeys, const STR_String& targetProp, const STR_String& toggleProp, - SCA_IObject* gameobj, - PyTypeObject* T ) - :SCA_ISensor(gameobj,keybdmgr,T), + SCA_IObject* gameobj) + :SCA_ISensor(gameobj,keybdmgr), m_pKeyboardMgr(keybdmgr), m_hotkey(hotkey), m_qual(qual), @@ -418,7 +417,7 @@ const char SCA_KeyboardSensor::GetKey_doc[] = PyObject* SCA_KeyboardSensor::PyGetKey() { ShowDeprecationWarning("getKey()", "the key property"); - return PyInt_FromLong(m_hotkey); + return PyLong_FromSsize_t(m_hotkey); } /** 2. SetKey: change the key to look at */ @@ -450,7 +449,7 @@ const char SCA_KeyboardSensor::GetHold1_doc[] = PyObject* SCA_KeyboardSensor::PyGetHold1() { ShowDeprecationWarning("getHold1()", "the hold1 property"); - return PyInt_FromLong(m_qual); + return PyLong_FromSsize_t(m_qual); } /** 4. SetHold1: change the first bucky bit */ @@ -482,7 +481,7 @@ const char SCA_KeyboardSensor::GetHold2_doc[] = PyObject* SCA_KeyboardSensor::PyGetHold2() { ShowDeprecationWarning("getHold2()", "the hold2 property"); - return PyInt_FromLong(m_qual2); + return PyLong_FromSsize_t(m_qual2); } /** 6. SetHold2: change the second bucky bit */ @@ -532,8 +531,8 @@ PyObject* SCA_KeyboardSensor::PyGetPressedKeys() || (inevent.m_status == SCA_InputEvent::KX_JUSTRELEASED)) { PyObject* keypair = PyList_New(2); - PyList_SET_ITEM(keypair,0,PyInt_FromLong(i)); - PyList_SET_ITEM(keypair,1,PyInt_FromLong(inevent.m_status)); + PyList_SET_ITEM(keypair,0,PyLong_FromSsize_t(i)); + PyList_SET_ITEM(keypair,1,PyLong_FromSsize_t(inevent.m_status)); PyList_SET_ITEM(resultlist,index,keypair); index++; @@ -572,8 +571,8 @@ PyObject* SCA_KeyboardSensor::PyGetCurrentlyPressedKeys() || (inevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED)) { PyObject* keypair = PyList_New(2); - PyList_SET_ITEM(keypair,0,PyInt_FromLong(i)); - PyList_SET_ITEM(keypair,1,PyInt_FromLong(inevent.m_status)); + PyList_SET_ITEM(keypair,0,PyLong_FromSsize_t(i)); + PyList_SET_ITEM(keypair,1,PyLong_FromSsize_t(inevent.m_status)); PyList_SET_ITEM(resultlist,index,keypair); index++; @@ -592,12 +591,12 @@ KX_PYMETHODDEF_DOC_O(SCA_KeyboardSensor, getKeyStatus, "getKeyStatus(keycode)\n" "\tGet the given key's status (KX_NO_INPUTSTATUS, KX_JUSTACTIVATED, KX_ACTIVE or KX_JUSTRELEASED).\n") { - if (!PyInt_Check(value)) { + if (!PyLong_Check(value)) { PyErr_SetString(PyExc_ValueError, "sensor.getKeyStatus(int): Keyboard Sensor, expected an int"); return NULL; } - int keycode = PyInt_AsLong(value); + int keycode = PyLong_AsSsize_t(value); if ((keycode < SCA_IInputDevice::KX_BEGINKEY) || (keycode > SCA_IInputDevice::KX_ENDKEY)){ @@ -607,7 +606,7 @@ KX_PYMETHODDEF_DOC_O(SCA_KeyboardSensor, getKeyStatus, SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice(); const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) keycode); - return PyInt_FromLong(inevent.m_status); + return PyLong_FromSsize_t(inevent.m_status); } /* ------------------------------------------------------------------------- */ @@ -631,19 +630,15 @@ PyTypeObject SCA_KeyboardSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_KeyboardSensor::Parents[] = { - &SCA_KeyboardSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_KeyboardSensor::Methods[] = { @@ -672,20 +667,6 @@ PyAttributeDef SCA_KeyboardSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_KeyboardSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_KeyboardSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_KeyboardSensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ISensor); -} - PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { @@ -701,8 +682,8 @@ PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBU if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS) { PyObject* keypair = PyList_New(2); - PyList_SET_ITEM(keypair,0,PyInt_FromLong(i)); - PyList_SET_ITEM(keypair,1,PyInt_FromLong(inevent.m_status)); + PyList_SET_ITEM(keypair,0,PyLong_FromSsize_t(i)); + PyList_SET_ITEM(keypair,1,PyLong_FromSsize_t(inevent.m_status)); PyList_Append(resultlist,keypair); } } diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.h b/source/gameengine/GameLogic/SCA_KeyboardSensor.h index 033225cd9be..3185b386d41 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.h +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.h @@ -94,8 +94,7 @@ public: bool bAllKeys, const STR_String& targetProp, const STR_String& toggleProp, - SCA_IObject* gameobj, - PyTypeObject* T=&Type ); + SCA_IObject* gameobj); virtual ~SCA_KeyboardSensor(); virtual CValue* GetReplica(); virtual void Init(); @@ -110,10 +109,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - //Deprecated functions -----> /** 1. GetKey : check which key this sensor looks at */ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetKey); diff --git a/source/gameengine/GameLogic/SCA_LogicManager.cpp b/source/gameengine/GameLogic/SCA_LogicManager.cpp index 83271288154..b782c6dfb93 100644 --- a/source/gameengine/GameLogic/SCA_LogicManager.cpp +++ b/source/gameengine/GameLogic/SCA_LogicManager.cpp @@ -307,6 +307,7 @@ void SCA_LogicManager::AddTriggeredController(SCA_IController* controller, SCA_I controller->Activate(m_triggeredControllerSet); // so that the controller knows which sensor has activited it // only needed for python controller + // Note that this is safe even if the controller is subclassed. if (controller->GetType() == &SCA_PythonController::Type) { SCA_PythonController* pythonController = (SCA_PythonController*)controller; diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp index c5e1c3c0441..49fa19dce38 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp +++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp @@ -49,9 +49,8 @@ SCA_MouseSensor::SCA_MouseSensor(SCA_MouseManager* eventmgr, int startx,int starty, short int mousemode, - SCA_IObject* gameobj, - PyTypeObject* T) - : SCA_ISensor(gameobj,eventmgr, T), + SCA_IObject* gameobj) + : SCA_ISensor(gameobj,eventmgr), m_pMouseMgr(eventmgr), m_x(startx), m_y(starty) @@ -254,7 +253,7 @@ const char SCA_MouseSensor::GetXPosition_doc[] = "\tpixels\n"; PyObject* SCA_MouseSensor::PyGetXPosition() { ShowDeprecationWarning("getXPosition()", "the position property"); - return PyInt_FromLong(m_x); + return PyLong_FromSsize_t(m_x); } /* get y position ---------------------------------------------------------- */ @@ -265,7 +264,7 @@ const char SCA_MouseSensor::GetYPosition_doc[] = "\tpixels\n"; PyObject* SCA_MouseSensor::PyGetYPosition() { ShowDeprecationWarning("getYPosition()", "the position property"); - return PyInt_FromLong(m_y); + return PyLong_FromSsize_t(m_y); } //<----- Deprecated @@ -273,9 +272,9 @@ KX_PYMETHODDEF_DOC_O(SCA_MouseSensor, getButtonStatus, "getButtonStatus(button)\n" "\tGet the given button's status (KX_INPUT_NONE, KX_INPUT_NONE, KX_INPUT_JUST_ACTIVATED, KX_INPUT_ACTIVE, KX_INPUT_JUST_RELEASED).\n") { - if (PyInt_Check(value)) + if (PyLong_Check(value)) { - int button = PyInt_AsLong(value); + int button = PyLong_AsSsize_t(value); if ((button < SCA_IInputDevice::KX_LEFTMOUSE) || (button > SCA_IInputDevice::KX_RIGHTMOUSE)){ @@ -285,7 +284,7 @@ KX_PYMETHODDEF_DOC_O(SCA_MouseSensor, getButtonStatus, SCA_IInputDevice* mousedev = m_pMouseMgr->GetInputDevice(); const SCA_InputEvent& event = mousedev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) button); - return PyInt_FromLong(event.m_status); + return PyLong_FromSsize_t(event.m_status); } Py_RETURN_NONE; @@ -312,19 +311,15 @@ PyTypeObject SCA_MouseSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_MouseSensor::Parents[] = { - &SCA_MouseSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_MouseSensor::Methods[] = { @@ -342,18 +337,4 @@ PyAttributeDef SCA_MouseSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_MouseSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_MouseSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_MouseSensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ISensor); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.h b/source/gameengine/GameLogic/SCA_MouseSensor.h index 6d6302b514a..47f0378bf69 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.h +++ b/source/gameengine/GameLogic/SCA_MouseSensor.h @@ -92,8 +92,7 @@ class SCA_MouseSensor : public SCA_ISensor SCA_MouseSensor(class SCA_MouseManager* keybdmgr, int startx,int starty, short int mousemode, - SCA_IObject* gameobj, - PyTypeObject* T=&Type ); + SCA_IObject* gameobj); virtual ~SCA_MouseSensor(); virtual CValue* GetReplica(); @@ -109,10 +108,6 @@ class SCA_MouseSensor : public SCA_ISensor /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - //Deprecated functions -----> /* read x-coordinate */ KX_PYMETHOD_DOC_NOARGS(SCA_MouseSensor,GetXPosition); diff --git a/source/gameengine/GameLogic/SCA_NANDController.cpp b/source/gameengine/GameLogic/SCA_NANDController.cpp index d27aea5e6f7..c00e5d6e617 100644 --- a/source/gameengine/GameLogic/SCA_NANDController.cpp +++ b/source/gameengine/GameLogic/SCA_NANDController.cpp @@ -42,10 +42,9 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_NANDController::SCA_NANDController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_NANDController::SCA_NANDController(SCA_IObject* gameobj) : - SCA_IController(gameobj,T) + SCA_IController(gameobj) { } @@ -116,19 +115,15 @@ PyTypeObject SCA_NANDController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_NANDController::Parents[] = { - &SCA_NANDController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_NANDController::Methods[] = { @@ -139,12 +134,4 @@ PyAttributeDef SCA_NANDController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_NANDController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_NANDController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_NANDController.h b/source/gameengine/GameLogic/SCA_NANDController.h index 0ae0ff19745..36a145e5f2b 100644 --- a/source/gameengine/GameLogic/SCA_NANDController.h +++ b/source/gameengine/GameLogic/SCA_NANDController.h @@ -39,7 +39,7 @@ class SCA_NANDController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_NANDController(SCA_IObject* gameobj,PyTypeObject* T=&Type); + SCA_NANDController(SCA_IObject* gameobj); virtual ~SCA_NANDController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); @@ -47,10 +47,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_NANDCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_NORController.cpp b/source/gameengine/GameLogic/SCA_NORController.cpp index 6c9141636b2..9762d44fd5d 100644 --- a/source/gameengine/GameLogic/SCA_NORController.cpp +++ b/source/gameengine/GameLogic/SCA_NORController.cpp @@ -42,10 +42,9 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_NORController::SCA_NORController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_NORController::SCA_NORController(SCA_IObject* gameobj) : - SCA_IController(gameobj,T) + SCA_IController(gameobj) { } @@ -116,19 +115,15 @@ PyTypeObject SCA_NORController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_NORController::Parents[] = { - &SCA_NORController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_NORController::Methods[] = { @@ -139,12 +134,4 @@ PyAttributeDef SCA_NORController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_NORController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_NORController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_NORController.h b/source/gameengine/GameLogic/SCA_NORController.h index 06cbb70a489..b96232375d6 100644 --- a/source/gameengine/GameLogic/SCA_NORController.h +++ b/source/gameengine/GameLogic/SCA_NORController.h @@ -39,18 +39,10 @@ class SCA_NORController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_NORController(SCA_IObject* gameobj,PyTypeObject* T=&Type); + SCA_NORController(SCA_IObject* gameobj); virtual ~SCA_NORController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_NORCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_ORController.cpp b/source/gameengine/GameLogic/SCA_ORController.cpp index 42c0a67d657..a526dd8353c 100644 --- a/source/gameengine/GameLogic/SCA_ORController.cpp +++ b/source/gameengine/GameLogic/SCA_ORController.cpp @@ -42,9 +42,8 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_ORController::SCA_ORController(SCA_IObject* gameobj, - PyTypeObject* T) - :SCA_IController(gameobj, T) +SCA_ORController::SCA_ORController(SCA_IObject* gameobj) + :SCA_IController(gameobj) { } @@ -110,19 +109,15 @@ PyTypeObject SCA_ORController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_ORController::Parents[] = { - &SCA_ORController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_ORController::Methods[] = { @@ -133,13 +128,4 @@ PyAttributeDef SCA_ORController::Attributes[] = { { NULL } //Sentinel }; - -PyObject* SCA_ORController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_ORController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ORController.h b/source/gameengine/GameLogic/SCA_ORController.h index 66f772c739e..09d31a85190 100644 --- a/source/gameengine/GameLogic/SCA_ORController.h +++ b/source/gameengine/GameLogic/SCA_ORController.h @@ -39,18 +39,11 @@ class SCA_ORController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_ORController(SCA_IObject* gameobj, PyTypeObject* T=&Type); + SCA_ORController(SCA_IObject* gameobj); virtual ~SCA_ORController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); }; #endif //__KX_ORCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp index 4faa4b55d4a..215e30eceaf 100644 --- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp +++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp @@ -42,8 +42,8 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_PropertyActuator::SCA_PropertyActuator(SCA_IObject* gameobj,SCA_IObject* sourceObj,const STR_String& propname,const STR_String& expr,int acttype,PyTypeObject* T ) - : SCA_IActuator(gameobj,T), +SCA_PropertyActuator::SCA_PropertyActuator(SCA_IObject* gameobj,SCA_IObject* sourceObj,const STR_String& propname,const STR_String& expr,int acttype) + : SCA_IActuator(gameobj), m_type(acttype), m_propname(propname), m_exprtxt(expr), @@ -244,19 +244,15 @@ PyTypeObject SCA_PropertyActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_PropertyActuator::Parents[] = { - &SCA_PropertyActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_PropertyActuator::Methods[] = { @@ -276,18 +272,6 @@ PyAttributeDef SCA_PropertyActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_PropertyActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* SCA_PropertyActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int SCA_PropertyActuator::py_setattro(PyObject *attr, PyObject *value) { - py_setattro_up(SCA_IActuator); -} - /* 1. setProperty */ const char SCA_PropertyActuator::SetProperty_doc[] = "setProperty(name)\n" @@ -322,7 +306,7 @@ const char SCA_PropertyActuator::GetProperty_doc[] = PyObject* SCA_PropertyActuator::PyGetProperty(PyObject* args, PyObject* kwds) { ShowDeprecationWarning("getProperty()", "the 'propName' property"); - return PyString_FromString(m_propname); + return PyUnicode_FromString(m_propname); } /* 3. setValue */ @@ -352,7 +336,7 @@ const char SCA_PropertyActuator::GetValue_doc[] = PyObject* SCA_PropertyActuator::PyGetValue(PyObject* args, PyObject* kwds) { ShowDeprecationWarning("getValue()", "the value property"); - return PyString_FromString(m_exprtxt); + return PyUnicode_FromString(m_exprtxt); } /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.h b/source/gameengine/GameLogic/SCA_PropertyActuator.h index a8df08dfc6e..8fb2e7a7bc5 100644 --- a/source/gameengine/GameLogic/SCA_PropertyActuator.h +++ b/source/gameengine/GameLogic/SCA_PropertyActuator.h @@ -64,9 +64,7 @@ public: SCA_IObject* sourceObj, const STR_String& propname, const STR_String& expr, - int acttype, - PyTypeObject* T=&Type - ); + int acttype); ~SCA_PropertyActuator(); @@ -86,10 +84,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // python wrapped methods KX_PYMETHOD_DOC(SCA_PropertyActuator,SetProperty); KX_PYMETHOD_DOC(SCA_PropertyActuator,GetProperty); diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp index 3b343af3cba..6d2e1a0aca5 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp +++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp @@ -48,9 +48,8 @@ SCA_PropertySensor::SCA_PropertySensor(SCA_EventManager* eventmgr, const STR_String& propname, const STR_String& propval, const STR_String& propmaxval, - KX_PROPSENSOR_TYPE checktype, - PyTypeObject* T ) - : SCA_ISensor(gameobj,eventmgr,T), + KX_PROPSENSOR_TYPE checktype) + : SCA_ISensor(gameobj,eventmgr), m_checktype(checktype), m_checkpropval(propval), m_checkpropmaxval(propmaxval), @@ -319,19 +318,15 @@ PyTypeObject SCA_PropertySensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_PropertySensor::Parents[] = { - &SCA_PropertySensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_PropertySensor::Methods[] = { @@ -353,19 +348,6 @@ PyAttributeDef SCA_PropertySensor::Attributes[] = { { NULL } //Sentinel }; - -PyObject* SCA_PropertySensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_PropertySensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_PropertySensor::py_setattro(PyObject *attr, PyObject *value) { - py_setattro_up(SCA_ISensor); -} - /* 1. getType */ const char SCA_PropertySensor::GetType_doc[] = "getType()\n" @@ -373,7 +355,7 @@ const char SCA_PropertySensor::GetType_doc[] = PyObject* SCA_PropertySensor::PyGetType() { ShowDeprecationWarning("getType()", "the mode property"); - return PyInt_FromLong(m_checktype); + return PyLong_FromSsize_t(m_checktype); } /* 2. setType */ @@ -407,7 +389,7 @@ const char SCA_PropertySensor::GetProperty_doc[] = PyObject* SCA_PropertySensor::PyGetProperty() { ShowDeprecationWarning("getProperty()", "the 'propName' property"); - return PyString_FromString(m_checkpropname); + return PyUnicode_FromString(m_checkpropname); } /* 4. setProperty */ @@ -444,7 +426,7 @@ const char SCA_PropertySensor::GetValue_doc[] = PyObject* SCA_PropertySensor::PyGetValue() { ShowDeprecationWarning("getValue()", "the value property"); - return PyString_FromString(m_checkpropval); + return PyUnicode_FromString(m_checkpropval); } /* 6. setValue */ diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.h b/source/gameengine/GameLogic/SCA_PropertySensor.h index 538ecd65949..3513fcdf5ae 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.h +++ b/source/gameengine/GameLogic/SCA_PropertySensor.h @@ -67,8 +67,7 @@ public: const STR_String& propname, const STR_String& propval, const STR_String& propmaxval, - KX_PROPSENSOR_TYPE checktype, - PyTypeObject* T=&Type ); + KX_PROPSENSOR_TYPE checktype); /** * For property sensor, it is used to release the pre-calculated expression @@ -89,10 +88,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* 1. getType */ KX_PYMETHOD_DOC_NOARGS(SCA_PropertySensor,GetType); /* 2. setType */ diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp index 80e4f54c9c5..ffd95f00699 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.cpp +++ b/source/gameengine/GameLogic/SCA_PythonController.cpp @@ -47,10 +47,8 @@ SCA_PythonController* SCA_PythonController::m_sCurrentController = NULL; -SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, - int mode, - PyTypeObject* T) - : SCA_IController(gameobj, T), +SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode) + : SCA_IController(gameobj), m_bytecode(NULL), m_function(NULL), m_function_argc(0), @@ -150,7 +148,7 @@ void SCA_PythonController::SetDictionary(PyObject* pythondictionary) /* Without __file__ set the sys.argv[0] is used for the filename * which ends up with lines from the blender binary being printed in the console */ - PyDict_SetItemString(m_pythondictionary, "__file__", PyString_FromString(m_scriptName.Ptr())); + PyDict_SetItemString(m_pythondictionary, "__file__", PyUnicode_FromString(m_scriptName.Ptr())); } @@ -180,16 +178,16 @@ SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value) std::vector lacts = m_sCurrentController->GetLinkedActuators(); std::vector::iterator it; - if (PyString_Check(value)) { + if (PyUnicode_Check(value)) { /* get the actuator from the name */ - char *name= PyString_AsString(value); + char *name= _PyUnicode_AsString(value); for(it = lacts.begin(); it!= lacts.end(); ++it) { if( name == (*it)->GetName() ) { return *it; } } } - else if (BGE_PROXY_CHECK_TYPE(value)) { + else if (PyObject_TypeCheck(value, &SCA_IActuator::Type)) { PyObjectPlus *value_plus= BGE_PROXY_REF(value); for(it = lacts.begin(); it!= lacts.end(); ++it) { if( static_cast(value_plus) == (*it) ) { @@ -200,7 +198,7 @@ SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value) /* set the exception */ PyObject *value_str = PyObject_Repr(value); /* new ref */ - PyErr_Format(PyExc_ValueError, "'%s' not in this python controllers actuator list", PyString_AsString(value_str)); + PyErr_Format(PyExc_ValueError, "'%s' not in this python controllers actuator list", _PyUnicode_AsString(value_str)); Py_DECREF(value_str); return false; @@ -245,19 +243,17 @@ PyTypeObject SCA_PythonController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_IController::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject SCA_PythonController::Parents[] = { - &SCA_PythonController::Type, - &SCA_IController::Type, - &CValue::Type, - NULL -}; PyMethodDef SCA_PythonController::Methods[] = { {"activate", (PyCFunction) SCA_PythonController::sPyActivate, METH_O}, {"deactivate", (PyCFunction) SCA_PythonController::sPyDeActivate, METH_O}, @@ -490,22 +486,6 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr) m_sCurrentController = NULL; } - - -PyObject* SCA_PythonController::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IController); -} - -PyObject* SCA_PythonController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - -int SCA_PythonController::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IController); -} - PyObject* SCA_PythonController::PyActivate(PyObject *value) { if(m_sCurrentController != this) { @@ -540,13 +520,13 @@ PyObject* SCA_PythonController::PyDeActivate(PyObject *value) PyObject* SCA_PythonController::PyGetScript() { ShowDeprecationWarning("getScript()", "the script property"); - return PyString_FromString(m_scriptText); + return PyUnicode_FromString(m_scriptText); } /* 2. setScript */ PyObject* SCA_PythonController::PySetScript(PyObject* value) { - char *scriptArg = PyString_AsString(value); + char *scriptArg = _PyUnicode_AsString(value); ShowDeprecationWarning("setScript()", "the script property"); @@ -565,15 +545,20 @@ PyObject* SCA_PythonController::PySetScript(PyObject* value) PyObject* SCA_PythonController::pyattr_get_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { + //SCA_PythonController* self= static_cast(static_cast(static_cast(static_cast(static_cast(self_v))))); + // static_cast(dynamic_cast(obj)) - static_cast(obj) + SCA_PythonController* self= static_cast(self_v); - return PyString_FromString(self->m_scriptText); + return PyUnicode_FromString(self->m_scriptText); } + + int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { SCA_PythonController* self= static_cast(self_v); - char *scriptArg = PyString_AsString(value); + char *scriptArg = _PyUnicode_AsString(value); if (scriptArg==NULL) { PyErr_SetString(PyExc_TypeError, "controller.script = string: Python Controller, expected a string script text"); diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h index 0c2af79c3a3..9311b3f355e 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.h +++ b/source/gameengine/GameLogic/SCA_PythonController.h @@ -72,7 +72,7 @@ class SCA_PythonController : public SCA_IController //virtual CValue* AddRef(); //virtual int Release(); // Release a reference to this value (when reference count reaches 0, the value is removed from the heap) - SCA_PythonController(SCA_IObject* gameobj, int mode, PyTypeObject* T = &Type); + SCA_PythonController(SCA_IObject* gameobj, int mode); virtual ~SCA_PythonController(); virtual CValue* GetReplica(); @@ -96,10 +96,6 @@ class SCA_PythonController : public SCA_IController static PyObject* sPyAddActiveActuator(PyObject* self, PyObject* args); static SCA_IActuator* LinkedActuatorFromPy(PyObject *value); - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); KX_PYMETHOD_O(SCA_PythonController,Activate); diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp index a722590dd10..e903d10f9a5 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp +++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp @@ -50,9 +50,8 @@ SCA_RandomActuator::SCA_RandomActuator(SCA_IObject *gameobj, SCA_RandomActuator::KX_RANDOMACT_MODE mode, float para1, float para2, - const STR_String &propName, - PyTypeObject* T) - : SCA_IActuator(gameobj, T), + const STR_String &propName) + : SCA_IActuator(gameobj), m_propname(propName), m_parameter1(para1), m_parameter2(para2), @@ -332,19 +331,15 @@ PyTypeObject SCA_RandomActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_RandomActuator::Parents[] = { - &SCA_RandomActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_RandomActuator::Methods[] = { @@ -384,14 +379,14 @@ PyAttributeDef SCA_RandomActuator::Attributes[] = { PyObject* SCA_RandomActuator::pyattr_get_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { SCA_RandomActuator* act = static_cast(self); - return PyInt_FromLong(act->m_base->GetSeed()); + return PyLong_FromSsize_t(act->m_base->GetSeed()); } int SCA_RandomActuator::pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { SCA_RandomActuator* act = static_cast(self); - if (PyInt_Check(value)) { - int ival = PyInt_AsLong(value); + if (PyLong_Check(value)) { + int ival = PyLong_AsSsize_t(value); act->m_base->SetSeed(ival); return PY_SET_ATTR_SUCCESS; } else { @@ -400,19 +395,6 @@ int SCA_RandomActuator::pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_ } } -PyObject* SCA_RandomActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* SCA_RandomActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int SCA_RandomActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - /* 1. setSeed */ const char SCA_RandomActuator::SetSeed_doc[] = "setSeed(seed)\n" @@ -439,7 +421,7 @@ const char SCA_RandomActuator::GetSeed_doc[] = PyObject* SCA_RandomActuator::PyGetSeed() { ShowDeprecationWarning("getSeed()", "the seed property"); - return PyInt_FromLong(m_base->GetSeed()); + return PyLong_FromSsize_t(m_base->GetSeed()); } /* 4. getPara1 */ @@ -473,7 +455,7 @@ const char SCA_RandomActuator::GetDistribution_doc[] = PyObject* SCA_RandomActuator::PyGetDistribution() { ShowDeprecationWarning("getDistribution()", "the distribution property"); - return PyInt_FromLong(m_distribution); + return PyLong_FromSsize_t(m_distribution); } /* 9. setProperty */ @@ -508,7 +490,7 @@ const char SCA_RandomActuator::GetProperty_doc[] = PyObject* SCA_RandomActuator::PyGetProperty() { ShowDeprecationWarning("getProperty()", "the 'propName' property"); - return PyString_FromString(m_propname); + return PyUnicode_FromString(m_propname); } /* 11. setBoolConst */ diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.h b/source/gameengine/GameLogic/SCA_RandomActuator.h index 59863589b60..c7d3fe21217 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.h +++ b/source/gameengine/GameLogic/SCA_RandomActuator.h @@ -85,8 +85,7 @@ class SCA_RandomActuator : public SCA_IActuator KX_RANDOMACT_MODE mode, float para1, float para2, - const STR_String &propName, - PyTypeObject* T=&Type); + const STR_String &propName); virtual ~SCA_RandomActuator(); virtual bool Update(); @@ -97,10 +96,6 @@ class SCA_RandomActuator : public SCA_IActuator /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - static PyObject* pyattr_get_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp index d5cbeef01ae..e036a77707e 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp +++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp @@ -46,9 +46,8 @@ SCA_RandomSensor::SCA_RandomSensor(SCA_EventManager* eventmgr, SCA_IObject* gameobj, - int startseed, - PyTypeObject* T) - : SCA_ISensor(gameobj,eventmgr, T) + int startseed) + : SCA_ISensor(gameobj,eventmgr) { m_basegenerator = new SCA_RandomNumberGenerator(startseed); Init(); @@ -147,19 +146,15 @@ PyTypeObject SCA_RandomSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_RandomSensor::Parents[] = { - &SCA_RandomSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_RandomSensor::Methods[] = { @@ -177,19 +172,6 @@ PyAttributeDef SCA_RandomSensor::Attributes[] = { {NULL} //Sentinel }; -PyObject* SCA_RandomSensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* SCA_RandomSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int SCA_RandomSensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ISensor); -} - /* 1. setSeed */ const char SCA_RandomSensor::SetSeed_doc[] = "setSeed(seed)\n" @@ -216,7 +198,7 @@ const char SCA_RandomSensor::GetSeed_doc[] = "\tequal series.\n"; PyObject* SCA_RandomSensor::PyGetSeed() { ShowDeprecationWarning("getSeed()", "the seed property"); - return PyInt_FromLong(m_basegenerator->GetSeed()); + return PyLong_FromSsize_t(m_basegenerator->GetSeed()); } /* 3. getLastDraw */ @@ -225,24 +207,24 @@ const char SCA_RandomSensor::GetLastDraw_doc[] = "\tReturn the last value that was drawn.\n"; PyObject* SCA_RandomSensor::PyGetLastDraw() { ShowDeprecationWarning("getLastDraw()", "the lastDraw property"); - return PyInt_FromLong(m_lastdraw); + return PyLong_FromSsize_t(m_lastdraw); } PyObject* SCA_RandomSensor::pyattr_get_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { SCA_RandomSensor* self= static_cast(self_v); - return PyInt_FromLong(self->m_basegenerator->GetSeed()); + return PyLong_FromSsize_t(self->m_basegenerator->GetSeed()); } int SCA_RandomSensor::pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { SCA_RandomSensor* self= static_cast(self_v); - if (!PyInt_Check(value)) { + if (!PyLong_Check(value)) { PyErr_SetString(PyExc_TypeError, "sensor.seed = int: Random Sensor, expected an integer"); return PY_SET_ATTR_FAIL; } - self->m_basegenerator->SetSeed(PyInt_AsLong(value)); + self->m_basegenerator->SetSeed(PyLong_AsSsize_t(value)); return PY_SET_ATTR_SUCCESS; } diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.h b/source/gameengine/GameLogic/SCA_RandomSensor.h index b2bf2440966..5e66c36cccf 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.h +++ b/source/gameengine/GameLogic/SCA_RandomSensor.h @@ -48,8 +48,7 @@ class SCA_RandomSensor : public SCA_ISensor public: SCA_RandomSensor(class SCA_EventManager* rndmgr, SCA_IObject* gameobj, - int startseed, - PyTypeObject* T=&Type); + int startseed); virtual ~SCA_RandomSensor(); virtual CValue* GetReplica(); virtual void ProcessReplica(); @@ -61,10 +60,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* 1. setSeed */ KX_PYMETHOD_DOC_VARARGS(SCA_RandomSensor,SetSeed); /* 2. getSeed */ diff --git a/source/gameengine/GameLogic/SCA_XNORController.cpp b/source/gameengine/GameLogic/SCA_XNORController.cpp index aee8e26c21a..527adc70cc6 100644 --- a/source/gameengine/GameLogic/SCA_XNORController.cpp +++ b/source/gameengine/GameLogic/SCA_XNORController.cpp @@ -42,10 +42,9 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_XNORController::SCA_XNORController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_XNORController::SCA_XNORController(SCA_IObject* gameobj) : - SCA_IController(gameobj,T) + SCA_IController(gameobj) { } @@ -120,19 +119,15 @@ PyTypeObject SCA_XNORController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_XNORController::Parents[] = { - &SCA_XNORController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_XNORController::Methods[] = { @@ -143,12 +138,4 @@ PyAttributeDef SCA_XNORController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_XNORController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_XNORController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_XNORController.h b/source/gameengine/GameLogic/SCA_XNORController.h index 4aad5763cb0..18e77fae665 100644 --- a/source/gameengine/GameLogic/SCA_XNORController.h +++ b/source/gameengine/GameLogic/SCA_XNORController.h @@ -39,7 +39,7 @@ class SCA_XNORController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_XNORController(SCA_IObject* gameobj,PyTypeObject* T=&Type); + SCA_XNORController(SCA_IObject* gameobj); virtual ~SCA_XNORController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); @@ -48,9 +48,6 @@ public: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_XNORCONTROLLER diff --git a/source/gameengine/GameLogic/SCA_XORController.cpp b/source/gameengine/GameLogic/SCA_XORController.cpp index 5afb3a750f5..c0916224fe6 100644 --- a/source/gameengine/GameLogic/SCA_XORController.cpp +++ b/source/gameengine/GameLogic/SCA_XORController.cpp @@ -42,10 +42,9 @@ /* Native functions */ /* ------------------------------------------------------------------------- */ -SCA_XORController::SCA_XORController(SCA_IObject* gameobj, - PyTypeObject* T) +SCA_XORController::SCA_XORController(SCA_IObject* gameobj) : - SCA_IController(gameobj,T) + SCA_IController(gameobj) { } @@ -120,19 +119,15 @@ PyTypeObject SCA_XORController::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject SCA_XORController::Parents[] = { - &SCA_XORController::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IController::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef SCA_XORController::Methods[] = { @@ -143,12 +138,4 @@ PyAttributeDef SCA_XORController::Attributes[] = { { NULL } //Sentinel }; -PyObject* SCA_XORController::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IController); -} - -PyObject* SCA_XORController::py_getattro_dict() { - py_getattro_dict_up(SCA_IController); -} - /* eof */ diff --git a/source/gameengine/GameLogic/SCA_XORController.h b/source/gameengine/GameLogic/SCA_XORController.h index feb9f2ed07c..2607a533661 100644 --- a/source/gameengine/GameLogic/SCA_XORController.h +++ b/source/gameengine/GameLogic/SCA_XORController.h @@ -39,18 +39,10 @@ class SCA_XORController : public SCA_IController Py_Header; //virtual void Trigger(class SCA_LogicManager* logicmgr); public: - SCA_XORController(SCA_IObject* gameobj,PyTypeObject* T=&Type); + SCA_XORController(SCA_IObject* gameobj); virtual ~SCA_XORController(); virtual CValue* GetReplica(); virtual void Trigger(SCA_LogicManager* logicmgr); - - /* --------------------------------------------------------------------- */ - /* Python interface ---------------------------------------------------- */ - /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - }; #endif //__KX_XORCONTROLLER diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp index c5c517c8a65..8bde5dd3a51 100644 --- a/source/gameengine/Ketsji/BL_Shader.cpp +++ b/source/gameengine/Ketsji/BL_Shader.cpp @@ -113,8 +113,8 @@ bool BL_Shader::Ok()const return (mShader !=0 && mOk && mUse); } -BL_Shader::BL_Shader(PyTypeObject *T) -: PyObjectPlus(T), +BL_Shader::BL_Shader() +: PyObjectPlus(), mShader(0), mPass(1), mOk(0), @@ -728,17 +728,6 @@ void BL_Shader::SetUniform(int uniform, const int* val, int len) } } - -PyObject* BL_Shader::py_getattro(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -PyObject* BL_Shader::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - - PyMethodDef BL_Shader::Methods[] = { // creation @@ -792,21 +781,17 @@ PyTypeObject BL_Shader::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; - -PyParentObject BL_Shader::Parents[] = { - &BL_Shader::Type, - &PyObjectPlus::Type, - NULL -}; - - KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProgram)" ) { if(mShader !=0 && mOk ) @@ -848,17 +833,17 @@ KX_PYMETHODDEF_DOC( BL_Shader, delSource, "delSource( )" ) KX_PYMETHODDEF_DOC( BL_Shader, isValid, "isValid()" ) { - return PyInt_FromLong( ( mShader !=0 && mOk ) ); + return PyLong_FromSsize_t( ( mShader !=0 && mOk ) ); } KX_PYMETHODDEF_DOC( BL_Shader, getVertexProg ,"getVertexProg( )" ) { - return PyString_FromString(vertProg?vertProg:""); + return PyUnicode_FromString(vertProg?vertProg:""); } KX_PYMETHODDEF_DOC( BL_Shader, getFragmentProg ,"getFragmentProg( )" ) { - return PyString_FromString(fragProg?fragProg:""); + return PyUnicode_FromString(fragProg?fragProg:""); } KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()") @@ -1223,7 +1208,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( uniform_name, (list2 for(unsigned int i=0; (i // 1. SetToPropName PyObject* KX_NetworkMessageActuator::PySetToPropName( @@ -240,4 +223,4 @@ PyObject* KX_NetworkMessageActuator::PySetBody( Py_RETURN_NONE; } -// <----- Deprecated \ No newline at end of file +// <----- Deprecated diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h index cf92fd46fe0..b4f55f2a466 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h @@ -50,8 +50,7 @@ public: const STR_String &toPropName, const STR_String &subject, int bodyType, - const STR_String &body, - PyTypeObject* T=&Type); + const STR_String &body); virtual ~KX_NetworkMessageActuator(); virtual bool Update(); @@ -61,10 +60,6 @@ public: /* Python interface ------------------------------------------- */ /* ------------------------------------------------------------ */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // Deprecated -----> KX_PYMETHOD(KX_NetworkMessageActuator, SetToPropName); KX_PYMETHOD(KX_NetworkMessageActuator, SetSubject); diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp index 8ddcd87b66f..78dda1f6db7 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp @@ -50,10 +50,9 @@ KX_NetworkMessageSensor::KX_NetworkMessageSensor( class KX_NetworkEventManager* eventmgr, // our eventmanager class NG_NetworkScene *NetworkScene, // our scene SCA_IObject* gameobj, // the sensor controlling object - const STR_String &subject, - PyTypeObject* T + const STR_String &subject ) : - SCA_ISensor(gameobj,eventmgr,T), + SCA_ISensor(gameobj,eventmgr), m_Networkeventmgr(eventmgr), m_NetworkScene(NetworkScene), m_subject(subject), @@ -182,19 +181,15 @@ PyTypeObject KX_NetworkMessageSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_NetworkMessageSensor::Parents[] = { - &KX_NetworkMessageSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_NetworkMessageSensor::Methods[] = { @@ -226,18 +221,6 @@ PyAttributeDef KX_NetworkMessageSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_NetworkMessageSensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* KX_NetworkMessageSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int KX_NetworkMessageSensor::py_setattro(PyObject *attr, PyObject *value) { - return SCA_ISensor::py_setattro(attr, value); -} - PyObject* KX_NetworkMessageSensor::pyattr_get_bodies(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_NetworkMessageSensor *self = static_cast(self_v); @@ -267,7 +250,7 @@ const char KX_NetworkMessageSensor::SetSubjectFilterText_doc[] = PyObject* KX_NetworkMessageSensor::PySetSubjectFilterText(PyObject* value) { ShowDeprecationWarning("setSubjectFilterText()", "subject"); - char* Subject = PyString_AsString(value); + char* Subject = _PyUnicode_AsString(value); if (Subject==NULL) { PyErr_SetString(PyExc_TypeError, "sensor.tsetSubjectFilterText(string): KX_NetworkMessageSensor, expected a string message"); return NULL; @@ -285,7 +268,7 @@ const char KX_NetworkMessageSensor::GetFrameMessageCount_doc[] = PyObject* KX_NetworkMessageSensor::PyGetFrameMessageCount() { ShowDeprecationWarning("getFrameMessageCount()", "frameMessageCount"); - return PyInt_FromLong(long(m_frame_message_count)); + return PyLong_FromSsize_t(long(m_frame_message_count)); } // 3. Get the message bodies @@ -311,7 +294,7 @@ const char KX_NetworkMessageSensor::GetSubject_doc[] = PyObject* KX_NetworkMessageSensor::PyGetSubject() { ShowDeprecationWarning("getSubject()", "subject"); - return PyString_FromString(m_subject ? m_subject : ""); + return PyUnicode_FromString(m_subject ? m_subject : ""); } // 5. Get the message subjects @@ -328,4 +311,4 @@ PyObject* KX_NetworkMessageSensor::PyGetSubjects() return (new CListValue())->NewProxy(true); } } -// <----- Deprecated \ No newline at end of file +// <----- Deprecated diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h index 53183f33826..ade87697303 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h @@ -57,8 +57,7 @@ public: KX_NetworkEventManager* eventmgr, // our eventmanager NG_NetworkScene *NetworkScene, // our scene SCA_IObject* gameobj, // the sensor controlling object - const STR_String &subject, - PyTypeObject* T=&Type + const STR_String &subject ); virtual ~KX_NetworkMessageSensor(); @@ -72,10 +71,6 @@ public: /* Python interface -------------------------------------------- */ /* ------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // Deprecated -----> KX_PYMETHOD_DOC_O(KX_NetworkMessageSensor, SetSubjectFilterText); KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetFrameMessageCount); diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index 30057fc039d..314becc702d 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -42,10 +42,8 @@ BL_BlenderShader *KX_BlenderMaterial::mLastBlenderShader = NULL; //static PyObject *gTextureDict = 0; -KX_BlenderMaterial::KX_BlenderMaterial( - PyTypeObject *T - ) -: PyObjectPlus(T), +KX_BlenderMaterial::KX_BlenderMaterial() +: PyObjectPlus(), RAS_IPolyMaterial(), mMaterial(NULL), mShader(0), @@ -813,36 +811,17 @@ PyTypeObject KX_BlenderMaterial::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; - -PyParentObject KX_BlenderMaterial::Parents[] = { - &KX_BlenderMaterial::Type, - &PyObjectPlus::Type, - NULL -}; - - -PyObject* KX_BlenderMaterial::py_getattro(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -PyObject* KX_BlenderMaterial::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - -int KX_BlenderMaterial::py_setattro(PyObject *attr, PyObject *pyvalue) -{ - return PyObjectPlus::py_setattro(attr, pyvalue); -} - - KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()") { if( !GLEW_ARB_fragment_shader) { @@ -912,7 +891,7 @@ void KX_BlenderMaterial::SetBlenderGLSLShader(int layer) KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getMaterialIndex, "getMaterialIndex()") { - return PyInt_FromLong( GetMaterialIndex() ); + return PyLong_FromSsize_t( GetMaterialIndex() ); } KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getTexture, "getTexture( index )" ) diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index b29f2df98db..1f5edc1d7d1 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -23,9 +23,7 @@ class KX_BlenderMaterial : public PyObjectPlus, public RAS_IPolyMaterial Py_Header; public: // -------------------------------- - KX_BlenderMaterial( - PyTypeObject* T=&Type - ); + KX_BlenderMaterial(); void Initialize( class KX_Scene* scene, BL_Material* mat, @@ -83,10 +81,7 @@ public: ); // -------------------------------- - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *pyvalue); - virtual PyObject* py_repr(void) { return PyString_FromString(mMaterial->matname.ReadPtr()); } + virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); } KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader ); KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex ); diff --git a/source/gameengine/Ketsji/KX_CDActuator.cpp b/source/gameengine/Ketsji/KX_CDActuator.cpp index 8511526fd5f..bfca81f45d9 100644 --- a/source/gameengine/Ketsji/KX_CDActuator.cpp +++ b/source/gameengine/Ketsji/KX_CDActuator.cpp @@ -48,9 +48,8 @@ KX_CDActuator::KX_CDActuator(SCA_IObject* gameobject, KX_CDACT_TYPE type, int track, short start, - short end, - PyTypeObject* T) - : SCA_IActuator(gameobject,T) + short end) + : SCA_IActuator(gameobject) { m_soundscene = soundscene; m_type = type; @@ -171,25 +170,17 @@ PyTypeObject KX_CDActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject KX_CDActuator::Parents[] = { - &KX_CDActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_CDActuator::Methods[] = { // Deprecated -----> {"setGain",(PyCFunction) KX_CDActuator::sPySetGain,METH_VARARGS,NULL}, @@ -217,22 +208,6 @@ int KX_CDActuator::pyattr_setGain(void *self, const struct KX_PYATTRIBUTE_DEF *a return PY_SET_ATTR_SUCCESS; } -PyObject* KX_CDActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_CDActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_CDActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - - - KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, startCD, "startCD()\n" "\tStarts the CD playing.\n") @@ -273,8 +248,8 @@ KX_PYMETHODDEF_DOC_O(KX_CDActuator, playTrack, "playTrack(trackNumber)\n" "\tPlays the track selected.\n") { - if (PyInt_Check(value)) { - int track = PyInt_AsLong(value); + if (PyLong_Check(value)) { + int track = PyLong_AsSsize_t(value); SND_CDObject::Instance()->SetPlaymode(SND_CD_TRACK); SND_CDObject::Instance()->SetTrack(track); SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY); diff --git a/source/gameengine/Ketsji/KX_CDActuator.h b/source/gameengine/Ketsji/KX_CDActuator.h index 2fd05ab72e5..b01ad73777e 100644 --- a/source/gameengine/Ketsji/KX_CDActuator.h +++ b/source/gameengine/Ketsji/KX_CDActuator.h @@ -68,8 +68,7 @@ public: KX_CDACT_TYPE type, int track, short start, - short end, - PyTypeObject* T=&Type); + short end); ~KX_CDActuator(); @@ -81,10 +80,6 @@ public: /* Python interface --------------------------------------------------- */ /* -------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // Deprecated -----> KX_PYMETHOD_VARARGS(KX_CDActuator,SetGain); KX_PYMETHOD_VARARGS(KX_CDActuator,GetGain); diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp index 40f6c99c03c..f762699f780 100644 --- a/source/gameengine/Ketsji/KX_Camera.cpp +++ b/source/gameengine/Ketsji/KX_Camera.cpp @@ -42,10 +42,9 @@ KX_Camera::KX_Camera(void* sgReplicationInfo, SG_Callbacks callbacks, const RAS_CameraData& camdata, bool frustum_culling, - bool delete_node, - PyTypeObject *T) + bool delete_node) : - KX_GameObject(sgReplicationInfo,callbacks,T), + KX_GameObject(sgReplicationInfo,callbacks), m_camdata(camdata), m_dirty(true), m_normalized(false), @@ -551,41 +550,19 @@ PyTypeObject KX_Camera::Type = { &KX_GameObject::Sequence, &KX_GameObject::Mapping, 0,0,0, - py_base_getattro, - py_base_setattro, + NULL, + NULL, 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, 0,0,0,0,0,0,0, - Methods + Methods, + 0, + 0, + &KX_GameObject::Type, + 0,0,0,0,0,0, + py_base_new }; - - - - - -PyParentObject KX_Camera::Parents[] = { - &KX_Camera::Type, - &KX_GameObject::Type, - &SCA_IObject::Type, - &CValue::Type, - NULL -}; - -PyObject* KX_Camera::py_getattro(PyObject *attr) -{ - py_getattro_up(KX_GameObject); -} - -PyObject* KX_Camera::py_getattro_dict() { - py_getattro_dict_up(KX_GameObject); -} - -int KX_Camera::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(KX_GameObject); -} - KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum, "sphereInsideFrustum(center, radius) -> Integer\n" "\treturns INSIDE, OUTSIDE or INTERSECT if the given sphere is\n" @@ -611,7 +588,7 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum, MT_Point3 center; if (PyVecTo(pycenter, center)) { - return PyInt_FromLong(SphereInsideFrustum(center, radius)); /* new ref */ + return PyLong_FromSsize_t(SphereInsideFrustum(center, radius)); /* new ref */ } } @@ -662,7 +639,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, boxInsideFrustum, return NULL; } - return PyInt_FromLong(BoxInsideFrustum(box)); /* new ref */ + return PyLong_FromSsize_t(BoxInsideFrustum(box)); /* new ref */ } KX_PYMETHODDEF_DOC_O(KX_Camera, pointInsideFrustum, @@ -684,7 +661,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, pointInsideFrustum, MT_Point3 point; if (PyVecTo(value, point)) { - return PyInt_FromLong(PointInsideFrustum(point)); /* new ref */ + return PyLong_FromSsize_t(PointInsideFrustum(point)); /* new ref */ } PyErr_SetString(PyExc_TypeError, "camera.pointInsideFrustum(point): KX_Camera, expected point argument."); @@ -952,11 +929,11 @@ PyObject* KX_Camera::pyattr_get_world_to_camera(void *self_v, const KX_PYATTRIBU PyObject* KX_Camera::pyattr_get_INSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) -{ return PyInt_FromLong(INSIDE); } +{ return PyLong_FromSsize_t(INSIDE); } PyObject* KX_Camera::pyattr_get_OUTSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) -{ return PyInt_FromLong(OUTSIDE); } +{ return PyLong_FromSsize_t(OUTSIDE); } PyObject* KX_Camera::pyattr_get_INTERSECT(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) -{ return PyInt_FromLong(INTERSECT); } +{ return PyLong_FromSsize_t(INTERSECT); } bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix) @@ -978,14 +955,14 @@ bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok } } - if (PyString_Check(value)) { - STR_String value_str = PyString_AsString(value); + if (PyUnicode_Check(value)) { + STR_String value_str = _PyUnicode_AsString(value); *object = KX_GetActiveScene()->FindCamera(value_str); if (*object) { return true; } else { - PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_Camera in this scene", error_prefix, PyString_AsString(value)); + PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_Camera in this scene", error_prefix, _PyUnicode_AsString(value)); return false; } } @@ -1142,7 +1119,7 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, getScreenRay, PyTuple_SET_ITEM(argValue, 0, PyObjectFrom(vect)); PyTuple_SET_ITEM(argValue, 1, PyFloat_FromDouble(dist)); if (propName) - PyTuple_SET_ITEM(argValue, 2, PyString_FromString(propName)); + PyTuple_SET_ITEM(argValue, 2, PyUnicode_FromString(propName)); PyObject* ret= this->PyrayCastTo(argValue,NULL); Py_DECREF(argValue); diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h index aef21cd91e4..74c8e6d4e4f 100644 --- a/source/gameengine/Ketsji/KX_Camera.h +++ b/source/gameengine/Ketsji/KX_Camera.h @@ -143,7 +143,7 @@ public: enum { INSIDE, INTERSECT, OUTSIDE } ; - KX_Camera(void* sgReplicationInfo,SG_Callbacks callbacks,const RAS_CameraData& camdata, bool frustum_culling = true, bool delete_node = false, PyTypeObject *T = &Type); + KX_Camera(void* sgReplicationInfo,SG_Callbacks callbacks,const RAS_CameraData& camdata, bool frustum_culling = true, bool delete_node = false); virtual ~KX_Camera(); /** @@ -265,6 +265,7 @@ public: */ int GetViewportTop() const; + virtual int GetGameObjectType() { return OBJ_CAMERA; } KX_PYMETHOD_DOC_VARARGS(KX_Camera, sphereInsideFrustum); KX_PYMETHOD_DOC_O(KX_Camera, boxInsideFrustum); @@ -282,10 +283,6 @@ public: KX_PYMETHOD_DOC_O(KX_Camera, getScreenPosition); KX_PYMETHOD_DOC_VARARGS(KX_Camera, getScreenVect); KX_PYMETHOD_DOC_VARARGS(KX_Camera, getScreenRay); - - virtual PyObject* py_getattro(PyObject *attr); /* lens, near, far, projection_matrix */ - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *pyvalue); static PyObject* pyattr_get_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp index f8557dac2c4..3d3b68ed85d 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.cpp +++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp @@ -56,10 +56,9 @@ KX_CameraActuator::KX_CameraActuator( float hght, float minhght, float maxhght, - bool xytog, - PyTypeObject* T + bool xytog ): - SCA_IActuator(gameobj, T), + SCA_IActuator(gameobj), m_ob (obj), m_height (hght), m_minHeight (minhght), @@ -385,19 +384,15 @@ PyTypeObject KX_CameraActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_CameraActuator::Parents[] = { - &KX_CameraActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_CameraActuator::Methods[] = { @@ -424,18 +419,6 @@ PyAttributeDef KX_CameraActuator::Attributes[] = { {NULL} }; -PyObject* KX_CameraActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_CameraActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_CameraActuator::py_setattro(PyObject *attr, PyObject* value) { - py_setattro_up(SCA_IActuator); -} - /* get obj ---------------------------------------------------------- */ const char KX_CameraActuator::GetObject_doc[] = "getObject(name_only = 1)\n" @@ -454,7 +437,7 @@ PyObject* KX_CameraActuator::PyGetObject(PyObject* args) Py_RETURN_NONE; if (ret_name_only) - return PyString_FromString(m_ob->GetName().ReadPtr()); + return PyUnicode_FromString(m_ob->GetName().ReadPtr()); else return m_ob->GetProxy(); } @@ -579,7 +562,7 @@ const char KX_CameraActuator::GetXY_doc[] = PyObject* KX_CameraActuator::PyGetXY() { ShowDeprecationWarning("getXY()", "the xy property"); - return PyInt_FromLong(m_x); + return PyLong_FromSsize_t(m_x); } PyObject* KX_CameraActuator::pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h index efa4e2f38d7..057c6fed770 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.h +++ b/source/gameengine/Ketsji/KX_CameraActuator.h @@ -91,9 +91,7 @@ private : float hght, float minhght, float maxhght, - bool xytog, - PyTypeObject* T=&Type - + bool xytog ); @@ -120,10 +118,6 @@ private : /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - /* set object to look at */ KX_PYMETHOD_DOC_O(KX_CameraActuator,SetObject); /* get current object */ diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp index bd03dea486b..d09eae647c8 100644 --- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp @@ -54,9 +54,8 @@ KX_ConstraintActuator::KX_ConstraintActuator(SCA_IObject *gameobj, int locrotxyz, int time, int option, - char *property, - PyTypeObject* T) : - SCA_IActuator(gameobj, T), + char *property) : + SCA_IActuator(gameobj), m_refDirVector(refDir), m_currentTime(0) { @@ -581,19 +580,15 @@ PyTypeObject KX_ConstraintActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_ConstraintActuator::Parents[] = { - &KX_ConstraintActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_ConstraintActuator::Methods[] = { @@ -639,21 +634,6 @@ PyAttributeDef KX_ConstraintActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_ConstraintActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_ConstraintActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_ConstraintActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - - int KX_ConstraintActuator::pyattr_check_direction(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { KX_ConstraintActuator* act = static_cast(self); @@ -691,7 +671,7 @@ const char KX_ConstraintActuator::GetDamp_doc[] = "\tReturns the damping parameter.\n"; PyObject* KX_ConstraintActuator::PyGetDamp(){ ShowDeprecationWarning("getDamp()", "the damp property"); - return PyInt_FromLong(m_posDampTime); + return PyLong_FromSsize_t(m_posDampTime); } /* 2. setRotDamp */ @@ -718,7 +698,7 @@ const char KX_ConstraintActuator::GetRotDamp_doc[] = "\tReturns the damping time for application of the constraint.\n"; PyObject* KX_ConstraintActuator::PyGetRotDamp(){ ShowDeprecationWarning("getRotDamp()", "the rotDamp property"); - return PyInt_FromLong(m_rotDampTime); + return PyLong_FromSsize_t(m_rotDampTime); } /* 2. setDirection */ @@ -791,7 +771,7 @@ const char KX_ConstraintActuator::GetOption_doc[] = "\tReturns the option parameter.\n"; PyObject* KX_ConstraintActuator::PyGetOption(){ ShowDeprecationWarning("getOption()", "the option property"); - return PyInt_FromLong(m_option); + return PyLong_FromSsize_t(m_option); } /* 2. setTime */ @@ -820,7 +800,7 @@ const char KX_ConstraintActuator::GetTime_doc[] = "\tReturns the time parameter.\n"; PyObject* KX_ConstraintActuator::PyGetTime(){ ShowDeprecationWarning("getTime()", "the time property"); - return PyInt_FromLong(m_activeTime); + return PyLong_FromSsize_t(m_activeTime); } /* 2. setProperty */ @@ -849,7 +829,7 @@ const char KX_ConstraintActuator::GetProperty_doc[] = "\tReturns the property parameter.\n"; PyObject* KX_ConstraintActuator::PyGetProperty(){ ShowDeprecationWarning("getProperty()", "the 'property' property"); - return PyString_FromString(m_property.Ptr()); + return PyUnicode_FromString(m_property.Ptr()); } /* 4. setDistance */ @@ -978,7 +958,7 @@ const char KX_ConstraintActuator::GetLimit_doc[] = "\tReturns the type of constraint.\n"; PyObject* KX_ConstraintActuator::PyGetLimit() { ShowDeprecationWarning("setLimit()", "the limit property"); - return PyInt_FromLong(m_locrot); + return PyLong_FromSsize_t(m_locrot); } /* eof */ diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.h b/source/gameengine/Ketsji/KX_ConstraintActuator.h index 40607b44947..677904aedc9 100644 --- a/source/gameengine/Ketsji/KX_ConstraintActuator.h +++ b/source/gameengine/Ketsji/KX_ConstraintActuator.h @@ -126,8 +126,7 @@ protected: int locrot, int time, int option, - char *property, - PyTypeObject* T=&Type); + char *property); virtual ~KX_ConstraintActuator(); virtual CValue* GetReplica() { KX_ConstraintActuator* replica = new KX_ConstraintActuator(*this); @@ -141,10 +140,6 @@ protected: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - static int pyattr_check_direction(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_check_min(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp index c5cf67af67d..ec7bb470235 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp @@ -38,8 +38,8 @@ KX_ConstraintWrapper::KX_ConstraintWrapper( PHY_ConstraintType ctype, int constraintId, - PHY_IPhysicsEnvironment* physenv,PyTypeObject *T) : - PyObjectPlus(T), + PHY_IPhysicsEnvironment* physenv) : + PyObjectPlus(), m_constraintId(constraintId), m_constraintType(ctype), m_physenv(physenv) @@ -51,7 +51,7 @@ KX_ConstraintWrapper::~KX_ConstraintWrapper() PyObject* KX_ConstraintWrapper::PyGetConstraintId() { - return PyInt_FromLong(m_constraintId); + return PyLong_FromSsize_t(m_constraintId); } @@ -99,37 +99,17 @@ PyTypeObject KX_ConstraintWrapper::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject KX_ConstraintWrapper::Parents[] = { - &KX_ConstraintWrapper::Type, - NULL -}; - -//here you can search for existing data members (like mass,friction etc.) -PyObject* KX_ConstraintWrapper::py_getattro(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -PyObject* KX_ConstraintWrapper::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - -int KX_ConstraintWrapper::py_setattro(PyObject *attr,PyObject* value) -{ - py_setattro_up(PyObjectPlus); -}; - - - - - PyMethodDef KX_ConstraintWrapper::Methods[] = { {"getConstraintId",(PyCFunction) KX_ConstraintWrapper::sPyGetConstraintId, METH_NOARGS}, {"setParam",(PyCFunction) KX_ConstraintWrapper::sPySetParam, METH_VARARGS}, diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h index 03813e0f167..74670944415 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h @@ -35,11 +35,8 @@ class KX_ConstraintWrapper : public PyObjectPlus { Py_Header; - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); public: - KX_ConstraintWrapper(PHY_ConstraintType ctype,int constraintId,class PHY_IPhysicsEnvironment* physenv,PyTypeObject *T = &Type); + KX_ConstraintWrapper(PHY_ConstraintType ctype,int constraintId,class PHY_IPhysicsEnvironment* physenv); virtual ~KX_ConstraintWrapper (); int getConstraintId() { return m_constraintId;}; diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp index 28bf12f5e87..560c7fa4bb4 100644 --- a/source/gameengine/Ketsji/KX_GameActuator.cpp +++ b/source/gameengine/Ketsji/KX_GameActuator.cpp @@ -49,9 +49,8 @@ KX_GameActuator::KX_GameActuator(SCA_IObject *gameobj, const STR_String& filename, const STR_String& loadinganimationname, KX_Scene* scene, - KX_KetsjiEngine* ketsjiengine, - PyTypeObject* T) - : SCA_IActuator(gameobj, T) + KX_KetsjiEngine* ketsjiengine) + : SCA_IActuator(gameobj) { m_mode = mode; m_filename = filename; @@ -224,26 +223,17 @@ PyTypeObject KX_GameActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject KX_GameActuator::Parents[] = -{ - &KX_GameActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_GameActuator::Methods[] = { // Deprecated -----> @@ -259,21 +249,6 @@ PyAttributeDef KX_GameActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_GameActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_GameActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_GameActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - - // Deprecated -----> /* getFile */ const char KX_GameActuator::GetFile_doc[] = @@ -282,7 +257,7 @@ const char KX_GameActuator::GetFile_doc[] = PyObject* KX_GameActuator::PyGetFile(PyObject* args, PyObject* kwds) { ShowDeprecationWarning("getFile()", "the fileName property"); - return PyString_FromString(m_filename); + return PyUnicode_FromString(m_filename); } /* setFile */ diff --git a/source/gameengine/Ketsji/KX_GameActuator.h b/source/gameengine/Ketsji/KX_GameActuator.h index b2b1d6ec2b9..cabbf827b40 100644 --- a/source/gameengine/Ketsji/KX_GameActuator.h +++ b/source/gameengine/Ketsji/KX_GameActuator.h @@ -65,8 +65,7 @@ protected: const STR_String& filename, const STR_String& loadinganimationname, KX_Scene* scene, - KX_KetsjiEngine* ketsjiEngine, - PyTypeObject* T=&Type); + KX_KetsjiEngine* ketsjiEngine); virtual ~KX_GameActuator(); virtual CValue* GetReplica(); @@ -77,10 +76,6 @@ protected: /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // Deprecated functions -----> KX_PYMETHOD_DOC(KX_GameActuator,GetFile); KX_PYMETHOD_DOC(KX_GameActuator,SetFile); diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index 577f767b475..bf80eec36d9 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -86,10 +86,8 @@ static MT_Matrix3x3 dummy_orientation = MT_Matrix3x3( 1.0, 0.0, 0.0, KX_GameObject::KX_GameObject( void* sgReplicationInfo, - SG_Callbacks callbacks, - PyTypeObject* T -) : - SCA_IObject(T), + SG_Callbacks callbacks) + : SCA_IObject(), m_bDyna(false), m_layer(0), m_pBlenderObject(NULL), @@ -1498,7 +1496,7 @@ PyObject* KX_GameObject::PyGetPosition() static PyObject *Map_GetItem(PyObject *self_v, PyObject *item) { KX_GameObject* self= static_castBGE_PROXY_REF(self_v); - const char *attr_str= PyString_AsString(item); + const char *attr_str= _PyUnicode_AsString(item); CValue* resultattr; PyObject* pyconvert; @@ -1532,7 +1530,7 @@ static PyObject *Map_GetItem(PyObject *self_v, PyObject *item) static int Map_SetItem(PyObject *self_v, PyObject *key, PyObject *val) { KX_GameObject* self= static_castBGE_PROXY_REF(self_v); - const char *attr_str= PyString_AsString(key); + const char *attr_str= _PyUnicode_AsString(key); if(attr_str==NULL) PyErr_Clear(); @@ -1564,7 +1562,7 @@ static int Map_SetItem(PyObject *self_v, PyObject *key, PyObject *val) int set= 0; /* as CValue */ - if(attr_str && BGE_PROXY_CHECK_TYPE(val)==0) /* dont allow GameObjects for eg to be assigned to CValue props */ + if(attr_str && PyObject_TypeCheck(val, &PyObjectPlus::Type)==0) /* dont allow GameObjects for eg to be assigned to CValue props */ { CValue* vallie = self->ConvertPythonToValue(val, ""); /* error unused */ @@ -1626,7 +1624,7 @@ static int Seq_Contains(PyObject *self_v, PyObject *value) return -1; } - if(PyString_Check(value) && self->GetProperty(PyString_AsString(value))) + if(PyUnicode_Check(value) && self->GetProperty(_PyUnicode_AsString(value))) return 1; if (self->m_attr_dict && PyDict_GetItem(self->m_attr_dict, value)) @@ -1674,30 +1672,23 @@ PyTypeObject KX_GameObject::Type = { &Sequence, &Mapping, 0,0,0, - py_base_getattro, - py_base_setattro, + NULL, + NULL, 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, 0,0,0,0,0,0,0, - Methods -}; - - - - - - -PyParentObject KX_GameObject::Parents[] = { - &KX_GameObject::Type, + Methods, + 0, + 0, &SCA_IObject::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyObject* KX_GameObject::pyattr_get_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_GameObject* self= static_cast(self_v); - return PyString_FromString(self->GetName().ReadPtr()); + return PyUnicode_FromString(self->GetName().ReadPtr()); } PyObject* KX_GameObject::pyattr_get_parent(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) @@ -1922,7 +1913,7 @@ PyObject* KX_GameObject::pyattr_get_localScaling(void *self_v, const KX_PYATTRIB #ifdef USE_MATHUTILS return newVectorObject_cb((PyObject *)self_v, 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_SCALE_LOCAL); #else - return PyObjectFrom(self->NodeGetLocalScale()); + return PyObjectFrom(self->NodeGetLocalScaling()); #endif } @@ -1970,13 +1961,13 @@ PyObject* KX_GameObject::pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF KX_GameObject* self= static_cast(self_v); int state = 0; state |= self->GetState(); - return PyInt_FromLong(state); + return PyLong_FromSsize_t(state); } int KX_GameObject::pyattr_set_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { KX_GameObject* self= static_cast(self_v); - int state_i = PyInt_AsLong(value); + int state_i = PyLong_AsSsize_t(value); unsigned int state = 0; if (state_i == -1 && PyErr_Occurred()) { @@ -2047,128 +2038,6 @@ PyObject* KX_GameObject::pyattr_get_attrDict(void *self_v, const KX_PYATTRIBUTE_ return self->m_attr_dict; } -/* We need these because the macros have a return in them */ -PyObject* KX_GameObject::py_getattro__internal(PyObject *attr) -{ - py_getattro_up(SCA_IObject); -} - -int KX_GameObject::py_setattro__internal(PyObject *attr, PyObject *value) // py_setattro method -{ - py_setattro_up(SCA_IObject); -} - - -PyObject* KX_GameObject::py_getattro(PyObject *attr) -{ - PyObject *object= py_getattro__internal(attr); - - if (object==NULL && m_attr_dict) - { - /* backup the exception incase the attr doesnt exist in the dict either */ - PyObject *err_type, *err_value, *err_tb; - PyErr_Fetch(&err_type, &err_value, &err_tb); - - object= PyDict_GetItem(m_attr_dict, attr); - if (object) { - Py_INCREF(object); - - PyErr_Clear(); - Py_XDECREF( err_type ); - Py_XDECREF( err_value ); - Py_XDECREF( err_tb ); - } - else { - PyErr_Restore(err_type, err_value, err_tb); /* use the error from the parent function */ - } - } - return object; -} - -PyObject* KX_GameObject::py_getattro_dict() { - //py_getattro_dict_up(SCA_IObject); - PyObject *dict= py_getattr_dict(SCA_IObject::py_getattro_dict(), Type.tp_dict); - if(dict==NULL) - return NULL; - - /* normally just return this but KX_GameObject has some more items */ - - - /* Not super fast getting as a list then making into dict keys but its only for dir() */ - PyObject *list= ConvertKeysToPython(); - if(list) - { - int i; - for(i=0; iGetUserData(); } - return PyInt_FromLong((long)physid); + return PyLong_FromSsize_t((long)physid); } PyObject* KX_GameObject::PyGetPropertyNames() @@ -3008,8 +2877,8 @@ PyObject* KX_GameObject::Pyget(PyObject *args) return NULL; - if(PyString_Check(key)) { - CValue *item = GetProperty(PyString_AsString(key)); + if(PyUnicode_Check(key)) { + CValue *item = GetProperty(_PyUnicode_AsString(key)); if (item) { ret = item->ConvertValueToPython(); if(ret) @@ -3078,13 +2947,13 @@ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py } } - if (PyString_Check(value)) { - *object = (KX_GameObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetGameObjectByName(STR_String( PyString_AsString(value) )); + if (PyUnicode_Check(value)) { + *object = (KX_GameObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetGameObjectByName(STR_String( _PyUnicode_AsString(value) )); if (*object) { return true; } else { - PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_GameObject in this scene", error_prefix, PyString_AsString(value)); + PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_GameObject in this scene", error_prefix, _PyUnicode_AsString(value)); return false; } } diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index 8fa2b3180ef..40f05dddada 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -185,8 +185,7 @@ public: KX_GameObject( void* sgReplicationInfo, - SG_Callbacks callbacks, - PyTypeObject* T=&Type + SG_Callbacks callbacks ); virtual @@ -804,22 +803,10 @@ public: /** * @section Python interface functions. */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); // py_setattro method - virtual int py_delattro(PyObject *attr); virtual PyObject* py_repr(void) { - return PyString_FromString(GetName().ReadPtr()); + return PyUnicode_FromString(GetName().ReadPtr()); } - - - /* quite annoying that we need these but the bloody - * py_getattro_up and py_setattro_up macro's have a returns in them! */ - PyObject* py_getattro__internal(PyObject *attr); - int py_setattro__internal(PyObject *attr, PyObject *value); // py_setattro method - KX_PYMETHOD_NOARGS(KX_GameObject,GetPosition); KX_PYMETHOD_O(KX_GameObject,SetPosition); diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp index 3ec0598ac03..73a370a1681 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.cpp +++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp @@ -70,9 +70,8 @@ KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj, int acttype, bool ipo_as_force, bool ipo_add, - bool ipo_local, - PyTypeObject* T) - : SCA_IActuator(gameobj,T), + bool ipo_local) + : SCA_IActuator(gameobj), m_bNegativeEvent(false), m_startframe (starttime), m_endframe(endtime), @@ -429,19 +428,15 @@ PyTypeObject KX_IpoActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_IpoActuator::Parents[] = { - &KX_IpoActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_IpoActuator::Methods[] = { @@ -477,18 +472,6 @@ PyAttributeDef KX_IpoActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_IpoActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_IpoActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_IpoActuator::py_setattro(PyObject *attr, PyObject *value) // py_setattro method -{ - py_setattro_up(SCA_IActuator); -} /* set --------------------------------------------------------------------- */ const char KX_IpoActuator::Set_doc[] = @@ -689,7 +672,7 @@ const char KX_IpoActuator::GetType_doc[] = "\tReturns the operation mode of the actuator.\n"; PyObject* KX_IpoActuator::PyGetType() { ShowDeprecationWarning("getType()", "the mode property"); - return PyInt_FromLong(m_type); + return PyLong_FromSsize_t(m_type); } /* 10. setForceIpoActsLocal: */ diff --git a/source/gameengine/Ketsji/KX_IpoActuator.h b/source/gameengine/Ketsji/KX_IpoActuator.h index 9ea597def1e..01051ca82dc 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.h +++ b/source/gameengine/Ketsji/KX_IpoActuator.h @@ -121,8 +121,7 @@ public: int acttype, bool ipo_as_force, bool ipo_add, - bool ipo_local, - PyTypeObject* T=&Type); + bool ipo_local); virtual ~KX_IpoActuator() {}; virtual CValue* GetReplica() { @@ -138,10 +137,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); //KX_PYMETHOD_DOC KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,Set); diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp index ae9e097a96e..fb385f8a9a2 100644 --- a/source/gameengine/Ketsji/KX_Light.cpp +++ b/source/gameengine/Ketsji/KX_Light.cpp @@ -51,12 +51,9 @@ KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks, class RAS_IRenderTools* rendertools, const RAS_LightObject& lightobj, - bool glsl, - PyTypeObject* T - ) - : - KX_GameObject(sgReplicationInfo,callbacks,T), - m_rendertools(rendertools) + bool glsl) + : KX_GameObject(sgReplicationInfo,callbacks), + m_rendertools(rendertools) { m_lightobj = lightobj; m_lightobj.m_scene = sgReplicationInfo; @@ -271,11 +268,6 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras) /* Python Integration Hooks */ /* ------------------------------------------------------------------------- */ -PyObject* KX_LightObject::py_getattro_dict() { - py_getattro_dict_up(KX_GameObject); -} - - PyTypeObject KX_LightObject::Type = { #if (PY_VERSION_HEX >= 0x02060000) PyVarObject_HEAD_INIT(NULL, 0) @@ -297,20 +289,17 @@ PyTypeObject KX_LightObject::Type = { &KX_GameObject::Sequence, &KX_GameObject::Mapping, 0,0,0, - py_base_getattro, - py_base_setattro, + NULL, + NULL, 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, 0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_LightObject::Parents[] = { - &KX_LightObject::Type, - &KX_GameObject::Type, - &SCA_IObject::Type, - &CValue::Type, - NULL + Methods, + 0, + 0, + &KX_GameObject::Type, + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_LightObject::Methods[] = { @@ -362,11 +351,11 @@ PyObject* KX_LightObject::pyattr_get_typeconst(void *self_v, const KX_PYATTRIBUT const char* type = attrdef->m_name; if(strcmp(type, "SPOT")) { - retvalue = PyInt_FromLong(RAS_LightObject::LIGHT_SPOT); + retvalue = PyLong_FromSsize_t(RAS_LightObject::LIGHT_SPOT); } else if (strcmp(type, "SUN")) { - retvalue = PyInt_FromLong(RAS_LightObject::LIGHT_SUN); + retvalue = PyLong_FromSsize_t(RAS_LightObject::LIGHT_SUN); } else if (strcmp(type, "NORMAL")) { - retvalue = PyInt_FromLong(RAS_LightObject::LIGHT_NORMAL); + retvalue = PyLong_FromSsize_t(RAS_LightObject::LIGHT_NORMAL); } return retvalue; @@ -375,13 +364,13 @@ PyObject* KX_LightObject::pyattr_get_typeconst(void *self_v, const KX_PYATTRIBUT PyObject* KX_LightObject::pyattr_get_type(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_LightObject* self = static_cast(self_v); - return PyInt_FromLong(self->m_lightobj.m_type); + return PyLong_FromSsize_t(self->m_lightobj.m_type); } int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value) { KX_LightObject* self = static_cast(self_v); - int val = PyInt_AsLong(value); + int val = PyLong_AsSsize_t(value); if((val==-1 && PyErr_Occurred()) || val<0 || val>2) { PyErr_SetString(PyExc_ValueError, "light.type= val: KX_LightObject, expected an int between 0 and 2"); return PY_SET_ATTR_FAIL; @@ -401,14 +390,3 @@ int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attr return PY_SET_ATTR_SUCCESS; } - - -PyObject* KX_LightObject::py_getattro(PyObject *attr) -{ - py_getattro_up(KX_GameObject); -} - -int KX_LightObject::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(KX_GameObject); -} diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h index 358c705080a..0b7ccbe81ab 100644 --- a/source/gameengine/Ketsji/KX_Light.h +++ b/source/gameengine/Ketsji/KX_Light.h @@ -49,7 +49,7 @@ protected: Scene* m_blenderscene; public: - KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,class RAS_IRenderTools* rendertools,const struct RAS_LightObject& lightobj, bool glsl, PyTypeObject *T = &Type); + KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,class RAS_IRenderTools* rendertools,const struct RAS_LightObject& lightobj, bool glsl); virtual ~KX_LightObject(); virtual CValue* GetReplica(); RAS_LightObject* GetLightData() { return &m_lightobj;} @@ -64,10 +64,6 @@ public: void BindShadowBuffer(class RAS_IRasterizer *ras, class KX_Camera *cam, class MT_Transform& camtrans); void UnbindShadowBuffer(class RAS_IRasterizer *ras); void Update(); - - virtual PyObject* py_getattro(PyObject *attr); /* lens, near, far, projection_matrix */ - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *pyvalue); /* attributes */ static PyObject* pyattr_get_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp index 11effa1ca98..96e8f61e4c8 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.cpp +++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp @@ -62,18 +62,15 @@ PyTypeObject KX_MeshProxy::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_MeshProxy::Parents[] = { - &KX_MeshProxy::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &CValue::Type, - &PyObjectPlus::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_MeshProxy::Methods[] = { @@ -106,24 +103,8 @@ void KX_MeshProxy::SetMeshModified(bool v) m_meshobj->SetMeshModified(v); } - -PyObject* KX_MeshProxy::py_getattro(PyObject *attr) -{ - py_getattro_up(CValue); -} - -PyObject* KX_MeshProxy::py_getattro_dict() { - py_getattro_dict_up(CValue); -} - -int KX_MeshProxy::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(CValue); -} - - KX_MeshProxy::KX_MeshProxy(RAS_MeshObject* mesh) - : CValue(&Type), m_meshobj(mesh) + : CValue(), m_meshobj(mesh) { } @@ -150,14 +131,14 @@ PyObject* KX_MeshProxy::PyGetNumMaterials(PyObject* args, PyObject* kwds) { int num = m_meshobj->NumMaterials(); ShowDeprecationWarning("getNumMaterials()", "the numMaterials property"); - return PyInt_FromLong(num); + return PyLong_FromSsize_t(num); } PyObject* KX_MeshProxy::PyGetNumPolygons() { int num = m_meshobj->NumPolygons(); ShowDeprecationWarning("getNumPolygons()", "the numPolygons property"); - return PyInt_FromLong(num); + return PyLong_FromSsize_t(num); } PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* args, PyObject* kwds) @@ -173,7 +154,7 @@ PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* args, PyObject* kwds) return NULL; } - return PyString_FromString(matname.Ptr()); + return PyUnicode_FromString(matname.Ptr()); } @@ -191,7 +172,7 @@ PyObject* KX_MeshProxy::PyGetTextureName(PyObject* args, PyObject* kwds) return NULL; } - return PyString_FromString(matname.Ptr()); + return PyUnicode_FromString(matname.Ptr()); } @@ -214,7 +195,7 @@ PyObject* KX_MeshProxy::PyGetVertexArrayLength(PyObject* args, PyObject* kwds) length = m_meshobj->NumVertices(mat); } - return PyInt_FromLong(length); + return PyLong_FromSsize_t(length); } @@ -304,12 +285,12 @@ PyObject* KX_MeshProxy::pyattr_get_materials(void *self_v, const KX_PYATTRIBUTE_ PyObject * KX_MeshProxy::pyattr_get_numMaterials(void * selfv, const KX_PYATTRIBUTE_DEF * attrdef) { KX_MeshProxy * self = static_cast (selfv); - return PyInt_FromLong(self->m_meshobj->NumMaterials()); + return PyLong_FromSsize_t(self->m_meshobj->NumMaterials()); } PyObject * KX_MeshProxy::pyattr_get_numPolygons(void * selfv, const KX_PYATTRIBUTE_DEF * attrdef) { KX_MeshProxy * self = static_cast (selfv); - return PyInt_FromLong(self->m_meshobj->NumPolygons()); + return PyLong_FromSsize_t(self->m_meshobj->NumPolygons()); } /* a close copy of ConvertPythonToGameObject but for meshes */ @@ -332,13 +313,13 @@ bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none } } - if (PyString_Check(value)) { - *object = (RAS_MeshObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String( PyString_AsString(value) )); + if (PyUnicode_Check(value)) { + *object = (RAS_MeshObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String( _PyUnicode_AsString(value) )); if (*object) { return true; } else { - PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_MeshProxy in this scene", error_prefix, PyString_AsString(value)); + PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_MeshProxy in this scene", error_prefix, _PyUnicode_AsString(value)); return false; } } diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h index bfdd4be4118..4b6543677ad 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.h +++ b/source/gameengine/Ketsji/KX_MeshProxy.h @@ -56,9 +56,6 @@ public: virtual CValue* GetReplica(); // stuff for python integration - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); KX_PYMETHOD(KX_MeshProxy,GetNumMaterials); // Deprecated KX_PYMETHOD(KX_MeshProxy,GetMaterialName); diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index fde10a493db..ba4b47cb03f 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -63,9 +63,8 @@ KX_MouseFocusSensor::KX_MouseFocusSensor(SCA_MouseManager* eventmgr, int focusmode, KX_Scene* kxscene, KX_KetsjiEngine *kxengine, - SCA_IObject* gameobj, - PyTypeObject* T) - : SCA_MouseSensor(eventmgr, startx, starty, mousemode, gameobj, T), + SCA_IObject* gameobj) + : SCA_MouseSensor(eventmgr, startx, starty, mousemode, gameobj), m_focusmode(focusmode), m_kxscene(kxscene), m_kxengine(kxengine) @@ -356,20 +355,15 @@ PyTypeObject KX_MouseFocusSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_MouseFocusSensor::Parents[] = { - &KX_MouseFocusSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_MouseSensor::Type, - &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_MouseFocusSensor::Methods[] = { @@ -393,15 +387,6 @@ PyAttributeDef KX_MouseFocusSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_MouseFocusSensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_MouseSensor); -} - -PyObject* KX_MouseFocusSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_MouseSensor); -} - - const char KX_MouseFocusSensor::GetHitObject_doc[] = "getHitObject()\n" "\tReturns the object that was hit by this ray.\n"; diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index 29d674eb305..dfada7a59cc 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -56,8 +56,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor int focusmode, KX_Scene* kxscene, KX_KetsjiEngine* kxengine, - SCA_IObject* gameobj, - PyTypeObject* T=&Type ); + SCA_IObject* gameobj); virtual ~KX_MouseFocusSensor() { ; }; virtual CValue* GetReplica() { @@ -89,8 +88,6 @@ class KX_MouseFocusSensor : public SCA_MouseSensor /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetRayTarget); KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetRaySource); diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 44842b7f5b3..1a211a64b35 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -48,15 +48,13 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr, bool bFindMaterial, const STR_String& touchedpropname, class KX_Scene* scene, - PHY_IPhysicsController* ctrl, - PyTypeObject* T) + PHY_IPhysicsController* ctrl) :KX_TouchSensor(eventmgr, gameobj, bFindMaterial, false, - touchedpropname, - /* scene, */ - T), + touchedpropname + /*, scene */), m_Margin(margin), m_ResetMargin(resetmargin) @@ -272,26 +270,17 @@ PyTypeObject KX_NearSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject KX_NearSensor::Parents[] = { - &KX_NearSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &KX_TouchSensor::Type, - &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_NearSensor::Methods[] = { //No methods {NULL,NULL} //Sentinel @@ -302,18 +291,3 @@ PyAttributeDef KX_NearSensor::Attributes[] = { KX_PYATTRIBUTE_FLOAT_RW_CHECK("resetDistance", 0, 100, KX_NearSensor, m_ResetMargin, CheckResetDistance), {NULL} //Sentinel }; - - -PyObject* KX_NearSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(KX_TouchSensor); -} - -PyObject* KX_NearSensor::py_getattro_dict() { - py_getattro_dict_up(KX_TouchSensor); -} - -int KX_NearSensor::py_setattro(PyObject*attr, PyObject* value) -{ - py_setattro_up(KX_TouchSensor); -} diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h index 63099e181a0..f3c1d74805c 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.h +++ b/source/gameengine/Ketsji/KX_NearSensor.h @@ -54,8 +54,7 @@ public: bool bFindMaterial, const STR_String& touchedpropname, class KX_Scene* scene, - PHY_IPhysicsController* ctrl, - PyTypeObject* T=&Type); + PHY_IPhysicsController* ctrl); /* public: KX_NearSensor(class SCA_EventManager* eventmgr, @@ -64,8 +63,7 @@ public: double resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* scene, - PyTypeObject* T=&Type); + class KX_Scene* scene); */ virtual ~KX_NearSensor(); virtual void SynchronizeTransform(); @@ -83,9 +81,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); //No methods diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.cpp b/source/gameengine/Ketsji/KX_ObjectActuator.cpp index 62e61667c56..ae340d12be4 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_ObjectActuator.cpp @@ -53,10 +53,9 @@ KX_ObjectActuator( const MT_Vector3& linV, const MT_Vector3& angV, const short damping, - const KX_LocalFlags& flag, - PyTypeObject* T + const KX_LocalFlags& flag ) : - SCA_IActuator(gameobj,T), + SCA_IActuator(gameobj), m_force(force), m_torque(torque), m_dloc(dloc), @@ -342,19 +341,15 @@ PyTypeObject KX_ObjectActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_ObjectActuator::Parents[] = { - &KX_ObjectActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_ObjectActuator::Methods[] = { @@ -414,20 +409,6 @@ PyAttributeDef KX_ObjectActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_ObjectActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - - -PyObject* KX_ObjectActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_ObjectActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - /* Attribute get/set functions */ #ifdef USE_MATHUTILS @@ -574,7 +555,7 @@ int KX_ObjectActuator::pyattr_set_forceLimitX(void *self_v, const KX_PYATTRIBUTE { self->m_drot[0] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 0)); self->m_dloc[0] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 1)); - self->m_bitLocalFlag.Torque = (PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 2)) != 0); + self->m_bitLocalFlag.Torque = (PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 2)) != 0); if (!PyErr_Occurred()) { @@ -610,7 +591,7 @@ int KX_ObjectActuator::pyattr_set_forceLimitY(void *self_v, const KX_PYATTRIBUTE { self->m_drot[1] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 0)); self->m_dloc[1] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 1)); - self->m_bitLocalFlag.DLoc = (PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 2)) != 0); + self->m_bitLocalFlag.DLoc = (PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 2)) != 0); if (!PyErr_Occurred()) { @@ -646,7 +627,7 @@ int KX_ObjectActuator::pyattr_set_forceLimitZ(void *self_v, const KX_PYATTRIBUTE { self->m_drot[2] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 0)); self->m_dloc[2] = PyFloat_AsDouble(PySequence_Fast_GET_ITEM(value, 1)); - self->m_bitLocalFlag.DRot = (PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 2)) != 0); + self->m_bitLocalFlag.DRot = (PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 2)) != 0); if (!PyErr_Occurred()) { diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.h b/source/gameengine/Ketsji/KX_ObjectActuator.h index 6ca442b2ec2..20aec9e0e86 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.h +++ b/source/gameengine/Ketsji/KX_ObjectActuator.h @@ -135,8 +135,7 @@ public: const MT_Vector3& linV, const MT_Vector3& angV, const short damping, - const KX_LocalFlags& flag, - PyTypeObject* T=&Type + const KX_LocalFlags& flag ); ~KX_ObjectActuator(); CValue* GetReplica(); @@ -163,10 +162,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetForce); KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetForce); diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp index cd2ed456c48..befa2aaff56 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.cpp +++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp @@ -50,9 +50,8 @@ KX_ParentActuator::KX_ParentActuator(SCA_IObject *gameobj, int mode, bool addToCompound, bool ghost, - SCA_IObject *ob, - PyTypeObject* T) - : SCA_IActuator(gameobj, T), + SCA_IObject *ob) + : SCA_IActuator(gameobj), m_mode(mode), m_addToCompound(addToCompound), m_ghost(ghost), @@ -157,19 +156,15 @@ PyTypeObject KX_ParentActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_ParentActuator::Parents[] = { - &KX_ParentActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_ParentActuator::Methods[] = { @@ -217,18 +212,6 @@ int KX_ParentActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE } -PyObject* KX_ParentActuator::py_getattro(PyObject *attr) { - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_ParentActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_ParentActuator::py_setattro(PyObject *attr, PyObject* value) { - py_setattro_up(SCA_IActuator); -} - /* Deprecated -----> */ /* 1. setObject */ const char KX_ParentActuator::SetObject_doc[] = @@ -273,7 +256,7 @@ PyObject* KX_ParentActuator::PyGetObject(PyObject* args) Py_RETURN_NONE; if (ret_name_only) - return PyString_FromString(m_ob->GetName().ReadPtr()); + return PyUnicode_FromString(m_ob->GetName().ReadPtr()); else return m_ob->GetProxy(); } diff --git a/source/gameengine/Ketsji/KX_ParentActuator.h b/source/gameengine/Ketsji/KX_ParentActuator.h index 148375e994c..aeb39eabf89 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.h +++ b/source/gameengine/Ketsji/KX_ParentActuator.h @@ -68,8 +68,7 @@ class KX_ParentActuator : public SCA_IActuator int mode, bool addToCompound, bool ghost, - SCA_IObject *ob, - PyTypeObject* T=&Type); + SCA_IObject *ob); virtual ~KX_ParentActuator(); virtual bool Update(); @@ -82,10 +81,6 @@ class KX_ParentActuator : public SCA_IActuator /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - /* These are used to get and set m_ob */ static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp index c968e50957e..7bce311f1b6 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp @@ -39,8 +39,8 @@ KX_PhysicsObjectWrapper::KX_PhysicsObjectWrapper( PHY_IPhysicsController* ctrl, - PHY_IPhysicsEnvironment* physenv,PyTypeObject *T) : - PyObjectPlus(T), + PHY_IPhysicsEnvironment* physenv) : + PyObjectPlus(), m_ctrl(ctrl), m_physenv(physenv) { @@ -129,46 +129,17 @@ PyTypeObject KX_PhysicsObjectWrapper::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject KX_PhysicsObjectWrapper::Parents[] = { - &KX_PhysicsObjectWrapper::Type, - NULL -}; - -PyObject* KX_PhysicsObjectWrapper::py_getattro(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -PyObject* KX_PhysicsObjectWrapper::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - -int KX_PhysicsObjectWrapper::py_setattro(PyObject *attr,PyObject *pyobj) -{ - int result = 1; - - if (PyInt_Check(pyobj)) - { - result = 0; - } - if (PyString_Check(pyobj)) - { - result = 0; - } - if (result) - result = PyObjectPlus::py_setattro(attr,pyobj); - - return result; -}; - - PyMethodDef KX_PhysicsObjectWrapper::Methods[] = { {"setPosition",(PyCFunction) KX_PhysicsObjectWrapper::sPySetPosition, METH_VARARGS}, {"setLinearVelocity",(PyCFunction) KX_PhysicsObjectWrapper::sPySetLinearVelocity, METH_VARARGS}, diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h index 1b59686babc..fa6fd1d1f2a 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h @@ -35,12 +35,8 @@ class KX_PhysicsObjectWrapper : public PyObjectPlus { Py_Header; - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); public: - KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv,PyTypeObject *T = &Type); + KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv); virtual ~KX_PhysicsObjectWrapper(); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetPosition); diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp index b56b5500c39..a1571b17756 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.cpp +++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp @@ -55,18 +55,15 @@ PyTypeObject KX_PolyProxy::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_PolyProxy::Parents[] = { - &KX_PolyProxy::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &CValue::Type, - &PyObjectPlus::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_PolyProxy::Methods[] = { @@ -98,16 +95,17 @@ PyAttributeDef KX_PolyProxy::Attributes[] = { { NULL } //Sentinel }; +#if 0 PyObject* KX_PolyProxy::py_getattro(PyObject *attr) { - char *attr_str= PyString_AsString(attr); + char *attr_str= _PyUnicode_AsString(attr); if (!strcmp(attr_str, "matname")) { - return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName()); + return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName()); } if (!strcmp(attr_str, "texture")) { - return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName()); + return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName()); } if (!strcmp(attr_str, "material")) { @@ -136,38 +134,35 @@ PyObject* KX_PolyProxy::py_getattro(PyObject *attr) // found it break; } - return PyInt_FromLong(matid); + return PyLong_FromSsize_t(matid); } if (!strcmp(attr_str, "v1")) { - return PyInt_FromLong(m_polygon->GetVertexOffset(0)); + return PyLong_FromSsize_t(m_polygon->GetVertexOffset(0)); } if (!strcmp(attr_str, "v2")) { - return PyInt_FromLong(m_polygon->GetVertexOffset(1)); + return PyLong_FromSsize_t(m_polygon->GetVertexOffset(1)); } if (!strcmp(attr_str, "v3")) { - return PyInt_FromLong(m_polygon->GetVertexOffset(2)); + return PyLong_FromSsize_t(m_polygon->GetVertexOffset(2)); } if (!strcmp(attr_str, "v4")) { - return PyInt_FromLong(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffset(3):0)); + return PyLong_FromSsize_t(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffset(3):0)); } if (!strcmp(attr_str, "visible")) { - return PyInt_FromLong(m_polygon->IsVisible()); + return PyLong_FromSsize_t(m_polygon->IsVisible()); } if (!strcmp(attr_str, "collide")) { - return PyInt_FromLong(m_polygon->IsCollider()); + return PyLong_FromSsize_t(m_polygon->IsCollider()); } - py_getattro_up(CValue); -} - -PyObject* KX_PolyProxy::py_getattro_dict() { - py_getattro_dict_up(CValue); + // py_getattro_up(CValue); // XXX -- todo, make all these attributes } +#endif KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon) : m_polygon(polygon), @@ -204,37 +199,37 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex, // found it break; } - return PyInt_FromLong(matid); + return PyLong_FromSsize_t(matid); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getNumVertex, "getNumVertex() : returns the number of vertex of the polygon, 3 or 4\n") { - return PyInt_FromLong(m_polygon->VertexCount()); + return PyLong_FromSsize_t(m_polygon->VertexCount()); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, isVisible, "isVisible() : returns whether the polygon is visible or not\n") { - return PyInt_FromLong(m_polygon->IsVisible()); + return PyLong_FromSsize_t(m_polygon->IsVisible()); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, isCollider, "isCollider() : returns whether the polygon is receives collision or not\n") { - return PyInt_FromLong(m_polygon->IsCollider()); + return PyLong_FromSsize_t(m_polygon->IsCollider()); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialName, "getMaterialName() : returns the polygon material name, \"NoMaterial\" if no material\n") { - return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName()); + return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName()); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getTextureName, "getTexturelName() : returns the polygon texture name, \"NULL\" if no texture\n") { - return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName()); + return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName()); } KX_PYMETHODDEF_DOC(KX_PolyProxy, getVertexIndex, @@ -255,9 +250,9 @@ KX_PYMETHODDEF_DOC(KX_PolyProxy, getVertexIndex, } if (index < m_polygon->VertexCount()) { - return PyInt_FromLong(m_polygon->GetVertexOffset(index)); + return PyLong_FromSsize_t(m_polygon->GetVertexOffset(index)); } - return PyInt_FromLong(0); + return PyLong_FromSsize_t(0); } KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMesh, diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h index d8fd36fec6c..e619617d312 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.h +++ b/source/gameengine/Ketsji/KX_PolyProxy.h @@ -52,8 +52,6 @@ public: // stuff for python integration - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialIndex) KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getNumVertex) diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp index 506c167a905..9bc84127572 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp @@ -51,8 +51,8 @@ #include "KX_PyMath.h" -KX_PolygonMaterial::KX_PolygonMaterial(PyTypeObject *T) - : PyObjectPlus(T), +KX_PolygonMaterial::KX_PolygonMaterial() + : PyObjectPlus(), RAS_IPolyMaterial(), m_tface(NULL), @@ -115,7 +115,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI PyObject *ret = PyObject_CallMethod(m_pymaterial, "activate", "(NNO)", pyRasty, pyCachingInfo, (PyObject*) this->m_proxy); if (ret) { - bool value = PyInt_AsLong(ret); + bool value = PyLong_AsSsize_t(ret); Py_DECREF(ret); dopass = value; } @@ -255,33 +255,17 @@ PyTypeObject KX_PolygonMaterial::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject KX_PolygonMaterial::Parents[] = { - &KX_PolygonMaterial::Type, - &PyObjectPlus::Type, - NULL -}; - -PyObject* KX_PolygonMaterial::py_getattro(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -PyObject* KX_PolygonMaterial::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - -int KX_PolygonMaterial::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(PyObjectPlus); -} - KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setCustomMaterial, "setCustomMaterial(material)") { PyObject *material; @@ -347,13 +331,13 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, activate, "activate(rasty, cachingInfo)") PyObject* KX_PolygonMaterial::pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_PolygonMaterial* self= static_cast(self_v); - return PyString_FromString(self->m_texturename.ReadPtr()); + return PyUnicode_FromString(self->m_texturename.ReadPtr()); } PyObject* KX_PolygonMaterial::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_PolygonMaterial* self= static_cast(self_v); - return PyString_FromString(self->m_materialname.ReadPtr()); + return PyUnicode_FromString(self->m_materialname.ReadPtr()); } /* this does not seem useful */ @@ -370,7 +354,7 @@ PyObject* KX_PolygonMaterial::pyattr_get_gl_texture(void *self_v, const KX_PYATT if (self->m_tface && self->m_tface->tpage) bindcode= self->m_tface->tpage->bindcode; - return PyInt_FromLong(bindcode); + return PyLong_FromSsize_t(bindcode); } diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h index 89ecb026da9..266b4d7e789 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.h +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h @@ -57,7 +57,7 @@ private: mutable int m_pass; public: - KX_PolygonMaterial(PyTypeObject *T = &Type); + KX_PolygonMaterial(); void Initialize(const STR_String &texname, Material* ma, int materialindex, @@ -116,10 +116,7 @@ public: KX_PYMETHOD_DOC(KX_PolygonMaterial, setCustomMaterial); KX_PYMETHOD_DOC(KX_PolygonMaterial, loadProgram); - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *pyvalue); - virtual PyObject* py_repr(void) { return PyString_FromString(m_material ? ((ID *)m_material)->name+2 : ""); } + virtual PyObject* py_repr(void) { return PyUnicode_FromString(m_material ? ((ID *)m_material)->name+2 : ""); } static PyObject* pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp index 4ec901a2f5e..94e8d1fd583 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp @@ -640,7 +640,7 @@ PyObject* initPythonConstraintBinding() // Add some symbolic constants to the module d = PyModule_GetDict(m); - ErrorObject = PyString_FromString("PhysicsConstraints.error"); + ErrorObject = PyUnicode_FromString("PhysicsConstraints.error"); PyDict_SetItemString(d, "error", ErrorObject); Py_DECREF(ErrorObject); diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp index 76cfb0e572d..6d33c38190c 100644 --- a/source/gameengine/Ketsji/KX_PyMath.cpp +++ b/source/gameengine/Ketsji/KX_PyMath.cpp @@ -99,7 +99,7 @@ PyObject* PyObjectFrom(const MT_Matrix4x4 &mat) #ifdef USE_MATHUTILS float fmat[16]; mat.getValue(fmat); - return newMatrixObject(fmat, 4, 4, Py_NEW); + return newMatrixObject(fmat, 4, 4, Py_NEW, NULL); #else PyObject *list = PyList_New(4); PyObject *sublist; @@ -123,7 +123,7 @@ PyObject* PyObjectFrom(const MT_Matrix3x3 &mat) #ifdef USE_MATHUTILS float fmat[9]; mat.getValue3x3(fmat); - return newMatrixObject(fmat, 3, 3, Py_NEW); + return newMatrixObject(fmat, 3, 3, Py_NEW, NULL); #else PyObject *list = PyList_New(3); PyObject *sublist; @@ -146,7 +146,7 @@ PyObject* PyObjectFrom(const MT_Quaternion &qrot) { /* NOTE, were re-ordering here for Mathutils compat */ float fvec[4]= {qrot[3], qrot[0], qrot[1], qrot[2]}; - return newQuaternionObject(fvec, Py_WRAP); + return newQuaternionObject(fvec, Py_WRAP, NULL); } #endif @@ -154,7 +154,7 @@ PyObject* PyObjectFrom(const MT_Tuple4 &vec) { #ifdef USE_MATHUTILS float fvec[4]= {vec[0], vec[1], vec[2], vec[3]}; - return newVectorObject(fvec, 4, Py_WRAP); + return newVectorObject(fvec, 4, Py_WRAP, NULL); #else PyObject *list = PyList_New(4); PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0])); @@ -169,7 +169,7 @@ PyObject* PyObjectFrom(const MT_Tuple3 &vec) { #ifdef USE_MATHUTILS float fvec[3]= {vec[0], vec[1], vec[2]}; - return newVectorObject(fvec, 3, Py_WRAP); + return newVectorObject(fvec, 3, Py_WRAP, NULL); #else PyObject *list = PyList_New(3); PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0])); @@ -183,7 +183,7 @@ PyObject* PyObjectFrom(const MT_Tuple2 &vec) { #ifdef USE_MATHUTILS float fvec[2]= {vec[0], vec[1]}; - return newVectorObject(fvec, 2, Py_WRAP); + return newVectorObject(fvec, 2, Py_WRAP, NULL); #else PyObject *list = PyList_New(2); PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0])); diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h index f37925bb0ab..9ee11c9e745 100644 --- a/source/gameengine/Ketsji/KX_PyMath.h +++ b/source/gameengine/Ketsji/KX_PyMath.h @@ -31,12 +31,6 @@ #ifndef __KX_PYMATH_H__ #define __KX_PYMATH_H__ -#ifdef USE_MATHUTILS -extern "C" { -#include "../../blender/python/generic/Mathutils.h" /* so we can have mathutils callbacks */ -} -#endif - #include "MT_Point2.h" #include "MT_Point3.h" #include "MT_Vector2.h" @@ -48,6 +42,12 @@ extern "C" { #include "KX_Python.h" #include "PyObjectPlus.h" +#ifdef USE_MATHUTILS +extern "C" { +#include "../../blender/python/generic/Mathutils.h" /* so we can have mathutils callbacks */ +} +#endif + inline unsigned int Size(const MT_Matrix4x4&) { return 4; } inline unsigned int Size(const MT_Matrix3x3&) { return 3; } inline unsigned int Size(const MT_Tuple2&) { return 2; } @@ -154,7 +154,7 @@ bool PyVecTo(PyObject* pyval, T& vec) return true; } - else if (BGE_PROXY_CHECK_TYPE(pyval)) + else if (PyObject_TypeCheck(pyval, &PyObjectPlus::Type)) { /* note, include this check because PySequence_Check does too much introspection * on the PyObject (like getting its __class__, on a BGE type this means searching up * the parent list each time only to discover its not a sequence. diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 736460d33db..eead7a51885 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -130,10 +130,10 @@ void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,cons } /* Macro for building the keyboard translation */ -//#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, PyInt_FromLong(SCA_IInputDevice::KX_##name)) -#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, item=PyInt_FromLong(name)); Py_DECREF(item) +//#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, PyLong_FromSsize_t(SCA_IInputDevice::KX_##name)) +#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, item=PyLong_FromSsize_t(name)); Py_DECREF(item) /* For the defines for types from logic bricks, we do stuff explicitly... */ -#define KX_MACRO_addTypesToDict(dict, name, name2) PyDict_SetItemString(dict, #name, item=PyInt_FromLong(name2)); Py_DECREF(item) +#define KX_MACRO_addTypesToDict(dict, name, name2) PyDict_SetItemString(dict, #name, item=PyLong_FromSsize_t(name2)); Py_DECREF(item) // temporarily python stuff, will be put in another place later ! @@ -181,7 +181,7 @@ static PyObject* gPyExpandPath(PyObject*, PyObject* args) BLI_strncpy(expanded, filename, FILE_MAXDIR + FILE_MAXFILE); BLI_convertstringcode(expanded, gp_GamePythonPath); - return PyString_FromString(expanded); + return PyUnicode_FromString(expanded); } static char gPySendMessage_doc[] = @@ -306,7 +306,7 @@ static PyObject* gPySetMaxLogicFrame(PyObject*, PyObject* args) static PyObject* gPyGetMaxLogicFrame(PyObject*) { - return PyInt_FromLong(KX_KetsjiEngine::GetMaxLogicFrame()); + return PyLong_FromSsize_t(KX_KetsjiEngine::GetMaxLogicFrame()); } static PyObject* gPySetMaxPhysicsFrame(PyObject*, PyObject* args) @@ -321,7 +321,7 @@ static PyObject* gPySetMaxPhysicsFrame(PyObject*, PyObject* args) static PyObject* gPyGetMaxPhysicsFrame(PyObject*) { - return PyInt_FromLong(KX_KetsjiEngine::GetMaxPhysicsFrame()); + return PyLong_FromSsize_t(KX_KetsjiEngine::GetMaxPhysicsFrame()); } static PyObject* gPySetPhysicsTicRate(PyObject*, PyObject* args) @@ -386,7 +386,7 @@ static PyObject* gPyGetBlendFileList(PyObject*, PyObject* args) while ((dirp = readdir(dp)) != NULL) { if (BLI_testextensie(dirp->d_name, ".blend")) { - value = PyString_FromString(dirp->d_name); + value = PyUnicode_FromString(dirp->d_name); PyList_Append(list, value); Py_DECREF(value); } @@ -500,7 +500,7 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *) static PyObject *gEvalExpression(PyObject*, PyObject* value) { - char* txt= PyString_AsString(value); + char* txt= _PyUnicode_AsString(value); if (txt==NULL) { PyErr_SetString(PyExc_TypeError, "Expression.calc(text): expects a single string argument"); @@ -558,14 +558,14 @@ static struct PyMethodDef game_methods[] = { static PyObject* gPyGetWindowHeight(PyObject*, PyObject* args) { - return PyInt_FromLong((gp_Canvas ? gp_Canvas->GetHeight() : 0)); + return PyLong_FromSsize_t((gp_Canvas ? gp_Canvas->GetHeight() : 0)); } static PyObject* gPyGetWindowWidth(PyObject*, PyObject* args) { - return PyInt_FromLong((gp_Canvas ? gp_Canvas->GetWidth() : 0)); + return PyLong_FromSsize_t((gp_Canvas ? gp_Canvas->GetWidth() : 0)); } @@ -893,7 +893,7 @@ static PyObject* gPyGetGLSLMaterialSetting(PyObject*, } enabled = ((G.fileflags & flag) != 0); - return PyInt_FromLong(enabled); + return PyLong_FromSsize_t(enabled); } #define KX_TEXFACE_MATERIAL 0 @@ -937,7 +937,7 @@ static PyObject* gPyGetMaterialType(PyObject*) else flag = KX_TEXFACE_MATERIAL; - return PyInt_FromLong(flag); + return PyLong_FromSsize_t(flag); } static PyObject* gPyDrawLine(PyObject*, PyObject* args) @@ -1075,7 +1075,7 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack PyDict_SetItemString(d, "globalDict", item=PyDict_New()); Py_DECREF(item); - ErrorObject = PyString_FromString("GameLogic.error"); + ErrorObject = PyUnicode_FromString("GameLogic.error"); PyDict_SetItemString(d, "error", ErrorObject); Py_DECREF(ErrorObject); @@ -1362,7 +1362,7 @@ PyObject *KXpy_import(PyObject *self, PyObject *args) /* check for builtin modules */ m = PyImport_AddModule("sys"); l = PyObject_GetAttrString(m, "builtin_module_names"); - n = PyString_FromString(name); + n = PyUnicode_FromString(name); if (PySequence_Contains(l, n)) { return PyImport_ImportModuleEx(name, globals, locals, fromlist); @@ -1538,7 +1538,7 @@ static void initPySysObjects__append(PyObject *sys_path, char *filename) BLI_split_dirfile_basic(filename, expanded, NULL); /* get the dir part of filename only */ BLI_convertstringcode(expanded, gp_GamePythonPath); /* filename from lib->filename is (always?) absolute, so this may not be needed but it wont hurt */ BLI_cleanup_file(gp_GamePythonPath, expanded); /* Dont use BLI_cleanup_dir because it adds a slash - BREAKS WIN32 ONLY */ - item= PyString_FromString(expanded); + item= PyUnicode_FromString(expanded); // printf("SysPath - '%s', '%s', '%s'\n", expanded, filename, gp_GamePythonPath); @@ -1735,7 +1735,7 @@ PyObject* initRasterizer(RAS_IRasterizer* rasty,RAS_ICanvas* canvas) // Add some symbolic constants to the module d = PyModule_GetDict(m); - ErrorObject = PyString_FromString("Rasterizer.error"); + ErrorObject = PyUnicode_FromString("Rasterizer.error"); PyDict_SetItemString(d, "error", ErrorObject); Py_DECREF(ErrorObject); @@ -1813,10 +1813,10 @@ static PyObject* gPyEventToCharacter(PyObject*, PyObject* args) if(IsPrintable(event)) { char ch[2] = {'\0', '\0'}; ch[0] = ToCharacter(event, (bool)shift); - return PyString_FromString(ch); + return PyUnicode_FromString(ch); } else { - return PyString_FromString(""); + return PyUnicode_FromString(""); } } @@ -2044,7 +2044,7 @@ int saveGamePythonConfig( char **marshal_buffer) char *marshal_cstring; #if PY_VERSION_HEX < 0x03000000 - marshal_cstring = PyString_AsString(pyGlobalDictMarshal); + marshal_cstring = _PyUnicode_AsString(pyGlobalDictMarshal); marshal_length= PyString_Size(pyGlobalDictMarshal); #else // py3 uses byte arrays marshal_cstring = PyBytes_AsString(pyGlobalDictMarshal); diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp index d5d0fe3123c..8ff0bfd5379 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp @@ -87,69 +87,54 @@ #include "SCA_RandomActuator.h" #include "SCA_IController.h" - -void initPyObjectPlusType(PyTypeObject **parents) -{ - int i; - - for (i=0; parents[i]; i++) { - if(PyType_Ready(parents[i]) < 0) { - /* This is very very unlikely */ - printf("Error, pytype could not initialize, Blender may crash \"%s\"\n", parents[i]->tp_name); - return; - } - -#if 0 - PyObject_Print(reinterpret_castparents[i], stderr, 0); - fprintf(stderr, "\n"); - PyObject_Print(parents[i]->tp_dict, stderr, 0); - fprintf(stderr, "\n\n"); -#endif - - } - - PyObject *dict= NULL; - - while(i) { - i--; - - if (dict) { - PyDict_Update(parents[i]->tp_dict, dict); - } - dict= parents[i]->tp_dict; - -#if 1 - PyObject_Print(reinterpret_cast(parents[i]), stderr, 0); - fprintf(stderr, "\n"); - PyObject_Print(parents[i]->tp_dict, stderr, 0); - fprintf(stderr, "\n\n"); -#endif - - } -} - - - - -static void PyType_Ready_ADD(PyObject *dict, PyTypeObject *tp, PyAttributeDef *attributes) +static void PyType_Ready_ADD(PyObject *dict, PyTypeObject *tp, PyAttributeDef *attributes, int init_getset) { PyAttributeDef *attr; - PyObject *item; + + if(init_getset) { + /* we need to do this for all types before calling PyType_Ready + * since they will call the parents PyType_Ready and those might not have initialized vars yet */ + + //if(tp->tp_base==NULL) + // printf("Debug: No Parents - '%s'\n" , tp->tp_name); + + if(tp->tp_getset==NULL && attributes->m_name) { + PyGetSetDef *attr_getset; + int attr_tot= 0; + + for(attr= attributes; attr->m_name; attr++, attr_tot++) {}; + + tp->tp_getset = attr_getset = reinterpret_cast(PyMem_Malloc((attr_tot+1) * sizeof(PyGetSetDef))); // XXX - Todo, free + + + for(attr= attributes; attr->m_name; attr++, attr_getset++) { + attr_getset->name= (char *)attr->m_name; + attr_getset->doc= NULL; + + attr_getset->get= reinterpret_cast(PyObjectPlus::py_get_attrdef); + + if(attr->m_access==KX_PYATTRIBUTE_RO) + attr_getset->set= NULL; + else + attr_getset->set= reinterpret_cast(PyObjectPlus::py_set_attrdef); + + attr_getset->closure= reinterpret_cast(attr); + } + + memset(attr_getset, 0, sizeof(PyGetSetDef)); + } + } else { - PyType_Ready(tp); - PyDict_SetItemString(dict, tp->tp_name, reinterpret_cast(tp)); - - /* store attr defs in the tp_dict for to avoid string lookups */ - for(attr= attributes; attr->m_name; attr++) { - item= PyCObject_FromVoidPtr(attr, NULL); - PyDict_SetItemString(tp->tp_dict, attr->m_name, item); - Py_DECREF(item); + PyObject *item; + + PyType_Ready(tp); + PyDict_SetItemString(dict, tp->tp_name, reinterpret_cast(tp)); } } -#define PyType_Ready_Attr(d, n) PyType_Ready_ADD(d, &n::Type, n::Attributes) +#define PyType_Ready_Attr(d, n, i) PyType_Ready_ADD(d, &n::Type, n::Attributes, i) void initPyTypes(void) { @@ -165,70 +150,74 @@ void initPyTypes(void) PyDict_SetItemString(PySys_GetObject((char *)"modules"), (char *)"GameTypes", mod); Py_DECREF(mod); - PyType_Ready_Attr(dict, BL_ActionActuator); - PyType_Ready_Attr(dict, BL_Shader); - PyType_Ready_Attr(dict, BL_ShapeActionActuator); - PyType_Ready_Attr(dict, CListValue); - PyType_Ready_Attr(dict, CValue); - PyType_Ready_Attr(dict, KX_BlenderMaterial); - PyType_Ready_Attr(dict, KX_CDActuator); - PyType_Ready_Attr(dict, KX_Camera); - PyType_Ready_Attr(dict, KX_CameraActuator); - PyType_Ready_Attr(dict, KX_ConstraintActuator); - PyType_Ready_Attr(dict, KX_ConstraintWrapper); - PyType_Ready_Attr(dict, KX_GameActuator); - PyType_Ready_Attr(dict, KX_GameObject); - PyType_Ready_Attr(dict, KX_IpoActuator); - PyType_Ready_Attr(dict, KX_LightObject); - PyType_Ready_Attr(dict, KX_MeshProxy); - PyType_Ready_Attr(dict, KX_MouseFocusSensor); - PyType_Ready_Attr(dict, KX_NearSensor); - PyType_Ready_Attr(dict, KX_NetworkMessageActuator); - PyType_Ready_Attr(dict, KX_NetworkMessageSensor); - PyType_Ready_Attr(dict, KX_ObjectActuator); - PyType_Ready_Attr(dict, KX_ParentActuator); - PyType_Ready_Attr(dict, KX_PhysicsObjectWrapper); - PyType_Ready_Attr(dict, KX_PolyProxy); - PyType_Ready_Attr(dict, KX_PolygonMaterial); - PyType_Ready_Attr(dict, KX_RadarSensor); - PyType_Ready_Attr(dict, KX_RaySensor); - PyType_Ready_Attr(dict, KX_SCA_AddObjectActuator); - PyType_Ready_Attr(dict, KX_SCA_DynamicActuator); - PyType_Ready_Attr(dict, KX_SCA_EndObjectActuator); - PyType_Ready_Attr(dict, KX_SCA_ReplaceMeshActuator); - PyType_Ready_Attr(dict, KX_Scene); - PyType_Ready_Attr(dict, KX_SceneActuator); - PyType_Ready_Attr(dict, KX_SoundActuator); - PyType_Ready_Attr(dict, KX_StateActuator); - PyType_Ready_Attr(dict, KX_TouchSensor); - PyType_Ready_Attr(dict, KX_TrackToActuator); - PyType_Ready_Attr(dict, KX_VehicleWrapper); - PyType_Ready_Attr(dict, KX_VertexProxy); - PyType_Ready_Attr(dict, KX_VisibilityActuator); - PyType_Ready_Attr(dict, PyObjectPlus); - PyType_Ready_Attr(dict, SCA_2DFilterActuator); - PyType_Ready_Attr(dict, SCA_ANDController); - PyType_Ready_Attr(dict, SCA_ActuatorSensor); - PyType_Ready_Attr(dict, SCA_AlwaysSensor); - PyType_Ready_Attr(dict, SCA_DelaySensor); - PyType_Ready_Attr(dict, SCA_ILogicBrick); - PyType_Ready_Attr(dict, SCA_IObject); - PyType_Ready_Attr(dict, SCA_ISensor); - PyType_Ready_Attr(dict, SCA_JoystickSensor); - PyType_Ready_Attr(dict, SCA_KeyboardSensor); - PyType_Ready_Attr(dict, SCA_MouseSensor); - PyType_Ready_Attr(dict, SCA_NANDController); - PyType_Ready_Attr(dict, SCA_NORController); - PyType_Ready_Attr(dict, SCA_ORController); - PyType_Ready_Attr(dict, SCA_PropertyActuator); - PyType_Ready_Attr(dict, SCA_PropertySensor); - PyType_Ready_Attr(dict, SCA_PythonController); - PyType_Ready_Attr(dict, SCA_RandomActuator); - PyType_Ready_Attr(dict, SCA_RandomSensor); - PyType_Ready_Attr(dict, SCA_XNORController); - PyType_Ready_Attr(dict, SCA_XORController); - PyType_Ready_Attr(dict, SCA_IController); + for(int init_getset= 1; init_getset > -1; init_getset--) { /* run twice, once to init the getsets another to run PyType_Ready */ + PyType_Ready_Attr(dict, BL_ActionActuator, init_getset); + PyType_Ready_Attr(dict, BL_Shader, init_getset); + PyType_Ready_Attr(dict, BL_ShapeActionActuator, init_getset); + PyType_Ready_Attr(dict, CListValue, init_getset); + PyType_Ready_Attr(dict, CValue, init_getset); + PyType_Ready_Attr(dict, KX_BlenderMaterial, init_getset); + PyType_Ready_Attr(dict, KX_CDActuator, init_getset); + PyType_Ready_Attr(dict, KX_Camera, init_getset); + PyType_Ready_Attr(dict, KX_CameraActuator, init_getset); + PyType_Ready_Attr(dict, KX_ConstraintActuator, init_getset); + PyType_Ready_Attr(dict, KX_ConstraintWrapper, init_getset); + PyType_Ready_Attr(dict, KX_GameActuator, init_getset); + PyType_Ready_Attr(dict, KX_GameObject, init_getset); + PyType_Ready_Attr(dict, KX_IpoActuator, init_getset); + PyType_Ready_Attr(dict, KX_LightObject, init_getset); + PyType_Ready_Attr(dict, KX_MeshProxy, init_getset); + PyType_Ready_Attr(dict, KX_MouseFocusSensor, init_getset); + PyType_Ready_Attr(dict, KX_NearSensor, init_getset); + PyType_Ready_Attr(dict, KX_NetworkMessageActuator, init_getset); + PyType_Ready_Attr(dict, KX_NetworkMessageSensor, init_getset); + PyType_Ready_Attr(dict, KX_ObjectActuator, init_getset); + PyType_Ready_Attr(dict, KX_ParentActuator, init_getset); + PyType_Ready_Attr(dict, KX_PhysicsObjectWrapper, init_getset); + PyType_Ready_Attr(dict, KX_PolyProxy, init_getset); + PyType_Ready_Attr(dict, KX_PolygonMaterial, init_getset); + PyType_Ready_Attr(dict, KX_RadarSensor, init_getset); + PyType_Ready_Attr(dict, KX_RaySensor, init_getset); + PyType_Ready_Attr(dict, KX_SCA_AddObjectActuator, init_getset); + PyType_Ready_Attr(dict, KX_SCA_DynamicActuator, init_getset); + PyType_Ready_Attr(dict, KX_SCA_EndObjectActuator, init_getset); + PyType_Ready_Attr(dict, KX_SCA_ReplaceMeshActuator, init_getset); + PyType_Ready_Attr(dict, KX_Scene, init_getset); + PyType_Ready_Attr(dict, KX_SceneActuator, init_getset); + PyType_Ready_Attr(dict, KX_SoundActuator, init_getset); + PyType_Ready_Attr(dict, KX_StateActuator, init_getset); + PyType_Ready_Attr(dict, KX_TouchSensor, init_getset); + PyType_Ready_Attr(dict, KX_TrackToActuator, init_getset); + PyType_Ready_Attr(dict, KX_VehicleWrapper, init_getset); + PyType_Ready_Attr(dict, KX_VertexProxy, init_getset); + PyType_Ready_Attr(dict, KX_VisibilityActuator, init_getset); + PyType_Ready_Attr(dict, PyObjectPlus, init_getset); + PyType_Ready_Attr(dict, SCA_2DFilterActuator, init_getset); + PyType_Ready_Attr(dict, SCA_ANDController, init_getset); + PyType_Ready_Attr(dict, SCA_ActuatorSensor, init_getset); + PyType_Ready_Attr(dict, SCA_AlwaysSensor, init_getset); + PyType_Ready_Attr(dict, SCA_DelaySensor, init_getset); + PyType_Ready_Attr(dict, SCA_ILogicBrick, init_getset); + PyType_Ready_Attr(dict, SCA_IObject, init_getset); + PyType_Ready_Attr(dict, SCA_ISensor, init_getset); + PyType_Ready_Attr(dict, SCA_JoystickSensor, init_getset); + PyType_Ready_Attr(dict, SCA_KeyboardSensor, init_getset); + PyType_Ready_Attr(dict, SCA_MouseSensor, init_getset); + PyType_Ready_Attr(dict, SCA_NANDController, init_getset); + PyType_Ready_Attr(dict, SCA_NORController, init_getset); + PyType_Ready_Attr(dict, SCA_ORController, init_getset); + PyType_Ready_Attr(dict, SCA_PropertyActuator, init_getset); + PyType_Ready_Attr(dict, SCA_PropertySensor, init_getset); + PyType_Ready_Attr(dict, SCA_PythonController, init_getset); + PyType_Ready_Attr(dict, SCA_RandomActuator, init_getset); + PyType_Ready_Attr(dict, SCA_RandomSensor, init_getset); + PyType_Ready_Attr(dict, SCA_XNORController, init_getset); + PyType_Ready_Attr(dict, SCA_XORController, init_getset); + PyType_Ready_Attr(dict, SCA_IController, init_getset); + } + + /* Normal python type */ PyType_Ready(&KX_PythonSeq_Type); diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp index cc8021fc2e4..5b4d77156db 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.cpp +++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp @@ -57,7 +57,7 @@ static Py_ssize_t KX_PythonSeq_len( PyObject * self ) PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); if(self_plus==NULL) { - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + PyErr_SetString(PyExc_SystemError, "len(seq): "BGE_PROXY_ERROR_MSG); return -1; } @@ -84,7 +84,7 @@ static PyObject *KX_PythonSeq_getIndex(PyObject* self, int index) PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); if(self_plus==NULL) { - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + PyErr_SetString(PyExc_SystemError, "val = seq[i]: "BGE_PROXY_ERROR_MSG); return NULL; } @@ -145,25 +145,9 @@ static PyObject *KX_PythonSeq_getIndex(PyObject* self, int index) return NULL; } - -static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) +static PyObjectPlus * KX_PythonSeq_subscript__internal(PyObject *self, char *key) { PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); - char *name = NULL; - - if(self_plus==NULL) { - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); - return NULL; - } - - if (PyInt_Check(key)) { - return KX_PythonSeq_getIndex(self, PyInt_AS_LONG( key )); - } else if ( PyString_Check(key) ) { - name = PyString_AsString( key ); - } else { - PyErr_SetString( PyExc_TypeError, "expected a string or an index" ); - return NULL; - } switch(((KX_PythonSeq *)self)->type) { case KX_PYGENSEQ_CONT_TYPE_SENSORS: @@ -172,8 +156,9 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) SCA_ISensor* sensor; for (unsigned int index=0;indexGetName() == name) - return sensor->GetProxy(); + if (sensor->GetName() == key) + return static_cast(sensor); + } break; } @@ -183,8 +168,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) SCA_IActuator* actuator; for (unsigned int index=0;indexGetName() == name) - return actuator->GetProxy(); + if (actuator->GetName() == key) + return static_cast(actuator); } break; } @@ -194,8 +179,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) SCA_ISensor *sensor; for (unsigned int index=0;indexGetName() == name) - return sensor->GetProxy(); + if (sensor->GetName() == key) + return static_cast(sensor); } break; } @@ -205,8 +190,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) SCA_IController *controller; for (unsigned int index=0;indexGetName() == name) - return controller->GetProxy(); + if (controller->GetName() == key) + return static_cast(controller); } break; } @@ -216,23 +201,105 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) SCA_IActuator *actuator; for (unsigned int index=0;indexGetName() == name) - return actuator->GetProxy(); + if (actuator->GetName() == key) + return static_cast(actuator); } break; } } - PyErr_Format( PyExc_KeyError, "requested item \"%s\" does not exist", name); return NULL; } + +static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key) +{ + PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); + + if(self_plus==NULL) { + PyErr_SetString(PyExc_SystemError, "val = seq[key], KX_PythonSeq: "BGE_PROXY_ERROR_MSG); + return NULL; + } + + if (PyLong_Check(key)) { + return KX_PythonSeq_getIndex(self, PyLong_AsSsize_t( key )); + } + else if ( PyUnicode_Check(key) ) { + char *name = _PyUnicode_AsString(key); + PyObjectPlus *ret = KX_PythonSeq_subscript__internal(self, name); + + if(ret) { + return ret->GetProxy(); + } else { + PyErr_Format( PyExc_KeyError, "requested item \"%s\" does not exist", name); + return NULL; + } + } + else { + PyErr_SetString( PyExc_TypeError, "expected a string or an index" ); + return NULL; + } +} + + +static int KX_PythonSeq_contains(PyObject *self, PyObject *key) +{ + PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base); + + if(self_plus==NULL) { + PyErr_SetString(PyExc_SystemError, "key in seq, KX_PythonSeq: "BGE_PROXY_ERROR_MSG); + return -1; + } + if(!PyUnicode_Check(key)) { + PyErr_SetString(PyExc_SystemError, "key in seq, KX_PythonSeq: key must be a string"); + return -1; + } + + if(KX_PythonSeq_subscript__internal(self, _PyUnicode_AsString(key))) + return 1; + + return 0; +} + +/* Matches python dict.get(key, [default]) */ +PyObject* KX_PythonSeq_get(PyObject * self, PyObject *args) +{ + char *key; + PyObject* def = Py_None; + PyObjectPlus* ret_plus; + + if (!PyArg_ParseTuple(args, "s|O:get", &key, &def)) + return NULL; + + if((ret_plus = KX_PythonSeq_subscript__internal(self, key))) + return ret_plus->GetProxy(); + + Py_INCREF(def); + return def; +} + +PySequenceMethods KX_PythonSeq_as_sequence = { + NULL, /* Cant set the len otherwise it can evaluate as false */ + NULL, /* sq_concat */ + NULL, /* sq_repeat */ + NULL, /* sq_item */ + NULL, /* sq_slice */ + NULL, /* sq_ass_item */ + NULL, /* sq_ass_slice */ + (objobjproc)KX_PythonSeq_contains, /* sq_contains */ +}; + static PyMappingMethods KX_PythonSeq_as_mapping = { KX_PythonSeq_len, /* mp_length */ KX_PythonSeq_subscript, /* mp_subscript */ 0, /* mp_ass_subscript */ }; +PyMethodDef KX_PythonSeq_methods[] = { + // dict style access for props + {"get",(PyCFunction) KX_PythonSeq_get, METH_VARARGS}, + {NULL,NULL} //Sentinel +}; /* * Initialize the interator index @@ -241,7 +308,7 @@ static PyMappingMethods KX_PythonSeq_as_mapping = { static PyObject *KX_PythonSeq_getIter(KX_PythonSeq *self) { if(BGE_PROXY_REF(self->base)==NULL) { - PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG); + PyErr_SetString(PyExc_SystemError, "for i in seq: "BGE_PROXY_ERROR_MSG); return NULL; } @@ -313,13 +380,17 @@ PyTypeObject KX_PythonSeq_Type = { NULL, /* printfunc tp_print; */ NULL, /* getattrfunc tp_getattr; */ NULL, /* setattrfunc tp_setattr; */ +#if PY_VERSION_HEX >= 0x03000000 // TODO - richcmp + NULL, +#else ( cmpfunc ) KX_PythonSeq_compare, /* cmpfunc tp_compare; */ +#endif ( reprfunc ) KX_PythonSeq_repr, /* reprfunc tp_repr; */ /* Method suites for standard classes */ NULL, /* PyNumberMethods *tp_as_number; */ - NULL, /* PySequenceMethods *tp_as_sequence; */ + &KX_PythonSeq_as_sequence, /* PySequenceMethods *tp_as_sequence; */ &KX_PythonSeq_as_mapping, /* PyMappingMethods *tp_as_mapping; */ /* More standard operations (here for binary compatibility) */ @@ -357,7 +428,7 @@ PyTypeObject KX_PythonSeq_Type = { ( iternextfunc ) KX_PythonSeq_nextIter, /* iternextfunc tp_iternext; */ /*** Attribute descriptor and subclassing stuff ***/ - NULL, /* struct PyMethodDef *tp_methods; */ + KX_PythonSeq_methods, /* struct PyMethodDef *tp_methods; */ NULL, /* struct PyMemberDef *tp_members; */ NULL, /* struct PyGetSetDef *tp_getset; */ NULL, /* struct _typeobject *tp_base; */ diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp index 064dc9126ac..e39d3756b71 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.cpp +++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp @@ -49,8 +49,7 @@ KX_RadarSensor::KX_RadarSensor(SCA_EventManager* eventmgr, double resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* kxscene, - PyTypeObject* T) + class KX_Scene* kxscene) : KX_NearSensor( eventmgr, @@ -61,8 +60,8 @@ KX_RadarSensor::KX_RadarSensor(SCA_EventManager* eventmgr, bFindMaterial, touchedpropname, kxscene, - physCtrl, - T), + physCtrl), + m_coneradius(coneradius), m_coneheight(coneheight), m_axis(axis) @@ -245,21 +244,15 @@ PyTypeObject KX_RadarSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_RadarSensor::Parents[] = { - &KX_RadarSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &KX_NearSensor::Type, - &KX_TouchSensor::Type, - &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_RadarSensor::Methods[] = { @@ -283,16 +276,3 @@ PyAttributeDef KX_RadarSensor::Attributes[] = { {NULL} //Sentinel }; -PyObject* KX_RadarSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(KX_NearSensor); -} - -PyObject* KX_RadarSensor::py_getattro_dict() { - py_getattro_dict_up(KX_NearSensor); -} - -int KX_RadarSensor::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(KX_NearSensor); -} diff --git a/source/gameengine/Ketsji/KX_RadarSensor.h b/source/gameengine/Ketsji/KX_RadarSensor.h index 2e5a0e68bed..344be0e399f 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.h +++ b/source/gameengine/Ketsji/KX_RadarSensor.h @@ -70,8 +70,7 @@ public: double resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* kxscene, - PyTypeObject* T = &Type); + class KX_Scene* kxscene); KX_RadarSensor(); virtual ~KX_RadarSensor(); virtual void SynchronizeTransform(); @@ -89,9 +88,7 @@ public: KX_RADAR_AXIS_NEG_Z }; - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); + /* python */ virtual sensortype GetSensorType() { return ST_RADAR; } //Deprecated -----> diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp index 78a61e9d95e..3f27496df71 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.cpp +++ b/source/gameengine/Ketsji/KX_RaySensor.cpp @@ -55,9 +55,8 @@ KX_RaySensor::KX_RaySensor(class SCA_EventManager* eventmgr, bool bXRay, double distance, int axis, - KX_Scene* ketsjiScene, - PyTypeObject* T) - : SCA_ISensor(gameobj,eventmgr, T), + KX_Scene* ketsjiScene) + : SCA_ISensor(gameobj,eventmgr), m_propertyname(propname), m_bFindMaterial(bFindMaterial), m_bXRay(bXRay), @@ -336,20 +335,16 @@ PyTypeObject KX_RaySensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods - -}; - -PyParentObject KX_RaySensor::Parents[] = { - &KX_RaySensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new + }; PyMethodDef KX_RaySensor::Methods[] = { @@ -447,18 +442,4 @@ PyObject* KX_RaySensor::PyGetHitNormal() return retVal; } - - -PyObject* KX_RaySensor::py_getattro(PyObject *attr) { - py_getattro_up(SCA_ISensor); -} - -PyObject* KX_RaySensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int KX_RaySensor::py_setattro(PyObject *attr, PyObject *value) { - py_setattro_up(SCA_ISensor); -} - // <----- Deprecated diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h index 9efb046742f..530c8ce54e5 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.h +++ b/source/gameengine/Ketsji/KX_RaySensor.h @@ -62,8 +62,7 @@ public: bool bXRay, double distance, int axis, - class KX_Scene* ketsjiScene, - PyTypeObject* T = &Type); + class KX_Scene* ketsjiScene); virtual ~KX_RaySensor(); virtual CValue* GetReplica(); @@ -84,11 +83,6 @@ public: KX_RAY_AXIS_NEG_Y, KX_RAY_AXIS_NEG_Z }; - - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); // Deprecated -----> KX_PYMETHOD_DOC_NOARGS(KX_RaySensor,GetHitObject); diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp index 75435b97797..239c4a0be67 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp @@ -55,10 +55,9 @@ KX_SCA_AddObjectActuator::KX_SCA_AddObjectActuator(SCA_IObject *gameobj, const float *linvel, bool linv_local, const float *angvel, - bool angv_local, - PyTypeObject* T) + bool angv_local) : - SCA_IActuator(gameobj, T), + SCA_IActuator(gameobj), m_OriginalObject(original), m_scene(scene), @@ -187,20 +186,17 @@ PyTypeObject KX_SCA_AddObjectActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_IActuator::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject KX_SCA_AddObjectActuator::Parents[] = { - &KX_SCA_AddObjectActuator::Type, - &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL -}; PyMethodDef KX_SCA_AddObjectActuator::Methods[] = { // ---> deprecated {"setTime", (PyCFunction) KX_SCA_AddObjectActuator::sPySetTime, METH_O, (PY_METHODCHAR)SetTime_doc}, @@ -263,21 +259,6 @@ PyObject* KX_SCA_AddObjectActuator::pyattr_get_objectLastCreated(void *self, con return actuator->m_lastCreatedObject->GetProxy(); } - -PyObject* KX_SCA_AddObjectActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SCA_AddObjectActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_SCA_AddObjectActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - /* 1. setObject */ const char KX_SCA_AddObjectActuator::SetObject_doc[] = "setObject(object)\n" @@ -316,7 +297,7 @@ const char KX_SCA_AddObjectActuator::SetTime_doc[] = PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* value) { ShowDeprecationWarning("setTime()", "the time property"); - int deltatime = PyInt_AsLong(value); + int deltatime = PyLong_AsSsize_t(value); if (deltatime==-1 && PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "expected an int"); return NULL; @@ -339,7 +320,7 @@ const char KX_SCA_AddObjectActuator::GetTime_doc[] = PyObject* KX_SCA_AddObjectActuator::PyGetTime() { ShowDeprecationWarning("getTime()", "the time property"); - return PyInt_FromLong(m_timeProp); + return PyLong_FromSsize_t(m_timeProp); } @@ -361,7 +342,7 @@ PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* args) Py_RETURN_NONE; if (ret_name_only) - return PyString_FromString(m_OriginalObject->GetName().ReadPtr()); + return PyUnicode_FromString(m_OriginalObject->GetName().ReadPtr()); else return m_OriginalObject->GetProxy(); } diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h index 6746b7d1bc6..3151e7a89ca 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h @@ -88,8 +88,7 @@ public: const float *linvel, bool linv_local, const float *angvel, - bool angv_local, - PyTypeObject* T=&Type + bool angv_local ); ~KX_SCA_AddObjectActuator(void); @@ -110,10 +109,6 @@ public: virtual bool Update(); - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - SCA_IObject* GetLastCreatedObject( ) const ; diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp index a50764a54e6..423fd0db7f2 100644 --- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp @@ -47,9 +47,7 @@ /* Integration hooks ------------------------------------------------------- */ - PyTypeObject - -KX_SCA_DynamicActuator::Type = { +PyTypeObject KX_SCA_DynamicActuator::Type = { #if (PY_VERSION_HEX >= 0x02060000) PyVarObject_HEAD_INIT(NULL, 0) #else @@ -66,22 +64,17 @@ KX_SCA_DynamicActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_SCA_DynamicActuator::Parents[] = { - &KX_SCA_DynamicActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - PyMethodDef KX_SCA_DynamicActuator::Methods[] = { // ---> deprecated KX_PYMETHODTABLE(KX_SCA_DynamicActuator, setOperation), @@ -96,21 +89,6 @@ PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = { }; -PyObject* KX_SCA_DynamicActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SCA_DynamicActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_SCA_DynamicActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - - /* 1. setOperation */ KX_PYMETHODDEF_DOC(KX_SCA_DynamicActuator, setOperation, "setOperation(operation?)\n" @@ -142,7 +120,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_DynamicActuator, getOperation, ) { ShowDeprecationWarning("getOperation()", "the mode property"); - return PyInt_FromLong((long)m_dyn_operation); + return PyLong_FromSsize_t((long)m_dyn_operation); } @@ -152,10 +130,9 @@ KX_PYMETHODDEF_DOC(KX_SCA_DynamicActuator, getOperation, KX_SCA_DynamicActuator::KX_SCA_DynamicActuator(SCA_IObject *gameobj, short dyn_operation, - float setmass, - PyTypeObject* T) : + float setmass) : - SCA_IActuator(gameobj, T), + SCA_IActuator(gameobj), m_dyn_operation(dyn_operation), m_setmass(setmass) { diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h index 4add707f8cd..8b598c9ecfa 100644 --- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h @@ -50,8 +50,7 @@ class KX_SCA_DynamicActuator : public SCA_IActuator KX_SCA_DynamicActuator( SCA_IObject* gameobj, short dyn_operation, - float setmass, - PyTypeObject* T=&Type + float setmass ); ~KX_SCA_DynamicActuator( @@ -73,11 +72,6 @@ class KX_SCA_DynamicActuator : public SCA_IActuator KX_DYN_SET_MASS, }; - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* 1. setOperation */ KX_PYMETHOD_DOC(KX_SCA_DynamicActuator,setOperation); KX_PYMETHOD_DOC(KX_SCA_DynamicActuator,getOperation); diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp index 728254e7f48..47c5c3aeeeb 100644 --- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp @@ -43,9 +43,8 @@ #endif KX_SCA_EndObjectActuator::KX_SCA_EndObjectActuator(SCA_IObject *gameobj, - SCA_IScene* scene, - PyTypeObject* T): - SCA_IActuator(gameobj, T), + SCA_IScene* scene): + SCA_IActuator(gameobj), m_scene(scene) { // intentionally empty @@ -108,24 +107,17 @@ PyTypeObject KX_SCA_EndObjectActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - -PyParentObject KX_SCA_EndObjectActuator::Parents[] = { - &KX_SCA_EndObjectActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_SCA_EndObjectActuator::Methods[] = { {NULL,NULL} //Sentinel }; @@ -134,13 +126,4 @@ PyAttributeDef KX_SCA_EndObjectActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_SCA_EndObjectActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SCA_EndObjectActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - /* eof */ diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h index 70d72f1f8da..782a24b1ef1 100644 --- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h @@ -47,8 +47,7 @@ class KX_SCA_EndObjectActuator : public SCA_IActuator public: KX_SCA_EndObjectActuator( SCA_IObject* gameobj, - SCA_IScene* scene, - PyTypeObject* T=&Type + SCA_IScene* scene ); ~KX_SCA_EndObjectActuator(); @@ -63,9 +62,6 @@ class KX_SCA_EndObjectActuator : public SCA_IActuator /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); }; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp index 00842d7012a..2884bb76565 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp @@ -50,9 +50,7 @@ /* Integration hooks ------------------------------------------------------- */ - PyTypeObject - -KX_SCA_ReplaceMeshActuator::Type = { +PyTypeObject KX_SCA_ReplaceMeshActuator::Type = { #if (PY_VERSION_HEX >= 0x02060000) PyVarObject_HEAD_INIT(NULL, 0) #else @@ -69,23 +67,17 @@ KX_SCA_ReplaceMeshActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = { - &KX_SCA_ReplaceMeshActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = { KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, instantReplaceMesh), // Deprecated -----> @@ -99,20 +91,6 @@ PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_SCA_ReplaceMeshActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SCA_ReplaceMeshActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_SCA_ReplaceMeshActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - PyObject* KX_SCA_ReplaceMeshActuator::pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { KX_SCA_ReplaceMeshActuator* actuator = static_cast(self); @@ -161,7 +139,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh, if (!m_mesh) Py_RETURN_NONE; - return PyString_FromString(const_cast(m_mesh->GetName().ReadPtr())); + return PyUnicode_FromString(const_cast(m_mesh->GetName().ReadPtr())); } @@ -178,10 +156,9 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh, KX_SCA_ReplaceMeshActuator::KX_SCA_ReplaceMeshActuator(SCA_IObject *gameobj, class RAS_MeshObject *mesh, - SCA_IScene* scene, - PyTypeObject* T) : + SCA_IScene* scene) : - SCA_IActuator(gameobj, T), + SCA_IActuator(gameobj), m_mesh(mesh), m_scene(scene) { diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h index 0e7f7852701..6a68bd88cc5 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h @@ -55,9 +55,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator KX_SCA_ReplaceMeshActuator( SCA_IObject* gameobj, RAS_MeshObject *mesh, - SCA_IScene* scene, - PyTypeObject* T=&Type - ); + SCA_IScene* scene); ~KX_SCA_ReplaceMeshActuator( ); @@ -71,10 +69,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator void InstantReplaceMesh(); - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - + /* python api */ static PyObject* pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index c0d8a7090c4..51f5276e075 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -138,7 +138,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice, class SND_IAudioDevice* adi, const STR_String& sceneName, Scene *scene): - PyObjectPlus(&KX_Scene::Type), + PyObjectPlus(), m_keyboardmgr(NULL), m_mousemgr(NULL), m_sceneConverter(NULL), @@ -1629,17 +1629,15 @@ PyTypeObject KX_Scene::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_Scene::Parents[] = { - &KX_Scene::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_Scene::Methods[] = { @@ -1654,7 +1652,7 @@ PyMethodDef KX_Scene::Methods[] = { PyObject* KX_Scene::pyattr_get_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_Scene* self= static_cast(self_v); - return PyString_FromString(self->GetName().ReadPtr()); + return PyUnicode_FromString(self->GetName().ReadPtr()); } PyObject* KX_Scene::pyattr_get_objects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) @@ -1730,72 +1728,6 @@ PyAttributeDef KX_Scene::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_Scene::py_getattro__internal(PyObject *attr) -{ - py_getattro_up(PyObjectPlus); -} - -int KX_Scene::py_setattro__internal(PyObject *attr, PyObject *value) -{ - py_setattro_up(PyObjectPlus); -} - -PyObject* KX_Scene::py_getattro(PyObject *attr) -{ - PyObject *object = py_getattro__internal(attr); - - if (object==NULL) - { - PyErr_Clear(); - object = PyDict_GetItem(m_attr_dict, attr); - if(object) { - Py_INCREF(object); - } - else { - PyErr_Format(PyExc_AttributeError, "value = scene.myAttr: KX_Scene, attribute \"%s\" not found", PyString_AsString(attr)); - } - } - - return object; -} - -PyObject* KX_Scene::py_getattro_dict() { - //py_getattro_dict_up(PyObjectPlus); - - PyObject *dict= py_getattr_dict(PyObjectPlus::py_getattro_dict(), Type.tp_dict); - if(dict==NULL) - return NULL; - - /* normally just return this but KX_Scene has some more items */ - - PyDict_Update(dict, m_attr_dict); - return dict; -} - -int KX_Scene::py_setattro(PyObject *attr, PyObject *value) -{ - int ret= py_setattro__internal(attr, value); - - if (ret==PY_SET_ATTR_MISSING) { - if (PyDict_SetItem(m_attr_dict, attr, value)==0) { - PyErr_Clear(); - ret= PY_SET_ATTR_SUCCESS; - } - else { - PyErr_SetString(PyExc_AttributeError, "scene.UserAttr = value: KX_Scenes, failed assigning value to internal dictionary"); - ret= PY_SET_ATTR_FAIL; - } - } - - return ret; -} - -int KX_Scene::py_delattro(PyObject *attr) -{ - PyDict_DelItem(m_attr_dict, attr); - return 0; -} - KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getLightList, "getLightList() -> list [KX_Light]\n" "Returns a list of all lights in the scene.\n" @@ -1820,7 +1752,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getName, ) { ShowDeprecationWarning("getName()", "the name property"); - return PyString_FromString(GetName()); + return PyUnicode_FromString(GetName()); } KX_PYMETHODDEF_DOC(KX_Scene, addObject, diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index 79d3f7fd828..2792f1f5fe4 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -563,15 +563,7 @@ public: static PyObject* pyattr_get_active_camera(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_active_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); - virtual PyObject* py_getattro(PyObject *attr); /* name, active_camera, gravity, suspended, viewport, framing, activity_culling, activity_culling_radius */ - virtual PyObject* py_getattro_dict(); - - virtual int py_setattro(PyObject *attr, PyObject *value); - virtual int py_delattro(PyObject *attr); - virtual PyObject* py_repr(void) { return PyString_FromString(GetName().ReadPtr()); } - - PyObject* py_getattro__internal(PyObject *attr); - int py_setattro__internal(PyObject *attr, PyObject *pyvalue); + virtual PyObject* py_repr(void) { return PyUnicode_FromString(GetName().ReadPtr()); } /** * Sets the time the scene was suspended diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp index 1b790ec9824..5528e58ef77 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.cpp +++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp @@ -49,9 +49,8 @@ KX_SceneActuator::KX_SceneActuator(SCA_IObject *gameobj, KX_Scene *scene, KX_KetsjiEngine* ketsjiEngine, const STR_String& nextSceneName, - KX_Camera* camera, - PyTypeObject* T) - : SCA_IActuator(gameobj, T) + KX_Camera* camera) + : SCA_IActuator(gameobj) { m_mode = mode; m_scene = scene; @@ -134,7 +133,7 @@ bool KX_SceneActuator::Update() { // if no camera is set and the parent object is a camera, use it as the camera SCA_IObject* parent = GetParent(); - if (parent->isA(&KX_Camera::Type)) + if (parent->GetGameObjectType()==SCA_IObject::OBJ_CAMERA) { m_scene->SetActiveCamera((KX_Camera*)parent); } @@ -239,26 +238,17 @@ PyTypeObject KX_SceneActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject KX_SceneActuator::Parents[] = -{ - &KX_SceneActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_SceneActuator::Methods[] = { //Deprecated functions ------> @@ -280,20 +270,6 @@ PyAttributeDef KX_SceneActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_SceneActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SceneActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_SceneActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - PyObject* KX_SceneActuator::pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { KX_SceneActuator* actuator = static_cast(self); @@ -355,7 +331,7 @@ const char KX_SceneActuator::GetUseRestart_doc[] = PyObject* KX_SceneActuator::PyGetUseRestart() { ShowDeprecationWarning("getUseRestart()", "the useRestart property"); - return PyInt_FromLong(!(m_restart == 0)); + return PyLong_FromSsize_t(!(m_restart == 0)); } @@ -391,7 +367,7 @@ const char KX_SceneActuator::GetScene_doc[] = PyObject* KX_SceneActuator::PyGetScene() { ShowDeprecationWarning("getScene()", "the scene property"); - return PyString_FromString(m_nextSceneName); + return PyUnicode_FromString(m_nextSceneName); } @@ -432,7 +408,7 @@ PyObject* KX_SceneActuator::PyGetCamera() { ShowDeprecationWarning("getCamera()", "the camera property"); if (m_camera) { - return PyString_FromString(m_camera->GetName()); + return PyUnicode_FromString(m_camera->GetName()); } else { Py_RETURN_NONE; diff --git a/source/gameengine/Ketsji/KX_SceneActuator.h b/source/gameengine/Ketsji/KX_SceneActuator.h index 2412dd02590..86de3395d1e 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.h +++ b/source/gameengine/Ketsji/KX_SceneActuator.h @@ -77,8 +77,7 @@ class KX_SceneActuator : public SCA_IActuator KX_Scene* scene, KX_KetsjiEngine* ketsjiEngine, const STR_String& nextSceneName, - KX_Camera* camera, - PyTypeObject* T=&Type); + KX_Camera* camera); virtual ~KX_SceneActuator(); virtual CValue* GetReplica(); @@ -92,10 +91,6 @@ class KX_SceneActuator : public SCA_IActuator /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - /* 1. set */ /* Removed */ diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp index c13271f66a5..673f42283dd 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.cpp +++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp @@ -50,9 +50,8 @@ KX_SoundActuator::KX_SoundActuator(SCA_IObject* gameobj, SND_Scene* sndscene, KX_SOUNDACT_TYPE type, short start, - short end, - PyTypeObject* T) - : SCA_IActuator(gameobj,T) + short end) + : SCA_IActuator(gameobj) { m_soundObject = sndobj; m_soundScene = sndscene; @@ -250,25 +249,17 @@ PyTypeObject KX_SoundActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - - - -PyParentObject KX_SoundActuator::Parents[] = { - &KX_SoundActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; - - PyMethodDef KX_SoundActuator::Methods[] = { // Deprecated -----> {"setFilename", (PyCFunction) KX_SoundActuator::sPySetFilename, METH_VARARGS,NULL}, @@ -340,25 +331,13 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, stopSound, } /* Atribute setting and getting -------------------------------------------- */ -PyObject* KX_SoundActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_SoundActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_SoundActuator::py_setattro(PyObject *attr, PyObject* value) { - py_setattro_up(SCA_IActuator); -} PyObject* KX_SoundActuator::pyattr_get_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { KX_SoundActuator * actuator = static_cast (self); if (!actuator->m_soundObject) { - return PyString_FromString(""); + return PyUnicode_FromString(""); } STR_String objectname = actuator->m_soundObject->GetObjectName(); char* name = objectname.Ptr(); @@ -367,7 +346,7 @@ PyObject* KX_SoundActuator::pyattr_get_filename(void *self, const struct KX_PYAT PyErr_SetString(PyExc_RuntimeError, "value = actuator.fileName: KX_SoundActuator, unable to get sound fileName"); return NULL; } else - return PyString_FromString(name); + return PyUnicode_FromString(name); } PyObject* KX_SoundActuator::pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) @@ -402,7 +381,7 @@ PyObject* KX_SoundActuator::pyattr_get_looping(void *self, const struct KX_PYATT { KX_SoundActuator * actuator = static_cast (self); int looping = (actuator->m_soundObject) ? actuator->m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF; - PyObject* result = PyInt_FromLong(looping); + PyObject* result = PyLong_FromSsize_t(looping); return result; } @@ -580,7 +559,7 @@ PyObject* KX_SoundActuator::PyGetFilename() ShowDeprecationWarning("getFilename()", "the fileName property"); if (!m_soundObject) { - return PyString_FromString(""); + return PyUnicode_FromString(""); } STR_String objectname = m_soundObject->GetObjectName(); char* name = objectname.Ptr(); @@ -589,7 +568,7 @@ PyObject* KX_SoundActuator::PyGetFilename() PyErr_SetString(PyExc_RuntimeError, "Unable to get sound fileName"); return NULL; } else - return PyString_FromString(name); + return PyUnicode_FromString(name); } PyObject* KX_SoundActuator::PySetGain(PyObject* args) @@ -689,7 +668,7 @@ PyObject* KX_SoundActuator::PyGetLooping() { ShowDeprecationWarning("getLooping()", "the looping property"); int looping = (m_soundObject) ? m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF; - PyObject* result = PyInt_FromLong(looping); + PyObject* result = PyLong_FromSsize_t(looping); return result; } @@ -777,7 +756,7 @@ PyObject* KX_SoundActuator::PySetType(PyObject* args) PyObject* KX_SoundActuator::PyGetType() { ShowDeprecationWarning("getType()", "the mode property"); - return PyInt_FromLong(m_type); + return PyLong_FromSsize_t(m_type); } // <----- diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h index a7491355667..adafee0a30b 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.h +++ b/source/gameengine/Ketsji/KX_SoundActuator.h @@ -66,8 +66,7 @@ public: class SND_Scene* sndscene, KX_SOUNDACT_TYPE type, short start, - short end, - PyTypeObject* T=&Type); + short end); ~KX_SoundActuator(); @@ -81,10 +80,6 @@ public: /* Python interface --------------------------------------------------- */ /* -------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); - KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, startSound); KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, pauseSound); KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, stopSound); diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp index f6979eee0f4..9815d6274aa 100644 --- a/source/gameengine/Ketsji/KX_StateActuator.cpp +++ b/source/gameengine/Ketsji/KX_StateActuator.cpp @@ -38,10 +38,9 @@ KX_StateActuator::KX_StateActuator( SCA_IObject* gameobj, int operation, - unsigned int mask, - PyTypeObject* T + unsigned int mask ) - : SCA_IActuator(gameobj,T), + : SCA_IActuator(gameobj), m_operation(operation), m_mask(mask) { @@ -154,24 +153,18 @@ PyTypeObject KX_StateActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject -KX_StateActuator::Parents[] = { - &KX_StateActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; -PyMethodDef -KX_StateActuator::Methods[] = { +PyMethodDef KX_StateActuator::Methods[] = { // deprecated --> {"setOperation", (PyCFunction) KX_StateActuator::sPySetOperation, METH_VARARGS, (PY_METHODCHAR)SetOperation_doc}, @@ -187,20 +180,6 @@ PyAttributeDef KX_StateActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_StateActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_StateActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_StateActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - /* set operation ---------------------------------------------------------- */ const char diff --git a/source/gameengine/Ketsji/KX_StateActuator.h b/source/gameengine/Ketsji/KX_StateActuator.h index a4191a4c5fd..ce86c4b44fe 100644 --- a/source/gameengine/Ketsji/KX_StateActuator.h +++ b/source/gameengine/Ketsji/KX_StateActuator.h @@ -66,9 +66,8 @@ class KX_StateActuator : public SCA_IActuator KX_StateActuator( SCA_IObject* gameobj, int operation, - unsigned int mask, - PyTypeObject* T=&Type - ); + unsigned int mask + ); virtual ~KX_StateActuator( @@ -89,10 +88,6 @@ class KX_StateActuator : public SCA_IActuator /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); //KX_PYMETHOD_DOC KX_PYMETHOD_DOC_VARARGS(KX_StateActuator,SetOperation); KX_PYMETHOD_DOC_VARARGS(KX_StateActuator,SetMask); diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp index c06acd4a873..b0cf172c27a 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.cpp +++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp @@ -97,8 +97,8 @@ bool KX_TouchSensor::Evaluate() return result; } -KX_TouchSensor::KX_TouchSensor(SCA_EventManager* eventmgr,KX_GameObject* gameobj,bool bFindMaterial,bool bTouchPulse,const STR_String& touchedpropname,PyTypeObject* T) -:SCA_ISensor(gameobj,eventmgr,T), +KX_TouchSensor::KX_TouchSensor(SCA_EventManager* eventmgr,KX_GameObject* gameobj,bool bFindMaterial,bool bTouchPulse,const STR_String& touchedpropname) +:SCA_ISensor(gameobj,eventmgr), m_touchedpropname(touchedpropname), m_bFindMaterial(bFindMaterial), m_bTouchPulse(bTouchPulse), @@ -310,19 +310,15 @@ PyTypeObject KX_TouchSensor::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_TouchSensor::Parents[] = { - &KX_TouchSensor::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_ISensor::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_TouchSensor::Methods[] = { @@ -348,20 +344,6 @@ PyAttributeDef KX_TouchSensor::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_TouchSensor::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_ISensor); -} - -PyObject* KX_TouchSensor::py_getattro_dict() { - py_getattro_dict_up(SCA_ISensor); -} - -int KX_TouchSensor::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_ISensor); -} - /* Python API */ /* 1. setProperty */ @@ -374,7 +356,7 @@ const char KX_TouchSensor::SetProperty_doc[] = PyObject* KX_TouchSensor::PySetProperty(PyObject* value) { ShowDeprecationWarning("setProperty()", "the propName property"); - char *nameArg= PyString_AsString(value); + char *nameArg= _PyUnicode_AsString(value); if (nameArg==NULL) { PyErr_SetString(PyExc_ValueError, "expected a "); return NULL; @@ -392,7 +374,7 @@ const char KX_TouchSensor::GetProperty_doc[] = PyObject* KX_TouchSensor::PyGetProperty() { ShowDeprecationWarning("getProperty()", "the propName property"); - return PyString_FromString(m_touchedpropname); + return PyUnicode_FromString(m_touchedpropname); } const char KX_TouchSensor::GetHitObject_doc[] = @@ -433,7 +415,7 @@ const char KX_TouchSensor::GetTouchMaterial_doc[] = PyObject* KX_TouchSensor::PyGetTouchMaterial() { ShowDeprecationWarning("getTouchMaterial()", "the useMaterial property"); - return PyInt_FromLong(m_bFindMaterial); + return PyLong_FromSsize_t(m_bFindMaterial); } /* 6. setTouchMaterial */ @@ -446,7 +428,7 @@ const char KX_TouchSensor::SetTouchMaterial_doc[] = PyObject* KX_TouchSensor::PySetTouchMaterial(PyObject *value) { ShowDeprecationWarning("setTouchMaterial()", "the useMaterial property"); - int pulseArg = PyInt_AsLong(value); + int pulseArg = PyLong_AsSsize_t(value); if(pulseArg ==-1 && PyErr_Occurred()) { PyErr_SetString(PyExc_ValueError, "expected a bool"); diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h index 476c63e89db..6cbf5b15e3b 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.h +++ b/source/gameengine/Ketsji/KX_TouchSensor.h @@ -79,8 +79,7 @@ public: class KX_GameObject* gameobj, bool bFindMaterial, bool bTouchPulse, - const STR_String& touchedpropname, - PyTypeObject* T=&Type) ; + const STR_String& touchedpropname) ; virtual ~KX_TouchSensor(); virtual CValue* GetReplica(); @@ -121,10 +120,6 @@ public: /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); //Deprecated -----> /* 1. setProperty */ diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp index 5a50d0fb944..e8a06d8d619 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp +++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp @@ -59,10 +59,8 @@ KX_TrackToActuator::KX_TrackToActuator(SCA_IObject *gameobj, int time, bool allow3D, int trackflag, - int upflag, - PyTypeObject* T) - : - SCA_IActuator(gameobj, T) + int upflag) + : SCA_IActuator(gameobj) { m_time = time; m_allow3D = allow3D; @@ -74,7 +72,6 @@ KX_TrackToActuator::KX_TrackToActuator(SCA_IObject *gameobj, if (m_object) m_object->RegisterActuator(this); - if (gameobj->isA(&KX_GameObject::Type)) { // if the object is vertex parented, don't check parent orientation as the link is broken if (!((KX_GameObject*)gameobj)->IsVertexParent()){ @@ -450,25 +447,17 @@ PyTypeObject KX_TrackToActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &SCA_IActuator::Type, + 0,0,0,0,0,0, + py_base_new }; - - -PyParentObject KX_TrackToActuator::Parents[] = { - &KX_TrackToActuator::Type, - &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL -}; - - - PyMethodDef KX_TrackToActuator::Methods[] = { // ---> deprecated {"setTime", (PyCFunction) KX_TrackToActuator::sPySetTime, METH_VARARGS, (PY_METHODCHAR)SetTime_doc}, @@ -518,20 +507,6 @@ int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUT } -PyObject* KX_TrackToActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_TrackToActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_TrackToActuator::py_setattro(PyObject *attr, PyObject* value) -{ - py_setattro_up(SCA_IActuator); -} - /* 1. setObject */ const char KX_TrackToActuator::SetObject_doc[] = "setObject(object)\n" @@ -576,7 +551,7 @@ PyObject* KX_TrackToActuator::PyGetObject(PyObject* args) Py_RETURN_NONE; if (ret_name_only) - return PyString_FromString(m_object->GetName()); + return PyUnicode_FromString(m_object->GetName()); else return m_object->GetProxy(); } @@ -613,7 +588,7 @@ const char KX_TrackToActuator::GetTime_doc[] = PyObject* KX_TrackToActuator::PyGetTime() { ShowDeprecationWarning("getTime()", "the timer property"); - return PyInt_FromLong(m_time); + return PyLong_FromSsize_t(m_time); } @@ -625,7 +600,7 @@ const char KX_TrackToActuator::GetUse3D_doc[] = PyObject* KX_TrackToActuator::PyGetUse3D() { ShowDeprecationWarning("setTime()", "the use3D property"); - return PyInt_FromLong(!(m_allow3D == 0)); + return PyLong_FromSsize_t(!(m_allow3D == 0)); } diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.h b/source/gameengine/Ketsji/KX_TrackToActuator.h index c4cc2b1f062..801e695bb9b 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.h +++ b/source/gameengine/Ketsji/KX_TrackToActuator.h @@ -56,7 +56,7 @@ class KX_TrackToActuator : public SCA_IActuator public: KX_TrackToActuator(SCA_IObject* gameobj, SCA_IObject *ob, int time, - bool threedee,int trackflag,int upflag, PyTypeObject* T=&Type); + bool threedee,int trackflag,int upflag); virtual ~KX_TrackToActuator(); virtual CValue* GetReplica() { KX_TrackToActuator* replica = new KX_TrackToActuator(*this); @@ -70,9 +70,6 @@ class KX_TrackToActuator : public SCA_IActuator virtual bool Update(double curtime, bool frame); /* Python part */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject* value); /* These are used to get and set m_ob */ static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp index 8146d04a878..7001bfc8b7e 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp @@ -16,8 +16,8 @@ KX_VehicleWrapper::KX_VehicleWrapper( PHY_IVehicle* vehicle, - PHY_IPhysicsEnvironment* physenv,PyTypeObject *T) : - PyObjectPlus(T), + PHY_IPhysicsEnvironment* physenv) : + PyObjectPlus(), m_vehicle(vehicle), m_physenv(physenv) { @@ -127,13 +127,13 @@ PyObject* KX_VehicleWrapper::PyGetWheelOrientationQuaternion(PyObject* args) PyObject* KX_VehicleWrapper::PyGetNumWheels(PyObject* args) { - return PyInt_FromLong(m_vehicle->GetNumWheels()); + return PyLong_FromSsize_t(m_vehicle->GetNumWheels()); } PyObject* KX_VehicleWrapper::PyGetConstraintId(PyObject* args) { - return PyInt_FromLong(m_vehicle->GetUserConstraintId()); + return PyLong_FromSsize_t(m_vehicle->GetUserConstraintId()); } @@ -264,7 +264,7 @@ PyObject* KX_VehicleWrapper::PySetSteeringValue(PyObject* args) PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* args) { - return PyInt_FromLong(m_vehicle->GetUserConstraintType()); + return PyLong_FromSsize_t(m_vehicle->GetUserConstraintType()); } @@ -289,35 +289,17 @@ PyTypeObject KX_VehicleWrapper::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new }; -PyParentObject KX_VehicleWrapper::Parents[] = { - &KX_VehicleWrapper::Type, - &PyObjectPlus::Type, - NULL -}; - -PyObject* KX_VehicleWrapper::py_getattro(PyObject *attr) -{ - //here you can search for existing data members (like mass,friction etc.) - py_getattro_up(PyObjectPlus); -} - -PyObject* KX_VehicleWrapper::py_getattro_dict() { - py_getattro_dict_up(PyObjectPlus); -} - -int KX_VehicleWrapper::py_setattro(PyObject *attr,PyObject* value) -{ - py_setattro_up(PyObjectPlus); -}; - - PyMethodDef KX_VehicleWrapper::Methods[] = { {"addWheel",(PyCFunction) KX_VehicleWrapper::sPyAddWheel, METH_VARARGS}, {"getNumWheels",(PyCFunction) KX_VehicleWrapper::sPyGetNumWheels, METH_VARARGS}, diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h index c2b5e3d9251..d7f2da5cd7c 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.h +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h @@ -12,14 +12,11 @@ class PHY_IMotionState; class KX_VehicleWrapper : public PyObjectPlus { Py_Header; - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); std::vector m_motionStates; public: - KX_VehicleWrapper(PHY_IVehicle* vehicle,class PHY_IPhysicsEnvironment* physenv,PyTypeObject *T = &Type); + KX_VehicleWrapper(PHY_IVehicle* vehicle,class PHY_IPhysicsEnvironment* physenv); virtual ~KX_VehicleWrapper (); int getConstraintId(); diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp index 4b0ad083473..cb8c891969d 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.cpp +++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp @@ -53,18 +53,15 @@ PyTypeObject KX_VertexProxy::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods -}; - -PyParentObject KX_VertexProxy::Parents[] = { - &KX_VertexProxy::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &CValue::Type, - &PyObjectPlus::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; PyMethodDef KX_VertexProxy::Methods[] = { @@ -85,37 +82,38 @@ PyMethodDef KX_VertexProxy::Methods[] = { PyAttributeDef KX_VertexProxy::Attributes[] = { //KX_PYATTRIBUTE_TODO("DummyProps"), - + KX_PYATTRIBUTE_DUMMY("x"), KX_PYATTRIBUTE_DUMMY("y"), KX_PYATTRIBUTE_DUMMY("z"), - + KX_PYATTRIBUTE_DUMMY("r"), KX_PYATTRIBUTE_DUMMY("g"), KX_PYATTRIBUTE_DUMMY("b"), KX_PYATTRIBUTE_DUMMY("a"), - + KX_PYATTRIBUTE_DUMMY("u"), KX_PYATTRIBUTE_DUMMY("v"), - + KX_PYATTRIBUTE_DUMMY("u2"), KX_PYATTRIBUTE_DUMMY("v2"), - + KX_PYATTRIBUTE_DUMMY("XYZ"), KX_PYATTRIBUTE_DUMMY("UV"), - + KX_PYATTRIBUTE_DUMMY("color"), KX_PYATTRIBUTE_DUMMY("colour"), - + KX_PYATTRIBUTE_DUMMY("normal"), - + { NULL } //Sentinel }; +#if 0 PyObject* KX_VertexProxy::py_getattro(PyObject *attr) { - char *attr_str= PyString_AsString(attr); + char *attr_str= _PyUnicode_AsString(attr); if (attr_str[1]=='\0') { // Group single letters // pos if (attr_str[0]=='x') @@ -141,8 +139,8 @@ KX_VertexProxy::py_getattro(PyObject *attr) if (attr_str[0]=='v') return PyFloat_FromDouble(m_vertex->getUV1()[1]); } - - + + if (!strcmp(attr_str, "XYZ")) return PyObjectFrom(MT_Vector3(m_vertex->getXYZ())); @@ -156,22 +154,21 @@ KX_VertexProxy::py_getattro(PyObject *attr) color /= 255.0; return PyObjectFrom(color); } - + if (!strcmp(attr_str, "normal")) { return PyObjectFrom(MT_Vector3(m_vertex->getNormal())); } - + py_getattro_up(CValue); } +#endif -PyObject* KX_VertexProxy::py_getattro_dict() { - py_getattro_dict_up(CValue); -} +#if 0 int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) { - char *attr_str= PyString_AsString(attr); + char *attr_str= _PyUnicode_AsString(attr); if (PySequence_Check(pyvalue)) { if (!strcmp(attr_str, "XYZ")) @@ -185,7 +182,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) } return PY_SET_ATTR_FAIL; } - + if (!strcmp(attr_str, "UV")) { MT_Point2 vec; @@ -197,7 +194,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) } return PY_SET_ATTR_FAIL; } - + if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour")) { MT_Vector4 vec; @@ -209,7 +206,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) } return PY_SET_ATTR_FAIL; } - + if (!strcmp(attr_str, "normal")) { MT_Vector3 vec; @@ -222,7 +219,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) return PY_SET_ATTR_FAIL; } } - + if (PyFloat_Check(pyvalue)) { float val = PyFloat_AsDouble(pyvalue); @@ -235,7 +232,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) m_mesh->SetMeshModified(true); return PY_SET_ATTR_SUCCESS; } - + if (!strcmp(attr_str, "y")) { pos.y() = val; @@ -243,7 +240,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) m_mesh->SetMeshModified(true); return PY_SET_ATTR_SUCCESS; } - + if (!strcmp(attr_str, "z")) { pos.z() = val; @@ -251,7 +248,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) m_mesh->SetMeshModified(true); return PY_SET_ATTR_SUCCESS; } - + // uv MT_Point2 uv = m_vertex->getUV1(); if (!strcmp(attr_str, "u")) @@ -287,7 +284,7 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) m_mesh->SetMeshModified(true); return PY_SET_ATTR_SUCCESS; } - + // col unsigned int icol = *((const unsigned int *)m_vertex->getRGBA()); unsigned char *cp = (unsigned char*) &icol; @@ -321,9 +318,10 @@ int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue) return PY_SET_ATTR_SUCCESS; } } - + return CValue::py_setattro(attr, pyvalue); } +#endif KX_VertexProxy::KX_VertexProxy(KX_MeshProxy*mesh, RAS_TexVert* vertex) : m_vertex(vertex), @@ -339,7 +337,7 @@ KX_VertexProxy::~KX_VertexProxy() // stuff for cvalue related things CValue* KX_VertexProxy::Calc(VALUE_OPERATOR, CValue *) { return NULL;} -CValue* KX_VertexProxy::CalcFinal(VALUE_DATA_TYPE, VALUE_OPERATOR, CValue *) { return NULL;} +CValue* KX_VertexProxy::CalcFinal(VALUE_DATA_TYPE, VALUE_OPERATOR, CValue *) { return NULL;} STR_String sVertexName="vertex"; const STR_String & KX_VertexProxy::GetText() {return sVertexName;}; double KX_VertexProxy::GetNumber() { return -1;} @@ -348,7 +346,7 @@ void KX_VertexProxy::SetName(const char *) { }; CValue* KX_VertexProxy::GetReplica() { return NULL;} // stuff for python integration - + PyObject* KX_VertexProxy::PyGetXYZ() { return PyObjectFrom(MT_Point3(m_vertex->getXYZ())); @@ -359,7 +357,7 @@ PyObject* KX_VertexProxy::PySetXYZ(PyObject* value) MT_Point3 vec; if (!PyVecTo(value, vec)) return NULL; - + m_vertex->SetXYZ(vec); m_mesh->SetMeshModified(true); Py_RETURN_NONE; @@ -375,7 +373,7 @@ PyObject* KX_VertexProxy::PySetNormal(PyObject* value) MT_Vector3 vec; if (!PyVecTo(value, vec)) return NULL; - + m_vertex->SetNormal(vec); m_mesh->SetMeshModified(true); Py_RETURN_NONE; @@ -385,18 +383,18 @@ PyObject* KX_VertexProxy::PySetNormal(PyObject* value) PyObject* KX_VertexProxy::PyGetRGBA() { int *rgba = (int *) m_vertex->getRGBA(); - return PyInt_FromLong(*rgba); + return PyLong_FromSsize_t(*rgba); } PyObject* KX_VertexProxy::PySetRGBA(PyObject* value) { - if PyInt_Check(value) { - int rgba = PyInt_AsLong(value); + if PyLong_Check(value) { + int rgba = PyLong_AsSsize_t(value); m_vertex->SetRGBA(rgba); m_mesh->SetMeshModified(true); Py_RETURN_NONE; } - else { + else { MT_Vector4 vec; if (PyVecTo(value, vec)) { @@ -405,7 +403,7 @@ PyObject* KX_VertexProxy::PySetRGBA(PyObject* value) Py_RETURN_NONE; } } - + PyErr_SetString(PyExc_TypeError, "vert.setRGBA(value): KX_VertexProxy, expected a 4D vector or an int"); return NULL; } @@ -421,7 +419,7 @@ PyObject* KX_VertexProxy::PySetUV(PyObject* value) MT_Point2 vec; if (!PyVecTo(value, vec)) return NULL; - + m_vertex->SetUV(vec); m_mesh->SetMeshModified(true); Py_RETURN_NONE; @@ -436,14 +434,14 @@ PyObject* KX_VertexProxy::PySetUV2(PyObject* args) { MT_Point2 vec; unsigned int unit= RAS_TexVert::SECOND_UV; - + PyObject* list= NULL; if(!PyArg_ParseTuple(args, "O|i:setUV2", &list, &unit)) return NULL; - + if (!PyVecTo(list, vec)) return NULL; - + m_vertex->SetFlag((m_vertex->getFlag()|RAS_TexVert::SECOND_UV)); m_vertex->SetUnit(unit); m_vertex->SetUV2(vec); diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h index 42db5fbc322..13c57e9f556 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.h +++ b/source/gameengine/Ketsji/KX_VertexProxy.h @@ -53,9 +53,6 @@ public: // stuff for python integration - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *pyvalue); KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ); KX_PYMETHOD_O(KX_VertexProxy,SetXYZ); diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp index d848065ad73..3561ccde9d9 100644 --- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp +++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp @@ -39,10 +39,9 @@ KX_VisibilityActuator::KX_VisibilityActuator( SCA_IObject* gameobj, bool visible, bool occlusion, - bool recursive, - PyTypeObject* T + bool recursive ) - : SCA_IActuator(gameobj,T), + : SCA_IActuator(gameobj), m_visible(visible), m_occlusion(occlusion), m_recursive(recursive) @@ -108,25 +107,18 @@ PyTypeObject KX_VisibilityActuator::Type = { 0, 0, py_base_repr, - 0,0,0,0,0,0, - py_base_getattro, - py_base_setattro, 0,0,0,0,0,0,0,0,0, - Methods - -}; - -PyParentObject -KX_VisibilityActuator::Parents[] = { - &KX_VisibilityActuator::Type, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, &SCA_IActuator::Type, - &SCA_ILogicBrick::Type, - &CValue::Type, - NULL + 0,0,0,0,0,0, + py_base_new }; -PyMethodDef -KX_VisibilityActuator::Methods[] = { +PyMethodDef KX_VisibilityActuator::Methods[] = { // Deprecated -----> {"set", (PyCFunction) KX_VisibilityActuator::sPySetVisible, METH_VARARGS, (PY_METHODCHAR) SetVisible_doc}, @@ -141,21 +133,6 @@ PyAttributeDef KX_VisibilityActuator::Attributes[] = { { NULL } //Sentinel }; -PyObject* KX_VisibilityActuator::py_getattro(PyObject *attr) -{ - py_getattro_up(SCA_IActuator); -} - -PyObject* KX_VisibilityActuator::py_getattro_dict() { - py_getattro_dict_up(SCA_IActuator); -} - -int KX_VisibilityActuator::py_setattro(PyObject *attr, PyObject *value) -{ - py_setattro_up(SCA_IActuator); -} - - /* set visibility ---------------------------------------------------------- */ const char KX_VisibilityActuator::SetVisible_doc[] = diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.h b/source/gameengine/Ketsji/KX_VisibilityActuator.h index 45aba50f645..3ad50c6cea2 100644 --- a/source/gameengine/Ketsji/KX_VisibilityActuator.h +++ b/source/gameengine/Ketsji/KX_VisibilityActuator.h @@ -48,9 +48,7 @@ class KX_VisibilityActuator : public SCA_IActuator SCA_IObject* gameobj, bool visible, bool occlusion, - bool recursive, - PyTypeObject* T=&Type - ); + bool recursive); virtual ~KX_VisibilityActuator( @@ -69,10 +67,6 @@ class KX_VisibilityActuator : public SCA_IActuator /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); - virtual PyObject* py_getattro_dict(); - virtual int py_setattro(PyObject *attr, PyObject *value); - // Deprecated -----> KX_PYMETHOD_DOC_VARARGS(KX_VisibilityActuator,SetVisible); // <----- diff --git a/source/gameengine/VideoTexture/FilterBlueScreen.cpp b/source/gameengine/VideoTexture/FilterBlueScreen.cpp index 6b23105a278..6d26e5b6d35 100644 --- a/source/gameengine/VideoTexture/FilterBlueScreen.cpp +++ b/source/gameengine/VideoTexture/FilterBlueScreen.cpp @@ -81,17 +81,17 @@ static int setColor (PyFilter * self, PyObject * value, void * closure) { // check validity of parameter if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 3 - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 0)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 1)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 2))) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 2))) { PyErr_SetString(PyExc_TypeError, "The value must be a sequence of 3 ints"); return -1; } // set color - getFilter(self)->setColor((unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 0))), - (unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 1))), - (unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 2)))); + getFilter(self)->setColor((unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 0))), + (unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 1))), + (unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 2)))); // success return 0; } @@ -108,15 +108,15 @@ static int setLimits (PyFilter * self, PyObject * value, void * closure) { // check validity of parameter if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 2 - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 0)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 1))) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1))) { PyErr_SetString(PyExc_TypeError, "The value must be a sequence of 2 ints"); return -1; } // set limits - getFilter(self)->setLimits((unsigned short)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 0))), - (unsigned short)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 1)))); + getFilter(self)->setLimits((unsigned short)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 0))), + (unsigned short)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 1)))); // success return 0; } diff --git a/source/gameengine/VideoTexture/FilterColor.cpp b/source/gameengine/VideoTexture/FilterColor.cpp index 5ff1f7f11ce..eb86f520e02 100644 --- a/source/gameengine/VideoTexture/FilterColor.cpp +++ b/source/gameengine/VideoTexture/FilterColor.cpp @@ -147,10 +147,10 @@ static int setMatrix (PyFilter * self, PyObject * value, void * closure) for (int c = 0; valid && c < 5; ++c) { // item must be int - valid = PyInt_Check(PySequence_Fast_GET_ITEM(row, c)); + valid = PyLong_Check(PySequence_Fast_GET_ITEM(row, c)); // if it is valid, save it in matrix if (valid) - mat[r][c] = short(PyInt_AsLong(PySequence_Fast_GET_ITEM(row, c))); + mat[r][c] = short(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(row, c))); } } // if parameter is not valid, report error @@ -286,10 +286,10 @@ static int setLevels (PyFilter * self, PyObject * value, void * closure) for (int c = 0; valid && c < 2; ++c) { // item must be int - valid = PyInt_Check(PySequence_Fast_GET_ITEM(row, c)); + valid = PyLong_Check(PySequence_Fast_GET_ITEM(row, c)); // if it is valid, save it in matrix if (valid) - lev[r][c] = (unsigned short)(PyInt_AsLong(PySequence_Fast_GET_ITEM(row, c))); + lev[r][c] = (unsigned short)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(row, c))); } } // if parameter is not valid, report error diff --git a/source/gameengine/VideoTexture/FilterNormal.cpp b/source/gameengine/VideoTexture/FilterNormal.cpp index 9a2b1e90d5a..002be6c3189 100644 --- a/source/gameengine/VideoTexture/FilterNormal.cpp +++ b/source/gameengine/VideoTexture/FilterNormal.cpp @@ -72,13 +72,13 @@ static PyObject * getColor (PyFilter * self, void * closure) static int setColor (PyFilter * self, PyObject * value, void * closure) { // check validity of parameter - if (value == NULL || !PyInt_Check(value)) + if (value == NULL || !PyLong_Check(value)) { PyErr_SetString(PyExc_TypeError, "filt.colorIdx = int: VideoTexture.FilterNormal, expected the value must be a int"); return -1; } // set color index - getFilter(self)->setColor((unsigned short)(PyInt_AsLong(value))); + getFilter(self)->setColor((unsigned short)(PyLong_AsSsize_t(value))); // success return 0; } diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp index c4fb1fefd9c..d8be08e0eb5 100644 --- a/source/gameengine/VideoTexture/ImageRender.cpp +++ b/source/gameengine/VideoTexture/ImageRender.cpp @@ -331,19 +331,19 @@ static int setBackground (PyImage * self, PyObject * value, void * closure) { // check validity of parameter if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 4 - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 0)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 1)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 2)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 3))) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 2)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 3))) { PyErr_SetString(PyExc_TypeError, "The value must be a sequence of 4 integer between 0 and 255"); return -1; } // set background color - getImageRender(self)->setBackground((unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 0))), - (unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 1))), - (unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 2))), - (unsigned char)(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 3)))); + getImageRender(self)->setBackground((unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 0))), + (unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 1))), + (unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 2))), + (unsigned char)(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 3)))); // success return 0; } diff --git a/source/gameengine/VideoTexture/ImageViewport.cpp b/source/gameengine/VideoTexture/ImageViewport.cpp index d2c23e758f6..55b14396280 100644 --- a/source/gameengine/VideoTexture/ImageViewport.cpp +++ b/source/gameengine/VideoTexture/ImageViewport.cpp @@ -218,16 +218,16 @@ static int ImageViewport_setPosition (PyImage * self, PyObject * value, void * c { // check validity of parameter if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 2 - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 0)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 1))) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1))) { PyErr_SetString(PyExc_TypeError, "The value must be a sequence of 2 ints"); return -1; } // set position GLint pos [] = { - GLint(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 0))), - GLint(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 1))) + GLint(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 0))), + GLint(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 1))) }; getImageViewport(self)->setPosition(pos); // success @@ -246,16 +246,16 @@ int ImageViewport_setCaptureSize (PyImage * self, PyObject * value, void * closu { // check validity of parameter if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 2 - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 0)) - || !PyInt_Check(PySequence_Fast_GET_ITEM(value, 1))) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0)) + || !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1))) { PyErr_SetString(PyExc_TypeError, "The value must be a sequence of 2 ints"); return -1; } // set capture size short size [] = { - short(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 0))), - short(PyInt_AsLong(PySequence_Fast_GET_ITEM(value, 1))) + short(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 0))), + short(PyLong_AsSsize_t(PySequence_Fast_GET_ITEM(value, 1))) }; getImageViewport(self)->setCaptureSize(size); // success diff --git a/source/gameengine/VideoTexture/VideoBase.cpp b/source/gameengine/VideoTexture/VideoBase.cpp index 5d449a158d8..5de7a9e80a9 100644 --- a/source/gameengine/VideoTexture/VideoBase.cpp +++ b/source/gameengine/VideoTexture/VideoBase.cpp @@ -167,13 +167,13 @@ PyObject * Video_getRepeat (PyImage * self, void * closure) int Video_setRepeat (PyImage * self, PyObject * value, void * closure) { // check validity of parameter - if (value == NULL || !PyInt_Check(value)) + if (value == NULL || !PyLong_Check(value)) { PyErr_SetString(PyExc_TypeError, "The value must be an int"); return -1; } // set repeat - getVideo(self)->setRepeat(int(PyInt_AsLong(value))); + getVideo(self)->setRepeat(int(PyLong_AsSsize_t(value))); // success return 0; } diff --git a/source/gameengine/VideoTexture/VideoFFmpeg.cpp b/source/gameengine/VideoTexture/VideoFFmpeg.cpp index 1a5481488c0..cf4ea88c1b5 100644 --- a/source/gameengine/VideoTexture/VideoFFmpeg.cpp +++ b/source/gameengine/VideoTexture/VideoFFmpeg.cpp @@ -1095,13 +1095,13 @@ PyObject * VideoFFmpeg_getPreseek (PyImage *self, void * closure) int VideoFFmpeg_setPreseek (PyImage * self, PyObject * value, void * closure) { // check validity of parameter - if (value == NULL || !PyInt_Check(value)) + if (value == NULL || !PyLong_Check(value)) { PyErr_SetString(PyExc_TypeError, "The value must be an integer"); return -1; } // set preseek - getFFmpeg(self)->setPreseek(PyInt_AsLong(value)); + getFFmpeg(self)->setPreseek(PyLong_AsSsize_t(value)); // success return 0; } diff --git a/source/gameengine/VideoTexture/blendVideoTex.cpp b/source/gameengine/VideoTexture/blendVideoTex.cpp index dad52a426b6..22171f69321 100644 --- a/source/gameengine/VideoTexture/blendVideoTex.cpp +++ b/source/gameengine/VideoTexture/blendVideoTex.cpp @@ -67,7 +67,7 @@ static PyObject * getMaterialID (PyObject *self, PyObject *args) // get last error description static PyObject * getLastError (PyObject *self, PyObject *args) { - return PyString_FromString(Exception::m_lastError.c_str()); + return PyUnicode_FromString(Exception::m_lastError.c_str()); } // set log file From 3373850e95dc07b4d7877df9180d1d82df87e31a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 03:50:20 +0000 Subject: [PATCH 110/512] NLA SoC: Bugfix for Auto-Keyframing version patching When auto-keying is enabled, the insertion mode is no-longer blank. The version patching code now takes this into account, but the conversion doesn't work for existing .b25.blend defaults files though. --- source/blender/blenloader/intern/readfile.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 0c1ba32c543..beebf58b6c0 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9220,7 +9220,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if(ts->normalsize == 0.0) { ts->normalsize= 0.1f; ts->selectmode= SCE_SELECT_VERTEX; + + /* autokeying - setting should be taken from the user-prefs + * but the userprefs version may not have correct flags set + * (i.e. will result in blank box when enabled) + */ ts->autokey_mode= U.autokey_mode; + if (ts->autokey_mode == 0) + ts->autokey_mode= 2; /* 'add/replace' but not on */ } } } From b47605d841d0c01b31199bce4499548ecf259bf1 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 04:47:36 +0000 Subject: [PATCH 111/512] NLA SoC: Separating F-Modifier UI drawing into its own file * F-Modifier UI drawing/handling is now defined in a separate file so that it will be more suitable for inclusion into the NLA Editor's buttons. * Started removing F-Curve dependence from the modifier drawing code, which wasn't strictly necessary * Fixed F-Curve RNA wrapping to correctly use FPoints instead of the bulkier BPoints. Although nobody was likely to have encountered bugs here yet, this would almost certainly have contributed to some segfaults/data corruption along the track. --- .../blender/editors/animation/fmodifier_ui.c | 669 ++++++++++++++++++ source/blender/editors/include/ED_anim_api.h | 9 + .../editors/space_graph/graph_buttons.c | 573 +-------------- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_fcurve.c | 38 +- 5 files changed, 711 insertions(+), 579 deletions(-) create mode 100644 source/blender/editors/animation/fmodifier_ui.c diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c new file mode 100644 index 00000000000..5968817a9a6 --- /dev/null +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -0,0 +1,669 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/* User-Interface Stuff for F-Modifiers: + * This file defines the (C-Coded) templates + editing callbacks needed + * by the interface stuff or F-Modifiers, as used by F-Curves in the Graph Editor, + * and NLA-Strips in the NLA Editor. + */ + +#include +#include +#include +#include + +#include "DNA_anim_types.h" +#include "DNA_action_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_arithb.h" +#include "BLI_blenlib.h" +#include "BLI_editVert.h" +#include "BLI_rand.h" + +#include "BKE_animsys.h" +#include "BKE_action.h" +#include "BKE_context.h" +#include "BKE_curve.h" +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_fcurve.h" +#include "BKE_object.h" +#include "BKE_global.h" +#include "BKE_nla.h" +#include "BKE_scene.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "ED_anim_api.h" +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +// XXX! -------------------------------- +/* temporary definition for limits of float number buttons (FLT_MAX tends to infinity with old system) */ +#define UI_FLT_MAX 10000.0f + +/* ********************************************** */ + +#define B_REDR 1 +#define B_FMODIFIER_REDRAW 20 + +/* macro for use here to draw background box and set height */ +// XXX for now, roundbox has it's callback func set to NULL to not intercept events +#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, ""); \ + } + +/* callback to verify modifier data */ +static void validate_fmodifier_cb (bContext *C, void *fcm_v, void *dummy) +{ + FModifier *fcm= (FModifier *)fcm_v; + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* call the verify callback on the modifier if applicable */ + if (fmi && fmi->verify_data) + fmi->verify_data(fcm); +} + +/* callback to set the active modifier */ +static void activate_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) +{ + FCurve *fcu= (FCurve *)fcu_v; + FModifier *fcm= (FModifier *)fcm_v; + + /* call API function to set the active modifier for active F-Curve */ + fcurve_set_active_modifier(fcu, fcm); +} + +/* callback to remove the given modifier */ +static void delete_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) +{ + FCurve *fcu= (FCurve *)fcu_v; + FModifier *fcm= (FModifier *)fcm_v; + + /* remove the given F-Modifier from the F-Curve */ + fcurve_remove_modifier(fcu, fcm); +} + +/* --------------- */ + +/* draw settings for generator modifier */ +static void draw_modifier__generator(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Generator *data= (FMod_Generator *)fcm->data; + char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1"; + int cy= *yco - 30; + uiBut *but; + + /* set the height */ + (*height) = 90; + switch (data->mode) { + case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */ + (*height) += 20*(data->poly_order+1) + 20; + break; + case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ + (*height) += 20 * data->poly_order + 15; + break; + } + + /* basic settings (backdrop + mode selector + some padding) */ + DRAW_BACKDROP((*height)); + uiBlockBeginAlign(block); + but= uiDefButI(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + cy -= 20; + + uiDefButBitI(block, TOG, FCM_GENERATOR_ADDITIVE, B_FMODIFIER_REDRAW, "Additive", 10,cy,width-30,19, &data->flag, 0, 0, 0, 0, "Values generated by this modifier are applied on top of the existing values instead of overwriting them"); + cy -= 35; + uiBlockEndAlign(block); + + /* now add settings for individual modes */ + switch (data->mode) { + case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */ + { + float *cp = NULL; + char xval[32]; + unsigned int i; + + /* draw polynomial order selector */ + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + cy -= 35; + + /* draw controls for each coefficient and a + sign at end of row */ + uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + + cp= data->coefficients; + for (i=0; (i < data->arraysize) && (cp); i++, cp++) { + /* coefficient */ + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient for polynomial"); + + /* 'x' param (and '+' if necessary) */ + if (i == 0) + strcpy(xval, ""); + else if (i == 1) + strcpy(xval, "x"); + else + sprintf(xval, "x^%d", i); + uiDefBut(block, LABEL, 1, xval, 200, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, "Power of x"); + + if ( (i != (data->arraysize - 1)) || ((i==0) && data->arraysize==2) ) + uiDefBut(block, LABEL, 1, "+", 250, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + + cy -= 20; + } + } + break; + + case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial expression */ + { + float *cp = NULL; + unsigned int i; + + /* draw polynomial order selector */ + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + cy -= 35; + + /* draw controls for each pair of coefficients */ + uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + + cp= data->coefficients; + for (i=0; (i < data->poly_order) && (cp); i++, cp+=2) { + /* opening bracket */ + uiDefBut(block, LABEL, 1, "(", 40, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + + /* coefficients */ + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x"); + + uiDefBut(block, LABEL, 1, "x + ", 150, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 180, cy, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient"); + + /* closing bracket and '+' sign */ + if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) ) + uiDefBut(block, LABEL, 1, ") ?", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + else + uiDefBut(block, LABEL, 1, ")", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + + cy -= 20; + } + } + break; + } +} + +/* --------------- */ + +/* draw settings for noise modifier */ +static void draw_modifier__fn_generator(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; + int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; + + /* set the height */ + (*height) = 80; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + uiDefButI(block, MENU, B_FMODIFIER_REDRAW, fn_type, + 3, cy, 300, 20, &data->type, 0, 0, 0, 0, "Type of function used to generate values"); + + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Amplitude:", + 3, cy1, 150, 20, &data->amplitude, 0.000001, 10000.0, 0.01, 3, "Scale factor determining the maximum/minimum values."); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Value Offset:", + 3, cy2, 150, 20, &data->value_offset, 0.0, 10000.0, 0.01, 3, "Constant factor to offset values by."); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Multiplier:", + 155, cy1, 150, 20, &data->phase_multiplier, 0.0, 100000.0, 0.1, 3, "Scale factor determining the 'speed' of the function."); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Offset:", + 155, cy2, 150, 20, &data->phase_offset, 0.0, 100000.0, 0.1, 3, "Constant factor to offset time by for function."); + +} + +/* --------------- */ + +/* draw settings for cycles modifier */ +static void draw_modifier__cycles(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Cycles *data= (FMod_Cycles *)fcm->data; + char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2|Repeat Mirrored%x3"; + int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + + /* set the height */ + (*height) = 80; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + /* 'before' range */ + uiDefBut(block, LABEL, 1, "Before:", 4, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); + uiBlockBeginAlign(block); + uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 3,cy1,150,20, &data->before_mode, 0, 0, 0, 0, "Cycling mode to use before first keyframe"); + uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 3, cy2, 150, 20, &data->before_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); + uiBlockEndAlign(block); + + /* 'after' range */ + uiDefBut(block, LABEL, 1, "After:", 155, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling after last keyframe"); + uiBlockBeginAlign(block); + uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 157,cy1,150,20, &data->after_mode, 0, 0, 0, 0, "Cycling mode to use after first keyframe"); + uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 157, cy2, 150, 20, &data->after_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); + uiBlockEndAlign(block); +} + +/* --------------- */ + +/* draw settings for noise modifier */ +static void draw_modifier__noise(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Noise *data= (FMod_Noise *)fcm->data; + int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + char blend_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; + + /* set the height */ + (*height) = 80; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + uiDefButS(block, MENU, B_FMODIFIER_REDRAW, blend_mode, + 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of combining the results of this modifier and other modifiers."); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:", + 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, ""); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Strength:", + 3, cy2, 150, 20, &data->strength, 0.0, 10000.0, 0.01, 3, ""); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase:", + 155, cy1, 150, 20, &data->phase, 0.0, 100000.0, 0.1, 3, ""); + uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Depth:", + 155, cy2, 150, 20, &data->depth, 0, 128, 1, 3, ""); + +} + +/* --------------- */ + +#define BINARYSEARCH_FRAMEEQ_THRESH 0.0001 + +/* Binary search algorithm for finding where to insert Envelope Data Point. + * Returns the index to insert at (data already at that index will be offset if replace is 0) + */ +static int binarysearch_fcm_envelopedata_index (FCM_EnvelopeData array[], float frame, int arraylen, short *exists) +{ + int start=0, end=arraylen; + int loopbreaker= 0, maxloop= arraylen * 2; + + /* initialise exists-flag first */ + *exists= 0; + + /* sneaky optimisations (don't go through searching process if...): + * - keyframe to be added is to be added out of current bounds + * - keyframe to be added would replace one of the existing ones on bounds + */ + if ((arraylen <= 0) || (array == NULL)) { + printf("Warning: binarysearch_fcm_envelopedata_index() encountered invalid array \n"); + return 0; + } + else { + /* check whether to add before/after/on */ + float framenum; + + /* 'First' Point (when only one point, this case is used) */ + framenum= array[0].time; + if (IS_EQT(frame, framenum, BINARYSEARCH_FRAMEEQ_THRESH)) { + *exists = 1; + return 0; + } + else if (frame < framenum) + return 0; + + /* 'Last' Point */ + framenum= array[(arraylen-1)].time; + if (IS_EQT(frame, framenum, BINARYSEARCH_FRAMEEQ_THRESH)) { + *exists= 1; + return (arraylen - 1); + } + else if (frame > framenum) + return arraylen; + } + + + /* most of the time, this loop is just to find where to put it + * - 'loopbreaker' is just here to prevent infinite loops + */ + for (loopbreaker=0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) { + /* compute and get midpoint */ + int mid = start + ((end - start) / 2); /* we calculate the midpoint this way to avoid int overflows... */ + float midfra= array[mid].time; + + /* check if exactly equal to midpoint */ + if (IS_EQT(frame, midfra, BINARYSEARCH_FRAMEEQ_THRESH)) { + *exists = 1; + return mid; + } + + /* repeat in upper/lower half */ + if (frame > midfra) + start= mid + 1; + else if (frame < midfra) + end= mid - 1; + } + + /* print error if loop-limit exceeded */ + if (loopbreaker == (maxloop-1)) { + printf("Error: binarysearch_fcm_envelopedata_index() was taking too long \n"); + + // include debug info + printf("\tround = %d: start = %d, end = %d, arraylen = %d \n", loopbreaker, start, end, arraylen); + } + + /* not found, so return where to place it */ + return start; +} + +/* callback to add new envelope data point */ +// TODO: should we have a separate file for things like this? +static void fmod_envelope_addpoint_cb (bContext *C, void *fcm_dv, void *dummy) +{ + Scene *scene= CTX_data_scene(C); + FMod_Envelope *env= (FMod_Envelope *)fcm_dv; + FCM_EnvelopeData *fedn; + FCM_EnvelopeData fed; + + /* init template data */ + fed.min= -1.0f; + fed.max= 1.0f; + fed.time= (float)scene->r.cfra; // XXX make this int for ease of use? + fed.f1= fed.f2= 0; + + /* check that no data exists for the current frame... */ + if (env->data) { + short exists = -1; + int i= binarysearch_fcm_envelopedata_index(env->data, (float)(scene->r.cfra), env->totvert, &exists); + + /* binarysearch_...() will set exists by default to 0, so if it is non-zero, that means that the point exists already */ + if (exists) + return; + + /* add new */ + fedn= MEM_callocN((env->totvert+1)*sizeof(FCM_EnvelopeData), "FCM_EnvelopeData"); + + /* add the points that should occur before the point to be pasted */ + if (i > 0) + memcpy(fedn, env->data, i*sizeof(FCM_EnvelopeData)); + + /* add point to paste at index i */ + *(fedn + i)= fed; + + /* add the points that occur after the point to be pasted */ + if (i < env->totvert) + memcpy(fedn+i+1, env->data+i, (env->totvert-i)*sizeof(FCM_EnvelopeData)); + + /* replace (+ free) old with new */ + MEM_freeN(env->data); + env->data= fedn; + + env->totvert++; + } + else { + env->data= MEM_callocN(sizeof(FCM_EnvelopeData), "FCM_EnvelopeData"); + *(env->data)= fed; + + env->totvert= 1; + } +} + +/* callback to remove envelope data point */ +// TODO: should we have a separate file for things like this? +static void fmod_envelope_deletepoint_cb (bContext *C, void *fcm_dv, void *ind_v) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm_dv; + FCM_EnvelopeData *fedn; + int index= GET_INT_FROM_POINTER(ind_v); + + /* check that no data exists for the current frame... */ + if (env->totvert > 1) { + /* allocate a new smaller array */ + fedn= MEM_callocN(sizeof(FCM_EnvelopeData)*(env->totvert-1), "FCM_EnvelopeData"); + + memcpy(fedn, &env->data, sizeof(FCM_EnvelopeData)*(index)); + memcpy(&fedn[index], &env->data[index+1], sizeof(FCM_EnvelopeData)*(env->totvert-index-1)); + + /* free old array, and set the new */ + MEM_freeN(env->data); + env->data= fedn; + env->totvert--; + } + else { + /* just free array, since the only vert was deleted */ + if (env->data) + MEM_freeN(env->data); + env->totvert= 0; + } +} + +/* draw settings for envelope modifier */ +static void draw_modifier__envelope(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm->data; + FCM_EnvelopeData *fed; + uiBut *but; + int cy= (*yco - 28); + int i; + + /* set the height: + * - basic settings + variable height from envelope controls + */ + (*height) = 115 + (35 * env->totvert); + + /* basic settings (backdrop + general settings + some padding) */ + DRAW_BACKDROP((*height)); + + /* General Settings */ + uiDefBut(block, LABEL, 1, "Envelope:", 10, cy, 100, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); + cy -= 20; + + uiBlockBeginAlign(block); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Reference Val:", 10, cy, 300, 20, &env->midval, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, ""); + cy -= 20; + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 10, cy, 150, 20, &env->min, -UI_FLT_MAX, env->max, 10, 3, "Minimum value (relative to Reference Value) that is used as the 'normal' minimum value"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 160, cy, 150, 20, &env->max, env->min, UI_FLT_MAX, 10, 3, "Maximum value (relative to Reference Value) that is used as the 'normal' maximum value"); + cy -= 35; + uiBlockEndAlign(block); + + + /* Points header */ + uiDefBut(block, LABEL, 1, "Control Points:", 10, cy, 150, 20, NULL, 0.0, 0.0, 0, 0, ""); + + but= uiDefBut(block, BUT, B_FMODIFIER_REDRAW, "Add Point", 160,cy,150,19, NULL, 0, 0, 0, 0, "Adds a new control-point to the envelope on the current frame"); + uiButSetFunc(but, fmod_envelope_addpoint_cb, env, NULL); + cy -= 35; + + /* Points List */ + for (i=0, fed=env->data; i < env->totvert; i++, fed++) { + uiBlockBeginAlign(block); + but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 2, cy, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs"); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 92, cy, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 192, cy, 100, 20, &fed->max, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Maximum bound of envelope at this point"); + + but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 292, cy, 18, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point"); + uiButSetFunc(but, fmod_envelope_deletepoint_cb, env, SET_INT_IN_POINTER(i)); + uiBlockBeginAlign(block); + cy -= 25; + } +} + +/* --------------- */ + +/* draw settings for limits modifier */ +static void draw_modifier__limits(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Limits *data= (FMod_Limits *)fcm->data; + const int togButWidth = 50; + const int textButWidth = ((width/2)-togButWidth); + + /* set the height */ + (*height) = 60; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + /* Draw Pairs of LimitToggle+LimitValue */ + uiBlockBeginAlign(block); + uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMIN, B_FMODIFIER_REDRAW, "xMin", 5, *yco-30, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum x value"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-30, (textButWidth-5), 18, &data->rect.xmin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest x value to allow"); + uiBlockEndAlign(block); + + uiBlockBeginAlign(block); + uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMAX, B_FMODIFIER_REDRAW, "XMax", 5+(width-(textButWidth-5)-togButWidth), *yco-30, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum x value"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-30, (textButWidth-5), 18, &data->rect.xmax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest x value to allow"); + uiBlockEndAlign(block); + + uiBlockBeginAlign(block); + uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMIN, B_FMODIFIER_REDRAW, "yMin", 5, *yco-52, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum y value"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-52, (textButWidth-5), 18, &data->rect.ymin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest y value to allow"); + uiBlockEndAlign(block); + + uiBlockBeginAlign(block); + uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMAX, B_FMODIFIER_REDRAW, "YMax", 5+(width-(textButWidth-5)-togButWidth), *yco-52, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum y value"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-52, (textButWidth-5), 18, &data->rect.ymax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest y value to allow"); + uiBlockEndAlign(block); +} + +/* --------------- */ + +// FIXME: remove dependency for F-Curve +void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco) +{ + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + uiBut *but; + short active= (fcm->flag & FMODIFIER_FLAG_ACTIVE); + short width= 314; + short height = 0; + int rb_col; + + /* draw header */ + { + uiBlockSetEmboss(block, UI_EMBOSSN); + + /* rounded header */ + rb_col= (active)?-20:20; + but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); + + /* expand */ + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); + + /* checkbox for 'active' status (for now) */ + but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); + uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm); + + /* name */ + if (fmi) + uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + else + uiDefBut(block, LABEL, 1, "", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + + /* 'mute' button */ + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); + + /* delete button */ + but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); + uiButSetFunc(but, delete_fmodifier_cb, fcu, fcm); + + uiBlockSetEmboss(block, UI_EMBOSS); + } + + /* when modifier is expanded, draw settings */ + if (fcm->flag & FMODIFIER_FLAG_EXPANDED) { + /* draw settings for individual modifiers */ + switch (fcm->type) { + case FMODIFIER_TYPE_GENERATOR: /* Generator */ + draw_modifier__generator(block, fcm, yco, &height, width, active, rb_col); + break; + + case FMODIFIER_TYPE_FN_GENERATOR: /* Built-In Function Generator */ + draw_modifier__fn_generator(block, fcm, yco, &height, width, active, rb_col); + break; + + case FMODIFIER_TYPE_CYCLES: /* Cycles */ + draw_modifier__cycles(block, fcm, yco, &height, width, active, rb_col); + break; + + case FMODIFIER_TYPE_ENVELOPE: /* Envelope */ + draw_modifier__envelope(block, fcm, yco, &height, width, active, rb_col); + break; + + case FMODIFIER_TYPE_LIMITS: /* Limits */ + draw_modifier__limits(block, fcm, yco, &height, width, active, rb_col); + break; + + case FMODIFIER_TYPE_NOISE: /* Noise */ + draw_modifier__noise(block, fcm, yco, &height, width, active, rb_col); + break; + + default: /* unknown type */ + height= 96; + //DRAW_BACKDROP(height); // XXX buggy... + break; + } + } + + /* adjust height for new to start */ + (*yco) -= (height + 27); +} + +/* ********************************************** */ + + \ No newline at end of file diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 4bfcbde8f1e..4d75a73a327 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -293,6 +293,15 @@ void ANIM_draw_cfra(const struct bContext *C, struct View2D *v2d, short flag); /* main call to draw preview range curtains */ void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d); +/* ************************************************* */ +/* F-MODIFIER TOOLS */ + +struct uiBlock; + +/* draw a given F-Modifier for some layout/UI-Block */ +// XXX not quite complete yet +void ANIM_uiTemplate_fmodifier_draw(struct uiBlock *block, struct FCurve *fcu, struct FModifier *fcm, int *yco); + /* ************************************************* */ /* ASSORTED TOOLS */ diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index e68ee53521d..9d4a1a8b3cb 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -347,6 +347,7 @@ static void graph_panel_drivers(const bContext *C, Panel *pa) } /* ******************* f-modifiers ******************************** */ +/* all the drawing code is in editors/animation/fmodifier_ui.c */ #define B_FMODIFIER_REDRAW 20 @@ -360,576 +361,6 @@ static void do_graph_region_modifier_buttons(bContext *C, void *arg, int event) } } -/* macro for use here to draw background box and set height */ -// XXX for now, roundbox has it's callback func set to NULL to not intercept events -#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, ""); \ - } - -/* callback to verify modifier data */ -static void validate_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) -{ - FModifier *fcm= (FModifier *)fcm_v; - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* call the verify callback on the modifier if applicable */ - if (fmi && fmi->verify_data) - fmi->verify_data(fcm); -} - -/* callback to set the active modifier */ -static void activate_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) -{ - FCurve *fcu= (FCurve *)fcu_v; - FModifier *fcm= (FModifier *)fcm_v; - - /* call API function to set the active modifier for active F-Curve */ - fcurve_set_active_modifier(fcu, fcm); -} - -/* callback to remove the given modifier */ -static void delete_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) -{ - FCurve *fcu= (FCurve *)fcu_v; - FModifier *fcm= (FModifier *)fcm_v; - - /* remove the given F-Modifier from the F-Curve */ - fcurve_remove_modifier(fcu, fcm); -} - -/* --------------- */ - -/* draw settings for generator modifier */ -static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_Generator *data= (FMod_Generator *)fcm->data; - char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1"; - int cy= *yco - 30; - uiBut *but; - - /* set the height */ - (*height) = 90; - switch (data->mode) { - case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */ - (*height) += 20*(data->poly_order+1) + 20; - break; - case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ - (*height) += 20 * data->poly_order + 15; - break; - } - - /* basic settings (backdrop + mode selector + some padding) */ - DRAW_BACKDROP((*height)); - uiBlockBeginAlign(block); - but= uiDefButI(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); - uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); - cy -= 20; - - uiDefButBitI(block, TOG, FCM_GENERATOR_ADDITIVE, B_FMODIFIER_REDRAW, "Additive", 10,cy,width-30,19, &data->flag, 0, 0, 0, 0, "Values generated by this modifier are applied on top of the existing values instead of overwriting them"); - cy -= 35; - uiBlockEndAlign(block); - - /* now add settings for individual modes */ - switch (data->mode) { - case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */ - { - float *cp = NULL; - char xval[32]; - unsigned int i; - - /* draw polynomial order selector */ - but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); - uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); - cy -= 35; - - /* draw controls for each coefficient and a + sign at end of row */ - uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cp= data->coefficients; - for (i=0; (i < data->arraysize) && (cp); i++, cp++) { - /* coefficient */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient for polynomial"); - - /* 'x' param (and '+' if necessary) */ - if (i == 0) - strcpy(xval, ""); - else if (i == 1) - strcpy(xval, "x"); - else - sprintf(xval, "x^%d", i); - uiDefBut(block, LABEL, 1, xval, 200, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, "Power of x"); - - if ( (i != (data->arraysize - 1)) || ((i==0) && data->arraysize==2) ) - uiDefBut(block, LABEL, 1, "+", 250, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cy -= 20; - } - } - break; - - case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial expression */ - { - float *cp = NULL; - unsigned int i; - - /* draw polynomial order selector */ - but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); - uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); - cy -= 35; - - /* draw controls for each pair of coefficients */ - uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cp= data->coefficients; - for (i=0; (i < data->poly_order) && (cp); i++, cp+=2) { - /* opening bracket */ - uiDefBut(block, LABEL, 1, "(", 40, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); - - /* coefficients */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x"); - - uiDefBut(block, LABEL, 1, "x + ", 150, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 180, cy, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient"); - - /* closing bracket and '+' sign */ - if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) ) - uiDefBut(block, LABEL, 1, ") â—Š", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - else - uiDefBut(block, LABEL, 1, ")", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cy -= 20; - } - } - break; - } -} - -/* --------------- */ - -/* draw settings for noise modifier */ -static void draw_modifier__fn_generator(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; - - /* set the height */ - (*height) = 80; - - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); - - uiDefButI(block, MENU, B_FMODIFIER_REDRAW, fn_type, - 3, cy, 300, 20, &data->type, 0, 0, 0, 0, "Type of function used to generate values"); - - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Amplitude:", - 3, cy1, 150, 20, &data->amplitude, 0.000001, 10000.0, 0.01, 3, "Scale factor determining the maximum/minimum values."); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Value Offset:", - 3, cy2, 150, 20, &data->value_offset, 0.0, 10000.0, 0.01, 3, "Constant factor to offset values by."); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Multiplier:", - 155, cy1, 150, 20, &data->phase_multiplier, 0.0, 100000.0, 0.1, 3, "Scale factor determining the 'speed' of the function."); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Offset:", - 155, cy2, 150, 20, &data->phase_offset, 0.0, 100000.0, 0.1, 3, "Constant factor to offset time by for function."); - -} - -/* --------------- */ - -/* draw settings for cycles modifier */ -static void draw_modifier__cycles(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_Cycles *data= (FMod_Cycles *)fcm->data; - char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2|Repeat Mirrored%x3"; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - - /* set the height */ - (*height) = 80; - - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); - - /* 'before' range */ - uiDefBut(block, LABEL, 1, "Before:", 4, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); - uiBlockBeginAlign(block); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 3,cy1,150,20, &data->before_mode, 0, 0, 0, 0, "Cycling mode to use before first keyframe"); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 3, cy2, 150, 20, &data->before_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); - uiBlockEndAlign(block); - - /* 'after' range */ - uiDefBut(block, LABEL, 1, "After:", 155, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling after last keyframe"); - uiBlockBeginAlign(block); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 157,cy1,150,20, &data->after_mode, 0, 0, 0, 0, "Cycling mode to use after first keyframe"); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 157, cy2, 150, 20, &data->after_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); - uiBlockEndAlign(block); -} - -/* --------------- */ - -/* draw settings for noise modifier */ -static void draw_modifier__noise(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_Noise *data= (FMod_Noise *)fcm->data; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - char blend_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; - - /* set the height */ - (*height) = 80; - - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); - - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, blend_mode, - 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of combining the results of this modifier and other modifiers."); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:", - 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, ""); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Strength:", - 3, cy2, 150, 20, &data->strength, 0.0, 10000.0, 0.01, 3, ""); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase:", - 155, cy1, 150, 20, &data->phase, 0.0, 100000.0, 0.1, 3, ""); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Depth:", - 155, cy2, 150, 20, &data->depth, 0, 128, 1, 3, ""); - -} - -/* --------------- */ - -#define BINARYSEARCH_FRAMEEQ_THRESH 0.0001 - -/* Binary search algorithm for finding where to insert Envelope Data Point. - * Returns the index to insert at (data already at that index will be offset if replace is 0) - */ -static int binarysearch_fcm_envelopedata_index (FCM_EnvelopeData array[], float frame, int arraylen, short *exists) -{ - int start=0, end=arraylen; - int loopbreaker= 0, maxloop= arraylen * 2; - - /* initialise exists-flag first */ - *exists= 0; - - /* sneaky optimisations (don't go through searching process if...): - * - keyframe to be added is to be added out of current bounds - * - keyframe to be added would replace one of the existing ones on bounds - */ - if ((arraylen <= 0) || (array == NULL)) { - printf("Warning: binarysearch_fcm_envelopedata_index() encountered invalid array \n"); - return 0; - } - else { - /* check whether to add before/after/on */ - float framenum; - - /* 'First' Point (when only one point, this case is used) */ - framenum= array[0].time; - if (IS_EQT(frame, framenum, BINARYSEARCH_FRAMEEQ_THRESH)) { - *exists = 1; - return 0; - } - else if (frame < framenum) - return 0; - - /* 'Last' Point */ - framenum= array[(arraylen-1)].time; - if (IS_EQT(frame, framenum, BINARYSEARCH_FRAMEEQ_THRESH)) { - *exists= 1; - return (arraylen - 1); - } - else if (frame > framenum) - return arraylen; - } - - - /* most of the time, this loop is just to find where to put it - * - 'loopbreaker' is just here to prevent infinite loops - */ - for (loopbreaker=0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) { - /* compute and get midpoint */ - int mid = start + ((end - start) / 2); /* we calculate the midpoint this way to avoid int overflows... */ - float midfra= array[mid].time; - - /* check if exactly equal to midpoint */ - if (IS_EQT(frame, midfra, BINARYSEARCH_FRAMEEQ_THRESH)) { - *exists = 1; - return mid; - } - - /* repeat in upper/lower half */ - if (frame > midfra) - start= mid + 1; - else if (frame < midfra) - end= mid - 1; - } - - /* print error if loop-limit exceeded */ - if (loopbreaker == (maxloop-1)) { - printf("Error: binarysearch_fcm_envelopedata_index() was taking too long \n"); - - // include debug info - printf("\tround = %d: start = %d, end = %d, arraylen = %d \n", loopbreaker, start, end, arraylen); - } - - /* not found, so return where to place it */ - return start; -} - -/* callback to add new envelope data point */ -// TODO: should we have a separate file for things like this? -static void fmod_envelope_addpoint_cb (bContext *C, void *fcm_dv, void *dummy) -{ - Scene *scene= CTX_data_scene(C); - FMod_Envelope *env= (FMod_Envelope *)fcm_dv; - FCM_EnvelopeData *fedn; - FCM_EnvelopeData fed; - - /* init template data */ - fed.min= -1.0f; - fed.max= 1.0f; - fed.time= (float)scene->r.cfra; // XXX make this int for ease of use? - fed.f1= fed.f2= 0; - - /* check that no data exists for the current frame... */ - if (env->data) { - short exists = -1; - int i= binarysearch_fcm_envelopedata_index(env->data, (float)(scene->r.cfra), env->totvert, &exists); - - /* binarysearch_...() will set exists by default to 0, so if it is non-zero, that means that the point exists already */ - if (exists) - return; - - /* add new */ - fedn= MEM_callocN((env->totvert+1)*sizeof(FCM_EnvelopeData), "FCM_EnvelopeData"); - - /* add the points that should occur before the point to be pasted */ - if (i > 0) - memcpy(fedn, env->data, i*sizeof(FCM_EnvelopeData)); - - /* add point to paste at index i */ - *(fedn + i)= fed; - - /* add the points that occur after the point to be pasted */ - if (i < env->totvert) - memcpy(fedn+i+1, env->data+i, (env->totvert-i)*sizeof(FCM_EnvelopeData)); - - /* replace (+ free) old with new */ - MEM_freeN(env->data); - env->data= fedn; - - env->totvert++; - } - else { - env->data= MEM_callocN(sizeof(FCM_EnvelopeData), "FCM_EnvelopeData"); - *(env->data)= fed; - - env->totvert= 1; - } -} - -/* callback to remove envelope data point */ -// TODO: should we have a separate file for things like this? -static void fmod_envelope_deletepoint_cb (bContext *C, void *fcm_dv, void *ind_v) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm_dv; - FCM_EnvelopeData *fedn; - int index= GET_INT_FROM_POINTER(ind_v); - - /* check that no data exists for the current frame... */ - if (env->totvert > 1) { - /* allocate a new smaller array */ - fedn= MEM_callocN(sizeof(FCM_EnvelopeData)*(env->totvert-1), "FCM_EnvelopeData"); - - memcpy(fedn, &env->data, sizeof(FCM_EnvelopeData)*(index)); - memcpy(&fedn[index], &env->data[index+1], sizeof(FCM_EnvelopeData)*(env->totvert-index-1)); - - /* free old array, and set the new */ - MEM_freeN(env->data); - env->data= fedn; - env->totvert--; - } - else { - /* just free array, since the only vert was deleted */ - if (env->data) - MEM_freeN(env->data); - env->totvert= 0; - } -} - -/* draw settings for envelope modifier */ -static void draw_modifier__envelope(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm->data; - FCM_EnvelopeData *fed; - uiBut *but; - int cy= (*yco - 28); - int i; - - /* set the height: - * - basic settings + variable height from envelope controls - */ - (*height) = 115 + (35 * env->totvert); - - /* basic settings (backdrop + general settings + some padding) */ - DRAW_BACKDROP((*height)); - - /* General Settings */ - uiDefBut(block, LABEL, 1, "Envelope:", 10, cy, 100, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); - cy -= 20; - - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Reference Val:", 10, cy, 300, 20, &env->midval, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, ""); - cy -= 20; - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 10, cy, 150, 20, &env->min, -UI_FLT_MAX, env->max, 10, 3, "Minimum value (relative to Reference Value) that is used as the 'normal' minimum value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 160, cy, 150, 20, &env->max, env->min, UI_FLT_MAX, 10, 3, "Maximum value (relative to Reference Value) that is used as the 'normal' maximum value"); - cy -= 35; - uiBlockEndAlign(block); - - - /* Points header */ - uiDefBut(block, LABEL, 1, "Control Points:", 10, cy, 150, 20, NULL, 0.0, 0.0, 0, 0, ""); - - but= uiDefBut(block, BUT, B_FMODIFIER_REDRAW, "Add Point", 160,cy,150,19, NULL, 0, 0, 0, 0, "Adds a new control-point to the envelope on the current frame"); - uiButSetFunc(but, fmod_envelope_addpoint_cb, env, NULL); - cy -= 35; - - /* Points List */ - for (i=0, fed=env->data; i < env->totvert; i++, fed++) { - uiBlockBeginAlign(block); - but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 2, cy, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs"); - uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 92, cy, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 192, cy, 100, 20, &fed->max, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Maximum bound of envelope at this point"); - - but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 292, cy, 18, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point"); - uiButSetFunc(but, fmod_envelope_deletepoint_cb, env, SET_INT_IN_POINTER(i)); - uiBlockBeginAlign(block); - cy -= 25; - } -} - -/* --------------- */ - -/* draw settings for limits modifier */ -static void draw_modifier__limits(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) -{ - FMod_Limits *data= (FMod_Limits *)fcm->data; - const int togButWidth = 50; - const int textButWidth = ((width/2)-togButWidth); - - /* set the height */ - (*height) = 60; - - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); - - /* Draw Pairs of LimitToggle+LimitValue */ - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMIN, B_FMODIFIER_REDRAW, "xMin", 5, *yco-30, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum x value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-30, (textButWidth-5), 18, &data->rect.xmin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest x value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMAX, B_FMODIFIER_REDRAW, "XMax", 5+(width-(textButWidth-5)-togButWidth), *yco-30, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum x value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-30, (textButWidth-5), 18, &data->rect.xmax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest x value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMIN, B_FMODIFIER_REDRAW, "yMin", 5, *yco-52, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum y value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-52, (textButWidth-5), 18, &data->rect.ymin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest y value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMAX, B_FMODIFIER_REDRAW, "YMax", 5+(width-(textButWidth-5)-togButWidth), *yco-52, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum y value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-52, (textButWidth-5), 18, &data->rect.ymax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest y value to allow"); - uiBlockEndAlign(block); -} - -/* --------------- */ - -static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco) -{ - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - uiBut *but; - short active= (fcm->flag & FMODIFIER_FLAG_ACTIVE); - short width= 314; - short height = 0; - int rb_col; - - /* draw header */ - { - uiBlockSetEmboss(block, UI_EMBOSSN); - - /* rounded header */ - rb_col= (active)?-20:20; - but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); - - /* expand */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); - - /* checkbox for 'active' status (for now) */ - but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); - uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm); - - /* name */ - if (fmi) - uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); - else - uiDefBut(block, LABEL, 1, "", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); - - /* 'mute' button */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); - - /* delete button */ - but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); - uiButSetFunc(but, delete_fmodifier_cb, fcu, fcm); - - uiBlockSetEmboss(block, UI_EMBOSS); - } - - /* when modifier is expanded, draw settings */ - if (fcm->flag & FMODIFIER_FLAG_EXPANDED) { - /* draw settings for individual modifiers */ - switch (fcm->type) { - case FMODIFIER_TYPE_GENERATOR: /* Generator */ - draw_modifier__generator(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - case FMODIFIER_TYPE_FN_GENERATOR: /* Built-In Function Generator */ - draw_modifier__fn_generator(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - case FMODIFIER_TYPE_CYCLES: /* Cycles */ - draw_modifier__cycles(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - case FMODIFIER_TYPE_ENVELOPE: /* Envelope */ - draw_modifier__envelope(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - case FMODIFIER_TYPE_LIMITS: /* Limits */ - draw_modifier__limits(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - case FMODIFIER_TYPE_NOISE: /* Noise */ - draw_modifier__noise(block, fcu, fcm, yco, &height, width, active, rb_col); - break; - - default: /* unknown type */ - height= 96; - //DRAW_BACKDROP(height); // XXX buggy... - break; - } - } - - /* adjust height for new to start */ - (*yco) -= (height + 27); -} - static void graph_panel_modifiers(const bContext *C, Panel *pa) { bAnimListElem *ale; @@ -950,7 +381,7 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) /* draw each modifier */ for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) - graph_panel_modifier_draw(block, fcu, fcm, &yco); + ANIM_uiTemplate_fmodifier_draw(block, fcu, fcm, &yco); MEM_freeN(ale); } diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index c0a1c979147..106185085d6 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -174,6 +174,7 @@ extern StructRNA RNA_ExplodeModifier; extern StructRNA RNA_ExpressionController; extern StructRNA RNA_Event; extern StructRNA RNA_FCurve; +extern StructRNA RNA_FCurveSample; extern StructRNA RNA_FileSelectParams; extern StructRNA RNA_FModifier; extern StructRNA RNA_FModifierCycles; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index 4a83b80a6cf..826d186516d 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -230,7 +230,7 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "FModifierFunctionGenerator", "FModifier"); - RNA_def_struct_ui_text(srna, "Built-In Function F-Curve Modifier", "Generates values using a Built-In Function."); + RNA_def_struct_ui_text(srna, "Built-In Function F-Modifier", "Generates values using a Built-In Function."); RNA_def_struct_sdna_from(srna, "FMod_FunctionGenerator", "data"); /* coefficients */ @@ -264,7 +264,7 @@ static void rna_def_fmodifier_envelope(BlenderRNA *brna) //PropertyRNA *prop; srna= RNA_def_struct(brna, "FModifierEnvelope", "FModifier"); - RNA_def_struct_ui_text(srna, "Envelope F-Curve Modifier", "Scales the values of the modified F-Curve."); + RNA_def_struct_ui_text(srna, "Envelope F-Modifier", "Scales the values of the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Envelope", "data"); } @@ -283,7 +283,7 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "FModifierCycles", "FModifier"); - RNA_def_struct_ui_text(srna, "Cycles F-Curve Modifier", "Repeats the values of the modified F-Curve."); + RNA_def_struct_ui_text(srna, "Cycles F-Modifier", "Repeats the values of the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Cycles", "data"); /* before */ @@ -312,7 +312,7 @@ static void rna_def_fmodifier_python(BlenderRNA *brna) //PropertyRNA *prop; srna= RNA_def_struct(brna, "FModifierPython", "FModifier"); - RNA_def_struct_ui_text(srna, "Python F-Curve Modifier", "Performs user-defined operation on the modified F-Curve."); + RNA_def_struct_ui_text(srna, "Python F-Modifier", "Performs user-defined operation on the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Python", "data"); } @@ -324,7 +324,7 @@ static void rna_def_fmodifier_limits(BlenderRNA *brna) PropertyRNA *prop; srna= RNA_def_struct(brna, "FModifierLimits", "FModifier"); - RNA_def_struct_ui_text(srna, "Limits F-Curve Modifier", "Limits the time/value ranges of the modified F-Curve."); + RNA_def_struct_ui_text(srna, "Limits F-Modifier", "Limits the time/value ranges of the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Limits", "data"); prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE); @@ -375,7 +375,7 @@ static void rna_def_fmodifier_noise(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "FModifierNoise", "FModifier"); - RNA_def_struct_ui_text(srna, "Noise F-Curve Modifier", "Gives randomness to the modified F-Curve."); + RNA_def_struct_ui_text(srna, "Noise F-Modifier", "Gives randomness to the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Noise", "data"); prop= RNA_def_property(srna, "modification", PROP_ENUM, PROP_NONE); @@ -411,7 +411,7 @@ void rna_def_fmodifier(BlenderRNA *brna) /* base struct definition */ srna= RNA_def_struct(brna, "FModifier", NULL); RNA_def_struct_refine_func(srna, "rna_FModifierType_refine"); - RNA_def_struct_ui_text(srna, "FCurve Modifier", "Modifier for values of F-Curve."); + RNA_def_struct_ui_text(srna, "F-Modifier", "Modifier for values of F-Curve."); #if 0 // XXX not used yet /* name */ @@ -509,6 +509,27 @@ void rna_def_channeldriver(BlenderRNA *brna) /* *********************** */ +static void rna_def_fpoint(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "FCurveSample", NULL); + RNA_def_struct_sdna(srna, "FPoint"); + RNA_def_struct_ui_text(srna, "F-Curve Sample", "Sample point for F-Curve."); + + /* Boolean values */ + prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", 1); + RNA_def_property_ui_text(prop, "Selected", "Selection status"); + + /* Vector value */ + prop= RNA_def_property(srna, "point", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_array(prop, 2); + RNA_def_property_float_sdna(prop, NULL, "vec"); + RNA_def_property_ui_text(prop, "Point", "Point coordinates"); +} + void rna_def_fcurve(BlenderRNA *brna) { StructRNA *srna; @@ -559,7 +580,7 @@ void rna_def_fcurve(BlenderRNA *brna) /* Collections */ prop= RNA_def_property(srna, "sampled_points", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "fpt", "totvert"); - RNA_def_property_struct_type(prop, "CurvePoint"); // XXX FPoints not BPoints here! FPoints are much smaller! + RNA_def_property_struct_type(prop, "FCurveSample"); RNA_def_property_ui_text(prop, "Sampled Points", "Sampled animation data"); prop= RNA_def_property(srna, "keyframe_points", PROP_COLLECTION, PROP_NONE); @@ -577,6 +598,7 @@ void rna_def_fcurve(BlenderRNA *brna) void RNA_def_fcurve(BlenderRNA *brna) { rna_def_fcurve(brna); + rna_def_fpoint(brna); rna_def_drivertarget(brna); rna_def_channeldriver(brna); From f3c47a66b0cb3bb70505ed46522e6c557769eaa5 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 05:25:14 +0000 Subject: [PATCH 112/512] NLA SoC: Separating out F-Modifier API * F-Modifier API is now in its own file in blenkernel * Renamed and refactored these so that they're no dependent on F-Curves, since all they really used was the fcu->modifiers list * Added missing license blocks to a few files --- source/blender/blenkernel/BKE_fcurve.h | 14 +- source/blender/blenkernel/intern/fcurve.c | 1137 +--------------- source/blender/blenkernel/intern/fmodifier.c | 1197 +++++++++++++++++ source/blender/blenkernel/intern/ipo.c | 2 +- source/blender/blenkernel/intern/nla.c | 13 +- source/blender/editors/animation/drivers.c | 31 +- .../blender/editors/animation/fmodifier_ui.c | 21 +- source/blender/editors/animation/keyframing.c | 29 +- source/blender/editors/animation/keyingsets.c | 29 +- .../blender/editors/space_graph/graph_draw.c | 2 +- .../blender/editors/space_graph/graph_edit.c | 4 +- .../blender/editors/space_graph/graph_utils.c | 4 +- 12 files changed, 1310 insertions(+), 1173 deletions(-) create mode 100644 source/blender/blenkernel/intern/fmodifier.c diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index 5c77e3c2ae4..cfc4e9077f6 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -104,15 +104,15 @@ FModifierTypeInfo *get_fmodifier_typeinfo(int type); /* ---------------------- */ -struct FModifier *fcurve_add_modifier(struct FCurve *fcu, int type); -void fcurve_copy_modifiers(ListBase *dst, ListBase *src); -void fcurve_remove_modifier(struct FCurve *fcu, struct FModifier *fcm); -void fcurve_free_modifiers(struct FCurve *fcu); +struct FModifier *add_fmodifier(ListBase *modifiers, int type); +void copy_fmodifiers(ListBase *dst, ListBase *src); +void remove_fmodifier(ListBase *modifiers, struct FModifier *fcm); +void free_fmodifiers(ListBase *modifiers); -struct FModifier *fcurve_find_active_modifier(struct FCurve *fcu); -void fcurve_set_active_modifier(struct FCurve *fcu, struct FModifier *fcm); +struct FModifier *find_active_fmodifier(ListBase *modifiers); +void set_active_fmodifier(ListBase *modifiers, struct FModifier *fcm); -short fcurve_has_suitable_modifier(struct FCurve *fcu, int mtype, short acttype); +short list_has_suitable_fmodifier(ListBase *modifiers, int mtype, short acttype); float evaluate_time_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float cvalue, float evaltime); void evaluate_value_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float *cvalue, float evaltime); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index e52c63d1b21..4c2ba61fc71 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -56,7 +56,7 @@ #include "RNA_types.h" #ifndef DISABLE_PYTHON -#include "BPY_extern.h" /* for BPY_pydriver_eval() */ +#include "BPY_extern.h" #endif #define SMALL -1.0e-10 @@ -84,7 +84,7 @@ void free_fcurve (FCurve *fcu) /* free extra data - i.e. modifiers, and driver */ fcurve_free_driver(fcu); - fcurve_free_modifiers(fcu); + free_fmodifiers(&fcu->modifiers); /* free f-curve itself */ MEM_freeN(fcu); @@ -140,7 +140,7 @@ FCurve *copy_fcurve (FCurve *fcu) fcu_d->driver= fcurve_copy_driver(fcu_d->driver); /* copy modifiers */ - fcurve_copy_modifiers(&fcu_d->modifiers, &fcu->modifiers); + copy_fmodifiers(&fcu_d->modifiers, &fcu->modifiers); /* return new data */ return fcu_d; @@ -1270,1135 +1270,6 @@ static float fcurve_eval_samples (FCurve *fcu, FPoint *fpts, float evaltime) return cvalue; } -/* ******************************** F-Curve Modifiers ********************************* */ - -/* Template --------------------------- */ - -/* Each modifier defines a set of functions, which will be called at the appropriate - * times. In addition to this, each modifier should have a type-info struct, where - * its functions are attached for use. - */ - -/* Template for type-info data: - * - make a copy of this when creating new modifiers, and just change the functions - * pointed to as necessary - * - although the naming of functions doesn't matter, it would help for code - * readability, to follow the same naming convention as is presented here - * - any functions that a constraint doesn't need to define, don't define - * for such cases, just use NULL - * - these should be defined after all the functions have been defined, so that - * forward-definitions/prototypes don't need to be used! - * - keep this copy #if-def'd so that future constraints can get based off this - */ -#if 0 -static FModifierTypeInfo FMI_MODNAME = { - FMODIFIER_TYPE_MODNAME, /* type */ - sizeof(FMod_ModName), /* size */ - FMI_TYPE_SOME_ACTION, /* action type */ - FMI_REQUIRES_SOME_REQUIREMENT, /* requirements */ - "Modifier Name", /* name */ - "FMod_ModName", /* struct name */ - fcm_modname_free, /* free data */ - fcm_modname_relink, /* relink data */ - fcm_modname_copy, /* copy data */ - fcm_modname_new_data, /* new data */ - fcm_modname_verify, /* verify */ - fcm_modname_time, /* evaluate time */ - fcm_modname_evaluate /* evaluate */ -}; -#endif - -/* Generator F-Curve Modifier --------------------------- */ - -/* Generators available: - * 1) simple polynomial generator: - * - Exanded form - (y = C[0]*(x^(n)) + C[1]*(x^(n-1)) + ... + C[n]) - * - Factorised form - (y = (C[0][0]*x + C[0][1]) * (C[1][0]*x + C[1][1]) * ... * (C[n][0]*x + C[n][1])) - */ - -static void fcm_generator_free (FModifier *fcm) -{ - FMod_Generator *data= (FMod_Generator *)fcm->data; - - /* free polynomial coefficients array */ - if (data->coefficients) - MEM_freeN(data->coefficients); -} - -static void fcm_generator_copy (FModifier *fcm, FModifier *src) -{ - FMod_Generator *gen= (FMod_Generator *)fcm->data; - FMod_Generator *ogen= (FMod_Generator *)src->data; - - /* copy coefficients array? */ - if (ogen->coefficients) - gen->coefficients= MEM_dupallocN(ogen->coefficients); -} - -static void fcm_generator_new_data (void *mdata) -{ - FMod_Generator *data= (FMod_Generator *)mdata; - float *cp; - - /* set default generator to be linear 0-1 (gradient = 1, y-offset = 0) */ - data->poly_order= 1; - data->arraysize= 2; - cp= data->coefficients= MEM_callocN(sizeof(float)*2, "FMod_Generator_Coefs"); - cp[0] = 0; // y-offset - cp[1] = 1; // gradient -} - -static void fcm_generator_verify (FModifier *fcm) -{ - FMod_Generator *data= (FMod_Generator *)fcm->data; - - /* requirements depend on mode */ - switch (data->mode) { - case FCM_GENERATOR_POLYNOMIAL: /* expanded polynomial expression */ - { - /* arraysize needs to be order+1, so resize if not */ - if (data->arraysize != (data->poly_order+1)) { - float *nc; - - /* make new coefficients array, and copy over as much data as can fit */ - nc= MEM_callocN(sizeof(float)*(data->poly_order+1), "FMod_Generator_Coefs"); - - if (data->coefficients) { - if (data->arraysize > (data->poly_order+1)) - memcpy(nc, data->coefficients, sizeof(float)*(data->poly_order+1)); - else - memcpy(nc, data->coefficients, sizeof(float)*data->arraysize); - - /* free the old data */ - MEM_freeN(data->coefficients); - } - - /* set the new data */ - data->coefficients= nc; - data->arraysize= data->poly_order+1; - } - } - break; - - case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* expanded polynomial expression */ - { - /* arraysize needs to be 2*order, so resize if not */ - if (data->arraysize != (data->poly_order * 2)) { - float *nc; - - /* make new coefficients array, and copy over as much data as can fit */ - nc= MEM_callocN(sizeof(float)*(data->poly_order*2), "FMod_Generator_Coefs"); - - if (data->coefficients) { - if (data->arraysize > (data->poly_order * 2)) - memcpy(nc, data->coefficients, sizeof(float)*(data->poly_order * 2)); - else - memcpy(nc, data->coefficients, sizeof(float)*data->arraysize); - - /* free the old data */ - MEM_freeN(data->coefficients); - } - - /* set the new data */ - data->coefficients= nc; - data->arraysize= data->poly_order * 2; - } - } - break; - } -} - -static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - FMod_Generator *data= (FMod_Generator *)fcm->data; - - /* behaviour depends on mode - * NOTE: the data in its default state is fine too - */ - switch (data->mode) { - case FCM_GENERATOR_POLYNOMIAL: /* expanded polynomial expression */ - { - /* we overwrite cvalue with the sum of the polynomial */ - float *powers = MEM_callocN(sizeof(float)*data->arraysize, "Poly Powers"); - float value= 0.0f; - unsigned int i; - - /* for each x^n, precalculate value based on previous one first... this should be - * faster that calling pow() for each entry - */ - for (i=0; i < data->arraysize; i++) { - /* first entry is x^0 = 1, otherwise, calculate based on previous */ - if (i) - powers[i]= powers[i-1] * evaltime; - else - powers[0]= 1; - } - - /* for each coefficient, add to value, which we'll write to *cvalue in one go */ - for (i=0; i < data->arraysize; i++) - value += data->coefficients[i] * powers[i]; - - /* only if something changed, write *cvalue in one go */ - if (data->poly_order) { - if (data->flag & FCM_GENERATOR_ADDITIVE) - *cvalue += value; - else - *cvalue= value; - } - - /* cleanup */ - if (powers) - MEM_freeN(powers); - } - break; - - case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ - { - float value= 1.0f, *cp=NULL; - unsigned int i; - - /* for each coefficient pair, solve for that bracket before accumulating in value by multiplying */ - for (cp=data->coefficients, i=0; (cp) && (i < data->poly_order); cp+=2, i++) - value *= (cp[0]*evaltime + cp[1]); - - /* only if something changed, write *cvalue in one go */ - if (data->poly_order) { - if (data->flag & FCM_GENERATOR_ADDITIVE) - *cvalue += value; - else - *cvalue= value; - } - } - break; - } -} - -static FModifierTypeInfo FMI_GENERATOR = { - FMODIFIER_TYPE_GENERATOR, /* type */ - sizeof(FMod_Generator), /* size */ - FMI_TYPE_GENERATE_CURVE, /* action type */ - FMI_REQUIRES_NOTHING, /* requirements */ - "Generator", /* name */ - "FMod_Generator", /* struct name */ - fcm_generator_free, /* free data */ - fcm_generator_copy, /* copy data */ - fcm_generator_new_data, /* new data */ - fcm_generator_verify, /* verify */ - NULL, /* evaluate time */ - fcm_generator_evaluate /* evaluate */ -}; - -/* Built-In Function Generator F-Curve Modifier --------------------------- */ - -/* This uses the general equation for equations: - * y = amplitude * fn(phase_multiplier*x + phase_offset) + y_offset - * - * where amplitude, phase_multiplier/offset, y_offset are user-defined coefficients, - * x is the evaluation 'time', and 'y' is the resultant value - * - * Functions available are - * sin, cos, tan, sinc (normalised sin), natural log, square root - */ - -static void fcm_fn_generator_new_data (void *mdata) -{ - FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)mdata; - - /* set amplitude and phase multiplier to 1.0f so that something is generated */ - data->amplitude= 1.0f; - data->phase_multiplier= 1.0f; -} - -/* Unary 'normalised sine' function - * y = sin(PI + x) / (PI * x), - * except for x = 0 when y = 1. - */ -static double sinc (double x) -{ - if (fabs(x) < 0.0001) - return 1.0; - else - return sin(M_PI * x) / (M_PI * x); -} - -static void fcm_fn_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; - double arg= data->phase_multiplier*evaltime + data->phase_offset; - double (*fn)(double v) = NULL; - - /* get function pointer to the func to use: - * WARNING: must perform special argument validation hereto guard against crashes - */ - switch (data->type) - { - /* simple ones */ - case FCM_GENERATOR_FN_SIN: /* sine wave */ - fn= sin; - break; - case FCM_GENERATOR_FN_COS: /* cosine wave */ - fn= cos; - break; - case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ - fn= sinc; - break; - - /* validation required */ - case FCM_GENERATOR_FN_TAN: /* tangent wave */ - { - /* check that argument is not on one of the discontinuities (i.e. 90deg, 270 deg, etc) */ - if IS_EQ(fmod((arg - M_PI_2), M_PI), 0.0) { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - else - fn= tan; - } - break; - case FCM_GENERATOR_FN_LN: /* natural log */ - { - /* check that value is greater than 1? */ - if (arg > 1.0f) { - fn= log; - } - else { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - } - break; - case FCM_GENERATOR_FN_SQRT: /* square root */ - { - /* no negative numbers */ - if (arg > 0.0f) { - fn= sqrt; - } - else { - if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) - *cvalue = 0.0f; /* no value possible here */ - } - } - break; - - default: - printf("Invalid Function-Generator for F-Modifier - %d \n", data->type); - } - - /* execute function callback to set value if appropriate */ - if (fn) { - float value= (float)(data->amplitude*fn(arg) + data->value_offset); - - if (data->flag & FCM_GENERATOR_ADDITIVE) - *cvalue += value; - else - *cvalue= value; - } -} - -static FModifierTypeInfo FMI_FN_GENERATOR = { - FMODIFIER_TYPE_FN_GENERATOR, /* type */ - sizeof(FMod_FunctionGenerator), /* size */ - FMI_TYPE_GENERATE_CURVE, /* action type */ - FMI_REQUIRES_NOTHING, /* requirements */ - "Built-In Function", /* name */ - "FMod_FunctionGenerator", /* struct name */ - NULL, /* free data */ - NULL, /* copy data */ - fcm_fn_generator_new_data, /* new data */ - NULL, /* verify */ - NULL, /* evaluate time */ - fcm_fn_generator_evaluate /* evaluate */ -}; - -/* Envelope F-Curve Modifier --------------------------- */ - -static void fcm_envelope_free (FModifier *fcm) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm->data; - - /* free envelope data array */ - if (env->data) - MEM_freeN(env->data); -} - -static void fcm_envelope_copy (FModifier *fcm, FModifier *src) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm->data; - FMod_Envelope *oenv= (FMod_Envelope *)src->data; - - /* copy envelope data array */ - if (oenv->data) - env->data= MEM_dupallocN(oenv->data); -} - -static void fcm_envelope_new_data (void *mdata) -{ - FMod_Envelope *env= (FMod_Envelope *)mdata; - - /* set default min/max ranges */ - env->min= -1.0f; - env->max= 1.0f; -} - -static void fcm_envelope_verify (FModifier *fcm) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm->data; - - /* if the are points, perform bubble-sort on them, as user may have changed the order */ - if (env->data) { - // XXX todo... - } -} - -static void fcm_envelope_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - FMod_Envelope *env= (FMod_Envelope *)fcm->data; - FCM_EnvelopeData *fed, *prevfed, *lastfed; - float min=0.0f, max=0.0f, fac=0.0f; - int a; - - /* get pointers */ - if (env->data == NULL) return; - prevfed= env->data; - fed= prevfed + 1; - lastfed= prevfed + (env->totvert-1); - - /* get min/max values for envelope at evaluation time (relative to mid-value) */ - if (prevfed->time >= evaltime) { - /* before or on first sample, so just extend value */ - min= prevfed->min; - max= prevfed->max; - } - else if (lastfed->time <= evaltime) { - /* after or on last sample, so just extend value */ - min= lastfed->min; - max= lastfed->max; - } - else { - /* evaltime occurs somewhere between segments */ - // TODO: implement binary search for this to make it faster? - for (a=0; prevfed && fed && (a < env->totvert-1); a++, prevfed=fed, fed++) { - /* evaltime occurs within the interval defined by these two envelope points */ - if ((prevfed->time <= evaltime) && (fed->time >= evaltime)) { - float afac, bfac, diff; - - diff= fed->time - prevfed->time; - afac= (evaltime - prevfed->time) / diff; - bfac= (fed->time - evaltime) / diff; - - min= bfac*prevfed->min + afac*fed->min; - max= bfac*prevfed->max + afac*fed->max; - - break; - } - } - } - - /* adjust *cvalue - * - fac is the ratio of how the current y-value corresponds to the reference range - * - thus, the new value is found by mapping the old range to the new! - */ - fac= (*cvalue - (env->midval + env->min)) / (env->max - env->min); - *cvalue= min + fac*(max - min); -} - -static FModifierTypeInfo FMI_ENVELOPE = { - FMODIFIER_TYPE_ENVELOPE, /* type */ - sizeof(FMod_Envelope), /* size */ - FMI_TYPE_REPLACE_VALUES, /* action type */ - 0, /* requirements */ - "Envelope", /* name */ - "FMod_Envelope", /* struct name */ - fcm_envelope_free, /* free data */ - fcm_envelope_copy, /* copy data */ - fcm_envelope_new_data, /* new data */ - fcm_envelope_verify, /* verify */ - NULL, /* evaluate time */ - fcm_envelope_evaluate /* evaluate */ -}; - -/* Cycles F-Curve Modifier --------------------------- */ - -/* This modifier changes evaltime to something that exists within the curve's frame-range, - * then re-evaluates modifier stack up to this point using the new time. This re-entrant behaviour - * is very likely to be more time-consuming than the original approach... (which was tighly integrated into - * the calculation code...). - * - * NOTE: this needs to be at the start of the stack to be of use, as it needs to know the extents of the keyframes/sample-data - * Possible TODO - store length of cycle information that can be initialised from the extents of the keyframes/sample-data, and adjusted - * as appropriate - */ - -/* temp data used during evaluation */ -typedef struct tFCMED_Cycles { - float cycyofs; /* y-offset to apply */ -} tFCMED_Cycles; - -static void fcm_cycles_new_data (void *mdata) -{ - FMod_Cycles *data= (FMod_Cycles *)mdata; - - /* turn on cycles by default */ - data->before_mode= data->after_mode= FCM_EXTRAPOLATE_CYCLIC; -} - -static float fcm_cycles_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) -{ - FMod_Cycles *data= (FMod_Cycles *)fcm->data; - float prevkey[2], lastkey[2], cycyofs=0.0f; - short side=0, mode=0; - int cycles=0; - - /* check if modifier is first in stack, otherwise disable ourself... */ - // FIXME... - if (fcm->prev) { - fcm->flag |= FMODIFIER_FLAG_DISABLED; - return evaltime; - } - - /* calculate new evaltime due to cyclic interpolation */ - if (fcu && fcu->bezt) { - BezTriple *prevbezt= fcu->bezt; - BezTriple *lastbezt= prevbezt + fcu->totvert-1; - - prevkey[0]= prevbezt->vec[1][0]; - prevkey[1]= prevbezt->vec[1][1]; - - lastkey[0]= lastbezt->vec[1][0]; - lastkey[1]= lastbezt->vec[1][1]; - } - else if (fcu && fcu->fpt) { - FPoint *prevfpt= fcu->fpt; - FPoint *lastfpt= prevfpt + fcu->totvert-1; - - prevkey[0]= prevfpt->vec[0]; - prevkey[1]= prevfpt->vec[1]; - - lastkey[0]= lastfpt->vec[0]; - lastkey[1]= lastfpt->vec[1]; - } - else - return evaltime; - - /* check if modifier will do anything - * 1) if in data range, definitely don't do anything - * 2) if before first frame or after last frame, make sure some cycling is in use - */ - if (evaltime < prevkey[0]) { - if (data->before_mode) { - side= -1; - mode= data->before_mode; - cycles= data->before_cycles; - } - } - else if (evaltime > lastkey[0]) { - if (data->after_mode) { - side= 1; - mode= data->after_mode; - cycles= data->after_cycles; - } - } - if ELEM(0, side, mode) - return evaltime; - - /* find relative place within a cycle */ - { - float cycdx=0, cycdy=0, ofs=0; - float cycle= 0; - - /* ofs is start frame of cycle */ - ofs= prevkey[0]; - - /* calculate period and amplitude (total height) of a cycle */ - cycdx= lastkey[0] - prevkey[0]; - cycdy= lastkey[1] - prevkey[1]; - - /* check if cycle is infinitely small, to be point of being impossible to use */ - if (cycdx == 0) - return evaltime; - - /* calculate the 'number' of the cycle */ - cycle= ((float)side * (evaltime - ofs) / cycdx); - - /* check that cyclic is still enabled for the specified time */ - if (cycles == 0) { - /* catch this case so that we don't exit when we have cycles=0 - * as this indicates infinite cycles... - */ - } - else if (cycle > (cycles+1)) { - /* we are too far away from range to evaluate - * TODO: but we should still hold last value... - */ - return evaltime; - } - - /* check if 'cyclic extrapolation', and thus calculate y-offset for this cycle */ - if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) { - cycyofs = (float)floor((evaltime - ofs) / cycdx); - cycyofs *= cycdy; - } - - /* calculate where in the cycle we are (overwrite evaltime to reflect this) */ - if ((mode == FCM_EXTRAPOLATE_MIRROR) && ((int)(cycle) % 2)) { - /* when 'mirror' option is used and cycle number is odd, this cycle is played in reverse - * - for 'before' extrapolation, we need to flip in a different way, otherwise values past - * then end of the curve get referenced (result of fmod will be negative, and with different phase) - */ - if (side < 0) - evaltime= (float)(prevkey[0] - fmod(evaltime-ofs, cycdx)); - else - evaltime= (float)(lastkey[0] - fmod(evaltime-ofs, cycdx)); - } - else { - /* the cycle is played normally... */ - evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs); - } - if (evaltime < ofs) evaltime += cycdx; - } - - /* store temp data if needed */ - if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) { - tFCMED_Cycles *edata; - - /* for now, this is just a float, but we could get more stuff... */ - fcm->edata= edata= MEM_callocN(sizeof(tFCMED_Cycles), "tFCMED_Cycles"); - edata->cycyofs= cycyofs; - } - - /* return the new frame to evaluate */ - return evaltime; -} - -static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - tFCMED_Cycles *edata= (tFCMED_Cycles *)fcm->edata; - - /* use temp data */ - if (edata) { - /* add cyclic offset - no need to check for now, otherwise the data wouldn't exist! */ - *cvalue += edata->cycyofs; - - /* free temp data */ - MEM_freeN(edata); - fcm->edata= NULL; - } -} - -static FModifierTypeInfo FMI_CYCLES = { - FMODIFIER_TYPE_CYCLES, /* type */ - sizeof(FMod_Cycles), /* size */ - FMI_TYPE_EXTRAPOLATION, /* action type */ - FMI_REQUIRES_ORIGINAL_DATA, /* requirements */ - "Cycles", /* name */ - "FMod_Cycles", /* struct name */ - NULL, /* free data */ - NULL, /* copy data */ - fcm_cycles_new_data, /* new data */ - NULL /*fcm_cycles_verify*/, /* verify */ - fcm_cycles_time, /* evaluate time */ - fcm_cycles_evaluate /* evaluate */ -}; - -/* Noise F-Curve Modifier --------------------------- */ - -static void fcm_noise_new_data (void *mdata) -{ - FMod_Noise *data= (FMod_Noise *)mdata; - - /* defaults */ - data->size= 1.0f; - data->strength= 1.0f; - data->phase= 1.0f; - data->depth = 0; - data->modification = FCM_NOISE_MODIF_REPLACE; -} - -static void fcm_noise_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - FMod_Noise *data= (FMod_Noise *)fcm->data; - float noise; - - noise = BLI_turbulence(data->size, evaltime, data->phase, 0.f, data->depth); - - switch (data->modification) { - case FCM_NOISE_MODIF_ADD: - *cvalue= *cvalue + noise * data->strength; - break; - case FCM_NOISE_MODIF_SUBTRACT: - *cvalue= *cvalue - noise * data->strength; - break; - case FCM_NOISE_MODIF_MULTIPLY: - *cvalue= *cvalue * noise * data->strength; - break; - case FCM_NOISE_MODIF_REPLACE: - default: - *cvalue= *cvalue + (noise - 0.5f) * data->strength; - break; - } -} - -static FModifierTypeInfo FMI_NOISE = { - FMODIFIER_TYPE_NOISE, /* type */ - sizeof(FMod_Noise), /* size */ - FMI_TYPE_REPLACE_VALUES, /* action type */ - 0, /* requirements */ - "Noise", /* name */ - "FMod_Noise", /* struct name */ - NULL, /* free data */ - NULL, /* copy data */ - fcm_noise_new_data, /* new data */ - NULL /*fcm_noise_verify*/, /* verify */ - NULL, /* evaluate time */ - fcm_noise_evaluate /* evaluate */ -}; - -/* Filter F-Curve Modifier --------------------------- */ - -#if 0 // XXX not yet implemented -static FModifierTypeInfo FMI_FILTER = { - FMODIFIER_TYPE_FILTER, /* type */ - sizeof(FMod_Filter), /* size */ - FMI_TYPE_REPLACE_VALUES, /* action type */ - 0, /* requirements */ - "Filter", /* name */ - "FMod_Filter", /* struct name */ - NULL, /* free data */ - NULL, /* copy data */ - NULL, /* new data */ - NULL /*fcm_filter_verify*/, /* verify */ - NULL, /* evlauate time */ - fcm_filter_evaluate /* evaluate */ -}; -#endif // XXX not yet implemented - - -/* Python F-Curve Modifier --------------------------- */ - -static void fcm_python_free (FModifier *fcm) -{ - FMod_Python *data= (FMod_Python *)fcm->data; - - /* id-properties */ - IDP_FreeProperty(data->prop); - MEM_freeN(data->prop); -} - -static void fcm_python_new_data (void *mdata) -{ - FMod_Python *data= (FMod_Python *)mdata; - - /* everything should be set correctly by calloc, except for the prop->type constant.*/ - data->prop = MEM_callocN(sizeof(IDProperty), "PyFModifierProps"); - data->prop->type = IDP_GROUP; -} - -static void fcm_python_copy (FModifier *fcm, FModifier *src) -{ - FMod_Python *pymod = (FMod_Python *)fcm->data; - FMod_Python *opymod = (FMod_Python *)src->data; - - pymod->prop = IDP_CopyProperty(opymod->prop); -} - -static void fcm_python_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ -#ifndef DISABLE_PYTHON - //FMod_Python *data= (FMod_Python *)fcm->data; - - /* FIXME... need to implement this modifier... - * It will need it execute a script using the custom properties - */ -#endif /* DISABLE_PYTHON */ -} - -static FModifierTypeInfo FMI_PYTHON = { - FMODIFIER_TYPE_PYTHON, /* type */ - sizeof(FMod_Python), /* size */ - FMI_TYPE_GENERATE_CURVE, /* action type */ - FMI_REQUIRES_RUNTIME_CHECK, /* requirements */ - "Python", /* name */ - "FMod_Python", /* struct name */ - fcm_python_free, /* free data */ - fcm_python_copy, /* copy data */ - fcm_python_new_data, /* new data */ - NULL /*fcm_python_verify*/, /* verify */ - NULL /*fcm_python_time*/, /* evaluate time */ - fcm_python_evaluate /* evaluate */ -}; - - -/* Limits F-Curve Modifier --------------------------- */ - -static float fcm_limits_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) -{ - FMod_Limits *data= (FMod_Limits *)fcm->data; - - /* check for the time limits */ - if ((data->flag & FCM_LIMIT_XMIN) && (evaltime < data->rect.xmin)) - return data->rect.xmin; - if ((data->flag & FCM_LIMIT_XMAX) && (evaltime > data->rect.xmax)) - return data->rect.xmax; - - /* modifier doesn't change time */ - return evaltime; -} - -static void fcm_limits_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) -{ - FMod_Limits *data= (FMod_Limits *)fcm->data; - - /* value limits now */ - if ((data->flag & FCM_LIMIT_YMIN) && (*cvalue < data->rect.ymin)) - *cvalue= data->rect.ymin; - if ((data->flag & FCM_LIMIT_YMAX) && (*cvalue > data->rect.ymax)) - *cvalue= data->rect.ymax; -} - -static FModifierTypeInfo FMI_LIMITS = { - FMODIFIER_TYPE_LIMITS, /* type */ - sizeof(FMod_Limits), /* size */ - FMI_TYPE_GENERATE_CURVE, /* action type */ /* XXX... err... */ - FMI_REQUIRES_RUNTIME_CHECK, /* requirements */ - "Limits", /* name */ - "FMod_Limits", /* struct name */ - NULL, /* free data */ - NULL, /* copy data */ - NULL, /* new data */ - NULL, /* verify */ - fcm_limits_time, /* evaluate time */ - fcm_limits_evaluate /* evaluate */ -}; - -/* F-Curve Modifier API --------------------------- */ -/* All of the F-Curve Modifier api functions use FModifierTypeInfo structs to carry out - * and operations that involve F-Curve modifier specific code. - */ - -/* These globals only ever get directly accessed in this file */ -static FModifierTypeInfo *fmodifiersTypeInfo[FMODIFIER_NUM_TYPES]; -static short FMI_INIT= 1; /* when non-zero, the list needs to be updated */ - -/* This function only gets called when FMI_INIT is non-zero */ -static void fmods_init_typeinfo () -{ - fmodifiersTypeInfo[0]= NULL; /* 'Null' F-Curve Modifier */ - fmodifiersTypeInfo[1]= &FMI_GENERATOR; /* Generator F-Curve Modifier */ - fmodifiersTypeInfo[2]= &FMI_FN_GENERATOR; /* Built-In Function Generator F-Curve Modifier */ - fmodifiersTypeInfo[3]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */ - fmodifiersTypeInfo[4]= &FMI_CYCLES; /* Cycles F-Curve Modifier */ - fmodifiersTypeInfo[5]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */ - fmodifiersTypeInfo[6]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented - fmodifiersTypeInfo[7]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */ - fmodifiersTypeInfo[8]= &FMI_LIMITS; /* Limits F-Curve Modifier */ -} - -/* This function should be used for getting the appropriate type-info when only - * a F-Curve modifier type is known - */ -FModifierTypeInfo *get_fmodifier_typeinfo (int type) -{ - /* initialise the type-info list? */ - if (FMI_INIT) { - fmods_init_typeinfo(); - FMI_INIT = 0; - } - - /* only return for valid types */ - if ( (type >= FMODIFIER_TYPE_NULL) && - (type <= FMODIFIER_NUM_TYPES ) ) - { - /* there shouldn't be any segfaults here... */ - return fmodifiersTypeInfo[type]; - } - else { - printf("No valid F-Curve Modifier type-info data available. Type = %i \n", type); - } - - return NULL; -} - -/* This function should always be used to get the appropriate type-info, as it - * has checks which prevent segfaults in some weird cases. - */ -FModifierTypeInfo *fmodifier_get_typeinfo (FModifier *fcm) -{ - /* only return typeinfo for valid modifiers */ - if (fcm) - return get_fmodifier_typeinfo(fcm->type); - else - return NULL; -} - -/* API --------------------------- */ - -/* Add a new F-Curve Modifier to the given F-Curve of a certain type */ -FModifier *fcurve_add_modifier (FCurve *fcu, int type) -{ - FModifierTypeInfo *fmi= get_fmodifier_typeinfo(type); - FModifier *fcm; - - /* sanity checks */ - if ELEM(NULL, fcu, fmi) - return NULL; - - /* special checks for whether modifier can be added */ - if ((fcu->modifiers.first) && (type == FMODIFIER_TYPE_CYCLES)) { - /* cycles modifier must be first in stack, so for now, don't add if it can't be */ - // TODO: perhaps there is some better way, but for now, - printf("Error: Cannot add 'Cycles' modifier to F-Curve, as 'Cycles' modifier can only be first in stack. \n"); - return NULL; - } - - /* add modifier itself */ - fcm= MEM_callocN(sizeof(FModifier), "F-Curve Modifier"); - fcm->type = type; - fcm->flag = FMODIFIER_FLAG_EXPANDED; - BLI_addtail(&fcu->modifiers, fcm); - - /* add modifier's data */ - fcm->data= MEM_callocN(fmi->size, fmi->structName); - - /* init custom settings if necessary */ - if (fmi->new_data) - fmi->new_data(fcm->data); - - /* return modifier for further editing */ - return fcm; -} - -/* Duplicate all of the F-Curve Modifiers in the Modifier stacks */ -void fcurve_copy_modifiers (ListBase *dst, ListBase *src) -{ - FModifier *fcm, *srcfcm; - - if ELEM(NULL, dst, src) - return; - - dst->first= dst->last= NULL; - BLI_duplicatelist(dst, src); - - for (fcm=dst->first, srcfcm=src->first; fcm && srcfcm; srcfcm=srcfcm->next, fcm=fcm->next) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* make a new copy of the F-Modifier's data */ - fcm->data = MEM_dupallocN(fcm->data); - - /* only do specific constraints if required */ - if (fmi && fmi->copy_data) - fmi->copy_data(fcm, srcfcm); - } -} - -/* Remove and free the given F-Curve Modifier from the given F-Curve's stack */ -void fcurve_remove_modifier (FCurve *fcu, FModifier *fcm) -{ - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* sanity check */ - if (fcm == NULL) - return; - - /* free modifier's special data (stored inside fcm->data) */ - if (fcm->data) { - if (fmi && fmi->free_data) - fmi->free_data(fcm); - - /* free modifier's data (fcm->data) */ - MEM_freeN(fcm->data); - } - - /* remove modifier from stack */ - if (fcu) - BLI_freelinkN(&fcu->modifiers, fcm); - else { - // XXX this case can probably be removed some day, as it shouldn't happen... - printf("fcurve_remove_modifier() - no fcurve \n"); - MEM_freeN(fcm); - } -} - -/* Remove all of a given F-Curve's modifiers */ -void fcurve_free_modifiers (FCurve *fcu) -{ - FModifier *fcm, *fmn; - - /* sanity check */ - if (fcu == NULL) - return; - - /* free each modifier in order - modifier is unlinked from list and freed */ - for (fcm= fcu->modifiers.first; fcm; fcm= fmn) { - fmn= fcm->next; - fcurve_remove_modifier(fcu, fcm); - } -} - -/* Find the active F-Curve Modifier */ -FModifier *fcurve_find_active_modifier (FCurve *fcu) -{ - FModifier *fcm; - - /* sanity checks */ - if ELEM(NULL, fcu, fcu->modifiers.first) - return NULL; - - /* loop over modifiers until 'active' one is found */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - if (fcm->flag & FMODIFIER_FLAG_ACTIVE) - return fcm; - } - - /* no modifier is active */ - return NULL; -} - -/* Set the active F-Curve Modifier */ -void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm) -{ - FModifier *fm; - - /* sanity checks */ - if ELEM(NULL, fcu, fcu->modifiers.first) - return; - - /* deactivate all, and set current one active */ - for (fm= fcu->modifiers.first; fm; fm= fm->next) - fm->flag &= ~FMODIFIER_FLAG_ACTIVE; - - /* make given modifier active */ - if (fcm) - fcm->flag |= FMODIFIER_FLAG_ACTIVE; -} - -/* Do we have any modifiers which match certain criteria - * - mtype - type of modifier (if 0, doesn't matter) - * - acttype - type of action to perform (if -1, doesn't matter) - */ -short fcurve_has_suitable_modifier (FCurve *fcu, int mtype, short acttype) -{ - FModifier *fcm; - - /* if there are no specific filtering criteria, just skip */ - if ((mtype == 0) && (acttype == 0)) - return (fcu && fcu->modifiers.first); - - /* sanity checks */ - if ELEM(NULL, fcu, fcu->modifiers.first) - return 0; - - /* find the first mdifier fitting these criteria */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - short mOk=1, aOk=1; /* by default 1, so that when only one test, won't fail */ - - /* check if applicable ones are fullfilled */ - if (mtype) - mOk= (fcm->type == mtype); - if (acttype > -1) - aOk= (fmi->acttype == acttype); - - /* if both are ok, we've found a hit */ - if (mOk && aOk) - return 1; - } - - /* no matches */ - return 0; -} - -/* Evaluation API --------------------------- */ - -/* evaluate time modifications imposed by some F-Curve Modifiers - * - this step acts as an optimisation to prevent the F-Curve stack being evaluated - * several times by modifiers requesting the time be modified, as the final result - * would have required using the modified time - * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be - * working on the 'global' result of the modified curve, not some localised segment, - * so nevaltime gets set to whatever the last time-modifying modifier likes... - * - we start from the end of the stack, as only the last one matters for now - */ -float evaluate_time_fmodifiers (ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) -{ - FModifier *fcm; - float m_evaltime= evaltime; - - /* sanity checks */ - if ELEM(NULL, modifiers, modifiers->first) - return evaltime; - - /* find the first modifier from end of stack that modifies time, and calculate the time the modifier - * would calculate time at - */ - for (fcm= fcu->modifiers.last; fcm; fcm= fcm->prev) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* only evaluate if there's a callback for this */ - // TODO: implement the 'influence' control feature... - if (fmi && fmi->evaluate_modifier_time) { - if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) - m_evaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime); - break; - } - } - - /* return the modified evaltime */ - return m_evaltime; -} - -/* Evalautes the given set of F-Curve Modifiers using the given data - * Should only be called after evaluate_time_fmodifiers() has been called... - */ -void evaluate_value_fmodifiers (ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) -{ - FModifier *fcm; - - /* sanity checks */ - if ELEM(NULL, modifiers, modifiers->first) - return; - - /* evaluate modifiers */ - for (fcm= modifiers->first; fcm; fcm= fcm->next) { - FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - - /* only evaluate if there's a callback for this */ - // TODO: implement the 'influence' control feature... - if (fmi && fmi->evaluate_modifier) { - if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) - fmi->evaluate_modifier(fcu, fcm, cvalue, evaltime); - } - } -} - - -/* Bake modifiers for given F-Curve to curve sample data, in the frame range defined - * by start and end (inclusive). - */ -void fcurve_bake_modifiers (FCurve *fcu, int start, int end) -{ - ChannelDriver *driver; - - /* sanity checks */ - // TODO: make these tests report errors using reports not printf's - if ELEM(NULL, fcu, fcu->modifiers.first) { - printf("Error: No F-Curve with F-Curve Modifiers to Bake\n"); - return; - } - - /* temporarily, disable driver while we sample, so that they don't influence the outcome */ - driver= fcu->driver; - fcu->driver= NULL; - - /* bake the modifiers, by sampling the curve at each frame */ - fcurve_store_samples(fcu, NULL, start, end, fcurve_samplingcb_evalcurve); - - /* free the modifiers now */ - fcurve_free_modifiers(fcu); - - /* restore driver */ - fcu->driver= driver; -} - /* ***************************** F-Curve - Evaluation ********************************* */ /* Evaluate and return the value of the given F-Curve at the specified frame ("evaltime") @@ -2450,7 +1321,7 @@ void calculate_fcurve (FCurve *fcu, float ctime) * any data which warrants this... */ if ( (fcu->totvert) || (fcu->driver && !(fcu->driver->flag & DRIVER_FLAG_INVALID)) || - fcurve_has_suitable_modifier(fcu, 0, FMI_TYPE_GENERATE_CURVE) ) + list_has_suitable_fmodifier(&fcu->modifiers, 0, FMI_TYPE_GENERATE_CURVE) ) { /* calculate and set curval (evaluates driver too if necessary) */ fcu->curval= evaluate_fcurve(fcu, ctime); diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c new file mode 100644 index 00000000000..aa5214979d9 --- /dev/null +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -0,0 +1,1197 @@ +/** + * $Id: fcurve.c 21299 2009-07-02 02:12:37Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** + */ + + +#include +#include +#include +#include +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "MEM_guardedalloc.h" + +#include "DNA_anim_types.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_noise.h" + +#include "BKE_fcurve.h" +#include "BKE_curve.h" +#include "BKE_global.h" +#include "BKE_idprop.h" +#include "BKE_utildefines.h" + +#include "RNA_access.h" +#include "RNA_types.h" + +#ifndef DISABLE_PYTHON +#include "BPY_extern.h" /* for BPY_pydriver_eval() */ +#endif + +#define SMALL -1.0e-10 +#define SELECT 1 + +/* ******************************** F-Modifiers ********************************* */ + +/* Info ------------------------------- */ + +/* F-Modifiers are modifiers which operate on F-Curves. However, they can also be defined + * on NLA-Strips to affect all of the F-Curves referenced by the NLA-Strip. + */ + +/* Template --------------------------- */ + +/* Each modifier defines a set of functions, which will be called at the appropriate + * times. In addition to this, each modifier should have a type-info struct, where + * its functions are attached for use. + */ + +/* Template for type-info data: + * - make a copy of this when creating new modifiers, and just change the functions + * pointed to as necessary + * - although the naming of functions doesn't matter, it would help for code + * readability, to follow the same naming convention as is presented here + * - any functions that a constraint doesn't need to define, don't define + * for such cases, just use NULL + * - these should be defined after all the functions have been defined, so that + * forward-definitions/prototypes don't need to be used! + * - keep this copy #if-def'd so that future constraints can get based off this + */ +#if 0 +static FModifierTypeInfo FMI_MODNAME = { + FMODIFIER_TYPE_MODNAME, /* type */ + sizeof(FMod_ModName), /* size */ + FMI_TYPE_SOME_ACTION, /* action type */ + FMI_REQUIRES_SOME_REQUIREMENT, /* requirements */ + "Modifier Name", /* name */ + "FMod_ModName", /* struct name */ + fcm_modname_free, /* free data */ + fcm_modname_relink, /* relink data */ + fcm_modname_copy, /* copy data */ + fcm_modname_new_data, /* new data */ + fcm_modname_verify, /* verify */ + fcm_modname_time, /* evaluate time */ + fcm_modname_evaluate /* evaluate */ +}; +#endif + +/* Generator F-Curve Modifier --------------------------- */ + +/* Generators available: + * 1) simple polynomial generator: + * - Exanded form - (y = C[0]*(x^(n)) + C[1]*(x^(n-1)) + ... + C[n]) + * - Factorised form - (y = (C[0][0]*x + C[0][1]) * (C[1][0]*x + C[1][1]) * ... * (C[n][0]*x + C[n][1])) + */ + +static void fcm_generator_free (FModifier *fcm) +{ + FMod_Generator *data= (FMod_Generator *)fcm->data; + + /* free polynomial coefficients array */ + if (data->coefficients) + MEM_freeN(data->coefficients); +} + +static void fcm_generator_copy (FModifier *fcm, FModifier *src) +{ + FMod_Generator *gen= (FMod_Generator *)fcm->data; + FMod_Generator *ogen= (FMod_Generator *)src->data; + + /* copy coefficients array? */ + if (ogen->coefficients) + gen->coefficients= MEM_dupallocN(ogen->coefficients); +} + +static void fcm_generator_new_data (void *mdata) +{ + FMod_Generator *data= (FMod_Generator *)mdata; + float *cp; + + /* set default generator to be linear 0-1 (gradient = 1, y-offset = 0) */ + data->poly_order= 1; + data->arraysize= 2; + cp= data->coefficients= MEM_callocN(sizeof(float)*2, "FMod_Generator_Coefs"); + cp[0] = 0; // y-offset + cp[1] = 1; // gradient +} + +static void fcm_generator_verify (FModifier *fcm) +{ + FMod_Generator *data= (FMod_Generator *)fcm->data; + + /* requirements depend on mode */ + switch (data->mode) { + case FCM_GENERATOR_POLYNOMIAL: /* expanded polynomial expression */ + { + /* arraysize needs to be order+1, so resize if not */ + if (data->arraysize != (data->poly_order+1)) { + float *nc; + + /* make new coefficients array, and copy over as much data as can fit */ + nc= MEM_callocN(sizeof(float)*(data->poly_order+1), "FMod_Generator_Coefs"); + + if (data->coefficients) { + if (data->arraysize > (data->poly_order+1)) + memcpy(nc, data->coefficients, sizeof(float)*(data->poly_order+1)); + else + memcpy(nc, data->coefficients, sizeof(float)*data->arraysize); + + /* free the old data */ + MEM_freeN(data->coefficients); + } + + /* set the new data */ + data->coefficients= nc; + data->arraysize= data->poly_order+1; + } + } + break; + + case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* expanded polynomial expression */ + { + /* arraysize needs to be 2*order, so resize if not */ + if (data->arraysize != (data->poly_order * 2)) { + float *nc; + + /* make new coefficients array, and copy over as much data as can fit */ + nc= MEM_callocN(sizeof(float)*(data->poly_order*2), "FMod_Generator_Coefs"); + + if (data->coefficients) { + if (data->arraysize > (data->poly_order * 2)) + memcpy(nc, data->coefficients, sizeof(float)*(data->poly_order * 2)); + else + memcpy(nc, data->coefficients, sizeof(float)*data->arraysize); + + /* free the old data */ + MEM_freeN(data->coefficients); + } + + /* set the new data */ + data->coefficients= nc; + data->arraysize= data->poly_order * 2; + } + } + break; + } +} + +static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Generator *data= (FMod_Generator *)fcm->data; + + /* behaviour depends on mode + * NOTE: the data in its default state is fine too + */ + switch (data->mode) { + case FCM_GENERATOR_POLYNOMIAL: /* expanded polynomial expression */ + { + /* we overwrite cvalue with the sum of the polynomial */ + float *powers = MEM_callocN(sizeof(float)*data->arraysize, "Poly Powers"); + float value= 0.0f; + unsigned int i; + + /* for each x^n, precalculate value based on previous one first... this should be + * faster that calling pow() for each entry + */ + for (i=0; i < data->arraysize; i++) { + /* first entry is x^0 = 1, otherwise, calculate based on previous */ + if (i) + powers[i]= powers[i-1] * evaltime; + else + powers[0]= 1; + } + + /* for each coefficient, add to value, which we'll write to *cvalue in one go */ + for (i=0; i < data->arraysize; i++) + value += data->coefficients[i] * powers[i]; + + /* only if something changed, write *cvalue in one go */ + if (data->poly_order) { + if (data->flag & FCM_GENERATOR_ADDITIVE) + *cvalue += value; + else + *cvalue= value; + } + + /* cleanup */ + if (powers) + MEM_freeN(powers); + } + break; + + case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ + { + float value= 1.0f, *cp=NULL; + unsigned int i; + + /* for each coefficient pair, solve for that bracket before accumulating in value by multiplying */ + for (cp=data->coefficients, i=0; (cp) && (i < data->poly_order); cp+=2, i++) + value *= (cp[0]*evaltime + cp[1]); + + /* only if something changed, write *cvalue in one go */ + if (data->poly_order) { + if (data->flag & FCM_GENERATOR_ADDITIVE) + *cvalue += value; + else + *cvalue= value; + } + } + break; + } +} + +static FModifierTypeInfo FMI_GENERATOR = { + FMODIFIER_TYPE_GENERATOR, /* type */ + sizeof(FMod_Generator), /* size */ + FMI_TYPE_GENERATE_CURVE, /* action type */ + FMI_REQUIRES_NOTHING, /* requirements */ + "Generator", /* name */ + "FMod_Generator", /* struct name */ + fcm_generator_free, /* free data */ + fcm_generator_copy, /* copy data */ + fcm_generator_new_data, /* new data */ + fcm_generator_verify, /* verify */ + NULL, /* evaluate time */ + fcm_generator_evaluate /* evaluate */ +}; + +/* Built-In Function Generator F-Curve Modifier --------------------------- */ + +/* This uses the general equation for equations: + * y = amplitude * fn(phase_multiplier*x + phase_offset) + y_offset + * + * where amplitude, phase_multiplier/offset, y_offset are user-defined coefficients, + * x is the evaluation 'time', and 'y' is the resultant value + * + * Functions available are + * sin, cos, tan, sinc (normalised sin), natural log, square root + */ + +static void fcm_fn_generator_new_data (void *mdata) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)mdata; + + /* set amplitude and phase multiplier to 1.0f so that something is generated */ + data->amplitude= 1.0f; + data->phase_multiplier= 1.0f; +} + +/* Unary 'normalised sine' function + * y = sin(PI + x) / (PI * x), + * except for x = 0 when y = 1. + */ +static double sinc (double x) +{ + if (fabs(x) < 0.0001) + return 1.0; + else + return sin(M_PI * x) / (M_PI * x); +} + +static void fcm_fn_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; + double arg= data->phase_multiplier*evaltime + data->phase_offset; + double (*fn)(double v) = NULL; + + /* get function pointer to the func to use: + * WARNING: must perform special argument validation hereto guard against crashes + */ + switch (data->type) + { + /* simple ones */ + case FCM_GENERATOR_FN_SIN: /* sine wave */ + fn= sin; + break; + case FCM_GENERATOR_FN_COS: /* cosine wave */ + fn= cos; + break; + case FCM_GENERATOR_FN_SINC: /* normalised sine wave */ + fn= sinc; + break; + + /* validation required */ + case FCM_GENERATOR_FN_TAN: /* tangent wave */ + { + /* check that argument is not on one of the discontinuities (i.e. 90deg, 270 deg, etc) */ + if IS_EQ(fmod((arg - M_PI_2), M_PI), 0.0) { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + else + fn= tan; + } + break; + case FCM_GENERATOR_FN_LN: /* natural log */ + { + /* check that value is greater than 1? */ + if (arg > 1.0f) { + fn= log; + } + else { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + } + break; + case FCM_GENERATOR_FN_SQRT: /* square root */ + { + /* no negative numbers */ + if (arg > 0.0f) { + fn= sqrt; + } + else { + if ((data->flag & FCM_GENERATOR_ADDITIVE) == 0) + *cvalue = 0.0f; /* no value possible here */ + } + } + break; + + default: + printf("Invalid Function-Generator for F-Modifier - %d \n", data->type); + } + + /* execute function callback to set value if appropriate */ + if (fn) { + float value= (float)(data->amplitude*fn(arg) + data->value_offset); + + if (data->flag & FCM_GENERATOR_ADDITIVE) + *cvalue += value; + else + *cvalue= value; + } +} + +static FModifierTypeInfo FMI_FN_GENERATOR = { + FMODIFIER_TYPE_FN_GENERATOR, /* type */ + sizeof(FMod_FunctionGenerator), /* size */ + FMI_TYPE_GENERATE_CURVE, /* action type */ + FMI_REQUIRES_NOTHING, /* requirements */ + "Built-In Function", /* name */ + "FMod_FunctionGenerator", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + fcm_fn_generator_new_data, /* new data */ + NULL, /* verify */ + NULL, /* evaluate time */ + fcm_fn_generator_evaluate /* evaluate */ +}; + +/* Envelope F-Curve Modifier --------------------------- */ + +static void fcm_envelope_free (FModifier *fcm) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm->data; + + /* free envelope data array */ + if (env->data) + MEM_freeN(env->data); +} + +static void fcm_envelope_copy (FModifier *fcm, FModifier *src) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm->data; + FMod_Envelope *oenv= (FMod_Envelope *)src->data; + + /* copy envelope data array */ + if (oenv->data) + env->data= MEM_dupallocN(oenv->data); +} + +static void fcm_envelope_new_data (void *mdata) +{ + FMod_Envelope *env= (FMod_Envelope *)mdata; + + /* set default min/max ranges */ + env->min= -1.0f; + env->max= 1.0f; +} + +static void fcm_envelope_verify (FModifier *fcm) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm->data; + + /* if the are points, perform bubble-sort on them, as user may have changed the order */ + if (env->data) { + // XXX todo... + } +} + +static void fcm_envelope_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Envelope *env= (FMod_Envelope *)fcm->data; + FCM_EnvelopeData *fed, *prevfed, *lastfed; + float min=0.0f, max=0.0f, fac=0.0f; + int a; + + /* get pointers */ + if (env->data == NULL) return; + prevfed= env->data; + fed= prevfed + 1; + lastfed= prevfed + (env->totvert-1); + + /* get min/max values for envelope at evaluation time (relative to mid-value) */ + if (prevfed->time >= evaltime) { + /* before or on first sample, so just extend value */ + min= prevfed->min; + max= prevfed->max; + } + else if (lastfed->time <= evaltime) { + /* after or on last sample, so just extend value */ + min= lastfed->min; + max= lastfed->max; + } + else { + /* evaltime occurs somewhere between segments */ + // TODO: implement binary search for this to make it faster? + for (a=0; prevfed && fed && (a < env->totvert-1); a++, prevfed=fed, fed++) { + /* evaltime occurs within the interval defined by these two envelope points */ + if ((prevfed->time <= evaltime) && (fed->time >= evaltime)) { + float afac, bfac, diff; + + diff= fed->time - prevfed->time; + afac= (evaltime - prevfed->time) / diff; + bfac= (fed->time - evaltime) / diff; + + min= bfac*prevfed->min + afac*fed->min; + max= bfac*prevfed->max + afac*fed->max; + + break; + } + } + } + + /* adjust *cvalue + * - fac is the ratio of how the current y-value corresponds to the reference range + * - thus, the new value is found by mapping the old range to the new! + */ + fac= (*cvalue - (env->midval + env->min)) / (env->max - env->min); + *cvalue= min + fac*(max - min); +} + +static FModifierTypeInfo FMI_ENVELOPE = { + FMODIFIER_TYPE_ENVELOPE, /* type */ + sizeof(FMod_Envelope), /* size */ + FMI_TYPE_REPLACE_VALUES, /* action type */ + 0, /* requirements */ + "Envelope", /* name */ + "FMod_Envelope", /* struct name */ + fcm_envelope_free, /* free data */ + fcm_envelope_copy, /* copy data */ + fcm_envelope_new_data, /* new data */ + fcm_envelope_verify, /* verify */ + NULL, /* evaluate time */ + fcm_envelope_evaluate /* evaluate */ +}; + +/* Cycles F-Curve Modifier --------------------------- */ + +/* This modifier changes evaltime to something that exists within the curve's frame-range, + * then re-evaluates modifier stack up to this point using the new time. This re-entrant behaviour + * is very likely to be more time-consuming than the original approach... (which was tighly integrated into + * the calculation code...). + * + * NOTE: this needs to be at the start of the stack to be of use, as it needs to know the extents of the keyframes/sample-data + * Possible TODO - store length of cycle information that can be initialised from the extents of the keyframes/sample-data, and adjusted + * as appropriate + */ + +/* temp data used during evaluation */ +typedef struct tFCMED_Cycles { + float cycyofs; /* y-offset to apply */ +} tFCMED_Cycles; + +static void fcm_cycles_new_data (void *mdata) +{ + FMod_Cycles *data= (FMod_Cycles *)mdata; + + /* turn on cycles by default */ + data->before_mode= data->after_mode= FCM_EXTRAPOLATE_CYCLIC; +} + +static float fcm_cycles_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) +{ + FMod_Cycles *data= (FMod_Cycles *)fcm->data; + float prevkey[2], lastkey[2], cycyofs=0.0f; + short side=0, mode=0; + int cycles=0; + + /* check if modifier is first in stack, otherwise disable ourself... */ + // FIXME... + if (fcm->prev) { + fcm->flag |= FMODIFIER_FLAG_DISABLED; + return evaltime; + } + + /* calculate new evaltime due to cyclic interpolation */ + if (fcu && fcu->bezt) { + BezTriple *prevbezt= fcu->bezt; + BezTriple *lastbezt= prevbezt + fcu->totvert-1; + + prevkey[0]= prevbezt->vec[1][0]; + prevkey[1]= prevbezt->vec[1][1]; + + lastkey[0]= lastbezt->vec[1][0]; + lastkey[1]= lastbezt->vec[1][1]; + } + else if (fcu && fcu->fpt) { + FPoint *prevfpt= fcu->fpt; + FPoint *lastfpt= prevfpt + fcu->totvert-1; + + prevkey[0]= prevfpt->vec[0]; + prevkey[1]= prevfpt->vec[1]; + + lastkey[0]= lastfpt->vec[0]; + lastkey[1]= lastfpt->vec[1]; + } + else + return evaltime; + + /* check if modifier will do anything + * 1) if in data range, definitely don't do anything + * 2) if before first frame or after last frame, make sure some cycling is in use + */ + if (evaltime < prevkey[0]) { + if (data->before_mode) { + side= -1; + mode= data->before_mode; + cycles= data->before_cycles; + } + } + else if (evaltime > lastkey[0]) { + if (data->after_mode) { + side= 1; + mode= data->after_mode; + cycles= data->after_cycles; + } + } + if ELEM(0, side, mode) + return evaltime; + + /* find relative place within a cycle */ + { + float cycdx=0, cycdy=0, ofs=0; + float cycle= 0; + + /* ofs is start frame of cycle */ + ofs= prevkey[0]; + + /* calculate period and amplitude (total height) of a cycle */ + cycdx= lastkey[0] - prevkey[0]; + cycdy= lastkey[1] - prevkey[1]; + + /* check if cycle is infinitely small, to be point of being impossible to use */ + if (cycdx == 0) + return evaltime; + + /* calculate the 'number' of the cycle */ + cycle= ((float)side * (evaltime - ofs) / cycdx); + + /* check that cyclic is still enabled for the specified time */ + if (cycles == 0) { + /* catch this case so that we don't exit when we have cycles=0 + * as this indicates infinite cycles... + */ + } + else if (cycle > (cycles+1)) { + /* we are too far away from range to evaluate + * TODO: but we should still hold last value... + */ + return evaltime; + } + + /* check if 'cyclic extrapolation', and thus calculate y-offset for this cycle */ + if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) { + cycyofs = (float)floor((evaltime - ofs) / cycdx); + cycyofs *= cycdy; + } + + /* calculate where in the cycle we are (overwrite evaltime to reflect this) */ + if ((mode == FCM_EXTRAPOLATE_MIRROR) && ((int)(cycle) % 2)) { + /* when 'mirror' option is used and cycle number is odd, this cycle is played in reverse + * - for 'before' extrapolation, we need to flip in a different way, otherwise values past + * then end of the curve get referenced (result of fmod will be negative, and with different phase) + */ + if (side < 0) + evaltime= (float)(prevkey[0] - fmod(evaltime-ofs, cycdx)); + else + evaltime= (float)(lastkey[0] - fmod(evaltime-ofs, cycdx)); + } + else { + /* the cycle is played normally... */ + evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs); + } + if (evaltime < ofs) evaltime += cycdx; + } + + /* store temp data if needed */ + if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) { + tFCMED_Cycles *edata; + + /* for now, this is just a float, but we could get more stuff... */ + fcm->edata= edata= MEM_callocN(sizeof(tFCMED_Cycles), "tFCMED_Cycles"); + edata->cycyofs= cycyofs; + } + + /* return the new frame to evaluate */ + return evaltime; +} + +static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + tFCMED_Cycles *edata= (tFCMED_Cycles *)fcm->edata; + + /* use temp data */ + if (edata) { + /* add cyclic offset - no need to check for now, otherwise the data wouldn't exist! */ + *cvalue += edata->cycyofs; + + /* free temp data */ + MEM_freeN(edata); + fcm->edata= NULL; + } +} + +static FModifierTypeInfo FMI_CYCLES = { + FMODIFIER_TYPE_CYCLES, /* type */ + sizeof(FMod_Cycles), /* size */ + FMI_TYPE_EXTRAPOLATION, /* action type */ + FMI_REQUIRES_ORIGINAL_DATA, /* requirements */ + "Cycles", /* name */ + "FMod_Cycles", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + fcm_cycles_new_data, /* new data */ + NULL /*fcm_cycles_verify*/, /* verify */ + fcm_cycles_time, /* evaluate time */ + fcm_cycles_evaluate /* evaluate */ +}; + +/* Noise F-Curve Modifier --------------------------- */ + +static void fcm_noise_new_data (void *mdata) +{ + FMod_Noise *data= (FMod_Noise *)mdata; + + /* defaults */ + data->size= 1.0f; + data->strength= 1.0f; + data->phase= 1.0f; + data->depth = 0; + data->modification = FCM_NOISE_MODIF_REPLACE; +} + +static void fcm_noise_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Noise *data= (FMod_Noise *)fcm->data; + float noise; + + noise = BLI_turbulence(data->size, evaltime, data->phase, 0.f, data->depth); + + switch (data->modification) { + case FCM_NOISE_MODIF_ADD: + *cvalue= *cvalue + noise * data->strength; + break; + case FCM_NOISE_MODIF_SUBTRACT: + *cvalue= *cvalue - noise * data->strength; + break; + case FCM_NOISE_MODIF_MULTIPLY: + *cvalue= *cvalue * noise * data->strength; + break; + case FCM_NOISE_MODIF_REPLACE: + default: + *cvalue= *cvalue + (noise - 0.5f) * data->strength; + break; + } +} + +static FModifierTypeInfo FMI_NOISE = { + FMODIFIER_TYPE_NOISE, /* type */ + sizeof(FMod_Noise), /* size */ + FMI_TYPE_REPLACE_VALUES, /* action type */ + 0, /* requirements */ + "Noise", /* name */ + "FMod_Noise", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + fcm_noise_new_data, /* new data */ + NULL /*fcm_noise_verify*/, /* verify */ + NULL, /* evaluate time */ + fcm_noise_evaluate /* evaluate */ +}; + +/* Filter F-Curve Modifier --------------------------- */ + +#if 0 // XXX not yet implemented +static FModifierTypeInfo FMI_FILTER = { + FMODIFIER_TYPE_FILTER, /* type */ + sizeof(FMod_Filter), /* size */ + FMI_TYPE_REPLACE_VALUES, /* action type */ + 0, /* requirements */ + "Filter", /* name */ + "FMod_Filter", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + NULL, /* new data */ + NULL /*fcm_filter_verify*/, /* verify */ + NULL, /* evlauate time */ + fcm_filter_evaluate /* evaluate */ +}; +#endif // XXX not yet implemented + + +/* Python F-Curve Modifier --------------------------- */ + +static void fcm_python_free (FModifier *fcm) +{ + FMod_Python *data= (FMod_Python *)fcm->data; + + /* id-properties */ + IDP_FreeProperty(data->prop); + MEM_freeN(data->prop); +} + +static void fcm_python_new_data (void *mdata) +{ + FMod_Python *data= (FMod_Python *)mdata; + + /* everything should be set correctly by calloc, except for the prop->type constant.*/ + data->prop = MEM_callocN(sizeof(IDProperty), "PyFModifierProps"); + data->prop->type = IDP_GROUP; +} + +static void fcm_python_copy (FModifier *fcm, FModifier *src) +{ + FMod_Python *pymod = (FMod_Python *)fcm->data; + FMod_Python *opymod = (FMod_Python *)src->data; + + pymod->prop = IDP_CopyProperty(opymod->prop); +} + +static void fcm_python_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ +#ifndef DISABLE_PYTHON + //FMod_Python *data= (FMod_Python *)fcm->data; + + /* FIXME... need to implement this modifier... + * It will need it execute a script using the custom properties + */ +#endif /* DISABLE_PYTHON */ +} + +static FModifierTypeInfo FMI_PYTHON = { + FMODIFIER_TYPE_PYTHON, /* type */ + sizeof(FMod_Python), /* size */ + FMI_TYPE_GENERATE_CURVE, /* action type */ + FMI_REQUIRES_RUNTIME_CHECK, /* requirements */ + "Python", /* name */ + "FMod_Python", /* struct name */ + fcm_python_free, /* free data */ + fcm_python_copy, /* copy data */ + fcm_python_new_data, /* new data */ + NULL /*fcm_python_verify*/, /* verify */ + NULL /*fcm_python_time*/, /* evaluate time */ + fcm_python_evaluate /* evaluate */ +}; + + +/* Limits F-Curve Modifier --------------------------- */ + +static float fcm_limits_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) +{ + FMod_Limits *data= (FMod_Limits *)fcm->data; + + /* check for the time limits */ + if ((data->flag & FCM_LIMIT_XMIN) && (evaltime < data->rect.xmin)) + return data->rect.xmin; + if ((data->flag & FCM_LIMIT_XMAX) && (evaltime > data->rect.xmax)) + return data->rect.xmax; + + /* modifier doesn't change time */ + return evaltime; +} + +static void fcm_limits_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Limits *data= (FMod_Limits *)fcm->data; + + /* value limits now */ + if ((data->flag & FCM_LIMIT_YMIN) && (*cvalue < data->rect.ymin)) + *cvalue= data->rect.ymin; + if ((data->flag & FCM_LIMIT_YMAX) && (*cvalue > data->rect.ymax)) + *cvalue= data->rect.ymax; +} + +static FModifierTypeInfo FMI_LIMITS = { + FMODIFIER_TYPE_LIMITS, /* type */ + sizeof(FMod_Limits), /* size */ + FMI_TYPE_GENERATE_CURVE, /* action type */ /* XXX... err... */ + FMI_REQUIRES_RUNTIME_CHECK, /* requirements */ + "Limits", /* name */ + "FMod_Limits", /* struct name */ + NULL, /* free data */ + NULL, /* copy data */ + NULL, /* new data */ + NULL, /* verify */ + fcm_limits_time, /* evaluate time */ + fcm_limits_evaluate /* evaluate */ +}; + +/* F-Curve Modifier API --------------------------- */ +/* All of the F-Curve Modifier api functions use FModifierTypeInfo structs to carry out + * and operations that involve F-Curve modifier specific code. + */ + +/* These globals only ever get directly accessed in this file */ +static FModifierTypeInfo *fmodifiersTypeInfo[FMODIFIER_NUM_TYPES]; +static short FMI_INIT= 1; /* when non-zero, the list needs to be updated */ + +/* This function only gets called when FMI_INIT is non-zero */ +static void fmods_init_typeinfo () +{ + fmodifiersTypeInfo[0]= NULL; /* 'Null' F-Curve Modifier */ + fmodifiersTypeInfo[1]= &FMI_GENERATOR; /* Generator F-Curve Modifier */ + fmodifiersTypeInfo[2]= &FMI_FN_GENERATOR; /* Built-In Function Generator F-Curve Modifier */ + fmodifiersTypeInfo[3]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */ + fmodifiersTypeInfo[4]= &FMI_CYCLES; /* Cycles F-Curve Modifier */ + fmodifiersTypeInfo[5]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */ + fmodifiersTypeInfo[6]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented + fmodifiersTypeInfo[7]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */ + fmodifiersTypeInfo[8]= &FMI_LIMITS; /* Limits F-Curve Modifier */ +} + +/* This function should be used for getting the appropriate type-info when only + * a F-Curve modifier type is known + */ +FModifierTypeInfo *get_fmodifier_typeinfo (int type) +{ + /* initialise the type-info list? */ + if (FMI_INIT) { + fmods_init_typeinfo(); + FMI_INIT = 0; + } + + /* only return for valid types */ + if ( (type >= FMODIFIER_TYPE_NULL) && + (type <= FMODIFIER_NUM_TYPES ) ) + { + /* there shouldn't be any segfaults here... */ + return fmodifiersTypeInfo[type]; + } + else { + printf("No valid F-Curve Modifier type-info data available. Type = %i \n", type); + } + + return NULL; +} + +/* This function should always be used to get the appropriate type-info, as it + * has checks which prevent segfaults in some weird cases. + */ +FModifierTypeInfo *fmodifier_get_typeinfo (FModifier *fcm) +{ + /* only return typeinfo for valid modifiers */ + if (fcm) + return get_fmodifier_typeinfo(fcm->type); + else + return NULL; +} + +/* API --------------------------- */ + +/* Add a new F-Curve Modifier to the given F-Curve of a certain type */ +FModifier *add_fmodifier (ListBase *modifiers, int type) +{ + FModifierTypeInfo *fmi= get_fmodifier_typeinfo(type); + FModifier *fcm; + + /* sanity checks */ + if ELEM(NULL, modifiers, fmi) + return NULL; + + /* special checks for whether modifier can be added */ + if ((modifiers->first) && (type == FMODIFIER_TYPE_CYCLES)) { + /* cycles modifier must be first in stack, so for now, don't add if it can't be */ + // TODO: perhaps there is some better way, but for now, + printf("Error: Cannot add 'Cycles' modifier to F-Curve, as 'Cycles' modifier can only be first in stack. \n"); + return NULL; + } + + /* add modifier itself */ + fcm= MEM_callocN(sizeof(FModifier), "F-Curve Modifier"); + fcm->type = type; + fcm->flag = FMODIFIER_FLAG_EXPANDED; + BLI_addtail(modifiers, fcm); + + /* add modifier's data */ + fcm->data= MEM_callocN(fmi->size, fmi->structName); + + /* init custom settings if necessary */ + if (fmi->new_data) + fmi->new_data(fcm->data); + + /* return modifier for further editing */ + return fcm; +} + +/* Duplicate all of the F-Modifiers in the Modifier stacks */ +void copy_fmodifiers (ListBase *dst, ListBase *src) +{ + FModifier *fcm, *srcfcm; + + if ELEM(NULL, dst, src) + return; + + dst->first= dst->last= NULL; + BLI_duplicatelist(dst, src); + + for (fcm=dst->first, srcfcm=src->first; fcm && srcfcm; srcfcm=srcfcm->next, fcm=fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* make a new copy of the F-Modifier's data */ + fcm->data = MEM_dupallocN(fcm->data); + + /* only do specific constraints if required */ + if (fmi && fmi->copy_data) + fmi->copy_data(fcm, srcfcm); + } +} + +/* Remove and free the given F-Modifier from the given stack */ +void remove_fmodifier (ListBase *modifiers, FModifier *fcm) +{ + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* sanity check */ + if (fcm == NULL) + return; + + /* free modifier's special data (stored inside fcm->data) */ + if (fcm->data) { + if (fmi && fmi->free_data) + fmi->free_data(fcm); + + /* free modifier's data (fcm->data) */ + MEM_freeN(fcm->data); + } + + /* remove modifier from stack */ + if (modifiers) + BLI_freelinkN(modifiers, fcm); + else { + // XXX this case can probably be removed some day, as it shouldn't happen... + printf("remove_fmodifier() - no modifier stack given \n"); + MEM_freeN(fcm); + } +} + +/* Remove all of a given F-Curve's modifiers */ +void free_fmodifiers (ListBase *modifiers) +{ + FModifier *fcm, *fmn; + + /* sanity check */ + if (modifiers == NULL) + return; + + /* free each modifier in order - modifier is unlinked from list and freed */ + for (fcm= modifiers->first; fcm; fcm= fmn) { + fmn= fcm->next; + remove_fmodifier(modifiers, fcm); + } +} + +/* Find the active F-Modifier */ +FModifier *find_active_fmodifier (ListBase *modifiers) +{ + FModifier *fcm; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return NULL; + + /* loop over modifiers until 'active' one is found */ + for (fcm= modifiers->first; fcm; fcm= fcm->next) { + if (fcm->flag & FMODIFIER_FLAG_ACTIVE) + return fcm; + } + + /* no modifier is active */ + return NULL; +} + +/* Set the active F-Modifier */ +void set_active_fmodifier (ListBase *modifiers, FModifier *fcm) +{ + FModifier *fm; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return; + + /* deactivate all, and set current one active */ + for (fm= modifiers->first; fm; fm= fm->next) + fm->flag &= ~FMODIFIER_FLAG_ACTIVE; + + /* make given modifier active */ + if (fcm) + fcm->flag |= FMODIFIER_FLAG_ACTIVE; +} + +/* Do we have any modifiers which match certain criteria + * - mtype - type of modifier (if 0, doesn't matter) + * - acttype - type of action to perform (if -1, doesn't matter) + */ +short list_has_suitable_fmodifier (ListBase *modifiers, int mtype, short acttype) +{ + FModifier *fcm; + + /* if there are no specific filtering criteria, just skip */ + if ((mtype == 0) && (acttype == 0)) + return (modifiers && modifiers->first); + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return 0; + + /* find the first mdifier fitting these criteria */ + for (fcm= modifiers->first; fcm; fcm= fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + short mOk=1, aOk=1; /* by default 1, so that when only one test, won't fail */ + + /* check if applicable ones are fullfilled */ + if (mtype) + mOk= (fcm->type == mtype); + if (acttype > -1) + aOk= (fmi->acttype == acttype); + + /* if both are ok, we've found a hit */ + if (mOk && aOk) + return 1; + } + + /* no matches */ + return 0; +} + +/* Evaluation API --------------------------- */ + +/* evaluate time modifications imposed by some F-Curve Modifiers + * - this step acts as an optimisation to prevent the F-Curve stack being evaluated + * several times by modifiers requesting the time be modified, as the final result + * would have required using the modified time + * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be + * working on the 'global' result of the modified curve, not some localised segment, + * so nevaltime gets set to whatever the last time-modifying modifier likes... + * - we start from the end of the stack, as only the last one matters for now + */ +float evaluate_time_fmodifiers (ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) +{ + FModifier *fcm; + float m_evaltime= evaltime; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->last) + return evaltime; + + /* find the first modifier from end of stack that modifies time, and calculate the time the modifier + * would calculate time at + */ + for (fcm= modifiers->last; fcm; fcm= fcm->prev) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* only evaluate if there's a callback for this */ + // TODO: implement the 'influence' control feature... + if (fmi && fmi->evaluate_modifier_time) { + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) + m_evaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime); + break; + } + } + + /* return the modified evaltime */ + return m_evaltime; +} + +/* Evalautes the given set of F-Curve Modifiers using the given data + * Should only be called after evaluate_time_fmodifiers() has been called... + */ +void evaluate_value_fmodifiers (ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) +{ + FModifier *fcm; + + /* sanity checks */ + if ELEM(NULL, modifiers, modifiers->first) + return; + + /* evaluate modifiers */ + for (fcm= modifiers->first; fcm; fcm= fcm->next) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* only evaluate if there's a callback for this */ + // TODO: implement the 'influence' control feature... + if (fmi && fmi->evaluate_modifier) { + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) + fmi->evaluate_modifier(fcu, fcm, cvalue, evaltime); + } + } +} + +/* ---------- */ + +/* Bake modifiers for given F-Curve to curve sample data, in the frame range defined + * by start and end (inclusive). + */ +void fcurve_bake_modifiers (FCurve *fcu, int start, int end) +{ + ChannelDriver *driver; + + /* sanity checks */ + // TODO: make these tests report errors using reports not printf's + if ELEM(NULL, fcu, fcu->modifiers.first) { + printf("Error: No F-Curve with F-Curve Modifiers to Bake\n"); + return; + } + + /* temporarily, disable driver while we sample, so that they don't influence the outcome */ + driver= fcu->driver; + fcu->driver= NULL; + + /* bake the modifiers, by sampling the curve at each frame */ + fcurve_store_samples(fcu, NULL, start, end, fcurve_samplingcb_evalcurve); + + /* free the modifiers now */ + free_fmodifiers(&fcu->modifiers); + + /* restore driver */ + fcu->driver= driver; +} diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 968a0e68fb9..c3c5483574e 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1153,7 +1153,7 @@ static void icu_to_fcurves (ListBase *groups, ListBase *list, IpoCurve *icu, cha /* Add a new FModifier (Cyclic) instead of setting extend value * as that's the new equivilant of that option. */ - FModifier *fcm= fcurve_add_modifier(fcu, FMODIFIER_TYPE_CYCLES); + FModifier *fcm= add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_CYCLES); FMod_Cycles *data= (FMod_Cycles *)fcm->data; /* if 'offset' one is in use, set appropriate settings */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 2b95584dc25..14e658b3903 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -69,8 +69,6 @@ // TODO: with things like transitions, should these get freed too? Maybe better as a UI tool void free_nlastrip (ListBase *strips, NlaStrip *strip) { - FModifier *fcm, *fmn; - /* sanity checks */ if (strip == NULL) return; @@ -86,13 +84,8 @@ void free_nlastrip (ListBase *strips, NlaStrip *strip) /* free own F-Curves */ free_fcurves(&strip->fcurves); - /* free F-Modifiers */ - for (fcm= strip->modifiers.first; fcm; fcm= fmn) { - fmn= fcm->next; - - BLI_remlink(&strip->modifiers, fcm); - fcurve_remove_modifier(NULL, fcm); - } + /* free own F-Modifiers */ + free_fmodifiers(&strip->modifiers); /* free the strip itself */ if (strips) @@ -167,7 +160,7 @@ NlaStrip *copy_nlastrip (NlaStrip *strip) /* copy F-Curves and modifiers */ copy_fcurves(&strip_d->fcurves, &strip->fcurves); - fcurve_copy_modifiers(&strip_d->modifiers, &strip->modifiers); + copy_fmodifiers(&strip_d->modifiers, &strip->modifiers); /* return the strip */ return strip_d; diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 9c401289011..fdce0965ce3 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -1,5 +1,30 @@ -/* Testing code for 2.5 animation system - * Copyright 2009, Joshua Leung +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #include @@ -94,7 +119,7 @@ FCurve *verify_driver_fcurve (ID *id, const char rna_path[], const int array_ind fcu->driver= MEM_callocN(sizeof(ChannelDriver), "ChannelDriver"); /* add simple generator modifier for driver so that there is some visible representation */ - fcurve_add_modifier(fcu, FMODIFIER_TYPE_GENERATOR); + add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR); /* just add F-Curve to end of driver list */ BLI_addtail(&adt->drivers, fcu); diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 5968817a9a6..b5a99877247 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -112,23 +112,23 @@ static void validate_fmodifier_cb (bContext *C, void *fcm_v, void *dummy) } /* callback to set the active modifier */ -static void activate_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) +static void activate_fmodifier_cb (bContext *C, void *fmods_v, void *fcm_v) { - FCurve *fcu= (FCurve *)fcu_v; + ListBase *modifiers = (ListBase *)fmods_v; FModifier *fcm= (FModifier *)fcm_v; - /* call API function to set the active modifier for active F-Curve */ - fcurve_set_active_modifier(fcu, fcm); + /* call API function to set the active modifier for active modifier-stack */ + set_active_fmodifier(modifiers, fcm); } /* callback to remove the given modifier */ -static void delete_fmodifier_cb (bContext *C, void *fcu_v, void *fcm_v) +static void delete_fmodifier_cb (bContext *C, void *fmods_v, void *fcm_v) { - FCurve *fcu= (FCurve *)fcu_v; + ListBase *modifiers = (ListBase *)fmods_v; FModifier *fcm= (FModifier *)fcm_v; - /* remove the given F-Modifier from the F-Curve */ - fcurve_remove_modifier(fcu, fcm); + /* remove the given F-Modifier from the active modifier-stack */ + remove_fmodifier(modifiers, fcm); } /* --------------- */ @@ -588,6 +588,7 @@ static void draw_modifier__limits(uiBlock *block, FModifier *fcm, int *yco, shor void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + ListBase *modifiers= &fcu->modifiers; // XXX fixme... should be arg uiBut *but; short active= (fcm->flag & FMODIFIER_FLAG_ACTIVE); short width= 314; @@ -607,7 +608,7 @@ void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, FCurve *fcu, FModifier *fcm /* checkbox for 'active' status (for now) */ but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); - uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm); + uiButSetFunc(but, activate_fmodifier_cb, modifiers, fcm); /* name */ if (fmi) @@ -620,7 +621,7 @@ void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, FCurve *fcu, FModifier *fcm /* delete button */ but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); - uiButSetFunc(but, delete_fmodifier_cb, fcu, fcm); + uiButSetFunc(but, delete_fmodifier_cb, modifiers, fcm); uiBlockSetEmboss(block, UI_EMBOSS); } diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 90804052370..331e2d0894e 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1,5 +1,30 @@ -/* Testing code for 2.5 animation system - * Copyright 2009, Joshua Leung +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #include diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 1813c76d0c4..240089d26a6 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -1,5 +1,30 @@ -/* Testing code for 2.5 animation system - * Copyright 2009, Joshua Leung +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #include diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 66168f2ed87..0d7dafe2938 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -795,7 +795,7 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri */ for (ale=anim_data.first; ale; ale=ale->next) { FCurve *fcu= (FCurve *)ale->key_data; - FModifier *fcm= fcurve_find_active_modifier(fcu); + FModifier *fcm= find_active_fmodifier(&fcu->modifiers); AnimData *adt= ANIM_nla_mapping_get(ac, ale); /* map keyframes for drawing if scaled F-Curve */ diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index ca47e69cc75..a82699ac1e5 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -1769,9 +1769,9 @@ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) type= RNA_enum_get(op->ptr, "type"); /* add F-Modifier of specified type to active F-Curve, and make it the active one */ - fcm= fcurve_add_modifier(fcu, type); + fcm= add_fmodifier(&fcu->modifiers, type); if (fcm) - fcurve_set_active_modifier(fcu, fcm); + set_active_fmodifier(&fcu->modifiers, fcm); else { BKE_report(op->reports, RPT_ERROR, "Modifier couldn't be added. See console for details."); return OPERATOR_CANCELLED; diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c index b1ec795a089..f00e7845549 100644 --- a/source/blender/editors/space_graph/graph_utils.c +++ b/source/blender/editors/space_graph/graph_utils.c @@ -194,7 +194,7 @@ int graphop_visible_keyframes_poll (bContext *C) */ if (fcu->bezt == NULL) continue; - fcm= fcurve_find_active_modifier(fcu); + fcm= find_active_fmodifier(&fcu->modifiers); found= (fcurve_needs_draw_fmodifier_controls(fcu, fcm) == 0); if (found) break; @@ -244,7 +244,7 @@ int graphop_editable_keyframes_poll (bContext *C) */ if (fcu->bezt == NULL) continue; - fcm= fcurve_find_active_modifier(fcu); + fcm= find_active_fmodifier(&fcu->modifiers); found= (fcurve_needs_draw_fmodifier_controls(fcu, fcm) == 0); if (found) break; From 6b784a80f02deaca05e347dc2626dc92826f0944 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 06:41:10 +0000 Subject: [PATCH 113/512] NLA SoC: F-Modifiers working on NLA Strips * Using the Ctrl-Shift-M hotkey, F-Modifiers can be added to all the selected strips. * F-Modifiers can also be added/tweaked from the NLA N-Key properties. The UI now uses the same code as for the graph editor ones. The UI drawing here is currently messed up from the NLA side, since it seems combining normal layout stuff and old-style uiBlocks doesn't seem to work too well (BUT! the buttons are at least functional). Next up, I'll need to recode the buttons panel for the Graph Editor so that all of the drawing can be migrated over to use the new layout engine. --- .../blender/editors/animation/fmodifier_ui.c | 3 +- source/blender/editors/include/ED_anim_api.h | 4 +- .../editors/space_graph/graph_buttons.c | 2 +- .../blender/editors/space_graph/graph_edit.c | 2 +- .../blender/editors/space_graph/graph_ops.c | 3 +- .../blender/editors/space_nla/nla_buttons.c | 16 +++- source/blender/editors/space_nla/nla_edit.c | 81 +++++++++++++++++++ source/blender/editors/space_nla/nla_intern.h | 2 + source/blender/editors/space_nla/nla_ops.c | 5 ++ 9 files changed, 107 insertions(+), 11 deletions(-) diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index b5a99877247..dfac380f595 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -585,10 +585,9 @@ static void draw_modifier__limits(uiBlock *block, FModifier *fcm, int *yco, shor /* --------------- */ // FIXME: remove dependency for F-Curve -void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco) +void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, ListBase *modifiers, FModifier *fcm, int *yco) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); - ListBase *modifiers= &fcu->modifiers; // XXX fixme... should be arg uiBut *but; short active= (fcm->flag & FMODIFIER_FLAG_ACTIVE); short width= 314; diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 4d75a73a327..87f05c8a76a 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -41,7 +41,7 @@ struct gla2DDrawInfo; struct Object; struct bActionGroup; struct FCurve; -struct IpoCurve; // xxx +struct FModifier; /* ************************************************ */ /* ANIMATION CHANNEL FILTERING */ @@ -300,7 +300,7 @@ struct uiBlock; /* draw a given F-Modifier for some layout/UI-Block */ // XXX not quite complete yet -void ANIM_uiTemplate_fmodifier_draw(struct uiBlock *block, struct FCurve *fcu, struct FModifier *fcm, int *yco); +void ANIM_uiTemplate_fmodifier_draw(struct uiBlock *block, ListBase *modifiers, struct FModifier *fcm, int *yco); /* ************************************************* */ /* ASSORTED TOOLS */ diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 9d4a1a8b3cb..5616ffc8002 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -381,7 +381,7 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) /* draw each modifier */ for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) - ANIM_uiTemplate_fmodifier_draw(block, fcu, fcm, &yco); + ANIM_uiTemplate_fmodifier_draw(block, &fcu->modifiers, fcm, &yco); MEM_freeN(ale); } diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index a82699ac1e5..9a50c5cc203 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -1741,7 +1741,7 @@ void GRAPH_OT_smooth (wmOperatorType *ot) /* ************************************************************************** */ /* F-CURVE MODIFIERS */ -/* ******************** Add F-Curve Modifier Operator *********************** */ +/* ******************** Add F-Modifier Operator *********************** */ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) { diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index d5e93dafaf0..38bde61a46c 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -221,8 +221,7 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "GRAPH_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); WM_keymap_add_item(keymap, "GRAPH_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); - /* F-Curve Modifiers */ - // XXX these are temporary? operators... + /* F-Modifiers */ WM_keymap_add_item(keymap, "GRAPH_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 003eba64ed9..1ef72760bfc 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -309,18 +309,28 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) static void nla_panel_modifiers(const bContext *C, Panel *pa) { PointerRNA strip_ptr; + NlaStrip *strip; + FModifier *fcm; uiLayout *layout= pa->layout; - //uiLayout *column, *row, *subcol; uiBlock *block; + int yco = 190; // xxx old /* check context and also validity of pointer */ if (!nla_panel_context(C, NULL, &strip_ptr)) return; + strip= strip_ptr.data; block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); - - // TODO... + + /* 'add modifier' button at top of panel */ + // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator + // FIXME: we need to set the only-active property so that this will only add modifiers for the active strip (not all selected) + uiDefButO(block, BUT, "NLA_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 225, 150, 20, "Adds a new F-Modifier for the active NLA Strip"); + + /* draw each modifier */ + for (fcm= strip->modifiers.first; fcm; fcm= fcm->next) + ANIM_uiTemplate_fmodifier_draw(block, &strip->modifiers, fcm, &yco); } /* ******************* general ******************************** */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 6d82e3d4be2..9910e62b262 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -66,6 +66,7 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "RNA_enum_types.h" #include "WM_api.h" #include "WM_types.h" @@ -1021,3 +1022,83 @@ void NLA_OT_clear_scale (wmOperatorType *ot) } /* *********************************************** */ +/* NLA Modifiers */ + +/* ******************** Add F-Modifier Operator *********************** */ + +static int nla_fmodifier_add_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + FModifier *fcm; + int type= RNA_enum_get(op->ptr, "type"); + short onlyActive = RNA_boolean_get(op->ptr, "only_active"); + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each NLA-Track, add the specified modifier to all selected strips */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + int i = 1; + + for (strip= nlt->strips.first; strip; strip=strip->next, i++) { + /* only add F-Modifier if on active strip? */ + if ((onlyActive) && (strip->flag & NLASTRIP_FLAG_ACTIVE)==0) + continue; + + /* add F-Modifier of specified type to selected, and make it the active one */ + fcm= add_fmodifier(&strip->modifiers, type); + + if (fcm) + set_active_fmodifier(&strip->modifiers, fcm); + else { + char errormsg[128]; + sprintf(errormsg, "Modifier couldn't be added to (%s : %d). See console for details.", nlt->name, i); + + BKE_report(op->reports, RPT_ERROR, errormsg); + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_fmodifier_add (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add F-Modifier"; + ot->idname= "NLA_OT_fmodifier_add"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= nla_fmodifier_add_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* id-props */ + RNA_def_enum(ot->srna, "type", fmodifier_type_items, 0, "Type", ""); + RNA_def_boolean(ot->srna, "only_active", 0, "Only Active", "Only add F-Modifier of the specified type to the active strip."); +} + +/* *********************************************** */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index f8df41d6225..5921b8a75ce 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -105,6 +105,8 @@ void NLA_OT_move_down(wmOperatorType *ot); void NLA_OT_apply_scale(wmOperatorType *ot); void NLA_OT_clear_scale(wmOperatorType *ot); +void NLA_OT_fmodifier_add(wmOperatorType *ot); + /* **************************************** */ /* nla_channels.c */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index d7bd894ce4d..7caab02d6a0 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -155,6 +155,8 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_apply_scale); WM_operatortype_append(NLA_OT_clear_scale); + + WM_operatortype_append(NLA_OT_fmodifier_add); } /* ************************** registration - keymaps **********************************/ @@ -255,6 +257,9 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* clear scale */ WM_keymap_add_item(keymap, "NLA_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); + /* add f-modifier */ + WM_keymap_add_item(keymap, "NLA_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_NLA); } From 441bcaae2e63d3f757ee336fb051a9cb851e3e33 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 12:41:03 +0000 Subject: [PATCH 114/512] NLA SoC: FModifier drawing converted to use Layout Engine * Most of the F-Modifiers have been ported to use the layout engine + RNA for drawing their buttons now. This plays much nicer with various button-layouts. --> As a nice demo, try adding a Noise Modifier to a NLA-strip, and change the 'size' setting to about 2 to see some effects. * Generator and Envelope modifiers haven't been ported yet since they're quite complex (requiring more time + energy), and as such, have been made to have some temporary error prints instead. Will check on this tomorrow. * Finished/cleaned up the RNA-wrapping of most FModifiers. TODO's (help requested... Brecht?): Generator modifier's UI cannot be wrapped yet using the layout engine (though I might try using the old system only), as I'm having some trouble wrapping the coefficients array for this (see rna_fcurve.c - rna_def_fmodifier_generator()) --- .../blender/editors/animation/fmodifier_ui.c | 275 +++++++++--------- source/blender/editors/include/ED_anim_api.h | 4 +- .../editors/space_graph/graph_buttons.c | 22 +- .../blender/editors/space_nla/nla_buttons.c | 23 +- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_fcurve.c | 111 ++++--- 6 files changed, 231 insertions(+), 205 deletions(-) diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index dfac380f595..19c7d049758 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -97,7 +97,7 @@ // XXX for now, roundbox has it's callback func set to NULL to not intercept events #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, ""); \ + uiDefBut(block, ROUNDBOX, B_REDR, "", -3, yco-height, width+3, height-1, NULL, 5.0, 0.0, 12.0, (float)rb_col, ""); \ } /* callback to verify modifier data */ @@ -134,26 +134,19 @@ static void delete_fmodifier_cb (bContext *C, void *fmods_v, void *fcm_v) /* --------------- */ /* draw settings for generator modifier */ -static void draw_modifier__generator(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short width) { + // XXX TEMP WARNING + uiItemL(layout, "Generator FModifier UI not yet implemented again", ICON_ERROR); + +#if 0 // TODO: port to the new system FMod_Generator *data= (FMod_Generator *)fcm->data; + uiBlock *block= uiLayoutGetBlock(layout); char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1"; - int cy= *yco - 30; + int cy= yco - 30; uiBut *but; - /* set the height */ - (*height) = 90; - switch (data->mode) { - case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */ - (*height) += 20*(data->poly_order+1) + 20; - break; - case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */ - (*height) += 20 * data->poly_order + 15; - break; - } - /* basic settings (backdrop + mode selector + some padding) */ - DRAW_BACKDROP((*height)); uiBlockBeginAlign(block); but= uiDefButI(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); @@ -237,97 +230,79 @@ static void draw_modifier__generator(uiBlock *block, FModifier *fcm, int *yco, s } break; } +#endif } /* --------------- */ /* draw settings for noise modifier */ -static void draw_modifier__fn_generator(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__fn_generator(uiLayout *layout, FModifier *fcm, short width) { - FMod_FunctionGenerator *data= (FMod_FunctionGenerator *)fcm->data; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - char fn_type[]="Built-In Function%t|Sin%x0|Cos%x1|Tan%x2|Square Root%x3|Natural Log%x4|Normalised Sin%x5"; + uiLayout *col= uiLayoutColumn(layout, 0); // no grouping for now + PointerRNA ptr; - /* set the height */ - (*height) = 80; + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierFunctionGenerator, fcm, &ptr); - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); - - uiDefButI(block, MENU, B_FMODIFIER_REDRAW, fn_type, - 3, cy, 300, 20, &data->type, 0, 0, 0, 0, "Type of function used to generate values"); - - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Amplitude:", - 3, cy1, 150, 20, &data->amplitude, 0.000001, 10000.0, 0.01, 3, "Scale factor determining the maximum/minimum values."); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Value Offset:", - 3, cy2, 150, 20, &data->value_offset, 0.0, 10000.0, 0.01, 3, "Constant factor to offset values by."); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Multiplier:", - 155, cy1, 150, 20, &data->phase_multiplier, 0.0, 100000.0, 0.1, 3, "Scale factor determining the 'speed' of the function."); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase Offset:", - 155, cy2, 150, 20, &data->phase_offset, 0.0, 100000.0, 0.1, 3, "Constant factor to offset time by for function."); - + /* add the settings */ + uiItemR(col, NULL, 0, &ptr, "amplitude", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "phase_multiplier", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "phase_offset", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "value_offset", 0, 0, 0); } /* --------------- */ /* draw settings for cycles modifier */ -static void draw_modifier__cycles(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__cycles(uiLayout *layout, FModifier *fcm, short width) { - FMod_Cycles *data= (FMod_Cycles *)fcm->data; - char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2|Repeat Mirrored%x3"; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + uiLayout *split, *col; + PointerRNA ptr; - /* set the height */ - (*height) = 80; + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierCycles, fcm, &ptr); - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); + /* split into 2 columns + * NOTE: the mode comboboxes shouldn't get labels, otherwise there isn't enough room + */ + split= uiLayoutSplit(layout, 0.5f); - /* 'before' range */ - uiDefBut(block, LABEL, 1, "Before:", 4, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); - uiBlockBeginAlign(block); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 3,cy1,150,20, &data->before_mode, 0, 0, 0, 0, "Cycling mode to use before first keyframe"); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 3, cy2, 150, 20, &data->before_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); - uiBlockEndAlign(block); - - /* 'after' range */ - uiDefBut(block, LABEL, 1, "After:", 155, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling after last keyframe"); - uiBlockBeginAlign(block); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 157,cy1,150,20, &data->after_mode, 0, 0, 0, 0, "Cycling mode to use after first keyframe"); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 157, cy2, 150, 20, &data->after_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)"); - uiBlockEndAlign(block); + /* before range */ + col= uiLayoutColumn(split, 1); + uiItemL(col, "Before:", 0); + uiItemR(col, "", 0, &ptr, "before_mode", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "before_cycles", 0, 0, 0); + + /* after range */ + col= uiLayoutColumn(split, 1); + uiItemL(col, "After:", 0); + uiItemR(col, "", 0, &ptr, "after_mode", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "after_cycles", 0, 0, 0); } /* --------------- */ /* draw settings for noise modifier */ -static void draw_modifier__noise(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__noise(uiLayout *layout, FModifier *fcm, short width) { - FMod_Noise *data= (FMod_Noise *)fcm->data; - int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); - char blend_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; + uiLayout *split, *col; + PointerRNA ptr; - /* set the height */ - (*height) = 80; + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierNoise, fcm, &ptr); - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); + /* split into 2 columns */ + split= uiLayoutSplit(layout, 0.5f); - uiDefButS(block, MENU, B_FMODIFIER_REDRAW, blend_mode, - 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of combining the results of this modifier and other modifiers."); + /* col 1 */ + col= uiLayoutColumn(split, 0); + uiItemR(col, NULL, 0, &ptr, "size", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "strength", 0, 0, 0); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:", - 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, ""); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Strength:", - 3, cy2, 150, 20, &data->strength, 0.0, 10000.0, 0.01, 3, ""); - - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase:", - 155, cy1, 150, 20, &data->phase, 0.0, 100000.0, 0.1, 3, ""); - uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Depth:", - 155, cy2, 150, 20, &data->depth, 0, 128, 1, 3, ""); - + /* col 2 */ + col= uiLayoutColumn(split, 0); + uiItemR(col, NULL, 0, &ptr, "phase", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "depth", 0, 0, 0); } /* --------------- */ @@ -492,22 +467,17 @@ static void fmod_envelope_deletepoint_cb (bContext *C, void *fcm_dv, void *ind_v } /* draw settings for envelope modifier */ -static void draw_modifier__envelope(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__envelope(uiLayout *layout, FModifier *fcm, short width) { + uiItemL(layout, "Envelope FModifier UI not yet recoded in layout engine", ICON_ERROR); +#if 0 // XXX FIXME: recode in new layout style FMod_Envelope *env= (FMod_Envelope *)fcm->data; FCM_EnvelopeData *fed; + uiBlock *block= uiLayoutGetBlock(layout); uiBut *but; - int cy= (*yco - 28); + int cy= (yco - 28); int i; - /* set the height: - * - basic settings + variable height from envelope controls - */ - (*height) = 115 + (35 * env->totvert); - - /* basic settings (backdrop + general settings + some padding) */ - DRAW_BACKDROP((*height)); - /* General Settings */ uiDefBut(block, LABEL, 1, "Envelope:", 10, cy, 100, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); cy -= 20; @@ -543,83 +513,104 @@ static void draw_modifier__envelope(uiBlock *block, FModifier *fcm, int *yco, sh uiBlockBeginAlign(block); cy -= 25; } +#endif } /* --------------- */ /* draw settings for limits modifier */ -static void draw_modifier__limits(uiBlock *block, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +static void draw_modifier__limits(uiLayout *layout, FModifier *fcm, short width) { - FMod_Limits *data= (FMod_Limits *)fcm->data; - const int togButWidth = 50; - const int textButWidth = ((width/2)-togButWidth); + uiLayout *split, *col, *row; + PointerRNA ptr; - /* set the height */ - (*height) = 60; + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierLimits, fcm, &ptr); - /* basic settings (backdrop + some padding) */ - DRAW_BACKDROP((*height)); + /* row 1: minimum */ + { + row= uiLayoutRow(layout, 0); + + /* split into 2 columns */ + split= uiLayoutSplit(layout, 0.5f); + + /* x-minimum */ + col= uiLayoutColumn(split, 1); + uiItemR(col, NULL, 0, &ptr, "use_minimum_x", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "minimum_x", 0, 0, 0); + + /* y-minimum*/ + col= uiLayoutColumn(split, 1); + uiItemR(col, NULL, 0, &ptr, "use_minimum_y", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "minimum_y", 0, 0, 0); + } - /* Draw Pairs of LimitToggle+LimitValue */ - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMIN, B_FMODIFIER_REDRAW, "xMin", 5, *yco-30, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum x value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-30, (textButWidth-5), 18, &data->rect.xmin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest x value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMAX, B_FMODIFIER_REDRAW, "XMax", 5+(width-(textButWidth-5)-togButWidth), *yco-30, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum x value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-30, (textButWidth-5), 18, &data->rect.xmax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest x value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMIN, B_FMODIFIER_REDRAW, "yMin", 5, *yco-52, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum y value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-52, (textButWidth-5), 18, &data->rect.ymin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest y value to allow"); - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMAX, B_FMODIFIER_REDRAW, "YMax", 5+(width-(textButWidth-5)-togButWidth), *yco-52, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum y value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-52, (textButWidth-5), 18, &data->rect.ymax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest y value to allow"); - uiBlockEndAlign(block); + /* row 2: minimum */ + { + row= uiLayoutRow(layout, 0); + + /* split into 2 columns */ + split= uiLayoutSplit(layout, 0.5f); + + /* x-minimum */ + col= uiLayoutColumn(split, 1); + uiItemR(col, NULL, 0, &ptr, "use_maximum_x", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "maximum_x", 0, 0, 0); + + /* y-minimum*/ + col= uiLayoutColumn(split, 1); + uiItemR(col, NULL, 0, &ptr, "use_maximum_y", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "maximum_y", 0, 0, 0); + } } /* --------------- */ -// FIXME: remove dependency for F-Curve -void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, ListBase *modifiers, FModifier *fcm, int *yco) + +void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ListBase *modifiers, FModifier *fcm) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + uiLayout *box, *row, *subrow; + uiBlock *block; uiBut *but; - short active= (fcm->flag & FMODIFIER_FLAG_ACTIVE); short width= 314; - short height = 0; - int rb_col; /* draw header */ { + /* get layout-row + UI-block for this */ + box= uiLayoutBox(layout); + + row= uiLayoutRow(box, 0); + block= uiLayoutGetBlock(row); // err... + uiBlockSetEmboss(block, UI_EMBOSSN); - /* rounded header */ - rb_col= (active)?-20:20; - but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); + /* left-align -------------------------------------------- */ + subrow= uiLayoutRow(row, 0); + uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_LEFT); /* expand */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 0, -1, UI_UNIT_X, UI_UNIT_Y, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); /* checkbox for 'active' status (for now) */ - but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); + but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 0, -1, UI_UNIT_X, UI_UNIT_Y, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); uiButSetFunc(but, activate_fmodifier_cb, modifiers, fcm); /* name */ if (fmi) - uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, fmi->name, 0, 0, 150, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); else - uiDefBut(block, LABEL, 1, "", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, "", 0, 0, 150, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + + /* right-align ------------------------------------------- */ + subrow= uiLayoutRow(row, 0); + uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_RIGHT); /* 'mute' button */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 0, 0, UI_UNIT_X, UI_UNIT_Y, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); /* delete button */ - but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); + but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); uiButSetFunc(but, delete_fmodifier_cb, modifiers, fcm); uiBlockSetEmboss(block, UI_EMBOSS); @@ -627,43 +618,39 @@ void ANIM_uiTemplate_fmodifier_draw (uiBlock *block, ListBase *modifiers, FModif /* when modifier is expanded, draw settings */ if (fcm->flag & FMODIFIER_FLAG_EXPANDED) { + /* set up the flexible-box layout which acts as the backdrop for the modifier settings */ + box= uiLayoutBox(layout); + /* draw settings for individual modifiers */ switch (fcm->type) { case FMODIFIER_TYPE_GENERATOR: /* Generator */ - draw_modifier__generator(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__generator(box, fcm, width); break; case FMODIFIER_TYPE_FN_GENERATOR: /* Built-In Function Generator */ - draw_modifier__fn_generator(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__fn_generator(box, fcm, width); break; case FMODIFIER_TYPE_CYCLES: /* Cycles */ - draw_modifier__cycles(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__cycles(box, fcm, width); break; case FMODIFIER_TYPE_ENVELOPE: /* Envelope */ - draw_modifier__envelope(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__envelope(box, fcm, width); break; case FMODIFIER_TYPE_LIMITS: /* Limits */ - draw_modifier__limits(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__limits(box, fcm, width); break; case FMODIFIER_TYPE_NOISE: /* Noise */ - draw_modifier__noise(block, fcm, yco, &height, width, active, rb_col); + draw_modifier__noise(box, fcm, width); break; default: /* unknown type */ - height= 96; - //DRAW_BACKDROP(height); // XXX buggy... break; } } - - /* adjust height for new to start */ - (*yco) -= (height + 27); } /* ********************************************** */ - - \ No newline at end of file diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 87f05c8a76a..df4e704cae8 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -296,11 +296,11 @@ void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d); /* ************************************************* */ /* F-MODIFIER TOOLS */ -struct uiBlock; +struct uiLayout; /* draw a given F-Modifier for some layout/UI-Block */ // XXX not quite complete yet -void ANIM_uiTemplate_fmodifier_draw(struct uiBlock *block, ListBase *modifiers, struct FModifier *fcm, int *yco); +void ANIM_uiTemplate_fmodifier_draw(struct uiLayout *layout, ListBase *modifiers, struct FModifier *fcm); /* ************************************************* */ /* ASSORTED TOOLS */ diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 5616ffc8002..17bc78f9ee6 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -366,22 +366,30 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) bAnimListElem *ale; FCurve *fcu; FModifier *fcm; + uiLayout *col, *row; uiBlock *block; - int yco= 190; - if(!graph_panel_context(C, &ale, &fcu)) + if (!graph_panel_context(C, &ale, &fcu)) return; - block= uiLayoutFreeBlock(pa->layout); + block= uiLayoutGetBlock(pa->layout); uiBlockSetHandleFunc(block, do_graph_region_modifier_buttons, NULL); /* 'add modifier' button at top of panel */ - // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator - uiDefButO(block, BUT, "GRAPH_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 225, 150, 20, "Adds a new F-Curve Modifier for the active F-Curve"); + { + row= uiLayoutRow(pa->layout, 0); + block= uiLayoutGetBlock(row); + + // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator + uiDefButO(block, BUT, "GRAPH_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 0, 150, 20, "Adds a new F-Curve Modifier for the active F-Curve"); + } /* draw each modifier */ - for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) - ANIM_uiTemplate_fmodifier_draw(block, &fcu->modifiers, fcm, &yco); + for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { + col= uiLayoutColumn(pa->layout, 1); + + ANIM_uiTemplate_fmodifier_draw(col, &fcu->modifiers, fcm); + } MEM_freeN(ale); } diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 1ef72760bfc..67c4365ff49 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -311,26 +311,33 @@ static void nla_panel_modifiers(const bContext *C, Panel *pa) PointerRNA strip_ptr; NlaStrip *strip; FModifier *fcm; - uiLayout *layout= pa->layout; + uiLayout *col, *row; uiBlock *block; - int yco = 190; // xxx old /* check context and also validity of pointer */ if (!nla_panel_context(C, NULL, &strip_ptr)) return; strip= strip_ptr.data; - block= uiLayoutGetBlock(layout); + block= uiLayoutGetBlock(pa->layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); /* 'add modifier' button at top of panel */ - // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator - // FIXME: we need to set the only-active property so that this will only add modifiers for the active strip (not all selected) - uiDefButO(block, BUT, "NLA_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 225, 150, 20, "Adds a new F-Modifier for the active NLA Strip"); + { + row= uiLayoutRow(pa->layout, 0); + block= uiLayoutGetBlock(row); + + // XXX for now, this will be a operator button which calls a temporary 'add modifier' operator + // FIXME: we need to set the only-active property so that this will only add modifiers for the active strip (not all selected) + uiDefButO(block, BUT, "NLA_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 0, 150, 20, "Adds a new F-Modifier for the active NLA Strip"); + } /* draw each modifier */ - for (fcm= strip->modifiers.first; fcm; fcm= fcm->next) - ANIM_uiTemplate_fmodifier_draw(block, &strip->modifiers, fcm, &yco); + for (fcm= strip->modifiers.first; fcm; fcm= fcm->next) { + col= uiLayoutColumn(pa->layout, 1); + + ANIM_uiTemplate_fmodifier_draw(col, &strip->modifiers, fcm); + } } /* ******************* general ******************************** */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 106185085d6..0673521505f 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -179,6 +179,7 @@ extern StructRNA RNA_FileSelectParams; extern StructRNA RNA_FModifier; extern StructRNA RNA_FModifierCycles; extern StructRNA RNA_FModifierEnvelope; +extern StructRNA RNA_FModifierEnvelopeControlPoint; extern StructRNA RNA_FModifierFunctionGenerator; extern StructRNA RNA_FModifierGenerator; extern StructRNA RNA_FModifierGenerator_PolyExpanded; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index 826d186516d..95a0482557f 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -56,17 +56,7 @@ StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) switch (fcm->type) { case FMODIFIER_TYPE_GENERATOR: - { - FMod_Generator *gen= (FMod_Generator *)fcm->data; - - switch (gen->mode) { - case FCM_GENERATOR_POLYNOMIAL: - return &RNA_FModifierGenerator_PolyExpanded; - //case FCM_GENERATOR_POLYNOMIAL_FACTORISED: - default: - return &RNA_FModifierGenerator; - } - } + return &RNA_FModifierGenerator; case FMODIFIER_TYPE_FN_GENERATOR: return &RNA_FModifierFunctionGenerator; case FMODIFIER_TYPE_ENVELOPE: @@ -159,19 +149,22 @@ static void rna_FCurve_RnaPath_set(PointerRNA *ptr, const char *value) #else -static void rna_def_fmodifier_generator_common(StructRNA *srna) + +static void rna_def_fmodifier_generator(BlenderRNA *brna) { + StructRNA *srna; PropertyRNA *prop; static EnumPropertyItem prop_mode_items[] = { {FCM_GENERATOR_POLYNOMIAL, "POLYNOMIAL", 0, "Expanded Polynomial", ""}, {FCM_GENERATOR_POLYNOMIAL_FACTORISED, "POLYNOMIAL_FACTORISED", 0, "Factorised Polynomial", ""}, {0, NULL, 0, NULL, NULL}}; - - /* struct wrapping settings */ - RNA_def_struct_sdna_from(srna, "FMod_Generator", "data"); - /* settings */ + srna= RNA_def_struct(brna, "FModifierGenerator", "FModifier"); + RNA_def_struct_ui_text(srna, "Generator F-Curve Modifier", "Deterministically generates values for the modified F-Curve."); + RNA_def_struct_sdna_from(srna, "FMod_Generator", "data"); + + /* define common props */ prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE); RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them."); @@ -180,41 +173,22 @@ static void rna_def_fmodifier_generator_common(StructRNA *srna) prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_mode_items); RNA_def_property_ui_text(prop, "Mode", "Type of generator to use."); -} - -/* this is a temporary dummy generator-modifier wrapping (to be discarded) */ -static void rna_def_fmodifier_generator(BlenderRNA *brna) -{ - StructRNA *srna; - srna= RNA_def_struct(brna, "FModifierGenerator", "FModifier"); - RNA_def_struct_ui_text(srna, "Generator F-Curve Modifier", "Deterministically generates values for the modified F-Curve."); - - /* define common props */ - rna_def_fmodifier_generator_common(srna); -} - -static void rna_def_fmodifier_generator_polyexpanded(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - - srna= RNA_def_struct(brna, "FModifierGenerator_PolyExpanded", "FModifier"); - RNA_def_struct_ui_text(srna, "Expanded Polynomial Generator", "Generates values for the modified F-Curve using expanded polynomial expresion."); - - /* define common props */ - rna_def_fmodifier_generator_common(srna); /* order of the polynomial */ // XXX this has a special validation func prop= RNA_def_property(srna, "poly_order", PROP_INT, PROP_NONE); - RNA_def_property_ui_text(prop, "Polynomial Order", "The highest power of 'x' for this polynomial. (i.e. the number of coefficients - 1)"); + RNA_def_property_ui_text(prop, "Polynomial Order", "The highest power of 'x' for this polynomial. (number of coefficients - 1)"); /* coefficients array */ - //prop= RNA_def_property(srna, "coefficients", PROP_FLOAT, PROP_NONE); - //RNA_def_property_ui_text(prop, "Coefficients", "Coefficients for 'x' (starting from lowest power)."); + // FIXME: this is quite difficult to try to wrap + //prop= RNA_def_property(srna, "coefficients", PROP_COLLECTION, PROP_NONE); + //RNA_def_property_collection_funcs(prop, "rna_FModifierGenerator_coefficients_begin", "rna_FModifierGenerator_coefficients_next", "rna_FModifierGenerator_coefficients_end", "rna_iterator_array_get", "rna_FModifierGenerator_coefficients_length", 0, 0, 0, 0); + //RNA_def_property_ui_text(prop, "Coefficients", "Coefficients for 'x' (starting from lowest power of x^0)."); } +/* --------- */ + static void rna_def_fmodifier_function_generator(BlenderRNA *brna) { StructRNA *srna; @@ -258,14 +232,63 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna) /* --------- */ +static void rna_def_fmodifier_envelope_ctrl(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "FModifierEnvelopeControlPoint", NULL); + RNA_def_struct_ui_text(srna, "Envelope Control Point", "Control point for envelope F-Modifier."); + RNA_def_struct_sdna(srna, "FCM_EnvelopeData"); + + /* min/max extents + * - for now, these are allowed to go past each other, so that we can have inverted action + * - technically, the range is limited by the settings in the envelope-modifier data, not here... + */ + prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "min"); + RNA_def_property_ui_text(prop, "Minimum Value", "Lower bound of envelope at this control-point."); + + prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "max"); + RNA_def_property_ui_text(prop, "Maximum Value", "Upper bound of envelope at this control-point."); + + /* Frame */ + prop= RNA_def_property(srna, "frame", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "time"); + RNA_def_property_ui_text(prop, "Frame", "Frame this control-point occurs on."); + + // TODO: + // - selection flags (not implemented in UI yet though) +} + static void rna_def_fmodifier_envelope(BlenderRNA *brna) { StructRNA *srna; - //PropertyRNA *prop; + PropertyRNA *prop; srna= RNA_def_struct(brna, "FModifierEnvelope", "FModifier"); RNA_def_struct_ui_text(srna, "Envelope F-Modifier", "Scales the values of the modified F-Curve."); RNA_def_struct_sdna_from(srna, "FMod_Envelope", "data"); + + /* Collections */ + prop= RNA_def_property(srna, "control_points", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "data", "totvert"); + RNA_def_property_struct_type(prop, "FModifierEnvelopeControlPoint"); + RNA_def_property_ui_text(prop, "Control Points", "Control points defining the shape of the envelope."); + + /* Range Settings */ + prop= RNA_def_property(srna, "reference_value", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "midval"); + RNA_def_property_ui_text(prop, "Reference Value", "Value that envelope's influence is centered around / based on."); + + prop= RNA_def_property(srna, "default_minimum", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "min"); + RNA_def_property_ui_text(prop, "Default Minimum", "Lower distance from Reference Value for 1:1 default influence."); + + prop= RNA_def_property(srna, "default_maximum", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "max"); + RNA_def_property_ui_text(prop, "Default Maximum", "Upper distance from Reference Value for 1:1 default influence."); } /* --------- */ @@ -606,9 +629,9 @@ void RNA_def_fcurve(BlenderRNA *brna) rna_def_fmodifier(brna); rna_def_fmodifier_generator(brna); - rna_def_fmodifier_generator_polyexpanded(brna); rna_def_fmodifier_function_generator(brna); rna_def_fmodifier_envelope(brna); + rna_def_fmodifier_envelope_ctrl(brna); rna_def_fmodifier_cycles(brna); rna_def_fmodifier_python(brna); rna_def_fmodifier_limits(brna); From e9c85406e4f24eeab8818b3b58862c3798c0dc14 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 23:27:11 +0000 Subject: [PATCH 115/512] NLA SoC: UI-Drawing for Generator and Envelope FModifiers Restored These now use a hybrid drawing approach - using the layout engine for just layouts, but still mostly using old-style buttons in many places where button callbacks and/or special data-access methods are needed (or where RNA wrapping isn't in place yet). --- .../blender/editors/animation/fmodifier_ui.c | 159 ++++++++++-------- 1 file changed, 87 insertions(+), 72 deletions(-) diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 19c7d049758..3be96031526 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -136,24 +136,23 @@ static void delete_fmodifier_cb (bContext *C, void *fmods_v, void *fcm_v) /* draw settings for generator modifier */ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short width) { - // XXX TEMP WARNING - uiItemL(layout, "Generator FModifier UI not yet implemented again", ICON_ERROR); - -#if 0 // TODO: port to the new system FMod_Generator *data= (FMod_Generator *)fcm->data; - uiBlock *block= uiLayoutGetBlock(layout); - char gen_mode[]="Generator Type%t|Expanded Polynomial%x0|Factorised Polynomial%x1"; - int cy= yco - 30; + uiLayout *col, *row; + uiBlock *block; uiBut *but; + PointerRNA ptr; + + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierFunctionGenerator, fcm, &ptr); /* basic settings (backdrop + mode selector + some padding) */ + col= uiLayoutColumn(layout, 1); + block= uiLayoutGetBlock(layout); uiBlockBeginAlign(block); - but= uiDefButI(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm."); + but= uiDefButR(block, MENU, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "mode", -1, 0, 0, -1, -1, NULL); uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); - cy -= 20; - uiDefButBitI(block, TOG, FCM_GENERATOR_ADDITIVE, B_FMODIFIER_REDRAW, "Additive", 10,cy,width-30,19, &data->flag, 0, 0, 0, 0, "Values generated by this modifier are applied on top of the existing values instead of overwriting them"); - cy -= 35; + uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "additive", -1, 0, 0, -1, -1, NULL); uiBlockEndAlign(block); /* now add settings for individual modes */ @@ -165,31 +164,38 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid unsigned int i; /* draw polynomial order selector */ - but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); - uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); - cy -= 35; + row= uiLayoutRow(layout, 0); + block= uiLayoutGetBlock(row); + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,0,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + /* draw controls for each coefficient and a + sign at end of row */ - uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + row= uiLayoutRow(layout, 1); + block= uiLayoutGetBlock(row); + uiDefBut(block, LABEL, 1, "y = ", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); cp= data->coefficients; for (i=0; (i < data->arraysize) && (cp); i++, cp++) { /* coefficient */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient for polynomial"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient for polynomial"); /* 'x' param (and '+' if necessary) */ - if (i == 0) - strcpy(xval, ""); - else if (i == 1) - strcpy(xval, "x"); - else - sprintf(xval, "x^%d", i); - uiDefBut(block, LABEL, 1, xval, 200, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, "Power of x"); + if (i) { + if (i == 1) + strcpy(xval, "x"); + else + sprintf(xval, "x^%d", i); + uiDefBut(block, LABEL, 1, xval, 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, "Power of x"); + } - if ( (i != (data->arraysize - 1)) || ((i==0) && data->arraysize==2) ) - uiDefBut(block, LABEL, 1, "+", 250, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cy -= 20; + if ( (i != (data->arraysize - 1)) || ((i==0) && data->arraysize==2) ) { + uiDefBut(block, LABEL, 1, "+", 0,0 , 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + + /* next coefficient on a new row */ + row= uiLayoutRow(layout, 1); + block= uiLayoutGetBlock(row); + } } } break; @@ -200,37 +206,43 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid unsigned int i; /* draw polynomial order selector */ - but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 10,cy,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); - uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); - cy -= 35; + row= uiLayoutRow(layout, 0); + block= uiLayoutGetBlock(row); + but= uiDefButI(block, NUM, B_FMODIFIER_REDRAW, "Poly Order: ", 0,0,width-30,19, &data->poly_order, 1, 100, 0, 0, "'Order' of the Polynomial - for a polynomial with n terms, 'order' is n-1"); + uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); + /* draw controls for each pair of coefficients */ - uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + row= uiLayoutRow(layout, 1); + block= uiLayoutGetBlock(row); + uiDefBut(block, LABEL, 1, "y = ", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); cp= data->coefficients; for (i=0; (i < data->poly_order) && (cp); i++, cp+=2) { /* opening bracket */ - uiDefBut(block, LABEL, 1, "(", 40, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, "(", 0, 0, 20, 20, NULL, 0.0, 0.0, 0, 0, ""); /* coefficients */ - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x"); - uiDefBut(block, LABEL, 1, "x + ", 150, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, "x + ", 0, 0, 40, 20, NULL, 0.0, 0.0, 0, 0, ""); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 180, cy, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient"); /* closing bracket and '+' sign */ - if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) ) - uiDefBut(block, LABEL, 1, ") ?", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - else - uiDefBut(block, LABEL, 1, ")", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); - - cy -= 20; + if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) ) { + uiDefBut(block, LABEL, 1, ") +", 0, 0, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + + /* set up new row for the next pair of coefficients*/ + row= uiLayoutRow(layout, 1); + block= uiLayoutGetBlock(row); + } + else + uiDefBut(block, LABEL, 1, ")", 0, 0, 20, 20, NULL, 0.0, 0.0, 0, 0, ""); } } break; } -#endif } /* --------------- */ @@ -469,51 +481,54 @@ static void fmod_envelope_deletepoint_cb (bContext *C, void *fcm_dv, void *ind_v /* draw settings for envelope modifier */ static void draw_modifier__envelope(uiLayout *layout, FModifier *fcm, short width) { - uiItemL(layout, "Envelope FModifier UI not yet recoded in layout engine", ICON_ERROR); -#if 0 // XXX FIXME: recode in new layout style FMod_Envelope *env= (FMod_Envelope *)fcm->data; FCM_EnvelopeData *fed; - uiBlock *block= uiLayoutGetBlock(layout); + uiLayout *col, *row; + uiBlock *block; uiBut *but; - int cy= (yco - 28); + PointerRNA ptr; int i; - /* General Settings */ - uiDefBut(block, LABEL, 1, "Envelope:", 10, cy, 100, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe"); - cy -= 20; + /* init the RNA-pointer */ + RNA_pointer_create(NULL, &RNA_FModifierEnvelope, fcm, &ptr); - uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Reference Val:", 10, cy, 300, 20, &env->midval, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, ""); - cy -= 20; + /* general settings */ + col= uiLayoutColumn(layout, 1); + uiItemL(col, "Envelope:", 0); + uiItemR(col, NULL, 0, &ptr, "reference_value", 0, 0, 0); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 10, cy, 150, 20, &env->min, -UI_FLT_MAX, env->max, 10, 3, "Minimum value (relative to Reference Value) that is used as the 'normal' minimum value"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 160, cy, 150, 20, &env->max, env->min, UI_FLT_MAX, 10, 3, "Maximum value (relative to Reference Value) that is used as the 'normal' maximum value"); - cy -= 35; - uiBlockEndAlign(block); - - - /* Points header */ - uiDefBut(block, LABEL, 1, "Control Points:", 10, cy, 150, 20, NULL, 0.0, 0.0, 0, 0, ""); - - but= uiDefBut(block, BUT, B_FMODIFIER_REDRAW, "Add Point", 160,cy,150,19, NULL, 0, 0, 0, 0, "Adds a new control-point to the envelope on the current frame"); - uiButSetFunc(but, fmod_envelope_addpoint_cb, env, NULL); - cy -= 35; - - /* Points List */ + row= uiLayoutRow(col, 1); + uiItemR(row, "Min", 0, &ptr, "default_minimum", 0, 0, 0); + uiItemR(row, "Max", 0, &ptr, "default_maximum", 0, 0, 0); + + /* control points header */ + // TODO: move this control-point control stuff to using the new special widgets for lists + // the current way is far too cramped + row= uiLayoutRow(layout, 0); + block= uiLayoutGetBlock(row); + + uiDefBut(block, LABEL, 1, "Control Points:", 0, 0, 150, 20, NULL, 0.0, 0.0, 0, 0, ""); + + but= uiDefBut(block, BUT, B_FMODIFIER_REDRAW, "Add Point", 0,0,150,19, NULL, 0, 0, 0, 0, "Adds a new control-point to the envelope on the current frame"); + uiButSetFunc(but, fmod_envelope_addpoint_cb, env, NULL); + + /* control points list */ for (i=0, fed=env->data; i < env->totvert; i++, fed++) { + /* get a new row to operate on */ + row= uiLayoutRow(layout, 1); + block= uiLayoutGetBlock(row); + uiBlockBeginAlign(block); - but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 2, cy, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs"); + but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 0, 0, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs"); uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 92, cy, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point"); - uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 192, cy, 100, 20, &fed->max, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Maximum bound of envelope at this point"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 0, 0, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point"); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 0, 0, 100, 20, &fed->max, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Maximum bound of envelope at this point"); - but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 292, cy, 18, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point"); + but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 0, 0, 18, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point"); uiButSetFunc(but, fmod_envelope_deletepoint_cb, env, SET_INT_IN_POINTER(i)); uiBlockBeginAlign(block); - cy -= 25; } -#endif } /* --------------- */ From e55d90b340d15944d53414419d8f4671f435af75 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 2 Jul 2009 23:36:16 +0000 Subject: [PATCH 116/512] NLA SoC: Added buttons for animating NLA-Strip Influence/Speed These buttons are found in the Evaluation panel, but are currently disabled as I've yet to add the proper code to ensure that animating these will work correctly. They will hopefully be working before the end of the day. --- source/blender/editors/animation/fmodifier_ui.c | 4 ++-- source/blender/editors/space_nla/nla_buttons.c | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 3be96031526..cd0a00fa859 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -215,7 +215,7 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid /* draw controls for each pair of coefficients */ row= uiLayoutRow(layout, 1); block= uiLayoutGetBlock(row); - uiDefBut(block, LABEL, 1, "y = ", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, "y=", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, ""); cp= data->coefficients; for (i=0; (i < data->poly_order) && (cp); i++, cp+=2) { @@ -225,7 +225,7 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid /* coefficients */ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x"); - uiDefBut(block, LABEL, 1, "x + ", 0, 0, 40, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, "x+", 0, 0, 40, 20, NULL, 0.0, 0.0, 0, 0, ""); uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient"); diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 67c4365ff49..7eb10866b8c 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -289,7 +289,7 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) { PointerRNA strip_ptr; uiLayout *layout= pa->layout; - //uiLayout *column, *row, *subcol; + uiLayout *column; uiBlock *block; /* check context and also validity of pointer */ @@ -299,10 +299,15 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); - // influence - // strip_time - // animated_influence - // animated_time + column= uiLayoutColumn(layout, 1); + uiLayoutSetEnabled(column, 0); // XXX for now, don't allow user to edit + uiItemR(column, NULL, 0, &strip_ptr, "animated_influence", 0, 0, 0); + uiItemR(column, NULL, 0, &strip_ptr, "influence", 0, 0, 0); + + column= uiLayoutColumn(layout, 1); + uiLayoutSetEnabled(column, 0); // XXX for now, don't allow user to edit + uiItemR(column, NULL, 0, &strip_ptr, "animated_time", 0, 0, 0); + uiItemR(column, NULL, 0, &strip_ptr, "strip_time", 0, 0, 0); } /* F-Modifiers for active NLA-Strip */ From 28d371d1178642e17f5dfc300f1500a132ce7149 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 3 Jul 2009 01:10:46 +0000 Subject: [PATCH 117/512] NLA SoC: Assorted fixes * Made NLA Editing functions more aware of transitions. - A transition can only be added between a pair of action-clips. Previous, two transitions could be added next to each other, which has undefined behaviour - Deleting a strip with transition(s) on either side will remove the transitions too. Feedback welcome on this - The 'type' setting for NLA-Strips is no longer editable. This was dangerous as it could result in transitions with undefined behaviour (though nothing would happen). * Menus for adding F-Modifiers now only show relevant modifiers (i.e. 'Invalid' is not included in the list, and 'Cycles' doesn't need to be shown for NLA since we've got repeat) * Function Generator and Noise F-Modifiers now have complete GUI's. A few settings were missed during the porting process. * F-Modifier buttons now have their source-ID's included in the RNA Pointers used. This didn't get them animateable directly, but is a step closer. --- source/blender/blenkernel/BKE_fcurve.h | 33 +++++++++-- source/blender/blenkernel/intern/nla.c | 8 +-- .../blender/editors/animation/fmodifier_ui.c | 56 +++++++++++-------- source/blender/editors/include/ED_anim_api.h | 2 +- .../editors/space_graph/graph_buttons.c | 2 +- .../blender/editors/space_graph/graph_edit.c | 31 +++++++++- .../blender/editors/space_nla/nla_buttons.c | 2 +- source/blender/editors/space_nla/nla_edit.c | 50 ++++++++++++++++- source/blender/makesdna/DNA_anim_types.h | 2 +- source/blender/makesrna/intern/rna_nla.c | 6 +- 10 files changed, 150 insertions(+), 42 deletions(-) diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index cfc4e9077f6..4dcb08dc0df 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -1,12 +1,33 @@ -/* Testing code for new animation system in 2.5 - * Copyright 2009, Joshua Leung +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (full recode) + * + * ***** END GPL LICENSE BLOCK ***** */ #ifndef BKE_FCURVE_H #define BKE_FCURVE_H -//struct ListBase; - struct FCurve; struct FModifier; struct ChannelDriver; @@ -54,8 +75,8 @@ typedef struct FModifierTypeInfo { short size; /* size in bytes of the struct */ short acttype; /* eFMI_Action_Types */ short requires; /* eFMI_Requirement_Flags */ - char name[32]; /* name of modifier in interface */ - char structName[32]; /* name of struct for SDNA */ + char name[64]; /* name of modifier in interface */ + char structName[64]; /* name of struct for SDNA */ /* data management function pointers - special handling */ /* free any data that is allocated separately (optional) */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 14e658b3903..d554fbbabc1 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -66,7 +66,6 @@ /* Remove the given NLA strip from the NLA track it occupies, free the strip's data, * and the strip itself. */ -// TODO: with things like transitions, should these get freed too? Maybe better as a UI tool void free_nlastrip (ListBase *strips, NlaStrip *strip) { /* sanity checks */ @@ -793,6 +792,7 @@ void BKE_nla_action_pushdown (AnimData *adt) /* not first, so extend mode can only be NLASTRIP_EXTEND_HOLD_FORWARD not NLASTRIP_EXTEND_HOLD, * so that it doesn't override strips in previous tracks */ + // FIXME: this needs to be more automated, since user can rearrange strips strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD; } } @@ -844,7 +844,7 @@ short BKE_nla_tweakmode_enter (AnimData *adt) if (strip->act == activeStrip->act) strip->flag |= NLASTRIP_FLAG_TWEAKUSER; else - strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER; // XXX probably don't need to clear this... + strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER; } } @@ -887,8 +887,8 @@ void BKE_nla_tweakmode_exit (AnimData *adt) // TODO: need to sync the user-strip with the new state of the action! - /* for all NLA-tracks, clear the 'disabled' flag - * for all NLA-strips, clear the 'tweak-user' flag + /* for all Tracks, clear the 'disabled' flag + * for all Strips, clear the 'tweak-user' flag */ for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { nlt->flag &= ~NLATRACK_DISABLED; diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index cd0a00fa859..7a618f4d222 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -134,7 +134,7 @@ static void delete_fmodifier_cb (bContext *C, void *fmods_v, void *fcm_v) /* --------------- */ /* draw settings for generator modifier */ -static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__generator(uiLayout *layout, ID *id, FModifier *fcm, short width) { FMod_Generator *data= (FMod_Generator *)fcm->data; uiLayout *col, *row; @@ -143,7 +143,7 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid PointerRNA ptr; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierFunctionGenerator, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierFunctionGenerator, fcm, &ptr); /* basic settings (backdrop + mode selector + some padding) */ col= uiLayoutColumn(layout, 1); @@ -248,31 +248,36 @@ static void draw_modifier__generator(uiLayout *layout, FModifier *fcm, short wid /* --------------- */ /* draw settings for noise modifier */ -static void draw_modifier__fn_generator(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__fn_generator(uiLayout *layout, ID *id, FModifier *fcm, short width) { - uiLayout *col= uiLayoutColumn(layout, 0); // no grouping for now + uiLayout *col; PointerRNA ptr; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierFunctionGenerator, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierFunctionGenerator, fcm, &ptr); /* add the settings */ - uiItemR(col, NULL, 0, &ptr, "amplitude", 0, 0, 0); - uiItemR(col, NULL, 0, &ptr, "phase_multiplier", 0, 0, 0); - uiItemR(col, NULL, 0, &ptr, "phase_offset", 0, 0, 0); - uiItemR(col, NULL, 0, &ptr, "value_offset", 0, 0, 0); + col= uiLayoutColumn(layout, 1); + uiItemR(col, "", 0, &ptr, "type", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "additive", 0, 0, 1); + + col= uiLayoutColumn(layout, 0); // no grouping for now + uiItemR(col, NULL, 0, &ptr, "amplitude", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "phase_multiplier", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "phase_offset", 0, 0, 0); + uiItemR(col, NULL, 0, &ptr, "value_offset", 0, 0, 0); } /* --------------- */ /* draw settings for cycles modifier */ -static void draw_modifier__cycles(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__cycles(uiLayout *layout, ID *id, FModifier *fcm, short width) { uiLayout *split, *col; PointerRNA ptr; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierCycles, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierCycles, fcm, &ptr); /* split into 2 columns * NOTE: the mode comboboxes shouldn't get labels, otherwise there isn't enough room @@ -295,13 +300,16 @@ static void draw_modifier__cycles(uiLayout *layout, FModifier *fcm, short width) /* --------------- */ /* draw settings for noise modifier */ -static void draw_modifier__noise(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__noise(uiLayout *layout, ID *id, FModifier *fcm, short width) { uiLayout *split, *col; PointerRNA ptr; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierNoise, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierNoise, fcm, &ptr); + + /* blending mode */ + uiItemR(layout, NULL, 0, &ptr, "modification", 0, 0, 0); /* split into 2 columns */ split= uiLayoutSplit(layout, 0.5f); @@ -479,7 +487,7 @@ static void fmod_envelope_deletepoint_cb (bContext *C, void *fcm_dv, void *ind_v } /* draw settings for envelope modifier */ -static void draw_modifier__envelope(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__envelope(uiLayout *layout, ID *id, FModifier *fcm, short width) { FMod_Envelope *env= (FMod_Envelope *)fcm->data; FCM_EnvelopeData *fed; @@ -490,7 +498,7 @@ static void draw_modifier__envelope(uiLayout *layout, FModifier *fcm, short widt int i; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierEnvelope, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierEnvelope, fcm, &ptr); /* general settings */ col= uiLayoutColumn(layout, 1); @@ -534,13 +542,13 @@ static void draw_modifier__envelope(uiLayout *layout, FModifier *fcm, short widt /* --------------- */ /* draw settings for limits modifier */ -static void draw_modifier__limits(uiLayout *layout, FModifier *fcm, short width) +static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, short width) { uiLayout *split, *col, *row; PointerRNA ptr; /* init the RNA-pointer */ - RNA_pointer_create(NULL, &RNA_FModifierLimits, fcm, &ptr); + RNA_pointer_create(id, &RNA_FModifierLimits, fcm, &ptr); /* row 1: minimum */ { @@ -582,7 +590,7 @@ static void draw_modifier__limits(uiLayout *layout, FModifier *fcm, short width) /* --------------- */ -void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ListBase *modifiers, FModifier *fcm) +void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ID *id, ListBase *modifiers, FModifier *fcm) { FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); uiLayout *box, *row, *subrow; @@ -639,27 +647,27 @@ void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ListBase *modifiers, FMod /* draw settings for individual modifiers */ switch (fcm->type) { case FMODIFIER_TYPE_GENERATOR: /* Generator */ - draw_modifier__generator(box, fcm, width); + draw_modifier__generator(box, id, fcm, width); break; case FMODIFIER_TYPE_FN_GENERATOR: /* Built-In Function Generator */ - draw_modifier__fn_generator(box, fcm, width); + draw_modifier__fn_generator(box, id, fcm, width); break; case FMODIFIER_TYPE_CYCLES: /* Cycles */ - draw_modifier__cycles(box, fcm, width); + draw_modifier__cycles(box, id, fcm, width); break; case FMODIFIER_TYPE_ENVELOPE: /* Envelope */ - draw_modifier__envelope(box, fcm, width); + draw_modifier__envelope(box, id, fcm, width); break; case FMODIFIER_TYPE_LIMITS: /* Limits */ - draw_modifier__limits(box, fcm, width); + draw_modifier__limits(box, id, fcm, width); break; case FMODIFIER_TYPE_NOISE: /* Noise */ - draw_modifier__noise(box, fcm, width); + draw_modifier__noise(box, id, fcm, width); break; default: /* unknown type */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index df4e704cae8..87811fa34f9 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -300,7 +300,7 @@ struct uiLayout; /* draw a given F-Modifier for some layout/UI-Block */ // XXX not quite complete yet -void ANIM_uiTemplate_fmodifier_draw(struct uiLayout *layout, ListBase *modifiers, struct FModifier *fcm); +void ANIM_uiTemplate_fmodifier_draw(struct uiLayout *layout, struct ID *id, ListBase *modifiers, struct FModifier *fcm); /* ************************************************* */ /* ASSORTED TOOLS */ diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 17bc78f9ee6..0e48d56ac90 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -388,7 +388,7 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa) for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { col= uiLayoutColumn(pa->layout, 1); - ANIM_uiTemplate_fmodifier_draw(col, &fcu->modifiers, fcm); + ANIM_uiTemplate_fmodifier_draw(col, ale->id, &fcu->modifiers, fcm); } MEM_freeN(ale); diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 9a50c5cc203..2cade676817 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -73,6 +73,7 @@ #include "BKE_report.h" #include "BKE_utildefines.h" +#include "UI_interface.h" #include "UI_view2d.h" #include "BIF_transform.h" @@ -1743,6 +1744,34 @@ void GRAPH_OT_smooth (wmOperatorType *ot) /* ******************** Add F-Modifier Operator *********************** */ +/* present a special customised popup menu for this, with some filtering */ +static int graph_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *event) +{ + uiPopupMenu *pup; + uiLayout *layout; + int i; + + pup= uiPupMenuBegin(C, "Add F-Curve Modifier", 0); + layout= uiPupMenuLayout(pup); + + /* start from 1 to skip the 'Invalid' modifier type */ + for (i = 1; i < FMODIFIER_NUM_TYPES; i++) { + FModifierTypeInfo *fmi= get_fmodifier_typeinfo(i); + + /* check if modifier is valid for this context */ + if (fmi == NULL) + continue; + + /* add entry to add this type of modifier */ + uiItemEnumO(layout, fmi->name, 0, "GRAPH_OT_fmodifier_add", "type", i); + } + uiItemS(layout); + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) { bAnimContext ac; @@ -1793,7 +1822,7 @@ void GRAPH_OT_fmodifier_add (wmOperatorType *ot) ot->idname= "GRAPH_OT_fmodifier_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke; + ot->invoke= graph_fmodifier_add_invoke; ot->exec= graph_fmodifier_add_exec; ot->poll= graphop_active_fcurve_poll; diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 7eb10866b8c..38ac59cbc9e 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -341,7 +341,7 @@ static void nla_panel_modifiers(const bContext *C, Panel *pa) for (fcm= strip->modifiers.first; fcm; fcm= fcm->next) { col= uiLayoutColumn(pa->layout, 1); - ANIM_uiTemplate_fmodifier_draw(col, &strip->modifiers, fcm); + ANIM_uiTemplate_fmodifier_draw(col, strip_ptr.id.data, &strip->modifiers, fcm); } } diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 9910e62b262..10b25beddff 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -386,6 +386,12 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) /* check if there's space between the two */ if (IS_EQ(s1->end, s2->start)) continue; + /* make neither one is a transition + * - although this is impossible to create with the standard tools, + * the user may have altered the settings + */ + if (ELEM(NLASTRIP_TYPE_TRANSITION, s1->type, s2->type)) + continue; /* allocate new strip */ strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip"); @@ -577,8 +583,18 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) nstrip= strip->next; /* if selected, delete */ - if (strip->flag & NLASTRIP_FLAG_SELECT) + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* if a strip either side of this was a transition, delete those too */ + if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) + free_nlastrip(&nlt->strips, strip->prev); + if ((nstrip) && (nstrip->type == NLASTRIP_TYPE_TRANSITION)) { + nstrip= nstrip->next; + free_nlastrip(&nlt->strips, strip->next); + } + + /* finally, delete this strip */ free_nlastrip(&nlt->strips, strip); + } } } @@ -1026,6 +1042,36 @@ void NLA_OT_clear_scale (wmOperatorType *ot) /* ******************** Add F-Modifier Operator *********************** */ +/* present a special customised popup menu for this, with some filtering */ +static int nla_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *event) +{ + uiPopupMenu *pup; + uiLayout *layout; + int i; + + pup= uiPupMenuBegin(C, "Add F-Modifier", 0); + layout= uiPupMenuLayout(pup); + + /* start from 1 to skip the 'Invalid' modifier type */ + for (i = 1; i < FMODIFIER_NUM_TYPES; i++) { + FModifierTypeInfo *fmi= get_fmodifier_typeinfo(i); + + /* check if modifier is valid for this context */ + if (fmi == NULL) + continue; + if (i == FMODIFIER_TYPE_CYCLES) /* we already have repeat... */ + continue; + + /* add entry to add this type of modifier */ + uiItemEnumO(layout, fmi->name, 0, "NLA_OT_fmodifier_add", "type", i); + } + uiItemS(layout); + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + static int nla_fmodifier_add_exec(bContext *C, wmOperator *op) { bAnimContext ac; @@ -1089,7 +1135,7 @@ void NLA_OT_fmodifier_add (wmOperatorType *ot) ot->idname= "NLA_OT_fmodifier_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke; + ot->invoke= nla_fmodifier_add_invoke; ot->exec= nla_fmodifier_add_exec; ot->poll= nlaop_poll_tweakmode_off; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index ad3edde6552..f9508efef31 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -69,7 +69,7 @@ enum { FMODIFIER_TYPE_FN_GENERATOR, FMODIFIER_TYPE_ENVELOPE, FMODIFIER_TYPE_CYCLES, - FMODIFIER_TYPE_NOISE, /* unimplemented - generate variations using some basic noise generator... */ + FMODIFIER_TYPE_NOISE, FMODIFIER_TYPE_FILTER, /* unimplemented - for applying: fft, high/low pass filters, etc. */ FMODIFIER_TYPE_PYTHON, FMODIFIER_TYPE_LIMITS, diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 965692212a5..dfa496fd8f3 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -228,6 +228,7 @@ void rna_def_nlastrip(BlenderRNA *brna) /* Enums */ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, not editable, since this is dangerous RNA_def_property_enum_items(prop, prop_type_items); RNA_def_property_ui_text(prop, "Type", "Type of NLA Strip."); @@ -296,7 +297,10 @@ void rna_def_nlastrip(BlenderRNA *brna) RNA_def_property_range(prop, 0.0001f, 1000.0f); /* these limits can be extended, but beyond this, we can get some crazy+annoying bugs due to numeric errors */ RNA_def_property_ui_text(prop, "Scale", "Scaling factor for action."); - // TODO: strip's F-Curves? + /* Strip's F-Curves */ + prop= RNA_def_property(srna, "fcurves", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "FCurve"); + RNA_def_property_ui_text(prop, "F-Curves", "F-Curves for controlling the strip's influence and timing."); /* Strip's F-Modifiers */ prop= RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE); From a07d1ea3ea1875f938327d37fbb219717e325ada Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 3 Jul 2009 04:24:19 +0000 Subject: [PATCH 118/512] NLA SoC: Quick hack to get layer buttons in 3D view updating visible layers correctly. Now it is possible to load old files and be able to switch layers to show/hide objects AND have that reflected in the Animation Editors which rely on the scene layers being set correctly. --- .../editors/space_view3d/view3d_header.c | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5edcd203e16..605f6d6b02f 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -117,8 +117,7 @@ #define TEST_EDITMESH if(obedit==0) return; \ if( (v3d->lay & obedit->lay)==0 ) return; -/* XXX port over */ -static void handle_view3d_lock(void) {} +/* XXX port over */ static void countall(void) {} extern void borderselect(); static int retopo_mesh_paint_check() {return 0;} @@ -201,6 +200,25 @@ static RegionView3D *wm_region_view3d(const bContext *C) return NULL; } +// XXX quickly ported across +static void handle_view3d_lock(bContext *C) +{ + Scene *scene= CTX_data_scene(C); + ScrArea *sa= CTX_wm_area(C); + View3D *v3d= (View3D *)CTX_wm_space_data(C); + + if (v3d != NULL && sa != NULL) { + if(v3d->localview==0 && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) { + + /* copy to scene */ + scene->lay= v3d->lay; + scene->camera= v3d->camera; + + //copy_view3d_lock(REDRAW); + } + } +} + /* XXX; all this context stuff... should become operator */ void do_layer_buttons(bContext *C, short event) { @@ -230,7 +248,7 @@ void do_layer_buttons(bContext *C, short event) v3d->lay= (1<<20)-1; } - if(v3d->scenelock) handle_view3d_lock(); + if(v3d->scenelock) handle_view3d_lock(C); /* new layers might need unflushed events events */ DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */ @@ -266,7 +284,7 @@ static int layers_exec(bContext *C, wmOperator *op) else v3d->lay = (1<scenelock) handle_view3d_lock(); + if(v3d->scenelock) handle_view3d_lock(C); /* new layers might need unflushed events events */ DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */ @@ -5106,7 +5124,7 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event) v3d->layact= v3d->lay; } - if(v3d->scenelock) handle_view3d_lock(); + if(v3d->scenelock) handle_view3d_lock(C); ED_area_tag_redraw(sa); countall(); From 66efea5e2d94ec7296efbe03ddeb7c6c4878c9ab Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 3 Jul 2009 04:48:44 +0000 Subject: [PATCH 119/512] NLA SoC: Toggle for 'Editing in Place' The 'pin' icon beside the name of the active Action when tweaking some strip's action can be used to toggle between editing the Action's keyframes in 'mapped' time or in 'un-mapped' time. --- source/blender/blenkernel/intern/nla.c | 3 ++- source/blender/editors/space_nla/nla_channels.c | 7 +++++-- source/blender/editors/space_nla/nla_draw.c | 13 ++++++++++++- source/blender/makesdna/DNA_anim_types.h | 2 ++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index d554fbbabc1..1244b2900fd 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -458,8 +458,9 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) /* sanity checks * - obviously we've got to have some starting data * - when not in tweakmode, the active Action does not have any scaling applied :) + * - when in tweakmode, if the no-mapping flag is set, do not map */ - if ((adt == NULL) || (adt->flag & ADT_NLA_EDIT_ON)==0) + if ((adt == NULL) || (adt->flag & ADT_NLA_EDIT_ON)==0 || (adt->flag & ADT_NLA_EDIT_NOMAP)) return cframe; /* if the active-strip info has been stored already, access this, otherwise look this up diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 0a2c32b5f52..5a891a541cb 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -264,14 +264,17 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh { AnimData *adt= BKE_animdata_from_id(ale->owner); /* this won't crash, right? */ - /* for now, only do something if user clicks on the 'push-down' button */ if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { - /* activate push-down function - only usable when not in TweakMode */ if (nlaedit_is_tweakmode_on(ac) == 0) { + /* 'push-down' action - only usable when not in TweakMode */ // TODO: make this use the operator instead of calling the function directly // however, calling the operator requires that we supply the args, and that works with proper buttons only BKE_nla_action_pushdown(adt); } + else { + /* when in tweakmode, this button becomes the toggle for mapped editing */ + adt->flag ^= ADT_NLA_EDIT_NOMAP; + } } } break; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 6d4f65fe249..ab33434077e 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -886,7 +886,18 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* now draw some indicator icons */ if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { - /* 'tweaking action' - not a button */ + /* toggle for tweaking with mapping/no-mapping (i.e. 'in place editing' toggle) */ + // for now, use pin icon to symbolise this + if (adt->flag & ADT_NLA_EDIT_NOMAP) + UI_icon_draw((float)(NLACHANNEL_NAMEWIDTH-offset), ydatac, ICON_PINNED); + else + UI_icon_draw((float)(NLACHANNEL_NAMEWIDTH-offset), ydatac, ICON_UNPINNED); + + fdrawline((float)(NLACHANNEL_NAMEWIDTH-offset), yminc, + (float)(NLACHANNEL_NAMEWIDTH-offset), ymaxc); + offset += 16;; + + /* 'tweaking action' indicator - not a button */ UI_icon_draw((float)NLACHANNEL_NAMEWIDTH-offset, ydatac, ICON_EDIT); } else { diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index f9508efef31..110b33850f0 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -730,6 +730,8 @@ enum { ADT_NLA_EVAL_OFF = (1<<1), /* NLA is being 'tweaked' (i.e. in EditMode) */ ADT_NLA_EDIT_ON = (1<<2), + /* active Action for 'tweaking' does not have mapping applied for editing */ + ADT_NLA_EDIT_NOMAP = (1<<3), /* drivers expanded in UI */ ADT_DRIVERS_COLLAPSED = (1<<10), From b8042f535c43c371d6bdb2fe44d0560d5802083c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 3 Jul 2009 10:28:10 +0000 Subject: [PATCH 120/512] NLA SoC: Muting and Graph-Editor Curve visibility for (Action) Groups Groups (the Action variety) can now be muted, and also be set to not be drawn in the Graph Editor. These settings get applied to all the F-Curves within the group, overriding any settings individual F-Curves might have, allowing users to quickly mute or hide groups of curves without having to go through clicking on all of them. Also, added a flag that can be used to set the curve visiblity on AnimData level too. This will be enabled in a future commit. --- source/blender/blenkernel/intern/anim_sys.c | 19 ++++++--- .../blender/editors/animation/anim_channels.c | 14 +++++++ .../blender/editors/animation/anim_filter.c | 39 +++++++++++-------- .../editors/space_action/action_draw.c | 5 +++ .../blender/editors/space_graph/graph_draw.c | 11 ++++++ source/blender/makesdna/DNA_action_types.h | 8 ++++ source/blender/makesdna/DNA_anim_types.h | 3 ++ 7 files changed, 77 insertions(+), 22 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 4c0c30fe5c1..9befe9dc9cb 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -492,11 +492,14 @@ static void animsys_evaluate_fcurves (PointerRNA *ptr, ListBase *list, AnimMappe /* calculate then execute each curve */ for (fcu= list->first; fcu; fcu= fcu->next) { - /* check if this curve should be skipped */ - if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) - { - calculate_fcurve(fcu, ctime); - animsys_execute_fcurve(ptr, remap, fcu); + /* check if this F-Curve doesn't belong to a muted group */ + if ((fcu->grp == NULL) || (fcu->grp->flag & AGRP_MUTED)==0) { + /* check if this curve should be skipped */ + if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) + { + calculate_fcurve(fcu, ctime); + animsys_execute_fcurve(ptr, remap, fcu); + } } } } @@ -551,6 +554,10 @@ void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup if ELEM(NULL, act, agrp) return; if ((remap) && (remap->target != act)) remap= NULL; + /* if group is muted, don't evaluated any of the F-Curve */ + if (agrp->flag & AGRP_MUTED) + return; + /* calculate then execute each curve */ for (fcu= agrp->channels.first; (fcu) && (fcu->grp == agrp); fcu= fcu->next) { @@ -884,6 +891,8 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N /* check if this curve should be skipped */ if (fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) continue; + if ((fcu->grp) && (fcu->grp->flag & AGRP_MUTED)) + continue; /* evaluate the F-Curve's value for the time given in the strip * NOTE: we use the modified time here, since strip's F-Curve Modifiers are applied on top of this diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 4ac1648361e..5e9abd42aeb 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -928,6 +928,12 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, case ACHANNEL_SETTING_EXPAND: ACHANNEL_SET_FLAG(agrp, mode, AGRP_EXPANDED); break; + case ACHANNEL_SETTING_MUTE: + ACHANNEL_SET_FLAG(agrp, mode, AGRP_MUTED); + break; + case ACHANNEL_SETTING_VISIBLE: + ACHANNEL_SET_FLAG_NEG(agrp, mode, AGRP_NOTVISIBLE); + break; } } break; @@ -1491,10 +1497,18 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* toggle expand */ agrp->flag ^= AGRP_EXPANDED; } + else if ((x < (offset+32)) && (ac->spacetype==SPACE_IPO)) { + /* toggle visibility (of grouped F-Curves in Graph editor) */ + agrp->flag ^= AGRP_NOTVISIBLE; + } else if (x >= (ACHANNEL_NAMEWIDTH-ACHANNEL_BUTTON_WIDTH)) { /* toggle protection/locking */ agrp->flag ^= AGRP_PROTECTED; } + else if (x >= (ACHANNEL_NAMEWIDTH-2*ACHANNEL_BUTTON_WIDTH)) { + /* toggle mute */ + agrp->flag ^= AGRP_MUTED; + } else { /* select/deselect group */ if (selectmode == SELECT_INVERT) { diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index f9c1b1bb42f..42943475a57 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -682,25 +682,30 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter * cases when we should include F-Curves inside group: * - we don't care about visibility * - group is expanded - * - we're interested in keyframes, but not if they appear in selected channels + * - we just need the F-Curves present */ - // XXX what was the selection check here for again? - if ( (!(filter_mode & ANIMFILTER_VISIBLE) || EXPANDED_AGRP(agrp)) || - ( /*ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) &&*/ (filter_mode & ANIMFILTER_CURVESONLY) ) ) + if ( (!(filter_mode & ANIMFILTER_VISIBLE) || EXPANDED_AGRP(agrp)) || (filter_mode & ANIMFILTER_CURVESONLY) ) { - if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) { - // XXX the 'owner' info here needs review... - items += animdata_filter_fcurves(anim_data, agrp->channels.first, agrp, owner, ownertype, filter_mode, owner_id); - - /* remove group from filtered list if last element is group - * (i.e. only if group had channels, which were all hidden) - */ - // XXX this is really hacky... it should be fixed in a much more elegant way! - if ( (ale) && (anim_data->last == ale) && - (ale->data == agrp) && (agrp->channels.first) ) - { - BLI_freelinkN(anim_data, ale); - items--; + /* for the Graph Editor, curves may be set to not be visible in the view to lessen clutter, + * but to do this, we need to check that the group doesn't have it's not-visible flag set preventing + * all its sub-curves to be shown + */ + if ( !(filter_mode & ANIMFILTER_CURVEVISIBLE) || !(agrp->flag & AGRP_NOTVISIBLE) ) + { + if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) { + // XXX the 'owner' info here needs review... + items += animdata_filter_fcurves(anim_data, agrp->channels.first, agrp, owner, ownertype, filter_mode, owner_id); + + /* remove group from filtered list if last element is group + * (i.e. only if group had channels, which were all hidden) + */ + // XXX this is really hacky... it should be fixed in a much more elegant way! + if ( (ale) && (anim_data->last == ale) && + (ale->data == agrp) && (agrp->channels.first) ) + { + BLI_freelinkN(anim_data, ale); + items--; + } } } } diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index f3a0dda4ce7..910b9733bc8 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -645,6 +645,11 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) expand = ICON_TRIA_RIGHT; } + if (agrp->flag & AGRP_MUTED) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + if (EDITABLE_AGRP(agrp)) protect = ICON_UNLOCKED; else diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 0d7dafe2938..f8f613223db 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -1166,6 +1166,17 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) expand = ICON_TRIA_RIGHT; } + /* for now, 'special' (i.e. in front of name) is used to show visibility status */ + if (agrp->flag & AGRP_NOTVISIBLE) + special= ICON_CHECKBOX_DEHLT; + else + special= ICON_CHECKBOX_HLT; + + if (agrp->flag & AGRP_MUTED) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + if (EDITABLE_AGRP(agrp)) protect = ICON_UNLOCKED; else diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index a566f733978..4eddebc5b67 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -225,10 +225,18 @@ typedef struct bActionGroup { /* Action Group flags */ typedef enum eActionGroup_Flag { + /* group is selected */ AGRP_SELECTED = (1<<0), + /* group is 'active' / last selected one */ AGRP_ACTIVE = (1<<1), + /* keyframes/channels belonging to it cannot be edited */ AGRP_PROTECTED = (1<<2), + /* for UI, sub-channels are shown */ AGRP_EXPANDED = (1<<3), + /* sub-channels are not evaluated */ + AGRP_MUTED = (1<<4), + /* sub-channels are not visible in Graph Editor */ + AGRP_NOTVISIBLE = (1<<5), AGRP_TEMP = (1<<30), AGRP_MOVED = (1<<31) diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 110b33850f0..a90fad983c4 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -737,6 +737,9 @@ enum { ADT_DRIVERS_COLLAPSED = (1<<10), /* don't execute drivers */ ADT_DRIVERS_DISABLED = (1<<11), + + /* F-Curves from this AnimData block are not visible in the Graph Editor */ + ADT_CURVES_NOT_VISIBLE = (1<<16), } eAnimData_Flag; /* Animation Data recalculation settings (to be set by depsgraph) */ From 3c85b2abc549b853637afaa08db29ac1ecb7ff73 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 4 Jul 2009 00:33:50 +0000 Subject: [PATCH 121/512] fix for python error when running in local view, the layer wasnt being set from the right object. --- release/scripts/object_active_to_other.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release/scripts/object_active_to_other.py b/release/scripts/object_active_to_other.py index 131d1f63d74..68aa6a3a039 100644 --- a/release/scripts/object_active_to_other.py +++ b/release/scripts/object_active_to_other.py @@ -38,13 +38,13 @@ def my_object_util(sce): Draw.PupMenu('Error%t|No active object selected') return - mats = [ob.matrixWorld for ob in sce.objects.context if ob != ob_act] + mats = [(ob, ob.matrixWorld) for ob in sce.objects.context if ob != ob_act] - for m in mats: + for ob, m in mats: ob_copy = ob_act.copy() sce.objects.link(ob_copy) ob_copy.setMatrix(m) - ob_copy.Layers = ob.Layers + ob_copy.Layers = ob.Layers & (1<<20)-1 def main(): From d5737f1f67d50959775fd84f512bd866bdcf9da6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 4 Jul 2009 12:41:34 +0000 Subject: [PATCH 122/512] saving runtime on win32 didnt work with python2.6 --- source/blender/src/header_info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c index 98a45de51e9..65baa4df830 100644 --- a/source/blender/src/header_info.c +++ b/source/blender/src/header_info.c @@ -566,7 +566,7 @@ static void copy_game_dll(char *dll_filename, char *source_dir, char *dest_dir) static void copy_all_game_dlls(char *str) { #define GAME_DLL_COUNT 17 - char *game_dll_list[GAME_DLL_COUNT]={"avcodec-52.dll", "avdevice-52.dll", "avformat-52.dll", "avutil-50.dll", "libfaac-0.dll", "libfaad-2.dll", "libmp3lame-0.dll", "libx264-67.dll", "swscale-0.dll", "xvidcore.dll", "gnu_gettext.dll", "libtiff.dll", "python25.dll", "SDL.dll", "pthreadVC2.dll", "libpng.dll", "zlib.dll"}; + char *game_dll_list[GAME_DLL_COUNT]={"avcodec-52.dll", "avdevice-52.dll", "avformat-52.dll", "avutil-50.dll", "libfaac-0.dll", "libfaad-2.dll", "libmp3lame-0.dll", "libx264-67.dll", "swscale-0.dll", "xvidcore.dll", "gnu_gettext.dll", "libtiff.dll", "python26.dll", "SDL.dll", "pthreadVC2.dll", "libpng.dll", "zlib.dll"}; char dest_dir[FILE_MAX]; char source_dir[FILE_MAX]; From 6a1a7f7905a0281322cf47fd9dfd9281a28d77fc Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Sat, 4 Jul 2009 14:59:28 +0000 Subject: [PATCH 123/512] == Python == This fixes: * background rendering on scenes different from active scene * makes scene.render() behave the same in interactive and background mode * makes saveRenderedImage() work correctly in background mode --- source/blender/python/api2_2x/sceneRender.c | 92 +++++++++++++++------ 1 file changed, 66 insertions(+), 26 deletions(-) diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c index 17c1c497061..d2b77c2f6f2 100644 --- a/source/blender/python/api2_2x/sceneRender.c +++ b/source/blender/python/api2_2x/sceneRender.c @@ -40,6 +40,8 @@ struct View3D; /* keep me up here */ #include "BKE_screen.h" #include "BKE_scene.h" #include "BKE_node.h" +#include "IMB_imbuf_types.h" /* for the IB_rect define */ +#include "IMB_imbuf.h" #include "BIF_drawscene.h" #include "BIF_renderwin.h" @@ -480,28 +482,25 @@ static PyObject *RenderData_Render( BPy_RenderData * self ) tstate = PyEval_SaveThread(); BIF_do_render( 0 ); set_scene( oldsce ); - } - else { /* background mode (blender -b file.blend -P script) */ - Render *re= RE_NewRender(G.scene->id.name); + } else { /* background mode (blender -b file.blend -P script) */ + Render *re; - int end_frame = G.scene->r.efra; + oldsce = G.scene; - if (G.scene != self->scene) - return EXPP_ReturnPyObjError (PyExc_RuntimeError, - "scene to render in bg mode must be the active scene"); + set_scene_bg( self->scene ); - G.scene->r.efra = G.scene->r.sfra; - - if (G.f & G_DOSCRIPTLINKS) - BPY_do_all_scripts(SCRIPT_RENDER, 0); + re = RE_NewRender(G.scene->id.name); tstate = PyEval_SaveThread(); - RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); + if (G.f & G_DOSCRIPTLINKS) + BPY_do_all_scripts(SCRIPT_RENDER, 1); + + RE_BlenderFrame(re, G.scene, G.scene->r.cfra); BPY_do_all_scripts(SCRIPT_POSTRENDER, 0); - G.scene->r.efra = end_frame; + set_scene_bg( oldsce ); } PyEval_RestoreThread(tstate); @@ -544,10 +543,6 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a filename (string) and optional int" ); - if (G.background) - return EXPP_ReturnPyObjError( PyExc_RuntimeError, - "saveRenderedImage does not work in background mode, use renderAnim() instead" ); - if( strlen(self->renderContext->pic) + strlen(name_str) >= sizeof(filepath) ) return EXPP_ReturnPyObjError( PyExc_ValueError, @@ -558,7 +553,7 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject BLI_strncpy( filepath, self->renderContext->pic, sizeof(filepath) ); strcat(filepath, name_str); - rr = RE_GetResult(RE_GetRender(G.scene->id.name)); + rr = RE_GetResult(RE_GetRender(self->scene->id.name)); if(!rr) { return EXPP_ReturnPyObjError (PyExc_ValueError, "No image rendered"); } else { @@ -567,7 +562,49 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject BLI_splitdirstring(dir, str); strcpy(G.ima, dir); } - BIF_save_rendered_image(filepath); + if (G.background) { + if(self->scene->r.scemode & R_EXTENSION) + if(strlen(filepath)scene->r.imtype); + + + BLI_convertstringcode(filepath, G.sce); + BLI_convertstringframe(filepath, self->scene->r.cfra); + /* TODO - is this even used? */ + + if(G.scene->r.imtype==R_MULTILAYER) { + RE_WriteRenderResult(rr, filepath, + self->scene->r.quality); + } else { + RenderResult rres; + struct ImBuf *ibuf; + + RE_GetResultImage( + RE_GetRender(self->scene->id.name), + &rres); + + ibuf= IMB_allocImBuf(rres.rectx, rres.recty, + self->scene->r.planes, + 0, 0); + ibuf->rect= (unsigned int *)rres.rect32; + ibuf->rect_float= rres.rectf; + ibuf->zbuf_float= rres.rectz; + + /* float factor for random dither, imbuf takes care of it */ + ibuf->dither= self->scene->r.dither_intensity; + + BKE_write_ibuf(ibuf, str, + self->scene->r.imtype, + self->scene->r.subimtype, + self->scene->r.quality); + IMB_freeImBuf(ibuf); + /* imbuf knows rects are not part of ibuf */ + } + } else { + BIF_save_rendered_image(filepath); + } } Py_RETURN_NONE; } @@ -586,24 +623,27 @@ static PyObject *RenderData_RenderAnim( BPy_RenderData * self ) set_scene( oldsce ); } else { /* background mode (blender -b file.blend -P script) */ - Render *re= RE_NewRender(G.scene->id.name); - - if (G.scene != self->scene) - return EXPP_ReturnPyObjError (PyExc_RuntimeError, - "scene to render in bg mode must be the active scene"); + Render *re; + + oldsce = G.scene; + set_scene_bg( self->scene ); + + re = RE_NewRender(G.scene->id.name); if (G.scene->r.sfra > G.scene->r.efra) return EXPP_ReturnPyObjError (PyExc_RuntimeError, "start frame must be less or equal to end frame"); + tstate = PyEval_SaveThread(); + if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_RENDER, 1); - tstate = PyEval_SaveThread(); RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); - if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_POSTRENDER, 1); + + set_scene_bg( oldsce ); } PyEval_RestoreThread(tstate); From 4ebcc7402c89bfd5b3fdcd31a979feb82b306331 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Sat, 4 Jul 2009 15:35:16 +0000 Subject: [PATCH 124/512] == Python == Fix for the fix: G.scene slipped in at one point and the filepath generation was broken due to a typo. --- source/blender/python/api2_2x/sceneRender.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c index d2b77c2f6f2..d1d13d6edeb 100644 --- a/source/blender/python/api2_2x/sceneRender.c +++ b/source/blender/python/api2_2x/sceneRender.c @@ -553,6 +553,8 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject BLI_strncpy( filepath, self->renderContext->pic, sizeof(filepath) ); strcat(filepath, name_str); + fprintf(stderr, "Save to: %s -> ", filepath); + rr = RE_GetResult(RE_GetRender(self->scene->id.name)); if(!rr) { return EXPP_ReturnPyObjError (PyExc_ValueError, "No image rendered"); @@ -574,7 +576,7 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject BLI_convertstringframe(filepath, self->scene->r.cfra); /* TODO - is this even used? */ - if(G.scene->r.imtype==R_MULTILAYER) { + if(self->scene->r.imtype==R_MULTILAYER) { RE_WriteRenderResult(rr, filepath, self->scene->r.quality); } else { @@ -594,8 +596,8 @@ static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject /* float factor for random dither, imbuf takes care of it */ ibuf->dither= self->scene->r.dither_intensity; - - BKE_write_ibuf(ibuf, str, + fprintf(stderr, "%s\n", filepath); + BKE_write_ibuf(ibuf, filepath, self->scene->r.imtype, self->scene->r.subimtype, self->scene->r.quality); From f87fcde686c85820c510c5c7806f6b6b8466ba5c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 6 Jul 2009 03:44:44 +0000 Subject: [PATCH 125/512] NLA SoC: Start of 'Meta' Strips Refactored the backend code/API's to support 'meta' strips (i.e. strips containing other strips). These have been implemented to be nested to 'unlimited' depths (in terms of common usages that is, though there is a very remote chance of stack-overflow in theoretrical evil cases only that shouldn't ever be encountered in production). This paves the way for implementing the necessary tweaks needed for the transform code (in addition to some cool user-level tricks) --- source/blender/blenkernel/BKE_nla.h | 8 + source/blender/blenkernel/intern/anim_sys.c | 47 +++- source/blender/blenkernel/intern/nla.c | 213 ++++++++++++------ source/blender/blenloader/intern/readfile.c | 77 +++++-- source/blender/blenloader/intern/writefile.c | 30 ++- source/blender/editors/space_nla/nla_edit.c | 120 +++++++++- source/blender/editors/space_nla/nla_intern.h | 11 + source/blender/makesdna/DNA_anim_types.h | 9 + 8 files changed, 386 insertions(+), 129 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index e2b1dd89deb..efa0591bd53 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -53,6 +53,13 @@ struct NlaStrip *add_nlastrip_to_stack(struct AnimData *adt, struct bAction *act /* ----------------------------- */ /* API */ +short BKE_nlastrips_has_space(ListBase *strips, float start, float end); +void BKE_nlastrips_sort_strips(ListBase *strips); + +short BKE_nlastrips_add_strip(ListBase *strips, struct NlaStrip *strip); + +/* ............ */ + struct NlaTrack *BKE_nlatrack_find_active(ListBase *tracks); void BKE_nlatrack_set_active(ListBase *tracks, struct NlaTrack *nlt); @@ -63,6 +70,7 @@ void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); short BKE_nlatrack_add_strip(struct NlaTrack *nlt, struct NlaStrip *strip); +/* ............ */ struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 9befe9dc9cb..1d10744ac80 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -628,15 +628,13 @@ static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) } -/* gets the strip active at the current time for a track for evaluation purposes */ -static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index, float ctime) +/* gets the strip active at the current time for a given list of strips */ +static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) { NlaStrip *strip, *estrip=NULL; - NlaEvalStrip *nes; - short side= 0; /* loop over strips, checking if they fall within the range */ - for (strip= nlt->strips.first; strip; strip= strip->next) { + for (strip= strips->first; strip; strip= strip->next) { /* check if current time occurs within this strip */ if (IN_RANGE_INCL(ctime, strip->start, strip->end)) { /* this strip is active, so try to use it */ @@ -647,13 +645,13 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* if time occurred before current strip... */ if (ctime < strip->start) { - if (strip == nlt->strips.first) { + if (strip == strips->first) { /* before first strip - only try to use it if it extends backwards in time too */ if (strip->extendmode == NLASTRIP_EXTEND_HOLD) estrip= strip; /* side is 'before' regardless of whether there's a useful strip */ - side= NES_TIME_BEFORE; + *side= NES_TIME_BEFORE; } else { /* before next strip - previous strip has ended, but next hasn't begun, @@ -665,7 +663,7 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) estrip= strip; - side= NES_TIME_AFTER; + *side= NES_TIME_AFTER; } break; } @@ -673,11 +671,11 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* if time occurred after current strip... */ if (ctime > strip->end) { /* only if this is the last strip should we do anything, and only if that is being held */ - if (strip == nlt->strips.last) { + if (strip == strips->last) { if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) estrip= strip; - side= NES_TIME_AFTER; + *side= NES_TIME_AFTER; break; } @@ -685,6 +683,35 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index } } + /* return the matching strip found */ + return estrip; +} + +/* gets the strip active at the current time for a track for evaluation purposes */ +static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index, float ctime) +{ + ListBase *strips= &nlt->strips; + NlaStrip *strip, *estrip=NULL; + NlaEvalStrip *nes; + short side= 0; + + /* keep looping over hierarchy of strips until one which fits for the current time is found */ + while (strips->first) { + /* try to get the strip at this frame for this strip */ + strip= ctime_get_strip(strips, &side, ctime); + + /* if a strip was found, make this the new estrip, otherwise, stop trying */ + if (strip) { + /* set new estrip */ + estrip= strip; + + /* check children (only available if this is a meta-strip) for better match */ + strips= &strip->strips; + } + else + break; + } + /* check if a valid strip was found * - must not be muted (i.e. will have contribution */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 1244b2900fd..d01fa2c1965 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -68,10 +68,18 @@ */ void free_nlastrip (ListBase *strips, NlaStrip *strip) { + NlaStrip *cs, *csn; + /* sanity checks */ if (strip == NULL) return; + /* free child-strips */ + for (cs= strip->strips.first; cs; cs= csn) { + csn= cs->next; + free_nlastrip(&strip->strips, cs); + } + /* remove reference to action */ if (strip->act) strip->act->id.us--; @@ -144,6 +152,7 @@ void free_nladata (ListBase *tracks) NlaStrip *copy_nlastrip (NlaStrip *strip) { NlaStrip *strip_d; + NlaStrip *cs, *cs_d; /* sanity check */ if (strip == NULL) @@ -161,6 +170,14 @@ NlaStrip *copy_nlastrip (NlaStrip *strip) copy_fcurves(&strip_d->fcurves, &strip->fcurves); copy_fmodifiers(&strip_d->modifiers, &strip->modifiers); + /* make a copy of all the child-strips, one at a time */ + strip_d->strips.first= strip_d->strips.last= NULL; + + for (cs= strip->strips.first; cs; cs= cs->next) { + cs_d= copy_nlastrip(cs); + BLI_addtail(&strip_d->strips, cs_d); + } + /* return the strip */ return strip_d; } @@ -435,6 +452,7 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short float nlastrip_get_frame (NlaStrip *strip, float cframe, short mode) { switch (strip->type) { + case NLASTRIP_TYPE_META: /* meta (is just a container for other strips, so shouldn't use the action-clip method) */ case NLASTRIP_TYPE_TRANSITION: /* transition */ return nlastrip_get_frame_transition(strip, cframe, mode); @@ -487,6 +505,117 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) /* *************************************************** */ /* Basic Utilities */ +/* List of Strips ------------------------------------ */ +/* (these functions are used for NLA-Tracks and also for nested/meta-strips) */ + +/* Check if there is any space in the given list to add the given strip */ +short BKE_nlastrips_has_space (ListBase *strips, float start, float end) +{ + NlaStrip *strip; + + /* sanity checks */ + if ((strips == NULL) || IS_EQ(start, end)) + return 0; + if (start > end) { + puts("BKE_nlastrips_has_space() error... start and end arguments swapped"); + SWAP(float, start, end); + } + + /* loop over NLA strips checking for any overlaps with this area... */ + for (strip= strips->first; strip; strip= strip->next) { + /* if start frame of strip is past the target end-frame, that means that + * we've gone past the window we need to check for, so things are fine + */ + if (strip->start > end) + return 1; + + /* if the end of the strip is greater than either of the boundaries, the range + * must fall within the extents of the strip + */ + if ((strip->end > start) || (strip->end > end)) + return 0; + } + + /* if we are still here, we haven't encountered any overlapping strips */ + return 1; +} + +/* Rearrange the strips in the track so that they are always in order + * (usually only needed after a strip has been moved) + */ +void BKE_nlastrips_sort_strips (ListBase *strips) +{ + ListBase tmp = {NULL, NULL}; + NlaStrip *strip, *sstrip; + + /* sanity checks */ + if ELEM(NULL, strips, strips->first) + return; + + /* we simply perform insertion sort on this list, since it is assumed that per track, + * there are only likely to be at most 5-10 strips + */ + for (strip= strips->first; strip; strip= strip->next) { + short not_added = 1; + + /* remove this strip from the list, and add it to the new list, searching from the end of + * the list, assuming that the lists are in order + */ + BLI_remlink(strips, strip); + + for (sstrip= tmp.last; not_added && sstrip; sstrip= sstrip->prev) { + /* check if add after */ + if (sstrip->end < strip->start) { + BLI_insertlinkafter(&tmp, sstrip, strip); + not_added= 0; + break; + } + } + + /* add before first? */ + if (not_added) + BLI_addhead(&tmp, strip); + } + + /* reassign the start and end points of the strips */ + strips->first= tmp.first; + strips->last= tmp.last; +} + +/* Add the given NLA-Strip to the given list of strips, assuming that it + * isn't currently a member of another list + */ +short BKE_nlastrips_add_strip (ListBase *strips, NlaStrip *strip) +{ + NlaStrip *ns; + short not_added = 1; + + /* sanity checks */ + if ELEM(NULL, strips, strip) + return 0; + + /* check if any space to add */ + if (BKE_nlastrips_has_space(strips, strip->start, strip->end)==0) + return 0; + + /* find the right place to add the strip to the nominated track */ + for (ns= strips->first; ns; ns= ns->next) { + /* if current strip occurs after the new strip, add it before */ + if (ns->start > strip->end) { + BLI_insertlinkbefore(strips, ns, strip); + not_added= 0; + break; + } + } + if (not_added) { + /* just add to the end of the list of the strips then... */ + BLI_addtail(strips, strip); + } + + /* added... */ + return 1; +} + /* NLA-Tracks ---------------------------------------- */ /* Find the active NLA-track for the given stack */ @@ -560,36 +689,20 @@ void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) nlt_a->flag |= NLATRACK_ACTIVE; } -/* Check if there is any space in the last track to add the given strip */ + +/* Check if there is any space in the given track to add a strip of the given length */ short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) { - NlaStrip *strip; - /* sanity checks */ if ((nlt == NULL) || IS_EQ(start, end)) return 0; if (start > end) { - puts("BKE_nlatrack_has_space error... start and end arguments swapped"); + puts("BKE_nlatrack_has_space() error... start and end arguments swapped"); SWAP(float, start, end); } - /* loop over NLA strips checking for any overlaps with this area... */ - for (strip= nlt->strips.first; strip; strip= strip->next) { - /* if start frame of strip is past the target end-frame, that means that - * we've gone past the window we need to check for, so things are fine - */ - if (strip->start > end) - return 1; - - /* if the end of the strip is greater than either of the boundaries, the range - * must fall within the extents of the strip - */ - if ((strip->end > start) || (strip->end > end)) - return 0; - } - - /* if we are still here, we haven't encountered any overlapping strips */ - return 1; + /* check if there's any space left in the track for a strip of the given length */ + return BKE_nlastrips_has_space(&nlt->strips, start, end); } /* Rearrange the strips in the track so that they are always in order @@ -597,41 +710,12 @@ short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) */ void BKE_nlatrack_sort_strips (NlaTrack *nlt) { - ListBase tmp = {NULL, NULL}; - NlaStrip *strip, *sstrip; - /* sanity checks */ if ELEM(NULL, nlt, nlt->strips.first) return; - - /* we simply perform insertion sort on this list, since it is assumed that per track, - * there are only likely to be at most 5-10 strips - */ - for (strip= nlt->strips.first; strip; strip= strip->next) { - short not_added = 1; - - /* remove this strip from the list, and add it to the new list, searching from the end of - * the list, assuming that the lists are in order - */ - BLI_remlink(&nlt->strips, strip); - - for (sstrip= tmp.last; not_added && sstrip; sstrip= sstrip->prev) { - /* check if add after */ - if (sstrip->end < strip->start) { - BLI_insertlinkafter(&tmp, sstrip, strip); - not_added= 0; - break; - } - } - - /* add before first? */ - if (not_added) - BLI_addhead(&tmp, strip); - } - /* reassign the start and end points of the strips */ - nlt->strips.first= tmp.first; - nlt->strips.last= tmp.last; + /* sort the strips with a more generic function */ + BKE_nlastrips_sort_strips(&nlt->strips); } /* Add the given NLA-Strip to the given NLA-Track, assuming that it @@ -639,33 +723,12 @@ void BKE_nlatrack_sort_strips (NlaTrack *nlt) */ short BKE_nlatrack_add_strip (NlaTrack *nlt, NlaStrip *strip) { - NlaStrip *ns; - short not_added = 1; - /* sanity checks */ if ELEM(NULL, nlt, strip) return 0; - /* check if any space to add */ - if (BKE_nlatrack_has_space(nlt, strip->start, strip->end)==0) - return 0; - - /* find the right place to add the strip to the nominated track */ - for (ns= nlt->strips.first; ns; ns= ns->next) { - /* if current strip occurs after the new strip, add it before */ - if (ns->start > strip->end) { - BLI_insertlinkbefore(&nlt->strips, ns, strip); - not_added= 0; - break; - } - } - if (not_added) { - /* just add to the end of the list of the strips then... */ - BLI_addtail(&nlt->strips, strip); - } - - /* added... */ - return 1; + /* try to add the strip to the track using a more generic function */ + return BKE_nlastrips_add_strip(&nlt->strips, strip); } /* NLA Strips -------------------------------------- */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index beebf58b6c0..956c8e0042e 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1826,18 +1826,48 @@ static void direct_link_action(FileData *fd, bAction *act) } } - -static void lib_link_nladata (FileData *fd, ID *id, ListBase *list) +static void lib_link_nladata_strips(FileData *fd, ID *id, ListBase *list) { - NlaTrack *nlt; NlaStrip *strip; - /* we only acare about the NLA strips inside the tracks */ + for (strip= list->first; strip; strip= strip->next) { + /* check strip's children */ + lib_link_nladata_strips(fd, id, &strip->strips); + + /* reassign the counted-reference to action */ + strip->act = newlibadr_us(fd, id->lib, strip->act); + } +} + +static void lib_link_nladata(FileData *fd, ID *id, ListBase *list) +{ + NlaTrack *nlt; + + /* we only care about the NLA strips inside the tracks */ for (nlt= list->first; nlt; nlt= nlt->next) { - for (strip= nlt->strips.first; strip; strip= strip->next) { - /* reassign the counted-reference to action */ - strip->act = newlibadr_us(fd, id->lib, strip->act); - } + lib_link_nladata_strips(fd, id, &nlt->strips); + } +} + +/* This handles Animato NLA-Strips linking + * NOTE: this assumes that link_list has already been called on the list + */ +static void direct_link_nladata_strips(FileData *fd, ListBase *list) +{ + NlaStrip *strip; + + for (strip= list->first; strip; strip= strip->next) { + /* strip's child strips */ + link_list(fd, &strip->strips); + direct_link_nladata_strips(fd, &strip->strips); + + /* strip's F-Curves */ + link_list(fd, &strip->fcurves); + direct_link_fcurves(fd, &strip->fcurves); + + /* strip's F-Modifiers */ + link_list(fd, &strip->modifiers); + direct_link_fcurves(fd, &strip->modifiers); } } @@ -1845,22 +1875,13 @@ static void lib_link_nladata (FileData *fd, ID *id, ListBase *list) static void direct_link_nladata(FileData *fd, ListBase *list) { NlaTrack *nlt; - NlaStrip *strip; for (nlt= list->first; nlt; nlt= nlt->next) { /* relink list of strips */ link_list(fd, &nlt->strips); /* relink strip data */ - for (strip= nlt->strips.first; strip; strip= strip->next) { - /* strip's F-Curves */ - link_list(fd, &strip->fcurves); - direct_link_fcurves(fd, &strip->fcurves); - - /* strip's F-Modifiers */ - link_list(fd, &strip->modifiers); - direct_link_fcurves(fd, &strip->modifiers); - } + direct_link_nladata_strips(fd, &nlt->strips); } } @@ -9560,11 +9581,23 @@ static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list) } } +static void expand_animdata_nlastrips(FileData *fd, Main *mainvar, ListBase *list) +{ + NlaStrip *strip; + + for (strip= list->first; strip; strip= strip->next) { + /* check child strips */ + expand_animdata_nlastrips(fd, mainvar, &strip->strips); + + /* relink referenced action */ + expand_doit(fd, mainvar, strip->act); + } +} + static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) { FCurve *fcd; NlaTrack *nlt; - NlaStrip *strip; /* own action */ expand_doit(fd, mainvar, adt->action); @@ -9580,10 +9613,8 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) } /* nla-data - referenced actions */ - for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { - for (strip= nlt->strips.first; strip; strip= strip->next) - expand_doit(fd, mainvar, strip->act); - } + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) + expand_animdata_nlastrips(fd, mainvar, &nlt->strips); } static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 80d1d78257b..bfdd89e38b1 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -916,26 +916,34 @@ static void write_keyingsets(WriteData *wd, ListBase *list) } } +static void write_nlastrips(WriteData *wd, ListBase *strips) +{ + NlaStrip *strip; + + for (strip= strips->first; strip; strip= strip->next) { + /* write the strip first */ + writestruct(wd, DATA, "NlaStrip", 1, strip); + + /* write the strip's F-Curves and modifiers */ + write_fcurves(wd, &strip->fcurves); + write_fmodifiers(wd, &strip->modifiers); + + /* write the strip's children */ + write_nlastrips(wd, &strip->strips); + } +} + static void write_nladata(WriteData *wd, ListBase *nlabase) { NlaTrack *nlt; - NlaStrip *strip; /* write all the tracks */ for (nlt= nlabase->first; nlt; nlt= nlt->next) { /* write the track first */ writestruct(wd, DATA, "NlaTrack", 1, nlt); - for (strip= nlt->strips.first; strip; strip= strip->next) { - /* write the strip first */ - writestruct(wd, DATA, "NlaStrip", 1, strip); - - /* write the strip's F-Curves and modifiers */ - write_fcurves(wd, &strip->fcurves); - write_fmodifiers(wd, &strip->modifiers); - - // TODO write the remaps - } + /* write the track's strips */ + write_nlastrips(wd, &nlt->strips); } } diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 10b25beddff..e95d0b1a50a 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -734,8 +734,6 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *op) bAnimListElem *ale; int filter; - BeztEditData bed; - /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; @@ -744,9 +742,6 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* init the editing data */ - memset(&bed, 0, sizeof(BeztEditData)); - /* since we're potentially moving strips from lower tracks to higher tracks, we should * loop over the tracks in reverse order to avoid moving earlier strips up multiple tracks */ @@ -811,8 +806,6 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *op) bAnimListElem *ale; int filter; - BeztEditData bed; - /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; @@ -821,9 +814,6 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* init the editing data */ - memset(&bed, 0, sizeof(BeztEditData)); - /* loop through the tracks in normal order, since we're pushing strips down, * strips won't get operated on twice */ @@ -1037,6 +1027,116 @@ void NLA_OT_clear_scale (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ******************** Snap Strips Operator ************************** */ +/* Moves the start-point of the selected strips to the specified places */ + +/* defines for snap keyframes tool */ +EnumPropertyItem prop_nlaedit_snap_types[] = { + {NLAEDIT_SNAP_CFRA, "CFRA", 0, "Current frame", ""}, + {NLAEDIT_SNAP_NEAREST_FRAME, "NEAREST_FRAME", 0, "Nearest Frame", ""}, // XXX as single entry? + {NLAEDIT_SNAP_NEAREST_SECOND, "NEAREST_SECOND", 0, "Nearest Second", ""}, // XXX as single entry? + {NLAEDIT_SNAP_NEAREST_MARKER, "NEAREST_MARKER", 0, "Nearest Marker", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int nlaedit_snap_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + Scene *scene= ac.scene; + int mode = RNA_enum_get(op->ptr, "type"); + const float secf = (float)FPS; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* since we may add tracks, perform this in reverse order */ + for (ale= anim_data.last; ale; ale= ale->prev) { + ListBase tmp_strips = {NULL, NULL}; + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip, *stripn; + + /* first pass: move all selected strips to a separate buffer, and apply snapping to them */ + for (strip= nlt->strips.first; strip; strip= stripn) { + stripn= strip->next; + + if (strip->flag & NLASTRIP_FLAG_SELECT) { + float start, end; + + /* get the existing end-points */ + start= strip->start; + end= strip->end; + + /* calculate new start position based on snapping mode */ + switch (mode) { + case NLAEDIT_SNAP_CFRA: /* to current frame */ + strip->start= (float)CFRA; + break; + case NLAEDIT_SNAP_NEAREST_FRAME: /* to nearest frame */ + strip->start= (float)(floor(start+0.5)); + break; + case NLAEDIT_SNAP_NEAREST_SECOND: /* to nearest second */ + strip->start= ((float)floor(start/secf + 0.5f) * secf); + break; + case NLAEDIT_SNAP_NEAREST_MARKER: /* to nearest marker */ + strip->start= (float)ED_markers_find_nearest_marker_time(ac.markers, start); + break; + default: /* just in case... no snapping */ + strip->start= start; + break; + } + + /* get new endpoint based on start-point (and old length) */ + strip->end= strip->start + (end - start); + + /* remove strip from track, and add to the temp buffer */ + BLI_remlink(&nlt->strips, strip); + BLI_addtail(&tmp_strips, strip); + } + } + + // TODO: finish this... + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_snap (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Snap Strips"; + ot->idname= "NLA_OT_snap"; + ot->description= "Move start of strips to specified time."; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= nlaedit_snap_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", prop_nlaedit_snap_types, 0, "Type", ""); +} + /* *********************************************** */ /* NLA Modifiers */ diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 5921b8a75ce..422686bb424 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -87,6 +87,17 @@ void NLA_OT_click_select(wmOperatorType *ot); /* **************************************** */ /* nla_edit.c */ +/* defines for snap strips + */ +enum { + NLAEDIT_SNAP_CFRA = 1, + NLAEDIT_SNAP_NEAREST_FRAME, + NLAEDIT_SNAP_NEAREST_SECOND, + NLAEDIT_SNAP_NEAREST_MARKER, +} eNlaEdit_Snap_Mode; + +/* --- */ + void NLA_OT_tweakmode_enter(wmOperatorType *ot); void NLA_OT_tweakmode_exit(wmOperatorType *ot); diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index a90fad983c4..a8220099a11 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -438,11 +438,13 @@ typedef struct AnimMapper { typedef struct NlaStrip { struct NlaStrip *next, *prev; + ListBase strips; /* 'Child' strips (used for 'meta' strips) */ bAction *act; /* Action that is referenced by this strip (strip is 'user' of the action) */ AnimMapper *remap; /* Remapping info this strip (for tweaking correspondance of action with context) */ ListBase fcurves; /* F-Curves for controlling this strip's influence and timing */ // TODO: move out? ListBase modifiers; /* F-Curve modifiers to be applied to the entire strip's referenced F-Curves */ + float influence; /* Influence of strip */ float strip_time; /* Current 'time' within action being used (automatically evaluated, but can be overridden) */ @@ -505,6 +507,11 @@ enum { NLASTRIP_FLAG_MUTED = (1<<12), /* NLA strip length is synced to the length of the referenced action */ NLASTRIP_FLAG_SYNC_LENGTH = (1<<13), + + /* temporary editing flags */ + /* NLA-Strip is really just a temporary meta used to facilitate easier transform code */ + NLASTRIP_FLAG_TEMP_META = (1<<30), + NLASTRIP_FLAG_EDIT_TOUCHED = (1<<31), } eNlaStrip_Flag; /* NLA Strip Type */ @@ -513,6 +520,8 @@ enum { NLASTRIP_TYPE_CLIP = 0, /* 'transition' - blends between the adjacent strips */ NLASTRIP_TYPE_TRANSITION, + /* 'meta' - a strip which acts as a container for a few others */ + NLASTRIP_TYPE_META, } eNlaStrip_Type; /* NLA Tracks ------------------------------------- */ From 158657026122d3b169f1bea12a69ff8eb16bbe04 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 6 Jul 2009 11:06:34 +0000 Subject: [PATCH 126/512] NLA SoC: More work on Meta-Strips * Added several API functions for Meta-Strips editing. One of these (flush transform) still needs a few tweaks before it does its job well enough for all cases. * Meta strips are now drawn with a purple-ish colour. The start/end points of the strips they encompass are shown with lines along the length of the strips, with lines starting from the top indicating start-points and lines starting from the bottom indicating end-points. * Meta strips can be made (i.e. strips can be assigned to meta-strips) by selecting some strips and pressing Shift-G. Meta strips can be removed by selecting some meta-strips and pressing Alt-G. * Strips can now be 'snapped' to start from: the current frame, the nearest frame, the nearest second, or the nearest marker; using the Shift-S hotkey. 'Islands' of adjacent selected strips occurring in the same track are moved together as a single strip so that the start-point of the first strip is on the sepcified time, but all the relative lengths of strips stay the same. Internally, temporary meta-strips are created to facilitate this. --- source/blender/blenkernel/BKE_nla.h | 6 + source/blender/blenkernel/intern/nla.c | 193 ++++++++++++++++++ source/blender/editors/space_nla/nla_draw.c | 39 +++- source/blender/editors/space_nla/nla_edit.c | 148 +++++++++++++- source/blender/editors/space_nla/nla_header.c | 16 ++ source/blender/editors/space_nla/nla_intern.h | 5 + source/blender/editors/space_nla/nla_ops.c | 12 ++ source/blender/makesdna/DNA_anim_types.h | 4 +- source/blender/makesrna/intern/rna_nla.c | 1 + 9 files changed, 415 insertions(+), 9 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index efa0591bd53..3fcd799310e 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -58,6 +58,12 @@ void BKE_nlastrips_sort_strips(ListBase *strips); short BKE_nlastrips_add_strip(ListBase *strips, struct NlaStrip *strip); + +void BKE_nlastrips_make_metas(ListBase *strips, short temp); +void BKE_nlastrips_clear_metas(ListBase *strips, short onlySel, short onlyTemp); +short BKE_nlameta_add_strip(struct NlaStrip *mstrip, struct NlaStrip *strip); +void BKE_nlameta_flush_transforms(struct NlaStrip *mstrip); + /* ............ */ struct NlaTrack *BKE_nlatrack_find_active(ListBase *tracks); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index d01fa2c1965..715f99c820f 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -616,6 +616,199 @@ short BKE_nlastrips_add_strip (ListBase *strips, NlaStrip *strip) return 1; } + +/* Meta-Strips ------------------------------------ */ + +/* Convert 'islands' (i.e. continuous string of) selected strips to be + * contained within 'Meta-Strips' which act as strips which contain strips. + * temp: are the meta-strips to be created 'temporary' ones used for transforms? + */ +void BKE_nlastrips_make_metas (ListBase *strips, short temp) +{ + NlaStrip *mstrip = NULL; + NlaStrip *strip, *stripn; + + /* sanity checks */ + if ELEM(NULL, strips, strips->first) + return; + + /* group all continuous chains of selected strips into meta-strips */ + for (strip= strips->first; strip; strip= stripn) { + stripn= strip->next; + + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* if there is an existing meta-strip, add this strip to it, otherwise, create a new one */ + if (mstrip == NULL) { + /* add a new meta-strip, and add it before the current strip that it will replace... */ + mstrip= MEM_callocN(sizeof(NlaStrip), "Meta-NlaStrip"); + mstrip->type = NLASTRIP_TYPE_META; + BLI_insertlinkbefore(strips, strip, mstrip); + + /* set flags */ + mstrip->flag = NLASTRIP_FLAG_SELECT; + + /* set temp flag if appropriate (i.e. for transform-type editing) */ + if (temp) + mstrip->flag |= NLASTRIP_FLAG_TEMP_META; + + /* make its start frame be set to the start frame of the current strip */ + mstrip->start= strip->start; + } + + /* remove the selected strips from the track, and add to the meta */ + BLI_remlink(strips, strip); + BLI_addtail(&mstrip->strips, strip); + + /* expand the meta's dimensions to include the newly added strip- i.e. its last frame */ + mstrip->end= strip->end; + } + else { + /* current strip wasn't selected, so the end of 'island' of selected strips has been reached, + * so stop adding strips to the current meta + */ + mstrip= NULL; + } + } +} + +/* Remove meta-strips (i.e. flatten the list of strips) from the top-level of the list of strips + * sel: only consider selected meta-strips, otherwise all meta-strips are removed + * onlyTemp: only remove the 'temporary' meta-strips used for transforms + */ +void BKE_nlastrips_clear_metas (ListBase *strips, short onlySel, short onlyTemp) +{ + NlaStrip *strip, *stripn; + + /* sanity checks */ + if ELEM(NULL, strips, strips->first) + return; + + /* remove meta-strips fitting the criteria of the arguments */ + for (strip= strips->first; strip; strip= stripn) { + stripn= strip->next; + + /* check if strip is a meta-strip */ + if (strip->type == NLASTRIP_TYPE_META) { + /* if check if selection and 'temporary-only' considerations are met */ + if ((onlySel==0) || (strip->flag & NLASTRIP_FLAG_SELECT)) { + if ((!onlyTemp) || (strip->flag & NLASTRIP_FLAG_TEMP_META)) { + NlaStrip *cs, *csn; + + /* move each one of the meta-strip's children before the meta-strip + * in the list of strips after unlinking them from the meta-strip + */ + for (cs= strip->strips.first; cs; cs= csn) { + csn= cs->next; + BLI_remlink(&strip->strips, cs); + BLI_insertlinkbefore(strips, strip, cs); + } + + /* free the meta-strip now */ + BLI_freelinkN(strips, strip); + } + } + } + } +} + +/* Add the given NLA-Strip to the given Meta-Strip, assuming that the + * strip isn't attached to anyy list of strips + */ +short BKE_nlameta_add_strip (NlaStrip *mstrip, NlaStrip *strip) +{ + /* sanity checks */ + if ELEM(NULL, mstrip, strip) + return 0; + + /* firstly, check if the meta-strip has space for this */ + if (BKE_nlastrips_has_space(&mstrip->strips, strip->start, strip->end) == 0) + return 0; + + /* check if this would need to be added to the ends of the meta, + * and subsequently, if the neighbouring strips allow us enough room + */ + if (strip->start < mstrip->start) { + /* check if strip to the left (if it exists) ends before the + * start of the strip we're trying to add + */ + if ((mstrip->prev == NULL) || (mstrip->prev->end <= strip->start)) { + /* add strip to start of meta's list, and expand dimensions */ + BLI_addhead(&mstrip->strips, strip); + mstrip->start= strip->start; + + return 1; + } + else /* failed... no room before */ + return 0; + } + else if (strip->end > mstrip->end) { + /* check if strip to the right (if it exists) starts before the + * end of the strip we're trying to add + */ + if ((mstrip->next == NULL) || (mstrip->next->start >= strip->end)) { + /* add strip to end of meta's list, and expand dimensions */ + BLI_addtail(&mstrip->strips, strip); + mstrip->end= strip->end; + + return 1; + } + else /* failed... no room after */ + return 0; + } + else { + /* just try to add to the meta-strip (no dimension changes needed) */ + return BKE_nlastrips_add_strip(&mstrip->strips, strip); + } +} + +/* Adjust the settings of NLA-Strips contained within a Meta-Strip (recursively), + * until the Meta-Strips children all fit within the Meta-Strip's new dimensions + */ +void BKE_nlameta_flush_transforms (NlaStrip *mstrip) +{ + NlaStrip *strip; + float oStart, oEnd, offset; + + /* sanity checks + * - strip must exist + * - strip must be a meta-strip with some contents + */ + if ELEM(NULL, mstrip, mstrip->strips.first) + return; + if (mstrip->type != NLASTRIP_TYPE_META) + return; + + /* get the original start/end points, and calculate the start-frame offset + * - these are simply the start/end frames of the child strips, + * since we assume they weren't transformed yet + */ + oStart= ((NlaStrip *)mstrip->strips.first)->start; + oEnd= ((NlaStrip *)mstrip->strips.last)->end; + offset= mstrip->start - oStart; + + /* optimisation: + * don't flush if nothing changed yet + * TODO: maybe we need a flag to say always flush? + */ + if (IS_EQ(oStart, mstrip->start) && IS_EQ(oEnd, mstrip->end)) + return; + + /* for each child-strip, calculate new start/end points based on this new info */ + for (strip= mstrip->strips.first; strip; strip= strip->next) { + //PointerRNA strip_ptr; + + /* firstly, just apply the changes in offset to both ends of the strip */ + strip->start += offset; + strip->end += offset; + + /* now, we need to fix the endpoint to take into account scaling */ + // TODO.. + + /* finally, make sure the strip's children (if it is a meta-itself), get updated */ + BKE_nlameta_flush_transforms(strip); + } +} + /* NLA-Tracks ---------------------------------------- */ /* Find the active NLA-track for the given stack */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index ab33434077e..e31aebf0155 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -176,6 +176,23 @@ static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float co color[2]= 0.19f; } } + else if (strip->type == NLASTRIP_TYPE_META) { + /* Meta Clip */ + 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; + } + else { + /* normal, unselected strip - use (hardly noticable) dark purple tinge */ + // FIXME: hardcoded temp-hack colors + color[0]= 0.20f; + color[1]= 0.15f; + color[2]= 0.26f; + } + } else { /* Action Clip (default/normal type of strip) */ if ((strip->flag & NLASTRIP_FLAG_ACTIVE) && (adt && (adt->flag & ADT_NLA_EDIT_ON))) { @@ -293,7 +310,7 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 /* draw outline */ gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1); - /* if action-clip strip, draw lines delimiting repeats too (in the same colour */ + /* if action-clip strip, draw lines delimiting repeats too (in the same color as outline) */ if ((strip->type == NLASTRIP_TYPE_CLIP) && IS_EQ(strip->repeat, 1.0f)==0) { float repeatLen = (strip->actend - strip->actstart) * strip->scale; int i; @@ -309,6 +326,26 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 fdrawline(repeatPos, yminc, repeatPos, ymaxc); } } + /* or if meta-strip, draw lines delimiting extents of sub-strips (in same color as outline, if more than 1 exists) */ + else if ((strip->type == NLASTRIP_TYPE_META) && (strip->strips.first != strip->strips.last)) { + NlaStrip *cs; + float y= (ymaxc-yminc)/2.0f + yminc; + + /* only draw first-level of child-strips, but don't draw any lines on the endpoints */ + for (cs= strip->strips.first; cs; cs= cs->next) { + /* draw start-line if not same as end of previous (and only if not the first strip) + * - on upper half of strip + */ + if ((cs->prev) && IS_EQ(cs->prev->end, cs->start)==0) + fdrawline(cs->start, y, cs->start, ymaxc); + + /* draw end-line if not the last strip + * - on lower half of strip + */ + if (cs->next) + fdrawline(cs->end, yminc, cs->end, y); + } + } /* reset linestyle */ setlinestyle(0); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index e95d0b1a50a..f7d4db17e2c 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -346,7 +346,6 @@ void NLA_OT_add_actionclip (wmOperatorType *ot) /* ******************** Add Transition Operator ***************************** */ /* Add a new transition strip between selected strips */ -/* add the specified action as new strip */ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) { bAnimContext ac; @@ -453,6 +452,113 @@ void NLA_OT_add_transition (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ******************** Add Meta-Strip Operator ***************************** */ +/* Add new meta-strips incorporating the selected strips */ + +/* add the specified action as new strip */ +static int nlaedit_add_meta_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each track, find pairs of strips to add transitions to */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + + /* create meta-strips from the continuous chains of selected strips */ + BKE_nlastrips_make_metas(&nlt->strips, 0); + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_add_meta (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Meta-Strips"; + ot->idname= "NLA_OT_add_meta"; + ot->description= "Add new meta-strips incorporating the selected strips."; + + /* api callbacks */ + ot->exec= nlaedit_add_meta_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ******************** Remove Meta-Strip Operator ***************************** */ +/* Separate out the strips held by the selected meta-strips */ + +static int nlaedit_remove_meta_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* for each track, find pairs of strips to add transitions to */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + + /* clear all selected meta-strips, regardless of whether they are temporary or not */ + BKE_nlastrips_clear_metas(&nlt->strips, 1, 0); + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_remove_meta (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Meta-Strips"; + ot->idname= "NLA_OT_remove_meta"; + ot->description= "Separate out the strips held by the selected meta-strips."; + + /* api callbacks */ + ot->exec= nlaedit_remove_meta_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************** Duplicate Strips Operator ************************** */ /* Duplicates the selected NLA-Strips, putting them on new tracks above the one * the originals were housed in. @@ -1047,9 +1153,9 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) bAnimListElem *ale; int filter; - Scene *scene= ac.scene; + Scene *scene; int mode = RNA_enum_get(op->ptr, "type"); - const float secf = (float)FPS; + float secf; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -1059,17 +1165,28 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + /* get some necessary vars */ + scene= ac.scene; + secf= (float)FPS; + /* since we may add tracks, perform this in reverse order */ for (ale= anim_data.last; ale; ale= ale->prev) { ListBase tmp_strips = {NULL, NULL}; + AnimData *adt= BKE_animdata_from_id(ale->id); NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip, *stripn; + NlaTrack *track; - /* first pass: move all selected strips to a separate buffer, and apply snapping to them */ + /* create meta-strips from the continuous chains of selected strips */ + BKE_nlastrips_make_metas(&nlt->strips, 1); + + /* apply the snapping to all the temp meta-strips, then put them in a separate list to be added + * back to the original only if they still fit + */ for (strip= nlt->strips.first; strip; strip= stripn) { stripn= strip->next; - if (strip->flag & NLASTRIP_FLAG_SELECT) { + if (strip->flag & NLASTRIP_FLAG_TEMP_META) { float start, end; /* get the existing end-points */ @@ -1098,13 +1215,32 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) /* get new endpoint based on start-point (and old length) */ strip->end= strip->start + (end - start); + /* apply transforms to meta-strip to its children */ + BKE_nlameta_flush_transforms(strip); + /* remove strip from track, and add to the temp buffer */ BLI_remlink(&nlt->strips, strip); BLI_addtail(&tmp_strips, strip); } } - // TODO: finish this... + /* try adding each meta-strip back to the track one at a time, to make sure they'll fit */ + for (strip= tmp_strips.first; strip; strip= stripn) { + stripn= strip->next; + + /* remove from temp-strips list */ + BLI_remlink(&tmp_strips, strip); + + /* in case there's no space in the current track, try adding */ + if (BKE_nlatrack_add_strip(nlt, strip) == 0) { + /* need to add a new track above the current one */ + track= add_nlatrack(adt, nlt); + BKE_nlatrack_add_strip(track, strip); + } + } + + /* remove the meta-strips now that we're done */ + BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); } /* free temp data */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index fc6db76ba65..9b9b21629cc 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -70,6 +70,8 @@ #include "ED_markers.h" +#include "nla_intern.h" + /* button events */ enum { B_REDR = 0, @@ -142,9 +144,18 @@ static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unus uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); } +static void nla_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_CFRA); + uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_FRAME); + uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_SECOND); + uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_MARKER); +} + static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) { uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu); + uiItemMenuF(layout, "Snap", 0, nla_edit_snapmenu); uiItemS(layout); @@ -173,6 +184,11 @@ static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); + uiItemO(layout, NULL, 0, "NLA_OT_add_meta"); + uiItemO(layout, NULL, 0, "NLA_OT_remove_meta"); + + uiItemS(layout); + uiItemO(layout, NULL, 0, "NLA_OT_add_tracks"); uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_add_tracks", "above_selected", 1); } diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 422686bb424..4391a019207 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -106,6 +106,9 @@ void NLA_OT_tweakmode_exit(wmOperatorType *ot); void NLA_OT_add_actionclip(wmOperatorType *ot); void NLA_OT_add_transition(wmOperatorType *ot); +void NLA_OT_add_meta(wmOperatorType *ot); +void NLA_OT_remove_meta(wmOperatorType *ot); + void NLA_OT_duplicate(wmOperatorType *ot); void NLA_OT_delete(wmOperatorType *ot); void NLA_OT_split(wmOperatorType *ot); @@ -116,6 +119,8 @@ void NLA_OT_move_down(wmOperatorType *ot); void NLA_OT_apply_scale(wmOperatorType *ot); void NLA_OT_clear_scale(wmOperatorType *ot); +void NLA_OT_snap(wmOperatorType *ot); + void NLA_OT_fmodifier_add(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 7caab02d6a0..25fd8db668c 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -146,6 +146,9 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_add_actionclip); WM_operatortype_append(NLA_OT_add_transition); + WM_operatortype_append(NLA_OT_add_meta); + WM_operatortype_append(NLA_OT_remove_meta); + WM_operatortype_append(NLA_OT_duplicate); WM_operatortype_append(NLA_OT_delete); WM_operatortype_append(NLA_OT_split); @@ -156,6 +159,8 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_apply_scale); WM_operatortype_append(NLA_OT_clear_scale); + WM_operatortype_append(NLA_OT_snap); + WM_operatortype_append(NLA_OT_fmodifier_add); } @@ -236,6 +241,10 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* add strips */ WM_keymap_add_item(keymap, "NLA_OT_add_actionclip", AKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "NLA_OT_add_transition", TKEY, KM_PRESS, KM_SHIFT, 0); + + /* meta-strips */ + WM_keymap_add_item(keymap, "NLA_OT_add_meta", GKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NLA_OT_remove_meta", GKEY, KM_PRESS, KM_ALT, 0); /* duplicate */ WM_keymap_add_item(keymap, "NLA_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); @@ -257,6 +266,9 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* clear scale */ WM_keymap_add_item(keymap, "NLA_OT_clear_scale", SKEY, KM_PRESS, KM_ALT, 0); + /* snap */ + WM_keymap_add_item(keymap, "NLA_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); + /* add f-modifier */ WM_keymap_add_item(keymap, "NLA_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index a8220099a11..cb9dc8f0bc7 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -510,8 +510,8 @@ enum { /* temporary editing flags */ /* NLA-Strip is really just a temporary meta used to facilitate easier transform code */ - NLASTRIP_FLAG_TEMP_META = (1<<30), - NLASTRIP_FLAG_EDIT_TOUCHED = (1<<31), + NLASTRIP_FLAG_TEMP_META = (1<<14), + NLASTRIP_FLAG_EDIT_TOUCHED = (1<<15), } eNlaStrip_Flag; /* NLA Strip Type */ diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index dfa496fd8f3..28a422dd601 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -207,6 +207,7 @@ void rna_def_nlastrip(BlenderRNA *brna) static EnumPropertyItem prop_type_items[] = { {NLASTRIP_TYPE_CLIP, "CLIP", 0, "Action Clip", "NLA Strip references some Action."}, {NLASTRIP_TYPE_TRANSITION, "TRANSITION", 0, "Transition", "NLA Strip 'transitions' between adjacent strips."}, + {NLASTRIP_TYPE_META, "META", 0, "Strip Container", "NLA Strip acts as a container for adjacent strips."}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_blend_items[] = { {NLASTRIP_MODE_BLEND, "BLEND", 0, "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, From 69df12a74de953224256f68e8fa9a88f73554cae Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 6 Jul 2009 11:23:22 +0000 Subject: [PATCH 127/512] fix for a bug reported by j michaelson, empty nodes were not exported, also noticed files were invalid if there were no meshes or surfaces. --- release/scripts/export_map.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/release/scripts/export_map.py b/release/scripts/export_map.py index 7df78fc3c9a..ab32f6d5ff5 100644 --- a/release/scripts/export_map.py +++ b/release/scripts/export_map.py @@ -2,14 +2,14 @@ """ Name: 'Quake 3 (.map)' -Blender: 243 +Blender: 249 Group: 'Export' Tooltip: 'Export to Quake map format' """ __author__ = 'Campbell Barton' -__version__ = '0.1' -__email__ = "cbarton@metavr.com" +__version__ = '0.1a' +__email__ = "ideasman42@gmail.com" __bpydoc__ = """\ This script Exports a Quake 3 map format. @@ -234,7 +234,7 @@ def write_node_map(file, ob): as a MAP node as long as it has the property name - classname returns True/False based on weather a node was written ''' - props= [(p.name, p.data) for p in ob.properties] + props= [(p.name, p.data) for p in ob.game_properties] IS_MAP_NODE= False for name, value in props: @@ -287,7 +287,7 @@ def export_map(filepath): TOTBRUSH= TOTLAMP= TOTNODE= 0 for ob in Object.GetSelected(): - type= ob.getType() + type= ob.type if type == 'Mesh': obs_mesh.append(ob) elif type == 'Surf': obs_surf.append(ob) elif type == 'Lamp': obs_lamp.append(ob) @@ -406,9 +406,10 @@ NULL else: print "NOT EXPORTING PATCH", surf_name, u,v, 'Unsupported' - - file.write('}\n') # end worldspan + + if obs_mesh or obs_surf: + file.write('}\n') # end worldspan print '\twriting lamps' From f98c3ed70b86d12945078c288c2bd3288a297841 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 6 Jul 2009 12:24:09 +0000 Subject: [PATCH 128/512] NLA SoC: Fixes for Meta-Strips and Editing * Split strip (YKEY) now plays nicely with Transitions and Metas. Meta strips get split up into their child strips, while transitions are ignored. * Wrapped Meta_Strip->strips in RNA * Bugfixes in Meta-strip API functions to silence some runtime-errors... --- source/blender/blenkernel/BKE_nla.h | 1 + source/blender/blenkernel/intern/nla.c | 39 ++++++--- source/blender/editors/space_nla/nla_edit.c | 96 +++++++++++++-------- source/blender/makesrna/intern/rna_nla.c | 7 +- 4 files changed, 95 insertions(+), 48 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 3fcd799310e..5cb967c9c59 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -61,6 +61,7 @@ short BKE_nlastrips_add_strip(ListBase *strips, struct NlaStrip *strip); void BKE_nlastrips_make_metas(ListBase *strips, short temp); void BKE_nlastrips_clear_metas(ListBase *strips, short onlySel, short onlyTemp); +void BKE_nlastrips_clear_metastrip(ListBase *strips, struct NlaStrip *strip); short BKE_nlameta_add_strip(struct NlaStrip *mstrip, struct NlaStrip *strip); void BKE_nlameta_flush_transforms(struct NlaStrip *mstrip); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 715f99c820f..a83fa0abe1e 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -650,6 +650,9 @@ void BKE_nlastrips_make_metas (ListBase *strips, short temp) /* set temp flag if appropriate (i.e. for transform-type editing) */ if (temp) mstrip->flag |= NLASTRIP_FLAG_TEMP_META; + + /* set default repeat/scale values to prevent warnings */ + mstrip->repeat= mstrip->scale= 1.0f; /* make its start frame be set to the start frame of the current strip */ mstrip->start= strip->start; @@ -671,6 +674,28 @@ void BKE_nlastrips_make_metas (ListBase *strips, short temp) } } +/* Split a meta-strip into a set of normal strips */ +void BKE_nlastrips_clear_metastrip (ListBase *strips, NlaStrip *strip) +{ + NlaStrip *cs, *csn; + + /* sanity check */ + if ELEM(NULL, strips, strip) + return; + + /* move each one of the meta-strip's children before the meta-strip + * in the list of strips after unlinking them from the meta-strip + */ + for (cs= strip->strips.first; cs; cs= csn) { + csn= cs->next; + BLI_remlink(&strip->strips, cs); + BLI_insertlinkbefore(strips, strip, cs); + } + + /* free the meta-strip now */ + BLI_freelinkN(strips, strip); +} + /* Remove meta-strips (i.e. flatten the list of strips) from the top-level of the list of strips * sel: only consider selected meta-strips, otherwise all meta-strips are removed * onlyTemp: only remove the 'temporary' meta-strips used for transforms @@ -692,19 +717,7 @@ void BKE_nlastrips_clear_metas (ListBase *strips, short onlySel, short onlyTemp) /* if check if selection and 'temporary-only' considerations are met */ if ((onlySel==0) || (strip->flag & NLASTRIP_FLAG_SELECT)) { if ((!onlyTemp) || (strip->flag & NLASTRIP_FLAG_TEMP_META)) { - NlaStrip *cs, *csn; - - /* move each one of the meta-strip's children before the meta-strip - * in the list of strips after unlinking them from the meta-strip - */ - for (cs= strip->strips.first; cs; cs= csn) { - csn= cs->next; - BLI_remlink(&strip->strips, cs); - BLI_insertlinkbefore(strips, strip, cs); - } - - /* free the meta-strip now */ - BLI_freelinkN(strips, strip); + BKE_nlastrips_clear_metastrip(strips, strip); } } } diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index f7d4db17e2c..676d0aac1b1 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -736,6 +736,55 @@ void NLA_OT_delete (wmOperatorType *ot) // - multiple splits // - variable-length splits? +/* split a given Action-Clip strip */ +static void nlaedit_split_strip_actclip (NlaTrack *nlt, NlaStrip *strip) +{ + NlaStrip *nstrip; + float midframe, midaframe, len; + + /* calculate the frames to do the splitting at */ + /* strip extents */ + len= strip->end - strip->start; + if (IS_EQ(len, 0.0f)) + return; + else + midframe= strip->start + (len / 2.0f); + + /* action range */ + len= strip->actend - strip->actstart; + if (IS_EQ(len, 0.0f)) + midaframe= strip->actend; + else + midaframe= strip->actstart + (len / 2.0f); + + /* make a copy (assume that this is possible) and append + * it immediately after the current strip + */ + nstrip= copy_nlastrip(strip); + BLI_insertlinkafter(&nlt->strips, strip, nstrip); + + /* set the endpoint of the first strip and the start of the new strip + * to the midframe values calculated above + */ + strip->end= midframe; + nstrip->start= midframe; + + strip->actend= midaframe; + nstrip->actstart= midaframe; + + /* clear the active flag from the copy */ + nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE; +} + +/* split a given Meta strip */ +static void nlaedit_split_strip_meta (NlaTrack *nlt, NlaStrip *strip) +{ + /* simply ungroup it for now... */ + BKE_nlastrips_clear_metastrip(&nlt->strips, strip); +} + +/* ----- */ + static int nlaedit_split_exec (bContext *C, wmOperator *op) { bAnimContext ac; @@ -755,47 +804,26 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* for each NLA-Track, split all selected strips into two strips */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - NlaStrip *strip, *nstrip, *next; + NlaStrip *strip, *next; for (strip= nlt->strips.first; strip; strip= next) { next= strip->next; /* if selected, split the strip at its midpoint */ if (strip->flag & NLASTRIP_FLAG_SELECT) { - float midframe, midaframe, len; - - /* calculate the frames to do the splitting at */ - /* strip extents */ - len= strip->end - strip->start; - if (IS_EQ(len, 0.0f)) - continue; - else - midframe= strip->start + (len / 2.0f); + /* splitting method depends on the type of strip */ + switch (strip->type) { + case NLASTRIP_TYPE_CLIP: /* action-clip */ + nlaedit_split_strip_actclip(nlt, strip); + break; + + case NLASTRIP_TYPE_META: /* meta-strips need special handling */ + nlaedit_split_strip_meta(nlt, strip); + break; - /* action range */ - len= strip->actend - strip->actstart; - if (IS_EQ(len, 0.0f)) - midaframe= strip->actend; - else - midaframe= strip->actstart + (len / 2.0f); - - /* make a copy (assume that this is possible) and append - * it immediately after the current strip - */ - nstrip= copy_nlastrip(strip); - BLI_insertlinkafter(&nlt->strips, strip, nstrip); - - /* set the endpoint of the first strip and the start of the new strip - * to the midframe values calculated above - */ - strip->end= midframe; - nstrip->start= midframe; - - strip->actend= midaframe; - nstrip->actstart= midaframe; - - /* clear the active flag from the copy */ - nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE; + default: /* for things like Transitions, do not split! */ + break; + } } } } diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 28a422dd601..dae1a611757 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -207,7 +207,7 @@ void rna_def_nlastrip(BlenderRNA *brna) static EnumPropertyItem prop_type_items[] = { {NLASTRIP_TYPE_CLIP, "CLIP", 0, "Action Clip", "NLA Strip references some Action."}, {NLASTRIP_TYPE_TRANSITION, "TRANSITION", 0, "Transition", "NLA Strip 'transitions' between adjacent strips."}, - {NLASTRIP_TYPE_META, "META", 0, "Strip Container", "NLA Strip acts as a container for adjacent strips."}, + {NLASTRIP_TYPE_META, "META", 0, "Meta", "NLA Strip acts as a container for adjacent strips."}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_blend_items[] = { {NLASTRIP_MODE_BLEND, "BLEND", 0, "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, @@ -308,6 +308,11 @@ void rna_def_nlastrip(BlenderRNA *brna) RNA_def_property_struct_type(prop, "FModifier"); RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting all the F-Curves in the referenced Action."); + /* Strip's Sub-Strips (for Meta-Strips) */ + prop= RNA_def_property(srna, "strips", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "NlaStrip"); + RNA_def_property_ui_text(prop, "NLA Strips", "NLA Strips that this strip acts as a container for (if it is of type Meta)."); + /* Settings - Values necessary for evaluation */ prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); From 905b1380054f42fe30b19fb37861057af4760e32 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 02:12:50 +0000 Subject: [PATCH 129/512] NLA SoC: Start of integration of Meta-strips in Transform * Chains of selected strips are now converted to meta-strips before transforms begin, and converted back afterwards. This simplifies the transform code needed in later stages... * Transform-flushing code for Meta-Strips should now work. There seems to be a little bit of numeric inaccuracy problems somewhere, as two strips which met at the same frame can get separated when scaling. * Meta-strips now draw with proper text identification * Snapping strips now properly clears meta-strips if a moved strip needs to be moved into a new track to be accomodated. * Fixed a filter used by a selection-operator. --- source/blender/blenkernel/intern/nla.c | 45 +++++++++++++++---- source/blender/editors/space_nla/nla_draw.c | 12 ++++- source/blender/editors/space_nla/nla_edit.c | 3 ++ source/blender/editors/space_nla/nla_select.c | 2 +- .../editors/transform/transform_conversions.c | 23 ++++++++++ .../editors/transform/transform_generics.c | 15 +++++++ 6 files changed, 89 insertions(+), 11 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index a83fa0abe1e..851a0d7b549 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -781,6 +781,8 @@ void BKE_nlameta_flush_transforms (NlaStrip *mstrip) { NlaStrip *strip; float oStart, oEnd, offset; + float oLen, nLen; + short scaleChanged= 0; /* sanity checks * - strip must exist @@ -806,16 +808,43 @@ void BKE_nlameta_flush_transforms (NlaStrip *mstrip) if (IS_EQ(oStart, mstrip->start) && IS_EQ(oEnd, mstrip->end)) return; + /* check if scale changed */ + oLen = oEnd - oStart; + nLen = mstrip->end - mstrip->start; + if (IS_EQ(nLen, oLen) == 0) + scaleChanged= 1; + /* for each child-strip, calculate new start/end points based on this new info */ for (strip= mstrip->strips.first; strip; strip= strip->next) { - //PointerRNA strip_ptr; - - /* firstly, just apply the changes in offset to both ends of the strip */ - strip->start += offset; - strip->end += offset; - - /* now, we need to fix the endpoint to take into account scaling */ - // TODO.. + if (scaleChanged) { + PointerRNA ptr; + float p1, p2, nStart, nEnd; + + /* compute positions of endpoints relative to old extents of strip */ + p1= (strip->start - oStart) / oLen; + p2= (strip->end - oStart) / oLen; + + /* compute the new strip endpoints using the proportions */ + nStart= (p1 * nLen) + mstrip->start; + nEnd= (p2 * nLen) + mstrip->start; + + /* firstly, apply the new positions manually, then apply using RNA + * - first time is to make sure no truncation errors from one endpoint not being + * set yet occur + * - second time is to make sure scale is computed properly... + */ + strip->start= nStart; + strip->end= nEnd; + + RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &ptr); + RNA_float_set(&ptr, "start_frame", nStart); + RNA_float_set(&ptr, "end_frame", nEnd); + } + else { + /* just apply the changes in offset to both ends of the strip */ + strip->start += offset; + strip->end += offset; + } /* finally, make sure the strip's children (if it is a meta-itself), get updated */ BKE_nlameta_flush_transforms(strip); diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index e31aebf0155..7b9f2faf08a 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -366,13 +366,21 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View /* for now, just init the string with fixed-formats */ switch (strip->type) { case NLASTRIP_TYPE_TRANSITION: /* Transition */ - sprintf(str, "%d | Transition | %.2f %s %.2f", index, strip->start, dir, strip->end); + sprintf(str, "%d | Transition | %.2f %s %.2f", + index, strip->start, dir, strip->end); + break; + + case NLASTRIP_TYPE_META: /* Meta */ + sprintf(str, "%d | %sMeta | %.2f %s %.2f", + index, ((strip->flag & NLASTRIP_FLAG_TEMP_META)?"Temp-":""), + strip->start, dir, strip->end); break; case NLASTRIP_TYPE_CLIP: /* Action-Clip (default) */ default: if (strip->act) - sprintf(str, "%d | Act: %s | %.2f %s %.2f", index, strip->act->id.name+2, strip->start, dir, strip->end); + sprintf(str, "%d | Act: %s | %.2f %s %.2f", + index, strip->act->id.name+2, strip->start, dir, strip->end); else sprintf(str, "%d | Act: ", index); // xxx... need a better format? break; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 676d0aac1b1..d663b76d5fe 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -1264,6 +1264,9 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) /* need to add a new track above the current one */ track= add_nlatrack(adt, nlt); BKE_nlatrack_add_strip(track, strip); + + /* clear temp meta-strips on this new track, as we may not be able to get back to it */ + BKE_nlastrips_clear_metas(&track->strips, 0, 1); } } diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index c238818dd1e..ca186dcf702 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -513,7 +513,7 @@ static void nlaedit_mselect_leftright (bContext *C, bAnimContext *ac, short left /* filter data */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS); ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* select strips on the side where most data occurs */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index b2afaac23de..758be545fd0 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2617,6 +2617,9 @@ static void createTransNlaData(bContext *C, TransInfo *t) 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) { // TODO: we can make strips have handles later on... @@ -4754,6 +4757,26 @@ void special_aftertrans_update(TransInfo *t) if (ANIM_animdata_context_getdata(&ac) == 0) return; + if (ac.datatype) + { + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); + + /* 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; + + /* remove the temp metas */ + BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); + } + + /* free temp memory */ + BLI_freelistN(&anim_data); + } + // XXX check on the calls below... we need some of these sanity checks //synchronize_action_strips(); //ANIM_editkeyframes_refresh(&ac); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 1474a30fbed..e228dc2b13a 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -82,6 +82,7 @@ #include "BKE_key.h" #include "BKE_mesh.h" #include "BKE_modifier.h" +#include "BKE_nla.h" #include "BKE_object.h" #include "BKE_utildefines.h" #include "BKE_context.h" @@ -388,6 +389,20 @@ void recalcData(TransInfo *t) } } } + + /* loop over the TransDataNla again, flushing the transforms (since we use Metas to make transforms easier) */ + td= t->data; + for (i = 0; i < t->total; i++, td++) + { + if (td->extra) + { + TransDataNla *tdn= td->extra; + NlaStrip *strip= tdn->strip; + + // TODO: this may flush some things twice, but that's fine as there's no impact from that + BKE_nlameta_flush_transforms(strip); + } + } } else if (t->obedit) { if ELEM(t->obedit->type, OB_CURVE, OB_SURF) { From 2edef129be18fa8cb7d9c33b8bd76dc60d9e1dcf Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 05:41:59 +0000 Subject: [PATCH 130/512] NLA SoC: Transform Code for NLA-Strips recoded (still buggy) Recoded the Transform code for NLA-Strips so that they can now be moved between strips and will not get truncated when they get moved into other non-moving strips. Todos: * The current code for moving strips between tracks is buggy (only goes up, and has a tendency to move up without being told to) * Auto-snapping doesn't work yet... --- source/blender/editors/include/ED_anim_api.h | 16 ++ source/blender/editors/space_nla/nla_header.c | 2 +- source/blender/editors/space_nla/nla_intern.h | 15 -- source/blender/editors/transform/transform.c | 10 +- source/blender/editors/transform/transform.h | 14 +- .../editors/transform/transform_conversions.c | 103 ++++++++-- .../editors/transform/transform_generics.c | 180 +++++++++++++----- .../blender/editors/transform/transform_ops.c | 4 +- 8 files changed, 255 insertions(+), 89 deletions(-) diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 87811fa34f9..2745be978d2 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -228,6 +228,22 @@ typedef enum eAnimFilter_Flags { /* channel toggle-buttons */ #define ACHANNEL_BUTTON_WIDTH 16 + +/* -------------- NLA Channel Defines -------------- */ + +/* NLA channel heights */ +#define NLACHANNEL_FIRST -16 +#define NLACHANNEL_HEIGHT 24 +#define NLACHANNEL_HEIGHT_HALF 12 +#define NLACHANNEL_SKIP 2 +#define NLACHANNEL_STEP (NLACHANNEL_HEIGHT + NLACHANNEL_SKIP) + +/* channel widths */ +#define NLACHANNEL_NAMEWIDTH 200 + +/* channel toggle-buttons */ +#define NLACHANNEL_BUTTON_WIDTH 16 + /* ---------------- API -------------------- */ /* Obtain list of filtered Animation channels to operate on. diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 9b9b21629cc..9a2806ed9c1 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -139,7 +139,7 @@ static void nla_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) { // XXX these operators may change for NLA... - uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TIME_TRANSLATE); + uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); } diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 4391a019207..3d8bfcd0546 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -33,21 +33,6 @@ /* **************************************** */ /* Macros, etc. only used by NLA */ -/* -------------- NLA Channel Defines -------------- */ - -/* NLA channel heights */ -#define NLACHANNEL_FIRST -16 -#define NLACHANNEL_HEIGHT 24 -#define NLACHANNEL_HEIGHT_HALF 12 -#define NLACHANNEL_SKIP 2 -#define NLACHANNEL_STEP (NLACHANNEL_HEIGHT + NLACHANNEL_SKIP) - -/* channel widths */ -#define NLACHANNEL_NAMEWIDTH 200 - -/* channel toggle-buttons */ -#define NLACHANNEL_BUTTON_WIDTH 16 - /* **************************************** */ /* space_nla.c / nla_buttons.c */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 9d8371afd61..9fbcfc71082 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -162,7 +162,7 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy) vec[1]= aspy*(v2d->cur.ymax-v2d->cur.ymin)*(dy)/divy; vec[2]= 0.0f; } - else if(t->spacetype==SPACE_IPO) { + else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { View2D *v2d = t->view; float divx, divy; @@ -212,7 +212,7 @@ void projectIntView(TransInfo *t, float *vec, int *adr) UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1); } - else if(t->spacetype==SPACE_IPO) { + else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { int out[2] = {0, 0}; UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], out, out+1); @@ -241,7 +241,7 @@ void projectFloatView(TransInfo *t, float *vec, float *adr) adr[0]= a[0]; adr[1]= a[1]; } - else if(t->spacetype==SPACE_IPO) { + else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { int a[2]; projectIntView(t, vec, a); @@ -1324,10 +1324,10 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int 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 Editor only since it uses 'standard' transforms to get 2D movement) + * (for Graph/NLA Editors only since they uses 'standard' transforms to get 2D movement) * depending on which editor this was called from */ - if (t->spacetype == SPACE_IPO) + if ELEM(t->spacetype, SPACE_IPO, SPACE_NLA) initTranslation(t); else initTimeTranslate(t); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 1b35701a753..65edae6fca8 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -163,9 +163,17 @@ typedef struct TransDataSeq { /* for NLA transform (stored in td->extra pointer) */ typedef struct TransDataNla { - struct NlaStrip *strip; /* NLA-strip that handle belongs to */ - float val; /* value for the handle that the transform tools write to */ - int handle; /* handle-index, 0 for start, 1 for end */ + struct NlaTrack *oldTrack; /* Original NLA-Track that the strip belongs to */ + struct NlaTrack *nlt; /* Current NLA-Track that the strip belongs to */ + + struct NlaStrip *strip; /* NLA-strip this data represents */ + + /* dummy values for transform to write in - must have 3 elements... */ + float h1[3]; /* start handle */ + float h2[3]; /* end handle */ + + int trackIndex; /* index of track that strip is currently in */ + int handle; /* handle-index: 0 for dummy entry, -1 for start, 1 for end, 2 for both ends */ } TransDataNla; typedef struct TransData { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 758be545fd0..76720600327 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2661,34 +2661,104 @@ static void createTransNlaData(bContext *C, TransInfo *t) /* transition strips can't get directly transformed */ if (strip->type != NLASTRIP_TYPE_TRANSITION) { if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* our transform data is constructed as follows: + * - only the handles on the right side of the current-frame get included + * - 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 + * - 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->oldTrack= tdn->nlt= nlt; + tdn->strip= strip; + tdn->trackIndex= BLI_findindex(&nlt->strips, strip); + + yval= (float)(tdn->trackIndex * NLACHANNEL_SKIP); + + 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(side, strip->start, (float)CFRA)) { - /* init the 'extra' data for NLA strip handles first */ - tdn->strip= strip; - tdn->val= strip->start; - tdn->handle= 0; + /* just set tdn to assume that it only has one handle for now */ + tdn->handle= -1; /* now, link the transform data up to this data */ - td->val= &tdn->val; - td->ival= tdn->val; + if (t->mode == TFM_TRANSLATION) { + td->loc= tdn->h1; + VECCOPY(td->iloc, tdn->h1); + + /* store all the other gunk that is required by transform */ + VECCOPY(td->center, center); + memset(td->axismtx, 0, sizeof(td->axismtx)); + td->axismtx[2][2] = 1.0f; + + td->ext= NULL; td->tdi= NULL; td->val= NULL; + + td->flag |= TD_SELECTED; + td->dist= 0.0f; + + Mat3One(td->mtx); + Mat3One(td->smtx); + } + else { + td->val= &tdn->h1[0]; + td->ival= tdn->h1[0]; + } + td->extra= tdn; td++; - tdn++; } if (FrameOnMouseSide(side, strip->end, (float)CFRA)) { - /* init the 'extra' data for NLA strip handles first */ - tdn->strip= strip; - tdn->val= strip->end; - tdn->handle= 1; + /* if tdn is already holding the start handle, then we're doing both, otherwise, only end */ + tdn->handle= (tdn->handle) ? 2 : 1; /* now, link the transform data up to this data */ - td->val= &tdn->val; - td->ival= tdn->val; + if (t->mode == TFM_TRANSLATION) { + td->loc= tdn->h2; + VECCOPY(td->iloc, tdn->h2); + + /* store all the other gunk that is required by transform */ + VECCOPY(td->center, center); + memset(td->axismtx, 0, sizeof(td->axismtx)); + td->axismtx[2][2] = 1.0f; + + td->ext= NULL; td->tdi= NULL; td->val= NULL; + + td->flag |= TD_SELECTED; + td->dist= 0.0f; + + Mat3One(td->mtx); + Mat3One(td->smtx); + } + else { + td->val= &tdn->h2[0]; + td->ival= tdn->h2[0]; + } + td->extra= tdn; td++; - tdn++; } + + /* if both handles were used, skip the next tdn (i.e. leave it blank) since the counting code is dumb... + * otherwise, just advance to the next one... + */ + if (tdn->handle == 2) + tdn += 2; + else + tdn++; } } } @@ -4739,7 +4809,6 @@ void special_aftertrans_update(TransInfo *t) ANIM_editkeyframes_refresh(&ac); } else if (t->spacetype == SPACE_NLA) { - SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; @@ -4769,6 +4838,10 @@ void special_aftertrans_update(TransInfo *t) for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; + /* make sure strips are in order again */ + // FIXME: this is buggy + //BKE_nlatrack_sort_strips(nlt); + /* remove the temp metas */ BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index e228dc2b13a..9928aea21d0 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -340,69 +340,153 @@ void recalcData(TransInfo *t) } } else if (t->spacetype == SPACE_NLA) { - TransData *td= t->data; + TransDataNla *tdn= (TransDataNla *)t->customData; int i; - /* for each point we've captured, look at its 'extra' data, which is basically a wrapper around the strip - * it is for + some extra storage for the values that get set, and use RNA to set this value (performing validation - * work so that we don't need to repeat it here) + /* for each strip we've got, perform some additional validation of the values that got set before + * using RNA to set the value (which does some special operations when setting these values to make + * sure that everything works ok) */ - for (i = 0; i < t->total; i++, td++) - { - if (td->extra) - { - TransDataNla *tdn= td->extra; - NlaStrip *strip= tdn->strip; + for (i = 0; i < t->total; i++, tdn++) { + NlaStrip *strip= tdn->strip; + PointerRNA strip_ptr; + short pExceeded, nExceeded, iter; + int delta_y1, delta_y2; + + /* if this tdn has no handles, that means it is just a dummy that should be skipped */ + if (tdn->handle == 0) + continue; - /* if we're just cancelling (i.e. the user aborted the transform), - * just restore the data by directly overwriting the values with the original - * ones (i.e. don't go through RNA), as we get some artifacts... + /* if cancelling transform, just write the values without validating, then move on */ + if (t->state == TRANS_CANCEL) { + /* clear the values by directly overwriting the originals, but also need to restore + * endpoints of neighboring transition-strips */ - if (t->state == TRANS_CANCEL) { - /* clear the values by directly overwriting the originals, but also need to restore - * endpoints of neighboring transition-strips + + /* start */ + strip->start= tdn->h1[0]; + + if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) + strip->prev->end= tdn->h1[0]; + + /* end */ + strip->end= tdn->h2[0]; + + if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) + strip->next->start= tdn->h2[0]; + + /* restore to original track (if needed) */ + if (tdn->oldTrack != tdn->nlt) { + /* just append to end of list for now, since strips get sorted in special_aftertrans_update() */ + BLI_remlink(&tdn->nlt->strips, strip); + BLI_addtail(&tdn->oldTrack->strips, strip); + } + + continue; + } + + /* firstly, check if the proposed transform locations would overlap with any neighbouring strips + * (barring transitions) which are absolute barriers since they are not being moved + * + * 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)); + + if ((pExceeded && nExceeded) || (iter == 4) ) { + /* both endpoints exceeded (or iteration ping-pong'd meaning that we need a compromise) + * - simply crop strip to fit within the bounds of the strips bounding it + * - if there were no neighbours, clear the transforms (make it default to the strip's current values) */ - if (tdn->handle) { - strip->end= tdn->val; - - if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) - strip->next->start= tdn->val; + if (strip->prev && strip->next) { + tdn->h1[0]= strip->prev->end; + tdn->h2[0]= strip->next->start; } else { - strip->start= tdn->val; - - if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) - strip->prev->end= tdn->val; + tdn->h1[0]= strip->start; + tdn->h2[0]= strip->end; + } + } + else if (nExceeded) { + /* move backwards */ + 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]; + + tdn->h1[0] += offset; + tdn->h2[0] += offset; + } + else /* all is fine and well */ + break; + } + + /* use RNA to write the values... */ + // TODO: do we need to write in 2 passes to make sure that no truncation goes on? + RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); + + RNA_float_set(&strip_ptr, "start_frame", tdn->h1[0]); + RNA_float_set(&strip_ptr, "end_frame", tdn->h2[0]); + + /* flush transforms to child strips (since this should be a meta) */ + BKE_nlameta_flush_transforms(strip); + + + /* 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 + */ + // FIXME: the conversion from vertical distance to track index needs work! + delta_y1= ((int)tdn->h1[0] / NLACHANNEL_SKIP - tdn->trackIndex); + delta_y2= ((int)tdn->h2[0] / NLACHANNEL_SKIP - tdn->trackIndex); + + if (delta_y1 || delta_y2) { + NlaTrack *track; + int delta = (delta_y2) ? delta_y2 : delta_y1; + int n; + + /* move in the requested direction, checking at each layer if there's space for strip to pass through, + * 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++) { + /* 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->trackIndex += (n + 1); /* + 1, since n==0 would mean that we didn't change track */ + } + else /* can't move any further */ + break; } } else { - PointerRNA strip_ptr; + /* make delta 'positive' before using it, since we now know to go backwards */ + delta= -delta; - /* make RNA-pointer */ - RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); - - /* write the value set by the transform tools to the appropriate property using RNA */ - if (tdn->handle) - RNA_float_set(&strip_ptr, "end_frame", tdn->val); - else - RNA_float_set(&strip_ptr, "start_frame", tdn->val); + 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->trackIndex -= (n - 1); /* - 1, since n==0 would mean that we didn't change track */ + } + else /* can't move any further */ + break; + } } } } - - /* loop over the TransDataNla again, flushing the transforms (since we use Metas to make transforms easier) */ - td= t->data; - for (i = 0; i < t->total; i++, td++) - { - if (td->extra) - { - TransDataNla *tdn= td->extra; - NlaStrip *strip= tdn->strip; - - // TODO: this may flush some things twice, but that's fine as there's no impact from that - BKE_nlameta_flush_transforms(strip); - } - } } else if (t->obedit) { if ELEM(t->obedit->type, OB_CURVE, OB_SURF) { diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 28606932c64..ecb58831118 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -609,10 +609,10 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key break; case SPACE_NLA: km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0); - RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); + RNA_int_set(km->ptr, "mode", TFM_TRANSLATION); km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); - RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); + RNA_int_set(km->ptr, "mode", TFM_TRANSLATION); km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); From 5fc61f03c12e291fa72fb3e60e5730300165aa3c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 06:16:06 +0000 Subject: [PATCH 131/512] NLA SoC: Fixes for bugs in transform code from previous commit * The code to move strips between tracks now works (though it can still be a bit too eager to change tracks half-way through some transforms). Strips are moved up/down one strip at a time, depending on whether there is any space in the next-track in the direction you direct it to move in. * Auto-snapping works again. Also enabled snap-to-marker option for Graph Editor here. --- .../editors/transform/transform_conversions.c | 4 +-- .../editors/transform/transform_generics.c | 25 +++++++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 76720600327..fafdfcc7602 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2677,7 +2677,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) tdn->strip= strip; tdn->trackIndex= BLI_findindex(&nlt->strips, strip); - yval= (float)(tdn->trackIndex * NLACHANNEL_SKIP); + yval= (float)(tdn->trackIndex * NLACHANNEL_STEP); tdn->h1[0]= strip->start; tdn->h1[1]= yval; @@ -3688,7 +3688,7 @@ void flushTransGraphData(TransInfo *t) break; case SACTSNAP_MARKER: /* snap to nearest marker */ - //td2d->loc[0]= (float)find_nearest_marker_time(td2d->loc[0]); + td2d->loc[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, td2d->loc[0]); break; } } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 9928aea21d0..2ff3cd807cd 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -59,9 +59,7 @@ //#include "BIF_screen.h" //#include "BIF_mywindow.h" #include "BIF_gl.h" -//#include "BIF_editaction.h" //#include "BIF_editmesh.h" -//#include "BIF_editnla.h" //#include "BIF_editsima.h" //#include "BIF_editparticle.h" //#include "BIF_meshtools.h" @@ -91,6 +89,7 @@ #include "ED_armature.h" #include "ED_image.h" #include "ED_keyframing.h" +#include "ED_markers.h" #include "ED_mesh.h" #include "ED_space_api.h" #include "ED_uvedit.h" @@ -341,6 +340,7 @@ void recalcData(TransInfo *t) } else if (t->spacetype == SPACE_NLA) { TransDataNla *tdn= (TransDataNla *)t->customData; + SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; int i; /* for each strip we've got, perform some additional validation of the values that got set before @@ -375,6 +375,9 @@ void recalcData(TransInfo *t) if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) strip->next->start= tdn->h2[0]; + /* flush transforms to child strips (since this should be a meta) */ + BKE_nlameta_flush_transforms(strip); + /* restore to original track (if needed) */ if (tdn->oldTrack != tdn->nlt) { /* just append to end of list for now, since strips get sorted in special_aftertrans_update() */ @@ -426,6 +429,19 @@ void recalcData(TransInfo *t) break; } + /* handle auto-snapping */ + switch (snla->autosnap) { + case SACTSNAP_FRAME: /* snap to nearest frame */ + tdn->h1[0]= (float)( floor(tdn->h1[0]+0.5f) ); + tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); + 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]); + break; + } + /* use RNA to write the values... */ // TODO: do we need to write in 2 passes to make sure that no truncation goes on? RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); @@ -440,9 +456,8 @@ void recalcData(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 */ - // FIXME: the conversion from vertical distance to track index needs work! - delta_y1= ((int)tdn->h1[0] / NLACHANNEL_SKIP - tdn->trackIndex); - delta_y2= ((int)tdn->h2[0] / NLACHANNEL_SKIP - tdn->trackIndex); + delta_y1= ((int)tdn->h1[1] / NLACHANNEL_STEP - tdn->trackIndex); + delta_y2= ((int)tdn->h2[1] / NLACHANNEL_STEP - tdn->trackIndex); if (delta_y1 || delta_y2) { NlaTrack *track; From 6a320f327700e5ef6774d29b0b7a4d4b1a45fa27 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 06:21:38 +0000 Subject: [PATCH 132/512] NLA SoC: Auto-Snapping Fixes (Transform) Snap to nearest-second works again for NLA and Graph Editors --- .../editors/transform/transform_conversions.c | 19 ++++++++----------- .../editors/transform/transform_generics.c | 14 +++++++++++--- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index fafdfcc7602..53c8e08ee74 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -101,16 +101,13 @@ #include "BKE_context.h" #include "BKE_report.h" -//#include "BIF_editaction.h" //#include "BIF_editview.h" //#include "BIF_editlattice.h" //#include "BIF_editconstraint.h" //#include "BIF_editmesh.h" -//#include "BIF_editnla.h" //#include "BIF_editsima.h" //#include "BIF_editparticle.h" #include "BIF_gl.h" -//#include "BIF_keyframing.h" //#include "BIF_poseobject.h" //#include "BIF_meshtools.h" //#include "BIF_mywindow.h" @@ -127,6 +124,7 @@ #include "ED_keyframing.h" #include "ED_keyframes_edit.h" #include "ED_object.h" +#include "ED_markers.h" #include "ED_mesh.h" #include "ED_types.h" #include "ED_uvedit.h" @@ -134,13 +132,7 @@ #include "UI_view2d.h" -//#include "BSE_drawipo.h" //#include "BSE_edit.h" -//#include "BSE_editipo.h" -//#include "BSE_editipo_types.h" -//#include "BSE_editaction_types.h" - -//#include "BDR_drawaction.h" // list of keyframes in action //#include "BDR_editobject.h" // reset_slowparents() //#include "BDR_gpencil.h" @@ -3671,6 +3663,8 @@ void flushTransGraphData(TransInfo *t) SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; TransData *td; TransData2D *td2d; + Scene *scene= t->scene; + double secf= FPS; int a; /* flush to 2d vector from internally used 3d vector */ @@ -3683,8 +3677,11 @@ void flushTransGraphData(TransInfo *t) */ if ((td->flag & TD_NOTIMESNAP)==0) { switch (sipo->autosnap) { - case SACTSNAP_FRAME: /* snap to nearest frame */ - td2d->loc[0]= (float)( floor(td2d->loc[0]+0.5f) ); + case SACTSNAP_FRAME: /* snap to nearest frame (or second if drawing seconds) */ + if (sipo->flag & SIPO_DRAWTIME) + td2d->loc[0]= (float)( floor((td2d->loc[0]/secf) + 0.5f) * secf ); + else + td2d->loc[0]= (float)( floor(td2d->loc[0]+0.5f) ); break; case SACTSNAP_MARKER: /* snap to nearest marker */ diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 2ff3cd807cd..9d111f39b6d 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -341,6 +341,8 @@ void recalcData(TransInfo *t) else if (t->spacetype == SPACE_NLA) { 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 @@ -431,9 +433,15 @@ void recalcData(TransInfo *t) /* handle auto-snapping */ switch (snla->autosnap) { - case SACTSNAP_FRAME: /* snap to nearest frame */ - tdn->h1[0]= (float)( floor(tdn->h1[0]+0.5f) ); - tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); + case SACTSNAP_FRAME: /* snap to nearest frame/time */ + if (snla->flag & SNLA_DRAWTIME) { + tdn->h1[0]= (float)( floor((tdn->h1[0]/secf) + 0.5f) * secf ); + tdn->h2[0]= (float)( floor((tdn->h2[0]/secf) + 0.5f) * secf ); + } + else { + tdn->h1[0]= (float)( floor(tdn->h1[0]+0.5f) ); + tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); + } break; case SACTSNAP_MARKER: /* snap to nearest marker */ From dd42ad590ed4a620b0c70eb844d0cf341014b290 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 06:39:01 +0000 Subject: [PATCH 133/512] NLA SoC: Small cleanup in Graph Editor struct code (obsolete + commented out stuff) --- source/blender/makesdna/DNA_space_types.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 329a3aac148..fef82ee2b91 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -86,7 +86,6 @@ typedef struct SpaceInfo { } SpaceInfo; /* 'Graph' Editor (formerly known as the IPO Editor) */ -// XXX for now, we keep all old data... typedef struct SpaceIpo { SpaceLink *next, *prev; ListBase regionbase; /* storage of regions for inactive spaces */ @@ -96,10 +95,6 @@ typedef struct SpaceIpo { short blockhandler[8]; View2D v2d; /* depricated, copied to region */ - // 'IPO keys' - vertical lines for editing multiple keyframes at once - use Dopesheet instead for this? - //ListBase ipokey; // XXX it's not clear how these will come back yet - //short showkey; // XXX this doesn't need to be restored until ipokeys come back - struct bDopeSheet *ads; /* settings for filtering animation data (NOTE: we use a pointer due to code-linking issues) */ ListBase ghostCurves; /* sampled snapshots of F-Curves used as in-session guides */ @@ -107,7 +102,7 @@ typedef struct SpaceIpo { short mode; /* mode for the Graph editor (eGraphEdit_Mode) */ short flag; /* settings for Graph editor */ short autosnap; /* time-transform autosnapping settings for Graph editor (eAnimEdit_AutoSnap in DNA_action_types.h) */ - char pin, lock; + char pin, lock; // XXX old, unused vars that are probably going to be depreceated soon... } SpaceIpo; typedef struct SpaceButs { From 761241fcbbeb254cd78aca5f8bb62330ce9369ac Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 06:56:29 +0000 Subject: [PATCH 134/512] NLA SoC: Current Frame can now be negative This commit is quite experimental, and might have to be reverted, but in quite a few places, the cleanups from this commit were already necessary. * I've left most of the image-handling functions alone, since I'm not sure how well they cope with negative indices. * Start/End frames cannot be negative for now... any specific reasons why they should be negative? --- source/blender/editors/animation/anim_ops.c | 8 +++++--- source/blender/editors/space_action/action_select.c | 2 +- source/blender/editors/space_buttons/buttons_header.c | 2 +- source/blender/editors/space_graph/graph_select.c | 2 +- source/blender/editors/space_nla/nla_select.c | 2 +- source/blender/editors/space_time/time_header.c | 5 ++++- source/blender/makesdna/DNA_scene_types.h | 4 ++++ source/blender/makesrna/intern/rna_constraint.c | 4 ++-- source/blender/makesrna/intern/rna_modifier.c | 8 ++++---- source/blender/makesrna/intern/rna_nla.c | 4 ++-- source/blender/makesrna/intern/rna_object.c | 2 +- source/blender/makesrna/intern/rna_particle.c | 10 +++++----- source/blender/makesrna/intern/rna_scene.c | 2 +- 13 files changed, 32 insertions(+), 23 deletions(-) diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index e899cc1d520..10691c558bf 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -83,10 +83,12 @@ static void change_frame_apply(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); int cfra; - /* get frame, and clamp to MINFRAME */ + /* get frame, and clamp to MINAFRAME + * - not MINFRAME, since it's useful to be able to key a few-frames back + */ cfra= RNA_int_get(op->ptr, "frame"); - if (cfra < MINFRAME) cfra= MINFRAME; + if (cfra < MINAFRAME) cfra= MINAFRAME; CFRA= cfra; WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); @@ -209,7 +211,7 @@ void ANIM_OT_change_frame(wmOperatorType *ot) ot->modal= change_frame_modal; /* rna */ - RNA_def_int(ot->srna, "frame", 0, 1, MAXFRAME, "Frame", "", 1, MAXFRAME); + RNA_def_int(ot->srna, "frame", 0, MINAFRAME, MAXFRAME, "Frame", "", MINAFRAME, MAXFRAME); } /* ****************** set preview range operator ****************************/ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index d45e32dd3bb..5b87c04b311 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -642,7 +642,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short memset(&bed, 0, sizeof(BeztEditFunc)); if (leftright == ACTKEYS_LRSEL_LEFT) { - bed.f1 = -MAXFRAMEF; + bed.f1 = MINAFRAMEF; bed.f2 = (float)(CFRA + FRAME_CLICK_THRESH); } else { diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 7c622f172a2..99cc85d9a52 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -193,7 +193,7 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) uiBlockEndAlign(block); xco+=XIC; - uiDefButI(block, NUM, B_NEWFRAME, "", (xco+20),yco,60,YIC, &(CTX_data_scene(C)->r.cfra), 1.0, MAXFRAMEF, 0, 0, "Displays Current Frame of animation. Click to change."); + uiDefButI(block, NUM, B_NEWFRAME, "", (xco+20),yco,60,YIC, &(CTX_data_scene(C)->r.cfra), MINAFRAMEF, MAXFRAMEF, 0, 0, "Displays Current Frame of animation. Click to change."); xco+= 80; /* always as last */ diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 11af86ca83b..c855222df02 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -763,7 +763,7 @@ static void graphkeys_mselect_leftright (bAnimContext *ac, short leftright, shor memset(&bed, 0, sizeof(BeztEditFunc)); if (leftright == GRAPHKEYS_LRSEL_LEFT) { - bed.f1 = -MAXFRAMEF; + bed.f1 = MINAFRAMEF; bed.f2 = (float)(CFRA + 0.1f); } else { diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index ca186dcf702..895d0dbf88a 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -501,7 +501,7 @@ static void nlaedit_mselect_leftright (bContext *C, bAnimContext *ac, short left /* get range, and get the right flag-setting mode */ if (leftright == NLAEDIT_LRSEL_LEFT) { - xmin = -MAXFRAMEF; + xmin = MINAFRAMEF; xmax = (float)(CFRA + FRAME_CLICK_THRESH); } else { diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index 29f31671670..da99849e594 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -536,9 +536,12 @@ void time_header_buttons(const bContext *C, ARegion *ar) xco += (short)(4.5 * XIC + 16); + /* MINAFRAMEF not MINFRAMEF, since MINAFRAMEF allows to set current frame negative + * to facilitate easier keyframing in some situations + */ uiDefButI(block, NUM, B_NEWFRAME, "", xco,yco, (int)3.5*XIC,YIC, - &(scene->r.cfra), MINFRAMEF, MAXFRAMEF, 0, 0, + &(scene->r.cfra), MINAFRAMEF, MAXFRAMEF, 0, 0, "Displays Current Frame of animation"); xco += (short)(3.5 * XIC + 16); diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 3549cdbe75f..6355e02a5e0 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -772,6 +772,10 @@ typedef struct Scene { #define MINFRAME 1 #define MINFRAMEF 1.0f +/* (minimum frame number for current-frame) */ +#define MINAFRAME -300000 +#define MINAFRAMEF -300000.0f + /* depricate this! */ #define TESTBASE(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) ) #define TESTBASELIB(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0)) diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 5c4b6a95524..2a5df8f1488 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -729,13 +729,13 @@ static void rna_def_constraint_action(BlenderRNA *brna) prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "start"); - RNA_def_property_range(prop, MINFRAME, MAXFRAME); + RNA_def_property_range(prop, MINAFRAME, MAXFRAME); RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use."); RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "end"); - RNA_def_property_range(prop, MINFRAME, MAXFRAME); + RNA_def_property_range(prop, MINAFRAME, MAXFRAME); RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use."); RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 48bfdf70171..69d5c203abf 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -506,7 +506,7 @@ static void rna_def_modifier_build(BlenderRNA *brna) RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD); prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 1, MAXFRAMEF); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Start", "Specify the start frame of the effect."); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); @@ -660,18 +660,18 @@ static void rna_def_modifier_wave(BlenderRNA *brna) prop= RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "timeoffs"); - RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Time Offset", "Either the starting frame (for positive speed) or ending frame (for negative speed.)"); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Lifetime", ""); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); prop= RNA_def_property(srna, "damping_time", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "damp"); - RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Damping Time", ""); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index dae1a611757..b0149d29e69 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -66,7 +66,7 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) } } else { - CLAMP(value, -MAXFRAME, data->end); + CLAMP(value, MINAFRAME, data->end); } data->start= value; } @@ -185,7 +185,7 @@ static void rna_NlaStrip_blend_out_set(PointerRNA *ptr, float value) static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; - CLAMP(value, -MAXFRAME, data->actend); + CLAMP(value, MINAFRAME, data->actend); data->actstart= value; } diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index ca2c9d072fb..b33c5e480b5 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -1154,7 +1154,7 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sf"); - RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_ui_text(prop, "Time Offset", "Animation offset in frames for IPO's and dupligroup instances."); RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index d60a215b498..ba331efada1 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -161,8 +161,8 @@ static void rna_PartSettings_start_set(struct PointerRNA *ptr, float value) if(settings->type==PART_REACTOR && value < 1.0) value = 1.0; - else if (value < -30000.0f) //TODO: replace 30000 with MAXFRAMEF when available in 2.5 - value = -30000.0f; + else if (value < MINAFRAMEF) + value = MINAFRAMEF; settings->sta = value; } @@ -1066,19 +1066,19 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* general values */ prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sta");//optional if prop names are the same - RNA_def_property_range(prop, -30000.0f, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_float_funcs(prop, NULL, "rna_PartSettings_start_set", NULL); RNA_def_property_ui_text(prop, "Start", "Frame # to start emitting particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "end", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, -30000.0f, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); RNA_def_property_float_funcs(prop, NULL, "rna_PartSettings_end_set", NULL); RNA_def_property_ui_text(prop, "End", "Frame # to stop emitting particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 1.0f, 30000.0f); + RNA_def_property_range(prop, 1.0f, MAXFRAMEF); RNA_def_property_ui_text(prop, "Lifetime", "Specify the life span of the particles"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 5f03b7167f4..2ad4a20f9a0 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -960,7 +960,7 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "current_frame", PROP_INT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_int_sdna(prop, NULL, "r.cfra"); - RNA_def_property_range(prop, MINFRAME, MAXFRAME); + RNA_def_property_range(prop, MINAFRAME, MAXFRAME); RNA_def_property_ui_text(prop, "Current Frame", ""); RNA_def_property_update(prop, NC_SCENE|ND_FRAME, "rna_Scene_frame_update"); From a86d20e5a26700beac595bd8aaccb646be0f802c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 07:29:21 +0000 Subject: [PATCH 135/512] NLA SoC: Quick hack - Reversed playback Animations can now be played back in reverse, by clicking on the reversed-playback button in the TimeLine header beside the play button (NEW ICON NEEDED HERE). I'm not sure how well this works with sound, but from what I gather, this can be quite useful for animators to use. --- .../blender/editors/include/ED_screen_types.h | 1 + source/blender/editors/screen/screen_edit.c | 5 ++- source/blender/editors/screen/screen_ops.c | 44 ++++++++++++++----- .../blender/editors/space_time/time_header.c | 32 ++++++++++++-- 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h index 37f2f4f051d..3ea5dfba65c 100644 --- a/source/blender/editors/include/ED_screen_types.h +++ b/source/blender/editors/include/ED_screen_types.h @@ -33,6 +33,7 @@ typedef struct ScreenAnimData { ARegion *ar; /* do not read from this, only for comparing if region exists */ int redraws; + int reverse; } ScreenAnimData; diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 4e08310240c..6da00f12a25 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1460,7 +1460,9 @@ void ED_screen_full_prevspace(bContext *C) ed_screen_fullarea(C, sa); } -/* redraws: uses defines from stime->redraws */ +/* redraws: uses defines from stime->redraws + * enable: 1 - forward on, -1 - backwards on, 0 - off + */ void ED_screen_animation_timer(bContext *C, int redraws, int enable) { bScreen *screen= CTX_wm_screen(C); @@ -1477,6 +1479,7 @@ void ED_screen_animation_timer(bContext *C, int redraws, int enable) screen->animtimer= WM_event_add_window_timer(win, TIMER0, (1.0/FPS)); sad->ar= CTX_wm_region(C); sad->redraws= redraws; + sad->reverse= (enable < 0); screen->animtimer->customdata= sad; } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5bf090e459b..80526dbdb6e 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2067,19 +2067,40 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) if(scene->audio.flag & AUDIO_SYNC) { int step = floor(wt->duration * FPS); - scene->r.cfra += step; + if (sad->reverse) // XXX does this option work with audio? + scene->r.cfra -= step; + else + scene->r.cfra += step; wt->duration -= ((float)step)/FPS; } - else - scene->r.cfra++; + else { + if (sad->reverse) + scene->r.cfra--; + else + scene->r.cfra++; + } - if (scene->r.psfra) { - if(scene->r.cfra > scene->r.pefra) - scene->r.cfra= scene->r.psfra; + if (sad->reverse) { + /* jump back to end */ + if (scene->r.psfra) { + if(scene->r.cfra < scene->r.psfra) + scene->r.cfra= scene->r.pefra; + } + else { + if(scene->r.cfra < scene->r.sfra) + scene->r.cfra= scene->r.efra; + } } else { - if(scene->r.cfra > scene->r.efra) - scene->r.cfra= scene->r.sfra; + /* jump back to start */ + if (scene->r.psfra) { + if(scene->r.cfra > scene->r.pefra) + scene->r.cfra= scene->r.psfra; + } + else { + if(scene->r.cfra > scene->r.efra) + scene->r.cfra= scene->r.sfra; + } } /* since we follow drawflags, we can't send notifier but tag regions ourselves */ @@ -2127,8 +2148,9 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event) ED_screen_animation_timer(C, 0, 0); } else { - /* todo: RNA properties to define play types */ - ED_screen_animation_timer(C, TIME_REGION|TIME_ALL_3D_WIN, 1); + int mode= (RNA_boolean_get(op->ptr, "reverse")) ? -1 : 1; + + ED_screen_animation_timer(C, TIME_REGION|TIME_ALL_3D_WIN, mode); if(screen->animtimer) { wmTimer *wt= screen->animtimer; @@ -2152,7 +2174,7 @@ void SCREEN_OT_animation_play(wmOperatorType *ot) ot->poll= ED_operator_screenactive; - + RNA_def_boolean(ot->srna, "reverse", 0, "Play in Reverse", "Animation is played backwards"); } /* ************** border select operator (template) ***************************** */ diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index da99849e594..9ffce53e572 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -373,6 +373,7 @@ static uiBlock *time_framemenu(bContext *C, ARegion *ar, void *arg_unused) #define B_REDRAWALL 750 #define B_TL_REW 751 #define B_TL_PLAY 752 +#define B_TL_RPLAY 760 #define B_TL_FF 753 #define B_TL_PREVKEY 754 #define B_TL_NEXTKEY 755 @@ -415,6 +416,18 @@ void do_time_buttons(bContext *C, void *arg, int event) sad->ar= time_top_left_3dwindow(screen); } + break; + case B_TL_RPLAY: + ED_screen_animation_timer(C, stime->redraws, -1); + + /* update region if TIME_REGION was set, to leftmost 3d window */ + if(screen->animtimer && (stime->redraws & TIME_REGION)) { + wmTimer *wt= screen->animtimer; + ScreenAnimData *sad= wt->customdata; + + sad->ar= time_top_left_3dwindow(screen); + } + break; case B_TL_STOP: ED_screen_animation_timer(C, 0, 0); @@ -553,14 +566,27 @@ void time_header_buttons(const bContext *C, ARegion *ar) xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to previous keyframe (Ctrl PageDown)"); xco+= XIC+4; - if(CTX_wm_screen(C)->animtimer) + if(CTX_wm_screen(C)->animtimer) { + /* pause button is drawn centered between the two other buttons for now (saves drawing 2 buttons, or having position changes) */ + xco+= XIC/2 + 2; + uiDefIconBut(block, BUT, B_TL_STOP, ICON_PAUSE, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Stop Playing Timeline"); - else + + xco+= XIC/2 + 2; + } + else { + // FIXME: the icon for this is crap + uiDefIconBut(block, BUT, B_TL_RPLAY, ICON_REW/*ICON_PLAY*/, + xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Play Timeline in Reverse"); + + xco+= XIC+4; + uiDefIconBut(block, BUT, B_TL_PLAY, ICON_PLAY, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Play Timeline "); - + } xco+= XIC+4; + uiDefIconBut(block, BUT, B_TL_NEXTKEY, ICON_NEXT_KEYFRAME, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to next keyframe (Ctrl PageUp)"); xco+= XIC+4; From e22fefc2c8ef2c844d32d9aed23a04013cc364fb Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 10:25:55 +0000 Subject: [PATCH 136/512] NLA SoC: Fixed bug with NLA-Transform Strip-sorting code was buggy, as it was trying to access an invalid pointer, so the call to sort strips after transform was temporarily disabled in previous commits. --- source/blender/blenkernel/intern/nla.c | 12 +++++++----- .../editors/transform/transform_conversions.c | 3 +-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 851a0d7b549..4dce9aebe24 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -546,26 +546,28 @@ short BKE_nlastrips_has_space (ListBase *strips, float start, float end) void BKE_nlastrips_sort_strips (ListBase *strips) { ListBase tmp = {NULL, NULL}; - NlaStrip *strip, *sstrip; + NlaStrip *strip, *sstrip, *stripn; /* sanity checks */ if ELEM(NULL, strips, strips->first) return; - + /* we simply perform insertion sort on this list, since it is assumed that per track, * there are only likely to be at most 5-10 strips */ - for (strip= strips->first; strip; strip= strip->next) { + for (strip= strips->first; strip; strip= stripn) { short not_added = 1; + stripn= strip->next; + /* remove this strip from the list, and add it to the new list, searching from the end of * the list, assuming that the lists are in order */ BLI_remlink(strips, strip); - for (sstrip= tmp.last; not_added && sstrip; sstrip= sstrip->prev) { + for (sstrip= tmp.last; sstrip; sstrip= sstrip->prev) { /* check if add after */ - if (sstrip->end < strip->start) { + if (sstrip->end <= strip->start) { BLI_insertlinkafter(&tmp, sstrip, strip); not_added= 0; break; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 53c8e08ee74..0d19eeb913e 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4836,8 +4836,7 @@ void special_aftertrans_update(TransInfo *t) NlaTrack *nlt= (NlaTrack *)ale->data; /* make sure strips are in order again */ - // FIXME: this is buggy - //BKE_nlatrack_sort_strips(nlt); + BKE_nlatrack_sort_strips(nlt); /* remove the temp metas */ BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); From d1677e36b663f077312050ac46cea0de1b1212c2 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 11:37:33 +0000 Subject: [PATCH 137/512] NLA SoC: Recoded way that Meta-Strips are Evaluated Previously, the quick-hack I coded for Meta-strips evaluation didn't really take into account the possibilities to use Meta-Strips as strips in their own right - i.e. reversed, muted, time-mapping-curves, influence-blending - were all unavailable. This commit makes the aforementioned capabilities of other strips available for Meta-Strips too. The evaluation is now kind-of recursive (as with most of the other methods which take them into account) so that each 'level' of strips get evaluated correctly within their frame-of-reference. TODO: * F-Modifier support for Metas... --- source/blender/blenkernel/intern/anim_sys.c | 166 +++++++++++--------- source/blender/blenkernel/intern/nla.c | 2 +- source/blender/blenkernel/nla_private.h | 6 + 3 files changed, 101 insertions(+), 73 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 1d10744ac80..0aadb1825ad 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -627,11 +627,12 @@ static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime) } } - -/* gets the strip active at the current time for a given list of strips */ -static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) +/* gets the strip active at the current time for a list of strips for evaluation purposes */ +NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short index, float ctime) { NlaStrip *strip, *estrip=NULL; + NlaEvalStrip *nes; + short side= 0; /* loop over strips, checking if they fall within the range */ for (strip= strips->first; strip; strip= strip->next) { @@ -651,7 +652,7 @@ static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) estrip= strip; /* side is 'before' regardless of whether there's a useful strip */ - *side= NES_TIME_BEFORE; + side= NES_TIME_BEFORE; } else { /* before next strip - previous strip has ended, but next hasn't begun, @@ -663,7 +664,7 @@ static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) estrip= strip; - *side= NES_TIME_AFTER; + side= NES_TIME_AFTER; } break; } @@ -675,7 +676,7 @@ static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) estrip= strip; - *side= NES_TIME_AFTER; + side= NES_TIME_AFTER; break; } @@ -683,40 +684,11 @@ static NlaStrip *ctime_get_strip (ListBase *strips, short *side, float ctime) } } - /* return the matching strip found */ - return estrip; -} - -/* gets the strip active at the current time for a track for evaluation purposes */ -static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index, float ctime) -{ - ListBase *strips= &nlt->strips; - NlaStrip *strip, *estrip=NULL; - NlaEvalStrip *nes; - short side= 0; - - /* keep looping over hierarchy of strips until one which fits for the current time is found */ - while (strips->first) { - /* try to get the strip at this frame for this strip */ - strip= ctime_get_strip(strips, &side, ctime); - - /* if a strip was found, make this the new estrip, otherwise, stop trying */ - if (strip) { - /* set new estrip */ - estrip= strip; - - /* check children (only available if this is a meta-strip) for better match */ - strips= &strip->strips; - } - else - break; - } - /* check if a valid strip was found * - must not be muted (i.e. will have contribution */ if ((estrip == NULL) || (estrip->flag & NLASTRIP_FLAG_MUTED)) - return; + return NULL; /* if ctime was not within the boundaries of the strip, clamp! */ switch (side) { @@ -734,8 +706,8 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index */ // TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on... nlastrip_evaluate_controls(estrip, ctime); - if (estrip->influence <= 0.0f) // XXX is it useful to invert the strip? - return; + if (estrip->influence <= 0.0f) + return NULL; /* check if strip has valid data to evaluate, * and/or perform any additional type-specific actions @@ -744,12 +716,12 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index case NLASTRIP_TYPE_CLIP: /* clip must have some action to evaluate */ if (estrip->act == NULL) - return; + return NULL; break; case NLASTRIP_TYPE_TRANSITION: /* there must be strips to transition from and to (i.e. prev and next required) */ if (ELEM(NULL, estrip->prev, estrip->next)) - return; + return NULL; /* evaluate controls for the relevant extents of the bordering strips... */ nlastrip_evaluate_controls(estrip->prev, estrip->start); @@ -760,13 +732,15 @@ static void nlatrack_ctime_get_strip (ListBase *list, NlaTrack *nlt, short index /* add to list of strips we need to evaluate */ nes= MEM_callocN(sizeof(NlaEvalStrip), "NlaEvalStrip"); - nes->track= nlt; nes->strip= estrip; nes->strip_mode= side; nes->track_index= index; nes->strip_time= estrip->strip_time; - BLI_addtail(list, nes); + if (list) + BLI_addtail(list, nes); + + return nes; } /* ---------------------- */ @@ -897,6 +871,38 @@ static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, shor } } +/* accumulate the results of a temporary buffer with the results of the full-buffer */ +static void nlaevalchan_buffers_accumulate (ListBase *channels, ListBase *tmp_buffer, NlaEvalStrip *nes) +{ + NlaEvalChannel *nec, *necn, *necd; + + /* optimise - abort if no channels */ + if (tmp_buffer->first == NULL) + return; + + /* accumulate results in tmp_channels buffer to the accumulation buffer */ + for (nec= tmp_buffer->first; nec; nec= necn) { + /* get pointer to next channel in case we remove the current channel from the temp-buffer */ + necn= nec->next; + + /* try to find an existing matching channel for this setting in the accumulation buffer */ + necd= nlaevalchan_find_match(channels, &nec->ptr, nec->prop, nec->index); + + /* if there was a matching channel already in the buffer, accumulate to it, + * otherwise, add the current channel to the buffer for efficiency + */ + if (necd) + nlaevalchan_accumulate(necd, nes, 0, nec->value); + else { + BLI_remlink(tmp_buffer, nec); + BLI_addtail(channels, nec); + } + } + + /* free temp-channels that haven't been assimilated into the buffer */ + BLI_freelistN(tmp_buffer); +} + /* ---------------------- */ /* evaluate action-clip strip */ @@ -945,7 +951,6 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) { ListBase tmp_channels = {NULL, NULL}; - NlaEvalChannel *nec, *necn, *necd; NlaEvalStrip tmp_nes; NlaStrip *s1, *s2; @@ -986,38 +991,51 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, N nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_nes); - /* optimise - abort if no channels */ - if (tmp_channels.first == NULL) - return; - - - /* accumulate results in tmp_channels buffer to the accumulation buffer */ - for (nec= tmp_channels.first; nec; nec= necn) { - /* get pointer to next channel in case we remove the current channel from the temp-buffer */ - necn= nec->next; - - /* try to find an existing matching channel for this setting in the accumulation buffer */ - necd= nlaevalchan_find_match(channels, &nec->ptr, nec->prop, nec->index); - - /* if there was a matching channel already in the buffer, accumulate to it, - * otherwise, add the current channel to the buffer for efficiency - */ - if (necd) - nlaevalchan_accumulate(necd, nes, 0, nec->value); - else { - BLI_remlink(&tmp_channels, nec); - BLI_addtail(channels, nec); - } - } - - /* free temp-channels that haven't been assimilated into the buffer */ - BLI_freelistN(&tmp_channels); + /* assumulate temp-buffer and full-buffer, using the 'real' strip */ + nlaevalchan_buffers_accumulate(channels, &tmp_channels, nes); } +/* evaluate meta-strip */ +static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +{ + ListBase tmp_channels = {NULL, NULL}; + NlaStrip *strip= nes->strip; + NlaEvalStrip *tmp_nes; + float evaltime; + + /* meta-strip was calculated normally to have some time to be evaluated at + * and here we 'look inside' the meta strip, treating it as a decorated window to + * it's child strips, which get evaluated as if they were some tracks on a strip + * (but with some extra modifiers to apply). + * + * NOTE: keep this in sync with animsys_evaluate_nla() + */ + + /* find the child-strip to evaluate */ + evaltime= (nes->strip_time * (strip->end - strip->start)) + strip->start; + tmp_nes= nlastrips_ctime_get_strip(NULL, &strip->strips, -1, evaltime); + if (tmp_nes == NULL) + return; + + /* evaluate child-strip into tmp_channels buffer before accumulating + * in the accumulation buffer + */ + // TODO: need to supply overriding modifiers which will get applied over the top of these + nlastrip_evaluate(ptr, &tmp_channels, tmp_nes); + + /* assumulate temp-buffer and full-buffer, using the 'real' strip */ + nlaevalchan_buffers_accumulate(channels, &tmp_channels, nes); + + /* free temp eval-strip */ + MEM_freeN(tmp_nes); +} + + /* evaluates the given evaluation strip */ -static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) { /* actions to take depend on the type of strip */ + // TODO: add 'modifiers' tag to chain switch (nes->strip->type) { case NLASTRIP_TYPE_CLIP: /* action-clip */ nlastrip_evaluate_actionclip(ptr, channels, nes); @@ -1025,11 +1043,14 @@ static void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip case NLASTRIP_TYPE_TRANSITION: /* transition */ nlastrip_evaluate_transition(ptr, channels, nes); break; + case NLASTRIP_TYPE_META: /* meta */ + nlastrip_evaluate_meta(ptr, channels, nes); + break; } } /* write the accumulated settings to */ -static void nladata_flush_channels (ListBase *channels) +void nladata_flush_channels (ListBase *channels) { NlaEvalChannel *nec; @@ -1104,7 +1125,8 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) continue; /* otherwise, get strip to evaluate for this channel */ - nlatrack_ctime_get_strip(&estrips, nlt, track_index, ctime); + nes= nlastrips_ctime_get_strip(&estrips, &nlt->strips, track_index, ctime); + if (nes) nes->track= nlt; } /* only continue if there are strips to evaluate */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 4dce9aebe24..511623f46fc 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -452,7 +452,7 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short float nlastrip_get_frame (NlaStrip *strip, float cframe, short mode) { switch (strip->type) { - case NLASTRIP_TYPE_META: /* meta (is just a container for other strips, so shouldn't use the action-clip method) */ + case NLASTRIP_TYPE_META: /* meta - for now, does the same as transition (is really just an empty container) */ case NLASTRIP_TYPE_TRANSITION: /* transition */ return nlastrip_get_frame_transition(strip, cframe, mode); diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h index 1514a79f03b..016eaedfe4c 100644 --- a/source/blender/blenkernel/nla_private.h +++ b/source/blender/blenkernel/nla_private.h @@ -75,5 +75,11 @@ typedef struct NlaEvalChannel { /* convert from strip time <-> global time */ float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode); +/* --------------- NLA Evaluation (very-private stuff) ----------------------- */ +/* these functions are only defined here to avoid problems with the order in which they get defined... */ + +NlaEvalStrip *nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, float ctime); +void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes); +void nladata_flush_channels(ListBase *channels); #endif // NLA_PRIVATE From f8c344bd17e09f21b5f022f65016fc13a7aa1d69 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 12:17:06 +0000 Subject: [PATCH 138/512] NLA SoC: Meta Strips + F-Modifiers F-Modifiers now work on 'all' types of NLA Strip. To get them working on Meta-strips, F-Modifiers on the Meta strip must be applied on top of those for child strips. For now, this is done by joining the lists of modifiers, and evaluating the joined list. Currently, Transitions don't work that great with F-Modifiers yet (only the endpoints get evaluated with the F-Modifiers). Solving this is for another time... --- source/blender/blenkernel/intern/anim_sys.c | 106 +++++++++++++++++--- source/blender/blenkernel/nla_private.h | 2 +- 2 files changed, 91 insertions(+), 17 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 0aadb1825ad..1037b2fd15d 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -903,17 +903,76 @@ static void nlaevalchan_buffers_accumulate (ListBase *channels, ListBase *tmp_bu BLI_freelistN(tmp_buffer); } +/* ---------------------- */ +/* F-Modifier stack joining/separation utilities - should we generalise these for BLI_listbase.h interface? */ + +/* Temporarily join two lists of modifiers together, storing the result in a third list */ +static void nlaeval_fmodifiers_join_stacks (ListBase *result, ListBase *list1, ListBase *list2) +{ + FModifier *fcm1, *fcm2; + + /* if list1 is invalid... */ + if ELEM(NULL, list1, list1->first) { + if (list2 && list2->first) { + result->first= list2->first; + result->last= list2->last; + } + } + /* if list 2 is invalid... */ + else if ELEM(NULL, list2, list2->first) { + result->first= list1->first; + result->last= list1->last; + } + else { + /* list1 should be added first, and list2 second, with the endpoints of these being the endpoints for result + * - the original lists must be left unchanged though, as we need that fact for restoring + */ + result->first= list1->first; + result->last= list2->last; + + fcm1= list1->last; + fcm2= list2->first; + + fcm1->next= fcm2; + fcm2->prev= fcm1; + } +} + +/* Split two temporary lists of modifiers */ +static void nlaeval_fmodifiers_split_stacks (ListBase *list1, ListBase *list2) +{ + FModifier *fcm1, *fcm2; + + /* if list1/2 is invalid... just skip */ + if ELEM(NULL, list1, list2) + return; + if ELEM(NULL, list1->first, list2->first) + return; + + /* get endpoints */ + fcm1= list1->last; + fcm2= list2->first; + + /* clear their links */ + fcm1->next= NULL; + fcm2->prev= NULL; +} + /* ---------------------- */ /* evaluate action-clip strip */ -static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { + ListBase tmp_modifiers = {NULL, NULL}; NlaStrip *strip= nes->strip; FCurve *fcu; float evaltime; + /* join this strip's modifiers to the parent's modifiers (own modifiers first) */ + nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &strip->modifiers, modifiers); + /* evaluate strip's modifiers which modify time to evaluate the base curves at */ - evaltime= evaluate_time_fmodifiers(&strip->modifiers, NULL, 0.0f, strip->strip_time); + evaltime= evaluate_time_fmodifiers(&tmp_modifiers, NULL, 0.0f, strip->strip_time); /* evaluate all the F-Curves in the action, saving the relevant pointers to data that will need to be used */ for (fcu= strip->act->curves.first; fcu; fcu= fcu->next) { @@ -935,7 +994,7 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N /* apply strip's F-Curve Modifiers on this value * NOTE: we apply the strip's original evaluation time not the modified one (as per standard F-Curve eval) */ - evaluate_value_fmodifiers(&strip->modifiers, fcu, &value, strip->strip_time); + evaluate_value_fmodifiers(&tmp_modifiers, fcu, &value, strip->strip_time); /* get an NLA evaluation channel to work with, and accumulate the evaluated value with the value(s) @@ -945,15 +1004,22 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, N if (nec) nlaevalchan_accumulate(nec, nes, newChan, value); } + + /* unlink this strip's modifiers from the parent's modifiers again */ + nlaeval_fmodifiers_split_stacks(&strip->modifiers, modifiers); } /* evaluate transition strip */ -static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { ListBase tmp_channels = {NULL, NULL}; + ListBase tmp_modifiers = {NULL, NULL}; NlaEvalStrip tmp_nes; NlaStrip *s1, *s2; + /* join this strip's modifiers to the parent's modifiers (own modifiers first) */ + nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &nes->strip->modifiers, modifiers); + /* get the two strips to operate on * - we use the endpoints of the strips directly flanking our strip * using these as the endpoints of the transition (destination and source) @@ -980,25 +1046,30 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, N tmp_nes= *nes; /* evaluate these strips into a temp-buffer (tmp_channels) */ + // FIXME: modifier evalation here needs some work... /* first strip */ tmp_nes.strip_mode= NES_TIME_TRANSITION_START; tmp_nes.strip= s1; - nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_nes); + nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); /* second strip */ tmp_nes.strip_mode= NES_TIME_TRANSITION_END; tmp_nes.strip= s2; - nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_nes); + nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); /* assumulate temp-buffer and full-buffer, using the 'real' strip */ nlaevalchan_buffers_accumulate(channels, &tmp_channels, nes); + + /* unlink this strip's modifiers from the parent's modifiers again */ + nlaeval_fmodifiers_split_stacks(&nes->strip->modifiers, modifiers); } /* evaluate meta-strip */ -static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { ListBase tmp_channels = {NULL, NULL}; + ListBase tmp_modifiers = {NULL, NULL}; NlaStrip *strip= nes->strip; NlaEvalStrip *tmp_nes; float evaltime; @@ -1010,6 +1081,9 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, NlaEval * * NOTE: keep this in sync with animsys_evaluate_nla() */ + + /* join this strip's modifiers to the parent's modifiers (own modifiers first) */ + nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &strip->modifiers, modifiers); /* find the child-strip to evaluate */ evaltime= (nes->strip_time * (strip->end - strip->start)) + strip->start; @@ -1020,31 +1094,31 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, NlaEval /* evaluate child-strip into tmp_channels buffer before accumulating * in the accumulation buffer */ - // TODO: need to supply overriding modifiers which will get applied over the top of these - nlastrip_evaluate(ptr, &tmp_channels, tmp_nes); + nlastrip_evaluate(ptr, &tmp_channels, &tmp_modifiers, tmp_nes); /* assumulate temp-buffer and full-buffer, using the 'real' strip */ nlaevalchan_buffers_accumulate(channels, &tmp_channels, nes); /* free temp eval-strip */ MEM_freeN(tmp_nes); + + /* unlink this strip's modifiers from the parent's modifiers again */ + nlaeval_fmodifiers_split_stacks(&strip->modifiers, modifiers); } - /* evaluates the given evaluation strip */ -void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes) +void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { /* actions to take depend on the type of strip */ - // TODO: add 'modifiers' tag to chain switch (nes->strip->type) { case NLASTRIP_TYPE_CLIP: /* action-clip */ - nlastrip_evaluate_actionclip(ptr, channels, nes); + nlastrip_evaluate_actionclip(ptr, channels, modifiers, nes); break; case NLASTRIP_TYPE_TRANSITION: /* transition */ - nlastrip_evaluate_transition(ptr, channels, nes); + nlastrip_evaluate_transition(ptr, channels, modifiers, nes); break; case NLASTRIP_TYPE_META: /* meta */ - nlastrip_evaluate_meta(ptr, channels, nes); + nlastrip_evaluate_meta(ptr, channels, modifiers, nes); break; } } @@ -1136,7 +1210,7 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) /* 2. for each strip, evaluate then accumulate on top of existing channels, but don't set values yet */ for (nes= estrips.first; nes; nes= nes->next) - nlastrip_evaluate(ptr, &echannels, nes); + nlastrip_evaluate(ptr, &echannels, NULL, nes); /* 3. flush effects of accumulating channels in NLA to the actual data they affect */ nladata_flush_channels(&echannels); diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h index 016eaedfe4c..df7ffaa3064 100644 --- a/source/blender/blenkernel/nla_private.h +++ b/source/blender/blenkernel/nla_private.h @@ -79,7 +79,7 @@ float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode); /* these functions are only defined here to avoid problems with the order in which they get defined... */ NlaEvalStrip *nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, float ctime); -void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes); +void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes); void nladata_flush_channels(ListBase *channels); #endif // NLA_PRIVATE From 823bf891a113cc0d1893706cf374aceec2715b8f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 7 Jul 2009 23:33:39 +0000 Subject: [PATCH 139/512] NLA SoC: Clarifying the error message for adding transitions NOTE: transition strips can only be added between two selected action-clips that have a gap (but no other strips) between them, and are in the same track. --- source/blender/editors/space_nla/nla_edit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index d663b76d5fe..0198a66949e 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -432,7 +432,7 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } else { - BKE_report(op->reports, RPT_ERROR, "Needs at least a pair of adjacent selected strips."); + BKE_report(op->reports, RPT_ERROR, "Needs at least a pair of adjacent selected strips with a gap between them."); return OPERATOR_CANCELLED; } } From be5293d3ad38ba5f9f32ac8585d012bc44a9e684 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 8 Jul 2009 05:00:10 +0000 Subject: [PATCH 140/512] NLA SoC: Influence/Time properties for strips can now be animated * These settings can now be edited + keyframed (using IKEY over the button only for now... other cases will fail) * Reshuffled some of the keyframing code to make this sort of thing easier to do. Also, restored corrections for NLA-mapping when inserting/removing keyframes. TODOS: * animation editors don't show these keyframes yet * the buttons don't change colour yet to reflect this state. How to do this efficiently? * allow keyframing of these in more places * more robust UI handling for this. --- source/blender/blenkernel/BKE_nla.h | 4 + source/blender/blenkernel/intern/nla.c | 52 ++++ source/blender/editors/animation/keyframing.c | 237 +++++++++++------- .../blender/editors/include/ED_keyframing.h | 13 + .../blender/editors/space_nla/nla_buttons.c | 17 +- source/blender/makesrna/intern/rna_nla.c | 36 ++- 6 files changed, 255 insertions(+), 104 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 5cb967c9c59..7fdff7e41f7 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -80,8 +80,12 @@ short BKE_nlatrack_add_strip(struct NlaTrack *nlt, struct NlaStrip *strip); /* ............ */ struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); + short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); +void BKE_nlastrip_validate_fcurves(struct NlaStrip *strip); + +/* ............ */ void BKE_nla_action_pushdown(struct AnimData *adt); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 511623f46fc..217444d16d2 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -1049,6 +1049,58 @@ short nlastrip_is_first (AnimData *adt, NlaStrip *strip) /* should be first now */ return 1; } + +/* Validate the NLA-Strips 'control' F-Curves based on the flags set*/ +void BKE_nlastrip_validate_fcurves (NlaStrip *strip) +{ + FCurve *fcu; + + /* sanity checks */ + if (strip == NULL) + return; + + /* if controlling influence... */ + if (strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) { + /* try to get F-Curve */ + fcu= list_find_fcurve(&strip->fcurves, "influence", 0); + + /* add one if not found */ + if (fcu == NULL) { + /* make new F-Curve */ + fcu= MEM_callocN(sizeof(FCurve), "NlaStrip FCurve"); + BLI_addtail(&strip->fcurves, fcu); + + /* set default flags */ + fcu->flag = (FCURVE_VISIBLE|FCURVE_AUTO_HANDLES|FCURVE_SELECTED); + + /* store path - make copy, and store that */ + fcu->rna_path= BLI_strdupn("influence", 9); + + // TODO: insert a few keyframes to ensure default behaviour? + } + } + + /* if controlling time... */ + if (strip->flag & NLASTRIP_FLAG_USR_TIME) { + /* try to get F-Curve */ + fcu= list_find_fcurve(&strip->fcurves, "strip_time", 0); + + /* add one if not found */ + if (fcu == NULL) { + /* make new F-Curve */ + fcu= MEM_callocN(sizeof(FCurve), "NlaStrip FCurve"); + BLI_addtail(&strip->fcurves, fcu); + + /* set default flags */ + fcu->flag = (FCURVE_VISIBLE|FCURVE_AUTO_HANDLES|FCURVE_SELECTED); + + /* store path - make copy, and store that */ + fcu->rna_path= BLI_strdupn("strip_time", 10); + + // TODO: insert a few keyframes to ensure default behaviour? + } + } +} /* Tools ------------------------------------------- */ diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 331e2d0894e..ac195f42f03 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -54,6 +54,7 @@ #include "BKE_action.h" #include "BKE_constraint.h" #include "BKE_fcurve.h" +#include "BKE_nla.h" #include "BKE_global.h" #include "BKE_utildefines.h" #include "BKE_context.h" @@ -722,9 +723,119 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_ /* ------------------------- Insert Key API ------------------------- */ +/* Secondary Keyframing API call: + * Use this when validation of necessary animation data is not necessary, since an RNA-pointer to the necessary + * data being keyframed, and a pointer to the F-Curve to use have both been provided. + * + * The flag argument is used for special settings that alter the behaviour of + * the keyframe insertion. These include the 'visual' keyframing modes, quick refresh, + * and extra keyframe filtering. + */ +short insert_keyframe_direct (PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, float cfra, short flag) +{ + float curval= 0.0f; + + /* no F-Curve to add keyframe to? */ + if (fcu == NULL) { + printf("ERROR: no F-Curve to add keyframes to \n"); + return 0; + } + + /* if no property given yet, try to validate from F-Curve info */ + if ((ptr.id.data == NULL) && (ptr.data==NULL)) { + printf("ERROR: no RNA-pointer available to retrieve values for keyframing from\n"); + return 0; + } + if (prop == NULL) { + PointerRNA tmp_ptr; + + /* try to get property we should be affecting */ + if ((RNA_path_resolve(&ptr, fcu->rna_path, &tmp_ptr, &prop) == 0) || (prop == NULL)) { + /* property not found... */ + char *idname= (ptr.id.data) ? ((ID *)ptr.id.data)->name : ""; + + printf("Insert Key: Could not insert keyframe, as RNA Path is invalid for the given ID (ID = %s, Path = %s)\n", idname, fcu->rna_path); + return 0; + } + else { + /* property found, so overwrite 'ptr' to make later code easier */ + ptr= tmp_ptr; + } + } + + /* set additional flags for the F-Curve (i.e. only integer values) */ + fcu->flag &= ~(FCURVE_INT_VALUES|FCURVE_DISCRETE_VALUES); + switch (RNA_property_type(prop)) { + case PROP_FLOAT: + /* do nothing */ + break; + case PROP_INT: + /* do integer (only 'whole' numbers) interpolation between all points */ + fcu->flag |= FCURVE_INT_VALUES; + break; + default: + /* do 'discrete' (i.e. enum, boolean values which cannot take any intermediate + * values at all) interpolation between all points + * - however, we must also ensure that evaluated values are only integers still + */ + fcu->flag |= (FCURVE_DISCRETE_VALUES|FCURVE_INT_VALUES); + break; + } + + /* obtain value to give keyframe */ + if ( (flag & INSERTKEY_MATRIX) && + (visualkey_can_use(&ptr, prop)) ) + { + /* visual-keying is only available for object and pchan datablocks, as + * it works by keyframing using a value extracted from the final matrix + * instead of using the kt system to extract a value. + */ + curval= visualkey_get_value(&ptr, prop, fcu->array_index); + } + else { + /* read value from system */ + curval= setting_get_rna_value(&ptr, prop, fcu->array_index); + } + + /* only insert keyframes where they are needed */ + if (flag & INSERTKEY_NEEDED) { + short insert_mode; + + /* check whether this curve really needs a new keyframe */ + insert_mode= new_key_needed(fcu, cfra, curval); + + /* insert new keyframe at current frame */ + if (insert_mode) + insert_vert_fcurve(fcu, cfra, curval, (flag & INSERTKEY_FAST)); + + /* delete keyframe immediately before/after newly added */ + switch (insert_mode) { + case KEYNEEDED_DELPREV: + delete_fcurve_key(fcu, fcu->totvert-2, 1); + break; + case KEYNEEDED_DELNEXT: + delete_fcurve_key(fcu, 1, 1); + break; + } + + /* only return success if keyframe added */ + if (insert_mode) + return 1; + } + else { + /* just insert keyframe */ + insert_vert_fcurve(fcu, cfra, curval, (flag & INSERTKEY_FAST)); + + /* return success */ + return 1; + } + + /* failed */ + return 0; +} + /* Main Keyframing API call: - * Use this when validation of necessary animation data isn't necessary as it - * already exists. It will insert a keyframe using the current value being keyframed. + * Use this when validation of necessary animation data is necessary, since it may not exist yet. * * The flag argument is used for special settings that alter the behaviour of * the keyframe insertion. These include the 'visual' keyframing modes, quick refresh, @@ -744,102 +855,31 @@ short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_ } /* get F-Curve - if no action is provided, keyframe to the default one attached to this ID-block */ - if (act == NULL) + if (act == NULL) { + AnimData *adt= BKE_animdata_from_id(id); + + /* get action to add F-Curve+keyframe to */ act= verify_adt_action(id, 1); + + /* apply NLA-mapping to frame to use (if applicable) */ + cfra= BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP); + } fcu= verify_fcurve(act, group, rna_path, array_index, 1); - /* only continue if we have an F-Curve to add keyframe to */ - if (fcu) { - float curval= 0.0f; + /* apply special time tweaking */ + // XXX check on this stuff... + if (GS(id->name) == ID_OB) { + //Object *ob= (Object *)id; - /* set additional flags for the F-Curve (i.e. only integer values) */ - fcu->flag &= ~(FCURVE_INT_VALUES|FCURVE_DISCRETE_VALUES); - switch (RNA_property_type(prop)) { - case PROP_FLOAT: - /* do nothing */ - break; - case PROP_INT: - /* do integer (only 'whole' numbers) interpolation between all points */ - fcu->flag |= FCURVE_INT_VALUES; - break; - default: - /* do 'discrete' (i.e. enum, boolean values which cannot take any intermediate - * values at all) interpolation between all points - * - however, we must also ensure that evaluated values are only integers still - */ - fcu->flag |= (FCURVE_DISCRETE_VALUES|FCURVE_INT_VALUES); - break; - } - - /* apply special time tweaking */ - // XXX check on this stuff... - if (GS(id->name) == ID_OB) { - //Object *ob= (Object *)id; - - /* apply NLA-scaling (if applicable) */ - //cfra= get_action_frame(ob, cfra); - - /* ancient time-offset cruft */ - //if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) { - // /* actually frametofloat calc again! */ - // cfra-= give_timeoffset(ob)*scene->r.framelen; - //} - } - - /* obtain value to give keyframe */ - if ( (flag & INSERTKEY_MATRIX) && - (visualkey_can_use(&ptr, prop)) ) - { - /* visual-keying is only available for object and pchan datablocks, as - * it works by keyframing using a value extracted from the final matrix - * instead of using the kt system to extract a value. - */ - curval= visualkey_get_value(&ptr, prop, array_index); - } - else { - /* read value from system */ - curval= setting_get_rna_value(&ptr, prop, array_index); - } - - /* only insert keyframes where they are needed */ - if (flag & INSERTKEY_NEEDED) { - short insert_mode; - - /* check whether this curve really needs a new keyframe */ - insert_mode= new_key_needed(fcu, cfra, curval); - - /* insert new keyframe at current frame */ - if (insert_mode) - insert_vert_fcurve(fcu, cfra, curval, (flag & INSERTKEY_FAST)); - - /* delete keyframe immediately before/after newly added */ - switch (insert_mode) { - case KEYNEEDED_DELPREV: - delete_fcurve_key(fcu, fcu->totvert-2, 1); - break; - case KEYNEEDED_DELNEXT: - delete_fcurve_key(fcu, 1, 1); - break; - } - - /* only return success if keyframe added */ - if (insert_mode) - return 1; - } - else { - /* just insert keyframe */ - insert_vert_fcurve(fcu, cfra, curval, (flag & INSERTKEY_FAST)); - - /* return success */ - return 1; - } + /* ancient time-offset cruft */ + //if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) { + // /* actually frametofloat calc again! */ + // cfra-= give_timeoffset(ob)*scene->r.framelen; + //} } - /* no F-Curve to add keyframes to */ - printf("ERROR: no F-Curve to add keyframes to \n"); - - /* return failure */ - return 0; + /* insert keyframe */ + return insert_keyframe_direct(ptr, prop, fcu, cfra, flag); } /* ************************************************** */ @@ -864,6 +904,9 @@ short delete_keyframe (ID *id, bAction *act, const char group[], const char rna_ /* if no action is provided, use the default one attached to this ID-block */ AnimData *adt= BKE_animdata_from_id(id); act= adt->action; + + /* apply NLA-mapping to frame to use (if applicable) */ + cfra= BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP); } /* we don't check the validity of the path here yet, but it should be ok... */ fcu= verify_fcurve(act, group, rna_path, array_index, 0); @@ -877,9 +920,6 @@ short delete_keyframe (ID *id, bAction *act, const char group[], const char rna_ if (GS(id->name) == ID_OB) { //Object *ob= (Object *)id; - /* apply NLA-scaling (if applicable) */ - // cfra= get_action_frame(ob, cfra); - /* ancient time-offset cruft */ //if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) { // /* actually frametofloat calc again! */ @@ -1266,6 +1306,13 @@ static int insert_key_button_exec (bContext *C, wmOperator *op) MEM_freeN(path); } + else if (ptr.type == &RNA_NlaStrip) { + /* handle special vars for NLA-strips */ + NlaStrip *strip= (NlaStrip *)ptr.data; + FCurve *fcu= list_find_fcurve(&strip->fcurves, RNA_property_identifier(prop), 0); + + success+= insert_keyframe_direct(ptr, prop, fcu, cfra, 0); + } else { if (G.f & G_DEBUG) printf("Button Insert-Key: no path to property \n"); diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index 9d063910aa9..ffebb42ce99 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -43,6 +43,9 @@ struct bConstraint; struct bContext; struct wmOperatorType; +struct PointerRNA; +struct PropertyRNA; + /* ************ Keyframing Management **************** */ /* Get (or add relevant data to be able to do so) the Active Action for the given @@ -69,6 +72,16 @@ int insert_bezt_fcurve(struct FCurve *fcu, struct BezTriple *bezt); */ void insert_vert_fcurve(struct FCurve *fcu, float x, float y, short flag); +/* -------- */ + +/* Secondary Keyframing API calls: + * Use this to insert a keyframe using the current value being keyframed, in the + * nominated F-Curve (no creation of animation data performed). Returns success. + */ +short insert_keyframe_direct(struct PointerRNA ptr, struct PropertyRNA *prop, struct FCurve *fcu, float cfra, short flag); + + + /* -------- */ /* Main Keyframing API calls: diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 38ac59cbc9e..d09cc6a1e53 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -271,7 +271,7 @@ static void nla_panel_actclip(const bContext *C, Panel *pa) uiItemR(row, NULL, ICON_ACTION, &strip_ptr, "action", 0, 0, 0); /* action extents */ - // XXX custom names were used here... probably not necessary in future? + // XXX custom names were used here (to avoid the prefixes)... probably not necessary in future? column= uiLayoutColumn(layout, 1); uiItemL(column, "Action Extents:", 0); uiItemR(column, "Start Frame", 0, &strip_ptr, "action_start_frame", 0, 0, 0); @@ -289,7 +289,7 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) { PointerRNA strip_ptr; uiLayout *layout= pa->layout; - uiLayout *column; + uiLayout *column, *subcolumn; uiBlock *block; /* check context and also validity of pointer */ @@ -300,14 +300,19 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); column= uiLayoutColumn(layout, 1); - uiLayoutSetEnabled(column, 0); // XXX for now, don't allow user to edit uiItemR(column, NULL, 0, &strip_ptr, "animated_influence", 0, 0, 0); - uiItemR(column, NULL, 0, &strip_ptr, "influence", 0, 0, 0); + subcolumn= uiLayoutColumn(column, 1); + uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "animated_influence")); + uiItemR(subcolumn, NULL, 0, &strip_ptr, "influence", 0, 0, 0); + + column= uiLayoutColumn(layout, 1); - uiLayoutSetEnabled(column, 0); // XXX for now, don't allow user to edit uiItemR(column, NULL, 0, &strip_ptr, "animated_time", 0, 0, 0); - uiItemR(column, NULL, 0, &strip_ptr, "strip_time", 0, 0, 0); + + subcolumn= uiLayoutColumn(column, 1); + uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "animated_time")); + uiItemR(subcolumn, NULL, 0, &strip_ptr, "strip_time", 0, 0, 0); } /* F-Modifiers for active NLA-Strip */ diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index b0149d29e69..219feaad09b 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -40,6 +40,9 @@ #include #include +/* needed for some of the validation stuff... */ +#include "BKE_nla.h" + /* temp constant defined for these funcs only... */ #define NLASTRIP_MIN_LEN_THRESH 0.1f @@ -196,6 +199,32 @@ static void rna_NlaStrip_action_end_frame_set(PointerRNA *ptr, float value) data->actend= value; } +static void rna_NlaStrip_animated_influence_set(PointerRNA *ptr, int value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + + if (value) { + /* set the flag, then make sure a curve for this exists */ + data->flag |= NLASTRIP_FLAG_USR_INFLUENCE; + BKE_nlastrip_validate_fcurves(data); + } + else + data->flag &= ~NLASTRIP_FLAG_USR_INFLUENCE; +} + +static void rna_NlaStrip_animated_time_set(PointerRNA *ptr, int value) +{ + NlaStrip *data= (NlaStrip*)ptr->data; + + if (value) { + /* set the flag, then make sure a curve for this exists */ + data->flag |= NLASTRIP_FLAG_USR_TIME; + BKE_nlastrip_validate_fcurves(data); + } + else + data->flag &= ~NLASTRIP_FLAG_USR_TIME; +} + #else void rna_def_nlastrip(BlenderRNA *brna) @@ -321,14 +350,15 @@ void rna_def_nlastrip(BlenderRNA *brna) prop= RNA_def_property(srna, "strip_time", PROP_FLOAT, PROP_NONE); RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate."); + // TODO: should the animated_influence/time settings be animatable themselves? prop= RNA_def_property(srna, "animated_influence", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, not editable RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE); + RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_influence_set"); RNA_def_property_ui_text(prop, "Animated Influence", "Influence setting is controlled by an F-Curve rather than automatically determined."); prop= RNA_def_property(srna, "animated_time", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, not editable - RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_TIME); + RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_time_set"); RNA_def_property_ui_text(prop, "Animated Strip Time", "Strip time is controlled by an F-Curve rather than automatically determined."); /* settings */ From 665938191df7e831ba22f101b00ab9b99bdde654 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 8 Jul 2009 06:32:52 +0000 Subject: [PATCH 141/512] NLA SoC: Minor UI-Tweaks * When influence/time for NLA-strips are animated, settings in the other panels which used to control these are now greyed out to show that they won't have any impact over the result. * NKey panel for Graph Editor now opens on Right-Hand Side, just like for NLA Editor. The small sub-region above the Channels region was too troublesome to work with. --- source/blender/editors/space_graph/space_graph.c | 16 ++++++++-------- source/blender/editors/space_nla/nla_buttons.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index b17861dc679..2f3700bc733 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -72,19 +72,19 @@ ARegion *graph_has_buttons_region(ScrArea *sa) if(ar->regiontype==RGN_TYPE_UI) return ar; - /* add subdiv level; after channel */ + /* add subdiv level; after main window */ for(ar= sa->regionbase.first; ar; ar= ar->next) - if(ar->regiontype==RGN_TYPE_CHANNELS) + if(ar->regiontype==RGN_TYPE_WINDOW) break; /* is error! */ if(ar==NULL) return NULL; - arnew= MEM_callocN(sizeof(ARegion), "buttons for view3d"); + arnew= MEM_callocN(sizeof(ARegion), "buttons for nla"); BLI_insertlinkafter(&sa->regionbase, ar, arnew); arnew->regiontype= RGN_TYPE_UI; - arnew->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV; + arnew->alignment= RGN_ALIGN_RIGHT; arnew->flag = RGN_FLAG_HIDDEN; @@ -117,7 +117,7 @@ static SpaceLink *graph_new(const bContext *C) ar->alignment= RGN_ALIGN_BOTTOM; /* channels */ - ar= MEM_callocN(sizeof(ARegion), "main area for graphedit"); + ar= MEM_callocN(sizeof(ARegion), "channels area for graphedit"); BLI_addtail(&sipo->regionbase, ar); ar->regiontype= RGN_TYPE_CHANNELS; @@ -126,11 +126,11 @@ static SpaceLink *graph_new(const bContext *C) ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); /* ui buttons */ - ar= MEM_callocN(sizeof(ARegion), "main area for graphedit"); + ar= MEM_callocN(sizeof(ARegion), "buttons area for graphedit"); BLI_addtail(&sipo->regionbase, ar); ar->regiontype= RGN_TYPE_UI; - ar->alignment= RGN_ALIGN_TOP|RGN_SPLIT_PREV; + ar->alignment= RGN_ALIGN_RIGHT; ar->flag = RGN_FLAG_HIDDEN; /* main area */ @@ -566,7 +566,7 @@ void ED_spacetype_ipo(void) /* regions: UI buttons */ art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region"); art->regionid = RGN_TYPE_UI; - art->minsizey= 200; + art->minsizex= 200; art->keymapflag= ED_KEYMAP_UI; art->listener= graph_region_listener; art->init= graph_buttons_area_init; diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index d09cc6a1e53..c0a2b9476e3 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -236,14 +236,17 @@ static void nla_panel_properties(const bContext *C, Panel *pa) * - blend in/out can only be set when autoblending is off */ column= uiLayoutColumn(layout, 1); + uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_influence")==0); uiItemR(column, NULL, 0, &strip_ptr, "auto_blending", 0, 0, 0); // XXX as toggle? - subcol= uiLayoutColumn(column, 1); - uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "auto_blending")==0); - uiItemR(subcol, NULL, 0, &strip_ptr, "blend_in", 0, 0, 0); - uiItemR(subcol, NULL, 0, &strip_ptr, "blend_out", 0, 0, 0); + + subcol= uiLayoutColumn(column, 1); + uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "auto_blending")==0); + uiItemR(subcol, NULL, 0, &strip_ptr, "blend_in", 0, 0, 0); + uiItemR(subcol, NULL, 0, &strip_ptr, "blend_out", 0, 0, 0); /* settings */ column= uiLayoutColumn(layout, 1); + uiLayoutSetActive(column, !(RNA_boolean_get(&strip_ptr, "animated_influence") || RNA_boolean_get(&strip_ptr, "animated_time"))); uiItemL(column, "Playback Settings:", 0); uiItemR(column, NULL, 0, &strip_ptr, "muted", 0, 0, 0); uiItemR(column, NULL, 0, &strip_ptr, "reversed", 0, 0, 0); @@ -279,6 +282,7 @@ static void nla_panel_actclip(const bContext *C, Panel *pa) /* action usage */ column= uiLayoutColumn(layout, 1); + uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_time")==0); uiItemL(column, "Playback Settings:", 0); uiItemR(column, NULL, 0, &strip_ptr, "scale", 0, 0, 0); uiItemR(column, NULL, 0, &strip_ptr, "repeat", 0, 0, 0); From b76331a0aa4827cd148d3df71fd714e542050f03 Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Wed, 8 Jul 2009 07:02:59 +0000 Subject: [PATCH 142/512] trunk bugfix: added missing undo push. --- source/blender/src/editaction.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/src/editaction.c b/source/blender/src/editaction.c index e230c97f010..ae2e03c6b20 100644 --- a/source/blender/src/editaction.c +++ b/source/blender/src/editaction.c @@ -2558,6 +2558,8 @@ static void numbuts_action () else gpl->flag &= ~GP_LAYER_LOCKED; } + BIF_undo_push("Channel Properties"); + allqueue(REDRAWACTION, 0); allspace(REMAKEIPO, 0); allqueue(REDRAWIPO, 0); From 5f5ddb00146884d28414811bc92311af56d55904 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 8 Jul 2009 12:30:09 +0000 Subject: [PATCH 143/512] NLA SoC: Little optimisation + Drawing bugfix * Text labels on NLA-Strips should now draw properly for most short-strips now. Previously, the padding on the text was a bit too extreme, so for very short strips (less than 4 frames or so), the text was often pushed down into the bottom-right corner of view. * Optimised the keyframe-highlighting code for buttons a bit. Replaced the custom linear-search with the binary-search used when inserting keyframes (and for the 3d-view keyframe-indicator). There should be some theoretical improvements due to this at least... --- source/blender/blenkernel/BKE_fcurve.h | 3 -- source/blender/blenkernel/intern/fcurve.c | 14 ------- source/blender/editors/animation/keyframing.c | 41 ++++++++++++------- .../blender/editors/include/ED_keyframing.h | 5 +++ .../editors/interface/interface_anim.c | 4 +- source/blender/editors/space_nla/nla_draw.c | 15 +++---- 6 files changed, 43 insertions(+), 39 deletions(-) diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index 4dcb08dc0df..cda64c6b241 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -153,9 +153,6 @@ void copy_fcurves(ListBase *dst, ListBase *src); /* find matching F-Curve in the given list of F-Curves */ struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index); -/* test if there is a keyframe at cfra */ -short on_keyframe_fcurve(struct FCurve *fcu, float cfra); - /* get the time extents for F-Curve */ void calc_fcurve_range(struct FCurve *fcu, float *min, float *max); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 4c2ba61fc71..ebd94b94f8c 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -200,20 +200,6 @@ FCurve *list_find_fcurve (ListBase *list, const char rna_path[], const int array return NULL; } -short on_keyframe_fcurve(FCurve *fcu, float cfra) -{ - BezTriple *bezt; - unsigned i; - - bezt= fcu->bezt; - for (i=0; itotvert; i++, bezt++) { - if (IS_EQ(bezt->vec[1][0], cfra)) - return 1; - } - - return 0; -} - /* Calculate the extents of F-Curve's data */ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax) { diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index ac195f42f03..dd4c4c23f1e 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1430,6 +1430,31 @@ void ANIM_OT_delete_keyframe_button (wmOperatorType *ot) /* --------------- API/Per-Datablock Handling ------------------- */ +/* Checks if some F-Curve has a keyframe for a given frame */ +short fcurve_frame_has_keyframe (FCurve *fcu, float frame, short filter) +{ + /* quick sanity check */ + if (fcu == NULL) + return 0; + + /* we either include all regardless of muting, or only non-muted */ + if ((filter & ANIMFILTER_KEYS_MUTED) || (fcu->flag & FCURVE_MUTED)==0) { + short replace = -1; + int i = binarysearch_bezt_index(fcu->bezt, frame, fcu->totvert, &replace); + + /* binarysearch_bezt_index will set replace to be 0 or 1 + * - obviously, 1 represents a match + */ + if (replace) { + /* sanity check: 'i' may in rare cases exceed arraylen */ + if ((i >= 0) && (i < fcu->totvert)) + return 1; + } + } + + return 0; +} + /* Checks whether an Action has a keyframe for a given frame * Since we're only concerned whether a keyframe exists, we can simply loop until a match is found... */ @@ -1451,20 +1476,8 @@ short action_frame_has_keyframe (bAction *act, float frame, short filter) for (fcu= act->curves.first; fcu; fcu= fcu->next) { /* only check if there are keyframes (currently only of type BezTriple) */ if (fcu->bezt && fcu->totvert) { - /* we either include all regardless of muting, or only non-muted */ - if ((filter & ANIMFILTER_KEYS_MUTED) || (fcu->flag & FCURVE_MUTED)==0) { - short replace = -1; - int i = binarysearch_bezt_index(fcu->bezt, frame, fcu->totvert, &replace); - - /* binarysearch_bezt_index will set replace to be 0 or 1 - * - obviously, 1 represents a match - */ - if (replace) { - /* sanity check: 'i' may in rare cases exceed arraylen */ - if ((i >= 0) && (i < fcu->totvert)) - return 1; - } - } + if (fcurve_frame_has_keyframe(fcu, frame, filter)) + return 1; } } diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index ffebb42ce99..503d71b0d3e 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -199,6 +199,11 @@ void ANIM_OT_remove_driver_button(struct wmOperatorType *ot); /* ************ Keyframe Checking ******************** */ +/* Lesser Keyframe Checking API call: + * - Used for the buttons to check for keyframes... + */ +short fcurve_frame_has_keyframe(struct FCurve *fcu, float frame, short filter); + /* Main Keyframe Checking API call: * Checks whether a keyframe exists for the given ID-block one the given frame. * - It is recommended to call this method over the other keyframe-checkers directly, diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 4a26db29160..be4087de525 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -18,6 +18,8 @@ #include "RNA_access.h" #include "RNA_types.h" +#include "ED_keyframing.h" + #include "UI_interface.h" #include "WM_api.h" @@ -47,7 +49,7 @@ void ui_but_anim_flag(uiBut *but, float cfra) if (fcu) { but->flag |= UI_BUT_ANIMATED; - if (on_keyframe_fcurve(fcu, cfra)) + if (fcurve_frame_has_keyframe(fcu, cfra, 0)) but->flag |= UI_BUT_ANIMATED_KEY; } } diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 7b9f2faf08a..bbb666d01cc 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -291,6 +291,9 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); + /* draw influence 'curve' */ + // TODO: + /* draw strip outline * - color used here is to indicate active vs non-active */ @@ -378,11 +381,9 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View case NLASTRIP_TYPE_CLIP: /* Action-Clip (default) */ default: - if (strip->act) - sprintf(str, "%d | Act: %s | %.2f %s %.2f", - index, strip->act->id.name+2, strip->start, dir, strip->end); - else - sprintf(str, "%d | Act: ", index); // xxx... need a better format? + sprintf(str, "%d | Act: %s | %.2f %s %.2f", + index, ((strip->act)?strip->act->id.name+2:""), + strip->start, dir, strip->end); break; } @@ -396,9 +397,9 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View * - padding of 2 'units' on either side */ // TODO: make this centered? - rect.xmin= strip->start + 2; + rect.xmin= strip->start + 0.5f; rect.ymin= yminc; - rect.xmax= strip->end - 2; + rect.xmax= strip->end - 0.5f; rect.ymax= ymaxc; /* add this string to the cache of texts to draw*/ From 1f3756d7f6bb371aa86d7033eeb89f8748f1a831 Mon Sep 17 00:00:00 2001 From: Remigiusz Fiedler Date: Wed, 8 Jul 2009 22:37:49 +0000 Subject: [PATCH 144/512] mingw-config.py prepared for work with python 2.5 and 2.6 controlled by only one parameter: BF_PYTHON_VERSION. It needs the files: libpython25.a and libpython26.a to be copied to \\lib\windows\python\lib\ --- config/win32-mingw-config.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index a102c423fb5..f2a336a72fa 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -6,12 +6,16 @@ BF_VERSE_INCLUDE = "#extern/verse/dist" BF_PYTHON = LIBDIR + '/python' BF_PYTHON_VERSION = '2.5' +#BF_PYTHON_VERSION = '2.6' WITH_BF_STATICPYTHON = False BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' BF_PYTHON_BINARY = 'python' -BF_PYTHON_LIB = 'python25' -BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/lib25_vs2005' -BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/lib25_vs2005/libpython25.a' +#BF_PYTHON_LIB = 'python25' +#BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/lib25_vs2005' +#BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/lib25_vs2005/libpython25.a' +BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION[0]}${BF_PYTHON_VERSION[2]}' +BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib' +BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/libpython${BF_PYTHON_VERSION[0]}${BF_PYTHON_VERSION[2]}.a' WITH_BF_OPENAL = True WITH_BF_STATICOPENAL = False From 518911e78c2ae4511cbb9261c5cca410c0a77d73 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 9 Jul 2009 01:04:42 +0000 Subject: [PATCH 145/512] NLA SoC: Assorted cleanups * Some cleanups aimed at giving some (neglible) speedups * Preparation for NLA-Strip keyframes to be editable --- source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenkernel/intern/anim_sys.c | 8 ++-- source/blender/blenkernel/intern/nla.c | 41 ++++++++++++++++++- .../editors/interface/interface_anim.c | 10 +++-- source/blender/makesdna/DNA_anim_types.h | 2 + 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 7fdff7e41f7..04d4b0f8da2 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -83,6 +83,8 @@ struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); +short BKE_nlatrack_has_animated_strips(struct NlaTrack *nlt); +short BKE_nlatracks_have_animated_strips(ListBase *tracks); void BKE_nlastrip_validate_fcurves(struct NlaStrip *strip); /* ............ */ diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 1037b2fd15d..ebe3d28cb21 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -392,10 +392,10 @@ void BKE_keyingsets_free (ListBase *list) short animsys_remap_path (AnimMapper *remap, char *path, char **dst) { /* is there a valid remapping table to use? */ - if (remap) { + //if (remap) { /* find a matching entry... to use to remap */ // ...TODO... - } + //} /* nothing suitable found, so just set dst to look at path (i.e. no alloc/free needed) */ *dst= path; @@ -521,7 +521,6 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim short ok= 0; /* check if this driver's curve should be skipped */ - // FIXME: maybe we shouldn't check for muted, though that would make things more confusing, as there's already too many ways to disable? if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) { /* check if driver itself is tagged for recalculation */ @@ -1185,6 +1184,9 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) ListBase echannels= {NULL, NULL}; NlaEvalStrip *nes; + // TODO: need to zero out all channels used, otherwise we have problems with threadsafety + // and also when the user jumps between different times instead of moving sequentially... + /* 1. get the stack of strips to evaluate at current time (influence calculated here) */ for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next, track_index++) { /* if tweaking is on and this strip is the tweaking track, stop on this one */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 217444d16d2..c697f639021 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -926,7 +926,6 @@ void BKE_nlatrack_set_active (ListBase *tracks, NlaTrack *nlt_a) nlt_a->flag |= NLATRACK_ACTIVE; } - /* Check if there is any space in the given track to add a strip of the given length */ short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end) { @@ -1050,6 +1049,46 @@ short nlastrip_is_first (AnimData *adt, NlaStrip *strip) return 1; } +/* Animated Strips ------------------------------------------- */ + +/* Check if the given NLA-Track has any strips with own F-Curves */ +short BKE_nlatrack_has_animated_strips (NlaTrack *nlt) +{ + NlaStrip *strip; + + /* sanity checks */ + if ELEM(NULL, nlt, nlt->strips.first) + return 0; + + /* check each strip for F-Curves only (don't care about whether the flags are set) */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (strip->fcurves.first) + return 1; + } + + /* none found */ + return 0; +} + +/* Check if given NLA-Tracks have any strips with own F-Curves */ +short BKE_nlatracks_have_animated_strips (ListBase *tracks) +{ + NlaTrack *nlt; + + /* sanity checks */ + if ELEM(NULL, tracks, tracks->first) + return 0; + + /* check each track, stopping on the first hit */ + for (nlt= tracks->first; nlt; nlt= nlt->next) { + if (BKE_nlatrack_has_animated_strips(nlt)) + return 1; + } + + /* none found */ + return 0; +} + /* Validate the NLA-Strips 'control' F-Curves based on the flags set*/ void BKE_nlastrip_validate_fcurves (NlaStrip *strip) { diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index be4087de525..7c439f408ba 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -30,12 +30,15 @@ void ui_but_anim_flag(uiBut *but, float cfra) { but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY|UI_BUT_DRIVEN); - - if(but->rnaprop && but->rnapoin.id.data) { + + /* there must be some RNA-pointer + property combo for this button */ + if (but->rnaprop && but->rnapoin.id.data && + RNA_property_animateable(&but->rnapoin, but->rnaprop)) + { AnimData *adt= BKE_animdata_from_id(but->rnapoin.id.data); FCurve *fcu; char *path; - + if (adt) { if ((adt->action && adt->action->curves.first) || (adt->drivers.first)) { /* XXX this function call can become a performance bottleneck */ @@ -113,7 +116,6 @@ void ui_but_anim_remove_driver(bContext *C) WM_operator_name_call(C, "ANIM_OT_remove_driver_button", WM_OP_INVOKE_DEFAULT, NULL); } -// TODO: refine the logic for adding/removing drivers... void ui_but_anim_menu(bContext *C, uiBut *but) { uiPopupMenu *pup; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index cb9dc8f0bc7..ac8d44a86e6 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -741,6 +741,8 @@ enum { ADT_NLA_EDIT_ON = (1<<2), /* active Action for 'tweaking' does not have mapping applied for editing */ ADT_NLA_EDIT_NOMAP = (1<<3), + /* NLA-Strip F-Curves are expanded in UI */ + ADT_NLA_SKEYS_COLLAPSED = (1<<4), /* drivers expanded in UI */ ADT_DRIVERS_COLLAPSED = (1<<10), From 27d80365fa3abf5db3ebf509d712d947564d8447 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 9 Jul 2009 01:32:13 +0000 Subject: [PATCH 146/512] NLA SoC: Toggle muting operator - HKEY This operator provides a quick way of toggling the muted-status of several strips at the same time. --- source/blender/editors/space_nla/nla_edit.c | 60 +++++++++++++++++++ source/blender/editors/space_nla/nla_header.c | 4 ++ source/blender/editors/space_nla/nla_intern.h | 2 + source/blender/editors/space_nla/nla_ops.c | 5 ++ 4 files changed, 71 insertions(+) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 0198a66949e..262255524db 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -857,6 +857,66 @@ void NLA_OT_split (wmOperatorType *ot) /* *********************************************** */ /* NLA Editing Operations (Modifying) */ +/* ******************** Toggle Muting Operator ************************** */ +/* Toggles whether strips are muted or not */ + +static int nlaedit_toggle_mute_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the editable tracks being shown in the NLA */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* go over all selected strips */ + for (ale= anim_data.first; ale; ale= ale->next) { + NlaTrack *nlt= (NlaTrack *)ale->data; + NlaStrip *strip; + + /* for every selected strip, toggle muting */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + if (strip->flag & NLASTRIP_FLAG_SELECT) { + /* just flip the mute flag for now */ + // TODO: have a pre-pass to check if mute all or unmute all? + strip->flag ^= NLASTRIP_FLAG_MUTED; + } + } + } + + /* free temp data */ + BLI_freelistN(&anim_data); + + /* set notifier that things have changed */ + ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_SCENE, NULL); + + /* done */ + return OPERATOR_FINISHED; +} + +void NLA_OT_mute_toggle (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Muting"; + ot->idname= "NLA_OT_mute_toggle"; + ot->description= "Mute or un-muted selected strips."; + + /* api callbacks */ + ot->exec= nlaedit_toggle_mute_exec; + ot->poll= nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************** Move Strips Up Operator ************************** */ /* Tries to move the selected strips into the track above if possible. */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 9a2806ed9c1..a82056d6efb 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -168,6 +168,10 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); + uiItemO(layout, NULL, 0, "NLA_OT_mute_toggle"); + + uiItemS(layout); + uiItemO(layout, NULL, 0, "NLA_OT_apply_scale"); uiItemO(layout, NULL, 0, "NLA_OT_clear_scale"); diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h index 3d8bfcd0546..7cc09707ba7 100644 --- a/source/blender/editors/space_nla/nla_intern.h +++ b/source/blender/editors/space_nla/nla_intern.h @@ -98,6 +98,8 @@ void NLA_OT_duplicate(wmOperatorType *ot); void NLA_OT_delete(wmOperatorType *ot); void NLA_OT_split(wmOperatorType *ot); +void NLA_OT_mute_toggle(wmOperatorType *ot); + void NLA_OT_move_up(wmOperatorType *ot); void NLA_OT_move_down(wmOperatorType *ot); diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 25fd8db668c..431768c4e02 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -153,6 +153,8 @@ void nla_operatortypes(void) WM_operatortype_append(NLA_OT_delete); WM_operatortype_append(NLA_OT_split); + WM_operatortype_append(NLA_OT_mute_toggle); + WM_operatortype_append(NLA_OT_move_up); WM_operatortype_append(NLA_OT_move_down); @@ -256,6 +258,9 @@ static void nla_keymap_main (wmWindowManager *wm, ListBase *keymap) /* split */ WM_keymap_add_item(keymap, "NLA_OT_split", YKEY, KM_PRESS, 0, 0); + /* toggles */ + WM_keymap_add_item(keymap, "NLA_OT_mute_toggle", HKEY, KM_PRESS, 0, 0); + /* move up */ WM_keymap_add_item(keymap, "NLA_OT_move_up", PAGEUPKEY, KM_PRESS, 0, 0); /* move down */ From f9749ea2e778165cf6e92cc263f5be3a802247fa Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 9 Jul 2009 07:28:45 +0000 Subject: [PATCH 147/512] NLA SoC: Influence of strip now gets drawn as a greyish curve on the strip I'm not quite happy with how this works yet. It looks quite crude, and might be contributing to the clutter here. Ideas on this welcome. --- source/blender/editors/space_nla/nla_draw.c | 69 ++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index bbb666d01cc..7b2b19c19f6 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -58,6 +58,7 @@ #include "BLI_rand.h" #include "BKE_animsys.h" +#include "BKE_fcurve.h" #include "BKE_nla.h" #include "BKE_context.h" #include "BKE_screen.h" @@ -224,6 +225,70 @@ static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float co } } +/* helper call for drawing influence/time control curves for a given NLA-strip */ +static void nla_draw_strip_curves (NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +{ + const float yheight = ymaxc - yminc; + + /* drawing color is simply a light-grey */ + // TODO: is this color suitable? + // XXX nasty hacked color for now... which looks quite bad too... + glColor3f(0.7f, 0.7f, 0.7f); + + /* draw with AA'd line, 2 units thick (it's either 1 or 2 px) */ + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); + glLineWidth(2.0f); + + /* influence -------------------------- */ + if (strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) { + FCurve *fcu= list_find_fcurve(&strip->fcurves, "influence", 0); + float cfra; + + /* plot the curve (over the strip's main region) */ + glBegin(GL_LINE_STRIP); + /* sample at 1 frame intervals, and draw + * - min y-val is yminc, max is y-maxc, so clamp in those regions + */ + for (cfra= strip->start; cfra <= strip->end; cfra += 1.0f) { + float y= evaluate_fcurve(fcu, cfra); // assume this to be in 0-1 range + glVertex2f(cfra, ((y*yheight)+yminc)); + } + glEnd(); // GL_LINE_STRIP + } + else { + /* use blend in/out values only if both aren't zero */ + if ((IS_EQ(strip->blendin, 0.0f) && IS_EQ(strip->blendout, 0.0f))==0) { + glBegin(GL_LINE_STRIP); + /* start of strip - if no blendin, start straight at 1, otherwise from 0 to 1 over blendin frames */ + if (IS_EQ(strip->blendin, 0.0f) == 0) { + glVertex2f(strip->start, yminc); + glVertex2f(strip->start + strip->blendin, ymaxc); + } + else + glVertex2f(strip->start, ymaxc); + + /* end of strip */ + if (IS_EQ(strip->blendout, 0.0f) == 0) { + glVertex2f(strip->end - strip->blendout, ymaxc); + glVertex2f(strip->end, yminc); + } + else + glVertex2f(strip->end, ymaxc); + glEnd(); // GL_LINE_STRIP + } + } + + /* time -------------------------- */ + // XXX do we want to draw this curve? in a different colour too? + + /* turn off AA'd lines */ + glDisable(GL_LINE_SMOOTH); + glDisable(GL_BLEND); + glLineWidth(1.0f); +} + +/* main call for drawing a single NLA-strip */ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) { float color[3]; @@ -291,8 +356,8 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); - /* draw influence 'curve' */ - // TODO: + /* draw strip's control 'curves' */ + nla_draw_strip_curves(strip, v2d, yminc, ymaxc); /* draw strip outline * - color used here is to indicate active vs non-active From c1f3b86f861028c9f1b6e8eedc5d4c07b77205a7 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 9 Jul 2009 13:14:51 +0000 Subject: [PATCH 148/512] NLA SoC: Cleanup of Keyframe Drawing code for DopeSheet * Removed the glaMapping stuff in favour of remapping the keyframes manually. The old code was causing some mess, and not really working well for the DopeSheet with various mappings being used. * Fixed NLA-mapped selection in DopeSheet. Clicking on individual keyframes should now work ok. More testing required though. * Keyframes in DopeSheet are now drawn fully using OpenGL (instead of icons). They look less tactile now, but this may be compensated with in terms of speed? Previously I disabled this type of drawing due to issues with some cards. Enabled again for now, but mainly because I couldn't get the icons to line up nicely in screenspace... * Borderselect in DopeSheet. I've had a look at issues with it selecting the wrong channel's keyframes. The issues don't seem to be solved yet though... will look again tomorrow. --- .../editors/animation/keyframes_draw.c | 288 ++++++++---------- source/blender/editors/armature/poselib.c | 2 +- .../editors/include/ED_keyframes_draw.h | 38 +-- .../editors/space_action/action_draw.c | 96 ++---- .../editors/space_action/action_select.c | 66 ++-- source/blender/editors/space_nla/nla_draw.c | 2 +- .../editors/space_view3d/drawarmature.c | 9 +- 7 files changed, 197 insertions(+), 304 deletions(-) diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 56b1c63db74..f122e045776 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -51,7 +51,6 @@ #include "DNA_armature_types.h" #include "DNA_camera_types.h" #include "DNA_curve_types.h" -#include "DNA_ipo_types.h" #include "DNA_object_types.h" #include "DNA_screen_types.h" #include "DNA_scene_types.h" @@ -64,6 +63,7 @@ #include "DNA_gpencil_types.h" #include "DNA_windowmanager_types.h" #include "DNA_world_types.h" +#include "DNA_view2d_types.h" #include "BKE_action.h" #include "BKE_depsgraph.h" @@ -234,45 +234,82 @@ static ActKeyColumn *cfra_find_actkeycolumn (ListBase *keys, float cframe) return NULL; } -#if 0 // disabled, as some intel cards have problems with this -/* Draw a simple diamond shape with a filled in center (in screen space) */ -static void draw_key_but(int x, int y, short w, short h, int sel) +/* 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 */ +}; + +/* draw a simple diamond shape with OpenGL */ +static void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel) { - int xmin= x, ymin= y; - int xmax= x+w-1, ymax= y+h-1; - int xc= (xmin+xmax)/2, yc= (ymin+ymax)/2; + static GLuint displist1=0; + static GLuint displist2=0; + + /* initialise 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(); + 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(); + glEndList(); + } + + /* adjust view transform before starting */ + glTranslatef(x, y, 0.0f); + glScalef(1.0f/xscale*hsize, hsize, 1.0f); + + /* anti-aliased lines for more consistent appearance */ + glEnable(GL_LINE_SMOOTH); + + /* draw! ---------------------------- */ /* interior - hardcoded colors (for selected and unselected only) */ - if (sel) glColor3ub(0xF1, 0xCA, 0x13); + if (sel) UI_ThemeColorShade(TH_STRIP_SELECT, 50);//glColor3ub(0xF1, 0xCA, 0x13); else glColor3ub(0xE9, 0xE9, 0xE9); + glCallList(displist2); - glBegin(GL_QUADS); - glVertex2i(xc, ymin); - glVertex2i(xmax, yc); - glVertex2i(xc, ymax); - glVertex2i(xmin, yc); - glEnd(); - - - /* outline */ + /* exterior - black frame */ glColor3ub(0, 0, 0); + glCallList(displist1); - glBegin(GL_LINE_LOOP); - glVertex2i(xc, ymin); - glVertex2i(xmax, yc); - glVertex2i(xc, ymax); - glVertex2i(xmin, yc); - glEnd(); + glDisable(GL_LINE_SMOOTH); + + /* restore view transform */ + glScalef(xscale/hsize, 1.0f/hsize, 1.0); + glTranslatef(-x, -y, 0.0f); } -#endif -static void draw_keylist(gla2DDrawInfo *di, ListBase *keys, ListBase *blocks, float ypos) +static void draw_keylist(View2D *v2d, ListBase *keys, ListBase *blocks, float ypos) { ActKeyColumn *ak; ActKeyBlock *ab; + float xscale; glEnable(GL_BLEND); + /* get View2D scaling factor */ + UI_view2d_getscale(v2d, &xscale, NULL); + /* draw keyblocks */ if (blocks) { for (ab= blocks->first; ab; ab= ab->next) { @@ -292,18 +329,13 @@ static void draw_keylist(gla2DDrawInfo *di, ListBase *keys, ListBase *blocks, fl totCurves = (startCurves>endCurves)? endCurves: startCurves; if (ab->totcurve >= totCurves) { - int sc_xa, sc_xb, sc_ya, sc_yb; - - /* get co-ordinates of block */ - gla2DDrawTranslatePt(di, ab->start, ypos, &sc_xa, &sc_ya); - gla2DDrawTranslatePt(di, ab->end, ypos, &sc_xb, &sc_yb); - /* draw block */ if (ab->sel) UI_ThemeColor4(TH_STRIP_SELECT); else UI_ThemeColor4(TH_STRIP); - glRectf((float)sc_xa, (float)sc_ya-3, (float)sc_xb, (float)sc_yb+5); + + glRectf(ab->start, ypos-5, ab->end, ypos+5); } } } @@ -311,18 +343,28 @@ static void draw_keylist(gla2DDrawInfo *di, ListBase *keys, ListBase *blocks, fl /* draw keys */ if (keys) { for (ak= keys->first; ak; ak= ak->next) { - int sc_x, sc_y; + /* draw using OpenGL - uglier but faster */ + // NOTE: a previous version of this didn't work nice for some intel cards + draw_keyframe_shape(ak->cfra, ypos, xscale, 5.0f, (ak->sel & SELECT)); + +#if 0 // OLD CODE + //int sc_x, sc_y; /* get co-ordinate to draw at */ - gla2DDrawTranslatePt(di, ak->cfra, ypos, &sc_x, &sc_y); + //gla2DDrawTranslatePt(di, ak->cfra, ypos, &sc_x, &sc_y); /* draw using icons - old way which is slower but more proven */ - if (ak->sel & SELECT) UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE2, 1.0f); - else UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE3, 1.0f); + //if (ak->sel & SELECT) UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE2, 1.0f); + //else UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE3, 1.0f); +#endif // OLD CODE +#if 0 // NEW NON-WORKING CODE + /* draw icon */ + // FIXME: this draws slightly wrong, as we need to apply some offset for icon, but that depends on scaling + // so for now disabled + //int icon = (ak->sel & SELECT) ? ICON_SPACE2 : ICON_SPACE3; + //UI_icon_draw_aspect(ak->cfra, ypos-6, icon, 1.0f); +#endif // NEW NON-WORKING CODE - /* draw using OpenGL - slightly uglier but faster */ - // NOTE: disabled for now, as some intel cards seem to have problems with this - //draw_key_but(sc_x-5, sc_y-4, 11, 11, (ak->sel & SELECT)); } } @@ -331,81 +373,80 @@ static void draw_keylist(gla2DDrawInfo *di, ListBase *keys, ListBase *blocks, fl /* *************************** Channel Drawing Funcs *************************** */ -void draw_scene_channel(gla2DDrawInfo *di, ActKeysInc *aki, Scene *sce, float ypos) +void draw_scene_channel(View2D *v2d, bDopeSheet *ads, Scene *sce, float ypos) { ListBase keys = {0, 0}; ListBase blocks = {0, 0}; - scene_to_keylist(sce, &keys, &blocks, aki); - draw_keylist(di, &keys, &blocks, ypos); + scene_to_keylist(ads, sce, &keys, &blocks); + draw_keylist(v2d, &keys, &blocks, ypos); BLI_freelistN(&keys); BLI_freelistN(&blocks); } -void draw_object_channel(gla2DDrawInfo *di, ActKeysInc *aki, Object *ob, float ypos) +void draw_object_channel(View2D *v2d, bDopeSheet *ads, Object *ob, float ypos) { ListBase keys = {0, 0}; ListBase blocks = {0, 0}; - ob_to_keylist(ob, &keys, &blocks, aki); - draw_keylist(di, &keys, &blocks, ypos); + ob_to_keylist(ads, ob, &keys, &blocks); + draw_keylist(v2d, &keys, &blocks, ypos); BLI_freelistN(&keys); BLI_freelistN(&blocks); } -void draw_fcurve_channel(gla2DDrawInfo *di, ActKeysInc *aki, FCurve *fcu, float ypos) +void draw_fcurve_channel(View2D *v2d, AnimData *adt, FCurve *fcu, float ypos) { ListBase keys = {0, 0}; ListBase blocks = {0, 0}; - fcurve_to_keylist(fcu, &keys, &blocks, aki); - draw_keylist(di, &keys, &blocks, ypos); + fcurve_to_keylist(adt, fcu, &keys, &blocks); + draw_keylist(v2d, &keys, &blocks, ypos); BLI_freelistN(&keys); BLI_freelistN(&blocks); } -void draw_agroup_channel(gla2DDrawInfo *di, ActKeysInc *aki, bActionGroup *agrp, float ypos) +void draw_agroup_channel(View2D *v2d, AnimData *adt, bActionGroup *agrp, float ypos) { ListBase keys = {0, 0}; ListBase blocks = {0, 0}; - agroup_to_keylist(agrp, &keys, &blocks, aki); - draw_keylist(di, &keys, &blocks, ypos); + agroup_to_keylist(adt, agrp, &keys, &blocks); + draw_keylist(v2d, &keys, &blocks, ypos); BLI_freelistN(&keys); BLI_freelistN(&blocks); } -void draw_action_channel(gla2DDrawInfo *di, ActKeysInc *aki, bAction *act, float ypos) +void draw_action_channel(View2D *v2d, AnimData *adt, bAction *act, float ypos) { ListBase keys = {0, 0}; ListBase blocks = {0, 0}; - action_to_keylist(act, &keys, &blocks, aki); - draw_keylist(di, &keys, &blocks, ypos); + action_to_keylist(adt, act, &keys, &blocks); + draw_keylist(v2d, &keys, &blocks, ypos); BLI_freelistN(&keys); BLI_freelistN(&blocks); } -void draw_gpl_channel(gla2DDrawInfo *di, ActKeysInc *aki, bGPDlayer *gpl, float ypos) +void draw_gpl_channel(View2D *v2d, bDopeSheet *ads, bGPDlayer *gpl, float ypos) { ListBase keys = {0, 0}; - gpl_to_keylist(gpl, &keys, NULL, aki); - draw_keylist(di, &keys, NULL, ypos); + gpl_to_keylist(ads, gpl, &keys, NULL); + draw_keylist(v2d, &keys, NULL, ypos); BLI_freelistN(&keys); } /* *************************** Keyframe List Conversions *************************** */ -void scene_to_keylist(Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void scene_to_keylist(bDopeSheet *ads, Scene *sce, ListBase *keys, ListBase *blocks) { if (sce) { - bDopeSheet *ads= (aki)? (aki->ads) : NULL; AnimData *adt; int filterflag; @@ -421,7 +462,7 @@ void scene_to_keylist(Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc * // TODO: when we adapt NLA system, this needs to be the NLA-scaled version if (adt->action) - action_to_keylist(adt->action, keys, blocks, aki); + action_to_keylist(adt, adt->action, keys, blocks); } /* world animdata */ @@ -430,17 +471,16 @@ void scene_to_keylist(Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc * // TODO: when we adapt NLA system, this needs to be the NLA-scaled version if (adt->action) - action_to_keylist(adt->action, keys, blocks, aki); + action_to_keylist(adt, adt->action, keys, blocks); } } } -void ob_to_keylist(Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void ob_to_keylist(bDopeSheet *ads, Object *ob, ListBase *keys, ListBase *blocks) { Key *key= ob_get_key(ob); if (ob) { - bDopeSheet *ads= (aki)? (aki->ads) : NULL; int filterflag; /* get filterflag */ @@ -451,79 +491,18 @@ void ob_to_keylist(Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki /* Add action keyframes */ if (ob->adt && ob->adt->action) - action_nlascaled_to_keylist(ob->adt, ob->adt->action, keys, blocks, aki); + action_to_keylist(ob->adt, ob->adt->action, keys, blocks); /* Add shapekey keyframes (only if dopesheet allows, if it is available) */ - // TODO: when we adapt NLA system, this needs to be the NLA-scaled version if ((key && key->adt && key->adt->action) && !(filterflag & ADS_FILTER_NOSHAPEKEYS)) - action_to_keylist(key->adt->action, keys, blocks, aki); + action_to_keylist(key->adt, key->adt->action, keys, blocks); -#if 0 // XXX old animation system - /* Add material keyframes (only if dopesheet allows, if it is available) */ - if ((ob->totcol) && !(filterflag & ADS_FILTER_NOMAT)) { - short a; - - for (a=0; atotcol; a++) { - Material *ma= give_current_material(ob, a); - - if (ELEM(NULL, ma, ma->ipo) == 0) - ipo_to_keylist(ma->ipo, keys, blocks, aki); - } - } - - /* Add object data keyframes */ - switch (ob->type) { - case OB_CAMERA: /* ------- Camera ------------ */ - { - Camera *ca= (Camera *)ob->data; - if ((ca->ipo) && !(filterflag & ADS_FILTER_NOCAM)) - ipo_to_keylist(ca->ipo, keys, blocks, aki); - } - break; - case OB_LAMP: /* ---------- Lamp ----------- */ - { - Lamp *la= (Lamp *)ob->data; - if ((la->ipo) && !(filterflag & ADS_FILTER_NOLAM)) - ipo_to_keylist(la->ipo, keys, blocks, aki); - } - break; - case OB_CURVE: /* ------- Curve ---------- */ - { - Curve *cu= (Curve *)ob->data; - if ((cu->ipo) && !(filterflag & ADS_FILTER_NOCUR)) - ipo_to_keylist(cu->ipo, keys, blocks, aki); - } - break; - } -#endif // XXX old animation system + // TODO: restore materials, and object data, etc. } } -static short bezt_in_aki_range (ActKeysInc *aki, BezTriple *bezt) -{ - /* when aki == NULL, we don't care about range */ - if (aki == NULL) - return 1; - - /* if start and end are both 0, then don't care about range */ - if (IS_EQ(aki->start, 0) && IS_EQ(aki->end, 0)) - return 1; - - /* if nla-scaling is in effect, apply appropriate scaling adjustments */ -#if 0 // XXX this was from some buggy code... do not port for now - if (aki->ob) { - float frame= get_action_frame_inv(aki->ob, bezt->vec[1][0]); - return IN_RANGE(frame, aki->start, aki->end); - } - else { - /* check if in range */ - return IN_RANGE(bezt->vec[1][0], aki->start, aki->end); - } -#endif // XXX this was from some buggy code... do not port for now - return 1; -} -void fcurve_to_keylist(FCurve *fcu, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void fcurve_to_keylist(AnimData *adt, FCurve *fcu, ListBase *keys, ListBase *blocks) { BezTriple *bezt; ActKeyColumn *ak, *ak2; @@ -531,15 +510,17 @@ void fcurve_to_keylist(FCurve *fcu, ListBase *keys, ListBase *blocks, ActKeysInc int v; if (fcu && fcu->totvert && fcu->bezt) { + /* apply NLA-mapping (if applicable) */ + if (adt) + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); + /* loop through beztriples, making ActKeys and ActKeyBlocks */ bezt= fcu->bezt; for (v=0; v < fcu->totvert; v++, bezt++) { /* only if keyframe is in range (optimisation) */ - if (bezt_in_aki_range(aki, bezt)) { - add_bezt_to_keycolumnslist(keys, bezt); - if (blocks) add_bezt_to_keyblockslist(blocks, fcu, v); - } + add_bezt_to_keycolumnslist(keys, bezt); + if (blocks) add_bezt_to_keyblockslist(blocks, fcu, v); } /* update the number of curves that elements have appeared in */ @@ -575,65 +556,38 @@ void fcurve_to_keylist(FCurve *fcu, ListBase *keys, ListBase *blocks, ActKeysInc } } } + + /* unapply NLA-mapping if applicable */ + ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } } -void agroup_to_keylist(bActionGroup *agrp, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void agroup_to_keylist(AnimData *adt, bActionGroup *agrp, ListBase *keys, ListBase *blocks) { FCurve *fcu; if (agrp) { /* loop through F-Curves */ for (fcu= agrp->channels.first; fcu && fcu->grp==agrp; fcu= fcu->next) { - fcurve_to_keylist(fcu, keys, blocks, aki); + fcurve_to_keylist(adt, fcu, keys, blocks); } } } -void action_to_keylist(bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void action_to_keylist(AnimData *adt, bAction *act, ListBase *keys, ListBase *blocks) { FCurve *fcu; if (act) { /* loop through F-Curves */ for (fcu= act->curves.first; fcu; fcu= fcu->next) { - fcurve_to_keylist(fcu, keys, blocks, aki); + fcurve_to_keylist(adt, fcu, keys, blocks); } } } -void action_nlascaled_to_keylist(AnimData *adt, bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki) -{ - FCurve *fcu; - AnimData *oldadt= NULL; - - /* although apply and clearing NLA-mapping pre-post creating keylist does impact on performance, - * the effects should be fairly minimal, as we're already going through the keyframes multiple times - * already for blocks too... - */ - if (act) { - /* if 'aki' is provided, store it's current ob to restore later as it might not be the same */ - if (aki) { - oldadt= aki->adt; - aki->adt= adt; - } - - /* loop through F-Curves - * - scaling correction only does times for center-points, so should be faster - */ - for (fcu= act->curves.first; fcu; fcu= fcu->next) { - ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); - fcurve_to_keylist(fcu, keys, blocks, aki); - ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); - } - - /* if 'aki' is provided, restore ob */ - if (aki) - aki->adt= oldadt; - } -} -void gpl_to_keylist(bGPDlayer *gpl, ListBase *keys, ListBase *blocks, ActKeysInc *aki) +void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, ListBase *keys, ListBase *blocks) { bGPDframe *gpf; ActKeyColumn *ak; diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index 8cbfebebff6..fcc1e8f9644 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -227,7 +227,7 @@ void poselib_validate_act (bAction *act) } /* determine which frames have keys */ - action_to_keylist(act, &keys, NULL, NULL); + action_to_keylist(NULL, act, &keys, NULL); /* for each key, make sure there is a correspnding pose */ for (ak= keys.first; ak; ak= ak->next) { diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h index d2269300d24..22ee7a42121 100644 --- a/source/blender/editors/include/ED_keyframes_draw.h +++ b/source/blender/editors/include/ED_keyframes_draw.h @@ -33,13 +33,14 @@ struct AnimData; struct BezTriple; struct FCurve; -struct gla2DDrawInfo; +struct bDopeSheet; struct bAction; struct bActionGroup; struct Object; struct ListBase; struct bGPDlayer; struct Scene; +struct View2D; /* ****************************** Base Structs ****************************** */ @@ -66,34 +67,23 @@ typedef struct ActKeyBlock { short totcurve; } ActKeyBlock; - -/* Inclusion-Range Limiting Struct (optional) */ -typedef struct ActKeysInc { - struct bDopeSheet *ads; /* dopesheet data (for dopesheet mode) */ - struct AnimData *adt; /* owner for NLA-mapping info */ - short actmode; /* mode of the Action Editor (-1 is for NLA) */ - - float start, end; /* frames (global-time) to only consider keys between */ // XXX not used anymore! -} ActKeysInc; - /* ******************************* Methods ****************************** */ /* Channel Drawing */ -void draw_fcurve_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct FCurve *fcu, float ypos); -void draw_agroup_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct bActionGroup *agrp, float ypos); -void draw_action_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct bAction *act, float ypos); -void draw_object_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct Object *ob, float ypos); -void draw_scene_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct Scene *sce, float ypos); -void draw_gpl_channel(struct gla2DDrawInfo *di, ActKeysInc *aki, struct bGPDlayer *gpl, float ypos); +void draw_fcurve_channel(struct View2D *v2d, struct AnimData *adt, struct FCurve *fcu, float ypos); +void draw_agroup_channel(struct View2D *v2d, struct AnimData *adt, struct bActionGroup *agrp, float ypos); +void draw_action_channel(struct View2D *v2d, struct AnimData *adt, struct bAction *act, float ypos); +void draw_object_channel(struct View2D *v2d, struct bDopeSheet *ads, struct Object *ob, float ypos); +void draw_scene_channel(struct View2D *v2d, struct bDopeSheet *ads, struct Scene *sce, float ypos); +void draw_gpl_channel(struct View2D *v2d, struct bDopeSheet *ads, struct bGPDlayer *gpl, float ypos); /* Keydata Generation */ -void fcurve_to_keylist(struct FCurve *fcu, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void agroup_to_keylist(struct bActionGroup *agrp, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void action_to_keylist(struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void action_nlascaled_to_keylist(struct AnimData *adt, struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void ob_to_keylist(struct Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void scene_to_keylist(struct Scene *sce, ListBase *keys, ListBase *blocks, ActKeysInc *aki); -void gpl_to_keylist(struct bGPDlayer *gpl, ListBase *keys, ListBase *blocks, ActKeysInc *aki); +void fcurve_to_keylist(struct AnimData *adt, struct FCurve *fcu, ListBase *keys, ListBase *blocks); +void agroup_to_keylist(struct AnimData *adt, struct bActionGroup *agrp, ListBase *keys, ListBase *blocks); +void action_to_keylist(struct AnimData *adt, struct bAction *act, ListBase *keys, ListBase *blocks); +void ob_to_keylist(struct bDopeSheet *ads, struct Object *ob, ListBase *keys, ListBase *blocks); +void scene_to_keylist(struct bDopeSheet *ads, struct Scene *sce, ListBase *keys, ListBase *blocks); +void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, ListBase *keys, ListBase *blocks); #endif /* ED_KEYFRAMES_DRAW_H */ diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 910b9733bc8..743cc1f128e 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -960,27 +960,8 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* ************************************************************************* */ /* Keyframes */ -ActKeysInc *init_aki_data(bAnimContext *ac, bAnimListElem *ale) -{ - static ActKeysInc aki; - - /* no need to set settings if wrong context */ - if ((ac->data == NULL) || ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET)==0) - return NULL; - - /* if strip is mapped, store settings */ - aki.adt= ANIM_nla_mapping_get(ac, ale); - - if (ac->datatype == ANIMCONT_DOPESHEET) - aki.ads= (bDopeSheet *)ac->data; - else - aki.ads= NULL; - aki.actmode= ac->datatype; - - /* always return pointer... */ - return &aki; -} - +/* extra padding for lengths (to go under scrollers) */ +#define EXTRA_SCROLL_PAD 100.0f /* draw keyframes in each channel */ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) @@ -990,13 +971,11 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) int filter; View2D *v2d= &ar->v2d; + bDopeSheet *ads= &saction->ads; AnimData *adt= NULL; - gla2DDrawInfo *di; - rcti scr_rct; - int act_start, act_end, dummy; + float act_start, act_end, y; int height, items; - float y, sta, end; char col1[3], col2[3]; char col1a[3], col2a[3]; @@ -1006,6 +985,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* get theme colors */ UI_GetThemeColor3ubv(TH_BACK, col2); UI_GetThemeColor3ubv(TH_HILITE, col1); + UI_GetThemeColor3ubv(TH_GROUP, col2a); UI_GetThemeColor3ubv(TH_GROUP_ACTIVE, col1a); @@ -1013,26 +993,14 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) UI_GetThemeColor3ubv(TH_DOPESHEET_CHANNELSUBOB, col2b); /* set view-mapping rect (only used for x-axis), for NLA-scaling mapping with less calculation */ - scr_rct.xmin= ar->winrct.xmin + ar->v2d.mask.xmin; - scr_rct.ymin= ar->winrct.ymin + ar->v2d.mask.ymin; - scr_rct.xmax= ar->winrct.xmin + ar->v2d.hor.xmax; - scr_rct.ymax= ar->winrct.ymin + ar->v2d.mask.ymax; - di= glaBegin2DDraw(&scr_rct, &v2d->cur); /* if in NLA there's a strip active, map the view */ if (ac->datatype == ANIMCONT_ACTION) { adt= ANIM_nla_mapping_get(ac, NULL); - if (adt) - ANIM_nla_mapping_draw(di, adt, 0); - /* start and end of action itself */ - calc_action_range(ac->data, &sta, &end, 0); - gla2DDrawTranslatePt(di, sta, 0.0f, &act_start, &dummy); - gla2DDrawTranslatePt(di, end, 0.0f, &act_end, &dummy); - - if (adt) - ANIM_nla_mapping_draw(di, adt, 1); + // TODO: this has not had scaling applied + calc_action_range(ac->data, &act_start, &act_end, 0); } /* build list of channels to draw */ @@ -1063,7 +1031,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) if ( IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) || IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax) ) { - int frame1_x, channel_y, sel=0; + int sel=0; /* determine if any need to draw channel */ if (ale->datatype != ALE_NONE) { @@ -1102,8 +1070,6 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) } if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET)) { - gla2DDrawTranslatePt(di, v2d->cur.xmin, y, &frame1_x, &channel_y); - switch (ale->type) { case ANIMTYPE_SCENE: case ANIMTYPE_OBJECT: @@ -1139,36 +1105,32 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) } /* draw region twice: firstly backdrop, then the current range */ - glRectf((float)frame1_x, (float)channel_y-ACHANNEL_HEIGHT_HALF, (float)v2d->hor.xmax, (float)channel_y+ACHANNEL_HEIGHT_HALF); + glRectf(v2d->cur.xmin, (float)y-ACHANNEL_HEIGHT_HALF, v2d->cur.xmax+EXTRA_SCROLL_PAD, (float)y+ACHANNEL_HEIGHT_HALF); if (ac->datatype == ANIMCONT_ACTION) - glRectf((float)act_start, (float)channel_y-ACHANNEL_HEIGHT_HALF, (float)act_end, (float)channel_y+ACHANNEL_HEIGHT_HALF); + glRectf(act_start, (float)y-ACHANNEL_HEIGHT_HALF, act_end, (float)y+ACHANNEL_HEIGHT_HALF); } else if (ac->datatype == ANIMCONT_SHAPEKEY) { - gla2DDrawTranslatePt(di, 1, y, &frame1_x, &channel_y); - /* all frames that have a frame number less than one * get a desaturated orange background */ glColor4ub(col2[0], col2[1], col2[2], 0x22); - glRectf(0.0f, (float)channel_y-ACHANNEL_HEIGHT_HALF, (float)frame1_x, (float)channel_y+ACHANNEL_HEIGHT_HALF); + glRectf(0.0f, (float)y-ACHANNEL_HEIGHT_HALF, 1.0f, (float)y+ACHANNEL_HEIGHT_HALF); /* frames one and higher get a saturated orange background */ glColor4ub(col2[0], col2[1], col2[2], 0x44); - glRectf((float)frame1_x, (float)channel_y-ACHANNEL_HEIGHT_HALF, (float)v2d->hor.xmax, (float)channel_y+ACHANNEL_HEIGHT_HALF); + glRectf(1.0f, (float)y-ACHANNEL_HEIGHT_HALF, v2d->cur.xmax+EXTRA_SCROLL_PAD, (float)y+ACHANNEL_HEIGHT_HALF); } else if (ac->datatype == ANIMCONT_GPENCIL) { - gla2DDrawTranslatePt(di, v2d->cur.xmin, y, &frame1_x, &channel_y); - /* 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)channel_y-ACHANNEL_HEIGHT_HALF, (float)frame1_x, (float)channel_y+ACHANNEL_HEIGHT_HALF); + 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((float)frame1_x, (float)channel_y-ACHANNEL_HEIGHT_HALF, (float)v2d->hor.xmax, (float)channel_y+ACHANNEL_HEIGHT_HALF); + glRectf(v2d->cur.xmin, (float)y-ACHANNEL_HEIGHT_HALF, v2d->cur.xmax+EXTRA_SCROLL_PAD, (float)y+ACHANNEL_HEIGHT_HALF); } } } @@ -1195,36 +1157,29 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) { /* check if anything to show for this channel */ if (ale->datatype != ALE_NONE) { - ActKeysInc *aki= init_aki_data(ac, ale); adt= ANIM_nla_mapping_get(ac, ale); - if (adt) - ANIM_nla_mapping_draw(di, adt, 0); - /* draw 'keyframes' for each specific datatype */ switch (ale->datatype) { case ALE_SCE: - draw_scene_channel(di, aki, ale->key_data, y); + draw_scene_channel(v2d, ads, ale->key_data, y); break; case ALE_OB: - draw_object_channel(di, aki, ale->key_data, y); + draw_object_channel(v2d, ads, ale->key_data, y); break; case ALE_ACT: - draw_action_channel(di, aki, ale->key_data, y); + draw_action_channel(v2d, adt, ale->key_data, y); break; case ALE_GROUP: - draw_agroup_channel(di, aki, ale->data, y); + draw_agroup_channel(v2d, adt, ale->data, y); break; case ALE_FCURVE: - draw_fcurve_channel(di, aki, ale->key_data, y); + draw_fcurve_channel(v2d, adt, ale->key_data, y); break; case ALE_GPFRAME: - draw_gpl_channel(di, aki, ale->data, y); + draw_gpl_channel(v2d, ads, ale->data, y); break; } - - if (adt) - ANIM_nla_mapping_draw(di, adt, 1); } } @@ -1236,16 +1191,11 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* black line marking 'current frame' for Time-Slide transform mode */ if (saction->flag & SACTION_MOVING) { - int frame1_x; - - gla2DDrawTranslatePt(di, saction->timeslide, 0, &frame1_x, &dummy); - cpack(0x0); + glColor3f(0.0f, 0.0f, 0.0f); glBegin(GL_LINES); - glVertex2f((float)frame1_x, (float)v2d->mask.ymin - 100); - glVertex2f((float)frame1_x, (float)v2d->mask.ymax); + glVertex2f(saction->timeslide, v2d->cur.ymin-EXTRA_SCROLL_PAD) + glVertex2f(saction->timeslide, v2d->cur.ymax); glEnd(); } - - glaEnd2DDraw(di); } diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 5b87c04b311..8f95f5ea52d 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -223,7 +223,8 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short BeztEditFunc ok_cb, select_cb; View2D *v2d= &ac->ar->v2d; rctf rectf; - float ymin=0, ymax=(float)(-ACHANNEL_HEIGHT); + //float ymin=0, ymax=(float)(-ACHANNEL_HEIGHT); + float ymin=0, ymax=(float)(-ACHANNEL_HEIGHT_HALF); /* convert mouse coordinates to frame ranges and channel coordinates corrected for view pan/zoom */ UI_view2d_region_to_view(v2d, rect.xmin, rect.ymin+2, &rectf.xmin, &rectf.ymin); @@ -743,12 +744,16 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, int filter; View2D *v2d= &ac->ar->v2d; + bDopeSheet *ads = NULL; int channel_index; short found = 0; float selx = 0.0f; float x, y; rctf rectf; + /* get dopesheet info */ + if (ac->datatype == ANIMCONT_DOPESHEET) + ads= ac->data; /* use View2D to determine the index of the channel (i.e a row in the list) where keyframe was */ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y); @@ -773,46 +778,35 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, else { /* found match - must return here... */ AnimData *adt= ANIM_nla_mapping_get(ac, ale); - ActKeysInc *aki= init_aki_data(ac, ale); ActKeyColumn *ak; - float xmin, xmax; - - /* apply NLA-scaling correction? */ - if (adt) { - xmin= BKE_nla_tweakedit_remap(adt, rectf.xmin, NLATIME_CONVERT_UNMAP); - xmax= BKE_nla_tweakedit_remap(adt, rectf.xmax, NLATIME_CONVERT_UNMAP); - } - else { - xmin= rectf.xmin; - xmax= rectf.xmax; - } /* make list of keyframes */ + // TODO: it would be great if we didn't have to apply this to all the keyframes to do this... if (ale->key_data) { switch (ale->datatype) { case ALE_OB: { Object *ob= (Object *)ale->key_data; - ob_to_keylist(ob, &anim_keys, NULL, aki); + ob_to_keylist(ads, ob, &anim_keys, NULL); } break; case ALE_ACT: { bAction *act= (bAction *)ale->key_data; - action_to_keylist(act, &anim_keys, NULL, aki); + action_to_keylist(adt, act, &anim_keys, NULL); } break; case ALE_FCURVE: { FCurve *fcu= (FCurve *)ale->key_data; - fcurve_to_keylist(fcu, &anim_keys, NULL, aki); + fcurve_to_keylist(adt, fcu, &anim_keys, NULL); } break; } } else if (ale->type == ANIMTYPE_GROUP) { bActionGroup *agrp= (bActionGroup *)ale->data; - agroup_to_keylist(agrp, &anim_keys, NULL, aki); + agroup_to_keylist(adt, agrp, &anim_keys, NULL); } else if (ale->type == ANIMTYPE_GPDATABLOCK) { /* cleanup */ @@ -822,13 +816,17 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, } else if (ale->type == ANIMTYPE_GPLAYER) { bGPDlayer *gpl= (bGPDlayer *)ale->data; - gpl_to_keylist(gpl, &anim_keys, NULL, aki); + gpl_to_keylist(ads, gpl, &anim_keys, NULL); } /* loop through keyframes, finding one that was clicked on */ for (ak= anim_keys.first; ak; ak= ak->next) { - if (IN_RANGE(ak->cfra, xmin, xmax)) { - selx= ak->cfra; + if (IN_RANGE(ak->cfra, rectf.xmin, rectf.xmax)) { + /* set the frame to use, and apply inverse-correction for NLA-mapping + * so that the frame will get selected by the selection functiosn without + * requiring to map each frame once again... + */ + selx= BKE_nla_tweakedit_remap(adt, ak->cfra, NLATIME_CONVERT_UNMAP); found= 1; break; } @@ -884,19 +882,21 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, } /* only select keyframes if we clicked on a valid channel and hit something */ - if (ale && found) { - /* apply selection to keyframes */ - if (/*gpl*/0) { - /* grease pencil */ - //select_gpencil_frame(gpl, (int)selx, selectmode); - } - else if (column) { - /* select all keyframes in the same frame as the one we hit on the active channel */ - actkeys_mselect_column(ac, select_mode, selx); - } - else { - /* select the nominated keyframe on the given frame */ - actkeys_mselect_single(ac, ale, select_mode, selx); + if (ale) { + if (found) { + /* apply selection to keyframes */ + if (/*gpl*/0) { + /* grease pencil */ + //select_gpencil_frame(gpl, (int)selx, selectmode); + } + else if (column) { + /* select all keyframes in the same frame as the one we hit on the active channel */ + actkeys_mselect_column(ac, select_mode, selx); + } + else { + /* select the nominated keyframe on the given frame */ + actkeys_mselect_single(ac, ale, select_mode, selx); + } } /* free this channel */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 7b2b19c19f6..3385906979a 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -143,7 +143,7 @@ static void nla_action_draw_keyframes (AnimData *adt, View2D *v2d, float y) glColor3f(0.0f, 0.0f, 0.0f); /* get a list of the keyframes with NLA-scaling applied */ - action_nlascaled_to_keylist(adt, adt->action, &keys, NULL, NULL); + action_to_keylist(adt, adt->action, &keys, NULL); /* get View2D scaling factor */ UI_view2d_getscale(v2d, &xscale, NULL); diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 0827bcaa9ae..c0f71ae6124 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -2173,7 +2173,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec if (adt) { bActionGroup *agrp= action_groups_find_named(adt->action, pchan->name); if (agrp) - agroup_to_keylist(agrp, &keys, NULL, NULL); + agroup_to_keylist(adt, agrp, &keys, NULL); } /* Draw slightly-larger yellow dots at each keyframe */ @@ -2320,18 +2320,17 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, bArmature *arm= ob->data; bPose *posen, *poseo; ListBase keys= {NULL, NULL}; - ActKeysInc aki = {0, 0, 0}; ActKeyColumn *ak, *akn; float start, end, range, colfac, i; int cfrao, flago; - aki.start= start = (float)arm->ghostsf; - aki.end= end = (float)arm->ghostef; + start = (float)arm->ghostsf; + end = (float)arm->ghostef; if (end <= start) return; /* get keyframes - then clip to only within range */ - action_to_keylist(act, &keys, NULL, &aki); + action_to_keylist(adt, act, &keys, NULL); range= 0; for (ak= keys.first; ak; ak= akn) { akn= ak->next; From d7a7081e633f458d3c68f6ccff5376c0340fe42e Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 00:32:13 +0000 Subject: [PATCH 149/512] NLA SoC: Tweaks from feedback from Broken + jez * Renamed the 'blend' blending mode to 'replace', since that's what it usually does * Drawing a darkened rect behind the keyframes shown in the action line -- * Fixed typo made last night which broke compiling * Consolidated all the keyframe-shape drawing code to use a single codebase. Even if we don't ultimately go with OpenGL keyframes, there's always a tidy option for that now. --- source/blender/blenkernel/intern/anim_sys.c | 2 +- source/blender/blenkernel/intern/ipo.c | 2 +- .../editors/animation/keyframes_draw.c | 27 ++-- .../editors/include/ED_keyframes_draw.h | 16 +++ .../editors/space_action/action_draw.c | 2 +- source/blender/editors/space_nla/nla_draw.c | 128 +++++++++--------- source/blender/makesdna/DNA_anim_types.h | 2 +- source/blender/makesrna/intern/rna_nla.c | 2 +- 8 files changed, 102 insertions(+), 79 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index ebe3d28cb21..19337f9de5d 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -859,7 +859,7 @@ static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, shor nec->value *= value; break; - case NLASTRIP_MODE_BLEND: + case NLASTRIP_MODE_REPLACE: default: // TODO: do we really want to blend by default? it seems more uses might prefer add... /* do linear interpolation * - the influence of the accumulated data (elsewhere, that is called dstweight) diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index c3c5483574e..cf7e486613b 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1518,7 +1518,7 @@ static void nlastrips_to_animdata (ID *id, ListBase *strips) /* blending */ strip->blendin= as->blendin; strip->blendout= as->blendout; - strip->blendmode= (as->mode==ACTSTRIPMODE_ADD) ? NLASTRIP_MODE_ADD : NLASTRIP_MODE_BLEND; + strip->blendmode= (as->mode==ACTSTRIPMODE_ADD) ? NLASTRIP_MODE_ADD : NLASTRIP_MODE_REPLACE; if (as->flag & ACTSTRIP_AUTO_BLENDS) strip->flag |= NLASTRIP_FLAG_AUTO_BLENDS; /* assorted setting flags */ diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index f122e045776..1db78beb2cb 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -243,7 +243,7 @@ static const float _unit_diamond_shape[4][2] = { }; /* draw a simple diamond shape with OpenGL */ -static void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel) +void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel, short mode) { static GLuint displist1=0; static GLuint displist2=0; @@ -281,16 +281,21 @@ static void draw_keyframe_shape (float x, float y, float xscale, float hsize, sh /* anti-aliased lines for more consistent appearance */ glEnable(GL_LINE_SMOOTH); - /* draw! ---------------------------- */ + /* draw! */ + if ELEM(mode, KEYFRAME_SHAPE_INSIDE, KEYFRAME_SHAPE_BOTH) { + /* interior - hardcoded colors (for selected and unselected only) */ + if (sel) UI_ThemeColorShade(TH_STRIP_SELECT, 50); + else glColor3ub(0xE9, 0xE9, 0xE9); + + glCallList(displist2); + } - /* interior - hardcoded colors (for selected and unselected only) */ - if (sel) UI_ThemeColorShade(TH_STRIP_SELECT, 50);//glColor3ub(0xF1, 0xCA, 0x13); - else glColor3ub(0xE9, 0xE9, 0xE9); - glCallList(displist2); - - /* exterior - black frame */ - glColor3ub(0, 0, 0); - glCallList(displist1); + if ELEM(mode, KEYFRAME_SHAPE_FRAME, KEYFRAME_SHAPE_BOTH) { + /* exterior - black frame */ + glColor3ub(0, 0, 0); + + glCallList(displist1); + } glDisable(GL_LINE_SMOOTH); @@ -345,7 +350,7 @@ static void draw_keylist(View2D *v2d, ListBase *keys, ListBase *blocks, float yp for (ak= keys->first; ak; ak= ak->next) { /* draw using OpenGL - uglier but faster */ // NOTE: a previous version of this didn't work nice for some intel cards - draw_keyframe_shape(ak->cfra, ypos, xscale, 5.0f, (ak->sel & SELECT)); + draw_keyframe_shape(ak->cfra, ypos, xscale, 5.0f, (ak->sel & SELECT), KEYFRAME_SHAPE_BOTH); #if 0 // OLD CODE //int sc_x, sc_y; diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h index 22ee7a42121..63adcf39c12 100644 --- a/source/blender/editors/include/ED_keyframes_draw.h +++ b/source/blender/editors/include/ED_keyframes_draw.h @@ -67,6 +67,22 @@ typedef struct ActKeyBlock { short totcurve; } ActKeyBlock; + +/* *********************** Keyframe Drawing ****************************** */ + +/* options for keyframe shape drawing */ +typedef enum eKeyframeShapeDrawOpts { + /* only the border */ + KEYFRAME_SHAPE_FRAME = 0, + /* only the inside filling */ + KEYFRAME_SHAPE_INSIDE, + /* the whole thing */ + KEYFRAME_SHAPE_BOTH +} eKeyframeShapeDrawOpts; + +/* draw simple diamond-shape keyframe (with OpenGL) */ +void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel, short mode); + /* ******************************* Methods ****************************** */ /* Channel Drawing */ diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 743cc1f128e..93d061e8bf3 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -1194,7 +1194,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) glColor3f(0.0f, 0.0f, 0.0f); glBegin(GL_LINES); - glVertex2f(saction->timeslide, v2d->cur.ymin-EXTRA_SCROLL_PAD) + glVertex2f(saction->timeslide, v2d->cur.ymin-EXTRA_SCROLL_PAD); glVertex2f(saction->timeslide, v2d->cur.ymax); glEnd(); } diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 3385906979a..6219acf6fae 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -91,66 +91,78 @@ extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, flo /* *********************************************** */ /* Strips */ -/* Keyframe Ghosts ---------------------- */ +/* Action-Line ---------------------- */ -/* helper func - draw keyframe as a frame only */ -static void draw_nla_keyframe_ghost (float x, float y, float xscale, float hsize) +/* get colors for drawing Action-Line + * NOTE: color returned includes fine-tuned alpha! + */ +static void nla_action_get_color (AnimData *adt, bAction *act, float color[4]) { - static GLuint displist=0; - - /* initialise empty diamond shape */ - if (displist == 0) { - const float dist= 1.0f; - - displist= glGenLists(1); - glNewList(displist, GL_COMPILE); - - glBegin(GL_LINE_LOOP); - glVertex2f(0.0f, dist); - glVertex2f(dist, 0.0f); - glVertex2f(0.0f, -dist); - glVertex2f(-dist, 0.0f); - glEnd(); - - glEndList(); + // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) + 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; + } + else { + if (act) { + // reddish color - hardcoded for now + color[0]= 0.8f; + color[1]= 0.2f; + color[2]= 0.0f; + color[3]= 0.4f; + } + else { + // greyish-red color - hardcoded for now + color[0]= 0.6f; + color[1]= 0.5f; + color[2]= 0.5f; + color[3]= 0.3f; + } } - - /* adjust view transform before starting */ - glTranslatef(x, y, 0.0f); - glScalef(1.0f/xscale*hsize, hsize, 1.0f); - - /* anti-aliased lines for more consistent appearance */ - glEnable(GL_LINE_SMOOTH); - - /* draw! */ - glCallList(displist); - - glDisable(GL_LINE_SMOOTH); - - /* restore view transform */ - glScalef(xscale/hsize, 1.0f/hsize, 1.0); - glTranslatef(-x, -y, 0.0f); } /* draw the keyframes in the specified Action */ -static void nla_action_draw_keyframes (AnimData *adt, View2D *v2d, float y) +static void nla_action_draw_keyframes (AnimData *adt, bAction *act, View2D *v2d, float y, float ymin, float ymax) { ListBase keys = {NULL, NULL}; ActKeyColumn *ak; - float xscale; - - /* for now, color is hardcoded to be black */ - glColor3f(0.0f, 0.0f, 0.0f); + float xscale, f1, f2; + float color[4]; /* get a list of the keyframes with NLA-scaling applied */ - action_to_keylist(adt, adt->action, &keys, NULL); + action_to_keylist(adt, act, &keys, NULL); + + if ELEM(NULL, act, keys.first) + return; + + /* draw a darkened region behind the strips + * - get and reset the background color, this time without the alpha to stand out better + */ + nla_action_get_color(adt, act, color); + glColor3fv(color); + /* - draw a rect from the first to the last frame (no extra overlaps for now) + * that is slightly stumpier than the track background (hardcoded 2-units here) + */ + f1= ((ActKeyColumn *)keys.first)->cfra; + f2= ((ActKeyColumn *)keys.last)->cfra; + + glRectf(f1, ymin+2, f2, ymax-2); + /* get View2D scaling factor */ UI_view2d_getscale(v2d, &xscale, NULL); - /* just draw each keyframe as a simple dot (regardless of the selection status) */ + /* for now, color is hardcoded to be black */ + glColor3f(0.0f, 0.0f, 0.0f); + + /* just draw each keyframe as a simple dot (regardless of the selection status) + * - size is 3.0f which is smaller than the editable keyframes, so that there is a distinction + */ for (ak= keys.first; ak; ak= ak->next) - draw_nla_keyframe_ghost(ak->cfra, y, xscale, 3.0f); + draw_keyframe_shape(ak->cfra, y, xscale, 3.0f, 0, KEYFRAME_SHAPE_FRAME); /* free icons */ BLI_freelistN(&keys); @@ -158,6 +170,7 @@ static void nla_action_draw_keyframes (AnimData *adt, View2D *v2d, float y) /* Strips (Proper) ---------------------- */ +/* get colors for drawing NLA-Strips */ static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float color[3]) { if (strip->type == NLASTRIP_TYPE_TRANSITION) { @@ -179,6 +192,7 @@ static void nla_strip_get_color_inside (AnimData *adt, NlaStrip *strip, float co } else if (strip->type == NLASTRIP_TYPE_META) { /* Meta Clip */ + // TODO: should temporary metas get different colours too? if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected - use a bold purple color */ // FIXME: hardcoded temp-hack colors @@ -535,6 +549,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_NLAACTION: { AnimData *adt= BKE_animdata_from_id(ale->id); + float color[4]; /* just draw a semi-shaded rect spanning the width of the viewable area if there's data, * and a second darker rect within which we draw keyframe indicator dots if there's data @@ -542,30 +557,17 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) - if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { - // greenish color (same as tweaking strip) - hardcoded for now - glColor4f(0.3f, 0.95f, 0.1f, 0.3f); - } - else { - if (ale->data) - glColor4f(0.8f, 0.2f, 0.0f, 0.4f); // reddish color - hardcoded for now - else - glColor4f(0.6f, 0.5f, 0.5f, 0.3f); // greyish-red color - hardcoded for now - } - + /* get colors for drawing */ + nla_action_get_color(adt, ale->data, color); + glColor4fv(color); + /* draw slightly shifted up for greater separation from standard channels, * but also slightly shorter for some more contrast when viewing the strips */ - glBegin(GL_QUADS); - glVertex2f(v2d->cur.xmin, yminc+NLACHANNEL_SKIP); - glVertex2f(v2d->cur.xmin, ymaxc-NLACHANNEL_SKIP); - glVertex2f(v2d->cur.xmax, ymaxc-NLACHANNEL_SKIP); - glVertex2f(v2d->cur.xmax, yminc+NLACHANNEL_SKIP); - glEnd(); + glRectf(v2d->cur.xmin, yminc+NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc-NLACHANNEL_SKIP); /* draw keyframes in the action */ - nla_action_draw_keyframes(adt, v2d, y); + nla_action_draw_keyframes(adt, ale->data, v2d, y, yminc+NLACHANNEL_SKIP, ymaxc-NLACHANNEL_SKIP); /* draw 'embossed' lines above and below the strip for effect */ /* white base-lines */ diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index ac8d44a86e6..d71beb8785b 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -464,7 +464,7 @@ typedef struct NlaStrip { /* NLA Strip Blending Mode */ enum { - NLASTRIP_MODE_BLEND = 0, + NLASTRIP_MODE_REPLACE = 0, NLASTRIP_MODE_ADD, NLASTRIP_MODE_SUBTRACT, NLASTRIP_MODE_MULTIPLY, diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 219feaad09b..97f35af1db7 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -239,7 +239,7 @@ void rna_def_nlastrip(BlenderRNA *brna) {NLASTRIP_TYPE_META, "META", 0, "Meta", "NLA Strip acts as a container for adjacent strips."}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_mode_blend_items[] = { - {NLASTRIP_MODE_BLEND, "BLEND", 0, "Blend", "Results of strip and accumulated results are combined in ratio governed by influence."}, + {NLASTRIP_MODE_REPLACE, "REPLACE", 0, "Replace", "Result strip replaces the accumulated results by amount specified by influence."}, {NLASTRIP_MODE_ADD, "ADD", 0, "Add", "Weighted result of strip is added to the accumlated results."}, {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", 0, "Subtract", "Weighted result of strip is removed from the accumlated results."}, {NLASTRIP_MODE_MULTIPLY, "MULITPLY", 0, "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, From b1a9281ed801ae8b2483cd4246880b1009efe955 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 02:04:50 +0000 Subject: [PATCH 150/512] NLA SoC: Fixes for renamed headers (BIF_transform.h -> ED_transform.h) --- source/blender/editors/space_action/action_header.c | 2 +- source/blender/editors/space_graph/graph_header.c | 2 +- source/blender/editors/space_nla/nla_edit.c | 3 +-- source/blender/editors/space_nla/nla_header.c | 5 ++--- source/blender/editors/space_nla/nla_ops.c | 3 +-- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index f4bb5b335a4..f5c85d4d983 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -48,6 +48,7 @@ #include "ED_anim_api.h" #include "ED_screen.h" +#include "ED_transform.h" #include "ED_types.h" #include "ED_util.h" @@ -58,7 +59,6 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BIF_transform.h" #include "UI_interface.h" #include "UI_resources.h" diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 6c12b44f082..05d9b2f7e6c 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -43,6 +43,7 @@ #include "BKE_screen.h" #include "ED_anim_api.h" +#include "ED_transform.h" #include "ED_screen.h" #include "ED_types.h" #include "ED_util.h" @@ -54,7 +55,6 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BIF_transform.h" #include "UI_interface.h" #include "UI_resources.h" diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 262255524db..6cbc9cab253 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -61,8 +61,7 @@ #include "ED_markers.h" #include "ED_space_api.h" #include "ED_screen.h" - -#include "BIF_transform.h" +#include "ED_transform.h" #include "RNA_access.h" #include "RNA_define.h" diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index a82056d6efb..8e4c71b9f80 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -53,11 +53,12 @@ #include "ED_util.h" #include "ED_anim_api.h" +#include "ED_markers.h" #include "ED_space_api.h" #include "ED_screen.h" +#include "ED_transform.h" #include "BIF_gl.h" -#include "BIF_transform.h" #include "RNA_access.h" @@ -68,8 +69,6 @@ #include "UI_resources.h" #include "UI_view2d.h" -#include "ED_markers.h" - #include "nla_intern.h" /* button events */ diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 431768c4e02..ad5f5174690 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -53,8 +53,7 @@ #include "ED_anim_api.h" #include "ED_space_api.h" #include "ED_screen.h" - -#include "BIF_transform.h" +#include "ED_transform.h" #include "WM_api.h" #include "WM_types.h" From 6f0de59c551235d5e26281eca6e172d08ff5eb73 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 10:48:25 +0000 Subject: [PATCH 151/512] NLA SoC: Notifier Fixes for Animation Editors I've gone through all the Animation Editor operators, making sure they send appropriate notifiers, and that these notifiers are handled. * Added a separate category for animation-related notifiers, since the old-style ones attached to specific datatypes only was turning out to be not too feasible. * For now, the focus has been on making sure that all Animation Editors update when there have been any potentially suitable changes at all. Later on, we can filter these more carefully to only take the ones we really need (for optimisation purposes) --- .../blender/editors/animation/anim_channels.c | 77 ++++++++++++++----- source/blender/editors/animation/anim_deps.c | 70 +---------------- .../editors/animation/keyframes_general.c | 2 + source/blender/editors/animation/keyingsets.c | 6 ++ source/blender/editors/include/ED_anim_api.h | 13 ---- .../editors/space_action/action_edit.c | 49 ++++++------ .../editors/space_action/action_select.c | 15 ++-- .../editors/space_action/space_action.c | 9 +++ .../blender/editors/space_graph/graph_edit.c | 62 +++++++-------- .../editors/space_graph/graph_select.c | 13 ++-- .../blender/editors/space_graph/space_graph.c | 6 ++ .../blender/editors/space_nla/nla_channels.c | 53 ++++++++++--- source/blender/editors/space_nla/nla_edit.c | 49 ++++-------- source/blender/editors/space_nla/nla_select.c | 7 +- source/blender/editors/space_nla/space_nla.c | 15 +++- .../editors/space_view3d/space_view3d.c | 9 +++ source/blender/editors/transform/transform.c | 22 ++---- source/blender/windowmanager/WM_types.h | 11 +++ 18 files changed, 260 insertions(+), 228 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 5e9abd42aeb..1cf553f6f26 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -614,8 +614,8 @@ static int animchannels_rearrange_exec(bContext *C, wmOperator *op) mode= RNA_enum_get(op->ptr, "direction"); rearrange_action_channels(&ac, mode); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); return OPERATOR_FINISHED; } @@ -728,8 +728,8 @@ static int animchannels_visibility_toggle_exec(bContext *C, wmOperator *op) /* cleanup */ BLI_freelistN(&anim_data); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); return OPERATOR_FINISHED; } @@ -992,8 +992,8 @@ static int animchannels_setflag_exec(bContext *C, wmOperator *op) /* modify setting */ setflag_anim_channels(&ac, setting, mode, 1); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1101,8 +1101,8 @@ static int animchannels_expand_exec (bContext *C, wmOperator *op) /* modify setting */ setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_ADD, onlysel); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1142,8 +1142,8 @@ static int animchannels_collapse_exec (bContext *C, wmOperator *op) /* modify setting */ setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_CLEAR, onlysel); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1181,8 +1181,8 @@ static int animchannels_deselectall_exec(bContext *C, wmOperator *op) else ANIM_deselect_anim_channels(ac.data, ac.datatype, 1, ACHANNEL_SETFLAG_ADD); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_SELECT, NULL); return OPERATOR_FINISHED; } @@ -1310,6 +1310,9 @@ static int animchannels_borderselect_exec(bContext *C, wmOperator *op) /* apply borderselect animation channels */ borderselect_anim_channels(&ac, &rect, selectmode); + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_SELECT, NULL); + return OPERATOR_FINISHED; } @@ -1344,11 +1347,12 @@ void ANIM_OT_channels_select_border(wmOperatorType *ot) * NOTE: eventually, this should probably be phased out when many of these things are replaced with buttons */ -static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, short selectmode) +static int mouse_anim_channels (bAnimContext *ac, float x, int channel_index, short selectmode) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; + int notifierFlags = 0; /* get the channel that was clicked on */ /* filter channels */ @@ -1362,7 +1366,7 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s printf("Error: animation channel (index = %d) not found in mouse_anim_channels() \n", channel_index); BLI_freelistN(&anim_data); - return; + return 0; } /* selectmode -1 is a special case for ActionGroups only, which selects all of the channels underneath it only... */ @@ -1370,7 +1374,7 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s if ((selectmode == -1) && (ale->type != ANIMTYPE_GROUP)) { /* normal channels should not behave normally in this case */ BLI_freelistN(&anim_data); - return; + return 0; } /* action to take depends on what channel we've got */ @@ -1382,6 +1386,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s if (x < 16) { /* toggle expand */ sce->flag ^= SCE_DS_COLLAPSED; + + notifierFlags |= ND_ANIMCHAN_EDIT; } else { /* set selection status */ @@ -1392,6 +1398,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s else { sce->flag |= SCE_DS_SELECTED; } + + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -1405,6 +1413,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s if (x < 16) { /* toggle expand */ ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX + + notifierFlags |= ND_ANIMCHAN_EDIT; } else { /* set selection status */ @@ -1429,6 +1439,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* xxx should be ED_base_object_activate(), but we need context pointer for that... */ //set_active_base(base); + + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -1436,18 +1448,21 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s { bAction *act= (bAction *)ale->data; act->flag ^= ACT_COLLAPSED; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_FILLDRIVERS: { AnimData *adt= (AnimData* )ale->data; adt->flag ^= ADT_DRIVERS_COLLAPSED; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_FILLMATD: { Object *ob= (Object *)ale->data; ob->nlaflag ^= OB_ADS_SHOWMATS; // XXX + notifierFlags |= ND_ANIMCHAN_EDIT; } break; @@ -1455,36 +1470,42 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s { Material *ma= (Material *)ale->data; ma->flag ^= MA_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSLAM: { Lamp *la= (Lamp *)ale->data; la->flag ^= LA_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCAM: { Camera *ca= (Camera *)ale->data; ca->flag ^= CAM_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCUR: { Curve *cu= (Curve *)ale->data; cu->flag ^= CU_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSSKEY: { Key *key= (Key *)ale->data; key->flag ^= KEYBLOCK_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSWOR: { World *wo= (World *)ale->data; wo->flag ^= WO_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; @@ -1496,18 +1517,22 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s if ((x < (offset+17)) && (agrp->channels.first)) { /* toggle expand */ agrp->flag ^= AGRP_EXPANDED; + notifierFlags |= ND_ANIMCHAN_EDIT; } else if ((x < (offset+32)) && (ac->spacetype==SPACE_IPO)) { /* toggle visibility (of grouped F-Curves in Graph editor) */ agrp->flag ^= AGRP_NOTVISIBLE; + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (x >= (ACHANNEL_NAMEWIDTH-ACHANNEL_BUTTON_WIDTH)) { /* toggle protection/locking */ agrp->flag ^= AGRP_PROTECTED; + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (x >= (ACHANNEL_NAMEWIDTH-2*ACHANNEL_BUTTON_WIDTH)) { /* toggle mute */ agrp->flag ^= AGRP_MUTED; + notifierFlags |= ND_ANIMCHAN_EDIT; } else { /* select/deselect group */ @@ -1536,6 +1561,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* if group is selected now, make group the 'active' one in the visible list */ if (agrp->flag & AGRP_SELECTED) ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP); + + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -1556,16 +1583,20 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s if (x >= (ACHANNEL_NAMEWIDTH-ACHANNEL_BUTTON_WIDTH)) { /* toggle protection (only if there's a toggle there) */ - if (fcu->bezt) + if (fcu->bezt) { fcu->flag ^= FCURVE_PROTECTED; + notifierFlags |= ND_ANIMCHAN_EDIT; + } } else if (x >= (ACHANNEL_NAMEWIDTH-2*ACHANNEL_BUTTON_WIDTH)) { /* toggle mute */ fcu->flag ^= FCURVE_MUTED; + notifierFlags |= ND_ANIMCHAN_EDIT; } else if ((x < (offset+17)) && (ac->spacetype==SPACE_IPO)) { /* toggle visibility */ fcu->flag ^= FCURVE_VISIBLE; + notifierFlags |= ND_ANIMCHAN_EDIT; } else { /* select/deselect */ @@ -1582,6 +1613,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* if F-Curve is selected now, make F-Curve the 'active' one in the visible list */ if (fcu->flag & FCURVE_SELECTED) ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE); + + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -1591,6 +1624,8 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* toggle expand */ gpd->flag ^= GP_DATA_EXPAND; + + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_GPLAYER: @@ -1629,6 +1664,9 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* free channels */ BLI_freelistN(&anim_data); + + /* return notifier flags */ + return notifierFlags; } /* ------------------- */ @@ -1641,6 +1679,7 @@ static int animchannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent * ARegion *ar; View2D *v2d; int mval[2], channel_index; + int notifierFlags = 0; short selectmode; float x, y; @@ -1675,10 +1714,10 @@ static int animchannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent * UI_view2d_listview_view_to_cell(v2d, ACHANNEL_NAMEWIDTH, ACHANNEL_STEP, 0, (float)ACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index); /* handle mouse-click in the relevant channel then */ - mouse_anim_channels(&ac, x, channel_index, selectmode); + notifierFlags= mouse_anim_channels(&ac, x, channel_index, selectmode); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|notifierFlags, NULL); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 1ff2169bf61..13667159fe0 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -77,72 +77,6 @@ void ED_anim_object_flush_update(const bContext *C, Object *ob) } -/* **************************** animation tool notifiers ******************************** */ - -/* Send notifiers on behalf of animation editing tools, based on various context info - * - data_changed: eAnimData_Changed - */ -void ANIM_animdata_send_notifiers (bContext *C, bAnimContext *ac, short data_changed) -{ - /* types of notifiers to send, depends on the editor context */ - switch (ac->datatype) { - case ANIMCONT_DOPESHEET: /* dopesheet */ - case ANIMCONT_FCURVES: /* fcurve editor */ - case ANIMCONT_DRIVERS: /* drivers editor */ // XXX probably this will need separate handling, since these are part of dependency system - { - /* what action was taken */ - switch (data_changed) { - case ANIM_CHANGED_KEYFRAMES_VALUES: - /* keyframe values changed, so transform may have changed */ - // XXX what about other cases? maybe we need general ND_KEYFRAMES or ND_ANIMATION? - WM_event_add_notifier(C, NC_OBJECT|ND_KEYS|ND_TRANSFORM, NULL); - break; - case ANIM_CHANGED_KEYFRAMES_SELECT: - WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL); - break; - case ANIM_CHANGED_CHANNELS: - // XXX err... check available datatypes in dopesheet first? - // FIXME: this currently doesn't work (to update own view) - WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE|ND_OB_SELECT, ac->scene); - WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE|ND_BONE_SELECT, NULL); - break; - } - - // XXX for now, at least update own editor! - ED_area_tag_redraw(CTX_wm_area(C)); - } - break; - - case ANIMCONT_ACTION: /* action editor */ - { - Object *obact= CTX_data_active_object(C); - - switch (data_changed) { - case ANIM_CHANGED_KEYFRAMES_VALUES: - /* keyframe values changed, so transform may have changed */ - // XXX what about other cases? maybe we need general ND_KEYFRAMES or ND_ANIMATION? - WM_event_add_notifier(C, NC_OBJECT|ND_KEYS|ND_TRANSFORM, obact); - break; - case ANIM_CHANGED_KEYFRAMES_SELECT: - WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obact); - break; - case ANIM_CHANGED_CHANNELS: - // XXX err... check available datatypes in dopesheet first? - // FIXME: this currently doesn't work (to update own view) - WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE|ND_BONE_SELECT, obact); - break; - } - - // XXX for now, at least update own editor! - ED_area_tag_redraw(CTX_wm_area(C)); - } - break; - - default: /* some other data... just update area for now */ - ED_area_tag_redraw(CTX_wm_area(C)); - } -} - /* **************************** pose <-> action syncing ******************************** */ /* Summary of what needs to be synced between poses and actions: * 1) Flags @@ -152,6 +86,10 @@ void ANIM_animdata_send_notifiers (bContext *C, bAnimContext *ac, short data_cha * 3) Grouping (only for pose to action for now) */ +/* XXX OBSOLETE CODE WARNING: + * With the Animato system, the code below is somewhat obsolete now... + */ + /* Notifier from Action/Dopesheet (this may be extended to include other things such as Python...) * Channels in action changed, so update pose channels/groups to reflect changes. * diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 48ca06fb73d..6e62b163ca9 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -52,6 +52,8 @@ #include "ED_keyframing.h" #include "ED_keyframes_edit.h" +#include "RNA_access.h" + /* This file contains code for various keyframe-editing tools which are 'destructive' * (i.e. they will modify the order of the keyframes, and change the size of the array). * While some of these tools may eventually be moved out into blenkernel, for now, it is diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 240089d26a6..0f8de7f607d 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -1085,6 +1085,9 @@ int modify_keyframes (bContext *C, ListBase *dsources, bAction *act, KeyingSet * case ID_MA: /* Material Keyframes */ WM_event_add_notifier(C, NC_MATERIAL|ND_KEYS, ksp->id); break; + default: /* Any keyframes */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); + break; } } } @@ -1191,6 +1194,9 @@ int modify_keyframes (bContext *C, ListBase *dsources, bAction *act, KeyingSet * case ID_MA: /* Material Keyframes */ WM_event_add_notifier(C, NC_MATERIAL|ND_KEYS, cks->id); break; + default: /* Any keyframes */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); + break; } } } diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 2745be978d2..cc18c81fe51 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -315,7 +315,6 @@ void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d); struct uiLayout; /* draw a given F-Modifier for some layout/UI-Block */ -// XXX not quite complete yet void ANIM_uiTemplate_fmodifier_draw(struct uiLayout *layout, struct ID *id, ListBase *modifiers, struct FModifier *fcm); /* ************************************************* */ @@ -385,18 +384,6 @@ void ED_anim_object_flush_update(const struct bContext *C, struct Object *ob); void ANIM_action_to_pose_sync(struct Object *ob); void ANIM_pose_to_action_sync(struct Object *ob, struct ScrArea *sa); - -/* what types of animation data was changed (for sending notifiers from animation tools) */ -enum { - ANIM_CHANGED_BOTH= 0, - ANIM_CHANGED_KEYFRAMES_VALUES, - ANIM_CHANGED_KEYFRAMES_SELECT, - ANIM_CHANGED_CHANNELS -} eAnimData_Changed; - -/* Send notifiers on behalf of animation editing tools, based on various context info */ -void ANIM_animdata_send_notifiers(struct bContext *C, bAnimContext *ac, short data_changed); - /* ************************************************* */ /* OPERATORS */ diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 04dda2e6c4c..8d2d342e28a 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -214,7 +214,7 @@ static int actkeys_viewall_exec(bContext *C, wmOperator *op) /* do View2D syncing */ UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); - /* set notifier that things have changed */ + /* just redraw this view */ ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -301,9 +301,6 @@ static int actkeys_copy_exec(bContext *C, wmOperator *op) } } - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); - return OPERATOR_FINISHED; } @@ -345,8 +342,8 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -441,8 +438,8 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -508,8 +505,8 @@ static int actkeys_duplicate_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; // xxx - start transform } @@ -585,8 +582,8 @@ static int actkeys_delete_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -648,8 +645,8 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -772,8 +769,8 @@ static int actkeys_sample_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -847,8 +844,8 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframe properties have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -917,8 +914,8 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframe properties have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -1005,8 +1002,8 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframe properties have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -1169,8 +1166,8 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1285,8 +1282,8 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 8f95f5ea52d..d9e6bb10ceb 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -174,8 +174,8 @@ static int actkeys_deselectall_exec(bContext *C, wmOperator *op) else deselect_action_keys(&ac, 1, SELECT_ADD); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + /* set notifier that keyframe selection have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); return OPERATOR_FINISHED; } @@ -337,6 +337,9 @@ static int actkeys_borderselect_exec(bContext *C, wmOperator *op) /* apply borderselect action */ borderselect_action(&ac, rect, mode, selectmode); + /* set notifier that keyframe selection have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); + return OPERATOR_FINISHED; } @@ -551,8 +554,8 @@ static int actkeys_columnselect_exec(bContext *C, wmOperator *op) else columnselect_action_keys(&ac, mode); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_SELECT); + /* set notifier that keyframe selection have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); return OPERATOR_FINISHED; } @@ -954,8 +957,8 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even mouse_action_keys(&ac, mval, selectmode, column); } - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + /* set notifier that keyframe selection (and channels too) have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT|ND_ANIMCHAN_SELECT, NULL); /* for tweak grab to work */ return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index b4e43c29c3d..0b06499693c 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -288,6 +288,9 @@ static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -314,6 +317,9 @@ static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -344,6 +350,9 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) { /* context changes */ switch (wmn->category) { + case NC_ANIMATION: + ED_area_tag_refresh(sa); + break; case NC_SCENE: /*switch (wmn->data) { case ND_OB_ACTIVE: diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 86970f3565c..1837b6d4ecd 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -474,8 +474,8 @@ static int graphkeys_insertkey_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -532,8 +532,8 @@ static int graphkeys_click_insert_exec (bContext *C, wmOperator *op) /* free temp data */ MEM_freeN(ale); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -644,9 +644,7 @@ static int graphkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); - + /* just return - no operator needed here (no changes) */ return OPERATOR_FINISHED; } @@ -683,8 +681,8 @@ static int graphkeys_paste_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -740,8 +738,8 @@ static int graphkeys_duplicate_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -811,8 +809,8 @@ static int graphkeys_delete_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -872,8 +870,8 @@ static int graphkeys_clean_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -953,8 +951,9 @@ static int graphkeys_bake_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + // NOTE: some distinction between order/number of keyframes and type should be made? + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1079,8 +1078,8 @@ static int graphkeys_sample_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1153,8 +1152,8 @@ static int graphkeys_expo_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframe properties have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -1221,8 +1220,8 @@ static int graphkeys_ipo_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframe properties have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -1309,7 +1308,7 @@ static int graphkeys_handletype_exec(bContext *C, wmOperator *op) ANIM_editkeyframes_refresh(&ac); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_PROP, NULL); return OPERATOR_FINISHED; } @@ -1554,8 +1553,8 @@ static int graphkeys_snap_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1665,8 +1664,8 @@ static int graphkeys_mirror_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1719,8 +1718,8 @@ static int graphkeys_smooth_exec(bContext *C, wmOperator *op) /* validate keyframes after editing */ ANIM_editkeyframes_refresh(&ac); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES); + /* set notifier that keyframes have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); return OPERATOR_FINISHED; } @@ -1810,7 +1809,8 @@ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) ANIM_editkeyframes_refresh(&ac); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + // FIXME: this really isn't the best description for it... + WM_event_add_notifier(C, NC_ANIMATION, NULL); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index c855222df02..a78cacb42ef 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -169,7 +169,7 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op) deselect_graph_keys(&ac, 1, SELECT_ADD); /* set notifier that things have changed */ - ED_area_tag_redraw(CTX_wm_area(C)); // FIXME... should be updating 'keyframes' data context or so instead! + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); return OPERATOR_FINISHED; } @@ -302,6 +302,9 @@ static int graphkeys_borderselect_exec(bContext *C, wmOperator *op) /* apply borderselect action */ borderselect_graphkeys(&ac, rect, mode, selectmode); + /* send notifier that keyframe selection has changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); + return OPERATOR_FINISHED; } @@ -492,8 +495,8 @@ static int graphkeys_columnselect_exec(bContext *C, wmOperator *op) else columnselect_graph_keys(&ac, mode); - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_SELECT); + /* set notifier that keyframe selection has changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT, NULL); return OPERATOR_FINISHED; } @@ -911,8 +914,8 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev mouse_graph_keys(&ac, mval, selectmode, 0); } - /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + /* set notifier that keyframe selection (and also channel selection in some cases) has changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_SELECT|ND_ANIMCHAN_SELECT, NULL); /* for tweak grab to work */ return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 2f3700bc733..a5578e88076 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -365,6 +365,9 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -395,6 +398,9 @@ static void graph_listener(ScrArea *sa, wmNotifier *wmn) { /* context changes */ switch (wmn->category) { + case NC_ANIMATION: + ED_area_tag_refresh(sa); + break; case NC_SCENE: /*switch (wmn->data) { case ND_OB_ACTIVE: diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 5a891a541cb..1ab348eb28e 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -89,11 +89,12 @@ * NOTE: eventually, this should probably be phased out when many of these things are replaced with buttons */ -static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, short selectmode) +static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, short selectmode) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; + int notifierFlags = 0; /* get the channel that was clicked on */ /* filter channels */ @@ -107,7 +108,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh printf("Error: animation channel (index = %d) not found in mouse_anim_channels() \n", channel_index); BLI_freelistN(&anim_data); - return; + return 0; } /* action to take depends on what channel we've got */ @@ -119,6 +120,8 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh if (x < 16) { /* toggle expand */ sce->flag ^= SCE_DS_COLLAPSED; + + notifierFlags |= ND_ANIMCHAN_EDIT; } else { /* set selection status */ @@ -129,6 +132,8 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh else { sce->flag |= SCE_DS_SELECTED; } + + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -141,7 +146,8 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh if (x < 16) { /* toggle expand */ - ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX + ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (nlaedit_is_tweakmode_on(ac) == 0) { /* set selection status */ @@ -166,6 +172,9 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* xxx should be ED_base_object_activate(), but we need context pointer for that... */ //set_active_base(base); + + /* notifiers - channel was selected */ + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -173,6 +182,7 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh { Object *ob= (Object *)ale->data; ob->nlaflag ^= OB_ADS_SHOWMATS; // XXX + notifierFlags |= ND_ANIMCHAN_EDIT; } break; @@ -180,36 +190,42 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh { Material *ma= (Material *)ale->data; ma->flag ^= MA_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSLAM: { Lamp *la= (Lamp *)ale->data; la->flag ^= LA_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCAM: { Camera *ca= (Camera *)ale->data; ca->flag ^= CAM_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCUR: { Curve *cu= (Curve *)ale->data; cu->flag ^= CU_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSSKEY: { Key *key= (Key *)ale->data; key->flag ^= KEYBLOCK_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSWOR: { World *wo= (World *)ale->data; wo->flag ^= WO_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; } break; @@ -233,14 +249,23 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh if (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) { /* toggle protection (only if there's a toggle there) */ nlt->flag ^= NLATRACK_PROTECTED; + + /* notifier flags - channel was edited */ + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (x >= (NLACHANNEL_NAMEWIDTH-2*NLACHANNEL_BUTTON_WIDTH)) { /* toggle mute */ nlt->flag ^= NLATRACK_MUTED; + + /* notifier flags - channel was edited */ + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (x <= ((NLACHANNEL_BUTTON_WIDTH*2)+offset)) { /* toggle 'solo' */ BKE_nlatrack_solo_toggle(adt, nlt); + + /* notifier flags - channel was edited */ + notifierFlags |= ND_ANIMCHAN_EDIT; } else if (nlaedit_is_tweakmode_on(ac) == 0) { /* set selection */ @@ -257,6 +282,9 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* if NLA-Track is selected now, make NLA-Track the 'active' one in the visible list */ if (nlt->flag & NLATRACK_SELECTED) ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + + /* notifier flags - channel was selected */ + notifierFlags |= ND_ANIMCHAN_SELECT; } } break; @@ -275,6 +303,9 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* when in tweakmode, this button becomes the toggle for mapped editing */ adt->flag ^= ADT_NLA_EDIT_NOMAP; } + + /* changes to NLA-Action occurred */ + notifierFlags |= ND_NLA_ACTCHANGE; } } break; @@ -285,6 +316,9 @@ static void mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sh /* free channels */ BLI_freelistN(&anim_data); + + /* return the notifier-flags set */ + return notifierFlags; } /* ------------------- */ @@ -297,6 +331,7 @@ static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *e ARegion *ar; View2D *v2d; int mval[2], channel_index; + int notifierFlags = 0; short selectmode; float x, y; @@ -328,10 +363,10 @@ static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *e UI_view2d_listview_view_to_cell(v2d, NLACHANNEL_NAMEWIDTH, NLACHANNEL_STEP, 0, (float)NLACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index); /* handle mouse-click in the relevant channel then */ - mouse_nla_channels(&ac, x, channel_index, selectmode); + notifierFlags= mouse_nla_channels(&ac, x, channel_index, selectmode); - /* set notifier tha things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS); + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|notifierFlags, NULL); return OPERATOR_FINISHED; } @@ -401,8 +436,7 @@ static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -458,8 +492,7 @@ static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 6cbc9cab253..cb151429dd1 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -127,8 +127,7 @@ static int nlaedit_enable_tweakmode_exec (bContext *C, wmOperator *op) ac.scene->flag |= SCE_NLA_EDIT_ON; /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_ACTCHANGE, NULL); } else { BKE_report(op->reports, RPT_ERROR, "No active strip(s) to enter tweakmode on."); @@ -197,8 +196,7 @@ static int nlaedit_disable_tweakmode_exec (bContext *C, wmOperator *op) ac.scene->flag &= ~SCE_NLA_EDIT_ON; /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_ACTCHANGE, NULL); } /* done */ @@ -315,8 +313,7 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -424,8 +421,7 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) /* was anything added? */ if (done) { /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -483,8 +479,7 @@ static int nlaedit_add_meta_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -536,8 +531,7 @@ static int nlaedit_remove_meta_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -621,8 +615,7 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) if (done) { /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -707,8 +700,7 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -831,8 +823,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -894,8 +885,7 @@ static int nlaedit_toggle_mute_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -966,8 +956,7 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -1038,8 +1027,7 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -1137,8 +1125,7 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -1198,8 +1185,7 @@ static int nlaedit_clear_scale_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -1337,8 +1323,7 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); /* done */ return OPERATOR_FINISHED; @@ -1447,8 +1432,8 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op) BLI_freelistN(&anim_data); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); - WM_event_add_notifier(C, NC_SCENE, NULL); + // FIXME: this doesn't really do it justice... + WM_event_add_notifier(C, NC_ANIMATION, NULL); /* done */ return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 895d0dbf88a..dd9ef2621c5 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -186,7 +186,7 @@ static int nlaedit_deselectall_exec(bContext *C, wmOperator *op) deselect_nla_strips(&ac, DESELECT_STRIPS_TEST, SELECT_ADD); /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_SELECT, NULL); return OPERATOR_FINISHED; } @@ -324,6 +324,9 @@ static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) /* apply borderselect action */ borderselect_nla_strips(&ac, rect, mode, selectmode); + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_SELECT, NULL); + return OPERATOR_FINISHED; } @@ -583,7 +586,7 @@ static int nlaedit_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even } /* set notifier that things have changed */ - ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_SELECT, NULL); /* for tweak grab to work */ return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index a7e9844726d..923208f3b35 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -371,6 +371,9 @@ static void nla_region_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -392,7 +395,7 @@ static void nla_region_listener(ARegion *ar, wmNotifier *wmn) default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); - + break; } } @@ -401,6 +404,9 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -430,6 +436,9 @@ static void nla_channel_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; case NC_SCENE: switch(wmn->data) { case ND_OB_ACTIVE: @@ -457,6 +466,10 @@ static void nla_listener(ScrArea *sa, wmNotifier *wmn) { /* context changes */ switch (wmn->category) { + case NC_ANIMATION: + // TODO: filter specific types of changes? + ED_area_tag_refresh(sa); + break; case NC_SCENE: /*switch (wmn->data) { case ND_OB_ACTIVE: diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index f3797ec308b..6c3bb798c18 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -409,6 +409,15 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + switch(wmn->data) { + case ND_KEYFRAME_EDIT: + case ND_KEYFRAME_PROP: + case ND_NLA_ACTCHANGE: + case ND_ANIMCHAN_SELECT: + ED_region_tag_redraw(ar); + break; + } case NC_SCENE: switch(wmn->data) { case ND_TRANSFORM: diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 368730b1cfa..016400e0fa9 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -300,27 +300,15 @@ static void viewRedrawForce(bContext *C, TransInfo *t) WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); } else if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - - // TRANSFORM_FIX_ME - if (saction->lock) { - // whole window... - } - else - ED_area_tag_redraw(t->sa); + //SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); } else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; - - // TRANSFORM_FIX_ME - if (sipo->lock) { - // whole window... - } - else - ED_area_tag_redraw(t->sa); + //SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); } else if (t->spacetype == SPACE_NLA) { - ED_area_tag_redraw(t->sa); // XXX this should use a notifier instead! + WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); } else if(t->spacetype == SPACE_NODE) { diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index e3a7a906fef..432140f1cf7 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -129,6 +129,7 @@ typedef struct wmNotifier { #define NC_TEXT (12<<24) #define NC_WORLD (13<<24) #define NC_FILE (14<<24) +#define NC_ANIMATION (15<<24) /* data type, 256 entries is enough, it can overlap */ #define NOTE_DATA 0x00FF0000 @@ -188,6 +189,16 @@ typedef struct wmNotifier { #define ND_PARAMS (60<<16) #define ND_FILELIST (61<<16) + /* NC_ANIMATION Animato */ +#define ND_KEYFRAME_SELECT (70<<16) +#define ND_KEYFRAME_EDIT (71<<16) +#define ND_KEYFRAME_PROP (72<<16) +#define ND_ANIMCHAN_SELECT (73<<16) +#define ND_ANIMCHAN_EDIT (74<<16) +#define ND_NLA_SELECT (75<<16) +#define ND_NLA_EDIT (76<<16) +#define ND_NLA_ACTCHANGE (77<<16) + /* subtype, 256 entries too */ #define NOTE_SUBTYPE 0x0000FF00 From d6ef4380a0d23acb619018fdaf84f5381b71f325 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 12:11:00 +0000 Subject: [PATCH 152/512] NLA SoC: Delete Channels operator F-Curves and Groups can now be deleted again from DopeSheet/Graph Editors. --- .../blender/editors/animation/anim_channels.c | 148 +++++++++++++++++- 1 file changed, 142 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 1cf553f6f26..5c31d007705 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -63,9 +63,10 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_depsgraph.h" -#include "BKE_ipo.h" +#include "BKE_fcurve.h" #include "BKE_key.h" #include "BKE_material.h" #include "BKE_object.h" @@ -133,7 +134,7 @@ void ANIM_set_active_channel (bAnimContext *ac, void *data, short datatype, int } /* set active flag */ - if (channel_data) { + if (channel_data != NULL) { switch (channel_type) { case ANIMTYPE_GROUP: { @@ -691,6 +692,121 @@ void ANIM_OT_channels_move_bottom (wmOperatorType *ot) #endif // XXX old animation system - needs to be updated for new system... +/* ******************** Delete Channel Operator *********************** */ + +static int animchannels_delete_exec(bContext *C, wmOperator *op) +{ + bAnimContext ac; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* cannot delete in shapekey */ + if (ac.datatype == ANIMCONT_SHAPEKEY) + return OPERATOR_CANCELLED; + + + /* do groups only first (unless in Drivers mode, where there are none) */ + if (ac.datatype != ANIMCONT_DRIVERS) { + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CHANNELS | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* delete selected groups and their associated channels */ + for (ale= anim_data.first; ale; ale= ale->next) { + /* only groups - don't check other types yet, since they may no-longer exist */ + if (ale->type == ANIMTYPE_GROUP) { + bActionGroup *agrp= (bActionGroup *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + FCurve *fcu, *fcn; + + /* skip this group if no AnimData available, as we can't safely remove the F-Curves */ + if (adt == NULL) + continue; + + /* delete all of the Group's F-Curves, but no others */ + for (fcu= agrp->channels.first; fcu && fcu->grp==agrp; fcu= fcn) { + fcn= fcu->next; + + /* remove from group and action, then free */ + action_groups_remove_channel(adt->action, fcu); + free_fcurve(fcu); + } + + /* free the group itself */ + if (adt->action) + BLI_freelinkN(&adt->action->groups, agrp); + else + MEM_freeN(agrp); + } + } + + /* cleanup */ + BLI_freelistN(&anim_data); + } + + /* now do F-Curves */ + if (ac.datatype != ANIMCONT_GPENCIL) { + /* filter data */ + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* delete selected F-Curves */ + for (ale= anim_data.first; ale; ale= ale->next) { + /* only F-Curves, and only if we can identify its parent */ + if (ale->type == ANIMTYPE_FCURVE) { + AnimData *adt= BKE_animdata_from_id(ale->id); + FCurve *fcu= (FCurve *)ale->data; + + /* if no AnimData, we've got nowhere to remove the F-Curve from */ + if (adt == NULL) + continue; + + /* remove from whatever list it came from + * - Action Group + * - Action + * - Drivers + * - TODO... some others? + */ + if (fcu->grp) + action_groups_remove_channel(adt->action, fcu); + else if (adt->action) + BLI_remlink(&adt->action->curves, fcu); + else if (ac.datatype == ANIMCONT_DRIVERS) + BLI_remlink(&adt->drivers, fcu); + + /* free the F-Curve itself */ + free_fcurve(fcu); + } + } + + /* cleanup */ + BLI_freelistN(&anim_data); + } + + /* send notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + return OPERATOR_FINISHED; +} + +void ANIM_OT_channels_delete (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete Channels"; + ot->idname= "ANIM_OT_channels_delete"; + + /* api callbacks */ + ot->exec= animchannels_delete_exec; + ot->poll= animedit_poll_channels_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} /* ******************** Toggle Channel Visibility Operator *********************** */ @@ -707,7 +823,7 @@ static int animchannels_visibility_toggle_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* filter data */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* See if we should be making showing all selected or hiding */ @@ -715,14 +831,28 @@ static int animchannels_visibility_toggle_exec(bContext *C, wmOperator *op) if (vis == ACHANNEL_SETFLAG_CLEAR) break; - if (ale->flag & FCURVE_VISIBLE) + if ((ale->type == ANIMTYPE_FCURVE) && (ale->flag & FCURVE_VISIBLE)) + vis= ACHANNEL_SETFLAG_CLEAR; + else if ((ale->type == ANIMTYPE_GROUP) && !(ale->flag & AGRP_NOTVISIBLE)) vis= ACHANNEL_SETFLAG_CLEAR; } /* Now set the flags */ for (ale= anim_data.first; ale; ale= ale->next) { - FCurve *fcu= (FCurve *)ale->data; - ACHANNEL_SET_FLAG(fcu, vis, FCURVE_VISIBLE); + switch (ale->type) { + case ANIMTYPE_FCURVE: /* F-Curve */ + { + FCurve *fcu= (FCurve *)ale->data; + ACHANNEL_SET_FLAG(fcu, vis, FCURVE_VISIBLE); + } + break; + case ANIMTYPE_GROUP: /* Group */ + { + bActionGroup *agrp= (bActionGroup *)ale->data; + ACHANNEL_SET_FLAG_NEG(agrp, vis, AGRP_NOTVISIBLE); + } + break; + } } /* cleanup */ @@ -1753,6 +1883,8 @@ void ED_operatortypes_animchannels(void) WM_operatortype_append(ANIM_OT_channels_setting_disable); WM_operatortype_append(ANIM_OT_channels_setting_toggle); + WM_operatortype_append(ANIM_OT_channels_delete); + // XXX does this need to be a separate operator? WM_operatortype_append(ANIM_OT_channels_editable_toggle); @@ -1786,6 +1918,10 @@ void ED_keymap_animchannels(wmWindowManager *wm) /* borderselect */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); + /* delete */ + WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", DELKEY, KM_PRESS, 0, 0); + /* settings */ WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_toggle", WKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_enable", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); From b609f2aa790e122504aad34512d08241c2e01079 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 12:42:17 +0000 Subject: [PATCH 153/512] NLA SoC: Attempt at solving the jumping-views problem The 'jumping-views' problem affected the NLA and DopeSheet editors, whereby the channels-list and the data-area would get out of sync (vertically) due to the size calculations of the two being done differently. --- source/blender/editors/space_action/action_draw.c | 2 ++ source/blender/editors/space_nla/nla_draw.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 93d061e8bf3..2fd5b9bbd93 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -422,6 +422,8 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) */ v2d->tot.ymin= (float)(-height); } + /* need to do a view-sync here, so that the keys area doesn't jump around */ + UI_view2d_sync(NULL, ac->sa, v2d, V2D_VIEWSYNC_AREA_VERTICAL); /* loop through channels, and set up drawing depending on their type */ y= (float)ACHANNEL_FIRST; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 6219acf6fae..7fb15c62277 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -512,6 +512,8 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) * (NOTE: this is ok here, the configuration is pretty straightforward) */ v2d->tot.ymin= (float)(-height); + /* need to do a view-sync here, so that the strips area doesn't jump around */ + UI_view2d_sync(NULL, ac->sa, v2d, V2D_VIEWSYNC_AREA_VERTICAL); /* loop through channels, and set up drawing depending on their type */ y= (float)(-NLACHANNEL_HEIGHT); From b80b581bc03b6df28bd3a10118d85b78d5ca011b Mon Sep 17 00:00:00 2001 From: Diego Borghetti Date: Fri, 10 Jul 2009 22:16:25 +0000 Subject: [PATCH 154/512] Allow the user set which style to use for the kerning value. This are freetype2 options: Unfitted - Scaled but un-grid-fitted kerning distances Default - Scaled and grid-fitted kerning distances We always use Unfitted, but the "Default" style give better result here, so please test and if nobody complain we can set this style as the default. --- source/blender/blenfont/BLF_api.h | 1 + source/blender/blenfont/intern/blf_font.c | 20 +++++++++++++------ .../editors/interface/interface_style.c | 9 +++++++++ source/blender/makesdna/DNA_userdef_types.h | 2 ++ source/blender/makesrna/intern/rna_userdef.c | 11 ++++++++++ 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index 53f108f87eb..99934a80143 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -137,6 +137,7 @@ void BLF_dir_free(char **dirs, int count); #define BLF_ROTATION (1<<0) #define BLF_CLIPPING (1<<1) #define BLF_SHADOW (1<<2) +#define BLF_KERNING_DEFAULT (1<<3) /* font->mode. */ #define BLF_MODE_TEXTURE 0 diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 989746ca501..affc35ea11e 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -102,7 +102,7 @@ void blf_font_draw(FontBLF *font, char *str) FT_Vector delta; FT_UInt glyph_index, g_prev_index; int pen_x, pen_y; - int i, has_kerning; + int i, has_kerning, st; if (!font->glyph_cache) return; @@ -143,9 +143,13 @@ void blf_font_draw(FontBLF *font, char *str) delta.x= 0; delta.y= 0; - if (FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta) == 0) { + if (font->flags & BLF_KERNING_DEFAULT) + st= FT_Get_Kerning(font->face, g_prev_index, glyph_index, ft_kerning_default, &delta); + else + st= FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); + + if (st == 0) pen_x += delta.x >> 6; - } } /* do not return this loop if clipped, we want every character tested */ @@ -165,7 +169,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) FT_UInt glyph_index, g_prev_index; rctf gbox; int pen_x, pen_y; - int i, has_kerning; + int i, has_kerning, st; if (!font->glyph_cache) return; @@ -211,9 +215,13 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) delta.x= 0; delta.y= 0; - if (FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta) == 0) { + if (font->flags & BLF_KERNING_DEFAULT) + st= FT_Get_Kerning(font->face, g_prev_index, glyph_index, ft_kerning_default, &delta); + else + st= FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); + + if (st == 0) pen_x += delta.x >> 6; - } } gbox.xmin= g->box.xmin + pen_x; diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 83eb8a32701..57f35f71927 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -93,6 +93,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->paneltitle.uifont_id= UIFONT_DEFAULT; style->paneltitle.points= 13; + style->paneltitle.kerning= 0; style->paneltitle.shadow= 5; style->paneltitle.shadx= 2; style->paneltitle.shady= -2; @@ -101,6 +102,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->grouplabel.uifont_id= UIFONT_DEFAULT; style->grouplabel.points= 12; + style->grouplabel.kerning= 0; style->grouplabel.shadow= 3; style->grouplabel.shadx= 1; style->grouplabel.shady= -1; @@ -108,6 +110,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widgetlabel.uifont_id= UIFONT_DEFAULT; style->widgetlabel.points= 11; + style->widgetlabel.kerning= 0; style->widgetlabel.shadow= 3; style->widgetlabel.shadx= 1; style->widgetlabel.shady= -1; @@ -116,6 +119,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widget.uifont_id= UIFONT_DEFAULT; style->widget.points= 11; + style->widget.kerning= 0; style->widget.shadowalpha= 0.25f; style->columnspace= 5; @@ -169,10 +173,15 @@ void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str) BLF_shadow_offset(fs->shadx, fs->shady); } + if (fs->kerning == 1) + BLF_enable(BLF_KERNING_DEFAULT); + BLF_draw(str); BLF_disable(BLF_CLIPPING); if (fs->shadow) BLF_disable(BLF_SHADOW); + if (fs->kerning == 1) + BLF_disable(BLF_KERNING_DEFAULT); } /* ************** helpers ************************ */ diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index fcb10a33fda..0709d2d58b0 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -66,6 +66,8 @@ typedef struct uiFont { typedef struct uiFontStyle { short uifont_id; /* saved in file, 0 is default */ short points; /* actual size depends on 'global' dpi */ + short kerning; /* unfitted or default kerning value. */ + char pad[6]; short italic, bold; /* style hint */ short shadow; /* value is amount of pixels blur */ short shadx, shady; /* shadow offset in pixels */ diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 03bd0c9cfe2..977c43e6b95 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -128,6 +128,11 @@ static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; + static EnumPropertyItem font_kerning_style[] = { + {0, "UNFITTED", 0, "Unfitted", "Use scaled but un-grid-fitted kerning distances."}, + {1, "DEFAULT", 0, "Default", "Use scaled and grid-fitted kerning distances."}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "ThemeFontStyle", NULL); RNA_def_struct_sdna(srna, "uiFontStyle"); RNA_def_struct_ui_text(srna, "Font Style", "Theme settings for Font."); @@ -137,6 +142,12 @@ static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Points", ""); RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "font_kerning_style", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "kerning"); + RNA_def_property_enum_items(prop, font_kerning_style); + RNA_def_property_ui_text(prop, "Kerning Style", "Which style to use for font kerning."); + RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "shadow", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 0, 5); RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)"); From 66a81a4062b8cc01452316c8eeb442b0acf2663e Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 10 Jul 2009 23:25:30 +0000 Subject: [PATCH 155/512] NLA SoC: Names for NLA Strips In order to be able to better identify NLA Strips (and to reduce the complexity of the text on them), I've implemented a name property for the strips. The names are made to be unique within the AnimData block the strip comes from, though this may not always happen if not enough relevant context info is present to validate this. --- source/blender/blenkernel/BKE_nla.h | 4 + source/blender/blenkernel/intern/nla.c | 93 ++++++++++++++++++- .../blender/editors/space_nla/nla_buttons.c | 3 +- source/blender/editors/space_nla/nla_draw.c | 25 +---- source/blender/editors/space_nla/nla_edit.c | 31 ++++++- source/blender/makesdna/DNA_anim_types.h | 2 + source/blender/makesrna/intern/rna_nla.c | 22 +++++ 7 files changed, 152 insertions(+), 28 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 04d4b0f8da2..bb5a2782663 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -83,6 +83,10 @@ struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt); short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max); +void BKE_nlastrip_validate_name(struct AnimData *adt, struct NlaStrip *strip); + +/* ............ */ + short BKE_nlatrack_has_animated_strips(struct NlaTrack *nlt); short BKE_nlatracks_have_animated_strips(ListBase *tracks); void BKE_nlastrip_validate_fcurves(struct NlaStrip *strip); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index c697f639021..a240de209d9 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -30,12 +30,14 @@ #include #include #include +#include #include #include #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" +#include "BLI_ghash.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" @@ -326,6 +328,9 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act) BKE_nlatrack_add_strip(nlt, strip); } + /* automatically name it too */ + BKE_nlastrip_validate_name(adt, strip); + /* returns the strip added */ return strip; } @@ -503,7 +508,7 @@ float BKE_nla_tweakedit_remap (AnimData *adt, float cframe, short mode) } /* *************************************************** */ -/* Basic Utilities */ +/* NLA API */ /* List of Strips ------------------------------------ */ /* (these functions are used for NLA-Tracks and also for nested/meta-strips) */ @@ -1140,8 +1145,90 @@ void BKE_nlastrip_validate_fcurves (NlaStrip *strip) } } } - -/* Tools ------------------------------------------- */ + +/* Sanity Validation ------------------------------------ */ + +/* Find (and set) a unique name for a strip from the whole AnimData block + * Uses a similar method to the BLI method, but is implemented differently + * as we need to ensure that the name is unique over several lists of tracks, + * not just a single track. + */ +void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) +{ + GHash *gh; + NlaStrip *tstrip; + NlaTrack *nlt; + + /* sanity checks */ + if ELEM(NULL, adt, strip) + return; + + /* give strip a default name if none already */ + if (strip->name[0]==0) { + switch (strip->type) { + case NLASTRIP_TYPE_CLIP: /* act-clip */ + sprintf(strip->name, "Act: %s", (strip->act)?(strip->act->id.name+2):("")); + break; + case NLASTRIP_TYPE_TRANSITION: /* transition */ + sprintf(strip->name, "Transition"); + break; + case NLASTRIP_TYPE_META: /* meta */ + sprintf(strip->name, "Meta"); + break; + default: + sprintf(strip->name, "NLA Strip"); + break; + } + } + + /* build a hash-table of all the strips in the tracks + * - this is easier than iterating over all the tracks+strips hierarchy everytime + * (and probably faster) + */ + gh= BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp); + + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + for (tstrip= nlt->strips.first; tstrip; tstrip= tstrip->next) { + /* don't add the strip of interest */ + if (tstrip == strip) + continue; + + /* use the name of the strip as the key, and the strip as the value, since we're mostly interested in the keys */ + BLI_ghash_insert(gh, tstrip->name, tstrip); + } + } + + /* if the hash-table has a match for this name, try other names... + * - in an extreme case, it might not be able to find a name, but then everything else in Blender would fail too :) + */ + if (BLI_ghash_haskey(gh, strip->name)) { + char tempname[128]; + int number = 1; + char *dot; + + /* Strip off the suffix */ + dot = strchr(strip->name, '.'); + if (dot) *dot=0; + + /* Try different possibilities */ + for (number = 1; number <= 999; number++) { + /* assemble alternative name */ + BLI_snprintf(tempname, 128, "%s%c%03d", strip->name, ".", number); + + /* if hash doesn't have this, set it */ + if (BLI_ghash_haskey(gh, tempname) == 0) { + BLI_strncpy(strip->name, tempname, sizeof(strip->name)); + break; + } + } + } + + /* free the hash... */ + BLI_ghash_free(gh, NULL, NULL); +} + + +/* Core Tools ------------------------------------------- */ /* For the given AnimData block, add the active action to the NLA * stack (i.e. 'push-down' action). The UI should only allow this diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index c0a2b9476e3..a74037d1ace 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -215,7 +215,8 @@ static void nla_panel_properties(const bContext *C, Panel *pa) /* Strip Properties ------------------------------------- */ /* strip type */ - row= uiLayoutRow(layout, 1); + row= uiLayoutColumn(layout, 1); + uiItemR(row, NULL, ICON_NLA, &strip_ptr, "name", 0, 0, 0); // XXX icon? uiItemR(row, NULL, 0, &strip_ptr, "type", 0, 0, 0); /* strip extents */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 7fb15c62277..8d56670a149 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -445,26 +445,11 @@ static void nla_draw_strip_text (NlaTrack *nlt, NlaStrip *strip, int index, View else sprintf(dir, "->"); - /* for now, just init the string with fixed-formats */ - switch (strip->type) { - case NLASTRIP_TYPE_TRANSITION: /* Transition */ - sprintf(str, "%d | Transition | %.2f %s %.2f", - index, strip->start, dir, strip->end); - break; - - case NLASTRIP_TYPE_META: /* Meta */ - sprintf(str, "%d | %sMeta | %.2f %s %.2f", - index, ((strip->flag & NLASTRIP_FLAG_TEMP_META)?"Temp-":""), - strip->start, dir, strip->end); - break; - - case NLASTRIP_TYPE_CLIP: /* Action-Clip (default) */ - default: - sprintf(str, "%d | Act: %s | %.2f %s %.2f", - index, ((strip->act)?strip->act->id.name+2:""), - strip->start, dir, strip->end); - break; - } + /* just print the name and the range */ + if (strip->flag & NLASTRIP_FLAG_TEMP_META) + sprintf(str, "Temp-Meta | %.2f %s %.2f", strip->start, dir, strip->end); + else + sprintf(str, "%s | %.2f %s %.2f", strip->name, strip->start, dir, strip->end); /* set text colour - if colours (see above) are light, draw black text, otherwise draw white */ if (strip->flag & (NLASTRIP_FLAG_ACTIVE|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_TWEAKUSER)) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index cb151429dd1..9ddd8daab0d 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -307,6 +307,9 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) nlt= add_nlatrack(adt, NULL); BKE_nlatrack_add_strip(nlt, strip); } + + /* auto-name it */ + BKE_nlastrip_validate_name(adt, strip); } /* free temp data */ @@ -363,6 +366,7 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) /* for each track, find pairs of strips to add transitions to */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); NlaStrip *s1, *s2; /* get initial pair of strips */ @@ -410,6 +414,9 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) strip->scale= 1.0f; strip->repeat = 1.0f; + /* auto-name it */ + BKE_nlastrip_validate_name(adt, strip); + /* make note of this */ done++; } @@ -470,9 +477,18 @@ static int nlaedit_add_meta_exec (bContext *C, wmOperator *op) /* for each track, find pairs of strips to add transitions to */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); + NlaStrip *strip; /* create meta-strips from the continuous chains of selected strips */ BKE_nlastrips_make_metas(&nlt->strips, 0); + + /* name the metas */ + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* auto-name this strip if selected (that means it is a meta) */ + if (strip->flag & NLASTRIP_FLAG_SELECT) + BKE_nlastrip_validate_name(adt, strip); + } } /* free temp data */ @@ -605,6 +621,9 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) /* deselect the original and the active flag */ strip->flag &= ~(NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_ACTIVE); + /* auto-name it */ + BKE_nlastrip_validate_name(adt, strip); + done++; } } @@ -728,7 +747,7 @@ void NLA_OT_delete (wmOperatorType *ot) // - variable-length splits? /* split a given Action-Clip strip */ -static void nlaedit_split_strip_actclip (NlaTrack *nlt, NlaStrip *strip) +static void nlaedit_split_strip_actclip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip) { NlaStrip *nstrip; float midframe, midaframe, len; @@ -765,10 +784,13 @@ static void nlaedit_split_strip_actclip (NlaTrack *nlt, NlaStrip *strip) /* clear the active flag from the copy */ nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE; + + /* auto-name the new strip */ + BKE_nlastrip_validate_name(adt, nstrip); } /* split a given Meta strip */ -static void nlaedit_split_strip_meta (NlaTrack *nlt, NlaStrip *strip) +static void nlaedit_split_strip_meta (AnimData *adt, NlaTrack *nlt, NlaStrip *strip) { /* simply ungroup it for now... */ BKE_nlastrips_clear_metastrip(&nlt->strips, strip); @@ -795,6 +817,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* for each NLA-Track, split all selected strips into two strips */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= BKE_animdata_from_id(ale->id); NlaStrip *strip, *next; for (strip= nlt->strips.first; strip; strip= next) { @@ -805,11 +828,11 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* splitting method depends on the type of strip */ switch (strip->type) { case NLASTRIP_TYPE_CLIP: /* action-clip */ - nlaedit_split_strip_actclip(nlt, strip); + nlaedit_split_strip_actclip(adt, nlt, strip); break; case NLASTRIP_TYPE_META: /* meta-strips need special handling */ - nlaedit_split_strip_meta(nlt, strip); + nlaedit_split_strip_meta(adt, nlt, strip); break; default: /* for things like Transitions, do not split! */ diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index d71beb8785b..fed0c490014 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -445,6 +445,8 @@ typedef struct NlaStrip { ListBase fcurves; /* F-Curves for controlling this strip's influence and timing */ // TODO: move out? ListBase modifiers; /* F-Curve modifiers to be applied to the entire strip's referenced F-Curves */ + char name[64]; /* User-Visible Identifier for Strip */ + float influence; /* Influence of strip */ float strip_time; /* Current 'time' within action being used (automatically evaluated, but can be overridden) */ diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 97f35af1db7..bc636af6849 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -41,11 +41,27 @@ #include /* needed for some of the validation stuff... */ +#include "BKE_animsys.h" #include "BKE_nla.h" /* temp constant defined for these funcs only... */ #define NLASTRIP_MIN_LEN_THRESH 0.1f +void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value) +{ + NlaStrip *data= (NlaStrip *)ptr->data; + + /* copy the name first */ + BLI_strncpy(data->name, value, sizeof(data->name)); + + /* validate if there's enough info to do so */ + if (ptr->id.data) { + AnimData *adt= BKE_animdata_from_id(ptr->id.data); + BKE_nlastrip_validate_name(adt, data); + } +} + + static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; @@ -255,6 +271,12 @@ void rna_def_nlastrip(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "NLA Strip", "A container referencing an existing Action."); RNA_def_struct_ui_icon(srna, ICON_NLA); // XXX + /* name property */ + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", ""); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_NlaStrip_name_set"); + RNA_def_struct_name_property(srna, prop); + /* Enums */ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); From 1105ee701ed20d6301a174fc4285de00f8e0f95e Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 11 Jul 2009 03:09:44 +0000 Subject: [PATCH 156/512] NLA SoC: Quick commit of skeleton of auto-blending setting code to be completed later... --- source/blender/blenkernel/intern/nla.c | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index a240de209d9..457df9be7a9 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -1227,6 +1227,62 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) BLI_ghash_free(gh, NULL, NULL); } +/* ---- */ + +/* Determine auto-blending for the given strip */ +void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls) +{ + NlaTrack *track; + NlaStrip *strip; + //float *ps=NULL, *pe=NULL; + //float *ns=NULL, *ne=NULL; + + /* sanity checks */ + if ELEM(NULL, nls, nlt) + return; + if ((nlt->prev == NULL) && (nlt->next == NULL)) + return; + if ((nls->flag & NLASTRIP_FLAG_AUTO_BLENDS)==0) + return; + + /* get test ranges */ + if (nlt->prev) { + /* find strips that overlap over the start/end of the given strip, + * but which don't cover the entire length + */ + track= nlt->prev; + for (strip= track->strips.first; strip; strip= strip->next) { + + } + } + if (nlt->next) { + /* find strips that overlap over the start/end of the given strip, + * but which don't cover the entire length + */ + track= nlt->next; + for (strip= track->strips.first; strip; strip= strip->next) { + + } + } +} + +/* Ensure that auto-blending and other settings are set correctly */ +void BKE_nla_validate_state (AnimData *adt) +{ + NlaStrip *strip; + NlaTrack *nlt; + + /* sanity checks */ + if ELEM(NULL, adt, adt->nla_tracks.first) + return; + + /* adjust blending values for auto-blending */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + for (strip= nlt->strips.first; strip; strip= strip->next) { + BKE_nlastrip_validate_autoblends(nlt, strip); + } + } +} /* Core Tools ------------------------------------------- */ From a7287165dbd4d0fbbe446a7bb71fd2b947bcf4f8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 11 Jul 2009 07:46:11 +0000 Subject: [PATCH 157/512] remove duplicate function. --- .../blender/editors/space_graph/graph_draw.c | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 8b242794ca3..f8f613223db 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -775,46 +775,6 @@ void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, Vie glDisable(GL_BLEND); } -/* check if any FModifiers to draw controls for - fcm is 'active' modifier */ -static short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm) -{ - /* don't draw if there aren't any modifiers at all */ - if (fcu->modifiers.first == NULL) - return 0; - - /* if there's an active modifier - don't draw if it doesn't drastically - * alter the curve... - */ - if (fcm) { - switch (fcm->type) { - /* clearly harmless */ - case FMODIFIER_TYPE_CYCLES: - return 0; - - /* borderline... */ - case FMODIFIER_TYPE_NOISE: - return 0; - } - } - - /* if only one modifier - don't draw if it is muted or disabled */ - if (fcu->modifiers.first == fcu->modifiers.last) { - fcm= fcu->modifiers.first; - if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) - return 0; - } - - /* if only active modifier - don't draw if it is muted or disabled */ - if (fcm) { - if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) - return 0; - } - - /* if we're still here, this means that there are modifiers with controls to be drawn */ - // FIXME: what happens if all the modifiers were muted/disabled - return 1; -} - /* This is called twice from space_graph.c -> graph_main_area_draw() * Unselected then selected F-Curves are drawn so that they do not occlude each other. */ From a7837efb16d244acbdc32bfacb97279728e64252 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 11 Jul 2009 10:20:48 +0000 Subject: [PATCH 158/512] 2.5 - Added descriptions to all Animation Editor operators DopeSheet and Graph Editor operators were missing these, since many of these operators were written before that field was added. NLA Editor's operators already have them. --- .../blender/editors/animation/anim_channels.c | 11 ++++++++++ source/blender/editors/mesh/meshtools.c | 5 +++++ .../editors/space_action/action_edit.c | 17 +++++++++++++++- .../editors/space_action/action_select.c | 4 ++++ .../blender/editors/space_graph/graph_edit.c | 20 ++++++++++++++++++- .../editors/space_graph/graph_header.c | 1 + .../editors/space_graph/graph_select.c | 4 ++++ 7 files changed, 60 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 5c31d007705..6cb00f9285b 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -799,6 +799,7 @@ void ANIM_OT_channels_delete (wmOperatorType *ot) /* identifiers */ ot->name= "Delete Channels"; ot->idname= "ANIM_OT_channels_delete"; + ot->description= "Delete all selected animation channels."; /* api callbacks */ ot->exec= animchannels_delete_exec; @@ -869,6 +870,7 @@ void ANIM_OT_channels_visibility_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Toggle Visibility"; ot->idname= "ANIM_OT_channels_visibility_toggle"; + ot->description= "Toggle visibility in Graph Editor of all selected animation channels."; /* api callbacks */ ot->exec= animchannels_visibility_toggle_exec; @@ -1134,6 +1136,7 @@ void ANIM_OT_channels_setting_enable (wmOperatorType *ot) /* identifiers */ ot->name= "Enable Channel Setting"; ot->idname= "ANIM_OT_channels_setting_enable"; + ot->description= "Enable specified setting on all selected animation channels."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1155,6 +1158,7 @@ void ANIM_OT_channels_setting_disable (wmOperatorType *ot) /* identifiers */ ot->name= "Disable Channel Setting"; ot->idname= "ANIM_OT_channels_setting_disable"; + ot->description= "Disable specified setting on all selected animation channels."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1176,6 +1180,7 @@ void ANIM_OT_channels_setting_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Toggle Channel Setting"; ot->idname= "ANIM_OT_channels_setting_toggle"; + ot->description= "Toggle specified setting on all selected animation channels."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1198,6 +1203,7 @@ void ANIM_OT_channels_editable_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Toggle Channel Editability"; ot->idname= "ANIM_OT_channels_editable_toggle"; + ot->description= "Toggle editability of selected channels."; /* api callbacks */ ot->exec= animchannels_setflag_exec; @@ -1242,6 +1248,7 @@ void ANIM_OT_channels_expand (wmOperatorType *ot) /* identifiers */ ot->name= "Expand Channels"; ot->idname= "ANIM_OT_channels_expand"; + ot->description= "Expand (i.e. open) all selected expandable animation channels."; /* api callbacks */ ot->exec= animchannels_expand_exec; @@ -1283,6 +1290,7 @@ void ANIM_OT_channels_collapse (wmOperatorType *ot) /* identifiers */ ot->name= "Collapse Channels"; ot->idname= "ANIM_OT_channels_collapse"; + ot->description= "Collapse (i.e. close) all selected expandable animation channels."; /* api callbacks */ ot->exec= animchannels_collapse_exec; @@ -1322,6 +1330,7 @@ void ANIM_OT_channels_select_all_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Select All"; ot->idname= "ANIM_OT_channels_select_all_toggle"; + ot->description= "Toggle selection of all animation channels."; /* api callbacks */ ot->exec= animchannels_deselectall_exec; @@ -1451,6 +1460,7 @@ void ANIM_OT_channels_select_border(wmOperatorType *ot) /* identifiers */ ot->name= "Border Select"; ot->idname= "ANIM_OT_channels_select_border"; + ot->description= "Select all animation channels within the specified region."; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -1857,6 +1867,7 @@ void ANIM_OT_channels_click (wmOperatorType *ot) /* identifiers */ ot->name= "Mouse Click on Channels"; ot->idname= "ANIM_OT_channels_click"; + ot->description= "Handle mouse-clicks over animation channels."; /* api callbacks */ ot->invoke= animchannels_mouseclick_invoke; diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index f8f0030b258..df3e2a5685c 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -105,6 +105,11 @@ static int pupmenu() {return 0;} /* join selected meshes into the active mesh, context sensitive return 0 if no join is made (error) and 1 of the join is done */ + +// XXX NOTE to whoever ports this: +// Check the version of this code in the animsys2 branch, which has been nicely commented, +// but more importantly has proper support for handling meshes with shapekeys (instead of lamely bailing out)! +// -- Aligorith, July 2009 int join_mesh(Scene *scene, View3D *v3d, wmOperator *op) { Base *base, *nextb; diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 8d2d342e28a..d4709e94e5e 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -101,7 +101,7 @@ static void get_keyframe_extents (bAnimContext *ac, float *min, float *max) int filter; /* get data to filter, from Action or Dopesheet */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* set large values to try to override */ @@ -178,6 +178,7 @@ void ACT_OT_previewrange_set (wmOperatorType *ot) /* identifiers */ ot->name= "Auto-Set Preview Range"; ot->idname= "ACT_OT_previewrange_set"; + ot->description= "Set Preview Range based on extents of selected Keyframes."; /* api callbacks */ ot->exec= actkeys_previewrange_exec; @@ -225,6 +226,7 @@ void ACT_OT_view_all (wmOperatorType *ot) /* identifiers */ ot->name= "View All"; ot->idname= "ACT_OT_view_all"; + ot->description= "Reset viewable area to show full keyframe range."; /* api callbacks */ ot->exec= actkeys_viewall_exec; @@ -309,6 +311,7 @@ void ACT_OT_copy (wmOperatorType *ot) /* identifiers */ ot->name= "Copy Keyframes"; ot->idname= "ACT_OT_copy"; + ot->description= "Copy selected keyframes to the copy/paste buffer."; /* api callbacks */ ot->exec= actkeys_copy_exec; @@ -353,6 +356,7 @@ void ACT_OT_paste (wmOperatorType *ot) /* identifiers */ ot->name= "Paste Keyframes"; ot->idname= "ACT_OT_paste"; + ot->description= "Paste keyframes from copy/paste buffer for the selected channels, starting on the current frame."; /* api callbacks */ ot->exec= actkeys_paste_exec; @@ -449,6 +453,7 @@ void ACT_OT_insert_keyframe (wmOperatorType *ot) /* identifiers */ ot->name= "Insert Keyframes"; ot->idname= "ACT_OT_insert_keyframe"; + ot->description= "Insert keyframes for the specified channels."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -526,6 +531,7 @@ void ACT_OT_duplicate (wmOperatorType *ot) /* identifiers */ ot->name= "Duplicate Keyframes"; ot->idname= "ACT_OT_duplicate"; + ot->description= "Make a copy of all selected keyframes."; /* api callbacks */ ot->invoke= actkeys_duplicate_invoke; @@ -593,6 +599,7 @@ void ACT_OT_delete (wmOperatorType *ot) /* identifiers */ ot->name= "Delete Keyframes"; ot->idname= "ACT_OT_delete"; + ot->description= "Remove all selected keyframes."; /* api callbacks */ ot->invoke= WM_operator_confirm; @@ -656,6 +663,7 @@ void ACT_OT_clean (wmOperatorType *ot) /* identifiers */ ot->name= "Clean Keyframes"; ot->idname= "ACT_OT_clean"; + ot->description= "Simplify F-Curves by removing closely spaced keyframes."; /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! @@ -780,6 +788,7 @@ void ACT_OT_sample (wmOperatorType *ot) /* identifiers */ ot->name= "Sample Keyframes"; ot->idname= "ACT_OT_sample"; + ot->description= "Add keyframes on every frame between the selected keyframes."; /* api callbacks */ ot->exec= actkeys_sample_exec; @@ -855,6 +864,7 @@ void ACT_OT_extrapolation_type (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Extrapolation"; ot->idname= "ACT_OT_extrapolation_type"; + ot->description= "Set extrapolation mode for selected F-Curves."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -925,6 +935,7 @@ void ACT_OT_interpolation_type (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Interpolation"; ot->idname= "ACT_OT_interpolation_type"; + ot->description= "Set interpolation mode for the F-Curve segments starting from the selected keyframes."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1013,6 +1024,7 @@ void ACT_OT_handle_type (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Handle Type"; ot->idname= "ACT_OT_handle_type"; + ot->description= "Set type of handle for selected keyframes."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1082,6 +1094,7 @@ void ACT_OT_frame_jump (wmOperatorType *ot) /* identifiers */ ot->name= "Jump to Frame"; ot->idname= "ACT_OT_frame_jump"; + ot->description= "Set the current frame to the average frame of the selected keyframes."; /* api callbacks */ ot->exec= actkeys_framejump_exec; @@ -1177,6 +1190,7 @@ void ACT_OT_snap (wmOperatorType *ot) /* identifiers */ ot->name= "Snap Keys"; ot->idname= "ACT_OT_snap"; + ot->description= "Snap selected keyframes to the times specified."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1293,6 +1307,7 @@ void ACT_OT_mirror (wmOperatorType *ot) /* identifiers */ ot->name= "Mirror Keys"; ot->idname= "ACT_OT_mirror"; + ot->description= "Flip selected keyframes over the selected mirror line."; /* api callbacks */ ot->invoke= WM_menu_invoke; diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index d9e6bb10ceb..ef1b392815d 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -185,6 +185,7 @@ void ACT_OT_select_all_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Select All"; ot->idname= "ACT_OT_select_all_toggle"; + ot->description= "Toggle selection of all keyframes."; /* api callbacks */ ot->exec= actkeys_deselectall_exec; @@ -348,6 +349,7 @@ void ACT_OT_select_border(wmOperatorType *ot) /* identifiers */ ot->name= "Border Select"; ot->idname= "ACT_OT_select_border"; + ot->description= "Select all keyframes within the specified region."; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -565,6 +567,7 @@ void ACT_OT_select_column (wmOperatorType *ot) /* identifiers */ ot->name= "Select All"; ot->idname= "ACT_OT_select_column"; + ot->description= "Select all keyframes on the specified frame(s)."; /* api callbacks */ ot->exec= actkeys_columnselect_exec; @@ -969,6 +972,7 @@ void ACT_OT_clickselect (wmOperatorType *ot) /* identifiers */ ot->name= "Mouse Select Keys"; ot->idname= "ACT_OT_clickselect"; + ot->description= "Select keyframes by clicking on them."; /* api callbacks - absolutely no exec() this yet... */ ot->invoke= actkeys_clickselect_invoke; diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 1837b6d4ecd..d11ceac3264 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -103,7 +103,7 @@ void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xmax, flo int filter; /* get data to filter, from Dopesheet */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* set large values to try to override */ @@ -234,6 +234,7 @@ void GRAPH_OT_view_all (wmOperatorType *ot) /* identifiers */ ot->name= "View All"; ot->idname= "GRAPH_OT_view_all"; + ot->description= "Reset viewable area to show full keyframe range."; /* api callbacks */ ot->exec= graphkeys_viewall_exec; @@ -485,6 +486,7 @@ void GRAPH_OT_insert_keyframe (wmOperatorType *ot) /* identifiers */ ot->name= "Insert Keyframes"; ot->idname= "GRAPH_OT_insert_keyframe"; + ot->description= "Insert keyframes for the specified channels."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -572,6 +574,7 @@ void GRAPH_OT_click_insert (wmOperatorType *ot) /* identifiers */ ot->name= "Click-Insert Keyframes"; ot->idname= "GRAPH_OT_click_insert"; + ot->description= "Insert new keyframe at the cursor position for the active F-Curve."; /* api callbacks */ ot->invoke= graphkeys_click_insert_invoke; @@ -653,6 +656,7 @@ void GRAPH_OT_copy (wmOperatorType *ot) /* identifiers */ ot->name= "Copy Keyframes"; ot->idname= "GRAPH_OT_copy"; + ot->description= "Copy selected keyframes to the copy/paste buffer."; /* api callbacks */ ot->exec= graphkeys_copy_exec; @@ -692,6 +696,7 @@ void GRAPH_OT_paste (wmOperatorType *ot) /* identifiers */ ot->name= "Paste Keyframes"; ot->idname= "GRAPH_OT_paste"; + ot->description= "Paste keyframes from copy/paste buffer for the selected channels, starting on the current frame."; /* api callbacks */ ot->exec= graphkeys_paste_exec; @@ -759,6 +764,7 @@ void GRAPH_OT_duplicate (wmOperatorType *ot) /* identifiers */ ot->name= "Duplicate Keyframes"; ot->idname= "GRAPH_OT_duplicate"; + ot->description= "Make a copy of all selected keyframes."; /* api callbacks */ ot->invoke= graphkeys_duplicate_invoke; @@ -820,6 +826,7 @@ void GRAPH_OT_delete (wmOperatorType *ot) /* identifiers */ ot->name= "Delete Keyframes"; ot->idname= "GRAPH_OT_delete"; + ot->description= "Remove all selected keyframes."; /* api callbacks */ ot->invoke= WM_operator_confirm; @@ -881,6 +888,7 @@ void GRAPH_OT_clean (wmOperatorType *ot) /* identifiers */ ot->name= "Clean Keyframes"; ot->idname= "GRAPH_OT_clean"; + ot->description= "Simplify F-Curves by removing closely spaced keyframes."; /* api callbacks */ //ot->invoke= // XXX we need that number popup for this! @@ -963,6 +971,7 @@ void GRAPH_OT_bake (wmOperatorType *ot) /* identifiers */ ot->name= "Bake Curve"; ot->idname= "GRAPH_OT_bake"; + ot->description= "Bake selected F-Curves to a set of sampled points defining a similar curve."; /* api callbacks */ ot->invoke= WM_operator_confirm; // FIXME... @@ -1089,6 +1098,7 @@ void GRAPH_OT_sample (wmOperatorType *ot) /* identifiers */ ot->name= "Sample Keyframes"; ot->idname= "GRAPH_OT_sample"; + ot->description= "Add keyframes on every frame between the selected keyframes."; /* api callbacks */ ot->exec= graphkeys_sample_exec; @@ -1163,6 +1173,7 @@ void GRAPH_OT_extrapolation_type (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Extrapolation"; ot->idname= "GRAPH_OT_extrapolation_type"; + ot->description= "Set extrapolation mode for selected F-Curves."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1231,6 +1242,7 @@ void GRAPH_OT_interpolation_type (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Interpolation"; ot->idname= "GRAPH_OT_interpolation_type"; + ot->description= "Set interpolation mode for the F-Curve segments starting from the selected keyframes."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1318,6 +1330,7 @@ void GRAPH_OT_handletype (wmOperatorType *ot) /* identifiers */ ot->name= "Set Keyframe Handle Type"; ot->idname= "GRAPH_OT_handletype"; + ot->description= "Set type of handle for selected keyframes."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1473,6 +1486,7 @@ void GRAPH_OT_frame_jump (wmOperatorType *ot) /* identifiers */ ot->name= "Jump to Frame"; ot->idname= "GRAPH_OT_frame_jump"; + ot->description= "Set the current frame to the average frame of the selected keyframes."; /* api callbacks */ ot->exec= graphkeys_framejump_exec; @@ -1564,6 +1578,7 @@ void GRAPH_OT_snap (wmOperatorType *ot) /* identifiers */ ot->name= "Snap Keys"; ot->idname= "GRAPH_OT_snap"; + ot->description= "Snap selected keyframes to the times specified."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1675,6 +1690,7 @@ void GRAPH_OT_mirror (wmOperatorType *ot) /* identifiers */ ot->name= "Mirror Keys"; ot->idname= "GRAPH_OT_mirror"; + ot->description= "Flip selected keyframes over the selected mirror line."; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -1729,6 +1745,7 @@ void GRAPH_OT_smooth (wmOperatorType *ot) /* identifiers */ ot->name= "Smooth Keys"; ot->idname= "GRAPH_OT_smooth"; + ot->description= "Apply weighted moving means to make selected F-Curves less bumpy."; /* api callbacks */ ot->exec= graphkeys_smooth_exec; @@ -1820,6 +1837,7 @@ void GRAPH_OT_fmodifier_add (wmOperatorType *ot) /* identifiers */ ot->name= "Add F-Curve Modifier"; ot->idname= "GRAPH_OT_fmodifier_add"; + ot->description= "Add F-Modifiers to the selected F-Curves."; /* api callbacks */ ot->invoke= graph_fmodifier_add_invoke; diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 05d9b2f7e6c..eeede3ae95b 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -219,6 +219,7 @@ static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "GRAPH_OT_clean"); uiItemO(layout, NULL, 0, "GRAPH_OT_sample"); + uiItemO(layout, NULL, 0, "GRAPH_OT_bake"); uiItemS(layout); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index a78cacb42ef..c4885d095ed 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -179,6 +179,7 @@ void GRAPH_OT_select_all_toggle (wmOperatorType *ot) /* identifiers */ ot->name= "Select All"; ot->idname= "GRAPH_OT_select_all_toggle"; + ot->description= "Toggle selection of all keyframes."; /* api callbacks */ ot->exec= graphkeys_deselectall_exec; @@ -313,6 +314,7 @@ void GRAPH_OT_select_border(wmOperatorType *ot) /* identifiers */ ot->name= "Border Select"; ot->idname= "GRAPH_OT_select_border"; + ot->description= "Select all keyframes within the specified region."; /* api callbacks */ ot->invoke= WM_border_select_invoke; @@ -506,6 +508,7 @@ void GRAPH_OT_select_column (wmOperatorType *ot) /* identifiers */ ot->name= "Select All"; ot->idname= "GRAPH_OT_select_column"; + ot->description= "Select all keyframes on the specified frame(s)."; /* api callbacks */ ot->exec= graphkeys_columnselect_exec; @@ -926,6 +929,7 @@ void GRAPH_OT_clickselect (wmOperatorType *ot) /* identifiers */ ot->name= "Mouse Select Keys"; ot->idname= "GRAPH_OT_clickselect"; + ot->description= "Select keyframes by clicking on them."; /* api callbacks */ ot->invoke= graphkeys_clickselect_invoke; From 5022bf7ccd734ad5867fdceb7f8ef125a4de4ae0 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 11 Jul 2009 10:23:07 +0000 Subject: [PATCH 159/512] 2.5 - Fixing some typos for name of Graph Editor operator An error that slipped in during the merge process? --- source/blender/editors/space_graph/graph_edit.c | 4 ++-- source/blender/editors/space_graph/graph_intern.h | 2 +- source/blender/editors/space_graph/graph_ops.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index d11ceac3264..24c7a0c5c23 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -1325,11 +1325,11 @@ static int graphkeys_handletype_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void GRAPH_OT_handletype (wmOperatorType *ot) +void GRAPH_OT_handle_type (wmOperatorType *ot) { /* identifiers */ ot->name= "Set Keyframe Handle Type"; - ot->idname= "GRAPH_OT_handletype"; + ot->idname= "GRAPH_OT_handle_type"; ot->description= "Set type of handle for selected keyframes."; /* api callbacks */ diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h index 697c31eaa98..31f1c6d4301 100644 --- a/source/blender/editors/space_graph/graph_intern.h +++ b/source/blender/editors/space_graph/graph_intern.h @@ -102,7 +102,7 @@ void GRAPH_OT_sample(struct wmOperatorType *ot); void GRAPH_OT_bake(struct wmOperatorType *ot); void GRAPH_OT_smooth(struct wmOperatorType *ot); -void GRAPH_OT_handletype(struct wmOperatorType *ot); +void GRAPH_OT_handle_type(struct wmOperatorType *ot); void GRAPH_OT_interpolation_type(struct wmOperatorType *ot); void GRAPH_OT_extrapolation_type(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index 305ad825030..68f4db555f8 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -118,7 +118,7 @@ void graphedit_operatortypes(void) WM_operatortype_append(GRAPH_OT_snap); WM_operatortype_append(GRAPH_OT_mirror); WM_operatortype_append(GRAPH_OT_frame_jump); - WM_operatortype_append(GRAPH_OT_handletype); + WM_operatortype_append(GRAPH_OT_handle_type); WM_operatortype_append(GRAPH_OT_interpolation_type); WM_operatortype_append(GRAPH_OT_extrapolation_type); WM_operatortype_append(GRAPH_OT_sample); @@ -191,7 +191,7 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) WM_keymap_add_item(keymap, "GRAPH_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "GRAPH_OT_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "GRAPH_OT_handletype", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "GRAPH_OT_handle_type", HKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "GRAPH_OT_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "GRAPH_OT_extrapolation_type", EKEY, KM_PRESS, KM_SHIFT, 0); From 8a1caaed32717f88218ea0c6222c749c14648ab3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 11 Jul 2009 11:31:49 +0000 Subject: [PATCH 160/512] Object mode select grouped operator (Shift+G and Select manu) Group option currently doesnt handle multiple groups. Set makefiles python version to 2.6 for linux since its common now. --- source/blender/blenkernel/BKE_context.h | 3 + source/blender/blenkernel/intern/context.c | 10 + source/blender/editors/object/object_edit.c | 303 ++++++++++++++++++ source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 2 + .../editors/space_view3d/space_view3d.c | 16 + .../editors/space_view3d/view3d_header.c | 1 + source/nan_definitions.mk | 2 +- 8 files changed, 337 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index f536e117b7b..92c79ff757f 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -186,6 +186,9 @@ int CTX_data_selected_bases(const bContext *C, ListBase *list); int CTX_data_visible_objects(const bContext *C, ListBase *list); int CTX_data_visible_bases(const bContext *C, ListBase *list); +int CTX_data_selectable_objects(const bContext *C, ListBase *list); +int CTX_data_selectable_bases(const bContext *C, ListBase *list); + struct Object *CTX_data_active_object(const bContext *C); struct Base *CTX_data_active_base(const bContext *C); struct Object *CTX_data_edit_object(const bContext *C); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 4a68d90a4ed..1b499384886 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -606,6 +606,16 @@ int CTX_data_visible_bases(const bContext *C, ListBase *list) return ctx_data_collection_get(C, "visible_bases", list); } +int CTX_data_selectable_objects(const bContext *C, ListBase *list) +{ + return ctx_data_collection_get(C, "selectable_objects", list); +} + +int CTX_data_selectable_bases(const bContext *C, ListBase *list) +{ + return ctx_data_collection_get(C, "selectable_bases", list); +} + struct Object *CTX_data_active_object(const bContext *C) { return ctx_data_pointer_get(C, "active_object"); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 9ea8907e172..f122412fdd6 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1690,6 +1690,309 @@ void OBJECT_OT_select_linked(wmOperatorType *ot) RNA_def_enum(ot->srna, "seltype", prop_select_types, 1, "Selection", "Extend selection or clear selection then select"); } + +/* ****** selection grouped *******/ + +static EnumPropertyItem prop_select_grouped_types[] = { + {1, "CHILDREN_RECURSIVE", 0, "Children", ""}, // XXX depreceated animation system stuff... + {2, "CHILDREN", 0, "Immediate Children", ""}, + {3, "PARENT", 0, "Parent", ""}, + {4, "SIBLINGS", 0, "Siblings", "Shared Parent"}, + {5, "TYPE", 0, "Type", "Shared object type"}, + {6, "LAYER", 0, "Layer", "Shared layers"}, + {7, "GROUP", 0, "Group", "Shared group"}, + {8, "HOOK", 0, "Hook", ""}, + {9, "PASS", 0, "Pass", "Render pass Index"}, + {10, "COLOR", 0, "Color", "Object Color"}, + {11, "PROPERTIES", 0, "Properties", "Game Properties"}, + {0, NULL, 0, NULL, NULL} +}; + + +static short select_grouped_children(bContext *C, Object *ob, int recursive) +{ + short changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if (ob == base->object->parent) { + if (!(base->flag & SELECT)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + + if (recursive) + changed |= select_grouped_children(C, base->object, 1); + } + } + CTX_DATA_END; + return changed; +} + +static short select_grouped_parent(bContext *C) /* Makes parent active and de-selected OBACT */ +{ + Scene *scene= CTX_data_scene(C); + View3D *v3d= CTX_wm_view3d(C); + + short changed = 0; + Base *baspar, *basact= CTX_data_active_base(C); + + if (!basact || !(basact->object->parent)) return 0; /* we know OBACT is valid */ + + baspar= object_in_scene(basact->object->parent, scene); + + /* can be NULL if parent in other scene */ + if(baspar && BASE_SELECTABLE(v3d, baspar)) { + ED_base_object_select(basact, BA_DESELECT); + ED_base_object_select(baspar, BA_SELECT); + ED_base_object_activate(C, baspar); + changed = 1; + } + return changed; +} + + +#define GROUP_MENU_MAX 24 +static short select_grouped_group(bContext *C, Object *ob) /* Select objects in the same group as the active */ +{ + short changed = 0; + Base *base; + Group *group, *ob_groups[GROUP_MENU_MAX]; + char str[10 + (24*GROUP_MENU_MAX)]; + char *p = str; + int group_count=0, menu, i; + + for ( group=G.main->group.first; + group && group_count < GROUP_MENU_MAX; + group=group->id.next + ) { + if (object_in_group (ob, group)) { + ob_groups[group_count] = group; + group_count++; + } + } + + if (!group_count) + return 0; + + else if (group_count == 1) { + group = ob_groups[0]; + CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + if (!(base->flag & SELECT) && object_in_group(base->object, group)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; + } +#if 0 // XXX hows this work in 2.5? + /* build the menu. */ + p += sprintf(str, "Groups%%t"); + for (i=0; iid.name+2, i); + } + + menu = pupmenu (str); + if (menu == -1) + return 0; + + group = ob_groups[menu]; + for (base= FIRSTBASE; base; base= base->next) { + if (!(base->flag & SELECT) && object_in_group(base->object, group)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } +#endif + return changed; +} + +static short select_grouped_object_hooks(bContext *C, Object *ob) +{ + Scene *scene= CTX_data_scene(C); + View3D *v3d= CTX_wm_view3d(C); + + short changed = 0; + Base *base; + ModifierData *md; + HookModifierData *hmd; + + for (md = ob->modifiers.first; md; md=md->next) { + if (md->type==eModifierType_Hook) { + hmd= (HookModifierData*) md; + if (hmd->object && !(hmd->object->flag & SELECT)) { + base= object_in_scene(hmd->object, scene); + if (base && (BASE_SELECTABLE(v3d, base))) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + } + } + return changed; +} + +/* Select objects woth the same parent as the active (siblings), + * parent can be NULL also */ +static short select_grouped_siblings(bContext *C, Object *ob) +{ + short changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if ((base->object->parent==ob->parent) && !(base->flag & SELECT)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static short select_grouped_type(bContext *C, Object *ob) +{ + short changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if ((base->object->type == ob->type) && !(base->flag & SELECT)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static short select_grouped_layer(bContext *C, Object *ob) +{ + char changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if ((base->lay & ob->lay) && !(base->flag & SELECT)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static short select_grouped_index_object(bContext *C, Object *ob) +{ + char changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if ((base->object->index == ob->index) && !(base->flag & SELECT)) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static short select_grouped_color(bContext *C, Object *ob) +{ + char changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if (!(base->flag & SELECT) && (FloatCompare(base->object->col, ob->col, 0.005f))) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static short objects_share_gameprop(Object *a, Object *b) +{ + bProperty *prop; + /*make a copy of all its properties*/ + + for( prop= a->prop.first; prop; prop = prop->next ) { + if ( get_ob_property(b, prop->name) ) + return 1; + } + return 0; +} + +static short select_grouped_gameprops(bContext *C, Object *ob) +{ + char changed = 0; + + CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + if (!(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) { + ED_base_object_select(base, BA_SELECT); + changed = 1; + } + } + CTX_DATA_END; + return changed; +} + +static int object_select_grouped_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob; + int nr = RNA_enum_get(op->ptr, "type"); + short changed = 0, seltype; + + seltype = RNA_enum_get(op->ptr, "seltype"); + + if (seltype == 0) { + CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + ED_base_object_select(base, BA_DESELECT); + } + CTX_DATA_END; + } + + ob= OBACT; + if(ob==0){ + BKE_report(op->reports, RPT_ERROR, "No Active Object"); + return OPERATOR_CANCELLED; + } + + if(nr==1) changed = select_grouped_children(C, ob, 1); + else if(nr==2) changed = select_grouped_children(C, ob, 0); + else if(nr==3) changed = select_grouped_parent(C); + else if(nr==4) changed = select_grouped_siblings(C, ob); + else if(nr==5) changed = select_grouped_type(C, ob); + else if(nr==6) changed = select_grouped_layer(C, ob); + else if(nr==7) changed = select_grouped_group(C, ob); + else if(nr==8) changed = select_grouped_object_hooks(C, ob); + else if(nr==9) changed = select_grouped_index_object(C, ob); + else if(nr==10) changed = select_grouped_color(C, ob); + else if(nr==11) changed = select_grouped_gameprops(C, ob); + + if (changed) { + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void OBJECT_OT_select_grouped(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select Grouped"; + ot->description = "Select all visible objects grouped by various properties."; + ot->idname= "OBJECT_OT_select_grouped"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= object_select_grouped_exec; + ot->poll= ED_operator_scene_editable; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", prop_select_grouped_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "seltype", prop_select_types, 1, "Selection", "Extend selection or clear selection then select"); + +} + /* ****** selection by layer *******/ static int object_select_by_layer_exec(bContext *C, wmOperator *op) diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 2173e79ac66..748e8f7b396 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -50,6 +50,7 @@ void OBJECT_OT_select_random(struct wmOperatorType *ot); void OBJECT_OT_select_by_type(struct wmOperatorType *ot); void OBJECT_OT_select_by_layer(struct wmOperatorType *ot); void OBJECT_OT_select_linked(struct wmOperatorType *ot); +void OBJECT_OT_select_grouped(struct wmOperatorType *ot); void OBJECT_OT_location_clear(struct wmOperatorType *ot); void OBJECT_OT_rotation_clear(struct wmOperatorType *ot); void OBJECT_OT_scale_clear(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 50c14673939..258fc3386cf 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -74,6 +74,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_select_by_type); WM_operatortype_append(OBJECT_OT_select_by_layer); WM_operatortype_append(OBJECT_OT_select_linked); + WM_operatortype_append(OBJECT_OT_select_grouped); WM_operatortype_append(OBJECT_OT_location_clear); WM_operatortype_append(OBJECT_OT_rotation_clear); WM_operatortype_append(OBJECT_OT_scale_clear); @@ -144,6 +145,7 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_add_item(keymap, "OBJECT_OT_select_by_type", PADASTERKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_by_layer", PADASTERKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index e52d2886439..9b6b70eb396 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -675,6 +675,22 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes return 1; } + else if(CTX_data_equals(member, "selectable_objects") || CTX_data_equals(member, "selectable_bases")) { + int selectable_objects= CTX_data_equals(member, "selectable_objects"); + + for(base=scene->base.first; base; base=base->next) { + if(base->lay & v3d->lay) { + if((base->object->restrictflag & OB_RESTRICT_VIEW)==0 && (base->object->restrictflag & OB_RESTRICT_SELECT)==0) { + if(selectable_objects) + CTX_data_id_list_add(result, &base->object->id); + else + CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + } + } + } + + return 1; + } else if(CTX_data_equals(member, "active_base")) { if(scene->basact && (scene->basact->lay & v3d->lay)) if((scene->basact->object->restrictflag & OB_RESTRICT_VIEW)==0) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index e6d3ec54d44..387c3c7626a 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1039,6 +1039,7 @@ static void view3d_select_objectmenu(bContext *C, uiLayout *layout, void *arg_un uiItemO(layout, "Random", 0, "OBJECT_OT_select_random"); uiItemO(layout, "Select All by Layer", 0, "OBJECT_OT_select_by_layer"); uiItemMenuEnumO(layout, "Select All by Type", 0, "OBJECT_OT_select_by_type", "type"); + uiItemMenuEnumO(layout, "Select Grouped", 0, "OBJECT_OT_select_grouped", "type"); #if 0 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, ""); diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk index 91f90525c1e..fc0f3a7aa19 100644 --- a/source/nan_definitions.mk +++ b/source/nan_definitions.mk @@ -307,7 +307,7 @@ endif export FREEDESKTOP ?= true export NAN_PYTHON ?= /usr - export NAN_PYTHON_VERSION ?= 2.5 + export NAN_PYTHON_VERSION ?= 2.6 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a export NAN_OPENAL ?= /usr From 10d14e72599e891ce253e37826ce6ed3c0aecd8d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 11 Jul 2009 11:52:20 +0000 Subject: [PATCH 161/512] 2.5 - Restored Set/Clear Inverse Buttons for ChildOf Constraint I've tagged these operators with CONSTRAINT_OT_* not OBJECT_OT_constraint_* since constraints can operate on Bones too (and do so more often) --- release/ui/buttons_object_constraint.py | 4 +- source/blender/editors/include/ED_object.h | 2 - .../blender/editors/object/editconstraint.c | 110 ++++++++---------- source/blender/editors/object/object_intern.h | 3 + source/blender/editors/object/object_ops.c | 2 + 5 files changed, 53 insertions(+), 68 deletions(-) diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index f2b0b986ab9..142e9045ec7 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -111,8 +111,8 @@ class ConstraintButtonsPanel(bpy.types.Panel): # Missing row = layout.row() - row.itemL(text="SET OFFSET") - row.itemL(text="CLEAR OFFSET") + row.itemO("CONSTRAINT_OT_childof_set_inverse") + row.itemO("CONSTRAINT_OT_childof_clear_inverse") def track_to(self, layout, con): self.target_template(layout, con) diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 9dcdc30a691..83bcd6a5176 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -35,7 +35,6 @@ struct bContext; struct Base; struct View3D; struct bConstraint; -struct bConstraintChannel; struct KeyBlock; struct Lattice; struct Mesh; @@ -78,7 +77,6 @@ void add_constraint_to_object(struct bConstraint *con, struct Object *ob); struct ListBase *get_active_constraints(struct Object *ob); struct bConstraint *get_active_constraint(struct Object *ob); -struct bConstraintChannel *get_active_constraint_channel(struct Scene *scene, struct Object *ob); void object_test_constraints(struct Object *ob); diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index ff2f79e7cdb..4c9a0bf4c67 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -117,63 +117,6 @@ bConstraint *get_active_constraint (Object *ob) return NULL; } - -/* single channel, for ipo */ -bConstraintChannel *get_active_constraint_channel (Scene *scene, Object *ob) -{ - bConstraint *con; - - if (ob->flag & OB_POSEMODE) { - //if (ob->action) { // XXX old animation system - bPoseChannel *pchan; - - pchan = get_active_posechannel(ob); - if (pchan) { - for (con= pchan->constraints.first; con; con= con->next) { - if (con->flag & CONSTRAINT_ACTIVE) - break; - } - - if (con) { -#if 0 // XXX old animation system - bActionChannel *achan = get_action_channel(ob->action, pchan->name); - if (achan) { - for (chan= achan->constraintChannels.first; chan; chan= chan->next) { - if (!strcmp(chan->name, con->name)) - break; - } - return chan; - } -#endif // XXX old animation system - } - } - //} // xxx old animation system - } - else { - for (con= ob->constraints.first; con; con= con->next) { - if (con->flag & CONSTRAINT_ACTIVE) - break; - } - - if (con) { -#if 0 // XXX old animation system - ListBase *lb= get_active_constraint_channels(scene, ob, 0); - - if (lb) { - for (chan= lb->first; chan; chan= chan->next) { - if (!strcmp(chan->name, con->name)) - break; - } - - return chan; - } -#endif // XXX old animation system - } - } - - return NULL; -} - /* -------------- Constraint Management (Add New, Remove, Rename) -------------------- */ /* ------------- PyConstraints ------------------ */ @@ -790,15 +733,17 @@ void object_test_constraints (Object *owner) /* ------------- Child-Of Constraint ------------------ */ /* ChildOf Constraint - set inverse callback */ -void childof_const_setinv (void *conv, void *scenev) +static int childof_set_inverse_exec (bContext *C, wmOperator *op) { - bConstraint *con= (bConstraint *)conv; - Scene *scene= (Scene *)scenev; + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_ChildOfConstraint); + Scene *scene= CTX_data_scene(C); + Object *ob= ptr.id.data; + bConstraint *con= ptr.data; bChildOfConstraint *data= (bChildOfConstraint *)con->data; - Object *ob= OBACT; bPoseChannel *pchan= NULL; /* try to find a pose channel */ + // TODO: get from context instead? if (ob && ob->pose) pchan= get_active_posechannel(ob); @@ -839,16 +784,53 @@ void childof_const_setinv (void *conv, void *scenev) } else Mat4One(data->invmat); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + + return OPERATOR_FINISHED; } -/* ChildOf Constraint - clear inverse callback */ -void childof_const_clearinv (void *conv, void *unused) +void CONSTRAINT_OT_childof_set_inverse (wmOperatorType *ot) { - bConstraint *con= (bConstraint *)conv; + /* identifiers */ + ot->name= "Set Inverse"; + ot->idname= "CONSTRAINT_OT_childof_set_inverse"; + ot->description= "Set inverse correction for ChildOf constraint."; + + ot->exec= childof_set_inverse_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + +/* ChildOf Constraint - clear inverse callback */ +static int childof_clear_inverse_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_ChildOfConstraint); + Object *ob= ptr.id.data; + bConstraint *con= ptr.data; bChildOfConstraint *data= (bChildOfConstraint *)con->data; /* simply clear the matrix */ Mat4One(data->invmat); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + + return OPERATOR_FINISHED; +} + +void CONSTRAINT_OT_childof_clear_inverse (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Clear Inverse"; + ot->idname= "CONSTRAINT_OT_childof_clear_inverse"; + ot->description= "Clear inverse correction for ChildOf constraint."; + + ot->exec= childof_clear_inverse_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } /***************************** BUTTONS ****************************/ diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 748e8f7b396..0ad5bd7d08e 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -102,6 +102,9 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); +void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot); +void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot); + /* object_vgroup.c */ void OBJECT_OT_vertex_group_add(struct wmOperatorType *ot); void OBJECT_OT_vertex_group_remove(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 258fc3386cf..66dd1b8fbb9 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -111,6 +111,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_mdef_bind); WM_operatortype_append(OBJECT_OT_constraint_add); + WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse); + WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse); WM_operatortype_append(OBJECT_OT_vertex_group_add); WM_operatortype_append(OBJECT_OT_vertex_group_remove); From 0096a3dee2082d5dd15278a2e5627b6446f18e0a Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 11 Jul 2009 12:54:17 +0000 Subject: [PATCH 162/512] 2.5 - Made more operators for constraint buttons * Move Up/Down and Delete are now operators * Made TrackTo constraint use expanded enum toggles for up axis too. --> BUG ALERT: specifying name and expand in the arguments to itemR doesn't work (name gets skipped) --- release/ui/buttons_object_constraint.py | 2 +- source/blender/editors/include/ED_object.h | 3 - .../editors/interface/interface_templates.c | 48 +----- .../blender/editors/object/editconstraint.c | 142 +++++++++++------- source/blender/editors/object/object_intern.h | 4 + source/blender/editors/object/object_ops.c | 3 + 6 files changed, 99 insertions(+), 103 deletions(-) diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 142e9045ec7..12aed082381 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -109,7 +109,6 @@ class ConstraintButtonsPanel(bpy.types.Panel): sub.itemR(con, "sizey", text="Y") sub.itemR(con, "sizez", text="Z") - # Missing row = layout.row() row.itemO("CONSTRAINT_OT_childof_set_inverse") row.itemO("CONSTRAINT_OT_childof_clear_inverse") @@ -122,6 +121,7 @@ class ConstraintButtonsPanel(bpy.types.Panel): row.itemR(con, "track", expand=True) row = layout.row() + #row.itemR(con, "up", text="Up", expand=True) # XXX: up and expand don't play nice together row.itemR(con, "up", text="Up") row.itemR(con, "target_z") diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 83bcd6a5176..f7dcc7fd1a0 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -82,9 +82,6 @@ void object_test_constraints(struct Object *ob); void ED_object_constraint_rename(struct Object *ob, struct bConstraint *con, char *oldname); void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con); -int ED_object_constraint_delete(struct ReportList *reports, struct Object *ob, struct bConstraint *con); -int ED_object_constraint_move_down(struct ReportList *reports, struct Object *ob, struct bConstraint *con); -int ED_object_constraint_move_up(struct ReportList *reports, struct Object *ob, struct bConstraint *con); /* editlattice.c */ void mouse_lattice(struct bContext *C, short mval[2], int extend); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 91fbd24f8a6..8f25459a682 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -616,12 +616,6 @@ static void constraint_active_func(bContext *C, void *ob_v, void *con_v) ED_object_constraint_set_active(ob_v, con_v); } -static void del_constraint_func (bContext *C, void *ob_v, void *con_v) -{ - if(ED_object_constraint_delete(NULL, ob_v, con_v)) - ED_undo_push(C, "Delete Constraint"); -} - static void verify_constraint_name_func (bContext *C, void *con_v, void *name_v) { Object *ob= CTX_data_active_object(C); @@ -639,18 +633,6 @@ static void verify_constraint_name_func (bContext *C, void *con_v, void *name_v) // XXX allqueue(REDRAWACTION, 0); } -static void constraint_moveUp(bContext *C, void *ob_v, void *con_v) -{ - if(ED_object_constraint_move_up(NULL, ob_v, con_v)) - ED_undo_push(C, "Move Constraint"); -} - -static void constraint_moveDown(bContext *C, void *ob_v, void *con_v) -{ - if(ED_object_constraint_move_down(NULL, ob_v, con_v)) - ED_undo_push(C, "Move Constraint"); -} - /* some commonly used macros in the constraints drawing code */ #define is_armature_target(target) (target && target->type==OB_ARMATURE) #define is_armature_owner(ob) ((ob->type == OB_ARMATURE) && (ob->flag & OB_POSEMODE)) @@ -828,25 +810,18 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) uiBlockBeginAlign(block); uiBlockSetEmboss(block, UI_EMBOSS); - if (show_upbut) { - but = uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, VICON_MOVE_UP, xco+width-50, yco, 16, 18, NULL, 0.0, 0.0, 0.0, 0.0, "Move constraint up in constraint stack"); - uiButSetFunc(but, constraint_moveUp, ob, con); - } + if (show_upbut) + uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_up", WM_OP_INVOKE_DEFAULT, VICON_MOVE_UP, xco+width-50, yco, 16, 18, "Move constraint up in constraint stack"); - if (show_downbut) { - but = uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, VICON_MOVE_DOWN, xco+width-50+18, yco, 16, 18, NULL, 0.0, 0.0, 0.0, 0.0, "Move constraint down in constraint stack"); - uiButSetFunc(but, constraint_moveDown, ob, con); - } + if (show_downbut) + uiDefIconButO(block, BUT, "CONSTRAINT_OT_move_down", WM_OP_INVOKE_DEFAULT, VICON_MOVE_DOWN, xco+width-50+18, yco, 16, 18, "Move constraint down in constraint stack"); uiBlockEndAlign(block); } /* Close 'button' - emboss calls here disable drawing of 'button' behind X */ uiBlockSetEmboss(block, UI_EMBOSSN); - - but = uiDefIconBut(block, BUT, B_CONSTRAINT_CHANGETARGET, ICON_X, xco+262, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete constraint"); - uiButSetFunc(but, del_constraint_func, ob, con); - + uiDefIconButO(block, BUT, "CONSTRAINT_OT_delete", WM_OP_INVOKE_DEFAULT, ICON_X, xco+262, yco, 19, 19, "Delete constraint"); uiBlockSetEmboss(block, UI_EMBOSS); } @@ -944,19 +919,6 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) } break; #endif /* DISABLE_PYTHON */ - /*case CONSTRAINT_TYPE_CHILDOF: - { - // Inverse options - uiBlockBeginAlign(block); - but=uiDefBut(block, BUT, B_CONSTRAINT_TEST, "Set Offset", xco, yco-151, (width/2),18, NULL, 0, 24, 0, 0, "Calculate current Parent-Inverse Matrix (i.e. restore offset from parent)"); - // XXX uiButSetFunc(but, childof_const_setinv, con, NULL); - - but=uiDefBut(block, BUT, B_CONSTRAINT_TEST, "Clear Offset", xco+((width/2)+10), yco-151, (width/2),18, NULL, 0, 24, 0, 0, "Clear Parent-Inverse Matrix (i.e. clear offset from parent)"); - // XXX uiButSetFunc(but, childof_const_clearinv, con, NULL); - uiBlockEndAlign(block); - } - break; - */ /*case CONSTRAINT_TYPE_RIGIDBODYJOINT: { diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 4c9a0bf4c67..7be4697d0c8 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -81,7 +81,6 @@ static int pupmenu() {return 0;} /* -------------- Get Active Constraint Data ---------------------- */ - /* if object in posemode, active bone constraints, else object constraints */ ListBase *get_active_constraints (Object *ob) { @@ -841,7 +840,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname) bConstraint *tcon; ListBase *conlist= NULL; int from_object= 0; - char *channame=""; /* get context by searching for con (primitive...) */ for (tcon= ob->constraints.first; tcon; tcon= tcon->next) { @@ -851,7 +849,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname) if (tcon) { conlist= &ob->constraints; - channame= "Object"; from_object= 1; } else if (ob->pose) { @@ -868,7 +865,6 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname) if (tcon) { conlist= &pchan->constraints; - channame= pchan->name; } } @@ -878,7 +874,7 @@ void ED_object_constraint_rename(Object *ob, bConstraint *con, char *oldname) } /* first make sure it's a unique name within context */ - unique_constraint_name (con, conlist); + unique_constraint_name(con, conlist); } @@ -901,77 +897,111 @@ void ED_object_constraint_set_active(Object *ob, bConstraint *con) if(con==origcon) con->flag |= CONSTRAINT_ACTIVE; else con->flag &= ~CONSTRAINT_ACTIVE; } - - /* make sure ipowin and buttons shows it */ - if(ob->ipowin==ID_CO) { - // XXX allqueue(REDRAWIPO, ID_CO); - // XXX allspace(REMAKEIPO, 0); - // XXX allqueue(REDRAWNLA, 0); - } - // XXX allqueue(REDRAWBUTSOBJECT, 0); } -int ED_object_constraint_delete(ReportList *reports, Object *ob, bConstraint *con) +static int constraint_delete_exec (bContext *C, wmOperator *op) { - bConstraintChannel *chan; + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + Object *ob= ptr.id.data; + bConstraint *con= ptr.data; ListBase *lb; - /* remove ipo channel */ - lb= NULL; // XXX get_active_constraint_channels(ob, 0); - if(lb) { - chan = NULL; // XXX get_constraint_channel(lb, con->name); - if(chan) { - if(chan->ipo) chan->ipo->id.us--; - BLI_freelinkN(lb, chan); - } - } - /* remove constraint itself */ lb= get_active_constraints(ob); free_constraint_data(con); BLI_freelinkN(lb, con); ED_object_constraint_set_active(ob, NULL); + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); - return 1; + return OPERATOR_FINISHED; } -int ED_object_constraint_move_down(ReportList *reports, Object *ob, bConstraint *constr) +void CONSTRAINT_OT_delete (wmOperatorType *ot) { - bConstraint *con; - ListBase *conlist; + /* identifiers */ + ot->name= "Delete Constraint"; + ot->idname= "CONSTRAINT_OT_delete"; + ot->description= "Remove constraitn from constraint stack."; - if(constr->next) { - conlist = get_active_constraints(ob); - for(con= conlist->first; con; con= con->next) { - if(con==constr) { - BLI_remlink(conlist, con); - BLI_insertlink(conlist, con->next, con); - return 1; - } - } - } - - return 0; + /* callbacks */ + ot->exec= constraint_delete_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -int ED_object_constraint_move_up(ReportList *reports, Object *ob, bConstraint *constr) +static int constraint_move_down_exec (bContext *C, wmOperator *op) { - bConstraint *con; - ListBase *conlist; + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + Object *ob= ptr.id.data; + bConstraint *con= ptr.data; - if(constr->prev) { - conlist = get_active_constraints(ob); - for(con= conlist->first; con; con= con->next) { - if(con==constr) { - BLI_remlink(conlist, con); - BLI_insertlink(conlist, con->prev->prev, con); - return 1; - } - } + if (con->next) { + ListBase *conlist= get_active_constraints(ob); + bConstraint *nextCon= con->next; + + /* insert the nominated constraint after the one that used to be after it */ + BLI_remlink(conlist, con); + BLI_insertlinkafter(conlist, nextCon, con); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + + return OPERATOR_FINISHED; } + + return OPERATOR_CANCELLED; +} - return 0; +void CONSTRAINT_OT_move_down (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Move Constraint Down"; + ot->idname= "CONSTRAINT_OT_move_down"; + ot->description= "Move constraint down constraint stack."; + + /* callbacks */ + ot->exec= constraint_move_down_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + +static int constraint_move_up_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + Object *ob= ptr.id.data; + bConstraint *con= ptr.data; + + if (con->prev) { + ListBase *conlist= get_active_constraints(ob); + bConstraint *prevCon= con->prev; + + /* insert the nominated constraint before the one that used to be before it */ + BLI_remlink(conlist, con); + BLI_insertlinkbefore(conlist, prevCon, con); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void CONSTRAINT_OT_move_up (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Move Constraint Up"; + ot->idname= "CONSTRAINT_OT_move_up"; + ot->description= "Move constraint up constraint stack."; + + /* callbacks */ + ot->exec= constraint_move_up_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } /***************************** OPERATORS ****************************/ @@ -1015,10 +1045,10 @@ static int constraint_add_exec(bContext *C, wmOperator *op) case CONSTRAINT_TYPE_RIGIDBODYJOINT: { bRigidBodyJointConstraint *data; - + /* set selected first object as target - moved from new_constraint_data */ data = (bRigidBodyJointConstraint*)con->data; - + CTX_DATA_BEGIN(C, Object*, selob, selected_objects) { if(selob != ob) { data->tar= selob; diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 0ad5bd7d08e..76ce8857c2c 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -101,6 +101,10 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); +void CONSTRAINT_OT_delete(struct wmOperatorType *ot); + +void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); +void CONSTRAINT_OT_move_down(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 66dd1b8fbb9..9a0ce23a970 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -111,6 +111,9 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_mdef_bind); WM_operatortype_append(OBJECT_OT_constraint_add); + WM_operatortype_append(CONSTRAINT_OT_delete); + WM_operatortype_append(CONSTRAINT_OT_move_up); + WM_operatortype_append(CONSTRAINT_OT_move_down); WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse); WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse); From b775f1bb322a6277916c24ca282b899532a52e96 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 11 Jul 2009 13:32:20 +0000 Subject: [PATCH 163/512] 2.5: * Code to start moving 3D view header and panels to python, at the moment the View menu and one empty panel is in python. The C header code is wrapped in one template, so parts of that can be moved over while still keeping things working. * Fix for mistake in RNA enum commit yesterday, and some warning fixes. --- release/ui/space_view3d.py | 106 ++++++++++++++++++ source/blender/editors/include/UI_interface.h | 1 + source/blender/editors/object/object_edit.c | 6 +- .../editors/space_view3d/space_view3d.c | 23 +--- .../editors/space_view3d/view3d_header.c | 93 +-------------- source/blender/makesrna/intern/rna_access.c | 5 +- source/blender/makesrna/intern/rna_ui_api.c | 3 + 7 files changed, 122 insertions(+), 115 deletions(-) create mode 100644 release/ui/space_view3d.py diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py new file mode 100644 index 00000000000..c338241d5d7 --- /dev/null +++ b/release/ui/space_view3d.py @@ -0,0 +1,106 @@ + +import bpy + +class VIEW3D_MT_view_navigation(bpy.types.Menu): + __space_type__ = "VIEW_3D" + __label__ = "Navigation" + + def draw(self, context): + layout = self.layout + + # layout.itemO("VIEW3D_OT_view_fly_mode") + # layout.itemS() + + layout.items_enumO("VIEW3D_OT_view_orbit", "type") + + layout.itemS() + + layout.items_enumO("VIEW3D_OT_view_pan", "type") + + layout.itemS() + + layout.item_floatO("VIEW3D_OT_zoom", "delta", 1.0, text="Zoom In") + layout.item_floatO("VIEW3D_OT_zoom", "delta", -1.0, text="Zoom Out") + +class VIEW3D_MT_view(bpy.types.Menu): + __space_type__ = "VIEW_3D" + __label__ = "View" + + def draw(self, context): + layout = self.layout + + layout.itemO("VIEW3D_OT_properties", icon="ICON_MENU_PANEL") + layout.itemO("VIEW3D_OT_toolbar", icon="ICON_MENU_PANEL") + + layout.itemS() + + layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "CAMERA") + layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "TOP") + layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "FRONT") + layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "RIGHT") + + # layout.itemM("VIEW3D_MT_view_cameras", text="Cameras") + + layout.itemS() + + layout.itemO("VIEW3D_OT_view_persportho") + + layout.itemS() + + # layout.itemO("VIEW3D_OT_view_show_all_layers") + + # layout.itemS() + + # layout.itemO("VIEW3D_OT_view_local_view") + # layout.itemO("VIEW3D_OT_view_global_view") + + # layout.itemS() + + layout.itemM("VIEW3D_MT_view_navigation") + # layout.itemM("VIEW3D_MT_view_align", text="Align View") + + layout.itemS() + + layout.operator_context = "INVOKE_REGION_WIN" + + layout.itemO("VIEW3D_OT_clip_border") + layout.itemO("VIEW3D_OT_zoom_border") + + layout.itemS() + + layout.itemO("VIEW3D_OT_view_center") + layout.itemO("VIEW3D_OT_view_all") + + layout.itemS() + + layout.itemO("SCREEN_OT_screen_full_area") + +class VIEW3D_HT_header(bpy.types.Header): + __space_type__ = "VIEW_3D" + + def draw(self, context): + layout = self.layout + + layout.template_header() + + # menus + if context.area.show_menus: + row = layout.row() + row.itemM("VIEW3D_MT_view") + + layout.template_header_3D() + +class VIEW3D_PT_random_panel(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "UI" + __label__ = "Random Panel" + + def draw(self, context): + layout = self.layout + layout.itemL(text="panel contents") + +bpy.types.register(VIEW3D_MT_view_navigation) +bpy.types.register(VIEW3D_MT_view) +bpy.types.register(VIEW3D_HT_header) +bpy.types.register(VIEW3D_PT_random_panel) + diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 67438120eef..66089272737 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -622,6 +622,7 @@ void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *i ListBase uiTemplateList(uiLayout *layout, struct PointerRNA *ptr, char *propname, struct PointerRNA *activeptr, char *activeprop, int rows, int columns, int compact); void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); void uiTemplateOperatorSearch(uiLayout *layout); +void uiTemplateHeader3D(uiLayout *layout, struct bContext *C); /* items */ void uiItemO(uiLayout *layout, char *name, int icon, char *opname); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index f122412fdd6..e39ed800e0c 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1757,9 +1757,9 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in short changed = 0; Base *base; Group *group, *ob_groups[GROUP_MENU_MAX]; - char str[10 + (24*GROUP_MENU_MAX)]; - char *p = str; - int group_count=0, menu, i; + //char str[10 + (24*GROUP_MENU_MAX)]; + //char *p = str; + int group_count=0; //, menu, i; for ( group=G.main->group.first; group && group_count < GROUP_MENU_MAX; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 9b6b70eb396..718b74e5225 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -490,30 +490,13 @@ static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar) ListBase *keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + + ED_region_header_init(ar); } static void view3d_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - view3d_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } static void view3d_header_area_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 387c3c7626a..e68a1c8a10a 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -636,86 +636,6 @@ static void do_view3d_viewmenu(bContext *C, void *arg, int event) } #endif -static void view3d_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ -// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_fly_mode"); - -// uiItemS(layout); - - uiItemsEnumO(layout, "VIEW3D_OT_view_orbit", "type"); - - uiItemS(layout); - - uiItemsEnumO(layout, "VIEW3D_OT_view_pan", "type"); - - uiItemS(layout); - - uiItemFloatO(layout, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f); - uiItemFloatO(layout, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f); - -} -static void view3d_view_alignviewmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - -} - -static void view3d_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - ScrArea *sa= CTX_wm_area(C); - - uiItemO(layout, NULL, ICON_MENU_PANEL, "VIEW3D_OT_properties"); - uiItemO(layout, NULL, ICON_MENU_PANEL, "VIEW3D_OT_toolbar"); - -// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations... -// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview... -// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties.... -// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image.... -// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil.... - - uiItemS(layout); - - uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA); - uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP); - uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT); - uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT); - - //uiItemMenuF(layout, "Cameras", view3d_view_camerasmenu); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "VIEW3D_OT_view_persportho"); - - uiItemS(layout); - -// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_show_all_layers"); - -// uiItemS(layout); - -// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_local_view"); -// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_global_view"); - -// uiItemS(layout); - - uiItemMenuF(layout, "View Navigation", 0, view3d_view_viewnavmenu); - uiItemMenuF(layout, "Align View", 0, view3d_view_alignviewmenu); - - uiItemS(layout); - - uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_REGION_WIN); - - uiItemO(layout, NULL, 0, "VIEW3D_OT_clip_border"); - uiItemO(layout, NULL, 0, "VIEW3D_OT_zoom_border"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "VIEW3D_OT_view_center"); - uiItemO(layout, NULL, 0, "VIEW3D_OT_view_all"); - - uiItemS(layout); - - if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow -} #if 0 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused) { @@ -4344,7 +4264,6 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o RegionView3D *rv3d= wm_region_view3d(C); short xmax, xco= *xcoord; - /* compensate for local mode when setting up the viewing menu/iconrow values */ if(rv3d->view==7) rv3d->viewbut= 1; else if(rv3d->view==1) rv3d->viewbut= 2; @@ -4355,11 +4274,6 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o * menu is drawn wider than it should be. The ypos of -2 is to make it properly fill the * height of the header */ - xmax= GetButStringLength("View"); - uiDefMenuBut(block, view3d_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); - //uiDefPulldownBut(block, view3d_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); - xco+= xmax; - xmax= GetButStringLength("Select"); if (obedit) { if (ob && ob->type == OB_MESH) { @@ -4495,8 +4409,9 @@ static void header_xco_step(ARegion *ar, int *xco, int *yco, int *maxco, int ste } } -void view3d_header_buttons(const bContext *C, ARegion *ar) +void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) { + ARegion *ar= CTX_wm_region(C); ScrArea *sa= CTX_wm_area(C); View3D *v3d= sa->spacedata.first; Scene *scene= CTX_data_scene(C); @@ -4506,11 +4421,9 @@ void view3d_header_buttons(const bContext *C, ARegion *ar) uiBlock *block; int a, xco, maxco=0, yco= 3; - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); + block= uiLayoutFreeBlock(layout); uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL); - xco= ED_area_header_standardbuttons(C, block, yco); - if((sa->flag & HEADER_NO_PULLDOWN)==0) view3d_header_pulldowns(C, block, ob, &xco, yco); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index f20df81d6ad..d6ca03c85a2 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -650,9 +650,10 @@ void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, En if(C && eprop->itemf) { *item= eprop->itemf(C, ptr, free); - if(totitem) + if(totitem) { for(tot=0; (*item)[tot].identifier; tot++); - *totitem= tot; + *totitem= tot; + } } else { *item= eprop->item; diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 363891e0f24..404befc9bb2 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -273,6 +273,9 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_function_flag(func, FUNC_USE_CONTEXT); func= RNA_def_function(srna, "template_operator_search", "uiTemplateOperatorSearch"); + + func= RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); } #endif From b1d01dae36ffa735090e8daec9b8ed953fef0aa4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 11 Jul 2009 13:57:56 +0000 Subject: [PATCH 164/512] PyApi * refcount error if StringIO or io modules could not be imported * importing python modules like math didnt work because the script registration overwrote the script path. now just prepend the path. --- .../editors/space_view3d/space_view3d.c | 2 +- source/blender/python/intern/bpy_interface.c | 22 +++++++--------- source/blender/python/intern/bpy_util.c | 25 +++++++++++++------ 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 718b74e5225..f0c3a2c200c 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -601,7 +601,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes if(CTX_data_dir(member)) { static const char *dir[] = { "selected_objects", "selected_bases" "selected_editable_objects", - "selected_editable_bases" "visible_objects", "visible_bases", + "selected_editable_bases" "visible_objects", "visible_bases", "selectable_objects", "selectable_bases", "active_base", "active_object", "visible_bones", "editable_bones", "selected_bones", "selected_editable_bones" "visible_pchans", "selected_pchans", "active_bone", "active_pchan", NULL}; diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 42eb9c4c57a..a07c447c718 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -457,8 +457,7 @@ void BPY_run_ui_scripts(bContext *C, int reload) PyGILState_STATE gilstate; PyObject *mod; - PyObject *sys_path_orig; - PyObject *sys_path_new; + PyObject *sys_path; gilstate = PyGILState_Ensure(); @@ -466,6 +465,10 @@ void BPY_run_ui_scripts(bContext *C, int reload) BPy_SetContext(C); bpy_import_main_set(CTX_data_main(C)); + + sys_path= PySys_GetObject("path"); /* borrow */ + PyList_Insert(sys_path, 0, Py_None); /* place holder, resizes the list */ + for(a=0; dirs[a]; a++) { dirname= BLI_gethome_folder(dirs[a]); @@ -476,15 +479,9 @@ void BPY_run_ui_scripts(bContext *C, int reload) if(!dir) continue; - - /* backup sys.path */ - sys_path_orig= PySys_GetObject("path"); - Py_INCREF(sys_path_orig); /* dont free it */ - sys_path_new= PyList_New(1); - PyList_SET_ITEM(sys_path_new, 0, PyUnicode_FromString(dirname)); - PySys_SetObject("path", sys_path_new); - Py_DECREF(sys_path_new); + /* set the first dir in the sys.path for fast importing of modules */ + PyList_SetItem(sys_path, 0, PyUnicode_FromString(dirname)); /* steals the ref */ while((de = readdir(dir)) != NULL) { /* We could stat the file but easier just to let python @@ -514,11 +511,10 @@ void BPY_run_ui_scripts(bContext *C, int reload) } closedir(dir); - - PySys_SetObject("path", sys_path_orig); - Py_DECREF(sys_path_orig); } + PyList_SetSlice(sys_path, 0, 1, NULL); /* remove the first item */ + bpy_import_main_set(NULL); PyGILState_Release(gilstate); diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c index 9f1ef0c6251..b451923e780 100644 --- a/source/blender/python/intern/bpy_util.c +++ b/source/blender/python/intern/bpy_util.c @@ -348,8 +348,8 @@ PyObject *BPY_exception_buffer(void) PyObject *stderr_backup = PySys_GetObject("stderr"); /* borrowed */ PyObject *string_io = NULL; PyObject *string_io_buf = NULL; - PyObject *string_io_mod; - PyObject *string_io_getvalue; + PyObject *string_io_mod= NULL; + PyObject *string_io_getvalue= NULL; PyObject *error_type, *error_value, *error_traceback; @@ -369,14 +369,11 @@ PyObject *BPY_exception_buffer(void) #else if(! (string_io_mod= PyImport_ImportModule("io")) ) { #endif - return NULL; + goto error_cleanup; } else if (! (string_io = PyObject_CallMethod(string_io_mod, "StringIO", NULL))) { - Py_DECREF(string_io_mod); - return NULL; + goto error_cleanup; } else if (! (string_io_getvalue= PyObject_GetAttrString(string_io, "getvalue"))) { - Py_DECREF(string_io_mod); - Py_DECREF(string_io); - return NULL; + goto error_cleanup; } Py_INCREF(stdout_backup); // since these were borrowed we dont want them freed when replaced. @@ -403,6 +400,18 @@ PyObject *BPY_exception_buffer(void) PyErr_Clear(); return string_io_buf; + + +error_cleanup: + /* could not import the module so print the error and close */ + Py_XDECREF(string_io_mod); + Py_XDECREF(string_io); + + PyErr_Restore(error_type, error_value, error_traceback); + PyErr_Print(); /* print the error */ + PyErr_Clear(); + + return NULL; } char *BPy_enum_as_string(EnumPropertyItem *item) From f3fdf9257b8d68603b827f62273c79d3cc476207 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 11 Jul 2009 14:50:12 +0000 Subject: [PATCH 165/512] 2.5: use primitive icons in the Add Object menu. --- source/blender/editors/object/object_edit.c | 40 ++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index e39ed800e0c..35b6e23eaa5 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -322,16 +322,16 @@ void OBJECT_OT_object_add(wmOperatorType *ot) /* ****** work both in and outside editmode ****** */ static EnumPropertyItem prop_mesh_types[] = { - {0, "PLANE", 0, "Plane", ""}, - {1, "CUBE", 0, "Cube", ""}, - {2, "CIRCLE", 0, "Circle", ""}, - {3, "UVSPHERE", 0, "UVsphere", ""}, - {4, "ICOSPHERE", 0, "Icosphere", ""}, - {5, "CYLINDER", 0, "Cylinder", ""}, - {6, "CONE", 0, "Cone", ""}, + {0, "PLANE", ICON_MESH_PLANE, "Plane", ""}, + {1, "CUBE", ICON_MESH_CUBE, "Cube", ""}, + {2, "CIRCLE", ICON_MESH_CIRCLE, "Circle", ""}, + {3, "UVSPHERE", ICON_MESH_UVSPHERE, "UVsphere", ""}, + {4, "ICOSPHERE", ICON_MESH_ICOSPHERE, "Icosphere", ""}, + {5, "CYLINDER", ICON_MESH_TUBE, "Cylinder", ""}, + {6, "CONE", ICON_MESH_CONE, "Cone", ""}, {0, "", 0, NULL, NULL}, - {7, "GRID", 0, "Grid", ""}, - {8, "MONKEY", 0, "Monkey", ""}, + {7, "GRID", ICON_MESH_GRID, "Grid", ""}, + {8, "MONKEY", ICON_MESH_MONKEY, "Monkey", ""}, {0, NULL, 0, NULL, NULL} }; @@ -407,11 +407,11 @@ void OBJECT_OT_mesh_add(wmOperatorType *ot) } static EnumPropertyItem prop_curve_types[] = { - {CU_BEZIER|CU_2D|CU_PRIM_CURVE, "BEZIER_CURVE", 0, "Bezier Curve", ""}, - {CU_BEZIER|CU_2D|CU_PRIM_CIRCLE, "BEZIER_CIRCLE", 0, "Bezier Circle", ""}, - {CU_NURBS|CU_2D|CU_PRIM_CURVE, "NURBS_CURVE", 0, "NURBS Curve", ""}, - {CU_NURBS|CU_2D|CU_PRIM_CIRCLE, "NURBS_CIRCLE", 0, "NURBS Circle", ""}, - {CU_NURBS|CU_2D|CU_PRIM_PATH, "PATH", 0, "Path", ""}, + {CU_BEZIER|CU_2D|CU_PRIM_CURVE, "BEZIER_CURVE", ICON_CURVE_BEZCURVE, "Bezier Curve", ""}, + {CU_BEZIER|CU_2D|CU_PRIM_CIRCLE, "BEZIER_CIRCLE", ICON_CURVE_BEZCIRCLE, "Bezier Circle", ""}, + {CU_NURBS|CU_2D|CU_PRIM_CURVE, "NURBS_CURVE", ICON_CURVE_NCURVE, "NURBS Curve", ""}, + {CU_NURBS|CU_2D|CU_PRIM_CIRCLE, "NURBS_CIRCLE", ICON_CURVE_NCIRCLE, "NURBS Circle", ""}, + {CU_NURBS|CU_2D|CU_PRIM_PATH, "PATH", ICON_CURVE_PATH, "Path", ""}, {0, NULL, 0, NULL, NULL} }; @@ -481,12 +481,12 @@ void OBJECT_OT_curve_add(wmOperatorType *ot) } static EnumPropertyItem prop_surface_types[]= { - {CU_PRIM_CURVE|CU_NURBS, "NURBS_CURVE", 0, "NURBS Curve", ""}, - {CU_PRIM_CIRCLE|CU_NURBS, "NURBS_CIRCLE", 0, "NURBS Circle", ""}, - {CU_PRIM_PATCH|CU_NURBS, "NURBS_SURFACE", 0, "NURBS Surface", ""}, - {CU_PRIM_TUBE|CU_NURBS, "NURBS_TUBE", 0, "NURBS Tube", ""}, - {CU_PRIM_SPHERE|CU_NURBS, "NURBS_SPHERE", 0, "NURBS Sphere", ""}, - {CU_PRIM_DONUT|CU_NURBS, "NURBS_DONUT", 0, "NURBS Donut", ""}, + {CU_PRIM_CURVE|CU_NURBS, "NURBS_CURVE", ICON_SURFACE_NCURVE, "NURBS Curve", ""}, + {CU_PRIM_CIRCLE|CU_NURBS, "NURBS_CIRCLE", ICON_SURFACE_NCIRCLE, "NURBS Circle", ""}, + {CU_PRIM_PATCH|CU_NURBS, "NURBS_SURFACE", ICON_SURFACE_NSURFACE, "NURBS Surface", ""}, + {CU_PRIM_TUBE|CU_NURBS, "NURBS_TUBE", ICON_SURFACE_NTUBE, "NURBS Tube", ""}, + {CU_PRIM_SPHERE|CU_NURBS, "NURBS_SPHERE", ICON_SURFACE_NSPHERE, "NURBS Sphere", ""}, + {CU_PRIM_DONUT|CU_NURBS, "NURBS_DONUT", ICON_SURFACE_NDONUT, "NURBS Donut", ""}, {0, NULL, 0, NULL, NULL} }; From 79134a54b96e6ca1c835be374481d18853446353 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 11 Jul 2009 14:51:13 +0000 Subject: [PATCH 166/512] 2.5: X11 * Cursor grabbing is now done only if the OPTYPE_BLOCKING flag is set for the operator, since for e.g. render it should not block. --- .../blender/editors/animation/anim_markers.c | 2 +- source/blender/editors/animation/anim_ops.c | 3 +++ .../editors/armature/editarmature_sketch.c | 5 +++-- source/blender/editors/armature/poselib.c | 2 +- source/blender/editors/interface/view2d_ops.c | 7 +++++-- source/blender/editors/physics/editparticle.c | 4 ++-- source/blender/editors/screen/screen_ops.c | 16 +++++++++++---- .../editors/sculpt_paint/paint_image.c | 6 +++--- .../editors/sculpt_paint/paint_vertex.c | 8 ++++---- source/blender/editors/sculpt_paint/sculpt.c | 4 ++-- .../blender/editors/space_image/image_ops.c | 9 +++++++++ source/blender/editors/space_node/node_edit.c | 4 ++-- .../blender/editors/space_node/node_select.c | 2 +- source/blender/editors/space_text/text_ops.c | 8 +++++++- .../editors/space_view3d/view3d_edit.c | 6 +++--- .../blender/editors/transform/transform_ops.c | 20 +++++++++---------- source/blender/windowmanager/WM_types.h | 5 +++-- .../windowmanager/intern/wm_event_system.c | 5 +++-- 18 files changed, 74 insertions(+), 42 deletions(-) diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index d6543b41f47..7de3acdacef 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -620,7 +620,7 @@ static void MARKER_OT_move(wmOperatorType *ot) ot->poll= ED_operator_areaactive; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* rna storage */ RNA_def_int(ot->srna, "frames", 0, INT_MIN, INT_MAX, "Frames", "", INT_MIN, INT_MAX); diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 10691c558bf..73a1c934d97 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -209,6 +209,9 @@ void ANIM_OT_change_frame(wmOperatorType *ot) ot->invoke= change_frame_invoke; ot->cancel= change_frame_cancel; ot->modal= change_frame_modal; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; /* rna */ RNA_def_int(ot->srna, "frame", 0, MINAFRAME, MAXFRAME, "Frame", "", MINAFRAME, MAXFRAME); diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 33351c99828..af1ed3e2746 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -3463,7 +3463,7 @@ void SKETCH_OT_draw_stroke(wmOperatorType *ot) RNA_def_boolean(ot->srna, "snap", 0, "Snap", ""); /* flags */ -// ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_BLOCKING; // OPTYPE_REGISTER|OPTYPE_UNDO } void SKETCH_OT_gesture(wmOperatorType *ot) @@ -3482,5 +3482,6 @@ void SKETCH_OT_gesture(wmOperatorType *ot) RNA_def_boolean(ot->srna, "snap", 0, "Snap", ""); /* flags */ -// ot->flag= OPTYPE_UNDO; + ot->flag= OPTYPE_BLOCKING; // OPTYPE_UNDO } + diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index fcc1e8f9644..93611a30bd8 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -1489,7 +1489,7 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot) ot->poll= ED_operator_posemode; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* properties */ RNA_def_int(ot->srna, "pose_index", -1, -2, INT_MAX, "Pose", "Index of the pose to apply (-2 for no change to pose, -1 for poselib active pose)", 0, INT_MAX); diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 54ab0d9ef61..14872f05f8a 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -257,7 +257,7 @@ void VIEW2D_OT_pan(wmOperatorType *ot) ot->modal= view_pan_modal; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -832,7 +832,7 @@ void VIEW2D_OT_zoom(wmOperatorType *ot) ot->modal= view_zoomdrag_modal; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* rna - must keep these in sync with the other operators */ RNA_def_float(ot->srna, "deltax", 0, -FLT_MAX, FLT_MAX, "Delta X", "", -FLT_MAX, FLT_MAX); @@ -1261,6 +1261,9 @@ void VIEW2D_OT_scroller_activate(wmOperatorType *ot) /* identifiers */ ot->name= "Scroller Activate"; ot->idname= "VIEW2D_OT_scroller_activate"; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; /* api callbacks */ ot->invoke= scroller_activate_invoke; diff --git a/source/blender/editors/physics/editparticle.c b/source/blender/editors/physics/editparticle.c index b656aa8fbf6..3f7880b7fef 100644 --- a/source/blender/editors/physics/editparticle.c +++ b/source/blender/editors/physics/editparticle.c @@ -2344,7 +2344,7 @@ void PARTICLE_OT_brush_radial_control(wmOperatorType *ot) ot->poll= PE_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } /*************************** delete operator **************************/ @@ -3358,7 +3358,7 @@ void PARTICLE_OT_brush_edit(wmOperatorType *ot) ot->poll= PE_poll_3dview; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* properties */ RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", ""); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 99bbe0514c9..c3b68eb74ce 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -503,8 +503,10 @@ void SCREEN_OT_actionzone(wmOperatorType *ot) ot->invoke= actionzone_invoke; ot->modal= actionzone_modal; - ot->poll= actionzone_area_poll; + + ot->flag= OPTYPE_BLOCKING; + RNA_def_int(ot->srna, "modifier", 0, 0, 2, "modifier", "modifier state", 0, 2); } @@ -618,6 +620,8 @@ static void SCREEN_OT_area_swap(wmOperatorType *ot) ot->invoke= area_swap_invoke; ot->modal= area_swap_modal; ot->poll= ED_operator_areaactive; + + ot->flag= OPTYPE_BLOCKING; } /* *********** Duplicate area as new window operator ****************** */ @@ -912,9 +916,10 @@ void SCREEN_OT_area_move(wmOperatorType *ot) ot->invoke= area_move_invoke; ot->cancel= area_move_cancel; ot->modal= area_move_modal; - ot->poll= ED_operator_screen_mainwinactive; /* when mouse is over area-edge */ + ot->flag= OPTYPE_BLOCKING; + /* rna */ 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); @@ -1227,7 +1232,7 @@ void SCREEN_OT_area_split(wmOperatorType *ot) ot->modal= area_split_modal; ot->poll= ED_operator_areaactive; - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* rna */ RNA_def_enum(ot->srna, "direction", prop_direction_items, 'h', "Direction", ""); @@ -1344,6 +1349,8 @@ static void SCREEN_OT_region_scale(wmOperatorType *ot) ot->modal= region_scale_modal; ot->poll= ED_operator_areaactive; + + ot->flag= OPTYPE_BLOCKING; } @@ -1725,9 +1732,10 @@ void SCREEN_OT_area_join(wmOperatorType *ot) ot->exec= area_join_exec; ot->invoke= area_join_invoke; ot->modal= area_join_modal; - ot->poll= ED_operator_areaactive; + ot->flag= OPTYPE_BLOCKING; + /* rna */ RNA_def_int(ot->srna, "x1", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y1", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX); diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index a163ef5f8e2..720e64d260f 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -4804,7 +4804,7 @@ void PAINT_OT_image_paint(wmOperatorType *ot) ot->poll= image_paint_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* properties */ RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", ""); @@ -4911,7 +4911,7 @@ void PAINT_OT_image_paint_radial_control(wmOperatorType *ot) ot->poll= image_paint_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } /************************ grab clone operator ************************/ @@ -5010,7 +5010,7 @@ void PAINT_OT_grab_clone(wmOperatorType *ot) ot->poll= image_paint_2d_clone_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* properties */ RNA_def_float_vector(ot->srna, "delta", 2, NULL, -FLT_MAX, FLT_MAX, "Delta", "Delta offset of clone image in 0.0..1.0 coordinates.", -1.0f, 1.0f); diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 74b5d5a4206..c5aea5ae077 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1225,7 +1225,7 @@ void PAINT_OT_weight_paint_radial_control(wmOperatorType *ot) ot->poll= wp_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } void PAINT_OT_vertex_paint_radial_control(wmOperatorType *ot) @@ -1241,7 +1241,7 @@ void PAINT_OT_vertex_paint_radial_control(wmOperatorType *ot) ot->poll= vp_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } /* ************ weight paint operator ********** */ @@ -1567,7 +1567,7 @@ void PAINT_OT_weight_paint(wmOperatorType *ot) ot->poll= wp_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } @@ -1864,6 +1864,6 @@ void PAINT_OT_vertex_paint(wmOperatorType *ot) ot->poll= vp_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 457deb8c113..7245218c688 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -1151,7 +1151,7 @@ static void SCULPT_OT_radial_control(wmOperatorType *ot) ot->exec= sculpt_radial_control_exec; ot->poll= sculpt_poll; - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } /**** Operator for applying a stroke (various attributes including mouse path) @@ -1589,7 +1589,7 @@ static void SCULPT_OT_brush_stroke(wmOperatorType *ot) ot->poll= sculpt_poll; /* flags (sculpt does own undo? (ton) */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* properties */ RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", ""); diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 358da483744..578da29f102 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -251,6 +251,9 @@ void IMAGE_OT_view_pan(wmOperatorType *ot) ot->modal= view_pan_modal; ot->cancel= view_pan_cancel; ot->poll= space_image_main_area_poll; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; /* properties */ RNA_def_float_vector(ot->srna, "offset", 2, NULL, -FLT_MAX, FLT_MAX, @@ -363,6 +366,9 @@ void IMAGE_OT_view_zoom(wmOperatorType *ot) ot->modal= view_zoom_modal; ot->cancel= view_zoom_cancel; ot->poll= space_image_main_area_poll; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; /* properties */ RNA_def_float(ot->srna, "factor", 0.0f, 0.0f, FLT_MAX, @@ -1487,6 +1493,9 @@ void IMAGE_OT_sample(wmOperatorType *ot) ot->modal= sample_modal; ot->cancel= sample_cancel; ot->poll= space_image_main_area_poll; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; } /******************** set curve point operator ********************/ diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 89d81f846d2..0384965e49e 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1178,7 +1178,7 @@ void NODE_OT_resize(wmOperatorType *ot) ot->poll= ED_operator_node_active; /* flags */ - ot->flag= 0; + ot->flag= OPTYPE_BLOCKING; } @@ -2012,7 +2012,7 @@ void NODE_OT_link(wmOperatorType *ot) ot->poll= ED_operator_node_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; } diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 6746c21ebcf..450b17e69bb 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -213,7 +213,7 @@ void NODE_OT_select(wmOperatorType *ot) ot->modal= node_select_modal; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; RNA_def_enum(ot->srna, "select_type", prop_select_items, 0, "Select Type", ""); diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 95970798e53..5568900e621 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -1836,6 +1836,9 @@ void TEXT_OT_scroll(wmOperatorType *ot) ot->cancel= scroll_cancel; ot->poll= text_space_edit_poll; + /* flags */ + ot->flag= OPTYPE_BLOCKING; + /* properties */ RNA_def_int(ot->srna, "lines", 1, INT_MIN, INT_MAX, "Lines", "Number of lines to scroll.", -100, 100); } @@ -1880,6 +1883,9 @@ void TEXT_OT_scroll_bar(wmOperatorType *ot) ot->cancel= scroll_cancel; ot->poll= text_region_edit_poll; + /* flags */ + ot->flag= OPTYPE_BLOCKING; + /* properties */ RNA_def_int(ot->srna, "lines", 1, INT_MIN, INT_MAX, "Lines", "Number of lines to scroll.", -100, 100); } @@ -2151,7 +2157,7 @@ void TEXT_OT_cursor_set(wmOperatorType *ot) ot->poll= text_region_edit_poll; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* properties */ RNA_def_boolean(ot->srna, "select", 0, "Select", "Set selection end rather than cursor."); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 5e77c932a6c..3c80b650cf3 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -560,7 +560,7 @@ void VIEW3D_OT_viewrotate(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; } /* ************************ viewmove ******************************** */ @@ -644,7 +644,7 @@ void VIEW3D_OT_viewmove(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; } /* ************************ viewzoom ******************************** */ @@ -844,7 +844,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX); } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index ee4f1b90451..f2630f40c9c 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -302,7 +302,7 @@ void TFM_OT_translation(struct wmOperatorType *ot) /* identifiers */ ot->name = "Translation"; ot->idname = OP_TRANSLATION; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -327,7 +327,7 @@ void TFM_OT_resize(struct wmOperatorType *ot) /* identifiers */ ot->name = "Resize"; ot->idname = OP_RESIZE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -353,7 +353,7 @@ void TFM_OT_trackball(struct wmOperatorType *ot) /* identifiers */ ot->name = "Trackball"; ot->idname = OP_TRACKBALL; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -374,7 +374,7 @@ void TFM_OT_rotation(struct wmOperatorType *ot) /* identifiers */ ot->name = "Rotation"; ot->idname = OP_ROTATION; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -399,7 +399,7 @@ void TFM_OT_tilt(struct wmOperatorType *ot) /* identifiers */ ot->name = "Tilt"; ot->idname = OP_TILT; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -422,7 +422,7 @@ void TFM_OT_warp(struct wmOperatorType *ot) /* identifiers */ ot->name = "Warp"; ot->idname = OP_WARP; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -446,7 +446,7 @@ void TFM_OT_shear(struct wmOperatorType *ot) /* identifiers */ ot->name = "Shear"; ot->idname = OP_SHEAR; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -470,7 +470,7 @@ void TFM_OT_shrink_fatten(struct wmOperatorType *ot) /* identifiers */ ot->name = "Shrink/Fatten"; ot->idname = OP_SHRINK_FATTEN; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -491,7 +491,7 @@ void TFM_OT_tosphere(struct wmOperatorType *ot) /* identifiers */ ot->name = "To Sphere"; ot->idname = OP_TOSPHERE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -542,7 +542,7 @@ void TFM_OT_transform(struct wmOperatorType *ot) /* identifiers */ ot->name = "Transform"; ot->idname = "TFM_OT_transform"; - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 432140f1cf7..ab55f8a4459 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -40,8 +40,9 @@ struct wmWindowManager; /* ************** wmOperatorType ************************ */ /* flag */ -#define OPTYPE_REGISTER 1 -#define OPTYPE_UNDO 2 +#define OPTYPE_REGISTER 1 /* register operators in stack after finishing */ +#define OPTYPE_UNDO 2 /* do undo push after after */ +#define OPTYPE_BLOCKING 4 /* let blender grab all input from the WM (X11) */ /* context to call operator in for WM_operator_name_call */ /* rna_ui.c contains EnumPropertyItem's of these, keep in sync */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 5bcbf526460..491b70deedc 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -379,8 +379,9 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P WM_operator_free(op); } else if(retval & OPERATOR_RUNNING_MODAL) { - /* automatically grab cursor during modal ops (X11) */ - WM_cursor_grab(CTX_wm_window(C), 1); + /* grab cursor during blocking modal ops (X11) */ + if(ot->flag & OPTYPE_BLOCKING) + WM_cursor_grab(CTX_wm_window(C), 1); } else WM_operator_free(op); From f787712cbbcc303eb1285eaa36edc9c6e5aa8096 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sat, 11 Jul 2009 17:29:53 +0000 Subject: [PATCH 167/512] 2.5 MSVC projectfiles * update for NLA merge from Aligorith --- projectfiles_vc9/blender/blender.vcproj | 66 +++++++++---------- .../blender/blenkernel/BKE_blenkernel.vcproj | 12 ++++ .../blender/editors/ED_editors.vcproj | 32 +++++++++ .../blender/makesrna/RNA_makesrna.vcproj | 4 ++ .../blender/makesrna/RNA_rna.vcproj | 4 ++ 5 files changed, 85 insertions(+), 33 deletions(-) diff --git a/projectfiles_vc9/blender/blender.vcproj b/projectfiles_vc9/blender/blender.vcproj index 4c881381cb8..37824155bb7 100644 --- a/projectfiles_vc9/blender/blender.vcproj +++ b/projectfiles_vc9/blender/blender.vcproj @@ -208,39 +208,6 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -1098,6 +1102,14 @@ RelativePath="..\..\..\source\blender\blenkernel\depsgraph_private.h" > + + + + diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj index 92b6f627a15..497560b4a5a 100644 --- a/projectfiles_vc9/blender/editors/ED_editors.vcproj +++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj @@ -638,6 +638,10 @@ RelativePath="..\..\..\source\blender\editors\space_graph\graph_select.c" > + + @@ -838,6 +842,22 @@ + + + + + + + + @@ -846,6 +866,14 @@ RelativePath="..\..\..\source\blender\editors\space_nla\nla_intern.h" > + + + + @@ -998,6 +1026,10 @@ RelativePath="..\..\..\source\blender\editors\animation\drivers.c" > + + diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj index 35f71c51df4..9e4c50e9e3f 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj @@ -710,6 +710,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_modifier.c" > + + diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj index af23842b15d..f6eb7b282e0 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj @@ -270,6 +270,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_modifier_gen.c" > + + From 42469ba1e51c639c3fd317b812c486913d803fde Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Sat, 11 Jul 2009 22:22:53 +0000 Subject: [PATCH 168/512] SVN maintenance. --- source/blender/blenkernel/intern/fmodifier.c | 2 +- source/blender/blenkernel/nla_private.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index aa5214979d9..64558d0b456 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -1,5 +1,5 @@ /** - * $Id: fcurve.c 21299 2009-07-02 02:12:37Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h index df7ffaa3064..325798f325f 100644 --- a/source/blender/blenkernel/nla_private.h +++ b/source/blender/blenkernel/nla_private.h @@ -1,5 +1,5 @@ /** - * $Id: BKE_nla.h 20999 2009-06-19 04:45:56Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From 8b9bb47a3faf753cb0ca2ec0e9c6a741c7af31c2 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sun, 12 Jul 2009 02:01:13 +0000 Subject: [PATCH 169/512] Cleaning up manipulator code a bit Made transform confirm or cancel on mouse up. More inline with button clicking and better for tablets. Add operator params to make sure Rip and Extrude turn off PET and Mirror correctly. Note: sorry for all the whitespace changes, I need to reconfigure this editor not to do autocleanup. --- source/blender/editors/include/ED_transform.h | 10 +- source/blender/editors/mesh/editmesh_tools.c | 2415 ++++++++--------- source/blender/editors/transform/transform.c | 1197 ++++---- source/blender/editors/transform/transform.h | 30 +- .../editors/transform/transform_constraints.c | 207 +- .../editors/transform/transform_conversions.c | 1236 ++++----- .../editors/transform/transform_generics.c | 316 ++- .../editors/transform/transform_manipulator.c | 84 +- 8 files changed, 2657 insertions(+), 2838 deletions(-) diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index d2185854a95..768040597a4 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -1,5 +1,5 @@ /** - * $Id: ED_transform.h 21450 2009-07-09 02:45:48Z theeth $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -119,12 +119,16 @@ struct EnumPropertyItem *BIF_enumTransformOrientation(struct bContext *C); char * BIF_menustringTransformOrientation(const struct bContext *C, char *title); /* the returned value was allocated and needs to be freed after use */ int BIF_countTransformOrientation(const struct bContext *C); -void BIF_getPropCenter(float *center); - void BIF_TransformSetUndo(char *str); void BIF_selectOrientation(void); +/* to be able to add operator properties to other operators */ + +void Properties_Proportional(struct wmOperatorType *ot); +void Properties_Snapping(struct wmOperatorType *ot, short align); +void Properties_Constraints(struct wmOperatorType *ot); + /* view3d manipulators */ void initManipulator(int mode); void ManipulatorTransform(); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 682b1ee4a64..eab06444a79 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -1,4 +1,4 @@ - /* $Id: + /* $Id: * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -133,7 +133,7 @@ struct facesort { static int vergface(const void *v1, const void *v2) { const struct facesort *x1=v1, *x2=v2; - + if( x1->x > x2->x ) return 1; else if( x1->x < x2->x) return -1; return 0; @@ -146,7 +146,7 @@ void convert_to_triface(EditMesh *em, int direction) { EditFace *efa, *efan, *next; float fac; - + efa= em->faces.last; while(efa) { next= efa->prev; @@ -167,17 +167,17 @@ void convert_to_triface(EditMesh *em, int direction) efan= EM_face_from_faces(em, efa, NULL, 1, 2, 3, -1); if(efa->f & SELECT) EM_select_face(efan, 1); } - + BLI_remlink(&em->faces, efa); free_editface(em, efa); } } efa= next; } - + EM_fgon_flags(em); // redo flags and indices for fgons - + } int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) /* return amount */ @@ -188,7 +188,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / Used for "Auto Weld" mode. warning. limit - Quick manhattan distance between verts. */ - + /* all verts with (flag & 'flag') are being evaluated */ EditVert *eve, *v1, *nextve; EditEdge *eed, *e1, *nexted; @@ -196,8 +196,8 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / xvertsort *sortblock, *sb, *sb1; struct facesort *vlsortblock, *vsb, *vsb1; int a, b, test, amount; - - + + /* flag 128 is cleared, count */ /* Normal non weld operation */ @@ -223,9 +223,9 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / } qsort(sortblock, amount, sizeof(xvertsort), vergxco); - + /* test for doubles */ - sb= sortblock; + sb= sortblock; if (automerge) { for(a=0; av1; @@ -233,12 +233,12 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / sb1= sb+1; for(b=a+1; bf & 128)==0; b++, sb1++) { if(sb1->x - sb->x > limit) break; - + /* when automarge, only allow unselected->selected */ v1= sb1->v1; if( (v1->f & 128)==0 ) { if ((eve->f & flag)==0 && (v1->f & flag)==1) { - if( (float)fabs(v1->co[0]-eve->co[0])<=limit && + if( (float)fabs(v1->co[0]-eve->co[0])<=limit && (float)fabs(v1->co[1]-eve->co[1])<=limit && (float)fabs(v1->co[2]-eve->co[2])<=limit) { /* unique bit */ @@ -246,7 +246,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / eve->tmp.v = v1; } } else if( (eve->f & flag)==1 && (v1->f & flag)==0 ) { - if( (float)fabs(v1->co[0]-eve->co[0])<=limit && + if( (float)fabs(v1->co[0]-eve->co[0])<=limit && (float)fabs(v1->co[1]-eve->co[1])<=limit && (float)fabs(v1->co[2]-eve->co[2])<=limit) { /* unique bit */ @@ -267,10 +267,10 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / /* first test: simpel dist */ if(sb1->x - sb->x > limit) break; v1= sb1->v1; - + /* second test: is vertex allowed */ if( (v1->f & 128)==0 ) { - if( (float)fabs(v1->co[0]-eve->co[0])<=limit && + if( (float)fabs(v1->co[0]-eve->co[0])<=limit && (float)fabs(v1->co[1]-eve->co[1])<=limit && (float)fabs(v1->co[2]-eve->co[2])<=limit) { @@ -283,12 +283,12 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / } } MEM_freeN(sortblock); - + if (!automerge) for(eve = em->verts.first; eve; eve=eve->next) if((eve->f & flag) && (eve->f & 128)) EM_data_interp_from_verts(em, eve, eve->tmp.v, eve->tmp.v, 0.5f); - + /* test edges and insert again */ eed= em->edges.first; while(eed) { @@ -327,7 +327,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / else if(efa->v2->f & 128) efa->f1= 1; else if(efa->v3->f & 128) efa->f1= 1; else if(efa->v4 && (efa->v4->f & 128)) efa->f1= 1; - + if(efa->f1==1) amount++; efa= efa->next; } @@ -337,12 +337,12 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / while(efa) { nextvl= efa->next; if(efa->f1==1) { - + if(efa->v1->f & 128) efa->v1= efa->v1->tmp.v; if(efa->v2->f & 128) efa->v2= efa->v2->tmp.v; if(efa->v3->f & 128) efa->v3= efa->v3->tmp.v; if(efa->v4 && (efa->v4->f & 128)) efa->v4= efa->v4->tmp.v; - + test= 0; if(efa->v1==efa->v2) test+=1; if(efa->v2==efa->v3) test+=2; @@ -350,7 +350,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / if(efa->v4==efa->v1) test+=8; if(efa->v3==efa->v4) test+=16; if(efa->v2==efa->v4) test+=32; - + if(test) { if(efa->v4) { if(test==1 || test==2) { @@ -378,7 +378,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / amount--; } } - + if(test==0) { /* set edge pointers */ efa->e1= findedgelist(em, efa->v1, efa->v2); @@ -423,9 +423,9 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / } efa= efa->next; } - + qsort(vlsortblock, amount, sizeof(struct facesort), vergface); - + vsb= vlsortblock; for(a=0; aefa; @@ -433,24 +433,24 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / vsb1= vsb+1; for(b=a+1; bx != vsb1->x) break; - + /* second test: is test permitted? */ efa= vsb1->efa; if( (efa->f1 & 128)==0 ) { if( compareface(efa, vsb->efa)) efa->f1 |= 128; - + } vsb1++; } } vsb++; } - + MEM_freeN(vlsortblock); - + /* remove double faces */ efa= (struct EditFace *)em->faces.first; while(efa) { @@ -462,7 +462,7 @@ int removedoublesflag(EditMesh *em, short flag, short automerge, float limit) / efa= nextvl; } } - + /* remove double vertices */ a= 0; eve= (struct EditVert *)em->verts.first; @@ -495,12 +495,12 @@ static int removedoublesflag_exec(bContext *C, wmOperator *op) sprintf(msg, "Removed %d vertices", cnt); BKE_report(op->reports, RPT_INFO, msg); } - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); - return OPERATOR_FINISHED; + return OPERATOR_FINISHED; } void MESH_OT_remove_doubles(wmOperatorType *ot) @@ -508,11 +508,11 @@ void MESH_OT_remove_doubles(wmOperatorType *ot) /* identifiers */ ot->name= "Remove Doubles"; ot->idname= "MESH_OT_remove_doubles"; - + /* api callbacks */ ot->exec= removedoublesflag_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -534,18 +534,18 @@ void xsortvert_flag(bContext *C, int flag) xvertsort *sortblock; ListBase tbase; int i, amount; - + em_setup_viewcontext(C, &vc); - + amount = BLI_countlist(&vc.em->verts); sortblock = MEM_callocN(sizeof(xvertsort)*amount,"xsort"); for (i=0,eve= vc.em->verts.first; eve; i++,eve=eve->next) if(eve->f & flag) sortblock[i].v1 = eve; - + mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, 0); qsort(sortblock, amount, sizeof(xvertsort), vergxco); - + /* make temporal listbase */ tbase.first= tbase.last= 0; for (i=0; iverts, &tbase); - + MEM_freeN(sortblock); } @@ -571,7 +571,7 @@ void hashvert_flag(EditMesh *em, int flag) struct xvertsort *sortblock, *sb, onth, *newsort; ListBase tbase; int amount, a, b; - + /* count */ eve= em->verts.first; amount= 0; @@ -580,7 +580,7 @@ void hashvert_flag(EditMesh *em, int flag) eve= eve->next; } if(amount==0) return; - + /* allocate memory */ sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*amount,"sortremovedoub"); eve= em->verts.first; @@ -593,7 +593,7 @@ void hashvert_flag(EditMesh *em, int flag) } BLI_srand(1); - + sb= sortblock; for(a=0; averts, &tbase); - + MEM_freeN(sortblock); } @@ -632,11 +632,11 @@ void extrude_mesh(Object *obedit, EditMesh *em, wmOperator *op) if(em->totvertsel==0) nr= 0; else if(em->totvertsel==1) nr= 4; else if(em->totedgesel==0) nr= 4; - else if(em->totfacesel==0) + else if(em->totfacesel==0) nr= 3; // pupmenu("Extrude %t|Only Edges%x3|Only Vertices%x4"); else if(em->totfacesel==1) nr= 1; // pupmenu("Extrude %t|Region %x1|Only Edges%x3|Only Vertices%x4"); - else + else nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3|Only Vertices%x4"); } else if(em->selectmode & SCE_SELECT_EDGE) { @@ -654,27 +654,27 @@ void extrude_mesh(Object *obedit, EditMesh *em, wmOperator *op) else nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2"); } - + if(nr<1) return; if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor); else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor); else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor); else transmode= extrudeflag_face_indiv(em, SELECT, nor); - + if(transmode==0) { BKE_report(op->reports, RPT_ERROR, "Not a valid selection for extrude"); } else { EM_fgon_flags(em); - - /* We need to force immediate calculation here because + + /* We need to force immediate calculation here because * transform may use derived objects (which are now stale). * * This shouldn't be necessary, derived queries should be * automatically building this data if invalid. Or something. */ -// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); +// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); object_handle_update(scene, obedit); /* individual faces? */ @@ -709,11 +709,12 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - - RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); - - return OPERATOR_FINISHED; + + RNA_enum_set(op->ptr, "proportional", 0); + RNA_boolean_set(op->ptr, "mirror", 0); + WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); + + return OPERATOR_FINISHED; } /* extrude without transform */ @@ -722,14 +723,14 @@ static int mesh_extrude_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh(obedit->data); - + extrude_mesh(obedit,em, op); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); - return OPERATOR_FINISHED; + return OPERATOR_FINISHED; } @@ -738,17 +739,18 @@ void MESH_OT_extrude(wmOperatorType *ot) /* identifiers */ ot->name= "Extrude"; ot->idname= "MESH_OT_extrude"; - + /* api callbacks */ ot->invoke= mesh_extrude_invoke; ot->exec= mesh_extrude_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* to give to transform */ - RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); + Properties_Proportional(ot); + RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); } static int split_mesh(bContext *C, wmOperator *op) @@ -779,11 +781,11 @@ void MESH_OT_split(wmOperatorType *ot) /* identifiers */ ot->name= "Split"; ot->idname= "MESH_OT_split"; - + /* api callbacks */ ot->exec= split_mesh; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -795,10 +797,10 @@ static int extrude_repeat_mesh(bContext *C, wmOperator *op) Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - RegionView3D *rv3d = ED_view3d_context_rv3d(C); - + RegionView3D *rv3d = ED_view3d_context_rv3d(C); + int steps = RNA_int_get(op->ptr,"steps"); - + float offs = RNA_float_get(op->ptr,"offset"); float dvec[3], tmat[3][3], bmat[3][3], nor[3]= {0.0, 0.0, 0.0}; @@ -822,11 +824,11 @@ static int extrude_repeat_mesh(bContext *C, wmOperator *op) extrudeflag(obedit, em, SELECT, nor); translateflag(em, SELECT, dvec); } - + recalc_editnormals(em); - + EM_fgon_flags(em); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); @@ -839,14 +841,14 @@ void MESH_OT_extrude_repeat(wmOperatorType *ot) /* identifiers */ ot->name= "Extrude Repeat Mesh"; ot->idname= "MESH_OT_extrude_repeat"; - + /* api callbacks */ ot->exec= extrude_repeat_mesh; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_float(ot->srna, "offset", 2.0f, 0.0f, 100.0f, "Offset", "", 0.0f, FLT_MAX); RNA_def_int(ot->srna, "steps", 10, 0, 180, "Steps", "", 0, INT_MAX); @@ -868,7 +870,7 @@ static int spin_mesh(bContext *C, wmOperator *op, float *dvec, int steps, float short a, ok= 1; RNA_float_get_array(op->ptr, "center", cent); - + /* imat and center and size */ Mat3CpyMat4(bmat, obedit->obmat); Mat3Inv(imat,bmat); @@ -895,14 +897,14 @@ static int spin_mesh(bContext *C, wmOperator *op, float *dvec, int steps, float Mat3MulMat3(tmat,cmat,bmat); Mat3MulMat3(bmat,imat,tmat); - if(dupli==0) - if(scene->toolsettings->editbutflag & B_KEEPORIG) + if(dupli==0) + if(scene->toolsettings->editbutflag & B_KEEPORIG) adduplicateflag(em, 1); for(a=0; adata, em); return ok; } @@ -942,7 +944,7 @@ static int spin_mesh_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); int ok; - + ok= spin_mesh(C, op, NULL, RNA_int_get(op->ptr,"steps"), RNA_float_get(op->ptr,"degrees"), RNA_boolean_get(op->ptr,"dupli")); if(ok==0) { BKE_report(op->reports, RPT_ERROR, "No valid vertices are selected"); @@ -961,10 +963,10 @@ static int spin_mesh_invoke(bContext *C, wmOperator *op, wmEvent *event) Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= ED_view3d_context_rv3d(C); - + RNA_float_set_array(op->ptr, "center", give_cursor(scene, v3d)); RNA_float_set_array(op->ptr, "axis", rv3d->viewinv[2]); - + return spin_mesh_exec(C, op); } @@ -973,20 +975,20 @@ void MESH_OT_spin(wmOperatorType *ot) /* identifiers */ ot->name= "Spin"; ot->idname= "MESH_OT_spin"; - + /* api callbacks */ ot->invoke= spin_mesh_invoke; ot->exec= spin_mesh_exec; ot->poll= EM_view3d_poll; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_int(ot->srna, "steps", 9, 0, INT_MAX, "Steps", "Steps", 0, INT_MAX); RNA_def_boolean(ot->srna, "dupli", 0, "Dupli", "Make Duplicates"); RNA_def_float(ot->srna, "degrees", 90.0f, -FLT_MAX, FLT_MAX, "Degrees", "Degrees", -360.0f, 360.0f); - + RNA_def_float_vector(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX); RNA_def_float_vector(ot->srna, "axis", 3, NULL, -1.0f, 1.0f, "Axis", "Axis in global view space", -FLT_MAX, FLT_MAX); @@ -1004,7 +1006,7 @@ static int screw_mesh_exec(bContext *C, wmOperator *op) turns= RNA_int_get(op->ptr, "turns"); steps= RNA_int_get(op->ptr, "steps"); - + /* clear flags */ for(eve= em->verts.first; eve; eve= eve->next) eve->f1= 0; @@ -1048,12 +1050,12 @@ static int screw_mesh_exec(bContext *C, wmOperator *op) dvec[1]= -dvec[1]; dvec[2]= -dvec[2]; } - + if(spin_mesh(C, op, dvec, turns*steps, 360.0f*turns, 0)) { DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - BKE_mesh_end_editmesh(obedit->data, em); + BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_FINISHED; } else { @@ -1069,10 +1071,10 @@ static int screw_mesh_invoke(bContext *C, wmOperator *op, wmEvent *event) Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= ED_view3d_context_rv3d(C); - + RNA_float_set_array(op->ptr, "center", give_cursor(scene, v3d)); RNA_float_set_array(op->ptr, "axis", rv3d->viewinv[1]); - + return screw_mesh_exec(C, op); } @@ -1081,15 +1083,15 @@ void MESH_OT_screw(wmOperatorType *ot) /* identifiers */ ot->name= "Screw"; ot->idname= "MESH_OT_screw"; - + /* api callbacks */ ot->invoke= screw_mesh_invoke; ot->exec= screw_mesh_exec; ot->poll= EM_view3d_poll; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /*props */ RNA_def_int(ot->srna, "steps", 9, 0, INT_MAX, "Steps", "Steps", 0, 256); RNA_def_int(ot->srna, "turns", 1, 0, INT_MAX, "Turns", "Turns", 0, 256); @@ -1101,7 +1103,7 @@ void MESH_OT_screw(wmOperatorType *ot) static void erase_edges(EditMesh *em, ListBase *l) { EditEdge *ed, *nexted; - + ed = (EditEdge *) l->first; while(ed) { nexted= ed->next; @@ -1127,7 +1129,7 @@ static void erase_faces(EditMesh *em, ListBase *l) } f = nextf; } -} +} static void erase_vertices(EditMesh *em, ListBase *l) { @@ -1152,7 +1154,7 @@ void delete_mesh(Object *obedit, EditMesh *em, wmOperator *op, int event) int count; char *str="Erase"; - + if(event<1) return; if(event==10 ) { @@ -1160,7 +1162,7 @@ void delete_mesh(Object *obedit, EditMesh *em, wmOperator *op, int event) erase_edges(em, &em->edges); erase_faces(em, &em->faces); erase_vertices(em, &em->verts); - } + } else if(event==6) { if(!EdgeLoopDelete(em, op)) return; @@ -1201,14 +1203,14 @@ void delete_mesh(Object *obedit, EditMesh *em, wmOperator *op, int event) if( efa->v2->f & SELECT) event++; if( efa->v3->f & SELECT) event++; if(efa->v4 && (efa->v4->f & SELECT)) event++; - + if(event>1) { BLI_remlink(&em->faces, efa); free_editface(em, efa); } efa= nextvl; } - } + } else if(event==1) { str= "Erase Edges"; // faces first @@ -1220,7 +1222,7 @@ void delete_mesh(Object *obedit, EditMesh *em, wmOperator *op, int event) if( efa->e2->f & SELECT) event++; if( efa->e3->f & SELECT) event++; if(efa->e4 && (efa->e4->f & SELECT)) event++; - + if(event) { BLI_remlink(&em->faces, efa); free_editface(em, efa); @@ -1298,12 +1300,12 @@ static int delete_mesh_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + delete_mesh(obedit, em, op, RNA_enum_get(op->ptr, "type")); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_FINISHED; } @@ -1313,16 +1315,16 @@ void MESH_OT_delete(wmOperatorType *ot) /* identifiers */ ot->name= "Delete"; ot->idname= "MESH_OT_delete"; - + /* api callbacks */ ot->invoke= WM_menu_invoke; ot->exec= delete_mesh_exec; - + ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /*props */ RNA_def_enum(ot->srna, "type", prop_mesh_delete_types, 10, "Type", "Method used for deleting mesh data"); } @@ -1344,38 +1346,38 @@ void MESH_OT_delete(wmOperatorType *ot) static void alter_co(float *co, EditEdge *edge, float smooth, float fractal, int beauty, float perc) { float vec1[3], fac; - + if(beauty & B_SMOOTH) { /* we calculate an offset vector vec1[], to be added to *co */ float len, fac, nor[3], nor1[3], nor2[3]; - + VecSubf(nor, edge->v1->co, edge->v2->co); len= 0.5f*Normalize(nor); - + VECCOPY(nor1, edge->v1->no); VECCOPY(nor2, edge->v2->no); - + /* cosine angle */ fac= nor[0]*nor1[0] + nor[1]*nor1[1] + nor[2]*nor1[2] ; - + vec1[0]= fac*nor1[0]; vec1[1]= fac*nor1[1]; vec1[2]= fac*nor1[2]; - + /* cosine angle */ fac= -nor[0]*nor2[0] - nor[1]*nor2[1] - nor[2]*nor2[2] ; - + vec1[0]+= fac*nor2[0]; vec1[1]+= fac*nor2[1]; vec1[2]+= fac*nor2[2]; /* falloff for multi subdivide */ smooth *= sqrt(fabs(1.0f - 2.0f*fabs(0.5f-perc))); - + vec1[0]*= smooth*len; vec1[1]*= smooth*len; vec1[2]*= smooth*len; - + co[0] += vec1[0]; co[1] += vec1[1]; co[2] += vec1[2]; @@ -1403,14 +1405,14 @@ static EditVert *subdivide_edge_addvert(EditMesh *em, EditEdge *edge, float smoo { EditVert *ev; float co[3]; - + co[0] = (edge->v2->co[0]-edge->v1->co[0])*percent + edge->v1->co[0]; co[1] = (edge->v2->co[1]-edge->v1->co[1])*percent + edge->v1->co[1]; - co[2] = (edge->v2->co[2]-edge->v1->co[2])*percent + edge->v1->co[2]; - + co[2] = (edge->v2->co[2]-edge->v1->co[2])*percent + edge->v1->co[2]; + /* offset for smooth or sphere or fractal */ alter_co(co, edge, smooth, fractal, beauty, percent); - + /* clip if needed by mirror modifier */ if (edge->v1->f2) { if ( edge->v1->f2 & edge->v2->f2 & 1) { @@ -1423,18 +1425,18 @@ static EditVert *subdivide_edge_addvert(EditMesh *em, EditEdge *edge, float smoo co[2]= 0.0f; } } - + ev = addvertlist(em, co, NULL); - + /* vert data (vgroups, ..) */ EM_data_interp_from_verts(em, edge->v1, edge->v2, ev, percent); - + /* normal */ ev->no[0] = (edge->v2->no[0]-edge->v1->no[0])*percent + edge->v1->no[0]; ev->no[1] = (edge->v2->no[1]-edge->v1->no[1])*percent + edge->v1->no[1]; ev->no[2] = (edge->v2->no[2]-edge->v1->no[2])*percent + edge->v1->no[2]; Normalize(ev->no); - + return ev; } @@ -1442,11 +1444,11 @@ static void flipvertarray(EditVert** arr, short size) { EditVert *hold; int i; - + for(i=0; ifdata, &em->fdata, source->data, &target->data); target->mat_nr = source->mat_nr; - target->flag = source->flag; + target->flag = source->flag; target->h = source->h; - + InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v1->co, w[0]); InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v2->co, w[1]); InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v3->co, w[2]); if (target->v4) InterpWeightsQ3Dfl(v1, v2, v3, v4, target->v4->co, w[3]); - + CustomData_em_interp(&em->fdata, &source->data, NULL, (float*)w, 1, target->data); } @@ -1476,17 +1478,17 @@ static void fill_quad_single(EditMesh *em, EditFace *efa, struct GHash *gh, int EditEdge *cedge=NULL; EditVert *v[4], **verts; EditFace *hold; - short start=0, end, left, right, vertsize,i; - + short start=0, end, left, right, vertsize,i; + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT) { cedge = efa->e1; start = 0;} - else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} - else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} - else if(efa->e4->f & SELECT) { cedge = efa->e4; start = 3;} + else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} + else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} + else if(efa->e4->f & SELECT) { cedge = efa->e4; start = 3;} // Point verts to the array of new verts for cedge verts = BLI_ghash_lookup(gh, cedge); @@ -1500,30 +1502,30 @@ static void fill_quad_single(EditMesh *em, EditFace *efa, struct GHash *gh, int if(verts[0] != v[start]) {flipvertarray(verts,numcuts+2);} end = (start+1)%4; left = (start+2)%4; - right = (start+3)%4; - + right = (start+3)%4; + /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 |---*---*---| | | - | | | | - ------------- + | | + ------------- left right where start,end,left, right are indexes of EditFace->v1, etc (stored in v) and 0,1,2... are the indexes of the new verts stored in verts We will fill this case like this or this depending on even or odd cuts - + |---*---*---| |---*---| | / \ | | / \ | - | / \ | | / \ | + | / \ | | / \ | |/ \| |/ \| - ------------- --------- + ------------- --------- */ // Make center face @@ -1532,7 +1534,7 @@ static void fill_quad_single(EditMesh *em, EditFace *efa, struct GHash *gh, int hold->e2->f2 |= EDGEINNER; hold->e4->f2 |= EDGEINNER; }else{ - hold = addfacelist(em, verts[(vertsize-1)/2],v[left],v[right],NULL, NULL,NULL); + hold = addfacelist(em, verts[(vertsize-1)/2],v[left],v[right],NULL, NULL,NULL); hold->e1->f2 |= EDGEINNER; hold->e3->f2 |= EDGEINNER; } @@ -1540,21 +1542,21 @@ static void fill_quad_single(EditMesh *em, EditFace *efa, struct GHash *gh, int // Make side faces for(i=0;i<(vertsize-1)/2;i++) { - hold = addfacelist(em, verts[i],verts[i+1],v[right],NULL,NULL,NULL); + hold = addfacelist(em, verts[i],verts[i+1],v[right],NULL,NULL,NULL); facecopy(em, efa,hold); if(i+1 != (vertsize-1)/2) { if(seltype == SUBDIV_SELECT_INNER) { hold->e2->f2 |= EDGEINNER; } } - hold = addfacelist(em, verts[vertsize-2-i],verts[vertsize-1-i],v[left],NULL,NULL,NULL); + hold = addfacelist(em, verts[vertsize-2-i],verts[vertsize-1-i],v[left],NULL,NULL,NULL); facecopy(em, efa,hold); if(i+1 != (vertsize-1)/2) { if(seltype == SUBDIV_SELECT_INNER) { hold->e3->f2 |= EDGEINNER; } } - } + } } static void fill_tri_single(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts, int seltype) @@ -1562,15 +1564,15 @@ static void fill_tri_single(EditMesh *em, EditFace *efa, struct GHash *gh, int n EditEdge *cedge=NULL; EditVert *v[3], **verts; EditFace *hold; - short start=0, end, op, vertsize,i; - + short start=0, end, op, vertsize,i; + v[0] = efa->v1; v[1] = efa->v2; - v[2] = efa->v3; + v[2] = efa->v3; if(efa->e1->f & SELECT) { cedge = efa->e1; start = 0;} - else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} - else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} + else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} + else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} // Point verts to the array of new verts for cedge verts = BLI_ghash_lookup(gh, cedge); @@ -1584,30 +1586,30 @@ static void fill_tri_single(EditMesh *em, EditFace *efa, struct GHash *gh, int n if(verts[0] != v[start]) {flipvertarray(verts,numcuts+2);} end = (start+1)%3; op = (start+2)%3; - + /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 |---*---*---| \ | - \ | + \ | \ | \ | \ | \ | |op - + where start,end,op are indexes of EditFace->v1, etc (stored in v) and 0,1,2... are the indexes of the new verts stored in verts We will fill this case like this or this depending on even or odd cuts - - 3 2 1 0 + + 3 2 1 0 |---*---*---| \ \ \ | - \ \ \ | + \ \ \ | \ \ \ | \ \ \| \ \\| @@ -1617,14 +1619,14 @@ static void fill_tri_single(EditMesh *em, EditFace *efa, struct GHash *gh, int n // Make side faces for(i=0;i<(vertsize-1);i++) { - hold = addfacelist(em, verts[i],verts[i+1],v[op],NULL,NULL,NULL); + hold = addfacelist(em, verts[i],verts[i+1],v[op],NULL,NULL,NULL); if(i+1 != vertsize-1) { if(seltype == SUBDIV_SELECT_INNER) { hold->e2->f2 |= EDGEINNER; } } facecopy(em, efa,hold); - } + } } static void fill_quad_double_op(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -1633,11 +1635,11 @@ static void fill_quad_double_op(EditMesh *em, EditFace *efa, struct GHash *gh, i EditVert *v[4], **verts[2]; EditFace *hold; short start=0, end, left, right, vertsize,i; - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT) { cedge[0] = efa->e1; cedge[1] = efa->e3; start = 0;} else if(efa->e2->f & SELECT) { cedge[0] = efa->e2; cedge[1] = efa->e4; start = 1;} @@ -1655,39 +1657,39 @@ static void fill_quad_double_op(EditMesh *em, EditFace *efa, struct GHash *gh, i if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} end = (start+1)%4; left = (start+2)%4; - right = (start+3)%4; - if(verts[1][0] != v[left]) {flipvertarray(verts[1],numcuts+2);} + right = (start+3)%4; + if(verts[1][0] != v[left]) {flipvertarray(verts[1],numcuts+2);} /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 |---*---*---| | | - | | | | - |---*---*---| + | | + |---*---*---| 0 1 2 3 left right We will fill this case like this or this depending on even or odd cuts - + |---*---*---| | | | | - | | | | | | | | - |---*---*---| + | | | | + |---*---*---| */ - + // Make side faces for(i=0;ie2->f2 |= EDGEINNER; hold->e2->f2 |= DOUBLEOPFILL; } facecopy(em, efa,hold); - } + } } static void fill_quad_double_adj_path(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -1697,11 +1699,11 @@ static void fill_quad_double_adj_path(EditMesh *em, EditFace *efa, struct GHash EditFace *hold; short start=0, start2=0, vertsize,i; int ctrl= 0; // XXX - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT && efa->e2->f & SELECT) {cedge[0] = efa->e1; cedge[1] = efa->e2; start = 0; start2 = 1;} if(efa->e2->f & SELECT && efa->e3->f & SELECT) {cedge[0] = efa->e2; cedge[1] = efa->e3; start = 1; start2 = 2;} @@ -1719,53 +1721,53 @@ static void fill_quad_double_adj_path(EditMesh *em, EditFace *efa, struct GHash // the array to the correct direction if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} + if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 start2 0|---*---*---| | | 1* | | | - 2* | + 2* | | | - end2 3|-----------| + end2 3|-----------| We will fill this case like this or this depending on even or odd cuts |---*---*---| | / / / | * / / | | / / | - * / | + * / | | / | - |-----------| + |-----------| */ // Make outside tris - hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); + hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); /* when ctrl is depressed, only want verts on the cutline selected */ if (ctrl) hold->e3->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); hold = addfacelist(em, verts[0][0],verts[1][vertsize-1],v[(start2+2)%4],NULL,NULL,NULL); /* when ctrl is depressed, only want verts on the cutline selected */ if (ctrl) - hold->e1->f2 |= EDGEINNER; - facecopy(em, efa,hold); + hold->e1->f2 |= EDGEINNER; + facecopy(em, efa,hold); //if(scene->toolsettings->editbutflag & B_AUTOFGON) { // hold->e1->h |= EM_FGON; - //} + //} // Make side faces for(i=0;ie2->f2 |= EDGEINNER; facecopy(em, efa,hold); } //EM_fgon_flags(em); - + } static void fill_quad_double_adj_fan(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -1774,18 +1776,18 @@ static void fill_quad_double_adj_fan(EditMesh *em, EditFace *efa, struct GHash * EditVert *v[4], *op=NULL, **verts[2]; EditFace *hold; short start=0, start2=0, vertsize,i; - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT && efa->e2->f & SELECT) {cedge[0] = efa->e1; cedge[1] = efa->e2; start = 0; start2 = 1; op = efa->v4;} if(efa->e2->f & SELECT && efa->e3->f & SELECT) {cedge[0] = efa->e2; cedge[1] = efa->e3; start = 1; start2 = 2; op = efa->v1;} if(efa->e3->f & SELECT && efa->e4->f & SELECT) {cedge[0] = efa->e3; cedge[1] = efa->e4; start = 2; start2 = 3; op = efa->v2;} if(efa->e4->f & SELECT && efa->e1->f & SELECT) {cedge[0] = efa->e4; cedge[1] = efa->e1; start = 3; start2 = 0; op = efa->v3;} - + // Point verts[0] and [1] to the array of new verts for cedge[0] and cedge[1] verts[0] = BLI_ghash_lookup(gh, cedge[0]); verts[1] = BLI_ghash_lookup(gh, cedge[1]); @@ -1797,39 +1799,39 @@ static void fill_quad_double_adj_fan(EditMesh *em, EditFace *efa, struct GHash * // the array to the correct direction if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} + if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 start2 0|---*---*---| | | 1* | | | - 2* | + 2* | | | - end2 3|-----------|op + end2 3|-----------|op We will fill this case like this or this (warning horrible ascii art follows) |---*---*---| | \ \ \ | *---\ \ \ | | \ \ \ \| - *---- \ \ \ | + *---- \ \ \ | | --- \\\| - |-----------| + |-----------| */ for(i=0;i<=numcuts;i++) { - hold = addfacelist(em, op,verts[1][numcuts-i],verts[1][numcuts-i+1],NULL,NULL,NULL); + hold = addfacelist(em, op,verts[1][numcuts-i],verts[1][numcuts-i+1],NULL,NULL,NULL); hold->e1->f2 |= EDGEINNER; facecopy(em, efa,hold); - hold = addfacelist(em, op,verts[0][i],verts[0][i+1],NULL,NULL,NULL); + hold = addfacelist(em, op,verts[0][i],verts[0][i+1],NULL,NULL,NULL); hold->e3->f2 |= EDGEINNER; facecopy(em, efa,hold); - } + } } static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -1839,18 +1841,18 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash EditFace *hold; short start=0, start2=0, vertsize,i; float co[3]; - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT && efa->e2->f & SELECT) {cedge[0] = efa->e1; cedge[1] = efa->e2; start = 0; start2 = 1; op = efa->v4;} if(efa->e2->f & SELECT && efa->e3->f & SELECT) {cedge[0] = efa->e2; cedge[1] = efa->e3; start = 1; start2 = 2; op = efa->v1;} if(efa->e3->f & SELECT && efa->e4->f & SELECT) {cedge[0] = efa->e3; cedge[1] = efa->e4; start = 2; start2 = 3; op = efa->v2;} if(efa->e4->f & SELECT && efa->e1->f & SELECT) {cedge[0] = efa->e4; cedge[1] = efa->e1; start = 3; start2 = 0; op = efa->v3;} - + // Point verts[0] and [1] to the array of new verts for cedge[0] and cedge[1] verts[0] = BLI_ghash_lookup(gh, cedge[0]); verts[1] = BLI_ghash_lookup(gh, cedge[1]); @@ -1862,19 +1864,19 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash // the array to the correct direction if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} + if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 start2 0|---*---*---| | | 1* | | | - 2* | + 2* | | | - end2 3|-----------|op + end2 3|-----------|op We will fill this case like this or this (warning horrible ascii art follows) |---*-----*---| @@ -1882,14 +1884,14 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash * \ / | | * | | / \ | - * \ | + * \ | | \ | - |-------------| + |-------------| */ // Add Inner Vert(s) inner = MEM_mallocN(sizeof(EditVert*)*numcuts,"New inner verts"); - + for(i=0;ico[0] + verts[1][i+1]->co[0] ) / 2 ; co[1] = (verts[0][numcuts-i]->co[1] + verts[1][i+1]->co[1] ) / 2 ; @@ -1899,45 +1901,45 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash EM_data_interp_from_verts(em, verts[0][numcuts-i], verts[1][i+1], inner[i], 0.5f); } - + // Add Corner Quad - hold = addfacelist(em, verts[0][numcuts+1],verts[1][1],inner[0],verts[0][numcuts],NULL,NULL); + hold = addfacelist(em, verts[0][numcuts+1],verts[1][1],inner[0],verts[0][numcuts],NULL,NULL); hold->e2->f2 |= EDGEINNER; hold->e3->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); // Add Bottom Quads - hold = addfacelist(em, verts[0][0],verts[0][1],inner[numcuts-1],op,NULL,NULL); + hold = addfacelist(em, verts[0][0],verts[0][1],inner[numcuts-1],op,NULL,NULL); hold->e2->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); - hold = addfacelist(em, op,inner[numcuts-1],verts[1][numcuts],verts[1][numcuts+1],NULL,NULL); + hold = addfacelist(em, op,inner[numcuts-1],verts[1][numcuts],verts[1][numcuts+1],NULL,NULL); hold->e2->f2 |= EDGEINNER; - facecopy(em, efa,hold); - + facecopy(em, efa,hold); + //if(scene->toolsettings->editbutflag & B_AUTOFGON) { // hold->e1->h |= EM_FGON; - //} + //} // Add Fill Quads (if # cuts > 1) for(i=0;ie1->f2 |= EDGEINNER; hold->e3->f2 |= EDGEINNER; facecopy(em, efa,hold); - hold = addfacelist(em, inner[i],inner[i+1],verts[0][numcuts-1-i],verts[0][numcuts-i],NULL,NULL); + hold = addfacelist(em, inner[i],inner[i+1],verts[0][numcuts-1-i],verts[0][numcuts-i],NULL,NULL); hold->e2->f2 |= EDGEINNER; hold->e4->f2 |= EDGEINNER; - facecopy(em, efa,hold); - + facecopy(em, efa,hold); + //if(scene->toolsettings->editbutflag & B_AUTOFGON) { // hold->e1->h |= EM_FGON; - //} - } - + //} + } + //EM_fgon_flags(em); - - MEM_freeN(inner); + + MEM_freeN(inner); } static void fill_tri_double(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -1946,7 +1948,7 @@ static void fill_tri_double(EditMesh *em, EditFace *efa, struct GHash *gh, int n EditVert *v[3], **verts[2]; EditFace *hold; short start=0, start2=0, vertsize,i; - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; @@ -1966,41 +1968,41 @@ static void fill_tri_double(EditMesh *em, EditFace *efa, struct GHash *gh, int n // the array to the correct direction if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} + if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} /* We should have something like this now - end start - 3 2 1 0 + end start + 3 2 1 0 start2 0|---*---*---| - | / - 1* / - | / - 2* / - | / - end2 3| + | / + 1* / + | / + 2* / + | / + end2 3| We will fill this case like this or this depending on even or odd cuts |---*---*---| - | / / / - * / / - | / / - * / - | / + | / / / + * / / + | / / + * / + | / | */ // Make outside tri - hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); + hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); hold->e3->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); // Make side faces for(i=0;ie2->f2 |= EDGEINNER; facecopy(em, efa,hold); - } + } } static void fill_quad_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts) @@ -2009,133 +2011,133 @@ static void fill_quad_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int EditVert *v[4], **verts[3]; EditFace *hold; short start=0, start2=0, start3=0, vertsize, i, repeats; - + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; - + v[3] = efa->v4; + if(!(efa->e1->f & SELECT)) { - cedge[0] = efa->e2; - cedge[1] = efa->e3; + cedge[0] = efa->e2; + cedge[1] = efa->e3; cedge[2] = efa->e4; - start = 1;start2 = 2;start3 = 3; + start = 1;start2 = 2;start3 = 3; } if(!(efa->e2->f & SELECT)) { - cedge[0] = efa->e3; - cedge[1] = efa->e4; + cedge[0] = efa->e3; + cedge[1] = efa->e4; cedge[2] = efa->e1; - start = 2;start2 = 3;start3 = 0; + start = 2;start2 = 3;start3 = 0; } if(!(efa->e3->f & SELECT)) { - cedge[0] = efa->e4; - cedge[1] = efa->e1; + cedge[0] = efa->e4; + cedge[1] = efa->e1; cedge[2] = efa->e2; - start = 3;start2 = 0;start3 = 1; + start = 3;start2 = 0;start3 = 1; } if(!(efa->e4->f & SELECT)) { - cedge[0] = efa->e1; - cedge[1] = efa->e2; + cedge[0] = efa->e1; + cedge[1] = efa->e2; cedge[2] = efa->e3; - start = 0;start2 = 1;start3 = 2; - } + start = 0;start2 = 1;start3 = 2; + } // Point verts[0] and [1] to the array of new verts for cedge[0] and cedge[1] verts[0] = BLI_ghash_lookup(gh, cedge[0]); verts[1] = BLI_ghash_lookup(gh, cedge[1]); verts[2] = BLI_ghash_lookup(gh, cedge[2]); //This is the index size of the verts array vertsize = numcuts+2; - + // Is the original v1 the same as the first vert on the selected edge? // if not, the edge is running the opposite direction in this face so flip // the array to the correct direction - + if(verts[0][0] != v[start]) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} - if(verts[2][0] != v[start3]) {flipvertarray(verts[2],numcuts+2);} + if(verts[1][0] != v[start2]) {flipvertarray(verts[1],numcuts+2);} + if(verts[2][0] != v[start3]) {flipvertarray(verts[2],numcuts+2);} /* We should have something like this now - - start2 - 3 2 1 0 - start3 0|---*---*---|3 + + start2 + 3 2 1 0 + start3 0|---*---*---|3 | | 1* *2 | | - 2* *1 + 2* *1 | | - 3|-----------|0 start - - We will fill this case like this or this depending on even or odd cuts + 3|-----------|0 start + + We will fill this case like this or this depending on even or odd cuts there are a couple of differences. For odd cuts, there is a tri in the middle as well as 1 quad at the bottom (not including the extra quads - for odd cuts > 1 - + for odd cuts > 1 + For even cuts, there is a quad in the middle and 2 quads on the bottom - + they are numbered here for clarity - + 1 outer tris and bottom quads 2 inner tri or quad 3 repeating quads - + |---*---*---*---| |1/ / \ \ 1| |/ 3 / \ 3 \| * / 2 \ * | / \ | - |/ \ | + |/ \ | *---------------* | 3 | - | | + | | *---------------* | | - | 1 | + | 1 | | | |---------------| - + |---*---*---*---*---| - | 1/ / \ \ 1| - | / / \ \ | + | 1/ / \ \ 1| + | / / \ \ | |/ 3 / \ 3 \| * / \ * - | / \ | - | / 2 \ | + | / \ | + | / 2 \ | |/ \| *-------------------* | | | 3 | - | | + | | *-------------------* | | | 1 | - | | + | | *-------------------* | | | 1 | - | | + | | |-------------------| - + */ // Make outside tris - hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); + hold = addfacelist(em, verts[0][vertsize-2],verts[0][vertsize-1],verts[1][1],NULL,NULL,NULL); hold->e3->f2 |= EDGEINNER; - facecopy(em, efa,hold); - hold = addfacelist(em, verts[1][vertsize-2],verts[1][vertsize-1],verts[2][1],NULL,NULL,NULL); + facecopy(em, efa,hold); + hold = addfacelist(em, verts[1][vertsize-2],verts[1][vertsize-1],verts[2][1],NULL,NULL,NULL); hold->e3->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); // Make bottom quad - hold = addfacelist(em, verts[0][0],verts[0][1],verts[2][vertsize-2],verts[2][vertsize-1],NULL,NULL); + hold = addfacelist(em, verts[0][0],verts[0][1],verts[2][vertsize-2],verts[2][vertsize-1],NULL,NULL); hold->e2->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); //If it is even cuts, add the 2nd lower quad if(numcuts % 2 == 0) { - hold = addfacelist(em, verts[0][1],verts[0][2],verts[2][vertsize-3],verts[2][vertsize-2],NULL,NULL); + hold = addfacelist(em, verts[0][1],verts[0][2],verts[2][vertsize-3],verts[2][vertsize-2],NULL,NULL); hold->e2->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); // Also Make inner quad - hold = addfacelist(em, verts[1][numcuts/2],verts[1][(numcuts/2)+1],verts[2][numcuts/2],verts[0][(numcuts/2)+1],NULL,NULL); + hold = addfacelist(em, verts[1][numcuts/2],verts[1][(numcuts/2)+1],verts[2][numcuts/2],verts[0][(numcuts/2)+1],NULL,NULL); hold->e3->f2 |= EDGEINNER; //if(scene->toolsettings->editbutflag & B_AUTOFGON) { // hold->e3->h |= EM_FGON; @@ -2143,47 +2145,47 @@ static void fill_quad_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int facecopy(em, efa,hold); repeats = (numcuts / 2) -1; } else { - // Make inner tri - hold = addfacelist(em, verts[1][(numcuts/2)+1],verts[2][(numcuts/2)+1],verts[0][(numcuts/2)+1],NULL,NULL,NULL); + // Make inner tri + hold = addfacelist(em, verts[1][(numcuts/2)+1],verts[2][(numcuts/2)+1],verts[0][(numcuts/2)+1],NULL,NULL,NULL); hold->e2->f2 |= EDGEINNER; //if(scene->toolsettings->editbutflag & B_AUTOFGON) { // hold->e2->h |= EM_FGON; //} - facecopy(em, efa,hold); + facecopy(em, efa,hold); repeats = ((numcuts+1) / 2)-1; } - + // cuts for 1 and 2 do not have the repeating quads if(numcuts < 3) {repeats = 0;} for(i=0;ie2->f2 |= EDGEINNER; - facecopy(em, efa,hold); - hold = addfacelist(em, verts[1][vertsize-i-3],verts[1][vertsize-i-2],verts[2][i+1],verts[2][i+2],NULL,NULL); + hold = addfacelist(em, verts[1][i+1],verts[1][i+2],verts[0][vertsize-i-3],verts[0][vertsize-i-2],NULL,NULL); + hold->e2->f2 |= EDGEINNER; + facecopy(em, efa,hold); + hold = addfacelist(em, verts[1][vertsize-i-3],verts[1][vertsize-i-2],verts[2][i+1],verts[2][i+2],NULL,NULL); hold->e4->f2 |= EDGEINNER; - facecopy(em, efa,hold); + facecopy(em, efa,hold); } - // Do repeating bottom quads + // Do repeating bottom quads for(i=0;ie2->f2 |= EDGEINNER; - facecopy(em, efa,hold); - } + facecopy(em, efa,hold); + } //EM_fgon_flags(em); } static void fill_quad_quadruple(EditMesh *em, EditFace *efa, struct GHash *gh, int numcuts, float smooth, float fractal, int beauty) { EditVert **verts[4], ***innerverts; - EditFace *hold; + EditFace *hold; EditEdge temp; short vertsize, i, j; - + // Point verts[0] and [1] to the array of new verts for cedge[0] and cedge[1] verts[0] = BLI_ghash_lookup(gh, efa->e1); verts[1] = BLI_ghash_lookup(gh, efa->e2); @@ -2198,79 +2200,79 @@ static void fill_quad_quadruple(EditMesh *em, EditFace *efa, struct GHash *gh, i // the array to the correct direction if(verts[0][0] != efa->v1) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != efa->v2) {flipvertarray(verts[1],numcuts+2);} + if(verts[1][0] != efa->v2) {flipvertarray(verts[1],numcuts+2);} if(verts[2][0] == efa->v3) {flipvertarray(verts[2],numcuts+2);} - if(verts[3][0] == efa->v4) {flipvertarray(verts[3],numcuts+2);} + if(verts[3][0] == efa->v4) {flipvertarray(verts[3],numcuts+2);} /* We should have something like this now 1 - - 3 2 1 0 - 0|---*---*---|0 + + 3 2 1 0 + 0|---*---*---|0 | | 1* *1 2 | | 4 - 2* *2 + 2* *2 | | - 3|---*---*---|3 + 3|---*---*---|3 3 2 1 0 3 // we will fill a 2 dim array of editvert*s to make filling easier // the innervert order is shown - 0 0---1---2---3 + 0 0---1---2---3 | | | | - 1 0---1---2---3 + 1 0---1---2---3 | | | | - 2 0---1---2---3 + 2 0---1---2---3 | | | | - 3 0---1---2---3 - + 3 0---1---2---3 + */ - innerverts = MEM_mallocN(sizeof(EditVert*)*(numcuts+2),"quad-quad subdiv inner verts outer array"); + innerverts = MEM_mallocN(sizeof(EditVert*)*(numcuts+2),"quad-quad subdiv inner verts outer array"); for(i=0;ie1->f2 = EDGENEW; - hold->e2->f2 = EDGENEW; - hold->e3->f2 = EDGENEW; - hold->e4->f2 = EDGENEW; - + hold = addfacelist(em, innerverts[i][j+1],innerverts[i][j],innerverts[i+1][j],innerverts[i+1][j+1],NULL,NULL); + hold->e1->f2 = EDGENEW; + hold->e2->f2 = EDGENEW; + hold->e3->f2 = EDGENEW; + hold->e4->f2 = EDGENEW; + if(i != 0) { hold->e1->f2 |= EDGEINNER; } if(j != 0) { hold->e2->f2 |= EDGEINNER; } if(i != numcuts) { hold->e3->f2 |= EDGEINNER; } if(j != numcuts) { hold->e4->f2 |= EDGEINNER; } - - facecopy(em, efa,hold); - } + + facecopy(em, efa,hold); + } } // Clean up our dynamic multi-dim array for(i=0;iv1) {flipvertarray(verts[0],numcuts+2);} - if(verts[1][0] != efa->v2) {flipvertarray(verts[1],numcuts+2);} - if(verts[2][0] != efa->v3) {flipvertarray(verts[2],numcuts+2);} + if(verts[1][0] != efa->v2) {flipvertarray(verts[1],numcuts+2);} + if(verts[2][0] != efa->v3) {flipvertarray(verts[2],numcuts+2);} /* We should have something like this now 3 - - 3 2 1 0 - 0|---*---*---|3 - | / - 1 1* *2 - | / - 2* *1 2 - | / - 3|/ + + 3 2 1 0 + 0|---*---*---|3 + | / + 1 1* *2 + | / + 2* *1 2 + | / + 3|/ 0 we will fill a 2 dim array of editvert*s to make filling easier @@ -2315,33 +2317,33 @@ static void fill_tri_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int n 3 0 0---1---2---3---4 - | / | / |/ | / - 1 0---1----2---3 - 1 | / | / | / + | / | / |/ | / + 1 0---1----2---3 + 1 | / | / | / 2 0----1---2 2 - | / | / - |/ |/ - 3 0---1 + | / | / + |/ |/ + 3 0---1 | / |/ - 4 0 - + 4 0 + */ - - innerverts = MEM_mallocN(sizeof(EditVert*)*(numcuts+2),"tri-tri subdiv inner verts outer array"); + + innerverts = MEM_mallocN(sizeof(EditVert*)*(numcuts+2),"tri-tri subdiv inner verts outer array"); for(i=0;ie1->f2 |= EDGENEW; - hold->e2->f2 |= EDGENEW; - hold->e3->f2 |= EDGENEW; + hold = addfacelist(em, innerverts[i][j+1],innerverts[i][j],innerverts[i+1][j],NULL,NULL,NULL); + hold->e1->f2 |= EDGENEW; + hold->e2->f2 |= EDGENEW; + hold->e3->f2 |= EDGENEW; if(i != 0) { hold->e1->f2 |= EDGEINNER; } if(j != 0) { hold->e2->f2 |= EDGEINNER; } if(j+1 != (numcuts+1)-i) {hold->e3->f2 |= EDGEINNER;} - - facecopy(em, efa,hold); - //if there are more to come, we do the 2nd + + facecopy(em, efa,hold); + //if there are more to come, we do the 2nd if(j+1 <= numcuts-i) { - hold = addfacelist(em, innerverts[i+1][j],innerverts[i+1][j+1],innerverts[i][j+1],NULL,NULL,NULL); - facecopy(em, efa,hold); - hold->e1->f2 |= EDGENEW; - hold->e2->f2 |= EDGENEW; - hold->e3->f2 |= EDGENEW; + hold = addfacelist(em, innerverts[i+1][j],innerverts[i+1][j+1],innerverts[i][j+1],NULL,NULL,NULL); + facecopy(em, efa,hold); + hold->e1->f2 |= EDGENEW; + hold->e2->f2 |= EDGENEW; + hold->e3->f2 |= EDGENEW; } - } + } } // Clean up our dynamic multi-dim array for(i=0;iv1, efa->v2, efa->v3, 0, efa, NULL); hold->e1->f2 |= EDGENEW; @@ -2402,7 +2404,7 @@ static void fill_quad_doublevert(EditMesh *em, EditFace *efa, int v1, int v2) hold->e3->f2 |= EDGENEW; hold->e3->f2 |= EDGEINNER; facecopy(em, efa, hold); - + hold= addfacelist(em, efa->v1, efa->v3, efa->v4, 0, efa, NULL); hold->e1->f2 |= EDGENEW; hold->e2->f2 |= EDGENEW; @@ -2417,7 +2419,7 @@ static void fill_quad_doublevert(EditMesh *em, EditFace *efa, int v1, int v2) hold->e3->f2 |= EDGENEW; hold->e2->f2 |= EDGEINNER; facecopy(em, efa, hold); - + hold= addfacelist(em, efa->v2, efa->v3, efa->v4, 0, efa, NULL); hold->e1->f2 |= EDGENEW; hold->e2->f2 |= EDGENEW; @@ -2432,17 +2434,17 @@ static void fill_quad_singlevert(EditMesh *em, EditFace *efa, struct GHash *gh) EditEdge *cedge=NULL; EditVert *v[4], **verts; EditFace *hold; - short start=0, end, left, right, vertsize; - + short start=0, end, left, right, vertsize; + v[0] = efa->v1; v[1] = efa->v2; v[2] = efa->v3; - v[3] = efa->v4; + v[3] = efa->v4; if(efa->e1->f & SELECT) { cedge = efa->e1; start = 0;} - else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} - else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} - else if(efa->e4->f & SELECT) { cedge = efa->e4; start = 3;} + else if(efa->e2->f & SELECT) { cedge = efa->e2; start = 1;} + else if(efa->e3->f & SELECT) { cedge = efa->e3; start = 2;} + else if(efa->e4->f & SELECT) { cedge = efa->e4; start = 3;} // Point verts to the array of new verts for cedge verts = BLI_ghash_lookup(gh, cedge); @@ -2456,25 +2458,25 @@ static void fill_quad_singlevert(EditMesh *em, EditFace *efa, struct GHash *gh) if(verts[0] != v[start]) {flipvertarray(verts,3);} end = (start+1)%4; left = (start+2)%4; - right = (start+3)%4; + right = (start+3)%4; /* We should have something like this now - end start - 2 1 0 + end start + 2 1 0 |-----*-----| | | - | | | | - ------------- + | | + ------------- left right where start,end,left, right are indexes of EditFace->v1, etc (stored in v) and 0,1,2 are the indexes of the new verts stored in verts. We fill like this, depending on whether its vertex 'left' or vertex 'right' thats been knifed through... - + |---*---| |---*---| | / | | \ | | / | | \ | @@ -2490,7 +2492,7 @@ static void fill_quad_singlevert(EditMesh *em, EditFace *efa, struct GHash *gh) hold->e3->f2 |= EDGENEW; hold->e3->f2 |= EDGEINNER; facecopy(em, efa, hold); - + //quad is composed of cutvert, left, right and start hold = addfacelist(em, verts[1],v[left],v[right],v[start], NULL, NULL); hold->e1->f2 |= EDGENEW; @@ -2517,17 +2519,17 @@ static void fill_quad_singlevert(EditMesh *em, EditFace *efa, struct GHash *gh) hold->e4->f2 |= EDGEINNER; facecopy(em, efa, hold); } - -} -// This function takes an example edge, the current point to create and +} + +// This function takes an example edge, the current point to create and // the total # of points to create, then creates the point and return the // editvert pointer to it. static EditVert *subdivideedgenum(EditMesh *em, EditEdge *edge, int curpoint, int totpoint, float smooth, float fractal, int beauty) { EditVert *ev; float percent; - + if (beauty & (B_PERCENTSUBD) && totpoint == 1) //percent=(float)(edge->tmp.l)/32768.0f; percent= edge->tmp.fp; @@ -2536,7 +2538,7 @@ static EditVert *subdivideedgenum(EditMesh *em, EditEdge *edge, int curpoint, in ev= subdivide_edge_addvert(em, edge, smooth, fractal, beauty, percent); ev->f = edge->v1->f; - + return ev; } @@ -2550,7 +2552,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float int i, j, edgecount, touchcount, facetype,hold; ModifierData *md= obedit->modifiers.first; int ctrl= 0; // XXX - + //Set faces f1 to 0 cause we need it later for(ef=em->faces.first;ef;ef = ef->next) ef->f1 = 0; for(eve=em->verts.first; eve; eve=eve->next) { @@ -2561,8 +2563,8 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float for (; md; md=md->next) { if (md->type==eModifierType_Mirror) { - MirrorModifierData *mmd = (MirrorModifierData*) md; - + MirrorModifierData *mmd = (MirrorModifierData*) md; + if(mmd->flag & MOD_MIR_CLIPPING) { for (eve= em->verts.first; eve; eve= eve->next) { eve->f2= 0; @@ -2584,23 +2586,23 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float } } } - + //Flush vertex flags upward to the edges for(eed = em->edges.first;eed;eed = eed->next) { //if(eed->f & flag && eed->v1->f == eed->v2->f) { - // eed->f |= eed->v1->f; + // eed->f |= eed->v1->f; // } - eed->f2 = 0; + eed->f2 = 0; if(eed->f & flag) { eed->f2 |= EDGEOLD; } } - + // We store an array of verts for each edge that is subdivided, // we put this array as a value in a ghash which is keyed by the EditEdge* // Now for beauty subdivide deselect edges based on length - if(beauty & B_BEAUTY) { + if(beauty & B_BEAUTY) { for(ef = em->faces.first;ef;ef = ef->next) { if(!ef->v4) { continue; @@ -2609,12 +2611,12 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float VECCOPY(v1mat, ef->v1->co); VECCOPY(v2mat, ef->v2->co); VECCOPY(v3mat, ef->v3->co); - VECCOPY(v4mat, ef->v4->co); + VECCOPY(v4mat, ef->v4->co); Mat4Mul3Vecfl(obedit->obmat, v1mat); - Mat4Mul3Vecfl(obedit->obmat, v2mat); + Mat4Mul3Vecfl(obedit->obmat, v2mat); Mat4Mul3Vecfl(obedit->obmat, v3mat); Mat4Mul3Vecfl(obedit->obmat, v4mat); - + length[0] = VecLenf(v1mat, v2mat); length[1] = VecLenf(v2mat, v3mat); length[2] = VecLenf(v3mat, v4mat); @@ -2623,20 +2625,20 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float sort[1] = ef->e2; sort[2] = ef->e3; sort[3] = ef->e4; - - + + // Beauty Short Edges if(beauty & B_BEAUTY_SHORT) { for(j=0;j<2;j++) { hold = -1; for(i=0;i<4;i++) { if(length[i] < 0) { - continue; - } else if(hold == -1) { - hold = i; + continue; + } else if(hold == -1) { + hold = i; } else { if(length[hold] < length[i]) { - hold = i; + hold = i; } } } @@ -2647,19 +2649,19 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float } } } - + // Beauty Long Edges else { for(j=0;j<2;j++) { hold = -1; for(i=0;i<4;i++) { if(length[i] < 0) { - continue; - } else if(hold == -1) { - hold = i; + continue; + } else if(hold == -1) { + hold = i; } else { if(length[hold] > length[i]) { - hold = i; + hold = i; } } } @@ -2674,18 +2676,18 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float } } - gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp); + gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp); // If we are knifing, We only need the selected edges that were cut, so deselect if it was not cut - if(beauty & B_KNIFE) { - for(eed= em->edges.first;eed;eed=eed->next) { + if(beauty & B_KNIFE) { + for(eed= em->edges.first;eed;eed=eed->next) { if( eed->tmp.fp == 0 ) { EM_select_edge(eed,0); } } - } + } // So for each edge, if it is selected, we allocate an array of size cuts+2 - // so we can have a place for the v1, the new verts and v2 + // so we can have a place for the v1, the new verts and v2 for(eed=em->edges.first;eed;eed = eed->next) { if(eed->f & flag) { templist = MEM_mallocN(sizeof(EditVert*)*(numcuts+2),"vertlist"); @@ -2703,9 +2705,9 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float //Do the last edge too cedge = addedgelist(em, templist[i],templist[i+1],eed); cedge->f2 = EDGENEW; - // Now that the edge is subdivided, we can put its verts in the ghash - BLI_ghash_insert(gh, eed, templist); - } + // Now that the edge is subdivided, we can put its verts in the ghash + BLI_ghash_insert(gh, eed, templist); + } } // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); @@ -2720,7 +2722,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float if(ef->v4) { facetype = 4; if(ef->e4->f & flag) {edgecount++;} - } + } if(facetype == 4) { switch(edgecount) { case 0: @@ -2732,9 +2734,9 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float if(ef->v3->f1) touchcount++; if(ef->v4->f1) touchcount++; if(touchcount == 2){ - if(ef->v1->f1 && ef->v3->f1){ + if(ef->v1->f1 && ef->v3->f1){ ef->f1 = SELECT; - fill_quad_doublevert(em, ef, 1, 3); + fill_quad_doublevert(em, ef, 1, 3); } else if(ef->v2->f1 && ef->v4->f1){ ef->f1 = SELECT; @@ -2742,9 +2744,9 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float } } } - break; - - case 1: + break; + + case 1: if(beauty & B_KNIFE && numcuts == 1){ /*Test for when knifing through an edge and one vert*/ touchcount = 0; @@ -2752,14 +2754,14 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float if(ef->v2->f1) touchcount++; if(ef->v3->f1) touchcount++; if(ef->v4->f1) touchcount++; - + if(touchcount == 1){ if( (ef->e1->f & flag && ( !ef->e1->v1->f1 && !ef->e1->v2->f1 )) || (ef->e2->f & flag && ( !ef->e2->v1->f1 && !ef->e2->v2->f1 )) || (ef->e3->f & flag && ( !ef->e3->v1->f1 && !ef->e3->v2->f1 )) || (ef->e4->f & flag && ( !ef->e4->v1->f1 && !ef->e4->v2->f1 )) ){ - - ef->f1 = SELECT; + + ef->f1 = SELECT; fill_quad_singlevert(em, ef, gh); } else{ @@ -2767,64 +2769,64 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float fill_quad_single(em, ef, gh, numcuts, seltype); } } - else{ - ef->f1 = SELECT; + else{ + ef->f1 = SELECT; fill_quad_single(em, ef, gh, numcuts, seltype); } } - else{ + else{ ef->f1 = SELECT; fill_quad_single(em, ef, gh, numcuts, seltype); } - break; + break; case 2: ef->f1 = SELECT; // if there are 2, we check if edge 1 and 3 are either both on or off that way // we can tell if the selected pair is Adjacent or Opposite of each other - if((ef->e1->f & flag && ef->e3->f & flag) || + if((ef->e1->f & flag && ef->e3->f & flag) || (ef->e2->f & flag && ef->e4->f & flag)) { - fill_quad_double_op(em, ef, gh, numcuts); + fill_quad_double_op(em, ef, gh, numcuts); }else{ switch(0) { // XXX scene->toolsettings->cornertype) { case 0: fill_quad_double_adj_path(em, ef, gh, numcuts); break; case 1: fill_quad_double_adj_inner(em, ef, gh, numcuts); break; case 2: fill_quad_double_adj_fan(em, ef, gh, numcuts); break; } - + } - break; + break; case 3: ef->f1 = SELECT; - fill_quad_triple(em, ef, gh, numcuts); - break; + fill_quad_triple(em, ef, gh, numcuts); + break; case 4: ef->f1 = SELECT; - fill_quad_quadruple(em, ef, gh, numcuts, smooth, fractal, beauty); - break; + fill_quad_quadruple(em, ef, gh, numcuts, smooth, fractal, beauty); + break; } } else { switch(edgecount) { case 0: break; case 1: ef->f1 = SELECT; fill_tri_single(em, ef, gh, numcuts, seltype); - break; + break; case 2: ef->f1 = SELECT; fill_tri_double(em, ef, gh, numcuts); - break; + break; case 3: ef->f1 = SELECT; fill_tri_triple(em, ef, gh, numcuts, smooth, fractal, beauty); - break; - } - } + break; + } + } } - + // Delete Old Edges and Faces for(eed = em->edges.first;eed;eed = eed->next) { if(BLI_ghash_haskey(gh,eed)) { - eed->f1 = SELECT; + eed->f1 = SELECT; } else { - eed->f1 = 0; + eed->f1 = 0; } - } - free_tagged_edges_faces(em, em->edges.first, em->faces.first); - + } + free_tagged_edges_faces(em, em->edges.first, em->faces.first); + if(seltype == SUBDIV_SELECT_ORIG && !ctrl) { /* bugfix: vertex could get flagged as "not-selected" // solution: clear flags before, not at the same time as setting SELECT flag -dg @@ -2832,7 +2834,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float for(eed = em->edges.first;eed;eed = eed->next) { if(!(eed->f2 & EDGENEW || eed->f2 & EDGEOLD)) { eed->f &= !flag; - EM_select_edge(eed,0); + EM_select_edge(eed,0); } } for(eed = em->edges.first;eed;eed = eed->next) { @@ -2845,14 +2847,14 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float for(eed = em->edges.first;eed;eed = eed->next) { if(eed->f2 & EDGEINNER) { eed->f |= flag; - EM_select_edge(eed,1); + EM_select_edge(eed,1); if(eed->v1->f & EDGEINNER) eed->v1->f |= SELECT; if(eed->v2->f & EDGEINNER) eed->v2->f |= SELECT; }else{ eed->f &= !flag; - EM_select_edge(eed,0); + EM_select_edge(eed,0); } - } + } } else if(seltype == SUBDIV_SELECT_LOOPCUT){ for(eed = em->edges.first;eed;eed = eed->next) { if(eed->f2 & DOUBLEOPFILL){ @@ -2863,16 +2865,16 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float EM_select_edge(eed,0); } } - } + } if(em->selectmode & SCE_SELECT_VERTEX) { for(eed = em->edges.first;eed;eed = eed->next) { if(eed->f & SELECT) { eed->v1->f |= SELECT; eed->v2->f |= SELECT; } - } + } } - + //fix hide flags for edges. First pass, hide edges of hidden faces for(ef=em->faces.first; ef; ef=ef->next){ if(ef->h){ @@ -2891,25 +2893,25 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float if(ef->e4) ef->e4->h &= ~1; } } - - // Free the ghash and call MEM_freeN on all the value entries to return + + // Free the ghash and call MEM_freeN on all the value entries to return // that memory - BLI_ghash_free(gh, NULL, (GHashValFreeFP)MEM_freeN); - + BLI_ghash_free(gh, NULL, (GHashValFreeFP)MEM_freeN); + EM_selectmode_flush(em); for(ef=em->faces.first;ef;ef = ef->next) { if(ef->e4) { if( (ef->e1->f & SELECT && ef->e2->f & SELECT) && (ef->e3->f & SELECT && ef->e4->f & SELECT) ) { - ef->f |= SELECT; - } + ef->f |= SELECT; + } } else { if( (ef->e1->f & SELECT && ef->e2->f & SELECT) && ef->e3->f & SELECT) { - ef->f |= SELECT; + ef->f |= SELECT; } } } - + recalc_editnormals(em); } @@ -2948,15 +2950,15 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa) i++; } else eed->tmp.p = NULL; - + eed= eed->next; } - - + + /* find edges pointing to 2 faces by procedure: - + - run through faces and their edges, increase - face counter e->f1 for each face + face counter e->f1 for each face */ while(efa) { @@ -3001,20 +3003,20 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa) } -/* returns vertices of two adjacent triangles forming a quad +/* returns vertices of two adjacent triangles forming a quad - can be righthand or lefthand 4-----3 |\ | | \ 2 | <- efa1 - | \ | - efa-> | 1 \ | - | \| + | \ | + efa-> | 1 \ | + | \| 1-----2 */ #define VTEST(face, num, other) \ - (face->v##num != other->v1 && face->v##num != other->v2 && face->v##num != other->v3) + (face->v##num != other->v1 && face->v##num != other->v2 && face->v##num != other->v3) static void givequadverts(EditFace *efa, EditFace *efa1, EditVert **v1, EditVert **v2, EditVert **v3, EditVert **v4, int *vindex) { @@ -3036,7 +3038,7 @@ static void givequadverts(EditFace *efa, EditFace *efa1, EditVert **v1, EditVert vindex[0]= 2; vindex[1]= 0; } - + if VTEST(efa1, 1, efa) { *v3= efa1->v1; *v4= efa1->v2; @@ -3093,65 +3095,65 @@ static void free_tagged_edges_faces(EditMesh *em, EditEdge *eed, EditFace *efa) free_editedge(em, eed); } eed= nexted; - } -} + } +} /* ******************** BEGIN TRIANGLE TO QUAD ************************************* */ static float measure_facepair(EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4, float limit) { - + /*gives a 'weight' to a pair of triangles that join an edge to decide how good a join they would make*/ /*Note: this is more complicated than it needs to be and should be cleaned up...*/ float measure = 0.0, noA1[3], noA2[3], noB1[3], noB2[3], normalADiff, normalBDiff, edgeVec1[3], edgeVec2[3], edgeVec3[3], edgeVec4[3], diff, minarea, maxarea, areaA, areaB; - + /*First Test: Normal difference*/ CalcNormFloat(v1->co, v2->co, v3->co, noA1); CalcNormFloat(v1->co, v3->co, v4->co, noA2); - + if(noA1[0] == noA2[0] && noA1[1] == noA2[1] && noA1[2] == noA2[2]) normalADiff = 0.0; else normalADiff = VecAngle2(noA1, noA2); //if(!normalADiff) normalADiff = 179; CalcNormFloat(v2->co, v3->co, v4->co, noB1); CalcNormFloat(v4->co, v1->co, v2->co, noB2); - + if(noB1[0] == noB2[0] && noB1[1] == noB2[1] && noB1[2] == noB2[2]) normalBDiff = 0.0; else normalBDiff = VecAngle2(noB1, noB2); //if(!normalBDiff) normalBDiff = 179; - + measure += (normalADiff/360) + (normalBDiff/360); if(measure > limit) return measure; - + /*Second test: Colinearity*/ VecSubf(edgeVec1, v1->co, v2->co); VecSubf(edgeVec2, v2->co, v3->co); VecSubf(edgeVec3, v3->co, v4->co); VecSubf(edgeVec4, v4->co, v1->co); - + diff = 0.0; - + diff = ( fabs(VecAngle2(edgeVec1, edgeVec2) - 90) + - fabs(VecAngle2(edgeVec2, edgeVec3) - 90) + - fabs(VecAngle2(edgeVec3, edgeVec4) - 90) + + fabs(VecAngle2(edgeVec2, edgeVec3) - 90) + + fabs(VecAngle2(edgeVec3, edgeVec4) - 90) + fabs(VecAngle2(edgeVec4, edgeVec1) - 90)) / 360; if(!diff) return 0.0; - + measure += diff; if(measure > limit) return measure; /*Third test: Concavity*/ areaA = AreaT3Dfl(v1->co, v2->co, v3->co) + AreaT3Dfl(v1->co, v3->co, v4->co); areaB = AreaT3Dfl(v2->co, v3->co, v4->co) + AreaT3Dfl(v4->co, v1->co, v2->co); - + if(areaA <= areaB) minarea = areaA; else minarea = areaB; - + if(areaA >= areaB) maxarea = areaA; else maxarea = areaB; - + if(!maxarea) measure += 1; else measure += (1 - (minarea / maxarea)); @@ -3160,38 +3162,38 @@ static float measure_facepair(EditVert *v1, EditVert *v2, EditVert *v3, EditVert #define T2QUV_LIMIT 0.005 #define T2QCOL_LIMIT 3 -static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge *eed) +static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge *eed) { - /*Test to see if the per-face attributes for the joining edge match within limit*/ + /*Test to see if the per-face attributes for the joining edge match within limit*/ MTFace *tf1, *tf2; unsigned int *col1, *col2; short i,attrok=0, flag = 0, /* XXX scene->toolsettings->editbutflag,*/ fe1[2], fe2[2]; - + tf1 = CustomData_em_get(&em->fdata, f1->data, CD_MTFACE); tf2 = CustomData_em_get(&em->fdata, f2->data, CD_MTFACE); col1 = CustomData_em_get(&em->fdata, f1->data, CD_MCOL); col2 = CustomData_em_get(&em->fdata, f2->data, CD_MCOL); - + /*store indices for faceedges*/ f1->v1->f1 = 0; f1->v2->f1 = 1; f1->v3->f1 = 2; - + fe1[0] = eed->v1->f1; fe1[1] = eed->v2->f1; - + f2->v1->f1 = 0; f2->v2->f1 = 1; f2->v3->f1 = 2; - + fe2[0] = eed->v1->f1; fe2[1] = eed->v2->f1; - + /*compare faceedges for each face attribute. Additional per face attributes can be added later*/ /*do UVs*/ if(flag & B_JOINTRIA_UV){ - + if(tf1 == NULL || tf2 == NULL) attrok |= B_JOINTRIA_UV; else if(tf1->tpage != tf2->tpage); /*do nothing*/ else{ @@ -3201,7 +3203,7 @@ static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge } } } - + /*do VCOLs*/ if(flag & B_JOINTRIA_VCOL){ if(!col1 || !col2) attrok |= B_JOINTRIA_VCOL; @@ -3210,7 +3212,7 @@ static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge for(i = 0; i < 2; i++){ f1vcol = (char *)&(col1[fe1[i]]); f2vcol = (char *)&(col2[fe2[i]]); - + /*compare f1vcol with f2vcol*/ if( f1vcol[1] + T2QCOL_LIMIT > f2vcol[1] && f1vcol[1] - T2QCOL_LIMIT < f2vcol[1] && f1vcol[2] + T2QCOL_LIMIT > f2vcol[2] && f1vcol[2] - T2QCOL_LIMIT < f2vcol[2] && @@ -3218,18 +3220,18 @@ static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge } } } - + if( ((attrok & B_JOINTRIA_UV) == (flag & B_JOINTRIA_UV)) && ((attrok & B_JOINTRIA_VCOL) == (flag & B_JOINTRIA_VCOL)) ) return 1; return 0; -} - +} + static int fplcmp(const void *v1, const void *v2) { const EditEdge *e1= *((EditEdge**)v1), *e2=*((EditEdge**)v2); - + if( e1->crease > e2->crease) return 1; else if( e1->crease < e2->crease) return -1; - + return 0; } @@ -3248,21 +3250,21 @@ void join_triangles(EditMesh *em) float measure; /*Used to set tolerance*/ float limit = 0.0f; // XXX scene->toolsettings->jointrilimit; int i, ok, totedge=0, totseledge=0, complexedges, vindex[4]; - + /*if we take a long time on very dense meshes we want waitcursor to display*/ waitcursor(1); - + totseledge = count_selected_edges(em->edges.first); if(totseledge==0) return; - + /*abusing crease value to store weights for edge pairs. Nasty*/ for(eed=em->edges.first; eed; eed=eed->next) totedge++; - if(totedge) creases = MEM_callocN(sizeof(float) * totedge, "Join Triangles Crease Array"); + if(totedge) creases = MEM_callocN(sizeof(float) * totedge, "Join Triangles Crease Array"); for(eed=em->edges.first, i = 0; eed; eed=eed->next, i++){ - creases[i] = eed->crease; + creases[i] = eed->crease; eed->crease = 0.0; } - + /*clear temp flags*/ for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = eve->f2 = 0; for(eed=em->edges.first; eed; eed=eed->next) eed->f2 = eed->f1 = 0; @@ -3272,11 +3274,11 @@ void join_triangles(EditMesh *em) efaar= (EVPTuple *) MEM_callocN(totseledge * sizeof(EVPTuple), "Tri2Quad"); ok = collect_quadedges(efaar, em->edges.first, em->faces.first); complexedges = 0; - + if(ok){ - - - /*clear tmp.l flag and store number of faces that are selected and coincident to current face here.*/ + + + /*clear tmp.l flag and store number of faces that are selected and coincident to current face here.*/ for(eed=em->edges.first; eed; eed=eed->next){ /* eed->f2 is 2 only if this edge is part of exactly two triangles, and both are selected, and it has EVPTuple assigned */ @@ -3286,7 +3288,7 @@ void join_triangles(EditMesh *em) efaa[1]->tmp.l++; } } - + for(eed=em->edges.first; eed; eed=eed->next){ if(eed->f2 == 2){ efaa= (EVPtr *) eed->tmp.p; @@ -3299,30 +3301,30 @@ void join_triangles(EditMesh *em) efaa[0]->f1 = 1; //mark for join efaa[1]->f1 = 1; //mark for join } - else{ - + else{ + /* The face pair is part of a 'complex' island, so the rules for dealing with it are more involved. Depending on what options the user has chosen, this face pair can be 'thrown out' based upon the following criteria: - + 1: the two faces do not share the same material 2: the edge joining the two faces is marked as sharp. 3: the two faces UV's do not make a good match 4: the two faces Vertex colors do not make a good match - + If the face pair passes all the applicable tests, it is then given a 'weight' with the measure_facepair() function. This measures things like concavity, colinearity ect. If this weight is below the threshold set by the user the edge joining them is marked as being 'complex' and will be compared against other possible pairs which contain one of the same faces in the current pair later. - + This technique is based upon an algorithm that Campbell Barton developed for his Tri2Quad script that was previously part of the python scripts bundled with Blender releases. */ - + // XXX if(scene->toolsettings->editbutflag & B_JOINTRIA_SHARP && eed->sharp); /*do nothing*/ // else if(scene->toolsettings->editbutflag & B_JOINTRIA_MAT && efaa[0]->mat_nr != efaa[1]->mat_nr); /*do nothing*/ // else if(((scene->toolsettings->editbutflag & B_JOINTRIA_UV) || (scene->toolsettings->editbutflag & B_JOINTRIA_VCOL)) && compareFaceAttribs(em, efaa[0], efaa[1], eed); // XXX == 0); /*do nothing*/ -// else{ +// else{ measure = measure_facepair(v1, v2, v3, v4, limit); if(measure < limit){ complexedges++; @@ -3334,7 +3336,7 @@ void join_triangles(EditMesh *em) } } } - + /*Quicksort the complex edges according to their weighting*/ if(complexedges){ edsortblock = edb = MEM_callocN(sizeof(EditEdge*) * complexedges, "Face Pairs quicksort Array"); @@ -3346,7 +3348,7 @@ void join_triangles(EditMesh *em) } qsort(edsortblock, complexedges, sizeof(EditEdge*), fplcmp); /*now go through and mark the edges who get the highest weighting*/ - for(edb=edsortblock, i=0; i < complexedges; edb++, i++){ + for(edb=edsortblock, i=0; i < complexedges; edb++, i++){ efaa = (EVPtr *)((*edb)->tmp.p); /*suspect!*/ if( !efaa[0]->f1 && !efaa[1]->f1){ efaa[0]->f1 = 1; //mark for join @@ -3355,8 +3357,8 @@ void join_triangles(EditMesh *em) } } } - - /*finally go through all edges marked for join (simple and complex) and create new faces*/ + + /*finally go through all edges marked for join (simple and complex) and create new faces*/ for(eed=em->edges.first; eed; eed=eed->next){ if(eed->f1 & T2QJOIN){ efaa= (EVPtr *)eed->tmp.p; @@ -3376,10 +3378,10 @@ void join_triangles(EditMesh *em) } } } - + /*free data and cleanup*/ if(creases){ - for(eed=em->edges.first, i = 0; eed; eed=eed->next, i++) eed->crease = creases[i]; + for(eed=em->edges.first, i = 0; eed; eed=eed->next, i++) eed->crease = creases[i]; MEM_freeN(creases); } for(eed=em->edges.first; eed; eed=eed->next){ @@ -3389,7 +3391,7 @@ void join_triangles(EditMesh *em) free_tagged_edges_faces(em, em->edges.first, em->faces.first); if(efaar) MEM_freeN(efaar); if(edsortblock) MEM_freeN(edsortblock); - + EM_selectmode_flush(em); } @@ -3407,7 +3409,7 @@ void edge_flip(EditMesh *em) EVPTuple *efaar; EVPtr *efaa; int totedge, ok, vindex[4]; - + /* - all selected edges with two faces * - find the faces: store them in edges (using datablock) * - per edge: - test convex @@ -3415,7 +3417,7 @@ void edge_flip(EditMesh *em) - if true: remedge, addedge, all edges at the edge get new face pointers */ - EM_selectmode_flush(em); // makes sure in selectmode 'face' the edges of selected faces are selected too + EM_selectmode_flush(em); // makes sure in selectmode 'face' the edges of selected faces are selected too totedge = count_selected_edges(em->edges.first); if(totedge==0) return; @@ -3424,15 +3426,15 @@ void edge_flip(EditMesh *em) efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "edgeflip"); ok = collect_quadedges(efaar, em->edges.first, em->faces.first); - + eed= em->edges.first; while(eed) { nexted= eed->next; - + if(eed->f2==2) { /* points to 2 faces */ - + efaa= (EVPtr *) eed->tmp.p; - + /* don't do it if flagged */ ok= 1; @@ -3440,7 +3442,7 @@ void edge_flip(EditMesh *em) if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1) ok= 0; efa= efaa[1]; if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1) ok= 0; - + if(ok) { /* test convex */ givequadverts(efaa[0], efaa[1], &v1, &v2, &v3, &v4, vindex); @@ -3449,8 +3451,8 @@ void edge_flip(EditMesh *em) 4-----3 4-----3 |\ | | /| | \ 1 | | 1 / | - | \ | -> | / | - | 0 \ | | / 0 | + | \ | -> | / | + | 0 \ | | / 0 | | \| |/ | 1-----2 1-----2 */ @@ -3458,7 +3460,7 @@ void edge_flip(EditMesh *em) if (v1 && v2 && v3) { if( convex(v1->co, v2->co, v3->co, v4->co) ) { if(exist_face(em, v1, v2, v3, v4)==0) { - /* outch this may break seams */ + /* outch this may break seams */ w= EM_face_from_faces(em, efaa[0], efaa[1], vindex[0], vindex[1], 4+vindex[2], -1); @@ -3473,8 +3475,8 @@ void edge_flip(EditMesh *em) /* tag as to-be-removed */ FACE_MARKCLEAR(efaa[1]); FACE_MARKCLEAR(efaa[0]); - eed->f1 = 1; - + eed->f1 = 1; + } /* endif test convex */ } } @@ -3484,7 +3486,7 @@ void edge_flip(EditMesh *em) /* clear tagged edges and faces: */ free_tagged_edges_faces(em, em->edges.first, em->faces.first); - + MEM_freeN(efaar); } @@ -3511,7 +3513,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) EditEdge **edges[2], **hiddenedges, *srchedge; int facecount, p1, p2, p3, p4, fac1, fac2, i, j; int numhidden, numshared, p[2][4]; - + /* check to make sure that the edge is only part of 2 faces */ facecount = 0; for(efa = em->faces.first;efa;efa = efa->next) { @@ -3526,7 +3528,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) } } } - + if(facecount < 2) return; @@ -3536,7 +3538,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) if(face[1]->e4) fac2= 4; else fac2= 3; - + /* make a handy array for verts and edges */ verts[0]= &face[0]->v1; edges[0]= &face[0]->e1; @@ -3552,7 +3554,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) if(numshared > 1) return; - + /* we want to construct an array of vertex indicis in both faces, starting at the last vertex of the edge being rotated. - first we find the two vertices that lie on the rotating edge @@ -3566,12 +3568,12 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) if(eed->v1 == verts[1][i]) p3 = i; if(eed->v2 == verts[1][i]) p4 = i; } - + if((p1+1)%fac1 == p2) SWAP(int, p1, p2); if((p3+1)%fac2 == p4) SWAP(int, p3, p4); - + for (i = 0; i < 4; i++) { p[0][i]= (p1 + i)%fac1; p[1][i]= (p3 + i)%fac2; @@ -3586,7 +3588,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) hiddenedges = MEM_mallocN(sizeof(EditVert*)*numhidden+1, "RotateEdgeHiddenVerts"); if(!hiddenedges) { BKE_report(op->reports, RPT_ERROR, "Memory allocation failed"); - return; + return; } numhidden = 0; @@ -3608,9 +3610,9 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) } else if (dir == DIRECTION_CCW) { newFace[0]= EM_face_from_faces(em, face[0], face[1], p[0][2], 4+p[1][1], p[0][0], p[0][1]); newFace[1]= EM_face_from_faces(em, face[1], face[0], 4+p[0][2], p[1][0], p[1][1], -1); - + verts[0][p[0][2]]->f |= SELECT; - verts[1][p[1][1]]->f |= SELECT; + verts[1][p[1][1]]->f |= SELECT; } } else if(fac1 == 3 && fac2 == 4) { @@ -3620,11 +3622,11 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) } else if (dir == DIRECTION_CCW) { newFace[0]= EM_face_from_faces(em, face[0], face[1], p[0][0], p[0][1], 4+p[1][2], -1); newFace[1]= EM_face_from_faces(em, face[1], face[0], p[1][1], p[1][2], 4+p[0][1], 4+p[0][2]); - + verts[0][p[0][1]]->f |= SELECT; - verts[1][p[1][2]]->f |= SELECT; + verts[1][p[1][2]]->f |= SELECT; } - + } else if(fac1 == 4 && fac2 == 4) { if(dir == DIRECTION_CW) { @@ -3633,11 +3635,11 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) } else if (dir == DIRECTION_CCW) { newFace[0]= EM_face_from_faces(em, face[0], face[1], p[0][2], p[0][3], 4+p[1][1], 4+p[1][2]); newFace[1]= EM_face_from_faces(em, face[1], face[0], p[1][2], p[1][3], 4+p[0][1], 4+p[0][2]); - + verts[0][p[0][2]]->f |= SELECT; - verts[1][p[1][2]]->f |= SELECT; + verts[1][p[1][2]]->f |= SELECT; } - } + } else return; /* This should never happen */ @@ -3645,7 +3647,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) verts[0][p[0][1]]->f |= SELECT; verts[1][p[1][1]]->f |= SELECT; } - + /* copy old edge's flags to new center edge*/ for(srchedge=em->edges.first;srchedge;srchedge=srchedge->next) { if((srchedge->v1->f & SELECT) && (srchedge->v2->f & SELECT)) { @@ -3657,25 +3659,25 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed, int dir) srchedge->bweight = eed->bweight; } } - + /* resetting hidden flag */ for(numhidden--; numhidden>=0; numhidden--) hiddenedges[numhidden]->h= 1; - + /* check for orhphan edges */ for(srchedge=em->edges.first; srchedge; srchedge=srchedge->next) - srchedge->f1= -1; - + srchedge->f1= -1; + /* cleanup */ MEM_freeN(hiddenedges); - + /* get rid of the old edge and faces*/ remedge(em, eed); - free_editedge(em, eed); + free_editedge(em, eed); BLI_remlink(&em->faces, face[0]); - free_editface(em, face[0]); + free_editface(em, face[0]); BLI_remlink(&em->faces, face[1]); - free_editface(em, face[1]); + free_editface(em, face[1]); } // XXX ton please check @@ -3689,14 +3691,14 @@ static int edge_rotate_selected(bContext *C, wmOperator *op) EditFace *efa; int dir = RNA_int_get(op->ptr, "direction"); // dir == 2 when clockwise and ==1 for counter CW. short edgeCount = 0; - + /*clear new flag for new edges, count selected edges */ for(eed= em->edges.first; eed; eed= eed->next) { eed->f1= 0; eed->f2 &= ~2; - if(eed->f & SELECT) edgeCount++; + if(eed->f & SELECT) edgeCount++; } - + if(edgeCount>1) { /* more selected edges, check faces */ for(efa= em->faces.first; efa; efa= efa->next) { @@ -3719,7 +3721,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op) } } } - else + else { BKE_report(op->reports, RPT_ERROR, "Select one edge or two adjacent faces"); BKE_mesh_end_editmesh(obedit->data, em); @@ -3735,7 +3737,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op) } } } - else { + else { BKE_report(op->reports, RPT_ERROR, "Select one edge or two adjacent faces"); BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; @@ -3743,7 +3745,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op) /* flush selected vertices (again) to edges/faces */ EM_select_flush(em); - + BKE_mesh_end_editmesh(obedit->data, em); DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); @@ -3757,14 +3759,14 @@ void MESH_OT_edge_rotate(wmOperatorType *ot) /* identifiers */ ot->name= "Rotate Selected Edge"; ot->idname= "MESH_OT_edge_rotate"; - + /* api callbacks */ ot->exec= edge_rotate_selected; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_enum(ot->srna, "direction", direction_items, DIRECTION_CW, "direction", "direction to rotate edge around."); } @@ -3774,7 +3776,7 @@ void MESH_OT_edge_rotate(wmOperatorType *ot) /* XXX old bevel not ported yet */ -void bevel_menu(EditMesh *em) +void bevel_menu(EditMesh *em) { BME_Mesh *bm; BME_TransData_Head *td; @@ -3829,7 +3831,7 @@ returns 0 if they do not, or if the function is passed the same edge 2 times short sharesFace(EditMesh *em, EditEdge* e1, EditEdge* e2) { EditFace *search=NULL; - + search = em->faces.first; if (e1 == e2){ return 0 ; @@ -3880,38 +3882,38 @@ useless: float shiftlabda= 0.0f,len = 0.0f; int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0; int wasshift = 0; - + /* UV correction vars */ GHash **uvarray= NULL; int uvlay_tot= CustomData_number_of_layers(&em->fdata, CD_MTFACE); int uvlay_idx; - SlideUv *slideuvs=NULL, *suv=NULL, *suv_last=NULL; + SlideUv *slideuvs=NULL, *suv=NULL, *suv_last=NULL; float uv_tmp[2]; LinkNode *fuv_link; - + short event, draw=1; short mval[2], mvalo[2]; - char str[128]; + char str[128]; float labda = 0.0f; - + // initNumInput(&num); - + // view3d_get_object_project_mat(curarea, obedit, projectMat); - - mvalo[0] = -1; mvalo[1] = -1; - numsel =0; - + + mvalo[0] = -1; mvalo[1] = -1; + numsel =0; + // Get number of selected edges and clear some flags for(eed=em->edges.first;eed;eed=eed->next) { eed->f1 = 0; - eed->f2 = 0; + eed->f2 = 0; if(eed->f & SELECT) numsel++; } - + for(ev=em->verts.first;ev;ev=ev->next) { - ev->f1 = 0; - } - + ev->f1 = 0; + } + //Make sure each edge only has 2 faces // make sure loop doesn't cross face for(efa=em->faces.first;efa;efa=efa->next) { @@ -3921,7 +3923,7 @@ useless: efa->e1->f1++; if(efa->e1->f1 > 2) { BKE_report(op->reports, RPT_ERROR, "3+ face edge"); - return 0; + return 0; } } if(efa->e2->f & SELECT) { @@ -3929,7 +3931,7 @@ useless: efa->e2->f1++; if(efa->e2->f1 > 2) { BKE_report(op->reports, RPT_ERROR, "3+ face edge"); - return 0; + return 0; } } if(efa->e3->f & SELECT) { @@ -3937,7 +3939,7 @@ useless: efa->e3->f1++; if(efa->e3->f1 > 2) { BKE_report(op->reports, RPT_ERROR, "3+ face edge"); - return 0; + return 0; } } if(efa->e4 && efa->e4->f & SELECT) { @@ -3945,26 +3947,26 @@ useless: efa->e4->f1++; if(efa->e4->f1 > 2) { BKE_report(op->reports, RPT_ERROR, "3+ face edge"); - return 0; + return 0; } - } - // Make sure loop is not 2 edges of same face + } + // Make sure loop is not 2 edges of same face if(ct > 1) { BKE_report(op->reports, RPT_ERROR, "Loop crosses itself"); - return 0; + return 0; } - } + } // Get # of selected verts - for(ev=em->verts.first;ev;ev=ev->next) { + for(ev=em->verts.first;ev;ev=ev->next) { if(ev->f & SELECT) vertsel++; - } - + } + // Test for multiple segments if(vertsel > numsel+1) { BKE_report(op->reports, RPT_ERROR, "Please choose a single edge loop"); - return 0; - } - + return 0; + } + // Get the edgeloop in order - mark f1 with SELECT once added for(eed=em->edges.first;eed;eed=eed->next) { if((eed->f & SELECT) && !(eed->f1 & SELECT)) { @@ -3973,35 +3975,35 @@ useless: BLI_linklist_prepend(&edgelist,eed); numadded++; first = eed; - last = eed; + last = eed; eed->f1 = SELECT; - } else { + } else { if(editedge_getSharedVert(eed, last)) { BLI_linklist_append(&edgelist,eed); eed->f1 = SELECT; numadded++; - last = eed; + last = eed; } else if(editedge_getSharedVert(eed, first)) { BLI_linklist_prepend(&edgelist,eed); eed->f1 = SELECT; numadded++; - first = eed; - } + first = eed; + } } - } + } if(eed->next == NULL && numadded != numsel) { - eed=em->edges.first; + eed=em->edges.first; timesthrough++; } - + // It looks like there was an unexpected case - Hopefully should not happen if(timesthrough >= numsel*2) { - BLI_linklist_free(edgelist,NULL); + BLI_linklist_free(edgelist,NULL); BKE_report(op->reports, RPT_ERROR, "Could not order loop"); - return 0; + return 0; } } - + // Put the verts in order in a linklist look = edgelist; while(look) { @@ -4012,33 +4014,33 @@ useless: //This is the first entry takes care of extra vert if(eed->v1 != temp->v1 && eed->v1 != temp->v2) { - BLI_linklist_append(&vertlist,eed->v1); - eed->v1->f1 = 1; + BLI_linklist_append(&vertlist,eed->v1); + eed->v1->f1 = 1; } else { - BLI_linklist_append(&vertlist,eed->v2); - eed->v2->f1 = 1; - } + BLI_linklist_append(&vertlist,eed->v2); + eed->v2->f1 = 1; + } } else { //This is the case that we only have 1 edge - BLI_linklist_append(&vertlist,eed->v1); - eed->v1->f1 = 1; + BLI_linklist_append(&vertlist,eed->v1); + eed->v1->f1 = 1; } - } + } // for all the entries if(eed->v1->f1 != 1) { - BLI_linklist_append(&vertlist,eed->v1); - eed->v1->f1 = 1; + BLI_linklist_append(&vertlist,eed->v1); + eed->v1->f1 = 1; } else if(eed->v2->f1 != 1) { - BLI_linklist_append(&vertlist,eed->v2); - eed->v2->f1 = 1; - } - look = look->next; - } - + BLI_linklist_append(&vertlist,eed->v2); + eed->v2->f1 = 1; + } + look = look->next; + } + // populate the SlideVerts - - vertgh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp); - look = vertlist; + + vertgh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp); + look = vertlist; while(look) { i=0; j=0; @@ -4054,14 +4056,14 @@ useless: tempsv->origvert.no[2] = ev->no[2]; // i is total edges that vert is on // j is total selected edges that vert is on - + for(eed=em->edges.first;eed;eed=eed->next) { if(eed->v1 == ev || eed->v2 == ev) { - i++; + i++; if(eed->f & SELECT) { - j++; + j++; } - } + } } // If the vert is in the middle of an edge loop, it touches 2 selected edges and 2 unselected edges if(i == 4 && j == 2) { @@ -4071,11 +4073,11 @@ useless: if(!tempsv->up) { tempsv->up = eed; } else if (!(tempsv->down)) { - tempsv->down = eed; + tempsv->down = eed; } } - } - } + } + } } // If it is on the end of the loop, it touches 1 selected and as least 2 more unselected if(i >= 3 && j == 1) { @@ -4087,63 +4089,63 @@ useless: if(!tempsv->up) { tempsv->up = efa->e1; } else if (!(tempsv->down)) { - tempsv->down = efa->e1; - } + tempsv->down = efa->e1; + } } if(editedge_containsVert(efa->e2, ev) && efa->e2 != eed) { if(!tempsv->up) { tempsv->up = efa->e2; } else if (!(tempsv->down)) { - tempsv->down = efa->e2; - } - } + tempsv->down = efa->e2; + } + } if(editedge_containsVert(efa->e3, ev) && efa->e3 != eed) { if(!tempsv->up) { tempsv->up = efa->e3; } else if (!(tempsv->down)) { - tempsv->down = efa->e3; - } - } + tempsv->down = efa->e3; + } + } if(efa->e4) { if(editedge_containsVert(efa->e4, ev) && efa->e4 != eed) { if(!tempsv->up) { tempsv->up = efa->e4; } else if (!(tempsv->down)) { - tempsv->down = efa->e4; - } + tempsv->down = efa->e4; + } } - } - + } + } } - } - } - } + } + } + } if(i > 4 && j == 2) { BLI_ghash_free(vertgh, NULL, (GHashValFreeFP)MEM_freeN); - BLI_linklist_free(vertlist,NULL); - BLI_linklist_free(edgelist,NULL); - return 0; + BLI_linklist_free(vertlist,NULL); + BLI_linklist_free(edgelist,NULL); + return 0; } BLI_ghash_insert(vertgh,ev,tempsv); - - look = look->next; - } - + + look = look->next; + } + // make sure the UPs nad DOWNs are 'faceloops' // Also find the nearest slidevert to the cursor // XXX getmouseco_areawin(mval); - look = vertlist; + look = vertlist; nearest = NULL; - vertdist = -1; - while(look) { + vertdist = -1; + while(look) { tempsv = BLI_ghash_lookup(vertgh,(EditVert*)look->link); - + if(!tempsv->up || !tempsv->down) { BKE_report(op->reports, RPT_ERROR, "Missing rails"); BLI_ghash_free(vertgh, NULL, (GHashValFreeFP)MEM_freeN); - BLI_linklist_free(vertlist,NULL); - BLI_linklist_free(edgelist,NULL); + BLI_linklist_free(vertlist,NULL); + BLI_linklist_free(edgelist,NULL); return 0; } @@ -4174,39 +4176,39 @@ useless: EditEdge *swap; swap = sv->up; sv->up = sv->down; - sv->down = swap; + sv->down = swap; } // view3d_project_float(curarea, tempsv->origvert.co, co, projectMat); - + tempdist = sqrt(pow(co[0] - mval[0],2)+pow(co[1] - mval[1],2)); if(vertdist < 0) { vertdist = tempdist; - nearest = (EditVert*)look->link; + nearest = (EditVert*)look->link; } else if ( tempdist < vertdist ) { vertdist = tempdist; - nearest = (EditVert*)look->link; - } + nearest = (EditVert*)look->link; + } } - } - - - - look = look->next; - } - - + } + + + + look = look->next; + } + + if (uvlay_tot) { // XXX && (scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) { int maxnum = 0; uvarray = MEM_callocN( uvlay_tot * sizeof(GHash *), "SlideUVs Array"); suv_last = slideuvs = MEM_callocN( uvlay_tot * (numadded+1) * sizeof(SlideUv), "SlideUVs"); /* uvLayers * verts */ suv = NULL; - + for (uvlay_idx=0; uvlay_idxverts.first;ev;ev=ev->next) { ev->tmp.l = 0; } @@ -4214,25 +4216,25 @@ useless: while(look) { float *uv_new; tempsv = BLI_ghash_lookup(vertgh,(EditVert*)look->link); - + ev = look->link; suv = NULL; for(efa = em->faces.first;efa;efa=efa->next) { if (ev->tmp.l != -1) { /* test for self, in this case its invalid */ int k=-1; /* face corner */ - + /* Is this vert in the faces corner? */ if (efa->v1==ev) k=0; else if (efa->v2==ev) k=1; else if (efa->v3==ev) k=2; else if (efa->v4 && efa->v4==ev) k=3; - + if (k != -1) { MTFace *tf = CustomData_em_get_n(&em->fdata, efa->data, CD_MTFACE, uvlay_idx); EditVert *ev_up, *ev_down; - + uv_new = tf->uv[k]; - + if (ev->tmp.l) { if (fabs(suv->origuv[0]-uv_new[0]) > 0.0001 || fabs(suv->origuv[1]-uv_new[1])) { ev->tmp.l = -1; /* Tag as invalid */ @@ -4250,14 +4252,14 @@ useless: suv->uv_up = suv->uv_down = NULL; suv->origuv[0] = uv_new[0]; suv->origuv[1] = uv_new[1]; - + BLI_linklist_prepend(&suv->fuv_list, uv_new); BLI_ghash_insert(uvarray[uvlay_idx],ev,suv); - + suv_last++; /* advance to next slide UV */ maxnum++; } - + /* Now get the uvs along the up or down edge if we can */ if (suv) { if (!suv->uv_up) { @@ -4274,7 +4276,7 @@ useless: else if (efa->v3==ev_down) suv->uv_down = tf->uv[2]; else if (efa->v4 && efa->v4==ev_down) suv->uv_down = tf->uv[3]; } - + /* Copy the pointers to the face UV's */ BLI_linklist_prepend(&suv->fuv_list, uv_new); } @@ -4285,32 +4287,32 @@ useless: } } /* end uv layer loop */ } /* end uvlay_tot */ - - - + + + // we should have enough info now to slide - len = 0.0f; - + len = 0.0f; + percp = -1; while(draw) { - /* For the % calculation */ - short mval[2]; + /* For the % calculation */ + short mval[2]; float rc[2]; float v2[2], v3[2]; EditVert *centerVert, *upVert, *downVert; - -// XXX getmouseco_areawin(mval); - + +// XXX getmouseco_areawin(mval); + if (!immediate && (mval[0] == mvalo[0] && mval[1] == mvalo[1])) { PIL_sleep_ms(10); } else { char *p = str; int ctrl= 0, shift= 0; // XXX - + mvalo[0] = mval[0]; mvalo[1] = mval[1]; - + tempsv = BLI_ghash_lookup(vertgh,nearest); @@ -4321,31 +4323,31 @@ useless: // view3d_project_float(curarea, upVert->co, v2, projectMat); // view3d_project_float(curarea, downVert->co, v3, projectMat); - /* Determine the % on which the loop should be cut */ + /* Determine the % on which the loop should be cut */ - rc[0]= v3[0]-v2[0]; - rc[1]= v3[1]-v2[1]; + rc[0]= v3[0]-v2[0]; + rc[1]= v3[1]-v2[1]; len= rc[0]*rc[0]+ rc[1]*rc[1]; if (len==0) {len = 0.0001;} if (shift) { wasshift = 0; - labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len; + labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len; } else { if (wasshift==0) { wasshift = 1; shiftlabda = labda; - } - labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda; + } + labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda; } - - if(labda<=0.0) labda=0.0; - else if(labda>=1.0)labda=1.0; - perc=((1-labda)*2)-1; - + if(labda<=0.0) labda=0.0; + else if(labda>=1.0)labda=1.0; + + perc=((1-labda)*2)-1; + if(shift == 0 && ctrl==0) { perc *= 100; perc = floor(perc); @@ -4353,20 +4355,20 @@ useless: } else if (ctrl) { perc *= 10; perc = floor(perc); - perc /= 10; - } - + perc /= 10; + } + if(prop == 0) { len = VecLenf(upVert->co,downVert->co)*((perc+1)/2); if(flip == 1) { len = VecLenf(upVert->co,downVert->co) - len; - } + } } - + if (0) // XXX hasNumInput(&num)) { // XXX applyNumInput(&num, &perc); - + if (prop) { perc = MIN2(perc, 1); @@ -4381,19 +4383,19 @@ useless: //Adjust Edgeloop if(immediate) { - perc = imperc; + perc = imperc; } percp = perc; if(prop) { - look = vertlist; - while(look) { + look = vertlist; + while(look) { EditVert *tempev; ev = look->link; tempsv = BLI_ghash_lookup(vertgh,ev); - + tempev = editedge_getOtherVert((perc>=0)?tempsv->up:tempsv->down, ev); VecLerpf(ev->co, tempsv->origvert.co, tempev->co, fabs(perc)); - + if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { for (uvlay_idx=0; uvlay_idxnext; + + look = look->next; } } else { - //Non prop code - look = vertlist; - while(look) { + //Non prop code + look = vertlist; + while(look) { float newlen; ev = look->link; tempsv = BLI_ghash_lookup(vertgh,ev); @@ -4422,7 +4424,7 @@ useless: if(newlen > 1.0) {newlen = 1.0;} if(newlen < 0.0) {newlen = 0.0;} if(flip == 0) { - VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); + VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen)); if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idxco, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); - + VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen)); + if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) { /* dont do anything if no UVs */ for (uvlay_idx=0; uvlay_idxnext; + look = look->next; } } - + // Highlight the Control Edges -// scrarea_do_windraw(curarea); -// persp(PERSP_VIEW); -// glPushMatrix(); +// scrarea_do_windraw(curarea); +// persp(PERSP_VIEW); +// glPushMatrix(); // mymultmatrix(obedit->obmat); - glColor3ub(0, 255, 0); + glColor3ub(0, 255, 0); glBegin(GL_LINES); glVertex3fv(upVert->co); glVertex3fv(downVert->co); - glEnd(); - + glEnd(); + if(prop == 0) { // draw start edge for non-prop glPointSize(5); @@ -4480,24 +4482,24 @@ useless: if(flip) { glVertex3fv(upVert->co); } else { - glVertex3fv(downVert->co); + glVertex3fv(downVert->co); } - glEnd(); + glEnd(); } - - - glPopMatrix(); + + + glPopMatrix(); if(prop) { p += sprintf(str, "(P)ercentage: "); } else { p += sprintf(str, "Non (P)rop Length: "); } - + if (0) // XXX hasNumInput(&num)) { char num_str[20]; - + // XX outputNumInput(&num, num_str); p += sprintf(p, "%s", num_str); } @@ -4512,20 +4514,20 @@ useless: p += sprintf(p, "%f", len); } } - - + + if (prop == 0) { p += sprintf(p, ", Press (F) to flip control side"); } // headerprint(str); -// screen_swapbuffers(); +// screen_swapbuffers(); } if(!immediate) { while(qtest()) { - short val=0; - event= extern_qread(&val); // extern_qread stores important events for the mainloop to handle - + short val=0; + event= extern_qread(&val); // extern_qread stores important events for the mainloop to handle + /* val==0 on key-release event */ if (val) { if(ELEM(event, ESCKEY, RIGHTMOUSE)) { @@ -4537,7 +4539,7 @@ useless: } else if(ELEM3(event, PADENTER, LEFTMOUSE, RETKEY)) { draw = 0; // End looping now } else if(event==MIDDLEMOUSE) { - perc = 0; + perc = 0; immediate = 1; } else if(event==PKEY) { // XXX initNumInput(&num); /* reset num input */ @@ -4548,61 +4550,61 @@ useless: else { prop = 1; } - mvalo[0] = -1; + mvalo[0] = -1; } else if(event==FKEY) { - (flip == 1) ? (flip = 0):(flip = 1); - mvalo[0] = -1; + (flip == 1) ? (flip = 0):(flip = 1); + mvalo[0] = -1; } else if(ELEM(event, RIGHTARROWKEY, WHEELUPMOUSE)) { // Scroll through Control Edges - look = vertlist; - while(look) { + look = vertlist; + while(look) { if(nearest == (EditVert*)look->link) { if(look->next == NULL) { - nearest = (EditVert*)vertlist->link; + nearest = (EditVert*)vertlist->link; } else { nearest = (EditVert*)look->next->link; - } + } mvalo[0] = -1; - break; + break; } - look = look->next; - } + look = look->next; + } } else if(ELEM(event, LEFTARROWKEY, WHEELDOWNMOUSE)) { // Scroll through Control Edges - look = vertlist; - while(look) { + look = vertlist; + while(look) { if(look->next) { if(look->next->link == nearest) { nearest = (EditVert*)look->link; mvalo[0] = -1; break; - } + } } else { if((EditVert*)vertlist->link == nearest) { nearest = look->link; mvalo[0] = -1; - break; - } - } - look = look->next; - } + break; + } + } + look = look->next; + } } - + // XXX if (handleNumInput(&num, event)) { mvalo[0] = -1; /* NEED A BETTER WAY TO TRIGGER REDRAW */ } } - - } + + } } else { draw = 0; } -// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); +// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); } - - + + if(me->drawflag & ME_DRAW_EDGELEN) { look = vertlist; - while(look) { + while(look) { tempsv = BLI_ghash_lookup(vertgh,(EditVert*)look->link); if(tempsv != NULL) { tempsv->up->f &= !SELECT; @@ -4611,26 +4613,26 @@ useless: look = look->next; } } - + // force_draw(0); - + if(!immediate) EM_automerge(0); // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); -// scrarea_queue_winredraw(curarea); - - //BLI_ghash_free(edgesgh, freeGHash, NULL); +// scrarea_queue_winredraw(curarea); + + //BLI_ghash_free(edgesgh, freeGHash, NULL); BLI_ghash_free(vertgh, NULL, (GHashValFreeFP)MEM_freeN); - BLI_linklist_free(vertlist,NULL); - BLI_linklist_free(edgelist,NULL); - + BLI_linklist_free(vertlist,NULL); + BLI_linklist_free(edgelist,NULL); + if (uvlay_tot) { // XXX && (scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) { for (uvlay_idx=0; uvlay_idx= slideuvs) { if (suv->fuv_list) { @@ -4648,21 +4650,21 @@ useless: #endif // END OF XXX } -int EdgeLoopDelete(EditMesh *em, wmOperator *op) +int EdgeLoopDelete(EditMesh *em, wmOperator *op) { - + /* temporal flag setting so we keep UVs when deleting edge loops, * this is a bit of a hack but it works how you would want in almost all cases */ - // short uvcalc_flag_orig = 0; // XXX scene->toolsettings->uvcalc_flag; + // short uvcalc_flag_orig = 0; // XXX scene->toolsettings->uvcalc_flag; // scene->toolsettings->uvcalc_flag |= UVCALC_TRANSFORM_CORRECT; - + if(!EdgeSlide(em, op, 1, 1)) { return 0; } - + /* restore uvcalc flag */ // scene->toolsettings->uvcalc_flag = uvcalc_flag_orig; - + EM_select_more(em); removedoublesflag(em, 1,0, 0.001); EM_select_flush(em); @@ -4683,12 +4685,12 @@ void mesh_set_face_flags(EditMesh *em, short mode) m_billboard=0, m_shadow=0, m_text=0, m_sort=0; short flag = 0, change = 0; - + // XXX if (!EM_texFaceCheck()) { // error("not a mesh with uv/image layers"); // return; // } - + add_numbut(0, TOG|SHO, "Texture", 0, 0, &m_tex, NULL); add_numbut(2, TOG|SHO, "Light", 0, 0, &m_light, NULL); add_numbut(3, TOG|SHO, "Invisible", 0, 0, &m_invis, NULL); @@ -4701,15 +4703,15 @@ void mesh_set_face_flags(EditMesh *em, short mode) add_numbut(10, TOG|SHO, "Shadow", 0, 0, &m_shadow, NULL); add_numbut(11, TOG|SHO, "Text", 0, 0, &m_text, NULL); add_numbut(12, TOG|SHO, "Sort", 0, 0, &m_sort, NULL); - + if (!do_clever_numbuts((mode ? "Set Flags" : "Clear Flags"), 13, REDRAW)) return; - + /* these 2 cant both be on */ if (mode) /* are we seeting*/ if (m_halo) m_billboard = 0; - + if (m_tex) flag |= TF_TEX; if (m_shared) flag |= TF_SHAREDCOL; if (m_light) flag |= TF_LIGHT; @@ -4722,10 +4724,10 @@ void mesh_set_face_flags(EditMesh *em, short mode) if (m_shadow) flag |= TF_SHADOW; if (m_text) flag |= TF_BMFONT; if (m_sort) flag |= TF_ALPHASORT; - + if (flag==0) return; - + efa= em->faces.first; while(efa) { if(efa->f & SELECT) { @@ -4736,7 +4738,7 @@ void mesh_set_face_flags(EditMesh *em, short mode) } efa= efa->next; } - + } #endif @@ -4746,12 +4748,12 @@ void mesh_set_face_flags(EditMesh *em, short mode) static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, short *mval) { float vec1[3], vec2[3], mvalf[2]; - + view3d_project_float(ar, co1, vec1, mat); view3d_project_float(ar, co2, vec2, mat); mvalf[0]= (float)mval[0]; mvalf[1]= (float)mval[1]; - + return PdistVL2Dfl(mvalf, vec1, vec2); } @@ -4763,16 +4765,16 @@ static void mesh_rip_setface(EditMesh *em, EditFace *sefa) if(sefa->v2->tmp.v) sefa->v2= sefa->v2->tmp.v; if(sefa->v3->tmp.v) sefa->v3= sefa->v3->tmp.v; if(sefa->v4 && sefa->v4->tmp.v) sefa->v4= sefa->v4->tmp.v; - + sefa->e1= addedgelist(em, sefa->v1, sefa->v2, sefa->e1); sefa->e2= addedgelist(em, sefa->v2, sefa->v3, sefa->e2); if(sefa->v4) { sefa->e3= addedgelist(em, sefa->v3, sefa->v4, sefa->e3); sefa->e4= addedgelist(em, sefa->v4, sefa->v1, sefa->e4); } - else + else sefa->e3= addedgelist(em, sefa->v3, sefa->v1, sefa->e3); - + } /* based on mouse cursor position, it defines how is being ripped */ @@ -4787,32 +4789,26 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) EditEdge *eed, *seed= NULL; EditFace *efa, *sefa= NULL; float projectMat[4][4], vec[3], dist, mindist; - short doit= 1, *mval= event->mval; // XXX ,propmode,prop; - - -// XXX propmode = scene->prop_mode; -// scene->prop_mode = 0; -// prop = scene->proportional; -// scene->proportional = 0; - + short doit= 1, *mval= event->mval; + /* select flush... vertices are important */ EM_selectmode_set(em); - + view3d_get_object_project_mat(rv3d, obedit, projectMat); /* find best face, exclude triangles and break on face select or faces with 2 edges select */ mindist= 1000000.0f; for(efa= em->faces.first; efa; efa=efa->next) { - if( efa->f & 1) + if( efa->f & 1) break; if(efa->v4 && faceselectedOR(efa, SELECT) ) { int totsel=0; - + if(efa->e1->f & SELECT) totsel++; if(efa->e2->f & SELECT) totsel++; if(efa->e3->f & SELECT) totsel++; if(efa->e4->f & SELECT) totsel++; - + if(totsel>1) break; view3d_project_float(ar, efa->cent, vec, projectMat); @@ -4823,7 +4819,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } } - + if(efa) { BKE_report(op->reports, RPT_ERROR, "Can't perform ripping with faces selected this way"); BKE_mesh_end_editmesh(obedit->data, em); @@ -4834,7 +4830,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + /* duplicate vertices, new vertices get selected */ for(eve = em->verts.last; eve; eve= eve->prev) { @@ -4845,20 +4841,20 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) eve->tmp.v->f |= SELECT; } } - + /* find the best candidate edge */ /* or one of sefa edges is selected... */ if(sefa->e1->f & SELECT) seed= sefa->e2; if(sefa->e2->f & SELECT) seed= sefa->e1; if(sefa->e3->f & SELECT) seed= sefa->e2; if(sefa->e4 && sefa->e4->f & SELECT) seed= sefa->e3; - + /* or we do the distance trick */ if(seed==NULL) { mindist= 1000000.0f; if(sefa->e1->v1->tmp.v || sefa->e1->v2->tmp.v) { - dist = mesh_rip_edgedist(ar, projectMat, - sefa->e1->v1->co, + dist = mesh_rip_edgedist(ar, projectMat, + sefa->e1->v1->co, sefa->e1->v2->co, mval); if(diste1; @@ -4867,7 +4863,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } if(sefa->e2->v1->tmp.v || sefa->e2->v2->tmp.v) { dist = mesh_rip_edgedist(ar, projectMat, - sefa->e2->v1->co, + sefa->e2->v1->co, sefa->e2->v2->co, mval); if(diste2; @@ -4875,8 +4871,8 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } if(sefa->e3->v1->tmp.v || sefa->e3->v2->tmp.v) { - dist= mesh_rip_edgedist(ar, projectMat, - sefa->e3->v1->co, + dist= mesh_rip_edgedist(ar, projectMat, + sefa->e3->v1->co, sefa->e3->v2->co, mval); if(diste3; @@ -4884,8 +4880,8 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } if(sefa->e4 && (sefa->e4->v1->tmp.v || sefa->e4->v2->tmp.v)) { - dist= mesh_rip_edgedist(ar, projectMat, - sefa->e4->v1->co, + dist= mesh_rip_edgedist(ar, projectMat, + sefa->e4->v1->co, sefa->e4->v2->co, mval); if(diste4; @@ -4893,13 +4889,13 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) } } } - + if(seed==NULL) { // never happens? BKE_report(op->reports, RPT_ERROR, "No proper edge found to start"); BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + faceloop_select(em, seed, 2); // tmp abuse for finding all edges that need duplicated, returns OK faces with f1 /* duplicate edges in the loop, with at least 1 vertex selected, needed for selection flip */ @@ -4907,8 +4903,8 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) eed->tmp.v = NULL; if((eed->v1->tmp.v) || (eed->v2->tmp.v)) { EditEdge *newed; - - newed= addedgelist(em, eed->v1->tmp.v?eed->v1->tmp.v:eed->v1, + + newed= addedgelist(em, eed->v1->tmp.v?eed->v1->tmp.v:eed->v1, eed->v2->tmp.v?eed->v2->tmp.v:eed->v2, eed); if(eed->f & SELECT) { EM_select_edge(eed, 0); @@ -4924,16 +4920,16 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) /* put new vertices & edges && flag in best face */ mesh_rip_setface(em, sefa); - + /* starting with neighbours of best face, we loop over the seam */ sefa->f1= 2; doit= 1; while(doit) { doit= 0; - + for(efa= em->faces.first; efa; efa=efa->next) { /* new vert in face */ - if (efa->v1->tmp.v || efa->v2->tmp.v || + if (efa->v1->tmp.v || efa->v2->tmp.v || efa->v3->tmp.v || (efa->v4 && efa->v4->tmp.v)) { /* face is tagged with loop */ if(efa->f1==1) { @@ -4942,9 +4938,9 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) doit= 1; } } - } + } } - + /* remove loose edges, that were part of a ripped face */ for(eve = em->verts.first; eve; eve= eve->next) eve->f1= 0; for(eed = em->edges.last; eed; eed= eed->prev) eed->f1= 0; @@ -4954,11 +4950,11 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) efa->e3->f1= 1; if(efa->e4) efa->e4->f1= 1; } - + for(eed = em->edges.last; eed; eed= seed) { seed= eed->prev; if(eed->f1==0) { - if(eed->v1->tmp.v || eed->v2->tmp.v || + if(eed->v1->tmp.v || eed->v2->tmp.v || (eed->v1->f & SELECT) || (eed->v2->f & SELECT)) { remedge(em, eed); free_editedge(em, eed); @@ -4970,7 +4966,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) eed->v2->f1= 1; } } - + /* and remove loose selected vertices, that got duplicated accidentally */ for(eve = em->verts.first; eve; eve= nextve) { nextve= eve->next; @@ -4979,17 +4975,15 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) free_editvert(em, eve); } } - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); BKE_mesh_end_editmesh(obedit->data, em); - RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); - -// scene->prop_mode = propmode; -// XXX scene->proportional = prop; + RNA_enum_set(op->ptr, "proportional", 0); + RNA_boolean_set(op->ptr, "mirror", 0); + WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -4999,16 +4993,17 @@ void MESH_OT_rip(wmOperatorType *ot) /* identifiers */ ot->name= "Rip"; ot->idname= "MESH_OT_rip"; - + /* api callbacks */ ot->invoke= mesh_rip_invoke; ot->poll= EM_view3d_poll; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* to give to transform */ - RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); + Properties_Proportional(ot); + RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); } @@ -5021,39 +5016,39 @@ void shape_propagate(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op) Key* ky = NULL; KeyBlock* kb = NULL; Base* base=NULL; - - + + if(me->key){ ky = me->key; } else { - BKE_report(op->reports, RPT_ERROR, "Object Has No Key"); + BKE_report(op->reports, RPT_ERROR, "Object Has No Key"); return; - } + } if(ky->block.first){ for(ev = em->verts.first; ev ; ev = ev->next){ if(ev->f & SELECT){ for(kb=ky->block.first;kb;kb = kb->next){ - float *data; - data = kb->data; - VECCOPY(data+(ev->keyindex*3),ev->co); + float *data; + data = kb->data; + VECCOPY(data+(ev->keyindex*3),ev->co); } - } - } + } + } } else { - BKE_report(op->reports, RPT_ERROR, "Object Has No Blendshapes"); - return; + BKE_report(op->reports, RPT_ERROR, "Object Has No Blendshapes"); + return; } - + //TAG Mesh Objects that share this data for(base = scene->base.first; base; base = base->next){ if(base->object && base->object->data == me){ base->object->recalc = OB_RECALC_DATA; } - } + } DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); - return; + return; } void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock) @@ -5063,10 +5058,10 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock float perc = 0; char str[64]; float *data, *odata; - + data = fromBlock->data; odata = thisBlock->data; - + // XXX getmouseco_areawin(mval); curval[0] = mval[0] + 1; curval[1] = mval[1] + 1; @@ -5075,55 +5070,55 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock // XXX getmouseco_areawin(mval); if (mval[0] != curval[0] || mval[1] != curval[1]) { - + if(mval[0] > curval[0]) perc += 0.1; else if(mval[0] < curval[0]) perc -= 0.1; - + if(perc < 0) perc = 0; if(perc > 1) perc = 1; - + curval[0] = mval[0]; curval[1] = mval[1]; if(fullcopy == 1){ - perc = 1; + perc = 1; } for(ev = em->verts.first; ev ; ev = ev->next){ if(ev->f & SELECT){ VecLerpf(ev->co,odata+(ev->keyindex*3),data+(ev->keyindex*3),perc); - } - } + } + } sprintf(str,"Blending at %d%c MMB to Copy at 100%c",(int)(perc*100),'%','%'); // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); // headerprint(str); -// force_draw(0); +// force_draw(0); if(fullcopy == 1){ - break; + break; } } else { - PIL_sleep_ms(10); + PIL_sleep_ms(10); } while(qtest()) { - short val=0; - event= extern_qread(&val); + short val=0; + event= extern_qread(&val); if(val){ if(ELEM3(event, PADENTER, LEFTMOUSE, RETKEY)){ finished = 1; } else if (event == MIDDLEMOUSE){ - fullcopy = 1; + fullcopy = 1; } else if (ELEM3(event,ESCKEY,RIGHTMOUSE,RIGHTMOUSE)){ canceled = 1; finished = 1; } - } + } } } if(!canceled); @@ -5131,7 +5126,7 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock for(ev = em->verts.first; ev ; ev = ev->next){ if(ev->f & SELECT){ VECCOPY(ev->co, odata+(ev->keyindex*3)); - } + } } return; } @@ -5143,63 +5138,63 @@ void shape_copy_select_from(Object *obedit, EditMesh *em, wmOperator *op) Mesh* me = (Mesh*)obedit->data; EditVert *ev = NULL; int totverts = 0,curshape = obedit->shapenr; - + Key* ky = NULL; KeyBlock *kb = NULL,*thisBlock = NULL; int maxlen=32, nr=0, a=0; char *menu; - + if(me->key){ ky = me->key; } else { - BKE_report(op->reports, RPT_ERROR, "Object Has No Key"); + BKE_report(op->reports, RPT_ERROR, "Object Has No Key"); return; } - + if(ky->block.first){ for(kb=ky->block.first;kb;kb = kb->next){ maxlen += 40; // Size of a block name if(a == curshape-1){ - thisBlock = kb; + thisBlock = kb; } - + a++; } a=0; menu = MEM_callocN(maxlen, "Copy Shape Menu Text"); strcpy(menu, "Copy Vert Positions from Shape %t|"); for(kb=ky->block.first;kb;kb = kb->next){ - if(a != curshape-1){ + if(a != curshape-1){ sprintf(menu,"%s %s %cx%d|",menu,kb->name,'%',a); } a++; } // XXX nr = pupmenu_col(menu, 20); - MEM_freeN(menu); + MEM_freeN(menu); } else { - BKE_report(op->reports, RPT_ERROR, "Object Has No Blendshapes"); - return; + BKE_report(op->reports, RPT_ERROR, "Object Has No Blendshapes"); + return; } - + a = 0; - + for(kb=ky->block.first;kb;kb = kb->next){ if(a == nr){ - + for(ev = em->verts.first;ev;ev = ev->next){ totverts++; } - + if(me->totvert != totverts){ BKE_report(op->reports, RPT_ERROR, "Shape Has had Verts Added/Removed, please cycle editmode before copying"); - return; + return; } - shape_copy_from_lerp(em, thisBlock,kb); - + shape_copy_from_lerp(em, thisBlock,kb); + return; } a++; - } + } return; } @@ -5228,17 +5223,17 @@ static void build_edgecollection(EditMesh *em, ListBase *allcollections) EditEdge *eed; Collection *edgecollection, *newcollection; CollectedEdge *newedge; - + int currtag = 1; short ebalanced = 0; short collectionfound = 0; - - for (eed=em->edges.first; eed; eed = eed->next){ + + for (eed=em->edges.first; eed; eed = eed->next){ eed->tmp.l = 0; eed->v1->tmp.l = 0; eed->v2->tmp.l = 0; } - + /*1st pass*/ for(eed=em->edges.first; eed; eed=eed->next){ if(eed->f&SELECT){ @@ -5247,26 +5242,26 @@ static void build_edgecollection(EditMesh *em, ListBase *allcollections) currtag +=1; } } - + /*2nd pass - Brute force. Loop through selected faces until there are no 'unbalanced' edges left (those with both vertices 'tmp.l' tag matching */ while(ebalanced == 0){ ebalanced = 1; for(eed=em->edges.first; eed; eed = eed->next){ if(eed->f&SELECT){ if(eed->v1->tmp.l != eed->v2->tmp.l) /*unbalanced*/{ - if(eed->v1->tmp.l > eed->v2->tmp.l && eed->v2->tmp.l !=0) eed->v1->tmp.l = eed->v2->tmp.l; - else if(eed->v1 != 0) eed->v2->tmp.l = eed->v1->tmp.l; + if(eed->v1->tmp.l > eed->v2->tmp.l && eed->v2->tmp.l !=0) eed->v1->tmp.l = eed->v2->tmp.l; + else if(eed->v1 != 0) eed->v2->tmp.l = eed->v1->tmp.l; ebalanced = 0; } } } } - + /*3rd pass, set all the edge flags (unnessecary?)*/ for(eed=em->edges.first; eed; eed = eed->next){ if(eed->f&SELECT) eed->tmp.l = eed->v1->tmp.l; } - + for(eed=em->edges.first; eed; eed=eed->next){ if(eed->f&SELECT){ if(allcollections->first){ @@ -5286,28 +5281,28 @@ static void build_edgecollection(EditMesh *em, ListBase *allcollections) newcollection->index = eed->tmp.l; newcollection->collectionbase.first = 0; newcollection->collectionbase.last = 0; - + newedge = MEM_mallocN(sizeof(CollectedEdge), "collected edge"); newedge->eed = eed; - + BLI_addtail(&(newcollection->collectionbase), newedge); BLI_addtail(allcollections, newcollection); } } - + } } static void freecollections(ListBase *allcollections) { struct Collection *curcollection; - + for(curcollection = allcollections->first; curcollection; curcollection = curcollection->next) BLI_freelistN(&(curcollection->collectionbase)); BLI_freelistN(allcollections); } -/*Begin UV Edge Collapse Code +/*Begin UV Edge Collapse Code Like Edge subdivide, Edge Collapse should handle UV's intelligently, but since UV's are a per-face attribute, normal edge collapse will fail in areas such as the boundries of 'UV islands'. So for each edge collection we need to build a set of 'welded' UV vertices and edges for it. The welded UV edges can then be sorted and collapsed. @@ -5337,7 +5332,7 @@ typedef struct wUVEdge{ typedef struct wUVEdgeCollect{ /*used for grouping*/ struct wUVEdgeCollect *next, *prev; wUVEdge *uved; - int id; + int id; } wUVEdgeCollect; static void append_weldedUV(EditMesh *em, EditFace *efa, EditVert *eve, int tfindex, ListBase *uvverts) @@ -5346,9 +5341,9 @@ static void append_weldedUV(EditMesh *em, EditFace *efa, EditVert *eve, int tfin wUVNode *newnode; int found; MTFace *tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); - + found = 0; - + for(curwvert=uvverts->first; curwvert; curwvert=curwvert->next){ if(curwvert->eve == eve && curwvert->u == tf->uv[tfindex][0] && curwvert->v == tf->uv[tfindex][1]){ newnode = MEM_callocN(sizeof(wUVNode), "Welded UV Vert Node"); @@ -5359,20 +5354,20 @@ static void append_weldedUV(EditMesh *em, EditFace *efa, EditVert *eve, int tfin break; } } - + if(!found){ newnode = MEM_callocN(sizeof(wUVNode), "Welded UV Vert Node"); newnode->u = &(tf->uv[tfindex][0]); newnode->v = &(tf->uv[tfindex][1]); - + newwvert = MEM_callocN(sizeof(wUV), "Welded UV Vert"); newwvert->u = *(newnode->u); newwvert->v = *(newnode->v); newwvert->eve = eve; - + BLI_addtail(&(newwvert->nodes), newnode); BLI_addtail(uvverts, newwvert); - + } } @@ -5392,14 +5387,14 @@ static void append_weldedUVEdge(EditMesh *em, EditFace *efa, EditEdge *eed, List wUVEdge *curwedge, *newwedge; int v1tfindex, v2tfindex, found; MTFace *tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); - + found = 0; - + if(eed->v1 == efa->v1) v1tfindex = 0; else if(eed->v1 == efa->v2) v1tfindex = 1; else if(eed->v1 == efa->v3) v1tfindex = 2; else /* if(eed->v1 == efa->v4) */ v1tfindex = 3; - + if(eed->v2 == efa->v1) v2tfindex = 0; else if(eed->v2 == efa->v2) v2tfindex = 1; else if(eed->v2 == efa->v3) v2tfindex = 2; @@ -5411,7 +5406,7 @@ static void append_weldedUVEdge(EditMesh *em, EditFace *efa, EditEdge *eed, List break; //do nothing, we don't need another welded uv edge } } - + if(!found){ newwedge = MEM_callocN(sizeof(wUVEdge), "Welded UV Edge"); newwedge->v1uv[0] = tf->uv[v1tfindex][0]; @@ -5419,7 +5414,7 @@ static void append_weldedUVEdge(EditMesh *em, EditFace *efa, EditEdge *eed, List newwedge->v2uv[0] = tf->uv[v2tfindex][0]; newwedge->v2uv[1] = tf->uv[v2tfindex][1]; newwedge->eed = eed; - + BLI_addtail(uvedges, newwedge); } } @@ -5429,15 +5424,15 @@ static void build_weldedUVEdges(EditMesh *em, ListBase *uvedges, ListBase *uvver wUV *curwvert; wUVEdge *curwedge; EditFace *efa; - + for(efa=em->faces.first; efa; efa=efa->next){ if(efa->e1->f1) append_weldedUVEdge(em, efa, efa->e1, uvedges); if(efa->e2->f1) append_weldedUVEdge(em, efa, efa->e2, uvedges); if(efa->e3->f1) append_weldedUVEdge(em, efa, efa->e3, uvedges); if(efa->e4 && efa->e4->f1) append_weldedUVEdge(em, efa, efa->e4, uvedges); } - - + + //link vertices: for each uvedge, search uvverts to populate v1 and v2 pointers for(curwedge=uvedges->first; curwedge; curwedge=curwedge->next){ for(curwvert=uvverts->first; curwvert; curwvert=curwvert->next){ @@ -5474,20 +5469,20 @@ static void collapse_edgeuvs(EditMesh *em) if (!EM_texFaceCheck(em)) return; - + uvverts.first = uvverts.last = uvedges.first = uvedges.last = allcollections.first = allcollections.last = NULL; - + build_weldedUVs(em, &uvverts); build_weldedUVEdges(em, &uvedges, &uvverts); - + curtag = 0; - + for(curwedge=uvedges.first; curwedge; curwedge=curwedge->next){ curwedge->v1->f = curtag; curwedge->v2->f = curtag; curtag +=1; } - + balanced = 0; while(!balanced){ balanced = 1; @@ -5499,10 +5494,10 @@ static void collapse_edgeuvs(EditMesh *em) } } } - + for(curwedge=uvedges.first; curwedge; curwedge=curwedge->next) curwedge->f = curwedge->v1->f; - - + + for(curwedge=uvedges.first; curwedge; curwedge=curwedge->next){ if(allcollections.first){ for(wuvecollection = allcollections.first; wuvecollection; wuvecollection=wuvecollection->next){ @@ -5513,7 +5508,7 @@ static void collapse_edgeuvs(EditMesh *em) collectionfound = 1; break; } - + else collectionfound = 0; } } @@ -5522,32 +5517,32 @@ static void collapse_edgeuvs(EditMesh *em) newcollection->index = curwedge->f; newcollection->collectionbase.first = 0; newcollection->collectionbase.last = 0; - + newcollectedwuve = MEM_callocN(sizeof(wUVEdgeCollect), "Collected Welded UV Edge"); newcollectedwuve->uved = curwedge; - + BLI_addtail(&(newcollection->collectionbase), newcollectedwuve); BLI_addtail(&allcollections, newcollection); } } - + for(wuvecollection=allcollections.first; wuvecollection; wuvecollection=wuvecollection->next){ - + vcount = avg[0] = avg[1] = 0; - + for(collectedwuve= wuvecollection->collectionbase.first; collectedwuve; collectedwuve = collectedwuve->next){ avg[0] += collectedwuve->uved->v1uv[0]; avg[1] += collectedwuve->uved->v1uv[1]; - + avg[0] += collectedwuve->uved->v2uv[0]; avg[1] += collectedwuve->uved->v2uv[1]; - + vcount +=2; - + } - + avg[0] /= vcount; avg[1] /= vcount; - + for(collectedwuve= wuvecollection->collectionbase.first; collectedwuve; collectedwuve = collectedwuve->next){ for(curwnode=collectedwuve->uved->v1->nodes.first; curwnode; curwnode=curwnode->next){ *(curwnode->u) = avg[0]; @@ -5559,7 +5554,7 @@ static void collapse_edgeuvs(EditMesh *em) } } } - + free_weldedUVs(&uvverts); BLI_freelistN(&uvedges); freecollections(&allcollections); @@ -5576,11 +5571,11 @@ static void collapseuvs(EditMesh *em, EditVert *mergevert) if (!EM_texFaceCheck(em)) return; - + uvcount = 0; uvav[0] = 0; uvav[1] = 0; - + for(efa = em->faces.first; efa; efa=efa->next){ tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); @@ -5590,7 +5585,7 @@ static void collapseuvs(EditMesh *em, EditVert *mergevert) uvcount += 1; } if(efa->v2->f1 && ELEM(mergevert, NULL, efa->v2)){ - uvav[0] += tf->uv[1][0]; + uvav[0] += tf->uv[1][0]; uvav[1] += tf->uv[1][1]; uvcount += 1; } @@ -5605,11 +5600,11 @@ static void collapseuvs(EditMesh *em, EditVert *mergevert) uvcount += 1; } } - + if(uvcount > 0) { - uvav[0] /= uvcount; + uvav[0] /= uvcount; uvav[1] /= uvcount; - + for(efa = em->faces.first; efa; efa=efa->next){ tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); @@ -5618,7 +5613,7 @@ static void collapseuvs(EditMesh *em, EditVert *mergevert) tf->uv[0][1] = uvav[1]; } if(efa->v2->f1){ - tf->uv[1][0] = uvav[0]; + tf->uv[1][0] = uvav[0]; tf->uv[1][1] = uvav[1]; } if(efa->v3->f1){ @@ -5637,49 +5632,49 @@ int collapseEdges(EditMesh *em) { EditVert *eve; EditEdge *eed; - + ListBase allcollections; CollectedEdge *curredge; Collection *edgecollection; - + int totedges, groupcount, mergecount,vcount; float avgcount[3]; - + allcollections.first = 0; allcollections.last = 0; - + mergecount = 0; - + build_edgecollection(em, &allcollections); groupcount = BLI_countlist(&allcollections); - - + + for(edgecollection = allcollections.first; edgecollection; edgecollection = edgecollection->next){ totedges = BLI_countlist(&(edgecollection->collectionbase)); mergecount += totedges; avgcount[0] = 0; avgcount[1] = 0; avgcount[2] = 0; - + vcount = 0; - + for(curredge = edgecollection->collectionbase.first; curredge; curredge = curredge->next){ avgcount[0] += ((EditEdge*)curredge->eed)->v1->co[0]; avgcount[1] += ((EditEdge*)curredge->eed)->v1->co[1]; avgcount[2] += ((EditEdge*)curredge->eed)->v1->co[2]; - + avgcount[0] += ((EditEdge*)curredge->eed)->v2->co[0]; avgcount[1] += ((EditEdge*)curredge->eed)->v2->co[1]; avgcount[2] += ((EditEdge*)curredge->eed)->v2->co[2]; - + vcount +=2; } - + avgcount[0] /= vcount; avgcount[1] /=vcount; avgcount[2] /= vcount; - + for(curredge = edgecollection->collectionbase.first; curredge; curredge = curredge->next){ VECCOPY(((EditEdge*)curredge->eed)->v1->co,avgcount); VECCOPY(((EditEdge*)curredge->eed)->v2->co,avgcount); } - + if (EM_texFaceCheck(em)) { /*uv collapse*/ for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = 0; @@ -5691,7 +5686,7 @@ int collapseEdges(EditMesh *em) } collapse_edgeuvs(em); } - + } freecollections(&allcollections); removedoublesflag(em, 1, 0, MERGELIMIT); @@ -5703,44 +5698,44 @@ int merge_firstlast(EditMesh *em, int first, int uvmerge) { EditVert *eve,*mergevert; EditSelection *ese; - + /* do sanity check in mergemenu in edit.c ?*/ - if(first == 0){ + if(first == 0){ ese = em->selected.last; mergevert= (EditVert*)ese->data; } - else{ + else{ ese = em->selected.first; mergevert = (EditVert*)ese->data; } - + if(mergevert->f&SELECT){ for (eve=em->verts.first; eve; eve=eve->next){ if (eve->f&SELECT) VECCOPY(eve->co,mergevert->co); } } - + if(uvmerge && CustomData_has_layer(&em->fdata, CD_MTFACE)){ - + for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = 0; for(eve=em->verts.first; eve; eve=eve->next){ if(eve->f&SELECT) eve->f1 = 1; } collapseuvs(em, mergevert); } - + return removedoublesflag(em, 1, 0, MERGELIMIT); } int merge_target(EditMesh *em, int target, int uvmerge) { EditVert *eve; - + // XXX not working if(target) snap_sel_to_curs(); else snap_to_center(); - + if(uvmerge && CustomData_has_layer(&em->fdata, CD_MTFACE)){ for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = 0; for(eve=em->verts.first; eve; eve=eve->next){ @@ -5804,19 +5799,19 @@ static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *fre Object *obedit= CTX_data_edit_object(C); if(obedit && obedit->type == OB_MESH) { - EditMesh *em= BKE_mesh_get_editmesh(obedit->data); + EditMesh *em= BKE_mesh_get_editmesh(obedit->data); EnumPropertyItem *item= NULL; int totitem= 0; if(em->selectmode & SCE_SELECT_VERTEX) { - if(em->selected.first && em->selected.last && + if(em->selected.first && em->selected.last && ((EditSelection*)em->selected.first)->type == EDITVERT && ((EditSelection*)em->selected.last)->type == EDITVERT) { RNA_enum_item_add(&item, &totitem, &merge_type_items[0]); RNA_enum_item_add(&item, &totitem, &merge_type_items[1]); } - else if(em->selected.first && ((EditSelection*)em->selected.first)->type == EDITVERT) + else if(em->selected.first && ((EditSelection*)em->selected.first)->type == EDITVERT) RNA_enum_item_add(&item, &totitem, &merge_type_items[1]); - else if(em->selected.last && ((EditSelection*)em->selected.last)->type == EDITVERT) + else if(em->selected.last && ((EditSelection*)em->selected.last)->type == EDITVERT) RNA_enum_item_add(&item, &totitem, &merge_type_items[0]); } @@ -5840,12 +5835,12 @@ void MESH_OT_merge(wmOperatorType *ot) /* identifiers */ ot->name= "Merge"; ot->idname= "MESH_OT_merge"; - + /* api callbacks */ ot->exec= merge_exec; ot->invoke= WM_menu_invoke; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -5887,30 +5882,30 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) short physical; float *cost; Heap *heap; /*binary heap for sorting pointers to PathNodes based upon a 'cost'*/ - + s = t = NULL; - + ese = ((EditSelection*)em->selected.last); if(ese && ese->type == EDITVERT && ese->prev && ese->prev->type == EDITVERT){ physical= pupmenu("Distance Method? %t|Edge Length%x1|Topological%x0"); - + t = (EditVert*)ese->data; s = (EditVert*)ese->prev->data; - + /*need to find out if t is actually reachable by s....*/ - for(eve=em->verts.first; eve; eve=eve->next){ + for(eve=em->verts.first; eve; eve=eve->next){ eve->f1 = 0; } - + s->f1 = 1; - + unbalanced = 1; totnodes = 1; while(unbalanced){ unbalanced = 0; for(eed=em->edges.first; eed; eed=eed->next){ if(!eed->h){ - if(eed->v1->f1 && !eed->v2->f1){ + if(eed->v1->f1 && !eed->v2->f1){ eed->v2->f1 = 1; totnodes++; unbalanced = 1; @@ -5923,7 +5918,7 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) } } } - + if(s->f1 && t->f1){ /* t can be reached by s */ Q = MEM_callocN(sizeof(PathNode)*totnodes, "Path Select Nodes"); totnodes = 0; @@ -5938,12 +5933,12 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) } else eve->tmp.p = NULL; } - + for(eed=em->edges.first; eed; eed=eed->next){ if(!eed->h){ if(eed->v1->f1){ currpn = ((PathNode*)eed->v1->tmp.p); - + newpe = MEM_mallocN(sizeof(PathEdge), "Path Edge"); newpe->v = ((PathNode*)eed->v2->tmp.p)->u; if(physical){ @@ -5953,9 +5948,9 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) newpe->next = 0; newpe->prev = 0; BLI_addtail(&(currpn->edges), newpe); - } + } if(eed->v2->f1){ - currpn = ((PathNode*)eed->v2->tmp.p); + currpn = ((PathNode*)eed->v2->tmp.p); newpe = MEM_mallocN(sizeof(PathEdge), "Path Edge"); newpe->v = ((PathNode*)eed->v1->tmp.p)->u; if(physical){ @@ -5968,28 +5963,28 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) } } } - + heap = BLI_heap_new(); cost = MEM_callocN(sizeof(float)*totnodes, "Path Select Costs"); previous = MEM_callocN(sizeof(int)*totnodes, "PathNode indices"); - + for(v=0; v < totnodes; v++){ cost[v] = 1000000; previous[v] = -1; /*array of indices*/ } - + pnindex = ((PathNode*)s->tmp.p)->u; cost[pnindex] = 0; BLI_heap_insert(heap, 0.0f, SET_INT_IN_POINTER(pnindex)); - + while( !BLI_heap_empty(heap) ){ - + pnindex = GET_INT_FROM_POINTER(BLI_heap_popmin(heap)); currpn = &(Q[pnindex]); - + if(currpn == (PathNode*)t->tmp.p) /*target has been reached....*/ break; - + for(currpe=currpn->edges.first; currpe; currpe=currpe->next){ if(!Q[currpe->v].visited){ if( cost[currpe->v] > (cost[currpn->u ] + currpe->w) ){ @@ -6001,7 +5996,7 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) } } } - + pathvert = ((PathNode*)t->tmp.p)->u; while(pathvert != -1){ for(eve=em->verts.first; eve; eve=eve->next){ @@ -6011,7 +6006,7 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) } pathvert = previous[pathvert]; } - + for(v=0; v < totnodes; v++) BLI_freelistN(&(Q[v].edges)); MEM_freeN(Q); MEM_freeN(cost); @@ -6025,7 +6020,7 @@ int select_vertex_path_exec(bContext *C, wmOperator *op) BKE_report(op->reports, RPT_ERROR, "Path Selection requires that exactly two vertices be selected"); return OPERATOR_CANCELLED; } - + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); BKE_mesh_end_editmesh(obedit->data, em); @@ -6042,12 +6037,12 @@ void MESH_OT_select_vertex_path(wmOperatorType *ot) /* identifiers */ ot->name= "Select Vertex Path"; ot->idname= "MESH_OT_select_vertex_path"; - + /* api callbacks */ ot->exec= select_vertex_path_exec; ot->invoke= WM_menu_invoke; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -6064,9 +6059,9 @@ static int region_to_loop(bContext *C, wmOperator *op) EditEdge *eed; EditFace *efa; int selected= 0; - + for(eed=em->edges.first; eed; eed=eed->next) eed->f1 = 0; - + for(efa=em->faces.first; efa; efa=efa->next){ if(efa->f&SELECT){ efa->e1->f1++; @@ -6081,20 +6076,20 @@ static int region_to_loop(bContext *C, wmOperator *op) if(!selected) return OPERATOR_CANCELLED; - + EM_clear_flag_all(em, SELECT); - + for(eed=em->edges.first; eed; eed=eed->next){ if(eed->f1 == 1) EM_select_edge(eed, 1); } - + em->selectmode = SCE_SELECT_EDGE; EM_selectmode_set(em); - + BKE_mesh_end_editmesh(obedit->data, em); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -6103,11 +6098,11 @@ void MESH_OT_region_to_loop(wmOperatorType *ot) /* identifiers */ ot->name= "Region to Loop"; ot->idname= "MESH_OT_region_to_loop"; - + /* api callbacks */ ot->exec= region_to_loop; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -6117,7 +6112,7 @@ static int validate_loop(EditMesh *em, Collection *edgecollection) EditEdge *eed; EditFace *efa; CollectedEdge *curredge; - + /*1st test*/ for(curredge = (CollectedEdge*)edgecollection->collectionbase.first; curredge; curredge=curredge->next){ curredge->eed->v1->f1 = 0; @@ -6131,7 +6126,7 @@ static int validate_loop(EditMesh *em, Collection *edgecollection) if(curredge->eed->v1->f1 > 2) return(0); else if(curredge->eed->v2->f1 > 2) return(0); } - + /*2nd test*/ for(eed = em->edges.first; eed; eed=eed->next) eed->f1 = 0; for(efa=em->faces.first; efa; efa=efa->next){ @@ -6147,20 +6142,20 @@ static int validate_loop(EditMesh *em, Collection *edgecollection) } static int loop_bisect(EditMesh *em, Collection *edgecollection){ - + EditFace *efa, *sf1, *sf2; EditEdge *eed, *sed; CollectedEdge *curredge; int totsf1, totsf2, unbalanced,balancededges; - + for(eed=em->edges.first; eed; eed=eed->next) eed->f1 = eed->f2 = 0; - for(efa=em->faces.first; efa; efa=efa->next) efa->f1 = 0; - + for(efa=em->faces.first; efa; efa=efa->next) efa->f1 = 0; + for(curredge = (CollectedEdge*)edgecollection->collectionbase.first; curredge; curredge=curredge->next) curredge->eed->f1 = 1; - + sf1 = sf2 = NULL; sed = ((CollectedEdge*)edgecollection->collectionbase.first)->eed; - + for(efa=em->faces.first; efa; efa=efa->next){ if(sf2) break; else if(sf1){ @@ -6170,24 +6165,24 @@ static int loop_bisect(EditMesh *em, Collection *edgecollection){ if(efa->e1 == sed || efa->e2 == sed || efa->e3 == sed || ( (efa->e4) ? efa->e4 == sed : 0) ) sf1 = efa; } } - + if(sf1==NULL || sf2==NULL) return(-1); - + if(!(sf1->e1->f1)) sf1->e1->f2 = 1; if(!(sf1->e2->f1)) sf1->e2->f2 = 1; if(!(sf1->e3->f1)) sf1->e3->f2 = 1; if(sf1->e4 && !(sf1->e4->f1)) sf1->e4->f2 = 1; sf1->f1 = 1; totsf1 = 1; - + if(!(sf2->e1->f1)) sf2->e1->f2 = 2; if(!(sf2->e2->f1)) sf2->e2->f2 = 2; if(!(sf2->e3->f1)) sf2->e3->f2 = 2; if(sf2->e4 && !(sf2->e4->f1)) sf2->e4->f2 = 2; sf2->f1 = 2; totsf2 = 1; - + /*do sf1*/ unbalanced = 1; while(unbalanced){ @@ -6209,7 +6204,7 @@ static int loop_bisect(EditMesh *em, Collection *edgecollection){ } } } - + /*do sf2*/ unbalanced = 1; while(unbalanced){ @@ -6231,7 +6226,7 @@ static int loop_bisect(EditMesh *em, Collection *edgecollection){ } } } - + if(totsf1 < totsf2) return(1); else return(2); } @@ -6246,9 +6241,9 @@ static int loop_to_region(bContext *C, wmOperator *op) ListBase allcollections={NULL,NULL}; Collection *edgecollection; int testflag; - + build_edgecollection(em, &allcollections); - + for(edgecollection = (Collection *)allcollections.first; edgecollection; edgecollection=edgecollection->next){ if(validate_loop(em, edgecollection)){ testflag = loop_bisect(em, edgecollection); @@ -6260,11 +6255,11 @@ static int loop_to_region(bContext *C, wmOperator *op) } } } - + for(efa=em->faces.first; efa; efa=efa->next){ /*fix this*/ if(efa->f&SELECT) EM_select_face(efa,1); } - + freecollections(&allcollections); BKE_mesh_end_editmesh(obedit->data, em); @@ -6278,11 +6273,11 @@ void MESH_OT_loop_to_region(wmOperatorType *ot) /* identifiers */ ot->name= "Loop to Region"; ot->idname= "MESH_OT_loop_to_region"; - + /* api callbacks */ ot->exec= loop_to_region; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -6309,41 +6304,41 @@ static int mesh_rotate_uvs(bContext *C, wmOperator *op) BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + for(efa=em->faces.first; efa; efa=efa->next) { if (efa->f & SELECT) { tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); u1= tf->uv[0][0]; v1= tf->uv[0][1]; - + if (dir == DIRECTION_CCW) { if(efa->v4) { tf->uv[0][0]= tf->uv[3][0]; tf->uv[0][1]= tf->uv[3][1]; - + tf->uv[3][0]= tf->uv[2][0]; tf->uv[3][1]= tf->uv[2][1]; } else { tf->uv[0][0]= tf->uv[2][0]; tf->uv[0][1]= tf->uv[2][1]; } - + tf->uv[2][0]= tf->uv[1][0]; tf->uv[2][1]= tf->uv[1][1]; - + tf->uv[1][0]= u1; tf->uv[1][1]= v1; - } else { + } else { tf->uv[0][0]= tf->uv[1][0]; tf->uv[0][1]= tf->uv[1][1]; - + tf->uv[1][0]= tf->uv[2][0]; tf->uv[1][1]= tf->uv[2][1]; - + if(efa->v4) { tf->uv[2][0]= tf->uv[3][0]; tf->uv[2][1]= tf->uv[3][1]; - + tf->uv[3][0]= u1; tf->uv[3][1]= v1; } @@ -6355,7 +6350,7 @@ static int mesh_rotate_uvs(bContext *C, wmOperator *op) change = 1; } } - + BKE_mesh_end_editmesh(obedit->data, em); if(!change) @@ -6363,7 +6358,7 @@ static int mesh_rotate_uvs(bContext *C, wmOperator *op) DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -6378,13 +6373,13 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) MTFace *tf; float u1, v1; int axis= RNA_enum_get(op->ptr, "axis"); - + if (!EM_texFaceCheck(em)) { BKE_report(op->reports, RPT_ERROR, "Mesh has no uv/image layers."); BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + for(efa=em->faces.first; efa; efa=efa->next) { if (efa->f & SELECT) { tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); @@ -6392,10 +6387,10 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) u1= tf->uv[1][0]; v1= tf->uv[1][1]; if(efa->v4) { - + tf->uv[1][0]= tf->uv[2][0]; tf->uv[1][1]= tf->uv[2][1]; - + tf->uv[2][0]= u1; tf->uv[2][1]= v1; @@ -6404,7 +6399,7 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) tf->uv[3][0]= tf->uv[0][0]; tf->uv[3][1]= tf->uv[0][1]; - + tf->uv[0][0]= u1; tf->uv[0][1]= v1; } @@ -6414,15 +6409,15 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) tf->uv[2][0]= u1; tf->uv[2][1]= v1; } - + } else { u1= tf->uv[0][0]; v1= tf->uv[0][1]; if(efa->v4) { - + tf->uv[0][0]= tf->uv[1][0]; tf->uv[0][1]= tf->uv[1][1]; - + tf->uv[1][0]= u1; tf->uv[1][1]= v1; @@ -6431,7 +6426,7 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) tf->uv[3][0]= tf->uv[2][0]; tf->uv[3][1]= tf->uv[2][1]; - + tf->uv[2][0]= u1; tf->uv[2][1]= v1; } @@ -6445,7 +6440,7 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op) change = 1; } } - + BKE_mesh_end_editmesh(obedit->data, em); if(!change) @@ -6467,18 +6462,18 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op) short change = 0; MCol tmpcol, *mcol; int dir= RNA_enum_get(op->ptr, "direction"); - + if (!EM_vertColorCheck(em)) { BKE_report(op->reports, RPT_ERROR, "Mesh has no color layers."); BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + for(efa=em->faces.first; efa; efa=efa->next) { if (efa->f & SELECT) { mcol = CustomData_em_get(&em->fdata, efa->data, CD_MCOL); tmpcol= mcol[0]; - + if (dir == DIRECTION_CCW) { if(efa->v4) { mcol[0]= mcol[3]; @@ -6491,7 +6486,7 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op) } else { mcol[0]= mcol[1]; mcol[1]= mcol[2]; - + if(efa->v4) { mcol[2]= mcol[3]; mcol[3]= tmpcol; @@ -6502,7 +6497,7 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op) change = 1; } } - + BKE_mesh_end_editmesh(obedit->data, em); if(!change) @@ -6525,13 +6520,13 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op) short change = 0; MCol tmpcol, *mcol; int axis= RNA_enum_get(op->ptr, "axis"); - + if (!EM_vertColorCheck(em)) { BKE_report(op->reports, RPT_ERROR, "Mesh has no color layers"); BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_CANCELLED; } - + for(efa=em->faces.first; efa; efa=efa->next) { if (efa->f & SELECT) { mcol = CustomData_em_get(&em->fdata, efa->data, CD_MCOL); @@ -6539,7 +6534,7 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op) tmpcol= mcol[1]; mcol[1]= mcol[2]; mcol[2]= tmpcol; - + if(efa->v4) { tmpcol= mcol[0]; mcol[0]= mcol[3]; @@ -6549,7 +6544,7 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op) tmpcol= mcol[0]; mcol[0]= mcol[1]; mcol[1]= tmpcol; - + if(efa->v4) { tmpcol= mcol[2]; mcol[2]= mcol[3]; @@ -6559,7 +6554,7 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op) change = 1; } } - + BKE_mesh_end_editmesh(obedit->data, em); if(!change) @@ -6576,11 +6571,11 @@ void MESH_OT_uvs_rotate(wmOperatorType *ot) /* identifiers */ ot->name= "Rotate UVs"; ot->idname= "MESH_OT_uvs_rotate"; - + /* api callbacks */ ot->exec= mesh_rotate_uvs; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -6593,14 +6588,14 @@ void MESH_OT_uvs_mirror(wmOperatorType *ot) /* identifiers */ ot->name= "Mirror UVs"; ot->idname= "MESH_OT_uvs_mirror"; - + /* api callbacks */ ot->exec= mesh_mirror_uvs; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_enum(ot->srna, "axis", axis_items, DIRECTION_CW, "Axis", "Axis to mirror UVs around."); } @@ -6610,14 +6605,14 @@ void MESH_OT_colors_rotate(wmOperatorType *ot) /* identifiers */ ot->name= "Rotate Colors"; ot->idname= "MESH_OT_colors_rotate"; - + /* api callbacks */ ot->exec= mesh_rotate_colors; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_enum(ot->srna, "direction", direction_items, DIRECTION_CW, "Direction", "Direction to rotate edge around."); } @@ -6627,14 +6622,14 @@ void MESH_OT_colors_mirror(wmOperatorType *ot) /* identifiers */ ot->name= "Mirror Colors"; ot->idname= "MESH_OT_colors_mirror"; - + /* api callbacks */ ot->exec= mesh_mirror_colors; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* props */ RNA_def_enum(ot->srna, "axis", axis_items, DIRECTION_CW, "Axis", "Axis to mirror colors around."); } @@ -6642,7 +6637,7 @@ void MESH_OT_colors_mirror(wmOperatorType *ot) /********************** Subdivide Operator *************************/ static int subdivide_exec(bContext *C, wmOperator *op) -{ +{ Scene *scene = CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); @@ -6660,7 +6655,7 @@ static int subdivide_exec(bContext *C, wmOperator *op) DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -6669,14 +6664,14 @@ void MESH_OT_subdivide(wmOperatorType *ot) /* identifiers */ ot->name= "Subdivide"; ot->idname= "MESH_OT_subdivide"; - + /* api callbacks */ ot->exec= subdivide_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* properties */ RNA_def_int(ot->srna, "number_cuts", 1, 1, 10, "Number of Cuts", "", 1, INT_MAX); RNA_def_float(ot->srna, "fractal", 0.0, 0.0f, FLT_MAX, "Fractal", "Fractal randomness factor.", 0.0f, 1000.0f); @@ -6698,39 +6693,39 @@ static void beauty_fill(EditMesh *em) EVPtr *efaa; float len1, len2, len3, len4, len5, len6, opp1, opp2, fac1, fac2; int totedge, ok, notbeauty=8, onedone, vindex[4]; - + /* - all selected edges with two faces * - find the faces: store them in edges (using datablock) * - per edge: - test convex * - test edge: flip? * - if true: remedge, addedge, all edges at the edge get new face pointers */ - - EM_selectmode_set(em); // makes sure in selectmode 'face' the edges of selected faces are selected too - + + EM_selectmode_set(em); // makes sure in selectmode 'face' the edges of selected faces are selected too + totedge = count_selected_edges(em->edges.first); if(totedge==0) return; - + /* temp block with face pointers */ efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "beautyfill"); - + while (notbeauty) { notbeauty--; - + ok = collect_quadedges(efaar, em->edges.first, em->faces.first); - + /* there we go */ onedone= 0; - + eed= em->edges.first; while(eed) { nexted= eed->next; - + /* f2 is set in collect_quadedges() */ if(eed->f2==2 && eed->h==0) { - + efaa = (EVPtr *) eed->tmp.p; - + /* none of the faces should be treated before, nor be part of fgon */ ok= 1; efa= efaa[0]; @@ -6739,13 +6734,13 @@ static void beauty_fill(EditMesh *em) efa= efaa[1]; if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1) ok= 0; if(efa->fgonf) ok= 0; - + if(ok) { /* test convex */ givequadverts(efaa[0], efaa[1], &v1, &v2, &v3, &v4, vindex); if(v1 && v2 && v3 && v4) { if( convex(v1->co, v2->co, v3->co, v4->co) ) { - + /* test edges */ if( (v1) > (v3) ) { dia1.v1= v3; @@ -6755,7 +6750,7 @@ static void beauty_fill(EditMesh *em) dia1.v1= v1; dia1.v2= v3; } - + if( (v2) > (v4) ) { dia2.v1= v4; dia2.v2= v2; @@ -6764,28 +6759,28 @@ static void beauty_fill(EditMesh *em) dia2.v1= v2; dia2.v2= v4; } - + /* testing rule: * the area divided by the total edge lengths */ - + len1= VecLenf(v1->co, v2->co); len2= VecLenf(v2->co, v3->co); len3= VecLenf(v3->co, v4->co); len4= VecLenf(v4->co, v1->co); len5= VecLenf(v1->co, v3->co); len6= VecLenf(v2->co, v4->co); - + opp1= AreaT3Dfl(v1->co, v2->co, v3->co); opp2= AreaT3Dfl(v1->co, v3->co, v4->co); - + fac1= opp1/(len1+len2+len5) + opp2/(len3+len4+len5); - + opp1= AreaT3Dfl(v2->co, v3->co, v4->co); opp2= AreaT3Dfl(v2->co, v4->co, v1->co); - + fac2= opp1/(len2+len3+len6) + opp2/(len4+len1+len6); - + ok= 0; if(fac1 > fac2) { if(dia2.v1==eed->v1 && dia2.v2==eed->v2) { @@ -6794,16 +6789,16 @@ static void beauty_fill(EditMesh *em) efa->f1= 1; efa= efaa[1]; efa->f1= 1; - + w= EM_face_from_faces(em, efaa[0], efaa[1], vindex[0], vindex[1], 4+vindex[2], -1); w->f |= SELECT; - - + + w= EM_face_from_faces(em, efaa[0], efaa[1], vindex[0], 4+vindex[2], 4+vindex[3], -1); w->f |= SELECT; - + onedone= 1; } } @@ -6814,39 +6809,39 @@ static void beauty_fill(EditMesh *em) efa->f1= 1; efa= efaa[1]; efa->f1= 1; - - + + w= EM_face_from_faces(em, efaa[0], efaa[1], vindex[1], 4+vindex[2], 4+vindex[3], -1); w->f |= SELECT; - - + + w= EM_face_from_faces(em, efaa[0], efaa[1], vindex[0], 4+vindex[1], 4+vindex[3], -1); w->f |= SELECT; - + onedone= 1; } } } } } - + } eed= nexted; } - + free_tagged_edges_faces(em, em->edges.first, em->faces.first); - + if(onedone==0) break; - + EM_selectmode_set(em); // new edges/faces were added } - + MEM_freeN(efaar); - + EM_select_flush(em); - + } /* Got this from scanfill.c. You will need to juggle around the @@ -6857,10 +6852,10 @@ static void fill_mesh(EditMesh *em) EditEdge *eed,*e1,*nexted; EditFace *efa,*nextvl, *efan; short ok; - + if(em==NULL) return; waitcursor(1); - + /* copy all selected vertices */ eve= em->verts.first; while(eve) { @@ -6877,7 +6872,7 @@ static void fill_mesh(EditMesh *em) while(eed) { if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) { e1= BLI_addfilledge(eed->v1->tmp.v, eed->v2->tmp.v); - e1->v1->xs++; + e1->v1->xs++; e1->v2->xs++; } eed= eed->next; @@ -6895,7 +6890,7 @@ static void fill_mesh(EditMesh *em) efa->v3->tmp.v->xs--; if(efa->v4) efa->v4->tmp.v->xs--; ok= 1; - + } efa= nextvl; } @@ -6914,7 +6909,7 @@ static void fill_mesh(EditMesh *em) efa= fillfacebase.first; while(efa) { /* normals default pointing up */ - efan= addfacelist(em, efa->v3->tmp.v, efa->v2->tmp.v, + efan= addfacelist(em, efa->v3->tmp.v, efa->v2->tmp.v, efa->v1->tmp.v, 0, NULL, NULL); if(efan) EM_select_face(efan, 1); efa= efa->next; @@ -6934,16 +6929,16 @@ static int fill_mesh_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + fill_mesh(em); BKE_mesh_end_editmesh(obedit->data, em); DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; - + } void MESH_OT_fill(wmOperatorType *ot) @@ -6951,11 +6946,11 @@ void MESH_OT_fill(wmOperatorType *ot) /* identifiers */ ot->name= "Fill"; ot->idname= "MESH_OT_fill"; - + /* api callbacks */ ot->exec= fill_mesh_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -6965,14 +6960,14 @@ static int beauty_fill_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + beauty_fill(em); - + BKE_mesh_end_editmesh(obedit->data, em); DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -6981,11 +6976,11 @@ void MESH_OT_beauty_fill(wmOperatorType *ot) /* identifiers */ ot->name= "Beauty Fill"; ot->idname= "MESH_OT_beauty_fill"; - + /* api callbacks */ ot->exec= beauty_fill_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -6997,12 +6992,12 @@ static int quads_convert_to_tris_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + convert_to_triface(em,0); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_FINISHED; } @@ -7012,11 +7007,11 @@ void MESH_OT_quads_convert_to_tris(wmOperatorType *ot) /* identifiers */ ot->name= "Quads to Tris"; ot->idname= "MESH_OT_quads_convert_to_tris"; - + /* api callbacks */ ot->exec= quads_convert_to_tris_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -7028,10 +7023,10 @@ static int tris_convert_to_quads_exec(bContext *C, wmOperator *op) EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); join_triangles(em); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_FINISHED; } @@ -7041,11 +7036,11 @@ void MESH_OT_tris_convert_to_quads(wmOperatorType *ot) /* identifiers */ ot->name= "Tris to Quads"; ot->idname= "MESH_OT_tris_convert_to_quads"; - + /* api callbacks */ ot->exec= tris_convert_to_quads_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -7055,12 +7050,12 @@ static int edge_flip_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + edge_flip(em); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + BKE_mesh_end_editmesh(obedit->data, em); return OPERATOR_FINISHED; } @@ -7070,11 +7065,11 @@ void MESH_OT_edge_flip(wmOperatorType *ot) /* identifiers */ ot->name= "Edge Flip"; ot->idname= "MESH_OT_edge_flip"; - + /* api callbacks */ ot->exec= edge_flip_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -7086,7 +7081,7 @@ void mesh_set_smooth_faces(EditMesh *em, short smooth) EditFace *efa; if(em==NULL) return; - + for(efa= em->faces.first; efa; efa=efa->next) { if(efa->f & SELECT) { if(smooth) efa->flag |= ME_SMOOTH; @@ -7100,14 +7095,14 @@ static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + mesh_set_smooth_faces(em, 1); - + BKE_mesh_end_editmesh(obedit->data, em); DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -7116,11 +7111,11 @@ void MESH_OT_faces_shade_smooth(wmOperatorType *ot) /* identifiers */ ot->name= "Shade Smooth"; ot->idname= "MESH_OT_faces_shade_smooth"; - + /* api callbacks */ ot->exec= mesh_faces_shade_smooth_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -7130,12 +7125,12 @@ static int mesh_faces_shade_solid_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + mesh_set_smooth_faces(em, 0); - + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); - + return OPERATOR_FINISHED; } @@ -7144,11 +7139,11 @@ void MESH_OT_faces_shade_solid(wmOperatorType *ot) /* identifiers */ ot->name= "Shade Flat"; ot->idname= "MESH_OT_faces_shade_solid"; - + /* api callbacks */ ot->exec= mesh_faces_shade_solid_exec; ot->poll= ED_operator_editmesh; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 016400e0fa9..888a15e2534 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -123,7 +123,7 @@ void setTransformViewMatrices(TransInfo *t) { if(t->spacetype==SPACE_VIEW3D && t->ar->regiontype == RGN_TYPE_WINDOW) { RegionView3D *rv3d = t->ar->regiondata; - + Mat4CpyMat4(t->viewmat, rv3d->viewmat); Mat4CpyMat4(t->viewinv, rv3d->viewinv); Mat4CpyMat4(t->persmat, rv3d->persmat); @@ -137,7 +137,7 @@ void setTransformViewMatrices(TransInfo *t) Mat4One(t->persinv); t->persp = V3D_ORTHO; } - + calculateCenter2D(t); } @@ -152,12 +152,12 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy) else if(t->spacetype==SPACE_IMAGE) { View2D *v2d = t->view; float divx, divy, aspx, aspy; - + ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); - + divx= v2d->mask.xmax-v2d->mask.xmin; divy= v2d->mask.ymax-v2d->mask.ymin; - + vec[0]= aspx*(v2d->cur.xmax-v2d->cur.xmin)*(dx)/divx; vec[1]= aspy*(v2d->cur.ymax-v2d->cur.ymin)*(dy)/divy; vec[2]= 0.0f; @@ -165,10 +165,10 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy) else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { View2D *v2d = t->view; float divx, divy; - + 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; @@ -176,10 +176,10 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy) else if(t->spacetype==SPACE_NODE) { View2D *v2d = &t->ar->v2d; float divx, divy; - + 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; @@ -205,23 +205,23 @@ void projectIntView(TransInfo *t, float *vec, int *adr) } 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; - + UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1); } else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { int out[2] = {0, 0}; - - UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], out, out+1); + + UI_view2d_view_to_region((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 */ int out[2] = {0, 0}; - + UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], out, out+1); adr[0]= out[0]; adr[1]= out[1]; @@ -236,14 +236,14 @@ void projectFloatView(TransInfo *t, float *vec, float *adr) } else if(t->spacetype==SPACE_IMAGE) { int a[2]; - + projectIntView(t, vec, a); adr[0]= a[0]; adr[1]= a[1]; } else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { int a[2]; - + projectIntView(t, vec, a); adr[0]= a[0]; adr[1]= a[1]; @@ -296,7 +296,7 @@ static void viewRedrawForce(bContext *C, TransInfo *t) { if (t->spacetype == SPACE_VIEW3D) { - /* Do we need more refined tags? */ + /* Do we need more refined tags? */ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); } else if (t->spacetype == SPACE_ACTION) { @@ -334,7 +334,7 @@ static void viewRedrawForce(bContext *C, TransInfo *t) static void viewRedrawPost(TransInfo *t) { ED_area_headerprint(t->sa, NULL); - + #if 0 // TRANSFORM_FIX_ME if(t->spacetype==SPACE_VIEW3D) { allqueue(REDRAWBUTSOBJECT, 0); @@ -365,7 +365,7 @@ void BIF_selectOrientation() { char *str_menu = BIF_menustringTransformOrientation("Orientation"); val= pupmenu(str_menu); MEM_freeN(str_menu); - + if(val >= 0) { G.vd->twmode = val; } @@ -381,18 +381,18 @@ static void view_editmove(unsigned short event) /* Ctrl: Scroll right */ /* Alt-Shift: Rotate up */ /* Alt-Ctrl: Rotate right */ - + /* only work in 3D window for now * In the end, will have to send to event to a 2D window handler instead */ if (Trans.flag & T_2D_EDIT) return; - + switch(event) { case WHEELUPMOUSE: - + if( G.qual & LR_SHIFTKEY ) { - if( G.qual & LR_ALTKEY ) { + if( G.qual & LR_ALTKEY ) { G.qual &= ~LR_SHIFTKEY; persptoetsen(PAD2); G.qual |= LR_SHIFTKEY; @@ -400,23 +400,23 @@ static void view_editmove(unsigned short event) persptoetsen(PAD2); } } else if( G.qual & LR_CTRLKEY ) { - if( G.qual & LR_ALTKEY ) { + if( G.qual & LR_ALTKEY ) { G.qual &= ~LR_CTRLKEY; persptoetsen(PAD4); G.qual |= LR_CTRLKEY; } else { persptoetsen(PAD4); } - } else if(U.uiflag & USER_WHEELZOOMDIR) + } else if(U.uiflag & USER_WHEELZOOMDIR) persptoetsen(PADMINUS); else persptoetsen(PADPLUSKEY); - + refresh = 1; break; case WHEELDOWNMOUSE: if( G.qual & LR_SHIFTKEY ) { - if( G.qual & LR_ALTKEY ) { + if( G.qual & LR_ALTKEY ) { G.qual &= ~LR_SHIFTKEY; persptoetsen(PAD8); G.qual |= LR_SHIFTKEY; @@ -424,18 +424,18 @@ static void view_editmove(unsigned short event) persptoetsen(PAD8); } } else if( G.qual & LR_CTRLKEY ) { - if( G.qual & LR_ALTKEY ) { + if( G.qual & LR_ALTKEY ) { G.qual &= ~LR_CTRLKEY; persptoetsen(PAD6); G.qual |= LR_CTRLKEY; } else { persptoetsen(PAD6); } - } else if(U.uiflag & USER_WHEELZOOMDIR) + } else if(U.uiflag & USER_WHEELZOOMDIR) persptoetsen(PADPLUSKEY); else persptoetsen(PADMINUS); - + refresh = 1; break; } @@ -500,19 +500,19 @@ void transformEvent(TransInfo *t, wmEvent *event) { float mati[3][3] = {{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}}; char cmode = constraintModeToChar(t); - + t->redraw |= handleMouseInput(t, &t->mouse, event); if (event->type == MOUSEMOVE) { t->mval[0] = event->x - t->ar->winrct.xmin; t->mval[1] = event->y - t->ar->winrct.ymin; - + t->redraw = 1; - + applyMouseInput(t, &t->mouse, t->mval, t->values); } - + if (event->val) { switch (event->type){ /* enforce redraw of transform when modifiers are used */ @@ -521,7 +521,7 @@ void transformEvent(TransInfo *t, wmEvent *event) t->modifiers |= MOD_SNAP_GEARS; t->redraw = 1; break; - + case LEFTSHIFTKEY: case RIGHTSHIFTKEY: t->modifiers |= MOD_CONSTRAINT_PLANE; @@ -532,7 +532,7 @@ void transformEvent(TransInfo *t, wmEvent *event) if ((t->spacetype==SPACE_VIEW3D) && event->alt) { #if 0 // TRANSFORM_FIX_ME short mval[2]; - + getmouseco_sc(mval); BIF_selectOrientation(); calc_manipulator_stats(curarea); @@ -544,7 +544,7 @@ void transformEvent(TransInfo *t, wmEvent *event) t->state = TRANS_CONFIRM; } break; - + case MIDDLEMOUSE: if ((t->flag & T_NO_CONSTRAINT)==0) { /* exception for switching to dolly, or trackball, in camera view */ @@ -577,19 +577,16 @@ void transformEvent(TransInfo *t, wmEvent *event) } break; case ESCKEY: - case RIGHTMOUSE: - printf("cancelled\n"); t->state = TRANS_CANCEL; break; - case LEFTMOUSE: 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); + 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 @@ -598,8 +595,8 @@ void transformEvent(TransInfo *t, wmEvent *event) break; case SKEY: /* only switch when... */ - if( ELEM3(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) { - resetTransRestrictions(t); + 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 @@ -609,9 +606,9 @@ void transformEvent(TransInfo *t, wmEvent *event) case RKEY: /* only switch when... */ if( ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { - - resetTransRestrictions(t); - + + resetTransRestrictions(t); + if (t->mode == TFM_ROTATION) { restoreTransObjects(t); initTrackball(t); @@ -771,10 +768,10 @@ void transformEvent(TransInfo *t, wmEvent *event) // viewmoveNDOF(1); // break; } - + // Numerical input events t->redraw |= handleNumInput(&(t->num), event); - + // NDof input events switch(handleNDofInput(&(t->ndof), event)) { @@ -789,7 +786,7 @@ void transformEvent(TransInfo *t, wmEvent *event) if (t->options & CTX_NDOF) { /* Cancel on pure NDOF transform */ - t->state = TRANS_CANCEL; + t->state = TRANS_CANCEL; } else { @@ -807,16 +804,22 @@ void transformEvent(TransInfo *t, wmEvent *event) case NDOF_REFRESH: t->redraw = 1; break; - + } - + // Snapping events t->redraw |= handleSnapping(t, event); - + //arrows_move_cursor(event->type); } else { switch (event->type){ + case RIGHTMOUSE: + t->state = TRANS_CANCEL; + break; + case LEFTMOUSE: + t->state = TRANS_CONFIRM; + break; case LEFTSHIFTKEY: case RIGHTSHIFTKEY: t->modifiers &= ~MOD_CONSTRAINT_PLANE; @@ -826,7 +829,7 @@ void transformEvent(TransInfo *t, wmEvent *event) case LEFTCTRLKEY: case RIGHTCTRLKEY: t->modifiers &= ~MOD_SNAP_GEARS; - /* no redraw on release modifier keys! this makes sure you can assign the 'grid' still + /* no redraw on release modifier keys! this makes sure you can assign the 'grid' still after releasing modifer key */ //t->redraw = 1; break; @@ -837,15 +840,15 @@ void transformEvent(TransInfo *t, wmEvent *event) t->redraw = 1; } break; - case LEFTMOUSE: - case RIGHTMOUSE: - if(WM_modal_tweak_exit(event, t->event_type)) -// if (t->options & CTX_TWEAK) - t->state = TRANS_CONFIRM; - break; +// case LEFTMOUSE: +// case RIGHTMOUSE: +// if(WM_modal_tweak_exit(event, t->event_type)) +//// if (t->options & CTX_TWEAK) +// t->state = TRANS_CONFIRM; +// break; } } - + // Per transform event, if present if (t->handleEvent) t->redraw |= t->handleEvent(t, event); @@ -859,7 +862,7 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float t->state = TRANS_RUNNING; t->options = CTX_NONE; - + t->mode = TFM_DUMMY; initTransInfo(C, t, NULL, event); // internal data, mouse, vectors @@ -873,10 +876,10 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float } else { success = 1; - + calculateCenter(t); - - // Copy center from constraint center. Transform center can be local + + // Copy center from constraint center. Transform center can be local VECCOPY(vec, t->con.center); } @@ -884,9 +887,9 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */ special_aftertrans_update(t); - + MEM_freeN(t); - + return success; } @@ -905,28 +908,28 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size) length = -length; size = -size; case RIGHT: - glBegin(GL_LINES); - glVertex2s( offset, 0); - glVertex2s( offset + length, 0); - glVertex2s( offset + length, 0); - glVertex2s( offset + length - size, -size); - glVertex2s( offset + length, 0); + glBegin(GL_LINES); + glVertex2s( offset, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length - size, -size); + glVertex2s( offset + length, 0); glVertex2s( offset + length - size, size); - glEnd(); + glEnd(); break; case DOWN: offset = -offset; length = -length; size = -size; case UP: - glBegin(GL_LINES); - glVertex2s( 0, offset); - glVertex2s( 0, offset + length); - glVertex2s( 0, offset + length); - glVertex2s(-size, offset + length - size); - glVertex2s( 0, offset + length); + glBegin(GL_LINES); + glVertex2s( 0, offset); + glVertex2s( 0, offset + length); + glVertex2s( 0, offset + length); + glVertex2s(-size, offset + length - size); + glVertex2s( 0, offset + length); glVertex2s( size, offset + length - size); - glEnd(); + glEnd(); break; } } @@ -938,22 +941,22 @@ static void drawArrowHead(ArrowDirection d, short size) case LEFT: size = -size; case RIGHT: - glBegin(GL_LINES); - glVertex2s( 0, 0); - glVertex2s( -size, -size); - glVertex2s( 0, 0); + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s( -size, -size); + glVertex2s( 0, 0); glVertex2s( -size, size); - glEnd(); + glEnd(); break; case DOWN: size = -size; case UP: - glBegin(GL_LINES); - glVertex2s( 0, 0); - glVertex2s(-size, -size); - glVertex2s( 0, 0); + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s(-size, -size); + glVertex2s( 0, 0); glVertex2s( size, -size); - glEnd(); + glEnd(); break; } } @@ -962,15 +965,15 @@ static void drawArc(float size, float angle_start, float angle_end, int segments { float delta = (angle_end - angle_start) / segments; float angle; - + glBegin(GL_LINE_STRIP); - + 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); - + glEnd(); } @@ -979,7 +982,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; - + VECCOPY(vecrot, t->center); if(t->flag & T_EDIT) { Object *ob= t->obedit; @@ -989,9 +992,9 @@ void drawHelpline(const struct bContext *C, TransInfo *t) Object *ob=t->poseobj; if(ob) Mat4MulVecfl(ob->obmat, vecrot); } - + projectFloatView(t, vecrot, cent); // no overflow in extreme cases - + glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); @@ -1000,16 +1003,16 @@ void drawHelpline(const struct bContext *C, TransInfo *t) glPushMatrix(); ED_region_pixelspace(t->ar); - + switch(t->helpline) { case HLP_SPRING: UI_ThemeColor(TH_WIRE); - + setlinestyle(3); - glBegin(GL_LINE_STRIP); - glVertex2sv(t->mval); - glVertex2fv(cent); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); glEnd(); glTranslatef(t->mval[0], t->mval[1], 0); @@ -1037,7 +1040,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) glTranslatef(t->mval[0], t->mval[1], 0); glLineWidth(3.0); - glBegin(GL_LINES); + glBegin(GL_LINES); drawArrow(UP, 5, 10, 5); drawArrow(DOWN, 5, 10, 5); glLineWidth(1.0); @@ -1050,27 +1053,27 @@ void drawHelpline(const struct bContext *C, TransInfo *t) float delta_angle = MIN2(15 / dist, M_PI/4); float spacing_angle = MIN2(5 / dist, M_PI/12); UI_ThemeColor(TH_WIRE); - + setlinestyle(3); - glBegin(GL_LINE_STRIP); - glVertex2sv(t->mval); - glVertex2fv(cent); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); glEnd(); - + glTranslatef(cent[0], cent[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); - + glPushMatrix(); glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0); glRotatef(180 / M_PI * (angle - delta_angle), 0, 0, 1); - + drawArrowHead(DOWN, 5); - + glPopMatrix(); glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0); @@ -1085,32 +1088,32 @@ void drawHelpline(const struct bContext *C, TransInfo *t) { char col[3], col2[3]; UI_GetThemeColor3ubv(TH_GRID, col); - + glTranslatef(t->mval[0], t->mval[1], 0); - + glLineWidth(3.0); - + UI_make_axis_color(col, col2, 'x'); glColor3ubv((GLubyte *)col2); - + drawArrow(RIGHT, 5, 10, 5); drawArrow(LEFT, 5, 10, 5); - + UI_make_axis_color(col, col2, 'y'); glColor3ubv((GLubyte *)col2); - + drawArrow(UP, 5, 10, 5); drawArrow(DOWN, 5, 10, 5); glLineWidth(1.0); break; } } - + glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); - + glEnable(GL_DEPTH_TEST); } } @@ -1118,7 +1121,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg) { TransInfo *t = arg; - + drawConstraint(C, t); drawPropCircle(C, t); drawSnapping(C, t); @@ -1164,7 +1167,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) { RNA_boolean_set(op->ptr, "mirror", t->flag & T_MIRROR); } - + if (RNA_struct_find_property(op->ptr, "constraint_axis")) { RNA_int_set(op->ptr, "constraint_orientation", t->current_orientation); @@ -1194,7 +1197,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) if(t->spacetype == SPACE_VIEW3D) { View3D *v3d = t->view; - + v3d->twmode = t->current_orientation; } } @@ -1209,7 +1212,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int t->state = TRANS_RUNNING; t->options = options; - + t->mode = mode; if (!initTransInfo(C, t, op, event)) // internal data, mouse, vectors @@ -1221,7 +1224,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int { //calc_manipulator_stats(curarea); initTransformOrientation(C, t); - + t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST); } else if(t->spacetype == SPACE_IMAGE) { @@ -1244,10 +1247,10 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int /* EVIL2: we gave as argument also texture space context bit... was cleared */ /* EVIL3: extend mode for animation editors also switches modes... but is best way to avoid duplicate code */ mode = t->mode; - + calculatePropRatio(t); calculateCenter(t); - + initMouseInput(t, &t->mouse, t->center2d, t->imval); switch (mode) { @@ -1311,11 +1314,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int case TFM_TIME_SCALE: initTimeScale(t); break; - case TFM_TIME_EXTEND: + 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 + * depending on which editor this was called from */ if ELEM(t->spacetype, SPACE_IPO, SPACE_NLA) initTranslation(t); @@ -1369,11 +1372,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int if (constraint_axis[2]) { t->con.mode |= CON_AXIS2; } - - setUserConstraint(t, t->con.mode, "%s"); + + setUserConstraint(t, t->con.mode, "%s"); } } - + return 1; } @@ -1392,7 +1395,7 @@ void transformApply(bContext *C, TransInfo *t) t->redraw = 0; } - /* If auto confirm is on, break after one pass */ + /* If auto confirm is on, break after one pass */ if (t->options & CTX_AUTOCONFIRM) { t->state = TRANS_CONFIRM; @@ -1409,7 +1412,7 @@ void transformApply(bContext *C, TransInfo *t) int transformEnd(bContext *C, TransInfo *t) { int exit_code = OPERATOR_RUNNING_MODAL; - + if (t->state != TRANS_RUNNING) { /* handle restoring objects */ @@ -1422,16 +1425,16 @@ int transformEnd(bContext *C, TransInfo *t) { exit_code = OPERATOR_FINISHED; } - + /* free data */ postTrans(t); - + /* aftertrans does insert keyframes, and clears base flags, doesnt read transdata */ special_aftertrans_update(t); - + /* send events out for redraws */ viewRedrawPost(t); - + /* Undo as last, certainly after special_trans_update! */ if(t->state == TRANS_CANCEL) { @@ -1445,7 +1448,7 @@ int transformEnd(bContext *C, TransInfo *t) viewRedrawForce(C, t); } - + return exit_code; } @@ -1454,14 +1457,14 @@ int transformEnd(bContext *C, TransInfo *t) void initManipulator(int mode) { printf("init manipulator mode %d\n", mode); - + #if 0 // TRANSFORM_FIX_ME Trans.state = TRANS_RUNNING; Trans.options = CTX_NONE; - + Trans.mode = mode; - + /* automatic switch to scaling bone envelopes */ if(mode==TFM_RESIZE && t->obedit && t->obedit->type==OB_ARMATURE) { bArmature *arm= t->obedit->data; @@ -1482,7 +1485,7 @@ void initManipulator(int mode) /* EVIL! posemode code can switch translation to rotate when 1 bone is selected. will be removed (ton) */ /* EVIL2: we gave as argument also texture space context bit... was cleared */ mode = Trans.mode; - + calculatePropRatio(&Trans); calculateCenter(&Trans); @@ -1505,7 +1508,7 @@ void initManipulator(int mode) #endif } -void ManipulatorTransform() +void ManipulatorTransform() { #if 0 // TRANSFORM_FIX_ME int mouse_moved = 0; @@ -1518,9 +1521,9 @@ void ManipulatorTransform() Trans.redraw = 1; /* initial draw */ while (Trans.state == TRANS_RUNNING) { - + getmouseco_areawin(mval); - + if (mval[0] != pmval[0] || mval[1] != pmval[1]) { Trans.redraw = 1; } @@ -1534,7 +1537,7 @@ void ManipulatorTransform() } Trans.redraw = 0; } - + /* essential for idling subloop */ if( qtest()==0) PIL_sleep_ms(2); @@ -1559,9 +1562,9 @@ void ManipulatorTransform() Trans.flag |= T_SHIFT_MOD; Trans.redraw = 1; } - else Trans.flag &= ~T_SHIFT_MOD; + else Trans.flag &= ~T_SHIFT_MOD; break; - + case ESCKEY: case RIGHTMOUSE: Trans.state = TRANS_CANCEL; @@ -1619,23 +1622,23 @@ void ManipulatorTransform() Trans.redraw= 1; break; } - + // Numerical input events Trans.redraw |= handleNumInput(&(Trans.num), event); } } } - + if(Trans.state == TRANS_CANCEL) { restoreTransObjects(&Trans); } - + /* free data, reset vars */ postTrans(&Trans); - + /* aftertrans does insert ipos and action channels, and clears base flags */ special_aftertrans_update(&Trans); - + /* send events out for redraws */ viewRedrawPost(&Trans); @@ -1681,21 +1684,21 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu { /* quaternions get limited with euler... */ /* this function only does the delta rotation */ - + if(protectflag) { float eul[3], oldeul[3], quat1[4]; - + QUATCOPY(quat1, quat); QuatToEul(quat, eul); QuatToEul(oldquat, oldeul); - + if(protectflag & OB_LOCK_ROTX) eul[0]= oldeul[0]; if(protectflag & OB_LOCK_ROTY) eul[1]= oldeul[1]; if(protectflag & OB_LOCK_ROTZ) eul[2]= oldeul[2]; - + EulToQuat(eul, quat); /* quaternions flip w sign to accumulate rotations correctly */ if( (quat1[0]<0.0f && quat[0]>0.0f) || (quat1[0]>0.0f && quat[0]<0.0f) ) { @@ -1712,8 +1715,8 @@ static void constraintTransLim(TransInfo *t, TransData *td) bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT); bConstraintOb cob; bConstraint *con; - - /* Make a temporary bConstraintOb for using these limit constraints + + /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ @@ -1728,22 +1731,22 @@ static void constraintTransLim(TransInfo *t, TransData *td) else { VECCOPY(cob.matrix[3], td->loc); } - + /* Evaluate valid constraints */ for (con= td->con; con; con= con->next) { float tmat[4][4]; - + /* only consider constraint if enabled */ if (con->flag & CONSTRAINT_DISABLE) continue; if (con->enforce == 0.0f) continue; - + /* only use it if it's tagged for this purpose (and the right type) */ if (con->type == CONSTRAINT_TYPE_LOCLIMIT) { bLocLimitConstraint *data= con->data; - - if ((data->flag2 & LIMIT_TRANSFORM)==0) + + if ((data->flag2 & LIMIT_TRANSFORM)==0) continue; - + /* do space conversions */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1754,10 +1757,10 @@ static void constraintTransLim(TransInfo *t, TransData *td) /* skip... incompatable spacetype */ continue; } - + /* do constraint */ cti->evaluate_constraint(con, &cob, NULL); - + /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1766,7 +1769,7 @@ static void constraintTransLim(TransInfo *t, TransData *td) } } } - + /* copy results from cob->matrix */ if (td->tdi) { TransDataIpokey *tdi= td->tdi; @@ -1786,8 +1789,8 @@ static void constraintRotLim(TransInfo *t, TransData *td) bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_ROTLIMIT); bConstraintOb cob; bConstraint *con; - - /* Make a temporary bConstraintOb for using these limit constraints + + /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ @@ -1803,11 +1806,11 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* ipo-keys eulers */ TransDataIpokey *tdi= td->tdi; float eul[3]; - + eul[0]= tdi->rotx[0]; eul[1]= tdi->roty[0]; eul[2]= tdi->rotz[0]; - + EulToMat4(eul, cob.matrix); } else { @@ -1817,22 +1820,22 @@ static void constraintRotLim(TransInfo *t, TransData *td) else return; } - + /* Evaluate valid constraints */ 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; 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 */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1843,10 +1846,10 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* skip... incompatable spacetype */ continue; } - + /* do constraint */ cti->evaluate_constraint(con, &cob, NULL); - + /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1855,7 +1858,7 @@ static void constraintRotLim(TransInfo *t, TransData *td) } } } - + /* copy results from cob->matrix */ if (td->flag & TD_USEQUAT) { /* quats */ @@ -1865,9 +1868,9 @@ static void constraintRotLim(TransInfo *t, TransData *td) /* ipo-keys eulers */ TransDataIpokey *tdi= td->tdi; float eul[3]; - + Mat4ToEul(cob.matrix, eul); - + tdi->rotx[0]= eul[0]; tdi->roty[0]= eul[1]; tdi->rotz[0]= eul[2]; @@ -1885,8 +1888,8 @@ static void constraintSizeLim(TransInfo *t, TransData *td) bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT); bConstraintOb cob; bConstraint *con; - - /* Make a temporary bConstraintOb for using these limit constraints + + /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ @@ -1894,12 +1897,12 @@ static void constraintSizeLim(TransInfo *t, TransData *td) if (td->tdi) { TransDataIpokey *tdi= td->tdi; float size[3]; - + size[0]= tdi->sizex[0]; size[1]= tdi->sizey[0]; size[2]= tdi->sizez[0]; SizeToMat4(size, cob.matrix); - } + } else if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { /* scale val and reset size */ return; // TODO: fix this case @@ -1908,25 +1911,25 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* Reset val if SINGLESIZE but using a constraint */ if (td->flag & TD_SINGLESIZE) return; - + SizeToMat4(td->ext->size, cob.matrix); } - + /* Evaluate valid constraints */ 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; 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 */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1937,10 +1940,10 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* skip... incompatable spacetype */ continue; } - + /* do constraint */ cti->evaluate_constraint(con, &cob, NULL); - + /* convert spaces again */ if (con->ownspace == CONSTRAINT_SPACE_WORLD) { /* just multiply by td->mtx (this should be ok) */ @@ -1949,18 +1952,18 @@ static void constraintSizeLim(TransInfo *t, TransData *td) } } } - + /* copy results from cob->matrix */ if (td->tdi) { TransDataIpokey *tdi= td->tdi; float size[3]; - + Mat4ToSize(cob.matrix, size); - + tdi->sizex[0]= size[0]; tdi->sizey[0]= size[1]; tdi->sizez[0]= size[2]; - } + } else if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { /* scale val and reset size */ return; // TODO: fix this case @@ -1969,7 +1972,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* Reset val if SINGLESIZE but using a constraint */ if (td->flag & TD_SINGLESIZE) return; - + Mat4ToSize(cob.matrix, td->ext->size); } } @@ -1977,15 +1980,15 @@ static void constraintSizeLim(TransInfo *t, TransData *td) /* ************************** WARP *************************** */ -void initWarp(TransInfo *t) +void initWarp(TransInfo *t) { float max[3], min[3]; int i; - + t->mode = TFM_WARP; t->transform = Warp; t->handleEvent = handleEventWarp; - + initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_RATIO); t->idx_max = 0; @@ -1993,9 +1996,9 @@ void initWarp(TransInfo *t) t->snap[0] = 0.0f; t->snap[1] = 5.0f; t->snap[2] = 1.0f; - + t->flag |= T_NO_CONSTRAINT; - + /* we need min/max in view space */ for(i = 0; i < t->total; i++) { float center[3]; @@ -2010,11 +2013,11 @@ void initWarp(TransInfo *t) VECCOPY(min, center); } } - + t->center[0]= (min[0]+max[0])/2.0f; t->center[1]= (min[1]+max[1])/2.0f; t->center[2]= (min[2]+max[2])/2.0f; - + if (max[0] == min[0]) max[0] += 0.1; /* 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 */ } @@ -2022,7 +2025,7 @@ void initWarp(TransInfo *t) int handleEventWarp(TransInfo *t, wmEvent *event) { int status = 0; - + if (event->type == MIDDLEMOUSE && event->val) { // Use customData pointer to signal warp direction @@ -2030,10 +2033,10 @@ int handleEventWarp(TransInfo *t, wmEvent *event) t->customData = (void*)1; else t->customData = 0; - + status = 1; } - + return status; } @@ -2043,7 +2046,7 @@ int Warp(TransInfo *t, short mval[2]) float vec[3], circumfac, dist, phi0, co, si, *curs, cursor[3], gcursor[3]; int i; char str[50]; - + curs= give_cursor(t->scene, t->view); /* * gcursor is the one used for helpline. @@ -2056,7 +2059,7 @@ int Warp(TransInfo *t, short mval[2]) * into account if in Edit mode. */ VECCOPY(cursor, curs); - VECCOPY(gcursor, cursor); + VECCOPY(gcursor, cursor); if (t->flag & T_EDIT) { VecSubf(cursor, cursor, t->obedit->obmat[3]); VecSubf(gcursor, gcursor, t->obedit->obmat[3]); @@ -2067,7 +2070,7 @@ int Warp(TransInfo *t, short mval[2]) /* amount of degrees for warp */ circumfac = 360.0f * t->values[0]; - + if (t->customData) /* non-null value indicates reversed input */ { circumfac *= -1; @@ -2075,22 +2078,22 @@ int Warp(TransInfo *t, short mval[2]) snapGrid(t, &circumfac); applyNumInput(&t->num, &circumfac); - + /* header print for NumInput */ if (hasNumInput(&t->num)) { char c[20]; - + outputNumInput(&(t->num), c); - + sprintf(str, "Warp: %s", c); } else { /* default header print */ sprintf(str, "Warp: %.3f", circumfac); } - + circumfac*= (float)(-M_PI/360.0); - + for(i = 0; i < t->total; i++, td++) { float loc[3]; if (td->flag & TD_NOACTION) @@ -2098,65 +2101,65 @@ int Warp(TransInfo *t, short mval[2]) if (td->flag & TD_SKIP) continue; - + /* translate point to center, rotate in such a way that outline==distance */ VECCOPY(vec, td->iloc); Mat3MulVecfl(td->mtx, vec); Mat4MulVecfl(t->viewmat, vec); VecSubf(vec, vec, t->viewmat[3]); - + 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]); - + 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]; - + Mat4MulVecfl(t->viewinv, loc); VecSubf(loc, loc, t->viewinv[3]); Mat3MulVecfl(td->smtx, loc); - + VecSubf(loc, loc, td->iloc); VecMulf(loc, td->factor); VecAddf(td->loc, td->iloc, loc); } recalcData(t); - + ED_area_headerprint(t->sa, str); - + return 1; } /* ************************** SHEAR *************************** */ -void initShear(TransInfo *t) +void initShear(TransInfo *t) { t->mode = TFM_SHEAR; t->transform = Shear; t->handleEvent = handleEventShear; - + initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE); - + 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->flag |= T_NO_CONSTRAINT; } int handleEventShear(TransInfo *t, wmEvent *event) { int status = 0; - + if (event->type == MIDDLEMOUSE && event->val) { // Use customData pointer to signal Shear direction @@ -2170,15 +2173,15 @@ int handleEventShear(TransInfo *t, wmEvent *event) initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE); t->customData = 0; } - + status = 1; } - + return status; } -int Shear(TransInfo *t, short mval[2]) +int Shear(TransInfo *t, short mval[2]) { TransData *td = t->data; float vec[3]; @@ -2208,18 +2211,18 @@ int Shear(TransInfo *t, short mval[2]) /* default header print */ sprintf(str, "Shear: %.3f %s", value, t->proptext); } - + Mat3One(smat); - + // Custom data signals shear direction if (t->customData == 0) smat[1][0] = value; else smat[0][1] = value; - + Mat3MulMat3(tmat, smat, persmat); Mat3MulMat3(totmat, persinv, tmat); - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -2256,13 +2259,13 @@ int Shear(TransInfo *t, short mval[2]) /* ************************** RESIZE *************************** */ -void initResize(TransInfo *t) +void initResize(TransInfo *t) { t->mode = TFM_RESIZE; t->transform = Resize; - + initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP); - + t->flag |= T_NULL_ONE; t->num.flag |= NUM_NULL_ONE; t->num.flag |= NUM_AFFECT_ALL; @@ -2270,7 +2273,7 @@ void initResize(TransInfo *t) t->flag |= T_NO_ZERO; t->num.flag |= NUM_NO_ZERO; } - + t->idx_max = 2; t->num.idx_max = 2; t->snap[0] = 0.0f; @@ -2316,18 +2319,18 @@ static void headerResize(TransInfo *t, float vec[3], char *str) { static void TransMat3ToSize( float mat[][3], float smat[][3], float *size) { float vec[3]; - + VecCopyf(vec, mat[0]); size[0]= Normalize(vec); VecCopyf(vec, mat[1]); size[1]= Normalize(vec); VecCopyf(vec, mat[2]); size[2]= Normalize(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]; } @@ -2353,7 +2356,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { VECCOPY(center, td->center); } else if (t->flag & T_EDIT) { - + if(t->around==V3D_LOCAL && (t->settings->selectmode & SCE_SELECT_FACE)) { VECCOPY(center, td->center); } @@ -2371,7 +2374,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)) { float obsizemat[3][3]; // Reorient the size mat to fit the oriented object. @@ -2383,28 +2386,28 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { else { Mat3ToSize(tmat, fsize); } - + protectedSizeBits(td->protectflag, fsize); - + if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't resize objects itself /* handle ipokeys? */ if(td->tdi) { TransDataIpokey *tdi= td->tdi; /* calculate delta size (equal for size and dsize) */ - + vec[0]= (tdi->oldsize[0])*(fsize[0] -1.0f) * td->factor; vec[1]= (tdi->oldsize[1])*(fsize[1] -1.0f) * td->factor; vec[2]= (tdi->oldsize[2])*(fsize[2] -1.0f) * td->factor; - + add_tdi_poin(tdi->sizex, tdi->oldsize, vec[0]); add_tdi_poin(tdi->sizey, tdi->oldsize+1, vec[1]); add_tdi_poin(tdi->sizez, tdi->oldsize+2, vec[2]); - - } + + } else if((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)){ /* scale val and reset size */ *td->val = td->ival * fsize[0] * 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]; @@ -2413,16 +2416,16 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { /* Reset val if SINGLESIZE but using a constraint */ if (td->flag & TD_SINGLESIZE) *td->val = td->ival; - + td->ext->size[0] = td->ext->isize[0] * (fsize[0]) * td->factor; td->ext->size[1] = td->ext->isize[1] * (fsize[1]) * td->factor; td->ext->size[2] = td->ext->isize[2] * (fsize[2]) * td->factor; } } - + constraintSizeLim(t, td); } - + /* For individual element center, Editmode need to use iloc */ if (t->flag & T_POINTS) VecSubf(vec, td->iloc, center); @@ -2452,11 +2455,11 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) { add_tdi_poin(tdi->locz, tdi->oldloc+2, vec[2]); } else VecAddf(td->loc, td->iloc, vec); - + constraintTransLim(t, td); } -int Resize(TransInfo *t, short mval[2]) +int Resize(TransInfo *t, short mval[2]) { TransData *td; float size[3], mat[3][3]; @@ -2473,7 +2476,7 @@ int Resize(TransInfo *t, short mval[2]) { ratio = t->values[0]; } - + size[0] = size[1] = size[2] = ratio; snapGrid(t, size); @@ -2499,7 +2502,7 @@ int Resize(TransInfo *t, short mval[2]) } Mat3CpyMat3(t->mat, mat); // used in manipulator - + headerResize(t, size, str); for(i = 0, td=t->data; i < t->total; i++, td++) { @@ -2508,7 +2511,7 @@ int Resize(TransInfo *t, short mval[2]) if (td->flag & TD_SKIP) continue; - + ElementResize(t, td, mat); } @@ -2532,14 +2535,14 @@ int Resize(TransInfo *t, short mval[2]) /* ************************** TOSPHERE *************************** */ -void initToSphere(TransInfo *t) +void initToSphere(TransInfo *t) { TransData *td = t->data; int i; t->mode = TFM_TOSPHERE; t->transform = ToSphere; - + initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_RATIO); t->idx_max = 0; @@ -2547,10 +2550,10 @@ void initToSphere(TransInfo *t) t->snap[0] = 0.0f; t->snap[1] = 0.1f; t->snap[2] = t->snap[1] * 0.1f; - + t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE; t->flag |= T_NO_CONSTRAINT; - + // Calculate average radius for(i = 0 ; i < t->total; i++, td++) { t->val += VecLenf(t->center, td->iloc); @@ -2559,7 +2562,7 @@ void initToSphere(TransInfo *t) t->val /= (float)t->total; } -int ToSphere(TransInfo *t, short mval[2]) +int ToSphere(TransInfo *t, short mval[2]) { float vec[3]; float ratio, radius; @@ -2590,8 +2593,8 @@ int ToSphere(TransInfo *t, short mval[2]) /* default header print */ sprintf(str, "To Sphere: %.4f %s", ratio, t->proptext); } - - + + for(i = 0 ; i < t->total; i++, td++) { float tratio; if (td->flag & TD_NOACTION) @@ -2610,7 +2613,7 @@ int ToSphere(TransInfo *t, short mval[2]) VecAddf(td->loc, t->center, vec); } - + recalcData(t); @@ -2622,23 +2625,23 @@ int ToSphere(TransInfo *t, short mval[2]) /* ************************** ROTATION *************************** */ -void initRotation(TransInfo *t) +void initRotation(TransInfo *t) { t->mode = TFM_ROTATION; t->transform = Rotation; - + initMouseInputMode(t, &t->mouse, INPUT_ANGLE); - + t->ndof.axis = 16; /* Scale down and flip input for rotation */ t->ndof.factor[0] = -0.2f; - + 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[2] = t->snap[1] * 0.2f; - + if (t->flag & T_2D_EDIT) t->flag |= T_NO_CONSTRAINT; } @@ -2647,7 +2650,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short float vec[3], totmat[3][3], smat[3][3]; float eul[3], fmat[3][3], quat[4]; float *center = t->center; - + /* local constraint shouldn't alter center */ if (around == V3D_LOCAL) { if (t->flag & (T_OBJECT|T_POSE)) { @@ -2660,14 +2663,14 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short } } } - + if (t->flag & T_POINTS) { Mat3MulMat3(totmat, mat, td->mtx); Mat3MulMat3(smat, td->smtx, totmat); - + VecSubf(vec, td->iloc, center); Mat3MulVecfl(smat, vec); - + VecAddf(td->loc, vec, center); VecSubf(vec,td->loc,td->iloc); @@ -2677,10 +2680,10 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if(td->flag & TD_USEQUAT) { Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); Mat3ToQuat(fmat, quat); // Actual transform - + if(td->ext->quat){ QuatMul(td->ext->quat, quat, td->ext->iquat); - + /* is there a reason not to have this here? -jahka */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); } @@ -2688,11 +2691,11 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short } /** * HACK WARNING - * + * * This is some VERY ugly special case to deal with pose mode. - * + * * The problem is that mtx and smtx include each bone orientation. - * + * * That is needed to rotate each bone properly, HOWEVER, to calculate * the translation component, we only need the actual armature object's * matrix (and inverse). That is not all though. Once the proper translation @@ -2701,65 +2704,65 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short else if (t->flag & T_POSE) { float pmtx[3][3], imtx[3][3]; - // Extract and invert armature object matrix + // Extract and invert armature object matrix Mat3CpyMat4(pmtx, t->poseobj->obmat); Mat3Inv(imtx, pmtx); - + if ((td->flag & TD_NO_LOC) == 0) { VecSubf(vec, td->center, center); - + Mat3MulVecfl(pmtx, vec); // To Global space Mat3MulVecfl(mat, vec); // Applying rotation Mat3MulVecfl(imtx, vec); // To Local space - + VecAddf(vec, vec, center); /* vec now is the location where the object has to be */ - + VecSubf(vec, vec, td->center); // Translation needed from the initial location - + Mat3MulVecfl(pmtx, vec); // To Global space Mat3MulVecfl(td->smtx, vec);// To Pose space - + protectedTransBits(td->protectflag, vec); - + VecAddf(td->loc, td->iloc, vec); - + constraintTransLim(t, td); } - + /* rotation */ if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself /* euler or quaternion? */ if (td->flag & TD_USEQUAT) { Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); - + Mat3ToQuat(fmat, quat); // Actual transform - + QuatMul(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); } else { float eulmat[3][3]; - + Mat3MulMat3(totmat, mat, td->mtx); Mat3MulMat3(smat, td->smtx, totmat); - + /* calculate the total rotatation in eulers */ VECCOPY(eul, td->ext->irot); EulToMat3(eul, eulmat); - + /* mat = transform, obmat = bone rotation */ Mat3MulMat3(fmat, smat, eulmat); - + Mat3ToCompatibleEul(fmat, eul, td->ext->rot); - + /* and apply (to end result only) */ protectedRotateBits(td->protectflag, eul, td->ext->irot); VECCOPY(td->ext->rot, eul); } - + constraintRotLim(t, td); } } @@ -2773,9 +2776,9 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* vec now is the location where the object has to be */ VecSubf(vec, vec, td->center); Mat3MulVecfl(td->smtx, vec); - + protectedTransBits(td->protectflag, vec); - + if(td->tdi) { TransDataIpokey *tdi= td->tdi; add_tdi_poin(tdi->locx, tdi->oldloc, vec[0]); @@ -2784,8 +2787,8 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short } else VecAddf(td->loc, td->iloc, vec); } - - + + constraintTransLim(t, td); /* rotation */ @@ -2794,34 +2797,34 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if (td->flag & TD_USEQUAT) { Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0); Mat3ToQuat(fmat, quat); // Actual transform - + QuatMul(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ protectedQuaternionBits(td->protectflag, td->ext->quat, td->ext->iquat); } else { float obmat[3][3]; - + /* are there ipo keys? */ if(td->tdi) { TransDataIpokey *tdi= td->tdi; float current_rot[3]; float rot[3]; - + /* current IPO value for compatible euler */ current_rot[0] = (tdi->rotx) ? tdi->rotx[0] : 0.0f; current_rot[1] = (tdi->roty) ? tdi->roty[0] : 0.0f; current_rot[2] = (tdi->rotz) ? tdi->rotz[0] : 0.0f; VecMulf(current_rot, (float)(M_PI_2 / 9.0)); - + /* calculate the total rotatation in eulers */ VecAddf(eul, td->ext->irot, td->ext->drot); EulToMat3(eul, obmat); /* mat = transform, obmat = object rotation */ Mat3MulMat3(fmat, mat, obmat); - + Mat3ToCompatibleEul(fmat, eul, current_rot); - + /* correct back for delta rot */ if(tdi->flag & TOB_IPODROT) { VecSubf(rot, eul, td->ext->irot); @@ -2829,12 +2832,12 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short else { VecSubf(rot, eul, td->ext->drot); } - + VecMulf(rot, (float)(9.0/M_PI_2)); VecSubf(rot, rot, tdi->oldrot); - + protectedRotateBits(td->protectflag, rot, tdi->oldrot); - + add_tdi_poin(tdi->rotx, tdi->oldrot, rot[0]); add_tdi_poin(tdi->roty, tdi->oldrot+1, rot[1]); add_tdi_poin(tdi->rotz, tdi->oldrot+2, rot[2]); @@ -2842,37 +2845,37 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short else { Mat3MulMat3(totmat, mat, td->mtx); Mat3MulMat3(smat, td->smtx, totmat); - + /* calculate the total rotatation in eulers */ VecAddf(eul, td->ext->irot, td->ext->drot); /* we have to correct for delta rot */ EulToMat3(eul, obmat); /* mat = transform, obmat = object rotation */ Mat3MulMat3(fmat, smat, obmat); - + Mat3ToCompatibleEul(fmat, eul, td->ext->rot); - + /* correct back for delta rot */ VecSubf(eul, eul, td->ext->drot); - + /* and apply */ protectedRotateBits(td->protectflag, eul, td->ext->irot); VECCOPY(td->ext->rot, eul); } } - + constraintRotLim(t, td); } } } -static void applyRotation(TransInfo *t, float angle, float axis[3]) +static void applyRotation(TransInfo *t, float angle, float axis[3]) { TransData *td = t->data; float mat[3][3]; int i; VecRotToMat3(axis, angle, mat); - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) @@ -2880,7 +2883,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) if (td->flag & TD_SKIP) continue; - + if (t->con.applyRot) { t->con.applyRot(t, td, axis, NULL); VecRotToMat3(axis, angle * td->factor, mat); @@ -2893,7 +2896,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) } } -int Rotation(TransInfo *t, short mval[2]) +int Rotation(TransInfo *t, short mval[2]) { char str[64]; @@ -2909,13 +2912,13 @@ int Rotation(TransInfo *t, short mval[2]) final = t->values[0]; applyNDofInput(&t->ndof, &final); - + snapGrid(t, &final); if (t->con.applyRot) { t->con.applyRot(t, NULL, axis, &final); } - + applySnapping(t, &final); if (hasNumInput(&t->num)) { @@ -2930,7 +2933,7 @@ int Rotation(TransInfo *t, short mval[2]) /* Clamp between -180 and 180 */ while (final >= 180.0) final -= 360.0; - + while (final <= -180.0) final += 360.0; @@ -2945,9 +2948,9 @@ int Rotation(TransInfo *t, short mval[2]) // TRANSFORM_FIX_ME // t->values[0] = final; // used in manipulator // Mat3CpyMat3(t->mat, mat); // used in manipulator - + applyRotation(t, final, axis); - + recalcData(t); ED_area_headerprint(t->sa, str); @@ -2958,13 +2961,13 @@ int Rotation(TransInfo *t, short mval[2]) /* ************************** TRACKBALL *************************** */ -void initTrackball(TransInfo *t) +void initTrackball(TransInfo *t) { t->mode = TFM_TRACKBALL; t->transform = Trackball; - + initMouseInputMode(t, &t->mouse, INPUT_TRACKBALL); - + t->ndof.axis = 40; /* Scale down input for rotation */ t->ndof.factor[0] = 0.2f; @@ -2975,7 +2978,7 @@ void initTrackball(TransInfo *t) t->snap[0] = 0.0f; t->snap[1] = (float)((5.0/180)*M_PI); t->snap[2] = t->snap[1] * 0.2f; - + t->flag |= T_NO_CONSTRAINT; } @@ -2987,7 +2990,7 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a VecRotToMat3(axis1, angles[0], smat); VecRotToMat3(axis2, angles[1], totmat); - + Mat3MulMat3(mat, smat, totmat); for(i = 0 ; i < t->total; i++, td++) { @@ -2996,46 +2999,46 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a if (td->flag & TD_SKIP) continue; - + if (t->flag & T_PROP_EDIT) { VecRotToMat3(axis1, td->factor * angles[0], smat); VecRotToMat3(axis2, td->factor * angles[1], totmat); - + Mat3MulMat3(mat, smat, totmat); } - + ElementRotation(t, td, mat, t->around); } } -int Trackball(TransInfo *t, short mval[2]) +int Trackball(TransInfo *t, short mval[2]) { char str[128]; float axis1[3], axis2[3]; float mat[3][3], totmat[3][3], smat[3][3]; float phi[2]; - + VECCOPY(axis1, t->persinv[0]); VECCOPY(axis2, t->persinv[1]); Normalize(axis1); Normalize(axis2); - + phi[0] = t->values[0]; phi[1] = t->values[1]; - + applyNDofInput(&t->ndof, phi); - + snapGrid(t, phi); - + if (hasNumInput(&t->num)) { char c[40]; - + applyNumInput(&t->num, phi); - + outputNumInput(&(t->num), c); - + sprintf(str, "Trackball: %s %s %s", &c[0], &c[20], t->proptext); - + phi[0] *= (float)(M_PI / 180.0); phi[1] *= (float)(M_PI / 180.0); } @@ -3045,34 +3048,34 @@ int Trackball(TransInfo *t, short mval[2]) VecRotToMat3(axis1, phi[0], smat); VecRotToMat3(axis2, phi[1], totmat); - + Mat3MulMat3(mat, smat, totmat); - + // TRANSFORM_FIX_ME //Mat3CpyMat3(t->mat, mat); // used in manipulator - + applyTrackball(t, axis1, axis2, phi); - + recalcData(t); - + ED_area_headerprint(t->sa, str); - + return 1; } /* ************************** TRANSLATION *************************** */ - -void initTranslation(TransInfo *t) + +void initTranslation(TransInfo *t) { t->mode = TFM_TRANSLATION; t->transform = Translation; - + initMouseInputMode(t, &t->mouse, INPUT_VECTOR); t->idx_max = (t->flag & T_2D_EDIT)? 1: 2; t->num.flag = 0; t->num.idx_max = t->idx_max; - + t->ndof.axis = (t->flag & T_2D_EDIT)? 1|2: 1|2|4; if(t->spacetype == SPACE_VIEW3D) { @@ -3098,7 +3101,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) { char distvec[20]; char autoik[20]; float dist; - + if (hasNumInput(&t->num)) { outputNumInput(&(t->num), tvec); dist = VecLength(t->num.val); @@ -3119,10 +3122,10 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) { sprintf(distvec, "%.4e", dist); else sprintf(distvec, "%.4f", dist); - + if(t->flag & T_AUTOIK) { short chainlen= t->settings->autoik_chainlen; - + if(chainlen) sprintf(autoik, "AutoIK-Len: %d", chainlen); else @@ -3159,10 +3162,10 @@ static void applyTranslation(TransInfo *t, float vec[3]) { for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; - + if (td->flag & TD_SKIP) continue; - + /* handle snapping rotation before doing the translation */ if (usingSnappingNormal(t)) { @@ -3173,22 +3176,22 @@ static void applyTranslation(TransInfo *t, float vec[3]) { float quat[4]; float mat[3][3]; float angle; - + Crossf(axis, original_normal, t->tsnap.snapNormal); angle = saacos(Inpf(original_normal, t->tsnap.snapNormal)); - + AxisAngleToQuat(quat, axis, angle); - + QuatToMat3(quat, mat); - + ElementRotation(t, td, mat, V3D_LOCAL); } else { float mat[3][3]; - + Mat3One(mat); - + ElementRotation(t, td, mat, V3D_LOCAL); } } @@ -3200,12 +3203,12 @@ static void applyTranslation(TransInfo *t, float vec[3]) { else { VECCOPY(tvec, vec); } - + Mat3MulVecfl(td->smtx, tvec); VecMulf(tvec, td->factor); - + protectedTransBits(td->protectflag, tvec); - + /* transdata ipokey */ if(td->tdi) { TransDataIpokey *tdi= td->tdi; @@ -3214,17 +3217,17 @@ static void applyTranslation(TransInfo *t, float vec[3]) { add_tdi_poin(tdi->locz, tdi->oldloc+2, tvec[2]); } else VecAddf(td->loc, td->iloc, tvec); - + constraintTransLim(t, td); } } /* uses t->vec to store actual translation in */ -int Translation(TransInfo *t, short mval[2]) +int Translation(TransInfo *t, short mval[2]) { float tvec[3]; char str[250]; - + if (t->con.mode & CON_APPLY) { float pvec[3] = {0.0f, 0.0f, 0.0f}; applySnapping(t, t->values); @@ -3240,11 +3243,11 @@ int Translation(TransInfo *t, short mval[2]) { removeAspectRatio(t, t->values); } - + applySnapping(t, t->values); headerTranslation(t, t->values, str); } - + applyTranslation(t, t->values); /* evil hack - redo translation if clipping needed */ @@ -3260,7 +3263,7 @@ int Translation(TransInfo *t, short mval[2]) /* ************************** SHRINK/FATTEN *************************** */ -void initShrinkFatten(TransInfo *t) +void initShrinkFatten(TransInfo *t) { // If not in mesh edit mode, fallback to Resize if (t->obedit==NULL || t->obedit->type != OB_MESH) { @@ -3269,22 +3272,22 @@ void initShrinkFatten(TransInfo *t) else { t->mode = TFM_SHRINKFATTEN; t->transform = ShrinkFatten; - + initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE); - + t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; t->snap[1] = 1.0f; t->snap[2] = t->snap[1] * 0.1f; - + t->flag |= T_NO_CONSTRAINT; } } -int ShrinkFatten(TransInfo *t, short mval[2]) +int ShrinkFatten(TransInfo *t, short mval[2]) { float vec[3]; float distance; @@ -3310,8 +3313,8 @@ int ShrinkFatten(TransInfo *t, short mval[2]) /* default header print */ sprintf(str, "Shrink/Fatten: %.4f %s", distance, t->proptext); } - - + + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3335,11 +3338,11 @@ int ShrinkFatten(TransInfo *t, short mval[2]) /* ************************** TILT *************************** */ -void initTilt(TransInfo *t) +void initTilt(TransInfo *t) { t->mode = TFM_TILT; t->transform = Tilt; - + initMouseInputMode(t, &t->mouse, INPUT_ANGLE); t->ndof.axis = 16; @@ -3351,13 +3354,13 @@ void initTilt(TransInfo *t) t->snap[0] = 0.0f; t->snap[1] = (float)((5.0/180)*M_PI); t->snap[2] = t->snap[1] * 0.2f; - + t->flag |= T_NO_CONSTRAINT; } -int Tilt(TransInfo *t, short mval[2]) +int Tilt(TransInfo *t, short mval[2]) { TransData *td = t->data; int i; @@ -3366,7 +3369,7 @@ int Tilt(TransInfo *t, short mval[2]) float final; final = t->values[0]; - + applyNDofInput(&t->ndof, &final); snapGrid(t, &final); @@ -3412,72 +3415,72 @@ void initCurveShrinkFatten(TransInfo *t) { t->mode = TFM_CURVE_SHRINKFATTEN; t->transform = CurveShrinkFatten; - + 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->flag |= T_NO_CONSTRAINT; } -int CurveShrinkFatten(TransInfo *t, short mval[2]) +int CurveShrinkFatten(TransInfo *t, short 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; if (td->flag & TD_SKIP) continue; - + if(td->val) { //*td->val= ratio; *td->val= td->ival*ratio; if (*td->val <= 0.0f) *td->val = 0.0001f; } } - + recalcData(t); - + ED_area_headerprint(t->sa, str); - + return 1; } /* ************************** PUSH/PULL *************************** */ -void initPushPull(TransInfo *t) +void initPushPull(TransInfo *t) { t->mode = TFM_PUSHPULL; t->transform = PushPull; - + initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE); - + t->ndof.axis = 4; /* Flip direction */ t->ndof.factor[0] = -1.0f; @@ -3490,7 +3493,7 @@ void initPushPull(TransInfo *t) } -int PushPull(TransInfo *t, short mval[2]) +int PushPull(TransInfo *t, short mval[2]) { float vec[3], axis[3]; float distance; @@ -3499,7 +3502,7 @@ int PushPull(TransInfo *t, short mval[2]) TransData *td = t->data; distance = t->values[0]; - + applyNDofInput(&t->ndof, &distance); snapGrid(t, &distance); @@ -3518,11 +3521,11 @@ int PushPull(TransInfo *t, short mval[2]) /* default header print */ sprintf(str, "Push/Pull: %.4f%s %s", distance, t->con.text, t->proptext); } - + if (t->con.applyRot && t->con.mode & CON_APPLY) { t->con.applyRot(t, NULL, axis, NULL); } - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3558,11 +3561,11 @@ int PushPull(TransInfo *t, short mval[2]) /* ************************** BEVEL **************************** */ -void initBevel(TransInfo *t) +void initBevel(TransInfo *t) { t->transform = Bevel; t->handleEvent = handleEventBevel; - + initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE); t->mode = TFM_BEVEL; @@ -3631,7 +3634,7 @@ int Bevel(TransInfo *t, short mval[2]) mode = (G.editBMesh->options & BME_BEVEL_VERT) ? "verts only" : "normal"; distance = t->values[0] / 4; /* 4 just seemed a nice value to me, nothing special */ - + distance = fabs(distance); snapGrid(t, &distance); @@ -3650,7 +3653,7 @@ int Bevel(TransInfo *t, short mval[2]) /* default header print */ sprintf(str, "Bevel - Dist: %.4f, Mode: %s (MMB to toggle))", distance, mode); } - + if (distance < 0) distance = -distance; for(i = 0 ; i < t->total; i++, td++) { if (td->axismtx[1][0] > 0 && distance > td->axismtx[1][0]) { @@ -3671,23 +3674,23 @@ int Bevel(TransInfo *t, short mval[2]) /* ************************** BEVEL WEIGHT *************************** */ -void initBevelWeight(TransInfo *t) +void initBevelWeight(TransInfo *t) { t->mode = TFM_BWEIGHT; t->transform = BevelWeight; - + 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->flag |= T_NO_CONSTRAINT; } -int BevelWeight(TransInfo *t, short mval[2]) +int BevelWeight(TransInfo *t, short mval[2]) { TransData *td = t->data; float weight; @@ -3721,7 +3724,7 @@ int BevelWeight(TransInfo *t, short mval[2]) else sprintf(str, "Bevel Weight: %.3f %s", weight, t->proptext); } - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3742,23 +3745,23 @@ int BevelWeight(TransInfo *t, short mval[2]) /* ************************** CREASE *************************** */ -void initCrease(TransInfo *t) +void initCrease(TransInfo *t) { t->mode = TFM_CREASE; t->transform = Crease; - + 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->flag |= T_NO_CONSTRAINT; } -int Crease(TransInfo *t, short mval[2]) +int Crease(TransInfo *t, short mval[2]) { TransData *td = t->data; float crease; @@ -3792,7 +3795,7 @@ int Crease(TransInfo *t, short mval[2]) else sprintf(str, "Crease: %.3f %s", crease, t->proptext); } - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3820,9 +3823,9 @@ void initBoneSize(TransInfo *t) { t->mode = TFM_BONESIZE; t->transform = BoneSize; - + initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP); - + t->idx_max = 2; t->num.idx_max = 2; t->num.flag |= NUM_NULL_ONE; @@ -3846,7 +3849,7 @@ static void headerBoneSize(TransInfo *t, float vec[3], char *str) { if (t->con.mode & CON_APPLY) { if (t->num.idx_max == 0) sprintf(str, "ScaleB: %s%s %s", &tvec[0], t->con.text, t->proptext); - else + else sprintf(str, "ScaleB: %s : %s : %s%s %s", &tvec[0], &tvec[20], &tvec[40], t->con.text, t->proptext); } else { @@ -3854,18 +3857,18 @@ static void headerBoneSize(TransInfo *t, float vec[3], char *str) { } } -static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) +static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) { float tmat[3][3], smat[3][3], oldy; float sizemat[3][3]; - + Mat3MulMat3(smat, mat, td->mtx); Mat3MulMat3(tmat, td->smtx, smat); - + if (t->con.applySize) { t->con.applySize(t, td, tmat); } - + /* we've tucked the scale in loc */ oldy= td->iloc[1]; SizeToMat3(td->iloc, sizemat); @@ -3874,14 +3877,14 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) td->loc[1]= oldy; } -int BoneSize(TransInfo *t, short mval[2]) +int BoneSize(TransInfo *t, short mval[2]) { TransData *td = t->data; float size[3], mat[3][3]; float ratio; int i; char str[60]; - + // 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) @@ -3892,40 +3895,40 @@ int BoneSize(TransInfo *t, short mval[2]) { ratio = t->values[0]; } - + size[0] = size[1] = size[2] = ratio; - + snapGrid(t, size); - + if (hasNumInput(&t->num)) { applyNumInput(&t->num, size); constraintNumInput(t, size); } - + SizeToMat3(size, mat); - + if (t->con.applySize) { t->con.applySize(t, NULL, mat); } - + Mat3CpyMat3(t->mat, mat); // used in manipulator - + headerBoneSize(t, size, str); - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; if (td->flag & TD_SKIP) continue; - + ElementBoneSize(t, td, mat); } - + recalcData(t); - + ED_area_headerprint(t->sa, str); - + return 1; } @@ -3936,9 +3939,9 @@ void initBoneEnvelope(TransInfo *t) { t->mode = TFM_BONE_ENVELOPE; t->transform = BoneEnvelope; - + initMouseInputMode(t, &t->mouse, INPUT_SPRING); - + t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; @@ -3948,37 +3951,37 @@ void initBoneEnvelope(TransInfo *t) t->flag |= T_NO_CONSTRAINT; } -int BoneEnvelope(TransInfo *t, short mval[2]) +int BoneEnvelope(TransInfo *t, short 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, "Envelope: %s", c); } else { sprintf(str, "Envelope: %3f", ratio); } - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; if (td->flag & TD_SKIP) continue; - + if (td->val) { /* if the old/original value was 0.0f, then just use ratio */ if (td->ival) @@ -3987,11 +3990,11 @@ int BoneEnvelope(TransInfo *t, short mval[2]) *td->val= ratio; } } - + recalcData(t); - + ED_area_headerprint(t->sa, str); - + return 1; } @@ -4002,7 +4005,7 @@ void initBoneRoll(TransInfo *t) { t->mode = TFM_BONE_ROLL; t->transform = BoneRoll; - + initMouseInputMode(t, &t->mouse, INPUT_ANGLE); t->idx_max = 0; @@ -4010,11 +4013,11 @@ void initBoneRoll(TransInfo *t) t->snap[0] = 0.0f; t->snap[1] = (float)((5.0/180)*M_PI); t->snap[2] = t->snap[1] * 0.2f; - + t->flag |= T_NO_CONSTRAINT; } -int BoneRoll(TransInfo *t, short mval[2]) +int BoneRoll(TransInfo *t, short mval[2]) { TransData *td = t->data; int i; @@ -4040,18 +4043,18 @@ int BoneRoll(TransInfo *t, short mval[2]) else { sprintf(str, "Roll: %.2f", 180.0*final/M_PI); } - + /* set roll values */ - 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; - + *(td->val) = td->ival - final; } - + recalcData(t); ED_area_headerprint(t->sa, str); @@ -4061,11 +4064,11 @@ int BoneRoll(TransInfo *t, short mval[2]) /* ************************** BAKE TIME ******************* */ -void initBakeTime(TransInfo *t) +void initBakeTime(TransInfo *t) { t->transform = BakeTime; initMouseInputMode(t, &t->mouse, INPUT_NONE); - + t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; @@ -4073,15 +4076,15 @@ void initBakeTime(TransInfo *t) t->snap[2] = t->snap[1] * 0.1f; } -int BakeTime(TransInfo *t, short mval[2]) +int BakeTime(TransInfo *t, short mval[2]) { TransData *td = t->data; float time; int i; char str[50]; - + float fac = 0.1f; - + 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; @@ -4113,7 +4116,7 @@ int BakeTime(TransInfo *t, short mval[2]) else sprintf(str, "Time: %.3f %s", time, t->proptext); } - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -4137,7 +4140,7 @@ int BakeTime(TransInfo *t, short mval[2]) /* ************************** MIRROR *************************** */ -void initMirror(TransInfo *t) +void initMirror(TransInfo *t) { t->transform = Mirror; initMouseInputMode(t, &t->mouse, INPUT_NONE); @@ -4148,7 +4151,7 @@ void initMirror(TransInfo *t) } } -int Mirror(TransInfo *t, short mval[2]) +int Mirror(TransInfo *t, short mval[2]) { TransData *td; float size[3], mat[3][3]; @@ -4164,47 +4167,47 @@ int Mirror(TransInfo *t, short mval[2]) /* if an axis has been selected */ if (t->con.mode & CON_APPLY) { size[0] = size[1] = size[2] = -1; - + SizeToMat3(size, mat); - + if (t->con.applySize) { t->con.applySize(t, NULL, mat); } - + sprintf(str, "Mirror%s", t->con.text); - + for(i = 0, td=t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; - + if (td->flag & TD_SKIP) continue; - + ElementResize(t, td, mat); } - + recalcData(t); - + ED_area_headerprint(t->sa, str); } else { size[0] = size[1] = size[2] = 1; - + SizeToMat3(size, mat); - + for(i = 0, td=t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; - + if (td->flag & TD_SKIP) continue; - + ElementResize(t, td, mat); } - + recalcData(t); - + ED_area_headerprint(t->sa, "Select a mirror axis (X, Y, Z)"); } @@ -4213,12 +4216,12 @@ int Mirror(TransInfo *t, short mval[2]) /* ************************** ALIGN *************************** */ -void initAlign(TransInfo *t) +void initAlign(TransInfo *t) { t->flag |= T_NO_CONSTRAINT; - + t->transform = Align; - + initMouseInputMode(t, &t->mouse, INPUT_NONE); } @@ -4234,13 +4237,13 @@ int Align(TransInfo *t, short mval[2]) for(i = 0 ; i < t->total; i++, td++) { float mat[3][3], invmat[3][3]; - + if (td->flag & TD_NOACTION) break; if (td->flag & TD_SKIP) continue; - + /* around local centers */ if (t->flag & (T_OBJECT|T_POSE)) { VECCOPY(t->center, td->center); @@ -4252,19 +4255,19 @@ int Align(TransInfo *t, short mval[2]) } Mat3Inv(invmat, td->axismtx); - - Mat3MulMat3(mat, t->spacemtx, invmat); + + Mat3MulMat3(mat, t->spacemtx, invmat); ElementRotation(t, td, mat, t->around); } /* restoring original center */ VECCOPY(t->center, center); - + recalcData(t); ED_area_headerprint(t->sa, "Align"); - + return 1; } @@ -4273,37 +4276,37 @@ int Align(TransInfo *t, short mval[2]) /* ---------------- Special Helpers for Various Settings ------------- */ -/* This function returns the snapping 'mode' for Animation Editors only +/* This function returns the snapping 'mode' for Animation Editors only * We cannot use the standard snapping due to NLA-strip scaling complexities. */ // XXX these modifier checks should be keymappable static short getAnimEdit_SnapMode(TransInfo *t) { short autosnap= SACTSNAP_OFF; - + /* currently, some of these are only for the action editor */ if (t->spacetype == SPACE_ACTION) { SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - + if (saction) autosnap= saction->autosnap; } else if (t->spacetype == SPACE_IPO) { SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; - + if (sipo) autosnap= sipo->autosnap; } else if (t->spacetype == SPACE_NLA) { SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; - + if (snla) autosnap= snla->autosnap; } else { // TRANSFORM_FIX_ME This needs to use proper defines for t->modifiers // // FIXME: this still toggles the modes... -// if (ctrl) +// if (ctrl) // autosnap= SACTSNAP_STEP; // else if (shift) // autosnap= SACTSNAP_FRAME; @@ -4312,38 +4315,38 @@ static short getAnimEdit_SnapMode(TransInfo *t) // else autosnap= SACTSNAP_OFF; } - + return autosnap; } /* This function is used for testing if an Animation Editor is displaying * its data in frames or seconds (and the data needing to be edited as such). - * Returns 1 if in seconds, 0 if in frames + * Returns 1 if in seconds, 0 if in frames */ static short getAnimEdit_DrawTime(TransInfo *t) { short drawtime; - + /* currently, some of these are only for the action editor */ if (t->spacetype == SPACE_ACTION) { SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - + drawtime = (saction->flag & SACTION_DRAWTIME)? 1 : 0; } else if (t->spacetype == SPACE_NLA) { SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; - + drawtime = (snla->flag & SNLA_DRAWTIME)? 1 : 0; } else { drawtime = 0; } - + return drawtime; -} +} -/* This function is used by Animation Editor specific transform functions to do +/* This function is used by Animation Editor specific transform functions to do * the Snap Keyframe to Nearest Frame/Marker */ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, short autosnap) @@ -4354,19 +4357,19 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho const short doTime= getAnimEdit_DrawTime(t); const double secf= FPS; double val; - + /* convert frame to nla-action time (if needed) */ - if (adt) + if (adt) val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else val= *(td->val); - + /* do the snapping to nearest frame/second */ if (doTime) val= (float)( floor((val/secf) + 0.5f) * secf ); else val= (float)( floor(val+0.5f) ); - + /* convert frame out of nla-action time */ if (adt) *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); @@ -4376,17 +4379,17 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* snap key to nearest marker? */ else if (autosnap == SACTSNAP_MARKER) { float val; - + /* convert frame to nla-action time (if needed) */ - if (adt) + if (adt) val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else 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); - + /* convert frame out of nla-action time */ if (adt) *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); @@ -4397,27 +4400,27 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, sho /* ----------------- Translation ----------------------- */ -void initTimeTranslate(TransInfo *t) +void initTimeTranslate(TransInfo *t) { t->mode = TFM_TIME_TRANSLATE; t->transform = TimeTranslate; - + initMouseInputMode(t, &t->mouse, INPUT_NONE); /* num-input has max of (n-1) */ t->idx_max = 0; t->num.flag = 0; t->num.idx_max = t->idx_max; - + /* initialise snap like for everything else */ - t->snap[0] = 0.0f; + t->snap[0] = 0.0f; t->snap[1] = t->snap[2] = 1.0f; } -static void headerTimeTranslate(TransInfo *t, char *str) +static void headerTimeTranslate(TransInfo *t, char *str) { char tvec[60]; - + /* if numeric input is active, use results from that, otherwise apply snapping to result */ if (hasNumInput(&t->num)) { outputNumInput(&(t->num), tvec); @@ -4428,7 +4431,7 @@ static void headerTimeTranslate(TransInfo *t, char *str) const short doTime = getAnimEdit_DrawTime(t); const double secf= FPS; float val = t->values[0]; - + /* apply snapping + frame->seconds conversions */ if (autosnap == SACTSNAP_STEP) { if (doTime) @@ -4440,86 +4443,86 @@ static void headerTimeTranslate(TransInfo *t, char *str) if (doTime) val= val / secf; } - + sprintf(&tvec[0], "%.4f", val); } - + sprintf(str, "DeltaX: %s", &tvec[0]); } -static void applyTimeTranslate(TransInfo *t, float sval) +static void applyTimeTranslate(TransInfo *t, float sval) { TransData *td = t->data; Scene *scene = t->scene; int i; - + const short doTime= getAnimEdit_DrawTime(t); const double secf= FPS; - + const short autosnap= getAnimEdit_SnapMode(t); - + float deltax, val; - + /* 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++) { /* it is assumed that td->extra is a pointer to the AnimData, - * whose active action is where this keyframe comes from + * 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; - + /* check if any need to apply nla-mapping */ if (adt) { deltax = t->values[0]; - + if (autosnap == SACTSNAP_STEP) { - if (doTime) + if (doTime) deltax= (float)( floor((deltax/secf) + 0.5f) * secf ); else deltax= (float)( floor(deltax + 0.5f) ); } - + val = BKE_nla_tweakedit_remap(adt, td->ival, NLATIME_CONVERT_MAP); val += deltax; *(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); } else { deltax = val = t->values[0]; - + if (autosnap == SACTSNAP_STEP) { if (doTime) val= (float)( floor((deltax/secf) + 0.5f) * secf ); else val= (float)( floor(val + 0.5f) ); } - + *(td->val) = td->ival + val; } - + /* apply nearest snapping */ doAnimEdit_SnapFrame(t, td, adt, autosnap); } } -int TimeTranslate(TransInfo *t, short mval[2]) +int TimeTranslate(TransInfo *t, short mval[2]) { View2D *v2d = (View2D *)t->view; float cval[2], sval[2]; char str[200]; - + /* calculate translation amount from mouse movement - in 'time-grid space' */ UI_view2d_region_to_view(v2d, mval[0], mval[0], &cval[0], &cval[1]); UI_view2d_region_to_view(v2d, t->imval[0], t->imval[0], &sval[0], &sval[1]); - + /* we only need to calculate effect for time (applyTimeTranslate only needs that) */ t->values[0] = cval[0] - sval[0]; - + /* handle numeric-input stuff */ t->vec[0] = t->values[0]; applyNumInput(&t->num, &t->vec[0]); t->values[0] = t->vec[0]; headerTimeTranslate(t, str); - + applyTimeTranslate(t, sval[0]); recalcData(t); @@ -4531,36 +4534,36 @@ int TimeTranslate(TransInfo *t, short mval[2]) /* ----------------- Time Slide ----------------------- */ -void initTimeSlide(TransInfo *t) +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; - + /* set flag for drawing stuff */ saction->flag |= SACTION_MOVING; } - + t->mode = TFM_TIME_SLIDE; t->transform = TimeSlide; t->flag |= T_FREE_CUSTOMDATA; - + initMouseInputMode(t, &t->mouse, INPUT_NONE); /* num-input has max of (n-1) */ t->idx_max = 0; t->num.flag = 0; t->num.idx_max = t->idx_max; - + /* initialise snap like for everything else */ - t->snap[0] = 0.0f; + t->snap[0] = 0.0f; t->snap[1] = t->snap[2] = 1.0f; } -static void headerTimeSlide(TransInfo *t, float sval, char *str) +static void headerTimeSlide(TransInfo *t, float sval, char *str) { char tvec[60]; - + if (hasNumInput(&t->num)) { outputNumInput(&(t->num), tvec); } @@ -4569,50 +4572,50 @@ static void headerTimeSlide(TransInfo *t, float sval, char *str) float maxx= *((float *)(t->customData) + 1); float cval= t->values[0]; float val; - + val= 2.0f*(cval-sval) / (maxx-minx); CLAMP(val, -1.0f, 1.0f); - + sprintf(&tvec[0], "%.4f", val); } - + sprintf(str, "TimeSlide: %s", &tvec[0]); } -static void applyTimeSlide(TransInfo *t, float sval) +static void applyTimeSlide(TransInfo *t, float sval) { TransData *td = t->data; int i; - + 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; float cvalf = t->values[0]; - + 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++) { /* it is assumed that td->extra is a pointer to the AnimData, - * whose active action is where this keyframe comes from + * 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 cval = t->values[0]; - + /* apply NLA-mapping to necessary values */ if (adt) 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 timefac; - + /* left half? */ if (td->ival < sval) { timefac= (sval - td->ival) / (sval - minx); @@ -4626,26 +4629,26 @@ static void applyTimeSlide(TransInfo *t, float sval) } } -int TimeSlide(TransInfo *t, short mval[2]) +int TimeSlide(TransInfo *t, short mval[2]) { View2D *v2d = (View2D *)t->view; float cval[2], sval[2]; float minx= *((float *)(t->customData)); float maxx= *((float *)(t->customData) + 1); char str[200]; - + /* calculate mouse co-ordinates */ UI_view2d_region_to_view(v2d, mval[0], mval[0], &cval[0], &cval[1]); UI_view2d_region_to_view(v2d, t->imval[0], t->imval[0], &sval[0], &sval[1]); - + /* t->values[0] stores cval[0], which is the current mouse-pointer location (in frames) */ t->values[0] = cval[0]; - + /* handle numeric-input stuff */ 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.0 + sval[0]; - + headerTimeSlide(t, sval[0], str); applyTimeSlide(t, sval[0]); @@ -4658,35 +4661,35 @@ int TimeSlide(TransInfo *t, short mval[2]) /* ----------------- Scaling ----------------------- */ -void initTimeScale(TransInfo *t) +void initTimeScale(TransInfo *t) { t->mode = TFM_TIME_SCALE; t->transform = TimeScale; - + initMouseInputMode(t, &t->mouse, INPUT_NONE); t->helpline = HLP_SPRING; /* set manually because we don't use a predefined input */ t->flag |= T_NULL_ONE; t->num.flag |= NUM_NULL_ONE; - + /* num-input has max of (n-1) */ t->idx_max = 0; t->num.flag = 0; t->num.idx_max = t->idx_max; - + /* initialise snap like for everything else */ - t->snap[0] = 0.0f; + t->snap[0] = 0.0f; t->snap[1] = t->snap[2] = 1.0f; } static void headerTimeScale(TransInfo *t, char *str) { char tvec[60]; - + if (hasNumInput(&t->num)) outputNumInput(&(t->num), tvec); else sprintf(&tvec[0], "%.4f", t->values[0]); - + sprintf(str, "ScaleX: %s", &tvec[0]); } @@ -4694,63 +4697,63 @@ static void applyTimeScale(TransInfo *t) { Scene *scene = t->scene; TransData *td = t->data; int i; - + const short autosnap= getAnimEdit_SnapMode(t); const short doTime= getAnimEdit_DrawTime(t); const double secf= FPS; - - + + 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 + * 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]; - + if (autosnap == SACTSNAP_STEP) { if (doTime) fac= (float)( floor(fac/secf + 0.5f) * secf ); else fac= (float)( floor(fac + 0.5f) ); } - + /* check if any need to apply nla-mapping */ if (adt) startx= BKE_nla_tweakedit_remap(adt, startx, NLATIME_CONVERT_UNMAP); - + /* now, calculate the new value */ *(td->val) = td->ival - startx; *(td->val) *= fac; *(td->val) += startx; - + /* apply nearest snapping */ doAnimEdit_SnapFrame(t, td, adt, autosnap); } } -int TimeScale(TransInfo *t, short mval[2]) +int TimeScale(TransInfo *t, short mval[2]) { float cval, sval; float deltax, startx; float width= 0.0f; char str[200]; - + sval= t->imval[0]; cval= mval[0]; - + /* calculate scaling factor */ startx= sval-(width/2+(t->ar->winx)/2); deltax= cval-(width/2+(t->ar->winx)/2); t->values[0] = deltax / startx; - + /* handle numeric-input stuff */ t->vec[0] = t->values[0]; applyNumInput(&t->num, &t->vec[0]); t->values[0] = t->vec[0]; headerTimeScale(t, str); - + applyTimeScale(t); recalcData(t); @@ -4789,7 +4792,7 @@ void NDofTransform() maxval = val; } } - + switch(axis) { case -1: @@ -4810,7 +4813,7 @@ void NDofTransform() default: printf("ndof: what we are doing here ?"); } - + if (mode != 0) { initTransform(mode, CTX_NDOF); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 74cf1df1fa5..ed825886a05 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -71,7 +71,7 @@ typedef struct NumInput { /* The ctrl value has different meaning: 0 : No value has been typed - + otherwise, |value| - 1 is where the cursor is located after the period Positive : number is positive Negative : number is negative @@ -100,7 +100,7 @@ typedef struct TransCon { float mtx[3][3]; /* Matrix of the Constraint space */ float imtx[3][3]; /* Inverse Matrix of the Constraint space */ float pmtx[3][3]; /* Projection Constraint Matrix (same as imtx with some axis == 0) */ - float center[3]; /* transformation center to define where to draw the view widget + float center[3]; /* transformation center to define where to draw the view widget ALWAYS in global space. Unlike the transformation center */ short imval[2]; /* initial mouse value for visual calculation */ /* the one in TransInfo is not garanty to stay the same (Rotates change it) */ @@ -138,7 +138,7 @@ typedef struct TransDataExtension { float iquat[4]; /* Initial rotation quaternion */ float *size; /* Size of the data to transform (Faculative) */ float isize[3]; /* Initial size */ - float obmat[4][4]; /* Object matrix */ + float obmat[4][4]; /* Object matrix */ } TransDataExtension; typedef struct TransData2D { @@ -158,7 +158,7 @@ typedef struct TransDataSeq { int flag; /* a copy of seq->flag that may be modified for nested strips */ short start_offset; /* use this so we can have transform data at the strips start, but apply correctly to the start frame */ short sel_flag; /* one of SELECT, SEQ_LEFTSEL and SEQ_RIGHTSEL */ - + } TransDataSeq; /* for NLA transform (stored in td->extra pointer) */ @@ -200,9 +200,9 @@ typedef struct TransData { typedef struct MouseInput { void (*apply)(struct TransInfo *, struct MouseInput *, short [2], float [3]); - + short imval[2]; /* initial mouse position */ - char precision; + char precision; short precision_mval[2]; /* mouse position when precision key was pressed */ int center[2]; float factor; @@ -239,7 +239,7 @@ typedef struct TransInfo { short idx_max; /* maximum index on the input vector */ float snap[3]; /* Snapping Gears */ char frame_side; /* Mouse side of the cfra, 'L', 'R' or 'B' */ - + float viewmat[4][4]; /* copy from G.vd, prevents feedback, */ float viewinv[4][4]; /* and to make sure we don't have to */ float persmat[4][4]; /* access G.vd from other space types */ @@ -248,16 +248,16 @@ typedef struct TransInfo { short around; char spacetype; /* spacetype where transforming is */ char helpline; /* helpline modes (not to be confused with hotline) */ - + float vec[3]; /* translation, to show for widget */ float mat[3][3]; /* rot/rescale, to show for widget */ - + char *undostr; /* if set, uses this string for undo */ float spacemtx[3][3]; /* orientation matrix of the current space */ char spacename[32]; /* name of the current space */ - + struct Object *poseobj; /* if t->flag & T_POSE, this denotes pose object */ - + void *customData; /* Per Transform custom data */ /*************** NEW STUFF *********************/ @@ -303,7 +303,7 @@ typedef struct TransInfo { #define T_POSE (1 << 2) #define T_TEXTURE (1 << 3) #define T_CAMERA (1 << 4) - // trans on points, having no rotation/scale + // trans on points, having no rotation/scale #define T_POINTS (1 << 6) // for manipulator exceptions, like scaling using center point, drawing help lines #define T_USES_MANIPULATOR (1 << 7) @@ -319,7 +319,7 @@ typedef struct TransInfo { #define T_V3D_ALIGN (1 << 14) /* for 2d views like uv or ipo */ -#define T_2D_EDIT (1 << 15) +#define T_2D_EDIT (1 << 15) #define T_CLIP_UV (1 << 16) #define T_FREE_CUSTOMDATA (1 << 17) @@ -507,6 +507,8 @@ void special_aftertrans_update(TransInfo *t); void transform_autoik_update(TransInfo *t, short mode); +int count_set_pose_transflags(int *out_mode, short around, struct Object *ob); + /* auto-keying stuff used by special_aftertrans_update */ short autokeyframe_cfra_can_key(struct Scene *scene, struct Object *ob); void autokeyframe_ob_cb_func(struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode); @@ -607,8 +609,6 @@ void calculatePropRatio(TransInfo *t); void getViewVector(TransInfo *t, float coord[3], float vec[3]); -TransInfo * BIF_GetTransInfo(void); - /*********************** NumInput ********************************/ void initNumInput(NumInput *n); diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 7f47bfd25af..158ea98c090 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -183,7 +183,7 @@ static void postConstraintChecks(TransInfo *t, float vec[3], float pvec[3]) { VECCOPY(vec, t->auto_values); constraintAutoValues(t, vec); } - + if (t->con.mode & CON_AXIS0) { pvec[i++] = vec[0]; } @@ -199,10 +199,10 @@ static void postConstraintChecks(TransInfo *t, float vec[3], float pvec[3]) { static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3]) { float norm[3], vec[3], factor; - + if(in[0]==0.0f && in[1]==0.0f && in[2]==0.0f) return; - + /* For when view is parallel to constraint... will cause NaNs otherwise So we take vertical motion in 3D space and apply it to the constraint axis. Nice for camera grab + MMB */ @@ -212,30 +212,30 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 /* since camera distance is quite relative, use quadratic relationship. holding shift can compensate */ if(factor<0.0f) factor*= -factor; else factor*= factor; - + VECCOPY(out, axis); Normalize(out); VecMulf(out, -factor); /* -factor makes move down going backwards */ } else { float cb[3], ab[3]; - + VECCOPY(out, axis); - + /* Get view vector on axis to define a plane */ VecAddf(vec, t->con.center, in); getViewVector(t, vec, norm); - + Crossf(vec, norm, axis); - + /* Project input vector on the plane passing on axis */ Projf(vec, in, vec); VecSubf(vec, in, vec); - + /* intersect the two lines: axis and norm */ Crossf(cb, vec, norm); Crossf(ab, axis, norm); - + VecMulf(out, Inpf(cb, ab) / Inpf(ab, ab)); } } @@ -262,7 +262,7 @@ static void planeProjection(TransInfo *t, float in[3], float out[3]) { /* * Generic callback for constant spacial constraints applied to linear motion - * + * * The IN vector in projected into the constrained space and then further * projected along the view vector. * (in perspective mode, the view vector is relative to the position on screen) @@ -274,7 +274,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo VECCOPY(out, in); if (!td && t->con.mode & CON_APPLY) { Mat3MulVecfl(t->con.pmtx, out); - + // With snap, a projection is alright, no need to correct for view alignment if ((t->tsnap.status & SNAP_ON) == 0) { if (getConstraintSpaceDimension(t) == 2) { @@ -284,7 +284,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo } else if (getConstraintSpaceDimension(t) == 1) { float c[3]; - + if (t->con.mode & CON_AXIS0) { VECCOPY(c, t->con.mtx[0]); } @@ -303,7 +303,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo /* * Generic callback for object based spacial constraints applied to linear motion - * + * * At first, the following is applied to the first data in the array * The IN vector in projected into the constrained space and then further * projected along the view vector. @@ -360,7 +360,7 @@ static void applyObjectConstraintVec(TransInfo *t, TransData *td, float in[3], f /* * Generic callback for constant spacial constraints applied to resize motion - * + * * */ @@ -386,7 +386,7 @@ static void applyAxisConstraintSize(TransInfo *t, TransData *td, float smat[3][3 /* * Callback for object based spacial constraints applied to resize motion - * + * * */ @@ -415,7 +415,7 @@ static void applyObjectConstraintSize(TransInfo *t, TransData *td, float smat[3] /* * Generic callback for constant spacial constraints applied to rotations - * + * * The rotation axis is copied into VEC. * * In the case of single axis constraints, the rotation axis is directly the one constrained to. @@ -457,7 +457,7 @@ static void applyAxisConstraintRot(TransInfo *t, TransData *td, float vec[3], fl /* * Callback for object based spacial constraints applied to rotations - * + * * The rotation axis is copied into VEC. * * In the case of single axis constraints, the rotation axis is directly the one constrained to. @@ -473,7 +473,7 @@ static void applyObjectConstraintRot(TransInfo *t, TransData *td, float vec[3], { if (t->con.mode & CON_APPLY) { int mode = t->con.mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); - + /* on setup call, use first object */ if (td == NULL) { td= t->data; @@ -585,128 +585,6 @@ void setUserConstraint(TransInfo *t, int mode, const char ftext[]) { t->con.mode |= CON_USER; } -/*--------------------- EXTERNAL SETUP CALLS ------------------*/ - -void BIF_setLocalLockConstraint(char axis, char *text) { - TransInfo *t = BIF_GetTransInfo(); - - if (t->total == 0) { - return; - } - - switch (axis) { - case 'x': - setLocalConstraint(t, (CON_AXIS1|CON_AXIS2), text); - break; - case 'y': - setLocalConstraint(t, (CON_AXIS0|CON_AXIS2), text); - break; - case 'z': - setLocalConstraint(t, (CON_AXIS0|CON_AXIS1), text); - break; - } -} - -void BIF_setLocalAxisConstraint(char axis, char *text) { - TransInfo *t = BIF_GetTransInfo(); - - if (t->total == 0) { - return; - } - - switch (axis) { - case 'X': - setLocalConstraint(t, CON_AXIS0, text); - break; - case 'Y': - setLocalConstraint(t, CON_AXIS1, text); - break; - case 'Z': - setLocalConstraint(t, CON_AXIS2, text); - break; - } -} - -/* text is optional, for header print */ -void BIF_setSingleAxisConstraint(float vec[3], char *text) { - TransInfo *t = BIF_GetTransInfo(); - float space[3][3], v[3]; - - if (t->total == 0) { - return; - } - - VECCOPY(space[0], vec); - - v[0] = vec[2]; - v[1] = vec[0]; - v[2] = vec[1]; - - Crossf(space[1], vec, v); - Crossf(space[2], vec, space[1]); - Mat3Ortho(space); - - Mat3CpyMat3(t->con.mtx, space); - t->con.mode = CON_AXIS0; - - getConstraintMatrix(t); - - startConstraint(t); - - /* start copying with an offset of 1, to reserve a spot for the SPACE char */ - if(text) - { - strncpy(t->con.text+1, text, 48); /* 50 in struct */ - } - else - { - t->con.text[1] = '\0'; /* No text */ - } - - t->con.drawExtra = NULL; - t->con.applyVec = applyAxisConstraintVec; - t->con.applySize = applyAxisConstraintSize; - t->con.applyRot = applyAxisConstraintRot; - t->redraw = 1; -} - -void BIF_setDualAxisConstraint(float vec1[3], float vec2[3], char *text) { - TransInfo *t = BIF_GetTransInfo(); - float space[3][3]; - - if (t->total == 0) { - return; - } - - VECCOPY(space[0], vec1); - VECCOPY(space[1], vec2); - Crossf(space[2], space[0], space[1]); - Mat3Ortho(space); - - Mat3CpyMat3(t->con.mtx, space); - t->con.mode = CON_AXIS0|CON_AXIS1; - - getConstraintMatrix(t); - - startConstraint(t); - - /* start copying with an offset of 1, to reserve a spot for the SPACE char */ - if(text) - { - strncpy(t->con.text+1, text, 48); /* 50 in struct */ - } - else - { - t->con.text[1] = '\0'; /* No text */ - } - - t->con.drawExtra = NULL; - t->con.applyVec = applyAxisConstraintVec; - t->con.applySize = applyAxisConstraintSize; - t->con.applyRot = applyAxisConstraintRot; - t->redraw = 1; -} - /*----------------- DRAWING CONSTRAINTS -------------------*/ void drawConstraint(const struct bContext *C, TransInfo *t) @@ -721,10 +599,10 @@ void drawConstraint(const struct bContext *C, TransInfo *t) return; if (t->flag & T_NO_CONSTRAINT) return; - + /* nasty exception for Z constraint in camera view */ // TRANSFORM_FIX_ME -// if((t->flag & T_OBJECT) && G.vd->camera==OBACT && G.vd->persp==V3D_CAMOB) +// if((t->flag & T_OBJECT) && G.vd->camera==OBACT && G.vd->persp==V3D_CAMOB) // return; if (tc->drawExtra) { @@ -742,17 +620,17 @@ void drawConstraint(const struct bContext *C, TransInfo *t) drawLine(t, tc->center, tc->mtx[2], 'z', 0); glColor3ubv((GLubyte *)col2); - + glDisable(GL_DEPTH_TEST); setlinestyle(1); - glBegin(GL_LINE_STRIP); - glVertex3fv(tc->center); - glVertex3fv(vec); + glBegin(GL_LINE_STRIP); + glVertex3fv(tc->center); + glVertex3fv(vec); glEnd(); setlinestyle(0); // TRANSFORM_FIX_ME //if(G.vd->zbuf) - glEnable(GL_DEPTH_TEST); + glEnable(GL_DEPTH_TEST); } if (tc->mode & CON_AXIS0) { @@ -775,7 +653,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t) float tmat[4][4], imat[4][4]; UI_ThemeColor(TH_GRID); - + if(t->spacetype == SPACE_VIEW3D && rv3d != NULL) { Mat4CpyMat4(tmat, rv3d->viewmat); @@ -804,22 +682,11 @@ void drawPropCircle(const struct bContext *C, TransInfo *t) set_inverted_drawing(1); drawcircball(GL_LINE_LOOP, t->center, t->prop_size, imat); set_inverted_drawing(0); - + glPopMatrix(); } } -void BIF_getPropCenter(float *center) -{ - TransInfo *t = BIF_GetTransInfo(); - - if (t && t->flag & T_PROP_EDIT) { - VECCOPY(center, t->center); - } - else - center[0] = center[1] = center[2] = 0.0f; -} - static void drawObjectConstraint(TransInfo *t) { int i; TransData * td = t->data; @@ -839,7 +706,7 @@ static void drawObjectConstraint(TransInfo *t) { if (t->con.mode & CON_AXIS2) { drawLine(t, td->ob->obmat[3], td->axismtx[2], 'z', DRAWLIGHT); } - + td++; for(i=1;itotal;i++,td++) { @@ -954,12 +821,12 @@ static void setNearestAxis3d(TransInfo *t) float mvec[3], axis[3], proj[3]; float len[3]; int i, icoord[2]; - + /* calculate mouse movement */ mvec[0] = (float)(t->mval[0] - t->con.imval[0]); mvec[1] = (float)(t->mval[1] - t->con.imval[1]); mvec[2] = 0.0f; - + /* we need to correct axis length for the current zoomlevel of view, this to prevent projected values to be clipped behind the camera and to overflow the short integers. @@ -972,12 +839,12 @@ static void setNearestAxis3d(TransInfo *t) for (i = 0; i<3; i++) { VECCOPY(axis, t->con.mtx[i]); - + VecMulf(axis, zfac); /* now we can project to get window coordinate */ VecAddf(axis, axis, t->con.center); projectIntView(t, axis, icoord); - + axis[0] = (float)(icoord[0] - t->center2d[0]); axis[1] = (float)(icoord[1] - t->center2d[1]); axis[2] = 0.0f; @@ -1034,13 +901,13 @@ void setNearestAxis(TransInfo *t) /* constraint setting - depends on spacetype */ if (t->spacetype == SPACE_VIEW3D) { /* 3d-view */ - setNearestAxis3d(t); + setNearestAxis3d(t); } else { /* assume that this means a 2D-Editor */ setNearestAxis2d(t); } - + getConstraintMatrix(t); } @@ -1083,7 +950,7 @@ int isLockConstraint(TransInfo *t) { /* * Returns the dimension of the constraint space. - * + * * For that reason, the flags always needs to be set to properly evaluate here, * even if they aren't actually used in the callback function. (Which could happen * for weird constraints not yet designed. Along a path for example.) @@ -1107,7 +974,7 @@ int getConstraintSpaceDimension(TransInfo *t) Someone willing to do it criptically could do the following instead: return t->con & (CON_AXIS0|CON_AXIS1|CON_AXIS2); - + Based on the assumptions that the axis flags are one after the other and start at 1 */ } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 47f9159d87f..60d209ae2db 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -216,7 +216,7 @@ void sort_trans_data_dist(TransInfo *t) { qsort_trans_data(t, start, t->data + t->total - 1); } -static void sort_trans_data(TransInfo *t) +static void sort_trans_data(TransInfo *t) { TransData *sel, *unsel; TransData temp; @@ -252,16 +252,16 @@ static void set_prop_dist(TransInfo *t, short with_dist) int a; for(a=0, tob= t->data; atotal; a++, tob++) { - + tob->rdist= 0.0f; // init, it was mallocced - + 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++) { if(td->flag & TD_SELECTED) { VecSubf(vec, tob->center, td->center); @@ -279,7 +279,7 @@ static void set_prop_dist(TransInfo *t, short with_dist) if (with_dist) { tob->dist = tob->rdist; } - } + } } } @@ -294,9 +294,9 @@ static void createTransTexspace(bContext *C, TransInfo *t) Object *ob; ID *id; int *texflag; - + ob = OBACT; - + if (ob == NULL) { // Shouldn't logically happen, but still... t->total = 0; return; @@ -311,20 +311,20 @@ static void createTransTexspace(bContext *C, TransInfo *t) t->total = 1; td= t->data= MEM_callocN(sizeof(TransData), "TransTexspace"); td->ext= t->ext= MEM_callocN(sizeof(TransDataExtension), "TransTexspace"); - + td->flag= TD_SELECTED; VECCOPY(td->center, ob->obmat[3]); td->ob = ob; - + Mat3CpyMat4(td->mtx, ob->obmat); Mat3CpyMat4(td->axismtx, ob->obmat); Mat3Ortho(td->axismtx); Mat3Inv(td->smtx, td->mtx); - + if (give_obdata_texspace(ob, &texflag, &td->loc, &td->ext->size, &td->ext->rot)) { *texflag &= ~AUTOSPACE; } - + VECCOPY(td->iloc, td->loc); VECCOPY(td->ext->irot, td->ext->rot); VECCOPY(td->ext->isize, td->ext->size); @@ -371,7 +371,7 @@ static void createTransEdge(bContext *C, TransInfo *t) { td->loc= NULL; if (eed->f & SELECT) td->flag= TD_SELECTED; - else + else td->flag= 0; @@ -400,14 +400,14 @@ static void createTransEdge(bContext *C, TransInfo *t) { static bKinematicConstraint *has_targetless_ik(bPoseChannel *pchan) { bConstraint *con= pchan->constraints.first; - + for(;con; con= con->next) { if(con->type==CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0)) { 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; } } @@ -419,67 +419,67 @@ static short apply_targetless_ik(Object *ob) bPoseChannel *pchan, *parchan, *chanlist[256]; bKinematicConstraint *data; 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 + 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); 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; - + /* exclude tip from chain? */ if(!(data->flag & CONSTRAINT_IK_TIP)) parchan= pchan->parent; else parchan= pchan; - + /* Find the chain's root & count the segments needed */ for (; parchan; parchan=parchan->parent){ chanlist[segcount]= parchan; segcount++; - + if(segcount==data->rootbone || segcount>255) break; // 255 is weak } for(;segcount;segcount--) { Bone *bone; 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 */ - + if(parchan->parent) { Bone *parbone= parchan->parent->bone; float offs_bone[4][4]; - + /* offs_bone = yoffs(b-1) + root(b) + bonemat(b) */ Mat4CpyMat3(offs_bone, bone->bone_mat); - + /* The bone's root offset (is in the parent's coordinate system) */ VECCOPY(offs_bone[3], bone->head); - + /* Get the length translation of parent (length along y axis) */ offs_bone[3][1]+= parbone->length; - + /* pose_mat(b-1) * offs_bone */ if(parchan->bone->flag & BONE_HINGE) { /* the rotation of the parent restposition */ Mat4CpyMat4(rmat, parbone->arm_mat); /* rmat used as temp */ - + /* the location of actual parent transform */ VECCOPY(rmat[3], offs_bone[3]); offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f; Mat4MulVecfl(parchan->parent->pose_mat, rmat[3]); - + Mat4MulMat4(tmat, offs_bone, rmat); } else if(parchan->bone->flag & BONE_NO_SCALE) { @@ -488,7 +488,7 @@ static short apply_targetless_ik(Object *ob) } else Mat4MulMat4(tmat, offs_bone, parchan->parent->pose_mat); - + Mat4Invert(imat, tmat); } else { @@ -499,16 +499,16 @@ static short apply_targetless_ik(Object *ob) } /* result matrix */ Mat4MulMat4(rmat, parchan->pose_mat, imat); - + /* apply and decompose, doesn't work for constraints or non-uniform scale well */ { float rmat3[3][3], qmat[3][3], imat[3][3], smat[3][3]; - + Mat3CpyMat4(rmat3, rmat); - + /* quaternion */ Mat3ToQuat(rmat3, parchan->quat); - + /* for size, remove rotation */ /* causes problems with some constraints (so apply only if needed) */ if (data->flag & CONSTRAINT_IK_STRETCH) { @@ -517,19 +517,19 @@ static short apply_targetless_ik(Object *ob) Mat3MulMat3(smat, rmat3, imat); Mat3ToSize(smat, parchan->size); } - + /* causes problems with some constraints (e.g. childof), so disable this */ /* as it is IK shouldn't affect location directly */ /* VECCOPY(parchan->loc, rmat[3]); */ } - + } - + apply= 1; data->flag &= ~CONSTRAINT_IK_AUTO; } - } - + } + return apply; } @@ -542,7 +542,7 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr VECCOPY(vec, pchan->pose_mat[3]); VECCOPY(td->center, vec); - + td->ob = ob; td->flag = TD_SELECTED; if (pchan->rotmode == PCHAN_ROT_QUAT) @@ -553,43 +553,43 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr { td->flag |= TD_NOCENTER; } - + if (bone->flag & BONE_TRANSFORM_CHILD) { td->flag |= TD_NOCENTER; td->flag |= TD_NO_LOC; } - + td->protectflag= pchan->protectflag; - + td->loc = pchan->loc; VECCOPY(td->iloc, pchan->loc); - + td->ext->size= pchan->size; VECCOPY(td->ext->isize, pchan->size); - + if (pchan->rotmode) { td->ext->rot= pchan->eul; td->ext->quat= NULL; - + VECCOPY(td->ext->irot, pchan->eul); } else { td->ext->rot= NULL; td->ext->quat= pchan->quat; - + QUATCOPY(td->ext->iquat, pchan->quat); } /* proper way to get parent transform + own transform + constraints transform */ Mat3CpyMat4(omat, ob->obmat); - - if (pchan->parent) { - if(pchan->bone->flag & BONE_HINGE) - Mat3CpyMat4(pmat, pchan->parent->bone->arm_mat); - else + + if (pchan->parent) { + if(pchan->bone->flag & BONE_HINGE) + Mat3CpyMat4(pmat, pchan->parent->bone->arm_mat); + else Mat3CpyMat4(pmat, pchan->parent->pose_mat); - + if (constraints_list_needinv(t, &pchan->constraints)) { Mat3CpyMat4(tmat, pchan->constinv); Mat3Inv(cmat, tmat); @@ -604,20 +604,20 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr Mat3Inv(cmat, tmat); Mat3MulSerie(td->mtx, pchan->bone->bone_mat, omat, cmat, 0,0,0,0,0); // dang mulserie swaps args } - else - Mat3MulMat3(td->mtx, omat, pchan->bone->bone_mat); // Mat3MulMat3 has swapped args! + else + Mat3MulMat3(td->mtx, omat, pchan->bone->bone_mat); // Mat3MulMat3 has swapped args! } - + Mat3Inv(td->smtx, td->mtx); - + /* for axismat we use bone's own transform */ Mat3CpyMat4(pmat, pchan->pose_mat); Mat3MulMat3(td->axismtx, omat, pmat); Mat3Ortho(td->axismtx); - + if (t->mode==TFM_BONESIZE) { bArmature *arm= t->poseobj->data; - + if(arm->drawtype==ARM_ENVELOPE) { td->loc= NULL; td->val= &bone->dist; @@ -630,7 +630,7 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr td->val= NULL; } } - + /* in this case we can do target-less IK grabbing */ if (t->mode==TFM_TRANSLATION) { bKinematicConstraint *data= has_targetless_ik(pchan); @@ -644,27 +644,27 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr td->loc = data->grabtarget; VECCOPY(td->iloc, td->loc); data->flag |= CONSTRAINT_IK_AUTO; - + /* only object matrix correction */ Mat3CpyMat3 (td->mtx, omat); Mat3Inv (td->smtx, td->mtx); } } - + /* store reference to first constraint */ td->con= pchan->constraints.first; } -static void bone_children_clear_transflag(TransInfo *t, ListBase *lb) +static void bone_children_clear_transflag(int mode, short around, ListBase *lb) { Bone *bone= lb->first; - + for(;bone;bone= bone->next) { if((bone->flag & BONE_HINGE) && (bone->flag & BONE_CONNECTED)) { bone->flag |= BONE_HINGE_CHILD_TRANSFORM; } - else if (bone->flag & BONE_TRANSFORM && (t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL) + else if (bone->flag & BONE_TRANSFORM && (mode == TFM_ROTATION || mode == TFM_TRACKBALL) && around == V3D_LOCAL) { bone->flag |= BONE_TRANSFORM_CHILD; } @@ -673,69 +673,73 @@ static void bone_children_clear_transflag(TransInfo *t, ListBase *lb) bone->flag &= ~BONE_TRANSFORM; } - bone_children_clear_transflag(t, &bone->childbase); + bone_children_clear_transflag(mode, around, &bone->childbase); } } /* sets transform flags in the bones, returns total */ -static void set_pose_transflags(TransInfo *t, Object *ob) +int count_set_pose_transflags(int *out_mode, short around, Object *ob) { bArmature *arm= ob->data; bPoseChannel *pchan; Bone *bone; - int hastranslation; - - t->total= 0; - - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - bone= pchan->bone; + int mode = *out_mode; + int hastranslation = 0; + int total = 0; + + for(pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + bone = pchan->bone; if(bone->layer & arm->layer) { if(bone->flag & BONE_SELECTED) bone->flag |= BONE_TRANSFORM; else bone->flag &= ~BONE_TRANSFORM; - + bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM; bone->flag &= ~BONE_TRANSFORM_CHILD; } } - + /* make sure no bone can be transformed when a parent is transformed */ /* since pchans are depsgraph sorted, the parents are in beginning of list */ - if(t->mode!=TFM_BONESIZE) { - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - bone= pchan->bone; + if(mode != TFM_BONESIZE) { + for(pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + bone = pchan->bone; if(bone->flag & BONE_TRANSFORM) - bone_children_clear_transflag(t, &bone->childbase); + bone_children_clear_transflag(mode, around, &bone->childbase); } - } + } /* now count, and check if we have autoIK or have to switch from translate to rotate */ - hastranslation= 0; + hastranslation = 0; - 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; if(bone->flag & BONE_TRANSFORM) { - t->total++; - - if(t->mode==TFM_TRANSLATION) { + total++; + + if(mode == TFM_TRANSLATION) { if( has_targetless_ik(pchan)==NULL ) { if(pchan->parent && (pchan->bone->flag & BONE_CONNECTED)) { if(pchan->bone->flag & BONE_HINGE_CHILD_TRANSFORM) - hastranslation= 1; + hastranslation = 1; } else if((pchan->protectflag & OB_LOCK_LOC)!=OB_LOCK_LOC) - hastranslation= 1; + hastranslation = 1; } else - hastranslation= 1; + hastranslation = 1; } } } /* if there are no translatable bones, do rotation */ - if(t->mode==TFM_TRANSLATION && !hastranslation) - t->mode= TFM_ROTATION; + if(mode == TFM_TRANSLATION && !hastranslation) + { + *out_mode = TFM_ROTATION; + } + + return total; } @@ -745,16 +749,16 @@ static void set_pose_transflags(TransInfo *t, Object *ob) 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) 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.0)) { 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 */ @@ -772,7 +776,7 @@ void transform_autoik_update (TransInfo *t, short mode) { short *chainlen= &t->settings->autoik_chainlen; bPoseChannel *pchan; - + /* mode determines what change to apply to chainlen */ if (mode == 1) { /* mode=1 is from WHEELMOUSEDOWN... increases len */ @@ -782,15 +786,15 @@ void transform_autoik_update (TransInfo *t, short mode) /* mode==-1 is from WHEELMOUSEUP... decreases len */ if (*chainlen > 0) (*chainlen)--; } - + /* sanity checks (don't assume t->poseobj is set, or that it is an armature) */ if (ELEM(NULL, t->poseobj, t->poseobj->pose)) return; - + /* apply to all pose-channels */ for (pchan=t->poseobj->pose->chanbase.first; pchan; pchan=pchan->next) { pchan_autoik_adjust(pchan, *chainlen); - } + } } /* frees temporal IKs */ @@ -799,11 +803,11 @@ static void pose_grab_with_ik_clear(Object *ob) bKinematicConstraint *data; bPoseChannel *pchan; bConstraint *con, *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->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET); /* remove all temporary IK-constraints added */ for (con= pchan->constraints.first; con; con= next) { @@ -830,11 +834,11 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) bKinematicConstraint *data; bConstraint *con; bConstraint *targetless = 0; - + /* Sanity check */ - if (pchan == NULL) + if (pchan == NULL) 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) { @@ -851,7 +855,7 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) return 0; } } - + con = add_new_constraint(CONSTRAINT_TYPE_KINEMATIC); BLI_addtail(&pchan->constraints, con); pchan->constflag |= (PCHAN_HAS_IK|PCHAN_HAS_TARGET); /* for draw, but also for detecting while pose solving */ @@ -864,22 +868,22 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) data->flag |= CONSTRAINT_IK_TEMP|CONSTRAINT_IK_AUTO; VECCOPY(data->grabtarget, pchan->pose_tail); data->rootbone= 1; - + /* we include only a connected chain */ while ((pchan) && (pchan->bone->flag & BONE_CONNECTED)) { /* here, we set ik-settings for bone from pchan->protectflag */ if (pchan->protectflag & OB_LOCK_ROTX) pchan->ikflag |= BONE_IK_NO_XDOF_TEMP; if (pchan->protectflag & OB_LOCK_ROTY) pchan->ikflag |= BONE_IK_NO_YDOF_TEMP; if (pchan->protectflag & OB_LOCK_ROTZ) pchan->ikflag |= BONE_IK_NO_ZDOF_TEMP; - + /* now we count this pchan as being included */ data->rootbone++; pchan= pchan->parent; } - + /* make a copy of maximum chain-length */ data->max_rootbone= data->rootbone; - + return 1; } @@ -901,7 +905,7 @@ static short pose_grab_with_ik_children(bPose *pose, Bone *bone) if (pchan) added+= pose_grab_with_ik_add(pchan); } - + return added; } @@ -912,12 +916,12 @@ static short pose_grab_with_ik(Object *ob) bPoseChannel *pchan, *parent; Bone *bonec; short tot_ik= 0; - + if ((ob==NULL) || (ob->pose==NULL) || (ob->flag & OB_POSEMODE)==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) { if (pchan->bone->layer & arm->layer) { @@ -930,7 +934,7 @@ static short pose_grab_with_ik(Object *ob) } 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) */ @@ -948,9 +952,9 @@ static short pose_grab_with_ik(Object *ob) } } } - + return (tot_ik) ? 1 : 0; -} +} /* only called with pose mode active object now */ @@ -962,13 +966,13 @@ static void createTransPose(bContext *C, TransInfo *t, Object *ob) TransDataExtension *tdx; short ik_on= 0; int i; - + t->total= 0; - + /* check validity of state */ arm= get_armature(ob); if ((arm==NULL) || (ob->pose==NULL)) return; - + if (arm->flag & ARM_RESTPOS) { if (ELEM(t->mode, TFM_DUMMY, TFM_BONESIZE)==0) { // XXX use transform operator reports @@ -982,15 +986,15 @@ static void createTransPose(bContext *C, TransInfo *t, Object *ob) ik_on= pose_grab_with_ik(ob); if (ik_on) t->flag |= T_AUTOIK; } - + /* set flags and count total (warning, can change transform to rotate) */ - set_pose_transflags(t, ob); - - if(t->total==0) return; + t->total = count_set_pose_transflags(&t->mode, t->around, ob); + + if(t->total == 0) return; t->flag |= T_POSE; 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"); @@ -998,8 +1002,8 @@ static void createTransPose(bContext *C, TransInfo *t, Object *ob) td->ext= tdx; td->tdi = NULL; td->val = NULL; - } - + } + /* use pose channels to fill trans data */ td= t->data; for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { @@ -1008,12 +1012,12 @@ static void createTransPose(bContext *C, TransInfo *t, Object *ob) td++; } } - + if(td != (t->data+t->total)) { // XXX use transform operator reports // BKE_report(op->reports, RPT_DEBUG, "Bone selection count error."); } - + /* initialise initial auto=ik chainlen's? */ if (ik_on) transform_autoik_update(t, 0); } @@ -1054,16 +1058,16 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) } if (!t->total) return; - + Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); 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 - + if(ebo->layer & arm->layer) { if (t->mode==TFM_BONE_ENVELOPE) { @@ -1071,17 +1075,17 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) { td->val= &ebo->rad_head; td->ival= *td->val; - + VECCOPY (td->center, ebo->head); td->flag= TD_SELECTED; - + Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(td->mtx, mtx); - + td->loc = NULL; td->ext = NULL; td->tdi = NULL; - + td++; } if (ebo->flag & BONE_TIPSEL) @@ -1090,17 +1094,17 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) td->ival= *td->val; VECCOPY (td->center, ebo->tail); td->flag= TD_SELECTED; - + Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(td->mtx, mtx); - + td->loc = NULL; td->ext = NULL; td->tdi = NULL; - + td++; } - + } else if (t->mode==TFM_BONESIZE) { @@ -1120,19 +1124,19 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) } VECCOPY (td->center, ebo->head); td->flag= TD_SELECTED; - + /* use local bone matrix */ - VecSubf(delta, ebo->tail, ebo->head); + VecSubf(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, bonemat); Mat3MulMat3(td->mtx, mtx, bonemat); Mat3Inv(td->smtx, td->mtx); - + Mat3CpyMat3(td->axismtx, td->mtx); Mat3Ortho(td->axismtx); td->ext = NULL; td->tdi = NULL; - + td++; } } @@ -1143,13 +1147,13 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) td->loc= NULL; td->val= &(ebo->roll); td->ival= ebo->roll; - + VECCOPY (td->center, ebo->head); td->flag= TD_SELECTED; td->ext = NULL; td->tdi = NULL; - + td++; } } @@ -1167,7 +1171,7 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(td->mtx, mtx); - VecSubf(delta, ebo->tail, ebo->head); + VecSubf(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, td->axismtx); if ((ebo->flag & BONE_ROOTSEL) == 0) @@ -1193,7 +1197,7 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(td->mtx, mtx); - VecSubf(delta, ebo->tail, ebo->head); + VecSubf(delta, ebo->tail, ebo->head); vec_roll_to_mat3(delta, ebo->roll, td->axismtx); td->extra = ebo; /* to fix roll */ @@ -1230,16 +1234,16 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) /* note: in prop mode we need at least 1 selected */ if (countsel==0) return; - - if(propmode) t->total = count; + + 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"); Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); - + for(ml= editelems.first; ml; ml= ml->next) { if(propmode || (ml->flag & SELECT)) { td->loc= &ml->x; @@ -1357,7 +1361,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) /* to be sure */ if(cu->editnurb==NULL) return; - + /* count total of vertices, check identical as in 2nd loop for making transdata! */ for(nu= cu->editnurb->first; nu; nu= nu->next) { if((nu->type & 7)==CU_BEZIER) { @@ -1386,14 +1390,14 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) } /* note: in prop mode we need at least 1 selected */ if (countsel==0) return; - - if(propmode) t->total = count; + + if(propmode) t->total = count; else t->total = countsel; t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Curve EditMode)"); Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); - + td = t->data; for(nu= cu->editnurb->first; nu; nu= nu->next) { if((nu->type & 7)==CU_BEZIER) { @@ -1402,7 +1406,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) for(a=0, bezt= nu->bezt; apntsu; a++, bezt++) { if(bezt->hide==0) { TransDataCurveHandleFlags *hdata = NULL; - + if( propmode || ((bezt->f2 & SELECT) && (G.f & G_HIDDENHANDLES)) || ((bezt->f1 & SELECT) && (G.f & G_HIDDENHANDLES)==0) @@ -1420,7 +1424,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) td->ext = NULL; td->tdi = NULL; td->val = NULL; - + hdata = initTransDataCurveHandes(td, bezt); Mat3CpyMat3(td->smtx, smtx); @@ -1430,7 +1434,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) count++; tail++; } - + /* This is the Curve Point, the other two are handles */ if(propmode || (bezt->f2 & SELECT)) { VECCOPY(td->iloc, bezt->vec[1]); @@ -1440,7 +1444,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) else td->flag= 0; td->ext = NULL; td->tdi = NULL; - + if (t->mode==TFM_CURVE_SHRINKFATTEN) { /* || t->mode==TFM_RESIZE) {*/ /* TODO - make points scale */ td->val = &(bezt->radius); td->ival = bezt->radius; @@ -1453,13 +1457,13 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(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 = initTransDataCurveHandes(td, bezt); } - + td++; count++; tail++; @@ -1485,7 +1489,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) if (hdata==NULL) { /* if the handle was not saved by the previous handle */ hdata = initTransDataCurveHandes(td, bezt); } - + Mat3CpyMat3(td->smtx, smtx); Mat3CpyMat3(td->mtx, mtx); @@ -1501,7 +1505,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) } if (propmode && head != tail) calc_distanceCurveVerts(head, tail-1); - + /* TODO - in the case of tilt and radius we can also avoid allocating the initTransDataCurveHandes * but for now just dont change handle types */ if (ELEM(t->mode, TFM_CURVE_SHRINKFATTEN, TFM_TILT) == 0) @@ -1520,7 +1524,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) else td->flag= 0; td->ext = NULL; td->tdi = NULL; - + if (t->mode==TFM_CURVE_SHRINKFATTEN || t->mode==TFM_RESIZE) { td->val = &(bp->radius); td->ival = bp->radius; @@ -1569,14 +1573,14 @@ static void createTransLatticeVerts(bContext *C, TransInfo *t) } bp++; } - + /* note: in prop mode we need at least 1 selected */ if (countsel==0) return; - - if(propmode) t->total = count; + + if(propmode) t->total = count; else t->total = countsel; t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Lattice EditMode)"); - + Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); @@ -1654,10 +1658,10 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) pa->flag |= PARS_TRANSFORM; } } - + /* 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)"); @@ -1795,13 +1799,13 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v /* Floodfill routine */ /* - At worst this is n*n of complexity where n is number of edges + At worst this is n*n of complexity where n is number of edges Best case would be n if the list is ordered perfectly. Estimate is n log n in average (so not too bad) */ while(done) { done= 0; - + for(eed= em->edges.first; eed; eed= eed->next) { if(eed->h==0) { EditVert *v1= eed->v1, *v2= eed->v2; @@ -1882,7 +1886,7 @@ static void editmesh_set_connectivity_distance(EditMesh *em, int total, float *v static void get_face_center(float *cent, EditMesh *em, EditVert *eve) { EditFace *efa; - + for(efa= em->faces.first; efa; efa= efa->next) if(efa->f & SELECT) if(efa->v1==eve || efa->v2==eve || efa->v3==eve || efa->v4==eve) @@ -1901,7 +1905,7 @@ static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert // td->loc = key->co; //else td->loc = eve->co; - + VECCOPY(td->center, td->loc); if(t->around==V3D_LOCAL && (em->selectmode & SCE_SELECT_FACE)) get_face_center(td->center, em, eve); @@ -1931,7 +1935,7 @@ static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert static void make_vertexcos__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) { float *vec = userData; - + vec+= 3*index; VECCOPY(vec, co); } @@ -1940,14 +1944,14 @@ static int modifiers_disable_subsurf_temporary(Object *ob) { ModifierData *md; int disabled = 0; - + for(md=ob->modifiers.first; md; md=md->next) if(md->type==eModifierType_Subsurf) if(md->mode & eModifierMode_OnCage) { md->mode ^= eModifierMode_DisableTemporary; disabled= 1; } - + return disabled; } @@ -1969,12 +1973,12 @@ static float *get_crazy_mapped_editverts(TransInfo *t) vertexcos= MEM_mallocN(3*sizeof(float)*me->edit_mesh->totvert, "vertexcos map"); dm->foreachMappedVert(dm, make_vertexcos__mapFunc, vertexcos); - + dm->release(dm); - + /* set back the flag, no new cage needs to be built, transform does it */ modifiers_disable_subsurf_temporary(t->obedit); - + return vertexcos; } @@ -1983,15 +1987,15 @@ static void set_crazy_vertex_quat(float *quat, float *v1, float *v2, float *v3, { float vecu[3], vecv[3]; float q1[4], q2[4]; - + TAN_MAKE_VEC(vecu, v1, v2); TAN_MAKE_VEC(vecv, v1, v3); triatoquat(v1, vecu, vecv, q1); - + TAN_MAKE_VEC(vecu, def1, def2); TAN_MAKE_VEC(vecv, def1, def3); triatoquat(def1, vecu, vecv, q2); - + QuatSub(quat, q2, q1); } #undef TAN_MAKE_VEC @@ -2002,16 +2006,16 @@ static void set_crazyspace_quats(EditMesh *em, float *origcos, float *mappedcos, EditFace *efa; float *v1, *v2, *v3, *v4, *co1, *co2, *co3, *co4; intptr_t index= 0; - + /* two abused locations in vertices */ for(eve= em->verts.first; eve; eve= eve->next, index++) { eve->tmp.p = NULL; eve->prev= (EditVert *)index; } - + /* first store two sets of tangent vectors in vertices, we derive it just from the face-edges */ for(efa= em->faces.first; efa; efa= efa->next) { - + /* retrieve mapped coordinates */ v1= mappedcos + 3*(intptr_t)(efa->v1->prev); v2= mappedcos + 3*(intptr_t)(efa->v2->prev); @@ -2026,7 +2030,7 @@ static void set_crazyspace_quats(EditMesh *em, float *origcos, float *mappedcos, efa->v2->tmp.p= (void*)quats; quats+= 4; } - + if(efa->v4) { v4= mappedcos + 3*(intptr_t)(efa->v4->prev); co4= (origcos)? origcos + 3*(intptr_t)(efa->v4->prev): efa->v4->co; @@ -2114,7 +2118,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) // transform now requires awareness for select mode, so we tag the f1 flags in verts if(ts->selectmode & SCE_SELECT_VERTEX) { for(eve= em->verts.first; eve; eve= eve->next) { - if(eve->h==0 && (eve->f & SELECT)) + if(eve->h==0 && (eve->f & SELECT)) eve->f1= SELECT; else eve->f1= 0; @@ -2138,7 +2142,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } } } - + /* now we can count */ for(eve= em->verts.first; eve; eve= eve->next) { if(eve->h==0) { @@ -2146,10 +2150,10 @@ static void createTransEditVerts(bContext *C, TransInfo *t) if(propmode) count++; } } - + /* note: in prop mode we need at least 1 selected */ if (countsel==0) return; - + /* check active */ if (em->selected.last) { EditSelection *ese = em->selected.last; @@ -2158,22 +2162,22 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } } - + if(propmode) { - t->total = count; - + t->total = count; + /* allocating scratch arrays */ vectors = (float *)MEM_mallocN(t->total * 3 * sizeof(float), "scratch vectors"); nears = (EditVert**)MEM_mallocN(t->total * sizeof(EditVert*), "scratch nears"); } else t->total = countsel; tob= t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Mesh EditMode)"); - + Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); if(propmode) editmesh_set_connectivity_distance(em, t->total, vectors, nears); - + /* detect CrazySpace [tm] */ if(propmode==0) { if(modifiers_getCageIndex(t->obedit, NULL)>=0) { @@ -2198,7 +2202,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } } } - + /* find out which half we do */ if(mirror) { for (eve=em->verts.first; eve; eve=eve->next) { @@ -2209,18 +2213,18 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } } } - + for (a=0, eve=em->verts.first; eve; eve=eve->next, a++) { if(eve->h==0) { if(propmode || eve->f1) { VertsToTransData(t, tob, em, eve); - + /* selected */ if(eve->f1) tob->flag |= TD_SELECTED; - + /* active */ if(eve == eve_act) tob->flag |= TD_ACTIVE; - + if(propmode) { if (eve->f2) { float vec[3]; @@ -2233,11 +2237,11 @@ static void createTransEditVerts(bContext *C, TransInfo *t) tob->dist = MAXFLOAT; } } - + /* CrazySpace */ if(defmats || (quats && eve->tmp.p)) { float mat[3][3], imat[3][3], qmat[3][3]; - + /* use both or either quat and defmat correction */ if(quats && eve->tmp.f) { QuatToMat3(eve->tmp.p, qmat); @@ -2252,7 +2256,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) Mat3MulMat3(mat, mtx, defmats[a]); Mat3Inv(imat, mat); - + Mat3CpyMat3(tob->smtx, imat); Mat3CpyMat3(tob->mtx, mat); } @@ -2260,7 +2264,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) Mat3CpyMat3(tob->smtx, smtx); Mat3CpyMat3(tob->mtx, mtx); } - + /* Mirror? */ if( (mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) { EditVert *vmir= editmesh_get_x_mirror_vert(t->obedit, em, tob->iloc); /* initializes octree on first call */ @@ -2268,7 +2272,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } tob++; } - } + } } if (propmode) { MEM_freeN(vectors); @@ -2286,7 +2290,7 @@ void flushTransNodes(TransInfo *t) { int a; TransData2D *td; - + /* flush to 2d vector from internally used 3d vector */ for(a=0, td= t->data2d; atotal; a++, td++) { td->loc2d[0]= td->loc[0]; @@ -2304,7 +2308,7 @@ void flushTransSeq(TransInfo *t) TransDataSeq *tdsq= NULL; Sequence *seq; - + /* prevent updating the same seq twice * if the transdata order is changed this will mess up @@ -2322,7 +2326,7 @@ void flushTransSeq(TransInfo *t) case SELECT: if (seq->type != SEQ_META && seq_tx_test(seq)) /* for meta's, their children move */ seq->start= new_frame - tdsq->start_offset; - + if (seq->depth==0) { seq->machine= (int)(td2d->loc[1] + 0.5f); CLAMP(seq->machine, 1, MAXSEQ); @@ -2346,7 +2350,7 @@ void flushTransSeq(TransInfo *t) * children are ALWAYS transformed first * so we dont need to do this in another loop. */ calc_sequence(seq); - + /* test overlap, displayes red outline */ seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(seqbasep, seq) ) { @@ -2423,7 +2427,7 @@ static void createTransUVs(bContext *C, TransInfo *t) EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh; EditFace *efa; - + if(!ED_uvedit_test(t->obedit)) return; /* count */ @@ -2432,10 +2436,10 @@ static void createTransUVs(bContext *C, TransInfo *t) if(uvedit_face_visible(scene, ima, efa, tf)) { efa->tmp.p = tf; - - if (uvedit_uv_selected(scene, efa, tf, 0)) countsel++; - if (uvedit_uv_selected(scene, efa, tf, 1)) countsel++; - if (uvedit_uv_selected(scene, efa, tf, 2)) countsel++; + + if (uvedit_uv_selected(scene, efa, tf, 0)) countsel++; + if (uvedit_uv_selected(scene, efa, tf, 1)) countsel++; + if (uvedit_uv_selected(scene, efa, tf, 2)) countsel++; if (efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) countsel++; if(propmode) count += (efa->v4)? 4: 3; @@ -2443,10 +2447,10 @@ static void createTransUVs(bContext *C, TransInfo *t) efa->tmp.p = NULL; } } - + /* 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)"); /* for each 2d uv coord a 3d vector is allocated, so that they can be @@ -2458,7 +2462,7 @@ static void createTransUVs(bContext *C, TransInfo *t) td= t->data; td2d= t->data2d; - + for (efa= em->faces.first; efa; efa= efa->next) { if ((tf=(MTFace *)efa->tmp.p)) { if (propmode) { @@ -2475,7 +2479,7 @@ static void createTransUVs(bContext *C, TransInfo *t) } } } - + if (sima->flag & SI_LIVE_UNWRAP) ED_uvedit_live_unwrap_begin(t->scene, t->obedit); } @@ -2496,7 +2500,7 @@ void flushTransUVs(TransInfo *t) for(a=0, td= t->data2d; atotal; 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; @@ -2547,7 +2551,7 @@ int clipUVTransform(TransInfo *t, float *vec, int resize) vec[1] -= max[1]-aspy; else clipy= 0; - } + } return (clipx || clipy); } @@ -2559,7 +2563,7 @@ static short FrameOnMouseSide(char side, float frame, float cframe) { /* both sides, so it doesn't matter */ if (side == 'B') return 1; - + /* only on the named side */ if (side == 'R') return (frame >= cframe) ? 1 : 0; @@ -2574,28 +2578,28 @@ static void createTransNlaData(bContext *C, TransInfo *t) Scene *scene= CTX_data_scene(C); TransData *td = NULL; TransDataNla *tdn = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + int count=0; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - + /* which side of the current frame should be allowed */ if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -2603,15 +2607,15 @@ static void createTransNlaData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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; 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) { // TODO: we can make strips have handles later on... @@ -2624,29 +2628,29 @@ static void createTransNlaData(bContext *C, TransInfo *t) } } } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ 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; - + /* loop 2: build transdata array */ for (ale= anim_data.first; ale; ale= ale->next) { /* only if a real NLA-track */ if (ale->type == ANIMTYPE_NLATRACK) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; - + /* only consider selected strips */ for (strip= nlt->strips.first; strip; strip= strip->next) { // TODO: we can make strips have handles later on... @@ -2663,44 +2667,44 @@ static void createTransNlaData(bContext *C, TransInfo *t) * cases, there will need to be 1 of these tdn elements in the array skipped... */ float center[3], yval; - + /* firstly, init tdn settings */ tdn->oldTrack= tdn->nlt= nlt; tdn->strip= strip; tdn->trackIndex= BLI_findindex(&nlt->strips, strip); - + yval= (float)(tdn->trackIndex * NLACHANNEL_STEP); - + 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(side, strip->start, (float)CFRA)) + if (FrameOnMouseSide(side, strip->start, (float)CFRA)) { /* just set tdn to assume that it only has one handle for now */ tdn->handle= -1; - + /* now, link the transform data up to this data */ if (t->mode == TFM_TRANSLATION) { td->loc= tdn->h1; VECCOPY(td->iloc, tdn->h1); - + /* store all the other gunk that is required by transform */ VECCOPY(td->center, center); memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - + td->ext= NULL; td->tdi= NULL; td->val= NULL; - + td->flag |= TD_SELECTED; td->dist= 0.0f; - + Mat3One(td->mtx); Mat3One(td->smtx); } @@ -2708,30 +2712,30 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->val= &tdn->h1[0]; td->ival= tdn->h1[0]; } - + td->extra= tdn; td++; } - if (FrameOnMouseSide(side, strip->end, (float)CFRA)) - { + if (FrameOnMouseSide(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; - + /* now, link the transform data up to this data */ if (t->mode == TFM_TRANSLATION) { td->loc= tdn->h2; VECCOPY(td->iloc, tdn->h2); - + /* store all the other gunk that is required by transform */ VECCOPY(td->center, center); memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - + td->ext= NULL; td->tdi= NULL; td->val= NULL; - + td->flag |= TD_SELECTED; td->dist= 0.0f; - + Mat3One(td->mtx); Mat3One(td->smtx); } @@ -2739,12 +2743,12 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->val= &tdn->h2[0]; td->ival= tdn->h2[0]; } - + td->extra= tdn; td++; } - - /* if both handles were used, skip the next tdn (i.e. leave it blank) since the counting code is dumb... + + /* if both handles were used, skip the next tdn (i.e. leave it blank) since the counting code is dumb... * otherwise, just advance to the next one... */ if (tdn->handle == 2) @@ -2756,7 +2760,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) } } } - + /* cleanup temp list */ BLI_freelistN(&anim_data); } @@ -2772,25 +2776,25 @@ static void createTransNlaData(bContext *C, TransInfo *t) static void posttrans_gpd_clean (bGPdata *gpd) { bGPDlayer *gpl; - + for (gpl= gpd->layers.first; gpl; gpl= gpl->next) { ListBase sel_buffer = {NULL, NULL}; bGPDframe *gpf, *gpfn; bGPDframe *gfs, *gfsn; - - /* loop 1: loop through and isolate selected gp-frames to buffer + + /* 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; - + if (gpf->flag & GP_FRAME_SELECT) { BLI_remlink(&gpl->frames, gpf); - + /* 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 + * so doing it this way will be faster */ for (gfs= sel_buffer.last; gfs; gfs= gfs->prev) { /* if current (gpf) occurs after this one in buffer, add! */ @@ -2804,27 +2808,27 @@ static void posttrans_gpd_clean (bGPdata *gpd) BLI_addhead(&sel_buffer, gpf); } } - + /* 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. 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; - + continue; } - + /* loop 2: remove duplicates of frames in buffers */ 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; - + /* if this buffer frame needs to go before current, add it! */ if (gfs->framenum < gpf->framenum) { /* transfer buffer frame to frames list (before current) */ @@ -2836,18 +2840,18 @@ static void posttrans_gpd_clean (bGPdata *gpd) /* transfer buffer frame to frames list (before current) */ BLI_remlink(&sel_buffer, gfs); BLI_insertlinkbefore(&gpl->frames, gpf, gfs); - + /* get rid of current frame */ // TRANSFORM_FIX_ME //gpencil_layer_delframe(gpl, gpf); } } } - + /* if anything is still in buffer, append to end */ for (gfs= sel_buffer.first; gfs; gfs= gfsn) { gfsn= gfs->next; - + BLI_remlink(&sel_buffer, gfs); BLI_addtail(&gpl->frames, gfs); } @@ -2862,36 +2866,36 @@ static void posttrans_fcurve_clean (FCurve *fcu) { float *selcache; /* cache for frame numbers of selected frames (icu->totvert*sizeof(float)) */ int len, index, i; /* number of frames in cache, item index */ - + /* allocate memory for the cache */ // TODO: investigate using GHash for this instead? - if (fcu->totvert == 0) + if (fcu->totvert == 0) return; 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 + + /* 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 * they have been sorted by time. */ - + /* Loop 1: find selected keyframes */ for (i = 0; i < fcu->totvert; i++) { BezTriple *bezt= &fcu->bezt[i]; - + if (BEZSELECTED(bezt)) { selcache[index]= bezt->vec[1][0]; index++; len++; } } - + /* Loop 2: delete unselected keyframes on the same frames (if any keyframes were found) */ if (len) { for (i = 0; i < fcu->totvert; i++) { BezTriple *bezt= &fcu->bezt[i]; - + if (BEZSELECTED(bezt) == 0) { /* check beztriple should be removed according to cache */ for (index= 0; index < len; index++) { @@ -2904,10 +2908,10 @@ static void posttrans_fcurve_clean (FCurve *fcu) } } } - + testhandles_fcurve(fcu); } - + /* free cache */ MEM_freeN(selcache); } @@ -2916,33 +2920,33 @@ static void posttrans_fcurve_clean (FCurve *fcu) /* Called by special_aftertrans_update to make sure selected keyframes replace * any other keyframes which may reside on that frame (that is not selected). - * remake_action_ipos should have already been called + * remake_action_ipos should have already been called */ static void posttrans_action_clean (bAnimContext *ac, bAction *act) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(ac, &anim_data, filter, act, ANIMCONT_ACTION); - - /* loop through relevant data, removing keyframes from the ipo-blocks that were attached - * - all keyframes are converted in/out of global time + + /* loop through relevant data, removing keyframes from the ipo-blocks that were attached + * - 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); - + if (adt) { - ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); + ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); posttrans_fcurve_clean(ale->key_data); ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } - else + else posttrans_fcurve_clean(ale->key_data); } - + /* free temp data */ BLI_freelistN(&anim_data); } @@ -2954,23 +2958,23 @@ static int count_fcurve_keys(FCurve *fcu, char side, float cfra) { BezTriple *bezt; int i, count = 0; - + if (ELEM(NULL, fcu, fcu->bezt)) return count; - + /* only include points that occur on the right side of cfra */ for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { if (bezt->f2 & SELECT) { /* fully select the other two keys */ bezt->f1 |= SELECT; bezt->f3 |= SELECT; - + /* increment by 3, as there are 3 points (3 * x-coordinates) that need transform */ if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) count += 3; } } - + return count; } @@ -2980,10 +2984,10 @@ static int count_gplayer_frames(bGPDlayer *gpl, char side, float cfra) { bGPDframe *gpf; int count = 0; - + if (gpl == NULL) return count; - + /* only include points that occur on the right side of cfra */ for (gpf= gpl->frames.first; gpf; gpf= gpf->next) { if (gpf->flag & GP_FRAME_SELECT) { @@ -2991,7 +2995,7 @@ static int count_gplayer_frames(bGPDlayer *gpl, char side, float cfra) count++; } } - + return count; } #endif @@ -3002,9 +3006,9 @@ static void TimeToTransData(TransData *td, float *time, AnimData *adt) /* memory is calloc'ed, so that should zero everything nicely for us */ td->val = time; td->ival = *(time); - - /* store the AnimData where this keyframe exists as a keyframe of the - * active action as td->extra. + + /* store the AnimData where this keyframe exists as a keyframe of the + * active action as td->extra. */ td->extra= adt; } @@ -3014,16 +3018,16 @@ static void TimeToTransData(TransData *td, float *time, AnimData *adt) * overwrite the existing ones... i.e. td = IcuToTransData(td, icu, ob, side, cfra); * * The 'side' argument is needed for the extend mode. 'B' = both sides, 'R'/'L' mean only data - * on the named side are used. + * on the named side are used. */ static TransData *FCurveToTransData(TransData *td, FCurve *fcu, AnimData *adt, char side, float cfra) { BezTriple *bezt; int i; - + if (fcu == NULL) return td; - + for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { /* only add selected keyframes (for now, proportional edit is not enabled) */ if (BEZSELECTED(bezt)) { @@ -3032,16 +3036,16 @@ static TransData *FCurveToTransData(TransData *td, FCurve *fcu, AnimData *adt, c /* each control point needs to be added separetely */ TimeToTransData(td, bezt->vec[0], adt); td++; - + TimeToTransData(td, bezt->vec[1], adt); td++; - + TimeToTransData(td, bezt->vec[2], adt); td++; } - } + } } - + return td; } @@ -3056,17 +3060,17 @@ void flushTransGPactionData (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 ); else tfd= (tGPFtransdata *)(t->customData); - + /* flush data! */ for (i = 0; i < t->total; i++, tfd++) { *(tfd->sdata)= (int)floor(tfd->val + 0.5); - } + } } /* This function advances the address to which td points to, so it must return @@ -3074,14 +3078,14 @@ void flushTransGPactionData (TransInfo *t) * overwrite the existing ones... i.e. td = GPLayerToTransData(td, ipo, ob, side, cfra); * * The 'side' argument is needed for the extend mode. 'B' = both sides, 'R'/'L' mean only data - * on the named side are used. + * on the named side are used. */ #if 0 static int GPLayerToTransData (TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl, char side, float cfra) { bGPDframe *gpf; int count= 0; - + /* check for select frames on right side of current frame */ for (gpf= gpl->frames.first; gpf; gpf= gpf->next) { if (gpf->flag & GP_FRAME_SELECT) { @@ -3089,10 +3093,10 @@ static int GPLayerToTransData (TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl /* memory is calloc'ed, so that should zero everything nicely for us */ td->val= &tfd->val; td->ival= (float)gpf->framenum; - + tfd->val= (float)gpf->framenum; tfd->sdata= &gpf->framenum; - + /* advance td now */ td++; tfd++; @@ -3100,7 +3104,7 @@ static int GPLayerToTransData (TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl } } } - + return count; } #endif @@ -3110,32 +3114,32 @@ static void createTransActionData(bContext *C, TransInfo *t) Scene *scene= CTX_data_scene(C); TransData *td = NULL; tGPFtransdata *tfd = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + int count=0; float cfra; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ if (ac.datatype == ANIMCONT_GPENCIL) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_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 */ if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -3143,38 +3147,38 @@ static void createTransActionData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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); - + /* convert current-frame to action-time (slightly less accurate, espcially under - * higher scaling ratios, but is faster than converting all points) + * higher scaling ratios, but is faster than converting all points) */ - if (adt) + if (adt) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + //if (ale->type == ANIMTYPE_GPLAYER) // count += count_gplayer_frames(ale->data, side, cfra); //else count += count_fcurve_keys(ale->key_data, side, cfra); } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ t->total= count; - + t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(Action Editor)"); td= t->data; - + if (ac.datatype == ANIMCONT_GPENCIL) { if (t->mode == TFM_TIME_SLIDE) { t->customData= MEM_callocN((sizeof(float)*2)+(sizeof(tGPFtransdata)*count), "TimeSlide + tGPFtransdata"); @@ -3187,13 +3191,13 @@ static void createTransActionData(bContext *C, TransInfo *t) } else if (t->mode == TFM_TIME_SLIDE) t->customData= MEM_callocN(sizeof(float)*2, "TimeSlide Min/Max"); - + /* loop 2: build transdata array */ for (ale= anim_data.first; ale; ale= ale->next) { //if (ale->type == ANIMTYPE_GPLAYER) { // bGPDlayer *gpl= (bGPDlayer *)ale->data; // int i; - // + // // i = GPLayerToTransData(td, tfd, gpl, side, cfra); // td += i; // tfd += i; @@ -3201,38 +3205,38 @@ static void createTransActionData(bContext *C, TransInfo *t) //else { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - + /* convert current-frame to action-time (slightly less accurate, espcially under - * higher scaling ratios, but is faster than converting all points) + * higher scaling ratios, but is faster than converting all points) */ - if (adt) + if (adt) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + td= FCurveToTransData(td, fcu, adt, 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; int i; - + td= (t->data + 1); for (i=1; i < count; i+=3, td+=3) { if (min > *(td->val)) min= *(td->val); if (max < *(td->val)) max= *(td->val); } - - /* minx/maxx values used by TimeSlide are stored as a + + /* minx/maxx values used by TimeSlide are stored as a * calloced 2-float array in t->customData. This gets freed - * in postTrans (T_FREE_CUSTOMDATA). + * in postTrans (T_FREE_CUSTOMDATA). */ *((float *)(t->customData)) = min; *((float *)(t->customData) + 1) = max; } - + /* cleanup temp list */ BLI_freelistN(&anim_data); } @@ -3250,18 +3254,18 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, * Due to NLA mapping, we apply NLA mapping to some of the verts here, * and then that mapping will be undone after transform is done. */ - + if (adt) { td2d->loc[0] = BKE_nla_tweakedit_remap(adt, loc[0], NLATIME_CONVERT_UNMAP); td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; - + td->loc = td2d->loc; td->center[0] = BKE_nla_tweakedit_remap(adt, cent[0], NLATIME_CONVERT_UNMAP); td->center[1] = cent[1]; td->center[2] = 0.0f; - + VECCOPY(td->iloc, td->loc); } else { @@ -3269,7 +3273,7 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; - + td->loc = td2d->loc; VECCOPY(td->center, cent); VECCOPY(td->iloc, td->loc); @@ -3279,7 +3283,7 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, td->axismtx[2][2] = 1.0f; td->ext= NULL; td->tdi= NULL; td->val= NULL; - + /* store AnimData info in td->extra, for applying mapping when flushing */ td->extra= adt; @@ -3289,49 +3293,49 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, } else td->dist= MAXFLOAT; - - if (ishandle) + + if (ishandle) td->flag |= TD_NOTIMESNAP; if (intvals) td->flag |= TD_INTVALUES; - + Mat3One(td->mtx); Mat3One(td->smtx); -} +} static void createTransGraphEditData(bContext *C, TransInfo *t) { Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); View2D *v2d= &ar->v2d; - + TransData *td = NULL; TransData2D *td2d = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + BezTriple *bezt, *prevbezt; int count=0, i; float cfra; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); 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? if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -3339,20 +3343,20 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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; - + /* convert current-frame to action-time (slightly less accurate, espcially under - * higher scaling ratios, but is faster than converting all points) + * higher scaling ratios, but is faster than converting all points) */ - if (adt) + if (adt) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */ if (fcu->bezt) { for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { @@ -3380,47 +3384,47 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } } } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ 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)"); - + td= t->data; td2d= t->data2d; - + /* 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); - + /* convert current-frame to action-time (slightly less accurate, espcially under - * higher scaling ratios, but is faster than converting all points) + * higher scaling ratios, but is faster than converting all points) */ - if (adt) + if (adt) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse (if applicable) */ bezt= fcu->bezt; prevbezt= NULL; - + for (i=0; i < fcu->totvert; i++, prevbezt=bezt, bezt++) { if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) { TransDataCurveHandleFlags *hdata = NULL; short h1=1, h2=1; - + /* only include handles if selected, and interpolaton mode uses beztriples */ if ( (!prevbezt && (bezt->ipo==BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo==BEZT_IPO_BEZ)) ) { if (bezt->f1 & SELECT) { @@ -3439,7 +3443,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) else h2= 0; } - + /* only include main vert if selected */ if (bezt->f2 & SELECT) { /* if scaling around individuals centers, do no include keyframes */ @@ -3449,13 +3453,13 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) if (hdata == NULL) hdata = initTransDataCurveHandes(td, bezt); } - + bezt_to_transdata(td++, td2d++, adt, bezt->vec[1], bezt->vec[1], 1, 0, intvals); } - - /* special hack (must be done after initTransDataCurveHandes(), as that stores handle settings to restore...): - * - Check if we've got entire BezTriple selected and we're scaling/rotating that point, - * then check if we're using auto-handles. + + /* special hack (must be done after initTransDataCurveHandes(), as that stores handle settings to restore...): + * - Check if we've got entire BezTriple selected and we're scaling/rotating that point, + * then check if we're using auto-handles. * - If so, change them auto-handles to aligned handles so that handles get affected too */ if ((bezt->h1 == HD_AUTO) && (bezt->h2 == HD_AUTO) && ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) { @@ -3467,11 +3471,11 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } } } - + /* Sets handles based on the selection */ - testhandles_fcurve(fcu); + testhandles_fcurve(fcu); } - + /* cleanup temp list */ BLI_freelistN(&anim_data); } @@ -3498,23 +3502,23 @@ static BeztMap *bezt_to_beztmaps (BezTriple *bezts, int totvert) BezTriple *prevbezt= NULL; BeztMap *bezm, *bezms; int i; - + /* allocate memory for this array */ if (totvert==0 || bezts==NULL) return NULL; 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; - + bezm->oldIndex= i; bezm->newIndex= i; - + bezm->pipo= (prevbezt) ? prevbezt->ipo : bezt->ipo; bezm->cipo= bezt->ipo; } - + return bezms; } @@ -3523,11 +3527,11 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) { BeztMap *bezm; int i, ok= 1; - + /* keep repeating the process until nothing is out of place anymore */ while (ok) { ok= 0; - + bezm= bezms; i= totvert; while (i--) { @@ -3536,18 +3540,18 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) if (bezm->bezt->vec[1][0] > (bezm+1)->bezt->vec[1][0]) { bezm->newIndex++; (bezm+1)->newIndex--; - + SWAP(BeztMap, *bezm, *(bezm+1)); - + ok= 1; } } - + /* do we need to check if the handles need to be swapped? * optimisation: this only needs to be performed in the first loop */ if (bezm->swapHs == 0) { - if ( (bezm->bezt->vec[0][0] > bezm->bezt->vec[1][0]) && + if ( (bezm->bezt->vec[0][0] > bezm->bezt->vec[1][0]) && (bezm->bezt->vec[2][0] < bezm->bezt->vec[1][0]) ) { /* handles need to be swapped */ @@ -3558,9 +3562,9 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) bezm->swapHs = -1; } } - + bezm++; - } + } } } @@ -3572,24 +3576,24 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv TransData2D *td; int i, j; char *adjusted; - - /* dynamically allocate an array of chars to mark whether an TransData's + + /* dynamically allocate an array of chars to mark whether an TransData's * pointers have been fixed already, so that we don't override ones that are * already done */ 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++) { - /* loop through transdata, testing if we have a hit + /* 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... */ td= t->data2d; for (j= 0; j < t->total; j++, td++) { /* skip item if already marked */ if (adjusted[j] != 0) continue; - + /* only selected verts */ if (bezm->pipo == BEZT_IPO_BEZ) { if (bezm->bezt->f1 & SELECT) { @@ -3620,42 +3624,42 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv } } } - + } - + /* free temp memory used for 'adjusted' array */ MEM_freeN(adjusted); } -/* This function is called by recalcData during the Transform loop to recalculate +/* This function is called by recalcData during the Transform loop to recalculate * the handles of curves and sort the keyframes so that the curves draw correctly. * It is only called if some keyframes have moved out of order. * - * anim_data is the list of channels (F-Curves) retrieved already containing the + * anim_data is the list of channels (F-Curves) retrieved already containing the * channels to work on. It should not be freed here as it may still need to be used. */ void remake_graph_transdata (TransInfo *t, ListBase *anim_data) { bAnimListElem *ale; - + /* sort and reassign verts */ for (ale= anim_data->first; ale; ale= ale->next) { FCurve *fcu= (FCurve *)ale->key_data; - + if (fcu->bezt) { BeztMap *bezm; - + /* adjust transform-data pointers */ bezm= bezt_to_beztmaps(fcu->bezt, fcu->totvert); sort_time_beztmaps(bezm, fcu->totvert); beztmap_to_data(t, fcu, bezm, fcu->totvert); - + /* free mapping stuff */ MEM_freeN(bezm); - + /* re-sort actual beztriples (perhaps this could be done using the beztmaps to save time?) */ sort_time_fcurve(fcu); - + /* make sure handles are all set correctly */ testhandles_fcurve(fcu); } @@ -3663,7 +3667,7 @@ void remake_graph_transdata (TransInfo *t, ListBase *anim_data) } /* this function is called on recalcData to apply the transforms applied - * to the transdata on to the actual keyframe data + * to the transdata on to the actual keyframe data */ void flushTransGraphData(TransInfo *t) { @@ -3673,13 +3677,13 @@ void flushTransGraphData(TransInfo *t) 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; atotal; 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 + + /* 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) { @@ -3690,19 +3694,19 @@ void flushTransGraphData(TransInfo *t) else td2d->loc[0]= (float)( floor(td2d->loc[0]+0.5f) ); break; - + case SACTSNAP_MARKER: /* snap to nearest marker */ td2d->loc[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, td2d->loc[0]); break; } } - + /* we need to unapply the nla-scaling from the time in some situations */ if (adt) td2d->loc2d[0]= BKE_nla_tweakedit_remap(adt, td2d->loc[0], NLATIME_CONVERT_UNMAP); else td2d->loc2d[0]= td2d->loc[0]; - + /* if int-values only, truncate to integers */ if (td->flag & TD_INTVALUES) td2d->loc2d[1]= (float)((int)td2d->loc[1]); @@ -3739,13 +3743,13 @@ static void ipokey_to_transdata(IpoKey *ik, TransData *td) TransDataIpokey *tdi= td->tdi; BezTriple *bezt; int a, delta= 0; - + td->val= NULL; // is read on ESC - + for(a=0; adata[a]) { bezt= ik->data[a]; - + switch( ob_ar[a] ) { case OB_LOC_X: case OB_DLOC_X: @@ -3756,7 +3760,7 @@ static void ipokey_to_transdata(IpoKey *ik, TransData *td) case OB_LOC_Z: case OB_DLOC_Z: tdi->locz= &(bezt->vec[1][1]); break; - + case OB_DROT_X: delta= 1; case OB_ROT_X: @@ -3769,7 +3773,7 @@ static void ipokey_to_transdata(IpoKey *ik, TransData *td) delta= 1; case OB_ROT_Z: tdi->rotz= &(bezt->vec[1][1]); break; - + case OB_SIZE_X: case OB_DSIZE_X: tdi->sizex= &(bezt->vec[1][1]); break; @@ -3778,26 +3782,26 @@ static void ipokey_to_transdata(IpoKey *ik, TransData *td) tdi->sizey= &(bezt->vec[1][1]); break; case OB_SIZE_Z: case OB_DSIZE_Z: - tdi->sizez= &(bezt->vec[1][1]); break; - } + tdi->sizez= &(bezt->vec[1][1]); break; + } } } - + /* oldvals for e.g. undo */ if(tdi->locx) set_tdi_old(tdi->oldloc, tdi->locx); if(tdi->locy) set_tdi_old(tdi->oldloc+1, tdi->locy); if(tdi->locz) set_tdi_old(tdi->oldloc+2, tdi->locz); - + /* remember, for mapping curves ('1'=10 degrees) */ if(tdi->rotx) set_tdi_old(tdi->oldrot, tdi->rotx); if(tdi->roty) set_tdi_old(tdi->oldrot+1, tdi->roty); if(tdi->rotz) set_tdi_old(tdi->oldrot+2, tdi->rotz); - + /* this is not allowed to be dsize! */ if(tdi->sizex) set_tdi_old(tdi->oldsize, tdi->sizex); if(tdi->sizey) set_tdi_old(tdi->oldsize+1, tdi->sizey); if(tdi->sizez) set_tdi_old(tdi->oldsize+2, tdi->sizez); - + tdi->flag= TOB_IPO; if(delta) tdi->flag |= TOB_IPODROT; } @@ -3814,8 +3818,8 @@ static void ipokey_to_transdata(IpoKey *ik, TransData *td) static short constraints_list_needinv(TransInfo *t, ListBase *list) { bConstraint *con; - - /* loop through constraints, checking if there's one of the mentioned + + /* loop through constraints, checking if there's one of the mentioned * constraints needing special crazyspace corrections */ if (list) { @@ -3827,19 +3831,19 @@ static short constraints_list_needinv(TransInfo *t, ListBase *list) if (con->type == CONSTRAINT_TYPE_CHILDOF) return 1; if (con->type == CONSTRAINT_TYPE_FOLLOWPATH) return 1; if (con->type == CONSTRAINT_TYPE_CLAMPTO) return 1; - + /* 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; - + if ((data->flag & ROTLIKE_OFFSET) && (t->mode == TFM_ROTATION)) return 1; } } } } - + /* no appropriate candidates found */ return 0; } @@ -3871,13 +3875,13 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count *flag= 0; } else if (seq->type ==SEQ_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= 0; else if (t->frame_side=='L' && left >= cfra) *recursive= 0; else *recursive= 1; - + *count= 0; *flag= 0; } @@ -4001,15 +4005,15 @@ static TransData *SeqToTransData(TransInfo *t, TransData *td, TransData2D *td2d, td2d->loc[2] = 0.0f; td2d->loc2d = NULL; - + 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; - - + + td->extra= (void *)tdsq; /* allow us to update the strip from here */ td->flag = 0; @@ -4031,7 +4035,7 @@ static TransData *SeqToTransData(TransInfo *t, TransData *td, TransData2D *td2d, /* Time Transform (extend) */ td->val= td2d->loc; td->ival= td2d->loc[0]; - + return td; } @@ -4040,15 +4044,15 @@ static int SeqToTransData_Recursive(TransInfo *t, ListBase *seqbase, TransData * Sequence *seq; int recursive, count, flag; int tot= 0; - + 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); - + td= td + tot_children; td2d= td2d + tot_children; tdsq= tdsq + tot_children; @@ -4081,7 +4085,7 @@ static int SeqToTransData_Recursive(TransInfo *t, ListBase *seqbase, TransData * static void createTransSeqData(bContext *C, TransInfo *t) { - + View2D *v2d= UI_view2d_fromcontext(C); Scene *scene= CTX_data_scene(C); Editing *ed= seq_give_editing(t->scene, FALSE); @@ -4119,12 +4123,12 @@ static void createTransSeqData(bContext *C, TransInfo *t) 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"); - + /* loop 2: build transdata array */ SeqToTransData_Recursive(t, ed->seqbasep, td, td2d, tdsq); @@ -4132,7 +4136,7 @@ static void createTransSeqData(bContext *C, TransInfo *t) /* transcribe given object into TransData for Transforming */ -static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object *ob) +static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object *ob) { Scene *scene = CTX_data_scene(C); Object *track; @@ -4146,35 +4150,35 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * Mat3Ortho(td->axismtx); td->con= ob->constraints.first; - - /* hack: tempolarily disable tracking and/or constraints when getting + + /* hack: tempolarily 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 * matrix later */ constinv = constraints_list_needinv(t, &ob->constraints); - + /* disable constraints inversion for dummy pass */ if (t->mode == TFM_DUMMY) skip_invert = 1; - + if (skip_invert == 0 && (ob->track || constinv==0)) { track= ob->track; ob->track= NULL; - + if (constinv == 0) { fakecons.first = ob->constraints.first; fakecons.last = ob->constraints.last; ob->constraints.first = ob->constraints.last = NULL; } - + where_is_object(t->scene, ob); - + if (constinv == 0) { ob->constraints.first = fakecons.first; ob->constraints.last = fakecons.last; } - + ob->track= track; } else @@ -4184,23 +4188,23 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * td->loc = ob->loc; VECCOPY(td->iloc, td->loc); - + td->ext->rot = ob->rot; VECCOPY(td->ext->irot, ob->rot); VECCOPY(td->ext->drot, ob->drot); - + td->ext->size = ob->size; VECCOPY(td->ext->isize, ob->size); VECCOPY(td->ext->dsize, ob->dsize); VECCOPY(td->center, ob->obmat[3]); - + Mat4CpyMat4(td->ext->obmat, ob->obmat); /* is there a need to set the global<->data space conversion matrices? */ if (ob->parent || constinv) { float totmat[3][3], obinv[3][3]; - + /* Get the effect of parenting, and/or certain constraints. * NOTE: some Constraints, and also Tracking should never get this * done, as it doesn't work well. @@ -4216,7 +4220,7 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * Mat3One(td->smtx); Mat3One(td->mtx); } - + /* set active flag */ if (ob == OBACT) { @@ -4231,39 +4235,39 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t) { Scene *sce = CTX_data_scene(C); View3D *v3d = t->view; - + /* if Base selected and has parent selected: base->flag= BA_WAS_SEL */ Base *base; - + /* don't do it if we're not actually going to recalculate anything */ if(t->mode == TFM_DUMMY) return; /* makes sure base flags and object flags are identical */ copy_baseflags(t->scene); - + /* handle pending update events, otherwise they got copied below */ for (base= sce->base.first; base; base= base->next) { - if(base->object->recalc) + if(base->object->recalc) object_handle_update(t->scene, base->object); } - + for (base= sce->base.first; base; base= base->next) { base->flag &= ~BA_WAS_SEL; - + if(TESTBASELIB(v3d, base)) { Object *ob= base->object; Object *parsel= ob->parent; - + /* if parent selected, deselect */ while(parsel) { if(parsel->flag & SELECT) break; parsel= parsel->parent; } - + if(parsel) { if ((t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL) @@ -4283,7 +4287,7 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t) /* all recalc flags get flushed to all layers, so a layer flip later on works fine */ DAG_scene_flush_update(t->scene, -1, 0); - + /* and we store them temporal in base (only used for transform code) */ /* this because after doing updates, the object->recalc is cleared */ for (base= sce->base.first; base; base= base->next) { @@ -4298,7 +4302,7 @@ static void clear_trans_object_base_flags(TransInfo *t) { Scene *sce = t->scene; Base *base; - + for (base= sce->base.first; base; base = base->next) { if(base->flag & BA_WAS_SEL) @@ -4313,34 +4317,34 @@ static void clear_trans_object_base_flags(TransInfo *t) short autokeyframe_cfra_can_key(Scene *scene, Object *ob) { float cfra= (float)CFRA; // XXX for now, this will do - + /* only filter if auto-key mode requires this */ if (IS_AUTOKEY_ON(scene) == 0) return 0; - else if (IS_AUTOKEY_MODE(scene, NORMAL)) + else if (IS_AUTOKEY_MODE(scene, NORMAL)) return 1; - else + else return id_frame_has_keyframe(&ob->id, cfra, ANIMFILTER_KEYS_LOCAL); } -/* auto-keyframing feature - for objects - * tmode: should be a transform mode +/* auto-keyframing feature - for objects + * tmode: should be a transform mode */ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) { ID *id= &ob->id; FCurve *fcu; - + if (autokeyframe_cfra_can_key(scene, ob)) { AnimData *adt= ob->adt; float cfra= (float)CFRA; // xxx this will do for now short flag = 0; - + if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED; if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX; - + if (IS_AUTOKEY_FLAG(INSERTAVAIL)) { /* only key on available channels */ if (adt && adt->action) { @@ -4352,7 +4356,7 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) } else if (IS_AUTOKEY_FLAG(INSERTNEEDED)) { short doLoc=0, doRot=0, doScale=0; - + /* filter the conditions when this happens (assume that curarea->spacetype==SPACE_VIE3D) */ if (tmode == TFM_TRANSLATION) { doLoc = 1; @@ -4363,9 +4367,9 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) doLoc = 1; } else if (v3d->around == V3D_CURSOR) - doLoc = 1; - - if ((v3d->flag & V3D_ALIGN)==0) + doLoc = 1; + + if ((v3d->flag & V3D_ALIGN)==0) doRot = 1; } else if (tmode == TFM_RESIZE) { @@ -4374,12 +4378,12 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) doLoc = 1; } else if (v3d->around == V3D_CURSOR) - doLoc = 1; - + doLoc = 1; + if ((v3d->flag & V3D_ALIGN)==0) doScale = 1; } - + // TODO: the group names here are temporary... // TODO: should this be made to use the builtin KeyingSets instead? if (doLoc) { @@ -4404,22 +4408,22 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) insert_keyframe(id, NULL, "Object Transform", "location", 0, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "location", 1, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "location", 2, cfra, flag); - + insert_keyframe(id, NULL, "Object Transform", "rotation", 0, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "rotation", 1, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "rotation", 2, cfra, flag); - + insert_keyframe(id, NULL, "Object Transform", "scale", 0, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "scale", 1, cfra, flag); insert_keyframe(id, NULL, "Object Transform", "scale", 2, cfra, flag); } - + // XXX todo... find a way to send notifiers from here... } } -/* auto-keyframing feature - for poses/pose-channels - * tmode: should be a transform mode +/* auto-keyframing feature - for poses/pose-channels + * tmode: should be a transform mode * targetless_ik: has targetless ik been done on any channels? */ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, short targetless_ik) @@ -4431,13 +4435,13 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, bPose *pose= ob->pose; bPoseChannel *pchan; FCurve *fcu; - + if (autokeyframe_cfra_can_key(scene, ob)) { float cfra= (float)CFRA; short flag= 0; char buf[512]; - - /* flag is initialised from UserPref keyframing settings + + /* flag is initialised 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 * (for quick animation recording) @@ -4446,12 +4450,12 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, flag |= INSERTKEY_MATRIX; if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED; - + for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) { if (pchan->bone->flag & BONE_TRANSFORM) { /* clear any 'unkeyed' flag it may have */ pchan->bone->flag &= ~BONE_UNKEYED; - + /* only insert into available channels? */ if (IS_AUTOKEY_FLAG(INSERTAVAIL)) { if (act) { @@ -4462,29 +4466,29 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, /* only insert keyframe if needed? */ else if (IS_AUTOKEY_FLAG(INSERTNEEDED)) { short doLoc=0, doRot=0, doScale=0; - + /* filter the conditions when this happens (assume that curarea->spacetype==SPACE_VIE3D) */ if (tmode == TFM_TRANSLATION) { - if (targetless_ik) + if (targetless_ik) doRot= 1; - else + else doLoc = 1; } else if (tmode == TFM_ROTATION) { if (ELEM(v3d->around, V3D_CURSOR, V3D_ACTIVE)) doLoc = 1; - - if ((v3d->flag & V3D_ALIGN)==0) + + if ((v3d->flag & V3D_ALIGN)==0) doRot = 1; } else if (tmode == TFM_RESIZE) { if (ELEM(v3d->around, V3D_CURSOR, V3D_ACTIVE)) doLoc = 1; - + if ((v3d->flag & V3D_ALIGN)==0) doScale = 1; } - + if (doLoc) { sprintf(buf, "pose.pose_channels[\"%s\"].location", pchan->name); insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag); @@ -4519,7 +4523,7 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag); insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag); insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag); - + if (pchan->rotmode == PCHAN_ROT_QUAT) { sprintf(buf, "pose.pose_channels[\"%s\"].rotation", pchan->name); insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag); @@ -4533,7 +4537,7 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag); insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag); } - + sprintf(buf, "pose.pose_channels[\"%s\"].scale", pchan->name); insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag); insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag); @@ -4541,15 +4545,15 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, } } } - + // XXX todo... figure out way to get appropriate notifiers sent - + /* do the bone paths */ #if 0 // TRANSFORM_FIX_ME if (arm->pathflag & ARM_PATH_ACFRA) { pose_clear_paths(ob); pose_recalculate_paths(ob); - } + } #endif } else { @@ -4573,7 +4577,7 @@ void special_aftertrans_update(TransInfo *t) // short redrawipo=0, resetslowpar=1; int cancelled= (t->state == TRANS_CANCEL); short duplicate= (t->undostr && strstr(t->undostr, "Duplicate")) ? 1 : 0; - + if (t->spacetype==SPACE_VIEW3D) { if (t->obedit) { if (cancelled==0) { @@ -4596,7 +4600,7 @@ void special_aftertrans_update(TransInfo *t) #if 0 // TRANSFORM_FIX_ME, Would prefer to use this since the array takes into // account what where transforming (with extend, locked strips etc) // But at the moment t->data is freed in postTrans so for now re-shuffeling selected strips works ok. - Campbell - + int a; TransData *td= t->data; @@ -4621,7 +4625,7 @@ void special_aftertrans_update(TransInfo *t) for(seq= seqbasep->first; seq; seq= seq->next) { max_machine = MAX2(max_machine, seq->machine); } - + for (machine = 0; machine <= max_machine; machine++) { for(seq= seqbasep->first; seq; seq= seq->next) { @@ -4631,7 +4635,7 @@ void special_aftertrans_update(TransInfo *t) } } #endif - + 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) { @@ -4643,7 +4647,7 @@ void special_aftertrans_update(TransInfo *t) sort_seq(t->scene); } - + if (t->customData) MEM_freeN(t->customData); if (t->data) @@ -4653,39 +4657,39 @@ void special_aftertrans_update(TransInfo *t) SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - + if (ac.datatype == ANIMCONT_DOPESHEET) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_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 ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && + + if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { if (adt) { - ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); posttrans_fcurve_clean(fcu); ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } @@ -4693,7 +4697,7 @@ void special_aftertrans_update(TransInfo *t) posttrans_fcurve_clean(fcu); } } - + /* free temp memory */ BLI_freelistN(&anim_data); } @@ -4702,15 +4706,15 @@ void special_aftertrans_update(TransInfo *t) // fixme... some of this stuff is not good if (ob) { ob->ctime= -1234567.0f; - + if (ob->pose || ob_get_key(ob)) DAG_object_flush_update(scene, ob, OB_RECALC); else DAG_object_flush_update(scene, ob, OB_RECALC_OB); } - + /* Do curve cleanups? */ - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && + if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { posttrans_action_clean(&ac, (bAction *)ac.data); @@ -4720,16 +4724,16 @@ void special_aftertrans_update(TransInfo *t) #if 0 // XXX old animation system /* fix up the Ipocurves and redraw stuff */ Key *key= (Key *)ac.data; - + if (key->ipo) { - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && + if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { posttrans_ipo_clean(key->ipo); } } #endif // XXX old animation system - + DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); } #if 0 // XXX future of this is still not clear @@ -4739,23 +4743,23 @@ void special_aftertrans_update(TransInfo *t) { bScreen *sc= (bScreen *)ac.data; ScrArea *sa; - + /* BAD... we need to loop over all screen areas for current screen... - * - sync this with actdata_filter_gpencil() in editaction.c + * - sync this with actdata_filter_gpencil() in editaction.c */ for (sa= sc->areabase.first; sa; sa= sa->next) { bGPdata *gpd= gpencil_data_getactive(sa); - - if (gpd) + + if (gpd) posttrans_gpd_clean(gpd); } } } #endif // XXX future of this is still not clear - + /* make sure all F-Curves are set correctly */ ANIM_editkeyframes_refresh(&ac); - + /* clear flag that was set for time-slide drawing */ saction->flag &= ~SACTION_MOVING; } @@ -4763,40 +4767,40 @@ void special_aftertrans_update(TransInfo *t) SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - - if (ac.datatype) + + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); - + /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - + /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - - if ( (sipo->flag & SIPO_NOTRANSKEYCULL)==0 && + + if ( (sipo->flag & SIPO_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { if (adt) { - ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); + ANIM_nla_mapping_apply_fcurve(adt, fcu, 0, 1); posttrans_fcurve_clean(fcu); ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } @@ -4804,55 +4808,55 @@ void special_aftertrans_update(TransInfo *t) posttrans_fcurve_clean(fcu); } } - + /* free temp memory */ BLI_freelistN(&anim_data); } - + /* make sure all F-Curves are set correctly */ ANIM_editkeyframes_refresh(&ac); } else if (t->spacetype == SPACE_NLA) { Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - - if (ac.datatype) + + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); - + /* 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; - + /* make sure strips are in order again */ BKE_nlatrack_sort_strips(nlt); - + /* remove the temp metas */ BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); } - + /* free temp memory */ BLI_freelistN(&anim_data); } - + // XXX check on the calls below... we need some of these sanity checks //synchronize_action_strips(); //ANIM_editkeyframes_refresh(&ac); @@ -4861,7 +4865,7 @@ void special_aftertrans_update(TransInfo *t) // TRANSFORM_FIX_ME // if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE) // allqueue(REDRAWBUTSEDIT, 0); - + if (t->obedit->type == OB_MESH) { EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh; @@ -4874,11 +4878,11 @@ void special_aftertrans_update(TransInfo *t) bPose *pose; bPoseChannel *pchan; short targetless_ik= 0; - + ob= t->poseobj; arm= ob->data; pose= ob->pose; - + /* if target-less IK grabbing, we calculate the pchan transforms and clear flag */ if (!cancelled && t->mode==TFM_TRANSLATION) targetless_ik= apply_targetless_ik(ob); @@ -4889,10 +4893,10 @@ void special_aftertrans_update(TransInfo *t) if(data) data->flag &= ~CONSTRAINT_IK_AUTO; } } - + if (t->mode==TFM_TRANSLATION) pose_grab_with_ik_clear(ob); - + /* automatic inserting of keys and unkeyed tagging - only if transform wasn't cancelled (or TFM_DUMMY) */ if (!cancelled && (t->mode != TFM_DUMMY)) { autokeyframe_pose_cb_func(t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); @@ -4903,26 +4907,26 @@ void special_aftertrans_update(TransInfo *t) DAG_object_flush_update(t->scene, ob, OB_RECALC_DATA); ob->recalc= 0; // is set on OK position already by recalcData() } - else + else DAG_object_flush_update(t->scene, ob, OB_RECALC_DATA); - + //if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE) // allqueue(REDRAWBUTSEDIT, 0); - + } else if(G.f & G_PARTICLEEDIT) { ; } - else { + else { /* Objects */ // XXX ideally, this would go through context iterators, but we don't have context iterator access here, // so we make do with old data + access styles... Scene *scene= t->scene; Base *base; - + for (base= FIRSTBASE; base; base= base->next) { ob= base->object; - + if (base->flag & SELECT && (t->mode != TFM_DUMMY)) { /* pointcache refresh */ if (BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH)) @@ -4933,14 +4937,14 @@ void special_aftertrans_update(TransInfo *t) /* autokey though, probably needed is an anim sys override? */ /* Please remove if some other solution is found. -jahka */ DAG_object_flush_update(scene, ob, OB_RECALC_OB); - + /* Set autokey if necessary */ if (!cancelled) autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); } } } - + clear_trans_object_base_flags(t); #if 0 // TRANSFORM_FIX_ME @@ -4949,10 +4953,10 @@ void special_aftertrans_update(TransInfo *t) allqueue(REDRAWACTION, 0); allqueue(REDRAWIPO, 0); } - + if(resetslowpar) reset_slowparents(); - + /* note; should actually only be done for all objects when a lamp is moved... (ton) */ if(t->spacetype==SPACE_VIEW3D && G.vd->drawtype == OB_SHADED) reshadeall_displist(); @@ -4965,10 +4969,10 @@ static void createTransObject(bContext *C, TransInfo *t) TransDataExtension *tx; // IpoKey *ik; // ListBase elems; - + set_trans_object_base_flags(C, t); - /* count */ + /* count */ CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { #if 0 // TRANSFORM_FIX_ME @@ -4976,12 +4980,12 @@ static void createTransObject(bContext *C, TransInfo *t) if ((ob->id.lib == 0) && (ob->ipo) && (ob->ipo->showkey) && (ob->ipoflag & OB_DRAWKEY)) { elems.first= elems.last= NULL; make_ipokey_transform(ob, &elems, 1); /* '1' only selected keys */ - + pushdata(&elems, sizeof(ListBase)); - + for(ik= elems.first; ik; ik= ik->next) t->total++; - + if(elems.first==NULL) t->total++; } @@ -4997,24 +5001,24 @@ static void createTransObject(bContext *C, TransInfo *t) clear_trans_object_base_flags(t); return; } - + 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) { Object *ob= base->object; - + td->flag = TD_SELECTED; td->protectflag= ob->protectflag; td->ext = tx; - + if (base->flag & BA_TRANSFORM_CHILD) { td->flag |= TD_NOCENTER; td->flag |= TD_NO_LOC; } - + /* select linked objects, but skip them later */ if (ob->id.lib != 0) { td->flag |= TD_SKIP; @@ -5024,55 +5028,55 @@ static void createTransObject(bContext *C, TransInfo *t) // TRANSFORM_FIX_ME #if 0 if((ob->id.lib == 0) && (ob->ipo) && (ob->ipo->showkey) && (ob->ipoflag & OB_DRAWKEY)) { - + popfirst(&elems); // bring back pushed listbase - + if(elems.first) { int cfraont; int ipoflag; - + base->flag |= BA_DO_IPO+BA_WAS_SEL; base->flag &= ~SELECT; - + cfraont= CFRA; set_no_parent_ipo(1); ipoflag= ob->ipoflag; ob->ipoflag &= ~OB_OFFS_OB; - + /* * This is really EVIL code that pushes down Object values * (loc, dloc, orig, size, dsize, rot, drot) * */ - + pushdata((void*)ob->loc, 7 * 3 * sizeof(float)); // tsk! tsk! - + for(ik= elems.first; ik; ik= ik->next) { - + /* weak... this doesn't correct for floating values, giving small errors */ CFRA= (int)(ik->val/t->scene->r.framelen); - + do_ob_ipo(ob); ObjectToTransData(C, t, td, ob); // does where_is_object() - + td->flag= TD_SELECTED; - + td->tdi= MEM_callocN(sizeof(TransDataIpokey), "TransDataIpokey"); /* also does tdi->flag and oldvals, needs to be after ob_to_transob()! */ ipokey_to_transdata(ik, td); - + td++; tx++; if(ik->next) td->ext= tx; // prevent corrupting mem! } free_ipokey(&elems); - + poplast(ob->loc); set_no_parent_ipo(0); - + CFRA= cfraont; ob->ipoflag= ipoflag; - - where_is_object(t->scene, ob); // restore + + where_is_object(t->scene, ob); // restore } else { ObjectToTransData(C, t, td, ob); @@ -5096,7 +5100,7 @@ static void createTransObject(bContext *C, TransInfo *t) /* transcribe given node into TransData2D for Transforming */ static void NodeToTransData(TransData *td, TransData2D *td2d, bNode *node) -// static void NodeToTransData(bContext *C, TransInfo *t, TransData2D *td, bNode *node) +// static void NodeToTransData(bContext *C, TransInfo *t, TransData2D *td, bNode *node) { td2d->loc[0] = node->locx; /* hold original location */ td2d->loc[1] = node->locy; @@ -5124,22 +5128,22 @@ void createTransNodeData(bContext *C, TransInfo *t) { TransData *td; TransData2D *td2d; - + 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"); - + CTX_DATA_BEGIN(C, bNode *, selnode, selected_nodes) NodeToTransData(td++, td2d++, selnode); CTX_DATA_END } -void createTransData(bContext *C, TransInfo *t) +void createTransData(bContext *C, TransInfo *t) { Scene *scene = CTX_data_scene(C); Object *ob = OBACT; - + if (t->options == CTX_TEXTURE) { t->flag |= T_TEXTURE; createTransTexspace(C, t); @@ -5183,7 +5187,7 @@ void createTransData(bContext *C, TransInfo *t) else if (t->spacetype == SPACE_IPO) { t->flag |= T_POINTS|T_2D_EDIT; createTransGraphEditData(C, t); -#if 0 +#if 0 if (t->data && (t->flag & T_PROP_EDIT)) { sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); @@ -5203,7 +5207,7 @@ void createTransData(bContext *C, TransInfo *t) else if (t->obedit) { t->ext = NULL; if (t->obedit->type == OB_MESH) { - createTransEditVerts(C, t); + createTransEditVerts(C, t); } else if ELEM(t->obedit->type, OB_CURVE, OB_SURF) { createTransCurveVerts(C, t); @@ -5217,7 +5221,7 @@ void createTransData(bContext *C, TransInfo *t) else if (t->obedit->type==OB_ARMATURE) { t->flag &= ~T_PROP_EDIT; createTransArmatureVerts(C, t); - } + } else { printf("edit type not implemented!\n"); } @@ -5236,7 +5240,7 @@ void createTransData(bContext *C, TransInfo *t) } t->flag |= T_EDIT|T_POINTS; - + /* exception... hackish, we want bonesize to use bone orientation matrix (ton) */ if(t->mode==TFM_BONESIZE) { t->flag &= ~(T_EDIT|T_POINTS); @@ -5245,7 +5249,7 @@ void createTransData(bContext *C, TransInfo *t) } } else if (ob && (ob->flag & OB_POSEMODE)) { - // XXX this is currently limited to active armature only... + // XXX this is currently limited to active armature only... // XXX active-layer checking isn't done as that should probably be checked through context instead createTransPose(C, t, ob); } @@ -5279,7 +5283,7 @@ void createTransData(bContext *C, TransInfo *t) t->flag &= ~T_PROP_EDIT; /* no proportional edit in object mode */ createTransObject(C, t); t->flag |= T_OBJECT; - + if (t->ar->regiontype == RGN_TYPE_WINDOW) { View3D *v3d = t->view; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 3415c266cf1..af56079727f 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -154,8 +154,8 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) for (; md; md=md->next) { if (md->type==eModifierType_Mirror) { - MirrorModifierData *mmd = (MirrorModifierData*) md; - + MirrorModifierData *mmd = (MirrorModifierData*) md; + if(mmd->flag & MOD_MIR_CLIPPING) { axis = 0; if(mmd->flag & MOD_MIR_AXIS_X) { @@ -174,7 +174,7 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) float mtx[4][4], imtx[4][4]; int i; TransData *td = t->data; - + if (mmd->mirror_ob) { float obinv[4][4]; @@ -191,10 +191,10 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) break; if (td->loc==NULL) break; - + if (td->flag & TD_SKIP) continue; - + VecCopyf(loc, td->loc); VecCopyf(iloc, td->iloc); @@ -205,22 +205,22 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) clip = 0; if(axis & 1) { - if(fabs(iloc[0])<=tolerance[0] || + if(fabs(iloc[0])<=tolerance[0] || loc[0]*iloc[0]<0.0f) { loc[0]= 0.0f; clip = 1; } } - + if(axis & 2) { - if(fabs(iloc[1])<=tolerance[1] || + if(fabs(iloc[1])<=tolerance[1] || loc[1]*iloc[1]<0.0f) { loc[1]= 0.0f; clip = 1; } } if(axis & 4) { - if(fabs(iloc[2])<=tolerance[2] || + if(fabs(iloc[2])<=tolerance[2] || loc[2]*iloc[2]<0.0f) { loc[2]= 0.0f; clip = 1; @@ -246,7 +246,7 @@ static void editmesh_apply_to_mirror(TransInfo *t) TransData *td = t->data; EditVert *eve; int i; - + for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -254,14 +254,14 @@ static void editmesh_apply_to_mirror(TransInfo *t) 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]; - } - } + } + } } /* called for updating while transform acts, once per redraw */ @@ -269,7 +269,7 @@ void recalcData(TransInfo *t) { Scene *scene = t->scene; Base *base; - + if (t->obedit) { } else if(G.f & G_PARTICLEEDIT) { @@ -284,56 +284,56 @@ void recalcData(TransInfo *t) else if (t->spacetype == SPACE_IPO) { SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; Scene *scene; - + ListBase anim_data = {NULL, NULL}; bAnimContext ac; int filter; - + bAnimListElem *ale; int dosort = 0; - - + + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + ANIM_animdata_context_getdata(&ac); - + /* do the flush first */ flushTransGraphData(t); - + /* get curves to check if a re-sort is needed */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); 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; - + /* watch it: if the time is wrong: do not correct handles yet */ if (test_time_fcurve(fcu)) dosort++; else calchandles_fcurve(fcu); } - + /* do resort and other updates? */ if (dosort) remake_graph_transdata(t, &anim_data); //if (sipo->showkey) update_ipokey_val(); - + /* now free temp channels */ BLI_freelistN(&anim_data); - + /* update realtime - not working? */ if (sipo->lock) { - + } } else if (t->spacetype == SPACE_NLA) { @@ -342,8 +342,8 @@ void recalcData(TransInfo *t) 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 + + /* for each strip we've got, perform some additional validation of the values that got set before * using RNA to set the value (which does some special operations when setting these values to make * sure that everything works ok) */ @@ -352,43 +352,43 @@ void recalcData(TransInfo *t) PointerRNA strip_ptr; short pExceeded, nExceeded, iter; int delta_y1, delta_y2; - + /* if this tdn has no handles, that means it is just a dummy that should be skipped */ if (tdn->handle == 0) continue; - + /* if cancelling transform, just write the values without validating, then move on */ if (t->state == TRANS_CANCEL) { - /* clear the values by directly overwriting the originals, but also need to restore + /* clear the values by directly overwriting the originals, but also need to restore * endpoints of neighboring transition-strips */ - + /* start */ strip->start= tdn->h1[0]; - + if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) strip->prev->end= tdn->h1[0]; - + /* end */ strip->end= tdn->h2[0]; - + if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) strip->next->start= tdn->h2[0]; - + /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); - + /* restore to original track (if needed) */ if (tdn->oldTrack != tdn->nlt) { /* just append to end of list for now, since strips get sorted in special_aftertrans_update() */ BLI_remlink(&tdn->nlt->strips, strip); BLI_addtail(&tdn->oldTrack->strips, strip); } - + continue; } - - /* firstly, check if the proposed transform locations would overlap with any neighbouring strips + + /* firstly, check if the proposed transform locations would overlap with any neighbouring strips * (barring transitions) which are absolute barriers since they are not being moved * * this is done as a iterative procedure (done 5 times max for now) @@ -396,10 +396,10 @@ void recalcData(TransInfo *t) 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) - * - simply crop strip to fit within the bounds of the strips bounding it + /* both endpoints exceeded (or iteration ping-pong'd meaning that we need a compromise) + * - simply crop strip to fit within the bounds of the strips bounding it * - if there were no neighbours, clear the transforms (make it default to the strip's current values) */ if (strip->prev && strip->next) { @@ -414,21 +414,21 @@ void recalcData(TransInfo *t) else if (nExceeded) { /* move backwards */ 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]; - + tdn->h1[0] += offset; tdn->h2[0] += offset; } else /* all is fine and well */ break; } - + /* handle auto-snapping */ switch (snla->autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame/time */ @@ -441,36 +441,36 @@ void recalcData(TransInfo *t) tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); } 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]); break; } - + /* use RNA to write the values... */ // TODO: do we need to write in 2 passes to make sure that no truncation goes on? RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); - + RNA_float_set(&strip_ptr, "start_frame", tdn->h1[0]); RNA_float_set(&strip_ptr, "end_frame", tdn->h2[0]); - + /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); - - - /* now, check if we need to try and move track + + + /* 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 - tdn->trackIndex); delta_y2= ((int)tdn->h2[1] / NLACHANNEL_STEP - tdn->trackIndex); - + if (delta_y1 || delta_y2) { NlaTrack *track; int delta = (delta_y2) ? delta_y2 : delta_y1; int n; - - /* move in the requested direction, checking at each layer if there's space for strip to pass through, + + /* move in the requested direction, checking at each layer if there's space for strip to pass through, * stopping on the last track available or that we're able to fit in */ if (delta > 0) { @@ -480,7 +480,7 @@ void recalcData(TransInfo *t) /* move strip to this track */ BLI_remlink(&tdn->nlt->strips, strip); BKE_nlatrack_add_strip(track, strip); - + tdn->nlt= track; tdn->trackIndex += (n + 1); /* + 1, since n==0 would mean that we didn't change track */ } @@ -491,14 +491,14 @@ void recalcData(TransInfo *t) else { /* make delta 'positive' before using it, since we now know to go backwards */ delta= -delta; - + 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->trackIndex -= (n - 1); /* - 1, since n==0 would mean that we didn't change track */ } @@ -513,9 +513,9 @@ void recalcData(TransInfo *t) if ELEM(t->obedit->type, OB_CURVE, OB_SURF) { Curve *cu= t->obedit->data; Nurb *nu= cu->editnurb->first; - + DAG_object_flush_update(scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */ - + if (t->state == TRANS_CANCEL) { while(nu) { calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */ @@ -535,7 +535,7 @@ void recalcData(TransInfo *t) else if(t->obedit->type==OB_LATTICE) { Lattice *la= t->obedit->data; DAG_object_flush_update(scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */ - + if(la->editlatt->flag & LT_OUTSIDE) outside_lattice(la->editlatt); } else if (t->obedit->type == OB_MESH) { @@ -545,7 +545,7 @@ void recalcData(TransInfo *t) flushTransUVs(t); if(sima->flag & SI_LIVE_UNWRAP) ED_uvedit_live_unwrap_re_solve(); - + DAG_object_flush_update(scene, t->obedit, OB_RECALC_DATA); } else { EditMesh *em = ((Mesh*)t->obedit->data)->edit_mesh; @@ -560,9 +560,9 @@ void recalcData(TransInfo *t) } if((t->options & CTX_NO_MIRROR) == 0 && (t->flag & T_MIRROR)) editmesh_apply_to_mirror(t); - + DAG_object_flush_update(scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */ - + recalc_editnormals(em); } } @@ -572,10 +572,10 @@ void recalcData(TransInfo *t) EditBone *ebo; TransData *td = t->data; int i; - + /* Ensure all bones are correctly adjusted */ for (ebo = edbo->first; ebo; ebo = ebo->next){ - + if ((ebo->flag & BONE_CONNECTED) && ebo->parent){ /* If this bone has a parent tip that has been moved */ if (ebo->parent->flag & BONE_TIPSEL){ @@ -588,7 +588,7 @@ void recalcData(TransInfo *t) 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= VecLenf(ebo->head, ebo->tail); if(ebo->oldlength==0.0f) { @@ -608,8 +608,8 @@ void recalcData(TransInfo *t) ebo->oldlength= ebo->length; } } - - + + if (t->mode != TFM_BONE_ROLL) { /* fix roll */ @@ -619,10 +619,10 @@ void recalcData(TransInfo *t) { float vec[3], up_axis[3]; float qrot[4]; - + ebo = td->extra; VECCOPY(up_axis, td->axismtx[2]); - + if (t->mode != TFM_ROTATION) { VecSubf(vec, ebo->tail, ebo->head); @@ -634,15 +634,15 @@ void recalcData(TransInfo *t) { Mat3MulVecfl(t->mat, up_axis); } - + ebo->roll = ED_rollBoneToVector(ebo, up_axis); } } } - - if(arm->flag & ARM_MIRROR_EDIT) + + if(arm->flag & ARM_MIRROR_EDIT) transform_armature_mirror_update(t->obedit); - + } else DAG_object_flush_update(scene, t->obedit, OB_RECALC_DATA); /* sets recalc flags */ @@ -650,7 +650,7 @@ void recalcData(TransInfo *t) 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' * (i.e. uneditable animation values) @@ -661,7 +661,7 @@ void recalcData(TransInfo *t) short targetless_ik= (t->flag & T_AUTOIK); // XXX this currently doesn't work, since flags aren't set yet! autokeyframe_pose_cb_func(t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); } - + /* old optimize trick... this enforces to bypass the depgraph */ if (!(arm->flag & ARM_DELAYDEFORM)) { DAG_object_flush_update(scene, ob, OB_RECALC_DATA); /* sets recalc flags */ @@ -672,13 +672,13 @@ void recalcData(TransInfo *t) else { for(base= FIRSTBASE; base; base= base->next) { Object *ob= base->object; - + /* this flag is from depgraph, was stored in initialize phase, handled in drawview.c */ if(base->flag & BA_HAS_RECALC_OB) ob->recalc |= OB_RECALC_OB; if(base->flag & BA_HAS_RECALC_DATA) ob->recalc |= OB_RECALC_DATA; - + /* if object/base is selected */ if ((base->flag & SELECT) || (ob->flag & SELECT)) { /* if animtimer is running, and the object already has animation data, @@ -691,13 +691,13 @@ void recalcData(TransInfo *t) autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); } } - + /* proxy exception */ if(ob->proxy) ob->proxy->recalc |= ob->recalc; if(ob->proxy_group) group_tag_recalc(ob->proxy_group->dup_group); - } + } } /* update shaded drawmode while transform */ @@ -709,22 +709,22 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) { float v1[3], v2[3], v3[3]; char col[3], col2[3]; - + if (t->spacetype == SPACE_VIEW3D) { View3D *v3d = t->view; - + glPushMatrix(); - + //if(t->obedit) glLoadMatrixf(t->obedit->obmat); // sets opengl viewing - - + + VecCopyf(v3, dir); VecMulf(v3, v3d->far); - + VecSubf(v2, center, v3); VecAddf(v1, center, v3); - + if (options & DRAWLIGHT) { col[0] = col[1] = col[2] = 220; } @@ -733,13 +733,13 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) } UI_make_axis_color(col, col2, axis); glColor3ubv((GLubyte *)col2); - + setlinestyle(0); - glBegin(GL_LINE_STRIP); - glVertex3fv(v1); - glVertex3fv(v2); + glBegin(GL_LINE_STRIP); + glVertex3fv(v1); + glVertex3fv(v2); glEnd(); - + glPopMatrix(); } } @@ -756,13 +756,13 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) ARegion *ar = CTX_wm_region(C); ScrArea *sa = CTX_wm_area(C); Object *obedit = CTX_data_edit_object(C); - + /* moving: is shown in drawobject() (transform color) */ -// TRANSFORM_FIX_ME +// TRANSFORM_FIX_ME // if(obedit || (t->flag & T_POSE) ) G.moving= G_TRANSFORM_EDIT; // else if(G.f & G_PARTICLEEDIT) G.moving= G_TRANSFORM_PARTICLE; // else G.moving= G_TRANSFORM_OBJ; - + t->scene = sce; t->sa = sa; t->ar = ar; @@ -775,14 +775,14 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->helpline = HLP_NONE; t->flag = 0; - + t->redraw = 1; /* redraw first time */ - + if (event) { t->imval[0] = event->x - t->ar->winrct.xmin; t->imval[1] = event->y - t->ar->winrct.ymin; - + t->event_type = event->type; } else @@ -790,7 +790,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->imval[0] = 0; t->imval[1] = 0; } - + t->con.imval[0] = t->imval[0]; t->con.imval[1] = t->imval[1]; @@ -807,21 +807,21 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->vec[0] = t->vec[1] = t->vec[2] = 0.0f; - + t->center[0] = t->center[1] = t->center[2] = 0.0f; - + Mat3One(t->mat); - + t->spacetype = sa->spacetype; if(t->spacetype == SPACE_VIEW3D) { View3D *v3d = sa->spacedata.first; - + t->view = v3d; t->animtimer= CTX_wm_screen(C)->animtimer; - + if(v3d->flag & V3D_ALIGN) t->flag |= T_V3D_ALIGN; t->around = v3d->around; @@ -850,7 +850,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) { // XXX for now, get View2D from the active region t->view = &ar->v2d; - + t->around = V3D_CENTER; } @@ -886,7 +886,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) { if ((t->options & CTX_NO_PET) == 0 && (ts->proportional)) { t->flag |= T_PROP_EDIT; - + if(ts->proportional == 2) t->flag |= T_PROP_CONNECTED; // yes i know, has to become define } @@ -900,7 +900,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) { t->prop_size = ts->proportional_size; } - + if (op && RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && RNA_property_is_set(op->ptr, "proportional_editing_falloff")) { t->prop_mode = RNA_enum_get(op->ptr, "proportional_editing_falloff"); @@ -919,12 +919,12 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) setTransformViewMatrices(t); initNumInput(&t->num); initNDofInput(&t->ndof); - + return 1; } /* Here I would suggest only TransInfo related issues, like free data & reset vars. Not redraws */ -void postTrans (TransInfo *t) +void postTrans (TransInfo *t) { TransData *td; @@ -932,7 +932,7 @@ void postTrans (TransInfo *t) { ED_region_draw_cb_exit(t->ar->type, t->draw_handle); } - + /* postTrans can be called when nothing is selected, so data is NULL already */ if (t->data) { int a; @@ -940,7 +940,7 @@ void postTrans (TransInfo *t) /* since ipokeys are optional on objects, we mallocced them per trans-data */ for(a=0, td= t->data; atotal; a++, td++) { if(td->tdi) MEM_freeN(td->tdi); - if (td->flag & TD_BEZTRIPLE) MEM_freeN(td->hdata); + if (td->flag & TD_BEZTRIPLE) MEM_freeN(td->hdata); } MEM_freeN(t->data); } @@ -965,7 +965,7 @@ void postTrans (TransInfo *t) void applyTransObjects(TransInfo *t) { TransData *td; - + for (td = t->data; td < t->data + t->total; td++) { VECCOPY(td->iloc, td->loc); if (td->ext->rot) { @@ -974,9 +974,9 @@ void applyTransObjects(TransInfo *t) if (td->ext->size) { VECCOPY(td->ext->isize, td->ext->size); } - } + } recalcData(t); -} +} /* helper for below */ static void restore_ipokey(float *poin, float *old) @@ -1009,15 +1009,15 @@ static void restoreElement(TransData *td) { } } } - + if (td->flag & TD_BEZTRIPLE) { *(td->hdata->h1) = td->hdata->ih1; *(td->hdata->h2) = td->hdata->ih2; } - + if(td->tdi) { TransDataIpokey *tdi= td->tdi; - + restore_ipokey(tdi->locx, tdi->oldloc); restore_ipokey(tdi->locy, tdi->oldloc+1); restore_ipokey(tdi->locz, tdi->oldloc+2); @@ -1025,7 +1025,7 @@ static void restoreElement(TransData *td) { restore_ipokey(tdi->rotx, tdi->oldrot); restore_ipokey(tdi->roty, tdi->oldrot+1); restore_ipokey(tdi->rotz, tdi->oldrot+2); - + restore_ipokey(tdi->sizex, tdi->oldsize); restore_ipokey(tdi->sizey, tdi->oldsize+1); restore_ipokey(tdi->sizez, tdi->oldsize+2); @@ -1035,13 +1035,13 @@ static void restoreElement(TransData *td) { void restoreTransObjects(TransInfo *t) { TransData *td; - + for (td = t->data; td < t->data + t->total; td++) { restoreElement(td); } - + Mat3One(t->mat); - + recalcData(t); } @@ -1050,7 +1050,7 @@ void calculateCenter2D(TransInfo *t) if (t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; float vec[3]; - + VECCOPY(vec, t->center); Mat4MulVecfl(ob->obmat, vec); projectIntView(t, vec, t->center2d); @@ -1071,13 +1071,13 @@ void calculateCenterCursor(TransInfo *t) if (t->flag & (T_EDIT|T_POSE)) { Object *ob = t->obedit?t->obedit:t->poseobj; float mat[3][3], imat[3][3]; - + VecSubf(t->center, t->center, ob->obmat[3]); Mat3CpyMat4(mat, ob->obmat); Mat3Inv(imat, mat); Mat3MulVecfl(imat, t->center); } - + calculateCenter2D(t); } @@ -1085,13 +1085,13 @@ void calculateCenterCursor2D(TransInfo *t) { View2D *v2d= t->view; float aspx=1.0, aspy=1.0; - + if(t->spacetype==SPACE_IMAGE) /* only space supported right now but may change */ ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); if (v2d) { - t->center[0] = v2d->cursor[0] * aspx; - t->center[1] = v2d->cursor[1] * aspy; + t->center[0] = v2d->cursor[0] * aspx; + t->center[1] = v2d->cursor[1] * aspy; } calculateCenter2D(t); @@ -1102,7 +1102,7 @@ void calculateCenterMedian(TransInfo *t) float partial[3] = {0.0f, 0.0f, 0.0f}; int total = 0; int i; - + for(i = 0; i < t->total; i++) { if (t->data[i].flag & TD_SELECTED) { if (!(t->data[i].flag & TD_NOCENTER)) @@ -1112,8 +1112,8 @@ void calculateCenterMedian(TransInfo *t) } } else { - /* - All the selected elements are at the head of the array + /* + All the selected elements are at the head of the array which means we can stop when it finds unselected data */ break; @@ -1138,8 +1138,8 @@ void calculateCenterBound(TransInfo *t) MinMax3(min, max, t->data[i].center); } else { - /* - All the selected elements are at the head of the array + /* + All the selected elements are at the head of the array which means we can stop when it finds unselected data */ break; @@ -1156,7 +1156,7 @@ void calculateCenterBound(TransInfo *t) calculateCenter2D(t); } -void calculateCenter(TransInfo *t) +void calculateCenter(TransInfo *t) { switch(t->around) { case V3D_CENTER: @@ -1188,7 +1188,7 @@ void calculateCenter(TransInfo *t) break; } /* END EDIT MODE ACTIVE ELEMENT */ #endif - + calculateCenterMedian(t); if((t->flag & (T_EDIT|T_POSE))==0) { @@ -1200,7 +1200,7 @@ void calculateCenter(TransInfo *t) projectIntView(t, t->center, t->center2d); } } - + } } @@ -1220,21 +1220,21 @@ void calculateCenter(TransInfo *t) View3D *v3d = t->view; Scene *scene = t->scene; RegionView3D *rv3d = t->ar->regiondata; - + if(v3d->camera == OBACT && rv3d->persp==V3D_CAMOB) { float axis[3]; /* persinv is nasty, use viewinv instead, always right */ VECCOPY(axis, t->viewinv[2]); Normalize(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]; - + projectIntView(t, axis, t->center2d); - + /* rotate only needs correct 2d center, grab needs initgrabz() value */ if(t->mode==TFM_TRANSLATION) { @@ -1243,7 +1243,7 @@ void calculateCenter(TransInfo *t) } } } - } + } if(t->spacetype==SPACE_VIEW3D) { @@ -1251,14 +1251,14 @@ void calculateCenter(TransInfo *t) if(t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; float vec[3]; - + VECCOPY(vec, t->center); Mat4MulVecfl(ob->obmat, vec); initgrabz(t->ar->regiondata, vec[0], vec[1], vec[2]); } else { initgrabz(t->ar->regiondata, t->center[0], t->center[1], t->center[2]); - } + } } } @@ -1268,18 +1268,18 @@ void calculatePropRatio(TransInfo *t) int i; float dist; short connected = t->flag & T_PROP_CONNECTED; - + if (t->flag & T_PROP_EDIT) { for(i = 0 ; i < t->total; i++, td++) { if (td->flag & TD_SELECTED) { td->factor = 1.0f; } - else if ((connected && + else if ((connected && (td->flag & TD_NOTCONNECTED || td->dist > t->prop_size)) || (connected == 0 && td->rdist > t->prop_size)) { - /* + /* The elements are sorted according to their dist member in the array, that means we can stop when it finds one element outside of the propsize. */ @@ -1291,7 +1291,7 @@ void calculatePropRatio(TransInfo *t) /* Use rdist for falloff calculations, it is the real distance */ td->flag &= ~TD_NOACTION; dist= (t->prop_size-td->rdist)/t->prop_size; - + /* * Clamp to positive numbers. * Certain corner cases with connectivity and individual centers @@ -1299,7 +1299,7 @@ void calculatePropRatio(TransInfo *t) */ if (dist < 0.0f) dist = 0.0f; - + switch(t->prop_mode) { case PROP_SHARP: td->factor= dist*dist; @@ -1362,27 +1362,19 @@ void calculatePropRatio(TransInfo *t) } } -/* XXX only to make manipulators run now */ -TransInfo *BIF_GetTransInfo() -{ - static struct TransInfo trans; - memset(&trans, 0, sizeof(struct TransInfo)); - return &trans; -} - float get_drawsize(ARegion *ar, float *co) { RegionView3D *rv3d= ar->regiondata; float size, vec[3], len1, len2; - + /* size calculus, depending ortho/persp settings, like initgrabz() */ size= rv3d->persmat[0][3]*co[0]+ rv3d->persmat[1][3]*co[1]+ rv3d->persmat[2][3]*co[2]+ rv3d->persmat[3][3]; - + VECCOPY(vec, rv3d->persinv[0]); len1= Normalize(vec); VECCOPY(vec, rv3d->persinv[1]); len2= Normalize(vec); - + size*= 0.01f*(len1>len2?len1:len2); /* correct for window size to make widgets appear fixed size */ diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 7c71e89f948..c656b097cb9 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -174,37 +174,10 @@ static void stats_editbone(View3D *v3d, EditBone *ebo) protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &v3d->twdrawflag); } -/* only counts the parent selection, and tags transform flag */ -/* bad call... should re-use method from transform_conversion once */ -static void count_bone_select(TransInfo *t, bArmature *arm, ListBase *lb, int do_it) -{ - Bone *bone; - int do_next; - - for(bone= lb->first; bone; bone= bone->next) { - bone->flag &= ~BONE_TRANSFORM; - do_next= do_it; - if(do_it) { - if(bone->layer & arm->layer) { - if (bone->flag & BONE_SELECTED) { - /* We don't let connected children get "grabbed" */ - if ( (t->mode!=TFM_TRANSLATION) || (bone->flag & BONE_CONNECTED)==0 ) { - bone->flag |= BONE_TRANSFORM; - t->total++; - do_next= 0; // no transform on children if one parent bone is selected - } - } - } - } - count_bone_select(t, arm, &bone->childbase, do_next); - } -} - /* centroid, boundbox, of selection */ /* returns total items selected */ int calc_manipulator_stats(const bContext *C) { - TransInfo *t= BIF_GetTransInfo(); // XXX ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); Scene *scene= CTX_data_scene(C); @@ -369,17 +342,12 @@ int calc_manipulator_stats(const bContext *C) else if(ob && (ob->flag & OB_POSEMODE)) { bArmature *arm = ob->data; bPoseChannel *pchan; - int mode; + 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; - mode = t->mode; - t->mode = TFM_ROTATION; // mislead counting bones... bah + totsel = count_set_pose_transflags(&mode, 0, ob); - /* count total, we use same method as transform will do */ - t->total= 0; - count_bone_select(t, arm, &arm->bonebase, 1); - totsel = t->total; if(totsel) { /* use channels to get stats */ for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { @@ -391,8 +359,6 @@ int calc_manipulator_stats(const bContext *C) Mat4MulVecfl(ob->obmat, scene->twmin); Mat4MulVecfl(ob->obmat, scene->twmax); } - /* restore, mode can be TFM_INIT */ - t->mode = mode; } else if(G.f & (G_VERTEXPAINT + G_TEXTUREPAINT + G_WEIGHTPAINT + G_SCULPTMODE)) { ; @@ -446,17 +412,12 @@ int calc_manipulator_stats(const bContext *C) if(ob && totsel) { switch(v3d->twmode) { - case V3D_MANIP_GLOBAL: - strcpy(t->spacename, "global"); - break; case V3D_MANIP_NORMAL: if(obedit || ob->flag & OB_POSEMODE) { float mat[3][3]; int type; - strcpy(t->spacename, "normal"); - type = getTransformOrientation(C, normal, plane, (v3d->around == V3D_ACTIVE)); switch (type) @@ -499,7 +460,6 @@ int calc_manipulator_stats(const bContext *C) } /* no break we define 'normal' as 'local' in Object mode */ case V3D_MANIP_LOCAL: - strcpy(t->spacename, "local"); Mat4CpyMat4(rv3d->twmat, ob->obmat); Mat4Ortho(rv3d->twmat); break; @@ -507,14 +467,13 @@ int calc_manipulator_stats(const bContext *C) case V3D_MANIP_VIEW: { float mat[3][3]; - strcpy(t->spacename, "view"); Mat3CpyMat4(mat, rv3d->viewinv); Mat3Ortho(mat); Mat4CpyMat3(rv3d->twmat, mat); } break; default: /* V3D_MANIP_CUSTOM */ - applyTransformOrientation(C, t); + // XXX applyTransformOrientation(C, t); break; } @@ -710,7 +669,6 @@ static void draw_manipulator_axes(View3D *v3d, int colcode, int flagx, int flagy /* only called while G.moving */ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int drawflags) { - TransInfo *t= BIF_GetTransInfo(); // XXX GLUquadricObj *qobj; float size, phi, startphi, vec[3], svec[3], matt[4][4], cross[3], tmat[3][3]; int arcs= (G.rt!=2); @@ -726,7 +684,7 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d /* we need both [4][4] transforms, t->mat seems to be premul, not post for mat[][4] */ Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - Mat4MulMat34(matt, t->mat, rv3d->twmat); +// XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); /* Screen aligned view rot circle */ if(drawflags & MAN_ROT_V) { @@ -735,15 +693,15 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d glPushMatrix(); size= screen_aligned(rv3d, rv3d->twmat); - vec[0]= (float)(t->con.imval[0] - t->center2d[0]); - vec[1]= (float)(t->con.imval[1] - t->center2d[1]); + vec[0]= 0; // XXX (float)(t->con.imval[0] - t->center2d[0]); + vec[1]= 0; // XXX (float)(t->con.imval[1] - t->center2d[1]); vec[2]= 0.0f; Normalize(vec); startphi= saacos( vec[1] ); if(vec[0]<0.0) startphi= -startphi; - phi= (float)fmod(180.0*t->val/M_PI, 360.0); + phi= 0; // XXX (float)fmod(180.0*t->val/M_PI, 360.0); if(phi > 180.0) phi-= 360.0; else if(phi<-180.0) phi+= 360.0; @@ -755,8 +713,8 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d float imat[3][3], ivmat[3][3]; /* try to get the start rotation */ - svec[0]= (float)(t->con.imval[0] - t->center2d[0]); - svec[1]= (float)(t->con.imval[1] - t->center2d[1]); + svec[0]= 0; // XXX (float)(t->con.imval[0] - t->center2d[0]); + svec[1]= 0; // XXX (float)(t->con.imval[1] - t->center2d[1]); svec[2]= 0.0f; /* screen aligned vec transform back to manipulator space */ @@ -848,7 +806,6 @@ static void draw_manipulator_rotate_ghost(View3D *v3d, RegionView3D *rv3d, int d static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, int drawflags, int combo) { - TransInfo *t= BIF_GetTransInfo(); // XXX GLUquadricObj *qobj; double plane[4]; float size, vec[3], unitmat[4][4]; @@ -900,8 +857,8 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if(moving) { float vec[3]; - vec[0]= (float)(t->imval[0] - t->center2d[0]); - vec[1]= (float)(t->imval[1] - t->center2d[1]); + 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(vec); VecMulf(vec, 1.2f*size); @@ -917,7 +874,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if(moving) { float matt[4][4]; Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - Mat4MulMat34(matt, t->mat, rv3d->twmat); + // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); wmMultMatrix(matt); glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW); } @@ -1121,7 +1078,6 @@ static void drawsolidcube(float size) static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, int drawflags, int combo, int colcode) { - TransInfo *t= BIF_GetTransInfo(); // XXX float cywid= 0.25f*0.01f*(float)U.tw_handlesize; float cusize= cywid*0.75f, dz; @@ -1153,7 +1109,7 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, float matt[4][4]; Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - Mat4MulMat34(matt, t->mat, rv3d->twmat); + // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); wmMultMatrix(matt); glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW); } @@ -1238,7 +1194,6 @@ static void draw_cylinder(GLUquadricObj *qobj, float len, float width) static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int moving, int drawflags, int combo, int colcode) { - TransInfo *t= BIF_GetTransInfo(); // XXX GLUquadricObj *qobj; float cylen= 0.01f*(float)U.tw_handlesize; float cywid= 0.25f*cylen, dz, size; @@ -1248,7 +1203,7 @@ static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int movi /* when called while moving in mixed mode, do not draw when... */ if((drawflags & MAN_TRANS_C)==0) return; - if(moving) glTranslatef(t->vec[0], t->vec[1], t->vec[2]); + // XXX if(moving) glTranslatef(t->vec[0], t->vec[1], t->vec[2]); glDisable(GL_DEPTH_TEST); qobj= gluNewQuadric(); @@ -1314,7 +1269,6 @@ static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int movi static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int moving, int drawflags, int combo, int colcode) { - TransInfo *t= BIF_GetTransInfo(); // XXX GLUquadricObj *qobj; float size; float cylen= 0.01f*(float)U.tw_handlesize; @@ -1342,8 +1296,8 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov if(moving) { float vec[3]; - vec[0]= (float)(t->imval[0] - t->center2d[0]); - vec[1]= (float)(t->imval[1] - t->center2d[1]); + 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(vec); VecMulf(vec, 1.2f*size); @@ -1359,9 +1313,9 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov if(moving) { float matt[4][4]; Mat4CpyMat4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - if (t->flag & T_USES_MANIPULATOR) { - Mat4MulMat34(matt, t->mat, rv3d->twmat); - } + // XXX if (t->flag & T_USES_MANIPULATOR) { + // XXX Mat4MulMat34(matt, t->mat, rv3d->twmat); + // XXX } wmMultMatrix(matt); } else { From 3116062a828e24ed2e91c219ab338a38030f2f42 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 12 Jul 2009 02:06:15 +0000 Subject: [PATCH 170/512] 2.5: Couple of small fun features * Text window font size now supports full range 8-32, instead of just 12 and 15. I added BLF_fixed_width to get the character width of a fixed size font. * Buttons do undo push on change again. * Animated/Keyframe/Driver colors are now themable, with blend value to blend with original color. Set this to 0.5 now to give colors less constrast. * Fix tooltip popping up with RMB menu open, and missing redraw. * Autokeyframe now works for buttons. * Driver expressions can be edited in place in a button now. (still some refresh issues). * Also made python driver default for the Add Driver function in the RMB button. This way you don't have to open a Graph editor if you just want to type an expression. Also, the default expression then is the current value. * Tooltips now show some extra info, not sure what is good to have, but currently I added: * Shortcut key for operator buttons. * Python struct & property name for RNA buttons. * Expression for driven values. * Value for text/search/pointer buttons. --- source/blender/blenfont/BLF_api.h | 7 + source/blender/blenfont/intern/blf.c | 10 ++ source/blender/blenfont/intern/blf_font.c | 21 +++ source/blender/blenfont/intern/blf_internal.h | 1 + source/blender/editors/animation/drivers.c | 37 ++++- source/blender/editors/animation/keyframing.c | 16 ++ .../blender/editors/include/ED_keyframing.h | 6 +- source/blender/editors/interface/interface.c | 9 +- .../editors/interface/interface_anim.c | 141 ++++++++++++++---- .../editors/interface/interface_handlers.c | 82 ++++++++-- .../editors/interface/interface_intern.h | 3 + .../editors/interface/interface_regions.c | 77 +++++++++- .../editors/interface/interface_widgets.c | 47 +++--- .../editors/space_buttons/space_buttons.c | 3 + .../blender/editors/space_outliner/outliner.c | 2 +- source/blender/editors/space_text/text_draw.c | 78 +++++----- .../blender/editors/space_text/text_intern.h | 1 + source/blender/editors/space_text/text_ops.c | 16 +- .../blender/editors/space_text/text_python.c | 8 +- source/blender/editors/transform/transform.h | 1 - .../editors/transform/transform_conversions.c | 21 +-- source/blender/makesdna/DNA_space_types.h | 3 +- source/blender/makesdna/DNA_userdef_types.h | 12 ++ source/blender/makesrna/intern/rna_space.c | 11 +- source/blender/makesrna/intern/rna_userdef.c | 50 +++++++ 25 files changed, 520 insertions(+), 143 deletions(-) diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index 99934a80143..b77f4a8fcd1 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -70,6 +70,13 @@ void BLF_boundbox(char *str, struct rctf *box); float BLF_width(char *str); float BLF_height(char *str); + +/* + * For fixed width fonts only, returns the width of a + * character. + */ +float BLF_fixed_width(void); + /* * and this two function return the width and height * of the string, using the default font and both value diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index 9a249c2f241..cd7f969d5e5 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -398,6 +398,16 @@ float BLF_width(char *str) return(0.0f); } +float BLF_fixed_width(void) +{ + FontBLF *font; + + font= global_font[global_font_cur]; + if (font) + return(blf_font_fixed_width(font)); + return(0.0f); +} + float BLF_width_default(char *str) { FontBLF *font; diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index affc35ea11e..6fc35a96e1e 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -274,6 +274,27 @@ float blf_font_height(FontBLF *font, char *str) return((box.ymax - box.ymin) * font->aspect); } +float blf_font_fixed_width(FontBLF *font) +{ + GlyphBLF *g; + FT_UInt glyph_index; + unsigned int c = ' '; + + if (!font->glyph_cache) + return 0.0f; + + glyph_index= FT_Get_Char_Index(font->face, c); + g= blf_glyph_search(font->glyph_cache, c); + if (!g) + g= blf_glyph_add(font, glyph_index, c); + + /* if we don't find the glyph. */ + if (!g) + return 0.0f; + + return g->advance; +} + void blf_font_free(FontBLF *font) { GlyphCacheBLF *gc; diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h index c9bdc428ebb..30d5c8ede65 100644 --- a/source/blender/blenfont/intern/blf_internal.h +++ b/source/blender/blenfont/intern/blf_internal.h @@ -48,6 +48,7 @@ void blf_font_draw(FontBLF *font, char *str); void blf_font_boundbox(FontBLF *font, char *str, rctf *box); float blf_font_width(FontBLF *font, char *str); float blf_font_height(FontBLF *font, char *str); +float blf_font_fixed_width(FontBLF *font); void blf_font_free(FontBLF *font); GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi); diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index fdce0965ce3..849e2d2eede 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -135,7 +135,7 @@ FCurve *verify_driver_fcurve (ID *id, const char rna_path[], const int array_ind /* Main Driver Management API calls: * Add a new driver for the specified property on the given ID block */ -short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short flag) +short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short flag, int type) { PointerRNA id_ptr, ptr; PropertyRNA *prop; @@ -150,6 +150,39 @@ short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short fla /* create F-Curve with Driver */ fcu= verify_driver_fcurve(id, rna_path, array_index, 1); + + if(fcu && fcu->driver) { + fcu->driver->type= type; + + /* fill in current value for python */ + if(type == DRIVER_TYPE_PYTHON) { + PropertyType proptype= RNA_property_type(prop); + int array= RNA_property_array_length(prop); + char *expression= fcu->driver->expression; + int val, maxlen= sizeof(fcu->driver->expression); + float fval; + + if(proptype == PROP_BOOLEAN) { + if(!array) val= RNA_property_boolean_get(&ptr, prop); + else val= RNA_property_boolean_get_index(&ptr, prop, array_index); + + BLI_strncpy(expression, (val)? "True": "False", maxlen); + } + else if(proptype == PROP_INT) { + if(!array) val= RNA_property_int_get(&ptr, prop); + else val= RNA_property_int_get_index(&ptr, prop, array_index); + + BLI_snprintf(expression, maxlen, "%d", val); + } + else if(proptype == PROP_FLOAT) { + if(!array) fval= RNA_property_float_get(&ptr, prop); + else fval= RNA_property_float_get_index(&ptr, prop, array_index); + + BLI_snprintf(expression, maxlen, "%.3f", fval); + } + + } + } /* done */ return (fcu != NULL); @@ -217,7 +250,7 @@ static int add_driver_button_exec (bContext *C, wmOperator *op) length= 1; for (a=0; asrna, "all", 1, "All", "Delete keyfames from all elements of the array."); } +/* ******************************************* */ +/* AUTO KEYFRAME */ + +int autokeyframe_cfra_can_key(Scene *scene, ID *id) +{ + float cfra= (float)CFRA; // XXX for now, this will do + + /* only filter if auto-key mode requires this */ + if (IS_AUTOKEY_ON(scene) == 0) + return 0; + else if (IS_AUTOKEY_MODE(scene, NORMAL)) + return 1; + else + return id_frame_has_keyframe(id, cfra, ANIMFILTER_KEYS_LOCAL); +} + /* ******************************************* */ /* KEYFRAME DETECTION */ diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index 503d71b0d3e..3b3d0157362 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -30,6 +30,7 @@ struct ListBase; struct ID; +struct Scene; struct KeyingSet; @@ -168,7 +169,7 @@ void ANIM_OT_keyingset_add_destination(struct wmOperatorType *ot); /* Main Driver Management API calls: * Add a new driver for the specified property on the given ID block */ -short ANIM_add_driver (struct ID *id, const char rna_path[], int array_index, short flag); +short ANIM_add_driver (struct ID *id, const char rna_path[], int array_index, short flag, int type); /* Main Driver Management API calls: * Remove the driver for the specified property on the given ID block (if available) @@ -197,6 +198,9 @@ void ANIM_OT_remove_driver_button(struct wmOperatorType *ot); /* check if a flag is set for auto-keyframing (as userprefs only!) */ #define IS_AUTOKEY_FLAG(flag) (U.autokey_flag & AUTOKEY_FLAG_##flag) +/* auto-keyframing feature - checks for whether anything should be done for the current frame */ +int autokeyframe_cfra_can_key(struct Scene *scene, struct ID *id); + /* ************ Keyframe Checking ******************** */ /* Lesser Keyframe Checking API call: diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 6f86e3e809a..63e16c7933a 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -1312,8 +1312,10 @@ void ui_get_but_string(uiBut *but, char *str, int maxlen) BLI_strncpy(str, but->poin, maxlen); return; } + else if(ui_but_anim_expression_get(but, str, maxlen)) + ; /* driver expression */ else { - /* number */ + /* number editing */ double value; value= ui_get_but_val(but); @@ -1384,7 +1386,12 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) BLI_strncpy(but->poin, str, but->hardmax); return 1; } + else if(ui_but_anim_expression_set(but, str)) { + /* driver expression */ + return 1; + } else { + /* number editing */ double value; /* XXX 2.50 missing python api */ diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 7c439f408ba..4a2ef50a31b 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -10,6 +10,7 @@ #include "DNA_screen_types.h" #include "BLI_listbase.h" +#include "BLI_string.h" #include "BKE_animsys.h" #include "BKE_context.h" @@ -27,49 +28,135 @@ #include "interface_intern.h" -void ui_but_anim_flag(uiBut *but, float cfra) +static FCurve *ui_but_get_fcurve(uiBut *but, bAction **action, int *driven) { - but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY|UI_BUT_DRIVEN); - + FCurve *fcu= NULL; + + *driven= 0; + /* there must be some RNA-pointer + property combo for this button */ - if (but->rnaprop && but->rnapoin.id.data && + if(but->rnaprop && but->rnapoin.id.data && RNA_property_animateable(&but->rnapoin, but->rnaprop)) { AnimData *adt= BKE_animdata_from_id(but->rnapoin.id.data); - FCurve *fcu; char *path; - if (adt) { - if ((adt->action && adt->action->curves.first) || (adt->drivers.first)) { + if(adt) { + if((adt->action && adt->action->curves.first) || (adt->drivers.first)) { /* XXX this function call can become a performance bottleneck */ path= RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop); - - if (path) { + + if(path) { /* animation takes priority over drivers */ - if (adt->action && adt->action->curves.first) { + if(adt->action && adt->action->curves.first) fcu= list_find_fcurve(&adt->action->curves, path, but->rnaindex); - - if (fcu) { - but->flag |= UI_BUT_ANIMATED; - - if (fcurve_frame_has_keyframe(fcu, cfra, 0)) - but->flag |= UI_BUT_ANIMATED_KEY; - } - } /* if not animated, check if driven */ - if ((but->flag & UI_BUT_ANIMATED)==0 && (adt->drivers.first)) { + if(!fcu && (adt->drivers.first)) { fcu= list_find_fcurve(&adt->drivers, path, but->rnaindex); - if (fcu) - but->flag |= UI_BUT_DRIVEN; + if(fcu) + *driven= 1; } - + + if(fcu && action) + *action= adt->action; + MEM_freeN(path); } } } } + + return fcu; +} + +void ui_but_anim_flag(uiBut *but, float cfra) +{ + FCurve *fcu; + int driven; + + but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY|UI_BUT_DRIVEN); + + fcu= ui_but_get_fcurve(but, NULL, &driven); + + if(fcu) { + if(!driven) { + but->flag |= UI_BUT_ANIMATED; + + if(fcurve_frame_has_keyframe(fcu, cfra, 0)) + but->flag |= UI_BUT_ANIMATED_KEY; + } + else { + but->flag |= UI_BUT_DRIVEN; + } + } +} + +int ui_but_anim_expression_get(uiBut *but, char *str, int maxlen) +{ + FCurve *fcu; + ChannelDriver *driver; + int driven; + + fcu= ui_but_get_fcurve(but, NULL, &driven); + + if(fcu && driven) { + driver= fcu->driver; + + if(driver && driver->type == DRIVER_TYPE_PYTHON) { + BLI_strncpy(str, driver->expression, maxlen); + return 1; + } + } + + return 0; +} + +int ui_but_anim_expression_set(uiBut *but, const char *str) +{ + FCurve *fcu; + ChannelDriver *driver; + int driven; + + fcu= ui_but_get_fcurve(but, NULL, &driven); + + if(fcu && driven) { + driver= fcu->driver; + + if(driver && driver->type == DRIVER_TYPE_PYTHON) { + BLI_strncpy(driver->expression, str, sizeof(driver->expression)); + return 1; + } + } + + return 0; +} + +void ui_but_anim_autokey(uiBut *but, Scene *scene, float cfra) +{ + ID *id; + bAction *action; + FCurve *fcu; + int driven; + + fcu= ui_but_get_fcurve(but, &action, &driven); + + if(fcu && !driven) { + id= but->rnapoin.id.data; + + if(autokeyframe_cfra_can_key(scene, id)) { + short flag = 0; + + if (IS_AUTOKEY_FLAG(INSERTNEEDED)) + flag |= INSERTKEY_NEEDED; + if (IS_AUTOKEY_FLAG(AUTOMATKEY)) + flag |= INSERTKEY_MATRIX; + + fcu->flag &= ~FCURVE_SELECTED; + insert_keyframe(id, action, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag); + } + } } void uiAnimContextProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index) @@ -140,6 +227,7 @@ void ui_but_anim_menu(bContext *C, uiBut *but) uiItemBooleanO(layout, "Delete Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0); } } + else if(but->flag & UI_BUT_DRIVEN); else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) { if(length) { uiItemBooleanO(layout, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1); @@ -153,17 +241,18 @@ void ui_but_anim_menu(bContext *C, uiBut *but) uiItemS(layout); if(length) { - uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 1); - uiItemBooleanO(layout, "Remove Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); + uiItemBooleanO(layout, "Delete Drivers", 0, "ANIM_OT_remove_driver_button", "all", 1); + uiItemBooleanO(layout, "Delete Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); } else - uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); + uiItemBooleanO(layout, "Delete Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); } + else if(but->flag & UI_BUT_ANIMATED_KEY); else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) { uiItemS(layout); if(length) { - uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 1); + uiItemBooleanO(layout, "Add Drivers", 0, "ANIM_OT_add_driver_button", "all", 1); uiItemBooleanO(layout, "Add Single Driver", 0, "ANIM_OT_add_driver_button", "all", 0); } else diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index e0ce6a7a83f..10e495cde94 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -32,6 +32,7 @@ #include "DNA_color_types.h" #include "DNA_object_types.h" +#include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_texture_types.h" #include "DNA_userdef_types.h" @@ -49,6 +50,7 @@ #include "BKE_utildefines.h" #include "ED_screen.h" +#include "ED_util.h" #include "UI_interface.h" @@ -166,6 +168,10 @@ typedef struct uiAfterFunc { PropertyRNA *rnaprop; bContextStore *context; + + char undostr[512]; + + int autokey; } uiAfterFunc; static int ui_mouse_inside_button(ARegion *ar, uiBut *but, int x, int y); @@ -174,6 +180,7 @@ static int ui_handler_region_menu(bContext *C, wmEvent *event, void *userdata); static int ui_handler_popup(bContext *C, wmEvent *event, void *userdata); static void ui_handler_remove_popup(bContext *C, void *userdata); static void ui_handle_button_activate(bContext *C, ARegion *ar, uiBut *but, uiButtonActivateType type); +static void button_timers_tooltip_remove(bContext *C, uiBut *but); /* ******************** menu navigation helpers ************** */ @@ -271,6 +278,32 @@ static void ui_apply_but_func(bContext *C, uiBut *but) } } +static void ui_apply_autokey_undo(bContext *C, uiBut *but) +{ + Scene *scene= CTX_data_scene(C); + uiAfterFunc *after; + char *str= NULL; + + if ELEM5(but->type, BLOCK, BUT, LABEL, PULLDOWN, ROUNDBOX); + else { + /* define which string to use for undo */ + if ELEM(but->type, LINK, INLINK) str= "Add button link"; + else if ELEM(but->type, MENU, ICONTEXTROW) str= but->drawstr; + else if(but->drawstr[0]) str= but->drawstr; + else str= but->tip; + } + + /* delayed, after all other funcs run, popups are closed, etc */ + if(str) { + after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc"); + BLI_strncpy(after->undostr, str, sizeof(after->undostr)); + BLI_addtail(&UIAfterFuncs, after); + } + + /* try autokey */ + ui_but_anim_autokey(but, scene, scene->r.cfra); +} + static void ui_apply_but_funcs_after(bContext *C) { uiAfterFunc *afterf, after; @@ -311,6 +344,9 @@ static void ui_apply_but_funcs_after(bContext *C) after.handle_func(C, after.handle_func_arg, after.retval); if(after.butm_func) after.butm_func(C, after.butm_func_arg, after.a2); + + if(after.undostr[0]) + ED_undo_push(C, after.undostr); } } @@ -1324,7 +1360,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) but->editstr= data->str; but->pos= strlen(data->str); but->selsta= 0; - but->selend= strlen(but->drawstr) - strlen(but->str); + but->selend= strlen(data->str); /* optional searchbox */ if(but->type==SEARCH_MENU) { @@ -1539,7 +1575,8 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle } if(changed) { - if(data->interactive) ui_apply_button(C, block, but, data, 1); + /* never update while typing for now */ + if(0/*data->interactive*/) ui_apply_button(C, block, but, data, 1); else ui_check_but(but); if(data->searchbox) @@ -3090,6 +3127,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) } /* handle menu */ else if(event->type == RIGHTMOUSE && event->val == KM_PRESS) { + button_timers_tooltip_remove(C, but); ui_but_anim_menu(C, but); return WM_UI_HANDLER_BREAK; } @@ -3315,6 +3353,27 @@ static int button_modal_state(uiHandleButtonState state) BUTTON_STATE_TEXT_SELECTING, BUTTON_STATE_MENU_OPEN); } +static void button_timers_tooltip_remove(bContext *C, uiBut *but) +{ + uiHandleButtonData *data; + + data= but->active; + + if(data->tooltiptimer) { + WM_event_remove_window_timer(data->window, data->tooltiptimer); + data->tooltiptimer= NULL; + } + if(data->tooltip) { + ui_tooltip_free(C, data->tooltip); + data->tooltip= NULL; + } + + if(data->autoopentimer) { + WM_event_remove_window_timer(data->window, data->autoopentimer); + data->autoopentimer= NULL; + } +} + static void button_tooltip_timer_reset(uiBut *but) { uiHandleButtonData *data; @@ -3362,20 +3421,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s } else { but->flag |= UI_SELECT; - - if(data->tooltiptimer) { - WM_event_remove_window_timer(data->window, data->tooltiptimer); - data->tooltiptimer= NULL; - } - if(data->tooltip) { - ui_tooltip_free(C, data->tooltip); - data->tooltip= NULL; - } - - if(data->autoopentimer) { - WM_event_remove_window_timer(data->window, data->autoopentimer); - data->autoopentimer= NULL; - } + button_timers_tooltip_remove(C, but); } /* text editing */ @@ -3502,6 +3548,10 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b } } + /* autokey & undo push */ + if(!data->cancel) + ui_apply_autokey_undo(C, but); + /* disable tooltips until mousemove */ ui_blocks_set_tooltips(data->region, 0); diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 8c254419ec3..5760a28cb5c 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -455,6 +455,9 @@ void ui_but_anim_delete_keyframe(struct bContext *C); void ui_but_anim_add_driver(struct bContext *C); void ui_but_anim_remove_driver(struct bContext *C); void ui_but_anim_menu(struct bContext *C, uiBut *but); +int ui_but_anim_expression_get(uiBut *but, char *str, int maxlen); +int ui_but_anim_expression_set(uiBut *but, const char *str); +void ui_but_anim_autokey(uiBut *but, struct Scene *scene, float cfra); #endif diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index e0c6fbd7134..c574cf1072f 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -294,19 +294,33 @@ void ui_remove_temporary_region(bContext *C, bScreen *sc, ARegion *ar) typedef struct uiTooltipData { rcti bbox; uiFontStyle fstyle; - char *tip; + char lines[5][512]; + int totline; + int toth, spaceh, lineh; } uiTooltipData; static void ui_tooltip_region_draw(const bContext *C, ARegion *ar) { uiTooltipData *data= ar->regiondata; + rcti bbox= data->bbox; + int a; ui_draw_menu_back(U.uistyles.first, NULL, &data->bbox); /* draw text */ - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); uiStyleFontSet(&data->fstyle); - uiStyleFontDraw(&data->fstyle, &data->bbox, data->tip); + + bbox.ymax= bbox.ymax - 0.5f*((bbox.ymax - bbox.ymin) - data->toth); + bbox.ymin= bbox.ymax - data->lineh; + + for(a=0; atotline; a++) { + if(a == 0) glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + else glColor4f(0.5f, 0.5f, 0.5f, 1.0f); + + uiStyleFontDraw(&data->fstyle, &bbox, data->lines[a]); + bbox.ymin -= data->lineh + data->spaceh; + bbox.ymax -= data->lineh + data->spaceh; + } } static void ui_tooltip_region_free(ARegion *ar) @@ -314,7 +328,6 @@ static void ui_tooltip_region_free(ARegion *ar) uiTooltipData *data; data= ar->regiondata; - MEM_freeN(data->tip); MEM_freeN(data); ar->regiondata= NULL; } @@ -325,9 +338,11 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) static ARegionType type; ARegion *ar; uiTooltipData *data; + IDProperty *prop; + char buf[512]; float fonth, fontw, aspect= but->block->aspect; float x1f, x2f, y1f, y2f; - int x1, x2, y1, y2, winx, winy, ofsx, ofsy; + int x1, x2, y1, y2, winx, winy, ofsx, ofsy, w, h, a; if(!but->tip || strlen(but->tip)==0) return NULL; @@ -342,18 +357,64 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) /* create tooltip data */ data= MEM_callocN(sizeof(uiTooltipData), "uiTooltipData"); - data->tip= BLI_strdup(but->tip); + + BLI_strncpy(data->lines[0], but->tip, sizeof(data->lines[0])); + data->totline= 1; + + if(but->optype && !(but->block->flag & UI_BLOCK_LOOP)) { + /* operator keymap (not menus, they already have it) */ + prop= (but->opptr)? but->opptr->data: NULL; + + if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) { + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Shortcut: %s", buf); + data->totline++; + } + } + + if(ELEM3(but->type, TEX, IDPOIN, SEARCH_MENU)) { + /* full string */ + ui_get_but_string(but, buf, sizeof(buf)); + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Value: %s", buf); + data->totline++; + } + + if(but->rnaprop) { + if(but->flag & UI_BUT_DRIVEN) { + if(ui_but_anim_expression_get(but, buf, sizeof(buf))) { + /* expression */ + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Expression: %s", buf); + data->totline++; + } + } + + /* rna info */ + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s.%s", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop)); + data->totline++; + } /* set font, get bb */ data->fstyle= style->widget; /* copy struct */ data->fstyle.align= UI_STYLE_TEXT_CENTER; ui_fontscale(&data->fstyle.points, aspect); uiStyleFontSet(&data->fstyle); - fontw= aspect * BLF_width(data->tip); - fonth= aspect * BLF_height(data->tip); + + h= BLF_height(data->lines[0]); + + for(a=0, fontw=0, fonth=0; atotline; a++) { + w= BLF_width(data->lines[a]); + fontw= MAX2(fontw, w); + fonth += (a == 0)? h: h+5; + } + + fontw *= aspect; + fonth *= aspect; ar->regiondata= data; + data->toth= fonth; + data->lineh= h*aspect; + data->spaceh= 5*aspect; + /* compute position */ ofsx= (but->block->panel)? but->block->panel->ofsx: 0; ofsy= (but->block->panel)? but->block->panel->ofsy: 0; diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 2cd7c1d61cd..8f40b2e4bfd 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -85,15 +85,6 @@ typedef struct uiWidgetTrias { } uiWidgetTrias; -typedef struct uiWidgetStateColors { - char inner_anim[4]; - char inner_anim_sel[4]; - char inner_key[4]; - char inner_key_sel[4]; - char inner_driven[4]; - char inner_driven_sel[4]; -} uiWidgetStateColors; - typedef struct uiWidgetBase { int totvert, halfwayvert; @@ -116,6 +107,7 @@ typedef struct uiWidgetType { /* pointer to theme color definition */ uiWidgetColors *wcol_theme; + uiWidgetStateColors *wcol_state; /* converted colors for state */ uiWidgetColors wcol; @@ -918,6 +910,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB char inner_key_sel[4]; char inner_driven[4]; char inner_driven_sel[4]; + float blend; */ @@ -925,9 +918,10 @@ static struct uiWidgetStateColors wcol_state= { {115, 190, 76, 255}, {90, 166, 51, 255}, {240, 235, 100, 255}, - {148, 204, 76, 255}, + {215, 211, 75, 255}, {180, 0, 255, 255}, - {153, 0, 230, 255} + {153, 0, 230, 255}, + 0.5f, 0.0f }; /* uiWidgetColors @@ -1147,7 +1141,6 @@ static struct uiWidgetColors wcol_tmp= { /* called for theme init (new theme) and versions */ void ui_widget_color_init(ThemeUI *tui) { - tui->wcol_regular= wcol_regular; tui->wcol_tool= wcol_tool; tui->wcol_text= wcol_text; @@ -1162,24 +1155,37 @@ void ui_widget_color_init(ThemeUI *tui) tui->wcol_menu_item= wcol_menu_item; tui->wcol_box= wcol_box; tui->wcol_scroll= wcol_scroll; + + tui->wcol_state= wcol_state; } /* ************ button callbacks, state ***************** */ +static void widget_state_blend(char *cp, char *cpstate, float fac) +{ + if(fac != 0.0f) { + cp[0]= (int)((1.0f-fac)*cp[0] + fac*cpstate[0]); + cp[1]= (int)((1.0f-fac)*cp[1] + fac*cpstate[1]); + cp[2]= (int)((1.0f-fac)*cp[2] + fac*cpstate[2]); + } +} + /* copy colors from theme, and set changes in it based on state */ static void widget_state(uiWidgetType *wt, int state) { + uiWidgetStateColors *wcol_state= wt->wcol_state; + wt->wcol= *(wt->wcol_theme); if(state & UI_SELECT) { + QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel) + if(state & UI_BUT_ANIMATED_KEY) - QUATCOPY(wt->wcol.inner, wcol_state.inner_key_sel) + widget_state_blend(wt->wcol.inner, wcol_state->inner_key_sel, wcol_state->blend); else if(state & UI_BUT_ANIMATED) - QUATCOPY(wt->wcol.inner, wcol_state.inner_anim_sel) + widget_state_blend(wt->wcol.inner, wcol_state->inner_anim_sel, wcol_state->blend); else if(state & UI_BUT_DRIVEN) - QUATCOPY(wt->wcol.inner, wcol_state.inner_driven_sel) - else - QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel) + widget_state_blend(wt->wcol.inner, wcol_state->inner_driven_sel, wcol_state->blend); VECCOPY(wt->wcol.text, wt->wcol.text_sel); @@ -1190,11 +1196,11 @@ static void widget_state(uiWidgetType *wt, int state) } else { if(state & UI_BUT_ANIMATED_KEY) - QUATCOPY(wt->wcol.inner, wcol_state.inner_key) + widget_state_blend(wt->wcol.inner, wcol_state->inner_key, wcol_state->blend); else if(state & UI_BUT_ANIMATED) - QUATCOPY(wt->wcol.inner, wcol_state.inner_anim) + widget_state_blend(wt->wcol.inner, wcol_state->inner_anim, wcol_state->blend); else if(state & UI_BUT_DRIVEN) - QUATCOPY(wt->wcol.inner, wcol_state.inner_driven) + widget_state_blend(wt->wcol.inner, wcol_state->inner_driven, wcol_state->blend); if(state & UI_ACTIVE) { /* mouse over? */ wt->wcol.inner[0]= wt->wcol.inner[0]>=240? 255 : wt->wcol.inner[0]+15; @@ -2039,6 +2045,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) /* defaults */ wt.wcol_theme= &btheme->tui.wcol_regular; + wt.wcol_state= &btheme->tui.wcol_state; wt.state= widget_state; wt.draw= widget_but; wt.custom= NULL; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index b89a13ce218..f7be323a4c5 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -377,6 +377,9 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) ED_area_tag_redraw(sa); sbuts->preview= 1; } + + if(wmn->data == ND_KEYS) + ED_area_tag_redraw(sa); } /* only called once, from space/spacetypes.c */ diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 6563a7dc7df..e8c32d2a2c7 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -3239,7 +3239,7 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, short m case DRIVERS_EDITMODE_ADD: { /* add a new driver with the information obtained (only if valid) */ - ANIM_add_driver(id, path, array_index, flag); + ANIM_add_driver(id, path, array_index, flag, DRIVER_TYPE_AVERAGE); } break; case DRIVERS_EDITMODE_REMOVE: diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c index f58af47a6bd..adba7ef100a 100644 --- a/source/blender/editors/space_text/text_draw.c +++ b/source/blender/editors/space_text/text_draw.c @@ -95,13 +95,7 @@ static int text_font_draw_character(SpaceText *st, int x, int y, char c) BLF_position(x, y, 0); BLF_draw(str); - return text_font_width_character(st); -} - -int text_font_width_character(SpaceText *st) -{ - // XXX need quick BLF function, or cache it somewhere - return (st->lheight == 12)? 7: 9; + return st->cwidth; } int text_font_width(SpaceText *st, char *str) @@ -523,7 +517,7 @@ int wrap_width(SpaceText *st, ARegion *ar) int x, max; x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET; - max= (ar->winx-x)/text_font_width_character(st); + max= (ar->winx-x)/st->cwidth; return max>8 ? max : 8; } @@ -615,7 +609,7 @@ static int text_draw_wrapped(SpaceText *st, char *str, int x, int y, int w, char len= flatten_string(st, &fs, str); str= fs.buf; - max= w/text_font_width_character(st); + max= w/st->cwidth; if(max<8) max= 8; basex= x; @@ -687,7 +681,7 @@ static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int dra } else { while(w-- && *acc++ < maxwidth) - r+= text_font_width_character(st); + r+= st->cwidth; } flatten_string_free(&fs); @@ -877,18 +871,18 @@ static void draw_markers(SpaceText *st, ARegion *ar) if(y1==y2) { y -= y1*st->lheight; glBegin(GL_LINE_LOOP); - glVertex2i(x+x2*text_font_width_character(st)+1, y); - glVertex2i(x+x1*text_font_width_character(st)-2, y); - glVertex2i(x+x1*text_font_width_character(st)-2, y-st->lheight); - glVertex2i(x+x2*text_font_width_character(st)+1, y-st->lheight); + glVertex2i(x+x2*st->cwidth+1, y); + glVertex2i(x+x1*st->cwidth-2, y); + glVertex2i(x+x1*st->cwidth-2, y-st->lheight); + glVertex2i(x+x2*st->cwidth+1, y-st->lheight); glEnd(); } else { y -= y1*st->lheight; glBegin(GL_LINE_STRIP); glVertex2i(ar->winx, y); - glVertex2i(x+x1*text_font_width_character(st)-2, y); - glVertex2i(x+x1*text_font_width_character(st)-2, y-st->lheight); + glVertex2i(x+x1*st->cwidth-2, y); + glVertex2i(x+x1*st->cwidth-2, y-st->lheight); glVertex2i(ar->winx, y-st->lheight); glEnd(); y-=st->lheight; @@ -905,8 +899,8 @@ static void draw_markers(SpaceText *st, ARegion *ar) glBegin(GL_LINE_STRIP); glVertex2i(x, y); - glVertex2i(x+x2*text_font_width_character(st)+1, y); - glVertex2i(x+x2*text_font_width_character(st)+1, y-st->lheight); + glVertex2i(x+x2*st->cwidth+1, y); + glVertex2i(x+x2*st->cwidth+1, y-st->lheight); glVertex2i(x, y-st->lheight); glEnd(); } @@ -940,18 +934,18 @@ static void draw_documentation(SpaceText *st, ARegion *ar) if(l<0) return; if(st->showlinenrs) { - x= text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; + x= st->cwidth*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; } else { - x= text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET - 4; + x= st->cwidth*(st->text->curc-st->left) + TXT_OFFSET - 4; } if(texttool_suggest_first()) { - x += SUGG_LIST_WIDTH*text_font_width_character(st) + 50; + x += SUGG_LIST_WIDTH*st->cwidth + 50; } top= y= ar->winy - st->lheight*l - 2; len= strlen(docs); - boxw= DOC_WIDTH*text_font_width_character(st) + 20; + boxw= DOC_WIDTH*st->cwidth + 20; boxh= (DOC_HEIGHT+1)*st->lheight; /* Draw panel */ @@ -1034,14 +1028,14 @@ static void draw_suggestion_list(SpaceText *st, ARegion *ar) if(l<0) return; if(st->showlinenrs) { - x = text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; + x = st->cwidth*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; } else { - x = text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET - 4; + x = st->cwidth*(st->text->curc-st->left) + TXT_OFFSET - 4; } y = ar->winy - st->lheight*l - 2; - boxw = SUGG_LIST_WIDTH*text_font_width_character(st) + 20; + boxw = SUGG_LIST_WIDTH*st->cwidth + 20; boxh = SUGG_LIST_SIZE*st->lheight + 8; UI_ThemeColor(TH_SHADE1); @@ -1111,9 +1105,9 @@ static void draw_cursor(SpaceText *st, ARegion *ar) if(vcurl==vsell) { y -= vcurl*st->lheight; if(vcurc < vselc) - glRecti(x+vcurc*text_font_width_character(st)-1, y, x+vselc*text_font_width_character(st), y-st->lheight); + glRecti(x+vcurc*st->cwidth-1, y, x+vselc*st->cwidth, y-st->lheight); else - glRecti(x+vselc*text_font_width_character(st)-1, y, x+vcurc*text_font_width_character(st), y-st->lheight); + glRecti(x+vselc*st->cwidth-1, y, x+vcurc*st->cwidth, y-st->lheight); } else { int froml, fromc, tol, toc; @@ -1128,11 +1122,11 @@ static void draw_cursor(SpaceText *st, ARegion *ar) } y -= froml*st->lheight; - glRecti(x+fromc*text_font_width_character(st)-1, y, ar->winx, y-st->lheight); y-=st->lheight; + glRecti(x+fromc*st->cwidth-1, y, ar->winx, y-st->lheight); y-=st->lheight; for(i=froml+1; iwinx, y-st->lheight), y-=st->lheight; - glRecti(x-4, y, x+toc*text_font_width_character(st), y-st->lheight); y-=st->lheight; + glRecti(x-4, y, x+toc*st->cwidth, y-st->lheight); y-=st->lheight; } } else { @@ -1149,13 +1143,13 @@ static void draw_cursor(SpaceText *st, ARegion *ar) if(!hidden) { /* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET; - x += vselc*text_font_width_character(st); + x += vselc*st->cwidth; y= ar->winy-2 - vsell*st->lheight; if(st->overwrite) { char ch= text->sell->line[text->selc]; if(!ch) ch= ' '; - w= text_font_width_character(st); + w= st->cwidth; UI_ThemeColor(TH_HILITE); glRecti(x, y-st->lheight-1, x+w, y-st->lheight+1); } @@ -1255,8 +1249,8 @@ static void draw_brackets(SpaceText *st, ARegion *ar) if(viewc >= 0){ viewl= txt_get_span(text->lines.first, startl) - st->top + offl; - text_font_draw_character(st, x+viewc*text_font_width_character(st), y-viewl*st->lheight, ch); - text_font_draw_character(st, x+viewc*text_font_width_character(st)+1, y-viewl*st->lheight, ch); + text_font_draw_character(st, x+viewc*st->cwidth, y-viewl*st->lheight, ch); + text_font_draw_character(st, x+viewc*st->cwidth+1, y-viewl*st->lheight, ch); } /* draw closing bracket */ @@ -1267,8 +1261,8 @@ static void draw_brackets(SpaceText *st, ARegion *ar) if(viewc >= 0) { viewl= txt_get_span(text->lines.first, endl) - st->top + offl; - text_font_draw_character(st, x+viewc*text_font_width_character(st), y-viewl*st->lheight, ch); - text_font_draw_character(st, x+viewc*text_font_width_character(st)+1, y-viewl*st->lheight, ch); + text_font_draw_character(st, x+viewc*st->cwidth, y-viewl*st->lheight, ch); + text_font_draw_character(st, x+viewc*st->cwidth+1, y-viewl*st->lheight, ch); } } @@ -1313,6 +1307,8 @@ void draw_text_main(SpaceText *st, ARegion *ar) } text_font_begin(st); + st->cwidth= BLF_fixed_width(); + st->cwidth= MAX2(st->cwidth, 1); /* draw cursor */ draw_cursor(st, ar); @@ -1371,6 +1367,14 @@ void draw_text_main(SpaceText *st, ARegion *ar) /************************** update ***************************/ +void text_update_character_width(SpaceText *st) +{ + text_font_begin(st); + st->cwidth= BLF_fixed_width(); + st->cwidth= MAX2(st->cwidth, 1); + text_font_end(st); +} + /* Moves the view to the cursor location, also used to make sure the view isnt outside the file */ void text_update_cursor_moved(SpaceText *st, ARegion *ar) @@ -1380,6 +1384,8 @@ void text_update_cursor_moved(SpaceText *st, ARegion *ar) if(!text || !text->curl) return; + text_update_character_width(st); + i= txt_get_span(text->lines.first, text->sell); if(st->top+st->viewlines <= i || st->top > i) st->top= i - st->viewlines/2; @@ -1391,7 +1397,7 @@ void text_update_cursor_moved(SpaceText *st, ARegion *ar) x= text_draw(st, text->sell->line, st->left, text->selc, 0, 0, 0, NULL); if(x==0 || x>ar->winx) - st->left= text->curc-0.5*(ar->winx)/text_font_width_character(st); + st->left= text->curc-0.5*(ar->winx)/st->cwidth; } if(st->top < 0) st->top= 0; diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h index 31d29ac7f17..5ea33e1660d 100644 --- a/source/blender/editors/space_text/text_intern.h +++ b/source/blender/editors/space_text/text_intern.h @@ -55,6 +55,7 @@ int text_font_width(struct SpaceText *st, char *str); void text_update_line_edited(struct Text *text, struct TextLine *line); void text_update_edited(struct Text *text); +void text_update_character_width(struct SpaceText *st); void text_update_cursor_moved(struct SpaceText *st, struct ARegion *ar); #define TEXTXLOC 38 diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 5568900e621..f9485f17bdc 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -1289,6 +1289,8 @@ static void wrap_move_bol(SpaceText *st, ARegion *ar, short sel) Text *text= st->text; int offl, offc, lin; + text_update_character_width(st); + lin= txt_get_span(text->lines.first, text->sell); wrap_offset(st, ar, text->sell, text->selc, &offl, &offc); @@ -1307,6 +1309,8 @@ static void wrap_move_eol(SpaceText *st, ARegion *ar, short sel) Text *text= st->text; int offl, offc, lin, startl, c; + text_update_character_width(st); + lin= txt_get_span(text->lines.first, text->sell); wrap_offset(st, ar, text->sell, text->selc, &offl, &offc); startl= offl; @@ -1331,6 +1335,8 @@ static void wrap_move_up(SpaceText *st, ARegion *ar, short sel) Text *text= st->text; int offl, offl_1, offc, fromline, toline, c, target; + text_update_character_width(st); + wrap_offset(st, ar, text->sell, 0, &offl_1, &offc); wrap_offset(st, ar, text->sell, text->selc, &offl, &offc); fromline= toline= txt_get_span(text->lines.first, text->sell); @@ -1376,6 +1382,8 @@ static void wrap_move_down(SpaceText *st, ARegion *ar, short sel) Text *text= st->text; int offl, startoff, offc, fromline, toline, c, target; + text_update_character_width(st); + wrap_offset(st, ar, text->sell, text->selc, &offl, &offc); fromline= toline= txt_get_span(text->lines.first, text->sell); target= text->selc + offc; @@ -1754,6 +1762,8 @@ static void scroll_apply(bContext *C, wmOperator *op, wmEvent *event) TextScroll *tsc= op->customdata; short *mval= event->mval; + text_update_character_width(st); + if(tsc->first) { tsc->old[0]= mval[0]; tsc->old[1]= mval[1]; @@ -1763,7 +1773,7 @@ static void scroll_apply(bContext *C, wmOperator *op, wmEvent *event) } if(!tsc->scrollbar) { - tsc->delta[0]= (tsc->hold[0]-mval[0])/text_font_width_character(st); + tsc->delta[0]= (tsc->hold[0]-mval[0])/st->cwidth; tsc->delta[1]= (mval[1]-tsc->hold[1])/st->lheight; } else @@ -1906,6 +1916,8 @@ static void set_cursor_to_pos(SpaceText *st, ARegion *ar, int x, int y, int sel) int *charp; int w; + text_update_character_width(st); + if(sel) { linep= &text->sell; charp= &text->selc; } else { linep= &text->curl; charp= &text->curc; } @@ -1917,7 +1929,7 @@ static void set_cursor_to_pos(SpaceText *st, ARegion *ar, int x, int y, int sel) x-= TXT_OFFSET; if(x<0) x= 0; - x = (x/text_font_width_character(st)) + st->left; + x = (x/st->cwidth) + st->left; if(st->wordwrap) { int i, j, endj, curs, max, chop, start, end, chars, loop; diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c index 4fa54cdf27b..b606f8cb141 100644 --- a/source/blender/editors/space_text/text_python.c +++ b/source/blender/editors/space_text/text_python.c @@ -66,16 +66,18 @@ int text_do_suggest_select(SpaceText *st, ARegion *ar) /* Count the visible lines to the cursor */ for(tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++); if(l<0) return 0; + + text_update_character_width(st); if(st->showlinenrs) { - x = text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; + x = st->cwidth*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4; } else { - x = text_font_width_character(st)*(st->text->curc-st->left) + TXT_OFFSET - 4; + x = st->cwidth*(st->text->curc-st->left) + TXT_OFFSET - 4; } y = ar->winy - st->lheight*l - 2; - w = SUGG_LIST_WIDTH*text_font_width_character(st) + 20; + w = SUGG_LIST_WIDTH*st->cwidth + 20; h = SUGG_LIST_SIZE*st->lheight + 8; // XXX getmouseco_areawin(mval); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index ed825886a05..00353cfc457 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -510,7 +510,6 @@ void transform_autoik_update(TransInfo *t, short mode); int count_set_pose_transflags(int *out_mode, short around, struct Object *ob); /* auto-keying stuff used by special_aftertrans_update */ -short autokeyframe_cfra_can_key(struct Scene *scene, struct Object *ob); void autokeyframe_ob_cb_func(struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode); void autokeyframe_pose_cb_func(struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode, short targetless_ik); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 60d209ae2db..2262c6cdeaa 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4312,21 +4312,6 @@ static void clear_trans_object_base_flags(TransInfo *t) } } -/* auto-keyframing feature - checks for whether anything should be done for the current frame */ -// TODO: this should probably be done per channel instead... -short autokeyframe_cfra_can_key(Scene *scene, Object *ob) -{ - float cfra= (float)CFRA; // XXX for now, this will do - - /* only filter if auto-key mode requires this */ - if (IS_AUTOKEY_ON(scene) == 0) - return 0; - else if (IS_AUTOKEY_MODE(scene, NORMAL)) - return 1; - else - return id_frame_has_keyframe(&ob->id, cfra, ANIMFILTER_KEYS_LOCAL); -} - /* auto-keyframing feature - for objects * tmode: should be a transform mode */ @@ -4335,7 +4320,8 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) ID *id= &ob->id; FCurve *fcu; - if (autokeyframe_cfra_can_key(scene, ob)) { + // TODO: this should probably be done per channel instead... + if (autokeyframe_cfra_can_key(scene, id)) { AnimData *adt= ob->adt; float cfra= (float)CFRA; // xxx this will do for now short flag = 0; @@ -4436,7 +4422,8 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, bPoseChannel *pchan; FCurve *fcu; - if (autokeyframe_cfra_can_key(scene, ob)) { + // TODO: this should probably be done per channel instead... + if (autokeyframe_cfra_can_key(scene, id)) { float cfra= (float)CFRA; short flag= 0; char buf[512]; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index dc0ec51fa4f..951b12b82fe 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -293,7 +293,8 @@ typedef struct SpaceText { int top, viewlines; short flags, menunr; - int lheight; + short lheight; /* user preference */ + short cwidth; /* runtime computed */ int left; int showlinenrs; int tabnumber; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 0709d2d58b0..4fab0de1f0a 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -122,6 +122,16 @@ typedef struct uiWidgetColors { short pad; } uiWidgetColors; +typedef struct uiWidgetStateColors { + char inner_anim[4]; + char inner_anim_sel[4]; + char inner_key[4]; + char inner_key_sel[4]; + char inner_driven[4]; + char inner_driven_sel[4]; + float blend, pad; +} uiWidgetStateColors; + typedef struct ThemeUI { /* Interface Elements (buttons, menus, icons) */ @@ -130,6 +140,8 @@ typedef struct ThemeUI { uiWidgetColors wcol_num, wcol_numslider; uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item; uiWidgetColors wcol_box, wcol_scroll; + + uiWidgetStateColors wcol_state; char iconfile[80]; // FILE_MAXFILE length diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 9bf3f54e159..fa81af8f140 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -799,11 +799,6 @@ static void rna_def_space_text(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem font_size_items[] = { - {12, "12", 0, "12", ""}, - {15, "15", 0, "15", ""}, - {0, NULL, 0, NULL, NULL}}; - srna= RNA_def_struct(brna, "SpaceTextEditor", "Space"); RNA_def_struct_sdna(srna, "SpaceText"); RNA_def_struct_ui_text(srna, "Space Text Editor", "Text editor space data."); @@ -848,9 +843,9 @@ static void rna_def_space_text(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Tab Width", "Number of spaces to display tabs with."); RNA_def_property_update(prop, NC_TEXT|ND_DISPLAY, NULL); - prop= RNA_def_property(srna, "font_size", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "lheight"); - RNA_def_property_enum_items(prop, font_size_items); + prop= RNA_def_property(srna, "font_size", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "lheight"); + RNA_def_property_range(prop, 8, 32); RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text."); RNA_def_property_update(prop, NC_TEXT|ND_DISPLAY, NULL); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 977c43e6b95..ffe3751908d 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -268,7 +268,50 @@ static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna) RNA_def_property_range(prop, -100, 100); RNA_def_property_ui_text(prop, "Shade Down", ""); RNA_def_property_update(prop, NC_WINDOW, NULL); +} + +static void rna_def_userdef_theme_ui_wcol_state(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + srna= RNA_def_struct(brna, "ThemeWidgetStateColors", NULL); + RNA_def_struct_sdna(srna, "uiWidgetStateColors"); + RNA_def_struct_ui_text(srna, "Theme Widget State Color", "Theme settings for widget state colors."); + + prop= RNA_def_property(srna, "inner_anim", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Animated", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "inner_anim_sel", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Animated Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "inner_key", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Keyframe", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "inner_key_sel", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Keyframe Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "inner_driven", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Driven", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "inner_driven_sel", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Driven Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "blend", PROP_FLOAT, PROP_PERCENTAGE); + RNA_def_property_ui_text(prop, "Blend", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_ui(BlenderRNA *brna) @@ -277,6 +320,7 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna) PropertyRNA *prop; rna_def_userdef_theme_ui_wcol(brna); + rna_def_userdef_theme_ui_wcol_state(brna); srna= RNA_def_struct(brna, "ThemeUserInterface", NULL); RNA_def_struct_sdna(srna, "ThemeUI"); @@ -365,6 +409,12 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna) RNA_def_property_struct_type(prop, "ThemeWidgetColors"); RNA_def_property_ui_text(prop, "Scroll Widget Colors", ""); RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_state", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_state"); + RNA_def_property_struct_type(prop, "ThemeWidgetStateColors"); + RNA_def_property_ui_text(prop, "State Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "icon_file", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "iconfile"); From bb158ad5721b98086b77a8168a53c4901540907d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 12 Jul 2009 03:42:39 +0000 Subject: [PATCH 171/512] 2.5 - Editing Animation data (keyframes/nla-strips) using transform tools now refreshes the 3d-view in realtime. For now, this directly sets the update flags, though this really should be calling the Depsgraph API instead. --- .../editors/space_view3d/space_view3d.c | 12 + source/blender/editors/transform/transform.c | 2 +- source/blender/editors/transform/transform.h | 2 + .../editors/transform/transform_conversions.c | 225 +++++++++--------- .../editors/transform/transform_generics.c | 157 ++++++++---- 5 files changed, 236 insertions(+), 162 deletions(-) diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index f0c3a2c200c..387468f7160 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -413,11 +413,13 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) switch(wmn->data) { case ND_KEYFRAME_EDIT: case ND_KEYFRAME_PROP: + case ND_NLA_EDIT: case ND_NLA_ACTCHANGE: case ND_ANIMCHAN_SELECT: ED_region_tag_redraw(ar); break; } + break; case NC_SCENE: switch(wmn->data) { case ND_TRANSFORM: @@ -536,6 +538,16 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch(wmn->category) { + case NC_ANIMATION: + switch(wmn->data) { + case ND_KEYFRAME_EDIT: + case ND_KEYFRAME_PROP: + case ND_NLA_EDIT: + case ND_NLA_ACTCHANGE: + ED_region_tag_redraw(ar); + break; + } + break; case NC_SCENE: switch(wmn->data) { case ND_FRAME: diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 888a15e2534..d45a6f42232 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -308,7 +308,7 @@ static void viewRedrawForce(bContext *C, TransInfo *t) WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); } else if (t->spacetype == SPACE_NLA) { - WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME_EDIT, NULL); + WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); } else if(t->spacetype == SPACE_NODE) { diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 00353cfc457..db78632e76a 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -163,6 +163,8 @@ typedef struct TransDataSeq { /* for NLA transform (stored in td->extra pointer) */ typedef struct TransDataNla { + ID *id; /* ID-block NLA-data is attached to */ + struct NlaTrack *oldTrack; /* Original NLA-Track that the strip belongs to */ struct NlaTrack *nlt; /* Current NLA-Track that the strip belongs to */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 2262c6cdeaa..3d643a2dec1 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2578,28 +2578,28 @@ static void createTransNlaData(bContext *C, TransInfo *t) Scene *scene= CTX_data_scene(C); TransData *td = NULL; TransDataNla *tdn = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + int count=0; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_NLATRACKS | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - + /* which side of the current frame should be allowed */ if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -2607,15 +2607,15 @@ static void createTransNlaData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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; 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) { // TODO: we can make strips have handles later on... @@ -2628,29 +2628,29 @@ static void createTransNlaData(bContext *C, TransInfo *t) } } } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ 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; - + /* loop 2: build transdata array */ for (ale= anim_data.first; ale; ale= ale->next) { /* only if a real NLA-track */ if (ale->type == ANIMTYPE_NLATRACK) { NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; - + /* only consider selected strips */ for (strip= nlt->strips.first; strip; strip= strip->next) { // TODO: we can make strips have handles later on... @@ -2667,44 +2667,45 @@ static void createTransNlaData(bContext *C, TransInfo *t) * 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(&nlt->strips, strip); - + yval= (float)(tdn->trackIndex * NLACHANNEL_STEP); - + 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(side, strip->start, (float)CFRA)) { /* just set tdn to assume that it only has one handle for now */ tdn->handle= -1; - + /* now, link the transform data up to this data */ if (t->mode == TFM_TRANSLATION) { td->loc= tdn->h1; VECCOPY(td->iloc, tdn->h1); - + /* store all the other gunk that is required by transform */ VECCOPY(td->center, center); memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - + td->ext= NULL; td->tdi= NULL; td->val= NULL; - + td->flag |= TD_SELECTED; td->dist= 0.0f; - + Mat3One(td->mtx); Mat3One(td->smtx); } @@ -2712,7 +2713,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->val= &tdn->h1[0]; td->ival= tdn->h1[0]; } - + td->extra= tdn; td++; } @@ -2720,22 +2721,22 @@ static void createTransNlaData(bContext *C, TransInfo *t) { /* if tdn is already holding the start handle, then we're doing both, otherwise, only end */ tdn->handle= (tdn->handle) ? 2 : 1; - + /* now, link the transform data up to this data */ if (t->mode == TFM_TRANSLATION) { td->loc= tdn->h2; VECCOPY(td->iloc, tdn->h2); - + /* store all the other gunk that is required by transform */ VECCOPY(td->center, center); memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - + td->ext= NULL; td->tdi= NULL; td->val= NULL; - + td->flag |= TD_SELECTED; td->dist= 0.0f; - + Mat3One(td->mtx); Mat3One(td->smtx); } @@ -2743,11 +2744,11 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->val= &tdn->h2[0]; td->ival= tdn->h2[0]; } - + td->extra= tdn; td++; } - + /* if both handles were used, skip the next tdn (i.e. leave it blank) since the counting code is dumb... * otherwise, just advance to the next one... */ @@ -3114,32 +3115,32 @@ static void createTransActionData(bContext *C, TransInfo *t) Scene *scene= CTX_data_scene(C); TransData *td = NULL; tGPFtransdata *tfd = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + int count=0; float cfra; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ if (ac.datatype == ANIMCONT_GPENCIL) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_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 */ if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -3147,11 +3148,11 @@ static void createTransActionData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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); - + /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ @@ -3159,26 +3160,26 @@ static void createTransActionData(bContext *C, TransInfo *t) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + //if (ale->type == ANIMTYPE_GPLAYER) // count += count_gplayer_frames(ale->data, side, cfra); //else count += count_fcurve_keys(ale->key_data, side, cfra); } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ t->total= count; - + t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(Action Editor)"); td= t->data; - + if (ac.datatype == ANIMCONT_GPENCIL) { if (t->mode == TFM_TIME_SLIDE) { t->customData= MEM_callocN((sizeof(float)*2)+(sizeof(tGPFtransdata)*count), "TimeSlide + tGPFtransdata"); @@ -3191,7 +3192,7 @@ static void createTransActionData(bContext *C, TransInfo *t) } else if (t->mode == TFM_TIME_SLIDE) t->customData= MEM_callocN(sizeof(float)*2, "TimeSlide Min/Max"); - + /* loop 2: build transdata array */ for (ale= anim_data.first; ale; ale= ale->next) { //if (ale->type == ANIMTYPE_GPLAYER) { @@ -3205,7 +3206,7 @@ static void createTransActionData(bContext *C, TransInfo *t) //else { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - + /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ @@ -3213,22 +3214,22 @@ static void createTransActionData(bContext *C, TransInfo *t) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + td= FCurveToTransData(td, fcu, adt, 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; int i; - + td= (t->data + 1); for (i=1; i < count; i+=3, td+=3) { if (min > *(td->val)) min= *(td->val); if (max < *(td->val)) max= *(td->val); } - + /* minx/maxx values used by TimeSlide are stored as a * calloced 2-float array in t->customData. This gets freed * in postTrans (T_FREE_CUSTOMDATA). @@ -3254,18 +3255,18 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, * Due to NLA mapping, we apply NLA mapping to some of the verts here, * and then that mapping will be undone after transform is done. */ - + if (adt) { td2d->loc[0] = BKE_nla_tweakedit_remap(adt, loc[0], NLATIME_CONVERT_UNMAP); td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; - + td->loc = td2d->loc; td->center[0] = BKE_nla_tweakedit_remap(adt, cent[0], NLATIME_CONVERT_UNMAP); td->center[1] = cent[1]; td->center[2] = 0.0f; - + VECCOPY(td->iloc, td->loc); } else { @@ -3273,32 +3274,32 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, td2d->loc[1] = loc[1]; td2d->loc[2] = 0.0f; td2d->loc2d = loc; - + td->loc = td2d->loc; VECCOPY(td->center, cent); VECCOPY(td->iloc, td->loc); } - + memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - + td->ext= NULL; td->tdi= NULL; td->val= NULL; - + /* store AnimData info in td->extra, for applying mapping when flushing */ td->extra= adt; - + if (selected) { td->flag |= TD_SELECTED; td->dist= 0.0f; } else td->dist= MAXFLOAT; - + if (ishandle) td->flag |= TD_NOTIMESNAP; if (intvals) td->flag |= TD_INTVALUES; - + Mat3One(td->mtx); Mat3One(td->smtx); } @@ -3308,34 +3309,34 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); View2D *v2d= &ar->v2d; - + TransData *td = NULL; TransData2D *td2d = NULL; - + bAnimContext ac; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; - + BezTriple *bezt, *prevbezt; int count=0, i; float cfra; char side; - + /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) return; - + /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); 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? if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; - + UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side } @@ -3343,12 +3344,12 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) /* normal transform - both sides of current frame are considered */ side = 'B'; } - + /* 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; - + /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ @@ -3356,7 +3357,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */ if (fcu->bezt) { for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { @@ -3384,30 +3385,30 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } } } - + /* stop if trying to build list if nothing selected */ if (count == 0) { /* cleanup temp list */ BLI_freelistN(&anim_data); return; } - + /* allocate memory for data */ 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)"); - + td= t->data; td2d= t->data2d; - + /* 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); - + /* convert current-frame to action-time (slightly less accurate, espcially under * higher scaling ratios, but is faster than converting all points) */ @@ -3415,16 +3416,16 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); else cfra = (float)CFRA; - + /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse (if applicable) */ bezt= fcu->bezt; prevbezt= NULL; - + for (i=0; i < fcu->totvert; i++, prevbezt=bezt, bezt++) { if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) { TransDataCurveHandleFlags *hdata = NULL; short h1=1, h2=1; - + /* only include handles if selected, and interpolaton mode uses beztriples */ if ( (!prevbezt && (bezt->ipo==BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo==BEZT_IPO_BEZ)) ) { if (bezt->f1 & SELECT) { @@ -3443,7 +3444,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) else h2= 0; } - + /* only include main vert if selected */ if (bezt->f2 & SELECT) { /* if scaling around individuals centers, do no include keyframes */ @@ -3453,10 +3454,10 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) if (hdata == NULL) hdata = initTransDataCurveHandes(td, bezt); } - + bezt_to_transdata(td++, td2d++, adt, bezt->vec[1], bezt->vec[1], 1, 0, intvals); } - + /* special hack (must be done after initTransDataCurveHandes(), as that stores handle settings to restore...): * - Check if we've got entire BezTriple selected and we're scaling/rotating that point, * then check if we're using auto-handles. @@ -3471,11 +3472,11 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } } } - + /* Sets handles based on the selection */ testhandles_fcurve(fcu); } - + /* cleanup temp list */ BLI_freelistN(&anim_data); } @@ -3502,19 +3503,19 @@ static BeztMap *bezt_to_beztmaps (BezTriple *bezts, int totvert) BezTriple *prevbezt= NULL; BeztMap *bezm, *bezms; int i; - + /* allocate memory for this array */ if (totvert==0 || bezts==NULL) return NULL; 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; - + bezm->oldIndex= i; bezm->newIndex= i; - + bezm->pipo= (prevbezt) ? prevbezt->ipo : bezt->ipo; bezm->cipo= bezt->ipo; } @@ -3527,11 +3528,11 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) { BeztMap *bezm; int i, ok= 1; - + /* keep repeating the process until nothing is out of place anymore */ while (ok) { ok= 0; - + bezm= bezms; i= totvert; while (i--) { @@ -3540,13 +3541,13 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) if (bezm->bezt->vec[1][0] > (bezm+1)->bezt->vec[1][0]) { bezm->newIndex++; (bezm+1)->newIndex--; - + SWAP(BeztMap, *bezm, *(bezm+1)); - + ok= 1; } } - + /* do we need to check if the handles need to be swapped? * optimisation: this only needs to be performed in the first loop */ @@ -3562,7 +3563,7 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) bezm->swapHs = -1; } } - + bezm++; } } @@ -3576,13 +3577,13 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv TransData2D *td; int i, j; char *adjusted; - + /* dynamically allocate an array of chars to mark whether an TransData's * pointers have been fixed already, so that we don't override ones that are * already done */ 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++) { @@ -3593,7 +3594,7 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv for (j= 0; j < t->total; j++, td++) { /* skip item if already marked */ if (adjusted[j] != 0) continue; - + /* only selected verts */ if (bezm->pipo == BEZT_IPO_BEZ) { if (bezm->bezt->f1 & SELECT) { @@ -3624,9 +3625,9 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv } } } - + } - + /* free temp memory used for 'adjusted' array */ MEM_freeN(adjusted); } @@ -3641,25 +3642,25 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv void remake_graph_transdata (TransInfo *t, ListBase *anim_data) { bAnimListElem *ale; - + /* sort and reassign verts */ for (ale= anim_data->first; ale; ale= ale->next) { FCurve *fcu= (FCurve *)ale->key_data; - + if (fcu->bezt) { BeztMap *bezm; - + /* adjust transform-data pointers */ bezm= bezt_to_beztmaps(fcu->bezt, fcu->totvert); sort_time_beztmaps(bezm, fcu->totvert); beztmap_to_data(t, fcu, bezm, fcu->totvert); - + /* free mapping stuff */ MEM_freeN(bezm); - + /* re-sort actual beztriples (perhaps this could be done using the beztmaps to save time?) */ sort_time_fcurve(fcu); - + /* make sure handles are all set correctly */ testhandles_fcurve(fcu); } @@ -3677,11 +3678,11 @@ void flushTransGraphData(TransInfo *t) 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; atotal; 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) @@ -3694,19 +3695,19 @@ void flushTransGraphData(TransInfo *t) else td2d->loc[0]= (float)( floor(td2d->loc[0]+0.5f) ); break; - + case SACTSNAP_MARKER: /* snap to nearest marker */ td2d->loc[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, td2d->loc[0]); break; } } - - /* we need to unapply the nla-scaling from the time in some situations */ + + /* 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); else td2d->loc2d[0]= td2d->loc[0]; - + /* if int-values only, truncate to integers */ if (td->flag & TD_INTVALUES) td2d->loc2d[1]= (float)((int)td2d->loc[1]); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index af56079727f..560b37caf0a 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -264,6 +264,29 @@ static void editmesh_apply_to_mirror(TransInfo *t) } } +/* tags the given ID block for refreshes (if applicable) due to + * Animation Editor editing + */ +static void animedit_refresh_id_tags (ID *id) +{ + AnimData *adt= BKE_animdata_from_id(id); + + /* tag AnimData for refresh so that other views will update in realtime with these changes */ + if (adt) + adt->recalc |= ADT_RECALC_ANIM; + + /* if ID-block is Object, set recalc flags */ + // TODO: this should probably go through the depsgraph instead... but for now, let's be lazy + switch (GS(id->name)) { + case ID_OB: + { + Object *ob= (Object *)id; + ob->recalc |= OB_RECALC; + } + break; + } +} + /* called for updating while transform acts, once per redraw */ void recalcData(TransInfo *t) { @@ -281,60 +304,93 @@ void recalcData(TransInfo *t) else if (t->spacetype==SPACE_SEQ) { flushTransSeq(t); } - else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + else if (t->spacetype == SPACE_ACTION) { + SpaceAction *sact= (SpaceAction *)t->sa->spacedata.first; Scene *scene; - - ListBase anim_data = {NULL, NULL}; + bAnimContext ac; - int filter; - + ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; - int dosort = 0; - - + int filter; + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + ANIM_animdata_context_getdata(&ac); - + + /* get animdata blocks visible in editor, assuming that these will be the ones where things changed */ + filter= (ANIMFILTER_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 */ + for (ale= anim_data.first; ale; ale= ale->next) { + /* set refresh tags for objects using this animation */ + animedit_refresh_id_tags(ale->id); + } + + /* now free temp channels */ + BLI_freelistN(&anim_data); + } + else if (t->spacetype == SPACE_IPO) { + SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + Scene *scene; + + ListBase anim_data = {NULL, NULL}; + bAnimContext ac; + int filter; + + bAnimListElem *ale; + int dosort = 0; + + + /* initialise relevant anim-context 'context' data from TransInfo data */ + /* NOTE: sync this with the code in ANIM_animdata_get_context() */ + memset(&ac, 0, sizeof(bAnimContext)); + + scene= ac.scene= t->scene; + ac.obact= OBACT; + ac.sa= t->sa; + ac.ar= t->ar; + ac.spacetype= (t->sa)? t->sa->spacetype : 0; + ac.regiontype= (t->ar)? t->ar->regiontype : 0; + + ANIM_animdata_context_getdata(&ac); + /* do the flush first */ flushTransGraphData(t); - + /* get curves to check if a re-sort is needed */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); 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; - + AnimData *adt= BKE_animdata_from_id(ale->id); + /* watch it: if the time is wrong: do not correct handles yet */ if (test_time_fcurve(fcu)) dosort++; else calchandles_fcurve(fcu); + + /* set refresh tags for objects using this animation */ + animedit_refresh_id_tags(ale->id); } - + /* do resort and other updates? */ if (dosort) remake_graph_transdata(t, &anim_data); - //if (sipo->showkey) update_ipokey_val(); - + /* now free temp channels */ BLI_freelistN(&anim_data); - - /* update realtime - not working? */ - if (sipo->lock) { - - } } else if (t->spacetype == SPACE_NLA) { TransDataNla *tdn= (TransDataNla *)t->customData; @@ -342,7 +398,7 @@ void recalcData(TransInfo *t) 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 * using RNA to set the value (which does some special operations when setting these values to make * sure that everything works ok) @@ -352,42 +408,45 @@ void recalcData(TransInfo *t) PointerRNA strip_ptr; short pExceeded, nExceeded, iter; int delta_y1, delta_y2; - + /* if this tdn has no handles, that means it is just a dummy that should be skipped */ if (tdn->handle == 0) continue; - + + /* set refresh tags for objects using this animation */ + animedit_refresh_id_tags(tdn->id); + /* if cancelling transform, just write the values without validating, then move on */ if (t->state == TRANS_CANCEL) { /* clear the values by directly overwriting the originals, but also need to restore * endpoints of neighboring transition-strips */ - + /* start */ strip->start= tdn->h1[0]; - + if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) strip->prev->end= tdn->h1[0]; - + /* end */ strip->end= tdn->h2[0]; - + if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) strip->next->start= tdn->h2[0]; - + /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); - + /* restore to original track (if needed) */ if (tdn->oldTrack != tdn->nlt) { /* just append to end of list for now, since strips get sorted in special_aftertrans_update() */ BLI_remlink(&tdn->nlt->strips, strip); BLI_addtail(&tdn->oldTrack->strips, strip); } - + continue; } - + /* firstly, check if the proposed transform locations would overlap with any neighbouring strips * (barring transitions) which are absolute barriers since they are not being moved * @@ -396,7 +455,7 @@ void recalcData(TransInfo *t) 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) * - simply crop strip to fit within the bounds of the strips bounding it @@ -414,21 +473,21 @@ void recalcData(TransInfo *t) else if (nExceeded) { /* move backwards */ 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]; - + tdn->h1[0] += offset; tdn->h2[0] += offset; } else /* all is fine and well */ break; } - + /* handle auto-snapping */ switch (snla->autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame/time */ @@ -441,35 +500,35 @@ void recalcData(TransInfo *t) tdn->h2[0]= (float)( floor(tdn->h2[0]+0.5f) ); } 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]); break; } - + /* use RNA to write the values... */ // TODO: do we need to write in 2 passes to make sure that no truncation goes on? RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); - + RNA_float_set(&strip_ptr, "start_frame", tdn->h1[0]); RNA_float_set(&strip_ptr, "end_frame", tdn->h2[0]); - + /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); - - + + /* 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 - tdn->trackIndex); delta_y2= ((int)tdn->h2[1] / NLACHANNEL_STEP - tdn->trackIndex); - + if (delta_y1 || delta_y2) { NlaTrack *track; int delta = (delta_y2) ? delta_y2 : delta_y1; int n; - + /* move in the requested direction, checking at each layer if there's space for strip to pass through, * stopping on the last track available or that we're able to fit in */ @@ -480,7 +539,7 @@ void recalcData(TransInfo *t) /* move strip to this track */ BLI_remlink(&tdn->nlt->strips, strip); BKE_nlatrack_add_strip(track, strip); - + tdn->nlt= track; tdn->trackIndex += (n + 1); /* + 1, since n==0 would mean that we didn't change track */ } @@ -491,14 +550,14 @@ void recalcData(TransInfo *t) else { /* make delta 'positive' before using it, since we now know to go backwards */ delta= -delta; - + 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->trackIndex -= (n - 1); /* - 1, since n==0 would mean that we didn't change track */ } From fa8bd34d95d91712ffa6dc9066c255e9ee40e7e4 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 12 Jul 2009 04:29:36 +0000 Subject: [PATCH 172/512] NLA Bugfixes: * Fixed crash when anim-playback is running and a strip beside a transition gets transformed. Transition strips no-longer assume that their neighbours are action-clips, using the standard NLA-strip evaluation function instead to evaluate their neighbours. However, a check for ping-pong recursion needed to be added there, so that a transition beside a meta-strip, with the meta having a transition nested at the start of one of its levels, wouldn't fail with stack overflow. * Moved 'Tweak Mode' menu entry to Edit menu, since it's not really that modal. --- source/blender/blenkernel/intern/anim_sys.c | 19 ++++++++++++++++--- source/blender/editors/space_nla/nla_header.c | 19 ++++++++++--------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 19337f9de5d..e4882d8f555 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1049,12 +1049,12 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, L /* first strip */ tmp_nes.strip_mode= NES_TIME_TRANSITION_START; tmp_nes.strip= s1; - nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); + nlastrip_evaluate(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); /* second strip */ tmp_nes.strip_mode= NES_TIME_TRANSITION_END; tmp_nes.strip= s2; - nlastrip_evaluate_actionclip(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); + nlastrip_evaluate(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes); /* assumulate temp-buffer and full-buffer, using the 'real' strip */ @@ -1108,8 +1108,18 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBas /* evaluates the given evaluation strip */ void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes) { + NlaStrip *strip= nes->strip; + + /* to prevent potential infinite recursion problems (i.e. transition strip, beside meta strip containing a transition + * several levels deep inside it), we tag the current strip as being evaluated, and clear this when we leave + */ + // TODO: be careful with this flag, since some edit tools may be running and have set this while animplayback was running + if (strip->flag & NLASTRIP_FLAG_EDIT_TOUCHED) + return; + strip->flag |= NLASTRIP_FLAG_EDIT_TOUCHED; + /* actions to take depend on the type of strip */ - switch (nes->strip->type) { + switch (strip->type) { case NLASTRIP_TYPE_CLIP: /* action-clip */ nlastrip_evaluate_actionclip(ptr, channels, modifiers, nes); break; @@ -1120,6 +1130,9 @@ void nlastrip_evaluate (PointerRNA *ptr, ListBase *channels, ListBase *modifiers nlastrip_evaluate_meta(ptr, channels, modifiers, nes); break; } + + /* clear temp recursion safe-check */ + strip->flag &= ~NLASTRIP_FLAG_EDIT_TOUCHED; } /* write the accumulated settings to */ diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 8e4c71b9f80..e997a096bce 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -83,7 +83,6 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); - Scene *scene= CTX_data_scene(C); SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); PointerRNA spaceptr; @@ -104,11 +103,6 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemS(layout); - if (scene->flag & SCE_NLA_EDIT_ON) - uiItemO(layout, NULL, 0, "NLA_OT_tweakmode_exit"); - else - uiItemO(layout, NULL, 0, "NLA_OT_tweakmode_enter"); - uiItemS(layout); uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); @@ -153,6 +147,8 @@ static void nla_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused) static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) { + Scene *scene= CTX_data_scene(C); + uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu); uiItemMenuF(layout, "Snap", 0, nla_edit_snapmenu); @@ -160,9 +156,6 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLA_OT_duplicate"); uiItemO(layout, NULL, 0, "NLA_OT_split"); - - uiItemS(layout); - uiItemO(layout, NULL, 0, "NLA_OT_delete"); uiItemS(layout); @@ -178,6 +171,14 @@ static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, NULL, 0, "NLA_OT_move_up"); uiItemO(layout, NULL, 0, "NLA_OT_move_down"); + + uiItemS(layout); + + // TODO: names of these tools for 'tweakmode' need changing? + if (scene->flag & SCE_NLA_EDIT_ON) + uiItemO(layout, "Stop Tweaking Strip Actions", 0, "NLA_OT_tweakmode_exit"); + else + uiItemO(layout, "Start Tweaking Strip Actions", 0, "NLA_OT_tweakmode_enter"); } static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) From 345be5cbbc8c78228b2ded7c2dcb7278c38631b1 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 12 Jul 2009 07:28:25 +0000 Subject: [PATCH 173/512] 2.5 - Tweaks for Split Strips in NLA and Graph Editor view ranges * Split strips now uses the current frame as the splitting-point for selected strips if the current frame falls within in the bounds of the strip. Otherwise, the code defaults to splitting by the midpoints of the strips. * Time-range for Graph Editor is saner now when there is only a single keyframe or none at all. --- .../blender/editors/space_graph/space_graph.c | 10 +++- source/blender/editors/space_nla/nla_edit.c | 59 ++++++++++++------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index a5578e88076..c36d790f0be 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -68,14 +68,16 @@ ARegion *graph_has_buttons_region(ScrArea *sa) { ARegion *ar, *arnew; - for(ar= sa->regionbase.first; ar; ar= ar->next) + for (ar= sa->regionbase.first; ar; ar= ar->next) { if(ar->regiontype==RGN_TYPE_UI) return ar; + } /* add subdiv level; after main window */ - for(ar= sa->regionbase.first; ar; ar= ar->next) + for (ar= sa->regionbase.first; ar; ar= ar->next) { if(ar->regiontype==RGN_TYPE_WINDOW) break; + } /* is error! */ if(ar==NULL) return NULL; @@ -246,7 +248,9 @@ static void graph_main_area_draw(const bContext *C, ARegion *ar) /* XXX the slow way to set tot rect... but for nice sliders needed (ton) */ get_graph_keyframe_extents(&ac, &v2d->tot.xmin, &v2d->tot.xmax, &v2d->tot.ymin, &v2d->tot.ymax); - + /* extra offset so that these items are visible */ + v2d->tot.xmin -= 10.0f; + v2d->tot.xmax += 10.0f; } /* only free grid after drawing data, as we need to use it to determine sampling rate */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 9ddd8daab0d..01871d3d9d5 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -747,25 +747,37 @@ void NLA_OT_delete (wmOperatorType *ot) // - variable-length splits? /* split a given Action-Clip strip */ -static void nlaedit_split_strip_actclip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip) +static void nlaedit_split_strip_actclip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, float cfra) { NlaStrip *nstrip; - float midframe, midaframe, len; + float splitframe, splitaframe; - /* calculate the frames to do the splitting at */ - /* strip extents */ - len= strip->end - strip->start; - if (IS_EQ(len, 0.0f)) - return; - else - midframe= strip->start + (len / 2.0f); - - /* action range */ - len= strip->actend - strip->actstart; - if (IS_EQ(len, 0.0f)) - midaframe= strip->actend; - else - midaframe= strip->actstart + (len / 2.0f); + /* calculate the frames to do the splitting at + * - use current frame if within extents of strip + */ + if ((cfra > strip->start) && (cfra < strip->end)) { + /* use the current frame */ + splitframe= cfra; + splitaframe= nlastrip_get_frame(strip, cfra, NLATIME_CONVERT_UNMAP); + } + else { + /* split in the middle */ + float len; + + /* strip extents */ + len= strip->end - strip->start; + if (IS_EQ(len, 0.0f)) + return; + else + splitframe= strip->start + (len / 2.0f); + + /* action range */ + len= strip->actend - strip->actstart; + if (IS_EQ(len, 0.0f)) + splitaframe= strip->actend; + else + splitaframe= strip->actstart + (len / 2.0f); + } /* make a copy (assume that this is possible) and append * it immediately after the current strip @@ -774,13 +786,16 @@ static void nlaedit_split_strip_actclip (AnimData *adt, NlaTrack *nlt, NlaStrip BLI_insertlinkafter(&nlt->strips, strip, nstrip); /* set the endpoint of the first strip and the start of the new strip - * to the midframe values calculated above + * to the splitframe values calculated above */ - strip->end= midframe; - nstrip->start= midframe; + strip->end= splitframe; + nstrip->start= splitframe; - strip->actend= midaframe; - nstrip->actstart= midaframe; + if ((splitaframe > strip->actstart) && (splitaframe < strip->actend)) { + /* only do this if we're splitting down the middle... */ + strip->actend= splitaframe; + nstrip->actstart= splitaframe; + } /* clear the active flag from the copy */ nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE; @@ -828,7 +843,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* splitting method depends on the type of strip */ switch (strip->type) { case NLASTRIP_TYPE_CLIP: /* action-clip */ - nlaedit_split_strip_actclip(adt, nlt, strip); + nlaedit_split_strip_actclip(adt, nlt, strip, (float)ac.scene->r.cfra); break; case NLASTRIP_TYPE_META: /* meta-strips need special handling */ From ba1082444efae1085bd01f240958bc9fceb826a5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Jul 2009 07:37:25 +0000 Subject: [PATCH 174/512] made text editor margin work with different font sizes. also made it draw the width needed, was fixed at 4. --- source/blender/editors/space_text/text_draw.c | 33 +++++++++---------- .../blender/editors/space_text/text_intern.h | 2 +- source/blender/makesdna/DNA_space_types.h | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c index adba7ef100a..9f8cedd569f 100644 --- a/source/blender/editors/space_text/text_draw.c +++ b/source/blender/editors/space_text/text_draw.c @@ -1300,25 +1300,30 @@ void draw_text_main(SpaceText *st, ARegion *ar) linecount++; } - /* draw line numbers background */ - if(st->showlinenrs) { - UI_ThemeColor(TH_GRID); - glRecti(23, 0, (st->lheight==15)? 63: 59, ar->winy - 2); - } - text_font_begin(st); st->cwidth= BLF_fixed_width(); st->cwidth= MAX2(st->cwidth, 1); + /* draw line numbers background */ + if(st->showlinenrs) { + st->linenrs_tot = (int)floor(log10((float)(linecount + st->viewlines))) + 1; + x= TXT_OFFSET + TEXTXLOC; + + UI_ThemeColor(TH_GRID); + glRecti((TXT_OFFSET-12), 0, (TXT_OFFSET-5) + TEXTXLOC, ar->winy - 2); + } + else { + st->linenrs_tot= 0; /* not used */ + x= TXT_OFFSET; + } + y= ar->winy-st->lheight; + /* draw cursor */ draw_cursor(st, ar); /* draw the text */ UI_ThemeColor(TH_TEXT); - y= ar->winy-st->lheight; - x= (st->showlinenrs)? TXT_OFFSET + TEXTXLOC: TXT_OFFSET; - for(i=0; y>0 && iviewlines && tmp; i++, tmp= tmp->next) { if(st->showsyntax && !tmp->format) txt_format_line(st, tmp, 0); @@ -1330,14 +1335,8 @@ void draw_text_main(SpaceText *st, ARegion *ar) else UI_ThemeColor(TH_TEXT); - if(((float)(i + linecount + 1)/10000.0) < 1.0) { - sprintf(linenr, "%4d", i + linecount + 1); - text_font_draw(st, TXT_OFFSET - 7, y, linenr); - } - else { - sprintf(linenr, "%5d", i + linecount + 1); - text_font_draw(st, TXT_OFFSET - 11, y, linenr); - } + sprintf(linenr, "%d", i + linecount + 1); + text_font_draw(st, TXT_OFFSET - 7, y, linenr); UI_ThemeColor(TH_TEXT); } diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h index 5ea33e1660d..cb425274fc0 100644 --- a/source/blender/editors/space_text/text_intern.h +++ b/source/blender/editors/space_text/text_intern.h @@ -58,7 +58,7 @@ void text_update_edited(struct Text *text); void text_update_character_width(struct SpaceText *st); void text_update_cursor_moved(struct SpaceText *st, struct ARegion *ar); -#define TEXTXLOC 38 +#define TEXTXLOC (st->cwidth * st->linenrs_tot) #define SUGG_LIST_SIZE 7 #define SUGG_LIST_WIDTH 20 diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 951b12b82fe..cc6987084d0 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -294,7 +294,7 @@ typedef struct SpaceText { short flags, menunr; short lheight; /* user preference */ - short cwidth; /* runtime computed */ + char cwidth, linenrs_tot; /* runtime computed, character width and the number of chars to use when showing line numbers */ int left; int showlinenrs; int tabnumber; From 2940384d9a8e3601e2ceefbf0487ce781a3b10f7 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 12 Jul 2009 08:12:22 +0000 Subject: [PATCH 175/512] 2.5 file browser * bugfix: adding back adding the region on read of old files * tweak: buttons for increment/decrement file number now have icons and size adjusted to UI_UNIT_X/UI_UNIT_Y --- source/blender/blenloader/intern/readfile.c | 11 +++++++++++ source/blender/editors/interface/interface_handlers.c | 2 +- source/blender/editors/space_file/file_draw.c | 8 ++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 846e54526b8..479fa760423 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5677,6 +5677,17 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) /* temporarily hide it */ ar->flag = RGN_FLAG_HIDDEN; break; + case SPACE_FILE: + ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_CHANNELS; + ar->alignment= RGN_ALIGN_LEFT; + + ar= MEM_callocN(sizeof(ARegion), "ui area for file"); + BLI_addtail(lb, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_TOP; + break; #if 0 case SPACE_BUTS: /* context UI region */ diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 10e495cde94..0693a771ffa 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3480,7 +3480,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData"); data->window= CTX_wm_window(C); data->region= ar; - if( ELEM3(but->type, BUT_CURVE, SEARCH_MENU, TEX) ); // XXX curve is temp + if( ELEM(but->type, BUT_CURVE, SEARCH_MENU) ); // XXX curve is temp else data->interactive= 1; data->state = BUTTON_STATE_INIT; diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index f1f20a36b59..e107bcecb3b 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -137,8 +137,8 @@ void file_draw_buttons(const bContext *C, ARegion *ar) const short line2_y = ar->winy - IMASEL_BUTTONS_HEIGHT - 12; const short line1_y = line2_y + IMASEL_BUTTONS_HEIGHT/2 + 4; const short input_minw = 20; - const short btn_h = 21; - const short btn_fn_w = 14; + const short btn_h = UI_UNIT_Y; + const short btn_fn_w = UI_UNIT_X; const short btn_minw = 80; const short btn_margin = 20; const short separator = 4; @@ -200,13 +200,13 @@ void file_draw_buttons(const bContext *C, ARegion *ar) /* Filename number increment / decrement buttons. */ if (fnumbuttons) { uiBlockBeginAlign(block); - but = uiDefButO(block, BUT, "FILE_OT_filenum", 0, "-", + but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMOUT, min_x + line2_w + separator, line2_y, btn_fn_w, btn_h, "Decrement the filename number."); RNA_int_set(uiButGetOperatorPtrRNA(but), "increment", -1); - but = uiDefButO(block, BUT, "FILE_OT_filenum", 0, "+", + but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMIN, min_x + line2_w + separator + btn_fn_w, line2_y, btn_fn_w, btn_h, "Increment the filename number."); From 184dca5396ee0de4535523c66d19f896cfb7a939 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 12 Jul 2009 09:03:09 +0000 Subject: [PATCH 176/512] 2.5 file browser * tweak for autocomplete, only update live if live_update and TAB key is hit. (Brecht, please check if it's ok, otherwise will revert and we'll find another way) * adding slash at the end of directory to allow for faster autocomplete * bugfix: directory name buton had wrong length --- source/blender/editors/interface/interface_handlers.c | 5 +++-- source/blender/editors/space_file/file_draw.c | 2 +- source/blender/editors/space_file/filesel.c | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 0693a771ffa..0fbfeffba0d 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1438,7 +1438,7 @@ static void ui_textedit_prev_but(uiBlock *block, uiBut *actbut, uiHandleButtonDa static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, wmEvent *event) { - int mx, my, changed= 0, inbox=0, retval= WM_UI_HANDLER_CONTINUE; + int mx, my, changed= 0, inbox=0, update= 0, retval= WM_UI_HANDLER_CONTINUE; switch(event->type) { case WHEELUPMOUSE: @@ -1553,6 +1553,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle /* there is a key conflict here, we can't tab with autocomplete */ if(but->autocomplete_func || data->searchbox) { changed= ui_textedit_autocomplete(C, but, data); + update= 1; /* do live update for tab key */ retval= WM_UI_HANDLER_BREAK; } /* the hotkey here is not well defined, was G.qual so we check all */ @@ -1576,7 +1577,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle if(changed) { /* never update while typing for now */ - if(0/*data->interactive*/) ui_apply_button(C, block, but, data, 1); + if(update && data->interactive) ui_apply_button(C, block, but, data, 1); else ui_check_but(but); if(data->searchbox) diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index e107bcecb3b..339ebe27fcd 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -188,7 +188,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar) if (available_w > 0) { but = uiDefBut(block, TEX, B_FS_DIRNAME, "", min_x, line1_y, line1_w, btn_h, - params->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, + params->dir, 0.0, (float)FILE_MAXDIR-1, 0, 0, "File path."); uiButSetCompleteFunc(but, autocomplete_directory, NULL); uiDefBut(block, TEX, B_FS_FILENAME, "", diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index d34eb29a78d..c81dab454f8 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -354,5 +354,8 @@ void autocomplete_directory(struct bContext *C, char *str, void *arg_v) } } autocomplete_end(autocpl, str); + if (BLI_exists(str)) { + BLI_add_slash(str); + } } } \ No newline at end of file From 78703a9ef8983ce513c1d428ba947dfbe1a58f97 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Jul 2009 12:47:34 +0000 Subject: [PATCH 177/512] python console in ~80 lines Shift+Enter in the text editor executes the TEXT_OT_line_console operator defined in space_text.py The operator's class stores a namespace for each text block. Eventually this should have its own input rather then using the text editor. Tested with py3.1 and 2.6 TEXT_OT_insert was only using the first char from a string, added support for inserting strings. --- release/ui/space_text.py | 97 +++++++++++++++++++ .../blender/editors/space_text/space_text.c | 4 + source/blender/editors/space_text/text_ops.c | 26 ++--- 3 files changed, 114 insertions(+), 13 deletions(-) diff --git a/release/ui/space_text.py b/release/ui/space_text.py index 07e43f32054..c0bdff15ddf 100644 --- a/release/ui/space_text.py +++ b/release/ui/space_text.py @@ -226,6 +226,101 @@ class TEXT_MT_edit(bpy.types.Menu): layout.itemM("TEXT_MT_edit_to3d") + +class TEXT_OT_line_console(bpy.types.Operator): + ''' + Operator documentatuon text, will be used for the operator tooltip and python docs. + ''' + __label__ = "Console Execute" + + # Each text block gets its own console info. + console = {} + + # Both prompts must be the same length + PROMPT = '>>> ' + PROMPT_MULTI = '... ' + + def execute(self, context): + import sys + + # clear all dead consoles, use text names as IDs + for id in list(self.__class__.console.keys()): + if id not in bpy.data.texts: + del self.__class__.console[id] + + # print("Selected: " + context.active_object.name) + st = context.space_data + text = st.text + + if not text: + return ('CANCELLED',) + + line = st.text.current_line.line + id = text.name + + try: + namespace, console, stdout = self.__class__.console[id] + except: + import code, io + + namespace = locals().update({'bpy':bpy}) + console = code.InteractiveConsole(namespace) + + if sys.version.startswith('2'): # Py2.x support + stdout = io.BytesIO() + else: + stdout = io.StringIO() + + + + self.__class__.console[id]= namespace, console, stdout + del code, io + + # redirect output + sys.stdout = stdout + sys.stderr = stdout + + # run the console + if not line.strip(): + line = '\n' # executes a multiline statement + + if line.startswith(self.__class__.PROMPT_MULTI) or line.startswith(self.__class__.PROMPT): + line = line[len(self.__class__.PROMPT):] + was_prefix = True + else: + was_prefix = False + + + is_multiline = console.push(line) + + stdout.seek(0) + output = stdout.read() + + # cleanup + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + sys.last_traceback = None + + # So we can reuse, clear all data + stdout.truncate(0) + + if is_multiline: + prefix = self.__class__.PROMPT_MULTI + else: + prefix = self.__class__.PROMPT + + # Kindof odd, add the prefix if we didnt have one. makes it easier to re-read. + if not was_prefix: + bpy.ops.TEXT_OT_move(type='LINE_BEGIN') + bpy.ops.TEXT_OT_insert(text = prefix) + + bpy.ops.TEXT_OT_move(type='LINE_END') + + # Insert the output into the editor + bpy.ops.TEXT_OT_insert(text= '\n' + output + prefix) + + return ('FINISHED',) + bpy.types.register(TEXT_HT_header) bpy.types.register(TEXT_PT_properties) bpy.types.register(TEXT_PT_find) @@ -237,3 +332,5 @@ bpy.types.register(TEXT_MT_edit_select) bpy.types.register(TEXT_MT_edit_markers) bpy.types.register(TEXT_MT_edit_to3d) +bpy.ops.add(TEXT_OT_line_console) + diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 8759fd00f74..5d3da461f71 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -285,6 +285,10 @@ static void text_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "TEXT_OT_line_break", RETKEY, KM_PRESS, 0, 0); +#ifndef DISABLE_PYTHON + WM_keymap_add_item(keymap, "TEXT_OT_line_console", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */ +#endif + WM_keymap_add_item(keymap, "TEXT_OT_line_number", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); WM_keymap_add_item(keymap, "TEXT_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! } diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index f9485f17bdc..e6d97071ef5 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -248,8 +248,6 @@ static int reload_exec(bContext *C, wmOperator *op) #ifndef DISABLE_PYTHON if(text->compiled) BPY_free_compiled_text(text); - - text->compiled = NULL; #endif text_update_edited(text); @@ -2229,19 +2227,21 @@ static int insert_exec(bContext *C, wmOperator *op) SpaceText *st= CTX_wm_space_text(C); Text *text= CTX_data_edit_text(C); char *str; - int done, ascii; + int done = 0, i; str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); - ascii= str[0]; + + if(st && st->overwrite) { + for(i=0; str[i]; i++) { + done |= txt_replace_char(text, str[i]); + } + } else { + for(i=0; str[i]; i++) { + done |= txt_add_char(text, str[i]); + } + } + MEM_freeN(str); - - if(!ascii) - return OPERATOR_CANCELLED; - - if(st && st->overwrite) - done= txt_replace_char(text, ascii); - else - done= txt_add_char(text, ascii); if(!done) return OPERATOR_CANCELLED; @@ -2273,7 +2273,7 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) /* run the script while editing, evil but useful */ if(ret==OPERATOR_FINISHED && CTX_wm_space_text(C)->live_edit) run_script_exec(C, op); - + return ret; } From 5f8f2fc33a2f2fd363be16a36d14fa3b3f1ad78a Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 12 Jul 2009 13:06:52 +0000 Subject: [PATCH 178/512] 2.5 filebrowser * bugfix: parent on linux didn't account for first slash * added some BLI_cleanup_dir to prevent weird directory names * revert to old directory if user types bogus text. --- source/blender/blenlib/intern/util.c | 2 +- source/blender/editors/space_file/file_ops.c | 2 ++ source/blender/editors/space_file/filesel.c | 18 +++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c index a236defc515..78a4599b3b3 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/util.c @@ -502,7 +502,7 @@ int BLI_has_parent(char *path) BLI_add_slash(path); len = strlen(path)-1; - while (len) { + while (len>=0) { if ((path[len] == '\\') || (path[len] == '/')) slashes++; len--; diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 8f1d2598c61..0d36bac7505 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -559,6 +559,7 @@ int file_parent_exec(bContext *C, wmOperator *unused) if(sfile->params) { if (BLI_has_parent(sfile->params->dir)) { BLI_parent_dir(sfile->params->dir); + BLI_cleanup_dir(G.sce, sfile->params->dir); file_change_dir(sfile); WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); } @@ -724,6 +725,7 @@ int file_directory_exec(bContext *C, wmOperator *unused) if (sfile->params->dir[0] == '\0') get_default_root(sfile->params->dir); #endif + BLI_cleanup_dir(G.sce, sfile->params->dir); BLI_add_slash(sfile->params->dir); file_change_dir(sfile); WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index c81dab454f8..30712ea0b07 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -301,16 +301,20 @@ FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar void file_change_dir(struct SpaceFile *sfile) { - if (sfile->params && BLI_exists(sfile->params->dir)) { - filelist_setdir(sfile->files, sfile->params->dir); + if (sfile->params) { + if (BLI_exists(sfile->params->dir)) { + filelist_setdir(sfile->files, sfile->params->dir); - if(folderlist_clear_next(sfile)) - folderlist_free(sfile->folders_next); + if(folderlist_clear_next(sfile)) + folderlist_free(sfile->folders_next); - folderlist_pushdir(sfile->folders_prev, sfile->params->dir); + folderlist_pushdir(sfile->folders_prev, sfile->params->dir); - filelist_free(sfile->files); - sfile->params->active_file = -1; + filelist_free(sfile->files); + sfile->params->active_file = -1; + } else { + BLI_strncpy(sfile->params->dir, filelist_dir(sfile->files), FILE_MAX); + } } } From 6fb0181b50461b529bb960950870de941711041e Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sun, 12 Jul 2009 23:38:47 +0000 Subject: [PATCH 179/512] Keyed physics refresh: - Keyed targets in one list instead of "chaining", this opens up many more possibilities than before and is much less obscure. - Better keyed timing possibilities (time & duration in frames). - Looping over keyed targets list. Other changes: - New child setting "length" with threshold (great for guard & underfur with a single particle system) - Modularization of path interpolation code. - Cleared "animateable" flags from many particle settings that shouldn't be animateable. Fixes: - Keyed particles weren't copied properly (ancient bug). - Hair rotations depended on global z-axis for root rotation so downward facing strands could flip rotation randomly. Now initial hair rotation is derived from face dependent hair matrix. (This caused for example ugly flipping of child strands on some cases). - Children from faces weren't calculated straight after activating them. - Multiple disk cache fixes: * Disk cache didn't work correctly with frame steps. * Conversion from memory cache to disk cache didn't work with cloth. * Disk cache crashed on some frames trying to close an already closed cache file. * Trails didn't work with disk cached particles. - Child rough effects were effected by emitter object loc/rot making them next to useless with animation, why didn't anybody tell me this!! - Lots of random code cleanup. --- release/ui/buttons_particle.py | 62 +- source/blender/blenkernel/BKE_particle.h | 5 +- source/blender/blenkernel/intern/depsgraph.c | 15 +- source/blender/blenkernel/intern/object.c | 26 +- source/blender/blenkernel/intern/particle.c | 675 +++++++++--------- .../blenkernel/intern/particle_system.c | 275 +++---- source/blender/blenkernel/intern/pointcache.c | 36 +- source/blender/blenloader/intern/readfile.c | 13 +- source/blender/blenloader/intern/writefile.c | 5 + .../editors/space_buttons/buttons_intern.h | 4 + .../editors/space_buttons/buttons_ops.c | 204 +++++- .../editors/space_buttons/space_buttons.c | 4 + .../blender/editors/space_view3d/drawobject.c | 32 +- source/blender/makesdna/DNA_particle_types.h | 38 +- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_particle.c | 325 ++++++--- .../render/intern/source/convertblender.c | 20 +- 17 files changed, 1094 insertions(+), 646 deletions(-) diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index ef7ede15d6e..2d269967e4b 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -131,6 +131,9 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): psys = context.particle_system if psys==None: return False if psys.settings==None: return False + phystype = psys.settings.physics_type + if phystype == 'NO' or phystype == 'KEYED': + return False return psys.settings.type in ('EMITTER', 'REACTOR') def draw(self, context): @@ -277,16 +280,40 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): sub.itemR(part, "acceleration") elif part.physics_type == 'KEYED': - sub.itemR(psys, "keyed_first") - if psys.keyed_first==True: - sub.itemR(psys, "timed_keys", text="Key timing") - else: - sub.itemR(part, "keyed_time") - sub = split.column() - sub.itemL(text="Next key from object:") - sub.itemR(psys, "keyed_object", text="") - sub.itemR(psys, "keyed_particle_system") - + row = layout.row() + col = row.column() + col.active = not psys.keyed_timing + col.itemR(part, "keyed_loops", text="Loops") + row.itemR(psys, "keyed_timing", text="Use Timing") + + layout.itemL(text="Keys:") + row = layout.row() + + row.template_list(psys, "keyed_targets", psys, "active_keyed_target_index") + + col = row.column() + subrow = col.row() + subcol = subrow.column(align=True) + subcol.itemO("PARTICLE_OT_new_keyed_target", icon="ICON_ZOOMIN", text="") + subcol.itemO("PARTICLE_OT_remove_keyed_target", icon="ICON_ZOOMOUT", text="") + subrow = col.row() + subcol = subrow.column(align=True) + subcol.itemO("PARTICLE_OT_keyed_target_move_up", icon="VICON_MOVE_UP", text="") + subcol.itemO("PARTICLE_OT_keyed_target_move_down", icon="VICON_MOVE_DOWN", text="") + + key = psys.active_keyed_target + if key: + row = layout.row() + col = row.column() + #doesn't work yet + #col.red_alert = key.valid + col.itemR(key, "object", text="") + col.itemR(key, "system", text="System") + col = row.column(); + col.active = psys.keyed_timing + col.itemR(key, "time") + col.itemR(key, "duration") + if part.physics_type=='NEWTON' or part.physics_type=='BOIDS': sub.itemR(part, "size_deflect") @@ -308,7 +335,7 @@ class PARTICLE_PT_render(ParticleButtonsPanel): psys = context.particle_system part = psys.settings - + row = layout.row() row.itemR(part, "material") row.itemR(psys, "parent"); @@ -336,7 +363,7 @@ class PARTICLE_PT_render(ParticleButtonsPanel): sub.itemR(part, "velocity_length") elif part.ren_as == 'PATH': - if (part.type!='HAIR' and psys.point_cache.baked==False): + if (part.type!='HAIR' and part.physics_type!='KEYED' and psys.point_cache.baked==False): box = layout.box() box.itemL(text="Baked or keyed particles needed for correct rendering.") return @@ -460,7 +487,7 @@ class PARTICLE_PT_draw(ParticleButtonsPanel): path = (part.ren_as=='PATH' and part.draw_as=='RENDER') or part.draw_as=='PATH' - if path and part.type!='HAIR' and psys.point_cache.baked==False: + if path and part.type!='HAIR' and part.physics_type!='KEYED' and psys.point_cache.baked==False: box = layout.box() box.itemL(text="Baked or keyed particles needed for correct drawing.") return @@ -549,6 +576,15 @@ class PARTICLE_PT_children(ParticleButtonsPanel): col.itemR(part, "rough2_size") col.itemR(part, "rough2_thres", slider=True) + row = layout.row() + col = row.column(align=True) + col.itemR(part, "child_length", slider=True) + col.itemR(part, "child_length_thres", slider=True) + + col = row.column(align=True) + col.itemL(text="Space reserved for") + col.itemL(text="hair parting controls") + layout.row().itemL(text="Kink:") layout.row().itemR(part, "kink", expand=True) diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index aa24706077d..bb0b905b8e3 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -260,7 +260,6 @@ void psys_flush_particle_settings(struct Scene *scene, struct ParticleSettings * void make_local_particlesettings(struct ParticleSettings *part); struct LinkNode *psys_using_settings(struct Scene *scene, struct ParticleSettings *part, int flush_update); -void psys_changed_type(struct ParticleSystem *psys); void psys_reset(struct ParticleSystem *psys, int mode); void psys_find_parents(struct Object *ob, struct ParticleSystemModifierData *psmd, struct ParticleSystem *psys); @@ -289,12 +288,14 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]); /* particle_system.c */ -int psys_count_keyed_targets(struct Object *ob, struct ParticleSystem *psys); +void psys_count_keyed_targets(struct Object *ob, struct ParticleSystem *psys); void psys_get_reactor_target(struct Object *ob, struct ParticleSystem *psys, struct Object **target_ob, struct ParticleSystem **target_psys); void psys_init_effectors(struct Scene *scene, struct Object *obsrc, struct Group *group, struct ParticleSystem *psys); void psys_end_effectors(struct ParticleSystem *psys); +void psys_make_temp_pointcache(struct Object *ob, struct ParticleSystem *psys); +void psys_end_temp_pointcache(struct ParticleSystem *psys); void psys_get_pointcache_start_end(struct Scene *scene, struct ParticleSystem *psys, int *sfra, int *efra); void particle_system_update(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index de036e25d82..f52eec34cc7 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -562,10 +562,17 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if(!psys_check_enabled(ob, psys)) continue; - if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob && - BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys-1)) { - node2 = dag_get_node(dag, psys->keyed_ob); - dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA, "Particle Keyed Physics"); + if(part->phystype==PART_PHYS_KEYED) { + KeyedParticleTarget *kpt = psys->keyed_targets.first; + + for(; kpt; kpt=kpt->next) { + if(kpt->ob && BLI_findlink(&kpt->ob->particlesystem, kpt->psys-1)) { + node2 = dag_get_node(dag, kpt->ob); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Keyed Physics"); + } + else + break; + } } if(part->ren_as == PART_DRAW_OB && part->dup_ob) { diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6490ff3c724..7d6a83d7900 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -427,17 +427,14 @@ void unlink_object(Scene *scene, Object *ob) if(obt->particlesystem.first) { ParticleSystem *tpsys= obt->particlesystem.first; for(; tpsys; tpsys=tpsys->next) { - if(tpsys->keyed_ob==ob) { - ParticleSystem *psys= BLI_findlink(&ob->particlesystem,tpsys->keyed_psys-1); - - if(psys && psys->keyed_ob) { - tpsys->keyed_ob= psys->keyed_ob; - tpsys->keyed_psys= psys->keyed_psys; + KeyedParticleTarget *kpt = tpsys->keyed_targets.first; + for(; kpt; kpt=kpt->next) { + if(kpt->ob==ob) { + BLI_remlink(&tpsys->keyed_targets, kpt); + MEM_freeN(kpt); + obt->recalc |= OB_RECALC_DATA; + break; } - else - tpsys->keyed_ob= NULL; - - obt->recalc |= OB_RECALC_DATA; } if(tpsys->target_ob==ob) { @@ -1050,18 +1047,23 @@ ParticleSystem *copy_particlesystem(ParticleSystem *psys) psysn= MEM_dupallocN(psys); psysn->particles= MEM_dupallocN(psys->particles); psysn->child= MEM_dupallocN(psys->child); + if(psysn->particles->keys) + psysn->particles->keys = MEM_dupallocN(psys->particles->keys); for(a=0, pa=psysn->particles; atotpart; a++, pa++) { if(pa->hair) pa->hair= MEM_dupallocN(pa->hair); - if(pa->keys) - pa->keys= MEM_dupallocN(pa->keys); + if(a) + pa->keys= (pa-1)->keys + (pa-1)->totkey; } if(psys->soft) { psysn->soft= copy_softbody(psys->soft); psysn->soft->particles = psysn; } + + if(psys->keyed_targets.first) + BLI_duplicatelist(&psysn->keyed_targets, &psys->keyed_targets); psysn->pathcache= NULL; psysn->childcache= NULL; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 4488f8cdffd..cefeafcdd50 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -84,7 +84,8 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, static void get_child_modifier_parameters(ParticleSettings *part, ParticleThreadContext *ctx, ChildParticle *cpa, short cpa_from, int cpa_num, float *cpa_fuv, float *orco, ParticleTexture *ptex); static void do_child_modifiers(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSettings *part, - ParticleTexture *ptex, ParticleKey *par, float *par_rot, ChildParticle *cpa, float *orco, ParticleKey *state, float t); + ParticleTexture *ptex, ParticleKey *par, float *par_rot, ChildParticle *cpa, + float *orco, float mat[4][4], ParticleKey *state, float t); /* few helpers for countall etc. */ int count_particles(ParticleSystem *psys){ @@ -478,10 +479,16 @@ void psys_free(Object *ob, ParticleSystem * psys) if(psys->pointcache) BKE_ptcache_free(psys->pointcache); + if(psys->keyed_targets.first) + BLI_freelistN(&psys->keyed_targets); + MEM_freeN(psys); } } +/************************************************/ +/* Rendering */ +/************************************************/ /* these functions move away particle data and bring it back after * rendering, to make different render settings possible without * removing the previous data. this should be solved properly once */ @@ -889,7 +896,7 @@ int psys_render_simplify_params(ParticleSystem *psys, ChildParticle *cpa, float } /************************************************/ -/* Interpolated Particles */ +/* Interpolation */ /************************************************/ static float interpolate_particle_value(float v1, float v2, float v3, float v4, float *w, int four) { @@ -938,6 +945,214 @@ void psys_interpolate_particle(short type, ParticleKey keys[4], float dt, Partic +typedef struct ParticleInterpolationData { + ParticleKey *kkey[2]; + HairKey *hkey[2]; + BodyPoint *bp[2]; + SoftBody *soft; + int keyed, cached; + float birthtime, dietime; +} ParticleInterpolationData; +/* Assumes pointcache->mem_cache exists, so for disk cached particles call psys_make_temp_pointcache() before use */ +static void get_pointcache_keys_for_time(Object *ob, ParticleSystem *psys, int index, float t, ParticleKey *key1, ParticleKey *key2) +{ + PointCache *cache = psys->pointcache; + static PTCacheMem *pm = NULL; /* not thread safe */ + + if(index < 0) { /* initialize */ + pm = cache->mem_cache.first; + + if(pm) + pm = pm->next; + } + else { + if(pm) { + while(pm && pm->next && (float)pm->frame < t) + pm = pm->next; + + copy_particle_key(key2, ((ParticleKey *)pm->data) + index, 1); + copy_particle_key(key1, ((ParticleKey *)(pm->prev)->data) + index, 1); + } + else if(cache->mem_cache.first) { + PTCacheMem *pm2 = cache->mem_cache.first; + copy_particle_key(key2, ((ParticleKey *)pm2->data) + index, 1); + copy_particle_key(key1, ((ParticleKey *)pm2->data) + index, 1); + } + } +} +static void init_particle_interpolation(Object *ob, ParticleSystem *psys, ParticleData *pa, ParticleInterpolationData *pind) +{ + + if(pind->keyed) { + pind->kkey[0] = pa->keys; + + if(pa->totkey > 1) + pind->kkey[1] = pa->keys + 1; + else + pind->kkey[1] = NULL; + + pind->birthtime = pa->keys->time; + pind->dietime = (pa->keys + pa->totkey - 1)->time; + } + else if(pind->cached) { + get_pointcache_keys_for_time(ob, psys, -1, 0.0f, NULL, NULL); + + pind->birthtime = pa->time; + pind->dietime = pa->dietime; + } + else { + pind->hkey[0] = pa->hair; + pind->hkey[1] = pa->hair + 1; + + pind->birthtime = pa->hair->time; + pind->dietime = (pa->hair + pa->totkey - 1)->time; + } + + if(pind->soft) { + pind->bp[0] = pind->soft->bpoint + pa->bpi; + pind->bp[1] = pind->soft->bpoint + pa->bpi + 1; + } +} +static void hair_to_particle(ParticleKey *key, HairKey *hkey) +{ + VECCOPY(key->co, hkey->co); + key->time = hkey->time; +} +static void bp_to_particle(ParticleKey *key, BodyPoint *bp, HairKey *hkey) +{ + VECCOPY(key->co, bp->pos); + key->time = hkey->time; +} + +static void do_particle_interpolation(ParticleSystem *psys, int p, ParticleData *pa, float t, float frs_sec, ParticleInterpolationData *pind, ParticleKey *result) +{ + ParticleKey keys[4]; + float real_t, dfra, keytime; + + /* interpret timing and find keys */ + if(pind->keyed) { + /* we have only one key, so let's use that */ + if(pind->kkey[1]==NULL) { + copy_particle_key(result, pind->kkey[0], 1); + return; + } + + if(result->time < 0.0f) + real_t = -result->time; + else + real_t = pind->kkey[0]->time + t * (pind->kkey[0][pa->totkey-1].time - pind->kkey[0]->time); + + if(psys->part->phystype==PART_PHYS_KEYED && psys->flag & PSYS_KEYED_TIMING) { + KeyedParticleTarget *kpt = psys->keyed_targets.first; + + kpt=kpt->next; + + while(kpt && pa->time + kpt->time < real_t) + kpt= kpt->next; + + if(kpt) { + kpt=kpt->prev; + + if(pa->time + kpt->time + kpt->duration > real_t) + real_t = pa->time + kpt->time; + } + else + real_t = pa->time + ((KeyedParticleTarget*)psys->keyed_targets.last)->time; + } + + CLAMP(real_t, pa->time, pa->dietime); + + while(pind->kkey[1]->time < real_t) + pind->kkey[1]++; + + pind->kkey[0] = pind->kkey[1] - 1; + } + else if(pind->cached) { + if(result->time < 0.0f) /* flag for time in frames */ + real_t = -result->time; + else + real_t = pa->time + t * (pa->dietime - pa->time); + } + else { + if(result->time < 0.0f) + real_t = -result->time; + else + real_t = pind->hkey[0]->time + t * (pind->hkey[0][pa->totkey-1].time - pind->hkey[0]->time); + + while(pind->hkey[1]->time < real_t) { + pind->hkey[1]++; + pind->bp[1]++; + } + + pind->hkey[0] = pind->hkey[1] - 1; + } + + /* set actual interpolation keys */ + if(pind->soft) { + pind->bp[0] = pind->bp[1] - 1; + bp_to_particle(keys + 1, pind->bp[0], pind->hkey[0]); + bp_to_particle(keys + 2, pind->bp[1], pind->hkey[1]); + } + else if(pind->keyed) { + memcpy(keys + 1, pind->kkey[0], sizeof(ParticleKey)); + memcpy(keys + 2, pind->kkey[1], sizeof(ParticleKey)); + } + else if(pind->cached) { + get_pointcache_keys_for_time(NULL, psys, p, real_t, keys+1, keys+2); + } + else { + hair_to_particle(keys + 1, pind->hkey[0]); + hair_to_particle(keys + 2, pind->hkey[1]); + } + + /* set secondary interpolation keys for hair */ + if(!pind->keyed && !pind->cached) { + if(pind->soft) { + if(pind->hkey[0] != pa->hair) + bp_to_particle(keys, pind->bp[0] - 1, pind->hkey[0] - 1); + else + bp_to_particle(keys, pind->bp[0], pind->hkey[0]); + } + else { + if(pind->hkey[0] != pa->hair) + hair_to_particle(keys, pind->hkey[0] - 1); + else + hair_to_particle(keys, pind->hkey[0]); + } + + if(pind->soft) { + if(pind->hkey[1] != pa->hair + pa->totkey - 1) + bp_to_particle(keys + 3, pind->bp[1] + 1, pind->hkey[1] + 1); + else + bp_to_particle(keys + 3, pind->bp[1], pind->hkey[1]); + } + else { + if(pind->hkey[1] != pa->hair + pa->totkey - 1) + hair_to_particle(keys + 3, pind->hkey[1] + 1); + else + hair_to_particle(keys + 3, pind->hkey[1]); + } + } + + dfra = keys[2].time - keys[1].time; + keytime = (real_t - keys[1].time) / dfra; + + /* convert velocity to timestep size */ + if(pind->keyed || pind->cached){ + VecMulf(keys[1].vel, dfra / frs_sec); + VecMulf(keys[2].vel, dfra / frs_sec); + QuatInterpol(result->rot,keys[1].rot,keys[2].rot,keytime); + } + + /* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0,1]->[k2,k3] (k1 & k4 used for cardinal & bspline interpolation)*/ + psys_interpolate_particle((pind->keyed || pind->cached) ? -1 /* signal for cubic interpolation */ + : ((psys->part->flag & PART_HAIR_BSPLINE) ? KEY_BSPLINE : KEY_CARDINAL) + ,keys, keytime, result, 1); + + /* the velocity needs to be converted back from cubic interpolation */ + if(pind->keyed || pind->cached) + VecMulf(result->vel, frs_sec / dfra); +} /************************************************/ /* Particles on a dm */ /************************************************/ @@ -1438,16 +1653,6 @@ void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int in /************************************************/ /* Path Cache */ /************************************************/ -static void hair_to_particle(ParticleKey *key, HairKey *hkey) -{ - VECCOPY(key->co, hkey->co); - key->time = hkey->time; -} -static void bp_to_particle(ParticleKey *key, BodyPoint *bp, HairKey *hkey) -{ - VECCOPY(key->co, bp->pos); - key->time = hkey->time; -} static float vert_weight(MDeformVert *dvert, int group) { MDeformWeight *dw; @@ -1734,7 +1939,7 @@ int do_guide(Scene *scene, ParticleKey *state, int pa_num, float time, ListBase } return 0; } -static void do_rough(float *loc, float t, float fac, float size, float thres, ParticleKey *state) +static void do_rough(float *loc, float mat[4][4], float t, float fac, float size, float thres, ParticleKey *state) { float rough[3]; float rco[3]; @@ -1747,32 +1952,24 @@ static void do_rough(float *loc, float t, float fac, float size, float thres, Pa rough[0]=-1.0f+2.0f*BLI_gTurbulence(size, rco[0], rco[1], rco[2], 2,0,2); rough[1]=-1.0f+2.0f*BLI_gTurbulence(size, rco[1], rco[2], rco[0], 2,0,2); rough[2]=-1.0f+2.0f*BLI_gTurbulence(size, rco[2], rco[0], rco[1], 2,0,2); - VECADDFAC(state->co,state->co,rough,fac); + + VECADDFAC(state->co,state->co,mat[0],fac*rough[0]); + VECADDFAC(state->co,state->co,mat[1],fac*rough[1]); + VECADDFAC(state->co,state->co,mat[2],fac*rough[2]); } -static void do_rough_end(float *loc, float t, float fac, float shape, ParticleKey *state, ParticleKey *par) +static void do_rough_end(float *loc, float mat[4][4], float t, float fac, float shape, ParticleKey *state) { - float rough[3], rnor[3]; + float rough[2]; float roughfac; roughfac=fac*(float)pow((double)t,shape); VECCOPY(rough,loc); rough[0]=-1.0f+2.0f*rough[0]; rough[1]=-1.0f+2.0f*rough[1]; - rough[2]=-1.0f+2.0f*rough[2]; VecMulf(rough,roughfac); - - if(par){ - VECCOPY(rnor,par->vel); - } - else{ - VECCOPY(rnor,state->vel); - } - Normalize(rnor); - Projf(rnor,rough,rnor); - VECSUB(rough,rough,rnor); - - VECADD(state->co,state->co,rough); + VECADDFAC(state->co,state->co,mat[0],rough[0]); + VECADDFAC(state->co,state->co,mat[1],rough[1]); } static void do_path_effectors(Scene *scene, Object *ob, ParticleSystem *psys, int i, ParticleCacheKey *ca, int k, int steps, float *rootco, float effector, float dfra, float cfra, float *length, float *vec) { @@ -2007,7 +2204,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, ParticleData *pa=NULL; ParticleTexture ptex; float *cpa_fuv=0, *par_rot=0; - float co[3], orco[3], ornor[3], t, cpa_1st[3], dvec[3]; + float co[3], orco[3], ornor[3], hairmat[4][4], t, cpa_1st[3], dvec[3]; float branch_begin, branch_end, branch_prob, rough_rand; float length, max_length = 1.0f, cur_length = 0.0f; float eff_length, eff_vec[3]; @@ -2065,8 +2262,6 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, cpa_num = cpa->num; foffset= cpa->foffset; - if(part->childtype == PART_CHILD_FACES) - foffset = -(2.0f + part->childspread); cpa_fuv = cpa->fuv; cpa_from = PART_FROM_FACE; @@ -2078,6 +2273,10 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, Mat4MulVecfl(ob->obmat,cpa_1st); } + pa = psys->particles + cpa->parent; + + psys_mat_hair_to_global(ob, ctx->psmd->dm, psys->part->from, pa, hairmat); + pa=0; } else{ @@ -2099,6 +2298,8 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, cpa_fuv=pa->fuv; psys_particle_on_emitter(ctx->psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,ornor,0,0,orco,0); + + psys_mat_hair_to_global(ob, ctx->psmd->dm, psys->part->from, pa, hairmat); } keys->steps = ctx->steps; @@ -2190,7 +2391,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, } /* apply different deformations to the child path */ - do_child_modifiers(ctx->scene, ob, psys, part, &ptex, (ParticleKey *)par, par_rot, cpa, orco, (ParticleKey *)state, t); + do_child_modifiers(ctx->scene, ob, psys, part, &ptex, (ParticleKey *)par, par_rot, cpa, orco, hairmat, (ParticleKey *)state, t); /* TODO: better branching */ //if(part->flag & PART_BRANCHING && ctx->between == 0 && part->flag & PART_ANIM_BRANCHING) @@ -2247,20 +2448,12 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, /* check if path needs to be cut before actual end of data points */ if(k){ VECSUB(dvec,state->co,(state-1)->co); - if(part->flag&PART_ABS_LENGTH) - length=VecLength(dvec); - else - length=1.0f/(float)ctx->steps; - + length=1.0f/(float)ctx->steps; k=check_path_length(k,keys,state,max_length,&cur_length,length,dvec); } else{ /* initialize length calculation */ - if(part->flag&PART_ABS_LENGTH) - max_length= part->abslength*ptex.length; - else - max_length= ptex.length; - + max_length= ptex.length; cur_length= 0.0f; } @@ -2353,36 +2546,6 @@ void psys_cache_child_paths(Scene *scene, Object *ob, ParticleSystem *psys, floa psys_threads_free(pthreads); } -static void get_pointcache_keys_for_time(ParticleSystem *psys, int index, float t, ParticleKey *key1, ParticleKey *key2) -{ - PointCache *cache = psys->pointcache; - static PTCacheMem *pm = NULL; - - if(cache->flag & PTCACHE_DISK_CACHE) { - /* TODO */ - } - else { - if(index < 0) { /* initialize */ - pm = cache->mem_cache.first; - if(pm) - pm = pm->next; - } - else { - if(pm) { - while(pm && pm->next && (float)pm->frame < t) - pm = pm->next; - - copy_particle_key(key2, ((ParticleKey *)pm->data) + index, 1); - copy_particle_key(key1, ((ParticleKey *)(pm->prev)->data) + index, 1); - } - else if(cache->mem_cache.first) { - pm = cache->mem_cache.first; - copy_particle_key(key2, ((ParticleKey *)pm->data) + index, 1); - copy_particle_key(key1, ((ParticleKey *)pm->data) + index, 1); - } - } - } -} /* Calculates paths ready for drawing/rendering. */ /* -Usefull for making use of opengl vertex arrays for super fast strand drawing. */ /* -Makes child strands possible and creates them too into the cache. */ @@ -2395,7 +2558,7 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra ParticleSettings *part = psys->part; ParticleData *pa; - ParticleKey keys[4], result, *kkey[2] = {NULL, NULL}; + ParticleKey result, *kkey[2] = {NULL, NULL}; HairKey *hkey[2] = {NULL, NULL}; ParticleEdit *edit = 0; @@ -2405,11 +2568,14 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra BodyPoint *bp[2] = {NULL, NULL}; Material *ma; + + ParticleInterpolationData pind; float birthtime = 0.0, dietime = 0.0; float t, time = 0.0, keytime = 0.0, dfra = 1.0, frs_sec = scene->r.frs_sec; float col[4] = {0.5f, 0.5f, 0.5f, 1.0f}; float prev_tangent[3], hairmat[4][4]; + float rotmat[3][3]; int k,i; int steps = (int)pow(2.0, (double)psys->part->draw_step); int totpart = psys->totpart; @@ -2492,7 +2658,6 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra else memset(cache[i], 0, sizeof(*cache[i])*(steps+1)); if(!edit && !psys->totchild) { - //pa_length = part->length * (1.0f - part->randlength*pa->r_ave[0]); pa_length = 1.0f - part->randlength * 0.5 * (1.0f + pa->r_ave[0]); if(vg_length) pa_length *= psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_length); @@ -2504,38 +2669,27 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra ekey = edit->keys[i]; /*--get the first data points--*/ - if(keyed) { - kkey[0] = pa->keys; - kkey[1] = kkey[0] + 1; + pind.keyed = keyed; + pind.cached = baked; + pind.soft = soft; + init_particle_interpolation(ob, psys, pa, &pind); - birthtime = kkey[0]->time; - dietime = kkey[0][pa->totkey-1].time; - } - else if(baked) { - get_pointcache_keys_for_time(psys, -1, 0.0f, NULL, NULL); - - birthtime = pa->time; - dietime = pa->dietime; - } - else { - hkey[0] = pa->hair; - hkey[1] = hkey[0] + 1; - birthtime = hkey[0]->time; - dietime = hkey[0][pa->totkey-1].time; - - psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); - } + /* hairmat is needed for for non-hair particle too so we get proper rotations */ + psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); + VECCOPY(rotmat[0], hairmat[2]); + VECCOPY(rotmat[1], hairmat[1]); + VECCOPY(rotmat[2], hairmat[0]); if(!edit) { if(part->draw & PART_ABS_PATH_TIME) { - birthtime = MAX2(birthtime, part->path_start); - dietime = MIN2(dietime, part->path_end); + birthtime = MAX2(pind.birthtime, part->path_start); + dietime = MIN2(pind.dietime, part->path_end); } else { - float tb = birthtime; - birthtime = tb + part->path_start * (dietime - tb); - dietime = tb + part->path_end * (dietime - tb); + float tb = pind.birthtime; + birthtime = tb + part->path_start * (pind.dietime - tb); + dietime = tb + part->path_end * (pind.dietime - tb); } if(birthtime >= dietime) { @@ -2546,101 +2700,18 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra dietime = birthtime + pa_length * (dietime - birthtime); } - if(soft){ - bp[0] = soft->bpoint + pa->bpi; - bp[1] = bp[0] + 1; - } - /*--interpolate actual path from data points--*/ for(k=0, ca=cache[i]; k<=steps; k++, ca++){ time = (float)k / (float)steps; t = birthtime + time * (dietime - birthtime); - if(keyed) { - while(kkey[1]->time < t) { - kkey[1]++; - } + result.time = -t; - kkey[0] = kkey[1] - 1; - } - else if(baked) { - get_pointcache_keys_for_time(psys, i, t, keys+1, keys+2); - } - else { - while(hkey[1]->time < t) { - hkey[1]++; - bp[1]++; - } + do_particle_interpolation(psys, i, pa, t, frs_sec, &pind, &result); - hkey[0] = hkey[1] - 1; - } - - if(soft) { - bp[0] = bp[1] - 1; - bp_to_particle(keys + 1, bp[0], hkey[0]); - bp_to_particle(keys + 2, bp[1], hkey[1]); - } - else if(keyed) { - memcpy(keys + 1, kkey[0], sizeof(ParticleKey)); - memcpy(keys + 2, kkey[1], sizeof(ParticleKey)); - } - else if(baked) - ; /* keys already set */ - else { - hair_to_particle(keys + 1, hkey[0]); - hair_to_particle(keys + 2, hkey[1]); - } - - - if(!keyed && !baked) { - if(soft) { - if(hkey[0] != pa->hair) - bp_to_particle(keys, bp[0] - 1, hkey[0] - 1); - else - bp_to_particle(keys, bp[0], hkey[0]); - } - else { - if(hkey[0] != pa->hair) - hair_to_particle(keys, hkey[0] - 1); - else - hair_to_particle(keys, hkey[0]); - } - - if(soft) { - if(hkey[1] != pa->hair + pa->totkey - 1) - bp_to_particle(keys + 3, bp[1] + 1, hkey[1] + 1); - else - bp_to_particle(keys + 3, bp[1], hkey[1]); - } - else { - if(hkey[1] != pa->hair + pa->totkey - 1) - hair_to_particle(keys + 3, hkey[1] + 1); - else - hair_to_particle(keys + 3, hkey[1]); - } - } - - dfra = keys[2].time - keys[1].time; - - keytime = (t - keys[1].time) / dfra; - - /* convert velocity to timestep size */ - if(keyed || baked){ - VecMulf(keys[1].vel, dfra / frs_sec); - VecMulf(keys[2].vel, dfra / frs_sec); - } - - /* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0,1]->[k2,k3] (k1 & k4 used for cardinal & bspline interpolation)*/ - psys_interpolate_particle((keyed || baked) ? -1 /* signal for cubic interpolation */ - : ((psys->part->flag & PART_HAIR_BSPLINE) ? KEY_BSPLINE : KEY_CARDINAL) - ,keys, keytime, &result, 0); - - /* the velocity needs to be converted back from cubic interpolation */ - if(keyed || baked){ - VecMulf(result.vel, frs_sec / dfra); - } - else if(soft==NULL) { /* softbody and keyed are allready in global space */ + /* keyed, baked and softbody are allready in global space */ + if(!keyed && !baked && !soft) { Mat4MulVecfl(hairmat, result.co); } @@ -2678,8 +2749,9 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra VECCOPY(ca->col, col); } } + - /*--modify paths--*/ + /*--modify paths and calculate rotation & velocity--*/ VecSubf(vec,(cache[i]+1)->co,cache[i]->co); length = VecLength(vec); @@ -2708,12 +2780,18 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra float cosangle, angle, tangent[3], normal[3], q[4]; if(k == 1) { + /* calculate initial tangent for incremental rotations */ VECSUB(tangent, ca->co, (ca - 1)->co); - - vectoquat(tangent, OB_POSX, OB_POSZ, (ca-1)->rot); - VECCOPY(prev_tangent, tangent); Normalize(prev_tangent); + + /* First rotation is based on emitting face orientation. */ + /* This is way better than having flipping rotations resulting */ + /* from using a global axis as a rotation pole (vec_to_quat()). */ + /* It's not an ideal solution though since it disregards the */ + /* initial tangent, but taking that in to account will allow */ + /* the possibility of flipping again. -jahka */ + Mat3ToQuat_is_ok(rotmat, (ca-1)->rot); } else { VECSUB(tangent, ca->co, (ca - 1)->co); @@ -2780,15 +2858,6 @@ void copy_particle_key(ParticleKey *to, ParticleKey *from, int time){ memcpy(to,from,sizeof(ParticleKey)); to->time=to_time; } - /* - VECCOPY(to->co,from->co); - VECCOPY(to->vel,from->vel); - QUATCOPY(to->rot,from->rot); - if(time) - to->time=from->time; - to->flag=from->flag; - to->sbw=from->sbw; - */ } void psys_get_from_key(ParticleKey *key, float *loc, float *vel, float *rot, float *time){ if(loc) VECCOPY(loc,key->co); @@ -3017,8 +3086,6 @@ static void default_particle_settings(ParticleSettings *part) part->totpart= 1000; part->grid_res= 10; part->timetweak= 1.0; - part->keyed_time= 0.5; - //part->userjit; part->integrator= PART_INT_MIDPOINT; part->phystype= PART_PHYS_NEWTON; @@ -3032,7 +3099,6 @@ static void default_particle_settings(ParticleSettings *part) part->reactevent= PART_EVENT_DEATH; part->disp=100; part->from= PART_FROM_FACE; - part->length= 1.0; part->nbetween= 4; part->boidneighbours= 5; @@ -3059,10 +3125,15 @@ static void default_particle_settings(ParticleSettings *part) part->rough2_size=1.0; part->rough_end_shape=1.0; + part->clength=1.0f; + part->clength_thres=0.0f; + part->draw_line[0]=0.5; part->path_start = 0.0f; part->path_end = 1.0f; + part->keyed_loops = 1; + part->banking=1.0; part->max_bank=1.0; @@ -3480,7 +3551,7 @@ float psys_get_child_size(ParticleSystem *psys, ChildParticle *cpa, float cfra, } static void get_child_modifier_parameters(ParticleSettings *part, ParticleThreadContext *ctx, ChildParticle *cpa, short cpa_from, int cpa_num, float *cpa_fuv, float *orco, ParticleTexture *ptex) { - ptex->length=part->length*(1.0f - part->randlength*cpa->rand[0]); + ptex->length= 1.0f - part->randlength*cpa->rand[0]; ptex->clump=1.0; ptex->kink=1.0; ptex->rough1= 1.0; @@ -3489,6 +3560,8 @@ static void get_child_modifier_parameters(ParticleSettings *part, ParticleThread ptex->exist= 1.0; ptex->effector= 1.0; + ptex->length*= part->clength_thres < cpa->rand[1] ? part->clength : 1.0f; + get_cpa_texture(ctx->dm,ctx->ma,cpa_num,cpa_fuv,orco,ptex, MAP_PA_DENS|MAP_PA_LENGTH|MAP_PA_CLUMP|MAP_PA_KINK|MAP_PA_ROUGH); @@ -3511,7 +3584,7 @@ static void get_child_modifier_parameters(ParticleSettings *part, ParticleThread if(ctx->vg_effector) ptex->effector*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_effector); } -static void do_child_modifiers(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSettings *part, ParticleTexture *ptex, ParticleKey *par, float *par_rot, ChildParticle *cpa, float *orco, ParticleKey *state, float t) +static void do_child_modifiers(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSettings *part, ParticleTexture *ptex, ParticleKey *par, float *par_rot, ChildParticle *cpa, float *orco, float mat[4][4], ParticleKey *state, float t) { int guided = 0; @@ -3528,13 +3601,13 @@ static void do_child_modifiers(Scene *scene, Object *ob, ParticleSystem *psys, P } if(part->rough1 != 0.0 && ptex->rough1 != 0.0) - do_rough(orco, t, ptex->rough1*part->rough1, part->rough1_size, 0.0, state); + do_rough(orco, mat, t, ptex->rough1*part->rough1, part->rough1_size, 0.0, state); if(part->rough2 != 0.0 && ptex->rough2 != 0.0) - do_rough(cpa->rand, t, ptex->rough2*part->rough2, part->rough2_size, part->rough2_thres, state); + do_rough(cpa->rand, mat, t, ptex->rough2*part->rough2, part->rough2_size, part->rough2_thres, state); if(part->rough_end != 0.0 && ptex->roughe != 0.0) - do_rough_end(cpa->rand, t, ptex->roughe*part->rough_end, part->rough_end_shape, state, par); + do_rough_end(cpa->rand, mat, t, ptex->roughe*part->rough_end, part->rough_end_shape, state); } /* get's hair (or keyed) particles state at the "path time" specified in state->time */ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, int p, ParticleKey *state, int vel) @@ -3549,8 +3622,9 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i HairKey *hkey[2] = {NULL, NULL}; ParticleKey *par=0, keys[4], tstate; ParticleThreadContext ctx; /* fake thread context for child modifiers */ + ParticleInterpolationData pind; - float t, real_t, dfra, keytime, frs_sec = scene->r.frs_sec; + float t, frs_sec = scene->r.frs_sec; float co[3], orco[3]; float hairmat[4][4]; int totparent = 0; @@ -3558,7 +3632,7 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i int totchild = psys->totchild; short between = 0, edit = 0; - int keyed = psys->flag & PSYS_KEYED; + int keyed = part->phystype & PART_PHYS_KEYED && psys->flag & PSYS_KEYED; int cached = !keyed && part->type != PART_HAIR; float *cpa_fuv; int cpa_num; short cpa_from; @@ -3580,88 +3654,14 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i key_from_object(pa->stick_ob,state); return; } - - if(keyed) { - kkey[0] = pa->keys; - kkey[1] = kkey[0] + 1; - if(state->time < 0.0f) - real_t = -state->time; - else - real_t = kkey[0]->time + t * (kkey[0][pa->totkey-1].time - kkey[0]->time); - } - else if(cached) { - get_pointcache_keys_for_time(psys, -1, 0.0f, NULL, NULL); - } - else { - hkey[0] = pa->hair; - hkey[1] = pa->hair + 1; - - if(state->time < 0.0f) - real_t = -state->time; - else - real_t = hkey[0]->time + t * (hkey[0][pa->totkey-1].time - hkey[0]->time); - } - - if(keyed) { - while(kkey[1]->time < real_t) { - kkey[1]++; - } - kkey[0] = kkey[1] - 1; - - memcpy(keys + 1, kkey[0], sizeof(ParticleKey)); - memcpy(keys + 2, kkey[1], sizeof(ParticleKey)); - } - else if(cached) { - if(state->time < 0.0f) /* flag for time in frames */ - real_t = -state->time; - else - real_t = pa->time + t * (pa->dietime - pa->time); - - get_pointcache_keys_for_time(psys, p, real_t, keys+1, keys+2); - } - else { - while(hkey[1]->time < real_t) - hkey[1]++; - - hkey[0] = hkey[1] - 1; - - hair_to_particle(keys + 1, hkey[0]); - hair_to_particle(keys + 2, hkey[1]); - } + pind.keyed = keyed; + pind.cached = cached; + pind.soft = NULL; + init_particle_interpolation(ob, psys, pa, &pind); + do_particle_interpolation(psys, p, pa, t, frs_sec, &pind, state); if(!keyed && !cached) { - if(hkey[0] != pa->hair) - hair_to_particle(keys, hkey[0] - 1); - else - hair_to_particle(keys, hkey[0]); - - if(hkey[1] != pa->hair + pa->totkey - 1) - hair_to_particle(keys + 3, hkey[1] + 1); - else - hair_to_particle(keys + 3, hkey[1]); - } - - dfra = keys[2].time - keys[1].time; - - keytime = (real_t - keys[1].time) / dfra; - - /* convert velocity to timestep size */ - if(keyed || cached){ - VecMulf(keys[1].vel, dfra / frs_sec); - VecMulf(keys[2].vel, dfra / frs_sec); - QuatInterpol(state->rot,keys[1].rot,keys[2].rot,keytime); - } - - psys_interpolate_particle((keyed || cached) ? -1 /* signal for cubic interpolation */ - : ((psys->part->flag & PART_HAIR_BSPLINE) ? KEY_BSPLINE : KEY_CARDINAL) - ,keys, keytime, state, 1); - - /* the velocity needs to be converted back from cubic interpolation */ - if(keyed || cached){ - VecMulf(state->vel, frs_sec / dfra); - } - else { if((pa->flag & PARS_REKEY)==0) { psys_mat_hair_to_global(ob, psmd->dm, part->from, pa, hairmat); Mat4MulVecfl(hairmat, state->co); @@ -3709,8 +3709,6 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i cpa_num=cpa->num; foffset= cpa->foffset; - if(part->childtype == PART_CHILD_FACES) - foffset = -(2.0f + part->childspread); cpa_fuv = cpa->fuv; cpa_from = PART_FROM_FACE; @@ -3721,11 +3719,14 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i //Mat4MulVecfl(ob->obmat,cpa_1st); + pa = psys->particles + cpa->parent; + + psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); + pa=0; } else{ /* get the parent state */ - keys->time = state->time; psys_get_particle_on_path(scene, ob, psys, cpa->parent, keys,1); @@ -3737,6 +3738,8 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i cpa_fuv=pa->fuv; psys_particle_on_emitter(psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,0,0,0,orco,0); + + psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat); } /* correct child ipo timing */ @@ -3785,7 +3788,7 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i copy_particle_key(&tstate, state, 1); /* apply different deformations to the child path */ - do_child_modifiers(scene, ob, psys, part, &ptex, par, par->rot, cpa, orco, state, t); + do_child_modifiers(scene, ob, psys, part, &ptex, par, par->rot, cpa, orco, hairmat, state, t); /* try to estimate correct velocity */ if(vel){ @@ -3856,7 +3859,7 @@ int psys_get_particle_state(struct Scene *scene, Object *ob, ParticleSystem *psy state->time= (cfra-(part->sta+(part->end-part->sta)*cpa->rand[0]))/(part->lifetime*cpa->rand[1]); } else - state->time= (cfra-pa->time)/(pa->dietime-pa->time); + state->time= -cfra; psys_get_particle_on_path(scene, ob, psys, p, state,1); return 1; @@ -3893,57 +3896,55 @@ int psys_get_particle_state(struct Scene *scene, Object *ob, ParticleSystem *psy calc_latt_deform(psys->lattice, state->co,1.0f); } else{ - if (pa) { /* TODO PARTICLE - should this ever be NULL? - Campbell */ - if(pa->state.time==state->time || ELEM(part->phystype,PART_PHYS_NO,PART_PHYS_KEYED)) - copy_particle_key(state, &pa->state, 1); - else if(pa->prev_state.time==state->time) - copy_particle_key(state, &pa->prev_state, 1); - else { - /* let's interpolate to try to be as accurate as possible */ - if(pa->state.time + 1.0f > state->time && pa->prev_state.time - 1.0f < state->time) { - ParticleKey keys[4]; - float dfra, keytime, frs_sec = scene->r.frs_sec; + if(pa->state.time==state->time || ELEM(part->phystype,PART_PHYS_NO,PART_PHYS_KEYED)) + copy_particle_key(state, &pa->state, 1); + else if(pa->prev_state.time==state->time) + copy_particle_key(state, &pa->prev_state, 1); + else { + /* let's interpolate to try to be as accurate as possible */ + if(pa->state.time + 1.0f > state->time && pa->prev_state.time - 1.0f < state->time) { + ParticleKey keys[4]; + float dfra, keytime, frs_sec = scene->r.frs_sec; - if(pa->prev_state.time >= pa->state.time) { - /* prev_state is wrong so let's not use it, this can happen at frame 1 or particle birth */ - copy_particle_key(state, &pa->state, 1); + if(pa->prev_state.time >= pa->state.time) { + /* prev_state is wrong so let's not use it, this can happen at frame 1 or particle birth */ + copy_particle_key(state, &pa->state, 1); - VECADDFAC(state->co, state->co, state->vel, (state->time-pa->state.time)/frs_sec); - } - else { - copy_particle_key(keys+1, &pa->prev_state, 1); - copy_particle_key(keys+2, &pa->state, 1); - - dfra = keys[2].time - keys[1].time; - - keytime = (state->time - keys[1].time) / dfra; - - /* convert velocity to timestep size */ - VecMulf(keys[1].vel, dfra / frs_sec); - VecMulf(keys[2].vel, dfra / frs_sec); - - psys_interpolate_particle(-1, keys, keytime, state, 1); - - /* convert back to real velocity */ - VecMulf(state->vel, frs_sec / dfra); - - VecLerpf(state->ave, keys[1].ave, keys[2].ave, keytime); - QuatInterpol(state->rot, keys[1].rot, keys[2].rot, keytime); - } + VECADDFAC(state->co, state->co, state->vel, (state->time-pa->state.time)/frs_sec); } else { - /* extrapolating over big ranges is not accurate so let's just give something close to reasonable back */ - copy_particle_key(state, &pa->state, 0); + copy_particle_key(keys+1, &pa->prev_state, 1); + copy_particle_key(keys+2, &pa->state, 1); + + dfra = keys[2].time - keys[1].time; + + keytime = (state->time - keys[1].time) / dfra; + + /* convert velocity to timestep size */ + VecMulf(keys[1].vel, dfra / frs_sec); + VecMulf(keys[2].vel, dfra / frs_sec); + + psys_interpolate_particle(-1, keys, keytime, state, 1); + + /* convert back to real velocity */ + VecMulf(state->vel, frs_sec / dfra); + + VecLerpf(state->ave, keys[1].ave, keys[2].ave, keytime); + QuatInterpol(state->rot, keys[1].rot, keys[2].rot, keytime); } } - - if(pa->alive==PARS_DEAD && part->flag&PART_STICKY && pa->flag&PARS_STICKY && pa->stick_ob){ - key_from_object(pa->stick_ob,state); + else { + /* extrapolating over big ranges is not accurate so let's just give something close to reasonable back */ + copy_particle_key(state, &pa->state, 0); } - - if(psys->lattice) - calc_latt_deform(psys->lattice, state->co,1.0f); } + + if(pa->alive==PARS_DEAD && part->flag&PART_STICKY && pa->flag&PARS_STICKY && pa->stick_ob){ + key_from_object(pa->stick_ob,state); + } + + if(psys->lattice) + calc_latt_deform(psys->lattice, state->co,1.0f); } return 1; diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 07e0e82a86d..56ca3e8e22b 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -111,10 +111,7 @@ static int get_current_display_percentage(ParticleSystem *psys) return 100; if(part->phystype==PART_PHYS_KEYED){ - if(psys->flag & PSYS_FIRST_KEYED) - return psys->part->disp; - else - return 100; + return psys->part->disp; } else return psys->part->disp; @@ -199,7 +196,7 @@ static void realloc_particles(Object *ob, ParticleSystem *psys, int new_totpart) if(psys->particles->keys) MEM_freeN(psys->particles->keys); - for(i=0, pa=psys->particles; itotpart; i++, pa++) + for(i=0, pa=newpars; ikeys) { pa->keys= NULL; pa->totkey= 0; @@ -1976,64 +1973,59 @@ static void reset_all_particles(Scene *scene, Object *ob, ParticleSystem *psys, /************************************************/ /* Keyed particles */ /************************************************/ -/* a bit of an unintuitive function :) counts objects in a keyed chain and returns 1 if some of them were selected (used in drawing) */ -int psys_count_keyed_targets(Object *ob, ParticleSystem *psys) +/* Counts valid keyed targets */ +void psys_count_keyed_targets(Object *ob, ParticleSystem *psys) { - ParticleSystem *kpsys=psys,*tpsys; - ParticleSettings *tpart; - Object *kob=ob,*tob; - int select=ob->flag&SELECT; - short totkeyed=0; - Base *base; + ParticleSystem *kpsys; + KeyedParticleTarget *kpt = psys->keyed_targets.first; + int psys_num = BLI_findindex(&ob->particlesystem, psys); + int keys_valid = 1; + psys->totkeyed = 0; - ListBase lb; - lb.first=lb.last=0; + for(; kpt; kpt=kpt->next) { + kpsys = NULL; + if(kpt->ob==ob || kpt->ob==NULL) { + if(kpt->psys >= psys_num) + kpsys = BLI_findlink(&ob->particlesystem, kpt->psys-1); - tob=psys->keyed_ob; - while(tob){ - if((tpsys=BLI_findlink(&tob->particlesystem,kpsys->keyed_psys-1))){ - tpart=tpsys->part; - - if(tpart->phystype==PART_PHYS_KEYED){ - if(lb.first){ - for(base=lb.first;base;base=base->next){ - if(tob==base->object){ - fprintf(stderr,"Error: loop in keyed chain!\n"); - BLI_freelistN(&lb); - return select; - } - } - } - base=MEM_callocN(sizeof(Base), "keyed base"); - base->object=tob; - BLI_addtail(&lb,base); - - if(tob->flag&SELECT) - select++; - kob=tob; - kpsys=tpsys; - tob=tpsys->keyed_ob; - totkeyed++; + if(kpsys && kpsys->totpart) { + kpt->flag |= KEYED_TARGET_VALID; + psys->totkeyed += keys_valid; + if(psys->flag & PSYS_KEYED_TIMING && kpt->duration != 0.0f) + psys->totkeyed += 1; } - else{ - tob=0; - totkeyed++; + else { + kpt->flag &= ~KEYED_TARGET_VALID; + keys_valid = 0; + } + } + else { + if(kpt->ob) + kpsys = BLI_findlink(&kpt->ob->particlesystem, kpt->psys-1); + + if(kpsys && kpsys->totpart) { + kpt->flag |= KEYED_TARGET_VALID; + psys->totkeyed += keys_valid; + if(psys->flag & PSYS_KEYED_TIMING && kpt->duration != 0.0f) + psys->totkeyed += 1; + } + else { + kpt->flag &= ~KEYED_TARGET_VALID; + keys_valid = 0; } } - else - tob=0; } - psys->totkeyed=totkeyed; - BLI_freelistN(&lb); - return select; + + psys->totkeyed *= psys->flag & PSYS_KEYED_TIMING ? 1 : psys->part->keyed_loops; } static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) { Object *kob = ob; ParticleSystem *kpsys = psys; + KeyedParticleTarget *kpt; ParticleData *pa; - int totpart = psys->totpart, i, k, totkeys = psys->totkeyed + 1; + int totpart = psys->totpart, i, k, totkeys = psys->totkeyed; float prevtime, nexttime, keyedtime; /* no proper targets so let's clear and bail out */ @@ -2046,7 +2038,7 @@ static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) if(totpart && psys->particles->totkey != totkeys) { free_keyed_keys(psys); - psys->particles->keys = MEM_callocN(psys->totpart*totkeys*sizeof(ParticleKey), "Keyed keys"); + psys->particles->keys = MEM_callocN(totpart*totkeys*sizeof(ParticleKey), "Keyed keys"); psys->particles->totkey = totkeys; for(i=1, pa=psys->particles+1; iflag &= ~PSYS_KEYED; + + kpt = psys->keyed_targets.first; for(k=0; kob) + kpsys = BLI_findlink(&kpt->ob->particlesystem, kpt->psys - 1); + else + kpsys = BLI_findlink(&ob->particlesystem, kpt->psys - 1); + for(i=0,pa=psys->particles; ikeys + k)->time = -1.0; /* use current time */ - if(kpsys->totpart > 0) - psys_get_particle_state(scene, kob, kpsys, i%kpsys->totpart, pa->keys + k, 1); + psys_get_particle_state(scene, kpt->ob, kpsys, i%kpsys->totpart, pa->keys + k, 1); - if(k==0) - pa->keys->time = pa->time; - else if(k==totkeys-1) - (pa->keys + k)->time = pa->time + pa->lifetime; - else{ - if(psys->flag & PSYS_KEYED_TIME){ - prevtime = (pa->keys + k - 1)->time; - nexttime = pa->time + pa->lifetime; - keyedtime = kpsys->part->keyed_time; - (pa->keys + k)->time = (1.0f - keyedtime) * prevtime + keyedtime * nexttime; + if(psys->flag & PSYS_KEYED_TIMING){ + (pa->keys+k)->time = pa->time + kpt->time; + if(kpt->duration != 0.0f && k+1 < totkeys) { + copy_particle_key(pa->keys+k+1, pa->keys+k, 1); + (pa->keys+k+1)->time = pa->time + kpt->time + kpt->duration; } - else - (pa->keys+k)->time = pa->time + (float)k / (float)(totkeys - 1) * pa->lifetime; } + else if(totkeys > 1) + (pa->keys+k)->time = pa->time + (float)k / (float)(totkeys - 1) * pa->lifetime; + else + pa->keys->time = pa->time; } - if(kpsys->keyed_ob){ - kob = kpsys->keyed_ob; - kpsys = BLI_findlink(&kob->particlesystem, kpsys->keyed_psys - 1); - } + + if(psys->flag & PSYS_KEYED_TIMING && kpt->duration!=0.0f) + k++; + + kpt = (kpt->next && kpt->next->flag & KEYED_TARGET_VALID) ? kpt = kpt->next : psys->keyed_targets.first; } psys->flag |= PSYS_KEYED; @@ -2198,6 +2194,60 @@ void psys_get_reactor_target(Object *ob, ParticleSystem *psys, Object **target_o /************************************************/ /* Point Cache */ /************************************************/ +void psys_make_temp_pointcache(Object *ob, ParticleSystem *psys) +{ + PointCache *cache = psys->pointcache; + PTCacheFile *pf = NULL; + PTCacheMem *pm = NULL; + PTCacheID pid; + int cfra, sfra = cache->startframe, efra = cache->endframe; + int totelem = psys->totpart; + int float_count = sizeof(ParticleKey) / sizeof(float); + int tot = totelem * float_count; + + if((cache->flag & PTCACHE_DISK_CACHE)==0 || cache->mem_cache.first) + return; + + BKE_ptcache_id_from_particles(&pid, ob, psys); + + for(cfra=sfra; cfra <= efra; cfra++) { + pf = BKE_ptcache_file_open(&pid, PTCACHE_FILE_READ, cfra); + + if(pf) { + pm = MEM_callocN(sizeof(PTCacheMem), "Pointcache temp mem"); + pm->data = MEM_callocN(sizeof(float)*tot, "Pointcache temp mem data"); + + if(fread(pm->data, sizeof(float), tot, pf->fp)!= tot) { + printf("Error reading from disk cache\n"); + + MEM_freeN(pm->data); + MEM_freeN(pm); + BKE_ptcache_file_close(pf); + return; + } + + pm->frame = cfra; + pm->totpoint = totelem; + + BLI_addtail(&cache->mem_cache, pm); + + BKE_ptcache_file_close(pf); + } + } +} +void psys_clear_temp_pointcache(ParticleSystem *psys) +{ + PTCacheMem *pm = psys->pointcache->mem_cache.first; + + if((psys->pointcache->flag & PTCACHE_DISK_CACHE)==0) + return; + + for(; pm; pm=pm->next) { + MEM_freeN(pm->data); + } + + BLI_freelistN(&psys->pointcache->mem_cache); +} void psys_get_pointcache_start_end(Scene *scene, ParticleSystem *psys, int *sfra, int *efra) { ParticleSettings *part = psys->part; @@ -3912,61 +3962,6 @@ static void boid_body(Scene *scene, BoidVecFunc *bvf, ParticleData *pa, Particle if(part->flag & PART_BOIDS_2D){ pa->state.vel[2]=0.0; pa->state.co[2]=part->groundz; - - if(psys->keyed_ob && (psys->keyed_ob->type == OB_MESH)){ - Object *zob=psys->keyed_ob; - int min_face; - float co1[3],co2[3],min_d=2.0,min_w[4],imat[4][4]; - VECCOPY(co1,pa->state.co); - VECCOPY(co2,pa->state.co); - - co1[2]=1000.0f; - co2[2]=-1000.0f; - - Mat4Invert(imat,zob->obmat); - Mat4MulVecfl(imat,co1); - Mat4MulVecfl(imat,co2); - - if(psys_intersect_dm(scene,zob,0,0,co1,co2,&min_d,&min_face,min_w,0,0,0,0)){ - DerivedMesh *dm; - MFace *mface; - MVert *mvert; - float loc[3],nor[3],q1[4]; - - psys_disable_all(zob); - dm=mesh_get_derived_final(scene, zob, 0); - psys_enable_all(zob); - - mface=dm->getFaceDataArray(dm,CD_MFACE); - mface+=min_face; - mvert=dm->getVertDataArray(dm,CD_MVERT); - - /* get deflection point & normal */ - psys_interpolate_face(mvert,mface,0,0,min_w,loc,nor,0,0,0,0); - - Mat4MulVecfl(zob->obmat,loc); - Mat4Mul3Vecfl(zob->obmat,nor); - - Normalize(nor); - - VECCOPY(pa->state.co,loc); - - zvec[2]=1.0; - - Crossf(loc,zvec,nor); - - bank=VecLength(loc); - if(bank>0.0){ - bank=saasin(bank); - - VecRotToQuat(loc,bank,q); - - QUATCOPY(q1,pa->state.rot); - - QuatMul(pa->state.rot,q,q1); - } - } - } } length=bvf->Length(pa->state.vel); @@ -4238,7 +4233,7 @@ static void psys_update_path_cache(Scene *scene, Object *ob, ParticleSystemModif if((psys->part->childtype && psys->totchild != get_psys_tot_child(scene, psys)) || psys->recalc&PSYS_RECALC_RESET) alloc=1; - if(alloc || psys->recalc&PSYS_RECALC_RESET || (psys->vgroup[PSYS_VG_DENSITY] && (G.f & G_WEIGHTPAINT))) + if(alloc || psys->recalc&PSYS_RECALC_CHILD || (psys->vgroup[PSYS_VG_DENSITY] && (G.f & G_WEIGHTPAINT))) distr=1; if(distr){ @@ -4416,12 +4411,15 @@ static void cached_step(Scene *scene, Object *ob, ParticleSystemModifierData *ps MEM_freeN(vg_size); } -void psys_changed_type(ParticleSystem *psys) +static void psys_changed_type(Object *ob, ParticleSystem *psys) { ParticleSettings *part; + PTCacheID pid; part= psys->part; + BKE_ptcache_id_from_particles(&pid, ob, psys); + /* system type has changed so set sensible defaults and clear non applicable flags */ if(part->from == PART_FROM_PARTICLE) { if(part->type != PART_REACTOR) @@ -4430,7 +4428,7 @@ void psys_changed_type(ParticleSystem *psys) part->distr = PART_DISTR_JIT; } - if(psys->part->phystype != PART_PHYS_KEYED) + if(part->phystype != PART_PHYS_KEYED) psys->flag &= ~PSYS_KEYED; if(part->type == PART_HAIR) { @@ -4442,6 +4440,8 @@ void psys_changed_type(ParticleSystem *psys) CLAMP(part->path_start, 0.0f, 100.0f); CLAMP(part->path_end, 0.0f, 100.0f); + + BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0); } else { free_hair(psys, 1); @@ -4454,7 +4454,18 @@ void psys_changed_type(ParticleSystem *psys) psys_reset(psys, PSYS_RESET_ALL); } - +void psys_changed_physics(Object *ob, ParticleSystem *psys) +{ + if(ELEM(psys->part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) { + PTCacheID pid; + BKE_ptcache_id_from_particles(&pid, ob, psys); + BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0); + } + else { + free_keyed_keys(psys); + psys->flag &= ~PSYS_KEYED; + } +} static void particles_fluid_step(Scene *scene, Object *ob, ParticleSystem *psys, int cfra) { if(psys->particles){ @@ -4588,6 +4599,8 @@ static void system_step(Scene *scene, Object *ob, ParticleSystem *psys, Particle BKE_ptcache_id_from_particles(&pid, ob, psys); BKE_ptcache_id_time(&pid, scene, 0.0f, &startframe, &endframe, NULL); + psys_clear_temp_pointcache(psys); + /* update ipo's */ #if 0 // XXX old animation system if((part->flag & PART_ABS_TIME) && part->ipo) { @@ -4736,7 +4749,7 @@ static void system_step(Scene *scene, Object *ob, ParticleSystem *psys, Particle if(usecache && psys->cfra == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) write_particles_to_cache(ob, psys, startframe); - if(part->phystype==PART_PHYS_KEYED && psys->flag&PSYS_FIRST_KEYED) + if(part->phystype==PART_PHYS_KEYED) psys_count_keyed_targets(ob,psys); /* initialize vertex groups */ @@ -4783,7 +4796,7 @@ static void system_step(Scene *scene, Object *ob, ParticleSystem *psys, Particle write_particles_to_cache(ob, psys, framenr); /* for keyed particles the path is allways known so it can be drawn */ - if(part->phystype==PART_PHYS_KEYED && psys->flag&PSYS_FIRST_KEYED){ + if(part->phystype==PART_PHYS_KEYED) { set_keyed_keys(scene, ob, psys); psys_update_path_cache(scene, ob, psmd, psys,(int)cfra); } @@ -4866,7 +4879,9 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) return; if(psys->recalc & PSYS_RECALC_TYPE) - psys_changed_type(psys); + psys_changed_type(ob, psys); + else if(psys->recalc & PSYS_RECALC_PHYS) + psys_changed_physics(ob, psys); /* (re-)create hair */ if(psys->part->type==PART_HAIR && hair_needs_recalc(psys)) { diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 2fe46be7a89..6107510fa47 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -315,8 +315,10 @@ static int ptcache_pid_totelem(PTCacheID *pid) ParticleSystem *psys = pid->data; return psys->totpart; } - else if(pid->type==PTCACHE_TYPE_CLOTH) - return 0; // TODO + else if(pid->type==PTCACHE_TYPE_CLOTH) { + ClothModifierData *clmd = pid->data; + return clmd->clothObject->numverts; + } return 0; } @@ -429,6 +431,7 @@ int BKE_ptcache_read_cache(PTCacheReader *reader) if(pf) { BKE_ptcache_file_close(pf); + pf = NULL; MEM_freeN(data); } @@ -523,7 +526,9 @@ int BKE_ptcache_read_cache(PTCacheReader *reader) if(pf) { BKE_ptcache_file_close(pf); + pf = NULL; BKE_ptcache_file_close(pf2); + pf2 = NULL; MEM_freeN(data1); MEM_freeN(data2); } @@ -567,10 +572,13 @@ int BKE_ptcache_read_cache(PTCacheReader *reader) if(pf) { BKE_ptcache_file_close(pf); + pf = NULL; MEM_freeN(data); } - if(pf2) + if(pf2) { BKE_ptcache_file_close(pf2); + pf = NULL; + } ret = PTCACHE_READ_OLD; } @@ -602,13 +610,15 @@ int BKE_ptcache_write_cache(PTCacheWriter *writer) PTCacheFile *pf= NULL; int elemsize = ptcache_pid_elemsize(writer->pid); int i, incr = elemsize / sizeof(float); - int add = 0, overwrite = 0, ocfra; + int add = 0, overwrite = 0; float temp[14]; if(writer->totelem == 0 || writer->cfra <= 0) return 0; if(cache->flag & PTCACHE_DISK_CACHE) { + int cfra = cache->endframe; + /* allways start from scratch on the first frame */ if(writer->cfra == cache->startframe) { BKE_ptcache_id_clear(writer->pid, PTCACHE_CLEAR_ALL, writer->cfra); @@ -616,7 +626,7 @@ int BKE_ptcache_write_cache(PTCacheWriter *writer) add = 1; } else { - int cfra = cache->endframe; + int ocfra; /* find last cached frame */ while(cfra > cache->startframe && !BKE_ptcache_id_exist(writer->pid, cfra)) cfra--; @@ -626,7 +636,7 @@ int BKE_ptcache_write_cache(PTCacheWriter *writer) while(ocfra > cache->startframe && !BKE_ptcache_id_exist(writer->pid, ocfra)) ocfra--; - if(writer->cfra > cfra) { + if(cfra >= cache->startframe && writer->cfra > cfra) { if(ocfra >= cache->startframe && cfra - ocfra < cache->step) overwrite = 1; else @@ -636,7 +646,7 @@ int BKE_ptcache_write_cache(PTCacheWriter *writer) if(add || overwrite) { if(overwrite) - BKE_ptcache_id_clear(writer->pid, PTCACHE_CLEAR_FRAME, ocfra); + BKE_ptcache_id_clear(writer->pid, PTCACHE_CLEAR_FRAME, cfra); pf = BKE_ptcache_file_open(writer->pid, PTCACHE_FILE_WRITE, writer->cfra); if(!pf) @@ -665,7 +675,7 @@ int BKE_ptcache_write_cache(PTCacheWriter *writer) pm2 = cache->mem_cache.last; if(pm2 && writer->cfra > pm2->frame) { - if(pm2 && pm2->prev && pm2->frame - pm2->prev->frame < cache->step) + if(pm2->prev && pm2->frame - pm2->prev->frame < cache->step) overwrite = 1; else add = 1; @@ -1102,6 +1112,10 @@ PointCache *BKE_ptcache_copy(PointCache *cache) ncache= MEM_dupallocN(cache); + /* hmm, should these be copied over instead? */ + ncache->mem_cache.first = NULL; + ncache->mem_cache.last = NULL; + ncache->flag= 0; ncache->simframe= 0; @@ -1211,8 +1225,9 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) cache = pid->cache; if((cache->flag & PTCACHE_BAKED)==0) { if(pid->type==PTCACHE_TYPE_PARTICLES) { - /* skip hair particles */ - if(((ParticleSystem*)pid->data)->part->type == PART_HAIR) + ParticleSystem *psys = (ParticleSystem*)pid->data; + /* skip hair & keyed particles */ + if(psys->part->type == PART_HAIR || psys->part->phystype == PART_PHYS_KEYED) continue; psys_get_pointcache_start_end(scene, pid->data, &cache->startframe, &cache->endframe); @@ -1310,6 +1325,7 @@ void BKE_ptcache_toggle_disk_cache(PTCacheID *pid) { if (!G.relbase_valid){ cache->flag &= ~PTCACHE_DISK_CACHE; + printf("File must be saved before using disk cache!\n"); return; } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 479fa760423..c2b19a804ee 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2968,6 +2968,9 @@ static void direct_link_pointcache(FileData *fd, PointCache *cache) for(; pm; pm=pm->next) pm->data = newdataadr(fd, pm->data); } + else + cache->mem_cache.first = cache->mem_cache.last = NULL; + cache->flag &= ~(PTCACHE_SIMULATION_VALID|PTCACHE_BAKE_EDIT_ACTIVE); cache->simframe= 0; } @@ -3011,12 +3014,18 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase psys->part = newlibadr_us(fd, id->lib, psys->part); if(psys->part) { + KeyedParticleTarget *kpt = psys->keyed_targets.first; + + for(; kpt; kpt=kpt->next) + kpt->ob=newlibadr(fd, id->lib, kpt->ob); + psys->target_ob = newlibadr(fd, id->lib, psys->target_ob); - psys->keyed_ob = newlibadr(fd, id->lib, psys->keyed_ob); for(a=0,pa=psys->particles; atotpart; a++,pa++){ pa->stick_ob=newlibadr(fd, id->lib, pa->stick_ob); } + + } else { /* particle modifier must be removed before particle system */ @@ -3066,6 +3075,8 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles) direct_link_pointcache(fd, sb->pointcache); } + link_list(fd, &psys->keyed_targets); + psys->edit = 0; psys->free_edit = NULL; psys->pathcache = 0; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 4b52da83019..65a4a355717 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -589,6 +589,7 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase) static void write_particlesystems(WriteData *wd, ListBase *particles) { ParticleSystem *psys= particles->first; + KeyedParticleTarget *kpt; int a; for(; psys; psys=psys->next) { @@ -604,6 +605,10 @@ static void write_particlesystems(WriteData *wd, ListBase *particles) writestruct(wd, DATA, "HairKey", pa->totkey, pa->hair); } } + kpt = psys->keyed_targets.first; + for(; kpt; kpt=kpt->next) + writestruct(wd, DATA, "KeyedParticleTarget", 1, kpt); + if(psys->child) writestruct(wd, DATA, "ChildParticle", psys->totchild ,psys->child); writestruct(wd, DATA, "SoftBody", 1, psys->soft); if(psys->soft) write_pointcaches(wd, psys->soft->pointcache, PTCACHE_WRITE_PSYS); diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index 65c2976d57c..f16a232f26d 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -75,6 +75,10 @@ void OBJECT_OT_particle_system_add(struct wmOperatorType *ot); void OBJECT_OT_particle_system_remove(struct wmOperatorType *ot); void PARTICLE_OT_new(struct wmOperatorType *ot); +void PARTICLE_OT_new_keyed_target(struct wmOperatorType *ot); +void PARTICLE_OT_remove_keyed_target(struct wmOperatorType *ot); +void PARTICLE_OT_keyed_target_move_up(struct wmOperatorType *ot); +void PARTICLE_OT_keyed_target_move_down(struct wmOperatorType *ot); #endif /* ED_BUTTONS_INTERN_H */ diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 66b380ab413..6fb52c61131 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -49,6 +49,7 @@ #include "BKE_world.h" #include "BLI_editVert.h" +#include "BLI_listbase.h" #include "RNA_access.h" @@ -473,33 +474,32 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); Main *bmain= CTX_data_main(C); - ParticleSettings *part= CTX_data_pointer_get_type(C, "particle_settings", &RNA_ParticleSettings).data; + ParticleSystem *psys; + ParticleSettings *part = NULL; Object *ob; PointerRNA ptr; + ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + + psys = ptr.data; + /* add or copy particle setting */ - if(part) - part= psys_copy_settings(part); + if(psys->part) + part= psys_copy_settings(psys->part); else part= psys_new_settings("PSys", bmain); - /* attempt to assign to material slot */ - ptr= CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ob= ptr.id.data; - if(ptr.data) { - ParticleSystem *psys = (ParticleSystem*)ptr.data; - ob= ptr.id.data; + if(psys->part) + psys->part->id.us--; - if(psys->part) - psys->part->id.us--; + psys->part = part; - psys->part = part; + DAG_scene_sort(scene); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); - DAG_scene_sort(scene); - DAG_object_flush_update(scene, ob, OB_RECALC_DATA); - - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - } + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -517,3 +517,175 @@ void PARTICLE_OT_new(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/********************** keyed particle target operators *********************/ + +static int new_keyed_particle_target_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + + KeyedParticleTarget *kpt; + + if(!psys) + return OPERATOR_CANCELLED; + + kpt = psys->keyed_targets.first; + for(; kpt; kpt=kpt->next) + kpt->flag &= ~KEYED_TARGET_CURRENT; + + kpt = MEM_callocN(sizeof(KeyedParticleTarget), "keyed particle target"); + + kpt->flag |= KEYED_TARGET_CURRENT; + kpt->psys = 1; + + BLI_addtail(&psys->keyed_targets, kpt); + + DAG_scene_sort(scene); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void PARTICLE_OT_new_keyed_target(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "New Keyed Particle Target"; + ot->idname= "PARTICLE_OT_new_keyed_target"; + + /* api callbacks */ + ot->exec= new_keyed_particle_target_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int remove_keyed_particle_target_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + + KeyedParticleTarget *kpt; + + if(!psys) + return OPERATOR_CANCELLED; + + kpt = psys->keyed_targets.first; + for(; kpt; kpt=kpt->next) { + if(kpt->flag & KEYED_TARGET_CURRENT) { + BLI_remlink(&psys->keyed_targets, kpt); + MEM_freeN(kpt); + break; + } + + } + kpt = psys->keyed_targets.last; + + if(kpt) + kpt->flag |= KEYED_TARGET_CURRENT; + + DAG_scene_sort(scene); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void PARTICLE_OT_remove_keyed_target(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Keyed Particle Target"; + ot->idname= "PARTICLE_OT_remove_keyed_target"; + + /* api callbacks */ + ot->exec= remove_keyed_particle_target_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/************************ move up modifier operator *********************/ + +static int keyed_target_move_up_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + KeyedParticleTarget *kpt; + + if(!psys) + return OPERATOR_CANCELLED; + + kpt = psys->keyed_targets.first; + for(; kpt; kpt=kpt->next) { + if(kpt->flag & KEYED_TARGET_CURRENT && kpt->prev) { + BLI_remlink(&psys->keyed_targets, kpt); + BLI_insertlink(&psys->keyed_targets, kpt->prev->prev, kpt); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + break; + } + } + + return OPERATOR_FINISHED; +} + +void PARTICLE_OT_keyed_target_move_up(wmOperatorType *ot) +{ + ot->name= "Move Up Keyed Target"; + ot->description= "Move keyed particle target up in the list."; + ot->idname= "PARTICLE_OT_keyed_target_move_up"; + + ot->exec= keyed_target_move_up_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/************************ move down modifier operator *********************/ + +static int keyed_target_move_down_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + KeyedParticleTarget *kpt; + + if(!psys) + return OPERATOR_CANCELLED; + kpt = psys->keyed_targets.first; + for(; kpt; kpt=kpt->next) { + if(kpt->flag & KEYED_TARGET_CURRENT && kpt->next) { + BLI_remlink(&psys->keyed_targets, kpt); + BLI_insertlink(&psys->keyed_targets, kpt->next, kpt); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + break; + } + } + + return OPERATOR_FINISHED; +} + +void PARTICLE_OT_keyed_target_move_down(wmOperatorType *ot) +{ + ot->name= "Move Down Keyed Target"; + ot->description= "Move keyed particle target down in the list."; + ot->idname= "PARTICLE_OT_keyed_target_move_down"; + + ot->exec= keyed_target_move_down_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index f7be323a4c5..6cdb4dbf93d 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -224,6 +224,10 @@ void buttons_operatortypes(void) WM_operatortype_append(OBJECT_OT_particle_system_remove); WM_operatortype_append(PARTICLE_OT_new); + WM_operatortype_append(PARTICLE_OT_new_keyed_target); + WM_operatortype_append(PARTICLE_OT_remove_keyed_target); + WM_operatortype_append(PARTICLE_OT_keyed_target_move_up); + WM_operatortype_append(PARTICLE_OT_keyed_target_move_down); } void buttons_keymap(struct wmWindowManager *wm) diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e8749537f5e..f83a0b9686e 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3161,15 +3161,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv /* 2. */ if(part->phystype==PART_PHYS_KEYED){ - if(psys->flag & PSYS_FIRST_KEYED){ - if(psys->flag&PSYS_KEYED){ - select=psys_count_keyed_targets(ob,psys); - if(psys->totkeyed==0) - return; - } + if(psys->flag&PSYS_KEYED){ + psys_count_keyed_targets(ob,psys); + if(psys->totkeyed==0) + return; } - else - return; } if(select){ @@ -3226,8 +3222,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else draw_as = part->draw_as; - if(part->flag&PART_GLOB_TIME) - cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f); + //if(part->flag&PART_GLOB_TIME) + cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f); if(draw_as==PART_DRAW_PATH && psys->pathcache==NULL) draw_as=PART_DRAW_DOT; @@ -3306,8 +3302,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if(draw_as && draw_as!=PART_DRAW_PATH) { int tot_vec_size = (totpart + totchild) * 3 * sizeof(float); - if(part->draw_as == PART_DRAW_REND && part->trail_count > 1) + if(part->draw_as == PART_DRAW_REND && part->trail_count > 1) { tot_vec_size *= part->trail_count; + psys_make_temp_pointcache(ob, psys); + } if(draw_as!=PART_DRAW_CIRC) { switch(draw_as) { @@ -3361,8 +3359,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pa_dietime = pa->dietime; pa_size=pa->size; - if((part->flag&PART_ABS_TIME)==0){ -#if 0 // XXX old animation system +#if 0 // XXX old animation system + if((part->flag&PART_ABS_TIME)==0){ if(ma && ma->ipo){ IpoCurve *icu; @@ -3389,8 +3387,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pa_size = icu->curval; } } -#endif // XXX old animation system } +#endif // XXX old animation system r_tilt = 1.0f + pa->r_ave[0]; r_length = 0.5f * (1.0f + pa->r_ave[1]); @@ -3400,9 +3398,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pa_time=psys_get_child_time(psys,cpa,cfra,&pa_birthtime,&pa_dietime); +#if 0 // XXX old animation system if((part->flag&PART_ABS_TIME)==0) { if(ma && ma->ipo){ -#if 0 // XXX old animation system IpoCurve *icu; /* correction for lifetime */ @@ -3416,9 +3414,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else if(icu->adrcode == MA_COL_B) ma_b = icu->curval; } -#endif // XXX old animation system } } +#endif // XXX old animation system pa_size=psys_get_child_size(psys,cpa,cfra,0); @@ -3444,7 +3442,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else if(ct < 0.0f || ct > 1.0f) continue; - state.time = (part->draw & PART_ABS_PATH_TIME) ? -ct : ct; + state.time = (part->draw & PART_ABS_PATH_TIME) ? -ct : -(pa_birthtime + ct * (pa_dietime - pa_birthtime)); psys_get_particle_on_path(scene,ob,psys,a,&state,need_v); if(psys->parent) diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index c793362c223..0b3309bfc0c 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -61,6 +61,14 @@ typedef struct ChildParticle { float rand[3]; } ChildParticle; +typedef struct KeyedParticleTarget { + struct KeyedParticleTarget *next, *prev; + struct Object *ob; + int psys; + short flag, rt; + float time, duration; +} KeyedParticleTarget; + /* Everything that's non dynamic for a particle: */ typedef struct ParticleData { struct Object *stick_ob;/* object that particle sticks to when dead */ @@ -131,7 +139,7 @@ typedef struct ParticleSettings { /* general values */ float sta, end, lifetime, randlife; - float timetweak, jitfac, keyed_time, eff_hair; + float timetweak, jitfac, eff_hair; int totpart, userjit, grid_res; /* initial velocity factors */ @@ -142,11 +150,11 @@ typedef struct ParticleSettings { /* global physical properties */ float acc[3], dragfac, brownfac, dampfac; /* length */ - float length, abslength, randlength; + float randlength; /* children */ int child_nbr, ren_child_nbr; float parents, childsize, childrandsize; - float childrad, childflat, childspread; + float childrad, childflat, rt; /* clumping */ float clumpfac, clumppow; /* kink */ @@ -155,12 +163,16 @@ typedef struct ParticleSettings { float rough1, rough1_size; float rough2, rough2_size, rough2_thres; float rough_end, rough_end_shape; + /* length */ + float clength, clength_thres; /* branching */ float branch_thres; /* drawing stuff */ float draw_line[2]; float path_start, path_end; int trail_count; + /* keyed particles */ + int keyed_loops; /* boids */ float max_vel, max_lat_acc, max_tan_acc; @@ -195,17 +207,18 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in struct SoftBody *soft; /* hair softbody */ struct Object *target_ob; - struct Object *keyed_ob; struct Object *lattice; struct Object *parent; /* particles from global space -> parent space */ struct ListBase effectors, reactevents; /* runtime */ + + struct ListBase keyed_targets; float imat[4][4]; /* used for duplicators */ float cfra; int seed; int flag, totpart, totchild, totcached, totchildcache, rt; - short recalc, target_psys, keyed_psys, totkeyed, softflag, bakespace; + short recalc, target_psys, totkeyed, softflag, bakespace, rt2; char bb_uvname[3][32]; /* billboard uv name */ @@ -255,10 +268,10 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in #define PART_ROT_DYN (1<<14) /* dynamic rotation */ #define PART_SIZEMASS (1<<16) -#define PART_ABS_LENGTH (1<<15) +//#define PART_KEYED_TIMING (1<<15) -#define PART_ABS_TIME (1<<17) -#define PART_GLOB_TIME (1<<18) +//#define PART_ABS_TIME (1<<17) +//#define PART_GLOB_TIME (1<<18) #define PART_BOIDS_2D (1<<19) @@ -396,14 +409,15 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in #define PSYS_RECALC_RESET 2 /* reset everything including pointcache */ #define PSYS_RECALC_TYPE 4 /* handle system type change */ #define PSYS_RECALC_CHILD 16 /* only child settings changed */ +#define PSYS_RECALC_PHYS 32 /* physics type changed */ /* psys->flag */ #define PSYS_CURRENT 1 //#define PSYS_BAKING 2 //#define PSYS_BAKE_UI 4 -#define PSYS_KEYED_TIME 8 +#define PSYS_KEYED_TIMING 8 #define PSYS_ENABLED 16 /* deprecated */ -#define PSYS_FIRST_KEYED 32 +//#define PSYS_FIRST_KEYED 32 #define PSYS_DRAWING 64 //#define PSYS_SOFT_BAKE 128 #define PSYS_DELETE 256 /* remove particlesystem as soon as possible */ @@ -458,6 +472,10 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in #define BOID_GOAL 6 #define BOID_LEVEL 7 +/* psys->keyed_targets->flag */ +#define KEYED_TARGET_CURRENT 1 +#define KEYED_TARGET_VALID 2 + //#define PSYS_INTER_CUBIC 0 //#define PSYS_INTER_LINEAR 1 diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 3631d83310a..ed1a8052acd 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -221,6 +221,7 @@ extern StructRNA RNA_Key; extern StructRNA RNA_KeyboardSensor; extern StructRNA RNA_KeyingSet; extern StructRNA RNA_KeyingSetPath; +extern StructRNA RNA_KeyedParticleTarget; extern StructRNA RNA_KinematicConstraint; extern StructRNA RNA_Lamp; extern StructRNA RNA_LampSkySettings; diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 98ed12afd5a..39411752792 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -140,6 +140,35 @@ static void rna_Particle_reset(bContext *C, PointerRNA *ptr) } } +static void rna_Particle_keyed_reset(bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + + if(ptr->type==&RNA_KeyedParticleTarget) { + Object *ob = (Object*)ptr->id.data; + ParticleSystem *psys = psys_get_current(ob); + + psys->recalc = PSYS_RECALC_RESET; + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + DAG_scene_sort(scene); + } +} + +static void rna_Particle_keyed_redo(bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + + if(ptr->type==&RNA_KeyedParticleTarget) { + Object *ob = (Object*)ptr->id.data; + ParticleSystem *psys = psys_get_current(ob); + + psys->recalc = PSYS_RECALC_REDO; + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + } +} + static void rna_Particle_change_type(bContext *C, PointerRNA *ptr) { Scene *scene = CTX_data_scene(C); @@ -161,6 +190,13 @@ static void rna_Particle_change_type(bContext *C, PointerRNA *ptr) } } +static void rna_Particle_change_physics(bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + ParticleSettings *part = ptr->id.data; + psys_flush_particle_settings(scene, part, PSYS_RECALC_RESET|PSYS_RECALC_PHYS); +} + static void rna_Particle_redo_child(bContext *C, PointerRNA *ptr) { Scene *scene = CTX_data_scene(C); @@ -299,6 +335,97 @@ static void rna_ParticleSystem_name_get(PointerRNA *ptr, char *str) strcpy(str, ""); } +static PointerRNA rna_ParticleSystem_active_keyed_target_get(PointerRNA *ptr) +{ + ParticleSystem *psys= (ParticleSystem*)ptr->data; + KeyedParticleTarget *kpt = psys->keyed_targets.first; + + for(; kpt; kpt=kpt->next) { + if(kpt->flag & KEYED_TARGET_CURRENT) + return rna_pointer_inherit_refine(ptr, &RNA_KeyedParticleTarget, kpt); + } + return rna_pointer_inherit_refine(ptr, &RNA_KeyedParticleTarget, NULL); +} +static void rna_ParticleSystem_active_keyed_target_index_range(PointerRNA *ptr, int *min, int *max) +{ + ParticleSystem *psys= (ParticleSystem*)ptr->data; + *min= 0; + *max= BLI_countlist(&psys->keyed_targets)-1; + *max= MAX2(0, *max); +} + +static int rna_ParticleSystem_active_keyed_target_index_get(PointerRNA *ptr) +{ + ParticleSystem *psys= (ParticleSystem*)ptr->data; + KeyedParticleTarget *kpt = psys->keyed_targets.first; + int i=0; + + for(; kpt; kpt=kpt->next, i++) + if(kpt->flag & KEYED_TARGET_CURRENT) + return i; + + return 0; +} + +static void rna_ParticleSystem_active_keyed_target_index_set(struct PointerRNA *ptr, int value) +{ + ParticleSystem *psys= (ParticleSystem*)ptr->data; + KeyedParticleTarget *kpt = psys->keyed_targets.first; + int i=0; + + for(; kpt; kpt=kpt->next, i++) { + if(i==value) + kpt->flag |= KEYED_TARGET_CURRENT; + else + kpt->flag &= ~KEYED_TARGET_CURRENT; + } +} +static int rna_KeyedParticleTarget_name_length(PointerRNA *ptr) +{ + KeyedParticleTarget *kpt= ptr->data; + + if(kpt->flag & KEYED_TARGET_VALID) { + if(kpt->ob) + return strlen(kpt->ob->id.name+2) + 4; + else + return 20; + } + else + return 15; + + return 0; +} + +static void rna_KeyedParticleTarget_name_get(PointerRNA *ptr, char *str) +{ + KeyedParticleTarget *kpt= ptr->data; + + if(kpt->flag & KEYED_TARGET_VALID) { + if(kpt->ob) + sprintf(str, "%s: %i", kpt->ob->id.name+2, kpt->psys); + else + sprintf(str, "Particle System: %i", kpt->psys); + + } + else + strcpy(str, "Invalid target!"); +} + +static EnumPropertyItem from_items[] = { + {PART_FROM_VERT, "VERT", 0, "Vertexes", ""}, + {PART_FROM_FACE, "FACE", 0, "Faces", ""}, + {PART_FROM_VOLUME, "VOLUME", 0, "Volume", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static EnumPropertyItem reactor_from_items[] = { + {PART_FROM_VERT, "VERT", 0, "Vertexes", ""}, + {PART_FROM_FACE, "FACE", 0, "Faces", ""}, + {PART_FROM_VOLUME, "VOLUME", 0, "Volume", ""}, + {PART_FROM_PARTICLE, "PARTICLE", 0, "Particle", ""}, + {0, NULL, 0, NULL, NULL} +}; + static EnumPropertyItem *rna_Particle_from_itemf(bContext *C, PointerRNA *ptr, int *free) { ParticleSettings *part = ptr->id.data; @@ -660,16 +787,19 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* flag */ prop= RNA_def_property(srna, "react_start_end", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_STA_END); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Start/End", "Give birth to unreacted particles eventually."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "react_multiple", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_MULTIPLE); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Multi React", "React multiple times."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "loop", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_LOOP); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Loop", "Loop particle lives."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -690,54 +820,46 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "trand", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_TRAND); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Random", "Emit in random order of elements"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "even_distribution", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_EDISTR); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Even Distribution", "Use even distribution from faces based on face areas or edge lengths."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_STICKY); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Sticky", "Particles stick to collided objects if they die in the collision."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "die_on_collision", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_DIE_ON_COL); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Die on hit", "Particles die when they collide with a deflector object."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "size_deflect", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZE_DEFL); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Size Deflect", "Use particle's size in deflection."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "rotation_dynamic", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ROT_DYN); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Dynamic", "Sets rotation to dynamic/constant"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "sizemass", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZEMASS); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Mass from Size", "Multiply mass with particle size."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - prop= RNA_def_property(srna, "abs_length", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ABS_LENGTH); - RNA_def_property_ui_text(prop, "Abs Length", "Use maximum length for children"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - - //prop= RNA_def_property(srna, "absolute_time", PROP_BOOLEAN, PROP_NONE); - //RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ABS_TIME); - //RNA_def_property_ui_text(prop, "Absolute Time", "Set all ipos that work on particles to be calculated in absolute/relative time."); - //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - //prop= RNA_def_property(srna, "global_time", PROP_BOOLEAN, PROP_NONE); - //RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_GLOB_TIME); - //RNA_def_property_ui_text(prop, "Global Time", "Set all ipos that work on particles to be calculated in global/object time."); - //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - prop= RNA_def_property(srna, "boids_2d", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_BOIDS_2D); RNA_def_property_ui_text(prop, "Boids 2D", "Constrain boids to a surface"); @@ -796,18 +918,21 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, type_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Type", ""); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_change_type"); prop= RNA_def_property(srna, "emit_from", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "from"); RNA_def_property_enum_items(prop, part_reactor_from_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Particle_from_itemf"); RNA_def_property_ui_text(prop, "Emit From", "Where to emit particles from"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "distr"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_items(prop, dist_items); RNA_def_property_ui_text(prop, "Distribution", "How to distribute particles on selected element"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -815,24 +940,28 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* physics modes */ prop= RNA_def_property(srna, "physics_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "phystype"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_items(prop, phys_type_items); RNA_def_property_ui_text(prop, "Physics Type", "Particle physics type"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_change_physics"); prop= RNA_def_property(srna, "rotation_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "rotmode"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_items(prop, rot_mode_items); RNA_def_property_ui_text(prop, "Rotation", "Particles initial rotation"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "angular_velocity_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "avemode"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_items(prop, ave_mode_items); RNA_def_property_ui_text(prop, "Angular Velocity Mode", "Particle angular velocity mode."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "react_event", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "reactevent"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_enum_items(prop, react_event_items); RNA_def_property_ui_text(prop, "React On", "The event of target particles to react on."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -843,11 +972,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Velocity", "Show particle velocity"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - //prop= RNA_def_property(srna, "draw_path_length", PROP_BOOLEAN, PROP_NONE); - //RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_PATH_LEN); - //RNA_def_property_ui_text(prop, "Path length", "Draw path length"); - //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - prop= RNA_def_property(srna, "show_size", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_SIZE); RNA_def_property_ui_text(prop, "Size", "Show particle size"); @@ -936,7 +1060,7 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "childtype"); RNA_def_property_enum_items(prop, child_type_items); RNA_def_property_ui_text(prop, "Children From", "Create child particles"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "draw_step", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 0, 7); @@ -1091,12 +1215,15 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sta");//optional if prop names are the same RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_float_funcs(prop, NULL, "rna_PartSettings_start_set", NULL); RNA_def_property_ui_text(prop, "Start", "Frame # to start emitting particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "end", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); + + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_float_funcs(prop, NULL, "rna_PartSettings_end_set", NULL); RNA_def_property_ui_text(prop, "End", "Frame # to stop emitting particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1119,38 +1246,35 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "jitter_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_float_sdna(prop, NULL, "jitfac"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "Amount", "Amount of jitter applied to the sampling."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - prop= RNA_def_property(srna, "keyed_time", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Time", "Keyed key time relative to remaining particle life."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - prop= RNA_def_property(srna, "effect_hair", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "eff_hair"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Stiffnes", "Hair stiffness for effectors"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - //float rt; TODO:find where rt is used - can't find it in UI - prop= RNA_def_property(srna, "amount", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "totpart"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_range(prop, 0, 100000); RNA_def_property_ui_text(prop, "Amount", "Total number of particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "userjit", PROP_INT, PROP_UNSIGNED);//TODO: can we get a better name for userjit? RNA_def_property_int_sdna(prop, NULL, "userjit"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_range(prop, 0, 1000); RNA_def_property_ui_text(prop, "P/F", "Emission locations / face (0 = automatic)."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "grid_resolution", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "grid_res"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_range(prop, 1, 100); RNA_def_property_ui_text(prop, "Resolution", "The resolution of the particle grid."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1273,19 +1397,7 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Damp", "Specify the amount of damping"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - /* length */ - //TODO: is this readonly? - prop= RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "length"); -// RNA_def_property_range(prop, 0.0f, upperLimitf);//TODO: limits - RNA_def_property_ui_text(prop, "Length", ""); - - prop= RNA_def_property(srna, "absolute_length", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "abslength"); - RNA_def_property_range(prop, 0.0f, 10000.0f); - RNA_def_property_ui_text(prop, "Max Length", "Absolute maximum path length for children, in blender units."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - + /* random length */ prop= RNA_def_property(srna, "random_length", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "randlength"); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -1334,13 +1446,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Child Roundness", "Roundness of children around parent."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); - //TODO: is this readonly? - prop= RNA_def_property(srna, "child_spread", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "childspread"); -// RNA_def_property_range(prop, 0.0f, upperLimitf); TODO: limits - RNA_def_property_ui_text(prop, "Child Spread", ""); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); - /* clumping */ prop= RNA_def_property(srna, "clump_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "clumpfac"); @@ -1414,6 +1519,18 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Shape", "Shape of end point rough"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); + prop= RNA_def_property(srna, "child_length", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "clength"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Length", "Length of child paths"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); + + prop= RNA_def_property(srna, "child_length_thres", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "clength_thres"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Threshold", "Amount of particles left untouched by child path length."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); + /* branching */ prop= RNA_def_property(srna, "branch_threshold", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "branch_thres"); @@ -1451,7 +1568,14 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_range(prop, 1.0f, 100.0f); RNA_def_property_ui_text(prop, "Trail Count", "Number of trail particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - + + /* keyed particles */ + prop= RNA_def_property(srna, "keyed_loops", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "keyed_loops"); + RNA_def_property_range(prop, 1.0f, 100.0f); + RNA_def_property_ui_text(prop, "Loop count", "Number of times the keys are looped."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); + /* boids */ prop= RNA_def_property(srna, "max_velocity", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "max_vel"); @@ -1494,14 +1618,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Ground Z", "Default Z value"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - /*TODO: not sure how to deal with this - prop= RNA_def_property(srna, "boid_factor", PROP_FLOAT, PROP_VECTOR); - RNA_def_property_float_sdna(prop, NULL, "boidfac"); - RNA_def_property_ui_text(prop, "Boid Factor", ""); - - //char boidrule[8]; - */ - prop= RNA_def_property(srna, "dupli_group", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "dup_group"); RNA_def_property_struct_type(prop, "Group"); @@ -1537,6 +1653,52 @@ static void rna_def_particle_settings(BlenderRNA *brna) // struct PartDeflect *pd2; } +static void rna_def_keyed_particle_target(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "KeyedParticleTarget", NULL); + RNA_def_struct_ui_text(srna, "Keyed Particle Target", "Target particle system for keyed particles."); + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_string_funcs(prop, "rna_KeyedParticleTarget_name_get", "rna_KeyedParticleTarget_name_length", NULL); + RNA_def_property_ui_text(prop, "Name", "Keyed particle target name."); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "ob"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Target Object", "The object that has the target particle system (empty if same object)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_reset"); + + prop= RNA_def_property(srna, "system", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "psys"); + RNA_def_property_range(prop, 1, INT_MAX); + RNA_def_property_ui_text(prop, "Target Particle System", "The index of particle system on the target object."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_reset"); + + prop= RNA_def_property(srna, "time", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "time"); + RNA_def_property_range(prop, 0.0, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 + RNA_def_property_ui_text(prop, "Time", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_redo"); + + prop= RNA_def_property(srna, "duration", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "duration"); + RNA_def_property_range(prop, 0.0, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 + RNA_def_property_ui_text(prop, "Duration", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_redo"); + + prop= RNA_def_property(srna, "valid", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYED_TARGET_VALID); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_ui_text(prop, "Valid", "Keyed particles target is valid."); + + + +} static void rna_def_particle_system(BlenderRNA *brna) { StructRNA *srna; @@ -1604,34 +1766,33 @@ static void rna_def_particle_system(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); /* boids */ - prop= RNA_def_property(srna, "boids_surface_object", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "keyed_ob"); - RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Boids Surface Object", "For boids physics systems, constrain boids to this object's surface."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + //prop= RNA_def_property(srna, "boids_surface_object", PROP_POINTER, PROP_NONE); + //RNA_def_property_pointer_sdna(prop, NULL, "keyed_ob"); + //RNA_def_property_flag(prop, PROP_EDITABLE); + //RNA_def_property_ui_text(prop, "Boids Surface Object", "For boids physics systems, constrain boids to this object's surface."); + //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); /* keyed */ - prop= RNA_def_property(srna, "keyed_object", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "keyed_ob"); - RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Keyed Object", "For keyed physics systems, the object that has the target particle system."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "keyed_timing", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_KEYED_TIMING); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_ui_text(prop, "Keyed timing", "Use key times"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - prop= RNA_def_property(srna, "keyed_particle_system", PROP_INT, PROP_UNSIGNED); - RNA_def_property_int_sdna(prop, NULL, "keyed_psys"); - RNA_def_property_range(prop, 1, INT_MAX); - RNA_def_property_ui_text(prop, "Keyed Particle System", "For keyed physics systems, index of particle system on the keyed object."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "keyed_targets", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "keyed_targets", NULL); + RNA_def_property_struct_type(prop, "KeyedParticleTarget"); + RNA_def_property_ui_text(prop, "Keyed Targets", "Target particle systems for keyed particles"); - prop= RNA_def_property(srna, "keyed_first", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_FIRST_KEYED); - RNA_def_property_ui_text(prop, "Keyed First", "Set the system to be the starting point of keyed particles"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "active_keyed_target", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "KeyedParticleTarget"); + RNA_def_property_pointer_funcs(prop, "rna_ParticleSystem_active_keyed_target_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Active Particle System", "Active particle system being displayed"); + + prop= RNA_def_property(srna, "active_keyed_target_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_ParticleSystem_active_keyed_target_index_get", "rna_ParticleSystem_active_keyed_target_index_set", "rna_ParticleSystem_active_keyed_target_index_range"); + RNA_def_property_ui_text(prop, "Active Particle System Index", "Index of active particle system slot."); - prop= RNA_def_property(srna, "keyed_timed", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_KEYED_TIME); - RNA_def_property_ui_text(prop, "Keyed Timed", "Use intermediate key times for keyed particles (setting for starting point only)."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); /* billboard */ prop= RNA_def_property(srna, "billboard_normal_uv", PROP_STRING, PROP_NONE); @@ -1782,7 +1943,6 @@ static void rna_def_particle_system(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Parent", "Use this object's coordinate system instead of global coordinate system."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - } void RNA_def_particle(BlenderRNA *brna) @@ -1791,6 +1951,7 @@ void RNA_def_particle(BlenderRNA *brna) rna_def_particle_key(brna); rna_def_child_particle(brna); rna_def_particle(brna); + rna_def_keyed_particle_target(brna); rna_def_particle_system(brna); rna_def_particle_settings(brna); } diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 74686511b21..1d6d98bebdf 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1513,12 +1513,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem return 1; /* 2. start initialising things */ - if(part->phystype==PART_PHYS_KEYED){ - if(psys->flag & PSYS_FIRST_KEYED) - psys_count_keyed_targets(ob,psys); - else - return 1; - } + if(part->phystype==PART_PHYS_KEYED) + psys_count_keyed_targets(ob,psys); /* last possibility to bail out! */ psmd= psys_get_modifier(ob,psys); @@ -1606,10 +1602,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem calc_ipo(part->ipo, cfra); execute_ipo((ID *)part, part->ipo); } -#endif // XXX old animation system if(part->flag & PART_GLOB_TIME) - cfra = bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0); +#endif // XXX old animation system + cfra = bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0); /* 2.4 setup reactors */ if(part->type == PART_REACTOR){ @@ -1707,8 +1703,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem pa_time=(cfra-pa->time)/pa->lifetime; pa_birthtime = pa->time; pa_dietime = pa->dietime; - if((part->flag&PART_ABS_TIME) == 0){ #if 0 // XXX old animation system + if((part->flag&PART_ABS_TIME) == 0){ if(ma->ipo) { /* correction for lifetime */ calc_ipo(ma->ipo, 100.0f * pa_time); @@ -1719,8 +1715,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem calc_ipo(part->ipo, 100.0f*pa_time); execute_ipo((ID *)part, part->ipo); } -#endif // XXX old animation system } +#endif // XXX old animation system hasize = ma->hasize; @@ -1767,8 +1763,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem pa_time = psys_get_child_time(psys, cpa, cfra, &pa_birthtime, &pa_dietime); - if((part->flag & PART_ABS_TIME) == 0) { #if 0 // XXX old animation system + if((part->flag & PART_ABS_TIME) == 0) { if(ma->ipo){ /* correction for lifetime */ calc_ipo(ma->ipo, 100.0f * pa_time); @@ -1779,8 +1775,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem calc_ipo(part->ipo, 100.0f * pa_time); execute_ipo((ID *)part, part->ipo); } -#endif // XXX old animation system } +#endif // XXX old animation system pa_size = psys_get_child_size(psys, cpa, cfra, &pa_time); From 26ef6da24b3324fb6f8ab6cfe12f101f0d7dedb4 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Jul 2009 00:40:20 +0000 Subject: [PATCH 180/512] 2.5 * Objects now support up to 32767 material slots. It's easy to increase this further, but I prefer not to increase the memory usage of mesh faces, it seems unlikely that someone would create 32767 distinct materials? * Forward compatibility: the only thing you can potentially lose reading a 2.5 file in 2.4 is object linking (instead of default data), though usually that will go fine too. Reading files with > 32 material slots in 2.4 can start giving issues. * The ob->colbits variable is deprecated by the array ob->matbits but I didn't remove the ob->colbits updates in very few places it is set. * I hope I changed all the relevant things, various places just hardcoded the number 16 instead of using the MAXMAT define. * Join Objects operator back. This is using the version from the animsys2 branch coded by Joshua, which means it now supports joining of shape keys. * Fix for crash reading file saved during render. --- release/ui/buttons_material.py | 4 +- source/blender/blenkernel/intern/exotic.c | 19 +- source/blender/blenkernel/intern/material.c | 52 +- source/blender/blenkernel/intern/object.c | 7 +- source/blender/blenkernel/intern/texture.c | 2 +- source/blender/blenlib/BLI_editVert.h | 3 +- source/blender/blenloader/intern/readfile.c | 10 + source/blender/blenloader/intern/writefile.c | 1 + .../blender/editors/armature/editarmature.c | 147 +++-- source/blender/editors/curve/editcurve.c | 87 ++- source/blender/editors/include/ED_armature.h | 2 + source/blender/editors/include/ED_curve.h | 3 + source/blender/editors/include/ED_mesh.h | 3 + source/blender/editors/include/ED_transform.h | 1 + source/blender/editors/mesh/editmesh.c | 14 +- source/blender/editors/mesh/meshtools.c | 539 +++++++++++------- source/blender/editors/object/object_edit.c | 48 +- source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 2 + .../blender/editors/space_image/image_ops.c | 2 - .../blender/editors/space_outliner/outliner.c | 10 +- .../blender/editors/space_view3d/drawobject.c | 38 +- source/blender/gpu/GPU_draw.h | 4 +- source/blender/gpu/intern/gpu_draw.c | 52 +- source/blender/makesdna/DNA_material_types.h | 8 +- source/blender/makesdna/DNA_meshdata_types.h | 7 +- source/blender/makesdna/DNA_object_types.h | 14 +- source/blender/makesrna/intern/rna_curve.c | 1 - source/blender/makesrna/intern/rna_mesh.c | 1 - source/blender/makesrna/intern/rna_object.c | 12 +- .../render/intern/source/convertblender.c | 44 +- 31 files changed, 691 insertions(+), 447 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 9298b2d2248..e2404979773 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -47,11 +47,11 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): if ob and slot: split.template_ID(slot, "material", new="MATERIAL_OT_new") - #split.itemR(ob, "active_material_index", text="Active") + row = split.row() + row.itemR(slot, "link", expand=True) elif mat: split.template_ID(space, "pin_id") split.itemS() - class MATERIAL_PT_material(MaterialButtonsPanel): __idname__= "MATERIAL_PT_material" diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 4e7e76dfae3..c7a8b150d3a 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -1415,11 +1415,6 @@ static void displist_to_mesh(Scene *scene, DispList *dlfirst) return; } - if(totcol>16) { - //XXX error("Found more than 16 different colors"); - totcol= 16; - } - vec[0]= (min[0]+max[0])/2; vec[1]= (min[1]+max[1])/2; vec[2]= (min[2]+max[2])/2; @@ -1433,6 +1428,7 @@ static void displist_to_mesh(Scene *scene, DispList *dlfirst) /* colors */ if(totcol) { ob->mat= MEM_callocN(sizeof(void *)*totcol, "ob->mat"); + ob->matbits= MEM_callocN(sizeof(char)*totcol, "ob->matbits"); me->mat= MEM_callocN(sizeof(void *)*totcol, "me->mat"); me->totcol= totcol; ob->totcol= (unsigned char) me->totcol; @@ -1482,7 +1478,7 @@ static void displist_to_mesh(Scene *scene, DispList *dlfirst) dl= dlfirst; while(dl) { - colnr= (dl->col>15 ? 15: dl->col); + colnr= dl->col; if(colnr) colnr--; if(dl->type==DL_SURF) { @@ -2804,8 +2800,11 @@ static void dxf_add_mat (Object *ob, Mesh *me, float color[3], char *layer) if (!me) return; - if(ob) ob->mat= MEM_callocN(sizeof(void *)*1, "ob->mat"); - if(ob) ob->actcol= 1; + if(ob) { + ob->mat= MEM_callocN(sizeof(void *)*1, "ob->mat"); + ob->matbits= MEM_callocN(sizeof(char)*1, "ob->matbits"); + ob->actcol= 1; + } me->totcol= 1; me->mat= MEM_callocN(sizeof(void *)*1, "me->mat"); @@ -4053,7 +4052,6 @@ static void dxf_read(Scene *scene, char *filename) ob->type= OB_MESH; ob->dt= OB_SHADED; - if(U.flag & USER_MAT_ON_OB) ob->colbits= -1; ob->trackflag= OB_POSY; ob->upflag= OB_POSZ; @@ -4072,9 +4070,10 @@ static void dxf_read(Scene *scene, char *filename) VECCOPY(ob->rot, obrot); ob->mat= MEM_callocN(sizeof(void *)*1, "ob->mat"); + ob->matbits= MEM_callocN(sizeof(char)*1, "ob->matbits"); ob->totcol= (unsigned char) ((Mesh*)ob->data)->totcol; ob->actcol= 1; - + /* note: materials are either linked to mesh or object, if both then you have to increase user counts. below line is not needed. I leave it commented out here as warning (ton) */ diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 57b88bb0b3f..d1fdac65dbb 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -43,6 +43,7 @@ #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_texture_types.h" +#include "DNA_userdef_types.h" #include "BLI_blenlib.h" #include "BLI_arithb.h" @@ -445,7 +446,7 @@ Material *give_current_material(Object *ob, int act) if(act>ob->totcol) act= ob->totcol; else if(act<=0) act= 1; - if( BTST(ob->colbits, act-1) ) { /* in object */ + if(ob->matbits[act-1]) { /* in object */ ma= ob->mat[act-1]; } else { /* in data */ @@ -473,7 +474,7 @@ ID *material_from(Object *ob, int act) if(ob->totcol==0) return ob->data; if(act==0) act= 1; - if( BTST(ob->colbits, act-1) ) return (ID *)ob; + if(ob->matbits[act-1]) return (ID *)ob; else return ob->data; } @@ -498,6 +499,7 @@ void test_object_materials(ID *id) Curve *cu; MetaBall *mb; Material **newmatar; + char *newmatbits; int totcol=0; if(id==0) return; @@ -524,16 +526,22 @@ void test_object_materials(ID *id) if(totcol==0) { if(ob->totcol) { MEM_freeN(ob->mat); - ob->mat= 0; + MEM_freeN(ob->matbits); + ob->mat= NULL; + ob->matbits= NULL; } } else if(ob->totcoltotcol) { memcpy(newmatar, ob->mat, sizeof(void *)*ob->totcol); + memcpy(newmatbits, ob->matbits, sizeof(char)*ob->totcol); MEM_freeN(ob->mat); + MEM_freeN(ob->matbits); } ob->mat= newmatar; + ob->matbits= newmatbits; } ob->totcol= totcol; if(ob->totcol && ob->actcol==0) ob->actcol= 1; @@ -547,6 +555,7 @@ void test_object_materials(ID *id) void assign_material(Object *ob, Material *ma, int act) { Material *mao, **matar, ***matarar; + char *matbits; short *totcolp; if(act>MAXMAT) return; @@ -559,29 +568,41 @@ void assign_material(Object *ob, Material *ma, int act) if(totcolp==0 || matarar==0) return; - if( act > *totcolp) { + if(act > *totcolp) { matar= MEM_callocN(sizeof(void *)*act, "matarray1"); - if( *totcolp) { - memcpy(matar, *matarar, sizeof(void *)*( *totcolp )); + + if(*totcolp) { + memcpy(matar, *matarar, sizeof(void *)*(*totcolp)); MEM_freeN(*matarar); } + *matarar= matar; *totcolp= act; } if(act > ob->totcol) { matar= MEM_callocN(sizeof(void *)*act, "matarray2"); + matbits= MEM_callocN(sizeof(char)*act, "matbits1"); if( ob->totcol) { memcpy(matar, ob->mat, sizeof(void *)*( ob->totcol )); + memcpy(matbits, ob->matbits, sizeof(char)*(*totcolp)); MEM_freeN(ob->mat); + MEM_freeN(ob->matbits); } ob->mat= matar; + ob->matbits= matbits; ob->totcol= act; + + /* copy object/mesh linking, or assign based on userpref */ + if(ob->actcol) + ob->matbits[act-1]= ob->matbits[ob->actcol-1]; + else + ob->matbits[act-1]= (U.flag & USER_MAT_ON_OB)? 1: 0; } /* do it */ - if( BTST(ob->colbits, act-1) ) { /* in object */ + if(ob->matbits[act-1]) { /* in object */ mao= ob->mat[act-1]; if(mao) mao->id.us--; ob->mat[act-1]= ma; @@ -591,6 +612,7 @@ void assign_material(Object *ob, Material *ma, int act) if(mao) mao->id.us--; (*matarar)[act-1]= ma; } + id_us_plus((ID *)ma); test_object_materials(ob->data); } @@ -630,12 +652,6 @@ void object_add_material_slot(Object *ob) ma->id.us= 0; /* eeh... */ - if(ob->actcol) { - if( BTST(ob->colbits, ob->actcol-1) ) { - ob->colbits= BSET(ob->colbits, ob->totcol); - } - } - assign_material(ob, ma, ob->totcol+1); ob->actcol= ob->totcol; } @@ -880,9 +896,8 @@ void object_remove_material_slot(Object *ob) if(mao) mao->id.us--; } - for(a=ob->actcol; atotcol; a++) { + for(a=ob->actcol; atotcol; a++) (*matarar)[a-1]= (*matarar)[a]; - } (*totcolp)--; if(*totcolp==0) { @@ -900,13 +915,18 @@ void object_remove_material_slot(Object *ob) mao= obt->mat[actcol-1]; if(mao) mao->id.us--; - for(a=actcol; atotcol; a++) obt->mat[a-1]= obt->mat[a]; + for(a=actcol; atotcol; a++) { + obt->mat[a-1]= obt->mat[a]; + obt->matbits[a-1]= obt->matbits[a]; + } obt->totcol--; if(obt->actcol > obt->totcol) obt->actcol= obt->totcol; if(obt->totcol==0) { MEM_freeN(obt->mat); + MEM_freeN(obt->matbits); obt->mat= 0; + obt->matbits= NULL; } } obt= obt->id.next; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 7d6a83d7900..02c0d46a73f 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -243,7 +243,9 @@ void free_object(Object *ob) if(ob->mat[a]) ob->mat[a]->id.us--; } if(ob->mat) MEM_freeN(ob->mat); + if(ob->matbits) MEM_freeN(ob->matbits); ob->mat= 0; + ob->matbits= 0; if(ob->bb) MEM_freeN(ob->bb); ob->bb= 0; if(ob->path) free_path(ob->path); @@ -942,7 +944,6 @@ Object *add_only_object(int type, char *name) Mat4One(ob->parentinv); Mat4One(ob->obmat); ob->dt= OB_SHADED; - if(U.flag & USER_MAT_ON_OB) ob->colbits= -1; ob->empty_drawtype= OB_ARROWS; ob->empty_drawsize= 1.0; @@ -1170,6 +1171,7 @@ Object *copy_object(Object *ob) if(ob->totcol) { obn->mat= MEM_dupallocN(ob->mat); + obn->matbits= MEM_dupallocN(ob->matbits); } if(ob->bb) obn->bb= MEM_dupallocN(ob->bb); @@ -1397,7 +1399,9 @@ void object_make_proxy(Object *ob, Object *target, Object *gob) /* copy material and index information */ ob->actcol= ob->totcol= 0; if(ob->mat) MEM_freeN(ob->mat); + if(ob->matbits) MEM_freeN(ob->matbits); ob->mat = NULL; + ob->matbits= NULL; if ((target->totcol) && (target->mat) && ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) { //XXX OB_SUPPORT_MATERIAL int i; ob->colbits = target->colbits; @@ -1406,6 +1410,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob) ob->totcol= target->totcol; ob->mat = MEM_dupallocN(target->mat); + ob->matbits = MEM_dupallocN(target->matbits); for(i=0; itotcol; i++) { /* dont need to run test_object_materials since we know this object is new and not used elsewhere */ id_us_plus((ID *)ob->mat[i]); diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 66f7fe8a44b..bcdea06936f 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -784,7 +784,7 @@ Tex *give_current_texture(Object *ob, int act) if(act>ob->totcol) act= ob->totcol; else if(act==0) act= 1; - if( BTST(ob->colbits, act-1) ) { /* in object */ + if(ob->matbits[act-1]) { /* in object */ ma= ob->mat[act-1]; } else { /* in data */ diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h index 758e3d136aa..56a20d8462a 100644 --- a/source/blender/blenlib/BLI_editVert.h +++ b/source/blender/blenlib/BLI_editVert.h @@ -125,10 +125,11 @@ typedef struct EditFace float fp; } tmp; float n[3], cent[3]; - unsigned char mat_nr, flag; + unsigned char flag; unsigned char f, f1, h; unsigned char fast; /* only 0 or 1, for editmesh_fastmalloc */ unsigned char fgonf; /* flag for fgon options */ + short mat_nr; void *data; /* custom face data */ } EditFace; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index c2b19a804ee..21e173bd87d 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3732,6 +3732,7 @@ static void direct_link_object(FileData *fd, Object *ob) ob->mat= newdataadr(fd, ob->mat); test_pointer_array(fd, (void **)&ob->mat); + ob->matbits= newdataadr(fd, ob->matbits); /* do it here, below old data gets converted */ direct_link_modifiers(fd, &ob->modifiers); @@ -4221,6 +4222,7 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm) wm->paintcursors.first= wm->paintcursors.last= NULL; wm->queue.first= wm->queue.last= NULL; wm->reports.first= wm->reports.last= NULL; + wm->jobs.first= wm->jobs.last= NULL; wm->windrawable= NULL; wm->initialized= 0; @@ -9242,6 +9244,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main) ob->data = olddata; } + + if(ob->totcol && ob->matbits == NULL) { + int a; + + ob->matbits= MEM_callocN(sizeof(char)*ob->totcol, "ob->matbits"); + for(a=0; atotcol; a++) + ob->matbits[a]= ob->colbits & (1<mat.first; ma; ma = ma->id.next) { diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 65a4a355717..ebec409ddf4 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1131,6 +1131,7 @@ static void write_objects(WriteData *wd, ListBase *idbase, int write_undo) /* direct data */ writedata(wd, DATA, sizeof(void *)*ob->totcol, ob->mat); + writedata(wd, DATA, sizeof(char)*ob->totcol, ob->matbits); /* write_effects(wd, &ob->effect); */ /* not used anymore */ write_properties(wd, &ob->prop); write_sensors(wd, &ob->sensors); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 4312838cba5..d00f4c770d1 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -669,24 +669,21 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann } } -int join_armature(Scene *scene, View3D *v3d) +int join_armature_exec(bContext *C, wmOperator *op) { - Object *ob= scene->basact->object; // XXX context - bArmature *arm= ob->data; - Base *base, *nextbase; + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + bArmature *arm= (ob)? ob->data: NULL; bPose *pose, *opose; bPoseChannel *pchan, *pchann; EditBone *curbone; float mat[4][4], oimat[4][4]; /* Ensure we're not in editmode and that the active object is an armature*/ - if (ob->type!=OB_ARMATURE) return 0; - if (arm->edbo) return 0; - - if (object_data_is_libdata(ob)) { - error_libdata(); - return 0; - } + if (!ob || ob->type!=OB_ARMATURE) + return OPERATOR_CANCELLED; + if (!arm || arm->edbo) + return OPERATOR_CANCELLED; /* Get editbones of active armature to add editbones to */ ED_armature_to_edit(ob); @@ -694,89 +691,89 @@ int join_armature(Scene *scene, View3D *v3d) /* get pose of active object and move it out of posemode */ pose= ob->pose; ob->flag &= ~OB_POSEMODE; - - for (base=FIRSTBASE; base; base=nextbase) { - nextbase = base->next; - if (TESTBASE(v3d, base)){ - if ((base->object->type==OB_ARMATURE) && (base->object!=ob)) { - bArmature *curarm= base->object->data; + + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + if ((base->object->type==OB_ARMATURE) && (base->object!=ob)) { + bArmature *curarm= base->object->data; + + /* Make a list of editbones in current armature */ + ED_armature_to_edit(base->object); + + /* Get Pose of current armature */ + opose= base->object->pose; + base->object->flag &= ~OB_POSEMODE; + BASACT->flag &= ~OB_POSEMODE; + + /* Find the difference matrix */ + Mat4Invert(oimat, ob->obmat); + Mat4MulMat4(mat, base->object->obmat, oimat); + + /* Copy bones and posechannels from the object to the edit armature */ + for (pchan=opose->chanbase.first; pchan; pchan=pchann) { + pchann= pchan->next; + curbone= editbone_name_exists(curarm->edbo, pchan->name); - /* Make a list of editbones in current armature */ - ED_armature_to_edit(base->object); + /* Get new name */ + unique_editbone_name(arm->edbo, curbone->name, NULL); - /* Get Pose of current armature */ - opose= base->object->pose; - base->object->flag &= ~OB_POSEMODE; - BASACT->flag &= ~OB_POSEMODE; - - /* Find the difference matrix */ - Mat4Invert(oimat, ob->obmat); - Mat4MulMat4(mat, base->object->obmat, oimat); - - /* Copy bones and posechannels from the object to the edit armature */ - for (pchan=opose->chanbase.first; pchan; pchan=pchann) { - pchann= pchan->next; - curbone= editbone_name_exists(curarm->edbo, pchan->name); + /* Transform the bone */ + { + float premat[4][4]; + float postmat[4][4]; + float difmat[4][4]; + float imat[4][4]; + float temp[3][3]; + float delta[3]; - /* Get new name */ - unique_editbone_name(arm->edbo, curbone->name, NULL); + /* Get the premat */ + VecSubf(delta, curbone->tail, curbone->head); + vec_roll_to_mat3(delta, curbone->roll, temp); - /* Transform the bone */ - { - float premat[4][4]; - float postmat[4][4]; - float difmat[4][4]; - float imat[4][4]; - float temp[3][3]; - float delta[3]; - - /* Get the premat */ - VecSubf(delta, curbone->tail, curbone->head); - vec_roll_to_mat3(delta, curbone->roll, temp); - - Mat4One(premat); /* Mat4MulMat34 only sets 3x3 part */ - Mat4MulMat34(premat, temp, mat); - - Mat4MulVecfl(mat, curbone->head); - Mat4MulVecfl(mat, curbone->tail); - - /* Get the postmat */ - VecSubf(delta, curbone->tail, curbone->head); - vec_roll_to_mat3(delta, curbone->roll, temp); - Mat4CpyMat3(postmat, temp); - - /* Find the roll */ - Mat4Invert(imat, premat); - Mat4MulMat4(difmat, postmat, imat); - - curbone->roll -= (float)atan2(difmat[2][0], difmat[2][2]); - } + Mat4One(premat); /* Mat4MulMat34 only sets 3x3 part */ + Mat4MulMat34(premat, temp, mat); - /* Fix Constraints and Other Links to this Bone and Armature */ - joined_armature_fix_links(ob, base->object, pchan, curbone); + Mat4MulVecfl(mat, curbone->head); + Mat4MulVecfl(mat, curbone->tail); - /* Rename pchan */ - BLI_strncpy(pchan->name, curbone->name, sizeof(pchan->name)); + /* Get the postmat */ + VecSubf(delta, curbone->tail, curbone->head); + vec_roll_to_mat3(delta, curbone->roll, temp); + Mat4CpyMat3(postmat, temp); - /* Jump Ship! */ - BLI_remlink(curarm->edbo, curbone); - BLI_addtail(arm->edbo, curbone); + /* Find the roll */ + Mat4Invert(imat, premat); + Mat4MulMat4(difmat, postmat, imat); - BLI_remlink(&opose->chanbase, pchan); - BLI_addtail(&pose->chanbase, pchan); + curbone->roll -= (float)atan2(difmat[2][0], difmat[2][2]); } - ED_base_object_free_and_unlink(scene, base); + /* Fix Constraints and Other Links to this Bone and Armature */ + joined_armature_fix_links(ob, base->object, pchan, curbone); + + /* Rename pchan */ + BLI_strncpy(pchan->name, curbone->name, sizeof(pchan->name)); + + /* Jump Ship! */ + BLI_remlink(curarm->edbo, curbone); + BLI_addtail(arm->edbo, curbone); + + BLI_remlink(&opose->chanbase, pchan); + BLI_addtail(&pose->chanbase, pchan); } + + ED_base_object_free_and_unlink(scene, base); } } + CTX_DATA_END; DAG_scene_sort(scene); // because we removed object(s) ED_armature_from_edit(scene, ob); ED_armature_edit_free(ob); + + WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); - return 1; + return OPERATOR_FINISHED; } /* Helper function for armature separating - link fixing */ diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index c437f35c484..51a9cf5c75a 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -4594,12 +4594,10 @@ void CURVE_OT_smooth_set(wmOperatorType *ot) /************** join operator, to be used externally? ****************/ -int join_curve(bContext *C, wmOperator *op, int type) +int join_curve_exec(bContext *C, wmOperator *op) { - View3D *v3d= CTX_wm_view3d(C); Scene *scene= CTX_data_scene(C); - Object *ob= CTX_data_edit_object(C); - Base *base, *nextb; + Object *ob= CTX_data_active_object(C); Curve *cu; Nurb *nu, *newnu; BezTriple *bezt; @@ -4608,64 +4606,51 @@ int join_curve(bContext *C, wmOperator *op, int type) float imat[4][4], cmat[4][4]; int a; - // XXX not integrated yet, to be called by object/ module? */ - - if(object_data_is_libdata(ob)) { - BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata"); - return OPERATOR_CANCELLED; - } - - if(ob->type!=type) - return 0; - tempbase.first= tempbase.last= 0; /* trasnform all selected curves inverse in obact */ Mat4Invert(imat, ob->obmat); - for(base= FIRSTBASE; base; base=nextb) { - nextb= base->next; - - if(TESTBASE(v3d, base)) { - if(base->object->type==type) { - if(base->object != ob) { - - cu= base->object->data; - - if(cu->nurb.first) { - /* watch it: switch order here really goes wrong */ - Mat4MulMat4(cmat, base->object->obmat, imat); + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + if(base->object->type==ob->type) { + if(base->object != ob) { + + cu= base->object->data; + + if(cu->nurb.first) { + /* watch it: switch order here really goes wrong */ + Mat4MulMat4(cmat, base->object->obmat, imat); + + nu= cu->nurb.first; + while(nu) { + newnu= duplicateNurb(nu); + BLI_addtail(&tempbase, newnu); - nu= cu->nurb.first; - while(nu) { - newnu= duplicateNurb(nu); - BLI_addtail(&tempbase, newnu); - - if( (bezt= newnu->bezt) ) { - a= newnu->pntsu; - while(a--) { - Mat4MulVecfl(cmat, bezt->vec[0]); - Mat4MulVecfl(cmat, bezt->vec[1]); - Mat4MulVecfl(cmat, bezt->vec[2]); - bezt++; - } + if( (bezt= newnu->bezt) ) { + a= newnu->pntsu; + while(a--) { + Mat4MulVecfl(cmat, bezt->vec[0]); + Mat4MulVecfl(cmat, bezt->vec[1]); + Mat4MulVecfl(cmat, bezt->vec[2]); + bezt++; } - if( (bp= newnu->bp) ) { - a= newnu->pntsu*nu->pntsv; - while(a--) { - Mat4MulVecfl(cmat, bp->vec); - bp++; - } - } - nu= nu->next; } + if( (bp= newnu->bp) ) { + a= newnu->pntsu*nu->pntsv; + while(a--) { + Mat4MulVecfl(cmat, bp->vec); + bp++; + } + } + nu= nu->next; } - - ED_base_object_free_and_unlink(scene, base); } + + ED_base_object_free_and_unlink(scene, base); } } } + CTX_DATA_END; cu= ob->data; addlisttolist(&cu->nurb, &tempbase); @@ -4674,8 +4659,8 @@ int join_curve(bContext *C, wmOperator *op, int type) ED_object_enter_editmode(C, EM_WAITCURSOR); ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR); - - // BIF_undo_push("Join"); + + WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 1df9182fc9b..a9823bd9ff1 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -34,6 +34,7 @@ struct Base; struct Bone; struct bArmature; struct bPoseChannel; +struct wmOperator; struct wmWindowManager; struct ListBase; struct View3D; @@ -100,6 +101,7 @@ void ED_armature_edit_remake(struct Object *obedit); int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer, short hits, short extend); void mouse_armature(struct bContext *C, short mval[2], int extend); +int join_armature_exec(struct bContext *C, struct wmOperator *op); struct Bone *get_indexed_bone (struct Object *ob, int index); float ED_rollBoneToVector(EditBone *bone, float new_up_axis[3]); EditBone *ED_armature_bone_get_mirrored(struct ListBase *edbo, EditBone *ebo); // XXX this is needed for populating the context iterators diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h index 2cebc6a572a..4149c6a9cca 100644 --- a/source/blender/editors/include/ED_curve.h +++ b/source/blender/editors/include/ED_curve.h @@ -35,6 +35,7 @@ struct Object; struct Scene; struct Text; struct View3D; +struct wmOperator; struct wmWindowManager; /* curve_ops.c */ @@ -55,6 +56,8 @@ struct Nurb *add_nurbs_primitive(struct bContext *C, int type, int newname); int isNurbsel (struct Nurb *nu);; +int join_curve_exec (struct bContext *C, struct wmOperator *op); + /* editfont.h */ void undo_push_font (struct bContext *C, char *name); void make_editText (struct Object *obedit); diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index c4fde48c631..0face00f82b 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -36,6 +36,7 @@ struct EditVert; struct EditEdge; struct EditFace; struct bContext; +struct wmOperator; struct wmWindowManager; struct EditSelection; struct ViewContext; @@ -76,6 +77,8 @@ struct EditVert *editmesh_get_x_mirror_vert(struct Object *ob, struct EditMesh int mesh_get_x_mirror_vert(struct Object *ob, int index); int *mesh_get_x_mirror_faces(struct Object *ob, struct EditMesh *em); +int join_mesh_exec(struct bContext *C, struct wmOperator *op); + /* mesh_ops.c */ void ED_operatortypes_mesh(void); void ED_keymap_mesh(struct wmWindowManager *wm); diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 768040597a4..5719aa63234 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -33,6 +33,7 @@ /* ******************* Registration Function ********************** */ struct wmWindowManager; +struct wmOperatorType; struct ListBase; struct wmEvent; struct bContext; diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c index cdd51a72f4f..6c66ae468fa 100644 --- a/source/blender/editors/mesh/editmesh.c +++ b/source/blender/editors/mesh/editmesh.c @@ -1132,7 +1132,7 @@ void load_editMesh(Scene *scene, Object *ob) else VECCOPY(mvert->co, eve->co); - mvert->mat_nr= 255; /* what was this for, halos? */ + mvert->mat_nr= 32767; /* what was this for, halos? */ /* vertex normal */ VECCOPY(nor, eve->no); @@ -1218,14 +1218,14 @@ void load_editMesh(Scene *scene, Object *ob) /* mat_nr in vertex */ if(me->totcol>1) { mvert= me->mvert+mface->v1; - if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr; + if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr; mvert= me->mvert+mface->v2; - if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr; + if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr; mvert= me->mvert+mface->v3; - if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr; + if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr; if(mface->v4) { mvert= me->mvert+mface->v4; - if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr; + if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr; } } @@ -1669,8 +1669,8 @@ typedef struct EditEdgeC typedef struct EditFaceC { int v1, v2, v3, v4; - unsigned char mat_nr, flag, f, h, fgonf; - short pad1; + unsigned char flag, f, h, fgonf, pad1; + short mat_nr; } EditFaceC; typedef struct EditSelectionC{ diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index df3e2a5685c..c10fdbcfd8f 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -38,16 +38,17 @@ #include "MEM_guardedalloc.h" #include "DNA_image_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meshdata_types.h" -#include "DNA_object_types.h" +#include "DNA_key_types.h" #include "DNA_material_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_mesh_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" #include "DNA_view3d_types.h" -#include "DNA_world_types.h" #include "DNA_windowmanager_types.h" +#include "DNA_world_types.h" #include "BLI_arithb.h" #include "BLI_blenlib.h" @@ -58,10 +59,12 @@ #include "BKE_blender.h" +#include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_customdata.h" #include "BKE_global.h" #include "BKE_image.h" +#include "BKE_key.h" #include "BKE_library.h" #include "BKE_main.h" #include "BKE_mesh.h" @@ -86,15 +89,13 @@ #include "ED_object.h" #include "ED_view3d.h" +#include "WM_api.h" +#include "WM_types.h" + /* own include */ #include "mesh_intern.h" - -/* from rendercode.c */ -#define VECMUL(dest, f) dest[0]*= f; dest[1]*= f; dest[2]*= f - /* XXX */ -static void BIF_undo_push() {} static void waitcursor() {} static void error() {} static int pupmenu() {return 0;} @@ -103,145 +104,189 @@ static int pupmenu() {return 0;} /* * ********************** no editmode!!! *********** */ +/*********************** JOIN ***************************/ + /* join selected meshes into the active mesh, context sensitive return 0 if no join is made (error) and 1 of the join is done */ -// XXX NOTE to whoever ports this: -// Check the version of this code in the animsys2 branch, which has been nicely commented, -// but more importantly has proper support for handling meshes with shapekeys (instead of lamely bailing out)! -// -- Aligorith, July 2009 -int join_mesh(Scene *scene, View3D *v3d, wmOperator *op) +int join_mesh_exec(bContext *C, wmOperator *op) { - Base *base, *nextb; - Object *ob; + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); Material **matar, *ma; Mesh *me; - MVert *mvert, *mvertmain; + MVert *mvert, *mv, *mvertmain; MEdge *medge = NULL, *medgemain; MFace *mface = NULL, *mfacemain; - float imat[4][4], cmat[4][4]; - int a, b, totcol, totedge=0, totvert=0, totface=0, ok=0, vertofs, map[MAXMAT]; - int i, j, index, haskey=0, hasmulti=0, edgeofs, faceofs; + Key *key, *nkey=NULL; + KeyBlock *kb, *okb, *kbn; + float imat[4][4], cmat[4][4], *fp1, *fp2, curpos; + int a, b, totcol, totmat=0, totedge=0, totvert=0, totface=0, ok=0; + int vertofs, *matmap; + int i, j, index, haskey=0, edgeofs, faceofs; bDeformGroup *dg, *odg; MDeformVert *dvert; CustomData vdata, edata, fdata; - if(scene->obedit) return 0; + if(scene->obedit) + return OPERATOR_CANCELLED; - ob= OBACT; - if(!ob || ob->type!=OB_MESH) return 0; + /* ob is the object we are adding geometry to */ + if(!ob || ob->type!=OB_MESH) + return OPERATOR_CANCELLED; - if (object_data_is_libdata(ob)) { -// XXX error_libdata(); - return 0; - } - /* count & check */ - base= FIRSTBASE; - while(base) { - if(TESTBASELIB_BGMODE(base)) { /* BGMODE since python can access */ - if(base->object->type==OB_MESH) { - me= base->object->data; - totvert+= me->totvert; - totface+= me->totface; - - if(base->object == ob) ok= 1; - - if(me->key) { - haskey= 1; - break; - } - if(me->mr) { - hasmulti= 1; - break; - } - } + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + if(base->object->type==OB_MESH) { + me= base->object->data; + + totvert+= me->totvert; + totedge+= me->totedge; + totface+= me->totface; + totmat+= base->object->totcol; + + if(base->object == ob) + ok= 1; + + /* check for shapekeys */ + if(me->key) + haskey++; } - base= base->next; } + CTX_DATA_END; - if(haskey) { - BKE_report(op->reports, RPT_ERROR, "Can't join meshes with vertex keys"); - return 0; - } - if(hasmulti) { - BKE_report(op->reports, RPT_ERROR, "Can't join meshes with Multires"); - return 0; - } /* that way the active object is always selected */ - if(ok==0) return 0; + if(ok==0) + return OPERATOR_CANCELLED; - if(totvert==0 || totvert>MESH_MAX_VERTS) return 0; - - /* if needed add edges to other meshes */ - for(base= FIRSTBASE; base; base= base->next) { - if(TESTBASELIB_BGMODE(base)) { - if(base->object->type==OB_MESH) { - me= base->object->data; - totedge += me->totedge; - } - } - } + /* only join meshes if there are verts to join, there aren't too many, and we only had one mesh selected */ + me= (Mesh *)ob->data; + key= me->key; + if(totvert==0 || totvert>MESH_MAX_VERTS || totvert==me->totvert) + return OPERATOR_CANCELLED; /* new material indices and material array */ - matar= MEM_callocN(sizeof(void *)*MAXMAT, "join_mesh"); + matar= MEM_callocN(sizeof(void*)*totmat, "join_mesh matar"); + matmap= MEM_callocN(sizeof(int)*totmat, "join_mesh matmap"); totcol= ob->totcol; /* obact materials in new main array, is nicer start! */ - for(a=1; a<=ob->totcol; a++) { - matar[a-1]= give_current_material(ob, a); - id_us_plus((ID *)matar[a-1]); + for(a=0; atotcol; a++) { + matar[a]= give_current_material(ob, a+1); + id_us_plus((ID *)matar[a]); /* increase id->us : will be lowered later */ } - base= FIRSTBASE; - while(base) { - if(TESTBASELIB_BGMODE(base)) { - if(ob!=base->object && base->object->type==OB_MESH) { - me= base->object->data; - - // Join this object's vertex groups to the base one's - for (dg=base->object->defbase.first; dg; dg=dg->next){ - /* See if this group exists in the object */ - for (odg=ob->defbase.first; odg; odg=odg->next){ - if (!strcmp(odg->name, dg->name)){ - break; - } + /* - if destination mesh had shapekeys, move them somewhere safe, and set up placeholders + * with arrays that are large enough to hold shapekey data for all meshes + * - if destination mesh didn't have shapekeys, but we encountered some in the meshes we're + * joining, set up a new keyblock and assign to the mesh + */ + if(key) { + /* make a duplicate copy that will only be used here... (must remember to free it!) */ + nkey= copy_key(key); + + /* for all keys in old block, clear data-arrays */ + for(kb= key->block.first; kb; kb= kb->next) { + if(kb->data) MEM_freeN(kb->data); + kb->data= MEM_callocN(sizeof(float)*3*totvert, "join_shapekey"); + kb->totelem= totvert; + kb->weights= NULL; + } + } + else if(haskey) { + /* add a new key-block and add to the mesh */ + key= me->key= add_key((ID *)me); + key->type = KEY_RELATIVE; + } + + /* first pass over objects - copying materials and vertexgroups across */ + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + /* only act if a mesh, and not the one we're joining to */ + if((ob!=base->object) && (base->object->type==OB_MESH)) { + me= base->object->data; + + /* Join this object's vertex groups to the base one's */ + for(dg=base->object->defbase.first; dg; dg=dg->next) { + /* See if this group exists in the object (if it doesn't, add it to the end) */ + for(odg=ob->defbase.first; odg; odg=odg->next) { + if(!strcmp(odg->name, dg->name)) { + break; } - if (!odg){ - odg = MEM_callocN (sizeof(bDeformGroup), "join deformGroup"); - memcpy (odg, dg, sizeof(bDeformGroup)); - BLI_addtail(&ob->defbase, odg); - } - } - if (ob->defbase.first && ob->actdef==0) - ob->actdef=1; - - if(me->totvert) { + if(!odg) { + odg = MEM_callocN(sizeof(bDeformGroup), "join deformGroup"); + memcpy(odg, dg, sizeof(bDeformGroup)); + BLI_addtail(&ob->defbase, odg); + } + } + if(ob->defbase.first && ob->actdef==0) + ob->actdef=1; + + + if(me->totvert) { + /* Add this object's materials to the base one's if they don't exist already (but only if limits not exceeded yet) */ + if(totcol < MAXMAT-1) { for(a=1; a<=base->object->totcol; a++) { ma= give_current_material(base->object, a); - if(ma) { - for(b=0; bid.us++; - totcol++; + totcol++; + } + if(totcol>=MAXMAT-1) + break; + } + } + + /* if this mesh has shapekeys, check if destination mesh already has matching entries too */ + if(me->key && key) { + for(kb= me->key->block.first; kb; kb= kb->next) { + /* if key doesn't exist in destination mesh, add it */ + if(key_get_named_keyblock(key, kb->name) == NULL) { + /* copy this existing one over to the new shapekey block */ + kbn= MEM_dupallocN(kb); + kbn->prev= kbn->next= NULL; + + /* adjust adrcode and other settings to fit (allocate a new data-array) */ + kbn->data= MEM_callocN(sizeof(float)*3*totvert, "joined_shapekey"); + kbn->totelem= totvert; + kbn->weights= NULL; + + okb= key->block.last; + curpos= (okb) ? okb->pos : -0.1f; + if(key->type == KEY_RELATIVE) + kbn->pos= curpos + 0.1f; + else + kbn->pos= curpos; + + BLI_addtail(&key->block, kbn); + kbn->adrcode= key->totkey; + key->totkey++; + if(key->totkey==1) key->refkey= kbn; + + // XXX 2.5 Animato +#if 0 + /* also, copy corresponding ipo-curve to ipo-block if applicable */ + if(me->key->ipo && key->ipo) { + // FIXME... this is a luxury item! + puts("FIXME: ignoring IPO's when joining shapekeys on Meshes for now..."); } - if(totcol>=MAXMAT-1) break; +#endif } } } } - if(totcol>=MAXMAT-1) break; } - base= base->next; } - - me= ob->data; - + CTX_DATA_END; + + /* setup new data for destination mesh */ memset(&vdata, 0, sizeof(vdata)); memset(&edata, 0, sizeof(edata)); memset(&fdata, 0, sizeof(fdata)); @@ -249,114 +294,177 @@ int join_mesh(Scene *scene, View3D *v3d, wmOperator *op) mvert= CustomData_add_layer(&vdata, CD_MVERT, CD_CALLOC, NULL, totvert); medge= CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge); mface= CustomData_add_layer(&fdata, CD_MFACE, CD_CALLOC, NULL, totface); - + mvertmain= mvert; medgemain= medge; mfacemain= mface; - - /* inverse transorm all selected meshes in this object */ - Mat4Invert(imat, ob->obmat); - + vertofs= 0; edgeofs= 0; faceofs= 0; - base= FIRSTBASE; - while(base) { - nextb= base->next; - if (TESTBASELIB_BGMODE(base)) { - if(base->object->type==OB_MESH) { + + /* inverse transform for all selected meshes in this object */ + Mat4Invert(imat, ob->obmat); + + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + /* only join if this is a mesh */ + if(base->object->type==OB_MESH) { + me= base->object->data; + + if(me->totvert) { + /* standard data */ + CustomData_merge(&me->vdata, &vdata, CD_MASK_MESH, CD_DEFAULT, totvert); + CustomData_copy_data(&me->vdata, &vdata, 0, vertofs, me->totvert); - me= base->object->data; + /* vertex groups */ + dvert= CustomData_get(&vdata, vertofs, CD_MDEFORMVERT); - if(me->totvert) { - CustomData_merge(&me->vdata, &vdata, CD_MASK_MESH, CD_DEFAULT, totvert); - CustomData_copy_data(&me->vdata, &vdata, 0, vertofs, me->totvert); - - dvert= CustomData_get(&vdata, vertofs, CD_MDEFORMVERT); - - /* NEW VERSION */ - if (dvert){ - for (i=0; itotvert; i++){ - for (j=0; jobject->defbase, dvert[i].dw[j].def_nr); - if(odg) { - // Search for a match in the new object - for (dg=ob->defbase.first, index=0; dg; dg=dg->next, index++){ - if (!strcmp(dg->name, odg->name)){ - dvert[i].dw[j].def_nr = index; - break; - } + /* NB: vertex groups here are new version */ + if(dvert) { + for(i=0; itotvert; i++) { + for(j=0; jobject->defbase, dvert[i].dw[j].def_nr); + if(odg) { + /* Search for a match in the new object, and set new index */ + for(dg=ob->defbase.first, index=0; dg; dg=dg->next, index++) { + if(!strcmp(dg->name, odg->name)) { + dvert[i].dw[j].def_nr = index; + break; } } } } } - - if(base->object != ob) { - /* watch this: switch matmul order really goes wrong */ - Mat4MulMat4(cmat, base->object->obmat, imat); - - a= me->totvert; - while(a--) { - Mat4MulVecfl(cmat, mvert->co); - mvert++; - } - } - else mvert+= me->totvert; } - if(me->totface) { - /* make mapping for materials */ - memset(map, 0, 4*MAXMAT); - for(a=1; a<=base->object->totcol; a++) { - ma= give_current_material(base->object, a); - if(ma) { - for(b=0; bobject != ob) { + /* watch this: switch matmul order really goes wrong */ + Mat4MulMat4(cmat, base->object->obmat, imat); + + /* transform vertex coordinates into new space */ + for(a=0, mv=mvert; a < me->totvert; a++, mv++) { + Mat4MulVecfl(cmat, mv->co); + } + + /* for each shapekey in destination mesh: + * - if there's a matching one, copy it across (will need to transform vertices into new space...) + * - otherwise, just copy own coordinates of mesh (no need to transform vertex coordinates into new space) + */ + if(key) { + /* if this mesh has any shapekeys, check first, otherwise just copy coordinates */ + for(kb= key->block.first; kb; kb= kb->next) { + /* get pointer to where to write data for this mesh in shapekey's data array */ + fp1= ((float *)kb->data) + (vertofs*3); + + /* check if this mesh has such a shapekey */ + okb= key_get_named_keyblock(me->key, kb->name); + if(okb) { + /* copy this mesh's shapekey to the destination shapekey (need to transform first) */ + fp2= ((float *)(okb->data)); + for(a=0; a < me->totvert; a++, fp1+=3, fp2+=3) { + VECCOPY(fp1, fp2); + Mat4MulVecfl(cmat, fp1); + } + } + else { + /* copy this mesh's vertex coordinates to the destination shapekey */ + mv= mvert; + for(a=0; a < me->totvert; a++, fp1+=3, mv++) { + VECCOPY(fp1, mv->co); } } } } - - CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface); - CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface); - - for(a=0; atotface; a++, mface++) { - mface->v1+= vertofs; - mface->v2+= vertofs; - mface->v3+= vertofs; - if(mface->v4) mface->v4+= vertofs; - - mface->mat_nr= map[(int)mface->mat_nr]; + } + else { + /* for each shapekey in destination mesh: + * - if it was an 'original', copy the appropriate data from nkey + * - otherwise, copy across plain coordinates (no need to transform coordinates) + */ + if(key) { + for(kb= key->block.first; kb; kb= kb->next) { + /* get pointer to where to write data for this mesh in shapekey's data array */ + fp1= ((float *)kb->data) + (vertofs*3); + + /* check if this was one of the original shapekeys */ + okb= key_get_named_keyblock(nkey, kb->name); + if(okb) { + /* copy this mesh's shapekey to the destination shapekey */ + fp2= ((float *)(okb->data)); + for(a=0; a < me->totvert; a++, fp1+=3, fp2+=3) { + VECCOPY(fp1, fp2); + } + } + else { + /* copy base-coordinates to the destination shapekey */ + mv= mvert; + for(a=0; a < me->totvert; a++, fp1+=3, mv++) { + VECCOPY(fp1, mv->co); + } + } + } } - - faceofs += me->totface; } - if(me->totedge) { - CustomData_merge(&me->edata, &edata, CD_MASK_MESH, CD_DEFAULT, totedge); - CustomData_copy_data(&me->edata, &edata, 0, edgeofs, me->totedge); - - for(a=0; atotedge; a++, medge++) { - medge->v1+= vertofs; - medge->v2+= vertofs; - } - - edgeofs += me->totedge; - } - - vertofs += me->totvert; - - if(base->object!=ob) - ED_base_object_free_and_unlink(scene, base); + /* advance mvert pointer to end of base mesh's data */ + mvert+= me->totvert; } + + if(me->totface) { + /* make mapping for materials */ + for(a=1; a<=base->object->totcol; a++) { + ma= give_current_material(base->object, a); + + for(b=0; bfdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface); + CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface); + + for(a=0; atotface; a++, mface++) { + mface->v1+= vertofs; + mface->v2+= vertofs; + mface->v3+= vertofs; + if(mface->v4) mface->v4+= vertofs; + + mface->mat_nr= matmap[(int)mface->mat_nr]; + } + + faceofs += me->totface; + } + + if(me->totedge) { + CustomData_merge(&me->edata, &edata, CD_MASK_MESH, CD_DEFAULT, totedge); + CustomData_copy_data(&me->edata, &edata, 0, edgeofs, me->totedge); + + for(a=0; atotedge; a++, medge++) { + medge->v1+= vertofs; + medge->v2+= vertofs; + } + + edgeofs += me->totedge; + } + + /* vertofs is used to help newly added verts be reattached to their edge/face + * (cannot be set earlier, or else reattaching goes wrong) + */ + vertofs += me->totvert; + + /* free base, now that data is merged */ + if(base->object != ob) + ED_base_object_free_and_unlink(scene, base); } - base= nextb; } + CTX_DATA_END; + /* return to mesh we're merging to */ me= ob->data; CustomData_free(&me->vdata, me->totvert); @@ -383,30 +491,53 @@ int join_mesh(Scene *scene, View3D *v3d, wmOperator *op) if(ma) ma->id.us--; } if(ob->mat) MEM_freeN(ob->mat); + if(ob->matbits) MEM_freeN(ob->matbits); if(me->mat) MEM_freeN(me->mat); - ob->mat= me->mat= 0; + ob->mat= me->mat= NULL; + ob->matbits= NULL; if(totcol) { me->mat= matar; ob->mat= MEM_callocN(sizeof(void *)*totcol, "join obmatar"); + ob->matbits= MEM_callocN(sizeof(char)*totcol, "join obmatbits"); } - else MEM_freeN(matar); + else + MEM_freeN(matar); ob->totcol= me->totcol= totcol; ob->colbits= 0; + + MEM_freeN(matmap); /* other mesh users */ test_object_materials((ID *)me); + /* free temp copy of destination shapekeys (if applicable) */ + if(nkey) { + // XXX 2.5 Animato +#if 0 + /* free it's ipo too - both are not actually freed from memory yet as ID-blocks */ + if(nkey->ipo) { + free_ipo(nkey->ipo); + BLI_remlink(&G.main->ipo, nkey->ipo); + MEM_freeN(nkey->ipo); + } +#endif + + free_key(nkey); + BLI_remlink(&G.main->key, nkey); + MEM_freeN(nkey); + } + DAG_scene_sort(scene); // removed objects, need to rebuild dag before editmode call -// XXX enter_editmode(EM_WAITCURSOR); -// exit_editmode(EM_FREEDATA|EM_WAITCURSOR); // freedata, but no undo - - BIF_undo_push("Join Mesh"); - return 1; -} + ED_object_enter_editmode(C, EM_WAITCURSOR); + ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR); + WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); + + return OPERATOR_FINISHED; +} /* ********************** SORT FACES ******************* */ @@ -520,14 +651,14 @@ void sort_faces(Scene *scene, View3D *v3d) else face_sort_floats[i] = reverse; } else { /* find the faces center */ - VECADD(vec, (me->mvert+mf->v1)->co, (me->mvert+mf->v2)->co); + VecAddf(vec, (me->mvert+mf->v1)->co, (me->mvert+mf->v2)->co); if (mf->v4) { - VECADD(vec, vec, (me->mvert+mf->v3)->co); - VECADD(vec, vec, (me->mvert+mf->v4)->co); - VECMUL(vec, 0.25f); + VecAddf(vec, vec, (me->mvert+mf->v3)->co); + VecAddf(vec, vec, (me->mvert+mf->v4)->co); + VecMulf(vec, 0.25f); } else { - VECADD(vec, vec, (me->mvert+mf->v3)->co); - VECMUL(vec, 1.0f/3.0f); + VecAddf(vec, vec, (me->mvert+mf->v3)->co); + VecMulf(vec, 1.0f/3.0f); } /* done */ if (event == 1) { /* sort on view axis */ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 35b6e23eaa5..0746fbaefb6 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1755,7 +1755,6 @@ static short select_grouped_parent(bContext *C) /* Makes parent active and de-se static short select_grouped_group(bContext *C, Object *ob) /* Select objects in the same group as the active */ { short changed = 0; - Base *base; Group *group, *ob_groups[GROUP_MENU_MAX]; //char str[10 + (24*GROUP_MENU_MAX)]; //char *p = str; @@ -6326,6 +6325,53 @@ void OBJECT_OT_duplicate(wmOperatorType *ot) RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); } +/* ************************** JOIN *********************** */ + +static int join_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + + if(scene->obedit) { + BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode."); + return OPERATOR_CANCELLED; + } + else if(!ob) { + BKE_report(op->reports, RPT_ERROR, "Can't join unless there is an active object."); + return OPERATOR_CANCELLED; + } + else if(object_data_is_libdata(ob)) { + BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata."); + return OPERATOR_CANCELLED; + } + + if(ob->type == OB_MESH) + return join_mesh_exec(C, op); + else if(ELEM(ob->type, OB_CURVE, OB_SURF)) + return join_curve_exec(C, op); + else if(ob->type == OB_ARMATURE) + return join_armature_exec(C, op); + + BKE_report(op->reports, RPT_ERROR, "This object type doesn't support joining."); + + return OPERATOR_CANCELLED; +} + +void OBJECT_OT_join(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Join"; + ot->description = "Join selected objects into active object."; + ot->idname= "OBJECT_OT_join"; + + /* api callbacks */ + ot->exec= join_exec; + ot->poll= ED_operator_scene_editable; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ********************** */ void image_aspect(Scene *scene, View3D *v3d) diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 76ce8857c2c..23a4b5773ff 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -64,6 +64,7 @@ void OBJECT_OT_duplicates_make_real(struct wmOperatorType *ot); void OBJECT_OT_object_add(struct wmOperatorType *ot); void OBJECT_OT_duplicate(struct wmOperatorType *ot); void OBJECT_OT_delete(struct wmOperatorType *ot); +void OBJECT_OT_join(struct wmOperatorType *ot); void OBJECT_OT_mesh_add(struct wmOperatorType *ot); void OBJECT_OT_curve_add(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 9a0ce23a970..acfe2416d77 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -86,6 +86,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_center_set); WM_operatortype_append(OBJECT_OT_duplicates_make_real); WM_operatortype_append(OBJECT_OT_duplicate); + WM_operatortype_append(OBJECT_OT_join); WM_operatortype_append(GROUP_OT_group_create); WM_operatortype_append(GROUP_OT_objects_remove); WM_operatortype_append(GROUP_OT_objects_add_active); @@ -170,6 +171,7 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OBJECT_OT_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_ALT, 0)->ptr, "linked", 1); + WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 578da29f102..fd37020c3b4 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -387,7 +387,6 @@ static int view_all_exec(bContext *C, wmOperator *op) ARegion *ar; Scene *scene; Object *obedit; - Image *ima; ImBuf *ibuf; float aspx, aspy, zoomx, zoomy, w, h; int width, height; @@ -398,7 +397,6 @@ static int view_all_exec(bContext *C, wmOperator *op) scene= (Scene*)CTX_data_scene(C); obedit= CTX_data_edit_object(C); - ima= ED_space_image(sima); ibuf= ED_space_image_buffer(sima); ED_space_image_size(sima, &width, &height); ED_space_image_aspect(sima, &aspx, &aspy); diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index e8c32d2a2c7..4776b42b631 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1700,22 +1700,24 @@ static int tree_element_active_material(Scene *scene, SpaceOops *soops, TreeElem if(tes->idcode==ID_OB) { if(set) { ob->actcol= te->index+1; - ob->colbits |= (1<index); // make ob material active too + ob->matbits[te->index]= 1; // make ob material active too + ob->colbits |= (1<index); } else { if(ob->actcol == te->index+1) - if(ob->colbits & (1<index)) return 1; + if(ob->matbits[te->index]) return 1; } } /* or we search for obdata material */ else { if(set) { ob->actcol= te->index+1; - ob->colbits &= ~(1<index); // make obdata material active too + ob->matbits[te->index]= 0; // make obdata material active too + ob->colbits &= ~(1<index); } else { if(ob->actcol == te->index+1) - if( (ob->colbits & (1<index))==0 ) return 1; + if(ob->matbits[te->index]==0) return 1; } } if(set) { diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index f83a0b9686e..93c6c535a31 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2463,11 +2463,13 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base if(dt>OB_WIRE) { // no transp in editmode, the fancy draw over goes bad then glsl = draw_glsl_material(scene, ob, v3d, dt); - GPU_set_object_materials(v3d, rv3d, scene, ob, glsl, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); } draw_em_fancy(scene, v3d, rv3d, ob, em, cageDM, finalDM, dt); + GPU_end_object_materials(); + if (obedit!=ob && finalDM) finalDM->release(finalDM); } @@ -2482,17 +2484,19 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base check_alpha = check_material_alpha(base, me, glsl); if(dt==OB_SOLID || glsl) { - GPU_set_object_materials(v3d, rv3d, scene, ob, glsl, + GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, (check_alpha)? &do_alpha_pass: NULL); } draw_mesh_fancy(scene, v3d, rv3d, base, dt, flag); + + GPU_end_object_materials(); if(me->totvert==0) retval= 1; } } - /* GPU_set_object_materials checked if this is needed */ + /* GPU_begin_object_materials checked if this is needed */ if(do_alpha_pass) add_view3d_after(v3d, base, V3D_TRANSP, flag); return retval; @@ -2670,7 +2674,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) glVertexPointer(3, GL_FLOAT, 0, dl->verts); glNormalPointer(GL_FLOAT, 0, dl->nors); glDrawElements(GL_QUADS, 4*dl->totindex, GL_UNSIGNED_INT, dl->index); - GPU_disable_material(); } break; @@ -2688,7 +2691,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) glNormalPointer(GL_FLOAT, 0, dl->nors); glDrawElements(GL_TRIANGLES, 3*dl->parts, GL_UNSIGNED_INT, dl->index); - GPU_disable_material(); if(index3_nors_incr==0) glEnableClientState(GL_NORMAL_ARRAY); @@ -2702,8 +2704,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) glNormalPointer(GL_FLOAT, 0, dl->nors); glDrawElements(GL_QUADS, 4*dl->parts, GL_UNSIGNED_INT, dl->index); - GPU_disable_material(); - break; } dl= dl->next; @@ -2797,17 +2797,19 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas } else { if(draw_glsl_material(scene, ob, v3d, dt)) { - GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); drawDispListsolid(lb, ob, 1); + GPU_end_object_materials(); } else if(dt == OB_SHADED) { if(ob->disp.first==0) shadeDispList(scene, base); drawDispListshaded(lb, ob); } else { - GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); drawDispListsolid(lb, ob, 0); + GPU_end_object_materials(); } if(cu->editnurb && cu->bevobj==NULL && cu->taperobj==NULL && cu->ext1 == 0.0 && cu->ext2 == 0.0) { cpack(0); @@ -2835,18 +2837,19 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas if(dl->nors==NULL) addnormalsDispList(ob, lb); if(draw_glsl_material(scene, ob, v3d, dt)) { - GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); drawDispListsolid(lb, ob, 1); + GPU_end_object_materials(); } else if(dt==OB_SHADED) { if(ob->disp.first==NULL) shadeDispList(scene, base); drawDispListshaded(lb, ob); } else { - GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); - drawDispListsolid(lb, ob, 0); + GPU_end_object_materials(); } } else { @@ -2863,8 +2866,9 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas if(solid) { if(draw_glsl_material(scene, ob, v3d, dt)) { - GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); drawDispListsolid(lb, ob, 1); + GPU_end_object_materials(); } else if(dt == OB_SHADED) { dl= lb->first; @@ -2872,10 +2876,10 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas drawDispListshaded(lb, ob); } else { - GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); - drawDispListsolid(lb, ob, 0); + GPU_end_object_materials(); } } else{ @@ -5615,7 +5619,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r if(dm) { glsl = draw_glsl_material(scene, ob, v3d, dt); - GPU_set_object_materials(v3d, rv3d, scene, ob, glsl, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); } else { glEnable(GL_COLOR_MATERIAL); @@ -5629,7 +5633,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r if(dm) { dm->drawFacesSolid(dm, GPU_enable_material); - GPU_disable_material(); + GPU_end_object_materials(); } else if(edm) edm->drawMappedFaces(edm, NULL, NULL, 0); diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h index ce130951840..802f30506f8 100644 --- a/source/blender/gpu/GPU_draw.h +++ b/source/blender/gpu/GPU_draw.h @@ -63,8 +63,10 @@ void GPU_state_init(void); * GPU_enable_material returns 0 if drawing should be skipped * - after drawing, the material must be disabled again */ -void GPU_set_object_materials(struct View3D *v3d, struct RegionView3D *rv3d, +void GPU_begin_object_materials(struct View3D *v3d, struct RegionView3D *rv3d, struct Scene *scene, struct Object *ob, int glsl, int *do_alpha_pass); +void GPU_end_object_materials(void); + int GPU_enable_material(int nr, void *attribs); void GPU_disable_material(void); diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 5edb619f7e5..efb7d688a49 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -776,16 +776,17 @@ void GPU_free_images(void) /* OpenGL Materials */ -/* materials start counting at # one.... */ -#define MAXMATBUF (MAXMAT+1) +#define FIXEDMAT 8 /* OpenGL state caching for materials */ static struct GPUMaterialState { - float matbuf[MAXMATBUF][2][4]; + float (*matbuf)[2][4]; + float matbuf_fixed[FIXEDMAT][2][4]; int totmat; - Material *gmatbuf[MAXMATBUF]; + Material **gmatbuf; + Material *gmatbuf_fixed[FIXEDMAT]; Material *gboundmat; Object *gob; Scene *gscene; @@ -793,7 +794,8 @@ static struct GPUMaterialState { float (*gviewmat)[4]; float (*gviewinv)[4]; - GPUBlendMode blendmode[MAXMATBUF]; + GPUBlendMode *blendmode; + GPUBlendMode blendmode_fixed[FIXEDMAT]; int alphapass; int lastmatnr, lastretval; @@ -814,7 +816,7 @@ Material *gpu_active_node_material(Material *ma) return ma; } -void GPU_set_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Object *ob, int glsl, int *do_alpha_pass) +void GPU_begin_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Object *ob, int glsl, int *do_alpha_pass) { extern Material defmaterial; /* from material.c */ Material *ma; @@ -830,7 +832,7 @@ void GPU_set_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Obj GMS.gob = ob; GMS.gscene = scene; - GMS.totmat= ob->totcol; + GMS.totmat= ob->totcol+1; /* materials start from 1, default material is 0 */ GMS.glay= v3d->lay; GMS.gviewmat= rv3d->viewmat; GMS.gviewinv= rv3d->viewinv; @@ -838,6 +840,17 @@ void GPU_set_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Obj GMS.alphapass = (v3d && v3d->transp); if(do_alpha_pass) *do_alpha_pass = 0; + + if(GMS.totmat > FIXEDMAT) { + GMS.matbuf= MEM_callocN(sizeof(*GMS.matbuf)*GMS.totmat, "GMS.matbuf"); + GMS.gmatbuf= MEM_callocN(sizeof(*GMS.gmatbuf)*GMS.totmat, "GMS.matbuf"); + GMS.blendmode= MEM_callocN(sizeof(*GMS.blendmode)*GMS.totmat, "GMS.matbuf"); + } + else { + GMS.matbuf= GMS.matbuf_fixed; + GMS.gmatbuf= GMS.gmatbuf_fixed; + GMS.blendmode= GMS.blendmode_fixed; + } /* no materials assigned? */ if(ob->totcol==0) { @@ -870,10 +883,6 @@ void GPU_set_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Obj if(!glsl) ma= gpu_active_node_material(ma); if(ma==NULL) ma= &defmaterial; - /* this shouldn't happen .. */ - if(a>=MAXMATBUF) - continue; - /* create glsl material if requested */ gpumat = (glsl)? GPU_material_from_blender(GMS.gscene, ma): NULL; @@ -926,14 +935,14 @@ int GPU_enable_material(int nr, void *attribs) GPUBlendMode blendmode; /* prevent index to use un-initialized array items */ - if(nr>GMS.totmat) - nr= GMS.totmat; + if(nr>=GMS.totmat) + nr= 0; if(gattribs) memset(gattribs, 0, sizeof(*gattribs)); /* keep current material */ - if(nr>=MAXMATBUF || nr==GMS.lastmatnr) + if(nr==GMS.lastmatnr) return GMS.lastretval; /* unbind glsl material */ @@ -1004,6 +1013,21 @@ void GPU_disable_material(void) GPU_set_material_blend_mode(GPU_BLEND_SOLID); } +void GPU_end_object_materials(void) +{ + GPU_disable_material(); + + if(GMS.matbuf && GMS.matbuf != GMS.matbuf_fixed) { + MEM_freeN(GMS.matbuf); + MEM_freeN(GMS.gmatbuf); + MEM_freeN(GMS.blendmode); + + GMS.matbuf= NULL; + GMS.gmatbuf= NULL; + GMS.blendmode= NULL; + } +} + /* Lights */ int GPU_default_lights(void) diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index cd0b73c8f70..561638bfd20 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -142,10 +142,10 @@ typedef struct Material { /* **************** MATERIAL ********************* */ - /* maximum number of materials per material array - * (on object, mesh, lamp, etc.) - */ -#define MAXMAT 16 +/* maximum number of materials per material array. + * (on object, mesh, lamp, etc.). limited by + * short mat_nr in verts, faces. */ +#define MAXMAT 32767 /* material_type */ #define MA_TYPE_SURFACE 0 diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h index cec27b85b23..d53a7833d0e 100644 --- a/source/blender/makesdna/DNA_meshdata_types.h +++ b/source/blender/makesdna/DNA_meshdata_types.h @@ -37,7 +37,7 @@ struct Image; typedef struct MFace { unsigned int v1, v2, v3, v4; - char pad, mat_nr; + short mat_nr; char edcode, flag; /* we keep edcode, for conversion to edges draw flags in old files */ } MFace; @@ -61,7 +61,8 @@ typedef struct MDeformVert { typedef struct MVert { float co[3]; short no[3]; - char flag, mat_nr, bweight, pad[3]; + short mat_nr; + char flag, bweight, pad[2]; } MVert; /* at the moment alpha is abused for vertex painting @@ -134,7 +135,7 @@ typedef struct MultiresColFace { } MultiresColFace; typedef struct MultiresFace { unsigned int v[4]; - unsigned int mid; + unsigned int mid; char flag, mat_nr, pad[2]; } MultiresFace; typedef struct MultiresEdge { diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index febf2fe59cd..2b0ede846af 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -113,8 +113,12 @@ typedef struct Object { ListBase disp; ListBase defbase; ListBase modifiers; /* list of ModifierData structures */ - - struct Material **mat; + + /* materials */ + struct Material **mat; /* material slots */ + char *matbits; /* 1 if material linked to object */ + int totcol; /* copy of mesh or curve or meta */ + int actcol; /* currently selected material in the UI */ /* rot en drot have to be together! (transform('r' en 's')) */ float loc[3], dloc[3], orig[3]; @@ -129,7 +133,7 @@ typedef struct Object { unsigned int lay; /* copy of Base */ short flag; /* copy of Base */ - short colbits; /* when zero, from obdata */ + short colbits; /* deprecated */ short transflag, protectflag; /* transformation settings and transform locks */ short trackflag, upflag; @@ -164,9 +168,7 @@ typedef struct Object { float m_contactProcessingThreshold; char dt, dtx; - char totcol; /* copy of mesh or curve or meta */ - char actcol; /* currently selected material in the user interface */ - char empty_drawtype, pad1[3]; + char empty_drawtype, pad1[5]; float empty_drawsize; float dupfacesca; /* dupliface scale */ diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 91488aa2a49..5c9da19f9b2 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -701,7 +701,6 @@ static void rna_def_curve_nurb(BlenderRNA *brna) prop= RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "mat_nr"); RNA_def_property_ui_text(prop, "Material Index", ""); - RNA_def_property_range(prop, 0, MAXMAT-1); RNA_def_property_int_funcs(prop, NULL, NULL, "rna_Curve_material_index_range"); prop= RNA_def_property(srna, "character_index", PROP_INT, PROP_UNSIGNED); diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index 39fa6f36f23..b69a804cf6a 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -879,7 +879,6 @@ static void rna_def_mface(BlenderRNA *brna) prop= RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "mat_nr"); RNA_def_property_ui_text(prop, "Material Index", ""); - RNA_def_property_range(prop, 0, MAXMAT-1); RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshFace_material_index_range"); prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 092d15de96e..33e8c1fbd26 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -331,7 +331,7 @@ static int rna_MaterialSlot_link_get(PointerRNA *ptr) Object *ob= (Object*)ptr->id.data; int index= (Material**)ptr->data - ob->mat; - return (ob->colbits & (1<matbits[index] != 0; } static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value) @@ -339,10 +339,14 @@ static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value) Object *ob= (Object*)ptr->id.data; int index= (Material**)ptr->data - ob->mat; - if(value) + if(value) { + ob->matbits[index]= 1; ob->colbits |= (1<matbits[index]= 0; ob->colbits &= ~(1<data; nu= cu->nurb.first; @@ -2594,13 +2594,14 @@ static void init_render_surf(Render *re, ObjectRen *obr) MTC_Mat4Invert(ob->imat, mat); /* material array */ - memset(matar, 0, 4*32); - matar[0]= give_render_material(re, ob, 0); - for(a=0; atotcol; a++) { + totmat= ob->totcol+1; + matar= MEM_callocN(sizeof(Material*)*totmat, "init_render_surf matar"); + + for(a=0; atexco & TEXCO_ORCO) { + + if(matar[a] && matar[a]->texco & TEXCO_ORCO) need_orco= 1; - } } if(ob->parent && (ob->parent->type==OB_LATTICE)) need_orco= 1; @@ -2610,17 +2611,15 @@ static void init_render_surf(Render *re, ObjectRen *obr) displist.first= displist.last= 0; makeDispListSurf(re->scene, ob, &displist, 1, 0); - dl= displist.first; /* walk along displaylist and create rendervertices/-faces */ - while(dl) { - /* watch out: u ^= y, v ^= x !! */ - if(dl->type==DL_SURF) { + for(dl=displist.first; dl; dl=dl->next) { + /* watch out: u ^= y, v ^= x !! */ + if(dl->type==DL_SURF) orco+= 3*dl_surf_to_renderdata(obr, dl, matar, orco, mat); - } - - dl= dl->next; } + freedisplist(&displist); + MEM_freeN(matar); } static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) @@ -2631,11 +2630,11 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) VlakRen *vlr; DispList *dl; ListBase olddl={NULL, NULL}; - Material *matar[32]; + Material **matar; float len, *data, *fp, *orco=NULL, *orcobase= NULL; float n[3], mat[4][4]; int nr, startvert, startvlak, a, b; - int frontside, need_orco=0; + int frontside, need_orco=0, totmat; cu= ob->data; if(ob->type==OB_FONT && cu->str==NULL) return; @@ -2656,13 +2655,14 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) MTC_Mat4Invert(ob->imat, mat); /* material array */ - memset(matar, 0, 4*32); - matar[0]= give_render_material(re, ob, 0); - for(a=0; atotcol; a++) { + totmat= ob->totcol+1; + matar= MEM_callocN(sizeof(Material*)*totmat, "init_render_surf matar"); + + for(a=0; atexco & TEXCO_ORCO) { + + if(matar[a] && matar[a]->texco & TEXCO_ORCO) need_orco= 1; - } } if(need_orco) orcobase=orco= get_object_orco(re, ob); @@ -2840,6 +2840,8 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) freedisplist(&cu->disp); SWAP(ListBase, olddl, cu->disp); } + + MEM_freeN(matar); } /* ------------------------------------------------------------------------- */ From 89830ea0c87765aea30bc2b69abe417ef941ea55 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Jul 2009 08:33:51 +0000 Subject: [PATCH 181/512] calling operators from python was raising an error without returning an error value. brecht, switched the order back to fix this, added an argument for WM_operatortype_find() to fail without printing an error. --- source/blender/editors/interface/interface.c | 2 +- .../editors/interface/interface_layout.c | 8 ++++---- .../editors/interface/interface_regions.c | 2 +- .../blender/editors/space_text/space_text.c | 3 ++- source/blender/python/intern/bpy_operator.c | 19 +++++++++++++------ source/blender/windowmanager/WM_api.h | 2 +- .../windowmanager/intern/wm_event_system.c | 4 ++-- .../windowmanager/intern/wm_operators.c | 11 +++++++---- 8 files changed, 31 insertions(+), 20 deletions(-) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 63e16c7933a..9ded2ec9eb8 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2273,7 +2273,7 @@ uiBut *ui_def_but_operator(uiBlock *block, int type, char *opname, int opcontext uiBut *but; wmOperatorType *ot; - ot= WM_operatortype_find(opname); + ot= WM_operatortype_find(opname, 0); if(!str) { if(ot) str= ot->name; diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 77af58bacc1..7fa0bf6426f 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -515,7 +515,7 @@ static void ui_item_disabled(uiLayout *layout, char *name) void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context) { uiBlock *block= layout->root->block; - wmOperatorType *ot= WM_operatortype_find(idname); + wmOperatorType *ot= WM_operatortype_find(idname, 0); uiBut *but; int w; @@ -550,7 +550,7 @@ void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDPropert static char *ui_menu_enumpropname(uiLayout *layout, char *opname, char *propname, int retval) { - wmOperatorType *ot= WM_operatortype_find(opname); + wmOperatorType *ot= WM_operatortype_find(opname, 0); PointerRNA ptr; PropertyRNA *prop; @@ -593,7 +593,7 @@ void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *pro void uiItemsEnumO(uiLayout *layout, char *opname, char *propname) { - wmOperatorType *ot= WM_operatortype_find(opname); + wmOperatorType *ot= WM_operatortype_find(opname, 0); PointerRNA ptr; PropertyRNA *prop; @@ -1213,7 +1213,7 @@ static void menu_item_enum_opname_menu(bContext *C, uiLayout *layout, void *arg) void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname) { - wmOperatorType *ot= WM_operatortype_find(opname); + wmOperatorType *ot= WM_operatortype_find(opname, 0); MenuItemLevel *lvl; if(!ot || !ot->srna) { diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index c574cf1072f..edde575f695 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -2812,7 +2812,7 @@ void uiPupBlockO(bContext *C, uiBlockCreateFunc func, void *arg, char *opname, i handle= ui_popup_block_create(C, NULL, NULL, func, NULL, arg); handle->popup= 1; - handle->optype= (opname)? WM_operatortype_find(opname): NULL; + handle->optype= (opname)? WM_operatortype_find(opname, 0): NULL; handle->opcontext= opcontext; UI_add_popup_handlers(C, &window->handlers, handle); diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 5d3da461f71..68848c39c25 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -286,7 +286,8 @@ static void text_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "TEXT_OT_line_break", RETKEY, KM_PRESS, 0, 0); #ifndef DISABLE_PYTHON - WM_keymap_add_item(keymap, "TEXT_OT_line_console", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "TEXT_OT_console_exec", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "TEXT_OT_console_autocomplete", RETKEY, KM_PRESS, KM_ALT, 0); /* python operator - space_text.py */ #endif WM_keymap_add_item(keymap, "TEXT_OT_line_number", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index b183120dd2d..b57ef54304b 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -68,7 +68,7 @@ static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * k return NULL; } - ot= WM_operatortype_find(opname); + ot= WM_operatortype_find(opname, 1); if (ot == NULL) { PyErr_Format( PyExc_SystemError, "Operator \"%s\"could not be found", opname); return NULL; @@ -130,12 +130,19 @@ static PyObject *pyop_base_getattro( BPy_OperatorBase * self, PyObject *pyname ) PyObject *ret; wmOperatorType *ot; - if ((ret = PyObject_GenericGetAttr((PyObject *)self, pyname))) { - /* do nothing, this accounts for methoddef's add and remove */ - } - else if ((ot= WM_operatortype_find(name))) { + /* First look for the operator, then our own methods if that fails. + * when methods are searched first, PyObject_GenericGetAttr will raise an error + * each time we want to call an operator, we could clear the error but I prefer + * not to since calling operators is a lot more common then adding and removing. - Campbell */ + + if ((ot= WM_operatortype_find(name, 1))) { ret = PyCFunction_New( pyop_base_call_meth, pyname); /* set the name string as self, PyCFunction_New incref's self */ } + else if ((ret = PyObject_GenericGetAttr((PyObject *)self, pyname))) { + /* do nothing, this accounts for methoddef's add and remove + * An exception is raised when PyObject_GenericGetAttr fails + * but its ok because its overwritten below */ + } else { PyErr_Format( PyExc_AttributeError, "Operator \"%s\" not found", name); ret= NULL; @@ -170,7 +177,7 @@ static PyObject *pyop_base_rna(PyObject *self, PyObject *pyname) char *name = _PyUnicode_AsString(pyname); wmOperatorType *ot; - if ((ot= WM_operatortype_find(name))) { + if ((ot= WM_operatortype_find(name, 1))) { BPy_StructRNA *pyrna; PointerRNA ptr; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7fe98488ec0..c72da8fe593 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -132,7 +132,7 @@ int WM_operator_redo_popup (struct bContext *C, struct wmOperator *op); void WM_operator_free (struct wmOperator *op); void WM_operator_stack_clear(struct bContext *C); -wmOperatorType *WM_operatortype_find(const char *idname); +wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet); wmOperatorType *WM_operatortype_exists(const char *idname); wmOperatorType *WM_operatortype_first(void); void WM_operatortype_append (void (*opfunc)(wmOperatorType*)); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 491b70deedc..3ef6e545dda 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -393,7 +393,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P /* invokes operator in context */ int WM_operator_name_call(bContext *C, const char *opstring, int context, PointerRNA *properties) { - wmOperatorType *ot= WM_operatortype_find(opstring); + wmOperatorType *ot= WM_operatortype_find(opstring, 0); wmWindow *window= CTX_wm_window(C); wmEvent *event; @@ -723,7 +723,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand printf("wm_handler_operator_call error\n"); } else { - wmOperatorType *ot= WM_operatortype_find(event->keymap_idname); + wmOperatorType *ot= WM_operatortype_find(event->keymap_idname, 0); if(ot) retval= wm_operator_invoke(C, ot, event, properties); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 330196a7a73..d7cac82ef90 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -82,7 +82,7 @@ static ListBase global_ops= {NULL, NULL}; /* ************ operator API, exported ********** */ -wmOperatorType *WM_operatortype_find(const char *idname) +wmOperatorType *WM_operatortype_find(const char *idname, int quiet) { wmOperatorType *ot; @@ -90,7 +90,10 @@ wmOperatorType *WM_operatortype_find(const char *idname) if(strncmp(ot->idname, idname, OP_MAX_TYPENAME)==0) return ot; } - printf("search for unknown operator %s\n", idname); + + if(!quiet) + printf("search for unknown operator %s\n", idname); + return NULL; } @@ -137,7 +140,7 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType*, void*), void *us int WM_operatortype_remove(const char *idname) { - wmOperatorType *ot = WM_operatortype_find(idname); + wmOperatorType *ot = WM_operatortype_find(idname, 0); if (ot==NULL) return 0; @@ -190,7 +193,7 @@ char *WM_operator_pystring(wmOperator *op) void WM_operator_properties_create(PointerRNA *ptr, const char *opstring) { - wmOperatorType *ot= WM_operatortype_find(opstring); + wmOperatorType *ot= WM_operatortype_find(opstring, 0); if(ot) RNA_pointer_create(NULL, ot->srna, NULL, ptr); From b5eff581bc5fc5eb66b2c168b091387a0160b710 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Jul 2009 09:31:35 +0000 Subject: [PATCH 182/512] Console Autocomplete (Alt+Enter in the text editor), should be moved out of the text editor soon. The autocomplete function is generic and could be made into its own module. Examples: b -> bpy bpy.data.mes -> bpy.data.meshes bpy.ops.OB -> bpy.ops.OBJECT_OT_ bpy.data.objects[0].a -> (options) active_material, active_material_index, active_particle_system, active_particle_system_index, active_shape_key, active_shape_key_index, active_vertex_group, active_vertex_group_index, animation_data --- release/ui/space_text.py | 338 +++++++++++++++++++++++++++++++++++---- 1 file changed, 307 insertions(+), 31 deletions(-) diff --git a/release/ui/space_text.py b/release/ui/space_text.py index c0bdff15ddf..c6ce1cb71d6 100644 --- a/release/ui/space_text.py +++ b/release/ui/space_text.py @@ -227,7 +227,43 @@ class TEXT_MT_edit(bpy.types.Menu): layout.itemM("TEXT_MT_edit_to3d") -class TEXT_OT_line_console(bpy.types.Operator): +def get_console(text): + ''' + helper function for console operators + currently each text datablock gets its own console - code.InteractiveConsole() + ...which is stored in this function. + ''' + import sys, code, io + + try: consoles = get_console.consoles + except:consoles = get_console.consoles = {} + + # clear all dead consoles, use text names as IDs + for id in list(consoles.keys()): + if id not in bpy.data.texts: + del consoles[id] + + if not text: + return None, None, None + + id = text.name + + try: + namespace, console, stdout = consoles[id] + except: + namespace = locals() + namespace['bpy'] = bpy + + console = code.InteractiveConsole(namespace) + + if sys.version.startswith('2'): stdout = io.BytesIO() # Py2x support + else: stdout = io.StringIO() + + consoles[id]= namespace, console, stdout + + return namespace, console, stdout + +class TEXT_OT_console_exec(bpy.types.Operator): ''' Operator documentatuon text, will be used for the operator tooltip and python docs. ''' @@ -243,38 +279,15 @@ class TEXT_OT_line_console(bpy.types.Operator): def execute(self, context): import sys - # clear all dead consoles, use text names as IDs - for id in list(self.__class__.console.keys()): - if id not in bpy.data.texts: - del self.__class__.console[id] - - # print("Selected: " + context.active_object.name) st = context.space_data text = st.text if not text: return ('CANCELLED',) - line = st.text.current_line.line - id = text.name + namespace, console, stdout = get_console(text) - try: - namespace, console, stdout = self.__class__.console[id] - except: - import code, io - - namespace = locals().update({'bpy':bpy}) - console = code.InteractiveConsole(namespace) - - if sys.version.startswith('2'): # Py2.x support - stdout = io.BytesIO() - else: - stdout = io.StringIO() - - - - self.__class__.console[id]= namespace, console, stdout - del code, io + line = text.current_line.line # redirect output sys.stdout = stdout @@ -284,8 +297,8 @@ class TEXT_OT_line_console(bpy.types.Operator): if not line.strip(): line = '\n' # executes a multiline statement - if line.startswith(self.__class__.PROMPT_MULTI) or line.startswith(self.__class__.PROMPT): - line = line[len(self.__class__.PROMPT):] + if line.startswith(self.PROMPT_MULTI) or line.startswith(self.PROMPT): + line = line[len(self.PROMPT):] was_prefix = True else: was_prefix = False @@ -305,9 +318,9 @@ class TEXT_OT_line_console(bpy.types.Operator): stdout.truncate(0) if is_multiline: - prefix = self.__class__.PROMPT_MULTI + prefix = self.PROMPT_MULTI else: - prefix = self.__class__.PROMPT + prefix = self.PROMPT # Kindof odd, add the prefix if we didnt have one. makes it easier to re-read. if not was_prefix: @@ -320,7 +333,269 @@ class TEXT_OT_line_console(bpy.types.Operator): bpy.ops.TEXT_OT_insert(text= '\n' + output + prefix) return ('FINISHED',) + + +def autocomp(bcon): + ''' + This function has been taken from a BGE console autocomp I wrote a while ago + the dictionaty bcon is not needed but it means I can copy and paste from the old func + which works ok for now. + could be moved into its own module. + ''' + + + def is_delimiter(ch): + ''' + For skipping words + ''' + if ch == '_': + return False + if ch.isalnum(): + return False + + return True + + def is_delimiter_autocomp(ch): + ''' + When autocompleteing will earch back and + ''' + if ch in '._[] "\'': + return False + if ch.isalnum(): + return False + + return True + + + def do_autocomp(autocomp_prefix, autocomp_members): + ''' + return text to insert and a list of options + ''' + autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] + + print("AUTO: '%s'" % autocomp_prefix) + print("MEMBERS: '%s'" % str(autocomp_members)) + + if not autocomp_prefix: + return '', autocomp_members + elif len(autocomp_members) > 1: + # find a common string between all members after the prefix + # 'ge' [getA, getB, getC] --> 'get' + + # get the shortest member + min_len = min([len(v) for v in autocomp_members]) + + autocomp_prefix_ret = '' + + for i in range(len(autocomp_prefix), min_len): + char_soup = set() + for v in autocomp_members: + char_soup.add(v[i]) + + if len(char_soup) > 1: + break + else: + autocomp_prefix_ret += char_soup.pop() + + print(autocomp_prefix_ret) + return autocomp_prefix_ret, autocomp_members + elif len(autocomp_members) == 1: + return autocomp_members[0][len(autocomp_prefix):], [] + else: + return '', [] + + + def BCon_PrevChar(bcon): + cursor = bcon['cursor']-1 + if cursor<0: + return None + + try: + return bcon['edit_text'][cursor] + except: + return None + + + def BCon_NextChar(bcon): + try: + return bcon['edit_text'][bcon['cursor']] + except: + return None + + def BCon_cursorLeft(bcon): + bcon['cursor'] -= 1 + if bcon['cursor'] < 0: + bcon['cursor'] = 0 + + def BCon_cursorRight(bcon): + bcon['cursor'] += 1 + if bcon['cursor'] > len(bcon['edit_text']): + bcon['cursor'] = len(bcon['edit_text']) + + def BCon_AddScrollback(bcon, text): + + bcon['scrollback'] = bcon['scrollback'] + text + + + def BCon_cursorInsertChar(bcon, ch): + if bcon['cursor']==0: + bcon['edit_text'] = ch + bcon['edit_text'] + elif bcon['cursor']==len(bcon['edit_text']): + bcon['edit_text'] = bcon['edit_text'] + ch + else: + bcon['edit_text'] = bcon['edit_text'][:bcon['cursor']] + ch + bcon['edit_text'][bcon['cursor']:] + + bcon['cursor'] + if bcon['cursor'] > len(bcon['edit_text']): + bcon['cursor'] = len(bcon['edit_text']) + BCon_cursorRight(bcon) + + + TEMP_NAME = '___tempname___' + + cursor_orig = bcon['cursor'] + + ch = BCon_PrevChar(bcon) + while ch != None and (not is_delimiter(ch)): + ch = BCon_PrevChar(bcon) + BCon_cursorLeft(bcon) + + if ch != None: + BCon_cursorRight(bcon) + + #print (cursor_orig, bcon['cursor']) + + cursor_base = bcon['cursor'] + + autocomp_prefix = bcon['edit_text'][cursor_base:cursor_orig] + + print("PREFIX:'%s'" % autocomp_prefix) + + # Get the previous word + if BCon_PrevChar(bcon)=='.': + BCon_cursorLeft(bcon) + ch = BCon_PrevChar(bcon) + while ch != None and is_delimiter_autocomp(ch)==False: + ch = BCon_PrevChar(bcon) + BCon_cursorLeft(bcon) + + cursor_new = bcon['cursor'] + + if ch != None: + cursor_new+=1 + + pytxt = bcon['edit_text'][cursor_new:cursor_base-1].strip() + print("AUTOCOMP EVAL: '%s'" % pytxt) + #try: + if pytxt: + bcon['console'].runsource(TEMP_NAME + '=' + pytxt, '', 'single') + # print val + else: ##except: + val = None + + try: + val = bcon['namespace'][TEMP_NAME] + del bcon['namespace'][TEMP_NAME] + except: + val = None + + if val: + autocomp_members = dir(val) + + autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) + + bcon['cursor'] = cursor_orig + for v in autocomp_prefix_ret: + BCon_cursorInsertChar(bcon, v) + cursor_orig = bcon['cursor'] + + if autocomp_members: + BCon_AddScrollback(bcon, ', '.join(autocomp_members)) + + del val + + else: + # Autocomp global namespace + autocomp_members = bcon['namespace'].keys() + + if autocomp_prefix: + autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] + + autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) + + bcon['cursor'] = cursor_orig + for v in autocomp_prefix_ret: + BCon_cursorInsertChar(bcon, v) + cursor_orig = bcon['cursor'] + + if autocomp_members: + BCon_AddScrollback(bcon, ', '.join(autocomp_members)) + + bcon['cursor'] = cursor_orig + + +class TEXT_OT_console_autocomplete(bpy.types.Operator): + ''' + Operator documentatuon text, will be used for the operator tooltip and python docs. + ''' + __label__ = "Console Autocomplete" + + def execute(self, context): + + st = context.space_data + text = st.text + + namespace, console, stdout = get_console(text) + + line = text.current_line.line + + if not console: + return ('CANCELLED',) + + + # fake cursor, use for autocomp func. + bcon = {} + bcon['cursor'] = text.current_character + bcon['console'] = console + bcon['edit_text'] = line + bcon['namespace'] = namespace + bcon['scrollback'] = '' # nor from the BGE console + + + # This function isnt aware of the text editor or being an operator + # just does the autocomp then copy its results back + autocomp(bcon) + + # Now we need to copy back the line from blender back into the text editor. + # This will change when we dont use the text editor anymore + + # clear the line + bpy.ops.TEXT_OT_move(type='LINE_END') + bpy.ops.TEXT_OT_move_select(type = 'LINE_BEGIN') + bpy.ops.TEXT_OT_delete(type = 'PREVIOUS_CHARACTER') + + if bcon['scrollback']: + bpy.ops.TEXT_OT_move_select(type = 'LINE_BEGIN') + bpy.ops.TEXT_OT_insert(text = bcon['scrollback'].strip() + '\n') + bpy.ops.TEXT_OT_move_select(type='LINE_BEGIN') + + bpy.ops.TEXT_OT_insert(text = bcon['edit_text']) + + # Read only + if 0: + text.current_character = bcon['cursor'] + else: + bpy.ops.TEXT_OT_move(type = 'LINE_BEGIN') + + for i in range(bcon['cursor']): + bpy.ops.TEXT_OT_move(type='NEXT_CHARACTER') + + + return ('FINISHED',) + + + bpy.types.register(TEXT_HT_header) bpy.types.register(TEXT_PT_properties) bpy.types.register(TEXT_PT_find) @@ -332,5 +607,6 @@ bpy.types.register(TEXT_MT_edit_select) bpy.types.register(TEXT_MT_edit_markers) bpy.types.register(TEXT_MT_edit_to3d) -bpy.ops.add(TEXT_OT_line_console) +bpy.ops.add(TEXT_OT_console_exec) +bpy.ops.add(TEXT_OT_console_autocomplete) From 030e5bd93ee0aaea3e43b89fb87191d7ec45c3be Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Jul 2009 11:41:24 +0000 Subject: [PATCH 183/512] Drawing a string longer then 255 chars wasnt working. changes to flatten_string_append(...), probably only brecht is interested. - It was copying from the old malloc'd buffer but never the fixed buffer - the reason >255 length strings didnt render. - on first malloc for the FlatString allocate 512 rather then 256 chars since the fixed string is 256 chars. - if the char was '\0' fs->pos was set to 0, not sure why since char cant be '\0' because of the loop that calls flatten_string_append, removed. --- source/blender/editors/space_text/text_draw.c | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c index 9f8cedd569f..9721fbc2b9c 100644 --- a/source/blender/editors/space_text/text_draw.c +++ b/source/blender/editors/space_text/text_draw.c @@ -109,22 +109,18 @@ static void flatten_string_append(FlattenString *fs, char c, int accum) { if(fs->pos>=fs->len && fs->pos>=sizeof(fs->fixedbuf)-1) { char *nbuf; int *naccum; - int olen= fs->len; - - if(olen) fs->len*= 2; - else fs->len= 256; - + if(fs->len) fs->len*= 2; + else fs->len= sizeof(fs->fixedbuf) * 2; + nbuf= MEM_callocN(sizeof(*fs->buf)*fs->len, "fs->buf"); naccum= MEM_callocN(sizeof(*fs->accum)*fs->len, "fs->accum"); + + memcpy(nbuf, fs->buf, fs->pos); + memcpy(naccum, fs->accum, fs->pos); - if(olen) { - memcpy(nbuf, fs->buf, olen); - memcpy(naccum, fs->accum, olen); - - if(fs->buf != fs->fixedbuf) { - MEM_freeN(fs->buf); - MEM_freeN(fs->accum); - } + if(fs->buf != fs->fixedbuf) { + MEM_freeN(fs->buf); + MEM_freeN(fs->accum); } fs->buf= nbuf; @@ -134,8 +130,7 @@ static void flatten_string_append(FlattenString *fs, char c, int accum) fs->buf[fs->pos]= c; fs->accum[fs->pos]= accum; - if(c==0) fs->pos= 0; - else fs->pos++; + fs->pos++; } int flatten_string(SpaceText *st, FlattenString *fs, char *in) @@ -1336,6 +1331,7 @@ void draw_text_main(SpaceText *st, ARegion *ar) UI_ThemeColor(TH_TEXT); sprintf(linenr, "%d", i + linecount + 1); + /* itoa(i + linecount + 1, linenr, 10); */ /* not ansi-c :/ */ text_font_draw(st, TXT_OFFSET - 7, y, linenr); UI_ThemeColor(TH_TEXT); From 1227d5d6d3e96362260f3e6eeadc01612cc18898 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Jul 2009 12:17:07 +0000 Subject: [PATCH 184/512] mathutils types didnt work properly in python2x. vec*matrix failed for eg. Now with KX_Python.h line 35 commented YoFrankie 1.1 should run unmodified in blender2.5 --- source/blender/python/generic/Mathutils.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/blender/python/generic/Mathutils.c b/source/blender/python/generic/Mathutils.c index 651c5b8a265..53077659655 100644 --- a/source/blender/python/generic/Mathutils.c +++ b/source/blender/python/generic/Mathutils.c @@ -114,6 +114,13 @@ PyObject *Mathutils_Init(const char *from) //seed the generator for the rand function BLI_srand((unsigned int) (PIL_check_seconds_timer() * 0x7FFFFFFF)); + +#if (PY_VERSION_HEX < 0x03000000) + vector_Type.tp_flags |= Py_TPFLAGS_CHECKTYPES; + matrix_Type.tp_flags |= Py_TPFLAGS_CHECKTYPES; + euler_Type.tp_flags |= Py_TPFLAGS_CHECKTYPES; + quaternion_Type.tp_flags |= Py_TPFLAGS_CHECKTYPES; +#endif if( PyType_Ready( &vector_Type ) < 0 ) return NULL; From 689abe000dae8a36e4afe29ad01528408ae20e8c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Jul 2009 18:47:08 +0000 Subject: [PATCH 185/512] 2.5: bugfix for BLI_is_writable, made render with Save Buffers not work anymore. Now it first tries to open the file without truncating, and only then tries to create a new file. --- source/blender/blenlib/intern/fileops.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index ffebd05f2f6..917537bf03d 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -153,10 +153,24 @@ int BLI_is_writable(char *filename) { int file; + /* first try to open without creating */ file = open(filename, O_BINARY | O_RDWR, 0666); - if (file < 0) - return 0; + if (file < 0) { + /* now try to open and create. a test without actually + * creating a file would be nice, but how? */ + file = open(filename, O_BINARY | O_RDWR | O_CREAT, 0666); + + if(file < 0) { + return 0; + } + else { + /* success, delete the file we create */ + close(file); + BLI_delete(filename, 0, 0); + return 1; + } + } else { close(file); return 1; From 41fb3626f3d7c1e75a31aebeb1e488f59aeedf68 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Jul 2009 19:09:13 +0000 Subject: [PATCH 186/512] 2.5: Render * UI layout for scene buttons has quite some changes, I tried to better organize things according to the pipeline, and also showing important properties by default, and collapsing less important ones. Some changes compared to 2.4x: * Panorama is now a Camera property. * Sequence and Compositing are now enabled by default, but will only do something when there is a node tree using nodes, or a strip in the sequence editor. * Enabling Full Sample now automatically enables Save Buffers too. * Stamp option to include info in file is removed, it now simply always does this if one of the stamp infos is enabled. * Xvid, H.264 and Ogg Theora are now directly in the file format menu, but still using FFMPEG. Unfortunately Ogg is broken at the moment (also in 2.4x), so that's disabled. And Xvid crashes on 64bit linux, maybe solvable by upgrading extern/xvidcore/, using ubuntu libs makes it work. * Organized file format menu by image/movie types. Added: * Render layers RNA wrapped, operatorized, layouted. * FFMPEG format/codec options are now working. Defaults changed: * Compositing & Sequencer enabled. * Tiles set to 8x8. * Time/Date/Frame/Scene/Camera/Filename enabled for stamp. --- release/ui/buttons_data_camera.py | 15 +- release/ui/buttons_scene.py | 419 +++++++++++------ source/blender/blenkernel/BKE_writeffmpeg.h | 22 +- source/blender/blenkernel/intern/image.c | 11 +- source/blender/blenkernel/intern/scene.c | 17 +- source/blender/blenkernel/intern/sequence.c | 7 +- source/blender/blenkernel/intern/writeavi.c | 3 +- .../blender/blenkernel/intern/writeffmpeg.c | 317 +++++++++++++ source/blender/blenloader/intern/readfile.c | 16 + .../editors/interface/interface_layout.c | 9 +- .../editors/interface/interface_regions.c | 6 +- source/blender/editors/screen/screen_ops.c | 36 ++ .../editors/space_buttons/buttons_intern.h | 3 + .../editors/space_buttons/buttons_ops.c | 74 +++ .../editors/space_buttons/space_buttons.c | 3 + .../blender/editors/space_file/writeimage.c | 3 + source/blender/makesdna/DNA_camera_types.h | 1 + source/blender/makesdna/DNA_scene_types.h | 8 +- source/blender/makesrna/SConscript | 26 +- source/blender/makesrna/intern/CMakeLists.txt | 1 + source/blender/makesrna/intern/Makefile | 1 + source/blender/makesrna/intern/SConscript | 17 +- source/blender/makesrna/intern/rna_camera.c | 5 + source/blender/makesrna/intern/rna_scene.c | 444 +++++++++++++++--- .../blender/render/intern/source/initrender.c | 3 +- .../blender/render/intern/source/pipeline.c | 21 +- 26 files changed, 1231 insertions(+), 257 deletions(-) diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py index f583f9679bc..7ca70029e49 100644 --- a/release/ui/buttons_data_camera.py +++ b/release/ui/buttons_data_camera.py @@ -38,7 +38,6 @@ class DATA_PT_camera(DataButtonsPanel): cam = context.camera - layout.itemS() layout.itemR(cam, "type", expand=True) row = layout.row(align=True) @@ -51,6 +50,10 @@ class DATA_PT_camera(DataButtonsPanel): elif cam.type == 'ORTHO': row.itemR(cam, "ortho_scale") + + split = layout.split() + split.itemR(cam, "panorama"); + split.itemL() split = layout.split() @@ -64,9 +67,13 @@ class DATA_PT_camera(DataButtonsPanel): sub.itemR(cam, "clip_start", text="Start") sub.itemR(cam, "clip_end", text="End") - row = layout.row() - row.itemR(cam, "dof_object") - row.itemR(cam, "dof_distance") + split = layout.split() + col = split.column() + col.itemL(text="Depth of Field:") + col.itemR(cam, "dof_object", text="") + col = split.column() + col.itemL() + col.itemR(cam, "dof_distance", text="Distance") class DATA_PT_camera_display(DataButtonsPanel): __idname__ = "DATA_PT_camera_display" diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index a774b887df5..50cb8f7dbfd 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -6,6 +6,103 @@ class RenderButtonsPanel(bpy.types.Panel): __region_type__ = "WINDOW" __context__ = "scene" +class RENDER_PT_render(RenderButtonsPanel): + __label__ = "Render" + + def draw(self, context): + layout = self.layout + rd = context.scene.render_data + + row = layout.row() + row.itemO("SCREEN_OT_render", text="Image", icon='ICON_IMAGE_COL') + row.item_booleanO("SCREEN_OT_render", "anim", True, text="Animation", icon='ICON_SEQUENCE') + + layout.itemR(rd, "display_mode", text="Display") + +class RENDER_PT_layers(RenderButtonsPanel): + __label__ = "Layers" + __default_closed__ = True + + def draw(self, context): + layout = self.layout + scene = context.scene + rd = scene.render_data + + split = layout.split() + split.itemL(text="Scene:") + split.column().itemR(scene, "visible_layers", text="") + + row = layout.row() + row.template_list(rd, "layers", rd, "active_layer_index", rows=2) + + col = row.column(align=True) + col.itemO("SCENE_OT_render_layer_add", icon="ICON_ZOOMIN", text="") + col.itemO("SCENE_OT_render_layer_remove", icon="ICON_ZOOMOUT", text="") + + rl = rd.layers[rd.active_layer_index] + + split = layout.split() + split.itemL(text="Layers:") + split.column().itemR(rl, "visible_layers", text="") + + layout.itemR(rl, "light_override", text="Light") + layout.itemR(rl, "material_override", text="Material") + + split = layout.split() + + col = split.column() + col.itemR(rl, "zmask") + row = col.row() + row.itemR(rl, "zmask_negate", text="Negate") + row.active = rl.zmask + col.itemR(rl, "all_z") + + col = split.column() + col.itemR(rl, "solid") + col.itemR(rl, "halo") + col.itemR(rl, "ztransp") + + col = split.column() + col.itemR(rl, "sky") + col.itemR(rl, "edge") + col.itemR(rl, "strand") + + if rl.zmask: + split = layout.split() + split.itemL(text="Zmask Layers:") + split.column().itemR(rl, "zmask_layers", text="") + + split = layout.split() + col = split.column() + col.itemL(text="Passes:") + col.itemR(rl, "pass_combined") + col.itemR(rl, "pass_z") + col.itemR(rl, "pass_vector") + col.itemR(rl, "pass_normal") + col.itemR(rl, "pass_uv") + col.itemR(rl, "pass_mist") + col.itemR(rl, "pass_object_index") + + col = split.column() + col.itemL() + col.itemR(rl, "pass_color") + col.itemR(rl, "pass_diffuse") + row = col.row() + row.itemR(rl, "pass_specular") + row.itemR(rl, "pass_specular_exclude", text="", icon="ICON_DOT") + row = col.row() + row.itemR(rl, "pass_shadow") + row.itemR(rl, "pass_shadow_exclude", text="", icon="ICON_DOT") + row = col.row() + row.itemR(rl, "pass_ao") + row.itemR(rl, "pass_ao_exclude", text="", icon="ICON_DOT") + row = col.row() + row.itemR(rl, "pass_reflection") + row.itemR(rl, "pass_reflection_exclude", text="", icon="ICON_DOT") + row = col.row() + row.itemR(rl, "pass_refraction") + row.itemR(rl, "pass_refraction_exclude", text="", icon="ICON_DOT") + class RENDER_PT_shading(RenderButtonsPanel): __label__ = "Shading" @@ -15,18 +112,82 @@ class RENDER_PT_shading(RenderButtonsPanel): split = layout.split() - sub = split.column() - sub.itemR(rd, "render_shadows", text="Shadows") - sub.itemR(rd, "render_sss", text="Subsurface Scattering") - sub.itemR(rd, "render_envmaps", text="Environment Map") - # sub.itemR(rd, "render_radiosity", text="Radio") + col = split.column() + col.itemR(rd, "render_shadows", text="Shadows") + col.itemR(rd, "render_sss", text="Subsurface Scattering") + col.itemR(rd, "render_envmaps", text="Environment Map") col = split.column() col.itemR(rd, "render_raytracing", text="Ray Tracing") + row = col.row() + row.active = rd.render_raytracing + row.itemR(rd, "octree_resolution", text="Octree") + col.itemR(rd, "alpha_mode", text="Alpha") + +class RENDER_PT_performance(RenderButtonsPanel): + __label__ = "Performance" + __default_closed__ = True + + def draw(self, context): + layout = self.layout + rd = context.scene.render_data + + split = layout.split() + + col = split.column(align=True) + col.itemL(text="Threads:") + col.row().itemR(rd, "threads_mode", expand=True) colsub = col.column() - colsub.active = rd.render_raytracing - colsub.itemR(rd, "octree_resolution", text="Octree") - col.itemR(rd, "dither_intensity", text="Dither", slider=True) + colsub.enabled = rd.threads_mode == 'THREADS_FIXED' + colsub.itemR(rd, "threads") + + col = split.column() + + sub = col.column(align=True) + sub.itemL(text="Tiles:") + sub.itemR(rd, "parts_x", text="X") + sub.itemR(rd, "parts_y", text="Y") + + split = layout.split() + + col = split.column() + col.itemL(text="Memory:") + row = col.row() + row.itemR(rd, "save_buffers") + row.enabled = not rd.full_sample + + col = split.column() + col.itemL() + col.itemR(rd, "free_image_textures") + col.active = rd.use_compositing + +class RENDER_PT_post_processing(RenderButtonsPanel): + __label__ = "Post Processing" + __default_closed__ = True + + def draw(self, context): + layout = self.layout + rd = context.scene.render_data + + split = layout.split() + + col = split.column() + col.itemR(rd, "use_compositing") + col.itemR(rd, "use_sequencer") + + col = split.column() + row = col.row() + row.itemR(rd, "fields", text="Fields") + rowsub = row.row() + rowsub.active = rd.fields + rowsub.itemR(rd, "fields_still", text="Still") + rowsub = col.row() + rowsub.active = rd.fields + rowsub.itemR(rd, "field_order", expand=True) + + split = layout.split() + split.itemL() + split.itemR(rd, "dither_intensity", text="Dither", slider=True) class RENDER_PT_output(RenderButtonsPanel): __label__ = "Output" @@ -35,96 +196,115 @@ class RENDER_PT_output(RenderButtonsPanel): layout = self.layout rd = context.scene.render_data - layout.itemR(rd, "display_mode", text="Display") - - layout.itemR(rd, "output_path") - + layout.itemR(rd, "output_path", text="") + split = layout.split() - col = split.column() - col.itemR(rd, "file_extensions") - col.itemR(rd, "fields", text="Fields") - colsub = col.column() - colsub.active = rd.fields - colsub.itemR(rd, "fields_still", text="Still") - colsub.row().itemR(rd, "field_order", expand=True) - - col = split.column() - col.itemR(rd, "color_mode") - col.itemR(rd, "alpha_mode") - col.itemL(text="Distributed Rendering:") col.itemR(rd, "placeholders") col.itemR(rd, "no_overwrite") - - layout.itemR(rd, "file_format", text="Format") - - split = layout.split() - + col = split.column() - + col.itemR(rd, "file_format", text="") + col.itemR(rd, "file_extensions") + if rd.file_format in ('AVIJPEG', 'JPEG'): - col.itemR(rd, "quality", slider=True) + split = layout.split() + split.itemR(rd, "color_mode", text="Color") + split.itemR(rd, "quality", slider=True) elif rd.file_format == 'OPENEXR': - col.itemR(rd, "exr_codec") - col.itemR(rd, "exr_half") + split = layout.split() col = split.column() + col.itemR(rd, "color_mode", text="Color") + col.itemR(rd, "exr_codec") + + subsplit = split.split() + col = subsplit.column() + col.itemR(rd, "exr_half") col.itemR(rd, "exr_zbuf") + col = subsplit.column() col.itemR(rd, "exr_preview") elif rd.file_format == 'JPEG2000': - row = layout.row() - row.itemR(rd, "jpeg_preset") split = layout.split() col = split.column() + col.itemR(rd, "color_mode", text="Color") col.itemL(text="Depth:") col.row().itemR(rd, "jpeg_depth", expand=True) + col = split.column() + col.itemR(rd, "jpeg_preset", text="") col.itemR(rd, "jpeg_ycc") col.itemR(rd, "exr_preview") elif rd.file_format in ('CINEON', 'DPX'): + split = layout.split() + col = split.column() + col.itemR(rd, "color_mode", text="Color") col.itemR(rd, "cineon_log", text="Convert to Log") - colsub = col.column() - colsub.active = rd.cineon_log - colsub.itemR(rd, "cineon_black", text="Black") - colsub.itemR(rd, "cineon_white", text="White") - colsub.itemR(rd, "cineon_gamma", text="Gamma") + + col = split.column(align=True) + col.active = rd.cineon_log + col.itemR(rd, "cineon_black", text="Black") + col.itemR(rd, "cineon_white", text="White") + col.itemR(rd, "cineon_gamma", text="Gamma") elif rd.file_format == 'TIFF': - col.itemR(rd, "tiff_bit") - - elif rd.file_format == 'FFMPEG': - #row = layout.row() - #row.itemR(rd, "ffmpeg_format") - #row.itemR(rd, "ffmpeg_codec") split = layout.split() + split.itemR(rd, "color_mode", text="Color") + split.itemR(rd, "tiff_bit") - col = split.column() - col.itemR(rd, "ffmpeg_video_bitrate") - col.itemL(text="Rate:") - col.itemR(rd, "ffmpeg_minrate", text="Minimum") - col.itemR(rd, "ffmpeg_maxrate", text="Maximum") - col.itemR(rd, "ffmpeg_buffersize", text="Buffer") - - col = split.column() - col.itemR(rd, "ffmpeg_gopsize") - col.itemR(rd, "ffmpeg_autosplit") - col.itemL(text="Mux:") - col.itemR(rd, "ffmpeg_muxrate", text="Rate") - col.itemR(rd, "ffmpeg_packetsize", text="Packet Size") - - row = layout.row() - row.itemL(text="Audio:") - row = layout.row() - #row.itemR(rd, "ffmpeg_audio_codec") - + else: split = layout.split() + split.itemR(rd, "color_mode", text="Color") + split.itemL() + +class RENDER_PT_encoding(RenderButtonsPanel): + __label__ = "Encoding" + __default_closed__ = True - col = split.column() - col.itemR(rd, "ffmpeg_audio_bitrate") - col = split.column() - col.itemR(rd, "ffmpeg_multiplex_audio") + def poll(self, context): + rd = context.scene.render_data + return rd.file_format in ('FFMPEG', 'XVID', 'H264', 'THEORA') + + def draw(self, context): + layout = self.layout + rd = context.scene.render_data + + split = layout.split() + split.itemR(rd, "ffmpeg_format") + if rd.ffmpeg_format in ('AVI', 'QUICKTIME', 'MKV', 'OGG'): + split.itemR(rd, "ffmpeg_codec") + else: + split.itemL() + + split = layout.split() + + col = split.column() + col.itemR(rd, "ffmpeg_video_bitrate") + col.itemL(text="Rate:") + col.itemR(rd, "ffmpeg_minrate", text="Minimum") + col.itemR(rd, "ffmpeg_maxrate", text="Maximum") + col.itemR(rd, "ffmpeg_buffersize", text="Buffer") + + col = split.column() + col.itemR(rd, "ffmpeg_gopsize") + col.itemR(rd, "ffmpeg_autosplit") + col.itemL(text="Mux:") + col.itemR(rd, "ffmpeg_muxrate", text="Rate") + col.itemR(rd, "ffmpeg_packetsize", text="Packet Size") + + row = layout.row() + row.itemL(text="Audio:") + row = layout.row() + row.itemR(rd, "ffmpeg_audio_codec") + + split = layout.split() + + col = split.column() + col.itemR(rd, "ffmpeg_audio_bitrate") + col = split.column() + col.itemR(rd, "ffmpeg_multiplex_audio") class RENDER_PT_antialiasing(RenderButtonsPanel): __label__ = "Anti-Aliasing" @@ -143,57 +323,14 @@ class RENDER_PT_antialiasing(RenderButtonsPanel): split = layout.split() - sub = split.column() - sub.itemL(text="Samples:") - sub.row().itemR(rd, "antialiasing_samples", expand=True) - sub.itemR(rd, "pixel_filter") + col = split.column() + col.row().itemR(rd, "antialiasing_samples", expand=True) + col.itemR(rd, "full_sample") col = split.column() + col.itemR(rd, "pixel_filter", text="Filter") col.itemR(rd, "filter_size", text="Size", slider=True) - col.itemR(rd, "save_buffers") - colsub = col.column() - colsub.active = rd.save_buffers - colsub.itemR(rd, "full_sample") - -class RENDER_PT_render(RenderButtonsPanel): - __label__ = "Render" - - def draw(self, context): - layout = self.layout - rd = context.scene.render_data - - row = layout.row() - row.itemO("SCREEN_OT_render", text="Render Still", icon='ICON_IMAGE_COL') - row.item_booleanO("SCREEN_OT_render", "anim", True, text="Render Animation", icon='ICON_SEQUENCE') - - row = layout.row() - row.itemR(rd, "do_composite") - row.itemR(rd, "do_sequence") - rowsub = layout.row() - rowsub.active = rd.do_composite - rowsub.itemR(rd, "free_image_textures") - - split = layout.split() - - col = split.column(align=True) - col.itemL(text="Threads:") - col.row().itemR(rd, "threads_mode", expand=True) - colsub = col.column() - colsub.active = rd.threads_mode == 'THREADS_FIXED' - colsub.itemR(rd, "threads") - - sub = split.column(align=True) - sub.itemL(text="Tiles:") - sub.itemR(rd, "parts_x", text="X") - sub.itemR(rd, "parts_y", text="Y") - - split = layout.split() - sub = split.column() - sub = split.column() - sub.itemR(rd, "panorama") - - # row.itemR(rd, "backbuf") - + class RENDER_PT_dimensions(RenderButtonsPanel): __label__ = "Dimensions" @@ -215,13 +352,13 @@ class RENDER_PT_dimensions(RenderButtonsPanel): sub.itemL(text="Aspect Ratio:") sub.itemR(rd, "pixel_aspect_x", text="X") sub.itemR(rd, "pixel_aspect_y", text="Y") - - col = col.column(align=False) - col.itemR(rd, "border", text="Border") - colsub = col.column() - colsub.active = rd.border - colsub.itemR(rd, "crop_to_border") + row = col.row() + row.itemR(rd, "border", text="Border") + rowsub = row.row() + rowsub.active = rd.border + rowsub.itemR(rd, "crop_to_border", text="Crop") + col = split.column(align=True) col.itemL(text="Frame Range:") col.itemR(scene, "start_frame", text="Start") @@ -239,13 +376,13 @@ class RENDER_PT_stamp(RenderButtonsPanel): rd = context.scene.render_data layout = self.layout - layout.itemR(rd, "stamp", text="") + layout.itemR(rd, "render_stamp", text="") def draw(self, context): layout = self.layout rd = context.scene.render_data - layout.active = rd.stamp + layout.active = rd.render_stamp split = layout.split() @@ -253,26 +390,32 @@ class RENDER_PT_stamp(RenderButtonsPanel): col.itemR(rd, "stamp_time", text="Time") col.itemR(rd, "stamp_date", text="Date") col.itemR(rd, "stamp_frame", text="Frame") - col.itemR(rd, "stamp_camera", text="Scene") - col.itemR(rd, "stamp_marker", text="Marker") + col.itemR(rd, "stamp_scene", text="Scene") + col.itemR(rd, "stamp_camera", text="Camera") col.itemR(rd, "stamp_filename", text="Filename") + col.itemR(rd, "stamp_marker", text="Marker") col.itemR(rd, "stamp_sequence_strip", text="Seq. Strip") - col.itemR(rd, "stamp_note", text="Note") - colsub = col.column() - colsub.active = rd.stamp_note - colsub.itemR(rd, "stamp_note_text", text="") - + sub = split.column() - sub.itemR(rd, "render_stamp") - colsub = sub.column() - colsub.active = rd.render_stamp - colsub.itemR(rd, "stamp_foreground", slider=True) - colsub.itemR(rd, "stamp_background", slider=True) - colsub.itemR(rd, "stamp_font_size", text="Font Size") + sub.active = rd.render_stamp + sub.itemR(rd, "stamp_foreground", slider=True) + sub.itemR(rd, "stamp_background", slider=True) + sub.itemR(rd, "stamp_font_size", text="Font Size") + + row = layout.split(percentage=0.2) + row.itemR(rd, "stamp_note", text="Note") + rowsub = row.row() + rowsub.active = rd.stamp_note + rowsub.itemR(rd, "stamp_note_text", text="") bpy.types.register(RENDER_PT_render) bpy.types.register(RENDER_PT_dimensions) bpy.types.register(RENDER_PT_antialiasing) +bpy.types.register(RENDER_PT_layers) bpy.types.register(RENDER_PT_shading) +bpy.types.register(RENDER_PT_post_processing) +bpy.types.register(RENDER_PT_performance) bpy.types.register(RENDER_PT_output) +bpy.types.register(RENDER_PT_encoding) bpy.types.register(RENDER_PT_stamp) + diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h index dba3944a58d..be136bd9d6d 100644 --- a/source/blender/blenkernel/BKE_writeffmpeg.h +++ b/source/blender/blenkernel/BKE_writeffmpeg.h @@ -46,19 +46,29 @@ extern "C" { #define FFMPEG_MKV 9 #define FFMPEG_OGG 10 -#define FFMPEG_PRESET_NONE 0 -#define FFMPEG_PRESET_DVD 1 -#define FFMPEG_PRESET_SVCD 2 -#define FFMPEG_PRESET_VCD 3 -#define FFMPEG_PRESET_DV 4 -#define FFMPEG_PRESET_H264 5 +#define FFMPEG_PRESET_NONE 0 +#define FFMPEG_PRESET_DVD 1 +#define FFMPEG_PRESET_SVCD 2 +#define FFMPEG_PRESET_VCD 3 +#define FFMPEG_PRESET_DV 4 +#define FFMPEG_PRESET_H264 5 +#define FFMPEG_PRESET_THEORA 6 +#define FFMPEG_PRESET_XVID 7 +struct IDProperty; struct RenderData; extern void start_ffmpeg(struct RenderData *rd, int rectx, int recty); extern void end_ffmpeg(void); extern void append_ffmpeg(struct RenderData *rd, int frame, int *pixels, int rectx, int recty); +extern void ffmpeg_set_preset(struct RenderData *rd, int preset); +extern void ffmpeg_verify_image_type(struct RenderData *rd); + +extern struct IDProperty *ffmpeg_property_add(struct RenderData *Rd, char *type, int opt_index, int parent_index); +extern int ffmpeg_property_add_string(struct RenderData *rd, const char *type, const char *str); +extern void ffmpeg_property_del(struct RenderData *rd, void *type, void *prop_); + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 754ec06f23f..93924d1ea0d 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -860,6 +860,9 @@ int BKE_imtype_is_movie(int imtype) case R_AVICODEC: case R_QUICKTIME: case R_FFMPEG: + case R_H264: + case R_THEORA: + case R_XVID: case R_FRAMESERVER: return 1; } @@ -870,7 +873,7 @@ void BKE_add_image_extension(Scene *scene, char *string, int imtype) { char *extension=""; - if(scene->r.imtype== R_IRIS) { + if(imtype== R_IRIS) { if(!BLI_testextensie(string, ".rgb")) extension= ".rgb"; } @@ -882,7 +885,7 @@ void BKE_add_image_extension(Scene *scene, char *string, int imtype) if(!BLI_testextensie(string, ".hdr")) extension= ".hdr"; } - else if(imtype==R_PNG || imtype==R_FFMPEG) { + else if (ELEM5(imtype, R_PNG, R_FFMPEG, R_H264, R_THEORA, R_XVID)) { if(!BLI_testextensie(string, ".png")) extension= ".png"; } @@ -1230,7 +1233,7 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt else if ((imtype==R_RADHDR)) { ibuf->ftype= RADHDR; } - else if (imtype==R_PNG || imtype==R_FFMPEG) { + else if (ELEM5(imtype, R_PNG, R_FFMPEG, R_H264, R_THEORA, R_XVID)) { ibuf->ftype= PNG; } #ifdef WITH_DDS @@ -1305,7 +1308,7 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt BLI_make_existing_file(name); - if(scene->r.scemode & R_STAMP_INFO) + if(scene->r.stamp & R_STAMP_ALL) BKE_stamp_info(scene, ibuf); ok = IMB_saveiff(ibuf, name, IB_rect | IB_zbuf | IB_zbuffloat); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 23da5c66850..598336886c2 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -204,17 +204,17 @@ Scene *add_scene(char *name) sce= alloc_libblock(&G.main->scene, ID_SCE, name); sce->lay= 1; - sce->r.mode= R_GAMMA; + sce->r.mode= R_GAMMA|R_OSA|R_SHADOW|R_SSS|R_ENVMAP|R_RAYTRACE; sce->r.cfra= 1; sce->r.sfra= 1; sce->r.efra= 250; - sce->r.xsch= 320; - sce->r.ysch= 256; + sce->r.xsch= 1920; + sce->r.ysch= 1080; sce->r.xasp= 1; sce->r.yasp= 1; - sce->r.xparts= 4; - sce->r.yparts= 4; - sce->r.size= 100; + sce->r.xparts= 8; + sce->r.yparts= 8; + sce->r.size= 25; sce->r.planes= 24; sce->r.quality= 90; sce->r.framapto= 100; @@ -225,7 +225,7 @@ Scene *add_scene(char *name) sce->r.ocres = 128; sce->r.bake_mode= 1; /* prevent to include render stuff here */ - sce->r.bake_filter= 2; + sce->r.bake_filter= 8; sce->r.bake_osa= 5; sce->r.bake_flag= R_BAKE_CLEAR; sce->r.bake_normal_space= R_BAKE_SPACE_TANGENT; @@ -234,6 +234,9 @@ Scene *add_scene(char *name) sce->r.yplay= 480; sce->r.freqplay= 60; sce->r.depth= 32; + + sce->r.scemode= R_DOCOMP|R_DOSEQ|R_EXTENSION; + sce->r.stamp= R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_SCENE|R_STAMP_CAMERA; sce->r.threads= 1; diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c index c8d95929027..3eeecd94a85 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequence.c @@ -2017,7 +2017,8 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int RenderResult rres; int doseq, rendering= G.rendering; char scenename[64]; - int sce_valid =sce&& (sce->camera || sce->r.scemode & R_DOSEQ); + int have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first; + int sce_valid =sce && (sce->camera || have_seq); if (se->ibuf == NULL && sce_valid && !build_proxy_run) { se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); @@ -2038,7 +2039,7 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int } else if (se->ibuf==NULL && sce_valid) { /* no need to display a waitcursor on sequencer scene strips */ - if (!(sce->r.scemode & R_DOSEQ)) + if (!have_seq) waitcursor(1); /* Hack! This function can be called from do_render_seq(), in that case @@ -2093,7 +2094,7 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int // XXX #if 0 if((G.f & G_PLAYANIM)==0 /* bad, is set on do_render_seq */ - && !(sce->r.scemode & R_DOSEQ) + && !have_seq && !build_proxy_run) #endif diff --git a/source/blender/blenkernel/intern/writeavi.c b/source/blender/blenkernel/intern/writeavi.c index f84bd690347..cfbe3f629d6 100644 --- a/source/blender/blenkernel/intern/writeavi.c +++ b/source/blender/blenkernel/intern/writeavi.c @@ -40,6 +40,7 @@ #include "BLI_blenlib.h" #include "BKE_global.h" +#include "BKE_utildefines.h" #include "BKE_writeavi.h" #include "AVI_avi.h" @@ -87,7 +88,7 @@ bMovieHandle *BKE_get_movie_handle(int imtype) } #endif #ifdef WITH_FFMPEG - if (imtype == R_FFMPEG) { + if (ELEM4(imtype, R_FFMPEG, R_H264, R_XVID, R_THEORA)) { mh.start_movie = start_ffmpeg; mh.append_movie = append_ffmpeg; mh.end_movie = end_ffmpeg; diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 25dc6fa2fd7..5e3c8024524 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -937,5 +937,322 @@ void end_ffmpeg(void) img_convert_ctx = 0; } } + +/* properties */ + +void ffmpeg_property_del(RenderData *rd, void *type, void *prop_) +{ + struct IDProperty *prop = (struct IDProperty *) prop_; + IDProperty * group; + + if (!rd->ffcodecdata.properties) { + return; + } + + group = IDP_GetPropertyFromGroup( + rd->ffcodecdata.properties, (char*) type); + if (group && prop) { + IDP_RemFromGroup(group, prop); + IDP_FreeProperty(prop); + MEM_freeN(prop); + } +} + +IDProperty *ffmpeg_property_add(RenderData *rd, char * type, int opt_index, int parent_index) +{ + AVCodecContext c; + const AVOption * o; + const AVOption * parent; + IDProperty * group; + IDProperty * prop; + IDPropertyTemplate val; + int idp_type; + char name[256]; + + avcodec_get_context_defaults(&c); + + o = c.av_class->option + opt_index; + parent = c.av_class->option + parent_index; + + if (!rd->ffcodecdata.properties) { + IDPropertyTemplate val; + + rd->ffcodecdata.properties + = IDP_New(IDP_GROUP, val, "ffmpeg"); + } + + group = IDP_GetPropertyFromGroup( + rd->ffcodecdata.properties, (char*) type); + + if (!group) { + IDPropertyTemplate val; + + group = IDP_New(IDP_GROUP, val, (char*) type); + IDP_AddToGroup(rd->ffcodecdata.properties, group); + } + + if (parent_index) { + sprintf(name, "%s:%s", parent->name, o->name); + } else { + strcpy(name, o->name); + } + + fprintf(stderr, "ffmpeg_property_add: %s %d %d %s\n", + type, parent_index, opt_index, name); + + prop = IDP_GetPropertyFromGroup(group, name); + if (prop) { + return prop; + } + + switch (o->type) { + case FF_OPT_TYPE_INT: + case FF_OPT_TYPE_INT64: + val.i = o->default_val; + idp_type = IDP_INT; + break; + case FF_OPT_TYPE_DOUBLE: + case FF_OPT_TYPE_FLOAT: + val.f = o->default_val; + idp_type = IDP_FLOAT; + break; + case FF_OPT_TYPE_STRING: + val.str = " "; + idp_type = IDP_STRING; + break; + case FF_OPT_TYPE_CONST: + val.i = 1; + idp_type = IDP_INT; + break; + default: + return NULL; + } + prop = IDP_New(idp_type, val, name); + IDP_AddToGroup(group, prop); + return prop; +} + +/* not all versions of ffmpeg include that, so here we go ... */ + +static const AVOption *my_av_find_opt(void *v, const char *name, + const char *unit, int mask, int flags){ + AVClass *c= *(AVClass**)v; + const AVOption *o= c->option; + + for(;o && o->name; o++){ + if(!strcmp(o->name, name) && + (!unit || (o->unit && !strcmp(o->unit, unit))) && + (o->flags & mask) == flags ) + return o; + } + return NULL; +} + +int ffmpeg_property_add_string(RenderData *rd, const char * type, const char * str) +{ + AVCodecContext c; + const AVOption * o = 0; + const AVOption * p = 0; + char name_[128]; + char * name; + char * param; + IDProperty * prop; + + avcodec_get_context_defaults(&c); + + strncpy(name_, str, 128); + + name = name_; + while (*name == ' ') name++; + + param = strchr(name, ':'); + + if (!param) { + param = strchr(name, ' '); + } + if (param) { + *param++ = 0; + while (*param == ' ') param++; + } + + o = my_av_find_opt(&c, name, NULL, 0, 0); + if (!o) { + return 0; + } + if (param && o->type == FF_OPT_TYPE_CONST) { + return 0; + } + if (param && o->type != FF_OPT_TYPE_CONST && o->unit) { + p = my_av_find_opt(&c, param, o->unit, 0, 0); + prop = ffmpeg_property_add(rd, + (char*) type, p - c.av_class->option, + o - c.av_class->option); + } else { + prop = ffmpeg_property_add(rd, + (char*) type, o - c.av_class->option, 0); + } + + + if (!prop) { + return 0; + } + + if (param && !p) { + switch (prop->type) { + case IDP_INT: + IDP_Int(prop) = atoi(param); + break; + case IDP_FLOAT: + IDP_Float(prop) = atof(param); + break; + case IDP_STRING: + strncpy(IDP_String(prop), param, prop->len); + break; + } + } + return 1; +} + +void ffmpeg_set_preset(RenderData *rd, int preset) +{ + int isntsc = (rd->frs_sec != 25); + + switch (preset) { + case FFMPEG_PRESET_VCD: + rd->ffcodecdata.type = FFMPEG_MPEG1; + rd->ffcodecdata.video_bitrate = 1150; + rd->xsch = 352; + rd->ysch = isntsc ? 240 : 288; + rd->ffcodecdata.gop_size = isntsc ? 18 : 15; + rd->ffcodecdata.rc_max_rate = 1150; + rd->ffcodecdata.rc_min_rate = 1150; + rd->ffcodecdata.rc_buffer_size = 40*8; + rd->ffcodecdata.mux_packet_size = 2324; + rd->ffcodecdata.mux_rate = 2352 * 75 * 8; + break; + + case FFMPEG_PRESET_SVCD: + rd->ffcodecdata.type = FFMPEG_MPEG2; + rd->ffcodecdata.video_bitrate = 2040; + rd->xsch = 480; + rd->ysch = isntsc ? 480 : 576; + rd->ffcodecdata.gop_size = isntsc ? 18 : 15; + rd->ffcodecdata.rc_max_rate = 2516; + rd->ffcodecdata.rc_min_rate = 0; + rd->ffcodecdata.rc_buffer_size = 224*8; + rd->ffcodecdata.mux_packet_size = 2324; + rd->ffcodecdata.mux_rate = 0; + break; + + case FFMPEG_PRESET_DVD: + rd->ffcodecdata.type = FFMPEG_MPEG2; + rd->ffcodecdata.video_bitrate = 6000; + rd->xsch = 720; + rd->ysch = isntsc ? 480 : 576; + rd->ffcodecdata.gop_size = isntsc ? 18 : 15; + rd->ffcodecdata.rc_max_rate = 9000; + rd->ffcodecdata.rc_min_rate = 0; + rd->ffcodecdata.rc_buffer_size = 224*8; + rd->ffcodecdata.mux_packet_size = 2048; + rd->ffcodecdata.mux_rate = 10080000; + break; + + case FFMPEG_PRESET_DV: + rd->ffcodecdata.type = FFMPEG_DV; + rd->xsch = 720; + rd->ysch = isntsc ? 480 : 576; + break; + + case FFMPEG_PRESET_H264: + rd->ffcodecdata.type = FFMPEG_AVI; + rd->ffcodecdata.codec = CODEC_ID_H264; + rd->ffcodecdata.video_bitrate = 6000; + rd->ffcodecdata.gop_size = isntsc ? 18 : 15; + rd->ffcodecdata.rc_max_rate = 9000; + rd->ffcodecdata.rc_min_rate = 0; + rd->ffcodecdata.rc_buffer_size = 224*8; + rd->ffcodecdata.mux_packet_size = 2048; + rd->ffcodecdata.mux_rate = 10080000; + + ffmpeg_property_add_string(rd, "video", "coder:vlc"); + ffmpeg_property_add_string(rd, "video", "flags:loop"); + ffmpeg_property_add_string(rd, "video", "cmp:chroma"); + ffmpeg_property_add_string(rd, "video", "partitions:parti4x4"); + ffmpeg_property_add_string(rd, "video", "partitions:partp8x8"); + ffmpeg_property_add_string(rd, "video", "partitions:partb8x8"); + ffmpeg_property_add_string(rd, "video", "me:hex"); + ffmpeg_property_add_string(rd, "video", "subq:5"); + ffmpeg_property_add_string(rd, "video", "me_range:16"); + ffmpeg_property_add_string(rd, "video", "keyint_min:25"); + ffmpeg_property_add_string(rd, "video", "sc_threshold:40"); + ffmpeg_property_add_string(rd, "video", "i_qfactor:0.71"); + ffmpeg_property_add_string(rd, "video", "b_strategy:1"); + + break; + + case FFMPEG_PRESET_THEORA: + case FFMPEG_PRESET_XVID: + if(preset == FFMPEG_PRESET_XVID) { + rd->ffcodecdata.type = FFMPEG_AVI; + rd->ffcodecdata.codec = CODEC_ID_XVID; + } + else if(preset == FFMPEG_PRESET_THEORA) { + rd->ffcodecdata.type = FFMPEG_OGG; // XXX broken + rd->ffcodecdata.codec = CODEC_ID_THEORA; + } + + rd->ffcodecdata.video_bitrate = 6000; + rd->ffcodecdata.gop_size = isntsc ? 18 : 15; + rd->ffcodecdata.rc_max_rate = 9000; + rd->ffcodecdata.rc_min_rate = 0; + rd->ffcodecdata.rc_buffer_size = 224*8; + rd->ffcodecdata.mux_packet_size = 2048; + rd->ffcodecdata.mux_rate = 10080000; + break; + + } +} + +void ffmpeg_verify_image_type(RenderData *rd) +{ + int audio= 0; + + if(rd->imtype == R_FFMPEG) { + if(rd->ffcodecdata.type <= 0 || + rd->ffcodecdata.codec <= 0 || + rd->ffcodecdata.audio_codec <= 0 || + rd->ffcodecdata.video_bitrate <= 1) { + + rd->ffcodecdata.codec = CODEC_ID_MPEG2VIDEO; + ffmpeg_set_preset(rd, FFMPEG_PRESET_DVD); + } + + audio= 1; + } + else if(rd->imtype == R_H264) { + if(rd->ffcodecdata.codec != CODEC_ID_H264) { + ffmpeg_set_preset(rd, FFMPEG_PRESET_H264); + audio= 1; + } + } + else if(rd->imtype == R_XVID) { + if(rd->ffcodecdata.codec != CODEC_ID_XVID) { + ffmpeg_set_preset(rd, FFMPEG_PRESET_XVID); + audio= 1; + } + } + else if(rd->imtype == R_THEORA) { + if(rd->ffcodecdata.codec != CODEC_ID_THEORA) { + ffmpeg_set_preset(rd, FFMPEG_PRESET_THEORA); + audio= 1; + } + } + + if(audio && rd->ffcodecdata.audio_codec <= 0) { + rd->ffcodecdata.audio_codec = CODEC_ID_MP2; + rd->ffcodecdata.audio_bitrate = 128; + } +} + #endif diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 21e173bd87d..06092cc97d4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9098,7 +9098,9 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (main->versionfile < 250) { bScreen *screen; Scene *scene; + Base *base; Material *ma; + Camera *cam; Mesh *me; Scene *sce; Tex *tx; @@ -9132,6 +9134,20 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for(sce= main->scene.first; sce; sce= sce->id.next) { if(sce->nodetree && strlen(sce->nodetree->id.name)==0) strcpy(sce->nodetree->id.name, "NTComposit Nodetree"); + + /* move to cameras */ + if(sce->r.scemode & R_PANORAMA) { + for(base=scene->base.first; base; base=base->next) { + ob= newlibadr(fd, lib, base->object); + + if(ob->type == OB_CAMERA && !ob->id.lib) { + cam= newlibadr(fd, lib, ob->data); + cam->flag |= CAM_PANORAMA; + } + } + + sce->r.scemode &= ~R_PANORAMA; + } } /* and texture trees */ for(tx= main->tex.first; tx; tx= tx->id.next) { diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 7fa0bf6426f..284da29f0d2 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -466,13 +466,18 @@ static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, i uiLayout *sub; uiBut *but; PropertySubType subtype; + int labelw; sub= uiLayoutRow(layout, 0); uiBlockSetCurLayout(block, sub); if(strcmp(name, "") != 0) { - w= w/2; - uiDefBut(block, LABEL, 0, name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + /* XXX UI_GetStringWidth is not accurate + labelw= UI_GetStringWidth(name); + CLAMP(labelw, w/4, 3*w/4);*/ + labelw= w/2; + uiDefBut(block, LABEL, 0, name, x, y, labelw, h, NULL, 0.0, 0.0, 0, 0, ""); + w= w-labelw; } subtype= RNA_property_subtype(prop); diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index edde575f695..c1129db8ebe 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -374,8 +374,10 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) if(ELEM3(but->type, TEX, IDPOIN, SEARCH_MENU)) { /* full string */ ui_get_but_string(but, buf, sizeof(buf)); - BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Value: %s", buf); - data->totline++; + if(buf[0]) { + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Value: %s", buf); + data->totline++; + } } if(but->rnaprop) { diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index c3b68eb74ce..113e7249e65 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2320,6 +2320,40 @@ static ScrArea *find_area_showing_r_result(bContext *C) return sa; } +static ScrArea *find_area_image_empty(bContext *C) +{ + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa; + SpaceImage *sima; + + /* find an imagewindow showing render result */ + for(sa=sc->areabase.first; sa; sa= sa->next) { + if(sa->spacetype==SPACE_IMAGE) { + sima= sa->spacedata.first; + if(!sima->image) + break; + } + } + return sa; +} + +static ScrArea *find_empty_image_area(bContext *C) +{ + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa; + SpaceImage *sima; + + /* find an imagewindow showing render result */ + for(sa=sc->areabase.first; sa; sa= sa->next) { + if(sa->spacetype==SPACE_IMAGE) { + sima= sa->spacedata.first; + if(!sima->image) + break; + } + } + return sa; +} + static void screen_set_image_output(bContext *C) { Scene *scene= CTX_data_scene(C); @@ -2334,6 +2368,8 @@ static void screen_set_image_output(bContext *C) else { sa= find_area_showing_r_result(C); + if(sa==NULL) + sa= find_area_image_empty(C); if(sa==NULL) { /* find largest open non-image area */ diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index f16a232f26d..f09f35589b9 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -80,5 +80,8 @@ void PARTICLE_OT_remove_keyed_target(struct wmOperatorType *ot); void PARTICLE_OT_keyed_target_move_up(struct wmOperatorType *ot); void PARTICLE_OT_keyed_target_move_down(struct wmOperatorType *ot); +void SCENE_OT_render_layer_add(struct wmOperatorType *ot); +void SCENE_OT_render_layer_remove(struct wmOperatorType *ot); + #endif /* ED_BUTTONS_INTERN_H */ diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 6fb52c61131..fb1e9d1214d 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -33,6 +33,7 @@ #include "DNA_curve_types.h" #include "DNA_object_types.h" #include "DNA_material_types.h" +#include "DNA_node_types.h" #include "DNA_texture_types.h" #include "DNA_scene_types.h" #include "DNA_world_types.h" @@ -43,7 +44,9 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_material.h" +#include "BKE_node.h" #include "BKE_particle.h" +#include "BKE_scene.h" #include "BKE_texture.h" #include "BKE_utildefines.h" #include "BKE_world.h" @@ -689,3 +692,74 @@ void PARTICLE_OT_keyed_target_move_down(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/********************** render layer operators *********************/ + +static int render_layer_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + + scene_add_render_layer(scene); + scene->r.actlay= BLI_countlist(&scene->r.layers) - 1; + + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); + + return OPERATOR_FINISHED; +} + +void SCENE_OT_render_layer_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Render Layer"; + ot->idname= "SCENE_OT_render_layer_add"; + + /* api callbacks */ + ot->exec= render_layer_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int render_layer_remove_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + SceneRenderLayer *rl; + int act= scene->r.actlay; + + if(BLI_countlist(&scene->r.layers) <= 1) + return OPERATOR_CANCELLED; + + rl= BLI_findlink(&scene->r.layers, scene->r.actlay); + BLI_remlink(&scene->r.layers, rl); + MEM_freeN(rl); + + scene->r.actlay= 0; + + if(scene->nodetree) { + bNode *node; + for(node= scene->nodetree->nodes.first; node; node= node->next) { + if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) { + if(node->custom1==act) + node->custom1= 0; + else if(node->custom1>act) + node->custom1--; + } + } + } + + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); + + return OPERATOR_FINISHED; +} + +void SCENE_OT_render_layer_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Render Layer"; + ot->idname= "SCENE_OT_render_layer_remove"; + + /* api callbacks */ + ot->exec= render_layer_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 6cdb4dbf93d..17f55c9395e 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -228,6 +228,9 @@ void buttons_operatortypes(void) WM_operatortype_append(PARTICLE_OT_remove_keyed_target); WM_operatortype_append(PARTICLE_OT_keyed_target_move_up); WM_operatortype_append(PARTICLE_OT_keyed_target_move_down); + + WM_operatortype_append(SCENE_OT_render_layer_add); + WM_operatortype_append(SCENE_OT_render_layer_remove); } void buttons_keymap(struct wmWindowManager *wm) diff --git a/source/blender/editors/space_file/writeimage.c b/source/blender/editors/space_file/writeimage.c index 25890953320..ac15ed93ad0 100644 --- a/source/blender/editors/space_file/writeimage.c +++ b/source/blender/editors/space_file/writeimage.c @@ -153,6 +153,9 @@ void save_image_filesel_str(Scene *scene, char *str) strcpy(str, "Save Radiance HDR"); break; case R_FFMPEG: + case R_H264: + case R_XVID: + case R_THEORA: case R_PNG: strcpy(str, "Save PNG"); break; diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h index 7a504efdd2a..8ba7fa8b58d 100644 --- a/source/blender/makesdna/DNA_camera_types.h +++ b/source/blender/makesdna/DNA_camera_types.h @@ -79,6 +79,7 @@ typedef struct Camera { #define CAM_SHOWNAME 16 #define CAM_ANGLETOGGLE 32 #define CAM_DS_EXPAND 64 +#define CAM_PANORAMA 128 /* yafray: dof sampling switch */ #define CAM_YF_NO_QMC 512 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index c71aa81147d..7a6cbced45e 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -635,7 +635,7 @@ typedef struct Scene { #define R_FIELDSTILL 0x0080 #define R_RADIO 0x0100 #define R_BORDER 0x0200 -#define R_PANORAMA 0x0400 +#define R_PANORAMA 0x0400 /* deprecated as scene option, still used in renderer */ #define R_CROP 0x0800 #define R_COSMO 0x1000 #define R_ODDFIELD 0x2000 @@ -694,7 +694,7 @@ typedef struct Scene { #define R_COMP_FREE 0x0800 #define R_NO_IMAGE_LOAD 0x1000 #define R_NO_TEX 0x2000 -#define R_STAMP_INFO 0x4000 +#define R_STAMP_INFO 0x4000 /* deprecated */ #define R_FULL_SAMPLE 0x8000 #define R_COMP_RERENDER 0x10000 #define R_RECURS_PROTECTION 0x20000 @@ -710,6 +710,7 @@ typedef struct Scene { #define R_STAMP_MARKER 0x0080 #define R_STAMP_FILENAME 0x0100 #define R_STAMP_SEQSTRIP 0x0200 +#define R_STAMP_ALL (R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_CAMERA|R_STAMP_SCENE|R_STAMP_NOTE|R_STAMP_MARKER|R_STAMP_FILENAME|R_STAMP_SEQSTRIP) /* alphamode */ #define R_ADDSKY 0 @@ -746,6 +747,9 @@ typedef struct Scene { #define R_MULTILAYER 28 #define R_DDS 29 #define R_JP2 30 +#define R_H264 31 +#define R_XVID 32 +#define R_THEORA 33 /* subimtype, flag options for imtype */ #define R_OPENEXR_HALF 1 diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index 967636fe36b..89118850b20 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -9,4 +9,28 @@ objs += o incs = '#/intern/guardedalloc ../blenkernel ../blenlib ../makesdna intern .' incs += ' ../windowmanager ../editors/include ../imbuf' -env.BlenderLib ( 'bf_rna', objs, Split(incs), [], libtype=['core'], priority = [195] ) +defs = [] + +if env['WITH_BF_OPENEXR']: + defs.append('WITH_OPENEXR') + +if env['WITH_BF_OPENJPEG']: + defs.append('WITH_OPENJPEG') + +if env['WITH_BF_DDS']: + defs.append('WITH_DDS') + +if env['WITH_BF_FFMPEG']: + defs.append('WITH_FFMPEG') + incs += ' ' + env['BF_FFMPEG_INC'] + +if env['WITH_BF_OGG']: + defs.append('WITH_OGG') + +if env['WITH_BF_QUICKTIME']: + defs.append('WITH_QUICKTIME') + +if env['WITH_BF_LCMS']: + defs.append('WITH_LCMS') + +env.BlenderLib ( 'bf_rna', objs, Split(incs), defines=defs, libtype=['core'], priority = [195] ) diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 3400b69ee38..85505d546c4 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -59,6 +59,7 @@ IF(WITH_QUICKTIME) ENDIF(WITH_QUICKTIME) IF(WITH_FFMPEG) + SET(INC ${INC} ${FFMPEG_INC}) ADD_DEFINITIONS(-DWITH_FFMPEG) ENDIF(WITH_FFMPEG) diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile index 1694e55ed4c..7f9bfbfea67 100644 --- a/source/blender/makesrna/intern/Makefile +++ b/source/blender/makesrna/intern/Makefile @@ -57,6 +57,7 @@ CPPFLAGS += -I. ifeq ($(WITH_FFMPEG),true) CPPFLAGS += -DWITH_FFMPEG + CPPFLAGS += $(NAN_FFMPEGCFLAGS) endif ifeq ($(WITH_OPENEXR), true) diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index 03f0afdb2cc..7cd3fde21be 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -29,6 +29,10 @@ makesrna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesrna/\\"" ' defs = [] +incs = '#/intern/guardedalloc ../../blenlib ../../blenkernel' +incs += ' ../../imbuf ../../makesdna ../../makesrna' +incs += ' ../../windowmanager ../../editors/include' + if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') @@ -40,6 +44,10 @@ if env['WITH_BF_DDS']: if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') + incs += ' ' + env['BF_FFMPEG_INC'] + +if env['WITH_BF_OGG']: + defs.append('WITH_OGG') if env['WITH_BF_QUICKTIME']: defs.append('WITH_QUICKTIME') @@ -49,14 +57,7 @@ if env['WITH_BF_LCMS']: makesrna_tool.Append(CPPDEFINES=defs) -makesrna_tool.Append (CPPPATH = ['#/intern/guardedalloc', - '../../blenlib', - '../../blenkernel', - '../../imbuf', - '../../makesdna', - '../../makesrna', - '../../windowmanager', - '../../editors/include']) +makesrna_tool.Append (CPPPATH = Split(incs)) if env['OURPLATFORM'] == 'linuxcross': USE_WINE = True # when cross compiling on linux 64bit this is useful diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c index 4814f9583a9..9c33b0afb00 100644 --- a/source/blender/makesrna/intern/rna_camera.c +++ b/source/blender/makesrna/intern/rna_camera.c @@ -153,6 +153,11 @@ void RNA_def_camera(BlenderRNA *brna) RNA_def_property_enum_items(prop, prop_lens_unit_items); RNA_def_property_ui_text(prop, "Lens Unit", "Unit to edit lens in for the user interface."); + prop= RNA_def_property(srna, "panorama", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_PANORAMA); + RNA_def_property_ui_text(prop, "Panorama", "Render the scene with a cylindrical camera for pseudo-fisheye lens effects."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); + /* pointers */ rna_def_animdata_common(srna); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 6e2a6e27928..9c9fbf0e3cf 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -31,11 +31,11 @@ #include "DNA_scene_types.h" -/* +#ifdef WITH_FFMPEG #include "BKE_writeffmpeg.h" #include #include -*/ +#endif #include "WM_types.h" @@ -52,8 +52,13 @@ EnumPropertyItem prop_mode_items[] ={ #ifdef RNA_RUNTIME +#include "DNA_node_types.h" + #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_node.h" + +#include "BLI_threads.h" PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter) { @@ -63,9 +68,8 @@ PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter) return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((Base*)internal->link)->object); } -static void rna_Scene_layer_set(PointerRNA *ptr, const int *values) +static int layer_set(int lay, const int *values) { - Scene *scene= (Scene*)ptr->data; int i, tot= 0; /* ensure we always have some layer selected */ @@ -74,12 +78,21 @@ static void rna_Scene_layer_set(PointerRNA *ptr, const int *values) tot++; if(tot==0) - return; + return lay; for(i=0; i<20; i++) { - if(values[i]) scene->lay |= (1<lay &= ~(1<data; + + scene->lay= layer_set(scene->lay, values); } static void rna_Scene_start_frame_set(PointerRNA *ptr, int value) @@ -102,6 +115,92 @@ static void rna_Scene_frame_update(bContext *C, PointerRNA *ptr) //update_for_newframe(); } +static int rna_SceneRenderData_threads_get(PointerRNA *ptr) +{ + RenderData *rd= (RenderData*)ptr->data; + + if(rd->mode & R_FIXED_THREADS) + return rd->threads; + else + return BLI_system_thread_count(); +} + +static int rna_SceneRenderData_save_buffers_get(PointerRNA *ptr) +{ + RenderData *rd= (RenderData*)ptr->data; + + return (rd->scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) != 0; +} + +static void rna_SceneRenderData_file_format_set(PointerRNA *ptr, int value) +{ + RenderData *rd= (RenderData*)ptr->data; + + rd->imtype= value; + ffmpeg_verify_image_type(rd); +} + +static int rna_SceneRenderData_active_layer_index_get(PointerRNA *ptr) +{ + RenderData *rd= (RenderData*)ptr->data; + return rd->actlay; +} + +static void rna_SceneRenderData_active_layer_index_set(PointerRNA *ptr, int value) +{ + RenderData *rd= (RenderData*)ptr->data; + rd->actlay= value; +} + +static void rna_SceneRenderData_active_layer_index_range(PointerRNA *ptr, int *min, int *max) +{ + RenderData *rd= (RenderData*)ptr->data; + + *min= 0; + *max= BLI_countlist(&rd->layers)-1; + *max= MAX2(0, *max); +} + +static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value) +{ + Scene *scene= (Scene*)ptr->id.data; + SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data; + + BLI_strncpy(rl->name, value, sizeof(rl->name)); + + if(scene->nodetree) { + bNode *node; + int index= BLI_findindex(&scene->r.layers, rl); + + for(node= scene->nodetree->nodes.first; node; node= node->next) { + if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) { + if(node->custom1==index) + BLI_strncpy(node->name, rl->name, NODE_MAXSTR); + } + } + } +} + +static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values) +{ + SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data; + rl->lay= layer_set(rl->lay, values); +} + +static void rna_SceneRenderLayer_zmask_layer_set(PointerRNA *ptr, const int *values) +{ + SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data; + rl->lay_zmask= layer_set(rl->lay_zmask, values); +} + +static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr) +{ + Scene *scene= (Scene*)ptr->id.data; + + if(scene->nodetree) + ntreeCompositForceHidden(scene->nodetree, scene); +} + #else void rna_def_sculpt(BlenderRNA *brna) @@ -257,6 +356,194 @@ void rna_def_tool_settings(BlenderRNA *brna) rna_def_sculpt(brna); } +void rna_def_scene_render_layer(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "SceneRenderLayer", NULL); + RNA_def_struct_ui_text(srna, "Scene Render Layer", "Render layer."); + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", "Render layer name."); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SceneRenderLayer_name_set"); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "material_override", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "mat_override"); + RNA_def_property_struct_type(prop, "Material"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Material Override", "Material to override all other materials in this render layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "light_override", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Group"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Light Override", "Group to override all other lights in this render layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + /* layers */ + prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); + RNA_def_property_array(prop, 20); + RNA_def_property_ui_text(prop, "Visible Layers", "Scene layers included in this render layer."); + RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_layer_set"); + + prop= RNA_def_property(srna, "zmask_layers", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1); + RNA_def_property_array(prop, 20); + RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers."); + RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_zmask_layer_set"); + + /* layer options */ + prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE); + RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "zmask", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZMASK); + RNA_def_property_ui_text(prop, "Zmask", "Only render what's in front of the solid z values."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "zmask_negate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_NEG_ZMASK); + RNA_def_property_ui_text(prop, "Zmask Negate", "For Zmask, only render what is behind solid z values instead of in front."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "all_z", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ALL_Z); + RNA_def_property_ui_text(prop, "All Z", "Fill in Z values for solid faces in invisible layers, for masking."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "solid", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "Solid", "Render Solid faces in this Layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "Halo", "Render Halos in this Layer (on top of Solid)."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "ztransp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "ZTransp", "Render Z-Transparent faces in this Layer (On top of Solid and Halos)."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "Sky", "Render Sky in this Layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "Edge", "Render Edge-enhance in this Layer (only works for Solid faces)."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "strand", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_ui_text(prop, "Strand", "Render Strands in this Layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + /* passes */ + prop= RNA_def_property(srna, "pass_combined", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_COMBINED); + RNA_def_property_ui_text(prop, "Combined", "Deliver full combined RGBA buffer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_z", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_Z); + RNA_def_property_ui_text(prop, "Z", "Deliver Z values pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_vector", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_VECTOR); + RNA_def_property_ui_text(prop, "Vector", "Deliver speed vector pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_normal", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_NORMAL); + RNA_def_property_ui_text(prop, "Normal", "Deliver normal pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_uv", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_UV); + RNA_def_property_ui_text(prop, "UV", "Deliver texture UV pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_mist", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_MIST); + RNA_def_property_ui_text(prop, "Mist", "Deliver mist factor pass (0.0-1.0)."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_object_index", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXOB); + RNA_def_property_ui_text(prop, "Object Index", "Deliver object index pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_color", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA); + RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_diffuse", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE); + RNA_def_property_ui_text(prop, "Diffuse", "Deliver diffuse pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_specular", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SPEC); + RNA_def_property_ui_text(prop, "Specular", "Deliver specular pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_shadow", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SHADOW); + RNA_def_property_ui_text(prop, "Shadow", "Deliver shadow pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_ao", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_AO); + RNA_def_property_ui_text(prop, "AO", "Deliver AO pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_reflection", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT); + RNA_def_property_ui_text(prop, "Reflection", "Deliver ratraced reflection pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_refraction", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT); + RNA_def_property_ui_text(prop, "Refraction", "Deliver ratraced refraction pass."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_specular_exclude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SPEC); + RNA_def_property_ui_text(prop, "Specular Exclude", "Exclude specular pass from combined."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_shadow_exclude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SHADOW); + RNA_def_property_ui_text(prop, "Shadow Exclude", "Exclude shadow pass from combined."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_ao_exclude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_AO); + RNA_def_property_ui_text(prop, "AO Exclude", "Exclude AO pass from combined."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_reflection_exclude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT); + RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude ratraced reflection pass from combined."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + + prop= RNA_def_property(srna, "pass_refraction_exclude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT); + RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude ratraced refraction pass from combined."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); +} + void rna_def_scene_render_data(BlenderRNA *brna) { StructRNA *srna; @@ -324,10 +611,27 @@ void rna_def_scene_render_data(BlenderRNA *brna) static EnumPropertyItem image_type_items[] = { - {R_FRAMESERVER, "FRAMESERVER", 0, "Frame Server", ""}, -#ifdef WITH_FFMPEG - {R_FFMPEG, "FFMPEG", 0, "FFMpeg", ""}, + {R_PNG, "PNG", 0, "PNG", ""}, + {R_JPEG90, "JPEG", 0, "JPEG", ""}, +#ifdef WITH_OPENJPEG + {R_JP2, "JPEG2000", 0, "JPEG 2000", ""}, +#endif + {R_TIFF, "TIFF", 0, "TIFF", ""}, // XXX only with G.have_libtiff + {R_BMP, "BMP", 0, "BMP", ""}, + {R_TARGA, "TARGA", 0, "Targa", ""}, + {R_RAWTGA, "RAWTARGA", 0, "Targa Raw", ""}, + //{R_DDS, "DDS", 0, "DDS", ""}, // XXX not yet implemented + {R_HAMX, "HAMX", 0, "HamX", ""}, + {R_IRIS, "IRIS", 0, "Iris", ""}, + {0, "", 0, NULL, NULL}, +#ifdef WITH_OPENEXR + {R_OPENEXR, "OPENEXR", 0, "OpenEXR", ""}, + {R_MULTILAYER, "MULTILAYER", 0, "MultiLayer", ""}, #endif + {R_RADHDR, "RADHDR", 0, "Radiance HDR", ""}, + {R_CINEON, "CINEON", 0, "Cineon", ""}, + {R_DPX, "DPX", 0, "DPX", ""}, + {0, "", 0, NULL, NULL}, {R_AVIRAW, "AVIRAW", 0, "AVI Raw", ""}, {R_AVIJPEG, "AVIJPEG", 0, "AVI JPEG", ""}, #ifdef _WIN32 @@ -336,31 +640,25 @@ void rna_def_scene_render_data(BlenderRNA *brna) #ifdef WITH_QUICKTIME {R_QUICKTIME, "QUICKTIME", 0, "QuickTime", ""}, #endif - {R_TARGA, "TARGA", 0, "Targa", ""}, - {R_RAWTGA, "RAWTARGA", 0, "Targa Raw", ""}, - {R_PNG, "PNG", 0, "PNG", ""}, - //{R_DDS, "DDS", 0, "DDS", ""}, // XXX not yet implemented -//#ifdef WITH_OPENJPEG - {R_JP2, "JPEG2000", 0, "JPEG 2000", ""}, -//#endif - {R_BMP, "BMP", 0, "BMP", ""}, - {R_JPEG90, "JPEG", 0, "JPEG", ""}, - {R_HAMX, "HAMX", 0, "HamX", ""}, - {R_IRIS, "IRIS", 0, "Iris", ""}, - {R_RADHDR, "RADHDR", 0, "Radiance HDR", ""}, - {R_CINEON, "CINEON", 0, "Cineon", ""}, - {R_DPX, "DPX", 0, "DPX", ""}, #ifdef __sgi {R_MOVIE, "MOVIE", 0, "Movie", ""}, #endif -//#ifdef WITH_OPENEXR - {R_OPENEXR, "OPENEXR", 0, "OpenEXR", ""}, - {R_MULTILAYER, "MULTILAYER", 0, "MultiLayer", ""}, -//#endif - {R_TIFF, "TIFF", 0, "TIFF", ""}, // XXX only with G.have_libtiff +#ifdef WITH_FFMPEG + {R_H264, "H264", 0, "H.264", ""}, + {R_XVID, "XVID", 0, "Xvid", ""}, + // XXX broken +#if 0 +#ifdef WITH_OGG + {R_THEORA, "THEORA", 0, "Ogg Theora", ""}, +#endif +#endif + {R_FFMPEG, "FFMPEG", 0, "FFMpeg", ""}, +#endif + {0, "", 0, NULL, NULL}, + {R_FRAMESERVER, "FRAMESERVER", 0, "Frame Server", ""}, {0, NULL, 0, NULL, NULL}}; -//#ifdef WITH_OPENEXR +#ifdef WITH_OPENEXR static EnumPropertyItem exr_codec_items[] = { {0, "NONE", 0, "None", ""}, {1, "PXR24", 0, "Pxr24 (lossy)", ""}, @@ -368,9 +666,9 @@ void rna_def_scene_render_data(BlenderRNA *brna) {3, "PIZ", 0, "PIZ (lossless)", ""}, {4, "RLE", 0, "RLE (lossless)", ""}, {0, NULL, 0, NULL, NULL}}; -//#endif +#endif -//#ifdef WITH_OPENJPEG +#ifdef WITH_OPENJPEG static EnumPropertyItem jp2_preset_items[] = { {0, "NO_PRESET", 0, "No Preset", ""}, {1, "R_JPEG2K_CINE_PRESET", 0, "Cinema 24fps 2048x1080", ""}, @@ -387,20 +685,24 @@ void rna_def_scene_render_data(BlenderRNA *brna) {R_JPEG2K_12BIT, "16", 0, "16", ""}, {R_JPEG2K_16BIT, "32", 0, "32", ""}, {0, NULL, 0, NULL, NULL}}; -//#endif +#endif -/* #ifdef WITH_FFMPEG static EnumPropertyItem ffmpeg_format_items[] = { {FFMPEG_MPEG1, "MPEG1", 0, "MPEG-1", ""}, {FFMPEG_MPEG2, "MPEG2", 0, "MPEG-2", ""}, {FFMPEG_MPEG4, "MPEG4", 0, "MPEG-4", ""}, - {FFMPEG_AVI, "AVI", 0, "Avi", ""}, + {FFMPEG_AVI, "AVI", 0, "AVI", ""}, {FFMPEG_MOV, "QUICKTIME", 0, "Quicktime", ""}, {FFMPEG_DV, "DV", 0, "DV", ""}, - {FFMPEG_H264, "H264", 0, "H264", ""}, - {FFMPEG_XVID, "XVID", 0, "XVid", ""}, - {FFMPEG_OGG, "OGG", 0, "OGG", ""}, + {FFMPEG_H264, "H264", 0, "H.264", ""}, + {FFMPEG_XVID, "XVID", 0, "Xvid", ""}, + // XXX broken +#if 0 +#ifdef WITH_OGG + {FFMPEG_OGG, "OGG", 0, "Ogg", ""}, +#endif +#endif {FFMPEG_FLV, "FLASH", 0, "Flash", ""}, {0, NULL, 0, NULL, NULL}}; @@ -410,10 +712,12 @@ void rna_def_scene_render_data(BlenderRNA *brna) {CODEC_ID_MPEG4, "MPEG4", 0, "MPEG-4(divx)", ""}, {CODEC_ID_HUFFYUV, "HUFFYUV", 0, "HuffYUV", ""}, {CODEC_ID_DVVIDEO, "DV", 0, "DV", ""}, - {CODEC_ID_H264, "H264", 0, "H264", ""}, - {CODEC_ID_XVID, "XVID", 0, "XVid", ""}, - {CODEC_ID_THEORA, "THEORA", 0, "OGG Theora", ""}, - {CODEC_ID_FLV1, "FLASH", 0, "FlashVideo1", ""}, + {CODEC_ID_H264, "H264", 0, "H.264", ""}, + {CODEC_ID_XVID, "XVID", 0, "Xvid", ""}, +#ifdef WITH_OGG + {CODEC_ID_THEORA, "THEORA", 0, "Theora", ""}, +#endif + {CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem ffmpeg_audio_codec_items[] = { @@ -425,7 +729,6 @@ void rna_def_scene_render_data(BlenderRNA *brna) {CODEC_ID_PCM_S16LE, "PCM", 0, "PCM", ""}, {0, NULL, 0, NULL, NULL}}; #endif -*/ srna= RNA_def_struct(brna, "SceneRenderData", NULL); RNA_def_struct_sdna(srna, "RenderData"); @@ -518,7 +821,7 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "G", "Log conversion gamma"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); -//#ifdef WITH_OPENEXR +#ifdef WITH_OPENEXR /* OpenEXR */ prop= RNA_def_property(srna, "exr_codec", PROP_ENUM, PROP_NONE); @@ -541,9 +844,9 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_PREVIEW_JPG); RNA_def_property_ui_text(prop, "Preview", "When rendering animations, save JPG preview images in same directory"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); -//#endif +#endif -//#ifdef WITH_OPENJPEG +#ifdef WITH_OPENJPEG /* Jpeg 2000 */ prop= RNA_def_property(srna, "jpeg_preset", PROP_ENUM, PROP_NONE); @@ -562,12 +865,11 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_JPEG2K_YCC); RNA_def_property_ui_text(prop, "YCC", "Save luminance-chrominance-chrominance channels instead of RGB colors"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); -//#endif +#endif #ifdef WITH_FFMPEG /* FFMPEG Video*/ - /* prop= RNA_def_property(srna, "ffmpeg_format", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.type"); RNA_def_property_enum_items(prop, ffmpeg_format_items); @@ -579,7 +881,6 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_enum_items(prop, ffmpeg_codec_items); RNA_def_property_ui_text(prop, "Codec", "FFMpeg codec to use"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - */ prop= RNA_def_property(srna, "ffmpeg_video_bitrate", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.video_bitrate"); @@ -630,13 +931,11 @@ void rna_def_scene_render_data(BlenderRNA *brna) /* FFMPEG Audio*/ - /* prop= RNA_def_property(srna, "ffmpeg_audio_codec", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.audio_codec"); RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items); - RNA_def_property_ui_text(prop, Codec", "FFMpeg codec to use"); + RNA_def_property_ui_text(prop, "Audio Codec", "FFMpeg audio codec to use"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - */ prop= RNA_def_property(srna, "ffmpeg_audio_bitrate", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_bitrate"); @@ -765,14 +1064,10 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Edge Color", ""); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "panorama", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "mode", R_PANORAMA); - RNA_def_property_ui_text(prop, "Panorama", "Render the scene with a cylindrical camera for pseudo-fisheye lens effects"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "threads", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "threads"); RNA_def_property_range(prop, 1, 8); + RNA_def_property_int_funcs(prop, "rna_SceneRenderData_threads_get", NULL, NULL); RNA_def_property_ui_text(prop, "Threads", "Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); @@ -806,14 +1101,14 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "No Overwrite", "Skip and don't overwrite existing files while rendering"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "do_composite", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_compositing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_DOCOMP); - RNA_def_property_ui_text(prop, "Do Composite", "Process the render result through the compositing pipeline"); + RNA_def_property_ui_text(prop, "Compositing", "Process the render result through the compositing pipeline, if a compositing nodes are enabled."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "do_sequence", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_sequencer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_DOSEQ); - RNA_def_property_ui_text(prop, "Do Sequence", "Process the render (and composited) result through the video sequence editor pipeline"); + RNA_def_property_ui_text(prop, "Sequencer", "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "file_extensions", PROP_BOOLEAN, PROP_NONE); @@ -824,6 +1119,7 @@ void rna_def_scene_render_data(BlenderRNA *brna) prop= RNA_def_property(srna, "file_format", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "imtype"); RNA_def_property_enum_items(prop, image_type_items); + RNA_def_property_enum_funcs(prop, NULL, "rna_SceneRenderData_file_format_set", NULL); RNA_def_property_ui_text(prop, "File Format", "File format to save the rendered images as."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); @@ -834,12 +1130,13 @@ void rna_def_scene_render_data(BlenderRNA *brna) prop= RNA_def_property(srna, "save_buffers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXR_TILE_FILE); - RNA_def_property_ui_text(prop, "Save Buffers","Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, allows Full Sampling)."); + RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_save_buffers_get", NULL); + RNA_def_property_ui_text(prop, "Save Buffers","Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "full_sample", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FULL_SAMPLE); - RNA_def_property_ui_text(prop, "Full Sample","Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing"); + RNA_def_property_ui_text(prop, "Full Sample","Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "backbuf", PROP_BOOLEAN, PROP_NONE); @@ -857,11 +1154,6 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Output Path", "Directory/name to save animations, # characters defines the position and length of frame numbers."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "stamp", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_STAMP_INFO); - RNA_def_property_ui_text(prop, "Stamp", "Embed metadata into the rendered image"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "stamp_time", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_TIME); RNA_def_property_ui_text(prop, "Stamp Time", "Include the current time in image metadata"); @@ -935,6 +1227,21 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Stamp Background", "Color to use behind stamp text"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + prop= RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "layers", NULL); + RNA_def_property_struct_type(prop, "SceneRenderLayer"); + RNA_def_property_ui_text(prop, "Render Layers", ""); + + prop= RNA_def_property(srna, "single_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_SINGLE_LAYER); + RNA_def_property_ui_text(prop, "Single Layer", "Only render the active layer."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "active_layer_index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "actlay"); + RNA_def_property_int_funcs(prop, "rna_SceneRenderData_active_layer_index_get", "rna_SceneRenderData_active_layer_index_set", "rna_SceneRenderData_active_layer_index_range"); + RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); } void RNA_def_scene(BlenderRNA *brna) @@ -1038,6 +1345,7 @@ void RNA_def_scene(BlenderRNA *brna) rna_def_tool_settings(brna); rna_def_scene_render_data(brna); + rna_def_scene_render_layer(brna); } #endif diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index a0185a64659..842adcf8520 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -453,6 +453,7 @@ void RE_SetCamera(Render *re, Object *camera) cam= camera->data; if(cam->type==CAM_ORTHO) re->r.mode |= R_ORTHO; + if(cam->flag & CAM_PANORAMA) re->r.mode |= R_PANORAMA; /* solve this too... all time depending stuff is in convertblender.c? * Need to update the camera early because it's used for projection matrices @@ -601,7 +602,7 @@ void initparts(Render *re) yparts= re->r.yparts; /* mininum part size, but for exr tile saving it was checked already */ - if(!(re->r.scemode & R_EXR_TILE_FILE)) { + if(!(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE))) { if(re->r.mode & R_PANORAMA) { if(ceil(re->rectx/(float)xparts) < 8) xparts= 1 + re->rectx/8; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index ec2660566f5..3ef50af53c2 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -36,6 +36,7 @@ #include "DNA_node_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_sequence_types.h" #include "DNA_userdef_types.h" #include "BKE_utildefines.h" @@ -1092,14 +1093,14 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, int winx, int winy re->ok= 0; } else { -#ifndef WITH_OPENEXR +#ifdef WITH_OPENEXR + if(re->r.scemode & R_FULL_SAMPLE) + re->r.scemode |= R_EXR_TILE_FILE; /* enable automatic */ +#else /* can't do this without openexr support */ - re->r.scemode &= ~R_EXR_TILE_FILE; + re->r.scemode &= ~(R_EXR_TILE_FILE|R_FULL_SAMPLE); #endif - if(!(re->r.scemode & R_EXR_TILE_FILE)) - re->r.scemode &= ~R_FULL_SAMPLE; /* clear, so we can use this flag for test both */ - /* fullsample wants uniform osa levels */ if(source && (re->r.scemode & R_FULL_SAMPLE)) { /* but, if source has no full sample we disable it */ @@ -1499,7 +1500,7 @@ static void threaded_tile_processor(Render *re) else if(re->r.scemode & R_FULL_SAMPLE) re->result= new_full_sample_buffers_exr(re); else - re->result= new_render_result(re, &re->disprect, 0, re->r.scemode & R_EXR_TILE_FILE); + re->result= new_render_result(re, &re->disprect, 0, re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)); } if(re->result==NULL) @@ -2278,7 +2279,7 @@ static void do_render_all_options(Render *re) /* ensure no images are in memory from previous animated sequences */ BKE_image_all_free_anim_ibufs(re->r.cfra); - if(re->r.scemode & R_DOSEQ) { + if((re->r.scemode & R_DOSEQ) && re->scene->ed && re->scene->ed->seqbase.first) { /* note: do_render_seq() frees rect32 when sequencer returns float images */ if(!re->test_break(re->tbh)) ; //XXX do_render_seq(re->result, re->r.cfra); @@ -2299,7 +2300,7 @@ static void do_render_all_options(Render *re) re->stats_draw(re->sdh, &re->i); /* stamp image info here */ - if((re->r.scemode & R_STAMP_INFO) && (re->r.stamp & R_STAMP_DRAW)) { + if((re->r.stamp & R_STAMP_ALL) && (re->r.stamp & R_STAMP_DRAW)) { renderresult_stampinfo(re->scene); re->display_draw(re->ddh, re->result, NULL); } @@ -2327,13 +2328,13 @@ static int is_rendering_allowed(Render *re) re->error(re->erh, "No border area selected."); return 0; } - if(re->r.scemode & R_EXR_TILE_FILE) { + if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { re->error(re->erh, "Border render and Buffer-save not supported yet"); return 0; } } - if(re->r.scemode & R_EXR_TILE_FILE) { + if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { char str[FILE_MAX]; render_unique_exr_name(re, str, 0); From e1e489c13bee8ecd75b290af5d8cb5c3d2ce901c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Jul 2009 19:10:35 +0000 Subject: [PATCH 187/512] 2.5: and the B.blend.c to go with the last commit. --- source/blender/editors/datafiles/B.blend.c | 5624 +++++++++++--------- 1 file changed, 3012 insertions(+), 2612 deletions(-) diff --git a/source/blender/editors/datafiles/B.blend.c b/source/blender/editors/datafiles/B.blend.c index fcdf83e98de..03d1d00cccf 100644 --- a/source/blender/editors/datafiles/B.blend.c +++ b/source/blender/editors/datafiles/B.blend.c @@ -1,631 +1,922 @@ /* DataToC output of file */ -int datatoc_B_blend_size= 93184; +int datatoc_B_blend_size= 106004; char datatoc_B_blend[]= { - - 66, 76, 69, 78, 68, 69, 82, 95, 86, 50, 53, 48, 82, 69, 78, 68, 0, 0, 0, 32,191,255,240,240, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, 0,250, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71, 76, 79, 66, 0, 0, 0, 32,191,255,240,232, 0, 0, 0,181, 0, 0, 0, 1, 32, 32, 32, 48, 0, 0, 0, 0, 0,250, 0, 0, - 0, 1, 1, 0, 0,232,214, 96, 1, 7,176, 32, 0, 0, 16, 0, 0, 4, 32,128, 0, 0, 87, 77, 0, 0, 0,124, 0,232,212,240, - 0, 0, 1, 68, 0, 0, 0, 1, 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, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,213,160, - 0,232,213,160, 0,232,213,160, 0,232,213,160, 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,238,152, 96, - 5,210, 11, 64, 68, 65, 84, 65, 0, 0, 0,144, 0,232,213,160, 0, 0, 1, 69, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0,237,219, 32, 0, 0, 0, 1, 0, 0, 0, 0, 0,232,214, 96,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, 10, 0, 14, 7,108, 4,108, 0, 0, 0, 0, 0, 1, 3,238, - 0, 0, 0, 0, 0, 0, 0, 0, 0,238,151,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227,142,160, - 0, 0, 0, 0, 0, 0, 0, 0, 6,147, 67,240, 6,160,144,208, 0,238,152,224, 0,238,153,208, 5,209,239,128, 5,210, 15,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 0,136, 0,232,214, 96, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,101,101,110, 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,232,215, 16, 0,232,218, 80, 0,232,218,144, 0,232,222,208, - 0,232,223, 16, 0,233, 19,208, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7,176, 32, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 8,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,215, 16, 0, 0, 0,174, 0, 0, 0, 1, 0,232,215, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,215, 80, 0, 0, 0,174, 0, 0, 0, 1, - 0,232,215,144, 0,232,215, 16, 0, 0, 0, 0, 0, 0, 4,108, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,215,144, - 0, 0, 0,174, 0, 0, 0, 1, 0,232,215,208, 0,232,215, 80, 0, 0, 0, 0, 7,108, 4,108, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 20, 0,232,215,208, 0, 0, 0,174, 0, 0, 0, 1, 0,232,216, 16, 0,232,215,144, 0, 0, 0, 0, 7,108, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,216, 16, 0, 0, 0,174, 0, 0, 0, 1, 0,232,216, 80, 0,232,215,208, - 0, 0, 0, 0, 0, 0, 4, 81, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,216, 80, 0, 0, 0,174, 0, 0, 0, 1, - 0,232,216,144, 0,232,216, 16, 0, 0, 0, 0, 7,108, 4, 81, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,216,144, - 0, 0, 0,174, 0, 0, 0, 1, 0,232,216,208, 0,232,216, 80, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 20, 0,232,216,208, 0, 0, 0,174, 0, 0, 0, 1, 0,232,217, 16, 0,232,216,144, 0, 0, 0, 0, 7,108, 0, 64, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,217, 16, 0, 0, 0,174, 0, 0, 0, 1, 0,232,217, 80, 0,232,216,208, - 0, 0, 0, 0, 5,224, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,217, 80, 0, 0, 0,174, 0, 0, 0, 1, - 0,232,217,144, 0,232,217, 16, 0, 0, 0, 0, 5,224, 4, 81, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,217,144, - 0, 0, 0,174, 0, 0, 0, 1, 0,232,217,208, 0,232,217, 80, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 1, 68, 65, 84, 65, - 0, 0, 0, 20, 0,232,217,208, 0, 0, 0,174, 0, 0, 0, 1, 0,232,218, 16, 0,232,217,144, 0, 0, 0, 0, 5,224, 0, 76, - 0, 0, 0, 1, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,218, 16, 0, 0, 0,174, 0, 0, 0, 1, 0,232,218, 80, 0,232,217,208, - 0, 0, 0, 0, 5,224, 3, 76, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 0,232,218, 80, 0, 0, 0,174, 0, 0, 0, 1, - 0, 0, 0, 0, 0,232,218, 16, 0, 0, 0, 0, 7,108, 3, 76, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,218,144, - 0, 0, 0,175, 0, 0, 0, 1, 0,232,218,208, 0, 0, 0, 0, 0,232,215, 80, 0,232,215,144, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 0,232,218,208, 0, 0, 0,175, 0, 0, 0, 1, 0,232,219, 16, 0,232,218,144, 0,232,215, 80, - 0,232,216, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,219, 16, 0, 0, 0,175, 0, 0, 0, 1, - 0,232,219, 80, 0,232,218,208, 0,232,215,144, 0,232,216, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 0,232,219, 80, 0, 0, 0,175, 0, 0, 0, 1, 0,232,219,144, 0,232,219, 16, 0,232,216, 16, 0,232,216, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,219,144, 0, 0, 0,175, 0, 0, 0, 1, 0,232,219,208, 0,232,219, 80, - 0,232,215, 16, 0,232,217, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,219,208, 0, 0, 0,175, - 0, 0, 0, 1, 0,232,220, 16, 0,232,219,144, 0,232,215,208, 0,232,217, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 0,232,220, 16, 0, 0, 0,175, 0, 0, 0, 1, 0,232,220, 80, 0,232,219,208, 0,232,216, 16, 0,232,217, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,220, 80, 0, 0, 0,175, 0, 0, 0, 1, 0,232,220,144, - 0,232,220, 16, 0,232,216, 80, 0,232,217, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,220,144, - 0, 0, 0,175, 0, 0, 0, 1, 0,232,220,208, 0,232,220, 80, 0,232,215, 16, 0,232,217,144, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 0,232,220,208, 0, 0, 0,175, 0, 0, 0, 1, 0,232,221, 16, 0,232,220,144, 0,232,216, 16, - 0,232,217,144, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,221, 16, 0, 0, 0,175, 0, 0, 0, 1, - 0,232,221, 80, 0,232,220,208, 0,232,217, 80, 0,232,217,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 0,232,221, 80, 0, 0, 0,175, 0, 0, 0, 1, 0,232,221,144, 0,232,221, 16, 0,232,217, 16, 0,232,217,208, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,221,144, 0, 0, 0,175, 0, 0, 0, 1, 0,232,221,208, 0,232,221, 80, - 0,232,217,144, 0,232,217,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,221,208, 0, 0, 0,175, - 0, 0, 0, 1, 0,232,222, 16, 0,232,221,144, 0,232,217, 16, 0,232,218, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 0,232,222, 16, 0, 0, 0,175, 0, 0, 0, 1, 0,232,222, 80, 0,232,221,208, 0,232,217, 80, 0,232,218, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,222, 80, 0, 0, 0,175, 0, 0, 0, 1, 0,232,222,144, - 0,232,222, 16, 0,232,216, 80, 0,232,218, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,232,222,144, - 0, 0, 0,175, 0, 0, 0, 1, 0,232,222,208, 0,232,222, 80, 0,232,215,208, 0,232,218, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 0,232,222,208, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0,232,222,144, 0,232,218, 16, - 0,232,218, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,112, 0,232,223, 16, 0, 0, 0,179, 0, 0, 0, 1, - 0,232,225,240, 0, 0, 0, 0, 0,232,216, 16, 0,232,215, 80, 0,232,215,144, 0,232,216, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7,108, 0, 0, 4, 82, 0, 0, 4,108, 7, 7, 7,109, 0, 27, 0, 1, 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,229, 69,160, 0,233, 31,144, 0,233, 31,144, 0,232,223,176, 0,232,224,208, - 0, 0, 0, 0, 0, 0, 0, 0, 5,216,137, 0, 5,209,241, 64, 68, 65, 84, 65, 0, 0, 0,236, 0,232,223,176, 0, 0, 0,180, - 0, 0, 0, 1, 0,232,224,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68,192, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, - 68,237,160, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,108, 0, 0, 0, 0, 0, 0, 0, 25, 68,237,128, 0, - 65,200, 0, 0, 68,237,128, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, - 0, 10, 7,109, 0, 26, 7,109, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,108, 0, 0, 4, 82, - 0, 0, 4,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,109, 0, 26, 0, 2, 0, 1, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 70,192, 6,144,192,176, 6,144,192,176, 0, 0, 0, 0, 0, 0, 0, 0, - 5,209,243, 64, 5,209,243,176, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,232,224,208, 0, 0, 0,180, - 0, 0, 0, 1, 0, 0, 0, 0, 0,232,223,176, 0, 0, 0, 0, 68,158, 64, 0, 0, 0, 0, 0, 65, 16, 0, 0, 0, 0, 0, 0, - 69, 21,180, 43, 63,184, 81,222, 65, 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, 7,108, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 35,215, 10, 68,122, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 4, 0, - 0, 10, 7,109, 0, 6, 7,109, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,108, - 0, 0, 4,108, 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, 1, 0, 0, 0, 0, 0, 0, 0,229, 70, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,112, 0,232,225,240, 0, 0, 0,179, - 0, 0, 0, 1, 0,233, 2, 0, 0,232,223, 16, 0,232,217, 16, 0,232,218, 16, 0,232,218, 80, 0,232,215,208, 0, 0, 0, 0, - 0, 0, 5,225, 0, 0, 7,108, 0, 0, 0, 0, 0, 0, 3, 75, 4, 4, 1,140, 3, 76, 0, 1, 0, 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, 67, 96, 0,232,253,144, 0,233, 0,224, 0,232,226,144, - 0,232,227,176, 0, 0, 0, 0, 0, 0, 0, 0, 5,209,244, 32, 5,209,244,224, 68, 65, 84, 65, 0, 0, 0,236, 0,232,226,144, - 0, 0, 0,180, 0, 0, 0, 1, 0,232,227,176, 0, 0, 0, 0, 0, 0, 0, 0, 67,240, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, - 0, 0, 0, 0, 67,198, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,139, 0, 0, 0, 0, 0, 0, 0, 25, - 67,137,128, 0, 65,200, 0, 0, 67,137,128, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, - 0, 4, 4, 12, 0, 10, 1,140, 0, 26, 1,140, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,225, 0, 0, 7,108, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,140, 0, 26, 0, 3, 0, 1, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 68,128, 6,157, 67,144, 6,157, 67,144, 0, 0, 0, 0, - 0, 0, 0, 0, 5,209,246,144, 5,209,247,112, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,232,227,176, - 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0,232,226,144, 0, 0, 0, 0, 67,163,128, 0,196,133,192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67,163,134,146,196, 41,151, 74,192, 50,112,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, 1,139, 0, 0, 0, 0, 0, 0, 3, 49, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 2, 4, 0, 0, 6, 1,140, 3, 50, 1,140, 3, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,225, 0, 0, 7,108, - 0, 0, 0, 26, 0, 0, 3, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,140, 3, 50, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 67,240, 6,160,103, 16, 6,160,111,112, 0,232,228,208, - 0,232,252,112, 5,209,249, 48, 5,209,251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,228,208, - 0, 0, 0,176, 0, 0, 0, 1, 0,232,229,240, 0, 0, 0, 0, 5,213,216,128, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, + 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0, +128, 13,156,230,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, 71, 76, 79, 66, 40, 0, 0, 0,112, 13,156,230,255,127, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 48, 0, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, 48, 3,160, 2, 0, 0, 0, 0, + 32,116,160, 2, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 87, 77, 0, 0,208, 0, 0, 0, 0, 1,160, 2, 0, 0, 0, 0, + 72, 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, + 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, + 16, 2,160, 2, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 64,203,233, 2, 0, 0, 0, 0, +224,220,232, 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, 82,101,110,100,101,114, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,142,166, 2, 0, 0, 0, 0,224, 48,170, 2, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, + 16, 2,160, 2, 0, 0, 0, 0, 73, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240,218,132, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48, 3,160, 2, 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, + 5, 0, 30, 0,118, 7, 97, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0,192,141,166, 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,128,246,196, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,206,238, 2, 0, 0, 0, 0, 16,206,238, 2, 0, 0, 0, 0, + 0,143,166, 2, 0, 0, 0, 0,112,144,166, 2, 0, 0, 0, 0,160,239,169, 2, 0, 0, 0, 0,192, 54,170, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 48, 3,160, 2, 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, 83, 82, 83, 99,114,101,101,110, 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, 64, 4,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, +128, 9,160, 2, 0, 0, 0, 0,240, 16,160, 2, 0, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,116,160, 2, 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, 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +236,101,152, 0, 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, + 64, 4,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,160, 4,160, 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, 68, 65, 84, 65, 32, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, +177, 0, 0, 0, 1, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, + 96, 5,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, + 0, 5,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +192, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, +177, 0, 0, 0, 1, 0, 0, 0,128, 6,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128, 6,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, +224, 6,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,224, 6,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, +128, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 64, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 64, 7,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0,224, 6,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, +177, 0, 0, 0, 1, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 5, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, + 96, 8,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, + 0, 8,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 80, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +192, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 72, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, +177, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118, 7, 72, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 9,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +240, 9,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 9,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 96, 10,160, 2, 0, 0, 0, 0,128, 9,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 10,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +208, 10,160, 2, 0, 0, 0, 0,240, 9,160, 2, 0, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208, 10,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 64, 11,160, 2, 0, 0, 0, 0, 96, 10,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 11,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +176, 11,160, 2, 0, 0, 0, 0,208, 10,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176, 11,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 32, 12,160, 2, 0, 0, 0, 0, 64, 11,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 12,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +144, 12,160, 2, 0, 0, 0, 0,176, 11,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 12,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 0, 13,160, 2, 0, 0, 0, 0, 32, 12,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +112, 13,160, 2, 0, 0, 0, 0,144, 12,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +224, 13,160, 2, 0, 0, 0, 0, 0, 13,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 80, 14,160, 2, 0, 0, 0, 0,112, 13,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80, 14,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +192, 14,160, 2, 0, 0, 0, 0,224, 13,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 14,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 48, 15,160, 2, 0, 0, 0, 0, 80, 14,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48, 15,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +160, 15,160, 2, 0, 0, 0, 0,192, 14,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 15,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 16, 16,160, 2, 0, 0, 0, 0, 48, 15,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +128, 16,160, 2, 0, 0, 0, 0,160, 15,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, +240, 16,160, 2, 0, 0, 0, 0, 16, 16,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 16,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,184, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0, + 32, 21,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, + 0, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, + 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 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, 48,189,147, 2, 0, 0, 0, 0,144,115,160, 2, 0, 0, 0, 0, +144,115,160, 2, 0, 0, 0, 0, 96, 18,160, 2, 0, 0, 0, 0,192, 19,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,170,170, 2, 0, 0, 0, 0, 96, 66,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, + 96, 18,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,192, 19,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64,103, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 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,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,191,147, 2, 0, 0, 0, 0,208, 35,170, 2, 0, 0, 0, 0,208, 35,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,173,188, 2, 0, 0, 0, 0,128, 11,170, 2, 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,192, 19,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 18,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,158, 68, 0, 0, 0, 0, 0, 0, 16, 65, + 0, 0, 0, 0, 12,235,226, 69,222, 81,184, 63, 0, 0, 16, 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, 1, 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, 4, 10, 0,129, 7, 2, 0,129, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 4, 0, 0, 97, 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, 1, 0, 0, 0, 0, 0, 0, 0, 32,190,147, 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,176, 13,170, 2, 0, 0, 0, 0, + 32, 15,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,184, 0, 0, 0, + 32, 21,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0, + 64, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 71, 3, 0, 0, 4, 4,142, 1, 72, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,185,147, 2, 0, 0, 0, 0, 64, 59,160, 2, 0, 0, 0, 0,144, 66,160, 2, 0, 0, 0, 0, 32, 22,160, 2, 0, 0, 0, 0, +128, 23,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 71,189, 2, 0, 0, 0, 0, +128, 82,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 32, 22,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, +128, 23,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 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,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 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,142, 1, 26, 0, 4, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,188,147, 2, 0, 0, 0, 0,128,218,232, 2, 0, 0, 0, 0, +128,218,232, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,189,195, 2, 0, 0, 0, 0, + 80, 20,170, 2, 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, +128, 23,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 22,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,163, 67, 0, 0,111,196, 0, 0, 0, 0, 0, 0, 0, 0,146,134,163, 67, 54, 57, 39,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 45, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,142, 1, 46, 3,142, 1, 46, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 26, 0, 0, 0, 71, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 46, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,186,147, 2, 0, 0, 0, 0, 48,200,238, 2, 0, 0, 0, 0, 32,157,232, 2, 0, 0, 0, 0,224, 24,160, 2, 0, 0, 0, 0, + 48,248,232, 2, 0, 0, 0, 0,112,129,194, 2, 0, 0, 0, 0,112, 25,170, 2, 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, 1, 0, 0,224, 24,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, +112, 26,160, 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, + 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 56, 1, 71, 0,176, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, - 0,232,229,240, 0, 0, 0,176, 0, 0, 0, 1, 0,232,231, 16, 0,232,228,208, 5,213,218, 16, 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, 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, 56,255, 71, 1,176, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 88, - 1, 71, 0,200, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,240, 0,232,231, 16, 0, 0, 0,176, 0, 0, 0, 1, 0,232,232, 48, 0,232,229,240, 5,213,219,160, 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, 68, 65, 84, 65, 80, 1, 0, 0,112, 26,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0, 0, 28,160, 2, 0, 0, 0, 0,224, 24,160, 2, 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, - 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 1, 71, 0, 80, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,240, 0,232,232, 48, 0, 0, 0,176, 0, 0, 0, 1, 0,232,233, 80, 0,232,231, 16, 5,213,222,176, - 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, 88,254, 71, 1,200, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 80, 1, 0, 0, + 0, 28,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,144, 29,160, 2, 0, 0, 0, 0,112, 26,160, 2, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,136, 1, 71, 0, 80, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,233, 80, 0, 0, 0,176, 0, 0, 0, 1, 0,232,234,112, 0,232,232, 48, - 5,213,224, 64, 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,240,253, 71, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 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, 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, + 68, 65, 84, 65, 80, 1, 0, 0,144, 29,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32, 31,160, 2, 0, 0, 0, 0, + 0, 28,160, 2, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,194, 1, 71, 0,174, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,234,112, 0, 0, 0,176, 0, 0, 0, 1, 0,232,235,144, - 0,232,233, 80, 5,213,225,208, 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,136,253, 71, 1, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 80, 1, 0, 0, 32, 31,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, +176, 32,160, 2, 0, 0, 0, 0,144, 29,160, 2, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,214, 1, 71, 0,212, 0, 20, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,235,144, 0, 0, 0,176, 0, 0, 0, 1, - 0,232,236,176, 0,232,234,112, 0, 0, 0, 0, 0, 0, 0, 0, 76,101,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,194,252, 71, 1,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,176, 32,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0, 64, 34,160, 2, 0, 0, 0, 0, 32, 31,160, 2, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,251, 71, 1,212, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, + 64, 34,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,208, 35,160, 2, 0, 0, 0, 0,176, 32,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,101,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, 0, 76,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 81, 1, 74, 0,151, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,236,176, 0, 0, 0,176, - 0, 0, 0, 1, 0,232,237,208, 0,232,235,144, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,255, 74, 1,151, 0, 0, 0, 0, 0, 0, 0, 0, 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,105,115,112,108, 97,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, + 68, 65, 84, 65, 80, 1, 0, 0,208, 35,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 96, 37,160, 2, 0, 0, 0, 0, + 64, 34,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,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, 68,105,115,112,108, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,141, 1, 74, 0,107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,237,208, - 0, 0, 0,176, 0, 0, 0, 1, 0,232,238,240, 0,232,236,176, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,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,141,254, 74, 1,107, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 80,114,101,118,105,101,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, 68, 65, 84, 65, 80, 1, 0, 0, 96, 37,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, +240, 38,160, 2, 0, 0, 0, 0,208, 35,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,114,101,118,105,101,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, + 80,114,101,118,105,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 96, 1, 74, 0,136, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, - 0,232,238,240, 0, 0, 0,176, 0, 0, 0, 1, 0,232,240, 16, 0,232,237,208, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 96,255, 74, 1,136, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,247, - 1, 74, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,240, 0,232,240, 16, 0, 0, 0,176, 0, 0, 0, 1, 0,232,241, 48, 0,232,238,240, 0, 0, 0, 0, 0, 0, 0, 0, - 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0,240, 38,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,128, 40,160, 2, 0, 0, 0, 0, 96, 37,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, - 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254, 43, 1, 74, 0,180, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,240, 0,232,241, 48, 0, 0, 0,176, 0, 0, 0, 1, 0,232,242, 80, 0,232,240, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 77,105,115,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,247,254, 74, 1, 81, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 77,105,115,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, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0, +128, 40,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 16, 42,160, 2, 0, 0, 0, 0,240, 38,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,254, 74, 1,180, 0, 20, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 16, 42,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,160, 43,160, 2, 0, 0, 0, 0, +128, 40,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,105,115,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, 77,105,115,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, 0, 0, 0, 0, 0, 0, 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,168, 1, 74, 0,107, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,242, 80, 0, 0, 0,176, 0, 0, 0, 1, 0,232,243,112, 0,232,241, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,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,168,253, 74, 1,107, 0, + 20, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 68, 65, 84, 65, 80, 1, 0, 0,160, 43,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, + 48, 45,160, 2, 0, 0, 0, 0, 16, 42,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,116, 97,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, + 83,116, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 84, 1, 74, 0, 60, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,243,112, 0, 0, 0,176, 0, 0, 0, 1, 0,232,244,144, - 0,232,242, 80, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99,116,105,111,110, 0, 0, 0, 0, + 0, 0, 84,253, 74, 1, 60, 0, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,108,111,114, 32, 67,111,114,114,101, 99,116,105,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, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48, 45,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,192, 46,160, 2, 0, 0, 0, 0,160, 43,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 74, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,244,144, 0, 0, 0,176, 0, 0, 0, 1, - 0,232,245,176, 0,232,243,112, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24,253, 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, +192, 46,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 80, 48,160, 2, 0, 0, 0, 0, 48, 45,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 83, 1, 74, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,245,176, 0, 0, 0,176, - 0, 0, 0, 1, 0,232,246,208, 0,232,244,144, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,111,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, 83,255, 74, 1,149, 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, 83,104, 97,100,111,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, + 68, 65, 84, 65, 80, 1, 0, 0, 80, 48,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,224, 49,160, 2, 0, 0, 0, 0, +192, 46,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,111,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, 83,104, 97,100,111,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,136, 1, 74, 0,179, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,246,208, - 0, 0, 0,176, 0, 0, 0, 1, 0,232,247,240, 0,232,245,176, 0, 0, 0, 0, 0, 0, 0, 0, 83,117,114,102, 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,136,254, 74, 1,179, 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, 83,117,114,102, 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, 68, 65, 84, 65, 80, 1, 0, 0,224, 49,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, +112, 51,160, 2, 0, 0, 0, 0, 80, 48,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,117,114,102, 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, 0, 0, + 83,117,114,102, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,149, 1, 74, 0, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, - 0,232,247,240, 0, 0, 0,176, 0, 0, 0, 1, 0,232,249, 16, 0,232,246,208, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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,149,255, 74, 1, 83, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,196, - 1, 74, 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, 68, 65, 84, 65, - 0, 0, 0,240, 0,232,249, 16, 0, 0, 0,176, 0, 0, 0, 1, 0,232,250, 48, 0,232,247,240, 0, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,112, 51,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0, 0, 53,160, 2, 0, 0, 0, 0,224, 49,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, - 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 1, 74, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,240, 0,232,250, 48, 0, 0, 0,176, 0, 0, 0, 1, 0,232,251, 80, 0,232,249, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 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,196,255, 74, 1, 36, 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, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, + 0, 53,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,144, 54,160, 2, 0, 0, 0, 0,112, 51,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 1, 74, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,251, 80, 0, 0, 0,176, 0, 0, 0, 1, 0,232,252,112, 0,232,250, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 76,255, 74, 1, 96, 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, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 80, 1, 0, 0,144, 54,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32, 56,160, 2, 0, 0, 0, 0, + 0, 53,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 81, 1, 74, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,232,252,112, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, - 0,232,251, 80, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255, 74, 1, 36, 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, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 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, 1, 0, 0, 32, 56,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, +176, 57,160, 2, 0, 0, 0, 0,144, 54,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,167, 1, 74, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,224, 0,232,253,144, 0, 0, 0,151, 0, 0, 0, 1, - 0,233, 0,224, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 81,254, 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0,176, 57,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,176, 77,231, 2, 0, 0, 0, 0, 32, 56,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 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,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,253, 74, 1,146, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, +176, 77,231, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,208, 74,231, 2, 0, 0, 0, 0,176, 57,160, 2, 0, 0, 0, 0, + 64,187,147, 2, 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, 71, 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, + 68, 65, 84, 65, 80, 1, 0, 0,208, 74,231, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,176,232,233, 2, 0, 0, 0, 0, +176, 77,231, 2, 0, 0, 0, 0,144,244,210, 2, 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, 71, 1, 61, 0, + 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0,176,232,233, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, + 32,112,232, 2, 0, 0, 0, 0,208, 74,231, 2, 0, 0, 0, 0,144,246,210, 2, 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,189,254, 71, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0, 32,112,232, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,144,155,232, 2, 0, 0, 0, 0,176,232,233, 2, 0, 0, 0, 0,144,248,210, 2, 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,107,254, 71, 1, 58, 0, 24, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0, +144,155,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32,159,232, 2, 0, 0, 0, 0, 32,112,232, 2, 0, 0, 0, 0, +160,253,210, 2, 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, 83,254, 71, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, + 68, 65, 84, 65, 80, 1, 0, 0, 32,159,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,192,195,232, 2, 0, 0, 0, 0, +144,155,232, 2, 0, 0, 0, 0,176, 2,211, 2, 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,235,253, 71, 1, 80, 0, + 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0,192,195,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, + 80,199,232, 2, 0, 0, 0, 0, 32,159,232, 2, 0, 0, 0, 0,176, 4,211, 2, 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,128,253, 71, 1, 83, 0, 0, 0, 0, 0, 4, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0, 80,199,232, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,224,202,232, 2, 0, 0, 0, 0,192,195,232, 2, 0, 0, 0, 0,192, 9,211, 2, 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, 64,253, 71, 1,123, 0, 0, 0, 0, 0, 4, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0, +224,202,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 48,248,232, 2, 0, 0, 0, 0, 80,199,232, 2, 0, 0, 0, 0, +208, 14,211, 2, 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, 55,253, 71, 1,108, 0, 0, 0, 0, 0, 0, 0, 6, 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, 80, 1, 0, 0, 48,248,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,202,232, 2, 0, 0, 0, 0,208, 18,211, 2, 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, 72,252, 71, 1,215, 0, + 24, 0, 0, 0, 0, 0, 7, 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, 68, 65, 84, 65, 8, 1, 0, 0, 64, 59,160, 2, 0, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0, +144, 66,160, 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, + 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, 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, 1,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,236, 0,232,254,160, 0, 0, 0,180, 0, 0, 0, 1, 0,232,255,192, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 69, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 67,138, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 0, 0, 0, 0,208, 63,214, 2, 0, 0, 0, 0,255, 20, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,144, 60,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, +240, 61,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 1, 19, 0, 0, 0, 0, 0, 0, 0, 25, 68,237,128, 0, 65,200, 0, 0, 68,237,128, 0, 65,200, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, 0, 10, 1, 20, 0, 26, 1, 20, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 89, 0, 0, 7,108, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 20, 0, 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, - 68, 65, 84, 65, 0, 0, 0,236, 0,232,255,192, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0,232,254,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, 68, 65, 84, 65, 24, 1, 0, 0, +240, 61,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 60,160, 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, 6, 89, 0, 0, 7,108, 0, 0, 0, 26, 0, 0, 4, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 20, 4, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 7,160, 32, - 68, 65, 84, 65, 0, 0, 2,152, 1, 7,160, 32, 0, 0, 0,145, 0, 0, 0, 1, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80, -191,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 63,128, 0, 0, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80, -191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, 65, 32, 0, 0, 62,111,122,237, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,106, 14,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,249,252,209, -194, 71,253,115, 0, 0, 0, 0, 0, 0, 0, 0, 67,249,127, 98, 66, 71,255,129, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, 63,128, 0, 0, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80, -191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, 65, 32, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,222, 32,100, 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, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, + 80, 63,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80, 63,160, 2, 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0, +103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, + 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, 32,193, 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, 32, 65, 0, 0,128, 63, +103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, +237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, + 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, 32,193, 0, 0,128, 63, +103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 0,224, 0, 0, 0,146, 0, 0, 0, 1, - 0, 0, 0, 0, 0,232,253,144, 0,232,254,160, 0,232,255,192, 0, 0, 0, 1, 63, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 1, 0, 7, 1, 7,188, 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, 1, 0, 0, 0, 1, - 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 60, 35,215, 10, 67,250, 0, 0, 0, 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, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 0, 0, 0,112, 0,233, 2, 0, 0, 0, 0,179, - 0, 0, 0, 1, 0,233, 9, 16, 0,232,225,240, 0,232,215, 16, 0,232,217,144, 0,232,217,208, 0,232,217, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5,223, 0, 0, 0, 0, 0, 0, 0, 75, 15, 15, 5,224, 0, 76, 0, 1, 0, 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, 42,208, 0,233, 4,224, 0,233, 7,240, 0,233, 2,160, - 0,233, 3,192, 0, 0, 0, 0, 0, 0, 0, 0, 5,209,251,112, 5,209,252, 48, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 2,160, - 0, 0, 0,180, 0, 0, 0, 1, 0,233, 3,192, 0, 0, 0, 0, 0, 0, 0, 0, 68,112,128, 0, 0, 0, 0, 0, 65,208, 0, 0, - 0, 0, 0, 0, 68,188, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,223, 0, 0, 0, 0, 0, 0, 0, 25, - 68,202,224, 0, 65,200, 0, 0, 68,202,224, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, - 0, 4, 4, 12, 0, 10, 5,224, 0, 26, 5,224, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,223, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,224, 0, 26, 0, 5, 0, 1, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 43,240, 5,219, 95,160, 5,219, 95,160, 0, 0, 0, 0, - 0, 0, 0, 0, 5,209,253,224, 5,209,254, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 3,192, - 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 2,160,192, 64, 0, 0, 67,126, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, -192, 17,189,112, 67,125, 70,246, 0, 0, 0, 0, 66, 72, 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,223, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 5,223, 0, 0, 0, 17, 0, 0, 0, 49, - 63,128, 0, 0, 66, 72, 0, 0, 72,146,124, 0, 66, 72, 0, 0, 61,204,204,205, 65, 32, 0, 0, 0, 72, 0, 0, 0, 0, 2, 0, - 0, 4, 4, 0, 0, 8, 5,224, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,223, - 0, 0, 0, 26, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,224, 0, 50, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 43, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5,210, 0, 16, 5,210, 1,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,168, 0,233, 4,224, - 0, 0, 0,160, 0, 0, 0, 1, 0,233, 7,240, 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, 68, 65, 84, 65, 32, 1, 0, 0, +144, 66,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 59,160, 2, 0, 0, 0, 0, +144, 60,160, 2, 0, 0, 0, 0,240, 61,160, 2, 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, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, 68, 65, 84, 65,184, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, +182, 0, 0, 0, 1, 0, 0, 0, 16, 80,160, 2, 0, 0, 0, 0, 32, 21,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, + 0, 8,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,231, 5, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 15, 15,232, 5, 80, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,123,147, 2, 0, 0, 0, 0, +176, 71,160, 2, 0, 0, 0, 0,176, 78,160, 2, 0, 0, 0, 0,240, 68,160, 2, 0, 0, 0, 0, 80, 70,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 87,189, 2, 0, 0, 0, 0,208, 98,189, 2, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 1, 0, 0,240, 68,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 80, 70,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,118, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,189, 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,231, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, + 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 5, + 26, 0,232, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 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,232, 5, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,124,147, 2, 0, 0, 0, 0,208, 55,234, 2, 0, 0, 0, 0,208, 55,234, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,173,210, 2, 0, 0, 0, 0,224, 29,170, 2, 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, 80, 70,160, 2, 0, 0, 0, 0, +183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 68,160, 2, 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,231, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, + 18, 0, 0, 0, 53, 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,232, 5, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,231, 5, 0, 0, 26, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 5, 54, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,147, 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, + 16, 32,170, 2, 0, 0, 0, 0, 16, 35,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,184, 0, 0, 0,176, 71,160, 2, 0, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,176, 78,160, 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, 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, 1, 0, 0, 0, 6, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 5,176, 0, 0, 0,180, - 0, 0, 0, 1, 0,233, 6,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 69, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, - 68,203, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 87, 0, 0, 0, 0, 0, 0, 0, 25, 68,237,128, 0, - 65,200, 0, 0, 68,237,128, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, - 0, 10, 6, 88, 0, 26, 6, 88, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 87, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 88, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,176, 72,160, 2, 0, 0, 0, 0, +183, 0, 0, 0, 1, 0, 0, 0, 16, 74,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 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, + 88, 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, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 6,208, 0, 0, 0,180, - 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 5,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 74,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176, 72,160, 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, 6, 87, 0, 0, 0, 26, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 88, 0, 30, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7,164, 32, 68, 65, 84, 65, 0, 0, 2,152, 1, 7,164, 32, 0, 0, 0,145, - 0, 0, 0, 1, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,108,213, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,188,163,215,226, -128, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, - 63,128, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,108,213, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, - 65, 32, 0, 0, 63,106, 14,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,138, 91,224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,249,252,209,194, 71,253,115, 0, 0, 0, 0, 0, 0, 0, 0, 67,249,127, 98, - 66, 71,255,129, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, - 63,128, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,108,213, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, - 65, 32, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 58,147,149, 52, 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, 1, 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,112, 75,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,112, 75,160, 2, 0, 0, 0, 0, +145, 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, 87,213,108, 66, + 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,128, 0, 0, 0,128, +226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, + 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, +184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, + 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, + 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, +184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,240, 0,233, 7,240, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 4,224, 0,233, 5,176, 0,233, 6,208, - 0, 0, 0, 1, 63, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 7, 1, 7,188, 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, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, - 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 60, 35,215, 10, 67,250, 0, 0, 0, 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, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, - 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, - 68, 65, 84, 65, 0, 0, 0,112, 0,233, 9, 16, 0, 0, 0,179, 0, 0, 0, 1, 0,233, 19,208, 0,233, 2, 0, 0,232,217,144, - 0,232,216, 16, 0,232,217, 80, 0,232,217,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,223, 0, 0, 0, 77, 0, 0, 4, 80, - 1, 1, 5,224, 4, 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,229, 44,128, 0,233, 18,176, 0,233, 18,176, 0,233, 9,176, 0,233, 17,144, 0, 0, 0, 0, 0, 0, 0, 0, 6,157,103,176, - 6,160,128,208, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 9,176, 0, 0, 0,180, 0, 0, 0, 1, 0,233, 10,208, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 84, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 68,188, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,223, 0, 0, 0, 0, 0, 0, 0, 25, 68,237,128, 0, 65,200, 0, 0, 68,237,128, 0, 65,200, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, 0, 10, 5,224, 0, 26, 5,224, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,223, 0, 0, 0, 77, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5,224, 0, 26, 0, 7, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,229, 52,192, 5,221, 1, 32, 5,221, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 5,210, 5, 16, 5,210, 6, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 10,208, 0, 0, 0,180, 0, 0, 0, 1, 0,233, 17,144, 0,233, 9,176, - 0, 0, 0, 0, 67, 92, 0, 0,196, 55, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 92, 0, 0,196, 41, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 1, 0, 0,176, 78,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176, 71,160, 2, 0, 0, 0, 0,176, 72,160, 2, 0, 0, 0, 0, 16, 74,160, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 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,219, 0, 0, 0, 0, 0, 0, 2,163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 2,164, 0,220, 2,164, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,223, 0, 0, 5,223, 0, 0, 0,103, 0, 0, 4, 80, 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, 1, 0, 0, 0, 0, 0, 0, - 0,229, 45,160, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 11,240, 0,233, 16,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 11,240, 0, 0, 0,176, 0, 0, 0, 1, 0,233, 13, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 0, 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, 68, 65, 84, 65,184, 0, 0, 0, + 16, 80,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, + 0, 8,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, 81, 0, 0, 0, 69, 4, 0, 0, 1, 1,232, 5,245, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, +224,125,147, 2, 0, 0, 0, 0, 64, 96,160, 2, 0, 0, 0, 0, 64, 96,160, 2, 0, 0, 0, 0, 16, 81,160, 2, 0, 0, 0, 0, +160, 91,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,104,189, 2, 0, 0, 0, 0, +224,111,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 16, 81,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, +112, 82,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,189, 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,231, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,232, 5, 26, 0,232, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, + 81, 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 26, 0, 8, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,165,147, 2, 0, 0, 0, 0,240, 61,239, 2, 0, 0, 0, 0, +240, 61,239, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,212, 2, 0, 0, 0, 0, +128, 41,170, 2, 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, +112, 82,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,160, 91,160, 2, 0, 0, 0, 0, 16, 81,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 67, 0, 64, 55,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0, 41,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0,163, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 0,164, 2,220, 0,164, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0,231, 5, 0, 0,107, 0, 0, 0, 69, 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, 1, 0, 0, 0, 0, 0, 0, 0, +192,127,147, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 83,160, 2, 0, 0, 0, 0, + 16, 90,160, 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, 68, 65, 84, 65, 80, 1, 0, 0,208, 83,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, + 96, 85,160, 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, + 84,114, 97,110,115,102,111,114,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, + 84,114, 97,110,115,102,111,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 26, 0,220, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 13, 16, 0, 0, 0,176, 0, 0, 0, 1, 0,233, 14, 48, - 0,233, 11,240, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, + 0, 0, 26,255,220, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,105,101,119, 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, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0, 96, 85,160, 2, 0, 0, 0, 0, +179, 0, 0, 0, 1, 0, 0, 0,240, 86,160, 2, 0, 0, 0, 0,208, 83,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 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, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,229, 0,220, 1, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 14, 48, 0, 0, 0,176, 0, 0, 0, 1, - 0,233, 15, 80, 0,233, 13, 16, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,253,220, 0, 29, 1, 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, 68, 65, 84, 65, 80, 1, 0, 0, +240, 86,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,128, 88,160, 2, 0, 0, 0, 0, 96, 85,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,253,169, 0,220, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 15, 80, 0, 0, 0,176, - 0, 0, 0, 1, 0,233, 16,112, 0,233, 14, 48, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114, -105,101,110,116, 97,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, 84,114, 97,110,115,102,111,114,109, 32, 79,114, -105,101,110,116, 97,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,169,253,220, 0, 36, 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,253, 79, 0,220, 0, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 16,112, - 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 15, 80, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,115,116, 32, 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, 76, 97,115,116, 32, 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, + 68, 65, 84, 65, 80, 1, 0, 0,128, 88,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 16, 90,160, 2, 0, 0, 0, 0, +240, 86,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, +109, 32, 79,114,105,101,110,116, 97,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, 84,114, 97,110,115,102,111,114, +109, 32, 79,114,105,101,110,116, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 39, 0,220, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, - 0,233, 17,144, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 10,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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,253,220, 0, 66, 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, 68, 65, 84, 65, 80, 1, 0, 0, 16, 90,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 88,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 97,115,116, 32, 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, + 76, 97,115,116, 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 39,253,220, 0, 16, 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, 68, 65, 84, 65, 24, 1, 0, 0,160, 91,160, 2, 0, 0, 0, 0, +183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 82,160, 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, 5,223, 0, 0, 0,103, 0, 0, 4, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,224, 3,234, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 45, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5,210, 8, 32, 5,210, 11,192, 0, 0, 0, 0, 1, 7,168, 32, 68, 65, 84, 65, 0, 0, 2,152, - 1, 7,168, 32, 0, 0, 0,145, 0, 0, 0, 1, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,210, 35,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,128, 0, 0, 0, -128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 63, 53, 4,238,190, 59,103,186, 63, 46,217,247, 0, 0, 0, 0, 63, 53, 4,255, - 62, 59,103,126,191, 46,217,244, 0, 0, 0, 0, 50, 52, 3,228, 63,119, 70,248, 62,132,131,217, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193,138, 60,152, 63,128, 0, 0, 63, 53, 4,236, 63, 53, 4,244, 53, 24, 0, 0, 0, 0, 0, 0,190, 59,103,137, - 62, 59,103,118, 63,119, 70,227, 0, 0, 0, 0, 63, 46,217,238,191, 46,217,221, 62,132,131,213, 0, 0, 0, 0, 65, 60,213,186, -193, 60,213,168, 64,143, 28,221, 63,128, 0, 0, 63, 69,253,100,190,153,213, 71,191, 46,219,194,191, 46,217,247, 63, 69,253,119, - 62,153,213, 21, 63, 46,219,191, 63, 46,217,244, 50, 68,228, 65, 63,202,250,197,190,132,133, 53,190,132,131,217, 0, 0, 0, 0, - 0, 0, 0, 0, 65,138, 21, 13, 65,138, 60,152, 63, 37,129, 20, 63, 37,128,162, 53,252, 0, 0, 52,160, 0, 0,189,228, 76,142, - 61,228, 76,119, 63, 22,159, 2, 52, 49, 0, 0,196, 19,133, 0, 68, 19,132,242,195, 95,154, 27,194, 71,253, 81, 68, 19, 90,205, -196, 19, 90,191, 67, 95, 90, 36, 66, 71,255, 95, 63, 53, 4,238,190, 59,103,186, 63, 46,217,247, 0, 0, 0, 0, 63, 53, 4,255, - 62, 59,103,126,191, 46,217,244, 0, 0, 0, 0, 50, 52, 3,228, 63,119, 70,248, 62,132,131,217, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193,138, 60,152, 63,128, 0, 0, 63, 69,253,100,190,153,213, 71,191, 46,219,194,191, 46,217,247, 63, 69,253,119, - 62,153,213, 21, 63, 46,219,191, 63, 46,217,244, 50, 68,228, 65, 63,202,250,197,190,132,133, 53,190,132,131,217, 0, 0, 0, 0, - 0, 0, 0, 0, 65,138, 21, 13, 65,138, 60,152, 63, 59,163,122,191, 15,250,235,190,110,141,221,190,155,113,230, 65,138, 60,152, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,159, 91,166, 0, 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,231, 5, 0, 0,107, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232, 5,219, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,126,147, 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, +176, 43,170, 2, 0, 0, 0, 0,144, 49,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,160, 2, 0, 0, 0, 0, + 68, 65, 84, 65,248, 2, 0, 0, 0, 93,160, 2, 0, 0, 0, 0,145, 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,212,119,214, 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,238, 4, 53, 63,186,103, 59,190, +247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, +217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,236, 4, 53, 63,244, 4, 53, 63, + 0, 0, 24, 53, 0, 0, 0, 0,137,103, 59,190,118,103, 59, 62,227, 70,119, 63, 0, 0, 0, 0,238,217, 46, 63,221,217, 46,191, +213,131,132, 62, 0, 0, 0, 0,186,213, 60, 65,168,213, 60,193,221, 28,143, 64, 0, 0,128, 63,100,253, 69, 63,110, 0,157,190, +194,219, 46,191,247,217, 46,191,119,253, 69, 63, 60, 0,157, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50, 18, 41,207, 63, + 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65, 20,129, 37, 63,162,128, 37, 63, + 0, 0,252, 53, 0, 0,160, 52,183,177,223,189,161,177,223, 61,201,148, 19, 63, 0, 0, 96, 51, 0,133, 19,196,242,132, 19, 68, + 28,154, 95,195, 81,253, 71,194,205, 90, 19, 68,191, 90, 19,196, 37, 90, 95, 67, 95,255, 71, 66,238, 4, 53, 63,186,103, 59,190, +247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, +217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,100,253, 69, 63,110, 0,157,190, +194,219, 46,191,247,217, 46,191,119,253, 69, 63, 60, 0,157, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50, 18, 41,207, 63, + 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65,148,157,200, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148,157,200, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +148,157,200, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,122,163, 59, 63,235,250, 15,191, +221,141,110,190,230,113,155,190,152, 60,138, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,131,158, 58, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 18,176, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 7, - 1, 7,188, 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, 1, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 60, 35,215, 10, 67,250, 0, 0, - 0, 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, 7, 0, 10, - 0,159, 0, 0, 0, 0, 0, 0, 0, 1, 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, 68, 65, 84, 65, 0, 0, 0,112, 0,233, 19,208, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, - 0,233, 9, 16, 0,232,218, 16, 0,232,217, 80, 0,232,216, 80, 0,232,218, 80, 0, 0, 0, 0, 0, 0, 5,225, 0, 0, 7,108, - 0, 0, 3, 77, 0, 0, 4, 80, 3, 3, 1,140, 1, 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,229, 41, 32, 0,233, 22,176, 0,233, 30,112, 0,233, 20,112, 0,233, 21,144, 0, 0, 0, 0, - 0, 0, 0, 0, 5,210, 12, 48, 6,160,116, 96, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 20,112, 0, 0, 0,180, 0, 0, 0, 1, - 0,233, 21,144, 0, 0, 0, 0, 0, 0, 0, 0, 67,216, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 67,198, 0, 0, - 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,139, 0, 0, 0, 0, 0, 0, 0, 25, 67, 66, 0, 0, 65,200, 0, 0, - 67, 66, 0, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, 0, 10, 1,140, - 0, 26, 1,140, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,225, 0, 0, 7,108, 0, 0, 3, 77, 0, 0, 3,102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,140, 0, 26, 0, 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 42, 64, 5,216,145, 16, 5,216,145, 16, 0, 0, 0, 0, 0, 0, 0, 0, 5,210, 14,160, - 5,210, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 21,144, 0, 0, 0,180, 0, 0, 0, 1, - 0, 0, 0, 0, 0,233, 20,112, 0, 0, 0, 0, 67,132, 0, 0,194,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,190, 0, 0, -195, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 1,140, 0, 0, 0, 17, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 1,123, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,123, 0, 0, 0, 17, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 0, 0, 2, 3, 3, 0, 0, 4, 0, 0, 6, 1,140, - 0,234, 1,124, 0,217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,225, 0, 0, 7,108, 0, 0, 3,103, 0, 0, 4, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,140, 0,234, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 41,176, 6,161, 8,240, 6,161, 8,240, 0, 0, 0, 0, 0, 0, 0, 0, 5,210, 16,208, - 5,210, 17,176, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,248, 0,233, 22,176, 0, 0, 0,154, 0, 0, 0, 1, - 0,233, 27, 32, 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, 68, 65, 84, 65, 32, 1, 0, 0, 64, 96,160, 2, 0, 0, 0, 0, +146, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, + 96,138,160, 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, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0,255,255, 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, 68, 65, 84, 65,184, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 80,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, + 32, 6,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, + 73, 3, 0, 0, 69, 4, 0, 0, 3, 3,142, 1,253, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,120,147, 2, 0, 0, 0, 0, 96,101,160, 2, 0, 0, 0, 0, + 48,114,160, 2, 0, 0, 0, 0,160, 98,160, 2, 0, 0, 0, 0, 0,100,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,114,189, 2, 0, 0, 0, 0,176, 5,194, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, +160, 98,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0,100,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,190, 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, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 73, 3, 0, 0, 98, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,122,147, 2, 0, 0, 0, 0,176, 3,235, 2, 0, 0, 0, 0,176, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,182,212, 2, 0, 0, 0, 0, 0, 54,170, 2, 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, 0,100,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 98,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,194,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,190, 67, 0, 0, 81,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,226, 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,226, 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, 0, 4, 6, 0,142, 1,227, 0,125, 1,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, + 99, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,227, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,121,147, 2, 0, 0, 0, 0,112, 31,236, 2, 0, 0, 0, 0, +112, 31,236, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,169,212, 2, 0, 0, 0, 0, +176, 57,170, 2, 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, + 96,101,160, 2, 0, 0, 0, 0,155, 0, 0, 0, 1, 0, 0, 0,224,106,160, 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, 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, 6,160,117, 80, 6,160,117, 80, 0,233, 23,208, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,236, 2, 0, 0, 0, 0, 0, 4,236, 2, 0, 0, 0, 0, +192,102,160, 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, 1, 0, 0, 68, 65, 84, 65, 0, 0, 0, 12, - 0,233, 23,208, 0, 0, 0,203, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0,233, 24, 16, 68, 65, 84, 65, 0, 0, 0,156, - 0,233, 24, 16, 0, 0, 0,202, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7,176, 32, 0, 19, 0, 0, 0, 1, 0, 1, - 1, 7,176, 32, 0, 20, 0, 0, 0, 1, 0, 1, 1, 7,176, 32, 0, 21, 0, 1, 0, 1, 0, 1, 1, 7,176, 32, 0, 0, 0, 0, - 0, 1, 0, 1, 0,233, 38, 96, 0, 0, 0, 0, 0, 1, 0, 1, 1, 7,192, 32, 0, 0, 0, 0, 0, 1, 0, 1, 0,233, 43,112, - 0, 0, 0, 0, 0, 1, 0, 1, 1, 7,200, 32, 0, 0, 0, 0, 0, 1, 0, 1, 0,233, 42, 48, 0, 0, 0, 0, 0, 1, 0, 1, - 1, 7,196, 32, 0, 0, 0, 0, 0, 1, 0, 1, 0,233, 35, 64, 0, 0, 0, 0, 0, 1, 0, 1, 1, 7,188, 32, 0, 0, 0, 0, - 0, 1, 0, 1, 0,233, 34,144, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 24,224, 0, 0, 0,180, 0, 0, 0, 1, 0,233, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,240, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 55, 0, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0, - 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 25, 67,137,128, 0, 65,200, 0, 0, 67,137,128, 0, - 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, 0, 10, 0,195, 0, 26, 0,195, - 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 53, 0, 0, 4,247, 0, 0, 2, 69, 0, 0, 2, 94, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 26, 0, 0, 0, 1, 0, 2, 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,192,102,160, 2, 0, 0, 0, 0,206, 0, 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 13, 0, 0, 0, 16,103,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16,103,160, 2, 0, 0, 0, 0, +205, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 32,116,160, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, + 32,116,160, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 32,116,160, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, + 32,116,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,130,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +224,142,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,158,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +128,152,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,157,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0,148,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,126,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 96,138,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,125,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, + 32,104,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,128,105,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,236, 0,233, 26, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, - 0,233, 24,224, 0, 0, 0, 0, 67,150, 0, 0,196,116,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,150, 85,205,196, 35,204,223, -195,207, 85, 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,194, 0, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 2, 4, 0, 0, 6, 0,195, 0,156, 0,195, - 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 53, 0, 0, 4,247, 0, 0, 2, 95, 0, 0, 2,250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 0, 0, 0,224, 0,233, 27, 32, 0, 0, 0,151, 0, 0, 0, 1, 0,233, 30,112, - 0,233, 22,176, 0,233, 24,224, 0,233, 26, 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, 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, 68, 65, 84, 65, 24, 1, 0, 0,128,105,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,104,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, + 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, + 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, + 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, +224,106,160, 2, 0, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0, 48,114,160, 2, 0, 0, 0, 0, 96,101,160, 2, 0, 0, 0, 0, + 32,104,160, 2, 0, 0, 0, 0,128,105,160, 2, 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, 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, 1,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,236, 0,233, 28, 48, 0, 0, 0,180, 0, 0, 0, 1, 0,233, 29, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 69, 0, 0, - 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 67,138, 0, 0, 0, 0, 0, 0, 65,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 19, - 0, 0, 0, 0, 0, 0, 0, 25, 68,237,128, 0, 65,200, 0, 0, 68,237,128, 0, 65,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 4, 4, 12, 0, 10, 1, 20, 0, 26, 1, 20, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 89, 0, 0, 7,108, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 20, 0, 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, 68, 65, 84, 65, - 0, 0, 0,236, 0,233, 29, 80, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 28, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, + 48,108,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,144,109,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 24, 1, 0, 0,144,109,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48,108,160, 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, 89, 6, 0, 0,108, 7, 0, 0, + 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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,240,110,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, +240,110,160, 2, 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, + 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 89, 0, 0, 7,108, 0, 0, 0, 26, 0, 0, 4, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 20, 4, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 7,172, 32, 68, 65, 84, 65, - 0, 0, 2,152, 1, 7,172, 32, 0, 0, 0,145, 0, 0, 0, 1, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, -128, 0, 0, 0,128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 63,128, 0, 0, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, 65, 32, 0, 0, 62,111,122,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,106, 14,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,249,252,209,194, 71,253,115, - 0, 0, 0, 0, 0, 0, 0, 0, 67,249,127, 98, 66, 71,255,129, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,193, 32, 0, 0, 63,128, 0, 0, 64,136,212,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 31,175,184, 65, 32, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,222, 32,100, 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, 1, 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, 68, 65, 84, 65, 32, 1, 0, 0, 48,114,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,106,160, 2, 0, 0, 0, 0, 48,108,160, 2, 0, 0, 0, 0,144,109,160, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 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, 1, 0, 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 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, + 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, + 83, 67, 0, 0, 96, 5, 0, 0, 32,116,160, 2, 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, 83, 67, 83, 99,101,110,101, 0, +116, 97,103,101, 0, 97,105,110, 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, 96,138,160, 2, 0, 0, 0, 0, 64,130,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192,121,160, 2, 0, 0, 0, 0,160,122,160, 2, 0, 0, 0, 0,192,121,160, 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, 68, 65, 84, 65, 0, 0, 0,240, 0,233, 30,112, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, - 0,233, 27, 32, 0,233, 28, 48, 0,233, 29, 80, 0, 0, 0, 1, 63, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 1, 0, 7, 1, 7,188, 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, 1, 0, 0, 0, 1, 0, 2, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 60, 35,215, 10, - 67,250, 0, 0, 0, 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, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 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, 83, 67, 0, 0, 4,248, 1, 7,176, 32, 0, 0, 0,143, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7,188, 32, 0,233, 38, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 0,232,212,160, 0,233, 32, 64, 0,232,212,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, 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, 1, 61,204,204,205, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 32,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 32,224, + 16,123,160, 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,172, 68, 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,100, 0, 0, 0,100, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,128, 1,224, 0, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, - 0,141, 7,128, 4, 56, 0, 4, 0, 4, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 33, 0, 23, 0, 0, 0,128, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,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,233, 34, 32, 0,233, 34, 32, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 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, 68,172, 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,100, 0, 0, 0, +100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, + 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0,128, 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, 0, 0, + 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,124,160, 2, 0, 0, 0, 0, +144,124,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 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, 0, 5, 0, 2, 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, @@ -639,645 +930,726 @@ char datatoc_B_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, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 16, 0, 0, 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, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76,204,205, 63, 76,204,205, 63, 76,204,205, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 0, 0, 0, 6, 0, 0, 0, 16, 63,128, 0, 0, 63,128, 0, 0, - 2,173, 0, 95, 63,217,153,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0,172, 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, 10, 0, 0, 0, 0, 0, 0, 0,232,101,128, - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 28, - 0,232,212,160, 0, 0, 0,125, 0, 0, 0, 1, 0,233, 31,240, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, - 2,240, 1,245, 1, 7,192, 32, 68, 65, 84, 65, 0, 0, 0, 28, 0,233, 31,240, 0, 0, 0,125, 0, 0, 0, 1, 0,233, 32, 64, - 0,232,212,160, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 4, 0, 3,200, 3, 42, 1, 7,196, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 0,233, 32, 64, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0, 0, 0,233, 31,240, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 4, 0, - 3, 73, 3, 70, 1, 7,188, 32, 68, 65, 84, 65, 0, 0, 0, 40, 0,233, 32,144, 0, 0, 0,124, 0, 0, 0, 1, 1, 44, 0, 0, - 0, 1, 0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 1,244, 0,200, 0,100, 0, 20, 0, 0, 39, 16, 61,204,204,205, 65,240, 0, 0, - 64, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 12, 0,233, 32,224, 0, 0, 0,141, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 1, 63, 76,204,205, 66,180, 0, 0, 0, 9, 0, 1, 63,128, 0, 0, 58,131, 18,111, 0, 32, 0, 32, - 0, 32, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5,255,255, 0, 50, 0, 50, - 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, - 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 60, 35,215, 10, 61,204,204,205, 0, 0, 0, 0, 0, 0, 0,250, 61,204,204,205, 61,204,204,205, 63,166,102,102, - 63,192, 0, 0, 65,240, 0, 0, 63,122,225, 72, 61,204,204,205, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 2, 67, 0, 3, - 2, 0, 1, 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, 68, 65, 84, 65, 0, 0, 0, 72, 0,233, 34, 32, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 32, 82,101,110,100,101,114, 76, 97,121,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, 15,255,255, 0, 0, 0, 0, 0, 0,127,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 67, 65, 0, 0, 0,136, 0,233, 34,144, 0, 0, 0, 30, 0, 0, 0, 1, 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, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 63, 0, 0, 0, 66, 68,137,145, 61,204,204,205, 66,200, 0, 0, - 66, 12, 0, 0, 64,234, 14,161, 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, 76, 65, - 0, 0, 1,132, 0,233, 35, 64, 0, 0, 0, 40, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 65, 83,112,111,116, 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, 32, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 65,239,255,247, 66,150, 0, 0, - 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0,233, 36,240, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, - 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 0,233, 36,240, - 0, 0, 1, 50, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, -191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 0,233, 38, 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, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,233, 38, 32, 0, 0, 1, 48, - 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, - 0, 0, 1,104, 0,233, 38, 96, 0, 0, 0,123, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 62,128, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, - 61,204,204,205, 61,204,204,205, 61,204,204,205, 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,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 28,204,205, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 32, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61, 76,204,205, 0, 0, 0, 5, 0, 0, 0, 0, 59,163,215, 10, 0, 0, 0, 0, - 62,128, 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, 84, 88, 0, 0, 0,120, - 0,233, 39,240, 0, 0, 0, 28, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101, -120,116, 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, 7, 0, 0, 0, 1, 0,233, 40,144, 0,233, 40,144, 0,233, 40,144, 0,233, 40,144, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7,182, 32,255,255,255,255, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 0,233, 40,144, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0,233, 40,208, 0, 0, 0, 0, 0, 0, 0, 0, 70, 82, 69, 69, 68, 65, 84, 65, 0, 0, 0, 4, 0,233, 40,208, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 3, 80, 1, 7,188, 32, 0, 0, 0,115, 0, 0, 0, 1, 1, 7,192, 32, - 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, 1, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 34,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,239,101,110,192,208, 62,150, 64,170,255, 78, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,141,254, 42, - 60, 49, 57,192, 63, 80,159, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 47,149,222, 63, 58, 70, 53,188, 49, 56,222, - 0, 0, 0, 0,190,162,126, 86, 62,159,251,227, 63,101, 53, 55, 0, 0, 0, 0, 63, 39,165, 7,191, 28, 84,149, 62,227,247, 51, - 0, 0, 0, 0, 64,239,101,110,192,208, 62,150, 64,170,255, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1, 51,128, 0, 1,179, 0, 0, 1, - 0, 0, 0, 0, 51, 0, 0, 0, 63,128, 0, 0, 51,128, 0, 1, 0, 0, 0, 0,179, 0, 0, 2,167, 0, 0, 2, 63,128, 0, 1, - 0, 0, 0, 0, 53, 0, 0, 1, 41, 0, 0, 1,168,128, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 49,215,190,157, 52, 4,170,167, -128, 0, 0, 0,178,157,116,129, 63,128, 0, 1, 51, 15, 69, 33,128, 0, 0, 0, 51, 67,254, 73, 49,106, 97,243, 63,128, 0, 0, -128, 0, 0, 0, 52, 64, 0, 3, 39,157,164,183, 53,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 63, 16,225,187, 63,128, 0, 0, 62,204,204,205, 63, 32, 54,237, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 1, 7,192, 32, 0, 0, 0,115, 0, 0, 0, 1, - 1, 7,196, 32, 1, 7,188, 32, 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, 1, 4, 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, 6,144,198, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 43,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,233, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 47,149,222, 63, 58, 70, 52, -188, 49, 56,179,128, 0, 0, 0,190,162,126, 86, 62,159,251,227, 63,101, 53, 56,128, 0, 0, 0, 63, 39,165, 7,191, 28, 84,149, - 62,227,247, 50,128, 0, 0, 0, 64,239,101,110,192,208, 62,151, 64,170,255, 77, 63,128, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 34,208,229, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 6,144,198,192, 6,144,204,128, 0, 0, 0, 25, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 0,233, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 1, 7,196, 32, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0, 0, - 1, 7,192, 32, 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, 1, 4, 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,233, 35, 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, - 64,130,112,154, 63,128,178,183, 64,188,236,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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 38,123,229, - 61, 98, 43, 87, 63,238,229,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,148,236, 54, 63,116,134, 25,189, 98, 13,236, - 0, 0, 0, 0,191, 69,102,221,190, 76,174, 57, 63, 26,194, 34, 0, 0, 0, 0, 63, 16,255, 37, 62, 95,161,241, 63, 75,111,164, - 0, 0, 0, 0, 64,130,112,154, 63,128,178,183, 64,188,236,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 50,128, 0, 1,179, 0, 0, 0, - 0, 0, 0, 0, 50,128, 0, 1, 63,128, 0, 1, 51, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 39, 0, 0, 1, 52, 0, 0, 1, 39,128, 0, 1, 63,128, 0, 0,190,148,236, 53,191, 69,102,222, 63, 16,255, 37, -128, 0, 0, 0, 63,116,134, 24,190, 76,174, 57, 62, 95,161,240,128, 0, 0, 0,189, 98, 13,235, 63, 26,194, 34, 63, 75,111,166, -128, 0, 0, 0, 63, 13, 19,208,190,102, 65,234,192,231, 10, 10, 63,128, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 1, 0, 0, 0, 68, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 34,208,229, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,219,142, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0, + 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, 40, 0, 0, 0, +192,121,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0, 48,122,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,244, 2,237, 1,224,142,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 48,122,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0,160,122,160, 2, 0, 0, 0, 0,192,121,160, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,205, 3, 35, 3, 0,148,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +160,122,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,122,160, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 77, 3, 63, 3, 96,138,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, + 16,123,160, 2, 0, 0, 0, 0,141, 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, 63, 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 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, 2, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 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, + 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 88, 0, 0, 0,144,124,160, 2, 0, 0, 0, 0, +130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, + 76, 97,121,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,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 67, 65, 0, 0,176, 0, 0, 0, 48,125,160, 2, 0, 0, 0, 0, 30, 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, 1, 0, 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,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66, +161, 14,234, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,248, 1, 0, 0, 32,126,160, 2, 0, 0, 0, 0, 40, 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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,112, 1, 7,200, 32, 0, 0, 0, 42, 0, 0, 0, 1, - 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,205, - 63, 76,204,205, 63, 76,204,205, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 76,204,205, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, - 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, - 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 3, - 3, 1, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, - 61,204,204,205, 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0,233, 41, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 65, 83,112,111,116, 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, 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, 96,128,160, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, + 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 41,224, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, - 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,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, 68, 65, 84, 65, 0, 0, 0,136, 0,233, 41, 48, 0, 0, 0, 33, - 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 42, 48, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 0,233, 41,224, 0, 0, 0, 19, 0, 0, 0, 1, - 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, 84, 69, 0, 0, 1, 24, 0,233, 42, 48, 0, 0, 0, 38, 0, 0, 0, 1, 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, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 64,160, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 60,204,204,205, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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, 77, 69, 0, 0, 1, 24, 0,233, 43,112, 0, 0, 0, 52, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 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, 44,176, 0,233, 51, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 46, 96, 0,233, 48,208, - 0, 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, 44,224, 0, 0, 0, 1, - 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 47, 80, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 49,144, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51,128, 0, 0,180, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 4, 63,128, 0, 4, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 67, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 0,233, 44,176, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7,200, 32, 68, 65, 84, 65, 0, 0, 1, 84, 0,233, 44,224, 0, 0, 1, 53, - 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,233, 46, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, + 96,128,160, 2, 0, 0, 0, 0, 53, 1, 0, 0, 1, 0, 0, 0, 1, 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,224,129,160, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,192, - 0,233, 46, 96, 0, 0, 0, 58, 0, 0, 0, 8, 63,128, 0, 0, 63,127,255,255,191,128, 0, 0, 73,230, 73,230,182, 26, 3,255, - 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,191,128, 0, 0, 73,230,182, 26,182, 26, 3,255, 0, 0, 0, 0,191,128, 0, 1, -191,127,255,253,191,128, 0, 0,182, 26,182, 26,182, 26, 3,255, 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3,191,128, 0, 0, -182, 26, 73,230,182, 26, 3,255, 0, 0, 0, 0, 63,128, 0, 4, 63,127,255,247, 63,128, 0, 0, 73,230, 73,230, 73,230, 3,255, - 0, 0, 0, 0, 63,127,255,245,191,128, 0, 5, 63,128, 0, 0, 73,230,182, 26, 73,230, 3,255, 0, 0, 0, 0,191,128, 0, 3, -191,127,255,250, 63,128, 0, 0,182, 26,182, 26, 73,230, 3,255, 0, 0, 0, 0,191,127,255,255, 63,128, 0, 0, 63,128, 0, 0, -182, 26, 73,230, 73,230, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 0,233, 47, 80, 0, 0, 1, 53, 0, 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,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,224,129,160, 2, 0, 0, 0, 0, 51, 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, 87, 79, 0, 0,232, 1, 0, 0, + 64,130,160, 2, 0, 0, 0, 0,124, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 62, 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61, +205,204,204, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,233, 48,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, + 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, 88, 0, 0,176, 0, 0, 0, +112,132,160, 2, 0, 0, 0, 0, 28, 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, 88, 84,101,120,116, 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, + 7, 0, 0, 0, 1, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, + 96,133,160, 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, + 32,134,160, 2, 0, 0, 0, 0,255,255,255,255, 0, 4, 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, 96,133,160, 2, 0, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,133,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, + 68, 65, 84, 65, 4, 0, 0, 0,208,133,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0, + 64, 4, 0, 0, 96,138,160, 2, 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0,224,142,160, 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, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101, +114, 97, 46, 48, 48, 49, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,144, 0,233, 48,208, - 0, 0, 0, 55, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 3, - 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, - 0,233, 49,144, 0, 0, 1, 53, 0, 0, 0, 5, 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,233, 51, 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, 48,125,160, 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,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, 42,254,141, 63,192, 57, 49, 60, + 34,159, 80, 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, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128, +129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, + 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, + 0, 0, 0, 0, 79, 66, 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, 2, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,120, 0,233, 51, 16, 0, 0, 0, 54, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, - 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 2, 85, 83, 69, 82, 0, 0, 11, 40, 0,169, 26,192, 0, 0, 0,172, 0, 0, 0, 1, - 0, 1,152, 33, 0, 0, 2, 63, 0, 0, 0, 5, 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, 1, 0, 0, 0, 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, 0, 0, 64, 4, 0, 0,224,142,160, 2, + 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0, 0,148,160, 2, 0, 0, 0, 0, 96,138,160, 2, 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, 1, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,179,235, 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,144,158,160, 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, 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,176,147,160, 2, + 0, 0, 0, 0, 96,147,160, 2, 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, 0, 0, 0, 0, 0,128, 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,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,222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, + 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, + 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +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, 4, 0, 1, 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, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,201,234, 2, + 0, 0, 0, 0,128,171,235, 2, 0, 0, 0, 0, 25, 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, 68, 65, 84, 65, 8, 0, 0, 0,176,147,160, 2, 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, 96,147,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 64, 4, 0, 0, 0,148,160, 2, 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,142,160, 2, 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, 1, 0, 0, 4, 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, 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, 32,126,160, 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,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,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 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, 53,236,148,190, +222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, + 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 77, 65, 0, 0,248, 2, 0, 0,128,152,160, 2, 0, 0, 0, 0, 42, 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, 65, 77, 97,116,101,114,105, + 97,108, 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, 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, 0, 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, 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, 0, 0, 3, 0, 1, 3, 3, 0, 1, 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,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,192,155,160, 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,144,156,160, 2, 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,205,204, 76, 63, +205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,155,160, 2, 0, 0, 0, 0, + 33, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157,160, 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, 47, 47, 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, 16, 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, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +144,156,160, 2, 0, 0, 0, 0, 19, 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, 84, 69, 0, 0, 80, 1, 0, 0, + 0,157,160, 2, 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, + 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, 1, 0, 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, 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, 5, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 1, 0, 0, 0, 2, 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, + 77, 69, 0, 0,144, 1, 0, 0,144,158,160, 2, 0, 0, 0, 0, 52, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 2, 0, 0, 0, 0, 64,167,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,162,160, 2, 0, 0, 0, 0,192,164,160, 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, 96,160,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,163,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144,165,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 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, 0,168,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +128,152,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 96,160,160, 2, 0, 0, 0, 0, 56, 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, + 16,162,160, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 52, 48, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 64, 0, 5, 0, 2, 1, 7,216, 32, 1, 7,236, 32, - 5,210, 18, 32, 5,210, 18, 32, 5,210, 24, 64, 5,210, 24, 64, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, - 0, 0, 0, 1, 0, 0, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0,191,100, 90, 30, 62,153,153,154, 63,102,102,102, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 62,254,250, 31, 63, 0, 0, 9, 63, 25,153,156, 0, 0, 0, 0, 62, 76,204,205, 62, 76,204,205, 62, 76,204,205, 63,128, 0, 0, - 63, 22,135, 44, 62,235,133, 32, 62,125,243,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76, 73,195, 63, 86,135, 42, - 63,128, 0, 0, 0, 0, 0, 0, 61,135, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 93, 47, 16,190,200,180, 58, -190, 93, 47, 24, 0, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, - 31,144, 0, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, 68, 65, 84, 65,192, 0, 0, 0, 16,162,160, 2, 0, 0, 0, 0, 58, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, + 0, 0,128,191,230, 73, 26,182, 26,182,255, 0, 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, + 26,182,255, 0, 3, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, + 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, + 0, 0,128, 63,230, 73, 26,182,230, 73,255, 0, 3, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182, +230, 73,255, 0, 3, 0, 0, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, + 68, 65, 84, 65,104, 1, 0, 0, 16,163,160, 2, 0, 0, 0, 0, 56, 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,192,164,160, 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, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 19, 8, 1, 7,216, 32, 0, 0, 0,170, 0, 0, 0, 1, 1, 7,236, 32, - 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, 0, 1, 0, 25, -255,231, 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, 0, 1, 0, 15, -255,241, 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, 0, 1, 0, 0, - 0, 25, 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, 0, 1, 0, 15, -255,241, 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, 0, 1,255,236, - 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, 0, 1,255,236, - 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, 0, 1, 0, 15, -255,241, 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, 0, 25, -255,236, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0, 25, -255,236, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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,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,145,145,145,245, 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, -255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, -255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,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,145,145,145,245, 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,180,180,180,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, -130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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,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,145,145,145,245, 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,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 82, 96,110,255,124,137,150,255, 3, 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, -255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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, -255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, -255,255,255,128, 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,145,145,145,245, 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, -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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,172,172,172,255, 84, 44, 31,100, 17, 27, 60,100, - 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 16, 64, 16,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80,228,156,198,255,255,255,170,255, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, -255,255,255,128, 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,145,145,145,245, 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, -255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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,255,255,255, 10, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, -255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,145,145,145,245, 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,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255, -255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, -195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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, -255,255,255,128, 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,145,145,145,245, 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, -255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18, -255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, -255,255,255,128, 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,145,145,145,245, 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, -255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, - 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255, -129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,255,255,255,128, 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, 68, 65, 84, 65, 0, 0, 19, 8, 1, 7,236, 32, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0, 0, 1, 7,216, 32, - 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 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, 0, 1, 0, 25,255,231, 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, 0, 1, 0, 15,255,241, 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, 0, 1, 0, 0, 0, 25, 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, 0, 1, 0, 15,255,241, 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, 0, 1,255,236, 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, 0, 1,255,236, 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, 0, 1, 0, 15,255,241, 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, 0, 25,255,236, 0, 0, - 0, 0, 0,255, 25, 25, 25,230, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0, 25,255,236, 0, 0, - 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, + 68, 65, 84, 65,144, 0, 0, 0,192,164,160, 2, 0, 0, 0, 0, 55, 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,104, 1, 0, 0,144,165,160, 2, 0, 0, 0, 0, 56, 1, 0, 0, 5, 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, + 64,167,160, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0, 64,167,160, 2, 0, 0, 0, 0, 54, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82, 64, 11, 0, 0, + 96,184, 48, 2, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 3, 0, 0, 0, 48, 52, 6, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 64, 0, 5, 0, 2, 0,208,179,160, 2, 0, 0, 0, 0,176,200,160, 2, 0, 0, 0, 0,112, 58,170, 2, 0, 0, 0, 0, +112, 58,170, 2, 0, 0, 0, 0, 0,168,170, 2, 0, 0, 0, 0, 0,168,170, 2, 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, 0, 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, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 2, 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, 68, 65, 84, 65,160, 20, 0, 0,208,179,160, 2, 0, 0, 0, 0, +173, 0, 0, 0, 1, 0, 0, 0,176,200,160, 2, 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, 25, 0,231,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,255,255,255,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,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 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,180,180,180,255, 0, 0, 0,255,255,255,255,255, 1, 0, 10, 0,236,255, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,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,145,145,145,245, 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,180,180,180,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,130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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,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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, + 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, + 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, + 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,145,145,145,245, 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,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, + 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255, +120,145,120,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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, 68, 65, 84, 65,160, 20, 0, 0,176,200,160, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,179,160, 2, 0, 0, 0, 0, 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, + 32, 84,104,101,109,101, 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, 25, 0,231,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, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 46,124,217,204,255,255,255,255, +255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255, +255,255,255,255, 0, 0, 0,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 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, - 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, - 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255, -255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, -255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 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, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255, -255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 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, -255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, -158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, -255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 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,255,255,255,128, - 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, -195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, -153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, +175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, 255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 2, 0, 0, 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, - 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, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, -158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, 107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255, -127,127,127,255,142,138,145,255,120,145,120,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, +255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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,255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255, +124,137,150,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +228,156,198,255,255,255,170,255, 96,192, 64,255, 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, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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, +195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,255,255,255,128, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 2, 0, 0, 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, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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, + 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, + 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255, +255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, +255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, + 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, +255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, @@ -1288,589 +1660,602 @@ char datatoc_B_blend[]= { 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, - 68, 78, 65, 49, 0, 0,203, 56, 6, 62, 16, 32, 0, 0, 0, 0, 0, 0, 0, 1, 83, 68, 78, 65, 78, 65, 77, 69, 0, 0, 10, 5, - 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117,115, 0,105, 99, -111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0, -116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116,105,118,101, 0, -116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 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, 42, 42,115, 99,114,105,112,116,115, 0, - 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, 99,114,105,112,116, 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,112, 97,115,115,101, -112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104,105,102,116,120, - 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117,114,101, 0, 89, - 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114,111,116, 0,115, - 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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,109,101,110,117,110,114, 0, 42,115, 99,101,110, -101, 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,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, 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, 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, - 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114, -102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97, -100, 91, 55, 93, 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,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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116, -115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110, -115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101, -113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, - 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103, -108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, - 91, 49, 56, 93, 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,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, 51, 50, 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, - 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100, -112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112, -117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, - 0,105, 50, 0,106, 50, 0,107, 50, 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,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,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117, -115, 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,104, 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,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, 98,112, 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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105, -116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101, -109, 97,112,115,105,122,101, 0,100,114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,112, 97,100, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105, -110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, - 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, - 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111, -100,105,102,105,101,114, 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,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, 51, 50, 93, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105, -111,110, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114, -101,101, 0, 42,100,109, 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,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103, -104,116,115, 0, 42, 98,105,110,100, 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,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,115,121,115, 0,114, -116, 91, 50, 93, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, 42,117,110,100, -111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115,105,103,110, - 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100,101, -102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, - 97,118,105,115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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, 99,116,105,109,101, 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, -115,105,122,101,102, 97, 99, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,100, -116, 0,100,116,120, 0, 97, 99,116, 99,111,108, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, 97,100, 49, - 91, 51, 93, 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,112,100, 0, 42,115,111,102,116, - 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116,114,105, 99, -116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, 99,111, 0, - 98,111,100,121, 95,116,121,112,101, 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,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, 99, -117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108, -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,102, 95,115,116,114,101,110,103, -116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0,109, 97,120,100,105,115,116, - 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95,112,111,119,101,114, 95,114, - 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0, -114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 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,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, 42,112, 97,114,116,105, 99, -108,101,115, 0,116,111,116,112,111,105,110,116, 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,110,111,100,101,109, 97,115,115, 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,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,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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69, -110,100, 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, 83,117,114,102, 97, 99,101, - 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, 83,117,114,102, 78, -111,114,109, 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, - 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 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,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,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,104,101,109,105,114,101,115, 0,109, 97,120,105,116,101,114, 0,100,114, 97,119,116, -121,112,101, 0,115,117, 98,115,104,111,111,116,112, 0,115,117, 98,115,104,111,111,116,101, 0,110,111,100,101,108,105,109, 0, -109, 97,120,115,117, 98,108, 97,109,112, 0,112, 97,109, 97, 0,112, 97,109,105, 0,101,108,109, 97, 0,101,108,109,105, 0,109, - 97,120,110,111,100,101, 0, 99,111,110,118,101,114,103,101,110, 99,101, 0,114, 97,100,102, 97, 99, 0,103, 97,109,109, 97, 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, 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,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, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97, -115,115, 95,120,111,114, 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,102,102, 99,111,100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, - 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,114,112, 97,100, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, - 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 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,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,112,111,115,116,109,117,108, 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, 71, 73,113,117, 97,108, -105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, - 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98, -117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, - 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112, -104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110, -114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, - 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105, -116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112, -111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, - 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111, -108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,112, 97,100, 57, 0,100, -111,109,101,115,105,122,101, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 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, 99,111,108, 91, 51, 93, 0,102,114, 97,109,101, 0,110, - 97,109,101, 91, 54, 52, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 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, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,115,116,101,112, 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,100,114, 97,119, 95,116,105,109,101, -100, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0,112,105, -118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, - 95,115,116,114,101,110,103,116,104, 0,112, 97,100, 91, 53, 93, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42, -115, 99,117,108,112,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,101,100,105,116, 98,117,116,102,108, 97,103, 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,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,112, 97,100, 91, 50, 93, - 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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111, -112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100, -105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105, -118, 95,116,121,112,101, 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, -115,107,103,101,110, 95,112, 97,100, 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,112, 97,100, 51, 91, 50, 93, 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, 42, 99, 97,109,101,114, 97, 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,101,100,105,116, 98,117,116,115,105,122,101, 0,115,101,108,101, 99,116,109,111,100,101, 0,112,114,111,112,111, -114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, 97,117,116,111,109,101,114,103,101, 0,112, 97,100, 53, - 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 42,101,100, 0, 42,114, 97,100,105,111, 0,102,114, 97,109,105,110,103, - 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0,116,114, 97,110,115,102,111,114,109, 95, -115,112, 97, 99,101,115, 0,106,117,109,112,102,114, 97,109,101, 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, 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,102,114, 97,109,101, 95,115,116,101,112, 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,122,111,111,109, 0, 98,108,101,110,100, 0,120, -105,109, 0,121,105,109, 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,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,118,105,101,119, 98,117,116, - 0,108, 97,115,116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118, -105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,103,112,100, 0, 42,108,111, 99, - 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 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,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,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, -108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101, -110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0,108,111, 99, 97,108,118,105,101,119, 0,115, - 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, 95,108, 97,115,116, - 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105, -100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115, -101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102, -108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97, -102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102, -102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, 42,115, 99,114,101, -101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117,114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,116, 97, 98,111, 0,109, 97, -105,110, 98, 0,109, 97,105,110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,110,114, 0,116,101,120,102,114, -111,109, 0,115,104,111,119,103,114,111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, - 99,107, 0,114,101, 95, 97,108,105,103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 0,116, 97, 98, 91, 56, 93, 0, 99, -104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, 0, 42,111, -112, 0, 42,108,111, 97,100,105,109, 97,103,101, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101, -118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105, -108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119, -108,105,110,101,115, 0,108,104,101,105,103,104,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,111,118,101,114,119,114,105,116,101, 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, 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, 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102, -111,110,116, 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,105,116, -108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,109,101,110,117, 0,115,111, -114,116, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101, -115,121, 0,115,101,108,115,116, 97,116,101, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99, -116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97, -114,101, 97, 0,114,101,116,118, 97,108, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0,112,114,118, 95,119, - 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102, -117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, - 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,112,117,112,109,101,110,117, 0, 42,105, -109,103, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 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,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,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,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,114, 97,100,105,111, 0,119, 99,111,108, 95,116,101, -120,116, 0,119, 99,111,108, 95,111,112,116,105,111,110, 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,105, 99,111, -110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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,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,118,101,114, -116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97, -115,101,108, 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, 97,114,109, 91, - 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, - 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, - 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, - 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, - 93, 0,118,101,114,115,105,111,110,115, 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,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,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, -119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115, -105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114, -115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95, -102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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, 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, 99,117,114,115,111,114, 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,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,100,105,115,112,108, 97,121,109,111,100,101, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115, -101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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, -115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116,105, -108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, - 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110, -105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, 99,102, 48, 0,102, 97, 99,102, 49, 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, -104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0, 99,117,114,112,111,115, 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,115, - 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, - 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73, -110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, - 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,101, -109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97, -108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112, -114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, - 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, - 93, 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,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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, - 0,109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, - 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,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, 98,117,116,115,116, 97, 0, 98, + 68, 78, 65, 49,176,206, 0, 0, 48,121,237, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, + 49, 10, 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117, +115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, + 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116, +105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, + 91, 51, 50, 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, 42, 42,115, 99,114,105, +112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, 99,114,105,112,116, 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,112, + 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104, +105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117, +114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114, +111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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,109,101,110,117,110,114, 0, 42, +115, 99,101,110,101, 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,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, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, 51, + 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, + 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114, +112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, + 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, + 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,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,102, 97,108,108, +111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0, +112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, + 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, + 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117, +115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116, +121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, + 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95, +112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, + 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 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,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,118,101, 99, 91, 51, 93, 91, 51, 93, 0, + 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 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, +104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102, +102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, + 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,100, +114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0, +116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 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, 42,118,101, +114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, + 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 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, +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, 51, 50, 93, 0, 42,116,101,120,116,117,114,101, 0, +115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, + 97,112,112,105,110,103, 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, + 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112, +116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101, +101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 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,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,115,121,115, 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, 42, +117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115, +105,103,110, 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, + 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, + 91, 51, 93, 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,108, + 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110, +100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, + 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115, +111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116, +114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, + 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102, +105,101,108,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,102, 95,115,116,114, +101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0,109, 97,120,100, +105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95,112,111,119,101, +114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120, +105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,102,114, 97,109,101, 0,116,111,116,112,111,105, +110,116, 0, 42,120,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,120,100, 97,116, 97, 95,116,121,112,101, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, + 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 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, 42, +112, 97,114,116,105, 99,108,101,115, 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,110,111,100,101,109, 97,115,115, 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,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,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,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, +120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 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, 83,117,114,102, 97, 99,101, 0, 42,109, +101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, 83,117,114,102, 78,111,114,109, + 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111, +114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 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,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, 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,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,112, 97,100, 91, 51, 93, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, + 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,102,102, 99,111, +100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112, +101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, + 50, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 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,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,112,111,115,116,109,117,108, + 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, 71, 73,113,117, 97, +108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, + 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, + 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, + 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73, +112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111, +110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, + 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108, +105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114, +112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97, +121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104, +111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, 91, 51, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, + 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, 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,100, +114, 97,119, 95,116,105,109,101,100, 0,115,101,108,101, 99,116,109,111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97, +116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0,112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, + 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, + 91, 53, 93, 0,103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116, +102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95, +109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0, +101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105, +114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, 99, 97,109,101,114, 97, 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, 42,101,100, 0,102,114, 97,109,105,110,103, 0, 42,116, +111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, + 99,101,115, 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, +106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115,116,101,112, 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, 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115, +116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, + 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, + 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 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,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,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,108, 97,121, 95, +117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, + 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118, +105,101,119, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, + 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97, +114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0, +109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100, +101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, + 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, + 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, + 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117,114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,112,114, +101,118,105,101,119, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120, +110,114, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114,111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, + 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105,103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 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,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, + 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, + 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115, +101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112, +109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 95,116, +105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, + 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, + 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101, +110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 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,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, 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, 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42, +105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 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,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0, +118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0, +115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112, +114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116, +117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114, +103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,102,105, +108,101,110, 97,109,101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, + 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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, +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,118, +101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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, +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,104,112, 97,100, 91, 51, 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105, +109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0, +114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117, +103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116, +104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111, +114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,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,119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, + 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, + 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, + 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102, +117,108,108, 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,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,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, 99,117, +114,115,111,114, 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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, + 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, + 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112, +100, 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115, +116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115, +116,105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, + 97, 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, + 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, + 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105, +110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111, +117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117, +115,101,100,101,108,101,109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, + 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116, +105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120, +105,115,102,108, 97,103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98, +111,100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99, +111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98, 117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105, @@ -1892,1028 +2277,1043 @@ char datatoc_B_blend[]= { 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,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, 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,112, 97,116,104,102,108, 97,103, 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,114,111,112, 0, 99,111,110,115,116,102, -108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, - 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116, -115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0, -101,117,108, 91, 51, 93, 0,114,111,116,109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, - 97,110, 98, 97,115,101, 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, 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101, -114,102,108, 97,103, 0, 97,100,115, 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105, -100,101, 0, 42,103,114,112, 0,116,101,109,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, 42,116, 97,114, 0,115,117, - 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, - 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, - 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, - 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116, -111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, - 50, 93, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105, -100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, - 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105, -122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42, -115,101,108,105,110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101, -115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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, -105,116,101,114, 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,115, 97,116, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, - 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 0,112,114,101,118,105,101,119, 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, 42, -100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0, -116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111, -102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110,110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0, -114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, - 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97, -116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, - 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109,101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, - 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97,108,105,118,101, 0,108,111,111,112, 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,100, -114, 97,119, 95,115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103, -104, 98,111,117,114,115, 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,115,105,109,112,108,105,102,121, 95,102, -108, 97,103, 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,106,105,116,102, 97, 99, 0,107,101,121,101,100, 95, -116,105,109,101, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116,115,104, 97,112,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,100, 97,109,112,102, 97, 99, 0, 97, 98,115,108,101,110,103,116,104, 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,104,105,108,100,115,112,114,101, 97,100, 0, - 99,108,117,109,112,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, - 95, 97, 99, 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110, -107,105,110,103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, - 0, 98,111,105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101, -100,105,116, 41, 40, 41, 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,116, 97, -114,103,101,116, 95,111, 98, 0, 42,107,101,121,101,100, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99, -116,111,114,115, 0,114,101, 97, 99,116,101,118,101,110,116,115, 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,107,101, -121,101,100, 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, 51, 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, - 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 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,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,107,101,121,109, 97,112,115, 0, - 42,103,104,111,115,116,119,105,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, 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,107,101,121,109, 97,112, 0,110, 97,109,101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, - 0,114,101,103,105,111,110,105,100, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0, 42, -101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 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,102,117,110, 99, 95,116,121,112,101, 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, 42,114, -110, 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, - 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 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, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, 0, 97, 99, -116, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,115,116,114,105,112,115, 0,105,110,102,111, 91, 54, 52, 93, - 0,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121,112,101, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117, -112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, 0,110,108, 97, 95,116,114, 97, 99,107, -115, 0,100,114,105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 84, 89, 80, 69, 0, 0, 1,154, 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,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,105, 0,118,101, 99, 50,102, 0,118,101, - 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52, -102, 0,118,101, 99, 52,100, 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, 83, 99,114,105,112,116, 76,105,110,107, 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, - 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 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, 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, - 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101, -105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 77, 68,105,115,112,115, 0, - 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, - 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, - 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, 60, - 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 32, - 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, - 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, - 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, - 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, - 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, - 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, - 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, - 69, 83, 32, 49, 50, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, 54, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, - 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, 48, 57, - 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, - 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, - 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 32, - 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, - 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, 50, 56, - 32, 35,101,110,100,105,102, 32,108,118,108, 59, 10, 9,117,110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,117,115,101, 95, - 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32, -100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111, -109, 32,111,116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, - 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 10, 9,115,104,111,114,116, 32, 42, -101,100,103,101, 95,102,108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 59, - 10,125, 32, 77,117,108,116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114,101,115, 32, 42, - 42, 47, 10, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105, -108,105,116,121, 32,123, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114,116, 95,109, 97,112, 59, 32, - 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101, -120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32,101,100,103,101, 95,109, 97,112, - 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, 45, 49, 61, 32,104,105,100,100, -101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, 59, 10, 9, 77, 69,100,103,101, 32, - 42,111,108,100, 95,101,100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32,116,111,116,102, 97, 99, -101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32,112, 97,100, 59, 10,125, 32, 80, 97,114,116, -105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, - 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, - 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, - 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, - 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, - 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, - 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, - 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, - 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 10, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118, -101,114,116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 47, 42, 32,114,101,110,100,101,114, - 32, 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107, -101, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, - 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, - 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, - 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, - 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, - 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, - 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, - 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101, -114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, - 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, - 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32, -117,115,101, 32, 77, 70, 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, - 44, 32,115,104,111,117,108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, - 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100, -101,112,114,101, 99, 97,116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, - 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, - 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 10, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, - 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100,101, - 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, - 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, 10, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, - 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 10, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, - 83, 73, 66, 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, - 52, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, - 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, - 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97,110,115,112, 44, 32, -118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103,115, 32,105,110, 32, -116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114, -107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, - 48, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, - 76, 80, 72, 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105, -112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108,108, 32,111,114, 32,110, -111,116,104,105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, 97,118, 97,105,108, 97, - 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, 97,110,121,109,111,114, -101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, - 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, - 84, 69, 68, 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, - 49, 9, 9, 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, - 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, 10, 32, 79, 67, 75, 33, - 99,116, 32, 77, 86,101,114,116, 59, 32,115,116,114,117, 99,116, 32, 77, 69,100,103,101, 59, 32,115,116,114,117, 99,116, 32, 77, - 70, 97, 99,101, 59, 32,115,116,114,117, 99,116, 32, 77, 67,111,108, 59, 32,115,116,114,117, 99,116, 32, 77, 83,116,105, 99,107, -121, 59, 32,115,116,114,117, 99,116, 32, 77,101,115,104, 59, 32,115,116,114,117, 99,116, 32, 79, 99, 73,110,102,111, 59, 32,115, -116,114,117, 99,116, 32, 77,117,108,116,105,114,101,115, 59, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, 86,105, -115,105, 98,105,108,105,116,121, 59, 32,115,116,114,117, 99,116, 32, 69,100,105,116, 77,101,115,104, 59, 32, 32,116,121,112,101, -100,101,102, 32,115,116,114,117, 99,116, 32, 77,101,115,104, 32,123, 32, 32, 73, 68, 32,105,100, 59, 32, 32, 32,115,116,114,117, - 99,116, 32, 66,111,117,110,100, 66,111,120, 32, 42, 98, 98, 59, 32, 32, 32, 76,105,115,116, 66, 97,115,101, 32,101,102,102,101, - 99,116, 59, 32, 32, 32, 32,115,116,114,117, 99,116, 32, 73,112,111, 32, 42,105,112,111, 59, 32, 32,115,116,114,117, 99,116, 32, - 75,101,121, 32, 42,107,101,121, 59, 32, 32,115,192, 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,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, 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, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116, -105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 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, 87,111,114,108,100, 0, 82, 97,100,105,111, 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, 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, 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, 70,114, 97,109,105,110, -103, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, - 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111, -110, 0, 83, 99,117,108,112,116, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110,116, 0, 84,111, -111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, - 70,111,114,101,115,116, 0, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, - 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 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, 98, 83, 99,114,101,101,110, 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, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 83,101, -108,101, 99,116, 80, 97,114, 97,109,115, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68, -101,102, 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, 72,101, 97,100,101,114, 0, 72,101, 97,100,101,114, 84,121,112,101, 0, 77,101, -110,117, 0, 77,101,110,117, 84,121,112,101, 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, 84, 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,104,100, 97,117,100,105,111, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 69,100,105,116,105,110, -103, 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, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110, -101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97,110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, - 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 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, 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, 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, 72, 97,105,114, 75,101, -121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116, -105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99, -108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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,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, 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,109, 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, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 82,101,112,111,114,116, 76,105,115,116, 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, 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, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 0, 84, 76, 69, 78, 0, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, - 0, 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, - 2, 40, 0, 0, 0, 32, 0,140, 3, 80, 0, 92, 0, 36, 0, 56, 0, 84, 0,112, 0,124, 0, 40, 0, 16, 0, 24, 0, 40, 0,120, - 0, 12, 0,136, 0, 36, 4,248, 1,124, 0, 0, 0, 0, 0, 0, 0,136, 1, 24, 1, 84, 0, 24, 3, 8, 0,168, 0, 0, 0,140, - 0,132, 1,132, 1, 8, 0, 56, 2,112, 0, 76, 1, 60, 0, 0, 0,108, 0,104, 0,140, 0, 56, 0, 8, 0, 16, 1, 76, 0, 0, - 0, 0, 0, 0, 1, 24, 0, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 0, 0, 24, 0, 76, 0, 32, - 0, 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 1, 0, 0, 32, 0, 12, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 40, 0, 56, - 0, 72, 0, 92, 0,100, 0, 72, 0,100, 0,120, 0, 68, 0, 64, 0,112, 0, 64, 0,152, 0,156, 0, 64, 0, 96, 0,108, 0,188, - 0,104, 0,184, 0, 56, 0, 76, 0, 0, 0,132, 0, 28, 0, 20, 0,104, 0, 0, 0, 64, 0, 0, 0, 0, 0, 68, 0, 8, 0, 8, - 0,220, 0, 80, 1, 68, 0, 68, 0, 68, 0, 68, 0, 64, 1,164, 0,112, 0,108, 0,188, 0, 40, 0, 92, 0, 56, 0,112, 0,128, - 0,152, 0,208, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,104, 0, 40, 0, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 3,224, - 0, 56, 0, 16, 0, 80, 0, 16, 0,196, 0, 8, 0, 76, 0, 80, 0, 32, 0, 0, 0, 32, 1, 12, 0, 32, 0, 0, 0, 0, 0, 64, - 2,152, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 40, 0,136, 0, 48, 0,136, 0,196, 0, 20, 0,224, 0,204, - 0, 44, 0, 0, 0, 0, 0, 92, 0, 0, 0,248, 0, 12, 0, 12, 0,136, 0,184, 2,124, 2, 80, 0, 40, 0,168, 0,232, 2,136, - 1, 16, 0, 24, 0,192, 0, 32, 1,176, 1, 16, 0, 16, 19, 8, 0, 56, 11, 40, 0, 20, 0, 24, 0,240, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 8, 0, 0, 0,112, 0, 0, 0,236, 0, 0, 0, 32, 0, 80, 0, 28, 0, 16, 0, 8, 0, 52, 0,160, 0,240, 1,168, - 0,204, 1, 28, 0, 0, 0, 16, 2, 24, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 1, 56, 0, 0, 0, 56, 0, 64, - 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, 76, 0, 80, 0, 60, 0,128, - 0, 4, 0, 60, 0, 12, 0, 92, 0, 28, 0, 20, 0, 80, 0, 16, 0, 76, 0,104, 0, 84, 0, 28, 0, 96, 0, 60, 0, 56, 0,108, - 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 40, 0, 0, 0, 68, 0,184, 0, 24, 1, 4, 0,120, 1,172, 0,104, 0,216, 0, 64, - 0, 44, 0, 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, 20, 0, 52, 0, 96, 0, 12, - 0,108, 0, 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 32, 0,208, 0, 0, 0, 0, 0, 16, - 0, 40, 0, 28, 0, 12, 0, 12, 1, 16, 0, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, 24, 0, 32, 0, 8, 0, 32, - 0, 12, 0, 44, 0, 20, 0, 68, 0, 24, 0, 56, 0, 72, 0,252, 1,224, 0, 0, 0, 0, 0, 0, 0, 16, 0, 20, 0, 24, 0,172, - 0,124, 0,144, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 88, 0, 0, 0, 0, 0, 88, 1, 20, 0, 16, 0, 20, 0, 8, 0, 8, - 0, 24, 0, 20, 0, 88, 1, 24, 0, 16, 0, 68, 1, 0, 0, 20, 0,160, 0, 88, 0, 96, 0, 88, 0, 20, 0, 56, 83, 84, 82, 67, - 0, 0, 1, 94, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, - 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, - 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, - 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, - 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, - 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, - 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, - 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, - 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, - 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, - 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, - 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, - 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, - 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, - 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, - 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, - 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, - 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, - 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, - 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, - 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, - 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 5, 0, 27, 0, 84, 0, 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, - 0, 41, 0, 6, 0, 41, 0, 0, 0, 41, 0, 1, 0, 0, 0, 88, 0, 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, - 0, 42, 0, 0, 0, 42, 0, 1, 0, 4, 0, 91, 0, 4, 0, 92, 0, 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, - 0, 0, 0, 95, 0, 0, 0, 96, 0, 43, 0, 15, 0, 27, 0, 31, 0, 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, - 0, 41, 0,100, 0, 41, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, - 0, 9, 0,108, 0, 8, 0,109, 0, 44, 0, 3, 0, 4, 0,110, 0, 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, - 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 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, 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, - 0, 7, 0,125, 0, 36, 0, 80, 0, 40, 0,126, 0, 32, 0,127, 0, 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, - 0, 4, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0, 19, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, - 0, 2, 0,138, 0, 47, 0,139, 0, 48, 0, 31, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, - 0, 51, 0,143, 0, 2, 0,134, 0, 2, 0, 19, 0, 2, 0,144, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, - 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, - 0, 44, 0,154, 0, 30, 0,155, 0, 7, 0,156, 0, 4, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, - 0, 7, 0,162, 0, 7, 0,163, 0, 52, 0, 31, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 32, 0,168, - 0, 53, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 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, 2, 0,183, 0, 7, 0,184, - 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 57, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, - 0, 7, 0,192, 0, 7, 0,193, 0, 54, 0, 15, 0, 0, 0,194, 0, 9, 0,195, 0, 0, 0,196, 0, 0, 0,197, 0, 4, 0,198, - 0, 4, 0,199, 0, 9, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 4, 0,204, 0, 9, 0,205, 0, 9, 0,206, - 0, 4, 0,207, 0, 4, 0, 37, 0, 55, 0, 6, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,208, 0, 7, 0, 67, - 0, 4, 0, 64, 0, 56, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,209, 0, 55, 0,203, 0, 57, 0, 17, - 0, 32, 0,168, 0, 48, 0,210, 0, 58, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 2, 0, 17, 0, 2, 0,214, 0, 7, 0,114, - 0, 7, 0,115, 0, 7, 0,215, 0, 4, 0,216, 0, 2, 0,217, 0, 2, 0,218, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,219, - 0, 2, 0,220, 0, 53, 0, 57, 0, 27, 0, 31, 0, 39, 0, 75, 0, 7, 0,221, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, - 0, 7, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, - 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, - 0, 2, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0, 19, - 0, 2, 0, 17, 0, 2, 0,214, 0, 7, 0,248, 0, 7, 0,249, 0, 7, 0,250, 0, 7, 0,251, 0, 2, 0,252, 0, 2, 0,253, - 0, 2, 0,254, 0, 2, 0,132, 0, 4, 0, 23, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0,255, 0, 7, 1, 0, - 0, 7, 0,190, 0, 46, 1, 1, 0, 59, 1, 2, 0, 36, 0, 80, 0, 48, 0,210, 0, 54, 1, 3, 0, 56, 1, 4, 0, 57, 1, 5, - 0, 30, 0,155, 0, 0, 1, 6, 0, 0, 1, 7, 0, 60, 0, 8, 0, 7, 1, 8, 0, 7, 1, 9, 0, 7, 0,176, 0, 4, 0, 19, - 0, 7, 1, 10, 0, 7, 1, 11, 0, 7, 1, 12, 0, 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, - 0, 2, 0, 19, 0, 4, 1, 13, 0, 2, 0,178, 0, 2, 1, 14, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, - 0, 7, 1, 15, 0, 7, 1, 16, 0, 7, 1, 17, 0, 7, 1, 18, 0, 7, 1, 19, 0, 7, 1, 20, 0, 7, 1, 21, 0, 7, 1, 22, - 0, 7, 1, 23, 0, 7, 1, 24, 0, 7, 1, 25, 0, 62, 1, 26, 0, 2, 1, 27, 0, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, - 0, 7, 1, 28, 0, 7, 1, 29, 0, 7, 1, 30, 0, 2, 1, 31, 0, 2, 1, 32, 0, 2, 1, 33, 0, 2, 1, 34, 0, 0, 1, 35, - 0, 0, 1, 36, 0, 2, 1, 37, 0, 2, 1, 38, 0, 2, 1, 39, 0, 2, 1, 40, 0, 2, 1, 41, 0, 7, 1, 42, 0, 7, 1, 43, - 0, 7, 1, 44, 0, 7, 1, 45, 0, 2, 1, 46, 0, 2, 0, 43, 0, 2, 1, 47, 0, 2, 1, 48, 0, 2, 1, 49, 0, 2, 1, 50, - 0, 7, 1, 51, 0, 7, 1, 52, 0, 7, 1, 53, 0, 7, 1, 54, 0, 7, 1, 55, 0, 7, 1, 56, 0, 7, 1, 57, 0, 7, 1, 58, - 0, 7, 1, 59, 0, 7, 1, 60, 0, 7, 1, 61, 0, 7, 1, 62, 0, 2, 1, 63, 0, 2, 1, 64, 0, 4, 1, 65, 0, 4, 1, 66, - 0, 2, 1, 67, 0, 2, 1, 68, 0, 2, 1, 69, 0, 2, 1, 70, 0, 7, 1, 71, 0, 7, 1, 72, 0, 7, 1, 73, 0, 7, 1, 74, - 0, 2, 1, 75, 0, 2, 1, 76, 0, 52, 1, 77, 0, 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, - 0, 36, 0, 80, 0, 64, 0,130, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 1, 78, 0, 2, 0, 19, 0, 7, 0,184, 0, 7, 0,185, - 0, 7, 0,186, 0, 7, 1, 79, 0, 7, 1, 80, 0, 7, 1, 81, 0, 7, 1, 82, 0, 7, 1, 83, 0, 7, 1, 84, 0, 7, 1, 85, - 0, 7, 1, 86, 0, 7, 1, 87, 0, 7, 1, 88, 0, 7, 1, 89, 0, 7, 1, 90, 0, 7, 1, 91, 0, 7, 1, 92, 0, 7, 1, 93, - 0, 7, 1, 94, 0, 7, 1, 95, 0, 7, 1, 96, 0, 7, 1, 97, 0, 7, 1, 98, 0, 7, 1, 99, 0, 7, 1,100, 0, 7, 1,101, - 0, 7, 1,102, 0, 7, 1,103, 0, 7, 1,104, 0, 7, 1,105, 0, 2, 1,106, 0, 2, 1,107, 0, 2, 1,108, 0, 0, 1,109, - 0, 0, 1,110, 0, 7, 1,111, 0, 7, 1,112, 0, 2, 1,113, 0, 2, 1,114, 0, 7, 1,115, 0, 7, 1,116, 0, 7, 1,117, - 0, 7, 1,118, 0, 2, 1,119, 0, 2, 1,120, 0, 4, 1, 13, 0, 4, 1,121, 0, 2, 1,122, 0, 2, 1,123, 0, 2, 1,124, - 0, 2, 1,125, 0, 7, 1,126, 0, 7, 1,127, 0, 7, 1,128, 0, 7, 1,129, 0, 7, 1,130, 0, 7, 1,131, 0, 7, 1,132, - 0, 7, 1,133, 0, 7, 1,134, 0, 7, 1,135, 0, 0, 1,136, 0, 7, 1,137, 0, 7, 1,138, 0, 7, 1,139, 0, 4, 1,140, - 0, 0, 1,141, 0, 0, 1, 47, 0, 0, 1,142, 0, 0, 1, 6, 0, 2, 1,143, 0, 2, 1,144, 0, 2, 1, 64, 0, 2, 1,145, - 0, 2, 1,146, 0, 2, 1,147, 0, 7, 1,148, 0, 7, 1,149, 0, 7, 1,150, 0, 7, 1,151, 0, 7, 1,152, 0, 2, 0,164, - 0, 2, 0,165, 0, 56, 1,153, 0, 56, 1,154, 0, 0, 1,155, 0, 0, 1,156, 0, 0, 1,157, 0, 0, 1,158, 0, 2, 1,159, - 0, 2, 1,160, 0, 7, 1,161, 0, 7, 1,162, 0, 52, 1, 77, 0, 59, 1, 2, 0, 36, 0, 80, 0, 65, 1,163, 0, 30, 0,155, - 0, 7, 1,164, 0, 7, 1,165, 0, 7, 1,166, 0, 7, 1,167, 0, 7, 1,168, 0, 2, 1,169, 0, 2, 0, 70, 0, 7, 1,170, - 0, 7, 1,171, 0, 7, 1,172, 0, 7, 1,173, 0, 7, 1,174, 0, 7, 1,175, 0, 7, 1,176, 0, 7, 1,177, 0, 7, 1,178, - 0, 2, 1,179, 0, 2, 1,180, 0, 7, 1,181, 0, 7, 1,182, 0, 7, 1,183, 0, 7, 1,184, 0, 7, 1,185, 0, 4, 1,186, - 0, 4, 1,187, 0, 4, 1,188, 0, 40, 0,126, 0, 12, 1,189, 0, 66, 0, 4, 0, 27, 0, 31, 0, 0, 1,190, 0, 67, 0, 2, - 0, 44, 0,154, 0, 68, 0, 26, 0, 68, 0, 0, 0, 68, 0, 1, 0, 69, 1,191, 0, 4, 1,192, 0, 4, 1,193, 0, 4, 1,194, - 0, 4, 1,195, 0, 4, 1,196, 0, 4, 1,197, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 1,198, 0, 2, 1,199, 0, 7, 0, 5, - 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 1,200, 0, 7, 1,201, 0, 7, 1,202, 0, 7, 1,203, 0, 7, 1,204, 0, 7, 1,205, - 0, 7, 1,206, 0, 7, 0, 23, 0, 7, 1,207, 0, 7, 1,208, 0, 70, 0, 16, 0, 27, 0, 31, 0, 69, 1,191, 0, 12, 1,209, - 0, 12, 1,210, 0, 12, 1,211, 0, 36, 0, 80, 0, 64, 1,212, 0, 2, 0, 19, 0, 2, 1,213, 0, 4, 0,177, 0, 7, 1, 8, - 0, 7, 0,176, 0, 7, 1, 9, 0, 7, 1,214, 0, 7, 1,215, 0, 7, 1,216, 0, 35, 0, 11, 0, 7, 1,217, 0, 7, 1,218, - 0, 7, 1,219, 0, 7, 1,220, 0, 2, 0, 55, 0, 0, 1,221, 0, 0, 1,222, 0, 0, 1,223, 0, 0, 1,224, 0, 0, 1,225, - 0, 0, 1,226, 0, 34, 0, 7, 0, 7, 1,227, 0, 7, 1,218, 0, 7, 1,219, 0, 2, 1,223, 0, 2, 1,226, 0, 7, 1,220, - 0, 7, 0, 37, 0, 71, 0, 21, 0, 71, 0, 0, 0, 71, 0, 1, 0, 2, 0, 17, 0, 2, 1,228, 0, 2, 1,226, 0, 2, 0, 19, - 0, 2, 1,229, 0, 2, 1,230, 0, 2, 1,231, 0, 2, 1,232, 0, 2, 1,233, 0, 2, 1,234, 0, 2, 1,235, 0, 2, 1,236, - 0, 7, 1,237, 0, 7, 1,238, 0, 34, 0, 49, 0, 35, 0, 50, 0, 2, 1,239, 0, 2, 1,240, 0, 4, 1,241, 0, 72, 0, 5, - 0, 2, 1,242, 0, 2, 1,228, 0, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, - 0, 7, 0, 8, 0, 7, 1,243, 0, 74, 0, 62, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 1,191, 0, 12, 1,244, 0, 12, 1,210, - 0, 12, 1,245, 0, 32, 1,246, 0, 32, 1,247, 0, 32, 1,248, 0, 36, 0, 80, 0, 75, 1,249, 0, 38, 1,250, 0, 64, 1,212, - 0, 12, 1,251, 0, 7, 1, 8, 0, 7, 0,176, 0, 7, 1, 9, 0, 4, 0,177, 0, 2, 1,252, 0, 2, 1,213, 0, 2, 0, 19, - 0, 2, 1,253, 0, 7, 1,254, 0, 7, 1,255, 0, 7, 2, 0, 0, 2, 1,231, 0, 2, 1,232, 0, 2, 2, 1, 0, 2, 2, 2, - 0, 4, 2, 3, 0, 34, 2, 4, 0, 2, 0, 23, 0, 2, 0, 99, 0, 2, 0, 67, 0, 2, 2, 5, 0, 7, 2, 6, 0, 7, 2, 7, - 0, 7, 2, 8, 0, 7, 2, 9, 0, 7, 2, 10, 0, 7, 2, 11, 0, 7, 2, 12, 0, 7, 2, 13, 0, 7, 2, 14, 0, 7, 2, 15, - 0, 0, 2, 16, 0, 76, 2, 17, 0, 77, 2, 18, 0, 0, 2, 19, 0, 66, 2, 20, 0, 66, 2, 21, 0, 66, 2, 22, 0, 66, 2, 23, - 0, 4, 2, 24, 0, 4, 2, 25, 0, 4, 2, 26, 0, 4, 0, 37, 0, 73, 2, 27, 0, 4, 2, 28, 0, 4, 2, 29, 0, 72, 2, 30, - 0, 72, 2, 31, 0, 78, 0, 39, 0, 27, 0, 31, 0, 69, 1,191, 0, 12, 2, 32, 0, 36, 0, 80, 0, 38, 1,250, 0, 64, 1,212, - 0, 79, 2, 33, 0, 80, 2, 34, 0, 81, 2, 35, 0, 82, 2, 36, 0, 83, 2, 37, 0, 84, 2, 38, 0, 85, 2, 39, 0, 86, 2, 40, - 0, 78, 2, 41, 0, 87, 2, 42, 0, 88, 2, 43, 0, 89, 2, 44, 0, 89, 2, 45, 0, 89, 2, 46, 0, 4, 0, 54, 0, 4, 2, 47, - 0, 4, 2, 48, 0, 4, 2, 49, 0, 4, 2, 50, 0, 4, 0,177, 0, 7, 1, 8, 0, 7, 0,176, 0, 7, 1, 9, 0, 7, 2, 51, - 0, 4, 2, 52, 0, 2, 2, 53, 0, 2, 0, 19, 0, 2, 2, 54, 0, 2, 2, 55, 0, 2, 1,213, 0, 2, 2, 56, 0, 90, 2, 57, - 0, 91, 2, 58, 0, 81, 0, 8, 0, 9, 2, 59, 0, 7, 2, 60, 0, 4, 2, 61, 0, 0, 0, 19, 0, 0, 2, 62, 0, 2, 1, 13, - 0, 2, 2, 63, 0, 2, 2, 64, 0, 79, 0, 8, 0, 4, 2, 65, 0, 4, 2, 66, 0, 4, 2, 67, 0, 4, 2, 68, 0, 0, 0, 37, - 0, 0, 1,228, 0, 0, 2, 69, 0, 0, 0, 19, 0, 83, 0, 5, 0, 4, 2, 65, 0, 4, 2, 66, 0, 0, 2, 70, 0, 0, 2, 71, - 0, 2, 0, 19, 0, 92, 0, 2, 0, 4, 2, 72, 0, 7, 1,219, 0, 84, 0, 3, 0, 92, 2, 73, 0, 4, 2, 74, 0, 4, 0, 19, - 0, 82, 0, 6, 0, 7, 2, 75, 0, 2, 2, 76, 0, 0, 0, 19, 0, 0, 1,228, 0, 0, 2, 71, 0, 0, 2, 77, 0, 85, 0, 4, - 0, 0, 0,208, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 93, 0, 6, 0, 48, 2, 59, 0, 0, 0, 19, 0, 0, 2, 62, - 0, 2, 1, 13, 0, 2, 2, 63, 0, 2, 2, 64, 0, 94, 0, 1, 0, 7, 2, 78, 0, 95, 0, 5, 0, 0, 0,208, 0, 0, 0,184, - 0, 0, 0,185, 0, 0, 0,186, 0, 4, 0, 37, 0, 86, 0, 1, 0, 7, 2, 79, 0, 87, 0, 2, 0, 4, 2, 80, 0, 4, 0, 17, - 0, 80, 0, 7, 0, 7, 2, 60, 0, 48, 2, 59, 0, 0, 0, 19, 0, 0, 2, 62, 0, 2, 1, 13, 0, 2, 2, 63, 0, 2, 2, 64, - 0, 96, 0, 1, 0, 7, 2, 81, 0, 97, 0, 1, 0, 4, 2, 82, 0, 98, 0, 1, 0, 0, 2, 83, 0, 99, 0, 1, 0, 7, 2, 60, - 0,100, 0, 3, 0, 4, 2, 84, 0, 0, 0, 96, 0, 7, 2, 85, 0,102, 0, 4, 0, 7, 0,208, 0, 7, 0,184, 0, 7, 0,185, - 0, 7, 0,186, 0,103, 0, 1, 0,102, 2, 61, 0,104, 0, 5, 0, 4, 2, 86, 0, 4, 2, 87, 0, 0, 0, 19, 0, 0, 1,228, - 0, 0, 0,183, 0,105, 0, 2, 0, 4, 2, 88, 0, 4, 2, 87, 0,106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 2, 89, - 0,103, 2, 90, 0,105, 2, 91, 0, 4, 0, 54, 0, 4, 2, 48, 0, 4, 2, 47, 0, 4, 0, 37, 0, 82, 2, 92, 0, 90, 0, 14, - 0, 12, 2, 93, 0, 82, 2, 92, 0, 0, 2, 94, 0, 0, 2, 95, 0, 0, 2, 96, 0, 0, 2, 97, 0, 0, 2, 98, 0, 0, 2, 99, - 0, 0, 2,100, 0, 0, 0, 19, 0, 89, 2, 44, 0, 89, 2, 46, 0, 2, 2,101, 0, 0, 2,102, 0, 91, 0, 8, 0, 4, 2,103, - 0, 4, 2,104, 0, 79, 2,105, 0, 83, 2,106, 0, 4, 2, 48, 0, 4, 2, 47, 0, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, - 0,107, 0, 0, 0,107, 0, 1, 0, 4, 0, 17, 0, 4, 1, 13, 0, 0, 0, 20, 0, 47, 0,139, 0, 0, 2,107, 0,108, 0, 7, - 0,107, 2,108, 0, 2, 2,109, 0, 2, 2, 93, 0, 2, 2,110, 0, 2, 0, 94, 0, 9, 2,111, 0, 9, 2,112, 0,109, 0, 3, - 0,107, 2,108, 0, 32, 0,168, 0, 0, 0, 20, 0,110, 0, 5, 0,107, 2,108, 0, 32, 0,168, 0, 0, 0, 20, 0, 2, 2,113, - 0, 0, 2,114, 0,111, 0, 5, 0,107, 2,108, 0, 7, 0, 92, 0, 7, 2,115, 0, 4, 2,116, 0, 4, 2,117, 0,112, 0, 5, - 0,107, 2,108, 0, 32, 2,118, 0, 0, 0, 72, 0, 4, 1, 13, 0, 4, 0, 19, 0,113, 0, 13, 0,107, 2,108, 0, 32, 2,119, - 0, 32, 2,120, 0, 32, 2,121, 0, 32, 2,122, 0, 7, 2,123, 0, 7, 2,124, 0, 7, 2,115, 0, 7, 2,125, 0, 4, 2,126, - 0, 4, 2,127, 0, 4, 0, 94, 0, 4, 2,128, 0,114, 0, 5, 0,107, 2,108, 0, 2, 2,129, 0, 2, 0, 19, 0, 7, 2,130, - 0, 32, 2,131, 0,115, 0, 3, 0,107, 2,108, 0, 7, 2,132, 0, 4, 0, 94, 0,116, 0, 10, 0,107, 2,108, 0, 7, 2,133, - 0, 4, 2,134, 0, 4, 0, 37, 0, 2, 0, 94, 0, 2, 2,135, 0, 2, 2,136, 0, 2, 2,137, 0, 7, 2,138, 0, 0, 2,139, - 0,117, 0, 3, 0,107, 2,108, 0, 7, 0, 37, 0, 4, 0, 17, 0,118, 0, 11, 0,107, 2,108, 0, 53, 2,140, 0, 7, 2,141, - 0, 4, 2,142, 0, 0, 2,139, 0, 7, 2,143, 0, 4, 2,144, 0, 32, 2,145, 0, 0, 2,146, 0, 4, 2,147, 0, 4, 0, 37, - 0,119, 0, 10, 0,107, 2,108, 0, 32, 2,148, 0, 48, 2,149, 0, 4, 0, 94, 0, 4, 2,150, 0, 7, 2,151, 0, 7, 2,152, - 0, 0, 2,146, 0, 4, 2,147, 0, 4, 0, 37, 0,120, 0, 3, 0,107, 2,108, 0, 7, 2,153, 0, 4, 2,154, 0,121, 0, 5, - 0,107, 2,108, 0, 7, 2,155, 0, 0, 2,139, 0, 2, 0, 19, 0, 2, 2,156, 0,122, 0, 8, 0,107, 2,108, 0, 32, 0,168, - 0, 7, 2,155, 0, 7, 1,220, 0, 7, 0,110, 0, 0, 2,139, 0, 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 2,108, - 0, 32, 2,157, 0, 0, 2,139, 0, 53, 2,140, 0, 32, 2,145, 0, 2, 0, 19, 0, 2, 0, 37, 0, 7, 2,158, 0, 7, 2,159, - 0, 7, 2,160, 0, 7, 1,254, 0, 7, 2,161, 0, 7, 2,162, 0, 7, 2,163, 0, 7, 2,164, 0, 4, 2,144, 0, 4, 2,147, - 0, 0, 2,146, 0, 7, 2,165, 0, 7, 2,166, 0, 7, 0, 43, 0,124, 0, 7, 0,107, 2,108, 0, 2, 2,167, 0, 2, 2,168, - 0, 4, 0, 70, 0, 32, 0,168, 0, 7, 2,169, 0, 0, 2,139, 0,125, 0, 9, 0,107, 2,108, 0, 32, 0,168, 0, 7, 2,170, - 0, 7, 2,171, 0, 7, 2,164, 0, 4, 2,172, 0, 4, 2,173, 0, 7, 2,174, 0, 0, 0, 20, 0,126, 0, 1, 0,107, 2,108, - 0,127, 0, 6, 0,107, 2,108, 0, 47, 0,139, 0,128, 2,175, 0,129, 2,176, 0,130, 2,177, 0,131, 2,178, 0,132, 0, 14, - 0,107, 2,108, 0, 82, 2,179, 0, 82, 2,180, 0, 82, 2,181, 0, 82, 2,182, 0, 82, 2,183, 0, 82, 2,184, 0, 79, 2,185, - 0, 4, 2,186, 0, 4, 2,187, 0, 2, 2,188, 0, 2, 0, 37, 0, 7, 2,189, 0,133, 2,190, 0,134, 0, 3, 0,107, 2,108, - 0,135, 2,191, 0,136, 2,190, 0,137, 0, 4, 0,107, 2,108, 0, 32, 0,168, 0, 4, 2,192, 0, 4, 0, 37, 0,138, 0, 2, - 0, 4, 2,193, 0, 7, 1,219, 0,139, 0, 2, 0, 4, 0,130, 0, 4, 2,194, 0,140, 0, 20, 0,107, 2,108, 0, 32, 0,168, - 0, 0, 2,139, 0, 2, 2,195, 0, 2, 2,196, 0, 2, 0, 19, 0, 2, 0, 37, 0, 7, 2,197, 0, 7, 2,198, 0, 4, 0, 54, - 0, 4, 2,199, 0,139, 2,200, 0,138, 2,201, 0, 4, 2,202, 0, 4, 2,203, 0, 4, 2,204, 0, 4, 2,194, 0, 7, 2,205, - 0, 7, 2,206, 0, 7, 2,207, 0,141, 0, 8, 0,107, 2,108, 0,142, 2,208, 0,135, 2,191, 0, 4, 2,209, 0, 4, 2,210, - 0, 4, 2,211, 0, 2, 0, 19, 0, 2, 0, 57, 0,143, 0, 5, 0,107, 2,108, 0, 32, 0, 45, 0, 2, 2,212, 0, 2, 0, 19, - 0, 2, 2,213, 0,144, 0, 5, 0,107, 2,108, 0, 4, 2,214, 0, 2, 0, 19, 0, 2, 2,215, 0, 7, 2,216, 0,145, 0, 7, - 0,107, 2,108, 0, 82, 2,217, 0, 4, 2,218, 0, 0, 2,219, 0, 0, 2,220, 0, 0, 2,221, 0, 0, 2,222, 0,146, 0, 3, - 0,107, 2,108, 0,147, 2,223, 0,131, 2,178, 0,148, 0, 10, 0,107, 2,108, 0, 32, 2,224, 0, 32, 2,225, 0, 0, 2,226, - 0, 7, 2,227, 0, 2, 2,228, 0, 2, 2,229, 0, 0, 2,230, 0, 0, 2,231, 0, 0, 2,114, 0,149, 0, 9, 0,107, 2,108, - 0, 32, 2,232, 0, 0, 2,226, 0, 7, 2,233, 0, 7, 2,234, 0, 0, 1, 13, 0, 0, 2,129, 0, 0, 2,235, 0, 0, 0, 37, - 0,150, 0, 27, 0, 27, 0, 31, 0, 2, 1,229, 0, 2, 1,230, 0, 2, 2,236, 0, 2, 0, 19, 0, 2, 2,237, 0, 2, 2,238, - 0, 2, 2,239, 0, 2, 0, 70, 0, 0, 2,240, 0, 0, 2,241, 0, 0, 2,242, 0, 0, 0, 17, 0, 4, 0, 37, 0, 7, 2,243, - 0, 7, 2,244, 0, 7, 2,245, 0, 7, 2,246, 0, 7, 2,247, 0, 7, 2,248, 0, 34, 2,249, 0, 36, 0, 80, 0, 38, 1,250, - 0, 84, 2, 38, 0, 7, 2,250, 0, 7, 2,251, 0,150, 2,252, 0,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, 0, 0, 20, - 0, 69, 0, 3, 0, 7, 2,253, 0, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,111, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, - 0, 2, 2,254, 0, 4, 2,255, 0, 4, 3, 0, 0, 4, 3, 1, 0, 0, 3, 2, 0, 32, 0, 38, 0, 32, 3, 3, 0, 32, 3, 4, - 0, 32, 3, 5, 0, 32, 3, 6, 0, 36, 0, 80, 0, 75, 1,249, 0, 69, 1,191, 0,152, 3, 7, 0,152, 3, 8, 0,153, 3, 9, - 0, 9, 0, 2, 0, 12, 3, 10, 0, 12, 2, 32, 0, 12, 1,210, 0, 12, 3, 11, 0, 12, 3, 12, 0, 64, 1,212, 0, 7, 1, 8, - 0, 7, 3, 13, 0, 7, 3, 14, 0, 7, 0,176, 0, 7, 3, 15, 0, 7, 1, 9, 0, 7, 3, 16, 0, 7, 3, 17, 0, 7, 2,170, - 0, 7, 3, 18, 0, 7, 0,212, 0, 4, 3, 19, 0, 2, 0, 19, 0, 2, 3, 20, 0, 2, 3, 21, 0, 2, 3, 22, 0, 2, 3, 23, - 0, 2, 3, 24, 0, 2, 3, 25, 0, 2, 3, 26, 0, 2, 3, 27, 0, 2, 3, 28, 0, 2, 3, 29, 0, 2, 3, 30, 0, 4, 3, 31, - 0, 4, 3, 32, 0, 4, 3, 33, 0, 4, 3, 34, 0, 7, 3, 35, 0, 7, 3, 36, 0, 7, 3, 37, 0, 7, 3, 38, 0, 7, 3, 39, - 0, 7, 3, 40, 0, 7, 3, 41, 0, 7, 3, 42, 0, 7, 3, 43, 0, 7, 3, 44, 0, 7, 3, 45, 0, 7, 1,160, 0, 0, 3, 46, - 0, 0, 3, 47, 0, 0, 1,213, 0, 0, 3, 48, 0, 0, 3, 49, 0, 0, 3, 50, 0, 7, 3, 51, 0, 7, 3, 52, 0, 40, 0,126, - 0, 12, 3, 53, 0, 12, 3, 54, 0, 12, 3, 55, 0, 12, 3, 56, 0, 7, 3, 57, 0, 2, 2, 80, 0, 2, 3, 58, 0, 7, 2, 61, - 0, 4, 3, 59, 0, 4, 3, 60, 0,154, 3, 61, 0, 2, 3, 62, 0, 2, 0,219, 0, 7, 3, 63, 0, 12, 3, 64, 0, 12, 3, 65, - 0, 12, 3, 66, 0, 12, 3, 67, 0,155, 3, 68, 0,156, 3, 69, 0, 65, 3, 70, 0, 2, 3, 71, 0, 2, 3, 72, 0, 2, 3, 73, - 0, 2, 3, 74, 0, 7, 2, 53, 0, 2, 3, 75, 0, 2, 3, 76, 0,147, 3, 77, 0,135, 3, 78, 0,135, 3, 79, 0, 4, 3, 80, - 0, 4, 3, 81, 0, 4, 3, 82, 0, 4, 0, 70, 0, 12, 3, 83, 0,157, 0, 14, 0,157, 0, 0, 0,157, 0, 1, 0, 32, 0, 38, - 0, 7, 2,170, 0, 7, 1, 10, 0, 7, 2,171, 0, 7, 2,164, 0, 0, 0, 20, 0, 4, 2,172, 0, 4, 2,173, 0, 4, 3, 84, - 0, 2, 0, 17, 0, 2, 3, 85, 0, 7, 2,174, 0,155, 0, 36, 0, 2, 3, 86, 0, 2, 3, 87, 0, 2, 0, 19, 0, 2, 2,164, - 0, 7, 3, 88, 0, 7, 3, 89, 0, 7, 3, 90, 0, 7, 3, 91, 0, 7, 3, 92, 0, 7, 3, 93, 0, 7, 3, 94, 0, 7, 3, 95, - 0, 7, 3, 96, 0, 7, 3, 97, 0, 7, 3, 98, 0, 7, 3, 99, 0, 7, 3,100, 0, 7, 3,101, 0, 7, 3,102, 0, 7, 3,103, - 0, 7, 3,104, 0, 7, 3,105, 0, 7, 3,106, 0, 7, 3,107, 0, 7, 3,108, 0, 7, 3,109, 0, 7, 3,110, 0, 7, 3,111, - 0, 2, 3,112, 0, 2, 3,113, 0, 2, 3,114, 0, 2, 3,115, 0, 53, 0,169, 0,158, 3,116, 0, 7, 3,117, 0, 4, 0, 37, - 0,131, 0, 5, 0, 4, 0, 19, 0, 4, 3,118, 0, 4, 3,119, 0, 4, 3,120, 0, 4, 3,121, 0,159, 0, 1, 0, 7, 1,227, - 0,154, 0, 28, 0, 4, 0, 19, 0, 7, 3,122, 0, 7, 3,123, 0, 7, 3,124, 0, 4, 3,125, 0, 4, 3,126, 0, 4, 3,127, - 0, 4, 3,128, 0, 7, 3,129, 0, 7, 3,130, 0, 7, 3,131, 0, 7, 3,132, 0, 7, 3,133, 0, 7, 3,134, 0, 7, 3,135, - 0, 7, 3,136, 0, 7, 3,137, 0, 7, 3,138, 0, 7, 3,139, 0, 7, 3,140, 0, 7, 3,141, 0, 7, 3,142, 0, 7, 3,143, - 0, 7, 3,144, 0, 7, 3,145, 0, 7, 3,146, 0, 4, 3,147, 0, 4, 3,148, 0,156, 0, 44, 0,142, 3,149, 0, 4, 3,150, - 0, 4, 3,151, 0,160, 3,152, 0,161, 3,153, 0, 7, 0, 37, 0, 7, 3,154, 0, 7, 3,155, 0, 7, 3,156, 0, 7, 3,157, - 0, 7, 3,158, 0, 7, 3,159, 0, 7, 3,160, 0, 7, 3,161, 0, 7, 3,162, 0, 7, 3,163, 0, 2, 3,164, 0, 2, 3,165, - 0, 7, 3,166, 0, 7, 3,167, 0, 4, 0,131, 0, 4, 3,168, 0, 4, 3,169, 0, 2, 3,170, 0, 2, 3,171, 0,159, 3,172, - 0, 4, 3,173, 0, 4, 0, 82, 0, 7, 3,174, 0, 7, 3,175, 0, 7, 3,176, 0, 7, 3,177, 0, 2, 3,178, 0, 2, 3,179, - 0, 2, 3,180, 0, 2, 3,181, 0, 2, 3,182, 0, 2, 3,183, 0, 2, 3,184, 0, 2, 3,185, 0,162, 3,186, 0, 7, 3,187, - 0, 7, 3,188, 0,131, 3,189, 0,147, 0, 48, 0, 2, 0, 17, 0, 2, 3,190, 0, 2, 3,191, 0, 2, 3,192, 0, 7, 3,193, - 0, 2, 3,194, 0, 2, 3,195, 0, 7, 3,196, 0, 2, 3,197, 0, 2, 3,198, 0, 7, 3,199, 0, 7, 3,200, 0, 7, 3,201, - 0, 7, 3,202, 0, 7, 3,203, 0, 7, 3,204, 0, 4, 3,205, 0, 7, 3,206, 0, 7, 3,207, 0, 7, 3,208, 0, 78, 3,209, - 0, 78, 3,210, 0, 78, 3,211, 0, 0, 3,212, 0, 7, 3,213, 0, 7, 3,214, 0, 36, 0, 80, 0, 2, 3,215, 0, 0, 3,216, - 0, 0, 3,217, 0, 7, 3,218, 0, 4, 3,219, 0, 7, 3,220, 0, 7, 3,221, 0, 4, 3,222, 0, 4, 0, 19, 0, 7, 3,223, - 0, 7, 3,224, 0, 7, 3,225, 0, 82, 3,226, 0, 7, 3,227, 0, 7, 3,228, 0, 7, 3,229, 0, 7, 3,230, 0, 7, 3,231, - 0, 7, 3,232, 0, 7, 3,233, 0, 4, 3,234, 0,163, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,178, 0, 2, 1, 14, - 0, 2, 1, 47, 0, 2, 3,235, 0, 7, 3,236, 0, 7, 3,237, 0, 7, 3,238, 0, 7, 3,239, 0, 7, 3,240, 0, 7, 3,241, - 0, 7, 3,242, 0, 7, 3,243, 0, 7, 1, 85, 0, 7, 1, 87, 0, 7, 1, 86, 0, 7, 3,244, 0, 4, 3,245, 0, 7, 3,246, - 0, 7, 3,247, 0, 7, 3,248, 0, 7, 3,249, 0, 7, 3,250, 0, 7, 3,251, 0, 7, 3,252, 0, 2, 3,253, 0, 2, 1, 13, - 0, 2, 3,254, 0, 2, 3,255, 0, 7, 4, 0, 0, 7, 4, 1, 0, 7, 4, 2, 0, 7, 4, 3, 0, 7, 4, 4, 0, 7, 4, 5, - 0, 7, 4, 6, 0, 7, 4, 7, 0, 7, 4, 8, 0, 7, 4, 9, 0, 7, 4, 10, 0, 7, 4, 11, 0, 2, 4, 12, 0, 2, 4, 13, - 0, 2, 4, 14, 0, 2, 4, 15, 0, 7, 4, 16, 0, 7, 4, 17, 0, 7, 4, 18, 0, 7, 4, 19, 0, 2, 4, 20, 0, 2, 4, 21, - 0, 2, 4, 22, 0, 2, 4, 23, 0, 7, 4, 24, 0, 7, 4, 25, 0, 7, 4, 26, 0, 7, 4, 27, 0, 2, 4, 28, 0, 2, 4, 29, - 0, 2, 4, 30, 0, 2, 0, 19, 0, 7, 4, 31, 0, 7, 4, 32, 0, 36, 0, 80, 0, 52, 1, 77, 0, 30, 0,155, 0, 40, 0,126, - 0,164, 0, 16, 0, 2, 4, 33, 0, 2, 4, 34, 0, 2, 4, 35, 0, 2, 0, 19, 0, 2, 4, 36, 0, 2, 4, 37, 0, 2, 4, 38, - 0, 2, 4, 39, 0, 2, 4, 40, 0, 2, 4, 41, 0, 2, 4, 42, 0, 2, 4, 43, 0, 4, 4, 44, 0, 7, 4, 45, 0, 7, 4, 46, - 0, 7, 4, 47, 0,165, 0, 8, 0,165, 0, 0, 0,165, 0, 1, 0, 4, 3, 19, 0, 4, 4, 48, 0, 4, 0, 19, 0, 2, 4, 49, - 0, 2, 4, 50, 0, 32, 0,168, 0,166, 0, 13, 0, 9, 4, 51, 0, 9, 4, 52, 0, 4, 4, 53, 0, 4, 4, 54, 0, 4, 4, 55, - 0, 4, 4, 56, 0, 4, 4, 57, 0, 4, 4, 58, 0, 4, 4, 59, 0, 4, 4, 60, 0, 4, 4, 61, 0, 4, 0, 37, 0, 0, 4, 62, - 0,167, 0, 5, 0, 9, 4, 63, 0, 9, 4, 64, 0, 4, 4, 65, 0, 4, 0, 70, 0, 0, 4, 66, 0,168, 0, 13, 0, 4, 0, 17, - 0, 4, 4, 67, 0, 4, 4, 68, 0, 4, 4, 69, 0, 4, 4, 70, 0, 4, 4, 71, 0, 4, 0, 94, 0, 4, 4, 72, 0, 4, 4, 73, - 0, 4, 4, 74, 0, 4, 4, 75, 0, 4, 4, 76, 0, 26, 0, 30, 0,169, 0, 4, 0, 4, 4, 77, 0, 7, 4, 78, 0, 2, 0, 19, - 0, 2, 2, 77, 0,170, 0, 11, 0,170, 0, 0, 0,170, 0, 1, 0, 0, 0, 20, 0, 64, 4, 79, 0, 65, 4, 80, 0, 4, 3, 19, - 0, 4, 4, 81, 0, 4, 4, 82, 0, 4, 0, 37, 0, 4, 4, 83, 0, 4, 4, 84, 0,171, 0,131, 0,166, 4, 85, 0,167, 4, 86, - 0,168, 4, 87, 0,169, 4, 88, 0, 4, 4, 89, 0, 4, 0,131, 0, 4, 3,168, 0, 4, 4, 90, 0, 4, 4, 91, 0, 4, 4, 92, - 0, 4, 4, 93, 0, 2, 0, 19, 0, 2, 4, 94, 0, 7, 3, 36, 0, 7, 4, 95, 0, 7, 4, 96, 0, 7, 4, 97, 0, 7, 4, 98, - 0, 7, 4, 99, 0, 2, 4,100, 0, 2, 4,101, 0, 2, 4,102, 0, 2, 4,103, 0, 2, 0,218, 0, 2, 4,104, 0, 2, 4,105, - 0, 2, 3,115, 0, 2, 4,106, 0, 2, 4,107, 0, 2, 1, 34, 0, 2, 0,110, 0, 2, 4,108, 0, 2, 4,109, 0, 2, 4,110, - 0, 2, 4,111, 0, 2, 4,112, 0, 2, 4,113, 0, 2, 4,114, 0, 2, 4,115, 0, 2, 4,116, 0, 2, 1, 35, 0, 2, 4,117, - 0, 2, 4,118, 0, 2, 4,119, 0, 2, 4,120, 0, 4, 4,121, 0, 4, 1, 13, 0, 2, 4,122, 0, 2, 4,123, 0, 2, 4,124, - 0, 2, 4,125, 0, 2, 4,126, 0, 2, 4,127, 0, 24, 4,128, 0, 24, 4,129, 0, 23, 4,130, 0, 12, 4,131, 0, 2, 4,132, - 0, 2, 0, 37, 0, 7, 4,133, 0, 7, 4,134, 0, 7, 4,135, 0, 7, 4,136, 0, 7, 4,137, 0, 7, 4,138, 0, 7, 4,139, - 0, 7, 4,140, 0, 7, 4,141, 0, 2, 4,142, 0, 2, 4,143, 0, 2, 4,144, 0, 2, 4,145, 0, 2, 4,146, 0, 2, 4,147, - 0, 7, 4,148, 0, 7, 4,149, 0, 7, 4,150, 0, 2, 4,151, 0, 2, 4,152, 0, 2, 4,153, 0, 2, 4,154, 0, 2, 4,155, - 0, 2, 4,156, 0, 2, 4,157, 0, 2, 4,158, 0, 2, 4,159, 0, 2, 4,160, 0, 4, 4,161, 0, 4, 4,162, 0, 4, 4,163, - 0, 4, 4,164, 0, 4, 4,165, 0, 7, 4,166, 0, 4, 4,167, 0, 4, 4,168, 0, 4, 4,169, 0, 4, 4,170, 0, 7, 4,171, - 0, 7, 4,172, 0, 7, 4,173, 0, 7, 4,174, 0, 7, 4,175, 0, 7, 4,176, 0, 7, 4,177, 0, 7, 4,178, 0, 7, 4,179, - 0, 0, 4,180, 0, 0, 4,181, 0, 4, 4,182, 0, 2, 4,183, 0, 2, 1,160, 0, 0, 4,184, 0, 7, 4,185, 0, 7, 4,186, - 0, 4, 4,187, 0, 4, 4,188, 0, 7, 4,189, 0, 7, 4,190, 0, 2, 4,191, 0, 2, 4,192, 0, 7, 4,193, 0, 2, 4,194, - 0, 2, 4,195, 0, 4, 4,196, 0, 2, 4,197, 0, 2, 4,198, 0, 2, 4,199, 0, 2, 4,200, 0, 7, 4,201, 0, 7, 4,202, - 0, 43, 4,203, 0,172, 0, 9, 0,172, 0, 0, 0,172, 0, 1, 0, 0, 0, 20, 0, 2, 4,204, 0, 2, 4,205, 0, 2, 4,206, - 0, 2, 0, 43, 0, 7, 4,207, 0, 7, 0, 70, 0,173, 0, 5, 0, 7, 4,208, 0, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, - 0, 0, 1,160, 0,174, 0, 5, 0,174, 0, 0, 0,174, 0, 1, 0, 4, 4,209, 0, 0, 4,210, 0, 4, 0, 19, 0,175, 0, 6, - 0,176, 4,211, 0, 2, 0, 19, 0, 2, 4,212, 0, 2, 4,213, 0, 2, 4,214, 0, 9, 4,215, 0,177, 0, 4, 0, 2, 0,110, - 0, 2, 2,141, 0, 2, 4,216, 0, 2, 4,217, 0,178, 0, 8, 0, 2, 0, 19, 0, 2, 4,218, 0, 2, 4,219, 0, 2, 4,220, - 0,177, 4,221, 0, 9, 4,215, 0, 7, 4,222, 0, 4, 4,223, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 4,224, - 0, 7, 4,225, 0,180, 0, 8, 0,181, 4,226, 0,176, 4,211, 0, 7, 4,227, 0, 4, 0, 94, 0, 0, 4,228, 0, 0, 4,229, - 0, 0, 4,230, 0, 0, 4,231, 0,182, 0, 9, 0,176, 4,211, 0, 7, 4, 47, 0, 7, 4,232, 0, 2, 1, 13, 0, 2, 0, 19, - 0, 4, 0, 36, 0, 4, 4,233, 0, 84, 4,234, 0, 9, 4,215, 0,183, 0, 64, 0,182, 4,235, 0,182, 4,236, 0,180, 4,237, - 0, 2, 4,238, 0, 2, 4,239, 0, 7, 4,240, 0, 7, 4,241, 0, 2, 4,216, 0, 2, 4,242, 0, 7, 4,243, 0, 7, 4,244, - 0, 2, 4,245, 0, 2, 4,246, 0, 2, 4,247, 0, 2, 4,248, 0, 7, 4,249, 0, 7, 4,250, 0, 7, 4,251, 0, 7, 0, 37, - 0, 2, 4,252, 0, 2, 4,253, 0, 2, 4,254, 0, 2, 4,255, 0, 2, 5, 0, 0, 2, 5, 1, 0, 2, 5, 2, 0,175, 5, 3, - 0,178, 5, 4, 0, 7, 5, 5, 0, 7, 5, 6, 0, 7, 5, 7, 0, 0, 5, 8, 0, 0, 5, 9, 0, 0, 5, 10, 0, 0, 5, 11, - 0, 0, 5, 12, 0, 0, 5, 13, 0, 2, 5, 14, 0, 7, 5, 15, 0, 7, 5, 16, 0, 7, 5, 17, 0, 7, 5, 18, 0, 7, 5, 19, - 0, 7, 5, 20, 0, 7, 5, 21, 0, 7, 5, 22, 0, 7, 5, 23, 0, 7, 5, 24, 0, 2, 5, 25, 0, 0, 5, 26, 0, 0, 5, 27, - 0, 0, 5, 28, 0, 0, 5, 29, 0, 4, 5, 30, 0, 32, 5, 31, 0, 0, 5, 32, 0, 0, 5, 33, 0, 0, 5, 34, 0, 0, 5, 35, - 0, 0, 5, 36, 0, 0, 5, 37, 0, 0, 5, 38, 0, 0, 5, 39, 0, 0, 5, 40, 0,184, 0, 8, 0, 4, 5, 41, 0, 4, 5, 42, - 0, 4, 5, 43, 0, 4, 5, 44, 0, 4, 5, 45, 0, 4, 5, 46, 0, 4, 0, 54, 0, 4, 2, 48, 0, 47, 0, 46, 0, 27, 0, 31, - 0, 39, 0, 75, 0, 32, 5, 47, 0,163, 5, 48, 0, 47, 5, 49, 0, 48, 0,210, 0, 12, 5, 50, 0,165, 5, 51, 0, 32, 5, 52, - 0, 7, 5, 53, 0, 7, 5, 54, 0, 7, 5, 55, 0, 7, 5, 56, 0, 4, 3, 19, 0, 7, 5, 57, 0, 2, 5, 58, 0, 2, 5, 59, - 0, 2, 5, 60, 0, 2, 5, 61, 0, 2, 5, 62, 0, 2, 0, 19, 0, 2, 5, 63, 0, 2, 1, 6, 0, 59, 1, 2, 0, 9, 5, 64, - 0,164, 5, 65, 0,173, 5, 66, 0,183, 5, 67, 0,185, 5, 68, 0,171, 0,184, 0,169, 4, 88, 0, 40, 0,126, 0, 12, 0,104, - 0, 12, 5, 69, 0, 2, 5, 70, 0, 2, 5, 71, 0, 2, 5, 72, 0, 2, 5, 73, 0,186, 5, 74, 0, 2, 5, 75, 0, 2, 5, 76, - 0, 2, 1, 64, 0, 2, 0,219, 0, 4, 5, 77, 0, 4, 5, 78, 0, 12, 5, 79, 0,187, 0, 9, 0, 48, 0,210, 0, 46, 1, 1, - 0, 7, 2, 13, 0, 7, 2, 14, 0, 7, 0,110, 0, 7, 5, 80, 0, 7, 5, 81, 0, 2, 5, 82, 0, 2, 5, 83, 0,188, 0, 34, - 0, 7, 5, 84, 0, 7, 5, 85, 0, 7, 5, 86, 0, 7, 5, 87, 0, 7, 5, 88, 0, 7, 5, 89, 0, 7, 5, 90, 0, 7, 5, 91, - 0, 7, 1, 20, 0, 7, 5, 92, 0, 7, 5, 93, 0, 7, 5, 94, 0, 7, 5, 95, 0, 7, 0,175, 0, 2, 5, 96, 0, 2, 5, 97, - 0, 4, 5, 98, 0, 2, 5, 99, 0, 2, 5,100, 0, 2, 5,101, 0, 2, 5,102, 0, 7, 5,103, 0, 69, 5,104, 0,189, 5,105, - 0,188, 5,106, 0,190, 5,107, 0,191, 5,108, 0,192, 5,109, 0,193, 5,110, 0,194, 5,111, 0, 7, 5,112, 0, 2, 5,113, - 0, 2, 5,114, 0, 4, 1,160, 0,195, 0, 54, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, - 0, 2, 5,118, 0, 7, 5, 91, 0, 7, 1, 20, 0, 7, 0, 43, 0, 4, 5,119, 0, 2, 5,101, 0, 2, 5,102, 0, 32, 5, 47, - 0, 32, 5,120, 0,187, 5,121, 0,195, 5,106, 0, 0, 5,122, 0, 4, 3, 19, 0, 4, 5,123, 0, 2, 4, 35, 0, 2, 5,124, - 0, 2, 5,125, 0, 2, 5,126, 0, 2, 1,160, 0, 2, 0, 19, 0, 2, 5,127, 0, 2, 5,128, 0, 7, 0,116, 0, 7, 5,129, - 0, 7, 5,130, 0, 7, 5,131, 0, 7, 5,132, 0, 7, 5,133, 0, 7, 0,175, 0, 7, 5, 53, 0, 2, 5,134, 0, 2, 1, 64, - 0, 2, 5,135, 0, 2, 5,136, 0, 2, 5,137, 0, 2, 5,138, 0, 2, 5,139, 0, 2, 5,140, 0, 2, 5,141, 0, 2, 5,142, - 0, 4, 5,143, 0, 12, 5,144, 0, 2, 5,145, 0, 2, 2, 62, 0, 2, 5,146, 0, 0, 5,147, 0, 0, 5,148, 0, 9, 5,149, - 0,189, 5,105, 0,197, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 5,150, 0, 23, 5,151, 0, 23, 5,152, 0, 7, 5,153, - 0, 7, 5,154, 0, 7, 5,155, 0, 7, 5,156, 0, 2, 5,157, 0, 2, 5,158, 0, 2, 5,159, 0, 2, 5,160, 0, 2, 5,161, - 0, 2, 0, 19, 0, 2, 5,162, 0, 2, 5,163, 0, 2, 5,164, 0, 2, 5,165, 0, 2, 5,166, 0, 2, 5,126, 0, 7, 5,167, - 0,196, 0, 6, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,198, 0, 8, - 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,199, 5,168, 0, 47, 0,139, - 0,200, 0, 14, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, - 0,201, 5,170, 0, 12, 5,171, 0, 2, 1, 13, 0, 2, 0, 19, 0, 2, 5,172, 0, 0, 5,173, 0, 0, 5,174, 0,202, 0, 28, - 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,190, 5,107, 0, 2, 5,175, - 0, 2, 5,176, 0, 2, 5,162, 0, 2, 5,177, 0,197, 5,169, 0, 2, 5,178, 0, 2, 0,138, 0, 2, 5,173, 0, 2, 5,179, - 0, 9, 5,180, 0, 2, 5,181, 0, 0, 5,182, 0, 0, 5,183, 0, 2, 5,184, 0, 2, 5,185, 0, 2, 3, 28, 0, 2, 5,186, - 0, 2, 5,187, 0, 0, 0, 19, 0, 0, 1, 47, 0, 0, 5,188, 0,203, 0, 16, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, - 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, 0, 7, 2, 13, 0, 7, 2, 14, 0, 2, 5,178, 0, 2, 0, 37, - 0, 2, 5,189, 0, 2, 5,190, 0, 4, 0, 19, 0, 7, 5, 80, 0,189, 5,105, 0,204, 0, 10, 0,196, 0, 0, 0,196, 0, 1, - 0, 12, 5,115, 0, 4, 5,116, 0, 4, 0, 37, 0,205, 5,191, 0,206, 5,192, 0,207, 5,193, 0,194, 5,194, 0,208, 5,195, - 0,209, 0, 17, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, - 0, 12, 5,196, 0,210, 5,197, 0, 0, 5,198, 0,211, 5,199, 0, 4, 5,200, 0, 4, 5,201, 0, 2, 0, 19, 0, 2, 5,202, - 0, 2, 5,203, 0, 2, 0, 37, 0,212, 0, 29, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, - 0, 2, 5,118, 0, 48, 2,149, 0, 46, 1, 1, 0, 62, 5,204, 0, 2, 0,138, 0, 2, 5,205, 0, 2, 0, 70, 0, 2, 5,206, - 0, 4, 0, 19, 0, 2, 5,207, 0, 2, 5,174, 0, 2, 5,173, 0, 2, 1,160, 0, 0, 5,208, 0, 0, 5,209, 0, 0, 5,210, - 0, 0, 0, 37, 0, 7, 2, 13, 0, 7, 2, 14, 0, 7, 5, 80, 0, 7, 1, 64, 0, 7, 5,211, 0, 7, 5,212, 0,189, 5,105, - 0,213, 0, 11, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0, 2, 0,138, - 0, 2, 5,174, 0, 2, 5,172, 0, 2, 0, 19, 0,197, 5,169, 0,214, 0, 24, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, - 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0, 43, 5,213, 0, 4, 5,214, 0, 4, 5,215, 0, 2, 0, 94, 0, 2, 0,138, - 0, 4, 5,216, 0, 4, 5,217, 0, 4, 5,218, 0, 4, 5,219, 0, 4, 5,220, 0, 4, 5,221, 0, 7, 5,222, 0, 23, 5,223, - 0, 23, 5,224, 0, 4, 5,225, 0, 4, 5,226, 0, 0, 5,227, 0, 0, 5,228, 0,215, 0, 10, 0, 27, 0, 31, 0, 9, 5,229, - 0, 9, 5,230, 0, 9, 5,231, 0, 9, 5,232, 0, 9, 5,233, 0, 4, 0, 94, 0, 4, 5,234, 0, 0, 5,235, 0, 0, 5,236, - 0,216, 0, 10, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0,215, 5,237, 0, 2, 0, 94, - 0, 2, 0,138, 0, 4, 0, 43, 0, 9, 5,238, 0,217, 0, 8, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, - 0, 7, 5,117, 0,197, 5,169, 0, 4, 0, 19, 0, 4, 5,239, 0,218, 0, 22, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, - 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, 0, 27, 5,240, 0, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,138, - 0, 7, 5,241, 0, 9, 5,242, 0, 7, 2, 13, 0, 7, 2, 14, 0, 7, 5,243, 0, 7, 5,244, 0, 59, 1, 2, 0, 59, 5,245, - 0, 4, 5,246, 0, 4, 0, 37, 0,189, 5,105, 0,219, 0, 42, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, - 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, 0,206, 5,192, 0, 0, 5,247, 0, 0, 5,248, 0, 0, 5,249, 0, 2, 0, 17, - 0, 2, 5,250, 0, 2, 0, 19, 0, 2, 5,251, 0, 9, 5,242, 0, 4, 5,252, 0, 4, 5,253, 0, 4, 5,254, 0, 4, 5,255, - 0, 23, 6, 0, 0, 23, 6, 1, 0, 7, 6, 2, 0, 7, 6, 3, 0, 7, 6, 4, 0, 7, 5,241, 0, 2, 6, 5, 0, 2, 0,209, - 0, 2, 1,103, 0, 2, 6, 6, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 6, 7, 0, 2, 6, 8, 0, 9, 6, 9, 0, 9, 6, 10, - 0, 9, 6, 11, 0, 9, 6, 12, 0, 9, 6, 13, 0, 2, 6, 14, 0, 0, 6, 15, 0, 58, 6, 16, 0,220, 0, 7, 0,220, 0, 0, - 0,220, 0, 1, 0, 0, 6, 17, 0, 2, 6, 18, 0, 2, 6, 19, 0, 2, 6, 20, 0, 2, 0, 37, 0,221, 0, 10, 0, 2, 6, 19, - 0, 2, 6, 21, 0, 2, 6, 22, 0, 2, 6, 23, 0, 2, 6, 24, 0, 2, 6, 25, 0, 2, 6, 26, 0, 2, 5,162, 0, 7, 6, 27, - 0, 7, 6, 28, 0,222, 0, 17, 0,222, 0, 0, 0,222, 0, 1, 0, 0, 4,210, 0,221, 6, 29, 0,221, 6, 30, 0,221, 6, 31, - 0,221, 6, 32, 0, 2, 6, 33, 0, 2, 6, 34, 0, 2, 6, 35, 0, 2, 6, 36, 0, 2, 6, 37, 0, 2, 6, 38, 0, 2, 6, 39, - 0, 2, 6, 40, 0, 2, 6, 41, 0, 2, 2, 77, 0,223, 0, 10, 0, 0, 6, 42, 0, 0, 6, 43, 0, 0, 6, 44, 0, 0, 6, 45, - 0, 0, 6, 46, 0, 0, 6, 47, 0, 2, 6, 48, 0, 2, 6, 49, 0, 2, 6, 50, 0, 2, 0, 37, 0,224, 0, 12, 0,223, 6, 51, - 0,223, 6, 52, 0,223, 6, 53, 0,223, 6, 54, 0,223, 6, 55, 0,223, 6, 56, 0,223, 6, 57, 0,223, 6, 58, 0,223, 6, 59, - 0,223, 6, 60, 0,223, 6, 61, 0, 0, 6, 62, 0,225, 0, 71, 0, 0, 6, 63, 0, 0, 6, 64, 0, 0, 6, 46, 0, 0, 6, 65, - 0, 0, 6, 66, 0, 0, 6, 67, 0, 0, 6, 68, 0, 0, 6, 69, 0, 0, 6, 70, 0, 0, 6, 71, 0, 0, 6, 72, 0, 0, 6, 73, - 0, 0, 6, 74, 0, 0, 6, 75, 0, 0, 6, 76, 0, 0, 6, 77, 0, 0, 6, 78, 0, 0, 6, 79, 0, 0, 6, 80, 0, 0, 6, 81, - 0, 0, 6, 82, 0, 0, 6, 83, 0, 0, 6, 84, 0, 0, 6, 85, 0, 0, 6, 86, 0, 0, 6, 87, 0, 0, 6, 88, 0, 0, 6, 89, - 0, 0, 6, 90, 0, 0, 6, 91, 0, 0, 6, 92, 0, 0, 6, 93, 0, 0, 6, 94, 0, 0, 6, 95, 0, 0, 6, 96, 0, 0, 6, 97, - 0, 0, 6, 98, 0, 0, 6, 99, 0, 0, 6,100, 0, 0, 6,101, 0, 0, 6,102, 0, 0, 6,103, 0, 0, 6,104, 0, 0, 6,105, - 0, 0, 6,106, 0, 0, 6,107, 0, 0, 6,108, 0, 0, 6,109, 0, 0, 6,110, 0, 0, 6,111, 0, 0, 6,112, 0, 0, 6,113, - 0, 0, 6,114, 0, 0, 6,115, 0, 0, 6,116, 0, 0, 6,117, 0, 0, 6,118, 0, 0, 6,119, 0, 0, 6,120, 0, 0, 6,121, - 0, 0, 6,122, 0, 0, 6,123, 0, 0, 6,124, 0, 0, 6,125, 0, 0, 6,126, 0, 0, 6,127, 0, 0, 6,128, 0, 0, 6,129, - 0, 0, 6,130, 0, 0, 6,131, 0, 0, 0, 96, 0,226, 0, 5, 0, 0, 6,132, 0, 0, 6, 87, 0, 0, 6, 89, 0, 2, 0, 19, - 0, 2, 0, 37, 0,227, 0, 20, 0,227, 0, 0, 0,227, 0, 1, 0, 0, 0, 20, 0,224, 6,133, 0,225, 6,134, 0,225, 6,135, - 0,225, 6,136, 0,225, 6,137, 0,225, 6,138, 0,225, 6,139, 0,225, 6,140, 0,225, 6,141, 0,225, 6,142, 0,225, 6,143, - 0,225, 6,144, 0,225, 6,145, 0,225, 6,146, 0,225, 6,147, 0,225, 6,148, 0,226, 6,149, 0,228, 0, 5, 0, 4, 0, 19, - 0, 4, 0, 37, 0, 7, 2, 61, 0, 7, 6,150, 0, 7, 1,227, 0,229, 0, 67, 0, 4, 0, 19, 0, 4, 6,151, 0, 4, 6,152, - 0, 0, 6,153, 0, 0, 6,154, 0, 0, 6,155, 0, 0, 6,156, 0, 0, 6,157, 0, 0, 6,158, 0, 0, 6,159, 0, 0, 6,160, - 0, 0, 6,161, 0, 2, 6,162, 0, 2, 0, 37, 0, 4, 6,163, 0, 4, 6,164, 0, 4, 6,165, 0, 4, 6,166, 0, 2, 6,167, - 0, 2, 6,168, 0, 4, 6,169, 0, 4, 0, 43, 0, 4, 6,170, 0, 2, 6,171, 0, 2, 6,172, 0, 2, 6,173, 0, 2, 6,174, - 0, 12, 6,175, 0, 12, 6,176, 0, 12, 6,177, 0, 2, 6,178, 0, 2, 6,179, 0, 2, 6,180, 0, 2, 6,181, 0, 2, 6,182, - 0, 2, 6,183, 0, 2, 6,184, 0, 2, 6,185, 0,228, 6,186, 0, 2, 6,187, 0, 2, 6,188, 0, 2, 6,189, 0, 2, 6,190, - 0, 2, 6,191, 0, 2, 6,192, 0, 2, 6,193, 0, 2, 6,194, 0, 4, 6,195, 0, 4, 6,196, 0, 2, 6,197, 0, 2, 6,198, - 0, 2, 6,199, 0, 2, 6,200, 0, 2, 6,201, 0, 2, 6,202, 0, 2, 6,203, 0, 2, 6,204, 0, 2, 6,205, 0, 2, 6,206, - 0, 2, 6,207, 0, 2, 6,208, 0, 0, 6,209, 0, 0, 6,210, 0, 7, 6,211, 0, 2, 5, 63, 0, 2, 6,212, 0, 56, 6,213, - 0,199, 0, 20, 0, 27, 0, 31, 0, 12, 6,214, 0, 12, 6,215, 0, 12, 6,216, 0, 12, 5,115, 0, 47, 0,139, 0, 2, 6,217, - 0, 2, 6,218, 0, 2, 6,219, 0, 2, 6,220, 0, 2, 6,221, 0, 2, 6,222, 0, 2, 6,223, 0, 2, 0, 37, 0, 2, 6,224, - 0, 2, 6,225, 0, 4, 0, 70, 0,194, 6,226, 0, 9, 6,227, 0, 2, 6,228, 0,230, 0, 5, 0,230, 0, 0, 0,230, 0, 1, - 0,230, 6,229, 0, 13, 6,230, 0, 4, 0, 19, 0,231, 0, 7, 0,231, 0, 0, 0,231, 0, 1, 0,230, 6,231, 0,230, 6,232, - 0, 2, 4,129, 0, 2, 0, 19, 0, 4, 0, 37, 0,232, 0, 20, 0,232, 0, 0, 0,232, 0, 1, 0,233, 6,233, 0,234, 5,195, - 0, 0, 6,234, 0, 0, 6,235, 0, 0, 6,236, 0, 2, 6,237, 0, 2, 6,238, 0, 2, 6,239, 0, 2, 6,240, 0, 2, 6,241, - 0, 2, 0, 37, 0, 2, 0, 19, 0, 2, 6,242, 0, 2, 6,243, 0, 2, 6,244, 0, 4, 6,245, 0,232, 6,246, 0, 9, 6,247, - 0,235, 0, 2, 0,236, 6,233, 0,234, 5,195, 0,237, 0, 2, 0,238, 6,233, 0,234, 5,195, 0,239, 0, 23, 0,239, 0, 0, - 0,239, 0, 1, 0,230, 6,231, 0,230, 6,232, 0,230, 6,248, 0,230, 6,249, 0,199, 6,250, 0, 23, 0, 52, 0, 0, 5,116, - 0, 0, 6,251, 0, 2, 5,163, 0, 2, 5,164, 0, 2, 6,252, 0, 2, 0, 37, 0, 2, 6,220, 0, 2, 6,253, 0, 2, 0, 19, - 0, 40, 0,126, 0,240, 6,233, 0, 12, 6,254, 0, 12, 5,115, 0, 12, 6,255, 0, 12, 7, 0, 0,241, 0, 21, 0,241, 0, 0, - 0,241, 0, 1, 0,197, 5,169, 0, 23, 7, 1, 0, 23, 7, 2, 0, 2, 5,163, 0, 2, 5,164, 0, 2, 7, 3, 0, 2, 7, 4, - 0, 2, 7, 5, 0, 2, 0, 19, 0, 7, 2, 9, 0, 2, 6,219, 0, 2, 6,223, 0, 4, 0, 43, 0,242, 6,233, 0, 12, 7, 6, - 0, 12, 7, 7, 0, 12, 6,255, 0, 0, 7, 8, 0, 9, 7, 9, 0,243, 0, 11, 0, 0, 7, 10, 0, 2, 7, 11, 0, 2, 7, 12, - 0, 2, 7, 13, 0, 2, 7, 14, 0, 2, 7, 15, 0, 2, 4,113, 0,199, 7, 16, 0, 47, 7, 17, 0, 4, 7, 18, 0, 4, 7, 19, - 0,244, 0, 1, 0, 0, 7, 20, 0,245, 0, 8, 0, 58, 7, 21, 0, 58, 7, 22, 0,245, 7, 23, 0,245, 7, 24, 0,245, 7, 25, - 0, 2, 0,134, 0, 2, 0, 19, 0, 4, 7, 26, 0,246, 0, 4, 0, 4, 5,214, 0, 4, 7, 27, 0, 4, 5,217, 0, 4, 7, 28, - 0,247, 0, 2, 0, 4, 7, 29, 0, 4, 7, 30, 0,248, 0, 7, 0, 7, 7, 31, 0, 7, 7, 32, 0, 7, 7, 33, 0, 4, 0, 19, - 0, 4, 0, 37, 0, 7, 3,246, 0, 7, 7, 34, 0,249, 0, 1, 0, 0, 7, 35, 0,250, 0, 21, 0,250, 0, 0, 0,250, 0, 1, - 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 7, 36, 0, 4, 7, 37, 0, 4, 7, 38, 0,244, 7, 39, 0, 0, 7, 35, - 0, 4, 7, 40, 0, 4, 7, 41, 0,249, 3, 4, 0,246, 7, 42, 0,247, 7, 43, 0,248, 7, 44, 0,245, 7, 45, 0,245, 7, 46, - 0,245, 7, 47, 0, 58, 7, 48, 0, 58, 7, 49, 0,251, 0, 12, 0, 0, 1,190, 0, 9, 0,195, 0, 0, 0,196, 0, 4, 0,199, - 0, 4, 0,207, 0, 9, 0,200, 0, 7, 0,202, 0, 7, 0,203, 0, 9, 7, 50, 0, 9, 7, 51, 0, 9, 0,204, 0, 9, 0,206, - 0,252, 0, 45, 0,252, 0, 0, 0,252, 0, 1, 0, 9, 7, 52, 0, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, - 0, 4, 0, 23, 0, 4, 0, 92, 0, 4, 7, 53, 0, 4, 7, 54, 0, 4, 7, 37, 0, 4, 7, 38, 0, 4, 7, 55, 0, 4, 0,218, - 0, 4, 7, 56, 0, 4, 7, 57, 0, 7, 4,232, 0, 7, 7, 58, 0, 4, 0,131, 0, 4, 7, 59, 0,250, 7, 60, 0, 36, 0, 80, - 0, 47, 0,139, 0, 50, 0,142, 0, 7, 7, 61, 0, 7, 7, 62, 0,251, 1, 3, 0,252, 7, 63, 0,252, 7, 64, 0,252, 7, 65, - 0, 12, 7, 66, 0,253, 7, 67, 0,254, 7, 68, 0, 7, 7, 69, 0, 7, 7, 70, 0, 4, 7, 71, 0, 7, 7, 72, 0, 9, 7, 73, - 0, 4, 7, 74, 0, 4, 7, 75, 0, 4, 7, 76, 0, 7, 7, 77, 0, 4, 7, 78, 0, 4, 0, 37, 0,255, 0, 4, 0,255, 0, 0, - 0,255, 0, 1, 0, 12, 7, 79, 0,252, 7, 80, 1, 0, 0, 6, 0, 12, 7, 81, 0, 12, 7, 66, 0, 12, 7, 82, 0,252, 7, 83, - 0, 0, 7, 84, 0, 0, 7, 85, 1, 1, 0, 4, 0, 7, 7, 86, 0, 7, 0,113, 0, 2, 7, 87, 0, 2, 7, 88, 1, 2, 0, 6, - 0, 7, 7, 89, 0, 7, 7, 90, 0, 7, 7, 91, 0, 7, 7, 92, 0, 4, 7, 93, 0, 4, 7, 94, 1, 3, 0, 12, 0, 7, 7, 95, - 0, 7, 7, 96, 0, 7, 7, 97, 0, 7, 7, 98, 0, 7, 7, 99, 0, 7, 7,100, 0, 7, 7,101, 0, 7, 7,102, 0, 7, 7,103, - 0, 7, 7,104, 0, 4, 2,153, 0, 4, 7,105, 1, 4, 0, 2, 0, 7, 4,208, 0, 7, 0, 37, 1, 5, 0, 5, 0, 7, 7,106, - 0, 7, 7,107, 0, 4, 0, 94, 0, 4, 2,115, 0, 4, 7,108, 1, 6, 0, 6, 1, 6, 0, 0, 1, 6, 0, 1, 0, 2, 0, 17, - 0, 2, 0, 19, 0, 2, 7,109, 0, 2, 0, 57, 1, 7, 0, 8, 1, 7, 0, 0, 1, 7, 0, 1, 0, 2, 0, 17, 0, 2, 0, 19, - 0, 2, 7,109, 0, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,131, 1, 8, 0, 45, 1, 8, 0, 0, 1, 8, 0, 1, 0, 2, 0, 17, - 0, 2, 0, 19, 0, 2, 7,109, 0, 2, 0,214, 0, 2, 3,164, 0, 2, 7,110, 0, 7, 7,111, 0, 7, 0, 93, 0, 7, 2,166, - 0, 4, 7,112, 0, 4, 0, 82, 0, 4, 2,117, 0, 7, 7,113, 0, 7, 7,114, 0, 7, 7,115, 0, 7, 7,116, 0, 7, 7,117, - 0, 7, 7,118, 0, 7, 2,163, 0, 7, 1, 0, 0, 7, 7,119, 0, 7, 7,120, 0, 7, 0, 37, 0, 7, 7,121, 0, 7, 7,122, - 0, 7, 7,123, 0, 2, 7,124, 0, 2, 7,125, 0, 2, 7,126, 0, 2, 7,127, 0, 2, 7,128, 0, 2, 7,129, 0, 2, 7,130, - 0, 2, 7,131, 0, 2, 5,127, 0, 2, 7,132, 0, 2, 1,210, 0, 2, 7,133, 0, 0, 7,134, 0, 0, 7,135, 0, 7, 0,212, - 1, 9, 7,136, 0, 65, 1,163, 1, 10, 0, 16, 1, 10, 0, 0, 1, 10, 0, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 7,109, - 0, 2, 0,214, 0, 7, 2,158, 0, 7, 2,159, 0, 7, 2,160, 0, 7, 1,254, 0, 7, 2,161, 0, 7, 2,162, 0, 7, 7,137, - 0, 7, 2,163, 0, 7, 2,165, 0, 7, 2,166, 0,211, 0, 5, 0, 2, 0, 17, 0, 2, 7, 26, 0, 2, 0, 19, 0, 2, 7,138, - 0, 27, 5,240, 0,210, 0, 3, 0, 4, 0, 69, 0, 4, 7,139, 0,211, 0, 2, 1, 11, 0, 11, 1, 11, 0, 0, 1, 11, 0, 1, - 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 7,140, 0, 4, 0, 22, 0, 4, 7,141, 0, 2, 0, 19, 0, 2, 0, 37, 0, 9, 7,142, - 0, 9, 7,143, 1, 12, 0, 5, 0, 0, 0, 20, 0, 7, 1, 20, 0, 7, 7,144, 0, 4, 7,145, 0, 4, 0, 37, 1, 13, 0, 4, - 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 1, 14, 0, 4, 0, 0, 0, 20, 0, 64, 7,146, 0, 7, 1, 20, - 0, 7, 0, 37, 1, 15, 0, 6, 0, 2, 7,147, 0, 2, 7,148, 0, 2, 0, 17, 0, 2, 7,149, 0, 0, 7,150, 0, 0, 7,151, - 1, 16, 0, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 7,152, 0, 0, 7,153, 1, 17, 0, 3, 0, 4, 0, 17, - 0, 4, 0, 37, 0, 0, 0, 20, 1, 18, 0, 4, 0, 2, 7,154, 0, 2, 7,155, 0, 2, 0, 19, 0, 2, 0, 37, 1, 19, 0, 6, - 0, 0, 0, 20, 0, 0, 7,156, 0, 2, 7,157, 0, 2, 2,163, 0, 2, 1, 13, 0, 2, 0, 70, 1, 20, 0, 5, 0, 0, 0, 20, - 0, 7, 0,113, 0, 7, 3,248, 0, 2, 0, 19, 0, 2, 2,129, 1, 21, 0, 3, 0, 0, 0, 20, 0, 4, 2,117, 0, 4, 7,154, - 1, 22, 0, 7, 0, 0, 0, 20, 0, 7, 3,248, 0, 0, 7,158, 0, 0, 7,159, 0, 2, 1, 13, 0, 2, 0, 43, 0, 4, 7,160, - 1, 23, 0, 3, 0, 32, 7,161, 0, 0, 7,162, 0, 0, 7,163, 1, 24, 0, 17, 1, 24, 0, 0, 1, 24, 0, 1, 0, 2, 0, 17, - 0, 2, 7,140, 0, 2, 0, 19, 0, 2, 7,164, 0, 2, 7,165, 0, 2, 7,166, 0, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, - 0, 9, 0, 2, 1, 25, 7,167, 0, 32, 0, 45, 0, 2, 4,217, 0, 2, 7, 69, 0, 4, 0, 37, 1, 26, 0, 11, 0, 0, 0, 20, - 0, 0, 0, 17, 0, 0, 7,168, 0, 2, 0, 19, 0, 2, 2,129, 0, 2, 7,169, 0, 4, 7,170, 0, 4, 7,171, 0, 4, 7,172, - 0, 4, 7,173, 0, 4, 7,174, 1, 27, 0, 1, 0, 0, 7,175, 1, 28, 0, 1, 0, 43, 5,213, 1, 25, 0, 18, 1, 25, 0, 0, - 1, 25, 0, 1, 1, 25, 7,176, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 7,177, 0, 2, 7,166, 0, 2, 7,140, 0, 2, 7,178, - 0, 2, 0, 70, 0, 2, 1,160, 0, 0, 0, 20, 0, 9, 0, 2, 1, 29, 7,167, 1, 24, 7,179, 0, 2, 0, 15, 0, 2, 7,180, - 0, 4, 7,181, 1, 30, 0, 3, 0, 4, 2,189, 0, 4, 0, 37, 0, 32, 0, 45, 1, 31, 0, 12, 0,152, 7,182, 0, 2, 0, 17, - 0, 2, 0, 19, 0, 4, 7,111, 0, 4, 0, 93, 0, 0, 0, 20, 0, 0, 7,183, 0, 2, 7,184, 0, 2, 7,185, 0, 2, 7,186, - 0, 2, 7,187, 0, 7, 7,188, 1, 32, 0, 10, 0, 2, 0, 19, 0, 2, 7,189, 0, 4, 7,111, 0, 4, 0, 93, 0, 2, 7,190, - 0,253, 7, 67, 0, 2, 0, 17, 0, 2, 7,191, 0, 2, 7,192, 0, 2, 7,193, 1, 33, 0, 7, 0, 2, 0, 19, 0, 2, 7,189, - 0, 4, 7,111, 0, 4, 0, 93, 0, 2, 0, 17, 0, 2, 7,194, 0, 7, 3,124, 1, 34, 0, 11, 0, 4, 2,189, 0, 2, 0, 17, - 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 7,195, 0, 0, 0, 20, 0, 7, 7,196, 0, 7, 7,197, 0, 7, 3, 37, 0, 2, 7,198, - 0, 2, 7,199, 1, 35, 0, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 5, 47, 1, 36, 0, 5, - 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 7,152, 0, 32, 0, 45, 1, 37, 0, 12, 0, 2, 0, 19, 0, 2, 0, 17, - 0, 2, 7,140, 0, 2, 3, 38, 0, 7, 7,200, 0, 7, 7,201, 0, 7, 1, 8, 0, 7, 1, 9, 0, 7, 3, 13, 0, 7, 3, 16, - 0, 7, 7,202, 0, 7, 7,203, 1, 38, 0, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 7,111, 0, 4, 0, 93, 0, 0, 0, 20, - 0, 0, 7,183, 0, 2, 0, 43, 0, 2, 0, 64, 0, 2, 7,204, 0, 2, 7,205, 1, 39, 0, 8, 0, 32, 0, 45, 0, 7, 2,160, - 0, 7, 7,206, 0, 7, 7,207, 0, 7, 2,155, 0, 2, 0, 19, 0, 2, 2,129, 0, 7, 7,208, 1, 40, 0, 12, 0, 2, 0, 17, - 0, 2, 1, 13, 0, 2, 0, 19, 0, 2, 2,163, 0, 2, 2,189, 0, 2, 7,209, 0, 4, 0, 37, 0, 7, 7,210, 0, 7, 7,211, - 0, 7, 7,212, 0, 7, 7,213, 0, 0, 7,214, 1, 41, 0, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 7,111, 0, 4, 0, 93, - 0, 0, 0, 20, 0, 2, 2, 77, 0, 2, 0, 64, 0, 2, 7,204, 0, 2, 7,205, 0, 65, 1,163, 1, 42, 0, 7, 0, 4, 2,117, - 0, 4, 7,215, 0, 4, 7,216, 0, 4, 7,217, 0, 7, 7,218, 0, 7, 7,219, 0, 0, 7,158, 1, 43, 0, 7, 0, 0, 7,220, - 0, 32, 7,221, 0, 0, 7,162, 0, 2, 7,222, 0, 2, 0, 43, 0, 4, 0, 70, 0, 0, 7,163, 1, 44, 0, 6, 0, 2, 0, 19, - 0, 2, 0, 17, 0, 4, 7,111, 0, 4, 0, 93, 0, 0, 7,223, 0, 0, 7,224, 1, 45, 0, 1, 0, 4, 0, 19, 1, 46, 0, 6, - 0, 0, 0, 96, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 7,225, 0, 7, 7,226, 0, 43, 5,213, 1, 47, 0, 3, 0, 0, 0, 96, - 0, 4, 0, 17, 0, 32, 0, 45, 1, 48, 0, 2, 0, 4, 0, 17, 0, 4, 5,152, 1, 29, 0, 10, 1, 29, 0, 0, 1, 29, 0, 1, - 1, 29, 7,176, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 7,140, 0, 2, 7,227, 0, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, - 1, 49, 0, 10, 0, 7, 3, 37, 0, 7, 7,228, 0, 7, 7,229, 0, 7, 7,230, 0, 7, 7,231, 0, 4, 0, 19, 0, 7, 7,209, - 0, 7, 7,232, 0, 7, 7,233, 0, 7, 0, 37, 0,253, 0, 20, 0, 27, 0, 31, 0, 0, 0,194, 1, 50, 7,234, 0, 9, 7,235, - 0, 44, 0,154, 0, 44, 7,236, 0, 9, 7,237, 0, 36, 0, 80, 0, 7, 3,124, 0, 7, 7,238, 0, 7, 7,239, 0, 7, 7,240, - 0, 7, 7,241, 0, 7, 7,242, 0, 7, 7,243, 0, 4, 0, 94, 0, 4, 7,244, 0, 0, 7,245, 0, 0, 7,246, 0, 0, 7,247, - 1, 51, 0, 6, 0, 27, 0, 31, 0, 7, 7,248, 0, 7, 7,249, 0, 7, 7,250, 0, 2, 7,251, 0, 2, 7,252, 1, 52, 0, 15, - 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0,239, 7,253, 0,197, 5,169, 0,253, 7, 67, - 0, 2, 1, 13, 0, 2, 7,189, 0, 2, 2, 13, 0, 2, 2, 14, 0, 2, 0, 19, 0, 2, 5,174, 0, 4, 0, 70, 1, 53, 0, 6, - 1, 53, 0, 0, 1, 53, 0, 1, 0, 32, 0, 45, 0, 9, 7,254, 0, 4, 0,219, 0, 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, - 0, 12, 7,255, 0, 4, 0,136, 0, 7, 8, 0, 1, 54, 0, 25, 1, 54, 0, 0, 1, 54, 0, 1, 1, 54, 0, 38, 0, 12, 8, 1, - 0, 0, 0, 20, 0, 7, 8, 2, 0, 7, 8, 3, 0, 7, 8, 4, 0, 7, 8, 5, 0, 4, 0, 19, 0, 7, 8, 6, 0, 7, 8, 7, - 0, 7, 8, 8, 0, 7, 1, 20, 0, 7, 1,219, 0, 7, 8, 9, 0, 7, 2,115, 0, 7, 8, 10, 0, 7, 8, 11, 0, 7, 8, 12, - 0, 7, 8, 13, 0, 7, 8, 14, 0, 7, 0,176, 0, 2, 0,136, 0, 2, 4,245, 1, 55, 0, 20, 0, 27, 0, 31, 0, 12, 8, 15, - 0, 12, 8, 16, 0, 12, 8, 17, 0, 4, 0, 19, 0, 4, 4, 35, 0, 2, 2,167, 0, 2, 8, 18, 0, 2, 0,136, 0, 2, 8, 19, - 0, 2, 8, 20, 0, 2, 8, 21, 0, 2, 8, 22, 0, 2, 8, 23, 0, 4, 8, 24, 0, 4, 8, 25, 0, 4, 8, 26, 0, 4, 8, 27, - 0, 4, 8, 28, 0, 4, 8, 29, 1, 56, 0, 38, 1, 56, 0, 0, 1, 56, 0, 1, 0, 26, 8, 30, 0, 12, 3, 64, 0, 0, 0, 20, - 0, 2, 0, 19, 0, 2, 8, 31, 0, 2, 8, 32, 0, 2, 8, 33, 0, 2, 3, 22, 0, 2, 8, 34, 0, 4, 1,252, 0, 4, 8, 26, - 0, 4, 8, 27, 1, 54, 8, 35, 1, 56, 0, 38, 1, 56, 8, 36, 0, 12, 8, 37, 0, 9, 8, 38, 0, 9, 8, 39, 0, 9, 8, 40, - 0, 7, 1, 8, 0, 7, 0,176, 0, 7, 8, 41, 0, 7, 1,200, 0, 2, 8, 42, 0, 2, 0, 37, 0, 7, 8, 43, 0, 7, 8, 44, - 0, 7, 3, 18, 0, 7, 8, 45, 0, 7, 8, 46, 0, 7, 8, 47, 0, 7, 8, 48, 0, 7, 8, 49, 0, 7, 8, 50, 0, 7, 1,249, - 0, 32, 8, 51, 0,153, 0, 9, 0, 12, 8, 52, 0, 2, 0, 19, 0, 2, 8, 53, 0, 7, 3, 36, 0, 7, 8, 54, 0, 7, 8, 55, - 0, 12, 8, 56, 0, 4, 8, 57, 0, 4, 0, 37, 1, 57, 0, 7, 1, 57, 0, 0, 1, 57, 0, 1, 0, 12, 7,245, 0, 4, 0, 19, - 0, 4, 8, 58, 0, 0, 4,210, 0,226, 8, 59, 0,152, 0, 7, 0, 27, 0, 31, 0, 12, 8, 60, 0, 12, 8, 52, 0, 12, 8, 61, - 0, 12, 0,104, 0, 4, 0, 19, 0, 4, 8, 62, 0,201, 0, 4, 0, 27, 8, 63, 0, 12, 8, 52, 0, 4, 8, 64, 0, 4, 0, 19, - 1, 58, 0, 17, 0,196, 0, 0, 0,196, 0, 1, 0, 12, 5,115, 0, 4, 5,116, 0, 7, 5,117, 0, 2, 5,118, 0,197, 5,169, - 0,152, 3, 7, 0,201, 8, 65, 0, 0, 1, 13, 0, 0, 5,172, 0, 2, 0, 19, 0, 2, 8, 66, 0, 2, 5,173, 0, 2, 5,174, - 0, 2, 8, 67, 0, 7, 8, 68, 1, 59, 0, 8, 1, 59, 0, 0, 1, 59, 0, 1, 1, 57, 8, 69, 0, 36, 0, 80, 0, 12, 3, 10, - 0, 4, 0, 19, 0, 0, 0, 20, 0, 4, 8, 70, 1, 60, 0, 5, 1, 60, 0, 0, 1, 60, 0, 1, 0, 36, 0, 80, 0, 2, 0, 19, - 0, 0, 8, 71, 1, 61, 0, 12, 1, 61, 0, 0, 1, 61, 0, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 8, 72, - 0, 0, 8, 73, 0, 0, 8, 71, 0, 7, 8, 74, 0, 7, 8, 75, 0, 4, 0, 37, 0, 36, 0, 80, 1, 62, 0, 9, 1, 62, 0, 0, - 1, 62, 0, 1, 0, 32, 8, 76, 0, 0, 8, 77, 0, 7, 8, 78, 0, 2, 8, 79, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, - 1, 63, 0, 7, 0, 43, 5,213, 0, 26, 8, 30, 0, 4, 0, 19, 0, 4, 8, 80, 0, 12, 8, 81, 0, 32, 8, 76, 0, 0, 8, 77, - 1, 64, 0, 12, 0, 32, 8, 76, 0, 2, 8, 82, 0, 2, 0, 19, 0, 2, 8, 83, 0, 2, 8, 84, 0, 0, 8, 77, 0, 32, 8, 85, - 0, 0, 8, 86, 0, 7, 8, 87, 0, 7, 1,219, 0, 7, 8, 88, 0, 7, 8, 89, 1, 65, 0, 6, 0, 32, 8, 76, 0, 4, 8, 90, - 0, 4, 8, 91, 0, 4, 0, 94, 0, 4, 0, 37, 0, 0, 8, 77, 1, 66, 0, 4, 0, 32, 8, 76, 0, 4, 0, 19, 0, 4, 8, 90, - 0, 0, 8, 77, 1, 67, 0, 4, 0, 32, 8, 76, 0, 4, 0, 19, 0, 4, 8, 90, 0, 0, 8, 77, 1, 68, 0, 10, 0, 32, 8, 76, - 0, 4, 8, 92, 0, 7, 0,130, 0, 4, 0, 19, 0, 2, 5,209, 0, 2, 8, 93, 0, 2, 0, 43, 0, 2, 0, 70, 0, 7, 8, 94, - 0, 0, 8, 77, 1, 69, 0, 4, 0, 32, 8, 76, 0, 4, 0, 19, 0, 4, 8, 90, 0, 0, 8, 77, 1, 70, 0, 10, 0, 32, 8, 76, - 0, 2, 0, 17, 0, 2, 3,170, 0, 4, 0, 92, 0, 4, 0, 93, 0, 7, 7,206, 0, 7, 7,207, 0, 4, 0, 37, 0,152, 7,182, - 0, 0, 8, 77, 1, 71, 0, 4, 0, 32, 8, 76, 0, 4, 3, 23, 0, 4, 8, 95, 0, 0, 8, 77, 1, 72, 0, 5, 0, 32, 8, 76, - 0, 7, 0,130, 0, 4, 8, 96, 0, 4, 3, 23, 0, 4, 3, 24, 1, 73, 0, 6, 0, 32, 8, 76, 0, 4, 8, 97, 0, 4, 8, 98, - 0, 7, 8, 99, 0, 7, 8,100, 0, 0, 8, 77, 1, 74, 0, 16, 0, 32, 8, 76, 0, 32, 8, 36, 0, 4, 0, 17, 0, 7, 8,101, - 0, 7, 8,102, 0, 7, 8,103, 0, 7, 8,104, 0, 7, 8,105, 0, 7, 8,106, 0, 7, 8,107, 0, 7, 8,108, 0, 7, 8,109, - 0, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 1, 75, 0, 3, 0, 32, 8, 76, 0, 4, 0, 19, 0, 4, 5,127, - 1, 76, 0, 5, 0, 32, 8, 76, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 8,110, 0, 0, 8, 77, 1, 77, 0, 10, 0, 32, 8, 76, - 0, 0, 8, 77, 0, 2, 8,111, 0, 2, 8,112, 0, 0, 8,113, 0, 0, 8,114, 0, 7, 8,115, 0, 7, 8,116, 0, 7, 8,117, - 0, 7, 8,118, 1, 78, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 8,119, 0, 7, 8,120, - 0, 2, 0, 19, 0, 2, 5,127, 1, 79, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 8,119, - 0, 7, 8,120, 0, 2, 0, 19, 0, 2, 5,127, 1, 80, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, - 0, 7, 8,119, 0, 7, 8,120, 0, 2, 0, 19, 0, 2, 5,127, 1, 81, 0, 7, 0, 32, 8, 76, 0, 0, 8, 77, 0, 7, 1, 20, - 0, 7, 1, 30, 0, 2, 0, 19, 0, 2, 1, 13, 0, 4, 0, 37, 1, 82, 0, 5, 0, 32, 2,224, 0, 7, 1, 20, 0, 2, 2,228, - 0, 0, 2,230, 0, 0, 8,121, 1, 83, 0, 10, 1, 83, 0, 0, 1, 83, 0, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 8,122, - 0, 7, 0,221, 0, 7, 0,222, 0, 2, 7,245, 0, 2, 8,123, 0, 32, 0, 45, 1, 84, 0, 22, 1, 84, 0, 0, 1, 84, 0, 1, - 0, 2, 0, 19, 0, 2, 1, 13, 0, 2, 8,124, 0, 2, 8,125, 0, 36, 0, 80, 0,152, 7,182, 0, 32, 0,168, 0, 7, 0, 92, - 0, 7, 0, 93, 0, 7, 8,126, 0, 7, 8,127, 0, 7, 8,128, 0, 7, 8,129, 0, 7, 2,156, 0, 7, 8,130, 0, 7, 7,184, - 0, 7, 8,131, 0, 0, 8,132, 0, 0, 8,133, 0, 12, 3, 12, 1, 85, 0, 8, 0, 7, 1,227, 0, 7, 7,206, 0, 7, 7,207, - 0, 9, 0, 2, 0, 2, 8,134, 0, 2, 8,135, 0, 2, 8,136, 0, 2, 8,137, 1, 86, 0, 18, 1, 86, 0, 0, 1, 86, 0, 1, - 1, 86, 8,138, 0, 0, 0, 20, 1, 85, 8,139, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 8,140, 0, 2, 8,141, 0, 2, 8,142, - 0, 2, 8,143, 0, 4, 0, 43, 0, 7, 8,144, 0, 7, 8,145, 0, 4, 8,146, 0, 4, 8,147, 1, 86, 8,148, 1, 87, 8,149, - 1, 88, 0, 33, 1, 88, 0, 0, 1, 88, 0, 1, 1, 88, 8,150, 0, 0, 0, 20, 0, 0, 8,151, 0, 2, 0, 17, 0, 2, 0, 19, - 0, 2, 7, 36, 0, 2, 7, 69, 0, 2, 8,152, 0, 2, 0,138, 0, 2, 8,141, 0, 2, 7, 26, 0, 12, 7,177, 0, 12, 8,153, - 0, 27, 5,240, 0, 9, 8,154, 0, 7, 8,144, 0, 7, 8,145, 0, 7, 1,254, 0, 7, 8,155, 0, 2, 8,156, 0, 2, 8,157, - 0, 7, 8,158, 0, 7, 8,159, 0, 2, 8,160, 0, 2, 8,161, 0, 9, 8,162, 0, 24, 8,163, 0, 24, 8,164, 0, 24, 8,165, - 1, 89, 0,155, 1, 90, 8,166, 1, 87, 0, 8, 1, 87, 0, 0, 1, 87, 0, 1, 1, 88, 8,167, 1, 88, 8,168, 1, 86, 8,169, - 1, 86, 8,148, 0, 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 8,170, 0, 12, 8,171, - 1, 85, 8,172, 0, 12, 8,173, 0, 4, 0, 17, 0, 4, 8,174, 0, 4, 8,175, 0, 4, 8,176, 0, 12, 8,177, 1, 90, 8,178, - 1, 86, 8,179, 1, 86, 8,180, 0, 9, 8,181, 0, 9, 8,182, 0, 4, 8,183, 0, 9, 8,184, 0, 9, 8,185, 0, 9, 8,186, - 1, 91, 0, 6, 0, 4, 0,129, 0, 4, 0,131, 0, 4, 7, 26, 0, 0, 8,187, 0, 0, 8,188, 0, 2, 0, 37, 1, 92, 0, 16, - 0, 2, 6,239, 0, 2, 6,240, 0, 2, 8,189, 0, 2, 7,229, 0, 2, 8,190, 0, 2, 0, 68, 0, 7, 2,155, 0, 7, 8,191, - 0, 7, 8,192, 0, 2, 1, 34, 0, 0, 8,193, 0, 0, 4, 47, 0, 2, 8,194, 0, 2, 0, 37, 0, 4, 8,195, 0, 4, 8,196, - 1, 93, 0, 9, 0, 7, 8,197, 0, 7, 8,198, 0, 7, 7,243, 0, 7, 0,113, 0, 7, 8,199, 0, 7, 5, 80, 0, 2, 8,200, - 0, 0, 8,201, 0, 0, 0, 37, 1, 94, 0, 4, 0, 7, 8,202, 0, 7, 8,203, 0, 2, 8,200, 0, 2, 0, 37, 1, 95, 0, 3, - 0, 7, 8,204, 0, 7, 8,205, 0, 7, 0, 15, 1, 96, 0, 7, 0, 0, 1,190, 0, 2, 4,115, 0, 2, 4,116, 0, 2, 4,117, - 0, 2, 4, 67, 0, 4, 0,131, 0, 4, 3,168, 1, 97, 0, 7, 0, 7, 8,206, 0, 7, 8,207, 0, 7, 8,208, 0, 7, 2, 9, - 0, 7, 8,209, 0, 7, 8,210, 0, 7, 8,211, 1, 98, 0, 4, 0, 2, 8,212, 0, 2, 8,213, 0, 2, 8,214, 0, 2, 8,215, - 1, 99, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 1,100, 0, 2, 0, 0, 0,170, 0, 0, 8,216, 1,101, 0, 1, 0, 0, 0, 20, - 1,102, 0, 10, 0, 0, 8,217, 0, 0, 8,218, 0, 0, 8,219, 0, 0, 8,220, 0, 2, 8,189, 0, 2, 8,221, 0, 7, 8,222, - 0, 7, 8,223, 0, 7, 8,224, 0, 7, 8,130, 1,103, 0, 2, 0, 9, 8,225, 0, 9, 8,226, 1,104, 0, 11, 0, 0, 4,117, - 0, 0, 0, 17, 0, 0, 8,200, 0, 0, 0,113, 0, 0, 8,227, 0, 0, 0,110, 0, 0, 0,183, 0, 7, 8,228, 0, 7, 8,229, - 0, 7, 8,230, 0, 7, 8,231, 1,105, 0, 8, 0, 7, 7,147, 0, 7, 0,130, 0, 7, 4, 47, 0, 7, 2, 81, 0, 7, 8,232, - 0, 7, 0,208, 0, 7, 8,233, 0, 4, 0, 17, 1,106, 0, 4, 0, 2, 8,234, 0, 2, 8,235, 0, 2, 8,236, 0, 2, 0, 37, - 1,107, 0, 1, 0, 0, 0, 20, 1,108, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 8,237, 1,109, 0, 10, - 0, 2, 3,150, 0, 2, 0, 19, 0, 7, 3,248, 0, 7, 8,238, 0, 7, 8,239, 0, 7, 8,240, 0, 7, 8,241, 1,108, 8,242, - 1,108, 8,243, 1,108, 8,244, 0, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, 24, 8,245, 0, 24, 8,246, 1,109, 8,247, - 0, 7, 8,248, 0, 7, 8,249, 0, 7, 8,250, 0, 7, 8,251, 1,110, 0, 4, 0, 48, 2,149, 0, 7, 8,252, 0, 7, 1, 93, - 0, 7, 0, 37, 0,176, 0, 17, 0, 27, 0, 31, 1,110, 8,253, 0, 62, 8,242, 0, 52, 1, 77, 0, 2, 0, 19, 0, 2, 5, 81, - 0, 4, 0,110, 0, 7, 8,254, 0, 7, 2, 6, 0, 7, 8,255, 0, 7, 9, 0, 0, 7, 1, 93, 0, 7, 9, 1, 0, 2, 1, 47, - 0, 0, 9, 2, 0, 0, 3,112, 0, 0, 0, 96, 1,111, 0, 10, 0, 4, 0, 17, 0, 4, 0,130, 0, 4, 0, 19, 0, 4, 3, 85, - 0, 4, 9, 3, 0, 4, 9, 4, 0, 4, 9, 5, 0, 0, 0, 96, 0, 0, 0, 20, 0, 9, 0, 2, 0, 89, 0, 6, 1,111, 9, 6, - 0, 4, 9, 7, 0, 4, 9, 8, 0, 4, 9, 9, 0, 4, 0, 37, 0, 9, 9, 10, 1,112, 0, 5, 0, 7, 2, 75, 0, 7, 2,189, - 0, 7, 1,219, 0, 2, 9, 11, 0, 2, 0, 37, 1,113, 0, 5, 0, 7, 2, 75, 0, 7, 9, 12, 0, 7, 9, 13, 0, 7, 9, 14, - 0, 7, 2,189, 1,114, 0, 7, 0, 4, 9, 15, 0, 4, 9, 16, 0, 4, 9, 17, 0, 7, 9, 18, 0, 7, 9, 19, 0, 7, 9, 20, - 0, 7, 9, 21, 1,115, 0, 26, 0, 32, 9, 22, 1,113, 3, 81, 1,113, 9, 23, 1,112, 9, 24, 1,113, 7,136, 0, 7, 9, 25, - 0, 7, 9, 26, 0, 7, 9, 27, 0, 7, 9, 28, 0, 7, 9, 19, 0, 7, 9, 20, 0, 7, 2,189, 0, 7, 2,166, 0, 7, 9, 29, - 0, 7, 9, 30, 0, 7, 0,110, 0, 7, 9, 31, 0, 4, 9, 15, 0, 4, 9, 32, 0, 4, 0, 37, 0, 4, 0, 82, 0, 4, 9, 33, - 0, 2, 0, 19, 0, 2, 9, 34, 0, 2, 9, 35, 0, 2, 3,115, 1,116, 0,112, 0, 27, 0, 31, 0, 4, 0, 19, 0, 2, 0, 17, - 0, 2, 8,111, 0, 2, 9, 36, 0, 2, 9, 37, 0, 2, 8, 42, 0, 2, 9, 38, 0, 2, 9, 39, 0, 2, 9, 40, 0, 2, 9, 41, - 0, 2, 9, 42, 0, 2, 9, 43, 0, 2, 9, 44, 0, 2, 9, 45, 0, 2, 9, 46, 0, 2, 9, 47, 0, 2, 9, 48, 0, 2, 9, 49, - 0, 2, 1,210, 0, 2, 7,129, 0, 2, 7,105, 0, 2, 9, 50, 0, 2, 9, 51, 0, 2, 3,113, 0, 2, 3,114, 0, 2, 9, 52, - 0, 2, 9, 53, 0, 2, 9, 54, 0, 2, 9, 55, 0, 2, 9, 56, 0, 2, 9, 57, 0, 7, 9, 58, 0, 7, 9, 59, 0, 7, 9, 60, - 0, 2, 9, 61, 0, 2, 9, 62, 0, 7, 9, 63, 0, 7, 9, 64, 0, 7, 9, 65, 0, 7, 7,111, 0, 7, 0, 93, 0, 7, 2,166, - 0, 7, 7,117, 0, 7, 9, 66, 0, 7, 9, 67, 0, 7, 9, 68, 0, 7, 9, 69, 0, 7, 0, 57, 0, 4, 7,112, 0, 4, 7,110, - 0, 4, 9, 70, 0, 7, 7,113, 0, 7, 7,114, 0, 7, 7,115, 0, 7, 9, 71, 0, 7, 9, 72, 0, 7, 9, 73, 0, 7, 9, 74, - 0, 7, 9, 75, 0, 7, 9, 76, 0, 7, 9, 77, 0, 7, 9, 78, 0, 7, 3, 37, 0, 7, 0,110, 0, 7, 9, 79, 0, 7, 9, 80, - 0, 7, 9, 81, 0, 7, 9, 82, 0, 7, 9, 83, 0, 7, 9, 84, 0, 7, 2,115, 0, 7, 9, 85, 0, 7, 9, 86, 0, 4, 9, 87, - 0, 4, 9, 88, 0, 7, 9, 89, 0, 7, 9, 90, 0, 7, 9, 91, 0, 7, 9, 92, 0, 7, 9, 93, 0, 7, 9, 94, 0, 7, 9, 95, - 0, 7, 9, 96, 0, 7, 3,109, 0, 7, 3,107, 0, 7, 3,108, 0, 7, 9, 97, 0, 7, 9, 98, 0, 7, 9, 99, 0, 7, 9,100, - 0, 7, 9,101, 0, 7, 9,102, 0, 7, 9,103, 0, 7, 9,104, 0, 7, 9,105, 0, 7, 3, 44, 0, 7, 9,106, 0, 7, 9,107, - 0, 7, 9,108, 0, 7, 9,109, 0, 7, 9,110, 0, 7, 9,111, 0, 7, 9,112, 0, 0, 9,113, 0, 65, 3, 70, 0, 65, 9,114, - 0, 32, 9,115, 0, 32, 9,116, 0, 36, 0, 80, 0,155, 3, 68, 0,155, 9,117, 0,142, 0, 38, 0,142, 0, 0, 0,142, 0, 1, - 1,116, 9,118, 1,115, 3,149, 1,114, 8, 36, 1,117, 9,119, 0, 9, 9,120, 1,118, 9,121, 1,118, 9,122, 0, 12, 9,123, - 0, 12, 9,124, 0,156, 3, 69, 0, 32, 9,125, 0, 32, 9,126, 0, 32, 9,127, 0, 12, 9,128, 0, 12, 9,129, 0, 7, 0,212, - 0, 7, 4, 89, 0, 4, 2,117, 0, 4, 0, 19, 0, 4, 7,112, 0, 4, 9,130, 0, 4, 9,131, 0, 4, 9,132, 0, 4, 0, 57, - 0, 2, 0,219, 0, 2, 9,133, 0, 2, 9,134, 0, 2, 9,135, 0, 2, 3, 62, 0, 2, 9,136, 0, 0, 9,137, 0, 2, 9,138, - 0, 2, 9,139, 0, 2, 9,140, 0, 9, 9,141, 0,131, 3,189, 0,129, 0, 34, 1,119, 9,142, 0, 7, 3,161, 0, 7, 9,143, - 0, 7, 9,144, 0, 7, 3,251, 0, 7, 9,145, 0, 7, 3, 46, 0, 7, 3, 37, 0, 7, 9,146, 0, 7, 2, 8, 0, 7, 9,147, - 0, 7, 9,148, 0, 7, 9,149, 0, 7, 9,150, 0, 7, 9,151, 0, 7, 9,152, 0, 7, 3,162, 0, 7, 9,153, 0, 7, 9,154, - 0, 7, 9,155, 0, 7, 3,163, 0, 7, 3,159, 0, 7, 3,160, 0, 4, 9,156, 0, 4, 0, 94, 0, 4, 9,157, 0, 4, 9,158, - 0, 2, 9,159, 0, 2, 9,160, 0, 2, 9,161, 0, 2, 9,162, 0, 2, 9,163, 0, 2, 0, 37, 0, 4, 0, 70, 0,130, 0, 8, - 1,119, 9,164, 0, 7, 9,165, 0, 7, 9,166, 0, 7, 1,164, 0, 7, 9,167, 0, 4, 0, 94, 0, 2, 9,168, 0, 2, 9,169, - 1,120, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 9,170, 1,121, 0, 6, 1,121, 0, 0, 1,121, 0, 1, - 1,120, 9,171, 0, 4, 9,172, 0, 2, 9,173, 0, 2, 0, 19, 1,122, 0, 5, 1,122, 0, 0, 1,122, 0, 1, 0, 12, 9,174, - 0, 4, 9,175, 0, 4, 0, 19, 1,123, 0, 9, 1,123, 0, 0, 1,123, 0, 1, 0, 12, 0,129, 1,122, 9,176, 0, 4, 0, 19, - 0, 2, 9,173, 0, 2, 9,177, 0, 7, 0, 95, 0, 0, 9,178, 0,189, 0, 6, 0, 27, 0, 31, 0, 12, 4,131, 0, 4, 0, 19, - 0, 2, 9,179, 0, 2, 9,180, 0, 9, 9,181, 1,124, 0, 13, 0, 27, 0, 31, 1,125, 9,182, 1,125, 9,183, 0, 12, 9,184, - 0, 4, 9,185, 0, 2, 9,186, 0, 2, 0, 37, 0, 12, 9,187, 0, 12, 9,188, 0, 12, 9,189, 0, 12, 9,190, 0, 12, 9,191, - 0, 12, 9,192, 1,125, 0, 29, 1,125, 0, 0, 1,125, 0, 1, 0, 9, 9,193, 0, 4, 6,218, 0, 4, 0, 37, 0,199, 5,168, - 0, 0, 9,194, 0, 2, 9,195, 0, 2, 9,196, 0, 2, 6,239, 0, 2, 6,240, 0, 2, 9,197, 0, 2, 9,198, 0, 2, 3, 85, - 0, 2, 6,253, 0, 2, 9,199, 0, 2, 0, 70, 0, 4, 1,160, 1,126, 9,200, 1,127, 9,201, 1,128, 9,202, 0, 4, 9,203, - 0, 4, 9,204, 0, 9, 9,205, 0, 12, 9,206, 0, 12, 9,188, 0, 12, 6,255, 0, 12, 9,207, 0, 12, 9,208, 1,129, 0, 12, - 1,129, 0, 0, 1,129, 0, 1, 0, 0, 9,209, 1,130, 9,210, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 9,211, 0, 2, 9,212, - 0, 2, 9,213, 0, 2, 9,214, 0, 2, 9,215, 0, 2, 0, 37, 1,131, 0, 6, 1,131, 0, 0, 1,131, 0, 1, 0, 12, 9,216, - 0, 0, 9,217, 0, 4, 9,218, 0, 4, 9,219, 0,207, 0, 8, 0,207, 0, 0, 0,207, 0, 1, 0, 0, 9,209, 0, 26, 0, 30, - 1,132, 6,233, 0, 9, 9,220, 1,130, 9,210, 1,133, 9,221, 1,134, 0, 8, 1,134, 0, 0, 1,134, 0, 1, 0, 9, 0, 2, - 0, 9, 9,222, 0, 0, 4,210, 0, 2, 0, 17, 0, 2, 0, 19, 0, 7, 9,223, 1,135, 0, 8, 0, 0, 9,224, 0, 7, 9,225, - 0, 4, 9,226, 0, 2, 9,227, 0, 2, 9,228, 0, 4, 0, 37, 0, 2, 0, 19, 0, 2, 1, 13, 1,136, 0, 5, 0, 7, 7,206, - 0, 7, 7,207, 0, 7, 2,189, 0, 2, 1,223, 0, 2, 1,224, 1,137, 0, 5, 1,136, 0, 2, 0, 4, 0, 54, 0, 7, 9,229, - 0, 7, 7,206, 0, 7, 7,207, 1,138, 0, 4, 0, 2, 9,230, 0, 2, 9,231, 0, 2, 9,232, 0, 2, 9,233, 1,139, 0, 2, - 0, 43, 5,237, 0, 26, 8, 30, 1,140, 0, 3, 0, 24, 9,234, 0, 4, 0, 19, 0, 4, 0, 37, 1,141, 0, 6, 0, 7, 0,110, - 0, 7, 2,141, 0, 7, 9,235, 0, 7, 0, 37, 0, 2, 0,218, 0, 2, 9,236, 1,142, 0, 7, 1,142, 0, 0, 1,142, 0, 1, - 0, 27, 5,240, 0, 0, 9,237, 0, 4, 9,238, 0, 4, 0, 94, 0, 0, 4,210, 1,143, 0, 6, 0, 12, 8, 81, 0, 0, 9,224, - 0, 7, 0, 61, 0, 7, 9,223, 0, 4, 0, 17, 0, 4, 0, 19, 1,144, 0, 3, 0, 7, 9,239, 0, 4, 0, 19, 0, 4, 0, 37, - 1,145, 0, 15, 1,145, 0, 0, 1,145, 0, 1, 1, 57, 8, 69, 1,143, 0, 62, 0, 12, 3, 12, 0, 35, 0, 50, 1,144, 9,240, - 0, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,254, 0, 4, 9,238, 0, 0, 9,237, 0, 4, 9,241, 0, 7, 9,242, - 1,146, 0, 2, 0, 0, 9,243, 0, 0, 9,244, 1,147, 0, 4, 1,147, 0, 0, 1,147, 0, 1, 0,152, 2,224, 0, 12, 9,245, - 1,148, 0, 24, 1,148, 0, 0, 1,148, 0, 1, 0,152, 7,182, 1,147, 9,246, 0, 12, 3, 12, 0, 12, 9,247, 0, 7, 9,223, - 0, 7, 9,248, 0, 7, 0, 92, 0, 7, 0, 93, 0, 7, 8,126, 0, 7, 8,127, 0, 7, 2,156, 0, 7, 8,130, 0, 7, 7,184, - 0, 7, 8,131, 0, 4, 9,249, 0, 4, 0, 19, 0, 4, 8,124, 0, 4, 0, 37, 0, 7, 8,128, 0, 7, 8,129, 0, 0, 8,132, - 0, 0, 8,133, 1,149, 0, 6, 1,149, 0, 0, 1,149, 0, 1, 0, 12, 9,250, 0, 4, 0, 19, 0, 4, 2, 80, 0, 0, 9,251, - 1,150, 0, 10, 1,150, 0, 0, 1,150, 0, 1, 0, 27, 5,240, 0, 0, 9,252, 0, 4, 9,253, 0, 4, 9,254, 0, 0, 9,237, - 0, 4, 9,238, 0, 2, 0, 19, 0, 2, 9,255, 1,151, 0, 6, 1,151, 0, 0, 1,151, 0, 1, 0, 12, 10, 0, 0, 0, 4,210, - 0, 4, 0, 19, 0, 4, 10, 1, 1,152, 0, 5, 1,152, 0, 0, 1,152, 0, 1, 0, 0, 9,237, 0, 4, 9,238, 0, 7, 2,133, - 0, 39, 0, 7, 0,152, 3, 7, 1,147, 9,246, 0, 12, 10, 2, 0, 12, 10, 3, 0, 12, 10, 4, 0, 4, 0, 19, 0, 4, 0,219, - 1,153, 0, 2, 0, 27, 0, 31, 0, 39, 0, 75, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97,115,101, 0, 42,101,100, 98,111, 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,114,111,112, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97, +103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99, +104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113, +117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0,114,111, +116,109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, + 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116, +101,109,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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, + 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, + 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99, +121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105, +110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0, +111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116, +104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110, +100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101, +108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42, +115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, + 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,105,116,101,114, 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,115, 97,116, + 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, + 0,114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95, +111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, + 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110, +110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, + 95,116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, + 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116, +105, 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, + 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105, +109,101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, + 97,108,105,118,101, 0,108,111,111,112, 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,114,116, 50, 91, 51, 93, 0,100,114, 97,119, + 95,115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111, +117,114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, + 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0, +103,114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116, +115,104, 97,112,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,100, 97, +109,112,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,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, + 99, 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105, +110,103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98, +111,105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105, +116, 41, 40, 41, 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,116, 97,114,103, +101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118, +101,110,116,115, 0,107,101,121,101,100, 95,116, 97,114,103,101,116,115, 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, + 51, 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 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,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,107,101,121,109, 97,112,115, 0, 42,103,104,111,115,116,119,105,110, + 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, 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,107,101,121,109, 97,112, 0,110, 97,109, +101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0, 42, 99,117,115,116,111,109, +100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109,118, 97,108, 91, 50, 93, 0,112,114,101,118,120, 0,112,114,101,118, +121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121,109, 97,112, 95,105,100,110, 97,109,101, 0, 99, +117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, 0, 42,101,100, 97,116, 97, 0,105,110,102,108, +117,101,110, 99,101, 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, 42,114,110, 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105, +110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, + 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 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,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121,112,101, 0,116,101,109,112,108, 97,116,101,115, + 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, 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, 0, 84, 89, 80, 69,158, 1, 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,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,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51, +105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 83, 99,114,105,112,116, 76,105,110,107, 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117, +114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, + 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, 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, 77, 83,101,108,101, 99,116, 0, + 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, 80, 97,114, +116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101, +120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 77, 68,105,115,112,115, 0, 32, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, + 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, + 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, + 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, + 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, + 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, + 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, + 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, + 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, + 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, + 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, + 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, + 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, + 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, + 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, + 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, + 32, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, + 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109, +111,100,105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117, +115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, + 97, 59, 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100, +103,101, 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, + 32, 77,117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97, +114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, + 42,118,101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, + 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, + 47, 42, 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101, +120, 44, 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99, +101,115, 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, + 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32, +112, 97,100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118, +101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, + 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32, +109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, + 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111, +114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, + 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, + 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, + 60, 60, 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, + 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, + 47, 10, 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32, +111,114,100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, + 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, + 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, + 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, + 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, + 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, + 45, 62,116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, + 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, + 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, + 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114, +101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, + 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, + 76, 52, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110, +117,115,101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109, +116,102, 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, + 67, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, + 86, 69, 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, + 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105, +116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, + 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97,110,115,112, 44, 32,118, 97,108, +117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103,115, 32,105,110, 32,116,104,101, + 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114,107, 32,119, +105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, + 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97, +112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108,108, 32,111,114, 32,110,111,116,104, +105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, + 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, + 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, + 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, + 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, + 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, 10,105,110, 79, 67, 75, 33,116, 95, +102, 97, 99,101, 59, 32, 32, 32, 32, 32, 65, 69, 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,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, 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, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105, +111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 0, 80, 84, 67, 97, 99,104,101, 77, +101,109, 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, 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, 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, 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, 70,114, + 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105, +110,103,115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, + 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110, +116, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86, +105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86, +105,101,119, 68, 97,116, 97, 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, 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, + 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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, 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, 83,111,108,105,100, + 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 72,101, 97,100,101,114, 0, 72,101, + 97,100,101,114, 84,121,112,101, 0, 77,101,110,117, 0, 77,101,110,117, 84,121,112,101, 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, 84, 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,104,100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, + 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76,105,115, +116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97,110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78, +111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 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, 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, 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, 72, 97,105, +114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 75, +101,121,101,100, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, + 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 0, 80, 97, +114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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,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, 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,109, 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, 0,119,109, 79,112,101,114, + 97,116,111,114, 84,121,112,101, 0, 82,101,112,111,114,116, 76,105,115,116, 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, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 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, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, + 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0, 64, 4,112, 0, 36, 0, 56, 0, +112, 0,128, 0,168, 0, 88, 0, 24, 0, 40, 0, 48, 0,176, 0, 16, 0,176, 0, 40, 0, 96, 5,184, 1, 0, 0, 0, 0, 0, 0, +144, 0, 80, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0,232, 0,136, 0,248, 1, 56, 1, 80, 0,248, 2,104, 0, 88, 1, 0, 0, +128, 0,104, 0,192, 0, 80, 0, 8, 0, 16, 0,200, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, 12, 0, + 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, + 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, 80, 0, +128, 0, 80, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0,128, 0,208, 0, 72, 0,112, 0, 0, 0,136, 0, 32, 0,240, 0, +152, 0, 0, 0, 88, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, 8, 1,104, 0,176, 1, 96, 0, 88, 0, 88, 0, 88, 0,184, 1, +136, 0,128, 0,232, 0, 48, 0,144, 0, 72, 0,120, 0,136, 0,176, 0,224, 0, 0, 0, 40, 0, 16, 0, 0, 0, 0, 0, 0, 0, +232, 1, 40, 0,184, 0,152, 0, 56, 0, 16, 0, 88, 0,248, 3, 64, 0, 16, 0, 88, 0, 24, 0, 40, 1, 8, 0, 88, 0, 88, 0, + 40, 0, 0, 0, 48, 0, 64, 1, 32, 0, 48, 2, 0, 0, 0, 0, 64, 0,248, 2,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 1, 56, 0,136, 0, 72, 0,208, 0,224, 0, 32, 0, 8, 1,224, 0,128, 1, 96, 0, 0, 0,120, 0, 0, 0, 24, 1, 16, 0, + 16, 0,168, 0,208, 0,144, 2,120, 2, 64, 0,184, 0, 16, 1, 72, 0,192, 2, 24, 1, 32, 0,232, 0, 32, 0, 32, 0, 48, 2, + 16, 1, 16, 0,160, 20, 56, 0, 64, 11, 32, 0, 40, 0, 80, 1, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,184, 0, 0, 0, + 24, 1, 0, 0, 40, 0, 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 72, 1, 0, 0, 32, 0, 12, 0, + 24, 0, 48, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 80, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, + 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 32, 0, 20, 0, + 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 64, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 40, 0, + 0, 0, 88, 0,208, 0, 40, 0, 24, 1,160, 0,232, 1,120, 0,248, 0, 88, 0, 56, 0, 80, 0,128, 0, 80, 0,112, 0, 56, 0, + 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 28, 0, 28, 0, 28, 0, 56, 0, + 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0, 0, 1, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, + 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, 72, 0, 24, 0, 56, 0, + 72, 0, 40, 0, 8, 1, 40, 2, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0,208, 0,224, 0, 72, 0, 0, 0, 0, 0, +104, 0, 0, 0,104, 0, 0, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0,104, 0, 32, 1, + 16, 0,104, 0, 0, 1, 40, 0,192, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 83, 84, 82, 67,100, 1, 0, 0, 10, 0, 2, 0, + 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, + 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, + 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, + 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, + 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, + 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, + 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, + 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, + 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, + 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, + 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, + 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, + 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, + 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, + 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, + 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, + 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, + 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, + 40, 0, 5, 0, 27, 0, 84, 0, 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, 0, 41, 0, 6, 0, 41, 0, 0, 0, + 41, 0, 1, 0, 0, 0, 88, 0, 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, 0, 42, 0, 0, 0, 42, 0, 1, 0, + 4, 0, 91, 0, 4, 0, 92, 0, 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, + 43, 0, 15, 0, 27, 0, 31, 0, 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, 0, 41, 0,100, 0, 41, 0,101, 0, + 4, 0,102, 0, 4, 0,103, 0, 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0,108, 0, 8, 0,109, 0, + 44, 0, 3, 0, 4, 0,110, 0, 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, + 2, 0, 19, 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, 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0, 7, 0,125, 0, 36, 0, 80, 0, + 40, 0,126, 0, 32, 0,127, 0, 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0, + 2, 0,133, 0, 2, 0, 19, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 2, 0,138, 0, 47, 0,139, 0, + 48, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, 0, 51, 0,143, 0, 2, 0,134, 0, + 2, 0, 19, 0, 2, 0,144, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, + 2, 0,148, 0, 2, 0,149, 0, 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, 0, 44, 0,154, 0, 30, 0,155, 0, + 0, 0,156, 0, 7, 0,157, 0, 4, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 7, 0,163, 0, + 7, 0,164, 0, 52, 0, 31, 0, 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 2, 0,168, 0, 32, 0,169, 0, 53, 0,170, 0, + 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 0, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, + 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 2, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, + 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0, 57, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, + 7, 0,194, 0, 54, 0, 15, 0, 0, 0,195, 0, 9, 0,196, 0, 0, 0,197, 0, 0, 0,198, 0, 4, 0,199, 0, 4, 0,200, 0, + 9, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 4, 0,205, 0, 9, 0,206, 0, 9, 0,207, 0, 4, 0,208, 0, + 4, 0, 37, 0, 55, 0, 6, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,209, 0, 7, 0, 67, 0, 4, 0, 64, 0, + 56, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,210, 0, 55, 0,204, 0, 57, 0, 17, 0, 32, 0,169, 0, + 48, 0,211, 0, 58, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,114, 0, 7, 0,115, 0, + 7, 0,216, 0, 4, 0,217, 0, 2, 0,218, 0, 2, 0,219, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,220, 0, 2, 0,221, 0, + 53, 0, 57, 0, 27, 0, 31, 0, 39, 0, 75, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, + 7, 0,227, 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, + 7, 0,235, 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0,242, 0, + 2, 0,243, 0, 2, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0,248, 0, 2, 0, 19, 0, 2, 0, 17, 0, + 2, 0,215, 0, 7, 0,249, 0, 7, 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,132, 0, 4, 0, 23, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0, 0, 1, 7, 0, 1, 1, 7, 0,191, 0, + 46, 0, 2, 1, 59, 0, 3, 1, 36, 0, 80, 0, 48, 0,211, 0, 54, 0, 4, 1, 56, 0, 5, 1, 57, 0, 6, 1, 30, 0,155, 0, + 0, 0, 7, 1, 0, 0, 8, 1, 60, 0, 8, 0, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0,177, 0, 4, 0, 19, 0, 7, 0, 11, 1, + 7, 0, 12, 1, 7, 0, 13, 1, 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 4, 0, 14, 1, 2, 0,179, 0, 2, 0, 15, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 16, 1, + 7, 0, 17, 1, 7, 0, 18, 1, 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, 62, 0, 27, 1, 2, 0, 28, 1, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0, 29, 1, + 7, 0, 30, 1, 7, 0, 31, 1, 2, 0, 32, 1, 2, 0, 33, 1, 2, 0, 34, 1, 2, 0, 35, 1, 0, 0, 36, 1, 0, 0, 37, 1, + 2, 0, 38, 1, 2, 0, 39, 1, 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, + 7, 0, 46, 1, 2, 0, 47, 1, 2, 0, 43, 0, 2, 0, 48, 1, 2, 0, 49, 1, 2, 0, 50, 1, 2, 0, 51, 1, 7, 0, 52, 1, + 7, 0, 53, 1, 7, 0, 54, 1, 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, + 7, 0, 61, 1, 7, 0, 62, 1, 7, 0, 63, 1, 2, 0, 64, 1, 2, 0, 65, 1, 4, 0, 66, 1, 4, 0, 67, 1, 2, 0, 68, 1, + 2, 0, 69, 1, 2, 0, 70, 1, 2, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 2, 0, 76, 1, + 2, 0, 77, 1, 52, 0, 78, 1, 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, + 64, 0,130, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 79, 1, 2, 0, 19, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, + 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, 7, 0, 87, 1, + 7, 0, 88, 1, 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, 7, 0,100, 1, 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, 0, 0,110, 1, 0, 0,111, 1, + 7, 0,112, 1, 7, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, + 2, 0,120, 1, 2, 0,121, 1, 4, 0, 14, 1, 4, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, + 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, + 7, 0,135, 1, 7, 0,136, 1, 0, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 4, 0,141, 1, 0, 0,142, 1, + 0, 0, 48, 1, 0, 0,143, 1, 0, 0, 7, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0, 65, 1, 2, 0,146, 1, 2, 0,147, 1, + 2, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 2, 0,165, 0, 2, 0,166, 0, + 56, 0,154, 1, 56, 0,155, 1, 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, 0, 0,159, 1, 2, 0,160, 1, 2, 0,161, 1, + 7, 0,162, 1, 7, 0,163, 1, 52, 0, 78, 1, 59, 0, 3, 1, 36, 0, 80, 0, 65, 0,164, 1, 30, 0,155, 0, 7, 0,165, 1, + 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 2, 0,170, 1, 2, 0, 70, 0, 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, 2, 0,180, 1, + 2, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, + 4, 0,189, 1, 40, 0,126, 0, 12, 0,190, 1, 66, 0, 4, 0, 27, 0, 31, 0, 0, 0,191, 1, 67, 0, 2, 0, 44, 0,154, 0, + 68, 0, 26, 0, 68, 0, 0, 0, 68, 0, 1, 0, 69, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, 4, 0,195, 1, 4, 0,196, 1, + 4, 0,197, 1, 4, 0,198, 1, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,199, 1, 2, 0,200, 1, 7, 0, 5, 0, 7, 0, 6, 0, + 7, 0, 7, 0, 7, 0,201, 1, 7, 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, 23, 0, 7, 0,208, 1, 7, 0,209, 1, 70, 0, 16, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0,210, 1, 12, 0,211, 1, + 12, 0,212, 1, 36, 0, 80, 0, 64, 0,213, 1, 2, 0, 19, 0, 2, 0,214, 1, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, + 7, 0, 10, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, + 7, 0,221, 1, 2, 0, 55, 0, 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 0, 0,226, 1, 0, 0,227, 1, + 34, 0, 7, 0, 7, 0,228, 1, 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, 7, 0,221, 1, 7, 0, 37, 0, + 71, 0, 21, 0, 71, 0, 0, 0, 71, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, 2, 0, 19, 0, 2, 0,230, 1, + 2, 0,231, 1, 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, + 7, 0,239, 1, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, 72, 0, 5, 0, 2, 0,243, 1, + 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, + 7, 0,244, 1, 74, 0, 62, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 0,192, 1, 12, 0,245, 1, 12, 0,211, 1, 12, 0,246, 1, + 32, 0,247, 1, 32, 0,248, 1, 32, 0,249, 1, 36, 0, 80, 0, 75, 0,250, 1, 38, 0,251, 1, 64, 0,213, 1, 12, 0,252, 1, + 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 4, 0,178, 0, 2, 0,253, 1, 2, 0,214, 1, 2, 0, 19, 0, 2, 0,254, 1, + 7, 0,255, 1, 7, 0, 0, 2, 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, + 34, 0, 5, 2, 2, 0, 23, 0, 2, 0, 99, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 16, 2, 0, 0, 17, 2, + 76, 0, 18, 2, 77, 0, 19, 2, 0, 0, 20, 2, 66, 0, 21, 2, 66, 0, 22, 2, 66, 0, 23, 2, 66, 0, 24, 2, 4, 0, 25, 2, + 7, 0, 26, 2, 4, 0, 27, 2, 4, 0, 28, 2, 73, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, 72, 0, 32, 2, 72, 0, 33, 2, + 78, 0, 39, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, 64, 0,213, 1, 79, 0, 35, 2, + 80, 0, 36, 2, 81, 0, 37, 2, 82, 0, 38, 2, 83, 0, 39, 2, 84, 0, 40, 2, 85, 0, 41, 2, 86, 0, 42, 2, 78, 0, 43, 2, + 87, 0, 44, 2, 88, 0, 45, 2, 89, 0, 46, 2, 89, 0, 47, 2, 89, 0, 48, 2, 4, 0, 54, 0, 4, 0, 49, 2, 4, 0, 50, 2, + 4, 0, 51, 2, 4, 0, 52, 2, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0, 53, 2, 4, 0, 54, 2, + 2, 0, 55, 2, 2, 0, 19, 0, 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,214, 1, 2, 0, 58, 2, 90, 0, 59, 2, 91, 0, 60, 2, + 81, 0, 8, 0, 9, 0, 61, 2, 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, + 2, 0, 66, 2, 79, 0, 7, 0, 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, 2, 0,229, 1, 0, 0, 71, 2, + 0, 0, 19, 0, 83, 0, 5, 0, 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, 2, 0, 19, 0, 92, 0, 2, 0, + 4, 0, 74, 2, 7, 0,220, 1, 84, 0, 3, 0, 92, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, 82, 0, 6, 0, 7, 0, 77, 2, + 2, 0, 78, 2, 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,184, 0, 85, 0, 4, 0, 0, 0,209, 0, 0, 0,185, 0, + 0, 0,186, 0, 0, 0,187, 0, 93, 0, 6, 0, 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, + 2, 0, 66, 2, 94, 0, 1, 0, 7, 0, 79, 2, 95, 0, 5, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, + 4, 0, 37, 0, 86, 0, 1, 0, 7, 0, 80, 2, 87, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, 80, 0, 7, 0, 7, 0, 62, 2, + 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 96, 0, 1, 0, 7, 0, 82, 2, + 97, 0, 1, 0, 4, 0, 83, 2, 98, 0, 1, 0, 0, 0, 84, 2, 99, 0, 1, 0, 7, 0, 62, 2,100, 0, 3, 0, 4, 0, 85, 2, + 0, 0, 96, 0, 7, 0, 86, 2,102, 0, 4, 0, 7, 0,209, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,103, 0, 1, 0, +102, 0, 63, 2,104, 0, 5, 0, 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, 0, 0,184, 0,105, 0, 2, 0, + 4, 0, 89, 2, 4, 0, 88, 2,106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 0, 90, 2,103, 0, 91, 2,105, 0, 92, 2, + 4, 0, 54, 0, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 37, 0, 82, 0, 93, 2, 90, 0, 14, 0, 12, 0, 94, 2, 82, 0, 93, 2, + 0, 0, 95, 2, 0, 0, 96, 2, 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, 0, 0,101, 2, 0, 0, 19, 0, + 89, 0, 46, 2, 89, 0, 48, 2, 2, 0,102, 2, 0, 0,103, 2, 91, 0, 8, 0, 4, 0,104, 2, 4, 0,105, 2, 79, 0,106, 2, + 83, 0,107, 2, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, 0,107, 0, 0, 0,107, 0, 1, 0, + 4, 0, 17, 0, 4, 0, 14, 1, 0, 0, 20, 0, 47, 0,139, 0, 0, 0,108, 2,108, 0, 7, 0,107, 0,109, 2, 2, 0,110, 2, + 2, 0, 94, 2, 2, 0,111, 2, 2, 0, 94, 0, 9, 0,112, 2, 9, 0,113, 2,109, 0, 3, 0,107, 0,109, 2, 32, 0,169, 0, + 0, 0, 20, 0,110, 0, 5, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0, 2, 0,114, 2, 0, 0,115, 2,111, 0, 5, 0, +107, 0,109, 2, 7, 0, 92, 0, 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,112, 0, 5, 0,107, 0,109, 2, 32, 0,119, 2, + 0, 0, 72, 0, 4, 0, 14, 1, 4, 0, 19, 0,113, 0, 13, 0,107, 0,109, 2, 32, 0,120, 2, 32, 0,121, 2, 32, 0,122, 2, + 32, 0,123, 2, 7, 0,124, 2, 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 4, 0, 94, 0, + 4, 0,129, 2,114, 0, 5, 0,107, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, 32, 0,132, 2,115, 0, 3, 0, +107, 0,109, 2, 7, 0,133, 2, 4, 0, 94, 0,116, 0, 10, 0,107, 0,109, 2, 7, 0,134, 2, 4, 0,135, 2, 4, 0, 37, 0, + 2, 0, 94, 0, 2, 0,136, 2, 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2,117, 0, 3, 0,107, 0,109, 2, + 7, 0, 37, 0, 4, 0, 17, 0,118, 0, 11, 0,107, 0,109, 2, 53, 0,141, 2, 7, 0,142, 2, 4, 0,143, 2, 0, 0,140, 2, + 7, 0,144, 2, 4, 0,145, 2, 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 10, 0,107, 0,109, 2, + 32, 0,149, 2, 48, 0,150, 2, 4, 0, 94, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, 0, 0,147, 2, 4, 0,148, 2, + 4, 0, 37, 0,120, 0, 3, 0,107, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,121, 0, 5, 0,107, 0,109, 2, 7, 0,156, 2, + 0, 0,140, 2, 2, 0, 19, 0, 2, 0,157, 2,122, 0, 8, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,156, 2, 7, 0,221, 1, + 7, 0,110, 0, 0, 0,140, 2, 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 0,109, 2, 32, 0,158, 2, 0, 0,140, 2, + 53, 0,141, 2, 32, 0,146, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, + 7, 0,162, 2, 7, 0,163, 2, 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, 0, 0,147, 2, 7, 0,166, 2, + 7, 0,167, 2, 7, 0, 43, 0,124, 0, 7, 0,107, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, 4, 0, 70, 0, 32, 0,169, 0, + 7, 0,170, 2, 0, 0,140, 2,125, 0, 9, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,171, 2, 7, 0,172, 2, 7, 0,165, 2, + 4, 0,173, 2, 4, 0,174, 2, 7, 0,175, 2, 0, 0, 20, 0,126, 0, 1, 0,107, 0,109, 2,127, 0, 6, 0,107, 0,109, 2, + 47, 0,139, 0,128, 0,176, 2,129, 0,177, 2,130, 0,178, 2,131, 0,179, 2,132, 0, 14, 0,107, 0,109, 2, 82, 0,180, 2, + 82, 0,181, 2, 82, 0,182, 2, 82, 0,183, 2, 82, 0,184, 2, 82, 0,185, 2, 79, 0,186, 2, 4, 0,187, 2, 4, 0,188, 2, + 2, 0,189, 2, 2, 0, 37, 0, 7, 0,190, 2,133, 0,191, 2,134, 0, 3, 0,107, 0,109, 2,135, 0,192, 2,136, 0,191, 2, +137, 0, 4, 0,107, 0,109, 2, 32, 0,169, 0, 4, 0,193, 2, 4, 0, 37, 0,138, 0, 2, 0, 4, 0,194, 2, 7, 0,220, 1, +139, 0, 2, 0, 4, 0,130, 0, 4, 0,195, 2,140, 0, 20, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0,140, 2, 2, 0,196, 2, + 2, 0,197, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,198, 2, 7, 0,199, 2, 4, 0, 54, 0, 4, 0,200, 2,139, 0,201, 2, +138, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 4, 0,205, 2, 4, 0,195, 2, 7, 0,206, 2, 7, 0,207, 2, 7, 0,208, 2, +141, 0, 8, 0,107, 0,109, 2,142, 0,209, 2,135, 0,192, 2, 4, 0,210, 2, 4, 0,211, 2, 4, 0,212, 2, 2, 0, 19, 0, + 2, 0, 57, 0,143, 0, 8, 0,107, 0,109, 2, 32, 0, 45, 0, 2, 0,213, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, + 7, 0,214, 2, 7, 0,215, 2,144, 0, 5, 0,107, 0,109, 2, 4, 0,216, 2, 2, 0, 19, 0, 2, 0,217, 2, 7, 0,218, 2, +145, 0, 7, 0,107, 0,109, 2, 82, 0,219, 2, 4, 0,220, 2, 0, 0,221, 2, 0, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2, +146, 0, 3, 0,107, 0,109, 2,147, 0,225, 2,131, 0,179, 2,148, 0, 10, 0,107, 0,109, 2, 32, 0,226, 2, 32, 0,227, 2, + 0, 0,228, 2, 7, 0,229, 2, 2, 0,230, 2, 2, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 0, 0,115, 2,149, 0, 9, 0, +107, 0,109, 2, 32, 0,234, 2, 0, 0,228, 2, 7, 0,235, 2, 7, 0,236, 2, 0, 0, 14, 1, 0, 0,130, 2, 0, 0,237, 2, + 0, 0, 37, 0,150, 0, 27, 0, 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,238, 2, 2, 0, 19, 0, 2, 0,239, 2, + 2, 0,240, 2, 2, 0,241, 2, 2, 0, 70, 0, 0, 0,242, 2, 0, 0,243, 2, 0, 0,244, 2, 0, 0, 17, 0, 4, 0, 37, 0, + 7, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 34, 0,251, 2, 36, 0, 80, 0, + 38, 0,251, 1, 84, 0, 40, 2, 7, 0,252, 2, 7, 0,253, 2,150, 0,254, 2,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, + 0, 0, 20, 0, 69, 0, 3, 0, 7, 0,255, 2, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,112, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 2, 0, 17, 0, 2, 0, 0, 3, 4, 0, 1, 3, 4, 0, 2, 3, 4, 0, 3, 3, 0, 0, 4, 3, 32, 0, 38, 0, 32, 0, 5, 3, + 32, 0, 6, 3, 32, 0, 7, 3, 32, 0, 8, 3, 36, 0, 80, 0, 75, 0,250, 1, 69, 0,192, 1,152, 0, 9, 3,152, 0, 10, 3, +153, 0, 11, 3, 9, 0, 2, 0, 12, 0, 12, 3, 12, 0, 34, 2, 12, 0,211, 1, 12, 0, 13, 3, 12, 0, 14, 3, 64, 0,213, 1, + 0, 0, 15, 3, 4, 0,214, 1, 4, 0, 16, 3, 7, 0, 9, 1, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0,177, 0, 7, 0, 19, 3, + 7, 0, 10, 1, 7, 0, 20, 3, 7, 0, 21, 3, 7, 0,171, 2, 7, 0, 22, 3, 7, 0,213, 0, 4, 0, 23, 3, 2, 0, 19, 0, + 2, 0, 24, 3, 2, 0, 25, 3, 2, 0, 26, 3, 2, 0, 27, 3, 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, + 2, 0, 32, 3, 2, 0, 33, 3, 2, 0, 34, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 7, 0, 39, 3, + 7, 0, 26, 2, 7, 0, 40, 3, 7, 0, 41, 3, 7, 0, 42, 3, 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, + 7, 0, 47, 3, 7, 0, 48, 3, 7, 0, 49, 3, 0, 0, 50, 3, 0, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, + 7, 0, 55, 3, 40, 0,126, 0, 12, 0, 56, 3, 12, 0, 57, 3, 12, 0, 58, 3, 12, 0, 59, 3, 7, 0, 60, 3, 2, 0, 81, 2, + 2, 0, 61, 3, 7, 0, 63, 2, 4, 0, 62, 3, 4, 0, 63, 3,154, 0, 64, 3, 2, 0, 65, 3, 2, 0,220, 0, 7, 0, 66, 3, + 12, 0, 67, 3, 12, 0, 68, 3, 12, 0, 69, 3, 12, 0, 70, 3,155, 0, 71, 3,156, 0, 72, 3, 65, 0, 73, 3, 2, 0, 74, 3, + 2, 0, 75, 3, 2, 0, 76, 3, 2, 0, 77, 3, 7, 0, 55, 2, 2, 0, 78, 3, 2, 0, 79, 3,147, 0, 80, 3,135, 0, 81, 3, +135, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 4, 0, 85, 3, 4, 0, 70, 0, 12, 0, 86, 3,157, 0, 14, 0,157, 0, 0, 0, +157, 0, 1, 0, 32, 0, 38, 0, 7, 0,171, 2, 7, 0, 11, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, + 4, 0,174, 2, 4, 0, 87, 3, 2, 0, 17, 0, 2, 0, 88, 3, 7, 0,175, 2,155, 0, 36, 0, 2, 0, 89, 3, 2, 0, 90, 3, + 2, 0, 19, 0, 2, 0,165, 2, 7, 0, 91, 3, 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, + 7, 0, 97, 3, 7, 0, 98, 3, 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, + 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, + 7, 0,113, 3, 7, 0,114, 3, 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 53, 0,170, 0,158, 0,119, 3, + 7, 0,120, 3, 4, 0,118, 2,159, 0, 6, 0,159, 0, 0, 0,159, 0, 1, 0, 4, 0,121, 3, 4, 0,122, 3, 7, 0, 2, 0, + 9, 0,123, 3,131, 0, 12, 0, 4, 0, 19, 0, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, + 4, 0,129, 3, 4, 0,130, 3, 0, 0,131, 3, 0, 0,132, 3, 0, 0,133, 3, 12, 0,134, 3,160, 0, 1, 0, 7, 0,228, 1, +154, 0, 30, 0, 4, 0, 19, 0, 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3, 4, 0,138, 3, 4, 0,139, 3, 4, 0,140, 3, + 4, 0,141, 3, 7, 0,142, 3, 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, + 7, 0,149, 3, 7, 0,150, 3, 7, 0,151, 3, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, + 7, 0,157, 3, 7, 0,158, 3, 7, 0,159, 3, 4, 0,160, 3, 4, 0,161, 3, 7, 0,162, 3, 7, 0, 46, 3,156, 0, 44, 0, +142, 0,163, 3, 4, 0,122, 3, 4, 0,164, 3,161, 0,165, 3,162, 0,166, 3, 7, 0, 37, 0, 7, 0,167, 3, 7, 0,168, 3, + 7, 0,169, 3, 7, 0,170, 3, 7, 0,171, 3, 7, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, + 2, 0,177, 3, 2, 0,178, 3, 7, 0,179, 3, 7, 0,180, 3, 4, 0,131, 0, 4, 0,181, 3, 4, 0,182, 3, 2, 0,183, 3, + 2, 0,184, 3,160, 0,185, 3, 4, 0,186, 3, 4, 0, 82, 0, 7, 0,187, 3, 7, 0,188, 3, 7, 0,189, 3, 7, 0,190, 3, + 2, 0,191, 3, 2, 0,192, 3, 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3, 2, 0,197, 3, 2, 0,198, 3, +163, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3,131, 0,202, 3,147, 0, 48, 0, 2, 0, 17, 0, 2, 0,203, 3, 2, 0,204, 3, + 2, 0,205, 3, 7, 0,206, 3, 2, 0,207, 3, 2, 0,208, 3, 7, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 7, 0,212, 3, + 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 4, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, + 7, 0,221, 3, 78, 0,222, 3, 78, 0,223, 3, 78, 0,224, 3, 0, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 36, 0, 80, 0, + 2, 0,228, 3, 0, 0,229, 3, 0, 0,230, 3, 7, 0,231, 3, 4, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 4, 0,235, 3, + 4, 0, 19, 0, 7, 0,236, 3, 7, 0,237, 3, 7, 0,238, 3, 82, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, + 7, 0,243, 3, 7, 0,244, 3, 7, 0,245, 3, 7, 0,246, 3, 4, 0,247, 3,164, 0, 72, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 2, 0,179, 0, 2, 0, 15, 1, 2, 0, 48, 1, 2, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, + 7, 0,253, 3, 7, 0,254, 3, 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 86, 1, 7, 0, 88, 1, 7, 0, 87, 1, 7, 0, 1, 4, + 4, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, + 2, 0, 10, 4, 2, 0, 14, 1, 2, 0, 11, 4, 2, 0, 12, 4, 2, 0, 13, 4, 2, 0, 14, 4, 2, 0, 15, 4, 2, 0, 16, 4, + 7, 0, 17, 4, 7, 0, 18, 4, 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, + 7, 0, 25, 4, 7, 0, 26, 4, 7, 0, 27, 4, 7, 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, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 2, 0, 40, 4, + 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 19, 0, + 7, 0, 48, 4, 7, 0, 49, 4, 36, 0, 80, 0, 52, 0, 78, 1, 30, 0,155, 0, 40, 0,126, 0,165, 0, 8, 0,165, 0, 0, 0, +165, 0, 1, 0, 4, 0, 23, 3, 4, 0, 50, 4, 4, 0, 19, 0, 2, 0, 51, 4, 2, 0, 52, 4, 32, 0,169, 0,166, 0, 13, 0, + 9, 0, 53, 4, 9, 0, 54, 4, 4, 0, 55, 4, 4, 0, 56, 4, 4, 0, 57, 4, 4, 0, 58, 4, 4, 0, 59, 4, 4, 0, 60, 4, + 4, 0, 61, 4, 4, 0, 62, 4, 4, 0, 63, 4, 4, 0, 37, 0, 0, 0, 64, 4,167, 0, 5, 0, 9, 0, 65, 4, 9, 0, 66, 4, + 4, 0, 67, 4, 4, 0, 70, 0, 0, 0, 68, 4,168, 0, 13, 0, 4, 0, 17, 0, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, + 4, 0, 72, 4, 4, 0, 73, 4, 4, 0, 94, 0, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, + 26, 0, 30, 0,169, 0, 4, 0, 4, 0, 79, 4, 7, 0, 80, 4, 2, 0, 19, 0, 2, 0, 81, 4,170, 0, 11, 0,170, 0, 0, 0, +170, 0, 1, 0, 0, 0, 20, 0, 64, 0, 82, 4, 65, 0, 83, 4, 4, 0, 23, 3, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 37, 0, + 4, 0, 86, 4, 4, 0, 87, 4,171, 0,131, 0,166, 0, 88, 4,167, 0, 89, 4,168, 0, 90, 4,169, 0, 91, 4, 4, 0, 92, 4, + 4, 0,131, 0, 4, 0,181, 3, 4, 0, 93, 4, 4, 0, 94, 4, 4, 0, 95, 4, 4, 0, 96, 4, 2, 0, 19, 0, 2, 0, 97, 4, + 7, 0, 26, 2, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 2, 0,103, 4, 2, 0,104, 4, + 2, 0,105, 4, 2, 0,106, 4, 2, 0,219, 0, 2, 0,107, 4, 2, 0,108, 4, 2, 0,118, 3, 2, 0,109, 4, 2, 0,110, 4, + 2, 0, 35, 1, 2, 0,110, 0, 2, 0,111, 4, 2, 0,112, 4, 2, 0,113, 4, 2, 0,114, 4, 2, 0,115, 4, 2, 0,116, 4, + 2, 0,117, 4, 2, 0,118, 4, 2, 0,119, 4, 2, 0, 36, 1, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, + 4, 0,124, 4, 4, 0, 14, 1, 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, + 24, 0,131, 4, 24, 0,132, 4, 23, 0,133, 4, 12, 0,134, 4, 2, 0,135, 4, 2, 0, 37, 0, 7, 0,136, 4, 7, 0,137, 4, + 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 2, 0,145, 4, + 2, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, + 2, 0,154, 4, 2, 0,155, 4, 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, + 2, 0,162, 4, 2, 0,163, 4, 4, 0,164, 4, 4, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 7, 0,169, 4, + 4, 0,170, 4, 4, 0,171, 4, 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, + 7, 0,178, 4, 7, 0,179, 4, 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 0, 0,183, 4, 0, 0,184, 4, 4, 0,185, 4, + 2, 0,186, 4, 2, 0,161, 1, 0, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 7, 0,192, 4, + 7, 0,193, 4, 2, 0,194, 4, 2, 0,195, 4, 7, 0,196, 4, 2, 0,197, 4, 2, 0,198, 4, 4, 0,199, 4, 2, 0,200, 4, + 2, 0,201, 4, 2, 0,202, 4, 2, 0,203, 4, 7, 0,204, 4, 7, 0, 70, 0, 43, 0,205, 4,172, 0, 9, 0,172, 0, 0, 0, +172, 0, 1, 0, 0, 0, 20, 0, 2, 0,206, 4, 2, 0,207, 4, 2, 0,208, 4, 2, 0, 43, 0, 7, 0,209, 4, 7, 0, 70, 0, +173, 0, 5, 0, 7, 0,210, 4, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,161, 1,174, 0, 5, 0,174, 0, 0, 0, +174, 0, 1, 0, 4, 0,121, 3, 0, 0,131, 3, 4, 0, 19, 0,175, 0, 6, 0,176, 0,211, 4, 2, 0, 19, 0, 2, 0,212, 4, + 2, 0,213, 4, 2, 0,214, 4, 9, 0,215, 4,177, 0, 4, 0, 2, 0,110, 0, 2, 0,142, 2, 2, 0,124, 3, 2, 0,216, 4, +178, 0, 10, 0, 2, 0, 19, 0, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4,177, 0,220, 4, 9, 0,215, 4, 7, 0,221, 4, + 4, 0,222, 4, 4, 0,223, 4, 4, 0, 37, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 0,224, 4, 7, 0,225, 4, +180, 0, 8, 0,181, 0,226, 4,176, 0,211, 4, 7, 0,227, 4, 4, 0, 94, 0, 0, 0,228, 4, 0, 0,229, 4, 0, 0,230, 4, + 0, 0,231, 4,182, 0, 9, 0,176, 0,211, 4, 7, 0,232, 4, 7, 0,233, 4, 2, 0, 14, 1, 2, 0, 19, 0, 4, 0, 36, 0, + 4, 0,234, 4, 84, 0,235, 4, 9, 0,215, 4,183, 0, 72, 0,182, 0,236, 4,182, 0,237, 4,180, 0,238, 4, 7, 0,239, 4, + 2, 0,240, 4, 2, 0,241, 4, 7, 0,242, 4, 7, 0,243, 4, 2, 0,124, 3, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, + 7, 0,247, 4, 2, 0,248, 4, 2, 0,223, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, + 7, 0,254, 4, 7, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, + 2, 0, 6, 5,175, 0, 7, 5,178, 0, 8, 5, 7, 0, 9, 5, 7, 0, 10, 5, 7, 0, 11, 5, 2, 0, 12, 5, 2, 0, 70, 0, + 0, 0, 13, 5, 0, 0, 14, 5, 0, 0, 15, 5, 0, 0, 16, 5, 0, 0, 17, 5, 0, 0, 18, 5, 2, 0, 19, 5, 7, 0, 20, 5, + 7, 0, 21, 5, 7, 0, 22, 5, 7, 0, 23, 5, 7, 0, 24, 5, 7, 0, 25, 5, 7, 0, 26, 5, 7, 0, 27, 5, 7, 0, 28, 5, + 7, 0, 29, 5, 2, 0, 30, 5, 0, 0, 31, 5, 0, 0, 32, 5, 0, 0, 33, 5, 0, 0, 34, 5, 32, 0, 35, 5, 0, 0, 36, 5, + 0, 0, 37, 5, 0, 0, 38, 5, 0, 0, 39, 5, 0, 0, 40, 5, 0, 0, 41, 5, 0, 0, 42, 5, 0, 0, 43, 5, 2, 0, 44, 5, + 2, 0, 45, 5, 2, 0, 46, 5, 2, 0, 47, 5, 2, 0, 48, 5,184, 0, 8, 0, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, + 4, 0, 52, 5, 4, 0, 53, 5, 4, 0, 54, 5, 4, 0, 54, 0, 4, 0, 50, 2, 47, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 32, 0, 55, 5,164, 0, 56, 5, 47, 0, 57, 5, 48, 0,211, 0, 12, 0, 58, 5,165, 0, 59, 5, 32, 0, 60, 5, 7, 0, 61, 5, + 7, 0, 62, 5, 7, 0, 63, 5, 7, 0, 64, 5, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 7, 1, 59, 0, 3, 1,185, 0, 65, 5, +173, 0, 66, 5,183, 0, 67, 5,186, 0, 68, 5,171, 0,185, 0,169, 0, 91, 4, 40, 0,126, 0, 12, 0,104, 0, 12, 0, 69, 5, +187, 0, 70, 5, 2, 0, 71, 5, 2, 0, 72, 5, 2, 0,220, 0, 2, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 12, 0, 76, 5, +188, 0, 6, 0, 48, 0,211, 0, 46, 0, 2, 1, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,110, 0, 7, 0, 77, 5,189, 0, 35, 0, + 7, 0, 78, 5, 7, 0, 79, 5, 7, 0, 80, 5, 7, 0, 81, 5, 7, 0, 82, 5, 7, 0, 83, 5, 7, 0, 84, 5, 7, 0, 85, 5, + 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 87, 5, 7, 0, 88, 5, 7, 0, 89, 5, 7, 0, 90, 5, 7, 0,176, 0, 2, 0, 91, 5, + 2, 0, 92, 5, 4, 0, 93, 5, 2, 0, 94, 5, 2, 0, 95, 5, 2, 0, 96, 5, 2, 0, 97, 5, 7, 0, 98, 5, 69, 0, 99, 5, +190, 0,100, 5,189, 0,101, 5,191, 0,102, 5,192, 0,103, 5,193, 0,104, 5,194, 0,105, 5,195, 0,106, 5, 7, 0,107, 5, + 2, 0,108, 5, 2, 0,109, 5, 4, 0,161, 1,196, 0, 54, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5, 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 43, 0, 4, 0,114, 5, 2, 0, 96, 5, 2, 0, 97, 5, + 32, 0, 55, 5, 32, 0,115, 5,188, 0,116, 5,196, 0,101, 5, 0, 0,117, 5, 4, 0, 23, 3, 4, 0,118, 5, 2, 0,119, 5, + 2, 0,120, 5, 2, 0,121, 5, 2, 0,122, 5, 2, 0,161, 1, 2, 0, 19, 0, 2, 0,123, 5, 2, 0,124, 5, 7, 0,116, 0, + 7, 0,125, 5, 7, 0,126, 5, 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,176, 0, 7, 0, 61, 5, 2, 0,130, 5, + 2, 0, 65, 1, 2, 0,131, 5, 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, + 2, 0,138, 5, 4, 0,139, 5, 12, 0,140, 5, 2, 0,141, 5, 2, 0, 64, 2, 2, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, + 9, 0,145, 5,190, 0,100, 5,198, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,146, 5, 23, 0,147, 5, 23, 0,148, 5, + 7, 0,149, 5, 7, 0,150, 5, 7, 0,151, 5, 7, 0,152, 5, 2, 0,153, 5, 2, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, + 2, 0,157, 5, 2, 0, 19, 0, 2, 0,158, 5, 2, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 2, 0,162, 5, 2, 0,122, 5, + 7, 0,163, 5,197, 0, 6, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, +199, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,200, 0,164, 5, + 47, 0,139, 0,201, 0, 14, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, +198, 0,165, 5,202, 0,166, 5, 12, 0,167, 5, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5, +203, 0, 31, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,191, 0,102, 5, + 2, 0,171, 5, 2, 0,172, 5, 2, 0,158, 5, 2, 0,173, 5,198, 0,165, 5, 2, 0,174, 5, 2, 0,138, 0, 2, 0,169, 5, + 2, 0,175, 5, 9, 0,176, 5, 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0, 32, 3, + 2, 0,182, 5, 2, 0,183, 5, 0, 0, 19, 0, 0, 0, 48, 1, 9, 0,250, 1, 4, 0,184, 5, 4, 0,185, 5, 27, 0,186, 5, +204, 0, 16, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, + 7, 0, 14, 2, 7, 0, 15, 2, 2, 0,174, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 4, 0, 19, 0, 7, 0,190, 5, +190, 0,100, 5,205, 0, 15, 0, 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 19, 0, 2, 0,194, 5, 2, 0,195, 5, + 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, 4, 0,197, 5, 4, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, 0, 0,201, 5, + 0, 0,202, 5,206, 0, 12, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 4, 0, 37, 0,205, 0,203, 5, +207, 0,204, 5, 12, 0,205, 5, 12, 0,206, 5,208, 0,207, 5,195, 0,208, 5,209, 0,209, 5,210, 0, 17, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 12, 0,210, 5,211, 0,211, 5, + 0, 0,212, 5,212, 0,213, 5, 4, 0,214, 5, 4, 0,215, 5, 2, 0, 19, 0, 2, 0,216, 5, 2, 0,217, 5, 2, 0, 37, 0, +213, 0, 29, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 48, 0,150, 2, + 46, 0, 2, 1, 62, 0,218, 5, 2, 0,138, 0, 2, 0,219, 5, 2, 0, 70, 0, 2, 0,220, 5, 4, 0, 19, 0, 2, 0,221, 5, + 2, 0,170, 5, 2, 0,169, 5, 2, 0,161, 1, 0, 0,222, 5, 0, 0,223, 5, 0, 0,224, 5, 0, 0,122, 5, 7, 0, 14, 2, + 7, 0, 15, 2, 7, 0,190, 5, 7, 0, 65, 1, 7, 0,225, 5, 7, 0,226, 5,190, 0,100, 5,214, 0, 11, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0,168, 5, 2, 0, 19, 0, 4, 0, 37, 0, +202, 0,166, 5,198, 0,165, 5,215, 0, 27, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, + 2, 0,113, 5, 43, 0,227, 5, 4, 0,228, 5, 4, 0,229, 5, 2, 0, 94, 0, 2, 0,138, 0, 2, 0,230, 5, 0, 0,231, 5, + 0, 0,232, 5, 4, 0,233, 5, 4, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 2, 0,237, 5, 2, 0,238, 5, 7, 0,239, 5, + 23, 0,240, 5, 23, 0,241, 5, 4, 0,242, 5, 4, 0,243, 5, 0, 0,244, 5, 0, 0,245, 5,216, 0, 10, 0, 27, 0, 31, 0, + 9, 0,246, 5, 9, 0,247, 5, 9, 0,248, 5, 9, 0,249, 5, 9, 0,250, 5, 4, 0, 94, 0, 4, 0,251, 5, 0, 0,252, 5, + 0, 0,253, 5,217, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,216, 0,254, 5, + 2, 0, 94, 0, 2, 0,138, 0, 4, 0, 43, 0, 9, 0,255, 5,218, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, + 4, 0,111, 5, 7, 0,112, 5,198, 0,165, 5, 4, 0, 19, 0, 4, 0, 0, 6,219, 0, 23, 0,197, 0, 0, 0,197, 0, 1, 0, + 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 27, 0, 1, 6, 27, 0, 81, 0, 2, 0, 19, 0, + 2, 0,138, 0, 7, 0, 2, 6, 9, 0, 3, 6, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 4, 6, 7, 0, 5, 6, 59, 0, 3, 1, + 59, 0, 6, 6, 4, 0, 7, 6, 2, 0,178, 5, 2, 0, 37, 0,190, 0,100, 5,220, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, + 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0, 19, 0, 2, 0, 32, 3, 4, 0, 37, 0,190, 0,100, 5, +221, 0, 42, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, +207, 0,204, 5, 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 17, 0, 2, 0,200, 5, 2, 0, 19, 0, 2, 0,194, 5, + 9, 0, 3, 6, 4, 0,197, 5, 4, 0, 8, 6, 4, 0, 9, 6, 4, 0,198, 5, 23, 0, 10, 6, 23, 0, 11, 6, 7, 0, 12, 6, + 7, 0, 13, 6, 7, 0, 14, 6, 7, 0, 2, 6, 2, 0, 15, 6, 2, 0,210, 0, 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, + 2, 0, 43, 0, 2, 0, 16, 6, 2, 0, 17, 6, 9, 0, 18, 6, 9, 0, 19, 6, 9, 0, 20, 6, 9, 0, 21, 6, 9, 0, 22, 6, + 2, 0, 23, 6, 0, 0,202, 5, 58, 0, 24, 6,222, 0, 7, 0,222, 0, 0, 0,222, 0, 1, 0, 0, 0, 25, 6, 2, 0, 26, 6, + 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 37, 0,223, 0, 12, 0, 2, 0, 27, 6, 2, 0, 29, 6, 2, 0, 30, 6, 0, 0,115, 2, + 2, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 35, 6, 2, 0,158, 5, 7, 0, 36, 6, 7, 0, 37, 6, +224, 0, 18, 0,224, 0, 0, 0,224, 0, 1, 0, 0, 0,131, 3,223, 0, 38, 6,223, 0, 39, 6,223, 0, 40, 6,223, 0, 41, 6, + 7, 0, 42, 6, 2, 0, 43, 6, 2, 0, 44, 6, 2, 0, 45, 6, 2, 0, 46, 6, 2, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, + 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 52, 6,225, 0, 10, 0, 0, 0, 53, 6, 0, 0, 54, 6, 0, 0, 55, 6, 0, 0, 56, 6, + 0, 0, 57, 6, 0, 0, 58, 6, 2, 0, 59, 6, 2, 0, 60, 6, 2, 0, 61, 6, 2, 0, 37, 0,226, 0, 8, 0, 0, 0, 62, 6, + 0, 0, 63, 6, 0, 0, 64, 6, 0, 0, 65, 6, 0, 0, 66, 6, 0, 0, 67, 6, 7, 0, 77, 5, 7, 0, 37, 0,227, 0, 16, 0, +225, 0, 68, 6,225, 0, 69, 6,225, 0, 70, 6,225, 0, 71, 6,225, 0, 72, 6,225, 0, 73, 6,225, 0, 74, 6,225, 0, 75, 6, +225, 0, 76, 6,225, 0, 77, 6,225, 0, 78, 6,225, 0, 79, 6,225, 0, 80, 6,225, 0, 81, 6,226, 0, 82, 6, 0, 0, 83, 6, +228, 0, 71, 0, 0, 0, 84, 6, 0, 0, 85, 6, 0, 0, 57, 6, 0, 0, 86, 6, 0, 0, 87, 6, 0, 0, 88, 6, 0, 0, 89, 6, + 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 92, 6, 0, 0, 93, 6, 0, 0, 94, 6, 0, 0, 95, 6, 0, 0, 96, 6, 0, 0, 97, 6, + 0, 0, 98, 6, 0, 0, 99, 6, 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0,103, 6, 0, 0,104, 6, 0, 0,105, 6, + 0, 0,106, 6, 0, 0,107, 6, 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, + 0, 0,114, 6, 0, 0,115, 6, 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, + 0, 0,122, 6, 0, 0,123, 6, 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, + 0, 0,130, 6, 0, 0,131, 6, 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, + 0, 0,138, 6, 0, 0,139, 6, 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, + 0, 0,146, 6, 0, 0,147, 6, 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0, 96, 0, +229, 0, 5, 0, 0, 0,153, 6, 0, 0,108, 6, 0, 0,110, 6, 2, 0, 19, 0, 2, 0, 37, 0,230, 0, 21, 0,230, 0, 0, 0, +230, 0, 1, 0, 0, 0, 20, 0,227, 0,154, 6,228, 0,155, 6,228, 0,156, 6,228, 0,157, 6,228, 0,158, 6,228, 0,159, 6, +228, 0,160, 6,228, 0,161, 6,228, 0,162, 6,228, 0,163, 6,228, 0,164, 6,228, 0,165, 6,228, 0,166, 6,228, 0,167, 6, +228, 0,168, 6,228, 0,169, 6,228, 0,170, 6,229, 0,171, 6,231, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, + 7, 0,172, 6, 7, 0,228, 1,232, 0, 67, 0, 4, 0, 19, 0, 4, 0,173, 6, 4, 0,174, 6, 0, 0,175, 6, 0, 0,176, 6, + 0, 0,177, 6, 0, 0,178, 6, 0, 0,179, 6, 0, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, 0, 0,183, 6, 2, 0,184, 6, + 2, 0, 37, 0, 4, 0,185, 6, 4, 0,186, 6, 4, 0,187, 6, 4, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6, 4, 0,191, 6, + 4, 0, 43, 0, 4, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 12, 0,197, 6, 12, 0,198, 6, + 12, 0,199, 6, 2, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, 2, 0,203, 6, 2, 0,204, 6, 2, 0,205, 6, 2, 0,206, 6, + 2, 0,207, 6,231, 0,208, 6, 2, 0,209, 6, 2, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, + 2, 0,215, 6, 2, 0,216, 6, 4, 0,217, 6, 4, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, + 2, 0,223, 6, 2, 0,224, 6, 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, + 0, 0,231, 6, 0, 0,232, 6, 7, 0,233, 6, 2, 0, 12, 5, 2, 0,234, 6, 56, 0,235, 6,200, 0, 21, 0, 27, 0, 31, 0, + 12, 0,236, 6, 12, 0,237, 6, 12, 0,238, 6, 12, 0,110, 5, 47, 0,139, 0, 47, 0,239, 6, 2, 0,240, 6, 2, 0,241, 6, + 2, 0,242, 6, 2, 0,243, 6, 2, 0,244, 6, 2, 0,245, 6, 2, 0,246, 6, 2, 0, 37, 0, 2, 0,247, 6, 2, 0,248, 6, + 4, 0, 70, 0,195, 0,249, 6, 9, 0,250, 6, 2, 0,251, 6,233, 0, 5, 0,233, 0, 0, 0,233, 0, 1, 0,233, 0,252, 6, + 13, 0,253, 6, 4, 0, 19, 0,234, 0, 7, 0,234, 0, 0, 0,234, 0, 1, 0,233, 0,254, 6,233, 0,255, 6, 2, 0,132, 4, + 2, 0, 19, 0, 4, 0, 37, 0,235, 0, 23, 0,235, 0, 0, 0,235, 0, 1, 0,236, 0, 0, 7,237, 0,209, 5, 0, 0, 1, 7, + 0, 0, 2, 7, 0, 0, 3, 7, 2, 0, 4, 7, 2, 0, 5, 7, 2, 0, 6, 7, 2, 0, 7, 7, 2, 0, 8, 7, 2, 0, 37, 0, + 2, 0, 19, 0, 2, 0, 9, 7, 2, 0, 10, 7, 2, 0, 11, 7, 4, 0, 12, 7,235, 0, 13, 7, 9, 0, 14, 7, 4, 0, 15, 7, + 4, 0, 16, 7, 0, 0, 17, 7,238, 0, 2, 0,239, 0, 0, 7,237, 0,209, 5,240, 0, 2, 0,241, 0, 0, 7,237, 0,209, 5, +242, 0, 23, 0,242, 0, 0, 0,242, 0, 1, 0,233, 0,254, 6,233, 0,255, 6,233, 0, 18, 7,233, 0, 19, 7,200, 0, 20, 7, + 23, 0, 52, 0, 0, 0,111, 5, 0, 0, 21, 7, 2, 0,159, 5, 2, 0,160, 5, 2, 0, 22, 7, 2, 0, 37, 0, 2, 0,243, 6, + 2, 0, 23, 7, 2, 0, 19, 0, 40, 0,126, 0,243, 0, 0, 7, 12, 0, 24, 7, 12, 0,110, 5, 12, 0, 25, 7, 12, 0, 26, 7, +244, 0, 21, 0,244, 0, 0, 0,244, 0, 1, 0,198, 0,165, 5, 23, 0, 27, 7, 23, 0, 28, 7, 2, 0,159, 5, 2, 0,160, 5, + 2, 0, 29, 7, 2, 0, 30, 7, 2, 0, 31, 7, 2, 0, 19, 0, 7, 0, 10, 2, 2, 0,242, 6, 2, 0,246, 6, 4, 0, 43, 0, +245, 0, 0, 7, 12, 0, 32, 7, 12, 0, 33, 7, 12, 0, 25, 7, 0, 0, 34, 7, 9, 0, 35, 7,246, 0, 11, 0, 0, 0, 36, 7, + 2, 0, 37, 7, 2, 0, 38, 7, 2, 0, 39, 7, 2, 0, 40, 7, 2, 0,121, 4, 2, 0,116, 4,200, 0, 41, 7, 47, 0, 42, 7, + 4, 0, 43, 7, 4, 0, 44, 7,247, 0, 1, 0, 0, 0, 45, 7,248, 0, 8, 0, 58, 0, 46, 7, 58, 0, 47, 7,248, 0, 48, 7, +248, 0, 49, 7,248, 0, 50, 7, 2, 0,134, 0, 2, 0, 19, 0, 4, 0, 51, 7,249, 0, 4, 0, 4, 0,228, 5, 4, 0, 52, 7, + 4, 0,233, 5, 4, 0, 53, 7,250, 0, 2, 0, 4, 0, 54, 7, 4, 0, 55, 7,251, 0, 7, 0, 7, 0, 56, 7, 7, 0, 57, 7, + 7, 0, 58, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 3, 4, 7, 0, 59, 7,252, 0, 6, 0, 0, 0, 60, 7, 0, 0,193, 5, + 50, 0,142, 0, 2, 0,110, 0, 2, 0,120, 4, 4, 0, 37, 0,253, 0, 21, 0,253, 0, 0, 0,253, 0, 1, 0, 4, 0, 57, 0, + 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 61, 7, 4, 0, 62, 7, 4, 0, 63, 7,247, 0, 64, 7, 0, 0, 60, 7, 4, 0, 65, 7, + 4, 0, 66, 7,252, 0, 6, 3,249, 0, 67, 7,250, 0, 68, 7,251, 0, 69, 7,248, 0, 70, 7,248, 0, 71, 7,248, 0, 72, 7, + 58, 0, 73, 7, 58, 0, 74, 7,254, 0, 12, 0, 0, 0,191, 1, 9, 0,196, 0, 0, 0,197, 0, 4, 0,200, 0, 4, 0,208, 0, + 9, 0,201, 0, 7, 0,203, 0, 7, 0,204, 0, 9, 0, 75, 7, 9, 0, 76, 7, 9, 0,205, 0, 9, 0,207, 0,255, 0, 43, 0, +255, 0, 0, 0,255, 0, 1, 0, 9, 0, 77, 7, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, + 4, 0, 92, 0, 4, 0, 78, 7, 4, 0, 79, 7, 4, 0, 62, 7, 4, 0, 63, 7, 4, 0, 80, 7, 4, 0,219, 0, 4, 0, 81, 7, + 4, 0, 82, 7, 7, 0,233, 4, 7, 0, 83, 7, 4, 0,131, 0, 4, 0, 84, 7,253, 0, 85, 7, 36, 0, 80, 0, 47, 0,139, 0, + 50, 0,142, 0, 7, 0, 86, 7, 7, 0, 87, 7,254, 0, 4, 1,255, 0, 88, 7,255, 0, 89, 7,255, 0, 90, 7, 12, 0, 91, 7, + 0, 1, 92, 7, 1, 1, 93, 7, 7, 0, 94, 7, 7, 0, 95, 7, 4, 0, 96, 7, 7, 0, 97, 7, 9, 0, 98, 7, 4, 0, 99, 7, + 4, 0,100, 7, 4, 0,101, 7, 7, 0,102, 7, 2, 1, 4, 0, 2, 1, 0, 0, 2, 1, 1, 0, 12, 0,103, 7,255, 0,104, 7, +185, 0, 6, 0, 12, 0,105, 7, 12, 0, 91, 7, 12, 0,106, 7,255, 0,107, 7, 0, 0,108, 7, 0, 0,109, 7, 3, 1, 4, 0, + 7, 0,110, 7, 7, 0,113, 0, 2, 0,111, 7, 2, 0,112, 7, 4, 1, 6, 0, 7, 0,113, 7, 7, 0,114, 7, 7, 0,115, 7, + 7, 0,116, 7, 4, 0,117, 7, 4, 0,118, 7, 5, 1, 12, 0, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 7, 0,122, 7, + 7, 0,123, 7, 7, 0,124, 7, 7, 0,125, 7, 7, 0,126, 7, 7, 0,127, 7, 7, 0,128, 7, 4, 0,154, 2, 4, 0,129, 7, + 6, 1, 2, 0, 7, 0,210, 4, 7, 0, 37, 0, 7, 1, 5, 0, 7, 0,130, 7, 7, 0,131, 7, 4, 0, 94, 0, 4, 0,116, 2, + 4, 0,132, 7, 8, 1, 6, 0, 8, 1, 0, 0, 8, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0, 57, 0, + 9, 1, 8, 0, 9, 1, 0, 0, 9, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0, 57, 0, 7, 0, 23, 0, + 7, 0,131, 0, 10, 1, 45, 0, 10, 1, 0, 0, 10, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0,215, 0, + 2, 0,177, 3, 2, 0,134, 7, 7, 0,135, 7, 7, 0, 93, 0, 7, 0,167, 2, 4, 0,136, 7, 4, 0, 82, 0, 4, 0,118, 2, + 7, 0,137, 7, 7, 0,138, 7, 7, 0,139, 7, 7, 0,140, 7, 7, 0,141, 7, 7, 0,142, 7, 7, 0,164, 2, 7, 0, 1, 1, + 7, 0,143, 7, 7, 0,144, 7, 7, 0, 37, 0, 7, 0,145, 7, 7, 0,146, 7, 7, 0,147, 7, 2, 0,148, 7, 2, 0,149, 7, + 2, 0,150, 7, 2, 0,151, 7, 2, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,123, 5, 2, 0,156, 7, + 2, 0,211, 1, 2, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, 7, 0,213, 0, 11, 1,160, 7, 65, 0,164, 1, 12, 1, 16, 0, + 12, 1, 0, 0, 12, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0,215, 0, 7, 0,159, 2, 7, 0,160, 2, + 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, 7, 0,161, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2, +212, 0, 5, 0, 2, 0, 17, 0, 2, 0, 51, 7, 2, 0, 19, 0, 2, 0,162, 7, 27, 0, 1, 6,211, 0, 3, 0, 4, 0, 69, 0, + 4, 0,163, 7,212, 0, 2, 0, 13, 1, 11, 0, 13, 1, 0, 0, 13, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0,164, 7, + 4, 0, 22, 0, 4, 0,165, 7, 2, 0, 19, 0, 2, 0, 37, 0, 9, 0,166, 7, 9, 0,167, 7, 14, 1, 5, 0, 0, 0, 20, 0, + 7, 0, 21, 1, 7, 0,168, 7, 4, 0,169, 7, 4, 0, 37, 0, 15, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, + 2, 0, 70, 0, 16, 1, 4, 0, 0, 0, 20, 0, 64, 0,170, 7, 7, 0, 21, 1, 7, 0, 37, 0, 17, 1, 6, 0, 2, 0,171, 7, + 2, 0,172, 7, 2, 0, 17, 0, 2, 0,173, 7, 0, 0,174, 7, 0, 0,175, 7, 18, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, + 0, 0, 20, 0, 0, 0,176, 7, 0, 0,177, 7, 19, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 20, 1, 4, 0, + 2, 0,178, 7, 2, 0,179, 7, 2, 0, 19, 0, 2, 0, 37, 0, 21, 1, 6, 0, 0, 0, 20, 0, 0, 0,180, 7, 2, 0,181, 7, + 2, 0,164, 2, 2, 0, 14, 1, 2, 0, 70, 0, 22, 1, 5, 0, 0, 0, 20, 0, 7, 0,113, 0, 7, 0, 5, 4, 2, 0, 19, 0, + 2, 0,130, 2, 23, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, 4, 0,178, 7, 24, 1, 7, 0, 0, 0, 20, 0, 7, 0, 5, 4, + 0, 0,182, 7, 0, 0,183, 7, 2, 0, 14, 1, 2, 0, 43, 0, 4, 0,184, 7, 25, 1, 3, 0, 32, 0,185, 7, 0, 0,186, 7, + 0, 0,187, 7, 26, 1, 18, 0, 26, 1, 0, 0, 26, 1, 1, 0, 2, 0, 17, 0, 2, 0,164, 7, 2, 0, 19, 0, 2, 0,188, 7, + 2, 0,189, 7, 2, 0,190, 7, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, 27, 1,191, 7, 32, 0, 45, 0, + 2, 0,216, 4, 2, 0, 94, 7, 2, 0,192, 7, 2, 0, 37, 0, 28, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,193, 7, + 2, 0, 19, 0, 2, 0,130, 2, 2, 0,194, 7, 4, 0,195, 7, 4, 0,196, 7, 4, 0,197, 7, 4, 0,198, 7, 4, 0,199, 7, + 29, 1, 1, 0, 0, 0,200, 7, 30, 1, 4, 0, 43, 0,227, 5, 0, 0,201, 7, 4, 0, 14, 1, 4, 0, 19, 0, 27, 1, 18, 0, + 27, 1, 0, 0, 27, 1, 1, 0, 27, 1,202, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,203, 7, 2, 0,190, 7, 2, 0,164, 7, + 2, 0,204, 7, 2, 0, 70, 0, 2, 0,161, 1, 0, 0, 20, 0, 9, 0, 2, 0, 31, 1,191, 7, 26, 1,205, 7, 2, 0, 15, 0, + 2, 0,206, 7, 4, 0,207, 7, 32, 1, 3, 0, 4, 0,190, 2, 4, 0, 37, 0, 32, 0, 45, 0, 33, 1, 12, 0,152, 0,208, 7, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,135, 7, 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,209, 7, 2, 0,210, 7, 2, 0,211, 7, + 2, 0,212, 7, 2, 0,213, 7, 7, 0,214, 7, 34, 1, 10, 0, 2, 0, 19, 0, 2, 0,215, 7, 4, 0,135, 7, 4, 0, 93, 0, + 2, 0,216, 7, 0, 1, 92, 7, 2, 0, 17, 0, 2, 0,217, 7, 2, 0,218, 7, 2, 0,219, 7, 35, 1, 7, 0, 2, 0, 19, 0, + 2, 0,215, 7, 4, 0,135, 7, 4, 0, 93, 0, 2, 0, 17, 0, 2, 0,220, 7, 7, 0,137, 3, 36, 1, 11, 0, 4, 0,190, 2, + 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 0,221, 7, 0, 0, 20, 0, 7, 0,222, 7, 7, 0,223, 7, 7, 0, 40, 3, + 2, 0,224, 7, 2, 0,225, 7, 37, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 0, 55, 5, + 38, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0,176, 7, 32, 0, 45, 0, 39, 1, 13, 0, 2, 0, 19, 0, + 2, 0, 17, 0, 2, 0,164, 7, 2, 0, 41, 3, 7, 0,226, 7, 7, 0,227, 7, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0, 17, 3, + 7, 0, 20, 3, 7, 0,228, 7, 7, 0,229, 7, 32, 0,230, 7, 40, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,135, 7, + 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,209, 7, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,231, 7, 2, 0,232, 7, 41, 1, 8, 0, + 32, 0, 45, 0, 7, 0,161, 2, 7, 0,233, 7, 7, 0,234, 7, 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,235, 7, + 42, 1, 12, 0, 2, 0, 17, 0, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,164, 2, 2, 0,190, 2, 2, 0,236, 7, 4, 0, 37, 0, + 7, 0,237, 7, 7, 0,238, 7, 7, 0,239, 7, 7, 0,240, 7, 0, 0,241, 7, 43, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, + 4, 0,135, 7, 4, 0, 93, 0, 0, 0, 20, 0, 2, 0, 81, 4, 2, 0, 64, 0, 2, 0,231, 7, 2, 0,232, 7, 65, 0,164, 1, + 44, 1, 7, 0, 4, 0,118, 2, 4, 0,242, 7, 4, 0,243, 7, 4, 0,244, 7, 7, 0,245, 7, 7, 0,246, 7, 0, 0,182, 7, + 45, 1, 7, 0, 0, 0,247, 7, 32, 0,248, 7, 0, 0,186, 7, 2, 0,249, 7, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,187, 7, + 46, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,135, 7, 4, 0, 93, 0, 0, 0,250, 7, 0, 0,251, 7, 47, 1, 1, 0, + 4, 0, 19, 0, 48, 1, 6, 0, 0, 0, 96, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,252, 7, 7, 0,253, 7, 43, 0,227, 5, + 49, 1, 4, 0, 0, 0,184, 0, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 45, 0, 50, 1, 2, 0, 4, 0, 17, 0, 4, 0,148, 5, + 31, 1, 10, 0, 31, 1, 0, 0, 31, 1, 1, 0, 31, 1,202, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,164, 7, 2, 0,254, 7, + 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 51, 1, 10, 0, 7, 0, 40, 3, 7, 0,255, 7, 7, 0, 0, 8, 7, 0, 1, 8, + 7, 0, 2, 8, 4, 0, 19, 0, 7, 0,236, 7, 7, 0, 3, 8, 7, 0, 4, 8, 7, 0, 37, 0, 0, 1, 20, 0, 27, 0, 31, 0, + 0, 0,195, 0, 52, 1, 5, 8, 9, 0, 6, 8, 44, 0,154, 0, 44, 0, 7, 8, 9, 0, 8, 8, 36, 0, 80, 0, 7, 0,137, 3, + 7, 0, 9, 8, 7, 0, 10, 8, 7, 0, 11, 8, 7, 0, 12, 8, 7, 0, 13, 8, 7, 0, 14, 8, 4, 0, 94, 0, 4, 0, 15, 8, + 0, 0, 16, 8, 0, 0, 17, 8, 0, 0, 18, 8, 53, 1, 6, 0, 27, 0, 31, 0, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 21, 8, + 2, 0, 22, 8, 2, 0, 23, 8, 54, 1, 15, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, +242, 0, 24, 8,198, 0,165, 5, 0, 1, 92, 7, 2, 0, 14, 1, 2, 0,215, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, + 2, 0,170, 5, 4, 0, 70, 0, 55, 1, 6, 0, 55, 1, 0, 0, 55, 1, 1, 0, 32, 0, 45, 0, 9, 0, 25, 8, 4, 0,220, 0, + 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, 0, 12, 0, 26, 8, 4, 0,136, 0, 7, 0, 27, 8, 56, 1, 25, 0, 56, 1, 0, 0, + 56, 1, 1, 0, 56, 1, 38, 0, 12, 0, 28, 8, 0, 0, 20, 0, 7, 0, 29, 8, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, + 4, 0, 19, 0, 7, 0, 33, 8, 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 21, 1, 7, 0,220, 1, 7, 0, 36, 8, 7, 0,116, 2, + 7, 0, 37, 8, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, 7, 0, 41, 8, 7, 0,177, 0, 2, 0,136, 0, 2, 0,249, 4, + 57, 1, 20, 0, 27, 0, 31, 0, 12, 0, 42, 8, 12, 0, 43, 8, 12, 0, 44, 8, 4, 0, 19, 0, 4, 0,119, 5, 2, 0,168, 2, + 2, 0,184, 5, 2, 0,136, 0, 2, 0, 45, 8, 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, 2, 0, 49, 8, 4, 0, 50, 8, + 4, 0, 51, 8, 4, 0, 52, 8, 4, 0, 53, 8, 4, 0, 54, 8, 4, 0, 55, 8, 58, 1, 38, 0, 58, 1, 0, 0, 58, 1, 1, 0, + 26, 0, 56, 8, 12, 0, 67, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0, 57, 8, 2, 0, 58, 8, 2, 0, 59, 8, 2, 0, 26, 3, + 2, 0, 60, 8, 4, 0,253, 1, 4, 0, 52, 8, 4, 0, 53, 8, 56, 1, 61, 8, 58, 1, 38, 0, 58, 1, 62, 8, 12, 0, 63, 8, + 9, 0, 64, 8, 9, 0, 65, 8, 9, 0, 66, 8, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 67, 8, 7, 0,201, 1, 2, 0, 68, 8, + 2, 0, 37, 0, 7, 0, 69, 8, 7, 0, 70, 8, 7, 0, 22, 3, 7, 0, 71, 8, 7, 0, 72, 8, 7, 0, 73, 8, 7, 0, 74, 8, + 7, 0, 75, 8, 7, 0, 76, 8, 7, 0,250, 1, 32, 0, 77, 8,153, 0, 9, 0, 12, 0, 78, 8, 2, 0, 19, 0, 2, 0, 79, 8, + 7, 0, 26, 2, 7, 0, 80, 8, 7, 0, 81, 8, 12, 0, 82, 8, 4, 0, 83, 8, 4, 0, 37, 0, 59, 1, 7, 0, 59, 1, 0, 0, + 59, 1, 1, 0, 12, 0, 16, 8, 4, 0, 19, 0, 4, 0, 84, 8, 0, 0,131, 3,229, 0, 85, 8,152, 0, 7, 0, 27, 0, 31, 0, + 12, 0, 86, 8, 12, 0, 78, 8, 12, 0, 87, 8, 12, 0,104, 0, 4, 0, 19, 0, 4, 0, 88, 8,202, 0, 4, 0, 27, 0, 89, 8, + 12, 0, 78, 8, 4, 0, 90, 8, 4, 0, 19, 0, 60, 1, 17, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,152, 0, 9, 3,202, 0, 91, 8, 0, 0, 14, 1, 0, 0,168, 5, 2, 0, 19, 0, + 2, 0, 92, 8, 2, 0,169, 5, 2, 0,170, 5, 2, 0, 93, 8, 7, 0, 94, 8, 61, 1, 8, 0, 61, 1, 0, 0, 61, 1, 1, 0, + 59, 1, 95, 8, 36, 0, 80, 0, 12, 0, 12, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 96, 8, 62, 1, 5, 0, 62, 1, 0, 0, + 62, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0, 97, 8, 63, 1, 12, 0, 63, 1, 0, 0, 63, 1, 1, 0, 9, 0, 2, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 98, 8, 0, 0, 99, 8, 0, 0, 97, 8, 7, 0,100, 8, 7, 0,101, 8, 4, 0, 37, 0, + 36, 0, 80, 0, 64, 1, 9, 0, 64, 1, 0, 0, 64, 1, 1, 0, 32, 0,102, 8, 0, 0,103, 8, 7, 0,104, 8, 2, 0,105, 8, + 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 65, 1, 7, 0, 43, 0,227, 5, 26, 0, 56, 8, 4, 0, 19, 0, 4, 0,106, 8, + 12, 0,107, 8, 32, 0,102, 8, 0, 0,103, 8, 66, 1, 12, 0, 32, 0,102, 8, 2, 0,108, 8, 2, 0, 19, 0, 2, 0,109, 8, + 2, 0,110, 8, 0, 0,103, 8, 32, 0,111, 8, 0, 0,112, 8, 7, 0,113, 8, 7, 0,220, 1, 7, 0,114, 8, 7, 0,115, 8, + 67, 1, 6, 0, 32, 0,102, 8, 4, 0,116, 8, 4, 0,117, 8, 4, 0, 94, 0, 4, 0, 37, 0, 0, 0,103, 8, 68, 1, 4, 0, + 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, 0, 0,103, 8, 69, 1, 4, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, + 0, 0,103, 8, 70, 1, 10, 0, 32, 0,102, 8, 4, 0,118, 8, 7, 0,130, 0, 4, 0, 19, 0, 2, 0,223, 5, 2, 0,119, 8, + 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,120, 8, 0, 0,103, 8, 71, 1, 4, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, + 0, 0,103, 8, 72, 1, 10, 0, 32, 0,102, 8, 2, 0, 17, 0, 2, 0,183, 3, 4, 0, 92, 0, 4, 0, 93, 0, 7, 0,233, 7, + 7, 0,234, 7, 4, 0, 37, 0,152, 0,208, 7, 0, 0,103, 8, 73, 1, 4, 0, 32, 0,102, 8, 4, 0, 27, 3, 4, 0,121, 8, + 0, 0,103, 8, 74, 1, 5, 0, 32, 0,102, 8, 7, 0,130, 0, 4, 0,122, 8, 4, 0, 27, 3, 4, 0, 28, 3, 75, 1, 6, 0, + 32, 0,102, 8, 4, 0,123, 8, 4, 0,124, 8, 7, 0,125, 8, 7, 0,126, 8, 0, 0,103, 8, 76, 1, 16, 0, 32, 0,102, 8, + 32, 0, 62, 8, 4, 0, 17, 0, 7, 0,127, 8, 7, 0,128, 8, 7, 0,129, 8, 7, 0,130, 8, 7, 0,131, 8, 7, 0,132, 8, + 7, 0,133, 8, 7, 0,134, 8, 7, 0,135, 8, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 77, 1, 3, 0, + 32, 0,102, 8, 4, 0, 19, 0, 4, 0,123, 5, 78, 1, 5, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,136, 8, + 0, 0,103, 8, 79, 1, 10, 0, 32, 0,102, 8, 0, 0,103, 8, 2, 0,137, 8, 2, 0,138, 8, 0, 0,139, 8, 0, 0,140, 8, + 7, 0,141, 8, 7, 0,142, 8, 7, 0,143, 8, 7, 0,144, 8, 80, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, + 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 81, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 82, 1, 8, 0, 7, 0, 9, 0, + 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 83, 1, 7, 0, + 32, 0,102, 8, 0, 0,103, 8, 7, 0, 21, 1, 7, 0, 31, 1, 2, 0, 19, 0, 2, 0, 14, 1, 4, 0, 37, 0, 84, 1, 5, 0, + 32, 0,226, 2, 7, 0, 21, 1, 2, 0,230, 2, 0, 0,232, 2, 0, 0,147, 8, 85, 1, 10, 0, 85, 1, 0, 0, 85, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,148, 8, 7, 0,222, 0, 7, 0,223, 0, 2, 0, 16, 8, 2, 0,149, 8, 32, 0, 45, 0, + 86, 1, 22, 0, 86, 1, 0, 0, 86, 1, 1, 0, 2, 0, 19, 0, 2, 0, 14, 1, 2, 0,150, 8, 2, 0,151, 8, 36, 0, 80, 0, +152, 0,208, 7, 32, 0,169, 0, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,152, 8, 7, 0,153, 8, 7, 0,154, 8, 7, 0,155, 8, + 7, 0,157, 2, 7, 0,156, 8, 7, 0,210, 7, 7, 0,157, 8, 0, 0,158, 8, 0, 0,159, 8, 12, 0, 14, 3, 87, 1, 8, 0, + 7, 0,228, 1, 7, 0,233, 7, 7, 0,234, 7, 9, 0, 2, 0, 2, 0,160, 8, 2, 0,161, 8, 2, 0,162, 8, 2, 0,163, 8, + 88, 1, 18, 0, 88, 1, 0, 0, 88, 1, 1, 0, 88, 1,164, 8, 0, 0, 20, 0, 87, 1,165, 8, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 2, 0,169, 8, 4, 0, 43, 0, 7, 0,170, 8, 7, 0,171, 8, 4, 0,172, 8, + 4, 0,173, 8, 88, 1,174, 8, 89, 1,175, 8, 90, 1, 33, 0, 90, 1, 0, 0, 90, 1, 1, 0, 90, 1,176, 8, 0, 0, 20, 0, + 0, 0,177, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 61, 7, 2, 0, 94, 7, 2, 0,178, 8, 2, 0,138, 0, 2, 0,167, 8, + 2, 0, 51, 7, 12, 0,203, 7, 12, 0,179, 8, 27, 0, 1, 6, 9, 0,180, 8, 7, 0,170, 8, 7, 0,171, 8, 7, 0,255, 1, + 7, 0,181, 8, 2, 0,182, 8, 2, 0,183, 8, 7, 0,184, 8, 7, 0,185, 8, 2, 0,186, 8, 2, 0,187, 8, 9, 0,188, 8, + 24, 0,189, 8, 24, 0,190, 8, 24, 0,191, 8, 91, 1,155, 0, 92, 1,192, 8, 89, 1, 8, 0, 89, 1, 0, 0, 89, 1, 1, 0, + 90, 1,193, 8, 90, 1,194, 8, 88, 1,195, 8, 88, 1,174, 8, 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 12, 0,196, 8, 12, 0,197, 8, 87, 1,198, 8, 12, 0,199, 8, 4, 0, 17, 0, 4, 0,200, 8, 4, 0,201, 8, + 4, 0,202, 8, 12, 0,203, 8, 92, 1,204, 8, 88, 1,205, 8, 88, 1,206, 8, 9, 0,207, 8, 9, 0,208, 8, 4, 0,209, 8, + 9, 0,210, 8, 9, 0,211, 8, 9, 0,212, 8, 93, 1, 6, 0, 4, 0,129, 0, 4, 0,131, 0, 4, 0, 51, 7, 0, 0,213, 8, + 0, 0,214, 8, 2, 0, 37, 0, 94, 1, 16, 0, 2, 0, 6, 7, 2, 0, 7, 7, 2, 0,215, 8, 2, 0, 0, 8, 2, 0,216, 8, + 2, 0, 68, 0, 7, 0,156, 2, 7, 0,217, 8, 7, 0,218, 8, 2, 0, 35, 1, 0, 0,219, 8, 0, 0,232, 4, 2, 0,220, 8, + 2, 0, 37, 0, 4, 0,221, 8, 4, 0,222, 8, 95, 1, 9, 0, 7, 0,223, 8, 7, 0,224, 8, 7, 0, 14, 8, 7, 0,113, 0, + 7, 0,225, 8, 7, 0,190, 5, 2, 0,226, 8, 0, 0,227, 8, 0, 0, 37, 0, 96, 1, 4, 0, 7, 0,228, 8, 7, 0,229, 8, + 2, 0,226, 8, 2, 0, 37, 0, 97, 1, 3, 0, 7, 0,230, 8, 7, 0,231, 8, 7, 0, 15, 0, 98, 1, 7, 0, 0, 0,191, 1, + 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0, 69, 4, 4, 0,131, 0, 4, 0,181, 3, 99, 1, 7, 0, 7, 0,232, 8, + 7, 0,233, 8, 7, 0,234, 8, 7, 0, 10, 2, 7, 0,235, 8, 7, 0,236, 8, 7, 0,237, 8,100, 1, 4, 0, 2, 0,238, 8, + 2, 0,239, 8, 2, 0,240, 8, 2, 0,241, 8,101, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,102, 1, 2, 0, 0, 0,171, 0, + 0, 0,242, 8,103, 1, 1, 0, 0, 0, 20, 0,104, 1, 10, 0, 0, 0,243, 8, 0, 0,244, 8, 0, 0,173, 5, 0, 0,245, 8, + 2, 0,215, 8, 2, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, 7, 0,156, 8,105, 1, 2, 0, 9, 0,250, 8, + 9, 0,251, 8,106, 1, 11, 0, 0, 0,120, 4, 0, 0, 17, 0, 0, 0,226, 8, 0, 0,113, 0, 0, 0,252, 8, 0, 0,110, 0, + 0, 0,184, 0, 7, 0,253, 8, 7, 0,254, 8, 7, 0,255, 8, 7, 0, 0, 9,107, 1, 8, 0, 7, 0,171, 7, 7, 0,130, 0, + 7, 0,232, 4, 7, 0, 82, 2, 7, 0, 1, 9, 7, 0,209, 0, 7, 0, 2, 9, 4, 0, 17, 0,108, 1, 4, 0, 2, 0, 3, 9, + 2, 0, 4, 9, 2, 0, 5, 9, 2, 0, 37, 0,109, 1, 1, 0, 0, 0, 20, 0,110, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 2, 0, 19, 0, 2, 0, 6, 9,111, 1, 10, 0, 2, 0,122, 3, 2, 0, 19, 0, 7, 0, 5, 4, 7, 0, 7, 9, 7, 0, 8, 9, + 7, 0, 9, 9, 7, 0, 10, 9,110, 1, 11, 9,110, 1, 12, 9,110, 1, 13, 9, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, + 24, 0, 14, 9, 24, 0, 15, 9,111, 1, 16, 9, 7, 0, 17, 9, 7, 0, 18, 9, 7, 0, 19, 9, 7, 0, 20, 9,112, 1, 4, 0, + 48, 0,150, 2, 7, 0, 21, 9, 7, 0, 94, 1, 7, 0, 37, 0,176, 0, 17, 0, 27, 0, 31, 0,112, 1, 22, 9, 62, 0, 11, 9, + 52, 0, 78, 1, 2, 0, 19, 0, 2, 0, 77, 5, 4, 0,110, 0, 7, 0, 23, 9, 7, 0, 7, 2, 7, 0, 24, 9, 7, 0, 25, 9, + 7, 0, 94, 1, 7, 0, 26, 9, 2, 0, 48, 1, 0, 0, 27, 9, 0, 0,115, 3, 0, 0, 96, 0,113, 1, 10, 0, 4, 0, 17, 0, + 4, 0,130, 0, 4, 0, 19, 0, 4, 0, 88, 3, 4, 0, 28, 9, 4, 0, 29, 9, 4, 0, 30, 9, 0, 0, 96, 0, 0, 0, 20, 0, + 9, 0, 2, 0, 89, 0, 6, 0,113, 1, 31, 9, 4, 0, 32, 9, 4, 0, 33, 9, 4, 0, 34, 9, 4, 0, 37, 0, 9, 0, 35, 9, +114, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, 2, 0, 36, 9, 2, 0, 37, 0,115, 1, 5, 0, 7, 0, 77, 2, + 7, 0, 37, 9, 7, 0, 38, 9, 7, 0, 39, 9, 7, 0,190, 2,116, 1, 7, 0, 4, 0, 40, 9, 4, 0, 41, 9, 4, 0, 42, 9, + 7, 0, 43, 9, 7, 0, 44, 9, 7, 0, 45, 9, 7, 0, 46, 9,117, 1, 8, 0,117, 1, 0, 0,117, 1, 1, 0, 32, 0, 45, 0, + 4, 0,213, 2, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0,190, 2, 7, 0,179, 7,118, 1, 26, 0, 32, 0, 47, 9,115, 1, 84, 3, +115, 1, 48, 9,114, 1, 49, 9,115, 1,160, 7, 7, 0, 50, 9, 7, 0, 51, 9, 7, 0, 52, 9, 7, 0, 53, 9, 7, 0, 44, 9, + 7, 0, 45, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 54, 9, 7, 0, 55, 9, 7, 0,110, 0, 7, 0, 56, 9, 4, 0, 40, 9, + 4, 0, 57, 9, 4, 0, 37, 0, 4, 0, 82, 0, 4, 0, 58, 9, 2, 0, 19, 0, 2, 0, 59, 9, 2, 0, 60, 9, 2, 0,118, 3, +119, 1,117, 0, 27, 0, 31, 0, 39, 0, 75, 0, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0,137, 8, 2, 0, 61, 9, 2, 0, 62, 9, + 2, 0, 68, 8, 2, 0, 63, 9, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 68, 9, 2, 0, 69, 9, + 2, 0, 70, 9, 2, 0, 71, 9, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0,211, 1, + 2, 0,153, 7, 2, 0,129, 7, 2, 0, 77, 9, 2, 0, 78, 9, 2, 0,116, 3, 2, 0,117, 3, 2, 0, 79, 9, 2, 0, 80, 9, + 2, 0, 81, 9, 2, 0, 82, 9, 2, 0, 83, 9, 2, 0, 84, 9, 7, 0, 85, 9, 7, 0, 86, 9, 7, 0, 87, 9, 2, 0, 88, 9, + 2, 0, 89, 9, 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 7, 0,135, 7, 7, 0, 93, 0, 7, 0,167, 2, 7, 0,141, 7, + 7, 0, 93, 9, 7, 0, 94, 9, 7, 0, 95, 9, 4, 0,136, 7, 4, 0,134, 7, 4, 0, 96, 9, 7, 0,137, 7, 7, 0,138, 7, + 7, 0,139, 7, 7, 0, 97, 9, 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, 40, 3, 7, 0,110, 0, 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, 4, 0,112, 9, 4, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 7, 0,117, 9, + 7, 0,118, 9, 7, 0, 57, 0, 7, 0,119, 9, 7, 0,120, 9, 7, 0,112, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,121, 9, + 7, 0,122, 9, 7, 0,123, 9, 7, 0,124, 9, 7, 0,125, 9, 7, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, + 7, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 4, 0,134, 9, 4, 0,135, 9, 7, 0, 47, 3, 7, 0,136, 9, + 7, 0,137, 9, 7, 0,138, 9, 7, 0,139, 9, 7, 0,140, 9, 7, 0,141, 9, 7, 0,142, 9, 0, 0,143, 9, 65, 0, 73, 3, + 65, 0,144, 9, 32, 0,145, 9, 32, 0,146, 9, 36, 0, 80, 0,155, 0, 71, 3,155, 0,147, 9,142, 0, 39, 0,142, 0, 0, 0, +142, 0, 1, 0,119, 1,148, 9,118, 1,163, 3,116, 1, 62, 8,120, 1,149, 9, 9, 0,150, 9,121, 1,151, 9,121, 1,152, 9, + 12, 0,153, 9, 12, 0,154, 9,156, 0, 72, 3, 32, 0,155, 9, 32, 0,156, 9, 32, 0, 38, 0, 12, 0,157, 9, 12, 0,158, 9, + 12, 0,159, 9, 7, 0,213, 0, 7, 0, 92, 4, 4, 0,118, 2, 4, 0, 19, 0, 4, 0,136, 7, 4, 0,160, 9, 4, 0,161, 9, + 4, 0,162, 9, 4, 0, 57, 0, 2, 0,220, 0, 2, 0,163, 9, 2, 0,164, 9, 2, 0, 65, 3, 2, 0,165, 9, 2, 0,118, 3, + 0, 0,166, 9, 2, 0,167, 9, 2, 0,168, 9, 2, 0,169, 9, 9, 0,170, 9,131, 0,202, 3,129, 0, 34, 0,122, 1,171, 9, + 7, 0,174, 3, 7, 0,172, 9, 7, 0,173, 9, 7, 0, 8, 4, 7, 0,174, 9, 7, 0, 50, 3, 7, 0, 40, 3, 7, 0,175, 9, + 7, 0, 9, 2, 7, 0,176, 9, 7, 0,177, 9, 7, 0,178, 9, 7, 0,179, 9, 7, 0,180, 9, 7, 0,181, 9, 7, 0,175, 3, + 7, 0,182, 9, 7, 0,183, 9, 7, 0,184, 9, 7, 0,176, 3, 7, 0,172, 3, 7, 0,173, 3, 4, 0,185, 9, 4, 0, 94, 0, + 4, 0,186, 9, 4, 0,187, 9, 2, 0,188, 9, 2, 0,189, 9, 2, 0,190, 9, 2, 0,191, 9, 2, 0,192, 9, 2, 0, 37, 0, + 4, 0, 70, 0,130, 0, 8, 0,122, 1,193, 9, 7, 0,194, 9, 7, 0,195, 9, 7, 0,165, 1, 7, 0,196, 9, 4, 0, 94, 0, + 2, 0,197, 9, 2, 0,198, 9,123, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,199, 9,124, 1, 6, 0, +124, 1, 0, 0,124, 1, 1, 0,123, 1,200, 9, 4, 0,201, 9, 2, 0,202, 9, 2, 0, 19, 0,125, 1, 5, 0,125, 1, 0, 0, +125, 1, 1, 0, 12, 0,203, 9, 4, 0,204, 9, 4, 0, 19, 0,126, 1, 9, 0,126, 1, 0, 0,126, 1, 1, 0, 12, 0,129, 0, +125, 1,205, 9, 4, 0, 19, 0, 2, 0,202, 9, 2, 0,206, 9, 7, 0, 95, 0, 0, 0,207, 9,190, 0, 6, 0, 27, 0, 31, 0, + 12, 0,134, 4, 4, 0, 19, 0, 2, 0,208, 9, 2, 0,209, 9, 9, 0,210, 9,127, 1, 13, 0, 27, 0, 31, 0,128, 1,211, 9, +128, 1,212, 9, 12, 0,213, 9, 4, 0,214, 9, 2, 0,215, 9, 2, 0, 37, 0, 12, 0,216, 9, 12, 0,217, 9, 12, 0,218, 9, + 12, 0,219, 9, 12, 0,220, 9, 12, 0,221, 9,128, 1, 30, 0,128, 1, 0, 0,128, 1, 1, 0, 9, 0,222, 9, 4, 0,241, 6, + 4, 0, 37, 0,200, 0,164, 5,200, 0,223, 9, 0, 0,224, 9, 2, 0,225, 9, 2, 0,226, 9, 2, 0, 6, 7, 2, 0, 7, 7, + 2, 0,227, 9, 2, 0,228, 9, 2, 0, 88, 3, 2, 0, 23, 7, 2, 0,229, 9, 2, 0,230, 9, 4, 0,161, 1,129, 1,231, 9, +130, 1,232, 9,131, 1,233, 9, 4, 0,234, 9, 4, 0,235, 9, 9, 0,236, 9, 12, 0,237, 9, 12, 0,217, 9, 12, 0, 25, 7, + 12, 0,238, 9, 12, 0,239, 9,132, 1, 12, 0,132, 1, 0, 0,132, 1, 1, 0, 0, 0,240, 9,133, 1,241, 9, 2, 0, 17, 0, + 2, 0, 15, 0, 2, 0,242, 9, 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9, 2, 0,246, 9, 2, 0, 37, 0,134, 1, 6, 0, +134, 1, 0, 0,134, 1, 1, 0, 12, 0,247, 9, 0, 0,248, 9, 4, 0,249, 9, 4, 0,250, 9,208, 0, 8, 0,208, 0, 0, 0, +208, 0, 1, 0, 0, 0,240, 9, 26, 0, 30, 0,135, 1, 0, 7, 9, 0,251, 9,133, 1,241, 9,136, 1,252, 9,129, 1, 23, 0, +129, 1, 0, 0,129, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0,253, 9, 2, 0,254, 9, + 2, 0,255, 9, 2, 0, 0, 10, 0, 0, 1, 10, 0, 0, 37, 0, 2, 0,242, 9, 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9, + 2, 0,246, 9, 2, 0, 43, 0, 0, 0, 2, 10, 2, 0, 3, 10, 2, 0, 4, 10, 4, 0, 70, 0, 9, 0,251, 9,137, 1, 8, 0, +137, 1, 0, 0,137, 1, 1, 0, 9, 0, 2, 0, 9, 0, 5, 10, 0, 0,131, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0, 6, 10, +138, 1, 5, 0, 7, 0, 7, 10, 4, 0, 8, 10, 4, 0, 9, 10, 4, 0, 14, 1, 4, 0, 19, 0,139, 1, 6, 0, 7, 0, 10, 10, + 7, 0, 11, 10, 7, 0, 12, 10, 7, 0, 13, 10, 4, 0, 17, 0, 4, 0, 19, 0,140, 1, 5, 0, 7, 0,233, 7, 7, 0,234, 7, + 7, 0,190, 2, 2, 0,224, 1, 2, 0,225, 1,141, 1, 5, 0,140, 1, 2, 0, 4, 0, 54, 0, 7, 0, 14, 10, 7, 0,233, 7, + 7, 0,234, 7,142, 1, 4, 0, 2, 0, 15, 10, 2, 0, 16, 10, 2, 0, 17, 10, 2, 0, 18, 10,143, 1, 2, 0, 43, 0,254, 5, + 26, 0, 56, 8,144, 1, 3, 0, 24, 0, 19, 10, 4, 0, 19, 0, 4, 0, 37, 0,145, 1, 6, 0, 7, 0,110, 0, 7, 0,142, 2, + 7, 0, 20, 10, 7, 0, 37, 0, 2, 0,219, 0, 2, 0, 21, 10,146, 1, 7, 0,146, 1, 0, 0,146, 1, 1, 0, 27, 0, 1, 6, + 0, 0, 22, 10, 4, 0, 23, 10, 4, 0, 94, 0, 0, 0,131, 3,147, 1, 6, 0, 12, 0,107, 8, 0, 0, 24, 10, 7, 0, 61, 0, + 7, 0, 6, 10, 4, 0, 17, 0, 4, 0, 19, 0,148, 1, 3, 0, 7, 0, 25, 10, 4, 0, 19, 0, 4, 0, 37, 0,149, 1, 15, 0, +149, 1, 0, 0,149, 1, 1, 0, 59, 1, 95, 8,147, 1, 62, 0, 12, 0, 14, 3, 35, 0, 50, 0,148, 1, 26, 10, 4, 0, 54, 0, + 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,255, 0, 4, 0, 23, 10, 0, 0, 22, 10, 4, 0, 27, 10, 7, 0, 28, 10,150, 1, 2, 0, + 0, 0, 29, 10, 0, 0, 30, 10,151, 1, 4, 0,151, 1, 0, 0,151, 1, 1, 0,152, 0,226, 2, 12, 0, 31, 10,152, 1, 22, 0, +152, 1, 0, 0,152, 1, 1, 0, 12, 0, 32, 10,152, 0,208, 7,151, 1, 33, 10, 12, 0, 34, 10, 12, 0, 14, 3, 0, 0,131, 3, + 7, 0, 6, 10, 7, 0, 35, 10, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,152, 8, 7, 0,153, 8, 7, 0,157, 2, 7, 0,156, 8, + 7, 0,210, 7, 7, 0,157, 8, 2, 0, 36, 10, 2, 0, 37, 10, 2, 0, 19, 0, 2, 0, 17, 0,153, 1, 6, 0,153, 1, 0, 0, +153, 1, 1, 0, 12, 0, 32, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,131, 3,154, 1, 10, 0,154, 1, 0, 0,154, 1, 1, 0, + 27, 0, 1, 6, 0, 0, 38, 10, 4, 0, 39, 10, 4, 0, 40, 10, 0, 0, 22, 10, 4, 0, 23, 10, 2, 0, 19, 0, 2, 0, 41, 10, +155, 1, 6, 0,155, 1, 0, 0,155, 1, 1, 0, 12, 0, 42, 10, 0, 0,131, 3, 4, 0, 19, 0, 4, 0, 43, 10,156, 1, 5, 0, +156, 1, 0, 0,156, 1, 1, 0, 0, 0, 22, 10, 4, 0, 23, 10, 7, 0,134, 2, 39, 0, 9, 0,152, 0, 9, 3,152, 0, 44, 10, +151, 1, 33, 10, 12, 0, 45, 10,152, 1, 46, 10, 12, 0, 47, 10, 12, 0, 48, 10, 4, 0, 19, 0, 4, 0,220, 0,157, 1, 2, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 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}; From 1334ed303816531240294d17457575736bdd212b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Jul 2009 19:17:52 +0000 Subject: [PATCH 188/512] 2.5: fix for last commit, missing ffmpeg #ifdef. --- source/blender/makesrna/intern/rna_scene.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9c9fbf0e3cf..f52e130d527 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -137,7 +137,9 @@ static void rna_SceneRenderData_file_format_set(PointerRNA *ptr, int value) RenderData *rd= (RenderData*)ptr->data; rd->imtype= value; +#ifdef WITH_FFMPEG ffmpeg_verify_image_type(rd); +#endif } static int rna_SceneRenderData_active_layer_index_get(PointerRNA *ptr) From 2ba8b72157d22ee92359e87e88860443a1f5cef2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Jul 2009 19:33:59 +0000 Subject: [PATCH 189/512] RNA & PyAPI * support for dynamic enums to be inspected enumProp.items() from python. * fix, enums check for a separator was flipped, meant no enums were in docs. * dynamic enum functions now check for a NULL context and return all possible options for the "items" attribute used for docs. * added an arg for rna arrays to free the array there looping over (needed to free dynamically allocated enum items) * python api checks for NULL items since this can happen in some cases. * python api, When getting an enum ID from an int in an array - If it failed it would get the first enum identifier and return that. Brecht? dont understand, making it return an empty string in these cases. --- source/blender/editors/mesh/editmesh_mods.c | 23 +++++++--- source/blender/editors/mesh/editmesh_tools.c | 23 +++++++--- .../transform/transform_orientations.c | 15 ++++++- source/blender/makesrna/intern/makesrna.c | 4 +- source/blender/makesrna/intern/rna_access.c | 32 +++++++++----- source/blender/makesrna/intern/rna_brush.c | 2 +- source/blender/makesrna/intern/rna_color.c | 2 +- .../blender/makesrna/intern/rna_constraint.c | 28 +++++++++++++ source/blender/makesrna/intern/rna_curve.c | 2 +- source/blender/makesrna/intern/rna_internal.h | 3 +- source/blender/makesrna/intern/rna_key.c | 2 +- source/blender/makesrna/intern/rna_lamp.c | 2 +- source/blender/makesrna/intern/rna_lattice.c | 10 ++--- source/blender/makesrna/intern/rna_material.c | 2 +- source/blender/makesrna/intern/rna_mesh.c | 24 +++++------ source/blender/makesrna/intern/rna_modifier.c | 2 +- source/blender/makesrna/intern/rna_particle.c | 42 +++++++++++++++++++ source/blender/makesrna/intern/rna_rna.c | 11 +++-- source/blender/makesrna/intern/rna_space.c | 5 +++ source/blender/makesrna/intern/rna_world.c | 2 +- source/blender/python/intern/bpy_rna.c | 34 +++++++-------- 21 files changed, 197 insertions(+), 73 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index 2995e2d895b..5fc2ce46792 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -1229,12 +1229,25 @@ static int select_similar_exec(bContext *C, wmOperator *op) static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *ptr, int *free) { - Object *obedit= CTX_data_edit_object(C); - + Object *obedit; + EnumPropertyItem *item= NULL; + int totitem= 0; + + if(C==NULL) { + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, prop_simvertex_types); + RNA_enum_items_add(&item, &totitem, prop_simedge_types); + RNA_enum_items_add(&item, &totitem, prop_simface_types); + RNA_enum_item_end(&item, &totitem); + *free= 1; + + return item; + } + + obedit= CTX_data_edit_object(C); + if(obedit && obedit->type == OB_MESH) { EditMesh *em= BKE_mesh_get_editmesh(obedit->data); - EnumPropertyItem *item= NULL; - int totitem= 0; if(em->selectmode & SCE_SELECT_VERTEX) RNA_enum_items_add(&item, &totitem, prop_simvertex_types); @@ -1248,7 +1261,7 @@ static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *ptr, return item; } - + return NULL; } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index eab06444a79..efb68f69dac 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -5795,13 +5795,24 @@ static EnumPropertyItem merge_type_items[]= { {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free) -{ - Object *obedit= CTX_data_edit_object(C); - +{ + EnumPropertyItem *item= NULL; + int totitem= 0; + + Object *obedit; + + if(C==NULL) { + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, merge_type_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + return item; + } + + obedit= CTX_data_edit_object(C); if(obedit && obedit->type == OB_MESH) { EditMesh *em= BKE_mesh_get_editmesh(obedit->data); - EnumPropertyItem *item= NULL; - int totitem= 0; if(em->selectmode & SCE_SELECT_VERTEX) { if(em->selected.first && em->selected.last && @@ -5824,7 +5835,7 @@ static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *fre return item; } - + return NULL; } diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index f3b373f0e48..6d60c7602f4 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -358,8 +358,10 @@ void BIF_selectTransformOrientationValue(bContext *C, int orientation) { EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) { - ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces; - TransformOrientation *ts = transform_spaces->first; + Scene *scene; + ListBase *transform_spaces; + TransformOrientation *ts= NULL; + EnumPropertyItem global = {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""}; EnumPropertyItem normal = {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""}; EnumPropertyItem local = {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""}; @@ -374,6 +376,15 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) RNA_enum_item_add(&item, &totitem, &local); RNA_enum_item_add(&item, &totitem, &view); + if(C) { + scene= CTX_data_scene(C); + + if(scene) { + transform_spaces = &scene->transform_spaces; + ts = transform_spaces->first; + } + } + if(ts) RNA_enum_item_add(&item, &totitem, &sepr); diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 61a8f8a29e9..85c266e3f27 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -699,9 +699,9 @@ static char *rna_def_property_begin_func(FILE *f, StructRNA *srna, PropertyRNA * } else { if(dp->dnalengthname) - fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname); + fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), data->%s, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthname); else - fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed); + fprintf(f, "\n rna_iterator_array_begin(iter, data->%s, sizeof(data->%s[0]), %d, 0, NULL);\n", dp->dnaname, dp->dnaname, dp->dnalengthfixed); } } else { diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index d6ca03c85a2..e504d1d030b 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -643,15 +643,18 @@ StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop) void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free) { EnumPropertyRNA *eprop= (EnumPropertyRNA*)rna_ensure_property(prop); - int tot; *free= 0; - if(C && eprop->itemf) { + if(eprop->itemf) { + int tot= 0; *item= eprop->itemf(C, ptr, free); if(totitem) { - for(tot=0; (*item)[tot].identifier; tot++); + if(*item) { + for( ; (*item)[tot].identifier; tot++); + } + *totitem= tot; } } @@ -710,11 +713,14 @@ int RNA_property_enum_identifier(bContext *C, PointerRNA *ptr, PropertyRNA *prop int result, free; RNA_property_enum_items(C, ptr, prop, &item, NULL, &free); - result= RNA_enum_identifier(item, value, identifier); - if(free) - MEM_freeN(item); + if(item) { + result= RNA_enum_identifier(item, value, identifier); + if(free) + MEM_freeN(item); - return result; + return result; + } + return 0; } const char *RNA_property_ui_name(PropertyRNA *prop) @@ -1303,9 +1309,9 @@ void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, Collectio iter->prop= prop; if(idprop) - rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, NULL); + rna_iterator_array_begin(iter, IDP_IDPArray(idprop), sizeof(IDProperty), idprop->len, 0, NULL); else - rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, NULL); + rna_iterator_array_begin(iter, NULL, sizeof(IDProperty), 0, 0, NULL); if(iter->valid) rna_property_collection_get_idp(iter); @@ -1902,7 +1908,7 @@ void rna_iterator_listbase_end(CollectionPropertyIterator *iter) iter->internal= NULL; } -void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip) +void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip) { ArrayIterator *internal; @@ -1911,6 +1917,7 @@ void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int i internal= MEM_callocN(sizeof(ArrayIterator), "ArrayIterator"); internal->ptr= ptr; + internal->free_ptr= free_ptr ? ptr:NULL; internal->endptr= ((char*)ptr)+length*itemsize; internal->itemsize= itemsize; internal->skip= skip; @@ -1955,6 +1962,11 @@ void *rna_iterator_array_dereference_get(CollectionPropertyIterator *iter) void rna_iterator_array_end(CollectionPropertyIterator *iter) { + ArrayIterator *internal= iter->internal; + + if(internal->free_ptr) + MEM_freeN(internal->free_ptr); + MEM_freeN(iter->internal); iter->internal= NULL; } diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 7355261c5aa..3b7df3aa948 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -37,7 +37,7 @@ static void rna_Brush_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Brush *brush= (Brush*)ptr->data; - rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, NULL); + rna_iterator_array_begin(iter, (void*)brush->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL); } static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 179808ab66d..f4248d18db3 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -50,7 +50,7 @@ static void rna_CurveMapping_curves_begin(CollectionPropertyIterator *iter, Poin { CurveMapping *cumap= (CurveMapping*)ptr->data; - rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), NULL); + rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, NULL); } static void rna_CurveMapping_clip_set(PointerRNA *ptr, int value) diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 56c0ca1b491..0e3dd799612 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -181,6 +181,20 @@ static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *C, PointerRN { Object *ob= (Object*)ptr->id.data; bConstraint *con= (bConstraint*)ptr->data; + + if(C==NULL) { + EnumPropertyItem *item= NULL; + int totitem= 0; + + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, space_object_items); + RNA_enum_items_add(&item, &totitem, space_pchan_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; + } if(BLI_findindex(&ob->constraints, con) == -1) return space_pchan_items; @@ -195,6 +209,20 @@ static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *C, PointerR ListBase targets = {NULL, NULL}; bConstraintTarget *ct; + if(C==NULL) { + EnumPropertyItem *item= NULL; + int totitem= 0; + + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, space_object_items); + RNA_enum_items_add(&item, &totitem, space_pchan_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; + } + if(cti && cti->get_constraint_targets) { cti->get_constraint_targets(con, &targets); diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 5c9da19f9b2..faf6c3a1f75 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -139,7 +139,7 @@ static int rna_Nurb_length(PointerRNA *ptr) static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Nurb *nu= (Nurb*)ptr->data; - rna_iterator_array_begin(iter, (void*)nu->bp, sizeof(BPoint*), nu->pntsv>0 ? nu->pntsu*nu->pntsv : nu->pntsu, NULL); + rna_iterator_array_begin(iter, (void*)nu->bp, sizeof(BPoint*), nu->pntsv>0 ? nu->pntsu*nu->pntsv : nu->pntsu, 0, NULL); } #else diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 6a5d5ccfdc3..ad0e05b91a6 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -240,11 +240,12 @@ void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter); typedef struct ArrayIterator { char *ptr; char *endptr; + void *free_ptr; /* will be free'd if set */ int itemsize; IteratorSkipFunc skip; } ArrayIterator; -void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip); +void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip); void rna_iterator_array_next(struct CollectionPropertyIterator *iter); void *rna_iterator_array_get(struct CollectionPropertyIterator *iter); void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter); diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 0a7e989a93a..7297ee8cb97 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -198,7 +198,7 @@ static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA } } - rna_iterator_array_begin(iter, (void*)kb->data, size, tot, NULL); + rna_iterator_array_begin(iter, (void*)kb->data, size, tot, 0, NULL); } static int rna_ShapeKey_data_length(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index a49b4377d9d..e592cb38693 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -54,7 +54,7 @@ static PointerRNA rna_Lamp_sky_settings_get(PointerRNA *ptr) static void rna_Lamp_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Lamp *la= (Lamp*)ptr->data; - rna_iterator_array_begin(iter, (void*)la->mtex, sizeof(MTex*), MAX_MTEX, NULL); + rna_iterator_array_begin(iter, (void*)la->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL); } static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c index c685e5b6912..03a1dc9ec8f 100644 --- a/source/blender/makesrna/intern/rna_lattice.c +++ b/source/blender/makesrna/intern/rna_lattice.c @@ -68,10 +68,10 @@ static void rna_LatticePoint_groups_begin(CollectionPropertyIterator *iter, Poin BPoint *bp= (BPoint*)ptr->data; MDeformVert *dvert= lt->dvert + (bp-lt->def); - rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, NULL); + rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL); } else - rna_iterator_array_begin(iter, NULL, 0, 0, NULL); + rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL); } static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -80,11 +80,11 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN int tot= lt->pntsu*lt->pntsv*lt->pntsw; if(lt->editlatt && lt->editlatt->def) - rna_iterator_array_begin(iter, (void*)lt->editlatt->def, sizeof(BPoint), tot, NULL); + rna_iterator_array_begin(iter, (void*)lt->editlatt->def, sizeof(BPoint), tot, 0, NULL); else if(lt->def) - rna_iterator_array_begin(iter, (void*)lt->def, sizeof(BPoint), tot, NULL); + rna_iterator_array_begin(iter, (void*)lt->def, sizeof(BPoint), tot, 0, NULL); else - rna_iterator_array_begin(iter, NULL, 0, 0, NULL); + rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL); } static void rna_Lattice_update_data(bContext *C, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 41f31594f6e..17c91088761 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -75,7 +75,7 @@ static void rna_Material_type_set(PointerRNA *ptr, int value) static void rna_Material_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Material *ma= (Material*)ptr->data; - rna_iterator_array_begin(iter, (void*)ma->mtex, sizeof(MTex*), MAX_MTEX, NULL); + rna_iterator_array_begin(iter, (void*)ma->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL); } static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index b69a804cf6a..3a7015b65be 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -197,10 +197,10 @@ static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, Pointe MVert *mvert= (MVert*)ptr->data; MDeformVert *dvert= me->dvert + (mvert-me->mvert); - rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, NULL); + rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL); } else - rna_iterator_array_begin(iter, NULL, 0, 0, NULL); + rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL); } static void rna_MeshFace_material_index_range(PointerRNA *ptr, int *min, int *max) @@ -262,7 +262,7 @@ static void rna_Mesh_uv_textures_begin(CollectionPropertyIterator *iter, Pointer { Mesh *me= (Mesh*)ptr->data; CustomData *fdata= rna_mesh_fdata(me); - rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_uv_texture_check); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, 0, rna_uv_texture_check); } static int rna_Mesh_uv_textures_length(PointerRNA *ptr) @@ -390,7 +390,7 @@ static void rna_MeshTextureFaceLayer_data_begin(CollectionPropertyIterator *iter { Mesh *me= (Mesh*)ptr->id.data; CustomDataLayer *layer= (CustomDataLayer*)ptr->data; - rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), me->totface, NULL); + rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), me->totface, 0, NULL); } static int rna_MeshTextureFaceLayer_data_length(PointerRNA *ptr) @@ -437,7 +437,7 @@ static void rna_Mesh_vertex_colors_begin(CollectionPropertyIterator *iter, Point { Mesh *me= (Mesh*)ptr->data; CustomData *fdata= rna_mesh_fdata(me); - rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_vertex_color_check); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, 0, rna_vertex_color_check); } static int rna_Mesh_vertex_colors_length(PointerRNA *ptr) @@ -501,7 +501,7 @@ static void rna_MeshColorLayer_data_begin(CollectionPropertyIterator *iter, Poin { Mesh *me= (Mesh*)ptr->id.data; CustomDataLayer *layer= (CustomDataLayer*)ptr->data; - rna_iterator_array_begin(iter, layer->data, sizeof(MCol)*4, me->totface, NULL); + rna_iterator_array_begin(iter, layer->data, sizeof(MCol)*4, me->totface, 0, NULL); } static int rna_MeshColorLayer_data_length(PointerRNA *ptr) @@ -542,7 +542,7 @@ static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *it { Mesh *me= (Mesh*)ptr->id.data; CustomDataLayer *layer= (CustomDataLayer*)ptr->data; - rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totface, NULL); + rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totface, 0, NULL); } static int rna_MeshFloatPropertyLayer_data_length(PointerRNA *ptr) @@ -561,7 +561,7 @@ static void rna_Mesh_float_layers_begin(CollectionPropertyIterator *iter, Pointe { Mesh *me= (Mesh*)ptr->data; CustomData *fdata= rna_mesh_fdata(me); - rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_float_layer_check); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, 0, rna_float_layer_check); } static int rna_Mesh_float_layers_length(PointerRNA *ptr) @@ -579,7 +579,7 @@ static void rna_MeshIntPropertyLayer_data_begin(CollectionPropertyIterator *iter { Mesh *me= (Mesh*)ptr->id.data; CustomDataLayer *layer= (CustomDataLayer*)ptr->data; - rna_iterator_array_begin(iter, layer->data, sizeof(MIntProperty), me->totface, NULL); + rna_iterator_array_begin(iter, layer->data, sizeof(MIntProperty), me->totface, 0, NULL); } static int rna_MeshIntPropertyLayer_data_length(PointerRNA *ptr) @@ -592,7 +592,7 @@ static void rna_Mesh_int_layers_begin(CollectionPropertyIterator *iter, PointerR { Mesh *me= (Mesh*)ptr->data; CustomData *fdata= rna_mesh_fdata(me); - rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_int_layer_check); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, 0, rna_int_layer_check); } static int rna_Mesh_int_layers_length(PointerRNA *ptr) @@ -610,7 +610,7 @@ static void rna_MeshStringPropertyLayer_data_begin(CollectionPropertyIterator *i { Mesh *me= (Mesh*)ptr->id.data; CustomDataLayer *layer= (CustomDataLayer*)ptr->data; - rna_iterator_array_begin(iter, layer->data, sizeof(MStringProperty), me->totface, NULL); + rna_iterator_array_begin(iter, layer->data, sizeof(MStringProperty), me->totface, 0, NULL); } static int rna_MeshStringPropertyLayer_data_length(PointerRNA *ptr) @@ -623,7 +623,7 @@ static void rna_Mesh_string_layers_begin(CollectionPropertyIterator *iter, Point { Mesh *me= (Mesh*)ptr->data; CustomData *fdata= rna_mesh_fdata(me); - rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, rna_string_layer_check); + rna_iterator_array_begin(iter, (void*)fdata->layers, sizeof(CustomDataLayer), fdata->totlayer, 0, rna_string_layer_check); } static int rna_Mesh_string_layers_length(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index a789f9065e3..f207f4f605d 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -83,7 +83,7 @@ EnumPropertyItem modifier_type_items[] ={ static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { UVProjectModifierData *uvp= (UVProjectModifierData*)ptr->data; - rna_iterator_array_begin(iter, (void*)uvp->projectors, sizeof(Object*), 10, NULL); + rna_iterator_array_begin(iter, (void*)uvp->projectors, sizeof(Object*), 10, 0, NULL); } static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 39411752792..ef68e0ba019 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -430,6 +430,20 @@ static EnumPropertyItem *rna_Particle_from_itemf(bContext *C, PointerRNA *ptr, i { ParticleSettings *part = ptr->id.data; + if(C==NULL) { + EnumPropertyItem *item= NULL; + int totitem= 0; + + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, part_reactor_from_items); + RNA_enum_items_add(&item, &totitem, part_from_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; + } + if(part->type==PART_REACTOR) return part_reactor_from_items; else @@ -440,6 +454,20 @@ static EnumPropertyItem *rna_Particle_draw_as_itemf(bContext *C, PointerRNA *ptr { ParticleSettings *part = ptr->id.data; + if(C==NULL) { + EnumPropertyItem *item= NULL; + int totitem= 0; + + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, part_hair_draw_as_items); + RNA_enum_items_add(&item, &totitem, part_draw_as_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; + } + if(part->type==PART_HAIR) return part_hair_draw_as_items; else @@ -450,6 +478,20 @@ static EnumPropertyItem *rna_Particle_ren_as_itemf(bContext *C, PointerRNA *ptr, { ParticleSettings *part = ptr->id.data; + if(C==NULL) { + EnumPropertyItem *item= NULL; + int totitem= 0; + + /* needed for doc generation */ + RNA_enum_items_add(&item, &totitem, part_hair_ren_as_items); + RNA_enum_items_add(&item, &totitem, part_ren_as_items); + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; + } + if(part->type==PART_HAIR) return part_hair_ren_as_items; else diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index 0b605db20cf..aeaedd6f81d 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -520,18 +520,21 @@ static int rna_enum_check_separator(CollectionPropertyIterator *iter, void *data { EnumPropertyItem *item= (EnumPropertyItem*)data; - return (item->identifier[0] != 0); + return (item->identifier[0] == 0); } static void rna_EnumProperty_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { PropertyRNA *prop= (PropertyRNA*)ptr->data; EnumPropertyRNA *eprop; - + EnumPropertyItem *item= NULL; + int totitem, free= 0; + rna_idproperty_check(&prop, ptr); eprop= (EnumPropertyRNA*)prop; - - rna_iterator_array_begin(iter, (void*)eprop->item, sizeof(eprop->item[0]), eprop->totitem, rna_enum_check_separator); + + RNA_property_enum_items(NULL, ptr, prop, &item, &totitem, &free); + rna_iterator_array_begin(iter, (void*)item, sizeof(EnumPropertyItem), totitem, free, rna_enum_check_separator); } static void rna_EnumPropertyItem_identifier_get(PointerRNA *ptr, char *value) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index fa81af8f140..3f9b87a7f37 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -179,6 +179,11 @@ static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *C, P ImBuf *ibuf= ED_space_image_buffer(sima); int zbuf, alpha; + if(C==NULL) { + /* needed for doc generation */ + return dc_all_items; + } + alpha= ibuf && (ibuf->channels == 4); zbuf= ibuf && (ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels==1)); diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index 67328455a77..9ff474b82b0 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -56,7 +56,7 @@ static PointerRNA rna_World_mist_get(PointerRNA *ptr) static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { World *wo= (World*)ptr->data; - rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, NULL); + rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL); } static PointerRNA rna_World_active_texture_get(PointerRNA *ptr) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 49bca247431..9ce9ec8e838 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -225,10 +225,16 @@ static char *pyrna_enum_as_string(PointerRNA *ptr, PropertyRNA *prop) { EnumPropertyItem *item; char *result; - int free; + int free= 0; RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); - result= (char*)BPy_enum_as_string(item); + if(item) { + result= (char*)BPy_enum_as_string(item); + } + else { + result= ""; + } + if(free) MEM_freeN(item); @@ -319,12 +325,12 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) ret = PyUnicode_FromString( identifier ); } else { EnumPropertyItem *item; - int free; + int free= 0; /* don't throw error here, can't trust blender 100% to give the * right values, python code should not generate error for that */ RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); - if(item->identifier) { + if(item && item->identifier) { ret = PyUnicode_FromString( item->identifier ); } else { @@ -1831,20 +1837,12 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) if (RNA_property_enum_identifier(BPy_GetContext(), ptr, prop, val, &identifier)) { ret = PyUnicode_FromString( identifier ); } else { - EnumPropertyItem *item; - int free; - - /* don't throw error here, can't trust blender 100% to give the - * right values, python code should not generate error for that */ - RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); - if(item[0].identifier) - ret = PyUnicode_FromString( item[0].identifier ); - else - ret = PyUnicode_FromString( "" ); - - if(free) - MEM_freeN(item); - + /* prefer not fail silently incase of api errors, maybe disable it later */ + char error_str[128]; + sprintf(error_str, "RNA Warning: Current value \"%d\" matches no enum", val); + PyErr_Warn(PyExc_RuntimeWarning, error_str); + + ret = PyUnicode_FromString( "" ); /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val); ret = NULL;*/ } From 8f98c5e87352c3622176913f80a4b6f5c72cea32 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Mon, 13 Jul 2009 22:35:04 +0000 Subject: [PATCH 190/512] Fix cloth UI + tooltips - patch provided by nudelZ --- release/ui/buttons_physic_cloth.py | 45 ++++++++++++---------- source/blender/makesrna/intern/rna_cloth.c | 10 ++--- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/release/ui/buttons_physic_cloth.py b/release/ui/buttons_physic_cloth.py index edb778b4dce..277a6dfe760 100644 --- a/release/ui/buttons_physic_cloth.py +++ b/release/ui/buttons_physic_cloth.py @@ -40,19 +40,23 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel): split = layout.split() - col = split.column() + col = split.column(align=True) col.itemR(cloth, "quality", slider=True) col.itemR(cloth, "gravity") - subcol = col.column(align=True) - subcol.itemR(cloth, "mass") - subcol.item_pointerR(cloth, "mass_vertex_group", ob, "vertex_groups", text="") - - col = split.column() - col.itemL(text="Stiffness:") + col.itemR(cloth, "pin_cloth", text="Pin") + col = col.column(align=True) + col.active = cloth.pin_cloth + col.itemR(cloth, "pin_stiffness", text="Stiffness") + col.item_pointerR(cloth, "mass_vertex_group", ob, "vertex_groups", text="") + + col = split.column(align=True) + col.itemL(text="Presets...") + col.itemL(text="") + col.itemR(cloth, "mass") col.itemR(cloth, "structural_stiffness", text="Structural") col.itemR(cloth, "bending_stiffness", text="Bending") - col.itemL(text="Damping:") + col.itemL(text="Damping") col.itemR(cloth, "spring_damping", text="Spring") col.itemR(cloth, "air_damping", text="Air") @@ -133,21 +137,21 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): def draw(self, context): layout = self.layout cloth = context.cloth.collision_settings + split = layout.split() - layout.active = cloth.enable_collision + layout.active = cloth.enable_collision - col = layout.column_flow() - col.itemR(cloth, "collision_quality", slider=True) + col = split.column(align=True) + col.itemR(cloth, "collision_quality", slider=True, text="Quality") + col.itemR(cloth, "min_distance", text="Distance") col.itemR(cloth, "friction") - col.itemR(cloth, "min_distance", text="MinDistance") - - layout.itemR(cloth, "enable_self_collision", text="Self Collision") - - col = layout.column_flow() + col = split.column(align="True") + col.itemR(cloth, "enable_self_collision", text="Self Collision") + col = col.column(align=True) col.active = cloth.enable_self_collision - col.itemR(cloth, "self_collision_quality", slider=True) - col.itemR(cloth, "self_min_distance", text="MinDistance") + col.itemR(cloth, "self_collision_quality", slider=True, text="Quality") + col.itemR(cloth, "self_min_distance", text="Distance") class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_stiffness" @@ -173,16 +177,15 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): sub = split.column(align=True) sub.itemL(text="Structural Stiffness:") - sub.item_pointerR(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="") sub.itemR(cloth, "structural_stiffness_max", text="Max") + sub.item_pointerR(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="") sub = split.column(align=True) sub.itemL(text="Bending Stiffness:") - sub.item_pointerR(cloth, "bending_vertex_group", ob, "vertex_groups", text="") sub.itemR(cloth, "bending_stiffness_max", text="Max") + sub.item_pointerR(cloth, "bending_vertex_group", ob, "vertex_groups", text="") bpy.types.register(PHYSICS_PT_cloth) bpy.types.register(PHYSICS_PT_cloth_cache) bpy.types.register(PHYSICS_PT_cloth_collision) bpy.types.register(PHYSICS_PT_cloth_stiffness) - diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index cefd2316fbf..95b580ac298 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -215,7 +215,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "mass_vertex_group", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, "rna_ClothSettings_mass_vgroup_get", "rna_ClothSettings_mass_vgroup_length", "rna_ClothSettings_mass_vgroup_set"); - RNA_def_property_ui_text(prop, "Mass Vertex Group", "Vertex group for fine control over mass distribution."); + RNA_def_property_ui_text(prop, "Mass Vertex Group", "Vertex Group for pinning of vertices."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_VECTOR); @@ -235,7 +235,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "pin_cloth", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_GOAL); - RNA_def_property_ui_text(prop, "Pin Cloth", "Define forces for vertices to stick to animated position."); + RNA_def_property_ui_text(prop, "Pin Cloth", "Enable pinning of cloth vertices to other objects/positions."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "pin_stiffness", PROP_FLOAT, PROP_NONE); @@ -363,18 +363,18 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "epsilon"); RNA_def_property_range(prop, 0.001f, 1.0f); - RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in, can be changed for each frame."); + RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "friction", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 80.0f); - RNA_def_property_ui_text(prop, "Friction", "Friction force if a collision happened (0=movement not changed, 100=no movement left)"); + RNA_def_property_ui_text(prop, "Friction", "Friction force if a collision happened (higher = less movement)."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "collision_quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "loop_count"); RNA_def_property_range(prop, 1, 20); - RNA_def_property_ui_text(prop, "Collision Quality", "How many collision iterations should be done. (higher is better quality but slower)"); + RNA_def_property_ui_text(prop, "Collision Quality", "How many collision iterations should be done (higher is better quality but slower)."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); /* self collision */ From 0bfc98706ef93f90bd74b195b98c36c7dcea94dd Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 14 Jul 2009 04:13:04 +0000 Subject: [PATCH 191/512] RNA/button tweaks: * Texture -> renamed 'no rgb' to 'rgb to intensity' (btw it's not just for image textures ) * Render -> stamp closed by default - not taking effect, because saved in .B.blend. How do we fix this? * Material -> removed 'Buffer Bias' dependency - it's for receiving shadows, not casting them * Material -> Ray Shadow bias renamed 'Auto Ray bias' - switches between an automatically calculated value vs the specified value --- release/ui/buttons_material.py | 10 ++++------ release/ui/buttons_scene.py | 1 + release/ui/buttons_texture.py | 14 +++++--------- source/blender/makesrna/intern/rna_material.c | 2 +- source/blender/makesrna/intern/rna_space.c | 4 ++++ source/blender/makesrna/intern/rna_texture.c | 4 ++-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index e2404979773..c9df957ee02 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -142,14 +142,12 @@ class MATERIAL_PT_options(MaterialButtonsPanel): sub.itemR(mat, "cast_shadows_only", text="Cast Only") sub.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) - sub.itemR(mat, "ray_shadow_bias") + sub.itemR(mat, "ray_shadow_bias", text="Auto Ray Bias") colsub = sub.column() - colsub.active = mat.ray_shadow_bias - colsub.itemR(mat, "shadow_ray_bias", text="Raytracing Bias") + colsub.active = not mat.ray_shadow_bias + colsub.itemR(mat, "shadow_ray_bias", text="Ray Shadow Bias") sub.itemR(mat, "cast_buffer_shadows") - colsub = sub.column() - colsub.active = mat.cast_buffer_shadows - colsub.itemR(mat, "shadow_buffer_bias", text="Buffer Bias") + sub.itemR(mat, "shadow_buffer_bias", text="Buffer Bias") class MATERIAL_PT_diffuse(MaterialButtonsPanel): __idname__= "MATERIAL_PT_diffuse" diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 50cb8f7dbfd..00af3a325c4 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -371,6 +371,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel): class RENDER_PT_stamp(RenderButtonsPanel): __label__ = "Stamp" + __default_closed__ = True def draw_header(self, context): rd = context.scene.render_data diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 2aea2b478be..05c28073b8d 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -140,15 +140,11 @@ class TEXTURE_PT_influence(TextureButtonsPanel): colsub.active = tex.map_color colsub.itemR(tex, "color_factor", text="Opacity", slider=True) colsub.itemR(tex, "blend_type") - if textype.type == 'IMAGE': - col.itemR(tex, "no_rgb") - - colsub = col.column() - colsub.active = tex.no_rgb - colsub.itemR(tex, "color") - else: - col.itemR(tex, "color") - + col.itemR(tex, "rgb_to_intensity") + colsub = col.column() + colsub.active = tex.rgb_to_intensity + colsub.itemR(tex, "color") + col.itemR(tex, "map_colorspec") col.itemR(tex, "map_normal") colsub = col.column() diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 17c91088761..b0164bda27c 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -456,7 +456,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna) prop= RNA_def_property(srna, "fresnel_fac", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fresnel_mir_i"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, 0.0f, 5.0f); RNA_def_property_ui_text(prop, "Fresnel Factor", "Blending factor for Fresnel."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 3f9b87a7f37..697548de817 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -544,6 +544,10 @@ static void rna_def_space_3dview(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SOLID_TEX); RNA_def_property_ui_text(prop, "Textured Solid", "Display face-assigned textures in solid view"); + prop= RNA_def_property(srna, "display_background_image", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPIC); + RNA_def_property_ui_text(prop, "Display Background Image", "Display a reference image behind objects in the 3D View"); + prop= RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "around"); RNA_def_property_enum_items(prop, pivot_items); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 2a7f65e2d90..9ba98d766cc 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -270,9 +270,9 @@ static void rna_def_mtex(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Negate", "Inverts the values of the texture to reverse its effect."); RNA_def_property_update(prop, NC_TEXTURE, NULL); - prop= RNA_def_property(srna, "no_rgb", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "rgb_to_intensity", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_RGBTOINT); - RNA_def_property_ui_text(prop, "No RGB", "Converts texture RGB values to intensity (gray) values."); + RNA_def_property_ui_text(prop, "RGB to Intensity", "Converts texture RGB values to intensity (gray) values."); RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_VECTOR); From 047c9e0e4e02e61019f7e0e141933cc0d3416633 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 14 Jul 2009 10:59:21 +0000 Subject: [PATCH 192/512] 2.5 - Scrollbars are now shown when a list of panels can't fit in view Notes: - These may be taking up a bit too much room in some situations. Perhaps an option to turn these on/off is needed? - I've added a quick hack in area.c -> ED_region_panels_init() to set the flags to make scrollbars show up in regions whose View2D data has already been initialised. This is primarily aimed at the Buttons Window in the 2.5 defaults file, which seems to have been saved in 2.5 or so - The expand icons on either end of the scrollers don't really seem to be necessary? (or not working yet) --- source/blender/blenloader/intern/readfile.c | 2 ++ source/blender/editors/interface/view2d.c | 6 ++++-- source/blender/editors/interface/view2d_ops.c | 1 + source/blender/editors/screen/area.c | 11 ++++++++++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 06092cc97d4..12d95888c0e 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5839,6 +5839,8 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) { SpaceButs *sbuts= (SpaceButs *)sl; memcpy(&ar->v2d, &sbuts->v2d, sizeof(View2D)); + + ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); break; } case SPACE_FILE: diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 6df7b1c8e28..2f92901c8f5 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -262,6 +262,8 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->align= (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); v2d->keeptot= V2D_KEEPTOT_BOUNDS; + v2d->scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + v2d->tot.xmin= 0.0f; v2d->tot.xmax= winx; @@ -270,10 +272,10 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->cur.xmin= 0.0f; v2d->cur.xmax= winx*style->panelzoom; - + v2d->cur.ymax= 0.0f; v2d->cur.ymin= -winy*style->panelzoom; - + v2d->cur.ymax= 0.0f; v2d->cur.ymin= -winy*style->panelzoom; } diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 14872f05f8a..c6688aea5c5 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -1404,5 +1404,6 @@ void UI_view2d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_out", PADMINUS, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_in", PADPLUSKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_reset", HOMEKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "VIEW2D_OT_scroller_activate", LEFTMOUSE, KM_PRESS, 0, 0); } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 69af4fbb45d..e923a3bde61 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1116,6 +1116,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex PanelType *pt; Panel *panel; View2D *v2d= &ar->v2d; + View2DScrollers *scrollers; float col[3]; int xco, yco, x, y, miny=0, w, em, header, triangle, open; @@ -1242,12 +1243,20 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex /* restore view matrix */ UI_view2d_view_restore(C); + + /* scrollers */ + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); } void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) { ListBase *keymap; - + + // XXX quick hack for files saved with 2.5 already (i.e. the builtin defaults file) + ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy); keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0); From 77a5fccb1fd5aa8bbd3417d98ca8af854e45cbfe Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 14 Jul 2009 11:56:24 +0000 Subject: [PATCH 193/512] 2.5 Outliner - Restoring a few operators Restored the following operators * Show Hierarchy (HomeKey) * Show/Hide One Level (+/- Keys) * Show Active (Numpad .) --- .../blender/editors/space_outliner/outliner.c | 150 ++++++++++++------ .../editors/space_outliner/outliner_intern.h | 3 + .../editors/space_outliner/outliner_ops.c | 13 ++ 3 files changed, 116 insertions(+), 50 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 4776b42b631..b6d1f31dd5c 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1528,7 +1528,7 @@ void outliner_toggle_selected(ARegion *ar, SpaceOops *soops) soops->storeflag |= SO_TREESTORE_REDRAW; } - +/* helper function for Show/Hide one level operator */ static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curlevel, int level, int open) { TreeElement *te; @@ -1548,6 +1548,44 @@ static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curleve } } +static int outliner_one_level_exec(bContext *C, wmOperator *op) +{ + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + ARegion *ar= CTX_wm_region(C); + int add= RNA_boolean_get(op->ptr, "open"); + int level; + + level= outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1); + if(add==1) { + if(level) outliner_openclose_level(soops, &soops->tree, 1, level, 1); + } + else { + if(level==0) level= outliner_count_levels(soops, &soops->tree, 0); + if(level) outliner_openclose_level(soops, &soops->tree, 1, level-1, 0); + } + + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +void OUTLINER_OT_show_one_level(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Show/Hide One Level"; + ot->idname= "OUTLINER_OT_show_one_level"; + + /* callbacks */ + ot->exec= outliner_one_level_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "open", 1, "Open", "Expand all entries one level deep."); +} + /* return 1 when levels were opened */ static int outliner_open_back(SpaceOops *soops, TreeElement *te) { @@ -1590,22 +1628,7 @@ static void outliner_open_reveal(SpaceOops *soops, ListBase *lb, TreeElement *te } #endif -void outliner_one_level(SpaceOops *soops, int add) -{ - int level; - - level= outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1); - if(add==1) { - if(level) outliner_openclose_level(soops, &soops->tree, 1, level, 1); - } - else { - if(level==0) level= outliner_count_levels(soops, &soops->tree, 0); - if(level) outliner_openclose_level(soops, &soops->tree, 1, level-1, 0); - } - - BIF_undo_push("Outliner show/hide one level"); -} - +// XXX just use View2D ops for this? void outliner_page_up_down(Scene *scene, ARegion *ar, SpaceOops *soops, int up) { int dy= ar->v2d.mask.ymax-ar->v2d.mask.ymin; @@ -2235,6 +2258,7 @@ static int outliner_activate_click(bContext *C, wmOperator *op, wmEvent *event) BIF_undo_push("Outliner selection event"); } + // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -2302,53 +2326,57 @@ static TreeElement *outliner_find_id(SpaceOops *soops, ListBase *lb, ID *id) return NULL; } -void outliner_show_active(Scene *scene, ARegion *ar, SpaceOops *so) +static int outliner_show_active_exec(bContext *C, wmOperator *op) { + SpaceOops *so= (SpaceOops *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); + View2D *v2d= &ar->v2d; + TreeElement *te; int xdelta, ytop; - if(OBACT == NULL) return; + // TODO: make this get this info from context instead... + if (OBACT == NULL) + return OPERATOR_CANCELLED; te= outliner_find_id(so, &so->tree, (ID *)OBACT); - if(te) { + if (te) { /* make te->ys center of view */ - ytop= (int)(te->ys + (ar->v2d.mask.ymax-ar->v2d.mask.ymin)/2); - if(ytop>0) ytop= 0; - ar->v2d.cur.ymax= (float)ytop; - ar->v2d.cur.ymin= (float)(ytop-(ar->v2d.mask.ymax-ar->v2d.mask.ymin)); + ytop= (int)(te->ys + (v2d->mask.ymax - v2d->mask.ymin)/2); + if (ytop>0) ytop= 0; + + v2d->cur.ymax= (float)ytop; + v2d->cur.ymin= (float)(ytop-(v2d->mask.ymax - v2d->mask.ymin)); /* make te->xs ==> te->xend center of view */ - xdelta = (int)(te->xs - ar->v2d.cur.xmin); - ar->v2d.cur.xmin += xdelta; - ar->v2d.cur.xmax += xdelta; + xdelta = (int)(te->xs - v2d->cur.xmin); + v2d->cur.xmin += xdelta; + v2d->cur.xmax += xdelta; so->storeflag |= SO_TREESTORE_REDRAW; } + + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } -void outliner_show_selected(Scene *scene, ARegion *ar, SpaceOops *so) +void OUTLINER_OT_show_active(wmOperatorType *ot) { - TreeElement *te; - int xdelta, ytop; + /* identifiers */ + ot->name= "Show Active"; + ot->idname= "OUTLINER_OT_show_active"; + ot->description= "Adjust the view so that the active Object is shown centered."; - te= outliner_find_id(so, &so->tree, (ID *)OBACT); - if(te) { - /* make te->ys center of view */ - ytop= (int)(te->ys + (ar->v2d.mask.ymax-ar->v2d.mask.ymin)/2); - if(ytop>0) ytop= 0; - ar->v2d.cur.ymax= (float)ytop; - ar->v2d.cur.ymin= (float)(ytop-(ar->v2d.mask.ymax-ar->v2d.mask.ymin)); - - /* make te->xs ==> te->xend center of view */ - xdelta = (int)(te->xs - ar->v2d.cur.xmin); - ar->v2d.cur.xmin += xdelta; - ar->v2d.cur.xmax += xdelta; - - so->storeflag |= SO_TREESTORE_REDRAW; - } + /* callbacks */ + ot->exec= outliner_show_active_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } - /* find next element that has this name */ static TreeElement *outliner_find_named(SpaceOops *soops, ListBase *lb, char *name, int flags, TreeElement *prev, int *prevFound) { @@ -2488,6 +2516,7 @@ void outliner_find_panel(Scene *scene, ARegion *ar, SpaceOops *soops, int again, } } +/* helper function for tree_element_shwo_hierarchy() - recursively checks whether subtrees have any objects*/ static int subtree_has_objects(SpaceOops *soops, ListBase *lb) { TreeElement *te; @@ -2501,6 +2530,7 @@ static int subtree_has_objects(SpaceOops *soops, ListBase *lb) return 0; } +/* recursive helper function for Show Hierarchy operator */ static void tree_element_show_hierarchy(Scene *scene, SpaceOops *soops, ListBase *lb) { TreeElement *te; @@ -2521,19 +2551,39 @@ static void tree_element_show_hierarchy(Scene *scene, SpaceOops *soops, ListBase } } else tselem->flag |= TSE_CLOSED; - + if(tselem->flag & TSE_CLOSED); else tree_element_show_hierarchy(scene, soops, &te->subtree); } - } /* show entire object level hierarchy */ -void outliner_show_hierarchy(Scene *scene, SpaceOops *soops) +static int outliner_show_hierarchy_exec(bContext *C, wmOperator *op) { + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + ARegion *ar= CTX_wm_region(C); + Scene *scene= CTX_data_scene(C); + /* recursively open/close levels */ tree_element_show_hierarchy(scene, soops, &soops->tree); - BIF_undo_push("Outliner show hierarchy"); + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +void OUTLINER_OT_show_hierarchy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Show Hierarchy"; + ot->idname= "OUTLINER_OT_show_hierarchy"; + ot->description= "Open all object entries and close all others."; + + /* callbacks */ + ot->exec= outliner_show_hierarchy_exec; + ot->poll= ED_operator_outliner_active; // TODO: shouldn't be allowed in RNA views... + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } void outliner_select(SpaceOops *soops, ListBase *lb, int *index, short *selecting) diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 204298f2b70..263de4efc5b 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -120,6 +120,9 @@ void outliner_select(struct SpaceOops *soops, struct ListBase *lb, int *index, s void draw_outliner(const struct bContext *C); void OUTLINER_OT_activate_click(struct wmOperatorType *ot); +void OUTLINER_OT_show_one_level(struct wmOperatorType *ot); +void OUTLINER_OT_show_active(struct wmOperatorType *ot); +void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot); void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot); void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 0efbdb06cd2..d07a3ea299e 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -45,6 +45,10 @@ void outliner_operatortypes(void) { WM_operatortype_append(OUTLINER_OT_activate_click); + WM_operatortype_append(OUTLINER_OT_show_one_level); + WM_operatortype_append(OUTLINER_OT_show_active); + WM_operatortype_append(OUTLINER_OT_show_hierarchy); + WM_operatortype_append(OUTLINER_OT_keyingset_add_selected); WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected); @@ -58,6 +62,15 @@ void outliner_keymap(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OUTLINER_OT_activate_click", LEFTMOUSE, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0); + + WM_keymap_verify_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "OUTLINER_OT_show_active", PADPERIOD, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADPLUSKEY, KM_PRESS, 0, 0); /* open */ + RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADMINUS, KM_PRESS, 0, 0)->ptr, "open", 0); /* close */ + + /* keying sets - only for databrowse */ WM_keymap_verify_item(keymap, "OUTLINER_OT_keyingset_add_selected", KKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "OUTLINER_OT_keyingset_remove_selected", KKEY, KM_PRESS, KM_ALT, 0); From 6e1e212162f986cafdfae089bbf4cec7a6d99857 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 14 Jul 2009 12:23:08 +0000 Subject: [PATCH 194/512] 2.5 Outliner - Restored all the 'toggle' operators * AKEY - Toggle Outliner Selection (*1) * Shift-AKEY - Expand/Collapse All * RKEY - Toggle Renderability * SKEY - Toggle Selectability * VKEY - Toggle Visiblity (*1) - The keymap-order of these has been swapped from the ones used in 2.4x. The old keys used here were inconsistent with the rest of Blender (at least I found myself always getting annoyed that I'd accidentally collapsed/expanded all items by hitting AKEY many times). --- .../blender/editors/space_outliner/outliner.c | 145 +++++++++++++++--- .../editors/space_outliner/outliner_intern.h | 8 + .../editors/space_outliner/outliner_ops.c | 15 ++ 3 files changed, 150 insertions(+), 18 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index b6d1f31dd5c..e99774a8b9f 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -98,6 +98,7 @@ #include "UI_view2d.h" #include "RNA_access.h" +#include "RNA_define.h" #include "ED_armature.h" #include "ED_keyframing.h" @@ -1445,6 +1446,8 @@ static void outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short } } +/* --- */ + void object_toggle_visibility_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { Scene *scene= NULL; // XXX @@ -1456,15 +1459,36 @@ void object_toggle_visibility_cb(TreeElement *te, TreeStoreElem *tsep, TreeStore } } -void outliner_toggle_visibility(Scene *scene, SpaceOops *soops) +static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op) { - + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); + outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_visibility_cb); - BIF_undo_push("Outliner toggle selectability"); - + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } +void OUTLINER_OT_visibility_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Visability"; + ot->idname= "OUTLINER_OT_visibility_toggle"; + ot->description= "Toggle the visibility of selected items."; + + /* callbacks */ + ot->exec= outliner_toggle_visibility_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --- */ + static void object_toggle_selectability_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { Scene *scene= NULL; // XXX @@ -1476,15 +1500,36 @@ static void object_toggle_selectability_cb(TreeElement *te, TreeStoreElem *tsep, } } -void outliner_toggle_selectability(Scene *scene, SpaceOops *soops) +static int outliner_toggle_selectability_exec(bContext *C, wmOperator *op) { + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_selectability_cb); - BIF_undo_push("Outliner toggle selectability"); - + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } +void OUTLINER_OT_selectability_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Selectability"; + ot->idname= "OUTLINER_OT_selectability_toggle"; + ot->description= "Toggle the selectability"; + + /* callbacks */ + ot->exec= outliner_toggle_selectability_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --- */ + void object_toggle_renderability_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { Scene *scene= NULL; // XXX @@ -1496,38 +1541,102 @@ void object_toggle_renderability_cb(TreeElement *te, TreeStoreElem *tsep, TreeSt } } -void outliner_toggle_renderability(Scene *scene, SpaceOops *soops) +static int outliner_toggle_renderability_exec(bContext *C, wmOperator *op) { - + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); + outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_renderability_cb); - BIF_undo_push("Outliner toggle renderability"); - + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } -void outliner_toggle_visible(SpaceOops *soops) +void OUTLINER_OT_renderability_toggle(wmOperatorType *ot) { + /* identifiers */ + ot->name= "Toggle Renderability"; + ot->idname= "OUTLINER_OT_renederability_toggle"; + ot->description= "Toggle the renderbility of selected items."; - if( outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1)) + /* callbacks */ + ot->exec= outliner_toggle_renderability_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --- */ + +static int outliner_toggle_expanded_exec(bContext *C, wmOperator *op) +{ + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + ARegion *ar= CTX_wm_region(C); + + if (outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1)) outliner_set_flag(soops, &soops->tree, TSE_CLOSED, 0); else outliner_set_flag(soops, &soops->tree, TSE_CLOSED, 1); - - BIF_undo_push("Outliner toggle visible"); + + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } -void outliner_toggle_selected(ARegion *ar, SpaceOops *soops) +void OUTLINER_OT_expanded_toggle(wmOperatorType *ot) { + /* identifiers */ + ot->name= "Expand/Collapse All"; + ot->idname= "OUTLINER_OT_expanded_toggle"; + ot->description= "Expand/Collapse all items."; - if( outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1)) + /* callbacks */ + ot->exec= outliner_toggle_expanded_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --- */ + +static int outliner_toggle_selected_exec(bContext *C, wmOperator *op) +{ + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + ARegion *ar= CTX_wm_region(C); + + if (outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1)) outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0); else outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 1); - BIF_undo_push("Outliner toggle selected"); soops->storeflag |= SO_TREESTORE_REDRAW; + + // XXX need proper notifiers here instead + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; } +void OUTLINER_OT_selected_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Selected"; + ot->idname= "OUTLINER_OT_selected_toggle"; + ot->description= "Toggle the Outliner selection of items."; + + /* callbacks */ + ot->exec= outliner_toggle_selected_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --- */ + /* helper function for Show/Hide one level operator */ static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curlevel, int level, int open) { diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 263de4efc5b..69f88fbcca7 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -120,10 +120,18 @@ void outliner_select(struct SpaceOops *soops, struct ListBase *lb, int *index, s void draw_outliner(const struct bContext *C); void OUTLINER_OT_activate_click(struct wmOperatorType *ot); + void OUTLINER_OT_show_one_level(struct wmOperatorType *ot); void OUTLINER_OT_show_active(struct wmOperatorType *ot); void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot); +void OUTLINER_OT_selected_toggle(struct wmOperatorType *ot); +void OUTLINER_OT_expanded_toggle(struct wmOperatorType *ot); + +void OUTLINER_OT_renderability_toggle(struct wmOperatorType *ot); +void OUTLINER_OT_selectability_toggle(struct wmOperatorType *ot); +void OUTLINER_OT_visibility_toggle(struct wmOperatorType *ot); + void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot); void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index d07a3ea299e..36ee64f10fd 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -33,6 +33,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "RNA_define.h" #include "ED_screen.h" #include "outliner_intern.h" @@ -49,6 +50,13 @@ void outliner_operatortypes(void) WM_operatortype_append(OUTLINER_OT_show_active); WM_operatortype_append(OUTLINER_OT_show_hierarchy); + WM_operatortype_append(OUTLINER_OT_selected_toggle); + WM_operatortype_append(OUTLINER_OT_expanded_toggle); + + WM_operatortype_append(OUTLINER_OT_renderability_toggle); + WM_operatortype_append(OUTLINER_OT_selectability_toggle); + WM_operatortype_append(OUTLINER_OT_visibility_toggle); + WM_operatortype_append(OUTLINER_OT_keyingset_add_selected); WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected); @@ -70,6 +78,13 @@ void outliner_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADPLUSKEY, KM_PRESS, 0, 0); /* open */ RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADMINUS, KM_PRESS, 0, 0)->ptr, "open", 0); /* close */ + WM_keymap_verify_item(keymap, "OUTLINER_OT_selected_toggle", AKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "OUTLINER_OT_expanded_toggle", AKEY, KM_PRESS, KM_SHIFT, 0); + + WM_keymap_verify_item(keymap, "OUTLINER_OT_renderability_toggle", RKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "OUTLINER_OT_selectability_toggle", SKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "OUTLINER_OT_visibility_toggle", VKEY, KM_PRESS, 0, 0); + /* keying sets - only for databrowse */ WM_keymap_verify_item(keymap, "OUTLINER_OT_keyingset_add_selected", KKEY, KM_PRESS, 0, 0); From 99e369d38d545f766e8bc07d75f85c611675e63c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 14 Jul 2009 12:32:19 +0000 Subject: [PATCH 195/512] 2.5 Buttons: * Some Updates for n-key Areas in View3D and Image Editor and some tweaks in bone panels. Patch by William Reynish. Thanks! --- release/ui/buttons_data_bone.py | 18 +++ release/ui/space_view3d.py | 83 ++++++++++++- .../editors/space_image/image_buttons.c | 77 +++++++----- .../editors/space_view3d/view3d_buttons.c | 117 ++++++++++-------- 4 files changed, 205 insertions(+), 90 deletions(-) diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index 98c7f2f8e54..2ebb4bf2f60 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -23,6 +23,23 @@ class BONE_PT_context_bone(BoneButtonsPanel): split.itemL(text="", icon="ICON_BONE_DATA") split.itemR(bone, "name", text="") +class BONE_PT_transform_bone(BoneButtonsPanel): + __idname__ = "BONE_PT_transform_bone" + __label__ = "Transform" + + def draw(self, context): + layout = self.layout + bone = context.bone + if not bone: + bone = context.edit_bone + +#Seems to be missing from RNA? + row = layout.row() + row.column().itemR(bone, "location") + row.column().itemR(bone, "rotation") + row.column().itemR(bone, "scale") + + class BONE_PT_bone(BoneButtonsPanel): __idname__ = "BONE_PT_bone" __label__ = "Bone" @@ -93,5 +110,6 @@ class BONE_PT_deform(BoneButtonsPanel): bpy.types.register(BONE_PT_context_bone) +bpy.types.register(BONE_PT_transform_bone) bpy.types.register(BONE_PT_bone) bpy.types.register(BONE_PT_deform) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index c338241d5d7..77a25c0161e 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -90,17 +90,92 @@ class VIEW3D_HT_header(bpy.types.Header): layout.template_header_3D() -class VIEW3D_PT_random_panel(bpy.types.Panel): +class VIEW3D_PT_3dview_properties(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "UI" - __label__ = "Random Panel" + __label__ = "View" + + def poll(self, context): + view = context.space_data + return (view) def draw(self, context): + view = context.space_data layout = self.layout - layout.itemL(text="panel contents") + + split = layout.split() + col = split.column() + col.itemR(view, "camera") + col.itemR(view, "lens") + col.itemL(text="Clip:") + col.itemR(view, "clip_start", text="Start") + col.itemR(view, "clip_end", text="End") + col.itemL(text="Grid:") + col.itemR(view, "grid_spacing", text="Spacing") + col.itemR(view, "grid_subdivisions", text="Subdivisions") + +class VIEW3D_PT_3dview_display(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "UI" + __label__ = "Display" + + def poll(self, context): + view = context.space_data + return (view) + + def draw(self, context): + view = context.space_data + layout = self.layout + + split = layout.split() + col = split.column() + col.itemR(view, "display_floor", text="Grid Floor") + col.itemR(view, "display_x_axis", text="X Axis") + col.itemR(view, "display_y_axis", text="Y Axis") + col.itemR(view, "display_z_axis", text="Z Axis") + col.itemR(view, "outline_selected") + col.itemR(view, "all_object_centers") + col.itemR(view, "relationship_lines") + col.itemR(view, "textured_solid") + +class VIEW3D_PT_background_image(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "UI" + __label__ = "Background Image" + + def poll(self, context): + view = context.space_data + bg = context.space_data.background_image + return (view) + + def draw_header(self, context): + layout = self.layout + view = context.space_data + + layout.itemR(view, "display_background_image", text="") + + def draw(self, context): + view = context.space_data + bg = context.space_data.background_image + layout = self.layout + + layout.active = view.display_background_image + split = layout.split() + col = split.column() + col.itemR(bg, "image") +# col.itemR(bg, "image_user") + col.itemR(bg, "size") + col.itemR(bg, "transparency", slider=True) + col.itemL(text="Offset:") + col.itemR(bg, "x_offset", text="X") + col.itemR(bg, "y_offset", text="Y") + bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) bpy.types.register(VIEW3D_HT_header) -bpy.types.register(VIEW3D_PT_random_panel) +bpy.types.register(VIEW3D_PT_3dview_properties) +bpy.types.register(VIEW3D_PT_3dview_display) +bpy.types.register(VIEW3D_PT_background_image) + diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index edf9bcbd896..2294c9e73ce 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -1243,20 +1243,20 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I // XXX uiSetButLock(ima->id.lib!=NULL, ERROR_LIBDATA_MESSAGE); uiBlockBeginAlign(block); uiBlockSetFunc(block, image_src_change_cb, ima, iuser); - uiDefButS(block, ROW, imagechanged, "Still", 10, 180, 60, 20, &ima->source, 0.0, IMA_SRC_FILE, 0, 0, "Single Image file"); - uiDefButS(block, ROW, imagechanged, "Movie", 70, 180, 60, 20, &ima->source, 0.0, IMA_SRC_MOVIE, 0, 0, "Movie file"); - uiDefButS(block, ROW, imagechanged, "Sequence", 130, 180, 90, 20, &ima->source, 0.0, IMA_SRC_SEQUENCE, 0, 0, "Multiple Image files, as a sequence"); - uiDefButS(block, ROW, imagechanged, "Generated", 220, 180, 90, 20, &ima->source, 0.0, IMA_SRC_GENERATED, 0, 0, "Generated Image"); + uiDefButS(block, ROW, imagechanged, "Still", 0, 180, 105, 20, &ima->source, 0.0, IMA_SRC_FILE, 0, 0, "Single Image file"); + uiDefButS(block, ROW, imagechanged, "Movie", 105, 180, 105, 20, &ima->source, 0.0, IMA_SRC_MOVIE, 0, 0, "Movie file"); + uiDefButS(block, ROW, imagechanged, "Sequence", 210, 180, 105, 20, &ima->source, 0.0, IMA_SRC_SEQUENCE, 0, 0, "Multiple Image files, as a sequence"); + uiDefButS(block, ROW, imagechanged, "Generated", 315, 180, 105, 20, &ima->source, 0.0, IMA_SRC_GENERATED, 0, 0, "Generated Image"); uiBlockSetFunc(block, NULL, NULL, NULL); } else - uiDefBut(block, LABEL, 0, " ", 10, 180, 300, 20, 0, 0, 0, 0, 0, ""); /* for align in panel */ + uiDefBut(block, LABEL, 0, " ", 0, 180, 440, 20, 0, 0, 0, 0, 0, ""); /* for align in panel */ /* Browse */ IMAnames_to_pupstring(&strp, NULL, NULL, &(CTX_data_main(C)->image), NULL, &iuser->menunr); uiBlockBeginAlign(block); - but= uiDefButS(block, MENU, imagechanged, strp, 10,155,23,20, &iuser->menunr, 0, 0, 0, 0, "Selects an existing Image or Movie"); + but= uiDefButS(block, MENU, imagechanged, strp, 0,155,40,20, &iuser->menunr, 0, 0, 0, 0, "Selects an existing Image or Movie"); uiButSetFunc(but, image_browse_cb, ima_pp, iuser); MEM_freeN(strp); @@ -1265,31 +1265,34 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I if(ima) { int drawpack= (ima->source!=IMA_SRC_SEQUENCE && ima->source!=IMA_SRC_MOVIE && ima->ok); - but= uiDefBut(block, TEX, B_IDNAME, "IM:", 33, 155, 177, 20, ima->id.name+2, 0.0, 21.0, 0, 0, "Current Image Datablock name."); + but= uiDefBut(block, TEX, B_IDNAME, "IM:", 40, 155, 220, 20, ima->id.name+2, 0.0, 21.0, 0, 0, "Current Image Datablock name."); uiButSetFunc(but, test_idbutton_cb, ima->id.name, NULL); - but= uiDefBut(block, BUT, imagechanged, "Reload", 210, 155, 60, 20, NULL, 0, 0, 0, 0, "Reloads Image or Movie"); + but= uiDefBut(block, BUT, imagechanged, "Reload", 260, 155, 70, 20, NULL, 0, 0, 0, 0, "Reloads Image or Movie"); uiButSetFunc(but, image_reload_cb, ima, iuser); - but= uiDefIconBut(block, BUT, imagechanged, ICON_X, 270,155,20,20, 0, 0, 0, 0, 0, "Unlink Image block"); + but= uiDefIconBut(block, BUT, imagechanged, ICON_X, 330, 155, 40, 20, 0, 0, 0, 0, 0, "Unlink Image block"); uiButSetFunc(but, image_unlink_cb, ima_pp, NULL); sprintf(str, "%d", ima->id.us); - uiDefBut(block, BUT, B_NOP, str, 290,155,20,20, 0, 0, 0, 0, 0, "Only displays number of users of Image block"); + uiDefBut(block, BUT, B_NOP, str, 370, 155, 40, 20, 0, 0, 0, 0, 0, "Only displays number of users of Image block"); + uiBlockEndAlign(block); - but= uiDefIconBut(block, BUT, imagechanged, ICON_FILESEL, 10, 135, 23, 20, 0, 0, 0, 0, 0, "Open Fileselect to load new Image"); + uiBlockBeginAlign(block); + but= uiDefIconBut(block, BUT, imagechanged, ICON_FILESEL, 0, 130, 40, 20, 0, 0, 0, 0, 0, "Open Fileselect to load new Image"); uiButSetFunc(but, image_load_fs_cb, ima_pp, iuser); - but= uiDefBut(block, TEX, imagechanged, "", 33,135,257+(drawpack?0:20),20, ima->name, 0.0, 239.0, 0, 0, "Image/Movie file name, change to load new"); + but= uiDefBut(block, TEX, imagechanged, "", 40,130, 340+(drawpack?0:20),20, ima->name, 0.0, 239.0, 0, 0, "Image/Movie file name, change to load new"); uiButSetFunc(but, image_load_cb, ima_pp, iuser); + uiBlockEndAlign(block); if(drawpack) { if (ima->packedfile) packdummy = 1; else packdummy = 0; - but= uiDefIconButBitI(block, TOG, 1, redraw, ICON_PACKAGE, 290,135,20,20, &packdummy, 0, 0, 0, 0, "Toggles Packed status of this Image"); + but= uiDefIconButBitI(block, TOG, 1, redraw, ICON_PACKAGE, 380, 130, 40, 20, &packdummy, 0, 0, 0, 0, "Toggles Packed status of this Image"); uiButSetFunc(but, image_pack_cb, ima, iuser); } } else { - but= uiDefBut(block, BUT, imagechanged, "Load", 33, 155, 100,20, NULL, 0, 0, 0, 0, "Load new Image of Movie"); + but= uiDefBut(block, BUT, imagechanged, "Load", 33, 155, 200,20, NULL, 0, 0, 0, 0, "Load new Image of Movie"); uiButSetFunc(but, image_load_fs_cb, ima_pp, iuser); } uiBlockEndAlign(block); @@ -1320,46 +1323,54 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I /* left side default per-image options, right half the additional options */ /* fields */ - uiBlockBeginAlign(block); - but= uiDefButBitS(block, TOGBUT, IMA_FIELDS, imagechanged, "Fields", 10, 70, 65, 20, &ima->flag, 0, 0, 0, 0, "Click to enable use of fields in Image"); + + but= uiDefButBitS(block, TOGBUT, IMA_FIELDS, imagechanged, "Fields", 0, 80, 200, 20, &ima->flag, 0, 0, 0, 0, "Click to enable use of fields in Image"); uiButSetFunc(but, image_field_test, ima, iuser); - uiDefButBitS(block, TOGBUT, IMA_STD_FIELD, B_NOP, "Odd", 75, 70, 45, 20, &ima->flag, 0, 0, 0, 0, "Standard Field Toggle"); + uiDefButBitS(block, TOGBUT, IMA_STD_FIELD, B_NOP, "Odd", 0, 55, 200, 20, &ima->flag, 0, 0, 0, 0, "Standard Field Toggle"); + uiBlockSetFunc(block, image_reload_cb, ima, iuser); - uiDefButBitS(block, TOGBUT, IMA_ANTIALI, B_NOP, "Anti", 10, 50, 45, 20, &ima->flag, 0, 0, 0, 0, "Toggles Image anti-aliasing, only works with solid colors"); - uiDefButBitS(block, TOGBUT, IMA_DO_PREMUL, imagechanged, "Premul", 55, 50, 65, 20, &ima->flag, 0, 0, 0, 0, "Toggles premultiplying alpha"); - uiBlockEndAlign(block); + uiDefButBitS(block, TOGBUT, IMA_ANTIALI, B_NOP, "Anti", 0, 5, 200, 20, &ima->flag, 0, 0, 0, 0, "Toggles Image anti-aliasing, only works with solid colors"); + uiDefButBitS(block, TOGBUT, IMA_DO_PREMUL, imagechanged, "Premul", 0, -20, 200, 20, &ima->flag, 0, 0, 0, 0, "Toggles premultiplying alpha"); + if( ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { sprintf(str, "(%d) Frames:", iuser->framenr); - uiBlockBeginAlign(block); + //uiBlockBeginAlign(block); uiBlockSetFunc(block, image_user_change, iuser, NULL); - uiDefButBitS(block, TOG, IMA_ANIM_ALWAYS, B_NOP, "Auto Refresh", 120, 70, 190, 20, &iuser->flag, 0, 0, 0, 0, "Always refresh Image on frame changes"); - + if(ima->anim) { - uiDefButI(block, NUM, imagechanged, str, 120, 50,170, 20, &iuser->frames, 0.0, MAXFRAMEF, 0, 0, "Sets the number of images of a movie to use"); - but= uiDefBut(block, BUT, redraw, "<", 290, 50, 20, 20, 0, 0, 0, 0, 0, "Copies number of frames in movie file to Frames: button"); + uiBlockBeginAlign(block); + uiDefButI(block, NUM, imagechanged, str, 220, 80, 160, 20, &iuser->frames, 0.0, MAXFRAMEF, 0, 0, "Sets the number of images of a movie to use"); + but= uiDefBut(block, BUT, redraw, "<", 380, 80, 40, 20, 0, 0, 0, 0, 0, "Copies number of frames in movie file to Frames: button"); uiButSetFunc(but, set_frames_cb, ima, iuser); + uiBlockEndAlign(block); } else - uiDefButI(block, NUM, imagechanged, str, 120, 50,190, 20, &iuser->frames, 0.0, MAXFRAMEF, 0, 0, "Sets the number of images of a movie to use"); + uiDefButI(block, NUM, imagechanged, str, 220, 80, 200, 20, &iuser->frames, 0.0, MAXFRAMEF, 0, 0, "Sets the number of images of a movie to use"); - uiDefButI(block, NUM, imagechanged, "Offs:", 120,30,100,20, &iuser->offset, -MAXFRAMEF, MAXFRAMEF, 0, 0, "Offsets the number of the frame to use in the animation"); - uiDefButS(block, NUM, imagechanged, "Fie/Ima:", 220,30,90,20, &iuser->fie_ima, 1.0, 200.0, 0, 0, "The number of fields per rendered frame (2 fields is 1 image)"); + uiDefButI(block, NUM, imagechanged, "Start Frame:", 220, 55, 200, 20, &iuser->sfra, 1.0, MAXFRAMEF, 0, 0, "Sets the global starting frame of the movie"); + uiDefButI(block, NUM, imagechanged, "Offset:", 220, 30, 200, 20, &iuser->offset, -MAXFRAMEF, MAXFRAMEF, 0, 0, "Offsets the number of the frame to use in the animation"); + uiDefButS(block, NUM, imagechanged, "Fields:", 0, 30, 200, 20, &iuser->fie_ima, 1.0, 200.0, 0, 0, "The number of fields per rendered frame (2 fields is 1 image)"); - uiDefButI(block, NUM, imagechanged, "StartFr:", 120,10,100,20, &iuser->sfra, 1.0, MAXFRAMEF, 0, 0, "Sets the global starting frame of the movie"); - uiDefButS(block, TOG, imagechanged, "Cyclic", 220,10,90,20, &iuser->cycl, 0.0, 1.0, 0, 0, "Cycle the images in the movie"); + uiDefButBitS(block, TOG, IMA_ANIM_ALWAYS, B_NOP, "Auto Refresh", 220, 5, 200, 20, &iuser->flag, 0, 0, 0, 0, "Always refresh Image on frame changes"); + + uiDefButS(block, TOG, imagechanged, "Cyclic", 220, -20, 200, 20, &iuser->cycl, 0.0, 1.0, 0, 0, "Cycle the images in the movie"); uiBlockSetFunc(block, NULL, iuser, NULL); } else if(ima->source==IMA_SRC_GENERATED) { + uiDefBut(block, LABEL, 0, "Size:", 220, 80, 200, 20, 0, 0, 0, 0, 0, ""); + uiBlockBeginAlign(block); uiBlockSetFunc(block, image_generated_change_cb, ima, iuser); - uiDefButS(block, NUM, imagechanged, "SizeX:", 120,70,100,20, &ima->gen_x, 1.0, 5000.0, 0, 0, "Image size x"); - uiDefButS(block, NUM, imagechanged, "SizeY:", 220,70,90,20, &ima->gen_y, 1.0, 5000.0, 0, 0, "Image size y"); - uiDefButS(block, TOGBUT, imagechanged, "UV Test grid",120,50,190,20, &ima->gen_type, 0.0, 1.0, 0, 0, ""); + uiDefButS(block, NUM, imagechanged, "X:", 220, 55,200,20, &ima->gen_x, 1.0, 5000.0, 0, 0, "Image size x"); + uiDefButS(block, NUM, imagechanged, "Y:", 220, 35,200,20, &ima->gen_y, 1.0, 5000.0, 0, 0, "Image size y"); + uiBlockEndAlign(block); + + uiDefButS(block, TOGBUT, imagechanged, "UV Test grid", 220,10,200,20, &ima->gen_type, 0.0, 1.0, 0, 0, ""); uiBlockSetFunc(block, NULL, NULL, NULL); } } diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 7db577bf139..54fb87904c8 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -301,42 +301,44 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d, else but_y = 150; uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, "Global", 160, but_y, 70, 19, &v3d->flag, 0, 0, 0, 0, "Displays global values"); - uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, "Local", 230, but_y, 70, 19, &v3d->flag, 0, 0, 0, 0, "Displays local values"); + uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, "Global", 0, 20, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays global values"); + uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, "Local", 100, 20, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays local values"); uiBlockEndAlign(block); memcpy(tfp->ve_median, median, sizeof(tfp->ve_median)); uiBlockBeginAlign(block); if(tot==1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Vertex X:", 10, 110, 290, 19, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Vertex Y:", 10, 90, 290, 19, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Vertex Z:", 10, 70, 290, 19, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); + uiDefBut(block, LABEL, 0, "Vertex:", 0, 130, 200, 20, 0, 0, 0, 0, 0, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); if(totw==1) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Vertex W:", 10, 50, 290, 19, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Vertex W:", 0, 50, 200, 19, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); uiBlockEndAlign(block); if(defstr[0]) { - uiDefBut(block, LABEL, 1, "Vertex Deform Groups", 10, 40, 290, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, "Vertex Deform Groups", 0, 40, 200, 20, NULL, 0.0, 0.0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_NOP, "Weight:", 10, 20, 150, 19, tfp->defweightp, 0.0f, 1.0f, 10, 3, "Weight value"); - uiDefButI(block, MENU, B_REDR, defstr, 160, 20, 140, 19, &tfp->curdef, 0.0, 0.0, 0, 0, "Current Vertex Group"); + uiDefButF(block, NUM, B_NOP, "Weight:", 10, 20, 150, 20, tfp->defweightp, 0.0f, 1.0f, 10, 3, "Weight value"); + uiDefButI(block, MENU, B_REDR, defstr, 160, 20, 140, 20, &tfp->curdef, 0.0, 0.0, 0, 0, "Current Vertex Group"); uiBlockEndAlign(block); } else if(totweight) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 10, 20, 290, 19, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 20, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, ""); } else { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median X:", 10, 110, 290, 19, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Y:", 10, 90, 290, 19, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Z:", 10, 70, 290, 19, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); + uiDefBut(block, LABEL, 0, "Median:", 0, 130, 200, 20, 0, 0, 0, 0, 0, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); if(totw==tot) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median W:", 10, 50, 290, 19, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); uiBlockEndAlign(block); if(totweight) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 10, 20, 290, 19, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, "Weight is used for SoftBody Goal"); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 20, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, "Weight is used for SoftBody Goal"); } if(ob->type==OB_CURVE && (totw==0)) { /* bez curves have no w */ @@ -349,9 +351,9 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d, } if(totedge==1) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease W:", 10, 30, 290, 19, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease W:", 0, 45, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); else if(totedge>1) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Crease W:", 10, 30, 290, 19, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Crease W:", 0, 45, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); } else { // apply @@ -1234,15 +1236,15 @@ static void view3d_panel_object(const bContext *C, Panel *pa) if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT)) { } else { - bt= uiDefBut(block, TEX, B_IDNAME, "OB: ", 10,180,140,20, ob->id.name+2, 0.0, 21.0, 0, 0, ""); - uiButSetFunc(bt, test_idbutton_cb, ob->id.name, NULL); + //bt= uiDefBut(block, TEX, B_IDNAME, "OB: ", 10,180,140,20, ob->id.name+2, 0.0, 21.0, 0, 0, ""); + //uiButSetFunc(bt, test_idbutton_cb, ob->id.name, NULL); if((G.f & G_PARTICLEEDIT)==0) { - uiBlockBeginAlign(block); - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_OBJECTPANELPARENT, "Par:", 160, 180, 140, 20, &ob->parent, "Parent Object"); + // uiBlockBeginAlign(block); + // uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_OBJECTPANELPARENT, "Par:", 160, 180, 140, 20, &ob->parent, "Parent Object"); if((ob->parent) && (ob->partype == PARBONE)) { - bt= uiDefBut(block, TEX, B_OBJECTPANELPARENT, "ParBone:", 160, 160, 140, 20, ob->parsubstr, 0, 30, 0, 0, ""); - uiButSetCompleteFunc(bt, autocomplete_bone, (void *)ob->parent); + // bt= uiDefBut(block, TEX, B_OBJECTPANELPARENT, "ParBone:", 160, 160, 140, 20, ob->parsubstr, 0, 30, 0, 0, ""); + // uiButSetCompleteFunc(bt, autocomplete_bone, (void *)ob->parent); } else { strcpy(ob->parsubstr, ""); @@ -1284,14 +1286,15 @@ static void view3d_panel_object(const bContext *C, Panel *pa) } else { BoundBox *bb = NULL; - + + uiDefBut(block, LABEL, 0, "Location:", 10, 170, 100, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCX, B_REDR, ICON_UNLOCKED, 10,150,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANEL, "LocX:", 30, 150, 120, 19, &(ob->loc[0]), -lim, lim, 100, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANEL, "X:", 30, 150, 120, 19, &(ob->loc[0]), -lim, lim, 100, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCY, B_REDR, ICON_UNLOCKED, 10,130,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANEL, "LocY:", 30, 130, 120, 19, &(ob->loc[1]), -lim, lim, 100, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANEL, "Y:", 30, 130, 120, 19, &(ob->loc[1]), -lim, lim, 100, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_LOCZ, B_REDR, ICON_UNLOCKED, 10,110,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANEL, "LocZ:", 30, 110, 120, 19, &(ob->loc[2]), -lim, lim, 100, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANEL, "Z:", 30, 110, 120, 19, &(ob->loc[2]), -lim, lim, 100, 3, ""); tfp->ob_eul[0]= 180.0*ob->rot[0]/M_PI; tfp->ob_eul[1]= 180.0*ob->rot[1]/M_PI; @@ -1299,37 +1302,40 @@ static void view3d_panel_object(const bContext *C, Panel *pa) uiBlockBeginAlign(block); if ((ob->parent) && (ob->partype == PARBONE)) { + uiDefBut(block, LABEL, 0, "Rotation:", 160, 170, 100, 20, 0, 0, 0, 0, 0, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTX, B_REDR, ICON_UNLOCKED, 160,130,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotX:", 180, 130, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "X:", 180, 130, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTY, B_REDR, ICON_UNLOCKED, 160,110,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotY:", 180, 110, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "Y:", 180, 110, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTZ, B_REDR, ICON_UNLOCKED, 160,90,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotZ:", 180, 90, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "Z:", 180, 90, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); } else { + uiDefBut(block, LABEL, 0, "Rotation:", 160, 170, 100, 20, 0, 0, 0, 0, 0, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTX, B_REDR, ICON_UNLOCKED, 160,150,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotX:", 180, 150, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "X:", 180, 150, 120, 19, &(tfp->ob_eul[0]), -lim, lim, 1000, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTY, B_REDR, ICON_UNLOCKED, 160,130,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotY:", 180, 130, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "Y:", 180, 130, 120, 19, &(tfp->ob_eul[1]), -lim, lim, 1000, 3, ""); uiDefIconButBitS(block, ICONTOG, OB_LOCK_ROTZ, B_REDR, ICON_UNLOCKED, 160,110,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELROT, "RotZ:", 180, 110, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELROT, "Z:", 180, 110, 120, 19, &(tfp->ob_eul[2]), -lim, lim, 1000, 3, ""); } tfp->ob_scale[0]= ob->size[0]; tfp->ob_scale[1]= ob->size[1]; tfp->ob_scale[2]= ob->size[2]; + uiDefBut(block, LABEL, 0, "Scale:", 10, 90, 100, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEX, B_REDR, ICON_UNLOCKED, 10,80,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "ScaleX:", 30, 80, 120, 19, &(tfp->ob_scale[0]), -lim, lim, 10, 3, ""); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEY, B_REDR, ICON_UNLOCKED, 10,60,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "ScaleY:", 30, 60, 120, 19, &(tfp->ob_scale[1]), -lim, lim, 10, 3, ""); - uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEZ, B_REDR, ICON_UNLOCKED, 10,40,20,19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); - uiDefButF(block, NUM, B_OBJECTPANELSCALE, "ScaleZ:", 30, 40, 120, 19, &(tfp->ob_scale[2]), -lim, lim, 10, 3, ""); + uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEX, B_REDR, ICON_UNLOCKED, 10, 70, 20, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); + uiDefButF(block, NUM, B_OBJECTPANELSCALE, "X:", 30, 70, 120, 19, &(tfp->ob_scale[0]), -lim, lim, 10, 3, ""); + uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEY, B_REDR, ICON_UNLOCKED, 10, 50, 20, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); + uiDefButF(block, NUM, B_OBJECTPANELSCALE, "Y:", 30, 50, 120, 19, &(tfp->ob_scale[1]), -lim, lim, 10, 3, ""); + uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEZ, B_REDR, ICON_UNLOCKED, 10, 30, 20, 19, &(ob->protectflag), 0, 0, 0, 0, "Protects this value from being Transformed"); + uiDefButF(block, NUM, B_OBJECTPANELSCALE, "Z:", 30, 30, 120, 19, &(tfp->ob_scale[2]), -lim, lim, 10, 3, ""); uiBlockEndAlign(block); - uiDefButS(block, TOG, B_REDR, "Link Scale", 10, 10, 140, 19, &(tfp->link_scale), 0, 1, 0, 0, "Scale values vary proportionally in all directions"); + uiDefButS(block, TOG, B_REDR, "Link Scale", 10, 0, 140, 19, &(tfp->link_scale), 0, 1, 0, 0, "Scale values vary proportionally in all directions"); bb= object_get_boundbox(ob); if (bb) { @@ -1341,17 +1347,21 @@ static void view3d_panel_object(const bContext *C, Panel *pa) tfp->ob_dims[1] = fabs(scale[1]) * (bb->vec[2][1] - bb->vec[0][1]); tfp->ob_dims[2] = fabs(scale[2]) * (bb->vec[1][2] - bb->vec[0][2]); - uiBlockBeginAlign(block); + if ((ob->parent) && (ob->partype == PARBONE)) { - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimX:", 160, 60, 140, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimY:", 160, 40, 140, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimZ:", 160, 20, 140, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefBut(block, LABEL, 0, "Dimensions:", 160, 90, 100, 20, 0, 0, 0, 0, 0, ""); + uiBlockBeginAlign(block); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "X:", 160, 70, 140, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Y:", 160, 50, 140, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Z:", 160, 30, 140, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate bounding box size"); } else { - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimX:", 160, 80, 140, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimY:", 160, 60, 140, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate bounding box size"); - uiDefButF(block, NUM, B_OBJECTPANELDIMS, "DimZ:", 160, 40, 140, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefBut(block, LABEL, 0, "Dimensions:", 160, 90, 100, 20, 0, 0, 0, 0, 0, ""); + uiBlockBeginAlign(block); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "X:", 160, 70, 140, 19, &(tfp->ob_dims[0]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Y:", 160, 50, 140, 19, &(tfp->ob_dims[1]), 0.0, lim, 10, 3, "Manipulate bounding box size"); + uiDefButF(block, NUM, B_OBJECTPANELDIMS, "Z:", 160, 30, 140, 19, &(tfp->ob_dims[2]), 0.0, lim, 10, 3, "Manipulate bounding box size"); } uiBlockEndAlign(block); @@ -1724,29 +1734,30 @@ void view3d_buttons_register(ARegionType *art) pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel object"); strcpy(pt->idname, "VIEW3D_PT_object"); - strcpy(pt->label, "Transform Properties"); + strcpy(pt->label, "Transform"); pt->draw= view3d_panel_object; BLI_addtail(&art->paneltypes, pt); - +/* pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel properties"); strcpy(pt->idname, "VIEW3D_PT_properties"); strcpy(pt->label, "View Properties"); pt->draw= view3d_panel_properties; BLI_addtail(&art->paneltypes, pt); + pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel background"); strcpy(pt->idname, "VIEW3D_PT_background"); strcpy(pt->label, "Background Image"); pt->draw= view3d_panel_background; BLI_addtail(&art->paneltypes, pt); - +*/ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel brush"); strcpy(pt->idname, "VIEW3D_PT_brush"); strcpy(pt->label, "Brush"); pt->draw= view3d_panel_brush; pt->poll= view3d_panel_brush_poll; BLI_addtail(&art->paneltypes, pt); - +/* pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel transform spaces"); strcpy(pt->idname, "VIEW3D_PT_transform spaces"); strcpy(pt->label, "Transform Orientations"); @@ -1758,7 +1769,7 @@ void view3d_buttons_register(ARegionType *art) strcpy(pt->label, "Greas Pencil"); pt->draw= view3d_panel_gpencil; BLI_addtail(&art->paneltypes, pt);*/ - +/* pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel bonesketch spaces"); strcpy(pt->idname, "VIEW3D_PT_bonesketch_spaces"); strcpy(pt->label, "Bone Sketching"); @@ -1771,7 +1782,7 @@ void view3d_buttons_register(ARegionType *art) strcpy(pt->label, "Last Operator"); pt->draw= view3d_panel_operator_redo; BLI_addtail(&art->paneltypes, pt); - +*/ // XXX view3d_panel_preview(C, ar, 0); } From 42e2796a51a69de8f04ee12b606e169537b29a3a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 14 Jul 2009 13:20:46 +0000 Subject: [PATCH 196/512] 2.5 Scene Buttons: * Replaced Render Layer Dot Icons with X ones. Patch by William Reynish. --- release/ui/buttons_scene.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 00af3a325c4..38286c9b86f 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -89,19 +89,19 @@ class RENDER_PT_layers(RenderButtonsPanel): col.itemR(rl, "pass_diffuse") row = col.row() row.itemR(rl, "pass_specular") - row.itemR(rl, "pass_specular_exclude", text="", icon="ICON_DOT") + row.itemR(rl, "pass_specular_exclude", text="", icon="ICON_X") row = col.row() row.itemR(rl, "pass_shadow") - row.itemR(rl, "pass_shadow_exclude", text="", icon="ICON_DOT") + row.itemR(rl, "pass_shadow_exclude", text="", icon="ICON_X") row = col.row() row.itemR(rl, "pass_ao") - row.itemR(rl, "pass_ao_exclude", text="", icon="ICON_DOT") + row.itemR(rl, "pass_ao_exclude", text="", icon="ICON_X") row = col.row() row.itemR(rl, "pass_reflection") - row.itemR(rl, "pass_reflection_exclude", text="", icon="ICON_DOT") + row.itemR(rl, "pass_reflection_exclude", text="", icon="ICON_X") row = col.row() row.itemR(rl, "pass_refraction") - row.itemR(rl, "pass_refraction_exclude", text="", icon="ICON_DOT") + row.itemR(rl, "pass_refraction_exclude", text="", icon="ICON_X") class RENDER_PT_shading(RenderButtonsPanel): __label__ = "Shading" From 3f154c14826d93390d76b2640fd070e19b699c4f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Jul 2009 15:08:07 +0000 Subject: [PATCH 197/512] error in setting the alpha value when drawing text into a char buffer. Would only show the errors with sequencer rendering with the stamp option enabled, since blenders rendering uses a float buffer. --- intern/bmfont/intern/BMF_BitmapFont.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/bmfont/intern/BMF_BitmapFont.cpp b/intern/bmfont/intern/BMF_BitmapFont.cpp index 0111e9c3f93..ea080be9815 100644 --- a/intern/bmfont/intern/BMF_BitmapFont.cpp +++ b/intern/bmfont/intern/BMF_BitmapFont.cpp @@ -275,7 +275,7 @@ void BMF_BitmapFont::DrawStringBuf(char *str, int posx, int posy, float *col, un pixel[1] = colch[1]; pixel[2] = colch[2]; if (channels==4) { - pixel[4] = 1; /*colch[3];*/ + pixel[3] = 1; /*colch[3];*/ } } From 4b3dafcaa765249c0787b41df014f32863cd202f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 14 Jul 2009 17:35:07 +0000 Subject: [PATCH 198/512] RNA * RNA_enum_items_add_value and RNA_enum_item_add_separator utility functions, to add an item from an existing array with a certain value, and to add a separator. --- source/blender/editors/mesh/editmesh_tools.c | 27 +++++++------------ .../transform/transform_orientations.c | 3 +-- source/blender/makesrna/RNA_define.h | 2 ++ source/blender/makesrna/intern/rna_define.c | 13 +++++++++ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index efb68f69dac..6993efefe21 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -5796,19 +5796,12 @@ static EnumPropertyItem merge_type_items[]= { static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free) { + Object *obedit; EnumPropertyItem *item= NULL; int totitem= 0; - Object *obedit; - - if(C==NULL) { - /* needed for doc generation */ - RNA_enum_items_add(&item, &totitem, merge_type_items); - RNA_enum_item_end(&item, &totitem); - - *free= 1; - return item; - } + if(!C) /* needed for docs */ + return merge_type_items; obedit= CTX_data_edit_object(C); if(obedit && obedit->type == OB_MESH) { @@ -5817,18 +5810,18 @@ static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *fre if(em->selectmode & SCE_SELECT_VERTEX) { if(em->selected.first && em->selected.last && ((EditSelection*)em->selected.first)->type == EDITVERT && ((EditSelection*)em->selected.last)->type == EDITVERT) { - RNA_enum_item_add(&item, &totitem, &merge_type_items[0]); - RNA_enum_item_add(&item, &totitem, &merge_type_items[1]); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 6); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 1); } else if(em->selected.first && ((EditSelection*)em->selected.first)->type == EDITVERT) - RNA_enum_item_add(&item, &totitem, &merge_type_items[1]); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 1); else if(em->selected.last && ((EditSelection*)em->selected.last)->type == EDITVERT) - RNA_enum_item_add(&item, &totitem, &merge_type_items[0]); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 6); } - RNA_enum_item_add(&item, &totitem, &merge_type_items[2]); - RNA_enum_item_add(&item, &totitem, &merge_type_items[3]); - RNA_enum_item_add(&item, &totitem, &merge_type_items[4]); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 3); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 4); + RNA_enum_items_add_value(&item, &totitem, merge_type_items, 5); RNA_enum_item_end(&item, &totitem); *free= 1; diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 6d60c7602f4..605eb6996a5 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -366,7 +366,6 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) 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 sepr = {0, "", 0, NULL, NULL}; EnumPropertyItem tmp = {0, "", 0, "", ""}; EnumPropertyItem *item= NULL; int i = V3D_MANIP_CUSTOM, totitem= 0; @@ -386,7 +385,7 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) } if(ts) - RNA_enum_item_add(&item, &totitem, &sepr); + RNA_enum_item_add_separator(&item, &totitem); for(; ts; ts = ts->next) { tmp.identifier = "CUSTOM"; diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index a3fa97bf4b1..aeb6c8edf2d 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -164,7 +164,9 @@ void RNA_def_function_ui_description(FunctionRNA *func, const char *description) * strings are not freed, assumed pointing to static location. */ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item); +void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem); void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item); +void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value); void RNA_enum_item_end(EnumPropertyItem **items, int *totitem); #ifdef __cplusplus diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 07515d3ad56..b651360eda0 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -2284,12 +2284,25 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *totitem= tot+1; } +void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem) +{ + static EnumPropertyItem sepr = {0, "", 0, NULL, NULL}; + RNA_enum_item_add(items, totitem, &sepr); +} + void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item) { for(; item->identifier; item++) RNA_enum_item_add(items, totitem, item); } +void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value) +{ + for(; item->identifier; item++) + if(item->value == value) + RNA_enum_item_add(items, totitem, item); +} + void RNA_enum_item_end(EnumPropertyItem **items, int *totitem) { static EnumPropertyItem empty = {0, NULL, 0, NULL, NULL}; From f1a745c436887d14c8dbe1029154c13dda127ecd Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 14 Jul 2009 17:59:26 +0000 Subject: [PATCH 199/512] 2.5: Armature * Bone Transform panel now works, using appropriate EditBone or PoseChannel properties. * Bone name and parent are now editable. * Some other tweaks to the UI layouts for Armature and Bone. * Notifiers for armature/editbone properties. --- release/ui/buttons_data_armature.py | 39 +- release/ui/buttons_data_bone.py | 82 +++- .../blender/editors/armature/editarmature.c | 8 +- source/blender/editors/armature/poseobject.c | 4 +- source/blender/editors/include/ED_armature.h | 2 +- .../editors/space_buttons/buttons_context.c | 2 + .../blender/editors/space_outliner/outliner.c | 2 +- .../editors/space_view3d/view3d_buttons.c | 8 +- source/blender/makesrna/intern/rna_armature.c | 368 ++++++++++++++---- source/blender/makesrna/intern/rna_pose.c | 42 +- 10 files changed, 422 insertions(+), 135 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index adca70e90dd..94fda908e56 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -42,11 +42,12 @@ class DATA_PT_skeleton(DataButtonsPanel): if arm: - layout.itemR(arm, "rest_position") - split = layout.split() - sub = split.column() + col = split.column() + col.itemR(arm, "rest_position") + + sub = col.column() sub.itemL(text="Deform:") sub.itemR(arm, "deform_vertexgroups", text="Vertes Groups") sub.itemR(arm, "deform_envelope", text="Envelopes") @@ -69,17 +70,14 @@ class DATA_PT_display(DataButtonsPanel): layout = self.layout arm = context.armature - split = layout.split() + layout.row().itemR(arm, "drawtype", expand=True) - sub = split.column() - sub.itemR(arm, "drawtype", text="Style") - sub.itemR(arm, "delay_deform", text="Delay Refresh") - - sub = split.column() + sub = layout.column_flow() sub.itemR(arm, "draw_names", text="Names") sub.itemR(arm, "draw_axes", text="Axes") sub.itemR(arm, "draw_custom_bone_shapes", text="Shapes") sub.itemR(arm, "draw_group_colors", text="Colors") + sub.itemR(arm, "delay_deform", text="Delay Refresh") class DATA_PT_paths(DataButtonsPanel): __idname__ = "DATA_PT_paths" @@ -93,14 +91,15 @@ class DATA_PT_paths(DataButtonsPanel): sub = split.column() sub.itemR(arm, "paths_show_around_current_frame", text="Around Frame") + col = sub.column(align=True) if (arm.paths_show_around_current_frame): - sub.itemR(arm, "path_before_current", text="Before") - sub.itemR(arm, "path_after_current", text="After") + col.itemR(arm, "path_before_current", text="Before") + col.itemR(arm, "path_after_current", text="After") else: - sub.itemR(arm, "path_start_frame", text="Start") - sub.itemR(arm, "path_end_frame", text="End") + col.itemR(arm, "path_start_frame", text="Start") + col.itemR(arm, "path_end_frame", text="End") - sub.itemR(arm, "path_size", text="Step") + col.itemR(arm, "path_size", text="Step") sub.itemR(arm, "paths_calculate_head_positions", text="Head") sub = split.column() @@ -121,13 +120,15 @@ class DATA_PT_ghost(DataButtonsPanel): sub = split.column() sub.itemR(arm, "ghost_type", text="Scope") + + col = sub.column(align=True) if arm.ghost_type == 'RANGE': - sub.itemR(arm, "ghost_start_frame", text="Start") - sub.itemR(arm, "ghost_end_frame", text="End") - sub.itemR(arm, "ghost_size", text="Step") + col.itemR(arm, "ghost_start_frame", text="Start") + col.itemR(arm, "ghost_end_frame", text="End") + col.itemR(arm, "ghost_size", text="Step") elif arm.ghost_type == 'CURRENT_FRAME': - sub.itemR(arm, "ghost_step", text="Range") - sub.itemR(arm, "ghost_size", text="Step") + col.itemR(arm, "ghost_step", text="Range") + col.itemR(arm, "ghost_size", text="Step") sub = split.column() sub.itemR(arm, "ghost_only_selected", text="Selected Only") diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index 2ebb4bf2f60..7678a3d4780 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -23,22 +23,51 @@ class BONE_PT_context_bone(BoneButtonsPanel): split.itemL(text="", icon="ICON_BONE_DATA") split.itemR(bone, "name", text="") -class BONE_PT_transform_bone(BoneButtonsPanel): - __idname__ = "BONE_PT_transform_bone" +class BONE_PT_transform(BoneButtonsPanel): + __idname__ = "BONE_PT_transform" __label__ = "Transform" def draw(self, context): layout = self.layout + ob = context.object bone = context.bone + if not bone: bone = context.edit_bone -#Seems to be missing from RNA? - row = layout.row() - row.column().itemR(bone, "location") - row.column().itemR(bone, "rotation") - row.column().itemR(bone, "scale") + row = layout.row() + row.column().itemR(bone, "head") + row.column().itemR(bone, "tail") + col = row.column() + sub = col.column(align=True) + sub.itemL(text="Roll:") + sub.itemR(bone, "roll", text="") + sub.itemL() + sub.itemR(bone, "locked") + sub.itemS() + else: + pchan = ob.pose.pose_channels[context.bone.name] + + layout.itemR(pchan, "rotation_mode") + + row = layout.row() + col = row.column() + col.itemR(pchan, "location") + col.active = not (bone.parent and bone.connected) + + col = row.column() + if pchan.rotation_mode == 'QUATERNION': + col.itemR(pchan, "rotation", text="Rotation") + else: + col.itemR(pchan, "euler_rotation", text="Rotation") + + row.column().itemR(pchan, "scale") + + if pchan.rotation_mode == 'QUATERNION': + col = layout.column(align=True) + col.itemL(text="Euler:") + col.row().itemR(pchan, "euler_rotation", text="") class BONE_PT_bone(BoneButtonsPanel): __idname__ = "BONE_PT_bone" @@ -48,14 +77,21 @@ class BONE_PT_bone(BoneButtonsPanel): def draw(self, context): layout = self.layout bone = context.bone + arm = context.armature if not bone: bone = context.edit_bone split = layout.split() sub = split.column() - sub.itemR(bone, "parent") - sub.itemR(bone, "connected") + sub.itemL(text="Parent:") + if context.bone: + sub.itemR(bone, "parent", text="") + else: + sub.item_pointerR(bone, "parent", arm, "edit_bones", text="") + row = sub.row() + row.itemR(bone, "connected") + row.active = bone.parent != None sub.itemL(text="Layers:") sub.template_layers(bone, "layer") @@ -70,8 +106,6 @@ class BONE_PT_bone(BoneButtonsPanel): sub.itemR(bone, "draw_wire", text="Wireframe") sub.itemR(bone, "hidden", text="Hide") - - class BONE_PT_deform(BoneButtonsPanel): __idname__ = "BONE_PT_deform" __label__ = "Deform" @@ -94,22 +128,30 @@ class BONE_PT_deform(BoneButtonsPanel): split = layout.split() - sub = split.column() - sub.itemL(text="Envelope:") + col = split.column() + col.itemL(text="Envelope:") + sub = col.column(align=True) sub.itemR(bone, "envelope_distance", text="Distance") sub.itemR(bone, "envelope_weight", text="Weight") - sub.itemR(bone, "multiply_vertexgroup_with_envelope", text="Multiply") - sub = split.column() - - sub.itemL(text="Curved Bones:") + col.itemR(bone, "multiply_vertexgroup_with_envelope", text="Multiply") + + sub = col.column(align=True) + sub.itemL(text="Radius:") + sub.itemR(bone, "head_radius", text="Head") + sub.itemR(bone, "tail_radius", text="Tail") + + col = split.column() + col.itemL(text="Curved Bones:") + sub = col.column(align=True) sub.itemR(bone, "bbone_segments", text="Segments") sub.itemR(bone, "bbone_in", text="Ease In") sub.itemR(bone, "bbone_out", text="Ease Out") - sub.itemR(bone, "cyclic_offset") - + col.itemL(text="Offset:") + col.itemR(bone, "cyclic_offset") bpy.types.register(BONE_PT_context_bone) -bpy.types.register(BONE_PT_transform_bone) +bpy.types.register(BONE_PT_transform) bpy.types.register(BONE_PT_bone) bpy.types.register(BONE_PT_deform) + diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index d00f4c770d1..49f13d99af9 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -5095,9 +5095,9 @@ static void constraint_bone_name_fix(Object *ob, ListBase *conlist, char *oldnam /* called by UI for renaming a bone */ /* warning: make sure the original bone was not renamed yet! */ /* seems messy, but thats what you get with not using pointers but channel names :) */ -void armature_bone_rename(Object *ob, char *oldnamep, char *newnamep) +void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep) { - bArmature *arm= ob->data; + Object *ob; char newname[MAXBONENAME]; char oldname[MAXBONENAME]; @@ -5242,7 +5242,7 @@ void armature_flip_names(Scene *scene) if (ebone->flag & BONE_SELECTED) { BLI_strncpy(newname, ebone->name, sizeof(newname)); bone_flip_name(newname, 1); // 1 = do strip off number extensions - armature_bone_rename(obedit, ebone->name, newname); + ED_armature_bone_rename(arm, ebone->name, newname); } } } @@ -5263,7 +5263,7 @@ void armature_autoside_names(Scene *scene, short axis) if (ebone->flag & BONE_SELECTED) { BLI_strncpy(newname, ebone->name, sizeof(newname)); bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis]); - armature_bone_rename(obedit, ebone->name, newname); + ED_armature_bone_rename(arm, ebone->name, newname); } } } diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 2913d1d13d9..f7d926ea18d 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -1346,7 +1346,7 @@ void pose_flip_names(Scene *scene) if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { BLI_strncpy(newname, pchan->name, sizeof(newname)); bone_flip_name(newname, 1); // 1 = do strip off number extensions - armature_bone_rename(ob, pchan->name, newname); + ED_armature_bone_rename(arm, pchan->name, newname); } } } @@ -1375,7 +1375,7 @@ void pose_autoside_names(Scene *scene, short axis) if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { BLI_strncpy(newname, pchan->name, sizeof(newname)); bone_autoside_name(newname, 1, axis, pchan->bone->head[axis], pchan->bone->tail[axis]); - armature_bone_rename(ob, pchan->name, newname); + ED_armature_bone_rename(arm, pchan->name, newname); } } } diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index a9823bd9ff1..d699b0d46b2 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -116,7 +116,7 @@ void docenter_armature (struct Scene *scene, struct View3D *v3d, struct Object * void auto_align_armature(struct Scene *scene, struct View3D *v3d, short mode); void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone); /* if bone is already in list, pass it as param to ignore it */ -void armature_bone_rename(struct Object *ob, char *oldnamep, char *newnamep); +void ED_armature_bone_rename(struct bArmature *arm, char *oldnamep, char *newnamep); void undo_push_armature(struct bContext *C, char *name); diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 24d5fcc648a..b7e2a3325cb 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -415,6 +415,8 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma break; case BCONTEXT_BONE: found= buttons_context_path_bone(path); + if(!found) + found= buttons_context_path_data(path, OB_ARMATURE); break; default: found= 0; diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index e99774a8b9f..40324a5a65f 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1559,7 +1559,7 @@ void OUTLINER_OT_renderability_toggle(wmOperatorType *ot) { /* identifiers */ ot->name= "Toggle Renderability"; - ot->idname= "OUTLINER_OT_renederability_toggle"; + ot->idname= "OUTLINER_OT_renderability_toggle"; ot->description= "Toggle the renderbility of selected items."; /* callbacks */ diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 54fb87904c8..fba263f30d5 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -481,7 +481,7 @@ static void validate_bonebutton_cb(bContext *C, void *bonev, void *namev) /* restore */ BLI_strncpy(bone->name, oldname, 32); - armature_bone_rename(ob, oldname, newname); // editarmature.c + ED_armature_bone_rename(ob->data, oldname, newname); // editarmature.c } } @@ -553,7 +553,7 @@ void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) /* restore */ BLI_strncpy(eBone->name, oldname, 32); - armature_bone_rename(CTX_data_edit_object(C), oldname, newname); // editarmature.c + ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } @@ -1215,7 +1215,7 @@ static void view3d_panel_object(const bContext *C, Panel *pa) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); View3D *v3d= CTX_wm_view3d(C); - uiBut *bt; + //uiBut *bt; Object *ob= OBACT; TransformProperties *tfp; float lim; @@ -1764,7 +1764,7 @@ void view3d_buttons_register(ARegionType *art) pt->draw= view3d_panel_transform_spaces; BLI_addtail(&art->paneltypes, pt); - /*pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel gpencil"); + pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel gpencil"); strcpy(pt->idname, "VIEW3D_PT_gpencil"); strcpy(pt->label, "Greas Pencil"); pt->draw= view3d_panel_gpencil; diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index caa970eff57..4c8f5597e1e 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -30,14 +30,49 @@ #include "rna_internal.h" #include "DNA_armature_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "WM_api.h" #include "WM_types.h" #ifdef RNA_RUNTIME +#include "BLI_arithb.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_main.h" + #include "ED_armature.h" +static void rna_Armature_update_data(bContext *C, PointerRNA *ptr) +{ + Main *bmain= CTX_data_main(C); + Scene *scene= CTX_data_scene(C); + ID *id= ptr->id.data; + Object *ob; + + for(ob=bmain->object.first; ob; ob= ob->id.next) { + if(ob->data == id) { + /* XXX this will loop over all objects again (slow) */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + } + } +} + +static void rna_Armature_redraw_data(bContext *C, PointerRNA *ptr) +{ + Main *bmain= CTX_data_main(C); + ID *id= ptr->id.data; + Object *ob; + + for(ob=bmain->object.first; ob; ob= ob->id.next) + if(ob->data == id) + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); +} + static void rna_bone_layer_set(short *layer, const int *values) { int i, tot= 0; @@ -109,73 +144,81 @@ static void rna_Armature_path_end_frame_set(PointerRNA *ptr, int value) data->pathef= value; } -PointerRNA rna_EditBone_rna_type_get(PointerRNA *ptr) -{ - return rna_builtin_type_get(ptr); -} - -void rna_EditBone_name_get(PointerRNA *ptr, char *value) +static void rna_EditBone_name_get(PointerRNA *ptr, char *value) { EditBone *data= (EditBone*)(ptr->data); BLI_strncpy(value, data->name, sizeof(data->name)); } -int rna_EditBone_name_length(PointerRNA *ptr) +static int rna_EditBone_name_length(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return strlen(data->name); } -int rna_EditBone_active_get(PointerRNA *ptr) +static void rna_EditBone_name_set(PointerRNA *ptr, const char *value) +{ + bArmature *arm= (bArmature*)ptr->id.data; + EditBone *ebone= (EditBone*)ptr->data; + char oldname[32], newname[32]; + + /* need to be on the stack */ + BLI_strncpy(newname, value, 32); + BLI_strncpy(oldname, ebone->name, 32); + + ED_armature_bone_rename(arm, oldname, newname); +} + +static int rna_EditBone_active_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_ACTIVE) != 0); } -void rna_EditBone_active_set(PointerRNA *ptr, int value) +static void rna_EditBone_active_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_ACTIVE; else data->flag &= ~BONE_ACTIVE; } -float rna_EditBone_bbone_in_get(PointerRNA *ptr) +static float rna_EditBone_bbone_in_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->ease1); } -void rna_EditBone_bbone_in_set(PointerRNA *ptr, float value) +static void rna_EditBone_bbone_in_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->ease1= CLAMPIS(value, 0.0f, 2.0f); } -float rna_EditBone_bbone_out_get(PointerRNA *ptr) +static float rna_EditBone_bbone_out_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->ease2); } -void rna_EditBone_bbone_out_set(PointerRNA *ptr, float value) +static void rna_EditBone_bbone_out_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->ease2= CLAMPIS(value, 0.0f, 2.0f); } -int rna_EditBone_bbone_segments_get(PointerRNA *ptr) +static int rna_EditBone_bbone_segments_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (int)(data->segments); } -void rna_EditBone_bbone_segments_set(PointerRNA *ptr, int value) +static void rna_EditBone_bbone_segments_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); data->segments= CLAMPIS(value, 1, 32); } -void rna_EditBone_layer_get(PointerRNA *ptr, int values[16]) +static void rna_EditBone_layer_get(PointerRNA *ptr, int values[16]) { EditBone *data= (EditBone*)(ptr->data); values[0]= ((data->layer & (1<<0)) != 0); @@ -196,113 +239,135 @@ void rna_EditBone_layer_get(PointerRNA *ptr, int values[16]) values[15]= ((data->layer & (1<<15)) != 0); } -void rna_EditBone_layer_set(PointerRNA *ptr, const int values[16]) +static void rna_EditBone_layer_set(PointerRNA *ptr, const int values[16]) { EditBone *data= (EditBone*)(ptr->data); rna_bone_layer_set(&data->layer, values); } -int rna_EditBone_connected_get(PointerRNA *ptr) +static void rna_EditBone_connected_check(EditBone *ebone) +{ + if(ebone->parent) { + if(ebone->flag & BONE_CONNECTED) { + /* Attach this bone to its parent */ + VECCOPY(ebone->head, ebone->parent->tail); + + if(ebone->flag & BONE_ROOTSEL) + ebone->parent->flag |= BONE_TIPSEL; + } + else if(!(ebone->parent->flag & BONE_ROOTSEL)) { + ebone->parent->flag &= ~BONE_TIPSEL; + } + } +} + +static int rna_EditBone_connected_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_CONNECTED) != 0); } -void rna_EditBone_connected_set(PointerRNA *ptr, int value) +static void rna_EditBone_connected_set(PointerRNA *ptr, int value) { - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_CONNECTED; - else data->flag &= ~BONE_CONNECTED; + EditBone *ebone= (EditBone*)(ptr->data); + + if(value) ebone->flag |= BONE_CONNECTED; + else ebone->flag &= ~BONE_CONNECTED; + + rna_EditBone_connected_check(ebone); } -int rna_EditBone_cyclic_offset_get(PointerRNA *ptr) +static int rna_EditBone_cyclic_offset_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (!((data->flag) & BONE_NO_CYCLICOFFSET) != 0); } -void rna_EditBone_cyclic_offset_set(PointerRNA *ptr, int value) +static void rna_EditBone_cyclic_offset_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(!value) data->flag |= BONE_NO_CYCLICOFFSET; else data->flag &= ~BONE_NO_CYCLICOFFSET; } -int rna_EditBone_deform_get(PointerRNA *ptr) +static int rna_EditBone_deform_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (!((data->flag) & BONE_NO_DEFORM) != 0); } -void rna_EditBone_deform_set(PointerRNA *ptr, int value) +static void rna_EditBone_deform_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(!value) data->flag |= BONE_NO_DEFORM; else data->flag &= ~BONE_NO_DEFORM; } -int rna_EditBone_draw_wire_get(PointerRNA *ptr) +static int rna_EditBone_draw_wire_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_DRAWWIRE) != 0); } -void rna_EditBone_draw_wire_set(PointerRNA *ptr, int value) +static void rna_EditBone_draw_wire_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_DRAWWIRE; else data->flag &= ~BONE_DRAWWIRE; } -float rna_EditBone_envelope_distance_get(PointerRNA *ptr) +static float rna_EditBone_envelope_distance_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->dist); } -void rna_EditBone_envelope_distance_set(PointerRNA *ptr, float value) +static void rna_EditBone_envelope_distance_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->dist= CLAMPIS(value, 0.0f, 1000.0f); } -float rna_EditBone_envelope_weight_get(PointerRNA *ptr) +static float rna_EditBone_envelope_weight_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->weight); } -void rna_EditBone_envelope_weight_set(PointerRNA *ptr, float value) +static void rna_EditBone_envelope_weight_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->weight= CLAMPIS(value, 0.0f, 1000.0f); } -float rna_EditBone_radius_head_get(PointerRNA *ptr) +static float rna_EditBone_radius_head_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->rad_head); } -void rna_EditBone_radius_head_set(PointerRNA *ptr, float value) +static void rna_EditBone_radius_head_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); - data->rad_head= value; + if(data->parent) + data->parent->rad_tail= value; + else + data->rad_head= value; } -float rna_EditBone_radius_tail_get(PointerRNA *ptr) +static float rna_EditBone_radius_tail_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->rad_tail); } -void rna_EditBone_radius_tail_set(PointerRNA *ptr, float value) +static void rna_EditBone_radius_tail_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->rad_tail= value; } -void rna_EditBone_head_get(PointerRNA *ptr, float values[3]) +static void rna_EditBone_head_get(PointerRNA *ptr, float values[3]) { EditBone *data= (EditBone*)(ptr->data); values[0]= (float)(((float*)data->head)[0]); @@ -310,7 +375,7 @@ void rna_EditBone_head_get(PointerRNA *ptr, float values[3]) values[2]= (float)(((float*)data->head)[2]); } -void rna_EditBone_head_set(PointerRNA *ptr, const float values[3]) +static void rna_EditBone_head_set(PointerRNA *ptr, const float values[3]) { EditBone *data= (EditBone*)(ptr->data); ((float*)data->head)[0]= values[0]; @@ -318,103 +383,133 @@ void rna_EditBone_head_set(PointerRNA *ptr, const float values[3]) ((float*)data->head)[2]= values[2]; } -int rna_EditBone_head_selected_get(PointerRNA *ptr) +static int rna_EditBone_head_selected_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_ROOTSEL) != 0); } -void rna_EditBone_head_selected_set(PointerRNA *ptr, int value) +static void rna_EditBone_head_selected_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_ROOTSEL; else data->flag &= ~BONE_ROOTSEL; } -int rna_EditBone_hidden_get(PointerRNA *ptr) +static int rna_EditBone_hidden_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_HIDDEN_A) != 0); } -void rna_EditBone_hidden_set(PointerRNA *ptr, int value) +static void rna_EditBone_hidden_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_HIDDEN_A; else data->flag &= ~BONE_HIDDEN_A; } -int rna_EditBone_hinge_get(PointerRNA *ptr) +static int rna_EditBone_hinge_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (!((data->flag) & BONE_HINGE) != 0); } -void rna_EditBone_hinge_set(PointerRNA *ptr, int value) +static void rna_EditBone_hinge_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(!value) data->flag |= BONE_HINGE; else data->flag &= ~BONE_HINGE; } -int rna_EditBone_inherit_scale_get(PointerRNA *ptr) +static int rna_EditBone_inherit_scale_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (!((data->flag) & BONE_NO_SCALE) != 0); } -void rna_EditBone_inherit_scale_set(PointerRNA *ptr, int value) +static void rna_EditBone_inherit_scale_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(!value) data->flag |= BONE_NO_SCALE; else data->flag &= ~BONE_NO_SCALE; } -int rna_EditBone_locked_get(PointerRNA *ptr) +static int rna_EditBone_locked_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_EDITMODE_LOCKED) != 0); } -void rna_EditBone_locked_set(PointerRNA *ptr, int value) +static void rna_EditBone_locked_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_EDITMODE_LOCKED; else data->flag &= ~BONE_EDITMODE_LOCKED; } -int rna_EditBone_multiply_vertexgroup_with_envelope_get(PointerRNA *ptr) +static int rna_EditBone_multiply_vertexgroup_with_envelope_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_MULT_VG_ENV) != 0); } -void rna_EditBone_multiply_vertexgroup_with_envelope_set(PointerRNA *ptr, int value) +static void rna_EditBone_multiply_vertexgroup_with_envelope_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_MULT_VG_ENV; else data->flag &= ~BONE_MULT_VG_ENV; } -PointerRNA rna_EditBone_parent_get(PointerRNA *ptr) +static PointerRNA rna_EditBone_parent_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return rna_pointer_inherit_refine(ptr, &RNA_EditBone, data->parent); } -float rna_EditBone_roll_get(PointerRNA *ptr) +static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value) +{ + EditBone *ebone= (EditBone*)(ptr->data); + EditBone *pbone, *parbone= (EditBone*)value.data; + + /* within same armature */ + if(value.id.data != ptr->id.data) + return; + + if(parbone == NULL) { + if(ebone->parent && !(ebone->parent->flag & BONE_ROOTSEL)) + ebone->parent->flag &= ~BONE_TIPSEL; + + ebone->parent = NULL; + ebone->flag &= ~BONE_CONNECTED; + } + else { + /* make sure this is a valid child */ + if(parbone == ebone) + return; + + for(pbone= parbone->parent; pbone; pbone=pbone->parent) + if(pbone == ebone) + return; + + ebone->parent = parbone; + rna_EditBone_connected_check(ebone); + } +} + +static float rna_EditBone_roll_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (float)(data->roll); } -void rna_EditBone_roll_set(PointerRNA *ptr, float value) +static void rna_EditBone_roll_set(PointerRNA *ptr, float value) { EditBone *data= (EditBone*)(ptr->data); data->roll= value; } -void rna_EditBone_tail_get(PointerRNA *ptr, float values[3]) +static void rna_EditBone_tail_get(PointerRNA *ptr, float values[3]) { EditBone *data= (EditBone*)(ptr->data); values[0]= (float)(((float*)data->tail)[0]); @@ -422,7 +517,7 @@ void rna_EditBone_tail_get(PointerRNA *ptr, float values[3]) values[2]= (float)(((float*)data->tail)[2]); } -void rna_EditBone_tail_set(PointerRNA *ptr, const float values[3]) +static void rna_EditBone_tail_set(PointerRNA *ptr, const float values[3]) { EditBone *data= (EditBone*)(ptr->data); ((float*)data->tail)[0]= values[0]; @@ -430,19 +525,57 @@ void rna_EditBone_tail_set(PointerRNA *ptr, const float values[3]) ((float*)data->tail)[2]= values[2]; } -int rna_EditBone_tail_selected_get(PointerRNA *ptr) +static int rna_EditBone_tail_selected_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); return (((data->flag) & BONE_TIPSEL) != 0); } -void rna_EditBone_tail_selected_set(PointerRNA *ptr, int value) +static void rna_EditBone_tail_selected_set(PointerRNA *ptr, int value) { EditBone *data= (EditBone*)(ptr->data); if(value) data->flag |= BONE_TIPSEL; else data->flag &= ~BONE_TIPSEL; } +static void rna_Armature_editbone_transform_update(bContext *C, PointerRNA *ptr) +{ + bArmature *arm= (bArmature*)ptr->id.data; + EditBone *ebone= (EditBone*)ptr->data; + EditBone *child, *eboflip; + + /* update our parent */ + if(ebone->parent && ebone->flag & BONE_CONNECTED) + VECCOPY(ebone->parent->tail, ebone->head) + + /* update our children if necessary */ + for(child = arm->edbo->first; child; child=child->next) + if(child->parent == ebone && (child->flag & BONE_CONNECTED)) + VECCOPY(child->head, ebone->tail); + + if(arm->flag & ARM_MIRROR_EDIT) { + eboflip= ED_armature_bone_get_mirrored(arm->edbo, ebone); + + if(eboflip) { + eboflip->roll= -ebone->roll; + + eboflip->head[0]= -ebone->head[0]; + eboflip->tail[0]= -ebone->tail[0]; + + /* update our parent */ + if(eboflip->parent && eboflip->flag & BONE_CONNECTED) + VECCOPY(eboflip->parent->tail, eboflip->head); + + /* update our children if necessary */ + for(child = arm->edbo->first; child; child=child->next) + if(child->parent == eboflip && (child->flag & BONE_CONNECTED)) + VECCOPY (child->head, eboflip->tail); + } + } + + rna_Armature_update_data(C, ptr); +} + static void rna_Armature_bones_next(CollectionPropertyIterator *iter) { ListBaseIterator *internal= iter->internal; @@ -475,60 +608,75 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) /* strings */ prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* must be unique */ RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); if(editbone) RNA_def_property_string_funcs(prop, "rna_EditBone_name_get", "rna_EditBone_name_length", "rna_EditBone_name_set"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* flags */ prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_array(prop, 16); - RNA_def_property_ui_text(prop, "Bone Layers", "Layers bone exists in"); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set"); - else { - RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set"); - RNA_def_property_boolean_sdna(prop, NULL, "layer", 1); + if(editbone) { + RNA_def_property_array(prop, 16); + RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set"); } + else { + RNA_def_property_boolean_sdna(prop, NULL, "layer", 1); + RNA_def_property_array(prop, 16); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set"); + } + RNA_def_property_ui_text(prop, "Layers", "Layers bone exists in"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "connected", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_connected_get", "rna_EditBone_connected_set"); - else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED); + else { + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + } RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_active_get", "rna_EditBone_active_set"); else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE); RNA_def_property_ui_text(prop, "Active", "Bone was the last bone clicked on (most operations are applied to only this bone)"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_hinge_get", "rna_EditBone_hinge_set"); else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE); RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone doesn't inherit rotation or scale from parent bone."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "multiply_vertexgroup_with_envelope", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_multiply_vertexgroup_with_envelope_get", "rna_EditBone_multiply_vertexgroup_with_envelope_set"); else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV); RNA_def_property_ui_text(prop, "Multiply Vertex Group with Envelope", "When deforming bone, multiply effects of Vertex Group weights with Envelope influence."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "deform", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_deform_get", "rna_EditBone_deform_set"); else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM); RNA_def_property_ui_text(prop, "Deform", "Bone does not deform any geometry."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE); RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone."); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_inherit_scale_get", "rna_EditBone_inherit_scale_set"); else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_draw_wire_get", "rna_EditBone_draw_wire_set"); else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE); RNA_def_property_ui_text(prop, "Draw Wire", "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "cyclic_offset", PROP_BOOLEAN, PROP_NONE); if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_cyclic_offset_get", "rna_EditBone_cyclic_offset_set"); else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET); RNA_def_property_ui_text(prop, "Cyclic Offset", "When bone doesn't have a parent, it receives cyclic offset effects."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); /* Number values */ /* envelope deform settings */ @@ -537,24 +685,32 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) else RNA_def_property_float_sdna(prop, NULL, "dist"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Envelope Deform Distance", "Bone deformation distance (for Envelope deform only)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "envelope_weight", PROP_FLOAT, PROP_NONE); if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_envelope_weight_get", "rna_EditBone_envelope_weight_set", NULL); else RNA_def_property_float_sdna(prop, NULL, "weight"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Envelope Deform Weight", "Bone deformation weight (for Envelope deform only)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); - prop= RNA_def_property(srna, "radius_head", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_radius_head_get", "rna_EditBone_radius_head_set", NULL); + prop= RNA_def_property(srna, "head_radius", PROP_FLOAT, PROP_NONE); + if(editbone) { + RNA_def_property_float_funcs(prop, "rna_EditBone_radius_head_get", "rna_EditBone_radius_head_set", NULL); + RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); + } else RNA_def_property_float_sdna(prop, NULL, "rad_head"); //RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); - RNA_def_property_ui_text(prop, "Envelope Radius Head", "Radius of head of bone (for Envelope deform only)."); + RNA_def_property_ui_text(prop, "Envelope Head Radius", "Radius of head of bone (for Envelope deform only)."); - prop= RNA_def_property(srna, "radius_tail", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_radius_tail_get", "rna_EditBone_radius_tail_set", NULL); + prop= RNA_def_property(srna, "tail_radius", PROP_FLOAT, PROP_NONE); + if(editbone) { + RNA_def_property_float_funcs(prop, "rna_EditBone_radius_tail_get", "rna_EditBone_radius_tail_set", NULL); + RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); + } else RNA_def_property_float_sdna(prop, NULL, "rad_tail"); //RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); - RNA_def_property_ui_text(prop, "Envelope Radius Tail", "Radius of tail of bone (for Envelope deform only)."); + RNA_def_property_ui_text(prop, "Envelope Tail Radius", "Radius of tail of bone (for Envelope deform only)."); /* b-bones deform settings */ prop= RNA_def_property(srna, "bbone_segments", PROP_INT, PROP_NONE); @@ -562,18 +718,21 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) else RNA_def_property_int_sdna(prop, NULL, "segments"); RNA_def_property_range(prop, 1, 32); RNA_def_property_ui_text(prop, "B-Bone Segments", "Number of subdivisions of bone (for B-Bones only)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "bbone_in", PROP_FLOAT, PROP_NONE); if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_in_get", "rna_EditBone_bbone_in_set", NULL); else RNA_def_property_float_sdna(prop, NULL, "ease1"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "B-Bone Ease In", "Length of first Bezier Handle (for B-Bones only)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "bbone_out", PROP_FLOAT, PROP_NONE); if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_out_get", "rna_EditBone_bbone_out_set", NULL); else RNA_def_property_float_sdna(prop, NULL, "ease2"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "B-Bone Ease Out", "Length of second Bezier Handle (for B-Bones only)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); } // err... bones should not be directly edited (only editbones should be...) @@ -592,6 +751,7 @@ static void rna_def_bone(BlenderRNA *brna) RNA_def_property_struct_type(prop, "Bone"); RNA_def_property_pointer_sdna(prop, NULL, "parent"); RNA_def_property_ui_text(prop, "Parent", "Parent bone (in same Armature)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* children (collection) */ prop= RNA_def_property(srna, "children", PROP_COLLECTION, PROP_NONE); @@ -605,10 +765,12 @@ static void rna_def_bone(BlenderRNA *brna) prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_P); RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_SELECTED); RNA_def_property_ui_text(prop, "Selected", ""); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); } static void rna_def_edit_bone(BlenderRNA *brna) @@ -622,40 +784,49 @@ static void rna_def_edit_bone(BlenderRNA *brna) prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "EditBone"); - RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", NULL, NULL); + RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", "rna_EditBone_parent_set", NULL); + RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Parent", "Parent edit bone (in same Armature)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "roll", PROP_FLOAT, PROP_NONE); RNA_def_property_float_funcs(prop, "rna_EditBone_roll_get", "rna_EditBone_roll_set", NULL); RNA_def_property_ui_text(prop, "Roll", "Bone rotation around head-tail axis."); + RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); prop= RNA_def_property(srna, "head", PROP_FLOAT, PROP_VECTOR); RNA_def_property_array(prop, 3); RNA_def_property_float_funcs(prop, "rna_EditBone_head_get", "rna_EditBone_head_set", NULL); RNA_def_property_ui_text(prop, "Head", "Location of head end of the bone."); + RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); prop= RNA_def_property(srna, "tail", PROP_FLOAT, PROP_VECTOR); RNA_def_property_array(prop, 3); RNA_def_property_float_funcs(prop, "rna_EditBone_tail_get", "rna_EditBone_tail_set", NULL); RNA_def_property_ui_text(prop, "Tail", "Location of tail end of the bone."); + RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); rna_def_bone_common(srna, 1); prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_EditBone_hidden_get", "rna_EditBone_hidden_set"); RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when in Edit Mode"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_EditBone_locked_get", "rna_EditBone_locked_set"); RNA_def_property_ui_text(prop, "Locked", "Bone is not able to be transformed when in Edit Mode."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "head_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_EditBone_head_selected_get", "rna_EditBone_head_selected_set"); RNA_def_property_ui_text(prop, "Head Selected", ""); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "tail_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_EditBone_tail_selected_get", "rna_EditBone_tail_selected_set"); RNA_def_property_ui_text(prop, "Tail Selected", ""); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); } void rna_def_armature(BlenderRNA *brna) @@ -697,11 +868,13 @@ void rna_def_armature(BlenderRNA *brna) prop= RNA_def_property(srna, "drawtype", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_drawtype_items); RNA_def_property_ui_text(prop, "Draw Type", ""); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "ghost_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "ghosttype"); RNA_def_property_enum_items(prop, prop_ghost_type_items); RNA_def_property_ui_text(prop, "Ghost Drawing", "Method of Onion-skinning for active Action"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* Boolean values */ /* layer */ @@ -717,85 +890,105 @@ void rna_def_armature(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "layer_protected", 1); RNA_def_property_array(prop, 16); RNA_def_property_ui_text(prop, "Layer Proxy Protection", "Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* flag */ prop= RNA_def_property(srna, "rest_position", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_RESTPOS); RNA_def_property_ui_text(prop, "Rest Position", "Show Armature in Rest Position. No posing possible."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "draw_axes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWAXES); RNA_def_property_ui_text(prop, "Draw Axes", "Draw bone axes."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "draw_names", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWNAMES); RNA_def_property_ui_text(prop, "Draw Names", "Draw bone names."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "delay_deform", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DELAYDEFORM); RNA_def_property_ui_text(prop, "Delay Deform", "Don't deform children when manipulating bones in Pose Mode"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "x_axis_mirror", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_MIRROR_EDIT); RNA_def_property_ui_text(prop, "X-Axis Mirror", "Apply changes to matching bone on opposite side of X-Axis."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "auto_ik", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_AUTO_IK); RNA_def_property_ui_text(prop, "Auto IK", "Add temporaral IK constraints while grabbing bones in Pose Mode."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "draw_custom_bone_shapes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ARM_NO_CUSTOM); RNA_def_property_ui_text(prop, "Draw Custom Bone Shapes", "Draw bones with their custom shapes."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "draw_group_colors", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_COL_CUSTOM); RNA_def_property_ui_text(prop, "Draw Bone Group Colors", "Draw bone group colors."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "ghost_only_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ARM_GHOST_ONLYSEL); RNA_def_property_ui_text(prop, "Draw Ghosts on Selected Keyframes Only", ""); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* deformflag */ prop= RNA_def_property(srna, "deform_vertexgroups", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP); RNA_def_property_ui_text(prop, "Deform Vertex Groups", "Enable Vertex Groups when defining deform"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "deform_envelope", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE); RNA_def_property_ui_text(prop, "Deform Envelopes", "Enable Bone Envelopes when defining deform"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "deform_quaternion", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION); RNA_def_property_ui_text(prop, "Use Dual Quaternion Deformation", "Enable deform rotation with Quaternions"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "deform_bbone_rest", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_B_BONE_REST); RNA_def_property_ui_text(prop, "B-Bones Deform in Rest Position", "Make B-Bones deform already in Rest Position"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); //prop= RNA_def_property(srna, "deform_invert_vertexgroups", PROP_BOOLEAN, PROP_NONE); //RNA_def_property_boolean_negative_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP); //RNA_def_property_ui_text(prop, "Invert Vertex Group Influence", "Invert Vertex Group influence (only for Modifiers)"); + //RNA_def_property_update(prop, 0, "rna_Armature_update_data"); /* pathflag */ prop= RNA_def_property(srna, "paths_show_frame_numbers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pathflag", ARM_PATH_FNUMS); - RNA_def_property_ui_text(prop, "Bone Paths Show Frame Numbers", "When drawing Armature in Pose Mode, show frame numbers on Bone Paths"); + RNA_def_property_ui_text(prop, "Paths Show Frame Numbers", "When drawing Armature in Pose Mode, show frame numbers on Bone Paths"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "paths_highlight_keyframes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pathflag", ARM_PATH_KFRAS); - RNA_def_property_ui_text(prop, "Bone Paths Highlight Keyframes", "When drawing Armature in Pose Mode, emphasize position of keyframes on Bone Paths"); + RNA_def_property_ui_text(prop, "Paths Highlight Keyframes", "When drawing Armature in Pose Mode, emphasize position of keyframes on Bone Paths"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "paths_show_keyframe_numbers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pathflag", ARM_PATH_KFNOS); - RNA_def_property_ui_text(prop, "Bone Paths Show Keyframe Numbers", "When drawing Armature in Pose Mode, show frame numbers of Keyframes on Bone Paths"); + RNA_def_property_ui_text(prop, "Paths Show Keyframe Numbers", "When drawing Armature in Pose Mode, show frame numbers of Keyframes on Bone Paths"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "paths_show_around_current_frame", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pathflag", ARM_PATH_ACFRA); - RNA_def_property_ui_text(prop, "Bone Paths Around Current Frame", "When drawing Armature in Pose Mode, only show section of Bone Paths that falls around current frame"); + RNA_def_property_ui_text(prop, "Paths Around Current Frame", "When drawing Armature in Pose Mode, only show section of Bone Paths that falls around current frame"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "paths_calculate_head_positions", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pathflag", ARM_PATH_HEADS); - RNA_def_property_ui_text(prop, "Bone Paths Use Heads", "When calculating Bone Paths, use Head locations instead of Tips"); + RNA_def_property_ui_text(prop, "Paths Use Heads", "When calculating Bone Paths, use Head locations instead of Tips"); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* Number fields */ /* ghost/onionskining settings */ @@ -803,47 +996,56 @@ void rna_def_armature(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "ghostep"); RNA_def_property_range(prop, 0, 30); RNA_def_property_ui_text(prop, "Ghosting Step", "Number of frame steps on either side of current frame to show as ghosts (only for 'Around Current Frame' Onion-skining method)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "ghost_size", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ghostsize"); RNA_def_property_range(prop, 1, 20); RNA_def_property_ui_text(prop, "Ghosting Frame Step", "Frame step for Ghosts (not for 'On Keyframes' Onion-skining method)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "ghost_start_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ghostsf"); RNA_def_property_int_funcs(prop, NULL, "rna_Armature_ghost_start_frame_set", NULL); RNA_def_property_ui_text(prop, "Ghosting Start Frame", "Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "ghost_end_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ghostef"); RNA_def_property_int_funcs(prop, NULL, "rna_Armature_ghost_end_frame_set", NULL); RNA_def_property_ui_text(prop, "Ghosting End Frame", "End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* bone path settings */ prop= RNA_def_property(srna, "path_size", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathsize"); RNA_def_property_range(prop, 1, 100); - RNA_def_property_ui_text(prop, "Bone Paths Frame Step", "Number of frames between 'dots' on Bone Paths (when drawing)."); + RNA_def_property_ui_text(prop, "Paths Frame Step", "Number of frames between 'dots' on Bone Paths (when drawing)."); + RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "path_start_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathsf"); RNA_def_property_int_funcs(prop, NULL, "rna_Armature_path_start_frame_set", NULL); - RNA_def_property_ui_text(prop, "Bone Paths Calculation Start Frame", "Starting frame of range of frames to use for Bone Path calculations."); + RNA_def_property_ui_text(prop, "Paths Calculation Start Frame", "Starting frame of range of frames to use for Bone Path calculations."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "path_end_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathef"); RNA_def_property_int_funcs(prop, NULL, "rna_Armature_path_end_frame_set", NULL); - RNA_def_property_ui_text(prop, "Bone Paths Calculation End Frame", "End frame of range of frames to use for Bone Path calculations."); + RNA_def_property_ui_text(prop, "Paths Calculation End Frame", "End frame of range of frames to use for Bone Path calculations."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "path_before_current", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathbc"); RNA_def_property_range(prop, 1, MAXFRAMEF/2); - RNA_def_property_ui_text(prop, "Bone Paths Frames Before Current", "Number of frames before current frame to show on Bone Paths (only for 'Around Current' option)."); + RNA_def_property_ui_text(prop, "Paths Frames Before Current", "Number of frames before current frame to show on Bone Paths (only for 'Around Current' option)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "path_after_current", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathac"); RNA_def_property_range(prop, 1, MAXFRAMEF/2); - RNA_def_property_ui_text(prop, "Bone Paths Frames After Current", "Number of frames after current frame to show on Bone Paths (only for 'Around Current' option)."); + RNA_def_property_ui_text(prop, "Paths Frames After Current", "Number of frames after current frame to show on Bone Paths (only for 'Around Current' option)."); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); } void RNA_def_armature(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index b8863540bdf..ac2c37d4066 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -39,12 +39,18 @@ #ifdef RNA_RUNTIME +#include "BLI_arithb.h" + #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_idprop.h" +#include "ED_armature.h" + static void rna_Pose_update(bContext *C, PointerRNA *ptr) { + // XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); + DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_DATA); } @@ -60,6 +66,39 @@ IDProperty *rna_PoseChannel_idproperties(PointerRNA *ptr, int create) return pchan->prop; } +static void rna_PoseChannel_euler_rotation_get(PointerRNA *ptr, float *value) +{ + bPoseChannel *pchan= ptr->data; + + if(pchan->rotmode == PCHAN_ROT_QUAT) + QuatToEul(pchan->quat, value); + else + VECCOPY(value, pchan->eul); +} + +static void rna_PoseChannel_euler_rotation_set(PointerRNA *ptr, const float *value) +{ + bPoseChannel *pchan= ptr->data; + + if(pchan->rotmode == PCHAN_ROT_QUAT) + EulToQuat((float*)value, pchan->quat); + else + VECCOPY(pchan->eul, value); +} + +static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value) +{ + Object *ob= (Object*)ptr->id.data; + bPoseChannel *pchan= (bPoseChannel*)ptr->data; + char oldname[32], newname[32]; + + /* need to be on the stack */ + BLI_strncpy(newname, value, 32); + BLI_strncpy(oldname, pchan->name, 32); + + ED_armature_bone_rename(ob->data, oldname, newname); +} + #else /* users shouldn't be editing pose channel data directly -- better to set ipos and let blender calc pose_channel stuff */ @@ -86,7 +125,7 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Constraints", "Constraints that act on this PoseChannel."); prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_PoseChannel_name_set"); RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); @@ -165,6 +204,7 @@ static void rna_def_pose_channel(BlenderRNA *brna) prop= RNA_def_property(srna, "euler_rotation", PROP_FLOAT, PROP_ROTATION); RNA_def_property_float_sdna(prop, NULL, "eul"); + RNA_def_property_float_funcs(prop, "rna_PoseChannel_euler_rotation_get", "rna_PoseChannel_euler_rotation_set", NULL); RNA_def_property_ui_text(prop, "Rotation (Euler)", "Rotation in Eulers."); RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); From 83acd4ac6b4c86631636098681fe7aeb4add1da3 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 14 Jul 2009 20:27:28 +0000 Subject: [PATCH 200/512] 2.5: Objects * Added Relations panel with layers, pass_index, parent. * Groups panel now can do add to group/remove from group. * Parent, parent type, track are now editable. * Separate constraint add operator for object and bones. --- release/ui/buttons_object_constraint.py | 4 +- release/ui/buttons_objects.py | 48 +++-- release/ui/buttons_scene.py | 10 +- source/blender/editors/include/ED_object.h | 1 + .../blender/editors/object/editconstraint.c | 46 ++++- source/blender/editors/object/editgroup.c | 2 +- source/blender/editors/object/object_edit.c | 16 ++ source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 6 +- .../editors/space_buttons/buttons_intern.h | 3 + .../editors/space_buttons/buttons_ops.c | 133 ++++++++++++++ .../editors/space_buttons/space_buttons.c | 3 + source/blender/makesrna/intern/rna_object.c | 167 ++++++++++++++---- source/blender/makesrna/intern/rna_scene.c | 2 +- 14 files changed, 384 insertions(+), 58 deletions(-) diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 12aed082381..52fb572f27d 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -528,7 +528,7 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): class BONE_PT_constraints(ConstraintButtonsPanel): __idname__ = "BONE_PT_constraints" - __label__ = "Bone Constraints" + __label__ = "Constraints" __context__ = "bone" def poll(self, context): @@ -541,7 +541,7 @@ class BONE_PT_constraints(ConstraintButtonsPanel): layout = self.layout row = layout.row() - row.item_menu_enumO("OBJECT_OT_constraint_add", "type") + row.item_menu_enumO("POSE_OT_constraint_add", "type") row.itemL(); for con in pchan.constraints: diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index 59e19d05959..47c127adeae 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -31,6 +31,31 @@ class OBJECT_PT_transform(ObjectButtonsPanel): row.column().itemR(ob, "rotation") row.column().itemR(ob, "scale") +class OBJECT_PT_relations(ObjectButtonsPanel): + __idname__ = "OBJECT_PT_relations" + __label__ = "Relations" + + def draw(self, context): + layout = self.layout + ob = context.object + + split = layout.split() + col = split.column() + col.itemR(ob, "layers") + col.itemS() + col.itemR(ob, "pass_index") + + col = split.column() + col.itemL(text="Parent:") + col.itemR(ob, "parent", text="") + + sub = col.column() + sub.itemR(ob, "parent_type", text="Type") + parent = ob.parent + if parent and ob.parent_type == 'BONE' and parent.type == 'ARMATURE': + sub.item_pointerR(ob, "parent_bone", parent.data, "bones", text="") + sub.active = parent != None + class OBJECT_PT_groups(ObjectButtonsPanel): __idname__ = "OBJECT_PT_groups" __label__ = "Groups" @@ -39,24 +64,23 @@ class OBJECT_PT_groups(ObjectButtonsPanel): layout = self.layout ob = context.object - row = layout.row() - row.itemR(ob, "pass_index") - row.itemR(ob, "parent") - - # layout.left_right() - # layout.itemO("OBJECT_OT_add_group"); + split = layout.split() + split.item_menu_enumO("OBJECT_OT_group_add", "group", text="Add to Group") + split.itemL() for group in bpy.data.groups: if ob.name in group.objects: col = layout.column(align=True) + col.set_context_pointer("group", group) + row = col.box().row() row.itemR(group, "name", text="") - #row.itemO("OBJECT_OT_remove_group") + row.itemO("OBJECT_OT_group_remove", text="", icon="VICON_X") split = col.box().split() - split.column().itemR(group, "layer") - split.column().itemR(group, "dupli_offset") + split.column().itemR(group, "layer", text="Dupli") + split.column().itemR(group, "dupli_offset", text="") class OBJECT_PT_display(ObjectButtonsPanel): __idname__ = "OBJECT_PT_display" @@ -132,12 +156,16 @@ class OBJECT_PT_animation(ObjectButtonsPanel): sub = split.column() sub.itemL(text="Tracking:") + sub.itemR(ob, "track", text="") sub.itemR(ob, "track_axis", text="Axis") sub.itemR(ob, "up_axis", text="Up Axis") - sub.itemR(ob, "track_rotation", text="Rotation") + row = sub.row() + row.itemR(ob, "track_override_parent", text="Override Parent") + row.active = ob.parent != None bpy.types.register(OBJECT_PT_context_object) bpy.types.register(OBJECT_PT_transform) +bpy.types.register(OBJECT_PT_relations) bpy.types.register(OBJECT_PT_groups) bpy.types.register(OBJECT_PT_display) bpy.types.register(OBJECT_PT_duplication) diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 38286c9b86f..55578c44cee 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -28,10 +28,6 @@ class RENDER_PT_layers(RenderButtonsPanel): scene = context.scene rd = scene.render_data - split = layout.split() - split.itemL(text="Scene:") - split.column().itemR(scene, "visible_layers", text="") - row = layout.row() row.template_list(rd, "layers", rd, "active_layer_index", rows=2) @@ -42,8 +38,10 @@ class RENDER_PT_layers(RenderButtonsPanel): rl = rd.layers[rd.active_layer_index] split = layout.split() - split.itemL(text="Layers:") - split.column().itemR(rl, "visible_layers", text="") + col = split.column() + col.itemR(scene, "visible_layers", text="Scene") + col = split.column() + col.itemR(rl, "visible_layers", text="Layer") layout.itemR(rl, "light_override", text="Light") layout.itemR(rl, "material_override", text="Material") diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index f7dcc7fd1a0..ab718aca81f 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -57,6 +57,7 @@ void ED_object_apply_obmat(struct Object *ob); /* single object duplicate, if dupflag==0, fully linked, else it uses U.dupflag */ struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int usedupflag); +void ED_object_parent(struct Object *ob, struct Object *parent, int type, const char *substr); /* bitflags for enter/exit editmode */ #define EM_FREEDATA 1 diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 7be4697d0c8..62bc5d13257 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -1008,12 +1008,11 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot) /************************ add constraint operator *********************/ -static int constraint_add_exec(bContext *C, wmOperator *op) +static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) { Scene *scene= CTX_data_scene(C); Object *ob = CTX_data_active_object(C); bConstraint *con, *coniter; - ListBase *list= get_active_constraints(ob); bPoseChannel *pchan= get_active_posechannel(ob); int type= RNA_enum_get(op->ptr, "type"); @@ -1077,6 +1076,26 @@ static int constraint_add_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } +static int object_constraint_add_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + + if(!ob) + return OPERATOR_CANCELLED; + + return constraint_add_exec(C, op, &ob->constraints); +} + +static int pose_constraint_add_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + + if(!ob) + return OPERATOR_CANCELLED;; + + return constraint_add_exec(C, op, get_active_constraints(ob)); +} + void OBJECT_OT_constraint_add(wmOperatorType *ot) { /* identifiers */ @@ -1086,13 +1105,32 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_menu_invoke; - ot->exec= constraint_add_exec; - + ot->exec= object_constraint_add_exec; ot->poll= ED_operator_object_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + /* properties */ + RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); +} + +void POSE_OT_constraint_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Constraint"; + ot->description = "Add a constraint to the active bone."; + ot->idname= "POSE_OT_constraint_add"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= pose_constraint_add_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); } diff --git a/source/blender/editors/object/editgroup.c b/source/blender/editors/object/editgroup.c index 5943b36a6b0..9a184892e71 100644 --- a/source/blender/editors/object/editgroup.c +++ b/source/blender/editors/object/editgroup.c @@ -200,7 +200,7 @@ void GROUP_OT_objects_remove(wmOperatorType *ot) { /* identifiers */ - ot->name= "Remove from group"; + ot->name= "Remove From Groups"; ot->description = "Remove selected objects from all groups."; ot->idname= "GROUP_OT_objects_remove"; diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 0746fbaefb6..26a89999475 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -2786,6 +2786,22 @@ static int test_parent_loop(Object *par, Object *ob) return test_parent_loop(par->parent, ob); } +void ED_object_parent(Object *ob, Object *par, int type, const char *substr) +{ + if(!par || test_parent_loop(par, ob)) { + ob->parent= NULL; + ob->partype= PAROBJECT; + ob->parsubstr[0]= 0; + return; + } + + /* this could use some more checks */ + + ob->parent= par; + ob->partype &= ~PARTYPE; + ob->partype |= type; + BLI_strncpy(ob->parsubstr, substr, sizeof(ob->parsubstr)); +} static int parent_set_exec(bContext *C, wmOperator *op) { diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 23a4b5773ff..5610a75d4d3 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -102,6 +102,7 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); +void POSE_OT_constraint_add(struct wmOperatorType *ot); void CONSTRAINT_OT_delete(struct wmOperatorType *ot); void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index acfe2416d77..b73030226ef 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -112,6 +112,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_mdef_bind); WM_operatortype_append(OBJECT_OT_constraint_add); + WM_operatortype_append(POSE_OT_constraint_add); WM_operatortype_append(CONSTRAINT_OT_delete); WM_operatortype_append(CONSTRAINT_OT_move_up); WM_operatortype_append(CONSTRAINT_OT_move_down); @@ -147,16 +148,13 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_add_item(keymap, "OBJECT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_select_random", PADASTERKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_select_by_type", PADASTERKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_select_by_layer", PADASTERKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_location_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_rotation_clear", RKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index f09f35589b9..20db9fce8f2 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -61,6 +61,9 @@ void buttons_context_draw(const struct bContext *C, struct uiLayout *layout); void buttons_context_register(struct ARegionType *art); /* buttons_ops.c */ +void OBJECT_OT_group_add(struct wmOperatorType *ot); +void OBJECT_OT_group_remove(struct wmOperatorType *ot); + void OBJECT_OT_material_slot_add(struct wmOperatorType *ot); void OBJECT_OT_material_slot_remove(struct wmOperatorType *ot); void OBJECT_OT_material_slot_assign(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index fb1e9d1214d..7dececd2679 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" #include "DNA_curve_types.h" +#include "DNA_group_types.h" #include "DNA_object_types.h" #include "DNA_material_types.h" #include "DNA_node_types.h" @@ -40,6 +41,7 @@ #include "BKE_context.h" #include "BKE_depsgraph.h" +#include "BKE_group.h" #include "BKE_font.h" #include "BKE_library.h" #include "BKE_main.h" @@ -62,8 +64,139 @@ #include "ED_curve.h" #include "ED_mesh.h" +#include "RNA_access.h" +#include "RNA_define.h" + #include "buttons_intern.h" // own include + +/********************** group operators *********************/ + +static int group_add_exec(bContext *C, wmOperator *op) +{ + Main *bmain= CTX_data_main(C); + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Base *base; + Group *group; + int value= RNA_enum_get(op->ptr, "group"); + + if(!ob) + return OPERATOR_CANCELLED; + + base= object_in_scene(ob, scene); + if(!base) + return OPERATOR_CANCELLED; + + if(value == -1) + group= add_group( "Group" ); + else + group= BLI_findlink(&bmain->group, value); + + if(group) { + add_to_group(group, ob); + ob->flag |= OB_FROMGROUP; + base->flag |= OB_FROMGROUP; + } + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +static EnumPropertyItem group_items[]= { + {-1, "ADD_NEW", 0, "Add New Group", ""}, + {0, NULL, 0, NULL, NULL}}; + +static EnumPropertyItem *group_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + EnumPropertyItem tmp = {0, "", 0, "", ""}; + EnumPropertyItem *item= NULL; + Main *bmain; + Group *group; + int a, totitem= 0; + + if(!C) /* needed for docs */ + return group_items; + + RNA_enum_items_add_value(&item, &totitem, group_items, -1); + + bmain= CTX_data_main(C); + if(bmain->group.first) + RNA_enum_item_add_separator(&item, &totitem); + + for(a=0, group=bmain->group.first; group; group=group->id.next, a++) { + tmp.value= a; + tmp.identifier= group->id.name+2; + tmp.name= group->id.name+2; + RNA_enum_item_add(&item, &totitem, &tmp); + } + + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; +} + +void OBJECT_OT_group_add(wmOperatorType *ot) +{ + PropertyRNA *prop; + + /* identifiers */ + ot->name= "Add Group"; + ot->idname= "OBJECT_OT_group_add"; + + /* api callbacks */ + ot->exec= group_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + prop= RNA_def_enum(ot->srna, "group", group_items, -1, "Group", "Group to add object to."); + RNA_def_enum_funcs(prop, group_itemf); +} + +static int group_remove_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + Group *group= CTX_data_pointer_get_type(C, "group", &RNA_Group).data; + Base *base; + + if(!ob || !group) + return OPERATOR_CANCELLED; + + base= object_in_scene(ob, scene); + if(!base) + return OPERATOR_CANCELLED; + + rem_from_group(group, ob); + + if(find_group(ob, NULL) == NULL) { + ob->flag &= ~OB_FROMGROUP; + base->flag &= ~OB_FROMGROUP; + } + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_group_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Group"; + ot->idname= "OBJECT_OT_group_remove"; + + /* api callbacks */ + ot->exec= group_remove_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /********************** material slot operators *********************/ static int material_slot_add_exec(bContext *C, wmOperator *op) diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 17f55c9395e..65fbdeb4205 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -210,6 +210,9 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar) void buttons_operatortypes(void) { + WM_operatortype_append(OBJECT_OT_group_add); + WM_operatortype_append(OBJECT_OT_group_remove); + WM_operatortype_append(OBJECT_OT_material_slot_add); WM_operatortype_append(OBJECT_OT_material_slot_remove); WM_operatortype_append(OBJECT_OT_material_slot_assign); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 33e8c1fbd26..5ec25cfe4c2 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -41,6 +41,17 @@ #include "WM_types.h" +static EnumPropertyItem parent_type_items[] = { + {PAROBJECT, "OBJECT", 0, "Object", ""}, + {PARCURVE, "CURVE", 0, "Curve", ""}, + //{PARKEY, "KEY", 0, "Key", ""}, + {PARSKEL, "ARMATURE", 0, "Armature", ""}, + {PARSKEL, "LATTICE", 0, "Lattice", ""}, // PARSKEL reuse will give issues + {PARVERT1, "VERTEX", 0, "Vertex", ""}, + {PARVERT3, "VERTEX_3", 0, "3 Vertices", ""}, + {PARBONE, "BONE", 0, "Bone", ""}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME #include "DNA_key_types.h" @@ -54,6 +65,9 @@ #include "BKE_material.h" #include "BKE_mesh.h" #include "BKE_particle.h" +#include "BKE_scene.h" + +#include "ED_object.h" void rna_Object_update(bContext *C, PointerRNA *ptr) { @@ -71,6 +85,27 @@ static void rna_Object_dependency_update(bContext *C, PointerRNA *ptr) DAG_scene_sort(CTX_data_scene(C)); } +static void rna_Object_layer_update(bContext *C, PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + Scene *scene= CTX_data_scene(C); + Base *base; + + base= object_in_scene(ob, scene); + if(!base) + return; + + /* try to avoid scene sort */ + if((ob->lay & scene->lay) && (base->lay & scene->lay)) + base->lay= ob->lay; + else if((ob->lay & scene->lay)==0 && (base->lay & scene->lay)==0) + base->lay= ob->lay; + else { + base->lay= ob->lay; + DAG_scene_sort(scene); + } +} + static int rna_Object_data_editable(PointerRNA *ptr) { Object *ob= (Object*)ptr->data; @@ -123,6 +158,67 @@ static StructRNA *rna_Object_data_typef(PointerRNA *ptr) } } +static void rna_Object_parent_set(PointerRNA *ptr, PointerRNA value) +{ + Object *ob= (Object*)ptr->data; + Object *par= (Object*)value.data; + + ED_object_parent(ob, par, ob->partype, ob->parsubstr); +} + +static void rna_Object_parent_type_set(PointerRNA *ptr, int value) +{ + Object *ob= (Object*)ptr->data; + + ED_object_parent(ob, ob->parent, value, ob->parsubstr); +} + +static void rna_Object_track_set(PointerRNA *ptr, PointerRNA value) +{ + Object *ob= (Object*)ptr->data; + + if(ob != value.data) + ob->track= value.data; +} + +static EnumPropertyItem *rna_Object_parent_type_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + Object *ob= (Object*)ptr->data; + Object *par= ob->parent; + EnumPropertyItem *item= NULL; + int totitem= 0; + + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PAROBJECT); + + if(par) { + if(par->type == OB_CURVE) + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARCURVE); + else if(par->type == OB_LATTICE) + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARSKEL); + else if(par->type == OB_ARMATURE) { + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARSKEL); + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARBONE); + } + else if(par->type == OB_MESH) { + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARVERT1); + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARVERT3); + } + } + + RNA_enum_item_end(&item, &totitem); + + *free= 1; + + return item; +} + +static void rna_Object_parent_bone_set(PointerRNA *ptr, const char *value) +{ + Object *ob= (Object*)ptr->data; + + ED_object_parent(ob, ob->parent, ob->partype, value); +} + static int rna_VertexGroup_index_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; @@ -769,17 +865,6 @@ static void rna_def_object(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem parent_type_items[] = { - {PAROBJECT, "OBJECT", 0, "Object", ""}, - {PARCURVE, "CURVE", 0, "Curve", ""}, - //{PARKEY, "KEY", 0, "Key", ""}, - {PARSKEL, "ARMATURE", 0, "Armature", ""}, - {PARSKEL, "LATTICE", 0, "Lattice", ""}, // PARSKEL reuse will give issues - {PARVERT1, "VERTEX", 0, "Vertex", ""}, - {PARVERT3, "VERTEX_3", 0, "3 Vertices", ""}, - {PARBONE, "BONE", 0, "Bone", ""}, - {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem object_type_items[] = { {OB_EMPTY, "EMPTY", 0, "Empty", ""}, {OB_MESH, "MESH", 0, "Mesh", ""}, @@ -856,56 +941,70 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Data", "Object data."); RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update_data"); - prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); - RNA_def_property_array(prop, 20); - RNA_def_property_ui_text(prop, "Layers", "Layers the object is on."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set"); - - prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT); - RNA_def_property_ui_text(prop, "Selected", "Object selection state."); - - /* parent and track */ - - prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE); - RNA_def_property_ui_text(prop, "Parent", "Parent Object"); - prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, object_type_items); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Type", "Type of Object."); + + prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); + RNA_def_property_array(prop, 20); + RNA_def_property_ui_text(prop, "Layers", "Layers the object is on."); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_layer_update"); + + prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Selected", "Object selection state."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); + + /* parent and track */ + + prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Parent", "Parent Object"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update"); prop= RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "partype"); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "partype"); RNA_def_property_enum_items(prop, parent_type_items); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_enum_funcs(prop, NULL, "rna_Object_parent_type_set", "rna_Object_parent_type_itemf"); RNA_def_property_ui_text(prop, "Parent Type", "Type of parent relation."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update"); prop= RNA_def_property(srna, "parent_vertices", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "par1"); RNA_def_property_array(prop, 3); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Parent Vertices", "Indices of vertices in cases of a vertex parenting relation."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "parent_bone", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "parsubstr"); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Object_parent_bone_set"); RNA_def_property_ui_text(prop, "Parent Bone", "Name of parent bone in case of a bone parenting relation."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update"); prop= RNA_def_property(srna, "track", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_track_set", NULL); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Track", "Object being tracked to define the rotation (Old Track)."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update"); prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "trackflag"); RNA_def_property_enum_items(prop, track_items); RNA_def_property_ui_text(prop, "Track Axis", "Tracking axis pointing to the another object."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "upflag"); RNA_def_property_enum_items(prop, up_items); RNA_def_property_ui_text(prop, "Up Axis", "Specify the axis that points up."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); /* proxy */ @@ -1043,6 +1142,7 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "col"); RNA_def_property_ui_text(prop, "Color", "Object color and alpha, used when faces have the ObColor mode enabled."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); /* physics */ @@ -1071,10 +1171,12 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_struct_type(prop, "ParticleSystem"); RNA_def_property_pointer_funcs(prop, "rna_Object_active_particle_system_get", NULL, NULL); RNA_def_property_ui_text(prop, "Active Particle System", "Active particle system being displayed"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); prop= RNA_def_property(srna, "active_particle_system_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_funcs(prop, "rna_Object_active_particle_system_index_get", "rna_Object_active_particle_system_index_set", "rna_Object_active_particle_system_index_range"); RNA_def_property_ui_text(prop, "Active Particle System Index", "Index of active particle system slot."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); /* restrict */ @@ -1086,10 +1188,12 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "restrict_select", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_SELECT); RNA_def_property_ui_text(prop, "Restrict Select", "Restrict selection in the viewport."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); prop= RNA_def_property(srna, "restrict_render", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER); RNA_def_property_ui_text(prop, "Restrict Render", "Restrict renderability."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); /* anim */ @@ -1099,19 +1203,22 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_DRAWKEY); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // update ipo flag indirect RNA_def_property_ui_text(prop, "Draw Keys", "Draw object as key positions."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "draw_keys_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_DRAWKEYSEL); RNA_def_property_ui_text(prop, "Draw Keys Selected", "Limit the drawing of object keys to selected."); RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); - prop= RNA_def_property(srna, "track_rotation", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "track_override_parent", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_POWERTRACK); - RNA_def_property_ui_text(prop, "Track Rotation", "Switch object rotation of in tracking."); + RNA_def_property_ui_text(prop, "Track Override Parent", "Override rotation from parenting."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "slow_parent", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW); RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag"); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index f52e130d527..920d8760358 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1105,7 +1105,7 @@ void rna_def_scene_render_data(BlenderRNA *brna) prop= RNA_def_property(srna, "use_compositing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_DOCOMP); - RNA_def_property_ui_text(prop, "Compositing", "Process the render result through the compositing pipeline, if a compositing nodes are enabled."); + RNA_def_property_ui_text(prop, "Compositing", "Process the render result through the compositing pipeline, if compositing nodes are enabled."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "use_sequencer", PROP_BOOLEAN, PROP_NONE); From efe8e8dd1512cd2e17b4cceb78b9b17cd504565f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 14 Jul 2009 20:38:21 +0000 Subject: [PATCH 201/512] 2.5: small tweaks for scene and object layouts. --- release/ui/buttons_objects.py | 14 ++++++++++---- release/ui/buttons_scene.py | 8 +++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index 47c127adeae..9261da6cc9e 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -149,11 +149,17 @@ class OBJECT_PT_animation(ObjectButtonsPanel): sub = split.column() sub.itemL(text="Time Offset:") sub.itemR(ob, "time_offset_edit", text="Edit") - sub.itemR(ob, "time_offset_particle", text="Particle") - sub.itemR(ob, "time_offset_parent", text="Parent") - sub.itemR(ob, "slow_parent") + row = sub.row() + row.itemR(ob, "time_offset_particle", text="Particle") + row.active = len(ob.particle_systems) != 0 + row = sub.row() + row.itemR(ob, "time_offset_parent", text="Parent") + row.active = ob.parent != None + row = sub.row() + row.itemR(ob, "slow_parent") + row.active = ob.parent != None sub.itemR(ob, "time_offset", text="Offset") - + sub = split.column() sub.itemL(text="Tracking:") sub.itemR(ob, "track", text="") diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 55578c44cee..90de34116a6 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -117,9 +117,6 @@ class RENDER_PT_shading(RenderButtonsPanel): col = split.column() col.itemR(rd, "render_raytracing", text="Ray Tracing") - row = col.row() - row.active = rd.render_raytracing - row.itemR(rd, "octree_resolution", text="Octree") col.itemR(rd, "alpha_mode", text="Alpha") class RENDER_PT_performance(RenderButtonsPanel): @@ -159,6 +156,11 @@ class RENDER_PT_performance(RenderButtonsPanel): col.itemR(rd, "free_image_textures") col.active = rd.use_compositing + row = layout.row() + row.active = rd.render_raytracing + row.itemR(rd, "octree_resolution", text="Ray Tracing Octree") + + class RENDER_PT_post_processing(RenderButtonsPanel): __label__ = "Post Processing" __default_closed__ = True From d2d2c3aec27b0c60ddbfedde05c033928fdea265 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 14 Jul 2009 22:11:25 +0000 Subject: [PATCH 202/512] 2.5: added panel with IK settings for bone. --- release/ui/buttons_data_bone.py | 72 ++++++++++++++++++ release/ui/buttons_object_constraint.py | 3 +- source/blender/makesrna/intern/rna_pose.c | 89 +++++++++++++++++++---- 3 files changed, 150 insertions(+), 14 deletions(-) diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index 7678a3d4780..fae3d24839c 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -106,9 +106,80 @@ class BONE_PT_bone(BoneButtonsPanel): sub.itemR(bone, "draw_wire", text="Wireframe") sub.itemR(bone, "hidden", text="Hide") +class BONE_PT_inverse_kinematics(BoneButtonsPanel): + __idname__ = "BONE_PT_inverse_kinematics" + __label__ = "Inverse Kinematics" + __default_closed__ = True + + def poll(self, context): + ob = context.object + bone = context.bone + + if ob and context.bone: + pchan = ob.pose.pose_channels[context.bone.name] + return pchan.has_ik + + return False + + def draw(self, context): + layout = self.layout + ob = context.object + bone = context.bone + pchan = ob.pose.pose_channels[context.bone.name] + + split = layout.split(percentage=0.25) + split.itemR(pchan, "ik_dof_x", text="X") + row = split.row() + row.itemR(pchan, "ik_stiffness_x", text="Stiffness") + row.active = pchan.ik_dof_x + + split = layout.split(percentage=0.25) + row = split.row() + row.itemR(pchan, "ik_limit_x", text="Limit") + row.active = pchan.ik_dof_x + row = split.row(align=True) + row.itemR(pchan, "ik_min_x", text="") + row.itemR(pchan, "ik_max_x", text="") + row.active = pchan.ik_dof_x and pchan.ik_limit_x + + split = layout.split(percentage=0.25) + split.itemR(pchan, "ik_dof_y", text="Y") + row = split.row() + row.itemR(pchan, "ik_stiffness_y", text="Stiffness") + row.active = pchan.ik_dof_y + + split = layout.split(percentage=0.25) + row = split.row() + row.itemR(pchan, "ik_limit_y", text="Limit") + row.active = pchan.ik_dof_y + row = split.row(align=True) + row.itemR(pchan, "ik_min_y", text="") + row.itemR(pchan, "ik_max_y", text="") + row.active = pchan.ik_dof_y and pchan.ik_limit_y + + split = layout.split(percentage=0.25) + split.itemR(pchan, "ik_dof_z", text="Z") + row = split.row() + row.itemR(pchan, "ik_stiffness_z", text="Stiffness") + row.active = pchan.ik_dof_z + + split = layout.split(percentage=0.25) + row = split.row() + row.itemR(pchan, "ik_limit_z", text="Limit") + row.active = pchan.ik_dof_z + row = split.row(align=True) + row.itemR(pchan, "ik_min_z", text="") + row.itemR(pchan, "ik_max_z", text="") + row.active = pchan.ik_dof_z and pchan.ik_limit_z + + split = layout.split() + split.itemR(pchan, "ik_stretch", text="Stretch") + split.itemL() + class BONE_PT_deform(BoneButtonsPanel): __idname__ = "BONE_PT_deform" __label__ = "Deform" + __default_closed__ = True def draw_header(self, context): layout = self.layout @@ -154,4 +225,5 @@ bpy.types.register(BONE_PT_context_bone) bpy.types.register(BONE_PT_transform) bpy.types.register(BONE_PT_bone) bpy.types.register(BONE_PT_deform) +bpy.types.register(BONE_PT_inverse_kinematics) diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 52fb572f27d..c0e2bd0250a 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -131,7 +131,8 @@ class ConstraintButtonsPanel(bpy.types.Panel): self.target_template(layout, con) layout.itemR(con, "pole_target") - layout.itemR(con, "pole_subtarget") + if con.pole_target and con.pole_target.type == "ARMATURE": + layout.item_pointerR(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone") col = layout.column_flow() col.itemR(con, "iterations") diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index ac2c37d4066..c7ee7887aff 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -99,6 +99,14 @@ static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value) ED_armature_bone_rename(ob->data, oldname, newname); } +static int rna_PoseChannel_has_ik_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + bPoseChannel *pchan= (bPoseChannel*)ptr->data; + + return ED_pose_channel_in_IK_chain(ob, pchan); +} + #else /* users shouldn't be editing pose channel data directly -- better to set ipos and let blender calc pose_channel stuff */ @@ -129,29 +137,41 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); + prop= RNA_def_property(srna, "has_ik", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_PoseChannel_has_ik_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Has IK", "Is part of an IK chain."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + prop= RNA_def_property(srna, "ik_dof_x", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF); + RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF); RNA_def_property_ui_text(prop, "IK X DoF", "Allow movement around the X axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_dof_y", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF); + RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF); RNA_def_property_ui_text(prop, "IK Y DoF", "Allow movement around the Y axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_dof_z", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF); + RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF); RNA_def_property_ui_text(prop, "IK Z DoF", "Allow movement around the Z axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_limit_x", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_XLIMIT); RNA_def_property_ui_text(prop, "IK X Limit", "Limit movement around the X axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_limit_y", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_YLIMIT); RNA_def_property_ui_text(prop, "IK Y Limit", "Limit movement around the Y axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_limit_z", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_ZLIMIT); RNA_def_property_ui_text(prop, "IK Z Limit", "Limit movement around the Z axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "selectflag", BONE_SELECTED); @@ -166,11 +186,13 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "pathsf"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Bone Paths Calculation Start Frame", "Starting frame of range of frames to use for Bone Path calculations."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "path_end_frame", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pathef"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Bone Paths Calculation End Frame", "End frame of range of frames to use for Bone Path calculations."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "bone", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_struct_type(prop, "Bone"); @@ -239,28 +261,69 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Pose Tail Position", "Location of tail of the channel's bone."); - prop= RNA_def_property(srna, "ik_min_limits", PROP_FLOAT, PROP_VECTOR); - RNA_def_property_float_sdna(prop, NULL, "limitmin"); + prop= RNA_def_property(srna, "ik_min_x", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmin[0]"); RNA_def_property_range(prop, -180.0f, 0.0f); - RNA_def_property_ui_text(prop, "IK Minimum Limits", "Minimum angles for IK Limit"); + RNA_def_property_ui_text(prop, "IK X Minimum", "Minimum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); - prop= RNA_def_property(srna, "ik_max_limits", PROP_FLOAT, PROP_VECTOR); - RNA_def_property_float_sdna(prop, NULL, "limitmax"); + prop= RNA_def_property(srna, "ik_max_x", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmax[0]"); RNA_def_property_range(prop, 0.0f, 180.0f); - RNA_def_property_ui_text(prop, "IK Maximum Limits", "Maximum angles for IK Limit"); + RNA_def_property_ui_text(prop, "IK X Maximum", "Maximum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); - prop= RNA_def_property(srna, "ik_stiffness", PROP_FLOAT, PROP_VECTOR); - RNA_def_property_float_sdna(prop, NULL, "stiffness"); - RNA_def_property_range(prop, 0.0f,0.99f); - RNA_def_property_ui_text(prop, "IK Stiffness", "Stiffness around the different axes."); + prop= RNA_def_property(srna, "ik_min_y", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmin[1]"); + RNA_def_property_range(prop, -180.0f, 0.0f); + RNA_def_property_ui_text(prop, "IK Y Minimum", "Minimum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_max_y", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmax[1]"); + RNA_def_property_range(prop, 0.0f, 180.0f); + RNA_def_property_ui_text(prop, "IK Y Maximum", "Maximum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_min_z", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmin[2]"); + RNA_def_property_range(prop, -180.0f, 0.0f); + RNA_def_property_ui_text(prop, "IK Z Minimum", "Minimum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_max_z", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "limitmax[2]"); + RNA_def_property_range(prop, 0.0f, 180.0f); + RNA_def_property_ui_text(prop, "IK Z Maximum", "Maximum angles for IK Limit"); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_stiffness_x", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "stiffness[0]"); + RNA_def_property_range(prop, 0.0f, 0.99f); + RNA_def_property_ui_text(prop, "IK X Stiffness", "IK stiffness around the X axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_stiffness_y", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "stiffness[1]"); + RNA_def_property_range(prop, 0.0f, 0.99f); + RNA_def_property_ui_text(prop, "IK Y Stiffness", "IK stiffness around the Y axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); + + prop= RNA_def_property(srna, "ik_stiffness_z", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "stiffness[2]"); + RNA_def_property_range(prop, 0.0f, 0.99f); + RNA_def_property_ui_text(prop, "IK Z Stiffness", "IK stiffness around the Z axis."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "ik_stretch", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "ikstretch"); RNA_def_property_range(prop, 0.0f,1.0f); RNA_def_property_ui_text(prop, "IK Stretch", "Allow scaling of the bone for IK."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "custom", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Custom Object", "Object that defines custom draw type for this bone."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE|ND_TRANSFORM, "rna_Pose_update"); prop= RNA_def_property(srna, "lock_location", PROP_BOOLEAN, PROP_VECTOR); RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_LOCX); From d3799843aa8b14afeb293a8f17a21fefe3e4f605 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 14 Jul 2009 23:26:26 +0000 Subject: [PATCH 203/512] * set py 3.1 as default for windows * add some ignores for some warnings (which seem to be ignored on nixes already). * add zips for py 3.0 and py 3.1. Note: py 3.1 zip contains entire Lib --- config/win32-vc-config.py | 6 +++--- config/win64-vc-config.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py index 82babeb1a3a..67ab394bef9 100644 --- a/config/win32-vc-config.py +++ b/config/win32-vc-config.py @@ -9,10 +9,10 @@ BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib' BF_FFMPEG_LIB = 'avformat-52.lib avcodec-52.lib avdevice-52.lib avutil-50.lib swscale-0.lib' BF_PYTHON = LIBDIR + '/python' -BF_PYTHON_VERSION = '2.6' +BF_PYTHON_VERSION = '3.1' BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' BF_PYTHON_BINARY = 'python' -BF_PYTHON_LIB = 'python26' +BF_PYTHON_LIB = 'python31' BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib' WITH_BF_OPENAL = True @@ -149,7 +149,7 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT', '/wd4244', '/wd4305', '/wd4800'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index 83e27a85574..c6bea9eba89 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -9,10 +9,10 @@ BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib' BF_FFMPEG_LIB = 'avformat-52.lib avcodec-51.lib avdevice-52.lib avutil-49.lib swscale-0.lib' BF_PYTHON = LIBDIR + '/python' -BF_PYTHON_VERSION = '3.0' +BF_PYTHON_VERSION = '3.1' BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' BF_PYTHON_BINARY = 'python' -BF_PYTHON_LIB = 'python30' +BF_PYTHON_LIB = 'python31' BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib' WITH_BF_OPENAL = False @@ -152,7 +152,7 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT', '/wd4244', '/wd4305', '/wd4800'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] From 097d05a1afed5d3a6e919c8885da92e35fe482bc Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Wed, 15 Jul 2009 03:47:05 +0000 Subject: [PATCH 204/512] tiny fix: stamp alpha color was lacking range parameter I was going to commit it later with other changes, but I'm changing other stuff at rna_scene.c for the gamedata, and didn't want to mix it up. --- source/blender/makesrna/intern/rna_scene.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 920d8760358..ba6830f309b 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1220,12 +1220,14 @@ void rna_def_scene_render_data(BlenderRNA *brna) prop= RNA_def_property(srna, "stamp_foreground", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "fg_stamp"); RNA_def_property_array(prop, 4); + RNA_def_property_range(prop,0.0,1.0); RNA_def_property_ui_text(prop, "Stamp Foreground", "Stamp text color"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "stamp_background", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "bg_stamp"); RNA_def_property_array(prop, 4); + RNA_def_property_range(prop,0.0,1.0); RNA_def_property_ui_text(prop, "Stamp Background", "Color to use behind stamp text"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); From 99f373dc58938189af7faee38dd52cc7494f974a Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Wed, 15 Jul 2009 16:17:22 +0000 Subject: [PATCH 205/512] == Sequencer == Small fix for: * Scene-Strip rendering with compositor scenes failed, if they had no camera attached... --- source/blender/src/sequence.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 2183dd655be..f0d65043d23 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -1960,7 +1960,9 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, RenderResult rres; int doseq, rendering= G.rendering; char scenename[64]; - int sce_valid =sce&& (sce->camera || sce->r.scemode & R_DOSEQ); + int sce_valid =sce&& (sce->camera + || (sce->r.scemode & R_DOSEQ) + || (sce->r.scemode & R_DOCOMP)); if (se->ibuf == NULL && sce_valid && !build_proxy_run) { se->ibuf = seq_proxy_fetch(seq, cfra, render_size, From 4df1836325bd2847f3c88eb6fafa98e7bafea81c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Jul 2009 19:19:43 +0000 Subject: [PATCH 206/512] 2.5: User Preferences * Added basic infrastructure to layout user preferences. The intention is that you open a user preferences space in place of the buttons space, and have panels there. * The existing sections don't have to be followed, it's easy to create different ones, just change the user_pref_sections enum in RNA. * This will get separated from the info header later. --- release/ui/space_info.py | 27 ++++++++++++++++ source/blender/blenloader/intern/readfile.c | 3 ++ .../editors/interface/interface_panel.c | 2 ++ source/blender/editors/interface/resources.c | 4 ++- source/blender/editors/screen/area.c | 4 ++- .../editors/space_buttons/space_buttons.c | 31 ------------------ .../blender/editors/space_info/space_info.c | 32 ++----------------- source/blender/makesrna/intern/rna_context.c | 12 +++++++ 8 files changed, 53 insertions(+), 62 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index de3346711e9..a946b30f62d 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -108,6 +108,31 @@ class INFO_MT_help(bpy.types.Menu): layout = self.layout layout.itemL(text="Nothing yet") +class INFO_PT_tabs(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __no_header__ = True + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + + layout.itemR(userpref, "active_section") + +class INFO_PT_view(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "View" + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'VIEW_CONTROLS') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + view = userpref.view + + layout.itemR(view, "show_view_name") + bpy.types.register(INFO_HT_header) bpy.types.register(INFO_MT_file) bpy.types.register(INFO_MT_file_external_data) @@ -116,4 +141,6 @@ bpy.types.register(INFO_MT_timeline) bpy.types.register(INFO_MT_game) bpy.types.register(INFO_MT_render) bpy.types.register(INFO_MT_help) +bpy.types.register(INFO_PT_tabs) +bpy.types.register(INFO_PT_view) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 12d95888c0e..37dda0e41f4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9191,6 +9191,9 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 1)) { + } + /* TODO: should be moved into one of the version blocks once this branch moves to trunk and we can bump the version (or sub-version.) */ { diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index a3c456c0a93..363717c29d3 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -104,6 +104,8 @@ static int panel_aligned(ScrArea *sa, ARegion *ar) SpaceButs *sbuts= sa->spacedata.first; return sbuts->align; } + else if(sa->spacetype==SPACE_INFO && ar->regiontype == RGN_TYPE_WINDOW) + return BUT_VERTICAL; else if(sa->spacetype==SPACE_FILE && ar->regiontype == RGN_TYPE_CHANNELS) return BUT_VERTICAL; else if(ELEM3(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS)) diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 2798f7a473f..297e22610a6 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -581,7 +581,7 @@ void ui_theme_init_userdef(void) /* space info */ btheme->tinfo= btheme->tv3d; - SETCOL(btheme->tinfo.back, 153, 153, 153, 255); + SETCOLF(btheme->tinfo.back, 0.45, 0.45, 0.45, 1.0); /* space sound */ btheme->tsnd= btheme->tv3d; @@ -1231,6 +1231,8 @@ void init_userdef_do_versions(void) btheme->tlogic= btheme->tv3d; SETCOL(btheme->tlogic.back, 100, 100, 100, 255); } + + SETCOLF(btheme->tinfo.back, 0.45, 0.45, 0.45, 1.0); } } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index e923a3bde61..addda6e02ee 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1254,8 +1254,10 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) { ListBase *keymap; - // XXX quick hack for files saved with 2.5 already (i.e. the builtin defaults file) + // XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file) ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) + ar->v2d.flag &= ~V2D_IS_INITIALISED; UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 65fbdeb4205..9345a24b198 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -94,31 +94,6 @@ static SpaceLink *buttons_new(const bContext *C) BLI_addtail(&sbuts->regionbase, ar); ar->regiontype= RGN_TYPE_WINDOW; -#if 0 // disabled, as this currently draws badly in new system - /* buts space goes from (0,0) to (1280, 228) */ - ar->v2d.tot.xmin= 0.0f; - ar->v2d.tot.ymin= 0.0f; - ar->v2d.tot.xmax= 1279.0f; - ar->v2d.tot.ymax= 228.0f; - - ar->v2d.cur= sbuts->v2d.tot; - - ar->v2d.min[0]= 256.0f; - ar->v2d.min[1]= 42.0f; - - ar->v2d.max[0]= 2048.0f; - ar->v2d.max[1]= 450.0f; - - ar->v2d.minzoom= 0.5f; - ar->v2d.maxzoom= 1.21f; - - ar->v2d.scroll= 0; // TODO: will we need scrollbars? - ar->v2d.align= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; - ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT; - ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS; -#endif - - return (SpaceLink *)sbuts; } @@ -164,13 +139,7 @@ static SpaceLink *buttons_duplicate(SpaceLink *sl) /* add handlers, stuff you only do once or on area/region changes */ static void buttons_main_area_init(wmWindowManager *wm, ARegion *ar) { - ListBase *keymap; - ED_region_panels_init(wm, ar); - - /* own keymap */ - keymap= WM_keymap_listbase(wm, "Buttons", SPACE_BUTS, 0); /* XXX weak? */ - WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } static void buttons_main_area_draw(const bContext *C, ARegion *ar) diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 7b24e8f4e07..60d8b17668e 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -84,9 +84,6 @@ static SpaceLink *info_new(const bContext *C) BLI_addtail(&sinfo->regionbase, ar); ar->regiontype= RGN_TYPE_WINDOW; - /* channel list region XXX */ - - return (SpaceLink *)sinfo; } @@ -118,35 +115,12 @@ static SpaceLink *info_duplicate(SpaceLink *sl) /* add handlers, stuff you only do once or on area/region changes */ static void info_main_area_init(wmWindowManager *wm, ARegion *ar) { - ListBase *keymap; - - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); - - /* own keymap */ - keymap= WM_keymap_listbase(wm, "info", SPACE_INFO, 0); /* XXX weak? */ - WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + ED_region_panels_init(wm, ar); } static void info_main_area_draw(const bContext *C, ARegion *ar) { - /* draw entirely, view changes should be handled here */ - // SpaceInfo *sinfo= (SpaceInfo*)CTX_wm_space_data(C); - View2D *v2d= &ar->v2d; - float col[3]; - - /* clear and setup matrix */ - UI_GetThemeColor3fv(TH_BACK, col); - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - UI_view2d_view_ortho(C, v2d); - - /* data... */ - - /* reset view matrix */ - UI_view2d_view_restore(C); - - /* scrollers? */ + ED_region_panels(C, ar, 1, NULL); } void info_operatortypes(void) @@ -217,7 +191,7 @@ void ED_spacetype_info(void) art->init= info_main_area_init; art->draw= info_main_area_draw; art->listener= info_main_area_listener; - art->keymapflag= ED_KEYMAP_VIEW2D; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c index 7fa27348002..5e164c6525f 100644 --- a/source/blender/makesrna/intern/rna_context.c +++ b/source/blender/makesrna/intern/rna_context.c @@ -25,6 +25,7 @@ #include #include "DNA_ID.h" +#include "DNA_userdef_types.h" #include "RNA_access.h" #include "RNA_define.h" @@ -102,6 +103,13 @@ static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C)); } +static PointerRNA rna_Context_user_preferences_get(PointerRNA *ptr) +{ + PointerRNA newptr; + RNA_pointer_create(NULL, &RNA_UserPreferences, &U, &newptr); + return newptr; +} + #else void RNA_def_context(BlenderRNA *brna) @@ -165,6 +173,10 @@ void RNA_def_context(BlenderRNA *brna) RNA_def_property_struct_type(prop, "ToolSettings"); RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL); + prop= RNA_def_property(srna, "user_preferences", PROP_POINTER, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "UserPreferences"); + RNA_def_property_pointer_funcs(prop, "rna_Context_user_preferences_get", NULL, NULL); } #endif From d4504aa891c38333089da6bba50f66ca588cca1e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Jul 2009 19:20:59 +0000 Subject: [PATCH 207/512] 2.5 * Some changes to make lamp and world textures editing work. You may have to click on another texture slot once before being able to add a texture, and the layout is messy. Added this so lightenv project isn't blocked by this being missing. * Adding a new material slot now doesn't create a new material anymore, to avoid creating unused materials. * Tiny changes to scene/object buttons. --- release/ui/buttons_objects.py | 2 +- release/ui/buttons_scene.py | 3 +- release/ui/buttons_texture.py | 148 ++++++++++++------ source/blender/blenkernel/intern/material.c | 11 +- .../editors/interface/interface_templates.c | 24 +-- source/blender/makesrna/intern/rna_brush.c | 27 +++- source/blender/makesrna/intern/rna_internal.h | 2 +- source/blender/makesrna/intern/rna_lamp.c | 37 ++++- source/blender/makesrna/intern/rna_material.c | 34 +++- source/blender/makesrna/intern/rna_world.c | 49 ++++-- 10 files changed, 248 insertions(+), 89 deletions(-) diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index 9261da6cc9e..69bc1708eba 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -161,7 +161,7 @@ class OBJECT_PT_animation(ObjectButtonsPanel): sub.itemR(ob, "time_offset", text="Offset") sub = split.column() - sub.itemL(text="Tracking:") + sub.itemL(text="Track:") sub.itemR(ob, "track", text="") sub.itemR(ob, "track_axis", text="Axis") sub.itemR(ob, "up_axis", text="Up Axis") diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 90de34116a6..e5587d55dcb 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -111,11 +111,12 @@ class RENDER_PT_shading(RenderButtonsPanel): split = layout.split() col = split.column() + col.itemR(rd, "render_textures", text="Textures") col.itemR(rd, "render_shadows", text="Shadows") col.itemR(rd, "render_sss", text="Subsurface Scattering") - col.itemR(rd, "render_envmaps", text="Environment Map") col = split.column() + col.itemR(rd, "render_envmaps", text="Environment Map") col.itemR(rd, "render_raytracing", text="Ray Tracing") col.itemR(rd, "alpha_mode", text="Alpha") diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 05c28073b8d..030e0836ca7 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -81,6 +81,9 @@ class TEXTURE_PT_mapping(TextureButtonsPanel): def draw(self, context): layout = self.layout + ma = context.material + la = context.lamp + wo = context.world tex = context.texture_slot textype = context.texture @@ -104,16 +107,22 @@ class TEXTURE_PT_mapping(TextureButtonsPanel): col = split.column() col.itemR(tex, "mapping", text="") - split = layout.split() - - col = split.column() - col.itemR(tex, "from_dupli") - - col = split.column() - row = col.row() - row.itemR(tex, "x_mapping", text="") - row.itemR(tex, "y_mapping", text="") - row.itemR(tex, "z_mapping", text="") + if ma: + split = layout.split() + + col = split.column() + if tex.texture_coordinates in ('ORCO', 'UV'): + col.itemR(tex, "from_dupli") + elif tex.texture_coordinates == 'OBJECT': + col.itemR(tex, "from_original") + else: + col.itemL() + + col = split.column() + row = col.row() + row.itemR(tex, "x_mapping", text="") + row.itemR(tex, "y_mapping", text="") + row.itemR(tex, "z_mapping", text="") row = layout.row() row.column().itemR(tex, "offset") @@ -129,51 +138,90 @@ class TEXTURE_PT_influence(TextureButtonsPanel): def draw(self, context): layout = self.layout + ma = context.material + la = context.lamp + wo = context.world textype = context.texture tex = context.texture_slot - split = layout.split() + if ma: + split = layout.split() + + col = split.column() + col.itemR(tex, "map_color", text="Diffuse Color") + colsub = col.column() + colsub.active = tex.map_color + colsub.itemR(tex, "color_factor", text="Opacity", slider=True) + colsub.itemR(tex, "blend_type") + col.itemR(tex, "rgb_to_intensity") + colsub = col.column() + colsub.active = tex.rgb_to_intensity + colsub.itemR(tex, "color") - col = split.column() - col.itemR(tex, "map_color", text="Diffuse Color") - colsub = col.column() - colsub.active = tex.map_color - colsub.itemR(tex, "color_factor", text="Opacity", slider=True) - colsub.itemR(tex, "blend_type") - col.itemR(tex, "rgb_to_intensity") - colsub = col.column() - colsub.active = tex.rgb_to_intensity - colsub.itemR(tex, "color") - - col.itemR(tex, "map_colorspec") - col.itemR(tex, "map_normal") - colsub = col.column() - colsub.active = tex.map_normal - colsub.itemR(tex, "normal_factor", text="Amount", slider=True) - col.itemR(tex, "normal_map_space") - col.itemR(tex, "map_warp") - colsub = col.column() - colsub.active = tex.map_warp - colsub.itemR(tex, "warp_factor", text="Amount", slider=True) - col.itemR(tex, "map_displacement") - colsub = col.column() - colsub.active = tex.map_displacement - colsub.itemR(tex, "displacement_factor", text="Amount", slider=True) - col = split.column() - col.itemR(tex, "map_mirror") - col.itemR(tex, "map_reflection") - col.itemR(tex, "map_specularity") - col.itemR(tex, "map_ambient") - col.itemR(tex, "map_hardness") - col.itemR(tex, "map_raymir") - col.itemR(tex, "map_alpha") - col.itemR(tex, "map_emit") - col.itemR(tex, "map_translucency") + col.itemR(tex, "map_colorspec") + col.itemR(tex, "map_normal") + colsub = col.column() + colsub.active = tex.map_normal + colsub.itemR(tex, "normal_factor", text="Amount", slider=True) + col.itemR(tex, "normal_map_space") + col.itemR(tex, "map_warp") + colsub = col.column() + colsub.active = tex.map_warp + colsub.itemR(tex, "warp_factor", text="Amount", slider=True) + col.itemR(tex, "map_displacement") + colsub = col.column() + colsub.active = tex.map_displacement + colsub.itemR(tex, "displacement_factor", text="Amount", slider=True) + col = split.column() + col.itemR(tex, "map_mirror") + col.itemR(tex, "map_reflection") + col.itemR(tex, "map_specularity") + col.itemR(tex, "map_ambient") + col.itemR(tex, "map_hardness") + col.itemR(tex, "map_raymir") + col.itemR(tex, "map_alpha") + col.itemR(tex, "map_emit") + col.itemR(tex, "map_translucency") + + colsub = col.column() + colsub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror + colsub.itemR(tex, "default_value", text="Amount", slider=True) + + elif la: + row = layout.row() + row.itemR(tex, "map_color") + row.itemR(tex, "map_shadow") + + split = layout.split() + + col = split.column() + col.itemR(tex, "color_factor", text="Opacity", slider=True) + col.itemR(tex, "blend_type") + col.itemR(tex, "rgb_to_intensity") + col.itemR(tex, "color") + + col = split.column() + col.itemR(tex, "default_value", text="DVar", slider=True) + elif wo: + row = layout.row() + row.itemR(tex, "map_blend") + row.itemR(tex, "map_horizon") + row.itemR(tex, "map_zenith_up") + row.itemR(tex, "map_zenith_down") + + split = layout.split() + + col = split.column() + col.itemR(tex, "color_factor", text="Opacity", slider=True) + col.itemR(tex, "blend_type") + col.itemR(tex, "rgb_to_intensity") + col.itemR(tex, "color") + + col = split.column() + col.itemR(tex, "normal_factor", text="Nor", slider=True) + col.itemR(tex, "variable_factor", text="Var", slider=True) + col.itemR(tex, "default_value", text="DVar", slider=True) - colsub = col.column() - colsub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror - colsub.itemR(tex, "default_value", text="Amount", slider=True) - row = layout.row() row.itemR(tex, "stencil") row.itemR(tex, "negate", text="Negative") diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index d1fdac65dbb..088b1b6e0c2 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -613,7 +613,8 @@ void assign_material(Object *ob, Material *ma, int act) (*matarar)[act-1]= ma; } - id_us_plus((ID *)ma); + if(ma) + id_us_plus((ID *)ma); test_object_materials(ob->data); } @@ -645,13 +646,7 @@ void object_add_material_slot(Object *ob) if(ob->totcol>=MAXMAT) return; ma= give_current_material(ob, ob->actcol); - if(ma==NULL) - ma= add_material("Material"); - else - ma= copy_material(ma); - - ma->id.us= 0; /* eeh... */ - + assign_material(ob, ma, ob->totcol+1); ob->actcol= ob->totcol; } diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 8f25459a682..512d279cc37 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1301,13 +1301,14 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point CollectionPointerLink *link; PropertyRNA *prop= NULL, *activeprop; PropertyType type, activetype; + StructRNA *ptype; uiLayout *box, *row, *col; uiBlock *block; uiBut *but; Panel *pa; ListBase lb; char *name, str[32]; - int i= 0, activei= 0, len, items, found, min, max; + int icon=0, i= 0, activei= 0, len, items, found, min, max; lb.first= lb.last= NULL; @@ -1351,6 +1352,12 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point return lb; } + /* get icon */ + if(ptr->data && prop) { + ptype= RNA_property_pointer_type(ptr, prop); + icon= RNA_struct_ui_icon(ptype); + } + /* get active data */ activei= RNA_property_int_get(activeptr, activeprop); @@ -1368,10 +1375,10 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point if(found) { /* create button */ name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); - if(name) { - uiItemL(row, name, RNA_struct_ui_icon(itemptr.type)); + uiItemL(row, (name)? name: "", icon); + + if(name) MEM_freeN(name); - } /* add to list to return */ link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); @@ -1423,13 +1430,12 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point if(i >= pa->list_scroll && ilist_scroll+items) { name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); - if(name) { - /* create button */ - but= uiDefIconTextButR(block, ROW, 0, RNA_struct_ui_icon(itemptr.type), name, 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); - uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); + /* create button */ + but= uiDefIconTextButR(block, ROW, 0, icon, (name)? name: "", 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); + uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); + if(name) MEM_freeN(name); - } /* add to list to return */ link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 3b7df3aa948..954c20e211c 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -34,6 +34,10 @@ #ifdef RNA_RUNTIME +#include "MEM_guardedalloc.h" + +#include "BKE_texture.h" + static void rna_Brush_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Brush *brush= (Brush*)ptr->data; @@ -46,6 +50,27 @@ static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, brush->mtex[(int)brush->texact]); } +static void rna_Brush_active_texture_index_set(PointerRNA *ptr, int value) +{ + Brush *brush= (Brush*)ptr->data; + int act= brush->texact; + + if(value == act || value < 0 || value >= MAX_MTEX) + return; + + /* auto create/free mtex on activate/deactive, so we can edit + * the texture pointer in the buttons UI. */ + if(brush->mtex[act] && !brush->mtex[act]->tex) { + MEM_freeN(brush->mtex[act]); + brush->mtex[act]= NULL; + } + + brush->texact= value; + + if(!brush->mtex[value]) + brush->mtex[value]= add_mtex(); +} + static float rna_Brush_rotation_get(PointerRNA *ptr) { Brush *brush= (Brush*)ptr->data; @@ -198,7 +223,7 @@ void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve."); /* texture */ - rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get", "TextureSlot"); + rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get", "rna_Brush_active_texture_index_set", "TextureSlot"); /* clone tool */ prop= RNA_def_property(srna, "clone_image", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index ad0e05b91a6..3e92c606e53 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -169,7 +169,7 @@ void RNA_def_world(struct BlenderRNA *brna); void rna_def_animdata_common(struct StructRNA *srna); void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable); -void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *structname); +void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname); void rna_ID_name_get(struct PointerRNA *ptr, char *value); int rna_ID_name_length(struct PointerRNA *ptr); diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index e592cb38693..61d4a3a8ac6 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -37,6 +37,10 @@ #ifdef RNA_RUNTIME +#include "MEM_guardedalloc.h" + +#include "BKE_texture.h" + static void rna_Lamp_buffer_size_set(PointerRNA *ptr, int value) { Lamp *la= (Lamp*)ptr->data; @@ -63,6 +67,29 @@ static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, la->mtex[(int)la->texact]); } +static void rna_Lamp_active_texture_index_set(PointerRNA *ptr, int value) +{ + Lamp *la= (Lamp*)ptr->data; + int act= la->texact; + + if(value == act || value < 0 || value >= MAX_MTEX) + return; + + /* auto create/free mtex on activate/deactive, so we can edit + * the texture pointer in the buttons UI. */ + if(la->mtex[act] && !la->mtex[act]->tex) { + MEM_freeN(la->mtex[act]); + la->mtex[act]= NULL; + } + + la->texact= value; + + if(!la->mtex[value]) { + la->mtex[value]= add_mtex(); + la->mtex[value]->texco= TEXCO_GLOB; + } +} + static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr) { Lamp *la= (Lamp*)ptr->data; @@ -111,13 +138,13 @@ static void rna_def_lamp_mtex(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates."); - prop= RNA_def_property(srna, "map_to_color", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_COL); - RNA_def_property_ui_text(prop, "Map To Color", "Lets the texture affect the basic color of the lamp."); + RNA_def_property_ui_text(prop, "Color", "Lets the texture affect the basic color of the lamp."); - prop= RNA_def_property(srna, "map_to_shadow", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_shadow", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_SHAD); - RNA_def_property_ui_text(prop, "Map To Shadow", "Lets the texture affect the shadow color of the lamp."); + RNA_def_property_ui_text(prop, "Shadow", "Lets the texture affect the shadow color of the lamp."); } static void rna_def_lamp_sky_settings(BlenderRNA *brna) @@ -308,7 +335,7 @@ static void rna_def_lamp(BlenderRNA *brna) RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); /* textures */ - rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", "LampTextureSlot"); + rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", "rna_Lamp_active_texture_index_set", "LampTextureSlot"); /* script link */ prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index b0164bda27c..c8ee0479f61 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -37,6 +37,10 @@ #ifdef RNA_RUNTIME +#include "MEM_guardedalloc.h" + +#include "BKE_texture.h" + static PointerRNA rna_Material_mirror_get(PointerRNA *ptr) { return rna_pointer_inherit_refine(ptr, &RNA_MaterialRaytraceMirror, ptr->id.data); @@ -84,6 +88,27 @@ static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, ma->mtex[(int)ma->texact]); } +static void rna_Material_active_texture_index_set(PointerRNA *ptr, int value) +{ + Material *ma= (Material*)ptr->data; + int act= ma->texact; + + if(value == act || value < 0 || value >= MAX_MTEX) + return; + + /* auto create/free mtex on activate/deactive, so we can edit + * the texture pointer in the buttons UI. */ + if(ma->mtex[act] && !ma->mtex[act]->tex) { + MEM_freeN(ma->mtex[act]); + ma->mtex[act]= NULL; + } + + ma->texact= value; + + if(!ma->mtex[value]) + ma->mtex[value]= add_mtex(); +} + static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, float *max) { Material *ma= (Material*)ptr->id.data; @@ -221,6 +246,10 @@ static void rna_def_material_mtex(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_DUPLI_MAPTO); RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent (only for UV and Orco texture coordinates)."); + prop= RNA_def_property(srna, "from_original", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_OB_DUPLI_ORIG); + RNA_def_property_ui_text(prop, "From Original", "Dupli's derive their object coordinates from the original objects transformation."); + prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL); RNA_def_property_ui_text(prop, "Color", "Causes the texture to affect basic color of the material"); @@ -1116,7 +1145,7 @@ void RNA_def_material(BlenderRNA *brna) /* common */ rna_def_animdata_common(srna); - rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", "MaterialTextureSlot"); + rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", "rna_Material_active_texture_index_set", "MaterialTextureSlot"); prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_pointer_sdna(prop, NULL, "scriptlink"); @@ -1136,7 +1165,7 @@ void RNA_def_material(BlenderRNA *brna) rna_def_material_strand(brna); } -void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeget, const char *structname) +void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname) { PropertyRNA *prop; @@ -1154,6 +1183,7 @@ void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeg prop= RNA_def_property(srna, "active_texture_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "texact"); + RNA_def_property_int_funcs(prop, NULL, activeset, NULL); RNA_def_property_range(prop, 0, MAX_MTEX-1); RNA_def_property_ui_text(prop, "Active Texture Index", "Index of active texture slot."); } diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index 9ff474b82b0..c93d18d4017 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -38,6 +38,10 @@ #ifdef RNA_RUNTIME +#include "MEM_guardedalloc.h" + +#include "BKE_texture.h" + static PointerRNA rna_World_ambient_occlusion_get(PointerRNA *ptr) { return rna_pointer_inherit_refine(ptr, &RNA_WorldAmbientOcclusion, ptr->id.data); @@ -66,6 +70,29 @@ static PointerRNA rna_World_active_texture_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, wo->mtex[(int)wo->texact]); } +static void rna_World_active_texture_index_set(PointerRNA *ptr, int value) +{ + World *wo= (World*)ptr->data; + int act= wo->texact; + + if(value == act || value < 0 || value >= MAX_MTEX) + return; + + /* auto create/free mtex on activate/deactive, so we can edit + * the texture pointer in the buttons UI. */ + if(wo->mtex[act] && !wo->mtex[act]->tex) { + MEM_freeN(wo->mtex[act]); + wo->mtex[act]= NULL; + } + + wo->texact= value; + + if(!wo->mtex[value]) { + wo->mtex[value]= add_mtex(); + wo->mtex[value]->texco= TEXCO_VIEW; + } +} + #else static void rna_def_world_mtex(BlenderRNA *brna) @@ -87,26 +114,26 @@ static void rna_def_world_mtex(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock."); /* map to */ - prop= RNA_def_property(srna, "map_to_blend", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND); - RNA_def_property_ui_text(prop, "Map To Blend", "Affect the color progression of the background."); + RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background."); - prop= RNA_def_property(srna, "map_to_horizon", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ); - RNA_def_property_ui_text(prop, "Map To Horizon", "Affect the color of the horizon."); + RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon."); - prop= RNA_def_property(srna, "map_to_zenith_up", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP); - RNA_def_property_ui_text(prop, "Map To Zenith Up", "Affect the color of the zenith above."); + RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above."); - prop= RNA_def_property(srna, "map_to_zenith_down", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN); - RNA_def_property_ui_text(prop, "Map To Zenith Down", "Affect the color of the zenith below."); + RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below."); /* unused - prop= RNA_def_property(srna, "map_to_mist", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_mist", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST); - RNA_def_property_ui_text(prop, "Map To Mist", "Causes the texture to affect the intensity of the mist.");*/ + RNA_def_property_ui_text(prop, "Mist", "Causes the texture to affect the intensity of the mist.");*/ prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "texco"); @@ -348,7 +375,7 @@ void RNA_def_world(BlenderRNA *brna) RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA); rna_def_animdata_common(srna); - rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get", "WorldTextureSlot"); + rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get", "rna_World_active_texture_index_set", "WorldTextureSlot"); /* colors */ prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR); From a8ce1a15860297e530cb71529066758eca8fa02b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 15 Jul 2009 22:51:47 +0000 Subject: [PATCH 208/512] 2.5 - Tweak to Action Constraint 'Transform Channel' order of options --- source/blender/makesrna/intern/rna_constraint.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 0e3dd799612..d84d6f159d8 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -716,15 +716,15 @@ static void rna_def_constraint_action(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem transform_channel_items[] = { - {00, "ROTATION_X", 0, "Rotation X", ""}, - {01, "ROTATION_Y", 0, "Rotation Y", ""}, - {02, "ROTATION_Z", 0, "Rotation Z", ""}, - {10, "SIZE_X", 0, "Scale X", ""}, - {11, "SIZE_Y", 0, "Scale Y", ""}, - {12, "SIZE_Z", 0, "Scale Z", ""}, {20, "LOCATION_X", 0, "Location X", ""}, {21, "LOCATION_Y", 0, "Location Y", ""}, {22, "LOCATION_Z", 0, "Location Z", ""}, + {00, "ROTATION_X", 0, "Rotation X", ""}, + {01, "ROTATION_Y", 0, "Rotation Y", ""}, + {02, "ROTATION_Z", 0, "Rotation Z", ""}, + {10, "SCALE_X", 0, "Scale X", ""}, + {11, "SCALE_Y", 0, "Scale Y", ""}, + {12, "SCALE_Z", 0, "Scale Z", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "ActionConstraint", "Constraint"); From 7c2fb421957da7d2e167283cd6c95a1a7a26c7f7 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Jul 2009 22:58:12 +0000 Subject: [PATCH 209/512] 2.5: Defaults * Wave modifier speed 0.5 -> 0.25. * Particles even and random distribution on. * Particles normal velocity 0.0 -> 1.0. * Particles size 1.0 -> 0.05. * Particles draw emitter and material color on. * Field strength 0.0 -> 1.0 * Object drawing without material was not consistent with default material. * Panel title 13 -> 12 points. --- source/blender/blenkernel/intern/effect.c | 1 + source/blender/blenkernel/intern/modifier.c | 2 +- source/blender/blenkernel/intern/particle.c | 6 ++++-- source/blender/editors/interface/interface_style.c | 2 +- source/blender/gpu/intern/gpu_draw.c | 12 ++++++------ source/blender/makesrna/intern/rna_modifier.c | 2 +- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 553fdfe530e..7951fcf1d3e 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -105,6 +105,7 @@ PartDeflect *object_add_collision_fields(void) pd->pdef_sbift = 0.2f; pd->pdef_sboft = 0.02f; pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128; + pd->f_strength = 1.0f; return pd; } diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 046dfcc9f87..948d02f2a80 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -5069,7 +5069,7 @@ static void waveModifier_initData(ModifierData *md) wmd->map_object = NULL; wmd->height= 0.5f; wmd->width= 1.5f; - wmd->speed= 0.5f; + wmd->speed= 0.25f; wmd->narrow= 1.5f; wmd->lifetime= 0.0f; wmd->damp= 10.0f; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index cefeafcdd50..da14ac46550 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -3077,7 +3077,7 @@ static void default_particle_settings(ParticleSettings *part) part->bb_uv_split=1; part->bb_align=PART_BB_VIEW; part->bb_split_offset=PART_BB_OFF_LINEAR; - part->flag=PART_REACT_MULTIPLE|PART_HAIR_GEOMETRY; + part->flag=PART_REACT_MULTIPLE|PART_HAIR_GEOMETRY|PART_EDISTR|PART_TRAND; part->sta= 1.0; part->end= 100.0; @@ -3102,6 +3102,7 @@ static void default_particle_settings(ParticleSettings *part) part->nbetween= 4; part->boidneighbours= 5; + part->normfac= 1.0f; part->max_vel = 10.0f; part->average_vel = 0.3f; part->max_tan_acc = 0.2f; @@ -3110,7 +3111,7 @@ static void default_particle_settings(ParticleSettings *part) part->reactshape=1.0f; part->mass=1.0; - part->size=1.0; + part->size=0.05; part->childsize=1.0; part->child_nbr=10; @@ -3128,6 +3129,7 @@ static void default_particle_settings(ParticleSettings *part) part->clength=1.0f; part->clength_thres=0.0f; + part->draw= PART_DRAW_EMITTER|PART_DRAW_MAT_COL; part->draw_line[0]=0.5; part->path_start = 0.0f; part->path_end = 1.0f; diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 57f35f71927..6faa658c3d0 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -92,7 +92,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->panelzoom= 1.0; style->paneltitle.uifont_id= UIFONT_DEFAULT; - style->paneltitle.points= 13; + style->paneltitle.points= 12; style->paneltitle.kerning= 0; style->paneltitle.shadow= 5; style->paneltitle.shadx= 2; diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index efb7d688a49..1031a240470 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -854,14 +854,14 @@ void GPU_begin_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, O /* no materials assigned? */ if(ob->totcol==0) { - GMS.matbuf[0][0][0]= defmaterial.r; - GMS.matbuf[0][0][1]= defmaterial.g; - GMS.matbuf[0][0][2]= defmaterial.b; + GMS.matbuf[0][0][0]= (defmaterial.ref+defmaterial.emit)*defmaterial.r; + GMS.matbuf[0][0][1]= (defmaterial.ref+defmaterial.emit)*defmaterial.g; + GMS.matbuf[0][0][2]= (defmaterial.ref+defmaterial.emit)*defmaterial.b; GMS.matbuf[0][0][3]= 1.0; - GMS.matbuf[0][1][0]= defmaterial.specr; - GMS.matbuf[0][1][1]= defmaterial.specg; - GMS.matbuf[0][1][2]= defmaterial.specb; + GMS.matbuf[0][1][0]= defmaterial.spec*defmaterial.specr; + GMS.matbuf[0][1][1]= defmaterial.spec*defmaterial.specg; + GMS.matbuf[0][1][2]= defmaterial.spec*defmaterial.specb; GMS.matbuf[0][1][3]= 1.0; /* do material 1 too, for displists! */ diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index f207f4f605d..b3dfc6a8dd6 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -733,7 +733,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna) prop= RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); - RNA_def_property_ui_range(prop, -2, 2, 10, 2); + RNA_def_property_ui_range(prop, -1, 1, 10, 2); RNA_def_property_ui_text(prop, "Speed", ""); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); From acb07bf0139f8071668ffab915ba0704adabc7a6 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Jul 2009 22:58:34 +0000 Subject: [PATCH 210/512] 2.5: fix for closed panels not resizing properly. --- .../blender/editors/interface/interface_panel.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 363717c29d3..377861ae0d7 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -268,14 +268,19 @@ void uiEndPanel(uiBlock *block, int width, int height) pa->sizex= width; pa->sizey= height; } - else if(!(width == 0 || height == 0)) { - if(pa->sizex != width || pa->sizey != height) { + else { + /* check if we need to do an animation */ + if(!ELEM(width, 0, pa->sizex) || !ELEM(height, 0, pa->sizey)) { pa->runtime_flag |= PNL_ANIM_ALIGN; - pa->ofsy += pa->sizey-height; + if(height != 0) + pa->ofsy += pa->sizey-height; } - pa->sizex= width; - pa->sizey= height; + /* update width/height if non-zero */ + if(width != 0) + pa->sizex= width; + if(height != 0) + pa->sizey= height; } } From 7dc0083921f84ec0dc8139626e0fc944532a0b19 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Jul 2009 23:24:51 +0000 Subject: [PATCH 211/512] 2.5: fix for uninitialized var in 3d view header template. --- source/blender/editors/space_view3d/view3d_header.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index e68a1c8a10a..78b21ded2f5 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -4419,7 +4419,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) Object *ob= OBACT; Object *obedit = CTX_data_edit_object(C); uiBlock *block; - int a, xco, maxco=0, yco= 3; + int a, xco=0, maxco=0, yco= 0; block= uiLayoutFreeBlock(layout); uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL); From ce431c5c6e17877846812bab2d6bf9f8dc40fd48 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 15 Jul 2009 23:26:24 +0000 Subject: [PATCH 212/512] make py3.1 default for mingw/scons too. --- config/win32-mingw-config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index eab373d2553..1223a4c49e9 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -2,7 +2,7 @@ LCGDIR = '#../lib/windows' LIBDIR = "${LCGDIR}" BF_PYTHON = LIBDIR + '/python' -BF_PYTHON_VERSION = '2.5' +BF_PYTHON_VERSION = '3.1' #BF_PYTHON_VERSION = '2.6' WITH_BF_STATICPYTHON = False BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' From 2f74b5a2605d3bb83f6c7500f9d3899296bfbb59 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Jul 2009 00:50:27 +0000 Subject: [PATCH 213/512] Console Space Type * interactive console python console. * display reports and filter types. defaults to operator display so you can see the python commands for tools as you use them, eventually it should be possible to select commands and make macto/tools from them. Example use of autocomp. b, bpy., bpy., bpy.data. etc. basic instructions are printed when opening the console. Details... * Console exec and autocomp are done with operators written in python. * added CTX_wm_reports() to get the global report list. * The window manager had a report ListBase but reports have their own struct, switched to allocate and assign when initializing the WM since the type is not available in DNA. * changed report types flags for easier display filtering. * added report type RPT_OPERATOR * logging operators also adds a python-syntax report into CTX_wm_reports() so they can be displayed in the console as well as calling a notifier for console to redraw. * RnaAPI context.area.tag_redraw() to redraw the current area from a python operator. Todo... * better interactions with the console, scrolling, copy/paste. * the text displayed doesnt load back. * colors need to be themed. * scroll limit needs to be a user pref. * only tested with cmake and scons. --- release/ui/space_console.py | 417 +++++++++++++ release/ui/space_text.py | 373 ------------ source/blender/blenkernel/BKE_context.h | 2 + source/blender/blenkernel/BKE_report.h | 21 +- source/blender/blenkernel/intern/context.c | 12 + source/blender/blenkernel/intern/report.c | 1 + source/blender/blenloader/intern/readfile.c | 16 +- source/blender/blenloader/intern/writefile.c | 3 + source/blender/editors/SConscript | 1 + source/blender/editors/include/ED_space_api.h | 1 + source/blender/editors/screen/area.c | 1 + source/blender/editors/space_api/spacetypes.c | 1 + .../blender/editors/space_console/SConscript | 13 + .../editors/space_console/console_draw.c | 214 +++++++ .../editors/space_console/console_intern.h | 75 +++ .../editors/space_console/console_ops.c | 570 ++++++++++++++++++ .../editors/space_console/space_console.c | 336 +++++++++++ source/blender/makesdna/DNA_space_types.h | 58 +- .../makesdna/DNA_windowmanager_types.h | 2 +- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_screen.c | 11 + source/blender/makesrna/intern/rna_space.c | 134 ++++ source/blender/python/intern/bpy_ui.c | 1 + source/blender/windowmanager/WM_types.h | 5 + source/blender/windowmanager/intern/wm.c | 13 +- .../windowmanager/intern/wm_event_system.c | 6 +- .../windowmanager/intern/wm_init_exit.c | 21 + .../windowmanager/intern/wm_operators.c | 2 +- source/blender/windowmanager/wm.h | 2 +- 29 files changed, 1924 insertions(+), 389 deletions(-) create mode 100644 release/ui/space_console.py create mode 100644 source/blender/editors/space_console/SConscript create mode 100644 source/blender/editors/space_console/console_draw.c create mode 100644 source/blender/editors/space_console/console_intern.h create mode 100644 source/blender/editors/space_console/console_ops.c create mode 100644 source/blender/editors/space_console/space_console.c diff --git a/release/ui/space_console.py b/release/ui/space_console.py new file mode 100644 index 00000000000..497f34a28d0 --- /dev/null +++ b/release/ui/space_console.py @@ -0,0 +1,417 @@ + +import bpy + +class CONSOLE_HT_header(bpy.types.Header): + __space_type__ = "CONSOLE" + __idname__ = "CONSOLE_HT_header" + + def draw(self, context): + sc = context.space_data + # text = sc.text + layout = self.layout + + layout.template_header() + + if context.area.show_menus: + row = layout.row() + row.itemM("CONSOLE_MT_console") + + row = layout.row() + row.scale_x = 0.9 + row.itemR(sc, "type", expand=True) + if sc.type == 'REPORT': + row.itemR(sc, "show_report_debug") + row.itemR(sc, "show_report_info") + row.itemR(sc, "show_report_operator") + row.itemR(sc, "show_report_warn") + row.itemR(sc, "show_report_error") + + +class CONSOLE_MT_console(bpy.types.Menu): + __space_type__ = "CONSOLE" + __label__ = "Console" + + def draw(self, context): + layout = self.layout + sc = context.space_data + + layout.column() + layout.itemO("CONSOLE_OT_clear") + +def add_scrollback(text, text_type): + for l in text.split('\n'): + bpy.ops.CONSOLE_OT_scrollback_append(text=l.replace('\t', ' '), type=text_type) + +def get_console(console_id): + ''' + helper function for console operators + currently each text datablock gets its own console - code.InteractiveConsole() + ...which is stored in this function. + + console_id can be any hashable type + ''' + import sys, code, io + + try: consoles = get_console.consoles + except:consoles = get_console.consoles = {} + + # clear all dead consoles, use text names as IDs + # TODO, find a way to clear IDs + ''' + for console_id in list(consoles.keys()): + if console_id not in bpy.data.texts: + del consoles[id] + ''' + + try: + namespace, console, stdout, stderr = consoles[console_id] + except: + namespace = {'__builtins__':__builtins__} # locals() + namespace['bpy'] = bpy + + console = code.InteractiveConsole(namespace) + + if sys.version.startswith('2'): + stdout = io.BytesIO() # Py2x support + stderr = io.BytesIO() + else: + stdout = io.StringIO() + stderr = io.StringIO() + + consoles[console_id]= namespace, console, stdout, stderr + + return namespace, console, stdout, stderr + +class CONSOLE_OT_exec(bpy.types.Operator): + ''' + Operator documentatuon text, will be used for the operator tooltip and python docs. + ''' + __label__ = "Console Execute" + + # Both prompts must be the same length + PROMPT = '>>> ' + PROMPT_MULTI = '... ' + + # is this working??? + ''' + def poll(self, context): + return (context.space_data.type == 'PYTHON') + ''' # its not :| + + def execute(self, context): + import sys + + sc = context.space_data + + try: + line = sc.history[-1].line + except: + return ('CANCELLED',) + + if sc.type != 'PYTHON': + return ('CANCELLED',) + + namespace, console, stdout, stderr = get_console(hash(context.region)) + + # redirect output + sys.stdout = stdout + sys.stderr = stderr + + # run the console + if not line.strip(): + line_exec = '\n' # executes a multiline statement + else: + line_exec = line + + is_multiline = console.push(line_exec) + + stdout.seek(0) + stderr.seek(0) + + output = stdout.read() + output_err = stderr.read() + + # cleanup + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + sys.last_traceback = None + + # So we can reuse, clear all data + stdout.truncate(0) + stderr.truncate(0) + + bpy.ops.CONSOLE_OT_scrollback_append(text = sc.prompt+line, type='INPUT') + + if is_multiline: sc.prompt = self.PROMPT_MULTI + else: sc.prompt = self.PROMPT + + # insert a new blank line + bpy.ops.CONSOLE_OT_history_append(text="", current_character=0) + + # Insert the output into the editor + # not quite correct because the order might have changed, but ok 99% of the time. + if output: add_scrollback(output, 'OUTPUT') + if output_err: add_scrollback(output_err, 'ERROR') + + + return ('FINISHED',) + + +def autocomp(bcon): + ''' + This function has been taken from a BGE console autocomp I wrote a while ago + the dictionaty bcon is not needed but it means I can copy and paste from the old func + which works ok for now. + + could be moved into its own module. + ''' + + + def is_delimiter(ch): + ''' + For skipping words + ''' + if ch == '_': + return False + if ch.isalnum(): + return False + + return True + + def is_delimiter_autocomp(ch): + ''' + When autocompleteing will earch back and + ''' + if ch in '._[] "\'': + return False + if ch.isalnum(): + return False + + return True + + + def do_autocomp(autocomp_prefix, autocomp_members): + ''' + return text to insert and a list of options + ''' + autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] + + print("AUTO: '%s'" % autocomp_prefix) + print("MEMBERS: '%s'" % str(autocomp_members)) + + if not autocomp_prefix: + return '', autocomp_members + elif len(autocomp_members) > 1: + # find a common string between all members after the prefix + # 'ge' [getA, getB, getC] --> 'get' + + # get the shortest member + min_len = min([len(v) for v in autocomp_members]) + + autocomp_prefix_ret = '' + + for i in range(len(autocomp_prefix), min_len): + char_soup = set() + for v in autocomp_members: + char_soup.add(v[i]) + + if len(char_soup) > 1: + break + else: + autocomp_prefix_ret += char_soup.pop() + + print(autocomp_prefix_ret) + return autocomp_prefix_ret, autocomp_members + elif len(autocomp_members) == 1: + return autocomp_members[0][len(autocomp_prefix):], [] + else: + return '', [] + + + def BCon_PrevChar(bcon): + cursor = bcon['cursor']-1 + if cursor<0: + return None + + try: + return bcon['edit_text'][cursor] + except: + return None + + + def BCon_NextChar(bcon): + try: + return bcon['edit_text'][bcon['cursor']] + except: + return None + + def BCon_cursorLeft(bcon): + bcon['cursor'] -= 1 + if bcon['cursor'] < 0: + bcon['cursor'] = 0 + + def BCon_cursorRight(bcon): + bcon['cursor'] += 1 + if bcon['cursor'] > len(bcon['edit_text']): + bcon['cursor'] = len(bcon['edit_text']) + + def BCon_AddScrollback(bcon, text): + + bcon['scrollback'] = bcon['scrollback'] + text + + + def BCon_cursorInsertChar(bcon, ch): + if bcon['cursor']==0: + bcon['edit_text'] = ch + bcon['edit_text'] + elif bcon['cursor']==len(bcon['edit_text']): + bcon['edit_text'] = bcon['edit_text'] + ch + else: + bcon['edit_text'] = bcon['edit_text'][:bcon['cursor']] + ch + bcon['edit_text'][bcon['cursor']:] + + bcon['cursor'] + if bcon['cursor'] > len(bcon['edit_text']): + bcon['cursor'] = len(bcon['edit_text']) + BCon_cursorRight(bcon) + + + TEMP_NAME = '___tempname___' + + cursor_orig = bcon['cursor'] + + ch = BCon_PrevChar(bcon) + while ch != None and (not is_delimiter(ch)): + ch = BCon_PrevChar(bcon) + BCon_cursorLeft(bcon) + + if ch != None: + BCon_cursorRight(bcon) + + #print (cursor_orig, bcon['cursor']) + + cursor_base = bcon['cursor'] + + autocomp_prefix = bcon['edit_text'][cursor_base:cursor_orig] + + print("PREFIX:'%s'" % autocomp_prefix) + + # Get the previous word + if BCon_PrevChar(bcon)=='.': + BCon_cursorLeft(bcon) + ch = BCon_PrevChar(bcon) + while ch != None and is_delimiter_autocomp(ch)==False: + ch = BCon_PrevChar(bcon) + BCon_cursorLeft(bcon) + + cursor_new = bcon['cursor'] + + if ch != None: + cursor_new+=1 + + pytxt = bcon['edit_text'][cursor_new:cursor_base-1].strip() + print("AUTOCOMP EVAL: '%s'" % pytxt) + #try: + if pytxt: + bcon['console'].runsource(TEMP_NAME + '=' + pytxt, '', 'single') + # print val + else: ##except: + val = None + + try: + val = bcon['namespace'][TEMP_NAME] + del bcon['namespace'][TEMP_NAME] + except: + val = None + + if val: + autocomp_members = dir(val) + + autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) + + bcon['cursor'] = cursor_orig + for v in autocomp_prefix_ret: + BCon_cursorInsertChar(bcon, v) + cursor_orig = bcon['cursor'] + + if autocomp_members: + BCon_AddScrollback(bcon, ', '.join(autocomp_members)) + + del val + + else: + # Autocomp global namespace + autocomp_members = bcon['namespace'].keys() + + if autocomp_prefix: + autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] + + autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) + + bcon['cursor'] = cursor_orig + for v in autocomp_prefix_ret: + BCon_cursorInsertChar(bcon, v) + cursor_orig = bcon['cursor'] + + if autocomp_members: + BCon_AddScrollback(bcon, ', '.join(autocomp_members)) + + bcon['cursor'] = cursor_orig + + +class CONSOLE_OT_autocomplete(bpy.types.Operator): + ''' + Operator documentatuon text, will be used for the operator tooltip and python docs. + ''' + __label__ = "Console Autocomplete" + + def poll(self, context): + return context.space_data.type == 'PYTHON' + + def execute(self, context): + + sc = context.space_data + + namespace, console, stdout, stderr = get_console(hash(context.region)) + + current_line = sc.history[-1] + line = current_line.line + + if not console: + return ('CANCELLED',) + + if sc.type != 'PYTHON': + return ('CANCELLED',) + + # fake cursor, use for autocomp func. + bcon = {} + bcon['cursor'] = current_line.current_character + bcon['console'] = console + bcon['edit_text'] = line + bcon['namespace'] = namespace + bcon['scrollback'] = '' # nor from the BGE console + + + # This function isnt aware of the text editor or being an operator + # just does the autocomp then copy its results back + autocomp(bcon) + + # Now we need to copy back the line from blender back into the text editor. + # This will change when we dont use the text editor anymore + if bcon['scrollback']: + add_scrollback(bcon['scrollback'], 'INFO') + + # copy back + current_line.line = bcon['edit_text'] + current_line.current_character = bcon['cursor'] + + context.area.tag_redraw() + + return ('FINISHED',) + + + +bpy.types.register(CONSOLE_HT_header) +bpy.types.register(CONSOLE_MT_console) + +bpy.ops.add(CONSOLE_OT_exec) +bpy.ops.add(CONSOLE_OT_autocomplete) + diff --git a/release/ui/space_text.py b/release/ui/space_text.py index c6ce1cb71d6..07e43f32054 100644 --- a/release/ui/space_text.py +++ b/release/ui/space_text.py @@ -226,376 +226,6 @@ class TEXT_MT_edit(bpy.types.Menu): layout.itemM("TEXT_MT_edit_to3d") - -def get_console(text): - ''' - helper function for console operators - currently each text datablock gets its own console - code.InteractiveConsole() - ...which is stored in this function. - ''' - import sys, code, io - - try: consoles = get_console.consoles - except:consoles = get_console.consoles = {} - - # clear all dead consoles, use text names as IDs - for id in list(consoles.keys()): - if id not in bpy.data.texts: - del consoles[id] - - if not text: - return None, None, None - - id = text.name - - try: - namespace, console, stdout = consoles[id] - except: - namespace = locals() - namespace['bpy'] = bpy - - console = code.InteractiveConsole(namespace) - - if sys.version.startswith('2'): stdout = io.BytesIO() # Py2x support - else: stdout = io.StringIO() - - consoles[id]= namespace, console, stdout - - return namespace, console, stdout - -class TEXT_OT_console_exec(bpy.types.Operator): - ''' - Operator documentatuon text, will be used for the operator tooltip and python docs. - ''' - __label__ = "Console Execute" - - # Each text block gets its own console info. - console = {} - - # Both prompts must be the same length - PROMPT = '>>> ' - PROMPT_MULTI = '... ' - - def execute(self, context): - import sys - - st = context.space_data - text = st.text - - if not text: - return ('CANCELLED',) - - namespace, console, stdout = get_console(text) - - line = text.current_line.line - - # redirect output - sys.stdout = stdout - sys.stderr = stdout - - # run the console - if not line.strip(): - line = '\n' # executes a multiline statement - - if line.startswith(self.PROMPT_MULTI) or line.startswith(self.PROMPT): - line = line[len(self.PROMPT):] - was_prefix = True - else: - was_prefix = False - - - is_multiline = console.push(line) - - stdout.seek(0) - output = stdout.read() - - # cleanup - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.last_traceback = None - - # So we can reuse, clear all data - stdout.truncate(0) - - if is_multiline: - prefix = self.PROMPT_MULTI - else: - prefix = self.PROMPT - - # Kindof odd, add the prefix if we didnt have one. makes it easier to re-read. - if not was_prefix: - bpy.ops.TEXT_OT_move(type='LINE_BEGIN') - bpy.ops.TEXT_OT_insert(text = prefix) - - bpy.ops.TEXT_OT_move(type='LINE_END') - - # Insert the output into the editor - bpy.ops.TEXT_OT_insert(text= '\n' + output + prefix) - - return ('FINISHED',) - - -def autocomp(bcon): - ''' - This function has been taken from a BGE console autocomp I wrote a while ago - the dictionaty bcon is not needed but it means I can copy and paste from the old func - which works ok for now. - - could be moved into its own module. - ''' - - - def is_delimiter(ch): - ''' - For skipping words - ''' - if ch == '_': - return False - if ch.isalnum(): - return False - - return True - - def is_delimiter_autocomp(ch): - ''' - When autocompleteing will earch back and - ''' - if ch in '._[] "\'': - return False - if ch.isalnum(): - return False - - return True - - - def do_autocomp(autocomp_prefix, autocomp_members): - ''' - return text to insert and a list of options - ''' - autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] - - print("AUTO: '%s'" % autocomp_prefix) - print("MEMBERS: '%s'" % str(autocomp_members)) - - if not autocomp_prefix: - return '', autocomp_members - elif len(autocomp_members) > 1: - # find a common string between all members after the prefix - # 'ge' [getA, getB, getC] --> 'get' - - # get the shortest member - min_len = min([len(v) for v in autocomp_members]) - - autocomp_prefix_ret = '' - - for i in range(len(autocomp_prefix), min_len): - char_soup = set() - for v in autocomp_members: - char_soup.add(v[i]) - - if len(char_soup) > 1: - break - else: - autocomp_prefix_ret += char_soup.pop() - - print(autocomp_prefix_ret) - return autocomp_prefix_ret, autocomp_members - elif len(autocomp_members) == 1: - return autocomp_members[0][len(autocomp_prefix):], [] - else: - return '', [] - - - def BCon_PrevChar(bcon): - cursor = bcon['cursor']-1 - if cursor<0: - return None - - try: - return bcon['edit_text'][cursor] - except: - return None - - - def BCon_NextChar(bcon): - try: - return bcon['edit_text'][bcon['cursor']] - except: - return None - - def BCon_cursorLeft(bcon): - bcon['cursor'] -= 1 - if bcon['cursor'] < 0: - bcon['cursor'] = 0 - - def BCon_cursorRight(bcon): - bcon['cursor'] += 1 - if bcon['cursor'] > len(bcon['edit_text']): - bcon['cursor'] = len(bcon['edit_text']) - - def BCon_AddScrollback(bcon, text): - - bcon['scrollback'] = bcon['scrollback'] + text - - - def BCon_cursorInsertChar(bcon, ch): - if bcon['cursor']==0: - bcon['edit_text'] = ch + bcon['edit_text'] - elif bcon['cursor']==len(bcon['edit_text']): - bcon['edit_text'] = bcon['edit_text'] + ch - else: - bcon['edit_text'] = bcon['edit_text'][:bcon['cursor']] + ch + bcon['edit_text'][bcon['cursor']:] - - bcon['cursor'] - if bcon['cursor'] > len(bcon['edit_text']): - bcon['cursor'] = len(bcon['edit_text']) - BCon_cursorRight(bcon) - - - TEMP_NAME = '___tempname___' - - cursor_orig = bcon['cursor'] - - ch = BCon_PrevChar(bcon) - while ch != None and (not is_delimiter(ch)): - ch = BCon_PrevChar(bcon) - BCon_cursorLeft(bcon) - - if ch != None: - BCon_cursorRight(bcon) - - #print (cursor_orig, bcon['cursor']) - - cursor_base = bcon['cursor'] - - autocomp_prefix = bcon['edit_text'][cursor_base:cursor_orig] - - print("PREFIX:'%s'" % autocomp_prefix) - - # Get the previous word - if BCon_PrevChar(bcon)=='.': - BCon_cursorLeft(bcon) - ch = BCon_PrevChar(bcon) - while ch != None and is_delimiter_autocomp(ch)==False: - ch = BCon_PrevChar(bcon) - BCon_cursorLeft(bcon) - - cursor_new = bcon['cursor'] - - if ch != None: - cursor_new+=1 - - pytxt = bcon['edit_text'][cursor_new:cursor_base-1].strip() - print("AUTOCOMP EVAL: '%s'" % pytxt) - #try: - if pytxt: - bcon['console'].runsource(TEMP_NAME + '=' + pytxt, '', 'single') - # print val - else: ##except: - val = None - - try: - val = bcon['namespace'][TEMP_NAME] - del bcon['namespace'][TEMP_NAME] - except: - val = None - - if val: - autocomp_members = dir(val) - - autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) - - bcon['cursor'] = cursor_orig - for v in autocomp_prefix_ret: - BCon_cursorInsertChar(bcon, v) - cursor_orig = bcon['cursor'] - - if autocomp_members: - BCon_AddScrollback(bcon, ', '.join(autocomp_members)) - - del val - - else: - # Autocomp global namespace - autocomp_members = bcon['namespace'].keys() - - if autocomp_prefix: - autocomp_members = [v for v in autocomp_members if v.startswith(autocomp_prefix)] - - autocomp_prefix_ret, autocomp_members = do_autocomp(autocomp_prefix, autocomp_members) - - bcon['cursor'] = cursor_orig - for v in autocomp_prefix_ret: - BCon_cursorInsertChar(bcon, v) - cursor_orig = bcon['cursor'] - - if autocomp_members: - BCon_AddScrollback(bcon, ', '.join(autocomp_members)) - - bcon['cursor'] = cursor_orig - - -class TEXT_OT_console_autocomplete(bpy.types.Operator): - ''' - Operator documentatuon text, will be used for the operator tooltip and python docs. - ''' - __label__ = "Console Autocomplete" - - def execute(self, context): - - st = context.space_data - text = st.text - - namespace, console, stdout = get_console(text) - - line = text.current_line.line - - if not console: - return ('CANCELLED',) - - - # fake cursor, use for autocomp func. - bcon = {} - bcon['cursor'] = text.current_character - bcon['console'] = console - bcon['edit_text'] = line - bcon['namespace'] = namespace - bcon['scrollback'] = '' # nor from the BGE console - - - # This function isnt aware of the text editor or being an operator - # just does the autocomp then copy its results back - autocomp(bcon) - - # Now we need to copy back the line from blender back into the text editor. - # This will change when we dont use the text editor anymore - - # clear the line - bpy.ops.TEXT_OT_move(type='LINE_END') - bpy.ops.TEXT_OT_move_select(type = 'LINE_BEGIN') - bpy.ops.TEXT_OT_delete(type = 'PREVIOUS_CHARACTER') - - if bcon['scrollback']: - bpy.ops.TEXT_OT_move_select(type = 'LINE_BEGIN') - bpy.ops.TEXT_OT_insert(text = bcon['scrollback'].strip() + '\n') - bpy.ops.TEXT_OT_move_select(type='LINE_BEGIN') - - bpy.ops.TEXT_OT_insert(text = bcon['edit_text']) - - # Read only - if 0: - text.current_character = bcon['cursor'] - else: - bpy.ops.TEXT_OT_move(type = 'LINE_BEGIN') - - for i in range(bcon['cursor']): - bpy.ops.TEXT_OT_move(type='NEXT_CHARACTER') - - - return ('FINISHED',) - - - bpy.types.register(TEXT_HT_header) bpy.types.register(TEXT_PT_properties) bpy.types.register(TEXT_PT_find) @@ -607,6 +237,3 @@ bpy.types.register(TEXT_MT_edit_select) bpy.types.register(TEXT_MT_edit_markers) bpy.types.register(TEXT_MT_edit_to3d) -bpy.ops.add(TEXT_OT_console_exec) -bpy.ops.add(TEXT_OT_console_autocomplete) - diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 92c79ff757f..5baf5af81d1 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -111,11 +111,13 @@ struct SpaceLink *CTX_wm_space_data(const bContext *C); struct ARegion *CTX_wm_region(const bContext *C); void *CTX_wm_region_data(const bContext *C); struct ARegion *CTX_wm_menu(const bContext *C); +struct ReportList *CTX_wm_reports(const bContext *C); struct View3D *CTX_wm_view3d(const bContext *C); struct RegionView3D *CTX_wm_region_view3d(const bContext *C); struct SpaceText *CTX_wm_space_text(const bContext *C); struct SpaceImage *CTX_wm_space_image(const bContext *C); +struct SpaceConsole *CTX_wm_space_console(const bContext *C); void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm); void CTX_wm_window_set(bContext *C, struct wmWindow *win); diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h index 1bb7152fbf3..26853866ebb 100644 --- a/source/blender/blenkernel/BKE_report.h +++ b/source/blender/blenkernel/BKE_report.h @@ -40,15 +40,22 @@ extern "C" { * is needed. */ typedef enum ReportType { - RPT_DEBUG = 0, - RPT_INFO = 1000, - RPT_WARNING = 2000, - RPT_ERROR = 3000, - RPT_ERROR_INVALID_INPUT = 3001, - RPT_ERROR_INVALID_CONTEXT = 3002, - RPT_ERROR_OUT_OF_MEMORY = 3003 + RPT_DEBUG = 1<<0, + RPT_INFO = 1<<1, + RPT_OPERATOR = 1<<2, + RPT_WARNING = 1<<3, + RPT_ERROR = 1<<4, + RPT_ERROR_INVALID_INPUT = 1<<5, + RPT_ERROR_INVALID_CONTEXT = 1<<6, + RPT_ERROR_OUT_OF_MEMORY = 1<<7 } ReportType; +#define RPT_DEBUG_ALL (RPT_DEBUG) +#define RPT_INFO_ALL (RPT_INFO) +#define RPT_OPERATOR_ALL (RPT_OPERATOR) +#define RPT_WARNING_ALL (RPT_WARNING) +#define RPT_ERROR_ALL (RPT_ERROR|RPT_ERROR_INVALID_INPUT|RPT_ERROR_INVALID_CONTEXT|RPT_ERROR_OUT_OF_MEMORY) + enum ReportListFlags { RPT_PRINT = 1, RPT_STORE = 2, diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 1b499384886..bbf3ceb01e8 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -204,6 +204,11 @@ struct ARegion *CTX_wm_menu(const bContext *C) return C->wm.menu; } +struct ReportList *CTX_wm_reports(const bContext *C) +{ + return C->wm.manager->reports; +} + View3D *CTX_wm_view3d(const bContext *C) { if(C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D) @@ -226,6 +231,13 @@ struct SpaceText *CTX_wm_space_text(const bContext *C) return NULL; } +struct SpaceConsole *CTX_wm_space_console(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_CONSOLE) + return C->wm.area->spacedata.first; + return NULL; +} + struct SpaceImage *CTX_wm_space_image(const bContext *C) { if(C->wm.area && C->wm.area->spacetype==SPACE_IMAGE) diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index 8de8cf8d0f4..6564329ef82 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -49,6 +49,7 @@ static char *report_type_str(int type) switch(type) { case RPT_DEBUG: return "Debug"; case RPT_INFO: return "Info"; + case RPT_OPERATOR: return "Operator"; case RPT_WARNING: return "Warning"; case RPT_ERROR: return "Error"; case RPT_ERROR_INVALID_INPUT: return "Invalid Input Error"; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 37dda0e41f4..5489c55f789 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4221,7 +4221,7 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm) wm->keymaps.first= wm->keymaps.last= NULL; wm->paintcursors.first= wm->paintcursors.last= NULL; wm->queue.first= wm->queue.last= NULL; - wm->reports.first= wm->reports.last= NULL; + wm->reports= NULL; wm->jobs.first= wm->jobs.last= NULL; wm->windrawable= NULL; @@ -4856,6 +4856,20 @@ static void direct_link_screen(FileData *fd, bScreen *sc) SpaceButs *sbuts= (SpaceButs *)sl; sbuts->path= NULL; } + else if(sl->spacetype==SPACE_CONSOLE) { + SpaceConsole *sconsole= (SpaceConsole *)sl; + ConsoleLine *cl; + + link_list(fd, &sconsole->scrollback); + link_list(fd, &sconsole->history); + + //for(cl= sconsole->scrollback.first; cl; cl= cl->next) + // cl->line= newdataadr(fd, cl->line); + + //for(cl= sconsole->history.first; cl; cl= cl->next) + // cl->line= newdataadr(fd, cl->line); + + } } sa->actionzones.first= sa->actionzones.last= NULL; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index ebec409ddf4..958e8bb874b 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1960,6 +1960,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase) else if(sl->spacetype==SPACE_LOGIC){ writestruct(wd, DATA, "SpaceLogic", 1, sl); } + else if(sl->spacetype==SPACE_CONSOLE) { + writestruct(wd, DATA, "SpaceConsole", 1, sl); + } sl= sl->next; } } diff --git a/source/blender/editors/SConscript b/source/blender/editors/SConscript index 9baaf7ae7a5..d7bb567e3eb 100644 --- a/source/blender/editors/SConscript +++ b/source/blender/editors/SConscript @@ -30,6 +30,7 @@ SConscript(['datafiles/SConscript', 'space_text/SConscript', 'space_sequencer/SConscript', 'space_logic/SConscript', + 'space_console/SConscript', 'transform/SConscript', 'screen/SConscript', 'sculpt_paint/SConscript', diff --git a/source/blender/editors/include/ED_space_api.h b/source/blender/editors/include/ED_space_api.h index f2b46369d13..efaf0f56f92 100644 --- a/source/blender/editors/include/ED_space_api.h +++ b/source/blender/editors/include/ED_space_api.h @@ -51,6 +51,7 @@ void ED_spacetype_script(void); void ED_spacetype_text(void); void ED_spacetype_sequencer(void); void ED_spacetype_logic(void); +void ED_spacetype_console(void); /* calls for instancing and freeing spacetype static data called in WM_init_exit */ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index addda6e02ee..9617a1fbea2 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1059,6 +1059,7 @@ static char *windowtype_pup(void) "|%l" //293 "|Scripts Window %x14"//313 + "|Console %x18" ); } diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c index c8df9bb9741..5a55c5fb717 100644 --- a/source/blender/editors/space_api/spacetypes.c +++ b/source/blender/editors/space_api/spacetypes.c @@ -75,6 +75,7 @@ void ED_spacetypes_init(void) ED_spacetype_text(); ED_spacetype_sequencer(); ED_spacetype_logic(); + ED_spacetype_console(); // ... /* register operator types for screen and all spaces */ diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript new file mode 100644 index 00000000000..a29c17f6937 --- /dev/null +++ b/source/blender/editors/space_console/SConscript @@ -0,0 +1,13 @@ +#!/usr/bin/python +Import ('env') + +sources = env.Glob('*.c') +defs = [] +incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' +incs += ' ../../python ../../makesrna ../../blenfont' + +if not env['WITH_BF_PYTHON']: + defs.append('DISABLE_PYTHON') + +env.BlenderLib ( 'bf_editors_space_console', sources, Split(incs), defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c new file mode 100644 index 00000000000..042c84041d0 --- /dev/null +++ b/source/blender/editors/space_console/console_draw.c @@ -0,0 +1,214 @@ +/** + * $Id: text_draw.c 21558 2009-07-13 11:41:24Z campbellbarton $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "BLF_api.h" + +#include "BLI_blenlib.h" + +#include "DNA_space_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" + +#include "BKE_global.h" +#include "BKE_main.h" +// #include "BKE_suggestions.h" +#include "BKE_text.h" +#include "BKE_report.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" +#include "BIF_glutil.h" + +#include "ED_datafiles.h" +#include "UI_interface.h" +#include "UI_resources.h" + +//#include "console_intern.h" + +static void console_font_begin(SpaceConsole *sc) +{ + static int mono= -1; // XXX needs proper storage + + if(mono == -1) + mono= BLF_load_mem("monospace", (unsigned char*)datatoc_bmonofont_ttf, datatoc_bmonofont_ttf_size); + + BLF_set(mono); + BLF_aspect(1.0); + + BLF_size(sc->lheight, 72); +} + +static void console_line_color(int type) +{ + switch(type){ + case CONSOLE_LINE_OUTPUT: + glColor4ub(96, 128, 255, 255); + break; + case CONSOLE_LINE_INPUT: + glColor4ub(255, 255, 255, 255); + break; + case CONSOLE_LINE_INFO: + glColor4ub(0, 170, 0, 255); + break; + case CONSOLE_LINE_ERROR: + glColor4ub(220, 96, 96, 255); + break; + } +} + +static void console_report_color(int type) +{ + if(type & RPT_ERROR_ALL) return glColor4ub(220, 0, 0, 255); + if(type & RPT_WARNING_ALL) return glColor4ub(220, 96, 96, 255); + if(type & RPT_OPERATOR_ALL) return glColor4ub(96, 128, 255, 255); + if(type & RPT_INFO_ALL) return glColor4ub(0, 170, 0, 255); + if(type & RPT_DEBUG_ALL) return glColor4ub(196, 196, 196, 255); + return glColor4ub(196, 196, 196, 255); /* unknown */ +} + + +/* return 0 if the last line is off the screen + * should be able to use this for any string type */ +static int console_draw_string(char *str, int str_len, int console_width, int lheight, int ymax, int *x, int *y) +{ + if(str_len > console_width) { /* wrap? */ + int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ + char *line_stride= str + ((tot_lines-1) * console_width); /* advance to the last line and draw it first */ + char eol; /* baclup the end of wrapping */ + + /* last part needs no clipping */ + BLF_position(*x, *y, 0); (*y) += lheight; + BLF_draw(line_stride); + line_stride -= console_width; + + for(; line_stride >= str; line_stride -= console_width) { + eol = line_stride[console_width]; + line_stride[console_width]= '\0'; + + BLF_position(*x, *y, 0); (*y) += lheight; + BLF_draw(line_stride); + + line_stride[console_width] = eol; /* restore */ + + /* check if were out of view bounds */ + if(*y > ymax) + return 0; + } + } + else { /* simple, no wrap */ + BLF_position(*x, *y, 0); (*y) += lheight; + BLF_draw(str); + + if(*y > ymax) + return 0; + } + + return 1; +} + +#define CONSOLE_DRAW_MARGIN 8 + +void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +{ + ConsoleLine *cl= sc->history.last; + + int x_orig=CONSOLE_DRAW_MARGIN, y_orig=CONSOLE_DRAW_MARGIN; + int x,y; + int cwidth; + int console_width; /* number of characters that fit into the width of the console (fixed width) */ + + + console_font_begin(sc); + cwidth = BLF_fixed_width(); + + console_width= (ar->winx - CONSOLE_DRAW_MARGIN*2)/cwidth; + if (console_width < 8) console_width= 8; + + x= x_orig; y= y_orig; + + if(sc->type==CONSOLE_TYPE_PYTHON) { + int prompt_len= strlen(sc->prompt); + + /* text */ + console_line_color(CONSOLE_LINE_INPUT); + + /* command line */ + if(prompt_len) { + BLF_position(x, y, 0); x += cwidth * prompt_len; + BLF_draw(sc->prompt); + } + BLF_position(x, y, 0); + BLF_draw(cl->line); + + /* cursor */ + console_line_color(CONSOLE_LINE_ERROR); /* lazy */ + glRecti(x+(cwidth*cl->cursor) -1, y-2, x+(cwidth*cl->cursor) +1, y+sc->lheight-2); + + x= x_orig; /* remove prompt offset */ + + y += sc->lheight; + + for(cl= sc->scrollback.last; cl; cl= cl->prev) { + console_line_color(cl->type); + + if(!console_draw_string(cl->line, cl->len, console_width, sc->lheight, ar->winy + sc->lheight, &x, &y)) + break; /* past the y limits */ + + } + } + else { + Report *report; + int report_mask= 0; + + /* convert our display toggles into a flag compatible with BKE_report flags */ + if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL; + if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL; + if(sc->rpt_mask & CONSOLE_RPT_OP) report_mask |= RPT_OPERATOR_ALL; + if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL; + if(sc->rpt_mask & CONSOLE_RPT_ERR) report_mask |= RPT_ERROR_ALL; + + for(report=reports->list.last; report; report=report->prev) { + + if(report->type & report_mask) { + console_report_color(report->type); + if(!console_draw_string(report->message, strlen(report->message), console_width, sc->lheight, ar->winy + sc->lheight, &x, &y)) + break; /* past the y limits */ + } + + } + } + +} diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h new file mode 100644 index 00000000000..55474844d87 --- /dev/null +++ b/source/blender/editors/space_console/console_intern.h @@ -0,0 +1,75 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef ED_CONSOLE_INTERN_H +#define ED_CONSOLE_INTERN_H + +/* internal exports only */ + +struct ConsoleLine; +struct wmOperatorType; +struct ReportList; + +/* TODO, make into a pref */ +#define CONSOLE_SCROLLBACK_LIMIT 128 + +/* console_draw.c */ +void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); + +/* console_ops.c */ +void console_history_free(SpaceConsole *sc, ConsoleLine *cl); +void console_scrollback_free(SpaceConsole *sc, ConsoleLine *cl); +ConsoleLine *console_history_add_str(const bContext *C, char *str, int own); +ConsoleLine *console_scrollback_add_str(const bContext *C, char *str, int own); + +ConsoleLine *console_history_verify(const bContext *C); + + +void CONSOLE_OT_move(wmOperatorType *ot); +void CONSOLE_OT_delete(wmOperatorType *ot); +void CONSOLE_OT_insert(wmOperatorType *ot); + +void CONSOLE_OT_history_append(wmOperatorType *ot); +void CONSOLE_OT_scrollback_append(wmOperatorType *ot); + +void CONSOLE_OT_clear(wmOperatorType *ot); +void CONSOLE_OT_history_cycle(wmOperatorType *ot); +void CONSOLE_OT_zoom(wmOperatorType *ot); + +enum { LINE_BEGIN, LINE_END, PREV_CHAR, NEXT_CHAR, PREV_WORD, NEXT_WORD }; +enum { DEL_ALL, DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_SELECTION, DEL_NEXT_SEL, DEL_PREV_SEL }; + +/* defined in DNA_space_types.h */ +static EnumPropertyItem console_line_type_items[] = { + {CONSOLE_LINE_OUTPUT, "OUTPUT", 0, "Output", ""}, + {CONSOLE_LINE_INPUT, "INPUT", 0, "Input", ""}, + {CONSOLE_LINE_INFO, "INFO", 0, "Information", ""}, + {CONSOLE_LINE_ERROR, "ERROR", 0, "Error", ""}, + {0, NULL, 0, NULL, NULL}}; + +#endif /* ED_CONSOLE_INTERN_H */ + diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c new file mode 100644 index 00000000000..cb883d2d450 --- /dev/null +++ b/source/blender/editors/space_console/console_ops.c @@ -0,0 +1,570 @@ +/** + * $Id: text_ops.c 21549 2009-07-12 12:47:34Z campbellbarton $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include /* ispunct */ +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_space_types.h" +#include "DNA_windowmanager_types.h" + +#include "BLI_blenlib.h" +#include "PIL_time.h" + +#include "BKE_utildefines.h" +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_global.h" +#include "BKE_library.h" +#include "BKE_main.h" +#include "BKE_report.h" +// #include "BKE_suggestions.h" +//#include "BKE_text.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "UI_interface.h" +#include "UI_resources.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "console_intern.h" + +void console_history_free(SpaceConsole *sc, ConsoleLine *cl) +{ + BLI_remlink(&sc->history, cl); + MEM_freeN(cl->line); + MEM_freeN(cl); +} +void console_scrollback_free(SpaceConsole *sc, ConsoleLine *cl) +{ + BLI_remlink(&sc->scrollback, cl); + MEM_freeN(cl->line); + MEM_freeN(cl); +} + +void console_scrollback_limit(SpaceConsole *sc) +{ + int tot; + for(tot= BLI_countlist(&sc->scrollback); tot > CONSOLE_SCROLLBACK_LIMIT; tot--) + console_scrollback_free(sc, sc->scrollback.first); +} + +/* return 0 if no change made, clamps the range */ +static int console_line_cursor_set(ConsoleLine *cl, int cursor) +{ + int cursor_new; + + if(cursor < 0) cursor_new= 0; + else if(cursor > cl->len) cursor_new= cl->len; + else cursor_new= cursor; + + if(cursor_new == cl->cursor) + return 0; + + cl->cursor= cursor_new; + return 1; +} + +static ConsoleLine *console_lb_add__internal(ListBase *lb, ConsoleLine *from) +{ + ConsoleLine *ci= MEM_callocN(sizeof(ConsoleLine), "ConsoleLine Add"); + + if(from) { + ci->line= BLI_strdup(from->line); + ci->len= strlen(ci->line); + ci->len_alloc= ci->len; + + ci->cursor= from->cursor; + ci->type= from->type; + } else { + ci->line= MEM_callocN(64, "console-in-line"); + ci->len_alloc= 64; + ci->len= 0; + } + + BLI_addtail(lb, ci); + return ci; +} + +static ConsoleLine *console_history_add(const bContext *C, ConsoleLine *from) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + return console_lb_add__internal(&sc->history, from); +} + +static ConsoleLine *console_scrollback_add(const bContext *C, ConsoleLine *from) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + return console_lb_add__internal(&sc->scrollback, from); +} + +static ConsoleLine *console_lb_add_str__internal(ListBase *lb, const bContext *C, char *str, int own) +{ + ConsoleLine *ci= MEM_callocN(sizeof(ConsoleLine), "ConsoleLine Add"); + if(own) ci->line= str; + else ci->line= BLI_strdup(str); + + ci->len = ci->len_alloc = strlen(str); + + BLI_addtail(lb, ci); + return ci; +} +ConsoleLine *console_history_add_str(const bContext *C, char *str, int own) +{ + return console_lb_add_str__internal(&CTX_wm_space_console(C)->history, C, str, own); +} +ConsoleLine *console_scrollback_add_str(const bContext *C, char *str, int own) +{ + return console_lb_add_str__internal(&CTX_wm_space_console(C)->scrollback, C, str, own); +} + +ConsoleLine *console_history_verify(const bContext *C) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ConsoleLine *ci= sc->history.last; + if(ci==NULL) + ci= console_history_add(C, NULL); + + return ci; +} + + +static void console_line_verify_length(ConsoleLine *ci, int len) +{ + /* resize the buffer if needed */ + if(len > ci->len_alloc) { + int new_len= len * 2; /* new length */ + char *new_line= MEM_callocN(new_len, "console line"); + memcpy(new_line, ci->line, ci->len); + MEM_freeN(ci->line); + + ci->line= new_line; + ci->len_alloc= new_len; + } +} + +static int console_line_insert(ConsoleLine *ci, char *str) +{ + int len = strlen(str); + + if(len==0) + return 0; + + console_line_verify_length(ci, len + ci->len); + + memmove(ci->line+ci->cursor+len, ci->line+ci->cursor, (ci->len - ci->cursor)+1); + memcpy(ci->line+ci->cursor, str, len); + + ci->len += len; + ci->cursor += len; + + return len; +} + +static int console_edit_poll(const bContext *C) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + if(!sc || sc->type != CONSOLE_TYPE_PYTHON) + return 0; + + return 1; +} + +/* static funcs for text editing */ + + +/* similar to the text editor, with some not used. keep compatible */ +static EnumPropertyItem move_type_items[]= { + {LINE_BEGIN, "LINE_BEGIN", 0, "Line Begin", ""}, + {LINE_END, "LINE_END", 0, "Line End", ""}, + {PREV_CHAR, "PREVIOUS_CHARACTER", 0, "Previous Character", ""}, + {NEXT_CHAR, "NEXT_CHARACTER", 0, "Next Character", ""}, + {PREV_WORD, "PREVIOUS_WORD", 0, "Previous Word", ""}, + {NEXT_WORD, "NEXT_WORD", 0, "Next Word", ""}, + {0, NULL, 0, NULL, NULL}}; + +static int move_exec(const bContext *C, wmOperator *op) +{ + ConsoleLine *ci= console_history_verify(C); + + int type= RNA_enum_get(op->ptr, "type"); + int done= 0; + + switch(type) { + case LINE_BEGIN: + done= console_line_cursor_set(ci, 0); + break; + case LINE_END: + done= console_line_cursor_set(ci, INT_MAX); + break; + case PREV_CHAR: + done= console_line_cursor_set(ci, ci->cursor-1); + break; + case NEXT_CHAR: + done= console_line_cursor_set(ci, ci->cursor+1); + break; + } + + if(done) { + ED_area_tag_redraw(CTX_wm_area(C)); + } + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_move(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Move Cursor"; + ot->idname= "CONSOLE_OT_move"; + + /* api callbacks */ + ot->exec= move_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to."); +} + + +static int insert_exec(const bContext *C, wmOperator *op) +{ + ConsoleLine *ci= console_history_verify(C); + char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); + + int len= console_line_insert(ci, str); + + MEM_freeN(str); + + if(len==0) + return OPERATOR_CANCELLED; + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +static int insert_invoke(const bContext *C, wmOperator *op, wmEvent *event) +{ + char str[2] = {event->ascii, '\0'}; + RNA_string_set(op->ptr, "text", str); + return insert_exec(C, op); +} + +void CONSOLE_OT_insert(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Insert"; + ot->idname= "CONSOLE_OT_insert"; + + /* api callbacks */ + ot->exec= insert_exec; + ot->invoke= insert_invoke; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); +} + + +static EnumPropertyItem delete_type_items[]= { + {DEL_NEXT_CHAR, "NEXT_CHARACTER", 0, "Next Character", ""}, + {DEL_PREV_CHAR, "PREVIOUS_CHARACTER", 0, "Previous Character", ""}, +// {DEL_NEXT_WORD, "NEXT_WORD", 0, "Next Word", ""}, +// {DEL_PREV_WORD, "PREVIOUS_WORD", 0, "Previous Word", ""}, + {0, NULL, 0, NULL, NULL}}; + +static int delete_exec(const bContext *C, wmOperator *op) +{ + + ConsoleLine *ci= console_history_verify(C); + + + int done = 0; + + int type= RNA_enum_get(op->ptr, "type"); + + if(ci->len==0) { + return OPERATOR_CANCELLED; + } + + switch(type) { + case DEL_NEXT_CHAR: + if(ci->cursor < ci->len) { + memmove(ci->line + ci->cursor, ci->line + ci->cursor+1, (ci->len - ci->cursor)+1); + ci->len--; + done= 1; + } + break; + case DEL_PREV_CHAR: + if(ci->cursor > 0) { + ci->cursor--; /* same as above */ + memmove(ci->line + ci->cursor, ci->line + ci->cursor+1, (ci->len - ci->cursor)+1); + ci->len--; + done= 1; + } + break; + } + + if(!done) + return OPERATOR_CANCELLED; + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + + +void CONSOLE_OT_delete(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete"; + ot->idname= "CONSOLE_OT_delete"; + + /* api callbacks */ + ot->exec= delete_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_enum(ot->srna, "type", delete_type_items, DEL_NEXT_CHAR, "Type", "Which part of the text to delete."); +} + + +/* the python exec operator uses this */ +static int clear_exec(const bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + short scrollback= RNA_boolean_get(op->ptr, "scrollback"); + short history= RNA_boolean_get(op->ptr, "history"); + + /*ConsoleLine *ci= */ console_history_verify(C); + + if(scrollback) { /* last item in mistory */ + while(sc->scrollback.first) + console_scrollback_free(sc, sc->scrollback.first); + } + + if(history) { + while(sc->history.first) + console_history_free(sc, sc->history.first); + } + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Clear"; + ot->idname= "CONSOLE_OT_clear"; + + /* api callbacks */ + ot->exec= clear_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_boolean(ot->srna, "scrollback", 1, "Scrollback", "Clear the scrollback history"); + RNA_def_boolean(ot->srna, "history", 0, "History", "Clear the command history"); +} + + + +/* the python exec operator uses this */ +static int history_cycle_exec(const bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ConsoleLine *ci= console_history_verify(C); /* TODO - stupid, just prevernts crashes when no command line */ + + short reverse= RNA_boolean_get(op->ptr, "reverse"); /* assumes down, reverse is up */ + + if(reverse) { /* last item in mistory */ + ci= sc->history.last; + BLI_remlink(&sc->history, ci); + BLI_addhead(&sc->history, ci); + } + else { + ci= sc->history.first; + BLI_remlink(&sc->history, ci); + BLI_addtail(&sc->history, ci); + } + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_history_cycle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "History Cycle"; + ot->idname= "CONSOLE_OT_history_cycle"; + + /* api callbacks */ + ot->exec= history_cycle_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_boolean(ot->srna, "reverse", 0, "Reverse", "reverse cycle history"); +} + + +/* the python exec operator uses this */ +static int history_append_exec(const bContext *C, wmOperator *op) +{ + ConsoleLine *ci= console_history_verify(C); + + + char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); /* own this text in the new line, dont free */ + int cursor= RNA_int_get(op->ptr, "current_character"); + + ci= console_history_add_str(C, str, 1); /* own the string */ + console_line_cursor_set(ci, cursor); + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_history_append(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "History Append"; + ot->idname= "CONSOLE_OT_history_append"; + + /* api callbacks */ + ot->exec= history_append_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); + RNA_def_int(ot->srna, "current_character", 0, 0, INT_MAX, "Cursor", "The index of the cursor.", 0, 10000); +} + + +/* the python exec operator uses this */ +static int scrollback_append_exec(const bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ConsoleLine *ci= console_history_verify(C); + + char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); /* own this text in the new line, dont free */ + int type= RNA_enum_get(op->ptr, "type"); + + ci= console_scrollback_add_str(C, str, 1); /* own the string */ + ci->type= type; + + console_scrollback_limit(sc); + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_scrollback_append(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Scrollback Append"; + ot->idname= "CONSOLE_OT_scrollback_append"; + + /* api callbacks */ + ot->exec= scrollback_append_exec; + ot->poll= console_edit_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); + RNA_def_enum(ot->srna, "type", console_line_type_items, CONSOLE_LINE_OUTPUT, "Type", "Console output type."); +} + +static int zoom_exec(const bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + int delta= RNA_int_get(op->ptr, "delta"); + + sc->lheight += delta; + CLAMP(sc->lheight, 8, 32); + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + + +void CONSOLE_OT_zoom(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Console Zoom"; + ot->idname= "CONSOLE_OT_zoom"; + + /* api callbacks */ + ot->exec= zoom_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ + RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "Scale the view font.", 0, 1000); +} + diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c new file mode 100644 index 00000000000..ee80fe3d2d9 --- /dev/null +++ b/source/blender/editors/space_console/space_console.c @@ -0,0 +1,336 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + + #include +#include + +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" + +#include "BKE_colortools.h" +#include "BKE_context.h" +#include "BKE_screen.h" + +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "console_intern.h" // own include + + +/* ******************** default callbacks for console space ***************** */ + +static SpaceLink *console_new(const bContext *C) +{ + ARegion *ar; + SpaceConsole *sconsole; + + sconsole= MEM_callocN(sizeof(SpaceConsole), "initconsole"); + sconsole->spacetype= SPACE_CONSOLE; + + sconsole->lheight= 14; + sconsole->type= CONSOLE_TYPE_PYTHON; + sconsole->rpt_mask= CONSOLE_RPT_OP; /* ? - not sure whats a good default here?*/ + + /* header */ + ar= MEM_callocN(sizeof(ARegion), "header for console"); + + BLI_addtail(&sconsole->regionbase, ar); + ar->regiontype= RGN_TYPE_HEADER; + ar->alignment= RGN_ALIGN_BOTTOM; + + + /* main area */ + ar= MEM_callocN(sizeof(ARegion), "main area for text"); + + BLI_addtail(&sconsole->regionbase, ar); + ar->regiontype= RGN_TYPE_WINDOW; + + ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM_O); + ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keeptot= V2D_KEEPTOT_STRICT; + ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; + + return (SpaceLink *)sconsole; +} + +/* not spacelink itself */ +static void console_free(SpaceLink *sl) +{ + SpaceConsole *sc= (SpaceConsole*) sl; + + while(sc->scrollback.first) + console_scrollback_free(sc, sc->scrollback.first); + + while(sc->history.first) + console_history_free(sc, sc->history.first); +} + + +/* spacetype; init callback */ +static void console_init(struct wmWindowManager *wm, ScrArea *sa) +{ + +} + +static SpaceLink *console_duplicate(SpaceLink *sl) +{ + SpaceConsole *sconsolen= MEM_dupallocN(sl); + + /* clear or remove stuff from old */ + + /* TODO - duplicate?, then we also need to duplicate the py namespace */ + sconsolen->scrollback.first= sconsolen->scrollback.last= NULL; + sconsolen->history.first= sconsolen->history.last= NULL; + + return (SpaceLink *)sconsolen; +} + + + +/* add handlers, stuff you only do once or on area/region changes */ +static void console_main_area_init(wmWindowManager *wm, ARegion *ar) +{ + ListBase *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); + + /* own keymap */ + keymap= WM_keymap_listbase(wm, "Console", SPACE_CONSOLE, 0); /* XXX weak? */ + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void console_main_area_draw(const bContext *C, ARegion *ar) +{ + /* draw entirely, view changes should be handled here */ + SpaceConsole *sc= CTX_wm_space_console(C); + //View2D *v2d= &ar->v2d; + //float col[3]; + + /* clear and setup matrix */ + //UI_GetThemeColor3fv(TH_BACK, col); + //glClearColor(col[0], col[1], col[2], 0.0); + glClearColor(0, 0, 0, 1.0); + + glClear(GL_COLOR_BUFFER_BIT); + + /* worlks best with no view2d matrix set */ + /*UI_view2d_view_ortho(C, v2d);*/ + + /* data... */ + + /* add helper text, why not? */ + if(sc->scrollback.first==NULL) { + console_scrollback_add_str(C, " * Python Interactive Console *", 0); + console_scrollback_add_str(C, "Command History: Up/Down Arrow", 0); + console_scrollback_add_str(C, "Cursor: Left/Right Home/End", 0); + console_scrollback_add_str(C, "Remove: Backspace/Delete", 0); + console_scrollback_add_str(C, "Execute: Enter", 0); + console_scrollback_add_str(C, "Autocomplete: Tab", 0); + console_scrollback_add_str(C, "Ctrl +/- Wheel: Zoom", 0); + console_scrollback_add_str(C, "Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.ui", 0); + } + + console_history_verify(C); /* make sure we have some command line */ + console_text_main(sc, ar, CTX_wm_reports(C)); + + /* reset view matrix */ + /* UI_view2d_view_restore(C); */ + + /* scrollers */ + /* + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); + */ +} + +void console_operatortypes(void) +{ + WM_operatortype_append(CONSOLE_OT_move); + WM_operatortype_append(CONSOLE_OT_delete); + WM_operatortype_append(CONSOLE_OT_insert); + + /* for use by python only */ + WM_operatortype_append(CONSOLE_OT_history_append); + WM_operatortype_append(CONSOLE_OT_scrollback_append); + + + WM_operatortype_append(CONSOLE_OT_clear); + WM_operatortype_append(CONSOLE_OT_history_cycle); + WM_operatortype_append(CONSOLE_OT_zoom); +} + +void console_keymap(struct wmWindowManager *wm) +{ + ListBase *keymap= WM_keymap_listbase(wm, "Console", SPACE_CONSOLE, 0); + + /* + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", LEFTARROWKEY, KM_PRESS, KM_OSKEY, 0)->ptr, "type", LINE_BEGIN); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", RIGHTARROWKEY, KM_PRESS, KM_OSKEY, 0)->ptr, "type", LINE_BEGIN); + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", EKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", LINE_END); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", EKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "type", LINE_END); + */ + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", HOMEKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_BEGIN); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END); + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_zoom", WHEELUPMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "delta", 1); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_zoom", WHEELDOWNMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "delta", -1); + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_zoom", PADPLUSKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", 1); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_zoom", PADMINUS, KM_PRESS, KM_CTRL, 0)->ptr, "delta", -1); + + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_CHAR); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_CHAR); + + RNA_boolean_set(WM_keymap_add_item(keymap, "CONSOLE_OT_history_cycle", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "reverse", 1); + WM_keymap_add_item(keymap, "CONSOLE_OT_history_cycle", DOWNARROWKEY, KM_PRESS, 0, 0); + + /* + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", PREV_WORD); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", NEXT_WORD); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_LINE); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_LINE); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", PAGEUPKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_PAGE); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_move", PAGEDOWNKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_PAGE); + + + //RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_NEXT_CHAR); + //RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_NEXT_WORD); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_PREV_WORD); + */ + + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR); + RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR); + +#ifndef DISABLE_PYTHON + WM_keymap_add_item(keymap, "CONSOLE_OT_exec", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", TABKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ +#endif + WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_PRESS, KM_ANY, 0); // last! +} + +/****************** header region ******************/ + +/* add handlers, stuff you only do once or on area/region changes */ +static void console_header_area_init(wmWindowManager *wm, ARegion *ar) +{ + ED_region_header_init(ar); +} + +static void console_header_area_draw(const bContext *C, ARegion *ar) +{ + ED_region_header(C, ar); +} + +static void console_main_area_listener(ScrArea *sa, wmNotifier *wmn) +{ + SpaceConsole *sc= sa->spacedata.first; + + /* context changes */ + switch(wmn->category) { + case NC_CONSOLE: + if(wmn->data == ND_CONSOLE) { /* generic redraw request */ + ED_area_tag_redraw(sa); + } + else if(wmn->data == ND_CONSOLE_REPORT && sc->type==CONSOLE_TYPE_REPORT) { + /* redraw also but only for report view, could do less redraws by checking the type */ + ED_area_tag_redraw(sa); + } + break; + } +} + +/* only called once, from space/spacetypes.c */ +void ED_spacetype_console(void) +{ + SpaceType *sc= MEM_callocN(sizeof(SpaceType), "spacetype console"); + ARegionType *art; + + sc->spaceid= SPACE_CONSOLE; + + sc->new= console_new; + sc->free= console_free; + sc->init= console_init; + sc->duplicate= console_duplicate; + sc->operatortypes= console_operatortypes; + sc->keymap= console_keymap; + sc->listener= console_main_area_listener; + + /* regions: main window */ + art= MEM_callocN(sizeof(ARegionType), "spacetype console region"); + art->regionid = RGN_TYPE_WINDOW; + art->init= console_main_area_init; + art->draw= console_main_area_draw; + + + + BLI_addhead(&sc->regiontypes, art); + + /* regions: header */ + art= MEM_callocN(sizeof(ARegionType), "spacetype console region"); + art->regionid = RGN_TYPE_HEADER; + art->minsizey= HEADERY; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + + art->init= console_header_area_init; + art->draw= console_header_area_draw; + + BLI_addhead(&sc->regiontypes, art); + + + + BKE_spacetype_register(sc); +} + + diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index cc6987084d0..ca50d8494c0 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -464,6 +464,61 @@ typedef struct SpaceImaSel { } SpaceImaSel; +typedef struct ConsoleLine { + struct ConsoleLine *next, *prev; + + /* keep these 3 vars so as to share free, realloc funcs */ + int len_alloc; /* allocated length */ + int len; /* real len - strlen() */ + char *line; + + int cursor; + int type; /* only for use when in the 'scrollback' listbase */ +} ConsoleLine; + +/* ConsoleLine.type */ +enum { + CONSOLE_LINE_OUTPUT=0, + CONSOLE_LINE_INPUT, + CONSOLE_LINE_INFO, /* autocomp feedback */ + CONSOLE_LINE_ERROR +}; + +/* SpaceConsole.rpt_mask */ +enum { + CONSOLE_TYPE_PYTHON=0, + CONSOLE_TYPE_REPORT, +}; + +/* SpaceConsole.type see BKE_report.h */ +enum { + CONSOLE_RPT_DEBUG = 1<<0, + CONSOLE_RPT_INFO = 1<<1, + CONSOLE_RPT_OP = 1<<2, + CONSOLE_RPT_WARN = 1<<3, + CONSOLE_RPT_ERR = 1<<4, +}; + +typedef struct SpaceConsole { + SpaceLink *next, *prev; + ListBase regionbase; /* storage of regions for inactive spaces */ + int spacetype; + float blockscale; // XXX are these needed? + + short blockhandler[8]; // XXX are these needed? + + /* space vars */ + int type; /* console/report/..? */ + int rpt_mask; /* which reports to display */ + int flag, lheight; + + ListBase scrollback; /* ConsoleLine; output */ + ListBase history; /* ConsoleLine; command history, current edited line is the first */ + char prompt[8]; + +} SpaceConsole; + + /* view3d Now in DNA_view3d_types.h */ @@ -810,7 +865,8 @@ enum { SPACE_TIME, SPACE_NODE, SPACE_LOGIC, - SPACEICONMAX = SPACE_LOGIC + SPACE_CONSOLE, + SPACEICONMAX = SPACE_CONSOLE }; #endif diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index fcf3d0aec23..9a60e3c92b8 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -68,7 +68,7 @@ typedef struct wmWindowManager { ListBase queue; /* refresh/redraw wmNotifier structs */ - ListBase reports; /* information and error reports */ + struct ReportList *reports; /* information and error reports */ ListBase jobs; /* threaded jobs manager */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index ed1a8052acd..a04a09d4d11 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -371,6 +371,7 @@ extern StructRNA RNA_SoundSequence; extern StructRNA RNA_Space; extern StructRNA RNA_Space3DView; extern StructRNA RNA_SpaceButtonsWindow; +extern StructRNA RNA_SpaceConsole; extern StructRNA RNA_SpaceDopeSheetEditor; extern StructRNA RNA_SpaceGraphEditor; extern StructRNA RNA_SpaceImageEditor; diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index fb836a98a52..e3171d38932 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -43,6 +43,9 @@ EnumPropertyItem region_type_items[] = { #ifdef RNA_RUNTIME +#include "ED_screen.h" + + #include "WM_api.h" #include "WM_types.h" @@ -97,15 +100,23 @@ static void rna_def_scrarea(BlenderRNA *brna) prop= RNA_def_property(srna, "show_menus", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", HEADER_NO_PULLDOWN); RNA_def_property_ui_text(prop, "Show Menus", "Show menus in the header."); + + RNA_def_function(srna, "tag_redraw", "ED_area_tag_redraw"); } static void rna_def_region(BlenderRNA *brna) { StructRNA *srna; + PropertyRNA *prop; srna= RNA_def_struct(brna, "Region", NULL); RNA_def_struct_ui_text(srna, "Region", "Region in a subdivided screen area."); RNA_def_struct_sdna(srna, "ARegion"); + + prop= RNA_def_property(srna, "id", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "swinid"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Region ID", "Uniqute ID for this region."); } static void rna_def_bscreen(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 697548de817..fb41262b812 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -24,6 +24,8 @@ #include +#include "MEM_guardedalloc.h" + #include "RNA_access.h" #include "RNA_define.h" #include "RNA_types.h" @@ -56,6 +58,7 @@ EnumPropertyItem space_type_items[] = { {SPACE_TIME, "TIMELINE", 0, "Timeline", ""}, {SPACE_NODE, "NODE_EDITOR", 0, "Node Editor", ""}, {SPACE_LOGIC, "LOGIC_EDITOR", 0, "Logic Editor", ""}, + {SPACE_CONSOLE, "CONSOLE", 0, "Console", ""}, {0, NULL, 0, NULL, NULL}}; #define DC_RGB {0, "COLOR", ICON_IMAGE_RGB, "Color", "Draw image with RGB colors."} @@ -122,6 +125,8 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) return &RNA_SpaceNodeEditor; case SPACE_LOGIC: return &RNA_SpaceLogicEditor;*/ + case SPACE_CONSOLE: + return &RNA_SpaceConsole; default: return &RNA_Space; } @@ -234,6 +239,46 @@ StructRNA *rna_SpaceButtonsWindow_pin_id_typef(PointerRNA *ptr) return &RNA_ID; } +/* Space Console */ +static void rna_ConsoleLine_line_get(PointerRNA *ptr, char *value) +{ + ConsoleLine *ci= (ConsoleLine*)ptr->data; + strcpy(value, ci->line); +} + +static int rna_ConsoleLine_line_length(PointerRNA *ptr) +{ + ConsoleLine *ci= (ConsoleLine*)ptr->data; + return ci->len; +} + +static void rna_ConsoleLine_line_set(PointerRNA *ptr, const char *value) +{ + ConsoleLine *ci= (ConsoleLine*)ptr->data; + int len= strlen(value); + + if(len < ci->len_alloc) { /* allocated size is enough? */ + strcpy(ci->line, value); + } + else { /* allocate a new strnig */ + MEM_freeN(ci->line); + ci->line= BLI_strdup(value); + ci->len_alloc= len; + } + ci->len= len; + + if(ci->cursor > len) /* clamp the cursor */ + ci->cursor= len; +} + +static void rna_ConsoleLine_cursor_index_range(PointerRNA *ptr, int *min, int *max) +{ + ConsoleLine *ci= (ConsoleLine*)ptr->data; + + *min= 0; + *max= ci->len; +} + #else static void rna_def_space(BlenderRNA *brna) @@ -987,6 +1032,93 @@ static void rna_def_space_nla(BlenderRNA *brna) // TODO... autosnap, dopesheet? } +static void rna_def_console_line(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "ConsoleLine", NULL); + RNA_def_struct_ui_text(srna, "Console Input", "Input line for the interactive console."); + + prop= RNA_def_property(srna, "line", PROP_STRING, PROP_NONE); + RNA_def_property_string_funcs(prop, "rna_ConsoleLine_line_get", "rna_ConsoleLine_line_length", "rna_ConsoleLine_line_set"); + RNA_def_property_ui_text(prop, "Line", "Text in the line."); + + prop= RNA_def_property(srna, "current_character", PROP_INT, PROP_NONE); /* copied from text editor */ + RNA_def_property_int_sdna(prop, NULL, "cursor"); + RNA_def_property_int_funcs(prop, NULL, NULL, "rna_ConsoleLine_cursor_index_range"); + +} + +static EnumPropertyItem console_type_items[] = { + {CONSOLE_TYPE_PYTHON, "PYTHON", 0, "Python", ""}, + {CONSOLE_TYPE_REPORT, "REPORT", 0, "Report", ""}, + {0, NULL, 0, NULL, NULL}}; + +static void rna_def_space_console(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "SpaceConsole", "Space"); + RNA_def_struct_sdna(srna, "SpaceConsole"); + RNA_def_struct_ui_text(srna, "Space Console", "Interactive python console."); + + /* display */ + prop= RNA_def_property(srna, "font_size", PROP_INT, PROP_NONE); /* copied from text editor */ + RNA_def_property_int_sdna(prop, NULL, "lheight"); + RNA_def_property_range(prop, 8, 32); + RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE, NULL); + + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, console_type_items); + RNA_def_property_ui_text(prop, "Type", "Console type."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE, NULL); + + /* reporting display */ + prop= RNA_def_property(srna, "show_report_debug", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_DEBUG); + RNA_def_property_ui_text(prop, "Show Debug", "Display debug reporting info."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE_REPORT, NULL); + + prop= RNA_def_property(srna, "show_report_info", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_INFO); + RNA_def_property_ui_text(prop, "Show Info", "Display general information."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE_REPORT, NULL); + + prop= RNA_def_property(srna, "show_report_operator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_OP); + RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE_REPORT, NULL); + + prop= RNA_def_property(srna, "show_report_warn", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_WARN); + RNA_def_property_ui_text(prop, "Show Warn", "Display warnings."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE_REPORT, NULL); + + prop= RNA_def_property(srna, "show_report_error", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_ERR); + RNA_def_property_ui_text(prop, "Show Error", "Display error text."); + RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE_REPORT, NULL); + + + + prop= RNA_def_property(srna, "prompt", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Prompt", "Command line prompt."); + RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "history", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "history", NULL); + RNA_def_property_struct_type(prop, "ConsoleLine"); + RNA_def_property_ui_text(prop, "History", "Command history."); + + prop= RNA_def_property(srna, "scrollback", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "scrollback", NULL); + RNA_def_property_struct_type(prop, "ConsoleLine"); + RNA_def_property_ui_text(prop, "Output", "Command output."); +} + static void rna_def_fileselect_params(BlenderRNA *brna) { StructRNA *srna; @@ -1127,6 +1259,8 @@ void RNA_def_space(BlenderRNA *brna) rna_def_space_dopesheet(brna); rna_def_space_graph(brna); rna_def_space_nla(brna); + rna_def_space_console(brna); + rna_def_console_line(brna); } #endif diff --git a/source/blender/python/intern/bpy_ui.c b/source/blender/python/intern/bpy_ui.c index 088fe436c69..64b8a33fd66 100644 --- a/source/blender/python/intern/bpy_ui.c +++ b/source/blender/python/intern/bpy_ui.c @@ -557,6 +557,7 @@ PyObject *BPY_ui_module( void ) PyModule_AddObject( mod, "SCRIPT", PyLong_FromSsize_t(SPACE_SCRIPT) ); PyModule_AddObject( mod, "TIME", PyLong_FromSsize_t(SPACE_TIME) ); PyModule_AddObject( mod, "NODE", PyLong_FromSsize_t(SPACE_NODE) ); + PyModule_AddObject( mod, "CONSOLE", PyLong_FromSsize_t(SPACE_CONSOLE) ); /* INCREF since its its assumed that all these functions return the * module with a new ref like PyDict_New, since they are passed to diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index ab55f8a4459..3a646c5e799 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -131,6 +131,7 @@ typedef struct wmNotifier { #define NC_WORLD (13<<24) #define NC_FILE (14<<24) #define NC_ANIMATION (15<<24) +#define NC_CONSOLE (16<<24) /* data type, 256 entries is enough, it can overlap */ #define NOTE_DATA 0x00FF0000 @@ -200,6 +201,10 @@ typedef struct wmNotifier { #define ND_NLA_EDIT (76<<16) #define ND_NLA_ACTCHANGE (77<<16) + /* console */ +#define ND_CONSOLE (78<<16) /* general redraw */ +#define ND_CONSOLE_REPORT (79<<16) /* update for reports, could spesify type */ + /* subtype, 256 entries too */ #define NOTE_SUBTYPE 0x0000FF00 diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 7dec14664ae..6b3b128d34b 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -79,9 +79,11 @@ void WM_operator_free(wmOperator *op) /* all operations get registered in the windowmanager here */ /* called on event handling by event_system.c */ -void wm_operator_register(wmWindowManager *wm, wmOperator *op) +void wm_operator_register(bContext *C, wmOperator *op) { + wmWindowManager *wm= CTX_wm_manager(C); int tot; + char *buf; BLI_addtail(&wm->operators, op); tot= BLI_countlist(&wm->operators); @@ -92,6 +94,15 @@ void wm_operator_register(wmWindowManager *wm, wmOperator *op) WM_operator_free(opt); tot--; } + + + /* Report the string representation of the operator */ + buf = WM_operator_pystring(op); + BKE_report(wm->reports, RPT_OPERATOR, buf); + MEM_freeN(buf); + + /* so the console is redrawn */ + WM_event_add_notifier(C, NC_CONSOLE|ND_CONSOLE_REPORT, NULL); } diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 3ef6e545dda..ffd1054d954 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -268,7 +268,7 @@ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat) if(repeat==0) { if(op->type->flag & OPTYPE_REGISTER) - wm_operator_register(CTX_wm_manager(C), op); + wm_operator_register(C, op); else WM_operator_free(op); } @@ -374,7 +374,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P ED_undo_push_op(C, op); if(ot->flag & OPTYPE_REGISTER) - wm_operator_register(wm, op); + wm_operator_register(C, op); else WM_operator_free(op); } @@ -697,7 +697,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand ED_undo_push_op(C, op); if(ot->flag & OPTYPE_REGISTER) - wm_operator_register(CTX_wm_manager(C), op); + wm_operator_register(C, op); else WM_operator_free(op); handler->op= NULL; diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 0bc35ffa9b2..5938677afe7 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -51,6 +51,7 @@ #include "BKE_global.h" #include "BKE_library.h" #include "BKE_mball.h" +#include "BKE_report.h" #include "BKE_utildefines.h" #include "BKE_packedFile.h" @@ -100,6 +101,22 @@ static void sound_init_listener(void) G.listener->dopplervelocity = 340.29f; } + +static void wm_init_reports(bContext *C) +{ + wmWindowManager *wm= CTX_wm_manager(C); + wm->reports= MEM_callocN(sizeof(ReportList), "wmReportList"); + BKE_reports_init(wm->reports, RPT_STORE); +} +static void wm_free_reports(bContext *C) +{ + wmWindowManager *wm= CTX_wm_manager(C); + BKE_reports_clear(wm->reports); + MEM_freeN(wm->reports); +} + + + /* only called once, for startup */ void WM_init(bContext *C) { @@ -124,6 +141,8 @@ void WM_init(bContext *C) /* get the default database, plus a wm */ WM_read_homefile(C, NULL); + wm_init_reports(C); /* reports cant be initialized before the wm */ + UI_init(); // clear_matcopybuf(); /* XXX */ @@ -256,6 +275,8 @@ void WM_exit(bContext *C) RNA_exit(); + wm_free_reports(C); + CTX_free(C); if(MEM_get_memory_blocks_in_use()!=0) { diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index d7cac82ef90..4dbe26bb79f 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -165,7 +165,7 @@ char *WM_operator_pystring(wmOperator *op) char *cstring, *buf; int first_iter=1; - BLI_dynstr_appendf(dynstr, "%s(", op->idname); + BLI_dynstr_appendf(dynstr, "bpy.ops.%s(", op->idname); iterprop= RNA_struct_iterator_property(op->ptr->type); diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index e91cbe6b204..36219cf3743 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -47,7 +47,7 @@ extern void wm_check(bContext *C); extern void wm_clear_default_size(bContext *C); /* register to windowmanager for redo or macro */ -void wm_operator_register(wmWindowManager *wm, wmOperator *op); +void wm_operator_register(bContext *C, wmOperator *op); extern void wm_report_free(wmReport *report); From 77c3b120230ff6662a820994bd414d44b37605a9 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Thu, 16 Jul 2009 02:04:31 +0000 Subject: [PATCH 214/512] SVN maintenance. --- source/blender/editors/space_console/console_draw.c | 2 +- source/blender/editors/space_console/console_ops.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 042c84041d0..5be116a2f32 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -1,5 +1,5 @@ /** - * $Id: text_draw.c 21558 2009-07-13 11:41:24Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index cb883d2d450..1a6274eaa1d 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -1,5 +1,5 @@ /** - * $Id: text_ops.c 21549 2009-07-12 12:47:34Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From 772f6d9495496dd5c745f6992a2907ffe2647360 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 16 Jul 2009 02:29:49 +0000 Subject: [PATCH 215/512] * Temporarily commented out a couple of lines from Brecht's User Prefs commit Brecht: This makes Blender crash on startup for a few of us, so I'm just disabling it for now until you have have a look at it --- source/blender/editors/screen/area.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 9617a1fbea2..efd8754a760 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1257,8 +1257,8 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) // XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file) ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) - ar->v2d.flag &= ~V2D_IS_INITIALISED; + //if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) + // ar->v2d.flag &= ~V2D_IS_INITIALISED; UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy); From 2b99cdd5cab1c833ac79a2e96db70d6fe79aed13 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Thu, 16 Jul 2009 03:11:21 +0000 Subject: [PATCH 216/512] Add Makefile build support for Console Space Type (added in r21611). --- source/Makefile | 1 + source/blender/editors/Makefile | 38 ++++++++++++- source/blender/editors/space_console/Makefile | 55 +++++++++++++++++++ 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 source/blender/editors/space_console/Makefile diff --git a/source/Makefile b/source/Makefile index de0b144ed71..680d8c8bfaa 100644 --- a/source/Makefile +++ b/source/Makefile @@ -240,6 +240,7 @@ PULIB += $(OCGDIR)/blender/ed_datafiles/$(DEBUG_DIR)libed_datafiles.a PULIB += $(OCGDIR)/blender/ed_image/$(DEBUG_DIR)libed_image.a PULIB += $(OCGDIR)/blender/ed_uvedit/$(DEBUG_DIR)libed_uvedit.a PULIB += $(OCGDIR)/blender/ed_screen/$(DEBUG_DIR)libed_screen.a +PULIB += $(OCGDIR)/blender/ed_console/$(DEBUG_DIR)libed_console.a PULIB += $(OCGDIR)/blender/windowmanager/$(DEBUG_DIR)libwindowmanager.a PULIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a PULIB += $(OCGDIR)/blender/makesrna/$(DEBUG_DIR)librna.a diff --git a/source/blender/editors/Makefile b/source/blender/editors/Makefile index 62bf612b09d..6463815a268 100644 --- a/source/blender/editors/Makefile +++ b/source/blender/editors/Makefile @@ -1,5 +1,7 @@ +# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- +# vim: tabstop=8 # -# $Id: Makefile +# $Id$ # # ***** BEGIN GPL LICENSE BLOCK ***** # @@ -29,6 +31,38 @@ # Bounces make to subdirectories. SOURCEDIR = source/blender/editors -DIRS = armature mesh animation object sculpt_paint datafiles transform screen curve gpencil physics preview uvedit space_outliner space_time space_view3d interface util space_api space_graph space_image space_node space_buttons space_info space_file space_sound space_action space_nla space_script space_text space_sequencer space_logic +DIRS = armature \ + mesh \ + animation \ + object \ + sculpt_paint \ + datafiles \ + transform \ + screen \ + curve \ + gpencil \ + physics \ + preview \ + uvedit \ + space_outliner \ + space_time \ + space_view3d \ + interface \ + util \ + space_api \ + space_console \ + space_graph \ + space_image \ + space_node \ + space_buttons \ + space_info \ + space_file \ + space_sound \ + space_action \ + space_nla \ + space_script \ + space_text \ + space_sequencer \ + space_logic \ include nan_subdirs.mk diff --git a/source/blender/editors/space_console/Makefile b/source/blender/editors/space_console/Makefile new file mode 100644 index 00000000000..052dd360c9c --- /dev/null +++ b/source/blender/editors/space_console/Makefile @@ -0,0 +1,55 @@ +# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- +# vim: tabstop=8 +# +# $Id$ +# +# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2009 Blender Foundation +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): none yet. +# +# ***** END GPL LICENSE BLOCK ***** + +LIBNAME = ed_console +DIR = $(OCGDIR)/blender/$(LIBNAME) + +include nan_compile.mk + +CFLAGS += $(LEVEL_1_C_WARNINGS) + +CPPFLAGS += -I$(NAN_GLEW)/include +CPPFLAGS += -I$(OPENGL_HEADERS) + +# not very neat.... +CPPFLAGS += -I../../windowmanager +CPPFLAGS += -I../../blenfont +CPPFLAGS += -I../../blenkernel +CPPFLAGS += -I../../blenlib +CPPFLAGS += -I../../makesdna +CPPFLAGS += -I../../makesrna +CPPFLAGS += -I../../imbuf +CPPFLAGS += -I../../python +CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include +CPPFLAGS += -I../../render/extern/include + +# own include + +CPPFLAGS += -I../include From 111be5ea2aa227cc93c9fc57750e463c55056673 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Thu, 16 Jul 2009 03:16:03 +0000 Subject: [PATCH 217/512] Extrude along normals. Note that this is on in all cases now, it needs to be restricted to face extrude only. Some slight transform operator cleanup too. --- source/blender/editors/include/ED_transform.h | 1 + source/blender/editors/mesh/editmesh_tools.c | 8 +++++++ source/blender/editors/transform/transform.c | 2 +- .../editors/transform/transform_generics.c | 2 +- .../blender/editors/transform/transform_ops.c | 21 +++++++++++-------- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 5719aa63234..de1294c9b2b 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -40,6 +40,7 @@ struct bContext; struct Object; struct uiLayout; struct EnumPropertyItem; +struct wmOperatorType; void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid); void transform_operatortypes(void); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 6993efefe21..2e869933db9 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -702,6 +702,7 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); + int constraint_axis[3] = {0, 0, 1}; extrude_mesh(obedit,em, op); @@ -712,6 +713,12 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_enum_set(op->ptr, "proportional", 0); RNA_boolean_set(op->ptr, "mirror", 0); + + /* the following two should only be set when extruding faces */ + RNA_enum_set(op->ptr, "constraint_orientation", V3D_MANIP_NORMAL); + RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); + + WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; @@ -750,6 +757,7 @@ void MESH_OT_extrude(wmOperatorType *ot) /* to give to transform */ Properties_Proportional(ot); + Properties_Constraints(ot); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d45a6f42232..c62ea07e398 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1170,7 +1170,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) if (RNA_struct_find_property(op->ptr, "constraint_axis")) { - RNA_int_set(op->ptr, "constraint_orientation", t->current_orientation); + RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation); if (t->con.mode & CON_APPLY) { diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 560b37caf0a..d1394d65f96 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -886,7 +886,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) if (op && RNA_struct_find_property(op->ptr, "constraint_axis") && RNA_property_is_set(op->ptr, "constraint_orientation")) { - t->current_orientation = RNA_int_get(op->ptr, "constraint_orientation"); + t->current_orientation = RNA_enum_get(op->ptr, "constraint_orientation"); if (t->current_orientation >= V3D_MANIP_CUSTOM + BIF_countTransformOrientation(C) - 1) { diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index f2630f40c9c..f817776dbd8 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -81,6 +81,13 @@ EnumPropertyItem proportional_falloff_types[] = { {0, NULL, 0, NULL, NULL} }; +EnumPropertyItem orientation_items[]= { + {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""}, + {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""}, + {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""}, + {V3D_MANIP_VIEW, "VIEW", 0, "View", ""}, + {0, NULL, 0, NULL, NULL}}; + char OP_TRANSLATION[] = "TFM_OT_translation"; char OP_ROTATION[] = "TFM_OT_rotation"; char OP_TOSPHERE[] = "TFM_OT_tosphere"; @@ -137,12 +144,6 @@ static EnumPropertyItem *select_orientation_itemf(bContext *C, PointerRNA *ptr, void TFM_OT_select_orientation(struct wmOperatorType *ot) { PropertyRNA *prop; - static EnumPropertyItem orientation_items[]= { - {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""}, - {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""}, - {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""}, - {V3D_MANIP_VIEW, "VIEW", 0, "View", ""}, - {0, NULL, 0, NULL, NULL}}; /* identifiers */ ot->name = "Select Orientation"; @@ -293,8 +294,11 @@ void Properties_Snapping(struct wmOperatorType *ot, short align) void Properties_Constraints(struct wmOperatorType *ot) { + PropertyRNA *prop; + RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", ""); - RNA_def_int(ot->srna, "constraint_orientation", 0, 0, INT_MAX, "Constraint Orientation", "", 0, INT_MAX); + prop= RNA_def_enum(ot->srna, "constraint_orientation", orientation_items, V3D_MANIP_GLOBAL, "Orientation", "DOC_BROKEN"); + RNA_def_enum_funcs(prop, select_orientation_itemf); } void TFM_OT_translation(struct wmOperatorType *ot) @@ -558,8 +562,7 @@ void TFM_OT_transform(struct wmOperatorType *ot) Properties_Proportional(ot); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", ""); - RNA_def_int(ot->srna, "constraint_orientation", 0, 0, INT_MAX, "Constraint Orientation", "", 0, INT_MAX); + Properties_Constraints(ot); } void transform_operatortypes(void) From 513dcf7b46eee6ffbb47f6046c4840730e173180 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 16 Jul 2009 04:45:52 +0000 Subject: [PATCH 218/512] 2.5 - Silencing various compiler warnings (mingw) --- source/blender/blenloader/intern/readfile.c | 2 +- source/blender/editors/animation/keyframes_general.c | 4 ++-- .../blender/editors/armature/editarmature_retarget.c | 8 ++++---- source/blender/editors/gpencil/gpencil_edit.c | 2 +- source/blender/editors/interface/interface_utils.c | 2 ++ source/blender/editors/interface/interface_widgets.c | 2 +- source/blender/editors/object/object_vgroup.c | 9 ++++----- source/blender/editors/physics/ed_fluidsim.c | 7 +++---- source/blender/editors/physics/editparticle.c | 4 ++-- source/blender/editors/preview/previewrender.c | 4 ++-- source/blender/editors/screen/screen_ops.c | 2 ++ source/blender/editors/sculpt_paint/paint_image.c | 10 +++++----- source/blender/editors/space_file/filesel.c | 6 +++--- source/blender/editors/space_outliner/outliner_ops.c | 3 +++ source/blender/editors/space_view3d/drawobject.c | 6 +++--- source/blender/editors/space_view3d/view3d_buttons.c | 6 ++++++ source/blender/editors/space_view3d/view3d_view.c | 6 ++++-- source/blender/editors/transform/transform_generics.c | 4 +--- .../blender/editors/transform/transform_manipulator.c | 1 - source/blender/makesrna/intern/rna_access.c | 2 +- source/blender/makesrna/intern/rna_particle.c | 4 ++-- source/blender/windowmanager/intern/wm_subwindow.c | 2 ++ 22 files changed, 54 insertions(+), 42 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 5489c55f789..1d7ba88136f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4858,7 +4858,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc) } else if(sl->spacetype==SPACE_CONSOLE) { SpaceConsole *sconsole= (SpaceConsole *)sl; - ConsoleLine *cl; + //ConsoleLine *cl; link_list(fd, &sconsole->scrollback); link_list(fd, &sconsole->history); diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 6e62b163ca9..fc67ee34a2e 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -43,6 +43,8 @@ #include "DNA_space_types.h" #include "DNA_scene_types.h" +#include "RNA_access.h" + #include "BKE_action.h" #include "BKE_fcurve.h" #include "BKE_key.h" @@ -52,8 +54,6 @@ #include "ED_keyframing.h" #include "ED_keyframes_edit.h" -#include "RNA_access.h" - /* This file contains code for various keyframe-editing tools which are 'destructive' * (i.e. they will modify the order of the keyframes, and change the size of the array). * While some of these tools may eventually be moved out into blenkernel, for now, it is diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index 6f5692dbf4c..a1ce256a1af 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -2139,15 +2139,15 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c MemoNode *min_node = NULL; float *vec0 = vec_cache[previous]; float *vec1 = vec_cache[current]; - float min_weight; - int min_next; + float min_weight= 0.0f; + int min_next= 0; int next; for (next = current + 1; next <= nb_positions - (joints_left - 1); next++) { MemoNode *next_node; float *vec2 = vec_cache[next]; - float weight = 0; + float weight = 0.0f; /* ADD WEIGHT OF PREVIOUS - CURRENT - NEXT triple */ weight = calcCostAngleLengthDistance(iter, vec_cache, edge, vec0, vec1, vec2, current, next, angle_weight, length_weight, distance_weight); @@ -2824,7 +2824,7 @@ void BIF_retargetArmature(bContext *C) ReebGraph *reebg; double start_time, end_time; double gstart_time, gend_time; - double reeb_time, rig_time, retarget_time, total_time; + double reeb_time, rig_time=0.0, retarget_time=0.0, total_time; gstart_time = start_time = PIL_check_seconds_timer(); diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index c0c1cbc7ac6..ef4e09274f2 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -322,7 +322,7 @@ static void gp_strokepoint_convertcoords (bGPDstroke *gps, bGPDspoint *pt, float } else { short mval[2]; - int mx, my; + int mx=0, my=0; float *fp= give_cursor(NULL, NULL); // XXX should be scene, v3d float dvec[3]; diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index eb79848d7d2..4df8641b455 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -170,6 +170,8 @@ void uiDefAutoButsRNA(const bContext *C, uiLayout *layout, PointerRNA *ptr, int uiItemL(uiLayoutColumn(split, 0), name, 0); col= uiLayoutColumn(split, 0); } + else + col= NULL; /* temp hack to show normal button for spin/screw */ if(strcmp(name, "Axis")==0) { diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 8f40b2e4bfd..afb7e74daff 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1438,7 +1438,7 @@ static void ui_draw_but_HSVCUBE(uiBut *but, rcti *rect) { int a; float h,s,v; - float dx, dy, sx1, sx2, sy, x, y; + float dx, dy, sx1, sx2, sy, x=0.0f, y=0.0f; float col0[4][3]; // left half, rect bottom to top float col1[4][3]; // right half, rect bottom to top diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index fb71fc09108..3d3e29bcc22 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -230,8 +230,8 @@ void duplicate_defgroup ( Object *ob ) bDeformGroup *dg, *cdg; char name[32], s[32]; MDeformWeight *org, *cpy; - MDeformVert *dvert, *dvert_array; - int i, idg, icdg, dvert_tot; + MDeformVert *dvert, *dvert_array=NULL; + int i, idg, icdg, dvert_tot=0; if (ob->type != OB_MESH && ob->type != OB_LATTICE) return; @@ -353,9 +353,8 @@ static void del_defgroup_update_users(Object *ob, int id) void del_defgroup_in_object_mode ( Object *ob ) { bDeformGroup *dg; - MDeformVert *dvert_array, *dvert; - - int i, e, dvert_tot; + MDeformVert *dvert, *dvert_array=NULL; + int i, e, dvert_tot=0; if ((!ob) || (ob->type != OB_MESH && ob->type != OB_LATTICE)) return; diff --git a/source/blender/editors/physics/ed_fluidsim.c b/source/blender/editors/physics/ed_fluidsim.c index 3990521bd1b..a8862eb17de 100644 --- a/source/blender/editors/physics/ed_fluidsim.c +++ b/source/blender/editors/physics/ed_fluidsim.c @@ -93,6 +93,9 @@ #include "WM_api.h" #include "WM_types.h" +/* enable/disable overall compilation */ +#ifndef DISABLE_ELBEEM + /* XXX */ /* from header info.c */ static int start_progress_bar(void) {return 0;}; @@ -121,10 +124,6 @@ char* fluidsimViscosityPresetString[6] = { "INVALID" /* end */ }; -/* enable/disable overall compilation */ -#ifndef DISABLE_ELBEEM - - /* ********************** fluid sim settings struct functions ********************** */ /* helper function */ diff --git a/source/blender/editors/physics/editparticle.c b/source/blender/editors/physics/editparticle.c index 3f7880b7fef..f414297dab4 100644 --- a/source/blender/editors/physics/editparticle.c +++ b/source/blender/editors/physics/editparticle.c @@ -2282,7 +2282,7 @@ static int brush_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *eve ParticleEditSettings *pset= PE_settings(CTX_data_scene(C)); ParticleBrushData *brush; int mode = RNA_enum_get(op->ptr, "mode"); - float original_value; + float original_value=1.0f; if(pset->brushtype < 0) return OPERATOR_CANCELLED; @@ -3570,7 +3570,7 @@ void PE_undo_menu(Scene *scene, Object *ob) ParticleEdit *edit= 0; ParticleUndo *undo; DynStr *ds; - short event; + short event=0; char *menu; if(!PE_can_edit(psys)) return; diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c index 1efa5108b96..e79dbed0661 100644 --- a/source/blender/editors/preview/previewrender.c +++ b/source/blender/editors/preview/previewrender.c @@ -453,7 +453,7 @@ void view3d_previewrender_progress(RenderResult *rr, volatile rcti *renrect) // ScrArea *sa= NULL; // XXX // View3D *v3d= NULL; // XXX RenderLayer *rl; - int ofsx, ofsy; + int ofsx=0, ofsy=0; if(renrect) return; @@ -576,7 +576,7 @@ void BIF_view3d_previewrender(Scene *scene, ScrArea *sa) View3D *v3d= sa->spacedata.first; RegionView3D *rv3d= NULL; // XXX Render *re; - RenderInfo *ri; /* preview struct! */ + RenderInfo *ri=NULL; /* preview struct! */ RenderStats *rstats; RenderData rdata; rctf viewplane; diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 113e7249e65..07aaf0f9b58 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2337,6 +2337,7 @@ static ScrArea *find_area_image_empty(bContext *C) return sa; } +#if 0 // XXX not used static ScrArea *find_empty_image_area(bContext *C) { bScreen *sc= CTX_wm_screen(C); @@ -2353,6 +2354,7 @@ static ScrArea *find_empty_image_area(bContext *C) } return sa; } +#endif // XXX not used static void screen_set_image_output(bContext *C) { diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 720e64d260f..b190b76a81e 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -2763,7 +2763,7 @@ static void project_bucket_bounds(const ProjPaintState *ps, const int bucket_x, static void project_bucket_init(const ProjPaintState *ps, const int thread_index, const int bucket_index, rctf *bucket_bounds) { LinkNode *node; - int face_index, image_index; + int face_index, image_index=0; ImBuf *ibuf = NULL; MTFace *tf; @@ -2820,7 +2820,7 @@ static int project_bucket_face_isect(ProjPaintState *ps, float min[2], float max /* TODO - replace this with a tricker method that uses sideofline for all screenCoords's edges against the closest bucket corner */ rctf bucket_bounds; float p1[2], p2[2], p3[2], p4[2]; - float *v, *v1,*v2,*v3,*v4; + float *v, *v1,*v2,*v3,*v4=NULL; int fidx; project_bucket_bounds(ps, bucket_x, bucket_y, &bucket_bounds); @@ -3194,7 +3194,7 @@ static void project_paint_begin(ProjPaintState *ps) if (tf->tpage && ((G.f & G_FACESELECT)==0 || mf->flag & ME_FACE_SEL)) { - float *v1coSS, *v2coSS, *v3coSS, *v4coSS; + float *v1coSS, *v2coSS, *v3coSS, *v4coSS=NULL; v1coSS = ps->screenCoords[mf->v1]; v2coSS = ps->screenCoords[mf->v2]; @@ -3339,7 +3339,7 @@ static void project_paint_end(ProjPaintState *ps) /* context */ ProjPaintImage *last_projIma; int last_image_index = -1; - int last_tile_width; + int last_tile_width=0; for(a=0, last_projIma=ps->projImages; a < ps->image_tot; a++, last_projIma++) { int size = sizeof(UndoTile **) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->x) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->y); @@ -3703,7 +3703,7 @@ static void *do_projectpaint_thread(void *ph_v) ProjPixel *projPixel; int last_index = -1; - ProjPaintImage *last_projIma; + ProjPaintImage *last_projIma= NULL; ImagePaintPartialRedraw *last_partial_redraw_cell; float rgba[4], alpha, dist_nosqrt; diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 30712ea0b07..72f97898891 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -148,7 +148,7 @@ int ED_fileselect_layout_offset(FileLayout* layout, int x, int y) int active_file; if (layout == NULL) - return NULL; + return 0; offsetx = (x)/(layout->tile_w + 2*layout->tile_border_x); offsety = (y)/(layout->tile_h + 2*layout->tile_border_y); @@ -351,7 +351,7 @@ void autocomplete_directory(struct bContext *C, char *str, void *arg_v) for(i= 0; ifiles, i); - char* dir = filelist_dir(sfile->files); + const char* dir = filelist_dir(sfile->files); if (file && S_ISDIR(file->type)) { BLI_make_file_string(G.sce, tmp, dir, file->relname); autocomplete_do_name(autocpl,tmp); @@ -362,4 +362,4 @@ void autocomplete_directory(struct bContext *C, char *str, void *arg_v) BLI_add_slash(str); } } -} \ No newline at end of file +} diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 36ee64f10fd..6fddd16c174 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -33,7 +33,10 @@ #include "WM_api.h" #include "WM_types.h" + +#include "RNA_access.h" #include "RNA_define.h" + #include "ED_screen.h" #include "outliner_intern.h" diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 93c6c535a31..41da2c5a85b 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2974,9 +2974,9 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix float vec[3], vec2[3]; float *vd = pdd->vd; float *cd = pdd->cd; - float ma_r; - float ma_g; - float ma_b; + float ma_r=0.0f; + float ma_g=0.0f; + float ma_b=0.0f; if(pdd->ma_r) { ma_r = *pdd->ma_r; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index fba263f30d5..3cf438bdd32 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -949,6 +949,7 @@ void selectTransformOrientation_func(bContext *C, void *target, void *unused) BIF_selectTransformOrientation(C, (TransformOrientation *) target); } +#if 0 // XXX not used static void view3d_panel_transform_spaces(const bContext *C, Panel *pa) { Scene *scene= CTX_data_scene(C); @@ -999,6 +1000,7 @@ static void view3d_panel_transform_spaces(const bContext *C, Panel *pa) } uiBlockEndAlign(block); } +#endif // XXX not used static void weight_paint_buttons(Scene *scene, uiBlock *block) { @@ -1369,6 +1371,7 @@ static void view3d_panel_object(const bContext *C, Panel *pa) } } +#if 0 // XXX not used anymore static void view3d_panel_background(const bContext *C, Panel *pa) { View3D *v3d= CTX_wm_view3d(C); @@ -1493,6 +1496,7 @@ static void view3d_panel_properties(const bContext *C, Panel *pa) // } uiBlockEndAlign(block); } +#endif // XXX not used anymore #if 0 static void view3d_panel_preview(bContext *C, ARegion *ar, short cntrl) // VIEW3D_HANDLER_PREVIEW @@ -1547,6 +1551,7 @@ static void view3d_panel_gpencil(const bContext *C, Panel *pa) } #endif +#if 0 // XXX not used static void delete_sketch_armature(bContext *C, void *arg1, void *arg2) { BIF_deleteSketch(C); @@ -1727,6 +1732,7 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); uiDefAutoButsRNA(C, pa->layout, &ptr, 2); } +#endif // XXX not used void view3d_buttons_register(ARegionType *art) { diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index b57f4a91004..cb20b3dc93e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1383,6 +1383,8 @@ void VIEW3D_OT_localview(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; } +#if GAMEBLENDER == 1 + static ListBase queue_back; static void SaveState(bContext *C) { @@ -1425,12 +1427,12 @@ static void RestoreState(bContext *C) /* maybe we need this defined somewhere else */ extern void StartKetsjiShell(struct bContext *C,int always_use_expand_framing); +#endif // GAMEBLENDER == 1 static int game_engine_exec(bContext *C, wmOperator *unused) { - Scene *startscene = CTX_data_scene(C); - #if GAMEBLENDER == 1 + Scene *startscene = CTX_data_scene(C); view3d_operator_needs_opengl(C); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index d1394d65f96..62b68589d98 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -64,6 +64,7 @@ //#include "BIF_editparticle.h" //#include "BIF_meshtools.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_anim.h" #include "BKE_armature.h" @@ -305,7 +306,6 @@ void recalcData(TransInfo *t) flushTransSeq(t); } else if (t->spacetype == SPACE_ACTION) { - SpaceAction *sact= (SpaceAction *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; @@ -340,7 +340,6 @@ void recalcData(TransInfo *t) BLI_freelistN(&anim_data); } else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; Scene *scene; ListBase anim_data = {NULL, NULL}; @@ -374,7 +373,6 @@ void recalcData(TransInfo *t) /* 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; - AnimData *adt= BKE_animdata_from_id(ale->id); /* watch it: if the time is wrong: do not correct handles yet */ if (test_time_fcurve(fcu)) diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index c656b097cb9..ef92787701c 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -340,7 +340,6 @@ int calc_manipulator_stats(const bContext *C) } } else if(ob && (ob->flag & OB_POSEMODE)) { - bArmature *arm = ob->data; bPoseChannel *pchan; int mode = TFM_ROTATION; // mislead counting bones... bah. We don't know the manipulator mode, could be mixed diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index e504d1d030b..838592562b3 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -1620,7 +1620,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro StructRNA *ptype; PointerRNA itemptr; PropertyRNA *itemprop, *iprop; - PropertyType itemtype; + PropertyType itemtype=0; RawArray in; int itemlen= 0; diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index ef68e0ba019..3c25bd76630 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -411,14 +411,14 @@ static void rna_KeyedParticleTarget_name_get(PointerRNA *ptr, char *str) strcpy(str, "Invalid target!"); } -static EnumPropertyItem from_items[] = { +EnumPropertyItem from_items[] = { {PART_FROM_VERT, "VERT", 0, "Vertexes", ""}, {PART_FROM_FACE, "FACE", 0, "Faces", ""}, {PART_FROM_VOLUME, "VOLUME", 0, "Volume", ""}, {0, NULL, 0, NULL, NULL} }; -static EnumPropertyItem reactor_from_items[] = { +EnumPropertyItem reactor_from_items[] = { {PART_FROM_VERT, "VERT", 0, "Vertexes", ""}, {PART_FROM_FACE, "FACE", 0, "Faces", ""}, {PART_FROM_VOLUME, "VOLUME", 0, "Volume", ""}, diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c index 835fdca52fe..dc2aca7b15b 100644 --- a/source/blender/windowmanager/intern/wm_subwindow.c +++ b/source/blender/windowmanager/intern/wm_subwindow.c @@ -523,6 +523,7 @@ int WM_framebuffer_to_index(unsigned int col) /* ********** END MY WINDOW ************** */ +#if 0 // XXX not used... #ifdef WIN32 static int is_a_really_crappy_nvidia_card(void) { static int well_is_it= -1; @@ -534,4 +535,5 @@ static int is_a_really_crappy_nvidia_card(void) { return well_is_it; } #endif +#endif // XXX not used... From 88e3e8c1c939ee25f9d86fcfb1d55c0ab415373e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Jul 2009 07:11:46 +0000 Subject: [PATCH 219/512] - use outliner colors (with subtle stripes) for report so you can see divisions between operators with wrapping. - added class option for PyOperators __register__ so you can set if py operators are logged in the console. - PyOperators was refcounting in a more readable but incorrect way. in some cases would be possible to crash so better not drop the reference before using the value. - console zoom operator was registering which meant zooming in to see some text would push it away :) --- release/ui/space_console.py | 2 + .../editors/space_console/console_draw.c | 82 +++++++++++++------ .../editors/space_console/console_ops.c | 2 +- .../blender/python/intern/bpy_operator_wrap.c | 29 +++++-- 4 files changed, 80 insertions(+), 35 deletions(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 497f34a28d0..6548a2249b2 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -87,6 +87,7 @@ class CONSOLE_OT_exec(bpy.types.Operator): Operator documentatuon text, will be used for the operator tooltip and python docs. ''' __label__ = "Console Execute" + __register__ = True # Both prompts must be the same length PROMPT = '>>> ' @@ -362,6 +363,7 @@ class CONSOLE_OT_autocomplete(bpy.types.Operator): Operator documentatuon text, will be used for the operator tooltip and python docs. ''' __label__ = "Console Autocomplete" + __register__ = True def poll(self, context): return context.space_data.type == 'PYTHON' diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 5be116a2f32..0a725d0c69f 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -71,44 +71,57 @@ static void console_font_begin(SpaceConsole *sc) BLF_size(sc->lheight, 72); } -static void console_line_color(int type) +static void console_line_color(unsigned char *fg, int type) { - switch(type){ + switch(type) { case CONSOLE_LINE_OUTPUT: - glColor4ub(96, 128, 255, 255); + fg[0]=96; fg[1]=128; fg[2]=255; break; case CONSOLE_LINE_INPUT: - glColor4ub(255, 255, 255, 255); + fg[0]=255; fg[1]=255; fg[2]=255; break; case CONSOLE_LINE_INFO: - glColor4ub(0, 170, 0, 255); + fg[0]=0; fg[1]=170; fg[2]=0; break; case CONSOLE_LINE_ERROR: - glColor4ub(220, 96, 96, 255); + fg[0]=220; fg[1]=96; fg[2]=96; break; } } -static void console_report_color(int type) +static void console_report_color(unsigned char *fg, int type) { - if(type & RPT_ERROR_ALL) return glColor4ub(220, 0, 0, 255); - if(type & RPT_WARNING_ALL) return glColor4ub(220, 96, 96, 255); - if(type & RPT_OPERATOR_ALL) return glColor4ub(96, 128, 255, 255); - if(type & RPT_INFO_ALL) return glColor4ub(0, 170, 0, 255); - if(type & RPT_DEBUG_ALL) return glColor4ub(196, 196, 196, 255); - return glColor4ub(196, 196, 196, 255); /* unknown */ + /* + if (type & RPT_ERROR_ALL) { fg[0]=220; fg[1]=0; fg[2]=0; } + else if (type & RPT_WARNING_ALL) { fg[0]=220; fg[1]=96; fg[2]=96; } + else if (type & RPT_OPERATOR_ALL) { fg[0]=96; fg[1]=128; fg[2]=255; } + else if (type & RPT_INFO_ALL) { fg[0]=0; fg[1]=170; fg[2]=0; } + else if (type & RPT_DEBUG_ALL) { fg[0]=196; fg[1]=196; fg[2]=196; } + else { fg[0]=196; fg[1]=196; fg[2]=196; } + */ + + fg[0]=0; fg[1]=0; fg[2]=0; } /* return 0 if the last line is off the screen * should be able to use this for any string type */ -static int console_draw_string(char *str, int str_len, int console_width, int lheight, int ymax, int *x, int *y) +static int console_draw_string(char *str, int str_len, int console_width, int lheight, unsigned char *fg, unsigned char *bg, int winx, int winy, int *x, int *y) { + int rct_ofs= lheight/4; + if(str_len > console_width) { /* wrap? */ int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ char *line_stride= str + ((tot_lines-1) * console_width); /* advance to the last line and draw it first */ char eol; /* baclup the end of wrapping */ + if(bg) { + glColor3ub(bg[0], bg[1], bg[2]); + glRecti(0, *y-rct_ofs, winx, (*y+(lheight*tot_lines))+rct_ofs); + } + + glColor3ub(fg[0], fg[1], fg[2]); + /* last part needs no clipping */ BLF_position(*x, *y, 0); (*y) += lheight; BLF_draw(line_stride); @@ -124,15 +137,23 @@ static int console_draw_string(char *str, int str_len, int console_width, int lh line_stride[console_width] = eol; /* restore */ /* check if were out of view bounds */ - if(*y > ymax) + if(*y > winy) return 0; } } else { /* simple, no wrap */ + + if(bg) { + glColor3ub(bg[0], bg[1], bg[2]); + glRecti(0, *y-rct_ofs, winx, *y+lheight-rct_ofs); + } + + glColor3ub(fg[0], fg[1], fg[2]); + BLF_position(*x, *y, 0); (*y) += lheight; BLF_draw(str); - if(*y > ymax) + if(*y > winy) return 0; } @@ -140,6 +161,7 @@ static int console_draw_string(char *str, int str_len, int console_width, int lh } #define CONSOLE_DRAW_MARGIN 8 +#define CONSOLE_LINE_MARGIN 6 void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) { @@ -149,7 +171,7 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * int x,y; int cwidth; int console_width; /* number of characters that fit into the width of the console (fixed width) */ - + unsigned char fg[3]; console_font_begin(sc); cwidth = BLF_fixed_width(); @@ -163,7 +185,8 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * int prompt_len= strlen(sc->prompt); /* text */ - console_line_color(CONSOLE_LINE_INPUT); + console_line_color(fg, CONSOLE_LINE_INPUT); + glColor3ub(fg[0], fg[1], fg[2]); /* command line */ if(prompt_len) { @@ -174,7 +197,8 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * BLF_draw(cl->line); /* cursor */ - console_line_color(CONSOLE_LINE_ERROR); /* lazy */ + console_line_color(fg, CONSOLE_LINE_ERROR); /* lazy */ + glColor3ub(fg[0], fg[1], fg[2]); glRecti(x+(cwidth*cl->cursor) -1, y-2, x+(cwidth*cl->cursor) +1, y+sc->lheight-2); x= x_orig; /* remove prompt offset */ @@ -182,9 +206,9 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * y += sc->lheight; for(cl= sc->scrollback.last; cl; cl= cl->prev) { - console_line_color(cl->type); + console_line_color(fg, cl->type); - if(!console_draw_string(cl->line, cl->len, console_width, sc->lheight, ar->winy + sc->lheight, &x, &y)) + if(!console_draw_string(cl->line, cl->len, console_width, sc->lheight+CONSOLE_LINE_MARGIN, fg, NULL, ar->winx, ar->winy, &x, &y)) break; /* past the y limits */ } @@ -192,20 +216,28 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * else { Report *report; int report_mask= 0; + int bool= 0; + unsigned char bg[3] = {114, 114, 114}; + glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + /* convert our display toggles into a flag compatible with BKE_report flags */ if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL; - if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL; + if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL; if(sc->rpt_mask & CONSOLE_RPT_OP) report_mask |= RPT_OPERATOR_ALL; - if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL; + if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL; if(sc->rpt_mask & CONSOLE_RPT_ERR) report_mask |= RPT_ERROR_ALL; for(report=reports->list.last; report; report=report->prev) { if(report->type & report_mask) { - console_report_color(report->type); - if(!console_draw_string(report->message, strlen(report->message), console_width, sc->lheight, ar->winy + sc->lheight, &x, &y)) + console_report_color(fg, report->type); + if(!console_draw_string(report->message, strlen(report->message), console_width, sc->lheight+CONSOLE_LINE_MARGIN, fg, bool?bg:NULL, ar->winx, ar->winy, &x, &y)) break; /* past the y limits */ + + y+=CONSOLE_LINE_MARGIN; + bool = !(bool); } } diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 1a6274eaa1d..d2cd4df6426 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -562,7 +562,7 @@ void CONSOLE_OT_zoom(wmOperatorType *ot) ot->exec= zoom_exec; /* flags */ - ot->flag= OPTYPE_REGISTER; + /* ot->flag= OPTYPE_REGISTER; */ /* super annoying */ /* properties */ RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "Scale the view font.", 0, 1000); diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index f8567414717..33d276ba5b3 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -46,6 +46,7 @@ #define PYOP_ATTR_UINAME "__label__" #define PYOP_ATTR_IDNAME "__name__" /* use pythons class name */ #define PYOP_ATTR_DESCRIPTION "__doc__" /* use pythons docstring */ +#define PYOP_ATTR_REGISTER "__register__" /* True/False. if this python operator should be registered */ static struct BPY_flag_def pyop_ret_flags[] = { {"RUNNING_MODAL", OPERATOR_RUNNING_MODAL}, @@ -210,8 +211,8 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve /* get class name */ item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME); - Py_DECREF(item); strcpy(class_name, _PyUnicode_AsString(item)); + Py_DECREF(item); fprintf(stderr, "%s's %s returned %s\n", class_name, mode == PYOP_EXEC ? "execute" : "invoke", flag_str); } @@ -246,14 +247,14 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) /* identifiers */ item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME); - Py_DECREF(item); ot->idname= _PyUnicode_AsString(item); + Py_DECREF(item); item= PyObject_GetAttrString(py_class, PYOP_ATTR_UINAME); if (item) { - Py_DECREF(item); ot->name= _PyUnicode_AsString(item); + Py_DECREF(item); } else { ot->name= ot->idname; @@ -261,8 +262,8 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) } item= PyObject_GetAttrString(py_class, PYOP_ATTR_DESCRIPTION); - Py_DECREF(item); ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):""; + Py_DECREF(item); /* api callbacks, detailed checks dont on adding */ if (PyObject_HasAttrString(py_class, "invoke")) @@ -274,13 +275,22 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) ot->pyop_data= userdata; + /* flags */ + item= PyObject_GetAttrString(py_class, PYOP_ATTR_REGISTER); + if (item) { + ot->flag= PyObject_IsTrue(item)!=0 ? OPTYPE_REGISTER:0; + Py_DECREF(item); + } + else { + ot->flag= OPTYPE_REGISTER; /* unspesified, leave on for now to help debug */ + PyErr_Clear(); + } + props= PyObject_GetAttrString(py_class, PYOP_ATTR_PROP); if (props) { PyObject *dummy_args = PyTuple_New(0); int i; - - Py_DECREF(props); for(i=0; i Date: Thu, 16 Jul 2009 10:32:21 +0000 Subject: [PATCH 220/512] 2.5 - User Preferences Layout patch from William Screenshot here: http://www.reynish.com/files/blender25/userprefs_layout.png --- release/ui/space_info.py | 324 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 322 insertions(+), 2 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index a946b30f62d..4348eb87bfe 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -116,11 +116,12 @@ class INFO_PT_tabs(bpy.types.Panel): layout = self.layout userpref = context.user_preferences - layout.itemR(userpref, "active_section") + layout.itemR(userpref, "active_section", expand=True) class INFO_PT_view(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "View" + __no_header__ = True def poll(self, context): userpref = context.user_preferences @@ -131,7 +132,320 @@ class INFO_PT_view(bpy.types.Panel): userpref = context.user_preferences view = userpref.view - layout.itemR(view, "show_view_name") + split = layout.split() + col = split.column() + col.itemL(text="Display:") + col.itemR(view, "tooltips") + col.itemR(view, "display_object_info", text="Object Info") + col.itemR(view, "use_large_cursors") + col.itemR(view, "show_view_name", text="View Name") + col.itemR(view, "show_playback_fps", text="Playback FPS") + col.itemR(view, "global_scene") + col.itemR(view, "pin_floating_panels") + col.itemR(view, "object_center_size") + col.itemS() + col.itemS() + + col.itemL(text="Menus:") + col.itemR(view, "open_mouse_over") + col.itemL(text="Menu Open Delay:") + col.itemR(view, "open_toplevel_delay", text="Top Level") + col.itemR(view, "open_sublevel_delay", text="Sub Level") + + + col = split.column() + + col.itemL(text="View Manipulation:") + col.itemR(view, "auto_depth") + col.itemR(view, "global_pivot") + col.itemR(view, "zoom_to_mouse") + col.itemL(text="Zoom Style:") + row = col.row() + row.itemR(view, "viewport_zoom_style", expand=True) + col.itemL(text="Orbit Style:") + row = col.row() + row.itemR(view, "view_rotation", expand=True) + col.itemR(view, "perspective_orthographic_switch") + col.itemR(view, "smooth_view") + col.itemR(view, "rotation_angle") + col.itemL(text="NDOF Device:") + col.itemR(view, "ndof_pan_speed", text="Pan Speed") + col.itemR(view, "ndof_rotate_speed", text="Orbit Speed") + + col = split.column() + col.itemL(text="Snap:") + col.itemR(view, "snap_translate", text="Translate") + col.itemR(view, "snap_rotate", text="Rotate") + col.itemR(view, "snap_scale", text="Scale") + col.itemS() + col.itemS() + + col.itemL(text="Mouse Buttons:") + col.itemR(view, "left_mouse_button_select") + col.itemR(view, "right_mouse_button_select") + col.itemR(view, "emulate_3_button_mouse") + col.itemR(view, "use_middle_mouse_paste") + col.itemR(view, "middle_mouse_rotate") + col.itemR(view, "middle_mouse_pan") + col.itemR(view, "wheel_invert_zoom") + col.itemR(view, "wheel_scroll_lines") + + + col = split.column() + #Axis + col.itemL(text="Mini Axis:") + col.itemR(view, "show_mini_axis") + colsub = col.column() + colsub.enabled = view.show_mini_axis + colsub.itemR(view, "mini_axis_size") + colsub.itemR(view, "mini_axis_brightness") + col.itemS() + col.itemS() + #manipulator + col.itemL(text="Manipulator:") + col.itemR(view, "use_manipulator") + colsub = col.column() + colsub.enabled = view.use_manipulator + colsub.itemR(view, "manipulator_size", text="Size") + colsub.itemR(view, "manipulator_handle_size", text="Handle Size") + colsub.itemR(view, "manipulator_hotspot", text="Hotspot") + col.itemS() + col.itemS() + + col.itemL(text="Toolbox:") + col.itemR(view, "use_column_layout") + col.itemL(text="Open Toolbox Delay:") + col.itemR(view, "open_left_mouse_delay", text="Hold LMB") + col.itemR(view, "open_right_mouse_delay", text="Hold RMB") + + +class INFO_PT_edit(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "Edit" + __no_header__ = True + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'EDIT_METHODS') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + edit = userpref.edit + + split = layout.split() + col = split.column() + #Materials + col.itemL(text="Materials:") + col.itemR(edit, "material_linked_object", text="Linked to Object") + col.itemR(edit, "material_linked_obdata", text="Linked to ObData") + col.itemS() + col.itemS() + + #New Objects + col.itemL(text="New Objects:") + col.itemR(edit, "enter_edit_mode") + col.itemR(edit, "align_to_view") + col.itemS() + col.itemS() + + #Tranform + col.itemL(text="Transform:") + col.itemR(edit, "drag_immediately") + col.itemS() + col.itemS() + + #undo + col.itemL(text="Undo:") + col.itemR(edit, "global_undo") + col.itemR(edit, "undo_steps", text="Steps") + col.itemR(edit, "undo_memory_limit", text="Memory Limit") + + col = split.column() + #keying + col.itemL(text="Keyframing:") + col.itemR(edit, "use_visual_keying") + col.itemR(edit, "new_interpolation_type") + col.itemR(edit, "auto_keying_enable", text="Auto Keyframing") + colsub = col.column() + colsub.enabled = edit.auto_keying_enable + row = colsub.row() + row.itemR(edit, "auto_keying_mode", expand=True) + colsub.itemR(edit, "auto_keyframe_insert_available", text="Only Insert Available") + colsub.itemR(edit, "auto_keyframe_insert_needed", text="Only Insert Needed") + col.itemS() + col.itemS() + #greasepencil + col.itemL(text="Grease Pencil:") + col.itemR(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance") + col.itemR(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance") + col.itemR(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke") + col.itemR(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke") + col.itemR(edit, "grease_pencil_eraser_radius", text="Eraser Radius") + col = split.column() + #Diplicate + col.itemL(text="Duplicate:") + col.itemR(edit, "duplicate_mesh", text="Mesh") + col.itemR(edit, "duplicate_surface", text="Surface") + col.itemR(edit, "duplicate_curve", text="Curve") + col.itemR(edit, "duplicate_text", text="Text") + col.itemR(edit, "duplicate_metaball", text="Metaball") + col.itemR(edit, "duplicate_armature", text="Armature") + col.itemR(edit, "duplicate_lamp", text="Lamp") + col.itemR(edit, "duplicate_material", text="Material") + col.itemR(edit, "duplicate_texture", text="Texture") + col.itemR(edit, "duplicate_ipo", text="F-Curve") + col.itemR(edit, "duplicate_action", text="Action") + +class INFO_PT_system(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "System" + __no_header__ = True + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'SYSTEM_OPENGL') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + system = userpref.system + lan = userpref.language + + split = layout.split() + col = split.column() + + col.itemR(system, "emulate_numpad") + col.itemS() + col.itemS() + #Weight Colors + col.itemL(text="Weight Colors:") + col.itemR(system, "use_weight_color_range", text="Use Custom Range") + col.itemR(system, "weight_color_range") + col.itemS() + col.itemS() + + #sequencer + col.itemL(text="Sequencer:") + col.itemR(system, "prefetch_frames") + col.itemR(system, "memory_cache_limit") + + col = split.column() + + #System + col.itemL(text="System:") + col.itemR(lan, "dpi") + col.itemR(system, "enable_all_codecs") + col.itemR(system, "auto_run_python_scripts") + col.itemR(system, "frame_server_port") + col.itemR(system, "game_sound") + col.itemR(system, "filter_file_extensions") + col.itemR(system, "hide_dot_files_datablocks") + col.itemR(system, "audio_mixing_buffer") + + col = split.column() + + #OpenGL + col.itemL(text="OpenGL:") + col.itemR(system, "clip_alpha", slider=True) + col.itemR(system, "use_mipmaps") + col.itemL(text="Windom Draw Method:") + row = col.row() + row.itemR(system, "window_draw_method", expand=True) + col.itemL(text="Textures:") + col.itemR(system, "gl_texture_limit", text="Limit") + col.itemR(system, "texture_time_out", text="Time Out") + col.itemR(system, "texture_collection_rate", text="Collection Rate") + +class INFO_PT_filepaths(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "File Paths" + __no_header__ = True + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'FILE_PATHS') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + paths = userpref.filepaths + + split = layout.split() + col = split.column() + col.itemR(paths, "use_relative_paths") + col.itemR(paths, "compress_file") + col.itemR(paths, "fonts_directory") + col.itemR(paths, "textures_directory") + col.itemR(paths, "texture_plugin_directory") + col.itemR(paths, "sequence_plugin_directory") + col.itemR(paths, "render_output_directory") + col.itemR(paths, "python_scripts_directory") + col.itemR(paths, "sounds_directory") + col.itemR(paths, "temporary_directory") + +class INFO_PT_autosave(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "Auto Save" + __no_header__ = True + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'AUTO_SAVE') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + save = userpref.autosave + + split = layout.split() + col = split.column() + col.itemR(save, "save_version") + col.itemR(save, "recent_files") + col.itemR(save, "save_preview_images") + + col = split.column() + col.itemR(save, "auto_save_temporary_files") + colsub = col.column() + colsub.enabled = save.auto_save_temporary_files + colsub.itemR(save, "auto_save_time") + +class INFO_PT_language(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = "Language" + __no_header__ = True + + def poll(self, context): + userpref = context.user_preferences + return (userpref.active_section == 'LANGUAGE_COLORS') + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + lan = userpref.language + + split = layout.split() + col = split.column() + + col.itemR(lan, "language") + col.itemR(lan, "translate_tooltips") + col.itemR(lan, "translate_buttons") + col.itemR(lan, "translate_toolbox") + col.itemR(lan, "use_textured_fonts") + +class INFO_PT_bottombar(bpy.types.Panel): + __space_type__ = "USER_PREFERENCES" + __label__ = " " + __no_header__ = True + + def draw(self, context): + layout = self.layout + userpref = context.user_preferences + + split = layout.split(percentage=0.8) + split.itemL(text="") + split.itemO("WM_OT_save_homefile", text="Save As Default") + bpy.types.register(INFO_HT_header) bpy.types.register(INFO_MT_file) @@ -143,4 +457,10 @@ bpy.types.register(INFO_MT_render) bpy.types.register(INFO_MT_help) bpy.types.register(INFO_PT_tabs) bpy.types.register(INFO_PT_view) +bpy.types.register(INFO_PT_edit) +bpy.types.register(INFO_PT_system) +bpy.types.register(INFO_PT_filepaths) +bpy.types.register(INFO_PT_autosave) +bpy.types.register(INFO_PT_language) +bpy.types.register(INFO_PT_bottombar) From 0621225b38731a8217a03bea3b82e74f2cda10d2 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 16 Jul 2009 11:05:16 +0000 Subject: [PATCH 221/512] 2.5 - View2D fixes for User Prefs Added NULL check for View2D code for invalid style pointer (this underlying problem should get addressed at some point), and reinstated the reinitialisation hack for panel regions. --- source/blender/editors/interface/view2d.c | 9 ++++----- source/blender/editors/screen/area.c | 6 ++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 2f92901c8f5..0f7532383c9 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -254,6 +254,8 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* panels view, with horizontal/vertical align */ case V2D_COMMONVIEW_PANELS_UI: { + float panelzoom= (style) ? style->panelzoom : 1.0f; + /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM); v2d->minzoom= 0.5f; @@ -271,13 +273,10 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->tot.ymin= -winy; v2d->cur.xmin= 0.0f; - v2d->cur.xmax= winx*style->panelzoom; + v2d->cur.xmax= winx*panelzoom; v2d->cur.ymax= 0.0f; - v2d->cur.ymin= -winy*style->panelzoom; - - v2d->cur.ymax= 0.0f; - v2d->cur.ymin= -winy*style->panelzoom; + v2d->cur.ymin= -winy*panelzoom; } break; diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index efd8754a760..e84aab787c1 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1256,9 +1256,11 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) ListBase *keymap; // XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file) + // scrollbars for button regions ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - //if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) - // ar->v2d.flag &= ~V2D_IS_INITIALISED; + // correctly initialised User-Prefs? + if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) + ar->v2d.flag &= ~V2D_IS_INITIALISED; UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy); From 730f3191302b17e665524190b23381e1bd550792 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 16 Jul 2009 14:31:32 +0000 Subject: [PATCH 222/512] Another fluid + (little) cloth gui and settings update --- release/ui/buttons_physic_cloth.py | 55 ++++--- release/ui/buttons_physics_fluid.py | 163 ++++++++++++-------- source/blender/blenkernel/intern/fluidsim.c | 14 +- 3 files changed, 138 insertions(+), 94 deletions(-) diff --git a/release/ui/buttons_physic_cloth.py b/release/ui/buttons_physic_cloth.py index 277a6dfe760..a49513a60c2 100644 --- a/release/ui/buttons_physic_cloth.py +++ b/release/ui/buttons_physic_cloth.py @@ -40,25 +40,28 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel): split = layout.split() - col = split.column(align=True) + col = split.column() col.itemR(cloth, "quality", slider=True) - col.itemR(cloth, "gravity") + col.itemL(text="Gravity:") + col.itemR(cloth, "gravity", text="") col.itemR(cloth, "pin_cloth", text="Pin") - col = col.column(align=True) - col.active = cloth.pin_cloth - col.itemR(cloth, "pin_stiffness", text="Stiffness") - col.item_pointerR(cloth, "mass_vertex_group", ob, "vertex_groups", text="") + colsub = col.column(align=True) + colsub.active = cloth.pin_cloth + colsub.itemR(cloth, "pin_stiffness", text="Stiffness") + colsub.item_pointerR(cloth, "mass_vertex_group", ob, "vertex_groups", text="") - col = split.column(align=True) + col = split.column() col.itemL(text="Presets...") - col.itemL(text="") - col.itemR(cloth, "mass") - col.itemR(cloth, "structural_stiffness", text="Structural") - col.itemR(cloth, "bending_stiffness", text="Bending") - col.itemL(text="Damping") - col.itemR(cloth, "spring_damping", text="Spring") - col.itemR(cloth, "air_damping", text="Air") + col.itemL(text="Material:") + colsub = col.column(align=True) + colsub.itemR(cloth, "mass") + colsub.itemR(cloth, "structural_stiffness", text="Structural") + colsub.itemR(cloth, "bending_stiffness", text="Bending") + col.itemL(text="Damping:") + colsub = col.column(align=True) + colsub.itemR(cloth, "spring_damping", text="Spring") + colsub.itemR(cloth, "air_damping", text="Air") # Disabled for now """ @@ -124,6 +127,7 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel): class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_clothcollision" __label__ = "Cloth Collision" + __default_closed__ = True def poll(self, context): return (context.cloth != None) @@ -146,7 +150,7 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): col.itemR(cloth, "min_distance", text="Distance") col.itemR(cloth, "friction") - col = split.column(align="True") + col = split.column(align=True) col.itemR(cloth, "enable_self_collision", text="Self Collision") col = col.column(align=True) col.active = cloth.enable_self_collision @@ -156,6 +160,7 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_stiffness" __label__ = "Cloth Stiffness Scaling" + __default_closed__ = True def poll(self, context): return (context.cloth != None) @@ -175,17 +180,19 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): split = layout.split() - sub = split.column(align=True) - sub.itemL(text="Structural Stiffness:") - sub.itemR(cloth, "structural_stiffness_max", text="Max") - sub.item_pointerR(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="") + col = split.column() + col.itemL(text="Structural Stiffness:") + colsub = col.column(align=True) + colsub.itemR(cloth, "structural_stiffness_max", text="Max") + colsub.item_pointerR(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="") - sub = split.column(align=True) - sub.itemL(text="Bending Stiffness:") - sub.itemR(cloth, "bending_stiffness_max", text="Max") - sub.item_pointerR(cloth, "bending_vertex_group", ob, "vertex_groups", text="") + col = split.column() + col.itemL(text="Bending Stiffness:") + colsub = col.column(align=True) + colsub.itemR(cloth, "bending_stiffness_max", text="Max") + colsub.item_pointerR(cloth, "bending_vertex_group", ob, "vertex_groups", text="") bpy.types.register(PHYSICS_PT_cloth) bpy.types.register(PHYSICS_PT_cloth_cache) bpy.types.register(PHYSICS_PT_cloth_collision) -bpy.types.register(PHYSICS_PT_cloth_stiffness) +bpy.types.register(PHYSICS_PT_cloth_stiffness) \ No newline at end of file diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 2ab33b4a416..482dd231f14 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -51,102 +51,127 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): if fluid.type == 'DOMAIN': layout.itemO("FLUID_OT_bake", text="BAKE") - layout.itemL(text="Required Memory: " + fluid.memory_estimate) - - layout.itemL(text="Resolution:") - split = layout.split() col = split.column() - colsub = col.column(align=True) + col.itemL(text="Resolution:") + colsub = col.column() colsub.itemR(fluid, "resolution", text="Final") + colsub.itemL(text="Render Display:") colsub.itemR(fluid, "render_display_mode", text="") + col.itemL(text="Time:") colsub = col.column(align=True) - colsub.itemL(text="Time:") colsub.itemR(fluid, "start_time", text="Start") colsub.itemR(fluid, "end_time", text="End") col = split.column() - colsub = col.column(align=True) - colsub.itemR(fluid, "preview_resolution", text="Preview", slider=True) + colsub = col.column() + colsub.itemL(text="Required Memory: " + fluid.memory_estimate) + colsub.itemR(fluid, "preview_resolution", text="Preview") + colsub.itemL(text="Viewport Display:") colsub.itemR(fluid, "viewport_display_mode", text="") colsub = col.column() + colsub.itemL(text="") colsub.itemR(fluid, "reverse_frames") colsub.itemR(fluid, "generate_speed_vectors") - colsub.itemR(fluid, "path", text="") - if fluid.type in ('FLUID', 'OBSTACLE', 'INFLOW', 'OUTFLOW'): - layout.itemR(fluid, "volume_initialization") + layout.itemL(text="Path:") + layout.itemR(fluid, "path", text="") if fluid.type == 'FLUID': - row = layout.row() - row.column().itemR(fluid, "initial_velocity") - row.itemR(fluid, "export_animated_mesh") + split = layout.split() + col = split.column() + col.itemL(text="Volume Initialization:") + col.itemR(fluid, "volume_initialization", text="") + col.itemR(fluid, "export_animated_mesh") + col = split.column() + col.itemL(text="Initial Velocity:") + col.itemR(fluid, "initial_velocity", text="") if fluid.type == 'OBSTACLE': - row = layout.row() - row.itemL() - row.itemR(fluid, "export_animated_mesh") - layout.itemR(fluid, "slip_type", expand=True) + split = layout.split() + col = split.column() + col.itemL(text="Volume Initialization:") + col.itemR(fluid, "volume_initialization", text="") + col.itemR(fluid, "export_animated_mesh") + col = split.column() + col.itemL(text="Slip Type:") + colsub=col.column(align=True) + colsub.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - layout.itemR(fluid, "partial_slip_amount", text="Amount") + colsub.itemR(fluid, "partial_slip_amount", text="Amount") - layout.itemR(fluid, "impact_factor") + col.itemR(fluid, "impact_factor") if fluid.type == 'INFLOW': - row = layout.row() - row.column().itemR(fluid, "inflow_velocity") - row.itemR(fluid, "export_animated_mesh") - layout.itemR(fluid, "local_coordinates") + split = layout.split() + col = split.column() + col.itemL(text="Volume Initialization:") + col.itemR(fluid, "volume_initialization", text="") + col.itemR(fluid, "export_animated_mesh") + col.itemR(fluid, "local_coordinates") + + col = split.column() + col.itemL(text="Inflow Velocity:") + col.itemR(fluid, "inflow_velocity", text="") if fluid.type == 'OUTFLOW': - row = layout.row() - row.itemL() - row.itemR(fluid, "export_animated_mesh") + split = layout.split() + col = split.column() + col.itemL(text="Volume Initialization:") + col.itemR(fluid, "volume_initialization", text="") + col.itemR(fluid, "export_animated_mesh") + col = split.column() if fluid.type == 'PARTICLE': split = layout.split() + col = split.column() + col.itemL(text="Influence:") + colsub = col.column(align=True) + colsub.itemR(fluid, "particle_influence", text="Size") + colsub.itemR(fluid, "alpha_influence", text="Alpha") + col.itemL(text="Path:") + + layout.itemR(fluid, "path", text="") + col = split.column() col.itemL(text="Type:") col.itemR(fluid, "drops") col.itemR(fluid, "floats") col.itemR(fluid, "tracer") - col = split.column() - col.itemL(text="Influence:") - col.itemR(fluid, "particle_influence", text="Particle") - col.itemR(fluid, "alpha_influence", text="Alpha") - - layout.itemR(fluid, "path") - if fluid.type == 'CONTROL': split = layout.split() col = split.column() - col.itemL(text="Time:") - col.itemR(fluid, "start_time", text="Start") - col.itemR(fluid, "end_time", text="End") - - col = split.column() + col.itemL(text="") col.itemR(fluid, "quality", slider=True) col.itemR(fluid, "reverse_frames") + col = split.column() + col.itemL(text="Time:") + col=col.column(align=True) + col.itemR(fluid, "start_time", text="Start") + col.itemR(fluid, "end_time", text="End") + split = layout.split() col = split.column() - col.itemL(text="Attraction:") + col.itemL(text="Attraction Force:") + col=col.column(align=True) col.itemR(fluid, "attraction_strength", text="Strength") col.itemR(fluid, "attraction_radius", text="Radius") col = split.column() - col.itemL(text="Velocity:") + col.itemL(text="Velocity Force:") + col=col.column(align=True) col.itemR(fluid, "velocity_strength", text="Strength") col.itemR(fluid, "velocity_radius", text="Radius") class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_domain_gravity" - __label__ = "Domain World/Gravity" + __label__ = "Domain World" __default_closed__ = True def poll(self, context): @@ -161,18 +186,27 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): split = layout.split() col = split.column() - col.itemR(fluid, "gravity") + col.itemL(text="Gravity:") + col.itemR(fluid, "gravity", text="") + + col.itemL(text="Size:") + col.itemR(fluid, "real_world_size", text="Real World Size") + + col = split.column() + col.itemL(text="Viscosity Presets:") + colsub=col.column(align=True) + colsub.itemR(fluid, "viscosity_preset", text="") - col = split.column(align=True) - col.itemL(text="Viscosity:") - col.itemR(fluid, "viscosity_preset", text="") if fluid.viscosity_preset == 'MANUAL': - col.itemR(fluid, "viscosity_base", text="Base") - col.itemR(fluid, "viscosity_exponent", text="Exponent") + colsub.itemR(fluid, "viscosity_base", text="Base") + colsub.itemR(fluid, "viscosity_exponent", text="Exponent", slider=True) + else: + colsub.itemL(text="") + colsub.itemL(text="") - col = layout.column_flow() - col.itemR(fluid, "real_world_size") - col.itemR(fluid, "grid_levels") + col.itemL(text="Optimization:") + col=col.column(align=True) + col.itemR(fluid, "grid_levels", slider=True) col.itemR(fluid, "compressibility") class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): @@ -189,16 +223,18 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): layout = self.layout fluid = context.fluid.settings - layout.itemL(text="Slip:") - - layout.itemR(fluid, "slip_type", expand=True) + split = layout.split() + col = split.column() + col.itemL(text="Slip Type:") + col=col.column(align=True) + col.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - layout.itemR(fluid, "partial_slip_amount", text="Amount") - - layout.itemL(text="Surface:") - row = layout.row() - row.itemR(fluid, "surface_smoothing", text="Smoothing") - row.itemR(fluid, "surface_subdivisions", text="Subdivisions") + col.itemR(fluid, "partial_slip_amount", text="Amount") + col = split.column() + col.itemL(text="Surface:") + col=col.column(align=True) + col.itemR(fluid, "surface_smoothing", text="Smoothing") + col.itemR(fluid, "surface_subdivisions", text="Subdivisions") class PHYSICS_PT_domain_particles(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_domain_particles" @@ -214,10 +250,11 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel): layout = self.layout fluid = context.fluid.settings - layout.itemR(fluid, "tracer_particles") - layout.itemR(fluid, "generate_particles") + col=layout.column(align=True) + col.itemR(fluid, "tracer_particles") + col.itemR(fluid, "generate_particles") bpy.types.register(PHYSICS_PT_fluid) bpy.types.register(PHYSICS_PT_domain_gravity) bpy.types.register(PHYSICS_PT_domain_boundary) -bpy.types.register(PHYSICS_PT_domain_particles) +bpy.types.register(PHYSICS_PT_domain_particles) \ No newline at end of file diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c index 2b4032af503..6cf916c4038 100644 --- a/source/blender/blenkernel/intern/fluidsim.c +++ b/source/blender/blenkernel/intern/fluidsim.c @@ -83,9 +83,9 @@ void fluidsim_init(FluidsimModifierData *fluidmd) fss->type = OB_FLUIDSIM_ENABLE; fss->show_advancedoptions = 0; - fss->resolutionxyz = 50; - fss->previewresxyz = 25; - fss->realsize = 0.03; + fss->resolutionxyz = 65; + fss->previewresxyz = 45; + fss->realsize = 0.5; fss->guiDisplayMode = 2; // preview fss->renderDisplayMode = 3; // render @@ -98,7 +98,7 @@ void fluidsim_init(FluidsimModifierData *fluidmd) fss->gravy = 0.0; fss->gravz = -9.81; fss->animStart = 0.0; - fss->animEnd = 0.30; + fss->animEnd = 4.0; fss->gstar = 0.005; // used as normgstar fss->maxRefine = -1; // maxRefine is set according to resolutionxyz during bake @@ -114,15 +114,15 @@ void fluidsim_init(FluidsimModifierData *fluidmd) // no bounding box needed // todo - reuse default init from elbeem! - fss->typeFlags = OB_FSBND_NOSLIP; + fss->typeFlags = OB_FSBND_PARTSLIP; fss->domainNovecgen = 0; fss->volumeInitType = 1; // volume - fss->partSlipValue = 0.0; + fss->partSlipValue = 0.5; fss->generateTracers = 0; fss->generateParticles = 0.0; fss->surfaceSmoothing = 1.0; - fss->surfaceSubdivs = 1.0; + fss->surfaceSubdivs = 0.0; fss->particleInfSize = 0.0; fss->particleInfAlpha = 0.0; From f77ef3d859b6546eead884d156b6ceef56959f90 Mon Sep 17 00:00:00 2001 From: Chris Want Date: Thu, 16 Jul 2009 18:44:48 +0000 Subject: [PATCH 223/512] Don't link gameplayer against the decimation code (CMake). --- blenderplayer/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/blenderplayer/CMakeLists.txt b/blenderplayer/CMakeLists.txt index b9ac3c7a8c6..46b18926ca3 100644 --- a/blenderplayer/CMakeLists.txt +++ b/blenderplayer/CMakeLists.txt @@ -69,7 +69,6 @@ IF(UNIX) bf_blenkernel verse bf_blenkernel - bf_decimation bf_blenloader bf_blenpluginapi bf_blroutines From 2e854ec7cfcb0a8aa78aaf58f7f4c3e79baae0e3 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Thu, 16 Jul 2009 19:41:28 +0000 Subject: [PATCH 224/512] SCons * ensure all SConscripts are ready for win64-vc (where necessary). * ensure we have proper _DEBUG flag for Python when we're doing a debug build. * some cleaning up of linking etc. * ensure /EHsc is there for game engine modules. --- config/win32-vc-config.py | 4 ++-- config/win64-vc-config.py | 8 +++----- extern/bullet2/src/SConscript | 2 +- extern/libopenjpeg/SConscript | 4 ++-- intern/elbeem/SConscript | 2 +- source/blender/editors/space_node/SConscript | 2 +- source/blender/makesrna/intern/SConscript | 2 +- source/blender/python/SConscript | 4 ++-- source/gameengine/BlenderRoutines/SConscript | 3 ++- source/gameengine/Expressions/SConscript | 3 ++- source/gameengine/GameLogic/SConscript | 11 +++++++---- source/gameengine/GamePlayer/common/SConscript | 3 ++- source/gameengine/GamePlayer/ghost/SConscript | 3 ++- source/gameengine/Ketsji/KXNetwork/SConscript | 3 ++- source/gameengine/Ketsji/SConscript | 11 +++++++---- source/gameengine/Physics/Bullet/SConscript | 3 ++- source/gameengine/Physics/common/SConscript | 3 ++- .../Rasterizer/RAS_OpenGLRasterizer/SConscript | 3 ++- source/gameengine/Rasterizer/SConscript | 3 ++- source/gameengine/SceneGraph/SConscript | 3 ++- source/gameengine/VideoTexture/SConscript | 13 ++++++++----- tools/Blender.py | 7 +++++++ 22 files changed, 62 insertions(+), 38 deletions(-) diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py index 67ab394bef9..8b152be437e 100644 --- a/config/win32-vc-config.py +++ b/config/win32-vc-config.py @@ -149,7 +149,7 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT', '/wd4244', '/wd4305', '/wd4800'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] @@ -165,7 +165,7 @@ CXX_WARN = [] LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid'] -PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/ENTRY:mainCRTStartup','/INCREMENTAL:NO','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"','/LARGEADDRESSAWARE'] +PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/INCREMENTAL:NO','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"msvcprtd.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"','/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/LARGEADDRESSAWARE'] # # Todo # BF_PROFILE_CCFLAGS = ['-pg', '-g '] diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index c6bea9eba89..a8be162ea97 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -152,7 +152,8 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT', '/wd4244', '/wd4305', '/wd4800'] +CFLAGS = [] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] @@ -172,16 +173,13 @@ WITH_BF_DOCS=False BF_DEBUG=False BF_BSC=False -CFLAGS = [] -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/MT'] -CXXFLAGS = ['/EHsc'] if BF_DEBUG: BF_NUMJOBS=1 else: BF_NUMJOBS=6 -PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/ENTRY:mainCRTStartup','/INCREMENTAL:NO','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"'] +PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/INCREMENTAL:NO','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"msvcprtd.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"','/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"'] BF_BUILDDIR = '..\\build\\blender25-win64-vc' BF_INSTALLDIR='..\\install\\blender25-win64-vc' diff --git a/extern/bullet2/src/SConscript b/extern/bullet2/src/SConscript index bd7fb87b01f..319cc57ce55 100644 --- a/extern/bullet2/src/SConscript +++ b/extern/bullet2/src/SConscript @@ -10,7 +10,7 @@ cflags = [] if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): defs += ' WIN32 NDEBUG _WINDOWS _LIB' #cflags += ['/MT', '/W3', '/GX', '/O2', '/Op'] - cflags += ['/MT', '/W3', '/GX', '/Og', '/Ot', '/Ob1', '/Op', '/G6', '/O3'] + cflags += ['/MT', '/W3', '/GX', '/Og', '/Ot', '/Ob1', '/Op', '/G6', '/O3', '/EHcs'] elif env['OURPLATFORM']=='win32-mingw': defs += ' NDEBUG' cflags += ['-O2'] diff --git a/extern/libopenjpeg/SConscript b/extern/libopenjpeg/SConscript index 13a34bf5598..693fee15c91 100644 --- a/extern/libopenjpeg/SConscript +++ b/extern/libopenjpeg/SConscript @@ -10,14 +10,14 @@ incs = '.' flags = [] defs = [] -if env['OURPLATFORM'] == 'win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): flags = [] defs.append('OPJ_STATIC') else: flags = ['-Wall', '-O3', '-ffast-math', '-std=c99'] oj_env = env.Clone() -if not env['OURPLATFORM'] == 'win32-vc': +if not env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): oj_env.Replace(CCFLAGS = '') oj_env.Replace(BF_DEBUG_FLAGS = '') diff --git a/intern/elbeem/SConscript b/intern/elbeem/SConscript index 92e80c36cea..0900ab1db5c 100644 --- a/intern/elbeem/SConscript +++ b/intern/elbeem/SConscript @@ -10,7 +10,7 @@ defs = 'NOGUI ELBEEM_BLENDER=1' if env['WITH_BF_OPENMP']: defs += ' PARALLEL' -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): defs += ' USE_MSVC6FIXES' incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC'] incs += ' extern ' diff --git a/source/blender/editors/space_node/SConscript b/source/blender/editors/space_node/SConscript index ad57970950d..5453aa7dd44 100644 --- a/source/blender/editors/space_node/SConscript +++ b/source/blender/editors/space_node/SConscript @@ -8,7 +8,7 @@ incs += ' ../../nodes ../../render/extern/include' incs += ' ../../windowmanager #intern/guardedalloc #extern/glew/include' defs = [] cf = [] -if env['OURPLATFORM'] == 'win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): #cf.append('/WX') pass if env['CC'] == 'gcc': diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index 7cd3fde21be..c10b907d04e 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -86,7 +86,7 @@ if env['BF_PROFILE']: if env['BF_DEBUG']: makesrna_tool.Append(CFLAGS = env['BF_DEBUG_CFLAGS']) makesrna_tool.Append(CCFLAGS = env['BF_DEBUG_CCFLAGS']) - if env['OURPLATFORM'] == 'win32-vc': + if env['OURPLATFORM'] in ('win32-vc','win64-vc'): makesrna_tool.Append(LINKFLAGS = ['/DEBUG','/PDB:makesrna.pdb']) targetpath = root_build_dir+'/makesrna' diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript index 73dc171fc3e..d44cf762a0f 100644 --- a/source/blender/python/SConscript +++ b/source/blender/python/SConscript @@ -10,8 +10,8 @@ incs += ' ' + env['BF_PYTHON_INC'] defs = [] -if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc') and env['BF_DEBUG']: - defs.append('Py_TRACE_REFS') +if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc','win64-vc') and env['BF_DEBUG']: + defs.append('_DEBUG') env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core'], priority = [140]) diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript index fc12f453d86..0239af22b8c 100644 --- a/source/gameengine/BlenderRoutines/SConscript +++ b/source/gameengine/BlenderRoutines/SConscript @@ -29,8 +29,9 @@ incs += ' ' + env['BF_BULLET_INC'] incs += ' ' + env['BF_OPENGL_INC'] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc','win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_bloutines', sources, Split(incs), defs, libtype=['core', 'player'], priority=[300, 45] , cxx_compileflags=cxxflags) diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript index 07cab62c020..69f87ffbb90 100644 --- a/source/gameengine/Expressions/SConscript +++ b/source/gameengine/Expressions/SConscript @@ -7,8 +7,9 @@ incs ='. #source/kernel/gen_system #intern/string #intern/moto/include #source/g incs += ' ' + env['BF_PYTHON_INC'] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_expressions', sources, Split(incs), [], libtype=['core','player'], priority = [360,120], cxx_compileflags=cxxflags) diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript index 91843eef586..837769e5e78 100644 --- a/source/gameengine/GameLogic/SConscript +++ b/source/gameengine/GameLogic/SConscript @@ -10,16 +10,19 @@ incs += ' #/source/gameengine/Rasterizer #/source/gameengine/SceneGraph' incs += ' ' + env['BF_PYTHON_INC'] -defs = '' +defs = [] if env['WITH_BF_SDL']: incs += ' ' + env['BF_SDL_INC'] else: - defs += ' DISABLE_SDL' + defs.append('DISABLE_SDL') cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') + if env['BF_DEBUG']: + defs.append('_DEBUG') -env.BlenderLib ( 'bf_logic', sources, Split(incs), Split(defs), libtype=['core','player'], priority=[330, 100], cxx_compileflags=cxxflags ) +env.BlenderLib ( 'bf_logic', sources, Split(incs), defs, libtype=['core','player'], priority=[330, 100], cxx_compileflags=cxxflags ) diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript index f899385c841..b7b3b9b12c4 100644 --- a/source/gameengine/GamePlayer/common/SConscript +++ b/source/gameengine/GamePlayer/common/SConscript @@ -64,8 +64,9 @@ incs += Split(env['BF_PNG_INC']) incs += Split(env['BF_ZLIB_INC']) cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib (libname='gp_common', sources=source_files, includes=incs, defines = [], libtype='player', priority=5, cxx_compileflags=cxxflags) diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript index 19234cb663c..ca06b9ca0dd 100644 --- a/source/gameengine/GamePlayer/ghost/SConscript +++ b/source/gameengine/GamePlayer/ghost/SConscript @@ -44,9 +44,10 @@ incs = ['.', incs += Split(env['BF_PYTHON_INC']) cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') defs = '' if env['WITH_BF_FFMPEG']: diff --git a/source/gameengine/Ketsji/KXNetwork/SConscript b/source/gameengine/Ketsji/KXNetwork/SConscript index f350b2ce25a..e6584b55ed2 100644 --- a/source/gameengine/Ketsji/KXNetwork/SConscript +++ b/source/gameengine/Ketsji/KXNetwork/SConscript @@ -10,9 +10,10 @@ incs += ' #source/gameengine/Network #source/gameengine/SceneGraph' incs += ' ' + env['BF_PYTHON_INC'] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'kx_network', Split(sources), Split(incs), defines=[],libtype=['core', 'player'], priority=[400, 145], cxx_compileflags=cxxflags ) diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index b09267b79ff..1edffe0e587 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -4,7 +4,7 @@ import sys Import ('env') sources = env.Glob('*.cpp') -defs = '' +defs = [] incs = '. #source/blender/python/generic' # Only for Mathutils! and bpy_internal_import.h, be very careful @@ -28,11 +28,14 @@ incs += ' ' + env['BF_OPENGL_INC'] if env['WITH_BF_SDL']: incs += ' ' + env['BF_SDL_INC'] else: - defs += ' DISABLE_SDL' + defs.append('DISABLE_SDL') cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') + if env['BF_DEBUG']: + defs.append('_DEBUG') # for Python -env.BlenderLib ( 'bf_ketsji', sources, Split(incs), Split(defs), libtype=['core','player'], priority=[320, 60], cxx_compileflags = cxxflags ) +env.BlenderLib ( 'bf_ketsji', sources, Split(incs), defs, libtype=['core','player'], priority=[320, 60], cxx_compileflags = cxxflags ) diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript index ed53e8112cd..b6d0a75fd04 100644 --- a/source/gameengine/Physics/Bullet/SConscript +++ b/source/gameengine/Physics/Bullet/SConscript @@ -23,8 +23,9 @@ incs += ' ' + env['BF_BULLET_INC'] incs += ' ' + env['BF_PYTHON_INC'] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_bullet', Split(sources), Split(incs), [], libtype=['core','player'], priority=[350,80], cxx_compileflags=cxxflags ) diff --git a/source/gameengine/Physics/common/SConscript b/source/gameengine/Physics/common/SConscript index 2713143f50d..447b0ec1bbb 100644 --- a/source/gameengine/Physics/common/SConscript +++ b/source/gameengine/Physics/common/SConscript @@ -6,8 +6,9 @@ sources = 'PHY_IMotionState.cpp PHY_IController.cpp PHY_IPhysicsController.cpp P incs = '. ../Dummy #intern/moto/include' cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_common', Split(sources), Split(incs), [], libtype=['core','player'], priority=[360, 90], cxx_compileflags = cxxflags ) diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript index 3d605ce12b8..e206c90ea25 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript @@ -9,8 +9,9 @@ incs += ' #source/blender/gameengine/Ketsji #source/gameengine/SceneGraph #sourc incs += ' #intern/guardedalloc #source/blender/blenlib' cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_oglrasterizer', Split(sources), Split(incs), [], libtype=['core','player'], priority=[350, 115], cxx_compileflags = cxxflags ) diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript index 018f2ab4d20..255131f9a44 100644 --- a/source/gameengine/Rasterizer/SConscript +++ b/source/gameengine/Rasterizer/SConscript @@ -8,8 +8,9 @@ incs = '. #source/kernel/gen_system #intern/string #intern/moto/include #source/ incs += ' ' + env['BF_PYTHON_INC'] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_rasterizer', sources, Split(incs), [], libtype=['core','player'], priority=[350,115], cxx_compileflags = cxxflags ) diff --git a/source/gameengine/SceneGraph/SConscript b/source/gameengine/SceneGraph/SConscript index 0692b170a61..b3db50117f1 100644 --- a/source/gameengine/SceneGraph/SConscript +++ b/source/gameengine/SceneGraph/SConscript @@ -7,8 +7,9 @@ sources = env.Glob('*.cpp') incs = '. #intern/moto/include' cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') env.BlenderLib ( 'bf_scenegraph', sources, Split(incs), [], libtype=['core','player'], priority=[325,125], cxx_compileflags = cxxflags ) diff --git a/source/gameengine/VideoTexture/SConscript b/source/gameengine/VideoTexture/SConscript index 920da8ffb2e..fdf46f70ad7 100644 --- a/source/gameengine/VideoTexture/SConscript +++ b/source/gameengine/VideoTexture/SConscript @@ -15,19 +15,22 @@ incs += ' #source/blender/gpu #source/kernel/gen_system #intern/string #intern/m incs += ' #intern/guardedalloc #intern/SoundSystem' incs += ' #extern/glew/include' -defs = '' +defs = [] cxxflags = [] -if env['OURPLATFORM']=='win32-vc': +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): cxxflags.append ('/GR') cxxflags.append ('/O2') + cxxflags.append ('/EHsc') + if env['BF_DEBUG']: + defs.append('_DEBUG') incs += ' ' + env['BF_PYTHON_INC'] #incs += ' ' + env['BF_OPENGL_INC'] if env['WITH_BF_FFMPEG']: - defs += ' WITH_FFMPEG' + defs.append('WITH_FFMPEG') incs += ' ' + env['BF_FFMPEG_INC'] + ' ' + env['BF_PTHREADS_INC'] - defs += ' __STDC_CONSTANT_MACROS' + defs.append('__STDC_CONSTANT_MACROS') -env.BlenderLib ( 'bf_videotex', sources, Split(incs), Split(defs), libtype=['core','player'], priority=[300, 72], cxx_compileflags = cxxflags ) +env.BlenderLib ( 'bf_videotex', sources, Split(incs), defs, libtype=['core','player'], priority=[300, 72], cxx_compileflags = cxxflags ) diff --git a/tools/Blender.py b/tools/Blender.py index 164a9d097e6..749fa55a833 100644 --- a/tools/Blender.py +++ b/tools/Blender.py @@ -448,6 +448,12 @@ class BlenderEnvironment(SConsEnvironment): lenv.Append(CFLAGS = lenv['C_WARN']) lenv.Append(CCFLAGS = lenv['CC_WARN']) lenv.Append(CXXFLAGS = lenv['CXX_WARN']) + + if lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc'): + if lenv['BF_DEBUG']: + lenv.Append(CCFLAGS = ['/MTd']) + else: + lenv.Append(CCFLAGS = ['/MT']) targetdir = root_build_dir+'lib/' + libname if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'): @@ -476,6 +482,7 @@ class BlenderEnvironment(SConsEnvironment): lenv = self.Clone() if lenv['OURPLATFORM'] in ('win32-vc', 'cygwin', 'win64-vc'): lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) + lenv.Append(LINKFLAGS = ['/FORCE:MULTIPLE']) if lenv['BF_DEBUG']: lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb']) if lenv['OURPLATFORM']=='linux2': From f029bee6cbac3c321e707f0c31eb041a9d92e616 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 16 Jul 2009 19:56:47 +0000 Subject: [PATCH 225/512] Win64: revert to use static msvc libs again --- config/win64-vc-config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index a8be162ea97..0f8366a79f9 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -153,7 +153,7 @@ CC = 'cl.exe' CXX = 'cl.exe' CFLAGS = [] -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] +CCFLAGS = ['/MT', '/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] From d1169a4e12060f228ae1d3473a609d7226fca9f5 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Thu, 16 Jul 2009 20:00:15 +0000 Subject: [PATCH 226/512] * revert reversion by Genscher. This '/MT' business is now handled in Blender.py --- config/win64-vc-config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index 0f8366a79f9..a8be162ea97 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -153,7 +153,7 @@ CC = 'cl.exe' CXX = 'cl.exe' CFLAGS = [] -CCFLAGS = ['/MT', '/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] From 37d33d0b7621b7a77936c4947e911ce74f17718f Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 16 Jul 2009 21:22:52 +0000 Subject: [PATCH 227/512] 2.5 UI: Renaming cloth UI file to fit naming scheme --- release/ui/{buttons_physic_cloth.py => buttons_physics_cloth.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename release/ui/{buttons_physic_cloth.py => buttons_physics_cloth.py} (100%) diff --git a/release/ui/buttons_physic_cloth.py b/release/ui/buttons_physics_cloth.py similarity index 100% rename from release/ui/buttons_physic_cloth.py rename to release/ui/buttons_physics_cloth.py From 9eebb2ca36fc7ea05fb46eb23cca8821e81889b8 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Thu, 16 Jul 2009 22:06:04 +0000 Subject: [PATCH 228/512] SVN maintenance. --- release/ui/buttons_physics_cloth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index a49513a60c2..18dab36211f 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -195,4 +195,4 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): bpy.types.register(PHYSICS_PT_cloth) bpy.types.register(PHYSICS_PT_cloth_cache) bpy.types.register(PHYSICS_PT_cloth_collision) -bpy.types.register(PHYSICS_PT_cloth_stiffness) \ No newline at end of file +bpy.types.register(PHYSICS_PT_cloth_stiffness) From deb180e37f324ab789ecbf608d08c9f031953749 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Jul 2009 22:47:27 +0000 Subject: [PATCH 229/512] - Scrollbars for the console (use View2D functions) - Set View2D operators not to register, got in the way a lot with the console. - Made autocomplete Ctrl+Enter so Tab can be used. - Should work with python 2.5 now. (patch from Vilda) - Moved report struct definitions into DNA_windowmanager_types.h, could also have DNA_report_types.h however the reports are not saved, its just needed so the report list can be used in the wmWindowManager struct. Fixes a crash reported by ZanQdo. - Store the report message length in the report so calculating the total height including word wrap is not so slow. --- release/ui/space_console.py | 8 +- source/blender/blenkernel/BKE_report.h | 38 +----- source/blender/blenkernel/intern/context.c | 2 +- source/blender/blenkernel/intern/report.c | 6 +- source/blender/blenloader/intern/readfile.c | 3 +- source/blender/editors/interface/view2d_ops.c | 16 +-- .../editors/space_console/console_draw.c | 121 +++++++++++++----- .../editors/space_console/console_intern.h | 1 + .../editors/space_console/console_ops.c | 6 +- .../editors/space_console/space_console.c | 72 +++++++---- source/blender/makesdna/DNA_space_types.h | 2 +- .../makesdna/DNA_windowmanager_types.h | 41 +++++- source/blender/windowmanager/intern/wm.c | 2 +- .../windowmanager/intern/wm_init_exit.c | 8 +- 14 files changed, 202 insertions(+), 124 deletions(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 6548a2249b2..7d8ea3018c4 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -50,7 +50,7 @@ def get_console(console_id): console_id can be any hashable type ''' - import sys, code, io + import sys, code try: consoles = get_console.consoles except:consoles = get_console.consoles = {} @@ -72,9 +72,11 @@ def get_console(console_id): console = code.InteractiveConsole(namespace) if sys.version.startswith('2'): - stdout = io.BytesIO() # Py2x support - stderr = io.BytesIO() + import cStringIO + stdout = cStringIO.BytesIO() # Py2x support + stderr = cStringIO.BytesIO() else: + import io stdout = io.StringIO() stderr = io.StringIO() diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h index 26853866ebb..1d72b1c81f0 100644 --- a/source/blender/blenkernel/BKE_report.h +++ b/source/blender/blenkernel/BKE_report.h @@ -32,48 +32,14 @@ extern "C" { #endif -#include "DNA_listBase.h" +#include "DNA_windowmanager_types.h" /* Reporting Information and Errors * * These functions also accept NULL in case no error reporting * is needed. */ -typedef enum ReportType { - RPT_DEBUG = 1<<0, - RPT_INFO = 1<<1, - RPT_OPERATOR = 1<<2, - RPT_WARNING = 1<<3, - RPT_ERROR = 1<<4, - RPT_ERROR_INVALID_INPUT = 1<<5, - RPT_ERROR_INVALID_CONTEXT = 1<<6, - RPT_ERROR_OUT_OF_MEMORY = 1<<7 -} ReportType; - -#define RPT_DEBUG_ALL (RPT_DEBUG) -#define RPT_INFO_ALL (RPT_INFO) -#define RPT_OPERATOR_ALL (RPT_OPERATOR) -#define RPT_WARNING_ALL (RPT_WARNING) -#define RPT_ERROR_ALL (RPT_ERROR|RPT_ERROR_INVALID_INPUT|RPT_ERROR_INVALID_CONTEXT|RPT_ERROR_OUT_OF_MEMORY) - -enum ReportListFlags { - RPT_PRINT = 1, - RPT_STORE = 2, -}; - -typedef struct Report { - struct Report *next, *prev; - ReportType type; - char *typestr; - char *message; -} Report; - -typedef struct ReportList { - ListBase list; - ReportType printlevel; - ReportType storelevel; - int flag; -} ReportList; +/* report structures are stored in DNA */ void BKE_reports_init(ReportList *reports, int flag); void BKE_reports_clear(ReportList *reports); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index bbf3ceb01e8..4bfc1484e56 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -206,7 +206,7 @@ struct ARegion *CTX_wm_menu(const bContext *C) struct ReportList *CTX_wm_reports(const bContext *C) { - return C->wm.manager->reports; + return &(C->wm.manager->reports); } View3D *CTX_wm_view3d(const bContext *C) diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index 6564329ef82..3e3dd4b0af0 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -102,7 +102,7 @@ void BKE_report(ReportList *reports, ReportType type, const char *message) len= strlen(message); report->message= MEM_callocN(sizeof(char)*(len+1), "ReportMessage"); memcpy(report->message, message, sizeof(char)*(len+1)); - + report->len= len; BLI_addtail(&reports->list, report); } } @@ -129,7 +129,7 @@ void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...) va_end(args); report->message= BLI_dynstr_get_cstring(ds); - + report->len= BLI_dynstr_get_len(ds); BLI_dynstr_free(ds); report->type= type; @@ -155,6 +155,7 @@ void BKE_reports_prepend(ReportList *reports, const char *prepend) MEM_freeN(report->message); report->message= BLI_dynstr_get_cstring(ds); + report->len= BLI_dynstr_get_len(ds); BLI_dynstr_free(ds); } @@ -179,6 +180,7 @@ void BKE_reports_prependf(ReportList *reports, const char *prepend, ...) MEM_freeN(report->message); report->message= BLI_dynstr_get_cstring(ds); + report->len= BLI_dynstr_get_len(ds); BLI_dynstr_free(ds); } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 1d7ba88136f..fbe7a07c7be 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4221,7 +4221,8 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm) wm->keymaps.first= wm->keymaps.last= NULL; wm->paintcursors.first= wm->paintcursors.last= NULL; wm->queue.first= wm->queue.last= NULL; - wm->reports= NULL; + BKE_reports_init(&wm->reports, RPT_STORE); + wm->jobs.first= wm->jobs.last= NULL; wm->windrawable= NULL; diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index c6688aea5c5..f0745ebfd71 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -257,7 +257,7 @@ void VIEW2D_OT_pan(wmOperatorType *ot) ot->modal= view_pan_modal; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; + ot->flag= OPTYPE_BLOCKING; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -303,7 +303,7 @@ void VIEW2D_OT_scroll_right(wmOperatorType *ot) ot->exec= view_scrollright_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -349,7 +349,7 @@ void VIEW2D_OT_scroll_left(wmOperatorType *ot) ot->exec= view_scrollleft_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -394,7 +394,7 @@ void VIEW2D_OT_scroll_down(wmOperatorType *ot) ot->exec= view_scrolldown_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -440,7 +440,7 @@ void VIEW2D_OT_scroll_up(wmOperatorType *ot) ot->exec= view_scrollup_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -550,7 +550,7 @@ void VIEW2D_OT_zoom_in(wmOperatorType *ot) ot->exec= view_zoomin_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); @@ -586,7 +586,7 @@ void VIEW2D_OT_zoom_out(wmOperatorType *ot) ot->exec= view_zoomout_exec; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER; + // ot->flag= OPTYPE_REGISTER; /* rna - must keep these in sync with the other operators */ RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); @@ -832,7 +832,7 @@ void VIEW2D_OT_zoom(wmOperatorType *ot) ot->modal= view_zoomdrag_modal; /* operator is repeatable */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; + // ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; /* rna - must keep these in sync with the other operators */ RNA_def_float(ot->srna, "deltax", 0, -FLT_MAX, FLT_MAX, "Delta X", "", -FLT_MAX, FLT_MAX); diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 0a725d0c69f..96641fd8fbd 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -68,7 +68,7 @@ static void console_font_begin(SpaceConsole *sc) BLF_set(mono); BLF_aspect(1.0); - BLF_size(sc->lheight, 72); + BLF_size(sc->lheight-2, 72); } static void console_line_color(unsigned char *fg, int type) @@ -106,12 +106,24 @@ static void console_report_color(unsigned char *fg, int type) /* return 0 if the last line is off the screen * should be able to use this for any string type */ -static int console_draw_string(char *str, int str_len, int console_width, int lheight, unsigned char *fg, unsigned char *bg, int winx, int winy, int *x, int *y) +static int console_draw_string( char *str, int str_len, + int console_width, int lheight, + unsigned char *fg, unsigned char *bg, + int winx, int winy, + int *x, int *y, int draw) { int rct_ofs= lheight/4; + int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ + + /* just advance the height */ + if(draw==0) { + if(str_len > console_width) (*y) += tot_lines * lheight; + else (*y) += lheight; + + return 1; + } if(str_len > console_width) { /* wrap? */ - int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ char *line_stride= str + ((tot_lines-1) * console_width); /* advance to the last line and draw it first */ char eol; /* baclup the end of wrapping */ @@ -160,11 +172,13 @@ static int console_draw_string(char *str, int str_len, int console_width, int lh return 1; } -#define CONSOLE_DRAW_MARGIN 8 -#define CONSOLE_LINE_MARGIN 6 +#define CONSOLE_DRAW_MARGIN 4 +#define CONSOLE_DRAW_SCROLL 16 -void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw) { + View2D *v2d= &ar->v2d; + ConsoleLine *cl= sc->history.last; int x_orig=CONSOLE_DRAW_MARGIN, y_orig=CONSOLE_DRAW_MARGIN; @@ -176,41 +190,54 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * console_font_begin(sc); cwidth = BLF_fixed_width(); - console_width= (ar->winx - CONSOLE_DRAW_MARGIN*2)/cwidth; + console_width= (ar->winx - (CONSOLE_DRAW_SCROLL + CONSOLE_DRAW_MARGIN*2) )/cwidth; if (console_width < 8) console_width= 8; x= x_orig; y= y_orig; if(sc->type==CONSOLE_TYPE_PYTHON) { - int prompt_len= strlen(sc->prompt); + int prompt_len; /* text */ - console_line_color(fg, CONSOLE_LINE_INPUT); - glColor3ub(fg[0], fg[1], fg[2]); - - /* command line */ - if(prompt_len) { - BLF_position(x, y, 0); x += cwidth * prompt_len; - BLF_draw(sc->prompt); + if(draw) { + prompt_len= strlen(sc->prompt); + console_line_color(fg, CONSOLE_LINE_INPUT); + glColor3ub(fg[0], fg[1], fg[2]); + + /* command line */ + if(prompt_len) { + BLF_position(x, y, 0); x += cwidth * prompt_len; + BLF_draw(sc->prompt); + } + BLF_position(x, y, 0); + BLF_draw(cl->line); + + /* cursor */ + console_line_color(fg, CONSOLE_LINE_ERROR); /* lazy */ + glColor3ub(fg[0], fg[1], fg[2]); + glRecti(x+(cwidth*cl->cursor) -1, y-2, x+(cwidth*cl->cursor) +1, y+sc->lheight-2); + + x= x_orig; /* remove prompt offset */ } - BLF_position(x, y, 0); - BLF_draw(cl->line); - - /* cursor */ - console_line_color(fg, CONSOLE_LINE_ERROR); /* lazy */ - glColor3ub(fg[0], fg[1], fg[2]); - glRecti(x+(cwidth*cl->cursor) -1, y-2, x+(cwidth*cl->cursor) +1, y+sc->lheight-2); - - x= x_orig; /* remove prompt offset */ y += sc->lheight; for(cl= sc->scrollback.last; cl; cl= cl->prev) { - console_line_color(fg, cl->type); - if(!console_draw_string(cl->line, cl->len, console_width, sc->lheight+CONSOLE_LINE_MARGIN, fg, NULL, ar->winx, ar->winy, &x, &y)) - break; /* past the y limits */ - + if(draw) + console_line_color(fg, cl->type); + + if(!console_draw_string( cl->line, cl->len, + console_width, sc->lheight, + fg, NULL, + ar->winx-CONSOLE_DRAW_MARGIN, v2d->cur.ymax, + &x, &y, draw)) + { + /* when drawing, if we pass v2d->cur.ymax, then quit */ + if(draw) { + break; /* past the y limits */ + } + } } } else { @@ -219,8 +246,10 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * int bool= 0; unsigned char bg[3] = {114, 114, 114}; - glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT); + if(draw) { + glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + } /* convert our display toggles into a flag compatible with BKE_report flags */ if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL; @@ -232,15 +261,39 @@ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList * for(report=reports->list.last; report; report=report->prev) { if(report->type & report_mask) { - console_report_color(fg, report->type); - if(!console_draw_string(report->message, strlen(report->message), console_width, sc->lheight+CONSOLE_LINE_MARGIN, fg, bool?bg:NULL, ar->winx, ar->winy, &x, &y)) - break; /* past the y limits */ - y+=CONSOLE_LINE_MARGIN; + if(draw) + console_report_color(fg, report->type); + + if(!console_draw_string( report->message, report->len, + console_width, sc->lheight, + fg, bool?bg:NULL, + ar->winx-CONSOLE_DRAW_MARGIN, v2d->cur.ymax, + &x, &y, draw)) + { + /* when drawing, if we pass v2d->cur.ymax, then quit */ + if(draw) { + break; /* past the y limits */ + } + } + bool = !(bool); } } } + y += sc->lheight*2; + + return y-y_orig; +} + +void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +{ + console_text_main__internal(sc, ar, reports, 1); +} + +int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +{ + return console_text_main__internal(sc, ar, reports, 0); } diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 55474844d87..2e5af9c5ffd 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -39,6 +39,7 @@ struct ReportList; /* console_draw.c */ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); +int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */ /* console_ops.c */ void console_history_free(SpaceConsole *sc, ConsoleLine *cl); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index d2cd4df6426..c82463eb768 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -287,8 +287,10 @@ static int insert_exec(const bContext *C, wmOperator *op) static int insert_invoke(const bContext *C, wmOperator *op, wmEvent *event) { - char str[2] = {event->ascii, '\0'}; - RNA_string_set(op->ptr, "text", str); + if(!RNA_property_is_set(op->ptr, "text")) { + char str[2] = {event->ascii, '\0'}; + RNA_string_set(op->ptr, "text", str); + } return insert_exec(C, op); } diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index ee80fe3d2d9..f5bccbce3f5 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -60,6 +60,13 @@ #include "console_intern.h" // own include +static void console_update_rect(bContext *C, ARegion *ar) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + View2D *v2d= &ar->v2d; + + UI_view2d_totRect_set(v2d, ar->winx-1, console_text_height(sc, ar, CTX_wm_reports(C))); +} /* ******************** default callbacks for console space ***************** */ @@ -89,12 +96,17 @@ static SpaceLink *console_new(const bContext *C) BLI_addtail(&sconsole->regionbase, ar); ar->regiontype= RGN_TYPE_WINDOW; - ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM_O); - ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); - ar->v2d.keeptot= V2D_KEEPTOT_STRICT; - ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; + ar->v2d.scroll |= (V2D_SCROLL_LEFT); + ar->v2d.align |= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */ + ar->v2d.keepofs |= V2D_LOCKOFS_X; + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS; + ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; + + /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ + //ar->v2d.keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM); + return (SpaceLink *)sconsole; } @@ -136,9 +148,9 @@ static SpaceLink *console_duplicate(SpaceLink *sl) static void console_main_area_init(wmWindowManager *wm, ARegion *ar) { ListBase *keymap; - - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); - + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); + /* own keymap */ keymap= WM_keymap_listbase(wm, "Console", SPACE_CONSOLE, 0); /* XXX weak? */ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); @@ -148,21 +160,10 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ SpaceConsole *sc= CTX_wm_space_console(C); - //View2D *v2d= &ar->v2d; + View2D *v2d= &ar->v2d; + View2DScrollers *scrollers; //float col[3]; - /* clear and setup matrix */ - //UI_GetThemeColor3fv(TH_BACK, col); - //glClearColor(col[0], col[1], col[2], 0.0); - glClearColor(0, 0, 0, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - - /* worlks best with no view2d matrix set */ - /*UI_view2d_view_ortho(C, v2d);*/ - - /* data... */ - /* add helper text, why not? */ if(sc->scrollback.first==NULL) { console_scrollback_add_str(C, " * Python Interactive Console *", 0); @@ -170,23 +171,34 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) console_scrollback_add_str(C, "Cursor: Left/Right Home/End", 0); console_scrollback_add_str(C, "Remove: Backspace/Delete", 0); console_scrollback_add_str(C, "Execute: Enter", 0); - console_scrollback_add_str(C, "Autocomplete: Tab", 0); + console_scrollback_add_str(C, "Autocomplete: Ctrl+Enter", 0); console_scrollback_add_str(C, "Ctrl +/- Wheel: Zoom", 0); console_scrollback_add_str(C, "Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.ui", 0); } + /* clear and setup matrix */ + //UI_GetThemeColor3fv(TH_BACK, col); + //glClearColor(col[0], col[1], col[2], 0.0); + glClearColor(0, 0, 0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + + console_update_rect(C, ar); + + /* worlks best with no view2d matrix set */ + UI_view2d_view_ortho(C, v2d); + + /* data... */ + console_history_verify(C); /* make sure we have some command line */ console_text_main(sc, ar, CTX_wm_reports(C)); /* reset view matrix */ - /* UI_view2d_view_restore(C); */ + UI_view2d_view_restore(C); /* scrollers */ - /* - scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_GRID_CLAMP); UI_view2d_scrollers_draw(C, v2d, scrollers); UI_view2d_scrollers_free(scrollers); - */ } void console_operatortypes(void) @@ -255,8 +267,11 @@ void console_keymap(struct wmWindowManager *wm) #ifndef DISABLE_PYTHON WM_keymap_add_item(keymap, "CONSOLE_OT_exec", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ - WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", TABKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ + //WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", TABKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", RETKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */ #endif + + RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", " "); /* fake tabs */ WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_PRESS, KM_ANY, 0); // last! } @@ -310,11 +325,14 @@ void ED_spacetype_console(void) /* regions: main window */ art= MEM_callocN(sizeof(ARegionType), "spacetype console region"); art->regionid = RGN_TYPE_WINDOW; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + art->init= console_main_area_init; art->draw= console_main_area_draw; + BLI_addhead(&sc->regiontypes, art); /* regions: header */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index ca50d8494c0..61931085707 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -511,7 +511,7 @@ typedef struct SpaceConsole { int type; /* console/report/..? */ int rpt_mask; /* which reports to display */ int flag, lheight; - + ListBase scrollback; /* ConsoleLine; output */ ListBase history; /* ConsoleLine; command history, current edited line is the first */ char prompt[8]; diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 9a60e3c92b8..69ab45d3389 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -52,6 +52,44 @@ struct wmTimer; struct StructRNA; struct PointerRNA; struct ReportList; +struct Report; + +typedef enum ReportType { + RPT_DEBUG = 1<<0, + RPT_INFO = 1<<1, + RPT_OPERATOR = 1<<2, + RPT_WARNING = 1<<3, + RPT_ERROR = 1<<4, + RPT_ERROR_INVALID_INPUT = 1<<5, + RPT_ERROR_INVALID_CONTEXT = 1<<6, + RPT_ERROR_OUT_OF_MEMORY = 1<<7 +} ReportType; + +#define RPT_DEBUG_ALL (RPT_DEBUG) +#define RPT_INFO_ALL (RPT_INFO) +#define RPT_OPERATOR_ALL (RPT_OPERATOR) +#define RPT_WARNING_ALL (RPT_WARNING) +#define RPT_ERROR_ALL (RPT_ERROR|RPT_ERROR_INVALID_INPUT|RPT_ERROR_INVALID_CONTEXT|RPT_ERROR_OUT_OF_MEMORY) + +enum ReportListFlags { + RPT_PRINT = 1, + RPT_STORE = 2, +}; +typedef struct Report { + struct Report *next, *prev; + int type; /* ReportType */ + int len; /* strlen(message), saves some time calculating the word wrap */ + char *typestr; + char *message; +} Report; +typedef struct ReportList { + ListBase list; + int printlevel; /* ReportType */ + int storelevel; /* ReportType */ + int flag, pad; +} ReportList; +/* reports need to be before wmWindowManager */ + /* windowmanager is saved, tag WMAN */ typedef struct wmWindowManager { @@ -68,7 +106,7 @@ typedef struct wmWindowManager { ListBase queue; /* refresh/redraw wmNotifier structs */ - struct ReportList *reports; /* information and error reports */ + struct ReportList reports; /* information and error reports */ ListBase jobs; /* threaded jobs manager */ @@ -258,6 +296,5 @@ typedef enum wmRadialControlMode { WM_RADIALCONTROL_ANGLE } wmRadialControlMode; - #endif /* DNA_WINDOWMANAGER_TYPES_H */ diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 6b3b128d34b..94200925a02 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -98,7 +98,7 @@ void wm_operator_register(bContext *C, wmOperator *op) /* Report the string representation of the operator */ buf = WM_operator_pystring(op); - BKE_report(wm->reports, RPT_OPERATOR, buf); + BKE_report(CTX_wm_reports(C), RPT_OPERATOR, buf); MEM_freeN(buf); /* so the console is redrawn */ diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 5938677afe7..4c9c3059e5b 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -104,15 +104,11 @@ static void sound_init_listener(void) static void wm_init_reports(bContext *C) { - wmWindowManager *wm= CTX_wm_manager(C); - wm->reports= MEM_callocN(sizeof(ReportList), "wmReportList"); - BKE_reports_init(wm->reports, RPT_STORE); + BKE_reports_init(CTX_wm_reports(C), RPT_STORE); } static void wm_free_reports(bContext *C) { - wmWindowManager *wm= CTX_wm_manager(C); - BKE_reports_clear(wm->reports); - MEM_freeN(wm->reports); + BKE_reports_clear(CTX_wm_reports(C)); } From ef28383ab93d72b49d9ec0a7f6229f3ee80cfa5d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Jul 2009 23:04:29 +0000 Subject: [PATCH 230/512] grr, py 2.5 2.6 and 3.x need different StringIO's --- release/ui/space_console.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 7d8ea3018c4..ee6abcb0a2d 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -71,14 +71,19 @@ def get_console(console_id): console = code.InteractiveConsole(namespace) - if sys.version.startswith('2'): - import cStringIO - stdout = cStringIO.BytesIO() # Py2x support - stderr = cStringIO.BytesIO() - else: + if sys.version.startswith('3'): import io stdout = io.StringIO() stderr = io.StringIO() + elif sys.version.startswith('2.6'): + import io + stdout = io.BytesIO() # Py2x support + stderr = io.BytesIO() + else: + import cStringIO + stdout = cStringIO.StringIO() + stderr = cStringIO.StringIO() + consoles[console_id]= namespace, console, stdout, stderr From c6c853d88a9c5ff12b7a56e4bdaca1757f160997 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 17 Jul 2009 00:17:37 +0000 Subject: [PATCH 231/512] 2.5 - 2 Tweaks * Comment re-formatting for keyframe drawing code * Removed redundant frame number button from buttons view header. --- .../editors/animation/keyframes_draw.c | 20 ++++++++++--------- .../editors/space_buttons/buttons_header.c | 4 ---- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 1db78beb2cb..64e008b92ca 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -91,14 +91,14 @@ #include "ED_screen.h" #include "ED_space_api.h" -/* *************************** Keyframe Drawing *************************** */ +/* *************************** Keyframe Processing *************************** */ +/* The equivalent of add_to_cfra_elem except this version + * makes ActKeyColumns - one of the two datatypes required + * for DopeSheet drawing. + */ static void add_bezt_to_keycolumnslist(ListBase *keys, BezTriple *bezt) { - /* The equivalent of add_to_cfra_elem except this version - * makes ActKeyColumns - one of the two datatypes required - * for action editor drawing. - */ ActKeyColumn *ak, *akn; if (ELEM(NULL, keys, bezt)) return; @@ -133,12 +133,12 @@ static void add_bezt_to_keycolumnslist(ListBase *keys, BezTriple *bezt) akn->sel = 0; } +/* The equivalent of add_to_cfra_elem except this version + * makes ActKeyBlocks - one of the two datatypes required + * for DopeSheet drawing. + */ static void add_bezt_to_keyblockslist(ListBase *blocks, FCurve *fcu, int index) { - /* The equivalent of add_to_cfra_elem except this version - * makes ActKeyBlocks - one of the two datatypes required - * for action editor drawing. - */ ActKeyBlock *ab, *abn; BezTriple *beztn=NULL, *prev=NULL; BezTriple *bezt; @@ -210,6 +210,8 @@ static void add_bezt_to_keyblockslist(ListBase *blocks, FCurve *fcu, int index) abn->modified = 1; } +/* *************************** Keyframe Drawing *************************** */ + /* helper function - find actkeycolumn that occurs on cframe */ static ActKeyColumn *cfra_find_actkeycolumn (ListBase *keys, float cframe) { diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 99cc85d9a52..ff906b7f539 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -192,10 +192,6 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) uiBlockEndAlign(block); - xco+=XIC; - uiDefButI(block, NUM, B_NEWFRAME, "", (xco+20),yco,60,YIC, &(CTX_data_scene(C)->r.cfra), MINAFRAMEF, MAXFRAMEF, 0, 0, "Displays Current Frame of animation. Click to change."); - xco+= 80; - /* always as last */ UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); From 70f6255433fcb1f5551199ef7a285a9ab80a3318 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Jul 2009 02:31:28 +0000 Subject: [PATCH 232/512] bpy rna Calling rna functions with invalid keywords, too many keywords and too many args would fail silently - now raise an error with invalid keywords and a list of valid ones, raise an error when too many args are given. - calling rna functions would alloc a ParameterList each time, changed to use a stack variable (2 pointers and an int). - store the number of parameters ParameterList - python exception types were wrong in many cases, (using attribute error rather then type error) - fixes to small errors in python UI scripts. --- release/ui/buttons_physics_fluid.py | 30 +++- release/ui/buttons_physics_softbody.py | 4 +- .../editors/space_console/space_console.c | 2 +- source/blender/makesrna/RNA_access.h | 3 +- source/blender/makesrna/RNA_types.h | 15 +- source/blender/makesrna/intern/rna_access.c | 40 ++--- .../makesrna/intern/rna_internal_types.h | 8 - source/blender/makesrna/intern/rna_ui.c | 64 ++++---- source/blender/python/intern/bpy_rna.c | 145 ++++++++++++++---- 9 files changed, 206 insertions(+), 105 deletions(-) diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 482dd231f14..cab5b0c632a 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -30,13 +30,19 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): row = split.row(align=True) row.itemR(md, "render", text="") row.itemR(md, "realtime", text="") + + fluid = md.settings + else: # add modifier split.item_enumO("OBJECT_OT_modifier_add", "type", "FLUID_SIMULATION", text="Add") split.itemL() - - if md: - fluid = md.settings + + fluid = None + + + if fluid: + col = layout.column(align=True) row = col.row() @@ -177,7 +183,11 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): def poll(self, context): md = context.fluid if md: - return (md.settings.type == 'DOMAIN') + settings = md.settings + if settings: + return (settings.type == 'DOMAIN') + + return False def draw(self, context): layout = self.layout @@ -217,7 +227,11 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): def poll(self, context): md = context.fluid if md: - return (md.settings.type == 'DOMAIN') + settings = md.settings + if settings: + return (settings.type == 'DOMAIN') + + return False def draw(self, context): layout = self.layout @@ -244,7 +258,11 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel): def poll(self, context): md = context.fluid if md: - return (md.settings.type == 'DOMAIN') + settings = md.settings + if settings: + return (settings.type == 'DOMAIN') + + return False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py index 774f7f67979..35cee713a87 100644 --- a/release/ui/buttons_physics_softbody.py +++ b/release/ui/buttons_physics_softbody.py @@ -136,8 +136,8 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel): col.itemR(softbody, "new_aero", text="Aero") subcol = col.column() - subcol.active = softbody.new_aero - subcol.itemR(softbody, "aero", text="Factor", enabled=softbody.new_aero) + subcol.enabled = softbody.new_aero + subcol.itemR(softbody, "aero", text="Factor") col.itemL(text="Collision:") col.itemR(softbody, "edge_collision", text="Edge") diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index f5bccbce3f5..4585eef2579 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -60,7 +60,7 @@ #include "console_intern.h" // own include -static void console_update_rect(bContext *C, ARegion *ar) +static void console_update_rect(const bContext *C, ARegion *ar) { SpaceConsole *sc= CTX_wm_space_console(C); View2D *v2d= &ar->v2d; diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index a04a09d4d11..9ad71f4e1d7 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -758,8 +758,9 @@ const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func); /* Utility */ -ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func); +ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, FunctionRNA *func); void RNA_parameter_list_free(ParameterList *parms); +int RNA_parameter_list_size(ParameterList *parms); void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter); void RNA_parameter_list_next(ParameterIterator *iter); diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index dc2a2a1a1de..bf4fa97b6fe 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -163,10 +163,19 @@ typedef struct PropertyRNA PropertyRNA; /* Parameter List */ -typedef struct ParameterList ParameterList; +typedef struct ParameterList { + /* storage for parameters */ + void *data; + + /* store the parameter count */ + int tot; + + /* function passed at creation time */ + struct FunctionRNA *func; +} ParameterList; typedef struct ParameterIterator { - ParameterList *parms; + struct ParameterList *parms; PointerRNA funcptr; void *data; int size, offset; @@ -209,7 +218,7 @@ typedef enum StructFlag { } StructFlag; typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function); -typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, struct ParameterList *list); +typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list); typedef void (*StructFreeFunc)(void *data); typedef struct StructRNA *(*StructRegisterFunc)(const struct bContext *C, struct ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 838592562b3..b55df31640f 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -1404,9 +1404,10 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA #if 0 else if(cprop->add){ if(!(cprop->add->flag & FUNC_USE_CONTEXT)) { /* XXX check for this somewhere else */ - ParameterList *params= RNA_parameter_list_create(ptr, cprop->add); - RNA_function_call(NULL, NULL, ptr, cprop->add, params); - RNA_parameter_list_free(params); + ParameterList params; + RNA_parameter_list_create(¶ms, ptr, cprop->add); + RNA_function_call(NULL, NULL, ptr, cprop->add, ¶ms); + RNA_parameter_list_free(¶ms); } } #endif @@ -1453,9 +1454,10 @@ void RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key) #if 0 else if(cprop->remove){ if(!(cprop->remove->flag & FUNC_USE_CONTEXT)) { /* XXX check for this somewhere else */ - ParameterList *params= RNA_parameter_list_create(ptr, cprop->remove); - RNA_function_call(NULL, NULL, ptr, cprop->remove, params); - RNA_parameter_list_free(params); + ParameterList params; + RNA_parameter_list_create(&ptr, cprop->remove); + RNA_function_call(NULL, NULL, ptr, cprop->remove, ¶ms); + RNA_parameter_list_free(¶ms); } } #endif @@ -2787,20 +2789,17 @@ const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func) /* Utility */ -ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func) +ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, FunctionRNA *func) { - ParameterList *parms; PropertyRNA *parm; - int tot; + int tot= 0; - parms= MEM_callocN(sizeof(ParameterList), "ParameterList"); - - parm= func->cont.properties.first; - for(tot= 0; parm; parm= parm->next) + for(parm= func->cont.properties.first; parm; parm= parm->next) tot+= rna_parameter_size(parm); parms->data= MEM_callocN(tot, "RNA_parameter_list_create"); parms->func= func; + parms->tot= tot; return parms; } @@ -2822,8 +2821,11 @@ void RNA_parameter_list_free(ParameterList *parms) parms->data= NULL; parms->func= NULL; +} - MEM_freeN(parms); +int RNA_parameter_list_size(ParameterList *parms) +{ + return parms->tot; } void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter) @@ -3141,7 +3143,7 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *ptr, FunctionRNA *func, const char *format, va_list args) { PointerRNA funcptr; - ParameterList *parms; + ParameterList parms; ParameterIterator iter; PropertyRNA *pret, *parm; PropertyType type; @@ -3157,8 +3159,8 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt pret= RNA_function_return(func); flen= strlen(format); - parms= RNA_parameter_list_create(ptr, func); - RNA_parameter_list_begin(parms, &iter); + RNA_parameter_list_create(&parms, ptr, func); + RNA_parameter_list_begin(&parms, &iter); for(i= 0, ofs= 0; iter.valid; RNA_parameter_list_next(&iter), i++) { parm= iter.parm; @@ -3240,7 +3242,7 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt } if (err==0) - err= RNA_function_call(C, reports, ptr, func, parms); + err= RNA_function_call(C, reports, ptr, func, &parms); /* XXX throw error when more parameters than those needed are passed or leave silent? */ if (err==0 && pret && ofspy_srna, NULL, &ptr); /* dummy */ func= RNA_struct_find_function(&ptr, "poll"); - list= RNA_parameter_list_create(&ptr, func); - RNA_parameter_set_lookup(list, "context", &C); - pt->py_call(&ptr, func, list); + RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "context", &C); + pt->py_call(&ptr, func, &list); - RNA_parameter_get_lookup(list, "visible", &ret); + RNA_parameter_get_lookup(&list, "visible", &ret); visible= *(int*)ret; - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); return visible; } @@ -99,33 +99,33 @@ static int panel_poll(const bContext *C, PanelType *pt) static void panel_draw(const bContext *C, Panel *pnl) { PointerRNA ptr; - ParameterList *list; + ParameterList list; FunctionRNA *func; RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr); func= RNA_struct_find_function(&ptr, "draw"); - list= RNA_parameter_list_create(&ptr, func); - RNA_parameter_set_lookup(list, "context", &C); - pnl->type->py_call(&ptr, func, list); + RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "context", &C); + pnl->type->py_call(&ptr, func, &list); - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); } static void panel_draw_header(const bContext *C, Panel *pnl) { PointerRNA ptr; - ParameterList *list; + ParameterList list; FunctionRNA *func; RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr); func= RNA_struct_find_function(&ptr, "draw_header"); - list= RNA_parameter_list_create(&ptr, func); - RNA_parameter_set_lookup(list, "context", &C); - pnl->type->py_call(&ptr, func, list); + RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "context", &C); + pnl->type->py_call(&ptr, func, &list); - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); } static void rna_Panel_unregister(const bContext *C, StructRNA *type) @@ -210,17 +210,17 @@ static StructRNA* rna_Panel_refine(struct PointerRNA *ptr) static void header_draw(const bContext *C, Header *hdr) { PointerRNA htr; - ParameterList *list; + ParameterList list; FunctionRNA *func; RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &htr); func= RNA_struct_find_function(&htr, "draw"); - list= RNA_parameter_list_create(&htr, func); - RNA_parameter_set_lookup(list, "context", &C); - hdr->type->py_call(&htr, func, list); + RNA_parameter_list_create(&list, &htr, func); + RNA_parameter_set_lookup(&list, "context", &C); + hdr->type->py_call(&htr, func, &list); - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); } static void rna_Header_unregister(const bContext *C, StructRNA *type) @@ -301,7 +301,7 @@ static StructRNA* rna_Header_refine(struct PointerRNA *htr) static int menu_poll(const bContext *C, MenuType *pt) { PointerRNA ptr; - ParameterList *list; + ParameterList list; FunctionRNA *func; void *ret; int visible; @@ -309,14 +309,14 @@ static int menu_poll(const bContext *C, MenuType *pt) RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */ func= RNA_struct_find_function(&ptr, "poll"); - list= RNA_parameter_list_create(&ptr, func); - RNA_parameter_set_lookup(list, "context", &C); - pt->py_call(&ptr, func, list); + RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "context", &C); + pt->py_call(&ptr, func, &list); - RNA_parameter_get_lookup(list, "visible", &ret); + RNA_parameter_get_lookup(&list, "visible", &ret); visible= *(int*)ret; - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); return visible; } @@ -324,17 +324,17 @@ static int menu_poll(const bContext *C, MenuType *pt) static void menu_draw(const bContext *C, Menu *hdr) { PointerRNA mtr; - ParameterList *list; + ParameterList list; FunctionRNA *func; RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &mtr); func= RNA_struct_find_function(&mtr, "draw"); - list= RNA_parameter_list_create(&mtr, func); - RNA_parameter_set_lookup(list, "context", &C); - hdr->type->py_call(&mtr, func, list); + RNA_parameter_list_create(&list, &mtr, func); + RNA_parameter_set_lookup(&list, "context", &C); + hdr->type->py_call(&mtr, func, &list); - RNA_parameter_list_free(list); + RNA_parameter_list_free(&list); } static void rna_Menu_unregister(const bContext *C, StructRNA *type) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 9ce9ec8e838..34269db7f94 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -367,7 +367,7 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) ret = pyrna_prop_CreatePyObject(ptr, prop); break; default: - PyErr_Format(PyExc_AttributeError, "RNA Error: unknown type \"%d\" (pyrna_prop_to_py)", type); + PyErr_Format(PyExc_TypeError, "RNA Error: unknown type \"%d\" (pyrna_prop_to_py)", type); ret = NULL; break; } @@ -392,7 +392,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefi if (strcmp(arg_name, "rna_type")==0) continue; if (kw==NULL) { - PyErr_Format( PyExc_AttributeError, "%.200s: no keywords, expected \"%.200s\"", error_prefix, arg_name ? arg_name : ""); + PyErr_Format( PyExc_TypeError, "%.200s: no keywords, expected \"%.200s\"", error_prefix, arg_name ? arg_name : ""); error_val= -1; break; } @@ -400,7 +400,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefi item= PyDict_GetItemString(kw, arg_name); if (item == NULL) { - PyErr_Format( PyExc_AttributeError, "%.200s: keyword \"%.200s\" missing", error_prefix, arg_name ? arg_name : ""); + PyErr_Format( PyExc_TypeError, "%.200s: keyword \"%.200s\" missing", error_prefix, arg_name ? arg_name : ""); error_val = -1; /* pyrna_py_to_prop sets the error */ break; } @@ -424,7 +424,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefi arg_name= NULL; } - PyErr_Format( PyExc_AttributeError, "%.200s: keyword \"%.200s\" unrecognized", error_prefix, arg_name ? arg_name : ""); + PyErr_Format( PyExc_TypeError, "%.200s: keyword \"%.200s\" unrecognized", error_prefix, arg_name ? arg_name : ""); error_val = -1; } @@ -482,7 +482,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v /* done getting the length */ if (py_len != len) { - PyErr_Format(PyExc_AttributeError, "python sequence length %d did not match the RNA array length %d.", py_len, len); + PyErr_Format(PyExc_TypeError, "python sequence length %d did not match the RNA array length %d.", py_len, len); return -1; } @@ -647,7 +647,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v else RNA_property_enum_set(ptr, prop, val); } else { char *enum_str= pyrna_enum_as_string(ptr, prop); - PyErr_Format(PyExc_AttributeError, "enum \"%.200s\" not found in (%.200s)", param, enum_str); + PyErr_Format(PyExc_TypeError, "enum \"%.200s\" not found in (%.200s)", param, enum_str); MEM_freeN(enum_str); return -1; } @@ -1807,7 +1807,7 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) PyTuple_SET_ITEM(ret, a, PyFloat_FromDouble( ((float*)data)[a] )); break; default: - PyErr_Format(PyExc_AttributeError, "RNA Error: unknown array type \"%d\" (pyrna_param_to_py)", type); + PyErr_Format(PyExc_TypeError, "RNA Error: unknown array type \"%d\" (pyrna_param_to_py)", type); ret = NULL; break; } @@ -1889,7 +1889,7 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) break; } default: - PyErr_Format(PyExc_AttributeError, "RNA Error: unknown type \"%d\" (pyrna_param_to_py)", type); + PyErr_Format(PyExc_TypeError, "RNA Error: unknown type \"%d\" (pyrna_param_to_py)", type); ret = NULL; break; } @@ -1904,25 +1904,31 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) FunctionRNA *self_func= PyCObject_AsVoidPtr(PyTuple_GET_ITEM(self, 1)); PointerRNA funcptr; - ParameterList *parms; + ParameterList parms; ParameterIterator iter; PropertyRNA *pret, *parm; PyObject *ret, *item; - int i, tlen, flag, err= 0; - const char *tid, *fid, *pid; + int i, args_len, parms_len, flag, err= 0, kw_tot= 0; + const char *parm_id; void *retdata= NULL; /* setup */ RNA_pointer_create(NULL, &RNA_Function, self_func, &funcptr); pret= RNA_function_return(self_func); - tlen= PyTuple_GET_SIZE(args); + args_len= PyTuple_GET_SIZE(args); - parms= RNA_parameter_list_create(self_ptr, self_func); - RNA_parameter_list_begin(parms, &iter); + RNA_parameter_list_create(&parms, self_ptr, self_func); + RNA_parameter_list_begin(&parms, &iter); + parms_len = RNA_parameter_list_size(&parms); + + if(args_len + (kw ? PyDict_Size(kw):0) > parms_len) { + PyErr_Format(PyExc_TypeError, "%.200s.%.200s(): takes at most %d arguments, got %d", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), parms_len, args_len); + err= -1; + } /* parse function parameters */ - for (i= 0; iter.valid; RNA_parameter_list_next(&iter)) { + for (i= 0; iter.valid && err==0; RNA_parameter_list_next(&iter)) { parm= iter.parm; if (parm==pret) { @@ -1930,27 +1936,27 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) continue; } - pid= RNA_property_identifier(parm); + parm_id= RNA_property_identifier(parm); flag= RNA_property_flag(parm); item= NULL; - if ((i < tlen) && (flag & PROP_REQUIRED)) { + if ((i < args_len) && (flag & PROP_REQUIRED)) { item= PyTuple_GET_ITEM(args, i); i++; } - else if (kw != NULL) - item= PyDict_GetItemString(kw, pid); /* borrow ref */ + else if (kw != NULL) { + item= PyDict_GetItemString(kw, parm_id); /* borrow ref */ + if(item) + kw_tot++; /* make sure invalid keywords are not given */ + } if (item==NULL) { if(flag & PROP_REQUIRED) { - tid= RNA_struct_identifier(self_ptr->type); - fid= RNA_function_identifier(self_func); - - PyErr_Format(PyExc_AttributeError, "%.200s.%.200s(): required parameter \"%.200s\" not specified", tid, fid, pid); + PyErr_Format(PyExc_TypeError, "%.200s.%.200s(): required parameter \"%.200s\" not specified", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), parm_id); err= -1; break; } - else + else /* PyDict_GetItemString wont raise an error */ continue; } @@ -1960,6 +1966,73 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) break; } + + /* Check if we gave args that dont exist in the function + * printing the error is slow but it should only happen when developing. + * the if below is quick, checking if it passed less keyword args then we gave */ + if(kw && (PyDict_Size(kw) > kw_tot)) { + PyObject *key, *value; + Py_ssize_t pos = 0; + + DynStr *bad_args= BLI_dynstr_new(); + DynStr *good_args= BLI_dynstr_new(); + + char *arg_name, *bad_args_str, *good_args_str; + int found= 0, first=1; + + while (PyDict_Next(kw, &pos, &key, &value)) { + + arg_name= _PyUnicode_AsString(key); + found= 0; + + if(arg_name==NULL) { /* unlikely the argname is not a string but ignore if it is*/ + PyErr_Clear(); + } + else { + /* Search for arg_name */ + RNA_parameter_list_begin(&parms, &iter); + for(; iter.valid; RNA_parameter_list_next(&iter)) { + parm= iter.parm; + if (strcmp(arg_name, RNA_property_identifier(parm))==0) { + found= 1; + break; + } + } + + RNA_parameter_list_end(&iter); + + if(!found) { + BLI_dynstr_appendf(bad_args, first ? "%s" : ", %s", arg_name); + first= 0; + } + } + } + + /* list good args */ + first= 1; + + RNA_parameter_list_begin(&parms, &iter); + for(; iter.valid; RNA_parameter_list_next(&iter)) { + parm= iter.parm; + BLI_dynstr_appendf(good_args, first ? "%s" : ", %s", RNA_property_identifier(parm)); + first= 0; + } + RNA_parameter_list_end(&iter); + + + bad_args_str= BLI_dynstr_get_cstring(bad_args); + good_args_str= BLI_dynstr_get_cstring(good_args); + + PyErr_Format(PyExc_TypeError, "%.200s.%.200s(): was called with invalid keyword arguments(s) (%s), expected (%s)", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), bad_args_str, good_args_str); + + BLI_dynstr_free(bad_args); + BLI_dynstr_free(good_args); + MEM_freeN(bad_args_str); + MEM_freeN(good_args_str); + + err= -1; + } + ret= NULL; if (err==0) { /* call function */ @@ -1967,20 +2040,26 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) bContext *C= BPy_GetContext(); BKE_reports_init(&reports, RPT_STORE); - RNA_function_call(C, &reports, self_ptr, self_func, parms); + RNA_function_call(C, &reports, self_ptr, self_func, &parms); err= (BPy_reports_to_error(&reports))? -1: 0; BKE_reports_clear(&reports); /* return value */ - if(err==0) - if(pret) + if(err==0) { + if(pret) { ret= pyrna_param_to_py(&funcptr, pret, retdata); + + /* possible there is an error in conversion */ + if(ret==NULL) + err= -1; + } + } } /* cleanup */ RNA_parameter_list_end(&iter); - RNA_parameter_list_free(parms); + RNA_parameter_list_free(&parms); if (ret) return ret; @@ -2387,7 +2466,7 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA * self, PyObject *pyna return ret; } else { /* Override the error */ - PyErr_Format(PyExc_AttributeError, "bpy.types.%.200s not a valid RNA_Struct", _PyUnicode_AsString(pyname)); + PyErr_Format(PyExc_AttributeError, "bpy.types.%.200s RNA_Struct does not exist", _PyUnicode_AsString(pyname)); return NULL; } } @@ -2629,7 +2708,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun if (base_class) { if (!PyObject_IsSubclass(py_class, base_class)) { PyObject *name= PyObject_GetAttrString(base_class, "__name__"); - PyErr_Format( PyExc_AttributeError, "expected %.200s subclass of class \"%.200s\"", class_type, name ? _PyUnicode_AsString(name):""); + PyErr_Format( PyExc_TypeError, "expected %.200s subclass of class \"%.200s\"", class_type, name ? _PyUnicode_AsString(name):""); Py_XDECREF(name); return -1; } @@ -2667,7 +2746,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun fitem= item; /* py 3.x */ if (PyFunction_Check(fitem)==0) { - PyErr_Format( PyExc_AttributeError, "expected %.200s class \"%.200s\" attribute to be a function", class_type, RNA_function_identifier(func)); + PyErr_Format( PyExc_TypeError, "expected %.200s class \"%.200s\" attribute to be a function", class_type, RNA_function_identifier(func)); return -1; } @@ -2795,12 +2874,12 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par } else { Py_DECREF(py_class_instance); - PyErr_Format(PyExc_AttributeError, "could not find function %.200s in %.200s to execute callback.", RNA_function_identifier(func), RNA_struct_identifier(ptr->type)); + PyErr_Format(PyExc_TypeError, "could not find function %.200s in %.200s to execute callback.", RNA_function_identifier(func), RNA_struct_identifier(ptr->type)); err= -1; } } else { - PyErr_Format(PyExc_AttributeError, "could not create instance of %.200s to call callback function %.200s.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func)); + PyErr_Format(PyExc_RuntimeError, "could not create instance of %.200s to call callback function %.200s.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func)); err= -1; } From 1ef729358517248888073be71ba5d3b6e3d723ee Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Fri, 17 Jul 2009 02:43:15 +0000 Subject: [PATCH 233/512] Colour Management - 1st stage: Linear Workflow This implements automatic linear workflow in Blender's renderer. With the new Colour Management option on in the Render buttons, all inputs to the renderer and compositor are converted to linear colour space before rendering, and gamma corrected afterwards. In essence, this makes all manual gamma correction with nodes, etc unnecessary, since it's done automatically through the pipeline. It's all explained much better in the notes/doc here, so please have a look: http://wiki.blender.org/index.php/Dev:Source/Blender/Architecture/Colour_Management And an example of the sort of difference it makes: http://mke3.net/blender/devel/rendering/b25_colormanagement_test01.jpg This also enables Colour Management in the default B.blend, and changes the default lamp falloff to inverse square, which is more correct, and much easier to use now it's all gamma corrected properly. Next step is to look into profiles/soft proofing for the compositor. Thanks to brecht for reviewing and fixing some oversights! --- release/datafiles/preview.blend | Bin 567892 -> 586384 bytes release/ui/buttons_scene.py | 1 + source/blender/blenkernel/BKE_colortools.h | 12 +- source/blender/blenkernel/intern/colortools.c | 85 + source/blender/blenkernel/intern/object.c | 4 +- source/blender/blenkernel/intern/scene.c | 1 + source/blender/blenlib/BLI_arithb.h | 1 - source/blender/blenlib/intern/arithb.c | 27 +- source/blender/editors/datafiles/B.blend.c | 5740 +-- .../blender/editors/datafiles/preview.blend.c | 35599 ++++++++-------- source/blender/editors/include/BIF_glutil.h | 3 +- .../blender/editors/preview/previewrender.c | 19 +- source/blender/editors/screen/glutil.c | 25 +- source/blender/editors/screen/screen_ops.c | 52 +- .../blender/editors/space_image/image_draw.c | 28 +- .../editors/space_image/image_render.c | 2 +- source/blender/imbuf/IMB_imbuf_types.h | 18 +- source/blender/imbuf/intern/divers.c | 54 +- source/blender/makesdna/DNA_scene_types.h | 9 +- source/blender/makesrna/intern/rna_scene.c | 5 + .../nodes/intern/CMP_nodes/CMP_image.c | 23 +- .../blender/render/intern/include/shading.h | 1 + .../render/intern/source/convertblender.c | 14 +- .../blender/render/intern/source/pipeline.c | 5 +- .../render/intern/source/pixelshading.c | 22 +- .../blender/render/intern/source/rayshade.c | 3 +- .../blender/render/intern/source/rendercore.c | 13 +- .../blender/render/intern/source/shadeinput.c | 55 +- source/blender/render/intern/source/sss.c | 6 +- source/blender/render/intern/source/strand.c | 4 +- source/blender/render/intern/source/texture.c | 21 + 31 files changed, 21352 insertions(+), 20500 deletions(-) diff --git a/release/datafiles/preview.blend b/release/datafiles/preview.blend index e6b5b30dbc402fc48b843835c517df2150261076..807d1b08c4d0c9aa4aaf89ba3de25c408b8c0a73 100644 GIT binary patch literal 586384 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⁡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
)>dSl>wF#5A8ls$l-w_T!8z&9Jq#Qoz6l0l{9 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 literal 567892 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 Rl_vy#nHgIeJv4NV{y!U~^_&0z delta 137156 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%0A$SmTq3GiB7jqPU@PEVvXE1ve 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 diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 0f8de7f607d..01b8224298b 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -233,7 +233,7 @@ char *ANIM_build_keyingsets_menu (ListBase *list, short for_edit) BLI_dynstr_append(pupds, " %x0|"); } else - BLI_dynstr_append(pupds, "%x0|"); + BLI_dynstr_append(pupds, "No Keying Set%x0|"); /* loop through keyingsets, adding them */ for (ks=list->first, i=1; ks; ks=ks->next, i++) { diff --git a/source/blender/editors/datafiles/blenderbuttons.c b/source/blender/editors/datafiles/blenderbuttons.c index d2668d21e52..d7916989cae 100644 --- a/source/blender/editors/datafiles/blenderbuttons.c +++ b/source/blender/editors/datafiles/blenderbuttons.c @@ -1,5501 +1,5530 @@ /* DataToC output of file */ -int datatoc_blenderbuttons_size= 175808; +int datatoc_blenderbuttons_size= 176743; char datatoc_blenderbuttons[]= { - -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6, -158, 0, 0, 10, 79,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0, -120,218,157, 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, - 33, 9, 16, 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7, -228, 33,162,142,131,163,136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, - 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115, -253, 35, 1, 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, - 92, 1,128,132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, - 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19, -101,136, 68, 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176, -183, 0,192,206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, - 87, 60,241, 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, - 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, - 14,174,206,206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, - 47,179, 26,128, 59, 6,128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112, -248,126, 60, 60, 69,161,144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, - 60,252,247,245,224,190,226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252, -183, 11,255,252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37, -210,255,100,226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, - 0, 0,242,187,111,193,212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, - 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, - 54,132, 66, 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, - 81,104,134,147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, - 1, 98,138, 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, - 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, - 67,185,168, 55, 26,132, 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218, -143, 62, 67,199, 48,192,232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, - 86,172, 3,187,137,245, 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, - 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, - 35,214, 18,143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, - 35,233, 44,169,155, 52, 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, - 33,242, 91, 10,157, 98, 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82, -221,168,161, 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, - 26,104, 23,104,247,105,175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21, -131,199,136,103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15, -153,111, 85, 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, - 84,143,169, 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103, -168,111, 84, 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33, -107, 13,171,134,117,129, 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, - 82,243,148,102, 63, 7,227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, - 49,101, 92,107,170,150,151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, - 74, 39, 92, 39, 71,103,143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68, -119,191,110,167,238,152,158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, - 6,179, 12, 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225, -132,145,185,209, 60,163,213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77, -238,154, 82, 77,185,166, 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155, -223,183, 96, 90,120, 90, 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, - 70,173,157,173, 37,214,187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, - 6,219,174,182,109,182,125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, - 29, 90, 29,126,115,180,114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, - 19,203, 41,196,105,157, 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200, -189,228, 74,116,245,113, 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41, -158, 89, 51,115,208,195,200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47, -145, 87,173,215,176,183,165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183, -200,183,203, 79,195,111,158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2, -251,248,122,124, 33,191,142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200, -236,144,173, 33,247,231,152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, - 63,142,112,136, 88, 26,209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, - 62,170, 46,106, 60,218, 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190, -223,252,237,243,135,226,157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, - 76,136, 78, 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, - 92, 42, 30, 78,242, 72, 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, - 58,158, 22,154,118, 32,109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101, -133,178,254,197,110,139,183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103, -101, 87,102,191,205,137,202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165, -134, 75, 87, 45, 29, 88,230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, - 79,171,237, 87,151,174,126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, - 93, 79, 88, 47, 89,223,181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202, -191,153,220,148,180,169,171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, - 13,223, 86,180,237,245,246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84, -164, 84,244, 84,250, 84, 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190, -219, 85, 1, 85, 77,213,102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, - 3,253, 7, 35, 14,182,215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, - 85,141,156,198,226, 35,112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47, -106, 66,154,242,154, 70,155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, - 74,243, 84,201,105,218,233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, - 15,111,239,186, 16,116,225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95, -109,234,116,234, 60,254,147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221, -244,189,121,241, 22,255,214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, - 39,238,173,188, 79,188, 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71, -247, 6,133,131,207,254,145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, - 67,207,100,207, 38,158, 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124, -165,253,234,192,235, 25,175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79, -228,124, 32,127, 40,255,104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, - 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, - 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,217, 6, 17, 13, 13, 30,217,121,242, 96, 0, 0, 32, 0, 73, 68, 65, 84,120,218, -236, 93,119,120, 20,213,226, 61,119,202,246, 77, 39,141, 4, 66, 71,186, 16, 64, 9, 96,144, 14,242, 80,121,162,128,160,226,243, - 61,236, 15,177,128, 29, 20,136,250, 20,108,136,242, 84,120, 32,250, 19, 21, 36, 54,154,116, 8, 16, 68, 8,197, 8, 18, 8, 37, -132, 68, 82,183,239,206,253,253,145,157,113,179,217, 50,193, 4, 81,238,249,190,249,182,204,204,153,219,231,220,115,239,157, 1, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,174,100,116, 97,156,140,147,113, 50, 78,198,201, 56, 25, - 39,227,188,210,192, 93,196, 57,180, 17,194, 65,189, 91,230,159,128,179,177,226,222,144,220,153, 94,190,231,255, 36,225,204,188, -140, 57,105, 35,240,210, 70, 40, 83,180, 17,202,125, 99,115,162,145,226, 78, 27, 33,223,159,255,147,132, 51,243, 50,228,244, 47, - 63, 13,193, 27,168, 76,210, 6, 14, 39,109,132,112, 54, 22, 39, 26, 41,238,180,145,242,190, 33,239, 77,151, 45,132,203, 64, 96, - 0, 0,241,225, 39,151, 49, 39, 26,137,179,161,195,183,177, 17, 56, 73, 35,148,129,231,189,188,155, 26, 80, 16,201,113,111,136, - 60,162,141,192,219,152,226,170, 33,203,125, 99,115,162,145, 56, 73, 3,167,231,198, 70,224,108,168,186, 68, 27,161, 46, 53, 70, -153,247, 47, 63, 13,193,235,207,217, 16,117,201,159,179, 33,202,253,165,224, 68, 35,113,146, 70, 72,211,198,184, 55, 93,182,224, - 46, 50,177, 26, 3, 20,192,128,203, 92, 8, 53,150,200,108,104, 23,167, 49, 57, 27, 50,143,158,111,132,222,204,128, 6,204, 35, - 18, 32,188, 13,201, 73, 26, 41,156, 13,145, 79,164, 17,234, 18,105,132,186, 68, 26,161,220, 95, 42,206,134,204,163,134,170, 75, -164,145,234,146,127,124,159,111, 96, 78,210, 72,225,108,136,124, 10,196, 73, 26,129,179, 49,226,158,121, 25,243, 94,246, 16, 46, -147,112, 52,134, 16, 66, 3, 58, 25,141,233,226, 52,150,211, 70, 26, 41, 93, 55, 53, 32,215,198, 70, 8,231,166, 6,236,209, 6, - 18,132,207, 93,230,117,154,213, 37, 86,151, 46,183,186, 68,131,116, 86,158,187,204,202,121, 67, 58, 66,161, 56,126,111, 62,209, - 32, 29, 53,218,128,225,108, 72,215,154, 92,162,250,116,217,129,187,140,194,210,208,243,123, 40, 26,199, 21,107,172,120, 55,100, - 56, 7,252, 73,226,222, 24,225,124,190,145,226,254,103, 73, 83, 86,151, 88, 93,186, 28,235,146,111,153,108,168,176, 54,116, 57, - 15,196,217,144,243,144, 26,178,140, 54,118,220,233,101,158,247,127, 10, 92,140,131,213, 88,189,227, 63, 3,103, 99,112, 55, 70, - 56, 55,253, 73,210,180, 49,194,249, 60, 26,118,200,145, 52, 66, 88, 27,115,152,176, 49,202,102, 99,150,119,114,153,135,243,207, -146,239,141, 17,206,134,170, 75,164, 17,234, 61,105,132,246,169, 49,203,102, 99,114, 54, 4,119, 99,132,179,177,242,158,129,129, -129,129,129,129,129,129,225, 74, 69, 80, 37,217,189,123,247,108,189, 94,223, 38,216,126,139,197,114,246,199, 31,127,188,158, 37, - 33, 3, 3,131, 10,112,248,109, 74,130,132,198, 25,226, 96, 96, 96, 96,184,108, 16,116,136, 80,163,209,180,218,188,121,115, 59, - 73,146,224,118,187,225,241,120,224,241,120,224,118,187,225,112, 56,240,247,191,255,189,222,195,139,221,186,117,219,204,113, 92, -139,250,156,227,241,120, 78,238,223,191,191, 95,176,253, 9, 9, 9,219, 1,180, 34,228, 55,173, 72, 8,129,252,219,247,127,142, - 83,166,156,157, 57,117,234, 84,143, 80,156,132,144, 86,190,124,254, 92, 1,120, 67,114,182,111,223,126,143, 32, 8,169,129,206, - 15,198, 45, 73,210, 47,121,121,121, 25,172,152, 94, 26,116,235,214,109, 51,207,243,245, 46,159, 63,254,248, 99,208,242,217,185, -115,231, 31, 56,142,107, 26, 40,143,131,148, 39,222,227,241,252,228,229, 12, 40, 64,146,146,146,182, 83, 74, 91,169, 44,151, 50, - 78,157, 58,117,170,103,184,122, 20, 42,156, 1,184, 67,114,250,138,171,148,148,148,172,248,248,248,123, 45, 22,139, 13, 0,229, - 56,142,202,220, 50,175,199,227, 57,127,228,200, 17,246,240, 66, 6, 6,134,191,182,192,146, 36,137,179,219,237,200,207,207, 7, -165,117,219,121,142,227, 60,245,189, 24,165,180,221,250,229, 75, 19, 12,241,137,240, 56, 29,208, 53, 73, 80,184,203, 14, 29,128, -199,233,132,228,114,162, 73,207,107,229, 48, 96,192,128, 1,124, 24,218,212,169, 83,167, 38, 68, 68, 68,192,102,179,193,102,179, -193,110,183,195,110,183,195,225,112,192,225,112,192,233,116,194,233,116,194,229,114,193,110,183,227,192,129, 3, 33,195, 78, 8, - 73,125,232,161,135, 20, 78,187,221, 14,155,205,166,112,217,237,118,133,211,225,112,192,110,183,227,224,193,131, 33, 57, 5, 65, - 72,221,187,119,111,130, 70,163, 1,165, 20,146, 36,129, 82, 90,107,243, 75, 43,244,237,219,215,201,138,232, 37, 69,187,149, 47, -205, 78,208,197, 53,129,228,114, 33,238,234,116, 37, 47, 78,175,255, 22,146,203, 5,201,229, 66,218,223,198, 40,255,103,102,102, -134, 43,159,105,159, 61, 59, 35, 90, 19, 17, 1,183,205,134,150,163,110, 86,118,228,189, 51, 15,212,229, 2,117, 59,209,245,145, -167, 1, 0, 37, 37, 37,214, 14, 29, 58,156, 65,232,213, 91,169,199,143, 31, 79,144,195,224, 47,212, 57,142,171,181,109,221,186, - 21, 19, 39, 78, 12, 23,247,212,167,158,122, 42, 65,174, 35,190,101,221,229,114, 41,245,199,237,118,195,229,114,193,225,112,224, -135, 31,126, 80,229, 92, 37, 39, 39,191,212,191,127,255,201,203,150, 45, 51,125,241,197, 23,166,150, 45, 91, 66,163,209,128,231, -121,240, 60, 15,142,227,192,243, 60,110,188,241, 70, 54, 55,131,129,129,225,175, 47,176,156, 78,231,241,161, 67,135, 82, 0,112, - 56, 28, 41, 90,173, 86,227, 39,192,154,102,100,100,252,228,127, 94,184,161, 67, 67,124, 34, 62,104, 25, 11, 0, 24,123,172, 84, -185, 41,172,184,174,187,114,204,248, 19,229, 53,199, 26, 12,224, 56,142,132, 17, 67, 48,155,205, 24, 58,116, 40,180, 90, 45,210, -211,211,161,209,104, 32,138, 98,208, 77, 13, 76, 38, 19,102,206,156, 41,139, 35,152,244, 58,220,215,255, 90,232, 9,197, 7, 63, - 30,129,221, 35, 65, 16, 4, 8,130, 0, 81, 20,235, 56, 82,129,160,209,104,112,224,192, 1,240, 60, 15, 65, 16,106,125,242, 60, -143,213,171, 87,227,150, 91,110, 1,207,243, 48, 26,141, 0,155, 12,120,201,161,139,107,130,207, 50,107,140,200,219, 11, 43,149, -255,191, 29,247, 55,229,251,164,211,213, 32,132, 64,163,209,168,203,247,136, 8,124,125,203, 8, 0,192,152,252, 98,165,204,236, -159, 55, 27,162, 86, 11, 65,212,160,203,212,167, 80, 82, 82, 98, 29, 51,102,204, 86,189, 94,255,157,138,206, 10, 78,158, 60,169, -112,137,162, 88,167,220,115, 28,135, 15, 63,252, 16, 39, 78,156, 80, 21,119,171,213,138, 57,115,230, 40,113, 11,196,235,251, 93, - 69,220,185,164,164,164, 23,251,247,239, 63,113,217,178,101, 49,132, 16, 44, 88,176, 0,130, 32,224,134, 27,110, 64, 92, 92, 28, -214,172, 89, 3,141, 70,131,199, 30,123,140, 21, 62, 6, 6,134, 43, 67, 96,253,248,227,143, 35,228,239,215, 92,115,205,225,173, - 91,183, 94,229, 99,229,195,237,118,107,220,110,119, 59,121,216,208,237,118,195,110,183, 99,252,248,241, 33,123,244, 30,167,163, -142, 64, 10, 38,156,212,194,225,112, 96,236,216,177,138,136, 9, 37,174,212,220, 24, 8, 33,176,219,237, 16, 4, 1,173,155,199, -227,233,177, 61,209,151,167,176,150, 2, 40,169,198,157,201, 2,246,165,182,195,155, 39, 75,113,162,162, 10,130,160,110,180, 84, -146,164, 90,130,202,255,251,194,133, 11, 49,110,220, 56,240, 60, 95,103, 8,137,225,210, 64,114,185,194,150,195,250,230,141,219, -102, 3, 0,240, 62,130, 92, 20, 69,104,245,122,240,162, 8, 65,171, 65, 73, 73,137,117,200,144, 33, 59, 13, 6,195,146,164,164, -164,211,167, 78,157, 10, 89, 62, 41,165, 16, 69, 17,130, 32, 4, 45,243, 31,126,248, 33,150, 46, 93,138,222,189,123,171, 42,243, - 14,135, 3, 26,141, 6,179,103,207,174,179,255,157,119,222,169, 35,176,194,128, 0,224, 18, 19, 19,239, 91,190,124,121,164,124, -253,184,184, 56,136,162,136,206,157, 59, 35, 34, 34, 2, 91,183,110,133,199,227, 81, 45, 86, 25, 24, 24,174, 76, 80, 74, 69, 0, - 87, 3,136, 7,224, 1, 80, 9, 32,218,231,144,243,222,207,120,249, 55, 33,100,119, 0,158, 94,222, 99,206, 19, 66,118,251,252, -118, 0,208, 6,248,191, 20,128,193,187,217, 1,108, 7,208,217,231, 58,242,121,240,191,174,172, 12, 50, 81,243,160,186, 1, 8, -240,240, 59,121,184,240,200,145, 35, 1,135, 11,253, 2, 31,178,149,212, 53, 73, 80,156,171, 79, 91,199, 41,255,143, 43, 40, 83, - 26,216,175,123,183,133,206,108, 66,207,231, 95, 9,155,232,242,141,161,184,184,184, 78,207,251, 98, 5, 22, 0,184, 92, 46, 24, - 12, 58,124,255,238,117, 56,251,139, 27,179,179, 11,177,106,215,113, 8,130,128, 81, 87,181,197,223,221, 64, 86,172, 30,255,114, -123,224,148,168,170, 27, 24,165,180,142,184,242, 21, 89,132, 16,229, 63,118,179,249, 99, 16,119,117,186,226, 92, 45,107, 22, 81, -199,181, 2,128, 85,221, 91, 64, 31, 97, 70,231,135,167,171, 42,159, 45, 71,221,172, 56, 87, 95,165,183,130,160,209, 64,212,105, -241,247, 31, 11, 1,212, 12, 11, 14,236,218,113, 83, 25,175, 93,124,199, 29,119,252,178,126,253,122,163,154,176,106, 52,154, 90, -130, 45,144,184, 18, 4, 1, 46, 63,209, 24,170, 83, 17, 76, 56,201,245,170,158, 14, 22, 44, 22,139, 99,213,170, 85,120,243,205, - 55, 17, 23, 23,135,161, 67,135, 34, 41, 41, 9, 43, 86,172, 0,165, 20, 15, 60,240, 0, 12, 6, 3, 12, 6, 3, 43,243, 12, 12, - 12,161,180,200,117, 51,102,204,232,153,149,149, 53,167, 79,159, 62, 31,111,223,190,125, 57, 33, 36,219, 71,123,140,242,182,101, -217,242,111, 74,105, 47, 95,145,229, 21,105,241,132,144,108,249,120,223,223,242, 39,165,116, 48, 0,173,252,123,198,140, 25,157, -179,178,178,230, 76,159, 62,253,201,185,115,231,106,102,204,152,209, 53, 43, 43,107,142,124,157, 64,225,240, 21, 88, 33,159, 2, -236,116, 58,143, 15, 30, 60, 88,213,138, 31,171,213, 90, 20, 70,128, 5,116, 6,124, 93, 1, 93,132, 25,134,136, 8, 16, 78, 93, -131,235,114,185, 32, 8, 2, 56,142,195,218,181,107, 97, 48, 24, 48,114,228,200,139, 30, 34,148, 69,155, 86,171,129, 16,205,225, -142,215,246,224,252, 5,139, 50, 36,184,174,160, 16,187, 12, 6, 60,221,177, 43,204, 85, 5,168,176, 59,126,151,131, 53,110,220, - 56,216,108, 54,112, 28,167,252,199,113, 92, 88,177,202,208,120, 8,182, 8,129, 16, 2,125,100, 4,244,102, 51,120,129, 87,197, - 69, 41,253, 77, 8,105,181, 16,117, 90, 8, 26,141, 34,174,134, 12, 25,178,179,140,215, 46, 62,125,250,244, 78, 0,122,181, 2, - 75,118,176, 66,137, 43, 65, 16,224,116, 58, 85,137, 23,187,221, 14,141,230,183,153, 0, 39, 79,158, 12, 41,176,194, 69, 27,128, - 68, 8,145, 90,181,106,165,156,147,152,152,136,232,232,104, 72,146, 4, 73,146,160,215,235, 97, 48, 24,106, 93,151,129,129,225, -138, 69, 40, 45,162,203,202,202,154,227, 43, 96,252, 5,141,175,112,242, 19, 81,190, 34,173,115,152,182, 63,219, 95, 52,201,215, - 37,132,100,207,157, 59,119, 84,152,112,156,247, 23, 88,114,131, 24, 16,190,195,133, 13,117,243, 10,117, 3, 51, 68, 69, 66,107, - 50,193, 59,253,138,134,227,114, 58,157,202,156,147,123,239,189, 55,104,175,222,119,110, 74, 56, 56, 28, 14,240, 28, 15,232, 90, - 66, 66,142,114,179, 82, 54,141, 6, 5,205,187,129, 20,157,134, 32,168,155,239, 47, 59, 88,178,136,122,224,129, 7,176,104,209, - 34,101, 98, 50, 0,240, 60,143,246,237,219,227,216,177, 99,172,170,253, 1,160,148,134, 29,182,214, 71, 70, 64,103, 54,131, 87, -225, 52,202,251,149, 57, 76,122, 29,120,141, 6,130,166,102, 88,112,244,232,209,155,202,202,202, 22,119,234,212,233,103,212, 60, -198,128,168,173, 63,129,202,249,226,197,139,107,137,171,250, 56, 88,114, 61,242, 69,160,225,194, 49, 99,198,168,117,176, 40, 33, -132,138,162,136,193,131, 7,163,107,215,174, 88,181,106, 21, 36, 73,194,253,247,223, 15,131,193,128,249,243,231,195,237,118, 35, - 43, 43,139, 57, 88, 12, 12, 12,161,238,249,214,233,211,167, 63, 73, 8,201,246, 58, 73,121, 33,132, 84,160,182,189,151,159, 72, - 59, 31,228,184, 81,129, 68,150,239,119, 25, 51,102,204,232,236, 31, 14, 95,199,204, 87, 96, 53,214,251,219,106,161,236,208, 1, -101, 66,187, 60, 44, 72, 8,193,183, 25, 87, 65,107, 54, 65,111, 54,163,223,202, 45, 74,175, 25, 47,190,170,202,193,146,133, 83, -105,105,105,216, 33, 66,181,174, 24,175, 17,177,211, 44,130,138,124,173, 27,150, 40,138,224, 4, 17, 5,241,237, 64,132, 53, 16, - 60,110, 85, 55, 7,217,201,240, 93, 61,117,199, 29,119,128,227, 56, 69,100,117,239,222, 29,126,121,194,112, 9,113,102,195,119, -248,230,182,154,186,234, 59, 44,152,221,187, 13,116, 17,102,232, 76, 38,100,174,222,174, 12,231, 98,254,123, 97, 57,143,188,255, - 54,242, 94,159, 11, 65, 20,113,243,222, 2,197,185,234,123, 85,219,157, 14, 83,228,226,147, 39, 79,238, 4,192,221,118,219,109, -209, 61,122,244, 80,101,139, 17, 66,106, 77, 60, 23, 4, 33,160,184, 18, 4, 1,110,183, 91, 85,220,157, 78,167, 42, 39, 73,118, -177,212, 52,148,114, 58, 69, 69, 69, 33, 34, 34, 66, 89, 65, 43, 59, 87,242,252, 77,181,245,146,129,129,225, 47,143, 96, 90,196, - 62,119,238,220,188,185,115,231, 42, 78,146,191,131, 21,228,190,123,131, 87, 76,197,203,226, 12,128, 61,208,252,172, 64,174,152, -191,240,242,253, 47, 43, 43,107,142,127, 56,124,135, 37, 3,206,206,238,214,173,219, 55, 70,163,177,165,218,212,168,207, 67, 71, - 61, 78,103,157,158, 56, 33, 4,122,179, 25,218, 8, 51,116,102,115, 80,151, 43,216,141, 70, 30, 34,228,121, 94,185,233, 44, 89, -178, 4,102,179, 25,119,221,117,215, 69, 77,114,175, 17, 88, 60,190,212,228, 3, 26,161,206, 77,139, 23, 69,156,140,106, 6, 78, - 20, 33,120,212, 57, 4,229,229,229,224,121, 30,207, 61,247, 28,178,178,178,148,101,244,190, 75,235,125, 93, 15,134, 75, 15,223, - 73,238,181, 92,213,136, 8,165,124,250,254, 31,110, 78, 34, 33, 4,240,184,107, 86, 11,234,180,138,184, 26, 61,122,244, 38,135, - 41,114,241, 85, 87, 93, 37, 59, 87,156,209,104, 12,187,106,214,183,110,200, 66,199, 95, 92,201, 46,169,252,221,229,114,169, 42, -243,178,192, 90,180,104, 81,200,206,136,124, 93,181,229,148,227, 56,108,222,188, 25,123,247,238,197,189,247,222, 11,131,193,128, - 55,222,120, 3,110,183, 27,179,102,205,130,193, 96,128, 86,171,101,133,143,129,129, 33, 20, 98,100,129,227, 21, 73,181,156, 37, -239,220,169, 81,190,191, 3, 57, 92, 94,199,105,115,152,246,240, 43,175, 48, 11, 8,217, 73,243, 59, 39,219, 95,156, 9,126, 78, - 9, 1, 0,173, 86,219,114,219,182,109,237, 36, 73,130,199,227, 65,168, 79,135,195,129, 91,111,189, 85,245, 67, 71, 37, 87,141, -192,226,252, 86,202,233, 34, 35,160, 53,255,118, 3,243,185,137,133,109,197,101, 7,203, 87, 96, 61,247,220,115, 16, 4, 1,139, - 22, 45, 2, 0, 60,250,232,163,245,118,176,168, 4,108,247,108, 68,211, 5,221, 64, 23,235,113,110,243, 97,136,162,136,164,222, - 67, 32,245,252, 59, 74,181,145, 48,121,231, 85,169, 25,118, 44, 45, 45,197,137, 19, 39, 64, 8,193, 35,143, 60, 18, 82, 92,173, - 93,187,150,205,193,250, 3, 5, 22,199,243,181,242,195,183,124,250,137,175,240,227,100,110, 55, 68,157,174,214,106,193,178,178, -178,197, 39, 79,158,204, 1, 64, 38, 78,156, 24,109, 52, 26,241,254,251,239, 91, 0,104, 86,174, 92,105, 8,199,233, 59,143,207, -223,185,242, 23, 88, 30, 79,248, 33,108,185, 83,161,198,237,173,143,192,146,203, 55, 33, 4, 30,143, 71,113,174, 92, 46,151,242, - 91,167,211,177,130,199,192,192, 80, 71,139,248,225,188,223, 60, 39,226,231, 52,157, 15, 36,172,124,135, 3,229,239,132, 16, 87, - 0, 94,135,223,208,161,255,255,242,103,233,220,185,115,191,151,157, 43,159,255,107,133, 35,168,131,197,113, 28,236,118, 59, 14, - 29, 58,164,182,135,170,250,161,163,113,233,215, 96,252,137,114, 16, 66,176,166,127, 39,232,205,102,104,204, 38,100,124,182, 81, -105,176, 11,178, 30,131,198,100, 70, 92,191, 33,170, 26,112,143,199, 83, 71, 96,149,149,149, 65, 20, 69,188,248,226,139,224, 56, - 14, 47,189,244, 18, 82, 82, 82,112,246,236, 89,100,102,102,170,186,217,112, 18, 7,253,157,177,208,255, 43, 2,220,189,109,208, -249,111,255, 66,121,101, 11,236,119,152,208,161, 58, 31, 49, 27,158,135, 83,114,171,122, 76, 3, 33, 4,110,183, 27,223,127,255, - 61, 68, 81,132,219,237, 86,110, 62,148, 82,229, 41,249,242, 67, 29, 95,122,233, 37, 86,213,254, 0, 52,187,225, 38,220,113,198, - 2, 0,248, 38,227, 42,232, 76, 38,104, 35,204,232,247,197,102,165,124,254, 50,103, 26, 52, 38, 51,162,123,245, 87,197,217,241, -254, 71,209,225,190,105, 40, 41, 41,177, 14,238,222,121,115, 57,175,251,176, 75,151, 46,202,156, 43,163,209, 8,189, 94, 79, 80, -251,117, 50, 97, 69, 11,199,113, 97,197,149,252, 93,109,167,194,127, 21,110, 40,129,165, 22, 28,199,225,174,187,238, 66,114,114, - 50,222,124,243,205, 90,206,213,147, 79, 62, 9,151,203,133,249,243,231,179,194,199,192,192, 16,170,221,219,173,246, 88, 74,105, - 47, 31, 49,181,251, 98,120,235,115,189, 96, 8,216,242,218,237,246,130, 65,131, 6, 33,200,190, 20,157, 78, 87,171,117,149, 31, - 58, 26, 96,168,176, 11,128, 3,126, 17,255,109, 88,208, 59, 89, 88,235, 55,236,162, 53, 71, 64, 52,153,193, 5,110,196,235,112, - 6,114,176,228,161,147,242,242,114,136,162,136, 55,223,124, 19,145,145,145,176,219,237,129,122,222, 1, 57,121,158,135,229,132, - 5,199,159,217, 15,157,233, 40,218, 15,137, 64,132,120, 12,109,183,172,132,219,237, 0,124,134, 12,213,112,182,111,223, 30,207, - 61,247, 92,157,199, 51, 4, 67,122,122,122, 88,206, 6, 0,227, 12, 34, 98,116, 17,102,232, 35, 34,130,150, 79, 33,240,179,155, -106,113,202,251,101,231,170, 74, 99,252,240,228,241,227, 57, 0,184,137, 19, 39, 70, 25,141, 70, 44, 92,184,208, 2,128,123,225, -133, 23,140,105,105,105,188,154,112,114, 28,135, 37, 75,150,212,153,115, 21, 76, 96,169, 9,167,219,237,174, 35,176,198,142, 29, - 91,231, 65,163, 33, 28,172, 58,225,148,231, 96, 53,105,210, 4, 70,163, 81,121,237,150, 94,175,135, 94,175, 87,158, 14, 31, 98, -168,149,149, 79,198,201, 56,175, 28,206, 75, 46,198, 26, 19, 1, 5,214,190,125,251,134, 7, 59, 33, 35, 35, 35,127,219,182,109, -109,125,223, 77,232,118,187, 53,118,187,189,221,141, 55,222, 24,182,171, 44, 73, 18,116, 58, 29, 40,165,184,250,233,172,154, 46, - 60,247,219,144, 32,165, 20,209,125, 7,131,240, 60, 60, 30, 9, 46,151, 43,236, 42, 66,155,205, 86,107, 2,122,160,229,235, 85, - 85, 85, 33,159,243,227,207,105,181, 90,107,205,235, 34, 30,138, 95,214,173,168,187,154,208,123, 29,181,208,235,245,181,134, 77, - 84,218,165, 12,151, 8,242, 3, 60, 41,165,232,252,208,244, 26,167,136,231,106,237,143,234,213, 31, 68, 16, 33,213,204, 91, 10, -183, 48,132,156, 63,127,222, 58,122,244,232, 77,148,210, 15,110,188,241,198,159, 80,243,176, 58,106, 54,155,117,162, 40, 74, 0, -126, 5, 64, 47, 92,184, 16,117,250,244,105,201,102,179, 53, 15, 23,206,205,155, 55,227,232,209,163,232,209,163,135,226,124,202, -155, 60,124,127, 49, 14, 86,160, 39,194, 7,123,146,123,125, 28,172,168,168, 40,104,181, 90,188,248,226,139,208,104, 52, 48, 24, -106, 70, 65,231,207,159,175,164, 57, 3, 3, 3,195, 95, 9,245,126, 97,179, 36, 73,124,176,225,195,112, 67,133, 30,143,231,212, - 53,215, 92, 83,223,235,157, 11,115, 67, 60,181,101,203, 22,141,255, 11,105, 3,189, 0,215,231,191,176,156,187,119,239,214,132, - 56, 63,208,247,115,245,137,187,154,249, 43,110,183,251, 52, 43,162,151, 14,110,183,251, 84,239,222,189, 3,239,124,238,165, 96, -249,122, 46,140,104,249,185, 93,187,118,103,204,102,243, 87,137,137,137,165,219,182,109,139,235,213,171, 87,156,239, 49,189,122, -245, 74,246, 59,205,129, 16, 43,122, 9, 33,167,238,184,227, 14, 77,152,242,232,255,253, 84,152, 78,197,169,188,188, 60, 77,160, -242, 30,236,147, 82,122, 74, 69,178,158, 24, 49, 98, 4, 23,168, 14, 5, 72,203,243,172, 20, 50, 48, 48, 92,177, 2,203,102,179, - 21, 14, 26, 52, 40,224,186,111,139,197,114, 50,212,185, 7, 15, 30,236,217,208, 17, 56,125,250,116,198,159,129,179, 49,226,206, -112,249,231,209,193,131, 7,123, 3, 64,121,121, 57, 66,189,254,166, 62, 40, 44, 44,108,240,242,217, 24,156, 0,112,232,208,161, - 62,172,100, 49, 48, 48, 48,129,165, 2,106, 31,199,192,192,192,192,192,192,192,192,112,165,130, 99, 73,192,192,192,192,192,192, -192,192,208,176, 32,168, 89, 9, 16, 8,245, 89, 29,208,229, 34,174,125,128,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 28, -103, 56,238,203,114,117,226,229,134, 46,140,147,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 26,216, 16, 33, 3, 3, 3, 3, - 3, 3, 3, 67, 3, 67, 96, 73,240,135,129, 7,224,105, 40, 50, 74,105, 52,128, 96, 47,116,115, 16, 66,202, 46,146, 87, 11, 64, -244,110, 0,224, 2,224, 34,132, 56, 88, 22, 50, 48,252,181,144,158,158, 62,153, 82, 58, 27, 53,111,129,122, 49, 55, 55,247, 45, -150, 42, 12, 12, 13, 44,176, 90,183,110,189,135,227,184,212, 64, 47, 32, 14,246, 92, 28,143,199,115,234,200,145, 35,106,151,186, - 11,201,201,201, 99, 77, 38,211,245, 60,207,247,245,158,191,173,186,186,250,251,179,103,207,126, 10,192,125, 49, 17,106,217,178, -101,164,205,102,187,149, 16, 50,193, 43, 16, 62,210,235,245,255,119,252,248,241,138,139, 76,163, 54, 73, 73, 73, 31,137,162,200, - 23, 22, 22, 94, 15, 0,205,154, 53,251,222,225,112,120,138,139,139, 39, 0, 56, 90, 79, 62, 78,163,209,100, 93,115,205, 53,253, -182,108,217,242, 63, 0,239, 52, 80, 94,234, 56,142, 59, 17,104,135, 36, 73,105, 23, 33,172, 52, 0,162,230,207,159, 31,187,116, -233,210,238,103,207,158,237, 10, 0,201,201,201,251, 39, 78,156,248, 3,165,244, 87, 0,229,132, 16, 39,171, 70,127,110,180,109, -219,118, 15,199,113,169,245,121,150,156,247, 21, 85,167, 14, 29, 58,212, 51, 24, 39,207,243,169, 97,158, 71, 87,231,187, 36, 73, -191, 28, 60,120, 48,224, 35, 35,218,181,107,183,131,231,249,150,225,194, 22, 40,156,193, 30,193,209,174, 93,187, 61, 60,207,167, -214,151, 83,146,164, 95,242,242,242, 50, 26,146,243, 82,135, 19, 0, 50, 51, 51,117,213,213,213, 31,153,205,230,110,213,213,213, -147, 37, 73,122,118,227,198,141,137, 28,199, 97,240,224,193,207,166,167,167, 31,215,233,116, 11,108, 54,219, 15,102,179,121,252, -166, 77,155,236,172,198, 48, 48,252,254, 70,247, 92, 85, 85, 21,149, 33, 73, 18,117,185, 92,212,110,183, 83,171,213, 74,171,171, -171,105,101,101, 37,173,168,168,160,229,229,229,180,180,180,148,118,238,220,217,255,161,139, 1,199,104, 83, 82, 82,186,180,111, -223, 62,255,173,183,222,178, 23, 22, 22, 82,167,211, 73, 93, 46, 23, 45, 44, 44,164,111,191,253,182,189,125,251,246,249, 41, 41, - 41,193,198,119, 3,253,207, 37, 39, 39, 15, 73, 78, 78, 94, 62,108,216, 48,199,250,245,235,169,221,110,167, 22,139,133,174, 94, -189,154, 14, 24, 48,192,145,156,156,188, 60, 57, 57,121, 8, 2, 15,139, 6,187, 86,247,150, 45, 91, 30, 61,117,234,148,103,203, -150, 45,206,184,184,184, 47,227,226,226,190, 44, 44, 44,244,156, 60,121, 82, 74, 77, 77, 61, 10,160,123, 61,194, 9, 0, 55, 79, -155, 54,173,224,248,241,227,150,204,204,204, 29, 62,255, 19,132,127,114,123,151, 64,206, 21,165, 52,145, 82,154,132,154,135, 83, -214,217, 40,165, 73,222, 99,162, 85,114,154,142, 29, 59,150,154,152,152,152,229,117,170,106,241, 17, 66, 28,137,137,137, 89,199, -142, 29, 75,165,148,154,234, 17,247,223, 3,198,217, 72,156, 87, 93,117, 85, 81,117,117, 53,165,148, 82,143,199, 67,157, 78, 39, -181,217,108,212, 98,177,208,170,170,170, 90,245, 92,222,202,202,202,104,151, 46, 93,206,133,224, 60,103,177, 88,106,181, 29, 14, -135,131,218,108, 54,106,181, 90,169,197, 98,161,213,213,213,181,182,170,170, 42,218,189,123,247,194, 16,156,103,229,112, 74,146, - 68,221,110, 55,117, 58,157,212,225,112, 80,187,221, 78,109, 54, 91,173, 77,254,175,119,239,222, 65,195,217,161, 67,135,115, 86, -171, 85, 53,167,188,245,232,209,227, 76, 67,113,202,255, 93,125,245,213, 69,161, 56,109, 54,219,197,132,179, 48, 84, 89, 74, 79, - 79,255,252,248,241,227,212,106,181,210, 33, 67,134,216, 31,121,228, 17,234,241,120,104,118,118, 54, 29, 59,118, 44,189,231,158, -123,104,105,105, 41,157, 49, 99, 6,237,209,163,199, 23,172, 30, 49,206, 70,230,188, 50, 28, 44,142,227, 96, 50,153,240,241,199, - 31, 7,124,253,140,255,247,180, 52,117, 38, 73, 98, 98, 98,207,212,212,212, 77, 43, 87,174, 52, 36, 36, 36, 40,255, 59,157, 78, - 68, 70, 70,226,174,187,238,210, 14, 30, 60,184,237,237,183,223,190,211,237,118,103,158, 59,119,110, 79, 40,190,164,164,164, 49, -113,113,113,111, 77,157, 58, 53,113,244,232,209,136,137,137,169,181,127,212,168, 81, 24, 57,114,164,230,151, 95,126, 25,247,233, -167,159,142,251,223,255,254, 87, 84, 85, 85,245, 96, 81, 81,209,231,161,120,141, 70,227,224,182,109,219,190,191,126,253,250,212, -232,232,104, 52,109,218,148,123,230,153,103,186,180,110,221,218,144,156,156,204,157, 57,115, 6,159,127,254,121,235,137, 19, 39, -174, 58,121,242,228,100,187,221,190, 94, 69,244,181,177,177,177,143,253,235, 95,255,138,171,172,172,116,239,221,187, 87,118,191, -180, 58,157,238,217,107,175,189,182,199,198,141, 27, 63, 1,176,248, 98,156, 43, 74,105, 5,126, 27,202,147,225,146,247,171,113, -178, 40,165,218,189,123,247,198,244,237,219,247, 11,187,221,222,227, 31,255,248,199,233, 87, 94,121, 69, 27, 25, 25, 25, 9,128, -148,149,149, 93,152, 57,115,166,231,141, 55,222,120,162, 83,167, 78,131,182,109,219,118, 51,165,148, 13, 25,254,201, 97, 52, 26, -177,122,245,234,128,175,153, 10, 84,231,163,163,163,195,190,141,192, 96, 48, 96,237,218,181,202,121,190,175,150, 10,244, 61, 58, - 58, 26,148,210,144,164,122,189, 30, 91,183,110, 85, 94, 3, 20,172, 93,146, 63,141, 70, 35, 8, 33, 92, 56,206, 77,155, 54,133, -229,146, 63,205,102, 51, 80, 51,196, 31, 54,156,225,226, 44,127, 55,153, 76, 97,211, 83,167,211, 41,156,190, 28,193,126,155, 76, - 38,132,235,180, 25, 12,134,110,137,137,137,200,201,201,193,243,207, 63,175,237,220,185, 51,242,243,243,193,113, 28, 38, 79,158, -140, 78,157, 58,161,168,168, 8,157, 58,117,194,214,173, 91,187,179,154,194,192,208, 0, 2, 75, 70,176, 6,214,255, 59, 16,240, - 53, 24,181,150, 90,166,165,165,233, 68, 81,252,108,245,234,213,134,184,184,223,222, 22,226,112, 56, 80, 89, 89,137,170,170, 42, - 84, 86, 86,194,100, 50, 97,193,130, 5,134, 9, 19, 38,124,166,211,233,218,157, 56,113,194, 30,140,147, 16, 50,111,223,190,125, -137,110,183, 27, 90,173, 54,168, 88,108,211,166, 13, 30,124,240, 65,244,235,215, 47,105,220,184,113,243, 0,124, 30,140, 19, 0, -146,147,147,223,222,182,109, 91,170, 86,171, 69,126,126, 62, 78,157, 58,133, 41, 83,166,164, 73,146,132,194,194, 66,228,231,231, -227,204,153, 51,120,239,189,247, 82, 39, 76,152,176,224,244,233,211,109, 67,197,221,139,123, 30,121,228,145,182, 49, 49, 49,220, - 43,175,188, 82, 94, 85, 85,245,158,247,255, 25,243,231,207, 31,159,153,153, 25,255,143,127,252,131,110,219,182,237, 99,212,188, - 46, 37,104,122,250,206,185,242, 14,231, 1,128,135, 82,122,216,239,156, 14, 62,251, 65, 41, 77, 4, 96, 39,132,148, 7,224, 36, - 0, 34,135, 15, 31, 62,205,110,183,247,216,178,101,203,209,126,253,250,165, 1, 56, 75, 41, 61, 15, 0, 49, 49, 49,166,215, 95, -127, 61,113,212,168, 81, 63, 13, 30, 60,184,199,240,225,195,167,157, 63,127,126, 54,165,180,132, 16, 66, 67,196,253,247,130,113, - 54, 18,167,119, 40, 9,130, 32, 96,196,136, 17, 32,132, 4,124,223,230,142, 29, 59, 48,104,208, 32,136,162,136,187,239,190, 91, - 53,231,176, 97,195,224,118,187,235,240,249, 11, 16,249, 29,157,161,226, 78, 41,173,245,142,208, 64,226,194,119, 11,192, 87,135, - 83,146,164,128, 92,193, 68,150,252,178,122, 53,113, 87, 43, 46,195,133,211,151, 83, 20, 69,100,100,100, 96,239,222,189, 33,197, - 86,184,112, 2, 64,117,117,245,157, 55,222,120,227,154, 41, 83,166,232, 1,160,164,164,164,214,139,232,143, 28, 57, 2,187,221, -142,101,203,150,193,110,183,223,203,234, 17,227,108,100,206, 80,157,127, 17,192,213, 0,226, 81, 51,127,185, 18, 64,180,247, 94, -169, 5, 80, 10,192,224,221,236, 0,170, 0, 52,241,158, 94,226,237,108,248,190,166,236,188,239, 75,161, 41,165,189,188,220,242, - 43,187,226,125,142,149,175,225,255,219,255,179, 22,183, 92,171,229,225,159, 76,223, 10, 45,191,132, 53,156,184,146, 27, 71, 21, - 9,244,192,140, 25, 51, 18,125,197,149,221,110, 71, 69, 69, 5, 42, 43, 43,149,207,252,252,124,104,181, 90,140, 29, 59, 54,145, - 82,250, 64, 24, 90, 13,207,243,216,187,119, 47, 86,174, 92,137,227,199,143,215, 57,224,216,177, 99,120,253,245,215,241,234,171, -175,162,162,162, 2, 0, 52,193,200,186,117,235,246,252,248,241,227,119, 14, 24, 48, 64, 39, 8, 2,246,237,219,135,118,237,218, - 97,251,246,237, 56,121,242, 36, 46, 92,184,128, 35, 71,142,160, 75,151, 46, 56,122,244, 40, 42, 42, 42,208,185,115,103, 93,143, - 30, 61,182,164,165,165, 61, 31, 42,156, 41, 41, 41, 79,254,235, 95,255,210,157, 61,123, 86, 90,178,100,201, 54, 0,219, 1, 76, -121,234,169,167, 38, 13, 27, 54, 44,254,240,225,195, 21,187,119,239,222, 19, 68, 92, 5,114,174, 78,114, 28,119,130, 82, 90, 65, - 41,181,162,102, 2,122,173,155,145,219,237,182, 91,173,214,242,210,210,210, 18,142,227, 78,112, 28,151, 15, 64, 23,140,115,226, -196,137,173, 75, 74, 74,238,255,247,191,255,125,188, 95,191,126,105,148,210, 35,148,210, 82,111,129,181,187,221,238,210,178,178, -178,159,250,246,237,155, 60,126,252,248,163, 37, 37, 37,247, 79,156, 56,177,117, 8, 78,134,203, 31,212,227,241, 64, 20, 69,108, -220,184, 17, 91,183,110,197,214,173, 91,177,109,219, 54,108,223,190, 29, 59,118,236,192,142, 29, 59, 32, 8, 2,182,111,223,142, -237,219,183,227,193, 7, 31, 12, 91,231, 61, 30, 15, 4, 65,192,166, 77,155,176,107,215, 46,101,219,189,123, 55,118,237,218, 5, -131,193,160, 70, 12,249,118,166, 20,206, 64,219,219,111,191,173,136, 67,185,109,226, 56, 46,164, 43,230, 47, 92,252, 5, 75, 90, -139, 22,117,246,133, 11,167, 44,218, 4, 65,192,127,255,251, 95,156, 62,125, 26,111,190,249, 38,142, 29, 59,134,151, 95,126, 25, -121,121,121,152, 53,107, 22,118,239,222,141, 25, 51,102, 96,203,150, 45,242,203,223,105, 56, 78, 89, 92, 57,157, 78, 37, 60, 71, -142, 28,193,156, 57,115,176,111,223, 62, 60,251,236,179,216,177, 99, 7, 30,123,236, 49,240,124, 72,147, 13,233,233,233,147, 9, - 33,159,182,111,223, 94, 55,112,224, 64, 8,130,128, 57,115,230, 72,207, 62,251,108,241, 83, 79, 61, 85,156,157,157, 77, 91,183, -110, 13,135,195,129,136,136, 8, 80, 74, 23,167,167,167, 63,192,170, 11, 67, 99,182, 69,254, 90,196, 7,215,205,152, 49, 99, 32, - 33, 36, 59, 35, 35, 99, 34,128,104, 66, 72, 54, 0,173,247, 51,110,198,140, 25,189, 9, 33,217, 51,102,204,232, 9,160, 9, 33, - 36,219,251,251,122, 0,113,242,111,239,241,241,126,226, 45,222,231,255,120,191, 99,181,129,126,251,127,250,115,251, 58, 88,196, - 27, 49,226,219, 64,214, 71, 96,133,107,112,205,102,243,200,225,195,135,107,124,197,149,175,115, 37,127, 86, 86, 86,226,167,159, -126, 66,151, 46, 93, 52,102,179,121, 36,128,255,132,181,226, 4, 1, 77,155, 54, 69, 73, 73, 9, 14, 28, 56,128,180,180, 52,184, - 92, 46,124,247,221,119, 40, 43, 43,131, 70,163,129, 70,163,129,195, 17, 90,187,116,232,208, 97,196,210,165, 75,123,254,239,127, -255,187, 32, 8, 2,142, 28, 57,130,143, 62,250, 8,148, 82, 52,105,210, 4, 22,139, 5,197,197,197,152, 55,111, 30,156, 78, 39, -204,102, 51, 82, 82, 82,244, 15, 60,240, 64,191,153, 51,103,138, 39, 78,156, 8, 38,178,174, 25, 51,102, 76,100, 68, 68, 4, 30, -126,248, 97,201,233,116,190, 10,224,218, 49, 99,198, 60,249,224,131, 15,198, 22, 20, 20, 56,238,185,231,158, 61, 78,167,115,158, -108, 30,250, 11,166, 0,130, 53,168,115,229,118,187,229, 52, 61, 94, 89, 89,137,132,132,132,230,148, 82, 77,152, 60,210,108,223, -190, 61, 3, 0,255,194, 11, 47,232, 41,165,231,124,195,224,116, 58,101, 78,119,121,121,121,241, 99,143, 61,230, 94,190,124, 57, -239, 61,231, 16, 0, 27,107, 31,254,124,144,133,139, 40,138, 24, 49, 98, 68, 45, 65,177,121,243,102, 12, 31, 62, 92,169,239, 26, -141, 70, 57, 46, 28,167,175, 43, 38, 59, 79, 50,239,247,223,127, 95,199,121, 81,217, 73, 83, 28,150, 64,194,199, 95,116,201, 29, - 69, 53, 98, 40,144,200,146,219, 22,127,103, 72, 77, 56, 69, 81,196,131, 15, 62, 8, 65, 16,240,216, 99,143, 65, 20, 69, 92,125, -245,213, 16, 4, 1,125,250,244,129, 32, 8,184,254,250,235, 85,119, 80,229,112,238,216,177, 3,233,233,233, 74,120,174,190,250, -106,244,234,213, 11,130, 32,160,127,255,254, 16, 4, 1, 67,135, 14, 13,203, 73, 41,125,118,227,198,141,137,102,179, 25, 63,253, -244, 19,120,158, 7, 33,164,116,239,222,189,137, 0,112,195, 13, 55,148,216,108,182, 56,155,205,134, 65,131, 6, 33, 35, 35, 35, -126,249,242,229,207, 0, 96, 43, 11, 25, 26,181, 73,242,215, 34,178, 1,144,149,149, 53,135, 82, 58, 42,216,137,242,126, 66, 72, -246,220,185,115, 71,121,203,121,157,223,178,203,228, 39,222, 58,251, 58, 80,242,121,190,215, 11,117,109,191,227,207,251, 11, 44, - 10, 96, 64,160, 70, 55,144, 85,238,255, 93, 77, 3, 97,179,217,174,150,221, 43,155,205, 86, 75, 80, 85, 85, 85,213, 18, 90, 14, -135, 3,173, 90,181,130,205,102,187,186,190, 55,139,228,228,100, 56,157, 78, 44, 90,180, 72, 17, 86,190, 34, 33, 20, 14, 30, 60, -120,124,231,206,157, 61,210,211,211, 99,190,248,226,139,243,131, 7, 15,142, 31, 54,108, 24,244,122, 61,108, 54, 27,220,110, 55, -174,185,230, 26,116,232,208, 1,197,197,197,248,230,155,111, 74,218,181,107,215, 36, 39, 39, 71, 42, 42, 42, 58, 17,130,122,208, -160, 65,131, 64, 8,193, 55,223,124,243, 43,128, 92,189, 94,255,249,156, 57,115,162,237,118,187, 52,105,210,164,194, 95,127,253, -245, 49, 0, 46,173, 86,251,159,235,174,187,238,154,245,235,215,127, 34, 73, 82,189, 27, 51,187,221, 94, 43,109, 43, 43, 43, 97, - 52, 26,213, 60, 18, 66, 44, 43, 43,235, 10, 0, 70,163, 49, 22, 62, 43, 36,173, 86,171,146, 71,222,252,177,197,198,198,154, 0, -192,123,142,200,218,133, 63, 47,228,155,247,198,141, 27,107,213,111,217,129,242,175,243, 90,173, 22,171, 87,175, 86,197,233, 43, -166, 84, 12,231,133,116,155,100,129, 37, 8, 2,222,123,175,102,132,253,225,135, 31, 86,206,247,191,134,154,246, 66, 22, 67,130, - 32,160,195,115, 18, 0, 39, 78,189,166,135, 40,214, 20,105,255, 48,123, 27, 83, 85,174,216,155,111,190,137, 81,163, 70, 33, 59, - 59, 59,228,231,200,145, 35, 85,133, 83, 16, 4,232,116,186, 90,194,111,223,190,125, 1,121, 23, 46, 92, 24,118, 78,155, 36, 73, -248,234,171,175,192,113, 92, 45,199,235,233,167,159,254,151,201,100, 50,111,218,180, 9,231,206,157, 67,117,117, 53,170,170,170, - 16, 19, 19, 19, 61,104,208,160,125, 69, 69, 69, 5,135, 14, 29,186,153,213, 28,134, 70,114,177, 6, 4,248,223, 58,125,250,244, - 39, 9, 33,217,211,167, 79,127,114,238,220,185,121,222,186,145,237, 87, 87,178,195,212,165,108,175, 24,218,237,173,203,218,130, - 51, 63, 0, 0, 32, 0, 73, 68, 65, 84,189,252,196,219,121, 66,200,110, 74,233, 13,193,206, 5,224,240, 19, 84,181,134, 8,101, -238,144, 14,150,255,220,132, 80,223,189, 22,119,184, 6, 87, 32,132,212, 17, 0,129, 28, 44,151,203,133,210,210, 82, 72,146,212, -160,207,234, 10, 39,176, 14, 28, 56,112,215,228,201,147,207, 68, 69, 69,117, 43, 45, 45, 61,171,211,233,250,111,222,188,185,153, -203,229, 66,100,100, 36, 34, 35, 35,241,245,215, 95, 35, 42, 42, 10,255,254,247,191, 79, 90,173,214,237, 38,147, 41,209,106,181, -254, 88, 84, 84,244,116, 80,229, 34,138,131,250,247,239,143,220,220, 92,148,149,149,109, 0,208,109,194,132, 9, 67,155, 53,107, - 70,102,207,158,109, 59,122,244,232, 91, 0,206,155, 76,166,255, 46, 93,186, 52,179, 71,143, 30,230, 73,147, 38, 97,211,166, 77, -239,215,199, 25,178, 88, 44,181,132,149,156,166, 17, 17, 17,170,158,185,229, 77,111, 74, 8,161,114,207,223, 87, 88,249, 8, 96, -202,243,188, 4,128, 54,116, 30, 49, 92,122, 7, 75,174,235,127,251,219,223,234, 76,110,215,104, 52, 88,179,102, 13,110,186,233, - 38,165,195,146,158,158,174,218,109, 26, 61,122,180, 34, 8,214,172, 89, 19, 84, 96,133, 27,210,242,119,155, 30,122,232, 33,136, -162,136,183,222,122, 11, 83,167, 78, 5,207,243,120,237,181,215,192,113, 28,158,121,230,153,122,139, 75, 81, 20,113,252,165,154, -207,212, 71, 42, 80,250, 78, 34, 0, 32, 34, 50,178, 38, 62,146,164,254, 14,225,141,123, 56,231,202, 87, 88,133, 27, 34,244,117, - 1,243,243,243,149,239,125,250,244,169,229, 92, 9,130, 16, 86,176,121,175, 55,107,224,192,129,179, 83, 83, 83, 19,166, 76,153, - 66, 4, 65, 64,207,158, 61,155, 12, 30, 60,184, 92, 16, 4,253,163,143, 62, 26,104, 42,133, 8,160, 91,199,142, 29, 77,172,230, - 48, 92, 98, 7,203, 62,119,238,220,188,185,115,231, 6,116,168,252,157,164, 80, 78,147, 44,172,188, 66, 40, 94, 22,109,168,153, -159,188, 59,220,185,240, 14, 9, 6,114,185,124,225,239, 96,205,244,111,120,212, 8, 44, 53,243, 39,188,174,200,254,146,146,146, - 62, 58,157, 14, 21, 21, 21,117,110,218,190,162,128,231,121, 20, 23, 23,195,104, 52,238,111,200,156, 11, 55, 68, 8,192,246,243, -207, 63, 79,243,249,221,107,236,216,177,203, 63,249,228,147, 86,235,214,173, 67, 78, 78, 14,154, 52,105,130, 57,115,230,252, 82, - 80, 80, 48, 30,192,238,226,226,226,176,215,109,221,186,117, 39,179,217,140,109,219,182, 1,192, 22, 0,119,222,119,223,125,196, -233,116, 98,193,130, 5, 22, 0,235,162,162,162, 62, 95,177, 98, 69,183,110,221,186,233,214,173, 91, 87,153,147,147,179, 81,165, -184,242, 80, 74, 3, 10,171,202,202, 74, 84, 87, 87,195,108, 54,171, 17, 88,238,200,200,200, 3,149,149,149,183, 90,173,214, 10, -157, 78, 23, 81, 81, 81, 97,247,117, 24,171,170,170, 80, 93, 93, 13, 65, 16,196,252,252,252, 51, 0, 90, 71, 70, 70, 30,192, 69, - 62,183,140,225,143, 7,199,113, 84, 22, 25,235,214,173, 11, 88,215, 69, 81,196,119,223,125, 87,171,190,127,243,205, 55, 97, 69, -155, 32, 8,202, 74,194,112, 14,150, 79,227, 26,218,102, 21, 69,240, 60,143,119,222,121, 7,148, 82,197,185,226, 56, 14,211,167, - 79,135, 78,167,195,139, 47,190,136,233,211,167,171,114,177,124, 93,177,150, 79, 88,127,107, 28,189,231, 58, 29,142, 26,151,158, -227,124, 69,150, 42,167, 45,220, 4,247,250,136, 96, 95,167, 77,167,211, 5,157,220, 30,224,102, 21, 16,185,185,185, 31,116,239, -222,253,104,124,124,252,218,140,140, 12,221,158, 61,123,240,224,131, 15, 18,187,221, 30,185,110,221, 58,229,186,129,210,171,186, -186, 90,207,106, 14, 67, 35, 58, 88, 51, 3,252, 31, 35, 11, 39,175, 24, 82, 91,119,178,125,143,151, 57,252, 69,145,215, 17,219, - 28,142, 43,208,185,193, 32, 4,171,132,254,141, 68, 56,161,165,166,247,105,181, 90,215,111,220,184,177,215, 77, 55,221, 36,132, - 26, 30,172,170,170, 66, 98, 98, 34,142, 29, 59,230,182, 90,173, 97, 31,127,224,241,168,127, 32,122, 56, 7, 43, 0,118,151,148, -148,184,157, 78, 39,218,182,109,139,148,148, 20, 88,173, 86,188,254,250,235,110, 0,187, 85,114,104, 76, 38, 19, 15, 0,229,229, -229, 64,205,106,135,118,237,218,181, 67,110,110, 46, 46, 92,184,176, 10,192,160,153, 51,103,118,191,246,218,107, 53,159,124,242, -137,229,222,123,239, 93,229,114,185,102,171,236,129, 59,220,110,119, 75,142,227,156,101,101,101,167,125,133, 85, 98, 98, 98,140, -217,108,230,138,139,139, 93,106,146,167,107,215,174,187, 78,157, 58,133, 23, 94,120,225,252,156, 57,115,218, 85, 86, 86, 94, 40, - 47, 47,119,203,194,170,162,162, 2, 86,171,149,139,143,143,215, 45, 92,184,208, 8, 0, 93,187,118,221, 5,128, 61,112,244,207, -220,162,249, 45,104, 9,244,168, 6,181,147,209,253,133,203,141, 55,222, 88,199, 17,147,183, 21, 43, 86,212,154,215, 20,110,232, - 77,230,124,251,237,183,241,240,195, 15, 67,167,211, 97,254,252,249,181,230, 96, 5,233, 17, 7,229,148, 69, 91,203, 39,172, 40, -122, 35, 22,162, 40, 34,238,222,115,181,134, 8, 3,196, 77,149, 16,156, 51,103, 78,131, 12, 17,250,138, 62,249,145, 56,139, 22, - 45,194,216,177, 99,177,101,203,150,139, 30, 34,108,217,178,229,210,215, 95,127, 93,119,232,208, 33, 84, 84, 84,224,252,249,243, -176,217,108, 40, 44, 44, 84,242, 48,136, 83,110, 96,181,134,161,145,220,171, 96, 56,239, 55,127,138,248, 14,215,133,248,244, 63, - 30, 62,255,249,242,158, 39,132,184, 2, 92,239,124, 0, 81,229,127, 13,223, 99,206, 7,114,176, 2,221,184, 85, 63,166,193, 59, - 65, 50,156, 16,152,247,220,115,207,221,223,175, 95,191,216,200,200, 72,156, 57,115, 38,160,131, 21, 25, 25, 9,167,211,137,141, - 27, 55, 86, 72,146, 52, 47, 76,134,184, 92, 46, 23, 18, 18, 18, 80, 82, 82, 2, 41,136,141,207,113, 28, 12, 6, 3,170,170,170, -128, 48,147,199, 3,221, 40, 92, 46, 23,156, 78, 39,156, 78, 39, 92, 46, 87,125, 11,141,193,251, 76, 26, 84, 87, 87, 3, 64,117, -211,166, 77, 91,235,245,122,121,213, 99, 62,128,129,195,134, 13, 19, 75, 75, 75,233, 61,247,220,179,131, 82,250, 96, 24, 87,200, -177,113,227,198, 22, 0, 96, 48, 24,242, 1,160,176,176,208, 85, 86, 86,134,170,170, 42,197, 33, 52, 24, 12,184,249,230,155,147, - 40,165,216,184,113, 99, 11,141, 70, 67, 67,136, 33,123,118,118,246,193,168,168,168,229, 89, 89, 89,227,111,184,225,134,188,174, - 93,187,182,172,170,170, 42,182, 88, 44, 86,171,213, 74, 5, 65,208,196,197,197,233,214,174, 93,123,116,199,142, 29, 67, 34, 35, - 35,151,103,103,103, 31, 68,205, 42, 67,134, 63, 99,139,230, 55,183, 41,144,168,170,207, 10, 58, 95,225, 34, 8, 2,190,251,238, -187,144, 46,142, 90, 78, 95,145, 49,109,218, 52,188,241,198, 27,117, 28,172,217,179,107,250, 36, 79, 61,245, 84,189, 28, 34, 65, - 16, 80,244, 70, 44,146, 30,250,181,142,131, 69,188,225,171,207, 16,161,124,254,172, 89,179, 32,138,162, 50,132, 55,100,200,144, - 90, 67,131,106,133,149, 47,103,113,113, 49, 4, 65, 64,108,108, 44,198,143, 31,143,161, 67,135,214,225, 83,203, 91, 88, 88,248, -195,171,175,190,218, 60, 37, 37, 5,159,124,242,137,195,100, 50,105, 7, 14, 28, 72,203,203,203, 73, 40, 7,203,106,181, 50, 7, -139,225, 82,183, 83,187, 47, 37,111, 67, 92, 79, 8,215,232,254,206,199, 52,116,129,207,179, 50, 78,156, 56, 81,158,148,148, 52, - 97,220,184,113, 95,188,243,206, 59,134,214,173, 91,227,200,145, 35,184,112,225, 2,156, 78, 39, 52, 26, 13,154, 54,109,138,170, -170, 42,124,246,217,103, 22,139,197, 50,161,168,168,168, 60, 20, 39, 33,228,169, 17, 35, 70, 44,124,250,233,167,245,157, 58,117, -194,133, 11, 23, 80, 85, 85,165,244,188, 8, 33,136,140,140,132,209,104,196,129, 3, 7,176, 99,199, 14, 43, 33,228,169, 80,156, -129,132,166, 44,172,100,161, 21,110,101,146, 31,167,201,104, 52,202, 61, 63, 0,112, 55,111,222, 60, 17,128, 44,176, 78,180,106, -213,234,233, 54,109,218,144,165, 75,151, 82, 74,233,186, 32,226, 74,225, 36,132, 92,160,148,150, 1, 72,116, 56, 28, 26, 0,168, -168,168,112,198,197,197, 37,232,116, 58, 73,167,211, 73,122,189, 94, 58,123,246,172,219,237,118,107, 0, 32, 51, 51,211, 1,224, -156,223, 92, 15, 95, 78,137, 82, 90,185, 96,193,130,231,239,188,243,206, 62,125,251,246,237,124,207, 61,247, 28,186,247,222,123, -145,146,146, 18, 83, 85, 85,101,203,207,207, 47,123,231,157,119,108,187,118,237, 26, 34,138,226,137, 5, 11, 22, 60, 15,160,146, - 16, 34,169, 77,207,139, 4,227,108, 36, 78,185, 60, 4, 18, 86,190,191, 85, 8,161, 90,225,148, 69,219,173,183,222,170,172, 62, -244,119,174,234,203, 9, 64, 89, 65,248,248,227,143,215, 10,223,211, 79, 63,173,182, 87,236, 27,119,197,109, 18, 4, 1,229,139, - 82,106,137,191,122,136,170, 58,156,130, 32,224,217,103,159, 85,237, 96, 5,152,131, 21, 52,156,153,153,153,168,174,174,134, 40, -138, 88,179,102, 77, 80, 7, 43, 92,122, 26, 12,134,241,171, 86,173,250, 72,167,211,117,117, 56, 28,119,151,148,148, 44,177, 88, - 44,205,203,202,202, 66, 58, 88, 54,155, 77,199,234, 17,227,196, 37,126, 22,214,159, 13, 33,187,120,110,183, 27,205,154, 53,171, -245,110, 43,121, 50, 59,207,243,202,202, 19, 53, 43, 8,101, 20, 21, 21,173, 1, 48,230,230,155,111, 94,118,231,157,119, 70,116, -232,208, 65, 76, 75, 75,131,213,106, 69, 65, 65, 1, 10, 10, 10,220, 27, 54,108,168,176, 88, 44,183,123,143, 13,137, 51,103,206, -252,207,237,118,127, 55,113,226,196,103,187,119,239, 62,101,234,212,169,124,171, 86,173, 80, 94, 94,142,152,152, 24,196,199,199, -163,160,160, 0,159,125,246,153,167,172,172,108,161,199,227,153, 85, 92, 92,124,190, 62,137,228,118,187,121,151,203,133,113,227, -198, 65,146, 36,204,159, 63, 31,110,183,155,175, 7,133,211,233,116, 82, 0,164,164,164, 4, 0, 44,178,224,250,249,231,159, 1, -224,100,139, 22, 45,204, 0,176,126,253,122,130,154,231, 99,169, 81,222,148, 82,170, 56, 89, 29, 58,116, 40,240,111, 20,101,231, - 74,118,189,194, 77,164, 37,132,216, 40,165,231,237,118,251,176, 71, 30,121,228,217, 69,139, 22,141, 95,180,104, 81,157,227, 34, - 35, 35,151,191,246,218,107,179,198,143, 31,127,158, 16,194, 30,207,240, 87,104, 12,252,220,170,250, 78, 1, 8,198,249,229,151, - 95,214,231,225,154, 33, 93, 49, 66, 72,192, 21,137,161,218, 32, 21,157,161,160, 15, 20,253, 61,174,160, 32, 8,120,229,149, 87, - 20,231,202,119,242,249,197, 56, 88, 50,103,108,108,108, 77,175,205,100,130, 36, 73, 24, 57,114,228, 69,243,122,223, 45, 56, 70, -254,157,158,158, 62,235,227,143, 63,158, 77, 41,141, 3, 32,248,166,129,154,116,100, 96, 96, 80, 33,176, 60, 30,207,169, 1, 3, - 6,192,183,247, 20,238,101,173,110,183,251,148, 74,145,245, 93,203,150, 45, 91, 45, 90,180,232, 97,147,201, 52,216,102,179,117, - 5, 0,189, 94,191,191,186,186,122, 29,199,113,175, 23, 21, 21,169,126, 57,179, 87, 48, 61,192,113,220,252,137, 19, 39,206,206, -200,200,184,229,158,123,238, 33,130, 32,224,211, 79, 63,165,167, 79,159, 94,193,113,220, 83,103,207,158, 61,118, 49,137,100, 52, - 26,127, 90,177, 98, 69,235, 47,191,252, 18, 46,151, 11, 11, 23, 46,132, 78,167,251,169, 30, 20,231, 55,108,216,176,172,111,223, -190,227,119,236,216,177, 28,192,129, 45, 91,182,124,116,221,117,215, 77,216,190,125,251,255, 1, 56,180,113,227,198,143, 50, 50, - 50, 38,236,218,181,235,115, 0, 63,214,163,209, 85,156, 44,183, 59,240,136, 98, 16,231, 42, 20,103, 5,165,212, 57,121,242,228, - 71,110,185,229,150, 69,185,185,185,215,200,143,111,136,142,142,222,159,158,158,158,179, 98,197,138, 35, 94,231,138,137,171, 63, - 57,228, 9,233, 49, 49, 49,224, 56, 78,217,228,167,121,215, 87, 8,201,156,148, 82,196,196,196, 4,236,152,133,224, 12,169,106, - 40,165, 48,155,205, 10,167,202,213,203, 97,109, 40,179,217, 92, 43,140, 42, 64,195,197,221, 63,156,106,210, 44, 28,167,201,100, -130,211,233, 84,205, 9, 21,139, 6,124,145,155,155,251, 1,128, 15,218,180,105,243, 51,128, 54, 76, 84, 49, 48, 52,130,192, 58, -114,228, 72,207,198,188,240,241,227,199, 43, 0,204,242,110, 13,130,211,167, 79, 31, 3,112,235,214,173, 91,255,179,125,251,246, -103,188,141,235, 11,225,222,103, 24, 14, 63,254,248,227, 77,162, 40, 46, 88,188,120,113, 6,165, 20, 81, 81, 81,219,143, 30, 61, -122, 95,125, 56, 60, 30,207,148, 29, 59,118, 76,133,119, 85,160,195,225,152,178,117,235,214, 71, 1, 84,203,251,119,238,220,169, -252,174,231,205,140, 82, 74, 29,148,210,228, 32,135, 56,212,138, 43, 63, 39,203,177, 98,197,138, 42, 0,251,240,219,115,174, 92, -222,205,238, 55, 44,200,240, 39,133,219,237, 62, 61, 96,192, 0, 33, 92, 7, 42,192,121,167, 66,117,208,250,247,239,143,139,224, - 60, 29, 34,168, 39, 50, 50, 50, 56,181, 92, 50, 92, 46, 87,113, 8,241,117,170, 79,159, 62, 1,195, 25, 38,205, 66,198,189, 79, -159, 62,245, 10,163, 55, 44,167, 27,154, 51, 76,122, 6,133,213,106,189, 16, 31, 31, 95,101,179,217, 68,187,221, 46,250, 59,246, - 6,131,225,188,213,106,101,149,135,129,225, 15, 4,123,211, 56,227,100,156,140,147,113, 50, 78,198,201, 56,175, 56,112, 44, 9, - 24, 24, 24, 24, 24, 24, 24, 24, 26, 22, 36,132, 10,173,207,234,128,139, 81,178, 7, 24, 39,227,100,156,140,147,113, 50, 78,198, -121,197,113,134,227,102,171, 19, 27, 73,120, 49, 78,198,201, 56, 25, 39,227,100,156,140,243,202,227,252, 75,129, 13, 17, 50, 48, - 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192,192,192, 4, 22, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, - 12, 12, 12, 12, 12,191, 3, 36, 37, 37, 37, 51, 57, 57,185,207,149,154, 0, 2, 43, 3, 12, 12, 12, 12, 12, 12, 12, 13,129,102, -205,154, 69,123, 60,158, 59, 1,220,215,186,117,235,214, 0, 64, 8, 57, 64, 41,125,221, 96, 48,124,116,236,216, 49,199, 21,163, - 48, 89,113, 96, 96, 96, 96, 96, 96, 96,248, 61, 72, 78, 78,238, 14,224, 62,131,193,112,251, 53,215, 92,163, 29, 56,112, 32, 98, - 98, 98,224,118,187,113,246,236, 89,108,216,176, 1,251,246,237,251,213,229,114, 45,112,185, 92, 11, 74, 74, 74,206, 93, 73, 2, -107,147,247, 51,147, 21, 21, 6, 6, 6, 6, 6, 6, 6, 53, 72, 74, 74,122,117,248,240,225,143,196,196,196,160,109,219,182, 72, - 74, 74,130,221,110,135,213,106, 5,165, 20,130, 32,128, 82,138,202,202, 74,236,217,179, 7, 57, 57, 57,238,138,138,138,229,132, -144,215,207,158, 61,251,131, 31,221, 95, 70,139,200, 2,139, 2, 24,224, 23, 57, 6, 6, 6, 6, 6, 6, 6,134,144, 72, 78, 78, - 62,183,126,253,250, 4,143,199,131,146,146, 18,216,237,118, 88, 44, 22, 69, 96,241, 60, 15, 74, 41,220,110, 55, 0, 64,146, 36, - 28, 58,116, 8, 59,118,236, 64, 97, 97,225,107, 69, 69, 69,211,254,138, 90,132,243, 83,141, 76, 92, 49, 48, 48, 48, 48, 48, 48, -212, 11,118,187, 29, 75,151, 46, 69, 73, 73, 9,154, 53,107,134,148,148, 20, 68, 69, 69, 65,175,215, 3,128, 34,174, 0,128,227, - 56,116,238,220, 25, 19, 38, 76, 0, 33,100,130, 31,213, 95, 70,139,176, 73,238, 12, 12, 12, 12, 12, 12, 12,191, 7, 46,167,211, -137,158, 61,123,226,248,241,227,200,205,205, 69,143, 30, 61,208,177, 99, 71,148,148,148,224,204,153, 51,181, 14,222,181,107, 23, -246,238,221,139,235,174,187,238, 47,157, 40,188,247,147, 0,120, 30,192,157, 0, 22,179,178,194,192,192,192,192,192,192,160, 6, - 17, 17, 17,191,110,218,180,105,104, 90, 90,154,152,158,158, 14,157, 78,135,147, 39, 79, 34, 39, 39, 7,102,179, 25, 93,187,118, -133,205,102,195,230,205,155,177,122,245,106,148,149,149,161, 69,139, 22,192,187,239,225,231,215,204,229, 85, 85, 85,243,254,138, - 90,196,119,146,123,166,247,115, 19, 43, 46, 12, 12, 12, 12, 12, 12, 12,106,145,156,156, 28, 71, 8,121,170,105,211,166,247,223, -126,251,237, 98,155, 54,109,112,234,212, 41,148,148,148,224,194,133, 11,216,185,115, 39, 0, 32, 37, 37, 5, 41, 41, 41, 40, 40, - 40,192,129, 3, 7,172,118,187,253,222, 51,103,206,252,239,175,168, 69,216, 99, 26, 24, 24, 24, 24, 24, 24, 24, 26, 74,104, 53, - 3, 48,179, 77,155, 54,147,198,142, 29,203, 53,109,218, 20,167, 79,159,198,134, 13, 27,208,186,117,107, 20, 23, 23, 99,207,158, - 61,158,138,138,138,133, 30,143,103, 86,113,113,241,121,150,106, 23, 7,246,166,113,198,201, 56, 25, 39,227,100,156,140,243, 10, -227, 76, 76, 76,236,144,156,156,188,114,232,208,161,244,157,119,222,161, 15, 60,240, 0,237,209,163,135,148,156,156,252,105, 74, - 74, 74,235, 43, 65, 0,177, 73,238, 12, 12, 12, 12, 12, 12, 12, 13,138,115,231,206, 29, 6,112, 19, 33,228,154,188,188,188, 39, - 1, 64,146,164, 23,206,157, 59,183,231, 74, 73, 3, 38,176, 24, 24, 24, 24, 24, 24, 24, 26, 5,103,206,156,201, 1,240,183, 43, - 49,238,236,101,207, 12, 12, 12, 12, 12, 12, 12, 12, 76, 96, 49, 48, 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192, -192,112, 69,129, 32,248, 74,128, 3,245,224,185,152, 21, 10, 7, 24, 39,227,100,156,140,147,113, 50, 78,198,121,197,113,134,227, - 62,128, 43, 8, 23,251,188, 44,182,132,149,113, 50, 78,198,201, 56,255, 60,156,164,129, 56,137,119,227,188, 27,169, 39,247,165, - 10,231,159, 37,238, 87, 10,231, 95, 10,225, 86, 17,250, 38,146,228,221,104, 3, 9, 54,174, 1,249, 24, 26, 71, 84,203, 21,131, -178,124, 98, 96,248, 75,163, 33,219,122,185,237,224,125, 56, 61,222, 13,191,179, 45,105,140,123,210,229, 30,247, 43,153,243, 47, - 41,176, 8, 0, 18, 31, 31,191, 38, 33, 33,225,250,146,146, 18, 9, 0, 8, 33,224, 56, 14, 28,199, 65, 16, 4,107, 65, 65, 65, -100,125, 47,152,144,144,240,126,124,124,252,157,165,165,165,146,204, 69, 8, 1,207,243,224,121,222,122,236,216,177,200, 63, 58, - 81,122,244,232,113,193,225,112,152,253,255,215,106,181,182,189,123,247, 70, 92, 9,229,162, 93,187,118,183, 25,141, 70, 67,144, -253,244,135, 31,126, 88,164,150,172, 69,139, 22,187, 12, 6, 67,180, 32, 8,224,121, 30,130, 32,160,186,186,186,236,240,225,195, -189,189,251,183, 25, 12,134, 56,158,231,229,178, 5,155,205, 86,122,232,208,161,190,236,190, 87, 23,153,153,153, 2,234,255,136, - 21,247,166, 77,155,220,151, 42,140,148, 82,206,145, 27,209,134,184,173,221, 8, 71,163,168, 68,202,169, 96,248, 81,155, 94,121, - 84, 85, 75, 77,136,244, 7, 39,115,115, 0,110, 0,103,234, 29,247, 0, 61,118, 1, 24,238, 1,198,121,127,218, 56,160,148, 0, -249,113,192,103,231, 0,171, 95,227,123, 41,111, 68, 4, 0, 73, 77, 77,125, 61, 49, 49,241,174,202,202, 74, 11,207,243, 32,132, - 80, 66,136,156, 23,190,249, 2, 73,146, 78, 29, 60,120,176,103,152,155,172,216,188,121,243,215,226,227,227,239,176, 88, 44, 22, - 66,136,194, 41,111,190,220, 30,143,231, 84, 94, 94, 94,207, 75, 24,206, 63, 36,238,190, 92,242,111, 73,146, 66,197, 93,225, 76, - 77, 77,125, 45, 49, 49,241,142,170,170, 42,139,247,190,249,187,195,121,153,115,254,101, 5, 22,151,144,144,176,170,119,239,222, - 3,190,252,242, 75,238,240,225,195, 92,135, 14, 29,224,241,120, 32, 73, 18, 40,165, 72, 79, 79, 55,214,247, 98,137,137,137, 75, -122,246,236, 57,110,245,234,213,220,170, 85,171,184, 94,189,122,129, 16, 2,143,199, 3,143,199,131, 65,131, 6, 25,126,103,124, -204,130, 32, 76,213,106,181,153,110,183,187, 35, 0,136,162,120,200,110,183,111,114,187,221,243, 0, 84,169, 33,113,185, 92,198, -188,188,188, 58,105,211,187,119,111,237,197, 6,172,109,219,182,219, 57,142,107,229, 91,200,194,125, 82, 74,127, 57,120,240, 96, - 70, 48,206,246,237,219,135,229,244,255, 79,146,164, 95,242,242,242, 50, 66,149,137,182,109,219,142,235,212,169,147,254,211, 79, - 63, 69, 97, 97, 33, 76, 38, 19, 36, 73,130,199,227,129,203,229,194, 77, 55,221, 84, 47,203,215, 96, 48, 68,110,216,176,161, 77, - 66, 66, 2,138,139,139, 81, 82, 82,130, 41, 83,166,228,251,236,143,251,254,251,239,219,197,198,198,194, 98,177,160,188,188, 28, - 19, 38, 76,248,211, 87,174, 33,253, 91,189, 72,128, 88,249,183, 71,194,175,235,183,253,242,244,239,229,181,219,237,103, 61, 30, - 79,140,159, 32, 9,121, 14,207,243, 23, 0,196,135,211,194, 0,254,198,243,124, 91, 81, 20,175,162,148,182,112,187,221,137, 0, -160,209,104,206,241, 60, 95,224,114,185,142, 56, 28,142,159, 1,172, 6, 80, 16,140,200,145, 27,209,198, 99,183,220, 82,109,151, - 70, 74, 20, 73, 28, 65,145, 73,103,249,218,145, 27,177, 66,173,200,250, 3,209,178,105,211,166,175, 0,192,153, 51,103, 30, 3, -112,252,247, 18,122,128,113,148,210, 40, 0, 40, 47, 47,143, 42, 44, 44, 76, 90,189,122,117,231, 57,115,230, 12,212,218,108, 47, - 59,128, 67,161,206, 31,124, 93,235, 61, 2, 33,169,138, 90,166,210,169,117,155,127,105,136, 27, 19,151,146,146,242,250,136, 17, - 35, 38, 46, 92,184,208,152,147,147, 99,236,218,181,171,183,227, 11,165,189,167,148, 42,101,236,218,107,251,132, 19,108, 66,211, -166, 77,231,143, 24, 49, 98,252,130, 5, 11,140, 71,142, 28, 49,182,108,217, 82,225,244, 45,179,114, 7,251,234,171,187, 95,234, -112, 54,106,220,135, 13, 27, 54,126,225,194,133,198,253,251,247, 27,219,181,107,167,112, 82, 90, 91, 59,115, 28,135,158, 61,123, -169,226, 28, 62,124,248,248,119,223,125,215,152,155,155,107,236,216,177,163, 87,164, 65, 9,227,197,132,243, 50,231,252, 75, 10, - 44, 46, 62, 62,126,105,207,158, 61,135,125,249,229,151, 60, 0,228,230,230,162,180,180, 20, 41, 41, 41, 48,155,205,208,235,245, -176,217,108,245,234,101, 37, 36, 36,188,223,171, 87,175,113, 95,126,249,165, 8, 0,159,223,126, 19,126, 17,129, 7,139, 29,208, -104, 52, 56,122,244, 40,120,158,255, 61, 61,183,235, 34, 34, 34,254,183,114,229,202,152, 30, 61,122,112, 37, 37, 37,104,217,178, - 37,126,253,245,215,222,155, 55,111, 78,191,251,238,187,239,174,172,172,156, 4, 96,179, 90,194,175,190,250, 10, 38,147, 73,217, -156, 78,231, 69,143, 37,243, 60,159,154,147,147,147, 96, 54,155,225,241,120, 64, 41,173, 85,129,253, 43,158, 36, 73,232,223,191, -191, 51,100,230, 9, 66,106, 78, 78, 78,130,193, 96,168,195,229,241,120,160,213,106,193,113,156,220, 67,132,219,237, 70, 70, 70, - 70, 40, 78,210,174, 93,187,219,100,113,197,113, 28, 62,249,228, 19, 36, 37, 37, 33, 33, 33, 1, 38,147, 9, 6, 67,253, 53,176, - 32, 8,136,139,139,195,253,247,223,143,219,110,187, 13,203,150, 45,131, 40,138,181,246,199,198,198,226,219,111,191, 69,100,100, - 36,210,210,210,106,237,255,179,130, 0,177,223,109,254,205,145,189,101,212,213,194,160,126, 45, 23, 40, 21,173,230, 32, 42,121, - 93, 11,201,227,185,176, 97,251,201,103, 85,116, 0,154,108,219,182, 13, 58,157, 78,221,205,221,227, 65,239,222,189,155,132, 57, -108,100,151, 46, 93, 62,191,255,254,251, 53,109,218,180, 33,162, 40, 66, 16, 4, 8,130, 32,151,199, 52, 74,105,154, 36, 73, 3, -206,157, 59, 71,223,124,243,205,151, 55,110,220,120, 51,128,175, 3,198,221,109,237, 86,109,151, 70, 82,138,164,196,193,180,121, -241, 58,130,106,187, 52, 50, 74,176, 30, 5,112, 57, 11,172, 72,131,193,240,204,167,159,126,170, 1,128,193,131, 7, 63, 99,181, - 90,255, 13,160,162,161, 46, 16, 21, 21,133,168,168, 40,116,233,210, 5, 99,198,140,137,238,222,189,251,163, 45,236,246, 41, 5, -128, 35,104, 29,226,184,212,111,190,207, 79,144,127,143,191,169,135,102,104,102,235,115,212,107,153,249,123,104,146,135,158, 90, -191,237,120, 56, 1,198, 37, 37, 37,253,103,248,240,225,183, 46, 92,184, 48, 2, 0,222,127,255,125,140, 28, 57, 18, 73, 73, 73, - 48, 24, 12,208,104, 52,208,104, 52, 16, 69, 81,249, 12,115,147,229,147,146,146, 94,190,225,134, 27,110, 89,176, 96, 65, 4, 0, - 44, 89,178, 4,163, 70,141, 66, 92, 92, 28, 34, 35, 35,161,211,233,160,213,106,189, 92, 4, 52,124,171, 95, 39,156,247, 12, 29, -136, 86, 6, 29,254, 54,251, 21, 68, 71, 71, 99,195,180,251, 32,114, 28,238,251,118, 19, 34, 35, 35,213,180, 31,117, 56,115,115, -115,113,238,220,185,128,113,231,121, 62, 92,125, 83,226, 62,114,228,200, 91,100,206, 37, 75,150, 96,216,176, 97,136,139,139,131, -217,108, 86,226,254, 27, 55,167,138,115,216,176, 97,183,188,251,238,187, 10,231,160, 65,131, 16, 27, 27,139,136,136, 8,104, 52, - 26, 37, 61,235,147, 71,151, 57,231, 95, 82, 96, 17,175,123,117,107,118,118,182,146,243,162, 40, 66,167,211, 41,133,195,247,198, -173,246, 94, 19, 31, 31,127,231,151, 95,126,169,156,228,240,171, 84,122,189,190,190,156,181, 58,120,215, 95,127,253,199,217,217, -217,122,141, 70, 3,171,213,138,188,188, 60, 68, 69, 69, 65,171,213,226,198, 27,111,228, 51, 50, 50,226,174,191,254,250,207,126, -250,233,167,241, 0,214,169, 24,226,128,217,108,174, 37,176, 40,189,120,253, 71, 8,129,193, 96,192,170, 85,171, 32, 8, 66,173, - 66, 22,168, 17, 75, 76, 76, 12,235, 74, 0,128, 78,167,195,246,237,219,193,113, 28, 68, 81, 84,182,175,190,250, 10,211,166, 77, -195,185,115,231,148,125, 17, 17, 97, 71, 55,137,209,104, 52,200,226, 74,206,123,131,193, 0, 81, 20,137, 32, 8,132,231,121,185, - 73, 39, 80, 57,148, 33, 8, 2, 10, 10, 10,112,251,237,183, 99,241,226,197,120,225,133, 23, 48,126,252,248, 90,251, 43, 42, 42, - 16, 19, 19,131,232,232,104,232,116,186,223, 83, 22, 46, 27, 72,126,169, 51,235,133,151,141, 18, 0,137, 74,128, 4, 80, 80,229, -251,217,179, 71,241,234,127,222,224,213,114,235,116, 58,108,219,182, 13,190,195,174, 28,199, 65,163,209,212,250, 79, 16, 4, 36, - 39, 39,171,225,155,185,114,229, 74,237, 39,159,124,130, 47,190,248, 2, 30,143, 7,162, 40, 66,175,215, 35, 50, 50, 18,177,177, -177,202,150,150,150, 70, 62,248,224, 3, 77,183,110,221,102, 86, 84, 84, 4, 22, 88, 28,141,146,188,226, 10, 0, 18, 6,211,230, -199,190,228, 99,162, 35,106, 92,156,203,184, 61,156,241,214, 91,111,197,165,167,167, 3, 0,222,122,235,173,184,201,147, 39,207, - 0,240, 52,106,134, 12, 47,174,131, 5,124, 76, 8, 25,231,117,108,245, 67,134, 12,209,190,253,246,219,184,234,170,171,240,208, - 67, 15,197,190,250,242,203,127, 3,176, 34,120, 89,170, 93,152,230,190,242, 70,180,111,135,234,183, 13,248,245,124, 1,158,121, -230, 69, 21,250, 31, 92,211,166, 77,239,126,239,189,247,148,233, 16,177,177,177, 74, 27,228,223, 70,201,159, 33,218, 37,226,117, -133, 38, 47, 92,184, 80,225,140,143,143,175,197, 33,138, 34, 10, 14,253,128,111,222,207,130, 41, 46, 25, 19,166,205,173,119, 56, - 83,116, 90,164, 26,180,232,214,173, 27, 12, 6, 3,114,197,154, 91,153, 44,174,212,132,211,159,147,231,121, 37,140,148, 82,216, -108, 54, 84, 86, 86,194,227,241,192,225,112, 32, 61, 61, 93, 85,220,223,125,247, 93,133,179, 73,147, 38, 74,251,238,219,206,203, -155,220,129, 9, 19,206,201,255,253,239,127, 21,206,184,184, 56,133, 75, 16, 4,104, 52, 26, 44, 89,178, 4, 42, 29,109,213,156, -245,205,119,127,206,227,199,143, 99,206,156, 57,208,104, 52,242, 20, 32,197,177, 76, 73, 73,193,155,111,190,169,234, 30,247, 87, -115,176, 72, 73, 73,137,116,248,240, 97,110,207,158, 61,208,104, 52,136,143,143, 71,239,222,189, 1, 0, 78,167, 19,130, 32,192, - 96, 48,144,182,109,219,158,147, 19, 77,254,244, 27, 75,151,151, 90,114,191,254,250,171,180,102,205, 26,110,217,152, 97,112, 80, -160,251, 51,115, 49,108,212, 40,124,151,162, 5, 15,160,247,225, 18,104,181, 90, 33, 41, 41,201, 37,103,130,204,235, 55, 55,203, -127,249,102,132,201,100,250, 96,245,234,213,122,142,227, 80, 89, 89, 9, 73,146,208,183,111, 95, 16, 66,176,127,255,126, 60,253, -244,211,248,252,243,207,177,114,229, 74, 67,143, 30, 61, 62,176, 90,173, 29, 1, 84,250,112, 28, 8, 84, 56, 35, 35, 35, 97, 48, - 24, 20,129,101, 48, 24, 72,251,246,237,207, 5,153, 71,112,250,224,193,131,233,193, 56,101, 39,225,230,155,111, 86,230,156,201, - 55, 64,223,202, 38,127,207,203,203, 11,148, 95,117, 56, 37, 73, 66,191,126,253, 0, 0, 38,147, 9,102,179, 25,223,127,255,189, -178,191, 71,143, 30,112, 56, 28,104,210,164, 9, 14, 29, 58,164,138,179,168,168, 8, 75,151, 46,133, 40,138,136,139,139,131, 40, -138,154,117,235,214,189, 96, 50,153,162,120,158, 71,116,116, 52, 70,141, 26,181,208, 39, 12,158,175,191,254, 90, 8,198,201,243, - 60,244,122, 61,150, 44, 89,130, 57,115,230,224,201, 39,159,244,119,247, 96,179,217, 16, 23, 23,135,152,152, 24,196,196,196,168, - 10,103, 3,160, 81, 57, 41, 40,242,246,126,135,131,251,214,193, 67, 61,144, 60, 18,168, 68,225,145, 36,236, 93,187,171,221,217, - 95,206,164, 80,208,154, 41,181, 0, 60, 85,213,238,204, 56,237, 85, 0, 86,109, 42,117,204, 15, 23, 78,158,231,225,116, 58,241, -221,119,223,225,232,209,163, 88,179,102, 13,172, 86, 43,154, 52,105,130,232,232,104,100,100,100, 96,242,228,201,193, 4,214, 1, -191,178,185,228,244,233,211,221, 51, 50, 50, 72,121,121, 57, 74, 74, 74, 80, 89, 89, 9,167,211, 9,167,211,169,228,161,201,100, - 66, 82, 82, 18,172, 86, 43,181,219,237, 75,130,198, 93, 34,229, 28, 65,209,177, 85, 66,147,214, 55,186, 13,231,190,143,179, 91, - 29, 26,247, 59,171,140,147,191,122,162,245, 80,142,114, 20,168,137, 58, 33,160,146,199, 83,178,110,203, 47,247,255,193,249, 62, -101,234,212,169, 29,125,135,167, 39, 76,152,128,188,188,188,142,243,230,205,155, 2,224,173,250,114, 26,128, 20,212, 40,179,111, - 81,179, 97,166,213, 74, 94, 88,181,234,102, 0,119,172, 92,185, 18,227,199,143,199,127, 94,126,185, 75, 0,129,117,192,183,195, - 87,144,191, 25,199,243,183, 65,146, 36,239, 70,131,126,167,234,194, 73,170,170,170,108, 57, 57, 57,230, 15, 63,252, 16,177,177, -177,104,209,162, 5, 34, 34, 34,160,211,233,234,136, 1,121, 11, 23,119,139,197, 98, 59,124,248,176,249,227,143, 63, 70, 92, 92, - 28,210,210,210, 96, 50,153,160,215,235,149, 14,122,206,154,149,152, 50,233, 70,148,158, 60,130, 55,254,125,155,234,112,222, 51, -100, 32, 82, 13, 90,220, 56,107, 46, 58,118,236,136, 21,183,141, 6, 71,128,123, 55,236,132, 40,138,248,112,228,117,208,233,180, -184,119,195,110,213,156,187,119,239, 6,165, 20,105,105,105,176, 90,173,138,203,166,209,104,176,110,221, 58,140, 30, 61, 26,203, -150, 45,195,181,215, 94, 27, 54,238, 85, 85, 85,182,253,251,247,155, 63,250,232, 35,196,198,198,162, 89,179,102, 48, 26,141, 10, -159,175,136,105,213,170, 21,202,202,202,208,186,117,235,144,156,213,213,213,182,220,220, 92,243,178,101,203, 16, 27, 27,139,212, -212, 84, 24,141,198, 90, 78,216,204,153, 51,107, 17,116,235,214,237,119,115,214, 55,223,253, 57,199,140, 25,131,214,173, 91, 35, - 50, 50, 82, 73, 3,127,161, 93, 31, 80, 74,123,161,246, 52, 7, 7, 0,173,207,231,121, 66,200,238, 0,199,201,255,139, 0,174, -246,238,243,120, 53, 64,116, 0,190, 96, 60, 37, 94, 83, 33,222,239,248, 90,215, 9, 36,176,228,250, 56, 0,192, 86, 0,232,208, -161, 3, 74, 75, 75,161,211,233,208,187,119,111,156, 63,127, 94,177,249, 36, 73,194,216,177, 99,249, 39,158,120, 34,129,227, 56, -184, 92, 46, 80, 74,193,243, 60,228,158,159,191, 14,224, 56, 14, 25, 25, 25, 56,232, 77,211, 97,163, 70, 33, 53, 53, 85,153,196, -161,211,233, 48,126,252,120, 50,109,218, 52, 65,118, 47, 40,165,176, 90,173,232,214,173,155, 33,132, 59,242,239,207, 62,251, 44, - 74,171,213, 42,226, 74, 14,203,225,195,135,241,234,171,175,226,142, 59,238,192,201,147, 39,145,156,156,140, 71, 31,125,212,156, -149,149,245,111,167,211, 57, 43, 92,134,154,205,230, 90, 2,107,210,164, 73, 66, 70, 70, 70,130,209,104, 84,220, 45,175,168, 68, - 70, 70, 6, 9,231, 96, 73,146,132,111,191,253, 54, 96,239,208,191,199, 64, 8, 1,165, 84, 21,103, 78, 78,142, 34,206,100,247, - 66,222,159,151,151,167, 56, 88, 94, 33, 24,138,147,202, 66, 77,182,201, 69, 81,212,228,228,228,204, 78, 78, 78, 54, 79,154, 52, - 9,149,149,149,104,218,180, 41,134, 14, 29, 10, 73,146,224,116, 58,241,224,131, 15,134,116, 94, 68, 81,196,174, 93,187,144,149, -149,133, 39,158,120, 2, 11, 23, 46,196,224,193,131,107, 57, 88,114, 79, 55, 50,242, 15, 95,227,208,128, 22, 22,224,116,187, 96, -177, 88, 65,169, 7, 30,137, 66,242, 72,216,191,113,111,187, 95,246, 29,237,156,189,124,169, 8, 0,182, 77, 43,125,207, 74, 30, -179,224,255,218,103,198,136, 57,155, 46,184,114,194, 12, 59,227,190,251,238,195,179,207, 62,139, 91,111,189, 21,107,215,174,197, - 83, 79, 61,133,187,239,190, 91, 17,239,114, 89, 80, 49,236,248,222,132, 9, 19,254,181, 98,197,138,171, 30,121,228, 17, 78,174, -147, 70,163, 17,132, 16,216,108, 54,101, 59,124,248,176,244,207,127,254,243, 39,135,195,241, 94,208,130, 36, 24,126, 52,233, 44, - 95,159, 45,229,218, 22,109,136,229,136, 16,233,140, 79, 27, 80,126, 67,187,193,116,240,109, 45, 98,168, 84,227,240, 81, 80,216, -109,213,120,242,137,199,248, 63, 56,183, 70, 14, 25, 50,100,232,236,217,179,235,236,152, 61,123, 54, 14, 29, 58, 52,116,237,218, -181, 5,193,134, 68,131,136,171,212,168,164,164,121, 0, 96, 40, 42,154,106, 5, 78, 1,192, 11,192, 48, 15, 48,122,237,218,181, - 0,128,230,205,155, 67, 2, 58, 17,224,127, 60,240, 49,128,111, 2, 57,234, 78,151, 27, 86,171, 13, 18,173, 41, 71, 18,149, 32, -121,106, 92, 80,127,145,165, 98,220,141, 2,144,120,158, 71,151, 46, 93, 48,108,216, 48,104,181, 90,152,205,102,165,157,247,111, -147, 84,220, 20, 41, 0,137, 16,130, 86,173, 90, 97,232,208,161,208,104, 52, 48,153, 76,136,140,140, 84, 4, 22,207,243,232,146, - 49, 16, 31, 47,123, 5, 19,135,117,198,164,235, 18,241,217,254, 18, 85,225, 76, 51,106,145,102,208,161, 67,135, 14,136,136,136, - 0, 33, 0,207,115, 74, 56, 77, 70, 61, 52,202,240,163,186,184, 23, 21, 21,161,160,160, 0, 5, 5, 5,224, 56, 14,125,251,246, -133, 86,171,133, 32, 8,200,207,207,199,172, 89,179,224,112, 56, 84,113,114, 28,135,182,109,219, 98,224,192,129,208,106,181,144, -239, 21,190, 67,131,162, 40,162,178,178, 18,109,218,180,193,170, 85,171,208,191,127,255,176,156, 29, 59,118,196,128, 1, 3,160, -209,104, 96, 48, 24,148,169, 58, 90,159,184, 86, 85, 85, 41,233,208,189,123,247,122,113,174,217,117, 18,139,214,124, 15,187, 67, - 66,133,197, 85,235,132,228, 38,145,216,250,209, 19,170,226, 46,115,190,247,222,123, 40, 43, 43, 83,218, 33,121, 65,155,108,158, -164,166,166,226,221,119,223, 13,122, 15,242,106,145, 77,126,251,226, 9, 33,217, 62,117, 98, 20, 33, 36,219,247, 51,216,113,222, -175,215,205,152, 49,163,103, 86, 86,214,156, 62,125,250,124,188,125,251,246,229,193,248,130,241,204,152, 49,163,115, 86, 86,214, - 28,223,227, 3, 92, 39,160,131, 37, 15,249,112,178, 51,147,146,146,162,140, 59,155,205,102,104, 52, 26,229, 96,183,219,141, 15, - 62,248, 0, 9, 9, 9, 72, 76, 76, 84, 62,131,101, 0,199,113,160,148,226,161,243, 53, 83,128,190,109,170, 65, 1,128, 27,206, - 83,133,207,227,241, 96,197,138, 21,136,136,136, 80, 42,186,217,108, 14, 57, 92,164,213,106, 7,244,234,213,139,179,219,237,138, - 77,206,113, 28, 14, 31, 62,140,172,172, 44,140, 31, 63, 30,237,219,183,135,199,227, 65,117,117, 53,174,191,254,122,241,141, 55, -222, 24,160, 86, 96, 25,141, 70,101,222,145,221,110,199,250,245,235, 17, 29, 29,141,152,152, 24,196,197,197, 33, 54, 54, 22, 58, -157, 14,132,144,240, 45, 26,165,184,249,230,155,107, 57, 87,190,174,149,111,131, 38, 15,251,169,225,188,246,218,107, 21,247,202, -108, 54,227,155,111,126,107,159,123,247,101,240, 54,107, 0, 0, 32, 0, 73, 68, 65, 84,238, 13, 74, 41,226,227,227,177, 99,199, - 14, 53,141, 46, 36, 73, 66, 66, 66, 2, 68, 81, 36,235,214,173,123,193, 43,174,136, 40,138,248,225,135, 31,144,151,151,135,248, -248,120,165, 87, 26, 14,213,213,213,103,223,120,227, 13,207,219,111,191, 13, 0, 24, 52,104, 16,202,203,203,139,125,246,151, 78, -156, 56,177, 86,124, 47, 92,184, 80,250, 23,208, 87,112, 59,221,176, 88,109,168,170,172,134, 75,242,192,229,246,160,248,244,249, -232, 39,166, 77, 21,255,243,224,100, 0,192,180,249,111,161,242,221,223, 26,176, 47,166,141, 75,184,249,213, 79,166, 3,184, 49, - 20,191,197, 98,129,205,102, 67,243,230,205,177,123,247,110, 84, 86, 86, 98,240,224,193,181,220,223, 48, 67, 16,190,112,156, 62, -125,186,239,168, 81,163,118,191,246,218,107,173, 59,117,234, 68,170,171,171, 81, 93, 93, 13,139,197, 2,249,251,129, 3, 7,232, -242,229,203,127,177, 88, 44, 25, 8, 49,103, 72,155, 94,121,212,145, 27,177, 98,203,143,154, 81,127, 31, 51, 58,234,212,233, 66, -119,169, 85, 95, 85,110,253,201,238,161,135, 64, 61, 20, 30, 74, 65, 61, 18, 60, 84,250,163,215,111,167,182,107,215,238,159,203, -150, 45, 11, 40, 72,121,158,199,178,101,203,208,175, 95,191,127,230,231,231, 31, 70,136,201,253, 50, 90, 0, 90,183, 40, 62,241, -127,255,247,127, 26, 0, 24, 56,112,224, 19, 45, 92,174,105, 5,128,163, 83,215,174,183,108,223,190, 61,202,104,172, 89, 39, 20, - 21, 21, 5, 74, 41,111,177, 88,162, 50, 50, 50,110,217,191,127,127, 93,129, 37, 81,184, 92,110, 88,109,118,148,149, 87,193,229, -112,193, 45,185,225,113, 75,112, 75, 53,238,168,219,227,129,228,246,192, 45,121,192, 11,124, 68,230, 53,205,170,106,188, 44, 82, -182, 57,167,176, 89,160, 34, 90,179,194, 11, 72, 74, 74, 82,134,132,125,231,202,168,112, 49,234, 24,245, 53,109, 33, 85,218,198, - 31, 55,102,163,248,208, 86,104, 8,133,228,113, 65,114, 59,225,113, 57,193, 67,194,161, 99,167,209,169,105,216, 54, 68, 9,231, -240,103, 94, 68,239,222,189,241,217,184, 27, 65, 8,112,239,250, 29,208,104, 52, 88,126,211, 96,104,245, 90,252, 99,205, 78,181, -225,172, 21,247,220,220, 92, 60,244,208, 67,120,233,165,151, 96, 48, 24,148,206,201,145, 35, 71,240,201, 39,159, 96,200,144, 33, -170,227, 78, 72,205, 80,171,156,134, 51,102,204,192,153, 51,103, 48,111,222, 60,244,236,217, 19,162, 40,162,172,172, 12, 25, 25, - 25, 56,119,238,156, 42, 78, 74, 37,196,198,198, 42,211,117,252,231,136,201, 29,217,250,228,145, 47,231, 93, 55, 37,227,203,109, -203, 65, 64,176,243,163,169,181,238, 71,239,124,178,165,222,156,207, 62,251,108,173,112,214,211,189,146,181, 8, 9,114,207, 27, -165,210,241,146,143,147, 19, 89,151,149,149, 53,199,255,252,112,124,190,251,253,206,119,248,137,178,115,106,134, 8, 41,199,113, -144, 36, 9,102,179, 25, 90,109,141, 3,230,127, 35, 53,153, 76,181, 20,121,184,241,100,158,231, 65, 41, 85, 18,150, 15,176,127, -199,142, 29,117, 68,192,127,255,251,223,144,227,180,110,183,187, 99, 68, 68, 4, 42, 43, 43,149, 57, 82, 90,173, 22,211,167, 79, -199,196,137, 19, 21,113,165,213,106,177,120,241, 98,164,167,167,195,225,112,116, 12,149,160, 26,141,198,210,181,107, 87, 78,118, -129, 12, 6, 3, 25, 63,126, 60,239,116, 58,161,215,235,107,185, 78,242,220,180,112, 98, 72,118,155,190,251,238, 59, 85, 14,150, -218, 57, 72,148, 82,236,221,187,183,150, 80,243, 46, 53, 6, 0,236,219,183, 79,185,209,170, 29,239,246,120, 60, 48, 24, 12, 68, -163,209, 16,147,201, 20, 53,105,210, 36,133, 87,206,115, 57,222,106, 38, 90,239,223,191,255,250,144,227, 53, 7, 14,252, 37, 31, -199, 32, 73, 18,156, 46, 23,172, 86, 27, 42,171, 45,152, 57,215, 59,162, 54, 19, 57, 0,114,250, 78,121, 8,247, 13, 27, 50, 16, -225, 87,247, 5, 68,108,108, 44, 62,255,252,115,136,162,136, 85,171, 86, 33, 50, 50, 18,163, 71,143, 70,100,100, 36,158,120,226, - 9,220,118,219,109,245, 17, 88, 0, 80, 94, 90, 90,218,119,234,212,169,187, 95,126,249,229,230,205,155, 55,135,211,233,132,195, -225,128,211,233,196,177, 99,199,176,124,249,242, 66,139,197,210, 23, 64,121, 56, 50,109,122,229,209,236, 71, 90,159,237, 55,230, - 38,219,161,162, 53, 56, 87,116, 30,110,207, 41,184, 61, 30,184, 93,238, 26, 65, 32, 73,112, 59,221,224,121, 46,242,250, 62,105, -235,106, 38,252, 19, 7,128, 17,151, 48,171,104,126,126,126,105,124,124,188,220,131,140,116, 56, 28,196,219,150, 80,252, 54,193, -189, 26,128, 83, 13, 97, 33, 48,229, 63, 47,189,212, 76, 30,190,127,233,165,151,154, 61,250,200, 35, 83, 0,188,126,104,255,254, -165,119,221,117,215,212, 79, 63,253,180,214, 57,119,221,117, 23, 14,237,223,191, 52, 88,207,199,229,114,193,106,181,163,164,228, - 87,220,115,239, 51, 62,221,125,170,244,251,107, 38,189, 83, 0,208, 3, 64,201,185,159,241,224, 67,143,234, 66,117,168,188,245, - 29,162, 40,214,153,132,236,219,190,171,104, 63,168,255, 20, 11,141, 70,131,163,219,179, 49,117,202, 45,128,199, 13, 56,171, 1, -167, 5,212,105, 1,117, 84,131,104, 13,160, 46,155, 42, 94,143,199,163, 76,219, 16,120, 14, 58,237,111,237,166,209,104,128, 86, -175, 85, 27,206, 58,113, 63,113,226, 4,238,191,255,126, 56, 28, 14,140, 25, 51, 6, 54,155, 13,118,187, 29, 54,155, 13,173, 90, -181,130,213,106, 85, 29,119, 73,146, 20, 23,112,234,212,169,232,217,179, 39,102,205,154,133,199, 31,127, 28,173, 90,181,194,148, - 41, 83,240,241,199, 31,163,115,231,206,176, 88, 44, 97, 57,229,182,196,108, 54, 67, 16, 4,165, 13,246,205, 43, 89, 96,169,205, -163, 64,156,132,252, 54,239,214, 55,223, 31,158, 52,168,222,156,115,230,204, 65, 73, 73, 73, 29,231,202,215,193, 90,176, 96,193, - 69, 85, 86, 63,151, 41,236,113,132,144, 92,239, 95,214,233,211,167, 63, 73, 8,201,158, 62,125,250,147,115,231,206,205, 83,195, - 23,104, 63, 33,228, 43,239,253,247, 6,159,255,114,213, 8, 44,200,110,147,108,107,202, 9, 39,239, 3, 0,163,209,136,236,236, -108,172, 88,177,162,214, 13, 37, 24,100,209,246,117,124, 77, 1, 24,233,117,174,228,223, 35,138, 37,140, 26, 53, 10,173, 90,181, -170,229, 94, 25, 12,134,144, 98, 67,146, 36,156, 56,113, 2, 7, 14, 28, 64,159, 62,125, 80, 94, 94, 14, 1,192,180,253,251,209, -105,210, 36,216,189,194, 79,171,213,226,159,255,252,167,170, 12,220,179,103, 79,173, 73, 64, 29, 59,118, 60,149,145,145,145,178, - 99,199, 14,197,209,210,233,116,208,235,245,138,200, 80, 83,169, 41,165,184,229,150, 91,106,137, 33,127,129, 37, 87,158,111,191, -253, 86,213, 16, 33,165, 20,153,153,153,138,123, 21, 17, 17,129, 47,190,248, 66, 57,230,186,235,174, 3, 33, 4, 9, 9, 9,248, -230,155,111,194,114,202,105, 42,231, 61,207,243,168,174,174, 70,110,110, 46,180, 90,173, 50, 63,195, 96, 48, 40,241,103, 8,150, -225, 18, 28, 46, 23, 44, 86, 27, 42, 43,107, 26,210,163, 7, 62,171,117,136,211,126,241,139,211,100, 39,180,162,162, 2,235,215, -175,199,231,159,127,142,158, 61,123,214, 26, 30, 84, 59, 68,232, 59,143,224,215, 95,127,237,247,248,227,143,239,124,225,133, 23, -154,198,197,197,193,233,116,226,196,137, 19,248,224,131, 15,206, 88, 44,150,126, 0,206,171, 79, 3, 10,183,203, 13,155,197,138, -242,202,106, 60, 63,123,113,208, 38, 2, 0,156,142, 74,140, 26,145,169,189,196, 57,117, 26,192,221, 62,191,151, 2,144, 39,227, - 87, 0,152, 88, 31, 50, 17, 24, 48,230,150, 91, 6, 78,157, 58, 85,249,111,234,212,169,216,185,115,231, 64,113,197,138, 3, 46, - 96, 35,191, 98, 69,151,121,243,230, 41,199,204,155, 55, 15,159,175, 88,177,193, 3,108, 12,210,109,175,113,176,172, 54, 84, 85, - 91, 17, 25,157,140,211,199, 55,133, 13,139,134,183,131,134,104,151,229, 54, 36,216,188,155,122,136, 43, 37,164,242,177,242,188, -163, 46, 3,111,193,107,175,255, 23, 58,142,226,230,129,157, 16,111,144, 64,140,177,208,100, 78, 7,137, 78,171, 57,235,249,171, -161,166,173,219,244,212, 52, 28, 51,233,241,207,181,219, 32,138, 34, 62, 31, 55, 18, 26,173, 6,119,124,181,185,102,113,207,228, -155,161,209,105, 49,244,157, 79,212,220,168,149,184, 31, 61,122, 20,219,182,109, 67,135, 14, 29,240,243,207, 63, 43,115,108,229, -251,150,202, 14,175, 18,119,185, 29, 47, 42, 42,194,168, 81,163,160,209,104,176,120,241, 98,108,218,180, 9,143, 63,254, 56,238, -186,235, 46, 92,127,253,245,193,230,197,214,225,244,205,163, 96,243,163,234,155, 71,254,156, 74,249,253, 29,249, 46,115,202,147, -219, 3,137,245,223, 59,177,221,199, 45, 74, 12,176,239, 6,127,231,137, 82,218,203, 59, 55,202, 62,119,238,220,188,185,115,231, -142, 34,132,100,207,157, 59,119, 84, 48, 7, 43, 16, 79,128,253, 97,219, 65,193, 79,133, 14,240, 21, 81,218, 16, 99,217, 38,147, - 9,119,223,125, 55,158,120,226, 9,101, 34, 99, 40,200,202, 53, 20,178,179,179,235,252,183,106,213,170,112, 67,132,135,163,162, -162,122, 14, 28, 56, 16,229,229,229, 56,121,242, 36,204,102, 51, 58,189,250, 42,246,223,119, 31,174, 94,184, 16,220,192,129, 74, -133,223,191,127, 63,116, 58,221, 97,155,205, 86,175, 76, 53,155,205,136,137,137,129, 94,175, 71, 68, 68, 4, 34, 34, 34, 96, 50, -153, 20,161, 21,110,136, 80, 46,124, 95,125,245, 85, 72,231,202,215,242, 85, 35,134, 40,165,216,177, 99, 71, 29, 7, 75,190,166, -188, 79,118, 50,212,112,122, 29, 75,170,211,233,192,243, 60,140, 70,163, 98,247,235,245,122,101, 83,235, 96,133,123,144,104, 90, - 90, 90,173, 7,145,254, 63,123,231, 29, 30, 69,181,134,241,119,102,182,111, 54, 13, 82, 72, 15, 1, 2,129,208, 66,151, 38,160, - 8, 72, 17, 68,176, 97,167,169,112,189, 82, 45, 24, 80, 1, 69, 64, 16, 1, 1, 5, 1, 1, 43, 77,138,244, 38,229,146,208, 99, - 66, 40,233, 33, 36, 33,109,179,117,202,185,127, 36, 27, 55, 33,101, 55, 4, 80, 56,191,231,217,103,119,167,188,115,206,204,153, -153,119,190, 83, 70, 46,151,151, 27,136,244,223, 95, 69,104, 70,177,190,184,206,245, 45, 22, 11,100, 50, 25,126,253,245, 87,116, -234,212,169,204, 92,217,140,149,253,113,119,146,180, 91,183,110, 61,186,120,241,226,147, 11, 22, 44,240,212,235,245, 88,179,102, - 77,129, 94,175,127, 20,165,237,136, 28,190, 24, 2,224,173, 2, 12,102, 51,244, 69, 37,251,224,234,197, 95,106, 52,101,255,102, -154,183,106,245,226,234,213,171,111,155,190,122,245,106, 36, 38, 38,190,136,243,231, 15, 6, 1,203,167, 78,157,218,184, 93,187, -118, 65, 0, 48,117,234,212,212, 32, 96,121,117,231,185,173,138, 80, 95,106,214, 77,197, 57,117, 22,105,173,248,192,119,167, 55, - 68,134, 97,202, 76,198,227, 35, 94, 67,198,181,120, 68,104,115,224,227,225, 2,169, 40, 3,138, 62,209, 56,127, 75,139, 47,151, -239,118, 42,157, 90,165, 2,106,205,223,213, 77,106,141, 26,170,210, 90, 5,134, 97,160,214,106, 32, 87, 42,157,206,123,124,124, - 60,180, 90, 45, 68, 81,188,237,126,227,108,143,102, 66, 72,217,189,115,193,130, 5,152, 60,121, 50,214,172, 89,131,243,231,207, -163, 77,155, 54,120,236,177,199,112,243,230, 77,156, 59,119, 14,102,179,217,225,116,218,223, 47,226,226,226,176,119,239, 94, 36, - 36, 36, 32, 53, 53,181,214,199,189, 98, 53, 99,105, 13, 78,137,121,221,123, 6, 79, 63, 30, 85, 43,205,232,232,104,220,188,121, -243,182,200,149,125,243,163,106, 34, 88,101, 94,164,154,242, 21, 99,111,130,108,145, 38,123, 67, 84,241, 63, 0, 79,219,180,105, -211,166,189,231,232,122,246,255,109, 17, 48, 71,170, 22,237, 13, 22, 83,177,186,142, 97,152,178,157,110, 31,153,178,253,214,106, -181,101, 81,166,144,144,144,106,163, 87,182, 19,142,227, 56,116,191, 86, 4,165, 82, 89, 86,157,215,255,166, 84, 46, 68, 30, 22, - 22, 86,174, 13,150,253, 65,169, 12,179,217,124,240,224,193,131,109, 7, 15, 30,204,197,197,197, 65, 38,147, 65,146, 36,152, 59, -119, 70,155,229,203,113,225,157,119,208,227,250,117,152,121, 30,106,181, 26,187,118,237,178, 26, 12,134,131,206, 20, 26,150,101, - 25,155,193, 82,169, 84,112,117,117,133,155,155, 91, 89, 52,199,153,139, 80, 85, 79,136,246, 31,103, 78,104, 91,131,126,251, 27, -171,237,248, 25,141,198,114,134,203, 81,236,171, 12,108,166,200,221,221,189, 92,181,168, 45,138,231,136,193,170,105, 32, 81,149, - 74,229,118,248,240,225,198,110,110,110, 32,132, 32, 39, 39, 7,207, 62,251,236,229,127,125, 0, 11,164,164,145,187,209, 4,189, -209, 84,231,250, 63,252,240, 3,174, 92,185, 2,171,213,138, 57,115,230,220,102,172,106, 25,193,178,113, 69,163,209, 72,253,250, -245,195,241,227,199,161, 82,169,120,212, 98,252, 42, 34, 73,176,242, 2, 76, 70, 51,244,197,197,120, 24,184,116,254,252,207, 46, - 46, 46,207, 2,208,229,231,231,115,238,238,238,208,106,181, 48, 26,141, 5, 92,105, 79,193, 36,192,162,225,249,207, 70,140, 24, -177, 16, 0,100, 60,255, 89,117,227, 96,149, 25,172, 58,222,143,182,235, 86, 85,209,171,218,154, 43,134, 97, 74,186,231,179, 44, -214,204,153,140, 8,109, 54,162, 26,186,192,116,243, 10, 84,110, 94, 96, 60, 66,241,229,242,221,136, 75,186,229, 84, 58,159, 91, -247, 11,130,130,130,176,253,165, 33, 80,169, 84,120,246,151,189, 37,141,180,199,142,132, 66,173, 66,159, 37, 63,212, 42,239, 6, -131,161,202, 72,149, 19, 17,172, 50, 77,155, 1,140,138,138, 66,147, 38, 77,112,240,224, 65, 68, 69, 69, 33, 49, 49, 17,137,137, -137, 72, 74, 74,194,249,243,231,145,151,151,231,244, 49,218,180,105, 19,178,179,179,161, 80, 40, 80, 88, 88,136,235,215,175, 87, -215,254,217,225,227,110,163,217,147,209, 0, 0,127,111,119,167, 12,150,189,230,188,121,243,156, 25,230,161,156, 76, 53,243,114, - 42,180,117,178,253,183, 84, 48, 59, 21,255, 87, 92, 30, 0,110, 2,224,106, 88,175,226,255,156, 57,115,230, 28,180, 69,190, 74, -117,185,170,218, 95, 85,140, 96,217,155, 0, 99,179,102,205, 52,246,245,167, 44,203,194,213,213,149,153, 52,105, 18,199, 48, 12, -116, 58, 29,220,221,221, 17, 30, 30, 14,171,181,230,102, 9, 10,133,194,216,177, 99, 71,141,125,232,149, 97, 24,184,184,184,112, - 83,166, 76, 97, 86,173, 90, 85,233,122, 91,183,110,173,182,112, 11,130,176,112,212,168, 81,175,167,165,165,121,250,250,250, 34, - 51, 51, 19, 10,133,162,100,180,216, 94,189,208,253,218, 53, 88, 75, 13, 67,124,124, 60, 86,174, 92, 89,108,181, 90, 23, 58,123, -209,208,233,116,168, 95,191, 62, 84, 42, 85,185, 94, 49,118,161, 85,135, 34, 88,117,105,174,108,154,246, 55, 86,219,239,177, 99, -199,150,253,119,230, 34,169, 80, 40,200,147, 79, 62, 89,246, 14, 66, 15, 15, 15,120,121,121, 33, 43, 43,235,239,158, 58,165,145, - 59, 71, 13, 86, 77, 3,137,202,229,114, 88,173,214,178,234,204, 37, 75,150,220,137, 49,248,231, 24, 44, 65, 98,116, 58,111,248, -251, 55,133,183,143, 9,146, 36,214,153,182, 32, 8, 24, 55,110, 92,185, 49,175,108, 55, 98,219, 32,182,182, 30,190,246,225,127, -103,159,196,239, 56, 58, 66, 0, 94, 40,141,226, 25, 44,255,186, 99, 24, 18, 18,226,150,156,156, 92, 89,187,168, 74,123,251, 1, -127, 15,201,192, 1,159,164,164,164,180,116,119,119, 71,223,190,125,177,109,243,230,173, 31, 2,101, 33, 27, 35,144,166,185,113, -227, 63,165,191,211,107, 10,234,217,170, 8,139, 13,117,109,214,153,219,162, 87,119, 90,149,195,178, 37, 15,102,191,125,243, 25, - 34, 52, 89,104, 19,172,194,177, 19,231,208, 41,136,128,152, 21,181, 78,167, 78,167, 43,105,140,175,213, 66,165,250,187,205,149, - 74,171,129, 66,169,170,117,222,237, 35, 85,119, 26,193, 98, 24,182,220,126,124,253,245,215, 49,117,234, 84,244,237,219, 23,137, -137,137, 56,124,248, 48, 46, 95,190,140, 9, 19, 38, 32, 50, 50, 18, 79, 60,241,132, 83,199,232,183,223,126, 67, 65, 65, 1, 8, - 33,200,206,206,134,201,100,194,140, 25, 51,238,248,184,219,184,182,103, 54, 0,224,151, 61,177,181,214,156, 62,125,122,217, 24, -140,182,123,126, 13, 81, 43, 71,238,119,167,170,251,239,236,250,247,130, 74, 13,214,229,203,151, 43,237, 43, 31, 17, 17,145,213, -167, 79, 31,159,132,132, 4,232,116, 58,132,135,135,195,108, 54, 87, 87, 13,209, 18,165, 99,101, 92,186,116,169, 82,205,176,176, - 48,235,227,143, 63, 46,111,208,160, 65,185,200,149,173,135,141,189, 51,174,168, 89, 74,145,201,100, 26,221,181,107,215,181, 59, -119,238,212,132,135,135,163,160,160,164,253,237,154, 53,107,240,214, 91,111, 65,163,209, 32, 33, 33, 1, 67,134, 12, 49, 24, 12, -134,209, 40, 63, 6, 86,101,154,183, 25, 25,133, 66, 81, 86, 77,102,171, 42, 83, 86, 31,138,190, 77,147, 97, 24, 44, 94,188,184, -210,177,160, 42,178,124,249,242,202,220,124,165,233,252,226,139, 47,234, 76,243,228,201,147,229,222, 49, 56,112,224,192,111,158, -120,226, 9,164,166,166,150,171, 22,172,193, 96,149,211,172,105, 32, 81,142,227,224,235,235,139,143, 63,254, 24, 94, 94, 94,104, -208,160, 65,101, 6,171,218, 99, 84, 75,238,170, 38, 97, 73,204,162, 5,209,221,190,249,246, 23,185, 74,201,226,248,225, 95, 80, -152,119,163,124, 4,214,250,119,151,104,101, 84, 31, 88, 98,247, 57,148, 78,179,217,140,207, 63,255, 28,209,209,209,136,142,142, -174, 54, 65, 85,116,135,174, 49,239,246, 6,203, 65,179,117,155,166, 36,137,140, 90,235, 9,173,139, 63, 34, 35, 61, 33,145,154, -199,234,148,238,255,113, 55,164,166,166,186, 7, 5, 5,225,242,229,203, 12,254,110,143,245,247,177, 82, 42,159,173, 96,176,110, - 63,223,129,243, 27, 54,108,104,217,170, 85, 43, 44, 89,178, 4, 0, 94,250,252,143, 63, 70, 70, 27, 75,194,153, 28,176,177,212, -140,213,152, 78,145,136,140, 90,235, 1,141,174,116, 63, 74,142,143,121, 74,170,201,187,237,230,119, 39, 15,122,149,105,218,214, -191,122,252,119, 60,217, 63, 16,127,158, 60,143,125,105, 46, 8, 82,101,192,207,144, 13, 41,251, 47,252,103,120, 20,190,252,185, -228, 38,126,254,116,205,154, 12,195,224,232,164,209,208,169, 85,120,122,195, 14,200,229,114, 28,124,231,101, 40, 20, 10,244, 92, - 80, 82, 37,123,225,243,233,144,169,148,136,152, 16,237, 80, 58, 43,214,212,216,218, 92,217,155,171, 26, 34, 88, 85,230, 93,175, -215, 35, 47, 47, 15,107,215,174,197,171,175,190,138,155, 55,111,226,250,245,235, 72, 72, 72,192,198,141, 27,203,221,227,224,196, - 49,154, 54,109, 26,222,125,247, 93,176, 44,139,150, 45, 91, 34, 58, 58, 26, 93,186,116,113,250, 24, 85, 60,238, 21,113, 32,122, - 85,165,230,162, 69,139,156,238,176,245, 32,226, 84, 3, 13, 91, 36,203,203,203, 11, 46, 46, 46, 0, 80,238, 6, 91, 83, 53, 97, - 85,154,130, 32, 64,163,209, 64,163,209,148, 27, 22, 97,240,224,193, 53, 70,176, 74,217,149,144,144,240,124,139, 22, 45,190,139, -142,142,118,121,244,209, 71,229,254,254,254,104,215,174, 29, 18, 18, 18,240,251,239,191, 91,151, 46, 93,106, 48, 24, 12,175, 2, -216, 83, 27,243,108,107,248,109, 63,162,189, 51,136,162,152,122,253,250,117,191, 47,190,248,130, 99, 24, 6, 11, 23, 46, 44, 55, - 64,107,197, 60,158, 56,113, 66, 32,132, 92,169, 33,138,145,122,253,250,117,191,249,243,231,151,211,180,125, 42,154, 20, 71, 52, -171,194,150,231,138,251,192,145,147,167,166,129, 68,101, 50, 25,226,227,227,241,209, 71, 31,129, 97,152,114, 29, 39,254,205,252, -249,191,204, 85, 93,218,193,243,217,225,189, 91, 49, 96, 97,169, 36,210,203,229,230,151,153,171,161,243, 55,225,183,119, 71, 58, -114, 44,174, 31, 58,116, 40,120,246,236,217, 28,199,113,152, 55,111, 94,185,178, 84,241,184,239,223,191, 95,212,104, 52, 41,181, -205,135,213,106,117,164, 23, 85, 85, 39,248,177,197,243, 62,234,251,205,234,109,114,134,177,224,248,161, 95, 80,144, 95,121,215, -116,165, 92,134,117, 27,182, 10, 50,142, 77,189,207,135,238,155,199, 30,123,108,198,222,189,123,101, 65, 65, 65,181, 22, 9, 4, -182, 45, 94,188,184,255,168, 81,163,234, 53,111,222,220,214,249, 68, 89,250, 65,233,200,238,187, 28, 52, 73, 91,190,252,226,163, -151, 86,172,222,166,100, 25, 43,142, 31,254, 5, 5, 21,204,250,237,209,104, 57,214,111,216, 98,149,201,184,248,154,174,193,181, -233,193,236, 8,109,159,124, 21, 95,239, 88, 9,159, 86,253,241,204,160,110, 56,186,228, 37,140,104,110,132,245,199,231,208,242, -153,117, 88, 51,189, 36,122,211,230,167,233, 14,221, 43,220,116,127, 15, 88,201,178, 44, 84,106, 13,228,202,191,163, 47, 74,173, - 22,156, 19, 17, 91, 91,222,171,139, 84, 57,187, 63, 56,142, 67, 88, 88, 24, 26, 53,106,132,174, 93,187,162,109,219,182,232,213, -171, 23,206,157, 59,135,115,231,206, 97,194,132, 9,213,153,171, 26,143, 81,223,190,125,209,175, 95,191, 59, 62, 54, 21,143,123, - 93,224, 72, 89, 26, 63,126, 60, 0,220, 81, 52,235,129, 54, 88,222,222,222, 80, 42,149,181, 50, 84,149,105, 90, 44,150, 50, 99, -165,209,104,202, 34, 86, 91,183,110,117,166,128,239, 49, 26,141,145, 31,124,240,193, 68,141, 70,211,203,104, 52, 70, 0,128, 86, -171,253,203, 96, 48, 28,176, 90,173,139, 0,228,223, 73, 90,237, 13, 70, 37, 81,174,106, 31,241,179,179,179,159,120,241,197, 23, -247,176, 44,219,176,186, 23, 51,219,153,213,164,172,172,172,254, 53,105,190,240,194, 11,149,106, 86,166,235,136,102, 21,230,176, -156,169,178,239, 97,232, 80, 33,171, 97, 32, 81,185, 92, 14,157, 78,135,205,155, 55,163,126,253,250, 15,212, 9,118, 60, 38,243, -243,234,230,247,172,175, 60, 4,192,123,232,252, 77, 41,135,114,173, 33, 67,231,111, 74,254,237,221,145,193, 53, 24,158, 71,230, -206,157,123,148,231,249, 16, 7,203,109,178,217,108,238,230,108,218, 9, 33,136,143,143,151, 94,127,253,245,156,236,236,236,103, -106,147,255,195,199,147, 23,116,235,232,239, 53,124, 72,183, 14, 96, 24, 88, 44, 85, 52,234,101, 64, 8, 33, 68,198,177,169,135, - 78,164,190,126,159, 95,161,113, 54, 57, 57,121, 86,227,198,141,199, 0,168,234, 78,184,177, 38,145, 36,192,162, 52,155,191,104, -223,190,253,148,247,222,123,207, 99,208,160, 65, 8, 10, 10,130,187,187,243,111, 11, 58,118, 42,125, 76,231,118, 98,224,211,131, -187, 61,193, 50, 12, 49, 91,170,111, 28,205,216,246,167,140,139, 63,124, 50,173,117,117,209,121,155, 41,191, 27,209,134, 62,195, - 95, 65,159,225,175,148,149,167,125, 63, 63,138,152,244, 63,208,142, 77,135,121, 69, 55, 48,110,182,162, 94,243, 48, 55, 44,203, - 98,208,234,205, 80, 40, 20,101,233,124,100,110,249,126, 1,225,111, 58,254, 46,117,251,188,219, 71,176, 42,185, 22, 59,213, 6, -139,227, 56,228,228,228, 32, 33, 33, 1, 89, 89, 89, 48, 24, 12,136,139,139,131,197, 98, 65, 94, 94, 30, 90,182,108,233,220,211, -253, 93, 56, 70,247, 83,243, 97, 48, 86,181, 50, 88,132,144,180, 78,157, 58,213,116, 51,118,170,151,145, 76, 38, 51,117,235,214, -141,169,172,183,129,237,183, 70,163,113,244,241, 57,223,106,181, 70, 91,173,214,104,148, 86,133, 89,173,214, 59,110, 72, 34,138, - 98, 70,199,142, 29,185,234, 46,250,146, 36, 85, 59, 98, 92, 78, 78, 78,113, 78, 78, 78,157,190, 58,252,110,104, 86,114,210,136, - 99,198,140,169,214, 73,185,184,184, 84,219,184,168,166,129, 68, 13, 6, 67,230,139, 47,190, 40,218, 87, 53,219, 15, 68,250, 64, -195,144,228, 1,207,190, 22,114, 40,215, 26, 2, 0, 54,147, 5, 66,146,171, 90,229,244,233,211, 89, 0, 26,223,237,164, 93,187, -118,205,210,169, 83,167,245, 69, 69, 69,227, 1, 24,106,171,115,244, 84,198,244,127,225,145, 57, 11, 96,236,157,138, 88,128, 56, - 95,147,105, 92,244,135, 31, 62,253,209,135, 31,134, 75, 64,125,148,142, 81,197, 57, 96,210,236, 57, 17,115,163,206,199, 6, 19, - 69, 49,237,145, 71, 30,113,122,157,154,230, 87, 51,146, 56,126, 64, 16,112,218,121,205,187,145, 78,155,102,171, 86,173,208,166, - 77,155,178,111, 27,246,211,219,182,109,235,144,102, 84, 84, 20,154, 55,111, 94,229, 8,237, 21,219, 92,221,239,188,219,176, 61, -250,182,109,187,187,206, 52,239, 52,157,148,234,105, 73, 53,169, 38,213,252,215,106,114,116,127, 82, 77,170, 73, 53,239,161,230, - 3, 5, 75,119, 1,133, 66,169,234, 1,147,238, 2, 10,133, 66,169, 29, 76, 53, 46,212,153,158, 59,181,113,178, 23,168, 38,213, -164,154, 84,147,106, 82, 77,170,249,208,105,214,164, 93,215, 61,135, 31, 72,104,248,148,106, 82, 77,170, 73, 53,169, 38,213,164, -154, 15, 29,180,138,144, 66,161, 80, 40, 20, 10,165,142,145,209, 93, 64,161, 60,220, 68,223,225,131, 86,244,109, 99,131, 62,220, -233,164, 80, 40, 20,128, 70,176, 40, 20, 10,133, 66,161, 80,168,193,162, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, - 10,229, 33,131,161,187,128, 66,121,184,137,166,109,176, 40, 20, 10,165,206,161, 17, 44, 10,133, 66,161, 80, 40,148, 58,198,214, -139,208,254,125,125, 52,170, 69,161, 80, 40, 20, 10,229, 94,243, 64,121, 17, 25, 53, 86, 20, 10,133, 66,161, 80,254, 33, 60, 48, - 94,132,173,194, 57, 82, 40, 20, 10,133, 66,161,220,107, 30, 24, 47,194, 62,136,174,145, 66,161, 80, 40, 20,202,191,146, 7, 54, -130, 69,163, 88, 20, 10,133, 66,161, 80,238, 23, 15,140, 23,145, 61,104,142,145, 66,161, 80, 40, 20,202,191,146, 7,202,139,220, -237, 97, 26,232,155,198,169, 38,213,164,154, 84,147,106, 82, 77,170,249,208, 65,199,193,162, 80, 40, 20, 10,133, 66,161, 6,139, - 66,161, 80, 40, 20, 10,133, 26, 44, 10,133, 66,161, 80, 40,148,135, 10, 25,221, 5, 20,202,195, 77,244,191,228, 29,125,209,244, - 93,130, 20, 10,229, 95, 4,141, 96, 81, 40, 20, 10,133, 66,161,212, 49, 12,170,238, 9,112,193, 9,157,218,244, 38,184, 64, 53, -169, 38,213,164,154, 84,147,106, 82,205,135, 78,179, 38,237, 11,160,220, 21,227, 69, 53,169, 38,213,164,154, 84,147,106, 82,205, -135, 79,243,129,130, 86, 17, 82, 42, 34, 67,245,109,243,106,154,127,175, 52, 41, 20, 10,133, 66,249, 71,223, 76, 41, 20, 27, 93, - 0, 12, 44,253,189, 29,192,113, 39,231,223, 43,205,251, 66, 84, 84,148, 70,173, 86,247,221,191,127,191, 34, 62, 62, 30, 39, 78, -156, 32, 63,252,240, 3,111, 50,153,254,136,141,141, 53,210,226,243, 96,208,182,109,219, 39, 24,134,153, 10, 0,132,144,207,206, -156, 57,179,251, 14,228,152,198,141, 27, 79, 80, 42,149, 3,228,114,185,191, 40,138,140,217,108,206, 48, 26,141,123,210,211,211, -231,163,118, 13,247, 59,120,121,121,141,141,140,140, 12,191,118,237, 90,106, 74, 74,202, 58, 0,187, 1, 60, 17, 28, 28,252, 98, - 88, 88, 88,208,197,139, 23, 47,231,228,228, 44, 7,240,191,251,152, 78, 10,133, 26, 44, 7, 96, 61, 61, 61, 31,215,104, 52, 19, -245,122,125,148,155,155,219, 69, 65, 16, 22,103,102,102,110,167, 39,222, 3, 85, 22, 6, 18, 66,228, 0,192,113,220,144,142, 29, - 59,134, 48, 12, 35, 49, 12, 67, 8, 33,204,201,147, 39,219,138,162,200, 2, 0,195, 48, 3, 75, 47,222, 66,109, 53, 5, 65, 96, - 78,159, 62,237,172,230, 93,161, 69,139, 22,179, 9, 33,254,213,238, 32,153,172,253,190,125,251,154,109,217,178, 69, 88,183,110, - 93,254,200,145, 35,117, 47,191,252,178,108,205,154, 53, 95, 3,248, 79,197,229,155, 55,111,190,128,101, 89, 47, 71,182, 47, 73, - 82, 78, 92, 92,220,127,105, 49,188,255, 48, 12, 51,245,181,185, 7,123, 72, 4,248,110, 90, 79,182,212,188,212,214,172,125,255, -212, 83, 79, 61,219,180,105, 83,153, 36, 73,224,121, 30,102,179,185, 89,108,108,236,163,187,119,239,110,159,148,148,244,140,147, -146, 3,167, 77,155,182,114,214,172, 89,222,114,185,156,225,121,190,243,143, 63,254,216,111,236,216,177,103,151, 47, 95,222,102, -196,136, 17,174,182,233, 31,125,244, 81,255, 57,115,230,188, 3, 96,227,125, 72, 39,133, 66,111,170,213,205,212,233,116, 77,188, -189,189,223, 45, 44, 44,236,223,190,125,251,130,209,163, 71, 95, 61,119,238, 92, 92,100,100,164,126,245,234,213,159,242, 60,191, -212,211,211,243,143,194,194,194,249, 89, 89, 89,113, 78,110,187, 9,128,209, 0,250, 3, 8, 4,144, 1, 96, 39,128,149, 0,226, -107,147, 25,127,127,255, 86, 46, 46, 46, 83, 24,134,233, 92, 92, 92, 28,232,226,226,146, 65, 8, 57, 89, 84, 84, 52,239,198,141, - 27,177,181,209, 12, 8, 8,104, 4,224,109,153, 76,214, 93, 20,197,134, 28,199, 37,139,162,120, 68, 20,197, 37,153,153,153,151, -107,163,249, 72,160,110,144,164,115,155,207,115,154, 32,189, 73, 80,232, 84, 50, 94, 46,153, 82,165,226,252,105,167, 82,139,127, -249, 39, 20, 12,165, 82,201,174, 91,183,174,141, 82,169, 4, 0, 88, 44, 22, 68, 70, 70,222,209,123,162,228,114, 57, 59,111,222, -188, 54, 10,133, 2, 0, 96,181, 90,209,187,119,239,127,196,187,167, 24,134, 9,140,137,137,113,183,165,173, 34,162, 40, 98,200, -144, 33,161, 74,165, 18,203,151, 47, 23,114,114,114,162,190,251,238,187,152,175,191,254,218,235,251,239,191, 31, 94,153,193, 98, - 89,214,171, 42, 77, 81, 20, 97,181, 90, 33, 8, 2, 44, 22, 11,122,245,234, 69,175, 70,255, 16, 8, 33, 33, 4,192,206,115, 38, - 0,168,127, 39, 90, 26,141, 38, 98,232,208,161,178,236,236,108,200,229,114, 88,173, 86,220,184,113, 3,141, 26, 53,226, 44, 22, - 75, 83,103,245,154, 53,107, 54,118,206,156, 57, 62, 59,118,236,176,174, 95,191,222,252,216, 99,143, 41, 94,125,245, 85,183, 30, - 61,122,116, 15, 12, 12,100,191,251,238, 59,243,222,189,123,173, 47,188,240,130,106,246,236,217, 62, 59,119,238,124,246,252,249, -243, 27,239,117, 58, 41, 20, 74, 53, 6, 75,167,211, 29,210,233,116,141,223,120,227,141,248,241,227,199,255,161,211,233, 68, 0, -184,113,227,134,106,200,144, 33,217,195,134, 13,187,105, 48, 24,184,165, 75,151, 6,127,245,213, 87,123,116, 58, 93,186, 94,175, -239,232,200,189, 12,192, 68,150,101,223,238,219,183,239, 33,158,231,179, 55,111,222,252,211,240,225,195,187, 73,146,228,178,127, -255,254,223, 69, 81,252, 6,192, 23, 78, 68,199,184,176,176,176,104, 47, 47,175, 73,203,150, 45, 83, 53,108,216, 16, 90,173, 22, - 69, 69, 69,193,151, 47, 95, 14,154, 56,113,226, 96,141, 70,179,216,221,221,253,131,216,216, 88,222,209,123,174,191,191,255,127, - 92, 93, 93, 63,249,244,211, 79,213, 45, 90,180, 96,180, 90, 45,146,146,146, 90, 30, 63,126, 60,242,219,111,191,125,149,101,217, -153,233,233,233, 14,167,179, 39, 32, 51, 55,246,222,237, 26,218,178,215,242,149,223, 50, 94, 46, 90,200, 24, 6,188,213, 42,207, - 50, 24,195,222, 26, 55,230,167,206,170, 75,199,138,228, 89,125,226,226, 96,189,199,101, 65, 0,176,157,227,184, 33, 74,165,146, - 29, 50,100, 8,246,238,221,203,152, 76, 38, 25, 0,168,213,106, 97,200,144, 33,208,104, 52,176, 88, 44, 18, 74,170,243, 4, 0, -170,210,245,205,213,105,202,229,114,182, 87,175, 94,134,211,167, 79,231, 26, 12, 6,185, 77,179, 87,175, 94,245, 84, 42,149,150, -231,121, 71, 53,239,166,169,196,149, 43, 87,110, 51, 66, 55,111,222, 68,110,110, 46,204,102, 51,147,151,151, 7, 81, 20, 97, 54, -155,179, 69, 81, 4,203,178,182, 50, 93, 41, 10,133, 2, 9, 9, 9,183, 77,183, 90,173, 48, 26,141,224,121, 30,133,133,133, 26, -181, 90,221,184, 91,183,110,105, 0,182,232,245,250,249,231,206,157, 75,166,151,167,251, 70,202,239,103, 76,193, 0,172, 0,174, -221,161,113,151, 0,224,200,145, 35,200,202,202, 66,118,118, 54,178,179,179, 17, 20, 20, 4, 66,136,211,209,255,248,248,248, 69, -109,219,182,101,206,158, 61,187, 13,192,202, 77,155, 54, 13,189,117,235,214,178,201,147, 39,215,155, 55,111,222,173, 41, 83,166, -140, 3,240,219,166, 77,155, 94,105,213,170,213,160,243,231,207,127,121, 63,210, 73,161, 80,170,105,228, 78, 8,241,111,210,164, -201,173,133, 11, 23, 54,155, 54,109, 90,125,189, 94,207,149, 70,137, 76, 0, 96, 48, 24,184,169, 83,167,122,207,157, 59,183,153, - 74,165,202, 19, 4,193,187, 18,153,202,186, 90,190,237,230,230, 54,248,234,213,171,155,154, 53,107, 86,111,206,156, 57,103, 92, - 92, 92,200,151, 95,126, 25,219,168, 81, 35,191,228,228,228,181,110,110,110,189, 1, 76,170, 34,105,183,105,134,134,134,126, 52, -124,248,240, 73,199,142, 29, 83,181,110,221, 26,174,174,174,224, 56, 14, 30, 30, 30,232,212,169, 19,115,248,240, 97,213,128, 1, - 3, 38, 20, 20, 20,204,115, 84, 51, 32, 32, 96, 82,191,126,253, 62, 61,125,250,180,166, 79,159, 62,140, 82,169, 68,126,126, 62, -148, 74, 37,186,116,233,194, 44,251,122,137,166,101,139,230, 31, 5, 6, 6,206,114, 84,211,220,196,107,207,200,241, 83,123,111, -223,185,155,241,245,245,197,213, 47,102,225, 72,143, 72, 36,126, 60, 13,126,126,126,216,182, 99, 23, 51,112,212,248,110,110,188, -239,126, 71, 53,235, 0,123,205,227,145,145,145, 49,113,113,113,232,222,189, 59,126,250,233,167,214,147, 39, 79, 30, 63,121,242, -228,241, 63,253,244, 83,235,238,221,187, 35, 46, 46, 14,145,145,145, 49, 40,105, 43, 53, 30,192,173,210,207,248,234, 52, 15, 29, - 58,132,222,189,123,231,109,218,180,169,209,140, 25, 51,102,207,152, 49, 99,246, 79, 63,253, 20,214,187,119,239,188, 67,135, 14, - 57,171,121, 55,242, 94,102,168, 42,126, 8, 33,144, 36, 9, 62, 62, 62, 55,119,236,216, 65, 6, 14, 28,200, 53,104,208, 32, 99, -200,144, 33,170,147, 39, 79, 18,134, 97,182, 59,147, 78, 66, 8,140, 70, 35,140, 70, 35,174, 93,187,166, 89,188,120,113,183, 73, -147, 38, 53,249,241,199, 31, 3, 38, 76,152, 48,206,205,205, 45,182,117,235,214, 33,247, 58,239, 84,179, 44,242,120,163,212, 92, - 21,179, 44,155, 82, 91,205, 97,195,134,181, 12, 9, 9,241,253,241,162, 39,242, 20,205, 32,202,221, 33, 41, 60, 32,214,239,128, - 68, 69, 63,248,251,251,251, 6, 7, 7,119,113, 50,157,123,206,158, 61,219, 31,192,114, 0, 34,128,159,167, 76,153,242, 58,195, - 48,191, 76,153, 50,101, 12,128,159, 75,167,175, 58,127,254,252, 32, 0, 7,238, 83, 58,105, 89,162,154,117, 10, 33,164, 3, 33, -228,201,210, 79, 71, 66, 72,167, 10,255,149, 21,150,123,172,138,239, 39, 43,252,239, 80, 97,189, 14,117,109,176,136,221,199,246, - 68,195,127,254,249,231, 39,190,253,246,219,189,153,153,153,126, 97, 97, 97, 79, 14, 29, 58, 52,164,176,176,144, 29, 54,108, 88, -168,159,159,223,192, 3, 7, 14, 52, 24, 54,108,216,254,225,195,135, 31,103, 24,198,145,118, 51,141, 56,142,123,231,236,217,179, - 71, 67, 67, 67,173, 25, 25, 25,174,109,219,182, 45, 2,128,240,240,112, 67,110,110,174,198,213,213, 21, 59,118,236, 56,197, 48, -204,104, 0,205,106, 18,244,243,243,107,235,229,229, 53,233,147, 79, 62, 81,113, 28, 87,233, 50, 42,149, 10,159,124,242,137,202, -205,205,237, 13,127,127,255,206, 53,105,250,250,250, 70,184,186,186, 70, 47, 94,188, 88,109,177, 88, 96,181, 90,225,235,235, 11, -157, 78,135,204,204, 76,164, 95,191,142,155, 73, 73,152,240,218,107, 26, 23,141,230, 29, 63, 63,191, 54, 53,105,118, 11,209, 13, -209, 5, 52,127,244,173,183, 39,226,210,196,215,176, 55, 64,137, 6,111, 79, 69,235,131, 23, 16, 56,115, 62, 14,132,185, 33,230, -153,199,241,206, 59,239, 66,225, 19,246, 72,151, 64,151,145,247, 37,164, 41,147, 17,149, 74, 5,147,201, 36, 59,114,228, 72,119, - 65, 16,228,130, 32,200, 15, 31, 62,252,232, 31,127,252,209,127,206,156, 57, 79,104, 52,154,113,157, 59,119,254,158, 97,152, 69, -132, 16, 13, 33, 68, 3, 96,158, 93,228,233, 54, 77,185, 92, 14,163,209, 40, 63,125,250,244, 24, 81, 20,149,162, 40, 42, 79,159, - 62,253,230,129, 3, 7, 94, 92,190,124,185,211,154,247, 10,142,227, 32,147,201, 32,151,203,209,166, 77,155,171, 27, 54,108,224, -253,253,253,101, 43, 86,172,240,244,241,241,113,249,254,251,239,243,243,242,242, 62,119, 70,211, 98,177,192,108, 54,195,104, 52, -226,200,145, 35, 13,223,120,227, 13,153,197, 98, 17, 71,141, 26,117,139,231,121,243,155,137,186,117,110, 0, 0, 32, 0, 73, 68, - 65, 84,111,190,233,166,211,233,222,165,207,127,247, 7, 66,136, 8,160, 24,128,158, 16, 98, 6,128,144,144, 16,149,191,191,127, -171,144,144, 16,135,203,163, 94,175,255,102,193,130, 5,129,172,202, 3, 71, 45, 3,176,137,204,194, 30,143,175,145, 29, 58, 25, -190, 65, 77,208,175, 95, 63, 31,134, 97,150,212, 65,146,183, 0, 24, 14,224,215,218,172,124,183,211,217,190,125,251,238,237,218, -181, 59, 29, 21, 21,149,217,174, 93,187,211,237,219,183,239,126,167, 25,158, 57, 6,143,205,125,139, 77,155, 53, 22,100,238, 91, -108,218,204, 49,120,140,150,220, 7,227,244,171,232, 69,236,240,102, 24,102, 59,195, 48,219,167, 79,159,222, 11, 64,253, 10,255, - 31,177, 95, 14,128,178,178,111,219,199,110,186, 55, 33,228, 73,187,245,188,235,236,126,106,247,187,210,106, 14,111,111,111,203, -123,239,189,119,214,100, 50, 93,248,254,251,239, 27,143, 31, 63,190,109, 72, 72, 72,194,176, 97,195,126,215,106,181,130,173,141, -142,131,188, 54, 96,192,128, 29,245,234,213, 99,114,114,114, 20, 22,139, 69,118,227,198, 13,133, 40,138, 12,199,113,196, 96, 48, -200, 18, 19, 19,229, 86,171, 85,234,220,185,243,214,227,199,143,143, 6,240, 78,117,130, 90,173,246,205, 21, 43, 86,168,171, 50, - 87,162, 40, 66,175,215, 67, 16, 4,204,156, 57, 83, 61,105,210,164,137, 0, 78, 84,167, 41,151,203, 39, 44, 92,184, 80,109,171, - 2,146, 36, 9,177,177,177,200,185,121, 19,230,162, 66, 88,138, 10, 97, 41,200, 3,171, 47,192,139,253,159, 80, 47,255,117,243, -127, 1,188, 88,237, 77, 85,165,155,251,253,202,111, 33,138, 34, 50, 54, 87,222, 36,226,214,177,131, 16, 5, 30,179, 63,155,199, -188,243,218,136, 57, 64,241,166,127, 74,169, 87, 42,149,236, 23, 95,124,209, 76,169, 84,130, 97, 24, 98,177, 88,208,162, 69, 11, -230, 14, 53,185, 69,139, 22,181, 85, 40, 20,140, 77,179,101,203,150,204, 63,237,140, 87, 40, 20,208,104, 52, 8, 13, 13, 53, 14, - 26, 52,232,248,162, 69,139,130, 57,142,211,202,100,178, 93, 5, 5, 5,115, 46, 93,186,228, 84, 53,146,217,108,134,201,100,130, -201,100, 66, 74, 74, 74,131,198,141, 27, 51,255,249,207,127,196,226,226,226,176, 85,171, 86, 93,217,180,105,147,118,201,146, 37, -195, 0,188, 77,175,183,247,150, 70,141, 26, 41, 1,184, 7,215,151, 21,203, 57, 20,103, 10,130,111, 64, 64,192, 84, 65, 16,218, -135,135,135,123, 38, 38, 38,230,249,251,251,159, 96, 89,118, 99, 90, 90, 90,102, 13, 70,141, 17, 4, 1, 99, 58,230, 99, 92,103, - 22,130, 32, 32, 63, 63, 31, 41, 41, 41,184,120,241, 34, 78,158,188, 88,171, 52,134,134,134,190,166, 86,171,251, 42,149,202, 80, - 81, 20, 89,131,193,144,108, 54,155,247,102,100,100,124, 83,197,141, 9,247, 35,157,118,250,243,135, 14, 29,234,239,238,238,142, - 51,103,206,248,159, 59,119,110, 62,128,246,119,116,237,144,179,223,141,122,125, 73, 64, 61, 15, 15, 36,197,109, 11,216,178,243, -199,239, 0, 41,144,150,224, 7,130,170,238, 1,217,132,144,129,165, 1,160,237,115,230,204, 25, 88, 90,190, 6,218,255,119,160, - 60,222,182, 28,195, 48,219, 43,155, 94,151, 6,139, 84,147, 49,168,213,106,113,236,216,177, 9, 91,183,110, 13,109,223,190,253, - 95, 85, 53, 6,174,129,174,205,154, 53, 75, 62,117,234, 20,241,246,246,182, 72,146,196,104,181, 90, 81,163,209, 72, 5, 5, 5, -224,121,158, 36, 39, 39,203, 82, 82, 82, 20, 94, 94, 94, 10, 0, 53,134,234,228,114,121,151,134, 13, 27, 86, 25, 41,208,235,245, - 40, 42, 42,130,217,108,134,175,175, 47,195,178,108,167, 26,195,122, 44,219,173, 89,179,102, 76, 94, 94, 30,252,253,253,113,244, -232, 81,232, 11,242, 97, 46, 42,130,185, 32, 31,214,194, 2,136,133,249,200,191,153,137, 80,191, 64,134, 97,152, 46, 53,105, 10, -156, 38,196, 71,231,130,196, 89, 83,209, 33, 54, 25,140, 92,129, 83, 45,253, 64,248,146,166, 86, 29,207,103,128, 81, 40,241,215, -132,151,209,224,249, 55,192,179,170,128,251, 81,178, 5, 65, 96,204,102, 51,212,106,181,208,189,123,247, 35, 28,199, 61,170, 84, - 42,217,113,227,198,225,198,141, 27,229, 78,128,113,227,198, 65,163,209,192,108, 54, 11, 0, 38,163,138, 54, 83,130, 32, 48, 60, -207, 67,163,209,240,237,219,183,255,134,227,184, 55,149, 74, 37,215,180,105,211,172,185,115,231,102,184,184,184,184,164,164,164, -220, 82, 42,149,105,161,161,161, 29, 53, 26, 77, 72, 77,154,247, 18,149, 74, 5,153, 76, 6,150,101, 81,191,126,253,226,220,220, -220,147,215,174, 93,123,174, 54, 90,162, 40,194, 98,177,128,231,121,152, 76, 38, 72,146,132,115,231,206, 65,165, 82,201, 69, 81, -188, 40,138,162, 86, 46,151,131,227, 56, 58, 70,221, 61, 38, 42, 42,234,209, 80, 13,230,143,243, 51,123, 54, 26,232,162,215,170, -184,226,103, 55,243, 29, 30,123,236,153, 39, 38, 79,158,170,243,242,242, 82, 94,191,126,221,244,229,151, 95, 54,252,237,183,223, - 24,148,180, 19,173,146,140,140,140, 95,230,206,157, 91,239,209, 71, 31, 13,147,203,229, 76,126,126, 62,178,179,179,113,243,230, - 77,164,164,164,144,164,164,164,171,130, 32,252,228, 76, 26, 91,181,106,181,106,224,192,129,163, 90,180,104, 33, 39,132,128,231, -121, 24, 12,134,182, 39, 79,158, 28,124,244,232,209,238,215,175, 95,119,186, 92,102,102,102,254,244,217,103,159,185,244,236,217, -179,153, 92, 46,103,235, 34,157, 21,110,104,254, 58,157, 14,123,247,238,133,155,155, 27,106,234,173,235, 8, 86, 65, 10,168,231, - 81, 31,166,203, 11,224,239, 22, 2,171, 32, 5,208, 18,252, 64, 69,177,152, 74, 76,208,255, 8, 33, 79,222,169, 25,186, 91,102, -170, 86, 17, 44, 27, 55,110,220, 80,233,245,122,153, 36, 73,172,217,108,150, 75,146, 4,185, 92,206, 59,185,189, 22, 67,135, 14, - 61,209,161, 67, 7, 67,105, 4, 67,112,119,119, 23, 10, 10, 10, 80,106,176, 36,153, 76,102,210,233,116,166,176,176, 48,192,129, - 42, 66,163,209, 24,172,209,104,110,155,110, 48, 24,160,215,235,203, 12,150,193, 96,128,155,155, 27,138,139,139,107, 60,185, 69, - 81, 12,213,106,181,200,200,200, 0, 0,232,243,243, 96, 42, 44,132,181,168, 0,214,252, 60,240, 5,249,224, 11,242,192, 26,141, -240, 8, 12,130, 32, 8, 65, 53,105, 22,155, 69, 37, 7,130,155,219,127,129,239,155,147,171, 92,238,214,145, 3,208, 53,110, 10, -163,209,122, 63,198, 40,235,114,241,226,197,118,205,155, 55,199,144, 33, 67,240,204, 51,207,156,211,104, 52, 62, 75,150, 44,105, -145,158,158,126,219,194, 79, 61,245, 20,222,126,251,109, 12, 29, 58,116,237,217,179,103,151, 86,167,217,179,103, 79,244,234,213, -171,222, 51,207, 60,147,164,211,233, 98, 86,174, 92,217,113,230,204,153, 89, 6,131, 33, 61, 38, 38,166, 85, 90, 90,154, 54, 60, - 60,252, 96,100,100, 36,187, 99,199,142,144, 26, 52,239,181,233, 4,207,243,176, 90,173, 48,155,205, 32,132, 56, 28,101, 35,164, -124, 64,129,231,249,178, 30,132, 38,147, 9, 60,207, 51, 91,182,108,198,182,109,219,216,184,184, 75,129,211,166, 77, 71,126,126, - 62, 68, 81,164,151,217,123, 68,187,118,237,250,203,136,180, 98, 68, 3, 94,253,130,175,160,151,177, 68,127,249,219, 15,138,207, -121,200,204,230, 98,198,245,253, 15, 62,240,188,114,229,138,245,179,207, 62,203, 28, 50,100,136,250,245,215, 95,111,190, 99,199, -142,238, 65, 65, 65,223,166,166,166,230, 87, 21,248,236,220,185,243, 9, 79, 79,207, 70,235,215,175,207,202,200,200,168,199,243, -188,214, 98,177, 88, 45, 22,203, 21,171,213,122,212, 98,177,236,189,113,227, 70,140, 51,105,213,233,116,173, 71,142, 28, 41,207, -203,203,131, 76, 38,131,213,106, 69,118,118, 54,162,162,162,184,125,251,246,181,168, 77,254,227,226,226, 22,228,231,231, 31,220, -182,109, 91, 95, 23, 23,151,118, 74,165,178,129, 40,138,162,201,100,202, 50,153, 76,103,107,147,206, 10, 55,180,140,216,216, 88, -127, 87, 87, 87,164,167,167,131, 97,152,140, 59, 61,102, 10, 57,155,154,244,215,214, 32,127,183,134,136,143, 63, 1,133,156, 77, -165, 35, 6, 61,216, 17, 44,187,182, 82, 3,107, 48, 73,198,105,211,166,189,199, 48,204,246,105,211,166,189, 87, 77, 4, 75,180, - 95,206,110,249, 58,123,168,175,246, 38, 94, 84, 84, 36,251,223,255,254, 87, 63, 37, 37, 69,215,160, 65, 3, 67,100,100,100, 62, -195, 48, 68, 20, 69,246,214,173, 91, 46,105,105,105,106, 79, 79, 79,115, 80, 80, 80,129,131,219,187,252,214, 91,111,245,156, 49, - 99, 70,204,227,143, 63,158, 3, 0,121,121,121,200,206,206,182,245,210, 66, 70, 70, 6,123,250,244,233,122,187,118,237,106, 11, - 7,122,240,104, 52,154,148,162,162,162,166, 30, 30, 30,101, 55, 52,155,169,178,255,182, 90,173, 40, 42, 42,130,139,139, 75,141, - 39, 55,203,178,233,233,233,233,141,141, 70, 3,146, 19, 19, 97, 46, 42,128,181,176, 0,124, 97, 62,248,252,124,136,249,183,192, -234,139,160,211,104, 80,116, 43, 23, 28,199,221,168, 73,211, 69,197, 89,120, 65, 84,122,247, 27, 12, 48, 85,223,159, 61, 58,117, - 3,137,104, 13,141,230, 87,254, 30, 23,106, 25,128,129,182, 49,169, 52, 26, 13, 62,253,244, 83,196,196,196, 72,213, 85, 3, 43, -149, 74,176, 44, 43, 58,162,169, 82,169, 52, 51,102,204,208,156, 61,123, 86,173, 84, 42,161,211,233,180,103,207,158,109,245,231, -159,127,178, 6,131,129,107,220,184,241,208,128,128, 0,125, 13,154,119,213, 72, 85, 54, 77,175,215,151,181,155,186,117,235,150, - 76,173, 86,135,119,239,222,253,184,197, 98,249, 73, 16,132,213,177,177,177,133, 85, 62,105, 91,111,239, 12, 42, 73, 18, 4, 65, -128, 32, 8,144,201,100,210,150, 45, 91,241,213,210, 69,248,121,211,175,164,103,207,158,204,142, 29, 59, 32, 73, 82, 26,189,206, -222, 27, 36, 73,154,127, 96,234,211,106,136,162,222,124,112, 67,241,238, 92, 89,241,183, 23, 14,156,206,229,205,170, 38, 77,194, - 34,220, 92,221,217,239,215,125,123, 43, 51,235,234,229,175,190, 74, 11,154, 61,123,182, 71, 88, 88,152,123, 66, 66, 66, 0,128, -252, 42,140, 80,232,203, 47,191,252,234,173, 91,183,228, 43, 87,174, 92,147,158,158,126, 24,192,213,138, 65, 51,148,180, 51,148, - 3,240, 69, 73, 15,218, 61, 0,214, 86, 99, 86, 36,134, 97,112,240,224,193,219,122,251, 73,146, 84,107,135,145,153,153,153,215, -169, 83,167,214,151, 47, 95,222,146,159,159,191,190,146,235,236,224,200,200,200,103, 79,157, 58,245, 33,128, 43, 78, 70,176,222, -137,139,139,251, 92,146,164, 16,150,101,147, 9, 33, 83,238,244,152, 89,172,210,235, 91,119,110, 90,105,225,197, 96,165,156, 75, -177, 88,165, 55,104, 73,126,224,177,181,145,130,189,113,170,196, 24,253, 57,103,206, 28,205,220,185,115, 49,103,206,156,139,149, - 69,176,108, 70,107,206,156, 57, 23,109,203,217, 45,127,184,174, 13, 22, 83,201,141, 69, 55,125,250,244,174,109,219,182,205,120, -244,209, 71, 51, 27, 54,108,104,176,205,211,106,181, 22, 15, 15, 15,139,217,108, 86,101,100,100,120,255,245,215, 95, 13, 37, 73, -210, 56,176,189,253, 30, 30, 30,245, 78,159, 62, 93,127,227,198,141, 77, 98, 99, 99, 67,158,127,254,249,158,102,179, 25, 22,139, - 5,215,174, 93, 11, 89,177, 98,133,164, 80, 40,242, 25,134,249, 31, 74,122,195, 84, 11,207,243,199, 47, 95,190, 28,222,169, 83, - 39,134,231,249,114,166,202,254,183, 82,169, 68,122,122, 58,145, 36,233,164, 3,233, 60,113,250,212,169,198, 45,155, 55,135,185, - 32, 15,150,194,124, 88, 11,242, 33, 20,228, 67, 42,204, 7,171, 47, 66,253,122,114,104, 52, 46,184,156,145,137,210,180, 86,139, - 92, 48, 38,165, 23, 20, 54,109, 28,253, 5, 14,132,185,129,240,214,178,106, 65, 0,101,213,133,143,252,149,141, 35,127, 30,135, - 76, 52,167,223,207,146,108,177, 88,164, 97,195,134,157, 98, 89,182,206,222, 55,197,243,188, 52,126,252,248, 50,205,212,212,212, - 91,169,169,169,106,163,209,200,234,116, 58,253,253, 62,123,121,158,175,212, 32, 89, 44, 22, 24,141, 70,100,102,102, 42,247,236, -217,211,253,248,241,227,138, 75,151, 46,225,248,241,227,109,182,108,217, 50,189, 89,179,102,173,227,227,227,111, 56, 98,218, 36, - 73,130,237, 62, 72, 8, 1, 33,132, 3,128,173,191,109, 71,191,126,253,152,162,162, 34,108,219,182,173, 78,170, 81, 40, 14, 83, - 12, 65,212, 88, 14,109, 40,126, 55, 81, 89,120,209, 32,251, 36, 38, 38,102,247,128, 1, 3,142,248,251,134,185, 1,128, 74,161, -243,230,136,171,206,219,219, 91, 5, 0,254,254,254,237,120,158, 95,154,158,158,222,173, 50,193,167,158,122,234, 17, 31, 31,159, -182, 59,119,238, 60,155,158,158,126,164, 18,115,133,166, 77,155,206,188,112,225, 66,127,185, 92,206,216, 93,252, 73, 85, 6,107, -216,176, 97, 77,149, 74,101,253, 29,151,221, 81,168,104, 12,137,205, 7,225, 84, 16, 61, 90, 35, 89,209, 2,190,190,127,213,215, -106,181,109,174, 94,189,122,214,201,252, 7,143, 24, 49,226,247, 85,171, 86, 69,244,235,215, 79,121,236,216,177,219, 12, 86, 68, - 68,196,176,125,251,246, 13, 31, 55,110, 92,235,245,235,215, 15, 2,144,232,168,120,108,108,236, 49,148,188,177,161,206,248,232, - 27,236, 5,196,144,210, 64, 4, 45,193, 15,120,244,170,148,108,187,232, 83, 54, 0,166,194,255,179,165,231,144,133, 16, 98, 91, - 54,219, 46,106,101,169, 16,245,170,108, 94, 54,195, 48,117, 22,220,144, 85,243,228,189,231,218,181,107, 29, 70,140, 24,145,109, -111,174,236,171, 71,116, 58,157,217,205,205, 77,127,234,212, 41,127, 81, 20, 15, 58,176,189,149,251,246,237, 59,176,120,241,226, - 13,245,234,213,227, 95,124,241, 69,118,234,212,169, 71,114,115,115, 73,110,110, 46,150, 44, 89,210,163,123,247,238, 71,146,147, -147,197,152,152,152, 87, 0,244,171, 73,208, 96, 48,124,253,230,155,111, 62,123,228,200, 17,181,197, 98, 65,126,126,254,109,209, - 43,158,231,193,113, 28,150, 46, 93,106, 46, 46, 46, 94,228, 64, 36,227,155,175,191,254,122,248,138,175, 22,171,101,188, 21,134, -252, 60,136,165, 31,206, 84, 12,157,154, 69,227,182,222,200,207, 80, 97,221,206, 99, 70, 65, 16,190,174,209, 96,153,244,147,199, -141, 25,189,125,207,254, 3,168,223,173, 55,114, 14,236,186, 61, 26,228,237, 11,139,213,138, 79,102, 69, 19,198,152, 63,245, 94, - 7,112, 0,108, 47, 29, 77, 29, 0,182,159, 61,123,246,120,155, 54,109,250, 91, 44,150,234,140, 24, 36, 73,226,106,163,169, 82, -169,210,154, 54,109,186,191, 81,163, 70, 67, 1,160,121,243,230,191,177, 44,219,187, 6,205,187,106,176,102,204,152,129,185,115, -231, 98,218,180,105,101, 6,201,246, 0, 96, 54,155, 27,238,218,181, 75,121,236,216, 49,178,110,221,186,156,167,159,126,218,227, -249,231,159,247, 88,191,126,253,127, 0, 76,173, 74,115,202,148, 41, 88,190,124, 57,198,142, 29,123,219,124,142,227,164,244,244, - 52,152, 45,102,178,117,235,214, 12,153, 76,230,249,229,151, 95,106, 38, 77,154,196,208,107,237,189, 65, 20,197,247,187, 45,216, - 50, 17,208,240,130, 32, 44, 58,127, 62,230, 96,105,212,198,103,193,130, 5, 74, 0,248, 98,222, 23,114, 66,136,220, 54, 48,236, -199, 31,127,172, 30, 51,102,140, 79, 85,154,191,252,242, 75,222,199, 31,127, 92,255,245,215, 95,239,119,224,192, 1,245,169, 83, -167,118,161,228, 45, 5, 57,165,142,192, 43, 33, 33,225,152,183,183,183,223,166, 77,155, 26,247,237,219,215,165, 70, 23, 88, 92, -252,237,178,101,203, 66,231, 31,118,197,142,226,161, 72, 37,207,128,212, 35,168,167, 40, 66,115, 93, 10,122,250,165,250,175, 95, -191,126, 37,128,118, 78,100,191,197,211, 79, 63,189,121,213,170, 85, 13, 71,143, 30,157,118,236,216,177, 84, 0, 51, 43, 46, 20, - 19, 19,147,251,242,203, 47, 39,175, 89,179,166,177, 36, 73,187, 55,108,216,208, 15,192,101, 90,122, 40,247,204,121, 57, 16,200, -168,205,178,119, 19, 89, 53, 23,157,215,242,242,242, 34,167, 77,155,246,185,191,191,127,112,116,116,244,245,230,205,155, 23,219, -230,231,230,230,234, 14, 29, 58, 20, 86, 88, 88, 88, 36, 8,194, 40, 0,231, 42,145,105,137,242, 99,101, 36, 75,146,244,121,155, - 54,109,158,253,241,199, 31, 15,185,186,186, 22,158, 56,113,194,205,205,205,173,224,210,165, 75, 46, 28,199, 25,174, 94,189,138, -189,123,247,246, 0,240, 85, 21, 79, 73,229, 52, 51, 51, 51,207, 40,149,202, 47, 38, 77,154, 52,233,195, 15, 63, 84, 75,146, 4, -163,209,136,162,162, 34,152, 76,166,178,198,201, 27, 55,110, 52,155,205,230, 21, 25, 25, 25, 39, 28,208, 60,206,113,220,242, 69, - 95, 46, 26,255,198,179, 35,148, 36, 63, 23, 5,153, 70, 48,166, 98,232,212, 74,180,232, 29,128,226, 92, 6,171, 14,157,182,220, -178, 88, 55,101,100,100, 28,172, 73,243, 88,170,254,247, 78,202,196,189, 31,207,138,126,108,250,234, 95, 33, 73, 18,254,122,243, - 69,228, 29,222, 11,109,243, 86,120,228,175,108, 88, 44, 22, 76,155, 50, 9,156, 33,235,200,201,212,226,159, 29,216,159,117,129, -189,230,113,252,253,238, 50, 1,192,248,115,231,206,141,138,136,136,192,184,113,227,240,212, 83, 79,149, 91,113,243,230,205, 88, -182,108, 25,204,102,243, 40, 0,177, 0,150, 58,163,217,176, 97,195,142, 45, 90,180,224,252,253,253, 13,165,102,163,247,197,139, - 23, 59, 68, 68, 68,212,164, 89,231,121, 39,132,228, 37, 38, 38,186,205,155, 55,143,177, 90,173,152, 57,115, 38,108,198,210, 22, -113,122,255,253,247,253, 93, 93, 93, 49,127,254,124, 75, 78, 78, 78,159,220,220,220,125,139, 23, 47,246,218,184,113,227,115,118, - 6,203, 94,243,102, 92, 92,156,235,242,229,203, 89, 65, 16,176, 96,193,130,219, 34, 90,239,188,243, 14,172, 86, 30,114,153,220, - 98, 54,153, 91,104, 52,154, 43,158,158,158, 26, 73,146,200, 61, 60,238, 15,181,230,249,243,231,247,160,164,106,174, 82,108,237, -232,140, 70, 35,114,114,114,144,147,147, 3,119,119,247,138, 79,219,229, 52,141, 70,227,217, 41, 83,166,196,124,243,205, 55,253, -254,252,243,207, 17,135, 15, 31, 30,176,119,239, 94, 83,114,114,178,192,243, 60,241,243,243,147,117,235,214, 77, 61, 96,192, 0, - 23,149, 74,197,190,255,254,251, 57,159,126,250,169, 23,128,220,170, 52, 9, 33,156, 36, 73,248,111,247, 66, 76,233, 37,131,217, - 92,242, 64,153,145,145,142,139, 23, 47,226,248,241,120, 48, 12,195, 58,185, 63, 23,173, 95,191, 62, 76,169, 84, 50, 27, 54,108, - 8,222,176, 97,195,132,154,118,222,218,181,107, 67, 55,108,216,176, 20,192, 99, 40,105,248, 68,203, 18,213,164, 56, 99,176, 74, -185, 40, 8, 66,191,148,148,148,110,163, 71,143,254, 44, 34, 34,194, 44, 8,130,124,247,238,221,205,114,114,114,148,130, 32, 76, -129,243,245,149,203, 77, 38, 19,134, 12, 25, 50,165, 81,163, 70,251, 98, 99, 99, 91, 63,249,228,147,187, 55,111,222,220, 77, 16, -132,171, 23, 46, 92, 24, 5, 96, 81,169,193,114,136,164,164,164,153,123,247,238,101, 78,156, 56,241,238,180,105,211, 84,222,222, -222,140,135,135, 7,140, 70, 35, 82, 83, 83,201,154, 53,107,204,102,179,249, 43,119,119,247, 15, 28,213,244,246,246,158,122,248, -244,105,101,194,149,196, 87, 94,233,255,184, 58, 56,188, 41,116, 12,160,191,149,139, 67,135, 50,177,250,228, 89, 83,142,197,250, - 3,199,113, 14,119,165, 15,188,146,221,111,207,166, 85, 59, 15,238,223,255,216,236,185,159, 51,254, 47,188, 1,151,144,134,144, - 66,155,224,208,193,131,248,244,227,153,132,211,103, 29,230,175,100, 61,126, 31,203,132,205, 1,168, 0,204,147, 36, 73, 86,250, - 52,143,183,223,126, 27,246,175,206, 89,182,108, 25,140, 70, 35, 0,200, 24,134,153, 7,224, 59, 84, 61,162,123,101,154, 65,191, -255,254,123,144,189,102, 68, 68,132,163,154,117, 74, 86, 86,214, 7,175,189,246,218, 92,185, 92,238, 46, 73,210,109,141,211, 1, -192,197,197, 5,133,133,133, 16, 69, 81,168, 87,175, 94, 60,207,243,144,201,100, 85,158, 71,197,197,197, 31,140, 29, 59,246, 19, -134, 97,170,140,116,104, 52,154,228,163, 71,143, 54,121,254,249,231,217, 77,155, 54, 93,123,238,185,231, 84,127,254,249,167,136, - 90,142,105, 68,185,251, 16, 66, 80, 92, 92, 12, 84, 63, 36, 66,202,143, 63,254, 56, 37, 38, 38, 70, 61,118,236,216,118, 47,188, -240,130, 91,175, 94,189,116,246, 11, 24,141, 70,105,219,182,109,197,203,151, 47,207, 61,124,248,240,255, 94,125,245,213,161, 0, -170, 12, 23,103,100,100,252,190,100,201, 18,247,158, 61,123,134,139,162,136,156,156,156,178, 54, 88,105,105,105, 72, 78, 78, 78, -150, 36,105,171,147,217,121,243,249,231,159,223,177,102,205,154,144,209,163, 71,167,109,220,184,113, 43,128,202,218,212,234,134, - 13, 27, 54,120,205,154, 53, 33, 99,198,140, 73, 1, 48, 1,180, 85, 57,133, 82,167, 12,225, 56,238, 79, 0, 67,156,112,184, 85, - 17, 2,224, 19,148,212,155, 22,148, 58,225,217, 0, 26,213, 86,211,223,223,191, 85,120,120,248, 15, 77,155, 54,189, 30, 16, 16, -192, 55,109,218, 52, 57, 60, 60,124, 83,131, 6, 13,162,106,171,233,231,231,215, 53, 40, 40,104,119, 96, 96, 96, 78,112,128, 63, - 9, 12, 12,188, 21, 28, 28,188, 55, 32, 32,160,103,109, 53, 59, 5,233, 6,118,106, 26, 16,223, 46,178,137, 57,188, 81, 67, 18, -213,162,137,185,115,179,160,132,142,193, 46,195,238, 96,127,222,201, 83, 72,101,168, 0, 24, 72, 41, 12,195,240,109,218,180, 89, - 30, 21, 21,181, 52, 42, 42,106,105,235,214,173, 87, 48, 12,195,219,230, 3, 48,224,239, 65, 65,239,165,230,221,200,123,165,116, -235,214,109,237,134, 13, 27,196,217,179,103, 23,116,238,220, 57,119,246,236,217, 5, 27, 54,108, 16,187,117,235,182,182,182,154, -173, 91,183, 14,233,222,189,251,173,181,107,215, 10,151, 47, 95, 38,107,215,174, 21,186,119,239,126,171,194, 72,238,247, 61,239, - 15,163,230,240,225,195, 19,137, 29, 22,139,133,100,103,103,147,132,132, 4,114,228,200, 17,242,248,227,143, 39, 58,160, 41, 3, -208, 11,192,130,192,192,192, 61, 93,187,118,189,220,189,123,247, 43,141, 26, 53,250, 83,161, 80,172, 7,240, 50, 74,222,119,232, -135,146, 97, 73,124,171,211,244,243,243,235, 18, 17, 17, 49,187,109,219,182, 91, 59,119,238,124,172, 93,187,118,199,155, 54,109, -186,189, 97,195,134,115,253,252,252, 30,169,101,222,131, 71,140, 24,113, 81,175,215,139, 61,122,244,216, 86,217, 74, 81, 81, 81, -107,244,122,189,248,194, 11, 47, 36,160,228, 61,178,180, 44, 81,205,187,161, 73,121, 88, 11,138, 51,163, 56, 63, 32,121, 31, 95, -106,114, 12, 40,255,218,154,154,230,223,107,205,123,178, 63,155, 55,111,238,249,216, 99,143,189,185,117,235,214,119,175, 94,189, -250,238,214,173, 91,223,237,219,183,239,155,205,155, 55,247,188,147,116,182,110,221, 58,164, 91,183,110, 95,117,237,218, 53,173, - 91,183,110, 95, 85, 48, 87,244, 34,126,159, 52, 7, 13, 26,180,115,196,136, 17,137, 35, 71,142,188, 50,114,228,200,196,225,195, -135, 39, 14, 29, 58, 52,113,208,160, 65,137,253,250,245, 75,236,213,171,215,206, 7, 40,239,193, 29, 58,116,248,193,213,213,245, -133,202,102, 42, 20,138,193, 93,186,116,249, 25, 64, 99, 90,150,168, 38, 53, 88,212, 96, 81,205,186,209, 84,161,250,215,213, 84, - 54,255,126,104,210,227, 78, 53,169, 38,213,164,154,212, 96,253, 99,144,209, 93, 64,169, 1,243, 29,206,191, 87,154, 20, 10,133, - 66,161,252, 99, 96,170,113,161,206,244, 14,168,141,147,189, 64, 53,169, 38,213,164,154, 84,147,106, 82,205,135, 78,179,162,246, -211, 21,166, 87, 28, 7,114, 5,181,107,117,115, 96,168, 38,213,164,154, 84,147,106, 82, 77,170,249,240,105, 86,198,232,127,171, - 1,162, 47,148,165, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,229,159,141, 67,141,220, 21, 10, 69, 36, 33,228, - 85,134, 97, 26, 48, 12,115,131, 16,242,157,213,106,189,248,176,237, 44,133, 66, 17,201, 48,204,171,132,144, 6,132,144, 27, 12, -195,220,215,253, 64, 0,102,102,116,201,104,210, 31, 69,131, 48,213, 15,124, 72,161, 80, 40, 20, 10,229,126, 27,172,144,192,192, - 17, 44,199, 44,182,242,162, 39, 47, 8,236,146, 37, 75,216, 65,131, 6, 97,219,182,109,152,240,246,219, 19, 88,142,149, 20, 50, - 89, 30,145,132, 9,201,105,153, 63, 58,178,177,161, 67,135,102,241, 60, 95,229,168,214, 28,199,221,220,178,101,139,239,157,102, -202, 63,234,153, 44,222,106,173,114, 59, 50,153,252,102,230,217,159, 29,218, 78, 96,160,223, 8,142, 97, 23,243,162,228, 41,138, - 18,251,213, 87, 95,149,237,135,183,222,122,107,130, 92, 38,147, 20,114, 46, 79, 18,201,132,228,180,180, 31,239,213,129,179, 55, - 87, 0, 48, 51, 26, 12,137, 6,168,201,162, 80, 40, 20, 10,229, 31,108,176, 24, 22, 75, 55,124, 51,207, 51,247, 86, 30, 54,110, -222,141,136,136, 8, 92,186,116, 9, 17, 17, 17,232,214,177, 53,251, 68,151, 54, 44,199,194,123,198, 87,235,150, 2,112,200, 88, -240, 60,239,243,219,111,191,129, 97, 24,136,162, 8, 65, 16, 32, 8, 2,120,158, 71, 81, 81, 17, 38, 78,156,232, 83, 23,153,226, -173, 86,159,171,255,251, 21,114,142, 1, 47, 18,240, 2, 1, 47, 72,176,138, 4,133, 6, 1,189,159,124,222,225,237,176, 96,151, -126,183,120,158,103,126, 65, 1,126,221,177,167,220,126,232,221,181, 3,251,204,128, 71, 89,173, 70,225, 61,122,234,103, 14,239, -135,186,192,222, 92,149,155, 22, 77, 13, 22,133, 66,161, 80, 40,255, 88,131,101,225, 69, 79,223,122,238, 88,253,221,119,152, 50, -237, 99, 52,107,214, 12,132, 16, 48, 12,131,247, 62,156,133,133, 31, 79,195,200,254, 61,192, 11,146,103, 53,250,183,117,213,100, - 24, 6,215,175, 95,135,209,104, 44,247,137,140,140,116, 52,205, 14,117,255,148,115, 12,126,143, 45,130,149,151, 96, 21, 74, 63, -188,132, 94, 45, 93,157,210,228, 69,201,211,195, 77,135,149,223, 44,195,148, 89,243,202,237,135,169,239,125,136,175,231,126,128, -119,198,189, 4, 11, 47,122,214, 38,157, 78, 66, 53,169, 38,213,164,154, 84,147,106, 62,168,154, 15,164,193,234, 9,224,160,205, - 3,149,153, 11,139, 9, 45,130,234, 99,217,252, 79, 64,192, 66, 34, 4, 32, 0,145,120, 52,244,210,194,104, 48, 56,189, 65, 73, -146, 96,181, 90,193,243, 60, 86,172, 88, 1,189, 94, 15, 73,146, 16, 17, 17, 1, 0,136,138,138,178,143,192,164,196,198,198,134, -212,164,233,221,114, 72, 50, 8,130,237,167,125, 52,239, 91, 28,139,189, 10, 66, 0,149, 70,139,225, 47,140,129, 40, 17, 88,121, -231,223, 79,106, 50, 24,224,167,147, 99,225,167, 31,130,149, 43,192,130, 1,203, 50, 96, 25, 9,205, 2, 61, 97, 46,121, 57,241, - 61,229,163,104,144,138, 81,172,143,162, 65,162,105,153,166, 80, 40, 20,202,191,147, 74,189,200,191,221, 96, 29,172, 44, 51, 22, -147, 17,129,158, 10, 52,208,185, 67, 16, 68, 92,180,250,161,200, 96,130,213,202, 35,217,106,197,149, 51,153,120,228,145, 71,192, -243,188,104,181, 90,161, 80, 40, 10,182,108,217, 82,175, 38,131,197,243, 60,172, 86, 43,138,139,139,177,126,253,122,200,100, 50, - 72, 82,137,241, 41,121,199,111,201,119,215,174, 93,131, 29,202, 5, 65,240,149, 83,191,192, 85,205, 65,144, 8, 4,129,128, 23, - 1, 81, 34, 48, 88, 36, 12,123,237, 3, 8,146, 4, 65,146, 96,113,192, 96,217, 27, 54, 1,192,144,233, 27, 1,232,202,230,187, -169, 8,166,116,101,161, 80,170,160, 84,112, 48, 27, 13,247,252,192, 49, 0, 33,209,127, 87, 21,210, 70,238, 20, 10,133, 66,249, -151,115,240, 65, 48, 86, 21, 13,150,189,123, 60,244,183,193, 50, 64,224, 69,240,130, 8,129, 23, 80,160, 55,226,243,207, 63,135, - 74,165, 2,195, 48,101,102, 73,146, 36,150,231,121, 12, 24, 48,192,179,166, 13,138,162, 8,171,213, 10,171,213, 10, 66, 8, 56, -142, 67,167, 78,157,110, 91,238,196,137, 19, 78,101,196, 85,205,161,225, 99,211,111,155,126,242,151, 79, 64, 8,129, 40,150,124, - 28, 49, 88, 53, 25,182,182, 61,159,129,217,194,131, 16, 0,164, 36,194,117, 63, 96, 0, 98,107,115, 21, 77, 79, 76, 10,133, 66, -161, 60, 24,148,243, 34, 15,138,193, 42,231, 30,205, 70, 35,120, 94,128, 32,136,224,249, 18, 99,164,209,104,208,163, 71,143, 18, - 31, 98, 23,109,218,189,123, 55,172, 86,107,141, 27,180, 53,106, 47, 53,102, 32,132, 96,227,198,141,144,203,229,101, 31,133, 66, -225,116, 70, 4,145, 96,250,212,255, 66, 33, 99, 33,151,177,101,223, 34, 33, 32,164,196, 28,137, 18,129,153,119, 44,200, 83,157, - 97, 3, 0,139,217, 10, 16, 2, 2, 2, 99,113, 49, 61, 29, 40, 20, 10,133, 66,169, 27, 30,136, 72,150,205, 96, 61,138, 74,170, -151, 44,198,226,210,232,149, 8, 94, 16,202, 12,212,252,249,243, 33,147,201,160, 84, 42, 33,147,201,202, 12,145, 35, 6,203,100, - 50, 33, 44, 44, 12, 22,139, 5, 17, 17, 17, 32,132,224,217,103,159,189,109,185, 83,167, 78, 57,149, 17, 94, 36,152,243,217,130, -219,166, 31,253,233, 99,180,106,222, 16, 29,155,184,192,100,149, 80,104, 16,238,216,176, 1, 40,137, 96, 1, 32, 4, 48, 22, 27, -232,233, 64,161, 80, 40, 20,202,157, 81,169, 23,249,183, 27,172, 67,149,185, 69,147,193, 0,129, 23,202, 76,150,197, 98,129, 36, - 73,120,251,237,183,111, 19,218,183,111, 31, 44, 22, 75,245, 27,147,201,110,190,241,198, 27,229,134, 72, 32,132,224,151, 95,126, -129, 74,165, 42, 23,197, 98, 24,231,204, 43, 47, 18, 68,191, 63, 9, 74, 57, 87,206, 16, 73, 18,176,237,247, 63,176,237,247, 63, -202,150,229, 56,249,205, 59, 49,108, 0, 96,177,148, 70,176, 8, 65,177,190,136,158, 22, 20, 10,133, 66,161,220, 25,149,122,145, -127,187,193,170, 20,147,177, 24,188, 93, 27, 44,171,213, 10, 65, 16,176, 98,197,138,114,213,121,114,185, 28, 44,203,214, 24,193, -218,188,121,115,185,193, 61,163,162,162, 8, 33, 4,195,135, 15, 47,171,110,124,229,149, 87, 48,122,244,104,167, 13,150, 32, 18, -204,156, 61,191, 76,103,192, 99,221, 49,164,127, 79, 72,165, 94, 56,251,226, 22,167, 4,171, 51,108, 0, 96, 49,151,180,193, 34, - 0, 12, 69,180,138,144, 66,161, 80, 40, 20,138, 3, 6, 75, 46, 99, 11,174, 36,223,112,247,114, 81, 67,144,204, 16,164,146,158, -127,162, 40, 98,244,232,191, 95,110,253,220,115,207, 97,212,168, 81, 85, 25,172,150,168, 97,172, 12, 73,146,112,244,232, 81, 48, - 12, 3,150,101,203, 62,213, 80,169,102,177, 89,194,177, 31,103, 65, 34, 4, 18, 1, 36, 82,226,167, 44,130, 67,209,198,219, 52, -107, 50,108, 42,157, 7, 56,150,128, 97,128, 43,105, 89,144,113,108,129,179,121,175, 5, 84,147,106, 82, 77,170, 73, 53,169,230, -131,170,249,112, 24, 44, 34,146, 9,203,183,159, 88,204,139,146,187,109, 90,139, 22, 45, 96,181, 90,177,107,215,174, 50,227,193, -113, 92, 89,149,158, 35,109,176, 42,144,210,163, 71,143,234,134, 98, 72,113, 72,133, 65, 74,251, 94, 35,130,171,155,239,108,194, -106, 50,108,171, 14,255,253, 10, 66, 25,203, 22,128,144, 9,180, 56, 81, 40, 20, 10,133, 66,169,214, 96,165,102,100,172, 3,176, -206,126, 90,155, 54,109,244,131, 7, 15,214, 8,130, 0,139,197, 2,171,213, 10,139,197, 82,246, 81,169, 84, 78,141,184,233,200, - 32,162,142,144,125, 97, 75, 72,157,238, 21, 7, 12, 91,102,102,102, 8, 45, 62, 20, 10,133, 66,161, 80,156, 50, 88,149, 97, 48, - 24, 60, 24,134,145,101,100,100,220, 54,239,198,141, 27, 64,201,184,156,255,122,234,220,176, 81, 40, 20, 10,133, 66,161, 6,171, - 42, 14, 29, 58, 36, 60, 40, 38,138, 66,161, 80, 40, 20, 10,229,110,193,210, 93, 64,161, 80, 40, 20, 10,133, 82,183, 48, 40,233, - 9, 80, 25,206,244, 14,104, 89,139,109, 95,160,154, 84,147,106, 82, 77,170, 73, 53,169,230, 67,167, 89,147,182,253,250,163, 1, -172,160,118,173,110, 14, 12,213,164,154, 84,147,106, 82, 77,170, 73, 53, 31, 62,205,202, 24,253,111, 53, 64,180,138,208, 25,162, - 70,203,233, 78,160, 80, 40, 20, 10,133, 82, 19,178,123,181,161,232,232,104,246, 14,215,151,238,219, 94, 10, 24,214,152,147,225, -243,214,193, 1,253,207,228, 14,221, 65, 68,102, 42,210,127,189, 66,139, 79,237,104,227, 2, 47,158,145, 15,244,212,169,135, 4, -187,202, 58, 39,230, 24,254, 52, 88,165,109,132,225,183,196, 21, 33,143,238, 33, 10,133, 82,233,165, 56, 32,192,243,216,177, 99, -193, 93,187,118, 77, 73, 79, 79,207,115,116, 94, 85,248,134,181, 27,229,170,211,190,105, 50,155, 27,186,187,185,221,188,149,155, -187, 60,243,218,153, 37,182,249, 13, 27, 54,116,219,176, 97,131,255,115,207, 61,151,113,253,250,245, 66,122, 4, 40,247,212, 96, -181,111,223,190,161, 36, 73, 47, 1,120,129, 16,114,246,204,153, 51, 79,215, 70,103,223,190,125, 1, 60,207,119, 16, 4, 33, 10, - 64,148, 70,171,107, 99, 54,155,110, 50, 32, 47,247,239,223,255,140,179,122, 81, 81, 81,191, 3, 24, 80,217, 60,134, 97,102,198, -196,196, 68, 59,170,197,201,240,249, 31, 91, 86, 13,201, 52,104,112, 40, 38,249,169,239,190,152, 6, 0, 67,255,137, 7,212,207, -207, 79, 3,224,101,150,101,251,168, 84,170,112,147,201,148, 4,224, 60,195, 48, 75,211,211,211, 51,106, 41,203, 70,234,228,175, -105, 53,218,126,126,174,202,168,244,188,194,116,147, 85, 58, 34, 49,214,121,206, 26,162, 70,128,210,167,158,199,161,119,135,117, -139,104,221,162, 9,164,228,179, 48,229,103, 15,142, 73, 55, 12,254,230,228,205,255, 90,138, 12, 81, 87, 1,139, 35, 90,129,129, -129,126,162, 40,202, 50, 51, 51, 83,109, 23, 67,179,217,220, 30, 64, 4,128,191, 84, 42,213,233, 59,189, 40,254, 91, 52, 3, 2, - 2,252, 37, 73,122,221,215,215,247,201,172,172,172,223, 89,150, 93,117, 7,199,155,242,144, 16,210,233,197, 5, 12,203,120, 57, -179, 14,145, 72, 78,242,201,117,255,189,151,233, 36,164,100,164,231,128,128,128, 87,130,131,131,155, 16, 66, 18, 8, 33, 95, 86, - 56, 7,110,155,199, 48, 76,149,175,242, 8,105,209,101,243, 27, 47, 61,215,123,226,184, 87,116, 90,173, 6, 6,163,169,254,210, -149,223,127,177,116,229,250, 1, 73,151,142,245, 7, 0,127,127,255,161, 65, 65, 65,161, 22,139,229, 58, 33,228,251,154, 52, 41, -148, 59, 54, 88,205,155, 55,119, 81, 42,149,195, 89,150,125,185, 85, 84,231,110,131,159,121,153,225, 25, 45, 62,157,244,156,211, - 67, 56,196,198,198,170, 50, 51, 51, 63,110,216,172,221,127, 30,237, 59,132,109, 30,209, 12, 94,245, 61, 33,177, 74,172,217,117, -185,254,193,111, 94, 89, 2,160, 75, 45,146, 57,224,199, 29, 39,145,153, 47,130, 97, 0,134, 1, 88, 6,208,155, 36,188,247,106, -183,143, 0, 56,102,176,162, 70,203, 35, 26,248,244,191,124, 75,141, 93, 23,120, 0,254,208,122,250,246, 55,120,143,150, 35,118, - 5,255, 79, 58,152, 13, 26, 52,136,170, 87,175,222,215,175,188,242,138,103,120,120,184,159, 82,169,212,154, 76,166, 38,201,201, -201, 13, 23, 46, 92,248,120,131, 6, 13,230,222,184,113,227, 87,103, 52,155,185,171,130, 67, 27,248,254, 56,117,220, 75, 29,195, -195,130, 32,179, 20,131,152,245, 65,201,215,175,118,153,189,234,215, 55, 24,198,244,236,165, 66, 97,175,163,122,106, 87,197,251, -239,141,126, 54,162,177, 43,129,229,210, 81,200, 56, 2,181,171, 39, 58, 6,115, 96, 64,154, 71,239,207,120, 15, 69,214,143, 28, - 48,146,179, 68, 81,124, 15, 0,211,160, 65,131, 31,229,114,249,169,246,237,219, 55, 27, 57,114, 36,211,170, 85, 43,156, 57,115, -166,249,182,109,219,158, 22, 4, 33,222, 98,177,156,172, 95,191,254,217,184,184, 56,171,131,229, 91,145,155,155,219, 70,169, 84, -118,250, 39,107,250,249,249,105, 44, 22,203, 75,129,129,129,163, 31,121,228,145, 86,131, 6, 13, 98,154, 54,109,138,248,248,248, -118, 59,119,238,252,232,200,145, 35,231,211,210,210, 86, 40,149,202,239, 51, 51, 51, 29, 26, 4,120,120, 31,196,255,188, 15,205, -106, 59,191, 2, 30, 0,212, 0, 50, 29, 9, 38, 0,208, 2,184,118, 31, 52,239, 70,164, 37,142, 97,152,122,165, 55,100,219,131, - 93,185,223,246,223,162, 40, 22,167,164,164, 52,170, 78, 51, 40, 40,168,185, 36, 73,156,253, 52,185,188,234, 86, 11,130, 32, 72, -105,105,105,151,170,211,100, 88,198,107,197,215, 11,220,101, 44, 32,146,210, 15, 79, 32, 18, 2, 73, 2, 68, 9, 16, 37, 9,130, - 72, 32, 4,150,212,198, 0, 0, 32, 0, 73, 68, 65, 84, 17, 9,188, 64, 48,243,163,247,238,231,101,238, 73, 0, 61, 0, 28, 6, -176,168,154,121, 95, 86, 39,226,221,168,205,139, 47, 61, 59,188,215,123,147,222,212, 17, 66, 64, 8,129, 70,173,194,228,137, 99, -149, 38,147,165,171, 95,147,246,163, 51, 19, 79,175,100, 24,166, 23,128,246, 0, 78, 3,248,158, 90, 6,202,221, 50, 88, 76,187, -118,237,122, 16, 66, 94,110,224, 31, 56,124,216,243, 99, 52,161, 77, 90, 66, 47,185,225,122,142,132,216, 3, 27, 0, 96,147, 51, - 27,223,189,123,119,123, 66,176,122,220,180, 5,205, 90,183,237,128, 11,233, 2,142,165,138, 40,190, 34, 66,198, 25, 33, 73, 0, - 33,196, 92,219,204,165,229, 9, 56, 18,111, 1,199, 2, 44, 11,112, 44, 3,206,217,247,116,199,174,224, 47, 5, 15,221,241,199, -169,244,167,160,246,133, 33, 47, 29,134,188,172,157, 72,219,252,143, 50, 87,254,254,254,189, 67, 67, 67,191,156, 56,113, 98,131, -204,204,204,122, 39, 79,158,132, 74,165,130,167,167,167,204,203,203,171,217,180,105,211, 10,102,207,158, 61,217,199,199,231,204, -205,155, 55,147, 28, 50, 5, 46,138,136,238,173, 34,254,156, 49, 43,218,221, 28,179, 19,249, 63,255, 12,142,149,160,112,209,193, - 79,163,197,162, 39, 67,235, 77,219,157,250, 43,107,181, 68, 92, 48,153,210, 29,209, 12,242,169,215,183,113,120, 83,228,111, 95, -138,196,124, 51,142,103,153, 49,184,103,123, 52,246,212,160,173, 32,162,190, 90,214,187, 38,131, 21, 16, 16,224, 41, 73,210,212, -164,164, 36, 86,161, 80, 48, 13, 27, 54,124,118,197,138, 21,164,121,243,230,101,111,221,238,210,165, 11,186,116,233,194,232,245, -250,136, 99,199,142, 69,108,222,188,153, 47, 40, 40,136,201,200,200, 88, 83,117,100, 41, 44,197,108, 54, 5,153,204, 22,211,194, -133, 11,127,232,220,185,179,164, 84, 42,113, 39,154,165,198,119,189, 86,171,213,206,152, 49, 35,167, 67,135, 14,164, 46, 52, 67, - 67, 67,255,232,216,177, 99,175,190,125,251,202,186,118,237, 10,127,127,255,178,121, 94, 94, 94,232,222,189, 59,147,154,154,218, -250,200,145, 35, 75,255,248,227,143,197,103,206,156, 57,144,148,148,212,215,129, 67,212,244, 14,231,151, 11,254, 2,152, 3, 96, - 37,128, 99,213, 61,198, 0,120, 14,192,231,247, 73,179,250,135, 2,181, 58,203,100, 50,249,148,254,190,105, 50,153,124,107,188, - 88, 50,140,110,225,194,133, 62, 10,133, 2, 44,203, 66, 20, 69,136,162, 8, 73,146, 64, 8, 41,251,182,189,114,108,214,172, 89, - 98, 77,154,146, 36,177, 11, 22, 44,144,107, 52, 26, 0, 0,207,243,229,190,109,216,254,207,154, 53,203,161,107,148, 70,201,225, -195, 73,163, 59,178,162, 69, 93,237,246, 57,165,233,181,201, 95,158,186, 15,102,213, 51, 32, 32,224, 37, 0,131, 0,216,206,241, - 86, 1, 1, 1,251, 43, 44,218,170,244,187, 56, 32, 32,224, 0,128,223, 3, 2, 2, 86, 87, 86, 93,232,238,226, 58,246,221,183, - 95,119, 37,132, 96,230,207, 57,152,249, 75, 14, 62, 28, 90, 15,147, 7,104,241,234, 11, 79,187,172, 94,247,211,152,210, 50,102, - 35, 1, 37,189,238,105,244,138, 82,247, 6,171,109,219,182, 59,250, 15, 29,213,175,115,143,190, 16, 20, 62,136,191,201, 32,245, - 58,129,140, 19,192, 66,194,181,255,109, 33, 44,203, 86,116,248, 85,118,213,220,177, 99,199,127,131, 27,183,153,251, 94,244, 28, -238, 66,150, 18,171,143, 24, 33,154, 11, 96,204,185,130,226,155,151, 81,116, 35, 14,249,233, 23,206,179, 44, 27,237,168,230,237, - 97,101, 64, 34, 4, 12, 97, 0, 9, 37,231, 6, 91,169,195,170, 86,147,136,204,212,152, 63, 86, 63,213,118,200,116, 92, 62,178, - 14, 32,236, 84, 7, 54,127, 55, 94,130,121,161,138, 72,198,227, 33, 33, 33,243,198,140, 25, 19,120,238,220, 57, 55,131,193, 80, -124,234,212,169, 67,153,153,153,190, 94, 94, 94,169, 35, 71,142,124,196,199,199,199,167, 71,143, 30,218,221,187,119,191, 15,224, -245,154, 52, 35,181,138,200,174, 29, 90, 30,255,100,222,124,151,156, 95, 23,195,114,253, 28,142,103,153,112, 46,219, 72, 2,220, - 10,152, 17, 45, 61,225,162,148, 97,116, 39, 31,221,127,182, 37,125, 6, 19,158,119, 36,239, 13, 3,124, 27,241, 70, 35, 76, 70, - 43,118, 92, 46, 48, 30,207, 43,240, 97, 93,211,178, 39, 63,213, 94,205,229,100,160,129,171,188, 9,110, 58,183, 63, 25,134,129, - 86,171,173,116,158,187,187, 59,186,116,233,130, 70,141, 26,201,159,123,238,185,206, 0,214, 84,165,105,181, 90,253,210,211, 51, - 16,222, 52, 92,213,167, 79, 31,134,227, 56, 88, 44,150, 59,210, 4, 0, 23, 23,151, 65, 81, 81, 81,178,181,107,215,230, 39, 37, - 37, 93, 28, 54,108, 88,186, 86,171, 45,119, 67,213,106,181, 8, 14, 14,198,248,241,227,229,111,188,241, 70,141,154,190,190,190, -143,175, 91,183, 14, 12,195,148,221,188, 43, 18, 18, 18,130, 6, 13, 26, 96,192,128, 1,178,167,159,126,250,241,164,164,164, 42, -247,231,240, 62,136,183,153,167,225,125,170,191,137,148,206, 79,168, 36,146, 85, 49,157,185, 0,150, 3,248, 13,192,240, 42, 12, - 81, 87, 0, 63, 3,232, 15, 84,122,228,171,212, 84, 40, 20, 10,171,213,234, 89,137,241,113, 86,179,236, 84,143,137,137, 65,187, -118,237, 80,241,219,102,132, 24,134,241,113,244,220,228, 56, 14,203,150, 45, 3,203,178, 80, 40, 20,144,203,229, 80, 40, 20,183, -125,218,182,109,235,240,249, 46,151,203,177,108,217, 50,136,162,200, 38, 37, 37,189, 44,138,226, 16,147,201,228,163,209,104,178, - 21, 10,197,246,158, 61,123,126,167, 82,169, 4,103, 52, 89, 14, 96, 69,139,122,239,238,173, 46, 85,173,100, 54,155, 49,112,200, - 8,176, 12,123,207,175,117,199,142, 29, 11, 14, 14, 14,110, 90, 26,157, 2,128,195,233,233,233, 61,236,254,219,115, 56, 61, 61, -221,214, 52, 36, 49, 37, 37, 37, 56, 36, 36, 36,175,162,166,197, 98,109,168,211,185,128, 16,130,153,191,228,192,180, 54, 12,234, - 81,215,240,106, 39, 51, 92, 93, 93, 33, 8, 66,179,128,128,128,239, 1,132,151, 70,175, 6, 7, 4, 4, 52, 37,132, 28,104,216, -176,225,111,118, 85,250,247,236, 58,255,144,104, 86,115, 63, 39, 29, 0,120,219, 77,178, 0,176, 61,173,230,148, 26,224,250, 21, -166,219, 47,103,251,206,182, 5, 50, 75,215, 35,118,186,217, 12,195,252,175,174, 13, 22,177,115,231, 85,197,120,220,210,140, 30, -208, 95,247,130,140,149, 32,227, 24,200, 56, 0, 96,144,155, 22, 7, 75,113,238,209,152,152,152,235,142,108,116,215,174, 93, 93, - 66,155,119,252, 44,250,147, 47,216,239, 14, 27, 81, 96, 48, 33,231,210, 86,100,158,250, 54, 83, 18,172, 91, 89,150, 61,205,178, -108,108, 84,235, 86,241,126,126,126, 98,109, 51, 39,145,146, 16,119,153,177,146, 0,166, 54, 15, 32,233,191, 94, 65,216,251,229, -255,255, 67, 8, 8, 8,232, 31, 22, 22, 54,103,204,152, 49, 33,177,177,177,174, 69, 69, 69,217,123,247,238,141,183, 90,173,103, - 88,150, 93,148,145,145,209,115,221,186,117,218, 41, 83,166,244,109,218,180,105,211, 63,254,248,195, 80, 99,228, 74, 43,111,253, -194,139, 35,142, 15, 25, 61, 65,125,241,151, 37, 80,197,199, 98,197,165, 60,241,116,150,241,125,147, 94,248, 82,163,149,117,205, - 55, 9,123,222,237,238,199,250,185,202, 17,228,174,120,244, 92,145, 99, 47,250, 86,202, 85, 50, 34, 83,195, 98, 22, 80,108,145, - 44,113, 57, 40,126, 92, 16,173,196,197, 75, 13, 0, 50,142,173,209,244,167,167,167,231,249,249,249,125, 22, 26, 26,250, 1,195, - 48,164, 71,143, 30,151,218,181,107, 87, 44, 73, 18,140, 70, 35,172, 86, 43,228,114, 57,140, 70, 35,146,147,147,113,242,228, 73, -184,187,187, 59,181, 95,243,243,243, 17, 26, 26, 10,173, 86,123,199,154,146, 36, 49, 75,151, 46, 85, 95,188,120, 81,253,219,111, -191,213,251,239,127,255, 91,208,182,109,219,184,167,158,122, 42,181, 94,189,122,214,179,103,207,226,248,241,227,200,203,203, 67, -199,142, 29, 29,210,180, 90,173,144,201,100, 48, 26,141, 80,169, 84,144,201,100, 16, 4, 1,146, 36,149,153, 46,189, 94,143, 91, -183,110, 65, 46,151,215,248, 34,118,155, 89, 26,222, 7,228,167,159,255,188, 89, 82, 55, 84,200,195, 90,192, 67, 40,224,193, 23, -240,224,243,249,103, 38,206,111,253,243, 62, 56, 19, 7, 62, 81,106,174,126,174,196,100,117,181,155,126,214, 89, 77,171,213,122, -212,102,124,212,106,181,143, 45,186,160, 82,169,120,179,217,220,203, 73, 77,196,196,196, 32, 42, 42,138, 43,213, 36,132, 16, 91, -123, 27,167, 47, 26, 12,195,128,227, 56,200,229,114,112, 28,135,168,168, 40, 12, 26, 52, 8, 77,155, 54, 69, 90, 90, 26, 14, 30, - 60,136,203,151, 47, 67,161, 80,148,171, 58,172, 9,185, 92, 14,150,101,217,132,132,132,239,250,244,233,211,120,194,132, 9,202, -224,224, 96,196,199,199, 55, 88,186,116,233,168,125,251,246,245, 28, 58,116,232, 40, 0, 66,117,213,135,229,140, 96,169,105, 50, -155,205,136,139,139,171,126, 89,167,171, 0,238,156,174, 93,187,166, 16, 66, 18, 81, 82,245,215, 42, 61, 61,189, 71, 64, 64,192, - 14, 0, 21, 13, 97,113,122,122,250,128,128,128,128, 2, 0,231, 1, 36, 48, 12,147, 82,153,166,135,187, 91,182, 94, 95,236,235, -226,162,197,251, 67, 60,160, 30,117, 13,111,247,226,192,243, 60,174, 94,189,142,134,161,129,204,166,213, 91,108, 85,131,237, 79, -159, 62, 13,148, 84, 21, 38,165,166,166,250,119,234,212,137, 54,120,191, 75, 62,170, 26, 47,226,205, 48,204,118, 59,195, 53,208, -246,127,218,180,105,239,205,153, 51,231, 34,195, 48,219,237,167,219, 47,103,255, 93,122,142,110, 39,132, 12,156, 62,125,122,228, -220,185,115,103,219,150,189, 47, 17, 44,142,227,134, 93,216,245,229,137, 38, 86, 18,226, 27,249,100,185,253,144,124,118, 23, 36, - 73, 90,227,136,206,241,227,199,213,130,132,239,166,188, 55,139,253,230,128, 17, 89, 55, 50,144,113,232,115, 24,111,198,173,214, -104, 52,239,246,233, 55,240,142, 11,110, 84, 84, 84,164, 71,253, 6, 48, 91, 73,169,193, 42,111,178, 30, 20,252,252,252, 6,133, -133,133,205,218,186,117,107,136,209,104,116, 61,118,236, 88,254,158, 61,123, 18,173, 86,235,170, 27, 55,110,172, 47, 93,108,171, - 76, 38,251,152, 16, 2,157, 78, 39,227, 56, 78, 83, 93,168, 59,210, 77, 30,245,210, 11, 47, 28,253,239,162,149,234,196, 11,103, -177,120,211, 14,168,136, 85,188,148,107,121,234,162, 94, 40, 41,180, 6, 97,127, 64,142, 49,157, 16, 4,201, 89, 6,245,180,242, - 6,157, 1,245, 9,192, 84, 83,154,189,130, 66, 88, 33, 32, 12, 71, 12,102,232,220, 20, 74, 0, 8, 8,111,193,157, 45, 20,112, -236,212, 95, 80,171, 61, 21,142,228, 61, 51, 51,115,134,191,191,127,232,158, 61,123, 88,131,193, 80,124,238,220, 57,212,175, 95, - 31, 62, 62, 62,112,115,115, 67,124,124, 60,246,238,221,139,132,132, 4, 16, 66,170,139, 18, 84, 74, 86, 86, 22, 10, 11, 11,235, - 68, 83, 16, 4, 6, 0, 34, 35, 35, 17, 25, 25,169, 76, 79, 79,247,217,190,125,187,231,236,217,179,111,248,249,249,237, 54, 26, -255,110, 30, 85,177,186,167,186,136, 2, 0,152, 76, 38,152,205,102, 40, 20, 10,168,213,106, 40, 20, 10, 20, 22, 22, 34, 43, 43, - 11, 69, 69, 69, 37, 55, 19, 15,143,178,229, 29, 66,148,128, 19,221, 78,223,238,230, 95,246,169,101, 81, 61, 86,106,162,246, 3, -176, 29,223, 44, 91, 64, 12,213, 87,245, 85,167, 89,110,127,216, 69,153,228,181,209,180, 69,170, 24,134, 41,119,149, 80,171,213, - 55,109,145,171,210, 72, 89,141, 90,182,106, 65,165, 82,137,200,200, 72,188,251,238,187,136,143,143,199,209,163, 71,225,227,227, -131, 39,158,120, 2, 50,153, 12,169,169,169, 96, 89,214, 33,131,165, 80, 40,192,243, 60, 18, 19, 19, 95,238,221,187,119,216,226, -197,139,149, 73, 73, 73,136,143,143,135,155,155, 27, 62,254,248, 99,213,212,169, 83, 3,119,239,222,253, 70,155, 54,109,150, 57, -124,109,103, 74,170,255, 6, 14, 25, 81,137, 17,113,145,175, 93,243,173,210,102,188,216,251, 48,176, 79,122,122,122, 30, 33,100, - 1,128,133,165,213,130, 61, 0,184,164,167,167,247,178,187, 9,147,210,106, 65, 0, 56,159,158,158,222, 27, 0,169,170, 65,122, -230,205,204,229,159, 47,250,102,225,204,247,222, 81, 78, 30,160,197,171,157,204, 16, 69, 17, 28,199, 97,241,242,213,252,229,184, - 11,231,218,183,111,191, 29,192,224,211,167, 79,163,125,251,246, 69, 0, 46, 3,184,174, 84, 42,105,231,145,251,233,192, 42,152, - 32,155,113,154, 51,103,206,192,202, 76, 85, 37, 15, 63,229,166,207,157, 59,119,182,221,255, 58,237,197, 46,171,224, 28,171,123, - 10,247,243,240, 14,168, 55,230,249, 39,176,249,156,237,133,132, 4, 86,179, 1, 55,226, 15, 24, 44, 22,203,207,142,108, 48, 55, - 55,247,227, 87,223,157,223,248,116,138, 12,153,121, 6,100,236,155, 69,172,249, 73,195, 7, 13, 26,180,185, 46, 50, 20, 21, 21, - 21,233,233,229,127,240,131,207, 86, 98,127,162, 5, 18, 1, 24,130,191,141,213, 3, 50,242,151,191,191,127, 19, 15, 15,143, 47, -182,108,217,226,163, 84, 42, 93,207,159, 63, 47, 30, 58,116, 40,131,231,249,165, 55,110,220,216,104,183,220, 11, 45, 91,182,228, - 93, 92, 92,144,153,153,105,226,121, 94, 95,213,177,110,161, 86, 7, 70,181,138, 56,252,223, 69, 43,213, 38,139, 5, 5, 70, 51, -188,253,252,196,163,231,227,158,138,211,139,101, 79, 4,205,117,178, 71,218,135, 7, 4,176, 26, 87,192, 80,136,244, 66, 75,134, - 35,230, 10, 0, 92, 92, 61,216,192,246,143,162,253,196,175,112, 41,250,125, 2,228,194,195,215,159,237, 53,254, 83,232,218, 13, -194,178, 9, 47, 75,127, 71,112,107,196, 24, 30, 30,142, 51,103,206,216,202, 22,114,115,115, 17, 22, 22,134,197,139, 23,151, 91, -208,145,155, 98, 21,229,245,142, 53, 37, 73, 98, 42, 68, 29, 49,110,220, 56,249,206,157, 59, 93,236,205,149, 51,154, 22,139,165, -204, 80, 16, 66, 96,177, 88, 96,177, 88,224,226,226,130,196,196,196,242,126, 73, 20, 43,173,234,172, 58,193, 5,149,135,187,248, -220, 59,105,119,120, 12,128,194,206, 4,249, 2,232, 86, 75,115,117,155,241,169, 11, 98, 98, 98, 42,189, 14,218,170, 30, 99, 98, - 98, 72,187,118,237,124, 29,213, 35,132, 64,169, 84, 98,240,224,193,248,235,175,191,144,145,145, 1, 87, 87, 87,152,205,102,152, -205,102, 68, 69, 69, 33, 43, 43,203,225,232,149,157,110,255,183,223,126, 91,125,253,250,117,220,186,117, 11,106,181, 26,130, 32, - 64, 20, 69,188,241,198, 27,234,241,227,199,247, 3,224,184,193,226, 24, 60,246,242,103,149,182,173,218,255,237,127,122,170, 84, -170,178,234, 22,142,253, 71, 93, 64,237, 31, 20,157,218,137,217,215, 47, 44, 91,183,241,183,199, 5,171,181,215,107, 47,141,112, -213,185,104,113,245, 90, 18,150,173, 90,203,239, 63,114,106,127, 86, 90, 98,127, 0, 76, 64, 64, 64,211,210,200,213,229,244,244, -244,151,170, 51,109,148, 58,141, 98, 85,100, 52, 74, 59,182, 84,101,156,156, 49,104,246, 17, 46, 27,211,167, 79,143,156, 51,103, - 78,157,182, 49,148, 85, 81, 88, 43,154,150,182, 30, 94, 1, 7,166,207, 94,169,251,237, 28,135,188,204, 4,152,110, 38, 32, 40, -106, 8,178, 18,142,129,136,252,175,113,113,113,197, 53,109,108,247,238,221,225, 65, 77,219, 79,108,211,174, 19, 62,255, 93, 15, -253,165,141,176,228, 93, 95, 54,112,224,192,186, 51, 87,245,253, 14,190, 55,119,101,189,109, 23,229,200,205, 72, 64,252,150,169, - 16,173,183,213,138,237,112, 70,183, 39, 32, 19, 60,173,120,188, 57,131,155,127, 26,144,217, 19, 50, 28,186,191, 47,189,206,200, -200, 72,244,240,240,248,126,229,202,149, 99, 91,183,110,173,157, 56,113,226,229,194,194,194, 79, 50, 51, 51,127,180, 51, 87,189, -195,194,194, 38,205,154, 53,171,113,114,114, 50, 14, 31, 62,156,200,113, 92,149,245,203,151, 76,166, 52,246,252,165,165, 71,127, - 88, 53,153, 13, 14,199,166, 89, 83,132, 63, 47,196, 13,142,211,139, 59,203,204,149,139, 34,162, 75,100,163,237,111, 78, 24,195, -138,103,119, 33, 62,249, 38, 50,245,252, 62,135,159, 70,139, 12,188, 92,165,129,174, 65, 40,146,141,146,194,223,223,255,100, 90, -190,241,255,236,157,119, 84, 20,215,223,198,159,153,237,187,176, 75, 93, 96,169,162, 2, 82, 5, 4,172,216,162,177,196, 22,147, - 88,163,198,196,104,138,198,168,137, 53,118,209, 24,141, 53,197,216, 73, 20,219, 27, 19,107,140,138, 88,176, 3,118, 68, 68,250, -210, 59, 44,108,155,251,254, 1,248, 67, 66, 89, 74, 98,202,124,206,217,179,187, 51,179,207,222,153,185,115,239, 51,223, 91,134, - 79,115,184,160,185,124, 36,228, 87, 52,169, 18,103,152, 63,134, 36,107,155, 22, 0,141, 54,145, 53,234,228, 90,160, 89, 29,193, -250,131, 95,209,106,169,230,106,214, 52, 88,181,205, 84, 93,199,168, 73, 6, 75, 83, 84,247, 57, 80,231,182,198,192,142,234,132, - 8, 90, 98,174,170,141, 79,117, 7,116,161, 80,248,220,168, 24, 26,101,170, 47,130,213,208,122,131,107,126,138, 2,195, 48,224, -241,120,112,113,113,193,213,171, 87, 33,147,201, 96,108,108, 12,137, 68, 2,161, 80, 8,153, 76, 6,129, 64, 0,154,166, 65, 27, -104, 92,180, 90, 45,212,106,181,141,189,189, 61,158, 60,121, 2,145, 72,244,252, 37, 16, 8,224,230,230,134,146,146,146, 38,153, -206,166,152, 38,206,191,104,106,234,164,135,145,175,219,184, 6, 77, 56,240,127,199, 63,172,168, 80,123,119,112,107,143, 71,247, -162,238,100,166,198, 15, 98, 61,206,223,198, 56, 87,243, 3, 42, 71,137,182, 74, 51, 94, 93, 38,107,205,154, 53, 33, 53,163, 96, -173,109,176,208,144,185,154,187,234, 7,217,161, 40, 26, 5,202, 88, 36,157, 94, 80,172,215,148,229, 51,140,214, 41,255,233,101, -224,197, 14,185, 13, 85,134,129,221,250, 14,167, 47, 60, 82, 67, 83,156,142,162,251, 7, 18,133, 66,225,188,214, 52, 87,243, 86, -111, 55,255,249, 14, 23,121,233,143,241,244,228,252, 66,189,166,172,111, 84, 84, 84,147,231,209,122, 31,224,253, 0,104,135,201, -229, 35,100, 66,122,237,228,145, 82,244,236, 39,134,140, 47,195,242,175,232, 71,165,221,152, 57, 89,145, 56, 6,127,240, 16,133, -151, 50,162,240,193,131, 7,171,182,111,223, 78,235,116,186,201, 26,141,102,169, 82,169,124, 30, 69, 84, 40, 20,253, 29, 29, 29, -215,174, 88,177,194, 62, 49, 49, 81,112,237,218,181,188,232,232,104, 70,175,215,175,105, 72,243, 94,145,250,243,143, 63,158,206, -105,239, 96, 59, 61, 62, 53,117,216,253, 98,253,233,234,117, 94, 18,190, 87, 55, 95,247, 43, 43,150,205,151,106,174, 29, 65,105, - 70, 42,182, 94,203, 40, 98,244,218,249, 6, 70,221,204, 47,159, 63,135,249, 83, 38, 49,197,197,197,144, 8,248, 76,106,236, 83, -206,132,126, 61,245, 95,206,157, 77,103,100,100,160,172,180,148, 99,107,107,107,158,158,158,158,103,136,102, 93,134,162,174,202, -181, 73, 6,163,238,202,188,217,154,181, 35, 88, 13, 25, 44, 67, 53,107, 54,137, 53,118, 60,244,122,125,211,154, 8,117,245, 24, - 44, 77,182,166,133, 89, 54,153,162, 40,199,234,207,173,113, 13,148,151,151, 91,213,136,138, 1, 0,213,220,104,101, 85, 4,171, -193,245, 77, 49, 89,213, 17,172,248,248,120,200,229,114,232,116, 58, 24, 25, 25, 65, 44, 22, 67, 44, 22, 67,165, 82, 65, 32, 16, -128,195,225, 52, 41,157, 66,161, 48, 35, 54, 54,214,201,204,204, 12,122,189,254, 5,147,245,236,217, 51,152,152,152,100, 25,218, -255,170, 50,130, 5,156,221, 51,183,206, 81,132,166, 38, 70, 47, 8,113, 40, 10,127, 35,106,246,211,105, 86, 84, 41, 35,238,198, -143, 0,126,180,179,179,219,187,111,199,137,128,128,128,128, 19, 45,213,100,249,147,221, 87,149, 49,170,217,151,106,222,188,121, -205,158, 59,100,222,188,121, 11,234,138,104,181,166,193,162,106,189,255,207, 92, 89,216,134,207, 89,177, 77,182,239, 22,141, 66, -229, 35,164,159, 93, 84,200,104,202,250,210, 52,173, 76,137,252,225, 48,128,178,168,168,168, 8, 3, 43, 67,255, 14,174,174, 56, -116, 95,135,242,140, 59,160, 41,178,167, 95,191,126,101, 45,221,137,106,115,245,121,200, 15,230,135,162,185,200,175, 52,129,133, - 76, 51,204,213, 88,129,160, 61,143,166,215, 58,248,186,191, 54, 58, 33,185,164, 79, 59,145,233,224,246, 66,112,174, 29,197, 49, -219, 44,228, 89,158,199, 7, 27,236,218, 71,254, 82,244,107,148,176, 52,207,215,199, 91,118,203,232,222, 9, 45,209,127,158,115, - 9,127,121,231,247,248,248,248, 21,214,214,214, 63,103,102,102, 62,239,157,106,103,103, 55,200,209,209, 49,100,249,242,229,109, - 82, 82, 82,164, 49, 49, 49, 69,135, 15, 31,126, 70,211,244,242,140,140,140,172,198, 52,239,151,104,103,147,100,229,142, 7,165, -250,216,231,145, 43, 9,175,227,132, 9,163,175,246, 27,243,142, 40,225,194, 94,152,167, 62,192,198, 27, 89,250,212,194,242,177, -177, 42,100, 24, 98,174, 4, 2,193,161,205, 71,142, 60,241,246,246,166,202,202,202,160,213,106,145,157,157,141,175,126, 58,116, -159, 97, 24,152,153,153,225,220,185,115,204, 39,159,124,114,200,214,214,246, 45, 67, 76, 22,195, 48,207, 43,171,250,162, 64, 98, -177,184,105, 6,163,234, 55, 53, 13, 76, 75, 52,235, 51, 88,181, 35, 91, 77,212,172,188,128,171, 58,183,215, 23,209,227,112, 56, - 96, 24,166,206, 72, 95,253, 97,146,130,122, 12, 86, 86, 75,111, 36,156,208,240, 64,154,151,134, 72, 36,202,172, 50, 79, 76,125, - 83, 49, 52, 53,130, 5, 0, 2,129, 0,145,145,145, 24, 56,112, 32, 24,134,129, 80, 40,132, 88, 44,134, 72, 36,194,141, 27, 55, -192,231,243,193,225,112,154,212, 76,200,227,241, 78,109,221,186,117,210,154, 53,107,196, 12,195, 64, 32, 16, 64, 44, 22, 67, 40, - 20,226,235,175,191, 86, 9, 4,130,211, 77, 50, 88,104,124, 20, 97, 77, 51,246, 87, 83,107,154,134,218, 83, 49,212,164,246, 20, - 14,245, 78,211, 96,107,107,107,110,111,111,255, 30, 33,196,179,106,209, 11,163, 5,107,108, 90, 93,176,184,218,217,217,237,173, - 99, 20, 33, 75,235, 71,175, 80, 79, 25,145, 93, 43,122,165,174,241, 61, 27, 0, 85,245, 61,187,134, 1,171,249, 89, 93,199,178, -220,213,171, 87,135,215,136, 92,101,183,230,206,212, 27,193,242,245,245,117, 55,181,176, 13,159,181, 98,155,108,239,117, 14, 10, -149, 15,145, 19,254, 69, 33,209,169,106,154,150, 30, 77,252, 63, 63, 43, 43, 11,228, 68,150, 67,155,255, 4, 20, 69, 69,181,116, - 7, 2, 3, 3, 93,164, 38,242, 11,115, 86,254, 96,190,255, 54, 23, 5,233,255, 51,129,205,137, 92,113,105,250,171,245,191, 29, - 24, 38,204,120, 4,213,157, 11,166,188,188, 84,220,207,210,224, 80,100, 70,241,133, 43,219, 47,211, 30, 36,184,239, 88, 83,227, -190, 99,205,177,241,131,211,230,153,229, 15,112, 61,238,248,240,144,249,199, 9, 94,210,236,238, 53,205,149, 66,161, 24,106,107, -107,187,236,196,137, 19, 78, 58,157, 78,122,241,226,197,226,195,135, 15, 63,213,233,116,155, 51, 50, 50, 78, 24, 28, 29, 43,213, - 60, 55, 87, 94, 50,158,255,228,137, 19, 47,127,178,225,123,209,131,219, 55,177,118,239, 9, 72,121, 90,253,237,244,242,183, 30, -148,254,175,249,176,193,227,202,229, 46,223,191,127,191,145,135,135, 7,149,155,155,251,188,194,215,104, 52, 40, 42, 42, 66, 97, - 97, 33,212,106, 53,188,189,189,233, 37, 75,150, 24, 45, 94,188,120, 57,128,143, 26,137, 16,100, 45, 91,182,204,234,253,247,223, -135, 76, 38, 67,110,110, 46,180, 90,237,243,104,147, 80, 40,132,169,169, 41, 10, 10, 10,112,246,236, 89, 16, 66, 26, 52,151,124, - 62, 95,105,103,103,235, 32,150, 24,169, 37, 18, 9, 49, 54, 54,110,177,102, 85,101,155, 49,120,240, 96,155,101,203,150, 9,106, - 86,210, 26,141,134,106,174, 38, 33,164,236,213, 87, 95,149,108,222,188, 25, 78, 78, 78, 80,171,213, 96, 24,230,121, 4,171,122, -106,128,228,228,100,172, 90,181, 10,132, 16,195,111,100,180,249, 90,216, 79,148, 67,147,171,133, 38, 87, 11,117,142, 22,154, 44, - 45,116,101,127,187, 33, 34,205,233,128,110, 64, 36,204,170,165, 17, 44,138,162, 64, 8, 1,159,207, 71, 74, 74, 10,206,157, 59, -135,160,160, 32, 72,165, 82,148,150,150,226,234,213,171,200,200,200,104, 86, 4,171,111,223,190,123,206,156, 57, 19,252,241,199, - 31, 59, 79,155, 54, 77,236,238,238,142,196,196, 68,108,216,176,161,252,225,195,135,105, 51,102,204,216,222, 20, 61,186,106,234, - 26,131, 70, 17,210,127,189, 55,174,103,154,134,193,245,108, 94,115, 10,135,218,211, 52, 60,231,232,209,163,206,118,118,118,238, -168,236, 95, 5,252,113,180, 96, 77,110,221,186,117, 43, 0,236, 40,194,151, 29,185,186,249, 79, 75, 51,183,254,139,142,254,180, -243, 27, 11,101,123,174,113,145,159,118, 31,133,151,150,212, 54, 87,134,224,141, 26,115,101,240, 68, 82,111, 29,225, 3, 40,135, -174,224, 41, 4, 2, 65,116, 51,210,252,130, 38,195, 48,179,187,188,177,208, 60,244, 38, 23,133,233, 15,145,125, 97,113,115,204, -149, 55,128,123,239, 3, 60, 7, 63,207,215,132,153,143, 81,126, 33, 12, 20,128, 29,209,165,184,154,170,254, 90,163, 86,175,124, - 88,164, 46,176, 19,195, 44, 44, 36,107,241,160,215,125, 62,113, 27,125, 22,215,179,191, 3, 36,128,153,156, 59, 40,203, 95, 87, -179,185,240,133,116,182, 18, 13,106,218,218,218,186, 24, 27, 27,127,117,234,212, 41,185, 64, 32,144, 61,120,240, 64,127,228,200, -145, 20,189, 94,191,190,102,199,247,166,104,122,138, 68,246, 30,109, 29, 34,102,172,255, 86, 84, 92, 82,138, 82,181, 6,182,142, -118,250,136,219,143,222,120, 80,170,249,197, 16, 77, 43, 43,171, 62, 35, 71,142,236,216,169, 83, 39,186, 62,115, 85, 84, 84,132, -146,146, 18,164,166,166, 34, 56, 56,152,118,119,119,247,174,168,168,232,147,149,149, 21, 94, 95, 58,149, 74,229,210,176,176,176, -238, 7, 15, 30, 28, 50,101,202, 20,233,200,145, 35, 33, 22,139, 81, 90, 90, 10, 7, 7, 7, 48, 12,131, 75,151, 46, 33, 46, 46, -174, 24,192,113,165, 82,121,165,161,116, 62,123,150,224, 8,128,182,183,183,239, 62,112,224,192, 86,209, 4,128,236,236,236,246, - 17, 17, 17,115,135, 15, 31, 62,115,192,128, 1,210, 5, 11, 22,240,157,157,157,161,215,235,169,230,106,230,231,231,155, 68, 69, - 69,173,235,209,163,199, 71, 3, 7, 14,228,134,132,132,192,196,196, 4,122,189, 30, 98,177, 24, 69, 69, 69, 88,190,124, 57, 46, - 95,190,172, 35,132,124, 83, 88, 88, 56,167, 33,205,154,243, 96,189, 53,227,107,223,134, 50, 97, 3,243, 96,253,229,121,190, 42, -210, 68,208,180,166,193, 70,211, 89,213,161,253, 15,243, 97, 25,170, 89, 61,245,130, 64, 32, 0,151,203, 69,118,118, 54,206,156, - 57,243,194,252, 87, 2,129,224,249, 52, 14,245, 68,176,234, 76,167, 84, 42,101,222,124,243,205,201,167, 78,157,154, 52,123,246, -236,225,197,197,197, 86, 50,153, 44,219,200,200,232,248,140, 25, 51,118,153,154,154, 54, 52, 69,195, 31, 52, 57, 52, 85,239, 40, -194, 23,162,166, 28, 65,121, 61,221,181,254,212,243, 94,107,154,134,218, 83, 49,212,164,246, 20, 14,181,167,105,120,174, 57, 98, -196,136,103,168,156, 60,148,174,122,175, 61, 90,176, 26,215, 91,183,110, 5, 4, 4, 4, 92, 4, 32,198, 31, 71, 17,254,229,121, -254, 95,174,249,175,162,161, 62, 88,162, 43,183,227, 64, 11,179, 80,124,253,171,230,152,171, 63,160,171, 40,141, 95,113, 32,193, - 79,175, 86, 65, 87,148,244,120,224,107,131,179, 90,186, 3,132, 16,163,203, 81,241,224,138,114, 81,112,237,203, 2, 74, 95,209, - 55, 42, 42, 42,166, 57, 90, 63, 0,218,113,119, 30, 93,120,122,249,220, 43,182, 0,146,242,212,136,137,205, 59,115, 84,165,154, - 93,189, 77,218, 53,228, 3,152,249, 27,247, 94, 7,115,215,194,254, 38,182, 64, 86,178, 22,249,217,186, 83, 47,171, 47, 86, 53, -233,233,233, 79, 60, 61, 61,247,238,220,185,243, 3,127,127,127,227,233,211,167,199, 21, 22, 22,190,208,241,189,169, 60, 40, 47, - 79, 69,124,226,119, 23,118,108,248, 76,228, 30,132, 35, 33,243,245, 23,111,199,142,184, 95,162, 49,184,205, 90, 40, 20,246,254, -224,131, 15,248,101,101,101,245,154,171,162,162, 34, 20, 23, 23,163,168,168, 8, 49, 49, 49, 24, 57,114,164,240,209,163, 71,189, - 1,132, 55, 84,230,167,166,166, 94,106,215,174,221,141,239,190,251,174, 95,104,104,104,255,119,223,125, 87,208,187,119,111, 60, -120,240, 0, 55,110,220, 80,107, 52,154,223, 69, 34,209,217,167, 79,159, 26,218, 9,235,207,208,212,169, 84,170, 85, 98,177,120, -243,225,195,135, 87,158, 63,127,254,237, 73,147, 38, 25,233,116, 58,170, 37,154,133,133,133, 51, 45, 45, 45, 23,157, 60,121,114, -207,153, 51,103, 70,188,253,246,219,244,140, 25, 51,176,101,203, 22, 28, 57,114,132,209,235,245,191,240,120,188,137, 57, 57, 57, -141, 14, 64,169, 57, 15, 86, 67,243, 92, 53,182,222, 0,254,140,187,208, 22,107,214,142,132, 85,143, 22,172, 54, 85, 77,105, 30, -172, 73,199,142, 29, 95,152,231,170,186, 67,123,245,139,195,225,128,203,229, 54,169,137,208,203,203, 11, 60, 30,143,241,243,243, -219, 5, 96, 23,240,226, 35,115,120, 60,222,243, 73, 77, 13,161, 66,199, 96,199,206,189, 55,116, 12,129,158, 33, 32, 12,160, 37, - 0,163,103,160,103, 8,244, 12, 83, 57, 45, 26, 1, 84,229,250,191,188, 92,171, 49, 77,195,215,117, 76,197,240,156, 58,166,112, -168,247,185,129,233,233,233,121,132,144,234,254,168,117,141, 22,172,214,220, 91,181, 92,156,150,150, 54,161, 33, 77, 22,150,166, - 24,172, 5, 37,183, 55,105, 1, 88, 80, 20, 53, 63, 42, 42,234, 65, 75,255,140,195,161,231,103, 29,123,103, 51, 1,242, 57, 20, -230,183,198, 14,232,245,250,133,165, 81,155, 25, 66,136, 41, 69, 81,243,110,223,190,221,162,116, 18,157,238,195,175,182, 95,250, - 90,110, 34,232,159, 83, 80,113, 18, 20, 85,231,172,237, 58,144,143,127,252, 50,249, 75, 51, 57,119, 80,126,182,238, 20, 67, 99, -238,223,225,132, 62,120,240, 32,100,251,246,237,156,239,191,255,126,178, 90,173,126,161,227,123,179, 53, 75, 52,159,127,250,249, - 34, 78, 7,103,251,233,177,137,201,195,239,151, 24,214, 44, 88, 3,129,157,157,221,253,178,178, 50, 80, 20,133,138,138,138, 23, - 12, 85, 77,131,165,209,104,144,149,149, 5,103,103,103, 80, 20,101, 80, 13, 81,101, 74, 78, 88, 88, 88, 92,220,180,105,211,107, - 91,182,108,233,198, 48, 76,164, 70,163, 57,145,155,155, 91,210,156,125,254, 51, 52,171,126,247,137, 78,167, 91,179,101,203,150, -117, 34,145, 40, 32, 43, 43, 43,162, 37,154, 85,230,233, 13,115,115,115,219,189,123,247, 30,218,185,115,103, 23, 46,151,123,141, -162,168,183, 10, 11, 11,155, 51, 95,207,227, 22,174,111,140, 35,127, 66,182,111,177,102,205, 62, 87,205,109,102,124,161,124,208, -233, 74,230,207,159,159, 85,251,153,131, 53,231,188,170,249,174, 86,171,203, 13,208,100,190,248,226,139, 6,111,226,106, 26,173, -242,242,242, 70,155,116, 9, 67,114, 6,143,250,176,105,101, 36, 67,114, 94, 98, 17,119, 12,192,147,170, 23,105, 96, 93,147,118, - 9,149,115,180, 37, 18, 66, 18,107,233,214, 92,206,194,210, 58, 6, 43, 42, 42, 42, 5,192, 59,173,249,103, 3, 7, 14, 60, 7, -192,189, 53, 53,239,220,185,147, 4,224,237,214,210,219,175, 86,199, 3, 24,242,126,150,154,247, 19,234,143, 72, 85,117,104,127, -189, 86,179,224,223,130,186, 58,190,183,148,251, 37,218,217, 36, 33,237,133,142,239, 77,168,108,126, 19, 10,133, 84, 81, 81, 17, - 52, 26, 13,138,139,139,159,155,171,154, 38, 75,167,211,129,162, 40, 20, 23, 23,195,216,216, 24, 90,173,182, 73,119,138, 85, 38, - 37,172, 87,175, 94,135, 35, 34, 34, 90,101, 26,141, 63, 67, 83,165, 82,101,168, 84,170,113,189,122,245,226,182,150,102, 94, 94, - 94, 58,128,110,237,218,181, 19, 52, 33, 10, 86,111, 36,171,185,235, 13,224,251, 63, 33,203,255,244,119, 43, 88,147,146,146, 60, - 90, 91, 51, 37, 37,229, 97,171,167,243,250,143,179,254, 9, 21, 85,117,212,200,206,206,110,111,114,114,178, 35, 69, 81,201,181, - 35, 73, 13,173,107, 72, 19, 0,156,157,157,143,166,164,164,216, 10,133,194,116, 67,150,179,176,252, 29,240,102, 53, 89, 77, 86, -147,213,100, 53, 89, 77, 86,147,213,108, 38,239,255, 83, 13,208,191,104,218, 56, 22, 22, 22, 22, 22, 22, 22,150,191, 7, 84, 3, - 46,180, 41,163, 3,154,227,100,239,177,154,172, 38,171,201,106,178,154,172, 38,171,249,159,211,108, 76,187,230,239,223, 71,229, - 76,238, 44,173,112, 98, 88, 77, 86,147,213,100, 53, 89, 77, 86,147,213,252,239,105,214, 5,219, 68,200,194,194,194,194,194,194, -194,194, 82, 9,151, 61, 4, 44,134, 96,103,103,183,186,115,231,206, 31,222,188,121,115,125, 74, 74,202,242,102,106,216, 90, 88, - 88,172, 2,208,141, 16, 34,228,112, 56, 15,115,114,114, 66, 82, 83, 83, 47, 53, 55, 93, 10,133,194, 65, 46,151,175, 2,208,133, - 97, 24, 62,143,199,187,159,153,153,185, 50, 61, 61,253, 90,115, 53, 45, 45, 45,141, 20, 10, 69, 0, 33,196,138, 16, 66,243,120, -188,252,180,180,180,152,236,236,236, 44, 54, 39,176,176,176,176,176,180,216, 96, 45,253, 24, 10,104,192, 93,250, 3, 82,170, 22, -201, 80, 57,233,154, 59,128, 71,168,124,188, 64, 75, 31, 25,240, 79,209,252,187, 67,155,154,154,190, 42,145, 72, 62, 41, 41, 41, -241,147,201,100,247,117, 58,221,102,165, 82,121, 28, 64,139, 30,113, 34,151,203,173, 70,140, 24, 49,111,211,166, 77,152, 60,121, -242,162, 19, 39, 78,108,104,234,188, 77,238,238,238,195,164, 82,233,182, 21, 43, 86,202,131,130,130, 40,145, 72,132,248,248,120, -187,133, 11, 23,248, 91, 90, 90, 30,138,142,142,254,168,169,233,242,244,244,124, 75, 42,149,110, 14, 9, 9,145, 7, 4, 4, 80, - 92, 46, 23,119,239,222,181, 95,182,108, 89,144, 92, 46,223, 27, 19, 19, 51,187,169,154, 94, 94, 94,206,198,198,198,221, 86,174, - 92, 41, 10, 10, 10,130, 80, 40,196,195,135, 15,141, 22, 44, 88, 32, 87, 42,149, 79,162,163,163,175, 55, 69,207,255,253,219, 60, -190, 68,195, 5, 0, 77, 25, 95, 23,245, 67, 39,173,161,203,216,226,137,133,133,133,229, 95,104,176,150, 77,195,114, 74,135, 5, -160, 65,125, 50, 6, 7,183, 28,164,111,244,237,219,183,195,187,239,190, 75, 85, 61, 58,194, 35, 44, 44,236,141,227,199,143,199, - 50, 12,115, 29, 64, 12, 0,141,129,255,203, 7,224, 75,211,116,231,191,185,230,223, 30, 99, 99, 99, 23,185, 92, 62,187,168,168, -104, 80, 64, 64, 64,209,180,105,211, 18,175, 93,187,150, 16, 24, 24, 88,190,115,231,206, 16,173, 86,251,173,169,169,233,239,197, -197,197,235,154, 59, 47, 22,143,199,115,167, 40, 10,105,105,105,224,241,120, 60,129, 64,224, 1,192, 96,163, 97,111,111,175,144, - 74,165,223, 31, 60,250,155, 85, 81, 5,141, 39,217, 12,128, 50,232,105, 75,172, 88,187,197, 98,221,170, 69, 99, 75, 75, 75, 47, - 63,121,242,228,128,161,154, 10,133,194, 65, 42,149,110, 62,127,254,188,149, 80, 40, 4,195, 48, 40, 46, 46,134,149,149, 21, 86, -175, 94,109,190, 98,197,138,119, 11, 11, 11, 47, 38, 38, 38, 30, 51, 84,211,210,210,210,200,216,216,184, 91,120,120,184, 72, 32, - 16, 80, 90,173,150,170,168,168,128,141,141, 13,249,250,235,175,133, 11, 23, 46,116, 43, 40, 40,200, 72, 76, 76, 76, 54,200, 92, -109,187,205, 43,250, 45,188, 43, 73, 81, 45, 2, 0, 74, 36, 94,217,107,105,226,141,180,187,135,131, 26, 91,230,191,237,246,213, -168,169,172,201, 98,249,107, 81, 40, 20,221,157,157,157,143, 38, 39, 39, 71,114, 56,156,209, 73, 73, 73, 21,173, 32,107, 15,192, - 25,128, 25, 42, 7, 86,229, 1, 72, 4,158,223,184, 55, 25,139,118,189,135, 66, 40,121, 7,132,248,210, 0, 64,211, 49,140,166, -116,119,110,220,133, 99, 45,210, 20, 25, 77, 6,195,248,210, 32, 12,104,206, 29,162, 43,221,158, 19,123,225, 20,155, 51, 88, 90, -205, 96, 45,125, 23,102, 20, 48,119,254,180,247,105, 46,135, 67,133,108,251, 97,204,205,200, 99, 68,225,232,251,252,145, 27,193, -193,193, 8, 14, 14,166,214,174, 93,235,126,254,252,121,247,125,251,246,105, 35, 35, 35,111, 3,216, 83,223,159,133, 76, 23, 39, -235,180, 42, 7,208,226,242, 54, 93,190,221,215,173, 91, 48, 35, 20, 10,209, 18, 77, 0,248,240, 77,238,239, 21,148, 3,213,123, -200,226,164,214,210,252,135,152,171, 8,169, 84,218,126, 55,110,175,251, 0, 0, 32, 0, 73, 68, 65, 84,234,212,169, 79, 62,248, -224,131,139, 70, 70, 70, 4, 0,178,178,178,140, 94,123,237,181,252, 17, 35, 70,228,150,149,149,225,187,239,190,115,216,188,121, -243,239, 82,169, 52,173,184,184, 56,168, 41,249, 67,161, 80,172,233,215,175,223,172,113,227,198, 65, 42,149, 98,210,164, 73,168, -168,168,136, 60,127,254,252, 90,165, 82,185, 8, 64,163,207,206, 48, 51, 51, 91,178,108,217, 50,171, 18, 53, 7,139, 66,227,145, - 87, 82,233, 27, 36, 2, 26, 31,189, 34,196,132, 9, 19, 77,162,163,163,215, 2, 48,216, 96,201,229,242, 85, 33, 33, 33,242,234, -115, 93, 82, 82,130,146,146, 18, 20, 23, 23,163,164,164, 4,227,198,141,147, 61,121,242,100, 35, 42,103,119, 54,180,114, 9, 88, -185,114,165, 72, 32, 16,224,216,177, 99, 29,203,203,203,185, 90,173, 22,132, 16, 93,135, 14, 29, 98, 38, 78,156,200,143,139,139, -235, 10,192, 32,131,165,200, 0,175, 80,165,250,102,235,151,159,201, 1,224,227,185, 95,125, 3,168, 58, 19, 3,150, 41, 50, 16, - 24, 5,176, 6,171, 97, 56, 0, 94,231,241,120, 35,219,183,111, 31,240,228,201,147,104,157, 78,247,127, 0,254, 15, 45, 63,118, -175,216,218,218,174, 74, 79, 79,223, 10,224,199,255,202, 1,109,215,174,221,207,251,246,237,179, 56,121,242,228,176, 21, 43, 86, -140, 2,176,183, 5,114, 60, 0, 93,171, 76,213,163, 42, 99,133, 42,163,213, 1, 64, 59, 0, 87,154,114,195,107,225,218,205, 24, - 92, 89, 88,215,238,189,122,188,245,198, 8,169,220,220, 4,165, 21,122,196, 37,102, 56,158, 57,249,115,175,199,124,113,164, 78, - 83, 56, 38, 55, 46,178,164,169,154,125,250,246,239,209,247,149,126, 82, 19, 19, 83,228, 22,107,241, 52, 49,213, 41,226,247, 95, -130,105,174,248, 34, 40,237,219, 89,247,126, 47, 99, 47, 57,150,166, 96, 80, 39,119,138,162, 96,100,108, 84,231, 58, 19, 19, 19, -244,238,221, 27, 33, 33, 33, 60, 0, 93,106,173,126, 97,168,166, 94,175, 86, 44,250,104, 58, 4, 92, 34,124,109,208, 0, 74, 38, -147,181, 88, 19, 0,172,205,117,253, 58,187,169,122,101,198,204, 24, 31, 19,177,202, 91, 93, 94,240,135, 39,157, 74, 36, 18,184, -184,184, 96,225,194,133, 6,105,182, 2,127,186, 38, 33,196,214,195,195,163,120,195,134, 13,110,139, 23, 47, 54, 43, 47, 47, 55, - 2, 96,239,225,215,221,150,166,105, 7,181, 90, 45, 93,186,116,169,229,151, 95,126,233, 38,151,203, 11, 8, 33,242,166,164, 83, -161, 80,108, 8, 9, 9,153,189,123,247,110, 42, 48, 48, 16, 82,169, 20, 93,187,118, 69,104,104, 40,189,100,201,146,121, 10,133, - 98,141,129,251, 30, 28, 20, 20, 68, 49, 0,242, 75,116, 8, 95,221, 9, 87,190, 10, 68,153,154, 65, 97,113, 9, 84, 42, 21, 68, - 34,145,216,194,194,194,184, 9,199,179, 75, 64, 64, 0, 5,224,185,169, 42, 46,174,124,149,148,148, 66,173,214,128,166,105,153, -147,147,147,176, 9,199,211, 42, 40,168,210,127,150,151,151,115,135, 13, 27,134, 33, 67,134,160,184,184,152, 91, 84, 84, 4,181, - 90, 13,154,166,249, 85, 21,123,163,154,106, 9,143, 98, 8, 99,109, 36, 17, 91, 26, 73,196,150, 12, 97,172, 1,192,144,101,106, - 9,143,122,201,249, 83, 78,211,244,174,118,237,218, 61,164,105,122, 47, 0,155, 22,106, 6, 2, 8, 17,139,197,103,221,221,221, - 83, 36, 18,201,121, 0,107,170, 42,224,230,104, 10, 36, 18,201,249,144,144,144, 67,209,209,209,163,206,157, 59,231,124,247,238, -221, 55,214,174, 93, 27,102,108,108, 92,253, 96,222,102, 95,155,206,206,206, 59,175, 95,191, 30,216,173, 91,183, 29, 0,132,173, -116,189,115, 0,248, 85, 25,142,191, 69, 25, 82, 19, 59, 59,187,246,126,126,126,150, 28, 14, 7,193,193,193, 32,132, 4,183, 80, -179, 27,128, 12, 0, 17, 0,178,171,110,198,244, 0,114, 0, 92,170,186, 81, 9,110,146, 38, 87, 22,246,201,167,159, 15,156, 51, -253, 61,105, 84,146, 30,219,207, 40,113,240,114, 54,210,138,133,232, 63,124,178, 73,175,193,227, 6,112,249, 38, 97, 77,213,156, - 55,111,193,192,247, 38,141,151,222, 75,167,113,232, 74, 14, 46, 63, 42, 66, 25,101,134,222,195,223, 55,243, 8, 26,244, 26, 5, -254,158,191,195, 57,250, 15,104,254, 7, 34, 88, 59,145,191,108, 26,190, 12,249,238,135, 69, 52, 69, 17,123,215, 1, 15,156, 93, -186,148, 50, 12, 3,149, 74, 5,141, 70, 3, 30,143, 7,149, 74,133,164,164, 36, 92,191,126, 29, 38, 38, 38, 77,250,227,130,194, - 66,216,217, 59, 67, 34,145,180,138,230,148, 55, 71,112,147,149, 74,110,100, 84,120,167, 3,155,246,117,114,104,215,255,145,111, -239,207,239, 25,155, 56,170, 98, 98, 98,112,245,234, 85,228,231,231,163,186, 2,253, 55, 64, 81,148,118,221,186,117, 81,233,233, -233,184,116,233,146,223,178,141, 63,181,185, 87,212,142,155, 93, 66,120,114,227, 76, 39,119,241, 99,125,126, 94, 94,194,236,217, -179,207, 43, 20, 10,245,244,233,211,123, 25,162,107,103,103, 39,162, 40,170,211,128, 1, 3, 62,154, 56,113, 34, 18, 19, 19, 49, -103,206, 28,117, 76, 76, 76, 65,167, 78,157,204,214,173, 91,199,127,255,253,247, 17, 25, 25, 57, 59, 60, 60,252, 48,128,251,105, -105,105, 13, 61, 75, 77, 32, 18,137,128,194,202, 27, 85,141,142,160,186, 91, 88, 73, 73, 9,104, 82, 0, 62,159, 79,211, 52, 45, - 7, 96,208,157, 39,195, 48,124,129, 64,128,210,210, 82,148,148,148, 32, 45,187, 4, 73,153,165, 40, 46,173,128, 74,165, 69, 69, - 57,129, 80,106, 77,107,179,179, 45, 0,164, 25,162, 73, 8,161,171,155, 27,213,106, 53, 84, 42, 21,212,106, 53,212,106,245,243, -199,249,112, 56, 28,169,157,157,157, 44, 45, 45, 45,191,209,218, 84, 32,214,113,104,126,200,130,149,223, 44, 5, 0, 14,205, 15, - 49, 70, 57, 99,200, 50,142, 64,172,123,137, 89, 75, 40,151,203,195, 15, 29, 58,228,225,226,226,130,103,207,158,185,191,245,214, - 91,157,149, 74,165, 31,128,166,222,197, 75,104,154,254,114,226,196,137, 31,142, 29, 59,150,114,117,117, 5,151,203,133, 78,167, -179,143,143,143,239,115,240,224,193,185, 59,119,238,220,174,215,235,103, 27,122,238, 1,208, 2,129,224,192,182,109,219,122,118, -238,220, 25,123,247,238,197,141, 27, 55,152,192,192, 64,122,194,132, 9,112,114,114,234, 50, 97,194,132, 35, 21, 21, 21, 67, 12, -137,176,214,129, 83,215,174, 93, 29, 56, 28, 14,186,117,235,198,143,140,140,244, 7, 16,217,210,128,179,189,189,125, 68,239,222, -189,253,206,158, 61, 27,149,145,145,209,187, 9,251, 11,133, 66, 49,220,218,218,122,173, 84, 42, 53, 51,244, 55, 37, 37, 37,101, -153,153,153,115,210,211,211, 15, 27,152,255,187,249,248,248, 64,167,211,193,196,196, 4, 54, 54, 54, 61, 40,138,154,109, 98, 98, -242,122, 81, 81,209,172,180,180,180, 27, 77,216, 95,187,170, 27,248,234,231, 2,182,169,138, 90, 1,149,207,179,124, 6, 32, 1, -128, 45, 0, 7, 24,208, 92,104,209,174,247,208,110,193,125,122, 4,119,246,166, 87, 31, 78,132,158, 97,192,133, 30, 92, 14,131, - 28, 61, 15, 20, 69,193,201, 45,144, 99,125,239, 86, 23,157, 70, 51, 52, 55,238,236, 49, 67, 52, 7, 14, 24, 16,220,193,205,149, - 94,127, 52, 25, 5,105,247,244,153,143,206,231, 80, 52,141,182,190,253, 45,157,220,252, 56,237,253, 94,225,101, 38,222,235,163, -105,223,179, 95,126,252,197,179,172,109, 96,105,142,193, 34, 53,239,172,150,124,143,197, 22,166,104,243,224,222, 29, 58, 37, 67, - 93,122,231,206, 29, 88, 88, 88,192,202,202, 10, 50,153, 12,177,177,177, 56,123,246, 44, 30, 63,126, 12, 66, 8,252,252,252,154, -244,199,153, 25, 25,200,205, 43,110, 85, 77, 71,133, 2,142, 10, 5, 55, 39,191, 0, 87,239,220,245, 56,182,189, 95,135, 76,122, -234,110,149, 74,245,124, 27,173,246,223,215,234, 98,101,101,165,255,248,227,233,185, 83,190, 73,104, 55,166,175, 29,103,120, 87, - 27, 28,141, 84,114,194, 46,112,200,162,119, 59,230,196,199,199, 25,188,211,142,142,142,171,122,246,236,249, 25,151,203,229,189, -255,126,229,244, 35, 51,102,204,168,184,123,247,174,103,106,106,106, 66, 69, 69, 69,135, 89,179,102,221, 61,114,228, 8,239,189, -247,222,163,202,203,203,111,240,120, 60, 18, 17, 17,177, 92,169, 84, 46,173,211,104,112, 56,209, 15, 30, 60,104,163, 19,217,194, - 82, 74, 99,192,162,168,202, 26, 71, 72,144,147,153,134,251,241, 55, 33,151,203, 77, 44, 45, 45, 31,101,101,101, 85,100,102,102, -126,146,144,144,176,167,161,116,242,120,188,251,119,239,222,181,183,182,182, 70, 73, 73, 9, 82,178, 74,177,235, 42,133,178, 10, - 49, 0, 49, 56,144, 66,106,233, 32,109, 75,202, 98,204,204,204, 52,106,181,122,222,147, 39, 79,126,108, 68, 51,255,225,195,135, - 70,118,118,118,224,112, 56,154,131, 7, 15,242,213,106, 53, 8, 33,186,147, 39, 79,142, 46, 40, 40,232,214,174, 93, 59,218,201, -201,105,157,163,163,163, 74,169, 84, 78, 73, 76, 76,172,247, 65,195,167,103,180,215,244, 90,122,225,219,130,103, 41, 7, 1,192, -174,179, 71,222,241,165,254,234, 94, 75, 75, 26, 93,118,122, 70,251,151,217, 79,240,157, 5, 11, 22,120,152,155,155, 99,218,180, -105, 88,182,108, 25, 22, 47, 94,236, 50,109,218,180,247, 1,108,104,130,142,216,198,198,230,230,166, 77,155,220,187,119,239,142, -147, 39, 79, 98,255,254,253, 72, 72, 72,208, 57, 59, 59,115, 59,119,238,140, 37, 75,150, 96,192,128, 1, 83,166, 79,159,222, 43, - 61, 61,221,223, 64,211, 49,121,201,146, 37,195,123,244,232,129, 73,147, 38, 85, 92,184,112, 97, 20,128, 51,191,255,254,123,223, -136,136,136,195, 63,253,244,147, 56, 36, 36,100,224,172, 89,179, 62, 0,176,181, 25,251, 63,162,103,207,158, 0,128, 30, 61,122, - 96,237,218,181, 3, 90,104,176, 4, 22, 22, 22, 39,246,238,221,235,231,230,230,134,183,223,126,219,127,212,168, 81, 39,242,243, -243,251, 3, 48,232,185,145, 10,133,226,203,109,219,182,181, 23,139,197, 6,255,169, 90,173, 54,159, 58,117,234,154,166, 24, 44, -111,111,111, 92,184,112, 1,253,250,245,131,151,151, 87,251,169, 83,167,174, 27, 48, 96, 0, 62,253,244,211,203, 58,157,206, 54, - 51, 51,211,208, 7, 61, 59, 1,168,126,110,169, 35, 0, 23, 84, 54, 7, 2, 64,231,170,247,103, 85,102,171,131, 33, 6, 11, 34, -163,119,134, 13, 25, 34,253,191,200, 44,232, 25, 6,238,118, 34,120, 56,202,144,152, 85,142,196,180, 92,240, 40, 13,164, 98, 33, -124,186,189,102,150,151,153,248, 14, 12,233, 30, 32,148,188, 51, 98,216, 16,227,159,175,102,161, 32,237, 62, 73,186,121,240,188, -182,188,116, 10, 0, 60,184,248,227,247,214,102,162,254,174,190,157, 56,101,193,195,205, 34,142,126,247, 78, 62,192, 26,172, 63, - 31,210,132, 40,239, 63, 47,130, 85, 77,110, 1, 84, 22, 54, 30, 72,201,136,174,252,158,155,139,220,220, 92,180,109,219, 22,155, - 55,111,126, 97,219,230, 62,129,254,207,208,180, 52, 51,197,176, 62,189, 56,247, 98,191,227,168, 24, 85,171,104,254,109,115, 34, - 33,132,162, 40, 42, 41, 71,107,154, 83,164,229,143,238,227, 64,120, 28, 26, 99,250, 56, 82, 91,143, 37,241,115, 84, 18, 83, 14, -135, 67, 19, 66, 26,189,147,247,247,247,231,121,123,123,127,182,115,231, 78,158, 82,169,132,169,169, 41,180, 90, 45,162,163,163, -211,149, 74,101, 2, 0,100,100,100,196,222,184,113, 35, 83,175,215,219,187,187,187, 99,234,212,169,232,208,161, 3, 53,123,246, -236,185, 7, 14, 28, 88,142, 58, 70, 44,102,102,102,134, 44, 92,184,176,231,170,181,155, 45,198,119,166, 80, 90,166, 70, 73, 73, - 9, 18,227,238,131,148,168,177,126,253,215, 16,139,197, 20, 0,126,118,118, 54,127,233,210, 37, 59, 76, 77, 77,135,220,190,125, -123,100,189, 6, 61, 51,115,229,146, 37, 75,130,214,175, 95,111, 94, 82, 82, 2, 85,121, 57,138, 85, 2, 92,255,186, 50, 66,217, -121,214, 13,108,253,106, 29,237,237,100,100, 81, 82, 82,130,207, 62,251,108,147, 68, 34,233, 18, 19, 19,243, 97,125,154,105,105, -105, 49, 11, 22, 44,144,111,217,178, 69,216,161, 67,135,187, 69, 69, 69,200,207,207,167,143, 28, 57,178,194,201,201,201,124,211, -166,205,148, 68, 34, 1, 0,164,164,164,240, 23, 45, 90,120,192,216,216,248,167,123,247,238, 77,170,239,244, 68, 44,237, 93, 1, - 16,165,173,109,219,246,101, 87,233,165,182,182,229,151, 35,150,166,135, 2, 68, 89, 21,135, 36, 54, 54, 54,227,147,247, 10,123, - 84, 84, 48, 27, 51, 50,146, 30, 3, 47,247,161,178,150,150,150,211,135, 15, 31,142, 53,107,214,224,216,177, 99,179,204,205,205, -191, 94,182,108, 25,108,109,109, 63, 78, 79, 79,223, 88, 85, 0, 26,194, 87, 27, 54,108,112,119,119,119,199,196,137, 19,213,103, -207,158, 93, 0,224, 40,128,164, 75,151, 46, 57,238,217,179,103,232,129, 3, 7,214,108,218,180, 73,180,101,203,150,246,111,188, -241,198, 70,134, 97,222,109, 76,212,218,218,250,211,177, 99,199, 98,221,186,117,184,112,225,194, 27, 0, 78, 86,173, 58,117,229, -202,149,161, 33, 33, 33,231, 22, 45, 90,132, 13, 27, 54,204, 76, 77, 77,109,170,193, 50,246,240,240,248, 98,224,192,129,184,116, -233, 18,130,131,131,209,181,107,215, 89, 87,175, 94,221,140,202,166,173,166, 66, 27, 27, 27, 31,216,189,123,119,112,155, 54,109, -176,114,229, 74,124,246,217,103,216,185,115,103,240,219,111,191,125,160,180,180,116, 36, 12, 24,229,107,108,108,108, 44, 22,139, -177,102,205, 26,146,156,156,220,104,244, 84,161, 80,152,125,241,197, 23,148,137, 97,205, 0, 28, 91, 91, 91, 19,107,107,235,158, - 54, 54, 54,216,180,105, 19,172,172,172, 48,107,214, 44, 88, 88, 88,160,180,180, 20, 35, 71,142,228, 93,187,118,109, 12,128,205, - 6,238,183, 5,128,234,136,151, 71,149,185, 42,174,250,126, 13, 64,143, 42,131,149, 7,192,220,160, 3, 73,136,183,153,169, 12, -233,119, 51,193,133, 14,238,142, 82,220,138, 47,133, 70, 79, 32, 49, 50, 70,105,113, 1,124,219,203, 81, 84,102, 15,128, 49,104, - 18, 76, 62,135,238, 36, 16,138,145, 85, 84,136,140,135,231,114, 53,250,138,169,133,207,174,164, 0,128, 89,219,224,169,247,175, -159,190, 53,114, 80,176, 85,118,190, 35, 8, 97,130,192,194,210,148,139,191,177, 13, 24,230,143,215,126,205,136, 80, 53, 26, 77, -203,110,184,255, 12,205,186,248, 51, 52,255, 14, 62,203,206,140, 91,104, 36,162,117,191,223,202,210,107,117,122,252,118, 43, 67, - 47, 17, 82, 58, 51,161,186,136, 97, 24,131, 42,196,168,168, 40,237,165, 75,151,246,206,159, 63, 31, 27, 54,108,192,211,167, 79, -193,227,241,224,230,230,102,109,111,111,175,168, 42,184, 29,188,188,188, 44, 57, 28, 14,226,227,227,177,127,255,126, 44, 93,186, -148,220,190,125,123,103,125, 21,133, 82,169,140,206,204,204,220,182,122,249,130, 2, 94, 69, 58, 36,250,108,232, 11,158,130,167, - 47,196,244, 89,243,241, 44, 71,143,232,103,197,136,126, 86,140, 12,149, 8, 95,172, 92,207,113,113,113, 25,106,103,103, 55,160, -190,180,166,167,167, 95, 83, 42,149,161,139, 23, 47, 46,204,201,201,121,158,127, 52, 58, 6, 26, 29, 83,187,114,194,234,213,171, - 77, 21, 10,197,104, 91, 91,219,222,245,105,102,103,103,103,165,167,167,199,207,159, 63, 95,147,157,157,141,162,162, 34,156, 62, -125,250,141,182,109,219,154,207,158,191,156,122,150, 67,158,167,179,144, 49,197,186,205,219, 57,237,218,181, 27,167, 80, 40, 26, -236, 71,100,107,107,215,222,195,163,221,161,107,215,174, 77,106,223,190,253,135,213,198,170,218, 72, 57, 59, 59, 79,187,125,251, -246,100, 63, 63,207, 67,214,214, 54, 29, 94,114, 94,234, 51,122,244,232, 14, 12,195,224,208,161, 67,119, 1,108,248,249,231,159, -111, 86, 84, 84, 96,204,152, 49,206, 0, 6, 26,168, 19, 56,110,220,184, 15,131,131,131, 49,115,230, 76,205,217,179,103, 59, 1, -248, 26,149,163,199, 8,128, 36, 0,155, 35, 34, 34,124,167, 79,159, 94, 17, 20, 20,132, 73,147, 38, 77, 70,253,125,114,170,233, - 54,118,236, 88,119,134, 97, 16, 22, 22,118,167,134,185,170,230,252,225,195,135,175,169,213,106,140, 31, 63,190, 45,128,190, 77, -216,119,190, 80, 40, 60,180, 98,197, 10,211,180,180, 52, 76,152, 48,161, 34, 54, 54, 22, 75,151, 46, 21,155,152,152,156, 4, 96, -220,212,131, 41, 20, 10,127,248,238,187,239,134,251,248,248,224,131, 15, 62, 80,127,251,237,183, 51, 62,252,240, 67,117,167, 78, -157,240,205, 55,223, 12, 23, 8, 4, 77,122, 4, 72,102,102,102, 65, 68, 68,132, 69, 99,175,140,140,140, 76, 67,244, 28, 28, 28, - 76,189,188,188,238, 6, 6, 6,230,116,236,216,177, 29, 0,220,191,127, 63,251,208,161, 67,196,194,194, 2,167, 79,159,198, 15, - 63,252,128,238,221,187, 67, 42,149,142,105, 98, 20,130,212,248, 92,215,250,218,219, 53, 12, 69,145,194, 50, 29,184, 52, 13, 30, -135, 32, 41,179, 28, 26, 61, 1,159, 71,131,199, 1,184, 52,129,133,148, 7, 30,143, 3, 67,111, 82,104,138, 66,126,169, 22, 92, - 14, 5,158,128, 79,209, 58,253,243, 16, 33,205,213,139,133, 34, 33,101,101,194, 7,159, 75,129,162,192,194,210,122, 17, 44, 0, -208,235,255, 24,248,168, 43, 10,164, 86,171, 91,148,144, 63, 67,179, 46,254, 12,205,151, 73, 81, 81, 17, 55, 34, 34,194,132,199, -227, 25, 13,241,233,158,251,229,193, 56,203,101,251, 30, 67,192, 1, 53,180, 35,173,188, 16,126,150,202,207,207, 55,115,113,113, -201, 55, 68, 47, 33, 33, 97, 74,104,104,232, 74,154,166,131,244,122,253,193, 13, 27, 54, 96,235,214,173,146,105,211,166,197,234, -245,250, 52, 87, 87, 87,135,141, 27, 55, 10, 1, 32, 52, 52, 20,191,253,246,219, 8, 30,143,119, 35, 57, 57, 57,163, 33,221, 59, -119,238, 44, 42, 40, 40,136, 76, 72, 72,216, 76, 81,148,169, 84, 42, 53,251,249,231,159, 41,101,129, 26,139, 66,159, 62, 31, 89, -104, 36,228, 96,254,235,114,188,249,230, 91,220, 39, 79,158,124,149,150,150,246, 91,125,154,209,209,209,179, 10, 10, 10, 34,226, -226,226, 54,240, 45,220, 44, 68,222,239, 75,251,206,175,108,126, 84,152, 11, 65, 87, 21,136,133,133,133,200,201,201,193,228,201, -147, 77, 87,173, 90, 53, 55, 61, 61,253, 66,125,154, 49, 49, 49,215, 10, 11, 11,149,113,113,113, 93, 8, 33, 2, 19, 19,147,238, - 27, 54,108,160,146,242,212,152,183, 39, 30,197,229,149,233,148,138,120, 88, 62,214, 30,147, 38, 77,226, 62,123,246,236, 75,165, - 82,217,163,110,115,101,235,226,225,225,113,104,223,190,125, 30, 27, 55,110,204,123,242,228, 73,169, 66,161, 88, 86,115,155,196, -196,196,138,213,171, 87,231,134,134,134,186, 77,152, 48,225, 80, 84, 84,212,168,230, 78,169,209, 82,100, 50,217,154,169, 83,167, -226,192,129, 3,200,207,207,223, 88,149,199, 54,236,219,183, 47,108,202,148, 41, 8, 13, 13, 93,147,157,157,125,218,128, 74,113, -208,152, 49, 99,112,234,212, 41,156, 59,119,238, 11, 0, 15,234,217, 46,238,210,165, 75,115,127,249,229,151, 77, 99,199,142,197, -174, 93,187, 6,162,178, 3,116,125,244, 31, 48, 96, 0, 78,158, 60,137,220,220,220,111,234,218,160,160,160,224,219, 95,127,253, -181,203,128, 1, 3,176,122,245,234,254, 0,206, 27,176,235,238, 38, 38, 38,187, 55,109,218, 20,232,227,227,131,113,227,198,149, -107, 52,154,129,159,125,246,217,177,253,251,247, 75,247,238,221, 27,240,254,251,239, 95,207,202,202,122,175, 42, 2,211,120,229, - 77,211, 33,235,215,175,127,183,119,239,222,152, 53,107,150,238,183,223,126, 27, 6,224,204,233,211,167,227, 63,255,252,243, 19, -235,215,175,231,172, 91,183,238,221, 79, 62,249, 36,155, 97,152, 5, 47,227,124, 83, 20,181,110,253,250,245, 30,158,158,158, 40, - 47, 47,199,211,167, 79,145,153,153,185,239,244,233,211,103,238,221,187,183, 54, 35, 35,227,136,181,181,245,148, 89,179,102,217, - 7, 6, 6, 6,150,150,150,154, 25,210,255,176, 70,100, 42, 11,192, 67, 84, 14, 44,170, 62,110,157, 81,217, 52, 8, 84,142, 40, -204, 55, 48,177,119,227,158,165,181, 53, 51,150, 33,159, 17,224, 89, 90, 14,196, 70, 70,160, 9, 13,157, 42, 31, 46, 78, 86, 96, - 8, 80,148,147, 6,154,166,238, 26, 34,169,213, 51,183, 19, 83, 50,237, 76,141, 68,112,233, 52,216,226,206,249, 93, 63,202,218, -118,127,159,203,161, 56, 60,129,241,182,113, 99, 39, 90,106,245, 4, 37,249, 74, 80, 28,250, 6, 88, 88, 90, 59,130, 85,187,221, -191,118, 20, 72, 44, 22,163,162,162,105,211,165,252, 25,154,134,252,103,107,107,190, 76,180, 90,173,244,195, 15, 63,236,145,154, -154, 42,115,115,115,139, 31, 28, 40,191,186,115, 70,219,171,157,101, 15,202, 22,190, 70, 93,117, 16,101,222, 20, 10,133,201,249, -249,249,130,208,208, 80,127,173, 86, 43, 49, 68, 55, 35, 35, 35, 57, 61, 61,253,208,225,195,135,127, 60,126,252, 56, 58,116,232, -128,139, 23, 47, 74,227,226,226,220,195,195,195,141, 92, 92, 92,112,228,200, 17,252,250,235,175,219,149, 74,229, 47,141,153,171, -106,146,147,147, 79,199,196,196,180,207,205,205,109,111,106,106,170, 53, 53, 53, 69,237,145,133,165, 21,122, 20, 20, 21,195,212, -212, 20, 18,137,196,185, 49,205,196,196,196, 99,119,238,220,105, 11,115,247, 96, 78,194,190,194,111, 63,238,128,111, 63,238,128, - 21,111,183,131,141,153, 0, 5, 5, 5,200,206,206, 70,118,118, 54, 8, 33,208,235,245, 30, 6,104, 38,199,196,196, 28, 72, 75, - 75, 59, 43,151,203, 41, 99, 99, 99, 16, 0,249, 37, 26, 92, 89, 27,136, 43,107, 3,145, 95,162, 65,113, 73, 41,236,236,236, 32, -149, 74,235,108,142, 48, 51, 51,147, 18, 66,246,236,216,177,195, 93, 42,149,114,166, 76,153, 98,122,245,234,213, 30, 87,175, 94, -157, 87,235,213,227,227,143, 63, 54,147, 72, 36,156, 93,187,118,185,114, 56,156,221, 78, 78, 78, 38,127,113,118,226, 0,248,104, -202,148, 41, 1, 34,145, 8, 91,183,110, 77, 0,240, 83,213,186, 67,223,126,251,109, 44, 0,204,152, 49,195, 11,192, 44, 52, 60, -146, 18,124, 62,191,147,135,135, 7,174, 94,189, 10, 0, 63, 55,242,223,135, 35, 35, 35,225,226,226, 2,145, 72, 20,216,200,182, -206, 14, 14, 14,136,141,141, 5,128,232,250,188,119,108,108, 44, 28, 28, 28, 64, 81,148,179, 1,251, 62,252,213, 87, 95,189, 27, - 30, 30, 30,216,173, 91, 55,188,251,238,187,234,235,215,175, 15, 6,112, 49, 58, 58,186,207,248,241,227, 75, 93, 93, 93, 17, 17, - 17,225, 62,126,252,248, 72,154,166, 87, 26,160, 57,121,249,242,229,243, 71,140, 24,129,229,203,151,147,131, 7, 15,142, 3,112, -166,106,221,111, 97, 97, 97, 19, 86,173, 90, 69, 70,142, 28,137,101,203,150,205, 7,240, 65, 67, 98,101,101,101,133,122,189, 30, -101,101,101, 6,221, 33, 26,186,125,219,182,109, 7,121,122,122,226,151, 95,126,129, 64, 32,192,239,191,255, 14,154,166, 79,100, -100,100,156,185,125,251,182, 79,122,122,250, 10,165, 82,121, 56, 62, 62, 30,193,193,193,180, 94,175, 31,105, 96,126,122, 6,192, -167,234,115, 10, 42,251, 99,117, 3,208, 29, 64, 92, 85, 36, 19,168,124,158,221, 51, 67, 4, 25,117,201,222,115, 39, 15, 23,154, - 25,243, 97,105,102, 4,107, 75, 25, 56,218, 82, 64, 93,128,246, 78,214, 8,242,176,193,179, 44, 53, 34,207, 30, 42, 40, 43, 41, - 51,104,122, 9,189,166,116,247,185,211,191, 20,154, 27,243,209,166,189, 39,134,142,155,233,231,238,211,249,119,111,255, 30,191, - 45, 90, 18,210,241,213, 30, 30,212,131,148,114, 92, 59,119, 52,191,172,184,104, 55,107, 25, 88,154, 27,193,170, 43, 0,154, 53, -107,214, 44,171,217,179,103, 67, 38,147, 33, 55, 55, 23, 90,173,246,121,180, 73, 40, 20,194,212,212, 20,185,185,185, 8, 11, 11, - 67,213,221, 74,253, 37, 56, 71,160, 92,249,205, 22, 7,138, 99,164, 22,138, 37,196, 92,210,114, 77, 0, 80,107,185, 89,223,133, - 29, 49, 31,212,179, 43,215, 81,161,248,195,250,230,104,254, 67, 12,214,239, 25, 25, 25, 1, 29, 58,116,200,112,114,114, 82,149, -151,151,131,168, 84,197, 39,195, 54,182,115, 48,249,224, 41, 77,211, 68, 44, 22, 51,166,166,166,165, 79,159, 62,165,116, 58, 93, -120, 83,244, 9, 33,211,166, 77,155, 70, 95,186,116,105,220,219,111,191,141, 54,109,218, 32, 58, 58, 26,161,161,161, 56,124,248, -240, 30, 62,159, 63,163, 57,233, 78, 73, 73, 41,241,240,240,120, 33, 2, 82,123,100,161,182, 34, 27, 12,195, 24,220, 57, 63, 63, - 42,244, 49,199,210, 82,235,229,248,191,233, 68,242,243,243,145,157,147,131,236,236,108,228, 84,189, 19, 66, 12, 14, 97, 82, 20, - 85,172, 86,171,107,165,243,127,205,143,165,165,165,208, 84,100, 65,175,215,215,169,153,159,159, 95,172, 80, 40,182,108,222,188, -121,253,138, 21, 43,172, 54,108,216,144,247,232,209,163, 34,154,166,203,107,221,196,136,218,183,111, 47, 93,183,110,157,245,230, -205,155,243, 24,134,217,146,148,148, 84,248, 23,102,165, 17, 62, 62, 62,123, 6, 13, 26, 36,253,240,195, 15,177,121,243,102, 40, -149,202,121, 0,170, 71, 50, 50, 57, 57, 57,159,127,243,205, 55,199,231,206,157, 11,141, 70,179,238,228,201,147,203,162,162,162, -166,213, 48, 97, 47, 32,151,203,237,185, 92, 46,162,162,162,138, 0, 60,109,204,211, 71, 69, 69,101, 82, 20,101,173, 80, 40,218, - 37, 36, 36,212,187,161,185,185,121,123,169, 84,138,180,180, 52, 52, 80, 49, 39,166,167,167, 19,129, 64, 64,217,218,218,186, 84, -109, 91, 47,102,102,102,159,239,216,177,131, 27, 30, 30,142, 37, 75,150,164, 38, 37, 37,141,175, 17, 69,139,186,125,251,118,112, -159, 62,125,246,207,157, 59,215,237,203, 47,191,164, 98, 99, 99, 63,136,138,138, 90,212,144,166,147,147,211,180,201,147, 39, 99, -203,150, 45,216,182,109,219, 7, 0, 14,213,218,100,255, 55,223,124, 99,102, 97, 97,177,101,234,212,169,216,189,123,247,248,103, -207,158,125, 87,159, 94, 90, 90,218,220,209,163, 71, 47,206,203,203, 11, 49,228,132, 26,178,189, 66,161, 24, 22, 16, 16, 96, 77, - 8,193,230,205,155, 51,182,108,217, 82, 86, 84, 84,244,147, 82,169, 12,175, 21,137, 59,114,250,244,233, 89, 31,126,248, 33,194, -195,195,183, 70, 68, 68, 16,165, 82,185,163,145, 36, 40, 81, 57,207,149, 71, 85, 4, 43, 5,127,236,200,238, 86,245,158,106,200, - 62,229,198, 93, 56,198,225,137,174,196,220,184,240,170,179, 87, 48,207,202, 76, 10, 59, 23, 75,152, 27,243, 65, 0,220, 75, 82, -225,218,197, 51,218, 44,101,114,164, 33, 35, 8,171, 53,159,240,197,145, 18, 75,167, 87,219,122,246,224, 58,187,184,162,127,247, -142,102, 22, 50, 30,212, 90,130,223, 99, 10,113, 53,226,148, 54, 43, 51, 37,156, 29, 65,248,215, 5, 86,255, 75, 17,174, 96, 46, -151,251,213,231,159,127,190,237,225,195,135,219,226,226,226,182, 69, 69, 69,109, 91,185,114,229,182,165, 75,151,110, 11, 8, 8, -216, 70,211,244, 87,168,236, 59, 81, 59, 34,230,253, 87,104,246,234, 5,238,184,129, 88,185,124, 26,183, 44,116,165,131, 54,251, -226, 40, 66,238,127, 64,150, 79, 3,105, 65, 58, 91,202, 95,165,233,197,229,114, 79, 59, 57, 57, 93,219,187,119,239,129,168,168, -168, 93,230,230,230,233, 43, 87,174,220, 49, 99,198,140, 48, 27, 27,155, 27, 60, 30,239, 44,128,142,205, 77,167,181,181,245, 27, -111,191,253, 54, 57,117,234, 20,121,243,205, 55,137,173,173,237,224,150,238,123,151, 46, 93, 50,238,221,187, 71, 30,166,148,146, - 55, 86,197,144,238,115,110,146,238,115,110,146,129,139,110,144,239,247,159, 33, 75,150, 44, 37,222,222,222,103,155,162,233,235, -235, 27,151,149,149, 69, 8, 33, 36, 47, 47,143,196,198,198,146, 75,151, 46,145, 35, 71,142,144,109,219,182,145,144,144, 16,166, - 99,199,142,123,154,162,217,181,107,215,188, 39, 79,158,144, 7,201,165,100,196,138, 59, 85,233,188, 65,134, 44,185, 77,194, 78, - 92, 35,203,151, 47, 39,158,158,158, 7, 27,210, 84, 40, 20, 99,230,204,153,163,204,203,203,211, 6, 6, 6, 70,212, 94,239,239, -239,127, 52, 39, 39, 71,187,112,225,194, 76, 91, 91,219,137,127,117, 94,178,176,176,184,146,154,154, 74, 18, 18, 18,200,103,159, -125, 70, 56, 28, 78,157,149, 39, 77,211, 91,103,206,156, 73,158, 62,125, 74,210,211,211,137, 66,161,136,110, 32,157, 67,172,172, -172,110, 1, 24, 97, 96,122,134, 88, 89, 89,221, 0, 48,178,161,125,119,116,116,124,144,154,154, 74, 60, 61, 61,243, 26, 18,115, -113,113, 73, 73, 77, 77, 37,174,174,174,105, 6, 28,207,215,172,173,173,111, 3, 88, 5, 64,212,192,205,232,167, 54, 54, 54, 87, - 0,124,100,128,230,112, 55, 55,183, 40, 0,211, 27,217,239,247,157,157,157, 99, 0,188,246, 87,159,119, 47, 47,175,171,105,105, -105,100,251,246,237, 68,161, 80,204,109,232, 71,109,218,180,249,229,216,177, 99, 68,169, 84, 18, 63, 63,191, 40, 3,211,201, 5, -208, 11,149,253,224,108, 80, 57,241, 40, 15,128, 53,128,222, 0,250,160,242, 9, 28, 6,151, 33, 22,174,221,140,173,189, 7, 29, -247,124,117,122,222,164,213,225,100,238,158,120,242,197, 79, 9,100,230,230,203, 36,112,200,204, 60,219,142,175, 29,183,112,237, -102,220, 84, 77,133,207,224, 19, 29, 7,127,154,247,206,234,115,100,193,222,167,100,233,254, 4,242,201,198, 8, 18, 52,108,102, -174,125,199,161, 63, 91,121,247,151,188,228,114,254,191,162, 89,231, 53,242,111, 55, 90, 2, 0,175, 73,165,210,205, 75,150, 44, -217,118,253,250,245,109, 67,134, 12,217, 38, 16, 8, 54, 87, 21, 12,130,102,156,128, 86,215, 28, 24, 4,233,228, 97,244,174, 21, - 31,112, 53, 71, 55,116,208, 46,159, 6,210, 10,233,252,167,100,232, 30, 60, 30,239,170,143,143, 79,184, 84, 42,205,110,211,166, -205, 37, 30,143,119, 3, 64,207,150,166,211,218,218,218,242,221,119,223,101,158, 61,123, 70, 38, 78,156, 72, 12,104,190,106, 84, -211,193,193,161,239,200,145, 35,181, 41, 25, 5,228, 82, 76, 10, 57,126,241, 1,217,119,252, 42,217,182,255, 12,217,248,221, 30, -210,191,127,255, 10,107,107,107,167,166,104, 58, 58, 58, 14, 28, 54,108, 88, 65, 78, 78, 14,137,141,141, 37, 23, 47, 94,124,110, -174,190,251,238, 59,210,177, 99,199, 92, 59, 59, 59,219,166,104, 58, 57, 57, 13, 31, 63,126,188, 86,153, 91, 74,174, 63,200, 32, -191, 95,143, 39, 71,207,223, 33,251,143, 95, 37,123,246,255, 76,122,245,234, 85,110,105,105,105,221,152,166, 66,161, 24, 61,106, -212,168, 39,110,110,110,223,215, 97, 6,190, 25, 53,106, 84,146,173,173,237,132,151,148,151, 6,218,217,217,197,242,249,252, 19, - 0, 38, 52,242,187, 49, 92, 46,247,152,141,141,205, 77, 0,175,191,132, 60, 63,196,202,202,234, 26,128, 97, 6, 24,182,107,245, - 24, 60,182, 82,172,204,147, 67,124,125,125, 99,108,108,108,214,163,145, 38, 95, 59, 59, 59,145, 66,161,248,202,207,207,239,170, -141,141,205,200, 38,166,211,190,234,198,118,120,213, 43, 24,149,115, 95, 53,123,223, 45, 92,251, 13,181,243, 27,118,212,182,227, -107, 73,182, 29,135, 36,217,251, 15, 63,106,225,218,111,104, 75, 53,237,253,135,255, 98,235, 59, 36,217,222,119,104,162,163,255, -240,163,150, 29,250, 13, 98,205, 16,107,176,254, 42,140, 1,140,161,105,122, 43,128, 49,104,124, 84,141,247,203,208, 28,216, 11, -118, 31,190,201, 57, 57,111, 18, 47,187, 21,211,249, 79,201,208,195,185, 92,110,100, 85, 65,214,106,233,116,113,113,217, 49,117, -234, 84,189,163,163,227,150,214,210,244,240,240, 88, 63,116,232, 80,205, 15, 63,252, 64,126,253,245, 87,178, 99,199, 14,242,217, -103,159,145,222,189,123, 87,184,185,185, 77,106,142,166,143,143,207,138,190,125,251,230,132,133,133,145, 3, 7, 14,144,173, 91, -183,146,144,144, 16,198,207,207, 47,203,205,205,109, 72,115, 52,189,189,189,127, 24, 62,124,184,102,239,222,189,228,252,249,243, -228,192,129, 3,100,209,162, 69,164, 87,175, 94,229,174,174,174,111, 24,170,217,174, 93,187,250, 12, 62,252,253,253,121,108,129, -203,106,178,154,172, 38,107,176,254,187, 6,171, 26,238,159,112, 2,254, 41,154,255,217,139, 68,161, 80,136, 91, 91,211,214,214, -182,163,151,151,215,185,206,157, 59,231, 7, 6, 6,102,121,123,123, 31, 81, 40, 20, 14, 45, 76,167,159,191,191,255, 33, 63, 63, -191, 39,254,254,254,247,125,124,124,190,175,158,102,162, 5,233,236,236,227,227,115, 33, 40, 40,168, 32, 48, 48, 48,211,211,211, - 51,172, 86,228,138,205, 75,172, 38,171,201,106,178,154,172,193,106,178, 1,169,205,159,241, 24,143,127,138,230,127, 22,165, 82, -169,106,109,205,244,244,244, 59,233,233,233,175,180,114, 58,163,149, 74,229, 91,173,156,206,235,233,233,233,189,217, 92,192,194, -194,194,194, 98, 8, 52,123, 8, 88, 88, 88, 88, 88, 88, 88, 88, 90, 23, 10,245,135,249,154,242,164,236,230,132, 10,239,177,154, -172, 38,171,201,106,178,154,172, 38,171,249,159,211,172,173, 93,187, 47,107,237,209,191, 63,128,165, 85, 78, 12,171,201,106,178, -154,172, 38,171,201,106,178,154,255, 61,205,127, 21,108, 19, 33, 11, 11, 11, 11, 11, 11, 11, 11,107,176, 88, 88, 88, 88, 88, 88, - 88, 88, 88,131,197,194,194,194,194,194,194,194,194, 26, 44, 22, 22, 22, 22, 22, 22, 22, 22, 22,214, 96,177,176,176,176,176,176, -176,176,176,176,176,176,176,176,176,176,176,252, 87, 32,236, 33, 96, 97, 97, 97, 97, 97, 97, 97,189, 72,203, 96,155, 8, 89, 88, - 88, 88, 88, 88, 88, 88, 88,131,197,194,194,194,194,194,194,194,242,207, 48, 88,108,211, 32, 11, 11, 11, 11, 11, 11,203,203,228, - 95,233, 69,122, 85,237, 88, 47,246,252,178,176,176,176,176,176,176,176, 94,132,133,133,133,133,133,133,133,133,133,133,133,133, -133,133,133,133,133,133,165,249,176, 79, 26,103, 53, 89, 77, 86,147,213,100, 53, 89, 77, 86,243, 63, 7, 59,138,144,133,133,133, -133,133,133,133,133, 53, 88, 44, 44, 44, 44, 44, 44, 44, 44,172,193, 98, 97, 97, 97, 97, 97, 97, 97, 97, 13, 22, 11, 11, 11, 11, - 11, 11, 11, 11, 11,107,176, 88, 88, 88, 88, 88, 88, 88, 88,254, 54, 80,168,127, 36,192,189, 38,232, 52,103, 52,193, 61, 86,147, -213,100, 53, 89, 77, 86,147,213,100, 53,255,115,154,141,105,223, 3,203,159, 98,188, 88, 77, 86,147,213,100, 53, 89, 77, 86,147, -213,252,239,105,254,171,224,178,135,128,133,229,159, 13, 57, 4, 14,172, 58, 56,131, 33,182,224, 10,148, 56,127,247, 41,181, 20, - 76,139, 53,109, 61,157,160,214, 90, 67, 44,202,198,111,119, 18, 90,170,201,194,194,194,194, 26, 44, 22, 22,150,127, 14, 10,119, - 55,232,177, 26, 28, 40, 64, 52,241,232,238,185, 26,120,208,178, 16,187,133,187, 27,180,204, 74,112,105,123,168, 53,143,209,179, -195, 26, 32,246, 1,123,176, 89, 88, 88, 88, 12,227,165,116,114, 15, 8, 8,184, 29, 16, 16,176,162, 87,175, 94, 66,246, 20,176, -176, 52, 31,114,215, 91, 2,157,126,144, 90,203,216,157,142, 44,176, 42, 43,215,187,129,175, 27, 76,174,184, 26,183, 72,147, 71, -189, 90,174,101, 28,127,252,189,204,186,180, 92,231, 1, 26, 45,210,172,198,203,203,203, 52, 48, 48,240,180,175,175,175, 37,123, -246, 88, 88, 88, 88,131,213,202, 48, 12,227,111,101,101, 53, 75,165, 82, 37,117,234,212,105,216,127,233,128,119,238,220, 57,178, - 75,151, 46,153, 93,187,118,205,236,218,181,107, 84, 99,203,255,141, 40, 20, 10, 55,111,111,239, 36, 79, 79,207,199, 53,151,203, - 59,190,222,205, 61,120,194, 18, 11,207,225,189,216, 75,211, 64, 74, 25,107,208,156, 62, 15, 18,203, 36, 25, 5, 90,235,219,177, -101, 82, 16, 78,111,104,160,104,145, 38, 67,250,198,196,171,140,174, 62,149, 91, 95,186, 87, 33, 3,161,251,128, 80, 54, 45, 77, -174, 64, 32,248,128, 16,210,159,199,227,205,100, 79,222,127, 30,111, 0,195, 0, 4,182,162,230,151, 29, 58,116, 72, 3,240, 9, -123,120, 89,254, 49, 6,235, 77,103,116, 31,219, 22, 17,163,156, 81, 60,186, 45, 74,198,183,197,229, 55,218,161,217, 21,225,145, - 35, 71,196,161,161,161, 86,158,158,158, 97, 65, 65, 65,151, 59,117,234,228,218, 28,157,128,128,128,211, 1, 1, 1,111,213, 94, -214,169, 83,167,209, 53,151, 5, 6, 6,222, 15, 12, 12, 44, 12, 8, 8,120,106,136,174,191,191,255, 19,127,127,255,210,128,128, -128, 39, 53,151,119,234,212,105,116, 96, 96,224,233, 90,255,247, 86,237,101,245, 30,112,154,182, 63,118,236,152,213,137, 19, 39, -172,184, 92,174,117,237,229,199,143, 31,127, 97,121, 51,142,199,148,128,128,128,200, 90,251,242, 94,237,234,112, 30, 91, 0, 0, - 32, 0, 73, 68, 65, 84,101, 13,209,169, 83,167, 72,127,127,255,247,106,233, 70, 6, 4, 4, 76,105, 13,115,213,179,103,207,203, -209,209,209,142, 82,169,212,180,230, 58, 27, 11,211, 1,145,199,191,153, 53,233,173, 87, 63,144,123,140,240, 97, 47,207,134, 33, - 15, 61,248,208, 49, 61, 25,134,200, 31, 60, 45,151, 15,126,237, 77,110,204, 19,149, 92,171,211,155,131,226,244, 38, 23,156,132, -205,210,212,106,131, 25, 66,172,207,197,240,229,189,135,126,204, 9,191,203,149,107,245,122, 11,104,209,171, 57,154, 53,242, 33, -143,195,225,204,154, 58,117, 42, 77, 81,212,199,237,218,181, 19,252,151,206, 87,144, 55,236,250,118,226,220,240,247, 64,247, 86, -148,245,146, 72, 36,183, 0,184,253,195, 14,135, 63, 0, 9,128, 95, 1, 88,163,117,186,171,108, 88,190,124,249,231,247,238,221, -179,109,219,182,237, 50, 0, 28,182,148, 96,249,219, 27,172,209,206, 88,106,109, 99,119,102,225,134,125, 61,119, 68, 36, 24,127, -123, 44,202,104,214,220,144,238, 54,102,242,147,227,219, 97, 77, 3, 63,189,215,192,157, 44,158, 62,125,138,205,155, 55,139,150, - 46, 93,218,205,196,196,228, 78, 80, 80,208, 70, 15, 15, 15,163, 70,146,243,130, 38, 33,164, 59,143,199,219, 17, 20, 20,180,187, -186,192,166, 40,170,187, 80, 40,252, 33, 40, 40,232,199,234,102,200, 78,157, 58,181,189,113,227,134,140,162, 40,107, 67,210, 25, - 20, 20,164,184,125,251,182, 4,168,140, 4,244,234,213, 75, 24, 24, 24, 24,106,103,103,183, 13,168, 44, 32,219,181,107, 39, 8, - 10, 10,218,237,224,224,176,157,162,168,238,134,236, 59, 77,211, 48, 53, 53,197,190,125,251,192,225,252,239,250,167, 40, 10,166, -166,166,248,233,167,159, 64, 81, 84,147,143,167,135,135,135, 81, 64, 64,192, 17,133, 66,177,145, 97,152,174, 0,224,237,237, 45, - 9, 12, 12, 60,108,103,103,183,169,122,153, 33,154,132,144,174,124, 62,127, 99, 96, 96,224, 97,111,111,111, 9, 0, 48, 12,211, -149,203,229,110, 8, 8, 8, 56,210,148,115,228,231,231, 55,213,199,199, 39,221,199,199, 39,221,205,205,109,149,181,181,245,133, - 45, 91,182, 88,212,220,247,234,200, 85,102, 86,110,126,228,205,251,177,179,166,190,217,219,209,193,122,188, 73,199,225, 38,134, -236,123, 11,248,103,107,230, 82, 86,160, 72,191,216, 36,149,168,141, 75,128,145,149,251,155,144,155,114,133, 87, 31,150, 74,193, -193, 43,224, 73,228,205,211,228,190,114, 63, 65, 37, 54,107, 59, 72, 18,216,165, 39, 40, 35, 87,225,133,232, 82, 25,184,116,243, - 52,107,220,167,117,237,218, 85,208,175, 95, 63,216,218,218,114, 76, 76, 76,198,255,235,207, 81, 13,115, 37, 21, 9,174,175, 95, -254,105,128,173,133,228, 23, 3, 77, 86, 99,233,244,178,178,178, 10,255,230,155,111, 58, 73,165,210,139, 6,154,172,191,195,241, -244, 7,192, 7,112,173,234,251, 3, 0,193, 45,212,220,176,116,233,210,153,243,231,207, 71,113,113, 49, 38, 77,154, 36, 3,176, -222, 80, 77, 99, 99, 99, 23, 31, 31,159, 31, 61, 61, 61,147,125,125,125,213,238,238,238,229,110,110,110,137, 94, 94, 94,123,132, - 66,161,243,191, 61,127,254,141, 52,235,191,249, 35, 68, 64, 8,233, 67, 8,121,141, 16,242, 10, 33, 36,168,234,115, 96,213,235, - 53, 66, 72,191, 90,239,129, 85,191,173, 94,223,185, 30,141,215,106,255,174,198,111,106,127,127,225,179, 33, 6,139,212,122,127, -206, 91,109,209,205,194,198,238,243, 47,143,222, 20, 51,113, 49,184,253,110, 95,196,126, 50, 2,226, 39, 49,152, 55,125,158, 88, - 42, 53,155,254,102, 91,244,105,206, 1,123,252,248, 49,194,194,194, 96,105,105, 73,237,220,185, 83,248,214, 91,111,125, 32,147, -201, 82, 2, 2, 2,198, 27,170,193,225,112,244,187,119,239, 54, 30, 62,124,248, 24,115,115,243,251,254,254,254,109,105,154,214, -239,221,187,215,120,244,232,209,111,169,213,234,135,157, 58,117,114,141,138,138,210,223,188,121, 19, 52,109, 88,208,238,246,237, -219,186, 83,167, 78, 85, 71,116, 92, 9, 33, 15,215,172, 89, 51,230,231,159,127,150,154,152,152, 48,254,254,254,109, 29, 28, 28, -238,127,249,229,151,227, 15, 31, 62, 44,149,201,100, 6,141,176,162, 40, 10,229,229,229, 16,137, 68, 47, 24, 41,138,162,160, 82, -169, 32, 20, 10, 13, 78, 99,141,200,128,151,133,133,197,163,213,171, 87, 15, 63,122,244,168, 88, 42,149, 34, 32, 32,192,195,212, -212, 52,118,237,218,181, 35,126,249,229, 23,177, 84, 42, 53, 88,143,207,231,227,167,159,126,146,140, 27, 55,110,152, 80, 40,124, - 20, 16, 16,224,193,231,243,177,127,255,126,201,248,241,227,135, 72, 36,146,135,254,254,254, 94,134,104,105,181,218,197, 55,111, -222, 84, 92,184,112, 65,225,228,228, 52,227,219,111,191,181,230,241,120, 0, 0,189, 94,255, 66,228,106,252,200,254,157,103, 46, -254, 38, 92, 85, 94,161, 94, 57,111,114,111,158, 30, 93,216,123,160,122, 10,155, 67,224,128,209,251, 3,104, 31,245, 88,101,233, -219,115, 60, 23, 89,191, 34,200,195,152, 27, 17, 85, 98, 69, 8,113,130,142, 4,145, 11,189,184, 77,210,228, 16, 95, 80,140,235, -153,104,202,178, 91,191,241,220,164,164, 36, 56,123,244,230, 28,191, 9,107, 66,136, 51, 24, 4, 52, 69,179, 38, 60, 30,111,201, -168, 81,163,140, 18, 19, 19,209,173, 91, 55,137, 64, 32, 88,220, 26, 81, 60,114,205,205,137, 68,184,246, 38, 87, 92, 21,205, 77, -219,159, 29,185,146,137, 4,215,246,255,120,192,214, 39,120, 10,181,237, 83, 39,115,185,148,247, 75, 11, 35, 89, 94, 86, 86, 86, -231,175, 95,191,110,241,234,171,175, 98,233,210,165,114,153, 76,102,168,201,122,217,145,171,106,115, 37, 70,101,243, 96, 26, 0, -251, 22,104,110, 90,186,116,233,204, 5, 11, 22,224,218,181,107, 88,187,118, 45, 6, 13, 26, 4, 51, 51,179, 70,203,143,183,223, -126, 91,210,173, 91,183,219,195,134, 13,139,153, 57,115,230,248,227,199,143, 59,236,222,189,155,255,206, 59,239, 8, 71,141, 26, -229,244,233,167,159, 78, 28, 60,120,240,189,160,160,160,235,111,190,249,166,168,153,198,128, 34,132, 80,108,169,101,216,225,170, -207,139, 0,232, 56,127,254,252, 32,138,162,142,207,159, 63, 63, 0,128, 37, 69, 81,199, 1,200, 1,200,171, 62, 11,106,189,203, - 9, 33,253,106,172,183,168, 75,163,250, 85,243,119,213,191,169,227, 63,106,127, 54, 40,130,213, 11,192,197,218, 27,112, 9,150, - 79,157,181, 66,244,108,207,215, 80,254,184, 1,116, 78, 26, 56, 5, 25,168,184,248, 43,180,151,142, 97, 66,215,174, 98, 49, 69, -173,108,206,145,148, 74,165,224,243,249,136,139,139,195,195,135, 15, 49,120,240, 96,254,230,205,155, 77,189,188,188,126,232,214, -173, 91, 76, 64, 64, 64, 71, 67, 12,139,139,139, 11,198,140, 25, 35,248,228,147, 79,218,137, 68,162, 40, 66, 8,207,217,217, 25, -163, 71,143,230,207,157, 59,183,141, 72, 36,186,201, 48, 12, 95, 34,145, 52, 20, 29,250,131,174, 88, 44, 6, 0,158,171,171,235, -173,176,176, 48,231,238,221,187,115,207,156, 57,131,162,162, 34,174,155,155, 91,204,254,253,251,219,119,235,214,141,123,249,242, -101,148,150,150, 18, 67,117, 75, 75, 75, 33, 22,139,255, 96,176, 74, 75, 75,255, 96,188, 26, 35, 32, 32, 96, 74,251,246,237,111, -134,133,133,217, 7, 7, 7,115,194,195,195, 81, 92, 92, 12, 39, 39,167, 91, 97, 97, 97,246,221,187,119,231, 68, 70, 70,162,184, -184,216, 96, 77,129, 64, 0,103,103,103,140, 26, 53,138, 55,103,206, 28,123, 30,143,119, 83, 32, 16,192,201,201, 9,163, 70,141, -226,207,158, 61,219, 94, 32, 16, 92, 55,176,201,144, 3, 0, 58,157, 14,111,189,245,150,145, 88, 44, 70, 74, 74, 10, 24,134, 1, -195, 84,122, 82,101,118,238,221, 43, 55,239, 61,154, 53,237,173, 94,165, 21, 21, 21,191, 93,184,245,208,211,213,201,158,162, 72, - 27,182,188,169, 7, 51, 79, 11,112,208, 63, 41, 93, 45, 20, 24,217, 75,141, 45, 59, 0,121, 23,209,214, 86, 8, 16, 74,116,243, - 81,153, 17,104,210, 31,200,177,104,146,166,158,233,159,144,166, 22,106,196,222,198,182,118,142,200,205,205,133,131,179, 59, 42, - 32, 23, 68,222, 43, 53, 6,105,162,102, 21,190,190,190,193, 14, 14, 14, 54,109,218,180, 65, 78, 78, 14, 92, 92, 92, 96,108,108, -108,230,239,239,223,191,217, 37,241, 5, 39, 33, 10,209, 29, 26,106, 61, 40,122, 25, 8,119, 53,184,217,254,228,182, 63,239,111, -103,174,126, 58, 96,103,161,112, 7,238,189, 11,107,115, 1,118,206,247, 53,151, 75,133,205, 53, 89, 94,214,214,214,231,175, 95, -191,110, 41, 18,137,112,251,246,109,120,122,122,226,235,175,191,150,155,153,153,253,157, 77, 86, 77,115,101, 14, 64, 5,128, 1, - 48,182,153,209, 16, 10,192,214, 21, 43, 86,204, 88,176, 96, 1,174, 94,189, 10, 59, 59, 59,100,101,101, 33, 56, 56, 56, 41, 63, - 63,191,193,122,201,211,211,211, 62, 46, 46, 46,237,211, 79, 63,245, 15, 13, 13, 21, 27, 25, 25,161,160,160, 0,219,183,111,199, -252,249,243, 65, 81, 20, 8, 33,216,181,107,151,100,242,228,201, 65,241,241,241,105, 78, 78, 78, 6,117,223,168, 50, 85, 2, 66, -136, 4,128, 17, 0, 9, 33, 68, 52,125,250,116, 1, 0, 97,149,185, 20, 1,224,177,133,217, 31,168,211,139, 0,176, 92,179,102, - 77, 8, 33,100,200,154, 53,107, 66,106,212,157,199, 27,168,111,107,154, 38, 0, 64,109, 13, 66,200,144,154,239, 53,127, 75, 8, - 25, 66, 8, 25, 82,243,247, 13,253, 95, 67, 6,235, 66,213,142,213,182,147, 29,109,218,118, 64,193,239,135, 32,230, 80, 47,188, -232,132,187,112, 16,113,161, 37,196,171, 57, 71,209,216,216,248,249,139,166,105, 40,149, 74,112, 56, 28, 44, 94,188, 88, 52,125, -250,116, 31, 62,159,127, 53, 56, 56,120,117, 99,134, 5, 0,110,220,184, 1, 23, 23, 23,106,193,130, 5,178, 94,189, 42,239, 98, -239,220,185,131,246,237,219, 83,171, 86,173,146, 14, 29, 58,148,146, 72, 36, 6, 71,135,104,154,134, 88, 44, 70,239,222,189,169, -221,187,119, 27, 11,133, 66,156, 56,113, 2, 57, 57, 57,120,245,213, 87,185,187,119,239, 54, 22,137, 68,136,136,136, 64, 97, 97, -161,193,186, 20, 69,161,162,162,162, 78,131, 85, 87,100,171, 33,186,118,237,186,211,198,198,102, 99,104,104,168, 80, 44, 22, 35, - 60, 60, 28,133,133,133, 24, 51,102,140,238,167,159,126, 18,201,100, 50, 68, 70, 70,162,176,176,176, 89,185,252,198,141, 27,104, -223,190, 61,181,112,225, 66,113,215,174, 93,181, 0, 16, 29, 29, 13, 87, 87, 87,106,225,194,133, 98,153, 76,182,161,123,247,238, - 59, 27,210, 96, 24, 6, 74,165, 18,247,238,221, 67, 66, 66, 2,114,114,114,144,157,157,141,226,226, 98,232,116, 58, 0,128,164, -184,232,196,214,221,199, 98,140,196, 98, 73,103, 31, 87,199,235, 81, 15,178,140,196, 98,137,171,179,163, 27,176,148,125,156,211, - 31,175, 73, 10, 60,181, 43, 8,229,127,237, 65,137,121,240,128,177,124,100,159, 2,136, 22,160,184,232,211,217,158,251,203,229, - 82,107, 48,232, 8, 62,220, 9, 1,101,144, 38, 87,227, 2, 80, 1,103,110,235, 44,122, 12,248,128,159,154,154, 10, 62,159, 15, -161, 80, 8,191,238,111,112,247,135,107,109, 0,248,130,135, 14,134,104,214, 68, 40, 20,126, 49,121,242,100,163,180,180,180,231, -154,131, 6, 13, 50,146, 72, 36, 75,154,109,174,104, 73, 87,232,200,204,251, 9, 42,167, 85,123,148,238, 79, 83, 84,238, 32,152, - 13,173,214,175,165, 38,203,209,209,177,183,171,171,107, 66,155, 54,109,122,180,208, 92, 93, 13,251,233,128,157,185, 77,165,185, -130,190, 12,224,136, 97, 99,101,134,157, 75,122,155,203,101,226,166,154, 44, 47,107,107,235,115,215,174, 93,179, 20,137, 68,184, -117,235, 22, 4, 2, 1, 68, 34, 17,124,124,124,176,109,219, 54,185,185,185,249,223,197,100,153, 1, 24, 0,224, 77, 0,111,212, - 48, 87,206, 0,250, 2,232, 15,192, 6, 64, 4,128, 24, 3, 53,123,112, 56,156, 19, 29, 59,118, 76,231,114,185, 15, 66, 66, 66, - 62,154, 59,119, 46, 54,109,218,132,222,189,123, 63,157, 55,111, 30, 98, 99, 99,117,101,101,101,195, 0, 52, 88, 17,150,148,148, -252,186,112,225, 66,147,215, 95,127,189,250, 59, 46, 95,190,140,189,123,247,194,200,200,168,166, 89,194,208,161, 67, 49,101,202, - 20, 51,181, 90,125,164, 33, 77, 43, 43,171, 87,194,195,195, 93, 1, 8,170, 12, 84,181,193, 50, 58,123,246,172,169, 72, 36, 50, - 15, 10, 10,146, 85, 45,151,188,254,250,235, 22, 92, 46,183, 7, 91,170,189, 64,157, 94,164, 62,131, 83,219, 0,213,181,174, 46, -243,212,236,242,183,129,255,107,200, 96,245,174,202,232,127, 64,147,151, 9, 33,244,144,112, 40,136,185, 84,229, 59,135,130,152, - 98,192,205,207, 4,213,204,224,167,177,177, 49,164, 82,233, 31,140,150, 74,165, 66, 73, 73,137, 65, 70,163,186, 47,143,153,153, -217,243, 74,219,216,184,114, 52,185,185,185, 57, 42, 42, 42, 64, 81, 20,140,140,140, 96,100,100,212,164, 8,150, 72, 84, 25, 17, -142,140,140,196,149, 43, 87,192,229,114, 97,110,110, 14, 0,184,117,235, 22,238,222,189, 11,129, 64, 0, 11, 11,139, 38,233,106, - 52,154, 58,155, 8,213,106,117,147,154, 8,105,154, 70,121,121, 57,185,117,235, 22,238,221,187, 7,161, 80, 8,185, 92, 14,129, - 64,128,148,148, 20, 60,122,244, 8, 2,129, 0,114,185,188, 89,231, 71, 38,147,161,160,160, 0, 12,195, 84, 71,243, 32,147,201, - 80, 82, 82, 2,154,166, 13, 74, 39,195, 48, 72, 75, 75, 67, 78, 78, 14,146,147,147,145,157,157,253,220,100, 85, 55, 17,178, 52, -145,203, 94, 38,160,120,175,102, 23,104,133,217, 37, 2, 19,235,246,253,128,156, 83, 0,197, 1,120,102,232,226,223, 22, 73, 25, -122,163,216,100,181, 8, 90, 12,192,121, 55, 51,131, 52, 57,188,254, 89,133, 90, 97, 98,129, 92,230,225,221, 9, 89, 89, 89, 16, - 10,133, 16, 10,133, 8,232,242, 10, 18,210, 25,201,131,103, 42, 9, 8, 94, 53, 72,179, 10, 63, 63,191,118, 98,177,184,171,191, -191, 63,149,153,153, 9,161, 80, 8,145, 72,132,174, 93,187,130,166,105, 31, 95, 95, 95,247, 38, 21,112,241,237, 4,224, 73,186, - 0,100,230,163,103,101,182,191, 68,170,220,134,142,120,195,124,195,193, 44,247, 71,207,202,157,161,214,205, 65,169,166, 83,115, - 77,150,147,147, 83, 47, 99, 99,227,227, 95,124,241,133,179, 80, 40, 60,213,166, 77,155,224,102,149,111, 66,206,247, 95,204, 28, -107,103, 86,109,174,116,165, 0, 71, 12,112, 36,149, 38,203,218, 18, 43, 63,233,103, 46,225,243,254,207, 80, 77,177, 88,188,127, -235,214,173,242,106,115,197,231,243, 33, 18,137,158,191,252,253,253,177,120,241, 98,185,185,185,249,190,151,156, 75,205, 81,217, -175,234, 14,128, 35, 0,206,213, 48, 87, 46, 0,254,175, 42,106, 21, 5, 32,201, 64,205,110, 3, 7, 14, 12,127,250,244,233,224, -152,152, 24, 69, 70, 70,134,251,236,217,179,177,113,227, 70,204,157, 59,119, 31, 33,196,237,208,161, 67,126, 55,110,220,240, 49, - 36, 34,150,145,145, 49,110,222,188,121, 57, 57, 57, 57, 0, 0,111,111,111, 20, 20, 20, 96,206,156, 57,152, 57,115,102,117,222, - 5, 0,100,101,101, 97,221,186,117,153, 25, 25, 25,147, 26,210,212,235,245, 41, 63,255,252,115, 87,181, 90,237, 88,101, 40,133, - 0, 36, 73, 73, 73, 38,165,165,165, 50, 14,135, 35, 53, 50, 50,146, 9,133, 66,163,201,147, 39,243, 31, 60,120,224,161,211,233, -210,216, 66,237, 5,234,245, 34,117, 69,154,234, 91,214,220,237, 13, 53, 89, 77, 53, 88, 17, 0,122,254,193,192, 80,184,147,124, - 51, 2,230,158,254, 47, 70,176,184, 20, 36, 82, 25, 18,210, 82,192, 7,117,191, 25, 9,124,110,170,106,154, 44,165, 82,137,121, -243,230,149,253,248,227,143,119,213,106,117,215, 75,151, 46,205, 55, 36,130,101,101,101,133,228,228,100,242,213, 87, 95, 21,157, - 58,117, 74, 87,189, 44, 37, 37,133, 44, 90,180,168,248,192,129, 3,164, 41, 77,132,213, 17,172,136,136, 8,178,100,201,146,194, -244,244,116, 98,110,110, 14, 11, 11, 11,156, 61,123, 86, 55,127,254,252,194,248,248,120, 98,110,110, 14,115,115,243, 38, 25, 44, -157, 78, 7,177, 88,252,130, 65,161, 40, 10, 90,173,246, 15,145,173,134,184,114,229,202,187,133,133,133,159,206,153, 51, 71,245, -240,225, 67, 34,151,203, 33,151,203,177,103,207, 30,238,196,137, 19, 85,119,238,220,121,190,172, 57, 88, 90, 90,226,241,227,199, - 36, 36, 36, 68,117,238,220, 57, 30, 0,200,229,114,196,198,198,146,229,203,151,171, 10, 10, 10, 62,189,114,229,202,187,141, 20, - 56, 72, 72, 72, 64, 81, 81, 17,244,122, 61, 42, 42, 42,144,157,157,141,212,212,212,231, 6, 75,101, 36, 27,248,241, 59, 67,125, - 75, 85,170,178,235,119,227,146, 59,251,123, 90,149,170, 84,101,113,207,146, 31, 3, 75,217,217,195,255,112,241, 48, 54, 32,164, -199,229,187, 37,166,253, 95, 27, 45,160,138,110, 0,218, 18,128,103, 6,240, 76,193, 21, 89, 96,208, 43,126,156,221,191, 21,217, -128, 98,186, 65, 36,108,188,127, 11, 67,172,193, 48,193,103,111,149,155,245, 24, 60, 93,144,151,151, 7,154,166,159, 27, 44,137, -145, 17, 94, 25,242, 54,189,235,183, 10, 27, 48,164, 59, 56, 28,131,251,204,240,249,252,207,223,121,231, 29,126,126,126,254, 11, -154, 98,177, 24, 35, 70,140, 16, 74,165,210, 69, 6,239,250, 67, 15, 62, 50,133, 93,192,144,153,177,137, 42,219,159,175,168,220, -102, 47,222, 37,246,234,216, 25,211,134, 91,137, 87,133,102,121,198,196,151, 57,131,214,207, 66,153, 58,128,108,107,154,201,106, -211,166, 77,176,145,145,209,137,163, 71,143, 74,250,244,233,131,217,179,103, 27, 9,133,194, 83, 78, 78, 78, 61,155,122,154, 74, -139,245, 31, 47,223, 16,154,121,231,224, 0, 64, 87, 92,101,174,254,247,202, 42,100,176,120,107,120,161, 86, 79,198, 26,170,169, - 82,169, 38,190,247,222,123,185, 71,142, 28,249,131,185, 18,137, 68,120,246,236, 25, 86,173, 90,149,151,151,151, 55,233, 37,231, - 82, 63, 0,209, 0,202,171,162, 17, 18, 84,142, 20,236, 10,224, 44, 0, 61,128, 76, 0, 74, 67, 5, 57, 28,206,220,111,191,253, -150,171, 82,169, 48,101,202, 20,164,164,164, 32, 61, 61, 29, 11, 23, 46,124,198, 48,204,196, 42,205, 24, 0,143, 12,209,211,104, - 52,177,249,249,249, 67, 6, 14, 28, 88,144,159,159,143,142, 29, 59, 98,200,144, 33,176,177,177,129,173,173, 45,134, 13, 27, 6, - 87, 87, 87,228,230,230, 98,236,216,177,121,217,217,217, 3, 0, 52, 56, 10, 61, 55, 55, 55,254,224,193,131,241, 31,125,244, 81, - 96, 74, 74,138, 55, 0,133, 86,171, 53, 87,169, 84, 82,157, 78,103, 44,147,201, 44, 58,117,234, 36,159, 54,109,154,233,205,155, - 55, 61, 83, 83, 83, 75,154, 96, 48,255, 43,212,233, 69,154, 11, 69, 81, 39, 90, 18,169,170, 43, 2,102, 40,213, 53, 60, 85,235, -253,127,153, 16, 88,188,247,240,222,114,129,147, 43, 76,220,125, 33, 17,137, 32, 22, 10, 32, 54, 53, 71, 57,195, 96,199,179,140, -178, 82, 66, 22, 53, 35,241, 47, 68,174, 24,134,193,182,109,219,202, 87,174, 92, 89,144,145,145, 49,237,210,165, 75,190,183,110, -221,186, 99,136, 17, 42, 42, 42,194,161, 67,135, 84,187,119,239,126,170, 82,169,252,249,124,190, 86,173, 86, 99,223,190,125,229, - 27, 55,110, 76, 44, 43, 43, 11,228,241,120,154,166, 52,191, 85,247,193,226,241,120,218,242,242,114,255,176,176,176,248, 19, 39, - 78,168,100, 50, 25,120, 60,158,182,172,172,204, 39, 52, 52, 52, 54, 44, 44, 76, 37,147,201,154,100,220, 24,134,169, 51,130,165, -215,235, 33, 20, 10,155,212, 7,235,214,173, 91,219, 53, 26, 77,231,125,251,246,165,238,218,181,171, 92, 38,147, 1, 0,180, 90, -109,224,222,189,123, 83,191,255,254,251,138,166,116,112, 7, 0,181, 90, 13,189, 94,143,208,208,208,138,253,251,247,167,234,116, -186,192,234,101,187,118,237, 42, 15, 13, 13, 77,213,104, 52,157,111,221,186,181,189, 49, 45,189, 94,175, 47, 40, 40, 0,151,203, -197,211,167, 79, 43,132, 66, 33, 56, 28, 14,226,226,226,158, 27, 44, 43, 75,115,207,238,129,222,238, 95,127,127, 40,194, 72, 40, - 20, 14,232, 29,224,241, 32, 46, 41,149, 16, 42,145, 45,107,234,170, 25, 32, 1, 5,113, 92, 74,133, 84,196,211, 82,200,248, 63, -128,111, 86,101,176, 42, 95,182,118,246,184,249,168, 76, 10, 10, 2,168,181, 86,141,106,106,137, 17, 40, 72,238, 37, 65,202,229, -139,169,140,140,140,231,145,166,106, 67,228,220,222, 3, 81,113, 37,198,160,136, 16,149, 67,235, 13, 46,168,140,141,141,185, 74, -165,242,185,214,115, 77,103,103,142, 86,171, 29, 96,240,190,103,235, 21, 96,152,143, 31, 39,151,219, 30,189,162,114,157,181,120, -151, 88,204,201, 7, 18, 55,193,203,213, 6,179, 39,249, 10, 22,238,200,246,186,249,160,172, 29, 40, 50, 13, 94, 37, 6,223, 93, -180,105,211,166,135, 68, 34, 57,117,244,232, 81,137,145,145, 17,158, 62,125,138,142, 29, 59, 98,197,138, 21, 18,137, 68,114,210, -209,209,177,119, 83, 78,211,245,199, 72, 42, 41,214,119,253,124, 91, 74,198,157,103,250, 74, 99, 69, 87,154,171,236, 66,130,247, -190, 56, 86,144, 95, 84,254,198,181,123,186,243, 77,144,141, 46, 44, 44,124,245,139, 47,190,200,205,201,201,121,193, 92, 37, 37, - 37, 85, 27,129,222, 0,238,191,228, 92,106,132,202,206,235, 29, 0,180, 7,224, 11, 64, 7,160,184,202, 8, 53, 25, 79, 79, 79, -127, 39, 39, 39,124,247,221,119,216,177, 99, 71,254,215, 95,127, 13, 66, 8, 92, 93, 93,101,205,213,204,202,202,186, 17, 27, 27, - 59,192,215,215,247,225,150, 45, 91, 82, 21,255,207,222,119,135, 71, 81,237,239,191, 51,179,189,164,145, 30, 8,129, 64, 72, 72, - 8, 37,244,222,164, 74, 23, 5, 20,165, 72, 85, 4, 47,136, 32,160, 72, 7,169,162, 20,165, 55,129, 0, 82,165, 72, 71, 66, 13, - 37, 9,164, 64,122,223,180,221,108, 47, 51,231,247, 71, 18,164,164,108,128,251,189,247,231,157,247,121,246,201,206,236,204,155, -211,230,156,119, 62,159,207, 57,199,219,155, 27, 55,110, 28,198,142, 29, 11,119,119,119,118,221,186,117,169, 29, 59,118,140,122, -242,228,201, 59,122,189,254,161, 61,205, 61, 47, 47,239,250,214,173, 91,111,117,239,222,221, 97,244,232,209,158, 91,182,108,241, -122,252,248,113,109,189, 94, 95, 51, 55, 55, 87,113,229,202, 21,201,206,157, 59,189, 98, 98, 98,146,140, 70,227, 45,148, 31,208, -253,191,138, 10,181, 8, 0, 85,169,208, 49,191,244, 87, 85,197,111,246,222, 91,238,119, 59,174,171, 16, 85,206,184, 57,152,136, -235, 31,213, 43, 90,177,112,219,230,175, 70, 54,110, 40,171, 83, 55, 24,172,182, 8, 15,179,179,177, 51, 75,173,183, 18,242, 83, -120, 34, 46,190,174,192, 98, 24, 6,103,206,156, 97,247,238,221,107, 33,132,252,162,209,104,230, 62,122,244, 72,103, 47, 15,199, -113,204,152, 49, 99,180,133,133,133,135,179,178,178, 38, 62,125,250,212,220,161, 67, 7,230,195, 15, 63,212, 22, 20, 20, 28,163, - 40,106,220,221,187,119, 77,237,219,183, 7, 33,246,183, 99,138,162, 32, 18,137, 64, 81, 20,238,220,185,147, 20, 28, 28,220,232, -198,141, 27, 63,199,197,197,125, 64, 8, 97, 34, 35, 35,211,194,194,194,154, 92,191,126,125,253,227,199,143, 71,112, 28,199,216, -203, 91,102, 29,123, 94, 72,209, 52,253, 76,212, 81,213,244,185, 70, 70, 70, 70, 7, 7, 7, 7,223,186,117,107,199,248,241,227, -123, 1,144,223,185,115,231, 81,104,104,104,195, 27, 55,110,236,248,228,147, 79,122,151,190, 65,218, 55,126, 91, 44, 24, 52,104, -144, 94,173, 86,159, 46, 46, 46, 30, 21, 21, 21,165, 15, 11, 11, 43, 59,119,166,168,168,104, 84, 53,234,104,193,143, 63,254,248, -109,105, 93,237, 88,179,102,205,167, 51,102,204,112,207,200,200,120, 38,176,114,243, 10, 46,180,123,119, 10,155, 95,164, 54,111, - 91, 51,115,168, 76, 42, 17,207, 93,182,237,146,149,121, 54,141,155,199,243, 16,179, 26, 16, 58,115,104, 55, 23,201,186,159,182, -138, 70, 15,168, 39, 13,109,232, 87, 34,174, 68, 46,184, 29, 83,132,111,127, 56,200, 45,159,228,158, 8, 14,105, 96, 17, 91, 37, -167, 82,160,129,209,154,251,105, 47,145,100,233, 47,211,252,219,247,251, 74, 18, 28,218,234,153, 16,122, 28,125, 7,107, 22, 79, -225,150, 79,172,145, 8,142,202,132,205, 62, 43, 1, 0,216,108,182,161,203,150, 45, 59, 61,122,244,104, 69,163, 70,141,158,113, - 38, 37, 37, 97,249,242,229, 6,147,201,244,158,125,125, 6, 40, 92, 21, 52, 99, 89,214, 99,207,217,252,128, 47,191,152, 40,151, -209, 5, 64,226,202, 18,241, 34,116, 66,179, 80, 55,124,251,133,151,112,250,210,227, 33,215,126,246,215,194, 42, 10, 6,144,105, - 15,191, 64, 32, 56,185,100,201, 18,185, 76, 38, 67,124,124, 60,100, 50, 25,164, 82, 41,154, 55,111,142,181,107,215,202, 63,251, -236,179, 63, 58,119,238,172,188,124,249,178,173, 58, 34,171,117, 32,219,118,230,134, 39, 17, 43,166, 58,123, 53, 9,114, 67, 94, - 49,240,233,119, 39, 10, 11, 52,134,247,171, 41,174,158,137,172,162,162,162,158,211,166, 77, 59,187,125,251,118,215,224,224, 96, -164,165,165, 97,248,240,225,249, 42,149,170,235,127,129,184, 2, 0, 29,128,154, 0,226, 80, 18,139,148,128,146,184,164,215,158, -229, 25, 19, 19, 19,153,146,146,226, 61,118,236, 88,104, 52, 26,151, 97,195,134,225,233,211,167,136,139,139,187,247, 38, 9, 53, - 26,141,183,211,211,211, 27,127,249,229,151, 35,103,206,156,217,222,193,193,161, 46, 33,132,104, 52,154, 68,150,101,175, 1,216, - 11, 84,107, 31, 78, 2, 32,225,201,147, 39,137, 79,158, 60,241,220,177, 99,135,115,105, 25, 0, 37,129,253,234, 82,235, 29, 31, - 35, 81, 61, 75,212,237,255,196,189,255, 39, 24, 90, 23,237, 71,215,163, 46,127,232,143,226, 17,254,208,142,174, 79,217,179,208, -104,185,187,109,135,133,133, 17,155,205, 70,206,158, 61, 75,250,244,233,163,235,208,161, 67,117, 22, 26,125,129,179, 75,151, 46, -175, 44, 52,218,165, 75,151,211,173, 90,181,122, 97,161,209,206,157, 59, 71,119,238,220, 89,221,169, 83,167,167,246,164,179, 83, -167, 78,143,219,183,111,175,235,212,169,211, 11, 3, 73,203,150, 45, 7,118,235,214,237, 5,147, 99,171, 86,173, 6,188,124,174, -162,188,191,243,206, 59,105,113,113,113, 36, 53, 53,149,244,237,219,247, 89,199,223,189,123,247,180,251,247,239,147,184,184, 56, -210,187,119,239,204,234,148,231,243,104,209,162,197,184,142, 29, 59, 94,127, 41,205,159,190,124,174, 50,206,142, 29, 59, 94,111, -217,178,229,167, 47,159,171,198, 66,163, 21,166,211,219,219, 59,176, 89,179,102,185,107,214,172, 33,254,254,254,185,207,255,214, -168,203,152,121, 69, 26,173,102,198,130,141, 7,202, 89,104,148,223,181,190,172,247,126, 20, 44, 34,127, 5,183, 39, 87,130, 79, - 62,222,229,247,104, 84, 79,133,233,238,222,222,132, 60,254,138,220, 56, 56,150,180, 13, 22,179,127,253,236, 27, 71,174, 52,252, -131, 92, 13,236, 68,254, 40,119, 65,207, 87, 57,175,212,239, 72,174, 52,252, 35,102,135,223,163, 65,157,220,205,123,119,109, 38, - 9, 9, 9,228,216,145,189,164, 77,176,188,148, 51,248, 44,185, 18,220,213, 30,206,151,158,249,246,109,219,182,213, 30, 56,112, -128,196,199,199,147,115,231,206,145,118,237,218,233,155, 53,107,214,213,222,188, 19, 2,138, 92, 14, 25,100,187, 24,116,109,246, -112,101,209,167,189,164,166,225, 93,197,230,129,109, 69,150,158, 97, 34, 91,251, 96, 1,219,196,159,230,130,125, 65,122, 54,151, -153,200,149,160,171,228, 90,112, 47,123,211,217,160, 65,131,212, 58,117,234,144,138, 62,129,129,129,170,178, 9, 52,213,173,247, -214,129,240,123,167,165, 36,235,252, 47, 93, 73,255, 78, 14,249,109, 66, 5,221,222, 66, 91,106,230,230,230,150,183,125,251,118, -226,233,233,169, 2,208,232,191,168,205,215, 0, 48, 16,127, 79, 99, 87, 2,232, 10,192,255, 13, 56,219,245,236,217,211, 26, 25, - 25, 73,158, 62,125, 74, 78,159, 62, 77,218,183,111,111, 67, 73,204,206, 63,246,121,255, 31,227,252, 71,154,227,254, 93, 8, 69, - 57,193,134, 97, 97, 97,164, 87,175, 94,134,203,151, 47,107,205,102,243,132,187,119,239, 30,123, 83,206,127, 71, 58,255, 29,156, - 93,187,118,189, 78,211,180,127,233, 20,224,204,243,231,207,135,149,138,194,235, 12,195,248,151, 90,247, 50, 47, 92,184, 16,246, - 79,203,251,243, 34,139,166,233, 51, 0, 76, 25, 25, 25,207,102, 59,185,135, 12,104, 91,195,197,169,107, 81,145,250, 94, 78,244, -177, 63,254,137,121,127, 91,156,228,143,122, 98, 56,136, 91,128,197,172,168,167,250,186,115,183,230,213,235,215,179,157,112,199, -193, 43,220,138,201, 30, 79,218,133, 40,146, 64,113,203,193,154,110, 81, 93, 82, 76,118,115,202,169, 86,128,112,214,253, 39,122, -191, 25, 27, 10, 3,222,233,255, 41,115, 60,124, 51,247,195,100,215, 39,237, 66,148,169, 0,150,131,211, 71,216,203,249,178,200, -146, 72, 36,127,140, 24, 49, 66,185,111,223, 62,131,209,104,236,119,239,222,189,139,213,201, 59,185, 30, 84, 27, 54,106, 49, 64, -124,171, 46, 54, 58, 1, 54,110, 33,213, 45, 54,245,191,161,222, 91, 7,194, 79,225, 32, 57,161, 55,217,166,217,105,185,178, 39, -157,205, 92, 92, 92,118, 23, 22, 22, 14,179,211,114,245,127,153,119,119,148,172,115, 37, 40, 29,107,162, 81, 69, 12,147, 29,156, - 29, 24,134,249,186, 94,189,122, 77,158, 62,125, 26,197,178,236, 15, 40,153,117,246,143, 31, 59,254, 71, 56,121,129,245,166, 21, -208,161, 67,135,187, 44,203,158, 22,137, 68,139, 47, 95,190,108,226, 27, 31,207,201,115, 86,159,243,121,145,117, 55, 78,231,191, -116, 79,129,223,191,134,185,164,218, 33,174, 42,231, 44, 21, 89,183, 98,245,117,150,239, 45,246,155, 62, 76,153,106,135,184,178, - 43,239, 97, 97, 97,237,165, 82,233, 78,131,193, 48,206, 14,113,245,170,192,122, 20, 44, 66,161,181, 38,108, 76, 40,104, 84,188, -213, 14, 71,244, 16, 50, 81,200, 66, 14,245,254, 35, 11,223,150,120, 78,158,147, 23, 88,255,215,248,143,172,122,124,237,218,181, -230,124,209,243,224,241,134,111, 71,125,158,154,201, 31,245,238,192, 65,188,172,121,160,108,202,225,197, 50, 61, 56, 42, 29, 20, -183,182, 10,113, 85, 21,231, 45,200,173,203, 90, 5,202,166, 29, 89, 44,211, 3,200, 6,193,154, 42,196,149, 93,136,140,140,252, - 11,246,187,137, 94, 77, 95,240, 35, 11,128, 36, 66,144,140,239, 43,121, 65,252, 14,132,162,248,224, 97, 30, 60,120,252,143, 9, - 44, 30, 60,120,188, 69,145,245, 40,248, 54,242,153, 25, 96,225, 15,137, 45, 5, 69,182,108,170, 79,138,249, 13, 57,111, 34,159, -154, 10, 14,129, 16,219,158,160,200,252, 70,156,111, 61,223, 37,226,169, 98, 1, 53,159,111, 27, 60,120,240,224, 5, 22, 15, 30, - 60,222, 68,108,148, 88,117,210, 75, 63,255,181,156, 60,120,240,224,241, 63,213, 55,163,226,153, 0,213,241,173,190,206,108,130, - 40,158,147,231,228, 57,121, 78,158,147,231,228, 57,255,231, 56,171,226,230, 99,187,254, 77,194,139,231,228, 57,121, 78,158,147, -231,228, 57,121,206,255, 61,206,127, 20,248,141,116,121,240,224,193,131, 7, 15, 30, 60,222, 50,254,163, 49, 88, 50,215, 6,222, - 16,208, 77, 40,142, 52, 4, 0, 66, 83,143, 97,227, 30, 24,242,227,179,222,152,220, 35, 84,174, 20, 50,123,181, 86,246, 67,228, - 70,233,223, 82,146, 59, 0,240, 67,201,222, 81,215,248,230,195,131, 7, 15, 30, 60,120,240,168,150,192,106,208,118,208, 85,133, - 76, 17, 0, 0, 28, 33, 96, 57, 64, 83,152, 27,145,250,240,207,193, 0,224, 29,210,237,136, 88,225,214,150,227, 8, 56, 66, 96, -227, 8,108, 38, 67, 66,222,163, 83,118,237, 60,175,112, 15, 28,220,237,157,238, 67,250,245,123, 55,168,113,104,227,250, 0,240, - 48,234,225,147, 19, 39, 78,198, 94,248,147, 58,172, 83,197, 29,121,147,140, 41,133,194,121, 45, 91,181,238,117,251,246,205, 57, - 90,224,155,183, 84, 94, 34,114,173,239, 46,170,195,169,238,124,211,225,193,131, 7, 15, 30, 60,120, 84, 91, 96, 41,100,138,128, - 11, 71,183,122, 28,185,154, 6, 0,120,167,185, 23,190, 95,181,125,208,150,135,127,198, 2, 64,219, 78,125, 2,231,126, 57, 10, -215,163, 85, 32,132,160, 89, 64, 13, 12,250,232, 51,187,254,169,212, 51,184,229,208,161,239,125, 56, 99,198,244, 1, 9, 9, 9, -201,251,246,237,187, 10, 0, 29, 59,117, 10, 88,178,100,201, 7, 43, 93,106, 72,246,135, 31,202, 48,230, 60,122,173,253,131, 20, -158,245,220, 26, 6, 5,124,186,247,215, 31, 4,221,250, 14, 31,155,106,213,172,209,229, 60,205,123, 29, 46,113,173, 16,127, 39, -161,232,123,138,166, 5, 38,109,129, 7, 0,184,248, 54, 59, 33,113,240, 96,165, 82,217, 67,157,193,176, 51,247,209,233, 45,224, - 55,236,228,193,131, 7, 15, 30, 60,120, 84, 37,176, 0, 64, 41, 21, 32, 54,169,196, 91,231, 44, 7,198,127,242, 30,114,114,178, - 3, 45, 54, 14, 35,135, 13, 70,100,108, 22,226,146, 84, 32, 4, 8,172,101,247, 94,194, 96,192,181, 24, 51,118, 76,231, 51,103, -207,222,154, 55,119,222, 46,138, 66, 4, 0,108,254,229,215,182,223,126,247,237,184,145,159,140,236, 17, 30, 30, 30, 13,224,181, - 4, 22, 45,114, 94,179,124,241,247,202,140, 60,163,241,139,233, 95, 49, 51,190,156,186, 18,192, 39,175, 35,174,130,125,107, 45, -190,122, 54, 92, 46,151,203,177,101,203, 22, 9,112, 20,243,103,140,145,190,219,175, 31, 88, 48,237,126,248,121, 95,147,179, 98, -241, 88,189, 94, 63, 56, 63,254,207, 44,190, 73,241,224,193,131, 7, 15, 30, 60, 42, 21, 88, 44, 71,240, 56, 49,187, 68,180, 48, - 2,188,219,222, 9, 43, 23,125, 13,131,137,197,253, 68, 53,126,255, 43, 13, 38, 93, 17, 8, 1,218,135,122,148,103,195,121, 97, -170,229,202, 47,100, 97,140, 88, 56, 44, 34, 78, 81,167,134,139,139, 75,252,173, 93,186,111, 63,202, 9, 22,216, 44,119, 23, 29, -111,153,168,112, 16,183, 59, 24, 30, 30,210,191, 95, 63,177,163,163,211, 76,145,115,143, 90,156,209, 50, 93,157,114, 89, 93, 17, -231,203, 80,120,134,116,238,255,110,223,119,189,188, 60,217, 17, 75, 34, 30,255, 52,165,121,237, 6,129, 13,187,196, 89,245,157, -117, 57,113,151, 43,184, 45,170, 60,113, 85,223,219,115,241,229,211,225,114,163,209,136,196,196, 68,228,231,231,151,252, 72, 81, -160,105, 6, 53,189,189,177,126,233,116,249,190, 35,141,155,207, 91,186,241, 40,128, 86,248,187, 20,254, 29,211, 76,121, 78,158, -147,231,228, 57,121, 78,158,243,159,202,249,143, 66,217, 44,194,114,221, 91, 79,210,242, 17,155,152,133,176,134, 53, 81,191,142, - 23,110,197, 23, 98,239,133, 52,108, 59,155,140, 11, 15, 84,224,132, 14,200, 46,166,144,144,146,131,184,228,188, 42,125,100,140, - 88, 56,108,218, 10,245,140, 16,127, 77,155, 75, 7,166,192, 71, 25, 31,242,245,170,162, 41,140, 88, 56,204,195,203,121,223,140, -169, 19, 63,114,144,203,196,102,147, 25,117,235,248, 74, 39,141, 27, 51, 90,164, 84,236,179, 55, 51,110,110,193, 10,177, 76,177, -107,241,183,211,165,171,143,196,167,234,204, 68, 23,126, 61,243,233,140, 89,223,106, 24,161,236, 23, 55,183, 96,133, 61, 60,226, - 90, 33,254,126,174,174,139,175,157, 9,151, 91, 44, 38,100,102,102,194,108, 54,195,102,179, 61,187,134, 0, 40, 54,216,144,152, -101, 64,231, 78,237,153,176,102,141, 26,186, 55,236, 51,129,111, 82, 60,120,240,224,193,131,199,107,225, 31, 21,106, 83,225, 50, - 13, 58,131, 46,225,227, 9, 51,114, 3, 28,178,204,131,187, 6, 3, 4, 80,101, 37, 35,230,214, 25,196,223, 61,139, 98, 85, 42, - 8, 1,234,212,169, 13,145, 33,209,188,121,211,134, 92,206,102, 76,168,136,111, 64, 15,239, 90, 9, 25, 10,122,197,140,218, 17, -241,113, 89,110,147,103,108, 71,124, 92,150,219,138, 25,181, 35, 18, 50, 20,180, 92,196,182,251,100,248, 64,106, 96,191,222,248, -250,235, 25, 24,216,175, 55,102, 76,252,128,146,138,133,109,236,205,140, 81, 44, 93, 54,107,222, 2,135,236, 34,139,249,102,156, -198,164,148,203, 37,127, 61,214,233, 77, 68,102, 25, 48,108,188,202, 36, 18, 44,176, 71, 92,121, 59, 58, 46,190,254,231, 33, 57, - 33, 4,233,233,233,176, 88, 44,176, 90,173,176, 90,173,207,174, 43,210, 90,145,170, 50, 32, 37, 87,143,168,100, 13,250,244,238, - 45, 23, 8,197, 31,241,207, 7, 15, 30, 60,120,240,224,193,163, 66,129, 21, 31,241,123,199,200,243,187, 61,243,114,114,212, 10, -137, 0, 2,154, 70,110,124,167, 94,155, 0, 0, 32, 0, 73, 68, 65, 84,250, 83,236, 92, 53, 21,225, 63, 77, 71, 81, 86, 2, 8, - 1,100, 34, 6, 38,109,190, 58,251,126,184,103,126, 37, 51, 8, 41, 88,123,252,188, 59,169,110,114, 22,113,218,123, 90, 43, 4, -128,189,167,181,194,228, 44,226,244,243,238,164,186, 98,162, 2,199,178,232, 55,240, 61,236,218,177, 5,109,187, 13, 68,248,149, - 84,232, 13, 22,187,246, 63,147,120, 52,168,227,225,229,245,222,180,145,221, 29, 90, 5,186, 40, 27,248, 58, 51,140, 80,100, 19, - 11, 37,220,241, 59,234,140, 94,253, 6,211,114,133, 99,111,137, 71,131, 58,149,241, 56, 9, 69,223,255,117,246,144,156, 97, 24, -164,166,166,194, 98,177,192,108, 54,195,100, 50, 61,179, 96,105,244, 86,100,228, 27,144,166,210, 35, 85,165,199,163, 84, 13,196, - 10, 23, 88,173, 86,126,225, 53, 30, 60,120,240,224,193,131,135,125, 11,141,102,230, 22,160,134, 3, 3,119,159,186,248,112,234, - 74, 0, 0,203,217, 64, 80,178, 60,131, 61, 54, 61, 2,225,185,207, 71,214, 77,172,227, 77,169, 63,234, 35, 55, 0,192, 71,125, -228,134, 58,222,148,250,243,145,117, 19,245,172,139,133,101, 89, 92,139,206,197,138,253,143, 48,111,251, 3,156,185, 99,127,204, -184, 64, 40,155,182,124,233, 18,185,128,161,168,232,148, 98,109, 86,129, 77, 43, 18, 9, 45, 66,177,192,170, 53, 83,134,100, 21, -155,223,251,253,201, 73, 12, 35,156, 92,101, 90, 9, 7, 66, 8, 76, 38, 19,204,102,243,179, 79,153, 5,171, 64,107, 65,102,190, - 17,169, 42, 3,210, 74, 63, 57,133, 6, 16,194, 79, 36,228,193,131, 7, 15, 30, 60,120,188, 40,176,202,221,157,158, 3, 16,159, -172,130, 68,192,161, 86,237,250,127, 95, 65, 0, 66, 0,171,141,179,235, 31, 29, 59,151,149,238, 95, 83, 71,102,174, 76,109, 27, -218,208,245,193,164, 17,190,143, 67, 27,186, 62,152,185, 50,181,173,127, 77, 29,177,114, 98,150, 16, 2,194, 17, 16, 66, 64, 8, -192,113,246, 11, 22,138, 98,218, 52,107,232, 39,248,126, 95, 66,202,228, 13,113,143, 41,129,192, 42, 22,139,109,158, 78, 50,170, -150,155, 76, 80,108,130, 49, 40, 52,204, 74, 1, 97,149,241,168,173,150,239,218,247,122, 95,111,177,216,224,235,235, 11,179,217, -252,204, 69, 88,102,193, 42,210, 90,144, 81, 96, 68,154,202,128, 84,149, 1, 6, 35,139,135,143,147, 65,209, 12, 31,244,199,131, - 7, 15, 30, 60,120,188, 62,202,213, 34,255, 63, 11, 44,234,185,207, 43,240,243,245,196,205,168, 20,212,246,148,192,209,201, 1, -143,159,164,131,102, 4, 96,104, 10, 54,214,254,114, 32,102,235,254,213, 51,157, 86,166,102,177, 55, 54,236,126,154,144,154,197, -222, 88, 61,211,105, 37, 49, 91,247, 3, 37,130,141, 35, 4,220,115,127,237,230, 38,156,135,155,147, 68,112,251,137,182,128, 98, - 4, 38,145, 80, 96,242,118,149, 80,222,110, 50,129,175,171, 76,172,144, 10,105,111, 79, 79, 14,132,120, 86,198, 99, 78,143, 73, -204,214,104,230,116,236,249,158, 94, 40, 20,194,223,223,255,153, 5,171, 76, 96,149, 88,176, 12, 72, 85,233,145, 93, 96,132, 76, - 66,227,126,196,121, 61,203, 90,119,242,207, 6, 15, 30, 60,120,240,224,241, 90,168, 84,139,252,255,134,170,183,202, 33, 4, 10, -185, 12, 28, 45,197,181, 59, 79,208, 48,184, 9,182, 31,187,133,250,161,173,145, 85,108, 3,169,198,118,134, 51,126, 52, 68, 2, -136, 28,208, 67, 94,107,112,159,154, 61, 8,132,231, 54,252,166, 73, 7,128,160, 54, 40, 21, 86, 37,150, 43,142,148, 44, 19, 81, -141, 90,201, 76,205,213, 41,235,122, 41,240, 40,205,108,114,144, 75,109,206,114,145,192,221, 73,204, 56,202, 4, 2,129,136,166, -139,138, 84,197, 0,149, 89, 21,151, 57, 61, 38, 49, 21, 33,115, 58,245, 25,190,248,234,233, 3,242,122,245,234,225,254,253,251, -207, 92,132,122,163, 13, 84,177, 5, 66, 25, 65,131,154, 74, 60,142,188,202,230,231,102,196, 20,198,157,222,194, 63, 31, 60,120, -240,224,193,131, 7, 15,187,212, 17,199, 17,184,187,185, 64,162,116, 66,162,202, 12, 45,220,161, 54, 80,224, 88,128,181, 85, 42, -130,202, 13,250, 62,118, 46, 43,253,232,185,188,173,199,206,101,165,191,168,229,254,118, 15, 18, 66, 42,114, 17,134,150,175, 3, -217, 63, 78,156,187, 86, 48,168,141,135, 51, 45, 20, 26,196, 18,198, 34,147, 10,173,114,137, 0, 30, 78, 34,113, 45, 23,145,228, -210,201,223,104,138, 35, 23,236,225, 52,167,199, 36, 38,229,230,206,233,214,111,132,222,211,203, 11, 35, 71,142, 68,237,218,181, - 1, 0, 53, 20, 52,252, 92,104, 8, 76,217,184,124,108,171,238,241,221,139,119,193,154, 6,227, 69,179, 38,191,203, 58,207,201, -115,242,156, 60, 39,207,201,115,254,143,194,174,205,158,235,121, 43, 16, 80, 83, 1,163,217, 19, 6, 51, 11,157,201,134, 98,189, - 21,106,189, 21,201,217,122,196, 93,122,243,132,144, 82,129, 5, 66,129, 35, 4,160, 74,220,132,196, 78, 67,161, 78,168, 89,185, -124,201,247,195, 15, 28, 60, 66,190,232,235, 93,235,102,130, 33, 77,194, 8,205,114, 9, 45,112,148,209,108, 82, 98, 82,230,217, - 19,191, 53,210, 75,245,163,236, 77,147, 57, 61, 38, 49, 30,152, 19, 20,214,237,123, 16, 8,204, 6,181, 98, 86,251, 16,156, 57, -125,210, 32,190,118,215, 74, 9,196, 81, 28,107,217, 93,106,185,226, 35,220,121,240,224,193,131, 7, 15, 30,246, 9, 44,189, 65, -159,208, 99,200,167,165, 27, 62, 19,176,108,137,101,137, 45,115,229,113, 4,172,197,144,240,166, 9, 97, 57,238,214,198,237,251, -251, 54,109,214,154, 9,241,115,128,166, 40, 15,119,110, 70,216, 8,199, 69,216, 69,144,146, 98,178,121, 72, 63,120,255,189, 65, -191,141,157,248,133,182, 99,231,174,114, 87, 87, 71, 91, 94,110,190,102,231,150, 3,133, 71, 14,236,105, 68,113,220,199, 72, 73, - 49, 85, 39, 93,230,244,152, 68, 51, 80,182,190, 85, 55, 32,164,179, 46,243, 65,127, 29,112,129,111, 62, 60,120,240,224,193,131, - 7,143,215, 18, 88, 9, 55,126,239,248,127,145,144,130,130,156,145,187,127, 59,188,104,207,129, 99,237, 77, 22, 75, 77, 14, 76, - 26,107,181, 94,150, 20,231,127,107, 47,135, 46, 55, 54, 6,126,126, 45,126,253,105,229,151,191,252,188,186, 59, 56,182, 62, 40, - 42,137,226,200, 5,173, 84, 63, 22,153,213, 19, 87,229, 32,143,234,112,170, 39,128, 60,190,233,240,224,193,131, 7, 15, 30, 60, - 94, 91, 96,253, 95,161,240,233,173,226, 66,224,139, 55, 38, 74, 73, 49,105,129,165, 40,249,188,109, 68,129,223,127,137, 7, 15, - 30, 60,120,240,224, 81, 5,104,190, 8,120,240,224,193,131, 7, 15, 30, 60,222, 46, 40, 84, 60, 19,160, 58,150,154,215,153, 77, - 16,197,115,242,156, 60, 39,207,201,115,242,156, 60,231,255, 28,103, 85,220,188,167,232,223, 36,188,120, 78,158,147,231,228, 57, -121, 78,158,147,231,252,223,227,252, 71,129,119, 17,242,224,193,131, 7,143,255, 57,184, 54,232,175,116,109,208, 95,105,239,245, -110,193, 67, 61,221,130,135,122,242, 37,199,195, 94, 8,248, 34,120, 43,144,160,100,219, 70,203,127, 42, 1,206,206,117, 29,109, - 14,110, 71,104,206,180, 92,147,254,240,220,219,206, 95, 72, 72, 72, 51, 0,136,137,137,185, 7,224, 77,103, 99, 66,238, 17, 56, -194,197,209,121,130,133, 51,179,122,157,126,163, 46, 39, 62,252,109, 38,216,205, 45, 88, 97,150,200, 86,128, 34,125, 64, 64, 19, -154, 58,207,104,172,255, 82,171, 31,168, 43,187,207,119,192,146,134, 99,135,190, 59,119,107,248,201, 69,105,199,190,121,252,242, -239, 46,189,127,116,248, 98,100,247,153, 63,237, 63,177, 60,255,248,215, 90,190,233, 87, 31,190,237, 71, 56,219, 4, 94, 76,214, -229, 85,249,213,185,175,102, 96,155,104,161, 80,232,110,177, 88,114, 51,227,111,218,245,246, 92, 43,168,109, 36,195,208, 62,172, -141, 75, 79,143,139,104,193,151,126,213,144,121, 7, 53,163, 88,246,107,194,177, 66, 14,204, 26, 83, 94,194,181, 55,225,243,246, -246,150, 57, 57, 57,117,114,116,116,244,149,203,229,210,194,194, 66, 67, 97, 97, 97,106, 74, 74,202, 5, 0,182,255, 68, 30,221, - 66, 6,206,102,104,124, 87,250,253,251,188,152,163, 75, 43,191,126,192, 34,138,178,206, 46,253,190, 52, 47,230,216,220,255,134, -186,242, 8, 29,220, 26,132,251,146,166,153,118, 44,177, 45, 81, 69, 29,219, 80,157,251,219,180,105, 51,200,106,181, 74,202,142, -133, 66,161,233,198,141, 27,191,243, 79,193,127, 72, 96,213, 12, 30,234, 98, 21,144,249, 2,134,126,143, 35,196, 33,251,126,184, -226,191, 57,131,181, 91,141,188, 67,211,116,173,231,207,113, 28,151,158,122,107,247,219,234,108,107,173,154,214,252,235,156,124, -131,230,135, 61,143, 23, 86, 36, 62, 60,154, 14,191, 78,209,148, 63, 69, 81,160, 41,128,161, 41, 0,200, 76,187,181,167,188,205, -167,189, 29, 21,130, 64,141,206, 22, 5,160,202, 65, 72, 90, 35,192, 71,224,226,121,185,203,224, 41,117,239,156,217, 30,204, 90, - 44,221,117,185,177, 49,111, 33,111,238,245,235,215,111,201, 48,140,235,148, 41, 83, 68, 0,176,102,205,154, 0,150,101,243,159, - 60,121,114, 27,128,234,181,196,149,123,208,200,117, 63,124,191,171, 79,159, 62,200, 84,233,176, 98,205,134, 46,167, 79, 28,120, -255,173,137, 44,239, 48,153, 77,204, 68,125,246,229,183,181,250,118,109, 41, 40,210, 90,113,234,194,141,145,225,219, 86,116,115, - 66,147,198,149,137, 44, 78, 95, 52,215,211,129,244,230,244, 69, 0, 48,226,149,246,175,180,190, 83, 67,142, 62,222, 18,193,253, -124,224,112,149, 73,105,241,241, 25,161, 72,228, 71, 81,116, 73,189, 51, 20,232,210, 54, 96,179,154, 83,158, 92,219,222,235,191, -162,163, 14,251, 40,155, 2,229, 74,151,166,143,162, 0,154,166, 33,160, 0, 16,162, 73,140,216,225,250, 22,254,141, 83,104,128, -115,163,246, 1,186,173,151, 19, 11,148,130, 78,211, 78, 82,132,222,144,122,117,245,125,123,110,150, 74,165, 46,199,143, 31,119, -239,221,187,183,147, 71,163,129,151,237,185, 71,204,104, 67, 78,156, 56, 38,234,221,187, 87, 53,218,103, 96, 15,208,244,110, 10, - 16,114, 28, 89,195,112,228,128, 54, 63,238, 9,170,185,152,176,123,163,129, 11, 64, 33,216,238, 27, 8, 30,169,162,143,126,251, -154,101,203,200, 60,130, 70,201,164,210, 25, 1,129, 13, 3,147,147,158,198,105, 52,234,213,134,220,184,173,165, 47,127,118,131, -178,177,211,206, 94,184, 62, 84, 32, 20, 82,189,186,182, 84,152,128, 94,213,229,120, 30,158,158,158,131,214,175, 95, 95,175,109, -219,182, 0, 0,155,205,230,120,240,224, 65,175,133, 11, 23, 42,226,226,226, 14,191, 14,167,143,143, 79, 77, 39, 39,167,218, 50, -153,172, 38, 0, 24, 12,134, 12,181, 90,157,154,153,153,153, 81,101,122,154, 14,117, 35,172,117,193,233,195,191, 8, 0,160,215, -144, 9,139,234,116,158,225, 66, 49, 66, 67,121,215,179, 54,179,194, 84,152,244,229,249,227,219, 41, 0,232, 62, 96,244, 44,183, -224,161, 63,229, 61, 10,207,249,143, 60,172, 67,135, 50,110,241,150, 65, 20,161,254, 21,214,188,121,155, 33, 3,251, 32,164,190, - 15, 6, 13,159, 52, 3, 64,181, 4,150,213,106,149,132,135,135,215,162,105,154,177, 88, 44,198,225,195,135,231,190, 73,210, 2, -218,127,124, 29, 20,229,107,177,217,126, 77,185, 81,127, 17, 48,159,123, 57,237,222, 73,130, 57,160,232,113,132,227,210,178,239, -253,214,142, 23, 88,165,112,109,208, 95,105, 21,144,168, 46, 29,219,184,206,158, 52, 88,188,233,192, 85, 28, 3,149,145,117,255, - 96,205,255,214, 12,210, 52, 93,235,232,222,245, 30, 50, 9, 3, 0,208, 26, 88, 12, 25, 57,165,234, 7,184,197,135,151, 64, 33, -168,204,135,202,178, 54,169, 64, 32, 52, 82, 0, 64,149,204, 14,144,201,196, 55,166,183,137, 85,143,238,239,255,241,215, 63, 69, -238, 0,224, 12, 32,187,220, 78,139,166,107,253,182,109,141, 71, 77, 87, 41, 4, 12, 5,173,193,134,193, 31,255,139, 45, 79,176, -109,157,211,118,193,200, 62,117,134,121,244, 62, 52,164,168,216,252, 71,101,233, 84,120, 6, 55,148, 59,185,159, 27, 50,126,129, -143, 1,142,152,187,104,181,199,245,179,225, 87,179, 50, 82, 44,169,233,233,122,155,197, 26,155, 95,144, 53, 93,155, 21, 31,111, -111, 71,173, 84, 42,235, 41,149,202,166, 77,154, 52,145,206,152, 49, 67,216,165, 75,151,103, 63,142, 31, 63, 94,116,233,210, 37, -239,149, 43, 87,246,125,240,224,129, 81,171,213,222,215,106,181, 79, 1,176,246,214,137,151,151,251,231,239, 13,234,143,110,239, -125, 6,150,163, 48,110,242, 52,156,249,227,240, 68, 0,111, 69, 96, 41, 25,250,251,113, 83,190,169,213,185,109,115,193,178,131, - 9,112,146,139,208,171,117, 11,129,132,153,233,253,219,182,149,171,161,198,152,242, 44, 87,156,190,104,110,168,155,101,248,128, -118,254, 56,246,155,101, 56,186,127, 5, 90,238,252,204,146, 85,175,247, 20, 7, 9,155,187,190,166, 51,227, 33, 97,115,215,215, -235, 61,229,207,167,167,215, 23, 87,150, 22,161, 72,228,183,245,167,197, 13,106, 40, 69, 96, 24, 10, 2,154, 6,195, 80, 48,153, - 89,140,156, 52,251,109, 53,115, 70,230,209,160, 47, 13,140, 70,201, 72,184,221,144, 27,127,170, 58,117, 66,209,140,235,193,109, - 43, 5, 30, 78, 98, 48, 12, 5,134, 46,249, 36,101, 27,240,197, 87,243,157,222, 84,168,247,105,239,209,242,171, 97, 65,189,218, -132,214,104,178, 63,130,114,110,211,103,152,107,158, 81, 54,234,183,163,151,134,147,142, 95,222, 36,132,251, 33,253,218,186,179, -149,145,152, 76,166,156, 94,189,251, 56, 82, 2,133,252,207, 35, 59, 58,149,109, 54,111,101,185,191, 55,135, 39, 64,217, 75, 12, - 71,128,241,159,142, 69,175,222,125,244,156,141, 75,175, 70,167,177,251,244,159,215,220,141, 86,130, 85,235,183, 44,208,169,243, - 22, 36, 62,118, 77,214,170,243,190, 52,228,198, 31,179, 95,169, 32, 56,238,250,193,193,123, 79, 68, 32, 52, 36, 24, 44, 87,178, -191,106, 96, 45, 5,246,157,188,129,134, 65, 13, 75, 22,111,230, 8,130,124,149,232,252,238,199,175, 89,188,157, 5, 10, 79,213, -190, 65,195, 70, 15, 29,252,222,112, 56, 59, 42, 97,182,152, 2, 47,156,253,227,151,141,235, 87,180,215,102,199,142,170,142, 56, -228, 56, 86,252,247,119,171, 20,128, 16,128,249,117, 43,223,199,199,199,189,101,203,150,207,142,109, 54, 27,234,214,173,139,140, -140,140,160,106,191, 8,120,120,200,125,124,124,222,157, 62,125,186, 71,215,174, 93,133,238,238,238, 0, 0,149, 74, 85,243,226, -197,139, 97,171, 86,173,202,205,204,204, 60,153,155,155,171,175, 80, 84,112, 70, 17, 67, 4,140, 68, 34, 43,213,181,160,103, 76, -249,176,137,187,187,123,185, 47,199,249,249, 5,226,239,190,251,150, 18, 8,132, 37,215, 19, 66, 19,142,173,112,143,145,182,109, -219, 14,176, 88, 44,210,242,126,203,179,185,247, 53,114,226, 97, 40,221,204, 88,192, 48,133, 89,247, 15,185,219,253, 32, 53, 30, -208, 83,240,148,108,236, 63,112, 96,157, 65,125,187,192,219,221, 9, 23,110,196, 98,234,156, 85,176,218,216,181,175,213,121, 48, -140, 32, 55, 55, 55,217,197,197,197,235, 45,140,183,254, 71,247,254,232,113,241,234,157, 89, 63, 73,126,155,100,182,142,178,150, -109,127,199,114, 4,242,124,145,176,211,192, 30, 14,174, 53, 3,101, 91,126, 90, 38,228, 45, 88,207, 87,132,152, 89,216,161, 93, - 75,215,217,211,198,138, 23,110,185,140,136,179, 39, 13, 89,247,195,223,138,184, 82,186, 7,182,165, 24,193, 4,138, 97, 20, 20, - 77,137, 57,150, 75,179,153,205,139, 12,249,241, 89,111,202,205,114,192,161,191,170, 41,204, 9, 9,248,229,231, 85, 30,158,206, - 18, 24,204, 54,140,249,124, 30, 54,175, 93,224,224,238, 36,134,201,194, 98,251,209,219,121, 77,116,171,201,232,190,254, 31, 47, -222, 26,125,248,135,221,143, 15, 87,214,137,209, 20, 13, 15, 39, 9, 22,237,139,133,163, 92,136, 26, 74, 49,104,186,124,113, 53, -186,127, 9,103, 81,177,217, 6, 64, 92, 81,231,166,240,106,212,209,193,205, 39,124,240,167, 11,220,227, 85, 20, 8, 49,227,169, -147, 4, 67, 70, 78,114,174,239, 37,131, 66,202, 32, 57, 45,171,238, 87, 51,103,182,136, 34,116, 75, 83,118,108,106, 85,217,174, - 83,167,206,144,126,253,250,201,167, 79,159, 46,244,245,245,197,238,131,103,252,122, 12,253,162,127, 70,118,190, 47, 71, 0, 79, -143, 26,105, 99,135,245, 61,126,234,212,169,148,180,180, 52,225,138, 21, 43, 90, 31, 57,114, 36, 36, 59, 59,219,238, 55, 81,150, - 16, 24,204, 44, 88,150, 3,203, 81, 80, 21,189,150,199,145,174,248,173,154, 12,236,217,165,149, 96,205,239, 79, 81,172,183, 66, - 38, 98,144,144,165, 67,219,182, 45, 5, 7,182, 83, 93,203,187, 99,236,208,119,231,122, 58,144,222, 3,218,249,195,195, 69,142, -109, 63, 45,198,177,235,137,189,115,138, 41,172, 39,204, 4,111,137,160,135,130,203, 90,223,165, 69,128, 87,247,230,126,184,211, - 34,192,235,202,221,199,113,178,247, 87, 77,201,208, 10,255, 44, 60,253, 69,113, 69,245, 94, 67, 41,194,150, 51,201, 80, 72,132, - 80, 72, 5, 37, 31,137, 0, 52,253,102, 27,198, 75,189,131,125, 25,142, 29,203, 48,130,177,195, 63,120,223,103,196,240,161,132, -162, 25, 28, 60,124,124,224,158, 61,187,179,172, 22,243, 22,150,102,182, 26,179, 30,165, 85,169, 5, 40,192,195, 73,140,175,126, -141,130,131, 92, 8, 71,185, 16, 14, 50, 33,186, 55,117,127,147,116,186, 76, 28, 88,175,239,196,193,117,186, 6,213, 86, 54,184, -255, 68, 29, 51,118,209,157,181,151,138,186, 78, 91,191, 38,196, 85, 92,104, 18,204,155,241,169, 32, 35, 51,171,235,193,227,151, -187,177,230, 49,177, 54,139,238, 27,213,131,131, 71,203, 35, 75,143,141, 8,171,217,102,168,212,162,181, 62,188, 31,151, 94,191, -192, 40, 70, 76,138,166,180, 76,133, 80,150,149,109,105,249,102,165, 39,163, 64,207, 92,203,112,165,187,226,114, 68,181, 92, 81, - 6, 11,135,251,137, 90,212, 9, 12,131,151,183, 15,204,125, 63,172,115,235,194,161,163,183, 46, 31, 93,170,207,126,252,141,189, - 60,123, 79, 68, 96,225,210,181,241,160,240,168,116, 52, 15,158,254,175, 41, 13, 86,173, 94,255,194,185, 73,159, 77,110,240,186, -226, 90,238,153,187,231,157, 1,163,134, 54,105,221, 3,241, 79,158, 34, 62,250, 14,186,191,211, 11,125,250, 13,134,217,100,252, -120,235, 47,235,111,235,114, 98,127,126,165,207,245,106,216,161,113,104,240, 30, 31,111, 31, 95, 66, 74,183, 38, 35, 4, 38,147, - 17, 51,191, 28, 7,189,182, 24, 65, 65,161,237,157, 59,246, 52,129, 98,192,113, 4,249,249,121,186,216,199, 49,239, 24,115, 99, -111,218,155, 64,189, 94,111, 85,169, 84,184,119,239, 30,226,226,226, 16, 29, 29,141,252,252,124, 56, 57, 57,105,117, 58,157,221, - 25,117,118,118,118,108,220,184,241,135, 7, 14, 28,144, 58, 57,253,173,249,205,102, 51,228,114, 57, 6, 13, 26, 36,236,208,161, - 67,205,209,163, 71,127, 98,177, 88,246, 22, 21, 21,105,202,227, 41,120,120, 50,211, 51,116,224,166,190, 67,199, 79, 2, 0,145, - 68,153,184,238,215,195,209,149,253,111,145,212,209,239,157, 65, 99,234,131, 16, 80, 20,181, 46, 63,246, 72,118, 69,215, 90, 44, - 22,217,254,253,251,107, 82, 20,245,194,248,186,224,199,253,237, 30,198,103,189,179,113,254,215, 2, 7,133, 4,121,106, 51, 38, - 76,154,226,102,183,184, 10, 29, 48,185,101,179,176,159,231,205, 24, 7,133, 92,134,179, 55,158,226,203,217, 75,109, 5,121,185, -187, 64, 81,107,242, 98,126,127, 83,175,197, 91,217,238,173, 65, 77, 37, 28,122,181,149,142,251,160,139,212,108,101, 81,168,181, -194,100, 97,193, 17, 2,181,206,138,152,148, 98,184, 57,137,176, 5,255,124, 84, 75, 96, 9,132,226,126, 95,140,234, 43, 94,185, -247, 38, 34,206,238, 53,100,221, 11,151, 63, 83, 6,205,135, 37,166,223,221,239,255,210, 45, 81,246, 12, 18, 2,138, 89,221,174, - 77,139,158,227, 39, 76, 34, 77,130,252, 68, 0,141, 71,241, 73,214,109, 91,183,140,186,120, 77,188, 86,147, 30, 53,247,185,193, -180, 90,211, 55, 57,142, 75,127,217, 98,197,113,175,188,205, 70,149, 55,224, 56, 43,132,216,116, 50,177,228,205, 24, 4, 78,114, - 33,246, 93, 76,135,166, 32, 35,175,137, 97,245, 95, 99,251,122, 12, 88,180, 53,230,232,134,227, 57,119, 1, 68, 3,200,169,136, -147,162, 1, 1, 67,193, 73, 33,130,147, 92, 8, 39,165, 16, 52, 69, 85, 40,174,230,253,242, 96, 7,128,216,151,196,213, 51, 78, -185, 71, 96, 35, 7,215,154,191,191, 55,113,137,203,195, 84, 11,104, 26,240,247, 82,192, 69, 41,134,217, 10, 36,171, 44,165,121, -117,196,228,233,243,221,103,253,107,226,169,156,236,206, 77,128,203,182,202,242,174,215,235,197, 35, 71,142, 20, 90,173, 86,203, -232,169,139,122,102,229,228, 13, 92,187,228, 43,137,155,155, 43,116, 70, 27,238, 61, 74, 14, 94,250,195, 79,254,127, 92,186,117, -100,214,196,129,199,122,247,238,237,180,127,255,126,174, 58,245,174,202,201,251,105,251,238,240, 93,107, 86, 46,197,227,228, 2, -108,251,101, 3, 8,107,219, 84, 69, 85,190,192,185,121,243,102,143, 29, 59,118,208, 55,110,220,200,127, 89,128, 82, 20, 20, 5, -106, 19,156, 21, 34,200, 37, 2,120, 57, 75,224,234, 32,130, 68, 68,131,166, 95,232, 68,158,113,110, 13, 63,185,136,211, 23,225, -216,111,150,225,219,126, 90,140, 49,159,207, 65, 84,158,232, 52, 45,119, 94,244,249,176,129, 95,215,144,163, 79, 77,103,218,163, -123,243, 58, 80, 72, 69,152,253,197, 72,180,188,155,236,145, 94,196,205, 41,208,163,233,252,211,152, 91, 94, 58,105,134,130,128, -161,225, 32, 19,226,210,201,125,185,250, 98,181,154, 98, 74, 44, 44, 86,179, 37,197,206,102,252, 74,121,202, 61, 2,103, 53,107, -220,104,241,164,241, 99,233,246,109, 91, 17,154, 22, 32, 79, 99,161, 8, 8,166,125, 62, 17,147, 39,142,243, 74,207,200,249,246, -231, 13,155,231, 94, 56, 71, 22,234, 84,143,231, 87,198,201, 80, 52,104,154,130, 66, 38,132, 82,250,247,199,104,230, 64, 81, 96, -106,134, 13, 83,131, 2, 40,138,202, 76,191,243, 91,176, 61,233,244,105,220,231,252,229, 92, 81, 67,253, 41, 99, 68, 66,124,228, -162, 91, 15, 82,111, 1, 40,240,237,228,252,137,213, 74,160, 53,218,144,148,163,135,205, 76,168, 49,189,253, 80,119, 40, 21,180, -100, 91,228,174, 63, 30,192,241,185,206,254, 5,206,140, 27,225, 70,215,208,193,195,214,252,184,249,246,202,197,115,152,124,141, - 25, 44, 1,100, 98, 6,210,210,143, 76,196,192,168, 83,227,231, 77,191,102,219, 64, 13,193,229,202,219,252,171,157, 6,249,104, - 72,223, 78,191, 81,128,152,162, 69,233, 62,126,117,252,186,245, 27, 37,237,222,255, 99,176, 54,203,172,187, 87,201, 69,125,110, -236,121,123, 56, 67, 67,130, 1, 10,143, 84, 81, 71,135,148, 12,146, 3, 15, 55, 12,106,216,224,229,115, 1, 1,129, 13,236,169, -247,178,102, 37,115,111, 48, 62,160, 97,227,153,109, 58,116,171,147,153,111,130, 75,205, 0,220,139,188,139, 51, 7,127,142, 52, - 20, 23,174, 60,115,226,200,204,133,203,214, 54,237, 55,232, 3, 28,253,253,192,116, 93, 78,236,134,210, 50,125,198, 73, 56,238, -163, 29, 91, 54,251, 10, 69, 18, 88, 89, 2,171,141,131,149,229, 96,181, 17,100,101,101,162, 88,171,133, 84,230, 0,133, 99, 13, - 88,109, 37,150, 66,147,201,170,152,248,113,191,201, 70,224,102,121,233,172,211,234,163, 59,160,169, 90, 37,239,168,165,117,102, - 50,234,189,189,189,119, 1,128, 68, 34,129, 68, 34,129,205,102,195,195, 76, 76,243,246,234, 52, 27,164,180,178, 57, 46, 61,251, -222,111, 45, 42,202,187,175,175,111,255,242,196,149, 86,171,197, 95,183, 31, 56,109,223,127,182,119,114, 90,118, 61,142,245, 48, -201,188,154,246, 42, 42,186,216,191,162,242,204,137, 58, 58,217,183,243, 84,122,250,164,145, 1,235,126, 13,191,149,112,102, 81, -165,230,228,186,221,191, 54,207,156, 60,162,197,242,117,219,226, 51,174,172,251,178,170, 58, 18,137, 68, 66,149, 74,245,236,249, - 94,176,254, 80,159,212, 28,205, 59, 63, 44,158, 35,186,247, 84,139, 7, 73, 89, 24,213,195,207,238,231,221, 43,100, 80, 80,173, -218, 53,215,174, 93, 56, 21,113,153, 6,172, 63,116, 11,151, 79,238,186,107, 49, 22,191,171,138, 57,158,251, 58,125,200, 91, 16, - 88,175,112,150, 13, 4, 23, 31,228,161,216, 80, 34,172,172, 44,135, 98,131, 13,185, 69, 38,168,117, 86,104,141, 86,140,122,199, -175,250,234,143,144,150, 0,220, 1,168, 40,138,186,253,252,113,153, 6, 45, 27, 98, 94, 58,206, 43,181, 24,186,150,142, 21,226, -231,104,205,207, 25, 49,202, 59, 95,118,127, 12,128,224, 82, 78, 22,192, 45,138,162, 10,237, 17, 88,164,204, 92,249, 92, 33,151, -251,202,202,218,172,181,124,188,189,193,145,244, 23, 46,241,107, 53, 76,255,197,216,247,101, 43, 89,155, 46,235,254, 33,187, 99, -178,148,238, 13,218,137, 68,226,147, 75,151,173, 32,195,250,119, 22,103,171,173,134,152, 12,163, 74,107, 34, 54, 47,247,250,146, -101,203,151, 43,151, 44, 91,249,217,145,195, 92,145, 54, 39,230,135,242, 56,188, 91, 12,191, 67, 81,116, 45,250,111,179, 60, 8, - 71,210, 51,238,236,107, 1, 0,111, 18,107,165, 51,218,192, 48, 20,132,165, 49, 41,122, 51, 11,125, 81,118,126, 19,253,218,191, -198,246, 46, 17, 87, 55, 51,188,158, 50,140,202, 2,160, 82, 23, 4, 77, 81,208,232,173,112,148, 9,225,164, 16,193, 89, 46,122, -222,130, 85,158,184,138,174,140, 83,100,177,164,177, 86,147,145,176, 44,250,182,116,135,135,147, 24,222, 46, 18, 72,197, 2, 88, - 89,192, 96,230, 96, 48,179, 72,201,213,163, 88, 47, 65,227,206,195, 3,220,188,111,234,179,147, 90,236,200, 79,185, 51,161, 82, - 11, 19,203, 98, 79,248,153,128,140,172,220,129, 71,119,175,150,228,170,173,120,144,172, 69,110,161, 25,132,114,194,236,185,115, - 37,243,230,125, 55,248,192,239,231,147,218,181, 8, 76,175,110,185,234, 85,177,187, 15, 30, 10,255,233,221,254,131, 28, 98,110, -253,129,248,123,231,231,233,114,171, 23,127,229,231,231,199,254,252,243,207,206,155, 54,109, 10, 56,122,244,104,154, 74,165, 74, - 44,123,168, 92, 29, 68,153,231, 46, 92,113,237,220,190,147, 32, 45,207, 8, 55, 7, 17,252, 60,229,184,123,253,162,153,166,168, -211,229,241,149,186, 1, 71,160,251, 87, 56,118, 61,177,119,116,190,228,210,167,227,198, 36,159, 59,121, 43,255,199,221,231, 87, -212, 84, 90,239, 75,185,220,245,119, 91, 4,120,205,154, 50, 18, 75,127,220,141,203,119, 31,231,234,104,159,197, 89, 38, 91,133, -147, 10, 24, 26, 16, 10, 40, 56,200,132,208,235,212,234,232,243, 27, 3,223,210,203,209, 39,103,126,223, 77, 23, 20, 91,145,158, -103,160, 50,243,139, 97,227, 56, 56, 43,196,176,113, 64, 81, 65, 30,181,103,207,110,220,190, 29, 65,131,161, 63, 5, 48,191, 42, - 11, 22, 67, 83, 80, 74, 5, 80,202, 74,172, 64, 74,153, 0, 22, 27,135, 6,254,190, 88,187,224, 11, 71,119, 15, 79,244, 28, 50, -193,238, 4,202, 20, 46, 77,119,110, 92,136, 75, 17,247,187, 92, 76,216,215,210, 35,180,233,143, 66, 86,184, 18,132, 24, 76, 86, - 22, 26,117, 33,140,166, 52,180,170,153,135, 26, 10, 22,201, 26,111, 68,101,199, 43,171,234,232,243,163,142,220,163,200,160,185, - 7,143, 95, 88,218,171, 71, 23, 68, 39,105, 74,196,149,168, 68, 92, 9, 40, 14,171, 55,109,182, 22,170,139,251,229, 71, 31,205, -123,141,246,249,103,105,103, 92, 34, 16, 88,173,251,158,245,115,119,142,155,185,162, 87,175,193,159, 80, 81,183, 47,126,163, 7, -206,219,107, 61,127,245, 28,177,235, 92, 69, 93,137, 71,253, 22,123,183,239,216, 55, 44,164,129, 47,114,138,172,200, 44,180,224, -234,221, 4, 28,217,252, 77, 81, 81,206,211,143, 96,209,106, 57,202,166, 62,123,230,248,233,207,190,152,137, 70,141,154,214,209, -164,107, 28, 95,142, 61,228, 24,106,243,199, 99, 39, 14,243,244,240,116,224, 74, 45, 88, 28, 33, 8, 10, 10, 65,223,254, 67,112, -233,202,117,196, 68, 63, 40, 57,207, 1,132, 16, 20, 21,230,103,219,172,230, 29, 21,182, 35,134,170,181,125,211,106, 15,154, 2, - 44, 54, 14,102, 43,135, 89,179,231,153,167,126,187,190, 67,175,246, 77,162, 25,112,154,212,172, 34,231,219,177, 89,141, 41,161, -163,247,135,227,191, 22, 25, 44, 44, 52,122, 43,206, 31, 92, 87, 97,166,189,253,155,180, 85,214,110, 63,118,252,156, 77, 18, 9, - 67, 91, 26, 5,250, 38,118,110,211, 40,173,182,143, 91,241,146,117,123, 90, 93,191, 27,219,119,200,123,131,165,195,234,133, 80, - 62,174, 82,135,137,147,167, 52, 97, 3,218,127,156,147,240,215,174, 10, 7, 63,129,164,200,183,150,239, 51, 87,162,123,163,129, - 15, 0,188, 60,242,167,168,162,143, 54, 1, 0, 15, 79, 47, 35, 37,148, 20, 87, 67, 16, 16, 0,248,254,199,240,190,233, 42,237, -208, 31, 22,207, 17,221, 75,212,225,222, 83, 53,196, 34, 6, 38,139,253, 97,109, 44, 69,166,125, 61,101,140,176, 64,103,195,197, - 7, 42, 68,221,185, 64,108, 22,205, 40, 66, 9, 70,187, 53, 26,248, 49, 5,212, 37, 64, 18, 77,225, 23, 51,141, 29,234, 7, 71, -213,175,107,193,114, 15, 30,220,142, 98,208,151, 17,136, 90, 2, 92, 67,155,213,234, 65, 51, 76, 94,206,131, 67,158,213,200, 59, -244,185,241, 88,177,228, 91,172,221,114, 4,183,226, 10,224,100, 75,195,209,109,139, 49,125,233, 30,232,205,108,101,105,168, 72, -143,184, 83, 20,117,130, 16,210,143, 16,242, 14, 0,113,217,113, 73, 31, 70,157, 40,253,223, 47, 28,207,154, 53,235,155,165, 75, -151, 70,151, 93, 91,118,190,236,218,202,206, 63,119,191,235,236,217,179, 67,151, 45, 91,182,164,109,219,182,191, 93,191,126, 61, - 17,128, 93, 2,235,249, 76, 84,248,148,123,132, 14,104, 69, 8,199,120,185, 42, 17,224,239, 11,197,251,163,101,167, 40, 74,199, - 48, 52,189,125,205,108,105,190, 65, 0, 1,195,216,109,239,149,122, 4,181,150, 41, 21,167,246, 31, 56, 68, 26,212,241, 18, 31, -186, 81,148,122, 55, 81,255,204,164,171, 81,165,136, 3,106,152,152, 97, 31, 12, 81,156, 62,123,110,154, 22,248,161,252,129,129, -174,245,227,234,229, 30, 14, 50, 33,104, 10,208, 24,108,152,246,175,175,223,120,244, 34, 32,204,228,127,125, 7,154, 42, 25,124, -180,234, 2, 44, 94,179, 93, 59,164,214,133,107, 99,123,187, 13, 88,180, 53,230,232,217, 71,178,132,193,131,187,169,147,147,147, - 11, 51, 51, 51, 43,119,193, 16, 54,125,232, 39, 83, 69, 52, 93,226, 54,162, 40, 10, 0,155,243, 58,226, 10, 0,138,138,146, 52, - 82,177,114,240,238,213, 83,182,212,174, 85,179,134,131, 92, 10,165, 66, 66, 53, 12,170, 47,109,211,186,173,204,175,126, 35,209, -149, 71, 90,164,170, 12,120,154,161,129,196, 61, 84, 56,172, 75, 15,236, 94,247,117,223,252,148, 59, 85,230,255, 66, 68, 84,255, - 13, 43,231, 72,114, 10, 45,120,148, 86,140,236, 2, 19,178, 11,141,200, 46, 52, 65, 41, 21,160, 77,247, 33,146, 99,231,195, 7, -181,107, 17,248,227,235,148,239,211, 39,137, 71, 82, 50,178, 70, 53,105,214, 10,123,118,110,111,131,154, 53,165,200,200, 48,218, -123,255,150, 45, 91, 10,194,194,194,220,126,248,225, 7, 93, 80, 80, 80,211,205,155, 55,251,199,197,197, 93,170, 87,175, 94,255, -141,235, 22, 94,154, 58,103,165,159, 0, 54,167, 54,237,219, 51,114, 49,133, 27, 87,206,154,118,108,217,148,105, 41,210,206,172, -116,244,146, 59, 47,202, 41,166,224,238,227, 27,165, 16, 90,123, 10,229,150,184,194,221, 95,236, 46, 4, 14,215,235, 61,229,207, -139,119, 98,227,154,223, 77,246,184,112, 55, 46,183, 64,111, 13,124,122,122,122,165, 29, 46, 67,149, 90,176,228,127, 91, 44, 61, -154, 12, 77, 32, 20,229, 94, 38,108, 40,148, 88,180,168,146,135, 48, 51, 35,242,128, 29,129,209, 20,225, 56, 32, 46, 93,139, 98, -131, 13, 70,171, 13,190,110, 10,168,114,210,177,241,199, 29,136,188,115, 27, 61,251, 12,192,207,191,238,193,184,143,223, 55, 86, -245, 96,210, 52, 5,154,166, 74, 45, 87, 37,226, 74, 41, 21, 0, 20, 80,164,179,226,240,181, 52,212,247,167, 65, 85,195, 91,232, -160,148, 65, 93,108, 4, 45, 84,226,241,213, 93,242, 63, 46,220,154, 61,127,229,214,175, 52,218,156,212, 39, 49, 17, 8,114,201, -135,191,143, 25,209, 57, 78,184, 83, 80, 7, 65,245,235,129, 22,221,182,139, 59, 47,186,241,138, 99,244,161,126, 45,155,133,180, -173,237,225, 4,131,153, 45,181, 98, 9,176, 99,251,118, 36, 39,165,143,205,143, 57, 26,249, 54,148,172, 46, 55, 81, 37,241, 8, -248,236,225,141,243,137,131, 62,154, 12,175,154,181,155, 22,165,222,179, 51, 60,193, 62, 49,197,217, 39,176,232, 26,117,154,237, -220,185,251,224, 48,255,218, 94, 56,119, 43, 9,145, 79, 10,225,232,224, 12, 70,225,141,192,206,163,157, 31,158, 94,247,158, 33, - 79,187, 83, 40,146,127,218,170, 77,123, 16, 66, 16,251, 56,186, 64,173,118,122,165, 9, 24,178, 98,239, 69,100,197, 58,190, 32, -138,221, 26, 54,117,112,170,113,207,104, 97,145,145,145,142,191,174, 95, 10, 51,100,197,222,171, 78,121, 73, 68, 52,206,222,205, -133,197,198,193, 98,229, 16,214,184,161, 81, 40,146,117, 92,190,229,100,155,236,156, 92, 90,174,116,226,156,220,234,137,156,173, -217,166,251,137,106,145,197,198,161,158,119,229,239,229,242, 26,245,150,124,249,175,169,193, 2,177, 12, 26,157,201,156,149,158, -225,245,203,190,139,218, 71,177, 49, 53,235,214,169,237,184,112,225,124,145,198, 72,144, 91,100, 66, 94,177,133,250, 96,196, 88, -159, 93,219,126,254, 8,192,174,106, 36,189,241,111,187, 54, 89,107, 40, 69, 84,177,222, 74, 84, 26, 35, 59,249,179,105,141,223, -164,237,188, 32,174,158,234,112, 47,177, 8, 18, 17, 3,137,136,129,213,102, 95,136,164, 91,240, 80,133,155,171,226,163,214,205, - 2,112,230,174, 10, 2,134,130, 65,167, 49, 75, 37,202,168,134, 13, 27,208,205,154,134,162, 75,135,118,120,146,152, 28,116,230, -220,133, 53,183,110, 71, 46, 22, 54, 26, 52, 51, 47,250,247,159,171,147,214,148, 12,149, 34,199,230, 59,220,195,203, 45,116,192, -128,254,146,218, 53, 61, 41, 55, 87,103,176, 16, 97,210,228,207, 61,236,246, 26, 17, 2, 2, 96,217,130,217, 48,153,205,240,112, - 22,131, 16, 96,219,250,239, 97, 54,155,225,227, 42,133, 90,103,173, 74,232, 85,168, 71,202, 19, 68, 47, 11,173,178,239,101,215, - 45, 93,186,180,223, 75, 2,176, 95, 5,194,240,149,235,202,238, 95,182,108,217,146,231,126,215, 87,199, 69, 72, 85,150, 41,183, -198,131,218, 75,196,178,179, 63, 47,157, 70, 23,233, 44,144,136,104,212,243,175,139, 41, 95, 76,149,119,111,230, 1, 3, 28,113, -104,223, 14,141,141,181,158,176,235,205,214, 51,160,133, 66, 38, 63,189,109,231, 62,206,203,195,141,250,229, 79, 85,162, 74, 99, -123,182,196, 65,220,205, 99,220,157, 51,191,120, 19, 80,167,229, 82, 89,128,201,108,114,169,176,199, 41,173,208,109,103,147,193, -208, 52,152,183,180,178, 23, 77,211,236,175, 63, 46,132,155, 99, 73,204,213,247,107,119, 23,247,119, 63,125,225,121,113,213,172, - 89, 51,117,211,166, 77,139,104,186,234,127,154,118,123,111,121,179, 37, 94, 75, 92,149,193,152,243,240,182, 17, 8, 85, 39,255, -125,238, 15,132, 9,221,234, 30,156, 62,252,195,143,102,123, 54,234,239,144,148,165,134,152,182,162,101,176, 55, 46,157, 57,204, -165, 37, 62,154,104, 15,119,110,190,218,215,205,213, 21,145, 79,181,200,204, 55, 34,171,160, 68, 92,101, 23, 24,161, 49,216,208, -172,174, 7,138,212, 90,223,215, 22,176, 20,249,253,204,233, 51,163,250, 12, 28,134, 41, 95,205,239,179,101,195,170, 7, 90, 15, -135,143,141,185,143,111,217,115,127,120,120, 56,123,231,206,157,196,188,188,188,150, 51,103,206, 44,174, 91,183,174,215,194,133, - 11,199,215,171, 87,207,167,123,215,174,234,219, 23,219,236,156,250,213,252,174,223, 76,221,226, 79,211,116, 14,225,200,177, 76, -157,245, 59,228, 61, 50, 84, 90, 79,199,190,121,252,221, 83,203,168,238, 29, 93,143,185,202,232, 16, 33,101, 26,129,224,249, 7, -240,104,190,229,233,233,245,197,178,247, 87, 77,201, 40,226,230, 24,105,175,197, 85,137,171, 18, 11, 22, 5,179,133,131,163, 76, - 88, 54,115, 20, 32,240,222,176,126,149,220,221, 73, 2, 1, 67, 65,200,208, 80,235,173,200,215,152,241,213,204,153,246,150, 32, -199,114, 28,244, 38, 22, 6,179, 13, 20, 40, 20,107,242, 48,251,171, 47, 75, 32,211, 47, 0, 0, 32, 0, 73, 68, 65, 84,209,167, -255, 16,140,157,248, 47, 20, 25,128, 59,137,197,176, 88,173, 85,202, 34,134, 2,244, 38, 27,198,246,242, 67,126,177, 5, 58,163, - 13,102, 11, 7,185, 84, 0,129,128,134, 66, 34,128,131, 76, 8,138, 34, 34, 47, 47,175,241, 0, 32, 20, 10,141,105,105,105,187, - 43,118,207, 19,212,241,245,132,193, 66,163,213,176,149,120,167,109, 32,238,157,219, 42,184,114,243,161,255, 87,243,215, 96,242, -136,182, 8,143,173,143, 26, 30,117,160,148, 75, 97, 37, 52, 0, 98,103, 64,222,124,142,182, 12, 30,177,233,215,109,177, 11,230, -125, 45, 45,212, 81,144,136, 4,184,112,225, 79, 68,220,188,179, 46, 47,230,232,238,183, 25, 75, 33, 36,180,167,163,147, 35,164, - 98, 6, 22,139,201,238,128,111,150, 35, 0, 65,176,123,232,192,195,165,117, 31,204,149,115,206, 14, 11, 22,229,228, 19,186,125, -211,150, 61, 31,121,123,121,224,200,249, 7,216,185,229, 39,212, 12,237,131,132,187,155,224,219,124, 16,148,254,221, 32,118, 56, - 56,158,102, 4,141, 39, 79,157, 61,164,121,139,182,184,126,245, 34,114,179,179, 54, 1,177,118,197,160, 49, 66,234,139,174,239, -244,131,201,194,162, 99,183,126, 56,125,252,200, 20,148, 78,158,120, 93, 48, 12,205,125, 62,110,184, 48,183,200, 44,204, 85,155, -144,145,103, 64, 98,182, 14, 71,247,111,181,219,108, 71, 49,116,203,206, 77,107, 9,199,175,184,144,230, 91,203,219, 36, 52, 25, -100,113, 79,158, 52,252,116,212, 71,194,186, 1, 65,180,170,200, 4,149,218, 12,149,218, 12,157,209,138,250, 62,181,105,147, 77, -208,182,186,105,245,112,146, 10,127, 62,145, 8, 71,185, 0,237,130, 93, 95, 59, 8,155,227,184,191,197,213,162, 18,203,213,253, - 68, 53,164, 34, 6, 98, 33, 3,137,136,134,149, 37,118,142, 69,182,225, 19, 70,125, 32, 51, 91, 9,242, 52,102, 48, 52, 5, 47, - 55, 87,137,175,119, 32,182,173,252, 28, 0, 48,238,235, 13,248,116,204, 72, 4, 5, 6, 64,173, 46,150,125, 58,105,234,106, 0, -118, 9, 44, 66, 8,217,115,244, 74,200,157,168,148,233,159,140,250, 88, 56,108, 64, 39, 58,242,169, 6, 89, 5, 38, 60, 77,208, -195,108,173,222,106, 52, 54,182,196,231,187,253,192, 9,200, 69, 12, 84,234,146,199,101,209,250, 3, 80,202, 4,200, 46, 52,131, -227, 42,181,222, 85,170, 71, 42,178, 58, 85, 7,207,139,176,202,206, 83, 20,117, 98,214,172, 89,223, 0, 32,179,102,205,250,166, -236,120,233,210,165, 6, 0,153,246, 10, 44, 84,228, 22,116,107, 60,168,189, 76, 44, 61,187,107,253, 55,178,243,113, 4,235,206, -222, 69,223, 54,222, 16, 9, 40, 72,149, 94,184,151, 88,132,243,231,143, 22, 95,141,184,105,164,104,107,149,211,162,100, 94,129, - 97,114,137,226,207,159, 54,239,180,121,122,121, 97,223,181,194,204,124,173,205,250,183,123,202, 74,221, 57,243,139,191,141,179, -246, 54,230, 36,220,174,234,205,155, 35, 68,180,116,227, 49, 16, 66, 0,142, 5, 7, 14,140, 72,162,168,221,234,163, 28, 80, 0, -203,114, 82, 1, 67, 27,159,249, 65, 74,134,166,244,212, 91,251, 90, 84, 85,195,142,114, 33,246, 95, 78,135,186, 32, 51,175,191, -251,233,191,202,196,213,233,104, 73, 66,243,230,205,212,173, 91,183, 46,146, 72, 36, 96, 24,230,117,234,248,141,196, 85,197,136, -180,230, 37, 97,217,161, 67,210, 1,125, 20,161,173,197,148, 16,205, 27,122,227,210,217, 35, 92,196, 31, 91, 7, 27,114,227, 79, -218,107,226,213, 26,109,200, 44, 48, 32, 35,207,128,172,194, 82, 11, 86,129, 9, 20, 5, 24,205,111,182,124,141, 33, 55,254,248, -238,221, 91, 55,153,172,152,216,177,231, 32, 76,159,255, 83,192,238, 77, 43,174, 38, 19, 91, 75,189, 42,225,161, 93,111, 92, 41, - 41,166, 61,123,246, 68, 22, 23, 23,247, 88,189,122,181, 54, 56, 56, 88, 44,147,201,242, 1, 72,227, 99, 99, 69, 23, 78, 29, 76, - 82,101,102, 78,176, 90,173,183,237, 77,151, 95,231, 81, 18,153, 37,114,188,159,188, 93,175,122, 94,114,248,201,117,189, 26, 42, -239,255,144,223,109,234, 18,213,133,117,185, 89, 38,219,185, 2, 61,154,102,104,133,127,218,213,217, 88,204, 41, 31, 78,152, 5, -134,166, 96, 49,153, 83,158,185, 35,156, 36,152,191,251, 17, 28,100, 66, 40,101, 66, 56,200, 4,104, 31,236,138,106, 24,136,136, -213, 70, 96, 48,219, 96, 48,177, 48,152,108,112,171,237,140, 95,119,133, 35, 85,101,192,177,219,121,120,156,172, 65,160,175, 2, -132, 84,109,119,226, 8,171,251, 96,252, 28, 7,134,166,193, 80,160, 27, 6,212, 65,129,214, 12,145,128,134, 88, 44,134, 92, 42, -128,163, 92, 8,161, 64,136, 91, 15, 30,192,100, 50,161,117,235,214,210,170, 28, 14, 14, 74, 25, 26,248,251,192, 98,181,225,212, -149, 24, 44,154, 54, 24, 61, 58,181,192, 87,140, 24,143, 77,205,224, 80,195, 1, 28,197,192, 98,227, 96,178,178, 0,168,202, 4, -112,187,210,184, 8, 35,128, 27,217,177, 71, 82, 89,102,224,248, 63,206, 94,216,221,191,111, 79, 68,222,143,198,161, 35,199,174, -230,185,170,103, 60,111,149,192,223,179,224,162, 95,179,185, 82,132,166,167,181,109,223, 5,218,194, 92,228,164, 37,217,221,169, -135,212,118,192,151,211,166, 52, 8, 10, 10,106,192,114, 4, 28, 71, 16,226,231,128, 9,147, 38, 53,168, 31, 16,216,128, 43,157, - 69,216,208,215,161, 82, 30,133,103,208,228,197,171, 55,126,236,235,235,139,211,215, 30, 97,233,156,137,145,114,185,178,110,139, - 26, 14,206, 92, 80, 83, 36, 70,157, 67,141, 58, 69,112,244,108, 80,107, 64,143, 81,181,250,188, 59, 8, 15,239,223,197,218, 31, - 22, 70,232, 24,217, 18,123,210,170,240,240,119,111, 26,214,234, 67,199, 26,158, 40, 84,107,161,116,241, 64,112,147, 22, 31,198, -220, 55,125,173,203, 77, 84,189,238,179,206, 17, 2,147,133, 67,129,214,130,116,149, 1, 73, 57,122, 36,101,235,193,113,132, 60, -239,162,174,188, 63,166, 40,133, 68, 32,168, 97, 77,168,253,224,207, 11,196,207,215,147, 90,177,112, 38, 99, 33, 18,228,170,205, - 80,105,204, 80,169, 77, 80,105, 74, 4,150,139, 82, 0,142,112,213,158,157, 81,160,181,192, 65, 38,128,147, 66, 4,150,125,253, -152,239,249,107,246,181, 75, 87,105,187,255,176,104,142,232, 94,146, 14, 15, 18,213,144,136,232, 18,235, 85,169,192,178,215, 45, -204, 8,232, 41,239,190,211, 26,105, 42, 35, 4, 12, 13, 1, 67, 35,160, 81, 24,220,228, 28,186, 15,155, 5, 0,232,223,183,100, - 25,146,196, 44, 29,142,223,200, 2, 0,145,189,105,205,205,211, 72,143,156,139,156,186,239,215, 21, 98, 35, 43,196,198,147,201, - 48,154, 89, 72, 68,165,110,119,113,245,198, 55, 27, 91, 98,193, 74, 83, 89,160, 51,177,208,232, 45, 32, 4,184,149, 80, 12,189, -137,133, 90,111, 65,155,160, 26, 85, 62,115, 85,140, 79,253,222,200, 67, 85,114,191, 10,127,199,105, 85,105,193, 90,186,116,105, -244,210,165, 75,203,181,136,217, 35,176,202, 23, 87, 34,233,217,157, 63,126, 35,251, 51,150,224,210,131,124, 12,237, 88, 11,249, -185,233,216,178, 97, 29, 71, 8, 32,145,138,179, 89, 27,247,135,145,179,205, 84, 63, 56, 81,169,223, 87,238, 22,220, 68, 42,150, - 92, 88,186,118,147,197,203,187, 22,119,248, 70, 81,174, 90,207,190, 96, 43,100, 77, 38,154,112, 68,100,204, 73,176,107, 80,164, -105,202, 50,127,202, 96,112,132,224,187,117, 7,176,116,250,112, 40,165, 2, 57, 69, 81,114,157,209,134,105, 11,183, 98,245,220, - 49, 14,114,137,160, 84, 24,176,152, 56,229, 43,251, 68,128,137,133,174, 48, 59,191,177,118,205, 75,226,170,185,186,101,203,150, - 69, 46, 46, 46, 80, 40, 20,175, 35,176, 94, 17, 87, 94, 94, 94, 62,114,185,188, 70,153, 53,140, 97, 24,176, 44,171, 75, 72, 72, -120,173, 69,223, 52, 69,121,191,103, 38, 69,181,110,223,229, 93, 92, 62,251, 59, 23,113,106,203,224,234, 76, 49,119,118,114, 76, -187, 27,147, 18, 12, 40,145,145,111, 68,118,161, 17, 89, 5, 38, 88,108, 28,252, 60,229, 72, 79, 75,133,179,147, 50,205, 94, 62, -153,103, 64,111,154, 48, 19, 56, 10,191, 26,114, 98, 79, 1,128, 46, 51,102,210,129,221,155, 30, 70, 71,223, 95,219,111,248, 20, -113,143,247, 38,137, 54, 47,251,108, 22,128,225,118,119, 14,185,185,250, 99,199,142, 69,248,248,248,244,251,238,187,239, 76, 0, -196, 38,147, 73, 62,102,204, 24,121, 74, 74,202,151, 0,236, 74, 99,135,209,219,220, 40, 41,233, 45, 34,198, 17,126,114, 93,207, -110,157,218,162, 93,168, 47,210, 59,181, 5,128, 47, 82,244,202, 64, 83,189, 95,247, 91, 89,252,177,113,199,169,165,227,134,117, -251,114,183, 96,254,234,172, 19,243, 43,181,136,197, 93,221,214,171,188,174, 67, 88, 26,248,254,188,192,178,177,164, 58, 46, 56, - 98,101, 57,232, 77, 54,232, 77, 54,104,141, 86,156,191,151,139,156, 34, 51, 10,117, 22, 24, 77, 44, 8, 0,139,149,148,173, 42, - 82,185, 88,141,216,233, 92,246,189,102,216, 48,245,186, 5, 83, 28, 15, 93, 75,135, 66, 82, 18,143,229,164, 16,195, 81, 46, 4, - 64,112,233,210, 37,148, 77,143,175,234, 45,254,208,233, 91, 88,189,227, 2, 78,111,157, 9,169,152, 65,211, 65, 11, 48,106, 80, -107,112, 28,193,147,216,168,156, 6,193,205, 60,105,165, 28, 52,141,178,152,148,202,202,211, 21,192, 49, 0,253, 0,188, 11,128, -168, 98,142, 22,254,206,230,235, 46,156,220,167,208, 25, 76,182,194,148, 71, 63, 65,151,215,185, 44, 9,165,111,192,151, 0,116, -122, 93, 99,182,204, 35,112,221,167,147,166, 13,173, 95,191, 30, 14,236,221, 6, 66,168, 67,246,222,188,251,120, 4,214,172,125, -113,198,224,132, 73,147, 26,108,222,184,241,133,115, 31,143, 25, 95,217, 44, 66,202,217,221,123,102, 80,195, 16,220,136, 78,199, -138,121,147, 35,141,185,137, 35,204, 74,215, 9, 22, 93,214,191, 66, 66,155,193,203,211, 21,217, 89, 57,232, 58,176, 7,250,244, -234,133,135,247,239, 98,209,183, 95, 69, 64,111,238, 89,149,213,246,111, 33, 36,156,216,165,215, 32,161,222,100,193,250, 21,223, - 98,194,140,197,104,211,181,191, 48,234,222,205,137, 0, 22,216,155,103,179,149, 67,215, 38,238, 48, 91, 89, 88,172, 28,142, 37, - 50,130, 87, 45, 5,128,128,161,233,102,245, 74,220,187, 26,131,181,242, 74, 16, 80,217,133,154,226, 58, 63, 45,158,202,232, 76, - 44, 84,106, 19,114,139,204, 80,105, 76,200, 83,155, 74,196,149,218,140, 60,181, 9, 2,134, 66,124, 98, 6, 24,134,170,118,252, - 93,145,206,130, 86,129, 46, 0, 40,208,175,233, 14,201,179,185,247,185, 31,151,222,125,197,194, 57,162,123,137, 90, 60, 72,210, -148, 10, 43, 26,226,231, 4, 22,103, 71, 8,150,123,112,255,118, 35,134,244,109,228,168,144, 34, 35,182, 24, 2,154,130,128,161, -224,232,238, 11, 39,169, 17, 83, 38, 79,128,107, 13, 39,164,230, 25,177,238, 72, 28, 30,196, 36,128, 51, 84, 47,219, 27,246,156, - 30,252,241, 71,195, 36,180, 80,138,221,103, 19, 33, 22, 49, 16,192,140,152,155, 87, 76, 57,233, 73,150, 98, 77,145, 66, 32, 16, -218, 69, 74, 1,196,198,114, 32,132, 96,201,247,179,241,219,142, 13, 56,125, 39, 7, 4, 37, 75, 53,252,117,120, 21,166,205, 90, - 4,149,198, 12,128,122,109, 5, 75, 81,212, 73, 66,200,187, 47, 11,161,151, 69,210,115, 22,168,242, 56,110, 63,207, 81,118,125, - 69, 2,238,249,152, 44,216,185,216,182,160, 28,165, 72,149,137, 43,169, 88,124,118,199,186,217,178,243,113,120, 38,174, 12,218, - 60,236,218,186, 89, 75,192,189,147, 27,125,236,150,189, 5, 34,119,111, 16, 42,145, 75, 46,207, 89,180,206,228, 83,203,223,118, -234,158, 38,191,216,200,190, 98, 6, 17,201, 21,172,194,201,221, 40, 16, 75, 86, 11, 13,230,111,243,242, 30,233,170,170, 82,142, - 16, 28,191,153, 13,112, 37,149,120,224, 74, 70,201, 58, 62, 12, 5,150, 43,241,115,159,139,204,125,118,206,190, 10, 4,246,159, -141,204,171, 72, 92, 57, 59, 59,195,217,217, 25, 74,165,178,186,109,163, 92,203,149, 92, 46,175,113,230,204, 25,169,163,163, 35, - 24,134,129,201,100, 66,143, 30, 61, 94,171,241,201, 61, 2,135,183,233, 54,120,105,135,174,239,226,226,153,195, 92,196,169,237, - 67, 12,170,106,172,223, 3,160, 79,167, 38,199, 87,172, 90,239, 63, 99,214, 28,137, 66, 42, 64,161,214, 2,134,166,224,231, 33, -131,171,146, 65,196,133, 19,198, 17,189,155,217, 45,254,124,107,213,217,181,106,221, 38,215,213,203,191,239,121,239,170,217,179, -168, 40, 73, 3, 0, 6, 85,252,166,184, 40, 42,182, 86,237,179,151,155,118, 26, 12,143,154, 1,125,147,114, 98,171,149, 95,149, - 74,149,123,248,240,225, 71, 33, 33, 33, 45,134, 12, 25, 66,150, 44, 89,226,146,158,158,126,208, 94,113, 5, 0,221,122,181,155, -166, 16, 90,219,186,202,232,144,122, 94,114,180, 11, 45,241,126, 14,123,183, 3,106,249,214,198,211,108,125,179,124, 3, 39,210, - 89,133,245, 54,110,218,118,219,175,134, 96,156, 77,107,136, 1,112,180,218,157, 3, 74, 59, 73,121,169,184,146, 10,160,148, 9, -193,145,146,223,236,183, 96,113, 48, 91, 56,232,205, 54,232, 77,108,137,216, 50,179,224,184,146, 96,101,138,162, 96,177,178, 85, -190, 13,150,215, 75, 58,186,184,193,191, 78, 73, 26,159,125,100, 66, 80, 20,224,238,238, 14, 87,215,170,215, 29,229, 56, 14,102, -139,173,116,208,101,159, 77,234, 48, 91,108, 32,132, 32, 46, 46,126,102,114, 98,242,192,128, 6,245, 59,133, 52,105, 86, 67, 38, -166, 81,106,157,170,236,173,118, 4, 0, 43,158, 91, 51, 77,200,192,120,228,240, 33, 69,191,254,253, 11, 45,186,188,231, 39, 75, - 48, 0,122,151,138, 49, 67,117,171, 73,225, 30, 56,200,197,181,198,226,145,163, 39, 4,118,125,167, 23, 46,157, 63,135, 99,135, -247,237,212,171,226,206,218, 75, 18, 20, 20,244,202, 44,194,250, 1,129,175,204, 34,172,227,223,160, 66,129,229,228,212,196,177, - 73,203, 46,190, 41,121, 22,252,241,199, 41,232,212,217,243,204,102,173, 30, 66,178,229,207,195,191,140, 29, 49,241, 59,199, 54, - 45, 91,192,217, 65, 14, 55, 23, 37,238,222,137,192,242, 5,115, 34,160, 55,247,172,186,255, 44, 69,112,176,168,166,204,119,170, - 95,189, 70,184,123,243, 26,158,196, 69, 69,223,187, 29,209, 40, 32,180, 53,220,125,252,166,166,184, 49,203,240,232, 81,149, 59, - 85, 16,150,164,127, 50,254, 95,165,131, 94,201,185, 54, 77,253,197,175, 54, 66, 10, 54,171,133,221,189,121,121,238,243,179, 8, - 43,226, 53, 22, 23,133, 95,189,249,240,171, 1,189, 58, 82,101,174,192, 50, 81,245,242,113, 64, 77, 5,158, 60,124,204, 89,117, -234, 67,213,171,114,146, 51,105,242, 23,178,146,180,115, 32, 37, 11,171, 85,183,221,192,200,138, 62,220,248,253, 55,212,253,100, - 29, 30, 38,105, 74,220,130,165, 2, 75, 34, 98, 32, 46,253, 75,136, 29,250,130,166, 87,124,252,126, 47,228,169,205,224, 8, 41, - 93, 75,143,130, 64, 32, 68,138, 6, 72,211,104,161, 42,202, 65, 98, 82, 50,212,217,137,160,105, 6,174, 53, 3,160, 79,181, 47, -173,197,172, 50,208,202,161,254,251,253, 58, 50,191, 95,207,130, 76, 34, 64,113, 94, 26,174,157, 57, 96, 32, 44,187,201,108, 53, -255,230, 65,196, 81,143,162,194, 45,118,118, 29, 42,141,206,236, 41, 17, 49, 56,176,253, 39,124, 48,106,210, 51,107, 54, 0,124, - 53,103, 33, 40,138, 66,161, 90, 11,128, 82,217, 97,185,122,254, 88,245,156,229,233,149,227,231, 68, 81,121,199, 84,233,177,185, - 2, 14,243, 75,162,202,252,210,121,243, 75,124,118, 45,142, 92,161, 5, 75, 72, 51,231,182,175,253, 70, 26,157, 43,193,173,199, -217, 24,218,177, 22,244,154, 60,108,254,121,141,214,104,181,244,201,139,178, 95, 92,149, 54,148, 94, 31,140,153, 30, 93, 47, 32, -216,124, 62,170, 56,177, 72,103,173, 48,142,161,245,208,111,162, 35, 79,254,212, 87,109, 77,156,172,240, 14, 97, 57,155,109,133, - 65, 21,247,125,249,157, 56, 17,127,183,238, 64,137,184,226, 56,124,189,124, 23, 8,199,150, 46,224,199,130,176, 28, 62,159,183, - 1,182,210,239, 44,199,130,178,178,242,170,146,171,148,138,206, 54,214,174,113,122, 89, 92,133,133,133, 21, 57, 59, 59,195,213, -213, 21, 46, 46, 46, 40, 19, 68,111,234, 22,164,105, 26, 74,165, 18,151, 46, 93,130, 82,169,132, 66,241,122, 11,228, 43, 60,130, - 62,104,213,109,208,158,174,253,199,208,127, 30,217,204,222,188,116, 98,168, 81, 21,107,183, 8, 96, 89,150,178, 90,173,232,213, -165,121,202,189,216,212,211, 11,191,255,190,119,203,110,239, 73,218, 5,121,192, 96,182, 33, 61, 45, 13, 17, 23,143, 25, 3,106, -187,157,110,215, 34, 48,221,106,181,130,101,217, 42, 7,112,147,201,156, 79, 11,165,174,195,134,127, 40,185,125,235,214, 30,185, - 71,224, 62,154,225,238, 19,150,105, 2,194,125,208,164,113, 48, 44, 54, 14, 6,189,166,224,117,242, 29, 29, 29,125,123,213,170, - 85, 65, 66,161,176, 86,120,120,120, 94, 97, 97, 97,181,182, 11, 58,119,242,214, 58,129,210, 26, 95,102,193, 74,235,216, 22,195, -251,117,192,111, 39,175,225,226,149, 8,164,232,149,247,116,102,230,247,244,244, 76, 83,136,139,250,240,160,246,117,153, 67,187, - 52,135,162,187,204,124,159, 16,217,185,188,203,243,237,158,224, 65, 81,128,198, 96,125,206,130, 85, 18,223, 68,211,148,221, 22, - 44, 10, 72,188,114,253,110,104,243,192, 96,220,123,170,129,170,208, 4,189,185,164,221, 19, 16,184, 58,138, 32, 17, 49, 72, 73, - 74, 4, 71, 44, 73,213, 27,103,160,234, 51,116,130,160,244,245, 69, 32, 20, 10,158, 5, 68,200,164, 98,173,135,135,135, 93, 2, -203,202,178, 24,210,171, 53,218,180,108,130,129, 19, 87, 1, 0,206,239,252, 26, 46, 74, 17,194,195,195,145,246,215,218,221,254, -109, 39,158,141,122, 24,243, 94,116,228,245, 15,251, 52,151, 53,243, 18,100,137, 42, 81,197, 71, 75, 93,132, 93, 1,244, 40,181, - 76, 89, 89, 27,151,218,187,119, 47,142,101,185,231, 99, 34, 92, 0,180, 5, 80, 0,224,110,169, 40,171,228, 5, 48,232, 29,208, -216, 7,138,146, 42,101,242,148,186,117,235,249,180,108,211,218,105,208,144,247, 33, 22,137,241,231,185, 51,248,113,205,178, 3, -218,172, 71, 99,170,229, 30,179, 51,160,189, 50,119,145, 90,237,164,139,139,185, 87,152,152, 99,118, 17, 56, 55,128, 80,226, 48, -129,114,242, 89,199, 72,148,223,213,108, 51,202,241,252,181, 91,136,190,119, 29, 62,110, 50, 36, 62, 73,208, 71,221,143,220,160, -167,132,223, 35,239,145,222,222,116,202,243,217,247,218,140,236,237, 98,180,176,184,122,225,164,145,179,113,189,111, 92, 62,245, -196, 55,176,165, 52,180,101,119,151,188,163, 91,134,232,129,223,170,226, 73,190,181,231,149,208, 11,134,188,159,121,234,220, 21, -165, 79,237, 0, 6, 20, 13,147, 65, 7, 85, 74,148,205,168,201,209,231, 70, 29,245,177, 43, 28,192,150, 49,239,219,101,155, 38, - 55,111,218, 72, 65,136,248, 5,139, 85,217,247,252, 98,115, 73,204,172,174, 8, 79, 31, 94, 51,170, 18,212,179, 43,239,235,172, -242,252,252,130,103, 83,243,101, 90,231, 58,106, 39,181,228,217,176,206, 0, 78,106,231,103,150,138,252,252, 2, 49,203, 90,229, -246, 60,158,206, 14, 82, 60, 76,202,124, 22,208, 46, 17,209,165,177, 87,127, 91,178,236,124,206,155, 11,196, 10,100,228, 27, 65, - 19, 2,142,179,193,102, 53, 67,171,209, 32, 51, 35, 27, 57, 57,185,208, 22,171, 33, 83, 58, 35,180, 89, 11, 56, 56, 56,224,209, -157,139, 0,168,227,118,137, 65, 78,212,160,101,139, 22,194,232,228, 98, 88,172, 28,132,176,224,234,233,253, 70,155,213,220, 63, - 55,234,232, 5,192,142,173, 68,158,119, 15,114,228,207,168,216,148, 70,190,110,222, 84,228,211, 34,236,250,101,125,201,108, 82, - 91,137, 53, 51, 58, 85,135,204,124, 29, 50,210, 82, 8, 56,246,207,234, 60, 75, 20, 69,221,174,236,248, 53, 45, 97,111,204,241, - 90, 2,203,102,179, 73,107,251,213,193,240, 9, 35,177, 97,195, 70,196, 61, 77,193, 47, 63,175, 45, 17, 87, 15,127,255,203, 78, -254, 80,148,174,149,161,207,137, 93, 97,116,105,149,126,252,126, 33,109, 48, 19, 91,229,157, 93, 93,116, 28,179,250,140,161,184, - 64,204,154,244,130,227,187,199,236, 43,143, 19, 0, 24,154, 50,151,186, 5, 65, 81, 20,202,220,130, 27, 22,140,131, 92,194,128, -162, 40,232, 77, 54,124,252,229,106,236, 92, 93,242,102,245,233,228,233,250,138,210, 89, 38,132,190,108, 27, 79,141,238,237, 63, - 96,209,214,152,163,215,146, 93,159,190,251,110,103,117,179,102,205,138,100, 50, 25, 20, 10, 5, 28, 29, 29,225,232,232, 8,103, -103,231, 42,243, 94, 10,207,170, 98,174,104,154,134,163,163, 35,100, 50, 89, 69,194,237,101,206, 23,197,149,103,131,247, 91,117, - 25,184,175,219,128,177,244,159, 71,126,225,238, 92, 58,254,190, 81, 21,247,187,189,117, 84,106,117,184, 63,100,200,144,198, 19, - 38, 76, 16,125, 51,121,200,153, 51,151,238,198, 29, 62,119,168,127, 65, 81,177, 47, 33, 4,206, 78,202,180,161, 61, 26, 31,239, -216, 50, 40,229,252,249,243,220,190,125,251, 76, 20, 69, 61,172, 42,157,121,121,185,219,207,159,191,176,188, 83,231, 46,248,101, -199,190,119, 99, 98, 30,189,251, 36, 33, 30,190,126,245, 80,183, 94, 3,232, 41,103,156,191,124, 21,197, 5, 57,219,237, 44,207, -191,127, 8, 13,173,201, 48, 76,173,162,162, 34,227,188,121,243,130, 88,150, 61, 22, 26, 26,218,130,227,184,172,152,152,152,116, -123,242, 30,177,251, 99, 21,128, 93,126,157, 71, 29,204,180, 20, 77, 5,176,204,183,118,109, 92,188, 18,129, 27,127,221,220,152, - 39,175,253,253,232, 15, 63, 25, 87,199, 85, 56,110, 96,187, 58,140,135,139, 28,123,127, 89,197, 28,189,158,188, 38, 57,223,250, -235,242,203,243, 23,217, 83, 71,101, 40, 40,182,160,125,136, 43,108, 54, 2,150, 16,208, 20, 5, 7,153,160, 34,129,245, 10,167, -192, 44, 25, 51,105,226,132, 39,161, 77,154, 77,251,112,212, 4, 81,179,250,181,113, 43,190, 16, 0, 5, 87, 71, 57, 50, 51,179, -112,245,216,175,182,194,140,199, 27, 25,134, 91, 80,157,242,204,136,220, 31, 80,246,221,203,203,107,252,189,168, 40, 92,186,116, - 9,174,174,174, 40, 19, 87, 21,184, 8, 95,224, 44, 44, 44,254,107,225,170, 95,219,143,251,104, 32,250,117,105,132,203,183,159, -192,108,229, 96,177,113,207,130, 92, 19, 35, 54,137,167, 14,171,103,158, 60, 36, 80,163,183,138,147,191, 75,214, 92,198,139,139, -200,190,156, 78, 51,128, 51, 0, 90, 3, 24, 8,224,236, 75,123, 12, 82, 40,137,187,106, 4, 32, 2, 64,162, 93,121,167,177,247, -238,237, 59,174, 22, 27,135,171, 55,239, 7,119,107,223, 12,132, 35,184,125,251, 14,182,108,219, 98,124,248,224,222, 74, 93,142, -215, 2, 84,188,101, 76,185,229,105,239, 44,194, 10, 4, 86, 41,231,101, 91,118,114,208,198,235,215, 46,207,145,248,180, 64,195, -190,223, 12,200,184,127,108,128, 87, 72, 47,184,213,111,143,204,251,191, 35,242,175,189,167,238,216,108,179,164, 28,157,162,207, -139,213,217,251,188,151, 65, 34,149, 79,105, 20,214, 25,105,169,201, 72,138,143,218,105, 44, 72,200, 76,121,194,236,204, 72, 79, -153, 88, 55,164, 61,174,157,249,237,139, 74, 4, 86,165,109,222, 77,172,222,120,233,218,245,225, 25, 7,143,121, 22,107, 13, 50, -129,128,214, 75, 24,228,136,244, 79,246,219,157,206, 71,143, 44, 69,245, 28,135,124, 56, 97,238,201, 53,203,231, 9, 61,156, 37, -200, 46, 52, 66,163,183, 66, 99,176,130,161,128, 0, 31, 37, 12, 58, 13,110,156,218,101, 37,150,130, 33, 64,164,181, 34, 78,183, -144, 1,139,140,249,137,159,207,157, 59, 27,140,216,209,167,110,183,217,150, 18, 85,254,210, 98,230, 53,128,186,254,179, 97,210, -100,245,159, 59,119,118, 16, 33,164,187, 91,200,128,226,231,246, 34, 44, 55,239,249,197, 22,124,212,213, 23,102,107,201,250, 97, - 44, 91, 18,107,199,149,174,106,142,202,237,202,207, 56, 9, 32, 58,112, 50, 2, 25, 57,133, 48,152,172, 48, 91,108, 48,219, 88, -208, 52, 3, 23, 23, 23, 4,248,135,193,217,201, 17,185,121,249,184, 29,113, 13, 55,226,238, 37, 18, 96, 81, 94, 13,245, 30,123, -234,136, 18, 40, 2, 60, 61,220,168,156, 98, 51,164, 18, 6, 55, 46, 93,182, 2,216, 94, 38,174,170, 51,118, 0,128, 90, 95,180, -122,214,194,117, 35, 54,172,250,206,171, 73, 93, 71,164,229, 25,145,174, 50,160,216,104, 3, 64, 96, 99, 9,204, 70, 53, 98,111, -159,206,182, 65,191, 26,255,112, 84,108,193, 18, 10, 77,183, 31,196, 73,102,205,255, 1,143, 18, 18,177,101,227,122,157,169,122, -226,234, 21,108,255,204,255,183,127, 71, 38,202,115, 11,114,132,224,248,141,236,103,219,126,148,185, 10,239, 38, 20, 85, 69, 39, -252, 97, 74,179,153,101, 66,232,199, 35, 25, 55,254, 31,123,247, 29, 30, 69,185,254, 13,252,187,187,179,125,211,235,166, 27, 82, -128, 64, 40,161,183,208,133, 32, 45, 8, 10,210,132, 35,130,192, 81,218, 15, 57, 82,130, 98, 59,162, 20, 11,138,116,233, 77,138, - 84, 67, 12, 72, 21, 66, 66, 32,164, 39,164,215,205,166,109,159,221,121,255,128,228, 32, 39,101,131,250,158,115,224,254, 92, 87, - 46, 72, 50,251,205,204,236, 51,179,247, 60, 83, 30,137,164,204,146,147,147, 83,177,123,247,238,250,162, 71, 32, 16,160,238,122, - 41,131,193,208,236, 93, 69,142,118,226,246, 83, 34, 94,120,181,177,226, 74, 32, 16,192, 98,177,212,247, 94,181,244,212,163,220, -181,245,208,110, 3,198,238, 27, 52,230,111,252,232, 31,191,183,220,252,229,248,248,218,210,148,163, 45, 93,151,106,181,250, 46, -128,212,181,107,215,118,222,178,101, 75,171,197,139, 23,103,124,255,241,236,141, 15,143,224, 30, 30,203,196,197,197,113,115,230, -204,209,235,116,186,204,138,138,138, 91,176, 98,144,107, 77,113,242,218,237,223,252,179, 77,110,126,225,244,192,246, 61,224,226, -223, 29,202,192, 30, 80,213, 24,113, 61, 45, 31, 25,247,162,145,116,229,208,126,109,169,251, 71, 64,138,213,243,219,169, 83, 39, - 95, 62,159, 63,138,227,184,214, 10,133,194,159,227, 56, 49,195, 48, 19,120, 60, 94, 42,203,178,247, 66, 66, 66,162,147,146,146, -172, 30, 51,236, 65,236, 14,189, 95,255,233, 27, 30,104, 20, 3, 50,138, 52, 97, 15, 52,138, 56,141,196,126, 97,233,133, 13,250, - 29, 2,175,117, 48,149,223, 61,180,179,242,200,158,205,159, 11, 38,207, 90,100, 78, 84,217,189,205,216,200, 90,212, 91,198,231, -241, 10, 23, 47, 94,242,175,199, 52,240, 30,158, 24,124,244,200,134, 2,107, 50, 30, 61,211,104,105,194, 61,225, 87,137,239,204, -254,160, 67,183, 62, 83,250, 15,127,149,111, 35, 82,224,252,209,111,185,204,132,152,131, 12,103,126, 79, 91,154,145,249, 71,183, - 47,131,193,240,187,194,202,154,222, 43, 0, 40,117,174, 28,240,211,185, 95,166,159, 60, 19,251,113,196,208,190,206, 95,175,120, - 5,255,252,238, 24,108,228, 18,112, 22, 51, 94, 25,232, 51,126,229,223,218,142,242,113,151,122, 29,142,201,187, 56,111, 93,226, - 82,141,198,152,130,230,199,189,227, 0, 92, 3, 16, 4, 96,212,163,233, 21, 0,106, 1,212, 60,250,253,143,143,190,183,154,145, -181, 32,171, 88,135, 99, 71, 14, 33,254,122, 52,146,146,146,171,147,238, 37,125,201, 99,184,117,181,197,169, 42, 32,181,197,235, -206,220,224, 29,131,104,248,206,194, 38,212, 10,100, 31,197,157,252,108, 64,240,160,191,247,114, 14,236, 3, 71,191,135, 53,101, -101, 94, 34,114,127, 59,116,172,186, 64, 52, 1,184,107,170,125,202,247,216,211,167, 85,176, 69, 32,198,149, 95, 78,129,179, 88, - 54, 1, 0,103,177,108,186,253,235,169,217, 61, 34,102,194,201,205,175,147, 58, 39,174,201, 71,249, 52, 70,198,176,149, 63,237, -248,232, 96, 86, 86, 22,238,223,191,143,180,180, 52,168, 84, 42,236,217,115,169, 69,207,106, 42,205,184,122,158, 39, 96,134, 77, -122,253,157, 19,145, 47, 71, 74,125,253, 3,249,109,188,237,224,108,203, 32, 57, 61, 31,233,137,169,150,180,132,139, 58, 78, 91, - 50,182, 52,253, 74,163,189, 35, 46, 33,227,221,249,124,211,187,209,199, 31,142, 45, 56,100,204,140, 54,255, 55,111,113, 79, 39, -103,199, 6,247,227,170,242, 10,113, 84,212,202, 54,117,211, 55, 55, 22, 33, 95, 32,168,158, 53,123,190,130,207,227,215,159, 6, -228,234, 86, 91,221, 63, 28, 7,240, 0,145,144,105,246, 45,155, 30,217, 23,172,197,130, 26,173, 17, 53, 26, 35,212, 53, 58, 20, -149,169,113,247, 94, 58,110, 92, 58,141,172,244,180,106,150,101, 99,192,225, 72,169,115,229,254, 6, 30,172,219,120, 15, 43, 4, -190, 78,142,182,200,170,208, 65, 38, 98, 80,144,147,198, 26, 89,221, 83, 63,100,189, 60,254, 68,161,160,253,232, 23, 95,127,235, - 31,103,194,195,251,217,117, 12,235,170,112,177,179,133,136,225, 33, 61,167, 24,119,226,126,171,125,144,114,187,202,108,210, 14, - 47,191,123,226, 15,143,210,242, 63, 91, 96, 25,205,236,144, 69,255,248,228,156,217,108,150, 49, 2,129,214,196, 89,134,255,145, -226,234,175,194,113,150,188,183,222, 94,242,187, 3, 2,147,217, 34,251,219, 91,139,181,143, 31, 32,240, 76,102,121, 93,207, 21, -199,113, 77,245,106, 8, 74,213,250,234,101,223,196,239,252,116,231,189, 67,120,248, 4,215,188, 63, 58,159, 21, 85,134,120,231, -161, 7,198, 84,107, 88, 30,128,164, 6, 50,107, 7, 13, 26, 84, 95,108, 61, 58, 93,103,245,254, 82, 44,149,207, 30, 56,106, 6, - 63,250,216, 22,203,111, 49,199, 38, 60, 77,113,245,248,219,175,211,233,174,235,116,186,196,247,222,123,175,155,187,187,187,251, -202,149, 43,165, 85, 85, 85,194,175,191,254, 90, 87, 86, 86, 86, 84, 85, 85,117, 21, 45,187,174,197, 82,145,119,231,245,159, 14, -155,190,229, 29,218,250,162,163,155,215, 48, 7, 23,159,214, 21,165,121,233, 85,229,121,103,120, 22,156,175, 41, 77,185,218,210, - 25,141,143,143,207, 9, 13, 13,253, 81, 32, 16,120,155,205,102, 23, 30,143,103,195,113, 92, 5,203,178, 21, 22,139,165,176, 37, -197,213,227, 69,150, 79,219,190,123,203,181, 22,177,145, 39,221,251, 32,118,135, 30, 0, 74,206, 47,209, 0, 56,142, 1,255, 23, -121,236, 74,214,151,119, 43,236,230,151,198,254,243, 68, 75,243, 11,110, 31, 8,250,179,218,191,174,240, 94, 30,128,233,119,110, -226,243,196,184,171,171,120, 28,132,102,176,107,180, 37,105, 55,255,140,124,161, 80,168,235,218,181,107,131,119, 11, 74, 36,146, -166,159, 91, 22, 27,203,150, 0, 91,208,191,255,142, 51,209,151,166,159, 62,255,235,199, 61,123,245,117,150, 74, 60,225,231,104, -196,142, 37, 93,254, 30, 29, 87,122, 99,244,146,139,223,100, 20,232, 18,208,244,245, 87, 13, 73, 3, 80,249,168, 39,107, 51,128, - 89,143,182,173,196, 22, 23, 2, 22,188,214,171, 87,247, 61, 60, 30,143,225, 88,203, 63,175, 10, 5,123,117,133, 73,121,248,131, -195,135,116,244,183,195,172,217,179,131, 3, 2,255,117, 23, 97,251, 23,108, 49,121,250, 27,193,126,173,130,235,127,214,198,167, -153, 3,170,194, 56,109,141, 91,232,208,228,115,107, 87, 56,167, 95,126, 75,230,228,109, 83, 91,150,173,170,200,190,185, 86, 83, -226,190,182,129, 17, 26, 90, 36, 43,237,238,186,173,159, 47, 93, 92,152,159,190, 69, 83,154,250,240,172, 67,105,106, 98,210, 45, -172, 40, 43,202, 91, 92, 94,146,177,246,105,215, 69,109,109,109,193,238,221,187, 29,250,244,233,195,119,119,119, 71,105,105, 41, - 98, 98, 98, 44, 22,139, 37,191,165, 89, 37,169,151, 98, 16, 16,224,180,119, 71,229, 63, 25,153,237, 8,214, 12, 79,142,227,192, -240,121,133, 70,125,229,153, 82, 7,237, 18,220,185,214,100, 59,226, 44,102, 30,199,231,248,117, 99, 11, 90, 44, 22,222,103, 95, -237,202, 22, 8,197, 13,158, 82, 53,155, 12,114,139,197, 98,245, 88,132,197,130, 7,206,161,166,182,205,223,197,199, 1,137,188, -251,205, 28,156,114,103,123, 71, 76, 29,198,178,102,211,163,237,163,238,171,132,227,120, 23,192, 51,159, 43,115,170,190,218,146, -162,234,119, 59,122,163,209, 1,124, 17,108,229, 38,240,193, 67, 85,101,165,196,213, 44, 78, 42,251, 3,109,169,228,238,241,187, - 37,253,251,251, 25,126,190, 48, 45,246,210,229, 9,156,197,226,111,230, 0,112,188, 44,131, 81,119,176,196,174,108,231,211,206, -239,255, 26,222, 95,156,111,213,233,146,255,194, 76, 17, 0, 23, 60,124, 36,126,241,159, 60,159,141,142, 45,248, 71,150,221, 70, -217,182,175, 68, 42, 95,162,209, 84,111,209,150,164,158,248,147,215,167,189, 68, 34, 9,179,177,177, 17,150,149,149, 93,127,244, -161,246, 44,190,239,245,250,190,190,205,101,208,176,222,239,156,255,233,198,134, 71,167, 15,235,121,141,255, 66, 58,121, 68,248, -194, 93, 71, 78,174,107,224, 46,194,255,249,101,255,203, 50,251,247,103,220, 42,236,166,155,205,150, 53,131,130,171, 53, 69,153, -201,115, 46,221, 41,189, 14,160,250, 15,206,231,164,199,122,176,246,254,183, 44,187,107,251, 49,239,131,135, 16,171, 19, 56, 36, -149,222, 61,182,178,217,249, 12, 9, 17,201, 75,225,168, 41,115, 41,127,138,194,234, 63,209,150, 4, 29, 58,116,232, 39, 18,137, -124,205,102,179,220, 96, 48,104,180, 90,109, 86,118,118,246, 21, 52, 62, 32,249, 95, 58,159,110,161, 99,214, 9,133,194,183, 1, -192,100, 50,109, 40, 73, 60,182,160,169, 23, 54, 49,253, 95,191, 62,199,143, 23,224,208, 33,243, 95,241, 30,121,118,126, 89,109, - 50,177,245, 99, 15,137,132, 76,101,254,237,195, 14,255,193,182, 68, 90,248,166, 82, 38,101, 82, 38,101, 62,137, 79,235,147, 50, -255,147,153, 30, 33, 35,125, 60, 66, 70, 90,253,176,228, 70,166,167,245, 73, 26,197,208, 42, 32,132,252, 7, 88,104, 21,144,255, -164,194,164,147,185,127,229,244,132,240,154,168, 66, 91,210,245,247, 52,149,108, 34,101, 82, 38,101, 82, 38,101, 82, 38,101, 62, -119,153,205,101,211,169,199,191,168,240,162, 76,202,164, 76,202,164, 76,202,164,204,231, 47,243,153,194,167, 85, 64, 8, 33,132, - 16, 66, 5, 22, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66, 8, - 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, - 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,127, 29, 26,105,156, 50, 41,147, 50, 41,147, 50, 41,147, 50,159, 59,244, - 36,119, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 80,129, 69, - 8, 33,132, 16,242, 95,131,135,198,239, 4, 72,108, 65,206,211,220, 77,144, 72,153,148, 73,153,148, 73,153,148, 73,153,207, 93, -102,115,217,137, 32,127, 73,225, 69,153,148, 73,153,148, 73,153,148, 73,153,207, 95,230, 51,133, 78, 17, 18, 66, 8, 33,132, 80, -129, 69, 8, 33,132, 16, 66, 5, 22, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 66, 8, 33, +137, 80, 78, 71, 13, 10, 26, + 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6,158, 0, 0, 10, 79,105, 67, + 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83, +233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161, +217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136, +138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, + 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, + 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116, +145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, + 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0, +172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, + 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, + 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, + 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, + 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128, +109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144, +185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, + 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34, +196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, + 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, + 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63, +199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, + 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46, +194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, + 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, + 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70, +162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, + 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99, +207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, + 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16, +123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, + 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64, +113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, + 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175, +232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, + 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42, +124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, + 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89, +253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53, +196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227, +152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151, +150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143, +206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158, +190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12, +206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, + 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41, +166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44, +182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187, +173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, + 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, + 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83, +155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93, +225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, + 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165, +119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, + 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, + 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152, +206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, + 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55, +186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157, +226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, + 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, + 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, + 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, + 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, + 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230, +189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126, +189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, + 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171, +196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, + 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54, +238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102, +213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215, +185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, + 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, + 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233, +130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225, +210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147, +211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214, +213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95, +244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145, +245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23, +254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175, +219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104, +249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0, +255, 0,255,160,189,167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7, +116, 73, 77, 69, 7,217, 7, 23, 19, 9, 14,174, 17,223, 22, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236, 93,119,120, 20,213,226, + 61,119,202,246, 77, 39,141, 4, 66, 71,186, 16, 64, 9, 96,144, 14,242, 80,121,162,128,160,226,243, 61,236, 15,177,128, 29, 20, +136,250, 20,108,136,242, 84,120, 32,250, 19, 21, 36, 54,154,116, 8, 16, 68, 8,197, 8, 18, 8, 37,132, 68, 82,183,239,206,253, +253,145,157,113,179,217, 50,193, 4, 81,238,249,190,249,182,204,204,153,219,231,220,115,239,157, 1, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,174,100,116, 97,156,140,147,113, 50, 78,198,201, 56, 25, 39,227,188,210,192, 93,196, + 57,180, 17,194, 65,189, 91,230,159,128,179,177,226,222,144,220,153, 94,190,231,255, 36,225,204,188,140, 57,105, 35,240,210, 70, + 40, 83,180, 17,202,125, 99,115,162,145,226, 78, 27, 33,223,159,255,147,132, 51,243, 50,228,244, 47, 63, 13,193, 27,168, 76,210, + 6, 14, 39,109,132,112, 54, 22, 39, 26, 41,238,180,145,242,190, 33,239, 77,151, 45,132,203, 64, 96, 0, 0,241,225, 39,151, 49, + 39, 26,137,179,161,195,183,177, 17, 56, 73, 35,148,129,231,189,188,155, 26, 80, 16,201,113,111,136, 60,162,141,192,219,152,226, +170, 33,203,125, 99,115,162,145, 56, 73, 3,167,231,198, 70,224,108,168,186, 68, 27,161, 46, 53, 70,153,247, 47, 63, 13,193,235, +207,217, 16,117,201,159,179, 33,202,253,165,224, 68, 35,113,146, 70, 72,211,198,184, 55, 93,182,224, 46, 50,177, 26, 3, 20,192, +128,203, 92, 8, 53,150,200,108,104, 23,167, 49, 57, 27, 50,143,158,111,132,222,204,128, 6,204, 35, 18, 32,188, 13,201, 73, 26, + 41,156, 13,145, 79,164, 17,234, 18,105,132,186, 68, 26,161,220, 95, 42,206,134,204,163,134,170, 75,164,145,234,146,127,124,159, +111, 96, 78,210, 72,225,108,136,124, 10,196, 73, 26,129,179, 49,226,158,121, 25,243, 94,246, 16, 46,147,112, 52,134, 16, 66, 3, + 58, 25,141,233,226, 52,150,211, 70, 26, 41, 93, 55, 53, 32,215,198, 70, 8,231,166, 6,236,209, 6, 18,132,207, 93,230,117,154, +213, 37, 86,151, 46,183,186, 68,131,116, 86,158,187,204,202,121, 67, 58, 66,161, 56,126,111, 62,209, 32, 29, 53,218,128,225,108, + 72,215,154, 92,162,250,116,217,129,187,140,194,210,208,243,123, 40, 26,199, 21,107,172,120, 55,100, 56, 7,252, 73,226,222, 24, +225,124,190,145,226,254,103, 73, 83, 86,151, 88, 93,186, 28,235,146,111,153,108,168,176, 54,116, 57, 15,196,217,144,243,144, 26, +178,140, 54,118,220,233,101,158,247,127, 10, 92,140,131,213, 88,189,227, 63, 3,103, 99,112, 55, 70, 56, 55,253, 73,210,180, 49, +194,249, 60, 26,118,200,145, 52, 66, 88, 27,115,152,176, 49,202,102, 99,150,119,114,153,135,243,207,146,239,141, 17,206,134,170, + 75,164, 17,234, 61,105,132,246,169, 49,203,102, 99,114, 54, 4,119, 99,132,179,177,242,158,129,129,129,129,129,129,129,129,225, + 74, 69, 80, 37,217,189,123,247,108,189, 94,223, 38,216,126,139,197,114,246,199, 31,127,188,158, 37, 33, 3, 3,131, 10,112,248, +109, 74,130,132,198, 25,226, 96, 96, 96, 96,184,108, 16,116,136, 80,163,209,180,218,188,121,115, 59, 73,146,224,118,187,225,241, +120,224,241,120,224,118,187,225,112, 56,240,247,191,255,189,222,195,139,221,186,117,219,204,113, 92,139,250,156,227,241,120, 78, +238,223,191,191, 95,176,253, 9, 9, 9,219, 1,180, 34,228, 55,173, 72, 8,129,252,219,247,127,142, 83,166,156,157, 57,117,234, + 84,143, 80,156,132,144, 86,190,124,254, 92, 1,120, 67,114,182,111,223,126,143, 32, 8,169,129,206, 15,198, 45, 73,210, 47,121, +121,121, 25,172,152, 94, 26,116,235,214,109, 51,207,243,245, 46,159, 63,254,248, 99,208,242,217,185,115,231, 31, 56,142,107, 26, + 40,143,131,148, 39,222,227,241,252,228,229, 12, 40, 64,146,146,146,182, 83, 74, 91,169, 44,151, 50, 78,157, 58,117,170,103,184, +122, 20, 42,156, 1,184, 67,114,250,138,171,148,148,148,172,248,248,248,123, 45, 22,139, 13, 0,229, 56,142,202,220, 50,175,199, +227, 57,127,228,200, 17,246,240, 66, 6, 6,134,191,182,192,146, 36,137,179,219,237,200,207,207, 7,165,117,219,121,142,227, 60, +245,189, 24,165,180,221,250,229, 75, 19, 12,241,137,240, 56, 29,208, 53, 73, 80,184,203, 14, 29,128,199,233,132,228,114,162, 73, +207,107,229, 48, 96,192,128, 1,124, 24,218,212,169, 83,167, 38, 68, 68, 68,192,102,179,193,102,179,193,110,183,195,110,183,195, +225,112,192,225,112,192,233,116,194,233,116,194,229,114,193,110,183,227,192,129, 3, 33,195, 78, 8, 73,125,232,161,135, 20, 78, +187,221, 14,155,205,166,112,217,237,118,133,211,225,112,192,110,183,227,224,193,131, 33, 57, 5, 65, 72,221,187,119,111,130, 70, +163, 1,165, 20,146, 36,129, 82, 90,107,243, 75, 43,244,237,219,215,201,138,232, 37, 69,187,149, 47,205, 78,208,197, 53,129,228, +114, 33,238,234,116, 37, 47, 78,175,255, 22,146,203, 5,201,229, 66,218,223,198, 40,255,103,102,102,134, 43,159,105,159, 61, 59, + 35, 90, 19, 17, 1,183,205,134,150,163,110, 86,118,228,189, 51, 15,212,229, 2,117, 59,209,245,145,167, 1, 0, 37, 37, 37,214, + 14, 29, 58,156, 65,232,213, 91,169,199,143, 31, 79,144,195,224, 47,212, 57,142,171,181,109,221,186, 21, 19, 39, 78, 12, 23,247, +212,167,158,122, 42, 65,174, 35,190,101,221,229,114, 41,245,199,237,118,195,229,114,193,225,112,224,135, 31,126, 80,229, 92, 37, + 39, 39,191,212,191,127,255,201,203,150, 45, 51,125,241,197, 23,166,150, 45, 91, 66,163,209,128,231,121,240, 60, 15,142,227,192, +243, 60,110,188,241, 70, 54, 55,131,129,129,225,175, 47,176,156, 78,231,241,161, 67,135, 82, 0,112, 56, 28, 41, 90,173, 86,227, + 39,192,154,102,100,100,252,228,127, 94,184,161, 67, 67,124, 34, 62,104, 25, 11, 0, 24,123,172, 84,185, 41,172,184,174,187,114, +204,248, 19,229, 53,199, 26, 12,224, 56,142,132, 17, 67, 48,155,205, 24, 58,116, 40,180, 90, 45,210,211,211,161,209,104, 32,138, + 98,208, 77, 13, 76, 38, 19,102,206,156, 41,139, 35,152,244, 58,220,215,255, 90,232, 9,197, 7, 63, 30,129,221, 35, 65, 16, 4, + 8,130, 0, 81, 20,235, 56, 82,129,160,209,104,112,224,192, 1,240, 60, 15, 65, 16,106,125,242, 60,143,213,171, 87,227,150, 91, +110, 1,207,243, 48, 26,141, 0,155, 12,120,201,161,139,107,130,207, 50,107,140,200,219, 11, 43,149,255,191, 29,247, 55,229,251, +164,211,213, 32,132, 64,163,209,168,203,247,136, 8,124,125,203, 8, 0,192,152,252, 98,165,204,236,159, 55, 27,162, 86, 11, 65, +212,160,203,212,167, 80, 82, 82, 98, 29, 51,102,204, 86,189, 94,255,157,138,206, 10, 78,158, 60,169,112,137,162, 88,167,220,115, + 28,135, 15, 63,252, 16, 39, 78,156, 80, 21,119,171,213,138, 57,115,230, 40,113, 11,196,235,251, 93, 69,220,185,164,164,164, 23, +251,247,239, 63,113,217,178,101, 49,132, 16, 44, 88,176, 0,130, 32,224,134, 27,110, 64, 92, 92, 28,214,172, 89, 3,141, 70,131, +199, 30,123,140, 21, 62, 6, 6,134, 43, 67, 96,253,248,227,143, 35,228,239,215, 92,115,205,225,173, 91,183, 94,229, 99,229,195, +237,118,107,220,110,119, 59,121,216,208,237,118,195,110,183, 99,252,248,241, 33,123,244, 30,167,163,142, 64, 10, 38,156,212,194, +225,112, 96,236,216,177,138,136, 9, 37,174,212,220, 24, 8, 33,176,219,237, 16, 4, 1,173,155,199,227,233,177, 61,209,151,167, +176,150, 2, 40,169,198,157,201, 2,246,165,182,195,155, 39, 75,113,162,162, 10,130,160,110,180, 84,146,164, 90,130,202,255,251, +194,133, 11, 49,110,220, 56,240, 60, 95,103, 8,137,225,210, 64,114,185,194,150,195,250,230,141,219,102, 3, 0,240, 62,130, 92, + 20, 69,104,245,122,240,162, 8, 65,171, 65, 73, 73,137,117,200,144, 33, 59, 13, 6,195,146,164,164,164,211,167, 78,157, 10, 89, + 62, 41,165, 16, 69, 17,130, 32, 4, 45,243, 31,126,248, 33,150, 46, 93,138,222,189,123,171, 42,243, 14,135, 3, 26,141, 6,179, +103,207,174,179,255,157,119,222,169, 35,176,194,128, 0,224, 18, 19, 19,239, 91,190,124,121,164,124,253,184,184, 56,136,162,136, +206,157, 59, 35, 34, 34, 2, 91,183,110,133,199,227, 81, 45, 86, 25, 24, 24,174, 76, 80, 74, 69, 0, 87, 3,136, 7,224, 1, 80, + 9, 32,218,231,144,243,222,207,120,249, 55, 33,100,119, 0,158, 94,222, 99,206, 19, 66,118,251,252,118, 0,208, 6,248,191, 20, +128,193,187,217, 1,108, 7,208,217,231, 58,242,121,240,191,174,172, 12, 50, 81,243,160,186, 1, 8,240,240, 59,121,184,240,200, +145, 35, 1,135, 11,253, 2, 31,178,149,212, 53, 73, 80,156,171, 79, 91,199, 41,255,143, 43, 40, 83, 26,216,175,123,183,133,206, +108, 66,207,231, 95, 9,155,232,242,141,161,184,184,184, 78,207,251, 98, 5, 22, 0,184, 92, 46, 24, 12, 58,124,255,238,117, 56, +251,139, 27,179,179, 11,177,106,215,113, 8,130,128, 81, 87,181,197,223,221, 64, 86,172, 30,255,114,123,224,148,168,170, 27, 24, +165,180,142,184,242, 21, 89,132, 16,229, 63,118,179,249, 99, 16,119,117,186,226, 92, 45,107, 22, 81,199,181, 2,128, 85,221, 91, + 64, 31, 97, 70,231,135,167,171, 42,159, 45, 71,221,172, 56, 87, 95,165,183,130,160,209, 64,212,105,241,247, 31, 11, 1,212, 12, + 11, 14,236,218,113, 83, 25,175, 93,124,199, 29,119,252,178,126,253,122,163,154,176,106, 52,154, 90,130, 45,144,184, 18, 4, 1, + 46, 63,209, 24,170, 83, 17, 76, 56,201,245,170,158, 14, 22, 44, 22,139, 99,213,170, 85,120,243,205, 55, 17, 23, 23,135,161, 67, +135, 34, 41, 41, 9, 43, 86,172, 0,165, 20, 15, 60,240, 0, 12, 6, 3, 12, 6, 3, 43,243, 12, 12, 12,161,180,200,117, 51,102, +204,232,153,149,149, 53,167, 79,159, 62, 31,111,223,190,125, 57, 33, 36,219, 71,123,140,242,182,101,217,242,111, 74,105, 47, 95, +145,229, 21,105,241,132,144,108,249,120,223,223,242, 39,165,116, 48, 0,173,252,123,198,140, 25,157,179,178,178,230, 76,159, 62, +253,201,185,115,231,106,102,204,152,209, 53, 43, 43,107,142,124,157, 64,225,240, 21, 88, 33,159, 2,236,116, 58,143, 15, 30, 60, + 88,213,138, 31,171,213, 90, 20, 70,128, 5,116, 6,124, 93, 1, 93,132, 25,134,136, 8, 16, 78, 93,131,235,114,185, 32, 8, 2, + 56,142,195,218,181,107, 97, 48, 24, 48,114,228,200,139, 30, 34,148, 69,155, 86,171,129, 16,205,225,142,215,246,224,252, 5,139, + 50, 36,184,174,160, 16,187, 12, 6, 60,221,177, 43,204, 85, 5,168,176, 59,126,151,131, 53,110,220, 56,216,108, 54,112, 28,167, +252,199,113, 92, 88,177,202,208,120, 8,182, 8,129, 16, 2,125,100, 4,244,102, 51,120,129, 87,197, 69, 41,253, 77, 8,105,181, + 16,117, 90, 8, 26,141, 34,174,134, 12, 25,178,179,140,215, 46, 62,125,250,244, 78, 0,122,181, 2, 75,118,176, 66,137, 43, 65, + 16,224,116, 58, 85,137, 23,187,221, 14,141,230,183,153, 0, 39, 79,158, 12, 41,176,194, 69, 27,128, 68, 8,145, 90,181,106,165, +156,147,152,152,136,232,232,104, 72,146, 4, 73,146,160,215,235, 97, 48, 24,106, 93,151,129,129,225,138, 69, 40, 45,162,203,202, +202,154,227, 43, 96,252, 5,141,175,112,242, 19, 81,190, 34,173,115,152,182, 63,219, 95, 52,201,215, 37,132,100,207,157, 59,119, + 84,152,112,156,247, 23, 88,114,131, 24, 16,190,195,133, 13,117,243, 10,117, 3, 51, 68, 69, 66,107, 50,193, 59,253,138,134,227, +114, 58,157,202,156,147,123,239,189, 55,104,175,222,119,110, 74, 56, 56, 28, 14,240, 28, 15,232, 90, 66, 66,142,114,179, 82, 54, +141, 6, 5,205,187,129, 20,157,134, 32,168,155,239, 47, 59, 88,178,136,122,224,129, 7,176,104,209, 34,101, 98, 50, 0,240, 60, +143,246,237,219,227,216,177, 99,172,170,253, 1,160,148,134, 29,182,214, 71, 70, 64,103, 54,131, 87,225, 52,202,251,149, 57, 76, +122, 29,120,141, 6,130,166,102, 88,112,244,232,209,155,202,202,202, 22,119,234,212,233,103,212, 60,198,128,168,173, 63,129,202, +249,226,197,139,107,137,171,250, 56, 88,114, 61,242, 69,160,225,194, 49, 99,198,168,117,176, 40, 33,132,138,162,136,193,131, 7, +163,107,215,174, 88,181,106, 21, 36, 73,194,253,247,223, 15,131,193,128,249,243,231,195,237,118, 35, 43, 43,139, 57, 88, 12, 12, + 12,161,238,249,214,233,211,167, 63, 73, 8,201,246, 58, 73,121, 33,132, 84,160,182,189,151,159, 72, 59, 31,228,184, 81,129, 68, +150,239,119, 25, 51,102,204,232,236, 31, 14, 95,199,204, 87, 96, 53,214,251,219,106,161,236,208, 1,101, 66,187, 60, 44, 72, 8, +193,183, 25, 87, 65,107, 54, 65,111, 54,163,223,202, 45, 74,175, 25, 47,190,170,202,193,146,133, 83,105,105,105,216, 33, 66,181, +174, 24,175, 17,177,211, 44,130,138,124,173, 27,150, 40,138,224, 4, 17, 5,241,237, 64,132, 53, 16, 60,110, 85, 55, 7,217,201, +240, 93, 61,117,199, 29,119,128,227, 56, 69,100,117,239,222, 29,126,121,194,112, 9,113,102,195,119,248,230,182,154,186,234, 59, + 44,152,221,187, 13,116, 17,102,232, 76, 38,100,174,222,174, 12,231, 98,254,123, 97, 57,143,188,255, 54,242, 94,159, 11, 65, 20, +113,243,222, 2,197,185,234,123, 85,219,157, 14, 83,228,226,147, 39, 79,238, 4,192,221,118,219,109,209, 61,122,244, 80,101,139, + 17, 66,106, 77, 60, 23, 4, 33,160,184, 18, 4, 1,110,183, 91, 85,220,157, 78,167, 42, 39, 73,118,177,212, 52,148,114, 58, 69, + 69, 69, 33, 34, 34, 66, 89, 65, 43, 59, 87,242,252, 77,181,245,146,129,129,225, 47,143, 96, 90,196, 62,119,238,220,188,185,115, +231, 42, 78,146,191,131, 21,228,190,123,131, 87, 76,197,203,226, 12,128, 61,208,252,172, 64,174,152,191,240,242,253, 47, 43, 43, +107,142,127, 56,124,135, 37, 3,206,206,238,214,173,219, 55, 70,163,177,165,218,212,168,207, 67, 71, 61, 78,103,157,158, 56, 33, + 4,122,179, 25,218, 8, 51,116,102,115, 80,151, 43,216,141, 70, 30, 34,228,121, 94,185,233, 44, 89,178, 4,102,179, 25,119,221, +117,215, 69, 77,114,175, 17, 88, 60,190,212,228, 3, 26,161,206, 77,139, 23, 69,156,140,106, 6, 78, 20, 33,120,212, 57, 4,229, +229,229,224,121, 30,207, 61,247, 28,178,178,178,148,101,244,190, 75,235,125, 93, 15,134, 75, 15,223, 73,238,181, 92,213,136, 8, +165,124,250,254, 31,110, 78, 34, 33, 4,240,184,107, 86, 11,234,180,138,184, 26, 61,122,244, 38,135, 41,114,241, 85, 87, 93, 37, + 59, 87,156,209,104, 12,187,106,214,183,110,200, 66,199, 95, 92,201, 46,169,252,221,229,114,169, 42,243,178,192, 90,180,104, 81, +200,206,136,124, 93,181,229,148,227, 56,108,222,188, 25,123,247,238,197,189,247,222, 11,131,193,128, 55,222,120, 3,110,183, 27, +179,102,205,130,193, 96,128, 86,171,101,133,143,129,129, 33, 20, 98,100,129,227, 21, 73,181,156, 37,239,220,169, 81,190,191, 3, + 57, 92, 94,199,105,115,152,246,240, 43,175, 48, 11, 8,217, 73,243, 59, 39,219, 95,156, 9,126, 78, 9, 1, 0,173, 86,219,114, +219,182,109,237, 36, 73,130,199,227, 65,168, 79,135,195,129, 91,111,189, 85,245, 67, 71, 37, 87,141,192,226,252, 86,202,233, 34, + 35,160, 53,255,118, 3,243,185,137,133,109,197,101, 7,203, 87, 96, 61,247,220,115, 16, 4, 1,139, 22, 45, 2, 0, 60,250,232, +163,245,118,176,168, 4,108,247,108, 68,211, 5,221, 64, 23,235,113,110,243, 97,136,162,136,164,222, 67, 32,245,252, 59, 74,181, +145, 48,121,231, 85,169, 25,118, 44, 45, 45,197,137, 19, 39, 64, 8,193, 35,143, 60, 18, 82, 92,173, 93,187,150,205,193,250, 3, + 5, 22,199,243,181,242,195,183,124,250,137,175,240,227,100,110, 55, 68,157,174,214,106,193,178,178,178,197, 39, 79,158,204, 1, + 64, 38, 78,156, 24,109, 52, 26,241,254,251,239, 91, 0,104, 86,174, 92,105, 8,199,233, 59,143,207,223,185,242, 23, 88, 30, 79, +248, 33,108,185, 83,161,198,237,173,143,192,146,203, 55, 33, 4, 30,143, 71,113,174, 92, 46,151,242, 91,167,211,177,130,199,192, +192, 80, 71,139,248,225,188,223, 60, 39,226,231, 52,157, 15, 36,172,124,135, 3,229,239,132, 16, 87, 0, 94,135,223,208,161,255, +255,242,103,233,220,185,115,191,151,157, 43,159,255,107,133, 35,168,131,197,113, 28,236,118, 59, 14, 29, 58,164,182,135,170,250, +161,163,113,233,215, 96,252,137,114, 16, 66,176,166,127, 39,232,205,102,104,204, 38,100,124,182, 81,105,176, 11,178, 30,131,198, +100, 70, 92,191, 33,170, 26,112,143,199, 83, 71, 96,149,149,149, 65, 20, 69,188,248,226,139,224, 56, 14, 47,189,244, 18, 82, 82, + 82,112,246,236, 89,100,102,102,170,186,217,112, 18, 7,253,157,177,208,255, 43, 2,220,189,109,208,249,111,255, 66,121,101, 11, +236,119,152,208,161, 58, 31, 49, 27,158,135, 83,114,171,122, 76, 3, 33, 4,110,183, 27,223,127,255, 61, 68, 81,132,219,237, 86, +110, 62,148, 82,229, 41,249,242, 67, 29, 95,122,233, 37, 86,213,254, 0, 52,187,225, 38,220,113,198, 2, 0,248, 38,227, 42,232, + 76, 38,104, 35,204,232,247,197,102,165,124,254, 50,103, 26, 52, 38, 51,162,123,245, 87,197,217,241,254, 71,209,225,190,105, 40, + 41, 41,177, 14,238,222,121,115, 57,175,251,176, 75,151, 46,202,156, 43,163,209, 8,189, 94, 79, 80,251,117, 50, 97, 69, 11,199, +113, 97,197,149,252, 93,109,167,194,127, 21,110, 40,129,165, 22, 28,199,225,174,187,238, 66,114,114, 50,222,124,243,205, 90,206, +213,147, 79, 62, 9,151,203,133,249,243,231,179,194,199,192,192, 16,170,221,219,173,246, 88, 74,105, 47, 31, 49,181,251, 98,120, +235,115,189, 96, 8,216,242,218,237,246,130, 65,131, 6, 33,200,190, 20,157, 78, 87,171,117,149, 31, 58, 26, 96,168,176, 11,128, + 3,126, 17,255,109, 88,208, 59, 89, 88,235, 55,236,162, 53, 71, 64, 52,153,193, 5,110,196,235,112, 6,114,176,228,161,147,242, +242,114,136,162,136, 55,223,124, 19,145,145,145,176,219,237,129,122,222, 1, 57,121,158,135,229,132, 5,199,159,217, 15,157,233, + 40,218, 15,137, 64,132,120, 12,109,183,172,132,219,237, 0,124,134, 12,213,112,182,111,223, 30,207, 61,247, 92,157,199, 51, 4, + 67,122,122,122, 88,206, 6, 0,227, 12, 34, 98,116, 17,102,232, 35, 34,130,150, 79, 33,240,179,155,106,113,202,251,101,231,170, + 74, 99,252,240,228,241,227, 57, 0,184,137, 19, 39, 70, 25,141, 70, 44, 92,184,208, 2,128,123,225,133, 23,140,105,105,105,188, +154,112,114, 28,135, 37, 75,150,212,153,115, 21, 76, 96,169, 9,167,219,237,174, 35,176,198,142, 29, 91,231, 65,163, 33, 28,172, + 58,225,148,231, 96, 53,105,210, 4, 70,163, 81,121,237,150, 94,175,135, 94,175, 87,158, 14, 31, 98,168,149,149, 79,198,201, 56, +175, 28,206, 75, 46,198, 26, 19, 1, 5,214,190,125,251,134, 7, 59, 33, 35, 35, 35,127,219,182,109,109,125,223, 77,232,118,187, + 53,118,187,189,221,141, 55,222, 24,182,171, 44, 73, 18,116, 58, 29, 40,165,184,250,233,172,154, 46, 60,247,219,144, 32,165, 20, +209,125, 7,131,240, 60, 60, 30, 9, 46,151, 43,236, 42, 66,155,205, 86,107, 2,122,160,229,235, 85, 85, 85, 33,159,243,227,207, +105,181, 90,107,205,235, 34, 30,138, 95,214,173,168,187,154,208,123, 29,181,208,235,245,181,134, 77, 84,218,165, 12,151, 8,242, + 3, 60, 41,165,232,252,208,244, 26,167,136,231,106,237,143,234,213, 31, 68, 16, 33,213,204, 91, 10,183, 48,132,156, 63,127,222, + 58,122,244,232, 77,148,210, 15,110,188,241,198,159, 80,243,176, 58,106, 54,155,117,162, 40, 74, 0,126, 5, 64, 47, 92,184, 16, +117,250,244,105,201,102,179, 53, 15, 23,206,205,155, 55,227,232,209,163,232,209,163,135,226,124,202,155, 60,124,127, 49, 14, 86, +160, 39,194, 7,123,146,123,125, 28,172,168,168, 40,104,181, 90,188,248,226,139,208,104, 52, 48, 24,106, 70, 65,231,207,159,175, +164, 57, 3, 3, 3,195, 95, 9,245,126, 97,179, 36, 73,124,176,225,195,112, 67,133, 30,143,231,212, 53,215, 92, 83,223,235,157, + 11,115, 67, 60,181,101,203, 22,141,255, 11,105, 3,189, 0,215,231,191,176,156,187,119,239,214,132, 56, 63,208,247,115,245,137, +187,154,249, 43,110,183,251, 52, 43,162,151, 14,110,183,251, 84,239,222,189, 3,239,124,238,165, 96,249,122, 46,140,104,249,185, + 93,187,118,103,204,102,243, 87,137,137,137,165,219,182,109,139,235,213,171, 87,156,239, 49,189,122,245, 74,246, 59,205,129, 16, + 43,122, 9, 33,167,238,184,227, 14, 77,152,242,232,255,253, 84,152, 78,197,169,188,188, 60, 77,160,242, 30,236,147, 82,122, 74, + 69,178,158, 24, 49, 98, 4, 23,168, 14, 5, 72,203,243,172, 20, 50, 48, 48, 92,177, 2,203,102,179, 21, 14, 26, 52, 40,224,186, +111,139,197,114, 50,212,185, 7, 15, 30,236,217,208, 17, 56,125,250,116,198,159,129,179, 49,226,206,112,249,231,209,193,131, 7, +123, 3, 64,121,121, 57, 66,189,254,166, 62, 40, 44, 44,108,240,242,217, 24,156, 0,112,232,208,161, 62,172,100, 49, 48, 48, 48, +129,165, 2,106, 31,199,192,192,192,192,192,192,192,192,112,165,130, 99, 73,192,192,192,192,192,192,192,192,208,176, 32,168, 89, + 9, 16, 8,245, 89, 29,208,229, 34,174,125,128,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 28,103, 56,238,203,114,117,226, +229,134, 46,140,147,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 26,216, 16, 33, 3, 3, 3, 3, 3, 3, 3, 67, 3, 67, 96, + 73,240,135,129, 7,224,105, 40, 50, 74,105, 52,128, 96, 47,116,115, 16, 66,202, 46,146, 87, 11, 64,244,110, 0,224, 2,224, 34, +132, 56, 88, 22, 50, 48,252,181,144,158,158, 62,153, 82, 58, 27, 53,111,129,122, 49, 55, 55,247, 45,150, 42, 12, 12, 13, 44,176, + 90,183,110,189,135,227,184,212, 64, 47, 32, 14,246, 92, 28,143,199,115,234,200,145, 35,106,151,186, 11,201,201,201, 99, 77, 38, +211,245, 60,207,247,245,158,191,173,186,186,250,251,179,103,207,126, 10,192,125, 49, 17,106,217,178,101,164,205,102,187,149, 16, + 50,193, 43, 16, 62,210,235,245,255,119,252,248,241,138,139, 76,163, 54, 73, 73, 73, 31,137,162,200, 23, 22, 22, 94, 15, 0,205, +154, 53,251,222,225,112,120,138,139,139, 39, 0, 56, 90, 79, 62, 78,163,209,100, 93,115,205, 53,253,182,108,217,242, 63, 0,239, + 52, 80, 94,234, 56,142, 59, 17,104,135, 36, 73,105, 23, 33,172, 52, 0,162,230,207,159, 31,187,116,233,210,238,103,207,158,237, + 10, 0,201,201,201,251, 39, 78,156,248, 3,165,244, 87, 0,229,132, 16, 39,171, 70,127,110,180,109,219,118, 15,199,113,169,245, +121,150,156,247, 21, 85,167, 14, 29, 58,212, 51, 24, 39,207,243,169, 97,158, 71, 87,231,187, 36, 73,191, 28, 60,120, 48,224, 35, + 35,218,181,107,183,131,231,249,150,225,194, 22, 40,156,193, 30,193,209,174, 93,187, 61, 60,207,167,214,151, 83,146,164, 95,242, +242,242, 50, 26,146,243, 82,135, 19, 0, 50, 51, 51,117,213,213,213, 31,153,205,230,110,213,213,213,147, 37, 73,122,118,227,198, +141,137, 28,199, 97,240,224,193,207,166,167,167, 31,215,233,116, 11,108, 54,219, 15,102,179,121,252,166, 77,155,236,172,198, 48, + 48,252,254, 70,247, 92, 85, 85, 21,149, 33, 73, 18,117,185, 92,212,110,183, 83,171,213, 74,171,171,171,105,101,101, 37,173,168, +168,160,229,229,229,180,180,180,148,118,238,220,217,255,161,139, 1,199,104, 83, 82, 82,186,180,111,223, 62,255,173,183,222,178, + 23, 22, 22, 82,167,211, 73, 93, 46, 23, 45, 44, 44,164,111,191,253,182,189,125,251,246,249, 41, 41, 41,193,198,119, 3,253,207, + 37, 39, 39, 15, 73, 78, 78, 94, 62,108,216, 48,199,250,245,235,169,221,110,167, 22,139,133,174, 94,189,154, 14, 24, 48,192,145, +156,156,188, 60, 57, 57,121, 8, 2, 15,139, 6,187, 86,247,150, 45, 91, 30, 61,117,234,148,103,203,150, 45,206,184,184,184, 47, +227,226,226,190, 44, 44, 44,244,156, 60,121, 82, 74, 77, 77, 61, 10,160,123, 61,194, 9, 0, 55, 79,155, 54,173,224,248,241,227, +150,204,204,204, 29, 62,255, 19,132,127,114,123,151, 64,206, 21,165, 52,145, 82,154,132,154,135, 83,214,217, 40,165, 73,222, 99, +162, 85,114,154,142, 29, 59,150,154,152,152,152,229,117,170,106,241, 17, 66, 28,137,137,137, 89,199,142, 29, 75,165,148,154,234, + 17,247,223, 3,198,217, 72,156, 87, 93,117, 85, 81,117,117, 53,165,148, 82,143,199, 67,157, 78, 39,181,217,108,212, 98,177,208, +170,170,170, 90,245, 92,222,202,202,202,104,151, 46, 93,206,133,224, 60,103,177, 88,106,181, 29, 14,135,131,218,108, 54,106,181, + 90,169,197, 98,161,213,213,213,181,182,170,170, 42,218,189,123,247,194, 16,156,103,229,112, 74,146, 68,221,110, 55,117, 58,157, +212,225,112, 80,187,221, 78,109, 54, 91,173, 77,254,175,119,239,222, 65,195,217,161, 67,135,115, 86,171, 85, 53,167,188,245,232, +209,227, 76, 67,113,202,255, 93,125,245,213, 69,161, 56,109, 54,219,197,132,179, 48, 84, 89, 74, 79, 79,255,252,248,241,227,212, +106,181,210, 33, 67,134,216, 31,121,228, 17,234,241,120,104,118,118, 54, 29, 59,118, 44,189,231,158,123,104,105,105, 41,157, 49, + 99, 6,237,209,163,199, 23,172, 30, 49,206, 70,230,188, 50, 28, 44,142,227, 96, 50,153,240,241,199, 31, 7,124,253,140,255,247, +180, 52,117, 38, 73, 98, 98, 98,207,212,212,212, 77, 43, 87,174, 52, 36, 36, 36, 40,255, 59,157, 78, 68, 70, 70,226,174,187,238, +210, 14, 30, 60,184,237,237,183,223,190,211,237,118,103,158, 59,119,110, 79, 40,190,164,164,164, 49,113,113,113,111, 77,157, 58, + 53,113,244,232,209,136,137,137,169,181,127,212,168, 81, 24, 57,114,164,230,151, 95,126, 25,247,233,167,159,142,251,223,255,254, + 87, 84, 85, 85,245, 96, 81, 81,209,231,161,120,141, 70,227,224,182,109,219,190,191,126,253,250,212,232,232,104, 52,109,218,148, +123,230,153,103,186,180,110,221,218,144,156,156,204,157, 57,115, 6,159,127,254,121,235,137, 19, 39,174, 58,121,242,228,100,187, +221,190, 94, 69,244,181,177,177,177,143,253,235, 95,255,138,171,172,172,116,239,221,187, 87,118,191,180, 58,157,238,217,107,175, +189,182,199,198,141, 27, 63, 1,176,248, 98,156, 43, 74,105, 5,126, 27,202,147,225,146,247,171,113,178, 40,165,218,189,123,247, +198,244,237,219,247, 11,187,221,222,227, 31,255,248,199,233, 87, 94,121, 69, 27, 25, 25, 25, 9,128,148,149,149, 93,152, 57,115, +166,231,141, 55,222,120,162, 83,167, 78,131,182,109,219,118, 51,165,148, 13, 25,254,201, 97, 52, 26,177,122,245,234,128,175,153, + 10, 84,231,163,163,163,195,190,141,192, 96, 48, 96,237,218,181,202,121,190,175,150, 10,244, 61, 58, 58, 26,148,210,144,164,122, +189, 30, 91,183,110, 85, 94, 3, 20,172, 93,146, 63,141, 70, 35, 8, 33, 92, 56,206, 77,155, 54,133,229,146, 63,205,102, 51, 80, + 51,196, 31, 54,156,225,226, 44,127, 55,153, 76, 97,211, 83,167,211, 41,156,190, 28,193,126,155, 76, 38,132,235,180, 25, 12,134, +110,137,137,137,200,201,201,193,243,207, 63,175,237,220,185, 51,242,243,243,193,113, 28, 38, 79,158,140, 78,157, 58,161,168,168, + 8,157, 58,117,194,214,173, 91,187,179,154,194,192,208, 0, 2, 75, 70,176, 6,214,255, 59, 16,240, 53, 24,181,150, 90,166,165, +165,233, 68, 81,252,108,245,234,213,134,184,184,223,222, 22,226,112, 56, 80, 89, 89,137,170,170, 42, 84, 86, 86,194,100, 50, 97, +193,130, 5,134, 9, 19, 38,124,166,211,233,218,157, 56,113,194, 30,140,147, 16, 50,111,223,190,125,137,110,183, 27, 90,173, 54, +168, 88,108,211,166, 13, 30,124,240, 65,244,235,215, 47,105,220,184,113,243, 0,124, 30,140, 19, 0,146,147,147,223,222,182,109, + 91,170, 86,171, 69,126,126, 62, 78,157, 58,133, 41, 83,166,164, 73,146,132,194,194, 66,228,231,231,227,204,153, 51,120,239,189, +247, 82, 39, 76,152,176,224,244,233,211,109, 67,197,221,139,123, 30,121,228,145,182, 49, 49, 49,220, 43,175,188, 82, 94, 85, 85, +245,158,247,255, 25,243,231,207, 31,159,153,153, 25,255,143,127,252,131,110,219,182,237, 99,212,188, 46, 37,104,122,250,206,185, +242, 14,231, 1,128,135, 82,122,216,239,156, 14, 62,251, 65, 41, 77, 4, 96, 39,132,148, 7,224, 36, 0, 34,135, 15, 31, 62,205, +110,183,247,216,178,101,203,209,126,253,250,165, 1, 56, 75, 41, 61, 15, 0, 49, 49, 49,166,215, 95,127, 61,113,212,168, 81, 63, + 13, 30, 60,184,199,240,225,195,167,157, 63,127,126, 54,165,180,132, 16, 66, 67,196,253,247,130,113, 54, 18,167,119, 40, 9,130, + 32, 96,196,136, 17, 32,132, 4,124,223,230,142, 29, 59, 48,104,208, 32,136,162,136,187,239,190, 91, 53,231,176, 97,195,224,118, +187,235,240,249, 11, 16,249, 29,157,161,226, 78, 41,173,245,142,208, 64,226,194,119, 11,192, 87,135, 83,146,164,128, 92,193, 68, +150,252,178,122, 53,113, 87, 43, 46,195,133,211,151, 83, 20, 69,100,100,100, 96,239,222,189, 33,197, 86,184,112, 2, 64,117,117, +245,157, 55,222,120,227,154, 41, 83,166,232, 1,160,164,164,164,214,139,232,143, 28, 57, 2,187,221,142,101,203,150,193,110,183, +223,203,234, 17,227,108,100,206, 80,157,127, 17,192,213, 0,226, 81, 51,127,185, 18, 64,180,247, 94,169, 5, 80, 10,192,224,221, +236, 0,170, 0, 52,241,158, 94,226,237,108,248,190,166,236,188,239, 75,161, 41,165,189,188,220,242, 43,187,226,125,142,149,175, +225,255,219,255,179, 22,183, 92,171,229,225,159, 76,223, 10, 45,191,132, 53,156,184,146, 27, 71, 21, 9,244,192,140, 25, 51, 18, +125,197,149,221,110, 71, 69, 69, 5, 42, 43, 43,149,207,252,252,124,104,181, 90,140, 29, 59, 54,145, 82,250, 64, 24, 90, 13,207, +243,216,187,119, 47, 86,174, 92,137,227,199,143,215, 57,224,216,177, 99,120,253,245,215,241,234,171,175,162,162,162, 2, 0, 52, +193,200,186,117,235,246,252,248,241,227,119, 14, 24, 48, 64, 39, 8, 2,246,237,219,135,118,237,218, 97,251,246,237, 56,121,242, + 36, 46, 92,184,128, 35, 71,142,160, 75,151, 46, 56,122,244, 40, 42, 42, 42,208,185,115,103, 93,143, 30, 61,182,164,165,165, 61, + 31, 42,156, 41, 41, 41, 79,254,235, 95,255,210,157, 61,123, 86, 90,178,100,201, 54, 0,219, 1, 76,121,234,169,167, 38, 13, 27, + 54, 44,254,240,225,195, 21,187,119,239,222, 19, 68, 92, 5,114,174, 78,114, 28,119,130, 82, 90, 65, 41,181,162,102, 2,122,173, +155,145,219,237,182, 91,173,214,242,210,210,210, 18,142,227, 78,112, 28,151, 15, 64, 23,140,115,226,196,137,173, 75, 74, 74,238, +255,247,191,255,125,188, 95,191,126,105,148,210, 35,148,210, 82,111,129,181,187,221,238,210,178,178,178,159,250,246,237,155, 60, +126,252,248,163, 37, 37, 37,247, 79,156, 56,177,117, 8, 78,134,203, 31,212,227,241, 64, 20, 69,108,220,184, 17, 91,183,110,197, +214,173, 91,177,109,219, 54,108,223,190, 29, 59,118,236,192,142, 29, 59, 32, 8, 2,182,111,223,142,237,219,183,227,193, 7, 31, + 12, 91,231, 61, 30, 15, 4, 65,192,166, 77,155,176,107,215, 46,101,219,189,123, 55,118,237,218, 5,131,193,160, 70, 12,249,118, +166, 20,206, 64,219,219,111,191,173,136, 67,185,109,226, 56, 46,164, 43,230, 47, 92,252, 5, 75, 90,139, 22,117,246,133, 11,167, + 44,218, 4, 65,192,127,255,251, 95,156, 62,125, 26,111,190,249, 38,142, 29, 59,134,151, 95,126, 25,121,121,121,152, 53,107, 22, +118,239,222,141, 25, 51,102, 96,203,150, 45,242,203,223,105, 56, 78, 89, 92, 57,157, 78, 37, 60, 71,142, 28,193,156, 57,115,176, +111,223, 62, 60,251,236,179,216,177, 99, 7, 30,123,236, 49,240,124, 72,147, 13,233,233,233,147, 9, 33,159,182,111,223, 94, 55, +112,224, 64, 8,130,128, 57,115,230, 72,207, 62,251,108,241, 83, 79, 61, 85,156,157,157, 77, 91,183,110, 13,135,195,129,136,136, + 8, 80, 74, 23,167,167,167, 63,192,170, 11, 67, 99,182, 69,254, 90,196, 7,215,205,152, 49, 99, 32, 33, 36, 59, 35, 35, 99, 34, +128,104, 66, 72, 54, 0,173,247, 51,110,198,140, 25,189, 9, 33,217, 51,102,204,232, 9,160, 9, 33, 36,219,251,251,122, 0,113, +242,111,239,241,241,126,226, 45,222,231,255,120,191, 99,181,129,126,251,127,250,115,251, 58, 88,196, 27, 49,226,219, 64,214, 71, + 96,133,107,112,205,102,243,200,225,195,135,107,124,197,149,175,115, 37,127, 86, 86, 86,226,167,159,126, 66,151, 46, 93, 52,102, +179,121, 36,128,255,132,181,226, 4, 1, 77,155, 54, 69, 73, 73, 9, 14, 28, 56,128,180,180, 52,184, 92, 46,124,247,221,119, 40, + 43, 43,131, 70,163,129, 70,163,129,195, 17, 90,187,116,232,208, 97,196,210,165, 75,123,254,239,127,255,187, 32, 8, 2,142, 28, + 57,130,143, 62,250, 8,148, 82, 52,105,210, 4, 22,139, 5,197,197,197,152, 55,111, 30,156, 78, 39,204,102, 51, 82, 82, 82,244, + 15, 60,240, 64,191,153, 51,103,138, 39, 78,156, 8, 38,178,174, 25, 51,102, 76,100, 68, 68, 4, 30,126,248, 97,201,233,116,190, + 10,224,218, 49, 99,198, 60,249,224,131, 15,198, 22, 20, 20, 56,238,185,231,158, 61, 78,167,115,158,108, 30,250, 11,166, 0,130, + 53,168,115,229,118,187,229, 52, 61, 94, 89, 89,137,132,132,132,230,148, 82, 77,152, 60,210,108,223,190, 61, 3, 0,255,194, 11, + 47,232, 41,165,231,124,195,224,116, 58,101, 78,119,121,121,121,241, 99,143, 61,230, 94,190,124, 57,239, 61,231, 16, 0, 27,107, + 31,254,124,144,133,139, 40,138, 24, 49, 98, 68, 45, 65,177,121,243,102, 12, 31, 62, 92,169,239, 26,141, 70, 57, 46, 28,167,175, + 43, 38, 59, 79, 50,239,247,223,127, 95,199,121, 81,217, 73, 83, 28,150, 64,194,199, 95,116,201, 29, 69, 53, 98, 40,144,200,146, +219, 22,127,103, 72, 77, 56, 69, 81,196,131, 15, 62, 8, 65, 16,240,216, 99,143, 65, 20, 69, 92,125,245,213, 16, 4, 1,125,250, +244,129, 32, 8,184,254,250,235, 85,119, 80,229,112,238,216,177, 3,233,233,233, 74,120,174,190,250,106,244,234,213, 11,130, 32, +160,127,255,254, 16, 4, 1, 67,135, 14, 13,203, 73, 41,125,118,227,198,141,137,102,179, 25, 63,253,244, 19,120,158, 7, 33,164, +116,239,222,189,137, 0,112,195, 13, 55,148,216,108,182, 56,155,205,134, 65,131, 6, 33, 35, 35, 35,126,249,242,229,207, 0, 96, + 43, 11, 25, 26,181, 73,242,215, 34,178, 1,144,149,149, 53,135, 82, 58, 42,216,137,242,126, 66, 72,246,220,185,115, 71,121,203, +121,157,223,178,203,228, 39,222, 58,251, 58, 80,242,121,190,215, 11,117,109,191,227,207,251, 11, 44, 10, 96, 64,160, 70, 55,144, + 85,238,255, 93, 77, 3, 97,179,217,174,150,221, 43,155,205, 86, 75, 80, 85, 85, 85,213, 18, 90, 14,135, 3,173, 90,181,130,205, +102,187,186,190, 55,139,228,228,100, 56,157, 78, 44, 90,180, 72, 17, 86,190, 34, 33, 20, 14, 30, 60,120,124,231,206,157, 61,210, +211,211, 99,190,248,226,139,243,131, 7, 15,142, 31, 54,108, 24,244,122, 61,108, 54, 27,220,110, 55,174,185,230, 26,116,232,208, + 1,197,197,197,248,230,155,111, 74,218,181,107,215, 36, 39, 39, 71, 42, 42, 42, 58, 17,130,122,208,160, 65,131, 64, 8,193, 55, +223,124,243, 43,128, 92,189, 94,255,249,156, 57,115,162,237,118,187, 52,105,210,164,194, 95,127,253,245, 49, 0, 46,173, 86,251, +159,235,174,187,238,154,245,235,215,127, 34, 73, 82,189, 27, 51,187,221, 94, 43,109, 43, 43, 43, 97, 52, 26,213, 60, 18, 66, 44, + 43, 43,235, 10, 0, 70,163, 49, 22, 62, 43, 36,173, 86,171,146, 71,222,252,177,197,198,198,154, 0,192,123,142,200,218,133, 63, + 47,228,155,247,198,141, 27,107,213,111,217,129,242,175,243, 90,173, 22,171, 87,175, 86,197,233, 43,166, 84, 12,231,133,116,155, +100,129, 37, 8, 2,222,123,175,102,132,253,225,135, 31, 86,206,247,191,134,154,246, 66, 22, 67,130, 32,160,195,115, 18, 0, 39, + 78,189,166,135, 40,214, 20,105,255, 48,123, 27, 83, 85,174,216,155,111,190,137, 81,163, 70, 33, 59, 59, 59,228,231,200,145, 35, + 85,133, 83, 16, 4,232,116,186, 90,194,111,223,190,125, 1,121, 23, 46, 92, 24,118, 78,155, 36, 73,248,234,171,175,192,113, 92, + 45,199,235,233,167,159,254,151,201,100, 50,111,218,180, 9,231,206,157, 67,117,117, 53,170,170,170, 16, 19, 19, 19, 61,104,208, +160,125, 69, 69, 69, 5,135, 14, 29,186,153,213, 28,134, 70,114,177, 6, 4,248,223, 58,125,250,244, 39, 9, 33,217,211,167, 79, +127,114,238,220,185,121,222,186,145,237, 87, 87,178,195,212,165,108,175, 24,218,237,173,203,218,130, 51, 63, 0, 0, 32, 0, 73, + 68, 65, 84,189,252,196,219,121, 66,200,110, 74,233, 13,193,206, 5,224,240, 19, 84,181,134, 8,101,238,144, 14,150,255,220,132, + 80,223,189, 22,119,184, 6, 87, 32,132,212, 17, 0,129, 28, 44,151,203,133,210,210, 82, 72,146,212,160,207,234, 10, 39,176, 14, + 28, 56,112,215,228,201,147,207, 68, 69, 69,117, 43, 45, 45, 61,171,211,233,250,111,222,188,185,153,203,229, 66,100,100, 36, 34, + 35, 35,241,245,215, 95, 35, 42, 42, 10,255,254,247,191, 79, 90,173,214,237, 38,147, 41,209,106,181,254, 88, 84, 84,244,116, 80, +229, 34,138,131,250,247,239,143,220,220, 92,148,149,149,109, 0,208,109,194,132, 9, 67,155, 53,107, 70,102,207,158,109, 59,122, +244,232, 91, 0,206,155, 76,166,255, 46, 93,186, 52,179, 71,143, 30,230, 73,147, 38, 97,211,166, 77,239,215,199, 25,178, 88, 44, +181,132,149,156,166, 17, 17, 17,170,158,185,229, 77,111, 74, 8,161,114,207,223, 87, 88,249, 8, 96,202,243,188, 4,128, 54,116, + 30, 49, 92,122, 7, 75,174,235,127,251,219,223,234, 76,110,215,104, 52, 88,179,102, 13,110,186,233, 38,165,195,146,158,158,174, +218,109, 26, 61,122,180, 34, 8,214,172, 89, 19, 84, 96,133, 27,210,242,119,155, 30,122,232, 33,136,162,136,183,222,122, 11, 83, +167, 78, 5,207,243,120,237,181,215,192,113, 28,158,121,230,153,122,139, 75, 81, 20,113,252,165,154,207,212, 71, 42, 80,250, 78, + 34, 0, 32, 34, 50,178, 38, 62,146,164,254, 14,225,141,123, 56,231,202, 87, 88,133, 27, 34,244,117, 1,243,243,243,149,239,125, +250,244,169,229, 92, 9,130, 16, 86,176,121,175, 55,107,224,192,129,179, 83, 83, 83, 19,166, 76,153, 66, 4, 65, 64,207,158, 61, +155, 12, 30, 60,184, 92, 16, 4,253,163,143, 62, 26,104, 42,133, 8,160, 91,199,142, 29, 77,172,230, 48, 92, 98, 7,203, 62,119, +238,220,188,185,115,231, 6,116,168,252,157,164, 80, 78,147, 44,172,188, 66, 40, 94, 22,109,168,153,159,188, 59,220,185,240, 14, + 9, 6,114,185,124,225,239, 96,205,244,111,120,212, 8, 44, 53,243, 39,188,174,200,254,146,146,146, 62, 58,157, 14, 21, 21, 21, +117,110,218,190,162,128,231,121, 20, 23, 23,195,104, 52,238,111,200,156, 11, 55, 68, 8,192,246,243,207, 63, 79,243,249,221,107, +236,216,177,203, 63,249,228,147, 86,235,214,173, 67, 78, 78, 14,154, 52,105,130, 57,115,230,252, 82, 80, 80, 48, 30,192,238,226, +226,226,176,215,109,221,186,117, 39,179,217,140,109,219,182, 1,192, 22, 0,119,222,119,223,125,196,233,116, 98,193,130, 5, 22, + 0,235,162,162,162, 62, 95,177, 98, 69,183,110,221,186,233,214,173, 91, 87,153,147,147,179, 81,165,184,242, 80, 74, 3, 10,171, +202,202, 74, 84, 87, 87,195,108, 54,171, 17, 88,238,200,200,200, 3,149,149,149,183, 90,173,214, 10,157, 78, 23, 81, 81, 81, 97, +247,117, 24,171,170,170, 80, 93, 93, 13, 65, 16,196,252,252,252, 51, 0, 90, 71, 70, 70, 30,192, 69, 62,183,140,225,143, 7,199, +113, 84, 22, 25,235,214,173, 11, 88,215, 69, 81,196,119,223,125, 87,171,190,127,243,205, 55, 97, 69,155, 32, 8,202, 74,194,112, + 14,150, 79,227, 26,218,102, 21, 69,240, 60,143,119,222,121, 7,148, 82,197,185,226, 56, 14,211,167, 79,135, 78,167,195,139, 47, +190,136,233,211,167,171,114,177,124, 93,177,150, 79, 88,127,107, 28,189,231, 58, 29,142, 26,151,158,227,124, 69,150, 42,167, 45, +220, 4,247,250,136, 96, 95,167, 77,167,211, 5,157,220, 30,224,102, 21, 16,185,185,185, 31,116,239,222,253,104,124,124,252,218, +140,140, 12,221,158, 61,123,240,224,131, 15, 18,187,221, 30,185,110,221, 58,229,186,129,210,171,186,186, 90,207,106, 14, 67, 35, + 58, 88, 51, 3,252, 31, 35, 11, 39,175, 24, 82, 91,119,178,125,143,151, 57,252, 69,145,215, 17,219, 28,142, 43,208,185,193, 32, + 4,171,132,254,141, 68, 56,161,165,166,247,105,181, 90,215,111,220,184,177,215, 77, 55,221, 36,132, 26, 30,172,170,170, 66, 98, + 98, 34,142, 29, 59,230,182, 90,173, 97, 31,127,224,241,168,127, 32,122, 56, 7, 43, 0,118,151,148,148,184,157, 78, 39,218,182, +109,139,148,148, 20, 88,173, 86,188,254,250,235,110, 0,187, 85,114,104, 76, 38, 19, 15, 0,229,229,229, 64,205,106,135,118,237, +218,181, 67,110,110, 46, 46, 92,184,176, 10,192,160,153, 51,103,118,191,246,218,107, 53,159,124,242,137,229,222,123,239, 93,229, +114,185,102,171,236,129, 59,220,110,119, 75,142,227,156,101,101,101,167,125,133, 85, 98, 98, 98,140,217,108,230,138,139,139, 93, +106,146,167,107,215,174,187, 78,157, 58,133, 23, 94,120,225,252,156, 57,115,218, 85, 86, 86, 94, 40, 47, 47,119,203,194,170,162, +162, 2, 86,171,149,139,143,143,215, 45, 92,184,208, 8, 0, 93,187,118,221, 5,128, 61,112,244,207,220,162,249, 45,104, 9,244, +168, 6,181,147,209,253,133,203,141, 55,222, 88,199, 17,147,183, 21, 43, 86,212,154,215, 20,110,232, 77,230,124,251,237,183,241, +240,195, 15, 67,167,211, 97,254,252,249,181,230, 96, 5,233, 17, 7,229,148, 69, 91,203, 39,172, 40,122, 35, 22,162, 40, 34,238, +222,115,181,134, 8, 3,196, 77,149, 16,156, 51,103, 78,131, 12, 17,250,138, 62,249,145, 56,139, 22, 45,194,216,177, 99,177,101, +203,150,139, 30, 34,108,217,178,229,210,215, 95,127, 93,119,232,208, 33, 84, 84, 84,224,252,249,243,176,217,108, 40, 44, 44, 84, +242, 48,136, 83,110, 96,181,134,161,145,220,171, 96, 56,239, 55,127,138,248, 14,215,133,248,244, 63, 30, 62,255,249,242,158, 39, +132,184, 2, 92,239,124, 0, 81,229,127, 13,223, 99,206, 7,114,176, 2,221,184, 85, 63,166,193, 59, 65, 50,156, 16,152,247,220, +115,207,221,223,175, 95,191,216,200,200, 72,156, 57,115, 38,160,131, 21, 25, 25, 9,167,211,137,141, 27, 55, 86, 72,146, 52, 47, + 76,134,184, 92, 46, 23, 18, 18, 18, 80, 82, 82, 2, 41,136,141,207,113, 28, 12, 6, 3,170,170,170,128, 48,147,199, 3,221, 40, + 92, 46, 23,156, 78, 39,156, 78, 39, 92, 46, 87,125, 11,141,193,251, 76, 26, 84, 87, 87, 3, 64,117,211,166, 77, 91,235,245,122, +121,213, 99, 62,128,129,195,134, 13, 19, 75, 75, 75,233, 61,247,220,179,131, 82,250, 96, 24, 87,200,177,113,227,198, 22, 0, 96, + 48, 24,242, 1,160,176,176,208, 85, 86, 86,134,170,170, 42,197, 33, 52, 24, 12,184,249,230,155,147, 40,165,216,184,113, 99, 11, +141, 70, 67, 67,136, 33,123,118,118,246,193,168,168,168,229, 89, 89, 89,227,111,184,225,134,188,174, 93,187,182,172,170,170, 42, +182, 88, 44, 86,171,213, 74, 5, 65,208,196,197,197,233,214,174, 93,123,116,199,142, 29, 67, 34, 35, 35,151,103,103,103, 31, 68, +205, 42, 67,134, 63, 99,139,230, 55,183, 41,144,168,170,207, 10, 58, 95,225, 34, 8, 2,190,251,238,187,144, 46,142, 90, 78, 95, +145, 49,109,218, 52,188,241,198, 27,117, 28,172,217,179,107,250, 36, 79, 61,245, 84,189, 28, 34, 65, 16, 80,244, 70, 44,146, 30, +250,181,142,131, 69,188,225,171,207, 16,161,124,254,172, 89,179, 32,138,162, 50,132, 55,100,200,144, 90, 67,131,106,133,149, 47, +103,113,113, 49, 4, 65, 64,108,108, 44,198,143, 31,143,161, 67,135,214,225, 83,203, 91, 88, 88,248,195,171,175,190,218, 60, 37, + 37, 5,159,124,242,137,195,100, 50,105, 7, 14, 28, 72,203,203,203, 73, 40, 7,203,106,181, 50, 7,139,225, 82,183, 83,187, 47, + 37,111, 67, 92, 79, 8,215,232,254,206,199, 52,116,129,207,179, 50, 78,156, 56, 81,158,148,148, 52, 97,220,184,113, 95,188,243, +206, 59,134,214,173, 91,227,200,145, 35,184,112,225, 2,156, 78, 39, 52, 26, 13,154, 54,109,138,170,170, 42,124,246,217,103, 22, +139,197, 50,161,168,168,168, 60, 20, 39, 33,228,169, 17, 35, 70, 44,124,250,233,167,245,157, 58,117,194,133, 11, 23, 80, 85, 85, +165,244,188, 8, 33,136,140,140,132,209,104,196,129, 3, 7,176, 99,199, 14, 43, 33,228,169, 80,156,129,132,166, 44,172,100,161, + 21,110,101,146, 31,167,201,104, 52,202, 61, 63, 0,112, 55,111,222, 60, 17,128, 44,176, 78,180,106,213,234,233, 54,109,218,144, +165, 75,151, 82, 74,233,186, 32,226, 74,225, 36,132, 92,160,148,150, 1, 72,116, 56, 28, 26, 0,168,168,168,112,198,197,197, 37, +232,116, 58, 73,167,211, 73,122,189, 94, 58,123,246,172,219,237,118,107, 0, 32, 51, 51,211, 1,224,156,223, 92, 15, 95, 78,137, + 82, 90,185, 96,193,130,231,239,188,243,206, 62,125,251,246,237,124,207, 61,247, 28,186,247,222,123,145,146,146, 18, 83, 85, 85, +101,203,207,207, 47,123,231,157,119,108,187,118,237, 26, 34,138,226,137, 5, 11, 22, 60, 15,160,146, 16, 34,169, 77,207,139, 4, +227,108, 36, 78,185, 60, 4, 18, 86,190,191, 85, 8,161, 90,225,148, 69,219,173,183,222,170,172, 62,244,119,174,234,203, 9, 64, + 89, 65,248,248,227,143,215, 10,223,211, 79, 63,173,182, 87,236, 27,119,197,109, 18, 4, 1,229,139, 82,106,137,191,122,136,170, + 58,156,130, 32,224,217,103,159, 85,237, 96, 5,152,131, 21, 52,156,153,153,153,168,174,174,134, 40,138, 88,179,102, 77, 80, 7, + 43, 92,122, 26, 12,134,241,171, 86,173,250, 72,167,211,117,117, 56, 28,119,151,148,148, 44,177, 88, 44,205,203,202,202, 66, 58, + 88, 54,155, 77,199,234, 17,227,196, 37,126, 22,214,159, 13, 33,187,120,110,183, 27,205,154, 53,171,245,110, 43,121, 50, 59,207, +243,202,202, 19, 53, 43, 8,101, 20, 21, 21,173, 1, 48,230,230,155,111, 94,118,231,157,119, 70,116,232,208, 65, 76, 75, 75,131, +213,106, 69, 65, 65, 1, 10, 10, 10,220, 27, 54,108,168,176, 88, 44,183,123,143, 13,137, 51,103,206,252,207,237,118,127, 55,113, +226,196,103,187,119,239, 62,101,234,212,169,124,171, 86,173, 80, 94, 94,142,152,152, 24,196,199,199,163,160,160, 0,159,125,246, +153,167,172,172,108,161,199,227,153, 85, 92, 92,124,190, 62,137,228,118,187,121,151,203,133,113,227,198, 65,146, 36,204,159, 63, + 31,110,183,155,175, 7,133,211,233,116, 82, 0,164,164,164, 4, 0, 44,178,224,250,249,231,159, 1,224,100,139, 22, 45,204, 0, +176,126,253,122,130,154,231, 99,169, 81,222,148, 82,170, 56, 89, 29, 58,116, 40,240,111, 20,101,231, 74,118,189,194, 77,164, 37, +132,216, 40,165,231,237,118,251,176, 71, 30,121,228,217, 69,139, 22,141, 95,180,104, 81,157,227, 34, 35, 35,151,191,246,218,107, +179,198,143, 31,127,158, 16,194, 30,207,240, 87,104, 12,252,220,170,250, 78, 1, 8,198,249,229,151, 95,214,231,225,154, 33, 93, + 49, 66, 72,192, 21,137,161,218, 32, 21,157,161,160, 15, 20,253, 61,174,160, 32, 8,120,229,149, 87, 20,231,202,119,242,249,197, + 56, 88, 50,103,108,108,108, 77,175,205,100,130, 36, 73, 24, 57,114,228, 69,243,122,223, 45, 56, 70,254,157,158,158, 62,235,227, +143, 63,158, 77, 41,141, 3, 32,248,166,129,154,116,100, 96, 96, 80, 33,176, 60, 30,207,169, 1, 3, 6,192,183,247, 20,238,101, +173,110,183,251,148, 74,145,245, 93,203,150, 45, 91, 45, 90,180,232, 97,147,201, 52,216,102,179,117, 5, 0,189, 94,191,191,186, +186,122, 29,199,113,175, 23, 21, 21,169,126, 57,179, 87, 48, 61,192,113,220,252,137, 19, 39,206,206,200,200,184,229,158,123,238, + 33,130, 32,224,211, 79, 63,165,167, 79,159, 94,193,113,220, 83,103,207,158, 61,118, 49,137,100, 52, 26,127, 90,177, 98, 69,235, + 47,191,252, 18, 46,151, 11, 11, 23, 46,132, 78,167,251,169, 30, 20,231, 55,108,216,176,172,111,223,190,227,119,236,216,177, 28, +192,129, 45, 91,182,124,116,221,117,215, 77,216,190,125,251,255, 1, 56,180,113,227,198,143, 50, 50, 50, 38,236,218,181,235,115, + 0, 63,214,163,209, 85,156, 44,183, 59,240,136, 98, 16,231, 42, 20,103, 5,165,212, 57,121,242,228, 71,110,185,229,150, 69,185, +185,185,215,200,143,111,136,142,142,222,159,158,158,158,179, 98,197,138, 35, 94,231,138,137,171, 63, 57,228, 9,233, 49, 49, 49, +224, 56, 78,217,228,167,121,215, 87, 8,201,156,148, 82,196,196,196, 4,236,152,133,224, 12,169,106, 40,165, 48,155,205, 10,167, +202,213,203, 97,109, 40,179,217, 92, 43,140, 42, 64,195,197,221, 63,156,106,210, 44, 28,167,201,100,130,211,233, 84,205, 9, 21, +139, 6,124,145,155,155,251, 1,128, 15,218,180,105,243, 51,128, 54, 76, 84, 49, 48, 52,130,192, 58,114,228, 72,207,198,188,240, +241,227,199, 43, 0,204,242,110, 13,130,211,167, 79, 31, 3,112,235,214,173, 91,255,179,125,251,246,103,188,141,235, 11,225,222, +103, 24, 14, 63,254,248,227, 77,162, 40, 46, 88,188,120,113, 6,165, 20, 81, 81, 81,219,143, 30, 61,122, 95,125, 56, 60, 30,207, +148, 29, 59,118, 76,133,119, 85,160,195,225,152,178,117,235,214, 71, 1, 84,203,251,119,238,220,169,252,174,231,205,140, 82, 74, + 29,148,210,228, 32,135, 56,212,138, 43, 63, 39,203,177, 98,197,138, 42, 0,251,240,219,115,174, 92,222,205,238, 55, 44,200,240, + 39,133,219,237, 62, 61, 96,192, 0, 33, 92, 7, 42,192,121,167, 66,117,208,250,247,239,143,139,224, 60, 29, 34,168, 39, 50, 50, + 50, 56,181, 92, 50, 92, 46, 87,113, 8,241,117,170, 79,159, 62, 1,195, 25, 38,205, 66,198,189, 79,159, 62,245, 10,163, 55, 44, +167, 27,154, 51, 76,122, 6,133,213,106,189, 16, 31, 31, 95,101,179,217, 68,187,221, 46,250, 59,246, 6,131,225,188,213,106,101, +149,135,129,225, 15, 4,123,211, 56,227,100,156,140,147,113, 50, 78,198,201, 56,175, 56,112, 44, 9, 24, 24, 24, 24, 24, 24, 24, + 24, 26, 22, 36,132, 10,173,207,234,128,139, 81,178, 7, 24, 39,227,100,156,140,147,113, 50, 78,198,121,197,113,134,227,102,171, + 19, 27, 73,120, 49, 78,198,201, 56, 25, 39,227,100,156,140,243,202,227,252, 75,129, 13, 17, 50, 48, 48, 48, 48, 48, 48, 48, 48, +129,197,192,192,192,192,192,192,192,192, 4, 22, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,191, 3, + 36, 37, 37, 37, 51, 57, 57,185,207,149,154, 0, 2, 43, 3, 12, 12, 12, 12, 12, 12, 12, 13,129,102,205,154, 69,123, 60,158, 59, + 1,220,215,186,117,235,214, 0, 64, 8, 57, 64, 41,125,221, 96, 48,124,116,236,216, 49,199, 21,163, 48, 89,113, 96, 96, 96, 96, + 96, 96, 96,248, 61, 72, 78, 78,238, 14,224, 62,131,193,112,251, 53,215, 92,163, 29, 56,112, 32, 98, 98, 98,224,118,187,113,246, +236, 89,108,216,176, 1,251,246,237,251,213,229,114, 45,112,185, 92, 11, 74, 74, 74,206, 93, 73, 2,107,147,247, 51,147, 21, 21, + 6, 6, 6, 6, 6, 6, 6, 53, 72, 74, 74,122,117,248,240,225,143,196,196,196,160,109,219,182, 72, 74, 74,130,221,110,135,213, +106, 5,165, 20,130, 32,128, 82,138,202,202, 74,236,217,179, 7, 57, 57, 57,238,138,138,138,229,132,144,215,207,158, 61,251,131, + 31,221, 95, 70,139,200, 2,139, 2, 24,224, 23, 57, 6, 6, 6, 6, 6, 6, 6,134,144, 72, 78, 78, 62,183,126,253,250, 4,143, +199,131,146,146, 18,216,237,118, 88, 44, 22, 69, 96,241, 60, 15, 74, 41,220,110, 55, 0, 64,146, 36, 28, 58,116, 8, 59,118,236, + 64, 97, 97,225,107, 69, 69, 69,211,254,138, 90,132,243, 83,141, 76, 92, 49, 48, 48, 48, 48, 48, 48,212, 11,118,187, 29, 75,151, + 46, 69, 73, 73, 9,154, 53,107,134,148,148, 20, 68, 69, 69, 65,175,215, 3,128, 34,174, 0,128,227, 56,116,238,220, 25, 19, 38, + 76, 0, 33,100,130, 31,213, 95, 70,139,176, 73,238, 12, 12, 12, 12, 12, 12, 12,191, 7, 46,167,211,137,158, 61,123,226,248,241, +227,200,205,205, 69,143, 30, 61,208,177, 99, 71,148,148,148,224,204,153, 51,181, 14,222,181,107, 23,246,238,221,139,235,174,187, +238, 47,157, 40,188,247,147, 0,120, 30,192,157, 0, 22,179,178,194,192,192,192,192,192,192,160, 6, 17, 17, 17,191,110,218,180, +105,104, 90, 90,154,152,158,158, 14,157, 78,135,147, 39, 79, 34, 39, 39, 7,102,179, 25, 93,187,118,133,205,102,195,230,205,155, +177,122,245,106,148,149,149,161, 69,139, 22,192,187,239,225,231,215,204,229, 85, 85, 85,243,254,138, 90,196,119,146,123,166,247, +115, 19, 43, 46, 12, 12, 12, 12, 12, 12, 12,106,145,156,156, 28, 71, 8,121,170,105,211,166,247,223,126,251,237, 98,155, 54,109, +112,234,212, 41,148,148,148,224,194,133, 11,216,185,115, 39, 0, 32, 37, 37, 5, 41, 41, 41, 40, 40, 40,192,129, 3, 7,172,118, +187,253,222, 51,103,206,252,239,175,168, 69,216, 99, 26, 24, 24, 24, 24, 24, 24, 24, 26, 74,104, 53, 3, 48,179, 77,155, 54,147, +198,142, 29,203, 53,109,218, 20,167, 79,159,198,134, 13, 27,208,186,117,107, 20, 23, 23, 99,207,158, 61,158,138,138,138,133, 30, +143,103, 86,113,113,241,121,150,106, 23, 7,246,166,113,198,201, 56, 25, 39,227,100,156,140,243, 10,227, 76, 76, 76,236,144,156, +156,188,114,232,208,161,244,157,119,222,161, 15, 60,240, 0,237,209,163,135,148,156,156,252,105, 74, 74, 74,235, 43, 65, 0,177, + 73,238, 12, 12, 12, 12, 12, 12, 12, 13,138,115,231,206, 29, 6,112, 19, 33,228,154,188,188,188, 39, 1, 64,146,164, 23,206,157, + 59,183,231, 74, 73, 3, 38,176, 24, 24, 24, 24, 24, 24, 24, 26, 5,103,206,156,201, 1,240,183, 43, 49,238,236,101,207, 12, 12, + 12, 12, 12, 12, 12, 12, 76, 96, 49, 48, 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192,192,112, 69,129, 32,248, 74, +128, 3,245,224,185,152, 21, 10, 7, 24, 39,227,100,156,140,147,113, 50, 78,198,121,197,113,134,227, 62,128, 43, 8, 23,251,188, + 44,182,132,149,113, 50, 78,198,201, 56,255, 60,156,164,129, 56,137,119,227,188, 27,169, 39,247,165, 10,231,159, 37,238, 87, 10, +231, 95, 10,225, 86, 17,250, 38,146,228,221,104, 3, 9, 54,174, 1,249, 24, 26, 71, 84,203, 21,131,178,124, 98, 96,248, 75,163, + 33,219,122,185,237,224,125, 56, 61,222, 13,191,179, 45,105,140,123,210,229, 30,247, 43,153,243, 47, 41,176, 8, 0, 18, 31, 31, +191, 38, 33, 33,225,250,146,146, 18, 9, 0, 8, 33,224, 56, 14, 28,199, 65, 16, 4,107, 65, 65, 65,100,125, 47,152,144,144,240, +126,124,124,252,157,165,165,165,146,204, 69, 8, 1,207,243,224,121,222,122,236,216,177,200, 63, 58, 81,122,244,232,113,193,225, +112,152,253,255,215,106,181,182,189,123,247, 70, 92, 9,229,162, 93,187,118,183, 25,141, 70, 67,144,253,244,135, 31,126, 88,164, +150,172, 69,139, 22,187, 12, 6, 67,180, 32, 8,224,121, 30,130, 32,160,186,186,186,236,240,225,195,189,189,251,183, 25, 12,134, + 56,158,231,229,178, 5,155,205, 86,122,232,208,161,190,236,190, 87, 23,153,153,153, 2,234,255,136, 21,247,166, 77,155,220,151, + 42,140,148, 82,206,145, 27,209,134,184,173,221, 8, 71,163,168, 68,202,169, 96,248, 81,155, 94,121, 84, 85, 75, 77,136,244, 7, + 39,115,115, 0,110, 0,103,234, 29,247, 0, 61,118, 1, 24,238, 1,198,121,127,218, 56,160,148, 0,249,113,192,103,231, 0,171, + 95,227,123, 41,111, 68, 4, 0, 73, 77, 77,125, 61, 49, 49,241,174,202,202, 74, 11,207,243, 32,132, 80, 66,136,156, 23,190,249, + 2, 73,146, 78, 29, 60,120,176,103,152,155,172,216,188,121,243,215,226,227,227,239,176, 88, 44, 22, 66,136,194, 41,111,190,220, + 30,143,231, 84, 94, 94, 94,207, 75, 24,206, 63, 36,238,190, 92,242,111, 73,146, 66,197, 93,225, 76, 77, 77,125, 45, 49, 49,241, +142,170,170, 42,139,247,190,249,187,195,121,153,115,254,101, 5, 22,151,144,144,176,170,119,239,222, 3,190,252,242, 75,238,240, +225,195, 92,135, 14, 29,224,241,120, 32, 73, 18, 40,165, 72, 79, 79, 55,214,247, 98,137,137,137, 75,122,246,236, 57,110,245,234, +213,220,170, 85,171,184, 94,189,122,129, 16, 2,143,199, 3,143,199,131, 65,131, 6, 25,126,103,124,204,130, 32, 76,213,106,181, +153,110,183,187, 35, 0,136,162,120,200,110,183,111,114,187,221,243, 0, 84,169, 33,113,185, 92,198,188,188,188, 58,105,211,187, +119,111,237,197, 6,172,109,219,182,219, 57,142,107,229, 91,200,194,125, 82, 74,127, 57,120,240, 96, 70, 48,206,246,237,219,135, +229,244,255, 79,146,164, 95,242,242,242, 50, 66,149,137,182,109,219,142,235,212,169,147,254,211, 79, 63, 69, 97, 97, 33, 76, 38, + 19, 36, 73,130,199,227,129,203,229,194, 77, 55,221, 84, 47,203,215, 96, 48, 68,110,216,176,161, 77, 66, 66, 2,138,139,139, 81, + 82, 82,130, 41, 83,166,228,251,236,143,251,254,251,239,219,197,198,198,194, 98,177,160,188,188, 28, 19, 38, 76,248,211, 87,174, + 33,253, 91,189, 72,128, 88,249,183, 71,194,175,235,183,253,242,244,239,229,181,219,237,103, 61, 30, 79,140,159, 32, 9,121, 14, +207,243, 23, 0,196,135,211,194, 0,254,198,243,124, 91, 81, 20,175,162,148,182,112,187,221,137, 0,160,209,104,206,241, 60, 95, +224,114,185,142, 56, 28,142,159, 1,172, 6, 80, 16,140,200,145, 27,209,198, 99,183,220, 82,109,151, 70, 74, 20, 73, 28, 65,145, + 73,103,249,218,145, 27,177, 66,173,200,250, 3,209,178,105,211,166,175, 0,192,153, 51,103, 30, 3,112,252,247, 18,122,128,113, +148,210, 40, 0, 40, 47, 47,143, 42, 44, 44, 76, 90,189,122,117,231, 57,115,230, 12,212,218,108, 47, 59,128, 67,161,206, 31,124, + 93,235, 61, 2, 33,169,138, 90,166,210,169,117,155,127,105,136, 27, 19,151,146,146,242,250,136, 17, 35, 38, 46, 92,184,208,152, +147,147, 99,236,218,181,171,183,227, 11,165,189,167,148, 42,101,236,218,107,251,132, 19,108, 66,211,166, 77,231,143, 24, 49, 98, +252,130, 5, 11,140, 71,142, 28, 49,182,108,217, 82,225,244, 45,179,114, 7,251,234,171,187, 95,234,112, 54,106,220,135, 13, 27, + 54,126,225,194,133,198,253,251,247, 27,219,181,107,167,112, 82, 90, 91, 59,115, 28,135,158, 61,123,169,226, 28, 62,124,248,248, +119,223,125,215,152,155,155,107,236,216,177,163, 87,164, 65, 9,227,197,132,243, 50,231,252, 75, 10, 44, 46, 62, 62,126,105,207, +158, 61,135,125,249,229,151, 60, 0,228,230,230,162,180,180, 20, 41, 41, 41, 48,155,205,208,235,245,176,217,108,245,234,101, 37, + 36, 36,188,223,171, 87,175,113, 95,126,249,165, 8, 0,159,223,126, 19,126, 17,129, 7,139, 29,208,104, 52, 56,122,244, 40,120, +158,255, 61, 61,183,235, 34, 34, 34,254,183,114,229,202,152, 30, 61,122,112, 37, 37, 37,104,217,178, 37,126,253,245,215,222,155, + 55,111, 78,191,251,238,187,239,174,172,172,156, 4, 96,179, 90,194,175,190,250, 10, 38,147, 73,217,156, 78,231, 69,143, 37,243, + 60,159,154,147,147,147, 96, 54,155,225,241,120, 64, 41,173, 85,129,253, 43,158, 36, 73,232,223,191,191, 51,100,230, 9, 66,106, + 78, 78, 78,130,193, 96,168,195,229,241,120,160,213,106,193,113,156,220, 67,132,219,237, 70, 70, 70, 70, 40, 78,210,174, 93,187, +219,100,113,197,113, 28, 62,249,228, 19, 36, 37, 37, 33, 33, 33, 1, 38,147, 9, 6, 67,253, 53,176, 32, 8,136,139,139,195,253, +247,223,143,219,110,187, 13,203,150, 45,131, 40,138,181,246,199,198,198,226,219,111,191, 69,100,100, 36,210,210,210,106,237,255, +179,130, 0,177,223,109,254,205,145,189,101,212,213,194,160,126, 45, 23, 40, 21,173,230, 32, 42,121, 93, 11,201,227,185,176, 97, +251,201,103, 85,116, 0,154,108,219,182, 13, 58,157, 78,221,205,221,227, 65,239,222,189,155,132, 57,108,100,151, 46, 93, 62,191, +255,254,251, 53,109,218,180, 33,162, 40, 66, 16, 4, 8,130, 32,151,199, 52, 74,105,154, 36, 73, 3,206,157, 59, 71,223,124,243, +205,151, 55,110,220,120, 51,128,175, 3,198,221,109,237, 86,109,151, 70, 82,138,164,196,193,180,121,241, 58,130,106,187, 52, 50, + 74,176, 30, 5,112, 57, 11,172, 72,131,193,240,204,167,159,126,170, 1,128,193,131, 7, 63, 99,181, 90,255, 13,160,162,161, 46, + 16, 21, 21,133,168,168, 40,116,233,210, 5, 99,198,140,137,238,222,189,251,163, 45,236,246, 41, 5,128, 35,104, 29,226,184,212, +111,190,207, 79,144,127,143,191,169,135,102,104,102,235,115,212,107,153,249,123,104,146,135,158, 90,191,237,120, 56, 1,198, 37, + 37, 37,253,103,248,240,225,183, 46, 92,184, 48, 2, 0,222,127,255,125,140, 28, 57, 18, 73, 73, 73, 48, 24, 12,208,104, 52,208, +104, 52, 16, 69, 81,249, 12,115,147,229,147,146,146, 94,190,225,134, 27,110, 89,176, 96, 65, 4, 0, 44, 89,178, 4,163, 70,141, + 66, 92, 92, 28, 34, 35, 35,161,211,233,160,213,106,189, 92, 4, 52,124,171, 95, 39,156,247, 12, 29,136, 86, 6, 29,254, 54,251, + 21, 68, 71, 71, 99,195,180,251, 32,114, 28,238,251,118, 19, 34, 35, 35,213,180, 31,117, 56,115,115,115,113,238,220,185,128,113, +231,121, 62, 92,125, 83,226, 62,114,228,200, 91,100,206, 37, 75,150, 96,216,176, 97,136,139,139,131,217,108, 86,226,254, 27, 55, +167,138,115,216,176, 97,183,188,251,238,187, 10,231,160, 65,131, 16, 27, 27,139,136,136, 8,104, 52, 26, 37, 61,235,147, 71,151, + 57,231, 95, 82, 96, 17,175,123,117,107,118,118,182,146,243,162, 40, 66,167,211, 41,133,195,247,198,173,246, 94, 19, 31, 31,127, +231,151, 95,126,169,156,228,240,171, 84,122,189,190,190,156,181, 58,120,215, 95,127,253,199,217,217,217,122,141, 70, 3,171,213, +138,188,188, 60, 68, 69, 69, 65,171,213,226,198, 27,111,228, 51, 50, 50,226,174,191,254,250,207,126,250,233,167,241, 0,214,169, + 24,226,128,217,108,174, 37,176, 40,189,120,253, 71, 8,129,193, 96,192,170, 85,171, 32, 8, 66,173, 66, 22,168, 17, 75, 76, 76, + 12,235, 74, 0,128, 78,167,195,246,237,219,193,113, 28, 68, 81, 84,182,175,190,250, 10,211,166, 77,195,185,115,231,148,125, 17, + 17, 97, 71, 55,137,209,104, 52,200,226, 74,206,123,131,193, 0, 81, 20,137, 32, 8,132,231,121,185, 73, 39, 80, 57,148, 33, 8, + 2, 10, 10, 10,112,251,237,183, 99,241,226,197,120,225,133, 23, 48,126,252,248, 90,251, 43, 42, 42, 16, 19, 19,131,232,232,104, +232,116,186,223, 83, 22, 46, 27, 72,126,169, 51,235,133,151,141, 18, 0,137, 74,128, 4, 80, 80,229,251,217,179, 71,241,234,127, +222,224,213,114,235,116, 58,108,219,182, 13,190,195,174, 28,199, 65,163,209,212,250, 79, 16, 4, 36, 39, 39,171,225,155,185,114, +229, 74,237, 39,159,124,130, 47,190,248, 2, 30,143, 7,162, 40, 66,175,215, 35, 50, 50, 18,177,177,177,202,150,150,150, 70, 62, +248,224, 3, 77,183,110,221,102, 86, 84, 84, 4, 22, 88, 28,141,146,188,226, 10, 0, 18, 6,211,230,199,190,228, 99,162, 35,106, + 92,156,203,184, 61,156,241,214, 91,111,197,165,167,167, 3, 0,222,122,235,173,184,201,147, 39,207, 0,240, 52,106,134, 12, 47, +174,131, 5,124, 76, 8, 25,231,117,108,245, 67,134, 12,209,190,253,246,219,184,234,170,171,240,208, 67, 15,197,190,250,242,203, +127, 3,176, 34,120, 89,170, 93,152,230,190,242, 70,180,111,135,234,183, 13,248,245,124, 1,158,121,230, 69, 21,250, 31, 92,211, +166, 77,239,126,239,189,247,148,233, 16,177,177,177, 74, 27,228,223, 70,201,159, 33,218, 37,226,117,133, 38, 47, 92,184, 80,225, +140,143,143,175,197, 33,138, 34, 10, 14,253,128,111,222,207,130, 41, 46, 25, 19,166,205,173,119, 56, 83,116, 90,164, 26,180,232, +214,173, 27, 12, 6, 3,114,197,154, 91,153, 44,174,212,132,211,159,147,231,121, 37,140,148, 82,216,108, 54, 84, 86, 86,194,227, +241,192,225,112, 32, 61, 61, 93, 85,220,223,125,247, 93,133,179, 73,147, 38, 74,251,238,219,206,203,155,220,129, 9, 19,206,201, +255,253,239,127, 21,206,184,184, 56,133, 75, 16, 4,104, 52, 26, 44, 89,178, 4, 42, 29,109,213,156,245,205,119,127,206,227,199, +143, 99,206,156, 57,208,104, 52,242, 20, 32,197,177, 76, 73, 73,193,155,111,190,169,234, 30,247, 87,115,176, 72, 73, 73,137,116, +248,240, 97,110,207,158, 61,208,104, 52,136,143,143, 71,239,222,189, 1, 0, 78,167, 19,130, 32,192, 96, 48,144,182,109,219,158, +147, 19, 77,254,244, 27, 75,151,151, 90,114,191,254,250,171,180,102,205, 26,110,217,152, 97,112, 80,160,251, 51,115, 49,108,212, + 40,124,151,162, 5, 15,160,247,225, 18,104,181, 90, 33, 41, 41,201, 37,103,130,204,235, 55, 55,203,127,249,102,132,201,100,250, + 96,245,234,213,122,142,227, 80, 89, 89, 9, 73,146,208,183,111, 95, 16, 66,176,127,255,126, 60,253,244,211,248,252,243,207,177, +114,229, 74, 67,143, 30, 61, 62,176, 90,173, 29, 1, 84,250,112, 28, 8, 84, 56, 35, 35, 35, 97, 48, 24, 20,129,101, 48, 24, 72, +251,246,237,207, 5,153, 71,112,250,224,193,131,233,193, 56,101, 39,225,230,155,111, 86,230,156,201, 55, 64,223,202, 38,127,207, +203,203, 11,148, 95,117, 56, 37, 73, 66,191,126,253, 0, 0, 38,147, 9,102,179, 25,223,127,255,189,178,191, 71,143, 30,112, 56, + 28,104,210,164, 9, 14, 29, 58,164,138,179,168,168, 8, 75,151, 46,133, 40,138,136,139,139,131, 40,138,154,117,235,214,189, 96, + 50,153,162,120,158, 71,116,116, 52, 70,141, 26,181,208, 39, 12,158,175,191,254, 90, 8,198,201,243, 60,244,122, 61,150, 44, 89, +130, 57,115,230,224,201, 39,159,244,119,247, 96,179,217, 16, 23, 23,135,152,152, 24,196,196,196,168, 10,103, 3,160, 81, 57, 41, + 40,242,246,126,135,131,251,214,193, 67, 61,144, 60, 18,168, 68,225,145, 36,236, 93,187,171,221,217, 95,206,164, 80,208,154, 41, +181, 0, 60, 85,213,238,204, 56,237, 85, 0, 86,109, 42,117,204, 15, 23, 78,158,231,225,116, 58,241,221,119,223,225,232,209,163, + 88,179,102, 13,172, 86, 43,154, 52,105,130,232,232,104,100,100,100, 96,242,228,201,193, 4,214, 1,191,178,185,228,244,233,211, +221, 51, 50, 50, 72,121,121, 57, 74, 74, 74, 80, 89, 89, 9,167,211, 9,167,211,169,228,161,201,100, 66, 82, 82, 18,172, 86, 43, +181,219,237, 75,130,198, 93, 34,229, 28, 65,209,177, 85, 66,147,214, 55,186, 13,231,190,143,179, 91, 29, 26,247, 59,171,140,147, +191,122,162,245, 80,142,114, 20,168,137, 58, 33,160,146,199, 83,178,110,203, 47,247,255,193,249, 62,101,234,212,169, 29,125,135, +167, 39, 76,152,128,188,188,188,142,243,230,205,155, 2,224,173,250,114, 26,128, 20,212, 40,179,111, 81,179, 97,166,213, 74, 94, + 88,181,234,102, 0,119,172, 92,185, 18,227,199,143,199,127, 94,126,185, 75, 0,129,117,192,183,195, 87,144,191, 25,199,243,183, + 65,146, 36,239, 70,131,126,167,234,194, 73,170,170,170,108, 57, 57, 57,230, 15, 63,252, 16,177,177,177,104,209,162, 5, 34, 34, + 34,160,211,233,234,136, 1,121, 11, 23,119,139,197, 98, 59,124,248,176,249,227,143, 63, 70, 92, 92, 28,210,210,210, 96, 50,153, +160,215,235,149, 14,122,206,154,149,152, 50,233, 70,148,158, 60,130, 55,254,125,155,234,112,222, 51,100, 32, 82, 13, 90,220, 56, +107, 46, 58,118,236,136, 21,183,141, 6, 71,128,123, 55,236,132, 40,138,248,112,228,117,208,233,180,184,119,195,110,213,156,187, +119,239, 6,165, 20,105,105,105,176, 90,173,138,203,166,209,104,176,110,221, 58,140, 30, 61, 26,203,150, 45,195,181,215, 94, 27, + 54,238, 85, 85, 85,182,253,251,247,155, 63,250,232, 35,196,198,198,162, 89,179,102, 48, 26,141, 10,159,175,136,105,213,170, 21, +202,202,202,208,186,117,235,144,156,213,213,213,182,220,220, 92,243,178,101,203, 16, 27, 27,139,212,212, 84, 24,141,198, 90, 78, +216,204,153, 51,107, 17,116,235,214,237,119,115,214, 55,223,253, 57,199,140, 25,131,214,173, 91, 35, 50, 50, 82, 73, 3,127,161, + 93, 31, 80, 74,123,161,246, 52, 7, 7, 0,173,207,231,121, 66,200,238, 0,199,201,255,139, 0,174,246,238,243,120, 53, 64,116, + 0,190, 96, 60, 37, 94, 83, 33,222,239,248, 90,215, 9, 36,176,228,250, 56, 0,192, 86, 0,232,208,161, 3, 74, 75, 75,161,211, +233,208,187,119,111,156, 63,127, 94,177,249, 36, 73,194,216,177, 99,249, 39,158,120, 34,129,227, 56,184, 92, 46, 80, 74,193,243, + 60,228,158,159,191, 14,224, 56, 14, 25, 25, 25, 56,232, 77,211, 97,163, 70, 33, 53, 53, 85,153,196,161,211,233, 48,126,252,120, + 50,109,218, 52, 65,118, 47, 40,165,176, 90,173,232,214,173,155, 33,132, 59,242,239,207, 62,251, 44, 74,171,213, 42,226, 74, 14, +203,225,195,135,241,234,171,175,226,142, 59,238,192,201,147, 39,145,156,156,140, 71, 31,125,212,156,149,149,245,111,167,211, 57, + 43, 92,134,154,205,230, 90, 2,107,210,164, 73, 66, 70, 70, 70,130,209,104, 84,220, 45,175,168, 68, 70, 70, 6, 9,231, 96, 73, +146,132,111,191,253, 54, 96,239,208,191,199, 64, 8, 1,165, 84, 21,103, 78, 78,142, 34,206,100,247, 66,222,159,151,151,167, 56, + 88, 94, 33, 24,138,147,202, 66, 77,182,201, 69, 81,212,228,228,228,204, 78, 78, 78, 54, 79,154, 52, 9,149,149,149,104,218,180, + 41,134, 14, 29, 10, 73,146,224,116, 58,241,224,131, 15,134,116, 94, 68, 81,196,174, 93,187,144,149,149,133, 39,158,120, 2, 11, + 23, 46,196,224,193,131,107, 57, 88,114, 79, 55, 50,242, 15, 95,227,208,128, 22, 22,224,116,187, 96,177, 88, 65,169, 7, 30,137, + 66,242, 72,216,191,113,111,187, 95,246, 29,237,156,189,124,169, 8, 0,182, 77, 43,125,207, 74, 30,179,224,255,218,103,198,136, + 57,155, 46,184,114,194, 12, 59,227,190,251,238,195,179,207, 62,139, 91,111,189, 21,107,215,174,197, 83, 79, 61,133,187,239,190, + 91, 17,239,114, 89, 80, 49,236,248,222,132, 9, 19,254,181, 98,197,138,171, 30,121,228, 17, 78,174,147, 70,163, 17,132, 16,216, +108, 54,101, 59,124,248,176,244,207,127,254,243, 39,135,195,241, 94,208,130, 36, 24,126, 52,233, 44, 95,159, 45,229,218, 22,109, +136,229,136, 16,233,140, 79, 27, 80,126, 67,187,193,116,240,109, 45, 98,168, 84,227,240, 81, 80,216,109,213,120,242,137,199,248, + 63, 56,183, 70, 14, 25, 50,100,232,236,217,179,235,236,152, 61,123, 54, 14, 29, 58, 52,116,237,218,181, 5,193,134, 68,131,136, +171,212,168,164,164,121, 0, 96, 40, 42,154,106, 5, 78, 1,192, 11,192, 48, 15, 48,122,237,218,181, 0,128,230,205,155, 67, 2, + 58, 17,224,127, 60,240, 49,128,111, 2, 57,234, 78,151, 27, 86,171, 13, 18,173, 41, 71, 18,149, 32,121,106, 92, 80,127,145,165, + 98,220,141, 2,144,120,158, 71,151, 46, 93, 48,108,216, 48,104,181, 90,152,205,102,165,157,247,111,147, 84,220, 20, 41, 0,137, + 16,130, 86,173, 90, 97,232,208,161,208,104, 52, 48,153, 76,136,140,140, 84, 4, 22,207,243,232,146, 49, 16, 31, 47,123, 5, 19, +135,117,198,164,235, 18,241,217,254, 18, 85,225, 76, 51,106,145,102,208,161, 67,135, 14,136,136,136, 0, 33, 0,207,115, 74, 56, + 77, 70, 61, 52,202,240,163,186,184, 23, 21, 21,161,160,160, 0, 5, 5, 5,224, 56, 14,125,251,246,133, 86,171,133, 32, 8,200, +207,207,199,172, 89,179,224,112, 56, 84,113,114, 28,135,182,109,219, 98,224,192,129,208,106,181,144,239, 21,190, 67,131,162, 40, +162,178,178, 18,109,218,180,193,170, 85,171,208,191,127,255,176,156, 29, 59,118,196,128, 1, 3,160,209,104, 96, 48, 24,148,169, + 58, 90,159,184, 86, 85, 85, 41,233,208,189,123,247,122,113,174,217,117, 18,139,214,124, 15,187, 67, 66,133,197, 85,235,132,228, + 38,145,216,250,209, 19,170,226, 46,115,190,247,222,123, 40, 43, 43, 83,218, 33,121, 65,155,108,158,164,166,166,226,221,119,223, + 13,122, 15,242,106,145, 77,126,251,226, 9, 33,217, 62,117, 98, 20, 33, 36,219,247, 51,216,113,222,175,215,205,152, 49,163,103, + 86, 86,214,156, 62,125,250,124,188,125,251,246,229,193,248,130,241,204,152, 49,163,115, 86, 86,214, 28,223,227, 3, 92, 39,160, +131, 37, 15,249,112,178, 51,147,146,146,162,140, 59,155,205,102,104, 52, 26,229, 96,183,219,141, 15, 62,248, 0, 9, 9, 9, 72, + 76, 76, 84, 62,131,101, 0,199,113,160,148,226,161,243, 53, 83,128,190,109,170, 65, 1,128, 27,206, 83,133,207,227,241, 96,197, +138, 21,136,136,136, 80, 42,186,217,108, 14, 57, 92,164,213,106, 7,244,234,213,139,179,219,237,138, 77,206,113, 28, 14, 31, 62, +140,172,172, 44,140, 31, 63, 30,237,219,183,135,199,227, 65,117,117, 53,174,191,254,122,241,141, 55,222, 24,160, 86, 96, 25,141, + 70,101,222,145,221,110,199,250,245,235, 17, 29, 29,141,152,152, 24,196,197,197, 33, 54, 54, 22, 58,157, 14,132,144,240, 45, 26, +165,184,249,230,155,107, 57, 87,190,174,149,111,131, 38, 15,251,169,225,188,246,218,107, 21,247,202,108, 54,227,155,111,126,107, +159,123,247,101,240, 54,107, 0, 0, 32, 0, 73, 68, 65, 84,238, 13, 74, 41,226,227,227,177, 99,199, 14, 53,141, 46, 36, 73, 66, + 66, 66, 2, 68, 81, 36,235,214,173,123,193, 43,174,136, 40,138,248,225,135, 31,144,151,151,135,248,248,120,165, 87, 26, 14,213, +213,213,103,223,120,227, 13,207,219,111,191, 13, 0, 24, 52,104, 16,202,203,203,139,125,246,151, 78,156, 56,177, 86,124, 47, 92, +184, 80,250, 23,208, 87,112, 59,221,176, 88,109,168,170,172,134, 75,242,192,229,246,160,248,244,249,232, 39,166, 77, 21,255,243, +224,100, 0,192,180,249,111,161,242,221,223, 26,176, 47,166,141, 75,184,249,213, 79,166, 3,184, 49, 20,191,197, 98,129,205,102, + 67,243,230,205,177,123,247,110, 84, 86, 86, 98,240,224,193,181,220,223, 48, 67, 16,190,112,156, 62,125,186,239,168, 81,163,118, +191,246,218,107,173, 59,117,234, 68,170,171,171, 81, 93, 93, 13,139,197, 2,249,251,129, 3, 7,232,242,229,203,127,177, 88, 44, + 25, 8, 49,103, 72,155, 94,121,212,145, 27,177, 98,203,143,154, 81,127, 31, 51, 58,234,212,233, 66,119,169, 85, 95, 85,110,253, +201,238,161,135, 64, 61, 20, 30, 74, 65, 61, 18, 60, 84,250,163,215,111,167,182,107,215,238,159,203,150, 45, 11, 40, 72,121,158, +199,178,101,203,208,175, 95,191,127,230,231,231, 31, 70,136,201,253, 50, 90, 0, 90,183, 40, 62,241,127,255,247,127, 26, 0, 24, + 56,112,224, 19, 45, 92,174,105, 5,128,163, 83,215,174,183,108,223,190, 61,202,104,172, 89, 39, 20, 21, 21, 5, 74, 41,111,177, + 88,162, 50, 50, 50,110,217,191,127,127, 93,129, 37, 81,184, 92,110, 88,109,118,148,149, 87,193,229,112,193, 45,185,225,113, 75, +112, 75, 53,238,168,219,227,129,228,246,192, 45,121,192, 11,124, 68,230, 53,205,170,106,188, 44, 82,182, 57,167,176, 89,160, 34, + 90,179,194, 11, 72, 74, 74, 82,134,132,125,231,202,168,112, 49,234, 24,245, 53,109, 33, 85,218,198, 31, 55,102,163,248,208, 86, +104, 8,133,228,113, 65,114, 59,225,113, 57,193, 67,194,161, 99,167,209,169,105,216, 54, 68, 9,231,240,103, 94, 68,239,222,189, +241,217,184, 27, 65, 8,112,239,250, 29,208,104, 52, 88,126,211, 96,104,245, 90,252, 99,205, 78,181,225,172, 21,247,220,220, 92, + 60,244,208, 67,120,233,165,151, 96, 48, 24,148,206,201,145, 35, 71,240,201, 39,159, 96,200,144, 33,170,227, 78, 72,205, 80,171, +156,134, 51,102,204,192,153, 51,103, 48,111,222, 60,244,236,217, 19,162, 40,162,172,172, 12, 25, 25, 25, 56,119,238,156, 42, 78, + 74, 37,196,198,198, 42,211,117,252,231,136,201, 29,217,250,228,145, 47,231, 93, 55, 37,227,203,109,203, 65, 64,176,243,163,169, +181,238, 71,239,124,178,165,222,156,207, 62,251,108,173,112,214,211,189,146,181, 8, 9,114,207, 27,165,210,241,146,143,147, 19, + 89,151,149,149, 53,199,255,252,112,124,190,251,253,206,119,248,137,178,115,106,134, 8, 41,199,113,144, 36, 9,102,179, 25, 90, +109,141, 3,230,127, 35, 53,153, 76,181, 20,121,184,241,100,158,231, 65, 41, 85, 18,150, 15,176,127,199,142, 29,117, 68,192,127, +255,251,223,144,227,180,110,183,187, 99, 68, 68, 4, 42, 43, 43,149, 57, 82, 90,173, 22,211,167, 79,199,196,137, 19, 21,113,165, +213,106,177,120,241, 98,164,167,167,195,225,112,116, 12,149,160, 26,141,198,210,181,107, 87, 78,118,129, 12, 6, 3, 25, 63,126, + 60,239,116, 58,161,215,235,107,185, 78,242,220,180,112, 98, 72,118,155,190,251,238, 59, 85, 14,150,218, 57, 72,148, 82,236,221, +187,183,150, 80,243, 46, 53, 6, 0,236,219,183, 79,185,209,170, 29,239,246,120, 60, 48, 24, 12, 68,163,209, 16,147,201, 20, 53, +105,210, 36,133, 87,206,115, 57,222,106, 38, 90,239,223,191,255,250,144,227, 53, 7, 14,252, 37, 31,199, 32, 73, 18,156, 46, 23, +172, 86, 27, 42,171, 45,152, 57,215, 59,162, 54, 19, 57, 0,114,250, 78,121, 8,247, 13, 27, 50, 16,225, 87,247, 5, 68,108,108, + 44, 62,255,252,115,136,162,136, 85,171, 86, 33, 50, 50, 18,163, 71,143, 70,100,100, 36,158,120,226, 9,220,118,219,109,245, 17, + 88, 0, 80, 94, 90, 90,218,119,234,212,169,187, 95,126,249,229,230,205,155, 55,135,211,233,132,195,225,128,211,233,196,177, 99, +199,176,124,249,242, 66,139,197,210, 23, 64,121, 56, 50,109,122,229,209,236, 71, 90,159,237, 55,230, 38,219,161,162, 53, 56, 87, +116, 30,110,207, 41,184, 61, 30,184, 93,238, 26, 65, 32, 73,112, 59,221,224,121, 46,242,250, 62,105,235,106, 38,252, 19, 7,128, + 17,151, 48,171,104,126,126,126,105,124,124,188,220,131,140,116, 56, 28,196,219,150, 80,252, 54,193,189, 26,128, 83, 13, 97, 33, + 48,229, 63, 47,189,212, 76, 30,190,127,233,165,151,154, 61,250,200, 35, 83, 0,188,126,104,255,254,165,119,221,117,215,212, 79, + 63,253,180,214, 57,119,221,117, 23, 14,237,223,191, 52, 88,207,199,229,114,193,106,181,163,164,228, 87,220,115,239, 51, 62,221, +125,170,244,251,107, 38,189, 83, 0,208, 3, 64,201,185,159,241,224, 67,143,234, 66,117,168,188,245, 29,162, 40,214,153,132,236, +219,190,171,104, 63,168,255, 20, 11,141, 70,131,163,219,179, 49,117,202, 45,128,199, 13, 56,171, 1,167, 5,212,105, 1,117, 84, +131,104, 13,160, 46,155, 42, 94,143,199,163, 76,219, 16,120, 14, 58,237,111,237,166,209,104,128, 86,175, 85, 27,206, 58,113, 63, +113,226, 4,238,191,255,126, 56, 28, 14,140, 25, 51, 6, 54,155, 13,118,187, 29, 54,155, 13,173, 90,181,130,213,106, 85, 29,119, + 73,146, 20, 23,112,234,212,169,232,217,179, 39,102,205,154,133,199, 31,127, 28,173, 90,181,194,148, 41, 83,240,241,199, 31,163, +115,231,206,176, 88, 44, 97, 57,229,182,196,108, 54, 67, 16, 4,165, 13,246,205, 43, 89, 96,169,205,163, 64,156,132,252, 54,239, +214, 55,223, 31,158, 52,168,222,156,115,230,204, 65, 73, 73, 73, 29,231,202,215,193, 90,176, 96,193, 69, 85, 86, 63,151, 41,236, +113,132,144, 92,239, 95,214,233,211,167, 63, 73, 8,201,158, 62,125,250,147,115,231,206,205, 83,195, 23,104, 63, 33,228, 43,239, +253,247, 6,159,255,114,213, 8, 44,200,110,147,108,107,202, 9, 39,239, 3, 0,163,209,136,236,236,108,172, 88,177,162,214, 13, + 37, 24,100,209,246,117,124, 77, 1, 24,233,117,174,228,223, 35,138, 37,140, 26, 53, 10,173, 90,181,170,229, 94, 25, 12,134,144, + 98, 67,146, 36,156, 56,113, 2, 7, 14, 28, 64,159, 62,125, 80, 94, 94, 14, 1,192,180,253,251,209,105,210, 36,216,189,194, 79, +171,213,226,159,255,252,167,170, 12,220,179,103, 79,173, 73, 64, 29, 59,118, 60,149,145,145,145,178, 99,199, 14,197,209,210,233, +116,208,235,245,138,200, 80, 83,169, 41,165,184,229,150, 91,106,137, 33,127,129, 37, 87,158,111,191,253, 86,213, 16, 33,165, 20, +153,153,153,138,123, 21, 17, 17,129, 47,190,248, 66, 57,230,186,235,174, 3, 33, 4, 9, 9, 9,248,230,155,111,194,114,202,105, + 42,231, 61,207,243,168,174,174, 70,110,110, 46,180, 90,173, 50, 63,195, 96, 48, 40,241,103, 8,150,225, 18, 28, 46, 23, 44, 86, + 27, 42, 43,107, 26,210,163, 7, 62,171,117,136,211,126,241,139,211,100, 39,180,162,162, 2,235,215,175,199,231,159,127,142,158, + 61,123,214, 26, 30, 84, 59, 68,232, 59,143,224,215, 95,127,237,247,248,227,143,239,124,225,133, 23,154,198,197,197,193,233,116, +226,196,137, 19,248,224,131, 15,206, 88, 44,150,126, 0,206,171, 79, 3, 10,183,203, 13,155,197,138,242,202,106, 60, 63,123,113, +208, 38, 2, 0,156,142, 74,140, 26,145,169,189,196, 57,117, 26,192,221, 62,191,151, 2,144, 39,227, 87, 0,152, 88, 31, 50, 17, + 24, 48,230,150, 91, 6, 78,157, 58, 85,249,111,234,212,169,216,185,115,231, 64,113,197,138, 3, 46, 96, 35,191, 98, 69,151,121, +243,230, 41,199,204,155, 55, 15,159,175, 88,177,193, 3,108, 12,210,109,175,113,176,172, 54, 84, 85, 91, 17, 25,157,140,211,199, + 55,133, 13,139,134,183,131,134,104,151,229, 54, 36,216,188,155,122,136, 43, 37,164,242,177,242,188,163, 46, 3,111,193,107,175, +255, 23, 58,142,226,230,129,157, 16,111,144, 64,140,177,208,100, 78, 7,137, 78,171, 57,235,249,171,161,166,173,219,244,212, 52, + 28, 51,233,241,207,181,219, 32,138, 34, 62, 31, 55, 18, 26,173, 6,119,124,181,185,102,113,207,228,155,161,209,105, 49,244,157, + 79,212,220,168,149,184, 31, 61,122, 20,219,182,109, 67,135, 14, 29,240,243,207, 63, 43,115,108,229,251,150,202, 14,175, 18,119, +185, 29, 47, 42, 42,194,168, 81,163,160,209,104,176,120,241, 98,108,218,180, 9,143, 63,254, 56,238,186,235, 46, 92,127,253,245, +193,230,197,214,225,244,205,163, 96,243,163,234,155, 71,254,156, 74,249,253, 29,249, 46,115,202,147,219, 3,137,245,223, 59,177, +221,199, 45, 74, 12,176,239, 6,127,231,137, 82,218,203, 59, 55,202, 62,119,238,220,188,185,115,231,142, 34,132,100,207,157, 59, +119, 84, 48, 7, 43, 16, 79,128,253, 97,219, 65,193, 79,133, 14,240, 21, 81,218, 16, 99,217, 38,147, 9,119,223,125, 55,158,120, +226, 9,101, 34, 99, 40,200,202, 53, 20,178,179,179,235,252,183,106,213,170,112, 67,132,135,163,162,162,122, 14, 28, 56, 16,229, +229,229, 56,121,242, 36,204,102, 51, 58,189,250, 42,246,223,119, 31,174, 94,184, 16,220,192,129, 74,133,223,191,127, 63,116, 58, +221, 97,155,205, 86,175, 76, 53,155,205,136,137,137,129, 94,175, 71, 68, 68, 4, 34, 34, 34, 96, 50,153, 20,161, 21,110,136, 80, + 46,124, 95,125,245, 85, 72,231,202,215,242, 85, 35,134, 40,165,216,177, 99, 71, 29, 7, 75,190,166,188, 79,118, 50,212,112,122, + 29, 75,170,211,233,192,243, 60,140, 70,163, 98,247,235,245,122,101, 83,235, 96,133,123,144,104, 90, 90, 90,173, 7,145,254, 63, +123,231, 29, 30, 69,181,134,241,119,102,182,111, 54, 13, 82, 72, 15, 1, 2,129,208, 66,151, 38,160, 8, 72, 17, 68,176, 97,167, +169,112,189, 82, 45, 24, 80, 1, 69, 64, 16, 1, 1, 5, 1, 1, 43, 77,138,244, 38,229,146,208, 99, 66, 40,233, 33, 36, 33,109, +179,117,202,185,127, 36, 27, 55, 33,101, 55, 4, 80, 56,191,231,217,103,119,167,188,115,206,204,153,153,119,190, 83, 70, 46,151, +151, 27,136,244,223, 95, 69,104, 70,177,190,184,206,245, 45, 22, 11,100, 50, 25,126,253,245, 87,116,234,212,169,204, 92,217,140, +149,253,113,119,146,180, 91,183,110, 61,186,120,241,226,147, 11, 22, 44,240,212,235,245, 88,179,102, 77,129, 94,175,127, 20,165, +237,136, 28,190, 24, 2,224,173, 2, 12,102, 51,244, 69, 37,251,224,234,197, 95,106, 52,101,255,102,154,183,106,245,226,234,213, +171,111,155,190,122,245,106, 36, 38, 38,190,136,243,231, 15, 6, 1,203,167, 78,157,218,184, 93,187,118, 65, 0, 48,117,234,212, +212, 32, 96,121,117,231,185,173,138, 80, 95,106,214, 77,197, 57,117, 22,105,173,248,192,119,167, 55, 68,134, 97,202, 76,198,227, + 35, 94, 67,198,181,120, 68,104,115,224,227,225, 2,169, 40, 3,138, 62,209, 56,127, 75,139, 47,151,239,118, 42,157, 90,165, 2, +106,205,223,213, 77,106,141, 26,170,210, 90, 5,134, 97,160,214,106, 32, 87, 42,157,206,123,124,124, 60,180, 90, 45, 68, 81,188, +237,126,227,108,143,102, 66, 72,217,189,115,193,130, 5,152, 60,121, 50,214,172, 89,131,243,231,207,163, 77,155, 54,120,236,177, +199,112,243,230, 77,156, 59,119, 14,102,179,217,225,116,218,223, 47,226,226,226,176,119,239, 94, 36, 36, 36, 32, 53, 53,181,214, +199,189, 98, 53, 99,105, 13, 78,137,121,221,123, 6, 79, 63, 30, 85, 43,205,232,232,104,220,188,121,243,182,200,149,125,243,163, +106, 34, 88,101, 94,164,154,242, 21, 99,111,130,108,145, 38,123, 67, 84,241, 63, 0, 79,219,180,105,211,166,189,231,232,122,246, +255,109, 17, 48, 71,170, 22,237, 13, 22, 83,177,186,142, 97,152,178,157,110, 31,153,178,253,214,106,181,101, 81,166,144,144,144, +106,163, 87,182, 19,142,227, 56,116,191, 86, 4,165, 82, 89, 86,157,215,255,166, 84, 46, 68, 30, 22, 22, 86,174, 13,150,253, 65, +169, 12,179,217,124,240,224,193,131,109, 7, 15, 30,204,197,197,197, 65, 38,147, 65,146, 36,152, 59,119, 70,155,229,203,113,225, +157,119,208,227,250,117,152,121, 30,106,181, 26,187,118,237,178, 26, 12,134,131,206, 20, 26,150,101, 25,155,193, 82,169, 84,112, +117,117,133,155,155, 91, 89, 52,199,153,139, 80, 85, 79,136,246, 31,103, 78,104, 91,131,126,251, 27,171,237,248, 25,141,198,114, +134,203, 81,236,171, 12,108,166,200,221,221,189, 92,181,168, 45,138,231,136,193,170,105, 32, 81,149, 74,229,118,248,240,225,198, +110,110,110, 32,132, 32, 39, 39, 7,207, 62,251,236,229,127,125, 0, 11,164,164,145,187,209, 4,189,209, 84,231,250, 63,252,240, + 3,174, 92,185, 2,171,213,138, 57,115,230,220,102,172,106, 25,193,178,113, 69,163,209, 72,253,250,245,195,241,227,199,161, 82, +169,120,212, 98,252, 42, 34, 73,176,242, 2, 76, 70, 51,244,197,197,120, 24,184,116,254,252,207, 46, 46, 46,207, 2,208,229,231, +231,115,238,238,238,208,106,181, 48, 26,141, 5, 92,105, 79,193, 36,192,162,225,249,207, 70,140, 24,177, 16, 0,100, 60,255, 89, +117,227, 96,149, 25,172, 58,222,143,182,235, 86, 85,209,171,218,154, 43,134, 97, 74,186,231,179, 44,214,204,153,140, 8,109, 54, +162, 26,186,192,116,243, 10, 84,110, 94, 96, 60, 66,241,229,242,221,136, 75,186,229, 84, 58,159, 91,247, 11,130,130,130,176,253, +165, 33, 80,169, 84,120,246,151,189, 37,141,180,199,142,132, 66,173, 66,159, 37, 63,212, 42,239, 6,131,161,202, 72,149, 19, 17, +172, 50, 77,155, 1,140,138,138, 66,147, 38, 77,112,240,224, 65, 68, 69, 69, 33, 49, 49, 17,137,137,137, 72, 74, 74,194,249,243, +231,145,151,151,231,244, 49,218,180,105, 19,178,179,179,161, 80, 40, 80, 88, 88,136,235,215,175, 87,215,254,217,225,227,110,163, +217,147,209, 0, 0,127,111,119,167, 12,150,189,230,188,121,243,156, 25,230,161,156, 76, 53,243,114, 42,180,117,178,253,183, 84, + 48, 59, 21,255, 87, 92, 30, 0,110, 2,224,106, 88,175,226,255,156, 57,115,230, 28,180, 69,190, 74,117,185,170,218, 95, 85,140, + 96,217,155, 0, 99,179,102,205, 52,246,245,167, 44,203,194,213,213,149,153, 52,105, 18,199, 48, 12,116, 58, 29,220,221,221, 17, + 30, 30, 14,171,181,230,102, 9, 10,133,194,216,177, 99, 71,141,125,232,149, 97, 24,184,184,184,112, 83,166, 76, 97, 86,173, 90, + 85,233,122, 91,183,110,173,182,112, 11,130,176,112,212,168, 81,175,167,165,165,121,250,250,250, 34, 51, 51, 19, 10,133,162,100, +180,216, 94,189,208,253,218, 53, 88, 75, 13, 67,124,124, 60, 86,174, 92, 89,108,181, 90, 23, 58,123,209,208,233,116,168, 95,191, + 62, 84, 42, 85,185, 94, 49,118,161, 85,135, 34, 88,117,105,174,108,154,246, 55, 86,219,239,177, 99,199,150,253,119,230, 34,169, + 80, 40,200,147, 79, 62, 89,246, 14, 66, 15, 15, 15,120,121,121, 33, 43, 43,235,239,158, 58,165,145, 59, 71, 13, 86, 77, 3,137, +202,229,114, 88,173,214,178,234,204, 37, 75,150,220,137, 49,248,231, 24, 44, 65, 98,116, 58,111,248,251, 55,133,183,143, 9,146, + 36,214,153,182, 32, 8, 24, 55,110, 92,185, 49,175,108, 55, 98,219, 32,182,182, 30,190,246,225,127,103,159,196,239, 56, 58, 66, + 0, 94, 40,141,226, 25, 44,255,186, 99, 24, 18, 18,226,150,156,156, 92, 89,187,168, 74,123,251, 1,127, 15,201,192, 1,159,164, +164,164,180,116,119,119, 71,223,190,125,177,109,243,230,173, 31, 2,101, 33, 27, 35,144,166,185,113,227, 63,165,191,211,107, 10, +234,217,170, 8,139, 13,117,109,214,153,219,162, 87,119, 90,149,195,178, 37, 15,102,191,125,243, 25, 34, 52, 89,104, 19,172,194, +177, 19,231,208, 41,136,128,152, 21,181, 78,167, 78,167, 43,105,140,175,213, 66,165,250,187,205,149, 74,171,129, 66,169,170,117, +222,237, 35, 85,119, 26,193, 98, 24,182,220,126,124,253,245,215, 49,117,234, 84,244,237,219, 23,137,137,137, 56,124,248, 48, 46, + 95,190,140, 9, 19, 38, 32, 50, 50, 18, 79, 60,241,132, 83,199,232,183,223,126, 67, 65, 65, 1, 8, 33,200,206,206,134,201,100, +194,140, 25, 51,238,248,184,219,184,182,103, 54, 0,224,151, 61,177,181,214,156, 62,125,122,217, 24,140,182,123,126, 13, 81, 43, + 71,238,119,167,170,251,239,236,250,247,130, 74, 13,214,229,203,151, 43,237, 43, 31, 17, 17,145,213,167, 79, 31,159,132,132, 4, +232,116, 58,132,135,135,195,108, 54, 87, 87, 13,209, 18,165, 99,101, 92,186,116,169, 82,205,176,176, 48,235,227,143, 63, 46,111, +208,160, 65,185,200,149,173,135,141,189, 51,174,168, 89, 74,145,201,100, 26,221,181,107,215,181, 59,119,238,212,132,135,135,163, +160,160,164,253,237,154, 53,107,240,214, 91,111, 65,163,209, 32, 33, 33, 1, 67,134, 12, 49, 24, 12,134,209, 40, 63, 6, 86,101, +154,183, 25, 25,133, 66, 81, 86, 77,102,171, 42, 83, 86, 31,138,190, 77,147, 97, 24, 44, 94,188,184,210,177,160, 42,178,124,249, +242,202,220,124,165,233,252,226,139, 47,234, 76,243,228,201,147,229,222, 49, 56,112,224,192,111,158,120,226, 9,164,166,166,150, +171, 22,172,193, 96,149,211,172,105, 32, 81,142,227,224,235,235,139,143, 63,254, 24, 94, 94, 94,104,208,160, 65,101, 6,171,218, + 99, 84, 75,238,170, 38, 97, 73,204,162, 5,209,221,190,249,246, 23,185, 74,201,226,248,225, 95, 80,152,119,163,124, 4,214,250, +119,151,104,101, 84, 31, 88, 98,247, 57,148, 78,179,217,140,207, 63,255, 28,209,209,209,136,142,142,174, 54, 65, 85,116,135,174, + 49,239,246, 6,203, 65,179,117,155,166, 36,137,140, 90,235, 9,173,139, 63, 34, 35, 61, 33,145,154,199,234,148,238,255,113, 55, +164,166,166,186, 7, 5, 5,225,242,229,203, 12,254,110,143,245,247,177, 82, 42,159,173, 96,176,110, 63,223,129,243, 27, 54,108, +104,217,170, 85, 43, 44, 89,178, 4, 0, 94,250,252,143, 63, 70, 70, 27, 75,194,153, 28,176,177,212,140,213,152, 78,145,136,140, + 90,235, 1,141,174,116, 63, 74,142,143,121, 74,170,201,187,237,230,119, 39, 15,122,149,105,218,214,191,122,252,119, 60,217, 63, + 16,127,158, 60,143,125,105, 46, 8, 82,101,192,207,144, 13, 41,251, 47,252,103,120, 20,190,252,185,228, 38,126,254,116,205,154, + 12,195,224,232,164,209,208,169, 85,120,122,195, 14,200,229,114, 28,124,231,101, 40, 20, 10,244, 92, 80, 82, 37,123,225,243,233, +144,169,148,136,152, 16,237, 80, 58, 43,214,212,216,218, 92,217,155,171, 26, 34, 88, 85,230, 93,175,215, 35, 47, 47, 15,107,215, +174,197,171,175,190,138,155, 55,111,226,250,245,235, 72, 72, 72,192,198,141, 27,203,221,227,224,196, 49,154, 54,109, 26,222,125, +247, 93,176, 44,139,150, 45, 91, 34, 58, 58, 26, 93,186,116,113,250, 24, 85, 60,238, 21,113, 32,122, 85,165,230,162, 69,139,156, +238,176,245, 32,226, 84, 3, 13, 91, 36,203,203,203, 11, 46, 46, 46, 0, 80,238, 6, 91, 83, 53, 97, 85,154,130, 32, 64,163,209, + 64,163,209,148, 27, 22, 97,240,224,193, 53, 70,176, 74,217,149,144,144,240,124,139, 22, 45,190,139,142,142,118,121,244,209, 71, +229,254,254,254,104,215,174, 29, 18, 18, 18,240,251,239,191, 91,151, 46, 93,106, 48, 24, 12,175, 2,216, 83, 27,243,108,107,248, +109, 63,162,189, 51,136,162,152,122,253,250,117,191, 47,190,248,130, 99, 24, 6, 11, 23, 46, 44, 55, 64,107,197, 60,158, 56,113, + 66, 32,132, 92,169, 33,138,145,122,253,250,117,191,249,243,231,151,211,180,125, 42,154, 20, 71, 52,171,194,150,231,138,251,192, +145,147,167,166,129, 68,101, 50, 25,226,227,227,241,209, 71, 31,129, 97,152,114, 29, 39,254,205,252,249,191,204, 85, 93,218,193, +243,217,225,189, 91, 49, 96, 97,169, 36,210,203,229,230,151,153,171,161,243, 55,225,183,119, 71, 58,114, 44,174, 31, 58,116, 40, +120,246,236,217, 28,199,113,152, 55,111, 94,185,178, 84,241,184,239,223,191, 95,212,104, 52, 41,181,205,135,213,106,117,164, 23, + 85, 85, 39,248,177,197,243, 62,234,251,205,234,109,114,134,177,224,248,161, 95, 80,144, 95,121,215,116,165, 92,134,117, 27,182, + 10, 50,142, 77,189,207,135,238,155,199, 30,123,108,198,222,189,123,101, 65, 65, 65,181, 22, 9, 4,182, 45, 94,188,184,255,168, + 81,163,234, 53,111,222,220,214,249, 68, 89,250, 65,233,200,238,187, 28, 52, 73, 91,190,252,226,163,151, 86,172,222,166,100, 25, + 43,142, 31,254, 5, 5, 21,204,250,237,209,104, 57,214,111,216, 98,149,201,184,248,154,174,193,181,233,193,236, 8,109,159,124, + 21, 95,239, 88, 9,159, 86,253,241,204,160,110, 56,186,228, 37,140,104,110,132,245,199,231,208,242,153,117, 88, 51,189, 36,122, +211,230,167,233, 14,221, 43,220,116,127, 15, 88,201,178, 44, 84,106, 13,228,202,191,163, 47, 74,173, 22,156, 19, 17, 91, 91,222, +171,139, 84, 57,187, 63, 56,142, 67, 88, 88, 24, 26, 53,106,132,174, 93,187,162,109,219,182,232,213,171, 23,206,157, 59,135,115, +231,206, 97,194,132, 9,213,153,171, 26,143, 81,223,190,125,209,175, 95,191, 59, 62, 54, 21,143,123, 93,224, 72, 89, 26, 63,126, + 60, 0,220, 81, 52,235,129, 54, 88,222,222,222, 80, 42,149,181, 50, 84,149,105, 90, 44,150, 50, 99,165,209,104,202, 34, 86, 91, +183,110,117,166,128,239, 49, 26,141,145, 31,124,240,193, 68,141, 70,211,203,104, 52, 70, 0,128, 86,171,253,203, 96, 48, 28,176, + 90,173,139, 0,228,223, 73, 90,237, 13, 70, 37, 81,174,106, 31,241,179,179,179,159,120,241,197, 23,247,176, 44,219,176,186, 23, + 51,219,153,213,164,172,172,172,254, 53,105,190,240,194, 11,149,106, 86,166,235,136,102, 21,230,176,156,169,178,239, 97,232, 80, + 33,171, 97, 32, 81,185, 92, 14,157, 78,135,205,155, 55,163,126,253,250, 15,212, 9,118, 60, 38,243,243,234,230,247,172,175, 60, + 4,192,123,232,252, 77, 41,135,114,173, 33, 67,231,111, 74,254,237,221,145,193, 53, 24,158, 71,230,206,157,123,148,231,249, 16, + 7,203,109,178,217,108,238,230,108,218, 9, 33,136,143,143,151, 94,127,253,245,156,236,236,236,103,106,147,255,195,199,147, 23, +116,235,232,239, 53,124, 72,183, 14, 96, 24, 88, 44, 85, 52,234,101, 64, 8, 33, 68,198,177,169,135, 78,164,190,126,159, 95,161, +113, 54, 57, 57,121, 86,227,198,141,199, 0,168,234, 78,184,177, 38,145, 36,192,162, 52,155,191,104,223,190,253,148,247,222,123, +207, 99,208,160, 65, 8, 10, 10,130,187,187,243,111, 11, 58,118, 42,125, 76,231,118, 98,224,211,131,187, 61,193, 50, 12, 49, 91, +170,111, 28,205,216,246,167,140,139, 63,124, 50,173,117,117,209,121,155, 41,191, 27,209,134, 62,195, 95, 65,159,225,175,148,149, +167,125, 63, 63,138,152,244, 63,208,142, 77,135,121, 69, 55, 48,110,182,162, 94,243, 48, 55, 44,203, 98,208,234,205, 80, 40, 20, +101,233,124,100,110,249,126, 1,225,111, 58,254, 46,117,251,188,219, 71,176, 42,185, 22, 59,213, 6,139,227, 56,228,228,228, 32, + 33, 33, 1, 89, 89, 89, 48, 24, 12,136,139,139,131,197, 98, 65, 94, 94, 30, 90,182,108,233,220,211,253, 93, 56, 70,247, 83,243, + 97, 48, 86,181, 50, 88,132,144,180, 78,157, 58,213,116, 51,118,170,151,145, 76, 38, 51,117,235,214,141,169,172,183,129,237,183, + 70,163,113,244,241, 57,223,106,181, 70, 91,173,214,104,148, 86,133, 89,173,214, 59,110, 72, 34,138, 98, 70,199,142, 29,185,234, + 46,250,146, 36, 85, 59, 98, 92, 78, 78, 78,113, 78, 78, 78,157,190, 58,252,110,104, 86,114,210,136, 99,198,140,169,214, 73,185, +184,184, 84,219,184,168,166,129, 68, 13, 6, 67,230,139, 47,190, 40,218, 87, 53,219, 15, 68,250, 64,195,144,228, 1,207,190, 22, +114, 40,215, 26, 2, 0, 54,147, 5, 66,146,171, 90,229,244,233,211, 89, 0, 26,223,237,164, 93,187,118,205,210,169, 83,167,245, + 69, 69, 69,227, 1, 24,106,171,115,244, 84,198,244,127,225,145, 57, 11, 96,236,157,138, 88,128, 56, 95,147,105, 92,244,135, 31, + 62,253,209,135, 31,134, 75, 64,125,148,142, 81,197, 57, 96,210,236, 57, 17,115,163,206,199, 6, 19, 69, 49,237,145, 71, 30,113, +122,157,154,230, 87, 51,146, 56,126, 64, 16,112,218,121,205,187,145, 78,155,102,171, 86,173,208,166, 77,155,178,111, 27,246,211, +219,182,109,235,144,102, 84, 84, 20,154, 55,111, 94,229, 8,237, 21,219, 92,221,239,188,219,176, 61,250,182,109,187,187,206, 52, +239, 52,157,148,234,105, 73, 53,169, 38,213,252,215,106,114,116,127, 82, 77,170, 73, 53,239,161,230, 3, 5, 75,119, 1,133, 66, +169,234, 1,147,238, 2, 10,133, 66,169, 29, 76, 53, 46,212,153,158, 59,181,113,178, 23,168, 38,213,164,154, 84,147,106, 82, 77, +170,249,208,105,214,164, 93,215, 61,135, 31, 72,104,248,148,106, 82, 77,170, 73, 53,169, 38,213,164,154, 15, 29,180,138,144, 66, +161, 80, 40, 20, 10,165,142,145,209, 93, 64,161, 60,220, 68,223,225,131, 86,244,109, 99,131, 62,220,233,164, 80, 40, 20,128, 70, +176, 40, 20, 10,133, 66,161, 80,168,193,162, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,229, 33,131,161,187,128, + 66,121,184,137,166,109,176, 40, 20, 10,165,206,161, 17, 44, 10,133, 66,161, 80, 40,148, 58,198,214,139,208,254,125,125, 52,170, + 69,161, 80, 40, 20, 10,229, 94,243, 64,121, 17, 25, 53, 86, 20, 10,133, 66,161, 80,254, 33, 60, 48, 94,132,173,194, 57, 82, 40, + 20, 10,133, 66,161,220,107, 30, 24, 47,194, 62,136,174,145, 66,161, 80, 40, 20,202,191,146, 7, 54,130, 69,163, 88, 20, 10,133, + 66,161, 80,238, 23, 15,140, 23,145, 61,104,142,145, 66,161, 80, 40, 20,202,191,146, 7,202,139,220,237, 97, 26,232,155,198,169, + 38,213,164,154, 84,147,106, 82, 77,170,249,208, 65,199,193,162, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,133, + 26, 44, 10,133, 66,161, 80, 40,148,135, 10, 25,221, 5, 20,202,195, 77,244,191,228, 29,125,209,244, 93,130, 20, 10,229, 95, 4, +141, 96, 81, 40, 20, 10,133, 66,161,212, 49, 12,170,238, 9,112,193, 9,157,218,244, 38,184, 64, 53,169, 38,213,164,154, 84,147, +106, 82,205,135, 78,179, 38,237, 11,160,220, 21,227, 69, 53,169, 38,213,164,154, 84,147,106, 82,205,135, 79,243,129,130, 86, 17, + 82, 42, 34, 67,245,109,243,106,154,127,175, 52, 41, 20, 10,133, 66,249, 71,223, 76, 41, 20, 27, 93, 0, 12, 44,253,189, 29,192, +113, 39,231,223, 43,205,251, 66, 84, 84,148, 70,173, 86,247,221,191,127,191, 34, 62, 62, 30, 39, 78,156, 32, 63,252,240, 3,111, + 50,153,254,136,141,141, 53,210,226,243, 96,208,182,109,219, 39, 24,134,153, 10, 0,132,144,207,206,156, 57,179,251, 14,228,152, +198,141, 27, 79, 80, 42,149, 3,228,114,185,191, 40,138,140,217,108,206, 48, 26,141,123,210,211,211,231,163,118, 13,247, 59,120, +121,121,141,141,140,140, 12,191,118,237, 90,106, 74, 74,202, 58, 0,187, 1, 60, 17, 28, 28,252, 98, 88, 88, 88,208,197,139, 23, + 47,231,228,228, 44, 7,240,191,251,152, 78, 10,133, 26, 44, 7, 96, 61, 61, 61, 31,215,104, 52, 19,245,122,125,148,155,155,219, + 69, 65, 16, 22,103,102,102,110,167, 39,222, 3, 85, 22, 6, 18, 66,228, 0,192,113,220,144,142, 29, 59,134, 48, 12, 35, 49, 12, + 67, 8, 33,204,201,147, 39,219,138,162,200, 2, 0,195, 48, 3, 75, 47,222, 66,109, 53, 5, 65, 96, 78,159, 62,237,172,230, 93, +161, 69,139, 22,179, 9, 33,254,213,238, 32,153,172,253,190,125,251,154,109,217,178, 69, 88,183,110, 93,254,200,145, 35,117, 47, +191,252,178,108,205,154, 53, 95, 3,248, 79,197,229,155, 55,111,190,128,101, 89, 47, 71,182, 47, 73, 82, 78, 92, 92,220,127,105, + 49,188,255, 48, 12, 51,245,181,185, 7,123, 72, 4,248,110, 90, 79,182,212,188,212,214,172,125,255,212, 83, 79, 61,219,180,105, + 83,153, 36, 73,224,121, 30,102,179,185, 89,108,108,236,163,187,119,239,110,159,148,148,244,140,147,146, 3,167, 77,155,182,114, +214,172, 89,222,114,185,156,225,121,190,243,143, 63,254,216,111,236,216,177,103,151, 47, 95,222,102,196,136, 17,174,182,233, 31, +125,244, 81,255, 57,115,230,188, 3, 96,227,125, 72, 39,133, 66,111,170,213,205,212,233,116, 77,188,189,189,223, 45, 44, 44,236, +223,190,125,251,130,209,163, 71, 95, 61,119,238, 92, 92,100,100,164,126,245,234,213,159,242, 60,191,212,211,211,243,143,194,194, +194,249, 89, 89, 89,113, 78,110,187, 9,128,209, 0,250, 3, 8, 4,144, 1, 96, 39,128,149, 0,226,107,147, 25,127,127,255, 86, + 46, 46, 46, 83, 24,134,233, 92, 92, 92, 28,232,226,226,146, 65, 8, 57, 89, 84, 84, 52,239,198,141, 27,177,181,209, 12, 8, 8, +104, 4,224,109,153, 76,214, 93, 20,197,134, 28,199, 37,139,162,120, 68, 20,197, 37,153,153,153,151,107,163,249, 72,160,110,144, +164,115,155,207,115,154, 32,189, 73, 80,232, 84, 50, 94, 46,153, 82,165,226,252,105,167, 82,139,127,249, 39, 20, 12,165, 82,201, +174, 91,183,174,141, 82,169, 4, 0, 88, 44, 22, 68, 70, 70,222,209,123,162,228,114, 57, 59,111,222,188, 54, 10,133, 2, 0, 96, +181, 90,209,187,119,239,127,196,187,167, 24,134, 9,140,137,137,113,183,165,173, 34,162, 40, 98,200,144, 33,161, 74,165, 18,203, +151, 47, 23,114,114,114,162,190,251,238,187,152,175,191,254,218,235,251,239,191, 31, 94,153,193, 98, 89,214,171, 42, 77, 81, 20, + 97,181, 90, 33, 8, 2, 44, 22, 11,122,245,234, 69,175, 70,255, 16, 8, 33, 33, 4,192,206,115, 38, 0,168,127, 39, 90, 26,141, + 38, 98,232,208,161,178,236,236,108,200,229,114, 88,173, 86,220,184,113, 3,141, 26, 53,226, 44, 22, 75, 83,103,245,154, 53,107, + 54,118,206,156, 57, 62, 59,118,236,176,174, 95,191,222,252,216, 99,143, 41, 94,125,245, 85,183, 30, 61,122,116, 15, 12, 12,100, +191,251,238, 59,243,222,189,123,173, 47,188,240,130,106,246,236,217, 62, 59,119,238,124,246,252,249,243, 27,239,117, 58, 41, 20, + 74, 53, 6, 75,167,211, 29,210,233,116,141,223,120,227,141,248,241,227,199,255,161,211,233, 68, 0,184,113,227,134,106,200,144, + 33,217,195,134, 13,187,105, 48, 24,184,165, 75,151, 6,127,245,213, 87,123,116, 58, 93,186, 94,175,239,232,200,189, 12,192, 68, +150,101,223,238,219,183,239, 33,158,231,179, 55,111,222,252,211,240,225,195,187, 73,146,228,178,127,255,254,223, 69, 81,252, 6, +192, 23, 78, 68,199,184,176,176,176,104, 47, 47,175, 73,203,150, 45, 83, 53,108,216, 16, 90,173, 22, 69, 69, 69,193,151, 47, 95, + 14,154, 56,113,226, 96,141, 70,179,216,221,221,253,131,216,216, 88,222,209,123,174,191,191,255,127, 92, 93, 93, 63,249,244,211, + 79,213, 45, 90,180, 96,180, 90, 45,146,146,146, 90, 30, 63,126, 60,242,219,111,191,125,149,101,217,153,233,233,233, 14,167,179, + 39, 32, 51, 55,246,222,237, 26,218,178,215,242,149,223, 50, 94, 46, 90,200, 24, 6,188,213, 42,207, 50, 24,195,222, 26, 55,230, +167,206,170, 75,199,138,228, 89,125,226,226, 96,189,199,101, 65, 0,176,157,227,184, 33, 74,165,146, 29, 50,100, 8,246,238,221, +203,152, 76, 38, 25, 0,168,213,106, 97,200,144, 33,208,104, 52,176, 88, 44, 18, 74,170,243, 4, 0,170,210,245,205,213,105,202, +229,114,182, 87,175, 94,134,211,167, 79,231, 26, 12, 6,185, 77,179, 87,175, 94,245, 84, 42,149,150,231,121, 71, 53,239,166,169, +196,149, 43, 87,110, 51, 66, 55,111,222, 68,110,110, 46,204,102, 51,147,151,151, 7, 81, 20, 97, 54,155,179, 69, 81, 4,203,178, +182, 50, 93, 41, 10,133, 2, 9, 9, 9,183, 77,183, 90,173, 48, 26,141,224,121, 30,133,133,133, 26,181, 90,221,184, 91,183,110, +105, 0,182,232,245,250,249,231,206,157, 75,166,151,167,251, 70,202,239,103, 76,193, 0,172, 0,174,221,161,113,151, 0,224,200, +145, 35,200,202,202, 66,118,118, 54,178,179,179, 17, 20, 20, 4, 66,136,211,209,255,248,248,248, 69,109,219,182,101,206,158, 61, +187, 13,192,202, 77,155, 54, 13,189,117,235,214,178,201,147, 39,215,155, 55,111,222,173, 41, 83,166,140, 3,240,219,166, 77,155, + 94,105,213,170,213,160,243,231,207,127,121, 63,210, 73,161, 80,170,105,228, 78, 8,241,111,210,164,201,173,133, 11, 23, 54,155, + 54,109, 90,125,189, 94,207,149, 70,137, 76, 0, 96, 48, 24,184,169, 83,167,122,207,157, 59,183,153, 74,165,202, 19, 4,193,187, + 18,153,202,186, 90,190,237,230,230, 54,248,234,213,171,155,154, 53,107, 86,111,206,156, 57,103, 92, 92, 92,200,151, 95,126, 25, +219,168, 81, 35,191,228,228,228,181,110,110,110,189, 1, 76,170, 34,105,183,105,134,134,134,126, 52,124,248,240, 73,199,142, 29, + 83,181,110,221, 26,174,174,174,224, 56, 14, 30, 30, 30,232,212,169, 19,115,248,240, 97,213,128, 1, 3, 38, 20, 20, 20,204,115, + 84, 51, 32, 32, 96, 82,191,126,253, 62, 61,125,250,180,166, 79,159, 62,140, 82,169, 68,126,126, 62,148, 74, 37,186,116,233,194, + 44,251,122,137,166,101,139,230, 31, 5, 6, 6,206,114, 84,211,220,196,107,207,200,241, 83,123,111,223,185,155,241,245,245,197, +213, 47,102,225, 72,143, 72, 36,126, 60, 13,126,126,126,216,182, 99, 23, 51,112,212,248,110,110,188,239,126, 71, 53,235, 0,123, +205,227,145,145,145, 49,113,113,113,232,222,189, 59,126,250,233,167,214,147, 39, 79, 30, 63,121,242,228,241, 63,253,244, 83,235, +238,221,187, 35, 46, 46, 14,145,145,145, 49, 40,105, 43, 53, 30,192,173,210,207,248,234, 52, 15, 29, 58,132,222,189,123,231,109, +218,180,169,209,140, 25, 51,102,207,152, 49, 99,246, 79, 63,253, 20,214,187,119,239,188, 67,135, 14, 57,171,121, 55,242, 94,102, +168, 42,126, 8, 33,144, 36, 9, 62, 62, 62, 55,119,236,216, 65, 6, 14, 28,200, 53,104,208, 32, 99,200,144, 33,170,147, 39, 79, + 18,134, 97,182, 59,147, 78, 66, 8,140, 70, 35,140, 70, 35,174, 93,187,166, 89,188,120,113,183, 73,147, 38, 53,249,241,199, 31, + 3, 38, 76,152, 48,206,205,205, 45,182,117,235,214, 33,247, 58,239, 84,179, 44,242,120,163,212, 92, 21,179, 44,155, 82, 91,205, + 97,195,134,181, 12, 9, 9,241,253,241,162, 39,242, 20,205, 32,202,221, 33, 41, 60, 32,214,239,128, 68, 69, 63,248,251,251,251, + 6, 7, 7,119,113, 50,157,123,206,158, 61,219, 31,192,114, 0, 34,128,159,167, 76,153,242, 58,195, 48,191, 76,153, 50,101, 12, +128,159, 75,167,175, 58,127,254,252, 32, 0, 7,238, 83, 58,105, 89,162,154,117, 10, 33,164, 3, 33,228,201,210, 79, 71, 66, 72, +167, 10,255,149, 21,150,123,172,138,239, 39, 43,252,239, 80, 97,189, 14,117,109,176,136,221,199,246, 68,195,127,254,249,231, 39, +190,253,246,219,189,153,153,153,126, 97, 97, 97, 79, 14, 29, 58, 52,164,176,176,144, 29, 54,108, 88,168,159,159,223,192, 3, 7, + 14, 52, 24, 54,108,216,254,225,195,135, 31,103, 24,198,145,118, 51,141, 56,142,123,231,236,217,179, 71, 67, 67, 67,173, 25, 25, + 25,174,109,219,182, 45, 2,128,240,240,112, 67,110,110,174,198,213,213, 21, 59,118,236, 56,197, 48,204,104, 0,205,106, 18,244, +243,243,107,235,229,229, 53,233,147, 79, 62, 81,113, 28, 87,233, 50, 42,149, 10,159,124,242,137,202,205,205,237, 13,127,127,255, +206, 53,105,250,250,250, 70,184,186,186, 70, 47, 94,188, 88,109,177, 88, 96,181, 90,225,235,235, 11,157, 78,135,204,204, 76,164, + 95,191,142,155, 73, 73,152,240,218,107, 26, 23,141,230, 29, 63, 63,191, 54, 53,105,118, 11,209, 13,209, 5, 52,127,244,173,183, + 39,226,210,196,215,176, 55, 64,137, 6,111, 79, 69,235,131, 23, 16, 56,115, 62, 14,132,185, 33,230,153,199,241,206, 59,239, 66, +225, 19,246, 72,151, 64,151,145,247, 37,164, 41,147, 17,149, 74, 5,147,201, 36, 59,114,228, 72,119, 65, 16,228,130, 32,200, 15, + 31, 62,252,232, 31,127,252,209,127,206,156, 57, 79,104, 52,154,113,157, 59,119,254,158, 97,152, 69,132, 16, 13, 33, 68, 3, 96, +158, 93,228,233, 54, 77,185, 92, 14,163,209, 40, 63,125,250,244, 24, 81, 20,149,162, 40, 42, 79,159, 62,253,230,129, 3, 7, 94, + 92,190,124,185,211,154,247, 10,142,227, 32,147,201, 32,151,203,209,166, 77,155,171, 27, 54,108,224,253,253,253,101, 43, 86,172, +240,244,241,241,113,249,254,251,239,243,243,242,242, 62,119, 70,211, 98,177,192,108, 54,195,104, 52,226,200,145, 35, 13,223,120, +227, 13,153,197, 98, 17, 71,141, 26,117,139,231,121,243,155,137,186,117,110, 0, 0, 32, 0, 73, 68, 65, 84,111,190,233,166,211, +233,222,165,207,127,247, 7, 66,136, 8,160, 24,128,158, 16, 98, 6,128,144,144, 16,149,191,191,127,171,144,144, 16,135,203,163, + 94,175,255,102,193,130, 5,129,172,202, 3, 71, 45, 3,176,137,204,194, 30,143,175,145, 29, 58, 25,190, 65, 77,208,175, 95, 63, + 31,134, 97,150,212, 65,146,183, 0, 24, 14,224,215,218,172,124,183,211,217,190,125,251,238,237,218,181, 59, 29, 21, 21,149,217, +174, 93,187,211,237,219,183,239,126,167, 25,158, 57, 6,143,205,125,139, 77,155, 53, 22,100,238, 91,108,218,204, 49,120,140,150, +220, 7,227,244,171,232, 69,236,240,102, 24,102, 59,195, 48,219,167, 79,159,222, 11, 64,253, 10,255, 31,177, 95, 14,128,178,178, +111,219,199,110,186, 55, 33,228, 73,187,245,188,235,236,126,106,247,187,210,106, 14,111,111,111,203,123,239,189,119,214,100, 50, + 93,248,254,251,239, 27,143, 31, 63,190,109, 72, 72, 72,194,176, 97,195,126,215,106,181,130,173,141,142,131,188, 54, 96,192,128, + 29,245,234,213, 99,114,114,114, 20, 22,139, 69,118,227,198, 13,133, 40,138, 12,199,113,196, 96, 48,200, 18, 19, 19,229, 86,171, + 85,234,220,185,243,214,227,199,143,143, 6,240, 78,117,130, 90,173,246,205, 21, 43, 86,168,171, 50, 87,162, 40, 66,175,215, 67, + 16, 4,204,156, 57, 83, 61,105,210,164,137, 0, 78, 84,167, 41,151,203, 39, 44, 92,184, 80,109,171, 2,146, 36, 9,177,177,177, +200,185,121, 19,230,162, 66, 88,138, 10, 97, 41,200, 3,171, 47,192,139,253,159, 80, 47,255,117,243,127, 1,188, 88,237, 77, 85, +165,155,251,253,202,111, 33,138, 34, 50, 54, 87,222, 36,226,214,177,131, 16, 5, 30,179, 63,155,199,188,243,218,136, 57, 64,241, +166,127, 74,169, 87, 42,149,236, 23, 95,124,209, 76,169, 84,130, 97, 24, 98,177, 88,208,162, 69, 11,230, 14, 53,185, 69,139, 22, +181, 85, 40, 20,140, 77,179,101,203,150,204, 63,237,140, 87, 40, 20,208,104, 52, 8, 13, 13, 53, 14, 26, 52,232,248,162, 69,139, +130, 57,142,211,202,100,178, 93, 5, 5, 5,115, 46, 93,186,228, 84, 53,146,217,108,134,201,100,130,201,100, 66, 74, 74, 74,131, +198,141, 27, 51,255,249,207,127,196,226,226,226,176, 85,171, 86, 93,217,180,105,147,118,201,146, 37,195, 0,188, 77,175,183,247, +150, 70,141, 26, 41, 1,184, 7,215,151, 21,203, 57, 20,103, 10,130,111, 64, 64,192, 84, 65, 16,218,135,135,135,123, 38, 38, 38, +230,249,251,251,159, 96, 89,118, 99, 90, 90, 90,102, 13, 70,141, 17, 4, 1, 99, 58,230, 99, 92,103, 22,130, 32, 32, 63, 63, 31, + 41, 41, 41,184,120,241, 34, 78,158,188, 88,171, 52,134,134,134,190,166, 86,171,251, 42,149,202, 80, 81, 20, 89,131,193,144,108, + 54,155,247,102,100,100,124, 83,197,141, 9,247, 35,157,118,250,243,135, 14, 29,234,239,238,238,142, 51,103,206,248,159, 59,119, +110, 62,128,246,119,116,237,144,179,223,141,122,125, 73, 64, 61, 15, 15, 36,197,109, 11,216,178,243,199,239, 0, 41,144,150,224, + 7,130,170,238, 1,217,132,144,129,165, 1,160,237,115,230,204, 25, 88, 90,190, 6,218,255,119,160, 60,222,182, 28,195, 48,219, + 43,155, 94,151, 6,139, 84,147, 49,168,213,106,113,236,216,177, 9, 91,183,110, 13,109,223,190,253, 95, 85, 53, 6,174,129,174, +205,154, 53, 75, 62,117,234, 20,241,246,246,182, 72,146,196,104,181, 90, 81,163,209, 72, 5, 5, 5,224,121,158, 36, 39, 39,203, + 82, 82, 82, 20, 94, 94, 94, 10, 0, 53,134,234,228,114,121,151,134, 13, 27, 86, 25, 41,208,235,245, 40, 42, 42,130,217,108,134, +175,175, 47,195,178,108,167, 26,195,122, 44,219,173, 89,179,102, 76, 94, 94, 30,252,253,253,113,244,232, 81,232, 11,242, 97, 46, + 42,130,185, 32, 31,214,194, 2,136,133,249,200,191,153,137, 80,191, 64,134, 97,152, 46, 53,105, 10,156, 38,196, 71,231,130,196, + 89, 83,209, 33, 54, 25,140, 92,129, 83, 45,253, 64,248,146,166, 86, 29,207,103,128, 81, 40,241,215,132,151,209,224,249, 55,192, +179,170,128,251, 81,178, 5, 65, 96,204,102, 51,212,106,181,208,189,123,247, 35, 28,199, 61,170, 84, 42,217,113,227,198,225,198, +141, 27,229, 78,128,113,227,198, 65,163,209,192,108, 54, 11, 0, 38,163,138, 54, 83,130, 32, 48, 60,207, 67,163,209,240,237,219, +183,255,134,227,184, 55,149, 74, 37,215,180,105,211,172,185,115,231,102,184,184,184,184,164,164,164,220, 82, 42,149,105,161,161, +161, 29, 53, 26, 77, 72, 77,154,247, 18,149, 74, 5,153, 76, 6,150,101, 81,191,126,253,226,220,220,220,147,215,174, 93,123,174, + 54, 90,162, 40,194, 98,177,128,231,121,152, 76, 38, 72,146,132,115,231,206, 65,165, 82,201, 69, 81,188, 40,138,162, 86, 46,151, +131,227, 56, 58, 70,221, 61, 38, 42, 42,234,209, 80, 13,230,143,243, 51,123, 54, 26,232,162,215,170,184,226,103, 55,243, 29, 30, +123,236,153, 39, 38, 79,158,170,243,242,242, 82, 94,191,126,221,244,229,151, 95, 54,252,237,183,223, 24,148,180, 19,173,146,140, +140,140, 95,230,206,157, 91,239,209, 71, 31, 13,147,203,229, 76,126,126, 62,178,179,179,113,243,230, 77,164,164,164,144,164,164, +164,171,130, 32,252,228, 76, 26, 91,181,106,181,106,224,192,129,163, 90,180,104, 33, 39,132,128,231,121, 24, 12,134,182, 39, 79, +158, 28,124,244,232,209,238,215,175, 95,119,186, 92,102,102,102,254,244,217,103,159,185,244,236,217,179,153, 92, 46,103,235, 34, +157, 21,110,104,254, 58,157, 14,123,247,238,133,155,155, 27,106,234,173,235, 8, 86, 65, 10,168,231, 81, 31,166,203, 11,224,239, + 22, 2,171, 32, 5,208, 18,252, 64, 69,177,152, 74, 76,208,255, 8, 33, 79,222,169, 25,186, 91,102,170, 86, 17, 44, 27, 55,110, +220, 80,233,245,122,153, 36, 73,172,217,108,150, 75,146, 4,185, 92,206, 59,185,189, 22, 67,135, 14, 61,209,161, 67, 7, 67,105, + 4, 67,112,119,119, 23, 10, 10, 10, 80,106,176, 36,153, 76,102,210,233,116,166,176,176, 48,192,129, 42, 66,163,209, 24,172,209, +104,110,155,110, 48, 24,160,215,235,203, 12,150,193, 96,128,155,155, 27,138,139,139,107, 60,185, 69, 81, 12,213,106,181,200,200, +200, 0, 0,232,243,243, 96, 42, 44,132,181,168, 0,214,252, 60,240, 5,249,224, 11,242,192, 26,141,240, 8, 12,130, 32, 8, 65, + 53,105, 22,155, 69, 37, 7,130,155,219,127,129,239,155,147,171, 92,238,214,145, 3,208, 53,110, 10,163,209,122, 63,198, 40,235, +114,241,226,197,118,205,155, 55,199,144, 33, 67,240,204, 51,207,156,211,104, 52, 62, 75,150, 44,105,145,158,158,126,219,194, 79, + 61,245, 20,222,126,251,109, 12, 29, 58,116,237,217,179,103,151, 86,167,217,179,103, 79,244,234,213,171,222, 51,207, 60,147,164, +211,233, 98, 86,174, 92,217,113,230,204,153, 89, 6,131, 33, 61, 38, 38,166, 85, 90, 90,154, 54, 60, 60,252, 96,100,100, 36,187, + 99,199,142,144, 26, 52,239,181,233, 4,207,243,176, 90,173, 48,155,205, 32,132, 56, 28,101, 35,164,124, 64,129,231,249,178, 30, +132, 38,147, 9, 60,207, 51, 91,182,108,198,182,109,219,216,184,184, 75,129,211,166, 77, 71,126,126, 62, 68, 81,164,151,217,123, + 68,187,118,237,250,203,136,180, 98, 68, 3, 94,253,130,175,160,151,177, 68,127,249,219, 15,138,207,121,200,204,230, 98,198,245, +253, 15, 62,240,188,114,229,138,245,179,207, 62,203, 28, 50,100,136,250,245,215, 95,111,190, 99,199,142,238, 65, 65, 65,223,166, +166,166,230, 87, 21,248,236,220,185,243, 9, 79, 79,207, 70,235,215,175,207,202,200,200,168,199,243,188,214, 98,177, 88, 45, 22, +203, 21,171,213,122,212, 98,177,236,189,113,227, 70,140, 51,105,213,233,116,173, 71,142, 28, 41,207,203,203,131, 76, 38,131,213, +106, 69,118,118, 54,162,162,162,184,125,251,246,181,168, 77,254,227,226,226, 22,228,231,231, 31,220,182,109, 91, 95, 23, 23,151, +118, 74,165,178,129, 40,138,162,201,100,202, 50,153, 76,103,107,147,206, 10, 55,180,140,216,216, 88,127, 87, 87, 87,164,167,167, +131, 97,152,140, 59, 61,102, 10, 57,155,154,244,215,214, 32,127,183,134,136,143, 63, 1,133,156, 77,165, 35, 6, 61,216, 17, 44, +187,182, 82, 3,107, 48, 73,198,105,211,166,189,199, 48,204,246,105,211,166,189, 87, 77, 4, 75,180, 95,206,110,249, 58,123,168, +175,246, 38, 94, 84, 84, 36,251,223,255,254, 87, 63, 37, 37, 69,215,160, 65, 3, 67,100,100,100, 62,195, 48, 68, 20, 69,246,214, +173, 91, 46,105,105,105,106, 79, 79, 79,115, 80, 80, 80,129,131,219,187,252,214, 91,111,245,156, 49, 99, 70,204,227,143, 63,158, + 3, 0,121,121,121,200,206,206,182,245,210, 66, 70, 70, 6,123,250,244,233,122,187,118,237,106, 11, 7,122,240,104, 52,154,148, +162,162,162,166, 30, 30, 30,101, 55, 52,155,169,178,255,182, 90,173, 40, 42, 42,130,139,139, 75,141, 39, 55,203,178,233,233,233, +233,141,141, 70, 3,146, 19, 19, 97, 46, 42,128,181,176, 0,124, 97, 62,248,252,124,136,249,183,192,234,139,160,211,104, 80,116, + 43, 23, 28,199,221,168, 73,211, 69,197, 89,120, 65, 84,122,247, 27, 12, 48, 85,223,159, 61, 58,117, 3,137,104, 13,141,230, 87, +254, 30, 23,106, 25,128,129,182, 49,169, 52, 26, 13, 62,253,244, 83,196,196,196, 72,213, 85, 3, 43,149, 74,176, 44, 43, 58,162, +169, 82,169, 52, 51,102,204,208,156, 61,123, 86,173, 84, 42,161,211,233,180,103,207,158,109,245,231,159,127,178, 6,131,129,107, +220,184,241,208,128,128, 0,125, 13,154,119,213, 72, 85, 54, 77,175,215,151,181,155,186,117,235,150, 76,173, 86,135,119,239,222, +253,184,197, 98,249, 73, 16,132,213,177,177,177,133, 85, 62,105, 91,111,239, 12, 42, 73, 18, 4, 65,128, 32, 8,144,201,100,210, +150, 45, 91,241,213,210, 69,248,121,211,175,164,103,207,158,204,142, 29, 59, 32, 73, 82, 26,189,206,222, 27, 36, 73,154,127, 96, +234,211,106,136,162,222,124,112, 67,241,238, 92, 89,241,183, 23, 14,156,206,229,205,170, 38, 77,194, 34,220, 92,221,217,239,215, +125,123, 43, 51,235,234,229,175,190, 74, 11,154, 61,123,182, 71, 88, 88,152,123, 66, 66, 66, 0,128,252, 42,140, 80,232,203, 47, +191,252,234,173, 91,183,228, 43, 87,174, 92,147,158,158,126, 24,192,213,138, 65, 51,148,180, 51,148, 3,240, 69, 73, 15,218, 61, + 0,214, 86, 99, 86, 36,134, 97,112,240,224,193,219,122,251, 73,146, 84,107,135,145,153,153,153,215,169, 83,167,214,151, 47, 95, +222,146,159,159,191,190,146,235,236,224,200,200,200,103, 79,157, 58,245, 33,128, 43, 78, 70,176,222,137,139,139,251, 92,146,164, + 16,150,101,147, 9, 33, 83,238,244,152, 89,172,210,235, 91,119,110, 90,105,225,197, 96,165,156, 75,177, 88,165, 55,104, 73,126, +224,177,181,145,130,189,113,170,196, 24,253, 57,103,206, 28,205,220,185,115, 49,103,206,156,139,149, 69,176,108, 70,107,206,156, + 57, 23,109,203,217, 45,127,184,174, 13, 22, 83,201,141, 69, 55,125,250,244,174,109,219,182,205,120,244,209, 71, 51, 27, 54,108, +104,176,205,211,106,181, 22, 15, 15, 15,139,217,108, 86,101,100,100,120,255,245,215, 95, 13, 37, 73,210, 56,176,189,253, 30, 30, + 30,245, 78,159, 62, 93,127,227,198,141, 77, 98, 99, 99, 67,158,127,254,249,158,102,179, 25, 22,139, 5,215,174, 93, 11, 89,177, + 98,133,164, 80, 40,242, 25,134,249, 31, 74,122,195, 84, 11,207,243,199, 47, 95,190, 28,222,169, 83, 39,134,231,249,114,166,202, +254,183, 82,169, 68,122,122, 58,145, 36,233,164, 3,233, 60,113,250,212,169,198, 45,155, 55,135,185, 32, 15,150,194,124, 88, 11, +242, 33, 20,228, 67, 42,204, 7,171, 47, 66,253,122,114,104, 52, 46,184,156,145,137,210,180, 86,139, 92, 48, 38,165, 23, 20, 54, +109, 28,253, 5, 14,132,185,129,240,214,178,106, 65, 0,101,213,133,143,252,149,141, 35,127, 30,135, 76, 52,167,223,207,146,108, +177, 88,164, 97,195,134,157, 98, 89,182,206,222, 55,197,243,188, 52,126,252,248, 50,205,212,212,212, 91,169,169,169,106,163,209, +200,234,116, 58,253,253, 62,123,121,158,175,212, 32, 89, 44, 22, 24,141, 70,100,102,102, 42,247,236,217,211,253,248,241,227,138, + 75,151, 46,225,248,241,227,109,182,108,217, 50,189, 89,179,102,173,227,227,227,111, 56, 98,218, 36, 73,130,237, 62, 72, 8, 1, + 33,132, 3,128,173,191,109, 71,191,126,253,152,162,162, 34,108,219,182,173, 78,170, 81, 40, 14, 83, 12, 65,212, 88, 14,109, 40, +126, 55, 81, 89,120,209, 32,251, 36, 38, 38,102,247,128, 1, 3,142,248,251,134,185, 1,128, 74,161,243,230,136,171,206,219,219, + 91, 5, 0,254,254,254,237,120,158, 95,154,158,158,222,173, 50,193,167,158,122,234, 17, 31, 31,159,182, 59,119,238, 60,155,158, +158,126,164, 18,115,133,166, 77,155,206,188,112,225, 66,127,185, 92,206,216, 93,252, 73, 85, 6,107,216,176, 97, 77,149, 74,101, +253, 29,151,221, 81,168,104, 12,137,205, 7,225, 84, 16, 61, 90, 35, 89,209, 2,190,190,127,213,215,106,181,109,174, 94,189,122, +214,201,252, 7,143, 24, 49,226,247, 85,171, 86, 69,244,235,215, 79,121,236,216,177,219, 12, 86, 68, 68,196,176,125,251,246, 13, + 31, 55,110, 92,235,245,235,215, 15, 2,144,232,168,120,108,108,236, 49,148,188,177,161,206,248,232, 27,236, 5,196,144,210, 64, + 4, 45,193, 15,120,244,170,148,108,187,232, 83, 54, 0,166,194,255,179,165,231,144,133, 16, 98, 91, 54,219, 46,106,101,169, 16, +245,170,108, 94, 54,195, 48,117, 22,220,144, 85,243,228,189,231,218,181,107, 29, 70,140, 24,145,109,111,174,236,171, 71,116, 58, +157,217,205,205, 77,127,234,212, 41,127, 81, 20, 15, 58,176,189,149,251,246,237, 59,176,120,241,226, 13,245,234,213,227, 95,124, +241, 69,118,234,212,169, 71,114,115,115, 73,110,110, 46,150, 44, 89,210,163,123,247,238, 71,146,147,147,197,152,152,152, 87, 0, +244,171, 73,208, 96, 48,124,253,230,155,111, 62,123,228,200, 17,181,197, 98, 65,126,126,254,109,209, 43,158,231,193,113, 28,150, + 46, 93,106, 46, 46, 46, 94,228, 64, 36,227,155,175,191,254,122,248,138,175, 22,171,101,188, 21,134,252, 60,136,165, 31,206, 84, + 12,157,154, 69,227,182,222,200,207, 80, 97,221,206, 99, 70, 65, 16,190,174,209, 96,153,244,147,199,141, 25,189,125,207,254, 3, +168,223,173, 55,114, 14,236,186, 61, 26,228,237, 11,139,213,138, 79,102, 69, 19,198,152, 63,245, 94, 7,112, 0,108, 47, 29, 77, + 29, 0,182,159, 61,123,246,120,155, 54,109,250, 91, 44,150,234,140, 24, 36, 73,226,106,163,169, 82,169,210,154, 54,109,186,191, + 81,163, 70, 67, 1,160,121,243,230,191,177, 44,219,187, 6,205,187,106,176,102,204,152,129,185,115,231, 98,218,180,105,101, 6, +201,246, 0, 96, 54,155, 27,238,218,181, 75,121,236,216, 49,178,110,221,186,156,167,159,126,218,227,249,231,159,247, 88,191,126, +253,127, 0, 76,173, 74,115,202,148, 41, 88,190,124, 57,198,142, 29,123,219,124,142,227,164,244,244, 52,152, 45,102,178,117,235, +214, 12,153, 76,230,249,229,151, 95,106, 38, 77,154,196,208,107,237,189, 65, 20,197,247,187, 45,216, 50, 17,208,240,130, 32, 44, + 58,127, 62,230, 96,105,212,198,103,193,130, 5, 74, 0,248, 98,222, 23,114, 66,136,220, 54, 48,236,199, 31,127,172, 30, 51,102, +140, 79, 85,154,191,252,242, 75,222,199, 31,127, 92,255,245,215, 95,239,119,224,192, 1,245,169, 83,167,118,161,228, 45, 5, 57, +165,142,192, 43, 33, 33,225,152,183,183,183,223,166, 77,155, 26,247,237,219,215,165, 70, 23, 88, 92,252,237,178,101,203, 66,231, + 31,118,197,142,226,161, 72, 37,207,128,212, 35,168,167, 40, 66,115, 93, 10,122,250,165,250,175, 95,191,126, 37,128,118, 78,100, +191,197,211, 79, 63,189,121,213,170, 85, 13, 71,143, 30,157,118,236,216,177, 84, 0, 51, 43, 46, 20, 19, 19,147,251,242,203, 47, + 39,175, 89,179,166,177, 36, 73,187, 55,108,216,208, 15,192,101, 90,122, 40,247,204,121, 57, 16,200,168,205,178,119, 19, 89, 53, + 23,157,215,242,242,242, 34,167, 77,155,246,185,191,191,127,112,116,116,244,245,230,205,155, 23,219,230,231,230,230,234, 14, 29, + 58, 20, 86, 88, 88, 88, 36, 8,194, 40, 0,231, 42,145,105,137,242, 99,101, 36, 75,146,244,121,155, 54,109,158,253,241,199, 31, + 15,185,186,186, 22,158, 56,113,194,205,205,205,173,224,210,165, 75, 46, 28,199, 25,174, 94,189,138,189,123,247,246, 0,240, 85, + 21, 79, 73,229, 52, 51, 51, 51,207, 40,149,202, 47, 38, 77,154, 52,233,195, 15, 63, 84, 75,146, 4,163,209,136,162,162, 34,152, + 76,166,178,198,201, 27, 55,110, 52,155,205,230, 21, 25, 25, 25, 39, 28,208, 60,206,113,220,242, 69, 95, 46, 26,255,198,179, 35, +148, 36, 63, 23, 5,153, 70, 48,166, 98,232,212, 74,180,232, 29,128,226, 92, 6,171, 14,157,182,220,178, 88, 55,101,100,100, 28, +172, 73,243, 88,170,254,247, 78,202,196,189, 31,207,138,126,108,250,234, 95, 33, 73, 18,254,122,243, 69,228, 29,222, 11,109,243, + 86,120,228,175,108, 88, 44, 22, 76,155, 50, 9,156, 33,235,200,201,212,226,159, 29,216,159,117,129,189,230,113,252,253,238, 50, + 1,192,248,115,231,206,141,138,136,136,192,184,113,227,240,212, 83, 79,149, 91,113,243,230,205, 88,182,108, 25,204,102,243, 40, + 0,177, 0,150, 58,163,217,176, 97,195,142, 45, 90,180,224,252,253,253, 13,165,102,163,247,197,139, 23, 59, 68, 68, 68,212,164, + 89,231,121, 39,132,228, 37, 38, 38,186,205,155, 55,143,177, 90,173,152, 57,115, 38,108,198,210, 22,113,122,255,253,247,253, 93, + 93, 93, 49,127,254,124, 75, 78, 78, 78,159,220,220,220,125,139, 23, 47,246,218,184,113,227,115,118, 6,203, 94,243,102, 92, 92, +156,235,242,229,203, 89, 65, 16,176, 96,193,130,219, 34, 90,239,188,243, 14,172, 86, 30,114,153,220, 98, 54,153, 91,104, 52,154, + 43,158,158,158, 26, 73,146,200, 61, 60,238, 15,181,230,249,243,231,247,160,164,106,174, 82,108,237,232,140, 70, 35,114,114,114, +144,147,147, 3,119,119,247,138, 79,219,229, 52,141, 70,227,217, 41, 83,166,196,124,243,205, 55,253,254,252,243,207, 17,135, 15, + 31, 30,176,119,239, 94, 83,114,114,178,192,243, 60,241,243,243,147,117,235,214, 77, 61, 96,192, 0, 23,149, 74,197,190,255,254, +251, 57,159,126,250,169, 23,128,220,170, 52, 9, 33,156, 36, 73,248,111,247, 66, 76,233, 37,131,217, 92,242, 64,153,145,145,142, +139, 23, 47,226,248,241,120, 48, 12,195, 58,185, 63, 23,173, 95,191, 62, 76,169, 84, 50, 27, 54,108, 8,222,176, 97,195,132,154, +118,222,218,181,107, 67, 55,108,216,176, 20,192, 99, 40,105,248, 68,203, 18,213,164, 56, 99,176, 74,185, 40, 8, 66,191,148,148, +148,110,163, 71,143,254, 44, 34, 34,194, 44, 8,130,124,247,238,221,205,114,114,114,148,130, 32, 76,129,243,245,149,203, 77, 38, + 19,134, 12, 25, 50,165, 81,163, 70,251, 98, 99, 99, 91, 63,249,228,147,187, 55,111,222,220, 77, 16,132,171, 23, 46, 92, 24, 5, + 96, 81,169,193,114,136,164,164,164,153,123,247,238,101, 78,156, 56,241,238,180,105,211, 84,222,222,222,140,135,135, 7,140, 70, + 35, 82, 83, 83,201,154, 53,107,204,102,179,249, 43,119,119,247, 15, 28,213,244,246,246,158,122,248,244,105,101,194,149,196, 87, + 94,233,255,184, 58, 56,188, 41,116, 12,160,191,149,139, 67,135, 50,177,250,228, 89, 83,142,197,250, 3,199,113, 14,119,165, 15, +188,146,221,111,207,166, 85, 59, 15,238,223,255,216,236,185,159, 51,254, 47,188, 1,151,144,134,144, 66,155,224,208,193,131,248, +244,227,153,132,211,103, 29,230,175,100, 61,126, 31,203,132,205, 1,168, 0,204,147, 36, 73, 86,250, 52,143,183,223,126, 27,246, +175,206, 89,182,108, 25,140, 70, 35, 0,200, 24,134,153, 7,224, 59, 84, 61,162,123,101,154, 65,191,255,254,123,144,189,102, 68, + 68,132,163,154,117, 74, 86, 86,214, 7,175,189,246,218, 92,185, 92,238, 46, 73,210,109,141,211, 1,192,197,197, 5,133,133,133, + 16, 69, 81,168, 87,175, 94, 60,207,243,144,201,100, 85,158, 71,197,197,197, 31,140, 29, 59,246, 19,134, 97,170,140,116,104, 52, +154,228,163, 71,143, 54,121,254,249,231,217, 77,155, 54, 93,123,238,185,231, 84,127,254,249,167,136, 90,142,105, 68,185,251, 16, + 66, 80, 92, 92, 12, 84, 63, 36, 66,202,143, 63,254, 56, 37, 38, 38, 70, 61,118,236,216,118, 47,188,240,130, 91,175, 94,189,116, +246, 11, 24,141, 70,105,219,182,109,197,203,151, 47,207, 61,124,248,240,255, 94,125,245,213,161, 0,170, 12, 23,103,100,100,252, +190,100,201, 18,247,158, 61,123,134,139,162,136,156,156,156,178, 54, 88,105,105,105, 72, 78, 78, 78,150, 36,105,171,147,217,121, +243,249,231,159,223,177,102,205,154,144,209,163, 71,167,109,220,184,113, 43,128,202,218,212,234,134, 13, 27, 54,120,205,154, 53, + 33, 99,198,140, 73, 1, 48, 1,180, 85, 57,133, 82,167, 12,225, 56,238, 79, 0, 67,156,112,184, 85, 17, 2,224, 19,148,212,155, + 22,148, 58,225,217, 0, 26,213, 86,211,223,223,191, 85,120,120,248, 15, 77,155, 54,189, 30, 16, 16,192, 55,109,218, 52, 57, 60, + 60,124, 83,131, 6, 13,162,106,171,233,231,231,215, 53, 40, 40,104,119, 96, 96, 96, 78,112,128, 63, 9, 12, 12,188, 21, 28, 28, +188, 55, 32, 32,160,103,109, 53, 59, 5,233, 6,118,106, 26, 16,223, 46,178,137, 57,188, 81, 67, 18,213,162,137,185,115,179,160, +132,142,193, 46,195,238, 96,127,222,201, 83, 72,101,168, 0, 24, 72, 41, 12,195,240,109,218,180, 89, 30, 21, 21,181, 52, 42, 42, +106,105,235,214,173, 87, 48, 12,195,219,230, 3, 48,224,239, 65, 65,239,165,230,221,200,123,165,116,235,214,109,237,134, 13, 27, +196,217,179,103, 23,116,238,220, 57,119,246,236,217, 5, 27, 54,108, 16,187,117,235,182,182,182,154,173, 91,183, 14,233,222,189, +251,173,181,107,215, 10,151, 47, 95, 38,107,215,174, 21,186,119,239,126,171,194, 72,238,247, 61,239, 15,163,230,240,225,195, 19, +137, 29, 22,139,133,100,103,103,147,132,132, 4,114,228,200, 17,242,248,227,143, 39, 58,160, 41, 3,208, 11,192,130,192,192,192, + 61, 93,187,118,189,220,189,123,247, 43,141, 26, 53,250, 83,161, 80,172, 7,240, 50, 74,222,119,232,135,146, 97, 73,124,171,211, +244,243,243,235, 18, 17, 17, 49,187,109,219,182, 91, 59,119,238,124,172, 93,187,118,199,155, 54,109,186,189, 97,195,134,115,253, +252,252, 30,169,101,222,131, 71,140, 24,113, 81,175,215,139, 61,122,244,216, 86,217, 74, 81, 81, 81,107,244,122,189,248,194, 11, + 47, 36,160,228, 61,178,180, 44, 81,205,187,161, 73,121, 88, 11,138, 51,163, 56, 63, 32,121, 31, 95,106,114, 12, 40,255,218,154, +154,230,223,107,205,123,178, 63,155, 55,111,238,249,216, 99,143,189,185,117,235,214,119,175, 94,189,250,238,214,173, 91,223,237, +219,183,239,155,205,155, 55,247,188,147,116,182,110,221, 58,164, 91,183,110, 95,117,237,218, 53,173, 91,183,110, 95, 85, 48, 87, +244, 34,126,159, 52, 7, 13, 26,180,115,196,136, 17,137, 35, 71,142,188, 50,114,228,200,196,225,195,135, 39, 14, 29, 58, 52,113, +208,160, 65,137,253,250,245, 75,236,213,171,215,206, 7, 40,239,193, 29, 58,116,248,193,213,213,245,133,202,102, 42, 20,138,193, + 93,186,116,249, 25, 64, 99, 90,150,168, 38, 53, 88,212, 96, 81,205,186,209, 84,161,250,215,213, 84, 54,255,126,104,210,227, 78, + 53,169, 38,213,164,154,212, 96,253, 99,144,209, 93, 64,169, 1,243, 29,206,191, 87,154, 20, 10,133, 66,161,252, 99, 96,170,113, +161,206,244, 14,168,141,147,189, 64, 53,169, 38,213,164,154, 84,147,106, 82,205,135, 78,179,162,246,211, 21,166, 87, 28, 7,114, + 5,181,107,117,115, 96,168, 38,213,164,154, 84,147,106, 82, 77,170,249,240,105, 86,198,232,127,171, 1,162, 47,148,165, 80, 40, + 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,229,159,141, 67,141,220, 21, 10, 69, 36, 33,228, 85,134, 97, 26, 48, 12,115, +131, 16,242,157,213,106,189,248,176,237, 44,133, 66, 17,201, 48,204,171,132,144, 6,132,144, 27, 12,195,220,215,253, 64, 0,102, +102,116,201,104,210, 31, 69,131, 48,213, 15,124, 72,161, 80, 40, 20, 10,229,126, 27,172,144,192,192, 17, 44,199, 44,182,242,162, + 39, 47, 8,236,146, 37, 75,216, 65,131, 6, 97,219,182,109,152,240,246,219, 19, 88,142,149, 20, 50, 89, 30,145,132, 9,201,105, +153, 63, 58,178,177,161, 67,135,102,241, 60, 95,229,168,214, 28,199,221,220,178,101,139,239,157,102,202, 63,234,153, 44,222,106, +173,114, 59, 50,153,252,102,230,217,159, 29,218, 78, 96,160,223, 8,142, 97, 23,243,162,228, 41,138, 18,251,213, 87, 95,149,237, +135,183,222,122,107,130, 92, 38,147, 20,114, 46, 79, 18,201,132,228,180,180, 31,239,213,129,179, 55, 87, 0, 48, 51, 26, 12,137, + 6,168,201,162, 80, 40, 20, 10,229, 31,108,176, 24, 22, 75, 55,124, 51,207, 51,247, 86, 30, 54,110,222,141,136,136, 8, 92,186, +116, 9, 17, 17, 17,232,214,177, 53,251, 68,151, 54, 44,199,194,123,198, 87,235,150, 2,112,200, 88,240, 60,239,243,219,111,191, +129, 97, 24,136,162, 8, 65, 16, 32, 8, 2,120,158, 71, 81, 81, 17, 38, 78,156,232, 83, 23,153,226,173, 86,159,171,255,251, 21, +114,142, 1, 47, 18,240, 2, 1, 47, 72,176,138, 4,133, 6, 1,189,159,124,222,225,237,176, 96,151,126,183,120,158,103,126, 65, + 1,126,221,177,167,220,126,232,221,181, 3,251,204,128, 71, 89,173, 70,225, 61,122,234,103, 14,239,135,186,192,222, 92,149,155, + 22, 77, 13, 22,133, 66,161, 80, 40,255, 88,131,101,225, 69, 79,223,122,238, 88,253,221,119,152, 50,237, 99, 52,107,214, 12,132, + 16, 48, 12,131,247, 62,156,133,133, 31, 79,195,200,254, 61,192, 11,146,103, 53,250,183,117,213,100, 24, 6,215,175, 95,135,209, +104, 44,247,137,140,140,116, 52,205, 14,117,255,148,115, 12,126,143, 45,130,149,151, 96, 21, 74, 63,188,132, 94, 45, 93,157,210, +228, 69,201,211,195, 77,135,149,223, 44,195,148, 89,243,202,237,135,169,239,125,136,175,231,126,128,119,198,189, 4, 11, 47,122, +214, 38,157, 78, 66, 53,169, 38,213,164,154, 84,147,106, 62,168,154, 15,164,193,234, 9,224,160,205, 3,149,153, 11,139, 9, 45, +130,234, 99,217,252, 79, 64,192, 66, 34, 4, 32, 0,145,120, 52,244,210,194,104, 48, 56,189, 65, 73,146, 96,181, 90,193,243, 60, + 86,172, 88, 1,189, 94, 15, 73,146, 16, 17, 17, 1, 0,136,138,138,178,143,192,164,196,198,198,134,212,164,233,221,114, 72, 50, + 8,130,237,167,125, 52,239, 91, 28,139,189, 10, 66, 0,149, 70,139,225, 47,140,129, 40, 17, 88,121,231,223, 79,106, 50, 24,224, +167,147, 99,225,167, 31,130,149, 43,192,130, 1,203, 50, 96, 25, 9,205, 2, 61, 97, 46,121, 57,241, 61,229,163,104,144,138, 81, +172,143,162, 65,162,105,153,166, 80, 40, 20,202,191,147, 74,189,200,191,221, 96, 29,172, 44, 51, 22,147, 17,129,158, 10, 52,208, +185, 67, 16, 68, 92,180,250,161,200, 96,130,213,202, 35,217,106,197,149, 51,153,120,228,145, 71,192,243,188,104,181, 90,161, 80, + 40, 10,182,108,217, 82,175, 38,131,197,243, 60,172, 86, 43,138,139,139,177,126,253,122,200,100, 50, 72, 82,137,241, 41,121,199, +111,201,119,215,174, 93,131, 29,202, 5, 65,240,149, 83,191,192, 85,205, 65,144, 8, 4,129,128, 23, 1, 81, 34, 48, 88, 36, 12, +123,237, 3, 8,146, 4, 65,146, 96,113,192, 96,217, 27, 54, 1,192,144,233, 27, 1,232,202,230,187,169, 8,166,116,101,161, 80, +170,160, 84,112, 48, 27, 13,247,252,192, 49, 0, 33,209,127, 87, 21,210, 70,238, 20, 10,133, 66,249,151,115,240, 65, 48, 86, 21, + 13,150,189,123, 60,244,183,193, 50, 64,224, 69,240,130, 8,129, 23, 80,160, 55,226,243,207, 63,135, 74,165, 2,195, 48,101,102, + 73,146, 36,150,231,121, 12, 24, 48,192,179,166, 13,138,162, 8,171,213, 10,171,213, 10, 66, 8, 56,142, 67,167, 78,157,110, 91, +238,196,137, 19, 78,101,196, 85,205,161,225, 99,211,111,155,126,242,151, 79, 64, 8,129, 40,150,124, 28, 49, 88, 53, 25,182,182, + 61,159,129,217,194,131, 16, 0,164, 36,194,117, 63, 96, 0, 98,107,115, 21, 77, 79, 76, 10,133, 66,161, 60, 24,148,243, 34, 15, +138,193, 42,231, 30,205, 70, 35,120, 94,128, 32,136,224,249, 18, 99,164,209,104,208,163, 71,143, 18, 31, 98, 23,109,218,189,123, + 55,172, 86,107,141, 27,180, 53,106, 47, 53,102, 32,132, 96,227,198,141,144,203,229,101, 31,133, 66,225,116, 70, 4,145, 96,250, +212,255, 66, 33, 99, 33,151,177,101,223, 34, 33, 32,164,196, 28,137, 18,129,153,119, 44,200, 83,157, 97, 3, 0,139,217, 10, 16, + 2, 2, 2, 99,113, 49, 61, 29, 40, 20, 10,133, 66,169, 27, 30,136, 72,150,205, 96, 61,138, 74,170,151, 44,198,226,210,232,149, + 8, 94, 16,202, 12,212,252,249,243, 33,147,201,160, 84, 42, 33,147,201,202, 12,145, 35, 6,203,100, 50, 33, 44, 44, 12, 22,139, + 5, 17, 17, 17, 32,132,224,217,103,159,189,109,185, 83,167, 78, 57,149, 17, 94, 36,152,243,217,130,219,166, 31,253,233, 99,180, +106,222, 16, 29,155,184,192,100,149, 80,104, 16,238,216,176, 1, 40,137, 96, 1, 32, 4, 48, 22, 27,232,233, 64,161, 80, 40, 20, +202,157, 81,169, 23,249,183, 27,172, 67,149,185, 69,147,193, 0,129, 23,202, 76,150,197, 98,129, 36, 73,120,251,237,183,111, 19, +218,183,111, 31, 44, 22, 75,245, 27,147,201,110,190,241,198, 27,229,134, 72, 32,132,224,151, 95,126,129, 74,165, 42, 23,197, 98, + 24,231,204, 43, 47, 18, 68,191, 63, 9, 74, 57, 87,206, 16, 73, 18,176,237,247, 63,176,237,247, 63,202,150,229, 56,249,205, 59, + 49,108, 0, 96,177,148, 70,176, 8, 65,177,190,136,158, 22, 20, 10,133, 66,161,220, 25,149,122,145,127,187,193,170, 20,147,177, + 24,188, 93, 27, 44,171,213, 10, 65, 16,176, 98,197,138,114,213,121,114,185, 28, 44,203,214, 24,193,218,188,121,115,185,193, 61, +163,162,162, 8, 33, 4,195,135, 15, 47,171,110,124,229,149, 87, 48,122,244,104,167, 13,150, 32, 18,204,156, 61,191, 76,103,192, + 99,221, 49,164,127, 79, 72,165, 94, 56,251,226, 22,167, 4,171, 51,108, 0, 96, 49,151,180,193, 34, 0, 12, 69,180,138,144, 66, +161, 80, 40, 20,138, 3, 6, 75, 46, 99, 11,174, 36,223,112,247,114, 81, 67,144,204, 16,164,146,158,127,162, 40, 98,244,232,191, + 95,110,253,220,115,207, 97,212,168, 81, 85, 25,172,150,168, 97,172, 12, 73,146,112,244,232, 81, 48, 12, 3,150,101,203, 62,213, + 80,169,102,177, 89,194,177, 31,103, 65, 34, 4, 18, 1, 36, 82,226,167, 44,130, 67,209,198,219, 52,107, 50,108, 42,157, 7, 56, +150,128, 97,128, 43,105, 89,144,113,108,129,179,121,175, 5, 84,147,106, 82, 77,170, 73, 53,169,230,131,170,249,112, 24, 44, 34, +146, 9,203,183,159, 88,204,139,146,187,109, 90,139, 22, 45, 96,181, 90,177,107,215,174, 50,227,193,113, 92, 89,149,158, 35,109, +176, 42,144,210,163, 71,143,234,134, 98, 72,113, 72,133, 65, 74,251, 94, 35,130,171,155,239,108,194,106, 50,108,171, 14,255,253, + 10, 66, 25,203, 22,128,144, 9,180, 56, 81, 40, 20, 10,133, 66,169,214, 96,165,102,100,172, 3,176,206,126, 90,155, 54,109,244, +131, 7, 15,214, 8,130, 0,139,197, 2,171,213, 10,139,197, 82,246, 81,169, 84, 78,141,184,233,200, 32,162,142,144,125, 97, 75, + 72,157,238, 21, 7, 12, 91,102,102,102, 8, 45, 62, 20, 10,133, 66,161, 80,156, 50, 88,149, 97, 48, 24, 60, 24,134,145,101,100, +100,220, 54,239,198,141, 27, 64,201,184,156,255,122,234,220,176, 81, 40, 20, 10,133, 66,161, 6,171, 42, 14, 29, 58, 36, 60, 40, + 38,138, 66,161, 80, 40, 20, 10,229,110,193,210, 93, 64,161, 80, 40, 20, 10,133, 82,183, 48, 40,233, 9, 80, 25,206,244, 14,104, + 89,139,109, 95,160,154, 84,147,106, 82, 77,170, 73, 53,169,230, 67,167, 89,147,182,253,250,163, 1,172,160,118,173,110, 14, 12, +213,164,154, 84,147,106, 82, 77,170, 73, 53, 31, 62,205,202, 24,253,111, 53, 64,180,138,208, 25,162, 70,203,233, 78,160, 80, 40, + 20, 10,133, 82, 19,178,123,181,161,232,232,104,246, 14,215,151,238,219, 94, 10, 24,214,152,147,225,243,214,193, 1,253,207,228, + 14,221, 65, 68,102, 42,210,127,189, 66,139, 79,237,104,227, 2, 47,158,145, 15,244,212,169,135, 4,187,202, 58, 39,230, 24,254, + 52, 88,165,109,132,225,183,196, 21, 33,143,238, 33, 10,133, 82,233,165, 56, 32,192,243,216,177, 99,193, 93,187,118, 77, 73, 79, + 79,207,115,116, 94, 85,248,134,181, 27,229,170,211,190,105, 50,155, 27,186,187,185,221,188,149,155,187, 60,243,218,153, 37,182, +249, 13, 27, 54,116,219,176, 97,131,255,115,207, 61,151,113,253,250,245, 66,122, 4, 40,247,212, 96,181,111,223,190,161, 36, 73, + 47, 1,120,129, 16,114,246,204,153, 51, 79,215, 70,103,223,190,125, 1, 60,207,119, 16, 4, 33, 10, 64,148, 70,171,107, 99, 54, +155,110, 50, 32, 47,247,239,223,255,140,179,122, 81, 81, 81,191, 3, 24, 80,217, 60,134, 97,102,198,196,196, 68, 59,170,197,201, +240,249, 31, 91, 86, 13,201, 52,104,112, 40, 38,249,169,239,190,152, 6, 0, 67,255,137, 7,212,207,207, 79, 3,224,101,150,101, +251,168, 84,170,112,147,201,148, 4,224, 60,195, 48, 75,211,211,211, 51,106, 41,203, 70,234,228,175,105, 53,218,126,126,174,202, +168,244,188,194,116,147, 85, 58, 34, 49,214,121,206, 26,162, 70,128,210,167,158,199,161,119,135,117,139,104,221,162, 9,164,228, +179, 48,229,103, 15,142, 73, 55, 12,254,230,228,205,255, 90,138, 12, 81, 87, 1,139, 35, 90,129,129,129,126,162, 40,202, 50, 51, + 51, 83,109, 23, 67,179,217,220, 30, 64, 4,128,191, 84, 42,213,233, 59,189, 40,254, 91, 52, 3, 2, 2,252, 37, 73,122,221,215, +215,247,201,172,172,172,223, 89,150, 93,117, 7,199,155,242,144, 16,210,233,197, 5, 12,203,120, 57,179, 14,145, 72, 78,242,201, +117,255,189,151,233, 36,164,100,164,231,128,128,128, 87,130,131,131,155, 16, 66, 18, 8, 33, 95, 86, 56, 7,110,155,199, 48, 76, +149,175,242, 8,105,209,101,243, 27, 47, 61,215,123,226,184, 87,116, 90,173, 6, 6,163,169,254,210,149,223,127,177,116,229,250, + 1, 73,151,142,245, 7, 0,127,127,255,161, 65, 65, 65,161, 22,139,229, 58, 33,228,251,154, 52, 41,148, 59, 54, 88,205,155, 55, +119, 81, 42,149,195, 89,150,125,185, 85, 84,231,110,131,159,121,153,225, 25, 45, 62,157,244,156,211, 67, 56,196,198,198,170, 50, + 51, 51, 63,110,216,172,221,127, 30,237, 59,132,109, 30,209, 12, 94,245, 61, 33,177, 74,172,217,117,185,254,193,111, 94, 89, 2, +160, 75, 45,146, 57,224,199, 29, 39,145,153, 47,130, 97, 0,134, 1, 88, 6,208,155, 36,188,247,106,183,143, 0, 56,102,176,162, + 70,203, 35, 26,248,244,191,124, 75,141, 93, 23,120, 0,254,208,122,250,246, 55,120,143,150, 35,118, 5,255, 79, 58,152, 13, 26, + 52,136,170, 87,175,222,215,175,188,242,138,103,120,120,184,159, 82,169,212,154, 76,166, 38,201,201,201, 13, 23, 46, 92,248,120, +131, 6, 13,230,222,184,113,227, 87,103, 52,155,185,171,130, 67, 27,248,254, 56,117,220, 75, 29,195,195,130, 32,179, 20,131,152, +245, 65,201,215,175,118,153,189,234,215, 55, 24,198,244,236,165, 66, 97,175,163,122,106, 87,197,251,239,141,126, 54,162,177, 43, +129,229,210, 81,200, 56, 2,181,171, 39, 58, 6,115, 96, 64,154, 71,239,207,120, 15, 69,214,143, 28, 48,146,179, 68, 81,124, 15, + 0,211,160, 65,131, 31,229,114,249,169,246,237,219, 55, 27, 57,114, 36,211,170, 85, 43,156, 57,115,166,249,182,109,219,158, 22, + 4, 33,222, 98,177,156,172, 95,191,254,217,184,184, 56,171,131,229, 91,145,155,155,219, 70,169, 84,118,250, 39,107,250,249,249, +105, 44, 22,203, 75,129,129,129,163, 31,121,228,145, 86,131, 6, 13, 98,154, 54,109,138,248,248,248,118, 59,119,238,252,232,200, +145, 35,231,211,210,210, 86, 40,149,202,239, 51, 51, 51, 29, 26, 4,120,120, 31,196,255,188, 15,205,106, 59,191, 2, 30, 0,212, + 0, 50, 29, 9, 38, 0,208, 2,184,118, 31, 52,239, 70,164, 37,142, 97,152,122,165, 55,100,219,131, 93,185,223,246,223,162, 40, + 22,167,164,164, 52,170, 78, 51, 40, 40,168,185, 36, 73,156,253, 52,185,188,234, 86, 11,130, 32, 72,105,105,105,151,170,211,100, + 88,198,107,197,215, 11,220,101, 44, 32,146,210, 15, 79, 32, 18, 2, 73, 2, 68, 9, 16, 37, 9,130, 72, 32, 4,150,212,198, 0, + 0, 32, 0, 73, 68, 65, 84, 17, 9,188, 64, 48,243,163,247,238,231,101,238, 73, 0, 61, 0, 28, 6,176,168,154,121, 95, 86, 39, +226,221,168,205,139, 47, 61, 59,188,215,123,147,222,212, 17, 66, 64, 8,129, 70,173,194,228,137, 99,149, 38,147,165,171, 95,147, +246,163, 51, 19, 79,175,100, 24,166, 23,128,246, 0, 78, 3,248,158, 90, 6,202,221, 50, 88, 76,187,118,237,122, 16, 66, 94,110, +224, 31, 56,124,216,243, 99, 52,161, 77, 90, 66, 47,185,225,122,142,132,216, 3, 27, 0, 96,147, 51, 27,223,189,123,119,123, 66, +176,122,220,180, 5,205, 90,183,237,128, 11,233, 2,142,165,138, 40,190, 34, 66,198, 25, 33, 73, 0, 33,196, 92,219,204,165,229, + 9, 56, 18,111, 1,199, 2, 44, 11,112, 44, 3,206,217,247,116,199,174,224, 47, 5, 15,221,241,199,169,244,167,160,246,133, 33, + 47, 29,134,188,172,157, 72,219,252,143, 50, 87,254,254,254,189, 67, 67, 67,191,156, 56,113, 98,131,204,204,204,122, 39, 79,158, +132, 74,165,130,167,167,167,204,203,203,171,217,180,105,211, 10,102,207,158, 61,217,199,199,231,204,205,155, 55,147, 28, 50, 5, + 46,138,136,238,173, 34,254,156, 49, 43,218,221, 28,179, 19,249, 63,255, 12,142,149,160,112,209,193, 79,163,197,162, 39, 67,235, + 77,219,157,250, 43,107,181, 68, 92, 48,153,210, 29,209, 12,242,169,215,183,113,120, 83,228,111, 95,138,196,124, 51,142,103,153, + 49,184,103,123, 52,246,212,160,173, 32,162,190, 90,214,187, 38,131, 21, 16, 16,224, 41, 73,210,212,164,164, 36, 86,161, 80, 48, + 13, 27, 54,124,118,197,138, 21,164,121,243,230,101,111,221,238,210,165, 11,186,116,233,194,232,245,250,136, 99,199,142, 69,108, +222,188,153, 47, 40, 40,136,201,200,200, 88, 83,117,100, 41, 44,197,108, 54, 5,153,204, 22,211,194,133, 11,127,232,220,185,179, +164, 84, 42,113, 39,154,165,198,119,189, 86,171,213,206,152, 49, 35,167, 67,135, 14,164, 46, 52, 67, 67, 67,255,232,216,177, 99, +175,190,125,251,202,186,118,237, 10,127,127,255,178,121, 94, 94, 94,232,222,189, 59,147,154,154,218,250,200,145, 35, 75,255,248, +227,143,197,103,206,156, 57,144,148,148,212,215,129, 67,212,244, 14,231,151, 11,254, 2,152, 3, 96, 37,128, 99,213, 61,198, 0, +120, 14,192,231,247, 73,179,250,135, 2,181, 58,203,100, 50,249,148,254,190,105, 50,153,124,107,188, 88, 50,140,110,225,194,133, + 62, 10,133, 2, 44,203, 66, 20, 69,136,162, 8, 73,146, 64, 8, 41,251,182,189,114,108,214,172, 89, 98, 77,154,146, 36,177, 11, + 22, 44,144,107, 52, 26, 0, 0,207,243,229,190,109,216,254,207,154, 53,203,161,107,148, 70,201,225,195, 73,163, 59,178,162, 69, + 93,237,246, 57,165,233,181,201, 95,158,186, 15,102,213, 51, 32, 32,224, 37, 0,131, 0,216,206,241, 86, 1, 1, 1,251, 43, 44, +218,170,244,187, 56, 32, 32,224, 0,128,223, 3, 2, 2, 86, 87, 86, 93,232,238,226, 58,246,221,183, 95,119, 37,132, 96,230,207, + 57,152,249, 75, 14, 62, 28, 90, 15,147, 7,104,241,234, 11, 79,187,172, 94,247,211,152,210, 50,102, 35, 1, 37,189,238,105,244, +138, 82,247, 6,171,109,219,182, 59,250, 15, 29,213,175,115,143,190, 16, 20, 62,136,191,201, 32,245, 58,129,140, 19,192, 66,194, +181,255,109, 33, 44,203, 86,116,248, 85,118,213,220,177, 99,199,127,131, 27,183,153,251, 94,244, 28,238, 66,150, 18,171,143, 24, + 33,154, 11, 96,204,185,130,226,155,151, 81,116, 35, 14,249,233, 23,206,179, 44, 27,237,168,230,237, 97,101, 64, 34, 4, 12, 97, + 0, 9, 37,231, 6, 91,169,195,170, 86,147,136,204,212,152, 63, 86, 63,213,118,200,116, 92, 62,178, 14, 32,236, 84, 7, 54,127, + 55, 94,130,121,161,138, 72,198,227, 33, 33, 33,243,198,140, 25, 19,120,238,220, 57, 55,131,193, 80,124,234,212,169, 67,153,153, +153,190, 94, 94, 94,169, 35, 71,142,124,196,199,199,199,167, 71,143, 30,218,221,187,119,191, 15,224,245,154, 52, 35,181,138,200, +174, 29, 90, 30,255,100,222,124,151,156, 95, 23,195,114,253, 28,142,103,153,112, 46,219, 72, 2,220, 10,152, 17, 45, 61,225,162, +148, 97,116, 39, 31,221,127,182, 37,125, 6, 19,158,119, 36,239, 13, 3,124, 27,241, 70, 35, 76, 70, 43,118, 92, 46, 48, 30,207, + 43,240, 97, 93,211,178, 39, 63,213, 94,205,229,100,160,129,171,188, 9,110, 58,183, 63, 25,134,129, 86,171,173,116,158,187,187, + 59,186,116,233,130, 70,141, 26,201,159,123,238,185,206, 0,214, 84,165,105,181, 90,253,210,211, 51, 16,222, 52, 92,213,167, 79, + 31,134,227, 56, 88, 44,150, 59,210, 4, 0, 23, 23,151, 65, 81, 81, 81,178,181,107,215,230, 39, 37, 37, 93, 28, 54,108, 88,186, + 86,171, 45,119, 67,213,106,181, 8, 14, 14,198,248,241,227,229,111,188,241, 70,141,154,190,190,190,143,175, 91,183, 14, 12,195, +148,221,188, 43, 18, 18, 18,130, 6, 13, 26, 96,192,128, 1,178,167,159,126,250,241,164,164,164, 42,247,231,240, 62,136,183,153, +167,225,125,170,191,137,148,206, 79,168, 36,146, 85, 49,157,185, 0,150, 3,248, 13,192,240, 42, 12, 81, 87, 0, 63, 3,232, 15, + 84,122,228,171,212, 84, 40, 20, 10,171,213,234, 89,137,241,113, 86,179,236, 84,143,137,137, 65,187,118,237, 80,241,219,102,132, + 24,134,241,113,244,220,228, 56, 14,203,150, 45, 3,203,178, 80, 40, 20,144,203,229, 80, 40, 20,183,125,218,182,109,235,240,249, + 46,151,203,177,108,217, 50,136,162,200, 38, 37, 37,189, 44,138,226, 16,147,201,228,163,209,104,178, 21, 10,197,246,158, 61,123, +126,167, 82,169, 4,103, 52, 89, 14, 96, 69,139,122,239,238,173, 46, 85,173,100, 54,155, 49,112,200, 8,176, 12,123,207,175,117, +199,142, 29, 11, 14, 14, 14,110, 90, 26,157, 2,128,195,233,233,233, 61,236,254,219,115, 56, 61, 61,221,214, 52, 36, 49, 37, 37, + 37, 56, 36, 36, 36,175,162,166,197, 98,109,168,211,185,128, 16,130,153,191,228,192,180, 54, 12,234, 81,215,240,106, 39, 51, 92, + 93, 93, 33, 8, 66,179,128,128,128,239, 1,132,151, 70,175, 6, 7, 4, 4, 52, 37,132, 28,104,216,176,225,111,118, 85,250,247, +236, 58,255,144,104, 86,115, 63, 39, 29, 0,120,219, 77,178, 0,176, 61,173,230,148, 26,224,250, 21,166,219, 47,103,251,206,182, + 5, 50, 75,215, 35,118,186,217, 12,195,252,175,174, 13, 22,177,115,231, 85,197,120,220,210,140, 30,208, 95,247,130,140,149, 32, +227, 24,200, 56, 0, 96,144,155, 22, 7, 75,113,238,209,152,152,152,235,142,108,116,215,174, 93, 93, 66,155,119,252, 44,250,147, + 47,216,239, 14, 27, 81, 96, 48, 33,231,210, 86,100,158,250, 54, 83, 18,172, 91, 89,150, 61,205,178,108,108, 84,235, 86,241,126, +126,126, 98,109, 51, 39,145,146, 16,119,153,177,146, 0,166, 54, 15, 32,233,191, 94, 65,216,251,229,255,255, 67, 8, 8, 8,232, + 31, 22, 22, 54,103,204,152, 49, 33,177,177,177,174, 69, 69, 69,217,123,247,238,141,183, 90,173,103, 88,150, 93,148,145,145,209, +115,221,186,117,218, 41, 83,166,244,109,218,180,105,211, 63,254,248,195, 80, 99,228, 74, 43,111,253,194,139, 35,142, 15, 25, 61, + 65,125,241,151, 37, 80,197,199, 98,197,165, 60,241,116,150,241,125,147, 94,248, 82,163,149,117,205, 55, 9,123,222,237,238,199, +250,185,202, 17,228,174,120,244, 92,145, 99, 47,250, 86,202, 85, 50, 34, 83,195, 98, 22, 80,108,145, 44,113, 57, 40,126, 92, 16, +173,196,197, 75, 13, 0, 50,142,173,209,244,167,167,167,231,249,249,249,125, 22, 26, 26,250, 1,195, 48,164, 71,143, 30,151,218, +181,107, 87, 44, 73, 18,140, 70, 35,172, 86, 43,228,114, 57,140, 70, 35,146,147,147,113,242,228, 73,184,187,187, 59,181, 95,243, +243,243, 17, 26, 26, 10,173, 86,123,199,154,146, 36, 49, 75,151, 46, 85, 95,188,120, 81,253,219,111,191,213,251,239,127,255, 91, +208,182,109,219,184,167,158,122, 42,181, 94,189,122,214,179,103,207,226,248,241,227,200,203,203, 67,199,142, 29, 29,210,180, 90, +173,144,201,100, 48, 26,141, 80,169, 84,144,201,100, 16, 4, 1,146, 36,149,153, 46,189, 94,143, 91,183,110, 65, 46,151,215,248, + 34,118,155, 89, 26,222, 7,228,167,159,255,188, 89, 82, 55, 84,200,195, 90,192, 67, 40,224,193, 23,240,224,243,249,103, 38,206, +111,253,243, 62, 56, 19, 7, 62, 81,106,174,126,174,196,100,117,181,155,126,214, 89, 77,171,213,122,212,102,124,212,106,181,143, + 45,186,160, 82,169,120,179,217,220,203, 73, 77,196,196,196, 32, 42, 42,138, 43,213, 36,132, 16, 91,123, 27,167, 47, 26, 12,195, +128,227, 56,200,229,114,112, 28,135,168,168, 40, 12, 26, 52, 8, 77,155, 54, 69, 90, 90, 26, 14, 30, 60,136,203,151, 47, 67,161, + 80,148,171, 58,172, 9,185, 92, 14,150,101,217,132,132,132,239,250,244,233,211,120,194,132, 9,202,224,224, 96,196,199,199, 55, + 88,186,116,233,168,125,251,246,245, 28, 58,116,232, 40, 0, 66,117,213,135,229,140, 96,169,105, 50,155,205,136,139,139,171,126, + 89,167,171, 0,238,156,174, 93,187,166, 16, 66, 18, 81, 82,245,215, 42, 61, 61,189, 71, 64, 64,192, 14, 0, 21, 13, 97,113,122, +122,250,128,128,128,128, 2, 0,231, 1, 36, 48, 12,147, 82,153,166,135,187, 91,182, 94, 95,236,235,226,162,197,251, 67, 60,160, + 30,117, 13,111,247,226,192,243, 60,174, 94,189,142,134,161,129,204,166,213, 91,108, 85,131,237, 79,159, 62, 13,148, 84, 21, 38, +165,166,166,250,119,234,212,137, 54,120,191, 75, 62,170, 26, 47,226,205, 48,204,118, 59,195, 53,208,246,127,218,180,105,239,205, +153, 51,231, 34,195, 48,219,237,167,219, 47,103,255, 93,122,142,110, 39,132, 12,156, 62,125,122,228,220,185,115,103,219,150,189, + 47, 17, 44,142,227,134, 93,216,245,229,137, 38, 86, 18,226, 27,249,100,185,253,144,124,118, 23, 36, 73, 90,227,136,206,241,227, +199,213,130,132,239,166,188, 55,139,253,230,128, 17, 89, 55, 50,144,113,232,115, 24,111,198,173,214,104, 52,239,246,233, 55,240, +142, 11,110, 84, 84, 84,164, 71,253, 6, 48, 91, 73,169,193, 42,111,178, 30, 20,252,252,252, 6,133,133,133,205,218,186,117,107, +136,209,104,116, 61,118,236, 88,254,158, 61,123, 18,173, 86,235,170, 27, 55,110,172, 47, 93,108,171, 76, 38,251,152, 16, 2,157, + 78, 39,227, 56, 78, 83, 93,168, 59,210, 77, 30,245,210, 11, 47, 28,253,239,162,149,234,196, 11,103,177,120,211, 14,168,136, 85, +188,148,107,121,234,162, 94, 40, 41,180, 6, 97,127, 64,142, 49,157, 16, 4,201, 89, 6,245,180,242, 6,157, 1,245, 9,192, 84, + 83,154,189,130, 66, 88, 33, 32, 12, 71, 12,102,232,220, 20, 74, 0, 8, 8,111,193,157, 45, 20,112,236,212, 95, 80,171, 61, 21, +142,228, 61, 51, 51,115,134,191,191,127,232,158, 61,123, 88,131,193, 80,124,238,220, 57,212,175, 95, 31, 62, 62, 62,112,115,115, + 67,124,124, 60,246,238,221,139,132,132, 4, 16, 66,170,139, 18, 84, 74, 86, 86, 22, 10, 11, 11,235, 68, 83, 16, 4, 6, 0, 34, + 35, 35, 17, 25, 25,169, 76, 79, 79,247,217,190,125,187,231,236,217,179,111,248,249,249,237, 54, 26,255,110, 30, 85,177,186,167, +186,136, 2, 0,152, 76, 38,152,205,102, 40, 20, 10,168,213,106, 40, 20, 10, 20, 22, 22, 34, 43, 43, 11, 69, 69, 69, 37, 55, 19, + 15,143,178,229, 29, 66,148,128, 19,221, 78,223,238,230, 95,246,169,101, 81, 61, 86,106,162,246, 3,176, 29,223, 44, 91, 64, 12, +213, 87,245, 85,167, 89,110,127,216, 69,153,228,181,209,180, 69,170, 24,134, 41,119,149, 80,171,213, 55,109,145,171,210, 72, 89, +141, 90,182,106, 65,165, 82,137,200,200, 72,188,251,238,187,136,143,143,199,209,163, 71,225,227,227,131, 39,158,120, 2, 50,153, + 12,169,169,169, 96, 89,214, 33,131,165, 80, 40,192,243, 60, 18, 19, 19, 95,238,221,187,119,216,226,197,139,149, 73, 73, 73,136, +143,143,135,155,155, 27, 62,254,248, 99,213,212,169, 83, 3,119,239,222,253, 70,155, 54,109,150, 57,124,109,103, 74,170,255, 6, + 14, 25, 81,137, 17,113,145,175, 93,243,173,210,102,188,216,251, 48,176, 79,122,122,122, 30, 33,100, 1,128,133,165,213,130, 61, + 0,184,164,167,167,247,178,187, 9,147,210,106, 65, 0, 56,159,158,158,222, 27, 0,169,170, 65,122,230,205,204,229,159, 47,250, +102,225,204,247,222, 81, 78, 30,160,197,171,157,204, 16, 69, 17, 28,199, 97,241,242,213,252,229,184, 11,231,218,183,111,191, 29, +192,224,211,167, 79,163,125,251,246, 69, 0, 46, 3,184,174, 84, 42,105,231,145,251,233,192, 42,152, 32,155,113,154, 51,103,206, +192,202, 76, 85, 37, 15, 63,229,166,207,157, 59,119,182,221,255, 58,237,197, 46,171,224, 28,171,123, 10,247,243,240, 14,168, 55, +230,249, 39,176,249,156,237,133,132, 4, 86,179, 1, 55,226, 15, 24, 44, 22,203,207,142,108, 48, 55, 55,247,227, 87,223,157,223, +248,116,138, 12,153,121, 6,100,236,155, 69,172,249, 73,195, 7, 13, 26,180,185, 46, 50, 20, 21, 21, 21,233,233,229,127,240,131, +207, 86, 98,127,162, 5, 18, 1, 24,130,191,141,213, 3, 50,242,151,191,191,127, 19, 15, 15,143, 47,182,108,217,226,163, 84, 42, + 93,207,159, 63, 47, 30, 58,116, 40,131,231,249,165, 55,110,220,216,104,183,220, 11, 45, 91,182,228, 93, 92, 92,144,153,153,105, +226,121, 94, 95,213,177,110,161, 86, 7, 70,181,138, 56,252,223, 69, 43,213, 38,139, 5, 5, 70, 51,188,253,252,196,163,231,227, +158,138,211,139,101, 79, 4,205,117,178, 71,218,135, 7, 4,176, 26, 87,192, 80,136,244, 66, 75,134, 35,230, 10, 0, 92, 92, 61, +216,192,246,143,162,253,196,175,112, 41,250,125, 2,228,194,195,215,159,237, 53,254, 83,232,218, 13,194,178, 9, 47, 75,127, 71, +112,107,196, 24, 30, 30,142, 51,103,206,216,202, 22,114,115,115, 17, 22, 22,134,197,139, 23,151, 91,208,145,155, 98, 21,229,245, +142, 53, 37, 73, 98, 42, 68, 29, 49,110,220, 56,249,206,157, 59, 93,236,205,149, 51,154, 22,139,165,204, 80, 16, 66, 96,177, 88, + 96,177, 88,224,226,226,130,196,196,196,242,126, 73, 20, 43,173,234,172, 58,193, 5,149,135,187,248,220, 59,105,119,120, 12,128, +194,206, 4,249, 2,232, 86, 75,115,117,155,241,169, 11, 98, 98, 98, 42,189, 14,218,170, 30, 99, 98, 98, 72,187,118,237,124, 29, +213, 35,132, 64,169, 84, 98,240,224,193,248,235,175,191,144,145,145, 1, 87, 87, 87,152,205,102,152,205,102, 68, 69, 69, 33, 43, + 43,203,225,232,149,157,110,255,183,223,126, 91,125,253,250,117,220,186,117, 11,106,181, 26,130, 32, 64, 20, 69,188,241,198, 27, +234,241,227,199,247, 3,224,184,193,226, 24, 60,246,242,103,149,182,173,218,255,237,127,122,170, 84,170,178,234, 22,142,253, 71, + 93, 64,237, 31, 20,157,218,137,217,215, 47, 44, 91,183,241,183,199, 5,171,181,215,107, 47,141,112,213,185,104,113,245, 90, 18, +150,173, 90,203,239, 63,114,106,127, 86, 90, 98,127, 0, 76, 64, 64, 64,211,210,200,213,229,244,244,244,151,170, 51,109,148, 58, +141, 98, 85,100, 52, 74, 59,182, 84,101,156,156, 49,104,246, 17, 46, 27,211,167, 79,143,156, 51,103, 78,157,182, 49,148, 85, 81, + 88, 43,154,150,182, 30, 94, 1, 7,166,207, 94,169,251,237, 28,135,188,204, 4,152,110, 38, 32, 40,106, 8,178, 18,142,129,136, +252,175,113,113,113,197, 53,109,108,247,238,221,225, 65, 77,219, 79,108,211,174, 19, 62,255, 93, 15,253,165,141,176,228, 93, 95, + 54,112,224,192,186, 51, 87,245,253, 14,190, 55,119,101,189,109, 23,229,200,205, 72, 64,252,150,169, 16,173,183,213,138,237,112, + 70,183, 39, 32, 19, 60,173,120,188, 57,131,155,127, 26,144,217, 19, 50, 28,186,191, 47,189,206,200,200, 72,244,240,240,248,126, +229,202,149, 99, 91,183,110,173,157, 56,113,226,229,194,194,194, 79, 50, 51, 51,127,180, 51, 87,189,195,194,194, 38,205,154, 53, +171,113,114,114, 50, 14, 31, 62,156,200,113, 92,149,245,203,151, 76,166, 52,246,252,165,165, 71,127, 88, 53,153, 13, 14,199,166, + 89, 83,132, 63, 47,196, 13,142,211,139, 59,203,204,149,139, 34,162, 75,100,163,237,111, 78, 24,195,138,103,119, 33, 62,249, 38, + 50,245,252, 62,135,159, 70,139, 12,188, 92,165,129,174, 65, 40,146,141,146,194,223,223,255,100, 90,190,241,255,236,157,119, 84, + 20,215,223,198,159,153,237,187,176, 75, 47, 75, 21, 21,144,170, 32,160,162,216,162,177,196, 22, 19,123,212,152, 24, 53,137,198, +168,137, 53,138, 13,141,209,168,104,138, 49, 54, 18,197,246,198,196, 26,163, 34, 22,172, 20, 59, 34, 34,125,169,210, 89,216, 54, +247,253, 3,240,135,132,178,148,244,249,156,179,103, 97,102,246,217,123,103,238,222,251,204,247,150,225,211, 28, 46,104, 46, 31, + 73, 5,149,205,106,196, 25,230,247, 33,201,186,166, 5, 64,147, 93,100, 77, 58,185, 86,104,214, 68,176,126,231, 87, 52, 26,170, +165,154,181, 13, 86, 93, 51, 85,223, 57,106,150,193, 82, 23,215,127, 13, 84,249,109, 49,177,163, 38, 33,130,214,152,171, 26,227, + 83, 51, 0, 93, 40, 20,190, 48, 42,250, 70,153, 26,138, 96, 53,182, 95,239,150,159,162,192, 48, 12,120, 60, 30,156,157,157,113, +237,218, 53,200,100, 50, 24, 26, 26, 66, 34,145, 64, 40, 20, 66, 38,147, 65, 32, 16,128,166,105,208,122, 26, 23,141, 70, 3,149, + 74,101,109,103,103,135, 39, 79,158, 64, 36, 18,189,120, 9, 4, 2,184,186,186,162,180,180,180, 89,166,179, 57,166,137,243, 47, + 90,154, 58,229, 97,212,235,214, 46, 1,147, 15,254,223,137,247, 43, 43, 85, 94,157, 92, 59,226,209,189,152, 59,217,233,137, 67, + 88,143,243,183, 49,206, 53,124,135,170, 89,162,109,210,141, 87,159,201, 90,191,126,125, 72,237, 40, 88, 91, 27, 44, 52,102,174, + 22,174,253, 78,118, 56,134, 70,161, 34, 30, 41,103,150,148,232,212,229, 5, 12,163,113, 44,120,122, 5,120,121, 64,110, 99,141, +161,127, 96,255,145,244,197, 71, 42,168, 75, 50, 81,124,255, 96,178, 80, 40, 92,212,150,230,106,209,186,157,166, 63,221,225,226, +121,230, 99, 60, 61,181,184, 72,167, 46,239, 31, 19, 19,211,236,117,180,222, 3,120,223, 1,154, 17, 22, 22,163,100, 66,122,195, +180,209, 82,244, 30, 32,134,140, 47,195,170, 47,232, 71,101,129,204,130,156, 40, 28,135, 47,120,136,193, 95, 50,163,240,193,131, + 7,107,119,238,220, 73,107,181,218,105,106,181, 58, 88,161, 80,188,136, 34,202,229,242,129, 14, 14, 14, 27, 86,175, 94,109,151, +156,156, 44,184,126,253,250,243,216,216, 88, 70,167,211,173,111, 76,243, 94,177,234,211, 15, 63,156,205,233,104,111, 51, 59, 49, + 61,125,196,253, 18,221,153,154,125,158, 18,190,103, 96, 23,183,171,171, 87, 46,150,170,175, 31, 69, 89, 86, 58,182, 95,207, 42, +102,116,154,197,122, 70,221, 76,175, 92, 56,143,197,211,167, 50, 37, 37, 37,144, 8,248, 76,122,252, 83,206,228, 1,189,117,159, + 47,156, 79,103,101,101,161,188,172,140, 99, 99, 99, 99,154,153,153,249, 92, 31,205,250, 12, 69,125,141,107,179, 12, 70,253,141, +121,139, 53,235, 70,176, 26, 51, 88,250,106,214,238, 18,107,234,124,232,116,186,230,117, 17,106, 27, 48, 88,234, 92,117, 43,139, +108, 42, 69, 81, 14, 53,127,183,197,111,160,162,162,194,178, 86, 84, 12, 0,168,150, 70, 43,171, 35, 88,141,238,111,142,201,170, +137, 96, 37, 38, 38,194,194,194, 2, 90,173, 22, 6, 6, 6, 16,139,197, 16,139,197, 80, 42,149, 16, 8, 4,224,112, 56,205, 74, +167, 80, 40,204,138,143,143,119, 52, 49, 49,129, 78,167,123,201,100, 61,123,246, 12, 70, 70, 70, 57,250,142,191,170,138, 96, 1, +231,246, 46,172,119, 22,161,177,145,193, 75, 66, 28,138,194,223,136,218,227,116, 90, 20, 85,202, 74,184,249, 3,128, 31,108,109, +109,247,237,255,254,164,159,159,159,223,201,214,106,178,252,193,238,171,218, 24,213, 30, 75,181,104,209,162, 22,175, 29,178,104, +209,162, 37,245, 69,180,218,210, 96, 81,117,222,255,103,174,204,108, 34, 22,172,222, 33,219,127,155, 70,145,226, 17, 50,207, 45, + 43, 98,212,229,253,105,154, 86,164, 69,125,119, 4, 64,121, 76, 76, 76,164,158,141,161,111, 39, 23, 23, 28,190,175, 69, 69,214, + 29,208, 20,217, 59, 96,192,128,242,214,102,162,198, 92,125, 26,242,157,233,225, 88, 46, 10,170, 76, 96, 17,211, 2,115, 53, 65, + 32,232,200,163,233, 13,246, 93,220, 94, 27,151,148, 90,218,175,131,200,120,104, 71, 33, 56,215,143,225,184, 77, 14,158,155, 95, +192,172,205,182, 29,163,126, 46,254, 37, 70, 88,246,188,139,183,151,236,182,193,189,147, 26,162,251, 52,239, 50,254,244,193,239, +137,137,137,171,173,172,172,126,202,206,206,126, 49, 58,213,214,214,118,136,131,131, 67,200,170, 85,171,218,165,165,165, 73,227, +226,226,138,143, 28, 57,242,140,166,233, 85, 89, 89, 89, 57, 77,105,222, 47,213,204, 39,169,138,239, 31,148,233,226, 95, 68,174, + 36,188,206,147, 39,143,187, 54, 96,252,219,162,164,139,251, 96,154,254, 0, 91,110,230,232,210,139, 42, 38,196, 43,145,165,143, +185, 18, 8, 4,135, 67,143, 30,125,226,229,229, 69,149,151,151, 67,163,209, 32, 55, 55, 23, 95,252,120,248, 62,195, 48, 48, 49, + 49,193,249,243,231,153,143, 62,250,232,176,141,141,205, 24,125, 76, 22,195, 48, 47, 26,171,134,162, 64, 98,177,184,121, 6,163, +250, 51,181, 13, 76,107, 52, 27, 50, 88,117, 35, 91,205,212,172,250, 1, 87, 15,110,111, 40,162,199,225,112,192, 48, 76,189,145, +190,134,195, 36,133, 13, 24,172,156,214,222, 72, 56,162,241,137, 52,127, 25, 34,145, 40,187,218, 60, 49, 13, 45,197,208,220, 8, + 22, 0, 8, 4, 2, 68, 69, 69, 97,240,224,193, 96, 24, 6, 66,161, 16, 98,177, 24, 34,145, 8, 55,111,222, 4,159,207, 7,135, +195,105, 86, 55, 33,143,199, 59,189,125,251,246,169,235,215,175, 23, 51, 12, 3,129, 64, 0,177, 88, 12,161, 80,136, 47,191,252, + 82, 41, 16, 8,206, 52,203, 96,161,233, 89,132,181,205,216,159, 77,157,101, 26,234, 46,197, 80,155,186, 75, 56, 52,184, 76,131, +141,141,141,169,157,157,221,187,132, 16,143,234, 77, 47,205, 22,172,117,104, 77,197,226, 98,107,107,187,175,158, 89,132, 44,109, + 31,189, 66, 3,117, 68,110,157,232,149,170,214,255,185, 0,168,234,255,115,107, 25,176,218,127,171,234,217,150,191,110,221,186, +136, 90,145,171,220,182,204, 76,131, 17,172, 46, 93,186,184, 25,155,217, 68,204, 91,189, 67,182,239, 6, 7, 69,138,135,200,139, +248,172,136,104,149,181, 77, 75,175,102,126,159,143,165,165, 25,242,162, 42,160, 41,120, 2,138,162, 98, 90,155, 1,127,127,127, +103,169,145,197,197, 5,107,190, 51, 61, 16,205, 69, 97,230,255, 76, 96, 75, 34, 87, 92,154,254, 98,211,175, 7, 71, 8,179, 30, + 65,121,231,162, 49,239,121, 58,238,231,168,113, 56, 42,171,228,226,213,157, 87,104,119, 18,212,127,130,177, 97,255, 9,166,216, + 50,235,140,105,118,197, 3,220, 72, 56, 49, 50,100,241, 9,130,191,104,117,247,218,230, 74, 46,151, 15,183,177,177, 89,121,242, +228, 73, 71,173, 86, 43,189,116,233, 82,201,145, 35, 71,158,106,181,218,208,172,172,172,147,122, 71,199,202,212, 47,204,149,167, +140,231, 59,109,202,148, 43, 31,109,254, 86,244, 32,250, 22, 54,236, 59, 9, 41, 79,163,139,206,172, 24,243,160,236,127,221,135, +141,158, 87, 46,119,213,129, 3, 7, 12,220,221,221,169,252,252,252, 23, 13,190, 90,173, 70,113,113, 49,138,138,138,160, 82,169, +224,229,229, 69,175, 88,177,194, 96,249,242,229,171, 0,124,208, 68,132, 32,103,229,202,149,150,239,189,247, 30,100, 50, 25,242, +243,243,161,209,104, 94, 68,155,132, 66, 33,140,141,141, 81, 88, 88,136,115,231,206,129, 16,210,168,185,228,243,249, 10, 91, 91, + 27,123,177,196, 64, 37,145, 72,136,161,161, 97,171, 53,171, 27,219,172,161, 67,135, 90,175, 92,185, 82, 80,187,145, 86,171,213, + 84, 75, 53, 9, 33,229,175,190,250,170, 36, 52, 52, 20,142,142,142, 80,169, 84, 96, 24,230, 69, 4,171,102,105,128,212,212, 84, +172, 93,187, 22,132, 16,253,111,100, 52, 5, 26,216, 77,177,128, 58, 95, 3,117,190, 6,170, 60, 13,212, 57, 26,104,203,255,118, + 83, 68, 90, 50, 0, 93,143, 72,152,101,107, 35, 88, 20, 69,129, 16, 2, 62,159,143,180,180, 52,156, 63,127, 30, 1, 1, 1,144, + 74,165, 40, 43, 43,195,181,107,215,144,149,149,213,162, 8, 86,255,254,253,247,158, 61,123, 54,232,195, 15, 63,116,154, 57,115, +166,216,205,205, 13,201,201,201,216,188,121,115,197,195,135, 15, 51,230,204,153,179,179, 57,122,116,245,210, 53,122,205, 34,164, +255,124,111,220,192, 50, 13, 67, 27, 56,188,246, 18, 14,117,151,105,120,193,177, 99,199,156,108,109,109,221, 80, 53,190, 10,248, +253,108,193,218,220,190,125,251,182, 31,216, 89,132,127,117,228,234,214, 63, 45,205,220,134,127,116,244,199,221,222, 88, 42,219, +123,157,139,130,140,251, 40,186,188,162,174,185,210, 7, 47,212, 90, 43,131, 39,146,122,105, 9, 31, 64, 5,180,133, 79, 33, 16, + 8, 98, 91,144,230,151, 52, 25,134,153,223,253,141,165,166, 97,183,184, 40,202,124,136,220,139,203, 91, 98,174,188, 0,220,123, + 15,224,217,251,120,188, 38,204,126,140,138,139,225,160, 0,124, 31, 91,134,107,233,170, 47,213, 42,213,154,135,197,170, 66, 91, + 49, 76,194, 67,114,150, 15,121,221,251, 35,215,113,231,112, 35,247, 27, 64, 2,152, 88,112,135,228,248,106,107,119, 23,190,148, +206, 54,162, 81, 77, 27, 27, 27,103, 67, 67,195, 47, 78,159, 62,109, 33, 16, 8,100, 15, 30, 60,208, 29, 61,122, 52, 77,167,211, +109,170, 61,240,189, 57,154, 30, 34,145,157,123,123,251,200, 57,155,190, 22,149,148,150,161, 76,165,134,141,131,173, 46, 50,250, +209, 27, 15,202,212, 63,235,163,105,105,105,217,111,244,232,209,157,187,118,237, 74, 55,100,174,138,139,139, 81, 90, 90,138,244, +244,116, 4, 5, 5,209,110,110,110, 94,149,149,149,253,114,114,114, 34, 26, 74,167, 66,161, 8, 14, 15, 15,239,121,232,208,161, + 97,211,167, 79,151,142, 30, 61, 26, 98,177, 24,101,101,101,176,183,183, 7,195, 48,184,124,249, 50, 18, 18, 18, 74, 0,156, 80, + 40, 20, 87, 27, 75,231,179,103, 73, 14, 0,104, 59, 59,187,158,131, 7, 15,110, 19, 77, 0,200,205,205,237, 24, 25, 25,185,112, +228,200,145,115, 7, 13, 26, 36, 93,178,100, 9,223,201,201, 9, 58,157,142,106,169,102, 65, 65,129, 81, 76, 76,204,198, 94,189, +122,125, 48,120,240, 96,110, 72, 72, 8,140,140,140,160,211,233, 32, 22,139, 81, 92, 92,140, 85,171, 86,225,202,149, 43, 90, 66, +200, 87, 69, 69, 69, 11, 26,211,172,189, 14,214,152, 57, 95,118,105,172, 16, 54,178, 14,214,159, 94,230,171, 35, 77, 4,205,235, + 26,108, 50,157,213, 3,218,127,183, 30,150,190,154, 53, 75, 47, 8, 4, 2,112,185, 92,228,230,230,226,236,217,179, 47,173,127, + 37, 16, 8, 94, 44,227,208, 64, 4,171,222,116, 74,165, 82,230,205, 55,223,156,118,250,244,233,169,243,231,207, 31, 89, 82, 82, + 98, 41,147,201,114, 13, 12, 12, 78,204,153, 51,103,183,177,177,113, 99, 75, 52,252, 78,147, 67, 83, 13,206, 34,124, 41,106,202, + 17, 84, 52, 48, 92,235, 15,189,238,117,150,105,168,187, 20, 67,109,234, 46,225, 80,119,153,134, 23,154,163, 70,141,122,134,170, +197, 67,233,234,247,186,179, 5,107,112,185,125,251,182,159,159,159,223, 37, 0, 98,252,126, 22,225,159, 94,230,255,229,154,255, + 42, 26, 27,131, 37,186, 26,157, 0, 90,152,131,146, 27, 95,180,196, 92,253, 14,109,101, 89,226,234,131, 73, 62, 58,149, 18,218, +226,148,199,131, 95, 27,154,211,218, 12, 16, 66, 12,174,196, 36,130, 43,202, 71,225,245,207, 11, 41, 93,101,255,152,152,152,184, +150,104,125, 7,104, 38,222,121,116,241,233,149,243,175,216, 0, 72,121,174, 66, 92,252,243,179,199,148,202,249, 53,199,100, 92, + 71, 1,128,185,191,114,239,117, 50,117, 41, 26,104,100, 3,228,164,106, 80,144,171, 61,253, 87,141,197,170, 33, 51, 51,243,137, +135,135,199,190, 93,187,118,205,242,245,245, 53,156, 61,123,118, 66, 81, 81,209, 75, 3,223,155,203,131,138,138,116, 36, 38,127, +115,241,251,205,159,136,220, 2,112, 52,100,177,238, 82,116,252,168,251,165,106,189,251,172,133, 66, 97,223, 89,179,102,241,203, +203,203, 27, 52, 87,197,197,197, 40, 41, 41, 65,113,113, 49,226,226,226, 48,122,244,104,225,163, 71,143,250, 2,136,104,172,206, + 79, 79, 79,191,220,161, 67,135,155,223,124,243,205,128,176,176,176,129,239,188,243,142,160,111,223,190,120,240,224, 1,110,222, +188,169, 82,171,213,191,137, 68,162,115, 79,159, 62,213,119, 16,214, 31,161,169, 85, 42,149,107,197, 98,113,232,145, 35, 71,214, + 92,184,112,225,173,169, 83,167, 26,104,181, 90,170, 53,154, 69, 69, 69,115,205,205,205,151,157, 58,117,106,239,217,179,103, 71, +189,245,214, 91,244,156, 57,115,176,109,219, 54, 28, 61,122,148,209,233,116, 63,243,120,188, 41,121,121,121, 77, 78, 64,169,189, + 14, 86, 99,235, 92, 53,181, 95, 15,254,136,187,208, 86,107,214,141,132,213,204, 22,172, 49, 85,205,233, 30,172, 77,231,206,157, + 95, 90,231,170,102, 64,123,205,139,195,225,128,203,229, 54,171,139,208,211,211, 19, 60, 30,143,241,241,241,217, 13, 96, 55,240, +242, 35,115,120, 60,222,139, 69, 77,245,161, 82,203,224,251, 93,251,110,106, 25, 2, 29, 67, 64, 24, 64, 67, 0, 70,199, 64,199, + 16,232, 24,166,106, 89, 52, 2, 40, 43,116,127,122,189, 86,107,153,134, 47,235, 89,138,225, 5,245, 44,225,208,224,115, 3, 51, + 51, 51,159, 19, 66,106,198,163,214, 55, 91,176, 70,115, 95,245,118,113, 70, 70,198,228,198, 52, 89, 88,154, 99,176,150,148, 70, +111,213, 0, 48,163, 40,106,113, 76, 76,204,131,214,126, 25,135, 67, 47,206, 57,254,118, 40, 1, 10, 56, 20, 22,183, 69, 6,116, + 58,221,210,178,152, 80,134, 16, 98, 76, 81,212,162,232,232,232, 86,165,147,104,181,239,127,177,243,242,151, 22, 70,130,129,121, +133,149,167, 64, 81,245,174,218,174, 5,249,240,135,207, 83, 63, 55,177,224, 14, 41,200,213,158,102,104, 44,252, 59, 92,208, 7, + 15, 30,132,236,220,185,147,243,237,183,223, 78, 83,169, 84, 47, 13,124,111,177,102,169,250,211,143, 63, 93,198,233,228,100, 55, + 59, 62, 57,117,228,253, 82,253,186, 5,107, 33,176,181,181,189, 95, 94, 94, 14,138,162, 80, 89, 89,249,146,161,170,109,176,212, +106, 53,114,114,114,224,228,228, 4,138,162,244,106, 33,170, 77,201, 73, 51, 51,179, 75, 91,183,110,125,109,219,182,109,129, 12, +195, 68,169,213,234,147,249,249,249,165, 45,201,243, 31,161, 89,253,185,143,180, 90,237,250,109,219,182,109, 20,137, 68,126, 57, + 57, 57,145,173,209,172, 54, 79,111,152,154,154,218,236,219,183,239,240,174, 93,187,186,115,185,220,235, 20, 69,141, 41, 42, 42, +106,201,122, 61,143, 91,185,191, 41,142,254, 1,197,190,213,154,181,199, 92,181,180,155,241,165,250, 65,171, 45, 93,188,120,113, + 78,221,103, 14,214, 94,243,170,246,187, 74,165,170,208, 67,147,249,236,179,207, 26,189,137,171,109,180, 42, 42, 42,154,236,210, + 37, 12,201, 27, 58,246,253,230,213,145, 12,201,251, 11,171,184,227, 0,158, 84,191, 72, 35,251,154,149, 37, 84,173,209,150, 76, + 8, 73,174,163, 91,123, 59, 11, 75,219, 24,172,152,152,152, 52, 0,111,183,229,151, 13, 30, 60,248, 60, 0,183,182,212,188,115, +231, 78, 10,128,183,218, 74,239,128, 74,149, 8, 96,216,123, 57, 42,222,143,104, 56, 34, 85, 61,160,253,245, 58,221,130,127, 11, +234, 27,248,222, 90,238,151,106,230,147,164,140,151, 6,190, 55,163,177,249, 85, 40, 20, 82,197,197,197, 80,171,213, 40, 41, 41, +121, 97,174,106,155, 44,173, 86, 11,138,162, 80, 82, 82, 2, 67, 67, 67,104, 52,154,102,221, 41, 86,155,148,240, 62,125,250, 28, +137,140,140,108,147,101, 52,254, 8, 77,165, 82,153,165, 84, 42, 39,246,233,211,135,219, 86,154,207,159, 63,207, 4, 16,216,161, + 67, 7, 65, 51,162, 96, 13, 70,178, 90,186, 95, 15,190,253, 3,138,252,143,127,183,138, 53, 37, 37,197,189,173, 53,211,210,210, + 30,182,121, 58,111,252, 48,239,159,208, 80,213, 68,141,108,109,109,247,165,166,166, 58, 80, 20,149, 90, 55,146,212,216,190,198, + 52, 1,192,201,201,233, 88, 90, 90,154,141, 80, 40,204,212,103, 59, 11,203,223, 1, 47, 86,147,213,100, 53, 89, 77, 86,147,213, +100, 53, 89,205, 22,242,222, 63,213, 0,253,139,150,141, 99, 97, 97, 97, 97, 97, 97, 97,249,123, 64, 53,226, 66,155, 51, 59,160, + 37, 78,246, 30,171,201,106,178,154,172, 38,171,201,106,178,154,255, 57,205,166,180,107,127,254, 61, 84,173,228,206,210, 6, 23, +134,213,100, 53, 89, 77, 86,147,213,100, 53, 89,205,255,158,102,125,176, 93,132, 44, 44, 44, 44, 44, 44, 44, 44, 44, 85,112,217, + 83,192,162, 15,182,182,182,235,186,117,235,246,254,173, 91,183, 54,165,165,165,173,106,161,134,141,153,153,217, 90, 0,129,132, + 16, 33,135,195,121,152,151,151, 23,146,158,158,126,185,165,233,146,203,229,246, 22, 22, 22,107, 1,116,103, 24,134,207,227,241, +238,103,103,103,175,201,204,204,188,222, 82, 77,115,115,115, 3,185, 92,238, 71, 8,177, 36,132,208, 60, 30,175, 32, 35, 35, 35, + 46, 55, 55, 55,135, 45, 9, 44, 44, 44, 44, 44,173, 54, 88,193, 31, 66, 14, 53,184,193,223, 33,173,122,147, 12, 85,139,174,185, + 1,120,132,170,199, 11,180,246,145, 1,255, 20,205,191, 59,180,177,177,241,171, 18,137,228,163,210,210, 82, 31,153, 76,118, 95, +171,213,134, 42, 20,138, 19, 0, 90,245,136, 19, 11, 11, 11,203, 81,163, 70, 45,218,186,117, 43,166, 77,155,182,236,228,201,147, +155,155,187,110,147,155,155,219, 8,169, 84,186, 99,245,234, 53, 22, 1, 1, 1,148, 72, 36, 66, 98, 98,162,237,210,165, 75,124, +205,205,205, 15,199,198,198,126,208,220,116,121,120,120,140,145, 74,165,161, 33, 33, 33, 22,126,126,126, 20,151,203,197,221,187, +119,237, 86,174, 92, 25, 96, 97, 97,177, 47, 46, 46,110,126,115, 53, 61, 61, 61,157, 12, 13, 13, 3,215,172, 89, 35, 10, 8, 8, +128, 80, 40,196,195,135, 15, 13,150, 44, 89, 98,161, 80, 40,158,196,198,198,222,104,142,158,239,123,209, 60,190, 68,205, 5, 0, +117, 57, 95, 27,243, 93, 87,141,190,219,216,234,137,133,133,133,229, 95,104,176, 86,206,196, 42, 74,139, 37,160, 65,125, 52, 30, +135,182, 29,162,111,246,239,223,191,211, 59,239,188, 67, 85, 63, 58,194, 61, 60, 60,252,141, 19, 39, 78,196, 51, 12,115, 3, 64, + 28, 0,181,158,223,203, 7,208,133,166,233,110,127,115,205,191, 61,134,134,134,206, 22, 22, 22,243,139,139,139,135,248,249,249, + 21,207,156, 57, 51,249,250,245,235, 73,254,254,254, 21,187,118,237, 10,209,104, 52, 95, 27, 27, 27,255, 86, 82, 82,178,177,165, +235, 98,241,120, 60, 55,138,162,144,145,145, 1, 30,143,199, 19, 8, 4,238, 0,244, 54, 26,118,118,118,114,169, 84,250,237,161, + 99,191, 90, 22, 87,210,120,146,203, 0, 40,135,142, 54,199,234, 13,219,204, 54,174, 93, 54,161,172,172,236,202,147, 39, 79, 14, +234,171, 41,151,203,237,165, 82,105,232,133, 11, 23, 44,133, 66, 33, 24,134, 65, 73, 73, 9, 44, 45, 45,177,110,221, 58,211,213, +171, 87,191, 83, 84, 84,116, 41, 57, 57,249,184,190,154,230,230,230, 6,134,134,134,129, 17, 17, 17, 34,129, 64, 64,105, 52, 26, +170,178,178, 18,214,214,214,228,203, 47,191, 20, 46, 93,186,212,181,176,176, 48, 43, 57, 57, 57, 85, 47,115,181, 35,154, 87,252, +107, 68, 15,146,166, 92, 6, 0,148, 72,188,166, 79,112,242,205,140,187, 71, 2,154,218,230,187, 35,250, 90,204, 12,214,100,177, +252,185,200,229,242,158, 78, 78, 78,199, 82, 83, 83,163, 56, 28,206,184,148,148,148,202, 54,144,181, 3,224, 4,192, 4, 85, 19, +171,158, 3, 72, 6, 94,220,184, 55, 27,179, 14,125,135, 67, 40,121, 27,132,116,161, 1,128,166,227, 24,117,217,158,252,132,139, +199, 91,165, 41, 50,152, 6,134,233, 66,131, 48,160, 57,119,136,182,108,103, 94,252,197,211,108,201, 96,105, 51,131, 21,252, 14, + 76, 40, 96,225,226,153,239,209, 92, 14,135, 10,217,241,221,248, 91, 81,199,137,220,161,203,139, 71,110, 4, 5, 5, 33, 40, 40, +136,218,176, 97,131,219,133, 11, 23,220,246,239,223,175,137,138,138,138, 6,176,183,161, 47, 11,153, 45, 78,213,106,148,246,160, +197, 21,237,186,127,189, 63, 48, 48,136, 17, 10,133,104,141, 38, 0,188,255, 38,247,183, 74,202,158,234, 59,108,121, 74, 91,105, +254, 67,204, 85,164, 84, 42,141, 96, 27,225, 0, 0, 32, 0, 73, 68, 65, 84,237, 56, 99,198,140, 39,179,102,205,186,100, 96, 96, + 64, 0, 32, 39, 39,199,224,181,215, 94, 43, 24, 53,106, 84,126,121,121, 57,190,249,230, 27,251,208,208,208,223,164, 82,105, 70, + 73, 73, 73, 64,115,202,135, 92, 46, 95, 63, 96,192,128,121, 19, 39, 78,132, 84, 42,197,212,169, 83, 81, 89, 89, 25,117,225,194, +133, 13, 10,133, 98, 25,128, 38,159,157, 97, 98, 98,178, 98,229,202,149,150,165, 42, 14,150,133, 37,226,121,105,149,111,144, 8, +104,124,240,138, 16,147, 39, 79, 49,138,141,141,221, 0, 64,111,131,101, 97, 97,177, 54, 36, 36,196,162,230, 90,151,150,150,162, +180,180, 20, 37, 37, 37, 40, 45, 45,197,196,137, 19,101, 79,158, 60,217,130,170,213,157,245,109, 92,252,214,172, 89, 35, 18, 8, + 4, 56,126,252,120,231,138,138, 10,174, 70,163, 1, 33, 68,219,169, 83,167,184, 41, 83,166,240, 19, 18, 18,122, 0,208,203, 96, +201,179,192, 43, 82, 42,191,218,254,249, 39, 22, 0,240,225,194, 47,190, 2,148,221,136, 30,219,228, 89,240,143, 1, 88,131,213, + 56, 28, 0,175,243,120,188,209, 29, 59,118,244,123,242,228, 73,172, 86,171,253, 63, 0,255,135,214,159,187, 87,108,108,108,214, +102,102,102,110, 7,240,195,127,229,132,118,232,208,225,167,253,251,247,155,157, 58,117,106,196,234,213,171,199, 2,216,215, 10, + 57, 30,128, 30,213,166,234, 81,181,177, 66,181,209,234, 4,160, 3,128,171,205,185,225, 53,115, 9, 52, 4, 87, 22,222,163,103, +159, 94, 99,222, 24, 37,181, 48, 53, 66, 89,165, 14, 9,201, 89, 14,103, 79,253,212,231, 49, 95, 28,165, 85, 23,141,207, 79,136, + 42,109,174,102,191,254, 3,123,245,127,101,128,212,200,200, 24,249, 37, 26, 60, 77, 78,119,140,252,237,231, 32,154, 43,190, 4, + 74,243, 86,206,189,223,202,217,159, 28, 75,115,208,107,144, 59, 69, 81, 48, 48, 52,168,119,159,145,145, 17,250,246,237,139,144, +144, 16, 30,128,238,117,118,191, 52, 85, 83,167, 83,201,151,125, 48, 27, 2, 46, 17,190, 54,100, 16, 37,147,201, 90,173, 9, 0, + 86,166,218, 1,221, 92,149,125,178,227,230, 76,138,139, 92,235,165,170, 40,252,221,147, 78, 37, 18, 9,156,157,157,177,116,233, + 82,189, 52,219,128, 63, 92,147, 16, 98,227,238,238, 94,178,121,243,102,215,229,203,151,155, 84, 84, 84, 24, 0,176,115,247,233, +105, 67,211,180,189, 74,165,146, 6, 7, 7,155,127,254,249,231,174, 22, 22, 22,133,132, 16,139,230,164, 83, 46,151,111, 14, 9, + 9,153,191,103,207, 30,202,223,223, 31, 82,169, 20, 61,122,244, 64, 88, 88, 24,189, 98,197,138, 69,114,185,124,189,158,121, 15, + 10, 8, 8,160, 24, 0, 5,165, 90, 68,172,235,138,171, 95,248,163, 92,197,160,168,164, 20, 74,165, 18, 34,145, 72,108,102,102, +102,216,140,243,217,221,207,207,143, 2,240,194, 84,149,148, 84,189, 74, 75,203,160, 82,169, 65,211,180,204,209,209, 81,216,140, +243,105, 25, 16, 80,229, 63, 43, 42, 42,184, 35, 70,140,192,176, 97,195, 80, 82, 82,194, 45, 46, 46,134, 74,165, 2, 77,211,252, +234,134,189, 73, 77,149,132, 71, 49,132,177, 50,144,136,205, 13, 36, 98,115,134, 48, 86, 0,160,207, 54,149,132, 71,253,197,229, +211,130,166,233,221, 29, 58,116,120, 72,211,244, 62, 0,214,173,212,244, 7, 16, 34, 22,139,207,185,185,185,165, 73, 36,146, 11, + 0,214, 87, 55,192, 45,209, 20, 72, 36,146, 11, 33, 33, 33,135, 99, 99, 99,199,158, 63,127,222,233,238,221,187,111,108,216,176, + 33,220,208,208,176,230,193,188, 45,254,109, 58, 57, 57,237,186,113,227,134,127, 96, 96,224,247, 0,132,109,244,123,231, 0,240, +169, 54, 28,127,139, 58,164, 54,182,182,182, 29,125,124,124,204, 57, 28, 14,130,130,130, 64, 8, 9,106,165,102, 32,128, 44, 0, +145, 0,114,171,111,198,116, 0,242, 0, 92,174,190, 81, 9,106,150, 38, 87, 22,254,209,199,159, 14, 94, 48,251, 93,105, 76,138, + 14, 59,207, 42,112,232, 74, 46, 50, 74,132, 24, 56,114,154, 81,159,161, 19, 7,113,249, 70,225,205,213, 92,180,104,201,224,119, +167, 78,146,222,203,164,113,248,106, 30,174, 60, 42, 70, 57,101,130,190, 35,223, 51,113, 15, 24,242, 26, 5,254,222,191,195, 53, +250, 15,104,254, 7, 34, 88,187, 80,176,114, 38, 62, 15,249,230,187,101, 52, 69, 17, 59,151, 65, 15,156,156,187,151, 49, 12, 3, +165, 82, 9,181, 90, 13, 30,143, 7,165, 82,137,148,148, 20,220,184,113, 3, 70, 70, 70,205,250,226,194,162, 34,216,218, 57, 65, + 34,145,180,137,230,244, 55, 71,113, 83, 21, 10,110, 84, 76, 68,215,131, 91,247,119,181,239, 48,240, 81,151,190,159,222, 51, 52, +114, 80,198,197,197,225,218,181,107, 40, 40, 40, 64, 77, 3,250,111,128,162, 40,205,198,141, 27, 99, 50, 51, 51,113,249,242,101, +159,149, 91,126,108,119,175,184, 3, 55,183,148,240, 44, 12,179, 29,221,196,143,117, 5,207,159, 39,205,159, 63,255,130, 92, 46, + 87,205,158, 61,187,143, 62,186,182,182,182, 34,138,162,186, 14, 26, 52,232,131, 41, 83,166, 32, 57, 57, 25, 11, 22, 44, 80,197, +197,197, 21,118,237,218,213,100,227,198,141,252,247,222,123, 15, 81, 81, 81,243, 35, 34, 34,142, 0,184,159,145,145,209,216,179, +212, 4, 34,145, 8, 40,170,186, 81, 85,107, 9,106,134,133,149,150,150,130, 38,133,224,243,249, 52, 77,211, 22, 0,244,186,243, +100, 24,134, 47, 16, 8, 80, 86, 86,134,210,210, 82,100,228,150, 34, 37,187, 12, 37,101,149, 80, 42, 53,168,172, 32, 16, 74,173, +104, 77,110,174, 25,128, 12,125, 52, 9, 33,116, 77,119,163, 74,165,130, 82,169,132, 74,165,130, 74,165,122,241, 56, 31, 14,135, + 35,181,181,181,149,101,100,100, 20, 52,217,154, 10,196, 90, 14,205, 15, 89,178,230,171, 96, 0,224,208,252, 16, 67, 84, 48,250, +108,227, 8,196,218,191,176,104, 9, 45, 44, 44, 34, 14, 31, 62,236,238,236,236,140,103,207,158,185,141, 25, 51,166,155, 66,161, +240, 1,208,220,187,120, 9, 77,211,159, 79,153, 50,229,253, 9, 19, 38, 80, 46, 46, 46,224,114,185,208,106,181,118,137,137,137, +253, 14, 29, 58,180,112,215,174, 93, 59,117, 58,221,124,125,175, 61, 0, 90, 32, 16, 28,220,177, 99, 71,239,110,221,186, 97,223, +190,125,184,121,243, 38,227,239,239, 79, 79,158, 60, 25,142,142,142,221, 39, 79,158,124,180,178,178,114,152, 62, 17,214,122,112, +236,209,163,135, 61,135,195, 65, 96, 96, 32, 63, 42, 42,202, 23, 64, 84,107, 3,206,118,118,118,145,125,251,246,245, 57,119,238, + 92, 76, 86, 86, 86,223,102,228, 23,114,185,124,164,149,149,213, 6,169, 84,106,162,239,103, 74, 75, 75,203,179,179,179, 23,100, +102,102, 30,209,179,252, 7,122,123,123, 67,171,213,194,200,200, 8,214,214,214,189, 40,138,154,111,100,100,244,122,113,113,241, +188,140,140,140,155,205,200,175,109,245, 13,124,205,115, 1,219, 85, 71,173,128,170,231, 89, 62, 3,144, 4,192, 6,128, 61,244, +232, 46, 52,235,208,119,120, 96, 80,191, 94, 65,221,188,232,117, 71,146,161, 99, 24,112,161, 3,151,195, 32, 79,199, 3, 69, 81, +112,116,245,231, 88,221,187,221, 93,171, 86, 15,207, 79, 56,119, 92, 31,205,193,131, 6, 5,117,114,117,161, 55, 29, 75, 69, 97, +198, 61, 93,246,163, 11,121, 20, 77,163,125,151,129,230,142,174, 62,156,142, 62,175,240,178,147,239,245, 83,119,236, 61,160, 32, +241,210, 57,214, 54,176,180,196, 96,145,218,119, 86, 43,190,197,114, 51, 99,180,123,112,239, 14,157,150,165, 42,187,115,231, 14, +204,204,204, 96,105,105, 9,153, 76,134,248,248,120,156, 59,119, 14,143, 31, 63, 6, 33, 4, 62, 62, 62,205,250,226,236,172, 44, +228, 63, 47,105, 83, 77, 7,185, 28, 14,114, 57, 55,175,160, 16,215,238,220,117, 63,190,115, 64,167,108,122,198, 30,165, 82,249, +226, 24,141,230,223,215,235, 98,105,105,169,251,240,195,217,249,211,191, 74,234, 48,190,191, 45,103,100, 15,107, 28,139, 82,112, +194, 47,114,200,178,119, 58,231, 37, 38, 38,232,157,105, 7, 7,135,181,189,123,247,254,132,203,229,242,222,123,175,106,249,145, + 57,115,230, 84,222,189,123,215, 35, 61, 61, 61,169,178,178,178,211,188,121,243,238, 30, 61,122,148,247,238,187,239, 82, 21, 21, + 21, 55,121, 60, 30,137,140,140, 92,165, 80, 40,130,235, 53, 26, 28, 78,236,131, 7, 15,218,105, 69, 54, 48,151,210, 24,180, 44, +166,170,197, 17, 18,228,101,103,224,126,226, 45, 88, 88, 88, 24,153,155,155, 63,202,201,201,169,204,206,206,254, 40, 41, 41,105, +111, 99,233,228,241,120,247,239,222,189,107,103,101,101,133,210,210, 82,164,229,148, 97,247, 53, 10,229,149, 98, 0, 98,112, 32, +133,212,220, 94,218,158,148,199,153,152,152,168, 85, 42,213,162, 39, 79,158,252,208,132,102,193,195,135, 15, 13,108,109,109,193, +225,112,212,135, 14, 29,226,171, 84, 42, 16, 66,180,167, 78,157, 26, 87, 88, 88, 24,216,161, 67, 7,218,209,209,113,163,131,131, +131, 82,161, 80, 76, 79, 78, 78,110,240, 65,195,103,230,116, 84,247, 9,190,248,117,225,179,180, 67, 0, 96,219,205,253,249,137, + 96, 95, 85,159,224,210, 38,183,157,153,211,241,175, 28, 39,248,246,146, 37, 75,220, 77, 77, 77, 49,115,230, 76,172, 92,185, 18, +203,151, 47,119,158, 57,115,230,123, 0, 54, 55, 67, 71,108,109,109,125,107,235,214,173,110, 61,123,246,196,169, 83,167,112,224, +192, 1, 36, 37, 37,105,157,156,156,184,221,186,117,195,138, 21, 43, 48,104,208,160,233,179,103,207,238,147,153,153,233,171,167, +233,152,182, 98,197,138,145,189,122,245,194,212,169, 83, 43, 47, 94,188, 56, 22,192,217,223,126,251,173,127,100,100,228,145, 31, +127,252, 81, 28, 18, 18, 50,120,222,188,121,179, 0,108,111, 65,254, 71,245,238,221, 27, 0,208,171, 87, 47,108,216,176, 97, 80, + 43, 13,150,192,204,204,236,228,190,125,251,124, 92, 93, 93,241,214, 91,111,249,142, 29, 59,246,100, 65, 65,193, 64, 0,122, 61, + 55, 82, 46,151,127,190, 99,199,142,142, 98,177, 88,239, 47, 85,169, 84,166, 51,102,204, 88,223, 28,131,229,229,229,133,139, 23, + 47, 98,192,128, 1,240,244,244,236, 56, 99,198,140,141,131, 6, 13,194,199, 31,127,124, 69,171,213,218,100,103,103,235,251,160, +103, 71, 0, 53,207, 45,117, 0,224,140,170,238, 64, 0,232, 86,253,254,172,218,108,117,210,199, 96, 65,100,240,246,136, 97,195, +164,255, 23,149, 3, 29,195,192,205, 86, 4,119, 7, 25,146,115, 42,144,156,145, 15, 30,165,134, 84, 44,132,119,224,107, 38,207, +179,147,223,134, 62,195, 3,132,146,183, 71,141, 24,102,248,211,181, 28, 20,102,220, 39, 41,183, 14, 93,208, 84,148, 77, 7,128, + 7,151,126,248,214,202, 68, 52,208,165, 75, 87, 78,121,208, 72,147,200, 99,223,188, 93, 0,176, 6,235,143,135, 52, 35,202,251, +207,139, 96,213,144, 95, 8,165,153,181, 59,210,178, 98,171,254,207,207, 71,126,126, 62,218,183,111,143,208,208,208,151,142,109, +233, 19,232,255, 8, 77,115, 19, 99,140,232,215,135,115, 47,254, 27,142,146, 81,182,137,230,223,182, 36, 18, 66, 40,138,162, 82, +242, 52,198,121,197, 26,254,184,126,246,132,199,161, 49,190,159, 3,181,253,120, 10, 63, 79, 41, 49,230,112, 56, 52, 33,164,201, + 59,121, 95, 95, 95,158,151,151,215, 39,187,118,237,226, 41, 20, 10, 24, 27, 27, 67,163,209, 32, 54, 54, 54, 83,161, 80, 36, 1, + 64, 86, 86, 86,252,205,155, 55,179,117, 58,157,157,155,155, 27,102,204,152,129, 78,157, 58, 81,243,231,207, 95,120,240,224,193, + 85,168,103,198, 98,118,118,118,200,210,165, 75,123,175,221, 16,106, 54,169, 27,133,178,114, 21, 74, 75, 75,145,156,112, 31,164, + 84,133, 77,155,190,132, 88, 44,166, 0,240,115,115,115,249,193,193, 43,190, 55, 54, 54, 30, 22, 29, 29, 61,186, 65,131,158,157, +189,102,197,138, 21, 1,155, 54,109, 50, 45, 45, 45,133,178,162, 2, 37, 74, 1,110,124, 89, 21,161,236, 54,239, 38,182,127,177, +145,246,114, 52, 48, 43, 45, 45,197, 39,159,124,178, 85, 34,145,116,143,139,139,123,191, 33,205,140,140,140,184, 37, 75,150, 88, +108,219,182, 77,216,169, 83,167,187,197,197,197, 40, 40, 40,160,143, 30, 61,186,218,209,209,209,116,235,214, 80, 74, 34,145, 0, + 0,210,210,210,248,203,150, 45, 61,104,104,104,248,227,189,123,247,166, 54,116,121, 34,131,251, 86, 2, 68, 97, 99,211,190, 99, +249, 53, 58,216,198,166,226, 74,100,112,102, 24, 64, 20,213,113, 72, 98,109,109, 61, 41,117,159,176, 87,101, 37,179, 37, 43, 43, +229, 49,240,215, 62, 84,214,220,220,124,246,200,145, 35,177,126,253,122, 28, 63,126,124,158,169,169,233,151, 43, 87,174,132,141, +141,205,135,153,153,153, 91,170, 43, 64,125,248, 98,243,230,205,110,110,110,110,152, 50,101,138,234,220,185,115, 75, 0, 28, 3, +144,114,249,242,101,135,189,123,247, 14, 63,120,240,224,250,173, 91,183,138,182,109,219,214,241,141, 55,222,216,194, 48,204, 59, + 77,137, 90, 89, 89,125, 60, 97,194, 4,108,220,184, 17, 23, 47, 94,124, 3,192,169,234, 93,167,175, 94,189, 58, 60, 36, 36,228, +252,178,101,203,176,121,243,230,185,233,233,233,205, 53, 88,134,238,238,238,159, 13, 30, 60, 24,151, 47, 95, 70, 80, 80, 16,122, +244,232, 49,239,218,181,107,161,168,234,218,106, 46,180,161,161,225,193, 61,123,246, 4,181,107,215, 14,107,214,172,193, 39,159, +124,130, 93,187,118, 5,189,245,214, 91, 7,203,202,202, 70, 67,143, 89,190,134,134,134,134, 98,177, 24,235,215,175, 39,169,169, +169, 77, 70, 79,229,114,185,201,103,159,125, 70, 25,233,215, 13,192,177,177,177, 49,178,178,178,234,109,109,109,141,173, 91,183, +194,210,210, 18,243,230,205,131,153,153, 25,202,202,202, 48,122,244,104,222,245,235,215,199, 3, 8,213, 51,223,102, 0,106, 34, + 94,238,213,230,170,164,250,255,235, 0,122, 85, 27,172,231, 0, 76,245, 58,145,132,120,153, 24,203,144,121, 55, 27, 92,104,225, +230, 32,197,237,196, 50,168,117, 4, 18, 3, 67,148,149, 20,162, 75, 71, 11, 20,151,219, 1, 96,244, 90, 4,147,207,161,187, 10, +132, 98,228, 20, 23, 33,235,225,249,124,181,174,114, 70,209,179,171,105, 0, 96,210, 62,104,198,253, 27,103,110,143, 30, 18,100, +153, 91,224, 0, 66,152, 0,176,176, 52,231,199,223,212, 1, 12,243,251,223,126,237,136, 80, 13,106,117,235,110,184,255, 8,205, +250,248, 35, 52,255, 14, 62,203,214,132, 91,100, 32,162,181,191,221,206,209,105,180, 58,252,122, 59, 75, 39, 17, 82, 90, 19,161, +170,152, 97, 24,189, 26,196,152,152, 24,205,229,203,151,247, 45, 94,188, 24,155, 55,111,198,211,167, 79,193,227,241,224,234,234, +106,101,103,103, 39,175,174,184,237, 61, 61, 61,205, 57, 28, 14, 18, 19, 19,113,224,192, 1, 4, 7, 7,147,232,232,232, 93, 13, + 53, 20, 10,133, 34, 54, 59, 59,123,199,186, 85, 75, 10,121,149,153,144,232,114,161, 43,124, 10,158,174, 8,179,231, 45,198,179, + 60, 29, 98,159,149, 32,246, 89, 9,178,148, 34,124,182,102, 19,199,217,217,121,184,173,173,237,160,134,210,154,153,153,121, 93, +161, 80,132, 45, 95,190,188, 40, 47, 47,239, 69,249, 81,107, 25,168,181, 76,221,198, 9,235,214,173, 51,150,203,229,227,108,108, +108,250, 54,164,153,155,155,155,147,153,153,153,184,120,241, 98,117,110,110, 46,138,139,139,113,230,204,153, 55,218,183,111,111, + 58,127,241, 42,234, 89, 30,121,145,206, 34,198, 24, 27, 67,119,114, 58,116,232, 48, 81, 46,151, 55, 58,142,200,198,198,182,163, +187,123,135,195,215,175, 95,159,218,177, 99,199,247,107,140, 85,141,145,114,114,114,154, 25, 29, 29, 61,205,199,199,227,176,149, +149,117,167,191,184, 44,245, 27, 55,110, 92, 39,134, 97,112,248,240,225,187, 0, 54,255,244,211, 79,183, 42, 43, 43, 49,126,252, +120, 39, 0,131,245,212,241,159, 56,113,226,251, 65, 65, 65,152, 59,119,174,250,220,185,115, 93, 1,124,137,170,217, 99, 4, 64, + 10,128,208,200,200,200, 46,179,103,207,174, 12, 8, 8,192,212,169, 83,167,161,225, 49, 57, 53, 4, 78,152, 48,193,141, 97, 24, +132,135,135,223,169,101,174,106,184,112,228,200,145,235, 42,149, 10,147, 38, 77,106, 15,160,127, 51,242,206, 23, 10,133,135, 87, +175, 94,109,156,145,145,129,201,147, 39, 87,198,199,199, 35, 56, 56, 88,108,100,100,116, 10,128, 97,115, 79,166, 80, 40,252,238, +155,111,190, 25,233,237,237,141, 89,179,102,169,190,254,250,235, 57,239,191,255,190,170,107,215,174,248,234,171,175, 70, 10, 4, +130,102, 61, 2, 36, 59, 59,187, 48, 50, 50,210,172,169, 87, 86, 86, 86,182, 62,122,246,246,246,198,158,158,158,119,253,253,253, +243, 58,119,238,220, 1, 0,238,223,191,159,123,248,240, 97, 98,102,102,134, 51,103,206,224,187,239,190, 67,207,158, 61, 33,149, + 74,199, 55, 51, 10, 65,106,253, 93,223,254,186,199, 53, 14, 69,145,162,114, 45,184, 52, 13, 30,135, 32, 37,187, 2,106, 29, 1, +159, 71,131,199, 1,184, 52,129,153,148, 7, 30,143, 3,125,111, 82,104,138, 66, 65,153, 6, 92, 14, 5,158,128, 79,209, 90,221, +139, 16, 33,205,213,137,133, 34, 33,101,105,196, 7,159, 75,129,162,192,194,210,118, 17, 44, 0,208,233,126, 31,248,168, 47, 10, +164, 82,169, 90,149,144, 63, 66,179, 62,254, 8,205,191,146,226,226, 98,110,100,100,164, 17,143,199, 51, 24,230,221, 51,255,243, + 67, 9,230, 43,247, 63,134,128, 3,106,120,103, 90,113, 49,226, 28, 85, 80, 80, 96,226,236,236, 92,160,143, 94, 82, 82,210,244, +176,176,176, 53, 52, 77, 7,232,116,186, 67,155, 55,111,198,246,237,219, 37, 51,103,206,140,215,233,116, 25, 46, 46, 46,246, 91, +182,108, 17, 2, 64, 88, 88, 24,126,253,245,215, 81, 60, 30,239,102,106,106,106, 86, 99,186,119,238,220, 89, 86, 88, 88, 24,149, +148,148, 20, 74, 81,148,177, 84, 42, 53,249,233,167,159, 40, 69,161, 10,203,194,158,190,152, 89,104, 32,228, 96,241,235, 22,120, +243,205, 49,220, 39, 79,158,124,145,145,145,241,107, 67,154,177,177,177,243, 10, 11, 11, 35, 19, 18, 18, 54,243,205, 92,205, 68, + 94,239, 73,251, 47,174,234,126,148,155, 10, 65, 87, 87,136, 69, 69, 69,200,203,203,195,180,105,211,140,215,174, 93,187, 48, 51, + 51,243, 98, 67,154,113,113,113,215,139,138,138, 20, 9, 9, 9,221, 9, 33, 2, 35, 35,163,158,155, 55,111,166, 82,158,171,176, +104,111, 34, 74, 42,170,210, 41, 21,241,176,106,130, 29,166, 78,157,202,125,246,236,217,231, 10,133,162, 87,253,230,202,198,217, +221,221,253,240,254,253,251,221,183,108,217,242,252,201,147, 39,101,114,185,124,101,237, 99,146,147,147, 43,215,173, 91,151, 31, + 22, 22,230, 58,121,242,228,195, 49, 49, 49, 99, 91,186,164, 70,107,145,201,100,235,103,204,152,129,131, 7, 15,162,160,160, 96, + 75,117, 25,219,188,127,255,254,240,233,211,167, 35, 44, 44,108,125,110,110,238, 25, 61, 26,197, 33,227,199,143,199,233,211,167, +113,254,252,249,207, 0, 60,104,224,184,132,203,151, 47, 47,252,249,231,159,183, 78,152, 48, 1,187,119,239, 30,140,170, 1,208, + 13, 49,112,208,160, 65, 56,117,234, 20,242,243,243,191,170,239,128,194,194,194,175,127,249,229,151,238,131, 6, 13,194,186,117, +235, 6, 2,184,160, 71,214,221,140,140,140,246,108,221,186,213,223,219,219, 27, 19, 39, 78,172, 80,171,213,131, 63,249,228,147, +227, 7, 14, 28,144,238,219,183,207,239,189,247,222,187,145,147,147,243,110,117, 4,166,233,198,155,166, 67, 54,109,218,244, 78, +223,190,125, 49,111,222, 60,237,175,191,254, 58, 2,192,217, 51,103,206, 36,126,250,233,167, 39, 55,109,218,196,217,184,113,227, + 59, 31,125,244, 81, 46,195, 48, 75,254,138,235, 77, 81,212,198, 77,155, 54,185,123,120,120,160,162,162, 2, 79,159, 62, 69,118, +118,246,254, 51,103,206,156,189,119,239,222,134,172,172,172,163, 86, 86, 86,211,231,205,155,103,231,239,239,239, 95, 86, 86,102, +162,207,248,195, 90,145,169, 28, 0, 15, 81, 53,177,168,230,188,117, 67, 85,215, 32, 80, 53,163,176, 64,207,196,222, 77,120,150, +209,222,196, 80,134, 2, 70,128,103, 25,121, 16, 27, 24,128, 38, 52,180,202, 2, 56, 59, 90,130, 33, 64,113, 94, 6,104,154,186, +171,143,164, 70,199, 68, 39,167,101,219, 26, 27,136,224,220,117,168,217,157, 11,187,127,144,181,239,249, 30,151, 67,113,120, 2, +195, 29, 19, 39, 76, 49,215,232, 8, 74, 11, 20,160, 56,244, 77,176,176,180,117, 4,171,110,191,127,221, 40,144, 88, 44, 70,101, +101,243,150, 75,249, 35, 52,245,249,206,182,214,252, 43,209,104, 52,210,247,223,127,191, 87,122,122,186,204,213,213, 53,113,168, +191,197,181, 93,115,218, 95,235, 38,123, 80,190,244, 53,234,154,189, 40,251,150, 80, 40, 76, 45, 40, 40, 16,132,133,133,249,106, + 52, 26,137, 62,186, 89, 89, 89,169,153,153,153,135,143, 28, 57,242,195,137, 19, 39,208,169, 83, 39, 92,186,116, 73,154,144,144, +224, 22, 17, 17, 97,224,236,236,140,163, 71,143,226,151, 95,126,217,169, 80, 40,126,110,202, 92,213,144,154,154,122, 38, 46, 46, +174, 99,126,126,126, 71, 99, 99, 99,141,177,177, 49,234,206, 44, 44,171,212,161,176,184, 4,198,198,198,144, 72, 36, 78, 77,105, + 38, 39, 39, 31,191,115,231, 78,123,152,186, 5,113,146,246, 23,125,253, 97, 39,124,253, 97, 39,172,126,171, 3,172, 77, 4, 40, + 44, 44, 68,110,110, 46,114,115,115, 65, 8,129, 78,167,115,215, 67, 51, 53, 46, 46,238, 96, 70, 70,198, 57, 11, 11, 11,202,208, +208, 16, 4, 64, 65,169, 26, 87, 55,248,227,234, 6,127, 20,148,170, 81, 82, 90, 6, 91, 91, 91, 72,165,210,122,187, 35, 76, 76, + 76,164,132,144,189,223,127,255,189,155, 84, 42,229, 76,159, 62,221,248,218,181,107,189,174, 93,187,182,168,206,171,215,135, 31, +126,104, 34,145, 72, 56,187,119,239,118,225,112, 56,123, 28, 29, 29,141,254,228,226,196, 1,240,193,244,233,211,253, 68, 34, 17, +182,111,223,158, 4,224,199,234,125,135,191,254,250,235,120, 0,152, 51,103,142, 39,128,121,104,124, 38, 37,248,124,126, 87,119, +119,119, 92,187,118, 13, 0,126,106,226,187,143, 68, 69, 69,193,217,217, 25, 34,145,200,191,137, 99,157,236,237,237, 17, 31, 31, + 15, 0,177, 13,121,239,248,248,120,216,219,219,131,162, 40, 39, 61,242, 62,242,213, 87, 95,189, 27, 17, 17,225, 31, 24, 24,136, +119,222,121, 71,117,227,198,141,161, 0, 46,197,198,198,246,155, 52,105, 82,153,139,139, 11, 34, 35, 35,221, 38, 77,154, 20, 69, +211,244, 26, 61, 52,167,173, 90,181,106,241,168, 81,163,176,106,213, 42,114,232,208,161,137, 0,206, 86,239,251, 53, 60, 60,124, +242,218,181,107,201,232,209,163,177,114,229,202,197, 0,102, 53, 38, 86, 94, 94, 94,164,211,233, 80, 94, 94,174,215, 29,162,190, +199,183,111,223,126,136,135,135, 7,126,254,249,103, 8, 4, 2,252,246,219,111,160,105,250,100, 86, 86,214,217,232,232,104,239, +204,204,204,213, 10,133,226, 72, 98, 98, 34,130,130,130,104,157, 78, 55, 90,207,242,244, 12,128,119,245,223,105,168, 26,143, 21, + 8,160, 39,128,132,234, 72, 38, 80,245, 60,187,103,250, 8, 50,170,210,125,231, 79, 29, 41, 50, 49,228,195,220,196, 0, 86,230, + 50,112, 52,101,128,170, 16, 29, 29,173, 16,224,110,141,103, 57, 42, 68,157, 59, 92, 88, 94, 90,174,215,242, 18, 58,117,217,158, +243,103,126, 46, 50, 53,228,163, 93, 71, 15, 12,159, 56,215,199,205,187,219,111, 94,190,189,126, 93,182, 34,164,243,171,189,220, +169, 7,105, 21,184,126,254, 88, 65,121, 73,241, 30,214, 50,176,180, 52,130, 85, 95, 0, 52,103,222,188,121,150,243,231,207,135, + 76, 38, 67,126,126, 62, 52, 26,205,139,104,147, 80, 40,132,177,177, 49,242,243,243, 17, 30, 30,142,234,187,149,134,107,112,142, + 64,177,230,171,109,246, 20,199, 64, 37, 20, 75,136,169,164,245,154, 0,160,210,112,115,190, 9, 63,106, 58,164,119, 15,174,131, + 92,254,187,253, 45,209,252,135, 24,172,223,178,178,178,252, 58,117,234,148,229,232,232,168,172,168,168, 0, 81, 42, 75, 78,133, +111,233, 96,111, 52,235, 41, 77,211, 68, 44, 22, 51,198,198,198,101, 79,159, 62,165,180, 90,109, 68,115,244, 9, 33, 51,103,206, +156, 73, 95,190,124,121,226, 91,111,189,133,118,237,218, 33, 54, 54, 22, 97, 97, 97, 56,114,228,200, 94, 62,159, 63,167, 37,233, + 78, 75, 75, 43,117,119,119,127, 41, 2, 82,119,102,161,166, 50, 23, 12,195,232, 61, 56,191, 32, 38,236, 49,199,220, 92,227,233, +240,191,229, 68, 10, 10, 10,144,155,151,135,220,220, 92,228, 85,191, 19, 66,244, 14, 97, 82, 20, 85,162, 82,169,234,164,243,127, +221,143,101,101,101, 80, 87,230, 64,167,211,213,171, 89, 80, 80, 80, 34,151,203,183,133,134,134,110, 90,189,122,181,229,230,205, +155,159, 63,122,244,168,152,166,233,138, 58, 55, 49,162,142, 29, 59, 74, 55,110,220,104, 21, 26, 26,250,156, 97,152,109, 41, 41, + 41, 69,127, 98, 81, 26,229,237,237,189,119,200,144, 33,210,247,223,127, 31,161,161,161, 80, 40, 20,139, 0,212,204,100,100,242, +242,242, 62,253,234,171,175, 78, 44, 92,184, 16,106,181,122,227,169, 83,167, 86,198,196,196,204,172,101,194, 94,194,194,194,194, +142,203,229, 34, 38, 38,166, 24,192,211,166, 60,125, 76, 76, 76, 54, 69, 81, 86,114,185,188, 67, 82, 82, 82,131, 7,154,154,154, +118,148, 74,165,200,200,200, 64, 35, 13,115,114,102,102, 38, 17, 8, 4,148,141,141,141,115,245,177, 13, 98, 98, 98,242,233,247, +223,127,207,141,136,136,192,138, 21, 43,210, 83, 82, 82, 38,213,138,162,197, 68, 71, 71, 7,245,235,215,239,192,194,133, 11, 93, + 63,255,252,115, 42, 62, 62,126, 86, 76, 76,204,178,198, 52, 29, 29, 29,103, 78,155, 54, 13,219,182,109,195,142, 29, 59,102, 1, + 56, 92,231,144, 3, 95,125,245,149,137,153,153,217,182, 25, 51,102, 96,207,158, 61,147,158, 61,123,246, 77, 67,122, 25, 25, 25, + 11,199,141, 27,183,252,249,243,231, 33,250, 92, 80,125,142,151,203,229, 35,252,252,252,172, 8, 33, 8, 13, 13,205,218,182,109, + 91,121,113,113,241,143, 10,133, 34,162, 78, 36,238,232,153, 51,103,230,189,255,254,251,136,136,136,216, 30, 25, 25, 73, 20, 10, +197,247, 77, 36, 65,129,170,117,174,220,171, 35, 88,105,248,253, 64,118,215,234,247,116,125,242,148,159,112,241, 56,135, 39,186, + 26,119,243,226,171, 78,158, 65, 60, 75, 19, 41,108,157,205, 97,106,200, 7, 1,112, 47, 69,137,235,151,206,106,114, 20,169, 81, +250,204, 32,172,209,124,194, 23, 71, 73,204, 29, 95,109,239,209,139,235,228,236,130,129, 61, 59,155,152,201,120, 80,105, 8,126, +139, 43,194,181,200,211,154,156,236,180, 8,118, 6,225,159, 23, 88,253, 47, 69,184,130,184, 92,238, 23,159,126,250,233,142,135, + 15, 31,238, 72, 72, 72,216, 17, 19, 19,179, 99,205,154, 53, 59,130,131,131,119,248,249,249,237,160,105,250, 11, 84,141,157,168, + 27, 17,243,250, 51, 52,251,244, 1,119,226, 96,172, 89, 53,147, 91, 30,182,198, 94,147,123,105, 44, 33,247,103,145, 85, 51, 65, + 90,145,206,214,242,103,105,122,114,185,220, 51,142,142,142,215,247,237,219,119, 48, 38, 38,102,183,169,169,105,230,154, 53,107, +190,159, 51,103, 78,184,181,181,245, 77, 30,143,119, 14, 64,231,150,166,211,202,202,234,141,183,222,122,139,156, 62,125,154,188, +249,230,155,196,198,198,102,104,107,243,222,189,123,247,172,123,247,238,145,135,105,101,228,141,181,113,164,231,130, 91,164,231, +130, 91,100,240,178,155,228,219, 3,103,201,138, 21,193,196,203,203,235, 92,115, 52,187,116,233,146,144,147,147, 67, 8, 33,228, +249,243,231, 36, 62, 62,158, 92,190,124,153, 28, 61,122,148,236,216,177,131,132,132,132, 48,157, 59,119,222,219, 28,205, 30, 61, +122, 60,127,242,228, 9,121,144, 90, 70, 70,173,190, 83,157,206,155,100,216,138,104, 18,126,242, 58, 89,181,106, 21,241,240,240, + 56,212,152,166, 92, 46, 31,191, 96,193, 2,197,243,231,207, 53,254,254,254,145,117,247,251,250,250, 30,203,203,203,211, 44, 93, +186, 52,219,198,198,102,202,159, 93,150,204,204,204,174,166,167,167,147,164,164, 36,242,201, 39,159, 16, 14,135, 83,111,227, 73, +211,244,246,185,115,231,146,167, 79,159,146,204,204, 76, 34,151,203, 99, 27, 73,231, 48, 75, 75,203,219, 0, 70,233,153,158, 97, +150,150,150, 55, 1,140,110, 44,239, 14, 14, 14, 15,210,211,211,137,135,135,199,243,198,196,156,157,157,211,210,211,211,137,139, +139, 75,134, 30,231,243, 53, 43, 43,171,104, 0,107, 1,136, 26,185, 25,253,216,218,218,250, 42,128, 15,244,208, 28,233,234,234, + 26, 3, 96,118, 19,249,126,207,201,201, 41, 14,192,107,127,246,117,247,244,244,188,150,145,145, 65,118,238,220, 73,228,114,249, +194,198, 62,212,174, 93,187,159,143, 31, 63, 78, 20, 10, 5,241,241,241,137,209, 51,157, 92, 0,125, 80, 53, 14,206, 26, 85, 11, +143,242, 0, 88, 1,232, 11,160, 31,170,158,192,161,119, 29, 98,230, 18,104,104,229, 53,228,132,199,171,179,159, 79, 93, 23, 65, + 22,238, 77, 36,159,253,152, 68,230,134, 94, 33,254,195,230, 62,183,233,252,218, 9, 51,151, 64,195,230,106,202,189,135,158,236, + 60,244,227,231,111,175, 59, 79,150,236,123, 74,130, 15, 36,145,143,182, 68,146,128, 17,115,243,237, 58, 15,255,201,210,107,160, +228, 47,174,231,255, 43,154,245,254, 70,254,237, 70, 75, 0,224, 53,169, 84, 26,186, 98,197,138, 29, 55,110,220,216, 49,108,216, +176, 29, 2,129, 32,180,186, 98, 16,180,224, 2,180,185,230,224, 0, 72,167,141,160,119,175,158,197, 85, 31,219,220, 73,179,106, + 38, 72, 27,164,243,159, 82,160,123,241,120,188,107,222,222,222, 17, 82,169, 52,183, 93,187,118,151,121, 60,222, 77, 0,189, 91, +155, 78, 43, 43, 43,243,119,222,121,135,121,246,236, 25,153, 50,101, 10,209,163,251,170, 73, 77,123,123,251,254,163, 71,143,214, +164,101, 21,146,203,113,105,228,196,165, 7,100,255,137,107,100,199,129,179,100,203, 55,123,201,192,129, 3, 43,173,172,172, 28, +155,163,233,224,224, 48,120,196,136, 17,133,121,121,121, 36, 62, 62,158, 92,186,116,233,133,185,250,230,155,111, 72,231,206,157, +243,109,109,109,109,154,163,233,232,232, 56,114,210,164, 73, 26, 69,126, 25,185,241, 32,139,252,118, 35,145, 28,187,112,135, 28, + 56,113,141,236, 61,240, 19,233,211,167, 79,133,185,185,185, 85, 83,154,114,185,124,220,216,177, 99,159,184,186,186,126, 91,143, + 25,248,106,236,216,177, 41, 54, 54, 54,147,255,162,178, 52,216,214,214, 54,158,207,231,159, 4, 48,185,137,207,141,231,114,185, +199,173,173,173,111, 1,120,253, 47, 40,243,195, 44, 45, 45,175, 3, 24,161,135, 97,187,222,128,193, 99, 27,197,170, 50, 57,172, + 75,151, 46,113,214,214,214,155,208, 68,151,175,173,173,173, 72, 46,151,127,225,227,227,115,205,218,218,122,116, 51,211,105, 87, +125, 99, 59,178,250, 21,132,170,181,175, 90,156,119, 51,151, 1,195,109,125, 70, 28,179,233,252, 90,138, 77,231, 97, 41,118,190, + 35,143,153,185, 12, 24,222, 90, 77, 59,223,145, 63,219,116, 25,150,106,215,101,120,178,131,239,200, 99,230,157, 6, 12, 97,205, + 16,107,176,254, 44, 12, 1,140,167,105,122, 59,128,241,104,122, 86,141,215, 95,161, 57,184, 15,108,223,127,147,115,106,209, 84, + 94,110, 27,166,243,159, 82,160, 71,114,185,220,168,234,138,172,205,210,233,236,236,252,253,140, 25, 51,116, 14, 14, 14,219,218, + 74,211,221,221,125,211,240,225,195,213,223,125,247, 29,249,229,151, 95,200,247,223,127, 79, 62,249,228, 19,210,183,111,223, 74, + 87, 87,215,169, 45,209,244,246,246, 94,221,191,127,255,188,240,240,112,114,240,224, 65,178,125,251,118, 18, 18, 18,194,248,248, +248,228,184,186,186, 14,107,137,166,151,151,215,119, 35, 71,142, 84,239,219,183,143, 92,184,112,129, 28, 60,120,144, 44, 91,182, +140,244,233,211,167,194,197,197,229, 13,125, 53, 59,116,232,208,144,193,135,175,175, 47,143,173,112, 89, 77, 86,147,213,100, 13, +214,127,215, 96,213,192,253, 3, 46,192, 63, 69,243, 63,251, 35,145,203,229,226,182,214,180,177,177,233,236,233,233,121,190, 91, +183,110, 5,254,254,254, 57, 94, 94, 94, 71,229,114,185,125, 43,211,233,227,235,235,123,216,199,199,231,137,175,175,239,125,111, +111,239,111,107,150,153,104, 69, 58,187,121,123,123, 95, 12, 8, 8, 40,244,247,247,207,246,240,240, 8,175, 19,185, 98,203, 18, +171,201,106,178,154,172, 38,107,176,154,109, 64,234,242, 71, 60,198,227,159,162,249,159, 69,161, 80, 40,219, 90, 51, 51, 51,243, + 78,102,102,230, 43,109,156,206, 88,133, 66, 49,166,141,211,121, 35, 51, 51,179, 47, 91, 10, 88, 88, 88, 88, 88,244,129,102, 79, + 1, 11, 11, 11, 11, 11, 11, 11, 75,219, 66,161,225, 48, 95,115,158,148,221,146, 80,225, 61, 86,147,213,100, 53, 89, 77, 86,147, +213,100, 53,255,115,154,117,181,235,142,101,173, 59,251,247, 59,176,180,201,133, 97, 53, 89, 77, 86,147,213,100, 53, 89, 77, 86, +243,191,167,249,175,130,237, 34,100, 97, 97, 97, 97, 97, 97, 97, 97, 13, 22, 11, 11, 11, 11, 11, 11, 11, 11,107,176, 88, 88, 88, + 88, 88, 88, 88, 88, 88,131,197,194,194,194,194,194,194,194,194,194, 26, 44, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22,150,255, 10,132, 61, 5, 44, 44, 44, 44, 44, 44, 44,172, 23,105, 29,108, 23, 33, 11, 11, 11, 11, 11, 11, 11, 11,107, +176, 88, 88, 88, 88, 88, 88, 88, 88,254, 25, 6,139,237, 26,100, 97, 97, 97, 97, 97, 97,249, 43,249, 87,122,145, 62,213, 25,235, +195, 94, 95, 22, 22, 22, 22, 22, 22, 22,214,139,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,180, + 28,246, 73,227,172, 38,171,201,106,178,154,172, 38,171,201,106,254,231, 96,103, 17,178,176,176,176,176,176,176,176,176, 6,139, +133,133,133,133,133,133,133,133, 53, 88, 44, 44, 44, 44, 44, 44, 44, 44,172,193, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 13, 22, + 11, 11, 11, 11, 11, 11, 11,203,223, 6, 10, 13,207, 4,184,215, 12,157,150,204, 38,184,199,106,178,154,172, 38,171,201,106,178, +154,172,230,127, 78,179, 41,237,123, 96,249, 67,140, 23,171,201,106,178,154,172, 38,171,201,106,178,154,255, 61,205,127, 21, 92, +246, 20,176,176,252,179, 33,135,193,129,101, 39, 39, 48,196, 6, 92,129, 2, 23,238, 62,165,130,193,180, 90,211,198,195, 17, 42, +141, 21,196,162, 92,252,122, 39,169,181,154, 44, 44, 44, 44,172,193, 98, 97, 97,249,231, 32,119,115,133, 14,235,192,129, 28, 68, +157,136,158, 30,235,128, 7,173, 11,177,155,185,185, 66,195,172, 1,151,182,131, 74,253, 24,189, 59,173, 7,226, 31,176, 39,155, +133,133,133, 69, 63,254,146, 65,238,126,126,126,209,126,126,126,171,251,244,233, 35,100, 47, 1,203, 31, 69,159, 62,125,132,126, +126,126,171,253,252,252,162,255,173,121, 36,119,189, 36,208,234,134,168, 52,140,237,153,168, 66,203,242, 10,157, 43,248,218,161, +228,170,139, 97,171, 52,121,212,171, 21, 26,198,225,135,223,202,173,202, 42,180,238,160,209, 42,205, 26, 60, 61, 61,141,253,253, +253,207,116,233,210,197,156, 45,161, 44, 44, 44,172,193,106, 99, 24,134,241,181,180,180,156,167, 84, 42, 83,186,118,237, 58,226, +191,116,194,187,117,235, 22,213,189,123,247,236, 30, 61,122,100,247,232,209, 35,166,169,237,255, 70,228,114,185,171,151,151, 87, +138,135,135,199,227,218,219, 45, 58,191, 30,232, 22, 52,121,133,153,199,200, 62,173,253,142,174, 93,187,142, 80, 42,149, 41,150, +150,150,243, 24,134,241,253,215,158,204, 50,198, 10, 52,167,223,131,228,114, 73, 86,161,198, 42, 58,190, 92, 10,194,233, 11, 53, +228,173,210,100, 72,255,184, 68,165,193,181,167, 22, 86,151,239, 85,202, 64,232,126, 32,148,117,107,147, 43, 16, 8,102, 17, 66, + 6,242,120,188,185,108,245,251,159,199, 11,192, 8, 0,254,109,168,249,121,167, 78,157, 50, 0,124,196,158, 94,150,127,140,193, +122,211, 9, 61, 39,180, 71,228, 88, 39,148,140,107,143,210, 73,237,113,229,141, 14,104,113, 67,120,244,232, 81,113, 88, 88,152, +165,135,135, 71,120, 64, 64,192,149,174, 93,187,186,180, 68,199,207,207,239,140,159,159,223,152,186,219,186,118,237, 58,174,246, + 54,127,127,255,251,254,254,254, 69,126,126,126, 79,245,209,245,245,245,125,226,235,235, 91,230,231,231,247,164, 78,195, 61,206, +223,223,255, 76,157,239, 27, 83,119, 91,131, 39,156,166,237,142, 31, 63,110,149,141, 59, 80, 0, 0, 32, 0, 73, 68, 65, 84,121, +242,228, 73, 75, 46,151,107, 85,119,251,137, 19, 39, 94,218,222,130,243, 49,221,207,207, 47,170, 78, 94,222,173,187,173, 9,115, + 18,229,235,235,251,110, 29,221, 40, 63, 63,191,233,109, 97,174,122,247,238,125, 37, 54, 54,214, 65, 42,149, 26,215,222,103,109, +102, 60, 40,234,196, 87,243,166,142,121,117,150,133,251, 40,239, 22, 26, 43,151,128,128,128, 43, 30, 30, 30,225, 97, 97, 97,150, + 71,143, 30, 21,255, 91,127,188,228,161, 59, 31, 90,166, 55,195, 16,139, 7, 79, 43, 44,134,190,246, 38, 55,238,137,210, 66,163, +213,153,130,226,244, 37, 23, 29,133, 45,210,212,104,130, 24, 66,172,206,199,241, 45,250, 14,255,144, 19,113,151,107,161,209,233, +204,160, 65,159,150,104,214, 42,135, 60, 14,135, 51,111,198,140, 25, 52, 69, 81, 31,118,232,208, 65,240, 95,170,108, 3,188, 96, +219,191, 43,231,166,175, 59,122,182,161,172,167, 68, 34,185, 13,192,245, 31,118, 58,124, 1, 72, 0,252, 2,192, 10,109, 51, 92, +101,243,170, 85,171, 62,189,119,239,158, 77,251,246,237, 87, 2,224,176, 77, 60,203,223,222, 96,141,115, 66,176,149,181,237,217, +165,155,247,247,254, 62, 50,201,240,235,227, 49, 6,243, 22,134,244,180, 54,177, 56, 53,169, 3,214, 55,242,209,123,141,220,201, +226,233,211,167, 8, 13, 13, 21, 5, 7, 7, 7, 26, 25, 25,221, 9, 8, 8,216,226,238,238,110,208, 68,114, 94,210, 36,132,244, +228,241,120,223, 7, 4, 4,236,169,169,176, 41,138,234, 41, 20, 10,191, 11, 8, 8,248,161,166, 27,178,107,215,174,237,111,222, +188, 41,163, 40,202, 74,159,116, 6, 4, 4,200,163,163,163, 37, 64, 85, 36,160, 79,159, 62, 66,127,127,255, 48, 91, 91,219, 29, + 64, 85, 5,217,161, 67, 7, 65, 64, 64,192, 30,123,123,251,157, 20, 69,245,212, 39,239, 52, 77,195,216,216, 24,251,247,239, 7, +135,243,191,223, 63, 69, 81, 48, 54, 54,198,143, 63,254, 8,138,162,154,125, 62,221,221,221, 13,252,252,252,142,202,229,242, 45, + 12,195,244, 0, 0, 47, 47, 47,137,191,191,255, 17, 91, 91,219,173, 53,219,244,209, 36,132,244,224,243,249, 91,252,253,253,143, +120,121,121, 73, 0,128, 97,152, 30, 92, 46,119,179,159,159,223,209,230, 92, 35, 31, 31,159, 25,222,222,222,153,222,222,222,153, +174,174,174,107,173,172,172, 46,110,219,182,205,172,118,222,107, 34, 87,217, 57,249, 5, 81,183,238,199,207,155,241,102, 95, 7, +123,171, 73, 70,157, 71, 26,233,147,247,154,252, 7, 4, 4,108, 49, 50, 50,186, 19, 28, 28, 28, 24, 26, 26, 42,122,250,244, 41, + 4, 2, 1, 90, 82, 62, 91,193,159,167,153, 79, 89,130, 34, 3,226, 83,148,162,118,206,126, 6,150,110,111,194,194,152, 43,188, +246,176, 76, 10, 14, 94, 1, 79, 98,209, 50, 77,238, 43,247,147,148, 98,147,246, 67, 36,254,221,123,131, 50,112, 17, 94,140, 45, +147,129, 75,183, 76,179,214,125, 90,143, 30, 61, 4, 3, 6, 12,128,141,141, 13,199,200,200,104,210,223,234,124,254,129,154, 1, + 94,176,149,138, 4, 55, 54,173,250,216,207,198, 76,242,179,158, 38,171,169,116,122, 90, 90, 90, 70,124,245,213, 87, 93,165, 82, +233, 37, 61, 77,214,223,225,124,250, 2,224, 3,184, 94,253,255, 3, 0, 65,173,212,220, 28, 28, 28, 60,119,241,226,197, 40, 41, + 41,193,212,169, 83,101, 0, 54,233,171,105,104,104,232,236,237,237,253,131,135,135, 71,106,151, 46, 93, 84,110,110,110, 21,174, +174,174,201,158,158,158,123,133, 66,161,211,191,189,124,254,141, 52, 27,190,249, 35, 68, 64, 8,233, 71, 8,121,141, 16,242, 10, + 33, 36,160,250,111,255,234,215,107,132,144, 1,117,222,253,171, 63, 91,179,191, 91, 3, 26,175,213,253, 92,173,207,212,253,255, +165,191,245, 49, 88,164,206,251, 11,198,180, 71,160,153,181,237,167,159, 31,187, 37,102, 18,226, 16,253, 78,127,196,127, 52, 10, +226, 39,113, 88, 52,123,145, 88, 42, 53,153,253,102,123,244,107,201, 9,123,252,248, 49,194,195,195, 97,110,110, 78,237,218,181, + 75, 56,102,204,152, 89, 50,153, 44,205,207,207,111,146,190, 26, 28, 14, 71,183,103,207, 30,195,145, 35, 71,142, 55, 53, 53,189, +239,235,235,219,158,166,105,221,190,125,251, 12,199,141, 27, 55, 70,165, 82, 61,236,218,181,171, 75, 76, 76,140,238,214,173, 91, +160,105,253,130,118,209,209,209,218,211,167, 79,191,136,138, 16, 66, 30,174, 95,191,126,252, 79, 63,253, 36, 53, 50, 50, 98,124, +125,125,219,219,219,219,223,255,252,243,207, 39, 29, 57,114, 68, 42,147,201,244,154, 97, 69, 81, 20, 42, 42, 42, 32, 18,137, 94, + 50, 82, 20, 69, 65,169, 84, 66, 40, 20,234,157,198, 90,145, 1, 79, 51, 51,179, 71,235,214,173, 27,121,236,216, 49,177, 84, 42, +133,159,159,159,187,177,177,113,252,134, 13, 27, 70,253,252,243,207, 98,169, 84,170,183, 30,159,207,199,143, 63,254, 40,153, 56, +113,226, 8,161, 80,248,200,207,207,207,157,207,231,227,192,129, 3,146, 73,147, 38, 13,147, 72, 36, 15,125,125,125, 61,245,209, +210,104, 52,203,111,221,186, 37,191,120,241,162,220,209,209,113,206,215, 95,127,109,197,227,241, 0, 0, 58,157,238,165,200,213, +164,209, 3,187,205, 93,254, 85,132,178,162, 82,181,102,209,180,190, 60, 29,186,235, 25,181,155, 36,147,201,210,198,140, 25, 51, +107,215,174, 93, 66,115,115,115, 42, 60, 60, 28,143, 31, 63,254,215,222, 25,145,195,224,128,209,249, 2,232, 24,243, 88,105,222, +165,247, 36, 46,114,126, 65,128,187, 33, 55, 50,166,212,146, 16,226, 8, 45, 9, 32, 23,251,112,155,165,201, 33, 93, 64, 49, 46, +103, 99, 41,243,192, 1,147,184, 41, 41, 41,112,114,239,203, 57,113, 11, 86,132, 16, 39, 48,240,107,142,102,109,120, 60,222,138, +177, 99,199, 26, 36, 39, 39, 35, 48, 48, 80, 34, 16, 8,150,183, 69, 20,143, 92,119,117, 36,145, 46,125,201, 85, 23,121, 75,211, +246, 71, 71,174,100, 34,193,245, 3, 63, 28,180,241, 14,154, 78,237,248,216,209,212, 66,202,251,185,149,145, 44, 79, 75, 75,203, + 11, 55,110,220, 48,123,245,213, 87, 17, 28, 28,108, 33,147,201,244, 53, 89,127,117,228,170,198, 92,137, 81,213, 61,152, 1,192, +174, 21,154, 91,131,131,131,231, 46, 89,178, 4,215,175, 95,199,134, 13, 27, 48,100,200, 16,152,152,152, 52, 89,127,188,245,214, + 91,146,192,192,192,232, 17, 35, 70,196,205,157, 59,119,210,137, 19, 39,236,247,236,217,195,127,251,237,183,133, 99,199,142,117, +252,248,227,143,167, 12, 29, 58,244, 94, 64, 64,192,141, 55,223,124, 83,212, 66, 99, 64, 17, 66, 40, 54,158,163,223,233,106,200, +139, 0,232,188,120,241,226, 0,138,162, 78, 44, 94,188,216, 15,128, 57, 69, 81, 39, 0, 88, 0,176,168,254, 91, 80,231,221,130, + 16, 50,160,214,126,179,250, 52,106, 94,181, 63, 87,243,153,122,190,163,238,223,122, 69,176,250, 0,184, 84,247, 0, 46,193,170, + 25,243, 86,139,158,237,253, 18,138, 31, 54,131,206,203, 0,167, 48, 11,149,151,126,129,230,242,113, 76,238,209, 67, 44,166,168, + 53, 45, 57,147, 82,169, 20,124, 62, 31, 9, 9, 9,120,248,240, 33,134, 14, 29,202, 15, 13, 13, 53,246,244,244,252, 46, 48, 48, + 48,206,207,207,175,179, 62,134,197,217,217, 25,227,199,143, 23,124,244,209, 71, 29, 68, 34, 81, 12, 33,132,231,228,228,132,113, +227,198,241, 23, 46, 92,216, 78, 36, 18,221, 98, 24,134, 47,145, 72, 26,139, 14,253, 78, 87, 44, 22, 3, 0,207,197,197,229,118, +120,120,184, 83,207,158, 61,185,103,207,158, 69,113,113, 49,215,213,213, 53,238,192,129, 3, 29, 3, 3, 3,185, 87,174, 92, 65, + 89, 89, 25,209, 87,183,172,172, 12, 98,177,248,119, 6,171,172,172,236,119,198, 75, 15,115, 49,189, 99,199,142,183,194,195,195, +237,130,130,130, 56, 17, 17, 17, 40, 41, 41,129,163,163,227,237,240,240,112,187,158, 61,123,114,162,162,162, 80, 82, 82,162,183, +166, 64, 32,128,147,147, 19,198,142, 29,203, 91,176, 96,129, 29,143,199,187, 37, 16, 8,224,232,232,136,177, 99,199,242,231,207, +159,111, 39, 16, 8,110,232,217,101,200, 1, 0,173, 86,139, 49, 99,198, 24,136,197, 98,164,165,165,129, 97, 24, 48, 76,149, 39, + 85,228,230,223,189,122,235,222,163,121, 51,199,244, 41,171,172,172,252,245,226,237,135, 30, 46,142,118, 20, 69,218, 53,145,247, +206,129,129,129,113,158,158,158,223,133,134,134, 26, 15, 29, 58,148,255,240,225, 67, 36, 36, 36,128,207,231,163, 57,166,242, 31, +135,137,135, 25, 56, 24,152,146,169, 18, 10, 12,236,164,134,230,157,128,231,151,208,222, 70, 8, 16, 74,116,235, 81,185, 1,104, + 50, 16,200, 51,107,150,166,142, 25,152,148,161, 18,170,197, 94,134, 54,182, 14,200,207,207,135,189,147, 27, 42, 97, 33,136,186, + 87,102, 8,210, 76,205,106,186,116,233, 18,100,111,111,111,221,174, 93, 59,228,229,229,193,217,217, 25,134,134,134, 38,190,190, +190, 3, 91, 92, 19, 95,116, 20,162, 8, 61,161,166, 54,129,162, 87,130,112,215,129,155,235, 75,162,125,121,127, 59,115,245,227, + 65, 91, 51,185, 27,112,239, 29, 88,153, 10,176,107,113, 23, 83, 11,169,176,165, 38,203,211,202,202,234,194,141, 27, 55,204, 69, + 34, 17,162,163,163,225,225,225,129, 47,191,252,210,194,196,196,228,239,108,178,106,155, 43, 83, 0, 74, 0, 12,128, 9, 45,140, +134, 80, 0,182,175, 94,189,122,206,146, 37, 75,112,237,218, 53,216,218,218, 34, 39, 39, 7, 65, 65, 65, 41, 5, 5, 5,141,182, + 75, 30, 30, 30,118, 9, 9, 9, 25, 31,127,252,177,111, 88, 88,152,216,192,192, 0,133,133,133,216,185,115, 39, 22, 47, 94, 12, +138,162, 64, 8,193,238,221,187, 37,211,166, 77, 11, 72, 76, 76,204,112,116,116,212,107,248, 70,181,169, 18, 16, 66, 36, 0, 12, + 0, 72, 8, 33,162,217,179,103, 11, 0, 8,171,205,165, 8, 0, 15, 44,117,169,215,139, 0, 48, 95,191,126,125, 8, 33,100,216, +250,245,235, 67,106,181,157, 39, 26,105,111,107,155, 38, 0, 64, 93, 13, 66,200,176,218,239,181, 63, 75, 8, 25, 70, 8, 25, 86, +251,243,141,125, 95, 99, 6,235, 98,117,198,234,218,201,206,214,237, 59,161,240,183,195, 16,115,168,151, 94,116,210, 93,216,139, +184,208, 16,226,217,146,179,104,104,104,248,226, 69,211, 52, 20, 10, 5, 56, 28, 14,150, 47, 95, 46,154, 61,123,182, 55,159,207, +191, 22, 20, 20,180,174, 41,195, 2, 0, 55,111,222,132,179,179, 51,181,100,201, 18, 89,159, 62, 85,119,177,119,238,220, 65,199, +142, 29,169,181,107,215, 74,135, 15, 31, 78, 73, 36, 18,189,163, 67, 52, 77, 67, 44, 22,163,111,223,190,212,158, 61,123, 12,133, + 66, 33, 78,158, 60,137,188,188, 60,188,250,234,171,220, 61,123,246, 24,138, 68, 34, 68, 70, 70,162,168,168, 72,111, 93,138,162, + 80, 89, 89, 89,175,193,170, 47,178,213, 24, 61,122,244,216,101,109,109,189, 37, 44, 44, 76, 40, 22,139, 17, 17, 17,129,162,162, + 34,140, 31, 63, 94,251,227,143, 63,138,100, 50, 25,162,162,162, 80, 84, 84,212,162, 82,126,243,230, 77,116,236,216,145, 90,186, +116,169,184, 71,143, 30, 26, 0,136,141,141,133,139,139, 11,181,116,233, 82,177, 76, 38,219,220,179,103,207, 93,141,105, 48, 12, + 3,133, 66,129,123,247,238, 33, 41, 41, 9,121,121,121,200,205,205, 69, 73, 73, 9,180, 90, 45, 0, 64, 82, 82,124,114,251,158, +227,113, 6, 98,177,164,155,183,139,195,141,152, 7, 57, 6, 98,177,196,197,201,193, 21, 8,174,247,196, 6, 5, 5,173,227,243, +249,215,102,207,158,237,189,124,249,114, 17,135,195,129, 66,161, 0, 77,211, 47,149,171,127,233, 45, 30, 5,158,202, 5,132,242, +189,254,160,212, 52,104,208, 4, 62,114, 79, 3, 68, 3, 80, 92,244,235,102,199,253,249, 74,153, 21, 24,116, 6, 31,110,132,128, +210, 75,147,171,118, 6, 40,191,179,209, 90,179, 94,131,102,241,211,211,211,193,231,243, 33, 20, 10,225,211,243, 13,238,129, 8, +141, 53,128, 46,224,161,147, 62,154,181, 17, 10,133,159, 77,155, 54,205, 32, 35, 35,227,133,230,144, 33, 67, 12, 36, 18,201,138, + 22,155, 43, 90,210, 3, 90, 50,247,126,146,210,113,237, 94,133,219,211, 52,165, 27, 8,230, 67,163,241,105,173,201,114,112,112, +232,235,226,226,146,212,174, 93,187, 94,173, 52, 87,215,194,127, 60,104,107,106, 93,101,174,160, 43, 7, 56, 98, 88, 91,154, 96, +215,138,190,166, 22, 50,113,115, 77,150,167,149,149,213,249,235,215,175,155,139, 68, 34,220,190,125, 27, 2,129, 0, 34,145, 8, +222,222,222,216,177, 99,135,133,169,169,233,223,197,100,153, 0, 24, 4,224, 77, 0,111,212, 50, 87, 78, 0,250, 3, 24, 8,192, + 26, 64, 36,128, 56, 61, 53,123,113, 56,156,147,157, 59,119,206,228,114,185, 15, 66, 66, 66, 62, 88,184,112, 33,182,110,221,138, +190,125,251, 62, 93,180,104, 17,226,227,227,181,229,229,229, 35, 0, 52,218, 16,150,150,150,254,178,116,233, 82,163,215, 95,127, +189,230,127, 92,185,114, 5,251,246,237,131,129,129, 65,109,179,132,225,195,135, 99,250,244,233, 38, 42,149,234,104, 99,154,150, +150,150,175, 68, 68, 68,184, 0, 16, 84, 27,168, 26,131,101,112,238,220, 57, 99,145, 72,100, 26, 16, 16, 32,171,222, 46,121,253, +245,215,205,184, 92,110, 47,176,160, 41, 47,210,144,193,169,107,128,234,219, 87,159,121,106,113,253,219,200,247, 53,102,176,250, + 86, 23,244,223,161,126,158, 13, 33,116,144,112, 40,136,185, 84,213, 59,135,130,152, 98,192, 45,200, 6,213,194,224,167,161,161, + 33,164, 82,233,239,140,150, 82,169, 68,105,105,169, 94, 70,163,102, 44,143,137,137,201,139, 70,187,166, 97, 53, 53, 53, 69,101, +101, 37, 40,138,130,129,129, 1, 12, 12, 12,154, 21,193, 18,137,170, 34,194, 81, 81, 81,184,122,245, 42,184, 92, 46, 76, 77, 77, + 1, 0,183,111,223,198,221,187,119, 33, 16, 8, 96,102,102,214, 44, 93,181, 90, 93,111, 23,161, 74,165,106, 86, 23, 33, 77,211, +168,168,168, 32,183,111,223,198,189,123,247, 32, 20, 10, 97, 97, 97, 1,129, 64,128,180,180, 52, 60,122,244, 8, 2,129, 0, 22, + 22, 22, 45,186, 62, 50,153, 12,133,133,133, 96, 24,166, 38,154, 7,153, 76,134,210,210, 82,208, 52,173, 87, 58, 25,134, 65, 70, + 70, 6,242,242,242,144,154,154,138,220,220,220, 23, 38,171,166,139,176,165, 80, 20,133,210,210, 82, 40,149,202,223, 25,171,154, +114,245,175,228,138,167, 17, 40,222,171,185,133, 26, 97,110,169,192,200,170,227, 0, 32,239, 52, 64,113, 0,158, 9,186,251,182, + 71, 74,150,206, 32, 62, 85, 37,130, 6,131,112,193,213, 68, 47, 77, 14,111, 96, 78,145, 70,152, 92,104, 33,115,247,234,138,156, +156, 28, 8,133, 66, 8,133, 66,248,117,127, 5, 73,153,140,228,193, 51,165, 4, 4,175,234,165, 89,141,143,143, 79, 7,177, 88, +220,195,215,215,151,202,206,206,134, 80, 40,132, 72, 36, 66,143, 30, 61, 64,211,180,119,151, 46, 93,220,154, 85,193, 37,118, 16, +128, 39,233, 14,144,185,143,158,149,219,252, 28,165,116, 29, 62,234, 13,211,205,135,114,220, 30, 61,171,112,130, 74,187, 0,101, +234,174, 45, 53, 89,142,142,142,125, 12, 13, 13, 79,124,246,217,103, 78, 66,161,240,116,187,118,237,130, 90, 84,191, 9, 57,223, +126, 54,119,130,173, 73,141,185,210,150, 1, 28, 49,192,145, 84,153, 44, 43,115,172,249,104,128,169,132,207,251, 63,125, 53,197, + 98,241,129,237,219,183, 91,212,152, 43, 62,159, 15,145, 72,244,226,229,235,235,139,229,203,151, 91,152,154,154,238,255,139, 75, +169, 41,170,198, 85,221, 1,112, 20,192,249, 90,230,202, 25,192,255, 85, 71,173, 98, 0,164,232,169, 25, 56,120,240,224,136,167, + 79,159, 14,141,139,139,147,103,101,101,185,205,159, 63, 31, 91,182,108,193,194,133, 11,247, 19, 66, 92, 15, 31, 62,236,115,243, +230, 77,111,125, 34, 98, 89, 89, 89, 19, 23, 45, 90,148,151,151,151, 7, 0,240,242,242, 66, 97, 97, 33, 22, 44, 88,128,185,115, +231,214,148, 93, 0, 64, 78, 78, 14, 54,110,220,152,157,149,149, 53,181, 49, 77,157, 78,151,246,211, 79, 63,245, 80,169, 84, 14, +213,134, 82, 8, 64,146,146,146, 98, 84, 86, 86, 38,227,112, 56, 82, 3, 3, 3,153, 80, 40, 52,152, 54,109, 26,255,193,131, 7, +238, 90,173, 54,131,245, 84, 47,209,160, 23,169, 47,210,212,208,182,150, 30,175,175,201,106,174,193,138, 4,208,251,119, 6,134, +194,157,212, 91,145, 48,245,240,125, 57,130,197,165, 32,145,202,144,148,145, 6, 62,168,251, 45, 72,224,239, 26, 67, 67, 67, 67, + 40, 20, 10, 44, 90,180,168,252,135, 31,126,184,171, 82,169,122, 92,190,124,121,177, 62, 17, 44, 75, 75, 75,164,166,166,146, 47, +190,248,162,248,244,233,211,218,154,109,105,105,105,100,217,178,101, 37, 7, 15, 30, 36,205,233, 34,172,137, 96, 69, 70, 70,146, + 21, 43, 86, 20,101,102,102, 18, 83, 83, 83,152,153,153,225,220,185,115,218,197,139, 23, 23, 37, 38, 38, 18, 83, 83, 83,152,154, +154, 54,203, 96,105,181, 90,136,197,226,151, 12, 10, 69, 81,208,104, 52,191,139,108, 53,198,213,171, 87,223, 41, 42, 42,250,120, +193,130, 5,202,135, 15, 31, 18, 11, 11, 11, 88, 88, 88, 96,239,222,189,220, 41, 83,166, 40,239,220,185,243, 98, 91, 75, 48, 55, + 55,199,227,199,143, 73, 72, 72,136,242,252,249,243, 60, 0,176,176,176, 64,124,124, 60, 89,181,106,149,178,176,176,240,227,171, + 87,175,190,211, 68,133,131,164,164, 36, 20, 23, 23, 67,167,211,161,178,178, 18,185,185,185, 72, 79, 79,127, 97,176,148, 6,178, +193, 31,190, 61,188, 75,153, 82, 89,126,227,110, 66,106, 55, 95, 15,203, 50,165,178, 60,225, 89,234, 99, 32,184,222,177,109,151, + 47, 95, 94,172, 82,169,122,252,240,195, 15,119, 23, 45, 90, 84,174, 80, 40,234, 45, 79,132,144,127, 95,245, 67, 24,107, 16,210, +235,202,221, 82,227,129,175,141, 19, 80,197, 55, 1, 77, 41,192, 51, 1,120,198,224,138,204, 48,228, 21, 31,206,158, 95,139,173, + 65, 49,129, 16, 9,155, 30,223,194, 16, 43, 48, 76,208,185,219, 21, 38,189,134,206, 22, 60,127,254, 28, 52, 77,191, 48, 88, 18, + 3, 3,188, 50,236, 45,122,247,175,149,214, 96, 72, 79,112, 56,122,143,153,225,243,249,159,190,253,246,219,252,130,130,130,151, + 52,197, 98, 49, 70,141, 26, 37,148, 74,165,203,244,206,250, 67,119, 62,178,133,221,193,144,185,241,201, 74,155,159,174, 42, 93, +231, 47,223, 45,246,236,220, 13, 51, 71, 90,138,215,134,229,120,196, 37,150, 59,129,214,205, 67,185,202,143,236,104,158,201,106, +215,174, 93,144,129,129,193,201, 99,199,142, 73,250,245,235,135,249,243,231, 27, 8,133,194,211,142,142,142,189,155,123,153,202, + 74,116, 31,174,218, 28,150,125,231,208, 32, 64, 91, 82,109,174,254,247,202, 41, 98,176,124,123, 68,145, 70, 71, 38,232,171,169, + 84, 42,167,188,251,238,187,249, 71,143, 30,253,157,185, 18,137, 68,120,246,236, 25,214,174, 93,251,252,249,243,231, 83,255,226, + 82,234, 3, 32, 22, 64, 69,117, 52, 66,130,170,153,130, 61, 0,156, 3,160, 3,144, 13, 64,161,175, 32,135,195, 89,248,245,215, + 95,115,149, 74, 37,166, 79,159,142,180,180, 52,100,102,102, 98,233,210,165,207, 24,134,153, 82,173, 25, 7,224,145, 62,122,106, +181, 58,190,160,160, 96,216,224,193,131, 11, 11, 10, 10,208,185,115,103, 12, 27, 54, 12,214,214,214,176,177,177,193,136, 17, 35, +224,226,226,130,252,252,124, 76,152, 48,225,121,110,110,238, 32, 0,141,206, 66,207,207,207, 79, 60,116,232, 80,226, 7, 31,124, +224,159,150,150,230, 5, 64,174,209,104, 76,149, 74,165, 84,171,213, 26,202,100, 50,179,174, 93,187, 90,204,156, 57,211,248,214, +173, 91, 30,233,233,233,165,205, 48,152,255, 21,234,245, 34,173,184, 17, 63,217,154, 72, 85,125, 17, 48,125,169,105,225,169, 58, +239,255, 43,132,192,242,125, 71,246, 85, 8, 28, 93, 96,228,214, 5, 18,145, 8, 98,161, 0, 98, 99, 83, 84, 48, 12,190,127,150, + 85, 94, 70,200,178, 22, 36,254,165,136, 3,195, 48,216,177, 99, 71,197,154, 53,107, 10,179,178,178,102, 94,190,124,185,203,237, +219,183,239,232, 99,132,138,139,139,113,248,240, 97,229,158, 61,123,158, 42,149, 74, 95, 62,159,175, 81,169, 84,216,191,127,127, +197,150, 45, 91,146,203,203,203,253,121, 60,158,186, 57,221,111, 53, 99,176,120, 60,158,166,162,162,194, 55, 60, 60, 60,241,228, +201,147, 74,153, 76, 6, 30,143,167, 41, 47, 47,247, 14, 11, 11,139, 15, 15, 15, 87,202,100,178,102, 25, 55,134, 97,234,141, 96, +233,116, 58, 8,133,194,102,141,193,186,125,251,246, 78,181, 90,221,109,255,254,253,233,187,119,239,174,144,201,100, 0, 0,141, + 70,227,191,111,223,190,244,111,191,253,182,178,185, 99,145, 84, 42, 21,116, 58, 29,194,194,194, 42, 15, 28, 56,144,174,213,106, +253,107,182,237,222,189,187, 34, 44, 44, 44, 93,173, 86,119,187,125,251,246,206,166,180,116, 58,157,174,176,176, 16, 92, 46, 23, + 79,159, 62,173, 20, 10,133,224,112, 56, 72, 72, 72,120, 97,176, 44,205, 77, 61,122,250,123,185,125,249,237,225, 72, 3,161, 80, + 56,168,175,159,251,131,132,148,116, 66,168,228, 38,242,126,231,242,229,203, 93,178,178,178,102,174, 89,179,166,112,199,142, 29, + 21, 12,195,188, 84,174,254,149, 6, 75, 13, 9, 40,136, 19,210, 42,165, 34,158,134, 66,214,255, 1,124,147,106,131, 85,245,178, +177,181,195,173, 71,229, 82, 80, 16, 64,165,177,108, 82, 83, 67, 12, 64, 65,114, 47, 5, 82, 46, 95, 76,101,101,101,189,136, 52, +213, 24, 34,167,142,238,136, 73, 40, 53, 4, 69,132,168,154, 90,175,119, 69,101,104,104,200, 85, 40, 20, 47,180, 94,104, 58, 57, +113, 52, 26,205, 32,189,243,158,171,147,131, 97, 62,124,156, 90, 97,243,255,236,125,119,120, 20,213,254,254, 59, 51,219, 75, 26, +233, 64, 8, 4, 82, 72, 8,189,247, 34, 85,186, 40, 69,148, 34,213,139,160, 32,162,136, 34, 29,164,138, 82,148,222, 4, 66,239, + 32, 29, 41, 1, 66, 73, 2, 41,164,247,108,218,110,182,151,153,243,251, 35, 9, 2,166,108,128,251,189,247,231,157,247,121,246, +201,206,236,204,155,211,230,156,119, 62,159,207, 57,231,232,159,134,128, 47,190,219, 38,147, 49,133, 64,242, 58, 52, 10,240,194, +204, 49, 77,197,115,183,168, 26,221,141,214,215, 7, 69, 38,163,145,214,238,183,139,186,117,235,118,148,203,229,103,142, 30, 61, + 42, 87, 40, 20, 72, 72, 72, 64,147, 38, 77,176,112,225, 66,185, 92, 46, 63, 93,167, 78,157,174,213,169,166, 59,177, 72,209, 22, +179,237,102,111, 78,203,126,148,196,150, 8, 43,186, 68, 92,169,212, 4,159,204, 59, 81, 84,168, 49,190,119, 59,210,118,169, 26, +180, 15,212,106,117,175,121,243,230,229,231,229,229,189, 36,174, 82, 82, 82,202,132, 64, 87, 0, 81,255,225, 86,170, 64, 73,240, +122, 16,128, 6, 0,154, 2,176, 1, 40, 46, 21, 66,213, 70, 72, 72, 72,115, 95, 95, 95,108,220,184, 17, 91,182,108, 41, 92,189, +122, 53, 8, 33, 8, 8, 8,112,124, 93,206,220,220,220,240,152,152,152,222, 77,155, 54,125,178,126,253,250,116,111,111,111,110, +194,132, 9, 24, 63,126, 60,220,221,221,217,117,235,214,165,118,234,212, 41,242,217,179,103,239,232,245,250,199,246, 52,247,188, +188,188,155, 91,183,110, 13,239,209,163,135,195,216,177, 99, 61,183,108,217,226,245,244,233,211, 58,122,189,190, 86,110,110,174, +226,218,181,107,146,157, 59,119,122, 69, 71, 71, 39, 25,141,198,112,148, 31,208,253,191,138, 10,181, 8, 0, 85,169,208, 49,191, +242, 87, 85,197,111,246,222, 91,238,119, 59,174,171, 16, 85,206,184, 57,152,136,155, 31,214, 47, 90,177,112,219,230, 47, 71, 55, +110, 40,171, 91, 47, 24,172,182, 8,143,179,179,177, 51, 75,173,183, 18,242,115, 88, 34, 46,191,174,192, 98, 24, 6,231,206,157, + 99,247,238,221,107, 33,132,252,170,209,104,190,125,242,228,137,206, 94, 30,142,227,152,113,227,198,105, 11, 11, 11, 15,103,101, +101, 77, 78, 72, 72, 48,119,236,216,145, 25, 53,106,148,182,160,160,224, 56, 69, 81, 19,238,223,191,111,234,208,161, 67,181, 6, + 91,138,162, 32, 18,137, 64, 81, 20,238,221,187,151, 20, 28, 28,220,232,246,237,219,191,196,198,198,126, 64, 8, 97, 34, 34, 34, +210,154, 55,111,222,228,230,205,155,235,159, 62,125, 58,146,227, 56,198, 94,222, 50,235,216,139, 66,138,166,233,231,162,142,170, +166,207, 53, 34, 34, 34, 42, 56, 56, 56, 56, 60, 60,124,199,196,137, 19,123, 3,144,223,187,119,239, 73,104,104,104,195,219,183, +111,239,248,248,227,143,251,148,190, 65,218, 55,126, 91, 44, 24, 60,120,176, 94,173, 86,159, 45, 46, 46, 30, 19, 25, 25,169,111, +222,188,121,217,185,115, 69, 69, 69, 99,170, 81, 71, 11,126,250,233,167,239, 74,235,106,199,154, 53,107, 62,153, 53,107,150,123, + 70, 70,198,115,129,149,155, 87,112,169,253,187,211,216,252, 34,181,121,219,154,217,195,100, 82,137,248,219,101,219,174, 88,153, +231,211,184,171, 18,153,123,130,131,131,143,133,135,135, 47,186,123,247,238,196, 81,163, 70,137,122,247,238,205,136,197,226,127, +166,192, 18,179, 26, 16, 58,115, 88,119, 23,201,186,159,183,138,198, 14,172, 47, 13,109,232, 91, 34,174, 68, 46,184, 27, 93,132, +239,126, 60,200, 45,159,226,158, 8, 14,105, 96, 17, 83, 37,167, 82,160,129,209,154,251, 73,111,145,100,233,175, 51,252, 58,244, +255, 82, 18, 28,218,250,185, 16,122, 26,117, 15,107, 22, 79,227,150, 79,174,145, 8,142,202,132,205, 62, 43, 1, 0,216,108,182, + 97,203,150, 45, 59, 59,118,236, 88, 69,163, 70,141,158,115, 38, 37, 37, 97,249,242,229, 6,147,201,244,158,125,125, 6, 40, 92, + 23, 52, 99, 89,214, 99,207,249,124,255,207, 63,155, 44,151,209, 5, 64,226,202, 18,241, 34,116, 66,179, 80, 55,124,247,153,151, +112,230,210, 19, 33, 55,126,241,211,194, 42, 10, 6,144,105, 15,191, 64, 32, 56,181,100,201, 18,185, 76, 38, 67, 92, 92, 28,100, + 50, 25,164, 82, 41, 90,180,104,129,181,107,215,202, 63,253,244,211, 51, 93,186,116, 81, 94,189,122,213, 86, 29,145,213, 38,144, +109, 55,123,195,179, 91, 43,166, 59,123, 53, 9,114, 67, 94, 49,240,201,247, 39, 11, 11, 52,134,247,171, 41,174,158,139,172,162, +162,162, 94, 51,102,204, 56,191,125,251,118,215,224,224, 96,164,165,165, 97,196,136, 17,249, 42,149,170,219,127,129,184, 2, 0, + 29,128, 90, 0, 98, 81, 18,139, 20,143,146,184,164,215,158,229, 25, 29, 29, 29,145,146,146,226, 61,126,252,120,104, 52, 26,151, +225,195,135, 35, 33, 33, 1,177,177,177, 15,222, 36,161, 70,163,241,110,122,122,122,227,207, 63,255,124,244,236,217,179, 59, 56, + 56, 56,212, 35,132, 16,141, 70,147,200,178,236, 13, 0,123,129,106,237,195, 73, 0,196, 63,123,246, 44,241,217,179,103,158, 59, +118,236,112, 46, 45, 3,160, 36,176, 95, 93,106,189, 99,193,163, 58, 99,242,221,255,196,189,255, 39, 24, 86, 15, 29,198,214,167, +174,142,242, 67,241, 72, 63,104,199, 54,160,236, 89,104,180,220,221,182,155, 55,111, 78,108, 54, 27, 57,127,254, 60,233,219,183, +175,174, 99,199,142,213, 89,104,244, 37,206,174, 93,187,254,109,161,209,174, 93,187,158,109,221,186,245, 75, 11,141,118,233,210, + 37,170, 75,151, 46,234,206,157, 59, 39,216,147,206,206,157, 59, 63,237,208,161,131,174,115,231,206, 47, 13, 36,173, 90,181, 26, +212,189,123,247,151, 76,142,173, 91,183, 30,248,234,185,138,242,254,206, 59,239,164,197,198,198,146,212,212, 84,210,175, 95,191, +231, 29,127,143, 30, 61,210, 30, 62,124, 72, 98, 99, 99, 73,159, 62,125, 50,171, 83,158, 47,162,101,203,150, 19, 58,117,234,116, +243,149, 52,127,242,234,185,202, 56, 59,117,234,116,179, 85,171, 86,159,188,122,174, 26, 11,141, 86,152, 78,111,111,239,192,102, +205,154,229,174, 89,179,134,248,249,249,229,190,248, 91,163,174,227,230, 21,105,180,154, 89, 11, 54, 30, 40,103,161, 81,187,118, +110,111,209,162, 69, 64,199,142, 29,111,244,237,219, 87,119,254,252,121, 98,179,217, 72,243,230,205,201,235,150,231,107,224,223, +206, 73,158, 4,139,200,159,193, 29,200,181,224, 83, 79,119,249, 62, 25,211, 75, 97,186,191,183, 15, 33, 79,191, 36,183, 15,142, + 39,237,130,197,236,159,191,248,196,146,107, 13,207,144,235,129,157,201,153,114, 23,244,252, 59,231,181, 6,157,200,181,134,103, +162,119,248, 62, 25,220,217,221,188,119,215,102, 18, 31, 31, 79,142, 31,217, 75,218, 6,203, 75, 57,131,207,147,107,193,221,236, +225,124,229,153,239,208,174, 93, 59,237,129, 3, 7, 72, 92, 92, 28,185,112,225, 2,105,223,190,189,190, 89,179,102,221,236,205, + 59, 33,160,200,213,144,193,182,203, 65, 55,190, 30,161, 44,250,164,183,212, 52,162,155,216, 60,168,157,200,210,171,185,200,214, + 33, 88,192, 54,241,163,185, 96, 31,144, 94, 45,100, 38,114, 45,232, 58,185, 17,220,219,222,116, 6, 4, 4,164,214,173, 91,151, + 84,244, 9, 12, 12, 84,149, 77,160,169,110,189,183, 9,132,239, 59,173, 36, 89, 23,127,237, 70, 6,116,118,200,111, 27, 42,232, +254, 22,218, 82, 51, 55, 55,183,188,237,219,183, 19, 79, 79, 79, 21,128, 70,255, 13,237,179, 20, 53, 0, 12,194, 95,211,216,149, + 0,186, 1,240,123, 3,206,246,189,122,245,178, 70, 68, 68,144,132,132, 4,114,246,236, 89,210,161, 67, 7, 27, 74, 98,118,240, + 95,148,119,158,147, 71,133,102,184,183, 93, 1,145,229, 9,172,222,189,123, 27,174, 94,189,170, 53,155,205,147,238,223,191,127, +252, 77, 57,255, 29,233,252,119,112,118,235,214,237, 38, 77,211,126,165, 83,128, 51, 47, 94,188,216,188, 84, 20,222,100, 24,198, +175,212,186,151,121,233,210,165,230,255,180,188,191, 40,178,104,154, 62, 7,192,148,145,145,241,124,182,147,123,200,192,118, 53, + 92,156,186, 21, 21,169, 31,228, 68, 29, 63,243, 38,233,108,209,162,197, 64,177, 88,188,185, 75,151, 46,202,115,231,206,201, 34, + 34, 34,168,127, 82,121,146, 51,245,197,112, 16,183, 4,139, 57,145, 9,250,122,223,110,205,171,223,191, 87,123,225,142,131,215, +184, 21, 83, 61,158,181, 15, 81, 36,129,226,150,131, 53,133, 83, 93, 83, 76,118,115,202,169,214,128,112,206,195,103,122,223, 89, + 27, 10,253,223, 25,240, 9,115, 34,108, 51,247,227, 84,215,103,237, 67,148,169, 0,150,131,211,223,178,151,243, 85,145, 37,145, + 72,206,140, 28, 57, 82,185,111,223, 62,131,209,104,236,255,224,193,131,203,213,201, 59,185, 25, 84, 7, 54,106, 49, 64,124,170, + 46, 54, 58, 30, 54,110, 33,213, 61, 38,245,191,161,222,219, 4,194, 87,225, 32, 57,169, 55,217,102,216,105,185,178, 39,157,205, + 92, 92, 92,118, 23, 22, 22, 14,183,211,114,245,127,153,119,119,148,172,115, 37, 40, 29,107,162, 80, 69, 12,147, 29,156, 29, 25, +134,249,170,126,253,250, 77, 18, 18, 18, 34, 89,150,253, 17, 37,179,206,254,241, 99,199,255, 8, 39, 47,176,222,180, 2, 58,118, +236,120,159,101,217,179, 34,145,104,241,213,171, 87, 77,124,227,227, 57,255, 29,156, 93,186,116,145, 88, 44,150,185, 12,195,244, +185,113,227, 70,139,127, 90,222, 95, 20, 89,247, 99,117,126, 75,247, 20,248,126, 49,220, 37,213, 14,113, 85, 57,103,169,200, 10, +143,209,215, 93,190,183,216,119,230,112,101,170, 29,226,202,174,188, 55,111,222,188,131, 84, 42,221,105, 48, 24, 38,216, 33,174, +254, 46,176,158, 4,139, 80,104,173, 5, 27, 19, 10, 26, 21, 47,211,207, 17, 61,132, 76, 36,178,144, 67,189,255,196,194, 63, 71, + 60, 39,207,201, 11,172,255,107,252, 71, 86, 61,174, 96,176,227,193,227,173,162, 84,188,207, 43,253,252,243,222,142,250, 38,152, +201,153,250,247,224, 32, 94,214, 34, 80, 54,237,240, 98,153, 30, 28,149, 14,138, 91, 91,133,184,170,138, 51, 28,114,235,178,214, +129,178, 25, 71, 22,203,244, 0,178, 65,176,166, 10,113,101, 23, 34, 34, 34,254,132,253,110,162,191,167, 47,248,137, 5, 64, 18, + 33, 72,198, 15,149,188, 32,126, 15, 66, 81,124,240, 48, 15, 30, 60,254,199, 4, 22, 15, 30, 60,222,162,200,122, 18,124, 23,249, +204, 44,176,240,131,196,150,130, 34, 91, 54,213, 55,197,252,134,156,119,144, 79, 77, 7,135, 64,136,109,207, 80,100,126, 35,206, +183,158,239, 18,241, 84,177,128,154,207,183, 13, 30, 60,120,240, 2,139, 7, 15, 30,111, 34, 54, 74,172, 58,233,165,159,255, 90, + 78, 30, 60,120,240,248,159,234,155, 81,241, 76,128,234,248, 86, 95,103, 54, 65, 36,207,201,115,242,156, 60, 39,207,201,115,242, +156,255,115,156, 85,113,243,177, 93,255, 38,225,197,115,242,156, 60, 39,207,201,115,242,156, 60,231,255, 30,231, 63, 10, 52, 95, + 4, 60,120,240,224,193,131, 7, 15, 30,111, 23,255,209, 24, 44,153,107,128, 55, 4,116, 19,138, 35, 13, 1,128,208,212, 83,216, +184, 71,134,252,184,172, 55, 38,247, 8,149, 43,133,204, 94,173,149, 29,133,220, 72,253, 91, 74,114, 71, 0,190, 40,217, 59,234, + 6,223,124,120,240,224,193,131, 7, 15, 30,213, 18, 88, 1,237, 6, 95, 87,200, 20,254, 0,192, 17, 2,150, 3, 52,133,185,183, + 82, 31,255, 49, 4, 0,188, 67,186, 31, 17, 43,220,218,113, 28, 1, 71, 8,108, 28,129,205,100,136,207,123,114,218,174,157,231, + 21,238,129, 67,186,191,211, 99,104,255,254,239, 6, 53, 14,109,220, 0, 0, 30, 71, 62,126,118,242,228,169,152, 75,127, 80,135, +117,170,216, 35,111,146, 49,165, 80, 56,175, 85,235, 54,189,239,222,189, 51, 87, 11,124,243,150,202, 75, 68,110,244,219, 69,117, + 60,221,131,111, 58, 60,120,240,224,193,131, 7,143,106, 11, 44,133, 76,225,127,233,216, 86,143, 35,215,211, 0, 0,239,180,240, +194, 15,171,182, 15,222,242,248,143, 24, 0,104,215,185,111,224,183,159,143,193,205, 40, 21, 8, 33,104,230, 95, 3,131, 63,252, +212,174,127, 42,245, 12,110, 53,108,216,123,163,102,205,154, 57, 48, 62, 62, 62,121,223,190,125,215, 1,160, 83,231,206,254, 75, +150, 44,249, 96,165, 75, 13,201,254,176, 67, 25,198,156, 39,175,181,127,144,194,179,190, 91,195, 32,255, 79,246,254,246,163,160, +123,191, 17,227, 83,173,154, 53,186,156,132,188,215,225, 18,215, 14,241,115, 18,138,126,160,104, 90, 96,210, 22,120, 0,128,139, + 79,179,147, 18, 7, 15, 86, 42,149, 61,214, 25, 12, 59,115,159,156,221, 2,126,195, 78, 30, 60,120,240,224,193,131, 71, 85, 2, + 11, 0,148, 82, 1, 98,146, 74,188,117,206,114, 96,226,199,239, 33, 39, 39, 59,208, 98,227, 48,122,248, 16, 68,196,100, 33, 54, + 73, 5, 66,128,192,218,118,239, 37, 12, 6, 92,203,113,227,199,117, 57,119,254,124,248,188,111,231,237,162, 40,220, 2,128,205, +191,254,214,238,187,239,191,155, 48,250,227,209, 61,195,194,194,162, 0,188,150,192,162, 69,206,107,150, 47,254, 65,153,145,103, + 52,126, 54,243, 75,102,214,231,211, 87, 2,248,248,117,196, 85,176, 79,237,197,215,207,135,201,229,114, 57,182,108,217, 34, 1, +142, 97,254,172,113,210,119,251,247, 7, 11,166,253,143,191,236,107,114, 94, 44, 30,175,215,235,135,228,199,253,145,197, 55, 41, + 30, 60,120,240,224,193,131, 71,165, 2,139,229, 8,158, 38,102,151,136, 22, 70,128,119, 59, 56, 97,229,162,175, 96, 48,177,120, +152,168,198,209, 63,211, 96,210, 21,129, 16,160, 67,168, 71,121, 54,156,151,166, 90,174,252, 76,214,156, 17, 11,135,223,138, 85, +212,173,225,226,226, 18, 23,190, 75,247,221,135, 57,193, 2,155,229,254,162, 19,173, 18, 21, 14,226,246, 7,195,194, 66, 6,244, +239, 47,118,116,116,154, 45,114,238, 89,155, 51, 90,102,170, 83,174,170, 43,226,124, 21, 10,207,144, 46, 3,222,237,247,174,151, +151, 39, 59,114,201,173,167, 63, 79,107, 81, 39, 32,176, 97,215, 88,171,190,139, 46, 39,246,106, 5,183, 69,150, 39,174, 26,120, +123, 46,190,122, 54, 76,110, 52, 26,145,152,152,136,252,252,252,146, 31, 41, 10, 52,205,160,150,183, 55,214, 47,157, 41,223,119, +164,113,139,121, 75, 55, 30, 3,208, 26,127,149,194,191, 99,154, 41,207,201,115,242,156, 60, 39,207,201,115,254, 83, 57,255, 81, + 40,155, 69, 88,174,123,235, 89, 90, 62, 98, 18,179,208,188, 97, 45, 52,168,235,133,240,184, 66,236,189,148,134,109,231,147,113, +233,145, 10,156,208, 1,217,197, 20,226, 83,114, 16,155,156, 87,165,143,140, 17, 11,135,207, 88,161,158, 21,226,167,105,123,229, +192, 52,212, 84,198,133,124,181,170,104, 26, 35, 22, 14,247,240,114,222, 55,107,250,228, 15, 29,228, 50,177,217,100, 70,189,186, + 62,210, 41, 19,198,141, 21, 41, 21,251,236,205,140,155, 91,176, 66, 44, 83,236, 90,252,221, 76,233,234, 35,113,169, 58, 51, 90, +120,157,249, 0, 0, 32, 0, 73, 68, 65, 84,209,133,221,204, 76,152, 53,231, 59, 13, 35,148,253,234,230, 22,172,176,135, 71, 92, + 59,196,207,215,213,117,241,141,115, 97,114,139,197,132,204,204, 76,152,205,102,216,108,182,231,215, 16, 0,197, 6, 27, 18,179, + 12,232,210,185, 3,211,188, 89,163,134,238, 13,251, 78,226,155, 20, 15, 30, 60,120,240,224,241, 90,248, 71,133,218, 84,184, 76, +131,206,160,139,255,104,210,172, 92,127,135, 44,243,144,110,193, 0, 1, 84, 89,201,136, 14, 63,135,184,251,231, 81,172, 74, 5, + 33, 64,221,186,117, 32, 50, 36,154, 55,111,218,144,203,217,140,241, 21,241, 13,236,233, 93, 59, 62, 67, 65,175,152, 85,231, 86, + 92,108,150,219,212, 89,219, 17, 23,155,229,182, 98, 86,157, 91,241, 25, 10, 90, 46, 98,219,127, 60, 98, 16, 53,168,127, 31,124, +245,213, 44, 12,234,223, 7,179, 38,127, 64, 73,197,194,182,246,102,198, 40,150, 46,155, 51,111,129, 67,118,145,197,124, 39, 86, + 99, 82,202,229,146, 63,159,234,244, 38, 34,179, 12, 28, 62, 81,101, 18, 9, 22,216, 35,174,188, 29, 29, 23,223,252,227,144,156, + 16,130,244,244,116, 88, 44, 22, 88,173, 86, 88,173,214,231,215, 21,105,173, 72, 85, 25,144,146,171, 71,100,178, 6,125,251,244, +145, 11,132,226, 15,249,231,131, 7, 15, 30, 60,120,240,224, 81,161,192,138,187,117,180, 83,196,197,221,158,121, 57, 57,106,133, + 68, 0, 1, 77, 35, 55, 61, 1, 59, 87, 77, 71,216,207, 51, 81,148, 21, 15, 66, 0,153,136,129, 73,155,175,206,126, 24,230,153, + 95,201, 12, 66, 10,214,158,191,236, 78,170,151,156, 69,156,246,158,213, 10, 1, 96,239, 89,173, 48, 57,139, 56,253,178, 59,169, +158,152,168,192,177, 44,250, 15,122, 15,187,118,108, 65,187,238,131, 16,118, 45, 21,122,131,197,174,253,207, 36, 30, 1,117, 61, +188,188,222,155, 49,186,135, 67,235, 64, 23,101,128,143, 51,195, 8, 69, 54,177, 80,194,157,184,167,206,232,221,127, 8, 45, 87, + 56,246,145,120, 4,212,173,140,199, 73, 40,250,225,207,243,135,228, 12,195, 32, 53, 53, 21, 22,139, 5,102,179, 25, 38,147,233, +185, 5, 75,163,183, 34, 35,223,128, 52,149, 30,169, 42, 61,158,164,106, 32, 86,184,192,106,181,242, 11,175,241,224,193,131, 7, + 15, 30, 60,236, 91,104, 52, 51,183, 0, 53, 28, 24,184,215,172,135, 81,211, 87, 2, 0, 88,206, 6,130,146,229, 25,236,177,233, + 17, 8, 47,252,107,116,189,196,186,222,148,250,195,190,114, 3, 0,124,216, 87,110,168,235, 77,169,255, 53,186, 94,162,158,117, +177,176, 44,139, 27, 81,185, 88,177,255, 9,230,109,127,132,115,247,236,143, 25, 23, 8,101, 51,150, 47, 93, 34, 23, 48, 20, 21, +149, 82,172,205, 42,176,105, 69, 34,161, 69, 40, 22, 88,181,102,202,144,172, 98,243,251,188, 63, 53,137, 97,132, 83,171, 76, 43, +225, 64, 8,129,201,100,130,217,108,126,254, 41,179, 96, 21,104, 45,200,204, 55, 34, 85,101, 64, 90,233, 39,167,208, 0, 66,248, +137,132, 60,120,240,224,193,131, 7,143,151, 5, 86,185,187,211,115, 0,226,146, 85,144, 8, 56,212,174,211,224,175, 43, 8, 64, + 8, 96,181,113,118,253,163,227, 23,178,210,253,106,233,200,236,149,169,237, 66, 27,186, 62,154, 50,210,231,105,104, 67,215, 71, +179, 87,166,182,243,171,165, 35, 86, 78,204, 18, 66, 64, 56, 2, 66, 8, 8, 1, 56,206,126,193, 66, 81, 76,219,102, 13,125, 5, + 63,236,139, 79,153,186, 33,246, 41, 37, 16, 88,197, 98,177,205,211, 73, 70,213,118,147, 9,138, 77, 48, 6,133, 54,183, 82, 64, +243,202,120,212, 86,203,247, 29,122,191,175,183, 88,108,240,241,241,129,217,108,126,238, 34, 44,179, 96, 21,105, 45,200, 40, 48, + 34, 77,101, 64,170,202, 0,131,145,197,227,167,201,160,104,134, 15,250,227,193,131, 7, 15, 30, 60, 94, 31,229,106,145,255,159, + 5, 22,245,194,231,111,240,245,241,196,157,200, 20,212,241,148,192,209,201, 1, 79,159,165,131,102, 4, 96,104, 10, 54,214,254, +114, 32,102,235,254,213,179,157, 86,166,102,177,183, 55,236, 78,136, 79,205, 98,111,175,158,237,180,146,152,173,251,129, 18,193, +198, 17, 2,238,133,191,118,115, 19,206,195,205, 73, 34,184,251, 76, 91, 64, 49, 2,147, 72, 40, 48,121,187, 74, 40,111, 55,153, +192,199, 85, 38, 86, 72,133,180,183,167, 39, 7, 66, 60, 43,227, 49,167, 71, 39,102,107, 52,115, 59,245,122, 79, 47, 20, 10,225, +231,231,247,220,130, 85, 38,176, 74, 44, 88, 6,164,170,244,200, 46, 48, 66, 38,161,241,240,214, 69, 61,203, 90,119,242,207, 6, + 15, 30, 60,120,240,224,241, 90,168, 84,139,252,255,134,170,183,202, 33, 4, 10,185, 12, 28, 45,197,141,123,207,208, 48,184, 9, +182, 31, 15, 71,131,208, 54,200, 42,182,129, 84, 99, 59,195, 89, 63, 25, 34, 0, 68, 12,236, 41,175, 61,164,111,173,158, 4,194, + 11, 27,126,215,164, 3, 64, 80, 91,148, 10,171, 18,203, 21, 71, 74,150,137,168, 70,173,100,166,230,234,148,245,188, 20,120,146, +102, 54, 57,200,165, 54,103,185, 72,224,238, 36,102, 28,101, 2,129, 64, 68,211, 69, 69,170, 98,128,202,172,138,203,156, 30,157, +152,138,144,185,157,251,142, 88,124,253,236, 1,121,253,250,245,241,240,225,195,231, 46, 66,189,209, 6,170,216, 2,161,140, 32, +160,150, 18, 79, 35,174,179,249,185, 25,209,133,177,103,183,240,207, 7, 15, 30, 60,120,240,224,193,195, 46,117,196,113, 4,238, +110, 46,144, 40,157,144,168, 50, 67, 11,119,168, 13, 20, 56, 22, 96,109,149,138,160,114,131,190,143, 95,200, 74, 63,118, 33,111, +235,241, 11, 89,233, 47,107,185,191,220,131,132,144,138, 92,132,161,229,235, 64,246,204,201, 11, 55, 10, 6,183,245,112,166,133, + 66,131, 88,194, 88,100, 82,161, 85, 46, 17,192,195, 73, 36,174,237, 34,146, 92, 57,245, 59, 77,113,228,146, 61,156,230,244,232, +196,164,220,220,185,221,251,143,212,123,122,121, 97,244,232,209,168, 83,167, 14, 0,160,134,130,134,175, 11, 13,129, 41, 27, 87, +143,111,213, 61,189,127,249, 62, 88,211, 16,188,108,214,228,119, 89,231, 57,121, 78,158,147,231,228, 57,121,206,255, 81,216,181, +217,115,125,111, 5,252,107, 41, 96, 52,123,194, 96,102,161, 51,217, 80,172,183, 66,173,183, 34, 57, 91,143,216, 43,111,158, 16, + 82, 42,176, 64, 40,112,132, 0, 84,137,155,144,216,105, 40,212, 9, 53, 43,151, 47,249, 97,196,129,131, 71,200,103,253,188,107, +223,137, 55,164, 73, 24,161, 89, 46,161, 5,142, 50,154, 77, 74, 76,202, 60,127,242,247, 70,122,169,126,140,189,105, 50,167, 71, + 39,198, 1,115,131,154,119,255, 1, 4, 2,179, 65,173,152,211, 33, 4,231,206,158, 50,136,111,220,183, 82, 2,113, 36,199, 90, +118,151, 90,174,248, 8,119, 30, 60,120,240,224,193,131,135,125, 2, 75,111,208,199,247, 28,250, 73,233,134,207, 4, 44, 91, 98, + 89, 98,203, 92,121, 28, 1,107, 49,196,191,105, 66, 88,142, 11,223,184,125,127,191,166,205,218, 48, 33,190, 14,208, 20,229,225, +222,157, 91, 54,194,113,183,236, 34, 72, 73, 49,217, 60,164, 31,188,255,222,224,223,199, 79,254, 76,219,169, 75, 55,185,171,171, +163, 45, 47, 55, 95,179,115,203,129,194, 35, 7,246, 52,162, 56,238, 35,164,164,152,170,147, 46,115,122,116,162, 25, 40, 91,223, +170, 59, 16,210, 69,151,249,104,128, 14,184,196, 55, 31, 30, 60,120,240,224,193,131,199,107, 9,172,248,219, 71, 59,253, 95, 36, +164,160, 32,103,244,238,223, 15, 47,218,115,224,120, 7,147,197, 82,139, 3,147,198, 90,173, 87, 37,197,249,223,217,203,161,203, +141,137,134,175,111,203,223,126, 94,249,249,175,191,172,238, 1,142,109, 0,138, 74,162, 56,114, 73, 43,213,143, 71,102,245,196, + 85, 57,200,163, 58,158,238, 5, 32,143,111, 58, 60,120,240,224,193,131, 7,143,215, 22, 88,255, 87, 40, 76, 8, 47, 46, 4, 62, +123, 99,162,148, 20,147, 22, 88,138,146,207,219, 70, 36,248,253,151,120,240,224,193,131, 7, 15, 30, 85,128,230,139,128, 7, 15, + 30, 60,120,240,224,193,227,237,130, 66,197, 51, 1,170, 99,169,121,157,217, 4,145, 60, 39,207,201,115,242,156, 60, 39,207,201, +115,254,207,113, 86,197,205,123,138,254, 77,194,139,231,228, 57,121, 78,158,147,231,228, 57,121,206,255, 61,206,127, 20,120, 23, + 33, 15, 30, 60,120,240,248,159,131,107,192, 0,165,107,192, 0,165,189,215,187, 5, 15,243,116, 11, 30,230,201,151, 28, 15,123, + 33,224,139,224,173, 64,130,146,109, 27, 45,255,169, 4, 56, 59,215,115,180, 57,184, 29,161, 57,211,114, 77,250,227, 11,111, 59, +127, 33, 33, 33,205, 0, 32, 58, 58,250, 1,128, 55,157,141, 9,185, 71,224, 72, 23, 71,231, 73, 22,206,204,234,117,250,141,186, +156,184,176,183,153, 96, 55,183, 96,133, 89, 34, 91, 1,138,244, 5, 1, 77,104,234, 34,163,177,126,161, 86, 63, 82, 87,118,159, +207,192, 37, 13,199, 15,123,247,219,173, 97,167, 22,165, 29,255,230,233,171,191,187,244,249,201,225,179,209, 61,102,255,188,255, +228,242,252, 19, 95,105,249,166, 95,125,248,116, 24,233,108, 19,120, 49, 89, 87, 87,229, 87,231,190, 90,129,109,163,132, 66,161, +187,197, 98,201,205,140,187, 99,215,219,115,237,160,118, 17, 12, 67,215,100,109, 92,122,122,236,173,150,124,233, 87, 13,153,119, + 80, 51,138,101,191, 34, 28, 43,228,192,172, 49,229,197,223,120, 19, 62,111,111,111,153,147,147, 83,103, 71, 71, 71, 31,185, 92, + 46, 45, 44, 44, 52, 20, 22, 22,166,166,164,164, 92, 2, 96,251, 79,228,209, 45,100,208,215, 12,141,239, 75,191,255,144, 23,125, +108,105,229,215, 15, 92, 68, 81,214,175, 75,191, 47,205,139, 62,254,237,127, 67, 93,121,132, 14,105, 3,194,125, 78,211, 76,123, +150,216,150,168, 34,143,111,168,206,253,109,219,182, 29,108,181, 90, 37,101,199, 66,161,208,116,251,246,237,163,252, 83,240, 31, + 18, 88,181,130,135,185, 88, 5,100,190,128,161,223,227, 8,113,200,126, 24,166,248,111,206, 96,157,214,163,239,209, 52, 93,251, +197,115, 28,199,165,167,134,239,126, 91,157,109,237, 85, 51, 90,124,149,147,111,208,252,184,231,233,194,138,196,135, 71,211, 17, + 55, 41,154,242,163, 40, 10, 52, 5, 48, 52, 5, 0,153,105,225,123,202,219,124,218,219, 81, 33, 8,212,232,108,145, 0,170, 28, +132,164, 53,252,107, 10, 92, 60,175,118, 29, 50,173,222,189,115,219,131, 89,139,165,135, 46, 55, 38,250, 45,228,205,189, 65,131, + 6,173, 24,134,113,157, 54,109,154, 8, 0,214,172, 89,227,207,178,108,254,179,103,207,238, 2, 80,189,150,184,114, 15, 26,189, +238,199, 31,118,245,237,219, 23,153, 42, 29, 86,172,217,208,245,236,201, 3,239,191, 53,145,229,221, 92,102, 19, 51,145,159,126, +254, 93,237,126,221, 90, 9,138,180, 86,156,190,116,123,116,216,182, 21,221,157,208,164,113,101, 34,139,211, 23,125,235,233, 64, +250,112,250, 34, 0, 24,249,183,246,175,180,190, 83, 67,142,190,222, 18,193,195,124,224,112,149, 73,105,249,209, 57,161, 72,228, + 75, 81,116, 73,189, 51, 20,232,210, 54, 96,179,154, 83,158,221,216,222,251,191,162,163,110,254, 97, 54, 5,202,149, 46, 77, 31, + 69, 1, 52, 77, 67, 64, 1, 32, 68,147,120,107,135,235, 91,248, 55, 78,161,254,206,141, 58,248,235,182, 94, 77, 44, 80, 10, 58, +207, 56, 69, 17,122, 67,234,245,213, 15,237,185, 89, 42,149,186,156, 56,113,194,189, 79,159, 62, 78, 30,141, 6, 93,181,231, 30, + 49,163, 13, 57,121,242,184,168, 79,159,222,213,104,159,129, 61, 65,211,187, 41, 64,200,113,100, 13,195,145, 3,218,252,216,103, +168,230, 98,194,238,141, 6, 45, 0,133, 96,187,111, 32,120,162,138, 58,246,221,107,150, 45, 35,243, 8, 26, 35,147, 74,103,249, + 7, 54, 12, 76, 78, 74,136,213,104,212,171, 13,185,177, 91, 75, 95,254,236, 6,101, 99,103,156,191,116,115,152, 64, 40,164,122, +119,107,165, 48, 1,189,171,203,241, 34, 60, 61, 61, 7,175, 95,191,190,126,187,118,237, 0, 0, 54,155,205,241,224,193,131, 94, + 11, 23, 46, 84,196,198,198, 30,126, 29,206,154, 53,107,214,114,114,114,170, 35,147,201,106, 1,128,193, 96,200, 80,171,213,169, +153,153,153, 25, 85,166,167,233, 48, 55,194, 90, 23,156, 61,252,171, 0, 0,122, 15,157,180,168,110,151, 89, 46, 20, 35, 52,148, +119, 61,107, 51, 43, 76,133, 73,159, 95, 60,177,157, 2,128, 30, 3,199,206,113, 11, 30,246,115,222,147,176,156,255,200,195, 58, +108, 24,227, 22,103, 25, 76, 17,234,139,230, 45, 90,180, 29, 58,168, 47, 66, 26,212,196,224, 17, 83,102, 1,168,150,192,178, 90, +173,146,176,176,176,218, 52, 77, 51, 22,139,197, 56, 98,196,136,220, 55, 73,154,127,135,143,110,130,162,124, 44, 54,219,111, 41, +183, 27, 44, 2,230,115,175,166,221, 59, 73, 48, 23, 20, 61,129,112, 92, 90,246,131,223,219,243, 2,171, 20,174, 1, 3,148, 86, + 1,137,236,218,169,173,235,215, 83,134,136, 55, 29,184,142,227,160, 50,178, 30, 30,172,245,223,154, 65,154,166,107, 31,219,187, +222, 67, 38, 97, 0, 0, 90, 3,139,161,163,167, 85,253, 0,183, 28,117, 5, 20,130,202,124,168, 44,107,147, 10, 4, 66, 35, 5, + 0, 84,201,236, 0,153, 76,124,123,102,219, 24,245,216, 1,126, 31,125,245,115,196, 14, 0,206, 0,178,203,237,180,104,186,246, +239,219,214,120,212,114,149, 66,192, 80,208, 26,108, 24,242,209, 23,108,121,130,109,235,220,118, 11, 70,247,173, 59,220,163,207, +161,161, 69,197,230, 51,149,165, 83,225, 25,220, 80,238,228,126, 97,232,196, 5, 53, 13,112,196,183,139, 86,123,220, 60, 31,118, + 61, 43, 35,197,146,154,158,174,183, 89,172, 49,249, 5, 89, 51,181, 89,113,113,246,118,212, 74,165,178,190, 82,169,108,218,164, + 73, 19,233,172, 89,179,132, 93,187,118,125,254,227,196,137, 19, 69, 87,174, 92,241, 94,185,114,101,191, 71,143, 30, 25,181, 90, +237, 67,173, 86,155, 0,128,181,183, 78,188,188,220,255,245,222,224, 1,232,254,222,167, 96, 57, 10, 19,166,206,192,185, 51,135, + 39, 3,120, 43, 2, 75,201,208, 63, 76,152,246, 77,237, 46,237, 90, 8,150, 29,140,135,147, 92,132,222,109, 90, 10, 36,204,108, +239,223,183,173, 92, 13, 53,198,149,103,185,226,244, 69,223,134,186, 89, 70, 12,108,239,135,227,191, 91, 70,160,199,151,160,229, +206,207, 45, 89,245,251, 76,115,144,176,185,235,107, 57, 51, 30, 18, 54,119,125,253, 62,211,254, 72, 56,187,190,184,178,180, 8, + 69, 34,223,173, 63, 47, 14,168,161, 20,129, 97, 40, 8,104, 26, 12, 67,193,100,102, 49,122,202,215,111,171,153, 51, 50,143,128, +126, 52, 48, 22, 37, 35,225,118, 67,110,220,233,234,212, 9, 69, 51,174, 7,183,173, 20,120, 56,137,193, 48, 20, 24,186,228,147, +148,109,192,103, 95,206,119,122, 83,161,222,183,131, 71,171, 47,135, 7,245,110, 27, 90,163,201,254, 91,148,115,219,190,195, 93, +243,140,178, 49,191, 31,187, 50,130,116,250,252, 14, 33,220,143,233, 55,214,157,175,140,196,100, 50,229,244,238,211,215,145, 18, + 40,228,127, 28,217,209,185,108,179,121, 43,203,253,181, 57, 60, 1,202, 94, 98, 56, 2, 76,252,100, 60,122,247,233,171,231,108, + 92,122, 53, 58,141,221,103,255,184,225,110,180, 18,172, 90,191,101,129, 78,157,183, 32,241,169,107,178, 86,157,247,185, 33, 55, +238,184,253, 74, 5,193,177, 55, 15, 14,217,123,242, 22, 66, 67,130,193,114, 37,251,171, 6,214, 86, 96,223,169,219,104, 24,212, +176,100,241,102,142, 32,200, 71,137, 46,239,126,244,154,197,219, 69,160,240, 84,237, 27, 60,124,236,176, 33,239,141,128,179,163, + 18,102,139, 41,240,210,249, 51,191,110, 92,191,162,131, 54, 59,102, 76,117,196, 33,199,177,226,191,190, 91,165, 0,132, 0,204, +175, 91,249, 53,107,214,116,111,213,170,213,243, 99,155,205,134,122,245,234, 33, 35, 35, 35,168,218, 47, 2, 30, 30,242,154, 53, +107,190, 59,115,230, 76,143,110,221,186, 9,221,221,221, 1, 0, 42,149,170,214,229,203,151,155,175, 90,181, 42, 55, 51, 51,243, + 84,110,110,174,190, 66, 81,193, 25, 69, 12, 17, 48, 18,137,172, 84,215,130,158, 53,109, 84, 19,119,119,247,114, 95,142,243,243, + 11,196,223,127,255, 29, 37, 16, 8, 75,174, 39,132, 38, 28, 91,225, 30, 35,237,218,181, 27,104,177, 88,164,229,253,150,103,115, +239,103,228,196,195, 81,186,153,177,128, 97, 10,179, 30, 30,114,183,251, 65,106, 60,176,151, 32,129,108, 28, 48,104, 80,221,193, +253,186,194,219,221, 9,151,110,199, 96,250,220, 85,176,218,216,181,175,213,121, 48,140, 32, 55, 55, 55,217,197,197,197,235, 45, +140,183,126,199,246,254,228,113,249,250,189, 57, 63, 75,126,159, 98,182,142,177,150,109,127,199,114, 4,242,124,145,176,243,160, +158, 14,174,181, 2,101, 91,126, 94, 38,228, 45, 88, 47, 86,132,152, 89,216,177,125, 43,215,175,103,140, 23, 47,220,114, 21,183, +206,159, 50,100, 61, 12,123, 43,226, 74,233, 30,216,142, 98, 4,147, 40,134, 81, 80, 52, 37,230, 88, 46,205,102, 54, 47, 50,228, +199,101,189, 41, 55,203, 1,135,254,172,166, 48, 39,196,255,215, 95, 86,121,120, 58, 75, 96, 48,219, 48,238, 95,243,176,121,237, + 2, 7,119, 39, 49, 76, 22, 22,219,143,221,205,107,162, 91, 77,198,246,243,251,104,241,214,168,195, 63,238,126,122,184,178, 78, +140,166,104,120, 56, 73,176,104, 95, 12, 28,229, 66,212, 80,138, 65,211,229,139,171,177, 3, 74, 56,139,138,205, 54, 0,226,138, + 58, 55,133, 87,163, 78, 14,110, 53,195,134,124,178,192, 61, 78, 69,129, 16, 51, 18,156, 36, 24, 58,122,138,115, 3, 47, 25, 20, + 82, 6,201,105, 89,245,190,156, 61,187,101, 36,161, 91,153,178, 99, 82,171,202,118,221,186,117,135,246,239,223, 95, 62,115,230, + 76,161,143,143, 15,118, 31, 60,231,219,115,216,103, 3, 50,178,243,125, 56, 2,120,122,212, 72, 27, 63,188,223,137,211,167, 79, +167,164,165,165, 9, 87,172, 88,209,230,200,145, 35, 33,217,217,217,118,191,137,178,132,192, 96,102,193,178, 28, 88,142,130,170, +232,181, 60,142,116,197,111,213,100, 80,175,174,173, 5,107,142, 38,160, 88,111,133, 76,196, 32, 62, 75,135,118,237, 90, 9, 14, +108,167,186,149,119,199,248, 97,239,126,235,233, 64,250, 12,108,239, 7, 15, 23, 57,182,253,188, 24,199,111, 38,246,201, 41,166, +176,158, 48,147,188, 37,130,158, 10, 46,107,125,215,150,254, 94, 61, 90,248,226, 94, 75,127,175,107,247,159,198,202,222, 95, 53, + 45, 67, 43,252,163,240,236,103,197, 21,213,123, 13,165, 8, 91,206, 37, 67, 33, 17, 66, 33, 21,148,124, 36, 2,208,244,155,109, + 24, 47,245, 14,246, 97, 56,118, 60,195, 8,198,143,248,224,253,154, 35, 71, 12, 35, 20,205,224,224,225, 19,131,246,236,217,157, +101,181,152,183,176, 52,179,213,152,245, 36,173, 74, 45, 64, 1, 30, 78, 98,124,249, 91, 36, 28,228, 66, 56,202,133,112,144, 9, +209,163,169,251,155,164,211,101,242,160,250,253, 38, 15,169,219, 45,168,142, 50,224,225, 51,117,244,248, 69,247,214, 94, 41,234, + 54, 99,253,154, 16, 87,113,161, 73, 48,111,214, 39,130,140,204,172,110, 7, 79, 92,237,206,154,199,197,216, 44,186,111, 84,143, + 14, 30, 43,143, 44, 61,230, 86,243, 90,109,135, 73, 45, 90,235,227,135,177,233, 13, 10,140, 98, 68,167,104, 74,203, 84, 8,101, + 89,217,150,150,111, 86,122, 50, 10,244,204,141, 12, 87,186, 27,174,222,170,150, 43,202, 96,225,240, 48, 81,139,186,129,205,225, +229, 93, 19,230,126,163,234,134, 95, 58,116, 44,252,234,177,165,250,236,167,223,216,203,179,247,228, 45, 44, 92,186, 54, 14, 20, +158,148,142,230,193, 51,191,152, 22,176,106,245,250,151,206, 77,249,116,106,192,235,138,107,185,103,238,158,119, 6,142, 25,214, +164, 77, 79,196, 61, 75, 64, 92,212, 61,244,120,167, 55,250,246, 31, 2,179,201,248,209,214, 95,215,223,213,229,196,252,242,183, + 62,215,171, 97,199,198,161,193,123,106,122,215,244, 33,164,116,107, 50, 66, 96, 50, 25, 49,251,243, 9,208,107,139, 17, 20, 20, +218,193,185, 83, 47, 19, 40, 6, 28, 71,144,159,159,167,139,121, 26,253,142, 49, 55,230,142,189, 9,212,235,245, 86,149, 74,133, + 7, 15, 30, 32, 54, 54, 22, 81, 81, 81,200,207,207,135,147,147,147, 86,167,211,217,157, 81,103,103,103,199,198,141, 27,143, 58, +112,224,128,212,201,233, 47,205,111, 54,155, 33,151,203, 49,120,240, 96, 97,199,142, 29,107,141, 29, 59,246, 99,139,197,178,183, +168,168, 72, 83, 30, 79,193,227, 83,153,158,161,131, 54,245, 27, 54,113, 10, 0,136, 36,202,196,117,191, 29,142,170,236,127,139, +164,142,190,239, 12, 30,215, 0,132,128,162,168,117,249, 49, 71,178, 43,186,214, 98,177,200,246,239,223, 95,139,162,168,151,198, +215, 5, 63,237,111,255, 56, 46,235,157,141,243,191, 18, 56, 40, 36,200, 83,155, 49,105,202, 52, 55,187,197, 85,232,192,169,173, +154, 53,255,101,222,172, 9, 80,200,101, 56,127, 59, 1,159,127,189,212, 86,144,151,187, 11, 20,181, 38, 47,250,232,155,122, 45, +222,202,118,111, 1,181,148,112,232,221, 78, 58,225,131,174, 82,179,149, 69,161,214, 10,147,133, 5, 71, 8,212, 58, 43,162, 83, +138,225,230, 36,194, 22,252,243, 81, 45,129, 37, 16,138,251,127, 54,166,159,120,229,222, 59,184,117,126,175, 33,235, 65,152,252, +185, 50,104, 49, 60, 49,253,254,126,191, 87,110,137,180,103,144, 16, 80,204,234,246,109, 91,246,154, 56,105, 10,105, 18,228, 43, + 2,104, 60,137, 75,178,110,219,186,101,204,229, 27,226,181,154,244,200,111, 95, 24, 76,171, 53,125,147,227,184,244, 87, 45, 86, + 28,247,183,183,217,200,242, 6, 28,103,133, 16,155, 78, 37,150,188, 25,131,192, 73, 46,196,190,203,233,208, 20,100,228, 53, 49, +172,254,115,124, 63,143,129,139,182, 70, 31,219,112, 34,231, 62,128, 40, 0, 57, 21,113, 82, 52, 32, 96, 40, 56, 41, 68,112,146, + 11,225,164, 20,130,166,168, 10,197,213,188, 95, 31,237, 0, 16,243,138,184,122,206, 41,247, 8,108,228,224, 90,235,232,123,147, +151,184, 60, 78,181,128,166, 1, 63, 47, 5, 92,148, 98,152,173, 64,178,202, 82,154, 87, 71, 76,157, 57,223,125,206, 23,147, 79, +231,100,119,105, 2, 92,181, 85,150,119,189, 94, 47, 30, 61,122,180,208,106,181, 90,198, 78, 95,212, 43, 43, 39,111,208,218, 37, + 95, 74,220,220, 92,161, 51,218,240,224, 73,114,240,210, 31,127,246, 59,115, 37,252,200,156,201,131,142,247,233,211,199,105,255, +254,253, 92,117,234, 93,149,147,247,243,246,221, 97,187,214,172, 92,138,167,201, 5,216,246,235, 6, 16,214,182,169,138,170,124, +137,115,243,230,205, 30, 59,118,236,160,111,223,190,157,255,170, 0,165, 40, 40, 10,212, 38, 56, 43, 68,144, 75, 4,240,114,150, +192,213, 65, 4,137,136, 6, 77,191,212,137, 60,231,220, 26,118,106, 17,167, 47,194,241,223, 45, 35,182,253,188, 24,227,254, 53, + 23,145,121,162,179,180,220,121,209,191,134, 15,250,170,134, 28,125,107, 57,211, 30, 61, 90,212,133, 66, 42,194,215,159,141, 70, +171,251,201, 30,233, 69,220,220, 2, 61,154,206, 63,139,111,203, 75, 39,205, 80, 16, 48, 52, 28,100, 66, 92, 57,181, 47, 87, 95, +172, 86, 83, 76,137,133,197,106,182,164,216,217,140,255, 86,158,114,143,192, 57,205, 26, 55, 90, 60,101,226,120,186, 67,187,214, +132,166, 5,200,211, 88, 40, 2,130, 25,255,154,140,169,147, 39,120,165,103,228,124,247,203,134,205,223, 94,186, 64, 22,234, 84, + 79,231, 87,198,201, 80, 52,104,154,130, 66, 38,132, 82,250,215,199,104,230, 64, 81, 96,106, 53, 31,174, 6, 5, 80, 20,149,153, +126,239,247, 96,123,210, 89,179,113,223,139, 87,115, 69, 13,245,167,141,183,226,227, 34, 22,133, 63, 74, 13, 7, 80,224,211,217, +249, 99,171,149, 64,107,180, 33, 41, 71, 15,155,153, 80,227,250,248,162,222, 48, 42,104,201,182,136, 93,103, 30,193,241,133,206, +254, 37,206,140,219, 97, 70,215,208, 33,195,215,252,180,249,238,202,197,115,153,124,141, 25, 44, 1,100, 98, 6,210,210,143, 76, +196,192,168, 83,227,151, 77,191,101,219, 64, 13,197,213,202,219,252,223, 59, 13,242,225,208,126,157,127,167, 0, 49, 69,139,210, +107,250,214,245,237,222,127,140,180,199,128,143,192,218, 44,115,238, 95, 39,151,245,185, 49, 23,237,225, 12, 13, 9, 6, 40, 60, + 81, 69, 30, 27, 90, 50, 72, 14, 58,220, 48,168, 97,192,171,231,252,253, 3, 3,236,169,247,178,102, 37,115, 15,152,232,223,176, +241,236,182, 29,187,215,205,204, 55,193,165,150, 63, 30, 68,220,199,185,131,191, 68, 24,138, 11, 87,158, 59,121,100,246,194,101, +107,155,246, 31,252, 1,142, 29, 61, 48, 83,151, 19,179,161,180, 76,159,115, 18,142,251,112,199,150,205, 62, 66,145, 4, 86,150, +192,106,227, 96,101, 57, 88,109, 4, 89, 89,153, 40,214,106, 33,149, 57, 64,225, 88, 3, 86, 91,137,165,208,100,178, 42, 38,127, +212,127,170, 17,184, 83, 94, 58,235,182,254,240, 30,104,170,118,201, 59,106,105,157,153,140,122,111,111,239, 93, 0, 32,145, 72, + 32,145, 72, 96,179,217,240, 56, 19, 51,188,189, 58,127, 13, 82, 90,217, 28,151,158,253,224,247,150, 21,229,221,199,199,103, 64, +121,226, 74,171,213,226,207,187,143,156,182,239, 63,223, 39, 57, 45,187, 62,199,122,152,100, 94, 77,123, 23, 21, 93, 30, 80, 81, +121,230, 68, 30,155,234,211,101, 58, 61,115,202,104,255,117,191,133,133,199,159, 91, 84,169, 57,185, 94,143,175,204,179,167,142, +108,185,124,221,182,184,140,107,235, 62,175,170,142, 68, 34,145, 80,165, 82, 61,127,190, 23,172, 63,212, 55, 53, 71,243,206,143, +139,231,138, 30, 36,104,241, 40, 41, 11, 99,122,250,218,253,188,123,133, 12, 14,170, 93,167,214,218,181, 11,167, 35, 54,211,128, +245,135,194,113,245,212,174,251, 22, 99,241,187,170,232, 19,185,175,211,135,188, 5,129,245, 55,206,178,129,224,242,163, 60, 20, + 27, 74,132,149,149,229, 80,108,176, 33,183,200, 4,181,206, 10,173,209,138, 49,239,248, 86, 95,253, 17,210, 10,128, 59, 0, 21, + 69, 81,119, 95, 60, 46,211,160,101, 67,204, 43,199,121,165, 22, 67,215,210,177, 66,252, 2,173,249, 5, 35, 70,121,231,203,238, +143, 6, 16, 92,202,201, 2, 8,167, 40,170,208, 30,129, 69,202,204,149, 47, 20,114,185,175,172,172,205, 90,187,166,183, 55, 56, +146,254,210, 37,190,173,135,235, 63, 27,255,190,108, 37,107,211,101, 61, 60,100,119, 76,150,210, 61,160,189, 72, 36, 62,181,116, +217, 10, 50,124, 64, 23,113,182,218,106,136,206, 48,170,180, 38, 98,243,114,111, 32, 89,182,124,185,114,201,178,149,159, 30, 57, +204, 21,105,115,162,127, 44,143,195,187,229,136,123, 20, 69,215,166,255, 50,203,131,112, 36, 61,227,222,190,150, 0,240, 38,177, + 86, 58,163, 13, 12, 67, 65, 88, 26,147,162, 55,179,208, 23,101,231, 55,209,175,253,115,124,159, 18,113,117, 39,195, 43,129, 97, + 84, 22, 0,149,186, 32,104,138,130, 70,111,133,163, 76, 8, 39,133, 8,206,114,209,139, 22,172,242,196, 85, 84,101,156, 34,139, + 37,141,181,154,140,132,101,209,175,149, 59, 60,156,196,240,118,145, 64, 42, 22,192,202, 2, 6, 51, 7,131,153, 69, 74,174, 30, +197,122, 9, 26,119, 25,225,239,230,125, 71,159,157,212,114, 71,126,202,189, 73,149, 90,152, 88, 22,123,194,206,249,103,100,229, + 14, 58,182,123,181, 36, 87,109,197,163,100, 45,114, 11,205, 32,148, 19,190,254,246, 91,201,188,121,223, 15, 57,112,244, 98, 82, +251,150,129,233,213, 45, 87,189, 42,102,247,193, 67, 97, 63,191, 59, 96,176, 67,116,248, 25,196, 61,184, 56, 79,151, 91,189,248, + 43, 95, 95, 95,246,151, 95,126,113,222,180,105,147,255,177, 99,199,210, 84, 42, 85, 98,217, 67,229,234, 32,202,188,112,233,154, +107,151, 14,157, 5,105,121, 70,184, 57,136,224,235, 41,199,253,155,151,205, 52, 69,157, 45,143,175,212, 13, 56, 18, 61,190,196, +241,155,137,125,162,242, 37, 87, 62,153, 48, 46,249,194,169,240,252,159,118, 95, 92, 81, 75,105,125, 40,229,114,215,223,111,233, +239, 53,103,218,104, 44,253,105, 55,174,222,127,154,171,163,107, 46,206, 50,217, 42,156, 84,192,208,128, 80, 64,193, 65, 38,132, + 94,167, 86, 71, 93,220, 24,248,150, 94,142, 62, 62,119,116, 55, 93, 80,108, 69,122,158,129,202,204, 47,134,141,227,224,172, 16, +195,198, 1, 69, 5,121,212,158, 61,187,113,247,238, 45, 26, 12,253, 9,128,249, 85, 89,176, 24,154,130, 82, 42,128, 82, 86, 98, + 5, 82,202, 4,176,216, 56, 4,248,249, 96,237,130,207, 28,221, 61, 60,209,107,232, 36,187, 19, 40, 83,184, 52,221,185,113, 33, +174,220,122,216,245,114,252,190, 86, 30,161, 77,127, 18,178,194,149, 32,196, 96,178,178,208,168, 11, 97, 52,165,161,117,173, 60, +212, 80,176, 72,214,120, 35, 50, 59, 78, 89, 85, 71,159, 31,121,228, 1, 69, 6,127,123,240,196,165,165,189,123,118, 69, 84,146, +166, 68, 92,137, 74,196,149,128,226,176,122,211,102,107,161,186,184,127,126,212,177,188,215,104,159,127,148,118,198, 37, 2,129, +213,186,239, 89,255,237,206, 9,179, 87,244,238, 61,228, 99, 42,242,238,229,111,244,192, 69,123,173,231,127, 63, 71,236, 58, 87, + 81, 87,226,209,160,229,222,237, 59,246, 13, 15, 9,240, 65, 78,145, 21,153,133, 22, 92,191, 31,143, 35,155,191, 41, 42,202, 73, +248, 16, 22,173,150,163,108,234,243,231, 78,156,253,244,179,217,104,212,168,105, 93, 77,186,198,241,213,216, 67,142,161, 54,127, + 52,126,242,112, 79, 15, 79, 7,174,212,130,197, 17,130,160,160, 16,244, 27, 48, 20, 87,174,221, 68,116,212,163,146,243, 28, 64, + 8, 65, 81, 97,126,182,205,106,222, 81, 97, 59, 98,168,218,219, 55,173,246,160, 41,192, 98,227, 96,182,114,152,243,245, 60,243, +244,239,214,119,236,221,161, 73, 20, 3, 78,147,154, 85,228,124, 55, 38,171, 49, 37,116,244, 30, 53,241, 43,145,193,194, 66,163, +183,226,226,193,117, 21,102,218,219,175, 73, 59,101,157, 14,227, 39,206,221, 36,145, 48,180,165, 81,160, 79, 98,151,182,141,210, +234,212,116, 43, 94,178,110, 79,235,155,247, 99,250, 13,125,111,136,116,120,253, 16,170,166,171,212, 97,242,212,105, 77, 88,255, + 14, 31,229,196,255,185,171,194,193, 79, 32, 41,242,169,237,243,220,149,232,222,104,208, 35, 0,175,142,252, 41,170,168, 99, 77, + 0,192,195,211,203, 72, 9, 37,197,213, 16, 4, 4, 0,126,248, 41,172, 95,186, 74, 59,236,199,197,115, 69, 15, 18,117,120,144, +160,134, 88,196,192,100,177, 63,172,141,165,200,140,175,166,141, 19, 22,232,108,184,252, 72,133,200,123,151,136,205,162, 25, 67, + 40,193, 88,183, 70,131, 62,162,128,122, 4, 72,162, 41,252,106,166,177, 67,253,232,152,250,117, 45, 88,238,193, 67,218, 83, 12, +250, 49, 2, 81, 43,128,107,104,179, 90, 61,104,134,201,203,121,116,200,179, 26,121,135, 62, 55, 14, 43,150,124,135,181, 91,142, + 32, 60,182, 0, 78,182, 52, 28,219,182, 24, 51,151,238,129,222,204, 86,150,134,138,244,136, 59, 69, 81, 39, 9, 33,253, 9, 33, +239, 0, 16,151, 29,151,244, 97,212,201,210,255,253,210,241,156, 57,115,190, 89,186,116,105, 84,217,181,101,231,203,174,173,236, +252, 11,247,187,126,253,245,215,161,203,150, 45, 91,210,174, 93,187,223,111,222,188,153, 8,192, 46,129,245, 98, 38, 42,124,202, + 61, 66, 7,182, 38,132, 99,188, 92,149,240,247,243,129,226,253,177,178,211, 20,165, 99, 24,154,222,190,230,107,105,190, 65, 0, + 1,195,216,109,239,149,122, 4,181,145, 41, 21,167,247, 31, 56, 68, 2,234,122,137, 15,221, 46, 74,189,159,168,127,110,210,213, +168, 82,196,254, 53, 76,204,240, 15,134, 42,206,158,191, 48, 67, 11,252, 88,254,192, 64,215,254,105,245,114, 15, 7,153, 16, 52, + 5,104, 12, 54,204,248,226,171, 55, 30,189, 8, 8, 51,245,139,239, 65, 83, 37,131,143, 86, 93,128,197,107,182,107,135,214,190, +116, 99,124, 31,183,129,139,182, 70, 31, 59,255, 68, 22, 63,100, 72,119,117,114,114,114, 97,102,102,102,229, 46, 24,194,166, 15, +251,120,186,136,166, 75,220, 70, 20, 69, 1, 96,115, 94, 71, 92, 1, 64, 81, 81,146, 70, 42, 86, 14,217,189,122,218,150, 58,181, +107,213,112,144, 75,161, 84, 72,168,134, 65, 13,164,109,219,180,147,249, 54,104, 36,186,246, 68,139, 84,149, 1, 9, 25, 26, 72, +220, 67,133,195,187,246,196,238,117, 95,245,203, 79,185, 87,101,254, 47,221,138, 28,176, 97,229, 92, 73, 78,161, 5, 79,210,138, +145, 93, 96, 66,118,161, 17,217,133, 38, 40,165, 2,180,237, 49, 84,114,252, 98,216,224,246, 45, 3,127,122,157,242, 77,120,150, +120, 36, 37, 35,107, 76,147,102,173,177,103,231,246,182,168, 85, 75,138,140, 12,163,189,247,111,217,178,165,160,121,243,230,110, + 63,254,248,163, 46, 40, 40,168,233,230,205,155,253, 98, 99, 99,175,212,175, 95,127,192,198,117, 11,175, 76,159,187,210, 87, 0, +155, 83,219, 14, 29, 24,185,152,194,237,107,231, 77, 59,182,108,202,180, 20,105,103, 87, 58,122,201,157, 23,229, 20, 83,112,175, +233, 19,169, 16, 90,123, 9,229,150,216,194,221,159,237, 46, 4, 14,215,239, 51,237,143,203,247, 98, 98, 91,220, 79,246,184,116, + 63, 54,183, 64,111, 13, 76, 56, 59,179,210, 14,151,161, 74, 45, 88,242,191, 44,150, 30, 77,134,197, 19,138,114, 47, 19, 54, 20, + 74, 44, 90, 84,201, 67,152,153, 17,113,192,142,192,104,138,112, 28, 16,155,174, 69,177,193, 6,163,213, 6, 31, 55, 5, 84, 57, +233,216,248,211, 14, 68,220,187,139, 94,125, 7,226,151,223,246, 96,194, 71,239, 27,171,122, 48,105,154, 2, 77, 83,165,150,171, + 18,113,165,148, 10, 0, 10, 40,210, 89,113,248, 70, 26, 26,248,209,160,170,225, 45,116, 80,202,160, 46, 54,130, 22, 42,241,244, +250, 46,249,153, 75,225, 95,207, 95,185,245, 75,141, 54, 39,245, 89,244, 45, 4,185,228,195,175,166, 25, 81, 57, 78,184, 87, 80, + 23, 65, 13,234,131, 22,221,181,139, 59, 47,170,241,138,227,244,161,254,173,154,133,180,171,227,225, 4,131,153, 45,181, 98, 9, +176, 99,251,118, 36, 39,165,143,207,143, 62, 22,241, 54,148,172, 46, 55, 81, 37,241,240,255,244,241,237,139,137,131, 63,156, 10, +175, 90,117,154, 22,165, 62,176, 51, 60,193, 62, 49,197,217, 39,176,232, 26,117,155,237,220,185,251,224,112,191, 58, 94,184, 16, +158,132,136,103,133,112,116,112, 6,163,240, 70, 96,151,177,206,143,207,174,123,207,144,167,221, 41, 20,201, 63,105,221,182, 3, + 8, 33,136,121, 26, 85,160, 86, 59,253,173, 9, 24,178, 98, 30,220,202,138,113,124, 73, 20,187, 53,108,234,224, 84,227,129,209, +194, 34, 35, 35, 29,127,222,188,210,220,144, 21,243,160, 58,229, 37, 17,209, 56,127, 63, 23, 22, 27, 7,139,149, 67,243,198, 13, +141, 66,145,172,211,242, 45,167,218,102,231,228,210,114,165, 19,231,228, 86, 95,228,108,205, 54, 61, 76, 84,139, 44, 54, 14,245, +189, 43,127, 47,151,215,168,191,228,243, 47,166, 7, 11,196, 50,104,116, 38,115, 86,122,134,215,175,251, 46,107,159,196, 68,215, +170, 87,183,142,227,194,133,243, 69, 26, 35, 65,110,145, 9,121,197, 22,234,131,145,227,107,238,218,246,203,135, 0,118, 85, 35, +233,141,127,223,181,201, 90, 67, 41,162,138,245, 86,162,210, 24,217,169,159,206,104,252, 38,109,231, 37,113,149,160,195,131,196, + 34, 72, 68, 12, 36, 34, 6, 86,155,125, 33,146,110,193,195, 20,110,174,138, 15,219, 52,243,199,185,251, 42, 8, 24, 10, 6,157, +198, 44,149, 40, 35, 27, 54, 12,160,155, 53, 13, 69,215,142,237,241, 44, 49, 57,232,220,133, 75,107,194,239, 70, 44, 22, 54, 26, + 60, 59, 47,234,232, 47,213, 73,107, 74,134, 74,145, 99,243, 25,225,225,229, 22, 58,112,224, 0, 73,157, 90,158,148,155,171, 51, + 88,136, 48,101,234,191, 60,236,246, 26, 17, 2, 2, 96,217,130,175, 97, 50,155,225,225, 44, 6, 33,192,182,245, 63,192,108, 54, +163,166,171, 20,106,157,181, 42,161, 87,161, 30, 41, 79, 16,189, 42,180,202,190,151, 93,183,116,233,210,254,175, 8,192,254, 21, + 8,195,191, 93, 87,118,255,178,101,203,150,188,240,187,190, 58, 46, 66,170,178, 76,185, 53, 30,220, 65, 34,150,157,255,101,233, + 12,186, 72,103,129, 68, 68,163,190, 95, 61, 76,251,108,186,188, 71, 51, 15, 24,224,136, 67,251,118,104,108,172,245,164, 93,111, +182,158,254, 45, 21, 50,249,217,109, 59,247,113, 94, 30,110,212,175,127,168, 18, 85, 26,219,243, 37, 14, 98,239, 28,231,238,157, +251,213,155,128, 58, 43,151,202,252, 77,102,147, 75,133, 61, 78,105,133,110, 59,159, 12,134,166,193,188,165,149,189,104,154,102, +127,251,105, 33,220, 28, 75, 98,174,126, 88, 88, 25, 0,227, 0, 0, 32, 0, 73, 68, 65, 84,187,187,120,128,251,217, 75, 47,138, +171,102,205,154,169,155, 54,109, 90, 68,211, 85,255,211,180,187,123,203,155, 45,241, 90,226,170, 12,198,156,199,119,141, 64,168, + 58,249,175,115,103,208, 92,232, 86,239,224,204, 17,163, 62,252,218,179,209, 0,135,164, 44, 53,196,180, 21,173,130,189,113,229, +220, 97, 46, 45,241,201,100,123,184,115,243,213, 62,110,174,174,136, 72,208, 34, 51,223,136,172,130, 18,113,149, 93, 96,132,198, + 96, 67,179,122, 30, 40, 82,107,125, 94, 91,192, 82,228,232,185,179,231,198,244, 29, 52, 28,211,190,156,223,119,203,134, 85,143, +180, 30, 14, 31, 25,115,159,134,219,115,127, 88, 88, 24,123,239,222,189,196,188,188,188, 86,179,103,207, 46,174, 87,175,158,215, +194,133, 11, 39,214,175, 95,191,102,143,110,221,212,119, 47,183,221, 57,253,203,249,221,190,153,190,197,143,166,233, 28,194,145, +227,153, 58,235,247,200,123, 98,168,180,158,142,127,243,244,251, 4,203,152, 30,157, 92,143,187,202,232, 16, 33,101, 26,137,224, +249, 7,240,100,190, 37,225,236,250, 98,217,251,171,166,101, 20,113,115,141,180,215,226,170,196, 85,137, 5,139,130,217,194,193, + 81, 38, 44,155, 57, 10, 16,120,111, 88,191, 74,238,238, 36,129,128,161, 32,100,104,168,245, 86,228,107,204,248,114,246,108,123, + 75,144, 99, 57, 14,122, 19, 11,131,217, 6, 10, 20,138, 53,121,248,250,203,207,209,119,192, 80,140,159,252, 5,138, 12,192,189, +196, 98, 88,172,214, 42,101, 17, 67, 1,122,147, 13,227,123,251, 34,191,216, 2,157,209, 6,179,133,131, 92, 42,128, 64, 64, 67, + 33, 17,192, 65, 38, 4, 69, 17,145,151,151,215, 68, 0, 16, 10,133,198,180,180,180,221, 21,187,231, 9,234,250,120,194, 96,161, +209,122,248, 74,188,211, 46, 16, 15, 46,108, 21, 92,187,243,216,239,203,249,107, 48,117,100, 59,132,197, 52, 64, 13,143,186, 80, +202,165,176, 18, 26, 0,177, 51, 32,111, 62, 71, 91,134,140,220,244,219,182,152, 5,243,190,146, 22,234, 40, 72, 68, 2, 92,186, +244, 7,110,221,185,183, 46, 47,250,216,238,183, 25, 75, 33, 36,180,167,163,147, 35,164, 98, 6, 22,139,201,238,128,111,150, 35, + 0, 65,176,123,232,160,195,165,117, 31,204,149,115,206, 14, 11, 22,229, 84, 51,116,251,166, 45,123, 62,244,246,242,192,145,139, +143,176,115,203,207,168, 21,218, 23,241,247, 55,193,167,197, 96, 40,253,186, 67,236,112,112, 34,205, 8, 26, 79,157,254,245,208, + 22, 45,219,225,230,245,203,200,205,206,218, 4,196,216, 21,131,198, 8,169,207,186,189,211, 31, 38, 11,139, 78,221,251,227,236, +137, 35,211, 80, 58,121,226,117,193, 48, 52,247,175, 9, 35,132,185, 69,102, 97,174,218,132,140, 60, 3, 18,179,117, 56,182,127, +171,221,102, 59,138,161, 91,117,105, 90, 91, 56,113,197,165, 52,159,218,222, 38,161,201, 32,139,125,246,172,225, 39, 99, 62, 20, +214,243, 15,162, 85, 69, 38,168,212,102,168,212,102,232,140, 86, 52,168, 89,135, 54,217, 4,237,170,155, 86, 15, 39,169,240,151, +147,137,112,148, 11,208, 62,216,245,181,131,176, 57,142,251, 75, 92, 45, 42,177, 92, 61, 76, 84, 67, 42, 98, 32, 22, 50,144,136, +104, 88, 89, 98,231, 88,100, 27, 49,105,204, 7, 50,179,149, 32, 79, 99, 6, 67, 83,240,114,115,149,248,120, 7, 98,219,202,127, + 1, 0, 38,124,181, 1,159,140, 27,141,160, 64,127,168,213,197,178, 79,166, 76, 95, 13,192, 46,129, 69, 8, 33,123,142, 93, 11, +185, 23,153, 50,243,227, 49, 31, 9,135, 15,236, 76, 71, 36,104,144, 85, 96, 66, 66,188, 30,102,107,245, 86,163,177,177, 37, 62, +223,237, 7, 78, 66, 46, 98,160, 82,151, 60, 46,139,214, 31,128, 82, 38, 64,118,161, 25, 28, 87,169,245,174, 82, 61, 82,145,213, +169, 58,120, 81,132, 85,118,158,162,168,147,115,230,204,249, 6, 0,153, 51,103,206, 55,101,199, 75,151, 46, 53, 0,200,180, 87, + 96,161, 34,183,160, 91,227,193, 29,100, 98,233,249, 93,235,191,145, 93,140, 37, 88,119,254, 62,250,181,245,134, 72, 64, 65,170, +244,194,131,196, 34, 92,188,120,172,248,250,173, 59, 70,138,182, 86, 57, 45, 74,230, 21,216, 92, 46, 81,252,241,243,230,157, 54, + 79, 47, 47,236,187, 81,152,153,175,181, 89,255,114, 79, 89,169,123,231,126,245,179,113,214, 62,198,156,248,187, 85,189,121,115, +132,136,150,110, 60, 14, 66, 8,192,177,224,192,129, 17, 73, 20,117, 90,127,152, 3, 10, 96, 89, 78, 42, 96,104,227,115, 63, 72, +201,208,148,158, 26,190,175,101, 85, 53,236, 40, 23, 98,255,213,116,168, 11, 50,243, 6,184,159,253,179, 76, 92,157,141,146,196, +183,104,209, 76,221,166, 77,155, 34,137, 68, 2,134, 97, 94,167,142,223, 72, 92, 85,140, 8,107, 94, 18,150, 29, 58, 36, 29,216, + 87, 17,218, 70, 76, 9,209,162,161, 55,174,156, 63,194,221, 58,179,117,136, 33, 55,238,148,189, 38, 94,173,209,134,204, 2, 3, + 50,242, 12,200, 42, 44,181, 96, 21,152, 64, 81,128,209,252,102,203,215, 24,114,227, 78,236,222,189,117,147,201,138,201,157,122, + 13,198,204,249, 63,251,239,222,180,226,122, 50,177,181,210,171,226, 31,219,245,198,149,146, 98,218,179,103, 79, 68,113,113,113, +207,213,171, 87,107,131,131,131,197, 50,153, 44, 31,128, 52, 46, 38, 70,116,233,244,193, 36, 85,102,230, 36,171,213,122,215,222, +116,249,118, 25, 35,145, 89, 34, 38,250,202,219,247,174,239, 37,135,175, 92,215,187,161,242,225,143,249,221,167, 47, 81, 93, 90, +151,155,101,178, 93, 40,208,163,105,134, 86,248,135, 93,157,141,197,156, 50,106,210, 28, 48, 52, 5,139,201,156,242,220, 29,225, + 36,193,252,221, 79,224, 32, 19, 66, 41, 19,194, 65, 38, 64,135, 96, 87, 84,195, 64, 68,172, 54, 2,131,217, 6,131,137,133,193, +100,131, 91, 29,103,252,182, 43, 12,169, 42, 3,142,223,205,195,211,100, 13, 2,125, 20, 32,164,106,187, 19, 71, 88,221, 7, 19, +231, 58, 48, 52, 13,134, 2,221,208,191, 46, 10,180,102,136, 4, 52,196, 98, 49,228, 82, 1, 28,229, 66, 8, 5, 66,132, 63,122, + 4,147,201,132, 54,109,218, 72,171,114, 56, 56, 40,101, 8,240,171, 9,139,213,134,211,215,162,177,104,198, 16,244,236,220, 18, + 95, 50, 98, 60, 53, 53,131, 67, 13, 7,112, 20, 3,139,141,131,201,202, 2,160, 42, 19,192,237, 75,227, 34,140, 0,110,103,199, + 28, 73,101,153, 65, 19,207,156,191,180,123, 64,191, 94,136,120, 24,133, 67, 71,142, 95,207,115, 85,207,122,209, 42,129,191,102, +193, 69,189,102,115,165, 8, 77,207,104,215,161, 43,180,133,185,200, 73, 75,178,187, 83, 15,169,227,128,207,103, 76, 11, 8, 10, + 10, 10, 96, 57, 2,142, 35, 8,241,117,192,164, 41, 83, 2, 26,248, 7, 6,112,165,179, 8, 27,250, 56, 84,202,163,240, 12,154, +186,120,245,198,143,124,124,124,112,246,198, 19, 44,157, 59, 57, 66, 46, 87,214,107, 89,195,193,153, 11,106,138,196,200, 11,168, + 81,183, 8,142,158, 1,181, 7,246, 28, 83,187,239,187,131,241,248,225,125,172,253,113,225, 45, 29, 35, 91, 98, 79, 90, 21, 30, +126,238, 77,155,183, 30,229, 88,195, 19,133,106, 45,148, 46, 30, 8,110,210,114, 84,244, 67,211, 87,186,220, 68,213,235, 62,235, + 28, 33, 48, 89, 56, 20,104, 45, 72, 87, 25,144,148,163, 71, 82,182, 30, 28, 71,200,139, 46,234,202,251, 99,138, 82, 72, 4,130, + 26,214,248, 58,143,254,184, 68,124,125, 60,169, 21, 11,103, 51, 22, 34, 65,174,218, 12,149,198, 12,149,218, 4,149,166, 68, 96, +185, 40, 5,224, 8, 87,237,217, 25, 5, 90, 11, 28,100, 2, 56, 41, 68, 96,217,215,143,249,158,191,102, 95,251,116,149,182,199, +143,139,230,138, 30, 36,233,240, 40, 81, 13,137,136, 46,177, 94,149, 10, 44,123,221,194,140,128,158,246,238, 59,109,144,166, 50, + 66,192,208, 16, 48, 52,252, 27, 53,135,155,156, 67,143,225,115, 0, 0, 3,250,149, 44, 67,146,152,165,195,137,219, 89, 0, 32, +178, 55,173,185,121, 26,233,145, 11, 17,211,247,253,182, 66,108,100,133,216,120, 42, 25, 70, 51, 11,137,168,212,237, 46,174,222, +248,102, 99, 75, 44, 88,105, 42, 11,116, 38, 22, 26,189, 5,132, 0,225,241,197,208,155, 88,168,245, 22,180, 13,170, 81,229, 51, + 87,197,248,212,255,141, 60, 84, 37,247,171,240, 87,156, 86,149, 22,172,165, 75,151, 70, 45, 93,186,180, 92,139,152, 61, 2,171, +124,113, 37,146,158,223,249,211, 55,178, 63, 98, 8,174, 60,202,199,176, 78,181,145,159,155,142, 45, 27,214,113,132, 0, 18,169, + 56,155,181,113,103,140,156,109,182,250,209,201, 74,253,190,114,183,224, 38, 82,177,228,210,210,181,155, 44, 94,222,181,185,195, +183,139,114,213,122,246, 37, 91, 33,107, 50,209,132, 35, 34, 99, 78,188, 93,131, 34, 77, 83,150,249,211,134,128, 35, 4,223,175, + 59,128,165, 51, 71, 64, 41, 21,200, 41,138,146,235,140, 54,204, 88,184, 21,171,191, 29,231, 32,151, 8, 74,133, 1,139,201,211, +190,180, 79, 4,152, 88,232, 10,179,243, 27,107,215,188, 34,174, 90,168, 91,181,106, 85,228,226,226, 2,133, 66,241, 58, 2,235, +111,226,202,203,203,171,166, 92, 46,175, 81,102, 13, 99, 24, 6, 44,203,234,226,227,227, 95,107,209, 55, 77, 81,222,209,204,164, +200, 54, 29,186,190,139,171,231,143,114,183, 78,111, 25, 82,157, 41,230,206, 78,142,105,247,163, 83,130, 1, 37, 50,242,141,200, + 46, 52, 34,171,192, 4,139,141,131,175,167, 28,233,105,169,112,118, 82,166,217,203, 39,243,244,239, 67, 19,102, 18, 71,225, 55, + 67, 78,204,105, 0,208,101, 70, 79, 57,176,123,211,227,168,168,135,107,251,143,152, 38,238,249,222, 20,209,230,101,159,206, 1, + 48,194,238,206, 33, 55, 87,127,252,248,241, 91, 53,107,214,236,255,253,247,223,155, 0,136, 77, 38,147,124,220,184,113,242,148, +148,148,207, 1,216,149,198,142, 99,183,185, 81, 82,210, 71, 68,140, 35,125,229,186, 94,221, 59,183, 67,251, 80, 31,164,119,110, + 7, 0,159,165,232,149,129,166,250,191,237,183,178, 56,179,113,199,233,165, 19,134,119,255,124,183, 96,254,234,172,147,243, 43, +181,136,197, 94,223,214,187,188,174, 67, 88, 26,248,254,162,192,178,177,164, 58, 46, 56, 98,101, 57,232, 77, 54,232, 77, 54,104, +141, 86, 92,124,144,139,156, 34, 51, 10,117, 22, 24, 77, 44, 8, 0,139,149,148,173, 42, 82,185, 88,189,181,211,185,236,123,173, +230,195,213,235, 22, 76,115, 60,116, 35, 29, 10, 73, 73, 60,150,147, 66, 12, 71,185, 16, 0,193,149, 43, 87, 80, 54, 61,190,170, +183,248, 67,103,195,177,122,199, 37,156,221, 58, 27, 82, 49,131,166,131, 23, 96,204,224, 54,224, 56,130,103, 49,145, 57, 1,193, +205, 60,105,165, 28, 52,141,178,152,148,202,202,211, 21,192,113, 0,253, 1,188, 11,128,168,162,143, 21, 30,101,243,117,151, 78, +237, 83,232, 12, 38, 91, 97,202,147,159,161,203,235, 82,150,132,210, 55,224, 43, 0, 58,191,174, 49, 91,230, 17,184,238,147, 41, + 51,134, 53,104, 80, 31, 7,246,110, 3, 33,212, 33,123,111,222,125,226, 22,214,172,125,121,198,224,164, 41, 83, 2, 54,111,220, +248,210,185,143,198, 77,172,108, 22, 33,229,236,238, 61, 59,168, 97, 8,110, 71,165, 99,197,188,169, 17,198,220,196,145,102,165, +235, 36,139, 46,235,139,144,208,102,240,242,116, 69,118, 86, 14,186, 13,234,137,190,189,123,227,241,195,251, 88,244,221,151,183, +160, 55,247,170,202,106,251,151, 16, 18, 78,238,218,123,176, 80,111,178, 96,253,138,239, 48,105,214, 98,180,237, 54, 64, 24,249, +224,206,100, 0, 11,236,205,179,217,202,161, 91, 19,119,152,173, 44, 44, 86, 14,199, 19, 25,193,223, 45, 5,128,128,161,233,102, +245, 75,220,187, 26,131,181,242, 74, 16, 80,217,133,154,226,186, 63, 47,158,206,232, 76, 44, 84,106, 19,114,139,204, 80,105, 76, +200, 83,155, 74,196,149,218,140, 60,181, 9, 2,134, 66, 92, 98, 6, 24,134,170,118,252, 93,145,206,130,214,129, 46, 0, 40,208, +175,233, 14,201,179,185,247,125, 24,155,222, 99,197,194,185,162, 7,137, 90, 60, 74,210,148, 10, 43, 26,226, 23, 4, 22,103, 71, + 8,150,123,240,128,246, 35,135,246,107,228,168,144, 34, 35,166, 24, 2,154,130,128,161,224,232,238, 3, 39,169, 17,211,166, 78, +130,107, 13, 39,164,230, 25,177,238, 72, 44, 30, 69,199,131, 51, 84, 47,219, 27,246,156, 29,242,209,135,195, 37,180, 80,138,221, +231, 19, 33, 22, 49, 16,192,140,232, 59,215, 76, 57,233, 73,150, 98, 77,145, 66, 32, 16,218, 69, 74, 1,196,198,114, 32,132, 96, +201, 15, 95,227,247, 29, 27,112,246, 94, 14, 8, 74,150,106,248,243,240, 42,204,152,179, 8, 42,141, 25, 0,245,218, 10,150,162, +168, 83,132,144,119, 95, 21, 66,175,138,164, 23, 44, 80,229,113,220,125,145,163,236,250,138, 4,220,139, 49, 89,176,115,177,109, + 65, 57, 74,145, 42, 19, 87, 82,177,248,252,142,117, 95,203, 46,198,226,185,184, 50,104,243,176,107,235,102, 45, 1,247, 78,110, +212,241,112,123, 11, 68,238, 30, 16, 42,145, 75,174,206, 93,180,206, 84,179,182,159,237,244, 3, 77,126,177,145,253,155, 25, 68, + 36, 87,176, 10, 39,119,163, 64, 44, 89, 45, 52,152,191,203,203,123,162,171,170, 74, 57, 66,112,226, 78, 54,192,149, 84,226,129, +107, 25, 37,235,248, 48, 20, 88,174,196,207,125, 33, 34,247,249, 57,251, 42, 16,216,127, 62, 34,175, 34,113,229,236,236, 12,103, +103,103, 40,149,202,234,182,141,114, 45, 87,114,185,188,198,185,115,231,164,142,142,142, 96, 24, 6, 38,147, 9, 61,123,246,124, +173,198, 39,247, 8, 28,209,182,251,144,165, 29,187,189,139,203,231, 14,115,183, 78,111, 31,106, 80, 85, 99,253, 30, 0,125, 59, + 55, 57,177, 98,213,122,191, 89,115,230, 74, 20, 82, 1, 10,181, 22, 48, 52, 5, 95, 15, 25, 92,149, 12,110, 93, 58,105, 28,217, +167,153,221,226,207,167,118,221, 93,171,214,109,114, 93,189,252,135, 94, 15,174,155, 61,139,138,146, 52, 0, 96, 80,197,109,138, +141,164, 98,106,215, 57,127,181,105,231, 33,240,168,229,223, 47, 41, 39,166, 90,249, 85,169, 84,185,135, 15, 31,126, 18, 18, 18, +210,114,232,208,161,100,201,146, 37, 46,233,233,233, 7,237, 21, 87, 0,208,189,119,251, 25, 10,161,181,157,171,140, 14,169,239, + 37, 71,251,208, 18,239,231,240,119, 59,162,182, 79, 29, 36,100,235,155,229, 27, 56,145,206, 42,172,191,113,211,182,187,190, 53, + 4, 19,108, 90, 67, 52,128, 99,213,238, 28, 80,218, 73,202, 75,197,149, 84, 0,165, 76, 8,142,148,252,102,191, 5,139,131,217, +194, 65,111,182, 65,111, 98, 75,196,150,153, 5,199,149, 4, 43, 83, 20, 5,139,149,173,242,109,176,188, 94,210,209,197, 13,126, +117, 75,210,248,252, 35, 19,130,162, 0,119,119,119,184,186, 86,189,238, 40,199,113, 48, 91,108,165,131, 46,251,124, 82,135,217, + 98, 3, 33, 4,177,177,113,179,147, 19,147, 7,249, 7, 52,232, 28,210,164, 89, 13,153,152, 70,169,117,170,178,183,218,145, 0, +172,120, 97,205, 52, 33, 3,227,145,195,135, 20,253, 7, 12, 40,180,232,242, 94,156, 44,193, 0,232, 83, 42,198, 12,213,173, 38, +133,123,224, 96, 23,215, 26,139, 71,143,157, 20,216,237,157,222,184,114,241, 2,142, 31,222,183, 83,175,138, 61,111, 47, 73, 80, + 80,208,223,102, 17, 54,240, 15,252,219, 44,194,186,126, 1, 21, 10, 44, 39,167, 38,142, 77, 90,117,245, 73,201,179,224,204,153, +211,208,169,179,231,153,205, 90, 61,132,100,203, 31,135,127, 29, 63,114,242,247,142,109, 91,181,132,179,131, 28,110, 46, 74,220, +191,119, 11,203, 23,204,189, 5,189,185, 87,213,253,103, 41,130,131, 69,181,100, 62,211,125,235, 55,194,253, 59, 55,240, 44, 54, + 50,234,193,221, 91,141,252, 67,219,192,189,166,239,244, 20, 55,102, 25,158, 60,169,114,167, 10,194,146,244,143, 39,126, 81, 58, +232,149,156,107,219,212, 79,252,247, 70, 72,193,102,181,176,187, 55, 47,207,125,113, 22, 97, 69,188,198,226,162,176,235,119, 30, +127, 57,176,119, 39,170,204, 21, 88, 38,170, 94, 61,246,175,165,192,179,199, 79, 57,171, 78,125,168,122, 85, 78,114,166, 76,253, + 76, 86,146,118, 14,164,100, 97,181,234,182, 27, 24, 89,209,168,141, 63,124, 67, 61, 76,214,225,113,146,166,196, 45, 88, 42,176, + 36, 34, 6,226,210,191,132,216,161, 47,104,122,197, 71,239,247, 70,158,218, 12,142,144,210,181,244, 40, 8, 4, 66,164,104,128, + 52,141, 22,170,162, 28, 36, 38, 37, 67,157,157, 8,154,102,224, 90,203, 31,250, 84,251,210, 90,204, 42, 3,173, 28, 26,188,223, +191, 19,115,244,102, 22,100, 18, 1,138,243,210,112,227,220, 1, 3, 97,217, 77,102,171,249,119, 15, 34,142,124, 18, 25,102,177, +179,235, 80,105,116,102, 79,137,136,193,129,237, 63,227,131, 49, 83,158, 91,179, 1,224,203,185, 11, 65, 81, 20, 10,213, 90, 0, +148,202, 14,203,213,139,199,170, 23, 44, 79,127, 59,126, 65, 20,149,119, 76,149, 30,155, 43,224, 48,191, 34,170,204,175,156, 55, +191,194,103,215,226,200, 21, 90,176,132, 52,115, 97,251,218,111,164, 81,185, 18,132, 63,205,198,176, 78,181,161,215,228, 97,243, + 47,107,180, 70,171,165,111, 94,164,253,226,170,180,161,244,254, 96,220,204,168,250,254,193,230,139,145,197,137, 69, 58,107,133, +113, 12,109,134,125, 19, 21,113,234,231,126,106,107,226, 84,133,119, 8,203,217,108, 43, 12,170,216, 31,202,239,196,137,248,251, +117, 7, 74,196, 21,199,225,171,229,187, 64, 56,182,116, 1, 63, 22,132,229,240,175,121, 27, 96, 43,253,206,114, 44, 40, 43, 43, +175, 42,185, 74,169,232,124, 99,237, 26,167, 87,197, 85,243,230,205,139,156,157,157,225,234,234, 10, 23, 23, 23,148, 9,162, 55, +117, 11,210, 52, 13,165, 82,137, 43, 87,174, 64,169, 84, 66,161,120,189, 5,242, 21, 30, 65, 31,180,238, 62,120, 79,183, 1,227, +232, 63,142,108,102,239, 92, 57, 57,204,168,138,177, 91, 4,176, 44, 75, 89,173, 86,244,238,218, 34,229, 65, 76,234,217,133, 63, +252,208,167, 85,247,247, 36,237,131, 60, 96, 48,219,144,158,150,134, 91,151,143, 27,253,235,184,157,109,223, 50, 48,221,106,181, +130,101,217, 42, 7,112,147,201,156, 79, 11,165,174,195, 71,140,146,220, 13, 15,223, 35,247, 8,220, 71, 51,220, 67,194, 50, 77, + 64,184, 15,154, 52, 14,134,197,198,193,160,215, 20,188, 78,190,163,162,162,238,174, 90,181, 42, 72, 40, 20,214, 14, 11, 11,203, + 43, 44, 44,172,214,118, 65, 23, 78,133,175, 19, 40,173,113,101, 22,172,180, 78,237, 48,162,127, 71,252,126,234, 6, 46, 95,187, +133, 20,189,242,129,206,204, 28, 77, 79,207, 52,133,184,168, 15, 15,238, 80,143, 57,180, 75,115, 40,170,235,236,247, 9,145, 93, +200,187, 58,223,238, 9, 30, 20, 5,104, 12,214, 23, 44, 88, 37,241, 77, 52, 77,217,109,193,162,128,196,107, 55,239,135,182, 8, + 12,198,131, 4, 13, 84,133, 38,232,205, 37,237,158,128,192,213, 81, 4,137,136, 65, 74, 82, 34, 56, 98, 73,170,222, 56, 3, 85, +223, 97,147, 4,165,175, 47, 2,161, 80,240, 60, 32, 66, 38, 21,107, 61, 60, 60,236, 18, 88, 86,150,197,208,222,109,208,182, 85, + 19, 12,154,188, 10, 0,112,113,231, 87,112, 81,138, 16, 22, 22,134,180, 63,215,238,246,107, 55,249,124,228,227,232,247,162, 34, +110,142,234,219, 66,214,204, 75,144, 37,170, 68, 21, 31, 43,117, 17,118, 3,208,179,212, 50,101,101,109, 92,106,159, 62,189, 57, +150,229, 94,140,137,112, 1,208, 14, 64, 1,128,251,165,162,172,146, 23,192,160,119, 64, 99, 31, 40, 74,170,148,201, 83,234,213, +171, 95,179, 85,219, 54, 78,131,135,190, 15,177, 72,140, 63, 46,156,195, 79,107,150, 29,208,102, 61, 25, 87, 45,247,152,157, 1, +237,149,185,139,212,106, 39, 93,108,244,131,194,196, 28,179,139,192, 57, 0, 66,137,195, 36,202,169,230, 58, 70,162,252,190, 86, +219, 49,142, 23,111,132, 35,234,193, 77,212,116,147, 33,241, 89,188, 62,242, 97,196, 6, 61, 37,252, 1,121, 79,244,246,166, 83, +158,207,190,215,118,116, 31, 23,163,133,197,245, 75,167,140,156,141,235,115,251,234,233,103, 62,129,173,164,161,173,122,184,228, + 29,219, 50, 84, 15,252, 94, 21, 79,114,248,158,191,133, 94, 48,228,253,204,211, 23,174, 41,107,214,241,103, 64,209, 48, 25,116, + 80,165, 68,218,140,154, 28,125,110,228,177,154,118,133, 3,216, 50,230,125,183,108,211,212, 22, 77, 27, 41, 8, 17,191,100,177, + 42,251,158, 95,108, 46,137,153,213, 21, 33,225,241, 13,163, 42, 94,253,117,229,125,157, 85,158,159, 95,240,124,106,190, 76,235, + 92, 87,237,164,150, 60, 31,214, 25,192, 73,237,252,220, 82,145,159, 95, 32,102, 89,171,220,158,199,211,217, 65,138,199, 73,153, +207, 3,218, 37, 34,186, 52,246,234, 47, 75,150,157,207,121, 11,129, 88,129,140,124, 35,104, 66,192,113, 54,216,172,102,104, 53, + 26,100,102,100, 35, 39, 39, 23,218, 98, 53,100, 74,103,132, 54,107, 9, 7, 7, 7, 60,185,119, 25, 0,117,194, 46, 49,200,137, + 2, 90,181,108, 41,140, 74, 46,134,197,202, 65, 8, 11,174,159,221,111,180, 89,205, 3,114, 35,143, 93, 2,236,216, 74,228, 69, +247, 32, 71,254,136,140, 73,105,228,227,230, 77, 69, 36, 20, 97,215,175,235, 75,102,147,218, 74,172,153, 81,169, 58,100,230,235, +144,145,150, 66,192,177,127, 84,231, 89,162, 40,234,110,101,199,175,105, 9,123, 99,142,215, 18, 88, 54,155, 77, 90,199,183, 46, + 70, 76, 26,141, 13, 27, 54, 34, 54, 33, 5,191,254,178,182, 68, 92, 61, 62,250,167,157,252,161, 40, 93, 43, 67,159, 19,179,194, +232,210, 58,253,196,195, 66,218, 96, 38,182,202, 59,187,122,232, 52,110,245, 57, 67,113,129,152, 53,233, 5, 39,118,143,219, 87, + 30, 39, 0, 48, 52,101, 46,117, 11,130,162, 40,148,185, 5, 55, 44,152, 0,185,132, 1, 69, 81,208,155,108,248,232,243,213,216, +185,186,228,205,234,147,169, 51,245, 21,165,179, 76, 8,125,222, 46,142, 26,219,199,111,224,162,173,209,199,110, 36,187, 38,188, +251,110, 23,117,179,102,205,138,100, 50, 25, 20, 10, 5, 28, 29, 29,225,232,232, 8,103,103,231, 42,243, 94, 10,207,170, 98,174, +104,154,134,163,163, 35,100, 50, 89, 69,194,237, 85,206,151,197,149,103,192,251,173,187, 14,218,215,125,224,120,250,143, 35,191, +114,247,174,156,120,223,168,138, 61,106,111, 29,149, 90, 29, 30, 14, 29, 58,180,241,164, 73,147, 68,223, 76, 29,122,238,220,149, +251,177,135, 47, 28, 26, 80, 80, 84,236, 67, 8,129,179,147, 50,109, 88,207,198, 39, 58,181, 10, 74,185,120,241, 34,183,111,223, + 62, 19, 69, 81,143,171, 74,103, 94, 94,238,246,139, 23, 47, 45,239,220,165, 43,126,221,177,239,221,232,232, 39,239, 62,139,143, +131,143,111,125,212,171, 31, 0, 61,229,140,139, 87,175,163,184, 32,103,187,157,229,249,215, 15,161,161,181, 24,134,169, 93, 84, + 84,100,156, 55,111, 94, 16,203,178,199, 67, 67, 67, 91,114, 28,151, 21, 29, 29,157,110, 79,222,111,237,254, 72, 5, 96,151,111, +151, 49, 7, 51, 45, 69,211, 1, 44,243,169, 83, 7,151,175,221,194,237, 63,239,108,204,147,215,249, 97,236,168,143, 39,212,117, + 21, 78, 24,212,190, 46,227,225, 34,199,222, 95, 87, 49,199,110, 38,175, 73,206,183,254,182,252,234,252, 69,246,212, 81, 25, 10, +138, 45,232, 16,226, 10,155,141,128, 37, 4, 52, 69,193, 65, 38,168, 72, 96,253,141, 83, 96,150,140,155, 50,121,210,179,208, 38, +205,102,140, 26, 51, 73,212,172, 65, 29,132,199, 21, 2,160,224,234, 40, 71,102,102, 22,174, 31,255,205, 86,152,241,116, 35,195, +112, 11,170, 83,158, 25, 17,251,253,203,190,123,121,121, 77,124, 16, 25,137, 43, 87,174,192,213,213, 21,101,226,170, 2, 23,225, + 75,156,133,133,197,127, 46, 92,245, 91,135, 9, 31, 14, 66,255,174,141,112,245,238, 51,152,173, 28, 44, 54,238,121,144,107,226, +173, 77,226,233,195,235,155,167, 14, 13,212,232,173,226,228,239,147, 53, 87,241,242, 34,178,175,166,211, 12,224, 28,128, 54, 0, + 6, 1, 56,255,202, 30,131, 20, 74,226,174, 26, 1,184, 5, 32,209,174,188,211,216,123,255,238, 61, 87,139,141,195,245, 59, 15, +131,187,119,104, 6,194, 17,220,189,123, 15, 91,182,109, 49, 62,126,244, 96,165, 46,199,107, 1, 42,222, 50,166,220,242,180,119, + 22, 97, 5, 2,171,148,243,170, 45, 59, 57,104,227,205, 27, 87,231, 74,106,182, 68,195,126,223, 12,204,120,120,124,160, 87, 72, +111,184, 53,232,128,204,135, 71, 17,241,231,222,211,247,108,182, 57, 82,142, 78,209,231,197,232,236,125,222,203, 32,145,202,167, + 53,106,222, 5,105,169,201, 72,138,139,220,105, 44,136,207, 76,121,198,236,204, 72, 79,153, 92, 47,164, 3,110,156,251,253,179, + 74, 4, 86,165,109,222, 77,172,222,120,229,198,205, 17, 25, 7,143,123, 22,107, 13, 50,129,128,214, 75, 24,228,136,244,207,246, +219,157,206, 39, 79, 44, 69,245, 29,135,142,154,244,237,169, 53,203,231, 9, 61,156, 37,200, 46, 52, 66,163,183,226,255,177,119, +223, 97, 81,156,235,223,192,191,187, 59,219,216,165,215,165, 7, 41, 42,138, 5,123, 84,236, 81,140, 13,163,137,198, 22, 61, 49, + 26,245, 36, 26,253, 25, 79, 44, 88,210,142, 38,150, 20, 19, 99,143,189,197, 18,107, 20,209,168,104, 20, 65, 20,233, 32, 32,101, +129,101,105,219,103,119,222, 63, 20,142,241, 80, 22,147,188,231, 28,189, 63,215,197,165,192,236,151,153,217,103,118,239,125,102, +230,121, 42,181, 38, 8,120, 64,176,151, 45,180, 53,149,136, 59,185,211,196, 25, 85,163,129,120, 83, 67,153,174,109, 70,172,210, +149,101,205, 94,188,120, 17, 4, 98,123,175,128,254,139,140,143,170,242,167, 6, 51,119, 6, 2, 90, 44,130,190,178,112,248,226, +197,139, 90,113, 28, 55,192,181,205,136,170, 39,230, 34,172,119,219,203,170,140,152,208,207, 23, 6,211,163,241,195,204,230, 71, +215,218, 89, 30,143,106,142,198,251,149,235, 50, 57, 64,180,255,231,107,120, 88, 92, 14,173,222, 4,131,145,133,129, 53,131,207, + 23,192,201,201, 9,193, 45,194,225,232, 96, 15,101,105, 25,126,187,246, 43,226, 82,111,103,113,192,170, 82,231,138, 93,214, 60, + 71, 60, 70, 30,236,225,238,202, 43,174, 50, 64, 42, 17, 32,238, 98,172, 9,192,182,218,226,170, 57,239, 29, 0, 80,161, 81,127, +249,225,202,245,227,191,253, 98,153,162,125,128, 61,242, 74,117,200, 47,209,162, 74,199, 2,224,192,154, 57, 24,116, 21, 72,249, +237,116, 17, 11,205,151,120,206, 53,220,131, 37, 20,234,127, 75, 76,149,124, 24,189, 26,201,233, 89,216,188,241,171, 26,125,243, +138,171,127,179,109, 86,139,189,127,197, 70,212,119, 90,208,194,113, 56, 30, 87, 84, 55,237, 71,237,169,194, 91,233,234,166,226, +132,171,231,116,252,191,218, 66,104,195,145,135,113, 18, 73,169, 37, 55, 55,183,124,215,174, 93,117, 69,143, 64, 32, 64,237,245, + 82, 6,131,161,201,187,138,156,236,197,109, 39, 70,190,244, 70, 67,197,149, 64, 32,128,197, 98,169,235,189,106,238,169, 71,153, + 91,203, 65, 93,250,142,218,219,127,228,223,248,231,127,250,193,114,243,226,177, 49, 53, 37,169, 71,154,187, 47,213,106,245, 93, + 0,105,107,214,172,233,184,121,243,230, 22,243,231,207,207,252,225,211, 25, 27, 30,125,130,123,244, 89, 38, 62, 62,158,155, 57, +115,166, 94,167,211,101,149,151,151,223,130, 21,147, 92,107,138, 83,214,108,251,246,159,173,242, 30, 22, 78, 9,106,219, 13,174, + 1, 93,161, 8,234, 6, 85,181, 17,215,211, 31, 34,243,222,121, 36, 95, 61,184, 79, 91,226,241, 9,144,106,245,250,118,232,208, +193,143,207,231, 15,231, 56,174,165, 92, 46, 15,224, 56, 78,204, 48,204, 88, 30,143,151,198,178,236,189,208,208,208,243,201,201, +201, 86,207, 25,246, 32,118,187,222,191,207,148,245, 15, 52,242,190,153, 69,154,240, 7, 26,121,188, 70,226, 48,175,228,194,122, +253,118,129,247, 90,152,202,238, 30,220, 81,113,120,247,166, 47, 4, 19,166,127, 96, 78, 82,217,191,199,216,218, 52,171,183,140, +207,227, 21,206,159,191,224, 95,195, 52,240, 30,157, 24,124, 60,100, 67,129, 53, 25,143,199, 52, 90,152,120, 79,248,117,210,251, + 51, 86,182,235,210,115, 98,159, 33,111,240,109, 69,114,156, 59,242, 29,151,149, 24,115,128,225,204, 31,105, 75, 50,179,254,232, +241,101, 48, 24,126, 87, 88, 89,211,123, 5, 0, 37, 46, 21,125,127, 62,123,113,202,137,211,177,159, 70, 14,234,229,242,205,146, +215,241,207,239,143,194, 86, 38, 1,103, 49,227,245,126,190, 99,150,254,173,245,112, 95, 15,169,247,161,152,252, 75,179,215, 38, + 45,212,104,140,169,104,122,222, 59, 14, 64, 28,128, 96, 0,195, 31, 47, 47, 7, 80, 3,160,250,241,239,127,122,252,189,213,140, +172, 5,217,197, 58, 28, 61,124, 16, 9,215,207, 35, 57, 57,165, 42,249, 94,242, 87, 60,134, 91, 91, 83,156,166, 2,210,154,189, +239,204,245,222, 49,136,250,239, 44,108, 68,141,192,230,147,248, 19,171,251,134,244,255,123, 15,151,160,158,112,242,127, 84, 83, + 86,228, 39, 33,239,183,131, 71,171, 10, 68, 99,129,187,166,154,103,124,142,189,124, 91,132, 88, 4, 98, 92,189,120, 18,156,197, +178, 17, 0, 56,139,101,227,237, 95, 79,206,232, 22, 57, 13,206,238,254, 29,212,185,241,141, 14,229,211, 16, 27,134,173,248,121, +251, 39, 7,178,179,179,113,255,254,125,164,167,167, 67,165, 82, 97,247,238,203,205, 26,171,169, 36,243,218, 57,158,128, 25, 60, +254,173,247,143, 71,189, 22, 37,245, 11, 8,226,183,242,177,135,139, 29,131,148,140,135,200, 72, 74,179,164, 39, 94,210,113, 90, +229,168,146,140,171, 13,246,142,184,134,142,241,224,243, 77, 31,158, 63,246,104,110,193,129, 35,167,182,250,191,217,243,187, 59, +187, 56,213,251, 58,174, 42, 43, 23, 71, 71, 47,109, 85,187,124, 83,115, 17,242, 5,130,170,233, 51,230,200,249, 60,126,221,105, + 64,174,118,183,213,254,195,113, 0, 15, 16, 9,153, 38,159,178, 41, 81,189,192, 90, 44,168,214, 26, 81,173, 49, 66, 93,173, 67, + 81,169, 26,119,239,101,224,198,229, 83,200,206, 72,175, 98, 89, 54, 6, 28, 14,151,184, 84,236,171,103, 96,221,134,123, 88, 33, +240,115,118,178, 67,118,185, 14, 54, 34, 6, 5,185,233,172,145,213, 61,243, 32,235,101, 9,199, 11, 5,109, 71,188,242,214,187, +255, 56, 29, 17,209,219,190,125,120,103,185,171,189, 29, 68, 12, 15, 25,185,197,184, 19,255, 91,205,131,212,219,149,102,147,118, + 72,217,221,227,127,120,150,150,255,217, 2,203,104,102, 7,126,240,143,207,206,154,205,102, 27, 70, 32,208,154, 56,203,144, 63, + 82, 92,253, 85, 56,206,146,255,238,123, 11,126,247,129,192,100,182,216,252,237,221,249,218, 39, 63, 32,240, 76,102, 89,109,207, + 21,199,113,141,245,106, 8, 74,212,250,170, 69,223, 38,236,248,124,199,189,131,120, 52,130,107,254, 31, 93,207,242, 74, 67,130, +203,160,253, 35,171, 52, 44, 15, 64,114, 61,153, 53,253,251,247,175, 43,182, 30,159,174,179,250,245, 82, 44,149,205,232, 55,124, + 42,255,252,209,205,150,223, 98,142,142,125,150,226,234,201,167, 95,167,211, 93,215,233,116, 73, 31,125,244, 81, 23, 15, 15, 15, +143,165, 75,151, 74, 43, 43, 43,133,223,124,243,141,174,180,180,180,168,178,178,242, 26,154,119, 93,139,165, 60,255,206, 91, 63, + 31, 50,125,199, 59,184,229, 21, 39,119,239,193,142,174,190, 45,203, 75,242, 51, 42,203,242, 79,243, 44, 56, 87, 93,146,122,173, +185, 43,154,144,144,144, 27, 22, 22,246,147, 64, 32,240, 49,155,205,174, 60, 30,207,150,227,184,114,150,101,203, 45, 22, 75, 97, +115,138,171, 39,139, 44,223,214,189,246,148,105, 45, 98, 35, 79,186,231, 65,236,118, 61, 0, 40,207, 45,208, 0, 56,134,190,255, + 23,117,244,106,246, 87,119,203,237,231,148,196,254,243,120,115,243, 11,110,239, 15,254,179,218,191,174,240, 94, 62,128, 41,119, +110,226,139,164,248,107,203,120, 28,132,102,176,171,180,202,244,155,127, 70,190, 80, 40,212,117,238,220,185,222,187, 5, 37, 18, + 73,227,227,150,197,198,178, 74, 96, 51,250,244,217,126,250,252,229, 41,167,206,253,250,105,247, 30,189, 92,164, 18, 47,248, 59, + 25,177,125, 65,167,191,159,143, 47,185, 49, 98,193,165,111, 51, 11,116,137,104,252,250,171,250,164, 3,168,120,220,147,181, 9, +192,244,199,199, 86, 82,179, 11, 1, 11,222,236,209,163,235,110, 30,143,199,112,172,229,159,215,132,130, 61,186,194,228,124,252, +193,233, 67,218, 7,216, 99,250,140, 25, 33,129, 65,255,186,139,176,237, 75,118,152, 48,229,237, 16,255, 22, 33,117, 63,107,229, +219,196, 7,170,194,120,109,181,123,216,160,148,179,107,150,184,100, 92,121,215,198,217,199,182,166, 52, 71, 85,158,115,115,141, + 70,233,177,166,158, 25, 26,154, 37, 59,253,238,218, 45, 95, 44,156, 95,248, 48, 99,179,166, 36,237,209, 89,135,146,180,164,228, + 91, 88, 82, 90,148, 63,191, 76,153,185,230, 89,247, 69, 77, 77, 77,193,174, 93,187, 28,123,246,236,201,247,240,240, 64, 73, 73, + 9, 98, 98, 98, 44, 22,139,229, 97,115,179,148,105,151, 99, 16, 24,232,188,103,123,197, 63, 25, 27,187,161,172, 25, 94, 28,199, +129,225,243, 10,141,250,138,211, 37,142,218, 5,184, 19,215,104, 59,226, 44,102, 30,199,231,248,181,115, 11, 90, 44, 22,222,234, +175,119,230, 8,132,226,122, 79,169,154, 77, 6,153,197, 98,177,122, 46,194, 98,193, 3,151, 48, 83,235,166,239,226,227,128, 36, +222,253, 38, 62,156,114,103, 94,142,156, 52,152,101,205,166,199,199, 71,237,151,146,227,120, 23,192, 51,159, 45,117,174,186,214, +156,162,234,119, 47,244, 70,163, 35,248, 34,216,201, 76,224,131,135,202,138, 10,137,155, 89,156, 92,250, 7,218,146,242,238,177, +187,202, 62,125,252, 13,191, 92,152, 28,123,249,202, 88,206, 98, 9, 48,115, 0, 56, 94,182,193,168, 59,160,180, 47,221,241,172, +235,251,191,134,247, 23,231, 91,117,186,228,191, 48, 83, 4,192, 21,143,134,196, 47,254,147,215,179,193,185, 5,255,200,182,219, + 42, 90,247,146, 72,101, 11, 52,154,170,205, 90,101,218,241, 63,121,127, 58, 72, 36,146,112, 91, 91, 91, 97,105,105,233,245,199, +111,106,207,227,243, 94,167,215, 91, 91, 93,251, 15,126,249,253,115, 63,223, 88,255,248,244, 97, 29,239, 49, 95, 74, 39, 12,141, +152,183,243,240,137,181,245,220, 69,248, 63,191,237,127, 89,102,159, 62,140,123,185,253, 20,179,217,178,170,127, 72,149,166, 40, + 43,101,230,229, 59, 37,215, 1, 84,253,193,245, 28,255, 68, 15,214,158,255,150,109,119,107, 59,114, 5,120, 8,181, 58,129, 67, +114,201,221,163, 75,155, 92,207,208, 80,145,172, 4, 78,154, 82,215,178,103, 40,172,254, 19,109, 73,208,174, 93,187,222, 34,145, +200,207,108, 54,203, 12, 6,131, 70,171,213,102,231,228,228, 92, 69,195, 19,146,255,165,235,233, 30, 54,114,173, 80, 40,124, 15, + 0, 76, 38,211,122,101,210,209,185,141, 61,176,145,229,255,250,253, 57,102,140, 0, 7, 15,154,255,138,231,200,171,227,107,106, +147,137,173,155,123, 72, 36,100, 42, 30,222, 62,228,248, 31,108, 75,164,153, 79, 42,101, 82, 38,101, 82,230,211,248,180, 63, 41, +243, 63,153,233, 25, 58,204,215, 51,116,152,213,131, 37, 55,176, 60,237, 79,210, 32,134,118, 1, 33,228, 63,192, 66,187,128,252, + 39, 21, 38,159,200,251, 43,151, 39,132,215, 72, 21,218,156,174,191,103,169,100,147, 40,147, 50, 41,147, 50, 41,147, 50, 41,243, +133,203,108, 42,155, 78, 61,254, 69,133, 23,101, 82, 38,101, 82, 38,101, 82, 38,101,190,120,153,207, 21, 62,237, 2, 66, 8, 33, +132, 16, 42,176, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66, + 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33, +132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8,249,235,208, 76,227,148, 73,153,148, 73,153,148, 73,153,148,249,194,161, +145,220, 9, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 66, 5, 22, + 33,132, 16, 66,200,127, 13, 30, 26,190, 19, 32,169, 25, 57,207,114, 55, 65, 18,101, 82, 38,101, 82, 38,101, 82, 38,101,190,112, +153, 77,101, 39,129,252, 37,133, 23,101, 82, 38,101, 82, 38,101, 82, 38,101,190,120,153,207, 21, 58, 69, 72, 8, 33,132, 16, 66, + 5, 22, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66, 8, 33,132, + 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 27,194, 75,109, 0, 0, 32, 0, 73, + 68, 65, 84, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,127, 33,154,105,156, 50, 41,147, + 50, 41,147, 50, 41,147, 50, 95, 56, 52,146, 59, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80, +129, 69, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,249,175,193, 67,195,119, 2, 36, 53, 35,231, 89,238, 38, 72,162, 76,202, +164, 76,202,164, 76,202,164,204, 23, 46,179,169,236, 36,144,191,164,240,162, 76,202,164, 76,202,164, 76,202,164,204, 23, 47,243, +185, 66,167, 8, 9, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 66, + 5, 22, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, + 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,228, 47, 68, 51,141, 83, 38,101, 82, 38,101, + 82, 38,101, 82,230, 11,135, 70,114, 39,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 42,176, 8, + 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33,255, 53,120,104,248, 78,128,164,102,228, 60,203,221, 4, 73,148, 73,153,148, 73, +153,148, 73,153,148,249,194,101, 54,149,157, 4,242,151, 20, 94,148, 73,153,148, 73,153,148, 73,153,148,249,226,101, 62, 87,232, + 20, 33, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66,168,192, 34, 132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, - 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66,200, 95,136, 70, 26,167, 76,202,164, 76,202,164, 76,202,164,204,231, 14, 61,201,157, - 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, - 33,132,252,215,224,161,241, 59, 1, 18, 91,144,243, 52,119, 19, 36, 82, 38,101, 82, 38,101, 82, 38,101, 82,230,115,151,217, 92, -118, 34,200, 95, 82,120, 81, 38,101, 82, 38,101, 82, 38,101, 82,230,243,151,249, 76,161, 83,132,132, 16, 66, 8, 33, 84, 96, 17, - 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66, 5, 22, 33,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 16, 66, 8, 33,132, - 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, - 8, 33,132, 16, 66, 8, 33,132, 16,242, 23,162,145,198, 41,147, 50, 41,147, 50, 41,147, 50, 41,243,185, 67, 79,114, 39,132, 16, - 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, -255, 53,120,104,252, 78,128,196, 22,228, 60,205,221, 4,137,148, 73,153,148, 73,153,148, 73,153,148,249,220,101, 54,151,157, 8, -242,151, 20, 94,148, 73,153,148, 73,153,148, 73,153,148,249,252,101, 62, 83,232, 20, 33, 33,132, 16, 66, 8, 21, 88,132,128, 85, - 79,218, 0, 0, 32, 0, 73, 68, 65, 84, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66,168,192, 34, -132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, - 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132,252,133,104,164,113,202,164, 76,202,164, 76,202,164, - 76,202,124,238,208,147,220, 9, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33, -132, 16, 66, 5, 22, 33,132, 16, 66,200,127, 13, 30, 26,191, 19, 32,177, 5, 57, 79,115, 55, 65, 34,101, 82, 38,101, 82, 38,101, - 82, 38,101, 62,119,153,205,101, 39,130,252, 37,133, 23,101, 82, 38,101, 82, 38,101, 82, 38,101, 62,127,153,207, 20, 58, 69, 72, - 8, 33,132, 16,242, 39, 99, 26,252, 97,247, 53,197, 44,203,186, 1, 0,195, 48, 37,166, 27,203,149, 77,133,248,120,120, 12, 49, - 3,223, 3,128, 0,120, 35,175,176,240,124, 3,153,231, 89,150,117,124,148, 89, 97,186,177,252,197,166, 50,133,221,215,156,123, -124,122,246,198,242,161, 79, 78,195, 1,124, 97,247, 53,133, 79,204,171,135,181, 11,207, 3, 44,255, 63,230,243,127, 37,243,121, - 38,236,177,166,216,100,122,216,142,132, 66,166,196,120,189,233,118, 36,234,177,166,240,241,233, 77,215,151,187, 63, 57,141,184, -215, 71, 57, 38, 19,235, 1, 0, 18,177,184, 52,200,207,125,125, 83,153, 25,185, 37,239,104,117,122,215, 71,153,133,134,171,255, -240,253, 95,221, 54,173,229,238,238,222,149,207,231, 47,231,241,120,118,143,253, 56,161,160,160,224, 29,106,149,132,144,103,174, -192, 98, 89,214,237,214,209, 85,168,213, 3,131,167,174,113,107, 53,118,243,158, 39,167, 49,233, 42,196,154,212, 99,237, 4, 38, -181,163,131,140,115, 76, 77, 77,229, 3,128,167,167,231,247, 0,124, 27,200,116,188,117,116, 21, 52, 6, 32,124,226,106,199, 78, -126,126,118, 85, 60,222, 34,153, 76, 54, 72,167,211,181, 7, 0,169, 84,122, 87,171,213, 94,176,227,184,207,159,156,190,177, 5, -120,124, 94, 7, 77, 89,227,214, 58,242,251,191,155,205,102,177, 62,227, 64,127, 75,245, 3, 70, 96, 54,124, 53,188,176,240,244, -119,128,217,154, 21,242,248,223,237,255,234, 63,156,125, 60, 60,134,200,228,242,174,114, 27,155,126,102,179, 57,196, 98,177,192, - 98,177, 36,105,107,107, 47,177, 38,211, 77,179, 73,227,124,235,199,143, 44, 77,205,231,147,203,210, 5, 96, 74,148,202, 9, 50, - 27,155, 1, 2,129,160, 15, 0,152,205,230,203,218,154,154, 95,220,138,138, 14, 90,179,236,214,174,159,167,157,254,121, 99, 50, -177,110,153,103, 87, 65,111, 2,194, 94,254,216,173,227,107, 59,247, 2,128,161, 36,222,189, 38,245,120, 15, 0, 80, 4,142,188, - 46, 81,134, 21, 3, 0,243,160,208, 45,229,228,123,208,155,128,144,145,171,221, 26,202, 52, 24,140, 62,105,167, 86, 64,111, 2, -254, 22,117,200, 99,201,236,241,114, 0,136,249,241,187,192,115,135, 54,188, 4, 0, 47,142,127,251,167,129, 99,223, 76, 7,128, -207,190, 61,228,177,251,195,241,208,155,128,208, 49, 31,248, 60,237,182,201,234, 43, 69,234,148,147, 65,166,170, 2, 71, 31, 5, -163,108,233,182,105, 15,216,215, 0,243,120, 2, 65,223,160,160,160, 46, 0,144,158,158,126,203,194,178,191,218, 0, 95,253,153, -109, 73, 32, 16,252, 61, 63, 63,127,212,227, 63,243,242,242,162, 6, 73, 8,121, 54, 11, 44, 0,168,213, 3,177,105, 64,255,158, - 29, 49,107,242, 75, 54,143,255,238,199,237,159,248,228,223, 61, 23,242,217,190,245,130,214,173, 91, 35, 53, 53,213,170, 63,166, - 49, 0,191,164, 2, 18, 93,150,173, 70, 40,204,136, 90,190,220,174,111,223,190,140,167,167, 39, 0,160,164,164,164,231,165, 75, -151,186,174, 94,189,122,142, 68,151, 85,161, 49,160,250, 23, 43,162,235,230,181,125,235, 23,240,222,252,137,246, 0,176,126,209, -193,174,167,174,196, 59,101,101,101, 13,254,232,163,143,202,189,174, 94,221,100, 99,177,108, 75, 46, 46,206,181,102, 62,247,159, -142,147, 5, 25,207,183, 26, 63, 99,198, 17, 95, 95, 95,185,183,183, 55, 79, 42,149, 66, 32, 16,160,166,166,198, 51, 57, 57,121, -200,237,219,183,181, 23,175, 30, 19,198,199,141,203, 44, 16,134,105,173, 89,118, 17, 91, 38,173, 13, 14,190, 55, 62, 34,194,123, -228,200,145, 82,127,127,127, 0, 64, 86, 86, 86,240, 79, 63,253, 52,233,212,169, 83, 43, 69,108, 25,171, 49, 64,215,220,178,215, -101, 2,128, 16,232,237,228,230, 54, 89, 40, 20,134,178, 44,235,245,168,119, 33,223,100, 50, 37,170, 74, 74,118, 63, 57, 61,249, -119,122, 19,144, 84, 8, 12,233, 23,134, 41,227,134, 40, 0, 96,233,171, 31,246,124,144,149, 38, 50, 24, 12,104,221, 38,164,207, - 7, 31,127,113, 22,124, 62,126, 56,242,115,253,244, 77, 22,182, 28, 31,169, 37, 64,194,253, 76,172,250,112, 35, 87,148,112,168, - 27, 91,113,111,104,121, 89, 25, 3, 0,206, 46, 46, 19,246,239,221,125, 94,217,113,252,111,233,197,181,245,211, 91,211,222, 27, -218, 54, 79,237,219,232,153,159,120,161,221, 55,103,183, 8,125,125,125,145,152,152,216,162,109, 19,149,201,182,114, 15,143,164, -168, 37, 75,148,225,225,225, 80, 40, 20, 16, 10,133, 48,153, 76, 67, 46, 95,190, 60,100,213,170, 85,115,170, 42,147,107,173,221, - 54,173,232, 59,252,220,189,117,255,129,145,163, 71,120, 12,234,223, 19,227,134,247,161,134, 72, 8,121,118, 11, 44,134, 97, 74, -134, 78,251,200,173, 95,143, 80,252, 22,159, 82,153,149, 83, 84, 83,247, 59,245,253,163,193,179, 35, 59,133,110, 62,117, 18, 70, -163, 17, 87,174, 92,193,205,155, 55,113,229,202, 21,238,243,207, 63,215, 10,128, 55, 26,201,172, 8,159,184,218, 81,162,207,181, -233,226,156,235,191,127,239, 47, 2,173, 86,139,216,216, 88, 84, 84, 84, 64, 34,145,192,203,203, 11,253,250,245, 99, 98, 98, 98, -156, 94,157, 52,217,254,197,177, 51, 51,245, 18,159, 26,134, 97, 42,216,198, 22,128, 97, 74, 6, 79, 93,227,214, 46,248, 5,164, -103, 23, 84,190,247,241,150, 26,139,153, 99,116, 15,242,140, 23, 47, 94, 68,231,206,157,177,127,255,126,231,138,138,138, 21, 59, -118,236, 88,238,254,229,246, 13,197,121,201,139,208,120, 94, 69,248,196,213,142,173,205,209,190, 7,247,108, 19,197,199,199,139, - 54,109,218, 4,149, 74, 5,177, 88, 12,123,123,123, 40,149, 74,180,110,221,154, 55,103,206, 28,249,192,129,169,120,111,209, 12, -223, 34,199,200,228,198,230,179, 46, 83,100, 40,148, 7, 11,110, 6,126,191,115, 39,191,123,247,238,188,199,167,241,245,245,197, -128, 1, 3,164,145,145,145,129,115,230,206,183, 12,137,124, 51,221, 40,246,208, 52,151,137,218, 92,153,179,230,170,231,144,137, - 19, 79, 68, 69, 69, 57,120,120,120, 64, 46,151, 3, 0, 42, 43, 43,189,179,179,179,123,174, 90,181,106,252,245,132,253, 76,248, -200,220, 2, 40,124,180, 77,173,207,231,149, 80,200,148,212,245, 68,217, 42,100, 21,185,121,197,181, 15,123,161, 12, 48, 24, 12, -208,235,245,120,107,206,155,130, 55, 94,238, 30,228,215,239,239,183,179,242,139, 85, 33, 63, 95,115,170,123,173,169,225,204,178, -118,163, 63,112, 4, 0,126, 85,102,109, 69,246,185,191,189,187, 96,129,151, 82, 57, 27, 34,145, 8, 0,176,125,219, 54,166,188, -188, 60,226,131, 15, 62, 8,229, 20,131,171,218,141,254, 64,241,232,181, 21,166, 22,110,155, 21, 41, 39, 91,125, 56,111, 88,167, -239, 63, 62, 9,179,217,140,107,215,174,225,226,197,139,248,226,139, 47,184,211,167, 79, 87,218, 41, 20, 77,110,155,168, 76,182, -237,235, 81, 20,240,233,167,135,121, 98,177, 24,199,142, 29,195,253,251,247,193,231,243,209,177, 99, 71, 76,153, 50, 5, 67,134, - 12, 81,206,154,245, 38, 23, 62,252,213, 12,216,183,169,254, 99,109, 41,138,207, 58,222,249,251,188, 89,175,121,188, 60,102, 24, - 54,126,249, 13, 21, 88,132,144,103, 27, 7,240,252,199,110,222,123,240, 22,119,210,127,236,230,189, 28,192,227, 0,158, 4,240, - 29, 52,104,144,161,166,166,134,139,143,143,231, 38, 76,152, 80,177,116,201,146,173, 59,183,111,143,210,107, 52,111,117,233,212, -105, 10,247,240,209, 15, 13,103, 58, 56,216, 5, 4, 4,148,230,230,230,114,167, 79,159,230, 86,175, 94,205,237,217,179,135, 59, -115,230, 12, 23, 29, 29,205,157, 57,115,134, 59,112,224, 0, 23, 31, 31,207,165,165,165,113,129,129,129,165,254, 14, 14,118, 77, -100,242, 57,128, 31, 20,249,221,162, 67, 55,205, 81,193,145,223,191,195, 1,252, 64,165,178,205,208,161, 67,205,135, 15, 31,230, -118,239,222,205,237,220,185,147, 75, 72, 72,224,202,202,202, 56, 47,191,128,210,186,215, 53, 54,159, 28,192, 11, 11, 11, 43, 85, -171,213,156,175,175, 47, 39, 18,137, 56, 55, 55, 55,174,117,235,214, 92,207,158, 61,185,225,195,135,115,147, 38, 77,226, 86,172, - 88,193,169,213,106,206,207,207,175,184,238,117,141,101,246,244,242,146, 6, 6, 6,230,220,185,115,135,107,140, 78,167,227,202, -202,202,184, 11, 23, 46,112,129,129,129, 57, 61,189,188,164, 77,101, 10,129,176,208,208,208,210,178,178, 50,206, 98,177,112, 26, -141,134, 43, 47, 47,231,202,203,203,185,138,138, 10,206, 96, 48,112, 22,139,133,179, 88, 44, 92,114,114, 50, 23, 16, 16, 80, 34, - 4,194, 26,203,124,206,219, 60,191,161, 47, 47,119,247,225, 74,165, 82,123,248,240, 97, 46, 63, 63,159,219,177, 99, 7,199, 7, - 62,124,114,186,134, 50,199,135,140, 23,133,133,205,146, 9, 4,178,151,122,247,238,109,190,114,229, 10,119,235,214, 45,238,221, -119,223,229, 70,141, 26,197,141, 30, 61,154,139,138,138,226,114,114,114,184,220,220, 92,238,197, 23, 95, 52, 11, 4,178,151,194, -194,102,201,198,135,140, 23,181,100,219,148, 2, 62, 35, 71,142,212, 26,141, 70, 46, 35, 35,131,107,223,190,125,158, 0,152, 44, - 2, 66, 2, 0,113,115,237,211, 14,112,240,240,240, 40,188,122,245, 42,119,248,240, 97,206,207,207,175, 84, 0,188, 46, 1,252, - 37,128,191, 0,120,189, 85,171, 86,165, 87,175, 94,229,202,202,202, 56, 95, 95,223, 66, 59,192,225,233,219, 82, 20,223,173,253, -216,109, 31,124,121,152, 75,206,171,229, 62,248,242, 48,231,222,122, 64, 14,199,113,156,135,135,199,121,106,145,132,144,103,178, - 7,171, 49,124,153,108,213,199, 31,127, 44,210,106,181,120,255,253,247, 75,223,154, 61,123,141,139,155,155, 81, 40, 20, 66, 40, -145, 52, 31, 96,103,247,206,178,101,203, 28, 12, 6, 3,226,226,226,208,165, 75, 23, 72,165, 82, 8,133, 66,136, 68, 34, 48, 12, - 3,165, 82,137,178,178, 50,184,187,187, 99,206,156, 57,246, 95,109,220,248, 14,212,234,247,155,138,181,152, 57, 6, 0,204,102, -179,216,199,211,115, 86,251, 14, 29, 62,159, 51,103, 14, 95,161, 80, 64,175,215, 67,175,215, 35, 57, 57, 25,206,206,206,144,203, -100, 86, 45, 51,159,207,231,219,216,216, 32, 54, 54, 22,219,182,109, 67,102,102, 38, 10, 10, 10, 96,103,103,135,206,157, 59, 35, - 36, 36, 4,125,250,244, 65, 90, 90, 26,120, 60, 94,179, 31, 50,197, 2,193,188, 41, 19, 39,186,133,134, 54,124,103,171, 94,175, -135, 90,173,134, 90,173,134,187,187, 59, 34, 34, 34,220, 78, 28, 59, 54, 15,192,218,134,166,151, 3, 74,255,224,224, 19, 55,110, -220,112,225,243,249,136,141,141,133, 70,163,129, 78,167, 3,203,178,224,241,120,144, 74,165,232,213,171, 23,156,157,157, 17, 28, - 28,140,163, 71,143,186, 14, 29, 58,244, 39,121,113,113, 24,128, 66,106,254,205,203, 43, 46, 62,215, 5,112,126,237,181,215, 78, - 39, 36, 36,132, 79,158, 60, 25,197,197,197,255, 16,188,251,110,133, 25, 88,215,212,107, 15, 38, 29, 98,189, 1,133,147,171,235, -119,159,124,242, 9,191,168,168, 8, 11, 23, 46, 44, 47,200,205, 93, 38, 5,174, 2,192, 79,199,143,247,218,181,107,215,199,187, -119,239,118,222,185,115, 39,191, 75,151, 46,155, 75,226, 54,183,187, 5, 84,182,164,114,209, 1,127, 95,191,126,189, 84,167,211, - 97,232,208,161, 25,154,172,172,142, 44,160,181,246,245, 53,192,188,168, 37, 75,148, 18,137, 4,139, 23, 47, 46, 43,123,240,160, - 61, 11,148, 62, 54, 73,182, 34, 51,243,244,212,169, 83,239, 38, 36, 36,184,172, 91,183, 78,249,114,100,228, 60, 0,107,172,253, - 27,255,186,160,157,111,103,182,137, 13, 30, 59, 60,194,189, 77, 43, 55, 28, 62,118, 22, 95,109,222,179, 29,234,244,239,188,188, -188,230,241,249,252,207,168,229, 17, 66,158,171, 2,203,209,209,177,107, 96, 96, 32,162,163,163,209,182,109,219,163,110,117,197, -149, 80, 8,179,185,249,107,200,101, 10,197,224,240,240,112,230,202,149, 43,240,247,247,135, 76, 38,171, 47,172,234,138, 44,161, - 80, 8,165, 82,137,202,202, 74,244,237,219, 87,184,109,219,182,193, 0,222,111, 46,187, 48, 59,217, 6, 25,219, 94, 91,253,193, - 7, 1, 93,187,118,133,209,104,124, 88,136,200,229,208,235,245, 16, 10,133, 48, 26,141,208, 25,184, 42,107,150,213,108, 54,155, - 5, 2, 1,124,125,125,177,114,229, 74,232,116,186,250,211, 58, 85, 85, 85, 80,171,213,136,139,139, 67, 86, 86, 22, 44, 22, 11, -215, 92,158,220,198, 38, 98,244,232,209,226,134,126,103, 48, 24,234,139,171,202,202, 74,232,116, 58,116,234,212, 73,124,225,194, -133,136,198, 10, 44,158, 84, 58,126,231,206,157,110, 98,177, 24, 58,157, 14,169,169,169, 72, 79, 79, 71,114,114,178, 94,165, 82, -177, 54, 54, 54, 60, 15, 15, 15, 65,101,101,165,120,234,212,169,188,234,234,106, 0, 64,100,100,164,243,246,173, 91, 95,129,193, -176,142,154,191,117,110, 1,250, 64,131, 97, 84,247,238,221, 47,252,246,219,111, 93,222,126,251,109, 36, 36, 36,252, 83,190,127, -255, 69, 13,112,187,201,118, 9,204,249,108,233, 82, 15,133, 66,129, 41, 83,166,168, 52,185,185, 29, 89,160,232,177, 73, 82,156, -179,178,206, 76,155, 54, 45, 49, 33, 33,193,113,221,186,117,202, 87,198,143,159, 3,224,227,150,204,163,189,189,125,119,165, 82, -137, 51,103,206, 32, 39, 43,107,105, 75,138, 43, 0,224, 9, 4,125,251,247,239,143, 31,127,252, 17,121, 15, 30, 44,125,162,184, - 2, 0,212, 2,165, 76, 70,198,210,237,219,183,111,155, 49, 99, 6,248, 12,211, 23,172,245, 39, 8, 27,186,160,253,173,165,159, -225,232,153,107,219, 75,238,118,248, 27,240,163, 5,192, 13,106,113,132,144,103, 65,139,158,131,213,170, 85,171, 86, 18,137, 4, -217,217,217,232,209,163, 71,150, 80, 44,134, 68, 44,134, 68, 38,179,238, 40, 91,167,235,160, 84, 42, 81, 85, 85, 5, 23, 23, 23, -136, 68, 34,136, 68, 34,136,197, 98,136,197,226,250,239,109,109,109,193,231,243,225,229,229, 5,157, 78,215,161,185, 92,182, 50, -213,237,236,142,165,115, 79, 29,221, 21, 16, 25, 25, 9, 79, 79, 15,120,121,121, 66,161, 80,128, 97, 24,248,250,250, 34, 48, 48, - 16, 91,183,110, 5,207, 46,248,186, 53,243,250,120,209, 36, 16, 8, 96, 54,155, 81, 92, 92,140,228,228,100, 36, 36, 36,224,234, -213,171,136,139,139, 67, 77, 77,141, 85,203,174,209,104, 58, 55,212,209,245,100,113,165, 86,171, 81, 90, 90,138,244,244,116, 84, - 87, 87,135, 53, 90,236, 58, 59,143, 11, 13, 13, 21, 0,128, 84, 42, 69,171, 86,173,240,237,183,223,178,231,207,156,121, 69,246, -219,111, 14,230, 11, 23,236,247,254,240,195, 43, 51,103,206, 52, 95,191,126, 29, 85, 85, 85, 72, 73, 73,129,171,171, 43, 35,145, -201, 94,161,166,223, 50,233, 64,173,162,186,122,120,239,222,189, 51, 43, 43, 43,241,217,103,159,241, 25, 91,219,239,222, 4, 4, - 77,110, 96, 2, 65,191,129, 3, 7,226,216,177, 99,200,123,240,224,221,242,223, 23, 87, 0,128,114,160, 40, 43, 61,125,233,246, -237,219, 17, 17, 17, 1,134, 97,250,181,116,254,122,246,236, 25,202,113, 28,238,220,185, 3, 49,112,173,165,175, 15, 10, 10,234, - 98, 99, 99,131,251,247,239, 67, 8, 92,108,108, 58, 33,112, 49, 46, 46, 14, 50,153, 12,237,218,181,235,218,178,191, 34,252,220, -189,117,255,194,183,150,126,134, 35,103, 46, 3, 0,126, 60,113,186,248, 97,113, 21,101,161, 86, 70, 8,121,110, 11, 44, 0,224, - 56, 14, 2,129, 0, 34,134,129, 76, 34,129, 88, 34,129, 88, 40,180,254, 72,153,199,131, 68, 34,249,183,162,170,174,208,170,251, - 87,161, 80, 88,157,105, 42,252, 53,124,250,180,169, 98, 27, 27, 27,152,205, 44, 24,134,129, 92, 46,135, 82,233,142, 54,109,218, - 64,165, 82, 97,212,232,177,186, 7, 42,230,132,208,123,112,194,211,172, 40,150,101, 81, 91, 91,139,138,138, 10,168, 84, 42, 84, - 85, 85, 65,167,211,193,138,179,131,245,117, 90, 78, 78, 14,246,237,219,135,242,242,242, 70,139,171,140,140, 12,236,218,181, 11, - 89, 89, 89, 16, 8, 4, 86,191, 63,131, 7, 15,198,201,147, 39, 5, 3, 6, 15,222,242,192,207,175,240,129,159, 95,225,128,193, -131,183, 28, 63,126, 92,224,229,229,133,156,156, 28,196,197,197, 65,165, 82,193, 98,177,208, 53, 88, 79,161, 0,168,208,168, 84, - 51,254,241,143,127,112, 54, 54, 54, 88,187,118,109,231,173,192,164,166, 94, 19, 16, 24,216,197,198,198, 6, 73, 73, 73,144, 55, - 81,184,200,129,139,183,110,221,130, 76, 38, 67,155,144,144,174, 79,179, 93, 90, 44, 22,152,205,230, 6,159,239,102,205,118, 41, - 20, 10,193,231,255, 85,207, 30,142,226,179,142,157,254, 62,111,222,124,143,191,207,127, 11, 23, 98, 31,214,128,130,154,140, 84, - 42,174, 8, 33,207,162, 22,157, 34, 76, 79, 79,207,210,233,116, 33,254,254,254,184,123,247,174,127,251, 14, 29, 18,132, 66, 33, - 36, 66, 97,211,135,241,143, 72,165,210, 59,197,197,197,125,188,189,189, 97, 50,153,234, 79, 9,214,157, 38,172,251, 30, 0, 36, - 18, 9,146,146,146, 32,149, 74,239, 52,187, 16,230, 26,191, 86,173, 90,161,168,168, 24, 18,137, 4,142,142, 14,144,201,100,144, - 72,164,248,248,227,143, 45, 91, 54,111,254, 90,210,126,158,122,193,204,165,220,141, 53,223,255, 71, 86,180, 92, 46,191,227,239, -239,223, 75,161, 80,224,232,209,163,200,202,202,130, 90,173,174,191,110, 74,171,213, 66,175,215, 67, 42,149,162, 93,187,118,112, -114,114,194,221,187,119, 27, 93,246,138,242,242, 35,137,137,137,189,186,117,235, 86,191,234, 7, 12, 24,192, 27, 48, 96,128,203, - 99,189,102, 40, 47, 47, 71,124,124, 60, 98, 99, 99,193,178, 44,238,221,187,103,214,107,181,251,169,233, 63, 29, 29,112, 89,176, -125,251,182,217,179,103,207,236,211,167, 15, 56, 96, 4,128, 31, 26, 61,130,225,243,121, 12,195,128,199,227, 53, 89,248,240, 0, - 11,199,113,117,197, 78,139, 11,224,171, 87,175, 38,154,205,230, 62,173, 91,183,134, 30,232, 14,224,100, 75, 94,159,150,150,118, -203,100, 50, 13,233,212,169, 19,142, 28, 60, 24, 14, 32,187,193,131, 25, 32, 60, 44, 44, 12, 90,173, 22,247,238,221,187,105,109, -113,229,214,254,206,150,121,179, 94,123,253,229, 49,195,112,248,216, 89,252,120,226, 76,238, 55,159, 46,241,225, 56,139,145, 90, - 21, 33,228,185,239,193,170,172,172,252,237,254,253,251,232,217,179, 39,210, 50, 50, 34,245, 90,173,168,174, 23,139, 47,104,190, -196,210,214,214, 70,255,250,235,175,108,231,206,157, 81, 83, 83, 83, 95, 84, 61,222,123, 85, 87,112, 41, 20, 10,156, 62,125,218, -168,173,173,141,110, 46,215,204,154, 45,124, 62, 31, 60, 30, 15,122,189, 30,133,133, 69,208,233,244,248,254,251,239,177,117,243, -230, 73,121,133,133,239, 64,226,168,253, 43, 86,160,181,159,133, 90,173, 54, 58, 58, 58,218,228,239,239,143,233,211,167, 99,193, -130, 5, 88,176, 96, 1,222,124,243, 77,188,254,250,235,152, 60,121, 50,198,141, 27,135, 30, 61,122,192,213,213, 21,153,153,153, - 38,173, 86,219,232,178,115, 58,221,161,105,211,166,149,232,116, 58,152,205,102,232,245,122,104,181,218,250, 94,182,184,184, 56, - 28, 57,114, 4,155, 55,111,198, 79, 63,253,132,218,218, 90, 84, 85, 85,225,214,173, 91,106,129,201,116,128,154,254, 31,218,104, - 14,255,250,235,175,112,116,116,132,167,183,119,255, 38, 15, 74,210,210,110,155,205,102,116,236,216, 17,181, 64,163,211,214, 2, -253, 59,119,238, 12,157, 78,135,164,123,247,226, 90, 58, 79,213,213,213, 55, 50, 51, 51, 49, 96,192, 0,120,120,123,127,238, 14, -200, 90,242,122, 11,203,254,122,249,242,101, 76,157, 58, 21,126,173, 90,125,170, 0, 92,159,156, 70, 1,184,250, 7, 6,126,250, -250,235,175,227,220,185,115,176,176,236,175,141,229,185,187,187,119,245,240,240, 56,238,233,233, 25,235, 30,120, 62, 59,114,120, -207,215, 31,191,160,157, 83,167, 79,240,242,242,218,205,231,243, 23, 83,139, 34,132, 60,247, 5,150, 69,171, 93,189,108,217, 50, -131, 64, 32,192,220,185,115, 93,191,250,230,155,213, 7, 14, 28,232, 22,127,231,142,210,160,215, 55, 95, 97, 85, 85,173,255,224, -131, 15,212, 70,163, 17,109,219,182,133, 74,165,130,217,108,134, 64, 32, 0,195, 48, 16, 8, 4,224,243,249,144,203,229, 72, 76, - 76,196,254,253,251,171, 80, 85,181,190,217,249,178, 88,238, 28, 61,122, 20, 12,195,112, 82,169,180,190,232,217,184,113, 99,201, -204,194,194, 35, 0, 32, 16, 8, 12, 0,192, 23,240,172,186, 42,151,207,231, 55,123,225,186, 88, 44,174,187,184,191,249,139,220, - 89,118,253,183,223,126, 91,157,154,154, 10,141, 70, 83,127,106,176,166,166, 6,213,213,213,245,223,215, 21,137, 23, 47, 94,172, -150,179,108,163,203,174, 1,138,178, 82, 83, 71,117,235,214,173, 60, 59, 59, 27, 53, 53, 53, 72, 75, 75,195,213,171, 87,113,242, -228, 73,196,196,196, 32, 61, 61, 29, 6,131, 1, 14, 14, 14,168,170,170,194,241,227,199,171,244, 53, 53,195, 52, 13, 92, 7, 68, -254,197,199,195, 99,176,187,155, 91,174,171,139, 75,190,143,135,199,224, 6, 10,141,148,148,148, 20,152,205,102, 4, 4, 4, 56, - 53,117, 29,150,153,101,127,189,122,245, 42, 38, 79,158, 12,165,151,215,199,174, 13, 20, 46,174,128,171,135,183,247,199,211,167, - 79, 71,116,116, 52,204, 77, 20, 46,141,145, 2, 27,151, 44, 89,162, 21,137, 68,216,191,127,127,128, 93, 80, 80, 50, 3,188, 38, - 6,218, 6, 2,162,230, 94,111, 3,124,181, 98,197,138, 34, 0,216,189,123,183,139, 71, 96,224, 93, 6,152, 46, 5, 94,144, 2, - 47, 48,192,116,143,192,192,187,251,247,239,119, 97, 89, 22, 11, 22, 44, 40,178, 1,190,106, 44, 79, 32, 16,252,189,160,160, 96, - 84,126,126,126,120, 81,218, 21,159,111, 62, 93,130, 11,177,215,240,213,230, 61,219, 75,238,118,248, 91, 73, 73,254,141,130,130, -130, 41,249,249,249,137,212,226, 8, 33,207,162, 6,187, 95,152,238,107,138, 1,206,173,127,207,142,248, 45, 62,185,210,217,209, -254, 76,221,239,212,247,143, 6,191, 50,192,175,243,234,213,171,193,227,241,112,255,254,125, 36, 36, 60,188,172,233,179,207, 62, -211,240, 57, 46,242,177,241,206, 66, 1, 36, 62,202, 60,207,178,172,163, 68,159,107, 19,230,152,217,234,135,157,219, 5,182,182, -182,168,169,169,129, 64, 32,128, 84, 42,133, 66,161,128, 68, 34, 65, 66, 66, 2,166, 78,159, 97, 78,103, 59,253,235, 65,163,255, - 26,239,172, 62,179,238,249, 67,125,156,157,229, 57, 34,209, 34, 87,119,247, 37,243,231,207,151,133,135,135, 67, 44, 22,163,107, -143,126, 69,178,206, 75, 54,240, 5, 60,182,160,172,114,121,224, 11,158,246,247, 82,179, 1,240, 74, 76, 55,150,123, 60,118,202, -230,223,230,179,131, 52, 33,224,135,111,222,183,107,223,190, 61, 56,142, 67,101,101, 37,138,139,139, 81, 82, 82, 2,181, 90, 13, -173, 86, 11,139,197,130,159,127,254, 25, 63, 95,207,168, 42,182,125, 49,163,177,249,252,215,178,103,219,134,200, 82,252, 55,172, -251, 92,224,232,232,136,226,226, 98,148,149,149,213,159, 42, 52,155,205,168,174,174,198,177, 19, 63,153, 51,204, 29,178,244,146, - 23,170,155,203, 68,109,174,204,169,230,178, 87,215, 80,127,238,205, 55,223,180,181,179,179,131,197, 98,129, 74,165, 66, 86, 86, - 22, 82, 82, 82,112,233,210, 37, 77, 73,149,137,211,186, 12,205,171,127,208,104, 3,153,127,162,255,185,204,199,159,101,229,233, -225, 81,248,224,193, 3, 55,179,217, 12, 47, 47, 47, 86,173, 82,125, 34, 6,206,137,128, 2, 30,192, 85, 3, 43,214,109,216, 48, - 99,204,152, 49,232,222,189,123,110, 81,113,241, 11, 13,181, 37, 14,224,123, 2,142, 34, 63,191,164,107,215,174,185,166,164,164, - 96,218,180,105,165, 5,185,185,139,236,128, 88, 0,168, 2,250,123,250,248,124,190,119,239, 94,215,208,208, 80,116,236,216,177, - 84,159,149, 21, 82, 0, 84, 52,210, 62, 27,221, 54, 43, 82, 78,182,154, 27, 25,218,237,173,183,222, 2,203,178,136,141,141,197, -245,235,215,145,147,147,131,203,151, 47,171,237, 20,138, 87,155,218, 54, 81,153,108, 27, 17, 92, 27,176,123,247, 15, 60,145, 72, -132,237,219,183, 35, 46,238, 97,103, 90, 88, 88, 24, 94,127,253,117,176, 44,139,201,147,167,112, 63, 37,203,254,245,160,209, 6, -218,146,151,151, 87,168,197, 98, 89,203,227,241, 68,102,177, 91,183,162,204, 56,169, 71,235,190, 5, 69,169,131,125, 90,120,205, - 21,181, 79,202,164,204,231, 39,243,153,210,236, 88,132,107, 54,193,254,247,195,113,188, 81,120,108,251, 39,204,136,151, 70,133, - 44,127,111,153,160, 67,135, 14,176, 88, 44,232,222,189, 59,166, 77,155, 38, 15, 9, 9,105,110,188,179,154, 23,199,206,204,124, -241,197, 23, 29,230,206,157,107,223,191,127,127, 97,221, 80, 57,119,238,220,193,169, 83,167,140,251,246,237,171,202, 23,247, 83, - 95, 62,189,181,198,154,241,206, 46,151,151,107, 0,188,223,218,104,220,188,226,189,247,162,218,119,232, 48,243,157,119,222,225, -219, 40,228,194, 53,203,223,144, 2,192,135, 95,238,179, 31, 51,254, 53,172, 15, 2,250, 79,106,120,236,184,199,231, 51,175,176, -228,193,107, 51, 38, 4,205,156, 28,105, 25, 59,118,172,220,222,222, 30, 62, 62, 62,112,112,112, 64,102,102, 38,238,220,185,195, -157, 59,119,174, 38,254,126,142,112,215,129,115, 15,196, 54,110,214,140, 27, 88,253,226,152,105, 89,211,167, 79,119,140,140,140, -180,109,223,190,189, 80, 40, 20, 66, 34,145,160,172,172, 12,121,121,121,198,152,152,152,154,124, 81,175,138,203,103,118, 84, 91, - 57, 22,161, 54,124,226,234,180,232,179, 81,239,196,199,199, 79, 1,208,201,104, 52,122,155,205,102, 30,159,207, 47, 52,155,205, - 9,186,154,154,109,108, 88,212,122, 26,139,208, 58,102,179, 89,100, 54,155,161, 86,171,113,254,252,121, 38, 61, 61,125,121,124, -124,252,242,130,130, 2, 24,141, 70,140, 31, 63, 30, 97, 97, 97,248,229,151, 95, 80, 90, 92,124,162,169,172, 2,160,130,121,240, - 96,198,156, 57,115, 78,238,216,177,131,119,231,206, 29,215,109,219,182,253,112,235,214, 45, 0, 64,151, 46, 93, 48, 99,198, 12, - 48, 12,131,105,211,166,113, 57, 89, 89, 51, 88,160,162,137,246,217,212,182, 89,122,106,223,198,248,177,227,198,183, 91,181,226, - 61, 97,159, 62,125,224,234,234,138,126,253,250,193,104, 52, 58, 88,177,109, 86,135, 15,127, 53,163, 83,167, 78,138,117,235,214, - 41,103,204,152,129,121,243,230, 1, 0,180, 90, 45,206,157, 59,135, 5, 11, 22, 20,229, 48, 61,106,111,197,236,111,178,125, 62, -234,153, 26, 10, 0,158,158,136, 5, 16,206,175,205,206,160, 11,218, 9, 33,207,117,129, 5,252,107,188,179, 75,215, 19,241,248, -112, 28, 15, 57, 37,153,156, 34, 51,102, 44,248,164,157,192,164,118,148, 49, 6,199,132,248,120,126,102,102,102,147,127,172,110, -188, 51,189,196,167,198, 92, 88,222,109,227,250,245,239,108,217,178,101,112,221,163, 24,164, 82,233, 29,109,109,109, 52,170,170, -214,235,253,125, 46,180,116,236,188,148,242,242, 98, 0,179, 3, 45,150, 13,211,103,190,249, 25,207,198,135, 89,182,230,123,157, - 64, 32, 48,100,228, 23, 99,125, 16,160,176,226,121,168, 26, 3,112,167,220,141,189,203,245, 79, 94,251,201, 39, 11, 55,125,245, - 85, 15,153,141, 77,184,209,104, 12,177, 88, 44, 0,144,164,211,104, 46,178, 70,227,245,124,207, 89, 95,136,109,220, 56,107,199, - 13,212, 75,253,171, 21,218, 75,221, 14, 31, 60,248,246,233,211,167,255,109,217,109,129, 13,122, 59,255,104,107,150,253,241,105, - 76,192, 21,148,148, 92,105,170,171,146,198, 34,180, 14,159,227,222,112,116,116,252, 97,240,224,193,210, 33, 67,134, 96,196,136, - 17,232,221,187, 55, 44, 22, 11, 56,142, 67,117,117, 53, 14, 28, 56,128,127,254,243,159,169,238,192,234,230,242, 88,224, 12,115, -236,216,232, 46, 93,186,108, 91,183,110,157,243,236,217,179, 33,123,244,104, 19,173, 86,139,152,152, 24, 44, 88,176,160, 60, 59, - 35, 99, 6, 11,156,105, 46,175,233,109, 83,154,194, 58,140,201,122,117,222, 39, 65,166,170, 2, 71,103, 57,171,188,155,120,199, -234,109, 19,246,109,170, 43,227, 14,116,127, 57, 50,114, 30,159, 97,250,214, 61,138,225,222,189,123, 55,235, 6,123, 70,216,235, - 63,183,164, 45,113,220,195,103,207,113, 28, 71, 23,180, 19, 66,158,239, 2,139, 97,152,146,186, 94, 30,134, 97, 74, 50,127,156, -245, 90, 83, 33, 62, 30, 30, 67, 30, 29, 29,163,185,177, 8,235,254,159,169, 86, 87, 63,122, 66,123,131, 15, 17, 21, 62, 49,125, - 75,198, 59, 75, 47, 46, 78, 6,240, 18,240, 0, 72,190,244, 48,175,251,154,119, 31, 95,166, 70, 87,200,239,254,174, 72,149, 87, - 92,124, 9,192, 37, 0,255,108,112, 62,125, 69,170,230,230,243,201,101,143,127,240,160,234,209,114, 55,188,236,110,205, 47,251, -147,153,205,190,209,127, 96,125, 62,111, 10, 75, 75,127, 4,160,112, 57,121,210,253,212,201,147,175, 44, 92,184,240,101, 79, 79, -207, 32, 23, 23, 23, 71, 91, 91, 91,254,181,107,215, 50, 13, 58,221,134, 64, 96, 71, 10,160,177, 38,147, 5, 78, 41, 51, 50,218, -142, 30, 57,242, 29, 62,195,244, 13, 9, 9, 9, 3,128,164,164,164, 56, 11,203,254,234, 10,172,103, 1,149, 21,239, 99,203,182, - 77, 73,203,183,205, 74,160, 18,192, 26,176, 44,144,144,240,135,183, 77,139,197,178,198,203,203,171,154,158,208, 78, 8, 33,127, -158, 80,202,164,204,103, 40, 83, 0,192,142,214, 39,101, 82, 38,101, 82,230, 95,146,249, 76,225,211, 42, 32,196,106,102, 0, 85, -180, 26, 8, 33,132, 52,135,215, 68, 21,218,146,187, 3,158,166,146, 77,164, 76,202,164, 76,202,164, 76,202,164,204,231, 46,179, -185,108,186, 59,241, 47, 42,188, 40,147, 50, 41,147, 50, 41,147, 50, 41,243,249,203,124,166,208, 41, 66, 66, 8,121, 36, 42, 10, -124,142, 3,143,227,162,248, 28,119, 80,192,113,227, 5, 28,135, 63, 52,118,231,248,241, 13, 63,136,118,254,107,176,165, 53, 78, -200,179,139,161, 85,240,159,163, 84, 42,125,221,221,221,191,227, 56,142, 87, 82, 82, 50,171,168,168, 40,135,214,202,127, 31, 39, - 39,167,193, 0,160, 82,169,162,159,213,101,108,231,143, 72,142,135,182,143,255,140,103, 65,206,189,236,223,143,179,216,238, 5, - 76,225,248,191,127,150, 22,143,195,253,123, 89, 56,218,146, 3,187,177,131, 93,215, 2,192,143,209,165,139,241, 20,131, 83, 55, -199,195,195,163,181,179,179,243, 89,129, 64,192,152,205,230, 57,137,137,137, 39,155, 59,208,124,107, 28,150,177, 69, 46,203, 86, -204,230, 9, 13,250,207,212,122,157,174,146,207,231,103,137, 68,162, 75,243, 39,115,103,190,220,109,186,219,200,235, 27,157,255, -246,254,136,224,235,219,141, 10,107,155,153,177,118, 66,247,245,253,103,186, 8, 51,111,222,182,217,116, 52,231, 59,123, 7,247, - 81,127,127,181,232,164, 68,102,158,242,207,109,168,161, 45,205, 58, 31, 1, 78, 70,160,131, 72, 34,241, 54,179,172, 59, 0, 8, - 24,166,216,164,215,231,138,128,132,101,128,250,191, 36,211,197,196, 48,161, 34,177,216,219,108, 50,185,243, 0, 14, 66, 97,137, -197, 96,200, 53,179,108, 98, 20, 80,254,180,243, 41,148, 72,124,204, 44,235,206, 3,184, 63,107,217,255,204, 76,210, 76,129, 21, - 16, 16,112,147,207,231,123,243,249, 15, 59,185, 30, 31,115,175,238,255, 79,254,107, 54,155,243,146,147,147,187, 90,251,199,253, -253,253,237,116, 58,221, 43, 60, 30,239, 53, 0,224, 56,110,143, 84, 42, 61,144,149,149,245, 84, 23, 18,251,251,251,219,113, 28, -183, 88, 38,147, 13,210,233,116,237, 1, 64, 42,149,222,213,106,181, 23,120, 60,222,218,167,204,101, 60, 60, 60, 38, 40, 20,138, -129, 44,203, 14,228, 56,142,199, 48, 76,140, 70,163,185, 80, 88, 88,120, 16, 64,139,159,120,224,225,225, 33,115,118,118,254,208, -193,193, 97,210,220,185,115,203,157,156,156,218,172, 94,189,250, 55,103,103,231,189, 42,149,234,189,194,194, 66,237,127, 73,251, - 8, 84, 42,149,123,132, 66,161, 32, 55, 55,119, 32, 0,248,248,248,196, 24, 12, 6,115, 73, 73,201,107, 0,210, 91, 18,230,226, -226,162, 16, 10,133, 61, 21, 10, 69, 87,133, 66, 17,110, 54,155, 67, 44, 22, 11, 44, 22, 75, 82,109,109,237, 69,147,201,116,211, -100, 50, 93, 43, 43, 43,171,253, 47,218, 70,108, 69, 34,209, 15, 44,203, 2, 64, 48,128,234,103,113, 71,192,241,208,246,222,221, -164, 54,191, 43,166,218,135,252,251,116,124,248, 54, 50,157,213, 5,214,136,190, 14,195, 71, 69,116,226, 3,128,209,240,219,240, - 83,191,170, 79,253,217,197,213,136, 17, 35,174,108,216,176,193, 81,175,215, 99,201,146, 37,123,244,122,253,215,105,105,105,203, -154,122,157,157,157,253,194,247, 63,250, 74,254,104,127,230,102,177, 88,220, 10, 11,114,131,147,239,223, 25,158,124, 63,241,227, -249,227,239, 95,213,178,230, 55,183,254,136,251,214,204, 71,200, 11, 24, 57,106, 92,228, 75,239,175,140,194,164, 73,147, 94,184, -171,210,201,188,238,198,139,107, 57,155, 64, 23, 55,239,209, 75,223,251,148,119,237,202, 47,163, 15,238,219,114,225,255,102,152, - 6, 81,145,213, 44,222, 26,134,233,105, 31, 20, 20,254,234,143, 63,194,198,199,135, 97, 36, 18, 62, 0,176,122,189, 79, 77,110, -174,199,254,209,163,123, 68,165,164,252, 18, 5, 92,255, 79,102,190,207, 48,125,236,131,130,250, 76, 58,117, 10, 54, 30, 30, 12, - 95, 36,226, 3,128,197,104,244,174, 42, 40,240,216,255,210, 75,221,163,210,210, 46, 70,177,236, 53, 88, 49,212,218,255,208,178, - 19,107, 10, 44, 62,159,239, 29, 23, 23,231,166, 80, 40,240,168,248,129,217,108,134,217,108,198,163, 15,197,250, 7, 47,114, 28, - 7,150,101, 49, 96,192, 0,171,142, 94, 61, 60, 60, 6, 1,152, 30, 20, 20,244,242,226,197,139, 69,125,250,244,129,217,108,198, -133, 11, 23,250,173, 91,183,238, 75,189, 94,127, 4,192,142,194,194,194,104,107,143,110,149, 74,229, 48,129, 64,176,123,249,242, -229,118,125,251,246,101,234,158, 14, 95, 82, 82,210,243,210,165, 75, 93, 87,175, 94, 61, 71,169, 84, 78, 46, 42, 42, 58,107,237, -202,241,242,242, 10,149,203,229,135, 34, 34, 34,188,187,118,237, 42,109,221,186, 53, 56,142,195,237,219,183,103, 36, 39, 39, 79, - 60,117,234,212, 42,141, 70, 51,190, 5,227,169,241, 2, 3, 3,167,217,218,218,126,184,112,225, 66,167,177, 99,199,138, 19, 19, - 19, 43, 2, 2, 2,120, 71,142, 28,113, 61,113,226,196,156,175,191,254,122,130, 92, 46,127, 47, 61, 61,125,167, 53, 27, 94, 80, - 80,208, 77, 62,159,239,109, 77, 1,220,194, 34,184,179,191,191,255,129,139, 23, 47,250,103,103,103,155, 35, 35, 35,119, 1,192, -229,203,151, 59,114, 28,199,235,211,167,207,233,188,188,188, 87, 0,220,182,102,193, 61, 61, 61, 59,218,219,219, 31, 27, 59,118, -172,147,175,175,175,220,219,219,155, 39,149, 74, 33, 16, 8, 80, 83, 83,227,153,156,156, 60,228,246,237,219,218,203,151, 47,171, - 68, 34,209,232,130,130,130,132, 22,180,227,222,110,110,110, 83,132, 66, 97, 40,203,178, 94, 0,192, 48, 76,190,201,100, 74, 44, - 41, 41,249, 1,192,149,167,221, 64,220,221,221,191, 92,183,110,157, 75,113,113, 49, 23, 21, 21,245,101,101,101,229,180,103,121, -135,144,120,251, 26, 46, 93,190,136,111, 55,255, 80,201,113,120,240,111, 5,150, 5,105,237,219,135,184,190,249,198, 20,167,126, -125,194, 17,218,185,103,179,153, 99, 6, 57,191, 47, 22, 49,206, 26,189,254,122, 89, 30,255,152, 92, 33,138,156, 60,174,107, 6, - 0,156,249,249, 78,100,247, 0,199, 95, 93,188, 45, 99,228, 18, 73, 15,131,145, 45, 63,118,161,124,101, 75,138, 41,165, 82,121, -214,198,198, 70,174, 86,171,139,202,203,137,167, 96,192, 0, 0, 32, 0, 73, 68, 65, 84,203, 55, 69, 68, 68,172, 89,183,110,157, - 99, 70, 70, 6,114,115,115, 49,125,250,116,155,252,252,252,185,122,189,254,106,110,110,110,163, 61, 89, 85,213,149,235, 63,140, - 90,184,202,214,222, 81, 32,151, 41, 96, 99,107, 7,255, 86,193,232,214,163, 31,134,188, 56, 26, 25,233,201,189, 14,236,222,114, -123,206,184,188,143,147, 85,248, 32, 54,182,241,125, 83, 59, 63,244, 31,253,242,195,226,106,229,251, 81, 72, 73,190, 95,157,157, -195,159,255,211, 45,190, 60, 98, 80, 59,137, 65, 95,147,125,237,202, 47,254, 61,123, 15, 0,128,174, 7,247,109,185, 16,245,154, -105,112,212,158,103,179,128,255, 51,138,171,247,133,194,105,195,214,173,115, 11,155, 51, 71, 84,147,149,101,204,248,246, 91, 77, -241,197,139,102, 70, 34,225,124,134, 15,231,185, 14, 28, 40,157,147,148, 36,186,252,201, 39,225,194,213,171, 3,222, 51, 26,119, -255,167, 50, 71,108,220,232,218,121,214, 44, 81, 85, 70,134, 49,229,203, 47,181, 69, 63,255,204,138,164, 82,139,247,136, 17, 2, -247,161, 67, 37,115,238,222, 21, 93,253,236,179, 62,204,138, 21,173,150,155, 76, 63, 60, 35,203, 78, 90, 80, 96, 65,161, 80, 96, -223,190,125, 16, 10,133, 16, 10,133, 96, 24,166,209,255,251,249,249, 89, 83, 4,141,115,118,118,254,106,225,194,133,238,163, 70, -141,130,163,227,239, 71,217, 24, 57,114, 36, 70,140, 24, 33,202,204,204,156,120,240,224,193,137,187,118,237, 42,170,169,169,153, - 95, 84, 84,116,164,153, 15,239,129,254,254,254, 71,246,237,219, 39,211,106,181,136,141,141, 69, 69, 69, 5, 36, 18, 9,188,188, -188,208,175, 95, 63, 38, 38, 38,198,105,226,196,137, 71,248,124,254,200,130,130,130, 24, 43, 62, 88,187, 58, 58, 58,198,110,222, -188, 89,218,182,109, 91, 94, 90, 90, 26, 58,117,234, 4, 0, 40, 47, 47,199,200,145, 35,165, 99,199,142, 13,156, 59,119,238, 85, -150,101, 7, 20, 23, 23,223,108,102,217,187,184,187,187,239, 28, 62,124,184,231,187,239,190,107,103, 99, 99,131,236,236,236, 66, -165, 82, 25, 92, 87, 4,141, 25, 51, 70, 60,116,232, 80,143, 77,155, 54,109, 56,117,234,212,146,210,210,210,105, 69, 69, 69,183, -154,172, 86,249,124,239, 91,183,110,185,201,229,114, 20, 23, 23, 99,247,238,221,152, 59,119, 46, 24,134, 65, 73, 73, 9, 14, 28, - 56,128,249,243,231,131,207,231,163,170,170,202,170, 34, 88, 46,151, 15, 9, 10, 10,218, 26, 29, 29,237,237,224,224, 0, 79, 79, - 79,254,138, 21, 43, 66, 3, 2, 2,100, 30, 30, 30,252,130,130, 2, 28, 57,114, 36, 96,202,148, 41,199,114,114,114,102,232,245, -250,102, 79,157, 57, 59, 59,111,219,181,107,151,111,124,124, 60, 54,109,218, 4,149, 74, 5,177, 88, 12,123,123,123, 40,149, 74, -180,110,221,154, 55,103,206, 28,249,192,129, 3,229, 81, 81, 81,219, 0,116,182,162,253,118,114,115,115,251,110,224,192,129, 1, - 81, 81, 81, 14, 30, 30, 30,144,203,229, 0,128,202,202, 74,239,236,236,236,158,171, 86,173, 26,127,243,230,205,204,146,146,146, - 55, 1,196,183,112,251,232,220,174, 93,187,145, 99,199,142, 21, 20, 21, 21, 97,203,150, 45, 35, 43, 43, 43, 59, 91, 91, 84,254, - 47,186,116,249, 34, 6, 14,159, 8, 45, 43, 19,158, 56,186,155,171, 62,251,133,179,141,131, 3, 3, 0, 53,106, 53, 59,226,181, - 69,150,145,163, 39, 27, 7, 13, 31,163,185,112,102,143,220,154, 2, 75, 44, 98,156,247,111,157,157,123,241, 90,106,200,217, 11, -217, 67,198,142, 30,194,103, 20,109, 2, 1, 96,209, 59,111,136,127, 60,254,243,215,195, 6,189, 80, 24,222, 51, 56,247,213,153, -223,250,180,164,184, 10, 8, 8,248,229,236,217,179,238, 98,177, 24, 21, 21, 21,206,219,183,111,255,162,103,207,158,252,244,244, -116,220,191,127, 31, 89, 89, 89, 80,171,213,232,222,189,187,205,189,123,247, 54, 1,104,180,192,250,230, 48, 62,252,100,169,251, - 70, 87, 15, 87,127,147, 65,239,202,234,139,219, 71,159,141,239,120,248,128,166,139,155,210, 59,120,226,228, 89, 88,186,226, 83, -225,209, 67, 59, 87, 34,230, 28, 98,155,122,138, 63, 15,189,255,241,238, 50, 84,105,244,152,252,218, 27,152, 50,249, 13,103,206, - 98,240,224, 44, 58,133, 65, 87,225, 96, 47, 74, 62,185,115,251,129, 72, 0,222,143, 21, 89,209, 84,100, 53,236,125,134,233,241, -226,231,159,187,117,154, 51, 71, 18,191,122,117,109,217,197,139,218, 86, 35, 70, 84,132,205,158,173, 7,128,234,172, 44, 81,202, -170, 85,114,215,240,112, 89,159,255,251, 63, 7,147, 70,163,124,255,163,143,186,175, 4,110,180, 52,211,127,210, 36,243,218, 35, - 71,186, 93,251,228,147, 1,248,224, 3,193,192,176,176,219, 43,190,253, 54,207,154,204, 53, 12,211, 51,226,235,175,221, 58,188, -254,186,228,230,178,101,181,234, 27, 55,180,129,145,145,170,110, 11, 22, 24, 32, 16, 64,147,151, 39, 76, 95,189, 90, 97,223,163, -135,172,215,162, 69, 14,102,131,193, 61,106,213,170, 30, 77,245, 16,189,207, 48, 61,134,175, 95,239,218,105,246,108, 73,252,154, - 53,181, 5, 23, 46,232,171, 66, 66,208,249,229,151,203,189,156,157,245, 79,187,236,143,103,150,197,196,252,225,245, 73, 26,218, - 13, 52,162,117,235,214,197,201,201,201,110,135, 15, 31,182,170,192,242,244,244, 68,191,126,253, 74, 18, 19, 19,221,155,216, 33, -230,230,230,230,122,179, 44, 11,177, 88,220,228,140, 85, 87, 87, 35, 33, 33, 1, 19, 39, 78,204, 43, 44, 44,108,116,167,235,232, -232,104,235,232,232,152, 17, 19, 19,227,114,239,222, 61,220,188,121, 19, 1, 1, 1,112,116,116,132, 80, 40,132,201,100, 66,117, -117, 53,130,130,130, 32,151,203, 49, 98,196,136, 50,149, 74, 21, 80, 81, 81,209,232, 78,204,207,207, 79, 34, 20, 10, 83, 15, 31, - 62,236, 19, 26, 26,138, 27, 55,110,192,199,199, 7, 74,165, 18, 0,144,149,149,133,203,151, 47, 35, 34, 34, 2,137,137,137,152, - 61,123,118,174,201,100, 10,126,240,224,129,190,209,211, 5, 33, 33,133, 7, 15, 30,204,107,219,182,173,174,182,182,150, 95, 92, - 92, 44,188,120,241, 34, 91, 83, 83, 99,163, 86,171,133,149,149,149, 76,101,101,165,176,182,182, 86,200,231,243, 69,122,189, 94, -120,237,218, 53,129, 74,165,106,242,193,150,109,218,180, 41,190,127,255,190,219,241,227,199,209,161, 67, 7, 28, 62,124, 24,139, - 23, 47,198,229,203,151,225,237,237,141, 67,135, 14, 97,241,226,197,184,127,255, 62, 92, 93, 93, 49,104,208,160, 38,223, 35, 0, - 8, 12, 12, 76, 75, 72, 72, 8, 20,139,197, 72, 79, 79, 71, 94, 94, 30,194,195,195, 97,177, 88, 80, 84, 84,132,212,212, 84, 20, - 20, 20, 32, 48, 48, 16,175,189,246, 90,122,126,126,126, 80,115, 13, 45, 44, 44,172, 52, 58, 58,218,165, 99,199,142, 40, 42, 42, -130,131,131, 67,253,151,189,189, 61, 28, 28, 28,208,170, 85, 43, 44, 92,184, 16,157, 58,117, 42,121,240,224,129,123,115,197, 79, -104,104,232,217, 11, 23, 46,184, 56, 57, 57, 65,167,211, 65,167,211,213, 31, 28,200,229,114, 8,133, 66, 0, 64,106,106, 42, 70, -142, 28, 89,154,145,145, 49,188, 5,197, 17,223,221,221,253,126,124,124,124,176,173,173, 45,114,115,115,145,152,152,136,153, 51, -103,166,214,214,214,182,197, 95,112,221,208,127, 82, 72, 43, 44,191,119, 55,169, 77,187,118, 33,149, 83,103,188, 41, 28, 51,106, - 76,109,220,245,115, 38,161,254,151,154, 23,251,217, 23, 0, 64,244,181,106, 55,189,176,159,168,107,247, 97,188, 99,199,142, 73, -119,238,248,142,185,123, 55, 73,217,174,125, 72,114, 82, 38,214, 52,150,253,210, 0,251,169,139,231, 13, 15, 9,239, 19,206, 84, -213,114,202,173,219,190,239,254, 32, 59,195, 29, 0,252, 94, 8, 40,158, 57,227,141, 27,118, 10, 94,209,197,203, 23,217,181, 95, -157, 73,250,233,151,202, 93, 86,244, 46, 7,248,248,248, 92,221,190,125,187,139,139,139, 11,236,237,237,161,209,104, 96, 52, 26, -113,239,222, 61,221,254,253,251, 77,118,118,118,182, 69, 69, 69,168,168,168, 0,195, 48,184,118,237, 90, 78,113,113,113, 67, 71, -130,245, 55,251, 28, 60, 24,197,244,239,234,235, 40,226,115, 50,177, 57,217,147, 17,112, 98, 30, 28,220,163, 99,175,117,250, 37, -246,226,228, 17,163, 94,117,237,213,103, 32, 62, 93,179,212,148,149,155,219,249,209,233,194,127,107, 11,109,253, 49,104,236,184, -200, 9,239,175,140, 66,212,251,171,113,242,196,143,149, 54, 50,190,222,206, 86,104, 31,222,183,143,110,225,252, 87,114, 53,213, -106,159, 47,214,173,157, 52,116,120,164,119,207,222, 3,112,237,202, 47, 56,184,111,203, 77,145,132, 78, 23, 62, 46, 10,112,116, - 8, 8,120,115, 94,106,170,232, 78, 84, 84, 13, 91, 80, 80,209,117,193,130,178,134,166,205, 59,127, 94, 33,246,244,180,115, 30, - 61,218,113,157,159, 31, 76, 37, 37,223, 53,116, 13, 81, 67,153, 55, 60, 60, 28,142,198,196, 12,182, 48, 76,255,185,243,230,201, -134, 12, 25,130,170,170, 42,156, 60,121, 18,123,247,236,209, 43,149,202, 4,135, 27, 55,110, 7, 20, 22, 46,111, 40,243, 35,192, -201,182,117,235, 89,115,147,146, 68,113,203,151,215, 64,165, 82,133,205,159, 95,110, 54,155,121,179,214,172, 25,145, 81, 88,216, -191,184,172,204, 15, 0,220, 28, 28,114,219,122,120,196,109,220,181,235,222, 87,109,218,112, 53, 5, 5,223, 69, 53, 48, 6,233, -147,243,185,255,242,101,247,211,165,165,127,115,116,116,148,149,149,151, 11, 68, 66,161,170, 75,112,240,254, 79,231,207,143,213, -222,188, 41,126,218,101,239,186, 96, 65, 89,165, 70,195,188,183,113, 99,159,130,242,242, 23,106, 13,134,160,202,154, 26, 37,107, - 52,242,109,101,178,242, 23, 2, 3,139,171, 46, 92, 40,242,171,169,121,123,131, 70, 83, 66,173,242, 15,246, 96,241,120, 60,112, - 28,103, 85,113, 37, 20, 10,127,119, 26,170, 9, 34,129, 64,128, 27, 55,110,160,164,164, 4, 29, 58,116,128,191,191,255,239, 38, -200,200,200,192,169, 83,167, 80, 81, 81,129, 46, 93,186, 0,128,168,169, 64, 91, 91,219,119,150, 45, 91,230, 96, 48, 24, 16, 23, - 23,135, 46, 93,186, 64, 42,149, 66, 40, 20, 66, 36, 18,129, 97, 24, 40,149, 74,148,149,149,193,221,221, 29,115,230,204,177,223, -184,113,227, 59, 21, 21, 21,239, 55,150,201,113,220,188,137, 19, 39,186,133,134, 62,188, 11, 53, 55, 55,183,110, 94, 0, 0,110, -110,110,184,125,251, 54,186,116,233, 2,119,119,119, 68, 68, 68,184, 29, 59,118,108, 30,128,181,141, 46,184, 72,196,111,219,182, -109, 55, 0, 80, 40, 20,224,243,249, 41,118,118,118,174,238,238,238, 10, 59, 59,187,127, 91,198,237,219,183,171,197, 98,177,201, -154,149, 90, 84, 84,132,208,208, 80,168,213, 15,183,165,218,218, 90, 4, 5, 5,161,178,178, 18, 0,160,215,235,225,233,233, 89, - 95,128, 52,166, 99,199,142, 81,109,219,182,125, 81,161, 80, 72, 24,134, 65,124,124, 60,194,194,194,176,127,255,126,248,249,249, - 65, 46,151, 35, 57, 57, 25, 29, 59,118, 68,108,108, 44, 92, 93, 93,209,190,125,123,137,155,155,219, 37,149, 74, 21,243,224,193, -131,168, 38,122,218,248, 54, 54, 54,136,141,141,197,182,109,219,144,153,153,137,130,130, 2,216,217,217,161,115,231,206, 8, 9, - 9, 65,159, 62,125,144,150,150, 6, 94,243,141, 73, 25, 28, 28,124,242,198,141, 27, 46,124, 62, 31,177,177,177,208,104, 52,208, -233,116, 96, 89, 22, 60, 30, 15, 82,169, 20,189,122,245,130,179,179, 51,130,131,131,113,244,232, 81,215,161, 67,135,158, 42, 46, - 46,238, 12,160,168,185,117,234,232,232,248,246,202,149, 43,125,220,221,221, 81, 93, 93, 13,141, 70, 3, 79, 79, 79, 12, 29, 58, -212,235,212,169, 83,111, 27, 12,134,117,207,212,145,150, 5, 57,237,218,135,128,227,240,224,196,209,221,156,183,171, 52,116, 64, - 23,139, 91,202, 61,166,215,181,107,137,237, 1,192, 81,225, 31, 31, 28, 98, 76,137,253,237,124,222,201,227,123,227,205,102,240, - 67,218,133,180,225,115,200,111, 42,187, 44,143,127,236,236,133,236, 33, 29, 59,246, 19,108,252, 98,213,152, 89, 51,134, 73,156, - 28,251,241,170,242, 14,224,242,173, 59,126, 43, 86,188,235,246,193, 7,159,156, 56,123, 33,219, 92,150,199,255,208,154,249, 13, -124,193,233,203,195,159, 11, 93,170,171,247, 32, 62,205, 6, 60, 89, 71,248,183, 10, 68, 85, 85, 21, 36, 18,137,116,210,164, 73, -230,101,203,150,105,108,109,109,229,143,218,114, 9,159,207, 31,214,108,240,253, 36,176, 29,130, 88,161,173,193, 98,225,108,180, -208, 85,138,238,164,101,160,223,192,136,226,238, 93, 58,175,249,100,237,186,229, 1, 65,109, 92, 39, 77,125, 83,248,249,167,203, -191, 5,184,126, 13,198,100,225, 2,239,240, 81, 25,128,151,222, 95, 25,133,140,140, 84,199, 89,227,212,171, 25,129,204,179,109, -135,254,182,223,110, 63, 63, 60,168,117,155, 23,102,205,121,251,167,205,155, 54,188,244,120, 79,214,190, 61,155,143, 1,230,193, -176,238,218,156,231, 65,199, 41, 39, 79, 66,147,147, 99, 82, 93,186,164, 27,252,213, 87,101, 93,166, 78, 93,103, 52,153, 92,120, - 60,222,239, 46,133,224,241,120,128,197,194, 99,214,174,229,115,158,158, 48, 57, 56, 76, 71, 74, 74,235,230, 50, 63, 49,153,198, -141,237,220,249,165,173,187,119,195,207,207,175, 62,211,222,222, 30,243,230,205,195,156, 57,115, 36, 9, 9, 9, 61, 78,157, 58, -213, 99,215,215, 95,187,163,180,116,220,147,129, 70,160,195,164,227,199, 81,147,149,101, 84,221,184,161, 27,180, 97, 67,249, 47, -191,253,230,244,238,215, 95,175,232, 16, 22,230,245, 77, 84,148,196,215,247,225,253, 33, 57, 57, 57, 65, 27,214,175,247, 29, 56, -116,104,159,165,139, 22,109,191,189,112, 97, 59, 60, 28,146,173,209,249, 44,186,120,209,112, 90,165,250,219,193, 67,135, 28,218, -180,105, 3,142,227,144,150,150,230,182,109,219,182, 55,251,207,153, 51,101,209,196,137, 43,134,102,102, 86,152,203,203,197, 35, -191,252, 82,184,111,194,132,246,205,101,214,173, 79, 0,120,121,241,226,119,186,247,238,221, 46, 98,210, 36, 39, 79, 79, 79,158, - 76, 38,131,209,104, 68, 81, 81,145, 99,114,114,114, 96,116,101,101,213,185,219,183,127,128, 70, 51,148,154,228, 31, 44,176, 0, -192,108, 54,183,168,192,178,178,200,170,239,241, 42, 43, 43, 67, 98, 98, 34,252,252,252, 96, 50,153,112,246,236, 89,168,213,106, -136, 68, 34,136, 68, 34, 24, 12,134,102,179, 20, 10,197,144,240,240,112,230,202,149, 43,240,247,247,135, 76, 38,171, 47,172,234, -138, 44,161, 80, 8,165, 82,137,202,202, 74,244,237,219, 87,184,109,219,182, 33,104,100, 28, 64, 0,176,177,177, 25, 49,122,244, -232,250, 46,182,218,218, 90, 8, 4, 15,239,180, 54, 24, 12,168,174,174, 70,121,121, 57, 42, 43, 43,161,211,233,208,169, 83, 39, -241,133, 11, 23, 70, 52, 85, 96, 61, 78,163,209,212,148,148,148, 56,244,235,215,207,113,199,142, 29,201,189,122,245,250,221, 69, -195,191,252,242,139, 78,175,215, 51, 98,177,216,170,139,221,119,239,222, 93,191,238, 11, 10, 10,240,221,119,223,193, 98,177,128, -199,227, 33, 53, 53, 21, 27, 55,110,172,191, 86,174,169,247,168,109,219,182, 17, 63,252,240, 67,215, 93,187,118, 85, 48, 12,131, -228,228,100,236,217,179, 7, 28,199,193,197,197, 5, 26,141, 6, 37, 37, 37, 88,183,110, 29,140, 70, 35,108,108,108,224,229,229, - 37,157, 55,111, 94,223,213,171, 87, 11,155, 42,176,204,102,179, 89, 32, 16,192,215,215, 23, 43, 87,174,132, 78,167,131, 72,244, -176,174,172,170,170,130, 90,173, 70, 92, 92, 28,178,178,178, 96,177, 88,154,252, 96,145, 74,165,227,119,238,220,233, 38, 22,139, -161,211,233,144,154,154,138,244,244,116, 36, 39, 39,235, 85, 42, 21,107, 99, 99,195,243,240,240, 16, 84, 86, 86,138,167, 78,157, -202,171,174,174, 6,199,113,136,140,140,116,222,186,117,235, 43, 6,131, 97,125, 51,171,212, 85,169, 84,254, 99,214,172, 89,210, -186,245,102,177, 88, 80, 90, 90,138, 9, 19, 38,200, 99, 98, 98,150, 25, 12,134, 61, 0, 74,159,149, 29,193,227,119, 11, 86,159, -253,194,249,220,185,111, 94, 72,185,199,244, 18,160,188, 71, 88,255,183, 25, 0,184,127,115,123,159,180,164, 27,102, 27, 11, 47, -227,167, 61,107,175,218, 6,191, 89, 14,224, 88, 83,189,128, 35,250, 58, 12,151, 43, 68,145, 99, 71, 15,225,111,221,246,125,247, - 89, 51,134, 73,220, 58,125,207, 3, 0, 71,137, 55,122,155, 22,241,117,134, 90,233,214,109,223,119, 31, 59,122,196,245,172,236, - 7,235,156,149, 14, 71, 79,253,170, 62,211, 84, 47,161,135, 11,227,229, 40, 43,131,163,207, 16,248,133, 56, 34, 46, 46, 14,199, -142, 92, 65, 80,155,110, 48, 24, 12, 48,153, 76,138,145, 35, 71,106, 14, 29, 58,164, 43, 47, 47,175, 54, 26,141,253, 11, 11, 11, - 83,154,173,175, 80,102,233,196,183, 24,197,102, 33,171,173, 21,215,206, 95,113,228,149,238,189, 35,186, 56,249,122, 9,157,165, -236,137, 1,253,195,119,239,221,245,221,194, 69, 75, 63, 64,167,176, 94,189,231,139,126,107,255,229,110,211,157,134,178,146,178, -113,146,127,244, 40,155,145,146,246,210,131,220,236,188,214, 62, 74, 67,122, 14,103,122,123,217,183, 67,251, 13, 25,223, 49,176, - 77, 79,241,221,251, 87,120, 11, 23, 44,220,251,197, 23,159, 77,170, 43,178, 46,198,158,237, 31, 53, 61, 91, 28,181, 3,122,250, -136, 2, 68, 18,137,183,141,159, 31,147,181, 99,135, 54, 96,212,168, 10, 0, 48,177,172,203,181,235,215,237,229,114, 57, 56,142, -131,201,100,250,221, 53,194,117,215, 5, 15, 25, 48,192,221,154,204,220,111,190,233, 56,119,238, 92, 20, 21, 21,129,101,217,250, -222,239,199,246,217,168,170,170,194,184,113,227,176,125,211,166, 6,207,139, 11, 37, 18, 31, 27, 31, 31, 38,107,199, 14,109,224, - 75, 47,169, 96, 54,243,150,126,253,245,202, 69, 75,150,248, 79,120,229,149,223, 29, 55,134,132,132,224,155, 77,155,196,123,246, -236,241,250,100,211,166, 25, 17, 18, 73, 6,244,250, 38,231,179,186,125,123, 56, 38, 38,202,218,180,105, 83, 95, 80, 6, 7, 7, -227,211, 79, 63,149, 76,158, 60, 89, 60,109,202,148,207,239,182,105,179, 33, 42, 43, 43,205,185,117,107, 59, 70, 34,241,110, 46, -179,110,125, 2, 64,141,193, 16, 26,245,193, 7,142,215,175, 95, 71, 65, 65, 1, 56,142,171,255, 59, 29, 59,118,228,189,242,202, - 43,246, 61,187,118,237, 78, 45,242, 79,234,193,106,168,192,106,172,208,178,182,184,122,242,111,120,120,120,192,104, 52,226,251, -239,191,175, 47,172,234,143, 8,140,198,102, 51,116, 58, 93, 7,165, 82,137,170,170, 42,180,110,221,186, 62,163,110,190,234,190, -164, 82, 41,116, 58, 29,188,188,188,160,211,233, 58, 52, 83, 0,117,182,183,183,175,235,205,130,254, 81, 35, 53, 24, 12, 80,171, -213, 80,171,213, 48, 24, 12,168,168,168, 64, 77, 77, 13,212,106, 53,170,171,171,195,172, 89,102,139,197,130,196,196,196,244, 54, -109,218,116, 22, 8, 4,176,177,177, 81,212,214,214,162,238,102, 2,149, 74,133,157, 59,119,214, 78,157, 58,213,229,218,181,107, - 90,107,214,225,252,249,243, 33,145, 72,160,209,104,176,105,211, 38,204,159, 63, 31, 34,145, 8,213,213,213,216,180,105, 19, 22, - 46, 92, 8,134, 97,160,215,235,177,127,255,254,198, 63,100,239,221,203,186,118,237, 90, 88,151, 46, 93, 28,143, 30, 61, 90, 58, -100,200, 16,215, 97,195,134,213,175, 59,150,101,209,163, 71, 15,180,109,219, 22, 37, 37, 37, 56,125,250,116, 89,112,112,176,203, -245,235,215, 45, 69, 69, 69, 15,154, 89,238,250,162, 73, 32, 16,192,108, 54,163,184,184, 24,106,181, 26,165,165,165, 40, 40, 40, - 64, 94, 94, 30, 24,166,249, 39,135, 56, 59, 59,191, 28, 26, 26, 42,120, 84,108,161, 85,171, 86, 88,180,104, 17,171,213,106, 39, - 0, 56,253,104,178,136,189,123,247, 30, 13, 10, 10, 98, 60, 61, 61,145,154,154, 10, 87, 87, 87, 70, 38,147,189,218, 92,129,165, - 84, 42,183,159, 56,113,194,169,238, 14,218, 58, 90,173, 22, 44,203, 98,226,196,137, 78, 91,183,110,221,110, 52, 26, 71, 60,139, - 59, 5, 27, 7, 7,230,197,126,246, 5,215,174, 37,182, 15,235,255, 54,227,212,122,213,195, 2, 28, 96,226, 46,110, 8,235,215, - 35,116, 79,221,117, 89, 77, 25, 59,216,117,237,168,136, 78,252,201,227,186,102, 48,138, 54,129,187,119,110,112,119,114,236,247, -175, 29, 5,227, 4,133, 20,104,235,103,230, 95, 61,153,225,190,112, 97, 27,195,158,111,255,150,177,251,200,205, 33, 34,113,252, -160, 31,163, 75, 23, 54,150,125, 55,195,116,188, 82,231, 20, 98, 95,121,132, 7,231, 55, 16, 22, 22, 6, 87, 87, 79,124,179,249, - 7,120,189,208, 5, 6,131, 1,118,118,118,242,135,187, 17,227,110,107,138, 43, 0,136,138,138,181,132,135,247, 55, 50,174, 46, -236,188,121, 95,140, 27, 22, 49, 46,164,255,128,193,220,249,243,103,140,189, 67,140, 5,131,251,247, 44,250, 37, 54, 54,181,168, - 40, 63,184,109, 72, 71, 36,223,189, 57,140,227,144,200,227, 53,220,219,116, 55, 19,103,116,188,123, 49,251,151,204,178,104, 13, -113,178, 53, 95,223,137,120,105,204,180,208,240,190,253, 44,231,127, 62,103, 16, 67,157,100,211,183,119,254,180, 41,175, 30,221, -127,224,240,139, 49, 63,159, 12,170, 84, 23,159, 92,251, 3, 21, 87,245, 7,103, 44,235,206, 72, 36,252,226,152, 24,182,211,204, -153,245,235, 69, 46,151,227,216,177, 99, 16,139,197, 16,137, 68, 16,139,197,245, 95, 34,145, 8, 74,165, 18, 60,142,227,183, 36, -179,176,176, 16, 69, 69, 69,176,183,183,135,171,171, 43,138,138,138,112,249,242,101,164,166,166,130, 97, 24, 68, 68, 68,128,223, -200,231,230, 19,153,134,191,189,255,254,240,246, 29, 59,122, 62, 89, 92,213,125,182,169, 84, 42,244,239,223,159,119,254,252,121, -215,139, 25, 25, 99,160,215,255,208, 84,102,135,209,163,203, 75,162,163, 27,252,219,237,218,181,227, 29, 61,118, 76, 50,105,226, -196, 5,159,110,222,188,126,197,231,159, 23,129,101,149, 45, 89,118, 30,143,199,231,241,120,240,241,241,129, 74,165, 66, 77, 77, - 77, 93,135, 3, 28, 29, 29, 97, 50,153, 96,177, 88,132,212, 34,173,199,111,174, 24,120,178,144,106,236,139,207,231, 63, 85,145, -213, 20,107, 10,172,186, 34, 67, 34,145,252,110,227,170,251,122,124,227,171, 43, 98,172, 32,168,170,170,194,145, 35, 71,160, 82, -169, 80, 93, 93,253,187,226,170,174,231, 42, 51, 51, 19,123,247,238, 69,126,126, 62, 4, 2,129, 85, 15,109,205,204,204,188,233, -239,239,223,185,174, 71,108,224,192,129,222,151, 46, 93, 42,168, 43,230,150, 47, 95, 94,214,179,103, 79,151, 39, 63,220,155,156, - 89,129, 0,151, 47, 95,134, 70,163, 1,199,113, 16,137, 68, 72, 78, 78, 6,203,178,224, 56, 14, 12,195,160,180,180,180,217, 30, -172,196,196,196,215,103,204,152,177,126,230,204,153, 49, 75,151, 46, 61, 63,104,208,160, 92, 30,143, 7,147,201, 4, 59, 59, 59, - 40,149, 74,164,164,164, 64,171,213,226,157,119,222,201,217,181,107,215,207,155, 54,109,138,217,178,101,203,250,188,188,188, 25, - 45,121,111, 89,150, 69,109,109, 45, 42, 42, 42,160, 82,169, 80, 85, 85, 5,157, 78,247, 84,109,104,240,224,193, 56,121,242,164, - 96,240,224,193, 91,253,252,252,138,252,252,252,138, 6, 15, 30,188,245,248,241,227, 2, 47, 47, 47,228,230,230, 34, 46, 46, 14, - 42,149, 10, 22,139,133,215, 76,239,234,192, 41, 83,166,244,245,245,245,229, 25,141, 70,232,245,122, 24, 12, 6, 24,141, 70,152, -205,102,228,228,228,160, 93,187,118,124, 95, 95,223, 94, 0, 6,210, 46,164,101,170,242, 14,128, 43,249, 10,156,106, 31, 44, 37, - 95,163, 86,247,116, 57, 21, 21, 21, 31,190,245, 81,101,137,185, 50, 6,247,110, 29, 65,181,150,129,119,208, 64,188, 57,115, 34, -126,187, 30,131,242,242,114, 36, 37, 37, 33, 60, 60, 92,196,227,241, 90,212, 54,247,237, 59,105,158, 52,241,255, 94, 25, 60,108, - 92,215,193, 67, 70,152,207,159,143,214,223,184,122,230,102,144,191, 93, 9,199,170,139,237,237,228,183,210, 82,146, 16,220,166, - 29, 76,172, 37, 28,136,106,178, 77,101,100,192,240, 83,145,135,249,149,249,137, 83,134,141,154,222,105,240,144, 97,166,179,103, - 78,152, 47,157, 59, 20, 55,108,224, 11,177, 31,127,182,199, 71,101,106,221, 94,106,167, 60,213,171,179,188,223,236,177,190,179, -168,165, 52,208,235, 36,149, 90,240,104,191,201,227,241, 96,177, 88,126, 87, 84, 61,249,101,205,103,210,227,153,117, 56,142,131, - 90,173, 70,106,106, 42, 62,251,236, 51,220,190,125, 27,102,179,185,190, 39,171,209,207,161, 71,167,116, 69, 82,169, 5, 0, 50, - 10, 11,251,207,157, 59, 87,210, 80,113, 85, 94, 94,142,178,178, 50,228,231,231, 35, 34, 34, 66, 84,229,228,212,185,185,249,244, -114,115,211,203,165,210,226,148,148,148,127,155,223,234,234,106, 72, 36, 18,124,245,245,215,162,147,137,137,243, 47, 93,190,236, -208,146,245, 89,151,195,227,241,224,230,230,134,192,192, 64,132,133,133,161, 67,135, 14,144, 74,165,184,123,247, 46,190,251,238, - 59, 8,120, 60,150, 90,226,159,208,131,213, 88,129,213,208,255, 25,134, 65, 75, 10, 2,107, 89,115,138, 80, 42,149,222, 41, 46, - 46,238,227,237,237, 13,147,201, 84,223,123, 85,119,154,176,238,123, 0,144, 72, 36, 72, 74, 74,130, 84, 42,189,211, 84,166, 92, - 46,191, 35, 16, 8,122,117,235,214, 13, 71,143, 30, 69, 76, 76, 12, 50, 51, 51,161,213,106,161,211,233,160,213,106,113,247,238, - 93, 88, 44, 22,132,134,134,194,222,222, 30,114,185,252, 78,115,243, 90, 91, 91, 91,200, 48, 76, 27,153, 76,246,175, 83, 29, 30, - 30, 40, 43, 43,179,152, 76, 38,236,220,185,179, 74,169, 84, 42,100, 50,153,213,235,147,199,227,161,164,164, 4, 62, 62, 62,168, -170,122,248,152,175,234,234,106,184,185,185,193,104, 52,194, 98,177, 64,175,215,195,198,198,166,190,203,183,169, 14,193,180,180, -180, 69,143,125,223,109,194,132, 9,123,247,239,223,223,234,231,159,127,198,245,235,215,225,226,226,130,143, 62,250, 40, 51, 59, - 59,123, 18,128,223, 74, 74,254,255, 95,239, 88, 94, 94,126, 56, 49, 49,177, 87,183,110,221,234,247, 14, 3, 6, 12,224, 13, 24, - 48,192,229,241, 46,253,242,242,114,196,199,199, 35, 54, 54, 22, 38,147, 9, 73, 73, 73,102,173, 86,187,175,169,125,142,151,151, -215,142, 21, 43, 86,216,176, 44, 11,129, 64, 0,161, 80, 8,150,101, 33,145, 72,234,123,106,115,114,114, 16, 25, 25,105,191, 97, -195,134,237,122,189, 62, 16,128,241, 89,218, 41,212,168,213,108,244,181,106, 55, 71,133,127,252,253,155,219,251,180,125,180,159, -184,127,115, 27, 43, 85,248, 92,191, 30,175,181,237, 33, 85, 55,187,163,253, 49,186,116,177,209,240,219,240, 51, 63,223,137, 92, -244,206, 27, 98,191, 23, 2,138, 47,223,186,227,215,219,180,136,175,144, 2,181, 58, 64, 85, 9,220,127, 32,176,248,189, 16, 80, -252,219,173,100,241,231,235,183, 4,104,106, 13,117,167, 8, 27,149,159,159,175,187,196,113, 99, 23,125, 33,143,157, 56, 89, 32, - 22, 75,157, 80,173, 74,131,159,159, 23, 94, 25,219, 7, 95,125,127, 14,246, 14,142,112,119,119, 7,143,199, 83,180, 96,241,121, - 87,163,227,102, 78,157,241,102,207,161, 47,142, 48,159, 61,119, 10,209,103,143, 92,223,177,126,217, 17, 35, 83,173,224,155,107, -100, 62,222,202,132,172,204,148,215,194, 7,188, 8,169, 76,254,255,216,187,238,240, 40,170,183,123,102,182,167,247,186, 36,144, -132,144,132, 36,148, 16, 64,233, 85, 32,128, 20, 65, 84, 16, 16, 21, 80, 64,177, 80, 68, 1, 65, 4,233,216,144, 14,210, 5, 1, -233, 61, 64, 32,210, 75, 26, 33,189,236,166,183,221,108,223,153,185,223, 31, 36,252, 2,134,100, 19,208,207, 50,231,121,246,201, -238,100,230,204,189,115,239,204, 61,243,190,239,125,111,115, 32,164,214, 81,188,101, 51,188, 9, 26,190,224,144,253,235,246,249, -178, 55,223,122,183, 83,191, 1, 47, 51, 39,143, 31,196,201,195, 63,255, 62,111,106,179, 99,233,119,118,138, 99,175,229,202,134, -142,152, 92,118,228,108,162,241,149, 5,126,201,222, 45,218,234,128,116,126,116,170,126,129, 20, 10, 11, 24,131,193,167, 73,191, -126, 2,109, 86,150,200,214,195,131,169,126, 73,171,249, 82,253,164, 5,139,166,105,128,166, 57, 75, 56, 45, 45,139, 78,167, 3, -247,148,220,135, 84, 53,231,128, 1, 2,109,110,174,168,176,164,164, 89,179,102,205, 30,219,199,108, 54,163,164,164,228,209,167, -188,188, 28, 50,153, 12,165,102,179,135, 37,229,236,214,186,245,182,149, 43, 86,124,178,126,195,134, 71,174, 30,181, 90, 13,149, - 74,133,138,138, 10,208, 52,141, 25, 51,103, 74,103, 46, 88,240,254, 32,161,112, 58, 24,198,226,235, 89,253,178, 78,211, 52,132, - 66, 33,178,178,178, 30,125,178,179,179, 33,147,201, 64, 40,138,227,123,228,115, 16, 88,213, 65,238,245,137,171,234,239, 2,129, -192, 50,115,111,213,155,192,243,178, 96,105, 52,154, 51, 49, 49, 49, 29,251,245,235, 39,140,141,141,133,151,151,215, 31,220,132, - 66,161, 16, 20, 69,193,218,218, 26,199,143, 31, 55,105, 52,154, 51,245,220, 68,103,207,158, 61, 27,249,209, 71, 31,137,198,141, - 27,135,248,248,120, 76,154, 52, 9,101,101,101, 80,169, 84, 40, 41, 41,129, 78,167, 67,199,142, 29, 33,147,201,144,146,146, 98, -214,233,116,245,165, 42, 32,133,133,133,149,110,110,110, 94, 79,254, 99,196,136, 17, 30, 63,254,248,163, 54, 41, 41,201,220,185, -115,103,123, 0, 13, 18,172,187,118,237,122,212,102,247,239,223,199,218,181,107, 31,197, 33,220,188,121, 19,203,151, 47, 7,203, -178,150, 8,172, 39,113,189,184,184,152, 49,153, 76, 8, 12, 12,132, 92, 46,135, 78,167,195,154, 53,107, 24, 0,215,255,140, 14, -105,137, 5, 75,175,215,239, 27, 59,118,236,204,219,183,111,123,137,197,226,106,211, 53, 56,142,131,201,100, 66,102,102, 38, 18, - 19, 19,145,146,146,130,226,226, 98, 16, 66, 96, 52, 26,113,243,230,205,114,179,217,188,247,105,188,110,110,110,159,111,218,180, -201,211,202,202,234, 15,137,117,171, 31, 58,213,174, 87,119,119,119,244,232,209,195,253,220,185,115,159,155, 76,166,185,255,244, - 7, 65,117,134,118,194, 33, 37,234,141,143,185,201,147, 38,136, 91,180, 52, 37,167, 36, 94, 99,111, 93, 92, 19, 1, 0, 50, 27, -159,171, 45,130,219, 37, 92,138,179,229, 6,190, 57,163,109,136, 63, 4, 20, 65, 48, 69, 80,252,100,198,247,234,119,180, 99, 49, -229,199, 58, 4, 56,197, 28,252,237,204, 15,179, 62,126,231,218, 23, 95,204,114,215, 27, 53,178,144,166, 44, 13, 60, 20, 87,177, -241, 54,250,133, 11,223,185,182,100,197, 54, 46, 59,213, 52,253, 90, 90,249, 83,103,248,214, 20, 45, 52,173,148,121, 6, 76, 87, -250,181,232,213,236,238,239,235, 40, 87,123, 1,236, 90, 14,194,128,254, 47,225,244,217, 24,100,229,233, 80,245, 2, 80,103,218, -131,150, 77, 49,166,154,147,162, 33, 27, 51,254,221,110, 3, 6,188, 76,142, 29,253,141, 57,248,203,207, 49,187,118, 47,223, 75, -139,197, 66, 19,103,111,164, 4,250,114, 86,224, 24,175,169, 40, 5, 0,136,132, 98,251, 58,252, 3,190, 9,241, 73,193,161,161, - 33,158, 99,198, 79,116,136, 26, 48,132, 28, 59,118,144,219,187, 99,219,249,189,223,182,218,193,153, 85,226,188, 76,173,180, 66, -109,174, 32, 2,137, 99,165,154,211, 22,232,155,235,189,127, 31, 97, 2,246,241,163, 83,245, 56, 96, 48,228, 86,230,228,120, 57, -119,239, 46, 77,153, 63,223,218,163, 99, 71, 61, 69, 81,245, 10, 44,129, 64, 0,242,148, 56,190, 39, 57, 27, 34,176, 8, 69,213, - 58,249,136, 53, 24,114, 42,179,178,188, 92,187,119,151,165,206,157,107, 93,155,213,190,164,164, 4,165,165,165,143, 9,172,170, -103,141, 69,229, 92,246,225,135,191,183, 31, 55,174, 52, 54, 54,214,227,197, 23, 95,164, 84, 42,213, 35,113, 85,253,221,205,205, -141,242,109,214,204,238,140, 66, 17, 80, 91, 12, 86,109,215,211,146,186,211, 52,253,212,235,201,227, 25, 44, 88,150, 10, 44, 11, - 6, 71,179,217,108,134,187,187, 59,138,139,139,193,113,220, 83, 27,210,202,202,170,218, 7, 92,231, 76, 58,181, 90,189,122,225, -194,133, 83,122,246,236,233, 26, 18, 18,130,162,162, 34,184,187,187, 67, 32, 16, 60, 42, 87, 53, 95, 92, 92, 28,246,236,217,163, - 82,171,213,171,235,169,247,170,159,126,250,233,253,168,168, 40,103, 55, 55, 55, 56, 57, 57,225,238,221,187,112,116,116,132, 90, -173,198,253,251,247, 97,103,103, 7,138,162, 96, 48, 24,112,241,226, 69, 53,199,113,171,234,185, 49,201,229,203,151, 77,214,214, -214,119, 75, 74, 74, 4,197,197,197,130,170,244, 12,162,138,138, 10,209,137, 19, 39, 92, 29, 28, 28,180,231,206,157, 43,242,245, -245, 21,100,100,100, 8,140, 70, 99,189, 42,139,162, 40,124,248,225,135, 16,139,197, 48, 24, 12, 88,189,122, 53, 62,254,248, 99, - 8,133, 66, 24,141, 70, 44, 93,186, 20,115,230,204,121, 36,152, 15, 31, 62,220,160, 14, 82, 29, 64,106, 50,153, 96, 50,153, 96, - 54,155,255,212, 14,105,161,139, 48,255,193,131, 7,131,218,183,111,127,234,224,193,131, 46,246,246,246, 80, 42,149, 40, 42, 42, - 66, 65, 65, 1, 10, 11, 11,161, 86,171, 97, 48, 24,224,232,232,136,172,172, 44,156, 58,117, 74, 85, 89, 89,249, 18,234,152, 65, - 40, 16, 8,198,118,235,214, 77,248,100, 25,104,154,126,212,159, 68, 34, 17, 36, 18, 9, 20, 10, 5,186,117,235, 38,185,112,225, -194, 88, 0,255,120,129, 85,157,161, 61, 44,172,165,219,160,151, 71,155, 34, 59,244,171,188,112,253,116,174, 45, 71,165,117,237, - 24,190, 19, 0,174,222,209,217, 93,138,179,229,218,180,235, 67, 13, 28,164,107,187,117,243,122, 73, 66,124,130, 95,104,120,104, -157, 25,253, 93,155,112, 67,250,245,106,150,103,111, 67, 9, 23, 46, 92,114,120,211,230, 13, 29, 98,143,252, 47, 77,195,194,133, - 15,211, 52,244,235,213,140, 73,184,159, 60, 4,105,248,217, 82,209, 50,104, 80,191, 91,155,182,236,129, 34,229,176,247,170, 79, -172, 36, 40, 41, 4,172,219,161, 91,164, 11,110,108, 76,196,157, 59,119,242, 57,142,171,219,149, 75,195, 55, 46, 46, 33, 56, 44, - 60,212,243,205,241,239, 58, 68, 69, 13,193,177, 99,135,176,125,203,250, 11, 47, 58, 70,108,202,186, 94, 44,144, 7, 59,137,173, - 29, 37, 98,161, 88, 38, 20, 11,197,197, 38,243, 67,235,186, 80, 44,178, 7, 70,214, 57,232, 76,154, 56,218,161, 87,223, 33, 56, - 90,197,249, 69,219, 17, 27,253,132, 45,169,142,159, 44,155,236,215,212,175,169, 70, 91,160,162,105,137, 73,111,224,236,150,109, -204, 92,153,150, 58, 54, 13,192, 10,240,179, 8,171,113,119,123, 84, 84,135,105,169,169, 98,183, 46, 93,172,148,231,207, 91, 63, -233, 34,172, 77, 96, 9,133, 66,128,166, 25, 75, 56,169,211,167,105, 0, 16,139,197, 79,125,177, 23,139,197,208,106,181, 96, 40, -170,214, 29,196,192,221,237,131, 6,117,156,150,154, 42,114,238,217,211,218,237,246,237,236,140,140,140,160,136,136, 8,176, 44, -251,152,229,170,250,163,215,235, 97, 52, 26, 33,147, 74,227, 44, 41,103,193,197,139,250, 57,227,199,207,125,255,189,247,190,221, -179,119,175,204,222,222, 30, 42,149, 10,106,181,250,209,199, 96, 48, 32,178,125,123,209,207,247,239,143, 65, 89,217, 60, 75,174, -167, 71,207,158,218,250,158,201, 85,130,149,119, 17, 54, 0,116,125, 22,172,103, 76,211, 16,254, 4,231,156, 1, 3, 6,232,211, -211,211,225,227,227,243, 72,164,212, 60,167,189,189, 61, 28, 29, 29,145,144,144,128, 77,155, 54,233, 40,138,154, 83, 23,103, 89, - 89,153, 90,175,215,143,122,237,181,215,116, 34,145, 8,193,193,193,143,220, 58,132,144, 71,177, 87,113,113,113, 24, 59,118,172, - 86,175,215,143,170, 37, 7,214, 99,156, 89, 89, 89, 21, 26,141,230,141,209,163, 71,107,147,146,146,208,181,107, 87,220,190,125, - 27, 26,141, 6,149,149,149,200,200,200, 64,104,104, 40, 76, 38, 19,246,237,219,167,213,104, 52,111,100,101,101, 85,212,197,169, - 86,171, 7,127,243,205, 55,130, 99,199,142,249,121,123,123,135,181,111,223, 62,164, 87,175, 94,205,135, 13, 27,214, 52, 42, 42, -202,171, 69,139, 22,250,126,253,250,185, 13, 24, 48,192, 77, 32, 16,136, 82, 83, 83,243, 8, 33, 3,234,226,172, 41, 0,146,147, -147, 97, 50,153,254, 16,115, 85, 61,155,144,101, 89,139,218,168, 54,145, 93, 45,172,170,133,150, 5,150,176,240, 90,202, 88,239, - 65, 18,137,164,218,194, 73, 44,224,188,157,152,152,216,183, 83,167, 78,183,198,142, 29, 35,244,127, 68, 0, 0, 32, 0, 73, 68, - 65, 84,171,206,206,206,134, 88, 44,134, 92, 46, 71,211,166, 77, 97, 99, 99,131,210,210, 82,236,219,183, 79,123,252,248,241, 56, -149, 74,213, 3,127,204,129, 21,254, 68, 25, 51,106,123,184, 10, 4,130, 63, 8,172,234,149, 2,104,154,206,104,200,245,108, 36, -254, 50,206,137,239,140,113, 30, 56,120,136,221,161, 67,135,100,107,215,110, 76,232,218,245,221,109,182, 94,239,159,176,245,122, -255, 68,199, 23,223,222,249,221, 79, 91, 30, 28,248,237, 55,171,129, 3,135, 57, 76,126,119,140, 55, 40, 74, 88, 31,167,181, 84, -218,177,219, 11, 45,202, 47, 94,190,200, 44, 89,177,141,237,220, 53,234,234,183,223,253,180,247,219,239,126,218,219,185,107,212, -213, 37, 43,182,177, 23, 47, 95,100,186,189,208,162,220, 90, 42,237,104, 73, 57, 39, 77, 28,237, 48, 48,106, 8,142, 28, 57,192, -236,218,182,122,233,161,104, 99,247, 17, 51,245, 5, 89, 15,206, 18,228, 47,130,187, 36, 6,217,217,217, 21, 12,195,244,172, 37, -192,189, 86,206,201,239,142,174, 41,174, 46, 38,100, 96,195,250, 91,183,216, 31,199,207, 55,239, 60,121, 64,119,228,194, 45,213, -133, 27,217,101, 69, 15, 42,210, 52,106,149,145,227, 56, 16,142, 21,124,249, 37,168,186,218,168,115,231, 30, 56,119,122, 39,182, -109, 94, 87,193,113,208,143,220,183,143, 29,249,227,124,210,180,105,179,166, 59,118,236,164, 6, 13, 30,234, 64, 8,184,193, 67, -135, 56,238,218,177,139,242,247,247,111, 22, 16, 0,241, 63,189, 47, 61, 47,206,249, 64,153, 42, 43,235,194,245, 53,107,140, 30, -163, 70, 57, 75, 60, 60,236,193,113, 84,125, 49, 88,181, 88,176,158,202,233,225,236,172, 56,121,242, 36,130,131,131, 33,151,203, - 31,243,200,136, 68, 34,248,250,250,194,205,205, 13,167, 78,157, 2, 1,110,212,198, 57, 27, 40, 47, 79, 75,139,190,186,108,153, -193, 99,196, 8,167,182,254,254, 55,190, 93,179,198,200,178,236, 35,171, 85,205,191,101,101,101, 96, 89, 22,231,207,157, 51, 86, -234,116,155,234, 42,231,205,239,191, 55, 84,215,189,163, 94,175, 25, 26, 25,185,120,204,152, 49,166,140,140, 12,176, 44,139,154, -150,172,194,194, 66,216,217,217, 65,167,215, 55,113,119,119,183,182,132,179,240,216, 49, 91,212,243, 92, 23, 8, 4, 79,186, 8, -255,140,118,255,239, 88,176, 24,134,129,143,143,207, 99,121, 70,170, 3, 7,171, 45, 67, 22, 90,174, 0, 0, 74,165,242,103,134, - 97, 78,142, 25, 51,102,110,219,182,109, 39, 77,159, 62, 93,224,239,239,143,138,138, 10, 56, 57, 57,193,205,205, 13,153,153,153, -216,191,127, 63, 91, 94, 94,254, 19,203,178, 11, 10, 11, 11,139, 44,224, 61, 15, 96,208, 75, 47,189,180,231,253,247,223,119,232, -222,189,187,168,122, 0,188,119,239, 30,142, 29, 59,102,218,189,123,183, 74,175,215,143,178, 36,139, 59, 0,228,231,231,159, 2, -240,202,184,113,227,118, 12, 27, 54,204, 78,175,215,139,210,211,211, 97, 52, 26,193, 48, 12, 74, 75, 75, 77,209,209,209,149, 90, -173,118,116,213,190,245,241,221,204,207,207, 15, 53,153, 76, 99,111,221,186,181,232,149, 87, 94,113,233,212,169,147,152, 97, 24, -196,196,196, 20, 69, 68, 68,184,171, 84, 42,211,229,203,151, 75,244,122,253, 28,165, 82,105,209, 82, 57, 20, 69, 65,165, 82,193, -213,213, 21,122,189, 30, 28,199,193,104, 52,194,206,206,238,209,242, 70,132,144,135, 55, 71,195, 93,132, 96, 24, 70, 96, 54,155, -241,218,107,175,129,227, 56,172, 94,189, 26, 12,195, 8, 26,202, 99,107,107,123, 35, 62, 62,126, 80, 88, 88,216,163,242,208, 52, - 13,154,166, 33,149, 74,225,234,234, 10, 23, 23, 23,156, 57,115, 6, 52, 77,223,176,144,246, 78,113,113,113,187,147, 39, 79,118, -186,115,231,206,155, 0,218,152, 76,166, 38, 44,203, 82, 52, 77,231,177, 44,123,183,178,178,114, 19, 44, 92, 42,167,176,176,112, -209,216,177, 99, 35,118,237,218,101, 43, 20, 10, 31, 93, 47,154,166, 33, 22,139,225,234,234, 10,153, 76,134,230,205,155, 67,167, -211,225,243,207, 63, 87,105,181,218, 69,255,166, 7, 66,215,206,221,112,238,196, 78,235,109, 91,183,171, 89, 22,116, 85, 42,134, - 71, 8,241,135, 96,235,230,245, 18,153, 80,239,212,181,115, 55,139, 92, 43, 70, 19, 83, 50,106,194, 79, 62, 85, 75,229, 44,202, -200,204, 90,181,243,167,183,211, 0, 96,197,234,141, 1,217,169,166,233, 9,247,147,135,172,221, 24,221,209,104, 98, 44, 90, 0, -247,127,162,101, 71, 5, 8,244, 74,165,242, 42, 69,201,253,186,190,101,154, 19,220,140,122,185,160,132, 83, 80, 20, 53, 85,169, - 84,166, 89, 90,247, 78,157,186, 35,250,244, 46,108,219,178,163,130,226,160,175,190,255,246, 1,100,223,252, 11, 4,184, 80,189, -171,102,242, 43,248,114,206,140, 73, 31,171,212, 21, 43,215,254, 88,183,219,164,117,155, 23,208,186,205, 11,152, 50,245, 51,135, -208,176, 16, 95, 0,216,183, 15,108,152, 95,194,225,185, 11,230,191,188, 96,238,124,168,180, 6, 84, 47,171,115, 63, 41,225,104, - 90, 58,140,252,240,244, 63,204,101,152,171,248,244,211, 22,250,138, 10,183, 46, 51,103,186, 10,151, 45,163,171, 95,160,159,180, - 96, 61,178, 94, 53,128,243,196,217,179, 71, 63,253,228, 19,197,242,101,203,250, 45,249,230, 27,171,150, 45, 91, 34, 63, 63, 31, - 33, 33, 33,144,203,229,136,137,137,193,169,227,199, 53,149, 58,221, 28, 79, 79,207,181,121,121,121,181,114,206, 7,174, 10,231, -204,105,110,212,104, 60,150,111,222,252,160, 87,159, 62, 5,155, 54,109,106,210,191,127,127, 90,171,213,162,162,162, 2, 21, 21, - 21, 48, 24, 12, 16,139,197, 80, 42, 20, 92,174, 66,113, 55, 59, 59,123, 83,157,229,252,232,163, 22,218,210, 82,183, 46, 51,103, -186,154, 75, 74,100, 31,103,102,230,210, 91,183,126, 51,105,226,196, 79,166,127,244,145,180, 73,147, 38,148,193, 96,120, 36,180, -204,102, 51,172,172,172,204, 12,195,184, 0,208, 90,194, 41, 59,122,148, 41, 41, 41,129,179,179,243,163,180, 75, 52, 77, 67, 38, -147,193,201,201, 9,149,149,149, 32,132,240, 9,112, 27,226,145,121,218, 63,130,131,131,111, 8,133,194, 38, 53, 77,132,181,173, -109, 87,243, 59,195, 48,185,241,241,241,145, 79, 40,220, 90, 77,159,114,185, 60,128,227,184,175, 59,117,234,244,202, 59,239,188, - 67, 93,184,112, 1,103,207,158, 37, 10,133, 98, 31, 77,211,115, 20, 10, 69, 90, 29,111, 54,181,114, 58, 57, 57,217,217,217,217, -125,104, 99, 99,211,167, 58, 21,131, 76, 38,187,167,209,104,206,168,213,234,213,117,100,111,127, 42,167,159,159,159, 61,199,113, - 31,216,216,216,244, 45, 46, 46,110, 11, 0,174,174,174,183, 53, 26,205,105,154,166,215,212,177,128,244, 83, 57,189,188,188,172, -108,109,109, 23, 57, 59, 59,191,241,206, 59,239,184, 92,184,112, 33,239,246,237,219, 98,149, 74,181,147, 97,152,186, 22,123,254, - 3,103,203,150, 45, 31, 91,139,240,121,182, 17, 0,180,110,221,250,200,224,193,131, 7,190,241,198, 27, 48,155,205,248,233,167, -159,112,234,212,169,163,169,169,169,131,234,121,251,124,140,211,195,195,195, 85, 46,151, 71,143, 30, 61,186,233,208,161, 67,173, - 29, 28, 28, 32, 16, 8,160,209,104,144,150,150,134,123,247,238,145, 83,167, 78, 85, 38, 36, 36,228,234,116,186, 30, 5, 5, 5, -197,150, 94,207,103,124, 75,126,140, 83, 40, 20,118,247,241,241,217, 61,111,222, 60,187,190,125,251, 90,185,184,184, 64, 40, 20, -130, 97, 24, 20, 20, 20, 32, 46, 46, 14,199,142, 29,211,252,242,203, 47,154,146,146,146,215, 80, 99,212,253, 43,203,249,188, 57, -171, 51,185, 63,214,183, 66, 91, 38, 36,101, 96,241, 99,219,252,240, 81, 66,124, 66,171,154,150,171, 26,153,220, 45, 42,103, 84, - 23,199,168, 87,134,182,239, 3, 0,251, 15, 94, 63, 83,207, 98,207, 79,150,243,139,132,248,164, 39, 22,155, 14,185,159,152,142, -133,141,174,187, 31,230,198,197, 37, 60,198, 25, 30, 30,122, 63, 49,227,233,217,233,159, 52,244,214,122,111, 86,199,139, 61,190, -103,118, 98,230,255, 92,160, 45,155, 97,208,144, 87,134, 13,252,108,214,108,124,189,100, 49, 14,237, 63,112, 52, 49,243,209,114, - 62,255,200,190,244, 39,114, 82, 95, 9,133, 47, 88,123,121,117,219,229,234, 58,251,228,233,211,182,213,241,181,213, 49,146, 79, - 78,184,138,136,136, 40,188,115,231,142,135, 37,156,131,190,251,206,164,183,179,147, 46,249,233,167,238, 90,163,177,251,199, 31, -127, 44,188,113,227, 6,118,239,220,201,232,114,114,118,228,179,236, 7, 79,241,126,252,161,238, 95,137, 68, 29,101, 46, 46, 61, - 90,204,158, 45, 93,178,103,207, 56,121,147, 38, 30,131, 6, 15, 22, 11,133, 66,104, 52, 26, 40,149, 74, 92,142,137,209,103,101, -103,199,233,245,250, 97,185,185,185,121,150,214,125,208,119,223,153, 28, 3, 2, 96,235,225,193, 93,186,124,217,113,230,188,121, -147, 60,188,188, 28,186,116,237, 42,178,182,182, 70, 89, 89, 25,178,179,179,113,233,210,165,194,180,180, 52,111, 0,172, 37,156, -191,221,187,215,250,220,213,171, 35, 62,253,244, 83, 73, 72, 72, 8,236,236,236,160, 82,169,144,152,152,136,203,151, 47, 27,246, -236,217, 83,161,209,104, 38,229,230,230,254,246, 39,182,251,127, 67, 96,253, 85, 55,158,135,135, 71, 36, 77,211, 95, 84,185,163, - 22,214,183,166,223,191,233,161,227,233,233,233,235,228,228,180, 94,167,211, 17,131,193, 48, 49, 63, 63, 63,251,111, 88, 78, 97, -100,100,228,143,133,133,133,157, 8, 33,112,112,112,184, 18, 31, 31,255, 30,234,246,197, 63,141, 83,224,233,233,217,201,198,198, -166,163,141,141, 77,119,147,201,212,178, 42, 14, 47, 81,171,213, 94, 48,155,205, 87,243,243,243,175, 84, 61, 16,254, 63,235, 46, - 0,208,215,219,219,251,109,142,227, 2,105,154,118,172,114,149,150, 19, 66, 82,202,202,202, 54, 2, 56,253, 55, 40,231,115,227, - 12,245,195, 48, 66, 33,228,177,135, 3,135,236, 39,131,215,171,131,225, 31,219,143, 32, 41, 33, 3, 7, 26, 80, 78,122,104,111, -183,229,192,195,153,134,168, 59,112,246,113, 49,100,129,104,105,176,192,106,138,177,181,114,102, 97,187,133,124,220,179,180, 81, -104, 83,116, 7,133, 78, 28,133,171, 73, 25, 56,247,111,124,214, 61, 79,206,175, 1,231, 95,130,130,174,208, 66,161, 39, 69, 81, - 52, 0, 80, 52,205,113, 0, 11,154,102,106,186, 5,159,120,161,172,147,211, 4,180, 18, 75,165, 77, 88,134,241, 40, 17,139,237, - 46,219,216,180, 51, 0,149,158, 44,251,197,217,210,210,251, 13, 45,231,124,192, 9, 64,168, 80, 42,245,189,108,109, 61,184,212, -201,169, 93, 25,195,120, 0,224,164, 82,105,124,165, 86,187, 41, 39, 39,103, 99, 45,158,138,122,203, 41,146, 74,125, 88,134,241, -160, 0, 66, 11,133,133, 39,165, 82,159, 34, 55,183, 55,181, 58, 93, 83,169, 84,106, 6,160, 50,153, 76,163,115,114,114,206, 54, -132, 51, 91, 32, 8,189,107,103,215,149,181,183,119, 49, 1, 54, 38,142, 51,153,204,230, 28,131,193,112, 79, 32, 16,172, 84, 40, - 20,169,127,114,187,243,104,224, 77,194,115,242,156, 60, 39,207,201,115,242,156, 60,231,159,204,233,238,238,110,237,233,233,233, - 91,245,146,248, 79,172,251,191, 10, 66,254, 18,240,224,193,131, 7, 15, 30,255,124, 20, 22, 22,106, 81, 75,204, 21,143,255, 31, -212, 53,251,165, 33,166,191,198, 40,217, 56,158,147,231,228, 57,121, 78,158,147,231,228, 57,255,115,156,245,113,243,174,199, 63, - 73,120,241,156, 60, 39,207,201,115,242,156, 60, 39,207,249,223,227,252, 87,129,230, 47,193, 83,225, 81,245,121,222,251,242,248, -119,247,133, 39, 33,175,250, 52,100,127, 47,254,146,243,224,193,131,199, 63, 27,255, 31, 49, 88,213, 3, 85,193,115,218,239,121, - 31, 11, 0,139, 41, 10, 51, 0,128, 16, 44, 5, 48,251, 89,246, 37, 79, 89,209,253, 73,132,133,133,185, 82, 20,213,219,193,193, -161,149, 90,173,142, 35,132,156,190,119,239, 94, 9,101,225,250, 79, 62, 62, 62,126, 50,153,108, 28, 69, 81, 45,171,206,155,168, -215,235,183,230,228,228,100, 60,135,118,163, 0,188, 43,149, 74, 95,117,116,116, 12, 44, 43, 43, 75, 49, 26,141,191, 0, 88,135, - 70,100,156,246,242,242, 10, 2, 48,150,227, 56, 33, 77,211,187,242,242,242,238, 88,122,172,123,216,144,189, 4,104, 1,128,230, - 40,110, 4, 77,232,125, 0, 56, 10,120, 80, 24,127,232,213,231,220, 95, 27,210, 23, 30,127,123,161,233, 37,132,112,159, 2, 0, - 69,209,203, 88,150,253,172,174,253, 5, 2,193, 10,194,113, 31,128, 2,161, 40,122, 25,199,113,179,248, 71, 20, 15, 30, 60,120, -252, 7, 32,151,203, 7,120,121,121,237,240,242,242,218, 33,151,203, 7, 88,112, 72,120, 45,131, 21, 75, 81, 96,129,199,243,235, - 52, 96,191,250,204,146, 53,143, 93,110, 97,213,106,114,122, 80, 20, 88, 82, 5,138, 2,231,238,238,190,222,219,219,123,245,147, - 31,119,119,247,245, 20, 5,174,198,190,108, 13,113, 23, 94, 83, 96,213,247,137,136,136,112,121,235,173,183,214, 40, 20,138,117, - 38,147,105,125,118,118,246,186,145, 35, 71,174, 9, 14, 14,246,180,164,238,254,254,254, 67,135, 12,125, 37,250, 98,236,141,251, -201, 41, 89,202,132,251,105,153, 39,207, 92,186,218,111, 64,212, 25,127,127,255,161, 13,104, 35, 10,192, 68,161, 80,120,222,214, -214, 54, 87, 40, 20,158, 7, 48, 89, 32, 16,252,182,120,241,226,204,248,248,248,130,152,152,152,242,232,232,104,197,132, 9, 19, - 82, 40,138, 58,140, 63, 90, 66,195,235,179,226,120,121,121, 45,200,201,201,185,145,151,151,119,179, 73,147, 38, 63, 60,193, 81, -155,213,231, 17,167, 91,216,144,187,133, 21, 38, 82, 88, 97, 34,110, 97, 67, 72,141,239,119, 27,216,165,235,235, 75,127,232, 11, - 54, 54, 54,193, 79, 8,121,143,167,112,254,225, 88,103,103,103,111, 66, 8,221,188,121,243, 14,114,185,252,123,185, 92,254,125, -243,230,205, 59, 16, 66,104,103,103,103,111,153, 84, 90,111, 95,122,142,224, 57,121, 78,158,147,231,252,187,113,254,119, 45, 88, -132,144, 55, 83, 82, 82,172, 57,142, 67,112,112,240, 24, 0,199, 27, 98, 85,162, 40,204,224,184,135,214, 28,154,166,102,246,236, -217, 43,194,202,202,234,177,140,197, 58,157, 78,114,254,252,185,222, 28, 71,168,170,253,102, 16,130, 53, 22, 90,163, 60, 40, 10, - 51,140, 70, 3, 45, 18, 73, 32, 16,208, 31,135,135,183,138, 44, 46, 46, 62,203,178,236, 79,181, 36,175,172,223,108, 67, 81,216, -180,105, 83, 75, 15, 15,143, 63,172,161, 82, 80, 80, 32, 30, 60,120, 80,131,248,222,108,213, 74,166, 79, 75,235, 74,139, 68,190, - 38,179,217, 21, 0, 68, 34, 81,137,204,214,214,231,243, 57,115,172,109,108,108,184,146,146, 18,168, 84, 42,106,202,148, 41,178, - 41, 83,166,244, 5,176,173, 46,206, 38, 77,154,248,135,183,110, 59,109,235,150, 45, 29, 43, 74, 75,245, 27, 87,174,189,101, 16, - 74,181, 77, 91, 6,137,191,152,247,149,195,130,185,179, 39,154, 76,166,184,220,220,220,244,250,140, 46, 0, 14,124,248,225,135, - 97,131, 6, 13,146,168,213,106,153, 86,171,109,182, 99,199,142,207,219,183,111,111, 27, 17, 17, 33,217,189,123, 55, 85, 94, 94, - 14, 66,136,117, 72, 72, 8, 25, 57,114,164,126,239,222,189, 83, 0,124,219, 16, 11, 16,203,178,162,234, 76,233, 12,195, 72,170, -250,162,201, 18,139, 17, 5, 60, 8,235, 50, 18,160, 16, 24, 31,243,139, 44,172,235, 72, 61, 8, 82, 40,224, 65,213,139,192, 59, - 28,199,249, 61,197,170,148,161, 80, 40, 54, 52,230,102, 25, 56,112, 16, 0,172,191,121,243,230,197,162,162,162, 38, 28,199,142, -182,212,178, 69, 81, 20, 37, 20, 10,199, 2, 88,162,211,233, 38,156, 61,123,182, 45, 0,244,238,221, 91, 12,224, 6, 33,164, 19, -254,252,188,116, 60,120,240,224,193,227,111, 42,176,196, 0,112,241,226, 69, 16, 66, 36,141, 56, 31, 85, 83,184,124,240,193, 7, -240,242,122, 60,220, 36, 47, 47, 15,209,209,231,159,165, 78,143, 13, 82,139, 22, 45,114, 40, 41, 41,121,121,211,166, 77,253, 0, -124, 94, 80, 80, 16, 93,207,241, 5,132, 96, 41, 77, 83, 51, 41,138,130, 68, 34,205,152, 56,113,226,141,170,250, 7, 28, 62,124, -216,122,240,224,193, 90,138,162,210, 0, 64, 34,145,186, 11, 4,180, 31, 33,164,122,160,125,170, 16,124,197,214, 54,152, 16, 50, -120,210,138, 21,108,187,168, 40,161,189,187,187, 0, 52,141,162,236,108,151,245, 63,252,208,233,254,169, 83, 82,207,144,144,108, -163, 68, 82,158,156,156, 12, 47, 47, 47,136,197,226,122,223, 18,172,173,173, 39,124, 56,253, 19,183,138,210, 50,157, 89,173, 54, -217,114, 44, 99, 47, 19, 81,170,162,146,242,140, 28,123,237,132,201,211,132,115,103,125, 52, 1,192,103,245, 80, 77,153, 62,125, -122,203, 14, 29, 58,200,247,236,217, 67, 85, 84, 84, 64, 40, 20,218,182,109,219, 22,145,145,145,236,217,179,103, 41,127,127,127, -132,135,135, 35, 38, 38, 6,151, 47, 95,166, 34, 34, 34,172, 15, 28, 56, 48,198,108, 54,127, 91,159,168, 22, 8,232, 89, 35, 70, -140, 28, 96,109,109,109,214,233,116,120,231,157,119,160,209,104,208,178,101,203,214, 61,122,244,136, 53, 24, 12,162, 67,135, 14, -134,179, 44,135,186,196,117,181, 27,176,202, 98,213, 10, 4, 41, 69,241,135, 90, 87,255,159,227, 56,191,251,247,239,135,150,151, -151,131,227,184, 71,107, 50, 2, 64,183,110,221, 26,210,151, 10, 8,193,210,193,131, 7,205, 4, 40,244,234,213,171,100,218,180, -105,108, 98, 98, 98,143,225,195,135,189,240,224, 65, 74, 93, 47, 1, 5, 20, 69, 47,163,105,106, 6, 69, 81,212,184,113,227, 11, -108,109,109,135,249,248,248,220,167, 40, 74, 40, 22,139,171,239, 3, 65,203,150, 45,221,194,195,195, 39, 59, 57, 57, 21, 10,104, -218,157,128, 16,138,162,151, 17,194, 21,240,143, 40, 30, 60,120,240,248, 15, 8, 44,138,162,138,111,223,190,237,165,215,235, 65, - 81,148, 37,214,160,184, 39, 6,156, 31,105,154,122,143,162, 40,132,135,183, 74, 95,189,122,117,109,235,109, 25,195,195, 91,165, - 11, 4,180, 63, 33, 4, 20, 69,175,125, 98,160,137,171,111, 64,148, 72,164, 51, 0,192,203,203,187,224,200,145, 35,230, 17, 35, - 70, 96,217,178,101,146, 89,179,102,125, 69,211,244,168,188,188,188,220, 58,202, 9, 0,179,221,220,220,157, 55,109,218,212,114, -226,196,137, 55,148, 74,229,135, 0,224,237,237,189, 26, 64, 43,138,162,210,106,108,195,186,117,235, 34, 39, 76,152,144, 88, 88, - 88, 56,251,105,156,175,216,217, 5,186,120,123, 15, 93, 30, 19, 67,132, 12, 67, 85,220,184, 81,158,155,159,111, 50,178, 44,125, - 60, 61,189,227,168,241,227,197, 30, 94, 94,228,208,186,117, 77,181, 34, 17, 97,101,178,138,248,248,120, 98, 50,153,238,213, 87, -119,138,162, 66,156, 28,157,108, 54,174, 88,123,195, 77, 42,160, 92,125,188, 41,177,189,163,144,182,181,147, 18,129, 64,215,212, -199,219,142,162,168,144,250,218, 72, 44, 22,143,233,215,175,159,245,238,221,187,169,240,240,112, 56, 58, 58,226,226,197,139,184, -125,251, 54,202,202,202,104,134, 97,208,190,125,123, 44, 93,186, 20, 62, 62, 62,168,168,168, 64,102,102,166,171, 88, 44,118, 51, -155,205, 79,187,158,143, 9,222, 25, 51,102,192,221,221, 29, 44,203, 34, 47, 47, 15,149,149,149,176,177,177,129,131,131, 3,148, - 74, 37, 14, 29, 58,104, 73, 95,178, 8, 47,190,248,162, 22, 64,230,147, 22,172,134,112,202,229,242, 83,133,133, 69, 93,123,246, -236,137,242,242,114,211,188,121,243,208,182,109, 91,180,104, 17, 84,111, 57, 89,150,253,204,213,213,117,179,139,139,203,138,105, -211,166,121,186,184,184,192, 96, 48,204, 41, 41, 41,193,140, 25, 51, 0, 0,145,145,145,173, 8, 33, 71, 39, 76,152, 0, 63, 63, - 63, 69,105,105,105,246,253,251,247, 39, 22, 22, 22,198,213, 88,226,232,207,152,178,204,115,242,156, 60, 39,207,249,119,227,252, - 87, 10, 44, 82, 99, 32, 36,120,138,171,130, 16, 82, 38,151,203,189,172,172,172, 64, 8, 41,107,232,201, 56,142,155,226,226,226, - 82, 56,123,246,236, 46, 65, 65, 65,198, 41, 83,166,196,101,102,102,206,169,185, 79,179,102,205, 22,125,255,253,247, 72, 78, 78, -206, 92,188,120,113, 76, 73, 73,201,194, 6,158,102, 22, 33, 88, 13, 0, 74,165,178,248,240,225,195, 29, 46, 92,184, 48,107,245, -234,213, 94, 83,166, 76,145, 76,155, 54,109,178, 5,150, 28, 8,133, 66, 93,109,110,193,218,224,225,225, 97, 18, 10,133, 79, 91, - 63, 16, 19,219,181,147, 18,142, 27,250,205,197,139, 28,151,155,171, 63,182,101, 11,150, 93,190, 60,201,193,213,213,215,205,205, -141,248, 53,105, 82,100,197, 48, 5,170,162, 34, 58,162, 95, 63,209,201,109,219,154, 74,253,252, 18,246,237,219, 87,201,113,220, - 41, 11,138, 80,105, 52,155, 13, 54, 62,222,230,193, 67,250,181,186,119,237,118,178,149,179, 51,221,170,125,219,208,164,148,204, -155, 20, 96, 4,234, 95, 60,214,193,193, 33,168,184,184, 24, 42,149, 10,110,110,110, 88,179,102, 13, 60, 60, 60,160,213,106, 17, - 31, 31, 79,154, 52,105, 66, 93,186,116, 9,222,222,222, 40, 42, 42,130,209,104,132, 86,171, 45, 52, 26,141, 79,171,123, 1, 77, - 11, 54,210, 52,245, 14, 69, 81, 8, 12,108, 81,240,237,183,223,154, 9, 33, 8, 9, 9,193,176, 97,195,112,241,226, 69,196,199, -199, 87, 91,153,204,126,126,254, 5, 52, 77,185, 63,236,110,117, 91, 4,235,233,107, 0,144,153,151,151, 55,187, 49,199,203,229, -114, 25,203,178,147, 2, 3, 3, 7,189,254,250,235, 38,177, 88, 12,173, 86, 91,125, 45, 76,253,251,247, 47, 25, 60,120,144,203, -209,163, 71,235, 44,103,113,113,113, 90,203,150, 45,223,249,228,147, 79,182,175, 93,187,214,241,179,207, 62,123,180, 8, 55,203, -178,224, 56,238,145,149,237,192,129, 3,200,200,200,248,186,176,176,144,127,112,241,224,193,227,191, 8,139,180,200, 63,209,130, -245,151, 84, 70, 32, 16,172, 59,117,234, 84,219,110,221,186, 9,123,247,238, 29,126,226,196,137,112,133, 66, 17, 87, 53,168,133, -247,238,221, 59,220,221,221, 29,107,214,172,209, 10, 4,130,117,141, 60,205,163,193, 46, 47, 47, 47,150,162,168, 47,126,253,245, -215, 77, 19, 39, 78,132,135,135, 71, 91,165, 82,249,151, 94,228,178,228,228,206,227, 22, 44,224,100,128,224,232,246,237,228,171, -152,152,111,246,254,242,139, 56, 32, 32, 0,132, 16,100,102,102,218,255,180,105,147,243,168,190,125,227,243, 53, 26, 42, 53, 63, -159, 77, 56,114,132, 46,161,233,239,210,210,210,138,107, 46,214, 92, 27, 76, 38,211,245,236,172,172,160,206, 93, 59,123, 93,188, -145,112,107,248,208, 65, 61,105, 33, 77,103,100,229, 93,119,115,113,182,185,124, 37, 70,101, 50,153,174,215, 87, 78,141, 70,147, -193, 48,140, 51, 33,196, 45, 58, 58, 26,174,174,174, 40, 43, 43,131,217,108,134,201,100, 50,106,181, 90, 89, 82, 82, 18, 12, 6, - 3, 12, 6, 3,236,237,237,113,239,222,189, 2,134, 97,206, 61,141,147,101,217,119, 1, 44, 32,132, 32, 57, 57, 89, 81,229,250, -108,225,232,232,184,147, 97, 24, 40,149, 74, 68, 71, 71,143,206,203,203, 75,174,169,111,170,254, 42, 26,125,151, 18,210,232,246, -114,115,115, 11, 23,139,197,179,167, 78,157,234, 17, 22, 22, 6,189, 94, 15, 0,176,181,181,133, 86,171,133,189,189, 61, 58,117, -234,148,184,112,225, 66, 19, 33, 24, 7, 32,191, 46,190,196,196,196,162,160,160,160,169, 19, 39, 78,252, 50, 40, 40,200,159, 16, -130,192,192, 64,244,235,215, 15,199,142, 29,195,131, 7, 15,160,209,104,216,107,215,174,237,206,201,201, 57,194, 63, 99,121,240, -224,193,139,172,127,143, 5, 11, 85, 21, 34,127,246, 9, 11, 11, 11,139,146,146,146, 78,220,188,121,115,208,171,175,190,138,232, -232,232,113, 0, 62, 2, 0,169, 84, 58,238,213, 87, 95,197,205,155, 55,145,148,148,116,162,176,176,176,232,121,156,147,162, 40, -173,209,248,208,128, 35,147,201,172, 26, 56, 80, 7, 84,185, 6, 65, 8, 9,120,218,182,122,172, 97,190, 47, 14, 27, 70, 87,222, -190, 93,190,224,228,201, 15,119,253,250,171,216,199,199, 7,106,181, 26, 2,129, 0,246,246,246, 84,191,168, 40,167,141,187,118, -121,250,216,217, 93,158, 60,126,252,253,175, 79,159,214, 94,174,168,176, 40,189,130, 94,175,223,180,104,225, 23, 61,183,239,216, - 27, 18, 28, 18,232,116,236,212,249, 91, 46, 46,246, 86,126,126, 1,210,138,242,114,195,247,171,151, 9, 53, 26,205,230,250,120, -116, 58,221,129,179,103,207, 14,245,241,241,113,139,139,139,131,209,104, 4,203,178,232,211,167, 15, 8, 33, 82, 0,156, 80, 40, - 68, 98, 98, 34, 76, 38, 83,225,131, 7, 15, 20,169,169,169, 82, 0, 75,234,161,126, 76, 40,209, 52, 61,106,208,160, 65, 96, 24, - 6,253,250,245,195,193,131, 7, 95, 5,240,229,211,246,127, 6, 11, 86, 51, 47, 47,175,197, 85,231,180, 40,184,221,211,211,179, - 75,243,230,205,191, 92,190,124, 41,229,225,225, 5,150,101, 96, 54,155, 80, 84, 84, 2,181, 90,141,208,208, 80,248,250,250, 98, -201,146, 37, 0,112,176, 62,113, 85,141,228,228,228, 20, 0,175,141, 31, 63, 94,124,241,226,197, 72,189, 94,191,170,111,223,190, -184,117,235, 22,238,220,185,243,134,187,187,123,161,143,143, 15, 35,151,203,223,161, 40,202, 94, 38,147,237,122, 30,215,129, 7, - 15, 30, 60,254, 97,248, 75,180,200, 95, 45,176,234,172,152,187,187,187,117, 89, 73,225, 7,126,126,126, 50, 0,144,138, 5,189, - 92, 92, 92,190, 46, 41, 41,169,108,232, 73,181, 90,237,222, 29, 59,118,188,180,114,229, 74,113, 84, 84, 84,243, 95,127,253,181, - 3, 0, 68, 69, 69, 53,183,179,179,195,142, 29, 59, 76, 90,173,118,239,243,170, 36,199,113,253,218,183,111,143,210,210, 82,100, -102,102,222,104,200,177,135, 15, 31,182, 6,208,170,190,109,117,193,104, 54,187,217,123,121, 9, 11, 46, 94, 52,233, 24,198, 55, - 40, 40, 8,106,181, 26, 18,137, 4, 6,131, 1, 25, 25, 25, 16,139,197,212,131,244,116,215, 89, 31,125,116,201, 42, 40,200,182, -122,134,161, 37,200,203,203,211, 1,152,246,213,162,175,118, 46, 95,182,204,189,180,164, 44, 89, 44,177,210, 91, 91, 73,157,103, -126,178,144, 20, 20, 20,124, 92,181, 70, 85,125, 88,178,115,231,206,254, 47,189,244,210, 93, 31, 31, 31,247,226,226, 98, 79,149, - 74, 69, 74, 75, 75,169,170,190, 65, 1,192,221,187,119,145,149,149,197,176, 44,123, 9,192, 2, 88,224,126,124,100,154,146,203, -157, 58,116,232,208,223,197,197,229,145, 43, 50, 34, 34,162, 63,128,239, 20, 10, 69,217,243,236,220,167, 78,157,178,230, 56, 46, - 20, 0,250,247,239,111,169, 24,127,115,212,168, 81,148,149,149, 13, 24,134,129, 84, 42,134, 84, 42,133,173,173, 61,156,157,157, -145,149,149,133, 94,189,122,113,233,233,233,135,172,173,173,183, 52,180, 76,231,207,159,127,185, 67,135, 14, 31, 77,158, 60, 25, -102,179, 25, 67,135, 14,133, 66,161, 88,158,145,145,177,199,211,211,115,244,156, 57,115, 92, 93, 92, 92, 48, 99,198, 12, 43, 0, -243,249,103, 45, 15, 30, 60,120,145,245,239, 16, 88, 79, 27, 20,219, 59, 57, 57, 77, 41, 44, 44,148, 85,187, 94, 40,138,146,181, -105,222,124,157, 88, 44,254, 49, 47, 47,239,114, 67, 78, 90, 94, 94,174, 74, 79, 79, 63, 20, 27, 27, 59,114,248,240,225, 56,125, -250,244, 88, 0, 24, 62,124, 56, 98, 99, 99,145,158,158,126,168,188,188, 92,245, 60, 42,232,237,237,253, 74,143, 30, 61,198,118, -232,208, 1,135, 15, 31, 6,203,178,231, 26,114,124,205, 25,131,181,205, 34,172,222,102, 9,151,228, 97,158, 35,176, 44, 11,129, - 64, 0,189, 94,143,188,188, 60,220,191,127, 31,246,246,246, 40, 43, 45,165,236,157,157, 77, 6,131,129,109,104, 61,243,242,242, -114,111,223,248, 61, 85,167,215,139,156, 92,156,181,118, 54, 18,162, 82,171,233,187,119,111,229, 21, 22, 22,102, 90,170, 5, 9, - 33,221, 79,158, 60, 57, 87, 32, 16,188, 42,151,203, 49,114,228, 72,170,119,239,222,144, 72, 36,208,233,116, 40, 47, 47,175,190, -142,254, 0,224,234,234,234, 97,109,109,189,159,166,233,130,140,140,140, 9,245,157,128,101,217,225, 67,134, 12, 17,154,205,102, - 44, 92,184, 16,243,231,207,199,128, 1, 3,132,215,175, 95, 31, 14, 96,195,243,234,216,132, 16,188,244,210, 75,143,130,220,159, - 8,110,175, 21,221,187,119, 23,166,167,167, 7,200,229,114,100,102,102,194,218,218, 26, 30, 30, 30,112,116,116,132,171,171, 43, - 86,174, 92,137, 85,171, 86,221, 17, 8, 4,107,243,242,242, 82, 27, 90, 38, 95, 95,223,119,198,140, 25,243,206,200,145, 35,161, - 86,171, 17, 27, 27,139,206,157, 59, 99,241,226,197,158, 49, 49, 49,211,219,183,111, 15,161, 80,136, 11, 23, 46,128,101,217, 28, -254, 25,203,131, 7, 15, 30,255,124,129, 69, 61,161, 28, 1, 0,142,142,142,246, 50,153,108, 98, 84, 84, 84,151,161, 67,135,162, - 95,191,126,143, 29,188,102,205, 26,219,232,232,232,153,223,126,251,109,119, 0,107,149, 74,101,105, 3,172, 74, 7,118,238,220, - 25,245,226,139, 47, 90,247,236,217, 51, 0, 0,164, 82,169,113,231,206,157, 90,142,227, 14, 52,162, 46,143,101,111,151,203,229, -237, 5, 2,193,184, 1, 3, 6,180,127,235,173,183, 16, 31, 31,143, 29, 59,118, 36, 6, 5, 5,157, 46, 40,176, 60,110,250,137, - 25,131,181,205, 34, 92, 93,159, 53, 75, 34, 18, 21,169,242,242, 92,132, 94, 94, 18, 27,137, 36,231,250,245,235, 1,205,155, 55, -167,210,211,211,145,156,156, 12,147,201,132,219,183,111, 19, 26,200, 21,216,219,211, 89,119,239, 82, 98,145,168,193, 57,187,172, -196, 92,187,207,103,188, 27,168,215,235, 66, 43, 42, 42, 24,161, 80, 40,148,138,216,244, 6,210, 24,124,124,124,134,176, 44,235, -106, 52, 26,205, 30, 30, 30,162, 51,103,206, 64, 34,145,224,225,236,207,112, 72, 36, 18,163, 92, 46, 87, 3,128,173,173, 45,189, -120,241, 98,209,244,233,211,227,235, 35,142,136,136, 16, 73, 36,146, 81, 65, 65, 65,184,114,229, 10, 18, 18, 18,210,174, 92,185, - 18,208,174, 93, 59,248,248,248,140,242,242,242,218,122,235,214, 45,243,243, 18, 88,104, 96,144,251,133, 11, 23, 56,111,111,111, - 80, 20, 5,129, 64, 0,173, 86,139,244,244,116,116,234,212, 9,155, 55,111,198,234,213,171,127,206,207,207,223,210,152,242,140, - 31, 63, 94,220,186,117,235, 55, 71,142, 28,137,180,180, 52, 44, 89,178,164, 36, 63, 63,255,252,201,147, 39,135, 79,158, 60, 89, -208,185,115,103, 20, 23, 23, 99,235,214,173,204,173, 91,183,182, 68, 69, 69,109, 95,191,126, 61,255,132,226,193,131,199,127,205, -114, 85,219,247,127,151, 5,203,219,219,123,160, 76, 38,123,123,212,168, 81,130,224,224, 96, 20, 20, 20,192,206, 70,106,164, 40, - 74, 2, 0,118, 54, 50,163,217,108,198,228,201,147,209,182,109,219, 14, 51,103,206,108,207,178,236,207, 5, 5, 5,251, 45, 57, -113, 97, 97,161,150,166,233,125,239,189,247,222,146,219,183,111,249, 3,192,181,107,215,210,149, 74,229, 44, 11,221, 89, 53, 81, -157,156,146,146,201,172,238, 6, 6, 6,150, 68, 70, 70, 58, 13, 27, 54, 12,174,174,174,184,117,235, 22, 22, 47, 94, 28,175,215, -235,167, 92,184,112,129,249,171, 47, 50,195, 48,217, 87,143, 28,113,122,105,244,104,167,133,163, 70,125,255,214,248,241, 75,191, - 94,188, 88, 44,151,203, 41,123,123,123,220,185,115,135,108,220,176,193,180,103,217,178,239, 5, 86, 86,226,139, 7, 15, 74, 88, -179, 57,165, 33,231,144,203,229,221,219,119,236, 16,190,124,229,183,208,105, 43,113, 45,246, 8,202, 74,139,177,110,195,175,173, -228,114,121,119,133, 66,113,161, 1,229, 13,216,183,111,223, 67,113, 40,145, 96,193,130, 5,240,246,246,134,189,189, 61, 42, 43, - 43,241,238,187,239, 74, 62,248,224, 3, 0, 64, 66, 66, 2,108,109,109, 45,181,178,245,156, 56,113,162,189,217,108,198,241,227, -199, 13, 44,203, 78, 59,125,250,244,129, 54,109,218, 72,187,117,235,102,191,125,251,246, 94, 0, 78,254, 63,222, 15, 28, 33, 36, -251,212,169, 83,190, 35, 71,142,132, 88, 44, 70, 89, 89, 25,236,236,236,176,124,249,114, 98, 50,153,246, 55,150, 88,161, 80, 72, - 92, 93, 93, 37, 44,203, 98,223,190,125, 80,169, 84, 19,114,115,115,243,155, 55,111,126, 96,230,204,153, 31, 7, 6, 6,250,165, -164,164,100,177, 44,187, 76,161, 80,100, 0, 0, 47,176,120,240,224,193,227, 95, 40,176, 0,188,113,226,196, 9, 1,199,113, 88, -191,126, 61,110,222,188, 73,108,237,157, 63,180,115,160,182,217,219,219,179,229,229,229,111, 44, 93,186,116,232,220,185,115,169, -174, 93,187, 34, 54, 54,150,242,247,247, 31, 14,160,230, 32, 20,142, 58,114,101, 84, 84, 84, 92, 47, 40,200,247,175,145,181,221, - 95, 42,149,213, 55,219,237, 73,206, 39,147, 89,182, 89,180,104, 81,156,187,187,187, 57, 46, 46, 14,107,215,174,229,110,222,188, -121, 20,192,242,194,194, 66,157,133,156,207, 3,143, 56,157,130,130, 46,111,158, 61, 59,226,197,151, 95, 38,189, 94,125,149, 91, - 33,145,124,242,197,188,121,211, 74, 85, 42, 31,142,227,224,226,224,144,253,243,162, 69, 43, 59,119,237,170,187,247,251,239, 54, - 49,191,253,102,229,209,172,217,165,134,148, 83,161, 80, 92,136,142,190,132,173, 27, 86,194,100, 50, 32, 79,145, 5, 0, 40, 46, -169, 64, 61,226,234, 15,156, 52, 77,151,143, 27, 55,206,218,104, 52, 82,163, 70,141, 18, 21, 22, 22,162,121,243,230, 0, 0,149, - 74,133,163, 71,143, 34, 36,228, 97, 90,173,123,247,238, 61,250, 94, 95, 57,173,173,173, 95,237,210,165, 11, 50, 51, 51, 17, 31, - 31,127,172,176,176,176, 40, 33, 33,225, 88, 86, 86,214,240,200,200, 72, 28, 56,112, 96,100, 29, 2,171, 65,109, 84,157, 88,180, -129,125, 9, 12,195,204, 60,112,224,192,196,216,216,216,238, 31,125,244, 17,213,187,119,111, 0,128, 70,163, 97, 45,140, 55,124, -106, 57,171,221,195, 28,199,193,199,199, 71, 3, 0,169,169,169, 25, 0,222,111, 44,231,243,232,159, 60, 39,207,201,115,242,156, -127, 19,206,255,140,192, 98, 56,142, 67,116,116, 52,126,253,245, 87,214,104, 52,206,206,207,207,191, 95, 53,152, 3,192,150,219, -183,111, 95, 26, 62,124,248,138,228,228,100, 65, 66, 66, 2, 8, 33, 13,138, 29,210,235,245,230, 39, 51, 16,232,245,250,103,118, - 17,109,222,188, 25,249,249,249,198,172,172,172,223, 76, 38,211,142,146,146,146,188,198,114, 61,143, 89,132,235,110,222, 52,188, - 98,103,119,112, 86,207,158,195, 23,158, 56, 33, 27, 48,126,188,177, 71,255,254, 95,195,104, 52,138, 68, 34, 14, 86, 86, 2,129, -149,149, 56,225,247,223,109,150, 79,154,228, 66,209,244,161, 31, 18, 18,116, 13,181, 96,245,232,209, 21,227,222,158, 14,157,174, - 18,191, 95, 57,130,242,210, 98,196, 94, 79,134,193,132, 6, 89,176,132, 66,161,175,217,108,150, 50, 12,163, 32,132,224,205, 55, -223, 4,203,178,208,235,245, 80,171,213, 40, 45, 45,213, 79,157, 58,149,174, 18, 77,120,233,165,151, 44,202,234, 31, 16, 16,224, - 43, 20, 10,113,242,228, 73, 8, 4,130,253, 15, 5,177, 96,255,217,179,103,135,143, 26, 53, 10,114,185, 60, 40, 45, 45,173,222, -224,198, 71,139, 61, 83, 8, 4, 0, 80, 8,116, 11, 27,114,183,122,177,103,154,166, 51,218,182,109,107, 81,220,213,147, 40, 42, - 42, 42,196,195,192,253, 95,102,204,152, 49,185, 67,135, 14,225, 95,126,249, 37, 0, 8,158,217, 60,198,113, 96, 24,230,153, 82, - 72,240,224,193,131, 7,143,127,184,192,162, 40,106,119,207,158, 61, 95, 35,132, 8,104,154,222, 81, 45,174,106, 34, 55, 55, 55, - 93, 46,151,175,247,243,243,123,189,202,242,177,171,129,231, 47, 32, 4,223,208, 52, 85,115,237,185,130, 70,112, 44,173,226,160, -132, 66,209,142,171, 87,175,126,166, 84, 42,243, 1,176,207,122,129,158,199, 44, 66, 0,216,175, 86,167,188, 98,107,123,104,114, -155, 54,131,135, 78,155, 70, 34,251,246,117,240,108,214,140, 97,204,102, 54,237,238, 93, 42,230,192, 1,113,204,111,191, 89, 9, - 40,234,240,126,141,230,126, 67,203,169, 80, 40, 46,156, 59,127,225,212,136,225, 81, 47, 5,248,121, 3, 0,210, 50,148, 40, 46, -173, 56,213, 16,113, 5, 0, 89, 89, 89, 6, 0, 6, 79, 79,207,225,123,247,238,221, 71, 81, 20, 85,115,185, 25, 0, 6,161, 80, -216, 2, 0,212,106,117,211, 3, 7, 14,236, 20, 10,133,185,245,241, 38, 36, 36,236,158, 55,111,222,232,244,244,244,223, 20, 10, - 69,106, 85,185, 83, 47, 93,186,180, 86,169, 84,142,206,202,202,218, 14, 11,102,142, 16,160, 69,124,204, 47,173, 0, 32,172,203, - 72,196, 15, 89,161,117, 0, 0, 32, 0, 73, 68, 65, 84,199,252, 34, 3,208, 42,172,203,200,234,107,241,204,193,242, 85,121,185, - 62,184,118,237,218,139,253,250,245, 27, 71, 8, 41,124, 22, 62,153, 76,102, 54, 24, 12, 12,203,178, 66,147,201, 68,100, 50,153, -153,127,252,240,224,193,131,199,191, 23,127,118, 16,153,165, 38,196,199, 2,212, 27,201,217, 16,142,122, 57,189,188,188,166, 80, - 20, 21, 96, 41, 1, 33, 36, 45, 47, 47,239,251,218, 56, 9,121,232,190, 4,158,190,216, 51, 49,155,179,100, 1, 1,151,126,190, -119, 79, 95,139,216,229, 26,114, 61, 3, 3, 3, 73, 74, 74,138,165,237, 91, 39,167, 92, 46,151, 9,133,194, 39, 45, 84,134, 42, - 17, 86,179, 31, 9, 0, 48, 13,108,247, 70,181,209, 35, 11, 22, 64,115, 20, 55,130, 38,244, 62, 0, 92,181, 5,235, 79,232,159, -141, 42,103,205,118, 7,128,128,128,128,247, 66, 66, 66, 70,223,189,123,119,111, 78, 78,206,154,122,111,206, 6,182,251,159,116, -111,242,156, 60, 39,207,201,115,254, 85,156,245,141,179,237, 1,184, 85,253,172,206,147,233,246,196,119, 35,128,154, 99, 86,245, -239, 34,138,162,174,215,224,120,180,221,130, 99, 1,160, 24,192, 93,138,162,140,248,155, 32,156,231,228, 57,121,206,255,161,123, -247,238, 66,254,122,242,156, 60, 39,207,201,115, 54, 92, 92, 17, 66, 6,226,161,151,131, 16, 66, 6, 86,255,126,242,123,245, 62, - 53,127, 87,253,197,147,251, 89,114, 44, 0, 50,107,214,172,217,132,144,158, 13, 41, 51, 13, 30, 60,120,252,101,248,255,152,197, -202,131, 7, 15, 30,255, 2,184, 81, 20,117,132, 16, 50,136, 16, 50,136,162,168, 35,117,136,177, 65, 53,255,214,133,218,120,170, -207, 81,243,247,146, 37, 75,190, 6,208,160,149, 96,132,117,168,208,134,152,254,194, 27,241,191, 56,158,147,231,228, 57,121, 78, -158,147,231,228, 57,255,115,156,207,235,248,103, 70,109, 98,173, 90,200,213,252, 61,107,214,172,207,208,128, 85, 75,254, 10,240, -230, 83,158,147,231,228, 57,121, 78,158,147,231,228, 57,159, 85, 8, 61,213,165, 87,151,187,240,201,239,150,184, 8,235,218,183, - 33,101, 22,130, 7, 15, 30, 60,120,240,224,193,227,239,141,162,154,214,166, 42, 11, 19, 59,107,214,172,207,170,183, 85, 89,153, - 12, 0,164, 79, 30,252,196,113,117,162, 33,251,242, 2,171, 17,104,211,156, 94,232,235,235, 30, 89,117,145, 65,170, 82, 20,112, - 85, 89, 4, 72,117, 50, 35,194,129,112, 4,202,188,242,155,247,210,241,197, 83,148,119,189,177,110, 93,187,122, 58, 11,116,149, -171, 88,142,237, 12, 0, 20,232,139, 34,145,227, 71,103,175, 41,202,107,204, 38,171, 19, 33, 1,104, 41, 19,226, 83,142, 67,107, -138, 2, 40, 10,119,245, 12,150, 37,165, 33,241, 57, 92, 18, 42,204, 31,239, 74,164,214,163, 28, 28,157, 2,203, 74,138, 31,152, - 76,134, 95, 18, 50,176, 14,141, 88,148, 51, 56, 0,109,193, 98, 38,203, 65, 36,164,177, 42, 41, 19, 49,124,175,227,193,131,199, - 95,100, 13,121,166,248,227,218,158,201,132, 16,234, 25, 57,249, 4,121,117, 95,159,235, 85,129,238,213,162,167, 8,192,189,197, -139, 23,151, 45, 94,188,184,230,182, 59, 0,218, 84,237, 87, 84,139, 80, 50, 86,253, 54,214,178,143,209,146,125,255, 20,129, 21, -218, 4,147, 65, 48, 31, 20, 8,128, 47, 19,114,177,182, 65,199, 55, 71, 31,153, 80,176, 17, 4, 2,189,153,253,152,176,184, 88, -235,133, 20,160,155, 76, 36, 88, 1, 10,156,158, 97, 39, 36,164,226,140,165,231, 8, 11, 68,127, 33, 69,111,231, 56, 34, 98, 57, -178, 13, 28,142,216,154,113,249,119, 5,244, 13, 41,171,175,175,123,228,193, 51,121, 47,157,223, 61, 13, 29,219, 6,130,112,102, -128, 48,176, 14,249, 20,103,127,126, 19, 29, 91,249, 62,220,198,153, 97, 27,177, 2, 3,186, 56,144,123,233,141, 91,159,186,107, - 87, 79,103, 43,142,187,187,118,211,118, 79,223,192, 23, 41,194, 25,144,114,251,248, 27, 31,204,152,211,179,119, 7,121,107, 0, -245,174,241,216, 58, 16,111,251,250, 6,127, 58,125,206, 74,218,219,187,137, 45,199, 24,153,188,156,132,118,223,173,156,183, 95, - 76,103,173,184,155,130,141,150,246,227, 80, 63, 76, 20,138, 36, 35,173,172,109, 2,181, 90,117, 10,107, 54,255, 66, 11,132,253, -151, 45, 93,221,182,123,207, 1,182,156, 33,159, 54, 51, 84,232,158,189,187,154,126,255,227,218,168,184, 52,246,101, 0, 92,131, - 42,205,226,195,123,135,222, 29, 33, 18, 10,168,144,129, 27,108, 0,166, 95,131, 57, 0,132,249, 33,140,212,159, 9, 29, 20,240, - 67,124, 6,226, 27,211, 62, 33,126,216, 68, 1, 65, 0,246, 81, 4,187, 19, 50, 81,200, 63,238,120,240,248,119, 65, 46,151,159, - 87, 40, 20, 61,159, 51,103, 71,133, 66,113,149,191,186,207, 79,100,213,178,249, 90, 45,219,174,255, 29,202,219, 80, 11,214, 87, -241, 41, 57, 78,224, 76, 8, 11, 10, 88, 8, 52, 76, 96,201,132,130,109,215,239, 22,120,130,152,176, 97,229,123,123,140,102,128, - 97, 76, 96, 25, 51, 88,198,252,240, 59,107, 6,199,232, 49,111, 85, 52,192,168, 17,217,182,197, 54,128,245,178,244, 28, 34,208, -219,111, 94, 62,229, 76, 49, 21,216,179,117,241,212, 44,101,229,212, 51,215,148,197,161, 34,221,236,132, 76,108,105,200, 32,126, -126,247, 7,216,177,255, 88,238,154, 13,123,147, 56, 16, 56,217, 74,131,199, 12,143,247,249,121,255,249,156,213,155,245, 73,132, - 35,112,180,147, 6,143,125, 57,197,247, 89, 26, 65,160,171, 92,245,227,134, 45,158,190, 77,155, 82,230,140,175, 0,179, 1, 62, -190, 81,130, 57,211,223,246,250,114,233, 15, 43, 1,140,173,211, 26,228,143,208,102, 1, 45, 63,222,182,231,138,175,166,178,208, -120,238,232,103,169, 20, 33,102, 87,215, 16,241,130,175,150, 91,125, 62,123,250, 71, 70, 54,247,234,253,116, 36,212, 83, 20,186, -165, 31, 14,125,253,245,178,214,189,251, 14,182,101,141, 69, 2,125,165, 58,104,227,150, 77,243, 67,194, 58, 88,119,137,104, 34, - 46,186, 60,137,210,170, 75, 97, 34, 86,210, 94,145,189,237,181, 99, 94, 53,111,250,121,215,148,132,116,124,219, 32,125,197,252, - 47,215,136,137,129, 12,128, 8,141, 8, 32, 36,192,251,183, 99,207, 79,100,202,174, 3,156,169, 74,244,154, 0,206, 12, 82,227, -239, 11,175,111, 1,128, 73,141,105, 31,154,194, 75,103,206, 92,247, 42, 40,200,107,191,106,213,215,179, 9,117,253, 56, 40,108, - 79, 76,199,133,198,136, 66, 30, 60,120,252, 61,225,237,237,205, 42,149, 74,193,243,228,148,203,229, 81, 10,133,226,216,179,112, -120,121,121,125, 10,224,237,170,159, 27,243,242,242,150, 61,107,185, 34, 35, 35,155, 16, 66, 60,171,132, 75,254,141, 27, 55,114, -249, 30,240,255, 43,176,100, 32, 28,112,121, 40, 64, 53,108,186, 98,213, 96, 40, 3, 37, 0,204,149, 24, 50,168, 15, 92, 93,188, - 0, 86, 3,176, 58,128,209, 2,236,195, 79,113, 81, 22,192,104,128,162,227, 96, 8,145, 54,184, 86,230, 10,160,240, 23,188,244, -162, 47, 28,237,100,248,224,181, 80,215,245, 7,147, 55,110, 60,120,191, 79, 66, 58, 70, 89, 84, 86, 66,208, 49, 34, 16,107, 54, -104,146, 14, 71, 23,245, 3,128,168,238, 46, 39, 58,182,106,234,179,122,179, 62,233,216,197,178,254, 0,208,191,179,253,241, 14, -225,158,190,220, 51, 44,127,194,114,108, 23,223,230, 17, 20,147,189, 20, 52, 93,134,202,202, 98,228,164,109,133,171, 71, 63,154, -225,184,110,245, 29,111, 37,196,172, 15, 62, 93, 34,212, 84, 22, 24, 9, 83,200,121,216, 22,139, 69,160, 4,156,230,146, 81,151, - 95, 94,249,225,251, 99,152,143,103,125, 61, 11,192,232,186,120, 66,253, 49,101,197,210,213,173, 58,119, 8,118,207,143,249,128, -170,172, 40,128,153, 88, 73, 95,238,222, 25, 78, 77, 67,185,130,219, 43, 40,169, 87, 31, 56,249, 5, 32,247,222, 14,100,221,253, -149,234,218, 97,184,116,219, 78,241, 24,192, 84,171,192, 10,244, 68,151,126, 47,117,216, 19,208,212,219,139, 16, 14, 28,199,129, - 16, 14,122, 35,139,217,223,167, 66,163, 99, 48,168,207, 11,157, 93, 28, 4, 6, 26, 0, 33, 28,114,148, 37,218,115, 87,146,122, -167, 41, 81,239,155, 31, 5,252,208,230,197,158, 93,238, 94,139, 13, 49, 41,143,160,253,176,197, 73, 20,254,231,110, 36, 64,151, - 91,103,183,132, 0, 91, 26,253,210, 68, 8,216,236,223,151,160, 73,196,187,130,117, 91, 78,184, 85,148, 40,198,254,186,247,199, - 17, 63,174, 95,183, 35, 41,189,113,162,141, 7, 15, 30,127, 63, 40,149,202,231, 46,178,174, 92,185,162,124, 22,145, 21, 25, 25, -217, 77,169, 84, 46, 85, 42,149,213, 34,112,105,135, 14, 29,230, 86,143, 83, 79,160,130, 16, 50,250,198,141, 27, 23,235,226,156, - 62,125,186,247,229,203,151,253,110,220,184, 1, 0,104,223,190,189, 95,100,100,164, 95,109,251, 90, 91, 91,179,109,218,180,201, - 92,181,106,149,146,239, 33,127,174,192, 74,202,191,244, 97,132,177, 84, 11, 0, 73, 22,236,255,216, 84, 75,189,153, 93,178,117, -245,216, 37, 97, 65, 78, 80,169,141, 56,125, 41,179,202,130,197,128,101,205,143,254,246,123,209, 21,157,152, 73,248,118,247,125, - 48, 44,183,184, 46,206, 39, 97,226,184,215,219,118,123,117, 47, 71,136,196,218,154,174,104,238,227,226,254,241,152, 54,244, 7, -175,133, 65,167,103, 94,221,121, 60,245, 92, 98, 38, 54, 88,196,201, 49,181, 8,175, 90,182,113,108,189,117,127, 26,218, 4, 91, -117, 28, 54,160,171, 61,204,165, 96, 53, 25, 48,178, 28,242,242, 52, 72, 87,138,225,192, 21, 88,196,201,113,104,237,233,233,101, -125,229,212,204, 12,119,187, 50,177,139, 21, 43, 22, 83, 28,161,205, 68, 96, 52, 38,233,157,188,251,136, 56, 14,173,235,107, 35, - 43, 43,187, 55,187,246, 28,232,144,125,246,109,202,202,103, 0,220,253,155, 32,227,230, 86, 20,198, 29, 65, 73, 97, 22,229, 64, -202, 96,221, 34, 0, 3,134,191,134,165, 83, 34,161, 82, 85,130, 42, 74,115,144, 72,164,142,128,169, 86, 78, 66, 99,244,138,111, - 22,121, 9,133,244,195,235, 73, 24,128,152, 1, 98,134,186,210, 0,163,209, 8,153,152,192, 70, 70,128, 42, 55, 44,203, 26,173, - 91,247,158,245, 30,192, 94,173,175,238,241, 25,136, 15,245, 67, 12, 8, 19, 66, 88, 29, 40, 32, 38, 33,227,127,162, 39,204, 15, - 97,237,122,143,127,159, 2,126,104, 76, 27,133, 55,195,160,200, 16, 91, 27, 43, 38, 9,185,209, 83,145,202,202,136, 71,171,183, -241,218,232, 41,214,235, 54,174, 31, 12,144,201,120, 60, 6,237,207,152, 94,204,115,242,156,255, 72, 78,123,123,123,255,102,205, -154,205, 53,155,205,221,196, 98,177,135,201,100, 2,199,113,249, 18,137,228, 82,102,102,230, 2,149, 74,149,254,119,171,251,241, -227,199, 27, 34,178,234,229, 20,137, 68, 56,118,236, 88, 74, 3, 68,214, 99,156, 52, 77,111,223,183,111, 31,246,238,221, 11, 0, - 56,127,254, 60, 90,180,104, 97, 83,219,129, 57, 57, 57, 54,175,188,242,202,118, 0, 62,117,113, 62,120,240,192,127,209,162, 69, -216,183,111, 31, 0,224,231,159,127, 70, 80, 80, 80,173,133,185,115,231,142,224,243,207, 63,247, 7,160,252, 11,218,232, 95, 43, -176, 8,234, 95, 90, 37,205,211, 78, 20, 1,179, 25, 0,210, 26,122,178,196, 52,124,179,102,211,137,254,103,127,253,161,155, 76, - 66, 99,254,170,143,115,138,138,212, 47, 8, 5, 15,221, 44, 12, 11,218,201, 81, 18,187,120,106, 27,223,178, 10, 61,126,187,160, -184,152,144,142, 6,153, 66, 19,210,112, 26,224, 28,171,108, 67,208,168, 10,131,198,206, 57,189,123,247, 55,253, 91, 79, 31,221, - 26,135,162, 51,167, 3, 76,189,107,213, 17,142, 3, 33,204,163,160,246,170,141, 85, 46,167,255,109,227, 8, 1,136, 25,164,129, -113,222, 95,126, 57, 82,120,104,247,129,254, 54, 82,225,119,147,222,153,104,111, 46, 73, 64, 69, 57,139,252, 98, 13,178,138, 28, -193, 90, 53, 71,114,252, 85, 86, 64,211,245,198,159, 81, 52, 84,196,172,177,115,178,178,162, 67, 59,188,231, 85, 17,247,153, 74, - 42, 48, 11, 28,219, 46,178, 43,184,183, 34,155, 49, 20, 86, 82,244,227, 10,168,214,135,161,131, 67, 11,131, 58, 83, 80, 81, 94, - 2,199, 86,161, 24,240,242, 96,204,159,208, 18,106,181, 6, 69, 37, 87, 72, 96, 83, 7, 74,127,107, 39,230,188, 25,130,146,226, - 60, 24,205, 0,173,210,151,234,141,250,202,167, 91, 2,177,238,195,143,103,188,222,180,137,155, 77,245,100, 1,194,177,104, 19, - 30,128,190, 61, 59,226,116,236, 21, 92,191,149, 12,142,112, 85,147, 9, 88,228, 22,150, 23,232, 77,236,214, 6, 89, 71, 57,230, -161, 37,180, 22, 1,134, 70,184, 6,195,195, 97,205,106,240, 69,251,150,118, 19,102,190,217,212,206, 78, 66, 65,111,197, 66,175, - 55, 67,157,244, 61, 92,154,180,130,181, 76, 70, 69, 68,232,132,183,110,129, 95, 87,144, 7,143, 26, 24, 49, 98,132,172,160,160, - 32,218,199,199, 39,180, 79,159, 62,214,221,186,117,131, 70,163,193,201,147, 39,161,213,106,155,250,248,248, 52, 61,117,234,212, -240,172,172,172, 4, 31, 31,159, 30,251,246,237,211, 55,244, 28,213, 65,229,207, 59, 56, 92, 34,145, 32, 54, 54,246,185, 90,178, - 36, 18, 9,174, 93,187,150,210, 24, 75,150, 70,163, 17,123,122,122,194,197,197, 5, 44,203, 66,163,209,224,224,193,131, 80,169, - 84,224, 56, 14, 86, 86, 86, 88,113,188, 2,250,251,251,176,241,187, 69,168,168,168, 16,215,199, 89, 92, 92, 76, 5, 7, 7,195, - 96, 48,128, 97, 24,232,245,122,156, 57,115,230,209,111,161, 80,136,133,251, 10, 96, 72,222,141,109,235, 86,160,184,184,152,250, - 11,187,143, 37, 90,228, 31, 37,176,170, 43,244,167, 87,140,101,153,217,235,183,238,142,157, 61,117, 20,166,188,217,219,103,193, -183, 7,250, 36,166, 99, 27, 0,180,244,199,216, 49, 81,129,190,142, 54, 34,124,249,211, 13, 0,100,246,179,158, 47, 62, 11,201, -161, 1,220,244, 3,209, 89,209,159, 77,136, 64,128,143,125,139, 50, 83,169, 36, 45,205,130,120, 31,206, 12, 39, 91,105,112, 84, -119,151, 19, 32, 28, 28,109,165, 33, 32, 44, 28,237,164,193,253, 59,219, 31,231, 8,129,163,141, 56,132,112,150, 39,231,238, 16, - 46,125,199, 74, 68,191, 99, 99,231,232,251,225,164, 49, 86, 3, 7,190, 98,101, 35, 33, 40, 73, 56, 6, 21, 9,131,209,198, 6, - 68, 91,142,244, 7,113,236,241, 11, 55, 20, 82, 23,175, 79,128,140,186,139,201,226,162, 50, 39,113, 88,179,192, 62,142, 69, 55, -230, 20,250,247,222,233, 71,131,165, 53,177,195, 11,109,236, 66,197, 49,119,226, 24,142,197,149,250,202,166, 86,169, 50,205, 38, -120,233,205, 34,187,212,107, 91, 48,107, 76, 24,202,203,138,160, 55, 48, 40,215, 48, 38, 47, 87,147, 84, 95,118, 15, 6, 35, 3, -131,137, 64,100,237,141, 83,177,113,197, 28, 99, 62,254, 84, 69,158,135,219,105, 59,110,219,214,220, 22,224,133, 54, 51,157,172, -110,131,213, 33, 43, 91,137,109,251, 99, 35,210,242,112,251,217,110, 73, 6,132,249,223, 51,186, 58,248,189, 49,193,237, 33, 77, -209, 65,204,136,190,251,114,214,192,208, 30, 97,172,148,210,231,129, 2, 96, 45, 19,194, 32, 99,225, 32, 11, 0, 49,169,137, 86, -175, 47,143,143, 3,159,153,157, 7,143, 26, 8, 14, 14,246, 84, 40, 20,241, 31,127,252,177,243,176, 97,195, 30,137,129,173, 91, -183, 98,245,234,213,152, 63,127, 62,204,102, 51,214,175, 95,111,189,127,255,254, 14, 63,252,240, 67,174,175,175,111, 88,118,118, -118,190,133,162, 74, 92, 53,118, 61,140, 42, 32,132,253,242,203, 47,201,252,249,243, 81,189, 13, 0, 11,212,255, 82,249, 52, 49, - 36,145, 72,144,148,148,244, 92, 68,150, 72, 36,130, 88, 44,134, 68, 34,193,253,251,247, 27, 44,178, 24,134, 17,228,230,230, 66, -165, 82,161,239,224,193, 88,189,100, 9,186,117,235,134, 62,125,250,128, 16,130,179,103,207,162,147, 83, 50,156, 7,119, 71, 98, - 98, 34,204,102,179, 69,158,169,220,220, 92,148,148,148,160,255,224,193,216,240,227,143,104,215,174, 29,130,131,131, 1, 0,209, -209,209,232, 45,207,132,109,112, 31, 36, 39, 39,255,149,221,231, 47,211, 34,127,181, 5,235, 47, 65,124, 26,126,231, 14, 92, 56, -242,218,192,246,131, 6,247, 10,197,134,221,231, 22, 65,170,218, 13, 0, 46, 82,233, 87,111, 14, 12, 64, 66, 90, 25,206, 94, 83, - 30, 73,204,192,239,207,227,156, 28, 11, 87, 23, 71,107,128,150, 64,107,100, 25,123,251,250, 3,147, 57, 16, 88,183,156,133, 49, -195, 18,125, 58,182,242,241, 33,132,169,154, 49,184, 18, 99, 95, 78,241,109, 31,230,225,251,208,229,101,134,125,167,157, 0,103, - 83,111, 57,186,182,149,157,250,100,218,212, 23, 7, 14,126,205, 74,108,237, 2, 78,151, 3,115,233, 93,148,164,159,135,193,170, - 45,138,114, 51,176,251,208,111, 21, 73,233, 5, 42,129,128, 62, 45,116,240,152,113,230, 76,122, 37, 69,213,221,207,244, 2, 44, -158, 63,119,246,192,221, 59,118, 57, 88,121,119,197,131, 67, 81,229, 18,129, 89,234, 46, 15,130,142,177, 99,151,111, 62,226,168, - 1,150,212, 87, 62,173, 70,245,235,153,179, 39, 70, 5,122,117,177,203,136, 59, 2,173,214, 8,131, 25, 8,111,215, 19, 44, 71, - 36, 20, 77,113,246, 2, 1, 85, 80, 80, 10,202,204, 21, 92,186,149,145, 23,115, 61, 77, 96,160,235,231,126,172,211,137, 5,211, - 6,247,105, 3,176, 58,188,220, 55, 28,171, 54,159,157, 10,176,227,159,237,182, 52,131,176, 58, 16,160, 75,168, 31,126,226,128, - 46, 55,143,175, 10,137, 28, 48, 29, 13,177, 96,133,249, 97, 64,104,144,247,150, 85,139,102, 59, 59,187,251, 8,192,234, 64, 49, - 42,194,149,254, 14,161,230, 1,236,155, 12, 4,235,208, 25,235,126, 92, 94,201,113,100, 55, 26,145,162,130, 7,143,127, 51,244, -122,253,175, 75,150, 44,113, 30, 52,232,225,108,247,202,202, 74, 92,185,114, 5, 27, 55,110,132,141,141, 77, 77,177,132,168,168, - 40, 16, 66,156,231,205,155,247, 43,128, 23,159,198,217,169, 83,167,193, 43, 87,174,204, 6,240, 0, 15,115, 28,137,241,112,129, -121,114,230,204, 25, 26, 0, 58,116,232,192, 94,187,118,141, 3, 64, 70,143, 30, 45, 58,116,232, 80, 11,141, 70,115,161,177, 2, - 75, 34,145, 64,161, 80, 60,179,200, 18,137, 68,143,248,196, 98, 49, 20, 10, 69,131, 68, 22,195, 48,194,163, 71,143,226,214,173, - 91,248, 50, 34, 2, 31,120,121,193,197,197, 5, 23, 46, 92, 0, 33, 4, 54, 54, 54, 40, 45, 45,197,238,221,187,209,179,103, 79, - 48, 12, 35,182,132,247,224,193,131,184,121,243, 38, 22, 70, 70, 98,170,141, 13, 28, 29, 29, 17, 29, 29, 13, 0,144, 74,165, 80, - 40, 20, 56,115,230, 12,122,244,232,193,119,234, 63, 91, 96,117, 7,132,165, 20, 60,205, 38, 29, 8, 67, 0, 10,222, 45, 91, 66, -156,152,216,240,183, 4, 26,152,179,102,243,145,129,171,102,191, 76,189, 59, 34,194,123,193, 15,231, 39, 3,192,132, 87,131,228, -214, 82, 33,214,236, 78, 32, 52, 48,231,121, 84,176,101, 75,136, 41, 3, 38,247,237, 28, 12,101,177, 17,105,217, 21,231, 18, 51, - 44,115,233,156,221, 54, 6, 63,255, 26,157,179,122,203,227, 51, 6,183, 28,188,153,189, 98,155, 62,137,128,192,209, 74, 20, 50, -254,229, 78,245,206, 34,236, 16, 46,125,103,230,244,233, 47, 14,121, 99,134,149, 57,247, 0, 12,153, 71, 1, 86, 11,173,134,130, -138, 9, 68, 94,118, 46,190, 92,181, 43,199, 96,166, 95,191,145,160,111,144,176,124,240, 0,149, 66,127,213,176, 37,223,204, 61, -253,245,151,243,108,165,138,179, 42,145, 16, 26,218,165,155,232,171,185,107,133,234, 10,227, 43,105,217, 80,215,199, 99,160,177, -228,155, 21,223, 14,124,123,204,176,164, 32,159, 30, 46,108,126,154,139,182,162,162,112,231,241,155,158, 85,111, 19, 20, 0,164, -102,148,160,168, 84,195,176,140,249,130,157, 9, 11, 18, 20,150,207,254,243,119,135,219,160, 94, 97,111,184, 57, 74,160,211,148, -193,221, 73,140,126, 93,154,191, 97,214, 39,207, 76, 47,108, 88,142,145,199,244, 85,149,139, 48,118, 99,175, 16,112,166, 16,194, -153, 97,204,218,222,152,215,167,233,211, 71, 53,117,112,182, 49,210, 20,171, 1, 68, 78,128,196,141,162,173,252, 32,176,242, 69, -102,202, 13,102,250,123,163, 74, 50, 51,243, 55,185, 18, 44,227, 31, 33, 60,120, 60,142,172,172,172, 55, 63,251,236,179,152,142, - 29, 59,122,184,186,186, 34, 60, 60, 28,135, 15, 31,198, 39,159,124,242,104,159,182,109,219, 2, 0, 74, 74, 74,240,205, 55,223, -228, 43,149,202, 55,235,124, 49,143,143, 79,218,190,125,123,151,214,173, 91, 27,197, 98,113, 89,181,200,202,202,202, 18,106, 52, - 26,202,104, 52, 18, 27, 27, 27, 78, 42,149,154, 71,142, 28,105,186,118,237, 90, 11,141, 70,147,245, 44, 22,172,200,200,200,123, -229,229,229, 21, 20, 69, 61,115, 10,135,106,113, 21, 18, 18,226,102, 52, 26, 89, 0,165,141, 73,225,192, 48, 12, 34, 35, 35,113, -230,226, 13, 28,191,120, 15,149, 69,105, 24,253, 74, 63,132,132,132,224,228,201,147,141,110,179,200,200, 72,156, 57, 19,131,232, - 27,247, 81,144,149,128, 49,175, 13, 69,112,112, 48,206,156, 57,195,119,232,231, 32,176,234, 52,201,133,248,162, 13,109, 47,249, -121,206,203,205, 67,133,225,243, 65, 9,173,112, 96,203,225,206,179,191,254, 41, 73, 80,145, 61, 58,206,130,217, 94,143,221, 44, - 25,136, 39,184,191,235, 78, 66,200, 27, 47,119,243,193,134, 95,172,191, 0,128, 87,251,250,227, 90, 66, 17,174,198, 21,238, 74, -104,100,206,162,154, 8,119,135, 53,107,192,174,111,102, 12,233,209,180,137, 39, 54,238,141, 1, 69,240,171, 69, 3, 45, 33,164, - 99,107, 95,172,222,242,228,140, 65, 47,223, 21,219,244, 73,167,174,168, 7, 0, 64,223, 23,172,143,183,111,233,236, 75, 72,221, -211, 8,101, 34,250,221, 1, 47,191,105,197, 20,156, 4, 87,250, 11, 68, 18, 49,116, 26, 22,121,133, 6,232,172,173,112,238,210, - 5, 93,165,150,153,126, 55,133,105,148,213, 46, 49, 29,105, 98,225,173,108,141, 78,231,101,235,220, 92, 67, 83, 32,149, 70, 17, -185,153,160,208, 36,100,227,190, 37, 28,105,105, 48,190, 32,103,186,174,219,246,203, 92,145, 72,242,170, 64, 0,202,221,209,198, -237,167, 53, 11, 97,103,103, 11,194,168, 65, 12,197, 24, 54,225,235,162,184, 20,179, 63, 0,180,104, 1,219,174,173, 69,219,132, - 52,149,123,254,182,233,243,250,206, 65, 9, 48,105,244,203,109, 68,156, 89,131,105,243,246, 96,221, 87, 47, 99,204,224,150,162, -163,231,146, 39, 1, 88,208,120, 51,229, 67, 23,225,139,239, 94, 76,162,128, 24, 2,116,185,113,228,171, 16, 52,192,243, 24, 17, - 1, 17, 91, 73,181,108, 41, 55,138,216,220,221,160,100,114, 34,112,237, 1,216,180,160,136,109, 56,190, 95, 51,183,114,195,198, -141,167, 56, 10, 95,222,207,172, 55,229, 5, 15, 30,255, 85,164, 41,149,202,254, 81, 81, 81,103, 79,158, 60,233, 28, 30,254,112, - 69,149,155, 55,111, 2,192, 35, 87, 84, 65, 65, 1, 94,127,253,245,226,188,188,188,254,168, 39,166, 87,173, 86,167, 31, 56,112, -192, 67,167,211,181,255,252,243,207, 11,154, 53,107,166, 54,155,205, 68,173, 86,131, 97, 24,226,230,230, 38,106,215,174, 29, 21, - 22, 22,166, 59,123,246,172, 75, 78, 78,142, 26, 64,102, 99, 10,255,246,219,111, 99,255,254,253, 0,128,231,145, 23, 75, 44, 22, - 35, 42, 42, 74,126,229,202, 21, 69, 21,103,163,243, 98, 17, 66,112,247,238, 93, 92, 74, 97, 33,177,113, 66,102,146, 10,103,126, - 59,132,209,239, 78, 4,195, 52, 62, 90,225,206,157, 59,216,125,230, 14, 60,228,205, 81, 97,184,139,131, 7, 15, 98,242,228,201, -207,196,217, 72,252,107,220,131, 79, 90,176,254, 80,161,128, 0, 72,164, 70,204,235,219, 65, 62, 99,100,239,230, 2, 70,171, 4, -199,113, 16, 0,112,181,163,177,121,195, 58,255, 95, 14, 28,139,253,238,219, 31,190,133,145,155, 19, 87, 8,109, 3,204, 88,243, - 86,110,189,252,234,246,133,221,133,147, 71,132, 56, 3,128, 88, 68, 99,205,174,120, 6, 52,230, 61, 75,165, 94,144, 67, 86, 41, -198,187,238,238, 14, 95,204,126,111,160,115,143,142, 65,184, 16, 27,135,111,119,196, 94,148, 56,225,103, 75,111, 59,194, 49,143, - 5,180, 63,220, 86,139,241,139,212,223, 9, 89,142,120, 74,172, 93,161,207, 60, 6,161, 68, 10,134, 49,161,168, 64,139,140,124, - 14, 50,111, 17,174,221,205,210, 13,125, 99,216,209,103,233,152, 54,214, 50,239,121, 95, 45,111,162,211,169, 25, 85,121, 49, 35, - 20,199, 10,173,173,164,249, 15, 87, 14,176, 12,191, 43,160,239,214, 70,212, 14,132, 19, 72, 5, 68, 59,123,250, 56, 27, 69,242, - 73, 4,186, 41, 65,129,192,202,123, 32,236,108, 4,226, 46,173, 69,217, 0, 96, 99,109, 45,249,102,193, 39, 14, 31,206,252,242, -146, 37,214,196, 32,119,207, 15,195, 3,157,113,225,106, 34, 46, 94,207,138,191,248,123,114, 88,207, 14,222, 8,242,119,252, 64, -226, 88,190,164, 49, 22,209,135,109,240,208, 69, 88, 61,139, 48,204, 15, 97,237, 7,125,254,180,217,131,181,194,239, 22,184,100, -127, 2,138, 18,128,128, 2,244, 10, 48, 57,219, 33,240,159, 74,126, 61,244,149,110,227,134,141, 11, 19, 51,121,171, 21, 15, 30, -245,161,162,162,226,110, 82, 82, 82,191, 54,109,218,108,157, 54,109,154,221, 27,111,188,225,253,246,219,111,211, 0, 80, 80, 80, -192,173, 94,189, 90,249,221,119,223, 85, 20, 23, 23,143, 55,155,205,247, 44,185,195,243,242,242,174,108,222,188,185, 40, 38, 38, - 38,236,133, 23, 94,176,110,223,190, 61,231,238,238, 46,214,106,181,108, 78, 78,142, 46, 54, 54,150, 77, 73, 73,113, 40, 47, 47, - 79, 1,144,138, 70,184,239,189,189,189, 65,211,244, 2, 31, 31,159,185, 10,133,162,213,243,136,193, 10, 12, 12,244, 6,144, 34, -151,203, 3, 27,234, 30,252,195,128, 45, 20,162,172,172, 12,234,220, 84,104, 75,138, 17, 44,208,162,173,179, 43,236,236,236,158, - 73, 12, 85, 84, 84, 64,104, 40, 64,218,221, 44,148,231,103, 34,180,105, 36,108,108,108, 96, 48, 24,254, 63,186, 15,245,111,185, - 15,158,234, 34, 12,109,130,201, 86,192,234,113, 35,253,197,254, 77,155,192, 88,116, 19,183, 83, 43,241,249,166, 14, 9, 2,177, -157, 97,202,216,190,237,122,246,113, 67,247, 30, 29,168,102, 77, 29, 63, 88,178,100,237,251,161,146,226, 79, 18,114,176,198,146, - 19, 39,164, 33,157,227, 10, 55,158,191,174,152,212,196, 77, 7, 2,130,243, 55,242,112, 47,181,108, 99, 82, 6,210, 27, 82,137, -208,230,232, 35,164,232, 61,132, 37, 50, 7, 59, 27,117,104, 72, 19,215, 62, 93, 90,211,253,123,182,135, 88, 8,196, 92,189,131, -233, 95,253,250, 59, 39, 33, 3, 45,158,241, 69,184, 63, 8,167,135, 51, 6,153,199,102, 12, 18, 66, 8, 56, 6,132,212, 29,214, - 37,160,169,124, 77,193, 13, 79,137, 93, 40, 76, 37,231, 80, 80, 80,137,248, 52, 19, 42,225,131,178,220, 92, 16,194,102,207,155, -247, 75,163,239, 16, 87, 87, 87,119,255, 22, 65,205,191,219,176, 15, 38, 67, 5,210, 18,182,160, 82,149,143,175, 22,255,214, 92, - 46,119,233,174, 80, 40, 46, 88,222,187,169,160,179,231,118,185,131, 0, 2,161, 20, 71,215,239, 69,177,208, 10,174, 14, 98,112, -250, 66,188,251,206,104,135,168,129,163, 29, 0, 32, 59,245, 14,124,157, 45,211,213,166,114, 12,127,117,124,176, 35, 88, 45,126, - 62,120, 71, 79, 83,232,255,243,111,241,169, 61,219, 57,202, 94,237,219,212,105,193,186,242, 87, 0,236,106,148,190,226,216,199, -102, 17, 54,102,246,224, 62,128, 13, 33, 72,221,117,166,200,118,100, 84,132,149, 88, 72, 81, 68,175, 0, 71,137,169, 53, 63,108, - 86, 75, 40,172,231,135, 78, 30, 60, 44,131, 78,167,187,169,211,233, 90,125,250,233,167,175,127,246,217,103,221,108,108,108,252, - 1, 64,163,209,164,155,205,230,139, 85,247, 58,219,144,219, 28, 64, 74,106,106,106,122,106,106,170,199,207, 63,255,236, 8, 64, - 86,245, 63, 61,128,114, 0, 5, 13,228,124, 12,213, 98,202,219,219,123,238,243,186, 14,213, 98, 74, 46,151, 7, 54,230,120,129, - 64,192,210,244,195,149,125,164, 82, 41, 46, 93,186,132, 1, 93,186,226,206,153, 44,132,120,248,160,231,232,113, 56,120,254, 60, - 4, 2, 65,245,254, 13, 26, 71,132, 66, 33, 98, 98, 98, 48, 98, 80, 15, 28, 60,120, 16, 1,145,109, 48,117,234, 84,156, 56,113, - 2, 66, 33,191,154,222,159, 34,176, 64,176,224,244,158,175,197,224,204,216,183,115, 41, 78, 95,215, 26,239, 43, 48, 39, 56, 23, -171,247, 65,205, 21, 22,239,159,116, 52, 58,109,217, 91,227, 7, 89,247,234,222, 23,189,186,245, 20,134,181,233,254, 5,240,152, -192, 10, 71, 29,185, 50, 88, 51, 22,174,223,159, 52,113,207,177,100, 10,140, 26,163, 94,110, 79, 88, 51, 22,214, 83,230, 63,112, - 58, 88,219,238,137,185, 20,235, 4,182, 18,249, 25,231,101,158, 30,254, 0, 49,227,193,131,100,124,191,249, 32, 23, 29,123,127, -187, 81,128,105,105,137,208, 88,202,249, 80, 81, 49,112,176,149,252, 97,198,160,163,149, 40,164,239, 11,214,199, 9, 33,196,206, - 90, 20, 66,106,183, 96, 61,198,169, 55,115,235,183,111,219,176,124,194,132,183,109, 74, 12, 10, 36,231,196, 67, 47,144, 67, 96, -221, 28,241, 55, 78,234,116,102,110,131, 5,237,245,212,235, 89, 92, 92, 92,120,243, 70, 41,246,108, 93, 12,179,217,128,194,188, -135, 26, 53,175, 64, 5,123,123,121,172, 66,161,176,152,211,196,112, 21,195,135,189, 43,182,146,193,106,244,171, 3, 37,169, 74, - 3, 34,130,237, 30,118, 11, 83, 49,146,162, 47,161,167,251,195, 96,200,212, 36, 1,124, 95,240,182,168,156,118,118,226,105, 3, -186,202,145,158,149,143, 75, 55, 21,219,210,149, 80,178, 36,111, 91,106,118,249,164, 33, 61,125,177,106,123,194, 84,192,188,171, - 33,117, 15,243, 67, 24, 7,116, 1, 49,131, 48,122, 16,160, 75,152, 31,194, 44,156, 57,248, 7, 78, 33,141, 55, 86,238,201,252, -124, 95,116,209,144, 25,111,119,181,239,252,226, 0, 9, 56, 51, 81,107, 13,230,196, 12,168,158,165,141,158, 1, 60, 39,207,249, - 79,229,100, 1,108, 55,155,205,219,203,203,203,159, 39,167, 18,127,204,203,244, 76,117,175,233, 14, 84, 42,149, 2,111,111,111, -214,130, 32,247,250, 56,175,214, 20, 90, 85,214,171,250,172, 88, 79,114, 42, 59,118,236,232, 60,120,240, 96, 48, 12,131,148,148, - 20,100,101,101, 97,240, 91,227,225,228,228,132,171, 9, 9, 72, 73, 73,193,220,185,115,193, 48, 12,174, 93,187,150, 91, 31,167, - 72, 36, 50,181,105,211, 70, 60,116,232, 80, 48, 12,131,180,180, 52,100,102,102, 98,234,212,169,112,112,112, 64, 66, 66, 2,210, -210,210, 48,119,238, 92, 24, 12, 6,164,167,167,155,254,162,190,244, 31, 17, 88, 20, 88,112,102, 84, 92,159,135,159,142,192,100, - 98, 16,146,144,139,140,234,192,147,132, 92,172, 21,144,187,135,239,198, 39,165,223,188,218, 75, 2,213, 61, 52,244,205,225, 65, - 46,242,236,172,213,106, 48,106,123, 20, 29, 71,134, 66, 93,249, 32, 23,121,141,176, 94, 80, 96,255,143,189,243, 14,143,162,106, -219,248, 61, 51, 91,179,233,125,119,211, 12, 33, 9, 9, 53, 33,180, 36, 72,135,208, 68, 4, 4, 68, 16, 84,148, 34, 42,168,116, - 1, 1, 1, 17, 68,170,128,136, 40, 34, 32, 85,164,133,222, 33, 36, 4, 8, 33,161,132,132,148, 77,239, 91,103,119,102,190, 63, -146,205, 27, 48,101, 19,248,240,149,119,126,215,181,215,102,119, 38,247,158,153, 51, 51,231, 62,207,105, 26,160,228, 58,246, 31, - 58, 3,137,244, 6, 98,226,238, 50,151, 98,147,119,146, 28, 22, 38,166,226, 94,195, 53, 57,216,180, 93,133,119, 94,123, 80, 49, - 98,144, 51,130, 99, 77,176,143,216,129,177,175,133,123,183, 11,114,240, 6,107, 4,199, 25,225,216,227, 52, 48, 71, 90,167,222, -181,219,250,205,157, 67,164, 67,202, 74,243, 59,244,234,214,213,218, 53,240, 77,148,220,187,131,132,184,104,237,245, 91,201,151, -175,221,214,111,126,150,140,244,240,240,120,181, 71,143,102, 24,254,206, 76,208,250, 98, 60, 76,248, 9,101,165,217, 56,127,209, - 6,119, 31,151,118, 2, 96,113, 4,235,114,130,169, 5, 80,132,136,150,194,199,118, 98,131,124,244,208, 1,144, 8,116, 96,141, -101, 32,232,124, 60, 40,164, 75,134,204,203, 96, 0, 64, 38, 37, 4,214,130, 18, 59,139, 34,141,126,206, 1, 50,145, 17,191, 28, - 72, 0, 75, 84, 44,179,196, 18,216,240,203,159, 15, 62, 92, 56, 57, 20,205,253, 28,219,220,184,159,107,110,131,183,180, 74, 59, -233,250,193, 5, 65,186,132,185,224, 88, 35, 46, 44,119, 12,234,252,121,209, 36, 52,114, 89,156,219, 15,145, 9,224, 67, 48,154, -141, 31, 47, 62, 58, 55,172,229,157,200,105, 31, 14,178, 3,193, 47,140,206,195,195,243,226,209,104, 52, 31, 76,159, 62,125, 35, - 69, 81,174, 0, 8,142,227,160,215,235, 5, 63,254,248,163,208,100, 50,145, 20, 69, 49, 82,169,212, 20, 27, 27,107,100, 89, 54, -143,166,233, 15,234,211, 52, 24, 12, 15,214,174, 93,219,212,104, 52, 86,141, 56,212,235,245,248,245,215, 95,161,215,235, 33,145, - 72, 96, 99, 99,131,135, 15, 31,130, 32, 8,154, 97,152, 7,124, 78, 60, 79,131, 5, 44,136,120, 99,222, 60,112, 32, 64, 96,254, -157,140,191, 79,198,116, 43, 19, 89,205, 61,233, 79, 91,132,116,153, 87,105,202, 22, 52, 52, 1, 58,134, 25,218,174,109,224,239, - 0,160,103,153,183, 27,115, 16,165, 58,237,155, 33,237, 59,237,100, 57, 78, 96, 98,184, 31, 73, 18,123,116, 64,226,195, 71,245, -143,156,171,141, 44, 85,113,108,223, 72,123,206,188, 4, 78, 85,179, 96,229,116, 12, 28,199,113, 85,205,130,115,164,200, 47,208, -215,219,155,250,252, 13, 93,239,246, 45, 37,239, 31, 59, 27, 55,158, 97, 57, 57, 69, 18,217, 58, 35,187,233, 89,205, 85,101,237, -232,236,137, 19,153,199,111, 70,186,247,118,169,156,102, 53,191, 24,200, 47,193,241,204,204,242,179,141,209, 44,210, 26, 7,205, - 90,126,224,160, 88, 64, 9, 0, 14, 44, 91,113,188, 58,154, 41,172, 48, 97, 64, 43,127, 40, 63,255,209,244, 59, 69, 17,105,245, -233, 93,189,165,250,110,248,231, 39, 62, 75,184, 95,244, 99,106,102, 69,205, 39, 53, 19,183,119, 29,123, 52,247, 65,122,217,103, -183,239, 23,125,139, 6,246,155, 32,128,117,237, 94,155,247,183,239,158,245,124,222,125,140,120, 0,131,193,101,244, 26, 62, 97, -205, 52,130, 0,191, 76, 4, 15,207,255, 16,230, 40, 22, 73,146, 95, 61, 47, 77,115, 20, 11,192,253, 6,164,227, 42,128, 86,207, -243,216,226,226,226, 10, 0, 20,240,185,252,239,166, 37,175, 9,112, 28, 71, 62,203,171,161,233,244,247,247,231, 26, 96, 84,248, - 60,226, 53,121, 77, 94,147,127, 38, 63,227, 51,153,227, 56,226, 89, 94,124, 30,189,124,240,205, 30, 47, 0,130, 32,216, 23,249, -123,247,239,223, 39,248,179,206,195,195,195,243,226,158,201,207,123,201, 30,158,127, 63, 36,127, 10,120,120,120,120,120,120,120, -120,158,179,233, 70,237, 97,190,134,140, 14,104, 76,168,240, 54,175,201,107,242,154,188, 38,175,201,107,242,154,255,115,154,245, -105,243,163, 19,255,159,140, 23,175,201,107,242,154,188, 38,175,201,107,242,154,255,123,154, 47, 21,124, 19, 33, 15, 15, 15, 15, - 15, 15, 15, 15,111,176,120,120,120,120,120,120,120,120,120,131,197,195,195,195,195,195,195,195,195, 27, 44, 30, 30, 30, 30, 30, - 30, 30, 30, 30,222, 96,241,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,188,236,152,151, 86,233,194,159, 10, - 30, 30, 30, 30, 30, 30, 30,222,139, 60,191,131,170,254,206,195,195,195,195,195,195,195,195,123, 17,222, 53,242,240,240,240,240, -240,240,240, 94,228,191,211, 53,242,240,240,240,240,240,240,240,240, 94,228, 25,225, 71, 17,242,240,240,240,240,240,240,240,240, -240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, 60, 71,248,149,198,121, 77, 94,147,215,228, 53,121, 77, - 94,147,215,252,159,131,239,131,197,195,195,195,195,195,195,195,195, 27, 44, 30, 30, 30, 30, 30, 30, 30, 30,222, 96,241,240,240, -240,240,240,240,240,240, 6,139,135,135,135,135,135,135,135,135,135, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60,255, 53, 16,168,125, - 36,192,237, 6,232, 52,102, 52,193,109, 94,147,215,228, 53,121, 77, 94,147,215,228, 53,255,231, 52,235,211,190, 13,158,255, 23, -227,197,107,242,154,188, 38,175,201,107,242,154,188,230,255,158,230, 75, 5,223, 68,200,195,195,195,195,195,195,195,243,156, 17, -252,195,230,206,108,240, 88,252,103, 21,237,255, 54, 77, 30, 30,158,231, 64,231, 54,152, 46, 22, 9,199,233,104,227,178,139,241, -248,169, 75, 40,156, 77, 44,150, 74, 69,130,206,122,131,189, 50,127,110, 0, 0, 32, 0, 73, 68, 65, 84,233,155, 11, 55,241, 99, - 3, 37,137,167, 62,243,247,250, 51,210,171, 87,175,241, 0,230,113, 28,199,177, 44, 59,251,212,169, 83,219,158,199,179, 94, 46, -151,143, 0, 32, 3, 0,146, 36, 75,178,178,178,118, 91,242,143, 93,186,116, 17,148,151,151,167, 2,240,168,252,234, 94, 92, 92, - 92, 96,125,219,120, 26, 78, 76, 76, 12,231,227,227,131, 86,173, 90, 37,101,103,103,175, 1,176,129, 63, 43,255, 69, 6, 43,208, - 85,218,241, 21, 47,215,254, 71, 99, 31,207,174,239,134,243,240,240, 88,234,234,234, 58, 65,163,209,232, 0,112, 36, 73,114, 4, - 65,192,252, 2, 0,134, 97,242,146,146,146, 44, 13, 67, 62, 55,205,128,128,128,235, 36, 73,122,154,255, 7, 0,234,251,155,101, -217,140,196,196,196,176,250, 18, 41,151,203,251,144, 36, 57,163,190,253, 88,150, 93,154,157,157,125,172,174,125, 90,182,108, 25, -103,109,109,237, 78,146, 36, 81,219, 62, 28,247,159, 50,199,100, 50,113, 26,141, 38,231,206,157, 59,161, 13,205, 91,165, 82, 57, -155,227,184, 80, 0, 63,171, 84,170,195, 0,152,103,185, 86,148, 74,229, 16,142,227,230, 84,158,195, 69, 89, 89, 89,123, 26,242, -255,254,254,254,215, 69, 34,145, 39, 69, 81,196,211,121, 82,211,103,150,101, 57,131,193,144,145,156,156, 28,198,223,246, 47,158, - 78,109,208,177,169,175,226,203,201,111,117,195,103, 75,119, 78,142,104,105,202, 23,137, 69, 27,134, 68, 54,117,104,238,231,128, -175, 54, 94,158, 2,176, 13, 49, 88,132,151,151, 87,136,187,187,187,175, 86,171, 53, 95,139, 28, 69, 81, 79,236, 68,211, 52,157, -148,148,116,152,207, 1, 11, 11, 4,129,224,203, 63,255,252, 83,193,178, 44,250,245,235, 55, 31,192,243, 48, 88,132, 68, 34,177, -122,244,232, 17,140, 70, 35,233,227,227, 99,211,192, 50,202, 37, 54, 54, 22, 52, 77, 27, 58,117,234,228, 83,125,155, 88, 44,118, -185,116,233, 18, 0, 24,218,182,109,235,211,216, 4, 6, 7, 7, 91, 91, 91, 89, 77,165, 8,162, 39,195,113, 65, 0, 64, 17,196, - 93,134,227, 78,168,181,218,149,137,137,137,234,151, 61,239,163,163,163, 49,126,252,120,220,186,117,171,217,225,195,135,215,207, -158, 61,123,146, 74,165,234, 6, 32,143,191, 51,254, 97,131,213, 84,110,221,204,213,209,225,208,178,197, 11,112,180,247, 59,117, - 25, 44, 82,161, 80, 44,235,220,185,243,184,237,219,183, 91,239,219,183,207,218,215,215, 23, 34,145, 8, 20, 69,129,162, 40,144, - 36, 9,138,162, 48,104,208, 32,194, 82,115, 85, 93,243,228,201,147,214,129,129,129, 85,133, 44,199,113, 85, 38,171, 95,191,126, -245,106,146, 36,233, 25, 23, 23,231, 38,149, 74,171,254,159,101,217, 39, 94, 28,199, 85,189, 24,134, 65,231,206,157, 45, 75, 40, - 73,206, 72, 76, 76,124, 85,173, 86, 63,161, 97,254, 13,243,223,175,190,250, 42, 0, 28,171, 71, 75,121,241,252, 73, 55,130, 78, - 1, 76,133,224, 40, 39, 64,220, 4, 32, 37, 53,238, 95, 88, 88,136,110,221,186, 81,141,201, 95, 87, 87,215,209,103,206,156,241, -127,244,232,209,235, 95,127,253,117,193,229,203,151,215, 3,216,162, 82,169,210, 27,163,199,113,220,162,148,148,148, 0,142,227, -224,231,231,183, 16, 64,131, 12, 22, 69, 81,158,209,209,209,110, 98,177,184, 42,159,107,123,103, 24, 6, 52, 77, 35, 42, 42,202, -196,223,242,255,208,131,134,192,194,225,175,245,130,214, 72,194,104, 52,185, 42, 92,109,127,157, 50,186,139, 16,156, 1,219, 14, -198,193,104, 98,127,106,168,185,234,219,183,175,207,134, 13, 27, 4,137,137,137,130,224,224, 96, 48, 12, 83,245, 98, 89,182, 65, -247, 37, 79,149,193, 34, 72,146, 68,102,102, 38,108,108,108,236,187,118,237,154,197, 48,204,172,243,231,207,111,251,127,248,185, - 39, 34, 91, 4, 65,168, 85, 42,213,142, 23,125,204,109,218,180,233, 44, 21, 10,119, 46,152,247,169, 91, 80,139,150,164,179,171, - 51, 30, 60,200,128, 88,192, 69, 60, 72,186,215, 97,225,146,239, 63,108,211,166,205,240,248,248,248,243, 47, 91,126,123, 15,222, -188,158, 53,209, 19, 0, 96, 99, 12, 0,108, 66, 89, 89, 25,222,123,239, 61, 28, 56,112, 32,184, 99,199,142, 75, 25,134, 25,199, -223, 25,255,160,193,242, 83, 74, 61,108, 68,210,227, 27,127, 88, 67, 24,203,114, 28,235,185,161, 22,117,238,220,249,237,237,219, -183, 59, 18, 4,129,147, 31,189, 11, 7, 90, 7,229,151,223,192,209,197, 21,134, 25,227, 97,203,152,208,234, 84,124, 67,110,210, - 39, 52,147,146,146, 80, 88, 88, 8, 87, 87, 87,200,100, 50, 72, 36, 18,136, 68, 34,136,197, 98,203,158,222, 4, 1,169, 84,138, -232,232,104, 8, 4,130,170, 23, 69, 81, 53,126,118,119,119,183,248, 92,177, 44,187, 52, 40, 40,168,117,114,114,178, 93, 81, 81, - 17, 58,117,234, 84, 74, 16,196,205,106,198,163,245,205,155, 55,237, 44, 46,105,232, 20,148, 63,254, 1, 92,209, 30,192,225, 13, - 48,118,195,161, 67,147, 39, 10, 25,179, 41,100,152,198, 7,157,242,242,242,232,115,231,206, 33, 36, 36, 4, 59,119,238,116, 46, - 42, 42,250,242,231,159,127,158,179,106,213,170,217, 42,149,106,105, 35, 36,157, 0, 32, 41, 41, 9, 0, 28, 27,147, 38,177, 88, -140, 43, 87,174,128,227,184, 42, 83, 78,146, 36, 72,146,196,159,247, 93,160, 54,144,208,228,220,198,148,129, 62,240,245,245,253, - 91, 84,139,231,197, 16,217, 26,253,218,182,110,217,209,199,203, 27,103, 46, 93,131, 72, 44,116,152, 56,102, 0,108,109, 4, 88, -190,229, 47,246,113, 70,225,228, 11, 55, 45,142,148, 16, 10,133,162,117,239,222,189,189, 54,108,216, 32, 2,128,219,183,111, 67, -165, 82,193,205,205, 13, 82,169, 20, 66,161, 16, 20, 69, 65, 36, 18,241, 39,191, 1,132,134,134,182,104,209,162,133, 53,195, 48, -208,104, 52,248,225,135, 31,236,165, 82,169,253,128, 1, 3, 44,142,100,213,210,108, 23,164,215,235,181, 10,133, 66, 6,128, 37, - 73,178,252,233,200, 22, 0, 40, 20, 10,235, 26, 36, 77, 0,242,219,182,109,235, 1, 64, 12,224, 94,245,109, 6,131,161,182,109, -150, 30,115, 68,104,235,102,135, 23, 46,154,103,157,157,115, 15,246,118,217, 96,141,185, 88,191,126, 61,172,172,236, 48,127,254, - 44,193,254,176,182,242, 79, 62,157,121, 72, 32, 16, 68, 93,191,126,253,242,203,148,231,172,137,158,208, 38, 44,188,234,243,182, -232,213,208,219,135, 34,115,254,124,172, 90,181, 10, 1, 1, 1,237,239,222,189,203,223, 28,255,148,193,106,225,101,231,192,177, -220,241, 31, 55,172, 20,131, 86, 59, 38,197, 92,172,190,185,250, 80, 75, 2, 0,233,238,238, 62,113,199,142, 29,118,230,194, 46, -144, 96,224, 0, 26,175, 52,111, 14,153,189, 3,114, 76, 52, 56, 35, 13,177, 72, 84, 91,129, 88,175, 38, 73,146, 16, 10,133, 79, -188,196, 98, 49,170, 71, 59,234,208,172, 94,155, 3, 69, 81,136,142,142,134,209,104,196,208,161, 67,107, 52, 91,181, 80,163,102, -118,118,246, 49,165, 82,121,147,227,184, 87, 89,150, 5, 65, 16, 55,179,178,178,186,152,183,203,229,242, 62,109,218,180,153,193, -178,236,210,250, 52, 57,142, 3, 76, 5,224, 10,119,192,182, 83, 62, 74, 47,187,128,176,238, 9, 6, 62,184,125, 63, 27, 39,175, -167, 34,191,176, 28,109, 3,221,208,187,147, 31, 88,150,181, 56,157,213, 81, 40, 20, 1,193,193,193, 65, 70,163, 17,231,206,157, - 3,195, 48,104,213,170, 21,198,142, 29, 75,174, 94,189,122, 44,128,165, 13,213, 4, 16, 31, 27, 27,219, 51, 59, 59, 27, 0,110, - 89,176,255,237,154,140,240, 47,191,252, 2,157, 78,247,183,157, 29,187,124,141,207,222,240,193,216,143,182,225,155,228,221, 88, -183,110,221, 19,205,165, 13, 72,103, 67,225, 53,255,150, 81, 24, 59,108,240,235,160, 68,214, 72,122,144,129, 46, 29, 67,225,230, -230,134,155,137, 15,240, 56,179, 48,135, 32,240, 78,159,112,241, 82,173,214, 48,231,124, 60,182,212,167,169, 80, 40,154,108,218, -180, 73, 88,253, 59,145, 72, 84, 21, 5,175, 30, 13,127,186,201,144,207,163,154, 53, 67, 67, 67, 91,244,234,213,235,252,188,121, -243,108, 31, 63,126,140,139, 23, 47,194,199,199, 7, 90,173,182,166,251,166, 46,205,154,154,237,216,236,236,236,223, 26,147,206, -179,103,207,154, 0,120,214,180, 67, 93,219, 44, 57,246,150, 45, 91,202, 68, 2,193,174,175, 22,206,181,142,141, 61,140,240,136, - 40, 88,217,250,195, 68,103,160,160,176, 28, 69,247,179,176,100,201, 74,204,153, 51, 19, 95, 47, 94,104, 59, 98,212,216,157, 29, - 59,118, 12,184,114,229,138,238,101,201,119, 82, 32,218, 16,127,253,210, 4, 0, 40, 77,220,139,143, 71,134,163,172,236, 62, 62, -252,112, 46, 50, 51, 51,113,239,222,189,216, 23,156,206,151,214, 96,113,248,123,167,209, 58,241,240,128,148, 49, 26, 15,173,255, -110,169,189,173,141,204,245,250,241,253, 72, 75,203,174,243,127, 52, 26,141,225,192,129, 3, 56, 62,105, 28, 2, 8, 19, 28,191, - 92, 14, 55,165, 18, 37,227, 6,161,220, 72,163,233,145,107,144,216,216, 64,108,109, 99,113,196, 65,163,209, 24, 78,159, 62,141, -132,132, 4, 8, 4, 2,216,216,216,192,218,218, 26, 18,137,164,202, 88,153, 31,192,150,106,114, 28, 7,129, 64,128,219,183,111, - 35, 45, 45, 13, 14, 14, 14,184,120,241, 34,122,246,236,249,132,185,162, 40,234,137, 62, 94,150, 98,110, 90,172,201,128,161,158, -166,193, 39, 16,186, 0, 78,111,163,236,138, 18,112, 28, 5, 35,103, 15,150, 99,113,227,126, 1, 62, 24,213, 31, 0, 48,113,206, - 15,232,217,193,183,170, 9,178, 33, 40,149,202, 15, 90,181,106,181,114,194,132, 9,164,181,181, 53,244,122, 61,244,122, 61,146, -146,146,224,236,236, 12,153, 76,214,168, 48, 1,199,113,143,148, 74, 37,164, 82, 41, 56,142,123,212, 24, 13,130, 32,176,107,215, -174, 26,183,189,179,242, 14, 4, 21,221,179,176, 97,195, 6,152, 76, 38,112, 28,199,135,176,254, 9, 56,120,184,203, 61, 65,114, - 70,100,229,228, 99, 80,191,222, 16,136,108,144,154,145,143, 54,205,253, 20,111, 13,140, 80, 80,132, 9, 95, 44,219, 49, 17, 96, -183, 88,112,191, 51,137,137,137,194,248,248,120, 80, 20, 5, 59, 59, 59,200,100, 50,136, 68, 34, 72, 36,146, 42, 99,197, 71,176, -234,166,119,239,222,147, 89,150,157,197,178,108, 81,187,118,237,148, 11, 22, 44,176,207,200,200,192,237,219,183,177, 99,199,142, -124,142,227, 76,149,157,221,231, 63,235,111, 89, 16,217, 2, 65, 16, 13,238,231, 20, 28, 28, 44, 50,209,197, 31,219, 91, 49,175, - 9, 72, 59, 31, 83,105,249,163, 82, 35,121, 32, 57, 35,107,117,101,244,171, 86, 36, 66,225,228, 85,203,103,185,187, 56,211,232, -211,231, 53, 60,124, 84,132,153, 51,135,162,180, 84,135,237,191,172, 0, 32, 6,109,162, 16,218, 62, 10, 10,133, 23, 34,195, 35, - 21,231, 46,156,155, 8, 96,197,203,114, 13, 60,222,247,254, 68, 0, 11,189,189,189,207,254,176,100,137,127,143, 30, 61, 0, 0, - 39, 79,158,196, 79, 35, 71, 98, 62, 48,218, 22, 80,125, 12,204,124,161, 79,140, 6,122,145,255,118,131,101, 62,160,134, 28, 24, - 33, 53,217,238, 94, 48,107,178,175,119, 19, 63,249,213,191,118, 33, 37, 37, 19, 57, 57, 69,117,157, 52,150, 32, 8,182, 73,147, - 38,176, 51,234, 96,207, 25,224,166, 80,194,214,201, 25, 69,198,202,200,149,181, 53,196,214, 54,150, 62, 28,171, 52,155, 55,111, -142,156,156, 28,136, 68, 34,216,216,216,192,214,214,182,202, 96,153,205,149,165, 15, 92,130, 32,192,178, 44, 4, 2, 1,110,222, -188,137,200,200, 72,120,121,121, 97,231,206,157,232,211,167,207,223,162, 88,141,105,122, 50,247,185,170, 30,185, 34, 73,114,134, - 37,157,219,159, 64,220, 20, 38,219, 55, 65,202,122,128,230,236,160,231, 20,149, 77,130, 28,254,186,150,131,228,180,252, 39,154, - 11, 45, 55,207, 30, 74,169, 84,186,109,230,204,153,221,195,194,194, 64,211, 52, 0, 64, 38,147, 65,175,215, 67, 40, 20,130,166, -105,104,181,218,204,127,226,194, 53,159,243,227,199,143,131, 32,136, 42,163,107,110, 42, 84,171,210, 49,118,202,118,136, 5,192, -205,155, 55, 17, 20, 20,196,151,168,255, 16, 86, 82,169,179, 88,106, 15,214,164,131, 64, 40,132,183,215, 43, 96, 25, 61,138, 74, - 53,120,231,205,129,136,187,117, 7,135, 79, 95, 53, 25,141,236,106, 75, 53, 3, 3, 3,145,155,155, 11,138,162, 96,107,107, 11, -107,107,107, 52,107,214, 12,233,233,233, 79, 68,177,120,106,135, 36,201,217,135, 15, 31,118,167, 40, 74,110, 50,153,144,158,158, -142,155, 55,111, 98,205,154, 53, 57,106,181,186,107, 92, 92, 92,114, 35,100,107,107,182,171,169,179,122, 99, 34, 91,213, 43,127, -254,118, 18,195,137,229,203, 38,121,182,106,211,142,144, 82, 54, 37,154, 7,185,145,215,174, 94,142,152,179,229,143,201,105,197, -154, 30,185,185,185,181, 86,222, 40,146,236,217,172, 69, 75,146,101, 51, 64,137,130,240,221,202,207, 80, 88,164, 70,121,153, 22, -128, 24, 6,163, 0,122, 61,129,110,221,123, 96,231,174, 3,104, 23,214,142,162, 72,178,247,203,100,176, 0,128,162,168,165,251, -247,239,247,151, 74,165, 88,188,120, 49,108,109,109,113,101,225, 66,252, 36, 18,193, 10,192, 6,154,158,129, 23,103,176, 26,227, - 69,254, 21, 17,172, 6,225,233,233,185,162, 99, 68,135, 87,155, 52,111, 39,189,122,116, 47,238,223, 75, 67,126,126, 9, 56, 64, - 91,215,201, 35, 8,130, 19, 10,133,112,251,226, 43,120,183,106, 5,205,248, 33, 40, 50,210,240,251,235, 10, 36, 54, 54,184,219, - 43, 20,156,193,128,206,137, 57,150, 26, 23,142, 32, 8, 14, 0, 92, 92, 92, 32, 18,137, 32,149, 74, 33,149, 74,171,250, 94, 85, -127, 89,106,134, 88,150, 69,105,105, 41, 30, 61,122,132,241,227,199, 67, 38,147,129, 32, 8,228,228,228,192,199,199, 7, 20, 69, - 33, 51, 51, 19,167, 78,157, 66,147, 38, 77, 32, 22,139, 27,116, 49, 84,235,212,222, 90,169, 84,158,229, 56,174,245,245,235,215, -237,194,194,194,208,160, 8, 22, 33,130, 30, 62, 96,224, 9,150,251, 79, 95, 43,163,233,201,202,155,217,100, 89,130,187,187,123, -112, 80, 80,208,229, 53,107, 86,219,186,185,185,131,101, 25, 24,141, 70,148,148,148, 66,163,209,192,219,219, 27,214,214,214,220, -242,229,203, 9,134, 97,254,177,161,188,102, 67,101,142, 32,154,251, 95,145, 36,137, 41,175,121,163,168,200, 22, 20, 85,241,217, -210, 99,231,121,254, 88, 91,219, 58, 9, 68,214, 96, 73, 1,236,237, 29, 33, 16, 91,131, 53, 9,192,176,128,173,189, 11, 46,197, - 37,225,242,173,178, 15,114, 11, 96,201,208,125, 78, 32, 16,112, 20, 69,193,205,205,173,202, 76, 9,133, 66,243,181,139,210,210, - 82, 80, 20, 85,245, 29, 79,221, 21,201,212,212, 84,168,213,106, 92,185,114, 5,187,118,237,202,123,218, 92,245,234,213,107,130, - 76, 38,155,163,211,233, 22, 31, 59,118,108,125, 93,154,141,104,182,107, 76,228, 43, 48, 52, 52, 84, 40,228,138, 14, 31,217,187, -210,211,142,137, 35,144,250, 62,144, 92,154,104,115,205, 45,188, 71,251, 1, 68,243,175, 62,241, 25, 52,119,229,145,220, 92, 4, -163,150, 17,207, 28,208, 82,106, 37, 5, 56, 2, 23, 47, 28,173,104, 22, 44, 44, 67,185, 90, 7, 61, 77, 65,111, 32,160,163, 9, -244,232, 25,133, 77, 91,126,135, 42,183, 8, 28,208,234,101,187, 14, 2, 2, 2,218,122,120,120,224,147, 79, 62,129,110,199, 14, -148, 3, 24, 0, 96,127,101,165,218, 22,152,198,223, 45, 47,208, 96,121,120,120, 76,110,221,186,245,123,155,127,222,110,179,108, -238, 23,165, 69,137,183, 40,131,150,182,214, 27,141,134, 7,170,130,213,245,152,161,138, 90,167,131, 35,100,118,246,208, 63, 21, -185,226, 12, 6,176,180, 1, 34,203, 31,142, 28, 65, 16,224, 56, 14, 86, 86, 86, 16,139,197, 53, 70,174, 26, 18,193, 2,128,226, -226, 98,236,218,181, 11,237,219,183,135, 76, 38, 3, 69, 81,104,221,186, 53, 18, 19, 19,225,231,231, 7, 0,216,191,127, 63,222, -120,227, 13,220,191,127, 31,193,193,193, 54, 49, 49, 49, 13, 50, 88, 12,195,224,248,241,227,118, 28,199,189,202,113, 28,242,242, - 26, 55, 26,150, 97, 24,168,213,106, 28, 63,126, 28, 89, 89, 89,144,203,229, 40, 41,177,133,157,146,173, 50,139,230,151,133, 15, -222, 47,222,125,247, 93, 91, 27, 27, 27, 48,140, 9, 66,161,176,202,184, 10,133, 34, 36, 37, 37, 97,228,200,145, 37,169,169,169, -159, 55,114,212, 15, 33, 16, 16,238, 37, 37, 69, 40, 43, 45, 6, 69,193, 11, 0,133, 70, 76,253, 64,146,100,213,187,249, 69, 16, - 4, 68, 66, 10,114,119,215,170,142,239,149,209, 59,190,137,240, 5,250, 42, 0,195, 1,188, 93, 84,102, 16, 20,150,105, 1,147, - 1,143, 82, 31,161, 88, 77,131, 51, 25,241, 56, 67, 5,181,158, 69, 65, 97, 25,218,180,237,179,230,244,233,211,179,105,154,158, - 5,224,144, 37,215,124, 76, 76, 12,206,157, 59,135, 11, 23, 46,192,220, 81, 26, 0,236,236,236, 16, 29, 29,141,110,221,186,241, -185, 80, 7, 52, 77, 47,238,221,187,247, 44,185, 92, 46, 93,177, 98,133,189,183,183, 55, 8,130, 40,125, 58,114, 21, 22, 22, 54, -123,198,140, 25,138,161, 67,135, 78, 1,176,190,145, 63, 87, 87,103,245, 58,203,168,154,166, 98,200,205,205,158,176,113,219, 88, - 87,107,225,163, 44,164,126, 87,105,190, 40, 64, 83, 10,156,222, 14,209,171, 95,165,142,234, 62,209, 45,171,108,245,187,153,217, -153,155,106,121,208,177, 73,201,105, 88,183,110, 21,230,204,153,136, 29,219, 87,129,229, 68, 40, 83, 27,225,174, 12,129,193,200, -130, 32,133,232, 20,222, 25, 23, 46, 93, 5, 24, 26, 83,198, 95,126,233,230, 90,187,119,239,222,181,180,180,180,160,185,115,231, - 98,171,135, 7,108,109,109, 49,117,222,188,203, 12,195,132,243,119,201,243, 49, 88, 22,135,228, 60, 60, 60, 6, 43, 20,138,101, -219,183,111,183,202,202,202,130, 50,160,133,221,159,127,236,210,187,217,136,180,170,194,162, 49,241, 89,234,122,135,219,147, 36, - 9,211,194,169, 40, 48, 25,224,251,231, 37, 72,108,108,144,220, 39, 12,156,193,128,240,216, 84, 72,108,108, 32,144, 90, 53,248, - 96,106,138, 88, 85,127,153, 11,227,250, 48, 24, 12, 14, 61,123,246, 68,143, 30, 61, 48,100,200,144,170,166,192,144,144, 16,252, -254,251,239, 24, 60,120, 48,226,227,227,161, 84, 42,209,172, 89, 51, 52,107,214, 12,167, 79,159,110, 88, 28,180, 50,130,213,167, - 79,159, 82,130, 32,110,114, 28,215,250,218,181,107,118, 13,213, 48, 27,168,227,199,143,163,127,255,254,240,243,243, 67, 92, 92, - 28,162,191, 90, 14,129,141, 11, 64,186,129, 99,185,170,200,150, 37,125,176, 68, 34, 81,100,147, 38, 77,144,157,157, 3,137, 68, - 2, 71, 71, 7, 88, 89, 89, 65, 34,145, 98,201,146, 37,236,166, 77,155,214, 18, 4,241,149, 74,165, 42,108,132, 57,111,234,226, -226,242,203,152,209,163, 58, 56, 59,187,192,221, 93,129, 25,211,103, 70,237,248,125,103,194,227,199,143, 71,100,101,101,221,178, - 84,139, 32, 8, 24, 12, 6, 80, 20,133,253,201,174, 80, 27, 8,148,102,196,226,227,215,124,170,204,150,185,169,215, 60,253, 5, -207,139,129,162,168,173, 83,167, 78,237, 58,108,216, 48, 66, 68, 26, 13,209,199,182, 9, 24,198, 68,124, 54,235, 71,230,204,249, -179, 36,195,152,136, 33, 35,167,177,135, 79,221, 34, 63,152,178,156, 9,233,216, 31,183,111,223,150, 15, 24, 48, 96,145,209,104, -180,200, 96,153,243,184,150,223,231,155, 8,235,225,228,201,147,107, 1,172,237,213,171, 87,182, 76, 38, 67,121,121,249,223,250, - 41, 6, 7, 7, 91,167,164,164,136,196, 98, 49,218,182,109,235,202,178,108, 50, 65, 16, 43,142, 31, 63,190,185, 33,191, 85, 75, -100,171,209,211, 52,216, 58, 49, 3, 91,181,107,102,155,100, 61,215,214, 74,168,187,241, 74,178,212,142, 0, 80,162,149, 63,188, -152, 49,162,156,204,165,218,180,234,222, 28,182, 66,217,107, 0,106, 52, 88, 4,112, 83, 93, 86,214, 91,163, 53,225,236,153,120, - 12, 29,234, 13, 29, 77, 66,171, 35, 65, 27, 57,144,148, 8, 4, 37,194,152,113,239,193, 96, 98, 81,172, 82,129, 0,226, 95,182, -235,128, 97,152, 25,131, 6, 13,106,183,120,241,226,224,169, 83,167, 2, 0,148, 74,101,167,217,179,103,223,249, 7,230,193,122, -105,154, 7,159,142, 96,213,121, 96, 93,186,116,217,108, 52, 26, 95, 47, 44, 44,116,124,239,189,247,232,252,252,124,236,219,183, - 15, 63,253,244,147, 70,109,164,174, 23, 23,152, 70,167,168,212, 25,150, 20,138, 36, 73, 66,100, 52,130, 51,253, 39,114,197,234, -245, 85,145, 44,161,149,172, 97, 57, 82, 25,193,170,201, 84,153, 35, 89, 13,121,216, 74, 36,146,226, 11, 23, 46,184,101,100,100, - 60,209,161,221,215,215, 23, 0,112,237,218, 53, 92,185,114, 5, 35, 70,140,128, 64, 32,128, 72, 36,194,205,155, 55,203, 26,146, -102,179,225, 49,143, 34,148,203,229,125, 58,116,232, 80,219,232,193,122,181, 30, 63,126, 12, 63, 63, 63,232,245,122, 56, 56, 56, -160, 64,245, 8,143, 31,165, 64,163, 79, 70, 19,185, 20,185,185,185,144, 72, 36,150,222,112,140,185,224,210,235,245, 80,169,178, -161, 84, 42,241,235,175,219,177,121,243,230, 17, 42,149,106,119, 99,174, 53,133, 66, 49,173, 95,191,126,139, 94,127,253,117,129, - 70, 93, 14,142,173, 48, 60, 34,177, 8,223,127,255,125,179, 83,167, 78,221, 88,179,102,205,215, 82,169,116,209,195,135, 15, 13, -245,229, 57, 0,108,221,186, 21, 0, 32,235, 56, 15, 51,134,189,130,183, 39,110,195,138, 21,123,159, 56, 86,138,162,176, 96,193, - 2,190, 68,125,129,116,236,216, 49,100,214,172, 89, 66,115,159, 56,165,247, 98, 19, 77,211, 44, 0, 4,181,126,245, 63,145,202, - 62,192,253,251,247,177, 98,197, 10,168,213,106, 8, 4, 2,145,209,104,180,232, 55,122,246,236,137, 62,125,250, 84, 53, 19,186, -184,184,128,166,105,152, 76, 38,222, 92, 53, 48,146,213,191,127,255, 89, 44,203,114, 44,203,206, 53,127, 31, 26, 26,106,229,230, -230,118,113,213,170, 85,206, 38,147, 9,211,166, 77,115,200,207,207,119,152, 52,105,210, 76, 0,155,107, 41, 39, 26, 50,187,186, - 69,211, 52,212,212,167,139, 32,136, 38,214,214,246,200, 67, 54,138, 93,140, 33,197,206,166,194,227,170, 15,110,122,165,183, 9, -178, 98,140,126,100,169, 1,246, 86,118, 0,203, 5,212,250,156, 99,217,227,137, 9,119,122,120,122,248, 81, 7,254, 60,131,254, - 3, 7, 67,103, 32,160,163, 73, 16,148, 16, 4, 37, 66,187, 14,225,240,245, 11, 4,203, 2,119,226, 99,105, 35,203, 30,121,153, -242,190,250, 60, 88,211,190, 63,137,217, 11,191,195,168, 33,125, 48,118,236,216,127,114, 30,172,151,182, 15, 86,109,230,234, 29, - 71, 71,199,145,227,198,141,179,186,118,237, 26, 22, 46, 92, 40,136,142,142,166, 99, 98, 98, 76, 12,195, 76,203,202,202,218,216, -144, 31, 37, 73, 18, 77,182,255, 5,165, 92,142,123, 81,237,158,136, 92,157,109,237, 9, 86,175, 71,175,148,146, 6, 31,140,185, - 41,203,108,172,204,230,170,142,169, 20,234,170,129,215, 56,239,213,135, 31,126,136,205,155, 55, 35, 60, 60, 28,254,254,254, 16, - 8, 4, 85,205, 82,141,137, 96,153,105,240,232,193,167,106,243,222,222,222,184,117,235, 22,236,237,237,241,203, 47,191,192,203, -211, 3,163,123,251,194, 96, 48,192,104, 52, 66,173, 86,155, 35, 88,245, 38,148,101,217,132,125,251,246,249, 13, 27, 54,140, 19, - 8, 4,132, 94,175, 7, 0,172, 94,189, 58,183,161, 51,174, 87,214,134,134, 72, 36,146, 45, 35, 70,140,176,109,214,172, 25,114, -114,114,112,245,234,101,204,156, 57,227,170, 80, 40,208, 69,245,237,215, 53, 56,184, 5, 38, 78,156, 72,134,132,132,204,153, 57, -115,230, 52, 79, 79,207,177, 25, 25, 25,187,234, 51, 89,191,255,254, 59, 0,224,221,239,239,194, 96,168, 40,152, 55,108,216, 0, -185, 92,254,196,190, 15, 30, 60,224, 71, 17,190, 64, 76, 38, 19, 71,146, 36,145,158,158, 78,203,100, 50,194,201,201, 73, 32,145, - 72,160,215,235,171,140,214,253,251,247,113,232,208, 33,100,100,100,192,201,201,137,180,183,183,135,201,100, 42,178,244,154,175, - 62, 90,208,108,168,120,115,213,112,206,158, 61,187, 22,192, 90,243,231, 30, 61,122,140, 39, 8, 98,186,209,104,180,219,188,121, -179,131,157,157, 29,113,232,208, 33,195, 15, 63,252, 80, 78, 81, 84, 17,128,229,117,149, 41,207,107,118,245, 58, 34, 95, 96, 76, -184, 87, 84,158,226, 35,180, 81,176,241, 58,226,210, 39,233, 51,130,138,200, 0,119,162, 69, 11,211,208,220,132,139,163,141, 15, -195,243,114,114, 9,134,227,106,157,196,169,168,164,100,253,150,159,119,126,188,111,207, 54,111,169,157, 12,163,222,158,140,227, - 39,206, 67, 44,145,225,234,245, 27, 48,208, 12, 82, 31,103, 98,196, 91,163,160,112,115, 6,165,201, 82,233, 13,134,141, 47, 83, -222, 63, 49, 15, 86, 88, 56, 46,238, 93,142,223,147,189,145,185,112,225, 63, 61, 15,214, 75, 23,193,170,145,246,237,219,219, 22, - 23, 23,127,255,233,167,159, 90,169,213,106,228,231,231,163,160,160, 0, 87,175, 94,141, 54, 26,141, 31,215, 53, 74, 3, 21,171, -109,223,126,186, 80,164, 40, 10, 78,174,110,144,216,216,130, 51, 24,170, 34, 87, 34,153, 53, 88,189, 30, 44,109, 0,106,111,206, -169, 81,147, 32,136,191, 69,173, 26, 96,174,158,208, 52, 71,196,106,154, 84,212,203,203, 11, 95,127,253,245,223,166,105,176, 36, -157, 64,197,104, 65,142,227, 90,155, 35, 79, 28,199,181,150,203,229,125, 44, 28, 57, 88,163, 38,203,178,232,210,165, 11,162,163, -163,113,235,214, 45,144, 36,137,190,125,251,130, 32, 8,216,219,219, 67, 32, 16, 84,153, 57,243,128,128,186, 52, 25,134,121,251, -167,159,126,250,236,200,145, 35, 95,124,244,209, 71, 86,175,190,250,170,185,159, 87, 30, 42,214,120,108, 80, 58, 89,150,157,127, -243,230, 77, 91,147,201,132,197,139, 23,227,250,245,235,234, 7, 15, 30,124,170, 82,169,182, 0,224,138,138,203, 70, 61,124,248, -104,221,151, 95,126,105,219,189,123,119, 92,187,118, 77,234,229,229,245, 37,128, 93,245, 29,251,213,171, 87, 65, 81, 20, 76,133, -105,152, 56, 99, 39,108,100, 66, 36, 37, 37,161,160,160,160,234, 90,171,163, 41,169, 70,205,103,132,215, 4, 16, 19, 19,243,199, -218,181,107, 63, 28, 51,102,140,136,227, 56, 38, 45, 45,205, 8,128,144,203,229, 84, 76, 76, 12,123,240,224, 65,104,181, 90,120, -122,122,146, 30, 30, 30, 68,116,116, 52,155,152,152,120,149,227,184, 89,150,166,179,186,185, 18, 10,133,208,106,181,150,154, 43, - 62,143,234,102,222,222,189,123, 21, 58,157, 14, 98,177, 24,187,119,239,166,183,109,219,118,167,180,180,180,115, 92, 92,156,182, - 49,154,141,152,166,161, 78,205,178, 34,242, 80,244,241, 59,173,141,221,126, 36, 62,202, 46,136,172,170,184, 18,132,203,110,247, -150, 46,210,246,109, 50,109,206,125, 75,150,115,154,131,181,105, 62,124,248,208, 96, 27, 18,242,198,212,207,230,158, 94, 56,127, -158,237,210,111,150,225,118,255,161, 40, 46,209, 64,111, 96, 64,155, 88,204,159,255, 21,220,156, 28,224, 40,162,203,139,181,196, - 27,137,137,137,244,203,148,239,207, 56, 15,214,255, 71, 58, 95, 42,234,117, 31, 26,141,102, 97, 96, 96,160, 56, 49, 49, 17, 15, - 30, 60, 64,114,114, 50, 24,134,185,159,153,153, 57,160,177, 63, 74,146, 36,236,237,237, 33, 22,139,209,233, 86, 38,196, 34, 17, -196,214, 21,203, 83,245, 74, 41, 1, 56, 14,164, 88,210, 96,205,167,231,188,122,150, 81, 68, 12,195, 84,205,208, 94,125, 61,195, -167, 71,171, 53, 52,114, 69,146,228,140,203,151, 47,219,165,165,165,129,227, 56,236,221,187,215,110,200,144, 33, 51, 26, 19,189, -226, 56, 14, 5, 5, 5, 96, 89, 22, 66,161, 16,221,187,119, 71,104,104, 40,202,203,203,193, 48, 76, 85,243,165, 72, 36,106,208, - 40,194,220,220, 92, 13,128, 5, 70,163,113,227,156, 57,115, 22,180,108,217,242,189, 79, 62,249,132, 68, 35, 7, 69, 16, 4, 97, - 50,153, 76,216,189,123, 55,246,236,217, 83,198,113, 92,160, 74,165,202,174, 22,189,219,126,229,202,149,232,193,131, 7,223,127, -248,240,161, 93, 73, 73, 9, 80,207, 28, 54,149,215, 38,252,253,253,193, 48, 12,150, 77,244, 68, 89, 89, 43, 48, 12, 3,147,201, - 4,153, 76,246,196, 18, 68,252, 44,238, 47,184,102,204,178, 51,103,207,158,125,244,235,175,191,158, 49,101,202,148, 14, 99,198, -140, 17,138, 68, 34, 54, 51, 51,211,180, 99,199, 14, 34, 32, 32,128, 20, 10,133,196,241,227,199,217,107,215,174, 93, 49,153, 76, -203, 0, 52,104, 41,146,234,230,138,239,115,245, 92,217, 53,108,216,176, 49, 67,135, 14,181, 10, 9, 9,145,252,244,211, 79,197, -106,181,186, 54,115,245,183,224,101,109,211, 52, 60,167, 9, 72, 1, 0, 42,149,106,227, 87,243,206, 77, 28,229, 63, 50,224, 61, -231, 87,112, 66,157,139, 34, 33, 69,218, 57,144, 8,241,161,160, 41,126,232,118,226,218,222,100,149, 74,181,181, 46,157, 27, 55, -110,196,145, 36,217,229,237,119,222,221, 55,110,204, 56,229, 23,159,124, 44, 60, 20,125, 26,140, 81,143,243, 39, 79,194,197,134, -100,104,117, 78, 86,137,145, 28, 20, 23, 23,247,210,245,191,170,156, 7,107, 34,128, 17,243,230,205,219, 49,113,226, 68,176, 44, -139, 51,103,206, 96,221,244,233,152,207, 48,163,109, 1,205,199, 21,251,240, 60, 47,131,213,174, 93,187, 87,212,106,245, 47, 6, -131, 33,132,101, 89,241,217,179,103,161,211,233,144,152,152,168,101, 89,246,143,103,248,205,180,190,125,251,146, 79,175, 23, 87, -139,201,177,180,115, 93, 90,207,158, 61,159,155, 38,203,178, 25,213,215, 48,171, 77,183,250,103,147,201,148, 97, 73, 66, 89,150, - 93,218,169, 83,167,191,125,215,200, 66, 44,165, 71,143, 30,244,211,166,171,166,191,171, 29,127,134,165,250,249,249,249, 57, 0, - 62, 96, 89,118,213,216,177, 99,231, 1,184,223, 72,131,181, 40, 56, 56,120, 78,197,159,196,194,172,172,172,236, 26, 76, 93,158, - 82,169,124,207,203,203,171,106, 1,232,250,142,189, 87,175, 94,116,125,139, 60, 87,143, 92,177, 44,155,193,223,242, 47,148,243, - 26,141,230,252,146, 37, 75, 58,175, 91,183,110,230,135, 31,126,216,126,248,240,225,130, 46, 93,186,224,240,225,195,204,153, 51, -103,174,106,181,218,165, 13, 53, 86, 4, 65,148, 63,125, 15,213, 81, 9,209,241,217,208, 48, 78,158, 60, 57, 53, 60, 60,124,222, -174, 93,187, 82,125,124,124, 36, 4, 65,152, 44, 52, 87,207,125,154,134,186,140, 28, 85,174, 27,184,125,228,135,135, 66, 62,122, -215,167, 79,120, 91,169,103, 83,133, 60, 41,173, 0,233, 55,163,181, 15,207,174,123,196,233, 10, 6,194,130,136,123,108,108,108, -188,159,159, 95,224,198,159, 54,191, 43,162,168, 94, 44,199,133,126, 62,105, 52, 72,130,136,163, 25, 38,186,180,172,108, 75,125, -125, 66,255,237, 72, 68,162,209,147, 38, 77,194,175,191,254,138,125,171, 86,161, 79, 70, 6,126, 23,137, 96, 37, 18, 97, 3, 77, - 79, 0,111,176, 26, 69,173, 78, 36, 48, 48,240,247,194,194,194,161,165,165,165, 38,147,201,196, 16, 4, 97, 34, 8, 66,203,178, -236, 87, 44,203,254,128,138, 78,104,245,193,135,226,121, 77, 94,147,215, 52,211,217,206,206,238, 19,150,101, 81, 94, 94,190,202, - 66, 99,197,159,207,127, 72,179, 91,183,110, 43, 73,146,236,192, 48,204,207,103,206,156,217,244, 44,154, 13,236,252,222,144,116, - 10,228,114,249, 56,206,209,102, 0,140, 2,127,142,166,146, 40,186,240, 80,101,228,138,229,243,221, 50,205,164,164, 36,206,201, -201, 9,133,133,133,216,211,172,217, 19,219,108,129, 13,181, 68,176, 94,104, 19, 33,199,113,237, 0,184,154,235,255, 0,146, 0, -180, 5, 96, 5, 64, 15,160, 28,128, 75,181,127, 41,168,220,102,222,126,142, 32, 8, 35, 94, 34, 90,242,154,188, 38,175,201,107, -242,154,188, 38,175,201,107, 62,163,193,234,143,138,192, 14, 55, 99,198,140,153, 28,199, 69,205,152, 49, 99,102,181,207, 85,219, - 43,118,231,250, 63,181,189, 29, 94, 50,248,139,143,215,228, 53,121, 77, 94,147,215,228, 53,121,205,231, 98,176,234,122,175,237, -239,106,239, 47, 20,162,142,147,116,251,255,249, 68,223,230, 53,121, 77, 94,147,215,228, 53,121, 77, 94,243,127, 78,179, 62,237, -219, 53, 25, 44,130, 32, 14,113, 28, 55,160,250,123,181,237, 3, 0,192,188,205,252,119,245,237, 4, 65,252,133,151, 8,222,221, -243,154,188, 38,175,201,107,242,154,188, 38,175,249, 76,252, 27, 35, 88,181,142, 34,228,118,239,166, 50,131, 97, 39,182,146,137, - 0,192,160,213,208, 30,137, 40, 37,134, 13, 99,192,195,195,195,195,195,195,195,243,130, 33, 8,226,208,140, 25, 51,102,253, 27, -210, 42,168,205, 92,229,135,201, 92, 4,250,162, 64,198, 68, 7, 1,128,128,228,238,230,135, 57, 38,115,187,119,231, 63,111,147, - 21, 21, 21, 53,139,227, 56,119,161, 80,248,151, 92, 46, 63,179,105,211, 38, 35,127, 25,189,120, 56,142,171,119,177,198,182,109, -219, 58,234,245,250,229, 44,203,118,175, 92,231,239,140, 72, 36,250,236,198,141, 27,133, 4, 65,212, 58, 36,218,219,219,123,135, -159,159, 95, 32, 87, 1, 0, 60, 49, 47,151,249, 59,243,246,199,143, 31,223,203,200,200,120,203,210,180,123,121,121,249, 74,165, -210,119, 8,130, 8,174,212, 73,212,233,116, 63,167,167,167, 63,250, 95,203, 71,133, 66, 97,197,113,220,235, 66,161,112,140,147, -147, 83,251,188,188,188,249, 89, 89, 89,223, 61,195, 51, 98,154,131,131,195, 8, 7, 7,135, 38,133,133,133, 15, 75, 75, 75,119, - 1, 88, 1,160,222,251,244,171, 73,202,142,175,246,235, 50,247,220,225,179, 11,191, 92,151,117,229,233,237,243,167, 41,156,187, -247,136,152,123,228,175, 75, 95, 45, 89,151,213,208,181, 45,201,202, 23, 80, 49, 98,204,220,193,245,191, 53, 95, 66, 0, 76,103, - 24, 70, 72,146,228,119,217,217,217, 23,254,219,175,165,102,205,154,125, 33, 22,139, 39,144, 36,249, 48, 39, 39,103,156, 74,165, -122, 94, 83,157,144, 62, 62, 62,182,105,105,105,101,176,108,242, 98, 30, 0, 29, 59,118,204,161,105,218,173,174,125, 68, 34, 81, -238,149, 43, 87,220, 95,194,195,207, 55, 55,253, 1,200, 5, 64, 85,126, 54, 84,190,231, 84,251, 46,167,150,237,255,188,193,202, - 12,134,157, 64, 95, 20, 88,144,115,103,120,158,234,198,155, 0,224,170, 8,217,229,236,222,124,103,102,176,152,150, 55, 27,108, - 35,148, 9,214, 83,148, 48, 68,103,208,187, 8, 5,194,124,218,100,188, 65, 26,184,137,217, 73,251, 30, 91,242,195, 3, 6, 12, - 8, 4, 96, 31, 26, 26, 26,115,254,252,249,246,223,125,247,157, 98,207,158, 61,173, 99, 99, 99, 71, 14, 28, 56,240, 79,142,227, -142, 29, 58,116, 72,219,160,163,233,210, 69,224, 86,236, 52,154, 18, 8, 6, 2,104,205,113, 0, 8,234, 38,107,164,255,202,117, - 44,248, 25, 21,115,180, 52,238,194, 14,117, 10, 36, 88,250,115, 33,197,117, 54, 50,196,121,142, 20, 45,191, 18, 87,152,108,185, - 1, 80,244, 20, 11,136, 31, 1,192, 96,226,222, 75, 79, 87,157,120,150,253,106,121,128,247, 2,176,157, 32, 8, 33,128, 13, 12, -195,236,207,201,201,137,135, 5,147,118, 90, 66,243,230,205, 93, 9,130,184,185,114,229, 74,231, 14, 29, 58, 80, 44,203,226,212, -169, 83,111,205,153, 51,167, 79,139, 22, 45, 90, 86, 94,244, 53,226,231,231, 23,120,242,228,201, 54, 71,143, 30, 69,120,120, 56, - 88,150, 5,203,178,112,112,112,192,193,131, 7,209,161, 67,135,170,239,220,221,221,209,165, 75, 23,100,100, 88,246, 44,111,210, -164,201,235, 45, 90,182,153,242,233,231,211,221,221,156, 93,108, 77,140,137,206,204, 84, 41, 87,125,183,172,163, 80, 40, 92,159, -146,146,178,191, 49, 21, 37, 79, 79,207,225, 66,161,112, 0,128,224,202,239, 18,141, 70,227,161,140,140,140,157,150, 22,228,173, - 91,183, 62, 71,146,228, 43, 13,249, 97,134, 97, 30,223,186,117, 43,178, 49,121,164, 84, 42,135, 41,149,202,159, 58,118,236, 40, - 11, 9, 9,129, 72, 36,194, 55,223,124, 51,205, 2,131, 37, 0, 48, 77, 38,147, 13,183,182,182,246, 43, 47, 47,127,160,213,106, -247,136,197,226,158,223,127,255,189, 87, 68, 68,132,109, 78, 78, 14, 65, 81,148,251,159,127,254, 57,122,205,154, 53,125, 76, 38, - 83,143,250,174,173,162,135,236, 92,137, 48,168,115,209,131,211,115, 1,244,125,122,187, 73, 39, 29, 67, 9,189, 6, 80, 92, 92, -122,165,105,179,184,128,246,244,244,252,222,221,221,125,172, 86,171,213, 17, 4,193, 85,190,204,181, 92, 0,128,193, 96, 40, 74, - 78, 78,110, 86,151,208, 43, 29, 29,175, 83, 36, 85,235,220, 77, 12,203,100,164, 94, 41, 10,123, 14, 21,166,190,165,130, 0, 0, - 32, 0, 73, 68, 65, 84,152, 79,226,227,227,135, 10, 4, 2,162, 77,155, 54,214, 0,250, 88,106, 46, 20, 10, 69, 32, 65, 16,179, - 57,142,139, 81,169, 84,235, 1, 48, 74,165,178, 27,199,113, 95, 84, 30,239, 55, 89, 89, 89,167, 43,175,129,245,254,254,254,175, -221,191,127,127, 67, 86, 86,214,162,198,166,215,223,223,127,226,228,201,147,231, 77,152, 48,193,170,160,160,192,167,119,239,222, -191,169, 84,170,206,207,114, 14, 66, 67, 67,133,217,217,217,211, 92, 93, 93, 63,106,215,174,157,226,206,157, 59,217,105,105,105, -171,229,114,249,138,184,184,184,122, 13,123,171, 86,173,148, 2,129, 96, 44,128,209,149, 5,232,239, 0,126,190,113,227,198,195, -255, 5,131, 69,211,180,219,137, 69,115, 65, 80, 20,164,157,123,130,101, 89,228, 47,159, 7, 83, 97, 62, 92, 22,173,134,201,100, - 66,207,158, 61,221, 94,210,200,213,181,127, 91,154,107, 52, 88, 98, 43,153,136, 49,209, 65,121,170, 27,111,182,143, 90,109, 15, - 0,215,142, 78,121,211,217,163,197,109,177, 64,150, 44,177,147,238,125, 99, 96,207,144,161, 3,186, 16,158, 10, 55,100,168,114, -221,183,252,126, 44,234,208,177,211,123, 81, 49, 47, 69,189,148,150,150, 46,246,241,241,113, 61,121,242,100,170, 88, 44,182,146, - 74,165,196,176, 97,195,172, 70,142, 28,217,252,212,169, 83,126, 71,143, 30, 29,250,218,107,175, 29, 21,137, 68,127,253,241,199, - 31,245,174, 79,230,214,242,245,230,100,153,228,143, 65,175,247,125,165,127, 47, 55,177,143,220, 21, 44, 43, 69, 82, 10,237, 29, -125, 62, 46,234,240,209,227,159, 51,193,175, 15,203, 75,220,127,203,210,147,211,162,133,157,131, 21,201, 77,181, 18,115, 35,186, -134,251,251, 14,236, 27, 78, 52,105,218, 4,201,137,201,126,167,207,198,140,149, 80,119, 30,105, 13,196,239, 90,150, 88,153,144, - 80, 90, 92,151,150, 88, 64,108,189,153,112, 95,201, 48, 12,190, 89,246,117, 52,203,145, 85,179,171,155, 95,230, 89,200,191,253, -246, 91,232,245,122,180, 11,105,177, 21,255,153, 55,198, 18,126,187,115,231,142,179, 70,163,193,209,163, 71,103,170, 84,170,153, -199,142, 29, 83,165,167,167,127,174, 82,169,126,127, 14,181,251,181, 27, 54,108,112,110,223,190, 61, 69,211, 21,243,155, 70, 68, - 68, 80,179,102,205,114, 90,178,100,201, 42, 0, 35,234, 40, 92,184,163, 71,143,226,151, 95,126,201, 95,182,108, 89, 6, 0,184, -184,184,120,188,245,214, 91,174,219,183,111,207, 91,185,114,101, 6,199,113,112,118,118,246, 28, 62,124,184, 43,199, 89,150, 84, - 79, 79,207, 38, 45, 91,135, 76,249,121,235,214, 14, 37,133,133,186, 31, 87,110,136,211, 11, 36, 26,159,224, 64,209,220,121,139, -236,191,250,114,230, 7, 52, 77,223,206,200,200, 72,177,244, 32,229,114,185,183, 68, 34,217, 59,107,214,172,150,145,145,145, 66, - 55, 55, 55,228,228,228, 32, 41, 41,169,229,197,139, 23, 95,223,191,127,255, 52,189, 94,255, 70,118,118,118,189,149, 9,142,227, - 2, 14,124,243,181,155,196,217, 5,172,209, 8,199, 86, 33, 85,219,178, 78, 29, 3,107, 52,130, 53, 26,225,213,255,245,170, 72, - 94,183,110,221, 26, 53, 37,185,135,135,135, 50, 32, 32,224,215, 25, 51,102,136,244,122, 61,110,220,184,129,203,151, 47,179,185, -185,185,245, 77,100, 43, 32, 8,226,248,188,121,243, 60, 35, 35, 35,109,243,243,243,193, 48,140,203,254,253,251, 39,134,134,134, -218,121,122,122,138,183,109,219,102, 94, 33,192,201,207,207,207,105,228,200,145,134, 95,126,249,101, 26,128,101,181, 69,174,138, - 31,176,115, 85,148, 95, 84,179,176,119,144, 45, 56, 22,245,105,111, 28,113,240, 35,171, 34, 89, 81,126,126,182, 37,153, 86,211, -109,236, 90, 58,149,100, 70, 79,143,242,243,219,124,244,225, 67, 75, 22, 77, 39, 61, 60, 60,190,239,215,175,223, 91, 27, 54,108, -144, 37, 38, 38,202,130,131,131,193,178, 44, 76, 38, 19, 24,134, 49,175,187,137,234, 19, 6,215, 6, 69, 82,158, 23,247, 38,184, - 89, 89, 89, 85,221,135,230,119,181, 90,141, 62, 99, 58, 62,151,135, 45,203,178, 98,243,117,109, 50,153,164, 0,132, 0, 44,157, -192,114,193,165, 75,151,134, 29, 57,114,100,212,162, 69,139, 2, 84, 42,213,100,150,101,231, 38, 38, 38,118, 1,128,224,224, 96, - 49,128,211, 10,133, 98,220,135, 31,126, 56, 97,210,164, 73, 24, 51,102,204,220,172,172,172,197,141,189,239,197, 98,241,151, 31, -126,248,161,149,209,104,132,149,149, 21,104,154,110,250, 44,199, 31, 28, 28, 44, 42, 44, 44,220,179, 96,193,130, 1,131, 6, 13, - 50, 47,225, 37, 63,119,238,220,146,207, 62,251, 44, 60, 52, 52,116,112,109, 38, 43, 52, 52, 52, 4,192, 87,190,190,190,125,198, -140, 25, 67, 69, 68, 68,160,188,188, 28,199,143, 31,159,189,119,239,222,217,161,161,161,151, 0,204,141,139,139, 59,243,178,155, - 44,202,198, 22, 73,111,116,131, 95, 98, 1, 0, 32,123,125,197,210,144,118, 95,126,203,135,248,254, 13, 6,171, 62, 52, 26, 77, -232,204, 41,163, 65,146, 21,181, 68,255, 38,222, 88, 50,107, 60,113,224,208,177,208,122,194,155, 43, 25,134, 9,112,114,114,250, -188,160,160, 64,186,106,213, 42,105,102,102,102,208,158, 61,123,184,248,248,120,136, 68, 34,216,219,219,163,123,247,238,146,168, -168,168,166,151, 46, 93,242,222,187,119,239,160,126,253,250,253,124,248,240,225, 63,107,211,117,110, 57, 48,192,197,213,245,236, -183,139,222,119,106,217,196, 15, 6,163, 17, 25,185,153,224, 32,134,220,205, 26,163, 94,111, 35,138, 8, 19,249,175, 88,119,242, - 12, 65,190,246,106,110,194,193,132,250,142, 49, 50, 84,118,173, 91,167, 87,218,190,214, 39,156,244, 15,110, 14,145, 68,246,159, - 90, 84,104, 40, 90,133,134, 18,227,199,151, 53,137,143,139,159,115,244,228,213, 89,246, 34, 83,236,133, 56, 77,251,218, 75, 90, - 72,204,107,167,189, 49,228, 77, 4, 6, 6, 62,241, 48, 55,255,157,154,154, 10,130, 32,144,159,159, 15,150,131,184, 17,121,131, - 43, 87,174,160, 77,155, 54,232,221,187, 55, 70,140, 24,161,216,191,127,255,111,107,215,174,237,146,153,153, 57,254, 89, 46, 22, -134, 97, 34, 66, 67, 67, 41,154,166, 65, 81, 20, 10, 10, 10,144,146,146, 2, 63, 63, 63,138, 97,152,174,245, 24, 13,132,135,135, - 99,217,178,101, 25,231,206,157, 11, 5,128,206,157, 59,199,117,232,208,193,117,229,202,149, 25, 23, 46, 92,104, 11, 0,225,225, -225,177, 97, 97, 97,174,150,166, 73, 38,147,189,251,201,167,159,185,150, 20, 22,105,141,101,101,180, 13,203,152,236,164, 66,162, - 52,175,160,248, 81,186,157,230,221, 9, 83, 4, 95,206,152,250, 46, 0,139,218,236,229,114,185,119, 80, 80,208,181,205,155, 55, -187, 57, 59, 59,163,184,184, 24, 5, 5, 5,184,118,237, 26, 88,150, 69, 84, 84,148, 36,180,117,235,208, 21, 43, 87, 94, 6,208, -201, 18,147, 37,113,118,193,158, 46, 21,183,198,176,135, 5, 85, 17,150,163, 35, 6, 86,237, 51, 50,173, 98,113,115,169, 84,218, -232,101,125, 56,142,235, 20, 17, 17, 33, 2,128,105,211,166,149,170,213,234, 37, 4, 65,252,166, 82,169, 50,235,249,215,105,115, -230,204,241,104,210,164,137,207,111,191,253,134,242,242,114, 0,112,107,210,164, 9, 2, 2, 2,152,179,103,207, 34, 48, 48, 16, -182,182,182, 56,123,246, 44,174, 92,185,130,144,144, 16, 91,145, 72,244, 38, 77,211, 53, 26,172, 87,251,117,153, 43, 17, 6,117, -110, 22,246, 14,108,236, 20,216,188, 99, 39,146,174,255,220, 89,111,188, 59,119, 38,206,190, 77,113,146,119,114, 31, 91,207,240, - 13,235,234,236,223, 98, 16, 94,105,123,195, 69,207,156, 75,153,211,171,201, 82,129, 84,183,109,254, 10, 85, 65,109,230, 74, 46, -151, 47,239,219,183,239,176, 13, 27, 54, 56, 0,192,173, 91,183,144,157,157, 13, 87, 87, 87, 72,165, 82, 8,133, 66, 8, 4,130, - 6, 45,149,101,101,101, 5,149, 74, 5,115,197,129, 97, 24,148,149,149, 85, 45, 26, 62,127, 62,200,249,243, 45,139, 54,201,229, -242,200,208,208,208,237,158,158,158, 94,213,191,215,235,245, 24, 63,126, 60,212,106, 53, 66, 66, 66, 34,220,221,221,245, 4, 65, -128,101, 89,228,228,228,148,223,186,117,171, 87, 86, 86,214,213, 90,106,239,218,236,236,108, 76,152, 48, 1,143, 31, 63,158,244, -235,175,191,166, 17, 4, 33, 21,139,197,230,237, 98,133, 66, 17, 24, 24, 24,248,253,251,239,191,143,212,212, 84, 36, 39, 39, 95, -123,150, 74,149, 68, 34, 81, 51, 12,227,102, 50,153,160,213,106, 17, 21, 21, 37,101, 89, 54, 71, 40, 20,222, 45, 46, 46, 30,149, -145,145,161,178,180,156, 81, 40, 20,114,181, 90,189, 97,202,148, 41,253,186,116,233,130,187,119,239,226,232,209,163,120,237,181, -215,208,181,107, 87,204,158, 61,187,255,220,185,115,167, 1,168,173, 50,240,199,158, 61,123,124, 61, 61, 61,171,150, 68,178,179, -179,195,187,239,190,139,209,163, 71,227,240,225,195,225, 95,127,253,245,158, 46, 93,186,184,157,125,134,150,138,127, 3,146,176, -112,248, 37, 22,224, 97,176,115, 69,235, 64,165,209, 50,127,134, 71, 40,239,108,254,155, 13,150, 65,171,161, 5, 36,119,215, 85, - 17,178,235,218,209, 41, 85, 77,132, 48,113,119, 13,180,134,174, 8,155,115, 40,213,152, 96, 37, 33,145,170, 42,195,237,135,249, - 53, 73,221,126,170,240,255,116,245,234,213,248,230,155,111,250,106,181,218,242,148,148, 20, 85,121,121,185,122,212,168, 81,132, - 80, 40,196,197,139, 23,241,232,209, 35,180,106,213, 10, 14, 14, 14,136,140,140, 20,245,238,221,219,107,220,184,113,111, 3,248, -179, 38, 77, 12, 29, 74,137,210,136,131,203, 23, 13,119, 34,168,100, 36, 63, 46, 70, 83,207,246,112,182,247, 66,102, 94, 57, 98, -239, 28, 70,242,131,191,208,212,211, 27,227,223,106,234,240,221, 15,121,135, 16, 58,190, 41,226,158,232,231,245,183, 33,161, 82, - 17,211,110,254,234,120, 48,234, 7,224,140,143,193,209,217,127, 47,220, 29,188, 16,212,198, 29, 50,177, 43,121, 43,241,187,118, -117, 29,187,222,196,125,177,120,225,130, 45,173, 67,218,162,164,164, 4,107,214,172,169, 50, 86, 28,199, 85,213,184, 59,118,236, - 8,163,209,136, 45, 91,182,192,200, 86,132,255,235, 74,231, 83,140,236,208,161,195, 78,142,227,196, 86, 86, 86,217,109,218,180, -241,153, 60,121,178, 96,248,240,225,208,106,181,239,111,222,188,249, 88,118,118,246,190, 6,106, 86, 52,163,188,242, 74,100,215, -174, 93,173, 40,138, 2, 77,211, 40, 41, 41, 65, 70, 70, 6, 82, 82, 82,224,226,226, 2,252,167, 47, 76,173,154, 79,175,133,200, -113, 28,103, 62,254,234, 70,204,124, 94, 44, 73, 39, 65, 16, 65,142, 14,142,214, 63,174,216,112,221, 85, 66, 17, 46, 94, 74, 66, -100,231, 32, 32,109,108, 37, 28, 69,105,125,188,148,182, 4, 65, 4,213,114, 88, 79,107, 18, 18,137,100,239,214,173, 91,221,132, - 66, 33, 24,134,129,171,171, 43, 82, 82, 82, 80, 92, 92,140,178,178, 50,164,220, 77,132,175,167, 39, 62, 30,255,158, 98,193,183, - 43,247, 2, 8,123,170, 16,251,251, 98,220, 70,227,211,105,174, 45, 4, 14, 11,211, 89, 91,132,228, 81, 86, 86, 22,100, 50, 25, -130,131,131,109, 98, 98, 98,206,103,101,101,101,214,167, 41,149, 74,223,140,136,136,176,221,177, 99, 7,218,182,109, 11,123,123, -123,156, 62,125, 26,183,110,221, 2, 77,211,100, 89, 89, 25,108,108,108,176,116,233, 82,120,123,123,163,164,164, 4,105,105,105, -206, 66,161,208,197,108, 72,158,214, 60,119,248,236,194,162,135,167,231,102, 83,199,162, 54,239,216,137,247, 71, 14,135,220,244, -240,188, 99, 83,114, 97,223,254,225, 95, 82, 66,175, 1,214,182, 45, 29, 3, 90, 14,130, 72,108,131,201, 95,124,133,228,219, 7, - 29, 53,101,183, 38, 49,198,116,175,249, 43,118,127, 92,195,177, 19, 0, 72,165, 82,249,222,198,141, 27,109,171, 28, 23, 73, 66, - 40, 20, 62, 97,172,204,139,177,215,114, 78,111,215, 80,121, 0, 77,211,160,105, 26, 44,203, 34, 47, 47, 15,101,101,101,112,116, -116,172,216, 97, 30,128,121, 32, 64,212,106, 88,110, 87, 75,207,168,157, 59,119,122,201,100,178,191,237,148,158,158,142,146,146, - 18, 88, 91, 91,195,193,193, 1, 70,163, 17, 38,147, 9,122,189,222,166,107,215,174, 19, 1, 92,173, 73,147,162,168,169, 19, 38, - 76,136, 56,116,232,144,223,162, 69,139, 64,211,244,242,188,188, 60,188,255,254,251, 96, 89, 22,145,145,145, 29, 57,142, 75,154, - 50,101, 74, 69,184,107,193, 2, 99,121,121,249,135,141,189,150,220,220,220,154,183,110,221,218,241,196,137, 19,136,140,140,132, - 94,175,199,196,137, 19,237,222,123,239, 61,187, 75,151, 46,185,174, 90,181,106, 91, 70, 70, 70,207,186, 52, 67, 67, 67,133, 57, - 57, 57,211,187,118,237, 58,173,103,207,158,246,249,249,249,144, 72, 36,216,181,107, 23,126,252,241,199, 35, 52, 77,207,217,179, -103,207,226, 77,155, 54, 69, 13, 26, 52, 8,155, 54,109,154,162, 82,169,190, 65, 69,179,233,211,154, 74, 47, 47, 47,220,188,121, - 19,142,142,142,112,113,113, 65, 73, 73, 9,174, 92,185,130,107,215,174, 33, 40, 40, 8, 4, 65, 56, 86,150,105,166,103,185,143, - 26,200, 11,215,172, 90, 99,181,218,181, 11, 0, 76,221,110,218,162, 89,241,149, 74,229, 32, 7, 7,135, 73, 28,199, 9,138,138, -138, 54,202,100,178, 63,234, 88, 38,136, 95,232,217, 66,131,101,206,151,174, 0,206,122, 36,162, 52, 63,204, 49,217,217,189,249, - 78,103,143, 22, 21, 39,209,196,221,165, 36,142,201,238,215, 53,165, 0, 64, 27, 57, 92,186, 91,132,155,247,115,112,243, 94, 54, -108,164,245,215,186,157,157,157, 17, 30, 30,142, 3, 7, 14, 32, 61, 61,221,102,233,210,165, 1, 52, 77,211, 3, 7, 14,204,122, -229,149, 87,138, 34, 35, 35, 33, 20, 10,113,245,234, 85,148,150,150,130,162, 40,136,197, 98,176, 44, 91,107,164,205,237, 30,243, -206,152,241,161,126, 46, 14, 36,254,188,120, 12, 29,131, 6, 67, 38, 17, 34,175, 72, 11,146, 32,240,224,209, 9, 48,140, 53,226, -239, 62, 70,167,150,214,232,220,193,222,179,252,100,225,248,124, 96,157, 37, 39,136,206, 60, 3,241, 43,111, 0,210, 22,224, 12, - 15,192, 26, 50,193, 9,221,160,214, 72,145,159,154,134,187, 87,254, 0,103,210,212,171,147,145,161,250,105,203,214,109,145,103, - 70,191,243, 14,203,178, 88,182,108,217,153,251,247,239,119,171,190,143,159,159,223,233,217,179,103,119, 45, 42, 42,194,177, 99, -199,126,174,111,161,210,167, 81,169, 84, 39, 0, 56, 85, 51,180,222,113,113,113, 59,126,253,245,215, 78,111,191,253, 54,118,239, -222,253,121, 13, 6,171, 78,166, 76,153, 34, 60,112,224, 64, 31, 43, 43,171, 53,115,231,206,181, 49, 24, 12, 80,169, 84,200,206, -206,174,138,182, 37, 36, 36, 48, 2,129,224, 82, 61,133,127,141,139, 77, 63,109,176,170,125,103,105,205,187,220, 96, 52,234,173, -189,148,198,129,131,250,180,186,117,237, 70,178,149,147, 19,217,170, 93, 72,243,187,247, 83, 99,137,138, 38, 24,139,154, 97, 60, - 61, 61,135,207,155, 55,175,149,157,157, 29, 88,150,133,189,189, 61,242,242,242,170, 12,165,161,172, 20,116,105, 9,110,166,165, - 32,178,107,119,244,238,212, 49,248, 47,163,113,120, 70, 70,198,239,117,233, 58,181, 14,173,138, 92,237,246,115,174,250,126, 68, -106,113,149, 1, 56,220,222, 31, 18, 27,107,180,252,100,102,163,111,230,236,236,236,184, 19, 39, 78, 28,142,138,138,234, 55,126, -252,120, 50, 59, 59,251,168,201,100,138,200,205,205,189, 83,215,255,217,216,216, 52,205,207,207, 71, 89, 89, 25,236,237,237,177, -106,213, 42,184,185,185, 65,163,209, 32, 38, 38,134,243,244,244, 36, 78,159, 62, 13, 15, 15, 15, 20, 20, 20,128,166,105,104, 52, -154,108,131,193, 80,107, 31,201,202,102,192,190,159,246,194,145,164,235, 63,119,246, 64, 74,204,208,207, 59,223,139,191,150,156, -126,234,228,197,133, 38,157, 52,189, 56, 35,122,122,147,118,241, 46,147, 62, 95,128,181,203,231, 33,233,234,217, 66,119,239,178, -117, 12,161,255,185,158, 40,173, 46, 49, 49,209, 54, 62, 62, 30, 36, 73,194,206,206, 14,214,214,214, 85, 11,155,155,205,149, 64, - 96,121,128,222, 92,193, 49,155,171,188,188, 60, 60, 72, 75,198,158, 83,219, 96, 52, 25, 93,182,118,176,203,246, 19,137,110,150, -180,200,159, 85,144,128,184,122, 10,192,141, 35, 70,140, 24,238,225,225, 97, 91,253,251, 54,109,218,224,173,183,222,194,209,163, - 71,113,253,250,245, 39, 42, 88,121,121,121, 42,134, 97,106, 61,238,244,244,244, 98,150,101,163,222,123,239,189,216,125,251,246, -217,125,251,237,183, 85, 93, 10,204,205,162,230,247, 29, 59,118, 32, 54, 54,118,110, 78, 78,206,221,198, 92, 71,238,238,238, 65, - 3, 6, 12, 56,183,110,221, 58,135,156,156, 28,228,231,231, 67,173, 86, 67, 40, 20,194,100, 50,193,223,223,159, 96, 24,198,183, -190,230, 64,154,166, 15,158, 58,117,170, 79, 64, 64, 0, 0,192,104, 52,226,226,197,139, 24, 63,126,124,129, 76, 38,123, 51, 45, - 45, 77,173, 80, 40,102, 31, 58,116, 40,170, 77,155, 54,104,213,170,149, 60, 55, 55,215, 54, 45,173, 50,156, 91,195,179,130, 97, -152,170,252,217,178,101, 75,213, 54,157,174, 98,201, 73,131,193, 64,132,133,133,249, 94,191,126,253,165, 29,220,146,246,235,102, -164,206,250, 8, 62,231,147, 0, 0,177,205, 43,186, 92,249,156, 77,172,216, 97,244,232, 6,233, 41, 20, 10,103,142,227,222,111, -222,188,249, 39, 81, 81, 81,174, 10,133, 2,206,206,206,184,117,235, 86,196,177, 99,199,214,232,245,250, 31, 24,134,249,193,146, -104,253,115,224, 9, 47,242, 50, 69,176,136,202,131, 35,136, 97,195, 24,110,247,238,252,204, 96, 49, 45, 22,200,146, 1,192, 64, -107,104,247,235,154, 82, 98,216, 48,198,181,197, 32,112,224,192,176,149,209, 6,142, 3, 99,225, 56, 16,221,221, 33, 96,139, 15, -194,205,113, 16, 54,109,218,135,220,220, 92,209,170, 85,171, 94,217,183,111,159,231,168, 81,163, 30,251,251,251,151,116,239,222, - 29,219,182,109,131, 92, 46,135,193, 96, 0,203,178,181,186, 55, 91, 39,102,104,135, 86,254, 84,114,218, 45,132, 5, 12,129,175, - 34, 18, 15, 50, 75, 80, 84,166, 71, 65,137, 22,129,129,159, 35,167, 80,131, 82,181, 14,183,146,126,131,167,162, 9, 73, 9, 31, - 68,193, 66,131,165,127,176, 29,250,148,157, 16, 41,186, 65,220,100, 56,132, 46,157,144,158,116, 6, 55, 78,172, 68,198,189, 11, -224, 88, 6,238, 94, 65,150, 54,225,204, 95,189,122,245,168, 37, 75,150, 8, 62,250,232,163,174, 75,151, 46,237,154,149,149,117, - 6, 0,148, 74,101,215,119,222,121,167,171,173,173, 45, 22, 47, 94,108,228, 56,110,254,179,102,110,118,118,246, 99,165, 82, 57, -233,196,137, 19,241,227,198,141, 67, 80, 80, 80,104,114,114, 50, 9, 11, 58,214,250,251,251,143, 23,139,197, 99, 77, 38, 83,192, -200,145, 35,201,247,223,127,223,198,205,205, 13,169,169,169,208,235,245, 32, 73, 18, 34,145, 8, 9, 9, 9,236,193,131, 7, 75, - 68, 34,209, 20, 11, 34, 44,112,113,113,241,136,140,140,140, 5, 0, 39, 39, 39, 79,150,101,225,236,236,236,217,169, 83,167, 88, - 0,112,116,116,244,168,201,136,213,106,128,105, 58,230,113, 90, 90, 96, 68,231, 8,197,185,235,119,226,222,120,125, 64, 55, 82, - 64,146,143,210, 84, 49,174,206, 78,214, 23, 47, 93, 40,165,105, 58,198, 18, 45,161, 80, 56, 32, 50, 50, 82, 80, 84, 84, 4,165, - 82,137,188,188, 60,100,102,102,194,104, 52, 66, 87, 82, 4,186,180, 20,116, 73, 49, 56, 77, 57, 30,198, 92, 69,176,151,135,228, -120, 69, 39,248,223,235,171,113,214, 20,161, 34, 8,162,234, 59,137,173, 13,172,108,109,171,154, 63, 26,240,112, 28,100,103,103, - 55,189,172,172,236,112, 86, 86,214, 34,131,193, 48,121,201,146, 37,237,190,250,234, 43,151,233,211,167,219, 77,159, 62,125,183, - 84, 42, 13, 73, 75, 75,211,215,234, 80,203,203, 31, 24,141, 70,103, 0,238, 39, 79,158,132,171,171, 43, 74, 75, 75, 97, 52, 26, -161,213,106, 13,142,142,142,210,130,130, 2,232,116, 58, 24, 12, 6,216,217,217, 33, 54, 54,182,208,100, 50,253, 89, 95,250, 28, -154,146, 11,245,198,187,115,157,154, 91,103, 50,156,115,151, 50, 45, 91, 52,127,133,106, 33,128, 21, 81,126,126,155, 13,236,217, -148,228,219, 7, 28, 83, 98, 78, 23,102,221,211,248,253,120, 56,165,172,158,135, 47, 75, 16, 4,215,172, 89, 51,228,229,229,129, -162, 40, 88, 91, 91,195,198,198, 6, 65, 65, 65, 72, 79, 79,111,180,193,170,110,174, 78, 92, 62,132,252,114, 21, 54, 47,223, 1, - 15,185, 23, 9,192, 53, 51, 59,189,215,184,105,195, 58, 60,182,123,180,228,209,197,226,165,117, 84,116,110,168, 84, 42,187, 39, -194, 47, 74,101, 55, 71, 71,199, 83, 52, 77, 35, 53, 53, 21,199,143, 31,239,154,153,153,217,160, 2, 36, 51, 51,243, 33,199,113, - 81,175,191,254,250,182, 86,173, 90, 53,229, 56, 14, 65, 65, 65, 24, 52,104, 16,246,236,217,131, 59,119,238,160,180,180,148, 61, -127,254,252, 86,149, 74,213,168, 14, 57,114,185,188, 89,191,126,253, 46,172, 93,187,214, 49, 63, 63, 31, 58,157, 14,229,229,229, -248,227,143, 63, 16, 17, 17, 1,169, 84,138,213,171, 87,151,154, 76,166,181,117,153, 43,142,227, 14,236,219,183,175,143,159,159, - 31,238,222,189,139,243,231,207,195,213,213, 21, 86, 86, 86, 24, 56,112,160,243,206,157, 59, 39, 7, 7, 7,175, 84,171,213, 11, -251,245,235, 7,134, 97,112,253,250,117, 85,229,168,194, 90,243,168,214,114, 69,167, 3,199,113, 48, 26,141,171, 72,146,124, 51, - 52, 52,180,119, 92, 92,220, 53,188, 36,120,120,120,180, 16, 10,133, 31, 3, 64, 94, 94, 30,138, 89,192,166,176, 98,208,109, 73, -229,227,178,176,176,176,234, 89,227,239,239,255,151, 86,171,157,149,153,153, 89,107,148, 73,169, 84,182,150,201,100,159,116,235, -214,109, 84,255,254,253, 41,154,166,113,232,208, 33,172, 93,187, 22, 81, 81, 81,240,247,247,199,231,159,127,110,175,215,235,103, - 28, 61,122,116,250,185,115,231,142,150,149,149,205,172, 75,243, 57, 81,229, 69, 94, 38,131,197, 85,186,198,138, 35,172,152,138, -161,168,178, 70,227,226,228,228,180,150, 97,152,110,129,129,129, 48,113, 57, 72,125,112, 15,101, 69, 44,140, 6, 61, 88,150, 3, -199, 90,118, 46,216,226,131,176,123,149, 67,233, 57, 2, 52, 77,195,205,205, 13, 75,151, 46, 69, 73, 73,137, 96,220,184,113,190, - 11, 22, 44,184,161,211,233,160, 86,171,161,213,106,161,213,106,235, 52, 88, 34,169,190,149,143,123, 0,202,180,237, 33, 19,139, - 81, 80,170, 71, 81,153, 30,249,197, 58,236, 61, 48, 18,122,173, 6, 38,131, 1, 12,109,130,141,251, 96,248, 59,117, 3,112,223, -162, 9,210,170,130, 40,172, 9,116,102, 52,232,204,104,200,218,204,198,129,213,111, 63,177,159,201,100, 89,147,127,118,118,246, -227,253,251,247,175, 31, 59,118,236,148,215, 95,127, 29, 63,252,240,195, 55, 89, 89, 89, 97,149, 81,132,111, 6, 15, 30,140,132, -132, 4,156, 59,119,110,195,243,170, 45,112, 28,231,236,228,228, 4,146, 36,161,209,104,244,245,153,171, 63,254,248,131, 88,176, - 96,193,209,129, 3, 7,118,154, 60,121,178, 76, 46,151,131,227, 56, 24, 12, 6,100,100,100,128, 36, 73, 20, 23, 23, 99,203,150, - 45,234,235,215,175,115, 98,177,248,146, 80, 40,252, 32, 33, 33, 33,171,190,190, 67,142,142,142, 24, 57,114,164,107,251,246,237, - 93,171,143, 24,124,243,205, 55, 93,195,194,194,170,190,243,244,244,180,248,248,116, 58,221,150,197, 11,231,118,251,117,251,174, -160,102, 65,254,142,135,143,159,142,115,118,182,179,242,245,245,147,148, 20, 23,235,215,174, 90, 46, 80,171,213, 63, 89, 40, 23, -236,226,226,130,236,236,108,220,191,127, 31,122,189,190,162, 9, 71, 83, 14, 67,113, 49,232,146, 34, 64,167,133,152, 97,160,207, -207,129,175,159, 47,240,159, 17,134,117, 63, 49,170,153,169,167,155, 4, 9,130,128,149,189, 29,196,214,214,160,132, 2,139,251, - 96,201,229,242,182, 33, 33, 33,187, 54,109,218, 36,154, 58,117,106,135,171, 87,175,174, 77, 75, 75, 75, 19, 8, 4, 61,150, 47, - 95,126,109,209,162, 69,146, 81,163, 70, 53,219,184,113,227, 24, 0, 27,235, 56,135,187, 14, 31, 62,252,150,183,183,183,251,237, -219,183,161,211,233,192,178, 44,250,246,237, 11, 0, 82,243,126, 73, 73, 73, 90,173, 86,155,147,144,144, 80,150,150,150, 70,195, -130, 81,127, 95,174,203,186,242,105,222,185, 55, 20, 10,229,101,177,196,167, 9,169,137, 29,252,233, 80,143,111,191,251, 35, 83, -119,244,225,195,178, 57,189,154, 44,213,148,221,158,228,232,169, 94,183,254, 80,138, 37, 29,220,171, 70, 11,186,184,184, 84, 53, - 9,138, 68, 34,115,244, 5, 37, 37, 37,245, 53, 17,214, 88,120,151,148,148,160,164,164, 4,247, 30,221, 69, 94,153, 10,209,191, - 95, 6,195, 48, 85,209, 17,165,187, 39, 78,252,126,205,182,235,208,118,179, 74, 91, 21,159, 46,188,133, 24, 75,175, 83,146, 36, - 63, 25, 50,100, 8,104,154,198,160, 65,131,176, 99,199,142, 79, 26, 83, 67,207,202,202,186,146,149,149, 21,112,255,254,125, 59, -163,209,248,218,192,129, 3,127,238,215,175, 31, 46, 95,190,140,147, 39, 79,118, 53, 24, 12,201, 12,195,104, 21, 10,197, 18,142, -227,220, 8,130, 88,162, 82,169,234, 28,237, 28, 16, 16, 48,202,214,214,118,177,149,149, 85, 89,211,166, 77,149,230,200,149, 90, -173,134,201,100, 66, 70, 70, 6,142, 28, 57,162, 58,124,248,176,138,227, 56, 89,121,121,249,188,244,244,244, 63,106,107, 22, 44, - 47, 47,223,127,240,224,193, 40, 63, 63, 63,156, 61,123, 22,203,150, 45, 67,211,166, 77,177,117,235, 86,132,135,135,195,215,215, - 23, 78, 78, 78, 31,151,150,150,118, 90,182,108, 89,191,208,208, 80,236,219,183, 15,185,185,185,107,234,122, 62,213,245,156,213, -106,181,224, 56, 14,221,187,119, 31, 63,117,234, 84, 12, 28, 56,240,120,219,182,109,219,199,198,198,222,251,183, 23,210, 10,133, - 98,105,247,238,221,167,183,110,221, 26,219,183,111,135, 62, 44, 18,214, 91,255,196,237, 1, 17,224, 0, 40,183, 30,168,104,175, -123,173, 98, 64,135,111,143,161,152, 62,125,122,191,193,131, 7,123, 3,104, 81,139,230,183,163, 70,141,154,246,246,219,111, 35, - 46, 46, 14, 27, 55,110,196,141, 27, 55,170,202, 60,163,209,136,196,196, 68, 36, 38, 38, 66,161, 80, 96,192,128, 1,196, 7, 31, -124,208,183,111,223,190,174,168,232, 22,241,255, 29,197,234,250, 50, 53, 17,214,234, 26,221,221,221, 93, 28, 29, 29, 19,214,174, - 93,235,220,161, 67, 7,202,100, 50,225,228,169, 83,248,236,163,113,136, 26, 48, 9, 58,189, 24, 38, 29, 1, 70,100, 99,217, 47, -218, 13, 64,233, 57, 2,172, 77, 63, 24, 12, 6,140,223, 33,130, 3,145,131, 85,239,184, 3, 0,161,213,106,161,215,235,161,213, -106,161, 86,171,161, 86,171,193, 48, 76,173, 79,201,178, 98,107,154, 54,178,200,204, 77, 67,134,234, 54,236,109,188,193,145, 94, -200, 41,212,128,128, 27,140,186, 36,176,149, 55,166, 94,155, 1,181,254,217, 76, 49, 83,150, 82, 67,100,198,242, 62,149, 12,195, - 44, 94,190,124,249,248,181,107,215, 74, 38, 77,154,212,118,209,162, 69,175, 1,192,251,239,191,223, 86, 42,149, 98,221,186,117, -122,134, 97, 22, 63,167,252,165, 72,146,252,228,213, 87, 95, 69,105,105, 41, 18, 18, 18, 14,213,247, 15,179,103,207,158, 56,100, -200,144, 78, 11, 22, 44,144,233,116, 58,104, 52, 21,205,159, 37, 37, 37, 80,171,213,200,201,201,193,180,105,211,138,104,154,158, -240,232,209,163, 61, 13, 48,122, 56,120,240, 32,126,253,245,215, 39, 70, 12,190,249,230,155,174, 59,118,236,200, 93,189,122,117, - 38,199,113,156,147,147,147,231,208,161, 67,221, 44,109, 33, 84,169, 84, 90, 0, 83, 22, 45, 94,244,219,183,203,151,187, 21, 22, - 20, 37,139,196, 86, 58,153,149,196,105,250,103, 11,185,156,156,156,105,185,185,185, 26, 75,211, 89, 84, 84,132,148,148, 20, 88, - 89, 89, 65, 36, 18,129,209,148,131, 85,171,161, 47, 42, 0,105,208, 67,194, 48,112,146, 73,224,229,238, 14,111, 55,203,250,226, -171, 78, 31,199,145,225, 3,158,104, 22, 36, 8, 2, 71,195,155, 65,108, 99, 13,169,141, 13, 34,247,159,175,168, 48,136, 68,192, -170, 77,150, 52,227,184, 40, 20,138,131,107,214,172, 17,229,231,231, 35, 33, 33, 33, 62, 45, 45,173,196,209,209,209,214,104, 52, -178,247,238,221, 59,145,148,148, 52,192,215,215, 23, 28,199,213, 55,250,107,197,222,189,123,123, 69, 68, 68,152,124,125,125,173, -243,242,242,188,139,138,138, 8,149,234,201, 62,204, 49, 49, 49,210,199,143, 31,107, 88,150,221, 87,105,174,234,189,240, 63, 29, -234, 33,189, 20,135, 41, 93, 92,124, 91,219,187,182, 70,190,241, 70,235, 43,241,217, 83, 62, 29,234,177,250,187, 63, 50,117, 12, -161,255,153, 49,166,123, 9,164,186,109, 13,105, 66,224, 56, 14, 49, 49, 49, 56,127,254, 60,206,159, 63,143,212,212,212,170, 29, -236,237,237, 17, 29, 29,141,110,221,186, 89,124,163,104, 52, 26, 40, 20, 10, 56, 56, 56, 96,223,153, 95,240,227,183, 59,170, 58, -186,155,201,207,207,135, 76, 38,195,226,207, 86,218,140,251, 98,232,194, 66,228,247,182, 68,219,211,211,179, 73, 68, 68, 68,127, -119,119,119, 20, 21, 21,193,213,213, 21,237,218,181, 27, 72,211,180,111,110,110,110,163,154,178, 12, 6,195,196,110,221,186, 45, -154, 54,109, 26,140, 70, 35,134, 15, 31,142,148,148,148, 93, 15, 31, 62, 92,229,227,227, 51,101,210,164, 73,238, 46, 46, 46,152, - 56,113,162, 53,128, 55,106,211,105,214,172,217,167, 95,124,241,197,215,163, 71,143,150, 24,141, 70,156, 60,121,178, 42, 74,109, - 50,153,144,150,150,134,121,243,230,169, 74, 75, 75,187,100,102,102, 62,176,160, 18, 57,109,255,254,253,125, 3, 3, 3,113,244, -232, 81, 76,152, 48,225, 47, 27, 27,155, 22,253,251,247,247,182,182,182, 70,124,124, 60,104,154,134, 66,161,112,159, 49, 99,198, -128, 62,125,250,224,196,137, 19, 88,184,112,225, 33,185, 92,190,226,233,107,238,105, 19, 44, 16, 8, 96,124,170, 79, 35, 69, 81, -184,113,227, 6,186,119,239,142,233,211,167, 3, 0, 78,156, 56, 97,215,187,119,239,219, 93,186,116,177, 59,123,246,172,254,223, - 92, 72, 91, 91, 91,143,221,186,117, 43,238,223,191,143, 11, 23, 46,160,160,160, 0, 6,131, 1, 37,108,197,205, 32,169,140, 92, -113, 30, 62, 8,159, 54, 11, 35, 6,188, 1,149, 74, 5,146, 36, 93,234,168,240,141,154, 53,107, 22,142, 28, 57,130,165, 75,151, -162,180,180,180,198,253,172,172,172,208,174, 93, 59,132,132,132, 32, 37, 37, 5, 0, 92, 94,192, 33,191,148, 17,172,218,162, 14, -171,214,175, 95,239, 28, 17, 17, 65,169,213,106,176, 44,139, 78, 29, 59, 98,204, 59, 99,112,108,223, 31, 80, 52,233, 6, 74,103, - 5,147,173,204, 50,131,225,245, 51, 10, 11, 11, 33,145, 72, 32,173,236, 80,122, 51,163, 42,188, 11,157, 78, 87,101,174,204,239, -117, 97, 50,136, 99, 19, 31, 50, 94,165,229, 55,112, 53,246, 87, 24, 13, 6,248, 6,204,132,222,228, 2,107,183,119,161,165, 15, -130, 46,174, 24,185, 43,182,235,138,156,156,124, 0,132, 69, 33,206,154, 10,121, 86,251,247,206,238, 44, 99,185,193,202,205,205, -205, 59,127,254,252,138, 27, 55,110,204,238,219,183, 47,126,252,241,199,165, 28,199,161, 95,191,126,136,137,137, 65,124,124,252, -138,220,220,220,188,231,145,183,114,185,124,203,186,117,235,250,185,187,187, 99,239,222,189,224, 56,174, 94, 67, 36, 22,139,223, -159, 50,101,138,204, 28,197, 16,139,197,208,106,181,200,206,206, 6, 77,211,216,183,111,159,222, 96, 48, 76, 77, 77, 77,221,211, -144,196,112, 28,199,181,111,223, 30, 43, 87,174,204,184,120,241, 98, 91, 0,232,212,169, 83,108, 88, 88,152,235,234,213,171, 51, -175, 94,189,218, 22, 0,218,183,111,127, 61, 36, 36,164, 65,243,184,168, 84,170,140, 27,215,175, 60,208,234,116, 66, 71,103, 39, -141,173,181,152, 43, 45, 43, 35,111,222,140, 83,229,230,230,166, 54, 64, 42, 49, 33, 33,161,101,102,102, 38,210,210,210,192,104, -202, 65,234,245, 32,244, 90,244,232,212, 17, 86,224, 32, 1, 11, 17,107,132,144, 18,160,172,172, 28, 0, 18,235,141,218, 86, 43, - 16,204,230,138, 32, 8, 72,109,108, 32,182,181,129,196,198,230,137,136,150, 37,230,210,202,202,234,183,141, 27, 55, 42, 20, 10, - 5,190,251,238, 59, 40, 20,138, 32,185, 92,174,177,181,181,181,114,113,113, 65, 96, 96, 32,194,194,194,112,250,244,105, 16, 4, - 81, 95,193,104,226, 56,174,247,133, 11, 23,166, 93,186,116,105,152, 82,169, 36, 70,143, 30,141,168,168, 40, 72, 36, 18,104,181, - 90, 20, 21, 21,225,175,191,254, 34, 88,150, 13,173, 52,120, 62, 18,137,100, 7, 65, 16, 25,169,169,169,111, 62, 45,184, 97, 81, - 43,101,153,150, 29, 71,170,173,222,232,210,199,183, 85,247, 62, 61,209, 36,160, 7,186,247, 73, 7,128,165, 46,194, 71,195,151, -205,114,216,231,104, 71,108,189,180,255,196,151,145,125,187,205,153, 79,159, 89, 56,127, 77, 81,189, 81, 44,130, 32,170, 10, 91, -146, 36,107,140, 82, 81, 20, 5,146, 36, 45,123, 38,177, 76, 70,212, 59,157,170, 62, 27, 77,180,139,135,220,139, 52, 71,174, 0, -160,180,180, 20,143, 31, 63,134,209,104,132,179,179, 51,140, 70,186,117, 3, 42, 85, 83,134, 15, 31, 78,232,116, 58, 76,155, 54, - 13,203,151, 47,199,160, 65,131,136,171, 87,175, 78, 1,240, 73, 67,111,108,165, 82,185,124,226,196,137,211,198,142, 29,139,226, -226, 98,156, 58,117, 10,221,186,117,195,250,245,235, 93, 79,157, 58,245,117,120,120, 56, 40,138, 66,116,116, 52,104,154, 78,170, -231,126,255,104,244,232,209,146,244,244,116,136, 68, 34,132,133,133, 33, 35, 35, 3,106,181, 26,185,185,185,248,234,171,175,178, - 75, 74, 74,186,102,101,101, 61,176, 32,105,164,159,159,223,199,254,254,254, 56,121,242, 36, 38, 78,156,120,196,218,218,250,141, -162,162,162, 15,244,122,253,234, 1, 3, 6, 32, 60, 60, 28, 73, 73, 73, 24, 56,112, 32,218,181,107,135, 83,167, 78, 97,250,244, -233,127,201,100,178, 33,245,204,131,117,239,204,153, 51, 45,195,194,194,160, 86,171, 81, 86, 86, 6,161, 80, 8, 7, 7, 7, 36, - 38, 38, 34, 32, 32, 0,211,167, 79,199,202,149, 43, 49,117,234, 84,182,119,239,222, 38,154,166, 69,230, 81,150,255,102,212,106, - 53,167, 82,169, 96,103,103,135,221,187,119,227,214,137,255, 99,239,187,195,163,168,254,175,207,204,236,206,150,236,166,144,190, - 73,168,161, 38, 1, 66, 66,232, 18, 66, 17, 69, 4, 81,145, 34, 69, 4, 20, 41, 74, 83,154, 18,106, 16,164,131, 52,165, 41, 32, - 4, 16,233, 69, 8, 29, 66, 42,164, 16, 90, 72,217,221, 52, 82, 73,182,206,206,188,127, 36, 27,147,144,178, 65,120,191,234,111, -206,243,236,179, 59,101,207,220, 50,229,204,185,247,126,238, 89,156,154,250, 41, 36, 11, 86,129,227, 56,164, 47,157,131,222, 95, - 47, 64,151,152,199, 80,171,213,216,179,103, 15, 72,146, 68,149, 1, 40, 47, 60,219, 10, 10, 10,208,161, 67, 7,220,185,115, 7, -123,246,236,193,218,181,107,203,221, 90,161, 80,136, 94,189,122,161, 95,191,126,120,240,224, 1,182,109,219, 6, 27, 27, 27,240, -120, 57,129, 69, 84,249,174,224,206,176,189, 3, 2, 2,168,231,207,159, 67,171,213, 34, 51, 51, 19,201,201,201,144, 74,165, 80, -102,165,162, 83,243,231,200, 32,244,136,139, 78, 50, 17,148, 48,186, 46, 27,222, 96, 48, 64,175,215, 35, 54, 54,182,116,232,123, -203,144,242,206,207,101,125, 62,160,213,106, 17, 22, 22,198, 73,165, 82,200,100, 50,162,182,182,119,150,209,157,190,116, 61,102, -192,168, 33,189, 69,231,195,126,130, 81,199,224,185,206, 14,197, 90, 61,138, 52, 66,232,197,253, 65, 16, 87, 65, 82, 98,116,235, -208, 28, 23,175, 61,208,154,140,134, 51,150,169, 2, 19, 40,251,246, 48,229,198, 86, 16, 88,149,223,176,104,177, 28, 38,166,126, -163,130, 37, 18,201,170,213,171, 87, 79,253,249,231,159,173, 63,251,236,179, 86,230,135,197,230,205,155,139, 36, 18,201,170,191, - 91,167, 10,133, 98, 84,211,166, 77, 23, 47, 92,184,208,189, 67,135, 14,136,140,140, 68, 72, 72,200,201,140,140,140, 99, 22,188, - 25,123, 56, 56, 56,224,249,243,231, 16,137, 68, 48,153, 76,200,202,202, 66,106,106, 42,196, 98, 49,194,195,195,245,141, 27, 55, - 62,242, 50, 9,179,164, 67,123,197, 17,149,245,129,148,102,253, 23,124, 61,177,133, 86,171,241, 46, 42, 42, 98, 4, 2,129, 64, - 44, 52, 61,169, 15,135, 7,243, 62,169, 0, 0, 32, 0, 73, 68, 65, 84,209,104, 60,113,245,234,213,247,122,244,232, 33, 78,138, -141,134,161,160, 0,198,194,124,208, 38, 6,246,254, 29, 64,234,181, 32,244, 70,184,123,113,208,228,203,112, 61,234,177,209,104, - 52,214,233, 10,154, 5, 22, 73, 81,149,251, 93,217, 88, 67, 36, 47, 21, 88, 21,215, 19,117,180,107, 57, 59, 59, 91,245,236,217, -179,143,159,159, 31, 56,142,195,170, 85,171,160,215,235, 69, 70,163, 17, 70,163, 17, 6,131, 1, 69, 69, 69, 56,124,248, 48,246, -238,221,123,221,214,214,118,151, 74,165,170, 43,153,140,187,187,251, 20,150,101,157, 25,134, 49, 56, 57, 57,209, 7, 15, 30,132, - 68, 34, 1, 73,146,232,208,161, 3, 36, 18,137, 78,161, 80, 24, 0,192,201,201,201,184,122,245,106,193,248,241,227,233,234,200, -124, 59,181,154,101,226, 28, 2, 69,226,198, 77,109,157,218,163, 89,203, 62, 0,128,126, 3,199,161, 89,139,134, 40,200,142,109, -166,215,165, 12,161,136,103, 13,126,185,169, 76,120,195,170,237, 39,207,210,195,146, 0,252,108,233,185,212,167, 79, 31,188,249, -230,155,229,205,129,206,206,206,208,235,245, 96, 24,198, 98,113, 5, 0,230, 32,162,193,193, 32,177, 16,216,213,217, 58, 3, 64, -185, 61, 89, 80, 80,128,180,180, 52,164,164,164,148,223,167, 88,206,178,183,107,133, 66, 33,109,214,172,217, 88, 31, 31, 31, 92, -188,120, 17,177,177,177,202,203,151, 47,187,119,234,212, 9, 30, 30, 30,159,112, 28, 55,175,204,133,181, 8,142,142,142,178,206, -157, 59, 79,253,228,147, 79,112,255,254,125,124,243,205, 55,207, 50, 50, 50,142,158, 56,113, 98,252,244,233,211,201,192,192, 64, -100,101,101, 97,235,214,173,166,240,240,240, 31, 26, 52,104,176, 56, 35, 35,163,182,114,124,162, 82,169,154,104,181, 90, 60,123, -246, 12,230,144, 12,103,206,156,193,217,179,103, 51,243,243,243,123,169,213,234,135,150,164,173,113,227,198,214,254,254,254, 46, - 73, 73, 73, 56,112,224, 0, 12, 6,195,130,148,148, 20,131,141,141,205,175,155, 55,111, 94,232,233,233,105,223,179,103, 79,116, -235,214, 13, 28,199,225,248,241,227, 8, 14, 14, 62, 41,149, 74,223, 79, 72, 72, 48,212, 65, 63,100,201,146, 37, 75, 28, 29, 29, - 63, 26, 57,114, 36,233,239,239,143,136,136, 8,152, 76, 38,244,233,211,167, 92, 92,157, 57,115,102,223,153, 51,103, 62, 4, 64, -203,229,114,201,191,221,189, 50, 67,171,213, 34, 41, 41, 9, 46, 46, 46,104,209,169, 43,190,185,151,140,171, 55,110,130,227, 56, -244,136, 75,198,243,231,197,216,181,107, 23, 34, 35, 35, 65, 81, 20, 60, 61, 61,235,228, 52, 24, 12,120,248,240, 33,178,179,179, - 49,120,240, 96,124,252,241,199, 88,185,114, 37, 12, 6, 3,230,207,159,143,220,220, 92,108,223,190, 29, 15, 31, 62,132, 64, 32, -128, 92, 46,255,255,145,213, 26,181,200,127,210,193, 2, 74,219,190, 89,150,133, 74,165,194,157, 59,119,144,156,156, 12,153, 76, - 6, 13,195,178, 27,111,197,176, 36, 33, 84,154, 56, 92,227, 24,124, 93,151, 18, 55, 26,141,132, 64, 32,192,141, 27, 55,240,232, -209, 35,216,180,224,202,221, 43,163,209, 8,157, 78,135,146,146, 18, 8,133,194,231, 55,111,222,124, 26, 17, 17,209, 76, 32, 16, -212, 56, 10, 44,171, 37,181,251,252,133, 63,103,249,119,240,110,213, 55, 48, 24, 39, 78,124,135,252,194, 66, 20,235, 4,120,174, - 49,160, 88,203,193,205,186, 57, 58,183,247, 67,246, 51, 61, 30,196, 69,166,231,208,246,117,182,193, 24, 77,100,193,190, 77,159, -217, 14,250,240, 11, 72, 92,123, 66,159,124, 16,172, 38,179, 92, 96,209, 18,107,216, 56, 54, 66,225,115, 13,174, 39, 60,129,209, - 68, 22, 88, 90,232,201,201,201,133, 58,157,110,217,245,235,215,191, 55,143,252,185,114,229, 10, 30, 63,126,188, 76,173, 86, 23, -214,167, 2, 21, 10, 69, 95, 0,251, 1, 72,156,157,157, 51, 3, 2, 2, 20,111,190,249,166, 36, 48, 48, 16, 20, 69, 33, 42, 42, - 10,159,125,246,217, 57,185, 92,254, 62, 44,136,137, 35, 18,137, 50, 11, 10, 10,108,197, 98, 49,140, 70, 35, 50, 50, 50,112,255, -254,125,104, 52, 26,100,102,102,130, 32, 8, 85, 88, 88,152,166,190, 39,154,121,132, 86,213,135,100,117,226,185,158,163, 8,225, -238,238, 30, 24,208,185, 83,219, 31,214,108,128,166,228, 57,194,111,158, 64, 94,110, 14,182,237, 56,210,206,221,221, 61,208,210, -206,196,233,233,233,191, 29, 57,114,100,166,175,143,143,159,103,195,134,184,155,146, 12,154, 53, 65,100, 50,129,210,107, 65,154, -116,240,104,203,129, 36,229,200,204, 40,194,150,115, 23,239,149, 69,117,175, 61,125,111, 15,194,136,148, 2, 16, 4,129,115,111, -120, 67, 34,151,131,150,203,208,237,112, 88,185,168,122,186, 98, 54,104,153, 28, 13, 2,234, 14,140,153,149,149, 85,114,253,250, -245,136,196,196,196,128,214,173, 91, 99,209,162, 69, 72, 75, 75, 3,199,113,200,202,202,210,102,103,103, 43,159, 61,123,246,148, - 32,136,163, 42,149,106, 7, 44,140, 22,206,178,172,243,241,227,199, 1,128, 6,128, 63,255,252, 19,110,110,110,176,181,181, 69, - 97, 97, 33, 70,143, 30, 45,254,246,219,111, 1, 0, 81, 81, 81, 66,137, 68, 82, 35, 87, 92,244,253,213,121,133, 92, 30, 89, 28, -249,126, 14, 19,221,174,119,255,116,244, 27,248, 9,206,159,216,133,139,103, 47,192, 81,152,252,196, 36,125,126, 58,251, 73, 78, -145,186,184,229, 86,239,142,227, 41,213,243,179,219,190, 24,148, 36,240, 80,176,135,230,110,169, 61,112, 47,199,113,160, 40,234, -133, 14,237,245, 21, 87, 21, 17, 28, 12, 22, 11, 65, 52, 19, 10,162,149, 25,105,253,221, 92, 60,202, 95, 46, 82, 83, 83,145,150, -150,134, 22, 45, 90, 32, 57,229, 49, 68, 34, 58,218,194,243,126,228,192,129, 3,173,245,122, 61,126,255,253,119,134, 32,136,129, -199,143, 31,143,240,245,245, 21, 4, 5, 5, 89,239,218,181,107, 36,128, 29,245,105, 49,146,203,229,180,209,104,196,238,221,187, -161, 84, 42, 3, 51, 51, 51, 19, 56,142,219,250,249,231,159,255,232,229,229,213, 34, 33, 33,225,129, 70,163,249, 66,173, 86,199, -214,214,228, 6, 0,249,249,249, 99,222,122,235,173, 67, 44,203, 54,238,222,189,187,108,196,136, 17, 54, 28,199,193,203,203, 11, -167, 78,157, 82,169,213,106,139,251, 48,165,164,164, 20, 93,189,122, 53,211,219,219,219, 69,161, 80,128,166,233, 21,174,174,174, - 75, 41,138,250,225,221,119,223,181, 63,120,240, 32, 66, 67, 67, 33,147,201,240,228,201, 19, 85, 98, 98,226, 58, 87, 87,215,245, -150, 68,112,143,138,138,122, 2, 96, 68, 64, 64, 64,240,218,181,107, 23,144, 36, 57,234,220,185,115,229,177,206,204,226,170,105, -211,166, 99, 66, 67, 67, 63,254,143, 25, 33, 70,189, 94, 15, 7, 7, 7,100,103,103, 35, 43, 43, 11,141, 26, 53, 66,215,174, 93, - 97, 52, 26,113,236,196, 73, 92,189,122, 21, 28,199,193,209,209, 17, 54, 54, 54,136,137,137, 1,128,218, 70, 15, 27, 13, 6, 3, -236,237,237,145,159,159,143,152,152, 24, 56, 59, 59, 99,198,140, 25,208,235,245, 56,120,240, 32,162,163,163, 65,146, 36,156,156, -156, 96,109,109,141,232,232,232,186, 56,121,212, 87, 96, 81, 20,117,233,210,165, 75, 31,182,111,223, 94,240,224,193, 3, 60,120, - 80,122,189,105, 52, 26, 70, 64, 33, 52,235,238,177, 17,181,252,189, 45, 42,196,202, 16,137, 68, 91, 62,252,240,195, 47,198,141, - 27,135,201,147, 39,131, 36, 73,252, 28,165, 67,106, 42, 11,131,193,128,204,204, 76,220,189,123,151, 11, 8, 8, 32, 88,150, 53, -244,234,213,107, 66,100,100,100, 39,138,162, 10,107,226, 68,104,168,137,105,251,238,224,205, 91,118,220, 24, 59,118,172,253,160, -193,155, 17, 21, 31,135,252,226,210, 86, 38, 55, 71, 25, 58,183,158,141,172,103, 58,156, 61,125, 34,143,101,180, 31, 32,238, 55, - 99,109,233, 4,128,236, 18,141,243,214, 61, 71, 86, 29, 56,124,116,194,196, 49, 35, 36,189,122,141,129,176,232, 46, 76,207, 34, -225,214,178, 59, 8,202, 10,183, 99,162, 16,251, 48, 77, 91,162,165,118, 20, 26, 52,179,235,226,172,228,165,147,228,198,237, 91, - 54, 44, 63,115, 62,140, 50, 24, 12, 24,240, 86, 31, 19, 73,146, 27,235,168,142, 23, 56,173,172,172, 14,196,196,196,216,235,116, - 58,164,167,167, 55,107,213,170, 21, 56,142, 67, 74, 74, 10,214,173, 91,199,156, 58,117,106,179, 68, 34,249,166,150, 55,196, 74, -156, 70,163,113,255,238,221,187,231, 78,153, 50, 69,146,149,149,133,196,196, 68, 20, 23, 23,195, 96, 48, 32, 50, 50, 82,107, 52, - 26, 15, 88,112, 94,189,144, 78,179,192,178,183,183,119,239,220,185,179,121, 20,161, 59,203,178,104,208,160,129, 71, 64, 64, 64, - 4, 0,216,218,218,214, 52,138,176,198,242, 84, 42,149,151,195,194,174, 98,247,142, 53, 48, 24,116, 80, 43, 75,157,134,156,103, - 5,168, 67, 92, 85,229,228,180, 90,237,251,107,215,173,187, 53,105,204, 40,215, 55,122,247, 65, 90,108, 12,244,185,217, 32, 77, - 12,132,156, 0, 37, 89, 82,100,102, 62,199,242, 83, 23,178, 52, 90,109,117,162,181,218,116,150, 55, 11,218, 88, 67, 44,151, 67, - 84,230, 90,153,183,137,228,214, 16,202,228,160,104,186,186, 38,175, 23, 56, 75, 74, 74, 62,152, 56,113, 98,236,169, 83,167, 26, -140, 24, 49, 2,131, 6, 13,138,202,207,207, 15,202,203,203, 43,178,240,218,127,129,147, 36,201,172, 1, 3, 6, 56,235,245,122, -102,216,176, 97,130,156,156, 28,152,135,216, 23, 21, 21,225,244,233,211,104,221,186,116,214,153,184,184, 56,120,123,123,215,200, - 57,225,155,123, 74, 0, 75,166,127,232,254,195,173,152,140,105, 0, 86, 52,107,225,129,139,103, 47,224,234,197, 27,115,186,180, -101, 55,188, 51,178,211, 98, 73,239,143,102,123,251,143,167,228, 54, 10,236, 57,114,152,138,143,252,105,153,182,248,158, 39,182, - 28,153, 93, 83, 58, 9,130, 0,199,113,149,196,149, 64, 32, 64, 73, 73,137,165,226,170,230,107,147, 0, 87,232,147,183, 96,236, -140,161, 93,255, 60,112,219, 90, 38,147,149,247,249,105,222,188, 57, 4, 66, 1,126, 62,186,177, 56, 63, 63,231, 91, 75, 56,101, - 50,217,148,160,160, 32, 60,126,252, 24,177,177,177,135,213,106,117, 44,199,113,135,159, 60,121, 50,172, 83,167, 78,248,237,183, -223,166,212, 34,176,170,229, 52, 71,172, 47,115,123,115, 1, 64,173, 86,199, 0,232,242,232,209,163,122,229,189, 44, 88,104,247, -178,114, 77, 27, 50,100,136, 13,195, 48, 40, 19,207, 14,245, 60,151, 88,181, 90,189, 62, 60, 60, 60,164, 67,135, 14, 24, 62,124, -120,191,136,136,136,126,190,190,190,240,244,244, 68, 94, 94, 30,194,194,194,126, 97, 89,246,115,181, 90,173, 5,192,213, 34, 0, -171,205,251,157, 59,119, 30, 2, 24,237,231,231,247,145, 64, 32,128,141,141, 13,165, 84, 42,169,115,231,206, 1,192,196,208,208, - 80,211, 75,213,251,203,227,181,115, 18, 4, 49,127,204,152, 49, 91, 63,251,236, 51, 73,167, 78,157, 80, 80, 80, 80, 46,250, 79, -157, 58,133,178,145,216,112,112,112,192,195,135, 15,113,244,232, 81,125, 65, 65,193, 58,154,166, 87,212,198, 57,122,244,232, 74, -156,102,241,118,226,196, 9,152, 7,145, 56, 56, 56,224,193,131, 7, 56,114,228,136,182,160,160, 96,141, 94,175, 95,249,154,243, -254,127, 75, 96,229,230,230,126, 57,119,238,220,160, 79, 63,253,212, 65,163,209, 80,142,142,142, 80,169, 84,204,217,179,103,115, -139,138,138,190,172,207,193,110,222,188, 57,249,157,119,222, 89,183,115,231,206,237,219,183,111, 15, 28, 62,124, 56, 70, 15, 24, -128, 47,186,202,160,211,233, 64, 16, 4,206,158, 61,123,255,210,165, 75,205,104,154,214, 5, 7, 7,179, 0,110,213,197,251,236, -222,241, 7, 84,219,247, 2, 55,108,252, 49,212,175, 99,151,198, 77,154, 54, 17,119,111,104, 11,131,209,132,204,172,103,184,124, - 35, 94,247, 32, 62, 38,141, 53,232,135,102, 39,212, 29,197, 29, 0, 18, 18, 96, 0,138,190,244,242,178, 94,180,114,203,190, 45, -123, 15, 29, 30, 50, 97,248,251, 2,255,118, 65, 72,206, 56,134, 43, 17,151,152,188, 34,238,104,145,158,154,148,144, 80,148, 87, -223,130, 87, 42,149, 90,137,144, 43,208,106,181,246,201,201,201,200, 84,171, 10,149, 74,149,246,101,154,221,116, 58, 29, 30, 63, -126,140, 11, 23, 46, 32, 42, 42, 10,215,175, 95, 55,156, 59,119,110, 39, 73,146,203,106, 9, 52, 89,253,149,221,182,237,247, 63, -253,244,211,135, 38,147,201,179, 87,175, 94, 18,123,123,123,228,228,228, 32, 60, 60, 92, 31, 29, 29,253,184,109,219,182, 43, 95, -246,100,115,117,117,197,208,161, 67,157,253,253,253,157,205, 35, 6, 27, 54,108,136, 15, 62,248,192,217,215,215,183,124, 93,163, - 70,141, 80,159, 80, 13,238,238,238,129,189,122,189,129,177,227,167, 67,163,121,142, 91, 55, 78, 32, 63, 55, 7, 55,239, 36, 65, -103, 64, 96,125,134,195,151,141,222,236,178,116,221,134, 35,111,117, 14,240,106,229,230, 42,118,104,218, 4, 50, 39, 87,228, 62, -123,134, 91, 49,143,140,155,206, 95,190,167,209,106,223,183,116,164, 39,203,178,229,163,220,188,167,205, 1, 73,146,229,179, 32, -152,183,219,116,236, 1, 82, 32,132,137, 3, 12, 6, 67,157,238,157, 90,173, 78, 39, 8,226,131,169, 83,167,254,185,123,247,110, -178, 87,175, 94, 29,254,248,227,143,191, 53,105,174, 82,169,244, 40,115, 69, 11,109,108,108, 4,159,124,242, 9,140, 70, 35, 74, - 74, 74, 80, 88, 88,136,103,207,158,233,190,250,234, 43, 49, 0,208, 52,109,124,235,173,183,234,188,127,172, 13, 85,106,167,127, -232,190,193, 81,152, 60,172, 32, 59,182,153,163, 48,249, 73,151,182,236,134,181,161, 74,173,179, 93,201, 82,101,118, 88,146,234, -249,217,109,123,142, 28,166,198, 12,249,192,164,144, 63,152,227,216, 16,135, 44,186,121, 85, 17, 88, 47,235, 92,189,112, 63,137, - 67, 84,186,236,113, 72,208,208, 78,243,150,206, 92, 45,119,116,114, 4,195, 48,120,146,250, 24, 59,143,108, 42, 46,210,229, 45, -203, 77, 64,132, 37, 92,205,154, 53,107, 74, 81, 20,142, 29, 59, 6, 0,230,208, 6,155, 78,159, 62, 61,108,228,200,145,104,212, -168,145, 55,203,178,226,218,194,104, 84,231,222, 25,141,198,122, 55,163,215,217, 54, 67, 16,143, 99, 98, 98,220,221,221,221,137, - 3, 7, 14, 60, 55, 24, 12,193, 47,113,141,175, 62,121,242,228, 27, 28,199,189,229,231,231,135,198,141, 27, 3, 0,226,227,227, -113,245,234,213,253, 74,165,114, 44, 94,205,228,206, 28, 65, 16, 40, 44, 44, 52,199, 53, 49,200,229,242,255,228,164,209, 42,149, -106, 47,195, 48,103,131,131,131,191,107,222,188,249,231, 19, 39, 78,164, 90,181,106,133,130,130, 2,216,216,216, 64,161, 80, 64, -169, 84, 98,239,222,189,166,172,172,172,157, 36, 73, 46, 82,171,213,170,151,229,108,208,160, 1, 20, 10, 5,210,211,211,205,156, -219,141, 70,227,226,156,156,156, 76,240,168,223, 53,101,201, 78,101, 97, 26,214,155, 76,166, 32,179,171,149,155,155,251,101,102, -105,143,241,151, 82,247,239,188,243, 78,243,156,156,156,237, 6,131, 33,112,208,160, 65, 24, 62,124, 56,222,125,247, 93, 12, 31, - 62,156, 50,187, 86,127,252,241, 71, 98,189,222, 24,202, 38,123, 38, 41,122, 32,199,113,237, 1, 16, 4, 73, 90, 50,217,115,157, - 74,188,131,151,181,167, 84,204,238,144,138,216, 30, 26, 61,121, 77,163, 35, 39, 68, 39, 20, 61,254, 59,111, 54,101, 19, 59,255, - 10, 0, 58, 35, 55, 42, 61, 93,125,190,190,229, 89,214, 68,120,128, 32, 8,138,227,184,141, 28,199, 29, 80, 40, 20,143, 45,177, -221,171,114,114, 28, 71, 2,165,193, 69, 47, 92,184,240, 29, 65, 16,163,116, 58,157,147, 88, 44,206,230, 56,238,151,190,125,251, - 46,222,176, 97,131,177,150, 27, 52, 91, 83, 58, 61, 60, 60,246,185,185,185,181, 44, 59, 78,165, 62, 87,230,111,243,250,178,120, - 68,143,148, 74,229, 72, 75,203,211,179,153,251, 89,207,166,238,111,122, 54,117, 3, 0, 60, 78, 86,225,113,178,242,220,227, 39, -202,254, 47, 89, 71,229,147, 61, 19,101,161, 24, 56,203, 38,123,174,196,233,237,237, 29, 65, 81,148, 71,125, 46, 74,150,101, 85, -113,113,113,126,150,164, 83,161, 80,140,104,216,176,225, 10,149, 74,117, 36, 61, 61,125,250,171,120,243, 86, 40, 20,221, 72,146, - 60,197,178,172,180,170,195,101, 22, 97, 53,116,114,175,145,243,251,121, 62,223,118, 15,124, 99,200,245,203, 87,143,126,179, 60, -110, 73,197,109,147,223,107, 48,110,228,228, 47, 87,238,219,188,254,235,205,191,231,237,172, 43,157,237,218,181, 11, 3,208,210, -236,102,213, 6,147,201,164,138,139,139,235,248, 50,174,131,125, 59, 4,216,201, 28,151,232, 13, 6, 95,146, 0, 39,164,233,152, -252,252,156,111,107, 16, 87,213,114,186,187,187,175,104,209,162,197,151,143, 30, 61,218,159,158,158,254,105,133, 50,254,161, 73, -147, 38,147,211,210,210, 54,165,167,167,207,182,180,142,154, 54,109,106,227,235,235,155,183,104,209, 34,114,225,194,133, 8, 15, - 15,183, 87, 42,149,121,175,162,222, 27, 53,106,228, 42,145, 72,246,176, 44,235,105, 50,153, 54, 63,121,242,100,245,203,112,122, -121,121,209,249,249,249, 95, 54,108,216,112,134,139,139,139, 75,102,102,102, 74,106,106,106, 72, 70, 70,198, 79,245, 16, 87,117, -214,145,159,159,159, 14, 40,157, 78,204,194,254, 86,255, 74, 7,171,202,249,228,201,178,236, 50, 95, 95,223, 15,199,141, 27, 71, - 36, 36, 36,224,252,249,243,120,250,244,233,209,178,254,124, 15, 94, 5,231,217,179,103,185,148,148,148, 67, 36, 73, 46, 80, 42, -149,143,255, 63,230,157, 71, 61, 79,148, 90,241,206, 59,239, 52,239,212,169, 83, 88,187,118,237,216,118,237,218, 21,189, 10,206, -215,145,206,191, 52,156,163,236, 85,115,190,142,116,190, 12, 39,199,113,228,223,249,252, 19,242,222,162, 69, 11, 14,150,207,191, -246,175,171,163,127, 43,231,150,165,237,220,110, 95,248,104,237,142,239,219,190, 48,121,121,240,212, 6,214,127, 30,123,127,101, -240,212, 6,214,255,209,242, 36, 95,242, 5,183,109,245, 47,102, 13,183,190,247,222,123,166,134, 13, 27,110,255,135,231,157,104, -220,184,177,152,191,142, 94, 61,167,139,139, 75, 71,133, 66,113, 92,161, 80, 28,119,119,119,239,244,138, 57,127,119,117,117,245, -251, 31,229,157,199,235, 56,249,222,125,247, 93,231,247,222,123,207,158,191,240,120, 78,158,147,231,228, 57,107,231, 84, 40, 20, - 82,190, 60,121,206,255, 32,231,127, 10,130,127, 74, 66,142, 31, 63,158,197, 87, 7, 15, 30, 60,120,212,141,250,132,118,224,193, -131,199,255, 6, 68, 45, 42,180, 62,109,171, 47,163,100,239,241,156, 60, 39,207,201,115,242,156, 60, 39,207,249,127,142,179, 46, -110,190,111,215,107, 18, 94, 60, 39,207,201,115,242,156, 60, 39,207,201,115,254,223,227,252, 79,129,228,139,128,199,235,198,134, -241,112,223, 48, 30,238,175,107,127, 30, 60,120,240,224,193,227,159, 6,193,127, 45, 67,254,254,254,222, 28,199,141, 36, 8,226, - 67, 0,224, 56, 46,148, 32,136,125,145,145,145, 22, 69,160,149, 72, 36, 25, 90,173,214,185,236,119,150, 86,171, 85, 84,216, 76, - 84,248, 0,165,163,213, 42,126,170, 69,211,166, 77, 51,116, 58,157, 37,243,235, 69, 19, 4, 17,197,178,108,164, 92, 46,191,246, -240,225,195, 36, 75,243,221,183,111,223,207,101, 50,217,183, 26,141,102,229,185,115,231,214,255,127, 40,234,206, 13,221, 92,119, - 25, 25, 3,155,145,149, 59, 31, 64,181,211,240,108, 30,135, 16,130,195,236,178,223,171, 38,239,196,220,218, 72,235,187,127, 45, -232, 40, 20, 10,167,184,184,184,188,157,158,158, 30, 1,224,107,240, 81,136,121,240,224,193,131,199, 63, 81, 96,117,241,179,111, - 69,176,134,217, 66,138,123,195,104, 34,174,114, 36,189,234, 86, 84,110,210,223, 73,128, 66,161,104, 72, 16, 68, 47,142,227,188, - 72,146,188,203,178,236, 57,181, 90,253,172, 62, 28,126,126,126, 13, 1, 12, 7, 48,162,115,231,206,109, 39, 77,154,132, 22, 45, - 90, 64,171,213, 34, 60, 60,124,206,175,191,254, 58,135,227,184,123, 40,157, 82,230, 64, 84, 84, 84, 90, 77, 92, 90,173,214,217, - 28,155,137, 32, 8,231, 15, 63,252, 48,188,194, 36,188,132,121,114, 89,142,227,110, 1,184, 73, 16,196,141,223,126,251, 45,189, -149,147,164, 75,147,134, 78,239,156,137, 76,157, 95,149, 83,167,211, 57, 71, 31, 63, 10,142, 49,225,185, 50, 21,205,223, 31, 94, -190,237,252,251,125,192, 21, 23, 66, 40,166,163,131,254,184, 17, 5, 32, 50, 53, 53, 53,170,113,227,198, 73,181,113, 86, 69,135, - 14, 29, 22, 7, 7, 7, 59, 14, 26, 52,104, 10,128, 26, 5, 86,125, 56,107,129,184, 75,199,246,151,142, 31, 62, 32, 1, 65,226, -189, 33, 31,238,191, 30,121,111, 52,128, 74, 19, 64,111, 30, 11, 23,130,192,236, 73, 95, 77,162, 0,224,199,117, 91,190, 94,251, - 49, 54, 76,255, 21, 25,110,110,110, 65, 28,199,125, 93, 86,206, 43, 85, 42,213,165,205, 99,225, 2,224,155, 73, 95, 77, 34, 0, - 96,203,186, 45,179, 55,143,197,250,201,187, 81,223, 0,119, 95,140, 29, 59,118,195,178,101,203,168,178, 32,124,111,121,123,123, -183, 42, 44, 44,244, 6,192,119, 14,230,193,131, 7, 15, 30,255,123,129,229,227, 99, 99, 39, 37,185, 25, 82, 17, 55,188, 87,183, - 22, 77,223,125,187, 27,209,172,121, 51, 36, 37, 36,121, 94,186,124,231, 19, 49, 21,159,172,209, 19, 7, 52, 44,177, 38, 46,174, -246,249,195, 22,140,135,145, 97, 74,143, 41, 16,192,180,231,156,199,209,160,160,160,166,227,198,141,131,159,159, 31, 34, 34, 34, -130, 14, 29, 58,244,229,201,147, 39,239, 24,141,198, 83, 98,177, 56,172,174, 8,199,126,126,126, 43,220,221,221,191,158, 57,115, - 38,209,177, 99, 71,136,197,127,133, 93,145,203,229,232,211,167, 15,250,244,233,131,140,140,140,182, 97, 97, 97,109,247,237,219, - 23,226,231,231,183, 50, 42, 42,106,142, 37, 5,244,237,183,223,250, 87,179,250, 44, 65, 16,143, 72,146,140,244,242,242, 74,111, -238, 42,107,237,104,111,119,226,251,101,139,112,230,205,177, 53, 10,151,223,251,119, 3,128, 74, 2,203,144,147, 9,137,181, 60, -154,150, 74,163, 0, 68, 2,136,106,220,184,113,180,165,156, 0, 16, 24, 24, 40,190,127,255, 62,193,113, 28, 58,117,234,100, 79, - 16, 68, 18, 73,146,235,207,156, 57,179,165,226,126,245,225,172,203,189, 10,158, 61,153,206,121, 28,141,196, 27,231, 48,216,223, - 93, 18, 21,119,127,169, 86,111, 60, 92,219,159, 8,130, 36,119, 71, 56,206, 1,178,190,100, 89,246,219,132,132,132, 64, 0,240, -242,242, 18, 1,184,180, 39,188,193,128,177,221, 10,254,206, 36,159, 52, 69, 81,155,119,238,220, 57,126,244,232,209, 72, 73, 73, -193,181,107,215, 32,151,203,177,120,241,226, 38, 51,103,206, 12, 97, 24,230, 75,254,178,231,193,131, 7, 15, 30,255, 83,129,213, -195,207, 42, 60,168,107, 19,255, 65,253,187,145, 45,188,188, 65,139,173,202,183,181,243,243, 67, 59, 63, 63, 98,226,196,162,102, - 49, 81, 49, 11,206,252,121,123,158, 45,205, 68, 94,139, 42,169, 49,232, 25,195, 64, 16,178,108, 31, 0, 96,207,142,145, 84, 82, - 82, 82, 83,169, 84, 90, 81, 40, 32, 48, 48,144, 12, 9, 9,233,124,233,210,165,206, 7, 14, 28, 48, 24,141,198,117, 42,149,170, -182,169, 51,190, 62,116,232, 16, 65, 81, 20, 40,138,170,113, 39, 87, 87, 87,244,235,215, 15,174,174,174,196,236,217,179,191, 6, - 80,173,192,146, 72, 36, 89, 4, 65, 56, 3, 64,131, 6, 13, 76,193,193,193, 49, 92, 25, 0,128,101,217, 91, 20, 69,221, 36, 8, -226,214,209,163, 71,149,158,110, 18,119, 57, 45, 62,183,125,235, 70, 24, 11, 51,107,140,227, 85,162, 74, 55,171,140, 74,235, 69, - 50,171,104,145, 76, 22, 37,146,203, 35, 1, 68, 17, 4, 17,109, 41,167, 89, 92, 73,165,210, 43, 91,183,110,109, 0, 0, 83,167, - 78,181, 43, 41, 41,177,155, 48, 97,194, 28, 0,229, 2,171, 62,156,181,192,238,141,174, 29,159,126,240,238, 91, 54,126,157,123, -224, 86,232,143,200,207, 47, 70,113, 81, 9, 88,150,125, 97,230,223,201,187,145,185,121, 28, 86,253,184,118,203, 55, 4, 73, 18, -190,253,191, 70,127,123,110, 90,206, 47,191,196, 1, 16,138, 68,162,178, 34, 33, 4,238,238,238,110,214,110,173, 86,181,232,209, - 26, 91,214,111, 6,199,178, 28,128, 85,245,112,175,156,173,173,173,143,157, 59,119,174,115, 64, 64, 0,110,221,186,133,199,143, - 31, 99,242,228,201,250,201,147, 39,211, 99,198,140, 33,102,204,152, 49,117,229,202,149,161, 0,174,243,151, 62, 15, 30, 60,120, -240,248,159, 9, 44, 9,109, 10, 8,222, 16, 3, 83,241, 35,112,198, 84,112,134,140, 23,246,177,178,107,136, 54,190, 46,176, 18, - 57,145,119, 19,214, 6, 84,217, 92,235, 80, 75,179,184, 10, 93,237,230,163, 41, 86,211, 0, 32,149, 41, 12, 31,204, 80,198, 5, - 4, 4,192,201,201,137,190,113,227,198, 12,160,210,220,100, 85, 57, 9,125,108, 4, 18,223,237,142,230,137,185,176,178,178,130, -249,193,109, 70, 82, 82, 18,174, 92,185,130,148,148, 20,120,122,122, 2, 47, 70, 80, 46,231,212,106,181,174,253,251,247, 15, 91, -185,114,101,207, 21, 43, 86,220,221,191,127,127, 47, 0, 37,213,186,123, 13,109,236, 88,134, 59,183, 99,203, 90, 33,244,197,246, -247,239, 92,175, 49,239, 77,223,253, 0,147,242, 75,155, 30, 15,122,187, 65, 98, 35,135, 88,110, 29,221,239,236,157,114,231,138, - 32,136,104, 75, 57,131,130,130, 62, 17, 8, 4,243, 13, 6,131,237,182,109,219,236,236,236,236,200, 99,199,142, 25,182,110,221, - 90, 68,211,180,158, 32,136,229, 47,147,206,218, 32,164,168, 37, 63, 4,207,182,177, 34, 25, 68,157,250, 5,233, 41,169,136,125, -168, 52,254,118, 53,222,164, 55,154,198, 85,199, 57,121, 39,230,206,120, 79,180, 43, 66,237,121,124,224,194,201, 45,151, 14,114, -129,193, 96,216,145,157,157,141, 9, 19, 38,128,101, 89,244,232,209,163, 59,199,113,202,105,211,166,193,211,211, 19, 59,254,120, - 80, 34, 40,188,221,107,223,197,162, 8, 11,211,217,182,113,227,198,231, 46, 93,186,228,226,238,238,142,176,176, 48,100,100,100, - 64,161, 80, 96,242,228,201,162, 21, 43, 86,236, 41, 44, 44, 28,186,108,217, 50,201,189,123,247, 14,156, 61,123,182, 33, 74,251, -204,189,142,161,192, 60, 39,207,201,115,242,156, 60,231, 43, 6,199,113, 1, 0,156, 0,100, 19, 4,113,167,226,114,217, 46, 78, -101,223, 85,151,115,202,158,249, 21, 39, 47,207, 41,123, 6, 56, 1, 48, 1, 8, 39, 8, 34,239, 85,167,217, 44,176, 2, 1,132, - 1, 88, 4, 32,184,234, 78, 6,101, 24, 68, 77,222, 7, 36, 62,224,244,143,192,234,149,224,132,206, 40, 46,145, 32,231,105, 10, - 18,111,133,130, 99, 74,234, 62,152, 0,204,198,117, 35, 5,214, 86, 0, 45,118, 50, 20, 21, 21, 65, 38,147, 65, 83,172,166,199, - 76, 40,119,182,232, 75,151, 46, 33, 50, 50, 18,110,110,110,117,138, 64, 0,224,244,165,173,136,122,189, 30,122,189, 30, 25, 3, - 58, 65,214,165, 39,242, 70, 77,198,133, 11, 23,144,157,157, 13,154,166, 65,211, 52, 24,134,169, 51,157,100,217, 76,188,102,211, -170,186,125,220,221, 33, 49, 25,141, 39, 54,174, 89,110, 99, 35,183,114,137, 56,247, 59, 82, 82, 50, 44, 42,116,145,204, 10, 34, -169, 85,180, 72, 38,173, 36,174,234,195, 73, 81,212,226,195,135, 15,187,235,116, 58,208, 52,141,208,208, 80,195,238,221,187,227, -138,139,139,223,136,138,138,210,188,138,116, 86,133,131,147,211,201,247, 63,254,108,242,210, 79,251, 65, 83,172,197,209,171,241, -248,243,110,242, 32, 0,215, 0, 20,215,244,191, 53,191,235, 31,186,185, 21,244,153, 48, 97, 66,244,145, 35, 71, 28,127,248,225, - 7,152, 76, 38, 48, 12, 3,134, 97,202,127,155, 76, 38,236,223,191, 31,215,110,199, 79, 83,171,139, 34, 44, 76,150, 91,211,166, - 77, 47,220,190,125,219,201,202,202, 10,231,207,159, 71,126,126, 62,190,248,226,139,114,231, 42, 63, 63,127,248,150, 45, 91, 62, -120,250,244,233, 15, 87,175, 94,125, 6,128, 2,192,128, 7, 15, 30, 60,120,252,147, 80,155, 22,113, 34, 8,226, 4,199,113, 3, - 57,142,235, 11, 64,100, 94, 6, 0,130, 32, 78,148, 61,183, 43, 45,207,153, 51,103, 94, 72, 72, 72,156,121,217,188,207,220,185, -115,125, 86,172, 88,177,188,107,215,174, 7,110,220,184,241, 4,192,107, 19, 88, 97,168,101, 94, 44,221,163, 95,161,123,242, 27, -104, 69, 16, 68,205,134, 65,232,216, 21,105,247,195, 16,125, 97, 13,210, 31, 92, 3,199,154,224,210,176, 77,157, 7, 91,250, 19, -132, 10,133, 34, 82,165, 82, 33, 42, 42, 10,143, 30, 61,130, 68,242, 66,203, 18,254,252,243, 79, 0,128,139,139,139,101,130, 37, -160, 59, 26,198,168,145,230, 91, 58,224,175, 97,140, 26, 0,176,124,238, 92,136, 68, 34,208, 52, 93,190,175,201,100,170,147,143, - 40,235,213, 94,214, 44, 88,221,232, 64, 66,194, 88, 31, 90, 56,103, 74,227,166,158, 45,220,110,159, 60,136, 39, 79,148,200,204, -180,172,126,196,114, 89,180,216, 90, 22, 37,146,254,213, 44,248, 18,156, 7,135, 14, 29,250,201,144, 33, 67,164, 93,186,116, 17, -255,252,243,207,249, 85,197,213,223, 77,103, 69,184,186,186,246,127,231,157,119, 78, 78,156, 56, 17,131,223,234,139,145, 61,188, -184,244,172, 2, 13,128,243,101,111, 0,181, 66,165, 82, 41, 1,244,123,255,253,247,127,245,241,241,241,226, 56, 14,109,218,180, -193,224,193,131,113,248,240, 97,196,199,199,163,168,168,200,112,245,234,213,117,106,181,122,167,133,201,178,106,208,160,193,153, -139, 23, 47, 58, 89, 89, 89,225,220,185,115, 40, 41, 41,121,193,185, 90,190,124,185, 36, 57, 57,121,211,217,179,103,155,160, 52, - 52, 9, 47,174,120,240,224,193,227,159,135, 90,181,136, 89, 56,113, 28, 55,176,162, 96,170, 42,180,204,191,205,251,133,132,132, - 12,172, 40,190, 0, 96,197,138, 21,203, 43, 44,151,188,142,204,152, 5, 86,175, 50, 33,209, 11,192,229, 42,182, 92,233, 15,150, -129, 65,121, 30, 6,229,121, 88,249,206,199,177, 13,163, 42, 17, 89,226, 12, 85, 7,173, 86, 11,161,200,193,176,103,199, 72, 26, - 0, 76,156,204,240,194,177,235,182, 14, 45, 62,158, 37,233, 36, 8,130,172,192,251,130,120,240,240,240, 88,221,181,123,231, 30, - 45,218,117,178,186,125,230, 8, 30, 62, 72, 65, 78, 78, 1,192, 65, 91, 19,231,249, 97,111,163,248,113, 18,164, 54, 54,209,253, - 47,198, 84,114,174, 94,134,243,194,133, 11,179,186,116,233,242,109,104,104,168,202,211,211, 83, 44, 16, 8, 12, 85,196,213, 75, -165,179, 34, 20, 10, 69,119,129, 64,112,142, 36, 73,105, 80, 80, 16,166, 77,155,134,245,235,215, 51,172, 80, 50,112,203,153,136, -161,207,117,134,249,150,136,171, 10, 34, 43, 86,165, 82,121, 39, 37, 37,137, 25,134, 9,122,247,221,119, 79, 13, 24, 48, 0, 55, -111,222,196,133, 11, 23, 90, 26, 12, 6,117,217,113, 23, 3,112, 33, 73,114,101, 45, 51,185,147, 52, 77, 31,184,112,225,130,143, -155,155, 27,206,159, 63,143,146,146,146,114,231,106,236,216,177,149,156,171, 27, 55,110, 60,227,197, 21, 15, 30, 60,120,252,163, - 81,163, 22,169,232, 62, 85, 39,178, 44, 65, 5,241,165,153, 51,103,206, 60,130, 32, 78,148, 57, 92, 26, 0,170,215, 37,176, 46, -151,169, 70, 14,117,207,240, 14, 83,209,147, 23,214,177,236,203, 63,183, 90,246, 61, 27, 39,149, 74,177,101,203, 22, 88, 89, 89, -213, 91, 56, 21,159, 58,130,180,201, 31,151, 59, 87,102, 39, 11,253,199,188,172,192, 50, 59, 88,183, 80,165,137,208,221,221,125, - 74,187,118,237, 62,221,190,251, 87,235, 21,223,126, 93, 80,152, 24, 39,208,150,232,100, 58, 35, 99,120,148,153, 83, 99,120, 4, -166, 48, 31, 98,153, 44, 90,104, 37,125, 65, 92,189, 44,231,173, 91,183,180,189,123,247,222,181,124,249,242, 46, 44,203,238,126, - 21,233,172, 40,174, 28, 28, 28,206,110,218,180, 73, 42,149, 74,161,211,233,176,114,229, 74,252,249,231,159, 3, 51, 50, 50,206, - 2, 56,251,178,245,109, 48, 24,198,247,237,219,119,237,172, 89,179, 96, 52, 26, 49,108,216, 48, 60,125,250,244,220,195,135, 15, -215,123,120,120,204,250,226,139, 47,220, 28, 29, 29, 49,105,210, 36, 26,192,216, 26,104,190,223,183,111,223, 64, 95, 95, 95, 92, -190,124, 25, 5, 5, 5, 80, 40, 20,152, 50,101,138, 40, 36, 36,100, 79, 81, 81,209,208,144,144, 16,222,185,226,193,131, 7,143, -127, 15, 44,210, 34, 21,157,168,250,160,194,255,132, 33, 33, 33,113, 33, 33, 33,149, 28,174,215, 37,176,184, 10,234,177, 78,119, -136,213,188,216,135,135, 53, 49,245,201,164, 69,251, 89,210,156, 7,252,213, 7,171, 26,161,244,194,114, 61,250, 96,157,229, 56, -238, 70, 69,129,229,238,238,254,158,171,171,235,247,251,246,237,147,170, 84, 42,120,180,106,107,123,242,240,111, 58, 23,153, 88, -155,158,155, 59, 38, 86, 85, 28, 90, 19, 39,171, 45,142,150,200,228, 81, 18, 43,121, 85,113,245,210,156, 0,112,241,226,197,153, - 85,215,253, 93, 78,133, 66,209,221,209,209,241,236,166, 77,155,172, 84, 42, 21,104,154,134, 92, 46,199,197,139, 23, 81, 38,174, - 94, 26,238,238,238,193,147, 39, 79, 94, 56,118,236, 88,228,229,229,225,194,133, 11, 8, 10, 10,194,166, 77,155, 26, 95,188,120, -113,109,183,110,221, 64, 81, 20,206,159, 63, 15,163,209,248,160, 6,154, 33, 19, 39, 78,156,245,193, 7, 31, 32, 60, 60, 28,106, -181, 26,147, 38, 77,210, 79,153, 50,165,188,207,213,143, 63,254,248, 65,114,114, 50,239, 92,241,224,193,131,199,191, 7, 53,106, -145, 42,207,242,147, 28,199,189, 83,213,213,170, 42,190,204, 14, 85,197,229,170,251,151,109,215,190,142,204,152, 5, 86,205,174, - 21,103, 2,101,223, 30,166,220,216, 10, 2, 75, 93,105, 23, 90, 44,135,201, 2,225,178, 96, 60,140, 78,118,106,193,222,197, 36, -132, 34, 7, 67,203,190,103,227,106,218, 87, 46,151,131,101, 89,139,116, 24, 61,224, 3,170,121,255,247,240,184,157, 43, 56,163, -161,220,201,194,188,121,149,196, 21, 77,211,208,235,245, 64,221,205, 90,225, 4, 65, 60,165, 40,234, 38, 0, 46, 48, 48,112,135, -209,104,124, 47, 47, 47,175,193,132, 9, 19, 12, 57, 57, 57, 56,122,244, 40,118,237,218,165,121,110, 16, 68,228, 61, 51,142,122, -162, 46, 78,175,133, 47,250,157,203,113,149,156,171, 87,192,249, 2, 94, 5,167, 66,161,232,238,236,236, 92, 46,174,196, 98, 49, -228,114, 57,148, 74, 37, 4, 2,193,223, 10,210,217,184,113, 99,177,191,191,255, 55, 99,198,140, 65, 98, 98, 34,230,204,153,163, - 86,169, 84, 71,142, 29, 59, 54,105,198,140, 25,130,192,192, 64,100,101,101, 97,235,214,173,198,240,240,240,229, 25, 25, 25,171, -170, 61,105, 5,130,241, 75,150, 44,225, 84, 42, 21,241,248,241,227, 74,206, 85, 97, 97,225,208,144,144, 16,201,147, 39, 79,120, -231,138, 7, 15, 30, 60,254, 93,168,173, 5, 45,167, 76, 60,101, 86,179, 76, 85, 16, 86, 85,151,179,170, 44, 3,128,190,202,246, -152,215, 41,176,170,133,209, 68, 22,236,219,244,153,237,160, 15,191,128,196,181, 39,244,201, 7,193,106, 50,203, 5, 22, 45,177, -134,141, 99, 35, 20, 62,215,224,122,194, 19, 24, 77,100, 65,109,124, 12, 3,193,212,175,254, 26, 45,104,103,103,135,130,130,130, - 74,142,150,149,149, 21,220,220,220, 80, 88, 88,136,208,208, 80,112, 28,119,189, 14, 55,108,201,152, 49, 99,190,251,226,139, 47, -200,230, 35,198,225,249,173,171, 47,184, 86, 18,137, 4, 82,169, 20, 74,165, 18,247,239,223,103, 57,142, 91, 82,135, 58,190, 77, -146,100,244,111,191,253,150, 30, 24, 24, 56,182, 65,131, 6, 35,198,141, 27, 39, 13, 15, 15,199,146, 37, 75, 4,231,207,159, 55, -220,185,115,135, 49,153, 76, 51, 85, 42,213,214, 58,207, 24,130,168, 42,174,254, 54,103, 53,226,234,111,115, 42, 20,138,110,110, -110,110,103,215,175, 95,111,149,145,145, 1,177, 88, 12,107,107,107,164,166,166, 98,201,146, 37,197, 12,195,188,245, 55,207, 55, -177, 76, 38, 19, 27,141, 70,236,222,189, 27, 74,165,178,107, 70, 70, 70, 42,203,178, 91, 63,255,252,243, 13, 94, 94, 94,109,238, -223,191,255,224,249,243,231,147, 51, 51, 51, 19,107, 34,177,179,179,235,234,228,228, 68,220,188,121, 19,147, 38, 77,210, 79,157, - 58,181,188,207, 21,239, 92,241,224,193,131,199,127, 80,121, 17, 68,120,109,203,255, 68,212, 58,217,115,118,137,198,121,235,158, - 35, 27,134,125,212, 71,123,246,226, 69,160,241, 24, 8,221,251, 3,148, 4,110, 45,187,195,169, 73, 23,196, 60,204,192,209,171, -113,218, 36,165,126, 67,118,137,166,234,124,123,181,206,182, 93, 80, 80, 35, 29,184,229, 0, 0, 32, 0, 73, 68, 65, 84,128, 38, - 77,154,224,209,197, 1, 62,119, 14,181,241,243,179,223,232,215, 16,171,125, 46, 94,188,136,213,171, 87, 63, 79, 74, 74, 90,211, -178,101,203, 89,181,113, 70, 71, 71, 47, 74, 75, 75,235, 48,119,238,220, 51,243,211, 11,145,183,120, 51, 10,191, 26,131,140, 62, -237, 96,101,101, 5, 71, 71, 71, 20, 23, 23,227,202,149, 43,136,137,137, 57,163,213,106, 59, 68, 71, 71, 47,170,141,147,227,184, - 91, 94, 94, 94,143, 59,117,234,100, 93, 80, 80,176,126,204,152, 49,210,226,226, 98,228,228,228,224,217,179,103,184,125,251,246, -121,189, 94,239, 83,135,104, 41,231,100, 89,182, 92, 92,189, 42,206,138,120, 85,156, 50,153,108,246,209,163, 71,173, 72,146,132, - 88, 44,134,173,173, 45,210,210,210,176,120,241,226, 98,141, 70,243,150, 90,173,182, 52, 64,103,141,245,206,178, 44, 24,134, 1, -199,113, 16,137, 68,133, 0,144,153,153,153,248,228,201,147, 62,199,143, 31, 87, 60,122,244,168, 87, 13,226,170,156, 51, 39, 39, - 39,236,233,211,167,144,201,100,152, 58,117,170,104,249,242,229,123,215,175, 95,175, 13, 9, 9,161,251,246,237,187,233,236,217, -179,173, 53, 26, 77, 79, 11,196,213,255,229, 89,235,121, 78,158,147,231,228, 57,255,105,156,255, 41,212,234, 96, 37, 36,192, 0, - 20,125,233,229,101,189,104,229,150,125, 91,246, 30, 58, 60,100,194,240,247, 5,254,237,130,144,156,113, 12, 87, 34, 46, 49,121, - 69,220,209, 34, 61, 53, 41, 33,161,168,206,177,255, 2, 1,152,185,243, 71, 10, 0, 64, 40, 4, 51,111,224,192, 48, 31, 31,159, - 30,131,124,179,232, 73, 83, 75,157,173, 45, 27, 71,210, 97, 97, 97,135,196, 98,241,182,228,228,228, 66,165, 82, 89,103, 38, 98, - 98, 98,238, 2,120,155,162,168,158,179,102,205,250,126, 64, 83,143, 78, 67,186,246,130, 80, 40,196,157, 59,119,144,155,155, 27, - 78,146,228, 55,209,209,209, 87, 44, 41,148, 63,254,248, 35, 29, 0, 74, 74, 74,150,180,108,217, 82,148,144,144,128, 71,143, 30, - 33, 41, 41, 9, 38,147,233,161, 82,169,172, 87,135, 56,137, 68,114,155, 32,136,184, 87,201, 89, 17,175,138, 83,163,209, 44, 95, -186,116,233,155,139, 22, 45, 18, 91, 91, 91, 35, 58, 58, 26,139, 22, 45, 42,214,106,181,245, 17, 87,181,130,227, 56, 24,141,198, -122,141,252,172, 6,223,248,250,250,182, 94,186,116,105,203,178,190, 92,188,115,197,131, 7, 15, 30, 60,254, 61, 2,235, 47,161, - 85,148, 7,224,163, 14, 94,214,158,203, 55,255,186, 67, 42, 98,123,104,244,228, 53,141,142,156, 16,157, 80,244,216,210,131, 45, -253, 9,194,202,107,212,176,179,179,147,165,185,226,185,121, 77, 90, 38,160, 86,171, 87,190, 76,102, 34, 34, 34,174, 0,232,204, -113,220,144, 83, 4, 49, 15,120, 2,142,227,150, 71, 71, 71, 31,173, 15, 79, 64, 64, 64,147,226,226,226,189, 58,157,174, 3,203, -178,162,203,151, 47, 67,171,213, 34, 33, 33, 65,195,178,108,104,125,211,149,156,156, 28,247,170, 57, 95, 71, 58,149, 74,229,157, - 19, 39, 78,244, 37, 8,226,194, 55,223,124, 35, 94,188,120,241, 43, 21, 87,246,246,246, 37, 25, 25, 25,207,180, 90,173, 67,102, -102,166,222,222,222,190, 36, 37, 37,229,101,168, 30, 22, 22, 22,182,155, 62,125,250,226, 89,179,102,205,254,254,251,239,105,190, -207, 21, 15, 30, 60,120,240,248,215, 35, 48,208, 81,102,225,174, 22, 89,136, 11,198,195, 56,103, 44,184, 57, 99,193, 45, 24, 15, -227,171,224,172, 39, 42,113,182,106,213,234,128,163,163, 35, 67,211,180,142, 36,201, 18,138,162, 10, 5, 2, 65, 6, 73,146,147, - 96, 65, 24,139,127, 51, 39, 0,184,184,184,116,244,246,246, 62,160, 80, 40,186,189,138,242,172, 8, 87, 87,215, 55, 61, 60, 60, - 14,186,185,185,245,122, 69,156, 1,111,189,245,214, 83,169, 84,122,195,210, 23,134,255,159,231, 18,207,201,115,242,156, 60, 39, -207,201, 3,252,137,194,115,254, 75, 57,137,151, 16, 87,124,121,242,156, 60, 39,207,201,115,242, 2,235,181,129,228,139,128,199, -127, 0, 28,248,102, 65, 30, 60,120,240,224,241, 15, 2, 81,139, 10,173,207, 76,217, 47,163,100,239,241,156, 60, 39,207,201,115, -242,156, 60, 39,207,249,127,142,179, 46,238,123,224,241, 90,132, 23,207,201,115,242,156, 60, 39,207,201,115,242,156,255,247, 56, -255, 83,224,155, 8,121,240,224,193,131, 7, 15, 30, 60, 94, 49,234,221, 49, 56, 32, 32,160, 5, 0,220,185,115,231,225,107, 76, -215, 20,133, 66, 49,161,125,251,246, 94, 52, 77,147, 5, 5, 5,139, 46, 95,190,188,168,186, 29,219,183,111, 31,241,230,155,111, -122, 94,186,116, 73, 15,252, 53,255,160,249,219,100, 50,165, 71, 70, 70,118,228,171,250,127, 3, 87, 87,215,179, 18,137,164,113, -105,128, 81, 14, 12,107,130,137,229, 96, 50,177, 48,154, 56, 24,244,218, 20,125, 73, 97,255,151,226,246, 29,210,200,100, 98, 67, - 56,112, 91, 8,142,152,196, 17,220, 22,130, 35, 62,231, 72, 98, 11,193,114,159, 65,192,252, 0, 70, 48, 75,192, 10,231,171, 19, - 66,211,254, 11,229, 25, 28, 28, 76,254,205,255, 87, 59,255, 84,135, 14, 29, 78, 72, 36,146,230, 53,253,175,164,164, 68, 29, 27, - 27, 27,244, 95, 62, 87, 93, 92, 92,122,146, 36,185, 17,128, 79,149, 77,137, 0,190, 84,171,213,127,254,211,210,236,228,228,116, -133,162,168,150,197, 37, 37,197,207,139,138, 60,229,114,249, 99,169,149, 76,102, 98, 76, 15,158, 61,203,238,201,223,129,120,240, -248, 7, 11, 44, 63, 63,191, 86, 0, 2, 9,130, 8,228, 56,174,103,203,150, 45, 93, 74, 74, 74, 96, 50,153, 50, 9,130,184,194, -113,220,101, 0,151,163,162,162,146, 94, 69,130, 72,146, 92,181,118,237,218,153, 83,167, 78, 45, 23, 73,247,238,221, 67,187,118, -237,170,221,159,162, 40,143, 21, 43, 86,216,166,166,166,130,166,105,136, 68,162,242, 15, 69, 81,232,210,165, 75,189,142,223,160, - 65, 3,107,103,103,231, 69, 4, 65, 12, 37, 73,146,170,107,127,150,101, 77, 28,199, 29,202,202,202, 90,152,151,151, 87, 84,159, - 99,117,244,111,103, 4,136, 26,142,193,153, 34, 34,239, 10,107,251,127,171, 86,173, 34, 4, 2,129, 71, 69, 65,105, 70,197,229, -138,191, 77, 38, 83,122,124,124,124, 71, 75,203, 66, 98,101, 53,155, 32, 5,125,193,177,109, 74,201,200, 68,142,101, 46,104, 75, - 74, 86, 89,146, 95,177, 88,220, 56, 50, 42,170,101,252,253, 39,240,108,214, 8,122, 3, 3,157,222,136, 99, 23,238,192,215,171, - 41, 6, 13,232,247,210,231, 10,195, 18,193,243,167,140,234,189,124,227,254,128,121, 83, 71,200,151,111,220,223,113,222,212, 17, -214,203, 55,237,239, 56,127,218, 72,235,165, 27,247,117,156, 63,109,164,237,178,141,251,244, 0,198,191,204, 49,198,181,109, 84, - 76,154, 24,113,181,117, 79, 9,116, 59,239,165,202,254, 23, 23,238,242,229,203, 91, 25, 12,134,132,177,195, 58, 46,105,211,194, - 57,171,186,125, 10, 10,178,156, 31, 37, 70,124, 11, 33,237,229,213,105, 94,173,215, 39, 77,211,205,174, 92,185,210,210, 28,105, -223,100, 50,193,100, 50,129, 97, 24,232,245,122,124,240,193, 7,130, 87,145,110,127,127,255,113, 28,199, 45, 43, 61, 45,137,165, -145,145,145,155,254, 6,157, 92, 32, 16, 76, 23,137, 68,129, 12,195,120, 1,128, 80, 40, 76,208,233,116,151, 25,134, 89, 11,252, - 21, 95,207,194,123,207,186,240,240,112,111,107,107,107, 24, 12,134,242,137,225, 41,138,106,211,185,115,231,205, 0, 90, 90,202, -229,238,238, 30, 65, 16,132, 71,125,142,207,113, 92,186, 82,169,172,215,203, 32, 69, 81, 45,159,166,170,156,155, 52,114,195,243, -162, 34, 88, 89,201,100,119,238, 37, 59,251,251, 52,225,159,110, 60,120,252, 83, 5,150,159,159,223, 41, 0,129,109,218,180,145, -246,235,215, 15,126,126,126,104,220,184, 49, 36, 18, 9, 0, 32, 55, 55,215, 37, 62, 62,254,163,232,232,232,143,110,222,188, 9, - 0, 26, 0,215,162,162,162,170,117, 35,250, 12,236, 49, 85, 34, 23,175, 7,128,108,229, 51,117,250,227,172,141,106,181,122, 21, -128,138,111,212,158,163, 71,143,158, 49,109,218, 52,156, 56,113, 2,251,247,239,135, 78,167, 67, 65, 65,205, 83, 28,154, 76,166, -244,209,163, 71, 11,146,146,146,152,154, 28,172,250, 20,136,179,179,243,162, 97,195,134,125,229,237,237, 93, 62,173,139,209,104, - 44,255,206,203,203,195,140, 25, 51,204, 55, 68,176, 44,139,139, 23, 47, 78,253,250,235,175,145,151,151, 55,189, 58,206,190, 61, - 61, 35, 4, 4,225,193,254, 37,202,210, 47, 92,125,210, 17, 32,168, 59, 17, 49, 68,149,155, 44, 0,160, 83, 64,135, 58,197,157, - 64, 32,240,136,138,138,114,166,105,218,162,188,177, 44, 11, 63, 63, 63,139,246,117,115,115, 11,162, 4,244,254, 33,195, 63,109, -208,193,207, 79,232,225,166,128,145, 97,240, 36, 57,181, 83, 76,116,100,135,115,199,127,155, 32,145, 72, 70,168, 84,170, 75,181, -241, 24, 77, 44, 98,226, 30,226,252,181, 40,188, 75, 75, 80,162,213,163,168, 68,143,189,127, 92, 71,122, 86,193, 75,159,184,157, - 58,117,114,207,102,244,157,167,141,127, 79,246,195,143,123,100,211,198,191,135,213, 91,246,150,127, 79,253,116, 48, 86,253,184, - 71, 62,237,211,193,216,184,117, 87,215,166,157, 58,185,135,135,135,215, 56, 45, 64, 77,117, 68,154, 24,241,142,120, 37, 5, 0, -217, 91,183,194,144,153, 9,183,133, 11, 1, 0, 19,125, 60,196,245, 73,179,143,143, 79,185, 32,174, 85, 56, 50, 76,122, 92, 92, - 92,199,186,196, 21,195, 48,156, 64, 32,248,246,234,233, 69,161,221, 58,181,170, 84,152, 73, 15,146,108,131,191, 91,248,225,193, - 51, 69,220, 71,111, 89, 39, 36,132, 47,175, 85,100,177, 44, 75,234,116, 58, 60,120,240,160,218, 40,251, 36, 73,154, 94,166,158, - 2, 3, 3,197,197,197,197,251,228,114,121,251,226,226,226,113, 44,203,126, 23, 22, 22,230, 66,146, 36,250,246,237,251,157,191, -191,127,178, 88, 44,254, 81,171,213, 70,203,229,242, 17,151, 47, 95,214, 89, 72,221,211,218,218,122,239,239,191,255,222,192,207, -207,143,204,201,201, 65,211,166, 77,145,155,155,219,233,202,149, 43,254,159,126,250,233,167, 69, 69, 69,163, 1, 92,169, 71,114, - 91,203,100, 50,110,204,152, 49,132,201,244, 87,118,127,254,249,103,248, 55,207,108,222,175,131,164, 68,107,224, 10,174,198, 74, - 62,231, 72,238, 90, 74, 74,205, 55, 38,130, 32, 60, 22,237,248,210, 89, 36, 18,193,104, 52,150,127, 56, 22, 0, 7,112, 44,192, -177, 28, 56, 14, 0, 71,128, 53,177, 88, 61,119,199, 75, 95, 15, 86, 50,153,149,139,139,107,166,212,202,202,138,227,159,107, 60, -120,252,227, 29,172,183,195,194,194,192, 48, 12,172,173,173, 65, 81,149,159,247,246,246,246,232,217,179, 39, 58,119,238,140,190, -125,251,226,254,253,251,210,239,191,255,190, 70, 59, 98,228,204,129,104,216,210,197, 44, 34, 20, 87, 79, 68,133,252,180,232,176, -163, 90,173,174, 56,215,224,184,137, 19, 39, 18,207,158, 61,195,208,161, 67,175,232,116,186,193, 0, 10,107,203, 64,108,108,108, -199,216,216,216, 87, 86, 32, 4, 65, 12, 85, 40, 20, 56,112,224, 0,244,122,253, 11,219,109,108,108, 16, 23, 23, 87,241, 13, 18, - 29, 58,116,160, 8,130, 24, 10,160, 90,129, 69, 18,132,199,233,176,135,229,243, 52, 14, 27,212,129,238,215,211, 51,243,185,214, -200, 1, 32,230,207,159, 95, 46,174, 56,142,195,226,197,139, 45, 78, 47, 77,211, 72, 76, 76, 4, 69, 81,120,220,163, 21, 0,160, -109, 84, 26, 40,138, 66, 76,123, 55, 0, 64,215, 7,121, 16, 8, 4,144,203,229,150,138,171, 94, 46, 10,143,223,231, 46, 12,177, -214, 26, 57,156,188, 24,142, 84,213,121,112, 28, 7,133,179, 61,186,249,251, 9,189,218,181,119,222,185,121,213,239, 0, 6,171, - 84,170,176,154,197,130, 9, 94,173,154, 97,247,239, 87,176,236,199, 80, 60, 43,212,162,168,164,180, 92,251,118,245,198,207,171, - 95,174,158, 40,138, 90,213,166, 89,179,134,187, 15,158, 69,183, 46,157,176,251,224, 25,116,237,210, 9,187, 15,149, 46,239, 57, -116, 22,111,116,237,140, 61,135,206,162,173, 87,203, 70,207,158, 22,172, 2, 48,188, 70,247,162,106, 29, 13, 46,173, 35, 65,190, -137, 48,215,205,211, 73,147, 74,203,167, 76, 96,213,251, 98, 43, 19,196, 22,184,198,117, 58, 87, 12,195, 32, 43, 43,139,200,207, -207,231,236,236,236, 62,172, 40,178,204,226,234,183,211,133,208, 36,109, 36,126,253,245, 50,251,241,199,129, 9, 9,225,203,189, - 80,218,220,245, 2, 12, 6, 67,242,155,111,190,201, 1,128, 94,175,119, 23,137, 68,116, 21, 1,230,214,173, 91,183, 23, 4, 90, - 93, 77,135,197,197,197,251, 14, 29, 58, 52,196,197,197, 5,131, 7, 15, 62,231,237,237, 45,178,178,178,194,233,211,167,225,225, -225,225,104, 99, 99,115, 42, 36, 36, 4,107,214,172,105,116,238,220,185,253, 0,134, 88, 80,148,125,131,130,130, 14,156, 56,113, - 66, 66,211, 52, 52, 26, 13,226,226,226, 96,107,107, 11,145, 72,132,193,131, 7, 83,221,186,117,115, 8, 10, 10, 58,156,148,148, - 52, 2,192, 5, 75,235, 72,163,209,112,115,231,206,133,149,149, 21,100, 50, 89,249, 71, 42, 50, 17, 91,130,155, 73,191, 90,145, - 33,157,255,245,199, 43,182,239, 60,126,137,101,185,239,210,210, 10,243,107,226,242,160,218, 97,206,172, 57,102,129, 10,145, 72, - 84,201,101, 55,255,166,105, 26, 29, 58,116,168, 51,109,109,218,180,217, 74, 81,148, 83,197,117,121,121,121,212,183, 11,230, 49, -119,227,238,203,140, 12,100, 90,189, 17, 75, 23,127,199, 80, 36, 69,249,248,248, 28,229, 56, 46, 59, 62, 62,254,115,254, 81,199, -131,199, 63, 75, 96, 65, 46,151,227,206,157, 59, 32, 8, 2,214,214,214,176,177,177,129,173,173, 45, 10, 11, 11, 17, 31, 31,143, -196,196, 68, 36, 39, 39,131, 36, 73,120,122,122, 2, 47, 70, 15, 47, 31,106,185,111,245, 9, 72,228, 98, 16, 4, 16,208,175, 61, - 58,246,246,197,189,219,143,191,188,115, 14, 59,212,106,245, 3, 0,130,182,109,219,126,218,165, 75, 23,172, 89,179, 6, 58,157, -110,109, 13,226,234,133,225,155,159,189, 39,184, 74, 11,200,134, 6,134, 77,219,246, 59,243,134,175,175,111,132,159,159, 95,211, -187,119,239, 26,205,110, 86,213,102,178, 42,253,178, 42,113,230,228,228,128,101, 89,139, 93,161,252,252,106,239,177,247,170,186, - 82,102, 44, 13, 89, 99, 87, 84,144,133, 37, 43,127,129,209,104,196,204,153, 51,193,178, 44, 88,150,133,201,100, 66, 94, 94, 94, -105,100,167, 58,242,110,206, 19, 69, 81,149, 4,112, 93,203,181,113, 58, 58, 58,202, 72, 74,184,127,214,252, 37,214,177, 73,233, - 56,113, 49, 28, 28,199,225,216,246,239, 0, 0,131, 39, 46,134, 82,157,141,110,254,109, 48,246,179,233,214,235, 66,230,239,119, -116,116,108,158,147,147, 83, 92, 29,167,145, 97, 17,122,230, 38,212,207,158, 99,244,144,222,208,233,141,200,202, 84, 99,215,143, - 63,224,139, 79,142,160,129, 92,234, 42,117,106,150, 84,177,140,172,173,173, 41,173, 86,123,229,193,131, 7,227,107, 74,167,209, -104,124,123,238, 87, 19,176,110, 71, 40,124, 60, 93,112,226,252, 45, 4,180,109,140, 83, 23,195,209,181, 93, 83,156,185, 28,129, -110,190,158,184,116,243, 30,190,252,252, 99,204,254,242,202,219,245,170,163,229,107,236,138, 10,179,112,114,249, 30,100,109,218, -132,148,169, 83, 17, 80,118, 78,220, 33, 73,208,238,238,128, 77,221,229, 89, 29, 18, 19, 19,161,211,189,104,212,136,197, 98,180, -105,211,166, 86, 78,179,115,149,153,153, 73,100,102,102, 66, 38,147, 17, 9,113,247, 76, 94, 62,109, 63, 52,229, 30,220, 1, 0, -165,206, 85, 33, 74,238,111,128,230,193, 70,208,249,119,201,237,139, 63,211, 79,252,110, 91, 66,133,107,244, 94,149, 23,149,242, -242,233,220,185,115,226,181,107,215, 90, 87,112,129,193, 48, 12,205, 48, 76, 75,115,179, 33,195, 48,208,233,116, 24, 49, 98, 4, - 85, 91,222,165, 82,105,123, 23, 23, 23,220,190,125, 27,193,193,193, 34, 31, 31, 31, 60,120,240, 0, 36, 73, 98,220,184,113,240, -246,246, 70,118,118, 54, 2, 2, 2,112,245,234,213, 14, 22,148,167,181, 76, 38,219,121,252,248,113, 9, 73,146, 40, 42, 42, 2, -203,178,232,222,189, 59, 8,130,192,221,187,119,177, 96,193, 2, 28, 57,114, 4,191,255,254,187,212,223,223,127,103, 73, 73,137, - 23,128, 34, 11,234,136,211,233,116,156, 68, 34,129, 68, 34,129, 88, 44,134, 88, 44, 6, 77,211,208,232, 41,124,182, 48, 89, 39, - 20,203,217,246,237, 60,155,127, 49,113, 8,185,100,197,174,139, 0,142,213,196,169,226,226, 96,239, 67,224,220,174, 8, 12,158, -212, 19,180, 80, 4, 90, 72, 67, 68,139, 32, 44,251, 77, 11,105,136,132, 98, 80,142,218, 58,207, 37,161, 80,232, 24, 21, 21,101, - 87,241, 90,102, 24, 38, 97,234,212,169,158, 67, 6, 13,116, 57,120,228, 4, 53,106,216, 96,147,171,139,115, 78, 90, 90,202, 67, - 0,118,254,254,254, 92,125,207,207,151, 0,207,201,115,190,118,112, 28, 23, 0,160,226, 11,134, 30,128,200,252,216, 46,187,183, - 57, 84, 89, 15, 0,217,101,223, 78, 53, 44,231, 0,136, 7,224, 85,182,206, 4, 32,156, 32,136,188,191,155,102,179,192,170,120, - 17, 18,213,100, 12,133,133,133, 40, 44, 44, 68, 90, 90, 26,182,108,217, 2,161, 80, 8,129, 64, 0,129, 64, 0,146, 36,203,251, - 43,212,132, 63, 79, 92,219, 8, 96,163,159,159,159,240,167,155,161,167,230,239,254,178, 79,231,126,254, 84,196,249,187, 31, 2, - 88, 10,224,237, 49, 99,198, 56, 2,192,158, 61,123,114, 0,156,182,216,197, 17,144, 13, 55,172,255,165,209,180, 47, 71,153, 5, -133,199,142, 29, 59, 26,164,167,167, 87,122, 75,164,105,186,206,126, 89, 28,199, 29,122,248,240,225, 87, 10,133,162,252, 65, 82, -177,153,144, 97, 24, 72, 36,146,114, 49,164,211,233,176,111,223, 62,134,227,184, 67,181,112, 34, 41,238, 79, 60,136,187, 4,147, -137,173, 36,166,180, 90, 45,130,131,131,203,221, 43, 0,152, 84,230,148, 88,138,218,156, 43,138,162,112,205,179, 84, 9, 12,200, -230, 94,232,171, 85, 21, 66,145,100,230,128,247, 63,182,103, 56,170, 92, 92,149,230,161, 84, 92,136,132, 2, 72,197, 66, 60,120, -156,134,166,238,254,232,243,214,123, 13, 46,156, 58, 60, 19, 64,181,131, 16,140, 38, 22, 3,122,249,227,199, 3,151, 80,248, 92, -139,194,252, 92,228,164, 37, 34, 33, 54, 28, 34,145, 8,183,110,221,178,182,181,181,179,110,214,172, 41, 76, 38, 22,215,110, 69, -192,202, 74,138, 3,251,127,109,170, 51, 24,145,250, 52,121,124, 13,194, 86,208,173,163, 23, 10,115, 82, 33, 16, 8,208,205,175, - 57, 4, 2, 1,186,251,183, 4, 69, 81,232, 17,208, 26, 20, 69, 33,176,179, 55,154, 55,111, 14,150,101, 5,117, 92,188, 72,186, -247, 39,146,226, 47,129, 99, 89,152,216,210,230, 95, 14,128, 65,173,126, 49, 95, 25, 25,224,108,156, 95,230, 38,129,111,190,249, - 38, 95,165, 82, 25,170,113, 14,233, 35, 71,142,216,213, 54, 17, 54, 77,211, 94, 2,129, 32, 33, 55, 55,151,181,178,178, 34, 77, - 38,134,245,242,105, 75, 93, 61,189,168,124,238,201,224,197,139, 66, 63,122,203,230,195, 95,118, 29,231,104,167,238, 4, 65,137, -153, 9,223,109, 19, 65, 72,123, 1, 6, 75, 94, 26, 72,157, 78,135,251,247,239,215, 57, 41, 55,199,113,181,158, 80,197,197,197, - 99, 7, 15, 30,124,238,243,207, 63,151,152, 95, 94, 4, 2, 65,185,232,127,244,232, 17, 72,146,196,246,237,219,161,211,233,234, - 60,241, 5, 2,193, 87,135, 15, 31,182, 21,137, 68,229,226,138,227, 56, 80, 20,133,196,196, 68,172, 94,189, 26, 99,198,140, 65, -106,106, 42, 20, 10, 5,102,206,156, 41, 95,177, 98,197, 87, 6,131,193, 18, 91, 56, 86,175,215,119,148, 74,165, 16,139,197, 48, - 11, 45, 0,136,124,228,114, 47, 57, 57,185, 93,163, 70, 50,215,166,222,119,255,232,213,163,189,175,131,131, 93,215, 39, 41, 5, -199,106,124, 65,125,222, 8, 69, 73, 2, 4, 6, 6,226,242,229, 43, 24, 56,112, 32, 76, 52, 13, 86, 36, 2, 43, 18,129,163,105, - 64, 36, 2, 33, 18,129,179,178,178,232,244,161, 40, 10, 25, 25, 25,149,214, 77,156, 56, 49,229,227,143, 63,118, 6, 56,168, 84, - 74,110,250, 87,211,148, 57, 57, 57,156,139,139, 11,111, 33,240,248,183,161, 54, 45,226, 68, 16,196,137, 10,247,158,129,230,229, - 57,115,230,204, 11, 9, 9,137, 35, 8,226, 68,197,245,230,253,202, 12,137, 19,213, 45,151,253,215, 97,238,220,185,109, 87,172, - 88,177,188,107,215,174, 7,110,220,184,241, 4,192, 43, 19, 88, 68, 89,198, 44,154,191,174,186,135,116, 93, 2,203,140,168,168, - 40,163,155,155,219, 79,137, 17, 79,250,180,238,216, 18, 82,153,184, 31,128,141, 98,177,120,250,232,209,163,113,235,214, 45,220, -187,119,239,103,212, 35, 50,183,129, 97,211,166,125, 57, 10, 6,134, 77, 51, 59, 84, 51,103,206,164,175, 93,187,102,168,201,193, -170,137, 43, 43, 43,107, 97,120,120, 56,106,235,228,254,209, 71, 31, 85,124, 24,149,119,114,175,241,140, 97, 57, 24, 12, 70, 20, - 23,107, 74,133, 85,217,195,219,100, 50,161,184,184, 24,195,134, 13, 43, 23, 93, 44,203, 34, 43, 43,235,165, 42,147, 36,201,250, - 56, 87,213,115, 80, 84,255,246,190,126,194,139, 55, 98, 43, 61, 92,223,251,108, 41, 68,116,169,184,146, 74,104, 72,197, 66,164, -169, 50,209,198,203,135,190,124,254, 68,255, 26, 5, 22, 99,194,198, 95,207, 3, 4,129,208, 19, 23,209,177,169, 21, 22, 45,248, - 6, 67,135, 14,133, 72, 36,193,225,195,135,176,106,243,110, 76,106,220, 24, 28,128,206, 29, 59, 96,229,214, 3, 88,178,120, 49, -121,232, 96,104,143,186,210, 43, 20, 10, 65, 81, 84,249, 67,187,234, 55, 69, 81,117,138,132,242, 58, 50, 26, 81, 82,172,129,137, -101,193,178, 28, 56,150, 5, 56, 14,238,203,150,193,125,217, 50,220, 33, 75, 7,240,121, 23, 23, 67,163,209, 0,189,218,215, 91, - 92,233,245,122,168, 84, 42, 67,108,108,108,117, 79,191, 76,189, 94, 95,107,122,231,205,155,151,180,124,249,114, 47,123,123,251, -132,216,216, 24, 99,251,246,190,194,170,125,176, 90,181,108, 85, 16,188,120, 81,232,168, 79,222,253,112,235,130,225,204,231, 11, -247, 10,204, 29,221, 67,207, 4,215,125, 61, 25, 12,201,125,251,246,181,168, 43,143, 70,163,201,168,105,155,185, 67,123,171, 86, -173,196,189,123,247,198,149, 43, 87,176,108,217, 50,150, 97,152, 28, 0,232,214,173,155,211,146, 37, 75,136,248,248,120,216,217, -217, 33, 43, 43,107,183,191,191,255,146,218, 58,190,139, 68,162, 94, 1, 1, 1,164, 78,167, 43,127, 41, 33, 73, 18,137,137,137, - 88,177, 98, 5, 70,140, 24,129, 86,173, 90,149, 95, 91, 65, 65, 65,194, 13, 27, 54,244,178, 68, 96,145, 36,249,101,159, 62,125, -126, 64,233, 40,194,138, 55,185, 4, 0,179, 1, 32, 53,245, 89, 70,100,100, 82, 92,159, 64,191,142,205,155,186, 43,194, 35,159, -214,200,247, 76,248, 8, 10, 63, 41,104, 33,141, 49, 95, 15,194,137, 19, 39, 48, 57,248,227, 50, 39,171,212,193, 18, 10,105,208, - 66, 17, 68, 78, 47, 55, 17, 65,217,125,132,176,177,177, 5, 0,216,218,218,154,239,113, 4, 0,142, 36, 73,190, 75, 22,143,127, - 19,234,212, 34,102,129, 84, 85,104,133,132,132, 12,172,186,174,162,152,170,238,119,197,255,174, 88,177, 98,121, 5,238,146, 87, -145, 25,193,171, 42, 21,163,177,246, 57,154,131,130,130,166, 90, 91, 91,175, 55, 47, 63,189,174,196,211,235, 74,120,181,246,233, -238,231,219, 49,127,196,136, 17,112,112,112,192,236,217,179, 57, 0, 59,235,115,236,109,191, 51,111, 84, 92,142,137,137,233, 24, - 19, 19,243, 82,249,200,203,203, 43, 42,235,172, 62,253, 21, 90,155, 48, 26,140, 40, 46,209,194, 96, 48,192,104, 52,129, 97, 76, -240,247,182,198,222,109,223, 64,175, 55,192,104, 42, 93, 87,234,148,153, 32,166,117,232,217,217,195, 8,130,212, 92,185,149,106, - 83, 27,191, 79,100, 42, 40,138, 66,172,175,123,181,206, 85, 63,149,193, 98,161,197,177,166,214, 46, 46,206, 72, 61,115,187,244, - 45,220, 74,130,179,123,150, 64,102, 85,250, 38,255,246,152,121,165, 34, 75, 76,195, 96,208,195,217,165, 9, 24,147,177,117, 77, -124,140,209,160,111,223,210, 29,118,214, 82,196,220,185,137,233, 83,198, 99,220,184, 79, 65, 75,172,113,249,242, 37,164,170,178, -240, 40, 61, 15, 83, 22,254, 8,163,209, 4, 3, 99,130,145, 97,177,110,215, 9, 24, 76,117, 43, 35,154,166, 49,115,230, 76,105, - 77,219, 15, 28, 56,160,177, 72, 96,113,101, 34,184, 68, 3,157, 86, 7,189,161,180, 46, 76,205,132, 88,186,224, 99, 24,141, 70, -104,134,119,133,193,104,132,233,203, 33, 48, 24, 12, 72,179, 18,144,221,253, 21, 70, 16,164,230,122,132,210,198, 82,129, 85, 83, -122, 56,142,171,182,233,176, 38,145,213,190,189,111,194,152, 97, 29, 67,174,223,184,147,125,253,198,157, 23,246,107,214,170,227, -227,207,151, 30,152,107,201, 40,194, 74, 54, 78,133,230,194,191,121,222,127, 23, 22, 22,230, 34,151,203,145,148,148, 4,138,162, - 64, 16,196,179,168,168, 40, 23, 0,120,231,157,119,114,132, 66,161, 3, 69, 81,248,234,171,175, 64, 81,148,211,228,201,147,191, - 5, 80,163,192, 98, 24,198,203,218,218, 26, 69, 69, 69,229,229, 40, 18,137, 48,103,206, 28,140, 26, 53,170, 92, 92,137, 68, 34, -236,222,189, 27,254,254,254,208,235,245, 94,150,164, 87,169, 84,222, 1,240,134, 5,162,166,180, 95, 30,203,214,122, 98,201,139, - 27, 66,155, 44,130,137,166,113,224,216, 49,140, 26, 53, 10, 34,145,184,220,185, 2, 77,131, 16,137, 64,210, 52, 76,148,184,222, -229,203,178, 44, 10, 11, 11,169,221,187,119, 55,243,241,241, 33, 56, 0,109,218,120, 19, 39, 78,158,108, 36,151,203,159,216,219, -219, 27,192,131,199,127, 77,129, 85, 16, 72,175,130,107,206,156, 57,243, 0,112,115,230,204,153,103, 94, 14, 9, 9,209, 0, 80, -253, 99, 4, 86, 93, 14,214,154, 53,107,106, 12,181, 96,126,184,108,216,176, 1,123,247,238, 93, 3,224,113,125,142, 61,113,176, -224,182,149,148, 86,148,104, 12,234,237,199,152,206,237,219,183,143,232,218,181,107,179,136,136,136, 26, 29,172,154, 98, 99,189, -142, 48, 13, 28,199, 65,111, 48,162,164, 68, 3,173, 94,143, 25,223,108,182,168,238, 13,250, 34,193, 59,111,245,148,214,229, 36, - 90,210, 7,171,174,166,193,202, 98,153,129, 89, 3, 60, 47,209, 34,104,196, 28,220,249,163, 84, 27,155,197,149, 84, 44,132, 68, - 36, 4, 73, 0, 68, 45,198,167, 81, 83, 56,232,235,169,227,175,110,249,121,175,199,123, 61, 39, 96,218,180,105, 16,136,172,208, -192,193, 9,140,137, 67, 35, 55,103, 60, 74,207,195,225, 77,223,148,121,195, 28,122,142, 12,198,154, 5, 19,176, 42,184,238,183, -122,138,162,176,105,211, 38, 77, 85,215,170,162,147,101,169, 8, 54,187,140, 26,157, 30,179,230,254,104,121, 29,245,127, 67,106, -105,217, 86, 55,112,194, 82, 1, 86, 85,100, 1,160,128,154, 27,253,196, 14,128, 87,247, 1, 11,254,151, 55, 67,150,101,113,242, -228,201, 23,220,213,170,117,104,169,219,202,178, 44, 82, 82, 82,112,239,222, 61,116,237,218, 21, 5, 5, 5, 16, 0,152,121,247, - 46,188, 71,143,134,174,172,235,130, 72, 36,194,196,137, 19, 95,215, 59,118,169,192, 34,106,175,168, 98,171,116,184,180, 21, 99, -231,138,163,152,186,120, 12,156,218, 72,176,122,238,246,242,237,171,126, 10, 46,235,135, 37,130, 68, 94,255,100, 20, 22, 22, 10, -126, 88,189,186,125,231, 78, 93,164,163,198,140, 35,245, 12,139,165,223,175,167, 14,238,223,227,176,103,207, 47, 82,137, 68,146, -192, 63,142,121,252,215,240,170,196, 85, 85, 7, 43, 36, 36, 36, 46, 36, 36,228, 5, 55,236,181, 10, 44,138,162, 80,113,200,114, -117, 15,121, 75,250, 96,205,152, 49, 3,214,214,214,213,110, 51, 24, 12, 92,108,108,108,188, 90,173,222, 81,219,219,107, 77, 16, - 9, 73,151, 53, 63,236,242,152,246,229, 40, 22, 40, 29,173,181,121,243,102, 59,115, 31,172,138,253,176,234,234,131,229,236,236, -188,104,229,202,149,211,222,126,251,109,146, 36,201, 74, 15, 63,115, 88,134,138, 31,163,209,136,227,199,143, 79, 11, 9, 9,169, - 49, 76, 3,199,149, 54, 63, 21,151,104,160,213,149, 62, 96, 31,221, 11,181,244, 12,168,219,113, 40,115,174,186, 36,229, 86,235, - 92,157,113, 41,125,112, 13,200,174,155,139, 32,169,164,228,148,180, 78,174,142,118,200, 43,120, 14,113, 89,179,160, 25,102,113, - 37, 21,211,104, 96, 43, 71,238,179, 44, 8,133,194,218,220,145,148, 44,117,202, 27,195,134, 12, 56, 71, 82, 2, 73,197, 13, 66, -169,141,213,249,235,119, 27,100,230,149,128,173,144, 79,150,227, 48,117,137,101, 38,166, 80, 40,196,228,201,147,107, 20, 56,199, -142, 29,211,212, 95, 96,233,234, 87, 71,245,112, 50,235,114,176, 44, 21, 88, 85, 97, 30, 93, 72,211,180, 87,153,248,178, 24,237, -219,183, 63,109,101,101,213,212,210,253, 45, 13, 58, 74, 16,196,226,222,189,123, 47,243,240,240,112,254,252,243,207, 9,129, 64, -128,142, 29, 59, 58,246,237,219,183, 0, 0, 90,183,110,109,109,190,199,172, 91,183, 14, 9, 9, 9,217, 4, 65, 44,169,245, 90, - 23,137, 18,109,109,109, 59,246,238,221, 27, 5, 5, 5, 72, 77, 77,133, 92, 46,135,247,234,213,184,251,197, 23,240,221,186, 21, -100,239,222,165, 2, 83, 44,198,221,187,119, 33, 22,139, 19,181,218,106, 59,145,195,205,205,173, 51,199,113, 43, 1,116,199, 95, -205, 18, 28,128,235, 4, 65,124,173, 82,169,110,191,240, 39,146, 32, 75, 95,212,106,175, 40, 81,129, 11,116,105, 98,140, 29, 59, - 22, 52, 45, 2, 68, 34,204,154, 53,171,194,253, 72, 4,170,172, 63, 22,107, 18, 89,242,182,205, 85, 17,235,132, 88, 36, 18,143, -249,228, 83,242,235, 89,211, 89, 35,195,176, 2,129,144,156, 57,127, 57,249,224,254, 61,113,113,113, 49, 73,212,231,205,138, 7, -143,127,137,131, 85, 81,104, 85,112,161,106, 66,118,197,126, 89, 53, 9,180,138,125,178, 0,232, 94, 69, 90, 5,149,222,203, 42, -227, 65, 76, 76, 76, 75, 31, 31, 31,164,166,166,214, 52, 82,174,116, 8,179, 84,138,135, 15, 31, 2,192,131,154, 14,116,233,210, -165,141, 0, 54,154,151, 21, 10, 69,215, 94, 67,123, 93,247,237,237,135,208,181, 7, 11,212,106,181, 47,254,138,137, 69,184,185, -185,141, 18,138, 4, 31, 53,111,219, 40,208,196,178, 43, 47, 29,191,190,168, 38,238,170,125,176, 24,134,121,233, 62, 88, 4, 65, - 12,125,251,237,183,201,248,248,120, 12, 27, 54, 12,191,252,242, 75,141,133, 55,106,212, 40, 28, 56,112, 0,253,251,247, 39, 87, -172, 88, 81, 99,152, 6,142, 3,140, 6, 6,197, 37, 90,104,181,186,215,118,226,253, 93,231, 10, 0, 56,150,185,112, 55, 58,178, - 67, 59,255,174,194,228,180, 12, 72, 68,194, 74, 2,203, 74, 76, 67, 34, 46, 93,231,234,212, 0,225, 55, 46, 27, 24,198, 88,215, - 48,248, 20,131,246,249, 11, 65, 26, 57,130, 74,234,215,189, 93,131,106, 29,207,185, 99,208,238,183, 53, 22, 9,172,159,127,254, - 89, 83,147,123,101,105, 25,112, 28,202,155, 8, 75, 52,175,182,142,156,157,157,157,156,157,157,183,216,217,217, 73,204,125,135, -170,219,110,107,107, 43,169,205,225,170, 75, 92,149,197,197, 74, 88,190,124,121,189, 68,150, 72, 36,106,122,253,250,245,150,230, -126,129,181,125,235,245,122,124,244,209, 71, 22,217,130,145,145,145, 59, 59,116,232,240,200,201,201,233,124,183,110,221,196,241, -241,241, 88,186,116, 41, 33, 20, 10,109,204,215,101, 81, 81, 17, 4, 2, 1,242,242,242, 64, 16,196,216,200,200,200, 51,181,113, -234,116,186,176,176,176,176, 14,131, 6, 13,162, 18, 18, 18, 32, 16, 8,192,178, 44,116, 93,186,192,119,235, 86,220,155, 62, 29, - 61,147,147,161, 51, 26, 33,145, 72,112,230,204, 25, 67, 73, 73, 73, 88, 45,121,223,126,243,230, 77, 31,137, 68, 2,131,193, 0, -150,101, 65,146, 36, 65, 81, 84, 15, 31, 31,159, 13, 0, 2, 42,238,223,164,137,147,115, 71,223, 86,173, 77, 44,107, 82,170,178, -179,107,117, 43,173,179,225,228, 37, 46,239,111, 69, 11,105,208,130, 82, 97,101,118,174,104, 33, 13,154, 22, 65, 44,178,168, 9, -159,171,122,238,152,251, 94,201,100, 86,108,139, 22, 45,226, 31, 60,124,228, 13,128,180,181,181,179,184, 95, 44, 15, 30,255, 52, - 13, 85,155, 80,170,120,137, 85, 88,206, 6, 64,148, 45,103, 87, 16, 82,217, 4, 65,220,225, 56, 46,160,202,190,230,237,250, 42, -223,230,237, 49,175, 34, 35,181,221, 40, 7,140, 31, 63,126,235,155,111,190,217,103,230,204,153,144,203,229, 80,171,213,229, 23, -173, 72, 36, 66,195,134, 13,161,209,104,112,229,202, 21,228,231,231, 95, 4,240,153,165, 7, 86,171,213,183, 30, 70, 63,120,214, - 99, 80,103, 7,175,206,173,237,210,147,210,187,168,213,234, 27, 0, 8,119,119,247,159,134, 79,127,251,147,160,247, 59,129, 22, - 9,145,246, 48, 3,151,142, 95,175,145,171,106, 31,172,191, 19, 27,139, 36, 73,138, 32, 8, 12, 27, 54,204,162,253,135, 15, 31, -142,203,151, 47,163,182,230,196,210, 38, 66, 3, 74,138, 53, 40,121,133, 2,139, 32, 8,152, 76,166,114,231,202,252,233,167, 50, -128, 36,201,114, 97,241,118, 22,107, 49,167,182,164,100,213,213, 11,199, 38,182,246,110,239,212,213,175, 21, 30, 60, 73,195,170, -121,127, 53,181,204,154, 52, 28,187, 15, 28,135,155,171, 3,116,154,231, 56,123,234,120, 65, 97, 97,225,170,151,205,195,238,163, -151, 1, 0,111,140,172, 60, 70, 96,216, 87,235, 44, 59,129, 5, 2,140, 27, 55,174, 70, 7,235,252,249,243,154,138, 78,100, 93, -117, 84, 92,172, 69,137, 70,243,202,234, 72,161, 80,248, 6, 4, 4,156,223,182,109,155,131,163,163, 35, 84, 42, 85, 37,129,165, - 80, 40,124, 59,118,236,120,126,219,182,109, 14, 78, 78, 78, 72, 77, 77,181, 56, 68, 72, 21,113,133,236,236,108, 34, 47, 47,143, -109,208,160, 65,189, 68, 22, 73,146,208,233,116, 72, 72, 72,176,244, 26,177, 56,232,104,211,166, 77,127, 89,191,126,189,248,233, -211,167, 48, 26,141,136,143,143,127, 97, 16, 2, 69, 81,152, 51,103, 14,230,207,159,191, 5, 64,227,218,248, 24,134, 89, 59,122, -244,232,241, 74,165,178,129,139,139, 11,212,106, 53,104,154, 6,199,113, 32,130,130,240,198,147, 39, 48,152, 76,144, 74,165,184, -127,255, 62,118,236,216, 81,108, 48, 24,214, 86,199,229,233,233, 41, 2,208,146,166,105,124,252,241,199,149,182,237,217,179, 7, - 93,189,242, 58,218,117,162,159,155, 56, 90,247, 28, 94,167, 73,146, 36, 58,250,181,106,213,163,107,187,182,113,241,201,143, 84, - 89,185,215,107, 21,255, 5, 14, 48,168,196, 0, 77,255,213,223,170,172,207, 21, 37, 18,149,143, 40,228, 68, 34,176, 34,203,130, - 5, 87, 20, 77, 4, 65,192,193,193, 65,183,110,237, 42,177, 76, 38, 51, 1,128,181, 92,102, 58,184,103, 51, 28,236,237,117,220, -203, 88,161, 60,120,252,115,157,171, 59,255,139,255,190, 22,129, 21, 21, 21,245, 4, 64, 95, 0, 35,175, 92,185,178,102,198,140, - 25, 78, 61,122,244, 64,110,110, 46, 26, 55,110, 12,133, 66,129,136,136, 8,196,196,196,228,112, 28, 55, 51, 50, 50,178, 58,171, -167, 45,106,137, 57,163,122,172, 62,100, 40, 41,249,194,183, 71,107, 92, 14,189, 26,226,234,234,250,153, 64, 32,248,114,204,220, - 65,159,244,122, 47, 0, 73, 81,201,184,117,238, 46,212,169, 57,181,114, 90,210, 7,171,226,119, 53,125,176,202, 57, 89,150, 53, -233,245,122,252,246,219,111, 22,137,172,253,251,247, 67,171,213,130,101, 89, 83, 77,121, 55,177, 38,194,218,198, 9,238,141,188, - 96,208, 23,131,101, 45,127,179,228,234, 40, 79,134, 97,176,104,209, 34,204,158, 61, 27, 75,150, 44,169, 85,136,108,222, 92,109, -223,175, 74,156,121,121,121, 69, 98,177,120,212,129,159,215,135,142,156, 48,205,218,163,155, 47,118, 30, 60, 5,163,193, 8,137, - 88,128, 6, 54,114,180,104,234, 14,189,182, 4, 63,110, 92, 83,168,213,106, 70, 85,211,247,172,182,122,175,132,177, 67, 2,241, -253,142, 63,112,117,223, 95, 6,229, 27, 35, 23,226,215, 31,166,194,207,111, 87,173,156, 38,147, 9, 66,161, 16,251,246,237,211, -212, 52,154,144,162, 40,212, 34,176, 42,213,145,141,141, 19, 60,154,120, 67,175,125,254,202,234,200,193,193, 97,246, 79, 63,253, -228,160,209,104,144,152,152,136,196,196, 68, 16, 4,145, 80,117,123,113,113, 49,238,221,187,103, 22, 57, 9,150,150,167,217,185, -202,206,206, 38,212,106, 53,172,172,172,200,216,216, 88,109,251,246,237, 19, 80,214, 71,171,174,188,235,116,186,167,125,236, 87, -186, 77, 0, 0, 32, 0, 73, 68, 65, 84,250,244,169,201, 49,114, 23,139,197,149,166,108, 50, 7, 29,173,166,169,240,133,116,166, -165,165, 69,175, 95,191,190, 81,171, 86,173,176,125,251,118,157,181,181,181,104,198,140, 25,160, 40,138, 88,183,110, 29,151,155, -155,107,152, 51,103,142,232,218,181,107, 40, 46, 46,142,182,224, 30, 82,164,213,106, 39,118,235,214,109,239,233,211,167,165, 45, - 91,182, 44,159,233, 97,247,238,221,152, 50,101, 10,164, 82, 41,146,146,146, 48,120,240,224,146,146,146,146,137,168, 28, 3,171, -156,147, 97, 24, 66, 40, 20,114, 44,203, 98,193,130, 5,149, 2,139, 90, 89, 89, 65, 42, 50, 97,219, 98, 79,217,244,239, 51,100, -211,190, 24, 61,186,244, 60, 97, 77,113,241,201,143,182,237,252,227, 18, 42, 71,137,127, 33,239,172,109, 1, 28, 91,150, 58, 88, - 66,115,204, 43, 90, 92,105,244, 96,105, 28,172,210,184, 88,117,229,189,106, 87, 12,123,123,123,198,223,223, 47, 94,163,209, 80, -102, 45,229,232,232,120,175,108, 95,174, 97,195,134,250, 23, 79, 79,203,175,205,122,128,231,228, 57,121,212,211,193, 2, 0, 68, - 71, 71,239,243,241,241, 57,189, 98,197,138, 21, 71,143, 30,157, 48,109,218, 52,194,198,198, 6,135, 14, 29,226,114,115,115,119, -137, 68,162,217,183,110,221,122,169,120, 17, 28,199,237,190,118,252,214,164, 17,211,223, 37,166,253, 48,182,123,116,216,189,132, -246,221, 91,162, 93,183,150,136,184, 24,143,205,243, 14,252,194, 24,153,239, 50, 50, 50, 82,107,227,177,164, 15,150,249, 35, 16, - 8,234,140,131,117,244,232,209,105, 3, 6, 12, 32,195,195,195, 95,232,115, 85,177, 31,214,249,243,231, 97, 48, 24,112,232,208, - 33,182,182, 56, 88, 44,112,108,237, 15,223,141,249,121,207, 73, 17, 73, 24,112,243,202, 97, 20,228,101,212, 90, 54, 52, 45,196, -175,251,143, 25, 4, 2,234,126, 45,105, 77,137,140,140,116,248,254,251,239, 41,146, 36,177,121,243,230, 74,206, 85, 85,220,189, -123,151, 53, 26,141,117,214,149, 90,173, 62,207,178,236,240,173,107, 23,239, 14,234, 63,200,174, 77, 27, 31,129,179,115, 35, 8, - 72, 18,249,185,217,184,115,235, 26,115,230,228,239,249,122,189,126,172, 90,173, 62,255,119, 78,192,144,109,191, 87,187,254,131, -105,107,234,114, 81, 24,163,209, 40,144,201,100, 96, 24,166, 90,113,213,167, 79, 31,233,245,235,215, 53, 6,131, 1, 20, 69,213, -170,152, 74,235,104,225,152,159,247,190,218, 58, 50,153, 76, 94,121,121,121, 40, 46, 46, 70, 68, 68, 4,183,121,243,230,236,252, -252,252,121, 21,183,231,230,230,162,168,168, 8,119,238,220,225,182,111,223,158, 93, 88, 88, 56,207,210,242, 51,199,197,202,203, -203, 99,173,172,172, 72,163,209,104,108,223,190,189,132,166,105, 47, 75, 57, 98, 98, 98,222,170,105, 91,183,110,221, 30, 92,191, -126,189, 69,197,185, 9, 25,134,161,117, 58, 93,203,193,131, 7,215,121,255,144, 74,165, 35, 14, 31, 62,188, 79, 34,145,180,211, -106,181,227,179,178,178,118, 3,104, 68, 81, 20, 30, 62,124,152,195, 48,204,208, 5, 11, 22,252, 92, 92, 92,124, 87, 46,151,143, -180, 48,201,255,143,189,239, 14,143,162,218,223,127,103,102,123, 73,111,187, 73, 72, 32, 13,210, 8, 9, 1, 2,132, 42,157, 32, - 40, 32,136, 74, 81, 81, 80,138,128, 20,175,210, 53, 8, 40,136, 10, 2, 34,196, 6,132,166,180, 32, 72, 9, 37,148, 20, 74, 42, -144, 0,105,155,108,122,219,190, 51,243,251,131, 36, 23, 48,101, 19,245,119,239,247, 58,239,243,236,179, 59, 59, 51,239,156, 57, -115,230,204, 59,239, 57,231,115,226,178,178,178,166, 4, 6, 6,126,183,114,229, 74,217,192,129, 3,249,174,174,174,232,222,189, - 59,178,178,178,112,252,248,113,227,214,173, 91, 53, 26,141,102, 6,128,211, 45,188,116,176, 0, 8,179,217,252,212, 28,166, 66, -161, 16,124, 62, 31, 26, 61,137, 55, 63,204,214, 50,224,107, 63,217,240,195,113,150, 5, 81,168, 42, 45, 45, 42,174,188,198, 51, -153,226, 31,169,106, 91,156,235,137, 46,149,162,163,117,112,227,203, 29, 65, 16, 32, 25, 18,132,145, 0, 69, 83,160, 76, 20, 8, - 30,239,177,187,101,217,116, 87,172,217,108, 70, 84, 84, 20,142, 29, 59,134,113,227,198,177,104,161,175,200,177, 99,199, 96,137, -123,203,129, 3,135,255,144,192, 2,128,212,212,212, 74, 0,111, 17, 4, 17, 51,103,206,156, 99, 12,195,240, 25,134, 25,125,243, -230,205,139,127,230,224, 69, 69, 69, 73, 87,142, 39,126,224,228,102, 27, 61, 98, 74, 95, 4,245,240, 4,109,166,113,249, 68, 10, -118,127,114,100,111,126, 94,254,116, 60, 61, 87, 97,147,176,164, 15,214,179, 14, 86,115, 92,106,181,122,197,218,181,107,241,241, -199, 31,183,121, 20, 97,115,219, 36, 36, 22,190, 21,209,157,113, 31,255,124,223,225, 36, 65,176,250, 22,250,217, 16, 4,216,134, -158, 22, 60, 30,149, 25,127, 45, 63,164,133,252,123,110,246,236,217,191,147, 36,233,249,132, 21,138, 22, 30,246,170,178,178,178, - 97,150, 92,155,226,226,226,147,110,110,110,157, 47,196,253,186,236,210,153,147, 3,105,218,232, 67,128,128, 64, 32,184,111,162, -205,231, 77, 6, 67,116, 65, 65,193,159, 14,196,182,236,173,113,120, 84, 88, 10, 30,143,122, 28,123,170, 62,160,233,193, 45, 11, - 16, 22,246, 99,179,251,137, 68,162,147,223,125,247, 93,212,107,175,189, 70,240,120,188,198,102,183,134,243, 39, 73, 18, 87,175, - 94,213, 26, 12, 6,236,222,189,155,149, 72, 36, 45, 6,174,253,187,174, 81,109,109,237,140,177, 99,199,238, 1, 32, 2,112,175, -170,170,234,109,149, 74,149,255,228,250,113,227,198,237, 1, 32, 34, 8,226, 15,235, 91, 67, 67,200, 6, 59, 59,187,244,122,231, - 74,220,158,142,238, 45,148,111,170,185,230, 67, 75,154, 10,235,231, 22,124,177, 97,185,123,247,238,171,103,205,154,245,228,100, -207,241, 0,188,219,145,180,211, 90,173, 54,232,195, 15, 63,156, 39,145, 72, 6,105,181, 90,127, 0,144, 74,165, 25, 26,141,230, -156,209,104,252, 2, 64,101, 75, 4,217,217,217,134, 78,157, 58,101,153,205,230, 96,103,103,231,198,209,135, 66,225, 99, 55,233, -106,134,125, 98, 97, 97, 97,143,199,227, 52,175,181,245,229, 49,191, 37, 71,185,185,125, 90, 90,111, 48, 24, 74,174, 92,185, 98, -127,230,204, 25,138,166,105,196,197,197, 53,190,244, 53,213, 26,152,157,157, 13,131,193,160,227, 30,115, 28, 56,252,103,240,119, -143, 48,177,200, 66, 84, 42,149,147,196, 50,209,108,207,206,202,144,194, 28,117, 90, 77,165,230, 71,149, 74,181, 29,143, 67,214, -115,246,233,255, 40,167, 64, 98,117,138,160, 4,158,205, 62,112,104,227, 35,163,182,102,120, 83,156, 61,123,246,116, 19, 8, 4, - 27,244,122,253,200,150,162,180, 83, 20,101,150, 72, 36, 39,117, 58,221,251, 77, 76,246,252,127, 46, 63, 87,174, 92,217,164, 37, - 97,233, 40,194,149, 43, 87, 50,109, 73,103, 72, 72,200, 57,169, 84,170,108,106,157, 70,163,201,189,117,235,214,176,255,146,252, -124,114, 4,160,197,156,237, 26, 69,248, 31,186,143,220,220,220,196,214,214,214, 27, 72,146, 84, 90, 40,142, 13,106,181,122, 65, - 89, 89, 89, 17, 87, 47,113,156,224,154, 8,255,231, 16,204,113,114,156, 28, 39,199,201,113,114,156, 28, 39,199,249, 79, 3,215, - 64,207,129, 3, 7, 14, 28, 56,112,224,240, 23,131,104, 65,133,182,197,250,107,143,146,189,195,113,114,156, 28, 39,199,201,113, -114,156, 28,231, 63,142,179, 53,110,174,233,241,111, 18, 94, 28, 39,199,201,113,114,156, 28, 39,199,201,113,254,243, 56,255,167, -192, 53, 17,114,224,192,129, 3, 7, 14, 28, 56,252,167, 4,150,204,197, 63,192,209, 51,100,143,157,123,215, 91,118,238, 93,111, - 57,122,134,236,145,185,248, 7,252, 19, 51, 77,169, 84, 74, 20, 10,197,148, 14, 29, 58,156,238,214,173, 91,181,171,171,235,123, - 92, 81,106, 59, 6, 0,188, 73,192, 59,175, 1,185,175, 1,185,147,128,119, 6,252,133, 19,144,255,183, 96,245, 59,174, 17,241, - 39,167,156, 92,253,142,107,147, 1,216, 86, 46, 84, 58, 92,138,155,248,197,178,119, 92,237,255,162, 67, 90, 57, 59, 59,239,112, -113,113,121,232,236,236,252,200,217,217,249, 59, 0, 54, 92,137,227,192,129, 3,135,255,127,176,232, 97,102,231, 17,252,134,143, -151,207,251,171, 87, 44, 35,220, 20, 78, 82,147,153, 54, 62,120,152, 31,184, 98,237,186, 3,133, 66,222,231, 21,185,119,190,109, -199,177, 9,119,119,247, 73,124, 62, 63, 10, 64,131, 80, 75, 55,153, 76,199,242,243,243,247,193,178,225,214,232,218,181,235, 37, -138,162, 60,218,114, 96,134, 97, 30,222,186,117,171,127,123, 50,204,213,213,117,162,171,171,235,119, 17, 17, 17,210,208,208, 80, - 8, 4, 2,172, 95,191,126, 97, 97, 97,225, 38,203,149,197, 0,158,115,165,253,107, 20,143, 55, 6, 64, 8,203, 2, 32,168, 91, -140,201,120, 92,109, 87,182, 7, 23, 46, 88, 20, 70, 92,161, 80,124, 64, 16,196,180,250,188,250, 86,165, 82,109,248, 59, 10,137, - 82,169,236, 64, 16,196, 32,150,101,253, 73,146,188,205, 48,204,111, 42,149,170,236,207,242,186, 0,111,245,137,140,252, 98,234, -194,133,148, 54, 62, 30, 95,124,247,221,102, 84, 87, 3,192,215,109, 45, 75,189,122,133, 78,176,178, 66, 20, 1,132,129, 0, 65, -130, 77, 41,175, 36, 79,220,184,145,188, 15, 22,196, 82,107, 14, 97, 97, 97,199, 1,140,170, 95, 60,145,156,156, 60,186,173, 28, - 21,217,204, 71, 34,190,127,191,138,251,231, 62, 2, 48,242,217,245,102,157,120, 42,197,239, 16, 69,177,201,121, 0, 62,251,147, -217, 42,117,114,114,186,117,228,200, 17,247, 94,189,122,241, 0, 32, 49, 49,241,181,168,168,168,193, 37, 37, 37,193, 0,170,255, - 19, 21, 77, 68, 68,132,157,217,108,142,161, 8, 34,130, 97, 24, 91, 0, 32, 73,178,146,102,217,171, 60, 30,111,106,123,131, 21, -115,224,192,129,195,255, 89,129, 37,115,238, 18,232,231,227,187, 48,238,112, 76,135,202,242, 74,221,215, 27,246, 36,107,121, 66, - 77,167, 64, 63,193,150,207, 63,181,125,119,254,162,249, 70,189,233, 90,157, 58, 51,205,210,131, 42, 20, 10, 15,145, 72,116,232, -131, 15, 62, 8,142,140,140,228, 59, 59, 59,163,184,184, 24,153,153,153,193,151, 47, 95, 30,119,228,200,145,133,122,189,254,197, -214, 34,184, 3,128, 76, 40,240,218,247,233, 39, 10,161,173, 29, 88,218, 12,219,160,110, 0, 0,150, 97,160, 58,127, 26,140,201, - 4,150,161,225, 62,226,249,199,255,179, 44,122,246,236, 41,104, 79,102,185,185,185,185,250,249,249,253,176,116,233, 82,129, 94, -175, 71, 74, 74, 10, 18, 18, 18, 24,181, 90,189,206, 82, 14,231,224,113,129,100,141,232,192,216,113, 35, 59,142, 30,234, 44,244, - 84, 56,129, 97,196,200,204, 49,122,156,190,152, 60,226, 68,220,111,239,211, 1,227, 38,150,164, 31,185,221, 18, 79, 80, 80, 80, - 68, 69, 69,197,199, 5, 5, 5, 13,194,111,125,207,158, 61,151, 63,185,205,179,193, 7, 25,134, 1,143,199, 43,214,104, 52,147, - 82, 83, 83,147,155,226,253,240, 13,152,204,230,199,229,130,199, 3, 29,243,155,251,225, 65,131, 6,117,154, 49, 99, 6,194,194, -194,144,152,152, 56, 40, 54, 54,118,222,241,227,199,111,152, 76,166, 19, 34,145,232,252,163, 71,143,218, 53,193,162, 0, 88, 60, -117,225, 66, 74,254,240, 33,228, 41, 41,120,165,186,154,247, 41,176,184, 45, 2, 43, 44, 44,204,203,193, 14, 7,198,189, 56, 32, - 64,161, 8, 20,240,249,142, 96, 89, 22, 38, 83,121,231,146,146,244, 9, 54, 54, 88, 90, 85, 69,141,191,113,227,198, 61, 75,248, -194,195,195, 93, 24,134,249,134,101, 89, 1, 65, 16,115, 0,140,138,139,139, 3, 77,211, 24, 61,122,244,168,176,176, 48, 47,150, -101,191,148,203,229,172, 86,171,125, 61, 49, 49,177,184, 37,231,170,242, 62,243,145,138,242, 30,209, 37,124, 26,138,120,167, 70, -188, 55, 12, 39,109,189,201, 53,203,191, 46,188, 10, 0, 35,188,189,173,170, 10, 36, 75,228,214,193,246, 85, 5,167,151,140,240, -246,222, 25,151,157, 93,211,222, 27,218,213,213,117, 67, 76, 76, 76,135,136,136,136,198, 32,185,161,161,161,212,250,245,235,221, - 22, 44, 88,176,185,162,162, 98,186,133,162,186,179,131,131,195, 41,134, 97,244,105,105,105,157, 27,254,119, 10,121,161,143,131, -149,236,185,146,138,154,248,178,180, 95, 46, 88,194,213,189,123,247, 25, 4, 77,239,248,252,195,119,169,128,144, 16, 72, 29,157, - 97, 44, 44, 68,157,217,100,127,245,102,234,232, 79, 55,237, 40,233,222,189,251,204,164,164,164,239,184, 42,153, 3, 7, 14,255, - 24,129, 37, 18, 9,151,174,248,215, 18,162,162,172, 82,107,172,169, 54, 74, 89,131,217, 90, 42, 38,170,213, 37,149, 15,172,165, -154, 5,243,231,138,151, 44,253,215,210, 58,224, 21, 75,197,149,191,191,255,245,157, 59,119, 58,219,219,219,163,170,170, 10,101, -101,101,184,126,253, 58, 88,150,197,200,145, 35, 69,221,186,118, 13,251,124,211,166, 4, 0,189, 91, 19, 89, 60, 62,143,224,203, -100, 56, 56, 32, 12,164, 64,128,241, 25,170,199,226,194,100, 68,220,228, 49, 0, 0, 74, 40,196, 75,119,213, 0, 0,177, 88,220, -238,204, 98, 89,182,119,223,190,125, 5, 0,176,112,225,194,234,186,186,186,104,130, 32,126, 82,169, 84, 5,150,236,239, 16, 60, -198,207,209,201,233,194,198,181,111,218, 7,123,121,195, 96, 50, 33, 95, 93, 0, 22, 66, 40,156,101,120,101, 92, 55, 65,223,112, -129,239,103, 95,255,126,158, 32,159,239,175, 78,253, 53,181, 89, 97, 41,147,197,108,222,188, 25,251,247,239, 7, 0,156, 59,119, - 14,126,126,126,178,214,210,144,153,153,233, 61,109,218,180,189, 0,124,155, 90,111, 54,131, 23,253,241, 79, 0,128,152,157, 83, -168,172,172,172, 78, 18,137,228, 9,243,109, 0, 6, 12, 24, 64, 70, 71, 71,247, 58,119,238, 92,175,189,123,247, 26, 77, 38,211, -230,194,194,194,216,246,228,169, 54, 62, 30,242,148, 20, 32, 62,190,205,251,118,235,214,205, 35, 32,192, 33,225,179,141,203,157, -142, 30, 75,197,198,141,223,225,254,253,251, 0, 0,111,111,111, 76,121,121, 34,255,167, 31,191, 9, 90,186,116,229, 21,154, 14, -139, 76, 78, 78,110, 53,186, 57,195, 48,223, 68, 71, 71, 63, 47,151,203,177,116,233,210, 44, 47, 47, 47, 88, 91, 91, 99,251,246, -237,176,179,179,131,201,100,202, 90,191,126, 61,175,176,176, 16, 91,182,108,217,245,132,187,245, 7,244, 31, 53,224, 35, 17,223, -191, 95,151,240,105,144, 91, 43,177,243,231,125,200, 76,220,211, 79,111,202,248,104, 25, 46,188, 74,177,162,105,234, 92,217,210, - 78,225, 3, 29,124,131,198,162, 99,247, 20, 71, 61, 29,159,243,225, 80,175,117, 60,177, 46,102,229,103, 77,184,132, 19, 98,169, -224,234, 27,246,119, 78,203,202,128,198,160,161, 68,253, 7, 12,139, 49, 3, 6, 12,160, 26, 4,246,195,135, 15, 97, 48, 24, 16, - 24, 24, 72, 26, 12,134, 65,150,138,171,254,253,251, 95,250,225,135, 31, 28,250,245,235, 87,242,212,253,235, 96, 59,252,194,161, -205,115, 63,254,226, 71,255,239, 89,162,178,181, 23,129,238,221,187,207,232,218,217,251,219,205,235, 87, 16, 84, 93, 62,120,182, -101, 0, 83, 6,213,222, 93,128,212, 30,163,223, 94,128, 30,189,122, 81,115,231,127,240, 45, 17, 30,206, 38, 38, 38,238,230,170, -101, 14, 28, 56,252, 35, 4, 22,195, 50, 33, 78, 78,246,226, 45, 27,246, 36, 42,197, 36,161,112,119, 37,132,214,182, 60,200,101, - 34,146,226,107,189,189,221, 5, 12,203, 52, 55, 85,200,179, 67, 45, 9,145, 72,116,104,247,238,221,206,124, 62, 31, 12,195,192, -201,201, 9, 57, 57, 57,168,168,168, 64,109,109, 45,238,167,167,163, 99, 7,119,204,157,249,166,114,205,198,207, 14, 1, 8,199, -211,205,133, 79,113,178, 12, 11,198,252,116,139, 26, 65, 16, 77,182, 47,182, 48,141,140, 69, 67, 66, 25,134,121, 80, 88, 88, 8, -169, 84,138,128,128, 0,249,141, 27, 55, 46, 22, 22, 22, 22, 88,196, 57, 97, 2, 37,120, 68,252,186, 97,237, 36,123,130,202, 66, - 86,110, 37,124,220,123,194,193,166, 3, 10, 74,106,145,148,118, 2, 89,247,143,195,199,221, 3, 51,167,248,216,110,250,166,228, - 24,194,102,250, 32,121,135,169, 41,206,154,154, 26,185,135,135, 7,220,220,220,192, 48, 12,104,154, 70,106,106,106,227,239,134, -249, 18, 27,126,111,254,233, 50,236,168, 82, 76,122, 97, 20,202,203,203,229,150,158,123,131,184, 58,240,153,107,144,182, 78, 37, - 0, 0,137, 76,105, 28,191,160, 32,181, 71,143, 30,112,114,114, 18, 92,185,114,101, 1,128,216,182,230,167, 17, 88,255,197,238, -221, 91, 94,169,170, 34, 1,224, 91,130, 96,140,143,163,106, 91, 84,150,156, 28,137,195,155, 54,125,228, 68,176,105,176,183,249, - 20,215,175, 63,130,209,248,248,202,151,149,169, 49,231,157,106,240,120, 86,248,236,179, 21, 14, 47, 77,154,117, 16,143, 71,189, - 48, 45,165,147,101, 89, 65, 70, 70, 6,130,130,130,176,119,239, 94, 30, 69, 81,184,118,237, 26, 36, 18, 9,166, 77,155,134,224, -224, 96,158, 68, 34,193,197,139, 23, 81, 93, 93, 77,180,148,206,248, 19, 23,214, 84,100,159,251,168,136, 58, 53, 98,231,207,251, -240,230,203,147,160, 48,103, 95,180,243, 33,215,140, 28,221,103, 57,197,239, 16, 37,179, 10,182,243, 11, 30, 11,129, 80,142,119, - 23,175, 70,214,157, 95,237, 52, 53,183,223,161, 77,121, 29, 86,126, 22, 59,239, 15,233, 60, 48,145,158,186, 59,190,251, 25,143, -100,207, 59, 41, 51,175,169,146,119,220,250,247,161, 3,120, 32,181,182, 13,226,234,222,189,123,184,127,255, 62, 40,138,130, 86, -171,125,106,162,224, 39, 57, 67, 67, 67,223,162,105,122, 57, 0, 24, 12,134, 61, 18,137,100,198,151, 95,126,233, 64, 81,255,158, - 41,170,193,185, 42, 86,151, 85, 92,185,145,154,185,224,173, 9, 3,227,175,222,201, 51,242,199,230, 86,221,250,165,170,169,252, -140,136,136,176, 35, 25,102,199, 23, 27, 87, 17,116,246,239, 16, 5, 12, 4, 79,238, 7,218, 84, 0, 93, 69, 45,180, 57, 69, 48, -110,255, 10,222,111,207,199,134,245, 31, 19, 47,191,250,250, 14,111,111,239, 67,217, 79, 59,120,127,199,112,109,142,147,227,228, - 56,255, 59, 57,255, 89, 2,139, 32,200,106,163,209,196,183,238,224,102, 26,255, 98,255,174,201,215,238,100,201,237,109,200,110, - 61,187, 6,222,201,202, 79,130,153, 54, 18, 4,105, 81,191, 14,119,119,247, 73, 43, 86,172,232,106,109,109, 13,134, 97, 96, 99, - 99,131,146,146, 18, 24,141, 70, 84, 87, 87, 67, 95, 91, 3, 99, 77, 53,110,230, 62, 68,228,192,129, 24,218,187,119,192, 9,147, -105, 82,126,126,254,222,230, 56,105,146, 98, 29,194,122, 98, 98,118, 25, 24,163, 1,177,222, 14,141,174,213,228,135,149, 32, 8, - 2,180, 65,143, 19, 61,125, 33,146,203, 16,242,254,138,118,103, 86, 81, 81, 81,242,153, 51,103, 78,142, 24, 49, 98,228,204,153, - 51,201,162,162,162, 56,179,217,220, 87,173, 86,183,218, 60,234,124,151,158, 54,117,102,152,183,163, 45,137,163,151, 79, 33,194, -255, 5, 72, 69,124,148, 84,104, 65, 18, 4,238, 63, 56, 3,154,150,225,102, 70, 46,122, 7,203,208,175,151,141,123,237,239,229, - 51, 75,155,111, 46, 35, 42, 42, 42,160, 86,171, 97, 50,153, 96, 54,155, 49, 97,226, 68,196,236,217,131,186,186, 58,232,116, 58, - 24, 12, 6, 48,204, 99, 61, 81, 84, 82,139,235, 55,227, 16,222,181,115,131,227,209,116,129,224,193,252,229,230, 41, 60, 43, 41, - 32, 16, 57, 25,107,106,106, 32,147,201,160,173, 83, 9,166,190,217,232,108, 9,206,157, 59,135,164,164, 36,184,186,186, 90, 84, -142,154,194,125, 96,199, 3,154,254,112,228,225,195,206,151, 15, 31,102,174, 30, 61,154, 47,170,169,217,110,201,190,189,122,133, - 78,120,247,221,209, 1, 18,177, 4,249,185,155,225,239, 47,192,194,247, 28, 16,253,105, 41, 0, 96,238,187,238, 8, 15,119, 64, -117,229, 1, 56, 58,127,128,133, 11,198,249,212,214,178,175, 37, 36,164,236,105,185,188, 19,115,126,252,241,199,172, 97,195,134, -241,146,147,147, 33, 18,137, 32,145, 72, 32, 22,139, 33,145, 72, 80, 84, 84, 4,131,193,128,216,216, 88,115,125, 19, 98,179,168, -111, 6, 28,249,222, 80,156,204, 76,220,211,207,141,204,185, 57,110, 65,159, 7,201,215,110,214,158,253,253,242, 26,179, 78,156, - 87,153,127,122,137, 87,143,155,142,239,188,191, 10, 95,109, 88,129,204,107, 23,202, 93, 60,106,190,166, 9,125,147,233, 28, 48, - 96, 37,207,221, 93, 97,154, 61, 99,188,205, 49,229,149, 55,143,241, 80, 90, 92,126,123, 35,178,175,107, 69,126, 65,175,118,246, - 34, 12,103,207,158,149,244,239,223, 31, 90,173,246,241,189, 64, 81,248,241,199, 31, 25,179,217,124,174, 41, 78,147,201,180, 60, - 41, 41, 73,169,209,104,240,242,203, 47,207, 93,185,114,165,140,207,231, 63,190,191,104,250, 41,231,106,237,166,239, 79,205, 95, -254,245,185, 83,123, 63,117, 93,187,116,198,192, 87,222,253,248, 28,128,184,166,221, 80,115,204,166, 79,151, 81, 34, 91, 35,136, - 30,195, 96, 84,107,241,232,219,153, 48, 84,105,209,121,205,106, 0, 2, 24,140, 20,142,141,155, 8,202,222, 21,111,244,239,203, -219,126,225, 82, 12,128,113, 92,213,204,129, 3,135,103, 94,126,123, 0,112,170, 95, 44,173,127,142, 57, 0,104,112,217,157, 0, - 24, 0, 8,159,216,237,217,229, 39,183,125,118,249,201,223,165,245,198,142, 19, 30, 79,217,119,157, 32,136, 54,247, 19,109, 24, - 69,248,164,225,195, 62,227,218,196,223,207,126,168, 29, 56, 32, 92,121,238,250,221,228, 17, 47, 12,237,217,127,112,175,136,226, -178,234,108,133,147,181,236,202,181,171, 34,134, 97, 44,106,223,225,243,249, 81,145,145,145,188,138,138, 10, 72,165, 82,148,148, -148,160,160,160, 0, 70,163, 17,218,170, 74,232, 43, 43,160,173, 40,135,169,166, 18,247,111, 92, 67, 23, 15, 55, 81,125, 39,120, -139,240,172, 67,213, 48,131, 61, 65,146, 16, 91, 91, 65, 98,109, 13,138,106, 91,100, 10,165, 82, 57,182, 75,151, 46, 87, 93, 93, - 93, 63,172,127,195,127, 39, 58, 58,186,148,101, 89, 44, 89,178,196,218,218,218, 58,214,211,211, 83,212, 26,143,149, 61, 61,161, - 87, 87, 95, 42,235,209,109,132,251,141, 71, 39,101,127,220, 47,168, 66, 73,149, 14, 69,229,117,232,220,249,125, 56,185,190, 9, - 27,197,219,184,157,153, 7,165,162, 19, 73,241, 5, 35, 90, 17,124, 79, 45,255,252,211, 79,208,104, 52,240,245,245,197,228,201, -147,177,120,241, 98, 76,154, 52, 9,174,174,174,232,231,203,195,140, 87, 39, 64,173, 86,183,152,206,181,223,130,191,238, 39,101, -242,212, 21,108,178,239,115, 39, 83,239,223,191,143,172,172, 63,182,172,253,254,251,239,168,170,170,106,124, 0, 91, 2,103,103, -231,101, 10,133,226,150, 66,161, 72, 85, 40, 20, 39,138, 93, 93, 51, 76,222,222, 46,125,199,141, 35, 2, 95,122,137,202,147,201, -136, 7, 29, 58,200, 45,225,178,182,198,232,240,240, 72, 97,101,197,119,141,166,212,140,233, 78,184,116, 33, 8,151, 47,118,199, -156,119,189, 65, 18, 98, 16,164, 0,154,186,223, 17, 24, 20, 44,176,178, 98, 91, 44, 75,245, 29,218,179,131,130,130,120,179,102, -205,130, 72, 36, 66, 76, 76, 12,182,109,219,134,207, 63,255, 28, 89, 89, 89,240,244,244,132, 82,169,132,139,139, 11, 15, 64,118, -253, 62, 45,194,214,135, 92,163, 55,101, 92,180,243,147,101, 19,164,115, 31,189, 89, 60,126,229,103,170,178,181, 91,115, 62,123, -144,169,245,206,184,118,161, 44,235,206, 47, 76,206,141,115,165,133,119,107,189,215,110,205,249, 44,250,235,194,242,166,184, 46, - 92, 88, 65, 31, 57,113,193, 88, 87,171,225,141, 29,249,156,246,237,233,147, 59,219, 75,187,252, 8,183, 97,161, 29, 59, 40, 95, - 93,241,201, 22,195, 27,179,230, 27,191,221,245, 29, 91, 83, 83,131,234,234,106,124,241,197, 23,230,163, 71,143, 22,208, 52, 61, -191,153, 36, 82,245,130, 8, 19, 39, 78,148, 73, 36, 18,228,229,229, 53,186,160, 0,160, 42, 41,187,125,249,198,157,140, 5,111, - 79, 28, 80,167,215,235, 79,157, 79, 76, 15,244,243,116, 39, 8,182, 99,115,231, 77, 17, 68, 68, 80, 72, 8, 88,182, 18, 36,207, - 3,249,223,111,132,182,168, 28,154,146,114,144,124, 25, 76, 16,195,200, 10, 33, 14,233,137, 71, 73, 41,112,145, 91,131, 71, 16, -125,185, 71, 9, 7, 14,255, 92, 29,213,156, 22, 1,224, 68, 16,196, 49,130, 32,142, 45, 91,182,108, 16, 0, 7,130, 32,142,213, -139, 32,167,250,223,194,134,109,154, 89,118,122,146,231,153,125,159,252,237,184,108,217,178,193, 4, 65, 28,235,211,167,207,171, -245, 66,174,205,104, 85,109, 80, 58, 67,244,178, 15, 87,144,214,114,161, 85, 96, 64, 39,187,163,191,197, 39, 95,190,154,146,110, - 37, 21,139,106,235,234,132,159,127,185,205,131,208,104, 45,237,228, 29,224,232,232, 8,163,209,136,123,247,238, 33, 63, 63, 31, - 70,163, 17,102, 77, 29,244,149,149,208, 85, 84,128,209,212, 66, 64, 51,208,150,150,192, 78, 44, 4,254, 61,194,176, 37,101,219, - 40,166,154, 18, 92, 4, 65, 64,108,109, 5,161,149, 28, 36,143,178, 56,115, 20, 10, 69,247,208,208,208,253,103,207,158,237, 21, - 25, 25,185,198,211,211,211,166,184,184,248, 81,113,113,241,115, 27, 54,108,208, 59, 57, 57,225,149, 87, 94,233, 98, 50,153,166, -182,198, 37, 16,235,187,122,186,248,193,195,101, 44, 92, 29, 34, 80, 86,173, 71, 73,165, 22, 69,101, 26,236, 59, 56, 25,167, 79, - 78, 70,202,197, 87,113,239,218, 12,148,213, 89, 67,108, 63, 8, 0,219, 98, 32,183,171, 87,175,226,155,111,190,105,252,124,245, -213, 87, 40, 47, 47, 71, 80, 80, 16,242,242,242, 16, 23, 23,135,162,162, 34, 56, 57, 57, 33, 37, 37, 5,219,183,111,199,181,107, -215,218, 92, 72,116, 58, 29,248, 66, 7, 99,204,206, 41,136,217, 57, 5, 52, 43, 51, 62,153,247, 22, 23, 54,146,156,166, 26, 55, -174,171,202,214, 54, 48, 36, 36,100,228, 75, 47,189,228,221,171, 87,175,198,245, 62, 62, 62, 30, 60, 30,175, 72,169, 84,126,171, - 84, 42, 67, 91, 36, 99,216, 48, 59,251, 0, 24,244, 25,245,215,152, 7,130, 16, 97,240,208,116,244,237,151, 4,163, 73, 8,130, - 20,129, 36,196, 48,155,203, 96,109,229, 2,150, 37, 90, 11,140, 55, 42, 46, 46, 14,223,124,243, 13,114,114,114, 26,155, 71,163, -162,162,230,188,252,242,203,135,104,154,198,177, 99,199,112,228,200, 17,120,121,121, 33, 52, 52, 20, 70,163,113, 84,107,231,189, -252,235,194,171, 63,125,126,114, 50,223,108, 27, 42, 20,121,122,145, 53,210,177,179, 7, 56,202, 0, 32, 46, 59,187,198,197,163, -102,157,166,230, 78,174,157,123,221,167,173,119,112, 39,216,196,172,212,107,123, 15,254, 86, 85, 92, 90,198, 15,235, 22,172,253, -120,213,251,130,142,157,124,215,175, 88, 50,219,165,160, 90, 92, 53,116,238,201,140, 67,113,215,107, 95,155, 49,211,252,250,204, -119,117,167,126,251,253, 48,195, 48, 33,104,102, 4, 33,195, 48, 80,169, 84,184,115,231, 14,114,114,114, 80, 90, 90,138,146,146, - 18,212,212,212, 52, 54, 43, 74,107,170,143,127,181,251,232, 77,153, 68, 34,237,213,213,207,227, 90,114,154, 90, 38,145, 72,253, - 58,121,116, 6,154,158,128,154, 97, 24,219,199,121, 72,160,230, 78, 60,116,229, 53,208, 86,214, 66, 91, 94, 11,189,145,130, 78, - 79, 66,103, 36,225,216,111, 24,106,235,180,208,149, 87,130, 97, 89, 59,238, 25,195,129, 3,135, 22,158,247, 81,235,214,173,251, -164,165,245, 79,124, 27,158, 89, 6, 65, 16,199, 88,150,141, 98, 89, 54,170, 94, 76, 53,232,132, 99, 79,242,172, 91,183,238, 19, -150,101,163,174, 92,185,242, 51, 0, 77,123,210,218,106,211, 78, 89,217,221, 90, 43, 34,224,197,249, 75,150,159,248,113,231, 22, -231,242,242,138, 44,129, 88,162, 19,139,133,246,139,151,172,178,173,211, 84,189, 88, 87, 97,249,168,167,138,138,138,198,135,151, - 64, 32, 0,173,169, 3,173,213, 64, 87, 81, 6,194,168,135,128,166, 97, 47,149,194,195,213, 5, 29, 93, 20,173,242, 81, 12, 77, - 20,158, 62,129, 83,175,190,240, 84,179, 32, 99, 52, 32,174, 79, 23, 8,229, 50, 72,108,237, 16,121,228,226, 99,161, 35, 16, 0, - 43, 62,109,149,215,197,197,197, 81,169, 84,254,250,229,151, 95, 10, 74, 75, 75,145,154,154,122,243,209,163, 71, 85,118,118,118, - 86, 38,147,137,185,123,247,238,153,204,204,204,168, 78,157, 58,129,101, 89,159,214,248,106, 42,101, 70,163,137, 65,129,250, 17, -242, 85,119, 96, 35,247, 0, 75,118, 64,113,185, 6, 4,156, 97,210,101, 54,246, 37,211,107,243, 81,167, 39, 44,202, 79,163,209, - 8,147,201, 4,147,201, 4,131,193,128,215, 94,123, 13, 87, 18, 18,240,211,145,243,200,203,203,131,151, 66,138,201,147, 38,162, - 91,183,110, 72, 76, 76,108,119,161,246, 27,114, 42, 85, 34,145, 96,219,182,109,144, 74,165,104,171,192, 82, 40, 20,159,249,251, -251,251,102,214,213, 33, 45, 35, 3, 61, 39, 78, 4, 0, 92,186,116,169,113, 27,173, 86,139, 41, 83,166, 8,115,114,114, 94,207, -200,200,120,157,101,217,207,139,138,138, 22, 54,199,121,252,120, 2,222,126, 59, 13, 37, 37,143,157,221,125, 63, 7, 54,174,123, -144, 99,196,136,209,143, 91,174,108,109,109,241,217,103,150, 5, 29,166,105, 26,219,183,111,135, 68, 34,105, 20, 88, 2,129,160, -239,130, 5, 11, 94,108,106,251,192,192,192, 86, 57,223,155,224, 38,190,116,147,125,199,198,183, 83,176,141, 83, 8, 74,205, 41, - 93,147, 11,138,230,188, 55,193,109,243,166, 3, 5, 58,154,208,239,161, 77,121, 29,120, 98, 93,140, 37,105,204,142,251,210, 80, -222,105,102, 76,145,186,234, 95,239,206,124,197,193,214,206,165,246,219, 47,163,109, 73,146,196,209, 36, 67, 69,144,183,131,221, -216,136, 47,106,223,126,239,163,100,131,249,209, 28,228, 29,203, 68, 11, 97, 79, 24,134, 65, 65, 65, 1, 74, 75, 75,145,155,155, -139,146,146, 18, 16, 4,129,146,146,146, 54, 57,148, 77, 57,202,134,252, 2, 20, 29,222, 5,197,148, 87,208,121,245,106, 48, 12, - 31, 90,141, 25, 7,250, 61,135,234, 42, 45, 12, 12, 1,219,238,125, 48,244,216, 69,144,140, 25, 72,184,194, 61, 65, 56,112,224, -208, 82,189,114,108,233,210,165, 31, 88,184,237, 25,150,101, 45, 10,173,243,172,224, 90,186,116,233, 7, 13,199,138,142,142,214, - 2, 40,252,203, 5, 22, 0,212,148,166,103,167,165,241, 84,181, 26,173,216,206,222, 78, 99, 37, 23,178, 85,149, 85, 84,198,189, - 44, 93, 93,209,253,204, 54, 28, 47, 61, 53, 53, 53,184,160,160, 0,185,143, 30,193,164,169, 3, 97,208, 3, 58, 45,134,244,235, - 11, 49, 0, 49, 1, 8, 24, 35, 40, 74,136,218,218,106, 0, 72,111,141,148, 49,153,158,170,212, 27,155, 5,173,172, 32,148,203, - 32,178,182,122,202,209,178, 4, 18,137,228,167,237,219,183, 43,149, 74, 37, 54,109,218, 4,165, 82,233,175, 80, 40, 52, 86, 86, - 86, 18, 71, 71, 71,116,238,220, 25,225,225,225, 56,119,238, 28, 8,130,184,223, 26,159,217, 32, 76, 74,207,166, 59, 84,215,166, -224, 90,210, 15, 48, 25, 12,232,228,183, 12,122,179, 35,100,206,175, 67,107,252, 21,198,202,243, 0, 0,161,245, 64, 20, 23,151, - 2, 32,238,180,230,220, 61,187,124,235,214, 45,236, 57,124, 9, 30, 1, 3, 81, 84, 30,135, 59,119, 18,225, 98,247, 27,252, 2, -131, 96, 50,153,218,242,150, 96,177, 32,177,176,160, 79, 89,182,108, 25,170, 36, 18, 96,244,104, 8,178,179, 97, 52, 26, 17, 17, - 17,129, 30, 61,122, 0, 0, 34, 34, 34, 64, 81, 20,124,125,125, 97,111,111,143, 67,135, 14, 77, 1,208,164,192, 98, 9, 34,133, -161,203,252,189,189,189, 27, 5, 86,204,247, 37, 72, 78, 28, 2, 2, 66,108,249,234,223,151,196,195,195, 3, 69, 69, 57, 32, 8, -182,181, 78,153, 39, 70,143, 30, 61,202,206,206, 14,211,167, 79,135, 68, 34,193, 11, 47,188, 0,173, 86,251, 82,253, 27, 13,150, - 45, 91, 6, 0, 88,177, 98, 5, 86,174, 92, 9,141, 70,211,108,136,138,109,107,187,186,214,104,153, 25,164, 70,242,194, 32,199, - 78, 33,131,135, 15,129,151,223,115, 24, 60, 60, 15, 0, 62,113,228, 63,152,248,233, 7,182,135,237,172,137,221, 87,142,156, 89, - 30, 57,114,208,135, 43,141,231,215,172,252,178,162,213, 23,150,202, 7, 59,106, 50,248, 99, 54,111,249,198,188,105,197, 7, 11, - 68,143, 74,141,229,133, 21, 76,173, 76,196,179,242,113,129,124,206,226, 53, 57,133,133,247, 22, 33,239,183, 44, 75,174, 97, 78, - 78, 14,244,122, 61,104,154,134, 94,175, 71,109,109, 45,242,243,243, 27,175,175, 86,102, 61,226,221,233, 99,186,213,105,181,154, -107,183,239,230,126, 56,247,149,222,117, 90,173,230,238,131,220, 44, 96, 11,211,204, 53,175,212,212,212,218, 27,106, 76,168,188, -153, 5,199,193,158, 48,152, 9,232,205, 20,202, 75,107, 96,164, 1, 19,201,135,251,132,215, 96, 38,120,168, 46, 41, 2,217,142, -126, 14, 28, 56,112,248,103, 57, 88, 4, 65, 28,139,142,142,142,250,187,184, 1, 32, 58, 58, 58, 53, 58, 58,250, 79, 29,171, 65, - 96, 13,124,226, 13,119, 96, 83,117,165,135,109,149,219, 39, 31,188,232,106, 50, 25,252,107,107,107,105, 30, 79,200,235, 96,163, - 45, 42,207,181,252, 96, 38,147,233,216,197,139, 23,199,245,235,215, 79,116,247,246, 77,232,171,170,160,175,170,132,128, 49,195, - 94, 28, 14,210,100, 0, 97,208,195,173, 11, 3,109,181, 24, 9, 55, 50, 77, 38,147,233, 88,139, 25, 2,150,101,204,143,133, 3, - 73, 82, 79, 53, 21,138,172,228, 16,202,229, 16,201,173,154,108, 66,108, 14,206,206,206,210,254,253,251, 63, 23, 22, 22, 6,150, -101,177, 97,195, 6, 24, 12, 6, 97,131, 83,100, 52, 26, 81, 83, 83,131,131, 7, 15,226,251,239,191,191,108, 99, 99,179,187,176, -176,101,113,203,152,245, 39,207, 93,190, 57,234,213, 23, 6, 11, 79,159,255, 22, 38,189, 25,181,122, 91,212,233, 12,168,209,242, - 97, 16, 13, 7, 65, 92, 4, 73,137,208, 39,212, 7,103, 47,221,213,209, 38, 99, 92, 91,196, 16, 65, 16,208,235,245, 80,171, 75, - 80, 94,115, 14,168, 41,128,163,177, 6,181, 15,238, 35,244,181,169, 48, 24, 12,173,114,125,248, 6, 76, 78,182, 42,222,247,171, - 73,240,133, 14, 70,191, 33,167,154, 13, 21, 33,151,203, 27,251,232, 88,130,234,234,106,252,240,195, 15,136,136,136,192,128, 1, - 3, 80, 80, 80,128,236,236,108,140, 26,245,239, 86,182,155, 55,111, 34, 57, 57, 25, 62, 62, 62,173,112,177, 39,202,203,239, 77, - 28, 59,118,172,224,234,213,171, 96, 89, 22,126,126, 54,176,182,146,131, 32, 69, 8, 8,112, 2,144, 9,130, 32, 48,112,224, 64, - 24,141,133,230,186, 58,156,104,137, 51, 57, 57,121,116, 88, 88,152,151,201,100,202, 10, 14, 14,230, 21, 21, 21, 97,194,132, 9, -216,183,111, 95,195, 27, 13,150, 46, 93,250,212, 62,181,181,181,186,230,248,186,245,236,188,136,102, 29, 6, 8, 69,158, 94, 54, - 78, 33,240,242,123, 14, 0, 48, 52,106, 6,188,124, 59,160,170,228,150,151, 65,255,232, 5,138, 40,179,251,241,106, 65, 90, 63, -105,240,244,210,188,243,119, 1, 88, 18,184,151,213,222, 61, 90,156,203,183,222,127,224,151, 99,111,141, 25,243, 60,207, 68, 51, -230, 96, 15,158,205,190, 67,199,213, 5,143,114,191, 64,238,111,169, 79,221, 42,205, 11, 44,186,178,178, 18,114,185, 28,217,217, -217,250, 49, 99,198,136,180, 90, 45,238,222,189,219, 40,176,156, 29,237, 3,251,246, 8,246, 95,187,233,251, 83, 50,145, 72, 52, -124, 96,120, 64,218,221, 71,249, 44, 75, 60,108,150,151,101,175,222, 77, 79, 31,237,228,232, 1,213,249, 43,144, 69,142,132, 94, - 79, 64,103,100, 96,160, 1, 51, 37,128, 77,183,158,144,120, 7,128, 97,129,244,219, 55, 97,102,217,203,220, 35,132, 3,135,127, - 44, 90,211, 34, 32, 8,226, 88,239,222,189,247, 62,233, 50, 53,252, 6,160, 7,208, 82,159,232,146, 39, 69, 84, 67,179, 97,115, -199,121,134,183,221, 2,235, 2, 90, 24, 89,230,232,232,232, 28,208, 37,200,123,231,174,111, 97,212, 87, 33, 59,109, 55,234,106, -138,241,209, 39, 9, 62,110,110,110, 3, 10, 10, 10, 46, 88,114,176,252,252,252,125,135, 14, 29, 90,216, 45, 40, 40,172,163,187, - 59,110, 61,124, 0, 1, 75, 67, 64,211, 32,141,122,240,104, 3,220, 3, 25,144,164, 12, 69, 69, 53,216, 30,247,251,157,250,168, -238,205,191,125, 19, 20, 58,140, 25,143,151,135,142, 6,107, 50,226,183,126,129, 16,203,229, 16,217,218,162,207,193,243,143, 67, - 54,152, 77,120,184,238,125, 8,100,114,216, 71, 12,108, 53,157,106,181, 90,115,249,242,229,196,140,140,140, 30, 93,186,116,193, -170, 85,171,144,151,151, 7,150,101,161,182,100, 14,165, 0, 0, 32, 0, 73, 68, 65, 84, 86,171,117, 37, 37, 37, 5,101,101,101, - 15, 9,130, 56, 92, 88, 88,184, 19, 22, 68, 10, 87,251, 81,123, 78,159,249,125, 81,247,208,192,206, 67, 6,172,196,177, 99,203, - 81, 89, 93,141, 58, 61, 15,181, 90, 35,234,116, 44, 92,173,124,208, 43, 36, 12, 37,101, 6,220, 77, 77,202, 47, 21,216,239,104, -163,117,138,155, 55,111,194,211,158, 64, 90, 86, 50, 28,117,229,232, 98, 43, 71, 88,100, 63,228,228,228, 88,228, 76,153,205,224, -205,153,255,239,209,130,182,182,182,168,170,170,122,106, 63,169, 84, 10, 87, 87, 87, 84, 87, 87,227,192,129, 3, 96, 45,123, 40, -154, 12, 6, 3,252,253,253,113,227,198, 13,156, 57,115, 6,131, 7, 15, 70,255,254,253,113,254,252,121, 36, 38, 38, 34, 57, 57, - 25, 4, 65,192,193,193,161,193,109,107,214,114,187,126,253,102,172, 92, 78, 44,155, 62,125, 86,240, 43,175,188,130,131, 7,247, - 98,198,244, 46, 32, 72, 17, 8, 66,132,231,199,248, 99,245,154, 68,244,234, 53, 16,142,142, 2,156, 57,147,154,195,227,217,124, -111,129, 88,253,114,253,250,245, 60,177, 88, 12,131,193,128,218,218, 90,148,149, 61, 14, 71,213,148,131,165,213,106,155, 13,172, -150,154,146,249, 89, 69, 53, 91, 65,106,146, 94, 40, 53,165,132, 12, 30,158,143,161, 81,211,113,250,216,110,156, 61,117, 6,142, -252, 7, 57,180,164,246,100, 73, 78,105, 77, 97,173,223,246,192,240, 55, 40, 85,221,169,111,102, 63,159, 69,185, 43,153,216,101, -219,170, 43, 91, 75,111,121,218, 15,191,254,202,226,249,200,136,158, 62, 93, 61, 92,133,229,101,106, 28,250,229,100,170,241,193, -193, 99,245, 21,149, 37, 86,228,234, 45, 91,182, 44, 7, 0,134, 97,246,108,218,180,233,141, 69,139, 22, 57, 21, 20, 20, 52, 10, - 44,117,105,249,217, 62,163,231,208,101,149, 85,134,239, 54, 45,158, 32, 17,139,132, 31,174,251,238,188,137,194,213,102, 43, 23, - 30,111,234, 7, 91,127, 44, 57, 16,187,155,114, 18, 11,112,105,201, 10,100,255,126, 14, 70, 66,128,225,191, 93,131,193, 72,163, - 90, 93,134,179,211,103,195, 78,105,143, 19,101,119,233,170,154,234,169,220, 51,134, 3,135,127, 44, 90,210, 34, 37, 79, 8,162, -114, 0, 15,163,163,163, 75,159,112,151, 74, 0,220, 4,208,173,126,187,146,103,246, 43, 33, 8,226, 6,203,178, 61,158,224, 41, -121, 66,104, 61,249,219,240,204, 54, 55,255,140,192,106, 17,165,165,165,234,235,137,119,112,249,244, 54,152, 77,122, 84,213,219, - 86,133,197, 58, 88, 91, 91, 39, 52, 68, 19,111, 2,193,120, 58, 86, 6,171,211,233, 94,220,180,121,243,213,183,166,190,170,232, -255,220,115,120,116,251, 22,244,229,165,160,104, 26, 20,193, 71,109,169, 24,197, 69,213,136,254,245,164, 90,171,211,189,216,196, - 3,226, 89,206,198, 78,238, 44, 65, 64,108, 99, 13,145, 76, 6,145,141,245,191, 29, 43,130,128, 80,110, 5,190, 76, 14, 74, 32, -180, 36,157,208,104, 52,227,103,206,156,121,235,196,137, 19,118, 47,191,252, 50,158,127,254,249,228,202,202,202, 65, 21, 21, 21, -150,246, 55,123,154,243,192, 1,218, 28, 60,102,236,215,219,118, 94,153, 54,109,154,253,243, 99,191, 70,114, 90, 42, 42,235,156, - 1, 0,174,142, 50,244,234,242, 62,212,101,122,156, 58,121,172,130, 49,235,198, 35,117,159,169, 57, 78,150,101, 89, 71, 71,199, -167, 92, 57,138,162,112,254,252,121,204,155, 55, 15,142, 86,231, 81,243, 48, 27, 93,251, 13,192,208, 87,166, 98,198,140, 25,160, - 40, 10, 14, 14, 14,207,186, 25,127, 56,247, 39, 81, 85, 85,133,142, 29, 59,226,183,157, 93,130, 12, 58,181, 32,204, 30, 32, 96, - 99, 60,125,118, 84,106,124,124,124, 45,128,157,126,126,126,177,207,140,104,252, 3, 39, 65, 16,255,250,228,147, 79,182,245,237, -219, 87, 34,151,203,225,231,231,135,203,151, 47,227,242,229,203,184,120,241,113,255, 56, 7, 7, 7,216,219,219,163,178,178, 18, -121,121,121, 90,130, 32,254,213, 2, 39, 83, 93, 77,141, 59,125,250,240,181, 49, 99, 94,116, 28, 49,162, 55, 20,138, 26,152,205, -165, 32, 72, 1, 68, 98,103,236,220,185, 14,234,226,114, 92, 73, 72, 40,175,173,229,141, 79, 74,250,195, 20, 68, 77,165,211, 24, - 23, 23, 7,177, 88,140,131, 7, 15,154, 93, 92, 92,120,182,182,182,205, 58, 88, 58,157, 78,212, 28,231,155, 75,238, 20, 0, 88, -243,222, 4,183,141, 87, 82,139,199, 1,248,201,203,215, 29,103, 79,157,193,197,179, 87,150, 70, 4, 51, 91, 70, 79,233,185, 90, - 60,248,165,247, 3,187,191, 65,201,173,149,136, 57,116,144, 74, 75,250,246, 99, 93,221, 29,111,108, 59,244,126, 43,215,136, 5, -128, 90,117,241,178,232,207,191,218, 19,189,106,185,100,195, 23, 91, 11,181,165, 69, 31,212,139,126,182, 5,247,170,145, 51, 39, - 39,103, 59,128,237, 79, 56,205, 63,172, 91,183, 46,254,213, 87, 95,117,106,112, 40, 75,210,126, 77, 40, 1, 18,130, 6,206,248, -168, 79,143,160, 46, 31,127,241,227,169,220,188,226, 31,171,210, 27, 99, 96,253, 33,157, 87,175, 94,173,232,222,189,251,204,247, -151,172,252,118,213,234, 21,132,255,252,165,200,186,124, 3,122,173, 17, 70,150,130, 9, 4,146,214,126, 14, 43, 39,107, 92, 98, -203, 89, 61, 69,190,153,253,199, 78,254, 45,150,207,118,130,227,228, 56, 57,206,255, 78,206,150, 12,132, 27, 77,252,221,212, 76, - 26, 55, 90,218,175, 25,158,191, 5, 22, 9, 44, 55, 55,183,254, 67,159,139, 64,223,161,179, 96,212, 87, 34, 59,245, 59,212,214, - 20,195, 77, 33, 66,118,110,117,239,122,213,105, 17,234, 35,179, 71,124,188,121,203,161,225, 61,123, 4,248,185, 41, 69,182, 29, - 61, 33,115,118, 65,105, 73, 9,174, 37,101,153,182,158, 58,123, 71,171,211, 89, 52, 85, 14,195, 48, 44,203,178, 16, 8, 4, 96, - 41, 10,129,115,150,128, 36,201,103, 70, 11, 18,176, 14,143, 4,201,227,195,100, 97,159, 33,149, 74,149, 79, 16,196,248, 57,115, -230,252,190,103,207, 30,114,224,192,129,161,191,254,250, 43,243,103, 50,187,236,206,209,187, 84,240,184, 1, 91,190,220,122, 32, - 44, 60,194,179, 99,167,142,162,190, 29,108, 96, 52,209, 40, 86,151,225,194,149, 52,253,221,180,155,121,140,209, 48,177, 36,189, -249, 40,238,245, 15,193, 92, 87, 87, 87,151,149, 43, 87,194,108, 54,131,166,105,152,205,102,148,150,150, 34, 57, 57, 25,221, 35, -122,195,255,245, 55, 80, 94, 94,142, 93,187,118,193,221,221, 29,163, 70,141, 66, 77, 77, 13,226,227,227,115,155,119, 29, 96, 94, -246,175, 41, 60, 0,224,243, 97,254, 32, 42,234,124, 80, 80, 80,228,243,221,212,130, 89,115, 30, 59, 91,159,174,155, 34, 56,127, -254,124,172, 72, 36,218,254,224,193,131,234, 22, 4, 54,188,189,189,133, 58,157, 46,148,101, 89, 94,117,117,245,102,189, 94, 63, -109,193,130, 5,202,245,235,215, 35, 36, 36, 4,165,165,165,176,183,183,135, 82,169, 68,109,109, 45,114,114,114,104,163,209,248, - 13, 77,211,171,213,106,117, 73, 75,121,144,152,152,248,128,166, 67,123, 23, 23,109, 59, 52,235,237, 97,126, 38, 83,184,208,218, -166, 31, 88,214,140,202,138, 60, 16,236, 45,227,225, 35,191,223,175,172,164, 94, 76, 74, 74,186,107,201, 53, 34, 73,242,237,163, - 71,143,162, 97,170,156,194,194,194,108,146, 36,155,117,176, 44,193,166, 3, 5, 58, 0, 63, 79, 24,174,156, 95, 85,114,171,179, - 35,255, 65, 78, 68, 48,179,101,211,129, 2,157,179,173,102,109, 65,201,249,172,194,218, 83,219, 99, 14, 29,164,166,190, 48,158, - 86,202,239, 46,117,236, 0, 75, 34,227,179, 33, 33, 33, 30, 36, 89,222, 73, 93,150,153, 56,227,205,183, 94,178, 17,104, 79,132, -184,149,250,154, 93, 2,197,105,105,105, 15,219,224, 98, 61, 89,246,179, 0,244,255,236,179,207, 78, 61,107,141,171, 75,203,207, -246,142,122,151,173,172,172, 74, 41, 73,255,245,118,107, 92, 13,211,223,188,246,234,140, 29,111,190, 62,147, 10,158,187, 24,249, -231,126, 7,204, 38,168, 46, 94,128,212,138,198,177,210,135,180,134, 34,103, 38, 37, 37,113, 81,220, 57,112,224,240, 63, 3,139, -123,125,123,123,185,157,242,238,228, 54,204,187,147, 43, 0, 32,251, 65, 33,178, 31, 20,252,150,157, 83, 48,188,157, 10,183,113, -178,103,162, 62, 20, 3,107,217,100,207, 79,113, 6, 5, 5, 37,147, 36,233,218,150,147,166,105, 58, 63, 45, 45, 45,220,146,116, - 42,149,202,151, 59,116,232,176,174,176,176,240, 80,126,126,254,123,127,137,186,175,159,236,153,164, 4, 81, 44,203,134, 0, 32, - 8,146,180,100,178,231, 70, 78, 87, 87,215,174, 18,137,100, 59,143,199,243,104,184,142, 13,205,120, 70,163,145,170,170,170, 18, - 27, 12, 6, 10, 0, 33, 16, 8,204,114,185, 92,199,231,243,205, 52, 77,231,154, 76,166,183, 10, 11, 11,111, 91,250, 22, 18, 16, - 16, 32,139, 10, 79,175,109,152, 66,103,217,191,166, 96,221,158, 22,203, 78, 35,231,221,187,119, 59,219,217,217, 77, 34, 8, 98, - 2,203,178, 93,106,106,106,244,203,151, 47, 79,185,112,225, 66,181,135,135,199,136,126,253,250, 17,183,110,221,194,195,135, 15, -217,218,218,218, 3, 36, 73,254,171,160,160, 32,187,141,101,137,236,211, 39,116,178,149, 28,163, 25, 22,221, 0,150, 32, 8,226, -118,109, 45,113, 66,169,236,244,227,129, 3, 7,232,246,190,129,133,133,133, 29,175,173,173, 29,117,247,238,221,230,222,170,158, -189,143,154,229,220,240, 65,240,191,122, 15,136, 28,127,249,194,197,195, 75, 62, 73, 93,243,228,186,119,198,217,205,152,242,206, -188,245, 63,125,253,197,226,175,143, 84,124,103, 73, 58,195,194,194,188, 0, 76,102, 89, 54,136, 32, 8, 63,134,129,152, 32,216, -114,130, 32,210, 24,134,185,201, 48,204,209,219,183,111, 23,254, 55,188,209, 62, 57,217, 51, 65,211,182, 52, 65, 88, 58,217, 51, -231, 16,112,156, 28, 39,231, 96,253,159,132,197, 17,184,179,115, 10,134,103,231, 20,192,215,215,151,189,119,239, 94,155,196, 89, -115,111,223,245, 17,218,247,254, 25,146,212,212,212,176,191, 51,131, 84, 42,213,207, 42,149,234,231,191,148,244,194, 5,179, 26, -248, 14,143, 63,237, 66,189, 64,234,101,201,182, 26,141, 6,149,149,149,237, 78,110,122,122,122,221,184,136,127, 59, 91, 60, 30, -204,150,238, 59,108,216,176, 71, 70,163,241, 12,128,124, 0,182, 0,202, 77, 38, 83, 92,105,105,105, 49, 77,211,225,143, 30, 61, -250,168,222,137, 92, 83, 92, 92,220,222, 56, 18,204,149, 43, 41, 63, 1,248,233,143,171,146,255,212,165, 74, 78, 78, 30,173, 84, - 42,147, 29, 28, 28,124,116, 58,157, 80,167,211,241, 89,150,109, 44,251, 18,137,164,164, 33, 98,122,107,176,177, 70, 12, 69,148, - 57,216, 89, 19,127,112,106, 28,221,112, 80, 91,119,167,179,163, 27, 14,182, 33,109, 57,221,186,117,251,129, 36,201, 78, 12,195, -184, 0,176,102, 89,148,178, 44, 91, 74,211,116,254,157, 59,119, 10,255, 91, 42,154,122, 1, 21, 5, 14, 28, 56,112,224,240,151, - 41, 92,142,147,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,127, 20, 72, 46, 11, 56,112,224,192,129, 3, 7, 14, 28,254, 90, - 16, 45,168,208,182,180,173,182, 71,201,222,225, 56, 57, 78,142,147,227,228, 56, 57, 78,142,243, 31,199,217, 26, 55,215,183,235, -111, 18, 94, 28, 39,199,201,113,114,156, 28, 39,199,201,113,254,243, 56,255,167,192, 53, 17,114,224,192,129, 3, 7, 14, 28, 56, -252,197,104,118, 20,161,151,151,123, 32, 73, 51,125, 89,150,164, 88,146, 53, 17,213,218,125,217,207, 4,217,236,208,161,131, 45, -159,196, 24,130,101,101, 4,193,208, 12, 69, 94,206,201,201, 79,179,228,192, 1, 1, 1, 2, 0,211,248,124,126,164,209,104, 84, -242,249,124,149, 78,167,187,196,231,243,247,164,167,167, 27,255,155, 50,169,111,223,190,147, 15, 28, 56, 96, 27, 21, 21,165, 55, - 26,141,102,129, 64,192,219,187,119,175,104,250,244,233,149,151, 47, 95,110,215, 40,200,208,208,208, 65,159,126,250,169,215,115, -207, 61,135,200,200,200,186,145, 35, 71, 10,194,195,195, 5, 75,150, 44,201, 73, 73, 73, 57,215, 22, 46,103,103,231, 64, 30,143, -247, 61, 65, 16, 20,203,178,175, 61, 17,130,225,239,192,203, 0, 38, 2, 80, 2, 40, 2,176, 31, 64,123, 71, 89,142, 0, 48, 6, - 64, 72,253,242, 45, 0, 71, 1,196,253,137,244,141, 0, 48,134, 32,136,110, 0,192,178,236,205,191,144, 51,164,158,243, 47, 75, -231,159, 61,247,176,176,176,229, 66,161,240, 77, 0, 48, 24, 12,223,201,229,242,232,166,182,187,112,225,130, 1,205,132, 62, 9, -232, 4, 54,237,168, 63, 0, 32,112, 76, 6, 0,160,181,229,244, 7,237, 27, 69,204,166,249,179, 77,241, 18,129, 25,237, 30,149, -172, 84, 42,103,143, 26, 53,106, 73, 92, 92,220,199, 5, 5, 5, 59,192,129, 3, 7, 14,255,173, 2,203,203,203, 61,112,194,184, - 23, 63,121,251,173, 89, 4, 69,145, 72,207,200,224,189, 51,247,189, 97,254, 46, 46,110, 50,157, 46,128, 5, 24,173, 68,114, 71, -171,213, 20,108,251,250, 75,171, 46,157, 59,211, 52,205,224,155,237,219, 70, 30, 56,114,232,131,214, 68,150,147,147,147, 23,159, -207,223, 60,119,238, 92,231, 97,195,134,145, 46, 46, 46,200,207,207,183, 62,124,248,176,239,174, 93,187,162,156,156,156,230,151, -148,148,228,180,231,132, 20, 10, 69, 63,165, 29, 70, 72, 68,236, 32, 84, 19,208,154,137,115, 42, 3, 27, 87, 84, 84,116,177,189, -153,100, 48, 24,230,104, 52,154,136,192,192, 64,102,219,182,109,196,204,153, 51, 89,130, 32, 72,173, 86,187, 27,237, 12, 51, 33, -145, 72,190,126,238,185,231,252, 34, 35, 35,179, 47, 95,190, 60, 26,192,241,137, 19, 39,122, 75, 36,146,187, 0,186,180,133,139, -162,168,221,105,105,105,221,180, 90, 45,194,195,195,119, 1,232,254, 55,149,151, 93,118,118,118,166,173, 91,183,110, 15, 13, 13, -245,169,168,168,168,123,235,173,183,134,220,190,125,123, 48,128,215,219,192, 35, 3,176, 69, 42,149, 82,243,231,207, 63,249,194, - 11, 47,220,148,201,100,242,204,204, 76,254,188,121,243, 94,203,205,205,157, 0, 96, 46,128,186,182,114, 58, 56, 56, 72,214,174, - 93,155,212,167, 79, 31,181, 88, 44,150,228,228,228, 16,243,231,207,159,153,153,153,249,103, 56, 5,171, 87,175,190, 60,112,224, -192,108,145, 72, 36,205,205,205,165, 22, 45, 90, 52, 35, 41, 41,169,221,156,182,182,182,194,229,203,151, 39, 12, 24, 48,224,161, - 88, 44,150,101,103,103,147, 11, 22, 44,120,227,222,189,123, 22,115,246,239,223,127,178, 86,171, 93, 21, 31, 31, 15, 0,232,221, -187,247,114,131,193,240,225, 31, 68, 13,203, 34, 50, 50, 82, 71,146,228,155,241,241,241, 77,150,215, 61,137,239, 79, 6,128, 69, - 31, 53, 44, 63,254,110,106,121, 90,248,134,189, 68, 96, 70,155, 10, 78, 64,167,199,226,110,219,197,119, 95, 5,128,119, 22, 61, -254,127,219,197,134,245,179,217,182,136, 54, 87, 87,215,183,122,246,236,185,236,218,181,107, 49,225,225,225,243,118,236,216,193, -143,138,138, 90,203, 48,140,207,136, 17, 35, 38, 36, 36, 36,108,200,204,204,252,154,171,226, 57,112,224,240, 95, 37,176, 72,154, -233,251,246, 91,179,136, 73, 47, 79, 46, 82, 21,171, 25,185,149,205,203,251, 99, 99,165,157, 59,119, 38,117, 91,182,192, 92, 90, - 10,122,225,194, 62, 23, 46, 92, 48,189, 59,127,161, 86,175,211,236, 86,186, 56, 75,247,253,188, 87,113,232,224,129,190, 0,210, - 90,114,174,248,124,254,230,131, 7, 15, 42,188,188,188, 96, 48, 24, 80, 82, 82, 2,163,209,136, 23, 94,120,129,138,136,136, 80, -204,152, 49, 99,179,163,163,227,139,109,113,178, 28, 29, 29, 93,186,120,240, 79, 76,153, 56,188,243,160,254,225, 18,133, 91, 39, - 32,159, 65, 65,246,221, 30,191, 95, 77,154, 27,123,250,124, 86,102,149,113, 84,105,105,105,113, 91, 51,169,172,172,108,201, 91, -111,189,117, 32, 36, 36,196, 73, 36, 18,193,197,197,133,120,227,141, 55,138, 85, 42,213,234,246,102,124, 67,116,112,146, 36,233, -103,190,219, 67,231,110, 99, 99, 3,107,107,107, 0,112,251, 51, 5, 98,194,132, 9, 84,110,110,238,155, 12,195, 4, 60,249,191, - 74,165,242, 54,155,205,165, 15, 30, 60,236,166, 51, 24,123,205, 94,180,106,237,164, 49,131,172, 19, 18, 18,200,209,163, 71,243, -207,159, 63,255,114, 27,156,172, 45, 93,186,116,185,189,126,253,122, 67,250,221,156,224,223,206, 39,144,206,246, 50,198,171, 99, - 71,121,106,106,170, 32, 58, 58,186, 36, 58, 58,122, 11,128, 25,109, 72,250,150,161, 67,135,230, 45, 91,182,140, 74,207,186,239, -125, 49, 33, 5,214,114, 33,237,225,238, 42, 78, 72, 72,224,109,219,182, 13, 31,124,240, 65,155, 57, 7, 13, 26,116,119,205,154, - 53,108,145,186,220, 55,231,129, 10, 86,114,161,217,193,193, 65,114,254,252,121, 98,207,158, 61,134,121,243,230,109, 97, 24,166, - 77,156,125,250,244,185,191, 98,197, 10, 34,227, 94,142,239,165,132, 20,200,101, 2,115, 71, 15,119,241,245,235,215,137, 47,191, -252,210,180,124,249,114,139,210,201,178,236, 55, 27, 54,108,192, 47,191,252, 2, 0,248,249,231,159,225,237,237,253, 84, 1,210, -234,116, 32, 8, 2, 15, 31, 60,144,190,253,246,219,223, 52,245, 66,144,118,212, 31,123, 18,129,105,211,166, 21, 89,116, 6,233, - 27,218,236, 90, 53, 8,171, 89,179,102,229, 55,179,217,171, 95,111,180, 92,100,245,237,219,119,201,190,125,251, 28, 99, 99, 99, - 23, 29, 62,124, 24, 0, 32,149, 74,165, 95,125,245,213,236,177, 99,199,226,245,215, 95, 95,194, 9, 44, 14, 28, 56,252,215, 9, - 44,150, 37, 41,138, 34,161, 46, 46, 53, 13, 29, 50,108,198, 87, 91,183,138,132, 66, 33, 12, 6, 3,234,206,158, 5,171,215,195, - 70, 34,193,168, 81,163,248,193,193,193,214, 51,103,204,120, 67, 93, 92,180,157,162, 72, 5,203,146, 84, 43,199,156, 54,119,238, - 92,103, 47, 47,175,167, 38, 16,166,105, 26,197,197,197,176,178,178,194, 75, 47,189,228,248,195, 15, 63, 76, 3, 96,145,221,239, -236,236,220,209,175,147,227,149,216,111, 23, 41,156,109, 9,160,228, 32,240,232, 46,240,147, 24,126,206,158,240, 27,220, 95, 50, -166, 87,112,183,201,235,247,164,144, 36,217, 71,173, 86, 63,108, 75, 38, 61,124,248,240,146,193, 96,120, 83,167,211, 29, 1, 64, - 94,190,124,153,205,205,205,125,187,184,184,248, 81,123, 51,158,166,105, 84, 86, 86,130, 97, 24, 10, 64,227, 55,109,225, 84, 62, -127, 7, 38, 76,152, 64,229,229,229,189, 21, 16, 16,224,187,115,231, 78,168,213,106,136,197, 98, 48, 12,131,222,189,123,123, 12, - 25, 50,228,126, 73,121,149,157,217, 76, 27,243, 31, 61, 8, 95,183, 33,165,164, 91, 96,151, 75,177,177,177,161,142,142,142, 47, - 89, 40,176, 70, 88, 89, 89,241, 62,254,248, 99,173,194,221,123,146,210,195,143,127,229,198,237, 44,129, 84,200,150, 85,213,212, -164,164,164,100,173, 90,181,170,255,137, 19, 39,212,119,238,220, 25, 1,203,154,204, 70, 56, 56, 56, 72,150, 46, 93, 74,216, 56, -184, 14,141,236,239,193, 79,186,149,118, 95, 40, 21, 50,145,145,145, 99,174, 92,185,178,107,193,130, 5,161,199,143, 31,175, 78, - 72, 72,176,152,211,222,222,158,191,122,245,106,218,197,213,115,172, 71, 39, 95,190,155,194, 49, 16, 0, 50,179,238,125, 91, 92, - 92,124,255,237,183,223,238,117,242,228,201,154,184,184, 56,139, 57,109,108,108, 4,203,151, 47,103, 3,130, 67,103, 4,133,116, - 39,143,254, 22,159, 32,145, 9,233,234, 58,109,109, 90, 90,218,253,197,139, 23,247, 60,126,252,120,205,141, 27, 55, 90,229,212, -104, 52, 86,238,238,238, 80, 40, 20, 96,180, 90, 84, 87, 87,227,208,161, 67,168,169,169, 1, 77,211,144, 72, 36,248, 34,174, 28, -186,123, 71,177,125,243,106,104,181, 90,171,191,162,156, 52, 52,239,181, 69, 92,181, 32,172,240,132,240,122,117, 86,191,175,216, -150,154, 11, 27,156,171, 75,151, 46,229,199,198,198, 58,251,248,248, 96,224,192,199, 19,184,207,152, 49, 3, 67,134, 12,193, 47, -191,252,130,223,126,251, 45,119,220,184,113, 57, 73, 73, 73, 27,242,243,243,191,225,170,122, 14, 28, 56,252,255, 70,147,118, 9, - 75, 16,117,169,233,233,124,185,173,237,171, 95,109,221, 42,226,243,249,120,248,240, 33,210,210,210,160, 57,123, 22,218, 43, 87, -160, 86,171, 81, 83, 83, 3, 39, 39, 39, 68,111,216, 32, 19, 72,100, 51,238,222,187, 71,177, 36,251,228, 4,197,127, 24,106, 41, - 20, 10, 35, 71,141, 26, 69, 62, 41,174,158, 68, 81, 81, 17,134, 13, 27,198,227,241,120,145,205,164,249, 89, 78,194,213,137, 56, -186,127,199,124,133, 51,239, 54,112,111, 30, 80,121, 17, 48, 87, 2,218, 90,224,193,109,224,240,103,112, 47,191, 71,252, 52,119, -162,139,155, 68,112, 20,127,140, 66,223,226,144, 80, 55, 55, 55,111, 31, 31,159,157,227,199,143, 39, 1, 32, 50, 50,146,240,241, -241,217,238,230,230,230,221,194,110, 45,114,234,116,186,171, 21, 21, 21,196,232,209,163, 29,250,244,233,115,122,244,232,209, 14, - 0, 8,157, 78,119,181,189,156,245,112, 24, 52,104, 80,153,151,151,215,207,158,158,158, 34, 11,182,111,228,204,205,205,125,211, -223,223,223,119,231,206,157, 20, 69, 81,216,177, 99, 7,246,239,223,143,248,248,120,148,148,148, 72, 23, 44, 88, 96,251,235,217, -228, 51,167, 47,222, 60, 54,127,214, 91,204,208,238,161, 74, 81,105, 81,153,131,131,195, 72, 0, 10, 11,211, 57,102,206,156, 57, - 39,146,211, 30, 40, 8, 74, 36, 18, 8, 4, 98,133,139,163,179,210,217,165,163,210,217,165,179,149, 84,106, 87, 87, 87,151,123, -228,200, 17, 22,143,251, 40, 89,196,185,106,213,170,235,105,119,115,157, 89, 82, 32, 20, 8,248, 2, 71, 59, 91,251, 9,207, 15, - 27, 3, 0, 82,145, 72, 90, 87, 87,167,250,225,135, 31,218,196,185, 98,197,138,139, 5,197,149, 10, 30, 95, 32, 18,139, 68,141, -179,132,219,219,217,184,201,101, 50,169,193, 96,200,219,185,115,167,185, 45,156, 31,126,248,225,229,244,123,185, 46, 36, 73, 81, - 36, 73,240,156, 28,236, 28, 29, 28, 28,148, 14,118,246,110, 18,161, 80, 86, 91, 91,155,255,243,207, 63,211,150,114, 22, 23, 23, - 35, 35, 35, 3, 29,122,244,192,153, 51,103,208,161, 67, 7, 76,156, 56, 17,147, 38, 77,130, 68, 34, 65, 79,219,251,120, 97, 68, - 31,220,191,127,191,217,235,110,137, 96,114,117,117,189,208,150,178, 4, 60,110, 22,108, 73, 92, 61,203,217,204,118,119,158,117, -174, 14, 29, 58,228,184,105,211,166,208,247,222,123, 47,251,208,161, 67, 8, 9, 9, 65,122,122, 58,220,220,220,176,119,239, 94, -188,251,238,187,217, 43, 87,174, 12,221,191,127,191, 75,112,112,240,210,118,222, 71,109, 5,199,201,113,114,156, 28, 90, 23, 88, - 38, 6, 71,231,204, 91,160,137,137,137,145, 10,133, 66, 60,122,244, 8, 69, 69, 69, 56,124,240, 32, 61,165,107,215,154,215, 66, - 67,171, 15, 31, 60,200, 26,141, 70,176, 44, 11, 95, 95, 95,140, 26, 53, 74,242,198,204, 89,106,162, 90,187,175,197, 55, 90,150, -117,118,114,114,106,156, 52,247, 41,107,107,218, 52,152,205,102, 88, 89, 89,129, 32, 8,103, 75, 78, 64,169, 84, 78,156,177,232, -185, 14,214,158,214,197,108,209,238,114,128, 4,120, 86, 0,207, 26,144, 90, 3, 18, 43, 64, 36,131, 62,241, 74, 57, 75, 68, 62, - 28, 30,246,146,155, 82,169,156,216,150, 76,114,116,116,252, 48, 54, 54,214,233,246,237,219,108, 77, 77, 13,212,106, 53,187,120, -241, 98, 39, 71, 71,199, 15,219,155,241,133,133,133,107,103,204,152, 81, 52,126,252,120,219,152,152, 24,143,241,227,199,219,206, -152, 49,163,168,176,176,112,237,159,185,160,124, 62,159, 58,123,246,172,253,162, 69,139, 38,155, 76,166,196,193,131, 7,151,133, -134,134, 38,186,184,184,120,182,182, 47,195, 48, 1, 13,226, 10, 0, 40,138,130, 80, 40,132, 88, 44,134,141,141, 77,101, 78, 78, -142,185,163,131,128, 71,215, 85,104, 60,109,132,226,200,110,129,174,206,238, 30, 47,214,213,213, 37, 1, 80, 89,152,196,144, 17, - 35, 70,240,140, 16, 97,246,235, 67, 58,191, 61, 53,210,119,251,198,215, 7,109,249,248,181,222,159,175,122,117,192,218,101, 83, - 38, 19,140,217,228,233,233,233,221,208, 81,189, 53, 16, 4,209,173, 95,191,126, 18, 51, 37, 34,175,165,220,205,206,188,151,167, - 30, 51, 60, 50,162,241,128, 97, 97,147, 28, 28, 28, 70,121,121,121, 13, 36, 8, 98,184,165,233, 28, 56,112,160,136, 47,145,145, - 30,174,142, 93,236,109,229, 62, 13, 43,156,156,156,134,187, 40, 20,175, 19, 44, 93,167, 84, 42,221, 69, 34, 81, 55, 75, 57, 7, - 15, 30, 44, 50, 83, 34, 82,225,100,235,236,236, 96,235, 48,110, 68,255,200,193,145, 61,250,244,233,221,115,104, 88,143, 30,211, - 64,155, 52,158,158,158,110,150,158,251,145, 35, 71,240,229,151, 95,162,111, 96, 32, 60, 61, 61,225,228,228,132,179,103,207,226, -236,217,179,144,201,100,168,172,172,196, 55,223,124,131,184,184,184, 63, 93, 89, 52, 8,162,134,142,233,127, 5,158, 21, 89,173, -137,189, 75,151, 46, 29,138,141,141,133,143,143, 15,166, 79,159,238,189,123,247,238,236,236,236,108,200,229,114,220,188,121, 19, -239,191,255,126,246,202,149, 43,189,167, 77,155,134, 61,123,246,224,230,205,155, 49, 92, 53,207,129, 3,135,255, 4, 26,154, 8, -217,122, 87,135, 5, 64,228,229,229, 85,250,251,251,187,249,248,248,144, 6,131, 1, 85, 85, 85, 56,117,242, 36,189,119,255,254, -227, 6,131, 97, 46, 73,146,130, 61,223,127,255,141,179,139,203,160, 9, 19, 39, 18, 38,147, 9,207, 61,247,156,240,236,217,179, - 14,183,243,242,106, 90, 58, 32, 69, 81,141,238,209,236,217,179,177,121,243,102, 0,192,212,169, 83,255, 45,240, 76,166,134, 73, -116, 91,133,212,134,142, 26, 48, 36,200, 42, 79,246,165,149,174, 79,117,141, 87,150,219, 21,121,141,172, 39,120, 98, 30,164,114, - 48,102,152,239,214, 70, 36,101, 63,234, 20, 32, 62,161,238,212,183, 75, 79,236, 79, 56, 28,133,199,163,223, 44,130, 68, 34,233, - 41,147,201,144,158,158, 94, 30, 30, 30, 94,105,109,109,109,227,231,231,231, 40,145, 72,122,182, 55,227,213,106,245, 3, 30,143, - 55,224,197, 23, 95,124,135, 36,201, 33, 12,195,156, 41, 43, 43,251, 90,173, 86, 63,176,240,193, 52,139,101,217, 21, 0, 14, 52, -252,103, 52, 26, 65,146, 36, 88,150,197,152, 49, 99,176,110,221,186,192, 51,103,206, 32, 62, 62,222,126,202,148, 41, 87,149, 74, -101, 37, 65, 16,175, 23, 22, 22, 54,235,146,149,149,149, 97,219,182,109,160, 40, 10,182,182,182,176,178,178,130, 88, 44,198,192, -129, 3,139,215,175, 95,239, 23, 27, 27,107, 42,243, 85,179,194,218,170, 58, 7,137,159, 43,233,232,228,245,206,204,183,174, 1, -136,181,244,220,229,114,185,149, 21,165,173,165, 88, 29,181,105,203,118,158,148, 71, 66,198, 23, 64, 76,214, 18,203,150,175, 97, -197, 4, 37, 69, 27,230,201, 4, 0,129, 64, 32,181, 17,194, 32,144,242,105,185, 84, 72,252, 21, 55,135, 68, 34,145,201, 5, 48, - 52,183, 94, 72,242,132, 0,196, 4, 65,104, 44,229, 20,139,197,114,107, 33,171,111,110,189, 21, 95, 32, 32, 8, 66,140,102, 58, -185, 79,120, 14,108,236,230,199, 2,167,251,191,111, 25,208, 52,141, 30, 61,122, 96,255, 47,103,112,234, 98, 42,202,243,211,240, -234,196,145,232,216,177, 35, 24,134,105, 49, 77, 13,125,176, 44,120, 41,128,171,171,235,133,194,211, 54,173,110,107,105,211,224, -147,156,129, 99, 50, 90, 28,157,232,230,230, 54, 51, 36, 36,100,234,225,195,135, 49,104,208, 32, 68, 69, 69,161, 75,151, 46,222, - 83,166, 76, 1, 0,244,239,223, 31,209,209,209,222,147, 39, 79,198,145, 35, 71,112,226,196, 9,132,135,135,207, 75, 76, 76, 84, -171, 84,170,173, 92,117,207,129,195,127, 61,158,210, 34,255, 43, 2,235, 15, 16, 25,141, 93,116,219,182, 65,115,230, 12,132,167, - 79,227,120,183,110,181,102,179,121,161, 74,165,202, 3, 0,103,103,231,249,177, 7, 14, 92, 30,118,238,156,181, 33, 61, 29, 29, -238,220, 1,175,115,231, 80, 75, 15, 28, 29, 29,221, 40, 10, 0, 32, 38, 38, 6,213,213,213,168,170,170,130,217,108,241, 92,194, -224,243,137,190,206,142, 30, 80,225, 46, 24, 30,207,234, 65,160,161,143, 76,107, 93,208,225,129, 99,109, 21,191, 27,145,165,238, -102,165,171, 49,245, 34, 5, 6, 24, 42,117,112,117,112, 3,143,228,245,109, 75, 38, 53, 56, 58, 18,137,164, 60, 41, 41,233,249, -126,253,250,253, 10,192,177,225,255, 63,225, 98,221, 43, 44, 44,156,215, 46,235,145, 36, 87,156, 63,127,222, 57, 54, 54,246,221, -175,190,250,138, 5, 0,131,193,208,216, 73,222, 96, 48,128,199,227,129, 97, 24,200,100, 50,240,120, 60,151,195,135, 15,187,140, - 29, 59,246,107, 0,205, 94, 39,169, 84, 10, 23, 23, 23,240,249,124,216,216,216,160,174,186, 66,182,237,147, 15, 7, 74,237, 92, -236,231,205, 91, 72, 78,155, 54, 45,245,171,175,190,114,119,245,241, 13,202,200,200,200,125,121,250,140,203,123,247,238,173,133, -229, 29,220,111,101,103,103, 11,131, 2,124,197,199, 15,212, 50, 82, 30, 11,105,233,199,144, 74,148, 16, 10,221, 33, 21,137, 32, - 16, 10, 29, 85, 69, 69,197, 44,203,222,183,232,142,100,217,155, 57, 57, 57, 84, 39, 15,133,176, 70, 99,174,145, 82,180,213,189, -228, 91, 89,190, 97, 33,157, 1, 64,151,126,235,188,168,147,143, 80, 85, 81, 37,114,117,117, 77,107, 67, 58, 5, 46, 46, 46,194, -212,244,123, 59, 29,237,173, 61, 92, 92,156,135, 2,128, 73,171, 73, 37, 12,186, 66,138,199, 83,150, 87, 84,148,232,116,186,123, -150,114,102,101,101,241,124, 58,186,139, 14, 29, 59,253,157,179,181,188,131,163, 68,228, 98, 45, 19,200,133, 52, 93, 39,100,232, - 66,129, 72,164, 40, 44, 42, 42,101, 89, 54,171, 57,146,134, 14,227,192,174, 31,234,207,191,193,221,193,149,108, 22,118, 78,174, - 40,203,203,196,217,163, 71, 48,117,246,187, 22,221, 79, 27,215, 76,223,187,113,205,244,102,195, 51, 60, 35,136,254,124,205,147, - 30,112,225, 89, 78,149,170,229, 10,117,196,136, 17,255,218,177, 99,135,180,145, 34, 61, 29,145,145,143,123, 18,172, 90,181, 10, -195,135, 15,135,159,159, 31,210,210,210,224,233,233,137, 67,135, 14,129,162, 40,254,204,153, 51,151,236,220,185,147, 19, 88, 28, - 56,112,248,255,138,102,135,172, 49, 44,203,208, 21, 21, 96, 13,134, 6,135,128,101, 89, 86,250,111, 97,195,151,218,218,218, 18, -124, 55, 55, 16, 98,241,227, 63, 9,226, 79,247,208,230,241,120,109, 18, 88, 52, 13, 10,132, 9, 44, 88, 0, 36, 8,144,208, 72, -132, 88,233, 18, 69, 44, 83, 46,161, 74,164,118, 4, 65,145, 32, 72, 2, 32, 0,214,196,128,102,233,182, 42, 35,182,182,182, 22, -122,189,222,206,199,199,231,184, 78,167,179,171,127,176,177,255,169, 11, 71,211,116, 54, 73,146,120,237,181,215,208,160,244, 13, - 6, 3,178,178,178,160,211,233, 96, 48, 24,144,150,150,134,234,234,106, 24, 12, 6, 36, 38, 38,194,211,211, 19, 60, 30, 79,217, - 18,175,217,108,134,147,147, 19,148, 74, 37,244,117,213,178,131, 59, 54,143, 94,191,106,153,227,203, 62, 44,185,107,203,103, 76, -231,206,157, 43,131,130,130, 28, 37, 18, 73, 69, 72, 72, 72,217,222,189,123, 15,163,109, 33, 26,142, 46, 91,182,172,215,192,129, - 3,253,108,173, 36, 38,153, 24,144, 82,117, 16,178, 90,240,205,197,240,243,242,101, 8,169,180,203,228,201,147,245,120, 28, 23, -202, 34,206, 5, 11, 22,248, 4, 7, 7, 43,237,172, 69,117, 18, 1, 81, 36,166,104, 85,101,218,173,171, 0, 32,178,181,215, 66, - 36, 9,158, 58,117,170,182, 45,156,139, 23, 47, 14,232,212,169,147, 66,192, 99, 53, 4,109, 46,108, 92,163,215, 21, 83,124,129, - 6, 2, 65,216,188,121,243,140,109,225, 92,180,104,145,127,183,110,221, 92,156,108,196,117, 18, 62, 10, 37, 20, 93,200, 55,232, -243, 4,102, 67,177,216,206, 78, 3,137, 52,244,213, 87, 95, 53, 52,199,217,224, 94, 61,235, 12,241,120, 60, 20, 22, 22,162,252, -193, 21,148, 63,184,141,206,100, 13,122,185, 56, 65, 46,151,183,122, 63, 17,129, 25, 68,250, 3, 16,233, 15, 64, 16,129, 25, 68, - 83,203,207,138, 44,165, 82,217, 98,217,111,177,169, 47, 61,224, 66,123, 56, 79,156, 56,241,233,216,177, 99, 77,147, 38, 77,194, -233,211,167, 65, 16, 4, 46, 93,186,132,130,130, 2, 12, 31, 62, 28, 44,203, 34, 37, 37, 5, 70,163, 17,233,233,233,152, 48, 97, - 2,162,162,162, 52,113,113,113, 31,115, 85, 61, 7, 14, 28,254, 83, 2,107, 96,189, 37, 55,176, 97,133, 73, 36, 74,101,230,204, -129,205, 47,191,128,127,247, 46, 38,188,248,162,181, 72, 36,218,162, 80, 40,186, 43,149,202,190, 18,137,228,235, 5, 11, 22, 88, - 57, 68, 71,195, 53, 62, 30,170,211,167, 97,226,243,111,180,229,224, 90,173,182,193,141,129,161, 94,200,217,218,218,130, 97, 24, - 88,170, 93, 88, 26, 9,170,146,187, 16,162, 35, 88,160,230,100,205,224,132,151,179, 87,187,156,169,233,220,249,110, 53,223,103, -189,115, 47,199,157,157,250,220,208, 18,252, 90,129,181, 16,133,133,133, 96,193, 36,180, 37,157, 58,157,174,170,174,174,142,240, -241,241,113, 76, 74, 74,242,241,245,245,117, 0, 64,232,245,250,235,127, 38,243,149, 74,101,239,208,208,208,253, 97, 97, 97, 57, -161,161,161,251,149, 74,101,239, 54,236,190, 43, 57, 57, 25, 20, 69, 97,230,204,153,168,169,169,129,193, 96, 64, 94, 94, 30,114, -115,115, 97, 48, 24,144,154,154,138,140,140, 12, 24, 12, 6,164,164,164, 64,175,215, 91, 34,220, 96,101,101,133,202, 50,181,108, -223,182,207, 70,127,188,234, 35, 73,213,189, 36,228, 23, 22,131,161,181,133, 31,125,244, 81,182,143,143,207, 37,131,193,224, 79, -211,244, 40, 0,251,218, 88,222, 82,186,116,233, 50,112,227,198,141,125, 87,127,250,189,208, 70, 94, 13,145,173, 61,132,118, 82, - 8, 61,195, 49,245,253,207,121,219,183,111,189,117,233,210,165, 18, 88, 54, 50,143, 4,144,210,163, 71,143,190, 69, 69, 69, 3, -194,194,194,194,221, 58,117,146,201, 20,202, 10,145,194,181,148,209,235,174, 66,225,214, 63, 38, 38,230,250,185,115,231, 84,109, -225,244,244,244,236,191,117,235,214, 94, 29, 59,118,236, 37,181,182,150,235,106,106,126, 48,107, 52,177,148, 92, 46,132, 68, 54, - 44, 46, 46,238,210,222,189,123,139,218,194, 25, 16, 16,208, 47, 58, 58,186, 71,247,238,221,123,185,123,123,203, 37,206,138, 50, -153,171,187, 90,226, 23, 40,128,194,125, 72, 76, 76,204,149,243,231,207, 91,154, 78,144, 36, 9, 30,143, 7,185, 92,142, 11, 23, - 46, 32,170, 95, 23, 40,201,114,132,116, 84, 98,228,244,215,241,219,111,191,129,207,231,227,207,186,173, 77,184,175,173, 10,162, -182,138,175,214, 56, 85, 42,213,214,196,196,196, 47, 94,122,233, 37, 12, 25, 50, 4, 55,111,222,196,226,197,139,179,207,159, 63, - 15, 0,184,121,243, 38,214,174, 93,155,157,144,144,128,233,211,167, 35, 50, 50, 18, 41, 41, 41, 49, 92,240, 81, 14, 28,254,207, -224, 15, 90,228,255, 50, 26,154, 8, 47, 60,249,237,109,103,103,165,211,105,242, 47, 92,184, 96, 28, 53,106,148, 64, 34,145, 96, -226,164, 73,100, 7, 15,143,126, 23, 98, 98,206,202,164, 82, 98,210,178,101,242,224,224,224,198, 74,254,215, 95,127,213, 86, 85, - 85,150,117,232,208,193, 54, 47, 47,175,210,146,131,151,150,150, 66,161, 80,128,162, 40,212,213,213,129,162, 40,200,229,114,104, - 52, 26,139,251, 96,213, 85,147,167, 47, 93, 72, 29, 50,104,226,236,154, 97,217, 70,153,153,117,232,109, 69,178,160, 97,130, 78, -195,194,204,176,188,107,172,109,143,179,126, 81, 21,107,125, 75, 51,243,207,108,117,210,178,134,211,109,201,164,138,138,138, 15, -103,207,158,189, 47, 40, 40,200,209,202,202, 10, 46, 46, 46,228,155,111,190, 89,146,151,151,183,166,189, 25, 31, 16, 16, 48,217, -223,223,127, 75,108,108,172,125, 78, 78, 14, 0,116, 90,182,108,217,160,140,140,140,185,233,233,233,150, 4, 47,221,191,113,227, -198, 45,131, 7, 15,150, 69, 68, 68, 52, 10, 44,163,209,216,248,253,236,239,134,230,216,150,192, 48, 12,196, 98, 49, 98,191,221, - 60,236,227, 85, 31, 73,202,210, 19,112,235,210,105,196, 61,208,107, 54,124,183,231,170,184,193,173,108,235,249, 58, 73,187, 90, -217, 90,237, 31, 52,116,132,235,184,169,179,201, 85,171, 86,177,191,159,138,101,191,251,106, 14,188,253,191, 0, 65,144,200,200, -188,137, 89,147,250,179,169,183, 83,123, 0,112,111, 43,231,167,159,126, 90,151,145,145, 81,181,127,255,126,113,135, 14, 29,124, - 72,146, 20, 21, 21, 23,151, 77,158, 60,249,230,229,203,151,203, 25,134,153,211,174,116,224, 23, 88,155, 0, 0, 32, 0, 73, 68, - 65, 84,254,254,123, 93, 76, 76,140,212,201,201,201,159, 36, 73, 81, 85, 85, 85,233,236,217,179,147, 99, 99, 99,107, 24,134,153, -219, 30,206,200,200,200,218,125,251,246, 73, 61, 60, 60,186,144, 36, 41, 42, 44, 42, 42,157, 52,105, 82, 74, 66, 66, 66, 53, 30, - 7, 26,109, 18, 19,231,103, 96,224, 11,143,127, 75, 36,146,178,128,128, 0,135, 81,163, 70,129,166,105,228,228,228,224,246,237, -219, 24, 49,229, 21,216,219,219,227,220,157, 59, 80,169, 84,248,224,131, 15,160,213,106,113,239,222, 61,213, 95, 89,121,212, 55, -237,177, 42,149,234, 15, 55,107,218, 81,255,198, 32,162, 79,137, 43, 47,226, 66, 75,253,172, 90,226, 4,128, 97,195,134, 77, 31, - 59,118, 44,126,249,229, 23, 44, 94,188, 56,123,229,202,149,222,147, 38, 77, 66, 90, 90, 26, 66, 67, 67,177,112,225, 66,239,141, - 27, 55,102,179, 44,235,221,167, 79, 31,184,187,187, 63,175, 82,169,222,231,158, 91, 28, 56,252,159,192,133,103,190,255, 39, 4, - 22,240, 68,135, 50,214, 90, 50,105,199,214,175,109,222,157,191,176, 46, 48, 48,208,206,197,197, 5, 36, 73, 98,196,200,145, 68, -239, 83,167,172,248, 74, 37, 28,186,118, 5,203,178, 96, 24, 6, 23,227,227,113,246,236,217,186, 31,190,219,229, 54,227,141, 55, -198, 0,104,118,228, 78, 67,179, 26, 65, 16, 40, 41, 41,105, 20, 88, 98,177, 24,133,133,133, 80, 40, 20, 16, 8, 4,160, 40,138, - 7,128, 2,208, 98,179,163, 66,161,248, 62,122,109,218,210,188,144, 69, 94,145, 82,146, 56, 89, 87, 4, 18, 4,204, 44, 3, 82, -203,130, 97, 88,232, 77, 64,144, 27,101,119, 70, 15,219,235,169,167,115, 20, 10,197,247, 42,149,229,207,154,156,156,156,115, 90, -173,246,237,186,186,186, 3, 0,200,171, 87,175, 50, 15, 30, 60,120,199,210, 14,233, 77, 65, 34,145,188, 31, 27, 27,107,191,102, -205,154,138,179,103,207, 86, 13, 30, 60,216, 38, 58, 58,218, 97,242,228,201,239,195,130,232,240, 42,149, 74, 11, 32,166,184,184, -248,157, 30, 61,122,160,188,188, 28, 6,131, 1,201,201,201,240,245,245, 69, 98, 98, 34,186,116,233,130,235,215,175,195,223,223, - 31, 52, 77, 67,167,211,129,182, 32,208, 86, 97,222, 35,185, 84, 95, 97, 93,120,237, 4, 50,111, 37,226, 68,182, 94,179,225,187, -125, 39,186,134,134,215, 89, 42,124,159, 68,103,103,105,144,139,163,195,169,207, 55,174,179, 42,184,118, 18,251,183,127,206,254, -126,236, 88,119,145, 53, 94,235, 61,244,221,137, 38, 35, 58, 48, 44, 4,145,145,125, 48,166,123, 42,193,215,163,226,108, 82,203, -145,204,155,226, 60,240,253,207, 97, 58, 32,200,203,203,107, 12, 69, 81, 78, 0,140, 52, 77,167,193,194, 41,104,154, 75,167, 14, - 8, 82, 42,149, 99,196, 98,177, 27, 65, 16, 90,173, 86,123,247,175,224,244,246,246, 30, 67, 81,148, 43, 0, 13, 77,211, 89,104, -227, 84, 57, 67,134, 12,217,176,107,215,174, 5,122,189,222,225, 9,183,149, 56,121,242, 36, 12, 6, 3,132, 66, 33, 43,147,201, -144,151,151,199, 2, 80,177, 44,251,246, 95, 85,113,140, 31, 63, 30, 87,175, 94, 93, 5, 96, 69, 75,219,149,151,151,243,236,237, -237,205, 79, 10,175,230,162,192, 91,194,121,237,218,181, 79,223,124,243,205,247,227,226,226,242, 87,174, 92, 25, 58,109,218, 52, - 28, 57,114, 4, 30, 30, 30,200,204,204,196,130, 5, 11, 64, 16,132,247,198,141, 27, 83,246,238,221,171, 44, 42, 42,250,140,123, -102,113,224,240,127, 10,196,255,202,137, 52,217, 7,139, 96, 8,190,159,175, 47,109,208,212,238,126, 99,250,116, 77,106,106, 42, -104,154,134,217,108,134,238,250,117,212,157, 58, 5,179,217, 12,150,101,113,237,234, 85,204,157, 51,167, 86,167,169,253,182, 83, -167,142, 44,193,178,178, 39,168,254, 48,219,182,161,161, 45, 16,143,155, 8,181, 90, 45,248,124, 62,228,114, 57, 74, 74, 74, 32, - 20, 10, 33,145, 72,208,173, 91, 55,210,221,221, 61,170,137,228, 61,197,153,156,156,108, 66,181,126,194, 47, 83,231, 21,185,107, -204,236, 76,219, 78,232,192,151, 60,238,111, 5,192,201,138,196,144, 64, 30,236,121,165,236,237, 61, 47,171, 8,115,213,132,228, -228,100, 83, 75,156,207, 66,169, 84,118, 14, 10, 10,250,186, 33, 14, 86,191,126,253,200,224,224,224, 47,149, 74,101,231, 22,118, -107,145, 83, 44, 22,139, 0,224,244,233,211,229,241,241,241, 35, 79,159, 62, 93, 14,128,109,248,223, 18, 78,146, 36,119,108,223, -190, 29, 82,169, 20,102,179, 25, 6,131, 1,122,189, 30, 6,131,225, 15, 31, 71, 71, 71,156, 57,115, 6, 12,195, 28,111, 45,157, - 1,193, 33,181, 85, 60,219,226, 61,191,254,142,147, 15,141,181,237, 16, 87,141,156,129, 10, 89, 23, 55,167,199, 2,163, 44, 61, - 1,247,110, 39,226,196,241,163, 41, 58,160,160,178, 26,159, 84, 86, 35,164, 78, 7,187,158, 1, 40, 61,117, 96, 41,177,240, 21, - 16, 32,154,156, 51,207, 34,206,122,129, 50,139,166,233,158, 52, 77,247, 4, 48,171, 5,209,210, 38, 78,157, 78,215, 75,171,213, -254,165,156,109, 77,103, 67, 31, 44, 0,248,232,163,143,174,199,199,199,191,116,253,250,245,193, 13,159, 59,119,238, 12,202,201, -201, 25, 84, 80, 80, 48, 40,231,168,136,186,115,231, 14, 47, 49, 49,145,159,152,152,232,145,148,148, 20,103,105,249,108, 14, 79, -118,112, 87,169, 84, 43,159,113,154, 26, 57,137,192, 12,226,235,141,179,127,136,141,141, 85,252, 85,156, 0,144,153,153,249,245, -174, 93,187, 60,187,117,235,230,222, 16,138,225,219,111,191, 5,240, 56,146,253,231,159,127,142,222,189,123,195,221,221,221, 57, - 41, 41,201,171,176,176,112,123, 91,239,205,118,130,227,228, 56, 57, 78, 14, 22, 8, 44,130,161,105,154,129,179,139,179, 85,137, - 90,253,213,236,217,179,202, 86,175, 94,173,251,127,237, 93,121, 92, 84,213,251,126,238,157,125,103, 21, 24, 65, 81, 65, 4,113, - 65, 92, 48,181, 12,197,157,178, 92, 75,203,221,220,181,197,204,212,159,184,164,169,165,102,230,146, 90,238, 75,102,101,185,100, -148, 95,200, 21, 17,220, 80,217, 20, 20, 24,246, 29,134, 89,238,242,251, 3,102, 26, 8, 97, 6, 53,177,238,243,249,220,207,157, - 59,119,230,153,115,206,189,115,206,115,223,247, 61,239,137,136,136,128,254,206, 29, 84,196,196, 32, 60, 60, 28,115,231,206, 45, -127,103,218, 52, 77, 69,121,233, 70, 55, 87, 23,103,154,102, 64, 16, 76,157, 22, 18,146, 36,147, 19, 18, 18, 0, 0, 58,157, 14, - 95,126,249,165,209, 96, 48, 64,165, 82,129,101, 89,236,216,177,131, 1,128,190,125,251,202, 5, 2,129, 85, 75,144,100,100,100, - 92, 47,126,152,209,255,251, 55,166, 39,223, 62,244,115,113,135, 60, 61, 70, 73,212,120,173, 3,139, 86,146, 84, 60,184,248, 77, -209,197,109,195,146,203, 11, 30, 14,200,200,200,184,110,107, 35,185,185,185,253,223,129, 3, 7, 92,174, 94,189,202,234,116, 58, -164,167,167,179,243,231,207,119,113,115,115,251,191,199, 81,233,133,133,133, 32, 73,146,169,106, 23,198, 86,245,158,158,158,126, -243,232,209,163, 63,157, 61,123, 22, 30, 30, 30,160,105,218, 44,176, 44,247,124, 62, 31, 4, 65, 96,219,182,109,133, 4, 65, 44, -172,143, 87, 36, 18, 97,251,145,147,167, 62,216,122,236,200,145,240,168, 99, 13,181, 92, 1,128, 76,169, 90,241,249,186, 79,237, - 76,174,198, 3, 87, 51,138, 9,154,173,221, 85,103, 72,175,188, 71,106, 23, 88, 13,227,124, 26,229,124,134,156,207, 18,149, 51, -253, 52, 68,211,166, 77,241,253,247,223,219, 28,131,229,223,138,248, 91,112,123, 67, 57,111,222,188,249,233,168, 81,163,178,194, -194,194,182, 84, 84, 84,148, 85, 61,188, 25, 62,255,252,243,207,102,205,154,149,149,158,158,206, 89,174, 56,112,224,240, 76, 81, -107,154, 6,134, 71,158,223,182,125,235,160,195, 7, 15,185,241,120,164,219,189,123,247,175,188, 61,105, 82,122,100,100,164,163, -160,117,235,110, 36, 73, 50,250,143, 62,186, 88, 90, 92,148,191,247,219,111, 60, 91,182,108, 17, 80,181,216, 51,203,240,200,243, -117,253, 96,126,126,254,238,121,243,230,117,219,179,103,143,112,221,186,117,101,233,233,233,103, 46, 95,190, 60,104,203,150, 45, -146, 29, 59,118,148, 23, 21, 21, 29, 63,121,242,228,208,224,224, 96, 74,175,215, 91,157, 95, 40, 59, 59, 59, 14,217,217,126,228, -250, 29, 99,226,183,239,235,207,242,200, 30,168, 16,130, 96,233, 11, 36, 85,122, 38, 59, 35,227, 0, 0,170, 33,141, 36,145, 72, - 2,164, 82, 41, 18, 19, 19, 11,186,117,235,166, 23,137, 68,130, 22, 45, 90, 56, 73, 36,146,128,134, 54, 60,203,178,108, 65, 65, - 1, 88,150,229, 3, 32,104,154,230, 3, 0, 83, 95,210,162, 26, 16, 10,133,111, 76,156, 56,241,167, 45, 91,182,244,239,219,183, - 47,188,188,188, 96, 52, 26,225,235,235, 11,189, 94, 15, 31, 31, 31, 84, 84, 84,224,139, 47,190, 64,105,105,233,123, 25, 25, 25, - 5,117,241, 49, 12, 3,177, 88, 12,145, 72, 4,223,182,237,203, 37, 18, 9, 26, 42,174, 0, 64, 46, 66,171,135,151, 78, 32,241, -198, 85, 28,142,209, 20,150, 25,152,129,241, 57,229,183,106,126,174, 92,143,178,224,129,211, 43,133,183, 17,165, 79,130,243,105, -148,243, 89,115, 90,198, 96, 89,243,217, 39,133, 71,197, 68,213,133,219,247, 65, 76,127,113, 51,139,219,155,107,205,113,213, 16, - 78, 19,210,210,210,182,153,150,192, 33, 73, 50,105,206,156, 57,243,211,211,211, 55,104, 52,154, 45, 26,141,102, 41,215,181,115, -224,192,161, 81, 10,172,123,247,210,226,142,254,120,236,227, 99,223, 31,237,201,178, 36,143, 37,136, 50,128,252, 57, 46, 46,174, - 90,240,186,151,131,131,114,226,148,137,163, 9,134, 16, 16, 4, 67, 51, 60,242,252,189,123,105,113,245, 88,155,110,244,233,211, -103,115,112,112,240, 36,154,166,215, 38, 38, 38,158, 33, 73, 50,118,224,192,129, 31, 80, 20,245, 89,114,114,242, 25, 95, 95,223, -223, 14, 31, 62,252, 33, 77,211,182, 90,136,168,140,140,140, 61,168, 35, 6,172,129, 88, 14,192, 78, 44, 22, 23, 93,189,122,245, - 80,207,158, 61,223, 32, 8,194, 14, 64, 81, 67, 9,117, 58,221,156,146,146, 18,231,209,163, 71, 27, 1,248,190,254,250,235, 11, - 19, 18, 18, 4,101,101,101,201,182,240,164,166,166,234, 60, 61, 61,135,206,152, 49, 99,167, 80, 40,236,139,191,146,180,153,132, - 28, 88,150, 5, 77,211,199,171,218,230,145, 16, 8, 4,165, 67,134, 12, 81, 88, 97,225, 42,181,182,124,153,185, 37,115, 86,238, - 62,185, 90,103,100, 24,138, 97,167,197,103,151,215, 58,234, 95,137, 67,187, 39,205,105, 11,158, 23, 78, 0,152,254,226,230,125, -184,189,217, 44,160, 76,110,195,154,199, 79, 11, 85, 22, 39, 22,192,178,250, 62, 91,215,186,130, 13,229,172,137,244,244,244,175, -185,153,130, 28, 56,112,248,175,129,243, 79,115,156, 28, 39,199,201,113,114,156, 28, 39,199,249,159, 3,201, 53, 1, 7, 14, 28, - 56,112,224,192,129,195,147, 5, 81,135, 10,181,101,165,236,134, 40,217,155, 28, 39,199,201,113,114,156, 28, 39,199,201,113,254, -231, 56,235,227,190, 9, 14, 79, 69,120,113,156, 28, 39,199,201,113,114,156, 28, 39,199,249,223,227,252, 87,129,115, 17,114,224, -192,129, 3, 7, 14, 28, 56,112, 2,171, 81,224,109, 84, 38,133,188, 9,224,215,170,227,134, 66, 10,224, 35, 11,190, 83, 0, 62, - 4, 32,230,154,185, 81,131,199, 53, 1,135,134, 66,173, 86,183,105,219,182,237,213,122,146, 21,115,224,192,225, 57, 6,255, 81, - 39,188,188,188, 46,144, 36,217,138, 36, 43, 53,152,101, 46, 36,211,235,154,123,150,101,239,221,190,125,187,199,163, 56, 91,182, -108,105,230, 36, 73, 18, 4, 65,128, 36, 73, 24,141, 70, 37,143,199, 43,169,141,147,166,233,180,248,248,248, 46,141,168,205,246, - 57, 56, 56, 24,183,108,217,242, 85, 96, 96, 96,235,252,252,252,178,169, 83,167, 14,184,121,243,102, 8,128,183,108,228,106, 79, - 16,196,222,174, 93,187, 30,155, 53,107,214,119,254,254,254,202,178,178, 50,241,225,195,135,221,182,109,219,246, 39, 77,211, 19, - 1,196,113,183,105,227,129,155,155, 91, 32, 65, 16,155, 21, 10, 69,151,210,210,210, 43, 0,102,106, 52,154,107, 92,203,252,163, -152, 44, 18,137, 6,250,248,248,116,211,233,116, 5,247,238,221,139,170, 74,233,146,249,132,248,237, 0,252,159, 88, 44, 14,242, -246,246,110,150,144,144,240,208, 96, 48, 92, 70,101,186,150,162,199, 37, 87,171,213,109,130,130,130,206,173, 90,181,202,105,225, -194,133,231,162,162,162,122,105, 52,154,120,238,178,114,120, 22,104,214,172,153,125, 89, 89,217, 78,146, 36, 3, 37, 18,137,155, - 82,169,132, 66,161,200, 20,139,197,177, 50,153,108,210,201,147, 39, 11,185, 86,122,194, 2,139,199,227,121, 68, 69, 69,185, 40, -149, 74,208, 52, 13,134, 97,192, 48,140,121,253,193,170, 37, 5, 77,194, 10, 52, 77, 35, 56, 56,184,206,213,132,249,124,126,179, -171, 87,175,186, 40, 20,127,165, 90, 50, 24, 12,232,216,177, 35, 19, 19, 19,227, 82,115, 33, 97,189, 94,143,206,157, 59,179,141, -168,189,198, 58, 57, 57,233, 83, 83, 31,188, 80,161, 51,244,152, 49,127,197,255,141,126,181,183,221,197,139, 23,201, 87, 94,121, - 69,112,246,236,217,183, 1,236,181,146, 75, 74, 16,196,174,197,139, 23,127,202, 23,202, 92,142,158,188,192,255,114,251,129,135, -237,219,182, 36,230,205,158, 33,155, 51,103, 78,148,159,159,223, 55, 52, 77,191, 8, 64,199,221,170,141,227,255, 34, 16, 8,126, - 90,189,122,181,123,166, 70,131,245, 27, 54,116, 7,176, 5, 64,119,174,105,254, 49,124,180,108,217,178,213, 99,198,140, 1, 69, - 81,208,106,181, 77,147,146,146,218, 45, 94,188,248,245,164,164,164,110, 0,146, 31,147,191,137,143,143,207,157,121,243,230, 57, -118,235,214, 13, 36, 73,162,176,176,176,233,185,115,231,186,239,218,181,235,237, 7, 15, 30,248, 1,200,121,156, 31,112,112,112, -216,255,217,103,159, 57,137,197, 98,124,251,237,183, 78,163, 70,141,250, 19,192,139,143, 33,178, 72, 39, 39,167, 57, 0,130, 25, -134, 17, 3,184, 92, 80, 80,176, 18,128,129,187, 93, 56,212, 5, 39, 39,167,201, 89, 89, 89, 95,201,100, 50,161,189,189, 61,164, - 82, 41,132, 66, 33, 68, 34, 81,115, 7, 7,135,230, 10,133, 98,240, 27,111,188, 49,243,208,161, 67, 59,185,214,122,130, 2,139, - 36, 73, 72,165, 82, 28, 62,124, 24, 60, 30, 15, 66,161, 16, 2,129, 0, 2,129,160,218,107,211,113,179,102,205,234,253, 49,147, - 85,234,248,241,227,176,179,179,131, 74,165, 66,219,182,109, 65, 16, 4,196, 98, 49,194,195,195,171,241,118,233,210,229,177,178, -136, 55, 4, 35,250, 86, 38,233,172, 45,121, 99,232,204, 52,188, 50,102,213,240,114,157,241, 37,150, 37,180,153, 5,198,252,229, -235,190,138,235,212,174, 45,113,228,200,145,206,206,206,206,111,218, 32,176,230,118,235,214,237, 56, 5,145,235,196,241, 19,198, - 79, 32, 9,106,216,132,247,151,157,139, 73, 42,216,233, 31,120, 32, 39, 39,109,218,151, 95,126, 25, 63, 99,198,140, 57, 0,214, - 90, 91,254, 46, 93,186, 60, 96, 24,166, 89,149, 72,206,149, 74,165,234,136,136, 8,170, 17,220,107, 77, 1,172, 3, 96, 4,176, - 6,128,101,210,205, 54, 66,161,112,173,193, 96,200, 71,229, 66,191, 15, 27,227,159,197,221,221,221,239,173,183,222,114,206,203, -201,193,250, 13, 27,204, 77, 14, 43, 22, 37,127,210, 8, 12, 12,108, 37,145, 72,214, 1, 8,212,233,116,238, 0, 32,149, 74,211, - 89,150,253, 65,171,213, 46,138,137,137,209, 54,244,129, 22, 64, 59, 60,122,201, 38,118,237,218,181,241, 31,126,248,225,189,103, -192,217,194,213,213,117,213,200,145, 35,113,226,196, 9,156, 60,121,210, 40,145, 72,248,227,199,143, 39,102,206,156,233, 48,111, -222,188,193, 0,190,120,204,166, 29,188,108,217, 50,199,182,109,219,226,232,209,163,184,118,237,154,182, 77,155, 54,210,222,189, -123,131,199,227, 57, 46, 90,180,104, 16,128,221,143,243, 3, 5, 5, 5, 43, 87,172, 88,177,103,243,230,205,202,228,228,100, 44, - 91,182,204,121,214,172, 89, 17, 0,122,219, 32,178,196, 0,230, 0, 8,230,241,120, 47,142, 31, 63,158,154, 61,123,182,128, 36, - 73,227,198,141, 27,155,236,220,185,115,180, 64, 32, 8,204,203,203, 43, 5, 7,212, 49,206, 25, 24,134, 17, 0,144, 0,208,213, -119,252,111,170,187,163,163,227,244,252,252,252, 45, 77,155, 54, 69,147, 38, 77,204, 99, 45,195, 48, 40, 43, 43,131, 86,171, 69, -171, 86,173,132,109,219,182,221, 49,115,230, 76,193, 87, 95,125,181,149,187, 99,108, 23, 88,189, 1, 68, 88,188,215, 27, 64, 4, - 65, 16, 96, 24, 6, 2,129, 0, 60, 30, 15,124, 62,223, 44,124, 44, 95,155,182, 71, 8,161,155, 53,110,102,162,164,164,196, 44, -174,236,236,236,204,150, 48,163,209,248, 55, 78,154,166, 65,146, 36, 91, 23,231, 19,130,153,243,187,141,126,216, 29, 61,255,141, -221,209,149,199,131,198, 84,238,119, 71, 3,225,151,167,173, 91,187,181,103,179,185, 43,191, 93,157,151, 87,152,237,239,209,132, -122,115, 76,111, 79, 81,110, 86,174, 83,203,150,161, 0,178,109, 40,103,175,105,211,166, 29, 61,122, 54, 81, 46, 22,139, 68, 60, - 18,188, 54, 94,173, 4,238,170,214,142, 77, 6,116, 19,165, 36, 39,255,249,246,219,111, 79,155, 49, 99,134,147,133,192,170,183, -238, 44,203,170,207,156, 57, 3, 62,159,143,144,144, 16,135,170,107, 76, 89, 83,247,167,209,158, 22, 88,156,149,149,245, 70, 69, - 69, 5,186,116,233,242,106, 94, 94, 94, 48,128, 88, 0, 29,134, 14, 29,250,231,119,223,125,167,140,137,137, 65,247,238,221,165, - 0, 70, 61,195,114,254, 13,106,181,250, 12,128,126, 4, 65, 64, 95, 81,161, 95,247,121,181,101,238,162,107,136,171,167, 94,206, -128,128, 0, 63,137, 68,114,225,243,207, 63, 87,249,251,251, 19, 2,129, 0, 20, 69, 33, 33, 33,161,217,190,125,251,222,185,114, -229,202,160,192,192, 64,255, 90, 22, 53,183,166,238,237,254,252,243,207, 50, 47, 47,175, 90, 5, 99,121,121, 57,207,203,203,235, -229, 71,136,161,167,205,153,150,149,149,245, 90,191,126,253,166,101,102,102,222,161, 40,106, 1,128,246,206,206,206, 49,195,135, - 15,135, 84, 42, 13,214,106,181, 95, 60,206,117,119,113,113, 25,218,163, 71, 15,108,222,188, 25,107,214,172, 9, 1,240,251, 47, -191,252,210,183,184,184, 56,252,213, 87, 95,133,189,189,253,107,133,133,133,187, 31,227, 94,106,211,173, 91,183, 29,239,189,247, -158,242,151, 95,126,129,143,143, 15,138,139,139, 49,113,226, 68,151, 77,155, 54,253, 15,192,203, 22, 34,235, 81,156,254, 98,177, -120,247,193,131, 7, 21, 94, 94, 94, 94, 66,161,144,244,242,242, 66,126,126, 62, 42, 42, 42,196, 43, 87,174,236, 32,145, 72,174, -125,241,197, 23,187, 1, 12,123,198,255,163, 34, 0, 42, 0,246,176,205,189,122,179, 14, 62,115,124,170, 64, 32,128, 88, 44,134, - 68, 34,129, 68, 34,193,189,123,247,190,231,241,120, 19, 8,130, 48, 90,195, 73,252, 53,112, 5, 0,136,170,239, 24, 0,211, 8, -250, 37, 15,130, 32, 54, 2, 8, 70,101, 28,117,132,139,139,203,220,172,172,172, 84,107, 57,213,106,181, 83, 94, 94,222, 23, 77, -155, 54,133,139,139, 11,170, 30,200,209,165, 75, 23, 84, 84, 84,224,214,173, 91, 96, 24, 6, 73, 73, 73, 80,169, 84,232,208,161, -195, 23, 97, 97, 97, 71,195,194,194,242,158, 98,221,107,213, 34,207,187,192,250, 95,213,147,165,169, 50,166, 99,208, 52,109, 22, - 88, 53,197, 79, 77,193, 69, 16, 4, 88,150, 37,234,177, 96,145,122,189,222, 44,174, 84, 42,149, 89,156, 81, 20, 85,171,192,106, - 40,236,237,237,127, 45, 44, 44,220, 0,224, 76, 67,190, 63,126,252,248,191,197,115,124,244,209, 71, 15,115,114,114,232,161,189, -218,136,247,238, 61,145,247,118,232,203,110,254,222, 30,190,114, 39,151,128,242,242,242, 43, 0, 4,182, 24, 68,252,253,253,149, - 91, 15, 70,100,143,153,179,110,185,135,171,130,238,234,227,170,242,118,148,139,156, 36,124,202,158,165, 10,101, 50, 89, 59, 0, -121,182,150,221,206,206, 14,199,143, 31,111,108,247,154,131, 86,171, 69, 65, 65, 1,182,109,219,166,154, 54,109,218,217,188,188, -188,185, 67,135, 14,221,124,244,232, 81,121, 97, 97, 33, 12, 6, 3, 0,104, 27,225,255,100,133,131,131,195, 75,193,193,193,162, - 67, 71,142,136, 88,150, 45, 67,229,114, 68,165, 44,203,206,250,167, 11, 35,145, 72, 62, 88,185,114,165,202,223,223,159,200,205, -205, 5,203,178, 32, 73, 18,206,206,206,152, 63,127,190,100,209,162, 69,238,241,241,241, 31,163, 1,203,206, 0, 32, 30, 37,132, - 0, 64, 38,147,209,176,125,114, 76,173,156, 20, 69, 17, 61,123,246,156,159,155,155,219, 65,171,213,126, 98, 5, 15, 5,224,120, - 90, 90,154,229,205,125,237,206,157, 59, 90, 62,159, 47,109,217,178,101, 80, 92,220,227,133, 44,182,105,211,230, 5,129, 64,128, -203,151, 47,235, 44, 58,247,136,235,215,175,235,134, 13, 27, 38,110,214,172,217, 11,133,133,214,133,164,168,213,234, 54,222,222, -222,191, 57, 59, 59, 75, 77, 75, 86, 57, 57, 57, 9,214,174, 93,171, 76, 75, 75, 3, 69, 81, 88,184,112, 33, 66, 67, 67,225,224, -224,128, 9, 19, 38,184,238,216,177, 99, 63,128,206,117, 89,174,196, 98,241,238,196,196, 68, 95,181, 90, 45,189,116,233, 18, 58, -118,236,136,220,220, 92,100,102,102,162,180,180, 20,153,153,153,152, 52,105,146,203,250,245,235,213,141,232, 63, 84,200,231,243, - 33,151,203,237,139,138,138, 30, 39,142, 77, 12, 64, 4, 0,124, 62,223, 44,174,196, 98, 49,196,226,255,196,188, 32,119,130, 32, -226, 4, 2,129, 88, 46,151, 11, 73,146,132, 92, 46, 31,224,225,225,113, 43, 36, 36,164,253,190,125,251, 82,172, 33,169,168,168, -216, 43,149, 74, 5, 77,154, 52, 1, 0,244,239,223, 31,227,199,143, 71, 78, 78, 14,147,145,145, 1, 95, 95, 95, 50, 34, 34, 2, - 89, 89, 89,184,118,237, 26,186,118,237, 42,112,116,116,220, 11, 96,208, 83,172,219, 35,181,200,243, 44,176,106, 86,206, 12,134, - 97,170,137,171,218, 44, 87,150, 22,172,250,220,121, 4, 65,128,166,105,184,185,185, 65, 38,147, 65, 38,147,153,207,153,196,156, -229,198,178,108,131, 93,132,173, 91,183,238, 35,147,201, 94, 60,123,246,236,171, 0,194,173,253,222,200,121,119,204, 86,171,154, - 8, 8, 8,184,176,112,225,194,129,127,252,241, 71,193, 11, 29, 91, 49,226,140,135,121, 50, 7,231,142, 68, 19,151,144, 25, 83, -166, 94, 4,112,208,134, 34,102, 84, 84, 84,136, 91,184,145,218,140,162, 98,125, 43,149,157,125, 43, 59,133,172,133,179,157,147, -131, 68, 68,202, 93, 93,154, 26,141,198, 66, 0, 25,245, 17, 89,186, 5,197, 98,177,158, 32, 8,190,189,189, 61,236,236,236, 12, - 5, 5, 5, 21,129,129,129, 16,137, 68,185, 66,161,208,106,119, 97,215,174, 93,179,104,154,118,169,235, 51, 66,161, 48,251,210, -165, 75,174, 86,214,119, 81, 64, 64, 64,239, 45, 91,182, 52,241,241,241,193,182,109,219, 84, 71,143, 30,221,189,127,255,126, 20, - 22, 22,226,254,253,251,152, 56,113, 98, 49, 42,221,136,141,205,148,126,110,196,136, 17,216,185,115, 39, 91,245, 16, 33, 39, 8, -162,163,157,157,221,221,219,183,111,255,227,113, 46, 36, 73, 14,240,245,245, 37,138,138,138,192,178, 44,120, 60, 94,181,109,254, -252,249,210, 73,147, 38, 45,238,222,189,251,124,129, 64, 80, 76, 81,212,161,210,210,210, 79,110,221,186,213,168,130, 85, 95,124, -241,197,119, 31, 62,124, 24,234,233,233,249,243, 99,208,176, 20, 69,233, 89,150,149,242,120, 60,193,227,150,137, 32, 8, 94, 85, -127, 84, 97, 97,249,165,170,142,197,176, 97,246,168,163,163,227,254,125,251,246,121,120,120,120,192,104, 52,194,104, 52,162,172, -172, 12, 17, 17, 17,208,233,116,230, 69,217, 63,253,244,211,138,153, 51,103, 74,142, 28, 57,146,173,213,106,199,214, 67, 59,231, -187,239,190, 83,170,213,106,169, 86,171, 69,114,114, 50, 58,119,238,140,146,146, 18,148,149,149,161,188,188, 28, 6,131, 1, 69, - 69, 69,246, 52, 77,235, 27,203,181,230,241,120, 16,139,197, 16, 8, 4,133,205,154, 53, 3, 73,146,146,212,212,212,134,184,220, - 84, 0,138,249,124,190,200, 82, 88, 73, 36, 18,220,188,121,243,112, 29,214,171,218,111, 30,203, 96, 98, 43,142,159, 53, 8,130, -216, 40, 16, 8,196, 78, 78, 78, 66,211,123, 6,131, 65,232,224,224, 0, 79, 79,207,205, 0, 6, 91,201,211,201,201,201, 9, 4, - 65, 64, 40, 20, 98,202,148, 41,136,138,138,250, 33, 45, 45,237,237,236,236,108,148,150,150,238, 85,169, 84,175,103,103,103,131, -166,105,164,164,164, 32, 32, 32,160,211, 63, 84,205,231, 94, 88,213, 20, 88,189,107,236, 77, 22,169,122, 45, 87,245,184, 8,171, -193, 96, 48, 40, 66, 67, 67, 25,147, 24, 51,205, 34, 4, 64,208, 52, 13,161, 80, 88,141,179, 74, 96, 53,232, 6, 23,139,197, 24, - 60,120,176, 68, 38,147,253,248,203, 47,191,188, 10,224,143,134, 54,210,241,163, 7, 92,215, 46, 93,184,212,177,105, 75,239,143, - 63,254,152, 63,104,208,160,240, 67,135, 14,117,117,238,213,103, 96,228,239,135, 93,183, 45, 56,254,243,225,195,135, 75, 96,125, -252, 21, 0,156,255,225,135, 31,212, 31,204,158, 33,236,221,187,247,247,227, 58,188,199, 87,139, 24,165,163, 88,200,147,241,248, -164,184, 89,139,129,191, 71, 68,106, 0, 68, 90,209, 73,168,195,195,195, 97,111,111, 15, 0, 34,189, 94, 15,123,123,123,108,219, -182, 77,162, 82,169,160, 82,169,208,163, 71, 15, 7,161, 80, 88,159,187,208, 82,240,186,252,239,127,255,131, 66,161, 64, 89, 89, - 25,116, 58, 29, 40,138, 2,203,178,230, 39,199,151, 95,126,217,197,134,250, 38, 23, 23, 23,191, 52, 99,198,140,200, 45, 91,182, - 52,241,246,246,198,242,229,203,145,151,151,135, 7, 15, 30, 96,236,216,177,197,247,238,221, 11, 70,245,216,172,103,142,246,237, -219,179,231,206,157,195,169, 83,167,240,202, 43,175, 16,199,143, 31, 55,208, 52, 45,204,200,200,184,145,145,145,241, 76,202, 68, - 81,148, 82, 36, 18,193,104, 52,130,207,231,155, 93,248, 38,129,229,238,238,142,223,126,251,141, 95, 94, 94,206,207,203,203,147, -237,218,181,107,118,116,116,180, 26,192,155,207,178, 45,183,110,221,234, 57,101,202,148, 7,124, 62,159, 29, 56,112,224, 91,169, -169,169,175,169,213,234,223,207,158, 61,251, 57, 0,155,211, 21,180,107,215, 46,154,199,227,121, 24,141, 70,225,143, 63,254,104, -164,105, 90,216,190,125,251, 44,147,181,200, 52, 54, 82, 20,149,150,144,144,208,197, 26, 62,173, 86, 43,252,250,235,175,141, 21, - 21, 21,194, 14, 29, 58,152,185, 12, 6,131,240,167,159,126, 50, 26,141, 70, 97,155, 54,109,162,173,153,217,156,159,159, 63,118, -222,188,121,127, 30, 62,124,216,153,199,227, 33, 53, 53, 21,249,249,249,176,183,183,199,190,125,251,208,162, 69, 11,132,135,135, -231,211, 52, 61,121,231,206,157,139,181, 90,237, 88, 43, 98,176, 94, 14, 10, 10,242, 44, 44, 44,132,157,157, 29, 74, 75, 75, 17, - 29, 29, 13,127,127,127,100,100,100,128, 36, 73,216,219,219, 99,235,214,173,229, 4, 65,228, 55,134,255, 16, 73,146,102, 33,100, - 33,136, 42,130,130,130,112,254,252,249, 3, 54,138, 34,189,169,255,177,116, 13,138,197, 98,240,120, 60,155, 93, 30, 12,195, 8, - 1,116, 50, 13,232,245, 29, 55, 2,244,150,203,229,194,154,111, 22, 20, 20, 8,125,125,125, 95,180, 97,124,116,146, 74,165,149, -132,189,123, 35, 59, 59,155,246,242,242, 26, 61,122,244,104, 35, 0, 76,157, 58,117,116, 78, 78, 78,133,209,104,228,241,249,124, -228,228,228,160, 85,171, 86, 78,255, 68,253,106,106,145,231, 93, 96, 17,168,116,119, 88,238,205, 22,172,250, 44, 87,166,115, 38, -161, 84,207, 31,173,240,234,213,171,114,185, 92,110,126,207,104, 52,162, 83,167, 78, 12,195, 48, 68,205,223,122, 28, 11,150, 88, - 44,134,189,189, 61,222,124,243, 77, 89,122,122,250,238,107,215,174,121, 88,243,189,202, 24,172,234,226,106,251,154,229,155,191, - 92,187,210, 41,233,212,183,216,185,233, 51, 90, 46, 87,196, 4, 4, 4,188, 84, 84, 84,164,179,151,235,144,153,135,163, 0,246, -219,210,231, 0, 56,124,241,226,197,216,254,253,251, 95,188,127,255,190, 67,106, 98,226, 57,149,190,180, 84,209,172, 37, 37,116, -113, 29,170, 53, 24,249, 35, 70,140,112, 5,176,201,138,167, 17, 48, 12,131, 19, 39, 78, 64,169, 84, 66,165, 82,193,222,222, 30, - 38,113,213, 80,220,187,119, 15,105,105,105,144,203,229,144,203,229, 80, 40, 20, 80, 40, 20, 16,137, 68,213,172,143, 54, 32,190, -184,184,120,238,177, 99,199, 14,173, 94,189, 26, 5, 5, 5, 40, 43, 43,195,210,165, 75,145,156,156, 60, 15,149, 49, 89,141, 6, - 29, 58,116, 96, 47, 92,184,128,115,231,206,161,172,172, 12,155, 55,111,134, 90,173,238, 3, 96,201,179, 44, 23,195, 48, 66, 83, -170, 19,146, 36,255,102,193, 50,137, 45,169, 84, 10,103,103,103, 44, 92,184, 80, 56,116,232,208,208,103, 89,230,181,107,215,182, -222,184,113,227,174, 61,123,246,156, 26, 59,118,236,145,155, 55,111, 78,176,179,179,187,241,199, 31,127,172, 20,139,197, 76,131, - 58, 47, 62,223, 35, 54, 54,214, 82,228, 11,104,154,150,209, 52, 13,138,162, 96, 52, 26, 81, 94, 94,142,144,144, 16,171,249,162, -162,162,100, 0,176,100,201, 18, 1, 0, 25,195, 48,176,228,211,106,181,130,190,125,251, 90,213,151,104, 52,154,248,203,151, 47, -191, 56,122,244,232, 11,135, 14, 29,114,240,244,244, 68, 90, 90, 26, 50, 50, 50,224,237,237,141, 77,155, 54,149,177, 44,219,179, - 74, 84,253,100,101,181,155, 58, 56, 56, 8, 30, 60,120, 0,138,162, 16, 24, 24,136,173, 91,183, 98,212,168, 81,104,215,174, 29, - 74, 74, 74, 16, 23, 23,135,221,187,119, 59, 8,133,194,225,141, 65, 92,153, 68, 80,109, 91, 3, 31, 48, 84, 18,137,164, 88, 34, -145,136, 76, 66,235,202,149, 43, 54, 91,175, 44, 16,107,227,241, 51,131,169, 15, 54, 26,171, 87, 83, 46,151,195,199,199,199,106, - 30,185, 92, 78,152,198, 88,163,209, 8,141, 70, 67,223,188,121,211, 44, 80,213,106, 53,125,233,210, 37, 90,167,211,241,148, 74, - 37, 0,192,222,222,254,105,139,204, 71,106,145,231,221,130, 21, 89, 99,111,182, 96,153, 4, 79, 93, 65,238,124, 62,223, 90,129, - 5, 30,143,135,211,167, 79, 67,161, 80, 64,169, 84,194,207,207,207,100,133,169,213, 42,214, 80,129, 37, 18,137, 96,103,103,135, - 51,103,206, 84, 92,187,118,109, 74, 67, 45, 87,219,215, 44,223,252,233, 39,203,156,242,110, 95, 68, 90,134, 6,121, 89,134,232, -243, 55, 83,126, 69,101,130, 81,224,118,219, 8,194,255,142,213,226,202,207, 89, 26,160,114, 80,253, 20,220,111,160,251,107,227, -102,144, 51,103,206,124, 97,252,248,241,249,111,189,245,214, 28,169, 84,218,142,162,168,130,240,136,136,148,145, 35, 71, 58, 21, - 21, 21,141,135, 21, 49, 73, 60, 30, 79,211,191,127,255,102, 0,160, 84, 42,245,223,124,243,141,200,222,222, 30, 99,198,140,169, -200,204,204,148, 84,181, 71,129,181,214,171,170,193, 38,123,242,228,201, 46,245,180,113,182,141, 77,218, 41, 52, 52,116,199,225, -195,135,145,151,151,135,178,178, 50, 8,133, 66,172, 91,183, 14, 15, 30, 60,248, 34, 62, 62,254,102, 99,233,204, 58,118,236,200, - 94,186,116, 9, 55,110,220,128, 78,167,195,148, 41, 83, 0,128,208,104, 52, 0,208,255, 89,123, 10,210,211,211,177,111,223, 62, -208, 52,141,177, 99,199,162, 69,139, 22,102,129,149,153,153,137,111,190,249, 6, 52, 77, 99,242,228,201,104,222,188, 57,140, 70, -163,164,119,239,222,252,103, 53,163,244,189,247,222, 75,250,225,135, 31, 78, 61,124,248,112,208,154, 53,107,122, 19, 4,193,204, -159, 63,255, 83,149, 74,245, 88,179, 47, 11,138, 74,112, 55, 49, 21, 20, 69,213,186, 53,113,118,180,153, 47, 33,249, 1, 40,138, - 54,115,208,244, 95,124, 78,142,182,241,105, 52,154,242,188,188,188,178,201,147, 39,219,239,216,177,131,240,241,241,193,253,251, -247, 33, 16, 8,160, 84, 42,203,239,222,189,107,107,106,134,244,252,252,124, 31, 30,143, 39, 76, 76, 76,132,167,167, 39,186,117, -235,134, 85,171, 86, 33, 39, 39, 7, 20, 69,193,197,197,133, 49, 26,141, 49, 6,131, 33,242, 89,255,143,106, 90,174, 76, 91,149, -229,138, 4,240, 51,254, 30, 56, 94,175, 21,203,210,130,213, 80,235,213, 83, 20,149, 79,109,102,162,143,143, 79,132, 74,165, 10, -189,115,231, 78, 53, 43,214,155,111,190,105,240,246,246,254,211, 90, 30,149, 74, 85, 32, 18,137,156, 42, 42, 42,112,241,226, 69, -248,249,249, 9,139,138,138, 86,163, 50,233, 53,126,250,233,167,213, 89, 89, 89, 66,119,119,119, 0,128,175,175, 47,138,138,138, - 10,254,129,230,251,155, 22,249, 55, 8,172, 90,205,114, 53, 93,132,117,137, 44, 83, 66,210,250, 44, 45, 90,173,214,108, 17,145, -203,229, 96, 24,166,154, 59,178,166,192,170,101, 22,161,213,127,236,179,103,207, 86,108,223,190,125,132, 89, 12, 89, 1,203, 24, -172,175,215,175, 92,107, 18, 87,215,207,253,134,159,238, 20,229,206, 95,181,126, 99, 67, 27,187,173,179,172,163,171,171,211,255, -214,175,251, 84,149,126,249, 20,142,108, 95,207, 94,143,138,234, 58, 61, 42,106,248,244,233,211, 29, 81, 25,111,149, 14,224, 28, - 42,167,155, 91, 21,240,125,249,242,229,230,166,215, 93,187,118, 53,170, 84, 42, 40, 20, 10,228,228,228, 8, 21, 10,133, 36, 34, - 34,194,230, 88,135,168,168, 40,215, 39,124,175,181,121,229,149, 87, 34,191,255,254,123,121, 97, 97, 33, 82, 82, 82,240,225,135, - 31,226,171,175,190,130, 74,165,194,137, 19, 39,148,161,161,161,255,187,123,247,110, 15, 60,227,228,170, 1, 1, 1,108, 84, 84, - 20, 82, 82, 82, 64, 81, 20, 94,123,237,181,122, 31, 30,254, 97, 11, 22, 59,111,222, 60,236,216,177, 3, 36, 73, 98,220,184,113, - 40, 46, 46, 54,159,119,116,116,172,237, 28, 15,245,207, 40,125,122, 29, 13,159,207, 70, 68, 68,172,233,221,187, 55, 30, 62,124, - 56,168,115,231,206, 95, 78,152, 48, 33,253,113,121, 29,236,148, 8,240,247,130, 78,167,131, 78,167, 67,211,166, 77, 81, 82, 82, -130,164,164, 36,232,116, 58,184,186,216,219,204,215,169, 93,107,232,245,122,232,116, 58,184,184,184,160,172,172, 12,247,239,223, -135, 78,167, 67,147, 38, 14,182,208, 53, 27, 48, 96,192,217, 3, 7, 14, 56,237,223,191, 95, 63,108,216, 48,209,242,229,203, 9, -149, 74,133,172,172, 44, 52, 48,188, 39,226,220,185,115,158, 33, 33, 33,190,113,113,113,136,140,140,132, 94,175, 71,167, 78,157, -144,144,144,128, 23, 94,120, 1,197,197,197,151,175, 92,185,210, 40,102,185,212, 20, 86,209,209,209,135,133, 66, 33, 11,160,161, -214, 38, 0, 64, 90, 90,154,184,125,251,246, 58,177, 88, 44,186,112,225,194,129,199,176, 94, 61,249,167,159,199,159,153,248, 72, -180,110,221,122,158,135,135, 71, 72, 96, 96, 32,226,226,226,132, 98,177, 24,111,189,245,150, 97,240,224,193, 6, 62,159,111,245, -132, 27,137, 68,114, 91,169, 84,190,164,211,233,160,215,235, 17, 30, 30, 14, 71, 71,199, 15, 67, 67, 67,231,106, 52, 26,100,100, -100,136,196, 98,177,217, 74, 30, 28, 28,140,252,252,252,219,255, 64,243,213,170, 69,158,119,129, 85,171, 24,178,180, 96,213,229, - 30,180, 86, 96,145, 36, 9,189, 94, 15,153, 76,102, 22, 88,150,153,226, 27,194,249, 72,155,111,108,236,133,228,228,228,207, 1, -156,108,200,247,191,219,191, 71,109,199,148, 55,203,184,124, 18,119,175, 71,227,135,184,194,220,249,171,214,207,126,117,196,152, -172,154,130,204,170, 39,143, 38,178,246,174, 46,149,226, 42,239,246, 69, 36,222,136,198,201,203,105, 87,245, 64, 2,128, 79,158, -228, 69, 53,249,214, 27, 19,196, 98,241, 60,211,108,193,228,228,100,140, 29, 59,182, 48, 37, 37,101,198,107,175,189,246,213,175, -191,254,234,224,224,224,128, 51,103,206, 40,155, 53,107,182, 26,192,179,116,103,177, 87,175, 94, 69, 94, 94,229,228,205,158, 61, -123, 54, 42,113, 5, 0, 87,175, 94, 21,134,134,134,254, 14,160,207,237,219,183,193, 48,204,133,152,152,152,158,166,243,117,157, -179, 70,191,149,148,148, 8,148, 74,101,173,131,149, 80, 40, 20, 54,192,226, 96,230, 60,127,254,252,167,159,127,254,249, 15,239, -191,255,126,226, 99,114,214,106,193, 10, 13, 13, 69,133,206,136,180,172, 34, 80, 20,133,114,125,214, 99, 89,176, 66, 67, 67,161, -173,208,227,129, 38, 31, 20, 69,161,180,194,106, 67,137,172, 95,191,126,191, 30, 58,116,200,237,194,133, 11,208,235,245, 76,116, -116,244, 3,215, 14,207, 0, 0, 32, 0, 73, 68, 65, 84,253,169, 83,167,170, 38, 77,154,228, 84, 89,229, 6, 97,211,155,111,190, - 57,226,252,249,243,249,190,190,190,142, 87,174, 92, 65,118,118, 54,140, 70, 35,250,244,233, 3,177, 88,156,186,122,245,106, 33, -172, 8, 45,248, 39, 5,214,237,219,183, 77,194,106,220,147, 18, 66, 38, 11,214,127, 9, 7, 14, 28, 72,255,230,155,111,252,213, -106,245,198,183,222,122, 43,184,105,211,166,164, 72, 36,138,224,243,249,115, 9,130, 72,181,161,237, 38, 56, 56, 56, 36,241,120, - 60, 94,122,122, 58, 18, 19, 19,193,227,241,192,178,172, 72,171,213,194,213,213, 21, 60, 30,207,100, 29,131,135,135, 7,157,144, -144, 48, 1, 28,158,140,192, 50, 97,197,138, 21,216,190,125, 59,222,121,231,157, 58, 63, 87,149, 22,160,230, 64,212, 30, 22,185, - 50, 76,179, 8,195,194,194,170,125,207,228, 10,156, 49, 99, 70,181, 47,255,248,227,143,181,185, 8,171,113, 62, 10,201,201,201, -182, 40, 96, 51,167, 41, 6,107,228,216,113,154,205,159, 46,189,177,251,248,239, 29, 52, 90, 86, 51,127,213,250,247,106,138, 43, -107, 57,253, 92,229,109,213,206,142, 17,159,175,251,212,206,100, 13, 59, 20,147, 89, 4,138,125,199,198,235, 85,111,221, 5, 2, -129,166, 71,143, 30,205, 0,171,221,130, 86,181,231,227,150, 83,167,211,225,210,165, 75, 0,128,137, 19, 39, 22,166,164,164,188, - 4,224, 86, 74, 74,202,237,129, 3, 7, 70,156, 62,125,218,161,234,137, 62,239, 89,150, 19,168,156,209,202,231,243, 77, 49, 13, -196,147,190, 70, 79,162,156, 26,141,230,157,105,211,166,109,215,233,116,252,178,178,178,119,172, 61, 87, 95, 57,191,251,238,187, - 68, 31, 31,159,222,120,116, 42, 6, 6,192,197,199,225,220,184,113, 35, 0,248, 62, 14,231,163, 44, 88,135, 15, 31, 6, 77,211, -240,112,181,131, 78,167,131,101,188,167, 53,156, 53, 45, 88, 71,142, 28, 1,195, 48,104,174,118,132, 78,167,171, 43,246,176, 26, -167,147,147,211,250, 61,123,246,120,220,190,125, 27,233,233,233,216,176, 97, 67,106, 78, 78,206, 96, 62,159, 47,254,242,203, 47, -255, 55,100,200, 16, 87,138,162,116, 13,184,151,116, 6,131, 97, 66,143, 30, 61,246,174, 92,185,242,158,159,159, 95,179, 30, 61, -122, 56,228,231,231,103,199,198,198,166,108,223,190, 93, 65, 81,212, 4, 60,218,245,244,143,253,143, 0, 32, 35, 35,227, 56, 42, -211,215,216, 42,172,234, 45,103, 84, 84,212,145, 42,238,147, 86,114,255, 35,117,127, 2, 51, 19,235, 44,231,196,137, 19,211,240, -247,252,102, 54,149,243,183,223,126, 75, 25, 61,122,244,138,246,237,219,135, 41, 20, 10,196,199,199,155,211, 34,153, 30,208, 9, -130,192,200,145, 35, 49,125,250,116,156, 57,115,102,197,200,145, 35, 83,254,129,246,252,111, 8, 44,154,166, 31,166,164,164,168, -247,236,217,195, 35, 8, 2,251,246,237, 67,205,192, 90,211, 30, 0, 46, 93,186, 68,177, 44,155, 84,215,143,209, 52,253, 48, 58, - 58,218,245,219,111,191, 21, 72,165, 82,136,197, 98,100,100,100,128, 97, 24, 38, 43, 43,139, 60,112,224, 64,181, 96,221,139, 23, - 47, 82, 6,131,225,193,179,106,156, 63,227, 82,231,158, 62,241,131,243, 11,221, 95, 42, 84, 57, 58,214, 42, 84,190,219,232, 7, -194,191,110, 43,150, 92,169,250,244,243,117,159,218,155,196,213,225,152,204,194, 10, 29, 29,124, 39, 87,123,253, 73,151,249,194, -133, 11,205, 27,233,189,182,180,119,239,222, 12, 0,103, 0,139, 81,105,185, 3,128, 91,247,239,223,239,238,227,227,243, 62, 42, - 23,190, 94,250, 44,173, 87, 12,195, 88, 90, 78, 27,109,144,101, 76, 76,204, 61, 0,125,109, 61, 87, 31, 70,142, 28,153,140,199, - 95,110,230,169,115,154,144, 95, 88,140,164,251,233, 85, 75,121,209,160, 83, 51, 45,226,167,140,200, 47,182, 45,141, 92, 65, 81, - 9,146,238,167,129, 97,216, 74, 62, 58,221, 28,228, 78, 81, 20,114, 11,235,247,218,243,249,252, 94, 97, 97, 97,131, 73,146, 36, - 47, 93,186,164, 91,183,110,221,195,156,156,156,161, 0, 30, 84,197,240,189,252,227,143, 63,238,183, 34, 37,131, 37, 39, 65, 81, -148,105, 96,142, 51, 26,141, 47, 44, 88,176, 96, 14,128, 94, 0,154, 3,120,128,202,208,130, 77,104, 68, 25,199, 9,130, 24,247, - 60,114, 63, 14,158,151,153,137,135, 15, 31, 94, 54,125,250,116,126, 80, 80,208,199, 93,187,118, 37,239,223,191,143,236,236,108, -243,195,229,128, 1, 3,224,233,233,201,156, 60,121,114,213,176, 97,195,150,129,195,147, 19, 88,185,185,185, 3,198,141, 27,247, - 27, 73,146, 45, 31,181,184,179,165,117,137, 97,152,148,172,172,172, 58,147,144,229,230,230, 14, 88,186,116,233,111,124, 62,191, -165,197, 98,206,186,188,188,188, 25, 35, 71,142,220, 34, 16, 8,196,150,214, 46,134, 97, 82, 53, 26,205, 63, 26, 80, 92, 51, 15, -214,192, 33,175,231, 62, 46,167, 92, 4,175,135,151, 78, 32,241,198, 85, 28,142,201, 44, 40,209,211, 47, 39,228,150,255,215,148, -127, 54,128, 25,143, 56,151, 8,224,157, 70, 80, 70,162, 42,230,143,224,186,134,198, 15,138,162,210, 66,250,188,140,154,105, 25, -106, 30,211, 52,157,102, 45, 95,223,224,222,143,228, 49,189,174,143,143,199,227,189, 31, 20, 20,196,123,255,253,247,179, 78,157, - 58,245,123, 65, 65,193,123, 0,202, 45, 44,140,241,168, 59,153,104,109,156,206, 20, 69, 89,174,129,168, 67,229, 10, 15,107,185, - 59,161, 81,226,185,152,153,184,117,235,214, 37,243,231,207,223,221,180,105,211,125,189,122,245,242,245,246,246, 86, 41,149, 74, - 20, 23, 23,151,228,231,231,223, 61,113,226,196,216,241,227,199,223,227, 46,103,227, 68,251,231,141,115, 68, 95,176,108,156, 31, -203,198,249,177, 35,250,130,181,230,184, 62,206, 54,174,242,222,221,154,171,174,118,104,170,188,226,235, 34,247,255, 47,181, 39, -199,201,113,254, 7, 57,155,139, 68,162,159,248,124,126,175, 39,200,233, 44, 18,137,154,112,215,136,227,124,154,156, 35, 70,140, -224,141, 24, 49,130,247, 12,203,249, 72,176, 44,219,149,101,217, 33, 85,123,211,235, 16,211,123,141, 81, 0,241,193,161, 26,142, -254, 14,162,166,203,175,190,227,250, 16,159, 85, 22, 97,235, 19, 43, 7, 14, 28,158, 91, 60,208,235,245, 67,159, 48,103,174, 94, -175,231, 90,150,195,211, 29,255,142, 30,165, 27,113,241,154, 16, 4,241, 11,203,178,161, 0, 96,122,109,249, 94, 99, 3,201,221, - 82, 28, 56,112,224,192,129, 3, 7, 14, 79, 22, 4, 30,109,230,179, 37, 70,168, 33,166,194,155, 28, 39,199,201,113,114,156, 28, - 39,199,201,113,254,231, 56,235,227,254,219,247, 89,150, 29, 82,151, 5,139, 32,136, 19,255, 53, 1,199,249,188, 57, 78,142,147, -227,228, 56, 57, 78,142,147,227,124, 44,176, 44, 59,164,114,199, 14,177,124,109,177,111,116,224, 98,176, 56,112,224,192,129, 3, - 7, 14,141, 29,218,143, 62,250,232, 99,130, 32,126, 1,128,143, 62,250,232,227,198, 94, 96, 78, 96,113,224,192,129,131, 5,212, -106,245, 43, 0,150,161, 50,132, 98,181, 70,163, 57,194,181, 10,135,127, 19,156,157,157,229, 78, 78, 78,191,147, 36,233, 9, 84, - 79,185, 84,219,250,191, 12,195,104,242,243,243,251,103,101,101,229,254,147,156, 53,112, 97,245,234,213,229,171, 87,175, 54, 5, -180,231, 0, 32,170, 92,134, 57,255, 10,129,181,160, 95,139, 23,155,186,187, 31, 40,204,203,139,209,149,151, 76, 90,253, 71, 70, -126, 3,127,219, 73, 36, 18,141,150,203,229, 33, 44,203,122,241,120,188, 59, 69, 69, 69,225, 70,163,241, 16,128, 82,238, 47,192, -225, 89, 35, 32, 32,160,131, 72, 36,250,144, 32,136,238, 20, 69,121, 8, 4,130, 12, 0,151,117, 58,221,186,216,216,216, 24,174, -133,254, 53, 32,213,106,245, 23,246,246,246, 65,133,133,133, 99, 1,124, 28, 31, 31,223,145, 36, 73,248,251,251,127,172, 86,171, -147,148, 74,229,206,146,146,146, 11, 26,141,102, 46, 26,184,172, 15,135,198, 5, 47, 47,175,104,146, 36, 61, 44,151,107,171, 41, - 8,106,238, 89,150,189,119,251,246,237, 30,143,226,116,119,119,247, 82,169, 84, 91, 0,116,173, 77, 84, 88,162, 42,191,218,149, -226,226,226, 25,233,233,233,181, 38,226,117,112,112, 80,186,184,184, 44, 35, 8, 98, 36, 73,146,245,166, 79, 96, 24,134,102, 89, -246,187,236,236,236,165, 5, 5, 5, 37,143, 28,124,157,156,194, 35, 35, 35,187, 58, 59, 59,215,155,243,143,162, 40,164,165,165, - 53, 9, 13, 13,141,204,202,202,242,251, 39, 57, 45, 65, 16,132, 30,149,107, 55, 62, 55,176, 89, 96, 17, 52,222,154, 52,101,156, -123,225,195,120,247, 61,135, 78,183,249,184, 63,255,229, 85,103, 30,100,218,194, 33,145, 72, 70,123,123,123,111,218,180,105,147, - 83,203,150, 45, 9,169, 84, 10,141, 70,227,119,237,218,181,215,195,194,194,150,166,165,165, 77,160, 40,234,183,199,172,155,189, -163,130,255, 97,126, 41,181,144,235, 74, 56,216,130, 17, 35, 70,240, 30, 62,124, 24,166, 82,169, 62, 88,176, 96,129,184, 85,171, - 86, 80, 40, 20,200,206,206,110,158,144,144,208,108,203,150, 45,175,188,240,194, 11, 95, 10,133,194, 69, 17, 17, 17, 20,215, 98, -207, 55,212,106,245, 23,145,145,145,179,154, 54,109,138,158, 61,123, 94,232,212,169,147, 74, 38,147,225,212,169, 83,240,242,242, -106,103,103,103,119,121,219,182,109,130,101,203,150, 5, 28, 59,118, 12, 26,141,102, 54,215,106,255, 2, 85, 77,146, 30, 49, 49, - 49, 46, 50,153, 12, 52, 77, 87,173, 6,192,128,101, 89,243,222, 82, 12,209, 52,141,224,224, 96, 67, 61, 99,219, 87, 55,110,220, - 8, 49,173,112, 98, 33,164,106, 69, 70, 70, 70, 72,112,112,240, 87, 0,106, 77,168,237,226,226,178,108,212,168, 81,243,218,181, -107,103, 94,106,142, 97, 24,243, 62, 55, 55, 23, 51,103,206, 52,255, 6,195, 48,136,140,140,156,243,238,187,239,162,160,160,224, -221, 58,234,238,233,236,236, 76,212,183, 4, 94, 88, 88, 24,194,194,194,176,105,211, 38,130,207,231,219,215,211,158, 79,156,243, -121,135,237, 2, 11,236,201,147, 71,143, 76, 10,237,237, 75,140, 31, 26,232,179,255,120,244,197, 5,125, 91,190,180,230,247,251, - 15,173, 20, 87,115,166, 77,155,246,233,242,229,203, 37,119,239,222, 69, 92, 92, 28, 40,138,130, 66,161, 64,135, 14, 29,200,147, - 39, 79,170,231,204,153,115,244,207, 63,255,156,104, 48, 24,142, 53,180, 98,110, 14,188,117,114, 41,111, 76,169,150,189,108,160, -233,227,141,177,241,187,117,235,118,198,104, 52,174,137,141,141, 61,251,188,220, 48,129,129,129, 61,133, 66,225, 82,145, 72, 52, -240,223, 42, 46, 82, 83, 83,151,190,248,226,139, 31,132,133,133,137,239,223,191,143,248,248,120,104, 52, 26,180,108,217, 18, 45, - 91,182, 36, 54,109,218, 36,249,242,203, 47,103, 95,187,118,141, 4, 48,223,150, 62,221,205,205,109,114,223,190,125,135, 59, 59, - 59,219,165,167,167, 23,157, 63,127,254, 39,141, 70,243, 53,234, 95, 51,242,145,156,206,206,206,227, 67, 67, 67,135, 59, 58, 58, - 58,106, 52,154,252,223,127,255,253,167,236,236,236,157,143,105,105, 81, 3,232, 8,192,169,234, 88,211,162, 69,139, 91, 41, 41, - 41,217, 79,144, 51,163, 69,139, 22,113, 13,225,116,118,118,150,243,249,252, 35, 4, 65, 52,173,195, 66,144, 65, 81,212,168,220, -220,220,178,186,184, 84, 42, 85,119,181, 90,141,203,151, 47, 99,241,226,197,142,193,193,193, 72, 72, 72, 0, 73,146,248,224,131, - 15, 8,127,127,127, 65,102,102, 38,186,116,233,130,240,240,240, 30, 85,203,221,112,176, 14,223, 1,176, 7,240, 38, 0, 75, 87, -144, 51,128, 31, 81,185,194,195,176,103, 85, 56,169, 84,138,131, 7, 15, 66, 32, 16, 64, 40, 20,162,160,160, 0,238,238,238, 16, - 10,133, 16, 8, 4,230, 77, 40, 20,162, 89,179,102,245,242, 49, 12,211,141,199,227,161,180,180, 20, 52, 77,155,151, 89, 42, 42, - 42, 2,203,178, 16,137, 68,230,247, 77,231, 24,134,233, 86,135,213,102,100,211,166, 77,113,232,208, 33,212,150, 7, 77,165, 82, -225,230,205,191, 38,220,241,120, 60, 4, 4, 4,144, 4, 65,140, 4,240,110, 29,188, 44, 0, 76,153, 50,165,218,242,116, 53, 55, -211,218,193, 44,203, 90, 46, 33,246,143,113,254,171, 5,214, 71,125, 90,206,104, 23, 24,176, 78, 36, 18, 72, 25,218, 8,134, 50, -130, 49,234,193, 48, 20,238,165,106,224,229, 34,194,196, 65,222,158,123,207, 36,220, 92,216,175,117,208,234,223, 18,227,107, 80, -212,156,106,217,162, 93,187,118,203, 86,174, 92, 41,249,253,247,223,113,247,238, 93,172, 90,181, 10, 0, 32,151,203,113,234,212, - 41,208, 52,141,245,235,215, 43, 7, 14, 28,184, 37, 35, 35, 35, 2, 64,126, 61,156,181,193,179,117, 43,245,208, 99,159,189, 36, -110,247,250,209,141,153,249,244, 9, 0,117, 37, 80,123, 26,203,214,212,203, 73, 81, 84, 63,129, 64,208,163, 83,167, 78,175, 88, - 41,178,158, 73, 57, 45,197,149, 64, 32, 56,109, 48, 24,100, 34,145,136, 95,135, 40,120,166,229,124, 28,206,128,128,128, 14, 42, -149,234,131,165, 75,151,138, 47, 93,186,132,130,130, 2,100,103,103, 99,238,220,185,216,186,117, 43,218,181,107, 7,185, 92,142, -217,179,103, 75,102,206,156, 57,163, 75,151, 46,223, 69, 71, 71, 71, 91, 81, 78,178,119,239,222, 7,247,237,219,215,146,162, 40, - 18, 0,140, 70,163, 67,106,106,234,184,133, 11, 23,246,142,137,137,121,179, 1,237, 73,246,232,209, 99,223,254,253,251,189, 69, - 34, 17, 89,213, 89, 55,121,251,237,183, 39, 45, 90,180, 40,248,234,213,171, 99,234,184,239,235,106,207, 78, 50,153,172,237,140, - 25, 51,114,135, 14, 29,154, 14, 0, 87,175, 94, 37, 98, 99, 99,123,142, 27, 55, 46, 37, 44, 44, 44,182, 1,156,157,101, 50,153, -239,172, 89,179,114, 6, 15, 30,156, 33, 20, 10,153, 75,151, 46,241,110,222,188,217,107,242,228,201,201,139, 22, 45,186,110, 11, -167, 64, 32, 56,124,236,216,177,222,238,238,238, 52, 80,185,154, 2, 65, 16, 44, 65, 16, 44, 73,146, 44, 73,146, 72, 78, 78,110, - 49, 98,196,136, 3, 0, 94,173,139,179,176,176,112, 92,175, 94,189, 34, 23, 47, 94,236, 8, 0,145,145,145,224,243,249,230, 1, -225,238,221,187,208,233,116,216,180,105,147,161,164,164,100,242,191,237,158,127,202,156,205, 0,116, 3,240, 7,128, 62, 85, 34, -203, 25,192, 89, 0,254, 0,206, 63,171,114,146, 36, 9,154,166,205, 34,234,183,223,126,195,214,173, 91,113,232,208, 33,184,187, -187, 87, 19, 88, 2,129, 0,143,112,249,221,172, 33, 50, 76,125, 59,104,154, 70, 84, 84, 20,118,238,220, 9, 23, 23, 23, 56, 59, - 57,193,185, 73, 19, 4, 5, 5,193,100, 53,163,105,186, 54,222,106,156,185,185,185, 96, 24,235,158,149, 88,150, 69,113,113,177, -213,237, 89,151, 16,178,220,108,185, 70,143,201,249,223, 17, 88,106, 55,231, 69, 35,134,247,147,130,166, 0, 67, 25, 96, 40, 7, -107, 40, 7,171, 47, 3, 33,146,130, 53, 86, 64,206,203,195, 59,125, 93, 85, 71, 47,102,221, 94, 16,220,124,200,154,179, 15, 78, -215,241,164,184,100,251,246,237,118, 55,110,220, 64,124,124, 60, 54,108,216,128,229,203,151,155,159, 28, 94,125,245, 85, 92,184, -112, 1,122,189, 30,139, 23, 47,118, 92,176, 96,193,172,146,146, 18,155, 23,153,116,115,226,111, 61,178,119,147,163,163, 52, 23, - 19,135, 94,113,250,234, 72,202,140,162, 50,227,151,141,241, 2, 44, 88,176, 64,182,118,237,218,159,109, 16, 89,207,204,114, 37, - 22,139, 79, 47, 89,178, 68,190,100,201, 18,250, 9,113,182,227,243,249,135,141, 70,227,251,177,177,177,191, 54,128,162,121,215, -174, 93, 87,197,199,199,159, 46, 41, 41,217, 95,243,164, 80, 40,124,181,115,231,206, 99, 47, 94,188,248, 49,128, 36,107, 8,197, - 98,241,156, 15, 62,248, 64,146,150,150,134,194,194, 66,136,197,226,106,157,155, 88, 44, 6, 73,146, 16,137, 68,120,251,237,183, - 37,187,118,237,122, 15,192, 27,245,222,147,110,110,147,247,238,221,219,210, 96, 48,144,101,101,101, 16, 10,133, 16, 10,133,232, -208,161, 3,111,254,252,249,205,230,205,155, 55, 45, 43, 43,107,179, 45,149,119,112,112, 24,183,111,223, 62,111,145, 72, 68,106, - 52, 26,244,236,217, 19,151, 47, 95, 70, 80, 80, 16,111,254,252,249,205,103,207,158, 61, 53, 39, 39,103,171,173, 86, 38,153, 76, -214, 46, 50, 50,242, 97,211,166,127, 25,135, 90,182,108,201, 14, 26, 52, 40, 63, 62, 62,222,247,234,213,171,121,157, 59,119,126, -104, 3,167,187, 76, 38,243,251,245,215, 95, 53,203,151, 47,239,187,117,235,214,161, 85, 22,220,227,171, 86,173,250, 61, 47, 47, -207,255,242,229,203,121, 65, 65, 65,233, 54,112, 58,185,185,185, 81, 51,102,204, 80,214, 60,177,116,233, 82, 44, 91,182, 12,187, -119,239,206, 3,224, 82,103,101,171, 2,218,219,181,107,167,234,211,167, 15, 34, 35, 35, 49,123,246,108,157,209,104, 76, 0,128, -144,144,144, 54, 97, 97, 97,162,152,152, 24, 56, 56, 56, 8, 52, 26,205, 55,106,181,154, 11,124,183, 30, 67, 1,252, 15, 64,187, - 42,145, 53, 10,192, 81, 0,109, 1,196, 3, 24,241, 44, 11,103, 18, 88,233,233,233,216,181,107, 23, 86,173, 90, 5, 31, 31, 31, - 24, 12, 6,240,249,124,179,184,226,243,249, 32, 8, 2, 44,203, 18,214,242, 94,185,114, 5,123,247,238,197,226, 69,139,160, 84, - 86,222,166, 6,131, 1,249, 5, 5,144, 72, 36,102, 17, 86,143, 96,250, 46, 49, 49,113,158,187,187,187,217, 77,105,233, 34, 4, - 0,133, 66, 1,134, 97, 64, 81, 20,116, 58, 29,118,236,216, 65,177, 44,251, 93, 61,214, 38,179, 24,122,247,221,119,161,211,253, -181, 62,120,199,142, 29, 43,173, 33, 45, 90, 32, 32, 32,192,124,108,178, 80, 89,195,185,179,103, 7,104, 45, 62,237, 27,246, 25, - 0,192,195,195, 3,190,190,190, 80,171,213, 86,113,254, 91, 4,150,105,129,219,106, 11,221,102,102,102,175,217,189,237,155,207, - 68, 2, 82, 16,210,195, 23, 14, 98, 10,132,204, 17,194,222, 31,129,176,247,172,252, 98,126, 50,244,191,126,132, 81, 1,185,228, - 94, 29,239,199,176,129, 94, 77,194, 78, 39,215, 26, 92, 71,146,100,247,230,205,155, 35, 50, 50, 18, 45, 91,182,196,146, 37, 75, -224,231,231, 7,153, 76,134,172,172, 44,148,149,149, 65, 46,151,131,166,105, 4, 6, 6,242,148, 74,101,112, 3, 4, 86,224,224, - 62,157,187,241, 85,126,232, 57,240, 5,156,217,210, 91,190,251,151,140,133, 69,101,198,111, 96,177,224,106, 99,193,107,175,189, -134,172,172, 44,217,190,125,251, 26, 44,178,186,117,235,118,134,162,168,126, 86,152,195,207,158, 59,119,174, 79, 67,197,213,174, - 93,187,228,246,246,246,168, 47,120,211, 6,113,117,110,220,184,113,170,125,251,246,253,208,169, 83,167,215,109, 20, 89,205, 71, -141, 26,117, 98,231,206,157,126, 67,134, 12, 81, 68, 70, 70,254, 77, 96,181,107,215,238,181, 51,103,206,188, 62,125,250,244,118, -251,247,239,127, 5,149,139, 74,215,103,230,238,209,170, 85, 43, 60,120,240, 0, 89, 89, 89,208,233,116,200,202,202, 2, 0,164, -165,165,193,195,195, 3, 14, 14, 14,240,240,240, 64,155, 54,109, 8,146, 36,131,172, 41,108,112,112,240, 80, 0,100,114,114, 50, -114,114,114, 96,103,103, 7,185, 92, 14,119,119,119,244,233,211,135,239,237,237, 61,216, 86,129, 53,104,208,160,225, 50,153,140, - 76, 77, 77, 69, 74, 74, 10,116, 58, 29, 18, 18, 18, 96,103,103,135,144,144, 16,129,183,183,119,104, 3, 4, 86,251,169, 83,167, -102, 91,138, 43, 19,228,114, 57,225,235,235,155,111,111,111,223, 5,128, 45, 2,171,253,236,217,179,179, 86,175, 94,253, 82,120, -120,248, 2,211,155,225,225,225, 31, 2,192,230,205,155, 35, 29, 29, 29,187, 0,176, 69, 96,129,101, 89,102,210,164, 73,137, 34, -145, 8,166,205, 36, 92, 63,251,236, 51,144, 36,105,103, 5,205,199,241,241,241, 29, 21, 10, 5,226,227,227,193,227,241, 64, 16, - 68,162, 70,163,233, 8, 0, 46, 46, 46, 73, 21, 21, 21, 94, 21, 21, 21, 24, 49, 98, 4, 49,100,200,144, 14, 27, 54,108, 88, 4, -160,177, 8,172,174, 0,214, 3,208, 3, 88, 4,224,114, 35,235,226,178, 0,188,108, 33,178, 98, 1,136,171,196,213,203, 85,231, -159, 9, 8,130, 0,195, 48,224,243,249,248,236,179,207, 96, 48, 24,176,127,255,126, 28, 61,122, 20, 36, 73,130, 32, 8, 16, 4, - 1,149, 74,133, 47,190,248,194,124,108, 13, 40,138,194,183,223,126,139,143, 22, 44, 48,139,171,170,135, 62,184,185,186,194,201, -217, 25,201,201,201,245, 10,172,236,236,236,165, 81, 81, 81,168, 43,200,125,216,176,191, 60,172,150, 65,238,214,148,147,199,227, - 65,167,211,161, 95,191,191,134,143, 89,179,102,153, 95, 23, 20, 20,152,254, 19, 32,172,172, 60,143,199,131,150, 5, 94,147,252, -245,222,224,247,223,175,102,145,171,131,179, 86, 45,242,175,180, 96,137,122,165,110,190,127,129, 12, 24, 25,250,194,120, 71,149, - 20, 76, 73, 6,132,125,195,112, 35, 95,134,141,219, 42,199,194,121, 35, 2,209,190,223, 74,232,190,233,143, 62, 45,244,162,111, - 98,164,243, 1, 44,169,141,207,217,217,217,153,162, 40,144, 36, 9,185, 92, 14, 71, 71, 71, 72,165, 82,228,230,230, 98,206,156, - 57, 56,125,250, 52,244,122, 61,132, 66, 33, 90,181,106, 5,131,193,224,101,179,245,202,129,191,115,195,103,171,236,243,146, 15, -224,234,221, 66,200,236, 60,176,104,106, 23,135,176, 45,209, 75,115, 10,202, 63,108,140, 23,193,223,223, 31,115,231,206,149,125, -249,229,151, 13, 18, 89, 20, 69,173,224,243,249, 61,223,127,255,125,233,136, 17,127,127, 32,140,139,139,195,180,105,211,180,229, -229,229,159, 52, 68, 92,137, 68,162,211, 59,119,238,148,219,217,217,225,193,131, 7, 79, 76, 92,109,218,180, 73,229,229,229, 5, -129, 64, 32,249,246,219,111,109, 17, 89,109,134, 13, 27,118,114,231,206,157,158, 83,167, 78, 77,139,140,140, 76, 65,229,180,250, -106,136,137,137, 41, 24, 63,126,124,234,238,221,187,189, 25,134,249,245,224,193,131,161, 0,110,215,211,150,205,101, 50, 25,114, -115,115, 49,111,222,188,106, 1,170, 38,119, 54, 0,196,199,199,195,195,195, 3, 21, 21, 21,238,214,212,217,209,209,209,129,101, - 89, 76,153, 50, 5, 15, 31,254,165, 77,220,221,221,241,240,225, 67, 80, 20,229,104,107, 59, 58, 56, 56, 56, 26,141, 70,244,238, -221, 27, 21, 21, 21, 0,128, 81,163, 70, 65, 32, 16, 32, 59, 59, 27, 6,131,193,169, 1,151,199,121,200,144, 33, 25,143, 58, 41, -151,203,141, 14, 14, 14, 45,108,228,116, 10, 13, 13, 77,223,190,125,123, 77, 87, 29,162,162,162, 94,181,179,179, 11,119,116,116, -244,109, 64, 89, 25,177, 88, 12,177, 88, 12,129, 64, 0,145, 72, 4,177, 88, 12,145, 72, 4,129, 64, 0, 30,143,103,149, 95,133, - 97, 24,156, 56,113, 2, 36, 73, 86,115, 93, 44, 94,188,248, 29,153, 76,230, 26, 17, 17, 97,126, 0, 44, 45, 45, 69,235,214,173, - 91,181,106,213,234, 90,102,102,102,202,237,219,183, 95,127,198,221,199, 58, 0,166, 89,109, 91, 1, 4, 52,194, 46, 46, 11,192, - 72, 0,209, 85,226, 74, 15, 96,248,179, 20, 87,150,215,158,207,231,155,255,231, 18,137, 4,129,129,129,102, 49, 69, 16, 4,202, -203,203,205, 46, 66,107, 45, 88, 69, 69, 69, 80,171,213, 80, 42,149,104,237,227,131,196,132, 4, 0, 48,191, 22,137, 68,102, 33, - 86, 23, 10, 10, 10, 74,170,130,213,223,125,194,226,146, 5, 0, 62,191,238, 48,108,181, 90, 13,134, 97, 76,194,146,125, 18,156, -206,206,206, 40, 45, 45,181,138,243,223, 34,176,254,166, 24,195,194, 64,234, 46,180,220, 53,114,112,183,241,109, 61,228,208,229, - 38, 67,164,112, 2, 97,223, 2, 27,183,253,138,219, 41,149,161, 81, 27,143,198, 96,247,194, 1, 32,100,142, 80,107,239, 66, 41, - 17,191,254, 40,129,149,151,151, 87,106, 48, 24, 28,165, 82, 41,248,124, 62,132, 66, 33,114,115,115,241,127,255,247,127, 56,114, -228, 8, 90,180,104, 1,138,162, 32, 18,137,144,147,147, 3,161, 80,104,211,236, 68, 30, 15, 67,102,140,239,215, 82,238,228,131, -188,152,229,149,111,170, 2, 49,117, 20, 79,244,249,222, 91,227,114, 10,202, 63, 71,101, 80,101,163,130, 66,161, 64, 64, 64, 0, -198,140, 25, 35,219,191,127,255, 30, 0, 30,182,124, 63, 38, 38,230,124, 96, 96, 96,255,245,235,215,159,209,104, 52,210, 78,157, - 58, 65,161, 80, 64,161, 80, 32, 57, 57, 25,203,151, 47,175,208,233,116,161, 13,177,142,241,249,252,111, 39, 77,154, 36, 87,169, - 84, 72, 78, 78,134,163,163,227, 99,213, 53, 48, 48,176,157, 64, 32, 56,183,105,211, 38,149,183,183, 55,238,220,185,131,206,157, - 59,195,205,205, 77,178,122,245,106,107, 69,214, 87, 7, 14, 28,104, 33, 18,137,136,131, 7, 15, 54, 63,120,240,224,156,250,126, -119,239,222,189, 45, 14, 30, 60,184, 9, 64, 8,234, 8,254, 22, 10,133,105, 57, 57, 57,222,205,154, 53,195,174, 93,187, 64,146, - 36, 50, 50, 50,176,104,209, 34,172, 94,189, 26, 65, 65, 65, 80, 42,149,104,214,172, 25, 18, 19, 19, 33,145, 72,172,138,120, 78, - 79, 79,207, 7,224,114,250,244,105,228,228,252,149,178,197,211,211, 19,249,249,249,208,233,116,121,182,182,101,122,122,122, 30, - 0,215,107,215,174, 33, 37, 37, 5, 3, 7, 14,196,143, 63,254,136, 46, 93,186,128,166,105, 24,141,198,188, 6, 92, 34,154,199, -227,177,117,116,162, 4, 0, 7, 27, 57,169,186, 56,171,250, 29, 91, 57,193,178, 44,251, 40,113, 37, 18,137, 80,207,111,154,117, -179,159,159,223,178, 86,173, 90,181, 93,180,104,145,128,207,231,163, 87,175, 94,109,134, 15, 31,158, 74,146,164,211, 71, 31,125, - 36,171,205, 24, 12,160, 99,219,182,109,229,141,160,251,176,180,210, 53,214, 73, 39, 46, 85, 22, 63, 17, 0, 67,213,254, 16,254, -138,201,122,166, 22, 44,161, 80,136,176,176, 48, 76,159, 62, 29,174,174,174, 88,176, 96, 1,248,124,190,121, 51, 89,101, 76, 86, - 45, 43,239, 77,184,186,184,212,253, 71,171, 10,114,175,231, 33,234,169,164,105, 48,137, 33,107, 98,161, 44,172, 77, 86,137,182, -199,228,252,215, 88,175, 44, 5, 86, 53,179,156, 89, 92, 13,236, 60,222,207, 67,138,216,152,155,104,239,102, 4, 43, 16,212,113, -183, 24, 65, 8,229,176,151,242, 61,234,184, 0, 49, 41, 41, 41,158,246,246,246, 48, 24, 12, 16,137, 68,104,223,190, 61, 46, 94, -188, 8,157, 78, 7,189, 94, 15,177, 88, 12,161, 80,136, 91,183,110,193, 96, 48, 68,218,162,175,156, 85,188, 77, 31,126,188, 92, -137,244, 93,176, 87,138, 16,220,221, 27,144,183, 5,175,236, 46,214, 47, 14,117,124,103,209,143, 27,179,114,139,223,104,108, 23, - 65,161, 80, 32, 53, 53, 21, 7, 15, 30, 44,215,233,116,227, 26,194, 97, 18, 89, 71,142, 28, 57, 99,111,111, 47, 13, 10, 10, 66, - 66, 66, 2, 62,249,228,147, 10,157, 78, 55,164,161,241, 93, 20, 69, 77,216,177, 99,199,105,138,162,228, 38,113,241,184,150,171, - 57,115,230, 40, 91,183,110,141,164,164, 36,216,217,217, 65,169, 84,162,101,203,150, 80,171,213,146, 57,115,230, 88, 35,178,102, -142, 25, 51,230,228,238,221,187, 61,167, 78,157,154,118,232,208,161,227, 0,138,106,107,218, 97,195,134,189,186,123,247,110,207, -119,222,121,231, 1,128, 57,168,103,102, 29,195, 48, 23,146,146,146,188,252,252,252,136, 54,109,218, 64, 36, 18,193,221,189,210, - 72,213,177, 99, 71,248,249,249, 65, 40, 20, 2, 0,146,146,146, 0, 43,243,178,252,249,231,159, 63,197,199,199, 79,238,210,165, - 11,207,205,205,173,218,236,164,213,171, 87, 27, 82, 83, 83,109, 94, 71,235,143, 63,254,248,241,230,205,155, 83,122,245,234,197, -119,112,112,128, 88, 44, 70,251,246,237,161, 86,171,241,201, 39,159, 24,238,223,191,223,144,181,185, 30, 92,187,118, 77,226,227, -227, 67, 63,226, 94, 85, 54,192,242,144,118,245,234, 85, 97,247,238,221,143,159, 58,117,170,157,229,137,110,221,186, 29, 87, 40, - 20,118, 0, 26, 50, 53,143,177,116, 13, 90,186, 10, 69, 34, 17,248,124,126,189, 22, 44,141, 70,243,179,171,171,235, 61, 87, 87, -215,243, 61,122,244,176,139,142,142,198,146, 37, 75,132, 58,157,174,121,120,120,184,121, 32,174,109, 0, 45, 43, 43,147, 52,130, -238, 99, 30,128, 13, 0,100, 0, 22, 52,194, 49,198, 21,149, 1,237,190,168,116, 11,142,170, 18, 91,166,152,172,103, 42,178, 24, -134,129, 64, 32,128,175,175, 47,222,125,247, 93,172, 89,179, 6, 51,102,204, 64,235,214,173,205,215,222, 20,131, 85, 53,227,205, -170,129, 95, 40, 20,194,213,205, 13, 70,163,209,108,189, 2,128,196,132, 4,240,249,124, 48, 12, 3,157, 78, 87,175,139,208,197, -197,101,217,218,181,107,231, 12, 26, 52,136,180,156,113,199,178,172, 57,157,132,229,102, 52, 26,241,243,207, 63,207, 89,189,122, -117,157,105, 26, 44,133, 78,199,142, 29,171,185, 5, 55,111,222,108,217,103, 35, 36, 36,196,166,217,126, 60, 30, 15,190, 97,159, - 85,115, 11,158,108,242, 87,179, 53,123,123, 42, 90,127,178,233, 81,156,255, 42, 23, 97,173, 53, 52, 92,244, 92, 57, 98, 64,192, -120, 63,119, 49,174,197,220,194, 47, 81,154,187,185,185,133, 96,178,110,130,201,185,131,121, 35, 2,209,182,133, 35,218,182,112, -196,188, 17,129, 96,178,111,129, 45, 72, 6, 43,113, 64,118, 25,241, 72,247, 66,126,126,254,186, 21, 43, 86, 20, 56, 56, 56, 64, - 34,145, 64, 36, 18, 33, 45, 45, 13,254,254,254,230,227,170, 39, 79, 44, 89,178, 36, 39, 39, 39,103,155,181, 21,145, 75,201,169, -107, 22,189,225, 42, 20, 43,129,252, 72,168, 84, 10,236,218,246, 25,160,203, 0, 72, 17, 94, 9, 9,224,169, 93,237,251, 0,104, -211,216, 46,194,131, 7, 15, 16, 22, 22, 86,174,213,106, 31, 43,208, 61, 38, 38,230,188,193, 96,232,191,109,219, 54,237, 47,191, -252,242,216,226,202,196,105, 52, 26, 7,238,217,179,167,236,193,131, 7, 80, 40, 20, 13,174,167, 80, 40,252,136,162, 40,213,134, - 13, 27,152,126,253,250,209, 51,103,206,164, 39, 76,152, 64, 15, 27, 54,140, 14, 9, 9,161,167, 77,155, 70,235,116, 58,177, 76, - 38, 91, 91, 15, 85,252,177, 99,199,130, 39, 79,158,124,231,235,175,191,246,120,233,165,151, 90, 0, 88, 90,115, 11, 12, 12,116, -216,189,123,183,231,244,233,211,147, 14, 30, 60, 56, 0,245,184, 7, 1, 64,167,211,109,222,186,117,107, 5, 73,146, 80, 40, 20, - 16,137, 68,104,210,164,137, 89, 8,155, 6,114,131,193,128, 45, 91,182,104,181, 90,237, 70,107,234,158,151,151,183,107,254,252, -249,247,207,156, 57, 99, 52,205,242,201,200,200,192, 39,159,124, 98,216,182,109, 91,122, 97, 97,225,215,182,182,103,113,113,241, -183, 31,126,248, 97,202,137, 19, 39,140, 36, 73,162,160,160, 0,246,246,246,248,228,147, 79, 12, 95,127,253,117,122, 73, 73,137, -205,156, 47,188,240, 66, 82,122,122,186, 82,167,211,253,205,250, 35, 16, 8, 8,137, 68, 98,154, 17,102, 53,186,116,233,146,148, -146,146,162, 90,185,114,101, 68, 72, 72,200, 26,165, 82,153,160, 84, 42, 19, 66, 66, 66,214,110,217,178,229,108, 21,103,184,205, -157, 23, 73,154, 5,150,201, 85,104,178, 98, 85, 89,178,172,114, 17,250,249,249, 29,216,187,119,175, 93, 66, 66, 2,138,139,139, - 17, 27, 27,139,152,152, 24,179, 43,215, 52,152, 89,110, 0, 80, 94, 94, 46,109, 4,221,199,255, 80,153,250,194,187, 74,200, 52, - 54, 28,181, 16, 87, 47,163,114,230,217,203, 85,199,237, 0,252,244, 44, 45, 88, 44,203,154, 31,118,222,120,227, 13,132,135,135, -163,117,235,214,102, 81,101, 57,139,208, 22,145, 65,211, 52,218,183,111, 15,157, 94, 95, 77,160,243,249,124, 52,105,210, 4, 73, - 73, 73,160, 40,170, 94, 11, 22, 65, 16, 35, 7, 13, 26, 68,198,197,197,193,207,207, 15, 49, 49, 49,136,137,137, 65,108,108, 44, -174, 93,187,134, 27, 55,110,224,214,173, 91,184,125,251, 54, 58,119,238,140,212,212, 84, 12, 24, 48,192,148,166,161, 78, 35,155, - 45,214, 38, 43,173,119, 79,131,243, 95, 97,193, 34, 44,247,174, 14,242, 9,109,213,124, 92,187,118, 27,199,175,230,239, 38, 8, -242, 88,204,125,221, 47, 3, 90,149,192,112,228, 77,180, 31,185, 15,187, 23, 14,168,124, 2,200,190, 5,195,119,111,129,144, 57, - 35,177, 88, 14,173,190,176,174,167,230,168,232,232,232,195,123,247,238,157, 52,126,252,120, 17,195, 48,144, 74,165,120,239,189, -247,204, 57, 66,120, 60, 30,102,204,152, 81,154,157,157,189, 1, 86,206,252, 2, 32,181,147, 11, 22,143,157,178, 68,130,135,219, - 1, 82,136, 92,116, 66,199,151, 38, 33, 59,229, 34, 80,118, 27, 32,132,216,246,233,100,231, 87, 39,124,254,117,102, 78,225,139, -141,229, 2,220,185,115, 7, 75,151, 46,125,108,113, 85,211,146,117,252,248,241, 61, 58,157,110,202, 19,228, 28,184,102,205,154, -211, 46, 46, 46, 13,118,139,184,187,187,191,157,155,155, 59,201, 26,195,153, 53,186,244,200,145, 35, 67, 82, 82, 82, 86,197,199, -199,215, 58,115,245,214,173, 91, 63,246,239,223, 95,102,203, 44,194,216,216,216,152,160,160,160,173, 27, 54,108,152, 49,119,238, - 92,137, 84, 42,133, 74,165, 66,124,124, 60,154, 55,111, 14, 0,208,106,181, 88,184,112,161,214,104, 52,238,142,142,142,190,104, -237,195,242,205,155, 55,199, 78,155, 54,109,114,155, 54,109, 94,101, 24,198, 73,175,215,231,165,166,166,158,168, 18, 66, 13,113, -239, 48,113,113,113, 99,166, 79,159, 62,222,199,199,103,184,193, 96,112,162, 40, 42,239,225,195,135,199,139,139,139,119, 53,132, -243,226,197,139, 57, 19, 38, 76, 72,206,204,204,244, 87,171,213, 69,118,118,118,122,189, 94,207, 83, 40, 20, 74,145, 72,212, 25, -192, 69,130, 32,110,219,194, 25, 29, 29,157, 53,113,226,196, 20,157, 78,215,102,199,142, 29,145,114,185,252,119,130, 32, 8,161, - 80,232, 32,151,203,131, 1, 68, 16, 4,145,104,107, 89, 73,146,100, 44, 5,149,165, 21, 75, 40, 20,130, 32, 8,171, 4, 86, 82, - 82,210,249, 21, 43, 86,116,104,213,170, 21,182,109,219,150,175, 80, 40,148,195,135, 15,231, 23, 21, 21, 17,117, 89,176,180, 90, -173, 4, 28,234,125,182,168,178,242, 14,181,176,124,154, 2,223,143, 2, 40,124,150,133, 99, 89,182,154,144,106,222,188,121, 53, - 81,101,121,206, 22,129, 69, 81, 20,132, 66, 33,248,124, 62,220,212,106,179,152, 99, 89, 22, 9,137,137, 40, 40, 40, 48,167,105, -168,231, 30,231, 17, 4,129,209,163, 71, 91,245,187,111,188,241, 6, 34, 34, 34, 80,159, 59,209,114,198, 95,139, 22, 45,234, 21, - 67, 85,101,177,122, 22,161,135,135, 71, 67, 57,137, 26,251,127,133,192,170,134,140,252,242,149, 59,127,136, 93,152, 81, 76, 29, - 19,247, 72,125, 55, 44, 12,236,194,190, 45,206,120,200, 69,253,219,146,233,208,125,221, 11,132,170,114,176, 97, 75, 51, 64,200, -221, 80, 32,104,142,159, 99, 50, 51, 73, 1,175, 78,235, 67, 97, 97,225,188, 47,190,248,130,119,250,244,233,145,171, 86,173,178, -247,245,245,197,216,177, 99,161,215,235,113,227,198, 13, 76,155, 54, 45, 63, 39, 39,103,123, 97, 97,225, 26,107, 43,225,172,226, -255,223,198,143,251, 59,145, 76, 41, 80,124, 21,224,219,193,217, 81,137,235,209,145, 64, 81, 52, 64, 10, 1, 82,132, 46,157,252, -208,177,157,183, 95,230, 31, 87,122, 1, 56,215, 24, 46,192, 59,239,188,243,196,196,149,165, 32, 2,208,234, 73,150,211, 36,178, -222,127,255,253,211, 12,195,200, 26,244, 40,123,244, 40,141,186,243,145,217,108,252,187,114,229,202,152, 71,157, 52, 24, 12,199, - 47, 94,188,104,115,146, 89,163,209,184, 48, 46, 46, 14,179,102,205,154,254,214, 91,111, 73,125,125,125,225,233,233,137,132,132, - 4,196,199,199, 99,235,214,173, 21, 12,195,236, 42, 44, 44,252,192, 70,106,186,184,184,120,123, 84, 84,212,246, 39,216, 6, 76, - 81, 81,209, 55, 81, 81, 81,223, 60, 41,194, 41, 83,166,220, 76, 72, 72,200,119,119,119, 15,226,241,120, 29, 80,153, 40, 82, 3, -224,155,134, 8, 33, 0,152, 62,125,250,181,164,164,164, 92, 55, 55,183, 32,161, 80,232, 93,197,153, 14, 96, 87, 3, 57,243,174, - 95,191,238,221,173, 91, 55,134,199,227,177, 2,129,128,173, 26, 12, 89, 62,159,207, 18, 4,193,254,250,235,175, 18, 88, 17,115, -153,150,150, 54,103,247,238,221,172, 66,161, 8, 42, 45, 45, 29, 11, 96,143, 86,171,237, 86, 88, 88,104, 30,132,107, 67, 69, 69, -133,152,211, 79,245,226,181, 71,188,159, 5,160, 87, 99, 40,224,138, 21, 43,176,125,251,118,212,151,129,252,248,241,227,245, 14, -252,166,123,197, 20, 95,165,215,235, 17, 23, 23, 7,130, 32,204,199,150, 73, 70,105,154,174, 51,211, 59,195, 48,180, 94,175,199, -225,195,135,173, 18, 89, 7, 15, 30, 68, 69, 69, 5, 24,190,144,179, 28, 0, 0, 2,246, 73, 68, 65, 84,134,177,170,159,173, 74, - 76,138,130,130, 2,115,234,132,192,192, 64,203, 62,212,230,246,228,241,120,240,245,245, 69,110,110, 46,156,157,157, 1, 84,186, - 5,205,226,179,172,236, 63,115,243, 91,173, 18,195,122,123,218, 85,240,201, 31, 2,220,153,151,187,120,138,225,108, 47, 1, 79, - 32, 70,113, 5,129,184,140, 10,156,187, 93,252,144,166,216,208, 85,127,164, 88,155, 32,174,187, 90,173,254,152,166,233,118, 36, - 73,202, 88,150, 45,229,241,120,177, 25, 25, 25,203, 0,220,178,165, 18,118, 10, 50,209, 65,206,179, 19,136, 68, 44, 77, 49, 0, - 72,128, 36, 1,130, 4,192,171,218, 87, 30,107,181, 6, 33,205, 16,199,178,115,243, 38, 63,235,198,127,241,197, 23,207,148,149, -149, 61,119,153,220,165, 82,233, 82, 30,143, 55,240,223,190, 76, 76,151, 46, 93,186, 72,165,210,143, 25,134,233, 90, 81, 81,225, - 38,149, 74,179, 8,130,136, 46, 41, 41,249,244,218,181,107,151,184,177,243,217,225, 73,102,114,175, 9, 83,110, 44,103,103,103, -159,235,215,175, 75, 44, 45, 88,150,131, 97,213,251, 4,119, 53,158, 79,248,249,249, 93, 62,112,224, 64,151,230,205,155,147,166, -128,107,146, 36,205,155,201,141,101,178,182, 92,186,116,137,154, 57,115,230,197,235,215,175,191,244, 40, 78,111,111,239, 51,225, -225,225,253, 44, 45, 84, 38, 33, 85,243, 53, 77,211, 40, 47, 47,199,210,165, 75,127, 75, 74, 74,170,117,169, 28, 95, 95,223, 13, -139, 23, 47,158, 51,120,240, 96,146, 36,201,191,197, 92,213,140,195, 50, 24, 12, 56,118,236, 24,243,237,183,223,110,186,123,247, -238, 35, 99,176, 2, 2, 2, 30,198,198,198,122,152, 82, 38,212,220,106,206,168, 5,128,238,221,187,107,162,162,162,154,254,147, -156,255, 25,129,101,250,252,130, 62,158,163, 8,144, 35, 73,130,105, 15,130, 16, 49, 44,226, 9,224,140, 72,162,223, 18,246,139, - 70, 91,227,243,237,241,228, 51,242,114,156, 28,231,179,224, 36, 97,221,210, 51, 92,123,254, 75, 56,189,189,189, 19, 19, 19, 19, -189, 31,217, 25, 86, 23, 88, 92,123, 62,103,156,206,206,206,242, 38, 77,154,252, 78,146,164,231,163, 22,119,182, 20,215, 12,195, -164,100,101,101,245,205,206,206, 46,127, 20,167,187,187,187,151, 68, 34,249,138, 97,152,110,214, 44,246, 76,146,100, 84, 69, 69, -197,204, 26,139, 61,155, 57,159,224, 44,194,106,229,244,247,247, 79,138,138,138,242,146, 74,165,213,226, 10,107,214,217,132,251, -247,239, 99,248,240,225,169,215,175, 95,111,241,148, 57,255, 85,176,117, 45, 66,118,205, 31,169,135, 1, 28,230,158,127, 56,252, -199,192,112, 77,240,223,130, 86,171, 45,104,210,164, 73,105, 69, 69,133, 64,167,211, 9, 40,138,170, 54,192, 73,165,210, 28,173, - 86,203, 53,212,115,138,220,220,220,178,220,220,220,160, 39,201, 89, 37,148,250, 63, 41,190,167,149, 7,171,160,160, 32,180,107, -215,174,191,242,249,124,113, 77,241, 83,155, 24,162,105,186, 34, 47, 47,111,224, 63,205,249, 95, 19, 88, 28, 56,112,224,240,159, - 64, 70, 70, 70, 80, 61, 2,140,107, 36, 14,207, 37, 52, 26, 77,188, 70,163,241,108,236,156,207, 59, 72,174, 9, 56,112,224,192, + 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132,252,133,104,166,113,202,164, 76,202,164, 76,202,164, + 76,202,124,225,208, 72,238,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66, 5, 22, 33,132, 16, + 66, 8,161, 2,139, 16, 66, 8, 33,228,191, 6, 15, 13,223, 9,144,212,140,156,103,185,155, 32,137, 50, 41,147, 50, 41,147, 50, + 41,147, 50, 95,184,204,166,178,147, 64,254,146,194,139, 50, 41,147, 50, 41,147, 50, 41,147, 50, 95,188,204,231, 10,157, 34, 36, +132, 16, 66, 8,249,147, 49,245,254,176,235,170, 98,150,101,221, 1,128, 97, 24,165,233,198, 98, 69, 99, 33,190,158,158, 3,205, +192, 15, 0, 32, 0,222,206, 47, 44, 60, 87, 79,230, 57,150,101,157, 30,103,150,155,110, 44,126,165,177, 76, 97,215, 85,103,159, + 92,158,189,177,120,208,211,203,112, 0, 95,216,117, 85,225, 83,235,234,105,237,198,243, 0,203,255,143,245,252, 95,201,124,145, + 9,187,173, 42, 54,153, 30,181, 35,161,144, 81, 26,175, 55,222,142, 68,221, 86, 21, 62,185,188,233,250, 98,143,167,151, 17,247, +248, 36,215,100, 98, 61, 1, 64, 34, 22,151, 4,251,123,172,107, 44, 51, 51, 79,249,190, 86,167,119,123,156, 89,104,184,246, 15, +191,255,213, 99,211, 90, 30, 30, 30,157,249,124,254, 98, 30,143,103,255,196,143, 19, 11, 10, 10,222,167, 86, 73, 8,121,238, 10, + 44,150,101,221,111, 29, 89,134, 26, 61, 48, 96,210, 42,247, 22,163, 54,237,126,122, 25,147,174, 92,172, 73, 59,218, 70, 96, 82, + 59, 57,218,112, 78,105,105,105,124, 0,240,242,242,250, 1,128, 95, 61,153, 78,183,142, 44,131,198, 0, 68,140, 91,238,212,193, +223,223,190,146,199,251,192,198,198,166,191, 78,167,107, 11, 0, 82,169,244,174, 86,171,189, 96,207,113, 95, 60,189,124, 67, 27, +240,228,186,246,159,184,202,189,101,212, 15,127, 55,155,205, 98,125,230,254, 62,150,170, 7,140,192,108,248,122, 72, 97,225,169, +239, 1,179, 53, 59,228,201,191,219,231,141,127,184,248,122,122, 14,180,145,201, 58,203,108,109,123,155,205,230, 80,139,197, 2, +139,197,146,172,173,169,185,204,154, 76, 55,205, 38,141,203,173,159, 62,177, 52,182,158, 79,111, 75, 39,128, 81, 42, 20, 99,109, +108,109,251, 10, 4,130,158, 0, 96, 54,155,175,104,171,171, 47,186, 23, 21, 29,176,102,219,173,221, 63,207,186,252,139,198,100, + 98,221,179,206, 44,131,222, 4,132,191,246,169,123,251, 55,119,236, 1, 0,131, 50,193,163, 58,237, 88, 55, 0,144, 7, 13,187, + 46, 81,132, 23, 3, 0,243,160,208, 61,245,196, 71,208,155,128,208, 97,203,221,235,203, 52, 24,140,190,233, 39,151, 64,111, 2, +254, 22,125,208,115,193,140, 49, 50, 0,136,249,233,251,160,179, 7,215,191, 10, 0,175,140,121,239,231,126,163,222,201, 0,128, +213,223, 29,244,220,245,241, 24,232, 77, 64,216,200,149,190,207,122,108,178,250, 10,145, 58,245, 68,176,169,178,192,201, 87,206, + 40,154,123,108, 58, 0, 14,213,192,108,158, 64,208, 43, 56, 56,184, 19, 0,100,100,100,220,178,176,236,175,182,192,215,127,102, + 91, 18, 8, 4,127,127,248,240,225,240, 39,127,230,237,237, 77, 13,146, 16,242,124, 22, 88, 0, 80,163, 7, 98,211,129, 62,221, +219, 99,250,132, 87,109,159,252,221, 79,219, 62,243,125,120,247,108,232,234,189,235, 4, 45, 91,182, 68, 90, 90,154, 85,127, 76, + 99, 0, 46,166, 1, 18, 93,182,157, 70, 40,204,140, 94,188,216,190, 87,175, 94,140,151,151, 23, 0, 64,169, 84,118,191,124,249, +114,231,229,203,151,207,148,232,178,203, 53, 6, 84, 93,180, 34,186,118, 93,219,182,124, 9, 31,205, 25,231, 0, 0,235, 62, 56, +208,249,228,213, 4,231,236,236,236, 1,159,124,242, 73,153,247,181,107, 27,109, 45,150,173, 41,197,197,121,214,172,231,190, 83, +241, 54,193,198,115, 45,198, 76,157,122,216,207,207, 79,230,227,227,195,147, 74,165, 16, 8, 4,168,174,174,246, 74, 73, 73, 25, +120,251,246,109,237,165,107, 71,133, 9,241,163,179, 10,132,225, 90,107,182, 93,196,150, 74,107, 66, 66,238,141,137,140,244, 25, + 54,108,152, 52, 32, 32, 0, 0,144,157,157, 29,242,243,207, 63,143, 63,121,242,228, 82, 17, 91,202,106, 12,208, 53,181,237,181, +153, 0, 32, 4, 94,118,118,119,159, 32, 20, 10,195, 88,150,245,126,220,187,240,208,100, 50, 37,169,148,202, 93, 79, 47, 79,254, +157,222, 4, 36, 23, 2, 3,123,135, 99,226,232,129,114, 0, 88,248,198,199,221, 31,100,167,139, 12, 6, 3, 90,182, 10,237,185, +242,211, 47,207,128,207,199,143,135,127,169, 91,190,209,194,150,227, 35, 77, 9, 36,222,207,194,178,143, 55,112, 69,137, 7,187, +176,229,247, 6,149,149,150, 50, 0,224,226,234, 58,118,223,158, 93,231, 20,237,199,252,150, 81, 92, 83,183,188, 53,237,189,190, + 99,243,228,222, 13, 94, 15,147, 46,180,249,246,204,102,161,159,159, 31,146,146,146,154,117,108,162, 34,197, 78,230,233,153, 28, +189, 96,129, 34, 34, 34, 2,114,185, 28, 66,161, 16, 38,147,105,224,149, 43, 87, 6, 46, 91,182,108,102,101, 69, 74,141,181,199, +166, 21,125,135, 95,120,180,236,211, 47,106,196, 80,207,254,125,186, 99,244,144,158,212, 16, 9, 33,207,111,129,197, 48,140,114, +208,228, 79,220,123,119, 11,195,111, 9,169, 21,217,185, 69,213,181,191, 83,223, 63, 18, 50, 35,170, 67,216,166,147, 39, 96, 52, + 26,113,245,234, 85,220,188,121, 19, 87,175, 94,229,190,248,226, 11,173, 0,120,187,129,204,242,136,113,203,157, 36,250, 60,219, + 78, 46,121, 1,251,246, 92, 20,104,181, 90,196,198,198,162,188,188, 28, 18,137, 4,222,222,222,232,221,187, 55, 19, 19, 19,227, +252,198,248, 9, 14,175,140,154,150,165,151,248, 86, 51, 12, 83,206, 54,180, 1, 12,163, 28, 48,105,149,123,155,144,151,144,145, + 83, 80,241,209,167,155,171, 45,102,142,209, 61,200, 55, 94,186,116, 9, 29, 59,118,196,190,125,251, 92,202,203,203,151,108,223, +190,125,177,199, 87,219,214, 23,231,167,124,128,134,243,202, 35,198, 45,119,106,105, 62,239,119, 96,247, 86, 81, 66, 66,130,104, +227,198,141, 80,169, 84, 16,139,197,112,112,112,128, 66,161, 64,203,150, 45,121, 51,103,206,148,245,235,151,134,143, 62,152,234, + 87,228, 20,149,210,208,122,214,102,138, 12,133,178, 16,193,205,160, 31,118,236,224,119,237,218,149,247,228, 50,126,126,126,232, +219,183,175, 52, 42, 42, 42,104,230,172, 57,150,129, 81,239,100, 24,197,158,154,166, 50, 81,147,103,227,162,185,230, 53,112,220, +184,227,209,209,209,142,158,158,158,144,201,100, 0,128,138,138, 10,159,156,156,156,238,203,150, 45, 27,115, 61,113, 31, 19, 49, + 44,175, 0,114, 95,109, 99,251,243, 69, 37, 20, 50,202,218,158, 40, 59,185, 77,121, 94,126,113,205,163, 94, 40, 3, 12, 6, 3, +244,122, 61,222,157,249,142,224,237,215,186, 6,251,247,254,251,237,236,135,197,170,208, 95,226,156,107, 31,107,170, 63,179,180, +205,136,149, 78, 0,192,175,204,170, 41,207, 57,251,183, 15,231,206,245, 86, 40,102, 64, 36, 18, 1, 0,182,109,221,202,148,149, +149, 69,174, 92,185, 50,140,147, 15,168,108, 51, 98,165,252,241, 99,203, 77,205, 60, 54,203, 83, 79,180,248,120,246,224, 14, 63, +124,122, 2,102,179, 25,113,113,113,184,116,233, 18,190,252,242, 75,238,212,169, 83, 21,246,114,121,163,199, 38, 42, 82,236,122, +121, 22, 5,126,254,249, 33,158, 88, 44,198,209,163, 71,113,255,254,125,240,249,124,180,111,223, 30, 19, 39, 78,196,192,129, 3, + 21,211,167,191,195, 69, 12,121, 35, 19, 14,173,170,254, 88, 91,138,230,179, 78,119,254, 62,123,250,155,158,175,141, 28,140, 13, + 95,125, 75, 5, 22, 33,228,249,198, 1,188,128, 81,155,246, 28,184,197,157, 8, 24,181,105, 15, 7,240, 56,128, 39, 1,252,250, +247,239,111,168,174,174,230, 18, 18, 18,184,177, 99,199,150, 47, 92,176, 96,203,142,109,219,162,245, 26,205,187,157, 58,116,152, +200, 61, 26,250,161,254, 76, 71, 71,251,192,192,192,146,188,188, 60,238,212,169, 83,220,242,229,203,185,221,187,119,115,167, 79, +159,230,206,159, 63,207,157, 62,125,154,219,191,127, 63,151,144,144,192,165,167,167,115, 65, 65, 65, 37, 1,142,142,246,141,100, +242, 57,128, 31, 28,245,253, 7, 7,111,154,163, 67,162,126,120,159, 3,248, 65, 10, 69,171, 65,131, 6,153, 15, 29, 58,196,237, +218,181,139,219,177, 99, 7,151,152,152,200,149,150,150,114,222,254,129, 37,181,143,107,104, 61, 57,128, 23, 30, 30, 94,162, 86, +171, 57, 63, 63, 63, 78, 36, 18,113,238,238,238, 92,203,150, 45,185,238,221,187,115, 67,134, 12,225,198,143, 31,207, 45, 89,178, +132, 83,171,213,156,191,191,127,113,237,227, 26,202,236,238,237, 45, 13, 10, 10,202,189,115,231, 14,215, 16,157, 78,199,149,150, +150,114, 23, 46, 92,224,130,130,130,114,187,123,123, 75, 27,203, 20, 2,225, 97, 97, 97, 37,165,165,165,156,197, 98,225, 52, 26, + 13, 87, 86, 86,198,149,149,149,113,229,229,229,156,193, 96,224, 44, 22, 11,103,177, 88,184,148,148, 20, 46, 48, 48, 80, 41, 4, +194, 27,202,124,193,219, 60,191,190, 47,111, 15,143, 33, 10,133, 66,123,232,208, 33,238,225,195,135,220,246,237,219, 57, 62,240, +241,211,203,213,151, 57, 38,116,140, 40, 60,124,186,141, 64, 96,243,234,203, 47,191,108,190,122,245, 42,119,235,214, 45,238,195, + 15, 63,228,134, 15, 31,206,141, 24, 49,130,139,142,142,230,114,115,115,185,188,188, 60,238,149, 87, 94, 49, 11, 4, 54,175,134, +135, 79,183, 25, 19, 58, 70,212,156, 99, 83, 10,248, 14, 27, 54, 76,107, 52, 26,185,204,204, 76,174,109,219,182,249, 2, 96,130, + 8, 8, 13, 4,196, 77,181, 79,123,192,209,211,211,179,240,218,181,107,220,161, 67,135, 56,127,127,255, 18, 1,240,150, 4, 8, +144, 0, 1, 2,224,173, 22, 45, 90,148, 92,187,118,141, 43, 45, 45,229,252,252,252, 10,237, 1,199,103,111, 75,209,124,247,182, +163,182,174,252,234, 16,151,146, 95,195,173,252,234, 16,231,209,178,111, 46,199,113,156,167,167,231, 57,106,145,132,144,231,178, + 7,171, 33,124, 27,155,101,159,126,250,169, 72,171,213, 98,197,138, 21, 37,239,206,152,177,202,213,221,221, 40, 20, 10, 33,148, + 72,154, 14,176,183,127,127,209,162, 69,142, 6,131, 1,241,241,241,232,212,169, 19,164, 82, 41,132, 66, 33, 68, 34, 17, 24,134, +129, 66,161, 64,105,105, 41, 60, 60, 60, 48,115,230, 76,135,175, 55,108,120, 31,106,245,138,198, 98, 45,102,142, 1, 0,179,217, + 44,246,245,242,154,222,182, 93,187, 47,102,206,156,201,151,203,229,208,235,245,208,235,245, 72, 73, 73,129,139,139, 11,100, 54, + 54, 86,109, 51,159,207,231,219,218,218, 34, 54, 54, 22, 91,183,110, 69, 86, 86, 22, 10, 10, 10, 96,111,111,143,142, 29, 59, 34, + 52, 52, 20, 61,123,246, 68,122,122, 58,120, 60, 94,147,111, 50,197, 2,193,236,137,227,198,185,135,133,213,127,103,171, 94,175, +135, 90,173,134, 90,173,134,135,135, 7, 34, 35, 35,221,143, 31, 61, 58, 27,192,154,250,150,151, 1,138,128,144,144,227, 55,110, +220,112,229,243,249,136,141,141,133, 70,163,129, 78,167, 3,203,178,224,241,120,144, 74,165,232,209,163, 7, 92, 92, 92, 16, 18, + 18,130, 35, 71,142,184, 13, 26, 52,232,103, 89,113,113, 56,128, 66,106,254, 77,203, 47, 46, 62,219, 9,112,121,243,205, 55, 79, + 37, 38, 38, 70, 76,152, 48, 1,197,197,197,255, 16,124,248, 97,185, 25, 88,219,216, 99, 15, 36, 31,100,125, 0,185,179,155,219, +247,159,125,246, 25,191,168,168, 8,243,230,205, 43, 43,200,203, 91, 36, 5,174, 1,192,207,199,142,245,216,185,115,231,167,187, +118,237,114,217,177, 99, 7,191, 83,167, 78,155,148,241,155,218,220, 2, 42,154, 83,185,232,128,191,175, 91,183, 78,170,211,233, + 48,104,208,160, 76, 77,118,118,123, 22,208, 90,251,248,106, 96,118,244,130, 5, 10,137, 68,130,249,243,231,151,150, 62,120,208, +150, 5, 74,158, 88, 36, 71,158,149,117,106,210,164, 73,119, 19, 19, 19, 93,215,174, 93,171,120, 45, 42,106, 54,128, 85,214,254, +141,127, 93,208,206,183, 55,219,198,134,140, 26, 18,233,209,170,133, 59, 14, 29, 61,131,175, 55,237,222, 6,117,198,247,222,222, +222,179,249,124,254,106,106,121,132,144, 23,170,192,114,114,114,234, 28, 20, 20,132,243,231,207,163,117,235,214, 71,220,107,139, + 43,161, 16,102,115,211,215,144,219,200,229, 3, 34, 34, 34,152,171, 87,175, 34, 32, 32, 0, 54, 54, 54,117,133, 85,109,145, 37, + 20, 10,161, 80, 40, 80, 81, 81,129, 94,189,122, 9,183,110,221, 58, 0,192,138,166,178, 11,115, 82,108,145,185,245,205,229, 43, + 87, 6,118,238,220, 25, 70,163,241, 81, 33, 34,147, 65,175,215, 67, 40, 20,194,104, 52, 66,103,224, 42,173,217, 86,179,217,108, + 22, 8, 4,240,243,243,195,210,165, 75,161,211,233,234, 78,235, 84, 86, 86, 66,173, 86, 35, 62, 62, 30,217,217,217,176, 88, 44, + 92, 83,121, 50, 91,219,200, 17, 35, 70,136,235,251,157,193, 96,168, 43,174, 42, 42, 42,160,211,233,208,161, 67, 7,241,133, 11, + 23, 34, 27, 42,176,120, 82,233,152, 29, 59,118,184,139,197, 98,232,116, 58,164,165,165, 33, 35, 35, 3, 41, 41, 41,122,149, 74, +197,218,218,218,242, 60, 61, 61, 5, 21, 21, 21,226, 73,147, 38,241,170,170,170, 0, 0, 81, 81, 81, 46,219,182,108,121, 29, 6, +195, 90,106,254,214,185, 5,232,131, 12,134,225, 93,187,118,189,240,219,111,191,117,122,239,189,247,144,152,152,248, 79,217,190, +125,151, 52,192,237, 70,219, 37, 48,115,245,194,133,158,114,185, 28, 19, 39, 78, 84,105,242,242,218,179, 64,209, 19,139,164,186, +100,103,159,158, 60,121,114, 82, 98, 98,162,211,218,181,107, 21,175,143, 25, 51, 19,192,167,205, 89, 71, 7, 7,135,174, 10,133, + 2,167, 79,159, 70,110,118,246,194,230, 20, 87, 0,192, 19, 8,122,245,233,211, 7, 63,253,244, 19,242, 31, 60, 88,248, 84,113, + 5, 0,168, 1, 74,152,204,204,133,219,182,109,219, 58,117,234, 84,240, 25,166, 23, 88,235, 79, 16,214,119, 65,251,187, 11, 87, +227,200,233,184,109,202,187,237,254, 6,252,100, 1,112,131, 90, 28, 33,228,121,208,172,113,176, 90,180,104,209, 66, 34,145, 32, + 39, 39, 7,221,186,117,203, 22,138,197,144,136,197,144,216,216, 88,247, 41, 91,167,107,167, 80, 40, 80, 89, 89, 9, 87, 87, 87, +136, 68, 34,136, 68, 34,136,197, 98,136,197,226,186,239,237,236,236,192,231,243,225,237,237, 13,157, 78,215,174,169, 92,182, 34, +205,253,204,246,133,179, 78, 30,217, 25, 24, 21, 21, 5, 47, 47, 79,120,123,123, 65, 46,151,131, 97, 24,248,249,249, 33, 40, 40, + 8, 91,182,108, 1,207, 62,228,186, 53,235,250,100,209, 36, 16, 8, 96, 54,155, 81, 92, 92,140,148,148, 20, 36, 38, 38,226,218, +181,107,136,143,143, 71,117,117,181, 85,219,174,209,104, 58,214,215,209,245,116,113,165, 86,171, 81, 82, 82,130,140,140, 12, 84, + 85, 85,133, 55, 88,236,186,184,140, 14, 11, 11, 19, 0,128, 84, 42, 69,139, 22, 45,240,221,119,223,177,231, 78,159,126,221,230, +183,223, 28,205, 23, 46, 56,236,249,241,199,215,167, 77,155,102,190,126,253, 58, 42, 43, 43,145,154,154, 10, 55, 55, 55, 70, 98, + 99,243, 58, 53,253,230,201, 0,106,228, 85, 85, 67, 94,126,249,229,172,138,138, 10,172, 94,189,154,207,216,217,125,255, 14, 32, +104,244, 0, 19, 8,122,247,235,215, 15, 71,143, 30, 69,254,131, 7, 31,150,253,190,184, 2, 0,148, 1, 69,217, 25, 25, 11,183, +109,219,134,200,200, 72, 48, 12,211,187,185,235,215,189,123,247, 48,142,227,112,231,206, 29,136,129,184,230, 62, 62, 56, 56,184, +147,173,173, 45,238,223,191, 15, 33,112,169,161,229,132,192,165,248,248,120,216,216,216,160, 77,155, 54,157,155,247, 87,132, 95, +120,180,236, 83,248,238,194,213, 56,124,250, 10, 0,224,167,227,167,138, 31, 21, 87,209, 22,106,101,132,144, 23,182,192, 2, 0, +142,227, 32, 16, 8, 32, 98, 24,216, 72, 36, 16, 75, 36, 16, 11,133,214,127, 82,230,241, 32,145, 72,254,173,168,170, 45,180,106, +255,149,203,229, 86,103,154, 10,127,141,152, 50,121,146,216,214,214, 22,102, 51, 11,134, 97, 32,147,201,160, 80,120,160, 85,171, + 86, 80,169, 84, 24, 62, 98,148,238,129,138, 57, 46,244, 25,144,248, 44, 59,138,101, 89,212,212,212,160,188,188, 28, 42,149, 10, +149,149,149,208,233,116,176,226,236, 96, 93,157,150,155,155,139,189,123,247,162,172,172,172,193,226, 42, 51, 51, 19, 59,119,238, + 68,118,118, 54, 4, 2,129,213,207,207,128, 1, 3,112,226,196, 9, 65,223, 1, 3, 54, 63,240,247, 47,124,224,239, 95,216,119, +192,128,205,199,142, 29, 19,120,123,123, 35, 55, 55, 23,241,241,241, 80,169, 84,176, 88, 44,116, 13,214, 51, 40, 0,202, 53, 42, +213,212,127,252,227, 31,156,173,173, 45,214,172, 89,211,113, 11, 48,190,177,199, 4, 6, 5,117,178,181,181, 69,114,114, 50,100, +141, 20, 46, 50,224,210,173, 91,183, 96, 99, 99,131, 86,161,161,157,159,229,184,180, 88, 44, 48,155,205,245,142,239,102,205,113, + 41, 20, 10,193,231,255, 85, 99, 15, 71,243, 89,167, 14,127,159, 61,123,142,231,223,231,188,139, 11,177,143,106, 64, 65,117,102, + 26, 21, 87,132,144,231, 81,179, 78, 17,102,100,100,100,235,116,186,208,128,128, 0,220,189,123, 55,160,109,187,118,137, 66,161, + 16, 18,161,176,241,143,241,143, 73,165,210, 59,197,197,197, 61,125,124,124, 96, 50,153,234, 78, 9,214,158, 38,172,253, 30, 0, + 36, 18, 9,146,147,147, 33,149, 74,239, 52,185, 17,230,106,255, 22, 45, 90,160,168,168, 24, 18,137, 4, 78, 78,142,176,177,177, +129, 68, 34,197,167,159,126,106,217,188,105,211, 55,146,182,179,213,115,167, 45,228,110,172,250,225, 63,178,163,101, 50,217,157, +128,128,128, 30,114,185, 28, 71,142, 28, 65,118,118, 54,212,106,117,221,117, 83, 90,173, 22,122,189, 30, 82,169, 20,109,218,180, +129,179,179, 51,238,222,189,219,224,182,151,151,149, 29, 78, 74, 74,234,209,165, 75,151,186, 93,223,183,111, 95, 94,223,190,125, + 93,159,232, 53, 67, 89, 89, 25, 18, 18, 18, 16, 27, 27, 11,150,101,113,239,222, 61,179, 94,171,221, 71, 77,255,217,232,128, 43, +130,109,219,182,206,152, 49, 99, 90,207,158, 61,193, 1, 67, 1,252,216,224, 39, 24, 62,159,199, 48, 12,120, 60, 94,163,133, 15, + 15,176,112, 28, 87, 91,236, 52,187, 0,190,118,237, 90,146,217,108,238,217,178,101, 75,232,129,174, 0, 78, 52,231,241,233,233, +233,183, 76, 38,211,192, 14, 29, 58,224,240,129, 3, 17, 0,114,234,253, 48, 3, 68,132,135,135, 67,171,213,226,222,189,123, 55, +173, 45,174,220,219,222,217, 60,123,250,155,111,189, 54,114, 48, 14, 29, 61,131,159,142,159,206,251,246,243, 5,190, 28,103, 49, + 82,171, 34,132,188,240, 61, 88, 21, 21, 21,191,221,191,127, 31,221,187,119, 71,122,102,102,148, 94,171, 21,213,246, 98,241, 5, + 77,151, 88,218,154,154,243,191,254,250, 43,219,177, 99, 71, 84, 87, 87,215, 21, 85, 79,246, 94,213, 22, 92,114,185, 28,167, 78, +157, 50,106,107,106,206, 55,149,107,102,205, 22, 62,159, 15, 30,143, 7,189, 94,143,194,194, 34,232,116,122,252,240,195, 15,216, +178,105,211,248,252,194,194,247, 33,113,210,254, 21, 59,208,218,247, 66,173, 86,123,254,252,249,243,166,128,128, 0, 76,153, 50, + 5,115,231,206,197,220,185,115,241,206, 59,239,224,173,183,222,194,132, 9, 19, 48,122,244,104,116,235,214, 13,110,110,110,200, +202,202, 50,105,181,218, 6,183,157,211,233, 14, 78,158, 60, 89,169,211,233, 96, 54,155,161,215,235,161,213,106,235,122,217,226, +227,227,113,248,240, 97,108,218,180, 9, 63,255,252, 51,106,106,106, 80, 89, 89,137, 91,183,110,169, 5, 38,211,126,106,250,127, +232,160, 57,244,235,175,191,194,201,201, 9, 94, 62, 62,125, 26,253, 80,146,158,126,219,108, 54,163,125,251,246,168, 1, 26, 92, +182, 6,232,211,177, 99, 71,232,116, 58, 36,223,187, 23,223,220,117,170,170,170,186,145,149,149,133,190,125,251,194,211,199,231, + 11, 15,192,166, 57,143,183,176,236,175, 87,174, 92,193,164, 73,147,224,223,162,197,231,114,192,237,233,101,228,128, 91, 64, 80, +208,231,111,189,245, 22,206,158, 61, 11, 11,203,254,218, 80,158,135,135, 71,103, 79, 79,207, 99, 94, 94, 94,177, 30, 65,231,114, +162,134,116,127,235,201, 11,218, 57,117,198, 88,111,111,239, 93,124, 62,127, 62,181, 40, 66,200, 11, 95, 96, 89,180,218,229,139, + 22, 45, 50, 8, 4, 2,204,154, 53,203,237,235,111,191, 93,190,127,255,254, 46, 9,119,238, 40, 12,122,125,211, 21, 86,101,229, +186,149, 43, 87,170,141, 70, 35, 90,183,110, 13,149, 74, 5,179,217, 12,129, 64, 0,134, 97, 32, 16, 8,192,231,243, 33,147,201, +144,148,148,132,125,251,246, 85,162,178,114, 93,147,235,101,177,220, 57,114,228, 8, 24,134,225,164, 82,105, 93,209,179, 97,195, + 6,229,180,194,194,195, 0, 32, 16, 8, 12, 0,192, 23,240,172,186, 42,151,207,231, 55,121,225,186, 88, 44,174,189,184,191,233, +139,220, 89,118,221,119,223,125, 87,149,150,150, 6,141, 70, 83,119,106,176,186,186, 26, 85, 85, 85,117,223,215, 22,137,151, 46, + 93,170,146,177,108,131,219,174, 1,138,178,211,210,134,119,233,210,165, 44, 39, 39, 7,213,213,213, 72, 79, 79,199,181,107,215, +112,226,196, 9,196,196,196, 32, 35, 35, 3, 6,131, 1,142,142,142,168,172,172,196,177, 99,199, 42,245,213,213,131, 53,245, 92, + 7, 68,254,197,215,211,115,128,135,187,123,158,155,171,235, 67, 95, 79,207, 1,245, 20, 26,169,169,169,169, 48,155,205, 8, 12, + 12,116,110,236, 58, 44, 51,203,254,122,237,218, 53, 76,152, 48, 1, 10,111,239, 79,221,234, 41, 92,220, 0, 55, 79, 31,159, 79, +167, 76,153,130,243,231,207,195,220, 72,225,210, 16, 41,176, 97,193,130, 5, 90,145, 72,132,125,251,246, 5,218, 7, 7,167, 48, +192,155, 98,160,117, 16, 32,106,234,241,182,192,215, 75,150, 44, 41, 2,128, 93,187,118,185,122, 6, 5,221,101,128, 41, 82,224, + 37, 41,240, 18, 3, 76,241, 12, 10,186,187,111,223, 62, 87,150,101, 49,119,238,220, 34, 91,224,235,134,242, 4, 2,193,223, 11, + 10, 10,134, 63,124,248, 48,162, 40,253,170,239,183,159, 47,192,133,216, 56,124,189,105,247, 54,229,221,118,127, 83, 42, 31,222, + 40, 40, 40,152,248,240,225,195, 36,106,113,132,144,231, 81,189,221, 47, 76,215, 85,197, 0,231,222,167,123,123,252,150,144, 82, +225,226,228,112,186,246,119,234,251, 71, 66, 94,239,235,223,113,249,242,229,224,241,120,184,127,255, 62, 18, 19, 31, 93,214,180, +122,245,106, 13,159,227,162,158,152,239, 44, 12, 64,210,227,204,115, 44,203, 58, 73,244,121,182,225, 78, 89, 45,126,220,177, 77, + 96,103,103,135,234,234,106, 8, 4, 2, 72,165, 82,200,229,114, 72, 36, 18, 36, 38, 38, 98,210,148,169,230, 12,182,195,191, 6, + 26,253,215,124,103,117,153,181,227, 15,245,116,113,145,229,138, 68, 31,184,121,120, 44,152, 51,103,142, 77, 68, 68, 4,196, 98, + 49, 58,119,235, 93,100,211,113,193,122,190,128,199, 22,148, 86, 44, 14,122,201,203,225, 94, 90, 14, 0,158,210,116, 99,177,231, + 19,167,108,254,109, 61,219, 73, 19, 3,127,252,118,133,125,219,182,109,193,113, 28, 42, 42, 42, 80, 92, 92, 12,165, 82, 9,181, + 90, 13,173, 86, 11,139,197,130, 95,126,249, 5,191, 92,207,172, 44,182,123, 37,179,161,245,252,215,182,231,216,133,218,164, 6, +172, 95,251,133,192,201,201, 9,197,197,197, 40, 45, 45,173, 59, 85,104, 54,155, 81, 85, 85,133,163,199,127, 54,103,154,219,101, +235, 37, 47, 85, 53,149,137,154, 60, 27,231,234, 43,222,157,195, 2,184,119,222,121,199,206,222,222, 30, 22,139, 5, 42,149, 10, +217,217,217, 72, 77, 77,197,229,203,151, 53,202, 74, 19,167,117, 29,148, 95, 55,208,104, 61,153,127,162,255,185,204, 39,199,178, +242,242,244, 44,124,240,224,129,187,217,108,134,183,183, 55,171, 86,169, 62, 19, 3,103, 69, 64, 1, 15,224,170,128, 37,107,215, +175,159, 58,114,228, 72,116,237,218, 53,175,168,184,248,165,250,218, 18, 7,240,189, 0, 39,145,191,127,114, 92, 92,156, 91,106, +106, 42, 38, 79,158, 92, 82,144,151,247,129, 61, 16, 11, 0,149, 64, 31, 47, 95,223, 47,246,236,217,227, 22, 22, 22,134,246,237, +219,151,232,179,179, 67, 11,128,242, 6,218,103,131,199,102,121,234,137, 22,179,162,194,186,188,251,238,187, 96, 89, 22,177,177, +177,184,126,253, 58,114,115,115,113,229,202, 21,181,189, 92,254, 70, 99,199, 38, 42, 82,236, 34, 67,106, 2,119,237,250,145, 39, + 18,137,176,109,219, 54,196,199, 63,234, 76, 11, 15, 15,199, 91,111,189, 5,150,101, 49, 97,194, 68,238,231, 20,155,127, 13, 52, + 90, 79, 91,242,246,246, 14,179, 88, 44,107,120, 60,158,200, 44,118,239, 82,148, 21, 47,245,108,217,171,160, 40,109,128,111, 51, +175,185,162,246, 73,153,148,249,226,100, 62, 87,154,156,139,112,213, 70, 56,252,126, 58,142,183, 11,143,110,251,140, 25,250,234, +240,208,197, 31, 45, 18,180,107,215, 14, 22,139, 5, 93,187,118,197,228,201,147,101,161,161,161, 77,205,119, 86,253,202,168,105, + 89,175,188,242,138,227,172, 89,179, 28,250,244,233, 35,172,157, 42,231,206,157, 59, 56,121,242,164,113,239,222,189,149, 15,197, +189,213, 87, 78,109,169,182,102,190,179, 43,101,101, 26, 0, 43, 90, 26,141,155,150,124,244, 81,116,219,118,237,166,189,255,254, +251,124, 91,185, 76,184,106,241,219, 82, 0,248,248,171,189, 14, 35,199,188,137,117,193, 64,159,241,245,207, 29,247,228,122,230, + 23, 42, 31,188, 57,117,108,240,180, 9, 81,150, 81,163, 70,201, 28, 28, 28,224,235,235, 11, 71, 71, 71,100,101,101,225,206,157, + 59,220,217,179,103,171, 19,238,231, 10,119,238, 63,251, 64,108,235,110,205,188,129, 85,175,140,156,156, 61,101,202, 20,167,168, +168, 40,187,182,109,219, 10,133, 66, 33, 36, 18, 9, 74, 75, 75,145,159,159,111,140,137,137,169,126, 40,234, 81,126,229,244,246, + 42, 43,231, 34,212, 70,140, 91,158,126,254, 76,244,251, 9, 9, 9, 19, 1,116, 48, 26,141, 62,102,179,153,199,231,243, 11,205, +102,115,162,174,186,122, 43, 27, 30,189,142,230, 34,180,142,217,108, 22,153,205,102,168,213,106,156, 59,119,142,201,200,200, 88, +156,144,144,176,184,160,160, 0, 70,163, 17, 99,198,140, 65,120,120, 56, 46, 94,188,136,146,226,226,227,141,101, 21, 0,229,204, +131, 7, 83,103,206,156,121, 98,251,246,237,188, 59,119,238,184,109,221,186,245,199, 91,183,110, 1, 0, 58,117,234,132,169, 83, +167,130, 97, 24, 76,158, 60,153,203,205,206,158,202, 2,229,141,180,207,198,142,205,146,147,123, 55, 36,140, 26, 61,166,205,178, + 37, 31, 9,123,246,236, 9, 55, 55, 55,244,238,221, 27, 70,163,209,209,138, 99,179, 42, 98,200, 27,153, 29, 58,116,144,175, 93, +187, 86, 49,117,234, 84,204,158, 61, 27, 0,160,213,106,113,246,236, 89,204,157, 59,183, 40,151,233, 86,115, 43,102, 95,163,237, +243,113,207,212, 32, 0,240,242, 66, 44,128, 8,126, 77, 78, 38, 93,208, 78, 8,121,161, 11, 44,224, 95,243,157, 93,190,158,132, + 39,167,227,120,196, 57,217,228, 28,149, 57,117,238,103,109, 4, 38,181,147, 13, 99,112, 74, 76, 72,224,103,101,101, 53,250,199, +106,231, 59,211, 75,124,171,205,133,101, 93, 54,172, 91,247,254,230,205,155, 7,212, 14,197, 32,149, 74,239,104,107,106,206,163, +178,114,157, 62,192,247, 66,115,231,206, 75, 45, 43, 43, 6, 48, 35,200, 98, 89, 63,101,218, 59,171,121,182,190,204,162, 85, 63, +232, 4, 2,129, 33,243, 97, 49,214, 5, 3,114, 43,198, 67,213, 24,128, 59,101,238,236, 93,174, 79,202,154,207, 62,155,183,241, +235,175,187,217,216,218, 70, 24,141,198, 80,139,197, 2, 0,201, 58,141,230, 18,107, 52, 94,127,232, 53,253, 75,177,173, 59,103, +237,188,129,122,105, 64,149, 92,123,185,203,161, 3, 7,222, 59,117,234,212,191,109,187, 29,176, 94,111, 31,112,222,154,109,127, +114, 25, 19,112, 21, 74,229,213,198,186, 42,105, 46, 66,235,240, 57,238,109, 39, 39,167, 31, 7, 12, 24, 32, 29, 56,112, 32,134, + 14, 29,138,151, 95,126, 25, 22,139, 5, 28,199,161,170,170, 10,251,247,239,199, 63,255,249,207, 52, 15, 96,121, 83,121, 44,112, +154, 57,122,116, 68,167, 78,157,182,174, 93,187,214,101,198,140, 25,176,121, 60,180,137, 86,171, 69, 76, 76, 12,230,206,157, 91, +150,147,153, 57,149, 5, 78, 55,149,215,248,177, 41, 77,101, 29, 71,102,191, 49,251,179, 96, 83,101,129,147,139,140, 85,220, 77, +186, 99,245,177, 9,135, 86, 85, 21,241,251,187,190, 22, 21, 53,155,207, 48,189,106,135, 98,184,119,239,222,205,218,201,158, 17, +254,214, 47,205,105, 75, 28,247,104,236, 57,142,227,232,130,118, 66,200,139, 93, 96, 49, 12,163,172,237,229, 97, 24, 70,153,245, +211,244, 55, 27, 11,241,245,244, 28,248,248,211, 49,154,154,139,176,246,255, 89,106,117,213,227, 17,218,235, 29, 68, 84,248,212, +242,205,153,239, 44,163,184, 56, 5,192,171,192, 3, 32,229,242,163,188,174,171, 62,124,114,155, 26,220, 33,191,251,187, 34, 85, +126,113,241,101, 0,151, 1,252,179,222,245,244, 19,169,154, 90,207,167,183, 61,225,193,131,202,199,219, 93,255,182,187, 55,189, +237, 79,103, 54,249, 68,255,129,253,249,162, 41, 44, 41,249, 9,128,220,245,196, 9,143,147, 39, 78,188, 62,111,222,188,215,188, +188,188,130, 93, 93, 93,157,236,236,236,248,113,113,113, 89, 6,157,110,125, 16,176, 61, 21,208, 88,147,201, 2, 39, 21,153,153, +173, 71, 12, 27,246, 62,159, 97,122,133,134,134,134, 3, 64,114,114,114,188,133,101,127,117, 3,214,177,128,202,138,231,177,121, +199,166,164,249,199,102, 5, 80, 1, 96, 21, 88, 22, 72, 76,252,195,199,166,197, 98, 89,229,237,237, 93, 69, 35,180, 19, 66,200, +159, 39,140, 50, 41,243, 57,202, 20, 0,176,167,253, 73,153,148, 73,153,148,249,151,100, 62, 87,248,180, 11, 8,177,154, 25, 64, + 37,237, 6, 66, 8, 33, 77,225, 53, 82,133, 54,231,238,128,103,169,100,147, 40,147, 50, 41,147, 50, 41,147, 50, 41,243,133,203, +108, 42,155,238, 78,252,139, 10, 47,202,164, 76,202,164, 76,202,164, 76,202,124,241, 50,159, 43,116,138,144, 16, 66, 30,139,142, + 6,159,227,192,227,184,104, 62,199, 29, 16,112,220, 24, 1,199,225, 15,205,221, 57,102, 76,253, 3,209,206,121, 19,118,180,199, + 9,121,126, 49,180, 11,254,115, 20, 10,133,159,135,135,199,247, 28,199,241,148, 74,229,244,162,162,162, 92,218, 43,255,125,156, +157,157, 7, 0,128, 74,165, 58,255,188,110, 99,155, 0, 68,113, 60,180,126,242,103, 60, 11,114,239,229,252,126,158,197, 54, 47, + 97, 34,199,255,253, 88, 90, 60, 14,247,239,101,227, 72,115, 62,216,141, 26,224,182, 6, 0,126, 58, 95, 50, 31,207, 48, 57,117, + 83, 60, 61, 61, 91,186,184,184,156, 17, 8, 4,140,217,108,158,153,148,148,116,162,169, 15,154,239,142,198, 34,182,200,117,209, +146, 25, 60,161, 65,191, 90,173,215,233, 42,248,124,126,182, 72, 36,186, 60,103, 2,119,250,171, 93,166,187, 13, 60,190,193,245, +111, 27,128, 72,190,190,205,240,240,214, 89,153,107,198,118, 93,215,103,154,171, 48,235,230,109,219,141, 71,114,191,119,112,244, + 24,254,247, 55,138, 78, 72,108,204, 19,255,185, 21,213,116,164, 89,231, 19,192,217, 8,180, 19, 73, 36, 62,102,150,245, 0, 0, + 1,195, 20,155,244,250, 60, 17,144,184, 8, 80,255,151,100,186,154, 24, 38, 76, 36, 22,251,152, 77, 38, 15, 30,192, 65, 40, 84, + 90, 12,134, 60, 51,203, 38, 69, 3,101,207,186,158, 66,137,196,215,204,178, 30, 60,128,251,179,182,253,207,204, 36, 77, 20, 88, +129,129,129, 55,249,124,190, 15,159,255,168,147,235,201, 57,247,106,255,255,244,191,102,179, 57, 63, 37, 37,165,179,181,127, 60, + 32, 32,192, 94,167,211,189,206,227,241,222, 4, 0,142,227,118, 75,165,210,253,217,217,217,207,116, 33,113, 64, 64,128, 61,199, +113,243,109,108,108,250,235,116,186,182, 0, 32,149, 74,239,106,181,218, 11, 60, 30,111,205, 51,230, 50,158,158,158, 99,229,114, +121, 63,150,101,251,113, 28,199, 99, 24, 38, 70,163,209, 92, 40, 44, 44, 60, 0,160,217, 35, 30,120,122,122,218,184,184,184,124, +236,232,232, 56,126,214,172, 89,101,206,206,206,173,150, 47, 95,254,155,139,139,203, 30,149, 74,245, 81, 97, 97,161,246,191,164, +125, 4, 41, 20,138,221, 66,161, 80,144,151,151,215, 15, 0,124,125,125, 99, 12, 6,131, 89,169, 84,190, 9, 32,163, 57, 97,174, +174,174,114,161, 80,216, 93, 46,151,119,150,203,229, 17,102,179, 57,212, 98,177,192, 98,177, 36,215,212,212, 92, 50,153, 76, 55, + 77, 38, 83, 92,105,105,105,205,127,209, 49, 98, 39, 18,137,126,100, 89, 22, 0, 66, 0, 84, 61,143, 47, 4, 28, 15,173,239,221, + 77,110,245,187, 98,170,109,232,191, 47,199,135, 95, 3,203, 89, 93, 96, 13,237,229, 56,100,120,100, 7, 62, 0, 24, 13,191, 13, + 57,249,171,250,228,159, 93, 92, 13, 29, 58,244,234,250,245,235,157,244,122, 61, 22, 44, 88,176, 91,175,215,127,147,158,158,190, +168,177,199,217,219, 59,204, 91,241,201,215,178,199,175,103,238, 22,139,197,189,176, 32, 47, 36,229,254,157, 33, 41,247,147, 62, +157, 51,230,254, 53, 45,107,126,103,203, 79,184,111,205,122,132,190,132, 97,195, 71, 71,189,186, 98,105, 52,198,143, 31,255,210, + 93,149,206,198,251,110,130,184,134,179, 13,114,117,247, 25,177,240,163,207,121,113, 87, 47,142, 56,176,119,243,133,255,155,106, +234, 79, 69, 86,147,120,171, 24,166,187, 67,112,112,196, 27, 63,253, 4, 91, 95, 95,134,145, 72,248, 0,192,234,245,190,213,121, +121,158,251, 70,140,232, 22,157,154,122, 49, 26,184,254,159,204, 92,193, 48, 61, 29,130,131,123,142, 63,121, 18,182,158,158, 12, + 95, 36,226, 3,128,197,104,244,169, 44, 40,240,220,247,234,171, 93,163,211,211, 47, 69,179,108, 28,172,152,106,237,127,104,219, +137, 53, 5, 22,159,207,247,137,143,143,119,151,203,229,120, 92,252,192,108, 54,195,108, 54,227,241,155, 98,221,192,139, 28,199, +129,101, 89,244,237,219,215,170, 79,175,158,158,158,253, 1, 76, 9, 14, 14,126,109,254,252,249,162,158, 61,123,194,108, 54,227, +194,133, 11,189,215,174, 93,251,149, 94,175, 63, 12, 96,123, 97, 97,225,121,107, 63,221, 42, 20,138,193, 2,129, 96,215,226,197, +139,237,123,245,234,197,212,142, 14,175, 84, 42,187, 95,190,124,185,243,242,229,203,103, 42, 20,138, 9, 69, 69, 69,103,172,221, + 57,222,222,222, 97, 50,153,236, 96,100,100,164, 79,231,206,157,165, 45, 91,182, 4,199,113,184,125,251,246,212,148,148,148,113, + 39, 79,158,223,178,194,155, 0, 0, 32, 0, 73, 68, 65, 84, 92,166,209,104,198, 52, 99, 62, 53, 94, 80, 80,208,100, 59, 59,187, +143,231,205,155,231, 60,106,212, 40,113, 82, 82, 82,121, 96, 96, 32,239,240,225,195,110,199,143, 31,159,249,205, 55,223,140,149, +201,100, 31,101,100,100,236,176,230,192, 11, 14, 14,190,201,231,243,125,172, 41,128,155, 89, 4,119, 12, 8, 8,216,127,233,210, +165,128,156,156, 28,115, 84, 84,212, 78, 0,184,114,229, 74,123,142,227,120, 61,123,246, 60,149,159,159,255, 58,128,219,214,108, +184,151,151, 87,123, 7, 7,135,163,163, 70,141,114,246,243,243,147,249,248,248,240,164, 82, 41, 4, 2, 1,170,171,171,189, 82, + 82, 82, 6,222,190,125, 91,123,229,202, 21,149, 72, 36, 26, 81, 80, 80,144,216,140,118,252,178,187,187,251, 68,161, 80, 24,198, +178,172, 55, 0, 48, 12,243,208,100, 50, 37, 41,149,202, 31, 1, 92,125,214, 3,196,195,195,227,171,181,107,215,186, 22, 23, 23, +115,209,209,209, 95, 85, 84, 84, 76,126,158, 95, 16,146,110,199,225,242,149, 75,248,110,211,143, 21, 28,135, 7,255, 86, 96, 89, +144,222,182,109,168,219, 59,111, 79,116,238,221, 51, 2, 97, 29,187, 55,153, 57,178,191,203, 10,177,136,113,209,232,245,215, 75, +243,249, 71,101,114, 81,212,132,209,157, 51, 1,224,244, 47,119,162,186, 6, 58,253,234,234, 99, 25, 41,147, 72,186, 25,140,108, +217,209, 11,101, 75,155, 83, 76, 41, 20,138, 51,182,182,182, 50,181, 90, 93, 84, 86, 86,182, 49, 50, 50,114,213,218,181,107,157, + 50, 51, 51,145,151,151,135, 41, 83,166,216, 62,124,248,112,150, 94,175,191,150,151,151,215, 96, 79, 86,101, 85,197,186,143,163, +231, 45,179,115,112, 18,200,108,228,176,181,179, 71, 64,139, 16,116,233,214, 27, 3, 95, 25,129,204,140,148, 30,251,119,109,190, + 61,115,116,254,167, 41, 42,172,140,141,109,248,181,169,141, 63,250,140,120,237, 81,113,181,116, 69, 52, 82, 83,238, 87,229,228, +242,231,252,124,139, 47,139,236,223, 70, 98,208, 87,231,196, 93,189, 24,208,253,229,190, 0,208,249,192,222,205, 23,162,223, 52, + 13,136,222,253,124, 22,240,127, 70,113,181, 66, 40,156, 60,120,237, 90,247,240,153, 51, 69,213,217,217,198,204,239,190,211, 20, + 95,186,100,102, 36, 18,206,119,200, 16,158, 91,191,126,210,153,201,201,162, 43,159,125, 22, 33, 92,190, 60,240, 35,163,113,215, +127, 42,115,232,134, 13,110, 29,167, 79, 23, 85,102,102, 26, 83,191,250, 74, 91,244,203, 47,172, 72, 42,181,248, 12, 29, 42,240, + 24, 52, 72, 50,243,238, 93,209,181,213,171,123, 50, 75,150,180, 88,108, 50,253,248,156,108, 59,105, 70,129, 5,185, 92,142,189, +123,247, 66, 40, 20, 66, 40, 20,130, 97,152, 6,255,239,239,239,111, 77, 17, 52,218,197,197,229,235,121,243,230,121, 12, 31, 62, + 28, 78, 78,191,159,101, 99,216,176, 97, 24, 58,116,168, 40, 43, 43,107,220,129, 3, 7,198,237,220,185,179,168,186,186,122, 78, + 81, 81,209,225, 38,222,188,251, 5, 4, 4, 28,222,187,119,175,141, 86,171, 69,108,108, 44,202,203,203, 33,145, 72,224,237,237, +141,222,189,123, 51, 49, 49, 49,206,227,198,141, 59,204,231,243,135, 21, 20, 20,196, 88,241,198,218,217,201,201, 41,118,211,166, + 77,210,214,173, 91,243,210,211,211,209,161, 67, 7, 0, 64, 89, 89, 25,134, 13, 27, 38, 29, 53,106, 84,208,172, 89,179,174,177, + 44,219,183,184,184,248,102, 19,219,222,201,195,195, 99,199,144, 33, 67,188, 62,252,240, 67,123, 91, 91, 91,228,228,228, 20, 42, + 20,138,144,218, 34,104,228,200,145,226, 65,131, 6,121,110,220,184,113,253,201,147, 39, 23,148,148,148, 76, 46, 42, 42,186,213, +104,181,202,231,251,220,186,117,203, 93, 38,147,161,184,184, 24,187,118,237,194,172, 89,179,192, 48, 12,148, 74, 37,246,239,223, +143, 57,115,230,128,207,231,163,178,178,210,170, 34, 88, 38,147, 13, 12, 14, 14,222,114,254,252,121, 31, 71, 71, 71,120,121,121, +241,151, 44, 89, 18, 22, 24, 24,104,227,233,233,201, 47, 40, 40,192,225,195,135, 3, 39, 78,156,120, 52, 55, 55,119,170, 94,175, +111,242,212,153,139,139,203,214,157, 59,119,250, 37, 36, 36, 96,227,198,141, 80,169, 84, 16,139,197,112,112,112,128, 66,161, 64, +203,150, 45,121, 51,103,206,148,245,235,215, 79, 22, 29, 29,189, 21, 64, 71, 43,218,111, 7,119,119,247,239,251,245,235, 23, 24, + 29, 29,237,232,233,233, 9,153, 76, 6, 0,168,168,168,240,201,201,201,233,190,108,217,178, 49, 55,111,222,204, 82, 42,149,239, + 0, 72,104,230,241,209,177, 77,155, 54,195, 70,141, 26, 37, 40, 42, 42,194,230,205,155,135, 85, 84, 84,116,180,182,168,252, 95, +116,249,202, 37,244, 27, 50, 14, 90,214, 70,120,252,200, 46,174,234,204,151, 46,182,142,142, 12, 0, 84,171,213,236,208, 55, 63, +176, 12, 27, 49,193,216,127,200, 72,205,133,211,187,101,214, 20, 88, 98, 17,227,178,111,203,140,188, 75,113,105,161,103, 46,228, + 12, 28, 53, 98, 32,159,145,183, 10, 2,128, 15,222,127, 91,252,211,177, 95,190, 25,220,255,165,194,136,238, 33,121,111, 76,251, +206,183, 57,197, 85, 96, 96,224,197, 51,103,206,120,136,197, 98,148,151,151,187,108,219,182,237,203,238,221,187,243, 51, 50, 50, +112,255,254,125,100,103,103, 67,173, 86,163,107,215,174,182,247,238,221,219, 8,160,193, 2,235,219, 67,248,248,179,133, 30, 27, +220, 60,221, 2, 76, 6,189, 27,171, 47,110,123,254, 76, 66,251, 67,251, 53,157,220, 21, 62, 33,227, 38, 76,199,194, 37,159, 11, +143, 28,220,177, 20, 49,103, 17,219,216, 40,254, 60,188,252,143, 15, 23,161, 82,163,199,132, 55,223,198,196, 9,111,187,112, 22, +131, 39,103,209,201, 13,186,114, 71, 7, 81,202,137, 29,219,246, 71, 1,240,121,162,200, 58, 79, 69, 86,253, 86, 48, 76,183, 87, +190,248,194,189,195,204,153,146,132,229,203,107, 74, 47, 93,210,182, 24, 58,180, 60,124,198, 12, 61, 0, 84,101,103,139, 82,151, + 45,147,185, 69, 68,216,244,252,191,255,115, 52,105, 52,138, 21,159,124,210,117, 41,112,163,185,153, 1,227,199,155,215, 28, 62, +220, 37,238,179,207,250, 98,229, 74, 65,191,240,240,219, 75,190,251, 46,223,154,204, 85, 12,211, 61,242,155,111,220,219,189,245, +150,228,230,162, 69, 53,234, 27, 55,180, 65, 81, 81,170, 46,115,231, 26, 32, 16, 64,147,159, 47,204, 88,190, 92,238,208,173,155, + 77,143, 15, 62,112, 52, 27, 12, 30,209,203,150,117,107,172,135,104, 5,195,116, 27,178,110,157, 91,135, 25, 51, 36, 9,171, 86, +213, 20, 92,184,160,175, 12, 13, 69,199,215, 94, 43,243,118,113,209, 63,235,182, 63,153, 89, 26, 19,243,135,247, 39,169,239,101, +160, 1, 45, 91,182, 44, 78, 73, 73,113, 63,116,232,144, 85, 5,150,151,151, 23,122,247,238,173, 76, 74, 74,242,104,228, 5, 49, + 47, 47, 47,207,135,101, 89,136,197,226, 70, 87,172,170,170, 10,137,137,137, 24, 55,110, 92,126, 97, 97, 97,131, 47,186, 78, 78, + 78,118, 78, 78, 78,153, 49, 49, 49,174,247,238,221,195,205,155, 55, 17, 24, 24, 8, 39, 39, 39, 8,133, 66,152, 76, 38, 84, 85, + 85, 33, 56, 56, 24, 50,153, 12, 67,135, 14, 45, 85,169, 84,129,229,229,229, 13,190,136,249,251,251, 75,132, 66, 97,218,161, 67, +135,124,195,194,194,112,227,198, 13,248,250,250, 66,161, 80, 0, 0,178,179,179,113,229,202, 21, 68, 70, 70, 34, 41, 41, 9, 51, +102,204,200, 51,153, 76, 33, 15, 30, 60,208, 55,120,186, 32, 52,180,240,192,129, 3,249,173, 91,183,214,213,212,212,240,139,139, +139,133,151, 46, 93, 98,171,171,171,109,213,106,181,176,162,162,130,169,168,168, 16,214,212,212, 8,249,124,190, 72,175,215, 11, +227,226,226, 4, 42,149,170,209,129, 45, 91,181,106, 85,124,255,254,125,247, 99,199,142,161, 93,187,118, 56,116,232, 16,230,207, +159,143, 43, 87,174,192,199,199, 7, 7, 15, 30,196,252,249,243,113,255,254,125,184,185,185,161,127,255,254,141, 62, 71, 0, 16, + 20, 20,148,158,152,152, 24, 36, 22,139,145,145,145,129,252,252,124, 68, 68, 68,192, 98,177,160,168,168, 8,105,105,105, 40, 40, + 40, 64, 80, 80, 16,222,124,243,205,140,135, 15, 31, 6, 55,213,208,194,195,195, 75,206,159, 63,239,218,190,125,123, 20, 21, 21, +193,209,209,177,238,203,193,193, 1,142,142,142,104,209,162, 5,230,205,155,135, 14, 29, 58, 40, 31, 60,120,224,209, 84,241, 19, + 22, 22,118,230,194,133, 11,174,206,206,206,208,233,116,208,233,116,117, 31, 14,100, 50, 25,132, 66, 33, 0, 32, 45, 45, 13,195, +134, 13, 43,201,204,204, 28,210,140,226,136,239,225,225,113, 63, 33, 33, 33,196,206,206, 14,121,121,121, 72, 74, 74,194,180,105, +211,210,106,106,106, 90,227, 47,184,110,232, 63, 41,180, 5, 22,223,187,155,220,170, 77,155,208,138, 73, 83,223, 17,142, 28, 62, +178, 38,254,250, 89,147, 80,127,177,250,149,222, 14, 5, 0,112, 62,174,202, 93, 47,236, 45,234,220,117, 48,239,232,209,163,210, + 29,219,191,103,238,222, 77, 86,180,105, 27,154,146,156,133, 85, 13,101,191,218,215, 97,210,252,217, 67, 66, 35,122, 70, 48,149, + 53,156, 98,203,214, 31,186, 62,200,201,244, 0, 0,255,151, 2,139,167, 77,125,251,134,189,156, 87,116,233,202, 37,118,205,215, +167,147,127,190, 88,177,211,138,222,229, 64, 95, 95,223,107,219,182,109,115,117,117,117,133,131,131, 3, 52, 26, 13,140, 70, 35, +238,221,187,167,219,183,111,159,201,222,222,222,174,168,168, 8,229,229,229, 96, 24, 6,113,113,113,185,197,197,197,245,125, 18, +172,187,217,231,192,129,104,166, 79,103, 63, 39, 17,159,179, 17,155, 83,188, 24, 1, 39,230,193,209,227,124,108, 92,135,139,177, +151, 38, 12, 29,254,134, 91,143,158,253,240,249,170,133,166,236,188,188,142,143, 79, 23,254, 91, 91,104, 29,128,254,163, 70, 71, +141, 93,177, 52, 26,209, 43,150,227,196,241,159, 42,108,109,248,122,123, 59,161, 67, 68,175,158,186,121,115, 94,207,211, 84,169, +125,191, 92,187,102,252,160, 33, 81, 62,221, 95,238,139,184,171, 23,113, 96,239,230,155, 34, 9,157, 46,124, 82, 52,224,228, 24, + 24,248,206,236,180, 52,209,157,232,232,106,182,160,160,188,243,220,185,165,245, 45,155,127,238,156, 92,236,229,101,239, 50, 98, +132,211, 90,127,127,152,148,202,239,235,187,134,168,190,204, 27,158,158,142, 71, 98, 98, 6, 88, 24,166,207,172,217,179,109, 6, + 14, 28,136,202,202, 74,156, 56,113, 2,123,118,239,214, 43, 20,138, 68,199, 27, 55,110, 7, 22, 22, 46,174, 47,243, 19,192,217, +174,101,203,233,179,146,147, 69,241,139, 23, 87, 67,165, 82,133,207,153, 83,102, 54,155,121,211, 87,173, 26,154, 89, 88,216,167, +184,180,212, 31, 0,220, 29, 29,243, 90,123,122,198,111,216,185,243,222,215,173, 90,113,213, 5, 5,223, 71,215, 51, 7,233,211, +235,185,239,202, 21,143, 83, 37, 37,127,115,114,114,178, 41, 45, 43, 19,136,132, 66, 85,167,144,144,125,159,207,153, 19,171,189, +121, 83,252,172,219,222,121,238,220,210, 10,141,134,249,104,195,134,158, 5,101,101, 47,213, 24, 12,193, 21,213,213, 10,214,104, +228,219,217,216,148,189, 20, 20, 84, 92,121,225, 66,145,127,117,245,123,235, 53, 26, 37,181,202, 63,216,131,197,227,241,192,113, +156, 85,197,149, 80, 40,252,221,105,168, 70,136, 4, 2, 1,110,220,184, 1,165, 82,137,118,237,218, 33, 32, 32,224,119, 11,100, +102,102,226,228,201,147, 40, 47, 47, 71,167, 78,157, 0, 64,212, 88,160,157,157,221,251,139, 22, 45,114, 52, 24, 12,136,143,143, + 71,167, 78,157, 32,149, 74, 33, 20, 10, 33, 18,137,192, 48, 12, 20, 10, 5, 74, 75, 75,225,225,225,129,153, 51,103, 58,108,216, +176,225,253,242,242,242, 21, 13,101,114, 28, 55,123,220,184,113,238, 97, 97,143,238, 66,205,203,203,171, 93, 23, 0,128,187,187, + 59,110,223,190,141, 78,157, 58,193,195,195, 3,145,145,145,238, 71,143, 30,157, 13, 96, 77,131, 27, 46, 18,241, 91,183,110,221, + 5, 0,228,114, 57,248,124,126,170,189,189,189,155,135,135,135,220,222,222,254,223,182,113,219,182,109,106,177, 88,108,178,102, +167, 22, 21, 21, 33, 44, 44, 12,106,245,163, 99,169,166,166, 6,193,193,193,168,168,168, 0, 0,232,245,122,120,121,121,213, 21, + 32, 13,105,223,190,125,116,235,214,173, 95,145,203,229, 18,134, 97,144,144,144,128,240,240,112,236,219,183, 15,254,254,254,144, +201,100, 72, 73, 73, 65,251,246,237, 17, 27, 27, 11, 55, 55, 55,180,109,219, 86,226,238,238,126, 89,165, 82,197, 60,120,240, 32, +186,145,158, 54,190,173,173, 45, 98, 99, 99,177,117,235, 86,100,101,101,161,160,160, 0,246,246,246,232,216,177, 35, 66, 67, 67, +209,179,103, 79,164,167,167,131,215,116, 99, 82,132,132,132,156,184,113,227,134, 43,159,207, 71,108,108, 44, 52, 26, 13,116, 58, + 29, 88,150, 5,143,199,131, 84, 42, 69,143, 30, 61,224,226,226,130,144,144, 16, 28, 57,114,196,109,208,160, 65, 39,139,139,139, + 59, 2, 40,106,106,159, 58, 57, 57,189,183,116,233, 82, 95, 15, 15, 15, 84, 85, 85, 65,163,209,192,203,203, 11,131, 6, 13,242, + 62,121,242,228,123, 6,131, 97,237,115,245, 73,203,130,220, 54,109, 67,193,113,120,112,252,200, 46,206,199, 77, 26,214,183,147, +197, 61,245, 30,211, 35, 46, 46,169, 45, 0, 56,201, 3, 18, 66, 66,141,169,177,191,157,203, 63,113,108, 79,130,217, 12,126,104, +155,208, 86,124, 14, 15, 27,203, 46,205,231, 31, 61,115, 33,103, 96,251,246,189, 5, 27,190, 92, 54,114,250,212,193, 18,103,167, +222,188,202,252,253,184,114,235,142,255,146, 37, 31,186,175, 92,249,217,241, 51, 23,114,204,165,249,252,143,173, 89,223,160,151, +156,191, 58,244,133,208,181,170,106, 55, 18,210,109,193,179,105,143,128, 22, 65,168,172,172,132, 68, 34,145,142, 31, 63,222,188, +104,209, 34,141,157,157,157,236,113, 91, 86,242,249,252,193, 77, 6,223, 79, 6,219, 46,152, 21,218, 25, 44, 22,206, 86, 11, 93, +133,232, 78,122, 38,122,247,139, 44,238,218,169,227,170,207,214,172, 93, 28, 24,220,202,109,252,164,119,132, 95,124,190,248, 59, +128,235, 93,111, 76, 54, 46,240, 14, 29,177, 1,240,234,138,165,209,200,204, 76,115,154, 62, 90,189,156, 17,216,120,181,110,215, +199,238,187,109,231,134, 4,183,108,245,210,244,153,239,253,188,105,227,250, 87,159,236,201,218,187,123,211, 81,192, 60, 0,214, + 93,155,243, 34,104, 63,241,196, 9,104,114,115, 77,170,203,151,117, 3,190,254,186,180,211,164, 73,107,141, 38,147, 43,143,199, +251,221,165, 16, 60, 30, 15,176, 88,120,204,154, 53,124,206,203, 11, 38, 71,199, 41, 72, 77,109,217, 84,230,103, 38,211,232, 81, + 29, 59,190,186,101,215, 46,248,251,251,215,101, 58, 56, 56, 96,246,236,217,152, 57,115,166, 36, 49, 49,177,219,201,147, 39,187, +237,252,230, 27, 15,148,148,140,126, 58,208, 8,180, 27,127,236, 24,170,179,179,141,170, 27, 55,116,253,215,175, 47,187,248,219, +111,206, 31,126,243,205,146,118,225,225,222,223, 70, 71, 75,252,252, 30,221, 31,146,155,155, 27,188,126,221, 58,191,126,131, 6, +245, 92,248,193, 7,219,110,207,155,215, 6,143,166,100,107,112, 61,139, 46, 93, 50,156, 82,169,254,118,224,224, 65,199, 86,173, + 90,129,227, 56,164,167,167,187,111,221,186,245,157, 62, 51,103, 78,252, 96,220,184, 37,131,178,178,202,205,101,101,226, 97, 95, +125, 37,220, 59,118,108,219,166, 50,107,247, 39, 0,188, 54,127,254,251, 93, 95,126,185, 77,228,248,241,206, 94, 94, 94, 60, 27, + 27, 27, 24,141, 70, 20, 21, 21, 57,165,164,164, 4,157,175,168,168, 60,123,251,246,143,208,104, 6, 81,147,252,131, 5, 22, 0, +152,205,230,102, 21, 88, 86, 22, 89,117, 61, 94,165,165,165, 72, 74, 74,130,191,191, 63, 76, 38, 19,206,156, 57, 3,181, 90, 13, +145, 72, 4,145, 72, 4,131,193,208,100,150, 92, 46, 31, 24, 17, 17,193, 92,189,122, 21, 1, 1, 1,176,177,177,169, 43,172,106, +139, 44,161, 80, 8,133, 66,129,138,138, 10,244,234,213, 75,184,117,235,214,129,104, 96, 30, 64, 0,176,181,181, 29, 58, 98,196, +136,186, 46,182,154,154, 26, 8, 4,143,238,180, 54, 24, 12,168,170,170, 66, 89, 89, 25, 42, 42, 42,160,211,233,208,161, 67, 7, +241,133, 11, 23,134, 54, 86, 96, 61, 73,163,209, 84, 43,149, 74,199,222,189,123, 59,109,223,190, 61,165, 71,143, 30,191,187,104, +248,226,197,139, 58,189, 94,207,136,197, 98,171, 46,118,223,181,107, 87,221,190, 47, 40, 40,192,247,223,127, 15,139,197, 2, 30, +143,135,180,180, 52,108,216,176,161,238, 90,185,198,158,163,214,173, 91, 71,254,248,227,143,157,119,238,220, 89,206, 48, 12, 82, + 82, 82,176,123,247,110,112, 28, 7, 87, 87, 87,104, 52, 26, 40,149, 74,172, 93,187, 22, 70,163, 17,182,182,182,240,246,246,150, +206,158, 61,187,215,242,229,203,133,141, 21, 88,102,179,217, 44, 16, 8,224,231,231,135,165, 75,151, 66,167,211, 65, 36,122, 84, + 87, 86, 86, 86, 66,173, 86, 35, 62, 62, 30,217,217,217,176, 88, 44,141,190,177, 72,165,210, 49, 59,118,236,112, 23,139,197,208, +233,116, 72, 75, 75, 67, 70, 70, 6, 82, 82, 82,244, 42,149,138,181,181,181,229,121,122,122, 10, 42, 42, 42,196,147, 38, 77,226, + 85, 85, 85,129,227, 56, 68, 69, 69,185,108,217,178,229,117,131,193,176,174,137, 93,234,166, 80, 40,254, 49,125,250,116,105,237, +126,179, 88, 44, 40, 41, 41,193,216,177, 99,101, 49, 49, 49,139, 12, 6,195,110, 0, 37,207,203, 11,193,147,119, 11, 86,157,249, +210,229,236,217,111, 95, 74,189,199,244, 16,160,172, 91,120,159,247, 24, 0,184,127,115, 91,207,244,228, 27,102, 91, 11, 47,243, +231,221,107,174,217,133,188, 83, 6,224,104, 99,189,128, 67,123, 57, 14,145,201, 69, 81,163, 70, 12,228,111,217,250, 67,215,233, + 83, 7, 75,220, 59,252,192, 3, 0, 39,137, 15, 94, 54,125,192,215, 25,106,164, 91,182,254,208,117,212,136,161,215,179,115, 30, +172,117, 81, 56, 30, 57,249,171,250,116, 99,189,132,158,174,140,183,147, 77, 41,156,124, 7,194, 63,212, 9,241,241,241, 56,122, +248, 42,130, 91,117,129,193, 96,128,201,100,146, 15, 27, 54, 76,115,240,224, 65, 93, 89, 89, 89,149,209,104,236, 83, 88, 88,152, +218,100,125,133, 82, 75, 7,190,197, 40, 54, 11, 89,109,141,184,102,206,146,195,175,119,125, 57,178,147,179,159,183,208, 69,202, + 30,239,219, 39, 98,215,158,157,223,207,251, 96,225, 74,116, 8,239,241,242, 28,209,111,109,191,218,101,186, 83, 95, 86,114, 14, + 78,240,143, 28, 97, 51, 83,211, 95,125,144,151,147,223,210, 87, 97,200,200,229, 76,239, 45,250,110, 80,239,129, 99,218, 7,181, +234, 46,190,123,255, 42,111,222,220,121,123,190,252,114,245,248,218, 34,235, 82,236,153, 62,209, 83,114,196,209,219,161,167,183, + 40, 64, 36,145,248,216,250,251, 51,217,219,183,107, 3,135, 15, 47, 7, 0, 19,203,186,198, 93,191,238, 32,147,201,192,113, 28, + 76, 38,211,239,174, 17,174,189, 46,120, 96,223,190, 30,214,100,230,125,251,109,251, 89,179,102,161,168,168, 8, 44,203,214,245, +126, 63,241,154,141,202,202, 74,140, 30, 61, 26,219, 54,110,172,247,188,184, 80, 34,241,181,245,245,101,178,183,111,215, 6,189, +250,170, 10,102, 51,111,225, 55,223, 44,253, 96,193,130,128,177,175,191,254,187,207,141,161,161,161,248,118,227, 70,241,238,221, +187,189, 63,219,184,113,106,164, 68,146, 9,189,190,209,245,172,106,219, 22, 78, 73, 73, 54,173, 90,181,170, 43, 40, 67, 66, 66, +240,249,231,159, 75, 38, 76,152, 32,158, 60,113,226, 23,119, 91,181, 90, 31,157,157,157,238,210,178,165, 61, 35,145,248, 52,149, + 89,187, 63, 1,160,218, 96, 8,139, 94,185,210,233,250,245,235, 40, 40, 40, 0,199,113,117,127,167,125,251,246,188,215, 95,127, +221,161,123,231,206, 93,169, 69,254, 73, 61, 88,245, 21, 88, 13, 21, 90,214, 22, 87, 79,255, 13, 79, 79, 79, 24,141, 70,252,240, +195, 15,117,133, 85,221, 39, 2,163,177,201, 12,157, 78,215, 78,161, 80,160,178,178, 18, 45, 91,182,172,203,168, 93,175,218, 47, +169, 84, 10,157, 78, 7,111,111,111,232,116,186,118, 77, 20, 64, 29, 29, 28, 28,106,123,179,160,127,220, 72, 13, 6, 3,212,106, + 53,212,106, 53, 12, 6, 3,202,203,203, 81, 93, 93, 13,181, 90,141,170,170,170,112,107,182,217, 98,177, 32, 41, 41, 41,163, 85, +171, 86, 29, 5, 2, 1,108,109,109,229, 53, 53, 53,168,189,153, 64,165, 82, 97,199,142, 29, 53,147, 38, 77,114,141,139,139,211, + 90,179, 15,231,204,153, 3,137, 68, 2,141, 70,131,141, 27, 55, 98,206,156, 57, 16,137, 68,168,170,170,194,198,141, 27, 49,111, +222, 60, 48, 12, 3,189, 94,143,125,251,246, 53,252, 38,123,239, 94,118, 92, 92, 92,120,167, 78,157,156,142, 28, 57, 82, 50,112, +224, 64,183,193,131, 7,215,237, 59,150,101,209,173, 91, 55,180,110,221, 26, 74,165, 18,167, 78,157, 42, 13, 9, 9,113,189,126, +253,186,165,168,168,232, 65, 19,219, 93, 87, 52, 9, 4, 2,152,205,102, 20, 23, 23, 67,173, 86,163,164,164, 4, 5, 5, 5,200, +207,207, 7,195, 52, 61,114,136,139,139,203,107, 97, 97, 97,130,199,197, 22, 90,180,104,129, 15, 62,248,128,213,106,181, 99, 1, +156,122,188, 88,228,158, 61,123,142, 4, 7, 7, 51, 94, 94, 94, 72, 75, 75,131,155,155, 27, 99, 99, 99,243, 70, 83, 5,150, 66, +161,216,118,252,248,113,231,218, 59,104,107,105,181, 90,176, 44,139,113,227,198, 57,111,217,178,101,155,209,104, 28,250, 60,190, + 40,216, 58, 58, 50,175,244,118, 40,136,139, 75,106, 27,222,231, 61,198,185,229,178, 71, 5, 56,192,196, 95, 90, 31,222,187, 91, +216,238,218,235,178, 26, 51,106,128,219,154,225,145, 29,248, 19, 70,119,206,100,228,173,130,118,237, 88,239,225,236,212,251, 95, + 47, 20,140, 51,228, 82,160,181,191,153,127,237, 68,166,199,188,121,173, 12,187,191,251, 91,230,174,195, 55, 7,138,196, 9,253, +127, 58, 95, 50,175,161,236,187,153,166, 99, 21, 58,231, 80,135,138,195, 60,184,188,141,240,240,112,184,185,121,225,219, 77, 63, +194,251,165, 78, 48, 24, 12,176,183,183,151, 61,122, 25, 49,238,178,166,184, 2,128,232,232, 88, 75, 68, 68, 31, 35,227,230,202, +206,158,253,229,232,193,145,163, 67,251,244, 29,192,157, 59,119,218,248,114,168,177, 96, 64,159,238, 69, 23, 99, 99,211,138,138, + 30,134,180, 14,109,143,148,187, 55, 7,115, 28,146,120,188,250,123,155,238,102,225,180,142,119, 47,102,223,130,233, 22,173, 33, +222,102,213, 55,119, 34, 95, 29, 57, 57, 44,162, 87,111,203,185, 95,206, 26,196, 80, 39,219,246,122,249,225,228,137,111, 28,217, +183,255,208, 43, 49,191,156, 8,174, 80, 23,159, 88,243, 35, 21, 87,117, 31,206, 88,214,131,145, 72,248,197, 49, 49,108,135,105, +211,234,246,139, 76, 38,195,209,163, 71, 33, 22,139, 33, 18,137, 32, 22,139,235,190, 68, 34, 17, 20, 10, 5,120, 28,199,111, 78, +102, 97, 97, 33,138,138,138,224,224,224, 0, 55, 55, 55, 20, 21, 21,225,202,149, 43, 72, 75, 75, 3,195, 48,136,140,140, 4,191, +129,247,205,167, 50, 13,127, 91,177, 98, 72,219,246,237,189,158, 46,174,106,223,219, 84, 42, 21,250,244,233,195, 59,119,238,156, +219,165,204,204,145,208,235,127,108, 44,179,221,136, 17,101,202,243,231,235,253,219,109,218,180,225, 29, 57,122, 84, 50,126,220, +184,185,159,111,218,180,110,201, 23, 95, 20,129,101, 21,205,217,118, 30,143,199,231,241,120,240,245,245,133, 74,165, 66,117,117, +117,109,135, 3,156,156,156, 96, 50,153, 96,177, 88,132,212, 34,173,199,111,170, 24,120,186,144,106,232,139,207,231, 63, 83,145, +213, 24,107, 10,172,218, 34, 67, 34,145,252,238,224,170,253,122,242,224,171, 45, 98,172, 32,168,172,172,196,225,195,135,161, 82, +169, 80, 85, 85,245,187,226,170,182,231, 42, 43, 43, 11,123,246,236,193,195,135, 15, 33, 16, 8,172, 26,180, 53, 43, 43,235,102, + 64, 64, 64,199,218, 30,177,126,253,250,249, 92,190,124,185,160,182,152, 91,188,120,113,105,247,238,221, 93,159,126,115,111,116, +101, 5, 2, 92,185,114, 5, 26,141, 6, 28,199, 65, 36, 18, 33, 37, 37, 5, 44,203,130,227, 56, 48, 12,131,146,146,146, 38,123, +176,146,146,146,222,154, 58,117,234,186,105,211,166,197, 44, 92,184,240, 92,255,254,253,243,120, 60, 30, 76, 38, 19,236,237,237, +161, 80, 40,144,154,154, 10,173, 86,139,247,223,127, 63,119,231,206,157,191,108,220,184, 49,102,243,230,205,235,242,243,243,167, + 54,231,185,101, 89, 22, 53, 53, 53, 40, 47, 47,135, 74,165, 66,101,101, 37,116, 58,221, 51,181,161, 1, 3, 6,224,196,137, 19, +130, 1, 3, 6,108,241,247,247, 47,242,247,247, 47, 26, 48, 96,192,150, 99,199,142, 9,188,189,189,145,151,151,135,248,248,120, +168, 84, 42, 88, 44, 22, 94, 19,189,171,253, 38, 78,156,216,203,207,207,143,103, 52, 26,161,215,235, 97, 48, 24, 96, 52, 26, 97, + 54,155,145,155,155,139, 54,109,218,240,253,252,252,122, 0,232, 71, 47, 33,205, 83,153,191, 31,156,242,107,112,170,189,176, 40, +191, 65,141,238,217,114,202,203,203, 63,126,247,147, 10,165,185, 34, 6,247,110, 29, 70,149,150,129, 79,112, 63,188, 51,109, 28, +126,187, 30,131,178,178, 50, 36, 39, 39, 35, 34, 34, 66,196,227,241,154,213, 54,247,238, 61, 97, 30, 63,238,255, 94, 31, 48,120, +116,231, 1, 3,135,154,207,157, 59,175,191,113,237,244,205,224, 0,123, 37,199,170,139, 29,236,101,183,210, 83,147, 17,210,170, + 13, 76,172, 37, 2,136,110,180, 77,101,102,194,240,115,145,167,249,245, 57, 73, 19, 7, 15,159,210, 97,192,192,193,166, 51,167, +143,155, 47,159, 61, 24, 63,184,223, 75,177,159,174,222,237,171, 50,181,108, 43,181, 87,156,236,209, 81,214,123,198, 40,191,233, +212, 82,234,233,117,146, 74, 45,120,252,186,201,227,241, 96,177, 88,126, 87, 84, 61,253,101,205,123,210,147,153,181, 56,142,131, + 90,173, 70, 90, 90, 26, 86,175, 94,141,219,183,111,195,108, 54,215,245,100, 53,248, 62,244,248,148,174, 72, 42,181, 0, 64,102, + 97, 97,159, 89,179,102, 73,234, 43,174,202,202,202, 80, 90, 90,138,135, 15, 31, 34, 50, 50, 82, 84,233,236,220,177,169,245,244, +118,119,215,203,164,210,226,212,212,212,127, 91,223,170,170, 42, 72, 36, 18,124,253,205, 55,162, 19, 73, 73,115, 46, 95,185,226, +216,156,253, 89,155,195,227,241,224,238,238,142,160,160, 32,132,135,135,163, 93,187,118,144, 74,165,184,123,247, 46,190,255,254, +123, 8,120, 60,150, 90,226,159,208,131,213, 80,129, 85,223,255, 25,134, 65,115, 10, 2,107, 89,115,138, 80, 42,149,222, 41, 46, + 46,238,233,227,227, 3,147,201, 84,215,123, 85,123,154,176,246,123, 0,144, 72, 36, 72, 78, 78,134, 84, 42,189,211, 88,166, 76, + 38,187, 35, 16, 8,122,116,233,210, 5, 71,142, 28, 65, 76, 76, 12,178,178,178,160,213,106,161,211,233,160,213,106,113,247,238, + 93, 88, 44, 22,132,133,133,193,193,193, 1, 50,153,236, 78, 83,235, 90, 83, 83, 83,200, 48, 76, 43, 27, 27,155,127,157,234,240, +244, 68,105,105,169,197,100, 50, 97,199,142, 29,149, 10,133, 66,110, 99, 99, 99,245,254,228,241,120, 80, 42,149,240,245,245, 69, +101,229,163, 97,190,170,170,170,224,238,238, 14,163,209, 8,139,197, 2,189, 94, 15, 91, 91,219,186, 46,223,198, 58, 4,211,211, +211, 63,120,226,251, 46, 99,199,142,221,179,111,223,190, 22,191,252,242, 11,174, 95,191, 14, 87, 87, 87,124,242,201, 39, 89, 57, + 57, 57,227, 1,252,166, 84,254, 63,246,174, 59, 60,138,234,237,158,153,237,233,189, 46, 9, 36, 33, 36, 33, 9, 37, 36,160,244, + 42, 16, 64, 1, 41, 42, 8,136, 8, 40,162,136, 82, 68,169, 34, 72, 19,108, 72, 7,233, 82,165,151, 64, 2,129, 72, 47,105,132, +244,178,233,125,179,125,103,230,126,127,144,240, 11, 24,146, 77, 64, 63,203,156,231,217, 39,187,147,153, 51,183,205,189,103,222, +247,222,247,254,245,243, 29, 75, 74, 74, 14,198,198,198,190, 28, 22, 22,246,184,119,232,217,179, 39,213,179,103, 79,199,218, 38, +253,146,146, 18,220,189,123, 23, 81, 81, 81, 48, 26,141, 72, 72, 72, 96, 53, 26,205,222,250,250, 28,185, 92,190,253,203, 47,191, +180,100, 24, 6, 2,129, 0, 34,145, 8, 12,195, 64, 42,149, 62,182,212,102,101,101, 97,216,176, 97, 54,235,214,173,219,166,211, +233, 90, 2, 48,252,155, 58,133,170,242,114, 38,226,119,165,179,157,133,215,221,196,155,219,186, 4, 84,247, 19,137, 55,183, 50, + 50, 11,143,107,215,238,106,172, 58,201,202, 27,236,104,143, 68, 20,125,106,208,223, 24,112,250,252,253, 97, 51, 63,158, 36,105, +222,194,167,224,202,173,251,205, 59, 27,103,210, 22, 50, 64,165, 5, 74, 43,128,196, 76, 1,215,188,133, 79,193,141, 91, 15, 36, +171,215,110,246, 81,171,244, 53, 46,194,103, 66,161, 80,104, 47, 19, 50,116,230, 26,243,168, 55,198, 8, 36, 18,153, 61,148,165, +201,104,222, 92,142, 81, 67,187,224,135, 77,103, 97, 99,107, 7, 23, 23, 23, 80, 20,101,209,136,236, 83, 49, 17,183, 39,190,253, +206,228,151,250,189, 18,206,158, 57,123, 18, 17,103, 14, 93,219,190,118,238, 33,131, 80,105, 65,179, 85,102, 30,205, 92,239,165, +167, 37,189,213,189,231, 43,144,153,153,183, 4, 2,234, 28,197, 91,183,192,219,160,225, 9, 14, 89,135,118, 46,148,189,253,206, +123,157,251, 15,124,149, 57,115,234, 8,206, 28,251,229,247, 5, 31,182, 56,153,118,119,183, 56,230,122,142,108,232,136,169,101, +199, 35, 18,244,175, 47,246, 74,114,111,213, 94, 3,164,241,163, 83,205, 11,164, 80, 88,192,232,116, 30,205,250,247, 23,168, 51, + 51, 69,150, 46, 46, 76,205, 75, 90,237,151,234,167, 45, 88, 52, 77, 3, 52,205,153,194,105,106, 90, 52, 26, 13,184,103,196, 62, +164,106, 56, 7, 14, 20,168,115,114, 68,133, 37, 37, 45, 90,180,104,241,196, 57, 70,163, 17, 37, 37, 37,143, 63,229,229,229,144, +201,100, 40, 53, 26, 93, 76, 73,103,247,182,109,119,172, 89,189,250,211,141,155, 54, 61,118,245, 40,149, 74, 84, 86, 86,162,162, +162, 2, 52, 77, 99,214,236,217,210,217,139, 23,127, 48, 88, 40,156, 1,134, 49,185, 60,107, 94,214,105,154,134, 80, 40, 68,102, +102,230,227, 79, 86, 86, 22,100, 50, 25, 8, 69,113,124,139,124, 1, 2,171,102,146,123, 67,226,170,230,187, 64, 32, 48,205,220, + 91,253, 38,240,162, 44, 88, 42,149,234,124,116,116,116,167,254,253,251, 11, 99, 98, 98,224,230,230,246, 7, 55,161, 80, 40, 4, + 69, 81, 48, 55, 55,199,169, 83,167, 12, 42,149,234,124, 3, 15, 81, 68, 68, 68, 68,232, 39,159,124, 34, 26, 63,126, 60,226,226, +226, 48,101,202, 20,148,149,149,161,178,178, 18, 37, 37, 37,208,104, 52,232,212,169, 19,100, 50, 25,146,147,147,141, 26,141,166, +161, 80, 5,164,176,176,176,202,201,201,201,237,233,127,140, 24, 49,194,229,167,159,126, 82, 39, 38, 38, 26,187,116,233, 98, 13, +160, 81,130,117,207,158, 61,143,235,236,193,131, 7, 88,191,126,253,227,121, 8,183,110,221,194,170, 85,171,192,178,172, 41, 2, +235,105,220, 40, 46, 46,102, 12, 6, 3,124,125,125, 33,151,203,161,209,104,176,110,221, 58, 6,192,141, 63,163, 65,154, 98,193, +210,106,181, 7,198,141, 27, 55,251,206,157, 59,110, 98,177,184,198,116, 13,142,227, 96, 48, 24,144,145,145,129,132,132, 4, 36, + 39, 39,163,184,184, 24,132, 16,232,245,122,220,186,117,171,220,104, 52,238,127, 22,175,147,147,211, 23, 91,182,108,113, 53, 51, + 51,251, 67, 96,221,154, 78,167,198,245,234,236,236,140,158, 61,123, 58, 95,184,112,225, 11,131,193, 48,255,159,222, 17,212, 68, +104, 39, 28,146,195,223,154,201, 77,157, 50, 81,220,170,181, 33, 41, 57,225, 58,123,251,210,186, 16, 0,144, 89,120, 92,107,229, +223, 33,254,114,172, 37, 55,232,237, 89,237, 3,188, 33,160, 8,252, 41,130,226,167, 35,190,215,188,163,157,140, 46, 63,217,209, +199, 46,250,200,111,231,127,156, 51,115,210,245, 47,191,156,227,172,213,171,100, 1,205, 89, 26,120, 36,174, 98,226, 44,180, 75, +150, 76,186,190,124,245, 14, 46, 43,197, 48,227,122,106,249, 51, 87,248,214, 22, 45, 52,157, 43,115,245,153,145,235,213,170,119, +139,123,191,111,160, 28,173, 5,176,106, 61, 24, 3, 7,188,130,115, 17,209,200,204,211,160,250, 5,160,222,176, 7,173,155, 99, +108, 13, 39, 69, 67, 54,118,194,123,221, 7, 14,124,149,156, 60,241, 27,115,228,215, 95,162,247,236, 93,181,159, 22,139,133, 6, +206, 90, 79, 9,180,229,172,192, 54, 78, 85, 81, 10, 0, 16, 9,197,214,245,248, 7, 60,227,227, 18,253, 3, 3, 3, 92,199, 78, +152,108, 19, 62,240, 53,114,242,228, 17,110,255,174, 29, 23,247,127,215,102, 23,103,172, 20,231,101,168,165, 21, 74, 99, 5, 17, + 72,108,171,148,156,186, 64,219, 82,235,254,251, 8, 3,112,128, 31,157,106,198, 1,157, 46,167, 42, 59,219,205,190, 71, 15,105, +242,194,133,230, 46,157, 58,105, 41,138,106, 80, 96, 9, 4, 2,144,103,204,227,123,154,179, 49, 2,139, 80, 84,157,139,143, 88, +157, 46,187, 42, 51,211,205,177, 71, 15, 89,202,252,249,230,117, 89,237, 75, 74, 74, 80, 90, 90,250,132,192,170,238,107, 76, 74, +231,202,143, 63,254, 61,108,252,248,210,152,152, 24,151,151, 95,126,153,170,172,172,124, 44,174,106,190, 59, 57, 57, 81,158, 45, + 90, 88,157, 87, 40,124,234,154,131, 85, 87,121,154,146,119,154,166,159, 89,158, 60,158,195,130,101,170,192, 50, 97,112, 52, 26, +141, 70, 56, 59, 59,163,184,184, 24, 28,199, 61,179, 34,205,204,204,106,124,192,245,174,164, 83, 42,149,107,151, 44, 89, 50,173, + 87,175, 94,142, 1, 1, 1, 40, 42, 42,130,179,179, 51, 4, 2,193,227,116,213,240,197,198,198, 98,223,190,125,149, 74,165,114, +109, 3,249,254,246,231,159,127,254, 32, 60, 60,220,222,201,201, 9,118,118,118,184,119,239, 30,108,109,109,161, 84, 42,241,224, +193, 3, 88, 89, 89,129,162, 40,232,116, 58, 92,186,116, 73,201,113,220,183, 13, 60,152,228,202,149, 43, 6,115,115,243,123, 37, + 37, 37,130,226,226, 98, 65,117,120, 6, 81, 69, 69,133,232,244,233,211,142, 54, 54, 54,234, 11, 23, 46, 20,121,122,122, 10,210, +211,211, 5,122,189,190, 65,149, 69, 81, 20, 62,254,248, 99,136,197, 98,232,116, 58,172, 93,187, 22, 51,103,206,132, 80, 40,132, + 94,175,199,138, 21, 43, 48,111,222,188,199,130,249,216,177, 99,141,106, 32, 53, 19, 72, 13, 6, 3, 12, 6, 3,140, 70,227,159, +218, 32, 77,116, 17,230, 63,124,248,112,112, 88, 88,216,217, 35, 71,142, 56, 88, 91, 91, 35, 55, 55, 23, 69, 69, 69, 40, 40, 40, + 64, 97, 97, 33,148, 74, 37,116, 58, 29,108,109,109,145,153,153,137,179,103,207, 86, 86, 85, 85,189,130,122, 86, 16, 10, 4,130, +113,221,187,119, 23, 62,157, 6,154,166, 31,183, 39,145, 72, 4,137, 68, 2,133, 66,129,238,221,187, 75,162,162,162,198, 1,248, +199, 11,172,154, 8,237, 65, 65,173,157, 6,191, 58,198, 16,218,177,127, 85,212,141,115, 57,150, 28,149,218,173, 83,240,110, 0, +184,118, 87, 99,117, 57,214,146,107,215,161, 47, 53,104,176,166,253,246,173, 27, 37,241,113,241, 94,129,193,129,245, 70,244,119, +108,198,189,214,191,119,139, 60,107, 11, 74,184,100,201,242, 99, 91,182,110,234, 24,115,252,127, 97, 26,150, 44,121, 20,166,161, +127,239, 22, 76,252,131,164,215,144,138, 95, 76, 21, 45,131, 7,247,191,189,101,219, 62, 40,146,143,185,127,251,169,153, 4, 37, +133,128,121, 7,116, 15,117,192,205,205, 9,184,123,247,110, 62,199,113,245,187,114,105,120,198,198,198,251, 7, 5, 7,186,190, + 61,225, 61,155,240,240,215,112,242,228, 81,236,220,182, 49,234,101,219,144, 45,153, 55,138, 5,114,127, 59,177,185,173, 68, 44, + 20,203,132, 98,161,184,216, 96,124,100, 93, 23,138, 69,214,192,200,122, 7,157, 41,147,199,216,244,238,247, 26, 78, 84,115,126, +217,126,196,102, 47, 97,107,170,211,167, 43,167,122, 53,247,106,174, 82, 23, 84,210,180,196,160,213,113, 86, 43, 55,103,172, 73, + 77, 25,151, 10, 96, 53,248, 85,132, 53,184,183, 51, 60,188,227,244,148, 20,177, 83,215,174,102,185, 23, 47,154, 63,237, 34,172, + 75, 96, 9,133, 66,128,166, 25, 83, 56,169,115,231,104, 0, 16,139,197,207,124,177, 23,139,197, 80,171,213, 96, 40,170,206, 19, +196,192,189,157,131, 7,119,154,158,146, 34,178,239,213,203,220,233,206,157,172,244,244,116,191,144,144, 16,176, 44,251,132,229, +170,230,163,213,106,161,215,235, 33,147, 74, 99, 77, 73,103, 66, 66, 69,103, 0, 0, 32, 0, 73, 68, 65, 84,193,165, 75,218,121, + 19, 38,204,255,224,253,247,191,219,183,127,191,204,218,218, 26,149,149,149, 80, 42,149,143, 63, 58,157, 14,161, 97, 97,162, 95, + 30, 60, 24,139,178,178, 5,166,148,167, 75,175, 94,234,134,250,228,106,193,202,187, 8, 27, 1,186, 33, 11,214,115,134,105, 8, +126,138,115,222,192,129, 3,181,105,105,105,240,240,240,120, 44, 82,106,223,211,218,218, 26,182,182,182,136,143,143,199,150, 45, + 91, 52, 20, 69,205,171,143,179,172,172, 76,169,213,106, 71,191,241,198, 27, 26,145, 72, 4,127,127,255,199,110, 29, 66,200,227, +185, 87,177,177,177, 24, 55,110,156, 90,171,213,142,174, 35, 6,214, 19,156,153,153,153, 21, 42,149,234,173, 49, 99,198,168, 19, + 19, 19,209,173, 91, 55,220,185,115, 7, 42,149, 10, 85, 85, 85, 72, 79, 79, 71, 96, 96, 32, 12, 6, 3, 14, 28, 56,160, 86,169, + 84,111,101,102,102, 86,212,199,169, 84, 42,135,124,243,205, 55,130,147, 39, 79,122,185,187,187, 7,133,133,133, 5,244,238,221, +187,229,176, 97,195,154,135,135,135,187,181,106,213, 74,219,191,127,127,167,129, 3, 7, 58, 9, 4, 2, 81, 74, 74, 74, 30, 33, +100, 96,125,156,181, 5, 64, 82, 82, 18, 12, 6,195, 31,230, 92,213,172, 38,100, 89,214,164, 58,170, 75,100,215, 8,171, 26,161, +101,130, 37, 44,184,142, 52, 54,120,145, 68, 34,169,177,112, 18, 19, 56,239, 36, 36, 36,244,235,220,185,243,237,113,227,198, 41, +179,178,178, 32, 22,139, 33,151,203,209,188,121,115, 88, 88, 88,160,180,180, 20, 7, 14, 28, 80,159, 58,117, 42,182,178,178,178, + 39,254, 24, 3, 43,248,169, 52,166,215,213,185, 10, 4,130, 63, 8,172,154,157, 2,104,154, 78,111, 76,121, 54, 17,127, 25,231, +228, 73, 99,237, 7, 13,121,205,234,232,209,163,178,245,235, 55,199,119,235,246,222, 14, 75,183, 15, 78, 91,186,125,112,186,211, +203,239,238,254,254,231,109, 15, 15,255,246,155,217,160, 65,195,108,166,190, 55,214, 29, 20, 37,108,136,211, 92, 42,237,212,253, +165, 86,229,151,174, 92, 98,150,175,222,193,118,233, 22,126,237,187,239,127,222,255,221,247, 63,239,239,210, 45,252,218,242,213, + 59,216, 75, 87, 46, 49,221, 95,106, 85,110, 46,149,118, 50, 37,157, 83, 38,143,177, 25, 20,254, 26,142, 31, 63,204,236,217,177, +118,197,209, 72,125,143, 17,179,181, 5,153, 15, 35, 8,242,151,194, 89, 18,141,172,172,172, 10,134, 97,122,213, 49,193,189, 78, +206,169,239,141,169, 45,174, 46,197,167, 99,211,198,219,183,217,159, 38, 44, 52,238, 62,115, 88,115, 60,234,118,101,212,205,172, +178,162,135, 21,169, 42,101,165,158,227, 56, 16,142, 21, 44, 90, 4,170,190, 58,234,210,165, 39, 46,156,219,141, 29, 91, 55, 84, +112, 28,180, 35, 15, 28, 96, 71,254,180,144, 52,111,222,162,249,174, 93,187,169,193, 67,134,218, 16, 2,110,200,208,215,108,247, +236,218, 67,121,123,123,183,240,241,129,248,159,222,150, 94, 20,231, 66,160,172, 50, 51, 51,234,198,186,117,122,151,209,163,237, + 37, 46, 46,214,224, 56,170,161, 57, 88,117, 88,176,158,201,233, 98,111,175, 56,115,230, 12,252,253,253, 33,151,203,159,240,200, +136, 68, 34,120,122,122,194,201,201, 9,103,207,158, 5, 1,110,214,197, 57, 23, 40, 47, 79, 77,141,188,182,114,165,206,101,196, + 8,187,246,222,222, 55,191, 91,183, 78,207,178,236, 99,171, 85,237,191,101,101,101, 96, 89, 22, 23, 47, 92,208, 87,105, 52, 91, +234, 75,231,173, 31,126,208,213,228,189,147, 86,171, 26, 26, 26,186,108,236,216,177,134,244,244,116,176, 44,139,218,150,172,194, +194, 66, 88, 89, 89, 65,163,213, 54,115,118,118, 54, 55,133,179,240,228, 73, 75, 52,208,175, 11, 4,130,167, 93,132,127, 70,189, +255,119, 44, 88, 12,195,192,195,195,227,137, 56, 35, 53, 19, 7,107, 44, 67, 38, 90,174, 0, 0,185,185,185,191, 48, 12,115,102, +236,216,177,243,219,183,111, 63,101,198,140, 25, 2,111,111,111, 84, 84, 84,192,206,206, 14, 78, 78, 78,200,200,200,192,193,131, + 7,217,242,242,242,159, 89,150, 93, 92, 88, 88, 88,100, 2,239, 69, 0,131, 95,121,229,149,125, 31,124,240,129, 77,143, 30, 61, + 68, 53, 3,224,253,251,247,113,242,228, 73,195,222,189,123, 43,181, 90,237,104, 83,162,184, 3, 64,126,126,254, 89, 0,175,143, + 31, 63,126,215,176, 97,195,172,180, 90,173, 40, 45, 45, 13,122,189, 30, 12,195,160,180,180,212, 16, 25, 25, 89,165, 86,171,199, + 84,159,219, 16,223,173,252,252,252, 64,131,193, 48,238,246,237,219, 75, 95,127,253,117,135,206,157, 59,139, 25,134, 65,116,116, +116, 81, 72, 72,136,115,101,101,165,225,202,149, 43, 37, 90,173,118, 94,110,110,174, 73, 91,229, 80, 20,133,202,202, 74, 56, 58, + 58, 66,171,213,130,227, 56,232,245,122, 88, 89, 89, 61,222,222,136, 16,242,232,225,104,188,139, 16, 12,195, 8,140, 70, 35,222, +120,227, 13,112, 28,135,181,107,215,130, 97, 24, 65, 99,121, 44, 45, 45,111,198,197,197, 13, 14, 10, 10,122,156, 30,154,166, 65, +211, 52,164, 82, 41, 28, 29, 29,225,224,224,128,243,231,207,131,166,233,155, 38,210,222, 45, 46, 46,238,112,230,204,153,206,119, +239,222,125, 27, 64, 59,131,193,208,140,101, 89,138,166,233, 60,150,101,239, 85, 85, 85,109,129,137, 91,229, 20, 22, 22, 46, 29, + 55,110, 92,200,158, 61,123, 44,133, 66,225,227,242,162,105, 26, 98,177, 24,142,142,142,144,201,100,104,217,178, 37, 52, 26, 13, +190,248,226,139, 74,181, 90,189,244,223,212, 33,116,235,210, 29, 23, 78,239, 54,223,177,125,167,146,101, 65, 87,135, 98,120,140, + 0,111, 8,182,111,221, 40,145, 9,181,118,221,186,116, 55,201,181,162, 55, 48, 37,163, 39,254,236, 81,189, 85,206,210,244,140, +204,111,119,255,252,110, 42, 0,172, 94,187,217, 39, 43,197, 48, 35,254, 65,210,107,235, 55, 71,118,210, 27, 24,147, 54,192,253, +159,104,217, 85, 1, 2,109,110,110,238, 53,138,146,123,117,123,199, 48,207,191, 5,245,106, 65, 9,167,160, 40,234,195,220,220, +220, 84, 83,243,222,185,115, 15, 68,158,219,131, 29,219,118, 85, 80, 28,180, 53,207,223, 1,128, 28, 88, 24, 69,128,168,154, 83, + 85, 83, 95,199,162,121,179,166,204,172, 84, 86,172, 89,255, 83,253,110,147,182,237, 94, 66,219,118, 47, 97,218,135,159,219, 4, + 6, 5,120, 2,192,129, 3, 96,131,188,226,143,205, 95,188,240,213,197,243, 23,162, 82,173, 67,205,182, 58, 15, 18,227, 79,164, +166, 65,207, 15, 79,255,195,124,134,185,134,207, 62,107,165,173,168,112,234, 58,123,182,163,112,229, 74,186,230, 5,250,105, 11, +214, 99,235, 85, 35, 56, 79, 71, 68,156,248,236,211, 79, 21,171, 86,174,236,191,252,155,111,204, 90,183,110,141,252,252,124, 4, + 4, 4, 64, 46,151, 35, 58, 58, 26,103, 79,157, 82, 85,105, 52,243, 92, 93, 93,215,231,229,229,213,201,185, 16,184, 38,156, 55, +175,165, 94,165,114, 89,181,117,235,195,222,125,251, 22,108,217,178,165,217,128, 1, 3,104,181, 90,141,138,138, 10, 84, 84, 84, + 64,167,211, 65, 44, 22, 35, 87,161,224,114, 20,138,123, 89, 89, 89, 91,234, 77,231, 39,159,180, 82,151,150, 58,117,157, 61,219, +209, 88, 82, 34,155,153,145,145, 67,111,223,254,205,148,201,147, 63,157,241,201, 39,210,102,205,154, 81, 58,157,238,177,208, 50, + 26,141, 48, 51, 51, 51, 50, 12,227, 0, 64,109, 10,167,236,196, 9,166,164,164, 4,246,246,246,143,195, 46,209, 52, 13,153, 76, + 6, 59, 59, 59, 84, 85, 85,129, 16,194, 7,192,109,140, 71,230, 89,255,240,247,247,191, 41, 20, 10,155,213, 54, 17,214,181,183, + 93,237,239, 12,195,228,196,197,197,133, 62,165,112,235, 52,125,202,229,114, 31,142,227,190,238,220,185,243,235,147, 38, 77,162, +162,162,162, 16, 17, 17, 65, 20, 10,197, 1,154,166,231, 41, 20,138,212,122,222,108,234,228,180,179,179,179,178,178,178,250,216, +194,194,162,111, 77, 40, 6,153, 76,118, 95,165, 82,157, 87, 42,149,107,235,137,222,254, 76, 78, 47, 47, 47,107,142,227, 62,178, +176,176,232, 87, 92, 92,220, 30, 0, 28, 29, 29,239,168, 84,170,115, 52, 77,175,171,103, 3,233,103,114,186,185,185,153, 89, 90, + 90, 46,181,183,183,127,107,210,164, 73, 14, 81, 81, 81,121,119,238,220, 17, 87, 86, 86,238,102, 24,166,190,205,158,255,192,217, +186,117,235, 39,246, 34,124,145,117, 4, 0,109,219,182, 61, 62,100,200,144, 65,111,189,245, 22,140, 70, 35,126,254,249,103,156, + 61,123,246, 68, 74, 74,202,224, 6,222, 62,159,224,116,113,113,113,148,203,229,145, 99,198,140,105, 62,116,232, 80,115, 27, 27, + 27, 8, 4, 2,168, 84, 42,164,166,166,226,254,253,251,228,236,217,179, 85,241,241,241, 57, 26,141,166,103, 65, 65, 65,177,169, +229,249,156,111,201, 79,112, 10,133,194, 30, 30, 30, 30,123, 23, 44, 88, 96,213,175, 95, 63, 51, 7, 7, 7, 8,133, 66, 48, 12, +131,130,130, 2,196,198,198,226,228,201,147,170, 95,127,253, 85, 85, 82, 82,242, 6,106,141,186,127,101, 58, 95, 52,103, 77, 36, +247, 39,218, 86, 96,235,248,196,116, 44,123,226,152, 23, 62,137,143,139,111, 83,219,114, 85, 43,146,187, 73,233, 12,239,106, 27, +254,250,208,176,190, 0,112,240,200,141,243, 13,108,246,252,116, 58,191,140,143, 75,124,106,179,233,128, 7, 9,105, 88,210,228, +188,123, 97,126,108,108,252, 19,156,193,193,129, 15, 18,210,159, 29,157,254,105, 67,111,157,207,102,205,124,177, 39,207,204, 74, +200,248,159, 11,180,117, 11, 12,126,237,245, 97,131, 62,159, 51, 23, 95, 47, 95,134,163, 7, 15,159, 72,200,120,188,157,207, 63, +178, 45,253,137,156,212, 87, 66,225, 75,230,110,110,221,247, 56, 58,206, 61,115,238,156,101,205,252,218,154, 57,146, 79, 47,184, + 10, 9, 9, 41,188,123,247,174,139, 41,156,131,191,255,222,160,181,178,146, 46,255,249,231, 30,106,189,190,199,204,153, 51,133, + 55,111,222,196,222,221,187, 25, 77,118,246,174,124,150,253,232, 25,222,143, 63,228,253, 43,145,168,147,204,193,161,103,171,185, +115,165,203,247,237, 27, 47,111,214,204,101,240,144, 33, 98,161, 80, 8,149, 74,133,220,220, 92, 92,137,142,214,102,102,101,197, +106,181,218, 97, 57, 57, 57,121,166,230,125,240,247,223, 27,108,125,124, 96,233,226,194, 93,190,114,197,118,246,130, 5, 83, 92, +220,220,108,186,118,235, 38, 50, 55, 55, 71, 89, 89, 25,178,178,178,112,249,242,229,194,212,212, 84,119, 0,172, 41,156,191,221, +191,223,246,194,181,107, 35, 62,251,236, 51, 73, 64, 64, 0,172,172,172, 80, 89, 89,137,132,132, 4, 92,185,114, 69,183,111,223, +190, 10,149, 74, 53, 37, 39, 39,231,183, 63,177,222,255, 27, 2,235,175,122,240, 92, 92, 92, 66,105,154,254,178,218, 29,181,164, +161, 61,253,254, 77,157,142,171,171,171,167,157,157,221, 70,141, 70, 67,116, 58,221,228,252,252,252,172,191, 97, 58,133,161,161, +161, 63, 21, 22, 22,118, 38,132,192,198,198,230,106, 92, 92,220,251,168,223, 23,255, 44, 78,129,171,171,107,103, 11, 11,139, 78, + 22, 22, 22, 61, 12, 6, 67,235,234,121,120, 9,106,181, 58,202,104, 52, 94,203,207,207,191, 90,221, 33,252,127,230, 93, 0,160, +159,187,187,251,187, 28,199,249,210, 52,109, 91,237, 42, 45, 39,132, 36,151,149,149,109, 6,112,238,111,144,206, 23,198, 25,232, +133, 97,132, 66,192, 19,157, 3,135,172,167, 39,175,215, 76,134,127,226, 60,130,196,248,116, 28,110, 68, 58,233,161,125,156, 86, + 1,143, 86, 26,162,254,137,179, 79,138, 33, 19, 68, 75,163, 5, 86,115,140,171,147, 51, 19, 59, 77,228,227,158,167,142, 2,155, +163, 7, 40,116,230, 40, 92, 75, 76,199,133,127, 99, 95,247, 34, 57,191, 6,236,127,245,243,187, 74, 11,133,174, 20, 69,209, 0, + 64,209, 52,199, 1, 44,104,154,169,237, 22,124,234,133,178, 94, 78, 3,208, 70, 44,149, 54, 99, 25,198,165, 68, 44,182,186, 98, + 97,209, 65, 7, 84,185,178,236,151, 17,165,165, 15, 26,155,206,133,128, 29,128, 64,161, 84,234,121,197,220,124, 72,169,157, 93, +135, 50,134,113, 1,192, 73,165,210,184, 42,181,122, 75,118,118,246,230, 58, 60, 21, 13,166, 83, 36,149,122,176, 12,227, 66, 1, +132, 22, 10, 11,207, 72,165, 30, 69, 78, 78,111,171, 53,154,230, 82,169,212, 8,160,210, 96, 48,140,201,206,206,142,104, 12,103, +150, 64, 16,120,207,202,170, 27,107,109,237, 96, 0, 44, 12, 28,103, 48, 24,141,217, 58,157,238,190, 64, 32, 88,163, 80, 40, 82, +254,228,122,231,209,200,135,132,231,228, 57,121, 78,158,147,231,228, 57,121,206, 63,153,211,217,217,217,220,213,213,213,179,250, + 37,241,159,152,247,127, 21,132,124, 17,240,224,193,131, 7, 15, 30,255,124, 20, 22, 22,170, 81,199,156, 43, 30,255, 63,168,111, +245, 75, 99, 76,127, 77, 81,178,177, 60, 39,207,201,115,242,156, 60, 39,207,201,115,254,231, 56, 27,226,230, 93,143,127,146,240, +226, 57,121, 78,158,147,231,228, 57,121, 78,158,243,191,199,249,175, 2,205, 23,193, 51,225, 82,253,121,209,231,242,248,119,183, +133,167, 33,175,254, 52,230,124, 55,190,200,121,240,224,193,227,159,141,255,143, 57, 88, 53, 3, 85,193, 11, 58,239, 69, 95, 11, + 0,203, 40, 10,179, 0,128, 16,172, 0, 48,247,121,206, 37,207,216,209,253,105, 4, 5, 5, 57, 82, 20,213,199,198,198,166,141, + 82,169,140, 37,132,156,187,127,255,126, 9,101,226,254, 79, 30, 30, 30, 94, 50,153,108, 60, 69, 81,173,171,239,155,160,213,106, +183,103,103,103,167,191,128,122,163, 0,188, 39,149, 74, 71,217,218,218,250,150,149,149, 37,235,245,250, 95, 1,108, 64, 19, 34, + 78,187,185,185,249, 1, 24,199,113,156,144,166,233, 61,121,121,121,119, 77,189,214, 57,232,181,253, 4,104, 5,128,230, 40,110, + 4, 77,232, 3, 0, 56, 10,120, 88, 24,119,116,212, 11,110,175,141,105, 11, 79,190,189,208,244,114, 66,184,207, 0,128,162,232, +149, 44,203,126, 94,223,249, 2,129, 96, 53,225,184,143, 64,129, 80, 20,189,146,227,184, 57,124, 23,197,131, 7, 15, 30,255, 1, +200,229,242,129,110,110,110,187,220,220,220,118,201,229,242,129, 38, 92, 18, 92,199, 96,197, 82, 20, 88,224,201,248, 58,141, 56, +175, 33,179,100,237,107, 87,153,152,181,218,156, 46, 20, 5,150, 84,131,162,192, 57, 59, 59,111,116,119,119, 95,251,244,199,217, +217,121, 35, 69,129,171,117, 46, 91, 75,220, 5,215, 22, 88, 13,125, 66, 66, 66, 28,222,121,231,157,117, 10,133, 98,131,193, 96, +216,152,149,149,181, 97,228,200,145,235,252,253,253, 93, 77,201,187,183,183,247,208,215,134,190, 30,121, 41,230,230,131,164,228, +204,220,248, 7,169, 25,103,206, 95,190,214,127, 96,248,121,111,111,239,161,141,168, 35, 10,192,100,161, 80,120,209,210,210, 50, + 71, 40, 20, 94, 4, 48, 85, 32, 16,252,182,108,217,178,140,184,184,184,130,232,232,232,242,200,200, 72,197,196,137, 19,147, 41, +138, 58,134, 63, 90, 66,131, 27,178,226,184,185,185, 45,206,206,206,190,153,151,151,119,171, 89,179,102, 63, 62,197, 81,151,213, +231, 49,167, 83,208,107,247, 10, 43, 12,164,176,194, 64,156,130, 94, 35,181,190,223,107,100,147,110,168, 45,253,161, 45, 88, 88, + 88,248, 63, 37,228, 93,158,193,249,135,107,237,237,237,221, 9, 33,116,203,150, 45, 59,202,229,242, 31,228,114,249, 15, 45, 91, +182,236, 72, 8,161,237,237,237,221,101, 82,105,131,109,233, 5,130,231,228, 57,121, 78,158,243,239,198,249,223,181, 96, 17, 66, +222, 78, 78, 78, 54,231, 56, 14,254,254,254, 99, 1,156,106,140, 85,137,162, 48,139,227, 30, 89,115,104,154,154,221,171, 87,239, + 16, 51, 51,179, 39, 34, 22,107, 52, 26,201,197,139, 23,250,112, 28,161,170,207,155, 69, 8,214,153,104,141,114,161, 40,204,210, +235,117,180, 72, 36,129, 64, 64,207, 12, 14,110, 19, 90, 92, 92, 28,193,178,236,207,117, 4,175,108,216,108, 67, 81,216,178,101, + 75,107, 23, 23,151, 63,236,161, 82, 80, 80, 32, 30, 50,100,112,163,248,222,110,211, 70,166, 77, 77,237, 70,139, 68,158, 6,163, +209, 17, 0, 68, 34, 81,137,204,210,210,227,139,121,243,204, 45, 44, 44,184,146,146, 18, 84, 86, 86, 82,211,166, 77,147, 77,155, + 54,173, 31,128, 29,245,113, 54,107,214,204, 59,184,109,251,233,219,183,109,235, 84, 81, 90,170,221,188,102,253,109,157, 80,170, +110,222,218, 79,252,229,130,175,108, 22,207,159, 59,217, 96, 48,196,230,228,228,164, 53,100,116, 1,112,248,227,143, 63, 14, 26, + 60,120,176, 68,169, 84,202,212,106,117,139, 93,187,118,125, 17, 22, 22,102, 25, 18, 18, 34,217,187,119, 47, 85, 94, 94, 14, 66, +136,121, 64, 64, 0, 25, 57,114,164,118,255,254,253,211, 0,124,215, 24, 11, 16,203,178,162,154, 72,233, 12,195, 72,170,219,162, +193, 20,139, 17, 5, 60, 12,234, 58, 18,160,224, 27, 23,253,171, 44,168,219, 72, 45, 8,146, 41,224, 97,245,139,192, 36,142,227, +188,158, 97, 85, 74, 87, 40, 20,155,154,242,176, 12, 26, 52, 24, 0, 54,222,186,117,235, 82, 81, 81, 81, 51,142, 99,199,152,106, +217,162, 40,138, 18, 10,133,227, 0, 44,215,104, 52, 19, 35, 34, 34,218, 3, 64,159, 62,125,196, 0,110, 18, 66, 58,227,207,143, + 75,199,131, 7, 15, 30, 60,254,166, 2, 75, 12, 0,151, 46, 93, 2, 33, 68,210,132,251, 81,181,133,203, 71, 31,125, 4, 55,183, + 39,167,155,228,229,229, 33, 50,242,226,243,228,233,137, 65,106,233,210,165, 54, 37, 37, 37,175,110,217,178,165, 63,128, 47, 10, + 10, 10, 34, 27,184,190,128, 16,172,160,105,106, 54, 69, 81,144, 72,164,233,147, 39, 79,190, 89,157,127,159, 99,199,142,153, 15, + 25, 50, 68, 77, 81, 84, 42, 0, 72, 36, 82,103,129,128,246, 34,132,212, 12,180,207, 20,130,175, 91, 90,250, 19, 66,134, 76, 89, +189,154,237, 16, 30, 46,180,118,118, 22,128,166, 81,148,149,229,176,241,199, 31, 59, 63, 56,123, 86,234, 26, 16,144,165,151, 72, +202,147,146,146,224,230,230, 6,177, 88,220,224, 91,130,185,185,249,196,143,103,124,234, 84, 81, 90,166, 49, 42,149, 6, 75,142, +101,172,101, 34,170,178,168,164, 60, 61,219, 90, 61,113,234,116,225,252, 57,159, 76, 4,240,121, 3, 84,211,102,204,152,209,186, + 99,199,142,242,125,251,246, 81, 21, 21, 21, 16, 10,133,150,237,219,183, 71,104,104, 40, 27, 17, 17, 65,121,123,123, 35, 56, 56, + 24,209,209,209,184,114,229, 10, 21, 18, 18, 98,126,248,240,225,177, 70,163,241,187,134, 68,181, 64, 64,207, 25, 49, 98,228, 64, +115,115,115,163, 70,163,193,164, 73,147,160, 82,169,208,186,117,235,182, 61,123,246,140,209,233,116,162,163, 71,143, 4,179, 44, +135,250,196,117,141, 27,176,218, 98,213, 6, 4,201, 69,113, 71,219,214,252,159,227, 56,175, 7, 15, 30, 4,150,151,151,131,227, +184,199,123, 50, 2, 64,247,238,221, 27,211,150, 10, 8,193,138, 33, 67, 6,207, 6, 40,244,238,221,187,100,250,244,233,108, 66, + 66, 66,207,225,195,135,189,244,240, 97,114,125, 47, 1, 5, 20, 69,175,164,105,106, 22, 69, 81,212,248,241, 19, 10, 44, 45, 45, +135,121,120,120, 60,160, 40, 74, 40, 22,139,107,158, 3, 65,235,214,173,157,130,131,131,167,218,217,217, 21, 10,104,218,153,128, + 16,138,162, 87, 18,194, 21,240, 93, 20, 15, 30, 60,120,252, 7, 4, 22, 69, 81,197,119,238,220,113,211,106,181,160, 40,202, 20, +107, 80,236, 83, 3,206, 79, 52, 77,189, 79, 81, 20,130,131,219,164,173, 93,187,182,174,253,182,244,193,193,109,210, 4, 2,218, +155, 16, 2,138,162,215, 63, 53,208,196, 54, 52, 32, 74, 36,210, 89, 0,224,230,230, 94,112,252,248,113,227,136, 17, 35,176,114, +229, 74,201,156, 57,115,190,162,105,122,116, 94, 94, 94, 78, 61,233, 4,128,185, 78, 78,206,246, 91,182,108,105, 61,121,242,228, +155,185,185,185, 31, 3,128,187,187,251, 90, 0,109, 40,138, 74,173,117, 12, 27, 54,108, 8,157, 56,113, 98, 66, 97, 97,225,220, +103,113,190,110,101,229,235,224,238, 62,116, 85,116, 52, 17, 50, 12, 85,113,243,102,121, 78,126,190, 65,207,178,244,169,180,180, + 78,163, 39, 76, 16,187,184,185,145,163, 27, 54, 52, 87,139, 68,132,149,201, 42,226,226,226,136,193, 96,184,223, 80,222, 41,138, + 10,176,179,181,179,216,188,122,253, 77, 39,169,128,114,244,112,167,196,214,182, 66,218,210, 74, 74, 4, 2, 77,115, 15,119, 43, +138,162, 2, 26,170, 35,177, 88, 60,182,127,255,254,230,123,247,238,165,130,131,131, 97,107,107,139, 75,151, 46,225,206,157, 59, + 40, 43, 43,163, 25,134, 65, 88, 88, 24, 86,172, 88, 1, 15, 15, 15, 84, 84, 84, 32, 35, 35,195, 81, 44, 22, 59, 25,141,198,103, +149,231, 19,130,119,214,172, 89,112,118,118, 6,203,178,200,203,203, 67, 85, 85, 21, 44, 44, 44, 96, 99, 99,131,220,220, 92, 28, + 61,122,196,148,182,100, 18, 94,126,249,101, 53,128,140,167, 45, 88,141,225,148,203,229,103, 11, 11,139,186,245,234,213, 11,229, +229,229,134, 5, 11, 22,160,125,251,246,104,213,202,175,193,116,178, 44,251,185,163,163,227, 86, 7, 7,135,213,211,167, 79,119, +117,112,112,128, 78,167,155, 87, 82, 82,130, 89,179,102, 1, 0, 66, 67, 67,219, 16, 66, 78, 76,156, 56, 17, 94, 94, 94,138,210, +210,210,172, 7, 15, 30, 76, 46, 44, 44,140,173,181,197,209,159,177,100,153,231,228, 57,121, 78,158,243,239,198,249,175, 20, 88, +164,214, 64, 72,240, 12, 87, 5, 33,164, 76, 46,151,187,153,153,153,129, 16, 82,214,216,155,113, 28, 55,205,193,193,161,112,238, +220,185, 93,253,252,252,244,211,166, 77,139,205,200,200,152, 87,251,156, 22, 45, 90, 44,253,225,135, 31,144,148,148,148,177,108, +217,178,232,146,146,146, 37,141,188,205, 28, 66,176, 22, 0,114,115,115,139,143, 29, 59,214, 49, 42, 42,106,206,218,181,107,221, +166, 77,155, 38,153, 62,125,250, 84, 19, 44, 57, 16, 10,133,154,186,220,130,117,193,197,197,197, 32, 20, 10,159,181,127, 32, 38, +119,232, 32, 37, 28, 55,244,155, 75,151, 56, 46, 39, 71,123,114,219, 54,172,188,114,101,138,141,163,163,167,147,147, 19,241,106, +214,172,200,140, 97, 10, 42,139,138,232,144,254,253, 69,103,118,236,104, 46,245,242,138, 63,112,224, 64, 21,199,113,103, 77, 72, + 66,149,222,104,212, 89,120,184, 27,135,188,214,191,205,253,235,119,146,204,236,237,233, 54, 97,237, 3, 19,147, 51,110, 81,128, + 30,104,120,243, 88, 27, 27, 27,191,226,226, 98, 84, 86, 86,194,201,201, 9,235,214,173,131,139,139, 11,212,106, 53,226,226,226, + 72,179,102,205,168,203,151, 47,195,221,221, 29, 69, 69, 69,208,235,245, 80,171,213,133,122,189,254, 89,121, 47,160,105,193,102, +154,166, 38, 81, 20, 5, 95,223, 86, 5,223,125,247,157,145, 16,130,128,128, 0, 12, 27, 54, 12,151, 46, 93, 66, 92, 92, 92,141, +149,201,232,229,229, 93, 64,211,148,243,163,230, 86,191, 69,176,129,182, 6, 0, 25,121,121,121,115,155,114,189, 92, 46,151,177, + 44, 59,197,215,215,119,240,155,111,190,105, 16,139,197, 80,171,213, 53,101, 97, 24, 48, 96, 64,201,144, 33,131, 29, 78,156, 56, + 81,111, 58,139,139,139, 83, 91,183,110, 61,233,211, 79, 63,221,185,126,253,122,219,207, 63,255,252,241, 38,220, 44,203,130,227, +184,199, 86,182,195,135, 15, 35, 61, 61,253,235,194,194, 66,190,227,226,193,131,199,127, 17, 38,105,145,127,162, 5,235, 47,201, +140, 64, 32,216,112,246,236,217,246,221,187,119, 23,246,233,211, 39,248,244,233,211,193, 10,133, 34,182,122, 80, 11,238,211,167, + 79,176,179,179, 51,214,173, 91,167, 22, 8, 4, 27,154,120,155,199,131, 93, 94, 94, 94, 12, 69, 81, 95, 30, 58,116,104,203,228, +201,147,225,226,226,210, 62, 55, 55,247, 47, 45,228,178,164,164, 46,227, 23, 47,230,100,128,224,196,206,157,228,171,232,232,111, +246,255,250,171,216,199,199, 7,132, 16,100,100,100, 88,255,188,101,139,253,232,126,253,226,242, 85, 42, 42, 37, 63,159,141, 63, +126,156, 46,161,233,239, 83, 83, 83,139,107,111,214, 92, 23, 12, 6,195,141,172,204, 76,191, 46,221,186,184, 93,186, 25,127,123, +248,208,193,189,104, 33, 77,167,103,230,221,112,114,176,183,184,114, 53,186,210, 96, 48,220,104, 40,157, 42,149, 42,157, 97, 24, +123, 66,136, 83,100,100, 36, 28, 29, 29, 81, 86, 86, 6,163,209, 8,131,193,160, 87,171,213,178,196,196, 68,232,116, 58,232,116, + 58, 88, 91, 91,227,254,253,251, 5, 12,195, 92,120, 22, 39,203,178,239, 1, 88, 76, 8, 65, 82, 82,146,162,218,245,217,202,214, +214,118, 55,195, 48,200,205,205, 69,100,100,228,152,188,188,188,164,218,250,166,250,175,162,201, 79, 41, 33, 77,174, 47, 39, 39, +167, 96,177, 88, 60,247,195, 15, 63,116, 9, 10, 10,130, 86,171, 5, 0, 88, 90, 90, 66,173, 86,195,218,218, 26,157, 59,119, 78, + 88,178,100,137,129, 16,140, 7,144, 95, 31, 95, 66, 66, 66,145,159,159,223,135,147, 39, 79, 94,228,231,231,231, 77, 8,129,175, +175, 47,250,247,239,143,147, 39, 79,226,225,195,135, 80,169, 84,236,245,235,215,247,102,103,103, 31,231,251, 88, 30, 60,120,240, + 34,235,223, 99,193, 66,117,134,200,159,125,195,194,194,194,162,196,196,196,211,183,110,221, 26, 60,106,212, 40, 68, 70, 70,142, + 7,240, 9, 0, 72,165,210,241,163, 70,141,194,173, 91,183,144,152,152,120,186,176,176,176,232, 69,220,147,162, 40,181, 94,255, +200,128, 35,147,201,204, 26, 57, 80,251, 84,187, 6, 65, 8,241,121,214,177, 6,172, 97,158, 47, 15, 27, 70, 87,221,185, 83,190, +248,204,153,143,247, 28, 58, 36,246,240,240,128, 82,169,132, 64, 32,128,181,181, 53,213, 63, 60,220,110,243,158, 61,174, 30, 86, + 86, 87,166, 78,152,240,224,235,115,231,212, 87, 42, 42, 76, 10,175,160,213,106,183, 44, 93,242,101,175,157,187,246, 7,248, 7, +248,218,157, 60,123,241,182,131,131,181,153,151,151,143,180,162,188, 92,247,195,218,149, 66,149, 74,181,181, 33, 30,141, 70,115, + 56, 34, 34, 98,168,135,135,135, 83,108,108, 44,244,122, 61, 88,150, 69,223,190,125, 65, 8,145, 2,224,132, 66, 33, 18, 18, 18, + 96, 48, 24, 10, 31, 62,124,168, 72, 73, 73,145, 2, 88,222, 0,245, 19, 66,137,166,233,209,131, 7, 15, 6,195, 48,232,223,191, + 63,142, 28, 57, 50, 10,192,162,103,157,255, 28, 22,172, 22,110,110,110,203,170,239,105,210,228,118, 87, 87,215,174, 45, 91,182, + 92,180,106,213, 10,202,197,197, 13, 44,203,192,104, 52,160,168,168, 4, 74,165, 18,129,129,129,240,244,244,196,242,229,203, 1, +224, 72, 67,226,170, 6, 73, 73, 73,201, 0,222,152, 48, 97,130,248,210,165, 75,161, 90,173,246,219,126,253,250,225,246,237,219, +184,123,247,238, 91,206,206,206,133, 30, 30, 30,140, 92, 46,159, 68, 81,148,181, 76, 38,219,243, 34,202,129, 7, 15, 30, 60,254, + 97,248, 75,180,200, 95, 45,176,234,205,152,179,179,179,121, 89, 73,225, 71, 94, 94, 94, 50, 0,144,138, 5,189, 29, 28, 28,190, + 46, 41, 41,169,106,236, 77,213,106,245,254, 93,187,118,189,178,102,205, 26,113,120,120,120,203, 67,135, 14,117, 4,128,240,240, +240,150, 86, 86, 86,216,181,107,151, 65,173, 86,239,127, 81,153,228, 56,174,127, 88, 88, 24, 74, 75, 75,145,145,145,113,179, 49, +215, 30, 59,118,204, 28, 64,155,134,142,213, 7,189,209,232,100,237,230, 38, 44,184,116,201,160, 97, 24, 79, 63, 63, 63, 40,149, + 74, 72, 36, 18,232,116, 58,164,167,167, 67, 44, 22, 83, 15,211,210, 28,231,124,242,201,101, 51, 63, 63,203,154, 21,134,166, 32, + 47, 47, 79, 3, 96,250, 87, 75,191,218,189,106,229, 74,231,210,146,178, 36,177,196, 76,107,110, 38,181,159,253,233, 18, 82, 80, + 80, 48,179,122,143,170,134,176,124,247,238,221, 3, 94,121,229,149,123, 30, 30, 30,206,197,197,197,174,149,149,149,164,180,180, +148,170,110, 27, 20, 0,220,187,119, 15,153,153,153, 12,203,178,151, 1, 44,134, 9,238,199,199,166, 41,185,220,174, 99,199,142, + 3, 28, 28, 28, 30,187, 34, 67, 66, 66, 6, 0,248, 94,161, 80,148,189,200,198,125,246,236, 89,115,142,227, 2, 1, 96,192,128, + 1,166,138,241,183, 71,143, 30, 77,153,153, 89,128, 97, 24, 72,165, 98, 72,165, 82, 88, 90, 90,195,222,222, 30,153,153,153,232, +221,187, 55,151,150,150,118,212,220,220,124, 91, 99,211,116,241,226,197, 87, 59,118,236,248,201,212,169, 83, 97, 52, 26, 49,116, +232, 80, 40, 20,138, 85,233,233,233,251, 92, 93, 93,199,204,155, 55,207,209,193,193, 1,179,102,205, 50, 3,176,144,239,107,121, +240,224,193,139,172,127,135,192,122,214,160, 24,102,103,103, 55,173,176,176, 80, 86,227,122,161, 40, 74,214,174,101,203, 13, 98, +177,248,167,188,188,188, 43,141,185,105,121,121,121,101, 90, 90,218,209,152,152,152,145,195,135, 15,199,185,115,231,198, 1,192, +240,225,195, 17, 19, 19,131,180,180,180,163,229,229,229,149, 47, 34,131,238,238,238,175,247,236,217,115, 92,199,142, 29,113,236, +216, 49,176, 44,123,161, 49,215,215, 94, 49, 88,215, 42,194,154, 99,166,112, 73, 30,197, 57, 2,203,178, 16, 8, 4,208,106,181, +200,203,203,195,131, 7, 15, 96,109,109,141,178,210, 82,202,218,222,222,160,211,233,216,198,230, 51, 47, 47, 47,231,206,205,223, + 83, 52, 90,173,200,206,193, 94,109,101, 33, 33,149, 74, 37,125,239,222,237,188,194,194,194, 12, 83,181, 32, 33,164,199,153, 51, +103,230, 11, 4,130, 81,114,185, 28, 35, 71,142,164,250,244,233, 3,137, 68, 2,141, 70,131,242,242,242,154,114,244, 6, 0, 71, + 71, 71, 23,115,115,243,131, 52, 77, 23,164,167,167, 79,108,232, 6, 44,203, 14,127,237,181,215,132, 70,163, 17, 75,150, 44,193, +194,133, 11, 49,112,224, 64,225,141, 27, 55,134, 3,216,244,162, 26, 54, 33, 4,175,188,242,202,227, 73,238, 79, 77,110,175, 19, + 61,122,244, 16,166,165,165,249,200,229,114,100,100,100,192,220,220, 28, 46, 46, 46,176,181,181,133,163,163, 35,214,172, 89,131, +111,191,253,246,174, 64, 32, 88,159,151,151,151,210,216, 52,121,122,122, 78, 26, 59,118,236,164,145, 35, 71, 66,169, 84, 34, 38, + 38, 6, 93,186,116,193,178,101,203, 92,163,163,163,103,132,133,133, 65, 40, 20, 34, 42, 42, 10, 44,203,102,243,125, 44, 15, 30, + 60,120,252,243, 5, 22,245,148,114, 4, 0,216,218,218, 90,203,100,178,201,225,225,225, 93,135, 14, 29,138,254,253,251, 63,113, +241,186,117,235, 44, 35, 35, 35,103,127,247,221,119, 61, 0,172,207,205,205, 45,109,132, 85,233,240,238,221,187,195, 95,126,249, +101,243, 94,189,122,249, 0,128, 84, 42,213,239,222,189, 91,205,113,220,225, 38,228,229,137,232,237,114,185, 60, 76, 32, 16,140, + 31, 56,112, 96,216, 59,239,188,131,184,184, 56,236,218,181, 43,193,207,207,239, 92, 65,129,233,243,166,159, 90, 49, 88,215, 42, +194,181, 13, 89,179, 36, 34, 81, 81,101, 94,158,131,208,205, 77, 98, 33,145,100,223,184,113,195,167,101,203,150, 84, 90, 90, 26, +146,146,146, 96, 48, 24,112,231,206, 29, 66, 3, 57, 2,107,107, 58,243,222, 61, 74, 44, 18, 53, 58,102,151,153,152,235,240,197, +172,247,124,181, 90, 77, 96, 69, 69, 5, 35, 20, 10,133, 82, 17,155,214, 72, 26,157,135,135,199,107, 44,203, 58,234,245,122,163, +139,139,139,232,252,249,243,144, 72, 36,120,180,250, 51, 24, 18,137, 68, 47,151,203,149, 0, 96,105,105, 73, 47, 91,182, 76, 52, + 99,198,140,184,134,136, 67, 66, 66, 68, 18,137,100,180,159,159, 31,174, 94,189,138,248,248,248,212,171, 87,175,250,116,232,208, + 1, 30, 30, 30,163,221,220,220,182,223,190,125,219,248,162, 4, 22, 26, 57,201, 61, 42, 42,138,115,119,119, 7, 69, 81, 16, 8, + 4, 80,171,213, 72, 75, 75, 67,231,206,157,177,117,235, 86,172, 93,187,246,151,252,252,252,109, 77, 73,207,132, 9, 19,196,109, +219,182,125,123,228,200,145, 72, 77, 77,197,242,229,203, 75,242,243,243, 47,158, 57,115,102,248,212,169, 83, 5, 93,186,116, 65, +113,113, 49,182,111,223,206,220,190,125,123, 91,120,120,248,206,141, 27, 55,242, 61, 20, 15, 30, 60,254,107,150,171,186,190,255, +187, 44, 88,238,238,238,131,100, 50,217,187,163, 71,143, 22,248,251,251,163,160,160, 0, 86, 22, 82, 61, 69, 81, 18, 0,176,178, +144,233,141, 70, 35,166, 78,157,138,246,237,219,119,156, 61,123,118, 24,203,178,191, 20, 20, 20, 28, 52,229,198,133,133,133,106, +154,166, 15,188,255,254,251,203,239,220,185,237, 13, 0,215,175, 95, 79,203,205,205,157, 99,162, 59,171, 54,106,130, 83, 82, 50, +153,217, 61, 95, 95,223,146,208,208, 80,187, 97,195,134,193,209,209, 17,183,111,223,198,178,101,203,226,180, 90,237,180,168,168, + 40,230,175, 46,100,134, 97,178,174, 29, 63,110,247,202,152, 49,118, 75, 70,143,254,225,157, 9, 19, 86,124,189,108,153, 88, 46, +151, 83,214,214,214,184,123,247, 46,217,188,105,147, 97,223,202,149, 63, 8,204,204,196,151,142, 28,145,176, 70, 99,114, 99,238, + 33,151,203,123,132,117,234, 24,188,106,205,119,208,168,171,112, 61,230, 56,202, 74,139,177, 97,211,161, 54,114,185,188,135, 66, +161,136,106, 68,122,125, 14, 28, 56,240, 72, 28, 74, 36, 88,188,120, 49,220,221,221, 97,109,109,141,170,170, 42,188,247,222,123, +146,143, 62,250, 8, 0, 16, 31, 31, 15, 75, 75, 75, 83,173,108,189, 38, 79,158,108,109, 52, 26,113,234,212, 41, 29,203,178,211, +207,157, 59,119,184, 93,187,118,210,238,221,187, 91,239,220,185,179, 55,128, 51,255,143,207, 3, 71, 8,201, 58,123,246,172,231, +200,145, 35, 33, 22,139, 81, 86, 86, 6, 43, 43, 43,172, 90,181,138, 24, 12,134,131, 77, 37, 86, 40, 20, 18, 71, 71, 71, 9,203, +178, 56,112,224, 0, 42, 43, 43, 39,230,228,228,228,183,108,217,242,240,236,217,179,103,250,250,250,122, 37, 39, 39,103,178, 44, +187, 82,161, 80,164, 3, 0, 47,176,120,240,224,193,227, 95, 40,176, 0,188,117,250,244,105, 1,199,113,216,184,113, 35,110,221, +186, 69, 44,173,237, 63,182,178,161,118, 88, 91, 91,179,229,229,229,111,173, 88,177, 98,232,252,249,243,169,110,221,186, 33, 38, + 38,134,242,246,246, 30, 14,160,246, 32, 20,140,122, 98,101, 84, 84, 84,220, 40, 40,200,247,174, 21,181,221, 91, 42,149, 53,180, +218,237,105,206,167,131, 89,182, 91,186,116,105,172,179,179,179, 49, 54, 54, 22,235,215,175,231,110,221,186,117, 2,192,170,194, +194, 66,141,137,156, 47, 2,143, 57,237,252,252,174,108,157, 59, 55,228,229, 87, 95, 37,189, 71,141,226, 86, 75, 36,159,126,185, + 96,193,244,210,202, 74, 15,142,227,224, 96, 99,147,245,203,210,165,107,186,116,235,166,185,255,251,239, 22,209,191,253,102,230, +210,162,197,229,198,164, 83,161, 80, 68, 69, 70, 94,198,246, 77,107, 96, 48,232,144,167,200, 4, 0, 20,151, 84,160, 1,113,245, + 7, 78,154,166,203,199,143, 31,111,174,215,235,169,209,163, 71,139, 10, 11, 11,209,178,101, 75, 0, 64,101,101, 37, 78,156, 56, +129,128,128, 71, 97,181,238,223,191,255,248,123, 67,233, 52, 55, 55, 31,213,181,107, 87,100,100,100, 32, 46, 46,238,100, 97, 97, + 97, 81,124,124,252,201,204,204,204,225,161,161,161, 56,124,248,240,200,122, 4, 86,163,234,168, 38,176,104, 35,219, 18, 24,134, +153,125,248,240,225,201, 49, 49, 49, 61, 62,249,228, 19,170, 79,159, 62, 0, 0,149, 74,197,154, 56,223,240,153,233,172,113, 15, +115, 28, 7, 15, 15, 15, 21, 0,164,164,164,164, 3,248,160,169,156, 47,162,125,242,156, 60, 39,207,201,115,254, 77, 56,255, 51, + 2,139,225, 56, 14,145,145,145, 56,116,232, 16,171,215,235,231,230,231,231, 63,168, 30,204, 1, 96,219,157, 59,119, 46, 15, 31, + 62,124,117, 82, 82,146, 32, 62, 62, 30,132,144, 70,205, 29,210,106,181,198,167, 35, 16,104,181,218,231,118, 17,109,221,186, 21, +249,249,249,250,204,204,204,223, 12, 6,195,174,146,146,146,188,166,114,189,136, 85,132, 27,110,221,210,189,110,101,117,100, 78, +175, 94,195,151,156, 62, 45, 27, 56, 97,130,190,231,128, 1, 95, 67,175,215,139, 68, 34, 14,102,102, 2,129,153,153, 56,254,247, +223, 45, 86, 77,153,226, 64,209,244,209, 31,227,227, 53,141,181, 96,245,236,217, 13,227,223,157, 1,141,166, 10,191, 95, 61,142, +242,210, 98,196,220, 72,130,206,128, 70, 89,176,132, 66,161,167,209,104,148, 50, 12,163, 32,132,224,237,183,223, 6,203,178,208, +106,181, 80, 42,149, 40, 45, 45,213,126,248,225,135,116,181,104,194, 43,175,188, 98, 82, 84,127, 31, 31, 31, 79,161, 80,136, 51, +103,206, 64, 32, 16, 28,124, 36,136, 5, 7, 35, 34, 34,134,143, 30, 61, 26,114,185,220, 47, 53, 53,181,193,198, 16,174, 11, 0, + 0, 32, 0, 73, 68, 65, 84,201,141,143, 55,123,166,224, 11, 0,160,224,235, 20,244,218,189,154,205,158,105,154, 78,111,223,190, +189, 73,243,174,158, 70, 81, 81, 81, 33, 30, 77,220,255,117,214,172, 89, 83, 59,118,236, 24,188,104,209, 34, 0, 16, 60,183,121, +140,227,192, 48,204,115,133,144,224,193,131, 7, 15, 30,255,112,129, 69, 81,212,222, 94,189,122,189, 65, 8, 17,208, 52,189,171, + 70, 92,213, 70, 78, 78, 78,154, 92, 46,223,232,229,229,245,102,181,229, 99, 79, 35,239, 95, 64, 8,190,161,105,170,246,222,115, + 5, 77,224, 88, 81,205, 65, 9,133,162, 93,215,174, 93,251, 60, 55, 55, 55, 31, 0,251,188, 5,244, 34, 86, 17, 2,192, 65,165, + 50,249,117, 75,203,163, 83,219,181, 27, 50,116,250,116, 18,218,175,159,141,107,139, 22, 12, 99, 52,178,169,247,238, 81,209,135, + 15,139,163,127,251,205, 76, 64, 81,199, 14,170, 84, 15, 26,155, 78,133, 66, 17,117,225, 98,212,217, 17,195,195, 95,241,241,114, + 7, 0,164,166,231,162,184,180,226,108, 99,196, 21, 0,100,102,102,234, 0,232, 92, 93, 93,135,239,223,191,255, 0, 69, 81, 84, +237,237,102, 0,232,132, 66, 97, 43, 0, 80, 42,149,205, 15, 31, 62,188, 91, 40, 20,230, 52,196, 27, 31, 31,191,119,193,130, 5, + 99,210,210,210,126, 83, 40, 20, 41,213,233, 78,185,124,249,242,250,220,220,220, 49,153,153,153, 59, 97,194,202, 17, 2,180,138, +139,254,181, 13, 0, 4,117, 29,137,184,232, 95,101, 0,218, 4,117, 29, 89, 83, 22,207, 61, 89,190, 58, 46,215, 71,215,175, 95, +127,185,127,255,254,227, 9, 33,133,207,195, 39,147,201,140, 58,157,142, 97, 89, 86,104, 48, 24,136, 76, 38, 51,242,221, 15, 15, + 30, 60,120,252,123,241,103, 79, 34, 51,213,132,248,196, 4,245, 38,114, 54,134,163, 65, 78, 55, 55,183,105, 20, 69,249,152, 74, + 64, 8, 73,205,203,203,251,161, 46, 78, 66, 30,185, 47,129,103,111,246, 76,140,198, 76,153,143,207,229, 95,238,223,215,214, 33, +118,185,198,148,167,175,175, 47, 73, 78, 78, 54,181,126,235,229,148,203,229, 50,161, 80,248,180,133, 74, 87, 45,194,106,183, 35, + 1, 0,166,145,245,222,164, 58,122,108,193, 2,104,142,226, 70,208,132, 62, 0,128,171,177, 96,253, 9,237,179, 73,233,172, 93, +239, 0,224,227,227,243,126, 64, 64,192,152,123,247,238,237,207,206,206, 94,215,224,195,217,200,122,255,147,158, 77,158,147,231, +228, 57,121,206,191,138,179,161,113, 54, 12,128, 83,245,207,154, 56,153, 78, 79,125,215, 3,168, 61,102,213,252, 46,162, 40,234, + 70, 45,142,199,199, 77,184, 22, 0,138, 1,220,163, 40, 74,143,191, 9,130,121, 78,158,147,231,252, 31,122,244,232, 33,228,203, +147,231,228, 57,121, 78,158,179,241,226,138, 16, 50, 8,143,188, 28,132, 16, 50,168,230,247,211,223,107,206,169,253,187,250, 47, +158, 62,207,148,107, 1,144, 57,115,230,204, 37,132,244,106, 76,154,105,240,224,193,227, 47,195,255,199, 42, 86, 30, 60,120,240, +248, 23,192,137,162,168,227,132,144,193,132,144,193, 20, 69, 29,175, 71,140, 13,174,253,183, 62,212,197, 83,115,143,218,191,151, + 47, 95,254, 53,128, 70,237, 4, 35,172, 71,133, 54,198,244, 23,220,132,255,197,242,156, 60, 39,207,201,115,242,156, 60, 39,207, +249,159,227,124, 81,215, 63, 55,234, 18,107, 53, 66,174,246,239, 57,115,230,124,142, 70,236, 90,242, 87,128, 55,159,242,156, 60, + 39,207,201,115,242,156, 60, 39,207,249,188, 66,232,153, 46,189,250,220,133, 79,127, 55,197, 69, 88,223,185,141, 73,179, 16, 60, +120,240,224,193,131, 7, 15, 30,127,111, 20,213,182, 54, 85, 91,152,216, 57,115,230,124, 94,115,172,218,202,164, 3, 32,125,250, +226,167,174,171, 23,141, 57,151, 23, 88, 77, 64,187,150,244, 18, 79, 79,231,208,234, 66, 6,169, 14, 81,192, 85, 71, 17, 32, 53, +193,140, 8, 7,194, 17,228,230,149,223,186,159,134, 47,159,161,188, 27,156,235,214,173,155,171,189, 64, 83,245, 45,203,177, 93, + 0,128, 2,125, 73, 36,178,253, 36,226,186,162,188,214,106,178,122, 17,224,131,214, 50, 33, 62,227, 56,180,165, 40,128,162,112, + 79,203, 96,101, 98, 42, 18, 94, 64,145, 80, 65,222,120, 79, 34, 53, 31,109, 99,107,231, 91, 86, 82,252,208, 96,208,253, 26,159, +142, 13,104,194,166,156,254, 62,104, 15, 22,179, 89, 14, 34, 33,141,111, 19, 51, 16,205,183, 58, 30, 60,120,252, 69,214,144,231, +154,127, 92, 87,159, 76, 8,161,158,147,147, 15,144, 87,127,249,220,168,158,232, 94, 35,122,138, 0,220, 95,182,108, 89,217,178, +101,203,106, 31,187, 11,160, 93,245,121, 69,117, 8, 37,125,245,111,125, 29,231,232, 77, 57,247, 79, 17, 88,129,205, 48, 21, 4, + 11, 65,129, 0, 88, 20,159,131,245,141,186,190, 37,250,202,132,130,205, 32, 16,104,141,236, 76,194,226, 82,157, 5, 41, 64,119, +153, 72,176, 26, 20, 56, 45,195, 78,140, 79,193,121, 83,239, 17,228,139, 1, 66,138,222,201,113, 68,196,114,100, 7, 56, 28,183, + 52,226,202,239, 10,104, 27,147, 86, 79, 79,231,208, 35,231,243, 94,185,184,119, 58, 58,181,247, 5,225,140, 0, 97, 96, 30,240, + 25, 34,126,121, 27,157,218,120, 62, 58,198, 25, 97, 25,178, 26, 3,187,218,144,251,105, 77,219,159,186, 91, 55, 87,123, 51,142, +187,183,126,203, 78, 87, 79,223,151, 41,194,233,144,124,231,212, 91, 31,205,154,215,171, 79, 71,121, 91, 0, 13,238,241,216,214, + 23,239,122,122,250,127, 54, 99,222, 26,218,221,189,153, 37,199,232,153,188,236,248, 14,223,175, 89,112, 80, 76,103,174,190,151, +140,205,166,182,227, 64, 47, 76, 22,138, 36, 35,205,204, 45,124,213,106,101, 50,107, 52,254, 74, 11,132, 3, 86,174, 88,219,190, + 71,175,129,150,156, 46,159, 54, 50, 84,224,190,253,123,154,255,240,211,250,240,216, 84,246, 85, 0, 92,163, 50,205,226,227,251, + 71,223, 27, 33, 18, 10,168,128, 65,155, 44, 0,166,127,163, 57, 0, 4,121, 33,136, 52, 28, 9, 29, 20,240, 99, 92, 58,226,154, + 82, 63, 1, 94,216, 66, 1,126, 0, 14, 80, 4,123,227, 51, 80,200,119,119, 60,120,252,187, 32,151,203, 47, 42, 20,138, 94, 47, +152,179,147, 66,161,184,198,151,238,139, 19, 89,117, 28,190, 94,199,177, 27,127,135,244, 54,214,130,245, 85, 92,114,182, 29, 56, + 3,130,252,124,150, 0,141, 19, 88, 50,161, 96,199,141,123, 5,174, 32, 6,108, 90,243,254, 62,189, 17, 96, 24, 3, 88,198, 8, +150, 49, 62,250,206, 26,193, 49, 90, 44,248, 54, 18, 96,148, 8,109,223,106, 7,192,186,153,122, 15, 17,232,157,183,174,156,181, +167,152, 10,236,219,190,236,195,204,220,170, 15,207, 95,207, 45, 14, 20,105,230,198,103, 96, 91, 99, 6,241,139,123, 63,194,174, +131, 39,115,214,109,218,159,200,129,192,206, 82,234, 63,118,120,156,199, 47, 7, 47,102,175,221,170, 77, 36, 28,129,173,149,212, +127,220,171,201,158,207, 83, 9, 2, 77,213,183, 63,109,218,230,234,217,188, 57,101, 76,255, 10, 48,234,224,225, 25, 46,152, 55, +227, 93,183, 69, 43,126, 92, 3, 96, 92,189,214, 32,111, 4,182,240,105, 61,115,199,190,171,158,170,170, 66,253,133, 19,159,167, + 80,132, 24, 29, 29, 3,196,139,191, 90,101,246,197,220, 25,159,232,217,156,107, 15,210, 16,223, 64, 82,232,214, 94, 56,250,245, +215, 43,219,246,233, 55,196,146,213, 23, 9,180, 85, 74,191,205,219,182, 44, 12, 8,234,104,222, 53,164,153,184,232,202, 20, 74, +173, 44,133,129,152, 73,123,135,246,177, 86,143, 29,101,220,242,203,158,105,241,105,248,174, 81,250,138,249, 95,172, 17, 3, 3, + 25, 0, 17,154, 48,129,144, 0, 31,220,137,185, 56,153, 41,187, 1,112,134,106,209,107, 0, 56, 35, 72,173,191, 47,189,185, 13, + 0,166, 52,165,126,104, 10,175,156, 63,127,195,173,160, 32, 47,236,219,111,191,158, 75,168, 27,167, 64, 97,103, 66, 26,162,154, + 34, 10,121,240,224,241,247,132,187,187, 59,155,155,155, 43,120,145,156,114,185, 60, 92,161, 80,156,124, 30, 14, 55, 55,183,207, + 0,188, 91,253,115,115, 94, 94,222,202,231, 77, 87,104,104,104, 51, 66,136,107,181,112,201,191,121,243,102, 14,223, 2,254,127, + 5,150, 12,132, 3,174, 12, 5,168,198, 45, 87,172, 30, 12,101,160, 4,128,177, 10,175, 13,238, 11, 71, 7, 55,128, 85, 1,172, + 6, 96,212, 0,251,232, 83, 92,148, 9, 48, 42,160,232, 20, 24, 66,164,141,206,149,177, 2, 40,252, 21,175,188,236, 9, 91, 43, + 25, 62,122, 35,208,113,227,145,164,205,155,143, 60,232, 27,159,134,209, 38,165,149, 16,116, 10,241,197,186, 77,170,196, 99,145, + 69,253, 1, 32,188,135,195,233, 78,109,154,123,172,221,170, 77, 60,121,169,108, 0, 0, 12,232, 98,125,170, 99,176,171, 39,247, + 28,219,159,176, 28,219,213,179,101, 8,197,100,173, 0, 77,151,161,170,170, 24,217,169,219,225,232,210,159,102, 56,174,123, 67, +215,155, 9, 49,231,163,207,150, 11, 85, 85, 5,122,194, 20,114, 46,150,197, 98, 17, 40, 1,167,186,172,215,228,151, 87,125,252, +193, 88,102,230,156,175,231, 0, 24, 83, 31, 79,160, 55,166,173, 94,177,182, 77,151,142,254,206,249,209, 31, 81, 85, 21, 5, 48, + 18, 51,233,171, 61,186,192,174,121, 32, 87,112,103, 53, 37,117,235, 11, 59, 47, 31,228,220,223,133,204,123,135,168,110, 29,135, + 75,119,236, 22,143, 5, 12,117, 10, 44, 95, 87,116,237,255, 74,199,125, 62,205,221,221, 8,225,192,113, 28, 8,225,160,213,179, +152,251, 67, 10, 84, 26, 6,131,251,190,212,197,193, 70,160,163, 1, 16,194, 33, 59,183, 68,125,225,106, 98,159,212, 92, 52,248, +230, 71, 1, 63,182,123,185, 87,215,123,215, 99, 2, 12,185,199, 17, 54,108, 89, 34,133,255,185, 27, 9,208,245,118,196,182, 0, + 96, 91,147, 95,154, 8, 1,155,245,251,114, 52, 11,121, 79,176, 97,219,105,167,138, 18,197,184, 67,251,127, 26,241,211,198, 13, +187, 18,211,154, 38,218,120,240,224,241,247, 67,110,110,238, 11, 23, 89, 87,175, 94,205,125, 30,145, 21, 26, 26,218, 61, 55, 55, +119, 69,110,110,110,141, 8, 92,209,177, 99,199,249, 53,227,212, 83,168, 32,132,140,185,121,243,230,165,250, 56,103,204,152,225, +126,229,202, 21,175,155, 55,111, 2, 0,194,194,194,188, 66, 67, 67,189,234, 58,215,220,220,156,109,215,174, 93,198,183,223,126, +155,203,183,144, 63, 87, 96, 37,230, 95,254, 56, 68, 95,170, 6,128, 68, 19,206,127, 98,169,165,214,200, 46,223,190,118,220,242, + 32, 63, 59, 84, 42,245, 56,119, 57,163,218,130,197,128,101,141,143,255,246,127,217, 17,157,153, 41,248,110,239, 3, 48, 44,183, +172, 62,206,167, 97,224,184, 55,219,119, 31,181,159, 35, 68, 98,110, 78, 87,180,244,112,112,158, 57,182, 29,253,209, 27, 65,208, +104,153, 81,187, 79,165, 92, 72,200,192, 38,147, 56, 57,166, 14,225, 85,199, 49,142,109, 48,239,207, 66, 59,127,179, 78,195, 6, +118,179,134,177, 20,172, 42, 29,122,150, 67, 94,158, 10,105,185, 98,216,112, 5, 38,113,114, 28,218,186,186,186,153, 95, 61, 59, + 59,221,217,170, 76,236, 96,198,138,197, 20, 71,104, 35, 17,232,245,137, 90, 59,247,190, 34,142, 67,219,134,234,200,204,204,234, +237,110,189, 6,217,100, 69,188, 75,153,121, 12,132,179,119, 51,164,223,218,142,194,216,227, 40, 41,204,164,108, 72, 25,204, 91, +249, 96,224,240, 55,176, 98, 90, 40, 42, 43,171, 64, 21,165,218, 72, 36, 82, 91,192, 80, 39, 39,161, 49,102,245, 55, 75,221,132, + 66,250, 81,121, 18, 6, 32, 70,128, 24,161,172,210, 65,175,215, 67, 38, 38,176,144, 17,160,218, 13,203,178,122,243,182,125,230, +188, 15,176,215, 26,202,123, 92, 58,226, 2,189, 16, 13,194, 4, 16, 86, 3, 10,136,142, 79,255,159,232, 9,242, 66, 80,135, 62, + 19, 62,160,128, 31,155, 82, 71,193, 45, 48, 56, 52,192,210,194,140, 73, 68, 78,228,135, 72, 97,101,196,165,205,187,120, 99,204, + 52,243, 13,155, 55, 14, 1,200, 84, 60, 57, 7,237,207, 88, 94,204,115,242,156,255, 72, 78,107,107,107,239, 22, 45, 90,204, 55, + 26,141,221,197, 98,177,139,193, 96, 0,199,113,249, 18,137,228,114, 70, 70,198,226,202,202,202,180,191, 91,222, 79,157, 58,213, + 24,145,213, 32,167, 72, 36,194,201,147, 39,147, 27, 33,178,158,224,164,105,122,231,129, 3, 7,176,127,255,126, 0,192,197,139, + 23,209,170, 85, 43,139,186, 46,204,206,206,182,120,253,245,215,119, 2,240,168,143,243,225,195,135,222, 75,151, 46,197,129, 3, + 7, 0, 0,191,252,242, 11,252,252,252,234, 76,204,221,187,119, 5, 95,124,241,133, 55,128,220,191,160,142,254,181, 2,139,160, +225,173, 85, 82, 93,173, 68, 33, 48, 26, 1, 32,181,177, 55, 75, 72,197, 55,235,182,156, 30, 16,113,232,199,238, 50, 9,141,133, +223,206,204, 46, 42, 82,190, 36, 20, 60,114,179, 48, 44,104, 59, 91, 73,204,178, 15,219,121,150, 85,104,241, 91,148,226, 82,124, + 26, 26,101, 10,141, 79,197, 57,128,179,173,182, 13, 65, 85, 89,232, 55,110,222,185,189,123,191, 25,208,118,198,152,182, 56, 26, +153, 49, 3, 96, 26,220,171,142,112, 28, 8, 97, 30, 79,106,175, 62, 88,237,114,250,223, 49,142, 16,128, 24, 65, 26, 57,207,123, +209,162,145,194,163,123, 15, 15,176,144, 10,191,159, 50,105,178,181,177, 36, 30, 21,229, 44,242,139, 85,200, 44,178, 5,107,214, + 18, 73,113,215, 88, 1, 77, 55, 56,255,140,162, 81, 73,140, 42, 43, 59, 51, 51, 58,176,227,251,110, 21,177,159, 87, 74, 5, 70, +129,109,251,165, 86, 5,247, 87,103, 49,186,194, 42,138,126, 82, 1,213,217, 25,218,216,180,210, 41, 51, 4, 21,229, 37,176,109, + 19,136,129,175, 14,193,194,137,173,161, 84,170, 80, 84,114,149,248, 54,183,161,180,183,119, 99,222,219, 1, 40, 41,206,131,222, + 8,208,149,218, 82,173, 94, 91,245,108, 75, 32, 54,124, 60,115,214,155,205,155, 57, 89,212, 44, 22, 32, 28,139,118,193, 62,232, +215,171, 19,206,197, 92,197,141,219, 73,224, 8, 87,189,152,128, 69, 78, 97,121,129,214,192,110,111,148,117,148, 99, 30, 89, 66, +235, 16, 96,104,130,107, 48, 56, 24,230,172, 10, 95,134,181,182,154, 56,251,237,230, 86, 86, 18, 10, 90, 51, 22, 90,173, 17,202, +196, 31,224,208,172, 13,204,101, 50, 42, 36, 68, 35,188,125, 27,252,190,130, 60,120,212,194,136, 17, 35,100, 5, 5, 5,145, 30, + 30, 30,129,125,251,246, 53,239,222,189, 59, 84, 42, 21,206,156, 57, 3,181, 90,221,220,195,195,163,249,217,179,103,135,103,102, +102,198,123,120,120,244, 60,112,224,128,182,177,247,168,153, 84,254,162, 39,135, 75, 36, 18,196,196,196,188, 80, 75,150, 68, 34, +193,245,235,215,147,155, 98,201, 82,169, 84, 98, 87, 87, 87, 56, 56, 56,128,101, 89,168, 84, 42, 28, 57,114, 4,149,149,149,224, + 56, 14,102,102,102, 88,125,170, 2,218, 7, 7,176,249,251,165,168,168,168, 16, 55,196, 89, 92, 92, 76,249,251,251, 67,167,211, +129, 97, 24,104,181, 90,156, 63,127,254,241,111,161, 80,136, 37, 7, 10,160, 75,218,139, 29, 27, 86,163,184,184,152,250, 11,155, +143, 41, 90,228, 31, 37,176,106, 50,244,167,103,140,101,153,185, 27,183,239,141,153,251,225,104, 76,123,187,143,199,226,239, 14, +247, 77, 72,195, 14, 0,104,237,141,113, 99,195,125, 61,109, 45, 68, 88,244,243, 77, 0,100,238,243,222, 47, 46, 19, 73,129, 62, +220,140,195,145,153,145,159, 79, 12,129,143,135,117,171, 50, 67,169, 36, 53,213,132,249, 62,156, 17,118,150, 82,255,240, 30, 14, +167, 65, 56,216, 90, 74, 3, 64, 88,216, 90, 73,253, 7,116,177, 62,197, 17, 2, 91, 11,113, 0,225, 76, 15,206,221, 49, 88, 58, +201, 76, 68, 79,178,176,178,245,252,120,202, 88,179, 65,131, 94, 55,179,144, 16,148,196,159, 68, 37, 9,130,222,194, 2, 68, 93, +142,180,135,177,236,169,168,155, 10,169,131,219,167, 64,122,253,201,100,113, 41, 55, 59, 97, 88, 11,223,190,182, 69, 55,231, 21, +122,247,217,237, 69,131,165, 85, 49,195, 11, 45,172, 2,197,209,119, 99, 25,142,197,213,134,210,166,172,172,204, 48, 26,224,166, + 53,138,172, 82,174,111,195,156,177, 65, 40, 47, 43,130, 86,199,160, 92,197, 24,220, 28, 13, 82,109,217,125,232,244, 12,116, 6, + 2,145,185, 59,206,198,196, 22,115,140,241,212, 51, 21,121, 30,238,164,238,186, 99, 89,251,152,143, 27,218,205,182, 51,187, 3, + 86,131,204,172, 92,236, 56, 24, 19,146,154,135, 59,207,247, 72, 50, 32,204,255,250,232,154,201,239, 77,153,220, 30,208, 28, 29, +197,140,232,251, 69,115, 6, 5,246, 12, 98,165,148, 54, 15, 20, 0,115,153, 16, 58, 25, 11, 27,153, 15,136, 65, 73,212, 90,109, +121, 92, 44,248,200,236, 60,120,212,130,191,191,191,171, 66,161,136,155, 57,115,166,253,176, 97,195, 30,139,129,237,219,183, 99, +237,218,181, 88,184,112, 33,140, 70, 35, 54,110,220,104,126,240,224,193,142, 63,254,248, 99,142,167,167,103, 80, 86, 86, 86,190, +137,162, 74, 92, 61,118, 61,154, 85, 64, 8,187,104,209, 34,178,112,225, 66,212, 28, 3,192, 2, 13,191, 84, 62, 75, 12, 73, 36, + 18, 36, 38, 38,190, 16,145, 37, 18,137, 32, 22,139, 33,145, 72,240,224,193,131, 70,139, 44,134, 97, 4, 57, 57, 57,168,172,172, + 68,191, 33, 67,176,118,249,114,116,239,222, 29,125,251,246, 5, 33, 4, 17, 17, 17,232,108,151, 4,251, 33, 61,144,144,144, 0, +163,209,104,146,103, 42, 39, 39, 7, 37, 37, 37, 24, 48,100, 8, 54,253,244, 19, 58,116,232, 0,127,127,127, 0, 64,100,100, 36, +250,200, 51, 96,233,223, 23, 73, 73, 73,127,101,243,249,203,180,200, 95,109,193,250, 75, 16,151,138,223,185,195, 81,199,223, 24, + 20, 54,120, 72,239, 64,108,218,123, 97, 41,164,149,123, 1,192, 65, 42,253,234,237, 65, 62,136, 79, 45, 67,196,245,220,227, 9, +233,248,253, 69,220,147, 99,225,232, 96,107, 14,208, 18,168,245, 44, 99,109,221,240,196,100, 14, 4,230,173,231, 96,236,176, 4, +143, 78,109, 60, 60, 8, 97,170, 87, 12,174,193,184, 87,147, 61,195,130, 92, 60, 31,185,188,140,176,238,188, 27,224, 44, 26, 76, + 71,183,246,178,179,159, 78,255,240,229, 65, 67,222, 48, 19,155, 59,128,211,100,195, 88,122, 15, 37,105, 23,161, 51,107,143,162, +156,116,236, 61,250, 91, 69, 98, 90, 65,165, 64, 64,159, 19,218,184,204, 58,127, 62,173,138,162,234,111,103, 90, 1,150, 45,156, + 63,119,208,222, 93,123,108,204,220,187,225,225,209,240,114,137,192, 40,117,150,251, 65,195, 88,177,171,182, 30,183, 85, 1,203, + 27, 74,159, 90, 85,121,232,124,196,233,209,190,110, 93,173,210, 99,143, 67,173,214, 67,103, 4,130, 59,244, 2,203, 17, 9, 69, + 83,156,181, 64, 64, 21, 20,148,130, 50,114, 5,151,111,167,231, 69,223, 72, 21,232,232,134,185,159,104,116, 98,193,244, 33,125, +219, 1,172, 6,175,246, 11,198,183, 91, 35, 62, 4,216, 9,207,247, 88, 26, 65, 88, 13, 8,208, 53,208, 11, 63,115, 64,215, 91, +167,190, 13, 8, 29, 56, 3,141,177, 96, 5,121, 97, 96,160,159,251,182,111,151,206,181,183,119,246, 16,128,213,128, 98, 42, 9, + 87,250, 59,132,170,135,176,110, 54, 8,172, 77, 23,108,248,105, 85, 21,199,145,189,104, 66,136, 10, 30, 60,254,205,208,106,181, +135,150, 47, 95,110, 63,120,240,163,213,238, 85, 85, 85,184,122,245, 42, 54,111,222, 12, 11, 11,139,218, 98, 9,225,225,225, 32, +132,216, 47, 88,176,224, 16,128,151,159,197,217,185,115,231, 33,107,214,172,201, 2,240, 16,143, 98, 28,137,241,104,131,121,114, +254,252,121, 26, 0, 58,118,236,200, 94,191,126,157, 3, 64,198,140, 25, 35, 58,122,244,104, 43,149, 74, 21,213, 84,129, 37,145, + 72,160, 80, 40,158, 91,100,137, 68,162,199,124, 98,177, 24, 10,133,162, 81, 34,139, 97, 24,225,137, 19, 39,112,251,246,109, 44, + 10, 9,193, 71,110,110,112,112,112, 64, 84, 84, 20, 8, 33,176,176,176, 64,105,105, 41,246,238,221,139, 94,189,122,129, 97, 24, +177, 41,188, 71,142, 28,193,173, 91,183,176, 36, 52, 20, 31, 90, 88,192,214,214, 22,145,145,145, 0, 0,169, 84, 10,133, 66,129, +243,231,207,163,103,207,158,124,163,254,179, 5, 86, 15, 64, 88, 74,193,213,104,208,128, 48, 4,160,224,222,186, 53,196, 9, 9, +141,127, 75,160,129,121,235,182, 30, 31,244,237,220, 87,169,247, 70,132,184, 47,254,241,226, 84, 0,152, 56,202, 79,110, 46, 21, + 98,221,222,120, 66, 3,243, 94, 68, 6, 91,183,134,152,210, 97,106,191, 46,254,200, 45,214, 35, 53,171,226, 66, 66,186,105, 46, +157,136, 29, 99,241,203,161,200,236,181,219,158, 92, 49,184,237,200,173,172,213, 59,180,137, 4, 4,182,102,162,128, 9,175,118, +110,112, 21, 97,199, 96,233,164,217, 51,102,188,252,218, 91,179,204,140, 57,135,161,203, 56, 1,176,106,168, 85, 20, 42, 25, 95, +228,101,229, 96,209,183,123,178,117, 70,250,205,155,241,218, 70, 9,203,135, 15, 81, 37,244,174, 28,182,252,155,249,231,190, 94, +180,192, 82,170,136,168, 20, 9,161,162, 29,186,139,190,154,191, 94,168,172,208,191,158,154, 5,101, 67, 60, 58, 26,203,191, 89, +253,221,160,119,199, 14, 75,244,243,232,233,192,230,167, 58,168, 43, 42, 10,119,159,186,229, 90,253, 54, 65, 1, 64, 74,122, 9, +138, 74, 85, 12,203, 24,163,172, 12, 88, 28,175, 48,125,245,159,183, 51,156, 6,247, 14,122,203,201, 86, 2,141,170, 12,206,118, + 98,244,239,218,242, 45,163, 54,105,118, 90, 97,227, 98,140, 60,161,175,170, 93,132, 49,155,123, 7,128, 51, 4, 16,206, 8,125, +230,206,166,188, 62,205,152, 49,186,185,141,189,133,158,166, 88, 21, 32,178, 3, 36, 78, 20,109,230, 5,129,153, 39, 50,146,111, + 50, 51,222, 31, 93,146,145,145,191,197,145, 96, 37,223,133,240,224,241, 36, 50, 51, 51,223,254,252,243,207,163, 59,117,234,228, +226,232,232,136,224,224, 96, 28, 59,118, 12,159,126,250,233,227,115,218,183,111, 15, 0, 40, 41, 41,193, 55,223,124,147,159,155, +155,251,118,189, 47,230,113,113,137, 59,119,238,236,218,182,109, 91,189, 88, 44, 46,171, 17, 89,153,153,153, 66,149, 74, 69,233, +245,122, 98, 97, 97,193, 73,165, 82,227,200,145, 35, 13,215,175, 95,111,165, 82,169, 50,159,199,130, 21, 26, 26,122,191,188,188, +188,130,162,168,231, 14,225, 80, 35,174, 2, 2, 2,156,244,122, 61, 11,160,180, 41, 33, 28, 24,134, 65,104,104, 40,206, 95,186, +137, 83,151,238,163,170, 40, 21, 99, 94,239,143,128,128, 0,156, 57,115,166,201,117, 22, 26, 26,138,243,231,163, 17,121,243, 1, + 10, 50,227, 49,246,141,161,240,247,247,199,249,243,231,249, 6,253, 2, 4, 86,189, 38,185, 0, 79,180,163,173, 37,191,204,123, +181,101,160, 48,120, 33, 40,161, 25, 14,111, 59,214,101,238,215, 63, 39, 10, 42,178,198,196,154,176,218,235,137,135, 37, 29,113, + 4, 15,246,220,141, 15,120,235,213,238, 30,216,244,171,249,151, 0, 48,170,159, 55,174,199, 23,225, 90,108,225,158,248, 38,198, + 44,170,141, 96,103,152,179, 58,236,249,102,214,107, 61,155, 55,115,197,230,253,209,160, 8, 14,153, 52,208, 18, 66, 58,181,245, +196,218,109, 79,175, 24,116,243, 92,189, 67,155,120,246,170,114, 32, 0,244,123,201,252, 84, 88,107,123, 79, 66,234, 95, 70, 40, + 19,209,239, 13,124,245,109, 51,166,224, 12,184,210, 95, 33,146,136,161, 81,177,200, 43,212, 65, 99,110,134, 11,151,163, 52, 85, +106,102,198,189,100,166, 73, 86,187,132, 52,164,138,133,183,179, 84, 26,141,155,165,125, 75, 21, 77,129, 84,233, 69,228, 86,188, + 66, 21,159,133, 7,166,112,164,166, 66,255,146,156,233,182, 97,199,175,243, 69, 34,201, 40,129, 0,148,179,173,133,211,207,235, +150,192,202,202, 18,132, 81,130,232,138, 49,108,226,215, 69,177,201, 70,111, 0,104,213, 10,150,221,218,138,118, 8,105, 42,231, +226, 29,195, 23, 13,221,131, 18, 96,202,152, 87,219,137, 56,163, 10,211, 23,236,195,134,175, 94,197,216, 33,173, 69, 39, 46, 36, + 77, 1,176,184,233,102,202, 71, 46,194,151,223,187,148, 72, 1,209, 4,232,122,243,248, 87, 1,104,132,231, 49, 36, 4, 34,182, +138,106,221, 90,174, 23,177, 57,123, 65,201,228, 68,224,216, 19,176,104, 69, 17,203, 96,252,176,110,126,213,166,205,155,207,114, + 20, 22, 61,200,104, 48,228, 5, 15, 30,255, 85,164,230,230,230, 14, 8, 15, 15,143, 56,115,230,140,125,112,240,163, 29, 85,110, +221,186, 5, 0,143, 93, 81, 5, 5, 5,120,243,205, 55,139,243,242,242, 6,160,129, 57,189, 74,165, 50,237,240,225,195, 46, 26, +141, 38,236,139, 47,190, 40,104,209,162,133,210,104, 52, 18,165, 82, 9,134, 97,136,147,147,147,168, 67,135, 14, 84, 80, 80,144, + 38, 34, 34,194, 33, 59, 59, 91, 9, 32,163, 41,137,127,247,221,119,113,240,224, 65, 0,192,139,136,139, 37, 22,139, 17, 30, 30, + 46,191,122,245,170,162,154,179,201,113,177, 8, 33,184,119,239, 30, 46, 39,179,144, 88,216, 33, 35,177, 18,231,127, 59,138, 49, +239, 77, 6,195, 52,125,182,194,221,187,119,177,247,252, 93,184,200, 91,162, 66,119, 15, 71,142, 28,193,212,169, 83,159,139,179, +137,248,215,184, 7,159,182, 96,253, 33, 67, 62, 62,144, 72,245, 88,208,175,163,124,214,200, 62, 45, 5,140, 58, 23, 28,199, 65, + 0,192,209,138,198,214, 77, 27,188,127, 61,124, 50,230,251,239,126,252, 14,122,110, 94,108, 33,212,141, 48, 99, 45, 88,179,253, +202,168,157, 75,122, 8,167,142, 8,176, 7, 0,177,136,198,186, 61,113, 12,104, 44,120,158, 76,189, 36,135,172, 74,140,247,156, +157,109,190,156,251,254, 32,251,158,157,252, 16, 21, 19,139,239,118,197, 92,146,216,225, 23, 83, 31, 59,194, 49, 79, 76,104,127, +116,172, 14,227, 23,105,184, 17,178, 28,113,149,152, 59, 66,155,113, 18, 66,137, 20, 12, 99, 64, 81,129, 26,233,249, 28,100,238, + 34, 92,191,151,169, 25,250,214,176, 19,207,211, 48, 45,204,101,238, 11,190, 90,213, 76,163, 81, 50,149,229,197,140, 80, 28, 35, + 52, 55,147,230, 63,218, 57,192, 52,252,174,128,182,123, 59, 81, 7, 16, 78, 32, 21, 16,245,220, 25,227, 45, 20, 73,103,224,235, +148, 11, 10, 4,102,238,131, 96,101, 33, 16,119,109, 43,202, 2, 0, 11,115,115,201, 55,139, 63,181,249,120,246,162,203,166, 88, + 19,253,156, 93, 63, 14,246,181, 71,212,181, 4, 92,186,145, 25,119,233,247,164,160, 94, 29,221,225,231,109,251,145,196,182,124, +121, 83, 44,162,143,234,224,145,139,176,102, 21, 97,144, 23,130,194, 6,127,241,172,213,131,117,194,235, 54,184, 36,111, 2,138, + 18,128,128, 2,180, 10, 48,217, 59, 33,240,254,144, 28, 58,250,149,102,243,166,205, 75, 18, 50,120,171, 21, 15, 30, 13,161,162, +162,226, 94, 98, 98, 98,255,118,237,218,109,159, 62,125,186,213, 91,111,189,229,254,238,187,239,210, 0, 80, 80, 80,192,173, 93, +187, 54,247,251,239,191,175, 40, 46, 46,158, 96, 52, 26,239,155,242,132,231,229,229, 93,221,186,117,107, 81,116,116,116,208, 75, + 47,189,100, 30, 22, 22,198, 57, 59, 59,139,213,106, 53,155,157,157,173,137,137,137, 97,147,147,147,109,202,203,203,147, 1,164, +160, 9,238,123,119,119,119,208, 52,189,216,195,195, 99,190, 66,161,104,243, 34,230, 96,249,250,250,186, 3, 72,150,203,229,190, +141,117, 15,254, 97,192, 22, 10, 81, 86, 86, 6,101, 78, 10,212, 37,197,240, 23,168,209,222,222, 17, 86, 86, 86,207, 37,134, 42, + 42, 42, 32,212, 21, 32,245, 94, 38,202,243, 51, 16,216, 60, 20, 22, 22, 22,208,233,116,255, 31,205,135,250,183, 60, 7,207,116, + 17, 6, 54,195, 84, 51, 96,237,248,145,222, 98,239,230,205,160, 47,186,133, 59, 41, 85,248, 98, 75,199,120,129,216, 74, 55,109, + 92,191, 14,189,250, 58,161, 71,207,142, 84,139,230,182, 31, 45, 95,190,254,131, 64, 73,241,167,241,217, 88,103,202,141,227, 83, +145,198,113,133,155, 47,222, 80, 76,105,230,164, 1, 1,193,197,155,121,184,159, 82,182, 57, 49, 29,105,141,201, 68, 96, 75,244, + 21, 82,244, 62,194, 18,153,141,149,133, 50, 48,160,153, 99,223,174,109,233, 1,189,194, 32, 22, 2,209,215,238, 98,198, 87,135, +126,231, 36,100,144,201, 43,190, 8,247, 7,225,244,104,197, 32,243,196,138, 65, 66, 8, 1,199,128,144,250,167,117, 9,104, 42, + 95, 85,112,211, 85, 98, 21, 8, 67,201, 5, 20, 20, 84, 33, 46,213,128, 42,120,160, 44, 39, 7,132,176, 89, 11, 22,252,218,228, + 39,196,209,209,209,217,187,149, 95,203,239, 55, 29,128, 65, 87,129,212,248,109,168,170,204,199, 87,203,126,107, 41,151, 59,244, + 80, 40, 20, 81,166,183,110,202, 47,226,194, 30,103, 16, 64, 32,148,226,196,198,253, 40, 22,154,193,209, 70, 12, 78, 91,136,247, + 38,141,177, 9, 31, 52,198, 6, 0,178, 82,238,194,211,222, 52, 93,109, 40,199,240, 81, 19,252,109,193,170,241,203,145,187, 90, +154,194,128, 95,126,139, 75,233,213,193, 86, 54,170, 95,115,187,197, 27,202, 95, 7,176,167, 73,250,138, 99,159, 88, 69,216,148, +213,131, 7, 0, 54,128, 32,101,207,249, 34,203,145,225, 33,102, 98, 33, 69, 17,173, 2, 28, 37,166,214,253,184, 85, 41,161,176, +145, 31, 58,121,240, 48, 13, 26,141,230,150, 70,163,105,243,217,103,159,189,249,249,231,159,119,183,176,176,240, 6, 0,149, 74, +149,102, 52, 26, 47, 85, 63,235,108, 99, 30,115, 0,201, 41, 41, 41,105, 41, 41, 41, 46,191,252,242,139, 45, 0, 89,245,255,180, + 0,202, 1, 20, 52,146,243, 9,212,136, 41,119,119,247,249, 47,170, 28,106,196,148, 92, 46,247,109,202,245, 2,129,128,165,233, + 71, 59,251, 72,165, 82, 92,190,124, 25, 3,187,118,195,221,243,153, 8,112,241, 64,175, 49,227,113,228,226, 69, 8, 4,130,154, +243, 27, 53,142, 8,133, 66, 68, 71, 71, 99,196,224,158, 56,114,228, 8,124, 66,219,225,195, 15, 63,196,233,211,167, 33, 20,242, +187,233,253, 41, 2, 11, 4,139,207,237,251, 90, 12,206,136, 3,187, 87,224,220, 13,181,254,129, 2,243,252,115,176,246, 0,148, + 92, 97,241,193, 41, 39, 34, 83, 87,190, 51, 97,176,121,239, 30,253,208,187,123, 47, 97, 80,187, 30, 95, 2, 79, 8,172, 96,212, + 19, 43,131, 53, 98,201,198,131,137,147,247,157, 76,162,192, 40, 49,250,213, 48,194, 26,177,164,129, 52,255,129,211,198,220,114, + 95,244,229, 24, 59,176, 85,200, 79,191, 40,115,117,241, 6,136, 17, 15, 31, 38,225,135,173, 71,184,200,152, 7, 59,245, 2, 76, + 79, 77,128,202, 84,206, 71,138,138,129,141,165,228, 15, 43, 6,109,205, 68, 1,253, 94, 50, 63, 69, 8, 33, 86,230,162, 0, 82, +183, 5,235, 9, 78,173,145,219,184,115,199,166, 85, 19, 39,190,107, 81,162, 83, 32, 41, 59, 14, 90,129, 28, 2,243,150,136,187, +121, 70,163, 49,114,155, 76,168,175,103,150,103,113,113,113,225,173,155,165,216,183,125, 25,140, 70, 29, 10,243, 30,105,212,188, +130, 74, 88, 91,203, 99, 20, 10,133,201,156, 6,134,171, 24, 62,236, 61,177,153, 12,102, 99, 70, 13,146,164,228,234, 16,226,111, +245,168, 89, 24,138,145, 24,121, 25,189,156, 31, 77,134, 76, 73, 20,192,243, 37,119,147,210,105,101, 37,158, 62,176,155, 28,105, +153,249,184,124, 75,177, 35, 45, 23,185, 44,201,219,145,146,245,127,236,157,119,120, 20, 85,219,198,239,153,217,154, 77,239,187, +155,102, 8, 33, 36,212,132, 78,130,116, 8, 77, 64, 64, 64, 4, 65, 69, 41, 98, 65,165, 55, 1, 1, 17, 68,138, 8,136,136, 32, + 2, 82, 69,164,247, 30, 18, 2,132,144, 16, 18, 18, 82, 54,189,111,157,157,242,253,145,242, 6, 76,217, 4, 62,124,229,157,223, +117,237,181,217,157,201,189,115,230,204,204,185,207,115, 90,225, 7,131,187,123,227,219, 29,247, 62, 4,204,187,234,147,246,230, +190,104,206, 1, 97,224,205,224, 25, 3,120, 32,172,185, 47,154, 91, 56,114,240,111,154, 34, 18,111,174,222,157, 60,247,247,115, + 57,131,191,120,183,139, 93,104,167,126, 82,112,102,190, 68,103, 52,199, 62, 66,241,179,228,209, 51, 32,104, 10,154,255, 86, 77, + 22,192, 14,179,217,188,163,176,176,240,121,106,102,224,239,243, 50, 61, 83,218,171, 54, 7,102,100,100, 80,106,181,154,181,160, +147,123, 93,154,215,171, 26,173,242,232, 85, 93, 81,172,167, 53, 51, 58,116,232,224, 52,104,208, 32, 48, 12,131,132,132, 4,164, +164,164, 96,208,132,241,112,116,116,196,245,123,247,144,144,144,128,249,243,231,131, 97, 24,220,184,113, 35,173, 46, 77,177, 88, + 76,183,110,221, 90, 50,100,200, 16, 48, 12,131,196,196, 68, 36, 39, 39,227,195, 15, 63,132,189,189, 61,238,221,187,135,196,196, + 68,204,159, 63, 31, 70,163, 17, 73, 73, 73,244, 11,186,150,254, 71, 12, 22, 1, 22,156, 25, 69, 17, 11,240,195, 17,208, 52,131, +192,123,105,120, 84,209,241,228, 94, 26, 54, 82,252,237, 63,110,199,220, 79,138,188,222, 67,138,226, 59,168,111,205,225, 65, 26, + 52,182,138,146, 18, 48, 37,118,200,249, 11,143,210, 75, 74, 31,164, 65,211,128,232, 5, 1, 86, 7, 20,221,196,193, 35,231, 32, +147,223, 66, 68,212,125,246, 74,100,252,110,146,199,226,216,100, 60,168,191, 38, 15,155, 54,107,240,246,107, 15,203, 70, 12,242, +102,240, 28, 3,251,208, 93, 24,255, 90,103,239,118,129, 14,222,224,204,224,121, 51, 28,123,158, 5,230,202,107,213,187,113,215, +184,165, 75,176,124, 88, 73,113,110,135,222,221,187, 89,187, 6,188,129,162, 7,247, 16, 19,117, 82,127,243, 78,252,213, 27,119, +141, 91,158, 37, 35, 61, 60, 60, 94,237,217,179, 41, 70,190, 61, 11,180,177, 16,137, 49, 63,161,164, 56, 19, 23, 47,219,224,254, +227,226, 78, 0, 44,142, 96, 93,141, 97,154, 3, 5, 8,109, 33,126,108, 39, 53, 41,199, 14, 31, 8,153,200, 0,206, 92, 2,130, +206,197,195,124,186,104,216,130, 52, 22, 0, 20,114, 66,100, 45, 42,178,179, 40,210,232,231,220, 68, 33, 49,227,151, 67, 49,224, +136,178,101,150, 56, 2, 27,127,249,227,225, 7,139,167,134,160,153,159, 99,235, 91, 9,217, 21,109,240,150, 86,105,167,220, 60, +188, 40,208, 16, 51, 15, 60,103,198,165,149,142,129, 93, 62, 47,152,130, 6, 46,139,115, 55, 17,233, 0, 62, 0,171,219,244,209, +210, 99,243,218,182,184, 23, 54,253,131,193,118, 32,132,133,209, 5, 4, 4, 94, 60, 58,157,238,253, 25, 51,102,108,162, 40,202, + 21, 0,193,243, 60,140, 70,163,232,199, 31,127, 20, 51, 12, 67, 82, 20,197,202,229,114, 38, 50, 50,210,204,113, 92, 14, 77,211, +239,215,165,105, 50,153, 30,174, 95,191,190,177,217,108,174, 28,113,104, 52, 26,177, 99,199, 14, 24,141, 70,200,100, 50,216,216, +216, 32, 49, 49, 17, 4, 65,208, 44,203, 62, 20,114,226,121, 26, 44, 96, 81,232,235, 11, 22,128, 7, 1, 2, 11,239,165,253,125, + 50,166, 59,233,200,104,230, 73,127,210, 60,184,235,130,114, 83,182,168,190, 7, 96, 96,217,225,237,218, 4,252, 6, 0, 70,142, +125,171, 33,137, 40, 54,232,223, 8,110,223,105, 55,199,243, 34,134,229,127, 36, 73,236, 51, 0,177,137,143,234, 30, 57, 87, 19, + 25,154,194,200,126, 97,246,124,197, 18, 56,149,205,130,229,211, 49,240, 60,207, 87, 54, 11,206,149, 35, 55,207, 88,103,111,234, +139,183, 12,125,218,183,144,189,119,252,124,212, 68,150,227,149, 20, 73,100, 26,204,220,230,103, 53, 87,229,181,163,243,167, 78, +165,159,184, 29,230,222,199,165,124,154,213,220, 66, 32,183, 8, 39,210,211, 75,207, 55, 68,179, 64,111, 30, 60,123,229,161,195, + 82, 17, 37, 2,120,112, 92, 89,122, 13, 52,155, 95,102,194,128,150,254, 80,127,254, 35,243, 27, 69, 17, 41,117,233, 93,191,163, +249,118,228,231,167, 62,139, 73, 40,248, 49, 57,189,172,230,147,156,142,187,123,142, 63,154,247, 48,181,228,179,187, 9, 5,223, +160,158,253, 38, 8, 96, 67,187,215, 22,252,237,187,103, 61,159,247, 31, 35, 26,192, 80,240,105,189, 71, 78, 90, 55,157, 32, 32, + 44, 19, 33, 32,240, 63, 68, 69, 20,139, 36,201, 47,159,151,102, 69, 20, 11, 64, 66, 61,142,227, 58,128,150,207, 51,109, 81, 81, + 81,121, 0,242,132, 92,254,119,211, 66,208, 4,120,158, 39,159,229, 85,223,227,244,247,247,231,235, 97, 84,132, 60, 18, 52, 5, + 77, 65, 83,120, 38, 63,227, 51,153,231,121,226, 89, 94, 66, 30,189,124, 8,205, 30, 47, 0,130, 32,184, 23,249,123, 9, 9, 9, +132,112,214, 5, 4, 4, 4, 94,220, 51,249,121, 47,217, 35,240,239,135, 20, 78,129,128,128,128,128,128,128,128,192,115, 54,221, +168, 57,204, 87,159,209, 1, 13, 9, 21,222, 21, 52, 5, 77, 65, 83,208, 20, 52, 5, 77, 65,243,127, 78,179, 46,109, 97,116,226, +255,147,241, 18, 52, 5, 77, 65, 83,208, 20, 52, 5, 77, 65,243,127, 79,243,165, 66,104, 34, 20, 16, 16, 16, 16, 16, 16, 16, 16, + 12,150,128,128,128,128,128, 25, 33, 81,140, 0, 0, 32, 0, 73, 68, 65, 84,128,128,128, 96,176, 4, 4, 4, 4, 4, 4, 4, 4, + 4,131, 37, 32, 32, 32, 32, 32, 32, 32, 32, 32, 24, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129,151, +157,138,165, 85,186, 10,167, 66, 64, 64, 64, 64, 64, 64, 64,240, 34,207, 47, 81, 85,223, 5, 4, 4, 4, 4, 4, 4, 4, 4, 47, + 34,184, 70, 1, 1, 1, 1, 1, 1, 1,193,139,252,119,186, 70, 1, 1, 1, 1, 1, 1, 1, 1,193,139, 60, 35,194, 40, 66, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129,231,136,176,210,184,160, + 41,104, 10,154,130,166,160, 41,104, 10,154,255,115, 8,125,176, 4, 4, 4, 4, 4, 4, 4, 4, 4,131, 37, 32, 32, 32, 32, 32, + 32, 32, 32, 24, 44, 1, 1, 1, 1, 1, 1, 1, 1,193, 96, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 75, 64, 64, 64, 64, 64, + 64, 64,224,191, 6, 2, 53,143, 4,184, 91, 15,157,134,140, 38,184, 43,104, 10,154,130,166,160, 41,104, 10,154,130,230,255,156, +102, 93,218,119, 33,240,255, 98,188, 4, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,252,223,211,124,169, 16,154, 8, 5, 4, 4, + 4, 4, 4, 4, 4,158, 51,162,127,216,220, 85, 24, 60, 14,255, 89, 69,251,191, 77, 83, 64, 64,224, 57,208,165, 53,102, 72, 37, +226, 9, 6,218,188,226,114, 52,126,234, 26, 2,103,134,195,114,185, 68,212,197,104, 98,190,190,116, 27, 63,214, 83,146,120,234, +179,112,175, 63, 35,189,123,247,158, 8, 96, 1,207,243, 60,199,113,115,206,156, 57,179,253,121, 60,235,149, 74,229, 40, 0, 10, + 0, 32, 73,178, 40, 35, 35, 99,175, 37,255,216,181,107, 87, 81,105,105,105, 50, 0,143,242,175, 30, 68, 69, 69, 5,212,181, 77, +160,254, 68, 68, 68,240, 62, 62, 62,104,217,178,101, 92,102,102,230, 58, 0, 27,133,179,242, 95,100,176, 2, 92,229, 29, 95,241, +114, 29,112, 44,242,241,156,186,110, 56, 15, 15,143,229,174,174,174,147,116, 58,157, 1, 0, 79,146, 36, 79, 16, 4, 42, 94, 0, +192,178,108, 78, 92, 92,156,165, 97,200,231,166,217,164, 73,147,155, 36, 73,122, 86,252, 15, 0,212,245, 55,199,113,105,177,177, +177,109,235, 58, 72,165, 82,217,151, 36,201,153,117,237,199,113,220,242,204,204,204,227,181,237,211,162, 69,139, 40,107,107,107, +119,146, 36,137,154,246,225,249,255,148, 57, 12,195,240, 58,157, 46,235,222,189,123, 33,245,205, 91,181, 90, 61,135,231,249, 16, + 0, 63,107, 52,154,163, 0,216,103,185, 86,212,106,245, 48,158,231,231,150,159,195, 37, 25, 25, 25,251,234,243,255,254,254,254, + 55, 37, 18,137, 39, 69, 81,196,211,121, 82,221,103,142,227,120,147,201,148, 22, 31, 31,223, 86,184,237, 95, 60,157, 90,163, 99, + 99, 95,213,252,169,111,118,199,103,203,119, 79, 13,109,193,228, 74,164,146,141,195,194, 26, 59, 52,243,115,192,151,155,174, 78, + 3,184,250, 24, 44,194,203,203, 43,216,221,221,221, 87,175,215, 87, 92,139, 60, 69, 81, 79,236, 68,211, 52, 29, 23, 23,119, 84, +200, 1, 11, 11, 4,145,104,254, 31,127,252,161,226, 56, 14,253,251,247, 95, 8,224,121, 24, 44, 66, 38,147, 89, 61,122,244, 8, +102,179,153,244,241,241,177,169,103, 25,229, 18, 25, 25, 9,154,166, 77,157, 58,117,242,169,186, 77, 42,149,186, 92,185,114, 5, + 0, 76,109,218,180,241,105,232, 1, 6, 5, 5, 89, 91, 91, 89,125, 74, 17, 68, 47,150,231, 3, 1,128, 34,136,251, 44,207,159, +210,234,245,171, 99, 99, 99,181, 47,123,222,159, 60,121, 18, 19, 39, 78,196,157, 59,119,154, 30, 61,122,244,251, 57,115,230, 76, +209,104, 52,221, 1,228, 8,119,198, 63,108,176, 26, 43,173,155,186, 58, 58, 28, 89,177,116, 17,142,245,121,187, 54,131, 69,170, + 84,170, 21, 93,186,116,153,176,115,231, 78,235, 3, 7, 14, 88,251,250,250, 66, 34,145,128,162, 40, 80, 20, 5,146, 36, 65, 81, + 20, 6, 15, 30, 76, 88,106,174,170,106,158, 62,125,218, 58, 32, 32,160,178,144,229,121,190,210,100,245,239,223,191, 78, 77,146, + 36, 61,163,162,162,220,228,114,121,229,255,115, 28,247,196,139,231,249,202, 23,203,178,232,210,165,139,101, 7, 74,146, 51, 99, + 99, 99, 95,213,106,181, 79,104, 84,252, 70,197,223,175,190,250, 42, 0, 28,175, 67, 75,125,249,226,105, 55,130, 78, 2,152,124, +240,148, 19, 32,109, 4,144,178,106,247,207,207,207, 71,247,238,221,169,134,228,175,171,171,235,216,115,231,206,249, 63,122,244, +104,200, 87, 95,125,149,119,245,234,213,239, 1,108,213,104, 52,169, 13,209,227,121,126, 73, 82, 82, 82, 19,158,231,225,231,231, +183, 24, 64,189, 12, 22, 69, 81,158, 39, 79,158,116,147, 74,165,149,249, 92,211, 59,203,178,160,105, 26,225,225,225,140,112,203, +255, 67, 15, 26, 2,139, 71,190,214, 27,122, 51, 9,179,153,113, 85,185,218,238,152, 54,182,171, 24,188, 9,219, 15, 71,193,204, +112, 63,213,215, 92,245,235,215,207,103,227,198,141,162,216,216, 88, 81, 80, 80, 16, 88,150,173,124,113, 28, 87,175,251, 82,160, +210, 96, 17, 36, 73, 34, 61, 61, 29, 54, 54, 54,246,221,186,117,203, 96, 89,118,246,197,139, 23,183,255, 63,252,220, 19,145, 45, +130, 32,180, 26,141,102,215,139, 78,115,235,214,173,187,200,197,226,221,139, 22,124,226, 22,216,188, 5,233,236,234,140,135, 15, +211, 32, 21,241,161, 15,227, 30,116, 88,188,236,187, 15, 90,183,110, 61, 50, 58, 58,250,226,203,150,223,222, 67,183,124,207, 49, +244, 36, 0,216, 20, 1, 0,155, 81, 82, 82,130,119,223,125, 23,135, 14, 29, 10,234,216,177,227,114,150,101, 39, 8,119,198, 63, +104,176,252,212,114, 15, 27,137,252,196,166, 31,214, 17,230,146, 44,199, 58,110,168, 37, 93,186,116,121,107,231,206,157,142, 4, + 65,224,244,135,239,192,129, 54, 64, 61,255,107, 56,186,184,194, 52,115, 34,108, 89, 6, 45,207, 68,215,231, 38,125, 66, 51, 46, + 46, 14,249,249,249,112,117,117,133, 66,161,128, 76, 38,131, 68, 34,129, 84, 42,181,236,233, 77, 16,144,203,229, 56,121,242, 36, + 68, 34, 81,229,139,162,168,106, 63,187,187,187, 91,124,174, 56,142, 91, 30, 24, 24,216, 42, 62, 62,222,174,160,160, 0,157, 58, +117, 42, 38, 8,226,118, 21,227,209,234,246,237,219,118, 22,151, 52,116, 18, 74, 31,255, 0,190, 96, 31,224,240, 58, 88,187,145, + 48,160,209, 19,133, 76,133, 41,100,217,134, 7,157,114,114,114,232, 11, 23, 46, 32, 56, 56, 24,187,119,239,118, 46, 40, 40,152, +255,243,207, 63,207, 93,179,102,205, 28,141, 70,179,188, 1,146, 78, 0, 16, 23, 23, 7, 0,142, 13, 57, 38,169, 84,138,107,215, +174,129,231,249, 74, 83, 78,146, 36, 72,146,196, 31, 9, 46,208,154, 72,232,178,238, 98,218, 32, 31,248,250,250,254, 45,170, 37, +240, 98, 8,107,133,254,109, 90,181,232,232,227,229,141,115, 87,110, 64, 34, 21, 59, 76, 30, 55, 16,182, 54, 34,172,220,250, 39, +247, 56, 45,127,234,165,219, 22, 71, 74, 8,149, 74,213,170, 79,159, 62, 94, 27, 55,110,148, 0,192,221,187,119,161,209,104,224, +230,230, 6,185, 92, 14,177, 88, 12,138,162, 32,145, 72,132,147, 95, 15, 66, 66, 66,154, 55,111,222,220,154,101, 89,232,116, 58, +252,240,195, 15,246,114,185,220,126,224,192,129, 22, 71,178,106,104,182, 11, 52, 26,141,122,149, 74,165, 0,192,145, 36, 89,250, +116,100, 11, 0, 84, 42,149,117, 53,146, 12,128,220, 54,109,218,120, 0,144, 2,120, 80,117,155,201,100,170,105,155,165,105, 14, + 13,105,213,244,232,226, 37, 11,172, 51,179, 30,192,222, 46, 19,156, 57, 27,223,127,255, 61,172,172,236,176,112,225,108,209,193, +182,109,148, 31,127, 50,235,136, 72, 36, 10,191,121,243,230,213,151, 41,207, 57,134,158,212,186,109,231,202,207,219, 79,174,133, +209, 62, 4,233, 11, 23, 98,205,154, 53,104,210,164, 73,251,251,247,239, 11, 55,199, 63,101,176,154,123,217, 57,240, 28,127,226, +199,141,171,165,160,181,142,113, 17,151,171,110,174, 58,212,146, 0, 64,186,187,187, 79,222,181,107,151, 93, 69, 97, 23, 64,176, +112, 0,141, 87,154, 53,131,194,222, 1, 89, 12, 13,222, 76, 67, 42,145,212, 84, 32,214,169, 73,146, 36,196, 98,241, 19, 47,169, + 84,138,170,209,142, 90, 52,171,214,230, 64, 81, 20, 78,158, 60, 9,179,217,140,225,195,135, 87,107,182,106,160, 90,205,204,204, +204,227,106,181,250, 54,207,243,175,114, 28, 7,130, 32,110,103,100,100,116,173,216,174, 84, 42,251,182,110,221,122, 38,199,113, +203,235,210,228,121, 30, 96,242,192,231,239,130,109,167, 92, 20, 95,117, 1, 97,221, 11, 44,124,112, 55, 33, 19,167,111, 38, 35, + 55,191, 20,109, 2,220,208,167,147, 31, 56,142,179,248, 56,171,162, 82,169,154, 4, 5, 5, 5,154,205,102, 92,184,112, 1, 44, +203,162,101,203,150, 24, 63,126, 60,185,118,237,218,241, 0,150,215, 87, 19, 64,116,100,100,100,175,204,204, 76, 0,184, 99,193, +254,119,171, 51,194,191,252,242, 11, 12, 6,195,223,118,118,236,250, 21, 62,123,221, 7,227, 63,220,142,175,227,247, 98,195,134, + 13, 79, 52,151,214,227, 56,235,139,160,249,183,140,194,248, 17, 67,135,128,146, 88, 35,238, 97, 26,186,118, 12,129,155,155, 27, +110,199, 62,196,227,244,252, 44,130,192,219,125, 59, 75,151,235,245,166,185, 23,163,177,181, 46, 77,149, 74,213,104,243,230,205, +226,170,223, 73, 36,146,202, 40,120,213,104,248,211, 77,134, 66, 30, 85,175, 25, 18, 18,210,188,119,239,222, 23, 23, 44, 88, 96, +251,248,241, 99, 92,190,124, 25, 62, 62, 62,208,235,245,213,221, 55,181,105, 86,215,108,199,101,102,102,254,218,144,227, 60,127, +254, 60, 3,192,179,186, 29,106,219,102, 73,218, 91,180,104,161,144,136, 68,123,190, 92, 60,207, 58, 50,242, 40, 58,135,134,195, +202,214, 31, 12,157,134,188,252, 82, 20, 36,100, 96,217,178,213,152, 59,119, 22,190, 90,186,216,118,212,152,241,187, 59,118,236, +216,228,218,181,107,134,151, 37,223, 73,145,100, 99,244,205, 43,147, 0,160, 56,118, 63, 62, 26,221, 25, 37, 37, 9,248,224,131, +121, 72, 79, 79,199,131, 7, 15, 34, 95,240,113,190,180, 6,139,199,223, 59,141,214,138,135, 7,228,172,217,124,228,251,111,151, +219,219,218, 40, 92,111,158, 56,136,148,148,204, 90,255, 71,167,211,153, 14, 29, 58,132, 19, 83, 38,160, 9,193,192,113,254, 74, +184,169,213, 40,154, 48, 24,165,102, 26,141,255,186, 1,153,141, 13,164,214, 54, 22, 71, 28,116, 58,157,233,236,217,179,136,137, +137,129, 72, 36,130,141,141, 13,172,173,173, 33,147,201, 42,141, 85,197, 3,216, 82, 77,158,231, 33, 18,137,112,247,238, 93,164, +164,164,192,193,193, 1,151, 47, 95, 70,175, 94,189,158, 48, 87, 20, 69, 61,209,199,203, 82, 42,154, 22,171, 51, 96,168,163,105, +240, 9,196, 46,128,211, 91, 40,185,166, 6, 28,199,192,204,219,131,227, 57,220, 74,200,195,251, 99, 6, 0, 0, 38,207,253, 1, +189, 58,248, 86, 54, 65,214, 7,181, 90,253,126,203,150, 45, 87, 79,154, 52,137,180,182,182,134,209,104,132,209,104, 68, 92, 92, + 28,156,157,157,161, 80, 40, 26, 20, 38,224,121,254,145, 90,173,134, 92, 46, 7,207,243,143, 26,162, 65, 16, 4,246,236,217, 83, +237,182,183, 87,223,131,168,172,123, 22, 54,110,220, 8,134, 97,192,243,188, 16,194,250, 39,224,225,225,174,244, 4,201,155,145, +145,149,139,193,253,251, 64, 36,177, 65,114, 90, 46, 90, 55,243, 83,189, 57, 40, 84, 69, 17, 12,190, 88,177,107, 50,192,109,181, +224,126,103, 99, 99, 99,197,209,209,209,160, 40, 10,118,118,118, 80, 40, 20,144, 72, 36,144,201,100,149,198, 74,136, 96,213, 78, +159, 62,125,166,114, 28, 55,155,227,184,130,118,237,218,169, 23, 45, 90,100,159,150,150,134,187,119,239, 98,215,174, 93,185, 60, +207, 51,229,157,221, 23, 62,235,111, 89, 16,217, 2, 65, 16,245,238,231, 20, 20, 20, 36, 97,232,194,143,236,173,216,215, 68,164, +157, 15, 83, 92,250,168,216, 76, 30,138, 79,203, 88, 91, 30,253,170, 17,153, 88, 60,117,205,202,217,238, 46,206, 52,250,246,125, + 13,137,143, 10, 48,107,214,112, 20, 23, 27,176,243,151, 85, 0,164,160, 25, 10, 33,237,195,161, 82,121, 33,172,115,152,234,194, +165, 11,147, 1,172,122, 89,174,129,199, 7,222,155, 12, 96,177,183,183,247,249, 31,150, 45,243,239,217,179, 39, 0,224,244,233, +211,248,105,244,104, 44, 4,198,218, 2,154,143,128, 89, 47,244,137, 81, 79, 47,242,223,110,176, 42, 18, 84,159,132, 17,114,198, +118,239,162,217, 83,125,189, 27,249, 41,175,255,185, 7, 73, 73,233,200,202, 42,168,237,164,113, 4, 65,112,141, 26, 53,130,157, +217, 0,123,222, 4, 55,149, 26,182, 78,206, 40, 48,151, 71,174,172,173, 33,181,182,177,244,225, 88,169,217,172, 89, 51,100,101, +101, 65, 34,145,192,198,198, 6,182,182,182,149, 6,171,194, 92, 89,250,192, 37, 8, 2, 28,199, 65, 36, 18,225,246,237,219, 8, + 11, 11,131,151,151, 23,118,239,222,141,190,125,251,254, 45,138,213,144,166,167,138, 62, 87, 85, 35, 87, 36, 73,206,180,164,115, +251, 19, 72, 27,131,177,125, 3,164,162, 39,104,222, 14, 70, 94, 85,222, 36,200,227,207, 27, 89,136, 79,201,125,162,185,208,114, +243,236,161,150,203,229,219,103,205,154,213,163,109,219,182,160,105, 26, 0,160, 80, 40, 96, 52, 26, 33, 22,139, 65,211, 52,244, +122,125,250, 63,113,225, 86,156,243, 19, 39, 78,128, 32,136, 74,163, 91,209, 84,168,213,164, 98,252,180,157,144,138,128,219,183, +111, 35, 48, 48, 80, 40, 81,255, 33,172,228,114,103,169,220, 30, 28, 99,128, 72, 44,134,183,215, 43,224, 88, 35, 10,138,117,120, +251,141, 65,136,186,115, 15, 71,207, 94,103,204,102,110,173,165,154, 1, 1, 1,200,206,206, 6, 69, 81,176,181,181,133,181,181, + 53,154, 54,109,138,212,212,212, 39,162, 88, 2, 53, 67,146,228,156,163, 71,143,186, 83, 20,165,100, 24, 6,169,169,169,184,125, +251, 54,214,173, 91,151,165,213,106,187, 69, 69, 69,197, 55, 64,182,166,102,187,234, 58,171, 55, 36,178, 85,181,242,231,111, 39, + 51,157, 90,185, 98,138,103,203,214,237, 8, 57,101, 83,164,123,152, 29,118,227,250,213,208,185, 91,127,159,154, 82,168,235,153, +157,157, 93, 99,229,141, 34,201, 94, 77,155,183, 32, 57, 46, 13,148, 36, 16,223,174,254, 12,249, 5, 90,148,150,232, 1, 72, 97, + 50,139, 96, 52, 18,232,222,163, 39,118,239, 57,132,118,109,219, 81, 20, 73,246,121,153, 12, 22, 0, 80, 20,181,252,224,193,131, +254,114,185, 28, 75,151, 46,133,173,173, 45,174, 45, 94,140,159, 36, 18, 88, 1,216, 72,211, 51,241,226, 12, 86, 67,188,200,191, + 34,130, 85, 47, 60, 61, 61, 87,117, 12,237,240,106,163,102,237,228,215,143,237, 71,194,131, 20,228,230, 22,129, 7,244,181,157, + 60,130, 32,120,177, 88, 12,183, 47,190,132,119,203,150,208, 77, 28,134, 2, 51, 13,191, 63,175, 65,102, 99,131,251,189, 67,192, +155, 76,232, 18,155,101,169,113,225, 9,130,224, 1,192,197,197, 5, 18,137, 4,114,185, 28,114,185,188,178,239, 85,213,151,165, +102,136,227, 56, 20, 23, 23,227,209,163, 71,152, 56,113, 34, 20, 10, 5, 8,130, 64, 86, 86, 22,124,124,124, 64, 81, 20,210,211, +211,113,230,204, 25, 52,106,212, 8, 82,169,180, 94, 23, 67,149, 78,237,173,212,106,245,121,158,231, 91,221,188,121,211,174,109, +219,182,168, 87, 4,139,144,192, 8, 31,176,240, 4,199,255,167,175,149,153,121,178,242, 86, 97,178, 44,193,221,221, 61, 40, 48, + 48,240,234,186,117,107,109,221,220,220,193,113, 44,204,102, 51,138,138,138,161,211,233,224,237,237, 13,107,107,107,126,229,202, +149, 4,203,178,255,216, 80,222, 10, 67, 85, 17, 65,172,232,127, 69,146, 36,166,189,230,141,130, 2, 91, 80, 84,217,103, 75,211, + 46,240,252,177,182,182,117, 18, 73,172,193,145, 34,216,219, 59, 66, 36,181, 6,199,136,192,114,128,173,189, 11,174, 68,197,225, +234,157,146,247,179,243, 96,201,208,125, 94, 36, 18,241, 20, 69,193,205,205,173,210, 76,137,197,226,138,107, 23,197,197,197,160, + 40,170,242, 59,129,218, 43,146,201,201,201,208,106,181,184,118,237, 26,246,236,217,147,243,180,185,234,221,187,247, 36,133, 66, + 49,215, 96, 48, 44, 61,126,252,248,247,181,105, 54,160,217,174, 33,145,175,128,144,144, 16,177,152, 47, 56,250,215,254,213,158, +118,108, 20,129,228,247,128,248,226, 88,155, 27,110,157,123,182, 31, 72, 52,251,242, 99,159,193,243, 86,255,149,157,141, 32,212, + 48,226,153, 7, 90,200,173,228, 0, 79,224,242,165, 99,101,205,130,249, 37, 40,213, 26, 96,164, 41, 24, 77, 4, 12, 52,129,158, +189,194,177,121,235,111,208,100, 23,128, 7, 90,190,108,215, 65,147, 38, 77,218,120,120,120,224,227,143, 63,134, 97,215, 46,148, + 2, 24, 8,224, 96,121,165,218, 22,152, 46,220, 45, 47,208, 96,121,120,120, 76,109,213,170,213,187, 91,126,222,105,179, 98,222, + 23,197, 5,177,119, 40,147,158,182, 54,154,205,166,135,154,188,181,117,152,161,178, 90,167,131, 35, 20,118,246, 48, 62, 21,185, +226, 77, 38,112,180, 9, 18,203, 31,142, 60, 65, 16,224,121, 30, 86, 86, 86,144, 74,165,213, 70,174,234, 19,193, 2,128,194,194, + 66,236,217,179, 7,237,219,183,135, 66,161, 0, 69, 81,104,213,170, 21, 98, 99, 99,225,231,231, 7, 0, 56,120,240, 32, 94,127, +253,117, 36, 36, 36, 32, 40, 40,200, 38, 34, 34,162, 94, 6,139,101, 89,156, 56,113,194,142,231,249, 87,121,158, 71, 78, 78,195, + 70,195,178, 44, 11,173, 86,139, 19, 39, 78, 32, 35, 35, 3, 74,165, 18, 69, 69,182,176, 83,115,149,102,177,226,101,225,131,247, +139,119,222,121,199,214,198,198, 6, 44,203, 64, 44, 22, 87, 26, 87,177, 88,130,184,184, 56,140, 30, 61,186, 40, 57, 57,249,243, + 6,142,250, 33, 68, 34,194,189,168,168, 0, 37,197,133,160, 40,120, 1,160,208,128,169, 31, 72,146,172,124,175,120, 17, 4, 1, +137,152,130,210,221,181,178,227,123,121,244, 78,104, 34,124,129,190, 10,192, 72, 0,111, 21,148,152, 68,249, 37,122,128, 49,225, + 81,242, 35, 20,106,105,240,140, 25,143,211, 52,208, 26, 57,228,229,151,160,117,155,190,235,206,158, 61, 59,135,166,233,217, 0, +142, 88,114,205, 71, 68, 68,224,194,133, 11,184,116,233, 18, 42, 58, 74, 3,128,157,157, 29, 78,158, 60,137,238,221,187, 11,185, + 80, 11, 52, 77, 47,237,211,167,207,108,165, 82, 41, 95,181,106,149,189,183,183, 55, 8,130, 40,126, 58,114,213,182,109,219, 57, + 51,103,206, 84, 13, 31, 62,124, 26,128,239, 27,248,115,181,117, 86,175,181,140,170,110, 42,134,236,236,204, 73,155,182,143,119, +181, 22, 63,202, 64,242,183,229,230,139, 2,116,197,192,217,157,144,188,250,101,242,152, 30,147,221, 50, 74,214,190,147,158,153, +190,185,134, 7, 29, 23, 23,159,130, 13, 27,214, 96,238,220,201,216,181,115, 13, 56, 94,130, 18,173, 25,238,234, 96,152,204, 28, + 8, 82,140, 78,157,187,224,210,149,235, 0, 75, 99,218,196,171, 47,221, 92,107, 15, 30, 60,184,145,146,146, 18, 56,111,222, 60, +108,243,240,128,173,173, 45, 62, 93,176,224, 42,203,178,157,133,187,228,249, 24, 44,139, 67,114, 30, 30, 30, 67, 85, 42,213,138, +157, 59,119, 90,101,100,100, 64,221,164,185,221, 31,191,239, 49,186,217, 72,244,154,252,130,113,209, 25,218, 58,135,219,147, 36, + 9,102,241,167,200, 99, 76,240,253,227, 10,100, 54, 54,136,239,219, 22,188,201,132,206,145,201,144,217,216, 64, 36,183,170,119, + 98,170,139, 88, 85,125, 85, 20,198,117, 97, 50,153, 28,122,245,234,133,158, 61,123, 98,216,176, 97,149, 77,129,193,193,193,248, +237,183,223, 48,116,232, 80, 68, 71, 71, 67,173, 86,163,105,211,166,104,218,180, 41,206,158, 61, 91,191, 56,104,121, 4,171,111, +223,190,197, 4, 65,220,230,121,190,213,141, 27, 55,236,234,171, 81, 97,160, 78,156, 56,129, 1, 3, 6,192,207,207, 15, 81, 81, + 81, 56,249,229, 74,136,108, 92, 0,210, 13, 60,199, 87, 70,182, 44,233,131, 37,145, 72,194, 26, 53,106,132,204,204, 44,200,100, + 50, 56, 58, 58,192,202,202, 10, 50,153, 28,203,150, 45,227, 54,111,222,188,158, 32,136, 47, 53, 26, 77,126, 3,204,121, 99, 23, + 23,151, 95,198,141, 29,211,193,217,217, 5,238,238, 42,204,156, 49, 43,124,215,111,187, 99, 30, 63,126, 60, 42, 35, 35,227,142, +165, 90, 4, 65,192,100, 50,129,162, 40, 28,140,119,133,214, 68,160, 56, 45, 18, 31,189,230, 83,105,182, 42,154,122, 43,166,191, + 16,120, 49, 80, 20,181,237,211, 79, 63,237, 54, 98,196, 8, 66, 66,154, 77, 39,143,111, 23,177, 44, 67,124, 54,251, 71,246,220, +197,243, 36,203, 50,196,176,209,211,185,163,103,238,144,239, 79, 91,201, 6,119, 28,128,187,119,239, 42, 7, 14, 28,184,196,108, + 54, 91,100,176, 42,242,184,134,223, 23,154, 8,235,224,244,233,211,235, 1,172,239,221,187,119,166, 66,161, 64,105,105,233,223, +250, 41, 6, 5, 5, 89, 39, 37, 37, 73,164, 82, 41,218,180,105,227,202,113, 92, 60, 65, 16,171, 78,156, 56,177,165, 62,191, 85, + 67,100,171,193,211, 52,216, 58,177,131, 90,182,107,106, 27,103, 61,207,214, 74,108,184,245, 74,188,220,142, 0, 80,164, 87, 38, + 94, 78, 27, 85, 74,102, 83,173, 91,246,104, 6, 91,177,226, 53, 0,213, 26, 44, 2,184,173, 45, 41,233,163,211, 51, 56,127, 46, + 26,195,135,123,195, 64,147,208, 27, 72,208,102, 30, 36, 37, 1, 65, 73, 48,110,194,187, 48, 49, 28, 10, 53, 26, 16, 64,244,203, +118, 29,176, 44, 59,115,240,224,193,237,150, 46, 93, 26,244,233,167,159, 2, 0,212,106,117,167, 57,115,230,220,251, 7,230,193, +122,105,154, 7,159,142, 96,213,154,176,174, 93,187,110, 49,155,205, 67,242,243,243, 29,223,125,247, 93, 58, 55, 55, 23, 7, 14, + 28,192, 79, 63,253,164,211,154,169,155,133,121,204,216, 36,141, 54,205,146, 66,145, 36, 73, 72,204,102,240,204,127, 34, 87,156, +209, 88, 25,201, 18, 91, 41,234,151, 35,229, 17,172,234, 76, 85, 69, 36,171, 62, 15, 91,153, 76, 86,120,233,210, 37,183,180,180, +180, 39, 58,180,251,250,250, 2, 0,110,220,184,129,107,215,174, 97,212,168, 81, 16,137, 68,144, 72, 36,184,125,251,118, 73,125, +142,185,194,240, 84,140, 34, 84, 42,149,125, 59,116,232, 80,211,232,193, 58,181, 30, 63,126, 12, 63, 63, 63, 24,141, 70, 56, 56, + 56, 32, 79,243, 8,143, 31, 37, 65,103,140, 71, 35,165, 28,217,217,217,144,201,100,150,222,112,108, 69,193,101, 52, 26,161,209, +100, 66,173, 86, 99,199,142,157,216,178,101,203, 40,141, 70,179,183, 33,215,154, 74,165,154,222,191,127,255, 37, 67,134, 12, 17, +233,180,165,224,185, 50,195, 35,145, 74,240,221,119,223, 53, 61,115,230,204,173,117,235,214,125, 37,151,203,151, 36, 38, 38,154, +234,202,115, 0,216,182,109, 27, 0, 64,209,113, 1,102,142,120, 5,111, 77,222,142, 85,171,246, 63,145, 86,138,162,176,104,209, + 34,161, 68,125,129,116,236,216, 49,120,246,236,217,226,138, 62,113,106,239,165, 12, 77,211, 28, 0, 4,182,122,245, 63,145,202, +190, 64, 66, 66, 2, 86,173, 90, 5,173, 86, 11,145, 72, 36, 49,155,205, 22,253, 70,175, 94,189,208,183,111,223,202,102, 66, 23, + 23, 23,208, 52, 13,134, 97, 4,115, 85,207, 72,214,128, 1, 3,102,115, 28,199,115, 28, 55,175,226,251,144,144, 16, 43, 55, 55, +183,203,107,214,172,113,102, 24, 6,211,167, 79,119,200,205,205,117,152, 50,101,202, 44, 0, 91,106, 40, 39,234, 51,187,186, 69, +211, 52, 84,215,167,139, 32,136, 70,214,214,246,200, 65, 38, 10, 93,204,193,133,206, 76,254, 9,205,251,183,189, 82, 91, 7, 90, +177,102, 63,178,216, 4,123, 43, 59,128,227,155,212,248,156,227,184, 19,177, 49,247,122,122,122,248, 81,135,254, 56,135, 1,131, +134,194, 96, 34, 96,160, 73, 16,148, 24, 4, 37, 65,187, 14,157,225,235, 23, 0,142, 3,238, 69, 71,210,102,142,251,235,101,202, +251,170,243, 96, 77,255,238, 52,230, 44,254, 22, 99,134,245,197,248,241,227,255,201,121,176, 94,218, 62, 88, 53,153,171,183, 29, + 29, 29, 71, 79,152, 48,193,234,198,141, 27, 88,188,120,177,232,228,201,147,116, 68, 68, 4,195,178,236,244,140,140,140, 77,245, +249, 81,146, 36,209,104,231,159, 80, 43,149,120, 16,222,238,137,200,213,249, 86,158,224,140, 70,244, 78, 42,170,119, 98, 42,154, +178, 42,140, 85,133,185,170,101, 42,133,218,106,224,213,206,123,245,193, 7, 31, 96,203,150, 45,232,220,185, 51,252,253,253, 33, + 18,137, 42,155,165, 26, 18,193,170,160,222,163, 7,159,170,205,123,123,123,227,206,157, 59,176,183,183,199, 47,191,252, 2, 47, + 79, 15,140,237,227, 11,147,201, 4,179,217, 12,173, 86, 91, 17,193,170,243, 64, 57,142,139, 57,112,224,128,223,136, 17, 35,120, +145, 72, 68, 24,141, 70, 0,192,218,181,107,179,235, 59,227,122,121,109,104,152, 76, 38,219, 58,106,212, 40,219,166, 77,155, 34, + 43, 43, 11,215,175, 95,197,172, 89, 51,175,139,197, 34, 67,120,191,254,221,130,130,154, 99,242,228,201,100,112,112,240,220, 89, +179,102, 77,247,244,244, 28,159,150,150,182,167, 46,147,245,219,111,191, 1, 0,222,249,238, 62, 76,166,178,130,121,227,198,141, + 80, 42,149, 79,236,251,240,225, 67, 97, 20,225, 11,132, 97, 24,158, 36, 73, 34, 53, 53,149, 86, 40, 20,132,147,147,147, 72, 38, +147,193,104, 52, 86, 26,173,132,132, 4, 28, 57,114, 4,105,105,105,112,114,114, 34,237,237,237,193, 48, 76,129,165,215,124,213, +209,130, 21,134, 74, 48, 87,245,231,252,249,243,235, 1,172,175,248,220,179,103,207,137, 4, 65,204, 48,155,205,118, 91,182,108, +113,176,179,179, 35,142, 28, 57, 98,250,225,135, 31, 74, 41,138, 42, 0,176,178,182, 50,229,121,205,174, 94, 75,228, 11, 44,131, + 7, 5,165, 73, 62, 98, 27, 21, 23,109, 32,174,124,156, 58, 51,176,128,108,226, 78, 52,111,206, 12,207,142,185, 60,214,156,216, + 57, 39, 43,155, 96,121,190,198, 73,156, 10,138,138,190,223,250,243,238,143, 14,236,219,238, 45,183, 83, 96,204, 91, 83,113,226, +212, 69, 72,101, 10, 92,191,121, 11, 38,154, 69,242,227,116,140,122,115, 12, 84,110,206,160,116, 25, 26,163,201,180,233,101,202, +251, 39,230,193,106,219, 25,151,247,175,196,111,241,222, 72, 95,188,248,159,158, 7,235,165,139, 96, 85, 75,251,246,237,109, 11, + 11, 11,191,251,228,147, 79,172,180, 90, 45,114,115,115,145,151,151,135,235,215,175,159, 52,155,205, 31,213, 54, 74, 3,101,171, +109,223,125,186, 80,164, 40, 10, 78,174,110,144,217,216,130, 55,153, 42, 35, 87, 18,133, 53, 56,163, 17, 28,109, 2,106,110,206, +169, 86,147, 32,136,191, 69,173,234, 97,174,158,208,172,136,136, 85, 55,169,168,151,151, 23,190,250,234,171,191, 77,211, 96,201, +113, 2,101,163, 5,121,158,111, 85, 17,121,226,121,190,149, 82,169,236,107,225,200,193,106, 53, 57,142, 67,215,174, 93,113,242, +228, 73,220,185,115, 7, 36, 73,162, 95,191,126, 32, 8, 2,246,246,246, 16,137, 68,149,102,174, 98, 64, 64,109,154, 44,203,190, +245,211, 79, 63,125,246,215, 95,127,125,241,225,135, 31, 90,189,250,234,171, 21,253,188,114, 80,182,198, 99,189,142,147,227,184, +133,183,111,223,182,101, 24, 6, 75,151, 46,197,205,155, 55,181, 15, 31, 62,252, 68,163,209,108, 5,192, 23, 20,150,140, 73, 76, +124,180, 97,254,252,249,182, 61,122,244,192,141, 27, 55,228, 94, 94, 94,243, 1,236,169, 43,237,215,175, 95, 7, 69, 81, 96,242, + 83, 48,121,230,110,216, 40,196,136,139,139, 67, 94, 94, 94,229,181, 86, 75, 83, 82,181,154,207,136,160, 9, 32, 34, 34,226,247, +245,235,215,127, 48,110,220, 56, 9,207,243,108, 74, 74,138, 25, 0,161, 84, 42,169,136,136, 8,238,240,225,195,208,235,245,240, +244,244, 36, 61, 60, 60,136,147, 39, 79,114,177,177,177,215,121,158,159,109,233,113, 86, 53, 87, 98,177, 24,122,189,222, 82,115, + 37,228, 81,237, 44,216,191,127,191,202, 96, 48, 64, 42,149, 98,239,222,189,244,246,237,219,239, 21, 23, 23,119,137,138,138,210, + 55, 68,179, 1,211, 52,212,170, 89, 82, 64, 30, 57,121,226, 94, 43,115,247, 31,137, 15, 51,243,194, 42, 43,174, 4,225,178,215, +189,133,139,188,125,235,116,155, 11,223,144,165,188,238,112, 77,154,137,137,137, 38,219,224,224,215, 63,253,108,222,217,197, 11, + 23,216, 46,255,122, 5,238, 14, 24,142,194, 34, 29,140, 38, 22, 52,195, 97,225,194, 47,225,230,228, 0, 71, 9, 93, 90,168, 39, + 94,143,141,141,165, 95,166,124,127,198,121,176,254, 63,142,243,165,162, 78,247,161,211,233, 22, 7, 4, 4, 72, 99, 99, 99,241, +240,225, 67,196,199,199,131,101,217,132,244,244,244,129, 13,253, 81,146, 36, 97,111,111, 15,169, 84,138, 78,119,210, 33,149, 72, + 32,181, 46, 91,158,170,119, 82, 17,192,243, 32,165,178,122,107, 62, 61,231,213,179,140, 34, 98, 89,182,114,134,246,170,235, 25, + 62, 61, 90,173,190,145, 43,146, 36,103, 94,189,122,213, 46, 37, 37, 5, 60,207, 99,255,254,253,118,195,134, 13,155,217,144,232, + 21,207,243,200,203,203, 3,199,113, 16,139,197,232,209,163, 7, 66, 66, 66, 80, 90, 90, 10,150,101, 43,155, 47, 37, 18, 73,189, + 70, 17,102,103,103,235, 0, 44, 50,155,205,155,230,206,157,187,168, 69,139, 22,239,126,252,241,199, 36, 26, 56, 40,130, 32, 8, +134, 97, 24,236,221,187, 23,251,246,237, 43,225,121, 62, 64,163,209,100, 86,137,222,237,188,118,237,218,201,161, 67,135, 38, 36, + 38, 38,218, 21, 21, 21, 1,117,204, 97, 83,126,109,194,223,223, 31, 44,203, 98,197,100, 79,148,148,180, 4,203,178, 96, 24, 6, + 10,133,226,137, 37,136,132, 89,220, 95,112,205,152,227,102,205,153, 51,231,216, 87, 95,125, 53,115,218,180,105, 29,198,141, 27, + 39,150, 72, 36, 92,122,122, 58,179,107,215, 46,162, 73,147, 38,164, 88, 44, 38, 78,156, 56,193,221,184,113,227, 26,195, 48, 43, + 0,212,107, 41,146,170,230, 74,232,115,245, 92,217, 51, 98,196,136,113,195,135, 15,183, 10, 14, 14,150,253,244,211, 79,133, 90, +173,182, 38,115,245,183,224,101, 77,211, 52, 60,167, 9, 72, 1, 0, 26,141,102,211,151, 11, 46, 76, 30,227, 63,186,201,187,206, +175,224,148, 54, 27, 5, 98,138,180,115, 32, 17,236, 67, 65, 87,152,232,118,234,198,254,120,141, 70,179,173, 54,157, 91,183,110, + 69,145, 36,217,245,173,183,223, 57, 48, 97,220, 4,245, 23, 31,127, 36, 62,114,242, 44, 88,179, 17, 23, 79,159,134,139, 13,201, +210,218,172,140, 34, 51, 57, 56, 42, 42,234,165,235,127, 85, 62, 15,214,100, 0,163, 22, 44, 88,176,107,242,228,201,224, 56, 14, +231,206,157,195,134, 25, 51,176,144,101,199,218, 2,186,143,202,246, 17,120, 94, 6,171, 93,187,118,175,104,181,218, 95, 76, 38, + 83, 48,199,113,210,243,231,207,195, 96, 48, 32, 54, 54, 86,207,113,220,239,207,240,155, 41,253,250,245, 35,159, 94, 47,174, 6, +147, 99,105,231,186,148, 94,189,122, 61, 55, 77,142,227,210,170,174, 97, 86,147,110,213,207, 12,195,164, 89,114,160, 28,199, 45, +239,212,169,211,223,190,107, 96, 33,150,212,179,103, 79,250,105,211, 85,221,223, 85,210,159,102,169,126,110,110,110, 22,128,247, + 57,142, 91, 51,126,252,248, 5, 0, 18, 26,104,176,150, 4, 5, 5,205, 45,251,147, 88,156,145,145,145, 89,141,169,203, 81,171, +213,239,122,121,121, 85, 46, 0, 93, 87,218,123,247,238, 77,215,181,200,115,213,200, 21,199,113,105,194, 45,255, 66,185,168,211, +233, 46, 46, 91,182,172,203,134, 13, 27,102,125,240,193, 7,237, 71,142, 28, 41,234,218,181, 43,142, 30, 61,202,158, 59,119,238, +186, 94,175, 95, 94, 95, 99, 69, 16, 68,233,211,247, 80, 45,149, 16,131,144, 13,245,227,244,233,211,159,118,238,220,121,193,158, + 61,123,146,125,124,124,100, 4, 65, 48, 22,154,171,231, 62, 77, 67,109, 70,142, 42, 53, 12,218, 57,250,131, 35,193, 31,190,227, +211,183,115, 27,185,103, 99,149, 50, 46, 37, 15,169,183, 79,234, 19,207,111,120,196, 27,242, 6,193,130,136,123,100,100,100,180, +159,159, 95,192,166,159,182,188, 35,161,168,222, 28,207,135,124, 62,101, 44, 72,130,136,162, 89,246,100,113, 73,201,214,186,250, +132,254,219,145, 73, 36, 99,167, 76,153,130, 29, 59,118,224,192,154, 53,232,155,150,134,223, 36, 18, 88, 73, 36,216, 72,211,147, + 32, 24,172, 6, 81,163, 19, 9, 8, 8,248, 45, 63, 63,127,120,113,113, 49,195, 48, 12, 75, 16, 4, 67, 16,132,158,227,184, 47, + 57,142,251, 1,101,157,208,234, 66, 8,197, 11,154,130,166,160, 89, 65, 23, 59, 59,187,143, 57,142, 67,105,105,233, 26, 11,141, +149,112, 62,255, 33,205,238,221,187,175, 38, 73,178, 3,203,178, 63,159, 59,119,110,243,179,104,214,179,243,123,125,142, 83,164, + 84, 42, 39,240,142, 54, 3, 97, 22,249,243, 52, 21, 71,209,249, 71,202, 35, 87,156,144,239,150,105,198,197,197,241, 78, 78, 78, +200,207,207,199,190,166, 77,159,216,102, 11,108,172, 33,130,245, 66,155, 8,121,158,111, 7,192,181,162,254, 15, 32, 14, 64, 27, + 0, 86, 0,140, 0, 74, 1,184, 84,249,151,188,242,109, 21,219, 47, 16, 4, 97,198, 75, 68, 11, 65, 83,208, 20, 52, 5, 77, 65, + 83,208, 20, 52, 5,205,103, 52, 88, 3, 80, 22,216,225,103,206,156, 57,139,231,249,240,153, 51,103,206,170,242,185,114,123,217, +238,252,128,167,182,183,195, 75,134,112,241, 9,154,130,166,160, 41,104, 10,154,130,166,160,249, 92, 12, 86,109,239, 53,253, 93, +229,253,133, 66,212,114,146,238,254, 63,159,232,187,130,166,160, 41,104, 10,154,130,166,160, 41,104,254,207,105,214,165,125,183, + 58,131, 69, 16,196, 17,158,231, 7, 86,125,175,178,125, 32, 0, 84,108,171,248,187,234,118,130, 32,254,196, 75,132,224,238, 5, + 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,124, 38,254,141, 17,172, 26, 71, 17,242,123,247, 82,233, 65,176,147, 90, 41, 36, 0, + 96,210,235,104,143, 88, 20, 19, 35, 70,176, 16, 16, 16, 16, 16, 16, 16, 16,120,193, 16, 4,113,100,230,204,153,179,255, 13,199, + 42,170,201, 92,229,182, 85,184,136,140, 5, 1, 44, 67, 7, 2,128,136,228,239,231,182,117,140,231,247,238,205,125,222, 38, 43, + 60, 60,124, 54,207,243,238, 98,177,248, 79,165, 82,121,110,243,230,205,102,225, 50,122,241,240, 60, 95,231, 98,141,109,218,180, +113, 52, 26,141, 43, 57,142,235, 81,190,206,223, 57,137, 68,242,217,173, 91,183,242, 9,130,168,113, 72,180,183,183,247, 46, 63, + 63,191, 0,190, 12, 0,120, 98, 94,174,138,239, 42,182, 63,126,252,248, 65, 90, 90,218,155,150, 30,187,151,151,151,175, 92, 46, +127,155, 32,136,160,114,157, 88,131,193,240,115,106,106,234,163,255,181,124, 84,169, 84, 86, 60,207, 15, 17,139,197,227,156,156, +156,218,231,228,228, 44,204,200,200,248,246, 25,158, 17,211, 29, 28, 28, 70, 57, 56, 56, 52,202,207,207, 79, 44, 46, 46,222, 3, + 96, 21,128, 58,239,211, 47,167,168, 59,190,218,191,235,188, 11, 71,207, 47,158,191, 33,227,218,211,219, 23, 78, 87, 57,247,232, + 25, 58,239,175, 63,175,124,185,108, 67, 70,125,215,182, 36,203, 95, 64,217,136,177,138, 14,174,255,173,249, 18, 12, 96, 6,203, +178, 98,146, 36,191,205,204,204,188,244,223,126, 45, 53,109,218,244, 11,169, 84, 58,137, 36,201,196,172,172,172, 9, 26,141,230, +121, 77,117, 66,250,248,248,216,166,164,164,148,192,178,201,139, 5, 0,116,236,216, 49,139,166,105,183,218,246,145, 72, 36,217, +215,174, 93,115,127, 9,147,159, 91,209,244, 7, 32, 27, 0, 85,254,217, 84,254,158, 85,229,187,172, 26,182,255,243, 6, 43, 61, + 8,118, 34, 99, 65, 64, 94,214,189,145, 57,154, 91,111, 0,128,171, 42,120,143,179,123,179,221,233, 65, 82, 90,217,116,168,141, + 88, 33,250,158,162,196,193, 6,147,209, 69, 44, 18,231,210,140,249, 22,105,226, 39,103,198, 29,120,108,201, 15, 15, 28, 56, 48, + 0,128,125, 72, 72, 72,196,197,139, 23,219,127,251,237,183,170,125,251,246,181,138,140,140, 28, 61,104,208,160, 63,120,158, 63, +126,228,200, 17,125,189, 82,211,181,171,200,173,208,105, 44, 37, 18, 13, 2,208,138,231, 1, 16,212,109,206, 76,255,153,237,152, +247, 51,202,230,104,105,216,133, 29,226, 20, 64,112,244,231, 98,138,239, 98,102,137,139, 60, 41, 89,121, 45, 42, 63,222,114, 3, +160,234, 37, 21, 17, 63, 2,128,137,225,223, 77, 77,213,156,122,150,253,106,120,128,247, 6,176,147, 32, 8, 49,128,141, 44,203, + 30,204,202,202,138,134, 5,147,118, 90, 66,179,102,205, 92, 9,130,184,189,186,195,126,171, 0, 0, 32, 0, 73, 68, 65, 84,122, +245,106,231, 14, 29, 58, 80, 28,199,225,204,153, 51,111,206,157, 59,183,111,243,230,205, 91,148, 95,244,213,226,231,231, 23,112, +250,244,233,214,199,142, 29, 67,231,206,157,193,113, 28, 56,142,131,131,131, 3, 14, 31, 62,140, 14, 29, 58, 84,126,231,238,238, +142,174, 93,187, 34, 45,205,178,103,121,163, 70,141,134, 52,111,209,122,218, 39,159,207,112,119,115,118,177,101, 88,134, 78, 79, +215,168,215,124,187,162,163, 88, 44,254, 62, 41, 41,233, 96, 67, 42, 74,158,158,158, 35,197, 98,241, 64, 0, 65,229,223,197,154, +205,230, 35,105,105,105,187, 45, 45,200, 91,181,106,117,129, 36,201, 87,234,243,195, 44,203, 62,190,115,231, 78, 88, 67,242, 72, +173, 86,143, 80,171,213, 63,117,236,216, 81, 17, 28, 28, 12,137, 68,130,175,191,254,122,186, 5, 6, 75, 4, 96,186, 66,161, 24, +105,109,109,237, 87, 90, 90,250, 80,175,215,239,147, 74,165,189,190,251,238, 59,175,208,208, 80,219,172,172, 44,130,162, 40,247, + 63,254,248, 99,236,186,117,235,250, 50, 12,211,179,174,107,171, 32,145,155, 39, 19, 7,118, 41,120,120,118, 30,128,126, 79,111, +103, 12,242,113,148,216,107, 32,197, 71,165,150,155, 54,139, 11,104, 79, 79,207,239,220,221,221,199,235,245,122, 3, 65, 16,124, +249,171,162,150, 11, 0, 48,153, 76, 5,241,241,241, 77,107, 19,122,165,163,227, 77,138,164,106,156,187,137,229,216,180,228,107, + 5,109,159, 67, 5,230,227,232,232,232,225, 34,145,136,104,221,186,181, 53,128,190,150,154, 11,149, 74, 21, 64, 16,196, 28,158, +231, 35, 52, 26,205,247, 0, 88,181, 90,221,157,231,249, 47,202,211,251,117, 70, 70,198,217,242,107,224,123,127,127,255,215, 18, + 18, 18, 54,102,100,100, 44,105,232,241,250,251,251, 79,158, 58,117,234,130, 73,147, 38, 89,229,229,229,249,244,233,211,231, 87, +141, 70,211,229, 89,206, 65, 72, 72,136, 56, 51, 51,115,186,171,171,235,135,237,218,181, 83,221,187,119, 47, 51, 37, 37,101,173, + 82,169, 92, 21, 21, 21, 85,167, 97,111,217,178,165, 90, 36, 18,141, 7, 48,182,188, 0,253, 13,192,207,183,110,221, 74,252, 95, + 48, 88, 52, 77,187,157, 90, 50, 15, 4, 69, 65,222,165, 23, 56,142, 67,238,202, 5, 96,242,115,225,178,100, 45, 24,134, 65,175, + 94,189,220, 94,210,200,213,141,127,219, 49, 87,107,176,164, 86, 10, 9,203,208,129, 57,154, 91,111,180, 15, 95,107, 15, 0, 55, +142, 77,123,195,217,163,249, 93,169, 72, 17, 47,179,147,239,127,125, 80,175,224,225, 3,187, 18,158, 42, 55,164,105,178,221,183, +254,118, 60,252,200,241,179,251, 81, 54, 47, 69,157, 20, 23, 23, 47,245,241,241,113, 61,125,250,116,178, 84, 42,181,146,203,229, +196,136, 17, 35,172, 70,143, 30,221,236,204,153, 51,126,199,142, 29, 27,254,218,107,175, 29,147, 72, 36,127,254,254,251,239,117, +174, 79,230,214, 98, 72, 51,178, 68,246,251,224, 33,253, 94, 25,208,219, 77,234,163,116, 5,199,201, 17,151, 68,123,159,188, 24, + 21,126,244,216,137,207,217,160, 33, 35,114, 98, 15,222,177,244,228, 52,111,110,231, 96, 69,242,159, 90, 73,249, 81,221, 58,251, +251, 14,234,215,153,104,212,184, 17,226, 99,227,253,206,158,143, 24, 47,163,238, 61,210,155,136,223,244, 28,177, 58, 38,166,184, +176, 54, 45,169,136,216,118, 59, 38, 65,205,178, 44,190, 94,241,213, 73,142, 39, 43,103, 87,175,120, 85,204, 66,254,205, 55,223, +192,104, 52,162, 93,112,243,109,248,207,188, 49,150,240,235,189,123,247,156,117, 58, 29,142, 29, 59, 54, 75,163,209,204, 58,126, +252,184, 38, 53, 53,245,115,141, 70,243,219,115,168,221,175,223,184,113,163,115,251,246,237, 41,154, 46,155,223, 52, 52, 52,148, +154, 61,123,182,211,178,101,203,214, 0, 24, 85, 75,225,194, 31, 59,118, 12,191,252,242, 75,238,138, 21, 43,210, 0,192,197,197, +197,227,205, 55,223,116,221,185,115,103,206,234,213,171,211,120,158,135,179,179,179,231,200,145, 35, 93,121,222,178, 67,245,244, +244,108,212,162, 85,240,180,159,183,109,235, 80,148,159,111,248,113,245,198, 40,163, 72,166,243, 9, 10,144,204, 91,176,196,254, +203,249,179,222,167,105,250,110, 90, 90, 90,146,165,137, 84, 42,149,222, 50,153,108,255,236,217,179, 91,132,133,133,137,221,220, +220,144,149,149,133,184,184,184, 22,151, 47, 95, 30,114,240,224,193,233, 70,163,241,245,204,204,204, 58, 43, 19, 60,207, 55, 57, +244,245, 87,110, 50,103, 23,112,102, 51, 28, 91, 6, 87,110,203, 56,115, 28,156,217, 12,206,108,134,215,128, 33,149,145,188,238, +221,187, 55,104, 74,114, 15, 15, 15,117,147, 38, 77,118,204,156, 57, 83, 98, 52, 26,113,235,214, 45, 92,189,122,149,203,206,206, +174,107, 34, 91, 17, 65, 16, 39, 22, 44, 88,224, 25, 22, 22,102,155,155,155, 11,150,101, 93, 14, 30, 60, 56, 57, 36, 36,196,206, +211,211, 83,186,125,251,246,138, 21, 2,156,252,252,252,156, 70,143, 30,109,250,229,151, 95,166, 3, 88, 81, 83,228,170,240, 33, + 55, 79, 67,249,133, 55,109,251, 54, 50, 69,199,195, 63,233,131,191, 28,252,200,202, 72, 86,184,159,159,109, 81,186,213, 12, 27, +187, 22, 78, 69,233, 39,103,132,251,249,109, 57,150,152,104,201,162,233,164,135,135,199,119,253,251,247,127,115,227,198,141,138, +216,216, 88, 69, 80, 80, 16, 56,142, 3,195, 48, 96, 89,182, 98,221, 77, 84,157, 48,184, 38, 40,146,242,188,188, 63,198,205,202, +202,170,242, 62,172,120,215,106,181,232, 59,174,227,115,121,216,114, 28, 39,173,184,174, 25,134,145, 3, 16, 3,176,116, 2,203, + 69, 87,174, 92, 25,241,215, 95,127,141, 89,178,100, 73, 19,141, 70, 51,149,227,184,121,177,177,177, 93, 1, 32, 40, 40, 72, 10, +224,172, 74,165,154,240,193, 7, 31, 76,154, 50,101, 10,198,141, 27, 55, 47, 35, 35, 99,105, 67,239,123,169, 84, 58,255,131, 15, + 62,176, 50,155,205,176,178,178, 2, 77,211,141,159, 37,253, 65, 65, 65,146,252,252,252,125,139, 22, 45, 26, 56,120,240,224,138, + 37,188,148, 23, 46, 92, 88,246,217,103,159,117, 14, 9, 9, 25, 90,147,201, 10, 9, 9, 9, 6,240,165,175,175,111,223,113,227, +198, 81,161,161,161, 40, 45, 45,197,137, 19, 39,230,236,223,191,127, 78, 72, 72,200, 21, 0,243,162,162,162,206,189,236, 38,139, +178,177, 69,220,235,221,225, 23,155, 7, 0,200,252,190,108,105, 72,187,249,223, 8, 33,190,127,131,193,170, 11,157, 78, 23, 50, +107,218, 88,144,100, 89, 45,209,191,145, 55,150,205,158, 72, 28, 58,114, 60,164,142,240,230,106,150,101,155, 56, 57, 57,125,158, +151,151, 39, 95,179,102,141, 60, 61, 61, 61,112,223,190,125,124,116,116, 52, 36, 18, 9,236,237,237,209,163, 71, 15, 89,120,120, +120,227, 43, 87,174,120,239,223,191,127,112,255,254,253,127, 62,122,244,232, 31, 53,233, 58,183, 24,212,196,197,213,245,252, 55, + 75,222,115,106,209,200, 15, 38,179, 25,105,217,233,224, 33,133,210,205, 26, 99,134,180,150,132,182,149,248,175,218,112,250, 28, + 65,190,246,106,118,204,225,152,186,210, 24, 22,162,184,209,189,211, 43,109, 94,235,219,153,244, 15,106, 6,137, 76,241,159, 90, + 84, 72, 8, 90,134,132, 16, 19, 39,150, 52,138,142,138,158,123,236,244,245,217,246, 18, 38,242, 82,148,174,125,205, 37, 45,100, + 21,107,167,189, 62,236, 13, 4, 4, 4, 60,241, 48,175,248, 59, 57, 57, 25, 4, 65, 32, 55, 55, 23, 28, 15,105, 3,242, 6,215, +174, 93, 67,235,214,173,209,167, 79, 31,140, 26, 53, 74,117,240,224,193, 95,215,175, 95,223, 53, 61, 61,125,226,179, 92, 44, 44, +203,134,134,132,132, 80, 52, 77,131,162, 40,228,229,229, 33, 41, 41, 9,126,126,126, 20,203,178,221,234, 48, 26,232,220,185, 51, + 86,172, 88,145,118,225,194,133, 16, 0,232,210,165, 75, 84,135, 14, 29, 92, 87,175, 94,157,118,233,210,165, 54, 0,208,185,115, +231,200,182,109,219,186, 90,122, 76, 10,133,226,157,143, 63,249,204,181, 40,191, 64,111, 46, 41,161,109, 56,150,177,147,139,137, +226,156,188,194, 71,169,118,186,119, 38, 77, 19,205,159,249,233, 59, 0, 44,106,179, 87, 42,149,222,129,129,129, 55,182,108,217, +226,230,236,236,140,194,194, 66,228,229,229,225,198,141, 27,224, 56, 14,225,225,225,178,144, 86,173, 66, 86,173, 94,125, 21, 64, + 39, 75, 76,150,204,217, 5,251,186,150,221, 26, 35, 18,243, 42, 35, 44,199, 70, 13,170,220,103,116, 74,217,226,230,114,185,188, +193,203,250,240, 60,223, 41, 52, 52, 84, 2, 0,211,167, 79, 47,214,106,181,203, 8,130,248, 85,163,209,164,215,241,175,211,231, +206,157,235,209,168, 81, 35,159, 95,127,253, 21,165,165,165, 0,224,214,168, 81, 35, 52,105,210,132, 61,127,254, 60, 2, 2, 2, + 96,107,107,139,243,231,207,227,218,181,107, 8, 14, 14,182,149, 72, 36,111,208, 52, 93,173,193,122,181,127,215,121, 50,113, 96, +151,166,109,223,134,141,157, 10, 91,118,237, 70,220,205,159,187, 24,205,247,231,205,194,249,183, 40, 94,246,118,246, 99,235,153, +190,109,187, 57,251, 55, 31,140, 87,218,220,114, 49,178, 23,146,230,246,110,180, 92, 36, 55,108, 95,184, 74,147, 87,147,185, 82, + 42,149, 43,251,245,235, 55, 98,227,198,141, 14, 0,112,231,206, 29,100,102,102,194,213,213, 21,114,185, 28, 98,177, 24, 34,145, +168, 94, 75,101, 89, 89, 89, 65,163,209,160,162,226,192,178, 44, 74, 74, 74, 42, 23, 13, 95,184, 16,228,194,133,150, 69,155,148, + 74,101, 88, 72, 72,200, 78, 79, 79, 79,175,170,223, 27,141, 70, 76,156, 56, 17, 90,173, 22,193,193,193,161,238,238,238, 70,130, + 32,192,113, 28,178,178,178, 74,239,220,185,211, 59, 35, 35,227,122, 13,181,119,125,102,102, 38, 38, 77,154,132,199,143, 31, 79, +217,177, 99, 71, 10, 65, 16,114,169, 84, 90,177, 93,170, 82,169, 2, 2, 2, 2,190,123,239,189,247,144,156,156,140,248,248,248, + 27,207, 82,169,146,201,100, 90,150,101,221, 24,134,129, 94,175, 71,120,120,184,156,227,184, 44,177, 88,124,191,176,176,112, 76, + 90, 90,154,198,210,114, 70,165, 82, 41,181, 90,237,198,105,211,166,245,239,218,181, 43,238,223,191,143, 99,199,142,225,181,215, + 94, 67,183,110,221, 48,103,206,156, 1,243,230,205,155, 14,160,166,202,192,239,251,246,237,243,245,244,244,172, 92, 18,201,206, +206, 14,239,188,243, 14,198,142, 29,139,163, 71,143,118,254,234,171,175,246,117,237,218,213,237,252, 51,180, 84,252, 27,144,181, +237, 12,191,216, 60, 36, 6, 57,151,181, 14,148, 27,173,138,207,240, 8, 17,156,205,127,179,193, 50,233,117,180,136,228,239,187, +170,130,247,220, 56, 54,173,178,137, 16, 12,127,223, 68,235,232,178,176, 57,143, 98, 29, 3, 43, 25,137,100, 77, 9,238, 38,230, + 86, 39,117,247,169,194,255,147,181,107,215,226,235,175,191,238,167,215,235, 75,147,146,146, 52,165,165,165,218, 49, 99,198, 16, + 98,177, 24,151, 47, 95,198,163, 71,143,208,178,101, 75, 56, 56, 56, 32, 44, 44, 76,210,167, 79, 31,175, 9, 19, 38,188, 5,224, +143,234, 52, 49,124, 56, 37, 73, 33, 14,175, 92, 50,210,137,160,226, 17,255,184, 16,141, 61,219,195,217,222, 11,233, 57,165,136, +188,119, 20,241, 15,255, 68, 99, 79,111, 76,124,179,177,195,183, 63,228, 28, 65,200,196,198,136,122,162,159,215,223,134,132,202, + 37,108,187,133,107,163,193,106, 31,130, 55, 63, 6, 79,103,254,189,112,119,240, 66, 96,107,119, 40,164,174,228,157,216,111,219, +213,150,118, 35,195,127,177,116,241,162,173,173,130,219,160,168,168, 8,235,214,173,171, 52, 86, 60,207, 87,214,184, 59,118,236, + 8,179,217,140,173, 91,183,194,204,149,133,255,107, 59,206,167, 24,221,161, 67,135,221, 60,207, 75,173,172,172, 50, 91,183,110, +237, 51,117,234, 84,209,200,145, 35,161,215,235,223,219,178,101,203,241,204,204,204, 3,245,212, 44,107, 70,121,229,149,176,110, +221,186, 89, 81, 20, 5,154,166, 81, 84, 84,132,180,180, 52, 36, 37, 37,193,197,197, 5,248, 79, 95,152, 26, 53,159, 94, 11,145, +231,121,190, 34,253, 85,141, 88,197,121,177,228, 56, 9,130, 8,116,116,112,180,254,113,213,198,155,174, 50,138,112,241, 82, 19, + 18, 59, 7, 17,105, 99, 43,227, 41, 74,239,227,165,182, 37, 8, 34,176,134,100, 61,173, 73,200,100,178,253,219,182,109,115, 19, +139,197, 96, 89, 22,174,174,174, 72, 74, 74, 66, 97, 97, 33, 74, 74, 74,144,116, 63, 22,190,158,158,248,104,226,187,170, 69,223, +172,222, 15,160,237, 83,133,216,223, 23,227, 54,155,159, 62,230,154, 66,224,176,240, 56,107,138,144, 60,202,200,200,128, 66,161, + 64, 80, 80,144, 77, 68, 68,196,197,140,140,140,244,186, 52,229,114,249, 27,161,161,161,182,187,118,237, 66,155, 54,109, 96,111, +111,143,179,103,207,226,206,157, 59,160,105,154, 44, 41, 41,129,141,141, 13,150, 47, 95, 14,111,111,111, 20, 21, 21, 33, 37, 37, +197, 89, 44, 22,187, 84, 24,146,167, 53, 47, 28, 61,191,184, 32,241,236,188, 76,234,120,248,150, 93,187,241,222,232,145, 80, 50, +137, 23, 29, 27,147,139,251, 13,232, 60,159, 18,123, 13,180,182,109,225,216,164,197, 96, 72,164, 54,152,250,197,151,136,191,123, +216, 81, 87,114,103, 10,107, 78,245, 90,184,106,239, 71,213,164,157, 0, 64,170,213,234,119, 55,109,218,100, 91,233,184, 72, 18, + 98,177,248, 9, 99, 85,177, 24,123, 13,231,244,110, 53,149, 7,208, 52, 13,154,166,193,113, 28,114,114,114, 80, 82, 82, 2, 71, + 71,199,178, 29, 22, 0, 88, 0, 2, 68,141,134,229,110,149,227, 25,179,123,247,110, 47,133, 66,241,183,157, 82, 83, 83, 81, 84, + 84, 4,107,107,107, 56, 56, 56,192,108, 54,131, 97, 24, 24,141, 70,155,110,221,186, 77, 6,112,189, 58, 77,138,162, 62,157, 52, +105, 82,232,145, 35, 71,252,150, 44, 89, 2,154,166, 87,230,228,228,224,189,247,222, 3,199,113, 8, 11, 11,235,200,243,124,220, +180,105,211,202,194, 93,139, 22,153, 75, 75, 75, 63,104,232,181,228,230,230,214,172, 85,171, 86,142,167, 78,157, 66, 88, 88, 24, +140, 70, 35, 38, 79,158,108,247,238,187,239,218, 93,185,114,197,117,205,154, 53,219,211,210,210,122,213,166, 25, 18, 18, 34,206, +202,202,154,209,173, 91,183,233,189,122,245,178,207,205,205,133, 76, 38,195,158, 61,123,240,227,143, 63,254, 69,211,244,220,125, +251,246, 45,221,188,121,115,248,224,193,131,177,121,243,230,105, 26,141,230,107,148, 53,155, 62,173,169,246,242,242,194,237,219, +183,225,232,232, 8, 23, 23, 23, 20, 21, 21,225,218,181,107,184,113,227, 6, 2, 3, 3, 65, 16,132, 99,121,153,198, 60,203,125, + 84, 79, 94,184,102,229, 26,171, 85,174, 93, 0, 96,107,119,211, 22,205,138,175, 86,171, 7, 59, 56, 56, 76,225,121, 94, 84, 80, + 80,176, 73,161, 80,252, 94,203, 50, 65,194, 66,207, 22, 26,172,138,124,233, 6,224,188, 71, 44,138,115,219, 58,198, 59,187, 55, +219,237,236,209,188,236, 36, 50,252,125, 74,230, 24,239,126, 83, 87, 12, 0,180,153,199,149,251, 5,184,157,144,133,219, 15, 50, + 97, 35,175,187,214,237,236,236,140,206,157, 59,227,208,161, 67, 72, 77, 77,181, 89,190,124,121, 19,154,166,233, 65,131, 6,101, +188,242,202, 43, 5, 97, 97, 97, 16,139,197,184,126,253, 58,138,139,139, 65, 81, 20,164, 82, 41, 56,142,171, 49,210,230,246,128, +125,123,220,196, 16, 63, 23, 7, 18,127, 92, 62,142,142,129, 67,161,144,137,145, 83,160, 7, 73, 16,120,248,232, 20, 88,214, 26, +209,247, 31,163, 83, 11,107,116,233, 96,239, 89,122, 58,127, 98, 46,176,193,146, 19, 68,167,159,131,244,149,215, 1,121,115,240, +166,135,224, 76,233,224,197,110,208,234,228,200, 77, 78,193,253,107,191,131,103,116,117,234,164,165,105,126,218,186,109,123,216, +185,177,111,191,205,113, 28, 86,172, 88,113, 46, 33, 33,161,123,213,125,252,252,252,206,206,153, 51,167, 91, 65, 65, 1,142, 31, + 63,254,115, 93, 11,149, 62,141, 70,163, 57, 5,192,169,138,161,245,142,138,138,218,181, 99,199,142, 78,111,189,245, 22,246,238, +221,251,121, 53, 6,171, 86,166, 77,155, 38, 62,116,232, 80, 95, 43, 43,171,117,243,230,205,179, 49,153, 76,208,104, 52,200,204, +204,172,140,182,197,196,196,176, 34,145,232, 74, 29,133,127,181,139, 77, 63,109,176,170,124,103,105,205,187,212,100, 54, 27,173, +189,212,230, 65,131,251,182,188,115,227, 86,188,149,147, 19,217,178, 93,112,179,251, 9,201,145, 68, 89, 19,140, 69,205, 48,158, +158,158, 35, 23, 44, 88,208,210,206,206, 14, 28,199,193,222,222, 30, 57, 57, 57,149,134,210, 84, 82, 12,186,184, 8,183, 83,146, + 16,214,173, 7,250,116,234, 24,244,167,217, 60, 50, 45, 45,237,183,218,116,157, 90,133, 84, 70,174,246,250, 57, 87,126, 63, 42, +185,176,210, 0, 28,109,239, 15,153,141, 53, 90,124, 60,171,193, 55,115,102,102,102,212,169, 83,167,142,134,135,135,247,159, 56, +113, 34,153,153,153,121,140, 97,152,208,236,236,236,123,181,253,159,141,141, 77,227,220,220, 92,148,148,148,192,222,222, 30,107, +214,172,129,155,155, 27,116, 58, 29, 34, 34, 34,120, 79, 79, 79,226,236,217,179,240,240,240, 64, 94, 94, 30,104,154,134, 78,167, +203, 52,153, 76, 53,246,145, 44,111, 6,236,247, 73,111,252, 21,119,243,231, 46, 30, 72,138, 24,254,121,151, 7,209, 55,226, 83, +207,156,190,188,152, 49,200, 83, 11,211, 78,206,104,212, 46,218,101,202,231,139,176,126,229, 2,196, 93, 63,159,239,238, 93,178, +129, 37,140, 63,215, 17,165, 53,196,198,198,218, 70, 71, 71,131, 36, 73,216,217,217,193,218,218,186,114, 97,243, 10,115, 37, 18, + 89, 30,160,175,168,224, 84,152,171,156,156, 28, 60, 76,137,199,190, 51,219, 97,102,204, 46,219, 58,216,101,250, 73, 36,183,139, +154,231,206,206,139, 65, 84, 29, 5,224,166, 81,163, 70,141,244,240,240,176,173,250,125,235,214,173,241,230,155,111,226,216,177, + 99,184,121,243,230, 19, 21,172,156,156, 28, 13,203,178, 53,166, 59, 53, 53,181,144,227,184,240,119,223,125, 55,242,192,129, 3, +118,223,124,243, 77,101,151,130,138,102,209,138,247, 93,187,118, 33, 50, 50,114, 94, 86, 86,214,253,134, 92, 71,238,238,238,129, + 3, 7, 14,188,176, 97,195, 6,135,172,172, 44,228,230,230, 66,171,213, 66, 44, 22,131, 97, 24,248,251,251, 19, 44,203,250,214, +213, 28, 72,211,244,225, 51,103,206,244,109,210,164, 9, 0,192,108, 54,227,242,229,203,152, 56,113, 98,158, 66,161,120, 35, 37, + 37, 69,171, 82,169,230, 28, 57,114, 36,188,117,235,214,104,217,178,165, 50, 59, 59,219, 54, 37,165, 60,156, 91,205,179,130,101, +217,202,252,217,186,117,107,229, 54,131,161,108,201, 73,147,201, 68,180,109,219,214,247,230,205,155, 47,237,224,150,148, 29, 91, +144, 60,251, 67,248, 92,140, 3, 0, 68, 54, 43,235,114,229,115, 62,182,108,135,177, 99,235,165,167, 82,169,156,121,158,127,175, + 89,179,102, 31,135,135,135,187,170, 84, 42, 56, 59, 59,227,206,157, 59,161,199,143, 31, 95,103, 52, 26,127, 96, 89,246, 7, 75, +162,245,207,129, 39,188,200,203, 20,193, 34,202, 19, 71, 16, 35, 70,176,252,222,189,185,233, 65, 82, 90, 42, 82,196, 3,128,137, +214,209,238, 55,117,197,196,136, 17,172,107,243,193,224,193,131,229,202,163, 13, 60, 15,214,194,113, 32,134,251,195,192, 21, 30, +134,155,227, 96,108,222,124, 0,217,217,217,146, 53,107,214,188,114,224,192, 1,207, 49, 99,198, 60,246,247,247, 47,234,209,163, + 7,182,111,223, 14,165, 82, 9,147,201, 4,142,227,106,116,111,182, 78,236,240, 14, 45,253,169,248,148, 59,104,219,100, 24,124, + 85, 97,120,152, 94,132,130, 18, 35,242,138,244, 8, 8,248, 28, 89,249, 58, 20,107, 13,184, 19,247, 43, 60, 85,141, 72, 74,252, + 48, 28, 22, 26, 44,227,195,157, 48, 38,237,134, 68,213, 29,210, 70, 35, 33,118,233,132,212,184,115,184,117,106, 53,210, 30, 92, + 2,207,177,112,247, 10,180,180, 9,103,225,218,181,107,199, 44, 91,182, 76,244,225,135, 31,118, 91,190,124,121,183,140,140,140, +115, 0,160, 86,171,187,189,253,246,219,221,108,109,109,177,116,233, 82, 51,207,243, 11,159, 53,115, 51, 51, 51, 31,171,213,234, + 41,167, 78,157,138,158, 48, 97, 2, 2, 3, 3, 67,226,227,227, 73, 88,208,177,214,223,223,127,162, 84, 42, 29,207, 48, 76,147, +209,163, 71,147,239,189,247,158,141,155,155, 27,146,147,147, 97, 52, 26, 65,146, 36, 36, 18, 9, 98, 98, 98,184,195,135, 15, 23, + 73, 36,146,105, 22, 68, 88,224,226,226,226, 17, 22, 22, 22, 9, 0, 78, 78, 78,158, 28,199,193,217,217,217,179, 83,167, 78,145, + 0,224,232,232,232, 81,157, 17,171,209, 0,211,116,196,227,148,148,128,208, 46,161,170, 11, 55,239, 69,189, 62,100, 96,119, 82, + 68,146,143, 82, 52, 17,174,206, 78,214,151,175, 92, 42,166,105, 58,194, 18, 45,177, 88, 60, 48, 44, 44, 76, 84, 80, 80, 0,181, + 90,141,156,156, 28,164,167,167,195,108, 54,195, 80, 84, 0,186,184, 24,116, 81, 33,120, 93, 41, 18, 35,174, 35,200,203, 67,118, +162,172, 19,252,111,117,213, 56,171,139, 80, 17, 4, 81,249,157,204,214, 6, 86,182,182,149,205, 31,245,120, 56, 14,182,179,179, +155, 81, 82, 82,114, 52, 35, 35, 99,137,201,100,154,186,108,217,178,118, 95,126,249,165,203,140, 25, 51,236,102,204,152,177, 87, + 46,151, 7,167,164,164, 24,107,116,168,165,165, 15,205,102,179, 51, 0,247,211,167, 79,195,213,213, 21,197,197,197, 48,155,205, +208,235,245, 38, 71, 71, 71,121, 94, 94, 30, 12, 6, 3, 76, 38, 19,236,236,236, 16, 25, 25,153,207, 48,204, 31,117, 29,159, 67, + 99,114,177,209,124,127,158, 83, 51,235,116,150,119,238, 90,162,231, 10, 22,174,210, 44, 6,176, 42,220,207,111,139,137, 59,159, + 20,127,247,144, 99, 82,196,217,252,140, 7, 58,191, 31,143, 38,149,212,241,240,229, 8,130,224,155, 54,109,138,156,156, 28, 80, + 20, 5,107,107,107,216,216,216, 32, 48, 48, 16,169,169,169, 13, 54, 88, 85,205,213,169,171, 71,144, 91,170,193,150,149,187,224, +161,244, 34, 1,184,166,103,166,246,158, 48,125, 68,135,199,118,143,150, 61,186, 92,184,188,150,138,206, 45,141, 70, 99,247, 68, +248, 69,173,238,238,232,232,120,134,166,105, 36, 39, 39,227,196,137, 19,221,210,211,211,235, 85,128,164,167,167, 39,242, 60, 31, + 62,100,200,144,237, 45, 91,182,108,204,243, 60, 2, 3, 3, 49,120,240, 96,236,219,183, 15,247,238,221, 67,113,113, 49,119,241, +226,197,109, 26,141,166, 65, 29,114,148, 74,101,211,254,253,251, 95, 90,191,126,189, 99,110,110, 46, 12, 6, 3, 74, 75, 75,241, +251,239,191, 35, 52, 52, 20,114,185, 28,107,215,174, 45,102, 24,102,125,109,230,138,231,249, 67, 7, 14, 28,232,235,231,231,135, +251,247,239,227,226,197,139,112,117,117,133,149,149, 21, 6, 13, 26,228,188,123,247,238,169, 65, 65, 65,171,181, 90,237,226,254, +253,251,131,101, 89,220,188,121, 83, 83, 62,170,176,198, 60,170,177, 92, 49, 24,192,243, 60,204,102,243, 26,146, 36,223, 8, 9, + 9,233, 19, 21, 21,117, 3, 47, 9, 30, 30, 30,205,197, 98,241, 71, 0,144,147,147,131, 66, 14,176,201, 47, 27,116, 91, 84,254, +184,204,207,207,175,124,214,248,251,251,255,169,215,235,103,167,167,167,215, 24,101, 82,171,213,173, 20, 10,197,199,221,187,119, + 31, 51, 96,192, 0,138,166,105, 28, 57,114, 4,235,215,175, 71,120,120, 56,252,253,253,241,249,231,159,219, 27,141,198,153,199, +142, 29,155,113,225,194,133, 99, 37, 37, 37,179,106,211,124, 78, 84,122,145,151,201, 96,241,229,174,177, 44,133,101, 83, 49, 20, +148,215,104, 92,156,156,156,214,179, 44,219, 61, 32, 32, 0, 12,159,133,228,135, 15, 80, 82,192,193,108, 50,130,227,120,240,156, +101,231,130, 43, 60, 12,187, 87,121, 20, 95, 32, 64,211, 52,220,220,220,176,124,249,114, 20, 21, 21,137, 38, 76,152,224,187,104, +209,162, 91, 6,131, 1, 90,173, 22,122,189, 30,122,189,190, 86,131, 37,145, 27, 91,250,184, 55, 65,137,190, 61, 20, 82, 41,242, +138,141, 40, 40, 49, 34,183,208,128,253,135, 70,195,168,215,129, 49,153,192,210, 12,108,220,135,194,223,169, 59,128, 4,139, 38, + 72,171, 12,162,112, 12,232,244,147,160,211, 79, 66,209,122, 14, 14,173,125,235,137,253, 24,198,178, 38,255,204,204,204,199, 7, + 15, 30,252,126,252,248,241,211,134, 12, 25,130, 31,126,248,225,235,140,140,140,182,229, 81,132,175,135, 14, 29,138,152,152, 24, + 92,184,112, 97,227,243,170, 45,240, 60,239,236,228,228, 4,146, 36,161,211,233,140,117,153,171,223,127,255,157, 88,180,104,209, +177, 65,131, 6,117,154, 58,117,170, 66,169, 84,130,231,121,152, 76, 38,164,165,165,129, 36, 73, 20, 22, 22, 98,235,214,173,218, +155, 55,111,242, 82,169,244,138, 88, 44,126, 63, 38, 38, 38,163,174,190, 67,142,142,142, 24, 61,122,180,107,251,246,237, 93,171, +142, 24,124,227,141, 55, 92,219,182,109, 91,249,157,167,167,167,197,233, 51, 24, 12, 91,151, 46,158,215,125,199,206, 61,129, 77, + 3,253, 29,143,158, 56, 27,229,236,108,103,229,235,235, 39, 43, 42, 44, 52,174, 95,179, 82,164,213,106,127,178, 80, 46,200,197, +197, 5,153,153,153, 72, 72, 72,128,209,104, 44,107,194,209,149,194, 84, 88, 8,186,168, 0, 48,232, 33,101, 89, 24,115,179,224, +235,231, 11,252,103,132, 97,237, 79,140, 42,102,234,233, 38, 65,130, 32, 96,101,111, 7,169,181, 53, 40,177,200,226, 62, 88, 74, +165,178, 77,112,112,240,158,205,155, 55, 75, 62,253,244,211, 14,215,175, 95, 95,159,146,146,146, 34, 18,137,122,174, 92,185,242, +198,146, 37, 75,100, 99,198,140,105,186,105,211,166,113, 0, 54,213,114, 14,247, 28, 61,122,244, 77,111,111,111,247,187,119,239, +194, 96, 48,128,227, 56,244,235,215, 15, 0,228, 21,251,197,197,197,233,245,122,125, 86, 76, 76, 76, 73, 74, 74, 10, 13, 11, 70, +253,205,223,144,113,237,147,156, 11,175,171, 84,234,171, 82,153, 79, 35, 82, 23, 57,244,147,225, 30,223,124,251,123,186,225, 88, + 98, 98,201,220,222,141,150,235, 74,238, 78,113,244,212,110,248,254, 72,146, 37, 29,220, 43, 71, 11,186,184,184, 84, 54, 9, 74, + 36,146,138,232, 11,138,138,138,234,106, 34,172,182,240, 46, 42, 42, 66, 81, 81, 17, 30, 60,186,143,156, 18, 13, 78,254,118, 21, + 44,203, 86, 70, 71,212,238,158, 56,245,219, 13,219,110,195,219,205, 46,110, 89,120, 54,255, 14, 34, 44,189, 78, 73,146,252,120, +216,176, 97,160,105, 26,131, 7, 15,198,174, 93,187, 62,110, 72, 13, 61, 35, 35,227, 90, 70, 70, 70,147,132,132, 4, 59,179,217, +252,218,160, 65,131,126,238,223,191, 63,174, 94,189,138,211,167, 79,119, 51,153, 76,241, 44,203,234, 85, 42,213, 50,158,231,221, + 8,130, 88,166,209,104,106, 29,237,220,164, 73,147, 49,182,182,182, 75,173,172,172, 74, 26, 55,110,172,174,136, 92,105,181, 90, + 48, 12,131,180,180, 52,252,245,215, 95,154,163, 71,143,106,120,158, 87,148,150,150, 46, 72, 77, 77,253,189,166,102,193,210,210, +210,131,135, 15, 31, 14,247,243,243,195,249,243,231,177, 98,197, 10, 52,110,220, 24,219,182,109, 67,231,206,157,225,235,235, 11, + 39, 39,167,143,138,139,139, 59,173, 88,177,162,127, 72, 72, 8, 14, 28, 56,128,236,236,236,117,181, 61,159,106,123,206,234,245, +122,240, 60,143, 30, 61,122, 76,252,244,211, 79, 49,104,208,160, 19,109,218,180,105, 31, 25, 25,249,224,223, 94, 72,171, 84,170, +229, 61,122,244,152,209,170, 85, 43,236,220,185, 19,198,182, 97,176,222,246, 7,238, 14, 12, 5, 15, 64,189,237, 80, 89,123,221, +107,101, 3, 58,124,123, 14,199,140, 25, 51,250, 15, 29, 58,212, 27, 64,243, 26, 52,191, 25, 51,102,204,244,183,222,122, 11, 81, + 81, 81,216,180,105, 19,110,221,186, 85, 89,230,153,205,102,196,198,198, 34, 54, 54, 22, 42,149, 10, 3, 7, 14, 36,222,127,255, +253,126,253,250,245,115, 69, 89,183,136,255,239, 40, 86,183,151,169,137,176, 70,215,232,238,238,238,226,232,232, 24,179,126,253, +122,231, 14, 29, 58, 80, 12,195,224,244,153, 51,248,236,195, 9, 8, 31, 56, 5, 6,163, 20,140,129, 0, 43,177,177,236, 23,237, + 6,162,248, 2, 1,206,166, 63, 76, 38, 19, 38,238,146,192,129,200,194,154,183,221, 1,128,208,235,245, 48, 26,141,208,235,245, +208,106,181,208,106,181, 96, 89,182,198,167,100, 73,161, 53, 77,155, 57,164,103,167, 32, 77,115, 23,246, 54,222,224, 73, 47,100, +229,235, 64,192, 13,102, 67, 28,184,242, 27,211,168, 79,131,214,248,108,166,152, 45, 73,170, 38, 50, 99,121,159, 74,150,101,151, +174, 92,185,114,226,250,245,235,101, 83,166, 76,105,179,100,201,146,215, 0,224,189,247,222,107, 35,151,203,177, 97,195, 6, 35, +203,178, 75,159, 83,254, 82, 36, 73,126,252,234,171,175,162,184,184, 24, 49, 49, 49, 71,234,250,135, 57,115,230, 76, 30, 54,108, + 88,167, 69,139, 22, 41, 12, 6, 3,116,186,178,230,207,162,162, 34,104,181, 90,100,101,101, 97,250,244,233, 5, 52, 77, 79,122, +244,232,209,190,122, 24, 61, 28, 62,124, 24, 59,118,236,120, 98,196,224, 27,111,188,225,186,107,215,174,236,181,107,215,166,243, + 60,207, 59, 57, 57,121, 14, 31, 62,220,205,210, 22, 66,141, 70,163, 7, 48,109,201,210, 37,191,126,179,114,165, 91,126, 94, 65, +188, 68,106,101, 80, 88,201,156,102,124,182,152,207,202,202,154,158,157,157,173,179,244, 56, 11, 10, 10,144,148,148, 4, 43, 43, + 43, 72, 36, 18,176,186, 82,112, 90, 45,140, 5,121, 32, 77, 70,200, 88, 22, 78, 10, 25,188,220,221,225,237,102, 89, 95,124,205, +217, 19,248,107,228,192, 39,154, 5, 9,130,192,177,206, 77, 33,181,177,134,220,198, 6, 97, 7, 47,150, 85, 24, 36, 18, 96,205, +102, 75,154,113, 92, 84, 42,213,225,117,235,214, 73,114,115,115, 17, 19, 19, 19,157,146,146, 82,228,232,232,104,107, 54,155,185, + 7, 15, 30,156,138,139,139, 27,232,235,235, 11,158,231,235, 26,253,181,106,255,254,253,189, 67, 67, 67, 25, 95, 95, 95,235,156, +156, 28,239,130,130, 2, 66,163,121,178, 15,115, 68, 68,132,252,241,227,199, 58,142,227, 14,148,155,171, 58, 47,252, 79,134,123, +200,175, 68, 97, 90, 87, 23,223, 86,246,174,173,144,107,190,213,234, 90,116,230,180, 79,134,123,172,253,246,247,116, 3, 75, 24, +127,102,205,169, 94, 34,185, 97,123,125,154, 16,120,158, 71, 68, 68, 4, 46, 94,188,136,139, 23, 47, 34, 57, 57,185,114, 7,123, +123,123,156, 60,121, 18,221,187,119,183,248, 70,209,233,116, 80,169, 84,112,112,112,192,129,115,191,224,199,111,118, 85,118,116, +175, 32, 55, 55, 23, 10,133, 2, 75, 63, 91,109, 51,225,139,225,139,243,145,219,199, 18,109, 79, 79,207, 70,161,161,161, 3,220, +221,221, 81, 80, 80, 0, 87, 87, 87,180,107,215,110, 16, 77,211,190,217,217,217, 13,106,202, 50,153, 76,147,187,119,239,190,100, +250,244,233, 48,155,205, 24, 57,114, 36,146,146,146,246, 36, 38, 38,174,241,241,241,153, 54,101,202, 20,119, 23, 23, 23, 76,158, + 60,217, 26,192,235, 53,233, 52,109,218,244,147, 47,190,248,226,171,177, 99,199,202,204,102, 51, 78,159, 62, 93, 25,165,102, 24, + 6, 41, 41, 41, 88,176, 96,129,166,184,184,184,107,122,122,250, 67, 11, 42,145,211, 15, 30, 60,216, 47, 32, 32, 0,199,142, 29, +195,164, 73,147,254,180,177,177,105, 62, 96,192, 0,111,107,107,107, 68, 71, 71,131,166,105,168, 84, 42,247,153, 51,103, 14,236, +219,183, 47, 78,157, 58,133,197,139, 23, 31, 81, 42,149,171,158,190,230,158, 54,193, 34,145, 8,230,167,250, 52, 82, 20,133, 91, +183,110,161, 71,143, 30,152, 49, 99, 6, 0,224,212,169, 83,118,125,250,244,185,219,181,107, 87,187,243,231,207, 27,255,205,133, +180,181,181,245,248,109,219,182, 33, 33, 33, 1,151, 46, 93, 66, 94, 94, 30, 76, 38, 19,138,184,178,155, 65, 86, 30,185,226, 61, +124,208,121,250,108,140, 26,248, 58, 52, 26, 13, 72,146,116,169,165,194, 55,102,246,236,217,248,235,175,191,176,124,249,114, 20, + 23, 23, 87,187,159,149,149, 21,218,181,107,135,224,224, 96, 36, 37, 37, 1,128,203, 11, 72,242, 75, 25,193,170, 41,234,176,230, +251,239,191,119, 14, 13, 13,165,180, 90, 45, 56,142, 67,167,142, 29, 49,238,237,113, 56,126,224,119,168, 26,117, 7,101,176, 2, + 99,171,176,204, 96,120,253,140,252,252,124,200,100, 50,200,203, 59,148,222, 78,171, 12,239,194, 96, 48, 84,154,171,138,247,218, + 96, 76,210,200,216, 68,214,171,184,244, 22,174, 71,238,128,217,100,130,111,147, 89, 48, 50, 46,176,118,123, 7,122,250, 48,232, +194,178,145,187, 82,187,110,200,202,202, 5, 64, 88, 20,226,172,174,144,231,244,127,239,236,206,177,150, 27,172,236,236,236,156, +139, 23, 47,174,186,117,235,214,156,126,253,250,225,199, 31,127, 92,206,243, 60,250,247,239,143,136,136, 8, 68, 71, 71,175,202, +206,206,206,121, 30,121,171, 84, 42,183,110,216,176,161,191,187,187, 59,246,239,223, 15,158,231,235, 52, 68, 82,169,244,189,105, +211,166, 41, 42,162, 24, 82,169, 20,122,189, 30,153,153,153,160,105, 26, 7, 14, 28, 48,154, 76,166, 79,147,147,147,247,213,231, + 96,120,158,231,219,183,111,143,213,171, 87,167, 93,190,124,185, 13, 0,116,234,212, 41,178,109,219,182,174,107,215,174, 77,191, +126,253,122, 27, 0,104,223,190,253,205,224,224,224,122,205,227,162,209,104,210,110,221,188,246, 80,111, 48,136, 29,157,157,116, +182,214, 82,190,184,164,132,188,125, 59, 74,147,157,157,157, 92, 15,169,216,152,152,152, 22,233,233,233, 72, 73, 73, 1,171, 43, + 5,105, 52,130, 48,234,209,179, 83, 71, 88,129,135, 12, 28, 36,156, 25, 98, 74,132,146,146, 82, 0,136,173, 51,106, 91,165, 64, +168, 48, 87, 4, 65, 64,110, 99, 3,169,173, 13,100, 54, 54, 79, 68,180, 44, 49,151, 86, 86, 86,191,110,218,180, 73,165, 82,169, +240,237,183,223, 66,165, 82, 5, 42,149, 74,157,173,173,173,149,139,139, 11, 2, 2, 2,208,182,109, 91,156, 61,123, 22, 4, 65, +212, 85, 48, 50, 60,207,247,185,116,233,210,244, 43, 87,174,140, 80,171,213,196,216,177, 99, 17, 30, 30, 14,153, 76, 6,189, 94, +143,130,130, 2,252,249,231,159, 4,199,113, 33,229, 6,207, 71, 38,147,237, 34, 8, 34, 45, 57, 57,249,141,167, 5, 55, 46,105, +169, 46,209,115, 19, 72,173,213,235, 93,251,250,182,236,209,183, 23, 26, 53,233,137, 30,125, 83, 1, 96,185,139,248,209,200, 21, +179, 29, 14, 56,218, 17,219,174, 28, 60, 53, 63,172, 95,247,185, 11,233,115,139, 23,174, 43,168, 51,138, 69, 16, 68,101, 97, 75, +146,100,181, 81, 42,138,162, 64,146,164,101,207, 36,142, 77, 11,127,187, 83,229,103, 51,243,127,236, 93,119, 88, 20, 87,223, 61, + 51,179, 59, 91,216, 5,145,190,128, 5,177, 2, 42,210,172, 17,177,196,196, 24,141, 73,140, 37,150, 24, 75,212, 88, 98,137, 26, + 83,176, 98, 52,118,141, 45,177, 36, 81,163,168, 49, 26, 35,106, 16,187,210, 81, 68, 81, 1, 41,187, 75, 83,154,176,125,103,190, + 63, 96, 9, 32,101, 33,250,165,188,115,158,103,159,221, 41,123,230,150, 41,103,206,253,221,123,117,118, 46, 78, 45, 72,147,115, + 5, 0,197,197,197,200,200,200,128, 94,175,135,173,173, 45,244,122, 93,215, 70,188, 84,205, 30, 53,106, 20,161, 86,171, 49,127, +254,124,172, 91,183, 14,195,135, 15, 39,110,221,186, 53, 27,192,220,198, 94,216,206,206,206,235,102,204,152, 49,255,131, 15, 62, + 64, 97, 97, 33,194,195,195, 17, 20, 20,132,111,191,253,214, 62, 60, 60,124,117,175, 94,189, 64, 81, 20,206,159, 63, 15,157, 78, +119,191,129,235,125,214,248,241,227,133,153,153,153,160,105, 26,126,126,126,200,202,202, 66,105,105, 41,114,115,115,177,124,249, +242,236,162,162,162,126, 10,133,226,145, 25, 73, 35,221,221,221,231,180,107,215, 14,127,252,241, 7,102,204,152,241,187, 68, 34, +121,187,160,160, 96,154, 70,163,217, 50,116,232, 80,244,234,213, 11,247,239,223,199,155,111,190, 9,127,127,127,132,135,135, 99, +209,162, 69,191, 89, 88, 88,188,211,192, 56, 88, 15, 34, 34, 34, 58,251,249,249,161,180,180, 20, 37, 37, 37,224,243,249,176,182, +182, 70, 82, 82, 18,218,183,111,143, 69,139, 22, 97,195,134, 13,152, 55,111, 30,243,234,171,175, 26,116, 58, 29,109,234,101,249, +111, 70,105,105, 41,171, 84, 42, 97,101,101,133,163, 71,143,226,246,133, 48,156,153,245, 33, 68,159,175, 3,203,178,200, 90,185, + 24,253, 63,253, 28, 61,226, 83,160, 84, 42,113,224,192, 1,144, 36,137, 26, 29, 80,158,123,182, 21, 21, 21,161, 91,183,110,162, + 66,194,102, 0, 0, 32, 0, 73, 68, 65, 84,136,138,138,194,129, 3, 7,176,113,227,198, 74,183,150,207,231,163, 95,191,126, 24, + 52,104, 16, 30, 60,120,128, 93,187,118,193,202,202, 10, 28,154, 38,176,136, 26,223, 85,220, 25,166,191,191,191, 63,245,236,217, + 51,168,213,106,228,228,228, 32, 45, 45, 13, 98,177, 24,242,220, 12, 4,180,125,134,108, 66,139,196,184,100, 35, 65,241,227, 26, +178,225,117, 58, 29,180, 90, 45, 18, 18, 18,202,187,190,183, 15,169, 12,126,174,136,249,128, 90,173, 70, 68, 68, 4, 43, 22,139, + 33,145, 72,136,250,218,222, 25,131,230,247,139,215,226,135,140, 27,209, 95,112, 62,226, 59,232, 53, 6, 60,211, 88,163, 84,173, + 69,137,138, 15,173,112, 48, 8,226, 10, 72, 74,136, 94,221,218, 34,252,234, 3,181, 81,175, 59,107,158, 42, 48,130,178,233, 10, +227,211,132, 42, 2,171,250, 27, 22, 45,148,194,104,104, 92,175, 96,145, 72,180,110,253,250,245,179,190,255,254,123,203,105,211, +166,117, 48, 61, 44,182,111,223, 94, 34, 18,137,214,253,213, 58,149,201,100,227,220,220,220,150,127,245,213, 87, 46,221,186,117, + 67, 76, 76, 12, 66, 66, 66,126,203,206,206, 62,105,198,155,177,171,173,173, 45,158, 61,123, 6,129, 64, 0,163,209,136,220,220, + 92,100,100,100, 64, 40, 20, 34, 50, 50, 82,219,170, 85,171,227, 77, 73,152, 57, 1,237, 85,123, 84, 54, 6, 98,154,241,253,252, +211,169,237,212,106,149,103, 73, 73,137,129,199,227,241,132,124, 99,106, 99, 56,244,122,253,233, 43, 87,174,188,213,167, 79, 31, + 97,114, 66, 28,116, 69, 69,208, 23, 23,130, 54, 26, 96,227,219, 13,164, 86, 13, 66,171,135,139, 7, 11, 85,161, 4,215, 98, 83, +244,122,189,190, 65, 87,208, 36,176, 72,138,170, 30,119,101,101, 9,129,180, 92, 96, 85, 93, 79, 52,208,174,229,224,224, 96,209, +183,111,223, 1, 62, 62, 62, 96, 89, 22,235,214,173,131, 86,171, 21,232,245,122,232,245,122,232,116, 58,148,148,148,224,216,177, + 99,248,225,135, 31,174, 53,107,214,108,159, 66,161,104, 40,153, 6, 23, 23,151,143, 25,134,113, 48, 24, 12, 58,123,123,123,250, +200,145, 35, 16,137, 68, 32, 73, 18,221,186,117,131, 72, 36,210,200,100, 50, 29, 0,216,219,219,235,215,175, 95,207,155, 60,121, + 50, 93, 27,153,119, 64,135, 5, 70,214, 54, 80, 32,108,229,214,204,190, 43,218,180, 31, 0, 0, 24, 52,116, 18,218,180,107,129, +162,188,132, 54, 90, 77,250, 8,138,120,210,252,199, 27,242,164, 87, 44, 58,127,240, 36, 43, 34, 25,192,247,230,158, 75, 3, 6, + 12,192,171,175,190, 90,217, 28,232,224,224, 0,173, 86, 11,131,193, 96,182,184, 2, 0,211, 32,162,193,193, 32,241, 21,176,175, +187,101, 54,128, 74,123,178,168,168, 8,153,153,153, 72, 79, 79,175,188, 79, 49,172,121,111,215, 50,153, 76,220,166, 77,155,137, + 94, 94, 94, 8, 15, 15, 71, 66, 66,130,252,210,165, 75, 46, 1, 1, 1,112,117,117,253,128,101,217,207, 42, 92, 88,179, 96,103, +103, 39,233,222,189,251,172, 15, 62,248, 0,247,239,223,199,162, 69,139,158,100,103,103,159, 56,125,250,244,228, 79, 62,249,132, + 12, 12, 12, 68,110,110, 46,118,238,220,105,140,140,140,252,166,121,243,230,203,179,179,179,235, 43,199, 84,133, 66,209, 90,173, + 86,227,201,147, 39, 48, 13,201,112,246,236, 89,132,133,133,229, 20, 22, 22,246, 83, 42,149, 15,205, 73, 91,171, 86,173, 44,125, +125,125, 29,147,147,147,113,248,240, 97,232,116,186,207,211,211,211,117, 86, 86, 86, 63,109,223,190,253, 43,119,119,119,155,190, +125,251,162, 87,175, 94, 96, 89, 22,167, 78,157, 66,112,112,240,111, 98,177,248,237,164,164, 36, 93, 3,244, 35, 86,172, 88,177, +194,206,206,238,189,177, 99,199,146,190,190,190,136,142,142,134,209,104,196,128, 1, 3, 42,197,213,217,179,103, 15,158, 61,123, +246, 93, 0,180, 84, 42, 21,253,219,221, 43, 19,212,106, 53,146,147,147,225,232,232,136,118, 1, 61,177,232, 78, 26,174, 92,191, + 1,150,101,209, 39, 49, 13,207,158,149, 98,223,190,125,136,137,137, 1, 69, 81,112,119,119,111,144, 83,167,211,225,225,195,135, +200,203,203,195,240,225,195,241,254,251,239, 99,237,218,181,208,233,116, 88,186,116, 41,158, 62,125,138,221,187,119,227,225,195, +135,224,241,120,144, 74,165,255, 31, 89,173, 83,139,252, 39, 29, 44,160,188,237,155, 97, 24, 40, 20, 10, 68, 69, 69, 33, 45, 45, + 13, 18,137, 4, 42, 3,195,108,189, 25,207,144, 4, 95,110,100,113,149, 53,224,211,134,148,184, 94,175, 39,120, 60, 30,174, 95, +191,142, 71,143, 30,193,170, 29, 91,233, 94,233,245,122,104, 52, 26,148,149,149,129,207,231, 63,187,113,227,198,227,232,232,232, + 54, 60, 30,175,206, 94, 96,185,237,169,253,231, 47,252,177,192,183,155,103,135,129,129,193, 56,125,250, 75, 20, 22, 23,163, 84, +195,195, 51,149, 14,165,106, 22,206,150,109,209,189,171, 15,242,158,104,241, 32, 49, 38, 43,159,182,105,176, 13, 70,111, 36,139, + 14,110,155,214,108,216,187, 51, 32,114,234, 11,109,218, 17, 48,170,156, 74,129, 69,139, 44, 97,101,215, 18,197,207, 84,184,150, +148, 10,189,145, 44, 50,183,208,211,210,210,138, 53, 26,205,170,107,215,174,125,109,234,249,115,249,242,101,164,164,164,172, 82, + 42,149,197,141,169, 64,153, 76, 54, 16,192, 33, 0, 34, 7, 7,135, 28,127,127,127,217,171,175,190, 42, 10, 12, 12, 4, 69, 81, +136,141,141,197,180,105,211,206, 73,165,210,183, 97,198,152, 56, 2,129, 32,167,168,168,168,153, 80, 40,132, 94,175, 71,118,118, + 54,238,223,191, 15,149, 74,133,156,156, 28, 16, 4,161,136,136,136, 80, 53,246, 68, 51,245,208,170,249,144,172, 77, 60, 55,178, + 23, 33, 92, 92, 92, 2,253,187, 7,116,254,102,195, 22,168,202,158, 33,242,198,105, 20, 60,205,199,174, 61,199,187,184,184,184, + 4,154, 27, 76,156,149,149,245,243,241,227,199,231,123,123,121,249,184,183,104,129,219,233,105,160, 25, 35, 4, 70, 35, 40,173, + 26,164, 81, 3,215,206, 44, 72, 82,138,156,236, 18,236, 56, 23,126,167, 98, 84,247,250,211,247,250, 48,140, 73, 47, 2, 65, 16, + 56,247,138, 39, 68, 82, 41,104,169, 4,189,142, 69, 84,138,170,199,107, 22,130,150, 72,209,220,191,225,129, 49,115,115,115,203, +174, 93,187, 22,125,239,222, 61,255,142, 29, 59, 98,217,178,101,200,204,204, 4,203,178,200,205,205, 85,231,229,229,201,159, 60, +121,242,152, 32,136, 19, 10,133, 98, 15,204, 28, 45,156, 97, 24,135, 83,167, 78, 1, 0, 13, 0,127,252,241, 7,156,157,157,209, +172, 89, 51, 20, 23, 23, 99,252,248,241,194, 47,190,248, 2, 0, 16, 27, 27,203, 23,137, 68,117,114, 37,198,221, 95, 95, 80,204, + 22,144,165, 49,111,231, 27,226,186,244, 31,156,133, 65, 67, 63,192,249,211,251, 16, 30,118, 1,118,252,180, 84,163,248,217,239, +121,169,249, 37,202,210,246, 59, 61,253, 38, 83,138,103, 97,187,102, 12, 75,230,185,202,152,163, 75,118,212, 63,112, 47,203,178, +160, 40,234,185,128,246,198,138,171,170, 8, 14, 6,131,175, 64,180,225,243,226,228,217,153,131,157, 29, 93, 43, 95, 46, 50, 50, + 50,144,153,153,137,118,237,218, 33, 45, 61, 5, 2, 1, 29,103,230,121, 63,118,232,208,161,150, 90,173, 22,191,252,242,139,129, + 32,136,161,167, 78,157,138,246,246,246,230, 5, 5, 5, 89,238,219,183,111, 44,128, 61,141,105, 49,146, 74,165,180, 94,175,199, +254,253,251, 33,151,203, 3,115,114,114,146, 88,150,221,249,209, 71, 31,125,235,225,225,209, 46, 41, 41,233,129, 74,165,154,161, + 84, 42, 19,234,107,114, 3,128,194,194,194, 9,175,189,246,218, 81,134, 97, 90,245,238,221, 91, 50,102,204, 24, 43,150,101,225, +225,225,129, 51,103,206, 40,148, 74,165,217, 49, 76,233,233,233, 37, 87,174, 92,201,241,244,244,116,148,201,100,160,105,122,141, +147,147,211, 74,138,162,190,121,243,205, 55,109,142, 28, 57,130,208,208, 80, 72, 36, 18,164,166,166, 42,238,221,187,183,201,201, +201,105,179, 57, 35,184,199,198,198,166, 2, 24,227,239,239, 31,188,113,227,198,207, 73,146, 28,119,238,220,185,202,177,206, 76, +226,202,205,205,109, 66,104,104,232,251,255, 49, 35, 68,175,213,106, 97,107,107,139,188,188, 60,228,230,230,162,101,203,150,232, +217,179, 39,244,122, 61, 78,158,254, 13, 87,174, 92, 1,203,178,176,179,179,131,149,149, 21,226,227,227, 1,160,190,222,195,122, +157, 78, 7, 27, 27, 27, 20, 22, 22, 34, 62, 62, 30, 14, 14, 14,152, 55,111, 30,180, 90, 45,142, 28, 57,130,184,184, 56,144, 36, + 9,123,123,123, 88, 90, 90, 34, 46, 46,174, 33, 78, 14,141, 21, 88, 20, 69, 93,188,120,241,226,187, 93,187,118,229, 61,120,240, + 0, 15, 30,148, 95,111, 42,149,202,192,163, 16,154,123,251,228,152,122,254,222, 25, 85,198,202, 16, 8, 4, 59,222,125,247,221, + 25,147, 38, 77,194,204,153, 51, 65,146, 36,190,143,213, 32, 35,131,129, 78,167, 67, 78, 78, 14,110,223,190,205,250,251,251, 19, + 12,195,232,250,245,235, 55, 37, 38, 38, 38,128,162,168,226,186, 56, 17, 26,106, 52,116,126,115,248,246, 29,123,174, 79,156, 56, +209,102,216,240,237,136,189,155,136,194,210,242, 86, 38,103, 59, 9,186,119, 92,136,220, 39, 26,132,253,126,186,128, 49,168,223, + 65,226,207,250,250,210, 9, 0,121,101, 42,135,157, 7,142,175, 59,124,236,196,148,169, 19,198,136,250,245,155, 0,126,201,109, + 24,159,196,192,185,125,111, 16,148, 5,110,197,199, 34,225, 97,166,186, 76, 77,237, 41,214,169, 22, 54,196, 89,205, 75, 39,201, +173,187,119,108, 89,125,246,124, 4,165,211,233, 48,228,181, 1, 70,146, 36,183, 54, 80, 29,207,113, 90, 88, 88, 28,142,143,143, +183,209,104, 52,200,202,202,106,211,161, 67, 7,176, 44,139,244,244,116,108,218,180,201,112,230,204,153,237, 34,145,104, 81, 61, +111,136,213, 56,245,122,253,161,253,251,247, 47,249,248,227,143, 69,185,185,185,184,119,239, 30, 74, 75, 75,161,211,233, 16, 19, + 19,163,214,235,245,135,205, 56,175,158, 75,167, 73, 96,217,216,216,184,116,239,222,221,212,139,208,133, 97, 24, 52,111,222,220, +213,223,223, 63, 26, 0,154, 53,107, 86, 87, 47,194, 58,203, 83, 46,151, 95,138,136,184,130,253,123, 54, 64,167,211, 64, 41, 47, +119, 26,242,159, 20,161, 1,113, 85,147,147, 85,171,213,111,111,220,180,233,230,244, 9,227,156, 94,233, 63, 0,153, 9,241,208, + 62,205, 3,105, 52,128,207,242, 80,150, 43, 70, 78,206, 51,172, 62,115, 33, 87,165, 86,215, 38, 90,107, 77,103,101,179,160,149, + 37,132, 82, 41, 4, 21,174,149,105,155, 64,106, 9,190, 68, 10,138,166,107,107,242,122,142,179,172,172,236,157,169, 83,167, 38, +156, 57,115,166,249,152, 49, 99, 48,108,216,176,216,194,194,194,160,130,130,130, 18, 51,175,253,231, 56, 73,146,204, 29, 50,100, +136,131, 86,171, 53,140, 26, 53,138,151,159,159, 15, 83, 23,251,146,146, 18,252,254,251,239,232,216,177,124,214,153,196,196, 68, +120,122,122,214,201, 57,101,209, 29, 57,128, 21,159,188,235,242,205,205,248,236,217, 0,214,180,105,231,138,240,176, 11,184, 18, +126,125,113,143,206,204,150, 55,198, 6, 44, 23,245,127,111,161,167,239,100, 74,106, 37,195,129,227,199,168,187, 49,223,173, 82, +151,222,113,199,142,227, 11,235, 74, 39, 65, 16, 96, 89,182,154,184,226,241,120, 40, 43, 43, 51, 87, 92,213,125,109, 18, 96,139, +189, 10, 62,159, 56,111,100,207, 63, 14,223,178,148, 72, 36,149, 49, 63,109,219,182, 5,143,207,195,247, 39,182,150, 22, 22,230, +127, 97, 14,167, 68, 34,249, 56, 40, 40, 8, 41, 41, 41, 72, 72, 72, 56,166, 84, 42, 19, 88,150, 61,150,154,154, 58, 42, 32, 32, + 0, 63,255,252,243,199,245, 8,172, 90, 57, 77, 35,214, 87,184,189, 79, 1, 64,169, 84,198, 3,232,241,232,209,163, 70,229,189, + 98,176,208,222, 21,229,154, 57, 98,196, 8, 43,131,193,128, 10,241,108,219,200,115,137, 81, 42,149,155, 35, 35, 35, 67,186,117, +235,134,209,163, 71, 15,138,142,142, 30,228,237,237, 13,119,119,119, 20, 20, 20, 32, 34, 34,226, 71,134, 97, 62, 82, 42,149,106, + 0,108, 61, 2,176,214,188, 71, 69, 69, 61, 4, 48,222,199,199,231, 61, 30,143, 7, 43, 43, 43, 74, 46,151, 83,231,206,157, 3, +128,169,161,161,161,198, 38,213,123,211,241,210, 57, 9,130, 88, 58, 97,194,132,157,211,166, 77, 19, 5, 4, 4,160,168,168,168, + 82,244,159, 57,115, 6, 21, 61,177, 97,107,107,139,135, 15, 31,226,196,137, 19,218,162,162,162, 77, 52, 77,175,169,143,115,252, +248,241,213, 56, 77,226,237,244,233,211, 48,117, 34,177,181,181,197,131, 7, 15,112,252,248,113,117, 81, 81,209, 6,173, 86,187, +246, 37,231,253,127, 75, 96, 61,125,250,116,206,146, 37, 75,130, 62,252,240, 67, 91,149, 74, 69,217,217,217, 65,161, 80, 24,194, +194,194,158,150,148,148,204,105,204,193,110,220,184, 49,243,141, 55,222,216,180,119,239,222,221,187,119,239, 14, 28, 61,122, 52, +198, 15, 25,130, 25, 61, 37,208,104, 52, 32, 8, 2, 97, 97, 97,247, 47, 94,188,216,134,166,105, 77,112,112, 48, 3,224,102, 67, +188, 79,238,156,122, 64,117,126, 43,112,203,214,111, 67,125,252,122,180,106,237,214, 90,216,187, 69, 51,232,244, 70,228,228, 62, +193,165,235,119, 53, 15,238,198,103, 50, 58,237,200,188,164,134, 71,113, 7,128,164, 36,232,128,146, 57, 30, 30,150,203,214,238, + 56,184,227,135,163,199, 70, 76, 25,253, 54,207,183, 75, 16,210,178, 79,226,114,244, 69, 67, 65, 9,123,162, 68, 75, 77, 79, 74, + 42, 41,104,108,193,203,229,114,181,136,207, 22,169,213,106,155,180,180, 52,228, 40, 21,197,114,185, 66,221,148,102, 55,141, 70, +131,148,148, 20, 92,184,112, 1,177,177,177,184,118,237,154,238,220,185,115,123, 73,146, 92, 85,207, 64,147,181, 95,217,157, 59, +127,253,221,119,223,189,107, 52, 26,221,251,245,235, 39,178,177,177, 65,126,126, 62, 34, 35, 35,181,113,113,113, 41,157, 59,119, + 94,219,212,147,205,201,201, 9, 35, 71,142,116,240,245,245,117, 48,245, 24,108,209,162, 5,222,121,231, 29, 7,111,111,239,202, +117, 45, 91,182, 68, 99,134,106,112,113,113, 9,236,215,239, 21, 76,156,252, 9, 84,170,103,184,121,253, 52, 10,159,230,227, 70, + 84, 50, 52, 58, 4, 54,166, 59,124, 69,239,205, 30, 43, 55,109, 57,254, 90,119,127,143, 14,206, 78, 66, 91,183,214,144,216, 59, +225,233,147, 39,184, 25,255, 72,191,237,252,165, 59, 42,181,250,109,115,123,122, 50, 12, 83,217,203,205,115,246, 98,144, 36, 89, + 57, 11,130,105,187,149, 95, 31,144, 60, 62,140, 44,160,211,233, 26,116,239,148, 74,101, 22, 65, 16,239,204,154, 53,235,143,253, +251,247,147,253,250,245,235,246,235,175,191,254,165, 73,115,229,114,185,107,133, 43, 90,108,101,101,197,251,224,131, 15,160,215, +235, 81, 86, 86,134,226,226, 98, 60,121,242, 68, 51,119,238, 92, 33, 0,208, 52,173,127,237,181,215, 26,188,127,108, 12,149,171, + 63,121,215,101,139, 29, 63,109, 84, 81, 94, 66, 27, 59,126, 90,106,143,206,204,150,141,161,114,181,131,117,217, 74,121, 94, 68, +178,226, 89,216,174, 3,199,143, 81, 19, 70,188, 99,148, 73, 31, 44,182,107,129,163,102,221,188,106, 8,172,166, 58, 87,207,221, + 79, 18, 17,155, 37, 73, 9, 9, 26, 25,240,217,202,249,235,165,118,246,118, 48, 24, 12, 72,205, 72,193,222,227,219, 74, 75, 52, + 5,171,158, 38, 33,218, 28,174, 54,109,218,184, 81, 20,133,147, 39, 79, 2,128,105,104,131,109,191,255,254,251,168,177, 99,199, +162,101,203,150,158, 12,195, 8,235, 27, 70,163, 54,247, 78,175,215, 55,186, 25,189,193,182, 25,130, 72,137,143,143,119,113,113, +113, 33, 14, 31, 62,252, 76,167,211, 5, 55,225, 26, 95,255,219,111,191,189,194,178,236,107, 62, 62, 62,104,213,170, 21, 0,224, +238,221,187,184,114,229,202, 33,185, 92, 62, 17, 47,102,114,103,150, 32, 8, 20, 23, 23,155,198, 53,209, 73,165,210,255,228,164, +209, 10,133,226, 7,131,193, 16, 22, 28, 28,252,101,219,182,109, 63,154, 58,117, 42,213,161, 67, 7, 20, 21, 21,193,202,202, 10, + 50,153, 12,114,185, 28, 63,252,240,131, 49, 55, 55,119, 47, 73,146,203,148, 74,165,162,169,156,205,155, 55,135, 76, 38, 67, 86, + 86,150,137,115,183, 94,175, 95,158,159,159,159, 3, 14,141,187,166,204,217,169, 98,152,134,205, 70,163, 49,200,228,106, 61,125, +250,116, 78, 78,121,196,120,147,212,253, 27,111,188,209, 54, 63, 63,127,183, 78,167, 11, 28, 54,108, 24, 70,143, 30,141, 55,223, +124, 19,163, 71,143,166, 76,174,213,175,191,254,122,175, 81,111, 12, 21,147, 61,147, 20, 61,148,101,217,174, 0, 8,130, 36,205, +153,236,185, 65, 37,222,205,195,210, 93, 44,100,246,136, 5, 76, 31,149,150,188,170,210,144, 83,226,146, 74, 82,254,202,155, 77, +197,196,206, 63, 1,128, 70,207,142,203,202, 82,158,111,108,121, 86, 52, 17, 30, 38, 8,130, 98, 89,118, 43,203,178,135,101, 50, + 89,138, 57,182,123, 77, 78,150,101, 73,160,124,112,209, 11, 23, 46,124, 73, 16,196, 56,141, 70, 99, 47, 20, 10,243, 88,150,253, +113,224,192,129,203,183,108,217,162,175,231, 6,205,212,149, 78, 87, 87,215,131,206,206,206,237, 43,142, 83, 45,230,202,244,109, + 90, 95, 49, 30,209, 35,185, 92, 62,214,220,242,116,111,227, 18,230,238,230,242,170,187,155, 51, 0, 32, 37, 77,129,148, 52,249, +185,148, 84,249,224, 38,214, 81,229,100,207, 68,197, 80, 12,172,121,147, 61, 87,227,244,244,244,140,166, 40,202,181, 49, 23, 37, +195, 48,138,196,196, 68, 31,115,210, 41,147,201,198,180,104,209, 98,141, 66,161, 56,158,149,149,245,201,139,120,243,150,201,100, +189, 72,146, 60,195, 48,140,184,166,195,101, 18, 97,117, 4,185,215,201,249,245,103, 94, 95,244, 14,124,101,196,181, 75, 87, 78, + 44, 90,157,184,162,234,182,153,111, 53,159, 52,118,230,156,181, 7,183,111,254,116,251, 47, 5,123, 27, 74,103,151, 46, 93, 34, + 0,180, 55,185, 89,245,193,104, 52, 42, 18, 19, 19,253,154,226, 58,216,116,129,191,181,196,110,133, 86,167,243, 38, 9,176,124, +154,142, 47, 44,204,255,162, 14,113, 85, 43,167,139,139,203,154,118,237,218,205,121,244,232,209,161,172,172,172, 15,171,148,241, + 55,173, 91,183,158,153,153,153,185, 45, 43, 43,107,161,185,117,228,230,230,102,229,237,237, 93,176,108,217, 50,242,171,175,190, + 66,100,100,164,141, 92, 46, 47,120, 17,245,222,178,101, 75, 39,145, 72,116,128, 97, 24,119,163,209,184, 61, 53, 53,117,125, 83, + 56, 61, 60, 60,232,194,194,194, 57, 45, 90,180,152,231,232,232,232,152,147,147,147,158,145,145, 17,146,157,157,253, 93, 35,196, + 85,131,117,228,227,227,163, 1,202,167, 19, 51, 51,222,234, 95,233, 96,213, 56,159,220, 25,134, 89,229,237,237,253,238,164, 73, +147,136,164,164, 36,156, 63,127, 30,143, 31, 63, 62, 81, 17,207,247,224, 69,112,134,133,133,177,233,233,233, 71, 73,146,252, 92, + 46,151,167,252, 63,230,157, 67, 35, 79,148,122,241,198, 27,111,180, 13, 8, 8,136,232,210,165, 11,211,165, 75,151,146, 23,193, +249, 50,210,249,167,134,179,147,188,104,206,151,145,206,166,112,178, 44, 75,254,149,207, 63, 33,239,237,218,181, 99, 97,254,252, +107,255,186, 58,250,183,114,238, 88,217,197,249,214,133,247, 54,238,249,186,243,115,147,151, 7,207,106,110,249,199,201,183,215, + 6,207,106,110,249, 31, 45, 79,178,137, 47,184,157,107,127, 49,107,177,243,173,183,222, 50,182,104,209, 98,247, 63, 60,239, 68, +171, 86,173,132,220,117,244,226, 57, 29, 29, 29,253,100, 50,217, 41,153, 76,118,202,197,197, 37,224, 5,115,254,226,228,228,228, +243, 55,229,157,195,203, 56,249,222,124,243, 77,135,183,222,122,203,134,187,240, 56, 78,142,147,227,228, 56,235,231,148,201,100, + 98,174, 60, 57,206,255, 32,231,127, 10,188,127, 74, 66, 78,157, 58,149,203, 85, 7, 7, 14, 28, 56, 52,140,198, 12,237,192,129, + 3,135,191, 7, 68, 61, 42,180, 49,109,171, 77, 81,178,119, 56, 78,142,147,227,228, 56, 57, 78,142,147,227,252,159,227,108,136, +155,139,237,122, 73,194,139,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,255, 61,206,255, 20, 72,174, 8, 56,188,108,108,153, + 12,151, 45,147,225,242,178,246,231,192,129, 3, 7, 14, 28,254,105,224,253,215, 50,228,235,235,235,201,178,236, 88,130, 32,222, + 5, 0,150,101, 67, 9,130, 56, 24, 19, 19, 99,214, 8,180, 34,145, 40, 91,173, 86, 59, 84,252,206, 85,171,213,178, 42,155,137, + 42, 31,160,188,183, 90,213, 79,173,112,115,115,203,214,104, 52,230,204,175, 23, 71, 16, 68, 44,195, 48, 49, 82,169,244,234,195, +135, 15,147,205,205,247,192,129, 3, 63,146, 72, 36, 95,168, 84,170,181,231,206,157,219,252,255, 80,212,221, 91, 56, 59,237,211, + 27,116, 76,118,238,211,165, 0,106,157,134,103,251, 36,132, 16, 44, 22, 86,252, 94, 55,115, 47,150,212, 71,218,216,253,235,129, + 31,159,207,255,216,209,209,241,245,172,172,172,104, 0,159,130, 27,133,152, 3, 7, 14, 28, 56,252, 19, 5, 86, 15, 31,155, 14, + 4,163, 91,200,167,216, 87,244, 70,226, 10, 75,210,235,110,198, 62, 77,254, 43, 9,144,201,100, 45, 8,130,232,199,178,172, 7, + 73,146,183, 25,134, 57,167, 84, 42,159, 52,134,195,199,199,167, 5,128,209, 0,198,116,239,222,189,243,244,233,211,209,174, 93, + 59,168,213,106, 68, 70, 70, 46,254,233,167,159, 22,179, 44,123, 7,229, 83,202, 28,142,141,141,205,172,139, 75,173, 86, 59,152, +198,102, 34, 8,194,225,221,119,223,141,172, 50, 9, 47, 97,154, 92,150,101,217,155, 0,110, 16, 4,113,253,231,159,127,206,234, + 96, 47,234,209,186,133,253, 27,103, 99, 50,150,214,228,212,104, 52, 14,113,167, 78,128, 53, 24,241, 76,158,129,182,111,143,174, +220,118,254,237, 1, 96, 75,139,193, 23,210,113, 65,191, 94,143, 5, 16,147,145,145, 17,219,170, 85,171,228,250, 56,107,162, 91, +183,110,203,131,131,131,237,134, 13, 27,246, 49,128, 58, 5, 86, 99, 56,235,129,176,135, 95,215,139,167,142, 29, 22,129, 32,241, +214,136,119, 15, 93,139,185, 51, 30, 64,181, 9,160,183, 79,132, 35, 65, 96,225,244,185,211, 41, 0,248,118,211,142, 79, 55,190, +143, 45,159,252,132,108,103,103,231, 32,150,101, 63,173, 40,231,181, 10,133,226,226,246,137,112, 4,176,104,250,220,233, 4, 0, +236,216,180, 99,225,246,137,216, 60,115, 63, 26, 59,192,221,140,137, 19, 39,110, 89,181,106, 21, 85, 49, 8,223,107,158,158,158, + 29,138,139,139, 61, 1,112,193,193, 28, 56,112,224,192,225,239, 23, 88, 94, 94, 86,214, 98,146,157, 39, 22,176,163,251,245,106, +231,246,230,235,189,136, 54,109,219, 32, 57, 41,217,253,226,165,168, 15,132,212,221, 52,149,150, 56,172, 98,136, 13,137,137,245, +207, 31,246,249,100,232, 13,134,242, 99,242,120, 48, 30, 56,231,122, 34, 40, 40,200,109,210,164, 73,240,241,241, 65,116,116,116, +208,209,163, 71,231,252,246,219,111, 81,122,189,254,140, 80, 40,140,104,104,132, 99, 31, 31,159, 53, 46, 46, 46,159,206,159, 63, +159,240,243,243,131, 80,248,231,176, 43, 82,169, 20, 3, 6, 12,192,128, 1, 3,144,157,157,221, 57, 34, 34,162,243,193,131, 7, + 67,124,124,124,214,198,198,198, 46, 54,167,128,190,248,226, 11,223, 90, 86,135, 17, 4,241,136, 36,201, 24, 15, 15,143,172,182, + 78,146,142,118, 54,214,167,191, 94,181, 12,103, 95,157, 88,167,112,249,101,112, 47, 0,168, 38,176,116,249, 57, 16, 89, 74,227, +104,177, 56, 22, 64, 12,128,216, 86,173, 90,197,153,203, 9, 0,129,129,129,194,251,247,239, 19, 44,203, 34, 32, 32,192,134, 32, +136,100,146, 36, 55,159, 61,123,118, 71,213,253, 26,195,217,144,123, 21,188,112, 38,157,159, 18,135,123,215,207, 97,184,175,139, + 40, 54,241,254, 74,181, 86,127,172,190, 63, 17, 4, 73,238,143,182, 91, 12,228,206, 97, 24,230,139,164,164,164, 64, 0,240,240, +240, 16, 0,184,120, 32,178,249,144,137,189,138,254,202, 36,159, 52, 69, 81,219,247,238,221, 59,121,252,248,241, 72, 79, 79,199, +213,171, 87, 33,149, 74,177,124,249,242,214,243,231,207, 15, 49, 24, 12,115,184,203,158, 3, 7, 14, 28, 56,252,173, 2,171,143, +143, 69,100, 80,207,214,190,195, 6,247, 34,219,121,120,130, 22, 90, 84,110,235,226,227,131, 46, 62, 62,196,212,169, 37,109,226, + 99,227, 63, 63,251,199,173,207,154,209,134,152,171,177,101,117, 14,122,102, 48,128, 23,178,234, 32, 0,224,192,158,177, 84,114, +114,178,155, 88, 44,174, 42, 20, 16, 24, 24, 72,134,132,132,116,191,120,241, 98,247,195,135, 15,235,244,122,253, 38,133, 66, 81, +223,212, 25,159, 30, 61,122,148,160, 40, 10, 20, 69,213,185,147,147,147, 19, 6, 13, 26, 4, 39, 39, 39, 98,225,194,133,159, 2, +168, 85, 96,137, 68,162, 92,130, 32, 28, 0,160,121,243,230,198,224,224,224,120,182, 2, 0,192, 48,204, 77,138,162,110, 16, 4, +113,243,196,137, 19,114,119,103,145,139,148, 22,158,219,189,115, 43,244,197, 57,117,142,227, 85,166,200, 50,169,140,106,235, 5, + 18,139, 56,129, 68, 18, 43,144, 74, 99, 0,196, 18, 4, 17,103, 46,167, 73, 92,137,197,226,203, 59,119,238,108, 14, 0,179,102, +205,178, 46, 43, 43,179,158, 50,101,202, 98, 0,149, 2,171, 49,156,245,192,250,149,158,126,143,223,121,243, 53, 43,159,238,125, +112, 51,244, 91, 20, 22,150,162,180,164, 12, 12,195, 60, 55,243,239,204,253,200,217, 62, 9,235,190,221,184, 99, 17, 65,146,132, +247,224, 79, 49,216,134,157,157,255,227,143,137, 0,248, 2,129,160,162, 72, 8,158,139,139,139,179,165,115,135,117,237,250,116, +196,142,205,219,193, 50, 12, 11, 96, 93, 35,220, 43, 7, 75, 75,203,147,231,206,157,235,238,239,239,143,155, 55,111, 34, 37, 37, + 5, 51,103,206,212,206,156, 57,147,158, 48, 97, 2, 49,111,222,188, 89,107,215,174, 13, 5,112,141,187,244, 57,112,224,192,129, +195,223, 38,176, 68,180,209, 63,120, 75, 60,140,165,143,192,234, 51,192,234,178,159,219,199,194,186, 5, 58,121, 59,194, 66, 96, + 79,222, 78,218,232, 95, 99,115,189, 93, 45, 77,226, 42,116,189,179,151,170, 84, 73, 3,128, 88, 34,211,189, 51, 79,158,232,239, +239, 15,123,123,123,250,250,245,235,243,128,106,115,147,213,228, 36,180, 9,209,184,247,102,111,180,189,247, 20, 22, 22, 22, 48, + 61,184, 77, 72, 78, 78,198,229,203,151,145,158,158, 14,119,119,119,224,249, 17,148, 43, 57,213,106,181,211,224,193,131, 35,214, +174, 93,219,119,205,154, 53,183, 15, 29, 58,212, 15, 64, 89,173,238, 94, 11, 43,107,198,192,158,219,179, 99, 35, 31,218, 82,155, +251, 81,215,234,204,187,219,155,239, 96,122, 97,121,211,227, 17, 79,103,136,172,164, 16, 74, 45,227, 6,133, 69, 85, 58, 87, 4, + 65,196,153,203, 25, 20, 20,244, 1,143,199, 91,170,211,233,154,237,218,181,203,218,218,218,154, 60,121,242,164,110,231,206,157, + 37, 52, 77,107, 9,130, 88,221,148,116,214, 7, 62, 69,173,248, 38,120,161,149, 5,105, 64,236,153, 31,145,149,158,129,132,135, +114,253,207, 87,238, 26,181,122,227,164,218, 56,103,238,197,146,121,111, 9,246, 69, 43,221, 79, 13,253,106,102,251,149,195, 28, +161,211,233,246,228,229,229, 97,202,148, 41, 96, 24, 6,125,250,244,233,205,178,172,124,246,236,217,112,119,119,199,158, 95, 31, +148,241,138,111,245, 59, 24, 94, 18,109,102, 58, 59,183,106,213,234,220,197,139, 23, 29, 93, 92, 92, 16, 17, 17,129,236,236,108, +200,100, 50,204,156, 57, 83,176,102,205,154, 3,197,197,197, 35, 87,173, 90, 37,186,115,231,206,225,176,176,176, 22, 40,143,153, +123, 25, 93,129, 57, 78,142,147,227,228, 56, 57,206, 23, 12,150,101,253, 1,216, 3,200, 35, 8, 34,170,234,114,197, 46,246, 21, +223, 53,151,243, 43,158,249, 85, 39, 47,207,175,120, 6,216, 3, 48, 2,136, 36, 8,162,224, 69,167,217, 36,176, 2, 1, 68, 0, + 88, 6, 32,184,230, 78, 58,121, 4, 4,173,223, 6, 68, 94, 96,181,143,192,104,229, 96,249, 14, 40, 45, 19, 33,255,113, 58,238, +221, 12, 5,107, 40,107,248, 96, 60, 24,182,110, 26,203,179,180, 0,104,161,189,174,164,164, 4, 18,137, 4,170, 82, 37, 61, 97, + 74,165,179, 69, 95,188,120, 17, 49, 49, 49,112,118,118,110, 80, 4, 2, 0,171, 45,111, 69,212,106,181,208,106,181,200, 30, 18, + 0, 73,143,190, 40, 24, 55, 19, 23, 46, 92, 64, 94, 94, 30,104,154, 6, 77,211, 48, 24, 12, 13,166,147,172,152,137,215,100, 90, +213,182,143,139, 11, 68, 70,189,254,244,214, 13,171,173,172,164, 22,142,209,231,126, 65,122,122,182, 89,133, 46,144, 88, 64, 32, +182,136, 19, 72,196,213,196, 85, 99, 56, 41,138, 90,126,236,216, 49, 23,141, 70, 3,154,166, 17, 26, 26,170,219,191,127,127, 98, +105,105,233, 43,177,177,177,170, 23,145,206,154,176,181,183,255,237,237,247,167,205, 92,249,225, 32,168, 74,213, 56,113,229, 46, +254,184,157, 54, 12,192, 85, 0,165,117,253,111,195, 47,218,135,206,206, 69, 3,166, 76,153, 18,119,252,248,113,187,111,190,249, + 6, 70,163, 17, 6,131, 1, 6,131,161,242,183,209,104,196,161, 67,135,112,245,214,221,217, 74,101, 73,180,153,201,114,118,115, +115,187,112,235,214, 45,123, 11, 11, 11,156, 63,127, 30,133,133,133,152, 49, 99, 70,165,115, 85, 88, 88, 56,122,199,142, 29,239, + 60,126,252,248,155, 43, 87,174, 60, 1, 64, 1, 48,128, 3, 7, 14, 28, 56,252,147, 80,159, 22,177, 39, 8,226, 52,203,178, 67, + 89,150, 29, 8, 64, 96, 90, 6, 0,130, 32, 78, 87, 60,183,171, 45, 47, 94,188,248,179,144,144,144, 68,211,178,105,159, 37, 75, +150,120,173, 89,179,102,117,207,158, 61, 15, 95,191,126, 61, 21,192, 75, 19, 88, 17,168,103, 94, 44,205,163,159,160, 73,253, 25, +180, 44, 8,130, 54,163,192,183,235,137,204,251, 17,136,187,176, 1, 89, 15,174,130,101,140,112,108,209,169,193,131,173,252, 14, +124,153, 76, 22,163, 80, 40, 16, 27, 27,139, 71,143, 30, 65, 36,122,174,101, 9,127,252,241, 7, 0,192,209,209,209, 60,193,226, +223, 27, 45,226,149,200,244, 46,239,240,215, 34, 94, 9, 0, 88,189,100, 9, 4, 2, 1,104,154,174,220,215,104, 52, 54,200, 71, + 84, 68,181, 87, 52, 11,214,214, 59,144, 16, 25, 44,143,126,181,248,227, 86,110,238,237,156,111,253,118, 4,169,169,114,228,228, +152, 87, 63, 66,169, 36, 78,104, 41,137, 21,136,255,108, 22,108, 2,231,145,145, 35, 71,126, 48, 98,196, 8,113,143, 30, 61,132, +223,127,255,125, 97, 77,113,245, 87,211, 89, 21, 78, 78, 78,131,223,120,227,141,223,166, 78,157,138,225,175, 13,196,216, 62, 30, +108, 86,110,145, 10,192,249,138, 55,128,122,161, 80, 40,228, 0, 6,189,253,246,219, 63,121,121,121,121,176, 44,139, 78,157, 58, + 97,248,240,225, 56,118,236, 24,238,222,189,139,146,146, 18,221,149, 43, 87, 54, 41,149,202,189,102, 38,203,162,121,243,230,103, +195,195,195,237, 45, 44, 44,112,238,220, 57,148,149,149, 61,231, 92,173, 94,189, 90,148,150,150,182, 45, 44, 44,172, 53,202,135, + 38,225,196, 21, 7, 14, 28, 56,252,243, 80,175, 22, 49, 9, 39,150,101,135, 86, 21, 76, 53,133,150,233,183,105,191,144,144,144, +161, 85,197, 23, 0,172, 89,179,102,117,149,229,178,151,145, 25,147,192,234, 87, 33, 36,250, 1,184, 84,195,150, 43,255,193, 24, +160,147,159,135, 78,126, 30, 22,222, 75,113,114,203,184,106, 68,230, 56, 67,181, 65,173, 86,131, 47,176,213, 29,216, 51,150, 6, + 0, 35, 43,209, 61,119,236,134,173, 67,179,143,103, 78, 58, 9,130, 32,171,240, 62, 39, 30, 92, 93, 93,215,247,236,221,189, 79, +187, 46, 1, 22,183,206, 30,199,195, 7,233,200,207, 47, 2, 88,168,235,226, 60, 63,234,117,148,166, 36, 67,108,101, 21, 55, 56, + 60,190,154,115,213, 20,206, 11, 23, 46, 44,232,209,163,199, 23,161,161,161, 10,119,119,119, 33,143,199,211,213, 16, 87, 77, 74, +103, 85,200,100,178,222, 60, 30,239, 28, 73,146,226,160,160, 32,204,158, 61, 27,155, 55,111, 54, 48,124,209,208, 29,103,163, 71, + 62,211,232,150,154, 35,174,170,136,172, 4,133, 66,225,153,156,156, 44, 52, 24, 12, 65,111,190,249,230,153, 33, 67,134,224,198, +141, 27,184,112,225, 66,123,157, 78,167,172, 56,238,114, 0,142, 36, 73,174,173,103, 38,119,146,166,233,195, 23, 46, 92,240,114, +118,118,198,249,243,231, 81, 86, 86, 86,233, 92, 77,156, 56,177,154,115,117,253,250,245, 39,156,184,226,192,129, 3,135,127, 52, +234,212, 34, 85,221,167,218, 68,150, 57,168, 34,190, 84,139, 23, 47,254,140, 32,136,211, 21, 14,151, 10,128,226,101, 9,172, 75, + 21,170,145, 69,195, 51,188,195, 88,146,250,220, 58,134,105,250,115,171,253,192,176, 68,177, 88,140, 29, 59,118,192,194,194,162, +209,194,169,244,204,113,100,206,124,191,210,185, 50, 57, 89, 24, 60,161,169, 2,203,228, 96,221, 68,141, 38, 66, 23, 23,151,143, +187,116,233,242,225,238,253, 63, 89,174,249,226,211,162,226,123,137, 60,117,153, 70,162,209, 27,116,143,114,242,235, 28, 30,193, + 80, 92, 8,161, 68, 18,199,183, 16, 63, 39,174,154,202,121,243,230, 77,117,255,254,253,247,173, 94,189,186, 7,195, 48,251, 95, + 68, 58,171,138, 43, 91, 91,219,176,109,219,182,137,197, 98, 49, 52, 26, 13,214,174, 93,139, 63,254,248, 99,104,118,118,118, 24, +128,176,166,214,183, 78,167,155, 60,112,224,192,141, 11, 22, 44,128, 94,175,199,168, 81,163,240,248,241,227,115, 15, 31, 62,220, +236,234,234,186, 96,198,140, 25,206,118,118,118,152, 62,125, 58, 13, 96, 98, 29, 52, 95, 31, 60,120,112,168,183,183, 55, 46, 93, +186,132,162,162, 34,200,100, 50,124,252,241,199,130,144,144,144, 3, 37, 37, 37, 35, 67, 66, 66, 56,231,138, 3, 7, 14, 28,254, + 61, 48, 75,139, 84,117,162, 26,131, 42,255,227,135,132,132, 36,134,132,132, 84,115,184, 94,150,192, 98,171,168,199, 6,221, 33, + 70,245,124, 12, 15, 99, 52, 52, 38,147,102,237,103, 78,115, 30,240,103, 12, 86, 45, 66,233,185,229, 70,196, 96,133,177, 44,123, +189,170,192,114,113,113,121,203,201,201,233,235,131, 7, 15,138, 21, 10, 5, 92, 59,116,110,246,219,177,159, 53,142, 18,161, 58, +235,233,211, 9, 9,138,210,208,186, 56, 25,117,105,156, 72, 34,141, 21, 89, 72,107,138,171, 38,115, 2, 64,120,120,248,252,154, +235,254, 42,167, 76, 38,235,109,103,103, 23,182,109,219, 54, 11,133, 66, 1,154,166, 33,149, 74, 17, 30, 30,142, 10,113,213,100, +184,184,184, 4,207,156, 57,243,171,137, 19, 39,162,160,160, 0, 23, 46, 92, 64, 80, 80, 16,182,109,219,214, 42, 60, 60,124, 99, +175, 94,189, 64, 81, 20,206,159, 63, 15,189, 94,255,160, 14,154, 17, 83,167, 78, 93,240,206, 59,239, 32, 50, 50, 18, 74,165, 18, +211,167, 79,215,126,252,241,199,149, 49, 87,223,126,251,237, 59,105,105,105,156,115,197,129, 3, 7, 14,255, 30,212,169, 69,106, + 60,203,127, 99, 89,246,141,154,174, 86, 77,241,101,114,168,170, 46,215,220,191, 98,187,250,101,100,198, 36,176,234,118,173, 88, + 35, 40,155,174, 48, 62, 77,168, 34,176,148,213,118,161,133, 82, 24,205, 16, 46,159, 79,134,222,222, 90,201,251, 97, 57, 9,190, +192, 86,215,126, 96, 88, 98, 93,251, 74,165, 82, 48, 12, 99,150, 14,163,135,188, 67,181, 29,252, 22, 82,186, 56,129,213,235, 42, +157, 44,124,246, 89, 53,113, 69,211, 52,180, 90, 45,208,112,179, 86, 36, 65, 16,143, 41,138,186, 1,128, 13, 12, 12,220,163,215, +235,223, 42, 40, 40,104, 62,101,202, 20, 93,126,126, 62, 78,156, 56,129,125,251,246,169,158,233,120,209, 5, 79,244,227, 82,149, +165, 89,245,240,197,189,113, 41,177,154,115,245, 2, 56,159,195,139,224,148,201,100,189, 29, 28, 28, 42,197,149, 80, 40,132, 84, + 42,133, 92, 46, 7,143,199,251, 75,131,116,182,106,213, 74,232,235,235,187,104,194,132, 9,184,119,239, 30, 22, 47, 94,172, 84, + 40, 20,199, 79,158, 60, 57,125,222,188,121,188,192,192, 64,228,230,230, 98,231,206,157,250,200,200,200,213,217,217,217,235,106, + 61,105,121,188,201, 43, 86,172, 96, 21, 10, 5,145,146,146, 82,205,185, 42, 46, 46, 30, 25, 18, 18, 34, 74, 77, 77,229,156, 43, + 14, 28, 56,112,248,119,161,190, 22,180,252, 10,241,148, 83,203, 50, 85, 69, 88,213, 92,206,173,177, 12, 0,218, 26,219,227, 95, +166,192,170, 21,122, 35, 89,116,112,219,180,102,195,222,157, 1,145, 83, 95,104,211,142,128, 81,229, 84, 10, 44, 90,100, 9, 43, +187,150, 40,126,166,194,181,164, 84,232,141, 21,225, 15,183, 0, 0, 32, 0, 73, 68, 65, 84,100, 81,125,124, 6, 3,120,179,230, +254,217, 91,208,218,218, 26, 69, 69, 69,213, 28, 45, 11, 11, 11, 56, 59, 59,163,184,184, 24,161,161,161, 96, 89,246, 90, 3,110, +216,138, 9, 19, 38,124, 57, 99,198, 12,178,237,152, 73,120,118,243,202,115,174,149, 72, 36,130, 88, 44,134, 92, 46,199,253,251, +247, 25,150,101, 87, 52,160,142,111,145, 36, 25,247,243,207, 63,103, 5, 6, 6, 78,108,222,188,249,152, 73,147, 38,137, 35, 35, + 35,177, 98,197, 10,222,249,243,231,117, 81, 81, 81, 6,163,209, 56, 95,161, 80,236,108,240,140, 33,136,154,226,234, 47,115,214, + 34,174,254, 50,167, 76, 38,235,229,236,236, 28,182,121,243,102,139,236,236,108, 8,133, 66, 88, 90, 90, 34, 35, 35, 3, 43, 86, +172, 40, 53, 24, 12,175,253,197,243, 77, 40,145, 72,132,122,189, 30,251,247,239,135, 92, 46,239,153,157,157,157,193, 48,204,206, +143, 62,250,104,139,135,135, 71,167,251,247,239, 63,120,246,236,217,204,156,156,156,123,117,145, 88, 91, 91,247,180,183,183, 39, +110,220,184,129,233,211,167,107,103,205,154, 85, 25,115,197, 57, 87, 28, 56,112,224,240, 31, 84, 94, 4, 17, 89,223,242, 63, 17, +245, 78,246,156, 87,166,114,216,121,224,248,150, 81,239, 13, 80,135,133,135, 3,173, 38,128,239, 50, 24,160, 68,112,110,223, 27, +246,173,123, 32,254, 97, 54, 78, 92, 73, 84, 39,203,181, 91,242,202, 84, 53,231,219,171,119,182,237,162,162, 34,180,110,221, 26, +143,194,135,120, 69, 29,237,228,227, 99,179,213,167, 5,214,123,133,135,135, 99,253,250,245,207,146,147,147, 55,180,111,223,126, + 65,125,156,113,113,113,203, 50, 51, 51,187, 45, 89,178,228,236,210,172, 98, 20, 44,223,142,226,185, 19,144, 61,160, 11, 44, 44, + 44, 96,103,103,135,210,210, 82, 92,190,124, 25,241,241,241,103,213,106,117,183,184,184,184,101,245,113,178, 44,123,211,195,195, + 35, 37, 32, 32,192,178,168,168,104,243,132, 9, 19,196,165,165,165,200,207,207,199,147, 39, 79,112,235,214,173,243, 90,173,214, +171, 1,209, 82,201,201, 48, 76,165,184,122, 81,156, 85,241,162, 56, 37, 18,201,194, 19, 39, 78, 88,144, 36, 9,161, 80,136,102, +205,154, 33, 51, 51, 19,203,151, 47, 47, 85,169, 84,175, 41,149, 74,115, 7,232,172,179,222, 25,134,129,193, 96, 0,203,178, 16, + 8, 4,197, 0,144,147,147,115, 47, 53, 53,117,192,169, 83,167,100,143, 30, 61,234, 87,135,184,170,228,204,207,207,143,120,252, +248, 49, 36, 18, 9,102,205,154, 37, 88,189,122,245, 15,155, 55,111, 86,135,132,132,208, 3, 7, 14,220, 22, 22, 22,214, 81,165, + 82,245, 53, 67, 92,253, 47,207, 90,207,113,114,156, 28, 39,199,249, 79,227,252, 79,161, 94, 7, 43, 41, 9, 58,160,100,142,135, +135,229,178,181, 59, 14,238,248,225,232,177, 17, 83, 70,191,205,243,237, 18,132,180,236,147,184, 28,125,209, 80, 80,194,158, 40, +209, 82,211,147,146, 74, 26,236,251,207,227,193,176,100,233, 88, 30, 0,240,249, 48,124, 54,116,104,132,151,151, 87,159, 97,222, +185,244,244, 89,229,206,214,142,173, 99,233,136,136,136,163, 66,161,112, 87, 90, 90, 90,177, 92, 46,111, 48, 19,241,241,241,183, + 1,188, 78, 81, 84,223, 5, 11, 22,124, 61,196,205, 53, 96, 68,207,126,224,243,249,136,138,138,194,211,167, 79, 35, 73,146, 92, + 20, 23, 23,119,217,156, 66,249,245,215, 95,179, 0,160,172,172,108, 69,251,246,237, 5, 73, 73, 73,120,244,232, 17,146,147,147, + 97, 52, 26, 31,202,229,242, 70, 5,196,137, 68,162, 91, 4, 65, 36,190, 72,206,170,120, 81,156, 42,149,106,245,202,149, 43, 95, + 93,182,108,153,208,210,210, 18,113,113,113, 88,182,108, 89,169, 90,173,110,140,184,170, 23, 44,203, 66,175,215, 55,170,231,103, + 45, 88,228,237,237,221,113,229,202,149,237, 43, 98,185, 56,231,138, 3, 7, 14, 28, 56,252,123, 4,214,159, 66,171,164, 0,192, +123,221, 60, 44,221, 87,111,255,105,143, 88,192,244, 81,105,201,171, 42, 13, 57, 37, 46,169, 36,197,220,131,173,252, 14,252,234, +107,148,176,182,182,150,100, 58,225,153,105, 77,102, 14,160, 84, 42,215, 54, 37, 51,209,209,209,151, 1,116,103, 89,118,196, 25, +130,248, 12, 72, 5,203,178,171,227,226,226, 78, 52,134,199,223,223,191,117,105,105,233, 15, 26,141,166, 27,195, 48,130, 75,151, + 46, 65,173, 86, 35, 41, 41, 73,197, 48, 76,104, 99,211,149,150,150,150,248,162, 57, 95, 70, 58,229,114,121,212,233,211,167, 7, + 18, 4,113, 97,209,162, 69,194,229,203,151,191, 80,113,101, 99, 99, 83,150,157,157,253, 68,173, 86,219,230,228,228,104,109,108, +108,202,210,211,211,155, 66,245,176,184,184,184,203, 39,159,124,178,124,193,130, 5, 11,191,254,250,107,154,139,185,226,192,129, + 3, 7, 14,255,122, 4, 6,218, 73,204,220,213, 44, 11,241,243,201,208, 47,158, 8,118,241, 68,176,159, 79,134,254, 69,112, 54, + 18,213, 56, 59,116,232,112,216,206,206,206, 64,211,180,134, 36,201, 50,138,162,138,121, 60, 94, 54, 73,146,211, 97,198, 48, 22, +255,102, 78, 0,112,116,116,244,243,244,244, 60, 44,147,201,122,189,136,242,172, 10, 39, 39,167, 87, 93, 93, 93,143, 56, 59, 59, +247,123, 65,156,254,175,189,246,218, 99,177, 88,124,221,220, 23,134,255,207,115,137,227,228, 56, 57, 78,142,147,227,228, 0,238, + 68,225, 56,255,165,156, 68, 19,196, 21, 87,158, 28, 39,199,201,113,114,156,156,192,122,105, 32,185, 34,224,240, 31, 0, 11,174, + 89,144, 3, 7, 14, 28, 56,252,131, 64,212,163, 66, 27, 51, 83,118, 83,148,236, 29,142,147,227,228, 56, 57, 78,142,147,227,228, + 56,255,231, 56, 27,226,190, 3, 14, 47, 69,120,113,156, 28, 39,199,201,113,114,156, 28, 39,199,249,191,199,249,159, 2,215, 68, +200,129, 3, 7, 14, 28, 56,112,224,240,130,209,232,192, 96,127,127,255,118, 0, 16, 21, 21,245,240, 37,166,235, 99,153, 76, 54, +165,107,215,174, 30, 52, 77,147, 69, 69, 69,203, 46, 93,186,180,172,182, 29,187,118,237, 26,253,234,171,175,186, 95,188,120, 81, + 11,252, 57,255,160,233,219,104, 52,102,197,196,196,248,113, 85,253,247,192,201,201, 41, 76, 36, 18,181, 42, 31, 96,148,133,129, + 49,194,200,176, 48, 26, 25,232,141, 44,116, 90,117,186,182,172,120,112,147,184,189, 71,180, 52, 26,153, 16, 22,236, 14,130, 37, +166,179, 4,187,131, 96,137,143, 88,146,216, 65, 48,236, 52,240, 12,223,192,192, 91,192, 99,248, 75,149, 73,161,153,255,133,242, + 12, 14, 14, 38,255,226,255,107,157,127,170, 91,183,110,167, 69, 34, 81,219,186,254, 87, 86, 86,166, 76, 72, 72, 8,250, 47,159, +171,142,142,142,125, 73,146,220, 10,192,171,198,166,123, 0,230, 40,149,202, 63,254,234, 49,252,197, 98,158, 29, 69, 77,227, 19, +196,167, 0,160,103,217,181,249, 70,227,174, 40,149,234, 31, 19, 67,104,111,111,127,153,162,168,246,165,101,101,165,207, 74, 74, +220,165, 82,105,138,216, 66, 34, 49, 26,140, 15,158, 60,201,235,203,221,213, 56,112,120, 65, 2,203,199,199,167, 3,128, 64,130, + 32, 2, 89,150,237,219,190,125,123,199,178,178, 50, 24,141,198, 28,130, 32, 46,179, 44,123, 9,192,165,216,216,216,228, 23,145, + 32,146, 36,215,109,220,184,113,254,172, 89,179, 42, 69,210,157, 59,119,208,165, 75,151, 90,247,167, 40,202,117,205,154, 53,205, + 50, 50, 50, 64,211, 52, 4, 2, 65,229,135,162, 40,244,232,209,163, 81,199,111,222,188,185,165,131,131,195, 50,130, 32, 70,146, + 36, 73, 53,180, 63,195, 48, 70,150,101,143,230,230,230,126, 85, 80, 80, 80,210,152, 99,249,249,118,209, 3, 68, 29,199, 96,141, +209, 49,183,249,245,253,191, 67,135, 14,209, 60, 30,207,181,170,160, 52,161,234,114,213,223, 70,163, 49,235,238,221,187,126,230, +150,133,200,194, 98, 33, 65,242, 6,130,101, 58,149,147,145,247, 88,198,112, 65, 93, 86,182,206,156,252, 10,133,194, 86, 49,177, +177,237,239,222, 79,133,123,155,150,208,234, 12,208,104,245, 56,121, 33, 10,222, 30,110, 24, 54,100, 80,147,207, 21, 3, 67, 4, + 47,253,120, 92,255,213, 91, 15,249,127, 54,107,140,116,245,214, 67,126,159,205, 26, 99,185,122,219, 33,191,165,179,199, 90,174, +220,122,208,111,233,236,177,205, 86,109, 61,168, 5, 48,185, 41,199,152,212,185,101, 41,105, 52, 8,107,173,123,138,167,217,123, + 39, 67,242,119, 92,184,171, 87,175,238,160,211,233,146, 38,142,242, 91,209,169,157, 67,110,109,251, 20, 21,229, 58, 60,186, 23, +253, 5,248,180,135, 71,192,103,245, 94,159, 52, 77,183,185,124,249,114,123,211, 72,251, 70,163, 17, 70,163, 17, 6,131, 1, 90, +173, 22,239,188,243, 14,239, 69,164,219,215,215,119, 18,203,178,171,202, 79, 75, 98,101, 76, 76,204,182,191, 64, 39,229,241,120, +159, 8, 4,130, 64,131,193,224, 1, 0,124, 62, 63, 73,163,209, 92, 50, 24, 12, 27,129, 63,199,215, 51,243,222,179, 41, 50, 50, +210,211,210,210, 18, 58,157,174,114, 98,120,138,162, 58,117,239,222,125, 59,128,246,127, 53,255,118, 20, 53,173, 87,159, 62,155, + 39,205,157, 75, 21, 68, 69, 97,235,158, 61,155, 80, 80, 0, 0,219, 27,250,175,139,139, 75, 52, 65, 16,174,141, 57, 30,203,178, + 89,114,185,188, 81, 47,152, 20, 69,181,127,156,161,112,104,221,210, 25,207, 74, 74, 96, 97, 33,145, 68,221, 73,115,240,245,106, +205, 61, 49, 57,112,120, 17, 2,203,199,199,231, 12,128,192, 78,157, 58,137, 7, 13, 26, 4, 31, 31, 31,180,106,213, 10, 34,145, + 8, 0,240,244,233, 83,199,187,119,239,190, 23, 23, 23,247,222,141, 27, 55, 0, 64, 5,224,106,108,108,108,173,110,196,128,161, +125,102,137,164,194,205, 0,144, 39,127,162,204, 74,201,221,170, 84, 42,215, 1,168,250, 70,237, 62,126,252,248,121,179,103,207, +198,233,211,167,113,232,208, 33,104, 52, 26, 20, 21,213, 61,197,161,209,104,204, 26, 63,126, 60, 47, 57, 57,217, 80,151,131,213, +152, 2,113,112,112, 88, 54,106,212,168,185,158,158,158,149,211,186,232,245,250,202,239,130,130, 2,204,155, 55,207,116,243, 2, +195, 48, 8, 15, 15,159,245,233,167,159,162,160,160,224,147,218, 56, 7,246,117,143,230, 17,132, 43,243,167, 40,203,186,112, 37, +213, 15, 32,168,168,232,120,162,198, 13, 17, 0, 16,224,223,173, 65,113,199,227,241, 92, 99, 99, 99, 29,104,154, 54, 43,111, 12, +195,192,199,199,199,172,125,157,157,157,131, 40, 30,125,104,196,232, 15,155,119,243,241,225,187, 58,203,160, 55, 24,144,154,150, + 17, 16, 31, 23,211,237,220,169,159,167,136, 68,162, 49, 10,133,226, 98,125, 60,122, 35,131,248,196,135, 56,127, 53, 22,111,210, + 34,148,169,181, 40, 41,211,226,135, 95,175, 33, 43,183,168,201, 39,110, 64, 64,128, 75,158, 65,219,125,246,228,183, 36,223,124, +123, 64, 50,123,242, 91, 88,191,227,135,202,239, 89, 31, 14,199,186,111, 15, 72,103,127, 56, 28, 91,119,238,235,233, 22, 16,224, + 18, 25, 25, 89,231,180, 0,117,213, 17,105, 52, 8,247,220,149, 83, 0,144,183,115, 39,116, 57, 57,112,254,234, 43, 0,192, 84, + 47, 87, 97, 99,210,236,229,229, 85, 41,136,235, 21,142, 6, 67, 86, 98, 98,162, 95, 67,226,202, 96, 48,176, 60, 30,239,139, 43, +191, 47, 11,237, 21,208,161, 90, 97, 38, 63, 72,110, 22,252,229, 87,239, 30, 57, 91,194,190,247,154,101, 82, 82,228,234,122, 69, + 22,195, 48,164, 70,163,193,131, 7, 15,106, 29,101,159, 36, 73, 99, 83,234, 41, 48, 48, 80, 88, 90, 90,122, 80, 42,149,118, 45, + 45, 45,157,196, 48,204,151, 17, 17, 17,142, 36, 73, 98,224,192,129, 95,250,250,250,166, 9,133,194,111,213,106,117,156, 84, 42, + 29,115,233,210, 37,141,153,212,125, 45, 45, 45,127,248,229,151, 95,154,251,248,248,144,249,249,249,112,115,115,195,211,167, 79, + 3, 46, 95,190,236,251,225,135, 31,126, 88, 82, 82, 50, 30,192,229, 70, 36,183,163, 68, 34, 97, 39, 76,152, 64, 24,141,127,102, +247,251,239,191,135,111,219,156,182,131,186,137,202,212, 58,182,232, 74,130,232, 35,150,100,175,166,167, 23, 53,250, 4,230, 19, +196,167,147,230,206,165,104,165, 18,146,228,100, 12, 37, 8,222,238,114, 55,171, 65,129, 69, 16,132,235,178, 61,115, 28, 4, 2, + 1,244,122,125,229,135,101, 0,176, 0,203, 0, 44,195,130,101, 1,176, 4, 24, 35,131,245, 75,246, 52,249, 26,179,144, 72, 44, + 28, 29,157,114,196, 22, 22, 22, 44, 56,112,224,240, 34, 29,172,215, 35, 34, 34, 96, 48, 24, 96,105,105, 9,138,170,254,188,183, +177,177, 65,223,190,125,209,189,123,119, 12, 28, 56, 16,247,239,223, 23,127,253,245,215,117,218, 17, 99,231, 15, 69,139,246,142, + 38, 17, 33,187,114, 58, 54,228,187,101,199,236,148, 74,101,213,185, 6, 39, 77,157, 58,149,120,242,228, 9, 70,142, 28,121, 89, +163,209, 12, 7, 80, 92, 95, 6, 18, 18, 18,252, 18, 18, 18, 94, 88,129, 16, 4, 49, 82, 38,147,225,240,225,195,208,106,181,207, +109,183,178,178, 66, 98, 98, 98,213,183, 61,116,235,214,141, 34, 8, 98, 36,128, 90, 5, 22, 73, 16,174,191, 71, 60,172,156,167, +113,212,176,110,244,160,190,238, 57,207,212,122, 22, 0,177,116,233,210, 74,113,197,178, 44,150, 47, 95,110,118,122,105,154,198, +189,123,247, 64, 81, 20, 82,250,116, 0, 0,116,142,205, 4, 69, 81,136,239,234, 12, 0,232,249,160, 0, 60, 30, 15, 82,169,212, + 92,113,213,207, 81,230,250,203,146,175, 66, 44,213,122, 22,191,133, 71, 34, 67,113, 30, 44,203, 66,230, 96,131, 94,190, 62,124, +143, 46, 93, 29,246,110, 95,247, 11,128,225, 10,133, 34,162,110,177, 96,132, 71,135, 54,216,255,203,101,172,250, 54, 20, 79,138, +213, 40, 41, 43, 47,215,129, 61, 61,241,253,250,166,213, 19, 69, 81,235, 58,181,105,211, 98,255,145, 48,244,234, 17,128,253, 71, +206,162,103,143, 0,236, 63, 90,190,124,224,104, 24, 94,233,217, 29, 7,142,134,161,179, 71,251,150, 79, 30, 23,173, 3, 48,186, + 78,247,162,102, 29, 13, 47,175, 35, 94,161,145, 48,213,205,227,233,211,203,203,167, 66, 96, 53,250, 98,171, 16,196,102,184,198, + 13, 58, 87, 6,131, 1,185,185,185, 68, 97, 97, 33,107,109,109,253,110, 85,145,101, 18, 87, 63,255, 94, 12, 85,242, 86,226,167, +159, 46, 49,239,191, 31,152,148, 20,185,218, 3,229,205, 93,207, 65,167,211,165,189,250,234,171, 44, 0,104,181, 90, 23,129, 64, + 64,215, 16, 96,206,189,122,245,122, 78,160, 53,212,116, 88, 90, 90,122,240,232,209,163, 35, 28, 29, 29, 49,124,248,240,115,158, +158,158, 2, 11, 11, 11,252,254,251,239,112,117,117,181,179,178,178, 58, 19, 18, 18,130, 13, 27, 54,180, 60,119,238,220, 33, 0, + 35,204, 40,202,129, 65, 65, 65,135, 79,159, 62, 45,162,105, 26, 42,149, 10,137,137,137,104,214,172, 25, 4, 2, 1,134, 15, 31, + 78,245,234,213,203, 54, 40, 40,232, 88,114,114,242, 24, 0, 23,204,173, 35,149, 74,197, 46, 89,178, 4, 22, 22, 22,144, 72, 36, +149, 31,177,192, 72,236, 8,110, 35,158,187, 38, 91,188,244,211,247,215,236,222,123,234, 34,195,176, 95,102,102, 22, 23, 54,246, + 60, 40,136,138,130, 36, 57, 25,234,232,232, 70,159, 67,174, 84, 23, 44, 94,176,216, 36,122, 33, 16, 8,170, 57,247,166,223, 52, + 77,163, 91,183,110, 13,242,117,234,212,105, 39, 69, 81,246,213,210, 87, 80, 64,125,241,249,103,134,219,137,247, 37,122, 3, 36, +106,173, 30, 43,151,127,105,160, 72,138,242,242,242, 58,193,178,108,222,221,187,119, 63,226, 30,159, 28, 56, 52, 93, 96, 65, 42, +149, 34, 42, 42, 10, 4, 65,192,210,210, 18, 86, 86, 86,104,214,172, 25,138,139,139,113,247,238, 93,220,187,119, 15,105,105,105, + 32, 73, 18,238,238,238,192,243,163,135, 87,118,181, 60,184,254, 52, 68, 82, 33, 8, 2,240, 31,212, 21,126,253,189,113,231, 86, +202,156,168,115,216,163, 84, 42, 31, 0,224,117,238,220,249,195, 30, 61,122, 96,195,134, 13,208,104, 52, 27,235, 16, 87,207,117, +223,156,246, 22,239, 10,205, 35, 91,232, 12, 76,230,174, 95, 12,175,120,123,123, 71,251,248,248,184,221,190,125, 91,111,114,179, +106, 54,147,213,136,203,170,198,153,159,159, 15,134, 97,204,118,133, 10, 11,107,189,199,222,169,233, 74,153,176, 50,100,131,117, + 73, 81, 46, 86,172,253, 17,122,189, 30,243,231,207, 7,195, 48, 96, 24, 6, 70,163, 17, 5, 5, 5,229, 35, 59, 53,144,119, 83, +158, 40,138,170, 38,128, 27, 90,174,143,211,206,206, 78, 66, 82,252, 67, 11,150,174,176, 76, 72,206,194,233,240, 72,176, 44,139, +147,187,191, 4, 0, 12,159,186, 28,114,101, 30,122,249,118,194,196,105,159, 88,110, 10, 89,122,200,206,206,174,109,126,126,126, +105,109,156,122, 3,131,208,179, 55,160,124,242, 12,227, 71,244,135, 70,171, 71,110,142, 18,251,190,253, 6, 51, 62, 56,142,230, + 82,177,147,216,190, 77,114,213, 50,178,180,180,164,212,106,245,229, 7, 15, 30, 76,174, 43,157,122,189,254,245, 37,115,167, 96, +211,158, 80,120,185, 59,226,244,249,155,240,239,220, 10,103,194, 35,209,179,139, 27,206, 94,138, 70, 47,111,119, 92,188,113, 7, +115, 62,122, 31, 11,231, 92,126,189, 81,117,180,122,131,117, 73,113, 46,126, 91,125, 0,185,219,182, 33,125,214, 44,248, 87,156, + 19, 81, 36, 9,218,197, 5,176,106,184, 60,107,195,189,123,247,160,209, 60,111,212, 8,133, 66,116,234,212,169, 94, 78,147,115, +149,147,147, 67,228,228,228, 64, 34,145, 16, 73,137,119,140, 30, 94,157,223, 53, 62, 61,178, 7, 0,202,157,171, 98,148,221,223, + 2,213,131,173,160, 11,111,147,187,151, 79,211, 78,253,114, 87, 82,149,107,244, 78,141, 23,149,202,242,233,222,189,251,189,171, + 87,175,118,172,226, 2,195, 96, 48,208, 6,131,161,189,169,217,208, 96, 48, 64,163,209, 96,204,152, 49, 84,125,121, 23,139,197, + 93, 29, 29, 29,113,235,214, 45, 4, 7, 7, 11,188,188,188,240,224,193, 3,144, 36,137, 73,147, 38,193,211,211, 19,121,121,121, +240,247,247,199,149, 43, 87,186,153, 81,158,150, 18,137,100,239,169, 83,167, 68, 36, 73,162,164,164, 4, 12,195,160,119,239,222, + 32, 8, 2,183,111,223,198,231,159,127,142,227,199,143,227,151, 95,126, 17,251,250,250,238, 45, 43, 43,243, 0, 80, 98, 70, 29, +177, 26,141,134, 21,137, 68, 16,137, 68, 16, 10,133, 16, 10,133,160,105, 26, 42, 45,133,105, 95,165,105,248, 66, 41,211,181,139, +123,219, 25, 83, 71,144, 43,214,236, 11, 7,112,210,220,122, 7,202, 99,174,182,125,247,221,150, 55, 42, 58, 24, 29, 45, 41, 97, +244, 44,187,214,156,107, 19, 0, 20,108, 34,108,188, 8,156,219, 23,141,225,211,251,130,230, 11, 64,243,105, 8,104, 1,248, 21, +191,105, 62, 13, 1, 95, 8,202, 78,221, 32, 39,159,207,183,139,141,141,181,174,122,127, 48, 24, 12, 73,179,102,205,114, 31, 49, +108,168,227,145,227,167,169,113,163,134, 27,157, 28, 29,242, 51, 51,211, 31, 2,176,246,245,245,101, 27,123,206, 55, 1, 28,231, +255, 38,103,157, 96, 89,214, 31, 64,213,151, 1, 45, 0,129,233,177, 93,113,111,179,173,177, 30, 0,242, 42,190,237,235, 88,206, + 7,112, 23,128, 71,197, 58, 35,128, 72,130, 32, 10,254,106,154, 77, 2,171,234, 5, 67,212,146, 49, 20, 23, 23,163,184,184, 24, +153,153,153,216,177, 99, 7,248,124, 62,120, 60, 30,120, 60, 30, 72,146,172,140, 87,168, 11,127,156,190,186, 21,192, 86, 31, 31, + 31,254,119, 55, 66,207, 44,221, 63,103, 64,247, 65,190, 84,244,249,219,239, 2, 88, 9,224,245, 9, 19, 38,216, 1,192,129, 3, + 7,242, 1,252,110,182,139,195, 35, 91,108,217,252, 99,203,217,115,198,153, 4,133,235,158, 61,123,154,103,101,101, 85,123,163, +163,105,186,193,184, 44,150,101,143, 62,124,248,112,174, 76, 38,171,124,144, 84,109, 38, 52, 24, 12, 16,137, 68,149, 98, 72,163, +209,224,224,193,131, 6,150,101,143,214,195,137,228,196, 63,240, 32,241, 34,140, 70,166,154,152, 82,171,213, 8, 14, 14,174,116, +175, 0, 96,122,133, 83, 98, 46,234,115,174, 40,138,194, 85,247,114, 37, 48, 36,143,125, 46, 86,171, 38,248, 2,209,252, 33,111, +191,111, 99, 96,169, 74,113, 85,158,135,114,113, 33,224,243, 32, 22,242,241, 32, 37, 19,110, 46,190, 24,240,218, 91,205, 47,156, + 57, 54, 31, 64,173,157, 16,244, 70, 6, 67,250,249,226,219,195, 23, 81,252, 76,141,226,194,167,200,207,188,135,164,132, 72, 8, + 4, 2,220,188,121,211,178, 89, 51,107,203, 54,109,220, 96, 52, 50,184,122, 51, 26, 22, 22, 98, 28, 62,244,147,155, 70,167, 71, +198,227,180,201,117, 8, 91, 94, 47, 63, 15, 20,231,103,128,199,227,161,151, 79, 91,240,120, 60,244,246,109, 15,138,162,208,199, +191, 35, 40,138, 66, 96,119, 79,180,109,219, 22, 12,195,240, 26,184,120,145,124,231, 15, 36,223,189, 8,150, 97, 96,100,202,155, +127, 89, 0, 58,165,242,249,124,101,103,131,181,114,104,202, 77, 2,139, 22, 45, 42, 84, 40, 20,186, 90,156, 67,250,248,241,227, +214,245, 77,132, 77,211,180, 7,143,199, 75,122,250,244, 41, 99, 97, 97, 65, 26,141, 6,198,195,171, 51,117,229,247,101,149,115, + 79, 6, 47, 95, 22,250,222,107, 86,239,254,184,239, 20, 75,219,247, 38, 8, 74,104,152,242,229, 46, 1,248,180, 7,160, 51,231, +165,129,212,104, 52,184,127,255,126,131,147,114,179, 44, 91,239, 9, 85, 90, 90, 58,113,248,240,225,231, 62,250,232, 35,145,233, +229,133,199,227, 85,138,254, 71,143, 30,129, 36, 73,236,222,189, 27, 26,141,166,193, 19,159,199,227,205, 61,118,236, 88, 51,129, + 64, 80, 41,174, 88,150, 5, 69, 81,184,119,239, 30,214,175, 95,143, 9, 19, 38, 32, 35, 35, 3, 50,153, 12,243,231,207,151,174, + 89,179,102,174, 78,167, 51,199, 22, 78,208,106,181,126, 98,177, 24, 66,161, 16, 38,161, 5, 0, 49,143, 28,239,164,165,165,117, +105,217, 82,226,228,230,121,251,215,126,125,186,122,219,218, 90,247, 76, 77, 47, 58,217,152,250,207,208,235,119, 43, 74, 75, 63, + 31,185,119,175,195,229, 95,127,101,238,252,250,107, 22,207,104,220,101,238,255,165,207, 90,162, 36,153,135,192,192, 64, 92,186, +116, 25, 67,135, 14,133,145,166,193, 8, 4, 96, 4, 2,176, 52, 13, 8, 4, 32, 4, 2,176, 22, 22,102,157,146, 20, 69, 33, 59, + 59,187,218,186,169, 83,167,166,191,255,254,251, 14, 0, 11,133, 66,206,126, 50,119,182, 60, 63, 63,159,117,116,116,228,108, 9, + 14, 47, 85, 71,213,163, 69,236, 9,130, 56, 93,229,222, 51,212,180,188,120,241,226,207, 66, 66, 66, 18, 9,130, 56, 93,117,189, +105,191, 10, 67,226,116,109,203, 21,255,181, 93,178,100, 73,231, 53,107,214,172,238,217,179,231,225,235,215,175,167, 2,120, 97, + 2,139,168,200,152, 89,243,215,213,246,144,110, 72, 96,153, 16, 27, 27,171,119,118,118,254,238, 94,116,234,128,142,126,237, 33, +150, 8, 7, 1,216, 42, 20, 10, 63, 25, 63,126, 60,110,222,188,137, 59,119,238,124,143, 70,140,204,173, 51, 48,153,179,231,140, +131,206,192,100,154, 28,170,249,243,231,211, 87,175, 94,213,213,229, 96,213,197,149,155,155,251, 85,100,100, 36,234, 11,114,127, +239,189,247,170, 62,140, 42,131,220,235, 60, 99, 24, 22, 58,157, 30,165,165,170,114, 97, 85,241,240, 54, 26,141, 40, 45, 45,197, +168, 81,163, 42, 69, 23,195, 48,200,205,205,109, 82,101,146, 36,217, 24,231,170,118, 14,138, 26,220,213,219,135, 31,126, 61,161, +218,195,245,173,105, 43, 33,160,203,197,149, 88, 68, 67, 44,228, 35, 83,145,131, 78, 30, 94,244,165,243,167, 7,215, 41,176, 12, + 70,108,253,233, 60, 64, 16, 8, 61, 29, 14, 63, 55, 11, 44,251,124, 17, 70,142, 28, 9,129, 64,132, 99,199,142, 98,221,246,253, +152,222,170, 21, 88, 0,221,253,186, 97,237,206,195, 88,177,124, 57,121,244, 72,104,159,134,210,203,231,243, 65, 81, 84,229, 67, +187,230, 55, 69, 81, 13,138,132,202, 58,210,235, 81, 86,170,130,145, 97,192, 48, 44, 88,134, 1, 88, 22, 46,171, 86,193,101,213, + 42, 68,145,229, 29,248, 60, 75, 75,161, 82,169,128,126, 93, 27, 45,174,180, 90, 45, 20, 10,133, 46, 33, 33,161,182, 39, 85,142, + 86,171,173, 55,189,159,125,246, 89,242,234,213,171, 61,108,108,108,146, 18, 18,226,245, 93,187,122,243,107,198, 96,117,104,223, +161, 40,120,249,178,208,113, 31,188,249,238,206,207, 71, 27, 62,250,234, 7,158, 41,208, 61,244,108,112,195,215,147, 78,151, 54, +112,224, 64,179,194,110, 84, 42, 85,118, 93,219, 76, 1,237, 29, 58,116, 16,246,239,223, 31,151, 47, 95,198,170, 85,171, 24,131, +193,144, 15, 0,189,122,245,178, 95,177, 98, 5,113,247,238, 93, 88, 91, 91, 35, 55, 55,119,191,175,175,239,138,250, 2,223, 5, + 2, 65, 63,127,127,127, 82,163,209, 84,190,148,144, 36,137,123,247,238, 97,205,154, 53, 24, 51,102, 12, 58,116,232, 80,121,109, + 5, 5, 5,241,183,108,217,210,207, 28,129, 69,146,228,156, 1, 3, 6,124,131,242, 94,132, 85,111,114, 73, 0, 22, 2, 64, 70, +198,147,236,152,152,228,196, 1,129, 62,126,109,221, 92,100,145, 49,143,235,229,116,112,112, 88, 66,146,228,123, 0, 40, 0,153, +133, 36,217,206,222,222,222,177,239,208,161,120, 70, 16,212,174,179,103, 9,158, 88, 44, 69,102,166, 89, 77,141, 79,248,143, 32, +243, 17,131,230,211,152,240,233, 48,156, 62,125, 26, 51,131,223,175,112,178,202, 29, 44, 62,159, 6,205, 23, 64, 96,223,180,142, +137, 21,247, 38,194,202,170, 25, 0,160, 89,179,102,166,251, 38, 1,128, 37, 73,146, 11,201,226,240,178,208,160, 22, 49, 9,164, +154, 66, 43, 36, 36,100,104,205,117, 85,197, 84,109,191,171,254,119,205,154, 53,171,171,112,151,189,136,204,240, 94, 84,169,232, +245,245,207,209, 28, 20, 20, 52,203,210,210,114,179,105,249,241, 53, 57, 30, 95,147,195,163,163, 87,111, 31,111,191,194, 49, 99, +198,192,214,214, 22, 11, 23, 46,100, 1,236,109,204,177,119,253, 98,120,165,234,114,124,124,188, 95,124,124,124,147,242, 81, 80, + 80, 80, 82, 17,172,254,201, 11,180, 54,161,215,233, 81, 90,166,134, 78,167,131, 94,111,132,193, 96,132,175,167, 37,126,216,181, + 8, 90,173, 14,122, 99,249,186,114,167,204, 8, 33,173, 65,223,238,174,122, 16,164,234,242,205, 12,171,250,248,189, 98, 50, 64, + 81, 20, 18,188, 93,106,117,174, 6, 41,116,102, 11, 45,150, 49,118,116,116,116, 64,198,217, 91,229,111,204, 22, 34,132, 29, 88, + 1,137, 69,249,155,252,235, 19, 62, 43, 23, 89, 66, 26, 58,157, 22, 14,142,173, 97, 48,234, 59,214,197,103,208,235,180, 93,219, +187,192,218, 82,140,248,168, 27,248,228,227,201,152, 52,233, 67,208, 34, 75, 92,186,116, 17, 25,138, 92, 60,202, 42,192,199, 95, +125, 11,189,222, 8,157,193, 8,189,129,193,166,125,167,161, 51, 54,172,140,104,154,198,252,249,243,197,117,109, 63,124,248,176, +202, 44,129,197, 86,136,224, 50, 21, 52,106, 13,180,186,242,186, 48,182,225, 99,229,231,239, 67,175,215, 67, 53,186, 39,116,122, + 61,140,115, 70, 64,167,211, 33,211,130, 71,246,246,149,233, 65,144,170,107,209,114, 43,115, 5, 86, 93,233, 97, 89,182,214,166, +195,186, 68, 86,215,174,222, 73, 19, 70,249,133, 92,187, 30,149,119,237,122,212,115,251,181,233,224,151,242,209,202,195, 75,204, +233, 69, 88,205,198,169,210, 92,248, 23,207,251, 47, 35, 34, 34, 28,165, 82, 41,146,147,147, 65, 81, 20, 8,130,120, 18, 27, 27, +235, 8, 0,111,188,241, 70, 62,159,207,183,165, 40, 10,115,231,206, 5, 69, 81,246, 51,103,206,252, 2, 64,157, 2,203, 96, 48, +120, 88, 90, 90,162,164,164,164,178, 28, 5, 2, 1, 22, 47, 94,140,113,227,198, 85,138, 43,129, 64,128,253,251,247,195,215,215, + 23, 90,173,214,195,156,244,202,229,242, 40, 0,175,152, 33, 64,202,227,242, 24,166,193, 19,139, 36,201,137,241,211,167,183, 83, + 71, 70, 98, 6,195,120,118,236,216, 17,106,245,159, 77,119,109,219,182,109,153,149,149,149, 45,147,201,126, 2,240,173, 82,169, +140,171,215,193, 42,109, 1,117,154, 0, 70,154,198,225,147, 39, 49,110,220, 56, 8, 4,194, 74,231, 10, 52, 13, 66, 32, 0, 73, +211, 48, 82,194, 70,215, 25,195, 48, 40, 46, 46,166,246,239,223,223,198,203,203,139, 96, 1,116,234,228, 73,156,254,237,183,150, + 82,169, 52,213,198,198, 70, 7, 14, 28,254, 78, 5, 86, 69, 32,189, 8,174,197,139, 23,127, 6,128, 93,188,120,241,103,166,229, +144,144, 16, 21, 0,197, 63, 70, 96, 53,228, 96,109,216,176,161,206,161, 22, 76, 15,151, 45, 91,182,224,135, 31,126,216, 0, 32, +165, 49,199,158, 58,156,119,203, 66, 76,203,202, 84, 58,229,238,147,134,238, 93,187,118,141,238,217,179,103,155,232,232,232, 58, + 29,172,186,198,198,122, 25,195, 52,176, 44, 11,173, 78,143,178, 50, 21,212, 90, 45,230, 45,218,110, 86,221,235,180, 37,188, 55, + 94,235, 43,110,200, 73, 52, 39, 6,171,161,166,193,234, 98,217, 0,147, 6,120, 86,166, 70,208,152,197,136,250,181, 92, 27,155, +196,149, 88,200,135, 72,192, 7, 73, 0, 68, 61,198,167, 94, 85, 60,236,211, 89,147,175,236,248,254, 7,215,183,250, 78,193,236, +217,179,193, 19, 88,160,185,173, 61, 12, 70, 22, 45,157, 29,240, 40,171, 0,199,182, 45,170,240,134, 89,244, 29, 27,140, 13,159, + 79,193,186,224,134,223,192, 41,138,194,182,109,219, 84, 53, 93,171,170, 78,150,185, 34,216,228, 50,170, 52, 90, 44, 88,242,173, +249,117, 52,248, 21,177,185,101, 91, 91,199, 9,115, 5, 88, 77,145, 85,225,138,212,217,232, 39,180, 5, 60,122, 15,249,252,239, +188, 25, 50, 12,131,223,126,251,237, 57,119,181,102, 29,154,235,182, 50, 12,131,244,244,116,220,185,115, 7, 61,123,246, 68, 81, + 81, 17,120, 0,230,223,190, 13,207,241,227,161,169, 8, 93, 16, 8, 4,152, 58,117,234,203,122,199, 46, 23, 88, 68,253, 21,229, +228,228,180,190, 83,167, 78,237, 82, 10, 10, 16, 19, 31,143,128,138,244, 92,189,122,181,170, 3,136,177, 99,199, 10, 82, 83, 83, + 63,188,119,239,222,135, 44,203,110,200,206,206,158, 95, 23,103,169, 69, 22, 28, 59, 11,177,119,205, 9,204, 90, 62, 1,246,157, + 68, 88,191,100,119,229,246,117,223, 5, 87,196, 97, 9, 32,146, 54, 62,107,197,197,197,188,111,214,175,239,218, 61,160,135,120, +220,132, 73,164,214,192, 96,229,215,155,169, 35,135, 14,216, 30, 56,240,163, 88, 36, 18, 37,113,143,120, 14,127, 39, 94,148,184, +170,233, 96,133,132,132, 36,134,132,132, 60,231,134,189, 84,129, 69, 81, 20,170,118, 89,174,237, 33,111, 78, 12,214,188,121,243, + 96,105,105, 89,235, 54,157, 78,199, 38, 36, 36,220, 85, 42,149,123,234,123,123,173, 11, 2, 62,233,184,225,155,125,174,179,231, +140, 99,128,242,222, 90,219,183,111,183, 54,197, 96, 85,141,195,106, 40, 6,203,193,193, 97,217,218,181,107,103,191,254,250,235, + 36, 73,146,213, 30,126,166, 97, 25,170,126,244,122, 61, 78,157, 58, 53, 59, 36, 36,164,206, 97, 26, 88,182,188,249,169,180, 76, + 5,181,166,252, 1,251,232, 78,168,185,103, 64,195,142, 67,133,115,213, 35,249,105,173,206,213, 89,199,242, 7,215,144,188,134, +185, 8,146, 74, 78, 75,207, 12,112,178,179, 70, 65,209, 51, 8, 43,154, 5, 77, 48,137, 43,177,144, 70,243,102, 82, 60,125,146, + 11, 62,159, 95,159, 59,146,158,171, 76,127,101,212,136, 33,231, 72,138, 39,170,186,129, 47,182,178, 56,127,237,118,243,156,130, + 50, 48, 85,242,201,176, 44,102,173, 48,207,196,228,243,249,152, 57,115,102,157, 2,231,228,201,147,170,198, 11, 44, 77,227,234, +168, 17, 78,102, 67, 14,150,185, 2,171, 38, 76,189, 11,105,154,246,168, 16, 95,102,163,107,215,174,191, 91, 88, 88,184,153,187, +191,185,131,142, 18, 4,177,188,127,255,254,171, 92, 93, 93, 29, 62,250,232, 35,130,199,227,193,207,207,207,110,224,192,129, 69, + 0,208,177, 99, 71, 75,211, 61,102,211,166, 77, 72, 74, 74,202, 35, 8, 98, 69,189,215,186, 64,112,175, 89,179,102,126,253,251, +247, 71, 81, 81, 17, 50, 50, 50, 32,149, 74,225,185,126, 61,110,207,152, 1,239,157, 59, 65,246,239, 95, 46, 48,133, 66,220,190, +125, 27, 66,161,240, 94, 85,215,168, 42,156,157,157,187,179,229, 65,230,189,241,103,179, 4, 11,224, 26, 65, 16,159, 42, 20,138, + 91,207,219, 82, 4, 89,254,162, 86,127, 69, 17, 4, 49,118,201,146, 37, 32,197, 98,200,122,246,132, 42, 37, 5, 58,157, 14, 61, +122,244,128,191,191,127,249, 53,219,163, 7, 40,138, 66,187,118,237, 96, 99, 99,131,227,199,143,143, 5, 80,167,192, 18, 20, 57, + 66,147, 41,196,196,137, 19, 65,211, 2, 64, 32,192,130, 5, 11,170,220,227, 4,160, 42,226,177, 24,163,192,156, 55,120,182,198, + 11, 0, 33, 20, 8,132, 19, 62,248,144,252,116,193, 39,140,222, 96, 96,120, 60, 62, 57,127,233,106,242,193,253, 59,194,210,210, + 82,146,104,204,219, 26, 7, 14, 47,193,193,170, 42,180,170,184, 80,117, 33,175,106, 92, 86, 93, 2,173,106, 76, 22, 0,205,139, + 72, 43,175,218,123, 89,117, 60,136,143,143,111,239,229,229,133,140,140,140,186,122,202,149,119, 97, 22,139,241,240,225, 67, 0, +120, 80,215,129, 46, 94,188,184, 21,192, 86,211,178, 76, 38,235,217,111,100,191,107,222,253,125, 16,186,241, 72,145, 82,169,244, +198,159, 99, 98, 17,206,206,206,227,248, 2,222,123,109, 59,183, 12, 52, 50,204,218,139,167,174, 45,171,139,187,102, 12,150,193, + 96,104,114, 12, 22, 65, 16, 35, 95,127,253,117,242,238,221,187, 24, 53,106, 20,126,252,241,199, 58, 11,111,220,184,113, 56,124, +248, 48, 6, 15, 30, 76,174, 89,179,166,206, 97, 26, 88, 22,208,235, 12, 40, 45, 83, 67,173,214,188,180, 19,239,175, 58, 87, 0, +192, 50,134, 11,183,227, 98,186,117,241,237,201, 79,203,204,134, 72,192,175, 38,176, 44,132, 52, 68,194,242,117, 78,246,205, 17, +121,253,146,206, 96,208, 55,212, 13, 62, 93,167,126,246,220, 32,141, 44, 65, 37, 15,234,221,165,121,173,142,231,146, 9,232,242, +243, 6,179, 4,214,247,223,127,175,170,203,189, 50,183, 12, 88, 22,149, 77,132,101,170, 23, 91, 71, 14, 14, 14,246, 14, 14, 14, + 59,172,173,173, 69,166,216,161,218,182, 55,107,214, 76, 84,159,195,213,144,184,170, 24, 23, 43,105,245,234,213,141, 18, 89, 2, +129,192,237,218,181,107,237, 77,113,129,245,125,107,181, 90,188,247,222,123,102,217,130, 49, 49, 49,123,187,117,235,246,200,222, +222,254,124,175, 94,189,132,119,239,222,197,202,149, 43, 9, 62,159,111,101,186, 46, 75, 74, 74,192,227,241, 80, 80, 80, 0,130, + 32, 38,198,196,196,156,173,143, 83,163,209, 68, 68, 68, 68,116, 27, 54,108, 24,149,148,148, 4, 30,143, 7,134, 97,160,233,209, + 3,222, 59,119,226,206, 39,159,160,111, 90, 26, 52,122, 61, 68, 34, 17,206,158, 61,171, 43, 43, 43,139,168, 39,239,187,111,220, +184,225, 37, 18,137,160,211,233,192, 48, 12, 72,146, 36, 40,138,234,227,229,229,181, 5,128,127,213,253, 91,183,182,119,240,243, +238,208,209,200, 48, 70,185, 34, 47,207, 12, 71, 8, 63,254,248, 35,122,244,232,129,192,192, 64,200,229,114,164,164,164, 96,200, +144, 33,149,251,196,199,199, 35, 54, 54, 22,109,219,182,109,216, 1,181,204,131,189,135,176, 50,222,138,230,211,160,121,229,194, +202,228, 92,209,124, 26, 52, 45,128, 80, 96, 86, 88, 0, 91,243,124, 52,197, 94, 73, 36, 22, 76,187,118,237,238, 62,120,248,200, + 19, 0,217,172,153,181,217,177,182, 28, 56,252, 37,143,184, 30,161, 84,245,114,168,178,156, 7,128,168, 88,206,171, 34,164,242, + 8,130,136, 98, 89,214,191,198,190,166,237,218, 26,223,166,237,241, 47, 34, 35,245,221, 40,135, 76,158, 60,121,231,171,175,190, + 58, 96,254,252,249,144, 74,165, 80, 42,149,149, 23,152, 64, 32, 64,139, 22, 45,160, 82,169,112,249,242,101, 20, 22, 22,134, 3, +152,102,238,129,149, 74,229,205,135,113, 15,158,244, 25,214,221,214,163,123, 71,235,172,228,172, 30, 74,165,242, 58, 0,194,197, +197,229,187,209,159,188,254, 65,208,219, 1,160, 5,124,100, 62,204,198,197, 83,215,234,228,170, 25,131,245, 87,198,198, 34, 73, +146, 34, 8, 2,163, 70,141, 50,107,255,209,163, 71,227,210,165, 75,168,175, 57,177,188,137, 80,135,178, 82, 21,202, 94,160,192, + 34, 8, 2, 70,163,177,210,185, 50,125, 6, 41,116, 32, 73,178, 82, 88,188,158,203,152,205,169, 46, 43, 91,119,229,194,201,169, + 29, 61,187,218,247,244,233,128, 7,169,153, 88,247,217,159, 77, 45, 11,166,143,198,254,195,167,224,236,100, 11,141,234, 25,194, +206,156, 42, 42, 46, 46, 94,215,212, 60,236, 63,113, 9, 0,240,202,216,234,125, 4, 70,205, 3, 16, 15,255, 0, 0, 32, 0, 73, + 68, 65, 84,221,100,222, 9,204,227, 97,210,164, 73,117, 58, 88,231,207,159, 87, 85,117, 34, 27,170,163,210, 82, 53,202, 84,170, + 23, 86, 71, 50,153,204,219,223,223,255,252,174, 93,187,108,237,236,236,160, 80, 40,170, 9, 44,153, 76,230,237,231,231,119,126, +215,174, 93,182,246,246,246,200,200,200, 48,123,136,144, 26,226, 10,121,121,121, 68, 65, 65, 1,211,188,121,243, 70,137, 44,146, + 36,161,209,104,144,148,148,100,238, 53, 98,246,160,163,110,110,110, 63,110,222,188, 89,248,248,241, 99,232,245,122,220,189,123, +247,185, 78, 8, 20, 69, 97,241,226,197, 88,186,116,233, 14, 0,173,234,227, 51, 24, 12, 27,199,143, 31, 63, 89, 46,151, 55,119, +116,116,132, 82,169, 4, 77,211, 96, 89, 22, 68, 80, 16, 94, 73, 77,133,206,104,132, 88, 44,198,253,251,247,177,103,207,158, 82, +157, 78,183,177, 54, 46,119,119,119, 1,128,246, 52, 77,227,253,247,223,175,182,237,192,129, 3,232,233, 81,224,103, 29, 64, 63, + 51,178,180,230, 25, 60,126, 39, 73,146,240,243,233,208,161, 79,207, 46,157, 19,239,166, 61, 82,228, 62,189,214, 64,246,245, 90, +173, 22,157, 58,117, 66, 84, 84, 20, 46, 92,184,128,254,253,251,163,111,223,190,136,136,136, 64,116,116, 52, 98, 99, 99, 65, 16, + 4,108,109,109, 77,113,172,245, 6,179,242,139,108,161, 83, 8, 1,154,254, 51,222,170, 34,230,138, 18, 8, 42,123, 20,178, 2, + 1, 24,129,121, 3, 16, 87, 21, 77, 21,105,209,108,218,184, 78, 40,145, 72,140, 0, 96, 41,149, 24,143, 28,216, 14, 91, 27, 27, + 13,219, 20,123,149, 3,135, 23,243,188,139,250, 59,254,251, 82, 4, 86,108,108,108, 42,128,129, 0,198, 94,190,124,121,195,188, +121,243,236,251,244,233,131,167, 79,159,162, 85,171, 86,144,201,100,136,142,142, 70,124,124,124, 62,203,178,243, 99, 98, 98,106, +179,122, 58,163,158, 49,103, 20, 41,202,163,186,178,178, 25,222,125, 58,226, 82,232,149, 16, 39, 39,167,105, 60, 30,111,206,132, + 37,195, 62,232,247,150, 63,146, 99,211,112,243,220,109, 40, 51,242,235,229, 52, 39, 6,171,234,119, 45, 49, 88,149,156, 12,195, + 24,181, 90, 45,126,254,249,103,179, 68,214,161, 67,135,160, 86,171,193, 48,140,177,174,188, 27, 25, 35, 97,105,101, 15,151,150, + 30,208,105, 75,193, 48,230,191, 5,178, 13,148,167,193, 96,192,178,101,203,176,112,225, 66,172, 88,177,162, 94, 33,178,125,123, +173,177, 95,213, 56, 11, 10, 10, 74,132, 66,225,184,195,223,111, 14, 29, 59,101,182,165,107, 47,111,236, 61,114, 6,122,157, 30, + 34, 33, 15,205,173,164,104,231,230, 2,173,186, 12,223,110,221, 80,172, 86,171,198,213, 18,123, 86, 95,189, 87,195,196, 17,129, +248,122,207,175,184,114,240, 79,131,242,149,177, 95,225,167,111,102,193,199,103, 95,189,156, 70,163, 17,124, 62, 31, 7, 15, 30, + 84,213,213,155,144,162, 40,212, 35,176,170,213,145,149,149, 61, 92, 91,123, 66,171,126,246,194,234,200,214,214,118,225,255,177, +247,221, 97, 81, 92,253,247,103,102,182, 23,122,219,165, 42, 32, 74, 19, 65, 84, 84,236,177, 99, 52, 81, 99,137,141, 36, 38, 26, + 91, 52,177,197,216, 98,130, 45,209,152,216, 19,149, 52, 21, 91, 98,195,104, 84, 84,196, 66, 83, 41,162,130, 74, 91, 88, 58, 11, +108,223,153,223, 31, 2, 81, 35,176,152,228,247,190,223, 55,115,158,103,159,221,217,153, 57,115,231,206,157, 59,103,206,189,247, +115,191,253,246, 91, 59,181, 90,141,204,204, 76,100,102,102,130, 32,136,140,231,215,215,214,214,226,206,157, 59, 13, 34, 39,195, +220,252,108,112,174, 74, 74, 74, 8,133, 66, 1,177, 88, 76,222,186,117, 75, 19, 20, 20,148,129,250, 62, 90, 45,157,187, 86,171, +125, 52, 96,192,128,166, 28, 35, 23,129, 64,240,204,148, 77, 13, 65, 71, 95,208, 84,248,167,116,230,229,229,165,124,245,213, 87, +238,237,219,183,199,174, 93,187,180, 22, 22, 22,252,249,243,231,131,162, 40, 98,243,230,205, 76,121,121,185,126,241,226,197,252, + 43, 87,174,160,182,182, 54,197,140, 58, 68,165,209,104,166,247,232,209,227,251,211,167, 79,139,124,124,124, 26,103,122,216,183, +111, 31,102,205,154, 5,145, 72,132,172,172, 44,140, 28, 57,178,174,174,174,110, 58,158,141,129,213,200,105, 52, 26, 9, 46,151, +203,208, 52,141,101,203,150, 61, 19, 88, 84, 44, 22, 67,196, 55, 97,231,106, 47,201, 7,235,138, 36,115,102, 78,158,252,164,156, +208,166,180,244,135, 15,118,238,249,245, 2,158,141, 18,255,167,115, 39, 8,226,227,207, 63,255,124,123,207,158, 61, 69, 82,169, + 20, 62, 62, 62,136,143,143, 71,124,124, 60, 46, 95,190,220,112,253, 97,107,107,139,202,202, 74,228,229,229,169, 9,130,248,184, + 57, 78,218,170, 10,246, 62, 79, 28, 44,110, 67,204, 43,158,224,153,209,131, 79,226, 96, 61,137,139,213, 82,126, 62,223,189,195, +214,214,214,216,185,115, 72,186, 90,173,166, 26,180,148,189,189,253,157,250,109, 25, 55, 55, 55,221,159,139,188,249,247,123, 43, +192,114,254, 59, 57,255,167,208,162,213,159,146,146,242, 83, 64, 64,192,233,181,107,215,174, 61,122,244,232, 59,115,230,204, 33, + 44, 45, 45, 17, 19, 19,195,148,151,151,239,229,243,249, 31, 93,187,118,237,165,226, 69, 48, 12,179,239,202,241,107, 51, 38,124, + 48,130,152,179,113,106,207,148,139,119, 50,130,122,250,160, 99, 15, 31, 36,158, 79,199,214,165,251,127, 48, 26,140,203,139,138, +138,114,155,227, 49,167, 15, 86,195,135,195,225,180, 24, 7,235,232,209,163,115,134, 13, 27, 70,222,184,113,227, 79,125,174,158, +238,135,117,246,236, 89,232,245,122,196,196,196,208,205,197,193,162,129, 95, 54,109, 92, 62,229,187,232,147,124,146,208, 35,225, +210, 97, 84, 85, 20, 53,155, 55, 60, 30, 23, 63,254,252,139,158,195,161,238, 54,147,214,199, 73, 73, 73,118,235,214,173,163, 72, +146,196,214,173, 91,159,113,174,158,199,237,219,183,105,131,193,208,226,181, 82, 40, 20,103,105,154, 30,191, 99,211,234,125,253, + 6,191,106,237,235, 27,192,113,116,116, 7,135, 36, 81, 89, 94,130,155,215,174, 24, 99, 79, 30,171,212,233,116, 83, 21, 10,197, +217,191, 82, 0,163,118, 30,123,225,255,163,231,124,217,146,139, 98, 52, 24, 12, 28,137, 68, 2,163,209,248, 66,113, 53, 96,192, + 0, 81,124,124,188, 90,175,215,131,162,168,102, 21,211,147,107,180, 98,202,119,223,255,189,215,200,100, 50,249, 85, 84, 84,160, +182,182, 22,137,137,137,204,214,173, 91, 75, 42, 43, 43,151, 62,189,190,188,188, 28, 42,149, 10, 55,111,222,100,118,237,218, 85, + 82, 93, 93,189,212,220,252,107,136,139, 85, 81, 81, 65,139,197, 98,210, 96, 48, 24,130,130,130,132, 60, 30,207,207, 92,142,212, +212,212, 33, 77,173,235,209,163,199,189,248,248,248,118, 79,207, 77,104, 52, 26,121, 90,173,214,103,228,200,145, 45,214, 31, 34, +145,104,194,225,195,135,127, 18, 10,133, 29, 53, 26,205,219, 74,165,114, 31, 0,119,138,162,112,255,254,253, 82,163,209, 56,118, +217,178,101,223,213,214,214,222,150, 74,165, 19,205, 76,114,108, 86, 86,214, 68,127,127,255, 61, 43, 87,174,148,244,237,219,151, +235,236,236,140,206,157, 59, 35, 43, 43, 11, 39, 79,158,212,111,219,182,173,174,174,174, 46, 18,192,217,102, 94, 58, 24, 0,132, +209,104,124,102, 14, 83, 62,159, 15, 46,151,139, 58, 45,137,119,150,101,171,105,112,213,159,111,248,225, 36,195,128, 40, 84,148, +150, 22, 21, 87, 94,231, 24, 12,151, 30, 43,106,170,154,114,198, 52, 26, 77, 48,195, 48,156,234,234,234,205, 90,173,118,234,252, +249,243,229,235,215,175, 71, 80, 80, 16, 74, 75, 75, 97,107,107, 11,185, 92,142,154,154, 26,228,228,228,152,244,122,253, 14,147, +201,180, 90,169, 84, 54,219,236,104, 42, 21,163,141,101, 96,227, 11, 35, 65, 16, 32,105, 18,132,158, 0,101,162, 64, 25, 40, 16, + 28,206, 19,119,203,188, 41,180, 24,163,209,136,136,136, 8,156, 56,113, 2,163, 70,141, 98,208, 76,255,147, 19, 39, 78,192, 28, + 71,152, 5, 11, 22,102,142, 34, 76, 75, 75,171, 4,240, 46, 65, 16,209,179,103,207, 62, 65,211, 52,151,166,233,225,169,169,169, +151,255,202,193,139,138,138,146,174,158, 76, 92,234,224, 98, 29, 53,100, 98, 79, 4,116,241,128,201,104, 66,252,169, 20,236,253, +252,216,254,252,188,252,105,120,118,174,194, 23,194,156, 62, 88,207, 59, 88, 77,113, 41,149,202, 21,107,214,172,193,103,159,125, +214,234, 81,132, 77,109,147,144, 88,248,110, 88,103,218,117,244,171, 61, 7,147, 4,193,104,155,233,103, 67, 16, 96, 26,122, 69, +112, 56,212,221, 75,215,243,131,154,201,191, 1, 51,103,206,252,157, 36, 73,143,167, 45,254,102, 30,246,138,178,178,178, 65,230, + 92,155,226,226,226,211, 46, 46, 46,237,227, 98,127, 93,114,229,220,233,190, 38,147,222,155, 0, 1, 30,143,247,192, 96, 50, 94, + 52,232,116, 81, 5, 5, 5,127, 57, 16,219,146,119, 71,225,113, 97, 41, 56, 28,234, 73,236,169,250,128,166,135,183,204, 71, 72, +200,143, 77,238, 39, 16, 8, 78,239,217,179, 39, 98,242,228,201, 4,135,195,105,108,118,107, 56,127,146, 36,113,237,218, 53,181, + 78,167,195,222,189,123, 25,145, 72,212,108,224,218,127,234, 26,213,212,212, 68,142, 28, 57,114, 31, 0, 1,128,251, 85, 85, 85, +239, 41, 20,138,252,167,215,143, 26, 53,106, 31, 0, 1, 65, 16,127, 90,223, 18, 26, 66, 54,216,216,216,100,212, 59, 87,194,151, +233,232,222, 76,249,166,154,106, 62, 52,167,169,176,126,110,193,215, 27,150, 59,119,238,188,122,198,140, 25, 79, 79,246,124, 9, +128,215, 75, 36,237,172, 90,173, 14, 88,182,108,217, 92,145, 72,212, 79,173, 86,251, 2,128, 88, 44,206,172,171,171,187,160,215, +235,191, 2,208,108,108,169,236,236,108, 93,219,182,109,179,140, 70, 99,160,163,163, 99,227,232, 67, 62,255,137,243,115, 45,211, + 54,177,176,176,176,203,147,113,154,215,205, 78,216,169, 83,167,218,216,216,216, 12, 34, 8, 98, 12,195, 48, 29, 84, 42,149,118, +249,242,229, 87,227,226,226,170, 51, 51, 51,135,244,234,213,139,144,201,100,120,248,240, 33, 83, 83, 83,115,136, 36,201,143, 21, + 10, 69,139, 35,167, 25,134,201,111,206,165,110,106,159,230,214,235,116,186,146,171, 87,175,218,158, 59,119,142, 50,153, 76,136, +141,141,109,124,145,124, 81,107, 96,118,118, 54,116, 58,157,134,125,116,178, 96,209, 50,254,233,209, 32,102, 89,136,114,185,124, +156, 80, 34,152,233,209, 94, 30, 84,152,163, 76, 87, 85,214,253,168, 80, 40,118,226, 73,200,122,214, 62,253, 31,229,228,137, 44, +206, 16, 20,207,163,201,135,131, 73,255, 88,175, 86, 13,126, 17,103,215,174, 93, 93,120, 60,222, 6,173, 86, 59,180,185, 40,237, + 20, 69, 25, 69, 34,209,105,141, 70,243,209, 11, 38,123,254, 63,151,159, 43, 87,174,124,161,125, 96,238, 40,194,149, 43, 87,210, +173, 73,103, 80, 80,208, 5,177, 88, 44,127,209,186,186,186,186,220, 91,183,110, 13,250, 47,201,207,167, 71, 0,154,205,249, 82, +163, 8, 91,224,244,240,240, 16,232,245,250, 16, 0,237, 1, 88, 3, 40, 55, 24, 12,177,165,165,165,197, 78, 78, 78,161, 36, 73, +126, 82, 47, 94, 63, 45, 46, 46, 78,252, 79,222,155, 46, 46, 46, 66, 75, 75,203, 13, 36, 73,202,205, 20,220, 58,165, 82, 57,191, +172,172,172,136,173,235, 88, 78,176, 77,132,255, 81, 4,178,156, 44, 39,203,201,114,178,156, 44, 39,203,201,114,254,219,192, 54, +166,179, 96,193,130, 5, 11, 22, 44, 88,252,205, 32,154, 81,161,173,177,254, 94, 70,201,222, 97, 57, 89, 78,150,147,229,100, 57, + 89, 78,150,243, 95,199,217, 18, 55,219,244,248, 15, 9, 47,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255,125,156,255, 83, + 96,155, 8, 89,176, 96,193,130, 5, 11, 22, 44,254, 83, 2, 75,226,228,235,103,239, 17,180,207,198,181,227, 45, 27,215,142,183, +236, 61,130,246, 73,156,124,253,254,141,153, 38,151,203, 69, 50,153,108,162,155,155,219,217, 78,157, 58, 85, 59, 59, 59,127,192, + 22,165,214,163, 15,192, 25, 7,188, 63, 25,200,157, 12,228,142, 3,222,239,243, 55, 78, 64,254,223,130,213,239, 59,135, 93, 58, + 61,241,244,234,247,157, 95, 24,128,109,229, 2,185,221,149,216,177, 95, 45,121,223,217,246,111, 58,164,133,163,163,227, 46, 39, + 39,167, 71,142,142,142,143, 29, 29, 29,247, 0,176, 98, 75, 28, 11, 22, 44, 88,252,255,131, 89, 15, 51, 27,247,192,183,189, 61, +189, 63, 90,189, 98, 9,225, 34,115, 16, 27,140, 38,253,195, 71,249,254, 43,214,172, 61, 84,200,231,124, 89,145,123,231,219,151, + 56, 54,225,234,234, 58,142,203,229, 70, 0,104, 16,106, 25, 6,131,225, 68,126,126,254, 1,152, 55,220, 26, 29, 59,118,188, 66, + 81,148,123,107, 14, 76,211,244,163, 91,183,110,245,126,153, 12,115,118,118, 30,235,236,236,188, 39, 44, 44, 76, 28, 28, 28, 12, + 30,143,135,245,235,215, 47, 40, 44, 44,220,100,190,178,232,195,113,172,180,157, 76,113, 56, 35, 0, 4, 49, 12, 0,130,186, 69, + 27,244, 39,149, 54,101,251, 16, 23,103, 86, 24,113,153, 76,182,148, 32,136,169,245,121,245,173, 66,161,216,240, 79, 20, 18,185, + 92,238, 70, 16, 68, 63,134, 97,124, 73,146,188, 77,211,244,111, 10,133,162,236,175,242, 58, 1,239,246, 8, 15,255,106,202,130, + 5,148,250,210, 37,124,181,103,207,102, 84, 87, 3,192,214,214,150,165,110,221,130,199, 88, 88, 32,130, 0, 66, 64,128, 32,193, +164,148, 87,146,167,110,222, 76, 62, 0, 51, 98,169, 53,133,144,144,144,147, 0, 26, 38,142, 59,149,156,156, 60,188,181, 28, 21, +217,244, 39, 2,174,111,175,138, 7, 23, 62, 1, 48,244,249,245, 70,141,112, 10,197,117,139,160,152,228, 60, 0, 95,252,197,108, + 21, 59, 56, 56,220, 58,118,236,152,107,183,110,221, 56, 0,144,152,152, 56, 57, 34, 34,162,127, 73, 73, 73, 32,128,234,255, 68, + 69, 19, 22, 22,102, 99, 52, 26,163, 41,130, 8,163,105,218, 26, 0, 72,146,172, 52, 49,204, 53, 14,135, 51,229,101,131, 21,179, + 96,193,130,197,255, 89,129, 37,113,236,224,239,227,221,110, 65,236,209,104,183,202,242, 74,205,214, 13,251,146,213, 28,126, 93, + 91,127, 31,222,150, 47,215, 89,207,154,247,225, 60,189,214,112,189, 86,121, 55,221,220,131,202,100, 50,119,129, 64,112,100,233, +210,165,129,225,225,225, 92, 71, 71, 71, 20, 23, 23,227,238,221,187,129,241,241,241,163,142, 29, 59,182, 64,171,213,190,222, 82, + 4,119, 0,144,240,121,158, 7,214,125, 46,227, 91,219,128, 49, 25, 97, 29,208, 9, 0,192,208, 52, 20, 23,207,130, 54, 24,192, +208, 38,184, 14,121,245,201,255, 12,131,174, 93,187,242, 94, 38,179, 92, 92, 92,156,125,124,124,126, 88,188,120, 49, 79,171,213, + 34, 37, 37, 5, 9, 9, 9,180, 82,169, 92,107, 46,135, 99,224, 40,127, 82, 37, 56, 52,114,212,208, 54,195, 7, 58,242, 61,100, + 14,160,105, 33,238,230,232,221,207, 94, 78, 30,114, 42,246,183,143, 76,126,163,198,150,100, 28,187,221, 28, 79, 64, 64, 64, 88, + 69, 69,197,103, 5, 5, 5, 13,194,111,125,215,174, 93,151, 63,189,205,243,129, 2,105,154, 6,135,195, 41,174,171,171, 27,151, +150,150,150,252, 34,222,101,111,195, 96, 52, 62, 41, 23, 28, 14, 76,209,191,185, 30,237,215,175, 95,219,200,200, 72,132,132,132, + 32, 49, 49,177, 95, 76, 76,204,220,147, 39, 79,222, 52, 24, 12,167, 4, 2,193,197,199,143, 31,191,212, 4,139, 60, 96,225,148, + 5, 11, 40,233,163, 71,144,166,164,224,205,234,106,206, 58, 96, 97,107, 4, 86, 72, 72,136,167,157, 13, 14,141,122,189,143,159, + 76,230,207,227,114,237,193, 48, 12, 12,134,242,246, 37, 37, 25, 99,172,172,176,184,170,138, 26,125,243,230,205,251,230,240,133, +134,134, 58,209, 52,189,131, 97, 24, 30, 65, 16,179, 1, 12,139,141,141,133,201,100,194,240,225,195,135,133,132,132,120, 50, 12, +243,181, 84, 42,101,212,106,245, 91,137,137,137,197,205, 57, 87,149, 15,232, 79, 20,148,215,144, 14,161, 83, 81,196, 57, 51,228, +131, 65, 56,109,237, 69,126,186,124,107,225, 53, 0, 24,226,229,101, 81, 85, 32, 90, 36,181, 12,180,173, 42, 56,187,104,136,151, +215,238,216,236,108,213,203,222,208,206,206,206, 27,162,163,163,221,194,194,194, 26,131,228, 6, 7, 7, 83,235,215,175,119,153, + 63,127,254,230,138,138,138,105,102,138,234,246,118,118,118,103,104,154,214,166,167,167,183,111,248,223, 33,232,181, 30,118, 22, +146, 1, 37, 21,170, 75,101,233,191,196,153,195,213,185,115,231, 72,194,100,218,245,229,178, 89,148, 95, 80, 16,196,246,142,208, + 23, 22,162,214,104,176,189,150,154, 54,124,221,166, 93, 37,157, 59,119,158,158,148,148,180,135,173,146, 89,176, 96,241,175, 17, + 88, 2, 1,127,241,138,143, 23, 17, 21,101,149,106,189,170, 90, 47,102,116, 70, 75,177,144,168, 86,150, 84, 62,180, 20,215,205, +159, 55, 71,184,104,241,199,139,107,129, 55,205, 21, 87,190,190,190, 55,118,239,222,237,104,107,107,139,170,170, 42,148,149,149, +225,198,141, 27, 96, 24, 6, 67,135, 14, 21,116,234,216, 49,228,203, 77,155, 18, 0,116,111, 73,100,113,184, 28,130, 43,145,224, +112,159, 16,144, 60, 30, 70,103, 42,158,136, 11,131, 30,177,227, 71, 0, 0, 40, 62, 31,111,220, 83, 2, 0,132, 66,225, 75,103, + 22,195, 48,221,123,246,236,201, 3,128, 5, 11, 22, 84,215,214,214, 70, 17, 4,241,147, 66,161, 40, 48,103,127,187,192, 17, 62, +246, 14, 14,113, 27,215,188, 99, 27,232,233, 5,157,193,128,124,101, 1, 24,240, 33,115,148,224,205, 81,157,120, 61, 67,121,237, +190,216,250,251, 69,130,124,181,183, 50,237,215,180, 38,133,165, 68, 18,189,121,243,102, 28, 60,120, 16, 0,112,225,194, 5,248, +248,248, 72, 90, 74,195,221,187,119,189,166, 78,157,186, 31, 64,187, 23,173, 55, 26,193,137,250,236, 39, 0, 64,244,238,137, 84, + 86, 86, 86, 91,145, 72,244,148,249,214, 7,125,250,244, 33,163,162,162,186, 93,184,112,161,219,254,253,251,245, 6,131, 97,115, + 97, 97, 97,204,203,228,169,250,210, 37, 72, 83, 82,128, 75,151, 90,189,111,167, 78,157,220,253,252,236, 18,190,216,184,220,225, +248,137, 52,108,220,184, 7, 15, 30, 60, 0, 0,120,121,121, 97,226,132,177,220,159,126,220, 17,176,120,241,202,171, 38, 83, 72, +120,114,114,114,139,209,205,105,154,222, 17, 21, 21,245,170, 84, 42,197,226,197,139,179, 60, 61, 61, 97,105,105,137,157, 59,119, +194,198,198, 6, 6,131, 33,107,253,250,245,156,194,194, 66,108,217,178,229,187,167,220,173, 63,161,247,176, 62,159, 8,184,190, +189, 58,132, 78,133,212, 82,142,221, 63, 31,192,221,196,125,189,180,134,204, 79,150, 32,110, 18,197, 8,166, 42,115, 37,139,219, +134,246,181,107, 23, 48, 18,109, 58,167,216,107, 77,151,114,150, 13,244, 92,203, 17,106,162, 87,126,241, 2,151,112, 76, 12, 21, + 88,125,211,246,206, 89, 73, 25,208, 24, 52,148,168,255,128,102, 48,162, 79,159, 62, 84,131,192,126,244,232, 17,116, 58, 29,252, +253,253, 73,157, 78,215,207, 92,113,213,187,119,239, 43, 63,252,240,131, 93,175, 94,189,158,153,186, 69,102,103, 61, 56,238,200, +230, 57,159,125,245,163,239,247, 12, 81,217,210,139, 64,231,206,157, 35, 59,182,247,250,118,243,250, 21, 4, 85,155, 15,142,117, + 25, 64,151, 65,177,255, 59, 64,108,139,225,239,205, 71,151,110,221,168, 57,243,150,126, 75,132,134, 50,137,137,137,123,217,106, +153, 5, 11, 22,255, 10,129, 69, 51,116,144,131,131,173,112,203,134,125,137,114, 33, 73,200, 92,157, 9,190,165, 53, 7, 82,137, +128,164,184,106, 47, 47, 87, 30,205,208, 77, 77, 21,242,252, 80, 75, 66, 32, 16, 28,217,187,119,175, 35,151,203, 5, 77,211,112, +112,112, 64, 78, 78, 14, 42, 42, 42, 80, 83, 83,131, 7, 25, 25,104,227,230,138, 57,211,223,145,127,186,241,139, 35, 0, 66,241, +108,115,225, 51,156, 12,205,128, 54, 62,219,162, 70, 16,196, 11,219, 23,155,153, 70,198,172, 33,161, 52, 77, 63, 44, 44, 44,132, + 88, 44,134,159,159,159,244,230,205,155,151, 11, 11, 11, 11,204,226, 28, 51,134,226, 61, 38,126,221,176,102,156, 45, 65,101, 33, + 43,183, 18,222,174, 93, 97,103,229,134,130,146, 26, 36,165,159, 66,214,131,147,240,118,117,199,244,137,222,214,155,118,148,156, + 64,200,116,111, 36,239, 50,188,136, 83,165, 82, 73,221,221,221,225,226,226, 2,154,166, 97, 50,153,144,150,150,214,248,187, 97, +190,196,134,223,155,127,138,135, 13, 85,138,113,175, 13, 67,121,121,185,212,220,115,111, 16, 87,135,190,112, 14, 80,215, 42,120, + 0, 32,146,200,245,163,231, 23,164,117,233,210, 5, 14, 14, 14,188,171, 87,175,206, 7, 16,211,218,252,212, 3,235,191,218,187, +119,203,155, 85, 85, 36, 0,124, 75, 16,180,254, 73, 84,109,179,202,146,131, 61,113,116,211,166, 79, 28, 8, 38, 29,182, 86,235, +112,227,198, 99,232,245, 79,174,124, 89,153, 18,179,223,175, 6,135, 99,129, 47,190, 88, 97,247,198,184, 25,135,241,100,212, 11, +221, 92, 58, 25,134,225,101,102,102, 34, 32, 32, 0,251,247,239,231, 80, 20,133,235,215,175, 67, 36, 18, 97,234,212,169, 8, 12, + 12,228,136, 68, 34, 92,190,124, 25,213,213,213, 68,115,233,188,116, 42,238,211,138,236, 11,159, 20, 81,103,134,236,254,249, 0, +222,153, 48, 14, 50, 99,246,101, 27,111,242,211,161,195,123, 44,167,184,110, 17, 18,139, 64, 27,159,192,145,224,241,165,152,181, +112, 53,178,238,252,106, 83,167,186,253,190,201,144,231,182,242,139,152,185,127, 74,231,161,177,166, 41,123, 47,117, 62,231,158, +236,113, 39,101,250,117, 69,242,174, 91,127, 28,218,143, 3, 82,109,221, 32,174,238,223,191,143, 7, 15, 30,128,162, 40,168,213, +234,103, 38,245,125,154, 51, 56, 56,248, 93,147,201,180, 28, 0,116, 58,221, 62,145, 72, 20,249,245,215, 95,219, 81,212, 31, 51, + 69, 53, 56, 87,197,202,178,138,171, 55,211,238,206,127,119, 76,223, 75,215,238,228,233,185, 35,115,171,110,253, 82,245,162,252, + 12, 11, 11,179, 33,105,122,215, 87, 27, 87, 17,166,236,223, 33,240,235, 11,142,212, 7, 38, 67, 1, 52, 21, 53, 80,231, 20, 65, +191,243, 27,120,189, 55, 15, 27,214,127, 70, 76,152,244,214, 46, 47, 47,175, 35,217,207, 58,120,255,196,112,109,150,147,229,100, + 57,255, 59, 57,255, 93, 2,139, 32,200,106,189,222,192,181,116,115, 49,140,126,189,119,199,228,235,119,178,164,182, 86,100,167, +174, 29,253,239,100,229, 39,193,104,210, 19, 4,105, 86,191, 14, 87, 87,215,113, 43, 86,172,232,104,105,105, 9,154,166, 97,101, +101,133,146,146, 18,232,245,122, 84, 87, 87, 67, 91,163,130, 94, 85,141,212,220, 71, 8,239,219, 23, 3,187,119,247, 59,101, 48, +140,203,207,207,223,223, 20,167,137,164, 24,187,144,174, 24,155, 93, 6, 90,175, 67,140,151, 93,163,107, 53,254, 81, 37, 8,130, +128, 73,167,197,169,174,237, 32,144, 74, 16,244,209,138,151,206,172,162,162,162,228,115,231,206,157, 30, 50,100,200,208,233,211, +167,147, 69, 69, 69,177, 70,163,177,167, 82,169,108,177,121,212,241,158,105,234,148,233, 33, 94,246,214, 36,142,199,159, 65,152, +239,107, 16, 11,184, 40,169, 80,131, 36, 8, 60,120,120, 14, 38,147, 4,169,153,185,232, 30, 40, 65,175,110, 86,174, 53,191,151, + 79, 47,109,186,185,140,168,168,168,128, 82,169,132,193, 96,128,209,104,196,152,177, 99, 17,189,111, 31,106,107,107,161,209,104, +160,211,233, 64,211, 79,244, 68, 81, 73, 13,110,164,198, 34,180, 99,251, 6,199,227,197, 5,130, 3,227,215,155, 39,114, 44,196, + 0, 79,224,160, 87,169, 84,144, 72, 36, 80,215, 42,120, 83,222,105,116,182,120, 23, 46, 92, 64, 82, 82, 18,156,157,157,205, 42, + 71, 47,194, 3, 96,215, 67,147,105,217,208,163, 71, 29,227,143, 30,165,175, 29, 63,158, 47, 80,169,118,154,179,111,183,110,193, + 99,102,205, 26,238, 39, 18,138,144,159,187, 25,190,190, 60, 44,248,192, 14, 81,235, 74, 1, 0,115,102,185, 34, 52,212, 14,213, +149,135, 96,239,184, 20, 11,230,143,242,174,169, 97, 38, 39, 36,164,236,107,190,188, 19,179,127,252,241,199,172, 65,131, 6,113, +146,147,147, 33, 16, 8, 32, 18,137, 32, 20, 10, 33, 18,137, 80, 84, 84, 4,157, 78,135,152,152, 24, 99,125, 19, 98,147,168,111, + 6, 28,250,193, 64,156,190,155,184,175,151, 11,153,147, 58,106,126,143,135,201,215, 83,107,206,255, 30,255,169, 81, 35,204,171, +204, 63,187,200,179, 75,170,253,251, 31,173,194, 55, 27, 86,224,238,245,184,114, 39,119,213, 86, 19,161,125, 97, 58,251,244, 89, +201,113,117,149, 25,102, 70,142,182, 58, 33,191,250,206, 9, 14, 74,139,203,111,111, 68,246, 13,181,192, 39, 96, 82,123, 79, 66, +119,254,252,121, 81,239,222,189,161, 86,171,159,220, 11, 20,133, 31,127,252,145, 54, 26,141, 23, 94,196,105, 48, 24,150, 39, 37, + 37,201,235,234,234, 48, 97,194,132, 57, 43, 87,174,148,112,185,220, 39,247,151,201,244,140,115,181,102,211,247,103,230, 45,223, +122,225,204,254,117,206,107, 22, 71,246,125,115,214,103, 23, 0,196,190,216, 13, 53, 70,111, 90,183,132, 18, 88,235, 65,116, 25, + 4,189, 82,141,199,223, 78,135,174, 74,141,246,159,174, 6,192,131, 78, 79,225,196,168,177,160,108,157,241,118,239,158,156,157, +113, 87,162, 1,140, 98,171,102, 22, 44, 88, 60,247,242,219, 5,128, 67,253, 98,105,253,115,204, 14, 64,131,203,238, 0, 64, 7, +128,255,212,110,207, 47, 63,189,237,243,203, 79,255, 46,173, 55,118, 28,240,100,202,190, 27, 4, 65,180,186,159,104,195, 40,194, +167, 13, 31,230, 57,215,230,210,131,236, 71,234,190,125, 66,229, 23,110,220, 75, 30,242,218,192,174,189,251,119, 11, 43, 46,171, +206,150, 57, 88, 74,174, 94,191, 38,160,105,218,172,246, 29, 46,151, 27, 17, 30, 30,206,169,168,168,128, 88, 44, 70, 73, 73, 9, + 10, 10, 10,160,215,235,161,174,170,132,182,178, 2,234,138,114, 24, 84,149,120,112,243, 58, 58,184,187, 8,234, 59,193,155,133, +231, 29,170,134,217,230, 9,146,132,208,210, 2, 34, 75, 75, 80, 84,235, 34, 83,200,229,242,145, 29, 58,116,184,230,236,236,188, +172,254, 13,255,253,168,168,168, 82,134, 97,176,104,209, 34, 75, 75, 75,203, 24, 15, 15, 15, 65, 75, 60, 22,182,166, 49,221, 58, +182,163,178, 30,223, 70,168,207,104,180,149,247,198,131,130, 42,148, 84,105, 80, 84, 94,139,246,237, 63,130,131,243, 59,176,146, +189,135,219,119,243, 32,151,181, 37, 41, 46,111, 72, 11,130,239,153,229,159,127,250, 9,117,117,117,104,215,174, 29,198,143, 31, +143,133, 11, 23, 98,220,184,113,112,118,118, 70,175,118, 28, 68, 78, 26, 3,165, 82,217,108, 58,215,124, 11,238,218,159,228,201, + 83, 86, 48,201,237, 6,156, 78,123,240,224, 1,178,178,254,220,178,246,251,239,191,163,170,170,170,241, 1,108, 14, 28, 29, 29, +151,200,100,178, 91, 50,153, 44, 77, 38,147,157, 42,118,118,206, 52,120,121, 57,245, 28, 53,138,240,127,227, 13, 42, 79, 34, 33, + 30,186,185, 73,205,225,178,180,196,240,208,208,112,126,101,197,158, 70, 83, 42,114,154, 3,174,196, 5, 32,254,114,103,204,158, +229, 5,146, 16,130, 32,121,168,171,253, 29,254, 1,129, 60, 11, 11,166,217,178, 84,223,161, 61, 59, 32, 32,128, 51, 99,198, 12, + 8, 4, 2, 68, 71, 71, 99,251,246,237,248,242,203, 47,145,149,149, 5, 15, 15, 15,200,229,114, 56, 57, 57,113, 0,100,215,239, +211, 44,172,189,201, 79,181,134,204,203, 54, 62,146,108,130,116,236,161, 53, 10, 71,175,252, 66, 81,182,102, 91,206, 23, 15,239, +170,189, 50,175,199,149,101,221,249,133,206,185,121,161,180,240, 94,141,215,154,109, 57, 95, 68,109, 45, 44,127, 17, 87, 92,220, + 10,211,177, 83,113,250,218,154, 58,206,200,161, 3,212,239, 77, 27,223,222, 86,220,225, 71,184, 12, 10,110,227, 38,159,180,226, +243, 45,186,183,103,204,211,127,251,221, 30, 70,165, 82,161,186,186, 26, 95,125,245,149,241,248,241,227, 5, 38,147,105, 94, 19, + 73,164,234, 5, 17,198,142, 29, 43, 17,137, 68,200,203,203,107,116, 65, 1, 64, 81, 82,118, 59,254,230,157,204,249,239,141,237, + 83,171,213,106,207, 92, 76,204,240,247,241,112, 37, 8,166, 77, 83,231, 77, 17, 68, 88, 64, 80, 16, 24,166, 18, 36,199, 29,249, +223,111,132,186,168, 28,117, 37,229, 32,185, 18, 24, 32,132,158,225, 67, 24,212, 21,143,147, 82,224, 36,181, 4,135, 32,122,178, +143, 18, 22, 44,254,189, 58,170, 41, 45, 2,192,129, 32,136, 19, 4, 65,156, 88,178,100, 73, 63, 0,118, 4, 65,156,168, 23, 65, + 14,245,191,249, 13,219, 52,177,236,240, 52,207,115,251, 62,253,219,126,201,146, 37,253, 9,130, 56,209,163, 71,143, 73,245, 66, +174,213,104, 81,109, 80, 26, 93,212,146,101, 43, 72, 75, 41,223,194,223,175,173,205,241,223, 46, 37,199, 95, 75,201,176, 16, 11, + 5, 53,181,181,252, 47,191,222,238, 78,212,169,205,237,228,237,103,111,111, 15,189, 94,143,251,247,239, 35, 63, 63, 31,122,189, + 30,198,186, 90,104, 43, 43,161,169,168, 0, 93, 87, 3,158,137,134,186,180, 4, 54, 66, 62,240,199, 8,195,230,148,109,163,152, +122,145,224, 34, 8, 2, 66, 75, 11,240, 45,164, 32, 57,148,217,153, 35,147,201, 58, 7, 7, 7, 31, 60,127,254,124,183,240,240, +240, 79, 61, 60, 60,172,138,139,139, 31, 23, 23, 23, 15,216,176, 97,131,214,193,193, 1,111,190,249,102, 7,131,193, 48,165, 37, + 46,158, 80,219,209,195,201, 7,238, 78, 35,225,108, 23,134,178,106, 45, 74, 42,213, 40, 42,171,195,129,195,227,113,246,244,120, +164, 92,158,132,251,215, 35, 81, 86,107, 9,161,109, 63, 0, 76,179,129,220,174, 93,187,134, 29, 59,118, 52,126,190,249,230, 27, +148,151,151, 35, 32, 32, 0,121,121,121,136,141,141, 69, 81, 81, 17, 28, 28, 28,144,146,146,130,157, 59,119,226,250,245,235,173, + 46, 36, 26,141, 6, 92,190,157, 62,122,247, 68, 68,239,158, 8, 19, 35,209, 63,157,247,102, 23, 54,146,156,170, 24, 53,170,163, +194,218,218, 63, 40, 40,104,232, 27,111,188,225,213,173, 91,183,198,245,222,222,222,238, 28, 14,167, 72, 46,151,127, 43,151,203, +131,155, 37,163,153, 16, 27, 91, 63,232,180,153,245,215,152, 3,130, 16,160,255,192, 12,244,236,149, 4,189,129, 15,130, 20,128, + 36,132, 48, 26,203, 96,105,225, 4,134, 33, 90, 10,140, 55, 44, 54, 54, 22, 59,118,236, 64, 78, 78, 78, 99,243,104, 68, 68,196, +236, 9, 19, 38, 28, 49,153, 76, 56,113,226, 4,142, 29, 59, 6, 79, 79, 79, 4, 7, 7, 67,175,215, 15,107,233,188,151,111, 45, +188,246,211,151,167,199,115,141,214,193,124,129,135, 39,169, 18,143,156,217,199, 94, 2, 0,177,217,217, 42, 39,119,213,218, 58, +213,157, 92, 27,215,218,117, 45,119,112, 39,152,196,172,180,235,251, 15,255, 86, 85, 92, 90,198, 13,233, 20,168,254,108,213, 71, +188, 54,109,219,173, 95,177,104,166, 83, 65,181,176,106,224,156,211,153, 71, 98,111,212, 76,142,156,110,124,107,250, 44,205,153, +223,126, 63, 74,211,116, 16,154, 24, 65, 72,211, 52, 20, 10, 5,238,220,185,131,156,156, 28,148,150,150,162,164,164, 4, 42,149, +170,177, 89, 81,172,170, 62,249,205,222,227,169, 18,145, 72,220,173,163,143,251,245,228,116,165, 68, 36, 18,251,180,117,111, 15, +188,120, 2,106,154,166,173,159,228, 33, 1,213,157, 75,208,148,171,160,174,172,129,186,188, 6, 90, 61, 5,141,150,132, 70, 79, +194,190,215, 32,212,212,170,161, 41,175, 4,205, 48, 54,236, 51,134, 5, 11, 22,205, 60,239, 35,214,174, 93,251,121,115,235,159, +250,214, 61,183, 12,130, 32, 78, 48, 12, 19,193, 48, 76, 68,189,152,106,208, 9, 39,158,230, 89,187,118,237,231, 12,195, 68, 92, +189,122,245,103, 0,117, 47,147,214, 22,155,118,202,202,238,213, 88, 16,126,175,207, 91,180,252,212,143,187,183, 56,150,151, 87, +100,241,132, 34,141, 80,200,183, 93,184,104,149,117,109, 93,213,235,181, 21,230,143,122,170,168,168,104,124,120,241,120, 60,152, +234,106, 97, 82,215, 65, 83, 81, 6, 66,175, 5,207,100,130,173, 88, 12,119,103, 39,180,113,146,181,200, 71,209, 38,162,240,236, + 41,156,153,244,218, 51,205,130,180, 94,135,216, 30, 29,192,151, 74, 32,178,182, 65,248,177,203, 79,132, 14,143, 7,172, 88,215, + 34,175,147,147,147,189, 92, 46,255,245,235,175,191,230,149,150,150, 34, 45, 45, 45,245,241,227,199, 85, 54, 54, 54, 22, 6,131, +129,190,119,239,222,185,187,119,239, 70,180,109,219, 22, 12,195,120,183,196,167,170,148,232,245, 6, 26, 5,202,199,200, 87,220, +129,149,212, 29, 12,233,134,226,242, 58, 16,112,132, 65,115,183,177, 47,153, 86,157,143, 90, 45, 97, 86,126,234,245,122, 24, 12, + 6, 24, 12, 6,232,116, 58, 76,158, 60, 25, 87, 19, 18,240,211,177,139,200,203,203,131,167, 76,140,241,227,198,162, 83,167, 78, + 72, 76, 76,124,233, 66,237,243,202,153, 52,145, 72,132,237,219,183, 67, 44, 22,163,181, 2, 75, 38,147,125,225,235,235,219,238, +110,109, 45,210, 51, 51,209,117,236, 88, 0,192,149, 43, 87, 26,183, 81,171,213,152, 56,113, 34, 63, 39, 39,231,173,204,204,204, +183, 24,134,249,178,168,168,104, 65, 83,156, 39, 79, 38,224,189,247,210, 81, 82,242,196,217, 61,240,179,127,227,186,135, 57,122, + 12, 25,254,164,229,202,218,218, 26, 95,124, 97, 94,208, 97,147,201,132,157, 59,119, 66, 36, 18, 53, 10, 44, 30,143,215,115,254, +252,249,175,191,104,123,127,127,255, 22, 57, 63, 24,227, 34,188,146,202,188,111,213,174,109,160,149, 67, 16, 74,141, 41, 29,147, + 11,138,102,127, 48,198,101,243,166, 67, 5, 26, 19,161,221,103, 50,228,185,113,132,154,104,115,210,152, 29,251,181,174,188,237, +244,232, 34,101,213,199,179,166,191,105,103,109,227, 84,243,237,215, 81,214, 36, 73,226,120,146,174, 34,192,203,206,102,100,216, + 87, 53,239,125,240, 73,178,206,248,120, 54,242, 78,220, 69, 51, 97, 79,104,154, 70, 65, 65, 1, 74, 75, 75,145,155,155,139,146, +146, 18, 16, 4,129,146,146,146, 86, 57,148, 47,114,148,117,249, 5, 40, 58,250, 29,100, 19,223, 68,251,213,171, 65,211, 92,168, +235,140, 56,212,107, 0,170,171,212,208,209, 4,172, 59,247,192,192, 19,151, 65,210, 70, 32,225, 42,251, 4, 97,193,130, 69,115, +245,202,137,197,139, 23, 47, 53,115,219,115, 12,195,152, 21, 90,231,121,193,181,120,241,226,165, 13,199,138,138,138, 82, 3, 40, +252,219, 5, 22, 0,168, 74, 51,178,211,211, 57,138,154, 58,181,208,198,214,166,206, 66,202,103,170, 42,171,168,204,251, 89,154, +218,162, 7,119, 91,113,188,140,180,180,180,192,130,130, 2,228, 62,126, 12, 67, 93, 45, 8,157, 22,208,168,241, 74,175,158, 16, + 2, 16, 18, 0,143,214,131,162,248,168,169,169, 6,128,140,150, 72,105,131,225,153, 74,189,177, 89,208,194, 2,124,169, 4, 2, + 75,139,103, 28, 45,115, 32, 18,137,126,218,185,115,167, 92, 46,151, 99,211,166, 77,144,203,229,190, 50,153,172,206,194,194, 66, +100,111,111,143,246,237,219, 35, 52, 52, 20, 23, 46, 92, 0, 65, 16, 15, 90,226, 51,234,248, 73, 25,217, 38,183,234,154, 20, 92, + 79,250, 1, 6,157, 14,109,125,150, 64,107,180,135,196,241, 45,168,245,191, 66, 95,121, 17, 0,192,183,236,139,226,226, 82, 0, +196,157,150,156,187,231,151,111,221,186,133,125, 71,175,192,221,175, 47,138,202, 99,113,231, 78, 34,156,108,126,131,143,127, 0, + 12, 6, 67,107,222, 18,204, 22, 36,102, 22,244,137, 75,150, 44, 65,149, 72, 4, 12, 31, 14, 94,118, 54,244,122, 61,194,194,194, +208,165, 75, 23, 0, 64, 88, 88, 24, 40,138, 66,187,118,237, 96,107,107,139, 35, 71,142, 76, 4,240, 66,129,197, 16, 68, 10,109, + 42,243,245,242,242,106, 20, 88,209,223,151, 32, 57,241, 21, 16,224, 99,203, 55,127, 92, 18,119,119,119, 20, 21,229,128, 32,152, +150, 58,101,158, 26, 62,124,248, 48, 27, 27, 27, 76,155, 54, 13, 34,145, 8,175,189,246, 26,212,106,245, 27,245,111, 52, 88,178, +100, 9, 0, 96,197,138, 21, 88,185,114, 37,234,234,234,154, 12, 81,177,125, 77, 71,103,149,154,142, 36,235, 68,175,245,179,111, + 27,212,127,240, 43,240,244, 25,128,254,131,243, 0,224,115,123,238,195,177,235,150, 90, 31,181,177, 36,246, 94, 61,118,110,121, +248,208,126,203, 86,234, 47,126,186,242,235,138, 22, 95, 88, 42, 31,238, 82,101,114, 71,108,222,178,195,184,105,197,210,249,130, +199,165,250,242,194, 10,186, 70, 34,224, 88,120, 59, 65, 58,123,225,167, 57,133,133,247, 63, 68,222,111, 89,230, 92,195,156,156, + 28,104,181, 90,189,114,252, 0, 0, 32, 0, 73, 68, 65, 84, 90,152, 76, 38,104,181, 90,212,212,212, 32, 63, 63,191,241,250,170, + 37,150, 67,102, 77, 27,209,169, 86,173,174,187,126,251, 94,238,178, 57,111,118,175, 85,171,235,238, 61,204,205, 2,182,208, 77, + 92,243,202, 58, 85,141,173, 78,101, 64,101,106, 22,236,251,123, 64,103, 36,160, 53, 82, 40, 47, 85, 65,111, 2, 12, 36, 23,174, + 99, 38,195, 72,112, 80, 93, 82, 4,242, 37,250, 57,176, 96,193,226,223,229, 96, 17, 4,113, 34, 42, 42, 42,226,159,226, 6,128, +168,168,168,180,168,168,168,191,116,172, 6,129,213,247,169, 55,220,190, 47,170, 43,221,173,171, 92, 62, 95,250,186,179,193,160, +243,173,169,169, 49,113, 56,124,142,155,149,186,168, 60,215,252,131, 25, 12,134, 19,151, 47, 95, 30,213,171, 87, 47,193,189,219, +169,208, 86, 85, 65, 91, 85, 9, 30,109,132,173, 48, 20,164, 65, 7, 66,167,133, 75, 7, 26,234,106, 33, 18,110,222, 53, 24, 12, +134, 19,205,102, 8, 24,134, 54, 62, 17, 14, 36, 73, 61,211, 84, 40,176,144,130, 47,149, 66, 32,181,120, 97, 19, 98, 83,112,116, +116, 20,247,238,221,123, 64, 72, 72, 8, 24,134,193,134, 13, 27,160,211,233,248, 13, 78,145, 94,175,135, 74,165,194,225,195,135, +241,253,247,223,199, 91, 89, 89,237, 45, 44,108, 94,220,210, 70,237,233, 11,241,169,195, 38,189,214,159,127,246,226,183, 48,104, +141,168,209, 90,163, 86,163,131, 74,205,133, 78, 48, 24, 4,113, 25, 36, 37, 64,143, 96,111,156,191,114, 79, 99, 50,232, 99, 91, + 35,134, 8,130,128, 86,171,133, 82, 89,130,114,213, 5, 64, 85, 0,123,189, 10, 53, 15, 31, 32,120,242, 20,232,116,186, 22,185, +150,189, 13,131,131,181,130,243,253,106, 18, 92,190,157,222,231,149, 51, 77,134,138,144, 74,165,141,125,116,204, 65,117,117, 53, +126,248,225, 7,132,133,133,161, 79,159, 62, 40, 40, 40, 64,118,118, 54,134, 13,251,163,149, 45, 53, 53, 21,201,201,201,240,246, +246,110,129,139, 57, 85, 94,126,127,236,200,145, 35,121,215,174, 93, 3,195, 48,240,241,177,130,165,133, 20, 4, 41,128,159,159, + 3,128,187, 32, 8, 2,125,251,246,133, 94, 95,104,172,173,197,169,230, 56,147,147,147,135,135,132,132,120, 26, 12,134,172,192, +192, 64, 78, 81, 81, 17,198,140, 25,131, 3, 7, 14, 52,188,209, 96,241,226,197,207,236, 83, 83, 83,163,105,138,175, 83,215,246, + 31,154, 24,187, 62,124,129,135,167,149, 67, 16, 60,125, 6, 0, 0, 6, 70, 68,194,179,157, 27,170, 74,110,121,234,180,143, 95, +163,136, 50,155, 31,175, 21,164,247, 18, 7, 78, 43,205,187,120, 15,128, 57,129,123, 25,245,189,227,197,185, 92,203,131,135,126, + 57,241,238,136, 17,175,114, 12, 38,218, 24,232,206,177, 58,112,228,164,178,224,113,238, 87,200,253, 45,237,153, 91,165,105,129, +101,170,172,172,132, 84, 42, 69,118,118,182,118,196,136, 17, 2,181, 90,141,123,247,238, 53, 10, 44, 71,123, 91,255,158, 93, 2, +125,215,108,250,254,140, 68, 32, 16, 12,238, 27,234,151,126,239,113, 62,195, 16,143,154,228,101,152,107,247, 50, 50,134, 59,216, +187, 67,113,241, 42, 36,225, 67,161,213, 18,208,232,105,232, 76,128,145,226,193,170, 83, 87,136,188,252, 64, 51, 64,198,237, 84, + 24, 25, 38,158,125,132,176, 96,241,175, 69, 75, 90, 4, 4, 65,156,232,222,189,251,254,167, 93,166,134,223, 0,180, 0,154,235, + 19, 93,242,180,136,106,104, 54,108,234, 56,207,241,190,180,192,138, 67, 51, 35,203,236,237,237, 29,253, 58, 4,120,237,254,238, + 91,232,181, 85,200, 78,223,139, 90, 85, 49, 62,249, 60,193,219,197,197,165, 79, 65, 65, 65,156, 57, 7,203,207,207, 63,112,228, +200,145, 5,157, 2, 2, 66,218,184,186,226,214,163,135,224, 49, 38,240, 76, 38,144,122, 45, 56, 38, 29, 92,253,105,144,164, 4, + 69, 69, 42,236,140,253,253, 78,125, 84,247,166,223,190, 9, 10,110, 35, 70, 99,194,192,225, 96, 12,122,252,214,203, 31, 66,169, + 20, 2,107,107,244, 56,124,241, 73,200, 6,163, 1,143,214,126, 4,158, 68, 10,219,176,190, 45,166, 83,169, 84,214,197,199,199, + 39,102,102,102,118,233,208,161, 3, 86,173, 90,133,188,188, 60, 48, 12, 3,165, 82,169, 41, 41, 41, 41, 40, 43, 43,123, 68, 16, +196,209,194,194,194,221, 48, 35, 82,184,210,135,218,119,246,220,239, 31,118, 14,246,111,255, 74,159,149, 56,113, 98, 57, 42,171, +171, 81,171,229,160, 70,173, 71,173,134,129,179,133, 55,186, 5,133,160,164, 76,135,123,105, 73,249,165, 60,219, 93,173,180, 78, +145,154,154, 10, 15, 91, 2,233, 89,201,176,215,148,163,131,181, 20, 33,225,189,144,147,147, 99,150, 51,101, 52,130, 51,123,222, + 31,163, 5,173,173,173, 81, 85, 85,245,204,126, 98,177, 24,206,206,206,168,174,174,198,161, 67,135,192,152,247, 80, 52,232,116, + 58,248,250,250,226,230,205,155, 56,119,238, 28,250,247,239,143,222,189,123,227,226,197,139, 72, 76, 76, 68,114,114, 50, 8,130, +128,157,157, 93,131,219,214,164,229,118,227, 70,106,140, 84, 74, 44,153, 54,109, 70,224,155,111,190,137,195,135,247, 35,114, 90, + 7, 16,164, 0, 4, 33,192,171, 35,124,177,250,211, 68,116,235,214, 23,246,246, 60,156, 59,151,150,195,225, 88,125,111,134, 88, +253,122,253,250,245, 28,161, 80, 8,157, 78,135,154,154, 26,148,149, 61, 9, 71,245, 34, 7, 75,173, 86, 55, 25, 88, 45, 45,229, +238, 23, 21,213, 76, 5, 89,151,244, 90,169, 33, 37,168,255,224,124, 12,140,152,134,179, 39,246,226,252,153,115,176,231, 62,204, + 49,137,106, 78,151,228,148,170, 10,107,124,118,250,135,190, 77, 41,106,207,236,152,249,106, 22,229, 42,167, 99,150,108,175,174, +108, 41,189,229,233, 63,252,250, 43,131, 87,195,195,186,122,119,116,119,230,151,151, 41,113,228,151,211,105,250,135,135, 79,212, + 87, 84,230, 88,145,171,183,108,217,178, 28, 0,104,154,222,183,105,211,166,183, 63,252,240, 67,135,130,130,130, 70,129,165, 44, + 45, 63,223, 99,248,108, 83, 89,101,149,110,207,166,133, 99, 68, 66, 1,127,217,218, 61, 23, 13, 20,174, 53, 89,185,112, 56, 83, +150,110,251,177,228, 80,204, 94,202, 65,200,195,149, 69, 43,144,253,251, 5,232, 9, 30, 6,255,118, 29, 58,189, 9,213,202, 50, +156,159, 54, 19, 54,114, 91,156, 42,187,103,170, 82, 85, 79, 97,159, 49, 44, 88,252,107,209,156, 22, 41,121, 74, 16,149, 3,120, + 20, 21, 21, 85,250,148,187, 84, 2, 32, 21, 64,167,250,237, 74,158,219,175,132, 32,136,155, 12,195,116,121,138,167,228, 41,161, +245,244,111,221,115,219,164,254, 21,129,213, 44, 74, 75, 75,149, 55, 18,239, 32,254,236,118, 24, 13, 90, 84,213,219, 86,133,197, + 26, 88, 90, 90, 38, 52, 68, 19,127, 1, 2,241,108,172, 12, 70,163,209,188,190,105,243,230,107,239, 78,153, 36,235, 61, 96, 0, + 30,223,190, 5,109,121, 41, 40,147, 9, 20,193, 69, 77,169, 16,197, 69,213,136,250,245,180, 82,173,209,188,254,130, 7,196,243, +156,141,157,220, 25,130,128,208,202, 18, 2,137, 4, 2, 43,203, 63, 28, 43,130, 0, 95,106, 1,174, 68, 10,138,199, 55, 39,157, +168,171,171, 27, 61,125,250,244, 91,167, 78,157,178,153, 48, 97, 2, 94,125,245,213,228,202,202,202,126, 21, 21, 21,230,246, 55, +123,150,243,208, 33,147, 49,112,196,200,173,219,119, 95,157, 58,117,170,237,171, 35,183, 34, 57, 61, 13,149,181,142, 0, 0,103, +123, 9,186,117,248, 8,202, 50, 45,206,156, 62, 81, 65, 27, 53,163,145,118,192,208, 20, 39,195, 48,140,189,189,253, 51,174, 28, + 69, 81,184,120,241, 34,230,206,157, 11,123,139,139, 80, 61,202, 70,199, 94,125, 48,240,205, 41,136,140,140, 4, 69, 81,176,179, +179,123,222,205,248,211,185, 63,141,170,170, 42,180,105,211, 6,191,237,238, 16,160,211, 40,121, 33,182, 0, 1, 43,253,217,243, +195,210, 46, 93,186, 84, 3, 96,183,143,143, 79,204,115, 35, 26,255,196, 73, 16,196,199,159,127,254,249,246,158, 61,123,138,164, + 82, 41,124,124,124, 16, 31, 31,143,248,248,120, 92,190,252,164,127,156,157,157, 29,108,109,109, 81, 89, 89,137,188,188, 60, 53, + 65, 16, 31, 55,195, 73, 87, 87, 83,163,206,158, 61,122,125,196,136,215,237,135, 12,233, 14,153, 76, 5,163,177, 20, 4,201,131, + 64,232,136,221,187,215, 66, 89, 92,142,171, 9, 9,229, 53, 53,156,209, 73, 73,127,154,130,232, 69,233,212,199,198,198, 66, 40, + 20,226,240,225,195, 70, 39, 39, 39,142,181,181,117,147, 14,150, 70,163, 17, 52,197,249,206,162, 59, 5, 0, 62,253, 96,140,203, +198,171,105,197,163, 0,252,228,217,206, 21,231,207,156,195,229,243, 87, 23,135, 5,210, 91,134, 79,236,186, 90,216,255,141,143, +252, 59,191, 77, 73, 45,229,136, 62,114,152, 74, 79,250,246, 51, 77,237, 29, 47,108, 63,242, 81, 11,215,136, 1,128, 26,101,241, +146,168, 47,191,217, 23,181,106,185,104,195, 87,219, 10,213,165, 69, 75,235, 69, 63,211,140,123,213,200,153,147,147,179, 19,192, +206,167,156,230, 31,214,174, 93,123,105,210,164, 73, 14, 13, 14,101, 73,250,175, 9, 37, 64, 66, 64,223,200, 79,122,116, 9,232, +240,217, 87, 63,158,201,205, 43,254,177, 42,163, 49, 6,214,159,210,121,237,218,181,138,206,157, 59, 79,255,104,209,202,111, 87, +173, 94, 65,248,206, 91,140,172,248,155,208,170,245,208, 51, 20, 12, 32,144,180,230, 75, 88, 56, 88,226, 10, 83,206,104, 41,242, +157,236, 63,119,242,111,182,124,190, 36, 88, 78,150,147,229,252,239,228,108,206, 64,184,249,130,191, 95, 52,147,198,205,230,246, +107,130,231, 31,129, 89, 2,203,197,197,165,247,192, 1, 97,232, 57,112, 6,244,218, 74,100,167,237, 65,141,170, 24, 46, 50, 1, +178,115,171,187,215,171, 78,179, 80, 31,153, 61,236,179,205, 91,142, 12,238,218,197,207,199, 69, 46,176,110,227, 1,137,163, 19, + 74, 75, 74,112, 61, 41,203,176,237,204,249, 59,106,141,198,172,169,114,104,154,102, 24,134, 1,143,199, 3, 67, 81,240,159,189, + 8, 36, 73, 62, 55, 90,144,128,101,104, 56, 72, 14, 23, 6, 51,251, 12, 41, 20,138,124,130, 32, 70,207,158, 61,251,247,125,251, +246,145,125,251,246, 13,254,245,215, 95,233,191,146,217,101,119,142,223,163, 2, 71,245,217,242,245,182, 67, 33,161, 97, 30,109, +218,182, 17,244,116,179,130,222, 96, 66,177,178, 12,113, 87,211,181,247,210, 83,243,104,189,110,108, 73, 70,211, 81,220,235, 31, +130,185,206,206,206, 78, 43, 87,174,132,209,104,132,201,100,130,209,104, 68,105,105, 41,146,147,147,209, 57,172, 59,124,223,122, + 27,229,229,229,248,238,187,239,224,234,234,138, 97,195,134, 65,165, 82,225,210,165, 75,185, 77,187, 14, 48, 46,249,120, 34, 7, + 0,184, 92, 24,151, 70, 68, 92, 12, 8, 8, 8,127,181,147,146, 55, 99,246, 19,103,107,221,218,137,188,139, 23, 47,198, 8, 4, +130,157, 15, 31, 62,172,110, 70, 96,195,203,203,139,175,209,104,130, 25,134,225, 84, 87, 87,111,214,106,181, 83,231,207,159, 47, + 95,191,126, 61,130,130,130, 80, 90, 90, 10, 91, 91, 91,200,229,114,212,212,212, 32, 39, 39,199,164,215,235,119,152, 76,166,213, + 74,165,178,164,185, 60, 72, 76, 76,124,104, 50, 5,119, 47, 46,218,126,100,198,123,131,124, 12,134, 80,190,165, 85, 47, 48,140, + 17,149, 21,121, 32,152, 91,250,163,199,126,127, 80, 89, 73,189,158,148,148,116,207,156,107, 68,146,228,123,199,143, 31, 71,195, + 84, 57,133,133,133,217, 36, 73, 54,233, 96,153,131, 77,135, 10, 52, 0,126, 30, 51, 88, 62,175,170,228, 86,123,123,238,195,156, +176, 64,122,203,166, 67, 5, 26, 71,235,186, 53, 5, 37, 23,179, 10,107,206,236,140, 62,114,152,154,242,218,104,147, 92,122,111, +177,189, 27,204,137,140,207, 4, 5, 5,185,147,100,121, 91,101,217,221,196,200,119,222,125,195,138,167, 62, 21,228, 82,218,206, +232,228, 47, 76, 79, 79,127,212, 10, 23,235,233,178,159, 5,160,247, 23, 95,124,113,230,121,107, 92, 89, 90,126,190,123,196, 44, +166,178,178, 42,165, 36,227,215,219, 45,113, 53, 76,127, 51,121, 82,228,174,119,222,154, 78, 5,206, 89,136,252, 11,191, 3, 70, + 3, 20,151,227, 32,182, 48,225, 68,233, 35, 83, 29, 69, 78, 79, 74, 74, 98,163,184,179, 96,193,226,127, 6,102,247,250,246,242, +116, 57,227,213,214,101,144, 87, 91,103, 0, 64,246,195, 66,100, 63, 44,248, 45, 59,167, 96,240, 75, 42,220,198,201,158,137,250, + 80, 12,140,121,147, 61, 63,195, 25, 16, 16,144, 76,146,164,115,107, 78,218,100, 50,229,167,167,167,135,154,147, 78,185, 92, 62, +193,205,205,109,109, 97, 97,225,145,252,252,252, 15,254, 22,117, 95, 63,217, 51, 73,241, 34, 24,134, 9, 2, 64, 16, 36,105,206, +100,207,141,156,206,206,206, 29, 69, 34,209, 78, 14,135,227,222,112, 29, 27,154,241,244,122, 61, 85, 85, 85, 37,212,233,116, 20, + 0,130,199,227, 25,165, 82,169,134,203,229, 26, 77, 38, 83,174,193, 96,120,183,176,176,240,182,185,111, 33,126,126,126,146,136, +208,140,154,134, 41,116,150,124, 60, 17,107,247, 53, 91,118, 26, 57,239,221,187,215,222,198,198,102, 28, 65, 16, 99, 24,134,233, +160, 82,169,180,203,151, 47, 79,137,139,139,171,118,119,119, 31,210,171, 87, 47,226,214,173, 91,120,244,232, 17, 83, 83, 83,115, +136, 36,201,143, 11, 10, 10,178, 91, 89,150,200, 30, 61,130,199, 91, 72, 49,156,102,208, 9, 96, 8,130, 32,110,215,212, 16,167, +228,242,182, 63, 30, 58,116,200,244,178,111, 96, 33, 33, 33, 39,107,106,106,134,221,187,119,175,169,183,170,231,239,163, 38, 57, + 55, 44, 13,252,184,123,159,240,209,241,113,151,143, 46,250, 60,237,211,167,215,189, 63,202, 38,114,226,251,115,215,255,180,245, +171,133, 91,143, 85,236, 49, 39,157, 33, 33, 33,158, 0,198, 51, 12, 19, 64, 16,132, 15, 77, 67, 72, 16, 76, 57, 65, 16,233, 52, + 77,167,210, 52,125,252,246,237,219,133,255, 13,111,180, 79, 79,246, 76,152, 76,214, 38,130, 48,119,178,103,214, 33, 96, 57, 89, + 78,214,193,250, 63, 9,179, 35,112,103,231, 20, 12,206,206, 41, 64,187,118,237,152,251,247,239,183, 74,156, 53,245,246, 93, 31, +161,125,255, 95, 33, 73, 75, 75, 11,249, 39, 51, 72,161, 80,252,172, 80, 40,126,254, 91, 73,227,226,140, 74, 96, 15,158,124, 94, + 10,245, 2,169,155, 57,219,214,213,213,161,178,178,242,165,147,155,145,145, 81, 59, 42,236, 15,103,139,195,129,209,220,125, 7, + 13, 26,244, 88,175,215,159, 3,144, 15,192, 26, 64,185,193, 96,136, 45, 45, 45, 45, 54,153, 76,161,143, 31, 63,254,164,222,137, +252,180,184,184,248,101,227, 72,208, 87,175,166,252, 4,224,167, 63,175, 74,254, 75,151, 42, 57, 57,121,184, 92, 46, 79,182,179, +179,243,214,104, 52,124,141, 70,195,101, 24,166,177,236,139, 68,162,146,134,136,233, 45,193,202, 18,209, 20, 81,102,103, 99, 73, +252,201,169,177,119,193, 97,117,237,157,246,246, 46, 56,220,138,180,229,116,234,212,233, 7,146, 36,219,210, 52,237, 4,192,146, + 97, 80,202, 48, 76,169,201,100,202,191,115,231, 78,225,127, 75, 69, 83, 47,160, 34,192,130, 5, 11, 22, 44,254, 54,133,203,114, +178,156, 44, 39,203,201,114,178,156, 44, 39,203,249,175, 2,201,102, 1, 11, 22, 44, 88,176, 96,193,130,197,223, 11,162, 25, 21, +218,154,182,213,151, 81,178,119, 88, 78,150,147,229,100, 57, 89, 78,150,147,229,252,215,113,182,196,205,246,237,250,135,132, 23, +203,201,114,178,156, 44, 39,203,201,114,178,156,255, 62,206,255, 41,176, 77,132, 44, 88,176, 96,193,130, 5, 11, 22,127, 51,154, + 28, 69,232,233,233,234, 79,154,232,158, 12, 67, 82, 12,201, 24,136,106,245,129,236,231,130,108,186,185,185, 89,115, 73,140, 32, + 24, 70, 66, 16,180,137,166,200,248,156,156,252,116,115, 14,236,231,231,199, 3, 48,149,203,229,134,235,245,122, 57,151,203, 85, +104, 52,154, 43, 92, 46,119, 95, 70, 70,134,254,191, 41,147,122,246,236, 57,254,208,161, 67,214, 17, 17, 17, 90,189, 94,111,228, +241,120,156,253,251,247, 11,166, 77,155, 86, 25, 31, 31,255, 82,163, 32,131,131,131,251,173, 91,183,206,115,192,128, 1, 8, 15, + 15,175, 29, 58,116, 40, 47, 52, 52,148,183,104,209,162,156,148,148,148, 11,173,225,114,116,116,244,231,112, 56,223, 19, 4, 65, + 49, 12, 51,249,169, 16, 12,255, 4, 38, 0, 24, 11, 64, 14,160, 8,192, 65, 0, 47, 59,202,114, 8,128, 17, 0,130,234,151,111, + 1, 56, 14, 32,246, 47,164,111, 8,128, 17, 4, 65,116, 2, 0,134, 97, 82,255, 70,206,160,122,206,191, 45,157,127,245,220, 67, + 66, 66,150,243,249,252,119, 0, 64,167,211,237,145, 74,165, 81, 47,218, 46, 46, 46, 78,135, 38, 66,159,248,181, 5,147,126,220, + 23, 0,224, 63, 34, 19, 0,208,210,114,198,195,151, 27, 69,204,164,251, 50, 47,226, 37,252, 51, 95,122, 84,178, 92, 46,159, 57, +108,216,176, 69,177,177,177,159, 21, 20, 20,236, 2, 11, 22, 44, 88,252,183, 10, 44, 79, 79, 87,255, 49,163, 94,255,252,189,119, +103, 16, 20, 69, 34, 35, 51,147,243,254,156, 15, 6,249, 58, 57,185, 72, 52, 26, 63, 6,160,213, 34,209, 29,181,186,174, 96,251, +214,175, 45, 58,180,111,111, 50,153,104,236,216,185,125,232,161, 99, 71,150,182, 36,178, 28, 28, 28, 60,185, 92,238,230, 57,115, +230, 56, 14, 26, 52,136,116,114,114, 66,126,126,190,229,209,163, 71,219,125,247,221,119, 17, 14, 14, 14,243, 74, 74, 74,114, 94, +230,132,100, 50, 89, 47,185, 13,134,136, 4, 76, 63, 84, 19, 80, 27,137, 11, 10, 29, 19, 91, 84, 84,116,249,101, 51, 73,167,211, +205,174,171,171, 11,243,247,247,167,183,111,223, 78, 76,159, 62,157, 33, 8,130, 84,171,213,123,241,146, 97, 38, 68, 34,209,214, + 1, 3, 6,248,132,135,135,103,199,199,199, 15, 7,112,114,236,216,177, 94, 34,145,232, 30,128, 14,173,225,162, 40,106,111,122, +122,122, 39,181, 90,141,208,208,208,239, 0,116,254,135,202,203,119, 54, 54, 54,134,109,219,182,237, 12, 14, 14,246,174,168,168, +168,125,247,221,119, 95,185,125,251,118,127, 0,111,181,130, 71, 2, 96,139, 88, 44,166,230,205,155,119,250,181,215, 94, 75,149, + 72, 36,210,187,119,239,114,231,206,157, 59, 57, 55, 55,119, 12,128, 57, 0,106, 91,203,105,103,103, 39, 90,179,102, 77, 82,143, + 30, 61,148, 66,161, 80,148,147,147, 67,204,155, 55,111,250,221,187,119,255, 10, 39,111,245,234,213,241,125,251,246,205, 22, 8, + 4,226,220,220, 92,234,195, 15, 63,140, 76, 74, 74,122,105, 78,107,107,107,254,242,229,203, 19,250,244,233,243, 72, 40, 20, 74, +178,179,179,201,249,243,231,191,125,255,254,125,179, 57,123,247,238, 61, 94,173, 86,175,186,116,233, 18, 0,160,123,247,238,203, +117, 58,221,178, 63,137, 26,134, 65,120,120,184,134, 36,201,119, 46, 93,186,244,194,242,186, 47,241,163,241, 0,240,225, 39, 13, +203, 79,190, 95,180, 60, 53,116,195,126,194, 63,179, 85, 5,199,175,237, 19,113,183,253,242,172, 73, 0,240,254,135, 79,254,223, +126,185, 97,253, 76,166, 53,162,205,217,217,249,221,174, 93,187, 46,185,126,253,122,116,104,104,232,220, 93,187,118,113, 35, 34, + 34,214,208, 52,237, 61,100,200,144, 49, 9, 9, 9, 27,238,222,189,187,149,173,226, 89,176, 96,241, 95, 37,176, 72, 19,221,243, +189,119,103, 16,227, 38,140, 47, 82, 20, 43,105,169,133,213,132,131, 49, 49,226,246,237,219,147,154, 45, 91, 96, 44, 45,133,105, +193,130, 30,113,113,113,134, 89,243, 22,168,181,154,186,189,114, 39, 71,241,129,159,247,203,142, 28, 62,212, 19, 64,122,115,206, + 21,151,203,221,124,248,240, 97,153,167,167, 39,116, 58, 29, 74, 74, 74,160,215,235,241,218,107,175, 81, 97, 97, 97,178,200,200, +200,205,246,246,246,175,183,198,201,178,183,183,119,234,224,206, 61, 53,113,236,224,246,253,122,135,138,100, 46,109,129,124, 26, + 5,217,247,186,252,126, 45,105, 78,204,217,139, 89,119,171,244,195, 74, 75, 75,139, 91,155, 73,101,101,101,139,222,125,247,221, + 67, 65, 65, 65, 14, 2,129, 0, 78, 78, 78,196,219,111,191, 93,172, 80, 40, 86,191,108,198, 55, 68, 7, 39, 73,210,244,220,247, +203,208,185, 90, 89, 89,193,210,210, 18, 0, 92,254, 74,129, 24, 51,102, 12,149,155,155,251, 14, 77,211,126, 79,255,175, 80, 40, +188,140, 70, 99,233,195,135,143, 58,105,116,250,110, 51, 63, 92,181,102,220,136,126,150, 9, 9, 9,228,240,225,195,185, 23, 47, + 94,156,208, 10, 39,107, 75,135, 14, 29,110,175, 95,191, 94,151,113, 47, 39,240,183,139, 9,164,163,173,132,246,108,211, 70,154, +150,150,198,139,138,138, 42,137,138,138,218, 2, 32,178, 21, 73,223, 50,112,224,192,188, 37, 75,150, 80, 25, 89, 15,188, 46, 39, +164,192, 82,202, 55,185,187, 58, 11, 19, 18, 18, 56,219,183,111,199,210,165, 75, 91,205,217,175, 95,191,123,159,126,250, 41, 83, +164, 44,111,151,243, 80, 1, 11, 41,223,104,103,103, 39,186,120,241, 34,177,111,223, 62,221,220,185,115,183,208, 52,221, 42,206, + 30, 61,122, 60, 88,177, 98, 5,145,121, 63,167,221,149,132, 20, 72, 37, 60, 99, 27,119, 87,225,141, 27, 55,136,175,191,254,218, +176,124,249,114,179,210,201, 48,204,142, 13, 27, 54,224,151, 95,126, 1, 0,252,252,243,207,240,242,242,122,166, 0,169, 53, 26, + 16, 4,129, 71, 15, 31,138,223,123,239,189, 29, 47,122, 33, 72, 63,238,139,125,137,192,212,169, 83,139,204, 58,131,140, 13,173, +118,173, 26,132,213,140, 25, 51,242,155,216,108,210,214,141,230,139,172,158, 61,123, 46, 58,112,224,128,125, 76, 76,204,135, 71, +143, 30, 5, 0,136,197, 98,241, 55,223,124, 51,115,228,200,145,120,235,173,183, 22,177, 2,139, 5, 11, 22,255,117, 2,139, 97, + 72,138,162, 72, 40,139, 75, 13, 3, 95, 25, 20,249,205,182,109, 2, 62,159, 15,157, 78,135,218,243,231,193,104,181,176, 18,137, + 48,108,216, 48,110, 96, 96,160,229,244,200,200,183,149,197, 69, 59, 41,138,148, 49, 12, 73,181,112,204,169,115,230,204,113,244, +244,244,124,102, 2, 97,147,201,132,226,226, 98, 88, 88, 88,224,141, 55,222,176,255,225,135, 31,166, 2, 48,203,238,119,116,116, +108,227,211,214,254,106,204,183, 31,202, 28,173, 9,160,228, 48,240,248, 30,240,147, 16, 62,142, 30,240,233,223, 91, 52,162, 91, + 96,167,241,235,247,165,144, 36,217, 67,169, 84, 62,106, 77, 38, 61,122,244,232,138, 78,167,123, 71,163,209, 28, 3, 64,198,199, +199, 51,185,185,185,239, 21, 23, 23, 63,126,217,140, 55,153, 76,168,172,172, 4, 77,211, 20,128,198,111,147,153, 83,249,252, 19, + 24, 51,102, 12,149,151,151,247,174,159,159, 95,187,221,187,119, 67,169, 84, 66, 40, 20,130,166,105,116,239,222,221,253,149, 87, + 94,121, 80, 82, 94,101, 99, 52,154,244,249,143, 31,134,174,221,144, 82,210,201,191,195,149,152,152,152, 96,123,123,251, 55,204, + 20, 88, 67, 44, 44, 44, 56,159,125,246,153, 90,230,234, 53, 78,238,238,195,189,122,243,118, 22, 79,204,103,202,170, 84,170,148, +148,148,172, 85,171, 86,245, 62,117,234,148,242,206,157, 59, 67, 96, 94,147,217, 16, 59, 59, 59,209,226,197,139, 9, 43, 59,231, +129,225,189,221,185, 73,183,210, 31,240,197,124, 58, 60, 60,124,196,213,171, 87,191,155, 63,127,126,240,201,147, 39,171, 19, 18, + 18,204,230,180,181,181,229,174, 94,189,218,228,228,236, 49,210,189,109, 59,174,139,204,222, 31, 0,238,102,221,255,182,184,184, +248,193,123,239,189,215,237,244,233,211,170,216,216, 88,179, 57,173,172,172,120,203,151, 47,103,252, 2,131, 35, 3,130, 58,147, +199,127,187,148, 32,146,240, 77,213,181,234,154,244,244,244, 7, 11, 23, 46,236,122,242,228, 73,213,205,155, 55, 91,228,172,171, +171,179,112,117,117,133, 76, 38, 3,173, 86,163,186,186, 26, 71,142, 28,129, 74,165,130,201,100,130, 72, 36,194, 87,177,229,208, +220, 63,142,157,155, 87, 67,173, 86, 91,252, 29,229,164,161,121,175, 53,226,170, 25, 97,133,167,132,215,164, 25,189,190, 97,154, +107, 46,108,112,174,174, 92,185,146, 31, 19, 19,227,232,237,237,141,190,125,159, 76,224, 30, 25, 25,137, 87, 94,121, 5,191,252, +242, 11,126,251,237,183,220, 81,163, 70,229, 36, 37, 37,109,200,207,207,223,193, 86,245, 44, 88,176,248,255,141, 23,218, 37, 12, + 65,212,166,101,100,112,165,214,214,147,190,217,182, 77,192,229,114,241,232,209, 35,164,167,167,163,238,252,121,168,175, 94,133, + 82,169,132, 74,165,130,131,131, 3,162, 54,108,144,240, 68,146,200,123,247,239, 83, 12,201, 60, 61, 65,241,159,134, 90,242,249, +252,240, 97,195,134,145, 79,139,171,167, 81, 84, 84,132, 65,131, 6,113, 56, 28, 78,120, 19,105,126,158,147,112,118, 32,142, 31, +220, 53, 79,230,200,185, 13,220,159, 11, 84, 94, 6,140,149,128,186, 6,120,120, 27, 56,250, 5, 92,203,239, 19, 63,205, 25,235, +228, 34,226, 29,199,159,163,208, 55, 59, 36,212,197,197,197,203,219,219,123,247,232,209,163, 73, 0, 8, 15, 15, 39,188,189,189, +119,186,184,184,120, 53,179, 91,179,156, 26,141,230, 90, 69, 69, 5, 49,124,248,112,187, 30, 61,122,156, 29, 62,124,184, 29, 0, + 66,163,209, 92,123, 89,206,122,216,245,235,215,175,204,211,211,243,103, 15, 15, 15,129, 25,219, 55,114,230,230,230,190,227,235, +235,219,110,247,238,221, 20, 69, 81,216,181,107, 23, 14, 30, 60,136, 75,151, 46,161,164,164, 68, 60,127,254,124,235, 95,207, 39, +159, 59,123, 57,245,196,188, 25,239,210, 3, 59, 7,203, 5,165, 69,101,118,118,118, 67, 1,200,204, 76,231,136,217,179,103,159, + 74, 78,127, 40, 35, 40,129,128,199,227, 9,101, 78,246,142,114, 71,167, 54,114, 71,167,246, 22, 98,177, 77,109,109,109,238,177, + 99,199, 24, 60,233,163,100, 22,231,170, 85,171,110,164,223,203,117,100, 72, 30,159,199,227,242,236,109,172,109,199,188, 58,104, + 4, 0,136, 5, 2,113,109,109,173,226,135, 31,126,104, 21,231,138, 21, 43, 46, 23, 20, 87,202, 56, 92,158, 64, 40, 16, 52,206, + 18,110,107, 99,229, 34,149, 72,196, 58,157, 46,111,247,238,221,198,214,112, 46, 91,182, 44, 62,227,126,174, 19, 73, 82, 20, 73, + 18, 28, 7, 59, 27,123, 59, 59, 59,185,157,141,173,139,136,207,151,212,212,212,228,255,252,243,207, 38,115, 57,139,139,139,145, +153,153, 9,183, 46, 93,112,238,220, 57,184,185,185, 97,236,216,177, 24, 55,110, 28, 68, 34, 17,186, 90, 63,192,107, 67,122,224, +193,131, 7, 77, 94,119,115, 4,147,179,179,115, 92,107,202, 18,240,164, 89,176, 57,113,245, 60,103, 19,219,221,121,222,185, 58, +114,228,136,253,166, 77,155,130, 63,248,224,131,236, 35, 71,142, 32, 40, 40, 8, 25, 25, 25,112,113,113,193,254,253,251, 49,107, +214,172,236,149, 43, 87, 6, 31, 60,120,208, 41, 48, 48,112,241, 75,222, 71,173, 5,203,201,114,178,156, 44, 90, 22, 88, 6, 26, +199,103,207,157, 95, 23, 29, 29, 45,230,243,249,120,252,248, 49,138,138,138,112,244,240, 97,211,196,142, 29, 85,147,131,131,171, +143, 30, 62,204,232,245,122, 48, 12,131,118,237,218, 97,216,176, 97,162,183,167,207, 80, 18,213,234, 3,205,190,209, 50,140,163, +131,131, 67,227,164,185,207, 88, 91, 83,167,194,104, 52,194,194,194, 2, 4, 65, 56,154,115, 2,114,185,124,108,228,135, 3,220, + 44, 61, 44,139,153,162,189,229, 0, 9,112, 44, 0,142, 37, 32,182, 4, 68, 22,128, 64, 2,109,226,213,114,134, 8,127, 52, 56, +228, 13, 23,185, 92, 62,182, 53,153,100,111,111,191, 44, 38, 38,198,225,246,237,219,140, 74,165,130, 82,169,100, 22, 46, 92,232, + 96,111,111,191,236,101, 51,190,176,176,112, 77,100,100,100,209,232,209,163,173,163,163,163,221, 71,143, 30,109, 29, 25, 25, 89, + 84, 88, 88,184,230,175, 92, 80, 46,151, 75,157, 63,127,222,246,195, 15, 63, 28,111, 48, 24, 18,251,247,239, 95, 22, 28, 28,156, +232,228,228,228,209,210,190, 52, 77,251, 53,136, 43, 0,160, 40, 10,124, 62, 31, 66,161, 16, 86, 86, 86,149, 57, 57, 57,198, 54, +118, 60,142,169,182,162,206,195,138, 47, 12,239,228,239,236,232,234,254,122,109,109,109, 18, 0,133,153, 73, 12, 26, 50,100, 8, + 71, 15, 1,102,190,245, 74,251,247,166,132,183,219,185,241,173,126, 91, 62,155,220,253,203, 85,147,250,172, 89, 50,113, 60, 65, + 27, 13, 30, 30, 30, 94, 13, 29,213, 91, 2, 65, 16,157,122,245,234, 37, 50, 82, 2,242,122,202,189,236,187,247,243,148, 35, 6, +135,135, 53, 30, 48, 36,100,156,157,157,221, 48, 79, 79,207,190, 4, 65, 12, 54, 55,157,125,251,246, 21,112, 69, 18,210,221,217, +190,131,173,181,212,187, 97,133,131,131,195, 96, 39,153,236, 45,130, 49,213,202,229,114, 87,129, 64,208,201, 92,206,254,253,251, + 11,140,148,128,148, 57, 88, 59, 58,218, 89,219,141, 26,210, 59,188,127,120,151, 30, 61,186,119, 29, 24,210,165,203, 84,152, 12, +117, 30, 30, 30, 46,230,158,251,177, 99,199,240,245,215, 95,163,167,191, 63, 60, 60, 60,224,224,224,128,243,231,207,227,252,249, +243,144, 72, 36,168,172,172,196,142, 29, 59, 16, 27, 27,251,151, 43,139, 6, 65,212,208, 49,253,239,192,243, 34,171, 37,177,119, +229,202,149, 35, 49, 49, 49,240,246,246,198,180,105,211,188,246,238,221,155,157,157,157, 13,169, 84,138,212,212, 84,124,244,209, + 71,217, 43, 87,174,244,154, 58,117, 42,246,237,219,135,212,212,212,104,182,154,103,193,130,197,127, 2, 13, 77,132, 76,189,171, +195, 0, 32,242,242,242, 42,125,125,125, 93,188,189,189, 73,157, 78,135,170,170, 42,156, 57,125,218,180,255,224,193,147, 58,157, +110, 14, 73,146,188,125,223,127,191,195,209,201,169,223,152,177, 99, 9,131,193,128, 1, 3, 6,240,207,159, 63,111,119, 59, 47, + 79,213,220, 1, 41,138,106,116,143,102,206,156,137,205,155, 55, 3, 0,166, 76,153,242,135,192, 51, 24, 26, 38,209,109, 17, 98, + 43, 83, 68,159, 87, 2, 44,242, 36, 95, 91,104,122, 84,171, 60,179, 92,174, 74, 85,146,174,224, 8, 57, 16, 75, 65, 27, 97,188, + 87, 19,150,148,253,184,173,159,240,148,178,109,207, 14, 93,113, 48,225,104, 4,158,140,126, 51, 11, 34,145,168,171, 68, 34, 65, + 70, 70, 70,121,104,104,104,165,165,165,165,149,143,143,143,189, 72, 36,234,250,178, 25,175, 84, 42, 31,114, 56,156, 62,175,191, +254,250,251, 36, 73,190, 66,211,244,185,178,178,178,173, 74,165,242,161,153, 15,166, 25, 12,195,172, 0,112,168,225, 63,189, 94, + 15,146, 36,193, 48, 12, 70,140, 24,129,181,107,215,250,159, 59,119, 14,151, 46, 93,178,157, 56,113,226, 53,185, 92, 94, 73, 16, +196, 91,133,133,133, 77,186,100,101,101,101,216,190,125, 59, 40,138,130,181,181, 53, 44, 44, 44, 32, 20, 10,209,183,111,223,226, +245,235,215,251,196,196,196, 24,202,218, 41, 25,126, 77, 85,173,157,200,199,153,180,119,240,124,127,250,187,215, 1,196,152,123, +238, 82,169,212,194,130, 82,215, 80,140,134,218,180,101, 39, 71,204, 33, 33,225,242, 32, 36,107,136, 37,203, 63,101,132, 4, 37, + 70, 43,230,201, 4, 0, 30,143, 39,182,226, 67,199, 19,115, 77, 82, 49,159,248, 59,110, 14,145, 72, 36,145,242,160,107,106, 61, +159,228,240, 1, 8, 9,130,168, 51,151, 83, 40, 20, 74, 45,249,140,182,169,245, 22, 92, 30,143, 32, 8, 33,154,232,228, 62,102, + 0,152,152,205, 79, 4, 78,231, 63,110, 25,152, 76, 38,116,233,210, 5, 7,127, 57,135, 51,151,211, 80,158,159,142, 73, 99,135, +162, 77,155, 54,160,105,186,217, 52, 53,244,193, 50,227,165, 0,206,206,206,113,133,103,173, 90,220,214,220,166,193,167, 57,253, + 71,100, 54, 59, 58,209,197,197,101,122, 80, 80,208,148,163, 71,143,162, 95,191,126,136,136,136, 64,135, 14, 29,188, 38, 78,156, + 8, 0,232,221,187, 55,162,162,162,188,198,143, 31,143, 99,199,142,225,212,169, 83, 8, 13, 13,157,155,152,152,168, 84, 40, 20, +219,216,234,158, 5,139,255,122, 60,163, 69,254, 87, 4,214,159, 32,208,235, 59,104,182,111, 71,221,185,115,224,159, 61,139,147, +157, 58,213, 24,141,198, 5, 10,133, 34, 15, 0, 28, 29, 29,231,197, 28, 58, 20, 63,232,194, 5, 75, 93, 70, 6,220,238,220, 1, +167,125,251, 96,115, 15, 28, 21, 21,213, 40, 10, 0, 32, 58, 58, 26,213,213,213,168,170,170,130,209,104,246, 92,194,224,114,137, +158,142,246,238, 80,224, 30,104, 14,199,226,161,191,174,135, 68,109, 89,224,246,208,190,166,138,219,137,200, 82,118,178,208,168, + 12,221, 72,158, 14,186, 74, 13,156,237, 92,192, 33, 57, 61, 91,147, 73, 13,142,142, 72, 36, 42, 79, 74, 74,122,181, 87,175, 94, +191, 2,176,111,248,255, 47,184, 88,247, 11, 11, 11,231,190,148,245, 72,146, 43, 46, 94,188,232, 24, 19, 19, 51,235,155,111,190, + 97, 0, 64,167,211, 53,118,146,215,233,116,224,112, 56,160,105, 26, 18,137, 4, 28, 14,199,233,232,209,163, 78, 35, 71,142,220, + 10,160,201,235, 36, 22,139,225,228,228, 4, 46,151, 11, 43, 43, 43,212, 86, 87, 72,182,127,190,172,175,216,198,201,118,238,220, + 5,228,212,169, 83,211,190,249,230, 27, 87,103,239,118, 1,153,153,153,185, 19,166, 69,198,239,223,191,191, 6,230,119,112,191, +149,157,157,205, 15,240,107, 39, 60,121,168,134, 22,115, 24,136, 75, 63,131, 88, 36, 7,159,239, 10,177, 64, 0, 30,159,111,175, + 40, 42, 42,102, 24,230,129, 89,119, 36,195,164,230,228,228, 80,109,221,101,124, 85,157, 81, 37,166, 76, 22,247,147,111,101,181, + 11, 9,106, 15, 0,154,140, 91, 23, 5,109,189,249,138,138, 42,129,179,179,115,122, 43,210,201,115,114,114,226,167,101,220,223, +109,111,107,233,238,228,228, 56, 16, 0, 12,234,186, 52, 66,167, 41,164, 56, 28,121,121, 69, 69,137, 70,163,185,111, 46,103, 86, + 86, 22,199,187,141,171,224,200,137,179,123, 28, 45,165,110,246, 34,129,147,165,132, 39,229,155, 76,181,124,218, 84,200, 19, 8, +100,133, 69, 69,165, 12,195,100, 53, 69,210,208, 97, 28,248,238,135,250,243,111,112,119,112, 53,155,129,141,131, 51,202,242,238, +226,252,241, 99,152, 50,115,150, 89,247,211,198, 79,167,237,223,248,233,180, 38,195, 51, 60, 39,136,254,122,205,147,225, 23,247, + 60,167, 66,209,124,133, 58,100,200,144,143,119,237,218, 37,110,164,200,200, 64,120,248,147,158, 4,171, 86,173,194,224,193,131, +225,227,227,131,244,244,116,120,120,120,224,200,145, 35,160, 40,138, 59,125,250,244, 69,187,119,239,102, 5, 22, 11, 22, 44,254, +191,162,201, 33,107, 52,195,208,166,138, 10, 48, 58, 93,131, 67,192, 48, 12, 35,254, 67,216,112,197,214,214,214, 4,215,197, 5, +132, 80,248,228, 79,130,248,203, 61,180, 57, 28, 78,171, 4,150,201, 4, 10,132, 1, 12, 24, 0, 36, 8,144,168, 19,241,177,210, + 41,130, 88, 34, 95, 68,149,136,109, 8,130, 34, 65,144, 4, 64, 0,140,129,134,137, 49,181, 86, 25, 49, 53, 53, 53,208,106,181, + 54,222,222,222, 39, 53, 26,141, 77,253,131,141,249, 79, 93, 56,147,201,148, 77,146, 36, 38, 79,158,140, 6,165,175,211,233,144, +149,149, 5,141, 70, 3,157, 78,135,244,244,116, 84, 87, 87, 67,167,211, 33, 49, 49, 17, 30, 30, 30,224,112, 56,242,230,120,141, + 70, 35, 28, 28, 28, 32,151,203,161,173,173,150, 28,222,181,121,248,250, 85, 75,236, 39,120, 51,228,119, 91,190,160,219,183,111, + 95, 25, 16, 16, 96, 47, 18,137, 42,130,130,130,202,246,239,223,127, 20,173, 11,209,112,124,201,146, 37,221,250,246,237,235, 99, +109, 33, 50, 72,132,128,152,170, 5,159, 81,131,107, 44,134,143,103, 59,154, 16,139, 59,140, 31, 63, 94,139, 39,113,161,204,226, +156, 63,127,190,119, 96, 96,160,220,198, 82, 80, 43,226, 17, 69, 66,202,164,168, 76,191,117, 13, 0, 4,214,182,106, 8, 68,129, + 83,166, 76, 81,183,134,115,225,194,133,126,109,219,182,149,241, 56, 76, 29, 97, 50, 22, 54,174,209,106,138, 41, 46,175, 14, 60, + 94,200,220,185,115,245,173,225,252,240,195, 15,125, 59,117,234,228,228, 96, 37,172, 21,113, 81, 40,162, 76,133, 92,157, 54,143, +103,212, 21, 11,109,108,234, 32, 18, 7, 79,154, 52, 73,215, 20,103,131,123,245,188, 51,196,225,112, 80, 88, 88,136,242,135, 87, + 81,254,240, 54,218,147, 42,116,115,114,128, 84, 42,109,241,126, 34,252, 51,137,140,135, 32, 50, 30,130, 32,252, 51,137, 23, 45, + 63, 47,178,228,114,121,179,101,191,217,166,190, 12,191,184,151,225, 60,117,234,212,186,145, 35, 71, 26,198,141, 27,135,179,103, +207,130, 32, 8, 92,185,114, 5, 5, 5, 5, 24, 60,120, 48, 24,134, 65, 74, 74, 10,244,122, 61, 50, 50, 50, 48,102,204, 24, 68, + 68, 68,212,197,198,198,126,198, 86,245, 44, 88,176,248, 79,200,176,243,224, 0, 0, 32, 0, 73, 68, 65, 84, 9,172,190,245,150, + 92,223,134, 21, 6,129, 32,141,158, 61, 27, 86,191,252, 2,238,189,123, 24,243,250,235,150, 2,129, 96,139, 76, 38,235, 44,151, +203,123,138, 68,162,173,243,231,207,183,176,139,138,130,243,165, 75, 80,156, 61, 11, 3,151,123,179, 53, 7, 87,171,213, 13,110, + 12,116,245, 66,206,218,218, 26, 52, 77,195, 92,237,194,152,144,160, 40,185, 7, 62,218,128, 1, 84,167, 85,253, 19, 38,100,175, +118, 58,167,106,223,254, 94, 53,215,123,189, 99, 55,251,221,109,123,220, 84, 19,220, 26,158, 37, 31,133,133,133, 96, 64, 39,180, + 38,157, 26,141,166,170,182,182,150,240,246,246,182, 79, 74, 74,242,110,215,174,157, 29, 0, 66,171,213,222,248, 43,153, 47,151, +203,187, 7, 7, 7, 31, 12, 9, 9,201, 9, 14, 14, 62, 40,151,203,187,183, 98,247,239,146,147,147, 65, 81, 20,166, 79,159, 14, +149, 74, 5,157, 78,135,188,188, 60,228,230,230, 66,167,211, 33, 45, 45, 13,153,153,153,208,233,116, 72, 73, 73,129, 86,171, 53, + 71,184,193,194,194, 2,149,101, 74,201,129,237, 95, 12,255,108,213, 39,162,170,251, 73,200, 47, 44, 6,109, 82, 23,126,242,201, + 39,217,222,222,222, 87,116, 58,157,175,201,100, 26, 6,224, 64, 43,203, 91, 74,135, 14, 29,250,110,220,184,177,231,234,117,223, +243,173,164,213, 16, 88,219,130,111, 35, 6,223, 35, 20, 83, 62,250,146,179,115,231,182, 91, 87,174, 92, 41,129,121, 35,243, 72, + 0, 41, 93,186,116,233, 89, 84, 84,212, 39, 36, 36, 36,212,165,109, 91,137, 68, 38,175, 16,200,156, 75,105,173,230, 26,100, 46, +189,163,163,163,111, 92,184,112, 65,209, 26, 78, 15, 15,143,222,219,182,109,235,214,166, 77,155,110, 98, 75, 75,169, 70,165,250, +193, 88, 87, 23, 67, 73,165,124,136, 36,131, 98, 99, 99,175,236,223,191,191,168, 53,156,126,126,126,189,162,162,162,186,116,238, +220,185,155,171,151,151, 84,228, 40, 43,147, 56,187, 42, 69, 62,254, 60,200, 92, 95,137,142,142,190,122,241,226, 69,115,211, 9, +146, 36,193,225,112, 32,149, 74, 17, 23, 23,135,136, 94, 29, 32, 39,203, 17,212, 70,142,161,211,222,194,111,191,253, 6, 46,151, +139,191,234,182,190,192,125,109, 81, 16,181, 86,124,181,196,169, 80, 40,182, 37, 38, 38,126,245,198, 27,111,224,149, 87, 94, 65, +106,106, 42, 22, 46, 92,152,125,241,226, 69, 0, 64,106,106, 42,214,172, 89,147,157,144,144,128,105,211,166, 33, 60, 60, 28, 41, + 41, 41,209,108,240, 81, 22, 44,254,207,224, 79, 90,228,255, 50, 26,154, 8,227,158,254,246,178,177,177,208,104,234,242,227,226, +226,244,195,134, 13,227,137, 68, 34,140, 29, 55,142,116,115,119,239, 21, 23, 29,125, 94, 34, 22, 19,227,150, 44,145, 6, 6, 6, + 54, 86,242,191,254,250,171,186,170,170,178,204,205,205,205, 58, 47, 47,175,210,156,131,151,150,150, 66, 38,147,129,162, 40,212, +214,214,130,162, 40, 72,165, 82,212,213,213,153,221, 7,171,182,154, 60,123, 37, 46,237,149,126, 99,103,170, 6,101,235, 37, 70, +198,174,187, 5,201,192, 4, 3, 52,117, 12,140, 52,195,185,206, 88,119, 57,239, 19, 81,177,166, 93,233,221,252,115,219, 28,212, +140,238,108,107, 50,169,162,162, 98,217,204,153, 51, 15, 4, 4, 4,216, 91, 88, 88,192,201,201,137,124,231,157,119, 74,242,242, +242, 62,125,217,140,247,243,243, 27,239,235,235,187, 37, 38, 38,198, 54, 39, 39, 7, 0,218, 46, 89,178,164, 95,102,102,230,156, +140,140, 12,115,130,151, 30,220,184,113,227,150,254,253,251, 75,194,194,194, 26, 5,150, 94,175,111,252,126,254,119, 67,115,108, +115,160,105, 26, 66,161, 16, 49,223,110, 30,244,217,170, 79, 68,101, 25, 9,184,117,229, 44, 98, 31,106,235, 54,236,217,119, 77, +216,224, 86,182,246,124, 29,196, 29, 45,172, 45, 14,246, 27, 56,196,121,212,148,153,228,170, 85,171,152,223,207,196, 48,123,190, +153, 13, 47,223,175, 64, 16, 36, 50,239,166, 98,198,184,222, 76,218,237,180, 46, 0, 92, 91,203,185,110,221,186,218,204,204,204, +170,131, 7, 15, 10,221,220,220,188, 73,146, 20, 20, 21, 23,151,141, 31, 63, 62, 53, 62, 62,190,156,166,233,217, 47,149,206,223, +127,175,141,142,142, 22, 59, 56, 56,248,146, 36, 41,168,170,170, 42,157, 57,115,102,114, 76, 76,140,138,166,233, 57, 47,195, 25, + 30, 30, 94,115,224,192, 1,177,187,187,123, 7,146, 36, 5,133, 69, 69,165,227,198,141, 75, 73, 72, 72,168,198,147, 64,163, 47, +196,216,121,153,232,251,218,147,223, 34,145,168,204,207,207,207,110,216,176, 97, 48,153, 76,200,201,201,193,237,219,183, 49,100, +226,155,176,181,181,197,133, 59,119,160, 80, 40,176,116,233, 82,168,213,106,220,191,127, 95,241,119, 86, 30,245, 77,123,140, 66, +161,248,211,205,154,126,220,183, 49,136,232, 51,226,202,147,136,107,174,159, 85,115,156, 0, 48,104,208,160,105, 35, 71,142,196, + 47,191,252,130,133, 11, 23,102,175, 92,185,210,107,220,184,113, 72, 79, 79, 71,112,112, 48, 22, 44, 88,224,181,113,227,198,108, +134, 97,188,122,244,232, 1, 87, 87,215, 87, 21, 10,197, 71,236,115,139, 5,139,255, 19,136,123,238,251,127, 66, 96, 1, 79,117, + 40, 99, 44, 69,227,118,109,219,106, 53,107,222,130, 90,127,127,127, 27, 39, 39, 39,144, 36,137, 33, 67,135, 18,221,207,156,177, +224,202,229,176,235,216, 17, 12,195,128,166,105, 92,190,116, 9,231,207,159,175,253, 97,207,119, 46,145,111,191, 61, 2, 64,147, + 35,119, 26,154,213, 8,130, 64, 73, 73, 73,163,192, 18, 10,133, 40, 44, 44,132, 76, 38, 3,143,199, 3, 69, 81, 28, 0, 20,128, +102,155, 29,101, 50,217,247, 81,107,210, 23,231, 5,125,232, 25, 46, 38,137,211,181, 69, 32, 65,192,200,208, 32,213, 12,104,154, +129,214, 0, 4,184, 80, 54,231,180,176,190,145,118, 54, 71, 38,147,125,175,248,127,237, 93,121, 92, 84,213,251,126,238,157,125, + 99, 88, 5, 70, 80, 84, 16, 65, 80, 17, 23,114, 41, 67,201, 52, 41,203,181,178,220, 77, 49,205, 22, 83, 83,127,226,146,230,146, +154,153, 75,106,185,175,153, 89, 46, 41,229, 23, 50, 23,100, 81, 17,149, 77, 65,129, 97,223, 97,214,187,252,254,128,161,145, 16, +102, 80, 19,235, 62,159,207,253,220,185,115,103,158, 57,231,220, 59,231, 60,247,125,223,243, 30,181,229, 99,205,157, 59,119,206, +105, 52,154,169,149,149,149, 71, 0,144,151, 46, 93, 98,238,222,189, 59,221,210,128,244,250, 32,149, 74,103, 31, 62,124,216, 97, +233,210,165,197,191,255,254,123,105,255,254,253,109, 87,172, 88,225,248,230,155,111,206,134, 5,217,225,213,106,181, 6,192,174, +220,220,220,233, 61,122,244, 64, 81, 81, 17,244,122, 61,226,226,226,208,190,125,123,196,196,196,192,199,199, 7,209,209,209,240, +245,245, 5, 77,211,208,106,181,160, 45, 72,180,149,125, 63, 67, 33,211, 21, 43,179, 47,159,196,237,107, 49, 56,153,166,171, 90, +253,221,193,147,157,187,118,175,180, 84,248,154,163,131,179,204,223,197,201,241,215,181,107,190,176,201,186,124, 10,135,182,174, +101,127,251,229,151,110, 98, 37,222,237,245,210,251, 35,141, 6,180, 98, 88, 8,251,246,237,141, 87,187,221, 32, 4, 58, 20,255, + 30,219,112, 38,243,250, 56,143,236,222, 31,168, 5,252,219,181,107,247, 42,143,199,107, 1,192, 64,211,116, 34, 44, 92,130,230, + 97,229,212, 2,254, 42,149,234, 85,137, 68,226, 70, 16,132, 70,163,209, 36, 63, 14, 78, 79, 79,207, 87,121, 60, 94, 75, 0, 85, + 52, 77, 39,193,202,165,114, 66, 66, 66, 86,239,216,177,227, 35,157, 78,231,104,102,109, 37, 78,157, 58, 5,189, 94, 15,145, 72, +196,202,229,114,220,191,127,159, 5,160,102, 89,118,234,227,234, 56,134, 15, 31,142, 75,151, 46, 45, 6,176,168,161,207, 21, 21, + 21,241, 29, 28, 28, 40,115,225,245,176, 44,240,150,112, 94,190,124,121,229,228,201,147,103,159, 62,125, 58, 51, 60, 60,188,235, +184,113,227,112,236,216, 49,180,110,221, 26,183,111,223,198, 71, 31,125, 4,130, 32, 60,215,172, 89, 19,127,224,192, 1, 85, 78, + 78,206,151,220,152,197,129,195, 51, 5,226,223, 82,145,122, 99,176, 8,134, 16,120,183,111, 79,235,171, 42,190,159, 52,126,124, +213,141, 27, 55, 64,211, 52, 40,138,130, 54, 58, 26,149,191,254, 10,138,162,192,178, 44, 46, 95,186,132,153, 51,102, 84,104,171, + 42,182,183,109,219,134, 37, 88, 86,110, 70,245,183,213,182,245, 38, 95, 32,170, 93,132, 26,141, 6, 2,129, 0, 10,133, 2,249, +249,249, 16,137, 68,144, 74,165, 8, 8, 8, 32,221,221,221, 67,235, 41,222, 3,156,113,113,113, 70,148,233, 70,252, 52,246,131, + 28,247, 42,138,157, 98,215, 22,173, 4,210,234,120, 43, 0, 45,108, 72,132,248,241,225,192, 47, 96,175,239,124, 75, 77, 80,165, + 35,226,226,226,140, 13,113,214,133, 74,165,234,224,239,239,255,141, 41, 15,214,243,207, 63, 79,118,234,212,233,107,149, 74,213, +161,129,175, 53,200, 41,145, 72,196, 0,112,246,236,217,162,168,168,168,193,103,207,158, 45, 2,192,154,222,183,132,147, 36,201, +111,183,110,221, 10,153, 76, 6,138,162,160,215,235,161,211,233,160,215,235,255,182, 57, 57, 57, 33, 34, 34, 2, 12,195,156,104, +172,156, 29, 59,117,169, 40,229,219,229,238, 60,254, 27, 78,165, 27, 42,154, 32,174,106, 57,253, 92,229, 62,110, 45,170, 5, 70, +225,205,139, 72,185, 30,131,147, 39,126,142,215, 2, 89, 37,101, 88, 94, 82,134, 46,149, 90,216,247,236,136,130, 95,143,204, 37, + 62, 30, 3, 2, 68,189,107,230, 89,196, 89, 35, 80,166,209, 52,221,147,166,233,158, 0,166, 53, 32, 90,172,226,212,106,181, 65, + 26,141,230,177,114, 90, 91, 78, 83, 12, 22, 0, 44, 92,184, 48, 58, 42, 42,106, 84,116,116,116,127,211,150,144,144, 16,124,231, +206,157,224,172,172,172,224, 59, 63,139,121, 9, 9, 9,252,152,152, 24, 65, 76, 76, 76,235,216,216,216,211,150,222,159, 15,131, +121,128,187, 90,173, 14,175, 99,105,170,229, 36,252,110, 17,223,172, 9,219,115,248,240, 97,215,199,197, 9, 0,183,111,223,254, +102,199,142, 29, 30, 1, 1, 1,238,166, 84, 12,219,183,111, 7, 80,157,201,126,237,218,181,232,213,171, 23,220,221,221,157, 99, + 99, 99,219,101,103,103,111,181,246,191,217, 68,112,156, 28, 39,199,201,193, 2,129, 69, 48, 52, 77, 51,112,118,113,182,201,207, +203,219, 24, 22, 54,173,112,201,146, 37,218,200,200, 72,232,111,221,130, 54, 46, 14, 17, 17, 17,248,224,131, 15,170,222,155, 58, + 85,173,173,170, 88,239,234,226,236, 68,211, 12, 8,130,105,208, 66, 66,146,100, 90,114,114, 50, 0, 64,167,211,225,235,175,191, + 54, 26, 12, 6, 40,149, 74,176, 44,139,109,219,182, 49, 0, 48, 96,192, 0,185, 64, 32,176,104, 9,146,236,236,236,107,101,247, +179, 7,254,240,230,180,180,155, 7,126, 46,235, 92,168,199, 40,137, 10,175,119,102,209, 78,146,129,123, 23,191, 43,189,184,101, + 88, 90, 85,241,253,151,179,179,179,175, 89,219, 72,174,174,174,255,183,111,223, 62,231,216,216, 88, 86,167,211, 33, 43, 43,139, +157, 61,123,182,179,171,171,235,255, 61,138, 74, 47, 41, 41, 1, 73,146, 76, 77,187, 48,214,170,247,172,172,172,132, 35, 71,142, +252,116,238,220, 57,184,187,187,131,166,233, 90,129,101,190,231,243,249, 32, 8, 2, 91,182,108, 41, 33, 8, 98, 94, 99,188, 34, +145, 8, 91, 15,157, 60,245,201,230,163,135, 14, 69, 68, 31,109,170,229, 10, 0,100, 54,202,165, 95,174,254,194,214,228,106,220, + 23,155, 93, 70,208,108,253,174, 58, 67, 86,245, 61, 82,191,192,106, 26,231,147, 40,231, 83,228,124,154,168,158,233,167, 38, 90, +182,108,137, 31,126,248,193,234, 24, 44,191,118,196,223,130,219,155,202,153,144,144,240,197,168, 81,163,114,195,195,195, 55,105, +181,218,202,154,135, 55,195,151, 95,126,185,230,253,247,223,207,205,202,202,226, 44, 87, 28, 56,112,120,170,168, 55, 77, 3,195, + 35,255,220,178,117,243,224,131,251, 15,184,242,120,164,235,157, 59,119,175,188, 59,113, 98, 86, 84, 84,148,131,160,125,251,158, + 36, 73, 50,250,185,115, 47, 86,148,149, 22,237,254,254, 59,143,182,109,219, 4,212, 44,246,204, 50, 60,242,207,134,126,176,168, +168,104,231,172, 89,179,122,238,218,181, 75,184,122,245,234,202,172,172,172, 51,151, 47, 95, 30,188,105,211, 38,201,182,109,219, +170, 74, 75, 75,143,159, 60,121,114,104,112,112, 48,165,215,235, 45,206, 47,148,151,151,151,136,188, 60, 95,114,237,182,183,147, +182,238, 25,200,242,200,222,208, 10, 65,176,244, 5,146,170, 56,147,151,157,189, 15, 0,213,148, 70,146, 72, 36, 1, 82,169, 20, + 41, 41, 41,197, 61,123,246,212,139, 68, 34, 65,155, 54,109, 28, 37, 18, 73, 64, 83, 27,158,101, 89,182,184,184, 24, 44,203,242, + 1, 16, 52, 77,243, 1,128,105, 44,105, 81, 29, 8,133,194, 55, 39, 76,152,240,211,166, 77,155, 6, 14, 24, 48, 0,158,158,158, + 48, 26,141,240,241,241,129, 94,175,135,183,183, 55,180, 90, 45,190,250,234, 43, 84, 84, 84,124,148,157,157, 93,220, 16, 31,195, + 48, 16,139,197, 16,137, 68,240,233,216,169, 74, 34,145,160,169,226, 10, 0,228, 34,180,187,127,233, 4, 82,174,199,226, 96,156, +186,164,210,192, 12, 74,202,175,186, 81,247,115, 85,122, 84, 6, 15,154, 86, 45,188,141,168,120, 28,156, 79,162,156, 79,155,211, + 60, 6,203,146,207, 62, 46, 60, 44, 38,170, 33,220,188, 11, 98,218,243, 27, 89,220,220, 88,111,142,171,166,112,154,144,153,153, +185,197,180, 4, 14, 73,146,169, 51,103,206,156,157,149,149,181, 78,173, 86,111, 82,171,213,139,184,174,157, 3, 7, 14,205, 82, + 96,221,185,147,153,120,228,216,209,207,142,254,112,164, 15,203,146, 60,150, 32, 42, 1,242,231,196,196,196, 7,130,215, 61,237, +237,109, 38, 76,158, 48,154, 96, 8, 1, 65, 48, 52,195, 35,255,188,115, 39, 51,177, 17,107,211,245,254,253,251,111, 12, 14, 14, +158, 72,211,244,170,148,148,148, 51, 36, 73,198, 15, 26, 52,232, 19,138,162,214,164,165,165,157,241,241,241, 57,123,240,224,193, + 79,105,154,182,214, 66, 68,101,103,103,239, 66, 3, 49, 96, 77,196, 18, 0,182, 98,177,184, 52, 54, 54,246, 64,159, 62,125,222, + 36, 8,194, 22, 64,105, 83, 9,117, 58,221,204,242,242,114,167,209,163, 71, 27, 1,248,188,241,198, 27,243,146,147,147, 5,149, +149,149,105,214,240,100,100,100,232, 60, 60, 60,134,134,133,133,109, 23, 10,133, 3,240, 87,146, 54,147,144, 3,203,178,160,105, +250,120, 77,219, 60, 20, 2,129,160, 98,200,144, 33, 10, 11, 44, 92, 21,150,150, 47,167,160,124,230,178,157, 39, 87,232,140, 12, + 67, 49,236,212,164,188,170,122, 71,253, 43,137,240,127,220,156,214,224, 89,225, 4,128,105,207,111,220,131,155, 27,107, 5,148, +201,109, 88,247,248, 73,161,198,226,196, 2, 88,220,216,103, 27, 90, 87,176,169,156,117,145,149,149,245, 45, 55, 83,144, 3, 7, + 14,255, 53,112,254,105,142,147,227,228, 56, 57, 78,142,147,227,228, 56,255,115, 32,185, 38,224,192,129, 3, 7, 14, 28, 56,112, +120,188, 32, 26, 80,161,214,172,148,221, 20, 37,155,192,113,114,156, 28, 39,199,201,113,114,156, 28,231,127,142,179, 49,238, 4, +112,120, 34,194,139,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,255, 30,231,191, 10,156,139,144, 3, 7, 14, 28, 56,112,224, +192,129, 19, 88,205, 2,239,162, 58, 41,100, 2,128, 95,107,142,155, 10, 41,128,185,102,124,167, 0,124, 10, 64,204, 53,115,179, + 6,143,107, 2, 14, 77,133, 74,165,234,208,177, 99,199,216, 70,146, 21,115,224,192,225, 25, 6,255, 97, 39, 60, 61, 61, 47,144, + 36,217,142, 36,171, 53,152,121, 46, 36,211,235,186,123,150,101,239,220,188,121,179,247,195, 56,219,182,109, 91,203, 73,146, 36, + 8,130, 0, 73,146, 48, 26,141, 54, 60, 30,175,188, 62, 78,154,166, 51,147,146,146,186, 55,163, 54,219, 99,111,111,111,220,180, +105,211, 55,129,129,129,237,139,138,138, 42,167, 76,153,242,114, 66, 66, 66, 8,128,119,172,228,234, 68, 16,196,238, 30, 61,122, + 28,125,255,253,247, 15,251,249,249,217, 84, 86, 86,138, 15, 30, 60,232,186,101,203,150, 63,104,154,158, 0, 32,145,187, 77,155, + 15, 92, 93, 93, 3, 9,130,216,168, 80, 40,186, 87, 84, 84, 92, 1, 48, 93,173, 86, 95,229, 90,230, 31,197, 36,145, 72, 52,200, +219,219,187,167, 78,167, 43,190,115,231, 78,116, 77, 74,151,156,199,196,111, 11,224,255,196, 98,113,144,151,151, 87,171,228,228, +228,251, 6,131,225, 50,170,211,181,148, 62, 42,185, 74,165,234, 16, 20, 20,116,126,249,242,229,142,243,230,205, 59, 31, 29, 29, +221, 87,173, 86, 39,113,151,149,195,211, 64,171, 86,173,236, 42, 43, 43,183,147, 36, 25, 40,145, 72, 92,109,108,108,160, 80, 40, +114,196, 98,113,188, 76, 38,155,120,242,228,201, 18,174,149, 30,179,192,226,241,120,238,209,209,209,206, 54, 54, 54,160,105, 26, + 12,195,128, 97,152,218,245, 7,107,150, 20, 52, 9, 43,208, 52,141,224,224,224, 6, 87, 19,230,243,249,173, 98, 99, 99,157, 21, +138,191, 82, 45, 25, 12, 6,116,233,210,133,137,139,139,115,174,187,144,176, 94,175, 71,183,110,221,216,102,212, 94, 99, 28, 29, + 29,245, 25, 25,247,122,105,117,134,222, 97,179,151,254,223,232,215,250,217, 94,188,120,145,124,245,213, 87, 5,231,206,157,123, + 23,192,110, 11,185,164, 4, 65,236, 88,176, 96,193, 23,124,161,204,249,200,201, 11,252,175,183,238,187,223,169, 99, 91, 98,214, +140, 48,217,204,153, 51,163,125,125,125,191,163,105,250,121, 0, 58,238, 86,109, 30,255, 23,129, 64,240,211,138, 21, 43,220,114, +212,106,172, 93,183,238, 57, 0,155, 0, 60,199, 53,205, 63,134,185,139, 23, 47, 94,241,246,219,111,131,162, 40,104, 52,154,150, +169,169,169,254, 11, 22, 44,120, 35, 53, 53,181, 39,128,180, 71,228,111,225,237,237,125,107,214,172, 89, 14, 61,123,246, 4, 73, +146, 40, 41, 41,105,121,254,252,249,231,118,236,216,241,238,189,123,247,124, 1,228, 63,202, 15,216,219,219,239, 93,179,102,141, +163, 88, 44,198,247,223,127,239, 56,106,212,168, 63, 0, 60,255, 8, 34,139,116,116,116,156, 9, 32,152, 97, 24, 49,128,203,197, +197,197,203, 0, 24,184,219,133, 67, 67,112,116,116,156,148,155,155,251,141, 76, 38, 19,218,217,217, 65, 42,149, 66, 40, 20, 66, + 36, 18,181,182,183,183,111,173, 80, 40, 94,121,243,205, 55,167, 31, 56,112, 96, 59,215, 90,143, 81, 96,145, 36, 9,169, 84,138, +131, 7, 15,130,199,227, 65, 40, 20, 66, 32, 16, 64, 32, 16, 60,240,218,116,220,170, 85,171, 70,127,204,100,149, 58,126,252, 56, +108,109,109,161, 84, 42,209,177, 99, 71, 16, 4, 1,177, 88,140,136,136,136, 7,120,187,119,239,254, 72, 89,196,155,130, 17, 3, +170,147,116,214,151,188, 49,116,122, 38, 94,125,123,249,240, 42,157,241, 5,150, 37, 52, 57,197,198,162, 37,171,191, 73,236,234, +223,145, 56,116,232, 80, 55, 39, 39,167,183,172, 16, 88, 31,244,236,217,243, 56, 5,145,203,132,113,227,199,141, 39, 9,106,216, +248,143, 23,159,143, 75, 45,222,238, 23,184, 47, 63, 63,115,234,215, 95,127,157, 20, 22, 22, 54, 19,192, 42, 75,203,223,189,123, +247,123, 12,195,180,170, 17,201, 5, 82,169, 84, 21, 25, 25, 73, 53,131,123,173, 37,128,213, 0,140, 0, 86, 2, 48, 79,186,217, + 65, 40, 20,174, 50, 24, 12, 69,168, 94,232,247,126,115,252,179,184,185,185,249,190,243,206, 59, 78,133,249,249, 88,187,110, 93, +109,147,195,130, 69,201, 31, 55, 2, 3, 3,219, 73, 36,146,213, 0, 2,117, 58,157, 27, 0, 72,165,210, 44,150,101,127,212,104, + 52,243,227,226,226, 52, 77,125,160, 5,224,143,135, 47,217,196,174, 90,181, 42,233,211, 79, 63,189,243, 20, 56,219,184,184,184, + 44, 31, 57,114, 36, 78,156, 56,129,147, 39, 79, 26, 37, 18, 9,127,220,184,113,196,244,233,211,237,103,205,154,245, 10,128,175, + 30,177,105, 95, 89,188,120,177, 67,199,142, 29,113,228,200, 17, 92,189,122, 85,211,161, 67, 7,105,191,126,253,192,227,241, 28, +230,207,159, 63, 24,192,206, 71,249,129,226,226,226,101, 75,151, 46,221,181,113,227, 70,155,180,180, 52, 44, 94,188,216,233,253, +247,223,143, 4,208,207, 10,145, 37, 6, 48, 19, 64, 48,143,199,123,126,220,184,113,212,140, 25, 51, 4, 36, 73, 26,215,175, 95, +223, 98,251,246,237,163, 5, 2, 65, 96, 97, 97, 97, 5, 56,160,129,113,206,192, 48,140, 0,128, 4,128,174,177,227,127, 83,221, + 29, 28, 28,166, 21, 21, 21,109,106,217,178, 37, 90,180,104, 81, 59,214, 50, 12,131,202,202, 74,104, 52, 26,180,107,215, 78,216, +177, 99,199,109,211,167, 79, 23,124,243,205, 55,155,185, 59,198,122,129,213, 15, 64,164,217,123,253, 0, 68, 18, 4, 1,134, 97, + 32, 16, 8,192,227,241,192,231,243,107,133,143,249,107,211,246, 16, 33,148, 80,231,102, 38,202,203,203,107,197,149,173,173,109, +173, 37,204,104, 52,254,141,147,166,105,144, 36,201, 54,196,249,152, 80,203,121,120,189, 47,118,198,204,126,115,103, 76,245,241, +224,183,171,247, 59, 99,128,136,203, 83, 87,175,218,220,167,213, 7,203,190, 95, 81, 88, 88,146,231,231,222,130,122,235,237,126, + 30,162,130,220, 2,199,182,109, 67, 1,228, 89, 81,206,190, 83,167, 78, 61,114,228, 92,138, 92, 44, 22,137,120, 36,120, 29, 60, +219, 9,220,148,237, 29, 90,188,220, 83,148,158,150,246,199,187,239,190, 59, 53, 44, 44,204,209, 76, 96, 53, 90,119,150,101, 85, +103,206,156, 1,159,207, 71, 72, 72,136,125,205, 53,166, 44,169,251,147,104, 79, 51, 44,200,205,205,125, 83,171,213,162,123,247, +238,175, 21, 22, 22, 6, 3,136, 7,208,121,232,208,161,127, 28, 62,124,216, 38, 46, 46, 14,207, 61,247,156, 20,192,168,167, 88, +206,191, 65,165, 82,157, 1,240, 18, 65, 16,208,107,181,250,213, 95, 62,176,204, 93, 76, 29,113,245,196,203, 25, 16, 16,224, 43, +145, 72, 46,124,249,229,151, 74, 63, 63, 63, 66, 32, 16,128,162, 40, 36, 39, 39,183,218,179,103,207,123, 87,174, 92, 25, 28, 24, + 24,232, 87,207,162,230,150,212,221,255,143, 63,254,168,244,244,244,172, 87, 48, 86, 85, 85,241, 60, 61, 61, 95,124,136, 24,122, +210,156,153,185,185,185,175,191,244,210, 75, 83,115,114,114,110, 81, 20, 53, 7, 64, 39, 39, 39,167,184,225,195,135, 67, 42,149, + 6,107, 52,154,175, 30,229,186, 59, 59, 59, 15,237,221,187, 55, 54,110,220,136,149, 43, 87,134, 0,248,237,151, 95,126, 25, 80, + 86, 86, 22,241,218,107,175,193,206,206,238,245,146,146,146,157,143,112, 47,117,232,217,179,231,182,143, 62,250,200,230,151, 95, +126,129,183,183, 55,202,202,202, 48, 97,194, 4,231, 13, 27, 54,252, 15,192,139,102, 34,235, 97,156,126, 98,177,120,231,254,253, +251, 21,158,158,158,158, 66,161,144,244,244,244, 68, 81, 81, 17,180, 90,173,120,217,178,101,157, 37, 18,201,213,175,190,250,106, + 39,128, 97, 79,249,127, 84, 10, 64, 9,192, 14,214,185, 87, 19, 26,224,171,141, 79, 21, 8, 4, 16,139,197,144, 72, 36,144, 72, + 36,184,115,231,206, 15, 60, 30,111, 60, 65, 16, 70, 75, 56,137,191, 6,174, 0, 0,209,141, 29, 3, 96,154, 65,191,228, 78, 16, +196,122, 0,193,168,142,163,142,116,118,118,254, 32, 55, 55, 55,195, 82, 78,149, 74,229, 88, 88, 88,248, 85,203,150, 45,225,236, +236,140,154, 7,114,116,239,222, 29, 90,173, 22, 55,110,220, 0,195, 48, 72, 77, 77,133, 82,169, 68,231,206,157,191, 10, 15, 15, + 63, 18, 30, 30, 94,248, 4,235, 94,175, 22,121,214, 5,214,255,106,158, 44, 77,149, 49, 29,131,166,233, 90,129, 85, 87,252,212, + 21, 92, 4, 65,128,101, 89,162, 17, 11, 22,169,215,235,107,197,149, 82,169,172, 21,103, 20, 69,213, 43,176,154, 10, 59, 59,187, + 95, 75, 74, 74,214, 1, 56,211,148,239,143, 27, 55,238,111,241, 28,115,231,206,189,159,159,159, 79, 15,237,219, 65,188,123,247, +137,194,119, 67, 95,116,245,243,114,247,145, 59, 58, 7, 84, 85, 85, 93, 1, 32,176,198, 32,226,231,231,103,179,121,127,100,222, +219, 51, 87, 47,113,119, 81,208, 61,188, 93,148, 94, 14,114,145,163,132, 79,217,177, 84,137, 76, 38,243, 7, 80,104,109,217,109, +109,109,113,252,248,241,230,118,175,217,107, 52, 26, 20, 23, 23, 99,203,150, 45,202,169, 83,167,158, 43, 44, 44,252, 96,232,208, +161, 27,143, 28, 57, 34, 47, 41, 41,129,193, 96, 0, 0, 77, 51,252,159, 44,181,183,183,127, 33, 56, 56, 88,116,224,208, 33, 17, +203,178,149,168, 94,142,168,130,101,217,247,255,233,194, 72, 36,146, 79,150, 45, 91,166,244,243,243, 35, 10, 10, 10,192,178, 44, + 72,146,132,147,147, 19,102,207,158, 45,153, 63,127,190, 91, 82, 82,210,103,104,194,178, 51, 0,136,135, 9, 33, 0,144,201,100, + 52,172,159, 28, 83, 47, 39, 69, 81, 68,159, 62,125,102, 23, 20, 20,116,214,104, 52,159, 91,192, 67, 1, 56,158,153,153,105,126, +115, 95,189,117,235,150,134,207,231, 75,219,182,109, 27,148,152,248,104, 33,139, 29, 58,116,232, 37, 16, 8,112,249,242,101,157, + 89,231, 30,121,237,218, 53,221,176, 97,195,196,173, 90,181,234, 85, 82, 98, 89, 72,138, 74,165,234,224,229,229,117,214,201,201, + 73,106, 90,178,202,209,209, 81,176,106,213, 42,155,204,204, 76, 80, 20,133,121,243,230, 33, 52, 52, 20,246,246,246, 24, 63,126, +188,203,182,109,219,246, 2,232,214,144,229, 74, 44, 22,239, 76, 73, 73,241, 81,169, 84,210, 75,151, 46,161, 75,151, 46, 40, 40, + 40, 64, 78, 78, 14, 42, 42, 42,144,147,147,131,137, 19, 39, 58,175, 93,187, 86,213,140,254, 67, 37,124, 62, 31,114,185,220,174, +180,180,244, 81,226,216,196, 0, 68, 0,192,231,243,107,197,149, 88, 44,134, 88,252,159,152, 23,228, 70, 16, 68,162, 64, 32, 16, +203,229,114, 33, 73,146,144,203,229, 47,187,187,187,223, 8, 9, 9,233,180,103,207,158,116, 75, 72,180, 90,237,110,169, 84, 42, +104,209,162, 5, 0, 96,224,192,129, 24, 55,110, 28,242,243,243,153,236,236,108,248,248,248,144,145,145,145,200,205,205,197,213, +171, 87,209,163, 71, 15,129,131,131,195,110, 0,131,159, 96,221, 30,170, 69,158,101,129, 85,183,114,181, 96, 24,230, 1,113, 85, +159,229,202,220,130,213,152, 59,143, 32, 8,208, 52, 13, 87, 87, 87,200,100, 50,200,100,178,218,115, 38, 49,103,190,177, 44,219, +100, 23, 97,251,246,237,251,203,100,178,231,207,157, 59,247, 26,128, 8, 75,191, 55,114,214,173, 90,171, 85, 93, 4, 4, 4, 92, +152, 55,111,222,160,223,127,255,189,184, 87,151,118,140, 56,251,126,161,204,222,169, 11,209,194, 57, 36,108,242,148,139, 0,246, + 91, 81,196,108,173, 86, 43,110,227, 74,106,178, 75,203,244,237,148,182,118,237,108, 21,178, 54, 78,182,142,246, 18, 17, 41,119, +113,110,105, 52, 26, 75, 0,100, 55, 70,100,238, 22, 20,139,197,122,130, 32,248,118,118,118,176,181,181, 53, 20, 23, 23,107, 3, + 3, 3, 33, 18,137, 10,132, 66,161,197,238,194, 30, 61,122,228,210, 52,237,220,208,103,132, 66, 97,222,165, 75,151, 92, 44,172, +239,252,128,128,128,126,155, 54,109,106,225,237,237,141, 45, 91,182, 40,143, 28, 57,178,115,239,222,189, 40, 41, 41,193,221,187, +119, 49, 97,194,132, 50, 84,187, 17,155,155, 41,253,252,136, 17, 35,176,125,251,118,182,230, 33, 66, 78, 16, 68, 23, 91, 91,219, +219, 55,111,222,252,199,227, 92, 72,146,124,217,199,199,135, 40, 45, 45, 5,203,178,224,241,120, 15,108,179,103,207,150, 78,156, + 56,113,193,115,207, 61, 55, 91, 32, 16,148, 81, 20,117,160,162,162,226,243, 27, 55,110, 52,171, 96,213,231,159,127,254,195,251, +247,239,135,122,120,120,252,252, 8, 52, 44, 69, 81,122,150,101,165, 60, 30, 79,240,168,101, 34, 8,130, 87,211, 31,105,205, 44, +191, 84,205,177, 24, 86,204, 30,117,112,112,216,187,103,207, 30,119,119,119,119, 24,141, 70, 24,141, 70, 84, 86, 86, 34, 50, 50, + 18, 58,157,174,118, 81,246, 47,190,248, 66, 59,125,250,116,201,161, 67,135,242, 52, 26,205,152, 70,104,103, 30, 62,124,216, 70, +165, 82, 73, 53, 26, 13,210,210,210,208,173, 91, 55,148,151,151,163,178,178, 18, 85, 85, 85, 48, 24, 12, 40, 45, 45,181,163,105, + 90,223, 92,174, 53,143,199,131, 88, 44,134, 64, 32, 40,105,213,170, 21, 72,146,148,100,100,100, 52,197,229,166, 4, 80,198,231, +243, 69,230,194, 74, 34,145, 32, 33, 33,225, 96, 3,214,171,250,111, 30,243, 96, 98, 11,142,159, 54, 8,130, 88, 47, 16, 8,196, +142,142,142, 66,211,123, 6,131, 65,104,111,111, 15, 15, 15,143,141, 0, 94,177,144,167,171,163,163, 35, 8,130,128, 80, 40,196, +228,201,147, 17, 29, 29,253, 99,102,102,230,187,121,121,121,168,168,168,216,173, 84, 42,223,200,203,203, 3, 77,211, 72, 79, 79, + 71, 64, 64, 64,215,127,168,154,207,188,176,170, 43,176,250,213,217,155, 44, 82,141, 90,174, 26,113, 17, 62, 0,131,193,160, 8, + 13, 13,101, 76, 98,204, 52,139, 16, 0, 65,211, 52,132, 66,225, 3,156, 53, 2,171, 73, 55,184, 88, 44,198, 43,175,188, 34,145, +201,100,199,126,249,229,151,215, 0,252,222,212, 70, 58,126,100,159,203,170, 69,243, 22, 57,180,108,235,245,217,103,159,241, 7, + 15, 30, 28,113,224,192,129, 30, 78,125,251, 15,138,250,237,160,203,150, 57,199,127, 62,120,240, 96, 57, 44,143,191, 2,128, 63, +127,252,241, 71,213, 39, 51,194,132,253,250,245,251, 97,108,231,143,248, 42, 17, 99,227, 32, 22,242,100, 60, 62, 41,110,213,102, +208,111,145, 81,106, 0, 81, 22,116, 18,170,136,136, 8,216,217,217, 1,128, 72,175,215,195,206,206, 14, 91,182,108,145, 40,149, + 74, 40,149, 74,244,238,221,219, 94, 40, 20, 54,230, 46, 52, 23,188,206,255,251,223,255,160, 80, 40, 80, 89, 89, 9,157, 78, 7, +138,162,192,178,108,237,147,227,139, 47,190,232,108, 69,125,211,202,202,202, 94, 8, 11, 11,139,218,180,105, 83, 11, 47, 47, 47, + 44, 89,178, 4,133,133,133,184,119,239, 30,198,140, 25, 83,118,231,206,157, 96, 60, 24,155,245,212,209,169, 83, 39,246,252,249, +243, 56,117,234, 20, 94,125,245, 85,226,248,241,227, 6,154,166,133,217,217,217,215,179,179,179,159, 74,153, 40,138,178, 17,137, + 68, 48, 26,141,224,243,249,181, 46,124,147,192,114,115,115,195,217,179,103,249, 85, 85, 85,252,194,194, 66,217,142, 29, 59,102, +196,196,196,168, 0,188,245, 52,219,114,243,230,205, 30,147, 39, 79,190,199,231,243,217, 65,131, 6,189,147,145,145,241,186, 74, +165,250,237,220,185,115, 95, 2,176, 58, 93,129,191,191,127, 12,143,199,115, 55, 26,141,194, 99,199,142, 25,105,154, 22,118,234, +212, 41,215,100, 45, 50,141,141, 20, 69,101, 38, 39, 39,119,183,132, 79,163,209, 8,191,253,246, 91,163, 86,171, 21,118,238,220, +185,150,203, 96, 48, 8,127,250,233, 39,163,209,104, 20,118,232,208, 33,198,146,153,205, 69, 69, 69, 99,102,205,154,245,199,193, +131, 7,157,120, 60, 30, 50, 50, 50, 80, 84, 84, 4, 59, 59, 59,236,217,179, 7,109,218,180, 65, 68, 68, 68, 17, 77,211,147,182, +111,223,190, 64,163,209,140,177, 32, 6,235,197,160,160, 32,143,146,146, 18,216,218,218,162,162,162, 2, 49, 49, 49,240,243,243, + 67,118,118, 54, 72,146,132,157,157, 29, 54,111,222, 92, 69, 16, 68, 81,115,248, 15,145, 36, 89, 43,132,204, 4,145, 54, 40, 40, + 8,127,254,249,231, 62, 43, 69,145,222,212,255,152,187, 6,197, 98, 49,120, 60,158,213, 46, 15,134, 97,132, 0,186,154, 6,244, +198,142,155, 1,250,201,229,114, 97,221, 55,139,139,139,133, 62, 62, 62,207, 91, 49, 62, 58, 74,165,210,106,194,126,253,144,151, +151, 71,123,122,122,142, 30, 61,122,180, 17, 0,166, 76,153, 50, 58, 63, 63, 95,107, 52, 26,121,124, 62, 31,249,249,249,104,215, +174,157,227, 63, 81,191,186, 90,228, 89, 23, 88, 4,170,221, 29,230,251, 90, 11, 86, 99,150, 43,211, 57,147, 80,106,228,143, 86, + 18, 27, 27, 43,151,203,229,181,239, 25,141, 70,116,237,218,149, 97, 24,134,168,251, 91,143, 98,193, 18,139,197,176,179,179,195, + 91,111,189, 37,203,202,202,218,121,245,234, 85,119, 75,190, 87, 29,131,245,160,184,218,186,114,201,198,175, 87, 45,115, 76, 61, +245, 61,182,111, 88, 67,203,229,138,184,128,128,128, 23, 74, 75, 75,117,118,114, 29,114, 10,113, 4,192, 94,107,250, 28, 0, 7, + 47, 94,188, 24, 63,112,224,192,139,119,239,222,181,207, 72, 73, 57,175,212, 87, 84, 40, 90,181,165,132,206, 46, 67, 53, 6, 35, +127,196,136, 17, 46, 0, 54, 88,240, 52, 2,134, 97,112,226,196, 9,216,216,216, 64,169, 84,194,206,206, 14, 38,113,213, 84,220, +185,115, 7,153,153,153,144,203,229,144,203,229, 80, 40, 20, 80, 40, 20, 16,137, 68, 15, 88, 31,173, 64, 82, 89, 89,217, 7, 71, +143, 30, 61,176, 98,197, 10, 20, 23, 23,163,178,178, 18,139, 22, 45, 66, 90, 90,218, 44, 84,199,100, 53, 27,116,238,220,153,189, +112,225, 2,206,159, 63,143,202,202, 74,108,220,184, 17, 42,149,170, 63,128,133, 79,179, 92, 12,195, 8, 77,169, 78, 72,146,252, +155, 5,203, 36,182,164, 82, 41,156,156,156, 48,111,222, 60,225,208,161, 67, 67,159,102,153, 87,173, 90,213,126,253,250,245, 59, +118,237,218,117,106,204,152, 49,135, 18, 18, 18,198,219,218,218, 94,255,253,247,223,151,137,197, 98,166, 73,157, 23,159,239, 30, + 31, 31,111, 46,242, 5, 52, 77,203,104,154, 6, 69, 81, 48, 26,141,168,170,170, 66, 72, 72,136,197,124,209,209,209, 50, 0, 88, +184,112,161, 0,128,140, 97, 24,152,243,105, 52, 26,193,128, 1, 3, 44,234, 75,212,106,117,210,229,203,151,159, 31, 61,122,244, +133, 3, 7, 14,216,123,120,120, 32, 51, 51, 19,217,217,217,240,242,242,194,134, 13, 27, 42, 89,150,237, 83, 35,170,126,178,176, +218, 45,237,237,237, 5,247,238,221, 3, 69, 81, 8, 12, 12,196,230,205,155, 49,106,212, 40,248,251,251,163,188,188, 28,137,137, +137,216,185,115,167,189, 80, 40, 28,222, 28,196,149, 73, 4,213,183, 53,241, 1, 67, 41,145, 72,202, 36, 18,137,200, 36,180,174, + 92,185, 98,181,245,202, 12,241, 86, 30, 63, 53,152,250, 96,163,241,193,106,202,229,114,120,123,123, 91,204, 35,151,203, 9,211, + 24,107, 52, 26,161, 86,171,233,132,132,132, 90,129,170, 82,169,232, 75,151, 46,209, 58,157,142,103, 99, 99, 3, 0,176,179,179, +123,210, 34,243,161, 90,228, 89,183, 96, 69,213,217,215, 90,176, 76,130,167,161, 32,119, 62,159,111,169,192, 2,143,199,195,233, +211,167,161, 80, 40, 96, 99, 99, 3, 95, 95, 95,147, 21,166, 94,171, 88, 83, 5,150, 72, 36,130,173,173, 45,206,156, 57,163,189, +122,245,234,228,166, 90,174,182,174, 92,178,241,139,207, 23, 59, 22,222,188,136,204,108, 53, 10,115, 13, 49,127, 38,164,255,138, +234, 4,163,192,205,142,145,132,223, 45,139,197,149,175,147, 52, 64,105,175,252, 41,248,165, 65,110,175,143, 13, 35,167, 79,159, +222,107,220,184,113, 69,239,188,243,206, 76,169, 84,234, 79, 81, 84,113, 68,100,100,250,200,145, 35, 29, 75, 75, 75,199,193,130, +152, 36, 30,143,167, 30, 56,112, 96, 43, 0,176,177,177,209,127,247,221,119, 34, 59, 59, 59,188,253,246,219,218,156,156, 28, 73, + 77,123, 20, 91,106,189,170, 25,108,242, 38, 77,154,228,220, 72, 27,231, 89,217,164, 93, 67, 67, 67,183, 29, 60,120, 16,133,133, +133,168,172,172,132, 80, 40,196,234,213,171,113,239,222,189,175,146,146,146, 18,154, 75,103,214,165, 75, 23,246,210,165, 75,184, +126,253, 58,116, 58, 29, 38, 79,158, 12, 0,132, 90,173, 6,128,129, 79,219, 83,144,149,149,133, 61,123,246,128,166,105,140, 25, + 51, 6,109,218,180,169, 21, 88, 57, 57, 57,248,238,187,239, 64,211, 52, 38, 77,154,132,214,173, 91,195,104, 52, 74,250,245,235, +199,127, 90, 51, 74, 63,250,232,163,212, 31,127,252,241,212,253,251,247, 7,175, 92,185,178, 31, 65, 16,204,236,217,179,191, 80, + 42,149,143, 52,251,178,184,180, 28,183, 83, 50, 64, 81, 84,189, 91, 11, 39, 7,171,249,146,211,238,129,162,232, 90, 14,154,254, +139,207,209,193, 58, 62,181, 90, 93, 85, 88, 88, 88, 57,105,210, 36,187,109,219,182, 17,222,222,222,184,123,247, 46, 4, 2, 1, +108,108,108,170,110,223,190,109,109,106,134,172,162,162, 34,111, 30,143, 39, 76, 73, 73,129,135,135, 7,122,246,236,137,229,203, +151, 35, 63, 63, 31, 20, 69,193,217,217,153, 49, 26,141,113, 6,131, 33,234,105,255,143,234, 90,174, 76, 91,141,229,138, 4,240, + 51,254, 30, 56,222,168, 21,203,220,130,213, 84,235,213, 19, 20,149, 79,108,102,162,183,183,119,164, 82,169, 54, 9, 83, 95, 0, + 0, 32, 0, 73, 68, 65, 84, 12,189,117,235,214, 3, 86,172,183,222,122,203,224,229,229,245,135,165, 60, 74,165,178, 88, 36, 18, + 57,106,181, 90, 92,188,120, 17,190,190,190,194,210,210,210, 21,168, 78,122,141,159,126,250,105, 69,110,110,174,208,205,205, 13, + 0,224,227,227,131,210,210,210,226,127,160,249,254,166, 69,254, 13, 2,171, 94,179, 92, 93, 23, 97, 67, 34,203,148,144,180, 49, + 75,139, 70,163,169,181,136,200,229,114, 48, 12,243,128, 59,178,174,192,170,103, 22,161,197,127,236,115,231,206,105,183,110,221, + 58,162, 86, 12, 89, 0,243, 24,172,111,215, 46, 91,101, 18, 87,215,206,159,197, 79,183, 74, 11,102, 47, 95,187,190,169,141,221, +209, 73,214,197,197,197,241,127,107, 87,127,161,204,186,124, 10,135,182,174,101,175, 69, 71,247,152, 22, 29, 61,124,218,180,105, + 14,168,142,183,202, 2,112, 30,213,211,205, 45, 10,248,190,124,249,114,107,211,235, 30, 61,122, 24,149, 74, 37, 20, 10, 5,242, +243,243,133, 10,133, 66, 18, 25, 25,105,117,172, 67,116,116,180,203, 99,190,215, 58,188,250,234,171, 81, 63,252,240,131,188,164, +164, 4,233,233,233,248,244,211, 79,241,205, 55,223, 64,169, 84,226,196,137, 19, 54,161,161,161,255,187,125,251,118,111, 60,229, +228,170, 1, 1, 1,108,116,116, 52,210,211,211, 65, 81, 20, 94,127,253,245, 70, 31, 30,254, 97, 11, 22, 59,107,214, 44,108,219, +182, 13, 36, 73, 98,236,216,177, 40, 43, 43,171, 61,239,224,224, 80,223, 57, 30, 26,159, 81,250,228, 58, 26, 62,159,141,140,140, + 92,217,175, 95, 63,220,191,127,127,112,183,110,221,190, 30, 63,126,124,214,163,242,218,219,218, 32,192,207, 19, 58,157, 14, 58, +157, 14, 45, 91,182, 68,121,121, 57, 82, 83, 83,161,211,233,224,226,108,103, 53, 95, 87,255,246,208,235,245,208,233,116,112,118, +118, 70,101,101, 37,238,222,189, 11,157, 78,135, 22, 45,236,173,161,107,245,242,203, 47,159,219,183,111,159,227,222,189,123,245, +195,134, 13, 19, 45, 89,178,132, 80, 42,149,200,205,205, 69, 19,195,123, 34,207,159, 63,239, 17, 18, 18,226,147,152,152,136,168, +168, 40,232,245,122,116,237,218, 21,201,201,201,232,213,171, 23,202,202,202, 46, 95,185,114,165, 89,204,114,169, 43,172, 98, 98, + 98, 14, 10,133, 66, 22, 64, 83,173, 77, 0,128,204,204, 76,113,167, 78,157,116, 98,177, 88,116,225,194,133,125,143, 96,189,122, +252, 79, 63,143, 62, 51,241,161,104,223,190,253, 44,119,119,247,144,192,192, 64, 36, 38, 38, 10,197, 98, 49,222,121,231, 29,195, + 43,175,188, 98,224,243,249, 22, 79,184,145, 72, 36, 55,109,108,108, 94,208,233,116,208,235,245,136,136,136,128,131,131,195,167, +161,161,161, 31,168,213,106,100,103,103,139,196, 98,113,173,149, 60, 56, 56, 24, 69, 69, 69, 55,255,129,230,171, 87,139, 60,235, + 2,171, 94, 49,100,110,193,106,200, 61,104,169,192, 34, 73, 18,122,189, 30, 50,153,172, 86, 96,153,103,138,111, 10,231, 67,109, +190,241,241, 23,210,210,210,190, 4,112,178, 41,223, 63,188,119,151,202,150,169,106,149,125,249, 36,110, 95,139,193,143,137, 37, + 5,179,151,175,157,241,218,136,183,115,235, 10, 50,139,158, 60, 90,200, 58,185, 56, 87,139,171,194,155, 23,145,114, 61, 6, 39, + 47,103,198,234,129,100, 0,159, 63,206,139,106,242,173, 55, 39,136,197,226, 89,166,217,130,105,105,105, 24, 51,102, 76, 73,122, +122,122,216,235,175,191,254,205,175,191,254,106,111,111,111,143, 51,103,206,216,180,106,213,106, 5,128,167,233,206, 98, 99, 99, + 99, 81, 88, 88, 61,121,179, 79,159, 62,205, 74, 92, 1, 64,108,108,172, 48, 52, 52,244, 55, 0,253,111,222,188, 9,134, 97, 46, +196,197,197,245, 49,157,111,232,156, 37,250,173,188,188, 92, 96, 99, 99, 83,239, 96, 37, 20, 10,133, 77,176, 56,212,114,254,249, +231,159, 95,124,249,229,151, 63,126,252,241,199, 41,143,200, 89,175, 5, 43, 52, 52, 20, 90,157, 17,153,185,165,160, 40, 10, 85, +250,220, 71,178, 96,133,134,134, 66,163,213,227,158,186, 8, 20, 69,161, 66,107,177,161, 68,246,210, 75, 47,253,122,224,192, 1, +215, 11, 23, 46, 64,175,215, 51, 49, 49, 49,119,167, 76,153,162,156, 56,113,162, 99,117,149,155,132, 13,111,189,245,214,136, 63, +255,252,179,200,199,199,199,225,202,149, 43,200,203,203,131,209,104, 68,255,254,253, 33, 22,139, 51, 86,172, 88, 33,132, 5,161, + 5,255,164,192,186,121,243,166, 73, 88,141,125, 92, 66,200,100,193,250, 47, 97,223,190,125, 89,223,125,247,157,159, 74,165, 90, +255,206, 59,239, 4,183,108,217,146, 20,137, 68,145,124, 62,255, 3,130, 32, 50,172,104,187,241,246,246,246,169, 60, 30,143,151, +149,149,133,148,148, 20,240,120, 60,176, 44, 43,210,104, 52,112,113,113, 1,143,199, 51, 89,199,224,238,238, 78, 39, 39, 39,143, + 7,135,199, 35,176, 76, 88,186,116, 41,182,110,221,138,247,222,123,175,193,207,213,164, 5,168, 59, 16,117,130, 89,174, 12,211, + 44,194,240,240,240, 7,190,103,114, 5,134,133,133, 61,240,229, 99,199,142,213,231, 34,124,128,243, 97, 72, 75, 75,179, 70, 1, +215,114,154, 98,176, 70,142, 25,171,222,248,197,162,235, 59,143,255,214, 89,173, 97,213,179,151,175,253,168,174,184,178,148,211, +215, 69,222, 81,229,228, 16,249,229,234, 47,108, 77,214,176, 3,113, 57,165,160,216,247,172,188, 94,141,214, 93, 32, 16,168,123, +247,238,221, 10,176,216, 45,104, 81,123, 62,106, 57,117, 58, 29, 46, 93,186, 4, 0,152, 48, 97, 66, 73,122,122,250, 11, 0,110, +164,167,167,223, 28, 52,104, 80,228,233,211,167,237,107,158,232, 11,159,102, 57,129,234, 25,173,124, 62,223, 20,211, 64, 60,238, +107,244, 56,202,169, 86,171,223,155, 58,117,234, 86,157, 78,199,175,172,172,124,207,210,115,141,149,243,240,225,195, 41,222,222, +222,253,240,240, 84, 12, 12,128,139,143,194,185,126,253,122, 0,240,121, 20,206,135, 89,176, 14, 30, 60, 8,154,166,225,238, 98, + 11,157, 78, 7,243,120, 79, 75, 56,235, 90,176, 14, 29, 58, 4,134, 97,208, 90,229, 0,157, 78,215, 80,236,225, 3,156,142,142, +142,107,119,237,218,229,126,243,230, 77,100,101,101, 97,221,186,117, 25,249,249,249,175,240,249,124,241,215, 95,127,253,191, 33, + 67,134,184, 80, 20,165,107,194,189,164, 51, 24, 12,227,123,247,238,189,123,217,178,101,119,124,125,125, 91,245,238,221,219,190, +168,168, 40, 47, 62, 62, 62,125,235,214,173, 10,138,162,198,227,225,174,167,127,236,127, 4, 0,217,217,217,199, 81,157,190,198, + 90, 97,213,104, 57,163,163,163, 15,213,112,159,180,144,251, 31,169,251, 99,152,153,216, 96, 57, 39, 76,152,144,137,191,231, 55, +179,170,156,103,207,158, 77, 31, 61,122,244,210, 78,157, 58,133, 43, 20, 10, 36, 37, 37,213,166, 69, 50, 61,160, 19, 4,129,145, + 35, 71, 98,218,180,105, 56,115,230,204,210,145, 35, 71,166,255, 3,237,249,223, 16, 88, 52, 77,223, 79, 79, 79, 87,237,218,181, +139, 71, 16, 4,246,236,217,131,186,129,181,166, 61, 0, 92,186,116,137, 98, 89, 54,181,161, 31,163,105,250,126, 76, 76,140,203, +247,223,127, 47,144, 74,165, 16,139,197,200,206,206, 6,195, 48, 76,110,110, 46,185,111,223,190, 7,130,117, 47, 94,188, 72, 25, + 12,134,123, 79,171,113,254, 72,204,248,224,244,137, 31,157,122, 61,247, 66,137,210,193,161, 94,161,114,120,189, 47, 8,191,134, +173, 88,114, 27,229, 23, 95,174,254,194,206, 36,174, 14,198,229,148,104,117,116,240,173, 2,205,181,199, 93,230, 11, 23, 46,180, +110,166,247,218,162,126,253,250, 49, 0,156, 0, 44, 64,181,229, 14, 0,110,220,189,123,247, 57,111,111,239,143, 81,189,240,245, +162,167,105,189, 98, 24,198,220,114,218,108,131, 44,227,226,226,238, 0, 24, 96,237,185,198, 48,114,228,200, 52, 60,250,114, 51, + 79,156,211,132,162,146, 50,164,222,205,170, 89,202,139, 6,157,145, 99, 22, 63,101, 68, 81,153,117,105,228,138, 75,203,145,122, + 55, 19, 12,195, 86,243,209, 89,181, 65,238, 20, 69,161,160,164,113,175, 61,159,207,239, 27, 30, 30,254, 10, 73,146,228,165, 75, +151,116,171, 87,175,190,159,159,159, 63, 20,192,189,154, 24,190, 23,143, 29, 59,182,215,130,148, 12,230,156, 4, 69, 81,166,129, + 57,209,104, 52,246,154, 51,103,206, 76, 0,125, 1,180, 6,112, 15,213,161, 5, 27,208,140, 50,142, 19, 4, 49,246, 89,228,126, + 20, 60, 43, 51, 19, 15, 30, 60,184,120,218,180,105,252,160,160,160,207,122,244,232, 65,222,189,123, 23,121,121,121,181, 15,151, + 47,191,252, 50, 60, 60, 60,152,147, 39, 79, 46, 31, 54,108,216, 98,112,120,124, 2,171,160,160,224,229,177, 99,199,158, 37, 73, +178,237,195, 22,119, 54,183, 46, 49, 12,147,158,155,155,219, 96, 18,178,130,130,130,151, 23, 45, 90,116,150,207,231,183, 53, 91, +204, 89, 87, 88, 88, 24, 54,114,228,200, 77, 2,129, 64,108,110,237, 98, 24, 38, 67,173, 86,255,163, 1,197,117,243, 96, 13, 26, +242, 70,193,163,114,202, 69,240,188,127,233, 4, 82,174,199,226, 96, 92, 78,113,185,158,126, 49,185,160,234,191,166,252,243, 0, +132, 61,228, 92, 10,128,247,154, 65, 25,137,154,152, 63,130,235, 26,154, 63, 40,138,202, 12,233,255, 34,234,166,101,168,123, 76, +211,116,166,165,124, 3,130,251, 61,148,199,244,186, 49, 62, 30,143,247,113, 80, 80, 16,239,227,143, 63,206, 61,117,234,212,111, +197,197,197, 31, 1,168, 50,179, 48, 38,161,225,100,162,245,113, 58, 81, 20,101,190, 6,162, 14,213, 43, 60,172,226,238,132,102, +137,103, 98,102,226,230,205,155, 23,206,158, 61,123,103,203,150, 45,247,244,237,219,215,199,203,203, 75,105, 99, 99,131,178,178, +178,242,162,162,162,219, 39, 78,156, 24, 51,110,220,184, 59,220,229,108,158,232,244,172,113,142, 24, 0,150, 77,244,101,217, 68, + 95,118,196, 0,176,150, 28, 55,198,217,193, 69,222,175,103,107,101,108,231,150, 54, 87,124,156,229,126,255,165,246,228, 56, 57, +206,255, 32,103,107,145, 72,244, 19,159,207,239,251, 24, 57,157, 68, 34, 81, 11,238, 26,113,156, 79,146,115,196,136, 17,188, 17, + 35, 70,240,158, 98, 57, 31, 10,150,101,123,176, 44, 59,164,102,111,122, 29, 98,122,175, 57, 10, 32, 62, 56, 60,128, 35,191,129, +168,235,242,107,236,184, 49, 36,229, 86, 70, 90,251,196,202,129, 3,135,103, 22,247,244,122,253,208,199,204, 89,160,215,235,185, +150,229,240,100,199,191, 35, 71,232,102, 92,188, 22, 4, 65,252,194,178,108, 40, 0,152, 94,155,191,215,220, 64,114,183, 20, 7, + 14, 28, 56,112,224,192,129,195,227, 5,129,135,155,249,172,137, 17,106,138,169, 48,129,227,228, 56, 57, 78,142,147,227,228, 56, + 57,206,255, 28,103, 99,220,127,251, 62,203,178, 67, 26,178, 96, 17, 4,113,226,191, 38,224, 56,159, 55,199,201,113,114,156, 28, + 39,199,201,113,114,156,143, 4,150,101,135, 84,239,216, 33,230,175,205,246,205, 14, 92, 12, 22, 7, 14, 28, 56,112,224,192,161, +185, 67, 51,119,238,220,207, 8,130,248, 5, 0,230,206,157,251, 89,115, 47, 48, 39,176, 56,112,224,192,193, 12, 42,149,234, 85, + 0,139, 81, 29, 66,177, 66,173, 86, 31,226, 90,133,195,191, 9, 78, 78, 78,114, 71, 71,199,223, 72,146,244, 0, 30, 76,185, 84, +223,250,191, 12,195,168,139,138,138, 6,230,230,230, 22,252,147,156,117,112, 97,197,138, 21, 85, 43, 86,172, 48, 5,180,231, 3, + 32,106, 92,134,249,255, 10,129, 53,231,165, 54,207,183,116,115,219, 87, 82, 88, 24,167,171, 42,159,184,226,247,236,162, 38,254, +182,163, 72, 36, 26, 45,151,203, 67, 88,150,245,228,241,120,183, 74, 75, 75, 35,140, 70,227, 1, 0, 21,220, 95,128,195,211, 70, + 64, 64, 64,103,145, 72,244, 41, 65, 16,207, 81, 20,229, 46, 16, 8,178, 1, 92,214,233,116,171,227,227,227,227,184, 22,250,215, +128, 84,169, 84, 95,217,217,217, 5,149,148,148,140, 1,240, 89, 82, 82, 82, 23,146, 36,225,231,231,247,153, 74,165, 74,181,177, +177,217, 94, 94, 94,126, 65,173, 86,127,128, 38, 46,235,195,161,121,193,211,211, 51,134, 36, 73,119,243,229,218,234, 10,130,186, +123,150,101,239,220,188,121,179,247,195, 56,221,220,220, 60,149, 74,229, 38, 0, 61,234, 19, 21,230,168,201,175,118,165,172,172, + 44, 44, 43, 43,171,222, 68,188,246,246,246, 54,206,206,206,139, 9,130, 24, 73,146,100,163,233, 19, 24,134,161, 89,150, 61,156, +151,151,183,168,184,184,184,252,161,131,175,163, 99, 68, 84, 84, 84, 15, 39, 39,167, 70,115,254, 81, 20,133,204,204,204, 22,161, +161,161, 81,185,185,185,190,255, 36,167, 57, 8,130,208,163,122,237,198,103, 6, 86, 11, 44,130,198, 59, 19, 39,143,117, 43,185, +159,228,182,235,192,233, 14,159, 13,228,191,184,252,204,189, 28,107, 56, 36, 18,201,104, 47, 47,175, 13, 27, 54,108,112,108,219, +182, 45, 33,149, 74,161, 86,171,125,175, 94,189,250, 70,120,120,248,162,204,204,204,241, 20, 69,157,125,196,186,217, 57, 40,248, +159, 22, 85, 80,243,184,174,132,131, 53, 24, 49, 98, 4,239,254,253,251,225, 74,165,242,147, 57,115,230,136,219,181,107, 7,133, + 66,129,188,188,188,214,201,201,201,173, 54,109,218,244,106,175, 94,189,190, 22, 10,133,243, 35, 35, 35, 41,174,197,158,109,168, + 84,170,175,162,162,162,222,111,217,178, 37,250,244,233,115,161,107,215,174, 74,153, 76,134, 83,167, 78,193,211,211,211,223,214, +214,246,242,150, 45, 91, 4,139, 23, 47, 14, 56,122,244, 40,212,106,245, 12,174,213,254, 5,170,154, 36,221,227,226,226,156,101, + 50, 25,104,154,174, 89, 13,128, 1,203,178,181,123,115, 49, 68,211, 52,130,131,131, 13,141,140,109,223, 92,191,126, 61,196,180, +194,137,153,144,170, 23,217,217,217, 33,193,193,193,223, 0,168, 55,161,182,179,179,243,226, 81,163, 70,205,242,247,247,175, 93, +106,142, 97,152,218,125, 65, 65, 1,166, 79,159, 94,251, 27, 12,195, 32, 42, 42,106,230,135, 31,126,136,226,226,226, 15, 27,168, +187,135,147,147, 19,209,216, 18,120,225,225,225, 8, 15, 15,199,134, 13, 27, 8, 62,159,111,215, 72,123, 62,118,206,103, 29,214, + 11, 44,176, 39, 79, 30, 57, 52, 49,180,159, 15, 49,110,104,160,247,222,227, 49, 23,231, 12,104,251,194,202,223,238,222,183, 80, + 92,205,156, 58,117,234, 23, 75,150, 44,145,220,190,125, 27,137,137,137,160, 40, 10, 10,133, 2,157, 59,119, 38, 79,158, 60,169, +154, 57,115,230,145, 63,254,248, 99,130,193, 96, 56,218,212,138,185,218,243, 86,203,165,188,183, 43, 52,236,101, 3, 77, 31,111, +142,141,223,179,103,207, 51, 70,163,113,101,124,124,252,185,103,229,134, 9, 12, 12,236, 35, 20, 10, 23,137, 68,162, 65,255, 86, +113,145,145,145,177,232,249,231,159,255, 36, 60, 60, 92,124,247,238, 93, 36, 37, 37, 65,173, 86,163,109,219,182,104,219,182, 45, +177, 97,195, 6,201,215, 95,127, 61,227,234,213,171, 36,128,217,214,244,233,174,174,174,147, 6, 12, 24, 48,220,201,201,201, 54, + 43, 43,171,244,207, 63,255,252, 73,173, 86,127,139,198,215,140,124, 40,167,147,147,211,184,208,208,208,225, 14, 14, 14, 14,106, +181,186,232,183,223,126,251, 41, 47, 47,111,251, 35, 90, 90, 84, 0,186, 0,112,172, 57, 86,183,105,211,230, 70,122,122,122,222, + 99,228,204,110,211,166, 77, 98, 83, 56,157,156,156,228,124, 62,255, 16, 65, 16, 45, 27,176, 16,100, 83, 20, 53,170,160,160,160, +178, 33, 46,165, 82,249,156, 74,165,194,229,203,151,177, 96,193, 2,135,224,224, 96, 36, 39, 39,131, 36, 73,124,242,201, 39,132, +159,159,159, 32, 39, 39, 7,221,187,119, 71, 68, 68, 68,239,154,229,110, 56, 88,134,195, 0,236, 0,188, 5,192,220, 21,228, 4, +224, 24,170, 87,120, 24,246,180, 10, 39,149, 74,177,127,255,126, 8, 4, 2, 8,133, 66, 20, 23, 23,195,205,205, 13, 66,161, 16, + 2,129,160,118, 19, 10,133,104,213,170, 85,163,124, 12,195,244,228,241,120,168,168,168, 0, 77,211,181,203, 44,149,150,150,130, +101, 89,136, 68,162,218,247, 77,231, 24,134,233,217,128,213,102,100,203,150, 45,113,224,192, 1,212,151, 7, 77,169, 84, 34, 33, +225,175, 9,119, 60, 30, 15, 1, 1, 1, 36, 65, 16, 35, 1,124,216, 0, 47, 11, 0,147, 39, 79,126, 96,121,186,186,155,105,237, + 96,150,101,205,151, 16,251,199, 56,255,213, 2,107,110,255,182, 97,254,129, 1,171, 69, 34,129,148,161,141, 96, 40, 35, 24,163, + 30, 12, 67,225, 78,134, 26,158,206, 34, 76, 24,236,229,177,251, 76,114,194,188,151,218, 7,173, 56,155,146, 84,135,162,238, 84, +203, 54,254,254,254,139,151, 45, 91, 38,249,237,183,223,112,251,246,109, 44, 95,190, 28, 0, 32,151,203,113,234,212, 41,208, 52, +141,181,107,215,218, 12, 26, 52,104, 83,118,118,118, 36,128,162, 70, 56,235,131, 71,251,118,170,161, 71,215,188, 32,246,127,227, +200,250,156, 34,250, 4,128,134, 18,168, 61,137,101,107, 26,229,164, 40,234, 37,129, 64,208,187,107,215,174,175, 90, 40,178,158, + 74, 57,205,197,149, 64, 32, 56,109, 48, 24,100, 34,145,136,223,128, 40,120,170,229,124, 20,206,128,128,128,206, 74,165,242,147, + 69,139, 22,137, 47, 93,186,132,226,226, 98,228,229,229,225,131, 15, 62,192,230,205,155,225,239,239, 15,185, 92,142, 25, 51,102, + 72,166, 79,159, 30,214,189,123,247,195, 49, 49, 49, 49, 22,148,147,236,215,175,223,254, 61,123,246,180,165, 40,138, 4, 0,163, +209,104,159,145,145, 49,118,222,188,121,253,226,226,226,222,106, 66,123,146,189,123,247,222,179,119,239, 94, 47,145, 72, 68,214, +116,214, 45,222,125,247,221,137,243,231,207, 15,142,141,141,125,187,129,251,190,161,246,236, 42,147,201, 58,134,133,133, 21, 12, + 29, 58, 52, 11, 0, 98, 99, 99,137,248,248,248, 62, 99,199,142, 77, 15, 15, 15,143,111, 2,103, 55,153, 76,230,243,254,251,239, +231,191,242,202, 43,217, 66,161,144,185,116,233, 18, 47, 33, 33,161,239,164, 73,147,210,230,207,159,127,205, 26, 78,129, 64,112, +240,232,209,163,253,220,220,220,104,160,122, 53, 5,130, 32, 88,130, 32, 88,146, 36, 89,146, 36,145,150,150,214,102,196,136, 17, +251, 0,188,214, 16,103, 73, 73,201,216,190,125,251, 70, 45, 88,176,192, 1, 0,162,162,162,192,231,243,107, 7,132,219,183,111, + 67,167,211, 97,195,134, 13,134,242,242,242, 73,255,182,123,254, 9,115,182, 2,208, 19,192,239, 0,250,215,136, 44, 39, 0,231, + 0,248, 1,248,243,105,149,147, 36, 73,208, 52, 93, 43,162,206,158, 61,139,205,155, 55,227,192,129, 3,112,115,115,123, 64, 96, + 9, 4, 2, 60,196,229,151, 80, 71,100,152,250,118,208, 52,141,232,232,104,108,223,190, 29,206,206,206,112,114,116,132, 83,139, + 22, 8, 10, 10,130,201,106, 70,211,116,125,188, 15,112, 22, 20, 20,128, 97, 44,123, 86, 98, 89, 22,101,101,101, 22,183,103, 67, + 66,200,124,179,230, 26, 61, 34,231,127, 71, 96,169, 92,157,230,143, 24,254,146, 20, 52, 5, 24, 42, 1, 67, 21, 88, 67, 21, 88, +125, 37, 8,145, 20,172, 81, 11, 57,175, 16,239, 13,112, 81, 30,185,152,123,115, 78,112,235, 33, 43,207,221, 59,221,192,147,226, +194,173, 91,183,218, 94,191,126, 29, 73, 73, 73, 88,183,110, 29,150, 44, 89, 82,251,228,240,218,107,175,225,194,133, 11,208,235, +245, 88,176, 96,129,195,156, 57,115,222, 47, 47, 47,183,122,145, 73, 87, 71,254,230, 67,187, 55, 56, 56, 72, 11, 48, 97,232, 21, +199,111, 14,165,135,149, 86, 26,191,110,142, 23, 96,206,156, 57,178, 85,171, 86,253,108,133,200,122,106,150, 43,177, 88,124,122, +225,194,133,242,133, 11, 23,210,143,137,211,159,207,231, 31, 52, 26,141, 31,199,199,199,255,218, 4,138,214, 61,122,244, 88,158, +148,148,116,186,188,188,124,111,221,147, 66,161,240,181,110,221,186,141,185,120,241,226,103, 0, 82, 45, 33, 20,139,197, 51, 63, +249,228, 19, 73,102,102, 38, 74, 74, 74, 32, 22,139, 31,232,220,196, 98, 49, 72,146,132, 72, 36,194,187,239,190, 43,217,177, 99, +199, 71, 0,222,108,244,158,116,117,157,180,123,247,238,182, 6,131,129,172,172,172,132, 80, 40,132, 80, 40, 68,231,206,157,121, +179,103,207,110, 53,107,214,172,169,185,185,185, 27,173,169,188,189,189,253,216, 61,123,246,120,137, 68, 34, 82,173, 86,163, 79, +159, 62,184,124,249, 50,130,130,130,120,179,103,207,110, 61, 99,198,140, 41,249,249,249,155,173,181, 50,201,100, 50,255,168,168, +168,251, 45, 91,254,101, 28,106,219,182, 45, 59,120,240,224,162,164,164, 36,159,216,216,216,194,110,221,186,221,183,130,211, 77, + 38,147,249,254,250,235,175,234, 37, 75,150, 12,216,188,121,243,208, 26, 11,238,241,229,203,151,255, 86, 88, 88,232,119,249,242, +229,194,160,160,160, 44, 43, 56, 29, 93, 93, 93,169,176,176, 48,155,186, 39, 22, 45, 90,132,197,139, 23, 99,231,206,157,133, 0, +156, 27,172,108, 77, 64,187,191,191,191,178,127,255,254,136,138,138,194,140, 25, 51,116, 70,163, 49, 25, 0, 66, 66, 66, 58,132, +135,135,139,226,226,226, 96,111,111, 47, 80,171,213,223,169, 84, 42, 46,240,221,114, 12, 5,240, 63, 0,254, 53, 34,107, 20,128, + 35, 0, 58, 2, 72, 2, 48,226,105, 22,206, 36,176,178,178,178,176, 99,199, 14, 44, 95,190, 28,222,222,222, 48, 24, 12,224,243, +249,181,226,138,207,231,131, 32, 8,176, 44, 75, 88,202,123,229,202, 21,236,222,189, 27, 11,230,207,135,141, 77,245,109,106, 48, + 24, 80, 84, 92, 12,137, 68, 82, 43,194, 26, 17, 76,135, 83, 82, 82,102,185,185,185,213,186, 41,205, 93,132, 0,160, 80, 40,192, + 48, 12, 40,138,130, 78,167,195,182,109,219, 40,150,101, 15, 55, 98,109,170, 21, 67, 31,126,248, 33,116,186,191,214, 7,239,210, +165, 75,181, 53,164, 77, 27, 4, 4, 4,212, 30,155, 44, 84,150,112,110,239,211, 25, 26,179, 79,251,132,175, 1, 0,184,187,187, +195,199,199, 7, 42,149,202, 34,206,127,139,192, 50, 45,112,251,192, 66,183, 57, 57,121, 43,119,110,249,110,141, 72, 64, 10, 66, +122,251,192, 94, 76,129,144, 57, 64,216,111, 46, 8, 59,143,234, 47, 22,165, 65,255,235, 92,140, 10, 40, 32,119,235,120,199,194, + 7,121,182, 8, 63,157, 86,111,112, 29, 73,146,207,181,110,221, 26, 81, 81, 81,104,219,182, 45, 22, 46, 92, 8, 95, 95, 95,200, +100, 50,228,230,230,162,178,178, 18,114,185, 28, 52, 77, 35, 48, 48,144,103, 99, 99, 19,220, 4,129, 21,248, 74,255,110, 61,249, + 74, 95,244, 25,212, 11,103, 54,245,147,239,252, 37,123, 94,105,165,241, 59,152, 45,184,218, 92,240,250,235,175, 35, 55, 55, 87, +182,103,207,158, 38,139,172,158, 61,123,158,161, 40,234, 37, 11,204,225,231,206,159, 63,223,191,169,226,106,199,142, 29,114, 59, + 59, 59, 52, 22,188,105,133,184, 58, 63,118,236, 88,229,158, 61,123,126,236,218,181,235, 27, 86,138,172,214,163, 70,141, 58,177, +125,251,118,223, 33, 67,134, 40,162,162,162,254, 38,176,252,253,253, 95, 63,115,230,204, 27,211,166, 77,243,223,187,119,239,171, +168, 94, 84,186, 49, 51,119,239,118,237,218,225,222,189,123,200,205,205,133, 78,167, 67,110,110, 46, 0, 32, 51, 51, 19,238,238, +238,176,183,183,135,187,187, 59, 58,116,232, 64,144, 36, 25,100, 73, 97,131,131,131,135, 2, 32,211,210,210,144,159,159, 15, 91, + 91, 91,200,229,114,184,185,185,161,127,255,254,124, 47, 47,175, 87,172, 21, 88,131, 7, 15, 30, 46,147,201,200,140,140, 12,164, +167,167, 67,167,211, 33, 57, 57, 25,182,182,182, 8, 9, 9, 17,120,121,121,133, 54, 65, 96,117,154, 50,101, 74,158,185,184, 50, + 65, 46,151, 19, 62, 62, 62, 69,118,118,118,221, 1, 88, 35,176, 58,205,152, 49, 35,119,197,138, 21, 47, 68, 68, 68,204, 49,189, + 25, 17, 17,241, 41, 0,108,220,184, 49,202,193,193,161, 59, 0,107, 4, 22, 88,150,101, 38, 78,156,152, 34, 18,137, 96,218, 76, +194,117,205,154, 53, 32, 73,210,214, 2,154,207,146,146,146,186, 40, 20, 10, 36, 37, 37,129,199,227,129, 32,136, 20,181, 90,221, + 5, 0,156,157,157, 83,181, 90,173,167, 86,171,197,136, 17, 35,136, 33, 67,134,116, 94,183,110,221,124, 0,205, 69, 96,245, 0, +176, 22,128, 30,192,124, 0,151,155, 89, 23,151, 11,224, 69, 51,145, 21, 15, 64, 92, 35,174, 94,172, 57,255, 84, 64, 16, 4, 24, +134, 1,159,207,199,154, 53,107, 96, 48, 24,176,119,239, 94, 28, 57,114, 4, 36, 73,130, 32, 8, 16, 4, 1,165, 82,137,175,190, +250,170,246,216, 18, 80, 20,133,239,191,255, 30,115,231,204,169, 21, 87, 53, 15,125,112,117,113,129,163,147, 19,210,210,210, 26, + 21, 88,121,121,121,139,162,163,163,209, 80,144,251,176, 97,127,121, 88,205,131,220, 45, 41, 39,143,199,131, 78,167,195, 75, 47, +253, 53,124,188,255,254,251,181,175,139,139,139, 77,255, 9, 16, 22, 86,158,199,227, 65,195, 2,175, 75,254,122,239,149,143, 63, +126,192, 34,215, 0,103,189, 90,228, 95,105,193, 18,245,205,216,120,247, 2, 25, 48, 50,180,215, 56, 7,165, 20, 76,121, 54,132, + 3,194,113,189, 72,134,245, 91,170,199,194, 89, 35, 2,209,233,165,101,208,125, 55, 16,253,219,232, 69,223,197, 73,103, 3, 88, + 88, 31,159,147,147,147, 19, 69, 81, 32, 73, 18,114,185, 28, 14, 14, 14,144, 74,165, 40, 40, 40,192,204,153, 51,113,250,244,105, +232,245,122, 8,133, 66,180,107,215, 14, 6,131,193,211,106,235,149, 61,127,251,186, 53,203,237, 10,211,246, 33,246,118, 9,100, +182,238,152, 63,165,187,125,248,166,152, 69,249,197, 85,159, 54,199,139,224,231,231,135, 15, 62,248, 64,246,245,215, 95, 55, 73, +100, 81, 20,181,148,207,231,247,249,248,227,143,165, 35, 70,252,253,129, 48, 49, 49, 17, 83,167, 78,213, 84, 85, 85,125,222, 20, +113, 37, 18,137, 78,111,223,190, 93,110,107,107,139,123,247,238, 61, 54,113,181, 97,195, 6,165,167,167, 39, 4, 2,129,228,251, +239,191,183, 70,100,117, 24, 54,108,216,201,237,219,183,123, 76,153, 50, 37, 51, 42, 42, 42, 29,213,211,234, 31, 64, 92, 92, 92, +241,184,113,227, 50,118,238,220,233,197, 48,204,175,251,247,239, 15, 5,112,179,145,182,108, 45,147,201, 80, 80, 80,128, 89,179, +102, 61, 16,160,106,114,103, 3, 64, 82, 82, 18,220,221,221,161,213,106,221, 44,169,179,131,131,131, 61,203,178,152, 60,121, 50, +238,223,255, 75,155,184,185,185,225,254,253,251,160, 40,202,193,218,118,180,183,183,119, 48, 26,141,232,215,175, 31,180, 90, 45, + 0, 96,212,168, 81, 16, 8, 4,200,203,203,131,193, 96,112,108,194,229,113, 26, 50,100, 72,246,195, 78,202,229,114,163,189,189, +125, 27, 43, 57, 29, 67, 67, 67,179,182,110,221, 90,215, 85,135,232,232,232,215,108,109,109, 35, 28, 28, 28,124,154, 80, 86, 70, + 44, 22, 67, 44, 22, 67, 32, 16, 64, 36, 18, 65, 44, 22, 67, 36, 18, 65, 32, 16,128,199,227, 89,228, 87, 97, 24, 6, 39, 78,156, + 0, 73,146, 15,184, 46, 22, 44, 88,240,158, 76, 38,115,137,140,140,172,125, 0,172,168,168, 64,251,246,237,219,181,107,215,238, +106, 78, 78, 78,250,205,155, 55,223,120,202,221,199,106, 0,166, 89,109,155, 1, 4, 52,195, 46, 46, 23,192, 72, 0, 49, 53,226, + 74, 15, 96,248,211, 20, 87,230,215,158,207,231,215,254,207, 37, 18, 9, 2, 3, 3,107,197, 20, 65, 16,168,170,170,170,117, 17, + 90,106,193, 42, 45, 45,133, 74,165,130,141,141, 13,218,123,123, 35, 37, 57, 25, 0,106, 95,139, 68,162, 90, 33,214, 16,138,139, +139,203,107,130,213, 63,124,204,226,146, 5, 0, 62,191,225, 48,108,149, 74, 5,134, 97, 76,194,146,125, 28,156, 78, 78, 78,168, +168,168,176,136,243,223, 34,176,254,166, 24,195,195, 65,234, 46,180,221, 49,242,149,158,227, 58,186,203,161, 43, 72,131, 72,225, + 8,194,174, 13,214,111,249, 21, 55,211,171, 67,163,214, 31,137,195,206,121, 47,131,144, 57, 64,165,185, 13, 27,137,248,141,135, + 9,172,194,194,194, 10,131,193,224, 32,149, 74,193,231,243, 33, 20, 10, 81, 80, 80,128,255,251,191,255,195,161, 67,135,208,166, + 77, 27, 80, 20, 5,145, 72,132,252,252,124, 8,133, 66,171,102, 39,242,120, 24, 18, 54,238,165,182,114, 71,111, 20,198, 45,169, +126, 83, 25,136, 41,163,120,162, 47,119,223, 24,155, 95, 92,245, 37,170,131, 42,155, 21, 20, 10, 5, 2, 2, 2,240,246,219,111, +203,246,238,221,187, 11,128,187, 53,223,143,139,139,251, 51, 48, 48,112,224,218,181,107,207,168,213,106,105,215,174, 93,161, 80, + 40,160, 80, 40,144,150,150,134, 37, 75,150,104,117, 58, 93,104, 83,172, 99,124, 62,255,251,137, 19, 39,202,149, 74, 37,210,210, +210,224,224,224,240, 72,117, 13, 12, 12,244, 23, 8, 4,231, 55,108,216,160,244,242,242,194,173, 91,183,208,173, 91, 55,184,186, +186, 74, 86,172, 88, 97,169,200,250,102,223,190,125,109, 68, 34, 17,177,127,255,254,214,251,247,239,159,217,216,239,238,222,189, +187,205,254,253,251, 55, 0, 8, 65, 3,193,223, 66,161, 48, 51, 63, 63,223,171, 85,171, 86,216,177, 99, 7, 72,146, 68,118,118, + 54,230,207,159,143, 21, 43, 86, 32, 40, 40, 8, 54, 54, 54,104,213,170, 21, 82, 82, 82, 32,145, 72, 44,138,120,206,202,202, 42, + 2,224,124,250,244,105,228,231,255,149,178,197,195,195, 3, 69, 69, 69,208,233,116,133,214,182,101, 86, 86, 86, 33, 0,151,171, + 87,175, 34, 61, 61, 29,131, 6, 13,194,177, 99,199,208,189,123,119,208, 52, 13,163,209, 88,216,132, 75, 68,243,120, 60,182,129, + 78,148, 0, 96,111, 37, 39,213, 16,103, 77,191, 99, 45, 39, 88,150,101, 31, 38,174, 68, 34, 17, 26,249,205, 90,221,236,235,235, +187,184, 93,187,118, 29,231,207,159, 47,224,243,249,232,219,183,111,135,225,195,135,103,144, 36,233, 56,119,238, 92, 89,125,198, + 96, 0, 93, 58,118,236, 40,111, 6,221,135,185,149,174,185, 78, 58,113,174,177,248,137, 0, 24,106,246, 7,240, 87, 76,214, 83, +181, 96, 9,133, 66,132,135,135, 99,218,180,105,112,113,113,193,156, 57,115,192,231,243,107, 55,147, 85,198,100,213,178,240,222, +132,139,179,115,195,127,180,154, 32,247, 70, 30,162,158, 72,154, 6,147, 24,178, 36, 22,202,204,218,100,145,104,123, 68,206,127, +141,245,202, 92, 96, 61, 96,150,171, 21, 87,131,186,141,243,117,151, 34, 62, 46, 1,157, 92,141, 96, 5,130, 6,238, 22, 35, 8, +161, 28,118, 82,190,123, 3, 23, 32, 46, 61, 61,221,195,206,206, 14, 6,131, 1, 34,145, 8,157, 58,117,194,197,139, 23,161,211, +233,160,215,235, 33, 22,139, 33, 20, 10,113,227,198, 13, 24, 12,134, 40,107,244,149,147,146,183,225,211,207,150,216, 32,107, 7, +236,108, 68, 8,126,206, 11,144,119, 4,175,242, 54,214, 46, 8,117,120,111,254,177,245,185, 5,101,111, 54,183,139,160, 80, 40, +144,145,145,129,253,251,247, 87,233,116,186,177, 77,225, 48,137,172, 67,135, 14,157,177,179,179,147, 6, 5, 5, 33, 57, 57, 25, +159,127,254,185, 86,167,211, 13,105,106,124, 23, 69, 81,227,183,109,219,118,154,162, 40,185, 73, 92, 60,170,229,106,230,204,153, + 54,237,219,183, 71,106,106, 42,108,109,109, 97, 99, 99,131,182,109,219, 66,165, 82, 73,102,206,156,105,137,200,154,254,246,219, +111,159,220,185,115,167,199,148, 41, 83, 50, 15, 28, 56,112, 28, 64,105,125, 77, 59,108,216,176,215,118,238,220,233,241,222,123, +239,221, 3, 48, 19,141,204,172, 99, 24,230, 66,106,106,170,167,175,175, 47,209,161, 67, 7,136, 68, 34,184,185, 85, 27,169,186, +116,233, 2, 95, 95, 95, 8,133, 66, 0, 64,106,106, 42, 96, 97, 94,150, 63,254,248,227,167,164,164,164, 73,221,187,119,231,185, +186,186, 62, 48, 59,105,197,138, 21,134,140,140, 12,171,215,209,250,253,247,223,143, 37, 36, 36, 76,238,219,183, 47,223,222,222, + 30, 98,177, 24,157, 58,117,130, 74,165,194,231,159,127,110,184,123,247,110, 83,214,230,186,119,245,234, 85,137,183,183, 55,253, +144,123,213,166, 9,150,135,204,216,216, 88,225,115,207, 61,119,252,212,169, 83,254,230, 39,122,246,236,121, 92,161, 80,216, 2, +104,202,212, 60,198,220, 53,104,238, 42, 20,137, 68,224,243,249,141, 90,176,212,106,245,207, 46, 46, 46,119, 92, 92, 92,254,236, +221,187,183,109, 76, 76, 12, 22, 46, 92, 40,212,233,116,173, 35, 34, 34,106, 7,226,250, 6,208,202,202, 74, 73, 51,232, 62,102, + 1, 88, 7, 64, 6, 96, 78, 51, 28, 99, 92, 80, 29,208,238,131,106,183,224,168, 26,177,101,138,201,122,170, 34,139, 97, 24, 8, + 4, 2,248,248,248,224,195, 15, 63,196,202,149, 43, 17, 22, 22,134,246,237,219,215, 94,123, 83, 12, 86,205,140, 55,139, 6,126, +161, 80, 8, 23, 87, 87, 24,141,198, 90,235, 21, 0,164, 36, 39,131,207,231,131, 97, 24,232,116,186, 70, 93,132,206,206,206,139, + 87,173, 90, 53,115,240,224,193,164,249,140, 59,150,101,107,211, 73,152,111, 70,163, 17, 63,255,252,243,204, 21, 43, 86, 52,152, +166,193, 92,232,116,233,210,229, 1,183,224,198,141, 27,205,251,108,132,132,132, 88, 53,219,143,199,227,193, 39,124,205, 3,110, +193,147, 45,254,106,182, 86,239, 78, 65,251,207, 55, 60,140,243, 95,229, 34,172,183,134,134,139, 30,203, 70,188, 28, 48,206,215, + 77,140,171,113, 55,240, 75,180,250,118, 65, 65, 9,152,220, 4, 48,249,183, 48,107, 68, 32, 58,182,113, 64,199, 54, 14,152, 53, + 34, 16, 76,222, 13,176,197,105, 96, 37,246,200,171, 36, 30,234, 94, 40, 42, 42, 90,189,116,233,210, 98,123,123,123, 72, 36, 18, +136, 68, 34,100,102,102,194,207,207,175,246,184,230,201, 19, 11, 23, 46,204,207,207,207,223, 98,105, 69,228, 82,114,202,202,249, +111,186, 8,197, 54, 64, 81, 20,148, 74, 5,118,108, 89, 3,232,178, 1, 82,132, 87, 67, 2,120, 42, 23,187,254, 0, 58, 52,183, +139,112,239,222, 61,132,135,135, 87,105, 52,154, 71, 10,116,143,139,139,251,211, 96, 48, 12,220,178,101,139,230,151, 95,126,121, +100,113,101,226, 52, 26,141,131,118,237,218, 85,121,239,222, 61, 40, 20,138, 38,215, 83, 40, 20,206,165, 40, 74,185,110,221, 58, +230,165,151, 94,162,167, 79,159, 78,143, 31, 63,158, 30, 54,108, 24, 29, 18, 18, 66, 79,157, 58,149,214,233,116, 98,153, 76,182, +170, 17,170,164,163, 71,143, 6, 79,154, 52,233,214,183,223,126,235,254,194, 11, 47,180, 1,176,168,238, 22, 24, 24,104,191,115, +231, 78,143,105,211,166,165,238,223,191,255,101, 52,226, 30, 4, 0,157, 78,183,113,243,230,205, 90,146, 36,161, 80, 40, 32, 18, +137,208,162, 69,139, 90, 33,108, 26,200, 13, 6, 3, 54,109,218,164,209,104, 52,235, 45,169,123, 97, 97,225,142,217,179,103,223, + 61,115,230,140,209, 52,203, 39, 59, 59, 27,159,127,254,185, 97,203,150, 45, 89, 37, 37, 37,223, 90,219,158,101,101,101,223,127, +250,233,167,233, 39, 78,156, 48,146, 36,137,226,226, 98,216,217,217,225,243,207, 63, 55,124,251,237,183, 89,229,229,229, 86,115, +246,234,213, 43, 53, 43, 43,203, 70,167,211,253,205,250, 35, 16, 8, 8,137, 68, 98,154, 17,102, 49,186,119,239,158,154,158,158, +174, 92,182,108, 89,100, 72, 72,200, 74, 27, 27,155,100, 27, 27,155,228,144,144,144, 85,155, 54,109, 58, 87,195, 25, 97,117,231, + 69,146,181, 2,203,228, 42, 52, 89,177,106, 44, 89, 22,185, 8,125,125,125,247,237,222,189,219, 54, 57, 57, 25,101,101,101,136, +143,143, 71, 92, 92, 92,173, 43,215, 52,152,153,111, 0, 80, 85, 85, 37,109, 6,221,199,255, 80,157,250,194,171, 70,200, 52, 55, + 28, 49, 19, 87, 47,162,122,230,217,139, 53,199,254, 0,126,122,154, 22, 44,150,101,107, 31,118,222,124,243, 77, 68, 68, 68,160, +125,251,246,181,162,202,124, 22,161, 53, 34,131,166,105,116,234,212, 9, 58,189,254, 1,129,206,231,243,209,162, 69, 11,164,166, +166,130,162,168, 70, 45, 88, 4, 65,140, 28, 60,120, 48,153,152,152, 8, 95, 95, 95,196,197,197, 33, 46, 46, 14,241,241,241,184, +122,245, 42,174, 95,191,142, 27, 55,110,224,230,205,155,232,214,173, 27, 50, 50, 50,240,242,203, 47,155,210, 52, 52,104,100,179, +198,218,100,161,245,238, 73,112,254, 43, 44, 88,132,249,222,197, 94, 62,190,163,138,143,171, 87,111,226,120,108,209, 78,130, 32, +143,198,221,213,253,242,114,187,114, 24, 14,189,133, 78, 35,247, 96,231,188,151,171,159, 0,242,110,192,112,248, 29, 16, 50, 39, +164,148,201,161,209,151, 52,244,212, 28, 29, 19, 19,115,112,247,238,221, 19,199,141, 27, 39, 98, 24, 6, 82,169, 20, 31,125,244, + 81,109,142, 16, 30,143,135,176,176,176,138,188,188,188,117,176,112,230, 23, 0,169,173, 92,176, 96,204,228,133, 18,220,223, 10, +144, 66, 20,160, 43,186,188, 79, 84, 69,169, 0, 0, 6,157, 73, 68, 65, 84, 48, 17,121,233, 23,129,202,155, 0, 33,196,150, 47, + 38, 57,189, 54,254,203,111,115,242, 75,158,111, 46, 23,224,214,173, 91, 88,180,104,209, 35,139,171,186,150,172,227,199,143,239, +210,233,116,147, 31, 35,231,160,149, 43, 87,158,118,118,118,110,178, 91,196,205,205,237,221,130,130,130,137,150, 24,206, 44,209, +165,135, 14, 29, 26,146,158,158,190, 60, 41, 41,169,222,153,171, 55,110,220, 56, 54,112,224, 64,153, 53,179, 8,227,227,227,227, +130,130,130, 54,175, 91,183, 46,236,131, 15, 62,144, 72,165, 82, 40,149, 74, 36, 37, 37,161,117,235,214, 0, 0,141, 70,131,121, +243,230,105,140, 70,227,206,152,152,152,139,150, 62, 44, 39, 36, 36,140,153, 58,117,234,164, 14, 29, 58,188,198, 48,140,163, 94, +175, 47,204,200,200, 56, 81, 35,132,154,226,222, 97, 18, 19, 19,223,158, 54,109,218, 56,111,111,239,225, 6,131,193,145,162,168, +194,251,247,239, 31, 47, 43, 43,219,209, 20,206,139, 23, 47,230,143, 31, 63, 62, 45, 39, 39,199, 79,165, 82,149,218,218,218,234, +245,122, 61, 79,161, 80,216,136, 68,162,110, 0, 46, 18, 4,113,211, 26,206,152,152,152,220, 9, 19, 38,164,235,116,186, 14,219, +182,109,139,146,203,229,191, 17, 4, 65, 8,133, 66,123,185, 92, 30, 12, 32,146, 32,136, 20,107,203, 74,146, 36, 99, 46,168,204, +173, 88, 66,161, 16, 4, 65, 88, 36,176, 82, 83, 83,255, 92,186,116,105,231,118,237,218, 97,203,150, 45, 69, 10,133,194,102,248, +240,225,252,210,210, 82,162, 33, 11,150, 70,163,145,128, 67,163,207, 22, 53, 86,222,161,102,150, 79, 83,224,251, 17, 0, 37, 79, +179,112, 44,203, 62, 32,164, 90,183,110,253,128,168, 50, 63,103,141,192,162, 40, 10, 66,161, 16,124, 62, 31,174, 42, 85,173,152, + 99, 89, 22,201, 41, 41, 40, 46, 46,174, 77,211,208,200, 61,206, 35, 8, 2,163, 71,143,182,232,119,223,124,243, 77, 68, 70, 70, +162, 49,119,162,249,140,191, 54,109,218, 52, 42,134,106,202, 98,241, 44, 66,119,119,247,166,114, 18,117,246,255, 10,129,245, 0, +178,139,170,150,109,255, 49,126, 94,118, 25,117, 84,220, 59,227,195,240,112,176,243, 6,180, 57,227, 46, 23, 13,236, 72,102, 65, +247,109, 95, 16,202,234,193,134,173,200, 6, 33,119, 69,177,160, 53,126,142,203,201, 33, 5,188, 6,173, 15, 37, 37, 37,179,190, +250,234, 43,222,233,211,167, 71, 46, 95,190,220,206,199,199, 7, 99,198,140,129, 94,175,199,245,235,215, 49,117,234,212,162,252, +252,252,173, 37, 37, 37, 43, 45,173,132,147,146,255,127,235, 63, 27,232, 72, 50, 21, 64, 89, 44,192,183,133,147,131, 13,174,197, + 68, 1,165, 49, 0, 41, 4, 72, 17,186,119,245, 69, 23,127, 47,223,156,223,175,244, 5,112,190, 57, 92,128,247,222,123,239,177, +137, 43,115, 65, 4,160,221,227, 44,167, 73,100,125,252,241,199,167, 25,134,145, 53,233, 81,246,200, 17, 26, 13,231, 35,179,218, +248,119,229,202,149,183, 31,118,210, 96, 48, 28,191,120,241,162,213, 73,102,141, 70,227,188,196,196, 68,188,255,254,251,211,222, +121,231, 29,169,143,143, 15, 60, 60, 60,144,156,156,140,164,164, 36,108,222,188, 89,203, 48,204,142,146,146,146, 79,172,164,166, +203,202,202,182, 70, 71, 71,111,125,140,109,192,148,150,150,126, 23, 29, 29,253,221,227, 34,156, 60,121,114, 66,114,114,114,145, +155,155, 91, 16,143,199,235,140,234, 68,145,106, 0,223, 53, 69, 8, 1,192,180,105,211,174,166,166,166, 22,184,186,186, 6, 9, +133, 66,175, 26,206, 44, 0, 59,154,200, 89,120,237,218, 53,175,158, 61,123, 50, 60, 30,143, 21, 8, 4,108,205, 96,200,242,249, +124,150, 32, 8,246,215, 95,127,149,192,130,152,203,204,204,204,153, 59,119,238,100, 21, 10, 69, 80, 69, 69,197, 24, 0,187, 52, + 26, 77,207,146,146,146,218, 65,184, 62,104,181, 90, 49,167,159, 26,197,235, 15,121, 63, 23, 64,223,230, 80,192,165, 75,151, 98, +235,214,173,104, 44, 3,249,241,227,199, 27, 29,248, 77,247,138, 41,190, 74,175,215, 35, 49, 49, 17, 4, 65,212, 30,155, 39, 25, +165,105,186,193, 76,239, 12,195,208,122,189, 30, 7, 15, 30,180, 72,100,237,223,191, 31, 90,173, 22, 12,195, 88,212,207,214, 36, + 38, 69,113,113,113,109,234,132,192,192, 64,243, 62,212,234,246,228,241,120,240,241,241, 65, 65, 65, 1,156,156,156, 0, 84,187, + 5,107,197,103,101,229,127,230,230,183, 88, 37,134,247,243,176,213,242,201, 31, 3,220,152, 23,187,123,136,225,100, 39, 1, 79, + 32, 70,153,150, 64, 98,182, 22,231,111,150,221,167, 41, 54,116,249,239,233,150, 38,136,123, 78,165, 82,125, 70,211,180, 63, 73, +146, 50,150,101, 43,120, 60, 94,124,118,118,246, 98, 0, 55,172,169,132,173,130, 76,177,151,243,108, 5, 34, 17, 75, 83, 12, 0, + 18, 32, 73,128, 32, 1,240,106,246,213,199, 26,141, 65, 72, 51,196,209,188,130,194, 73, 79,187,241,159,127,254,249, 51,149,149, +149,207, 92, 38,119,169, 84,186,136,199,227, 13,250,183, 47, 19,211,189,123,247,238, 82,169,244, 51,134, 97,122,104,181, 90, 87, +169, 84,154, 75, 16, 68, 76,121,121,249, 23, 87,175, 94,189,196,141,157, 79, 15,143, 51,147,123, 93,152,114, 99, 57, 57, 57,121, + 95,187,118, 77, 98,110,193, 50, 31, 12,107,222, 39,184,171,241,108,194,215,215,247,242,190,125,251,186,183,110,221,154, 52, 5, + 92,147, 36, 89,187,153,220, 88, 38,107,203,165, 75,151,168,233,211,167, 95,188,118,237,218, 11, 15,227,244,242,242, 58, 19, 17, + 17,241,146,185,133,202, 36,164,234,190,166,105, 26, 85, 85, 85, 88,180,104,209,217,212,212,212,122,151,202,241,241,241, 89,183, + 96,193,130,153,175,188,242, 10, 73,146,228,223, 98,174,234,198, 97, 25, 12, 6, 28, 61,122,148,249,254,251,239, 55,220,190,125, +251,161, 49, 88, 1, 1, 1,247,227,227,227,221, 77, 41, 19,234,110,117,103,212, 2,192,115,207, 61,167,142,142,142,110,249, 79, +114,254,103, 4,150,233,243,115,250,123,140, 34, 64,142, 36, 9,166, 19, 8, 66,196,176, 72, 34,128, 51, 34,137,126, 83,248, 47, +106, 77,157,207,119,194,227,207,200,203,113,114,156, 79,131,147,132,101, 75,207,112,237,249, 47,225,244,242,242, 74, 73, 73, 73, +241,122,104,103,248,160,192,226,218,243, 25,227,116,114,114,146,183,104,209,226, 55,146, 36, 61, 30,182,184,179,185,184,102, 24, + 38, 61, 55, 55,119, 64, 94, 94, 94,213,195, 56,221,220,220, 60, 37, 18,201, 55, 12,195,244,180,100,177,103,146, 36,163,181, 90, +237,244, 58,139, 61,215,114, 62,198, 89,132, 15,148,211,207,207, 47, 53, 58, 58,218, 83, 42,149, 62, 16, 87, 88,183,206, 38,220, +189,123, 23,195,135, 15,207,184,118,237, 90,155, 39,204,249,175,130,181,107, 17,178, 43,127,207, 56, 8,224, 32,247,252,195,225, + 63, 6,134,107,130,255, 22, 52, 26, 77,113,139, 22, 45, 42,180, 90,173, 64,167,211, 9, 40,138,122, 96,128,147, 74,165,249, 26, +141,134,107,168,103, 20, 5, 5, 5,149, 5, 5, 5, 65,143,147,179, 70, 40, 13,124, 92,124, 79, 42, 15, 86,113,113,113,104,143, + 30, 61,126,229,243,249,226,186,226,167, 62, 49, 68,211,180,182,176,176,112,208, 63,205,249, 95, 19, 88, 28, 56,112,224,240,159, + 64,118,118,118, 80, 35, 2,140,107, 36, 14,207, 36,212,106,117,146, 90,173,246,104,238,156,207, 58, 72,174, 9, 56,112,224,192, 129, 3, 7, 14, 28, 56,129,197,129, 3, 7, 14, 28, 56,112,224,192, 9, 44, 14, 28, 56,112,224,192,129, 3, 7, 78, 96,113,224, -192,129, 3, 7, 14, 28, 56,112,104, 48,254, 31,162, 69, 35,218,144, 32, 45,122, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +192,129, 3, 7, 14, 28, 56,112,104, 50,254, 31, 88,120,209,239, 80, 73, 49,190, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 6036a4c9e0f..204d2dcd59e 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -62,6 +62,7 @@ void ED_region_header(const struct bContext *C, struct ARegion *ar); /* spaces */ void ED_spacetypes_init(void); void ED_spacetypes_keymap(struct wmWindowManager *wm); +int ED_area_header_switchbutton(const struct bContext *C, struct uiBlock *block, int yco); int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco); void ED_area_overdraw(struct bContext *C); void ED_area_overdraw_flush(struct bContext *C, struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index f9e427ac006..b43b50dcfd7 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -158,9 +158,9 @@ DEF_ICON(ICON_NLA) DEF_ICON(ICON_SCRIPTWIN) DEF_ICON(ICON_TIME) DEF_ICON(ICON_NODE) -DEF_ICON(ICON_BLANK053) -DEF_ICON(ICON_BLANK054) -DEF_ICON(ICON_BLANK055) +DEF_ICON(ICON_LOGIC) +DEF_ICON(ICON_CONSOLE) +DEF_ICON(ICON_PREFERENCES) DEF_ICON(ICON_BLANK056) DEF_ICON(ICON_BLANK057) DEF_ICON(ICON_BLANK058) @@ -570,7 +570,7 @@ DEF_ICON(ICON_PAUSE) DEF_ICON(ICON_PREV_KEYFRAME) DEF_ICON(ICON_NEXT_KEYFRAME) DEF_ICON(ICON_PLAY_AUDIO) -DEF_ICON(ICON_BLANK178) +DEF_ICON(ICON_PLAY_REVERSE) DEF_ICON(ICON_BLANK179) DEF_ICON(ICON_BLANK180) DEF_ICON(ICON_PMARKER_ACT) diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 80ebdb77638..9ce124d9e4a 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1056,7 +1056,7 @@ static char *windowtype_pup(void) "|Video Sequence Editor %x8" //143 "|Timeline %x15" //163 - "|Audio Window %x11" //163 + // "|Audio Window %x11" //163 "|Text Editor %x9" //179 "|%l" //192 @@ -1073,7 +1073,7 @@ static char *windowtype_pup(void) "|%l" //293 - "|Scripts Window %x14"//313 + // "|Scripts Window %x14"//313 "|Console %x18" ); } @@ -1085,7 +1085,7 @@ static void spacefunc(struct bContext *C, void *arg1, void *arg2) } /* returns offset for next button in header */ -int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) +int ED_area_header_switchbutton(const bContext *C, uiBlock *block, int yco) { ScrArea *sa= CTX_wm_area(C); uiBut *but; @@ -1098,9 +1098,18 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) "Click for menu of available types."); uiButSetFunc(but, spacefunc, NULL, NULL); - xco += XIC + 14; + return xco + XIC + 14; +} + +int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) +{ + ScrArea *sa= CTX_wm_area(C); + int xco= 8; + xco= ED_area_header_switchbutton(C, block, yco); + uiBlockSetEmboss(block, UI_EMBOSSN); + if (sa->flag & HEADER_NO_PULLDOWN) { uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, ICON_DISCLOSURE_TRI_RIGHT, @@ -1115,11 +1124,10 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) &(sa->flag), 0, 0, 0, 0, "Hide pulldown menus"); } - xco+=XIC; - + uiBlockSetEmboss(block, UI_EMBOSS); - return xco; + return xco + XIC; } /************************ standard UI regions ************************/ diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index e569ed324cd..0fb00b2780b 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -60,66 +60,14 @@ #include "buttons_intern.h" -/* ************************ header area region *********************** */ - -static void do_viewmenu(bContext *C, void *arg, int event) -{ - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); - ScrArea *sa= CTX_wm_area(C); - - switch(event) { - case 1: - case 2: - sbuts->align= event; - sbuts->re_align= 1; - break; - } - - ED_area_tag_redraw(sa); -} - -static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); - ScrArea *sa= CTX_wm_area(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_viewmenu, NULL); - - if (sbuts->align == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Horizontal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Horizontal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - if (sbuts->align == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Vertical", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Vertical", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(sa->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} - #define B_CONTEXT_SWITCH 101 #define B_BUTSPREVIEW 102 -#define B_NEWFRAME 103 static void do_buttons_buttons(bContext *C, void *arg, int event) { SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); switch(event) { - case B_NEWFRAME: - WM_event_add_notifier(C, NC_SCENE|ND_FRAME, NULL); - break; case B_CONTEXT_SWITCH: case B_BUTSPREVIEW: ED_area_tag_redraw(CTX_wm_area(C)); @@ -137,7 +85,6 @@ static void do_buttons_buttons(bContext *C, void *arg, int event) void buttons_header_buttons(const bContext *C, ARegion *ar) { - ScrArea *sa= CTX_wm_area(C); SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); uiBlock *block; int xco, yco= 3; @@ -147,17 +94,7 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); uiBlockSetHandleFunc(block, do_buttons_buttons, NULL); - xco= ED_area_header_standardbuttons(C, block, yco); - - if((sa->flag & HEADER_NO_PULLDOWN)==0) { - int xmax; - - xmax= GetButStringLength("View"); - uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C), - "View", xco, yco, xmax-3, 20, ""); - - xco+=xmax; - } + xco= ED_area_header_switchbutton(C, block, yco); uiBlockSetEmboss(block, UI_EMBOSS); @@ -166,30 +103,30 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) // Default panels uiBlockBeginAlign(block); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_SCENE, 0, 0, "Scene"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_SCENE, 0, 0, "Scene"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_WORLD, 0, 0, "World"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_WORLD, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_WORLD, 0, 0, "World"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_OBJECT, 0, 0, "Object"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_OBJECT, 0, 0, "Object"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_CONSTRAINT, 0, 0, "Constraint"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_CONSTRAINT, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_CONSTRAINT, 0, 0, "Constraint"); if(sbuts->pathflag & (1<dataicon, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_DATA, 0, 0, "Object Data"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, sbuts->dataicon, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_DATA, 0, 0, "Object Data"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_MODIFIER, 0, 0, "Modifier"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MODIFIER, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_MODIFIER, 0, 0, "Modifier"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_BONE, 0, 0, "Bone"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_BONE_DATA, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_BONE, 0, 0, "Bone"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MATERIAL, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture"); + uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PHYSICS, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_GAME, 0, 0, "Game"); - xco+= XIC; + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_GAME, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_GAME, 0, 0, "Game"); + xco+= BUTS_UI_UNIT; uiBlockEndAlign(block); diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index adae52c1ce7..c505c7fdb18 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -49,6 +49,9 @@ struct wmOperatorType; #define BUTS_SENS_STATE 512 #define BUTS_ACT_STATE 1024 +#define BUTS_HEADERY (HEADERY*1.2) +#define BUTS_UI_UNIT (UI_UNIT_Y*1.2) + /* internal exports only */ /* buttons_header.c */ @@ -86,5 +89,7 @@ void PARTICLE_OT_target_move_down(struct wmOperatorType *ot); void SCENE_OT_render_layer_add(struct wmOperatorType *ot); void SCENE_OT_render_layer_remove(struct wmOperatorType *ot); +void BUTTONS_OT_toolbox(struct wmOperatorType *ot); + #endif /* ED_BUTTONS_INTERN_H */ diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 124ccf9d480..fee79c6d9c2 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -38,6 +38,8 @@ #include "DNA_node_types.h" #include "DNA_texture_types.h" #include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_space_types.h" #include "DNA_world_types.h" #include "BKE_context.h" @@ -69,6 +71,8 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "UI_interface.h" + #include "buttons_intern.h" // own include @@ -901,3 +905,33 @@ void SCENE_OT_render_layer_remove(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/********************** toolbox operator *********************/ + +static int toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + bScreen *sc= CTX_wm_screen(C); + SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + PointerRNA ptr; + uiPopupMenu *pup; + uiLayout *layout; + + RNA_pointer_create(&sc->id, &RNA_SpaceButtonsWindow, sbuts, &ptr); + + pup= uiPupMenuBegin(C, "Align", 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumR(layout, &ptr, "align"); + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +void BUTTONS_OT_toolbox(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toolbox"; + ot->idname= "BUTTONS_OT_toolbox"; + + /* api callbacks */ + ot->invoke= toolbox_invoke; +} + diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 72c479b2877..05d181ba330 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -139,7 +139,12 @@ static SpaceLink *buttons_duplicate(SpaceLink *sl) /* add handlers, stuff you only do once or on area/region changes */ static void buttons_main_area_init(wmWindowManager *wm, ARegion *ar) { + ListBase *keymap; + ED_region_panels_init(wm, ar); + + keymap= WM_keymap_listbase(wm, "Buttons Generic", SPACE_BUTS, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); } static void buttons_main_area_draw(const bContext *C, ARegion *ar) @@ -205,11 +210,15 @@ void buttons_operatortypes(void) WM_operatortype_append(SCENE_OT_render_layer_add); WM_operatortype_append(SCENE_OT_render_layer_remove); + + WM_operatortype_append(BUTTONS_OT_toolbox); } void buttons_keymap(struct wmWindowManager *wm) { + ListBase *keymap= WM_keymap_listbase(wm, "Buttons Generic", SPACE_BUTS, 0); + WM_keymap_add_item(keymap, "BUTTONS_OT_toolbox", RIGHTMOUSE, KM_PRESS, 0, 0); } //#define PY_HEADER @@ -394,7 +403,7 @@ void ED_spacetype_buttons(void) /* regions: header */ art= MEM_callocN(sizeof(ARegionType), "spacetype buttons region"); art->regionid = RGN_TYPE_HEADER; - art->minsizey= HEADERY; + art->minsizey= BUTS_HEADERY; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; art->init= buttons_header_area_init; diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 7c6667a83f2..2e84a8b2c15 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -81,6 +81,7 @@ static SpaceLink *node_new(const bContext *C) ar->regiontype= RGN_TYPE_HEADER; ar->alignment= RGN_ALIGN_BOTTOM; +#if 0 /* channels */ ar= MEM_callocN(sizeof(ARegion), "nodetree area for node"); @@ -89,6 +90,7 @@ static SpaceLink *node_new(const bContext *C) ar->alignment= RGN_ALIGN_LEFT; //ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); +#endif /* main area */ ar= MEM_callocN(sizeof(ARegion), "main area for node"); @@ -189,6 +191,7 @@ static SpaceLink *node_duplicate(SpaceLink *sl) return (SpaceLink *)snoden; } +#if 0 static void node_channel_area_init(wmWindowManager *wm, ARegion *ar) { UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); @@ -217,6 +220,7 @@ static void node_channel_area_draw(const bContext *C, ARegion *ar) UI_view2d_scrollers_draw(C, v2d, scrollers); UI_view2d_scrollers_free(scrollers); } +#endif /* Initialise main area, setting handlers. */ static void node_main_area_init(wmWindowManager *wm, ARegion *ar) @@ -341,6 +345,7 @@ void ED_spacetype_node(void) BLI_addhead(&st->regiontypes, art); +#if 0 /* regions: channels */ art= MEM_callocN(sizeof(ARegionType), "spacetype node region"); art->regionid = RGN_TYPE_CHANNELS; @@ -351,6 +356,7 @@ void ED_spacetype_node(void) art->draw= node_channel_area_draw; BLI_addhead(&st->regiontypes, art); +#endif BKE_spacetype_register(st); diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index 9ffce53e572..739c23e8579 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -108,11 +108,6 @@ static void do_time_redrawmenu(bContext *C, void *arg, int event) sad->ar= time_top_left_3dwindow(screen); } } - else { - if(event==1001) { -// button(&CTX_data_scene(C)->r.frs_sec,1,120,"FPS:"); - } - } } @@ -120,10 +115,8 @@ static uiBlock *time_redrawmenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); - Scene *scene= CTX_data_scene(C); uiBlock *block; short yco= 0, menuwidth=120, icon; - char str[32]; block= uiBeginBlock(C, ar, "header time_redrawmenu", UI_EMBOSSP); uiBlockSetButmFunc(block, do_time_redrawmenu, NULL); @@ -155,16 +148,10 @@ static uiBlock *time_redrawmenu(bContext *C, ARegion *ar, void *arg_unused) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - sprintf(str, "Set Frames/Sec (%d/%f)", scene->r.frs_sec, scene->r.frs_sec_base); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, str, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1001, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - if(stime->redraws & TIME_CONTINUE_PHYSICS) icon= ICON_CHECKBOX_HLT; else icon= ICON_CHECKBOX_DEHLT; uiDefIconTextBut(block, BUTM, 1, icon, "Continue Physics", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, TIME_CONTINUE_PHYSICS, "During playblack, continue physics simulations regardless of the frame number"); - if(curarea->headertype==HEADERTOP) { uiBlockSetDirection(block, UI_DOWN); } @@ -547,7 +534,7 @@ void time_header_buttons(const bContext *C, ARegion *ar) } uiBlockEndAlign(block); - xco += (short)(4.5 * XIC + 16); + xco += (short)(4.5 * XIC); /* MINAFRAMEF not MINFRAMEF, since MINAFRAMEF allows to set current frame negative * to facilitate easier keyframing in some situations @@ -557,75 +544,77 @@ void time_header_buttons(const bContext *C, ARegion *ar) &(scene->r.cfra), MINAFRAMEF, MAXFRAMEF, 0, 0, "Displays Current Frame of animation"); - xco += (short)(3.5 * XIC + 16); + xco += (short)(3.5 * XIC); + uiBlockBeginAlign(block); + uiDefIconBut(block, BUT, B_TL_REW, ICON_REW, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to Start frame (Shift DownArrow)"); - xco+= XIC+4; + xco+= XIC; uiDefIconBut(block, BUT, B_TL_PREVKEY, ICON_PREV_KEYFRAME, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to previous keyframe (Ctrl PageDown)"); - xco+= XIC+4; + xco+= XIC; if(CTX_wm_screen(C)->animtimer) { - /* pause button is drawn centered between the two other buttons for now (saves drawing 2 buttons, or having position changes) */ - xco+= XIC/2 + 2; - + /* pause button 2*size to keep buttons in place */ uiDefIconBut(block, BUT, B_TL_STOP, ICON_PAUSE, - xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Stop Playing Timeline"); + xco, yco, XIC*2, YIC, 0, 0, 0, 0, 0, "Stop Playing Timeline"); - xco+= XIC/2 + 2; + xco+= XIC; } else { - // FIXME: the icon for this is crap - uiDefIconBut(block, BUT, B_TL_RPLAY, ICON_REW/*ICON_PLAY*/, + uiDefIconBut(block, BUT, B_TL_RPLAY, ICON_PLAY_REVERSE, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Play Timeline in Reverse"); - xco+= XIC+4; + xco+= XIC; uiDefIconBut(block, BUT, B_TL_PLAY, ICON_PLAY, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Play Timeline "); } - xco+= XIC+4; + xco+= XIC; uiDefIconBut(block, BUT, B_TL_NEXTKEY, ICON_NEXT_KEYFRAME, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to next keyframe (Ctrl PageUp)"); - xco+= XIC+4; + xco+= XIC; uiDefIconBut(block, BUT, B_TL_FF, ICON_FF, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to End frame (Shift UpArrow)"); - xco+= XIC+8; + uiBlockEndAlign(block); + + xco+= 2*XIC; uiBlockBeginAlign(block); - uiDefIconButBitS(block, TOG, AUTOKEY_ON, B_REDRAWALL, ICON_REC, - xco, yco, XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones"); - xco+= XIC; - if (IS_AUTOKEY_ON(scene)) { - uiDefButS(block, MENU, B_REDRAWALL, - "Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5", - xco, yco, (int)5.5*XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 1, 0, 0, - "Mode of automatic keyframe insertion for Objects and Bones"); - xco+= (6*XIC); - } + uiDefIconButBitS(block, TOG, AUTOKEY_ON, B_REDRAWALL, ICON_REC, + xco, yco, XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones"); + xco+= XIC; + + if(IS_AUTOKEY_ON(scene)) { + uiDefButS(block, MENU, B_REDRAWALL, + "Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5", + xco, yco, (int)5.5*XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 1, 0, 0, + "Mode of automatic keyframe insertion for Objects and Bones"); + xco+= (5.5*XIC); + } + else + xco+= 6; + uiBlockEndAlign(block); - xco+= 16; - - menustr= ANIM_build_keyingsets_menu(&scene->keyingsets, 0); uiDefButI(block, MENU, B_DIFF, menustr, xco, yco, (int)5.5*XIC, YIC, &(scene->active_keyingset), 0, 1, 0, 0, "Active Keying Set (i.e. set of channels to Insert Keyframes for)"); MEM_freeN(menustr); - xco+= (6*XIC); + xco+= (5.5*XIC); uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "ANIM_OT_delete_keyframe", WM_OP_INVOKE_REGION_WIN, ICON_KEY_DEHLT, xco,yco,XIC,YIC, "Delete Keyframes for the Active Keying Set (Alt-I)"); - xco += XIC; - uiDefIconButO(block, BUT, "ANIM_OT_insert_keyframe", WM_OP_INVOKE_REGION_WIN, ICON_KEY_HLT, xco,yco,XIC,YIC, "Insert Keyframes for the Active Keying Set (I)"); - xco += XIC; + uiDefIconButO(block, BUT, "ANIM_OT_delete_keyframe", WM_OP_INVOKE_REGION_WIN, ICON_KEY_DEHLT, xco,yco,XIC,YIC, "Delete Keyframes for the Active Keying Set (Alt-I)"); + xco += XIC; + uiDefIconButO(block, BUT, "ANIM_OT_insert_keyframe", WM_OP_INVOKE_REGION_WIN, ICON_KEY_HLT, xco,yco,XIC,YIC, "Insert Keyframes for the Active Keying Set (I)"); + xco += XIC; uiBlockEndAlign(block); - xco+= 16; + xco+= XIC; uiDefIconButBitI(block, TOG, TIME_WITH_SEQ_AUDIO, B_DIFF, ICON_SPEAKER, xco, yco, XIC, YIC, &(stime->redraws), 0, 0, 0, 0, "Play back and sync with audio from Sequence Editor"); diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 4caf915e7ea..3ebdd61ca50 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -150,7 +150,6 @@ static void rna_Particle_target_reset(bContext *C, PointerRNA *ptr) ParticleTarget *pt = (ParticleTarget*)ptr->data; Object *ob = (Object*)ptr->id.data; ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob); - int psys_num = BLI_findindex(&ob->particlesystem, psys); if(pt->ob==ob || pt->ob==NULL) { kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1); From 0bb50594f9118eedaac32d716f2eaf81e3efe1dc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Jul 2009 20:50:24 +0000 Subject: [PATCH 340/512] 2.5: UI * Fix issue where it would automatically scroll when collapsing panels. * Fix panel dragging not taking zoom level into account. * Fix enum menu having too small default width in headers. * Fix tooltips not showing shortcuts etc. if there was not tooltip defined for the button. * Fix some refresh issues with color ramps. * Add a bit more space between columns in the layout engine. * Make scrollers darker so they are less distracting, and highlight instead of reverse shading when dragging. --- .../editors/interface/interface_layout.c | 4 +- .../editors/interface/interface_panel.c | 3 ++ .../editors/interface/interface_regions.c | 41 ++++++++++++------- .../editors/interface/interface_style.c | 4 +- .../editors/interface/interface_utils.c | 21 ++++++++-- .../editors/interface/interface_widgets.c | 11 +++-- source/blender/editors/screen/area.c | 5 ++- 7 files changed, 60 insertions(+), 29 deletions(-) diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 07fe2686317..2705cde27c9 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -724,8 +724,8 @@ static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PropertyRNA subtype= RNA_property_subtype(prop); len= RNA_property_array_length(prop); - if(ELEM(type, PROP_STRING, PROP_POINTER) && !name[0]) - name= "non-empty"; + if(ELEM3(type, PROP_STRING, PROP_POINTER, PROP_ENUM) && !name[0]) + name= "non-empty text"; else if(type == PROP_BOOLEAN && !name[0]) icon= ICON_DOT; diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 377861ae0d7..846fbe75072 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -1031,6 +1031,9 @@ static void ui_do_drag(const bContext *C, wmEvent *event, Panel *panel) dx= (event->x-data->startx) & ~(PNL_GRID-1); dy= (event->y-data->starty) & ~(PNL_GRID-1); + + dx *= (float)(ar->v2d.cur.xmax - ar->v2d.cur.xmin)/(float)(ar->winrct.xmax - ar->winrct.xmin); + dy *= (float)(ar->v2d.cur.ymax - ar->v2d.cur.ymin)/(float)(ar->winrct.ymax - ar->winrct.ymin); if(data->state == PANEL_STATE_DRAG_SCALE) { panel->sizex = MAX2(data->startsizex+dx, UI_PANEL_MINX); diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index c1129db8ebe..70716de6bdc 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -291,10 +291,13 @@ void ui_remove_temporary_region(bContext *C, bScreen *sc, ARegion *ar) /************************* Creating Tooltips **********************/ +#define MAX_TOOLTIP_LINES 8 + typedef struct uiTooltipData { rcti bbox; uiFontStyle fstyle; - char lines[5][512]; + char lines[MAX_TOOLTIP_LINES][512]; + int linedark[MAX_TOOLTIP_LINES]; int totline; int toth, spaceh, lineh; } uiTooltipData; @@ -314,7 +317,7 @@ static void ui_tooltip_region_draw(const bContext *C, ARegion *ar) bbox.ymin= bbox.ymax - data->lineh; for(a=0; atotline; a++) { - if(a == 0) glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + if(!data->linedark[a]) glColor4f(1.0f, 1.0f, 1.0f, 1.0f); else glColor4f(0.5f, 0.5f, 0.5f, 1.0f); uiStyleFontDraw(&data->fstyle, &bbox, data->lines[a]); @@ -344,22 +347,13 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) float x1f, x2f, y1f, y2f; int x1, x2, y1, y2, winx, winy, ofsx, ofsy, w, h, a; - if(!but->tip || strlen(but->tip)==0) - return NULL; - - /* create area region */ - ar= ui_add_temporary_region(CTX_wm_screen(C)); - - memset(&type, 0, sizeof(ARegionType)); - type.draw= ui_tooltip_region_draw; - type.free= ui_tooltip_region_free; - ar->type= &type; - /* create tooltip data */ data= MEM_callocN(sizeof(uiTooltipData), "uiTooltipData"); - BLI_strncpy(data->lines[0], but->tip, sizeof(data->lines[0])); - data->totline= 1; + if(but->tip && strlen(but->tip)) { + BLI_strncpy(data->lines[data->totline], but->tip, sizeof(data->lines[0])); + data->totline++; + } if(but->optype && !(but->block->flag & UI_BLOCK_LOOP)) { /* operator keymap (not menus, they already have it) */ @@ -367,6 +361,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) { BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Shortcut: %s", buf); + data->linedark[data->totline]= 1; data->totline++; } } @@ -376,6 +371,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) ui_get_but_string(but, buf, sizeof(buf)); if(buf[0]) { BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Value: %s", buf); + data->linedark[data->totline]= 1; data->totline++; } } @@ -385,14 +381,29 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) if(ui_but_anim_expression_get(but, buf, sizeof(buf))) { /* expression */ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Expression: %s", buf); + data->linedark[data->totline]= 1; data->totline++; } } /* rna info */ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s.%s", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop)); + data->linedark[data->totline]= 1; data->totline++; } + + if(data->totline == 0) { + MEM_freeN(data); + return NULL; + } + + /* create area region */ + ar= ui_add_temporary_region(CTX_wm_screen(C)); + + memset(&type, 0, sizeof(ARegionType)); + type.draw= ui_tooltip_region_draw; + type.free= ui_tooltip_region_free; + ar->type= &type; /* set font, get bb */ data->fstyle= style->widget; /* copy struct */ diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index e2c97e4f05e..762b32056ac 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -122,10 +122,10 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widget.kerning= 1; style->widget.shadowalpha= 0.25f; - style->columnspace= 5; + style->columnspace= 8; style->templatespace= 5; style->boxspace= 5; - style->buttonspacex= 5; + style->buttonspacex= 8; style->buttonspacey= 2; style->panelspace= 8; style->panelouter= 4; diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 77d27226c93..8ff9e857407 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -972,6 +972,13 @@ static void colorband_pos_cb(bContext *C, void *coba_v, void *unused_v) break; } } + + WM_event_add_notifier(C, NC_TEXTURE, NULL); +} + +static void colorband_cb(bContext *C, void *coba_v, void *unused_v) +{ + WM_event_add_notifier(C, NC_TEXTURE, NULL); } static void colorband_add_cb(bContext *C, void *coba_v, void *unused_v) @@ -983,6 +990,7 @@ static void colorband_add_cb(bContext *C, void *coba_v, void *unused_v) colorband_pos_cb(C, coba, NULL); ED_undo_push(C, "Add colorband"); + WM_event_add_notifier(C, NC_TEXTURE, NULL); } static void colorband_del_cb(bContext *C, void *coba_v, void *unused_v) @@ -1000,6 +1008,7 @@ static void colorband_del_cb(bContext *C, void *coba_v, void *unused_v) ED_undo_push(C, "Delete colorband"); // XXX BIF_preview_changed(ID_TE); + WM_event_add_notifier(C, NC_TEXTURE, NULL); } @@ -1018,18 +1027,22 @@ static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, uiButSetFunc(bt, colorband_del_cb, coba, NULL); - uiDefButS(block, MENU, redraw, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", + bt= uiDefButS(block, MENU, redraw, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", 210+xoffs, 100+yoffs, 90, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Set interpolation between color stops"); + uiButSetFunc(bt, colorband_cb, coba, NULL); uiBlockEndAlign(block); - uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, ""); + bt= uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, ""); + uiButSetFunc(bt, colorband_cb, coba, NULL); cbd= coba->data + coba->cur; bt= uiDefButF(block, NUM, redraw, "Pos:", 0+xoffs,40+yoffs,100, 20, &cbd->pos, 0.0, 1.0, 10, 0, "The position of the active color stop"); uiButSetFunc(bt, colorband_pos_cb, coba, NULL); - uiDefButF(block, COL, redraw, "", 110+xoffs,40+yoffs,80,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); - uiDefButF(block, NUMSLI, redraw, "A ", 200+xoffs,40+yoffs,100,20, &cbd->a, 0.0, 1.0, 10, 0, "The alpha value of the active color stop"); + bt= uiDefButF(block, COL, redraw, "", 110+xoffs,40+yoffs,80,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); + uiButSetFunc(bt, colorband_cb, coba, NULL); + bt= uiDefButF(block, NUMSLI, redraw, "A ", 200+xoffs,40+yoffs,100,20, &cbd->a, 0.0, 1.0, 10, 0, "The alpha value of the active color stop"); + uiButSetFunc(bt, colorband_cb, coba, NULL); } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index fa56af74033..790b01edbe6 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1114,13 +1114,13 @@ static struct uiWidgetColors wcol_scroll= { {50, 50, 50, 180}, {80, 80, 80, 180}, {100, 100, 100, 180}, - {180, 180, 180, 255}, + {128, 128, 128, 255}, {0, 0, 0, 255}, {255, 255, 255, 255}, 1, - 10, -20 + 5, -5 }; static struct uiWidgetColors wcol_list_item= { @@ -1707,8 +1707,11 @@ void uiWidgetScrollDraw(uiWidgetColors *wcol, rcti *rect, rcti *slider, int stat wcol->shadetop+= 20; /* XXX violates themes... */ else wcol->shadedown+= 20; - if(state & UI_SCROLL_PRESSED) - SWAP(short, wcol->shadetop, wcol->shadedown); + if(state & UI_SCROLL_PRESSED) { + wcol->inner[0]= wcol->inner[0]>=250? 255 : wcol->inner[0]+5; + wcol->inner[1]= wcol->inner[1]>=250? 255 : wcol->inner[1]+5; + wcol->inner[2]= wcol->inner[2]>=250? 255 : wcol->inner[2]+5; + } /* draw */ wtb.emboss= 0; /* only emboss once */ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 9ce124d9e4a..62f6e87f073 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1251,13 +1251,14 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex else { v2d->keepofs &= ~V2D_LOCKOFS_X; v2d->keepofs |= V2D_LOCKOFS_Y; - + // don't jump back when panels close or hide x= MAX2(x, v2d->cur.xmax); y= -y; } - UI_view2d_totRect_set(v2d, x, y); + // +V2D_SCROLL_HEIGHT is workaround to set the actual height + UI_view2d_totRect_set(v2d, x, y+V2D_SCROLL_HEIGHT); /* set the view */ UI_view2d_view_ortho(C, v2d); From 1ee8038e41f2daf3aaac40e58d7cdc416d2af35d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Jul 2009 21:35:11 +0000 Subject: [PATCH 341/512] 2.5: Top Menu * Clean up File menu, added back recover last session op. * .blend compress now behaves a bit different, previously it would only respect the user preference. Now it saves existing files the same way they are saved, and new files following the user preference. The save operator has a Compress toggle in the file browser left panels now. * Add menu working again, some fixes to make these operators work outside the 3d view were needed. * Timeline menu removed, its contents will be moved to the timeline header menus. * Game menu can now start game, changed the start game op to choose another 3d view if none is available. * Render menu has a few items now. * Help menu contains a few links again. --- release/ui/space_info.py | 143 +++++++++++++++--- source/blender/editors/curve/editcurve.c | 6 +- source/blender/editors/object/object_edit.c | 5 +- .../blender/editors/screen/screen_context.c | 2 +- source/blender/editors/screen/screen_ops.c | 1 + .../editors/space_view3d/view3d_view.c | 33 +++- source/blender/windowmanager/WM_api.h | 2 +- .../windowmanager/intern/wm_event_system.c | 2 +- .../blender/windowmanager/intern/wm_files.c | 14 +- .../windowmanager/intern/wm_operators.c | 121 ++++++++++++--- .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 3 +- 11 files changed, 273 insertions(+), 59 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 55ce80e857f..96494ccdb14 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -7,6 +7,7 @@ class INFO_HT_header(bpy.types.Header): def draw(self, context): st = context.space_data + rd = context.scene.render_data layout = self.layout layout.template_header() @@ -15,7 +16,6 @@ class INFO_HT_header(bpy.types.Header): row = layout.row() row.itemM("INFO_MT_file") row.itemM("INFO_MT_add") - row.itemM("INFO_MT_timeline") row.itemM("INFO_MT_game") row.itemM("INFO_MT_render") row.itemM("INFO_MT_help") @@ -36,21 +36,49 @@ class INFO_MT_file(bpy.types.Menu): layout = self.layout layout.operator_context = "EXEC_AREA" - layout.itemO("wm.read_homefile") + layout.itemO("wm.read_homefile", text="New") layout.operator_context = "INVOKE_AREA" - layout.itemO("wm.open_mainfile") + layout.itemO("wm.open_mainfile", text="Open...") + layout.item_menu_enumO("wm.open_recentfile", "file", text="Open Recent") + layout.itemO("wm.recover_last_session") layout.itemS() layout.operator_context = "EXEC_AREA" - layout.itemO("wm.save_mainfile") + layout.itemO("wm.save_mainfile", text="Save") layout.operator_context = "INVOKE_AREA" - layout.itemO("wm.save_as_mainfile") + layout.itemO("wm.save_as_mainfile", text="Save As...") + + layout.itemS() + + layout.itemM("INFO_MT_file_import") + layout.itemM("INFO_MT_file_export") layout.itemS() layout.itemM("INFO_MT_file_external_data") + layout.itemS() + + layout.operator_context = "EXEC_AREA" + layout.itemO("wm.exit_blender", text="Quit") + +class INFO_MT_file_import(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Import" + + def draw(self, context): + layout = self.layout + +class INFO_MT_file_export(bpy.types.Menu): + __space_type__ = "USER_PREFERENCES" + __label__ = "Export" + + def draw(self, context): + layout = self.layout + + layout.itemO("export.ply", text="PLY") + class INFO_MT_file_external_data(bpy.types.Menu): __space_type__ = "USER_PREFERENCES" __label__ = "External Data" @@ -74,15 +102,25 @@ class INFO_MT_add(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemL(text="Nothing yet") -class INFO_MT_timeline(bpy.types.Menu): - __space_type__ = "USER_PREFERENCES" - __label__ = "Timeline" + layout.operator_context = "EXEC_SCREEN" - def draw(self, context): - layout = self.layout - layout.itemL(text="Nothing yet") + layout.item_menu_enumO( "OBJECT_OT_mesh_add", "type", text="Mesh", icon="ICON_OUTLINER_OB_MESH") + layout.item_menu_enumO( "OBJECT_OT_curve_add", "type", text="Curve", icon="ICON_OUTLINER_OB_CURVE") + layout.item_menu_enumO( "OBJECT_OT_surface_add", "type", text="Surface", icon="ICON_OUTLINER_OB_SURFACE") + layout.item_enumO("OBJECT_OT_object_add", "type", "META", icon="ICON_OUTLINER_OB_META") + layout.itemO("OBJECT_OT_text_add", text="Text", icon="ICON_OUTLINER_OB_FONT") + + layout.itemS() + + layout.itemO("OBJECT_OT_armature_add", text="Armature", icon="ICON_OUTLINER_OB_ARMATURE") + layout.item_enumO("OBJECT_OT_object_add", "type", "LATTICE", icon="ICON_OUTLINER_OB_LATTICE") + layout.item_enumO("OBJECT_OT_object_add", "type", "EMPTY", icon="ICON_OUTLINER_OB_EMPTY") + + layout.itemS() + + layout.item_enumO("OBJECT_OT_object_add", "type", "CAMERA", icon="ICON_OUTLINER_OB_CAMERA") + layout.item_enumO("OBJECT_OT_object_add", "type", "LAMP", icon="ICON_OUTLINER_OB_LAMP") class INFO_MT_game(bpy.types.Menu): __space_type__ = "USER_PREFERENCES" @@ -90,7 +128,8 @@ class INFO_MT_game(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemL(text="Nothing yet") + + layout.itemO("view3d.game_start") class INFO_MT_render(bpy.types.Menu): __space_type__ = "USER_PREFERENCES" @@ -98,7 +137,14 @@ class INFO_MT_render(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemL(text="Nothing yet") + rd = context.scene.render_data + + layout.itemO("screen.render", text="Render Image") + layout.item_booleanO("screen.render", "animation", True, text="Render Animation") + + layout.itemS() + + layout.itemO("screen.render_view_show") class INFO_MT_help(bpy.types.Menu): __space_type__ = "USER_PREFERENCES" @@ -106,7 +152,16 @@ class INFO_MT_help(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemL(text="Nothing yet") + + layout.itemO("help.manual") + layout.itemO("help.release_logs") + + layout.itemS() + + layout.itemO("help.blender_website") + layout.itemO("help.blender_eshop") + layout.itemO("help.developer_community") + layout.itemO("help.user_community") class INFO_PT_tabs(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" @@ -477,12 +532,12 @@ class INFO_PT_bottombar(bpy.types.Panel): split.itemL(text="") split.itemO("wm.save_homefile", text="Save As Default") - bpy.types.register(INFO_HT_header) bpy.types.register(INFO_MT_file) +bpy.types.register(INFO_MT_file_import) +bpy.types.register(INFO_MT_file_export) bpy.types.register(INFO_MT_file_external_data) bpy.types.register(INFO_MT_add) -bpy.types.register(INFO_MT_timeline) bpy.types.register(INFO_MT_game) bpy.types.register(INFO_MT_render) bpy.types.register(INFO_MT_help) @@ -495,3 +550,57 @@ bpy.types.register(INFO_PT_autosave) bpy.types.register(INFO_PT_language) bpy.types.register(INFO_PT_bottombar) +# Help operators + +import bpy_ops # XXX - should not need to do this +del bpy_ops + +class HelpOperator(bpy.types.Operator): + def execute(self, context): + try: import webbrowser + except: webbrowser = None + + if webbrowser: + webbrowser.open(self.__URL__) + else: + raise Exception("Operator requires a full Python installation") + + return ('FINISHED',) + +class HELP_OT_manual(HelpOperator): + __idname__ = "help.manual" + __label__ = "Manual" + __URL__ = 'http://wiki.blender.org/index.php/Manual' + +class HELP_OT_release_logs(HelpOperator): + __idname__ = "help.release_logs" + __label__ = "Release Logs" + __URL__ = 'http://www.blender.org/development/release-logs/' + +class HELP_OT_blender_website(HelpOperator): + __idname__ = "help.blender_website" + __label__ = "Blender Website" + __URL__ = 'http://www.blender.org/' + +class HELP_OT_blender_eshop(HelpOperator): + __idname__ = "help.blender_eshop" + __label__ = "Blender e-Shop" + __URL__ = 'http://www.blender3d.org/e-shop' + +class HELP_OT_developer_community(HelpOperator): + __idname__ = "help.developer_community" + __label__ = "Developer Community" + __URL__ = 'http://www.blender.org/community/get-involved/' + +class HELP_OT_user_community(HelpOperator): + __idname__ = "help.user_community" + __label__ = "User Community" + __URL__ = 'http://www.blender.org/community/user-community/' + +bpy.ops.add(HELP_OT_manual) +bpy.ops.add(HELP_OT_release_logs) +bpy.ops.add(HELP_OT_blender_website) +bpy.ops.add(HELP_OT_blender_eshop) +bpy.ops.add(HELP_OT_developer_community) +bpy.ops.add(HELP_OT_user_community) + diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 2bf5d357e5c..28a9d3ac7c9 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -4724,11 +4724,13 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname) Mat3MulMat3(cmat, imat, mat); Mat3Inv(imat, cmat); } + else + Mat3One(imat); + setflagsNurb(editnurb, 0); } - else { + else return NULL; - } /* these types call this function to return a Nurb */ if (stype!=CU_PRIM_TUBE && stype!=CU_PRIM_DONUT) { diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 37453039cf5..cf37b0dd812 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -3587,10 +3587,11 @@ void ED_object_enter_editmode(bContext *C, int flag) if(scene->id.lib) return; if(base==NULL) return; - if(sa->spacetype==SPACE_VIEW3D) + if(sa && sa->spacetype==SPACE_VIEW3D) v3d= sa->spacedata.first; - if((v3d==NULL || (base->lay & v3d->lay))==0) return; + if(v3d && (base->lay & v3d->lay)==0) return; + else if(!v3d && (base->lay & scene->lay)==0) return; ob = base->object; diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 19750833b4d..2dc2cf9f293 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -93,7 +93,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if(CTX_data_equals(member, "active_base")) { if(scene->basact) - CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, &scene->basact); + CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, scene->basact); return 1; } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 4a42d1ed369..3032bff18df 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -206,6 +206,7 @@ int ED_operator_object_active(bContext *C) int ED_operator_editmesh(bContext *C) { Object *obedit= CTX_data_edit_object(C); + printf("em %p %d\n", obedit, (obedit)? obedit->type == OB_MESH: -1); if(obedit && obedit->type==OB_MESH) return NULL != ((Mesh *)obedit->data)->edit_mesh; return 0; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index cb20b3dc93e..20e0a79f0c7 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1425,7 +1425,7 @@ static void RestoreState(bContext *C) } /* maybe we need this defined somewhere else */ -extern void StartKetsjiShell(struct bContext *C,int always_use_expand_framing); +extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int always_use_expand_framing); #endif // GAMEBLENDER == 1 @@ -1433,13 +1433,40 @@ static int game_engine_exec(bContext *C, wmOperator *unused) { #if GAMEBLENDER == 1 Scene *startscene = CTX_data_scene(C); + bScreen *sc= CTX_wm_screen(C); + ScrArea *sa, *prevsa= CTX_wm_area(C); + ARegion *ar, *prevar= CTX_wm_region(C); + + sa= prevsa; + if(sa->spacetype != SPACE_VIEW3D) { + for(sa=sc->areabase.first; sa; sa= sa->next) + if(sa->spacetype==SPACE_VIEW3D) + break; + } + + if(!sa) + return OPERATOR_CANCELLED; + for(ar=sa->regionbase.first; ar; ar=ar->next) + if(ar->regiontype == RGN_TYPE_WINDOW) + break; + + if(!ar) + return OPERATOR_CANCELLED; + + // bad context switch .. + CTX_wm_area_set(C, sa); + CTX_wm_region_set(C, ar); + view3d_operator_needs_opengl(C); SaveState(C); - StartKetsjiShell(C, 1); + StartKetsjiShell(C, ar, 1); RestoreState(C); + CTX_wm_region_set(C, prevar); + CTX_wm_area_set(C, prevsa); + //XXX restore_all_scene_cfra(scene_cfra_store); set_scene_bg(startscene); //XXX scene_update_for_newframe(G.scene, G.scene->lay); @@ -1461,7 +1488,7 @@ void VIEW3D_OT_game_start(wmOperatorType *ot) /* api callbacks */ ot->exec= game_engine_exec; - ot->poll= ED_operator_view3d_active; + //ot->poll= ED_operator_view3d_active; } /* ************************************** */ diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 542a747d454..56ae220f7f0 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -57,7 +57,7 @@ struct wmWindow *WM_window_open (struct bContext *C, struct rcti *rect); int WM_read_homefile (struct bContext *C, struct wmOperator *op); int WM_write_homefile (struct bContext *C, struct wmOperator *op); void WM_read_file (struct bContext *C, char *name, struct ReportList *reports); -void WM_write_file (struct bContext *C, char *target, struct ReportList *reports); +void WM_write_file (struct bContext *C, char *target, int compress, struct ReportList *reports); void WM_read_autosavefile(struct bContext *C); void WM_write_autosave (struct bContext *C); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 5377e351ff0..11b8f7f8c6f 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -451,7 +451,7 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe CTX_wm_region_set(C, NULL); CTX_wm_area_set(C, NULL); - retval= wm_operator_invoke(C, ot, window->eventstate, properties); + retval= wm_operator_invoke(C, ot, event, properties); CTX_wm_region_set(C, ar); CTX_wm_area_set(C, area); diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index c3b317590f1..2019906bd5e 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -539,7 +539,7 @@ static void do_history(char *name, ReportList *reports) BKE_report(reports, RPT_ERROR, "Unable to make version backup"); } -void WM_write_file(bContext *C, char *target, ReportList *reports) +void WM_write_file(bContext *C, char *target, int compress, ReportList *reports) { Library *li; int writeflags, len; @@ -580,10 +580,11 @@ void WM_write_file(bContext *C, char *target, ReportList *reports) do_history(di, reports); - /* we use the UserDef to define compression flag */ - writeflags= G.fileflags & ~G_FILE_COMPRESS; - if(U.flag & USER_FILECOMPRESS) - writeflags |= G_FILE_COMPRESS; + writeflags= G.fileflags; + + /* set compression flag */ + if(compress) writeflags |= G_FILE_COMPRESS; + else writeflags &= ~G_FILE_COMPRESS; if (BLO_write_file(CTX_data_main(C), di, writeflags, reports)) { strcpy(G.sce, di); @@ -591,6 +592,9 @@ void WM_write_file(bContext *C, char *target, ReportList *reports) strcpy(G.main->name, di); /* is guaranteed current file */ G.save_over = 1; /* disable untitled.blend convention */ + + if(compress) G.fileflags |= G_FILE_COMPRESS; + else G.fileflags &= ~G_FILE_COMPRESS; writeBlog(); } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 5e60207f62d..5c484dfa322 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -571,7 +571,7 @@ static void WM_OT_read_homefile(wmOperatorType *ot) static int recentfile_exec(bContext *C, wmOperator *op) { - int event= RNA_int_get(op->ptr, "nr"); + int event= RNA_enum_get(op->ptr, "file"); // XXX wm in context is not set correctly after WM_read_file -> crash // do it before for now, but is this correct with multiple windows? @@ -594,30 +594,54 @@ static int recentfile_exec(bContext *C, wmOperator *op) static int wm_recentfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { - struct RecentFile *recent; uiPopupMenu *pup; uiLayout *layout; - int i, ofs= 0; pup= uiPupMenuBegin(C, "Open Recent", 0); layout= uiPupMenuLayout(pup); - - if(G.sce[0]) { - uiItemIntO(layout, G.sce, 0, op->type->idname, "nr", 1); - ofs = 1; - } - - for(recent = G.recent_files.first, i=0; (inext, i++) - if(strcmp(recent->filename, G.sce)) - uiItemIntO(layout, recent->filename, 0, op->type->idname, "nr", i+ofs+1); - + uiItemsEnumO(layout, op->type->idname, "file"); uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } +static EnumPropertyItem *open_recentfile_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + EnumPropertyItem tmp = {0, "", 0, "", ""}; + EnumPropertyItem *item= NULL; + struct RecentFile *recent; + int totitem= 0, i, ofs= 0; + + if(G.sce[0]) { + tmp.value= 1; + tmp.identifier= G.sce; + tmp.name= G.sce; + RNA_enum_item_add(&item, &totitem, &tmp); + ofs = 1; + } + + /* dynamically construct enum */ + for(recent = G.recent_files.first, i=0; (inext, i++) { + if(strcmp(recent->filename, G.sce)) { + tmp.value= i+ofs+1; + tmp.identifier= recent->filename; + tmp.name= recent->filename; + RNA_enum_item_add(&item, &totitem, &tmp); + } + } + + RNA_enum_item_end(&item, &totitem); + *free= 1; + + return item; +} + static void WM_OT_open_recentfile(wmOperatorType *ot) { + PropertyRNA *prop; + static EnumPropertyItem file_items[]= { + {0, NULL, 0, NULL, NULL}}; + ot->name= "Open Recent File"; ot->idname= "WM_OT_open_recentfile"; @@ -625,7 +649,8 @@ static void WM_OT_open_recentfile(wmOperatorType *ot) ot->exec= recentfile_exec; ot->poll= WM_operator_winactive; - RNA_def_property(ot->srna, "nr", PROP_INT, PROP_UNSIGNED); + prop= RNA_def_enum(ot->srna, "file", file_items, 1, "File", ""); + RNA_def_enum_funcs(prop, open_recentfile_itemf); } /* ********* main file *********** */ @@ -675,15 +700,57 @@ static void WM_OT_open_mainfile(wmOperatorType *ot) ot->exec= wm_open_mainfile_exec; ot->poll= WM_operator_winactive; - ot->flag= 0; - RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH); +} +static int wm_recover_last_session_exec(bContext *C, wmOperator *op) +{ + char scestr[FILE_MAX], filename[FILE_MAX]; + int save_over; + + /* back up some values */ + BLI_strncpy(scestr, G.sce, sizeof(scestr)); + save_over = G.save_over; + + // XXX wm in context is not set correctly after WM_read_file -> crash + // do it before for now, but is this correct with multiple windows? + WM_event_add_notifier(C, NC_WINDOW, NULL); + + /* load file */ + BLI_make_file_string("/", filename, btempdir, "quit.blend"); + WM_read_file(C, filename, op->reports); + + /* restore */ + G.save_over = save_over; + BLI_strncpy(G.sce, scestr, sizeof(G.sce)); + + return 0; +} + +static void WM_OT_recover_last_session(wmOperatorType *ot) +{ + ot->name= "Recover Last Session"; + ot->idname= "WM_OT_recover_last_session"; + + ot->exec= wm_recover_last_session_exec; + ot->poll= WM_operator_winactive; +} + +static void save_set_compress(wmOperator *op) +{ + if(!RNA_property_is_set(op->ptr, "compress")) { + if(G.save_over) /* keep flag for existing file */ + RNA_boolean_set(op->ptr, "compress", G.fileflags & G_FILE_COMPRESS); + else /* use userdef for new file */ + RNA_boolean_set(op->ptr, "compress", U.flag & USER_FILECOMPRESS); + } } static int wm_save_as_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { char name[FILE_MAX]; + + save_set_compress(op); BLI_strncpy(name, G.sce, FILE_MAX); untitled(name); @@ -698,6 +765,10 @@ static int wm_save_as_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *even static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op) { char filename[FILE_MAX]; + int compress; + + save_set_compress(op); + compress= RNA_boolean_get(op->ptr, "compress"); if(RNA_property_is_set(op->ptr, "filename")) RNA_string_get(op->ptr, "filename", filename); @@ -705,7 +776,8 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op) BLI_strncpy(filename, G.sce, FILE_MAX); untitled(filename); } - WM_write_file(C, filename, op->reports); + + WM_write_file(C, filename, compress, op->reports); WM_event_add_notifier(C, NC_WM|ND_FILESAVE, NULL); @@ -721,10 +793,8 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot) ot->exec= wm_save_as_mainfile_exec; ot->poll= WM_operator_winactive; - ot->flag= 0; - - RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH); - + RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", ""); + RNA_def_boolean(ot->srna, "compress", 0, "Compress", "Write compressed .blend file."); } /* *************** Save file directly ******** */ @@ -732,6 +802,8 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot) static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { char name[FILE_MAX]; + + save_set_compress(op); BLI_strncpy(name, G.sce, FILE_MAX); untitled(name); @@ -750,10 +822,8 @@ static void WM_OT_save_mainfile(wmOperatorType *ot) ot->exec= wm_save_as_mainfile_exec; ot->poll= WM_operator_winactive; - ot->flag= 0; - - RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH); - + RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", ""); + RNA_def_boolean(ot->srna, "compress", 0, "Compress", "Write compressed .blend file."); } @@ -1590,6 +1660,7 @@ void wm_operatortype_init(void) WM_operatortype_append(WM_OT_exit_blender); WM_operatortype_append(WM_OT_open_recentfile); WM_operatortype_append(WM_OT_open_mainfile); + WM_operatortype_append(WM_OT_recover_last_session); WM_operatortype_append(WM_OT_jobs_timer); WM_operatortype_append(WM_OT_save_as_mainfile); WM_operatortype_append(WM_OT_save_mainfile); diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 03dd5d07eb0..6e6531c9b5f 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -118,11 +118,10 @@ static BlendFileData *load_game_data(char *filename) return bfd; } -extern "C" void StartKetsjiShell(struct bContext *C, int always_use_expand_framing) +extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int always_use_expand_framing) { /* context values */ struct wmWindow *win= CTX_wm_window(C); - struct ARegion *ar= CTX_wm_region(C); struct Scene *scene= CTX_data_scene(C); struct Main* maggie1= CTX_data_main(C); From 366a64959c5950c2fd29f3b1fe74adbd9f420988 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Jul 2009 21:50:40 +0000 Subject: [PATCH 342/512] 2.5: Render/Game Engine An engine to use for output can now be selected an influences what shows in the buttons window, only showing relevant data. The idea behind this is to make it more clear what is supported where, make the system more pluggable for external render/game engines, and save space hiding stuff that is not relevant anyway. * Top header now has an engine menu, to choose between the blender render engine, game engine, and other future external engines. * If the game engine is enabled, the buttons window should show only properties that work in the game engine, and similarly for the render engine. * Moved panels from the logic space and game tabs to the physics, scene and world tabs instead, and removed the game tab. * Materials and textures tabs should eventually become game specific too, to better show what is supported. --- release/ui/buttons_game.py | 254 +++++++++++++++--- release/ui/buttons_physics_cloth.py | 3 +- release/ui/buttons_physics_field.py | 8 +- release/ui/buttons_physics_fluid.py | 5 +- release/ui/buttons_physics_softbody.py | 3 +- release/ui/buttons_scene.py | 48 ++-- release/ui/buttons_world.py | 87 +++--- release/ui/space_info.py | 9 +- release/ui/space_logic.py | 139 +--------- source/blender/editors/screen/screen_ops.c | 7 +- .../editors/space_buttons/buttons_context.c | 30 +-- .../editors/space_buttons/buttons_header.c | 2 - .../editors/space_buttons/space_buttons.c | 2 - source/blender/makesdna/DNA_space_types.h | 1 - source/blender/makesrna/SConscript | 3 + source/blender/makesrna/intern/SConscript | 3 + source/blender/makesrna/intern/rna_render.c | 35 +++ source/blender/makesrna/intern/rna_scene.c | 20 +- source/blender/makesrna/intern/rna_space.c | 28 +- source/blender/makesrna/intern/rna_world.c | 2 +- .../render/extern/include/RE_pipeline.h | 6 +- .../blender/render/intern/source/pipeline.c | 22 -- .../windowmanager/intern/wm_init_exit.c | 2 +- source/creator/creator.c | 1 + 24 files changed, 390 insertions(+), 330 deletions(-) diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index 5f953b1c8eb..1a0f6666a47 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -1,40 +1,19 @@ import bpy -class GameButtonsPanel(bpy.types.Panel): +class PhysicsButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" - __context__ = "game" - -class GAME_PT_context_game(GameButtonsPanel): - __idname__ = "GAME_PT_context_game" - __no_header__ = True - - def draw(self, context): - layout = self.layout - ob = context.object - game = context.game - - split = layout.split(percentage=0.06) - split.itemL(text="", icon="ICON_GAME") - split.itemR(game, "name", text="") - -class GAME_PT_data(GameButtonsPanel): - __idname__ = "GAME_PT_data" - __label__ = "Data" - - def draw(self, context): - layout = self.layout - ob = context.object - game = context.game - -class GAME_PT_physics(GameButtonsPanel): - __idname__ = "GAME_PT_physics" - __label__ = "Physics" + __context__ = "physics" def poll(self, context): ob = context.active_object - return ob and ob.game + rd = context.scene.render_data + return ob and ob.game and (rd.engine == 'BLENDER_GAME') + +class PHYSICS_PT_game_physics(PhysicsButtonsPanel): + __idname__ = "PHYSICS_PT_game_physics" + __label__ = "Physics" def draw(self, context): layout = self.layout @@ -97,15 +76,10 @@ class GAME_PT_physics(GameButtonsPanel): sub.itemR(game, "lock_y_rot_axis", text="Y") sub.itemR(game, "lock_z_rot_axis", text="Z") - -class GAME_PT_collision_bounds(GameButtonsPanel): - __idname__ = "GAME_PT_collision_bounds" +class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel): + __idname__ = "PHYSICS_PT_game_collision_bounds" __label__ = "Collision Bounds" - def poll(self, context): - ob = context.active_object - return ob and ob.game - def draw_header(self, context): layout = self.layout ob = context.active_object @@ -130,8 +104,208 @@ class GAME_PT_collision_bounds(GameButtonsPanel): sub = split.column() sub.itemR(game, "collision_margin", text="Margin", slider=True) +bpy.types.register(PHYSICS_PT_game_physics) +bpy.types.register(PHYSICS_PT_game_collision_bounds) + +class SceneButtonsPanel(bpy.types.Panel): + __space_type__ = "BUTTONS_WINDOW" + __region_type__ = "WINDOW" + __context__ = "scene" + + def poll(self, context): + rd = context.scene.render_data + return (rd.engine == 'BLENDER_GAME') + +class SCENE_PT_game(SceneButtonsPanel): + __label__ = "Game" + + def draw(self, context): + layout = self.layout + rd = context.scene.render_data + + row = layout.row() + row.itemO("view3d.game_start", text="Start") + row.itemL() + +class SCENE_PT_game_player(SceneButtonsPanel): + __label__ = "Player" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + row = layout.row() + row.itemR(gs, "fullscreen") + + split = layout.split() + col = split.column() + col.itemL(text="Resolution:") + colsub = col.column(align=True) + colsub.itemR(gs, "resolution_x", slider=False, text="X") + colsub.itemR(gs, "resolution_y", slider=False, text="Y") + + col = split.column() + col.itemL(text="Quality:") + colsub = col.column(align=True) + colsub.itemR(gs, "depth", text="Bit Depth", slider=False) + colsub.itemR(gs, "frequency", text="FPS", slider=False) + + # framing: + col = layout.column() + col.itemL(text="Framing:") + col.row().itemR(gs, "framing_type", expand=True) + + colsub = col.column() + colsub.itemR(gs, "framing_color", text="") + +class SCENE_PT_game_stereo(SceneButtonsPanel): + __label__ = "Stereo" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + + # stereo options: + col= layout.column() + row = col.row() + row.itemR(gs, "stereo", expand=True) + + stereo_mode = gs.stereo + + # stereo: + if stereo_mode == 'STEREO': + row = layout.row() + row.itemR(gs, "stereo_mode") + + # dome: + if stereo_mode == 'DOME': + row = layout.row() + row.itemR(gs, "dome_mode", text="Dome Type") + + split=layout.split() + col=split.column() + col.itemR(gs, "dome_angle", slider=True) + col.itemR(gs, "dome_tesselation", text="Tesselation") + col=split.column() + col.itemR(gs, "dome_tilt") + col.itemR(gs, "dome_buffer_resolution", text="Resolution", slider=True) + col=layout.column() + col.itemR(gs, "dome_text") + +bpy.types.register(SCENE_PT_game) +bpy.types.register(SCENE_PT_game_player) +bpy.types.register(SCENE_PT_game_stereo) + +class WorldButtonsPanel(bpy.types.Panel): + __space_type__ = "BUTTONS_WINDOW" + __region_type__ = "WINDOW" + __context__ = "world" + + def poll(self, context): + rd = context.scene.render_data + return (rd.engine == 'BLENDER_GAME') + +class WORLD_PT_game_context_world(WorldButtonsPanel): + __no_header__ = True + + def poll(self, context): + rd = context.scene.render_data + return (context.scene != None) and (rd.use_game_engine) + + def draw(self, context): + layout = self.layout + + scene = context.scene + world = context.world + space = context.space_data + + split = layout.split(percentage=0.65) + + if scene: + split.template_ID(scene, "world", new="world.new") + elif world: + split.template_ID(space, "pin_id") + +class WORLD_PT_game_world(WorldButtonsPanel): + __label__ = "World" + + def draw(self, context): + layout = self.layout + world = context.world + + row = layout.row() + row.column().itemR(world, "horizon_color") + row.column().itemR(world, "ambient_color") + + layout.itemR(world.mist, "enabled", text="Mist") + + row = layout.column_flow() + row.active = world.mist.enabled + row.itemR(world.mist, "start") + row.itemR(world.mist, "depth") + + +""" +class WORLD_PT_game(WorldButtonsPanel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "Game Settings" + + def draw(self, context): + layout = self.layout + world = context.world + + flow = layout.column_flow() + flow.itemR(world, "physics_engine") + flow.itemR(world, "physics_gravity") + + flow.itemR(world, "game_fps") + flow.itemR(world, "game_logic_step_max") + flow.itemR(world, "game_physics_substep") + flow.itemR(world, "game_physics_step_max") + + flow.itemR(world, "game_use_occlusion_culling", text="Enable Occlusion Culling") + flow.itemR(world, "game_occlusion_culling_resolution") +""" + +class WORLD_PT_game_physics(WorldButtonsPanel): + __label__ = "Physics" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + flow = layout.column_flow() + flow.itemR(gs, "physics_engine") + if gs.physics_engine != "NONE": + flow.itemR(gs, "physics_gravity", text="Gravity") + + split = layout.split() + col = split.column() + col.itemL(text="Physics Steps:") + colsub = col.column(align=True) + colsub.itemR(gs, "physics_step_max", text="Max") + colsub.itemR(gs, "physics_step_sub", text="Substeps") + col.itemR(gs, "fps", text="FPS") + + col = split.column() + col.itemL(text="Logic Steps:") + col.itemR(gs, "logic_step_max", text="Max") + col.itemS() + col.itemR(gs, "use_occlusion_culling", text="Occlusion Culling") + colsub = col.column() + colsub.active = gs.use_occlusion_culling + colsub.itemR(gs, "occlusion_culling_resolution", text="Resolution") + + + else: + split = layout.split() + col = split.column() + col.itemL(text="Physics Steps:") + col.itemR(gs, "fps", text="FPS") + col = split.column() + col.itemL(text="Logic Steps:") + col.itemR(gs, "logic_step_max", text="Max") + +bpy.types.register(WORLD_PT_game_context_world) +bpy.types.register(WORLD_PT_game_world) +bpy.types.register(WORLD_PT_game_physics) -bpy.types.register(GAME_PT_context_game) -bpy.types.register(GAME_PT_data) -bpy.types.register(GAME_PT_physics) -bpy.types.register(GAME_PT_collision_bounds) \ No newline at end of file diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index 08911b0195c..dcfa1a331e5 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -8,7 +8,8 @@ class PhysicButtonsPanel(bpy.types.Panel): def poll(self, context): ob = context.object - return (ob and ob.type == 'MESH') + rd = context.scene.render_data + return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_cloth(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_cloth" diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index cdb90c95228..7df14b3eef9 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -7,7 +7,8 @@ class PhysicButtonsPanel(bpy.types.Panel): __context__ = "physics" def poll(self, context): - return (context.object != None) + rd = context.scene.render_data + return (context.object != None) and (not rd.use_game_engine) class PHYSICS_PT_field(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_field" @@ -171,7 +172,8 @@ class PHYSICS_PT_collision(PhysicButtonsPanel): def poll(self, context): ob = context.object - return (ob and ob.type == 'MESH') + rd = context.scene.render_data + return (ob and ob.type == 'MESH') and (not rd.use_game_engine) def draw_header(self, context): settings = context.object.collision @@ -213,4 +215,4 @@ class PHYSICS_PT_collision(PhysicButtonsPanel): col.itemR(settings, "damping", text="Factor", slider=True) bpy.types.register(PHYSICS_PT_field) -bpy.types.register(PHYSICS_PT_collision) \ No newline at end of file +bpy.types.register(PHYSICS_PT_collision) diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 8cec90f41ba..f25aa117c74 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -8,7 +8,8 @@ class PhysicButtonsPanel(bpy.types.Panel): def poll(self, context): ob = context.object - return (ob and ob.type == 'MESH') + rd = context.scene.render_data + return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_fluid(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_fluid" @@ -266,4 +267,4 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel): bpy.types.register(PHYSICS_PT_fluid) bpy.types.register(PHYSICS_PT_domain_gravity) bpy.types.register(PHYSICS_PT_domain_boundary) -bpy.types.register(PHYSICS_PT_domain_particles) \ No newline at end of file +bpy.types.register(PHYSICS_PT_domain_particles) diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py index 836c557257e..fbcc1be3f01 100644 --- a/release/ui/buttons_physics_softbody.py +++ b/release/ui/buttons_physics_softbody.py @@ -8,7 +8,8 @@ class PhysicButtonsPanel(bpy.types.Panel): def poll(self, context): ob = context.object - return (ob and ob.type == 'MESH') + rd = context.scene.render_data + return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_softbody(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_softbody" diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index db38a74d80b..8b6bcb98e06 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -6,7 +6,11 @@ class RenderButtonsPanel(bpy.types.Panel): __region_type__ = "WINDOW" __context__ = "scene" -class RENDER_PT_render(RenderButtonsPanel): + def poll(self, context): + rd = context.scene.render_data + return (not rd.use_game_engine) + +class SCENE_PT_render(RenderButtonsPanel): __label__ = "Render" def draw(self, context): @@ -15,13 +19,11 @@ class RENDER_PT_render(RenderButtonsPanel): row = layout.row() row.itemO("screen.render", text="Image", icon='ICON_IMAGE_COL') - row.item_booleanO("screen.render", "anim", True, text="Animation", icon='ICON_SEQUENCE') + row.item_booleanO("screen.render", "animation", True, text="Animation", icon='ICON_SEQUENCE') layout.itemR(rd, "display_mode", text="Display") - if rd.multiple_engines: - layout.itemR(rd, "engine") -class RENDER_PT_layers(RenderButtonsPanel): +class SCENE_PT_layers(RenderButtonsPanel): __label__ = "Layers" __default_closed__ = True @@ -107,7 +109,7 @@ class RENDER_PT_layers(RenderButtonsPanel): row.itemR(rl, "pass_refraction") row.itemR(rl, "pass_refraction_exclude", text="", icon="ICON_X") -class RENDER_PT_shading(RenderButtonsPanel): +class SCENE_PT_shading(RenderButtonsPanel): __label__ = "Shading" def draw(self, context): @@ -127,7 +129,7 @@ class RENDER_PT_shading(RenderButtonsPanel): col.itemR(rd, "color_management") col.itemR(rd, "alpha_mode", text="Alpha") -class RENDER_PT_performance(RenderButtonsPanel): +class SCENE_PT_performance(RenderButtonsPanel): __label__ = "Performance" __default_closed__ = True @@ -169,7 +171,7 @@ class RENDER_PT_performance(RenderButtonsPanel): row.itemR(rd, "octree_resolution", text="Ray Tracing Octree") -class RENDER_PT_post_processing(RenderButtonsPanel): +class SCENE_PT_post_processing(RenderButtonsPanel): __label__ = "Post Processing" __default_closed__ = True @@ -197,7 +199,7 @@ class RENDER_PT_post_processing(RenderButtonsPanel): split.itemL() split.itemR(rd, "dither_intensity", text="Dither", slider=True) -class RENDER_PT_output(RenderButtonsPanel): +class SCENE_PT_output(RenderButtonsPanel): __label__ = "Output" def draw(self, context): @@ -258,7 +260,7 @@ class RENDER_PT_output(RenderButtonsPanel): split = layout.split() split.itemR(rd, "tiff_bit") -class RENDER_PT_encoding(RenderButtonsPanel): +class SCENE_PT_encoding(RenderButtonsPanel): __label__ = "Encoding" __default_closed__ = True @@ -305,7 +307,7 @@ class RENDER_PT_encoding(RenderButtonsPanel): col = split.column() col.itemR(rd, "ffmpeg_multiplex_audio") -class RENDER_PT_antialiasing(RenderButtonsPanel): +class SCENE_PT_antialiasing(RenderButtonsPanel): __label__ = "Anti-Aliasing" def draw_header(self, context): @@ -330,7 +332,7 @@ class RENDER_PT_antialiasing(RenderButtonsPanel): col.itemR(rd, "pixel_filter", text="") col.itemR(rd, "filter_size", text="Size", slider=True) -class RENDER_PT_dimensions(RenderButtonsPanel): +class SCENE_PT_dimensions(RenderButtonsPanel): __label__ = "Dimensions" def draw(self, context): @@ -368,7 +370,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel): col.itemR(rd, "fps") col.itemR(rd, "fps_base",text="/") -class RENDER_PT_stamp(RenderButtonsPanel): +class SCENE_PT_stamp(RenderButtonsPanel): __label__ = "Stamp" __default_closed__ = True @@ -408,14 +410,14 @@ class RENDER_PT_stamp(RenderButtonsPanel): rowsub.active = rd.stamp_note rowsub.itemR(rd, "stamp_note_text", text="") -bpy.types.register(RENDER_PT_render) -bpy.types.register(RENDER_PT_layers) -bpy.types.register(RENDER_PT_dimensions) -bpy.types.register(RENDER_PT_antialiasing) -bpy.types.register(RENDER_PT_shading) -bpy.types.register(RENDER_PT_output) -bpy.types.register(RENDER_PT_encoding) -bpy.types.register(RENDER_PT_performance) -bpy.types.register(RENDER_PT_post_processing) -bpy.types.register(RENDER_PT_stamp) +bpy.types.register(SCENE_PT_render) +bpy.types.register(SCENE_PT_layers) +bpy.types.register(SCENE_PT_dimensions) +bpy.types.register(SCENE_PT_antialiasing) +bpy.types.register(SCENE_PT_shading) +bpy.types.register(SCENE_PT_output) +bpy.types.register(SCENE_PT_encoding) +bpy.types.register(SCENE_PT_performance) +bpy.types.register(SCENE_PT_post_processing) +bpy.types.register(SCENE_PT_stamp) diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 6e233f86765..e0305bbaf04 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -7,7 +7,8 @@ class WorldButtonsPanel(bpy.types.Panel): __context__ = "world" def poll(self, context): - return (context.world != None) + rd = context.scene.render_data + return (context.world != None) and (not rd.use_game_engine) class WORLD_PT_preview(WorldButtonsPanel): __label__ = "Preview" @@ -22,7 +23,8 @@ class WORLD_PT_context_world(WorldButtonsPanel): __no_header__ = True def poll(self, context): - return (context.scene != None) + rd = context.scene.render_data + return (context.scene != None) and (not rd.use_game_engine) def draw(self, context): layout = self.layout @@ -60,17 +62,6 @@ class WORLD_PT_world(WorldButtonsPanel): col.active = world.blend_sky row.column().itemR(world, "ambient_color") -class WORLD_PT_color_correction(WorldButtonsPanel): - __label__ = "Color Correction" - - def draw(self, context): - layout = self.layout - world = context.world - - row = layout.row() - row.itemR(world, "exposure") - row.itemR(world, "range") - class WORLD_PT_mist(WorldButtonsPanel): __label__ = "Mist" @@ -91,9 +82,8 @@ class WORLD_PT_mist(WorldButtonsPanel): flow.itemR(world.mist, "depth") flow.itemR(world.mist, "height") flow.itemR(world.mist, "intensity") - col = layout.column() - col.itemL(text="Fallof:") - col.row().itemR(world.mist, "falloff", expand=True) + + layout.itemR(world.mist, "falloff") class WORLD_PT_stars(WorldButtonsPanel): __label__ = "Stars" @@ -112,9 +102,9 @@ class WORLD_PT_stars(WorldButtonsPanel): flow = layout.column_flow() flow.itemR(world.stars, "size") + flow.itemR(world.stars, "color_randomization", text="Colors") flow.itemR(world.stars, "min_distance", text="Min. Dist") flow.itemR(world.stars, "average_separation", text="Separation") - flow.itemR(world.stars, "color_randomization", text="Random") class WORLD_PT_ambient_occlusion(WorldButtonsPanel): __label__ = "Ambient Occlusion" @@ -132,49 +122,46 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel): layout.active = ao.enabled layout.itemR(ao, "gather_method", expand=True) + + split = layout.split() + col = split.column() + col.itemL(text="Attenuation:") + col.itemR(ao, "distance") + col.itemR(ao, "falloff") + sub = col.row() + sub.active = ao.falloff + sub.itemR(ao, "falloff_strength", text="Strength") + if ao.gather_method == 'RAYTRACE': - split = layout.split() - col = split.column() - col.itemR(ao, "samples") - col.itemR(ao, "distance") - col = split.column() - col.itemR(ao, "falloff") - colsub = col.column() - colsub.active = ao.falloff - colsub.itemR(ao, "strength") - - layout.itemR(ao, "sample_method") + col.itemL(text="Sampling:") + col.itemR(ao, "sample_method", text="") + + sub = col.column(align=True) + sub.itemR(ao, "samples") + if ao.sample_method == 'ADAPTIVE_QMC': - row = layout.row() - row.itemR(ao, "threshold") - row.itemR(ao, "adapt_to_speed") - - if ao.sample_method == 'CONSTANT_JITTERED': - row = layout.row() - row.itemR(ao, "bias") + sub.itemR(ao, "threshold") + sub.itemR(ao, "adapt_to_speed") + elif ao.sample_method == 'CONSTANT_JITTERED': + sub.itemR(ao, "bias") if ao.gather_method == 'APPROXIMATE': - split = layout.split() - col = split.column() - col.itemR(ao, "passes") + + col.itemL(text="Sampling:") col.itemR(ao, "error_tolerance", text="Error") + col.itemR(ao, "pixel_cache") col.itemR(ao, "correction") - col = split.column() - col.itemR(ao, "falloff") - colsub = col.column() - colsub.active = ao.falloff - colsub.itemR(ao, "strength") - col.itemR(ao, "pixel_cache") - - col = layout.column() - col.row().itemR(ao, "blend_mode", expand=True) - col.row().itemR(ao, "color", expand=True) - col.itemR(ao, "energy") + col = layout.column(align=True) + col.itemL(text="Influence:") + row = col.row() + row.itemR(ao, "blend_mode", text="") + row.itemR(ao, "color", text="") + row.itemR(ao, "energy", text="") bpy.types.register(WORLD_PT_context_world) bpy.types.register(WORLD_PT_preview) @@ -182,4 +169,4 @@ bpy.types.register(WORLD_PT_world) bpy.types.register(WORLD_PT_ambient_occlusion) bpy.types.register(WORLD_PT_mist) bpy.types.register(WORLD_PT_stars) -bpy.types.register(WORLD_PT_color_correction) + diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 96494ccdb14..5f6d87c9a29 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -16,13 +16,18 @@ class INFO_HT_header(bpy.types.Header): row = layout.row() row.itemM("INFO_MT_file") row.itemM("INFO_MT_add") - row.itemM("INFO_MT_game") - row.itemM("INFO_MT_render") + if rd.use_game_engine: + row.itemM("INFO_MT_game") + else: + row.itemM("INFO_MT_render") row.itemM("INFO_MT_help") layout.template_ID(context.window, "screen") #, new="screen.new", open="scene.unlink") layout.template_ID(context.screen, "scene") #, new="screen.new", unlink="scene.unlink") + if rd.multiple_engines: + layout.itemR(rd, "engine", text="") + layout.itemS() layout.template_operator_search() diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index b19351bf779..728e5e6307b 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -21,142 +21,5 @@ class LOGIC_PT_properties(bpy.types.Panel): flow.itemR(prop, "value", text="") # we dont care about the type. rna will display correctly flow.itemR(prop, "debug") -""" -class WORLD_PT_game(WorldButtonsPanel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "Game Settings" - - def draw(self, context): - layout = self.layout - world = context.world - - flow = layout.column_flow() - flow.itemR(world, "physics_engine") - flow.itemR(world, "physics_gravity") - - flow.itemR(world, "game_fps") - flow.itemR(world, "game_logic_step_max") - flow.itemR(world, "game_physics_substep") - flow.itemR(world, "game_physics_step_max") - - flow.itemR(world, "game_use_occlusion_culling", text="Enable Occlusion Culling") - flow.itemR(world, "game_occlusion_culling_resolution") -""" -class LOGIC_PT_player(bpy.types.Panel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "Player" - - def draw(self, context): - layout = self.layout - gs = context.scene.game_data - row = layout.row() - row.itemR(gs, "fullscreen") - - split = layout.split() - col = split.column() - col.itemL(text="Resolution:") - colsub = col.column(align=True) - colsub.itemR(gs, "resolution_x", slider=False, text="X") - colsub.itemR(gs, "resolution_y", slider=False, text="Y") - - col = split.column() - col.itemL(text="Quality:") - colsub = col.column(align=True) - colsub.itemR(gs, "depth", text="Bit Depth", slider=False) - colsub.itemR(gs, "frequency", text="FPS", slider=False) - - - # framing: - col = layout.column() - col.itemL(text="Framing:") - col.row().itemR(gs, "framing_type", expand=True) - - colsub = col.column() - colsub.itemR(gs, "framing_color", text="") - -class LOGIC_PT_stereo(bpy.types.Panel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "Stereo" - - def draw(self, context): - layout = self.layout - gs = context.scene.game_data - - - # stereo options: - col= layout.column() - row = col.row() - row.itemR(gs, "stereo", expand=True) - - stereo_mode = gs.stereo - - - # stereo: - if stereo_mode == 'STEREO': - - row = layout.row() - row.itemR(gs, "stereo_mode") - - # dome: - if stereo_mode == 'DOME': - row = layout.row() - row.itemR(gs, "dome_mode", text="Dome Type") - - split=layout.split() - col=split.column() - col.itemR(gs, "dome_angle", slider=True) - col.itemR(gs, "dome_tesselation", text="Tesselation") - col=split.column() - col.itemR(gs, "dome_tilt") - col.itemR(gs, "dome_buffer_resolution", text="Resolution", slider=True) - col=layout.column() - col.itemR(gs, "dome_text") - - -class LOGIC_PT_physics(bpy.types.Panel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "World Physics" - - def draw(self, context): - layout = self.layout - gs = context.scene.game_data - flow = layout.column_flow() - flow.itemR(gs, "physics_engine") - if gs.physics_engine != "NONE": - flow.itemR(gs, "physics_gravity", text="Gravity") - - split = layout.split() - col = split.column() - col.itemL(text="Physics Steps:") - colsub = col.column(align=True) - colsub.itemR(gs, "physics_step_max", text="Max") - colsub.itemR(gs, "physics_step_sub", text="Substeps") - col.itemR(gs, "fps", text="FPS") - - col = split.column() - col.itemL(text="Logic Steps:") - col.itemR(gs, "logic_step_max", text="Max") - col.itemS() - col.itemR(gs, "use_occlusion_culling", text="Occlusion Culling") - colsub = col.column() - colsub.active = gs.use_occlusion_culling - colsub.itemR(gs, "occlusion_culling_resolution", text="Resolution") - - - else: - split = layout.split() - col = split.column() - col.itemL(text="Physics Steps:") - col.itemR(gs, "fps", text="FPS") - col = split.column() - col.itemL(text="Logic Steps:") - col.itemR(gs, "logic_step_max", text="Max") - bpy.types.register(LOGIC_PT_properties) -bpy.types.register(LOGIC_PT_player) -bpy.types.register(LOGIC_PT_stereo) -bpy.types.register(LOGIC_PT_physics) \ No newline at end of file + diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 3032bff18df..dc46940a733 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2437,7 +2437,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) } RE_test_break_cb(re, NULL, (int (*)(void *)) blender_test_break); - if(RNA_boolean_get(op->ptr, "anim")) + if(RNA_boolean_get(op->ptr, "animation")) RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->frame_step); else RE_BlenderFrame(re, scene, scene->r.cfra); @@ -2716,7 +2716,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) rj= MEM_callocN(sizeof(RenderJob), "render job"); rj->scene= scene; rj->win= CTX_wm_window(C); - rj->anim= RNA_boolean_get(op->ptr, "anim"); + rj->anim= RNA_boolean_get(op->ptr, "animation"); rj->iuser.scene= scene; rj->iuser.ok= 1; @@ -2772,7 +2772,7 @@ void SCREEN_OT_render(wmOperatorType *ot) ot->poll= ED_operator_screenactive; RNA_def_int(ot->srna, "layers", 0, 0, INT_MAX, "Layers", "", 0, INT_MAX); - RNA_def_boolean(ot->srna, "anim", 0, "Animation", ""); + RNA_def_boolean(ot->srna, "animation", 0, "Animation", ""); } /* *********************** cancel render viewer *************** */ @@ -2977,6 +2977,7 @@ void ED_keymap_screen(wmWindowManager *wm) /* render */ WM_keymap_add_item(keymap, "SCREEN_OT_render", F12KEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_render", F12KEY, KM_PRESS, KM_CTRL, 0)->ptr, "animation", 1); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_cancel", ESCKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_show", F11KEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 9048565b01f..1ebab105086 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -360,32 +360,7 @@ static int buttons_context_path_texture(ButsContextPath *path) return 0; } -static int buttons_context_path_game(ButsContextPath *path) -{ - /* XXX temporary context. Using material slot instead of ob->game_data */ - Object *ob; - PointerRNA *ptr= &path->ptr[path->len-1]; - Material *ma; - /* if we already have a (pinned) material, we're done */ - if(RNA_struct_is_a(ptr->type, &RNA_Material)) { - return 1; - } - /* if we have an object, use the object material slot */ - else if(buttons_context_path_object(path)) { - ob= path->ptr[path->len-1].data; - - if(ob && ob->type && (ob->typeactcol); - RNA_id_pointer_create(&ma->id, &path->ptr[path->len]); - path->len++; - return 1; - } - } - - /* no path to a material possible */ - return 0; -} static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int worldtex) { SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); @@ -430,9 +405,6 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma case BCONTEXT_DATA: found= buttons_context_path_data(path, -1); break; - case BCONTEXT_GAME: - found= buttons_context_path_game(path); - break; case BCONTEXT_PARTICLE: found= buttons_context_path_particle(path); break; @@ -526,7 +498,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r if(CTX_data_dir(member)) { static const char *dir[] = { "world", "object", "mesh", "armature", "lattice", "curve", - "meta_ball", "lamp", "camera", "material", "material_slot", "game", + "meta_ball", "lamp", "camera", "material", "material_slot", "texture", "texture_slot", "bone", "edit_bone", "particle_system", "cloth", "soft_body", "fluid", "collision", NULL}; diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 0fb00b2780b..0f6ef6fe570 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -124,8 +124,6 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=BUTS_UI_UNIT, yco, BUTS_UI_UNIT, BUTS_UI_UNIT, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); - if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_GAME, 0, 0, "Game"); xco+= BUTS_UI_UNIT; uiBlockEndAlign(block); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 05d181ba330..8284744d519 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -177,8 +177,6 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar) ED_region_panels(C, ar, vertical, "modifier"); else if (sbuts->mainb == BCONTEXT_CONSTRAINT) ED_region_panels(C, ar, vertical, "constraint"); - else if (sbuts->mainb == BCONTEXT_GAME) - ED_region_panels(C, ar, vertical, "game"); sbuts->re_align= 0; sbuts->mainbo= sbuts->mainb; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 61931085707..34a5efbdf5f 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -580,7 +580,6 @@ typedef struct SpaceConsole { #define BCONTEXT_TEXTURE 5 #define BCONTEXT_PARTICLE 6 #define BCONTEXT_PHYSICS 7 -#define BCONTEXT_GAME 8 #define BCONTEXT_BONE 9 #define BCONTEXT_MODIFIER 10 #define BCONTEXT_CONSTRAINT 12 diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index 3b47eeca59d..80abd4fda61 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -34,4 +34,7 @@ if env['WITH_BF_QUICKTIME']: if env['WITH_BF_LCMS']: defs.append('WITH_LCMS') +if env['WITH_BF_GAMEENGINE']: + defs.append('GAMEBLENDER=1') + env.BlenderLib ( 'bf_rna', objs, Split(incs), defines=defs, libtype=['core'], priority = [195] ) diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index a4f184a3f67..6c8038bd509 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -56,6 +56,9 @@ if env['WITH_BF_QUICKTIME']: if env['WITH_BF_LCMS']: defs.append('WITH_LCMS') +if env['WITH_BF_GAMEENGINE']: + defs.append('GAMEBLENDER=1') + makesrna_tool.Append(CPPDEFINES=defs) makesrna_tool.Append (CPPPATH = Split(incs)) diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 774eecba0f1..89c48230357 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -48,6 +48,41 @@ /* RenderEngine */ +static RenderEngineType internal_render_type = { + NULL, NULL, "BLENDER_RENDER", "Blender Render", RE_INTERNAL, NULL, {NULL, NULL, NULL, NULL}}; +#if GAMEBLENDER == 1 +static RenderEngineType internal_game_type = { + NULL, NULL, "BLENDER_GAME", "Blender Game", RE_INTERNAL|RE_GAME, NULL, {NULL, NULL, NULL, NULL}}; +#endif + +ListBase R_engines = {NULL, NULL}; + +void RE_engines_init() +{ + BLI_addtail(&R_engines, &internal_render_type); +#if GAMEBLENDER == 1 + BLI_addtail(&R_engines, &internal_game_type); +#endif +} + +void RE_engines_exit() +{ + RenderEngineType *type, *next; + + for(type=R_engines.first; type; type=next) { + next= type->next; + + BLI_remlink(&R_engines, type); + + if(!(type->flag & RE_INTERNAL)) { + if(type->ext.free) + type->ext.free(type->ext.data); + + MEM_freeN(type); + } + } +} + static void engine_render(RenderEngine *engine, struct Scene *scene) { PointerRNA ptr; diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index bd23fc9e1f6..aa4c410bc73 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -232,6 +232,18 @@ static int rna_SceneRenderData_multiple_engines_get(PointerRNA *ptr) return (BLI_countlist(&R_engines) > 1); } +static int rna_SceneRenderData_use_game_engine_get(PointerRNA *ptr) +{ + RenderData *rd= (RenderData*)ptr->data; + RenderEngineType *type; + + for(type=R_engines.first; type; type=type->next) + if(strcmp(type->idname, rd->engine) == 0) + return (type->flag & RE_GAME); + + return 0; +} + static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values) { SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data; @@ -1579,11 +1591,17 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_enum_items(prop, engine_items); RNA_def_property_enum_funcs(prop, "rna_SceneRenderData_engine_get", "rna_SceneRenderData_engine_set", "rna_SceneRenderData_engine_itemf"); RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_multiple_engines_get", NULL); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Multiple Engine", "More than one rendering engine is available."); + RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available."); + + prop= RNA_def_property(srna, "use_game_engine", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_use_game_engine_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Use Game Engine", "Current rendering engine is a game engine."); } void RNA_def_scene(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 461c46e09bf..2231a59e770 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -239,6 +239,20 @@ StructRNA *rna_SpaceButtonsWindow_pin_id_typef(PointerRNA *ptr) return &RNA_ID; } +void rna_SpaceButtonsWindow_align_set(PointerRNA *ptr, int value) +{ + SpaceButs *sbuts= (SpaceButs*)(ptr->data); + bScreen *sc= (bScreen*)(ptr->id.data); + ScrArea *sa; + + sbuts->align= value; + sbuts->re_align= 1; + + for(sa=sc->areabase.first; sa; sa=sa->next) + if(BLI_findindex(&sa->spacedata, sbuts) != -1) + ED_area_tag_redraw(sa); +} + /* Space Console */ static void rna_ConsoleLine_line_get(PointerRNA *ptr, char *value) { @@ -658,12 +672,11 @@ static void rna_def_space_buttons(BlenderRNA *brna) {BCONTEXT_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture"}, {BCONTEXT_PARTICLE, "PARTICLE", ICON_PARTICLES, "Particle", "Particle"}, {BCONTEXT_PHYSICS, "PHYSICS", ICON_PHYSICS, "Physics", "Physics"}, - {BCONTEXT_GAME, "GAME", ICON_GAME, "Game", "Game"}, {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem panel_alignment_items[] = { - {1, "HORIZONTAL", 0, "Horizontal", ""}, - {2, "VERTICAL", 0, "Vertical", ""}, + static EnumPropertyItem align_items[] = { + {BUT_HORIZONTAL, "HORIZONTAL", 0, "Horizontal", ""}, + {BUT_VERTICAL, "VERTICAL", 0, "Vertical", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "SpaceButtonsWindow", "Space"); @@ -676,10 +689,11 @@ static void rna_def_space_buttons(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Buttons Context", "The type of active data to display and edit in the buttons window"); RNA_def_property_update(prop, NC_WINDOW, NULL); - prop= RNA_def_property(srna, "panel_alignment", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "align"); - RNA_def_property_enum_items(prop, panel_alignment_items); - RNA_def_property_ui_text(prop, "Panel Alignment", "Arrangement of the panels within the buttons window"); + RNA_def_property_enum_items(prop, align_items); + RNA_def_property_enum_funcs(prop, NULL, "rna_SpaceButtonsWindow_align_set", NULL); + RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels within the buttons window"); RNA_def_property_update(prop, NC_WINDOW, NULL); /* pinned data */ diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index c41c0a0fcef..8beaa855201 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -218,7 +218,7 @@ static void rna_def_ambient_occlusion(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "aodist"); RNA_def_property_ui_text(prop, "Distance", "Length of rays, defines how far away other faces give occlusion effect."); - prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "falloff_strength", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "aodistfac"); RNA_def_property_ui_text(prop, "Strength", "Distance attenuation factor, the higher, the 'shorter' the shadows."); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 643a381c54f..d96054f5a76 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -240,6 +240,8 @@ struct Scene *RE_GetScene(struct Render *re); /* External Engine */ +#define RE_INTERNAL 1 +#define RE_GAME 2 extern ListBase R_engines; @@ -249,6 +251,7 @@ typedef struct RenderEngineType { /* type info */ char idname[32]; char name[32]; + int flag; void (*render)(struct RenderEngine *engine, struct Scene *scene); @@ -269,7 +272,8 @@ void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result); int RE_engine_test_break(RenderEngine *engine); void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info); -void RE_engines_free(void); +void RE_engines_init(void); +void RE_engines_exit(void); #endif /* RE_PIPELINE_H */ diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 801a9729277..3e50ea92846 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2783,12 +2783,6 @@ void RE_init_threadcount(Render *re) /************************** External Engines ***************************/ -static RenderEngineType internal_engine_type = { - NULL, NULL, "BlenderRenderEngine", "Blender", NULL, - NULL, NULL, NULL, NULL}; - -ListBase R_engines = {&internal_engine_type, &internal_engine_type}; - RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h) { Render *re= engine->re; @@ -2924,19 +2918,3 @@ static void external_render_3d(Render *re, RenderEngineType *type) } } -void RE_engines_free() -{ - RenderEngineType *type, *next; - - for(type=R_engines.first; type; type=next) { - next= type->next; - - if(type != &internal_engine_type) { - if(type->ext.free) - type->ext.free(type->ext.data); - - MEM_freeN(type); - } - } -} - diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 3d8efc018c4..fd102b663d0 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -239,7 +239,7 @@ void WM_exit(bContext *C) BLF_exit(); RE_FreeAllRender(); - RE_engines_free(); + RE_engines_exit(); // free_txt_data(); diff --git a/source/creator/creator.c b/source/creator/creator.c index a3e5ca16a13..9034833563b 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -313,6 +313,7 @@ int main(int argc, char **argv) BLI_where_am_i(bprogname, argv[0]); RNA_init(); + RE_engines_init(); /* Hack - force inclusion of the plugin api functions, * see blenpluginapi:pluginapi.c From 57727fc14534671da8f8afe508cc282d4ce39fe8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Jul 2009 22:45:24 +0000 Subject: [PATCH 343/512] blender wasn't building on my system because of this, cant this use notifiers? --- source/blender/makesrna/intern/rna_space.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 2231a59e770..cf14d18ac98 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -248,9 +248,11 @@ void rna_SpaceButtonsWindow_align_set(PointerRNA *ptr, int value) sbuts->align= value; sbuts->re_align= 1; +#if 0 // XXX -bad level call? for(sa=sc->areabase.first; sa; sa=sa->next) if(BLI_findindex(&sa->spacedata, sbuts) != -1) ED_area_tag_redraw(sa); +#endif } /* Space Console */ From 0f4fd4f5b17d4fff97cc3cde4cc7d144137154ca Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 06:08:03 +0000 Subject: [PATCH 344/512] NLA - Auto-Blending + 'Smarter' Extend Behaviour * Auto-blending (blend in/out values get determined based on 'overlaps' of strips) now occurs after transforming strips. Where islands (continuous chains of strips) occur, only the ones on the ends of the islands will get or contribute to auto-blending. * Extend modes (other than 'nothing') now get automatically determined (after transforms) so that moving strips will no-longer cause problems. * Added a new option to hide influence curves in NLA. Also, made the line widths for these curves narrower, since the old setting was too ugly. * Pose copy/paste buffer now gets freed on exit --- source/blender/blenkernel/BKE_nla.h | 2 + source/blender/blenkernel/intern/nla.c | 119 ++++++++++++++---- source/blender/editors/space_nla/nla_draw.c | 15 +-- source/blender/editors/space_nla/nla_header.c | 6 +- .../editors/transform/transform_conversions.c | 114 +++++++++-------- source/blender/makesdna/DNA_space_types.h | 1 + source/blender/makesrna/intern/rna_space.c | 4 + .../windowmanager/intern/wm_init_exit.c | 2 + 8 files changed, 182 insertions(+), 81 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index bb5a2782663..241a8fd7b59 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -91,6 +91,8 @@ short BKE_nlatrack_has_animated_strips(struct NlaTrack *nlt); short BKE_nlatracks_have_animated_strips(ListBase *tracks); void BKE_nlastrip_validate_fcurves(struct NlaStrip *strip); +void BKE_nla_validate_state(struct AnimData *adt); + /* ............ */ void BKE_nla_action_pushdown(struct AnimData *adt); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 457df9be7a9..1871ec006f4 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -375,7 +375,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short return strip->actend - (repeatsNum * actlength * scale) - (fmod(cframe - strip->start, actlength*scale) / scale); } - else { + else /* if (mode == NLATIME_CONVERT_EVAL) */{ if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { /* this case prevents the motion snapping back to the first frame at the end of the strip * by catching the case where repeats is a whole number, which means that the end of the strip @@ -1229,13 +1229,52 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) /* ---- */ +/* Get strips which overlap the given one at the start/end of its range + * - strip: strip that we're finding overlaps for + * - track: nla-track that the overlapping strips should be found from + * - start, end: frames for the offending endpoints + */ +static void nlastrip_get_endpoint_overlaps (NlaStrip *strip, NlaTrack *track, float **start, float **end) +{ + NlaStrip *nls; + + /* find strips that overlap over the start/end of the given strip, + * but which don't cover the entire length + */ + // TODO: this scheme could get quite slow for doing this on many strips... + for (nls= track->strips.first; nls; nls= nls->next) { + /* check if strip overlaps (extends over or exactly on) the entire range of the strip we're validating */ + if ((nls->start <= strip->start) && (nls->end >= strip->end)) { + *start= NULL; + *end= NULL; + return; + } + + /* check if strip doesn't even occur anywhere near... */ + if (nls->end < strip->start) + continue; /* skip checking this strip... not worthy of mention */ + if (nls->start > strip->end) + return; /* the range we're after has already passed */ + + /* if this strip is not part of an island of continuous strips, it can be used + * - this check needs to be done for each end of the strip we try and use... + */ + if ((nls->next == NULL) || IS_EQ(nls->next->start, nls->end)==0) { + if ((nls->end > strip->start) && (nls->end < strip->end)) + *start= &nls->end; + } + if ((nls->prev == NULL) || IS_EQ(nls->prev->end, nls->start)==0) { + if ((nls->start < strip->end) && (nls->start > strip->start)) + *end= &nls->start; + } + } +} + /* Determine auto-blending for the given strip */ void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls) { - NlaTrack *track; - NlaStrip *strip; - //float *ps=NULL, *pe=NULL; - //float *ns=NULL, *ne=NULL; + float *ps=NULL, *pe=NULL; + float *ns=NULL, *ne=NULL; /* sanity checks */ if ELEM(NULL, nls, nlt) @@ -1246,40 +1285,74 @@ void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls) return; /* get test ranges */ - if (nlt->prev) { - /* find strips that overlap over the start/end of the given strip, - * but which don't cover the entire length - */ - track= nlt->prev; - for (strip= track->strips.first; strip; strip= strip->next) { - - } + if (nlt->prev) + nlastrip_get_endpoint_overlaps(nls, nlt->prev, &ps, &pe); + if (nlt->next) + nlastrip_get_endpoint_overlaps(nls, nlt->next, &ns, &ne); + + /* set overlaps for this strip + * - don't use the values obtained though if the end in question + * is directly followed/preceeded by another strip, forming an + * 'island' of continuous strips + */ + if ( (ps || ns) && ((nls->prev == NULL) || IS_EQ(nls->prev->end, nls->start)==0) ) + { + /* start overlaps - pick the largest overlap */ + if ( ((ps && ns) && (*ps > *ns)) || (ps) ) + nls->blendin= *ps - nls->start; + else + nls->blendin= *ns - nls->start; } - if (nlt->next) { - /* find strips that overlap over the start/end of the given strip, - * but which don't cover the entire length - */ - track= nlt->next; - for (strip= track->strips.first; strip; strip= strip->next) { - - } + else /* no overlap allowed/needed */ + nls->blendin= 0.0f; + + if ( (pe || ne) && ((nls->next == NULL) || IS_EQ(nls->next->start, nls->end)==0) ) + { + /* end overlaps - pick the largest overlap */ + if ( ((pe && ne) && (*pe > *ne)) || (pe) ) + nls->blendout= nls->end - *pe; + else + nls->blendout= nls->end - *ne; } + else /* no overlap allowed/needed */ + nls->blendout= 0.0f; } /* Ensure that auto-blending and other settings are set correctly */ void BKE_nla_validate_state (AnimData *adt) { - NlaStrip *strip; + NlaStrip *strip, *fstrip=NULL; NlaTrack *nlt; /* sanity checks */ if ELEM(NULL, adt, adt->nla_tracks.first) return; - /* adjust blending values for auto-blending */ + /* adjust blending values for auto-blending, and also do an initial pass to find the earliest strip */ for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { for (strip= nlt->strips.first; strip; strip= strip->next) { + /* auto-blending first */ BKE_nlastrip_validate_autoblends(nlt, strip); + + /* extend mode - find first strip */ + if ((fstrip == NULL) || (strip->start < fstrip->start)) + fstrip= strip; + } + } + + /* second pass over the strips to adjust the extend-mode to fix any problems */ + for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) { + for (strip= nlt->strips.first; strip; strip= strip->next) { + /* apart from 'nothing' option which user has to explicitly choose, we don't really know if + * we should be overwriting the extend setting (but assume that's what the user wanted) + */ + // TODO: 1 solution is to tie this in with auto-blending... + if (strip->extendmode != NLASTRIP_EXTEND_NOTHING) { + if (strip == fstrip) + strip->extendmode= NLASTRIP_EXTEND_HOLD; + else + strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD; + } } } } diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 9e60651081f..9aa71187334 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -252,10 +252,9 @@ static void nla_draw_strip_curves (NlaStrip *strip, View2D *v2d, float yminc, fl // XXX nasty hacked color for now... which looks quite bad too... glColor3f(0.7f, 0.7f, 0.7f); - /* draw with AA'd line, 2 units thick (it's either 1 or 2 px) */ + /* draw with AA'd line */ glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); - glLineWidth(2.0f); /* influence -------------------------- */ if (strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) { @@ -302,11 +301,10 @@ static void nla_draw_strip_curves (NlaStrip *strip, View2D *v2d, float yminc, fl /* turn off AA'd lines */ glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); - glLineWidth(1.0f); } /* main call for drawing a single NLA-strip */ -static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) +static void nla_draw_strip (SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc) { float color[3]; @@ -373,8 +371,11 @@ static void nla_draw_strip (AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2 gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1); - /* draw strip's control 'curves' */ - nla_draw_strip_curves(strip, v2d, yminc, ymaxc); + /* draw strip's control 'curves' + * - only if user hasn't hidden them... + */ + if ((snla->flag & SNLA_NOSTRIPCURVES) == 0) + nla_draw_strip_curves(strip, v2d, yminc, ymaxc); /* draw strip outline * - color used here is to indicate active vs non-active @@ -527,7 +528,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) for (strip=nlt->strips.first, index=1; strip; strip=strip->next, index++) { if (BKE_nlastrip_within_bounds(strip, v2d->cur.xmin, v2d->cur.xmax)) { /* draw the visualisation of the strip */ - nla_draw_strip(adt, nlt, strip, v2d, yminc, ymaxc); + nla_draw_strip(snla, adt, nlt, strip, v2d, yminc, ymaxc); /* add the text for this strip to the cache */ nla_draw_strip_text(nlt, strip, index, v2d, yminc, ymaxc); diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index e997a096bce..f159f440759 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -21,7 +21,7 @@ * All rights reserved. * * - * Contributor(s): Blender Foundation + * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** */ @@ -100,7 +100,9 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); else uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); - + + uiItemR(layout, NULL, 0, &spaceptr, "show_strip_curves", 0, 0, 0); + uiItemS(layout); uiItemS(layout); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 3d643a2dec1..4c91ca9af4a 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4645,34 +4645,34 @@ void special_aftertrans_update(TransInfo *t) SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - + if (ac.datatype == ANIMCONT_DOPESHEET) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_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 ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - + if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { @@ -4685,7 +4685,7 @@ void special_aftertrans_update(TransInfo *t) posttrans_fcurve_clean(fcu); } } - + /* free temp memory */ BLI_freelistN(&anim_data); } @@ -4694,13 +4694,13 @@ void special_aftertrans_update(TransInfo *t) // fixme... some of this stuff is not good if (ob) { ob->ctime= -1234567.0f; - + if (ob->pose || ob_get_key(ob)) DAG_object_flush_update(scene, ob, OB_RECALC); else DAG_object_flush_update(scene, ob, OB_RECALC_OB); } - + /* Do curve cleanups? */ if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) @@ -4712,7 +4712,7 @@ void special_aftertrans_update(TransInfo *t) #if 0 // XXX old animation system /* fix up the Ipocurves and redraw stuff */ Key *key= (Key *)ac.data; - + if (key->ipo) { if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) @@ -4721,7 +4721,7 @@ void special_aftertrans_update(TransInfo *t) } } #endif // XXX old animation system - + DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); } #if 0 // XXX future of this is still not clear @@ -4731,23 +4731,23 @@ void special_aftertrans_update(TransInfo *t) { bScreen *sc= (bScreen *)ac.data; ScrArea *sa; - + /* BAD... we need to loop over all screen areas for current screen... * - sync this with actdata_filter_gpencil() in editaction.c */ for (sa= sc->areabase.first; sa; sa= sa->next) { bGPdata *gpd= gpencil_data_getactive(sa); - + if (gpd) posttrans_gpd_clean(gpd); } } } #endif // XXX future of this is still not clear - + /* make sure all F-Curves are set correctly */ ANIM_editkeyframes_refresh(&ac); - + /* clear flag that was set for time-slide drawing */ saction->flag &= ~SACTION_MOVING; } @@ -4755,35 +4755,35 @@ void special_aftertrans_update(TransInfo *t) SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_CURVEVISIBLE); - + /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - + /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; - + if ( (sipo->flag & SIPO_NOTRANSKEYCULL)==0 && ((cancelled == 0) || (duplicate)) ) { @@ -4796,58 +4796,74 @@ void special_aftertrans_update(TransInfo *t) posttrans_fcurve_clean(fcu); } } - + /* free temp memory */ BLI_freelistN(&anim_data); } - + /* make sure all F-Curves are set correctly */ ANIM_editkeyframes_refresh(&ac); } else if (t->spacetype == SPACE_NLA) { Scene *scene; bAnimContext ac; - + /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ memset(&ac, 0, sizeof(bAnimContext)); - + scene= ac.scene= t->scene; ob= ac.obact= OBACT; ac.sa= t->sa; ac.ar= t->ar; ac.spacetype= (t->sa)? t->sa->spacetype : 0; ac.regiontype= (t->ar)? t->ar->regiontype : 0; - + if (ANIM_animdata_context_getdata(&ac) == 0) return; - + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; - short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); - - /* 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; - - /* make sure strips are in order again */ - BKE_nlatrack_sort_strips(nlt); - - /* remove the temp metas */ - BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); + + /* firstly, make the strips normal again */ + { + short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); + + /* 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; + + /* make sure strips are in order again */ + BKE_nlatrack_sort_strips(nlt); + + /* remove the temp metas */ + BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); + } + + /* free temp memory */ + BLI_freelistN(&anim_data); + } + + /* perform after-transfrom validation */ + { + short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT); + + /* get blocks to work on */ + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + for (ale= anim_data.first; ale; ale= ale->next) { + /* performing auto-blending, extend-mode validation, etc. */ + BKE_nla_validate_state(ale->data); + } + + /* free temp memory */ + BLI_freelistN(&anim_data); } - - /* free temp memory */ - BLI_freelistN(&anim_data); } - - // XXX check on the calls below... we need some of these sanity checks - //synchronize_action_strips(); - //ANIM_editkeyframes_refresh(&ac); } else if (t->obedit) { // TRANSFORM_FIX_ME diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 34a5efbdf5f..4760fd00bf2 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -811,6 +811,7 @@ enum { #define SNLA_DRAWTIME (1<<2) #define SNLA_NOTRANSKEYCULL (1<<3) #define SNLA_NODRAWCFRANUM (1<<4) +#define SNLA_NOSTRIPCURVES (1<<5) /* time->flag */ /* show timing in frames instead of in seconds */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index cf14d18ac98..bf475d49048 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1060,6 +1060,10 @@ static void rna_def_space_nla(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NODRAWCFRANUM); RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); + prop= RNA_def_property(srna, "show_strip_curves", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOSTRIPCURVES); + RNA_def_property_ui_text(prop, "Show Control Curves", "Show influence curves on strips."); + /* editing */ // TODO... autosnap, dopesheet? } diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index fd102b663d0..599844f1020 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -178,6 +178,7 @@ extern wchar_t *copybufinfo; // XXX copy/paste buffer stuff... extern void free_anim_copybuf(); +extern void free_posebuf(); /* called in creator.c even... tsk, split this! */ void WM_exit(bContext *C) @@ -231,6 +232,7 @@ void WM_exit(bContext *C) free_blender(); /* blender.c, does entire library and spacetypes */ // free_matcopybuf(); free_anim_copybuf(); + free_posebuf(); // free_vertexpaint(); // free_imagepaint(); From dbd5c5b8a13795a32f6d5bb1f4ae3c2b89058b47 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 06:51:33 +0000 Subject: [PATCH 345/512] 2.5 - Animation Tweaks (KeyingSets/NLA) * Insert Keyframes menu now only displays the 'active keyingset' entry when there are some KeyingSets. * Moved the validation code for auto-blending/extend modes to NLA editor code, and included calls for this in many of the editing tools for NLA strips. * Removed obsolete 'ID_IPO' entries from RNA-ID wrapping (these were commented out anyway). --- source/blender/editors/animation/keyframing.c | 14 ++++-- source/blender/editors/include/ED_anim_api.h | 6 +++ source/blender/editors/space_nla/nla_edit.c | 49 +++++++++++++++++++ .../editors/transform/transform_conversions.c | 46 ++++++----------- source/blender/makesrna/intern/rna_ID.c | 2 - 5 files changed, 79 insertions(+), 38 deletions(-) diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 251c59c47c9..a6f379a9eed 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1081,9 +1081,15 @@ static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event) pup= uiPupMenuBegin(C, "Insert Keyframe", 0); layout= uiPupMenuLayout(pup); - /* active Keying Set */ - uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++); - uiItemS(layout); + /* active Keying Set + * - only include entry if it exists + */ + if (scene->active_keyingset) { + uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++); + uiItemS(layout); + } + else + i++; /* user-defined Keying Sets * - these are listed in the order in which they were defined for the active scene @@ -1112,7 +1118,7 @@ static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event) void ANIM_OT_insert_keyframe_menu (wmOperatorType *ot) { /* identifiers */ - ot->name= "Insert Keyframe"; + ot->name= "Insert Keyframe Menu"; ot->idname= "ANIM_OT_insert_keyframe_menu"; /* callbacks */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index cc18c81fe51..7cfc788177e 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -343,6 +343,12 @@ void ANIM_nla_mapping_draw(struct gla2DDrawInfo *di, struct AnimData *adt, short /* Apply/Unapply NLA mapping to all keyframes in the nominated F-Curve */ void ANIM_nla_mapping_apply_fcurve(struct AnimData *adt, struct FCurve *fcu, short restore, short only_keys); +/* ..... */ + +/* Perform auto-blending/extend refreshes after some operations */ +// NOTE: defined in space_nla/nla_edit.c, not in animation/ +void ED_nla_postop_refresh(bAnimContext *ac); + /* ------------- Utility macros ----------------------- */ /* checks if the given BezTriple is selected */ diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 01871d3d9d5..586b2467781 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -77,6 +77,28 @@ #include "nla_intern.h" // own include #include "nla_private.h" // FIXME... maybe this shouldn't be included? +/* *********************************************** */ +/* Utilities exported to other places... */ + +/* Perform validation for blending/extend settings */ +void ED_nla_postop_refresh (bAnimContext *ac) +{ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT); + + /* get blocks to work on */ + ANIM_animdata_filter(&ac, &anim_data, filter, ac->data, ac->datatype); + + for (ale= anim_data.first; ale; ale= ale->next) { + /* performing auto-blending, extend-mode validation, etc. */ + BKE_nla_validate_state(ale->data); + } + + /* free temp memory */ + BLI_freelistN(&anim_data); +} + /* *********************************************** */ /* 'Special' Editing */ @@ -315,6 +337,9 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -427,6 +452,9 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) /* was anything added? */ if (done) { + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -633,6 +661,9 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) BLI_freelistN(&anim_data); if (done) { + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -718,6 +749,9 @@ static int nlaedit_delete_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -860,6 +894,9 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -993,6 +1030,9 @@ static int nlaedit_move_up_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -1064,6 +1104,9 @@ static int nlaedit_move_down_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -1222,6 +1265,9 @@ static int nlaedit_clear_scale_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); @@ -1360,6 +1406,9 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) /* free temp data */ BLI_freelistN(&anim_data); + /* refresh auto strip properties */ + ED_nla_postop_refresh(&ac); + /* set notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_NLA_EDIT, NULL); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 4c91ca9af4a..1a0b16695e1 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4779,7 +4779,6 @@ void special_aftertrans_update(TransInfo *t) /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { AnimData *adt= ANIM_nla_mapping_get(&ac, ale); FCurve *fcu= (FCurve *)ale->key_data; @@ -4826,43 +4825,26 @@ void special_aftertrans_update(TransInfo *t) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; + short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); - /* firstly, make the strips normal again */ - { - short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NLATRACKS); + /* 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; - /* get channels to work on */ - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + /* make sure strips are in order again */ + BKE_nlatrack_sort_strips(nlt); - 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); - - /* remove the temp metas */ - BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); - } - - /* free temp memory */ - BLI_freelistN(&anim_data); + /* remove the temp metas */ + BKE_nlastrips_clear_metas(&nlt->strips, 0, 1); } + /* free temp memory */ + BLI_freelistN(&anim_data); + /* perform after-transfrom validation */ - { - short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT); - - /* get blocks to work on */ - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - - for (ale= anim_data.first; ale; ale= ale->next) { - /* performing auto-blending, extend-mode validation, etc. */ - BKE_nla_validate_state(ale->data); - } - - /* free temp memory */ - BLI_freelistN(&anim_data); - } + ED_nla_postop_refresh(&ac); } } else if (t->obedit) { diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 7d8bab8bee8..cf3d59f78a0 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -67,7 +67,6 @@ short RNA_type_to_ID_code(StructRNA *type) if(RNA_struct_is_a(type, &RNA_Curve)) return ID_CU; if(RNA_struct_is_a(type, &RNA_Group)) return ID_GR; if(RNA_struct_is_a(type, &RNA_Image)) return ID_IM; - //if(RNA_struct_is_a(type, &RNA_Ipo)) return case ID_IP; if(RNA_struct_is_a(type, &RNA_Key)) return ID_KE; if(RNA_struct_is_a(type, &RNA_Lamp)) return ID_LA; if(RNA_struct_is_a(type, &RNA_Library)) return ID_LI; @@ -100,7 +99,6 @@ StructRNA *ID_code_to_RNA_type(short idcode) case ID_CU: return &RNA_Curve; case ID_GR: return &RNA_Group; case ID_IM: return &RNA_Image; - //case ID_IP: return &RNA_Ipo; case ID_KE: return &RNA_Key; case ID_LA: return &RNA_Lamp; case ID_LI: return &RNA_Library; From b2606534b6d19c149a17fabc99dc0a5cbc8f2a52 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 08:05:56 +0000 Subject: [PATCH 346/512] 2.5 - Timeline window now displays keyframe lines again * Keyframes for scene-linked animdata is drawn first (if 'Only Selected Data Keys' is off) * Keyframes are also drawn for the active object --- source/blender/editors/animation/anim_ops.c | 4 +- source/blender/editors/animation/keyframing.c | 16 +-- .../blender/editors/armature/armature_ops.c | 2 +- .../blender/editors/include/ED_keyframing.h | 3 +- source/blender/editors/object/object_ops.c | 2 +- .../blender/editors/space_time/space_time.c | 99 ++++++++++++++++++- .../blender/editors/space_time/time_header.c | 11 --- .../editors/space_view3d/view3d_header.c | 4 +- 8 files changed, 112 insertions(+), 29 deletions(-) diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 73a1c934d97..7107639b036 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -386,10 +386,10 @@ void ED_operatortypes_anim(void) WM_operatortype_append(ANIM_OT_insert_keyframe); WM_operatortype_append(ANIM_OT_delete_keyframe); WM_operatortype_append(ANIM_OT_insert_keyframe_menu); - //WM_operatortype_append(ANIM_OT_delete_keyframe_menu); + WM_operatortype_append(ANIM_OT_delete_keyframe_v3d); WM_operatortype_append(ANIM_OT_insert_keyframe_button); WM_operatortype_append(ANIM_OT_delete_keyframe_button); - WM_operatortype_append(ANIM_OT_delete_keyframe_old); // xxx remove? + WM_operatortype_append(ANIM_OT_add_driver_button); WM_operatortype_append(ANIM_OT_remove_driver_button); diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index a6f379a9eed..60d0aa2c7bd 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1223,7 +1223,7 @@ void ANIM_OT_delete_keyframe (wmOperatorType *ot) * -- Joshua Leung, Jan 2009 */ -static int delete_key_old_exec (bContext *C, wmOperator *op) +static int delete_key_v3d_exec (bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap @@ -1261,15 +1261,15 @@ static int delete_key_old_exec (bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ANIM_OT_delete_keyframe_old (wmOperatorType *ot) +void ANIM_OT_delete_keyframe_v3d (wmOperatorType *ot) { /* identifiers */ ot->name= "Delete Keyframe"; - ot->idname= "ANIM_OT_delete_keyframe_old"; + ot->idname= "ANIM_OT_delete_keyframe_v3d"; /* callbacks */ ot->invoke= WM_operator_confirm; - ot->exec= delete_key_old_exec; + ot->exec= delete_key_v3d_exec; ot->poll= ED_operator_areaactive; @@ -1347,7 +1347,7 @@ static int insert_key_button_exec (bContext *C, wmOperator *op) void ANIM_OT_insert_keyframe_button (wmOperatorType *ot) { /* identifiers */ - ot->name= "Insert Keyframe"; + ot->name= "Insert Keyframe (Buttons)"; ot->idname= "ANIM_OT_insert_keyframe_button"; /* callbacks */ @@ -1355,7 +1355,7 @@ void ANIM_OT_insert_keyframe_button (wmOperatorType *ot) ot->poll= modify_key_op_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "all", 1, "All", "Insert a keyframe for all element of the array."); @@ -1417,7 +1417,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) void ANIM_OT_delete_keyframe_button (wmOperatorType *ot) { /* identifiers */ - ot->name= "Delete Keyframe"; + ot->name= "Delete Keyframe (Buttons)"; ot->idname= "ANIM_OT_delete_keyframe_button"; /* callbacks */ @@ -1425,7 +1425,7 @@ void ANIM_OT_delete_keyframe_button (wmOperatorType *ot) ot->poll= modify_key_op_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "all", 1, "All", "Delete keyfames from all elements of the array."); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index bf4ec09f3fb..5de40ecc54f 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -275,7 +275,7 @@ void ED_keymap_armature(wmWindowManager *wm) // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, KM_PRESS, KM_ALT, 0); /* Pose -> PoseLib ------------- */ /* only set in posemode, by space_view3d listener */ diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index 3b3d0157362..64672e3502b 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -110,8 +110,7 @@ void ANIM_OT_delete_keyframe(struct wmOperatorType *ot); * required for each space. */ void ANIM_OT_insert_keyframe_menu(struct wmOperatorType *ot); -void ANIM_OT_delete_keyframe_menu(struct wmOperatorType *ot); // xxx unimplemented yet -void ANIM_OT_delete_keyframe_old(struct wmOperatorType *ot); // xxx rename and keep? +void ANIM_OT_delete_keyframe_v3d(struct wmOperatorType *ot); /* Keyframe managment operators for UI buttons. */ void ANIM_OT_insert_keyframe_button(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 9971030bb66..ad3d13ed511 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -184,7 +184,7 @@ void ED_keymap_object(wmWindowManager *wm) // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "GROUP_OT_group_create", GKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove", GKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index c4ca4d8522f..24afd24740a 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -29,6 +29,7 @@ #include #include +#include "DNA_object_types.h" #include "DNA_space_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -37,11 +38,14 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" +#include "BLI_dlrbTree.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_screen.h" +#include "BKE_utildefines.h" +#include "ED_keyframes_draw.h" #include "ED_space_api.h" #include "ED_screen.h" #include "ED_util.h" @@ -106,6 +110,95 @@ static void time_draw_sfra_efra(const bContext *C, SpaceTime *stime, ARegion *ar fdrawline((float)PEFRA, v2d->cur.ymin, (float)PEFRA, v2d->cur.ymax); } +/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */ +static ActKeyColumn *time_cfra_find_ak (ActKeyColumn *ak, float cframe) +{ + ActKeyColumn *akn= NULL; + + /* sanity checks */ + if (ak == NULL) + return NULL; + + /* check if this is a match, or whether it is in some subtree */ + if (cframe < ak->cfra) + akn= time_cfra_find_ak(ak->left, cframe); + else if (cframe > ak->cfra) + akn= time_cfra_find_ak(ak->right, cframe); + + /* if no match found (or found match), just use the current one */ + if (akn == NULL) + return ak; + else + return akn; +} + +/* helper for time_draw_keyframes() */ +static void time_draw_idblock_keyframes(View2D *v2d, ID *id) +{ + DLRBT_Tree keys; + ActKeyColumn *ak; + + /* init binarytree-list for getting keyframes */ + BLI_dlrbTree_init(&keys); + + /* populate tree with keyframe nodes */ + switch (GS(id->name)) { + case ID_SCE: + scene_to_keylist(NULL, (Scene *)id, &keys, NULL); + break; + case ID_OB: + ob_to_keylist(NULL, (Object *)id, &keys, NULL); + break; + } + + /* build linked-list for searching */ + BLI_dlrbTree_linkedlist_sync(&keys); + + /* start drawing keyframes + * - we use the binary-search capabilities of the tree to only start from + * the first visible keyframe (last one can then be easily checked) + * - draw within a single GL block to be faster + */ + glBegin(GL_LINES); + for ( ak=time_cfra_find_ak(keys.root, v2d->cur.xmin); + (ak) && (ak->cfra <= v2d->cur.xmax); + ak=ak->next ) + { + glVertex2f(ak->cfra, v2d->cur.ymin); + glVertex2f(ak->cfra, v2d->cur.ymax); + } + glEnd(); // GL_LINES + + /* free temp stuff */ + BLI_dlrbTree_free(&keys); +} + +/* draw keyframe lines for timeline */ +static void time_draw_keyframes(const bContext *C, SpaceTime *stime, ARegion *ar) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + View2D *v2d= &ar->v2d; + + /* draw scene keyframes first + * - only if we're not only showing the + */ + if ((scene) && (stime->flag & TIME_ONLYACTSEL)==0) { + /* set draw color */ + glColor3ub(0xDD, 0xA7, 0x00); + time_draw_idblock_keyframes(v2d, (ID *)scene); + } + + /* draw active object's keyframes */ + if (ob) { + /* set draw color */ + glColor3ub(0xDD, 0xD7, 0x00); + time_draw_idblock_keyframes(v2d, (ID *)ob); + } +} + +/* ---------------- */ + /* add handlers, stuff you only do once or on area/region changes */ static void time_main_area_init(wmWindowManager *wm, ARegion *ar) { @@ -118,7 +211,6 @@ static void time_main_area_init(wmWindowManager *wm, ARegion *ar) WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } - static void time_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ @@ -144,7 +236,10 @@ static void time_main_area_draw(const bContext *C, ARegion *ar) grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy); UI_view2d_grid_draw(C, v2d, grid, (V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS)); UI_view2d_grid_free(grid); - + + /* keyframes */ + time_draw_keyframes(C, stime, ar); + /* current frame */ time_draw_cfra_time(C, stime, ar); diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index 739c23e8579..84c73c8d8a4 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -448,17 +448,6 @@ void do_time_buttons(bContext *C, void *arg, int event) //BIF_undo_push("Set anim-preview range"); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); break; - - case B_TL_INSERTKEY: - /* insert keyframe */ - //common_insertkey(); - //allqueue(REDRAWTIME, 1); - break; - case B_TL_DELETEKEY: - /* delete keyframe */ - //common_deletekey(); - //allqueue(REDRAWTIME, 1); - break; } } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 4781e0e0108..f2a386c81ba 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2093,7 +2093,7 @@ static void view3d_edit_objectmenu(bContext *C, uiLayout *layout, void *arg_unus // TODO: these operators may get renamed uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu"); - uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_old"); + uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_v3d"); uiItemS(layout); @@ -3166,7 +3166,7 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un // TODO: these operators may get renamed uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu"); - uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_old"); + uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_v3d"); uiItemS(layout); From 87f3ba8a809ebc36680317887c551da8c1092bc4 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 24 Jul 2009 11:14:59 +0000 Subject: [PATCH 347/512] Toolbar Improved the brush tools UI and added a bunch of brush controls. There seems to be some RNA magic missing for texture paint to work, so that's empty for now. Added tablet pressure buttons, which needs a new icon. Added a bunch of tools in a categorized fashion for all edit modes. Need to figure out what to do for vert/edge/face specific tools - perhaps it could detect the mode setting and show most appropriate tools for each mode. --- release/ui/space_view3d_toolbar.py | 356 +++++++++++++++++++++-------- 1 file changed, 266 insertions(+), 90 deletions(-) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index cab22af44e3..6eb3886f408 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -14,13 +14,28 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): def draw(self, context): layout = self.layout - - layout.row().itemO("object.duplicate") - layout.row().itemO("object.delete") - layout.row().itemO("object.mesh_add") - layout.row().itemO("object.curve_add") - layout.row().itemO("object.text_add") - layout.row().itemO("object.surface_add") + + layout.itemL(text="Transform:") + + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Object:") + + split = layout.split() + col = split.column(align=True) + col.itemO("object.duplicate") + col.itemO("object.delete") + + layout.itemL(text="Keyframes:") + + split = layout.split() + col = split.column(align=True) + col.itemO("anim.insert_keyframe_menu", text="Insert") + col.itemO("anim.delete_keyframe_v3d", text="Remove") # ********** default tools for editmode_mesh **************** @@ -35,17 +50,42 @@ class VIEW3D_PT_tools_editmode_mesh(View3DPanel): def draw(self, context): layout = self.layout - - layout.row().itemO("mesh.duplicate") - layout.row().itemO("mesh.delete") - layout.row().itemO("mesh.spin") - layout.row().itemO("mesh.screw") - layout.row().itemO("mesh.primitive_plane_add") - layout.row().itemO("mesh.primitive_cube_add") - layout.row().itemO("mesh.primitive_circle_add") - layout.row().itemO("mesh.primitive_cylinder_add") - layout.row().itemO("mesh.faces_shade_smooth") - layout.row().itemO("mesh.faces_shade_flat") + layout.itemL(text="Transform:") + + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Mesh:") + split = layout.split() + col = split.column(align=True) + col.itemO("mesh.duplicate") + col.itemO("mesh.delete") + + layout.itemL(text="Modeling:") + split = layout.split() + col = split.column(align=True) + col.itemO("mesh.extrude") + col.itemO("mesh.subdivide") + col.itemO("mesh.spin") + col.itemO("mesh.screw") + + layout.itemL(text="Shading:") + + split = layout.split() + col = split.column(align=True) + col.itemO("mesh.faces_shade_smooth", text="Smooth") + col.itemO("mesh.faces_shade_flat", text="Flat") + + layout.itemL(text="UV Mapping:") + + split = layout.split() + col = split.column(align=True) + col.itemO("uv.mapping_menu", text="Unwrap") + col.itemO("mesh.uvs_rotate") + col.itemO("mesh.uvs_mirror") # ********** default tools for editmode_curve **************** @@ -60,11 +100,27 @@ class VIEW3D_PT_tools_editmode_curve(View3DPanel): def draw(self, context): layout = self.layout - - layout.row().itemO("curve.duplicate") - layout.row().itemO("curve.delete") - layout.row().itemO("object.curve_add") - layout.row().itemO("curve.subdivide") + layout.itemL(text="Transform:") + + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Curve:") + split = layout.split() + col = split.column(align=True) + col.itemO("curve.duplicate") + col.itemO("curve.delete") + col.itemO("curve.cyclic_toggle") + col.itemO("curve.switch_direction") + + layout.itemL(text="Modeling:") + split = layout.split() + col = split.column(align=True) + col.itemO("curve.extrude") + col.itemO("curve.subdivide") # ********** default tools for editmode_surface **************** @@ -79,11 +135,26 @@ class VIEW3D_PT_tools_editmode_surface(View3DPanel): def draw(self, context): layout = self.layout - - layout.row().itemO("curve.duplicate") - layout.row().itemO("curve.delete") - layout.row().itemO("object.surface_add") - layout.row().itemO("curve.subdivide") + layout.itemL(text="Transform:") + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Curve:") + split = layout.split() + col = split.column(align=True) + col.itemO("curve.duplicate") + col.itemO("curve.delete") + col.itemO("curve.cyclic_toggle") + col.itemO("curve.switch_direction") + + layout.itemL(text="Modeling:") + split = layout.split() + col = split.column(align=True) + col.itemO("curve.extrude") + col.itemO("curve.subdivide") # ********** default tools for editmode_text **************** @@ -117,12 +188,26 @@ class VIEW3D_PT_tools_editmode_armature(View3DPanel): def draw(self, context): layout = self.layout - - layout.row().itemO("armature.duplicate_selected") - layout.row().itemO("armature.bone_primitive_add") - layout.row().itemO("armature.delete") - layout.row().itemO("armature.parent_clear") - + layout.itemL(text="Transform:") + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Bones:") + split = layout.split() + col = split.column(align=True) + col.itemO("armature.bone_primitive_add", text="Add") + col.itemO("armature.duplicate_selected", text="Duplicate") + col.itemO("armature.delete", text="Delete") + + layout.itemL(text="Modeling:") + split = layout.split() + col = split.column(align=True) + col.itemO("armature.extrude") + + # ********** default tools for editmode_mball **************** class View3DPanel(bpy.types.Panel): @@ -136,8 +221,12 @@ class VIEW3D_PT_tools_editmode_mball(View3DPanel): def draw(self, context): layout = self.layout - - row = layout.row() + layout.itemL(text="Transform:") + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") # ********** default tools for editmode_lattice **************** @@ -152,8 +241,12 @@ class VIEW3D_PT_tools_editmode_lattice(View3DPanel): def draw(self, context): layout = self.layout - - row = layout.row() + layout.itemL(text="Transform:") + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") # ********** default tools for posemode **************** @@ -168,27 +261,37 @@ class VIEW3D_PT_tools_posemode(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") + split = layout.split() + col = split.column(align=True) + col.itemO("tfm.translate") + col.itemO("tfm.rotate") + col.itemO("tfm.resize", text="Scale") + + layout.itemL(text="Bones:") + split = layout.split() + col = split.column(align=True) + col.itemO("pose.hide", text="Hide") + col.itemO("pose.reveal", text="Reveal") + + layout.itemL(text="Keyframes:") + + split = layout.split() + col = split.column(align=True) + col.itemO("anim.insert_keyframe_menu", text="Insert") + col.itemO("anim.delete_keyframe_v3d", text="Remove") + + layout.itemL(text="Pose:") + + split = layout.split() + col = split.column(align=True) + col.itemO("pose.copy", text="Copy") + col.itemO("pose.paste", text="Paste") + col.itemO("poselib.pose_add", text="Add to Library") + col.itemO("poselib.pose_remove", text="Remove From Library") - layout.row().itemO("pose.hide") - layout.row().itemO("pose.reveal") - layout.row().itemO("pose.rot_clear") - layout.row().itemO("pose.loc_clear") +# ********** default tools for paint modes **************** -# ********** default tools for sculptmode **************** - -class View3DPanel(bpy.types.Panel): - __space_type__ = "VIEW_3D" - __region_type__ = "TOOLS" - __context__ = "sculptmode" - -#class VIEW3D_PT_tools_sculptmode(View3DPanel): -# __idname__ = "VIEW3D_PT_tools_sculptmode" -# __label__ = "Sculpt Tools" -# -# def draw(self, context): -# layout = self.layout -# -# layout.row().itemO("sculpt.radial_control") class VIEW3D_PT_tools_brush(bpy.types.Panel): __space_type__ = "VIEW_3D" @@ -203,6 +306,8 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): return ts.vpaint elif context.wpaint_object: return ts.wpaint + elif context.tpaint_object: + return ts.tpaint return False def poll(self, context): @@ -220,27 +325,65 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): split = layout.split() col = split.column() - col.itemR(brush, "size", slider=True) + row = col.row(align=True) + row.itemR(brush, "size", slider=True) + row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") if context.wpaint_object: col.itemR(context.tool_settings, "vertex_group_weight", text="Weight", slider=True) col.itemR(brush, "strength", slider=True) - - + row = col.row(align=True) + row.itemR(brush, "falloff", slider=True) + row.itemR(brush, "falloff_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + if context.vpaint_object: + col.itemR(brush, "color", text="") + if context.tpaint_object: + row = col.row(align=True) + row.itemR(brush, "clone_opacity", slider=True, text=Opacity) + row.itemR(brush, "opacity_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + + row = col.row(align=True) + row.itemR(brush, "space", text="") + rowsub = row.row(align=True) + rowsub.active = brush.space + rowsub.itemR(brush, "spacing", text="Spacing", slider=True) + rowsub.itemR(brush, "spacing_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") split = layout.split() col = split.column() col.itemR(brush, "airbrush") col.itemR(brush, "anchored") col.itemR(brush, "rake") - col.itemR(brush, "space", text="Spacing") - colsub = col.column() - colsub.active = brush.space - colsub.itemR(brush, "spacing", text="") + + +class VIEW3D_PT_tools_brush_curve(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "TOOLS" + __label__ = "Curve" + + def brush_src(self, context): + ts = context.tool_settings + if context.sculpt_object: + return ts.sculpt + elif context.vpaint_object: + return ts.vpaint + elif context.wpaint_object: + return ts.wpaint + elif context.tpaint_object: + return ts.tpaint + return False + + def poll(self, context): + return self.brush_src(context) + + def draw(self, context): + src = self.brush_src(context) + brush = src.brush + layout = self.layout split = layout.split() split.template_curve_mapping(brush.curve) -class VIEW3D_PT_sculptoptions(bpy.types.Panel): +class VIEW3D_PT_sculpt_options(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" __label__ = "Options" @@ -254,22 +397,27 @@ class VIEW3D_PT_sculptoptions(bpy.types.Panel): split = self.layout.split() col = split.column() - col.itemL(text="Symmetry:") - row = col.row(align=True) - row.itemR(sculpt, "symmetry_x", text="X", toggle=True) - row.itemR(sculpt, "symmetry_y", text="Y", toggle=True) - row.itemR(sculpt, "symmetry_z", text="Z", toggle=True) + col.itemR(sculpt, "partial_redraw", text="Partial Refresh") + col.itemR(sculpt, "show_brush") + split = self.layout.split() col = split.column() - col.itemL(text="Lock Axis:") - row = col.row(align=True) - row.itemR(sculpt, "lock_x", text="X", toggle=True) - row.itemR(sculpt, "lock_y", text="Y", toggle=True) - row.itemR(sculpt, "lock_z", text="Z", toggle=True) - - + col.itemL(text="Symmetry:") + col.itemR(sculpt, "symmetry_x", text="X") + col.itemR(sculpt, "symmetry_y", text="Y") + col.itemR(sculpt, "symmetry_z", text="Z") + + col = split.column() + col.itemL(text="Lock:") + col.itemR(sculpt, "lock_x", text="X") + col.itemR(sculpt, "lock_y", text="Y") + col.itemR(sculpt, "lock_z", text="Z") + + + + # ********** default tools for weightpaint **************** class View3DPanel(bpy.types.Panel): @@ -277,14 +425,30 @@ class View3DPanel(bpy.types.Panel): __region_type__ = "TOOLS" __context__ = "weightpaint" -class VIEW3D_PT_tools_weightpaint(View3DPanel): +class VIEW3D_PT_weightpaint_options(View3DPanel): __idname__ = "VIEW3D_PT_tools_weightpaint" - __label__ = "Weight Paint Tools" + __label__ = "Options" def draw(self, context): + wpaint = context.tool_settings.wpaint layout = self.layout + split = self.layout.split() + col = split.column() + col.itemL(text="Blend:") + col.itemR(wpaint, "mode", text="") + col.itemR(wpaint, "all_faces") + col.itemR(wpaint, "normals") + col.itemR(wpaint, "spray") + col.itemR(wpaint, "vertex_dist", text="Distance") - layout.row().itemO("paint.weight_paint_radial_control") +# Commented out because the Apply button isn't an operator yet, making these settings useless +# col.itemL(text="Gamma:") +# col.itemR(wpaint, "gamma", text="") +# col.itemL(text="Multiply:") +# col.itemR(wpaint, "mul", text="") + + + # ********** default tools for vertexpaint **************** @@ -293,15 +457,27 @@ class View3DPanel(bpy.types.Panel): __region_type__ = "TOOLS" __context__ = "vertexpaint" -class VIEW3D_PT_tools_vertexpaint(View3DPanel): - __idname__ = "VIEW3D_PT_tools_vertexpaint" - __label__ = "Vertex Paint Tools" +class VIEW3D_PT_vertexpaint_options(View3DPanel): + __idname__ = "VIEW3D_PT_vertexpaintoptions" + __label__ = "Options" def draw(self, context): + vpaint = context.tool_settings.vpaint layout = self.layout - - layout.row().itemO("paint.vertex_paint_radial_control") - + split = self.layout.split() + col = split.column() + col.itemL(text="Blend:") + col.itemR(vpaint, "mode", text="") + col.itemR(vpaint, "all_faces") + col.itemR(vpaint, "normals") + col.itemR(vpaint, "spray") + col.itemR(vpaint, "vertex_dist", text="Distance") +# Commented out because the Apply button isn't an operator yet, making these settings useless +# col.itemL(text="Gamma:") +# col.itemR(vpaint, "gamma", text="") +# col.itemL(text="Multiply:") +# col.itemR(vpaint, "mul", text="") + # ********** default tools for texturepaint **************** class View3DPanel(bpy.types.Panel): @@ -316,7 +492,6 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("paint.texture_paint_radial_control") bpy.types.register(VIEW3D_PT_tools_objectmode) @@ -329,9 +504,10 @@ bpy.types.register(VIEW3D_PT_tools_editmode_mball) bpy.types.register(VIEW3D_PT_tools_editmode_lattice) bpy.types.register(VIEW3D_PT_tools_posemode) bpy.types.register(VIEW3D_PT_tools_brush) -bpy.types.register(VIEW3D_PT_sculptoptions) -bpy.types.register(VIEW3D_PT_tools_weightpaint) -bpy.types.register(VIEW3D_PT_tools_vertexpaint) +bpy.types.register(VIEW3D_PT_tools_brush_curve) +bpy.types.register(VIEW3D_PT_sculpt_options) +bpy.types.register(VIEW3D_PT_vertexpaint_options) +bpy.types.register(VIEW3D_PT_weightpaint_options) bpy.types.register(VIEW3D_PT_tools_texturepaint) From 84c8992e613a6c6821f6d384f852a639ebdbe5c7 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 11:24:00 +0000 Subject: [PATCH 348/512] RNA Wrapping Fixes: * Changed update callbacks for several armature properties to do proper depsgraph flushing instead of sending redraw notifiers * Wrapped preview-range settings for Scene * Fixed bug with 'parent-type' enum menu for Object parent-type. The problem here was that PARSKEL was used and is still used for both Armatures and Lattices, but the lattice entry would always override armatures entry. Now, when dynamically building the list to display, the function to add these is given the specific item to use, and has been made to stop after the first match has been added. Hopefully this doesn't break anything else... --- source/blender/makesrna/intern/rna_armature.c | 4 +- source/blender/makesrna/intern/rna_define.c | 7 +- source/blender/makesrna/intern/rna_object.c | 6 +- source/blender/makesrna/intern/rna_scene.c | 112 ++++++++++++++++-- 4 files changed, 112 insertions(+), 17 deletions(-) diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index d98c7235c35..d77517f420d 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -585,7 +585,7 @@ void rna_def_armature(BlenderRNA *brna) prop= RNA_def_property(srna, "rest_position", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_RESTPOS); RNA_def_property_ui_text(prop, "Rest Position", "Show Armature in Rest Position. No posing possible."); - RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "draw_axes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWAXES); @@ -600,7 +600,7 @@ void rna_def_armature(BlenderRNA *brna) prop= RNA_def_property(srna, "delay_deform", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DELAYDEFORM); RNA_def_property_ui_text(prop, "Delay Deform", "Don't deform children when manipulating bones in Pose Mode"); - RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); + RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "x_axis_mirror", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_MIRROR_EDIT); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 2530f452393..d5d21ddb053 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -2326,9 +2326,12 @@ void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value) { - for(; item->identifier; item++) - if(item->value == value) + for(; item->identifier; item++) { + if(item->value == value) { RNA_enum_item_add(items, totitem, item); + break; // break on first match - does this break anything? (is quick hack to get object->parent_type working ok for armature/lattice) + } + } } void RNA_enum_item_end(EnumPropertyItem **items, int *totitem) diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 30ca39d25de..8c6f77a1e83 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -44,7 +44,7 @@ static EnumPropertyItem parent_type_items[] = { {PAROBJECT, "OBJECT", 0, "Object", ""}, {PARCURVE, "CURVE", 0, "Curve", ""}, - //{PARKEY, "KEY", 0, "Key", ""}, + {PARKEY, "KEY", 0, "Key", ""}, {PARSKEL, "ARMATURE", 0, "Armature", ""}, {PARSKEL, "LATTICE", 0, "Lattice", ""}, // PARSKEL reuse will give issues {PARVERT1, "VERTEX", 0, "Vertex", ""}, @@ -199,9 +199,9 @@ static EnumPropertyItem *rna_Object_parent_type_itemf(bContext *C, PointerRNA *p if(par->type == OB_CURVE) RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARCURVE); else if(par->type == OB_LATTICE) - RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARSKEL); + RNA_enum_items_add_value(&item, &totitem, &parent_type_items[4], PARSKEL); // special hack: prevents this overriding others else if(par->type == OB_ARMATURE) { - RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARSKEL); + RNA_enum_items_add_value(&item, &totitem, &parent_type_items[3], PARSKEL); // special hack: prevents this being overrided RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARBONE); } else if(par->type == OB_MESH) { diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index aa4c410bc73..9e3f6948b1c 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -111,10 +111,67 @@ static void rna_Scene_end_frame_set(PointerRNA *ptr, int value) data->r.efra= value; } +static int rna_Scene_use_preview_range_get(PointerRNA *ptr) +{ + Scene *data= (Scene*)ptr->data; + + /* this is simply overloaded to assume that preview-range + * start frame cannot be less than 1 when on, + * so psfra=0 means 'off' + */ + return (data->r.psfra != 0); +} + +static void rna_Scene_use_preview_range_set(PointerRNA *ptr, int value) +{ + Scene *data= (Scene*)ptr->data; + + /* if enable, copy range from render-range, otherwise just clear */ + if (value) { + data->r.psfra= data->r.sfra; + data->r.pefra= data->r.efra; + } + else + data->r.psfra= 0; +} + + +static void rna_Scene_preview_range_start_frame_set(PointerRNA *ptr, int value) +{ + Scene *data= (Scene*)ptr->data; + + /* check if enabled already */ + if (data->r.psfra == 0) { + /* set end of preview range to end frame, then clamp as per normal */ + // TODO: or just refuse to set instead? + data->r.pefra= data->r.efra; + } + + /* now set normally */ + CLAMP(value, 1, data->r.pefra); + data->r.psfra= value; +} + +static void rna_Scene_preview_range_end_frame_set(PointerRNA *ptr, int value) +{ + Scene *data= (Scene*)ptr->data; + + /* check if enabled already */ + if (data->r.psfra == 0) { + /* set start of preview range to start frame, then clamp as per normal */ + // TODO: or just refuse to set instead? + data->r.psfra= data->r.sfra; + } + + /* now set normally */ + CLAMP(value, data->r.psfra, MAXFRAME); + data->r.pefra= value; +} + static void rna_Scene_frame_update(bContext *C, PointerRNA *ptr) { //Scene *scene= ptr->id.data; - //update_for_newframe(); + //ED_update_for_newframe(C); } static int rna_SceneRenderData_threads_get(PointerRNA *ptr) @@ -1608,12 +1665,14 @@ void RNA_def_scene(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - + + /* Struct definition */ srna= RNA_def_struct(brna, "Scene", "ID"); RNA_def_struct_ui_text(srna, "Scene", "Scene consisting objects and defining time and render related settings."); RNA_def_struct_ui_icon(srna, ICON_SCENE_DATA); RNA_def_struct_clear_flag(srna, STRUCT_ID_REFCOUNT); - + + /* Global Settings */ prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene."); @@ -1626,19 +1685,23 @@ void RNA_def_scene(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "cursor"); RNA_def_property_ui_text(prop, "Cursor Location", "3D cursor location."); RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4); - + + /* Bases/Objects */ prop= RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "base", NULL); RNA_def_property_struct_type(prop, "Object"); RNA_def_property_ui_text(prop, "Objects", ""); RNA_def_property_collection_funcs(prop, 0, 0, 0, "rna_Scene_objects_get", 0, 0, 0, 0, 0); + /* Layers */ prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); RNA_def_property_array(prop, 20); RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible when rendering the scene."); RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_layer_set"); - + + + /* Frame Range Stuff */ prop= RNA_def_property(srna, "current_frame", PROP_INT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_int_sdna(prop, NULL, "r.cfra"); @@ -1665,20 +1728,46 @@ void RNA_def_scene(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "frame_step"); RNA_def_property_ui_text(prop, "Frame Step", "Number of frames to skip forward while rendering/playing back each frame"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - + + /* Preview Range (frame-range for UI playback) */ + prop=RNA_def_property(srna, "use_preview_range", PROP_BOOLEAN, PROP_NONE); /* use_preview_range is not really a separate setting in SDNA */ + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_boolean_funcs(prop, "rna_Scene_use_preview_range_get", "rna_Scene_use_preview_range_set"); + RNA_def_property_ui_text(prop, "Use Preview Range", ""); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "preview_range_start_frame", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_int_sdna(prop, NULL, "r.psfra"); + RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_start_frame_set", NULL); + RNA_def_property_ui_text(prop, "Preview Range Start Frame", ""); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "preview_range_end_frame", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_int_sdna(prop, NULL, "r.pefra"); + RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_end_frame_set", NULL); + RNA_def_property_ui_text(prop, "Preview Range End Frame", ""); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + /* Stamp */ prop= RNA_def_property(srna, "stamp_note", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "r.stamp_udata"); RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - + + /* Nodes (Compositing) */ prop= RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Node Tree", "Compositing node tree."); + /* Sequencer */ prop= RNA_def_property(srna, "sequence_editor", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "ed"); RNA_def_property_struct_type(prop, "SequenceEditor"); RNA_def_property_ui_text(prop, "Sequence Editor", ""); + /* Keying Sets */ + // TODO: hide the fact that active keyingset is an int? prop= RNA_def_property(srna, "keyingsets", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "keyingsets", NULL); RNA_def_property_struct_type(prop, "KeyingSet"); @@ -1687,17 +1776,20 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "active_keyingset", PROP_INT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Active Keying Set", "Current Keying Set index."); - + + /* Tool Settings */ prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "toolsettings"); RNA_def_property_struct_type(prop, "ToolSettings"); RNA_def_property_ui_text(prop, "Tool Settings", ""); - + + /* Render Data */ prop= RNA_def_property(srna, "render_data", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "r"); RNA_def_property_struct_type(prop, "SceneRenderData"); RNA_def_property_ui_text(prop, "Render Data", ""); - + + /* Markers */ prop= RNA_def_property(srna, "timeline_markers", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "markers", NULL); RNA_def_property_struct_type(prop, "TimelineMarker"); From bd628d9c0cd452321bf7e204f4b245ce37643a55 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 24 Jul 2009 11:48:45 +0000 Subject: [PATCH 349/512] UI Added cursor location to the view panel in 3D view. Removed the Shade Smooth/Flat buttons from mesh data for two reasons: These kinds of tools are more appropriate in the tools area, and the context would not always match the selected datablock, if you have multiple objects selected, or if you're viewing the mesh data tab in 'pinned' mode. The shade smooth/flat buttons are in the edit mode tools area now. --- release/ui/buttons_data_mesh.py | 8 -------- release/ui/space_view3d.py | 5 ++++- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 757745d039e..d4bf9698a89 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -49,14 +49,6 @@ class DATA_PT_normals(DataButtonsPanel): sub.itemR(mesh, "vertex_normal_flip") sub.itemR(mesh, "double_sided") - row = layout.row(align=True) - if context.edit_object: - row.itemO("MESH_OT_faces_shade_smooth") - row.itemO("MESH_OT_faces_shade_flat") - else: - row.itemO("OBJECT_OT_shade_smooth") - row.itemO("OBJECT_OT_shade_flat") - class DATA_PT_vertex_groups(DataButtonsPanel): __idname__ = "DATA_PT_vertex_groups" __label__ = "Vertex Groups" diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index 39d8b86613f..4d5d7a03c07 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -73,7 +73,8 @@ class VIEW3D_MT_view(bpy.types.Menu): layout.itemS() - layout.itemO("screen.screen_full_area") + layout.itemO("screen.region_foursplit", text="Toggle Quad View") + layout.itemO("screen.screen_full_area", text="Toggle Full Screen") class VIEW3D_HT_header(bpy.types.Header): __space_type__ = "VIEW_3D" @@ -101,6 +102,7 @@ class VIEW3D_PT_3dview_properties(bpy.types.Panel): def draw(self, context): view = context.space_data + scene = context.scene layout = self.layout split = layout.split() @@ -113,6 +115,7 @@ class VIEW3D_PT_3dview_properties(bpy.types.Panel): col.itemL(text="Grid:") col.itemR(view, "grid_spacing", text="Spacing") col.itemR(view, "grid_subdivisions", text="Subdivisions") + col.itemR(scene, "cursor_location", text="3D Cursor:") class VIEW3D_PT_3dview_display(bpy.types.Panel): __space_type__ = "VIEW_3D" From 1844fc7057fcc342c4bc9f4e1385bc97a2bd33e6 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 12:27:42 +0000 Subject: [PATCH 350/512] 2.5 - Restored Bone Paths Operators * A number-counter cursor is now used while sampling the curve * Fixed some of the drawing errors with the paths. Unfortunately, when the armature is rotated, the path text is drawn in the wrong places still... --- .../editors/armature/armature_intern.h | 3 + .../blender/editors/armature/armature_ops.c | 3 + source/blender/editors/armature/poseobject.c | 325 ++++++++++++------ .../editors/space_view3d/drawarmature.c | 6 +- .../editors/space_view3d/view3d_header.c | 34 +- 5 files changed, 234 insertions(+), 137 deletions(-) diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 7b3f9a020e3..c37f6803d58 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -67,6 +67,9 @@ void POSE_OT_scale_clear(struct wmOperatorType *ot); void POSE_OT_copy(struct wmOperatorType *ot); void POSE_OT_paste(struct wmOperatorType *ot); +void POSE_OT_paths_calculate(struct wmOperatorType *ot); +void POSE_OT_paths_clear(struct wmOperatorType *ot); + void POSE_OT_select_all_toggle(struct wmOperatorType *ot); void POSE_OT_select_inverse(struct wmOperatorType *ot); void POSE_OT_select_parent(struct wmOperatorType *ot); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 5de40ecc54f..5495147acb0 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -150,6 +150,9 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_copy); WM_operatortype_append(POSE_OT_paste); + WM_operatortype_append(POSE_OT_paths_calculate); + WM_operatortype_append(POSE_OT_paths_clear); + WM_operatortype_append(POSE_OT_select_all_toggle); WM_operatortype_append(POSE_OT_select_inverse); diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 9814a056b70..d0bc36b5f09 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -21,6 +21,7 @@ * All rights reserved. * * Contributor(s): Ton Roosendaal, Blender Foundation '05, full recode. + * Joshua Leung * * ***** END GPL LICENSE BLOCK ***** * support for animation modes - Reevan McKay @@ -50,6 +51,7 @@ #include "DNA_view3d_types.h" #include "DNA_userdef_types.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_armature.h" #include "BKE_blender.h" @@ -89,7 +91,6 @@ /* ************* XXX *************** */ static int movetolayer_short_buts() {return 1;} static int pupmenu() {return 0;} -static void waitcursor() {}; static void error() {}; static void BIF_undo_push() {} static void countall() {} @@ -201,104 +202,12 @@ int ED_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan) /* ********************************************** */ -/* For the object with pose/action: create path curves for selected bones - * This recalculates the WHOLE path within the pchan->pathsf and pchan->pathef range - */ -void pose_calculate_path(bContext *C, Scene *scene, Object *ob) -{ - bArmature *arm; - bPoseChannel *pchan; - Base *base; - float *fp; - int cfra; - int sfra, efra; - - if (ob==NULL || ob->pose==NULL) - return; - arm= ob->data; - - /* version patch for older files here (do_versions patch too complicated) */ - if ((arm->pathsf == 0) || (arm->pathef == 0)) { - arm->pathsf = SFRA; - arm->pathef = EFRA; - } - if (arm->pathsize == 0) { - arm->pathsize = 1; - } - - /* set frame values */ - cfra= CFRA; - sfra = arm->pathsf; - efra = arm->pathef; - if (efra <= sfra) { - error("Can't calculate paths when pathlen <= 0"); - return; - } - - waitcursor(1); - - /* hack: for unsaved files, set OB_RECALC so that paths can get calculated */ - if ((ob->recalc & OB_RECALC)==0) { - ob->recalc |= OB_RECALC; - ED_anim_object_flush_update(C, ob); - } - else - ED_anim_object_flush_update(C, ob); - - - /* malloc the path blocks */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone) && (pchan->bone->flag & BONE_SELECTED)) { - if (arm->layer & pchan->bone->layer) { - pchan->pathlen= efra-sfra+1; - pchan->pathsf= sfra; - pchan->pathef= efra+1; - if (pchan->path) - MEM_freeN(pchan->path); - pchan->path= MEM_callocN(3*pchan->pathlen*sizeof(float), "pchan path"); - } - } - } - - for (CFRA=sfra; CFRA<=efra; CFRA++) { - /* do all updates */ - for (base= FIRSTBASE; base; base= base->next) { - if (base->object->recalc) { - int temp= base->object->recalc; - object_handle_update(scene, base->object); - base->object->recalc= temp; - } - } - - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone) && (pchan->bone->flag & BONE_SELECTED)) { - if (arm->layer & pchan->bone->layer) { - if (pchan->path) { - fp= pchan->path+3*(CFRA-sfra); - - if (arm->pathflag & ARM_PATH_HEADS) { - VECCOPY(fp, pchan->pose_head); - } - else { - VECCOPY(fp, pchan->pose_tail); - } - - Mat4MulVecfl(ob->obmat, fp); - } - } - } - } - } - - waitcursor(0); - - CFRA= cfra; -} - /* For the object with pose/action: update paths for those that have got them * This should selectively update paths that exist... + * + * To be called from various tools that do incremental updates */ -void pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) +void ED_pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) { bArmature *arm; bPoseChannel *pchan; @@ -307,7 +216,8 @@ void pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) int cfra; int sfra, efra; - if (ob==NULL || ob->pose==NULL) + /* sanity checks */ + if ELEM(NULL, ob, ob->pose) return; arm= ob->data; @@ -329,8 +239,6 @@ void pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) } if (efra <= sfra) return; - waitcursor(1); - /* hack: for unsaved files, set OB_RECALC so that paths can get calculated */ if ((ob->recalc & OB_RECALC)==0) { ob->recalc |= OB_RECALC; @@ -339,11 +247,17 @@ void pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) else ED_anim_object_flush_update(C, ob); + /* calculate path over requested range */ for (CFRA=sfra; CFRA<=efra; CFRA++) { /* do all updates */ for (base= FIRSTBASE; base; base= base->next) { if (base->object->recalc) { int temp= base->object->recalc; + + if (base->object->adt) + BKE_animsys_evaluate_animdata(&base->object->id, base->object->adt, (float)CFRA, ADT_RECALC_ALL); + + /* update object */ object_handle_update(scene, base->object); base->object->recalc= temp; } @@ -373,18 +287,181 @@ void pose_recalculate_paths(bContext *C, Scene *scene, Object *ob) } } - waitcursor(0); - + /* reset flags */ CFRA= cfra; ob->pose->flag &= ~POSE_RECALCPATHS; + + /* flush one final time - to restore to the original state */ + for (base= FIRSTBASE; base; base= base->next) { + if (base->object->recalc) { + int temp= base->object->recalc; + + if (base->object->adt) + BKE_animsys_evaluate_animdata(&base->object->id, base->object->adt, (float)CFRA, ADT_RECALC_ALL); + + object_handle_update(scene, base->object); + base->object->recalc= temp; + } + } } +/* --------- */ + +/* For the object with pose/action: create path curves for selected bones + * This recalculates the WHOLE path within the pchan->pathsf and pchan->pathef range + */ +static int pose_calculate_paths_exec (bContext *C, wmOperator *op) +{ + wmWindow *win= CTX_wm_window(C); + ScrArea *sa= CTX_wm_area(C); + Scene *scene= CTX_data_scene(C); + Object *ob; + bArmature *arm; + bPoseChannel *pchan; + Base *base; + float *fp; + int cfra; + int sfra, efra; + + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object */ + if ELEM(NULL, ob, ob->pose) + return OPERATOR_CANCELLED; + arm= ob->data; + + /* version patch for older files here (do_versions patch too complicated) */ + if ((arm->pathsf == 0) || (arm->pathef == 0)) { + arm->pathsf = SFRA; + arm->pathef = EFRA; + } + if (arm->pathsize == 0) { + arm->pathsize = 1; + } + + /* get frame values to use */ + cfra= CFRA; + sfra = arm->pathsf; + efra = arm->pathef; + + if (efra <= sfra) { + BKE_report(op->reports, RPT_ERROR, "Can't calculate paths when pathlen <= 0"); + return OPERATOR_CANCELLED; + } + + /* hack: for unsaved files, set OB_RECALC so that paths can get calculated */ + if ((ob->recalc & OB_RECALC)==0) { + ob->recalc |= OB_RECALC; + ED_anim_object_flush_update(C, ob); + } + else + ED_anim_object_flush_update(C, ob); + + /* alloc the path cache arrays */ + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + if ((pchan->bone) && (pchan->bone->flag & BONE_SELECTED)) { + if (arm->layer & pchan->bone->layer) { + pchan->pathlen= efra-sfra+1; + pchan->pathsf= sfra; + pchan->pathef= efra+1; + if (pchan->path) + MEM_freeN(pchan->path); + pchan->path= MEM_callocN(3*pchan->pathlen*sizeof(float), "pchan path"); + } + } + } + + /* step through frame range sampling the values */ + for (CFRA=sfra; CFRA<=efra; CFRA++) { + /* for each frame we calculate, update time-cursor... (may be too slow) */ + WM_timecursor(win, CFRA); + + /* do all updates */ + for (base= FIRSTBASE; base; base= base->next) { + if (base->object->recalc) { + int temp= base->object->recalc; + + if (base->object->adt) + BKE_animsys_evaluate_animdata(&base->object->id, base->object->adt, (float)CFRA, ADT_RECALC_ALL); + + object_handle_update(scene, base->object); + base->object->recalc= temp; + } + } + + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + if ((pchan->bone) && (pchan->bone->flag & BONE_SELECTED)) { + if (arm->layer & pchan->bone->layer) { + if (pchan->path) { + fp= pchan->path+3*(CFRA-sfra); + + if (arm->pathflag & ARM_PATH_HEADS) { + VECCOPY(fp, pchan->pose_head); + } + else { + VECCOPY(fp, pchan->pose_tail); + } + + Mat4MulVecfl(ob->obmat, fp); + } + } + } + } + } + + /* restore original cursor */ + WM_cursor_restore(win); + + /* reset current frame, and clear flags */ + CFRA= cfra; + ob->pose->flag &= ~POSE_RECALCPATHS; + + /* flush one final time - to restore to the original state */ + for (base= FIRSTBASE; base; base= base->next) { + if (base->object->recalc) { + int temp= base->object->recalc; + + if (base->object->adt) + BKE_animsys_evaluate_animdata(&base->object->id, base->object->adt, (float)CFRA, ADT_RECALC_ALL); + + object_handle_update(scene, base->object); + base->object->recalc= temp; + } + } + + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_paths_calculate (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Calculate Bone Paths"; + ot->idname= "POSE_OT_paths_calculate"; + ot->description= "Calculate paths for the selected bones."; + + /* api callbacks */ + ot->exec= pose_calculate_paths_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --------- */ + /* for the object with pose/action: clear path curves for selected bones only */ -void pose_clear_paths(Object *ob) +void ED_pose_clear_paths(Object *ob) { bPoseChannel *pchan; - if (ob==NULL || ob->pose==NULL) + if ELEM(NULL, ob, ob->pose) return; /* free the path blocks */ @@ -396,9 +473,49 @@ void pose_clear_paths(Object *ob) } } } - } +/* operator callback for this */ +static int pose_clear_paths_exec (bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + Object *ob; + + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object */ + if ELEM(NULL, ob, ob->pose) + return OPERATOR_CANCELLED; + + /* for now, just call the API function for this (which is shared with backend functions) */ + ED_pose_clear_paths(ob); + + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_paths_clear (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Clear Bone Paths"; + ot->idname= "POSE_OT_paths_clear"; + ot->description= "Clear path caches for selected bones."; + + /* api callbacks */ + ot->exec= pose_clear_paths_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ******************* Select Constraint Target Operator ************* */ // XXX this function is to be removed when the other stuff is recoded void pose_select_constraint_target(Scene *scene) diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index b698b404825..5a9790390b7 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -2154,12 +2154,12 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec /* only draw framenum if several consecutive highlighted points don't occur on same point */ if (a == 0) { - sprintf(str, " %d\n", (a+sfra)); + sprintf(str, "%d", (a+sfra)); view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0); } else if ((a > stepsize) && (a < len-stepsize)) { if ((VecEqual(fp, fp-(stepsize*3))==0) || (VecEqual(fp, fp+(stepsize*3))==0)) { - sprintf(str, " %d\n", (a+sfra)); + sprintf(str, "%d", (a+sfra)); view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0); } } @@ -2201,7 +2201,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec if (ak->cfra == (a+sfra)) { char str[32]; - sprintf(str, " %d\n", (a+sfra)); + sprintf(str, "%d", (a+sfra)); view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0); } } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index f2a386c81ba..b5c1e8bb9f6 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -3051,38 +3051,12 @@ static void view3d_pose_armature_groupmenu(bContext *C, uiLayout *layout, void * uiItemO(layout, "Remove Active Group", 0, "POSE_OT_group_remove"); } -#if 0 -static void do_view3d_pose_armature_motionpathsmenu(bContext *C, void *arg, int event) +static void view3d_pose_armature_motionpathsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - switch(event) { - - case 1: - pose_calculate_path(OBACT); - break; - case 2: - pose_clear_paths(OBACT); - break; - } + uiItemO(layout, NULL, 0, "POSE_OT_paths_calculate"); + uiItemO(layout, NULL, 0, "POSE_OT_paths_clear"); } - -static uiBlock *view3d_pose_armature_motionpathsmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_motionpathsmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_motionpathsmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Calculate Paths|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear All Paths|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} -#endif - static void view3d_pose_armature_poselibmenu(bContext *C, uiLayout *layout, void *arg_unused) { uiItemO(layout, NULL, 0, "POSELIB_OT_browse_interactive"); @@ -3184,7 +3158,7 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemS(layout); uiItemMenuF(layout, "Pose Library", 0, view3d_pose_armature_poselibmenu); - //uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu); + uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu); uiItemMenuF(layout, "Bone Groups", 0, view3d_pose_armature_groupmenu); uiItemS(layout); From 6abddb0fc4ca483f03e5a111c558824493006af5 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 24 Jul 2009 12:43:59 +0000 Subject: [PATCH 351/512] 2.5 New feature: allowing to open temporarily windows for output. Implemented for: - Render output (use output menu "new window" option). - User Preferences (alt+U, plus added in 'File' menu) Currently the window opens where your mouse is. The Render window works as usual, with ESC or F11 moving it to back or front again. That allows the window position to remain where you moved it on new renders. If you close a render window when it renders, the render thread will be killed. User prefs show 'info window' now... i thought we'd use outliner? Anyhoo, I've made the 'save settings' to close the 2nd window as well. Opening a secondary file window for save I'll check on later, this has to be checked with the current event system still. the WM_window_open_temp() api call for this maintains currently a *single* temp window. If you have a render window open, and call for the preferences, the render window will be used for it. And the other way around. On closing the blender window, the temp windows close automatically when there's no regular window open, and blender quits. --- source/blender/editors/include/ED_screen.h | 4 + source/blender/editors/screen/screen_edit.c | 9 +- source/blender/editors/screen/screen_intern.h | 1 - source/blender/editors/screen/screen_ops.c | 132 +++++++++++--- .../blender/editors/space_image/image_draw.c | 4 +- source/blender/makesdna/DNA_screen_types.h | 2 + source/blender/windowmanager/WM_api.h | 11 +- .../windowmanager/intern/wm_event_system.c | 9 +- .../blender/windowmanager/intern/wm_files.c | 8 +- source/blender/windowmanager/intern/wm_jobs.c | 58 ++++-- .../blender/windowmanager/intern/wm_window.c | 170 +++++++++++++++--- source/blender/windowmanager/wm.h | 2 +- source/blender/windowmanager/wm_window.h | 1 + 13 files changed, 325 insertions(+), 86 deletions(-) diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 204d2dcd59e..a2e8f3a4ec1 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -87,6 +87,7 @@ void ED_screen_draw(struct wmWindow *win); void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win); void ED_screen_do_listen(struct wmWindow *win, struct wmNotifier *note); bScreen *ED_screen_duplicate(struct wmWindow *win, struct bScreen *sc); +bScreen *ED_screen_add(struct wmWindow *win, struct Scene *scene, char *name); void ED_screen_set(struct bContext *C, struct bScreen *sc); void ED_screen_set_scene(struct bContext *C, struct Scene *scene); void ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event); @@ -95,6 +96,8 @@ void ED_screen_animation_timer(struct bContext *C, int redraws, int enable); int ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type); void ED_screen_full_prevspace(struct bContext *C); +void ED_screen_new_window(struct bContext *C, struct rcti *position, int type); + /* anim */ void ED_update_for_newframe(const struct bContext *C, int mute); unsigned int ED_screen_view3d_layers(struct bScreen *screen); @@ -143,5 +146,6 @@ int ED_operator_posemode(struct bContext *C); #define ED_KEYMAP_ANIMATION 8 #define ED_KEYMAP_FRAMES 16 + #endif /* ED_SCREEN_H */ diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 8e667fe0438..dd6bb09c1e4 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -54,6 +54,7 @@ #include "ED_screen.h" #include "ED_screen_types.h" +/* XXX actually should be not here... solve later */ #include "wm_subwindow.h" #include "screen_intern.h" /* own module include */ @@ -404,7 +405,7 @@ ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac /* empty screen, with 1 dummy area without spacedata */ /* uses window size */ -bScreen *screen_add(wmWindow *win, Scene *scene, char *name) +bScreen *ED_screen_add(wmWindow *win, Scene *scene, char *name) { bScreen *sc; ScrVert *sv1, *sv2, *sv3, *sv4; @@ -947,7 +948,7 @@ bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc) if(sc->full != SCREENNORMAL) return NULL; /* XXX handle this case! */ /* make new empty screen: */ - newsc= screen_add(win, sc->scene, sc->id.name+2); + newsc= ED_screen_add(win, sc->scene, sc->id.name+2); /* copy all data */ screen_copy(newsc, sc); /* set in window */ @@ -1368,8 +1369,6 @@ void ED_screen_set_scene(bContext *C, Scene *scene) ED_update_for_newframe(C, 1); -// set_radglobal(); - /* complete redraw */ WM_event_add_notifier(C, NC_WINDOW, NULL); @@ -1434,7 +1433,7 @@ void ed_screen_fullarea(bContext *C, ScrArea *sa) oldscreen->full = SCREENFULL; - sc= screen_add(CTX_wm_window(C), CTX_data_scene(C), "temp"); + sc= ED_screen_add(CTX_wm_window(C), CTX_data_scene(C), "temp"); sc->full = SCREENFULL; // XXX /* timer */ diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h index a0804f3e633..2b3a816f8de 100644 --- a/source/blender/editors/screen/screen_intern.h +++ b/source/blender/editors/screen/screen_intern.h @@ -36,7 +36,6 @@ struct Scene; void area_copy_data (ScrArea *sa1, ScrArea *sa2, int swap_space); /* screen_edit.c */ -bScreen *screen_add(struct wmWindow *win, struct Scene *scene, char *name); ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2); ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac); int screen_area_join(bContext *C, bScreen* scr, ScrArea *sa1, ScrArea *sa2); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index dc46940a733..46023f278c6 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -74,6 +74,8 @@ #include "UI_interface.h" #include "UI_resources.h" +#include "wm_window.h" + #include "screen_intern.h" /* own module include */ #define KM_MODAL_CANCEL 1 @@ -502,7 +504,7 @@ static int actionzone_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } -void SCREEN_OT_actionzone(wmOperatorType *ot) +static void SCREEN_OT_actionzone(wmOperatorType *ot) { /* identifiers */ ot->name= "Handle area action zones"; @@ -668,7 +670,7 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, wmEvent *event) newwin= WM_window_open(C, &rect); /* allocs new screen and adds to newly created window, using window size */ - newsc= screen_add(newwin, CTX_data_scene(C), sc->id.name+2); + newsc= ED_screen_add(newwin, CTX_data_scene(C), sc->id.name+2); newwin->screen= newsc; /* copy area to new screen */ @@ -921,7 +923,7 @@ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } -void SCREEN_OT_area_move(wmOperatorType *ot) +static void SCREEN_OT_area_move(wmOperatorType *ot) { /* identifiers */ ot->name= "Move area edges"; @@ -1237,7 +1239,7 @@ static EnumPropertyItem prop_direction_items[] = { {'v', "VERTICAL", 0, "Vertical", ""}, {0, NULL, 0, NULL, NULL}}; -void SCREEN_OT_area_split(wmOperatorType *ot) +static void SCREEN_OT_area_split(wmOperatorType *ot) { ot->name = "Split area"; ot->idname = "SCREEN_OT_area_split"; @@ -1386,7 +1388,7 @@ static int frame_offset_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void SCREEN_OT_frame_offset(wmOperatorType *ot) +static void SCREEN_OT_frame_offset(wmOperatorType *ot) { ot->name = "Frame Offset"; ot->idname = "SCREEN_OT_frame_offset"; @@ -1442,7 +1444,7 @@ static int screen_set_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -void SCREEN_OT_screen_set(wmOperatorType *ot) +static void SCREEN_OT_screen_set(wmOperatorType *ot) { ot->name = "Set Screen"; ot->idname = "SCREEN_OT_screen_set"; @@ -1465,7 +1467,7 @@ static int screen_full_area_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void SCREEN_OT_screen_full_area(wmOperatorType *ot) +static void SCREEN_OT_screen_full_area(wmOperatorType *ot) { ot->name = "Toggle Make Area Fullscreen"; ot->idname = "SCREEN_OT_screen_full_area"; @@ -1737,7 +1739,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) } /* Operator for joining two areas (space types) */ -void SCREEN_OT_area_join(wmOperatorType *ot) +static void SCREEN_OT_area_join(wmOperatorType *ot) { /* identifiers */ ot->name= "Join area"; @@ -1770,7 +1772,7 @@ static int repeat_last_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -void SCREEN_OT_repeat_last(wmOperatorType *ot) +static void SCREEN_OT_repeat_last(wmOperatorType *ot) { /* identifiers */ ot->name= "Repeat Last"; @@ -1822,7 +1824,7 @@ static int repeat_history_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void SCREEN_OT_repeat_history(wmOperatorType *ot) +static void SCREEN_OT_repeat_history(wmOperatorType *ot) { /* identifiers */ ot->name= "Repeat History"; @@ -1855,7 +1857,7 @@ static int redo_last_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_CANCELLED; } -void SCREEN_OT_redo_last(wmOperatorType *ot) +static void SCREEN_OT_redo_last(wmOperatorType *ot) { /* identifiers */ ot->name= "Redo Last"; @@ -1898,7 +1900,7 @@ static int region_split_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void SCREEN_OT_region_split(wmOperatorType *ot) +static void SCREEN_OT_region_split(wmOperatorType *ot) { /* identifiers */ ot->name= "Split Region"; @@ -1987,7 +1989,7 @@ static int region_foursplit_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void SCREEN_OT_region_foursplit(wmOperatorType *ot) +static void SCREEN_OT_region_foursplit(wmOperatorType *ot) { /* identifiers */ ot->name= "Split Region in 4 Parts"; @@ -2025,7 +2027,7 @@ static int region_flip_exec(bContext *C, wmOperator *op) } -void SCREEN_OT_region_flip(wmOperatorType *ot) +static void SCREEN_OT_region_flip(wmOperatorType *ot) { /* identifiers */ ot->name= "Flip Region"; @@ -2195,7 +2197,7 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } -void SCREEN_OT_animation_play(wmOperatorType *ot) +static void SCREEN_OT_animation_play(wmOperatorType *ot) { /* identifiers */ ot->name= "Animation player"; @@ -2244,7 +2246,7 @@ static int border_select_do(bContext *C, wmOperator *op) return 1; } -void SCREEN_OT_border_select(wmOperatorType *ot) +static void SCREEN_OT_border_select(wmOperatorType *ot) { /* identifiers */ ot->name= "Border select"; @@ -2371,13 +2373,36 @@ static ScrArea *find_empty_image_area(bContext *C) } #endif // XXX not used -static void screen_set_image_output(bContext *C) +/* new window uses x,y to set position */ +static void screen_set_image_output(bContext *C, int mx, int my) { Scene *scene= CTX_data_scene(C); ScrArea *sa; SpaceImage *sima; - if(scene->r.displaymode==R_OUTPUT_SCREEN) { + if(scene->r.displaymode==R_OUTPUT_WINDOW) { + rcti rect; + int sizex, sizey; + + sizex= 10 + (scene->r.xsch*scene->r.size)/100; + sizey= 40 + (scene->r.ysch*scene->r.size)/100; + + /* arbitrary... miniature image window views don't make much sense */ + if(sizex < 320) sizex= 320; + if(sizey < 256) sizey= 256; + + /* XXX some magic to calculate postition */ + rect.xmin= mx + CTX_wm_window(C)->posx - sizex/2; + rect.ymin= my + CTX_wm_window(C)->posy - sizey/2; + rect.xmax= rect.xmin + sizex; + rect.ymax= rect.ymin + sizey; + + /* changes context! */ + WM_window_open_temp(C, &rect, WM_WINDOW_RENDER); + + sa= CTX_wm_area(C); + } + else if(scene->r.displaymode==R_OUTPUT_SCREEN) { /* this function returns with changed context */ ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE); sa= CTX_wm_area(C); @@ -2710,7 +2735,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) // store spare /* ensure at least 1 area shows result */ - screen_set_image_output(C); + screen_set_image_output(C, event->x, event->y); /* job custom data */ rj= MEM_callocN(sizeof(RenderJob), "render job"); @@ -2758,7 +2783,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) /* contextual render, using current scene, view3d? */ -void SCREEN_OT_render(wmOperatorType *ot) +static void SCREEN_OT_render(wmOperatorType *ot) { /* identifiers */ ot->name= "Render"; @@ -2782,7 +2807,12 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused) ScrArea *sa= CTX_wm_area(C); SpaceImage *sima= sa->spacedata.first; - if(sima->flag & SI_PREVSPACE) { + /* test if we have a temp screen in front */ + if(CTX_wm_window(C)->screen->full==SCREENTEMP) { + wm_window_lower(CTX_wm_window(C)); + } + /* determine if render already shows */ + else if(sima->flag & SI_PREVSPACE) { sima->flag &= ~SI_PREVSPACE; if(sima->flag & SI_FULLWINDOW) { @@ -2800,7 +2830,7 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused) return OPERATOR_FINISHED; } -void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot) +static void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot) { /* identifiers */ ot->name= "Cancel Render View"; @@ -2813,12 +2843,16 @@ void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot) /* *********************** show render viewer *************** */ -static int render_view_show_exec(bContext *C, wmOperator *unused) +static int render_view_show_invoke(bContext *C, wmOperator *unused, wmEvent *event) { ScrArea *sa= find_area_showing_r_result(C); - + + /* test if we have a temp screen in front */ + if(CTX_wm_window(C)->screen->full==SCREENTEMP) { + wm_window_lower(CTX_wm_window(C)); + } /* determine if render already shows */ - if(sa) { + else if(sa) { SpaceImage *sima= sa->spacedata.first; if(sima->flag & SI_PREVSPACE) { @@ -2835,20 +2869,58 @@ static int render_view_show_exec(bContext *C, wmOperator *unused) } } else { - screen_set_image_output(C); + screen_set_image_output(C, event->x, event->y); } return OPERATOR_FINISHED; } -void SCREEN_OT_render_view_show(struct wmOperatorType *ot) +static void SCREEN_OT_render_view_show(struct wmOperatorType *ot) { /* identifiers */ ot->name= "Show/Hide Render View"; ot->idname= "SCREEN_OT_render_view_show"; /* api callbacks */ - ot->exec= render_view_show_exec; + ot->invoke= render_view_show_invoke; + ot->poll= ED_operator_screenactive; +} + +/* *********** show user pref window ****** */ + +static int userpref_show_invoke(bContext *C, wmOperator *unused, wmEvent *event) +{ + ScrArea *sa; + rcti rect; + int sizex, sizey; + + sizex= 640; + sizey= 480; + + /* some magic to calculate postition */ + rect.xmin= event->x + CTX_wm_window(C)->posx - sizex/2; + rect.ymin= event->y + CTX_wm_window(C)->posy - sizey/2; + rect.xmax= rect.xmin + sizex; + rect.ymax= rect.ymin + sizey; + + /* changes context! */ + WM_window_open_temp(C, &rect, WM_WINDOW_USERPREFS); + + sa= CTX_wm_area(C); + + + return OPERATOR_FINISHED; +} + + +static void SCREEN_OT_userpref_show(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Show/Hide User Preferences"; + ot->idname= "SCREEN_OT_userpref_show"; + + /* api callbacks */ + ot->invoke= userpref_show_invoke; ot->poll= ED_operator_screenactive; } @@ -2879,6 +2951,7 @@ void ED_operatortypes_screen(void) WM_operatortype_append(SCREEN_OT_screen_full_area); WM_operatortype_append(SCREEN_OT_screenshot); WM_operatortype_append(SCREEN_OT_screencast); + WM_operatortype_append(SCREEN_OT_userpref_show); /*frame changes*/ WM_operatortype_append(SCREEN_OT_frame_offset); @@ -2981,6 +3054,9 @@ void ED_keymap_screen(wmWindowManager *wm) WM_keymap_add_item(keymap, "SCREEN_OT_render_view_cancel", ESCKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_show", F11KEY, KM_PRESS, 0, 0); + /* user prefs */ + WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", UKEY, KM_PRESS, KM_ALT, 0); + /* Anim Playback ------------------------------------------------ */ keymap= WM_keymap_listbase(wm, "Frames", 0, 0); diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index da1f050cfd3..7050c7f6d7c 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -150,8 +150,10 @@ static void draw_render_info(Image *ima, ARegion *ar) /* clear header rect */ UI_GetThemeColor3fv(TH_BACK, colf); - glColor3f(colf[0]+0.1f, colf[1]+0.1f, colf[2]+0.1f); + glEnable(GL_BLEND); + glColor4f(colf[0]+0.1f, colf[1]+0.1f, colf[2]+0.1f, 0.5f); glRecti(rect.xmin, rect.ymin, rect.xmax, rect.ymax+1); + glDisable(GL_BLEND); UI_ThemeColor(TH_TEXT_HI); diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index cf107230171..e51da0c0818 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -186,6 +186,8 @@ typedef struct ARegion { #define SCREENNORMAL 0 #define SCREENFULL 1 #define SCREENAUTOPLAY 2 +#define SCREENTEMP 3 + /* Panel->snap - for snapping to screen edges */ #define PNL_SNAP_NONE 0 diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 56ae220f7f0..0a68d2c9053 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -51,7 +51,16 @@ void WM_init (struct bContext *C); void WM_exit (struct bContext *C); void WM_main (struct bContext *C); -struct wmWindow *WM_window_open (struct bContext *C, struct rcti *rect); +struct wmWindow *WM_window_open (struct bContext *C, struct rcti *rect); + + /* defines for 'type' WM_window_open_temp */ +#define WM_WINDOW_RENDER 0 +#define WM_WINDOW_USERPREFS 1 +#define WM_WINDOW_FILESEL 2 + +void WM_window_open_temp (struct bContext *C, struct rcti *position, int type); + + /* files */ int WM_read_homefile (struct bContext *C, struct wmOperator *op); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 11b8f7f8c6f..e9affbac87a 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -513,8 +513,12 @@ static void wm_handler_op_context(bContext *C, wmEventHandler *handler) for(sa= screen->areabase.first; sa; sa= sa->next) if(sa==handler->op_area) break; - if(sa==NULL) - printf("internal error: handler (%s) has invalid area\n", handler->op->type->idname); + if(sa==NULL) { + /* when changing screen layouts with running modal handlers (like render display), this + is not an error to print */ + if(handler->op==NULL) + printf("internal error: handler (%s) has invalid area\n", handler->op->type->idname); + } else { ARegion *ar; CTX_wm_area_set(C, sa); @@ -663,7 +667,6 @@ static void wm_event_modalkeymap(wmOperator *op, wmEvent *event) event->type= EVT_MODAL_MAP; event->val= kmi->propvalue; - printf("found modal event %s %d\n", kmi->idname, kmi->propvalue); } } } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 2019906bd5e..ffaa315f04e 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -605,11 +605,17 @@ void WM_write_file(bContext *C, char *target, int compress, ReportList *reports) /* operator entry */ int WM_write_homefile(bContext *C, wmOperator *op) { + wmWindow *win= CTX_wm_window(C); char tstr[FILE_MAXDIR+FILE_MAXFILE]; int write_flags; + /* check current window and close it if temp */ + if(win->screen->full == SCREENTEMP) { + wm_window_close(C, win); + } + BLI_make_file_string("/", tstr, BLI_gethome(), ".B25.blend"); - + /* force save as regular blend file */ write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN); diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index 6dd150a3416..0fd658dbb64 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -252,29 +252,38 @@ void WM_jobs_start(wmWindowManager *wm, wmJob *steve) } } -void WM_jobs_stop_all(wmWindowManager *wm) +/* stop job, free data completely */ +static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *steve) { - wmJob *steve= wm->jobs.first; + if(steve->running) { + /* signal job to end */ + steve->stop= 1; + BLI_end_threads(&steve->threads); + } - for(; steve; steve= steve->next) { - if(steve->running) { - /* signal job to end */ - steve->stop= 1; - BLI_end_threads(&steve->threads); - } - - if(steve->wt) - WM_event_remove_window_timer(steve->win, steve->wt); - if(steve->customdata) - steve->free(steve->customdata); - if(steve->run_customdata) - steve->run_free(steve->run_customdata); - } + if(steve->wt) + WM_event_remove_window_timer(steve->win, steve->wt); + if(steve->customdata) + steve->free(steve->customdata); + if(steve->run_customdata) + steve->run_free(steve->run_customdata); + + /* remove steve */ + BLI_remlink(&wm->jobs, steve); + MEM_freeN(steve); - BLI_freelistN(&wm->jobs); } -/* stops job(s) from this owner */ +void WM_jobs_stop_all(wmWindowManager *wm) +{ + wmJob *steve; + + while((steve= wm->jobs.first)) + wm_jobs_kill_job(wm, steve); + +} + +/* signal job(s) from this owner to stop, timer is required to get handled */ void WM_jobs_stop(wmWindowManager *wm, void *owner) { wmJob *steve; @@ -285,6 +294,19 @@ void WM_jobs_stop(wmWindowManager *wm, void *owner) steve->stop= 1; } +/* kill job entirely, also removes timer itself */ +void wm_jobs_timer_ended(wmWindowManager *wm, wmTimer *wt) +{ + wmJob *steve; + + for(steve= wm->jobs.first; steve; steve= steve->next) { + if(steve->wt==wt) { + wm_jobs_kill_job(wm, steve); + return; + } + } +} + /* hardcoded to event TIMERJOBS */ static int wm_jobs_timer(bContext *C, wmOperator *op, wmEvent *evt) { diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 2d320458543..5816fbb0667 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -70,7 +70,7 @@ static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0; /* ******** win open & close ************ */ - +/* XXX this one should correctly check for apple top header... */ static void wm_get_screensize(int *width_r, int *height_r) { unsigned int uiwidth; @@ -81,6 +81,34 @@ static void wm_get_screensize(int *width_r, int *height_r) *height_r= uiheight; } +/* keeps offset and size within monitor bounds */ +/* XXX solve dual screen... */ +static void wm_window_check_position(rcti *rect) +{ + int width, height, d; + + wm_get_screensize(&width, &height); + +#ifdef __APPLE__ + height -= 22; +#endif + + if(rect->xmax > width) { + d= rect->xmax - width; + rect->xmax -= d; + rect->xmin -= d; + } + if(rect->ymax > height) { + d= rect->ymax - height; + rect->ymax -= d; + rect->ymin -= d; + } + + if(rect->xmin < 0) rect->xmin= 0; + if(rect->ymin < 0) rect->ymin= 0; +} + + static void wm_ghostwindow_destroy(wmWindow *win) { if(win->ghostwin) { @@ -93,7 +121,7 @@ static void wm_ghostwindow_destroy(wmWindow *win) ED_screen_exit should have been called */ void wm_window_free(bContext *C, wmWindow *win) { - wmTimer *wt; + wmTimer *wt, *wtnext; /* update context */ if(C) { @@ -107,14 +135,20 @@ void wm_window_free(bContext *C, wmWindow *win) CTX_wm_window_set(C, NULL); WM_event_remove_handlers(C, &win->handlers); + + /* end running jobs, a job end also removes its timer */ + for(wt= win->timers.first; wt; wt= wtnext) { + wtnext= wt->next; + if(wt->event_type==TIMERJOBS) + wm_jobs_timer_ended(wm, wt); + } } if(win->eventstate) MEM_freeN(win->eventstate); - for(wt= win->timers.first; wt; wt= wt->next) - if(wt->customdata) - MEM_freeN(wt->customdata); - BLI_freelistN(&win->timers); + /* timer removing, need to call this api function */ + while((wt= win->timers.first)) + WM_event_remove_window_timer(win, wt); wm_event_free_all(win); wm_subwindows_free(win); @@ -174,7 +208,7 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *winorig) } /* this is event from ghost, or exit-blender op */ -static void wm_window_close(bContext *C, wmWindow *win) +void wm_window_close(bContext *C, wmWindow *win) { wmWindowManager *wm= CTX_wm_manager(C); BLI_remlink(&wm->windows, win); @@ -183,35 +217,50 @@ static void wm_window_close(bContext *C, wmWindow *win) ED_screen_exit(C, win, win->screen); wm_window_free(C, win); - if(wm->windows.first==NULL) + /* check remaining windows */ + if(wm->windows.first) { + for(win= wm->windows.first; win; win= win->next) + if(win->screen->full!=SCREENTEMP) + break; + /* in this case we close all */ + if(win==NULL) + WM_exit(C); + } + else WM_exit(C); } void wm_window_title(wmWindowManager *wm, wmWindow *win) { - /* this is set to 1 if you don't have .B.blend open */ - if(G.save_over) { - char *str= MEM_mallocN(strlen(G.sce) + 16, "title"); - - if(wm->file_saved) - sprintf(str, "Blender [%s]", G.sce); - else - sprintf(str, "Blender* [%s]", G.sce); - - GHOST_SetTitle(win->ghostwin, str); - - MEM_freeN(str); - } - else + /* handle the 'temp' window */ + if(win->screen && win->screen->full==SCREENTEMP) { GHOST_SetTitle(win->ghostwin, "Blender"); + } + else { + + /* this is set to 1 if you don't have .B.blend open */ + if(G.save_over) { + char *str= MEM_mallocN(strlen(G.sce) + 16, "title"); + + if(wm->file_saved) + sprintf(str, "Blender [%s]", G.sce); + else + sprintf(str, "Blender* [%s]", G.sce); + + GHOST_SetTitle(win->ghostwin, str); + + MEM_freeN(str); + } + else + GHOST_SetTitle(win->ghostwin, "Blender"); #ifdef __APPLE__ - if(wm->file_saved) - GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateUnModified); - else - GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateModified); + if(wm->file_saved) + GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateUnModified); + else + GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateModified); #endif - + } } /* belongs to below */ @@ -334,6 +383,71 @@ wmWindow *WM_window_open(bContext *C, rcti *rect) return win; } +/* uses screen->full tag to define what to do, currently it limits + to only one "temp" window for render out, preferences, filewindow, etc */ +/* type is #define in WM_api.h */ + +void WM_window_open_temp(bContext *C, rcti *position, int type) +{ + wmWindow *win; + ScrArea *sa; + + /* changes rect to fit within desktop */ + wm_window_check_position(position); + + /* test if we have a temp screen already */ + for(win= CTX_wm_manager(C)->windows.first; win; win= win->next) + if(win->screen->full == SCREENTEMP) + break; + + /* add new window? */ + if(win==NULL) { + win= wm_window_new(C); + + win->posx= position->xmin; + win->posy= position->ymin; + } + + win->sizex= position->xmax - position->xmin; + win->sizey= position->ymax - position->ymin; + + if(win->ghostwin) { + wm_window_set_size(win, win->sizex, win->sizey) ; + wm_window_raise(win); + } + + /* add new screen? */ + if(win->screen==NULL) + win->screen= ED_screen_add(win, CTX_data_scene(C), "temp"); + win->screen->full = SCREENTEMP; + + /* make window active, and validate/resize */ + CTX_wm_window_set(C, win); + wm_check(C); + + /* ensure it shows the right spacetype editor */ + sa= win->screen->areabase.first; + CTX_wm_area_set(C, sa); + + if(type==WM_WINDOW_RENDER) { + ED_area_newspace(C, sa, SPACE_IMAGE); + } + else { + ED_area_newspace(C, sa, SPACE_INFO); + } + + ED_screen_set(C, win->screen); + + if(sa->spacetype==SPACE_IMAGE) + GHOST_SetTitle(win->ghostwin, "Blender Render"); + else if(ELEM(sa->spacetype, SPACE_OUTLINER, SPACE_INFO)) + GHOST_SetTitle(win->ghostwin, "Blender User Preferences"); + else if(sa->spacetype==SPACE_FILE) + GHOST_SetTitle(win->ghostwin, "Blender File View"); + else + GHOST_SetTitle(win->ghostwin, "Blender"); +} + /* ****************** Operators ****************** */ @@ -664,10 +778,12 @@ void WM_event_remove_window_timer(wmWindow *win, wmTimer *timer) { wmTimer *wt; + /* extra security check */ for(wt= win->timers.first; wt; wt= wt->next) if(wt==timer) break; if(wt) { + BLI_remlink(&win->timers, wt); if(wt->customdata) MEM_freeN(wt->customdata); diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index 36219cf3743..a7529157072 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -66,7 +66,7 @@ void wm_gesture_tag_redraw(bContext *C); /* wm_jobs.h */ void WM_OT_jobs_timer(struct wmOperatorType *ot); - +void wm_jobs_timer_ended(wmWindowManager *wm, wmTimer *wt); #endif /* WM_H */ diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h index 45fa9bf6cf7..c2a2b00b796 100644 --- a/source/blender/windowmanager/wm_window.h +++ b/source/blender/windowmanager/wm_window.h @@ -36,6 +36,7 @@ void wm_ghost_init (bContext *C); wmWindow *wm_window_new (bContext *C); void wm_window_free (bContext *C, wmWindow *win); +void wm_window_close (bContext *C, wmWindow *win); void wm_window_title (wmWindowManager *wm, wmWindow *win); void wm_window_add_ghostwindows (wmWindowManager *wm); From 2f8a19e5bca068344b5b5dcb85b447180ec8e29e Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 24 Jul 2009 12:45:25 +0000 Subject: [PATCH 352/512] 2.5 Related to previous commit: - new file menu option "user prefs" - removed 'save user pref' confirmation menu --- release/ui/space_info.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 5f6d87c9a29..c99d7603d0e 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -53,6 +53,7 @@ class INFO_MT_file(bpy.types.Menu): layout.itemO("wm.save_mainfile", text="Save") layout.operator_context = "INVOKE_AREA" layout.itemO("wm.save_as_mainfile", text="Save As...") + layout.itemO("screen.userpref_show", text="User Preferences...") layout.itemS() @@ -535,6 +536,7 @@ class INFO_PT_bottombar(bpy.types.Panel): split = layout.split(percentage=0.8) split.itemL(text="") + layout.operator_context = "EXEC_AREA" split.itemO("wm.save_homefile", text="Save As Default") bpy.types.register(INFO_HT_header) From fbad147b7624cb65399bbea09068e8871e5fb227 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 13:02:16 +0000 Subject: [PATCH 353/512] 2.5 - Restored 'AutoSide Name' and 'Flip Names' operators for both PoseMode and Edit Mode (Armatures). Only the PoseMode menus work for now (since these use operators) --- .../editors/armature/armature_intern.h | 12 +- .../blender/editors/armature/armature_ops.c | 13 +- .../blender/editors/armature/editarmature.c | 125 ++++++++++++----- source/blender/editors/armature/poseobject.c | 127 ++++++++++++------ source/blender/editors/include/ED_armature.h | 1 + .../editors/space_view3d/view3d_header.c | 15 ++- 6 files changed, 211 insertions(+), 82 deletions(-) diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index c37f6803d58..b4ab58930fa 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -55,6 +55,9 @@ void ARMATURE_OT_duplicate_selected(struct wmOperatorType *ot); void ARMATURE_OT_extrude(struct wmOperatorType *ot); void ARMATURE_OT_click_extrude(struct wmOperatorType *ot); +void ARMATURE_OT_autoside_names(struct wmOperatorType *ot); +void ARMATURE_OT_flip_names(struct wmOperatorType *ot); + /* ******************************************************* */ /* Pose-Mode Operators */ void POSE_OT_hide(struct wmOperatorType *ot); @@ -67,9 +70,6 @@ void POSE_OT_scale_clear(struct wmOperatorType *ot); void POSE_OT_copy(struct wmOperatorType *ot); void POSE_OT_paste(struct wmOperatorType *ot); -void POSE_OT_paths_calculate(struct wmOperatorType *ot); -void POSE_OT_paths_clear(struct wmOperatorType *ot); - void POSE_OT_select_all_toggle(struct wmOperatorType *ot); void POSE_OT_select_inverse(struct wmOperatorType *ot); void POSE_OT_select_parent(struct wmOperatorType *ot); @@ -84,6 +84,12 @@ void POSE_OT_group_remove(struct wmOperatorType *ot); void POSE_OT_group_assign(struct wmOperatorType *ot); void POSE_OT_group_unassign(struct wmOperatorType *ot); +void POSE_OT_paths_calculate(struct wmOperatorType *ot); +void POSE_OT_paths_clear(struct wmOperatorType *ot); + +void POSE_OT_autoside_names(struct wmOperatorType *ot); +void POSE_OT_flip_names(struct wmOperatorType *ot); + /* ******************************************************* */ /* Etch-A-Ton */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 5495147acb0..9d44e8efc34 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -129,6 +129,9 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_duplicate_selected); WM_operatortype_append(ARMATURE_OT_extrude); WM_operatortype_append(ARMATURE_OT_click_extrude); + + WM_operatortype_append(ARMATURE_OT_autoside_names); + WM_operatortype_append(ARMATURE_OT_flip_names); /* SKETCH */ WM_operatortype_append(SKETCH_OT_gesture); @@ -150,9 +153,6 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_copy); WM_operatortype_append(POSE_OT_paste); - WM_operatortype_append(POSE_OT_paths_calculate); - WM_operatortype_append(POSE_OT_paths_clear); - WM_operatortype_append(POSE_OT_select_all_toggle); WM_operatortype_append(POSE_OT_select_inverse); @@ -167,6 +167,13 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_group_assign); WM_operatortype_append(POSE_OT_group_unassign); + WM_operatortype_append(POSE_OT_paths_calculate); + WM_operatortype_append(POSE_OT_paths_clear); + + WM_operatortype_append(POSE_OT_autoside_names); + WM_operatortype_append(POSE_OT_flip_names); + + /* POSELIB */ WM_operatortype_append(POSELIB_OT_browse_interactive); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 68d8ffbc11d..2da49731a95 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -5227,48 +5227,111 @@ void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep) } } -/* context editmode object */ -void armature_flip_names(Scene *scene) + +static int armature_flip_names_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX get from context - bArmature *arm= obedit->data; - EditBone *ebone; + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_edit_object(C); + bArmature *arm; char newname[32]; - for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { - if (arm->layer & ebone->layer) { - if (ebone->flag & BONE_SELECTED) { - BLI_strncpy(newname, ebone->name, sizeof(newname)); - bone_flip_name(newname, 1); // 1 = do strip off number extensions - ED_armature_bone_rename(arm, ebone->name, newname); - } - } - } + /* paranoia checks */ + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + arm= ob->data; - BIF_undo_push("Flip names"); + /* loop through selected bones, auto-naming them */ + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) + { + BLI_strncpy(newname, ebone->name, sizeof(newname)); + bone_flip_name(newname, 1); // 1 = do strip off number extensions + ED_armature_bone_rename(arm, ebone->name, newname); + } + CTX_DATA_END; + + /* since we renamed stuff... */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; } -/* context: edtimode armature */ -void armature_autoside_names(Scene *scene, short axis) +void ARMATURE_OT_flip_names (wmOperatorType *ot) { - Object *obedit= scene->obedit; // XXX get from context - bArmature *arm= obedit->data; - EditBone *ebone; - char newname[32]; + /* identifiers */ + ot->name= "Flip Names"; + ot->idname= "ARMATURE_OT_flip_names"; + ot->description= "Flips (and corrects) the names of selected bones."; - for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { - if (arm->layer & ebone->layer) { - if (ebone->flag & BONE_SELECTED) { - BLI_strncpy(newname, ebone->name, sizeof(newname)); - bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis]); - ED_armature_bone_rename(arm, ebone->name, newname); - } - } - } + /* api callbacks */ + ot->exec= armature_flip_names_exec; + ot->poll= ED_operator_editarmature; - BIF_undo_push("Auto-side name"); + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +static int armature_autoside_names_exec (bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_edit_object(C); + bArmature *arm; + char newname[32]; + short axis= RNA_enum_get(op->ptr, "axis"); + + /* paranoia checks */ + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + arm= ob->data; + + /* loop through selected bones, auto-naming them */ + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) + { + BLI_strncpy(newname, ebone->name, sizeof(newname)); + bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis]); + ED_armature_bone_rename(arm, ebone->name, newname); + } + CTX_DATA_END; + + /* since we renamed stuff... */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void ARMATURE_OT_autoside_names (wmOperatorType *ot) +{ + static EnumPropertyItem axis_items[]= { + {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}}; + + /* identifiers */ + ot->name= "AutoName by Axis"; + ot->idname= "ARMATURE_OT_autoside_names"; + ot->description= "Automatically renames the selected bones according to which side of the target axis they fall on."; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= armature_autoside_names_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* settings */ + RNA_def_enum(ot->srna, "axis", axis_items, 0, "Axis", "Axis tag names with."); +} + + + /* if editbone (partial) selected, copy data */ /* context; editmode armature, with mirror editing enabled */ void transform_armature_mirror_update(Object *obedit) diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index d0bc36b5f09..e9ebdb87a3c 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -1534,64 +1534,111 @@ void pose_select_grouped_menu (Scene *scene) /* ********************************************** */ -/* context active object */ -void pose_flip_names(Scene *scene) +static int pose_flip_names_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - bArmature *arm= ob->data; - bPoseChannel *pchan; + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + bArmature *arm; char newname[32]; /* paranoia checks */ - if(!ob && !ob->pose) return; - if(ob==obedit || (ob->flag & OB_POSEMODE)==0) return; + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + arm= ob->data; - if(pose_has_protected_selected(ob, 0, 1)) - return; - - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if(arm->layer & pchan->bone->layer) { - if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { - BLI_strncpy(newname, pchan->name, sizeof(newname)); - bone_flip_name(newname, 1); // 1 = do strip off number extensions - ED_armature_bone_rename(arm, pchan->name, newname); - } - } + /* loop through selected bones, auto-naming them */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + BLI_strncpy(newname, pchan->name, sizeof(newname)); + bone_flip_name(newname, 1); // 1 = do strip off number extensions + ED_armature_bone_rename(arm, pchan->name, newname); } + CTX_DATA_END; - BIF_undo_push("Flip names"); + /* since we renamed stuff... */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; } -/* context active object */ -void pose_autoside_names(Scene *scene, short axis) +void POSE_OT_flip_names (wmOperatorType *ot) { - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - bArmature *arm= ob->data; - bPoseChannel *pchan; + /* identifiers */ + ot->name= "Flip Names"; + ot->idname= "POSE_OT_flip_names"; + ot->description= "Flips (and corrects) the names of selected bones."; + + /* api callbacks */ + ot->exec= pose_flip_names_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ------------------ */ + +static int pose_autoside_names_exec (bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + bArmature *arm; char newname[32]; + short axis= RNA_enum_get(op->ptr, "axis"); /* paranoia checks */ - if (ELEM(NULL, ob, ob->pose)) return; - if (ob==obedit || (ob->flag & OB_POSEMODE)==0) return; + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + arm= ob->data; - if (pose_has_protected_selected(ob, 0, 1)) - return; - - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if(arm->layer & pchan->bone->layer) { - if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { - BLI_strncpy(newname, pchan->name, sizeof(newname)); - bone_autoside_name(newname, 1, axis, pchan->bone->head[axis], pchan->bone->tail[axis]); - ED_armature_bone_rename(arm, pchan->name, newname); - } - } + /* loop through selected bones, auto-naming them */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + BLI_strncpy(newname, pchan->name, sizeof(newname)); + bone_autoside_name(newname, 1, axis, pchan->bone->head[axis], pchan->bone->tail[axis]); + ED_armature_bone_rename(arm, pchan->name, newname); } + CTX_DATA_END; - BIF_undo_push("Flip names"); + /* since we renamed stuff... */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; } +void POSE_OT_autoside_names (wmOperatorType *ot) +{ + static EnumPropertyItem axis_items[]= { + {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}}; + + /* identifiers */ + ot->name= "AutoName by Axis"; + ot->idname= "POSE_OT_autoside_names"; + ot->description= "Automatically renames the selected bones according to which side of the target axis they fall on."; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= pose_autoside_names_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* settings */ + RNA_def_enum(ot->srna, "axis", axis_items, 0, "Axis", "Axis tag names with."); +} + +/* ********************************************** */ + /* context active object, or weightpainted object with armature in posemode */ void pose_activate_flipped_bone(Scene *scene) { diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 8c19f2c3ecf..05ea4d2b506 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -126,6 +126,7 @@ void ED_armature_exit_posemode(struct bContext *C, struct Base *base); void ED_armature_enter_posemode(struct bContext *C, struct Base *base); int ED_pose_channel_in_IK_chain(struct Object *ob, struct bPoseChannel *pchan); void ED_pose_deselectall(struct Object *ob, int test, int doundo); +void ED_pose_recalculate_paths(struct bContext *C, struct Scene *scene, struct Object *ob); /* sketch */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index b5c1e8bb9f6..a00b79e4139 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -3168,14 +3168,19 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemS(layout); + uiItemEnumO(layout, "AutoName Left-Right", 0, "POSE_OT_autoside_names", "axis", 0); + uiItemEnumO(layout, "AutoName Front-Back", 0, "POSE_OT_autoside_names", "axis", 1); + uiItemEnumO(layout, "AutoName Top-Bottom", 0, "POSE_OT_autoside_names", "axis", 2); + + uiItemO(layout, "Flip L/R Names", 0, "POSE_OT_flip_names"); + + //separator + move layer operators... + + uiItemS(layout); + uiItemMenuF(layout, "Show/Hide Bones", 0, view3d_pose_armature_showhidemenu); #if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Left-Right|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Front-Back|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Top-Bottom|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip L/R Names|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Attributes...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); From e0c64de2971836bcbbb8da7bc7181029e4872901 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 24 Jul 2009 13:17:40 +0000 Subject: [PATCH 354/512] 2.5 Temp window now clips correctly on left side. Also increased top offset for OSX to show window header. --- source/blender/windowmanager/intern/wm_window.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 5816fbb0667..31e6de2527b 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -90,9 +90,19 @@ static void wm_window_check_position(rcti *rect) wm_get_screensize(&width, &height); #ifdef __APPLE__ - height -= 22; + height -= 42; #endif + if(rect->xmin < 0) { + d= rect->xmin; + rect->xmax -= d; + rect->xmin -= d; + } + if(rect->ymin < 0) { + d= rect->ymin; + rect->ymax -= d; + rect->ymin -= d; + } if(rect->xmax > width) { d= rect->xmax - width; rect->xmax -= d; From 7f630d728a2b37ce7eb5200dea6fd19a85296029 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 24 Jul 2009 13:25:39 +0000 Subject: [PATCH 355/512] tiny change to menu header text. It was almost identical with the menu items themselves, making it impossible to tell them apart. --- source/blender/editors/interface/interface_widgets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 790b01edbe6..9678a5dfc9d 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1037,7 +1037,7 @@ static struct uiWidgetColors wcol_menu_back= { {45, 45, 45, 230}, {100, 100, 100, 255}, - {255, 255, 255, 255}, + {160, 160, 160, 255}, {255, 255, 255, 255}, 0, From 4158913835500e505e722358c2b573e98066bee3 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 13:34:45 +0000 Subject: [PATCH 356/512] 2.5 - Adding Jump to Next/Prev Keyframe Operator This is implemented at the Screen-level, and only considers scene and active-object keyframes (like the timeline). TODO: * Need to update the timeline header buttons to use this operator. One limitation is that I can't get the buttons there to take an arg... --- source/blender/editors/screen/screen_ops.c | 95 ++++++++++++++++++++- source/blender/editors/space_nla/nla_edit.c | 2 +- 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 46023f278c6..b11ba3efa73 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -31,6 +31,7 @@ #include "BLI_arithb.h" #include "BLI_blenlib.h" #include "BLI_editVert.h" +#include "BLI_dlrbTree.h" #include "DNA_armature_types.h" #include "DNA_image_types.h" @@ -63,6 +64,7 @@ #include "ED_mesh.h" #include "ED_object.h" #include "ED_screen_types.h" +#include "ED_keyframes_draw.h" #include "RE_pipeline.h" #include "IMB_imbuf.h" @@ -1373,7 +1375,6 @@ static void SCREEN_OT_region_scale(wmOperatorType *ot) /* ************** frame change operator ***************************** */ - /* function to be called outside UI context, or for redo */ static int frame_offset_exec(bContext *C, wmOperator *op) { @@ -1402,6 +1403,93 @@ static void SCREEN_OT_frame_offset(wmOperatorType *ot) RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX); } +/* ************** jump to keyframe operator ***************************** */ + +/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */ +// TODO: make this an API func? +static ActKeyColumn *cfra_find_nearest_next_ak (ActKeyColumn *ak, float cframe, short next) +{ + ActKeyColumn *akn= NULL; + + /* sanity checks */ + if (ak == NULL) + return NULL; + + /* check if this is a match, or whether it is in some subtree */ + if (cframe < ak->cfra) + akn= cfra_find_nearest_next_ak(ak->left, cframe, next); + else if (cframe > ak->cfra) + akn= cfra_find_nearest_next_ak(ak->right, cframe, next); + + /* if no match found (or found match), just use the current one */ + if (akn == NULL) + return ak; + else + return akn; +} + +/* function to be called outside UI context, or for redo */ +static int keyframe_jump_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + DLRBT_Tree keys; + ActKeyColumn *ak; + short next= RNA_boolean_get(op->ptr, "next"); + + /* sanity checks */ + if (scene == NULL) + return OPERATOR_CANCELLED; + + /* init binarytree-list for getting keyframes */ + BLI_dlrbTree_init(&keys); + + /* populate tree with keyframe nodes */ + if (scene && scene->adt) + scene_to_keylist(NULL, scene, &keys, NULL); + if (ob && ob->adt) + ob_to_keylist(NULL, ob, &keys, NULL); + + /* build linked-list for searching */ + BLI_dlrbTree_linkedlist_sync(&keys); + + /* find nearest keyframe in the right direction */ + ak= cfra_find_nearest_next_ak(keys.root, (float)scene->r.cfra, next); + + /* set the new frame (if keyframe found) */ + if (ak) { + if (next && ak->next) + scene->r.cfra= (int)ak->next->cfra; + else if (!next && ak->prev) + scene->r.cfra= (int)ak->prev->cfra; + else { + printf("ERROR: no suitable keyframe found. Using %f as new frame \n", ak->cfra); + scene->r.cfra= (int)ak->cfra; // XXX + } + } + + /* free temp stuff */ + BLI_dlrbTree_free(&keys); + + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); + + return OPERATOR_FINISHED; +} + +static void SCREEN_OT_keyframe_jump(wmOperatorType *ot) +{ + ot->name = "Jump to Keyframe"; + ot->idname = "SCREEN_OT_keyframe_jump"; + + ot->exec= keyframe_jump_exec; + + ot->poll= ED_operator_screenactive; + ot->flag= 0; + + /* rna */ + RNA_def_boolean(ot->srna, "next", 1, "Next Keyframe", ""); +} + /* ************** switch screen operator ***************************** */ @@ -2955,6 +3043,8 @@ void ED_operatortypes_screen(void) /*frame changes*/ WM_operatortype_append(SCREEN_OT_frame_offset); + WM_operatortype_append(SCREEN_OT_keyframe_jump); + WM_operatortype_append(SCREEN_OT_animation_step); WM_operatortype_append(SCREEN_OT_animation_play); @@ -3066,6 +3156,9 @@ void ED_keymap_screen(wmWindowManager *wm) RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -1); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 1); + WM_keymap_add_item(keymap, "SCREEN_OT_keyframe_jump", PAGEUPKEY, KM_PRESS, KM_CTRL, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_keyframe_jump", PAGEDOWNKEY, KM_PRESS, KM_CTRL, 0)->ptr, "next", 0); + /* play (forward and backwards) */ WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 586b2467781..64fed7c2433 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -88,7 +88,7 @@ void ED_nla_postop_refresh (bAnimContext *ac) short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT); /* get blocks to work on */ - ANIM_animdata_filter(&ac, &anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { /* performing auto-blending, extend-mode validation, etc. */ From ef6cbc27e05058d9a86e8aafc0e2fb58570b5f8b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 24 Jul 2009 13:41:57 +0000 Subject: [PATCH 357/512] Buttons for next/prev keyframes in timeline now work again --- .../blender/editors/space_time/time_header.c | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index 84c73c8d8a4..f79e04755e2 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -53,6 +53,8 @@ #include "WM_api.h" #include "WM_types.h" +#include "RNA_access.h" + #include "BIF_gl.h" #include "BIF_glutil.h" @@ -362,12 +364,8 @@ static uiBlock *time_framemenu(bContext *C, ARegion *ar, void *arg_unused) #define B_TL_PLAY 752 #define B_TL_RPLAY 760 #define B_TL_FF 753 -#define B_TL_PREVKEY 754 -#define B_TL_NEXTKEY 755 #define B_TL_STOP 756 #define B_TL_PREVIEWON 757 -#define B_TL_INSERTKEY 758 -#define B_TL_DELETEKEY 759 #define B_FLIPINFOMENU 0 #define B_NEWFRAME 0 @@ -425,14 +423,6 @@ void do_time_buttons(bContext *C, void *arg, int event) WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); //update_for_newframe(); break; - case B_TL_PREVKEY: - /* previous keyframe */ - //nextprev_timeline_key(-1); - break; - case B_TL_NEXTKEY: - /* next keyframe */ - //nextprev_timeline_key(1); - break; case B_TL_PREVIEWON: if (scene->r.psfra) { @@ -458,6 +448,7 @@ void time_header_buttons(const bContext *C, ARegion *ar) SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); Scene *scene= CTX_data_scene(C); uiBlock *block; + uiBut *but; int xco, yco= 3; char *menustr= NULL; @@ -540,8 +531,9 @@ void time_header_buttons(const bContext *C, ARegion *ar) uiDefIconBut(block, BUT, B_TL_REW, ICON_REW, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to Start frame (Shift DownArrow)"); xco+= XIC; - uiDefIconBut(block, BUT, B_TL_PREVKEY, ICON_PREV_KEYFRAME, - xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to previous keyframe (Ctrl PageDown)"); + + but= uiDefIconButO(block, BUT, "SCREEN_OT_keyframe_jump", WM_OP_INVOKE_REGION_WIN, ICON_PREV_KEYFRAME, xco,yco,XIC,YIC, "Skip to previous keyframe (Ctrl PageDown)"); + RNA_boolean_set(uiButGetOperatorPtrRNA(but), "next", 0); xco+= XIC; if(CTX_wm_screen(C)->animtimer) { @@ -562,9 +554,10 @@ void time_header_buttons(const bContext *C, ARegion *ar) } xco+= XIC; - uiDefIconBut(block, BUT, B_TL_NEXTKEY, ICON_NEXT_KEYFRAME, - xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to next keyframe (Ctrl PageUp)"); + but= uiDefIconButO(block, BUT, "SCREEN_OT_keyframe_jump", WM_OP_INVOKE_REGION_WIN, ICON_NEXT_KEYFRAME, xco,yco,XIC,YIC, "Skip to next keyframe (Ctrl PageUp)"); + RNA_boolean_set(uiButGetOperatorPtrRNA(but), "next", 1); xco+= XIC; + uiDefIconBut(block, BUT, B_TL_FF, ICON_FF, xco, yco, XIC, YIC, 0, 0, 0, 0, 0, "Skip to End frame (Shift UpArrow)"); uiBlockEndAlign(block); From ad6aaeb319baac9a134630eba2bf2a71dfdf04fb Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 24 Jul 2009 14:30:40 +0000 Subject: [PATCH 358/512] Resized the preferences window to 800 px. This makes proper space for the header button text. Merged File Paths and Autosave preference tabs to one 'File' item. This makes the number of items inside the tabs more even and makes text in the tabs easier to read when the window is narrower. Also added weight paint ramp. --- release/ui/space_info.py | 102 ++++++++++--------- source/blender/editors/screen/screen_ops.c | 2 +- source/blender/makesrna/intern/rna_userdef.c | 98 +++++++----------- 3 files changed, 92 insertions(+), 110 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index c99d7603d0e..5ff8609f32d 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -195,7 +195,7 @@ class INFO_PT_view(bpy.types.Panel): split = layout.split() col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Display:") colsplitcol.itemR(view, "tooltips") @@ -220,7 +220,7 @@ class INFO_PT_view(bpy.types.Panel): col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="View Manipulation:") colsplitcol.itemR(view, "auto_depth") @@ -241,7 +241,7 @@ class INFO_PT_view(bpy.types.Panel): colsplitcol.itemR(view, "ndof_rotate_speed", text="Orbit Speed") col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Mouse Buttons:") colsplitcol.itemR(view, "left_mouse_button_select") @@ -264,7 +264,7 @@ class INFO_PT_view(bpy.types.Panel): col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() #manipulator colsplitcol.itemR(view, "use_manipulator") @@ -301,7 +301,7 @@ class INFO_PT_edit(bpy.types.Panel): split = layout.split() col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Materials:") @@ -322,7 +322,7 @@ class INFO_PT_edit(bpy.types.Panel): colsplitcol.itemR(edit, "drag_immediately") col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Snap:") colsplitcol.itemR(edit, "snap_translate", text="Translate") @@ -341,7 +341,7 @@ class INFO_PT_edit(bpy.types.Panel): col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Keyframing:") @@ -367,7 +367,7 @@ class INFO_PT_edit(bpy.types.Panel): colsplitcol.itemS() col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemL(text="Duplicate:") colsplitcol.itemR(edit, "duplicate_mesh", text="Mesh") @@ -399,7 +399,7 @@ class INFO_PT_system(bpy.types.Panel): split = layout.split() col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() colsplitcol.itemR(system, "emulate_numpad") colsplitcol.itemS() @@ -407,7 +407,10 @@ class INFO_PT_system(bpy.types.Panel): #Weight Colors colsplitcol.itemL(text="Weight Colors:") colsplitcol.itemR(system, "use_weight_color_range", text="Use Custom Range") - colsplitcol.itemR(system, "weight_color_range") + + colsub = colsplitcol.column() + colsub.active = system.use_weight_color_range + colsub.template_color_ramp(system.weight_color_range, expand=True) colsplitcol.itemS() colsplitcol.itemS() @@ -417,7 +420,7 @@ class INFO_PT_system(bpy.types.Panel): colsplitcol.itemR(system, "memory_cache_limit") col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() #System colsplitcol.itemL(text="System:") @@ -431,7 +434,7 @@ class INFO_PT_system(bpy.types.Panel): colsplitcol.itemR(system, "audio_mixing_buffer") col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.85) colsplitcol = colsplit.column() #OpenGL colsplitcol.itemL(text="OpenGL:") @@ -441,7 +444,7 @@ class INFO_PT_system(bpy.types.Panel): row = colsplitcol.row() row.itemR(system, "window_draw_method", expand=True) colsplitcol.itemL(text="Textures:") - colsplitcol.itemR(system, "gl_texture_limit", text="Limit") + colsplitcol.itemR(system, "gl_texture_limit", text="Limit Size") colsplitcol.itemR(system, "texture_time_out", text="Time Out") colsplitcol.itemR(system, "texture_collection_rate", text="Collection Rate") @@ -461,46 +464,48 @@ class INFO_PT_filepaths(bpy.types.Panel): split = layout.split() col = split.column() - col.itemR(paths, "use_relative_paths") - col.itemR(paths, "compress_file") - col.itemR(paths, "fonts_directory") - col.itemR(paths, "textures_directory") - col.itemR(paths, "texture_plugin_directory") - col.itemR(paths, "sequence_plugin_directory") - col.itemR(paths, "render_output_directory") - col.itemR(paths, "python_scripts_directory") - col.itemR(paths, "sounds_directory") - col.itemR(paths, "temporary_directory") - -class INFO_PT_autosave(bpy.types.Panel): - __space_type__ = "USER_PREFERENCES" - __label__ = "Auto Save" - __no_header__ = True - - def poll(self, context): - userpref = context.user_preferences - return (userpref.active_section == 'AUTO_SAVE') - - def draw(self, context): - layout = self.layout - userpref = context.user_preferences - save = userpref.autosave + col.itemL(text="File Paths:") + splitcol = col.split(percentage=0.3) - split = layout.split() - col = split.column() - colsplit = col.split(percentage=0.8) - colsplitcol = colsplit.column() - colsplitcol.itemR(save, "save_version") - colsplitcol.itemR(save, "recent_files") - colsplitcol.itemR(save, "save_preview_images") + splitcol.itemL(text="Fonts:") + splitcol.itemR(paths, "fonts_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Textures:") + splitcol.itemR(paths, "textures_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Texture Plugins:") + splitcol.itemR(paths, "texture_plugin_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Sequence Plugins:") + splitcol.itemR(paths, "sequence_plugin_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Render Output:") + splitcol.itemR(paths, "render_output_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Scripts:") + splitcol.itemR(paths, "python_scripts_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Sounds:") + splitcol.itemR(paths, "sounds_directory", text="") + splitcol = col.split(percentage=0.3) + splitcol.itemL(text="Temp:") + splitcol.itemR(paths, "temporary_directory", text="") col = split.column() - colsplit = col.split(percentage=0.8) + colsplit = col.split(percentage=0.2) colsplitcol = colsplit.column() - colsplitcol.itemR(save, "auto_save_temporary_files") + colsplitcol = colsplit.column() + colsplitcol.itemL(text="Save & Load:") + colsplitcol.itemR(paths, "use_relative_paths") + colsplitcol.itemR(paths, "compress_file") + colsplitcol.itemL(text="Auto Save:") + colsplitcol.itemR(paths, "save_version") + colsplitcol.itemR(paths, "recent_files") + colsplitcol.itemR(paths, "save_preview_images") + colsplitcol.itemR(paths, "auto_save_temporary_files") colsub = colsplitcol.column() - colsub.enabled = save.auto_save_temporary_files - colsub.itemR(save, "auto_save_time") + colsub.enabled = paths.auto_save_temporary_files + colsub.itemR(paths, "auto_save_time") class INFO_PT_language(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" @@ -553,7 +558,6 @@ bpy.types.register(INFO_PT_view) bpy.types.register(INFO_PT_edit) bpy.types.register(INFO_PT_system) bpy.types.register(INFO_PT_filepaths) -bpy.types.register(INFO_PT_autosave) bpy.types.register(INFO_PT_language) bpy.types.register(INFO_PT_bottombar) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index b11ba3efa73..09af626da4a 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2982,7 +2982,7 @@ static int userpref_show_invoke(bContext *C, wmOperator *unused, wmEvent *event) rcti rect; int sizex, sizey; - sizex= 640; + sizex= 800; sizey= 480; /* some magic to calculate postition */ diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index f9aa27fcdbd..3344489e389 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -101,11 +101,6 @@ static PointerRNA rna_UserDef_edit_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_UserPreferencesEdit, ptr->data); } -static PointerRNA rna_UserDef_autosave_get(PointerRNA *ptr) -{ - return rna_pointer_inherit_refine(ptr, &RNA_UserPreferencesAutosave, ptr->data); -} - static PointerRNA rna_UserDef_language_get(PointerRNA *ptr) { return rna_pointer_inherit_refine(ptr, &RNA_UserPreferencesLanguage, ptr->data); @@ -1721,8 +1716,8 @@ static void rna_def_userdef_edit(BlenderRNA *brna) StructRNA *srna; static EnumPropertyItem auto_key_modes[] = { - {AUTOKEY_MODE_NORMAL, "ADD_REPLACE_KEYS", 0, "Add/Replace Keys", ""}, - {AUTOKEY_MODE_EDITKEYS, "REPLACE_KEYS", 0, "Replace Keys", ""}, + {AUTOKEY_MODE_NORMAL, "ADD_REPLACE_KEYS", 0, "Add/Replace", ""}, + {AUTOKEY_MODE_EDITKEYS, "REPLACE_KEYS", 0, "Replace", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem new_interpolation_types[] = { @@ -1956,55 +1951,20 @@ static void rna_def_userdef_language(BlenderRNA *brna) RNA_def_property_update(prop, NC_WINDOW, NULL); } -static void rna_def_userdef_autosave(BlenderRNA *brna) -{ - PropertyRNA *prop; - StructRNA *srna; - - /* Autosave */ - - srna= RNA_def_struct(brna, "UserPreferencesAutosave", NULL); - RNA_def_struct_sdna(srna, "UserDef"); - RNA_def_struct_nested(brna, srna, "UserPreferences"); - RNA_def_struct_ui_text(srna, "Auto Save", "Automatic backup file settings."); - - prop= RNA_def_property(srna, "save_version", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "versions"); - RNA_def_property_range(prop, 0, 32); - RNA_def_property_ui_text(prop, "Save Versions", "The number of old versions to maintain in the current directory, when manually saving."); - - prop= RNA_def_property(srna, "auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSAVE); - RNA_def_property_ui_text(prop, "Auto Save Temporary Files", "Automatic saving of temporary files."); - - prop= RNA_def_property(srna, "auto_save_time", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "savetime"); - RNA_def_property_range(prop, 1, 60); - RNA_def_property_ui_text(prop, "Auto Save Time", "The time (in minutes) to wait between automatic temporary saves."); - - prop= RNA_def_property(srna, "recent_files", PROP_INT, PROP_NONE); - RNA_def_property_range(prop, 0, 30); - RNA_def_property_ui_text(prop, "Recent Files", "Maximum number of recently opened files to remember."); - - prop= RNA_def_property(srna, "save_preview_images", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SAVE_PREVIEWS); - RNA_def_property_ui_text(prop, "Save Preview Images", "Enables automatic saving of preview images in the .blend file."); -} - static void rna_def_userdef_system(BlenderRNA *brna) { PropertyRNA *prop; StructRNA *srna; static EnumPropertyItem gl_texture_clamp_items[] = { - {0, "GL_CLAMP_OFF", 0, "GL Texture Clamp Off", ""}, - {8192, "GL_CLAMP_8192", 0, "GL Texture Clamp 8192", ""}, - {4096, "GL_CLAMP_4096", 0, "GL Texture Clamp 4096", ""}, - {2048, "GL_CLAMP_2048", 0, "GL Texture Clamp 2048", ""}, - {1024, "GL_CLAMP_1024", 0, "GL Texture Clamp 1024", ""}, - {512, "GL_CLAMP_512", 0, "GL Texture Clamp 512", ""}, - {256, "GL_CLAMP_256", 0, "GL Texture Clamp 256", ""}, - {128, "GL_CLAMP_128", 0, "GL Texture Clamp 128", ""}, + {0, "GL_CLAMP_OFF", 0, "Off", ""}, + {8192, "GL_CLAMP_8192", 0, "8192", ""}, + {4096, "GL_CLAMP_4096", 0, "4096", ""}, + {2048, "GL_CLAMP_2048", 0, "2048", ""}, + {1024, "GL_CLAMP_1024", 0, "1024", ""}, + {512, "GL_CLAMP_512", 0, "512", ""}, + {256, "GL_CLAMP_256", 0, "256", ""}, + {128, "GL_CLAMP_128", 0, "128", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem audio_mixing_samples_items[] = { @@ -2174,8 +2134,33 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) prop= RNA_def_property(srna, "temporary_directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "tempdir"); RNA_def_property_ui_text(prop, "Temporary Directory", "The directory for storing temporary save files."); + + /* Autosave */ + + prop= RNA_def_property(srna, "save_version", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "versions"); + RNA_def_property_range(prop, 0, 32); + RNA_def_property_ui_text(prop, "Save Versions", "The number of old versions to maintain in the current directory, when manually saving."); + + prop= RNA_def_property(srna, "auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSAVE); + RNA_def_property_ui_text(prop, "Auto Save Temporary Files", "Automatic saving of temporary files."); + + prop= RNA_def_property(srna, "auto_save_time", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "savetime"); + RNA_def_property_range(prop, 1, 60); + RNA_def_property_ui_text(prop, "Auto Save Time", "The time (in minutes) to wait between automatic temporary saves."); + + prop= RNA_def_property(srna, "recent_files", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 0, 30); + RNA_def_property_ui_text(prop, "Recent Files", "Maximum number of recently opened files to remember."); + + prop= RNA_def_property(srna, "save_preview_images", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SAVE_PREVIEWS); + RNA_def_property_ui_text(prop, "Save Preview Images", "Enables automatic saving of preview images in the .blend file."); } + void RNA_def_userdef(BlenderRNA *brna) { StructRNA *srna; @@ -2185,10 +2170,9 @@ void RNA_def_userdef(BlenderRNA *brna) {0, "VIEW_CONTROLS", 0, "View", ""}, {1, "EDIT_METHODS", 0, "Editing", ""}, {2, "LANGUAGE_COLORS", 0, "Language", ""}, - {3, "AUTO_SAVE", 0, "Auto Save", ""}, - {4, "SYSTEM_OPENGL", 0, "System & OpenGL", ""}, - {5, "FILE_PATHS", 0, "File Paths", ""}, - {6, "THEMES", 0, "Themes", ""}, + {3, "SYSTEM_OPENGL", 0, "System", ""}, + {4, "FILE_PATHS", 0, "File", ""}, + {5, "THEMES", 0, "Themes", ""}, {0, NULL, 0, NULL, NULL}}; rna_def_userdef_dothemes(brna); @@ -2224,11 +2208,6 @@ void RNA_def_userdef(BlenderRNA *brna) RNA_def_property_pointer_funcs(prop, "rna_UserDef_edit_get", NULL, NULL); RNA_def_property_ui_text(prop, "Edit Methods", "Settings for interacting with Blender data."); - prop= RNA_def_property(srna, "autosave", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_struct_type(prop, "UserPreferencesAutosave"); - RNA_def_property_pointer_funcs(prop, "rna_UserDef_autosave_get", NULL, NULL); - RNA_def_property_ui_text(prop, "Auto Save", "Automatic backup file settings."); - prop= RNA_def_property(srna, "language", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_struct_type(prop, "UserPreferencesLanguage"); RNA_def_property_pointer_funcs(prop, "rna_UserDef_language_get", NULL, NULL); @@ -2246,7 +2225,6 @@ void RNA_def_userdef(BlenderRNA *brna) rna_def_userdef_view(brna); rna_def_userdef_edit(brna); - rna_def_userdef_autosave(brna); rna_def_userdef_language(brna); rna_def_userdef_filepaths(brna); rna_def_userdef_system(brna); From f24bcac43eab1238f933a227d8da84ee0d48a0c3 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 24 Jul 2009 16:41:12 +0000 Subject: [PATCH 359/512] 2.5: Various Fixes * Fix crash loading particle AnimData. This crashed many BBB files. If you have a .blend file that crashes when loading it in 2.5, please mail me, I'd like to know. * Image window zoom ratio did not work correct with py 2.x. * Other minor fixes for image window RNA. * Buttons window now remembers the tab that was last clicked by the user, even if that tab is no longer available due to context, and then enable the tab again if the context for it is back. * Cleaned up buttons space DNA a bit, removing unused vars. * Armature bone rename outside edit mode did not call right function yet. * Armature layers are now editable even if lib linked. This is useful for proxies. For this purpose a PROP_LIB_EXCEPTION flag was added. Need to think over proxy / RNA a bit though, not sure what the requirements are yet. * Parent to Armature Deform now has options to create vertex groups, instead of always creating them. --- release/ui/space_image.py | 33 +---------- source/blender/blenloader/intern/readfile.c | 24 ++------ .../blender/editors/armature/editarmature.c | 30 +++------- source/blender/editors/include/ED_armature.h | 7 ++- source/blender/editors/object/object_edit.c | 58 ++++++++++--------- source/blender/editors/screen/screen_ops.c | 1 - .../editors/space_buttons/buttons_context.c | 5 ++ .../editors/space_buttons/buttons_header.c | 2 + .../editors/space_buttons/space_buttons.c | 1 - .../blender/editors/space_outliner/outliner.c | 6 +- source/blender/makesdna/DNA_space_types.h | 36 ++++-------- source/blender/makesrna/RNA_types.h | 5 ++ source/blender/makesrna/intern/rna_access.c | 2 +- source/blender/makesrna/intern/rna_armature.c | 15 +++++ source/blender/makesrna/intern/rna_scene.c | 2 +- source/blender/makesrna/intern/rna_space.c | 18 ++---- 16 files changed, 101 insertions(+), 144 deletions(-) diff --git a/release/ui/space_image.py b/release/ui/space_image.py index cdb22fb0442..f8950892957 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -32,7 +32,7 @@ class IMAGE_MT_view(bpy.types.Menu): for a, b in ratios: text = "Zoom %d:%d" % (a, b) - layout.item_floatO("image.view_zoom_ratio", "ratio", a/b, text=text) + layout.item_floatO("image.view_zoom_ratio", "ratio", a/float(b), text=text) layout.itemS() @@ -225,34 +225,6 @@ class IMAGE_HT_header(bpy.types.Header): layout.template_ID(sima, "image", new="image.new") - """ - /* image select */ - - pinflag= (show_render)? 0: UI_ID_PIN; - xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)sima->image, ID_IM, &sima->pin, xco, yco, - sima_idpoin_handle, UI_ID_BROWSE|UI_ID_BROWSE_RENDER|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE|pinflag); - xco += 8; - """ - - """ - if(ima && !ELEM3(ima->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE, IMA_SRC_VIEWER) && ima->ok) { - /* XXX this should not be a static var */ - static int headerbuttons_packdummy; - - headerbuttons_packdummy = 0; - - if (ima->packedfile) { - headerbuttons_packdummy = 1; - } - if (ima->packedfile && ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) - uiDefIconButBitI(block, TOG, 1, 0 /* XXX B_SIMA_REPACK */, ICON_UGLYPACKAGE, xco,yco,XIC,YIC, &headerbuttons_packdummy, 0, 0, 0, 0, "Re-Pack this image as PNG"); - else - uiDefIconButBitI(block, TOG, 1, 0 /* XXX B_SIMAPACKIMA */, ICON_PACKAGE, xco,yco,XIC,YIC, &headerbuttons_packdummy, 0, 0, 0, 0, "Pack/Unpack this image"); - - xco+= XIC+8; - } - """ - # uv editing if show_uvedit: uvedit = sima.uv_editor @@ -294,7 +266,8 @@ class IMAGE_HT_header(bpy.types.Header): if ima.type == "COMPOSITE" and ima.source in ("MOVIE", "SEQUENCE"): row.itemO("image.play_composite", icon="ICON_PLAY") - layout.itemR(sima, "update_automatically", text="") + if show_uvedit or sima.image_painting: + layout.itemR(sima, "update_automatically", text="") class IMAGE_PT_game_properties(bpy.types.Panel): __space_type__ = "IMAGE_EDITOR" diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 8e33979b134..9f4a2456567 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4345,9 +4345,10 @@ static void lib_link_screen(FileData *fd, Main *main) } else if(sl->spacetype==SPACE_BUTS) { SpaceButs *sbuts= (SpaceButs *)sl; - sbuts->lockpoin= NULL; sbuts->ri= NULL; sbuts->pinid= newlibadr(fd, sc->id.lib, sbuts->pinid); + sbuts->mainbo= sbuts->mainb; + sbuts->mainbuser= sbuts->mainb; if(main->versionfile<132) butspace_version_132(sbuts); } @@ -4556,7 +4557,6 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene) } else if(sl->spacetype==SPACE_BUTS) { SpaceButs *sbuts= (SpaceButs *)sl; - sbuts->lockpoin= NULL; sbuts->pinid = restore_pointer_by_name(newmain, sbuts->pinid, 0); //XXX if (sbuts->ri) sbuts->ri->curtile = 0; } @@ -6267,7 +6267,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } if(main->versionfile <= 191) { - bScreen *sc= main->screen.first; Object *ob= main->object.first; Material *ma = main->mat.first; @@ -6283,22 +6282,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main) /*ob->quat[1]= 1.0f;*/ /* quats arnt used yet */ ob= ob->id.next; } - - while(sc) { - ScrArea *sa= sc->areabase.first; - while(sa) { - SpaceLink *sl= sa->spacedata.first; - while(sl) { - if(sl->spacetype==SPACE_BUTS) { - SpaceButs *sbuts= (SpaceButs*) sl; - sbuts->scaflag= BUTS_SENS_LINK|BUTS_SENS_ACT|BUTS_CONT_ACT|BUTS_ACT_ACT|BUTS_ACT_LINK; - } - sl= sl->next; - } - sa= sa->next; - } - sc= sc->id.next; - } } if(main->versionfile <= 193) { @@ -9764,7 +9747,8 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting expand_doit(fd, mainvar, part->eff_group); expand_doit(fd, mainvar, part->bb_ob); - expand_animdata(fd, mainvar, part->adt); + if(part->adt) + expand_animdata(fd, mainvar, part->adt); } static void expand_group(FileData *fd, Main *mainvar, Group *group) diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 2da49731a95..cfae8ebb3a9 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -4614,44 +4614,28 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m MEM_freeN(verts); } -void create_vgroups_from_armature(Scene *scene, Object *ob, Object *par) +void create_vgroups_from_armature(Scene *scene, Object *ob, Object *par, int mode) { /* Lets try to create some vertex groups * based on the bones of the parent armature. */ bArmature *arm= par->data; - short mode; - /* Prompt the user on whether/how they want the vertex groups - * added to the child mesh */ - mode= pupmenu("Create Vertex Groups? %t|" - "Don't Create Groups %x1|" - "Name Groups %x2|" - "Create From Envelopes %x3|" - "Create From Bone Heat %x4|"); - - mode= 3; // XXX - - switch (mode) { - case 2: + if(mode == ARM_GROUPS_NAME) { /* Traverse the bone list, trying to create empty vertex * groups cooresponding to the bone. */ - bone_looper(ob, arm->bonebase.first, NULL, - add_defgroup_unique_bone); + bone_looper(ob, arm->bonebase.first, NULL, add_defgroup_unique_bone); + if (ob->type == OB_MESH) create_dverts(ob->data); - - break; - - case 3: - case 4: + } + else if(mode == ARM_GROUPS_ENVELOPE || mode == ARM_GROUPS_AUTO) { /* Traverse the bone list, trying to create vertex groups * that are populated with the vertices for which the * bone is closest. */ - add_verts_to_dgroups(scene, ob, par, (mode == 4), 0); - break; + add_verts_to_dgroups(scene, ob, par, (mode == ARM_GROUPS_AUTO), 0); } } /* ************* Clear Pose *****************************/ diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 05ea4d2b506..3b5932b2950 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -112,9 +112,14 @@ void add_primitive_bone(struct Scene *scene, struct View3D *v3d, struct RegionVi void transform_armature_mirror_update(struct Object *obedit); void clear_armature(struct Scene *scene, struct Object *ob, char mode); -void create_vgroups_from_armature(struct Scene *scene, struct Object *ob, struct Object *par); void docenter_armature (struct Scene *scene, struct View3D *v3d, struct Object *ob, int centermode); +#define ARM_GROUPS_NAME 1 +#define ARM_GROUPS_ENVELOPE 2 +#define ARM_GROUPS_AUTO 3 + +void create_vgroups_from_armature(struct Scene *scene, struct Object *ob, struct Object *par, int mode); + void auto_align_armature(struct Scene *scene, struct View3D *v3d, short mode); void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone); /* if bone is already in list, pass it as param to ignore it */ void ED_armature_bone_rename(struct bArmature *arm, char *oldnamep, char *newnamep); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index cf37b0dd812..5c6c55e956b 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -2753,19 +2753,25 @@ void make_proxy(Scene *scene) /* ******************** make parent operator *********************** */ -#define PAR_OBJECT 0 -#define PAR_ARMATURE 1 -#define PAR_BONE 2 -#define PAR_CURVE 3 -#define PAR_FOLLOW 4 -#define PAR_PATH_CONST 5 -#define PAR_LATTICE 6 -#define PAR_VERTEX 7 -#define PAR_TRIA 8 +#define PAR_OBJECT 0 +#define PAR_ARMATURE 1 +#define PAR_ARMATURE_NAME 2 +#define PAR_ARMATURE_ENVELOPE 3 +#define PAR_ARMATURE_AUTO 4 +#define PAR_BONE 5 +#define PAR_CURVE 6 +#define PAR_FOLLOW 7 +#define PAR_PATH_CONST 8 +#define PAR_LATTICE 9 +#define PAR_VERTEX 10 +#define PAR_TRIA 11 static EnumPropertyItem prop_make_parent_types[] = { {PAR_OBJECT, "OBJECT", 0, "Object", ""}, {PAR_ARMATURE, "ARMATURE", 0, "Armature Deform", ""}, + {PAR_ARMATURE_NAME, "ARMATURE_NAME", 0, " With Empty Groups", ""}, + {PAR_ARMATURE_AUTO, "ARMATURE_AUTO", 0, " With Automatic Weights", ""}, + {PAR_ARMATURE_ENVELOPE, "ARMATURE_ENVELOPE", 0, " With Envelope Weights", ""}, {PAR_BONE, "BONE", 0, "Bone", ""}, {PAR_CURVE, "CURVE", 0, "Curve Deform", ""}, {PAR_FOLLOW, "FOLLOW", 0, "Follow Path", ""}, @@ -2809,6 +2815,7 @@ static int parent_set_exec(bContext *C, wmOperator *op) Object *par= CTX_data_active_object(C); bPoseChannel *pchan= NULL; int partype= RNA_enum_get(op->ptr, "type"); + int pararm= ELEM4(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO); par->recalc |= OB_RECALC_OB; @@ -2880,24 +2887,20 @@ static int parent_set_exec(bContext *C, wmOperator *op) ob->loc[0] = vec[0]; ob->loc[1] = vec[1]; } - else if(partype==PAR_ARMATURE && ob->type==OB_MESH && par->type == OB_ARMATURE) { + else if(pararm && ob->type==OB_MESH && par->type == OB_ARMATURE) { + if(partype == PAR_ARMATURE_NAME) + create_vgroups_from_armature(scene, ob, par, ARM_GROUPS_NAME); + else if(partype == PAR_ARMATURE_ENVELOPE) + create_vgroups_from_armature(scene, ob, par, ARM_GROUPS_ENVELOPE); + else if(partype == PAR_ARMATURE_AUTO) + create_vgroups_from_armature(scene, ob, par, ARM_GROUPS_AUTO); - if(1) { - /* Prompt the user as to whether he wants to - * add some vertex groups based on the bones - * in the parent armature. - */ - create_vgroups_from_armature(scene, ob, par); - - /* get corrected inverse */ - ob->partype= PAROBJECT; - what_does_parent(scene, ob, &workob); - - ob->partype= PARSKEL; - } - else - what_does_parent(scene, ob, &workob); + /* get corrected inverse */ + ob->partype= PAROBJECT; + what_does_parent(scene, ob, &workob); + ob->partype= PARSKEL; + Mat4Invert(ob->parentinv, workob.obmat); } else { @@ -2908,7 +2911,7 @@ static int parent_set_exec(bContext *C, wmOperator *op) ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA; - if( ELEM3(partype, PAR_CURVE, PAR_ARMATURE, PAR_LATTICE) ) + if( ELEM(partype, PAR_CURVE, PAR_LATTICE) || pararm ) ob->partype= PARSKEL; /* note, dna define, not operator property */ else ob->partype= PAROBJECT; /* note, dna define, not operator property */ @@ -2936,6 +2939,9 @@ static int parent_set_invoke(bContext *C, wmOperator *op, wmEvent *event) /* ob becomes parent, make the associated menus */ if(ob->type==OB_ARMATURE) { uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE_NAME); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE_ENVELOPE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE_AUTO); uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_BONE); } else if(ob->type==OB_CURVE) { diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 09af626da4a..32f09f489a6 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -210,7 +210,6 @@ int ED_operator_object_active(bContext *C) int ED_operator_editmesh(bContext *C) { Object *obedit= CTX_data_edit_object(C); - printf("em %p %d\n", obedit, (obedit)? obedit->type == OB_MESH: -1); if(obedit && obedit->type==OB_MESH) return NULL != ((Mesh *)obedit->data)->edit_mesh; return 0; diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 1ebab105086..3a3f5bd83ee 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -457,6 +457,11 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts) } } + /* always try to use the tab that was explicitly + * set to the user, so that once that context comes + * back, the tab is activated again */ + sbuts->mainb= sbuts->mainbuser; + /* in case something becomes invalid, change */ if((flag & (1 << sbuts->mainb)) == 0) { if(flag & BCONTEXT_OBJECT) { diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 0f6ef6fe570..b5af1ab598c 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -81,6 +81,8 @@ static void do_buttons_buttons(bContext *C, void *arg, int event) sbuts->preview= 1; break; } + + sbuts->mainbuser= sbuts->mainb; } void buttons_header_buttons(const bContext *C, ARegion *ar) diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 8284744d519..78392fceace 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -70,7 +70,6 @@ static SpaceLink *buttons_new(const bContext *C) sbuts= MEM_callocN(sizeof(SpaceButs), "initbuts"); sbuts->spacetype= SPACE_BUTS; - sbuts->scaflag= BUTS_SENS_LINK|BUTS_SENS_ACT|BUTS_CONT_ACT|BUTS_ACT_ACT|BUTS_ACT_LINK; sbuts->align= BUT_AUTO; /* header */ diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index e3b8ac10481..f27dfcb4897 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1864,7 +1864,7 @@ static int tree_element_active_texture(Scene *scene, SpaceOops *soops, TreeEleme if(set) { if(sbuts) { // XXX sbuts->tabo= TAB_SHADING_TEX; // hack from header_buttonswin.c - sbuts->texfrom= 1; + // XXX sbuts->texfrom= 1; } // XXX extern_set_butspace(F6KEY, 0); // force shading buttons texture wrld->texact= te->index; @@ -1878,7 +1878,7 @@ static int tree_element_active_texture(Scene *scene, SpaceOops *soops, TreeEleme if(set) { if(sbuts) { // XXX sbuts->tabo= TAB_SHADING_TEX; // hack from header_buttonswin.c - sbuts->texfrom= 2; + // XXX sbuts->texfrom= 2; } // XXX extern_set_butspace(F6KEY, 0); // force shading buttons texture la->texact= te->index; @@ -1894,7 +1894,7 @@ static int tree_element_active_texture(Scene *scene, SpaceOops *soops, TreeEleme if(set) { if(sbuts) { //sbuts->tabo= TAB_SHADING_TEX; // hack from header_buttonswin.c - sbuts->texfrom= 0; + // XXX sbuts->texfrom= 0; } // XXX extern_set_butspace(F6KEY, 0); // force shading buttons texture ma->texact= (char)te->index; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 4760fd00bf2..3db97112090 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -94,7 +94,7 @@ typedef struct SpaceIpo { float blockscale; short blockhandler[8]; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ struct bDopeSheet *ads; /* settings for filtering animation data (NOTE: we use a pointer due to code-linking issues) */ @@ -116,24 +116,12 @@ typedef struct SpaceButs { struct RenderInfo *ri; - short cursens, curact; - short align, preview; /* align for panels, preview is signal to refresh */ - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ - short mainb, menunr; /* texnr and menunr have to remain shorts */ - short pin, mainbo; - void *lockpoin; - - short texnr; - char texfrom, showgroup; - - short modeltype; - short scriptblock; - short scaflag; - short re_align; - - short oldkeypress; /* for keeping track of the sub tab key cycling */ - char flag, texact; + short mainb, mainbo, mainbuser; /* context tabs */ + short re_align, align; /* align for panels */ + short preview; /* preview is signal to refresh */ + char flag, pad[3]; void *path; /* runtime */ int pathflag, dataicon; /* runtime */ @@ -148,7 +136,7 @@ typedef struct SpaceSeq { short blockhandler[8]; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ float xof, yof; /* offset for drawing the image preview */ short mainb; @@ -222,7 +210,7 @@ typedef struct SpaceOops { short blockhandler[8]; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ ListBase tree; struct TreeStore *treestore; @@ -277,7 +265,7 @@ typedef struct SpaceNla { int pad; struct bDopeSheet *ads; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ } SpaceNla; typedef struct SpaceText { @@ -349,7 +337,7 @@ typedef struct SpaceTime { int spacetype; float blockscale; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ int flag, redraws; @@ -363,7 +351,7 @@ typedef struct SpaceNode { short blockhandler[8]; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ struct ID *id, *from; /* context, no need to save in file? well... pinning... */ short flag, menunr; /* menunr: browse id block in header */ @@ -412,7 +400,7 @@ typedef struct SpaceImaSel { short blockhandler[8]; - View2D v2d; /* depricated, copied to region */ + View2D v2d; /* deprecated, copied to region */ struct FileList *files; diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 243551b527e..a1e98ae8a17 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -85,6 +85,11 @@ typedef enum PropertyFlag { * for pointers and collections. */ PROP_EDITABLE = 1, + /* this property is editable even if it is lib linked, + * meaning it will get lost on reload, but it's useful + * for editing. */ + PROP_LIB_EXCEPTION = 65536, + /* animateable means the property can be driven by some * other input, be it animation curves, expressions, .. * properties are animateable by default except for pointers diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index d9d4852a72c..0a4cc2a023e 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -752,7 +752,7 @@ int RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop) id= ptr->id.data; - return (flag & PROP_EDITABLE) && (!id || !id->lib); + return (flag & PROP_EDITABLE) && (!id || !id->lib || (flag & PROP_LIB_EXCEPTION)); } int RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop) diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index d77517f420d..cf20e92b289 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -157,6 +157,19 @@ static void rna_EditBone_name_set(PointerRNA *ptr, const char *value) ED_armature_bone_rename(arm, oldname, newname); } +static void rna_Bone_name_set(PointerRNA *ptr, const char *value) +{ + bArmature *arm= (bArmature*)ptr->id.data; + Bone *bone= (Bone*)ptr->data; + char oldname[32], newname[32]; + + /* need to be on the stack */ + BLI_strncpy(newname, value, 32); + BLI_strncpy(oldname, bone->name, 32); + + ED_armature_bone_rename(arm, oldname, newname); +} + static void rna_EditBone_layer_get(PointerRNA *ptr, int values[16]) { EditBone *data= (EditBone*)(ptr->data); @@ -320,6 +333,7 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); if(editbone) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_EditBone_name_set"); + else RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Bone_name_set"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* flags */ @@ -573,6 +587,7 @@ void rna_def_armature(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Visible Layers", "Armature layer visibility."); RNA_def_property_boolean_funcs(prop, NULL, "rna_Armature_layer_set"); RNA_def_property_update(prop, NC_OBJECT|ND_POSE, NULL); + RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); /* layer protection */ prop= RNA_def_property(srna, "layer_protection", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9e3f6948b1c..86e23c5bc8e 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1116,7 +1116,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna) #endif static EnumPropertyItem engine_items[] = { - {0, "BLENDER", 0, "Blender", ""}, + {0, "BLENDER_RENDER", 0, "Blender Render", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "SceneRenderData", NULL); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index bf475d49048..2afa1e6102b 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -242,17 +242,9 @@ StructRNA *rna_SpaceButtonsWindow_pin_id_typef(PointerRNA *ptr) void rna_SpaceButtonsWindow_align_set(PointerRNA *ptr, int value) { SpaceButs *sbuts= (SpaceButs*)(ptr->data); - bScreen *sc= (bScreen*)(ptr->id.data); - ScrArea *sa; sbuts->align= value; sbuts->re_align= 1; - -#if 0 // XXX -bad level call? - for(sa=sc->areabase.first; sa; sa=sa->next) - if(BLI_findindex(&sa->spacedata, sbuts) != -1) - ED_area_tag_redraw(sa); -#endif } /* Space Console */ @@ -321,8 +313,8 @@ static void rna_def_space_image_uv(BlenderRNA *brna) static EnumPropertyItem sticky_mode_items[] = { {SI_STICKY_DISABLE, "DISABLED", ICON_STICKY_UVS_DISABLE, "Disabled", "Sticky vertex selection disabled."}, - {SI_STICKY_LOC, "SHARED_LOCATION", ICON_STICKY_UVS_LOC, "SHARED_LOCATION", "Select UVs that are at the same location and share a mesh vertex."}, - {SI_STICKY_VERTEX, "SHARED_VERTEX", ICON_STICKY_UVS_VERT, "SHARED_VERTEX", "Select UVs that share mesh vertex, irrespective if they are in the same location."}, + {SI_STICKY_LOC, "SHARED_LOCATION", ICON_STICKY_UVS_LOC, "Shared Location", "Select UVs that are at the same location and share a mesh vertex."}, + {SI_STICKY_VERTEX, "SHARED_VERTEX", ICON_STICKY_UVS_VERT, "Shared Vertex", "Select UVs that share mesh vertex, irrespective if they are in the same location."}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem dt_uv_items[] = { @@ -685,17 +677,17 @@ static void rna_def_space_buttons(BlenderRNA *brna) RNA_def_struct_sdna(srna, "SpaceButs"); RNA_def_struct_ui_text(srna, "Buttons Space", "Buttons Window space data"); - prop= RNA_def_property(srna, "buttons_context", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "context", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "mainb"); RNA_def_property_enum_items(prop, buttons_context_items); - RNA_def_property_ui_text(prop, "Buttons Context", "The type of active data to display and edit in the buttons window"); + RNA_def_property_ui_text(prop, "Context", "Type of active data to display and edit."); RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "align"); RNA_def_property_enum_items(prop, align_items); RNA_def_property_enum_funcs(prop, NULL, "rna_SpaceButtonsWindow_align_set", NULL); - RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels within the buttons window"); + RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels."); RNA_def_property_update(prop, NC_WINDOW, NULL); /* pinned data */ From 431a388ae72bc21eff47ed616913e30920a2ce47 Mon Sep 17 00:00:00 2001 From: Kent Mein Date: Fri, 24 Jul 2009 17:17:04 +0000 Subject: [PATCH 360/512] =?UTF-8?q?This=20is=20patch#=2019017=2016bit=20SG?= =?UTF-8?q?I=20image=20loading=20submitted=20by=20Albertas=20Vy=C5=A1niaus?= =?UTF-8?q?kas=20(thezbyg)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improves SGI image support. Kent --- source/blender/imbuf/intern/iris.c | 324 ++++++++++++++++++++++------- 1 file changed, 247 insertions(+), 77 deletions(-) diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c index aa3015812fc..eba148cb8a5 100644 --- a/source/blender/imbuf/intern/iris.c +++ b/source/blender/imbuf/intern/iris.c @@ -104,7 +104,9 @@ static int writetab(FILE *outf, unsigned int *tab, int len); static void readtab(FILE *inf, unsigned int *tab, int len); static void expandrow(unsigned char *optr, unsigned char *iptr, int z); +static void expandrow2(float *optr, unsigned char *iptr, int z); static void interleaverow(unsigned char *lptr, unsigned char *cptr, int z, int n); +static void interleaverow2(float *lptr, unsigned char *cptr, int z, int n); static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cnt); static void lumrow(unsigned char *rgbptr, unsigned char *lumptr, int n); @@ -233,6 +235,7 @@ static void test_endian_zbuf(struct ImBuf *ibuf) struct ImBuf *imb_loadiris(unsigned char *mem, int flags) { unsigned int *base, *lptr = NULL; + float *fbase, *fptr = NULL; unsigned int *zbase, *zptr; unsigned char *rledat; unsigned int *starttab, *lengthtab; @@ -257,8 +260,8 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) rle = ISRLE(image.type); bpp = BPP(image.type); - if(bpp != 1 ) { - fprintf(stderr,"longimagedata: image must have 1 byte per pix chan\n"); + if(bpp != 1 && bpp != 2) { + fprintf(stderr,"longimagedata: image must have 1 or 2 byte per pix chan\n"); return(0); } @@ -273,6 +276,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) } if (rle) { + tablen = ysize*zsize*sizeof(int); starttab = (unsigned int *)malloc(tablen); lengthtab = (unsigned int *)malloc(tablen); @@ -280,7 +284,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) readtab(inf,starttab,tablen); readtab(inf,lengthtab,tablen); - + /* check data order */ cur = 0; badorder = 0; @@ -295,99 +299,200 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) if(badorder) break; } - - ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect, 0); - if (ibuf->depth > 32) ibuf->depth = 32; - base = ibuf->rect; - zbase = (unsigned int *)ibuf->zbuf; - - if (badorder) { - for(z=0; zdepth > 32) ibuf->depth = 32; + base = ibuf->rect; + zbase = (unsigned int *)ibuf->zbuf; + + if (badorder) { + for(z=0; zrect_float; + + if (badorder) { + for(z=0; zdepth > 32) ibuf->depth = 32; + free(lengthtab); - base = ibuf->rect; - zbase = (unsigned int *)ibuf->zbuf; - - file_offset = 512; - rledat = file_data + file_offset; - - for(z = 0; z < zsize; z++) { + } else { + if (bpp == 1) { - if(z<4) lptr = base; - else if(z<8) lptr= zbase; - - for(y = 0; y < ysize; y++) { + ibuf = IMB_allocImBuf(xsize, ysize, 8 * zsize, IB_rect, 0); + if (ibuf->depth > 32) ibuf->depth = 32; - interleaverow((uchar *)lptr, rledat, 3-z, xsize); - rledat += xsize; + base = ibuf->rect; + zbase = (unsigned int *)ibuf->zbuf; + + file_offset = 512; + rledat = file_data + file_offset; + + for(z = 0; z < zsize; z++) { - lptr += xsize; + if(z<4) lptr = base; + else if(z<8) lptr= zbase; + + for(y = 0; y < ysize; y++) { + + interleaverow((uchar *)lptr, rledat, 3-z, xsize); + rledat += xsize; + + lptr += xsize; + } + } + + } else { /* bpp == 2 */ + + ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat, 0); + + fbase = ibuf->rect_float; + + file_offset = 512; + rledat = file_data + file_offset; + + for(z = 0; z < zsize; z++) { + + fptr = fbase; + + for(y = 0; y < ysize; y++) { + + interleaverow2(fptr, rledat, 3-z, xsize); + rledat += xsize * 2; + + fptr += xsize * 4; + } + } + + } + } + + + if (bpp == 1) { + + if (image.zsize == 1){ + rect = (uchar *) ibuf->rect; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + rect[0] = 255; + rect[1] = rect[2] = rect[3]; + rect += 4; + } + } else if (image.zsize == 2){ + /* grayscale with alpha */ + rect = (uchar *) ibuf->rect; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + rect[0] = rect[2]; + rect[1] = rect[2] = rect[3]; + rect += 4; + } + } else if (image.zsize == 3){ + /* add alpha */ + rect = (uchar *) ibuf->rect; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + rect[0] = 255; + rect += 4; } } + + } else { /* bpp == 2 */ + + if (image.zsize == 1){ + fbase = ibuf->rect_float; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + fbase[0] = 1; + fbase[1] = rect[2] = rect[3]; + fbase += 4; + } + } else if (image.zsize == 2){ + /* grayscale with alpha */ + fbase = ibuf->rect_float; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + fbase[0] = fbase[2]; + fbase[1] = fbase[2] = fbase[3]; + fbase += 4; + } + } else if (image.zsize == 3){ + /* add alpha */ + fbase = ibuf->rect_float; + for (x = ibuf->x * ibuf->y; x > 0; x--) { + fbase[0] = 1; + fbase += 4; + } + } + + if (flags & IB_rect) { + IMB_rect_from_float(ibuf); + } + } - - if (image.zsize == 1){ - rect = (uchar *) ibuf->rect; - for (x = ibuf->x * ibuf->y; x > 0; x--) { - rect[0] = 255; - rect[1] = rect[2] = rect[3]; - rect += 4; - } - } else if (image.zsize == 2){ - /* grayscale with alpha */ - rect = (uchar *) ibuf->rect; - for (x = ibuf->x * ibuf->y; x > 0; x--) { - rect[0] = rect[2]; - rect[1] = rect[2] = rect[3]; - rect += 4; - } - } else if (image.zsize == 3){ - /* add alpha */ - rect = (uchar *) ibuf->rect; - for (x = ibuf->x * ibuf->y; x > 0; x--) { - rect[0] = 255; - rect += 4; - } - } - + ibuf->ftype = IMAGIC; if (flags & IB_ttob) IMB_flipy(ibuf); @@ -412,6 +517,71 @@ static void interleaverow(unsigned char *lptr, unsigned char *cptr, int z, int n } } +static void interleaverow2(float *lptr, unsigned char *cptr, int z, int n) +{ + lptr += z; + while(n--) { + *lptr = ((cptr[0]<<8) | (cptr[1]<<0)) / (float)0xFFFF; + cptr += 2; + lptr += 4; + } +} + +static void expandrow2(float *optr, unsigned char *iptr, int z) +{ + unsigned short pixel, count; + float pixel_f; + + optr += z; + while(1) { + pixel = (iptr[0]<<8) | (iptr[1]<<0); + iptr += 2; + + if ( !(count = (pixel & 0x7f)) ) + return; + if(pixel & 0x80) { + while(count>=8) { + optr[0*4] = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF; + optr[1*4] = ((iptr[2]<<8) | (iptr[3]<<0))/(float)0xFFFF; + optr[2*4] = ((iptr[4]<<8) | (iptr[5]<<0))/(float)0xFFFF; + optr[3*4] = ((iptr[6]<<8) | (iptr[7]<<0))/(float)0xFFFF; + optr[4*4] = ((iptr[8]<<8) | (iptr[9]<<0))/(float)0xFFFF; + optr[5*4] = ((iptr[10]<<8) | (iptr[11]<<0))/(float)0xFFFF; + optr[6*4] = ((iptr[12]<<8) | (iptr[13]<<0))/(float)0xFFFF; + optr[7*4] = ((iptr[14]<<8) | (iptr[15]<<0))/(float)0xFFFF; + optr += 8*4; + iptr += 8*2; + count -= 8; + } + while(count--) { + *optr = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF; + iptr+=2; + optr+=4; + } + } else { + pixel_f = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF; + iptr += 2; + + while(count>=8) { + optr[0*4] = pixel_f; + optr[1*4] = pixel_f; + optr[2*4] = pixel_f; + optr[3*4] = pixel_f; + optr[4*4] = pixel_f; + optr[5*4] = pixel_f; + optr[6*4] = pixel_f; + optr[7*4] = pixel_f; + optr += 8*4; + count -= 8; + } + while(count--) { + *optr = pixel_f; + optr+=4; + } + } + } +} + static void expandrow(unsigned char *optr, unsigned char *iptr, int z) { unsigned char pixel, count; From 9325f35d4c01fc6950a4d14badc8f8e5adbb276f Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Fri, 24 Jul 2009 19:36:08 +0000 Subject: [PATCH 361/512] ParticleSettings animdata wasn't shown in graph editor, dope sheet and nla editor. Tiny bug fix too: Had forgotten particle child length setting from do_versions so old files with child hair showed all hair with zero length. --- source/blender/blenloader/intern/readfile.c | 1 + .../blender/editors/animation/anim_channels.c | 40 ++++++ .../blender/editors/animation/anim_filter.c | 125 +++++++++++++++++- source/blender/editors/include/ED_anim_api.h | 4 + .../editors/space_action/action_draw.c | 39 +++++- .../editors/space_action/action_header.c | 1 + .../blender/editors/space_graph/graph_draw.c | 38 +++++- .../editors/space_graph/graph_header.c | 1 + .../blender/editors/space_nla/nla_channels.c | 19 ++- source/blender/editors/space_nla/nla_draw.c | 42 +++++- source/blender/editors/space_nla/nla_header.c | 1 + source/blender/makesdna/DNA_action_types.h | 3 +- source/blender/makesdna/DNA_object_types.h | 2 + source/blender/makesdna/DNA_particle_types.h | 3 +- 14 files changed, 304 insertions(+), 15 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 9f4a2456567..afab6fe608f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9171,6 +9171,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } part->path_end = 1.0f; + part->clength = 1.0f; } /* set old pointcaches to have disk cache flag */ for(ob = main->object.first; ob; ob= ob->id.next) { diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 6cb00f9285b..6b31fbe25a9 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -48,6 +48,7 @@ #include "DNA_camera_types.h" #include "DNA_curve_types.h" #include "DNA_object_types.h" +#include "DNA_particle_types.h" #include "DNA_screen_types.h" #include "DNA_scene_types.h" #include "DNA_space_types.h" @@ -981,6 +982,20 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, } } break; + case ANIMTYPE_FILLPARTD: + { + Object *ob= (Object *)ale->data; + + // XXX - settings should really be moved out of ob->nlaflag + if ((onlysel == 0) || (ob->flag & SELECT)) { + if (setting == ACHANNEL_SETTING_EXPAND) { + if (mode == ACHANNEL_SETFLAG_TOGGLE) ob->nlaflag ^= OB_ADS_SHOWPARTS; + else if (mode == ACHANNEL_SETFLAG_ADD) ob->nlaflag |= OB_ADS_SHOWPARTS; + else ob->nlaflag &= ~OB_ADS_SHOWPARTS; + } + } + } + break; case ANIMTYPE_DSMAT: { @@ -1048,6 +1063,17 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, } } break; + case ANIMTYPE_DSPART: + { + ParticleSettings *part= (ParticleSettings*)ale->data; + + if (ASUBCHANNEL_SEL_OK(ale)) { + if (setting == ACHANNEL_SETTING_EXPAND) { + ACHANNEL_SET_FLAG(part, mode, PART_DS_EXPAND); + } + } + } + break; case ANIMTYPE_GROUP: { @@ -1605,6 +1631,13 @@ static int mouse_anim_channels (bAnimContext *ac, float x, int channel_index, sh notifierFlags |= ND_ANIMCHAN_EDIT; } break; + case ANIMTYPE_FILLPARTD: + { + Object *ob= (Object *)ale->data; + ob->nlaflag ^= OB_ADS_SHOWPARTS; // XXX + notifierFlags |= ND_ANIMCHAN_EDIT; + } + break; case ANIMTYPE_DSMAT: { @@ -1648,6 +1681,13 @@ static int mouse_anim_channels (bAnimContext *ac, float x, int channel_index, sh notifierFlags |= ND_ANIMCHAN_EDIT; } break; + case ANIMTYPE_DSPART: + { + ParticleSettings *part= (ParticleSettings *)ale->data; + part->flag ^= PART_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; + } + break; case ANIMTYPE_GROUP: { diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index ecc8012f3ec..5676fee5bac 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -62,6 +62,7 @@ #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_object_types.h" +#include "DNA_particle_types.h" #include "DNA_space_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -480,6 +481,16 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_MAT_OBJC(ob); + ale->key_data= NULL; + ale->datatype= ALE_NONE; + } + break; + case ANIMTYPE_FILLPARTD: + { + Object *ob= (Object *)data; + + ale->flag= FILTER_PART_OBJC(ob); + ale->key_data= NULL; ale->datatype= ALE_NONE; } @@ -547,6 +558,17 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_WOR_SCED(wo); + ale->key_data= (adt) ? adt->action : NULL; + ale->datatype= ALE_ACT; + } + break; + case ANIMTYPE_DSPART: + { + ParticleSettings *part= (ParticleSettings*)ale->data; + AnimData *adt= part->adt; + + ale->flag= FILTER_PART_OBJD(part); + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } @@ -1008,6 +1030,60 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, return items; } +static int animdata_filter_dopesheet_particles (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) +{ + bAnimListElem *ale=NULL; + Object *ob= base->object; + ParticleSystem *psys = ob->particlesystem.first; + int items= 0, first = 1; + + for(; psys; psys=psys->next) { + short ok = 0; + + if(ELEM(NULL, psys->part, psys->part->adt)) + continue; + + ANIMDATA_FILTER_CASES(psys->part, + { /* AnimData blocks - do nothing... */ }, + ok=1;, + ok=1;, + ok=1;) + if (ok == 0) continue; + + /* include particles-expand widget? */ + if (first && (filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { + ale= make_new_animlistelem(ob, ANIMTYPE_FILLPARTD, base, ANIMTYPE_OBJECT, (ID *)ob); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + first = 0; + } + + /* add particle settings? */ + if (FILTER_PART_OBJC(ob) || (filter_mode & ANIMFILTER_CURVESONLY)) { + if ((filter_mode & ANIMFILTER_CHANNELS)){ + ale = make_new_animlistelem(psys->part, ANIMTYPE_DSPART, base, ANIMTYPE_OBJECT, (ID *)psys->part); + if (ale) { + BLI_addtail(anim_data, ale); + items++; + } + } + + if (FILTER_PART_OBJD(psys->part) || (filter_mode & ANIMFILTER_CURVESONLY)) { + ANIMDATA_FILTER_CASES(psys->part, + { /* AnimData blocks - do nothing... */ }, + items += animdata_filter_nla(anim_data, psys->part->adt, filter_mode, psys->part, ANIMTYPE_DSPART, (ID *)psys->part);, + items += animdata_filter_fcurves(anim_data, psys->part->adt->drivers.first, NULL, psys->part, ANIMTYPE_DSPART, filter_mode, (ID *)psys->part);, + items += animdata_filter_action(anim_data, psys->part->adt->action, filter_mode, psys->part, ANIMTYPE_DSPART, (ID *)psys->part);) + } + } + } + + /* return the number of items added to the list */ + return items; +} + static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) { bAnimListElem *ale=NULL; @@ -1229,6 +1305,10 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B } if (obdata_ok) items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); + + /* particles */ + if(ob->particlesystem.first && !(ads->filterflag & ADS_FILTER_NOPART)) + items += animdata_filter_dopesheet_particles(anim_data, ads, base, filter_mode); /* return the number of items added to the list */ return items; @@ -1406,7 +1486,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int if (base->object) { Object *ob= base->object; Key *key= ob_get_key(ob); - short actOk=1, keyOk=1, dataOk=1, matOk=1; + short actOk=1, keyOk=1, dataOk=1, matOk=1, partOk=1; /* firstly, check if object can be included, by the following fanimors: * - if only visible, must check for layer and also viewport visibility @@ -1548,9 +1628,35 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int dataOk= 0; break; } + + /* particles */ + partOk = 0; + if(!(ads->filterflag & ADS_FILTER_NOPART) && ob->particlesystem.first) { + ParticleSystem *psys = ob->particlesystem.first; + for(; psys; psys=psys->next) { + if (psys->part) { + /* if particlesettings has relevant animation data, break */ + ANIMDATA_FILTER_CASES(psys->part, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(psys->part); + partOk=0; + }, + partOk= 1;, + partOk= 1;, + partOk= 1;) + } + + if (partOk) + break; + } + } + /* check if all bad (i.e. nothing to show) */ - if (!actOk && !keyOk && !dataOk && !matOk) + if (!actOk && !keyOk && !dataOk && !matOk && !partOk) continue; } else { @@ -1599,9 +1705,22 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int dataOk= 0; break; } + + /* particles */ + partOk = 0; + if(ob->particlesystem.first) { + ParticleSystem *psys = ob->particlesystem.first; + for(; psys; psys=psys->next) { + if(psys->part && ANIMDATA_HAS_KEYS(psys->part)) { + partOk = 1; + break; + } + + } + } /* check if all bad (i.e. nothing to show) */ - if (!actOk && !keyOk && !dataOk && !matOk) + if (!actOk && !keyOk && !dataOk && !matOk && !partOk) continue; } diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 7cfc788177e..854b5390e8c 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -118,6 +118,7 @@ typedef enum eAnim_ChannelType { ANIMTYPE_FILLACTD, ANIMTYPE_FILLDRIVERS, ANIMTYPE_FILLMATD, + ANIMTYPE_FILLPARTD, ANIMTYPE_DSMAT, ANIMTYPE_DSLAM, @@ -125,6 +126,7 @@ typedef enum eAnim_ChannelType { ANIMTYPE_DSCUR, ANIMTYPE_DSSKEY, ANIMTYPE_DSWOR, + ANIMTYPE_DSPART, ANIMTYPE_SHAPEKEY, // XXX probably can become depreceated??? @@ -181,12 +183,14 @@ typedef enum eAnimFilter_Flags { #define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED)==0) /* 'Sub-object' channels (flags stored in Object block) */ #define FILTER_MAT_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWMATS)) +#define FILTER_PART_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWPARTS)) /* 'Sub-object' channels (flags stored in Data block) */ #define FILTER_SKE_OBJD(key) ((key->flag & KEYBLOCK_DS_EXPAND)) #define FILTER_MAT_OBJD(ma) ((ma->flag & MA_DS_EXPAND)) #define FILTER_LAM_OBJD(la) ((la->flag & LA_DS_EXPAND)) #define FILTER_CAM_OBJD(ca) ((ca->flag & CAM_DS_EXPAND)) #define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND)) +#define FILTER_PART_OBJD(part) ((part->flag & PART_DS_EXPAND)) /* 'Sub-object/Action' channels (flags stored in Action) */ #define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED)) #define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED)==0) diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 2fd5b9bbd93..216ff3993dd 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -52,6 +52,7 @@ #include "DNA_camera_types.h" #include "DNA_curve_types.h" #include "DNA_object_types.h" +#include "DNA_particle_types.h" #include "DNA_screen_types.h" #include "DNA_scene_types.h" #include "DNA_space_types.h" @@ -519,6 +520,22 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) strcpy(name, "Materials"); } break; + case ANIMTYPE_FILLPARTD: /* object particles (dopesheet) expand widget */ + { + Object *ob = (Object *)ale->data; + + group = 4; + indent = 1; + special = ICON_PARTICLE_DATA; + + if (FILTER_PART_OBJC(ob)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, "Particles"); + } + break; case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */ @@ -619,6 +636,23 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) strcpy(name, wo->id.name+2); } break; + case ANIMTYPE_DSPART: /* particle (dopesheet) expand widget */ + { + ParticleSettings *part= (ParticleSettings*)ale->data; + + group = 0; + indent = 0; + special = ICON_PARTICLE_DATA; + offset = 21; + + if (FILTER_PART_OBJD(part)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, part->id.name+2); + } + break; case ANIMTYPE_GROUP: /* action group */ @@ -671,8 +705,8 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) grp= fcu->grp; if (ale->id) { - /* special exception for materials */ - if (GS(ale->id->name) == ID_MA) { + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) { offset= 21; indent= 1; } @@ -1083,6 +1117,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) case ANIMTYPE_FILLACTD: case ANIMTYPE_FILLMATD: + case ANIMTYPE_FILLPARTD: case ANIMTYPE_DSSKEY: case ANIMTYPE_DSWOR: { diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index f5c85d4d983..7820b231212 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -381,6 +381,7 @@ void action_header_buttons(const bContext *C, ARegion *ar) uiDefIconButBitI(block, TOGN, ADS_FILTER_NOLAM, B_REDR, ICON_LAMP_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Display Lamps"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Display Cameras"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Display Curves"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOPART, B_REDR, ICON_PARTICLE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Display Particles"); uiBlockEndAlign(block); xco += 30; } diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index f8f613223db..67a93b2e786 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -52,6 +52,7 @@ #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_object_types.h" +#include "DNA_particle_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" @@ -1038,6 +1039,22 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) strcpy(name, "Materials"); } break; + case ANIMTYPE_FILLPARTD: /* object particles (dopesheet) expand widget */ + { + Object *ob = (Object *)ale->data; + + group = 4; + indent = 1; + special = ICON_PARTICLE_DATA; + + if (FILTER_PART_OBJC(ob)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, "Particles"); + } + break; case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */ @@ -1138,6 +1155,23 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) strcpy(name, wo->id.name+2); } break; + case ANIMTYPE_DSPART: /* particle (dopesheet) expand widget */ + { + ParticleSettings *part= (ParticleSettings*)ale->data; + + group = 0; + indent = 0; + special = ICON_PARTICLE_DATA; + offset = 21; + + if (FILTER_PART_OBJD(part)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, part->id.name+2); + } + break; case ANIMTYPE_GROUP: /* action group */ @@ -1196,8 +1230,8 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar) grp= fcu->grp; if (ale->id) { - /* special exception for materials */ - if (GS(ale->id->name) == ID_MA) { + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) { offset= 21; indent= 1; } diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index eeede3ae95b..e4ce889a188 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -304,6 +304,7 @@ void graph_header_buttons(const bContext *C, ARegion *ar) uiDefIconButBitI(block, TOGN, ADS_FILTER_NOLAM, B_REDR, ICON_LAMP_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Lamps"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Cameras"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Curves"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOPART, B_REDR, ICON_PARTICLE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Particles"); uiBlockEndAlign(block); xco += 15; } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 1ab348eb28e..79c2c94719c 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -38,6 +38,7 @@ #include "DNA_camera_types.h" #include "DNA_curve_types.h" #include "DNA_object_types.h" +#include "DNA_particle_types.h" #include "DNA_screen_types.h" #include "DNA_scene_types.h" #include "DNA_space_types.h" @@ -185,6 +186,13 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho notifierFlags |= ND_ANIMCHAN_EDIT; } break; + case ANIMTYPE_FILLPARTD: + { + Object *ob= (Object *)ale->data; + ob->nlaflag ^= OB_ADS_SHOWPARTS; // XXX + notifierFlags |= ND_ANIMCHAN_EDIT; + } + break; case ANIMTYPE_DSMAT: { @@ -228,6 +236,13 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho notifierFlags |= ND_ANIMCHAN_EDIT; } break; + case ANIMTYPE_DSPART: + { + ParticleSettings *part= (ParticleSettings *)ale->data; + part->flag ^= PART_DS_EXPAND; + notifierFlags |= ND_ANIMCHAN_EDIT; + } + break; case ANIMTYPE_NLATRACK: { @@ -237,8 +252,8 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho /* offset for start of channel (on LHS of channel-list) */ if (ale->id) { - /* special exception for materials */ - if (GS(ale->id->name) == ID_MA) + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) offset= 21 + NLACHANNEL_BUTTON_WIDTH; else offset= 14; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 9aa71187334..6809c7928ac 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -46,6 +46,7 @@ #include "DNA_key_types.h" #include "DNA_lamp_types.h" #include "DNA_material_types.h" +#include "DNA_particle_types.h" #include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" #include "DNA_world_types.h" @@ -693,6 +694,22 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) strcpy(name, "Materials"); } break; + case ANIMTYPE_FILLPARTD: /* object particles (dopesheet) expand widget */ + { + Object *ob = (Object *)ale->data; + + group = 4; + indent = 1; + special = ICON_PARTICLE_DATA; + + if (FILTER_PART_OBJC(ob)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, "Particles"); + } + break; case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */ @@ -793,6 +810,23 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) strcpy(name, wo->id.name+2); } break; + case ANIMTYPE_DSPART: /* particle (dopesheet) expand widget */ + { + ParticleSettings *part= (ParticleSettings*)ale->data; + + group = 0; + indent = 0; + special = ICON_PARTICLE_DATA; + offset = 21; + + if (FILTER_PART_OBJD(part)) + expand = ICON_TRIA_DOWN; + else + expand = ICON_TRIA_RIGHT; + + strcpy(name, part->id.name+2); + } + break; case ANIMTYPE_NLATRACK: /* NLA Track */ { @@ -801,8 +835,8 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) indent= 0; if (ale->id) { - /* special exception for materials */ - if (GS(ale->id->name) == ID_MA) { + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) { offset= 21; indent= 1; } @@ -846,8 +880,8 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) group = 5; if (ale->id) { - /* special exception for materials */ - if (GS(ale->id->name) == ID_MA) { + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name),ID_MA,ID_PA)) { offset= 21; indent= 1; } diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index f159f440759..3f504441108 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -261,6 +261,7 @@ void nla_header_buttons(const bContext *C, ARegion *ar) uiDefIconButBitI(block, TOGN, ADS_FILTER_NOLAM, B_REDR, ICON_LAMP_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Lamps"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Cameras"); uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Curves"); + uiDefIconButBitI(block, TOGN, ADS_FILTER_NOPART, B_REDR, ICON_PARTICLE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(snla->ads->filterflag), 0, 0, 0, 0, "Display Particles"); uiBlockEndAlign(block); xco += 15; } diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 4eddebc5b67..255b48bc9db 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -310,12 +310,13 @@ typedef enum DOPESHEET_FILTERFLAG { ADS_FILTER_NOCUR = (1<<13), ADS_FILTER_NOWOR = (1<<14), ADS_FILTER_NOSCE = (1<<15), + ADS_FILTER_NOPART = (1<<16), /* NLA-specific filters */ ADS_FILTER_NLA_NOACT = (1<<20), /* if the AnimData block has no NLA data, don't include to just show Action-line */ /* combination filters (some only used at runtime) */ - ADS_FILTER_NOOBDATA = (ADS_FILTER_NOCAM|ADS_FILTER_NOMAT|ADS_FILTER_NOLAM|ADS_FILTER_NOCUR), + ADS_FILTER_NOOBDATA = (ADS_FILTER_NOCAM|ADS_FILTER_NOMAT|ADS_FILTER_NOLAM|ADS_FILTER_NOCUR|ADS_FILTER_NOPART), } DOPESHEET_FILTERFLAG; /* DopeSheet general flags */ diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index ec4cad5c3b4..ae9d775a74a 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -487,6 +487,8 @@ extern Object workob; #define OB_ADS_SHOWCONS (1<<12) /* object's material channels */ #define OB_ADS_SHOWMATS (1<<13) + /* object's marticle channels */ +#define OB_ADS_SHOWPARTS (1<<14) /* ob->protectflag */ #define OB_LOCK_LOCX 1 diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index 3d1dfff61cd..b71d390db5a 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -246,7 +246,8 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in #define PART_REACT_MULTIPLE 2 #define PART_LOOP 4 -//#define PART_LOOP_INSTANT 8 + /* for dopesheet */ +#define PART_DS_EXPAND 8 #define PART_HAIR_GEOMETRY 16 From 4f3ee918c15ebd842fb6e8225a06d78485d6d383 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 24 Jul 2009 21:01:41 +0000 Subject: [PATCH 362/512] 2.5 3DView Toolbar: * Some Code and tiny layout cleanup. --- release/ui/space_view3d_toolbar.py | 151 ++++++++++++++--------------- 1 file changed, 74 insertions(+), 77 deletions(-) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 6eb3886f408..e53b599ee83 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -17,23 +17,20 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Object:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("object.duplicate") col.itemO("object.delete") layout.itemL(text="Keyframes:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("anim.insert_keyframe_menu", text="Insert") col.itemO("anim.delete_keyframe_v3d", text="Remove") @@ -50,23 +47,23 @@ class VIEW3D_PT_tools_editmode_mesh(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Mesh:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("mesh.duplicate") col.itemO("mesh.delete") layout.itemL(text="Modeling:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("mesh.extrude") col.itemO("mesh.subdivide") col.itemO("mesh.spin") @@ -74,15 +71,13 @@ class VIEW3D_PT_tools_editmode_mesh(View3DPanel): layout.itemL(text="Shading:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("mesh.faces_shade_smooth", text="Smooth") col.itemO("mesh.faces_shade_flat", text="Flat") layout.itemL(text="UV Mapping:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("uv.mapping_menu", text="Unwrap") col.itemO("mesh.uvs_rotate") col.itemO("mesh.uvs_mirror") @@ -100,25 +95,25 @@ class VIEW3D_PT_tools_editmode_curve(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Curve:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("curve.duplicate") col.itemO("curve.delete") col.itemO("curve.cyclic_toggle") col.itemO("curve.switch_direction") layout.itemL(text="Modeling:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("curve.extrude") col.itemO("curve.subdivide") @@ -135,24 +130,25 @@ class VIEW3D_PT_tools_editmode_surface(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Curve:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("curve.duplicate") col.itemO("curve.delete") col.itemO("curve.cyclic_toggle") col.itemO("curve.switch_direction") layout.itemL(text="Modeling:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("curve.extrude") col.itemO("curve.subdivide") @@ -170,10 +166,13 @@ class VIEW3D_PT_tools_editmode_text(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("font.text_copy") - layout.row().itemO("font.text_paste") - layout.row().itemO("font.case_set") - layout.row().itemO("font.style_toggle") + col = layout.column(align=True) + col.itemO("font.text_copy", text="Copy") + col.itemO("font.text_paste", text="Paste") + + col = layout.column() + col.itemO("font.case_set") + col.itemO("font.style_toggle") # ********** default tools for editmode_armature **************** @@ -188,26 +187,24 @@ class VIEW3D_PT_tools_editmode_armature(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Bones:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("armature.bone_primitive_add", text="Add") col.itemO("armature.duplicate_selected", text="Duplicate") col.itemO("armature.delete", text="Delete") layout.itemL(text="Modeling:") - split = layout.split() - col = split.column(align=True) - col.itemO("armature.extrude") - - + layout.itemO("armature.extrude") + # ********** default tools for editmode_mball **************** class View3DPanel(bpy.types.Panel): @@ -221,9 +218,10 @@ class VIEW3D_PT_tools_editmode_mball(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") @@ -241,9 +239,10 @@ class VIEW3D_PT_tools_editmode_lattice(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") @@ -261,38 +260,40 @@ class VIEW3D_PT_tools_posemode(View3DPanel): def draw(self, context): layout = self.layout + layout.itemL(text="Transform:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("tfm.translate") col.itemO("tfm.rotate") col.itemO("tfm.resize", text="Scale") layout.itemL(text="Bones:") - split = layout.split() - col = split.column(align=True) + + col = layout.column(align=True) col.itemO("pose.hide", text="Hide") col.itemO("pose.reveal", text="Reveal") layout.itemL(text="Keyframes:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("anim.insert_keyframe_menu", text="Insert") col.itemO("anim.delete_keyframe_v3d", text="Remove") layout.itemL(text="Pose:") - split = layout.split() - col = split.column(align=True) + col = layout.column(align=True) col.itemO("pose.copy", text="Copy") col.itemO("pose.paste", text="Paste") - col.itemO("poselib.pose_add", text="Add to Library") - col.itemO("poselib.pose_remove", text="Remove From Library") + + layout.itemL(text="Library:") + + col = layout.column(align=True) + col.itemO("poselib.pose_add", text="Add") + col.itemO("poselib.pose_remove", text="Remove") # ********** default tools for paint modes **************** - class VIEW3D_PT_tools_brush(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" @@ -324,16 +325,20 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): layout.column().itemR(brush, "sculpt_tool", expand=True) split = layout.split() + col = split.column() row = col.row(align=True) row.itemR(brush, "size", slider=True) row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + if context.wpaint_object: col.itemR(context.tool_settings, "vertex_group_weight", text="Weight", slider=True) + col.itemR(brush, "strength", slider=True) row = col.row(align=True) row.itemR(brush, "falloff", slider=True) row.itemR(brush, "falloff_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + if context.vpaint_object: col.itemR(brush, "color", text="") if context.tpaint_object: @@ -354,7 +359,6 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): col.itemR(brush, "anchored") col.itemR(brush, "rake") - class VIEW3D_PT_tools_brush_curve(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" @@ -392,15 +396,13 @@ class VIEW3D_PT_sculpt_options(bpy.types.Panel): return context.sculpt_object def draw(self, context): + layout = self.layout sculpt = context.tool_settings.sculpt - split = self.layout.split() - - col = split.column() + col = layout.column() col.itemR(sculpt, "partial_redraw", text="Partial Refresh") col.itemR(sculpt, "show_brush") - split = self.layout.split() col = split.column() @@ -414,10 +416,7 @@ class VIEW3D_PT_sculpt_options(bpy.types.Panel): col.itemR(sculpt, "lock_x", text="X") col.itemR(sculpt, "lock_y", text="Y") col.itemR(sculpt, "lock_z", text="Z") - - - - + # ********** default tools for weightpaint **************** class View3DPanel(bpy.types.Panel): @@ -430,10 +429,10 @@ class VIEW3D_PT_weightpaint_options(View3DPanel): __label__ = "Options" def draw(self, context): - wpaint = context.tool_settings.wpaint layout = self.layout - split = self.layout.split() - col = split.column() + wpaint = context.tool_settings.wpaint + + col = layout.column() col.itemL(text="Blend:") col.itemR(wpaint, "mode", text="") col.itemR(wpaint, "all_faces") @@ -447,8 +446,6 @@ class VIEW3D_PT_weightpaint_options(View3DPanel): # col.itemL(text="Multiply:") # col.itemR(wpaint, "mul", text="") - - # ********** default tools for vertexpaint **************** @@ -462,10 +459,10 @@ class VIEW3D_PT_vertexpaint_options(View3DPanel): __label__ = "Options" def draw(self, context): - vpaint = context.tool_settings.vpaint layout = self.layout - split = self.layout.split() - col = split.column() + vpaint = context.tool_settings.vpaint + + col = layout.column() col.itemL(text="Blend:") col.itemR(vpaint, "mode", text="") col.itemR(vpaint, "all_faces") @@ -477,7 +474,8 @@ class VIEW3D_PT_vertexpaint_options(View3DPanel): # col.itemR(vpaint, "gamma", text="") # col.itemL(text="Multiply:") # col.itemR(vpaint, "mul", text="") - + + # ********** default tools for texturepaint **************** class View3DPanel(bpy.types.Panel): @@ -492,7 +490,8 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel): def draw(self, context): layout = self.layout - + layout.itemL(text="Nothing yet") + bpy.types.register(VIEW3D_PT_tools_objectmode) bpy.types.register(VIEW3D_PT_tools_editmode_mesh) @@ -509,5 +508,3 @@ bpy.types.register(VIEW3D_PT_sculpt_options) bpy.types.register(VIEW3D_PT_vertexpaint_options) bpy.types.register(VIEW3D_PT_weightpaint_options) bpy.types.register(VIEW3D_PT_tools_texturepaint) - - From a1403f7fbb65809ac1e7266dcb6a7cf5f8e89451 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 24 Jul 2009 22:09:30 +0000 Subject: [PATCH 363/512] 2.5 3DView Properties Panel: * Some Code cleanup. * Added 3-Split Operator into the panel and some options (which don't work yet) * Added RNA for RegionView3D lock and box options. --- release/ui/space_view3d.py | 66 ++++++++++++++-------- source/blender/makesrna/intern/rna_space.c | 11 ++++ 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index 4d5d7a03c07..e21d585a14d 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -1,6 +1,25 @@ import bpy +# ********** Header **************** + +class VIEW3D_HT_header(bpy.types.Header): + __space_type__ = "VIEW_3D" + + def draw(self, context): + layout = self.layout + + layout.template_header() + + # menus + if context.area.show_menus: + row = layout.row() + row.itemM("VIEW3D_MT_view") + + layout.template_header_3D() + +# ********** Menu **************** + class VIEW3D_MT_view_navigation(bpy.types.Menu): __space_type__ = "VIEW_3D" __label__ = "Navigation" @@ -76,20 +95,7 @@ class VIEW3D_MT_view(bpy.types.Menu): layout.itemO("screen.region_foursplit", text="Toggle Quad View") layout.itemO("screen.screen_full_area", text="Toggle Full Screen") -class VIEW3D_HT_header(bpy.types.Header): - __space_type__ = "VIEW_3D" - - def draw(self, context): - layout = self.layout - - layout.template_header() - - # menus - if context.area.show_menus: - row = layout.row() - row.itemM("VIEW3D_MT_view") - - layout.template_header_3D() +# ********** Panel **************** class VIEW3D_PT_3dview_properties(bpy.types.Panel): __space_type__ = "VIEW_3D" @@ -101,17 +107,19 @@ class VIEW3D_PT_3dview_properties(bpy.types.Panel): return (view) def draw(self, context): - view = context.space_data - scene = context.scene layout = self.layout - split = layout.split() - col = split.column() + view = context.space_data + scene = context.scene + + col = layout.column() col.itemR(view, "camera") col.itemR(view, "lens") + col.itemL(text="Clip:") col.itemR(view, "clip_start", text="Start") col.itemR(view, "clip_end", text="End") + col.itemL(text="Grid:") col.itemR(view, "grid_spacing", text="Spacing") col.itemR(view, "grid_subdivisions", text="Subdivisions") @@ -127,11 +135,10 @@ class VIEW3D_PT_3dview_display(bpy.types.Panel): return (view) def draw(self, context): - view = context.space_data layout = self.layout + view = context.space_data - split = layout.split() - col = split.column() + col = layout.column() col.itemR(view, "display_floor", text="Grid Floor") col.itemR(view, "display_x_axis", text="X Axis") col.itemR(view, "display_y_axis", text="Y Axis") @@ -140,11 +147,21 @@ class VIEW3D_PT_3dview_display(bpy.types.Panel): col.itemR(view, "all_object_centers") col.itemR(view, "relationship_lines") col.itemR(view, "textured_solid") - + + layout.itemS() + + layout.itemO("screen.region_foursplit") + + col = layout.column() + col.itemR(view, "lock_rotation") + col.itemR(view, "box_preview") + col.itemR(view, "box_clip") + class VIEW3D_PT_background_image(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "UI" __label__ = "Background Image" + __default_closed__ = True def poll(self, context): view = context.space_data @@ -158,9 +175,10 @@ class VIEW3D_PT_background_image(bpy.types.Panel): layout.itemR(view, "display_background_image", text="") def draw(self, context): + layout = self.layout + view = context.space_data bg = context.space_data.background_image - layout = self.layout layout.active = view.display_background_image split = layout.split() @@ -179,5 +197,3 @@ bpy.types.register(VIEW3D_HT_header) bpy.types.register(VIEW3D_PT_3dview_properties) bpy.types.register(VIEW3D_PT_3dview_display) bpy.types.register(VIEW3D_PT_background_image) - - diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 2afa1e6102b..f04f3b7be68 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -646,7 +646,18 @@ static void rna_def_space_3dview(BlenderRNA *brna) RNA_def_property_enum_items(prop, transform_orientation_items); RNA_def_property_ui_text(prop, "Transform Orientation", "The alignment of manipulator handles."); RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, NULL); + + prop= RNA_def_property(srna, "lock_rotation", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, "RegionView3D", "viewlock", RV3D_LOCKED); + RNA_def_property_ui_text(prop, "Lock", "Lock View Rotation"); + prop= RNA_def_property(srna, "box_preview", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, "RegionView3D", "viewlock", RV3D_BOXVIEW); + RNA_def_property_ui_text(prop, "Box", ""); + + prop= RNA_def_property(srna, "box_clip", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, "RegionView3D", "viewlock", RV3D_BOXCLIP); + RNA_def_property_ui_text(prop, "Clip", ""); } static void rna_def_space_buttons(BlenderRNA *brna) From a93619a8c44d432e93a29f01b65505adee77474a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 24 Jul 2009 22:33:09 +0000 Subject: [PATCH 364/512] 2.5 3DView View Panel: * Added Lines option. * Made some settings use alignment. Logs: Of course i meant 4-Split in last commit message ;-) --- release/ui/space_view3d.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index e21d585a14d..c96960eb857 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -116,14 +116,18 @@ class VIEW3D_PT_3dview_properties(bpy.types.Panel): col.itemR(view, "camera") col.itemR(view, "lens") - col.itemL(text="Clip:") + layout.itemL(text="Clip:") + col = layout.column(align=True) col.itemR(view, "clip_start", text="Start") col.itemR(view, "clip_end", text="End") - col.itemL(text="Grid:") + layout.itemL(text="Grid:") + col = layout.column(align=True) + col.itemR(view, "grid_lines", text="Lines") col.itemR(view, "grid_spacing", text="Spacing") col.itemR(view, "grid_subdivisions", text="Subdivisions") - col.itemR(scene, "cursor_location", text="3D Cursor:") + + layout.column().itemR(scene, "cursor_location", text="3D Cursor:") class VIEW3D_PT_3dview_display(bpy.types.Panel): __space_type__ = "VIEW_3D" From f7b90c0f419633e33c4a81969b9e6228cf896b24 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 24 Jul 2009 23:07:18 +0000 Subject: [PATCH 365/512] - report header buttons were not drawing. - shift+b in the console would do border zoom (rather then upper case B), fixed by making v2d's border zoom check if the v2d's zoom is locked. - blender in debug mode registers all operators, useful for testing. --- release/ui/space_console.py | 2 +- source/blender/editors/interface/view2d_ops.c | 10 ++++++---- source/blender/editors/space_console/space_console.c | 9 +++------ source/blender/editors/space_view3d/view3d_edit.c | 8 ++++---- source/blender/windowmanager/intern/wm_event_system.c | 6 +++--- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 38358e914a7..08695569748 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -18,7 +18,7 @@ class CONSOLE_HT_header(bpy.types.Header): row = layout.row() row.itemR(sc, "console_type", expand=True) - if sc.type == 'REPORT': + if sc.console_type == 'REPORT': if context.area.show_menus: row = layout.row() diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index f0745ebfd71..44b7f1d13da 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -464,7 +464,7 @@ void VIEW2D_OT_scroll_up(wmOperatorType *ot) /* ------------------ 'Shared' stuff ------------------------ */ /* check if step-zoom can be applied */ -static short view_zoomstep_ok(bContext *C) +static int view_zoom_poll(bContext *C) { ARegion *ar= CTX_wm_region(C); View2D *v2d; @@ -527,7 +527,7 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op) static int view_zoomin_exec(bContext *C, wmOperator *op) { /* check that there's an active region, as View2D data resides there */ - if (!view_zoomstep_ok(C)) + if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; /* set RNA-Props - zooming in by uniform factor */ @@ -563,7 +563,7 @@ void VIEW2D_OT_zoom_in(wmOperatorType *ot) static int view_zoomout_exec(bContext *C, wmOperator *op) { /* check that there's an active region, as View2D data resides there */ - if (!view_zoomstep_ok(C)) + if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; /* set RNA-Props - zooming in by uniform factor */ @@ -831,6 +831,8 @@ void VIEW2D_OT_zoom(wmOperatorType *ot) ot->invoke= view_zoomdrag_invoke; ot->modal= view_zoomdrag_modal; + ot->poll= view_zoom_poll; + /* operator is repeatable */ // ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; @@ -929,7 +931,7 @@ void VIEW2D_OT_zoom_border(wmOperatorType *ot) ot->exec= view_borderzoom_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= view_zoom_poll; /* rna */ RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 763be0392dc..db70eff386f 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -277,6 +277,8 @@ void console_keymap(struct wmWindowManager *wm) #ifndef DISABLE_PYTHON WM_keymap_add_item(keymap, "CONSOLE_OT_exec", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "CONSOLE_OT_exec", PADENTER, KM_PRESS, 0, 0); + //WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", TABKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", RETKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */ #endif @@ -291,13 +293,8 @@ void console_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "CONSOLE_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0); - - - - - RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", " "); /* fake tabs */ - WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_PRESS, KM_ANY, 0); // last! + WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! } /****************** header region ******************/ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 3c80b650cf3..f278b717f10 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1149,7 +1149,7 @@ void VIEW3D_OT_render_border(wmOperatorType *ot) } /* ********************* Border Zoom operator ****************** */ -static int view3d_border_zoom_exec(bContext *C, wmOperator *op) +static int view3d_zoom_border_exec(bContext *C, wmOperator *op) { ARegion *ar= CTX_wm_region(C); View3D *v3d = CTX_wm_view3d(C); @@ -1285,7 +1285,7 @@ static int view3d_border_zoom_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -static int view3d_border_zoom_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int view3d_zoom_border_invoke(bContext *C, wmOperator *op, wmEvent *event) { RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1305,8 +1305,8 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot) ot->idname= "VIEW3D_OT_zoom_border"; /* api callbacks */ - ot->invoke= view3d_border_zoom_invoke; - ot->exec= view3d_border_zoom_exec; + ot->invoke= view3d_zoom_border_invoke; + ot->exec= view3d_zoom_border_exec; ot->modal= WM_border_select_modal; ot->poll= ED_operator_view3d_active; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index e9affbac87a..7f40ec401a8 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -267,7 +267,7 @@ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat) ED_undo_push_op(C, op); if(repeat==0) { - if(op->type->flag & OPTYPE_REGISTER) + if((op->type->flag & OPTYPE_REGISTER) || (G.f & G_DEBUG)) wm_operator_register(C, op); else WM_operator_free(op); @@ -373,7 +373,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P if(ot->flag & OPTYPE_UNDO) ED_undo_push_op(C, op); - if(ot->flag & OPTYPE_REGISTER) + if((ot->flag & OPTYPE_REGISTER) || (G.f & G_DEBUG)) wm_operator_register(C, op); else WM_operator_free(op); @@ -717,7 +717,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand if(ot->flag & OPTYPE_UNDO) ED_undo_push_op(C, op); - if(ot->flag & OPTYPE_REGISTER) + if((ot->flag & OPTYPE_REGISTER) || (G.f & G_DEBUG)) wm_operator_register(C, op); else WM_operator_free(op); From 020a34b9de7a8806c471700ca02b9cc013abc56d Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 25 Jul 2009 05:11:28 +0000 Subject: [PATCH 366/512] 2.5 - Restored most of the remaining Armature/Pose Operators * Armature: - added: fill, merge, separate - renamed: duplicate, align * Pose: - added: apply pose * Armature Edit menu has been converted to use operators/layout now --- release/ui/space_view3d_toolbar.py | 2 +- .../editors/armature/armature_intern.h | 10 +- .../blender/editors/armature/armature_ops.c | 23 +- .../blender/editors/armature/editarmature.c | 281 ++++++++++++------ .../editors/space_view3d/view3d_header.c | 197 ++++-------- 5 files changed, 277 insertions(+), 236 deletions(-) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index e53b599ee83..0612439f7cf 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -199,7 +199,7 @@ class VIEW3D_PT_tools_editmode_armature(View3DPanel): col = layout.column(align=True) col.itemO("armature.bone_primitive_add", text="Add") - col.itemO("armature.duplicate_selected", text="Duplicate") + col.itemO("armature.duplicate", text="Duplicate") col.itemO("armature.delete", text="Delete") layout.itemL(text="Modeling:") diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index b4ab58930fa..471ea6a6ccd 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -34,7 +34,7 @@ struct wmOperatorType; /* editarmature.c operators */ void ARMATURE_OT_bone_primitive_add(struct wmOperatorType *ot); -void ARMATURE_OT_bones_align(struct wmOperatorType *ot); +void ARMATURE_OT_align(struct wmOperatorType *ot); void ARMATURE_OT_calculate_roll(struct wmOperatorType *ot); void ARMATURE_OT_switch_direction(struct wmOperatorType *ot); @@ -51,9 +51,13 @@ void ARMATURE_OT_select_hierarchy(struct wmOperatorType *ot); void ARMATURE_OT_select_linked(struct wmOperatorType *ot); void ARMATURE_OT_delete(struct wmOperatorType *ot); -void ARMATURE_OT_duplicate_selected(struct wmOperatorType *ot); +void ARMATURE_OT_duplicate(struct wmOperatorType *ot); void ARMATURE_OT_extrude(struct wmOperatorType *ot); void ARMATURE_OT_click_extrude(struct wmOperatorType *ot); +void ARMATURE_OT_fill(struct wmOperatorType *ot); +void ARMATURE_OT_merge(struct wmOperatorType *ot); + +void ARMATURE_OT_separate(struct wmOperatorType *ot); void ARMATURE_OT_autoside_names(struct wmOperatorType *ot); void ARMATURE_OT_flip_names(struct wmOperatorType *ot); @@ -63,6 +67,8 @@ void ARMATURE_OT_flip_names(struct wmOperatorType *ot); void POSE_OT_hide(struct wmOperatorType *ot); void POSE_OT_reveal(struct wmOperatorType *ot); +void POSE_OT_apply(struct wmOperatorType *ot); + void POSE_OT_rot_clear(struct wmOperatorType *ot); void POSE_OT_loc_clear(struct wmOperatorType *ot); void POSE_OT_scale_clear(struct wmOperatorType *ot); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 9d44e8efc34..757430a281a 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -110,7 +110,7 @@ void ED_operatortypes_armature(void) /* EDIT ARMATURE */ WM_operatortype_append(ARMATURE_OT_bone_primitive_add); - WM_operatortype_append(ARMATURE_OT_bones_align); + WM_operatortype_append(ARMATURE_OT_align); WM_operatortype_append(ARMATURE_OT_calculate_roll); WM_operatortype_append(ARMATURE_OT_switch_direction); WM_operatortype_append(ARMATURE_OT_subdivs); @@ -126,9 +126,13 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_select_linked); WM_operatortype_append(ARMATURE_OT_delete); - WM_operatortype_append(ARMATURE_OT_duplicate_selected); + WM_operatortype_append(ARMATURE_OT_duplicate); WM_operatortype_append(ARMATURE_OT_extrude); WM_operatortype_append(ARMATURE_OT_click_extrude); + WM_operatortype_append(ARMATURE_OT_fill); + WM_operatortype_append(ARMATURE_OT_merge); + + WM_operatortype_append(ARMATURE_OT_separate); WM_operatortype_append(ARMATURE_OT_autoside_names); WM_operatortype_append(ARMATURE_OT_flip_names); @@ -146,6 +150,8 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_hide); WM_operatortype_append(POSE_OT_reveal); + WM_operatortype_append(POSE_OT_apply); + WM_operatortype_append(POSE_OT_rot_clear); WM_operatortype_append(POSE_OT_loc_clear); WM_operatortype_append(POSE_OT_scale_clear); @@ -173,7 +179,6 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_autoside_names); WM_operatortype_append(POSE_OT_flip_names); - /* POSELIB */ WM_operatortype_append(POSELIB_OT_browse_interactive); @@ -195,7 +200,7 @@ void ED_keymap_armature(wmWindowManager *wm) /* only set in editmode armature, by space_view3d listener */ // WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ARMATURE_OT_bones_align", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_align", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_calculate_roll", NKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_switch_direction", FKEY, KM_PRESS, KM_ALT, 0); @@ -225,12 +230,17 @@ void ED_keymap_armature(wmWindowManager *wm) RNA_boolean_set(kmi->ptr, "extend", 1); WM_keymap_add_item(keymap, "ARMATURE_OT_select_linked", LKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate_selected", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, 0, 0); kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "forked", 1); WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_fill", FKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_merge", MKEY, KM_PRESS, KM_ALT, 0); + + WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, /*KM_CTRL|KM_ALT*/0, 0); /* Armature -> Etch-A-Ton ------------------------ */ WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0); @@ -246,6 +256,9 @@ void ED_keymap_armature(wmWindowManager *wm) kmi= WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "unselected", 1); WM_keymap_add_item(keymap, "POSE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0); + + WM_keymap_add_item(keymap, "POSE_OT_apply", AKEY, KM_PRESS, KM_CTRL, 0); + /*clear pose*/ WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "POSE_OT_loc_clear", GKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index cfae8ebb3a9..c47b86f326c 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -100,9 +100,6 @@ /* ************* XXX *************** */ static int okee() {return 0;} static int pupmenu() {return 0;} -static void waitcursor() {}; -static void error() {}; -static void error_libdata() {} static void BIF_undo_push() {} static void adduplicate() {} /* ************* XXX *************** */ @@ -430,25 +427,7 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode) ED_armature_edit_free(ob); } -/* helper for apply_armature_pose2bones - fixes parenting of objects that are bone-parented to armature */ -static void applyarmature_fix_boneparents (Scene *scene, Object *armob) -{ - Object workob, *ob; - - /* go through all objects in database */ - for (ob= G.main->object.first; ob; ob= ob->id.next) { - /* if parent is bone in this armature, apply corrections */ - if ((ob->parent == armob) && (ob->partype == PARBONE)) { - /* apply current transform from parent (not yet destroyed), - * then calculate new parent inverse matrix - */ - ED_object_apply_obmat(ob); - - what_does_parent(scene, ob, &workob); - Mat4Invert(ob->parentinv, workob.obmat); - } - } -} +/* ---------------------- */ static EditBone *editbone_name_exists (ListBase *edbo, char *name) { @@ -490,28 +469,52 @@ void unique_editbone_name (ListBase *edbo, char *name, EditBone *bone) } } -/* set the current pose as the restpose */ -void apply_armature_pose2bones(Scene *scene, Object *obedit) +/* helper for apply_armature_pose2bones - fixes parenting of objects that are bone-parented to armature */ +static void applyarmature_fix_boneparents (Scene *scene, Object *armob) { - bArmature *arm= obedit->data; + Object workob, *ob; + + /* go through all objects in database */ + for (ob= G.main->object.first; ob; ob= ob->id.next) { + /* if parent is bone in this armature, apply corrections */ + if ((ob->parent == armob) && (ob->partype == PARBONE)) { + /* apply current transform from parent (not yet destroyed), + * then calculate new parent inverse matrix + */ + ED_object_apply_obmat(ob); + + what_does_parent(scene, ob, &workob); + Mat4Invert(ob->parentinv, workob.obmat); + } + } +} + +/* set the current pose as the restpose */ +static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); // must be active object, not edit-object + bArmature *arm= get_armature(ob); bPose *pose; bPoseChannel *pchan; EditBone *curbone; /* don't check if editmode (should be done by caller) */ - if (object_data_is_libdata(obedit)) { - error_libdata(); - return; + if (ob->type!=OB_ARMATURE) + return OPERATOR_CANCELLED; + if (object_data_is_libdata(ob)) { + BKE_report(op->reports, RPT_ERROR, "Cannot apply pose to lib-linked armature."); //error_libdata(); + return OPERATOR_CANCELLED; } /* helpful warnings... */ // TODO: add warnings to be careful about actions, applying deforms first, etc. /* Get editbones of active armature to alter */ - ED_armature_to_edit(obedit); + ED_armature_to_edit(ob); /* get pose of active object and move it out of posemode */ - pose= obedit->pose; + pose= ob->pose; for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) { curbone= editbone_name_exists(arm->edbo, pchan->name); @@ -530,7 +533,7 @@ void apply_armature_pose2bones(Scene *scene, Object *obedit) /* obtain new auto y-rotation */ VecSubf(delta, curbone->tail, curbone->head); - vec_roll_to_mat3(delta, 0.0, premat); + vec_roll_to_mat3(delta, 0.0f, premat); Mat3Inv(imat, premat); /* get pchan 'visual' matrix */ @@ -545,26 +548,46 @@ void apply_armature_pose2bones(Scene *scene, Object *obedit) } /* clear transform values for pchan */ - pchan->loc[0]= pchan->loc[1]= pchan->loc[2]= 0; - pchan->quat[1]= pchan->quat[2]= pchan->quat[3]= 0; - pchan->quat[0]= pchan->size[0]= pchan->size[1]= pchan->size[2]= 1; + pchan->loc[0]= pchan->loc[1]= pchan->loc[2]= 0.0f; + pchan->eul[0]= pchan->eul[1]= pchan->eul[2]= 0.0f; + pchan->quat[1]= pchan->quat[2]= pchan->quat[3]= 0.0f; + pchan->quat[0]= pchan->size[0]= pchan->size[1]= pchan->size[2]= 1.0f; /* set anim lock */ curbone->flag |= BONE_UNKEYED; } /* convert editbones back to bones */ - ED_armature_from_edit(scene, obedit); + ED_armature_from_edit(scene, ob); /* flush positions of posebones */ - where_is_pose(scene, obedit); + where_is_pose(scene, ob); /* fix parenting of objects which are bone-parented */ - applyarmature_fix_boneparents(scene, obedit); + applyarmature_fix_boneparents(scene, ob); - BIF_undo_push("Apply new restpose"); + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); + + return OPERATOR_FINISHED; } +void POSE_OT_apply (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Apply Pose as Rest Pose"; + ot->idname= "POSE_OT_apply"; + ot->description= "Apply the current pose as the new rest pose."; + + /* callbacks */ + ot->exec= apply_armature_pose2bones_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ---------------------- */ /* Helper function for armature joining - link fixing */ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChannel *pchan, EditBone *curbone) @@ -669,6 +692,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann } } +/* join armature exec is exported for use in object->join objects operator... */ int join_armature_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); @@ -776,6 +800,8 @@ int join_armature_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } +/* ---------------------- */ + /* Helper function for armature separating - link fixing */ static void separated_armature_fix_links(Object *origArm, Object *newArm) { @@ -974,19 +1000,22 @@ static void separate_armature_bones (Scene *scene, Object *ob, short sel) } /* separate selected bones into their armature */ -void separate_armature (Scene *scene, View3D *v3d) +static int separate_armature_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX get from context + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); Object *oldob, *newob; - Base *base, *oldbase, *newbase; + Base *oldbase, *newbase; bArmature *arm; - if ( okee("Separate")==0 ) return; - - waitcursor(1); - + /* sanity checks */ + if (obedit == NULL) + return OPERATOR_CANCELLED; arm= obedit->data; + /* set wait cursor in case this takes a while */ + WM_cursor_wait(1); + /* we are going to do this as follows (unlike every other instance of separate): * 1. exit editmode +posemode for active armature/base. Take note of what this is. * 2. duplicate base - BASACT is the new one now @@ -996,13 +1025,12 @@ void separate_armature (Scene *scene, View3D *v3d) */ /* 1) only edit-base selected */ - base= FIRSTBASE; - for (base= FIRSTBASE; base; base= base->next) { - if (base->lay & v3d->lay) { - if (base->object==obedit) base->flag |= 1; - else base->flag &= ~1; - } + // TODO: use context iterators for this? + CTX_DATA_BEGIN(C, Base *, base, visible_bases) { + if (base->object==obedit) base->flag |= 1; + else base->flag &= ~1; } + CTX_DATA_END; /* 1) store starting settings and exit editmode */ oldob= obedit; @@ -1040,10 +1068,29 @@ void separate_armature (Scene *scene, View3D *v3d) ED_armature_to_edit(obedit); - /* recalc/redraw + cleanup */ - waitcursor(0); + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, obedit); - BIF_undo_push("Separate Armature"); + /* recalc/redraw + cleanup */ + WM_cursor_wait(0); + + return OPERATOR_FINISHED; +} + +void ARMATURE_OT_separate (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Separate Armature"; + ot->idname= "ARMATURE_OT_separate"; + ot->description= "Isolate selected bones into a separate armature."; + + /* callbacks */ + ot->invoke= WM_operator_confirm; + ot->exec= separate_armature_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } /* **************** END tools on Editmode Armature **************** */ @@ -2640,11 +2687,11 @@ static int armature_duplicate_selected_invoke(bContext *C, wmOperator *op, wmEve return retv; } -void ARMATURE_OT_duplicate_selected(wmOperatorType *ot) +void ARMATURE_OT_duplicate(wmOperatorType *ot) { /* identifiers */ ot->name= "Duplicate Selected Bone(s)"; - ot->idname= "ARMATURE_OT_duplicate_selected"; + ot->idname= "ARMATURE_OT_duplicate"; /* api callbacks */ ot->invoke = armature_duplicate_selected_invoke; @@ -2719,6 +2766,7 @@ static void chains_find_tips (ListBase *edbo, ListBase *list) } } +/* --------------------- */ static void fill_add_joint (EditBone *ebo, short eb_tail, ListBase *points) { @@ -2772,23 +2820,29 @@ static void fill_add_joint (EditBone *ebo, short eb_tail, ListBase *points) } /* bone adding between selected joints */ -void fill_bones_armature(Scene *scene, View3D *v3d) +static int armature_fill_bones_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX get from context - bArmature *arm= obedit->data; - EditBone *ebo, *newbone=NULL; + Object *obedit= CTX_data_edit_object(C); + bArmature *arm= (obedit) ? obedit->data : NULL; + Scene *scene= CTX_data_scene(C); + View3D *v3d= (View3D *)CTX_wm_space_data(C); + EditBone *newbone=NULL; ListBase points = {NULL, NULL}; int count; + /* sanity checks */ + if ELEM(NULL, obedit, arm) + return OPERATOR_CANCELLED; + /* loop over all bones, and only consider if visible */ - for (ebo= arm->edbo->first; ebo; ebo= ebo->next) { - if (EBONE_VISIBLE(arm, ebo)) { - if (!(ebo->flag & BONE_CONNECTED) && (ebo->flag & BONE_ROOTSEL)) - fill_add_joint(ebo, 0, &points); - if (ebo->flag & BONE_TIPSEL) - fill_add_joint(ebo, 1, &points); - } + CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) + { + if (!(ebone->flag & BONE_CONNECTED) && (ebone->flag & BONE_ROOTSEL)) + fill_add_joint(ebone, 0, &points); + if (ebone->flag & BONE_TIPSEL) + fill_add_joint(ebone, 1, &points); } + CTX_DATA_END; /* the number of joints determines how we fill: * 1) between joint and cursor (joint=head, cursor=tail) @@ -2798,8 +2852,8 @@ void fill_bones_armature(Scene *scene, View3D *v3d) count= BLI_countlist(&points); if (count == 0) { - error("No joints selected"); - return; + BKE_report(op->reports, RPT_ERROR, "No joints selected"); + return OPERATOR_CANCELLED; } else if (count == 1) { EditBonePoint *ebp; @@ -2828,14 +2882,14 @@ void fill_bones_armature(Scene *scene, View3D *v3d) ebp2= ebp->next; if ((ebp->head_owner==ebp2->tail_owner) && (ebp->head_owner!=NULL)) { - error("Same bone selected..."); + BKE_report(op->reports, RPT_ERROR, "Same bone selected..."); BLI_freelistN(&points); - return; + return OPERATOR_CANCELLED; } if ((ebp->tail_owner==ebp2->head_owner) && (ebp->tail_owner!=NULL)) { - error("Same bone selected..."); + BKE_report(op->reports, RPT_ERROR, "Same bone selected..."); BLI_freelistN(&points); - return; + return OPERATOR_CANCELLED; } /* find which one should be the 'head' */ @@ -2902,19 +2956,35 @@ void fill_bones_armature(Scene *scene, View3D *v3d) } else { // FIXME.. figure out a method for multiple bones - error("Too many points selected"); + BKE_report(op->reports, RPT_ERROR, "Too many points selected"); printf("Points selected: %d \n", count); BLI_freelistN(&points); - return; + return OPERATOR_CANCELLED; } /* free points */ BLI_freelistN(&points); - /* undo + updates */ - BIF_undo_push("Fill Bones"); + return OPERATOR_FINISHED; } +void ARMATURE_OT_fill (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Fill Between Joints"; + ot->idname= "ARMATURE_OT_fill"; + ot->description= "Add bone between selected joint(s) and/or 3D-Cursor."; + + /* callbacks */ + ot->exec= armature_fill_bones_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* --------------------- */ + /* this function merges between two bones, removes them and those in-between, * and adjusts the parent relationships for those in-between */ @@ -2984,19 +3054,19 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone } } -/* bone merging - has a menu! */ -void merge_armature(Scene *scene) + +static int armature_merge_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX get from context - bArmature *arm= obedit->data; - short val= 0; + Object *obedit= CTX_data_edit_object(C); + bArmature *arm= (obedit) ? obedit->data : NULL; + short type= RNA_enum_get(op->ptr, "type"); - /* process a menu to determine how to merge */ - // TODO: there's room for more modes of merging stuff... - val= pupmenu("Merge Selected Bones%t|Within Chains%x1"); - if (val <= 0) return; + /* sanity checks */ + if ELEM(NULL, obedit, arm) + return OPERATOR_CANCELLED; - if (val == 1) { + /* for now, there's only really one type of merging that's performed... */ + if (type == 1) { /* go down chains, merging bones */ ListBase chains = {NULL, NULL}; LinkData *chain, *nchain; @@ -3004,7 +3074,7 @@ void merge_armature(Scene *scene) /* get chains (ends on chains) */ chains_find_tips(arm->edbo, &chains); - if (chains.first == NULL) return; + if (chains.first == NULL) return OPERATOR_CANCELLED; /* each 'chain' is the last bone in the chain (with no children) */ for (chain= chains.first; chain; chain= nchain) { @@ -3052,9 +3122,35 @@ void merge_armature(Scene *scene) BLI_freelistN(&chains); } - /* undo + updates */ + /* updates */ ED_armature_sync_selection(arm->edbo); - BIF_undo_push("Merge Bones"); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, obedit); + + return OPERATOR_FINISHED; +} + +void ARMATURE_OT_merge (wmOperatorType *ot) +{ + static EnumPropertyItem merge_types[] = { + {1, "WITHIN_CHAIN", 0, "Within Chains", ""}, + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name= "Merge Bones"; + ot->idname= "ARMATURE_OT_merge"; + ot->description= "Merge continuous chains of selected bones."; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= armature_merge_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", merge_types, 0, "Type", ""); } /* ************** END Add/Remove stuff in editmode ************ */ @@ -4109,11 +4205,12 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_bones_align(wmOperatorType *ot) +void ARMATURE_OT_align(wmOperatorType *ot) { /* identifiers */ ot->name= "Align Bones"; - ot->idname= "ARMATURE_OT_bones_align"; + ot->idname= "ARMATURE_OT_align"; + ot->description= "Align selected bones to the active bone (or to their parent)."; /* api callbacks */ ot->invoke = WM_operator_confirm; diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index a00b79e4139..abf170c9549 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2738,70 +2738,34 @@ static void view3d_edit_latticemenu(bContext *C, uiLayout *layout, void *arg_unu uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O } -void do_view3d_edit_armature_parentmenu(bContext *C, void *arg, int event) + +static void view3d_edit_armature_parentmenu(bContext *C, uiLayout *layout, void *arg_unused) { + uiItemO(layout, NULL, 0, "ARMATURE_OT_parent_set"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_parent_clear"); +} + #if 0 - switch(event) { - case 1: - make_bone_parent(); - break; - case 2: - clear_bone_parent(); - break; - } -#endif -} - -static uiBlock *view3d_edit_armature_parentmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_edit_armature_parentmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_edit_armature_parentmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - void do_view3d_edit_armature_rollmenu(bContext *C, void *arg, int event) { -#if 0 - if (event == 1 || event == 2) - /* set roll based on aligning z-axis */ - auto_align_armature(event); - else if (event == 3) { - /* interactively set bone roll */ + /* "Set Roll|Ctrl R" - interactively set bone roll */ initTransform(TFM_BONE_ROLL, CTX_NONE); Transform(); - } +} #endif -} -static uiBlock *view3d_edit_armature_rollmenu(bContext *C, ARegion *ar, void *arg_unused) +static void view3d_edit_armature_rollmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_edit_armature_rollmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_edit_armature_rollmenu, NULL); + /* 0 = 'Global', 1 = 'Cursor' */ + // TODO: keep these in sync... + uiItemEnumO(layout, "Clear Roll (Z-Axis Up)", 0, "ARMATURE_OT_calculate_roll", "type", 0); + uiItemEnumO(layout, "Roll to Cursor", 0, "ARMATURE_OT_calculate_roll", "type", 1); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Roll (Z-Axis Up)|Ctrl N, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Roll to Cursor|Ctrl N, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; + //uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } +#if 0 static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) { #if 0 @@ -2811,18 +2775,7 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) case 0: /* Undo Editing */ remake_editArmature(); break; - case 1: /* transformation properties */ -// XXX mainqenter(NKEY, 1); - break; - case 3: /* extrude */ - extrude_armature(0); - break; - case 4: /* duplicate */ - duplicate_context_selected(); - break; - case 5: /* delete */ - delete_context_selected(); - break; + case 6: /* Shear */ initTransform(TFM_SHEAR, CTX_NONE); Transform(); @@ -2833,17 +2786,7 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) case 10: /* forked! */ extrude_armature(1); break; - case 12: /* subdivide */ - subdivide_armature(1); - break; - case 13: /* flip left and right names */ - armature_flip_names(); - break; - case 15: /* subdivide multi */ - if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; - waitcursor(1); - subdivide_armature(numcuts); - break; + case 16: /* Alt-S transform (BoneSize) */ initTransform(TFM_BONESIZE, CTX_NONE); Transform(); @@ -2851,17 +2794,7 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) case 17: /* move to layer */ pose_movetolayer(); break; - case 18: /* merge bones */ - merge_armature(); - break; - case 19: /* auto-extensions */ - case 20: - case 21: - armature_autoside_names(event-19); - break; - case 22: /* separate */ - separate_armature(); - break; + case 23: /* bone sketching panel */ add_blockhandler(curarea, VIEW3D_HANDLER_BONESKETCH, UI_PNL_UNSTOW); break; @@ -2927,81 +2860,73 @@ static uiBlock *view3d_armature_settingsmenu(bContext *C, ARegion *ar, void *arg return block; } +#endif -static uiBlock *view3d_edit_armaturemenu(bContext *C, ARegion *ar, void *arg_unused) +static void view3d_edit_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused) { Object *obedit = CTX_data_edit_object(C); bArmature *arm= obedit->data; - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "view3d_edit_armaturemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_edit_armaturemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); + +#if 0 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Bone Sketching|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, ""); uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, ""); // XXX uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_armature_rollmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Roll", 0, yco-=20, 120, 19, ""); +#endif + uiItemMenuF(layout, "Bone Roll", 0, view3d_edit_armature_rollmenu); +#if 0 if (arm->drawtype==ARM_ENVELOPE) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); else if (arm->drawtype==ARM_B_BONE) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale B-Bone Width|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); +#endif - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiItemS(layout); + + uiItemO(layout, "Extrude", 0, "ARMATURE_OT_extrude"); if (arm->flag & ARM_MIRROR_EDIT) - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude Forked|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill Between Joints|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); + uiItemBooleanO(layout, "Extrude Forked", 0, "ARMATURE_OT_extrude", "forked", 1); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, ""); + uiItemO(layout, NULL, 0, "ARMATURE_OT_duplicate"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_merge"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_fill"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_delete"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_separate"); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemS(layout); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Multi|W, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Left & Right Names|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Left-Right|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Front-Back|W, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Top-Bottom|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, ""); + uiItemO(layout, NULL, 0, "ARMATURE_OT_subdivide_simple"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_subdivide_multi"); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemEnumO(layout, "AutoName Left/Right", 0, "ARMATURE_OT_autoside_names", "axis", 0); + uiItemEnumO(layout, "AutoName Front/Back", 0, "ARMATURE_OT_autoside_names", "axis", 1); + uiItemEnumO(layout, "AutoName Top/Bottom", 0, "ARMATURE_OT_autoside_names", "axis", 2); + uiItemO(layout, "Flip Left/Right Names", 0, "ARMATURE_OT_flip_names"); + + uiItemS(layout); + +#if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Armature Layers|Shift M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Bone To Layer|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); +#endif - uiDefIconTextBlockBut(block, view3d_edit_armature_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); + uiItemMenuF(layout, "Parent", 0, view3d_edit_armature_parentmenu); + //uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); +#if 0 #ifndef DISABLE_PYTHON uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBlockBut(block, view3d_scripts_armaturemenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, ""); #endif - if(ar->alignment==RGN_ALIGN_TOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - - return block; +#endif } @@ -3146,10 +3071,10 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un #if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Relax Pose|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Pose as Restpose|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); #endif + uiItemO(layout, NULL, 0, "POSE_OT_apply"); + + uiItemS(layout); uiItemO(layout, "Copy Current Pose", 0, "POSE_OT_copy"); uiItemO(layout, "Paste Pose", 0, "POSE_OT_paste"); @@ -3168,11 +3093,11 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemS(layout); - uiItemEnumO(layout, "AutoName Left-Right", 0, "POSE_OT_autoside_names", "axis", 0); - uiItemEnumO(layout, "AutoName Front-Back", 0, "POSE_OT_autoside_names", "axis", 1); - uiItemEnumO(layout, "AutoName Top-Bottom", 0, "POSE_OT_autoside_names", "axis", 2); + uiItemEnumO(layout, "AutoName Left/Right", 0, "POSE_OT_autoside_names", "axis", 0); + uiItemEnumO(layout, "AutoName Front/Back", 0, "POSE_OT_autoside_names", "axis", 1); + uiItemEnumO(layout, "AutoName Top/Bottom", 0, "POSE_OT_autoside_names", "axis", 2); - uiItemO(layout, "Flip L/R Names", 0, "POSE_OT_flip_names"); + uiItemO(layout, "Flip Left/Right Names", 0, "POSE_OT_flip_names"); //separator + move layer operators... @@ -4143,7 +4068,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o xco+= xmax; } else if (ob && ob->type == OB_ARMATURE) { xmax= GetButStringLength("Armature"); - uiDefPulldownBut(block, view3d_edit_armaturemenu, NULL, "Armature", xco,yco, xmax-3, 20, ""); + uiDefMenuBut(block, view3d_edit_armaturemenu, NULL, "Armature", xco,yco, xmax-3, 20, ""); xco+= xmax; } From 5815cfd53b7ffcbcf123dfc3f99ed5b64dce0b6a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 25 Jul 2009 10:42:23 +0000 Subject: [PATCH 367/512] 2.5 Smooth/Flat Shading: * Added operators in Toolbar for Object Mode too. (Mesh only). I think it should be there too, going into edit mode and select all just to change the shading of the whole mesh is not good. ;-) --- release/ui/space_view3d_toolbar.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 0612439f7cf..7889827ee7b 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -28,6 +28,13 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): col.itemO("object.duplicate") col.itemO("object.delete") + if context.active_object.type == 'MESH': + layout.itemL(text="Shading:") + + col = layout.column(align=True) + col.itemO("object.shade_smooth", text="Smooth") + col.itemO("object.shade_flat", text="Flat") + layout.itemL(text="Keyframes:") col = layout.column(align=True) From a13341bed1ad905c41e0f1a1991dee959b09b63a Mon Sep 17 00:00:00 2001 From: William Reynish Date: Sat, 25 Jul 2009 12:22:22 +0000 Subject: [PATCH 368/512] Added Ztransp (renamed Z Buffer) option in rna and layout. Also added diffuse and color ramps, although a bug in the RNA prevents these from working unless you load an old file with them already enabled. --- release/ui/buttons_material.py | 24 +++++++++---------- source/blender/makesrna/intern/rna_material.c | 5 ++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index ceb492b198e..c6678d64c6e 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -74,37 +74,36 @@ class MATERIAL_PT_material(MaterialButtonsPanel): if mat: layout.itemR(mat, "type", expand=True) - - - -# row = layout.row() if mat.type == 'SURFACE': split = layout.split() sub = split.column() + sub.itemR(mat, "z_buffer") sub.itemR(mat, "alpha", slider=True) sub.itemR(mat, "ambient", slider=True) sub.itemR(mat, "emit") - sub.itemR(mat, "translucency", slider=True) sub = split.column() sub.itemR(mat, "shadeless") sub.itemR(mat, "wireframe") + sub.itemR(mat, "tangent_shading") sub.itemR(mat, "cubic", slider=True) + elif mat.type == 'VOLUME': split = layout.split() sub = split.column() + sub.itemR(mat, "z_buffer") sub.itemR(mat, "alpha", slider=True) sub.itemR(mat, "ambient", slider=True) sub.itemR(mat, "emit") - sub.itemR(mat, "translucency", slider=True) sub = split.column() sub.itemR(mat, "shadeless") sub.itemR(mat, "wireframe") + sub.itemR(mat, "tangent_shading") sub.itemR(mat, "cubic", slider=True) elif mat.type == 'HALO': @@ -218,10 +217,9 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): sub = split.column() sub.active = mat.shadeless== False sub.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) + sub.itemR(mat, "translucency", slider=True) sub.itemR(mat, "object_color") - - row = layout.row() row.active = mat.shadeless== False row.itemR(mat, "diffuse_shader", text="Shader") @@ -242,8 +240,9 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "diffuse_fresnel_factor", text="Factor") - layout.itemR(mat, "diffuse_ramp", text="Ramp") - + layout.template_color_ramp(mat.diffuse_ramp, expand=True) + + class MATERIAL_PT_specular(MaterialButtonsPanel): __idname__= "MATERIAL_PT_specular" __label__ = "Specular" @@ -283,8 +282,9 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "specular_toon_smooth", text="Smooth") - layout.itemR(mat, "specular_ramp", text="Ramp") - + layout.template_color_ramp(mat.specular_ramp, expand=True) + + class MATERIAL_PT_sss(MaterialButtonsPanel): __idname__= "MATERIAL_PT_sss" __label__ = "Subsurface Scattering" diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 8f5252dbdac..2eab89e43b2 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -1133,6 +1133,11 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Wireframe", "Render the edges of faces as wires (not supported in ray tracing)."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); + prop= RNA_def_property(srna, "z_buffer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ZTRA); + RNA_def_property_ui_text(prop, "Z Buffer", "Enable Z-buffering of transparent faces"); + RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); + prop= RNA_def_property(srna, "vertex_color_light", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOL); RNA_def_property_ui_text(prop, "Vertex Color Light", "Add vertex colors as additional lighting."); From 90dfb61e046625b61c3af8a7f8bfee431a356832 Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Sat, 25 Jul 2009 12:35:14 +0000 Subject: [PATCH 369/512] BGE: Fix Keyboard actuator that didn't generate release event. --- source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h | 1 + .../gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h index 7da4b9efb68..32391e63264 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h @@ -36,6 +36,7 @@ #include #include "wm_event_types.h" +#include "WM_types.h" #include "SCA_IInputDevice.h" diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp index 877a0d39acf..58af94854e6 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp @@ -104,7 +104,7 @@ bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode,short v { int previousTable = 1-m_currentTable; - if (val > 0) + if (val == KM_PRESS) { if (kxevent == KX_ESCKEY && val != 0 && !m_hookesc) result = true; @@ -138,7 +138,7 @@ bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode,short v } } - } else + } else if (val == KM_RELEASE) { // blender eventval == 0 switch (m_eventStatusTables[previousTable][kxevent].m_status) From dcfc0333d16a6a85c54f056edfce7a9089f64ef7 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 25 Jul 2009 13:40:59 +0000 Subject: [PATCH 370/512] 2.5 Outliner: brought back to near full functioning: - proper operators, like for open/close items, exec operations (note: select is still same operator as activate, should become modal ops later) - rename works again (ctrl+click) - proper notifiers for redraws - select / extend select works again - editmode in/out works again - enter key opens/closes again - right mouse operations work again Didn't do: - options for Sequence strips - signals to change button views on clicks - error/warning messages UI: - added new uiButSetRenameFunc(), which passes on the old name - added uiButActiveOnly(), which ensures a button gets created in active state, and gets removed when used. Needed for editing names in outliner. Andrea: check outliner.c for uiButActiveOnly(), very easy to use! Also: - Added posemode operator, CTRL+TAB tied to it. --- .../blender/editors/armature/editarmature.c | 10 +- source/blender/editors/include/ED_armature.h | 2 + source/blender/editors/include/UI_interface.h | 8 +- source/blender/editors/interface/interface.c | 44 +- .../editors/interface/interface_handlers.c | 42 +- .../editors/interface/interface_intern.h | 7 +- source/blender/editors/object/object_edit.c | 36 + source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 2 + .../editors/sculpt_paint/paint_vertex.c | 8 +- .../editors/space_buttons/space_buttons.c | 1 + .../blender/editors/space_outliner/outliner.c | 1095 +++++++++++------ .../editors/space_outliner/outliner_intern.h | 10 +- .../editors/space_outliner/outliner_ops.c | 26 +- .../editors/space_outliner/space_outliner.c | 1 + 15 files changed, 900 insertions(+), 393 deletions(-) diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index c47b86f326c..cda7f1754bb 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -1737,7 +1737,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot) * toggle==2: only active tag * toggle==3: swap (no test) */ -void deselectall_armature(Object *obedit, int toggle, int doundo) +void ED_armature_deselectall(Object *obedit, int toggle, int doundo) { bArmature *arm= obedit->data; EditBone *eBone; @@ -1809,7 +1809,7 @@ void mouse_armature(bContext *C, short mval[2], int extend) if (nearBone) { if (!extend) - deselectall_armature(obedit, 0, 0); + ED_armature_deselectall(obedit, 0, 0); /* by definition the non-root connected bones have no root point drawn, so a root selection needs to be delivered to the parent tip */ @@ -2187,7 +2187,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) Mat3MulMat3(totmat, obmat, viewmat); Mat3Inv(imat, totmat); - deselectall_armature(obedit, 0, 0); + ED_armature_deselectall(obedit, 0, 0); /* Create a bone */ bone= add_editbone(obedit, "Bone"); @@ -2240,7 +2240,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op) to_root= 1; } - deselectall_armature(obedit, 0, 0); + ED_armature_deselectall(obedit, 0, 0); /* we re-use code for mirror editing... */ flipbone= NULL; @@ -3405,7 +3405,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) Mat3MulMat3(totmat, obmat, viewmat); Mat3Inv(imat, totmat); - deselectall_armature(obedit, 0, 0); + ED_armature_deselectall(obedit, 0, 0); /* Create a bone */ bone= add_editbone(obedit, name); diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 3b5932b2950..31b0f712b97 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -99,6 +99,8 @@ void ED_armature_from_edit(struct Scene *scene, struct Object *obedit); void ED_armature_to_edit(struct Object *ob); void ED_armature_edit_free(struct Object *ob); void ED_armature_edit_remake(struct Object *obedit); +void ED_armature_deselectall(struct Object *obedit, int toggle, int doundo); + int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer, short hits, short extend); void mouse_armature(struct bContext *C, short mval[2], int extend); diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b40f90dcf0c..8dc766499bc 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -313,6 +313,10 @@ int uiButGetRetVal (uiBut *but); void uiButSetFlag (uiBut *but, int flag); void uiButClearFlag (uiBut *but, int flag); +/* special button case, only draw it when used actively, for outliner etc */ +int uiButActiveOnly (const struct bContext *C, uiBlock *block, uiBut *but); + + /* Buttons * * Functions to define various types of buttons in a block. Postfixes: @@ -474,9 +478,9 @@ int uiSearchBoxhHeight(void); void uiBlockSetHandleFunc(uiBlock *block, uiBlockHandleFunc func, void *arg); void uiBlockSetButmFunc (uiBlock *block, uiMenuHandleFunc func, void *arg); - void uiBlockSetFunc (uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2); -void uiBlockSetRenameFunc(uiBlock *block, uiButHandleRenameFunc func, void *arg1); + +void uiButSetRenameFunc (uiBut *but, uiButHandleRenameFunc func, void *arg1); void uiButSetFunc (uiBut *but, uiButHandleFunc func, void *arg1, void *arg2); void uiButSetNFunc (uiBut *but, uiButHandleNFunc func, void *argN, void *arg2); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 284ec6943ea..18634e21a36 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -442,7 +442,7 @@ static int ui_but_equals_old(uiBut *but, uiBut *oldbut) if(but->retval != oldbut->retval) return 0; if(but->rnapoin.data != oldbut->rnapoin.data) return 0; if(but->rnaprop != oldbut->rnaprop) - if(but->rnaindex != oldbut->rnaindex) return 0; + if(but->rnaindex != oldbut->rnaindex) return 0; if(but->func != oldbut->func) return 0; if(but->funcN != oldbut->funcN) return 0; if(oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return 0; @@ -496,6 +496,43 @@ static int ui_but_update_from_old_block(const bContext *C, uiBlock *block, uiBut return found; } +/* needed for temporarily rename buttons, such as in outliner or fileselect, + they should keep calling uiDefButs to keep them alive */ +/* returns 0 when button removed */ +int uiButActiveOnly(const bContext *C, uiBlock *block, uiBut *but) +{ + uiBlock *oldblock; + uiBut *oldbut; + int activate= 0, found= 0, isactive= 0; + + oldblock= block->oldblock; + if(!oldblock) + activate= 1; + else { + for(oldbut=oldblock->buttons.first; oldbut; oldbut=oldbut->next) { + if(ui_but_equals_old(oldbut, but)) { + found= 1; + + if(oldbut->active) + isactive= 1; + + break; + } + } + } + if(activate || found==0) { + ui_button_activate_do( (bContext *)C, CTX_wm_region(C), but); + } + else if(found && isactive==0) { + + BLI_remlink(&block->buttons, but); + ui_free_but(C, but); + return 0; + } + + return 1; +} + void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block) { uiBut *but; @@ -2767,9 +2804,10 @@ void uiBlockSetFunc(uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2 block->func_arg2= arg2; } -void uiBlockSetRenameFunc(uiBlock *block, uiButHandleRenameFunc func, void *arg1) +void uiButSetRenameFunc(uiBut *but, uiButHandleRenameFunc func, void *arg1) { - + but->rename_func= func; + but->rename_arg1= arg1; } void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, void *idv, void *argv, rcti *rect), void *arg) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 442d472a47a..1736cd1ef52 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -152,6 +152,10 @@ typedef struct uiAfterFunc { uiButHandleNFunc funcN; void *func_argN; + uiButHandleRenameFunc rename_func; + void *rename_arg1; + void *rename_orig; + uiBlockHandleFunc handle_func; void *handle_func_arg; int retval; @@ -239,7 +243,7 @@ static void ui_apply_but_func(bContext *C, uiBut *but) * handling is done, i.e. menus are closed, in order to avoid conflicts * with these functions removing the buttons we are working with */ - if(but->func || but->funcN || block->handle_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) { + if(but->func || but->funcN || block->handle_func || but->rename_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) { after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc"); after->func= but->func; @@ -250,6 +254,10 @@ static void ui_apply_but_func(bContext *C, uiBut *but) after->funcN= but->funcN; after->func_argN= but->func_argN; + after->rename_func= but->rename_func; + after->rename_arg1= but->rename_arg1; + after->rename_orig= but->rename_orig; /* needs free! */ + after->handle_func= block->handle_func; after->handle_func_arg= block->handle_func_arg; after->retval= but->retval; @@ -344,7 +352,12 @@ static void ui_apply_but_funcs_after(bContext *C) after.handle_func(C, after.handle_func_arg, after.retval); if(after.butm_func) after.butm_func(C, after.butm_func_arg, after.a2); - + + if(after.rename_func) + after.rename_func(C, after.rename_arg1, after.rename_orig); + if(after.rename_orig) + MEM_freeN(after.rename_orig); + if(after.undostr[0]) ED_undo_push(C, after.undostr); } @@ -468,10 +481,10 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data) /* give butfunc the original text too */ /* feature used for bone renaming, channels, etc */ - /* XXX goes via uiButHandleRenameFunc now */ -// if(but->func_arg2==NULL) but->func_arg2= data->origstr; + /* afterfunc frees origstr */ + but->rename_orig= data->origstr; + data->origstr= NULL; ui_apply_but_func(C, but); -// if(but->func_arg2==data->origstr) but->func_arg2= NULL; data->retval= but->retval; data->applied= 1; @@ -3484,7 +3497,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData"); data->window= CTX_wm_window(C); data->region= ar; - if( ELEM(but->type, BUT_CURVE, SEARCH_MENU) ); // XXX curve is temp + if( ELEM3(but->type, TEX, BUT_CURVE, SEARCH_MENU) ); // XXX curve is temp else data->interactive= 1; data->state = BUTTON_STATE_INIT; @@ -3630,6 +3643,23 @@ static int ui_handle_button_over(bContext *C, wmEvent *event, ARegion *ar) return WM_UI_HANDLER_CONTINUE; } +/* exported to interface.c: uiButActiveOnly() */ +void ui_button_activate_do(bContext *C, ARegion *ar, uiBut *but) +{ + wmWindow *win= CTX_wm_window(C); + wmEvent event; + + button_activate_init(C, ar, but, BUTTON_ACTIVATE_OVER); + + event= *(win->eventstate); /* XXX huh huh? make api call */ + event.type= EVT_BUT_OPEN; + event.val= KM_PRESS; + event.customdata= but; + event.customdatafree= FALSE; + + ui_do_button(C, but->block, but, &event); +} + static void ui_handle_button_activate(bContext *C, ARegion *ar, uiBut *but, uiButtonActivateType type) { uiBut *oldbut; diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index aef52572fe3..04c0c417fdb 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -186,7 +186,11 @@ struct uiBut { uiButSearchFunc search_func; void *search_arg; - + + uiButHandleRenameFunc rename_func; + void *rename_arg1; + void *rename_orig; + uiLink *link; short linkto[2]; @@ -416,6 +420,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rct /* interface_handlers.c */ +extern void ui_button_activate_do(struct bContext *C, struct ARegion *ar, uiBut *but); extern void ui_button_active_cancel(const struct bContext *C, uiBut *but); extern int ui_button_is_active(struct ARegion *ar); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 5c6c55e956b..1752f48990d 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -3717,6 +3717,42 @@ void OBJECT_OT_editmode_toggle(wmOperatorType *ot) /* *************************** */ +static int posemode_exec(bContext *C, wmOperator *op) +{ + Base *base= CTX_data_active_base(C); + + if(base->object->type==OB_ARMATURE) { + if(base->object==CTX_data_edit_object(C)) { + ED_object_exit_editmode(C, EM_FREEDATA); + ED_armature_enter_posemode(C, base); + } + else if(base->object->flag & OB_POSEMODE) + ED_armature_exit_posemode(C, base); + else + ED_armature_enter_posemode(C, base); + + return OPERATOR_FINISHED; + } + + return OPERATOR_PASS_THROUGH; +} + +void OBJECT_OT_posemode_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Toggle Pose Mode"; + ot->idname= "OBJECT_OT_posemode_toggle"; + ot->description= "Enables or disables posing/selecting bones"; + + /* api callbacks */ + ot->exec= posemode_exec; + ot->poll= ED_operator_object_active; + + /* flag */ + ot->flag= OPTYPE_REGISTER; +} + +/* *********************** */ void check_editmode(int type) { diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index fba49caba28..da1dd458555 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -40,6 +40,7 @@ struct Mesh; /* object_edit.c */ void OBJECT_OT_editmode_toggle(struct wmOperatorType *ot); +void OBJECT_OT_posemode_toggle(struct wmOperatorType *ot); void OBJECT_OT_parent_set(struct wmOperatorType *ot); void OBJECT_OT_parent_clear(struct wmOperatorType *ot); void OBJECT_OT_track_set(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index ad3d13ed511..27d481ef509 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -64,6 +64,7 @@ void ED_operatortypes_object(void) { WM_operatortype_append(OBJECT_OT_editmode_toggle); + WM_operatortype_append(OBJECT_OT_posemode_toggle); WM_operatortype_append(OBJECT_OT_parent_set); WM_operatortype_append(OBJECT_OT_parent_clear); WM_operatortype_append(OBJECT_OT_track_set); @@ -149,6 +150,7 @@ void ED_keymap_object(wmWindowManager *wm) /* Note: this keymap works disregarding mode */ WM_keymap_add_item(keymap, "OBJECT_OT_editmode_toggle", TABKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_posemode_toggle", TABKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_center_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0); /* Note: this keymap gets disabled in non-objectmode, */ diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index c5aea5ae077..812c41f430e 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1088,7 +1088,7 @@ static int set_wpaint(bContext *C, wmOperator *op) /* toggle */ Mesh *me; me= get_mesh(ob); - if(ob->id.lib || me==NULL) return OPERATOR_CANCELLED; + if(ob->id.lib || me==NULL) return OPERATOR_PASS_THROUGH; if(me && me->totface>=MAXINDEX) { error("Maximum number of faces: %d", MAXINDEX-1); @@ -1465,7 +1465,7 @@ static int wpaint_invoke(bContext *C, wmOperator *op, wmEvent *event) // XXX if(multires_level1_test()) return; me= get_mesh(ob); - if(me==NULL || me->totface==0) return OPERATOR_CANCELLED; + if(me==NULL || me->totface==0) return OPERATOR_PASS_THROUGH; /* if nothing was added yet, we make dverts and a vertex deform group */ if (!me->dvert) @@ -1585,7 +1585,7 @@ static int set_vpaint(bContext *C, wmOperator *op) /* toggle */ if(me==NULL || object_data_is_libdata(ob)) { G.f &= ~G_VERTEXPAINT; - return OPERATOR_FINISHED; + return OPERATOR_PASS_THROUGH; } if(me && me->totface>=MAXINDEX) { @@ -1821,7 +1821,7 @@ static int vpaint_invoke(bContext *C, wmOperator *op, wmEvent *event) /* context checks could be a poll() */ me= get_mesh(ob); - if(me==NULL || me->totface==0) return OPERATOR_CANCELLED; + if(me==NULL || me->totface==0) return OPERATOR_PASS_THROUGH; if(me->mcol==NULL) make_vertexcol(CTX_data_scene(C), 0); if(me->mcol==NULL) return OPERATOR_CANCELLED; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 78392fceace..1d478514779 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -319,6 +319,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) switch(wmn->data) { case ND_FRAME: case ND_MODE: + case ND_RENDER_OPTIONS: ED_area_tag_redraw(sa); break; diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index f27dfcb4897..40a365f956c 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -82,6 +82,8 @@ #include "BKE_sequence.h" #include "BKE_utildefines.h" +#include "ED_armature.h" +#include "ED_object.h" #include "ED_screen.h" #include "ED_util.h" #include "ED_types.h" @@ -103,7 +105,9 @@ #include "ED_armature.h" #include "ED_keyframing.h" #include "ED_object.h" +#include "ED_particle.h" #include "ED_screen.h" +#include "ED_view3d.h" #include "outliner_intern.h" @@ -129,18 +133,15 @@ /* ************* XXX **************** */ -static void BIF_undo_push() {} -static void BIF_preview_changed() {} static void error() {} -static int pupmenu() {return 0;} /* ********************************** */ /* ******************** PROTOTYPES ***************** */ -static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int startx, int *starty); -static void outliner_do_object_operation(Scene *scene, SpaceOops *soops, ListBase *lb, - void (*operation_cb)(TreeElement *, TreeStoreElem *, TreeStoreElem *)); +static void outliner_draw_tree_element(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int startx, int *starty); +static void outliner_do_object_operation(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb, + void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *)); /* ******************** PERSISTANT DATA ***************** */ @@ -1429,9 +1430,8 @@ static void outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short /* --- */ -void object_toggle_visibility_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; // XXX Base *base= (Base *)te->directdata; if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); @@ -1446,9 +1446,8 @@ static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_visibility_cb); + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_visibility_cb); - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1470,9 +1469,8 @@ void OUTLINER_OT_visibility_toggle(wmOperatorType *ot) /* --- */ -static void object_toggle_selectability_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void object_toggle_selectability_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; // XXX Base *base= (Base *)te->directdata; if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); @@ -1487,9 +1485,8 @@ static int outliner_toggle_selectability_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_selectability_cb); + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_selectability_cb); - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1511,9 +1508,8 @@ void OUTLINER_OT_selectability_toggle(wmOperatorType *ot) /* --- */ -void object_toggle_renderability_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +void object_toggle_renderability_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; // XXX Base *base= (Base *)te->directdata; if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); @@ -1528,9 +1524,8 @@ static int outliner_toggle_renderability_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_renderability_cb); + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_renderability_cb); - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1562,7 +1557,6 @@ static int outliner_toggle_expanded_exec(bContext *C, wmOperator *op) else outliner_set_flag(soops, &soops->tree, TSE_CLOSED, 1); - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1596,7 +1590,6 @@ static int outliner_toggle_selected_exec(bContext *C, wmOperator *op) soops->storeflag |= SO_TREESTORE_REDRAW; - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1654,7 +1647,6 @@ static int outliner_one_level_exec(bContext *C, wmOperator *op) if(level) outliner_openclose_level(soops, &soops->tree, 1, level-1, 0); } - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -1732,7 +1724,7 @@ void outliner_page_up_down(Scene *scene, ARegion *ar, SpaceOops *soops, int up) /* **** do clicks on items ******* */ -static int tree_element_active_renderlayer(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_renderlayer(bContext *C, TreeElement *te, TreeStoreElem *tselem, int set) { Scene *sce; @@ -1743,6 +1735,7 @@ static int tree_element_active_renderlayer(TreeElement *te, TreeStoreElem *tsele if(set) { sce->r.actlay= tselem->nr; + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, sce); } else { return sce->r.actlay==tselem->nr; @@ -1750,13 +1743,12 @@ static int tree_element_active_renderlayer(TreeElement *te, TreeStoreElem *tsele return 0; } -static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te) +static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { TreeStoreElem *tselem= TREESTORE(te); Scene *sce; Base *base; Object *ob= NULL; - int shift= 0; // XXX /* if id is not object, we search back */ if(te->idcode==ID_OB) ob= (Object *)tselem->id; @@ -1775,7 +1767,7 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops for(base= FIRSTBASE; base; base= base->next) if(base->object==ob) break; if(base) { - if(shift) { + if(set==2) { /* swap select */ if(base->flag & SELECT) ED_base_object_select(base, BA_DESELECT); @@ -1795,11 +1787,14 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops ED_base_object_activate(C, base); /* adds notifier */ } -// XXX if(ob!=obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); -// else countall(); /* exit_editmode calls f() */ + if(ob!=scene->obedit) + ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); + + WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); + } -static int tree_element_active_material(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active_material(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { TreeElement *tes; Object *ob; @@ -1834,13 +1829,12 @@ static int tree_element_active_material(Scene *scene, SpaceOops *soops, TreeElem } } if(set) { -// XXX extern_set_butspace(F5KEY, 0); // force shading buttons - BIF_preview_changed(ID_MA); + WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING, NULL); } return 0; } -static int tree_element_active_texture(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active_texture(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { TreeElement *tep; TreeStoreElem *tselem, *tselemp; @@ -1911,7 +1905,7 @@ static int tree_element_active_texture(Scene *scene, SpaceOops *soops, TreeEleme } -static int tree_element_active_lamp(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active_lamp(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { Object *ob; @@ -1921,14 +1915,13 @@ static int tree_element_active_lamp(Scene *scene, SpaceOops *soops, TreeElement if(set) { // XXX extern_set_butspace(F5KEY, 0); - BIF_preview_changed(ID_LA); } else return 1; return 0; } -static int tree_element_active_world(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active_world(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { TreeElement *tep; TreeStoreElem *tselem=NULL; @@ -1942,7 +1935,7 @@ static int tree_element_active_world(Scene *scene, SpaceOops *soops, TreeElement if(set) { // make new scene active if(sce && scene != sce) { - // XXX ED_screen_set_scene(C, sce); + ED_screen_set_scene(C, sce); } } @@ -1957,7 +1950,7 @@ static int tree_element_active_world(Scene *scene, SpaceOops *soops, TreeElement return 0; } -static int tree_element_active_defgroup(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_defgroup(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Object *ob; @@ -1966,6 +1959,7 @@ static int tree_element_active_defgroup(Scene *scene, TreeElement *te, TreeStore if(set) { ob->actdef= te->index+1; DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); } else { if(ob==OBACT) @@ -1974,13 +1968,14 @@ static int tree_element_active_defgroup(Scene *scene, TreeElement *te, TreeStore return 0; } -static int tree_element_active_posegroup(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_posegroup(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Object *ob= (Object *)tselem->id; if(set) { if (ob->pose) { ob->pose->active_group= te->index+1; + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); } } else { @@ -1991,7 +1986,7 @@ static int tree_element_active_posegroup(Scene *scene, TreeElement *te, TreeStor return 0; } -static int tree_element_active_posechannel(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_posechannel(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Object *ob= (Object *)tselem->id; bPoseChannel *pchan= te->directdata; @@ -1999,10 +1994,16 @@ static int tree_element_active_posechannel(Scene *scene, TreeElement *te, TreeSt if(set) { if(!(pchan->bone->flag & BONE_HIDDEN_P)) { -// XXX if(G.qual & LR_SHIFTKEY) deselectall_posearmature(ob, 2, 0); // 2 = clear active tag -// else deselectall_posearmature(ob, 0, 0); // 0 = deselect - pchan->bone->flag |= BONE_SELECTED|BONE_ACTIVE; + if(set==2) ED_pose_deselectall(ob, 2, 0); // 2 = clear active tag + else ED_pose_deselectall(ob, 0, 0); // 0 = deselect + if(set==2 && (pchan->bone->flag & BONE_SELECTED)) + pchan->bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); + else + pchan->bone->flag |= BONE_SELECTED|BONE_ACTIVE; + + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, ob); + } } else { @@ -2013,17 +2014,22 @@ static int tree_element_active_posechannel(Scene *scene, TreeElement *te, TreeSt return 0; } -static int tree_element_active_bone(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_bone(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { bArmature *arm= (bArmature *)tselem->id; Bone *bone= te->directdata; if(set) { if(!(bone->flag & BONE_HIDDEN_P)) { -// XXX if(G.qual & LR_SHIFTKEY) deselectall_posearmature(OBACT, 2, 0); // 2 is clear active tag -// else deselectall_posearmature(OBACT, 0, 0); - bone->flag |= BONE_SELECTED|BONE_ACTIVE; + if(set==2) ED_pose_deselectall(OBACT, 2, 0); // 2 is clear active tag + else ED_pose_deselectall(OBACT, 0, 0); + if(set==2 && (bone->flag & BONE_SELECTED)) + bone->flag &= ~(BONE_SELECTED|BONE_ACTIVE); + else + bone->flag |= BONE_SELECTED|BONE_ACTIVE; + + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, OBACT); } } else { @@ -2038,21 +2044,21 @@ static int tree_element_active_bone(Scene *scene, TreeElement *te, TreeStoreElem /* ebones only draw in editmode armature */ -static int tree_element_active_ebone(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { EditBone *ebone= te->directdata; -// int shift= 0; // XXX if(set) { if(!(ebone->flag & BONE_HIDDEN_A)) { -// XXX if(shift) deselectall_armature(2, 0); // only clear active tag -// else deselectall_armature(0, 0); // deselect + if(set==2) ED_armature_deselectall(scene->obedit, 2, 0); // only clear active tag + else ED_armature_deselectall(scene->obedit, 0, 0); // deselect ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL|BONE_ACTIVE; // flush to parent? if(ebone->parent && (ebone->flag & BONE_CONNECTED)) ebone->parent->flag |= BONE_TIPSEL; + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, scene->obedit); } } else { @@ -2061,70 +2067,84 @@ static int tree_element_active_ebone(TreeElement *te, TreeStoreElem *tselem, int return 0; } -static int tree_element_active_modifier(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_modifier(bContext *C, TreeElement *te, TreeStoreElem *tselem, int set) { if(set) { + Object *ob= (Object *)tselem->id; + + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + // XXX extern_set_butspace(F9KEY, 0); } return 0; } -static int tree_element_active_psys(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_psys(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { if(set) { -// Object *ob= (Object *)tselem->id; -// ParticleSystem *psys= te->directdata; + Object *ob= (Object *)tselem->id; + ParticleSystem *psys= te->directdata; + + PE_change_act_psys(scene, ob, psys); + WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob); -// XXX PE_change_act_psys(ob, psys); // XXX extern_set_butspace(F7KEY, 0); } return 0; } -static int tree_element_active_constraint(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_constraint(bContext *C, TreeElement *te, TreeStoreElem *tselem, int set) { if(set) { + Object *ob= (Object *)tselem->id; + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); // XXX extern_set_butspace(F7KEY, 0); } return 0; } -static int tree_element_active_text(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active_text(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { // XXX removed return 0; } /* generic call for ID data check or make/check active in UI */ -static int tree_element_active(Scene *scene, SpaceOops *soops, TreeElement *te, int set) +static int tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { switch(te->idcode) { case ID_MA: - return tree_element_active_material(scene, soops, te, set); + return tree_element_active_material(C, scene, soops, te, set); case ID_WO: - return tree_element_active_world(scene, soops, te, set); + return tree_element_active_world(C, scene, soops, te, set); case ID_LA: - return tree_element_active_lamp(scene, soops, te, set); + return tree_element_active_lamp(C, scene, soops, te, set); case ID_TE: - return tree_element_active_texture(scene, soops, te, set); + return tree_element_active_texture(C, scene, soops, te, set); case ID_TXT: - return tree_element_active_text(scene, soops, te, set); + return tree_element_active_text(C, scene, soops, te, set); } return 0; } -static int tree_element_active_pose(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_pose(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Object *ob= (Object *)tselem->id; + Base *base= object_in_scene(ob, scene); if(set) { -// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); -// if(ob->flag & OB_POSEMODE) exit_posemode(); -// else enter_posemode(); + if(scene->obedit) + ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); + + if(ob->flag & OB_POSEMODE) + ED_armature_exit_posemode(C, base); + else + ED_armature_enter_posemode(C, base); } else { if(ob->flag & OB_POSEMODE) return 1; @@ -2132,7 +2152,7 @@ static int tree_element_active_pose(TreeElement *te, TreeStoreElem *tselem, int return 0; } -static int tree_element_active_sequence(TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_sequence(bContext *C, TreeElement *te, TreeStoreElem *tselem, int set) { Sequence *seq= (Sequence*) te->directdata; @@ -2146,7 +2166,7 @@ static int tree_element_active_sequence(TreeElement *te, TreeStoreElem *tselem, return(0); } -static int tree_element_active_sequence_dup(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) +static int tree_element_active_sequence_dup(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set) { Sequence *seq, *p; Editing *ed= seq_give_editing(scene, FALSE); @@ -2180,59 +2200,57 @@ static int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, switch(tselem->type) { case TSE_DEFGROUP: - return tree_element_active_defgroup(scene, te, tselem, set); + return tree_element_active_defgroup(C, scene, te, tselem, set); case TSE_BONE: - return tree_element_active_bone(scene, te, tselem, set); + return tree_element_active_bone(C, scene, te, tselem, set); case TSE_EBONE: - return tree_element_active_ebone(te, tselem, set); + return tree_element_active_ebone(C, scene, te, tselem, set); case TSE_MODIFIER: - return tree_element_active_modifier(te, tselem, set); + return tree_element_active_modifier(C, te, tselem, set); case TSE_LINKED_OB: - if(set) tree_element_set_active_object(C, scene, soops, te); + if(set) tree_element_set_active_object(C, scene, soops, te, set); else if(tselem->id==(ID *)OBACT) return 1; break; case TSE_LINKED_PSYS: - return tree_element_active_psys(te, tselem, set); + return tree_element_active_psys(C, scene, te, tselem, set); break; case TSE_POSE_BASE: - return tree_element_active_pose(te, tselem, set); + return tree_element_active_pose(C, scene, te, tselem, set); break; case TSE_POSE_CHANNEL: - return tree_element_active_posechannel(scene, te, tselem, set); + return tree_element_active_posechannel(C, scene, te, tselem, set); case TSE_CONSTRAINT: - return tree_element_active_constraint(te, tselem, set); + return tree_element_active_constraint(C, te, tselem, set); case TSE_R_LAYER: - return tree_element_active_renderlayer(te, tselem, set); + return tree_element_active_renderlayer(C, te, tselem, set); case TSE_POSEGRP: - return tree_element_active_posegroup(scene, te, tselem, set); + 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, te, tselem, set); break; case TSE_SEQUENCE_DUP: - return tree_element_active_sequence_dup(scene, te, tselem, set); + return tree_element_active_sequence_dup(C, scene, te, tselem, set); break; } return 0; } -static int do_outliner_mouse_event(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, short event, float *mval) +static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int extend, float *mval) { - int shift= 0, ctrl= 0; // XXX if(mval[1]>te->ys && mval[1]ys+OL_H) { TreeStoreElem *tselem= TREESTORE(te); int openclose= 0; - /* open close icon, three things to check */ - if(event==RETKEY || event==PADENTER) openclose= 1; // enter opens/closes always - else if((te->flag & TE_ICONROW)==0) { // hidden icon, no open/close - if( mval[0]>te->xs && mval[0]xs+OL_X) openclose= 1; + /* open close icon */ + if((te->flag & TE_ICONROW)==0) { // hidden icon, no open/close + if( mval[0]>te->xs && mval[0]xs+OL_X) + openclose= 1; } if(openclose) { - /* all below close/open? */ - if(shift) { + if(extend) { tselem->flag &= ~TSE_CLOSED; outliner_set_flag(soops, &te->subtree, TSE_CLOSED, !outliner_has_one_flag(soops, &te->subtree, TSE_CLOSED, 1)); } @@ -2241,95 +2259,67 @@ static int do_outliner_mouse_event(bContext *C, Scene *scene, ARegion *ar, Space else tselem->flag |= TSE_CLOSED; } - + soops->storeflag |= SO_TREESTORE_REDRAW; + return 1; } /* name and first icon */ else if(mval[0]>te->xs && mval[0]xend) { - /* activate a name button? */ - if(event==LEFTMOUSE) { + /* always makes active object */ + if(tselem->type!=TSE_SEQUENCE && tselem->type!=TSE_SEQ_STRIP && tselem->type!=TSE_SEQUENCE_DUP) + tree_element_set_active_object(C, scene, soops, te, 1 + (extend!=0 && tselem->type==0)); - if (ctrl) { - if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS)) - error("Cannot edit builtin name"); - else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP)) - error("Cannot edit sequence name"); - else if(tselem->id->lib) { -// XXX error_libdata(); - } else if(te->idcode == ID_LI && te->parent) { - error("Cannot edit the path of an indirectly linked library"); - } else { - tselem->flag |= TSE_TEXTBUT; + if(tselem->type==0) { // the lib blocks + /* editmode? */ + if(te->idcode==ID_SCE) { + if(scene!=(Scene *)tselem->id) { + ED_screen_set_scene(C, (Scene *)tselem->id); } - } else { - /* always makes active object */ - if(tselem->type!=TSE_SEQUENCE && tselem->type!=TSE_SEQ_STRIP && tselem->type!=TSE_SEQUENCE_DUP) - tree_element_set_active_object(C, scene, soops, te); - - if(tselem->type==0) { // the lib blocks - /* editmode? */ - if(te->idcode==ID_SCE) { - if(scene!=(Scene *)tselem->id) { - ED_screen_set_scene(C, (Scene *)tselem->id); - } - } - else if(ELEM5(te->idcode, ID_ME, ID_CU, ID_MB, ID_LT, ID_AR)) { -// XXX if(obedit) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); -// else { -// enter_editmode(EM_WAITCURSOR); -// extern_set_butspace(F9KEY, 0); -// } - } else { // rest of types - tree_element_active(scene, soops, te, 1); - } - - } - else tree_element_type_active(C, scene, soops, te, tselem, 1); } - } - else if(event==RIGHTMOUSE) { - /* select object that's clicked on and popup context menu */ - if (!(tselem->flag & TSE_SELECTED)) { - - if ( outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1) ) - outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0); - - tselem->flag |= TSE_SELECTED; - /* redraw, same as outliner_select function */ - soops->storeflag |= SO_TREESTORE_REDRAW; -// XXX screen_swapbuffers(); + else if(ELEM5(te->idcode, ID_ME, ID_CU, ID_MB, ID_LT, ID_AR)) { + Object *obedit= CTX_data_edit_object(C); + if(obedit) + ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); + else { + ED_object_enter_editmode(C, EM_WAITCURSOR); + // XXX extern_set_butspace(F9KEY, 0); + } + } else { // rest of types + tree_element_active(C, scene, soops, te, 1); } - outliner_operation_menu(scene, ar, soops); } + else tree_element_type_active(C, scene, soops, te, tselem, 1+(extend!=0)); + return 1; } } for(te= te->subtree.first; te; te= te->next) { - if(do_outliner_mouse_event(C, scene, ar, soops, te, event, mval)) return 1; + if(do_outliner_item_activate(C, scene, ar, soops, te, extend, mval)) return 1; } return 0; } /* event can enterkey, then it opens/closes */ -static int outliner_activate_click(bContext *C, wmOperator *op, wmEvent *event) +static int outliner_item_activate(bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); TreeElement *te; float fmval[2]; + int extend= RNA_boolean_get(op->ptr, "extend"); UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, fmval, fmval+1); for(te= soops->tree.first; te; te= te->next) { - if(do_outliner_mouse_event(C, scene, ar, soops, te, event->type, fmval)) break; + if(do_outliner_item_activate(C, scene, ar, soops, te, extend, fmval)) break; } if(te) { - BIF_undo_push("Outliner click event"); + ED_undo_push(C, "Outliner click event"); } else { short selecting= -1; @@ -2342,24 +2332,150 @@ static int outliner_activate_click(bContext *C, wmOperator *op, wmEvent *event) /* select relevant row */ outliner_select(soops, &soops->tree, &row, &selecting); - // XXX old flag found in old code, do we still use this? - //soops->storeflag |= SO_TREESTORE_REDRAW; + soops->storeflag |= SO_TREESTORE_REDRAW; - BIF_undo_push("Outliner selection event"); + ED_undo_push(C, "Outliner selection event"); } - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; } -void OUTLINER_OT_activate_click(wmOperatorType *ot) +void OUTLINER_OT_item_activate(wmOperatorType *ot) { - ot->name= "Activate Click"; - ot->idname= "OUTLINER_OT_activate_click"; + ot->name= "Activate Item"; + ot->idname= "OUTLINER_OT_item_activate"; - ot->invoke= outliner_activate_click; + ot->invoke= outliner_item_activate; + + ot->poll= ED_operator_outliner_active; + + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection for activation."); +} + +/* *********** */ + +static int do_outliner_item_openclose(bContext *C, SpaceOops *soops, TreeElement *te, int all, float *mval) +{ + + if(mval[1]>te->ys && mval[1]ys+OL_H) { + TreeStoreElem *tselem= TREESTORE(te); + + /* all below close/open? */ + if(all) { + tselem->flag &= ~TSE_CLOSED; + outliner_set_flag(soops, &te->subtree, TSE_CLOSED, !outliner_has_one_flag(soops, &te->subtree, TSE_CLOSED, 1)); + } + else { + if(tselem->flag & TSE_CLOSED) tselem->flag &= ~TSE_CLOSED; + else tselem->flag |= TSE_CLOSED; + } + + soops->storeflag |= SO_TREESTORE_REDRAW; + + return 1; + } + + for(te= te->subtree.first; te; te= te->next) { + if(do_outliner_item_openclose(C, soops, te, all, mval)) + return 1; + } + return 0; + +} + +/* event can enterkey, then it opens/closes */ +static int outliner_item_openclose(bContext *C, wmOperator *op, wmEvent *event) +{ + ARegion *ar= CTX_wm_region(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + TreeElement *te; + float fmval[2]; + int all= RNA_boolean_get(op->ptr, "all"); + + UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, fmval, fmval+1); + + for(te= soops->tree.first; te; te= te->next) { + if(do_outliner_item_openclose(C, soops, te, all, fmval)) + break; + } + + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +void OUTLINER_OT_item_openclose(wmOperatorType *ot) +{ + ot->name= "Open/Close Item"; + ot->idname= "OUTLINER_OT_item_openclose"; + + ot->invoke= outliner_item_openclose; + + ot->poll= ED_operator_outliner_active; + + RNA_def_boolean(ot->srna, "all", 1, "All", "Close or open all items."); + +} + + +/* ********************************************** */ + +static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, TreeElement *te, float *mval) +{ + + if(mval[1]>te->ys && mval[1]ys+OL_H) { + TreeStoreElem *tselem= TREESTORE(te); + + /* name and first icon */ + if(mval[0]>te->xs && mval[0]xend) { + + if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS)) + error("Cannot edit builtin name"); + else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP)) + error("Cannot edit sequence name"); + else if(tselem->id->lib) { + // XXX error_libdata(); + } else if(te->idcode == ID_LI && te->parent) { + error("Cannot edit the path of an indirectly linked library"); + } else { + tselem->flag |= TSE_TEXTBUT; + ED_region_tag_redraw(ar); + } + } + return 1; + } + + for(te= te->subtree.first; te; te= te->next) { + if(do_outliner_item_rename(C, ar, soops, te, mval)) return 1; + } + return 0; +} + +static int outliner_item_rename(bContext *C, wmOperator *op, wmEvent *event) +{ + ARegion *ar= CTX_wm_region(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + TreeElement *te; + float fmval[2]; + + UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, fmval, fmval+1); + + for(te= soops->tree.first; te; te= te->next) { + if(do_outliner_item_rename(C, ar, soops, te, fmval)) break; + } + + return OPERATOR_FINISHED; +} + + +void OUTLINER_OT_item_rename(wmOperatorType *ot) +{ + ot->name= "Rename Item"; + ot->idname= "OUTLINER_OT_item_rename"; + + ot->invoke= outliner_item_rename; ot->poll= ED_operator_outliner_active; } @@ -2447,7 +2563,6 @@ static int outliner_show_active_exec(bContext *C, wmOperator *op) so->storeflag |= SO_TREESTORE_REDRAW; } - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -2656,7 +2771,6 @@ static int outliner_show_hierarchy_exec(bContext *C, wmOperator *op) /* recursively open/close levels */ tree_element_show_hierarchy(scene, soops, &soops->tree); - // XXX need proper notifiers here instead ED_region_tag_redraw(ar); return OPERATOR_FINISHED; @@ -2733,13 +2847,10 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb, tselem= TREESTORE(te); if(tselem->flag & TSE_SELECTED) { if(tselem->type) { - if(tselem->type==TSE_SEQUENCE) - *datalevel= TSE_SEQUENCE; - else if(tselem->type==TSE_SEQ_STRIP) - *datalevel= TSE_SEQ_STRIP; - else if(tselem->type==TSE_SEQUENCE_DUP) - *datalevel= TSE_SEQUENCE_DUP; - else if(*datalevel!=tselem->type) *datalevel= -1; + if(*datalevel==0) + *datalevel= tselem->type; + else if(*datalevel!=tselem->type) + *datalevel= -1; } else { int idcode= GS(tselem->id->name); @@ -2769,7 +2880,7 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb, } } -static void unlink_material_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void unlink_material_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { Material **matar=NULL; int a, totcol=0; @@ -2803,7 +2914,7 @@ static void unlink_material_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreEl } } -static void unlink_texture_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void unlink_texture_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { MTex **mtex= NULL; int a; @@ -2832,7 +2943,7 @@ static void unlink_texture_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreEle } } -static void unlink_group_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void unlink_group_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { Group *group= (Group *)tselem->id; @@ -2848,8 +2959,8 @@ static void unlink_group_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem } } -static void outliner_do_libdata_operation(SpaceOops *soops, ListBase *lb, - void (*operation_cb)(TreeElement *, TreeStoreElem *, TreeStoreElem *)) +static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb, + void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *)) { TreeElement *te; TreeStoreElem *tselem; @@ -2859,20 +2970,19 @@ static void outliner_do_libdata_operation(SpaceOops *soops, ListBase *lb, if(tselem->flag & TSE_SELECTED) { if(tselem->type==0) { TreeStoreElem *tsep= TREESTORE(te->parent); - operation_cb(te, tsep, tselem); + operation_cb(C, scene, te, tsep, tselem); } } if((tselem->flag & TSE_CLOSED)==0) { - outliner_do_libdata_operation(soops, &te->subtree, operation_cb); + outliner_do_libdata_operation(C, scene, soops, &te->subtree, operation_cb); } } } /* */ -static void object_select_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void object_select_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; // XXX Base *base= (Base *)te->directdata; if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); @@ -2882,9 +2992,8 @@ static void object_select_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem } } -static void object_deselect_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void object_deselect_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; Base *base= (Base *)te->directdata; if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); @@ -2894,28 +3003,31 @@ static void object_deselect_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreEl } } -static void object_delete_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; Base *base= (Base *)te->directdata; - if(base==NULL) base= object_in_scene((Object *)tselem->id, scene); + if(base==NULL) + base= object_in_scene((Object *)tselem->id, scene); if(base) { // check also library later -// XXX if(obedit==base->object) exit_editmode(EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); + if(scene->obedit==base->object) + ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); if(base==BASACT) { - G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE); -// XXX setcursor_space(SPACE_VIEW3D, CURSOR_STD); + ED_view3d_exit_paint_modes(C); } -// XXX free_and_unlink_base(base); + ED_base_object_free_and_unlink(scene, base); te->directdata= NULL; tselem->id= NULL; } + + WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); + } -static void id_local_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void id_local_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { if(tselem->id->lib && (tselem->id->flag & LIB_EXTERN)) { tselem->id->lib= NULL; @@ -2924,9 +3036,8 @@ static void id_local_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tse } } -static void group_linkobs2scene_cb(TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) +static void group_linkobs2scene_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem) { - Scene *scene= NULL; Group *group= (Group *)tselem->id; GroupObject *gob; Base *base; @@ -2949,8 +3060,8 @@ static void group_linkobs2scene_cb(TreeElement *te, TreeStoreElem *tsep, TreeSto } } -static void outliner_do_object_operation(Scene *scene, SpaceOops *soops, ListBase *lb, - void (*operation_cb)(TreeElement *, TreeStoreElem *, TreeStoreElem *)) +static void outliner_do_object_operation(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb, + void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *)) { TreeElement *te; TreeStoreElem *tselem; @@ -2962,18 +3073,20 @@ static void outliner_do_object_operation(Scene *scene, SpaceOops *soops, ListBas // when objects selected in other scenes... dunno if that should be allowed Scene *sce= (Scene *)outliner_search_back(soops, te, ID_SCE); if(sce && scene != sce) { -// XXX ED_screen_set_scene(C, sce); + ED_screen_set_scene(C, sce); } - operation_cb(te, NULL, tselem); + operation_cb(C, scene, te, NULL, tselem); } } if((tselem->flag & TSE_CLOSED)==0) { - outliner_do_object_operation(scene, soops, &te->subtree, operation_cb); + outliner_do_object_operation(C, scene, soops, &te->subtree, operation_cb); } } } +/* ******************************************** */ + static void pchan_cb(int event, TreeElement *te, TreeStoreElem *tselem) { bPoseChannel *pchan= (bPoseChannel *)te->directdata; @@ -3049,145 +3162,387 @@ static void outliner_do_data_operation(SpaceOops *soops, int type, int event, Li } } -void outliner_del(Scene *scene, ARegion *ar, SpaceOops *soops) +void outliner_del(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops) { -// XXX if(soops->outlinevis==SO_SEQUENCE) -// del_seq(); -// else { -// outliner_do_object_operation(scene, soops, &soops->tree, object_delete_cb); -// DAG_scene_sort(scene); -// BIF_undo_push("Delete Objects"); -// } + if(soops->outlinevis==SO_SEQUENCE) + ;// del_seq(); + else { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb); + DAG_scene_sort(scene); + ED_undo_push(C, "Delete Objects"); + } +} + +/* **************************************** */ + +static EnumPropertyItem prop_object_op_types[] = { + {1, "SELECT", 0, "Select", ""}, + {2, "DESELECT", 0, "Deselect", ""}, + {4, "DELETE", 0, "Delete", ""}, + {6, "TOGVIS", 0, "Toggle Visible", ""}, + {7, "TOGSEL", 0, "Toggle Selectable", ""}, + {8, "TOGREN", 0, "Toggle Renderable", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int outliner_object_operation_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + int event; + char *str; + + /* check for invalid states */ + if (soops == NULL) + return OPERATOR_CANCELLED; + + event= RNA_enum_get(op->ptr, "type"); + + if(event==1) { + Scene *sce= scene; // to be able to delete, scenes are set... + outliner_do_object_operation(C, scene, soops, &soops->tree, object_select_cb); + if(scene != sce) { + ED_screen_set_scene(C, sce); + } + + str= "Select Objects"; + } + else if(event==2) { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_deselect_cb); + str= "Deselect Objects"; + } + else if(event==4) { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb); + DAG_scene_sort(scene); + str= "Delete Objects"; + } + else if(event==5) { /* disabled, see above (ton) */ + outliner_do_object_operation(C, scene, soops, &soops->tree, id_local_cb); + str= "Localized Objects"; + } + else if(event==6) { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_visibility_cb); + str= "Toggle Visibility"; + } + else if(event==7) { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_selectability_cb); + str= "Toggle Selectability"; + } + else if(event==8) { + outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_renderability_cb); + str= "Toggle Renderability"; + } + + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + + ED_undo_push(C, str); + + return OPERATOR_FINISHED; } -void outliner_operation_menu(Scene *scene, ARegion *ar, SpaceOops *soops) +void OUTLINER_OT_object_operation(wmOperatorType *ot) { + /* identifiers */ + ot->name= "Outliner Object Operation"; + ot->idname= "OUTLINER_OT_object_operation"; + ot->description= ""; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= outliner_object_operation_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= 0; + + RNA_def_enum(ot->srna, "type", prop_object_op_types, 0, "Object Operation", ""); +} + +/* **************************************** */ + +static EnumPropertyItem prop_group_op_types[] = { + {1, "UNLINK", 0, "Unlink", ""}, + {2, "LOCAL", 0, "Make Local", ""}, + {3, "LINK", 0, "Link Group Objects to Scene", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int outliner_group_operation_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + int event; + + /* 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); + ED_undo_push(C, "Unlink group"); + } + else if(event==2) { + outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb); + ED_undo_push(C, "Localized Data"); + } + else if(event==3) { + outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_linkobs2scene_cb); + ED_undo_push(C, "Link Group Objects to Scene"); + } + + + WM_event_add_notifier(C, NC_GROUP, NULL); + + return OPERATOR_FINISHED; +} + + +void OUTLINER_OT_group_operation(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Outliner Group Operation"; + ot->idname= "OUTLINER_OT_group_operation"; + ot->description= ""; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= outliner_group_operation_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= 0; + + RNA_def_enum(ot->srna, "type", prop_group_op_types, 0, "Group Operation", ""); +} + +/* **************************************** */ + +static EnumPropertyItem prop_id_op_types[] = { + {1, "UNLINK", 0, "Unlink", ""}, + {2, "LOCAL", 0, "Make Local", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int outliner_id_operation_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); int scenelevel=0, objectlevel=0, idlevel=0, datalevel=0; + int event; + + /* check for invalid states */ + if (soops == NULL) + return OPERATOR_CANCELLED; set_operation_types(soops, &soops->tree, &scenelevel, &objectlevel, &idlevel, &datalevel); - if(scenelevel) { - if(objectlevel || datalevel || idlevel) error("Mixed selection"); - else pupmenu("Scene Operations%t|Delete"); - } - else if(objectlevel) { - short event= pupmenu("Select%x1|Deselect%x2|Delete%x4|Toggle Visible%x6|Toggle Selectable%x7|Toggle Renderable%x8"); /* make local: does not work... it doesn't set lib_extern flags... so data gets lost */ - if(event>0) { - char *str=""; - - if(event==1) { - Scene *sce= scene; // to be able to delete, scenes are set... - outliner_do_object_operation(scene, soops, &soops->tree, object_select_cb); - if(scene != sce) { -// XXX ED_screen_set_scene(C, sce); - } - - str= "Select Objects"; - } - else if(event==2) { - outliner_do_object_operation(scene, soops, &soops->tree, object_deselect_cb); - str= "Deselect Objects"; - } - else if(event==4) { - outliner_do_object_operation(scene, soops, &soops->tree, object_delete_cb); - DAG_scene_sort(scene); - str= "Delete Objects"; - } - else if(event==5) { /* disabled, see above (ton) */ - outliner_do_object_operation(scene, soops, &soops->tree, id_local_cb); - str= "Localized Objects"; - } - else if(event==6) { - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_visibility_cb); - str= "Toggle Visibility"; - } - else if(event==7) { - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_selectability_cb); - str= "Toggle Selectability"; - } - else if(event==8) { - outliner_do_object_operation(scene, soops, &soops->tree, object_toggle_renderability_cb); - str= "Toggle Renderability"; - } - - BIF_undo_push(str); + event= RNA_enum_get(op->ptr, "type"); + + if(event==1) { + switch(idlevel) { + case ID_MA: + outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_material_cb); + ED_undo_push(C, "Unlink material"); + break; + case ID_TE: + outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_texture_cb); + ED_undo_push(C, "Unlink texture"); + break; + default: + BKE_report(op->reports, RPT_WARNING, "Not Yet"); } } - else if(idlevel) { - if(idlevel==-1 || datalevel) error("Mixed selection"); - else { - short event; - if (idlevel==ID_GR) - event = pupmenu("Unlink %x1|Make Local %x2|Link Group Objects to Scene%x3"); - else - event = pupmenu("Unlink %x1|Make Local %x2"); - - - if(event==1) { - switch(idlevel) { - case ID_MA: - outliner_do_libdata_operation(soops, &soops->tree, unlink_material_cb); - BIF_undo_push("Unlink material"); - break; - case ID_TE: - outliner_do_libdata_operation(soops, &soops->tree, unlink_texture_cb); - BIF_undo_push("Unlink texture"); - break; - case ID_GR: - outliner_do_libdata_operation(soops, &soops->tree, unlink_group_cb); - BIF_undo_push("Unlink group"); - break; - default: - error("Not yet..."); - } - } - else if(event==2) { - outliner_do_libdata_operation(soops, &soops->tree, id_local_cb); - BIF_undo_push("Localized Data"); - } - else if(event==3 && idlevel==ID_GR) { - outliner_do_libdata_operation(soops, &soops->tree, group_linkobs2scene_cb); - BIF_undo_push("Link Group Objects to Scene"); - } - } - } - else if(datalevel) { - if(datalevel==-1) error("Mixed selection"); - else { - if(datalevel==TSE_POSE_CHANNEL) { - short event= pupmenu("PoseChannel Operations%t|Select%x1|Deselect%x2|Hide%x3|Unhide%x4"); - if(event>0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, pchan_cb); - BIF_undo_push("PoseChannel operation"); - } - } - else if(datalevel==TSE_BONE) { - short event= pupmenu("Bone Operations%t|Select%x1|Deselect%x2|Hide%x3|Unhide%x4"); - if(event>0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, bone_cb); - BIF_undo_push("Bone operation"); - } - } - else if(datalevel==TSE_EBONE) { - short event= pupmenu("EditBone Operations%t|Select%x1|Deselect%x2|Hide%x3|Unhide%x4"); - if(event>0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, ebone_cb); - BIF_undo_push("EditBone operation"); - } - } - else if(datalevel==TSE_SEQUENCE) { - short event= pupmenu("Sequence Operations %t|Select %x1"); - if(event>0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, sequence_cb); - } - } - - } + else if(event==2) { + outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb); + ED_undo_push(C, "Localized Data"); } + + /* wrong notifier still... */ + WM_event_add_notifier(C, NC_OBJECT, NULL); + + return OPERATOR_FINISHED; } + +void OUTLINER_OT_id_operation(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Outliner ID data Operation"; + ot->idname= "OUTLINER_OT_id_operation"; + ot->description= ""; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= outliner_id_operation_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= 0; + + RNA_def_enum(ot->srna, "type", prop_id_op_types, 0, "ID data Operation", ""); +} + +/* **************************************** */ + +static EnumPropertyItem prop_data_op_types[] = { + {1, "SELECT", 0, "Select", ""}, + {2, "DESELECT", 0, "Deselect", ""}, + {3, "HIDE", 0, "Hide", ""}, + {4, "UNHIDE", 0, "Unhide", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int outliner_data_operation_exec(bContext *C, wmOperator *op) +{ + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + int scenelevel=0, objectlevel=0, idlevel=0, datalevel=0; + int event; + + /* check for invalid states */ + if (soops == NULL) + return OPERATOR_CANCELLED; + + event= RNA_enum_get(op->ptr, "type"); + set_operation_types(soops, &soops->tree, &scenelevel, &objectlevel, &idlevel, &datalevel); + + if(datalevel==TSE_POSE_CHANNEL) { + if(event>0) { + outliner_do_data_operation(soops, datalevel, event, &soops->tree, pchan_cb); + 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); + 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); + 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); + } + } + + return OPERATOR_FINISHED; +} + + +void OUTLINER_OT_data_operation(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Outliner Data Operation"; + ot->idname= "OUTLINER_OT_data_operation"; + ot->description= ""; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= outliner_data_operation_exec; + ot->poll= ED_operator_outliner_active; + + ot->flag= 0; + + RNA_def_enum(ot->srna, "type", prop_data_op_types, 0, "Data Operation", ""); +} + + +/* ******************** */ + + +static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, wmEvent *event, float *mval) +{ + + if(mval[1]>te->ys && mval[1]ys+OL_H) { + int scenelevel=0, objectlevel=0, idlevel=0, datalevel=0; + TreeStoreElem *tselem= TREESTORE(te); + + /* select object that's clicked on and popup context menu */ + if (!(tselem->flag & TSE_SELECTED)) { + + if ( outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1) ) + outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0); + + tselem->flag |= TSE_SELECTED; + /* redraw, same as outliner_select function */ + soops->storeflag |= SO_TREESTORE_REDRAW; + ED_region_tag_redraw(ar); + } + + set_operation_types(soops, &soops->tree, &scenelevel, &objectlevel, &idlevel, &datalevel); + + if(scenelevel) { + //if(objectlevel || datalevel || idlevel) error("Mixed selection"); + //else pupmenu("Scene Operations%t|Delete"); + } + else if(objectlevel) { + WM_operator_name_call(C, "OUTLINER_OT_object_operation", WM_OP_INVOKE_REGION_WIN, NULL); + } + else if(idlevel) { + if(idlevel==-1 || datalevel) error("Mixed selection"); + else { + if (idlevel==ID_GR) + WM_operator_name_call(C, "OUTLINER_OT_group_operation", WM_OP_INVOKE_REGION_WIN, NULL); + else + WM_operator_name_call(C, "OUTLINER_OT_id_operation", WM_OP_INVOKE_REGION_WIN, NULL); + } + } + else if(datalevel) { + if(datalevel==-1) error("Mixed selection"); + else { + WM_operator_name_call(C, "OUTLINER_OT_data_operation", WM_OP_INVOKE_REGION_WIN, NULL); + } + } + + return 1; + } + + for(te= te->subtree.first; te; te= te->next) { + if(do_outliner_operation_event(C, scene, ar, soops, te, event, mval)) + return 1; + } + return 0; +} + + +static int outliner_operation(bContext *C, wmOperator *op, wmEvent *event) +{ + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); + SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + TreeElement *te; + float fmval[2]; + + UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, fmval, fmval+1); + + for(te= soops->tree.first; te; te= te->next) { + if(do_outliner_operation_event(C, scene, ar, soops, te, event, fmval)) break; + } + + return OPERATOR_FINISHED; +} + +/* Menu only! Calls other operators */ +void OUTLINER_OT_operation(wmOperatorType *ot) +{ + ot->name= "Execute Operation"; + ot->idname= "OUTLINER_OT_operation"; + + ot->invoke= outliner_operation; + + ot->poll= ED_operator_outliner_active; +} + + + /* ***************** ANIMATO OPERATIONS ********************************** */ /* KeyingSet and Driver Creation - Helper functions */ @@ -3878,7 +4233,7 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen } } -static void outliner_draw_iconrow(Scene *scene, SpaceOops *soops, ListBase *lb, int level, int *offsx, int ys) +static void outliner_draw_iconrow(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb, int level, int *offsx, int ys) { TreeElement *te; TreeStoreElem *tselem; @@ -3895,7 +4250,7 @@ static void outliner_draw_iconrow(Scene *scene, SpaceOops *soops, ListBase *lb, if(tselem->type==0) { if(te->idcode==ID_OB) active= (OBACT==(Object *)tselem->id); else if(scene->obedit && scene->obedit->data==tselem->id) active= 1; // XXX use context? - else active= tree_element_active(scene, soops, te, 0); + else active= tree_element_active(C, scene, soops, te, 0); } else active= tree_element_type_active(NULL, scene, soops, te, tselem, 0); @@ -3917,12 +4272,12 @@ static void outliner_draw_iconrow(Scene *scene, SpaceOops *soops, ListBase *lb, /* this tree element always has same amount of branches, so dont draw */ if(tselem->type!=TSE_R_LAYER) - outliner_draw_iconrow(scene, soops, &te->subtree, level+1, offsx, ys); + outliner_draw_iconrow(C, scene, soops, &te->subtree, level+1, offsx, ys); } } -static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int startx, int *starty) +static void outliner_draw_tree_element(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int startx, int *starty) { TreeElement *ten; TreeStoreElem *tselem; @@ -3960,12 +4315,12 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo } } -// XXX context? else if(obedit && obedit->data==tselem->id) { -// glColor4ub(255, 255, 255, 100); -// active= 2; -// } + else if(scene->obedit && scene->obedit->data==tselem->id) { + glColor4ub(255, 255, 255, 100); + active= 2; + } else { - if(tree_element_active(scene, soops, te, 0)) { + if(tree_element_active(C, scene, soops, te, 0)) { glColor4ub(220, 220, 255, 100); active= 2; } @@ -4044,7 +4399,7 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo glEnable(GL_BLEND); glPixelTransferf(GL_ALPHA_SCALE, 0.5); - outliner_draw_iconrow(scene, soops, &te->subtree, 0, &tempx, *starty+2); + outliner_draw_iconrow(C, scene, soops, &te->subtree, 0, &tempx, *starty+2); glPixelTransferf(GL_ALPHA_SCALE, 1.0); glDisable(GL_BLEND); @@ -4061,7 +4416,7 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo if((tselem->flag & TSE_CLOSED)==0) { for(ten= te->subtree.first; ten; ten= ten->next) { - outliner_draw_tree_element(scene, ar, soops, ten, startx+OL_X, starty); + outliner_draw_tree_element(C, scene, ar, soops, ten, startx+OL_X, starty); } } } @@ -4140,20 +4495,12 @@ static void outliner_draw_selection(ARegion *ar, SpaceOops *soops, ListBase *lb, } -static void outliner_draw_tree(Scene *scene, ARegion *ar, SpaceOops *soops) +static void outliner_draw_tree(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops) { TreeElement *te; int starty, startx; float col[4]; - -#if 0 // XXX was #ifdef INTERNATIONAL - /* Maybe the INTERNATIONAL was really for check about freetype2 ? - * anyway I think that we can remove this now - Diego - */ - FTF_SetFontSize('l'); - BIF_SetScale(1.0); -#endif - + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // only once if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) { @@ -4180,7 +4527,7 @@ static void outliner_draw_tree(Scene *scene, ARegion *ar, SpaceOops *soops) starty= (int)ar->v2d.tot.ymax-OL_H; startx= 0; for(te= soops->tree.first; te; te= te->next) { - outliner_draw_tree_element(scene, ar, soops, te, startx, &starty); + outliner_draw_tree_element(C, scene, ar, soops, te, startx, &starty); } } @@ -4255,6 +4602,7 @@ static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2) } } } + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); } @@ -4276,16 +4624,18 @@ static void restrictbutton_sel_cb(bContext *C, void *poin, void *poin2) } } } + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); } static void restrictbutton_rend_cb(bContext *C, void *poin, void *poin2) { + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, poin); } static void restrictbutton_r_lay_cb(bContext *C, void *poin, void *poin2) { - /* XXX redraws */ + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, poin); } static void restrictbutton_modifier_cb(bContext *C, void *poin, void *poin2) @@ -4296,26 +4646,40 @@ static void restrictbutton_modifier_cb(bContext *C, void *poin, void *poin2) DAG_object_flush_update(scene, ob, OB_RECALC_DATA); object_handle_update(scene, ob); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob); } static void restrictbutton_bone_cb(bContext *C, void *poin, void *poin2) { - /* XXX redraws */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); } -static void namebutton_cb(bContext *C, void *tep, void *oldnamep) +static void namebutton_cb(bContext *C, void *tsep, char *oldname) { - SpaceOops *soops= NULL; // XXXcurarea->spacedata.first; - Scene *scene= NULL; // XXX + SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); TreeStore *ts= soops->treestore; - TreeElement *te= tep; + TreeStoreElem *tselem= tsep; - if(ts && te) { - TreeStoreElem *tselem= TREESTORE(te); + if(ts && tselem) { + TreeElement *te= outliner_find_tse(soops, tselem); if(tselem->type==0) { test_idbutton(tselem->id->name+2); // library.c, unique name and alpha sort + switch(GS(tselem->id->name)) { + case ID_MA: + WM_event_add_notifier(C, NC_MATERIAL, NULL); break; + case ID_TE: + WM_event_add_notifier(C, NC_TEXTURE, NULL); break; + case ID_IM: + WM_event_add_notifier(C, NC_IMAGE, NULL); break; + case ID_SCE: + WM_event_add_notifier(C, NC_SCENE, NULL); break; + default: + WM_event_add_notifier(C, NC_MATERIAL, NULL); break; + } /* Check the library target exists */ if (te->idcode == ID_LI) { char expanded[FILE_MAXDIR + FILE_MAXFILE]; @@ -4343,8 +4707,9 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep) /* restore bone name */ BLI_strncpy(newname, ebone->name, 32); - BLI_strncpy(ebone->name, oldnamep, 32); -// XXX armature_bone_rename(obedit->data, oldnamep, newname); + BLI_strncpy(ebone->name, oldname, 32); + ED_armature_bone_rename(obedit->data, oldname, newname); + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, OBACT); } } break; @@ -4356,13 +4721,14 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep) char newname[32]; // always make current object active - tree_element_set_active_object(C, scene, soops, te); + tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ BLI_strncpy(newname, bone->name, 32); - BLI_strncpy(bone->name, oldnamep, 32); -// XXX armature_bone_rename(ob->data, oldnamep, newname); + BLI_strncpy(bone->name, oldname, 32); + ED_armature_bone_rename(ob->data, oldname, newname); + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } break; case TSE_POSE_CHANNEL: @@ -4372,13 +4738,14 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep) char newname[32]; // always make current object active - tree_element_set_active_object(C, scene, soops, te); + tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ BLI_strncpy(newname, pchan->name, 32); - BLI_strncpy(pchan->name, oldnamep, 32); -// XXX armature_bone_rename(ob->data, oldnamep, newname); + BLI_strncpy(pchan->name, oldname, 32); + ED_armature_bone_rename(ob->data, oldname, newname); + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } break; case TSE_POSEGRP: @@ -4387,6 +4754,7 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep) bActionGroup *grp= te->directdata; BLI_uniquename(&ob->pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), 32); + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } break; case TSE_R_LAYER: @@ -4402,7 +4770,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar TreeElement *te; TreeStoreElem *tselem; Object *ob = NULL; - + for(te= lb->first; te; te= te->next) { tselem= TREESTORE(te); if(te->ys >= ar->v2d.cur.ymin && te->ys <= ar->v2d.cur.ymax) { @@ -4421,7 +4789,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_RENDER, 0, ICON_RESTRICT_RENDER_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow renderability"); - uiButSetFunc(bt, restrictbutton_rend_cb, NULL, NULL); + uiButSetFunc(bt, restrictbutton_rend_cb, scene, ob); uiBlockSetEmboss(block, UI_EMBOSS); } @@ -4431,7 +4799,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitI(block, ICONTOGN, SCE_LAY_DISABLE, 0, ICON_CHECKBOX_HLT-1, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, te->directdata, 0, 0, 0, 0, "Render this RenderLayer"); - uiButSetFunc(bt, restrictbutton_r_lay_cb, NULL, NULL); + uiButSetFunc(bt, restrictbutton_r_lay_cb, tselem->id, NULL); uiBlockSetEmboss(block, UI_EMBOSS); } @@ -4442,13 +4810,13 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar /* NOTE: tselem->nr is short! */ bt= uiDefIconButBitI(block, ICONTOG, tselem->nr, 0, ICON_CHECKBOX_HLT-1, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, layflag, 0, 0, 0, 0, "Render this Pass"); - uiButSetFunc(bt, restrictbutton_r_lay_cb, NULL, NULL); + uiButSetFunc(bt, restrictbutton_r_lay_cb, tselem->id, NULL); layflag++; /* is lay_xor */ if(ELEM6(tselem->nr, SCE_PASS_SPEC, SCE_PASS_SHADOW, SCE_PASS_AO, SCE_PASS_REFLECT, SCE_PASS_REFRACT, SCE_PASS_RADIO)) bt= uiDefIconButBitI(block, TOG, tselem->nr, 0, (*layflag & tselem->nr)?ICON_DOT:ICON_BLANK1, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, layflag, 0, 0, 0, 0, "Exclude this Pass from Combined"); - uiButSetFunc(bt, restrictbutton_r_lay_cb, NULL, NULL); + uiButSetFunc(bt, restrictbutton_r_lay_cb, tselem->id, NULL); uiBlockSetEmboss(block, UI_EMBOSS); } @@ -4537,7 +4905,7 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa } } -static void outliner_buttons(uiBlock *block, ARegion *ar, SpaceOops *soops, ListBase *lb) +static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, SpaceOops *soops, ListBase *lb) { uiBut *bt; TreeElement *te; @@ -4549,6 +4917,7 @@ static void outliner_buttons(uiBlock *block, ARegion *ar, SpaceOops *soops, List if(te->ys >= ar->v2d.cur.ymin && te->ys <= ar->v2d.cur.ymax) { if(tselem->flag & TSE_TEXTBUT) { + /* If we add support to rename Sequence. * need change this. */ @@ -4563,17 +4932,15 @@ static void outliner_buttons(uiBlock *block, ARegion *ar, SpaceOops *soops, List if(dx<50) dx= 50; bt= uiDefBut(block, TEX, OL_NAMEBUTTON, "", (short)te->xs+2*OL_X-4, (short)te->ys, dx+10, OL_H-1, te->name, 1.0, (float)len-1, 0, 0, ""); - uiButSetFunc(bt, namebutton_cb, te, NULL); - - // signal for button to open -// XXX addqueue(curarea->win, BUT_ACTIVATE, OL_NAMEBUTTON); + uiButSetRenameFunc(bt, namebutton_cb, tselem); - /* otherwise keeps open on ESC */ - tselem->flag &= ~TSE_TEXTBUT; + /* returns false if button got removed */ + if( 0 == uiButActiveOnly(C, block, bt) ) + tselem->flag &= ~TSE_TEXTBUT; } } - if((tselem->flag & TSE_CLOSED)==0) outliner_buttons(block, ar, soops, &te->subtree); + if((tselem->flag & TSE_CLOSED)==0) outliner_buttons(C, block, ar, soops, &te->subtree); } } @@ -4627,11 +4994,11 @@ void draw_outliner(const bContext *C) /* draw outliner stuff (background and hierachy lines) */ outliner_back(ar, soops); - outliner_draw_tree(scene, ar, soops); + outliner_draw_tree((bContext *)C, scene, ar, soops); /* draw icons and names */ block= uiBeginBlock(C, ar, "outliner buttons", UI_EMBOSS); - outliner_buttons(block, ar, soops, &soops->tree); + outliner_buttons(C, block, ar, soops, &soops->tree); if(ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) { /* draw rna buttons */ diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 69f88fbcca7..fc305361fe1 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -115,11 +115,17 @@ void outliner_header_buttons(const struct bContext *C, struct ARegion *ar); /* outliner.c */ void outliner_free_tree(struct ListBase *lb); -void outliner_operation_menu(struct Scene *scene, struct ARegion *ar, struct SpaceOops *soops); void outliner_select(struct SpaceOops *soops, struct ListBase *lb, int *index, short *selecting); void draw_outliner(const struct bContext *C); -void OUTLINER_OT_activate_click(struct wmOperatorType *ot); +void OUTLINER_OT_item_activate(struct wmOperatorType *ot); +void OUTLINER_OT_item_openclose(struct wmOperatorType *ot); +void OUTLINER_OT_item_rename(struct wmOperatorType *ot); +void OUTLINER_OT_operation(struct wmOperatorType *ot); +void OUTLINER_OT_object_operation(struct wmOperatorType *ot); +void OUTLINER_OT_group_operation(struct wmOperatorType *ot); +void OUTLINER_OT_id_operation(struct wmOperatorType *ot); +void OUTLINER_OT_data_operation(struct wmOperatorType *ot); void OUTLINER_OT_show_one_level(struct wmOperatorType *ot); void OUTLINER_OT_show_active(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 6fddd16c174..2e11eb379b4 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -47,8 +47,15 @@ void outliner_operatortypes(void) { - WM_operatortype_append(OUTLINER_OT_activate_click); - + WM_operatortype_append(OUTLINER_OT_item_activate); + WM_operatortype_append(OUTLINER_OT_item_openclose); + WM_operatortype_append(OUTLINER_OT_item_rename); + WM_operatortype_append(OUTLINER_OT_operation); + WM_operatortype_append(OUTLINER_OT_object_operation); + WM_operatortype_append(OUTLINER_OT_group_operation); + WM_operatortype_append(OUTLINER_OT_id_operation); + WM_operatortype_append(OUTLINER_OT_data_operation); + WM_operatortype_append(OUTLINER_OT_show_one_level); WM_operatortype_append(OUTLINER_OT_show_active); WM_operatortype_append(OUTLINER_OT_show_hierarchy); @@ -71,12 +78,19 @@ void outliner_keymap(wmWindowManager *wm) { ListBase *keymap= WM_keymap_listbase(wm, "Outliner", SPACE_OUTLINER, 0); - WM_keymap_verify_item(keymap, "OUTLINER_OT_activate_click", LEFTMOUSE, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_item_activate", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "extend", 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_item_activate", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); - WM_keymap_verify_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_item_openclose", RETKEY, KM_PRESS, 0, 0)->ptr, "all", 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_item_openclose", RETKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "all", 1); - WM_keymap_verify_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "OUTLINER_OT_show_active", PADPERIOD, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "OUTLINER_OT_operation", RIGHTMOUSE, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PADPERIOD, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADPLUSKEY, KM_PRESS, 0, 0); /* open */ RNA_boolean_set(WM_keymap_add_item(keymap, "OUTLINER_OT_show_one_level", PADMINUS, KM_PRESS, 0, 0)->ptr, "open", 0); /* close */ diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 4ddb586beb4..4737fb53a1a 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -120,6 +120,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_MODE: case ND_KEYINGSET: case ND_FRAME: + case ND_RENDER_OPTIONS: ED_region_tag_redraw(ar); break; } From 55e3a4a6f0a5aa6bca0c54da4693b40fbb6ac0d6 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 25 Jul 2009 14:35:08 +0000 Subject: [PATCH 371/512] 2.5 Scene RNA: * Added Projection Painting RNA. Note: The properties doesn't seem to be accessible yet via datablocks. Brecht please check. --- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_scene.c | 79 ++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index c60d5710e17..2368f7be3de 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -221,6 +221,7 @@ extern StructRNA RNA_ID; extern StructRNA RNA_IDProperty; extern StructRNA RNA_IDPropertyGroup; extern StructRNA RNA_Image; +extern StructRNA RNA_ImagePaintSettings; extern StructRNA RNA_ImageSequence; extern StructRNA RNA_ImageTexture; extern StructRNA RNA_ImageUser; diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 86e23c5bc8e..ea1e04d41b7 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -323,6 +323,82 @@ static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr) #else +static void rna_def_tpaint(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem texture_paint_items[] = { + {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", "Draw brush"}, + {PAINT_TOOL_SOFTEN, "SOFTEN", 0, "Soften", "Soften brush"}, + {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", "Smear brush"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem projection_paint_items[] = { + {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", "Draw brush"}, + {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", "Smear brush"}, + {PAINT_TOOL_CLONE, "CLONE", 0, "Clone", "Clone brush, use RMB to drag source image"}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "ImagePaintSettings", NULL); + RNA_def_struct_nested(brna, srna, "Scene"); + RNA_def_struct_ui_text(srna, "Texture Painting", ""); + + prop= RNA_def_property(srna, "texture_paint_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "tool"); + RNA_def_property_enum_items(prop, texture_paint_items); + RNA_def_property_ui_text(prop, "Paint Mode", ""); + + /********** Projection Painting **********/ + + prop= RNA_def_property(srna, "projection_paint_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "tool"); + RNA_def_property_enum_items(prop, projection_paint_items); + RNA_def_property_ui_text(prop, "Paint Mode", ""); + + /* Boolean */ + + prop= RNA_def_property(srna, "use_projection", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_DISABLE); + RNA_def_property_ui_text(prop, "Project Paint", "Use projection painting for improved consistency in the brush strokes"); + + prop= RNA_def_property(srna, "occlude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); + RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)"); + + prop= RNA_def_property(srna, "cull", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); + RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)"); + + prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); + RNA_def_property_ui_text(prop, "Normal", "Paint most on faces pointing towards the view"); + + prop= RNA_def_property(srna, "stencil_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK); + RNA_def_property_ui_text(prop, "Stencil Layer", "Set the mask layer from the UV layer buttons"); + + prop= RNA_def_property(srna, "invert_mask", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK_INV); + RNA_def_property_ui_text(prop, "Invert", "Invert the mask"); + + prop= RNA_def_property(srna, "clone_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE); + RNA_def_property_ui_text(prop, "Clone Layer", "Use another UV layer as clone source, otherwise use 3D the cursor as the source"); + + /* Integer */ + + prop= RNA_def_property(srna, "normal_angle", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "normal_angle"); + RNA_def_property_range(prop, 10, 90); + RNA_def_property_ui_text(prop, "Angle", "Paint most on faces pointing towards the view acording to this angle"); + + prop= RNA_def_property(srna, "bleed", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "seam_bleed"); + RNA_def_property_range(prop, 0, 8); + RNA_def_property_ui_text(prop, "Bleed", "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)"); +} + static void rna_def_sculpt(BlenderRNA *brna) { StructRNA *srna; @@ -482,6 +558,9 @@ static void rna_def_tool_settings(BlenderRNA *brna) /* Sculpt */ rna_def_sculpt(brna); + + /* Texture Paint */ + rna_def_tpaint(brna); } void rna_def_render_layer_common(StructRNA *srna, int scene) From 5b12cb937890f1f85f365b4b1658cef241384ea2 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 25 Jul 2009 15:05:51 +0000 Subject: [PATCH 372/512] 2.5 Fix in previous commit: Outliner data view, rna levels didn't open/close correctly. --- source/blender/editors/space_outliner/outliner.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 40a365f956c..6ac094b3ad3 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -2259,7 +2259,6 @@ static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, Spa else tselem->flag |= TSE_CLOSED; } - soops->storeflag |= SO_TREESTORE_REDRAW; return 1; } @@ -2371,8 +2370,6 @@ static int do_outliner_item_openclose(bContext *C, SpaceOops *soops, TreeElement if(tselem->flag & TSE_CLOSED) tselem->flag &= ~TSE_CLOSED; else tselem->flag |= TSE_CLOSED; } - - soops->storeflag |= SO_TREESTORE_REDRAW; return 1; } From 24d39c0de496cb8c3640564757cae2c383efa154 Mon Sep 17 00:00:00 2001 From: Elia Sarti Date: Sat, 25 Jul 2009 15:26:06 +0000 Subject: [PATCH 373/512] 2.5 / Drag & Drop Commit of basic architecture. Sorry, nothing fun to play with yet. Added two events: MOUSEDRAG and MOUSEDROP. MOUSEDRAG is sent when left-mouse clicking and then moving the cursor and every time the cursor is moved until the user releases the mouse button, thus generating a MOUSEDROP. Also added two dummy drag operators in view3d and outliner (place holders for now). Brecht and Ton: feel free to check/edit especially the event system code. I'm not sure that's the right way to do it. Also, I'm getting some mem leaks which I suspect are caused by my code. --- .../blender/editors/space_outliner/outliner.c | 51 +++++++++++++++++++ .../editors/space_outliner/outliner_intern.h | 2 + .../editors/space_outliner/outliner_ops.c | 5 ++ .../editors/space_view3d/view3d_intern.h | 1 + .../blender/editors/space_view3d/view3d_ops.c | 4 ++ .../editors/space_view3d/view3d_select.c | 50 ++++++++++++++++++ .../makesdna/DNA_windowmanager_types.h | 4 +- .../windowmanager/intern/wm_event_system.c | 30 +++++++++++ source/blender/windowmanager/wm_event_types.h | 3 ++ 9 files changed, 149 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 6ac094b3ad3..0df0cb46473 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -3452,6 +3452,57 @@ void OUTLINER_OT_data_operation(wmOperatorType *ot) } +/* ****** Drag & Drop ****** */ + +static int outliner_drag_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + wmWindow *win= CTX_wm_window(C); + Object *ob= CTX_data_active_object(C); + PointerRNA ptr; + + RNA_pointer_create(NULL, &RNA_Object, ob, &ptr); + + return OPERATOR_RUNNING_MODAL; +} + +static int outliner_drag_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + switch(event->type) { + case MOUSEDRAG: + + break; + case MOUSEDROP: + return OPERATOR_FINISHED; + case ESCKEY: + return OPERATOR_CANCELLED; + } + + return OPERATOR_RUNNING_MODAL; +} + +static int outliner_drag_exec(bContext *C, wmOperator *op) +{ + return OPERATOR_FINISHED; +} + +void OUTLINER_OT_drag(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Drag"; + ot->idname= "OUTLINER_OT_drag"; + + /* api callbacks */ + ot->invoke= outliner_drag_invoke; + ot->modal= outliner_drag_modal; + ot->exec= outliner_drag_exec; + + ot->poll= ED_operator_outliner_active; + + /* flags */ + /* ot->flag= OPTYPE_UNDO; */ +} + + /* ******************** */ diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index fc305361fe1..d5986f3ebbd 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -127,6 +127,8 @@ void OUTLINER_OT_group_operation(struct wmOperatorType *ot); void OUTLINER_OT_id_operation(struct wmOperatorType *ot); void OUTLINER_OT_data_operation(struct wmOperatorType *ot); +void OUTLINER_OT_drag(struct wmOperatorType *ot); + void OUTLINER_OT_show_one_level(struct wmOperatorType *ot); void OUTLINER_OT_show_active(struct wmOperatorType *ot); void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 2e11eb379b4..417851982a3 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -56,6 +56,8 @@ void outliner_operatortypes(void) WM_operatortype_append(OUTLINER_OT_id_operation); WM_operatortype_append(OUTLINER_OT_data_operation); + WM_operatortype_append(OUTLINER_OT_drag); + WM_operatortype_append(OUTLINER_OT_show_one_level); WM_operatortype_append(OUTLINER_OT_show_active); WM_operatortype_append(OUTLINER_OT_show_hierarchy); @@ -87,6 +89,9 @@ void outliner_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OUTLINER_OT_operation", RIGHTMOUSE, KM_PRESS, 0, 0); + /* drag & drop */ + WM_keymap_add_item(keymap, "OUTLINER_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); + WM_keymap_add_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 3e9382509f4..382ba68e95f 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -115,6 +115,7 @@ void VIEW3D_OT_select_extend(struct wmOperatorType *ot); void VIEW3D_OT_select_circle(struct wmOperatorType *ot); void VIEW3D_OT_select_border(struct wmOperatorType *ot); void VIEW3D_OT_select_lasso(struct wmOperatorType *ot); +void VIEW3D_OT_drag(struct wmOperatorType *ot); /* view3d_view.c */ void VIEW3D_OT_smoothview(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 112847272e5..69b297b2e03 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -73,6 +73,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_view_center); WM_operatortype_append(VIEW3D_OT_select); WM_operatortype_append(VIEW3D_OT_select_border); + WM_operatortype_append(VIEW3D_OT_drag); WM_operatortype_append(VIEW3D_OT_clip_border); WM_operatortype_append(VIEW3D_OT_select_circle); WM_operatortype_append(VIEW3D_OT_smoothview); @@ -216,6 +217,9 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW3D_OT_camera_to_view", PAD0, KM_PRESS, KM_ALT|KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_snap_menu", SKEY, KM_PRESS, KM_SHIFT, 0); + + /* drag & drop */ + WM_keymap_add_item(keymap, "VIEW3D_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); /* radial control */ RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 2537982210a..8182069c142 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1598,6 +1598,56 @@ void VIEW3D_OT_select(wmOperatorType *ot) } +/* ****** Drag & Drop ****** */ + +static int view3d_drag_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + wmWindow *win= CTX_wm_window(C); + Object *ob= CTX_data_active_object(C); + PointerRNA ptr; + + RNA_pointer_create(NULL, &RNA_Object, ob, &ptr); + + return OPERATOR_RUNNING_MODAL; +} + +static int view3d_drag_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + switch(event->type) { + case MOUSEDRAG: + + break; + case MOUSEDROP: + return OPERATOR_FINISHED; + case ESCKEY: + return OPERATOR_CANCELLED; + } + + return OPERATOR_RUNNING_MODAL; +} + +static int view3d_drag_exec(bContext *C, wmOperator *op) +{ + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_drag(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Drag"; + ot->idname= "VIEW3D_OT_drag"; + + /* api callbacks */ + ot->invoke= view3d_drag_invoke; + ot->modal= view3d_drag_modal; + ot->exec= view3d_drag_exec; + ot->poll= ED_operator_view3d_active; + + /* flags */ + /* ot->flag= OPTYPE_UNDO; */ +} + + /* -------------------- circle select --------------------------------------------- */ static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int index) diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 895bc943e9f..f6f0fc1a753 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -146,7 +146,9 @@ typedef struct wmWindow { short cursor; /* current mouse cursor type */ short lastcursor; /* for temp waitcursor */ short addmousemove; /* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */ - int pad3; + short downstate; /* used for drag & drop: remembers mouse button down state */ + short downx, downy; /* mouse coords for button down event */ + short pad3, pad4, pad5; struct wmEvent *eventstate; /* storage for event system */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 7f40ec401a8..78c7f7a7383 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1435,6 +1435,19 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) update_tablet_data(win, &event); wm_event_add(win, &event); + + cx = abs((win->downx - event.x)); + cy = abs((win->downy - event.y)); + + /* probably minimum drag size should be #defined instead of hardcoded 3 */ + if (win->downstate == LEFTMOUSE && (cx > 3 || cy > 3)) { + wmEvent dragevt= *evt; + dragevt.type= MOUSEDRAG; + dragevt.customdata= NULL; + dragevt.customdatafree= 0; + + wm_event_add(win, &dragevt); + } } break; } @@ -1458,6 +1471,23 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) update_tablet_data(win, &event); wm_event_add(win, &event); + + if (event.val) { + win->downstate= event.type; + win->downx= event.x; + win->downy= event.y; + } + else if (win->downstate) { + wmEvent dropevt= *evt; + dropevt.type= MOUSEDROP; + dropevt.customdata= NULL; + dropevt.customdatafree= 0; + win->downstate= 0; + win->downx= 0; + win->downy= 0; + + wm_event_add(win, &dropevt); + } break; } diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index 6f64cdbde32..6e7186542de 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -56,6 +56,9 @@ /* only use if you want user option switch possible */ #define ACTIONMOUSE 0x005 #define SELECTMOUSE 0x006 + /* drag & drop support */ +#define MOUSEDRAG 0x007 +#define MOUSEDROP 0x008 /* defaults from ghost */ #define WHEELUPMOUSE 0x00a #define WHEELDOWNMOUSE 0x00b From 6502b927f8108262b78931e36955df49df502ef5 Mon Sep 17 00:00:00 2001 From: Elia Sarti Date: Sat, 25 Jul 2009 19:10:24 +0000 Subject: [PATCH 374/512] 2.5 / RNA Added RNA_pointer_set as counterpart for RNA_pointer_get (i.e. sets pointer property by name lookup) --- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_access.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 2368f7be3de..d4532e78239 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -717,6 +717,7 @@ int RNA_string_length(PointerRNA *ptr, const char *name); void RNA_string_set(PointerRNA *ptr, const char *name, const char *value); PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name); +void RNA_pointer_set(PointerRNA *ptr, const char *name, PointerRNA ptr_value); void RNA_pointer_add(PointerRNA *ptr, const char *name); void RNA_collection_begin(PointerRNA *ptr, const char *name, CollectionPropertyIterator *iter); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 0a4cc2a023e..b0db6ae9de5 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -2524,6 +2524,18 @@ PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name) } } +void RNA_pointer_set(PointerRNA *ptr, const char *name, PointerRNA ptr_value) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) { + RNA_property_pointer_set(ptr, prop, ptr_value); + } + else { + printf("RNA_pointer_set: %s.%s not found.\n", ptr->type->identifier, name); + } +} + void RNA_pointer_add(PointerRNA *ptr, const char *name) { PropertyRNA *prop= RNA_struct_find_property(ptr, name); From 88097e99099b8bea9c9e435d7c728afaa8bc24ff Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 25 Jul 2009 19:34:38 +0000 Subject: [PATCH 375/512] - BGE Python API converting a mesh from a python arg was broken but happened to work if the uninitialized pointer was not NULL. - iris.c - looks like a copy/paste error, was using rect where it could not have been initialized. --- source/blender/imbuf/intern/iris.c | 4 ++-- source/gameengine/Ketsji/KX_MeshProxy.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c index eba148cb8a5..7b8c383ddb9 100644 --- a/source/blender/imbuf/intern/iris.c +++ b/source/blender/imbuf/intern/iris.c @@ -245,7 +245,6 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) int xsize, ysize, zsize; int bpp, rle, cur, badorder; ImBuf * ibuf; - uchar * rect; /*printf("new iris\n");*/ @@ -436,6 +435,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) if (bpp == 1) { + uchar * rect; if (image.zsize == 1){ rect = (uchar *) ibuf->rect; @@ -467,7 +467,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, int flags) fbase = ibuf->rect_float; for (x = ibuf->x * ibuf->y; x > 0; x--) { fbase[0] = 1; - fbase[1] = rect[2] = rect[3]; + fbase[1] = fbase[2] = fbase[3]; fbase += 4; } } else if (image.zsize == 2){ diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp index 11effa1ca98..ee5813ad854 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.cpp +++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp @@ -347,7 +347,7 @@ bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none KX_MeshProxy *kx_mesh = static_castBGE_PROXY_REF(value); /* sets the error */ - if (*object==NULL) { + if (kx_mesh==NULL) { PyErr_Format(PyExc_SystemError, "%s, " BGE_PROXY_ERROR_MSG, error_prefix); return false; } From 90a08b1c78389bd032394ffed1ecd3b5c76d8ed7 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 25 Jul 2009 19:59:18 +0000 Subject: [PATCH 376/512] 2.5: Object Buttons File: * Renamed the file for consistency. --- release/ui/{buttons_objects.py => buttons_object.py} | 1 - 1 file changed, 1 deletion(-) rename release/ui/{buttons_objects.py => buttons_object.py} (99%) diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_object.py similarity index 99% rename from release/ui/buttons_objects.py rename to release/ui/buttons_object.py index 27ce093af6d..8caeaacf5c1 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_object.py @@ -176,4 +176,3 @@ bpy.types.register(OBJECT_PT_groups) bpy.types.register(OBJECT_PT_display) bpy.types.register(OBJECT_PT_duplication) bpy.types.register(OBJECT_PT_animation) - From dff9dce1cdcb5250797f529456649510d2396096 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sat, 25 Jul 2009 20:16:56 +0000 Subject: [PATCH 377/512] Windows: fixing user preference window opening full screen --- intern/ghost/intern/GHOST_WindowWin32.cpp | 26 ++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 759951802af..366adb3ab86 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -117,18 +117,34 @@ GHOST_WindowWin32::GHOST_WindowWin32( m_maxPressure(0) { if (state != GHOST_kWindowStateFullScreen) { - // take taskbar into account RECT rect; + GHOST_TUns32 tw, th; + + width += GetSystemMetrics(SM_CXSIZEFRAME)*2; + height += GetSystemMetrics(SM_CYSIZEFRAME)*2 + GetSystemMetrics(SM_CYCAPTION); + + // take taskbar into account SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0); - height = rect.bottom - rect.top; - width = rect.right - rect.left; + th = rect.bottom - rect.top; + tw = rect.right - rect.left; + + if(tw < width) + { + width = tw; + left = rect.left; + } + if(th < height) + { + height = th; + top = rect.top; + } m_hWnd = ::CreateWindow( s_windowClassName, // pointer to registered class name title, // pointer to window name WS_OVERLAPPEDWINDOW, // window style - rect.left, // horizontal position of window - rect.top, // vertical position of window + left, // horizontal position of window + top, // vertical position of window width, // window width height, // window height 0, // handle to parent or owner window From 1c00eacca2b084d7189de33cb75e8612cb542030 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 25 Jul 2009 20:51:45 +0000 Subject: [PATCH 378/512] fix memleak in BGE py api - action.channelNames --- source/gameengine/Converter/BL_ActionActuator.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index 2df33f6ed4d..88d6d294dc0 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -1106,13 +1106,16 @@ PyObject* BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYA { BL_ActionActuator* self= static_cast(self_v); PyObject *ret= PyList_New(0); + PyObject *item; bPose *pose= ((BL_ArmatureObject*)self->GetParent())->GetOrigPose(); if(pose) { bPoseChannel *pchan; for(pchan= (bPoseChannel *)pose->chanbase.first; pchan; pchan= (bPoseChannel *)pchan->next) { - PyList_Append(ret, PyString_FromString(pchan->name)); + item= PyString_FromString(pchan->name); + PyList_Append(ret, item); + Py_DECREF(item); } } From eb80ce4d7f24778e1edcc3c88a9b071dd2e25b4c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 25 Jul 2009 21:31:17 +0000 Subject: [PATCH 379/512] 2.5: Materials * Diffuse/specular ramps works again. * Wire is now a material type next to Surface and Halo. * Removed Volume material type option until it is actually there. * Some button layout tweaks. --- release/ui/buttons_material.py | 90 ++++++++----------- source/blender/blenloader/intern/readfile.c | 4 + source/blender/makesdna/DNA_material_types.h | 3 +- source/blender/makesrna/intern/rna_material.c | 52 ++++++++--- .../render/intern/source/convertblender.c | 12 +-- .../blender/render/intern/source/rayshade.c | 4 +- source/blender/render/intern/source/shadbuf.c | 4 +- .../blender/render/intern/source/shadeinput.c | 2 +- source/blender/render/intern/source/zbuf.c | 8 +- .../Converter/BL_BlenderDataConversion.cpp | 2 +- 10 files changed, 101 insertions(+), 80 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index c6678d64c6e..9a28a74d0f7 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -75,40 +75,23 @@ class MATERIAL_PT_material(MaterialButtonsPanel): if mat: layout.itemR(mat, "type", expand=True) - if mat.type == 'SURFACE': + if mat.type in ('SURFACE', 'WIRE', 'VOLUME'): split = layout.split() sub = split.column() - sub.itemR(mat, "z_buffer") sub.itemR(mat, "alpha", slider=True) sub.itemR(mat, "ambient", slider=True) sub.itemR(mat, "emit") + sub.itemR(mat, "translucency", slider=True) sub = split.column() + sub.itemR(mat, "z_transparency") sub.itemR(mat, "shadeless") - sub.itemR(mat, "wireframe") - sub.itemR(mat, "tangent_shading") sub.itemR(mat, "cubic", slider=True) - elif mat.type == 'VOLUME': - split = layout.split() - - sub = split.column() - sub.itemR(mat, "z_buffer") - sub.itemR(mat, "alpha", slider=True) - sub.itemR(mat, "ambient", slider=True) - sub.itemR(mat, "emit") - - sub = split.column() - sub.itemR(mat, "shadeless") - sub.itemR(mat, "wireframe") - - sub.itemR(mat, "tangent_shading") - sub.itemR(mat, "cubic", slider=True) elif mat.type == 'HALO': layout.itemR(mat, "alpha", slider=True) - class MATERIAL_PT_strand(MaterialButtonsPanel): __idname__= "MATERIAL_PT_strand" @@ -158,17 +141,23 @@ class MATERIAL_PT_options(MaterialButtonsPanel): sub.itemR(mat, "full_oversampling") sub.itemR(mat, "sky") sub.itemR(mat, "exclude_mist") + sub.itemR(mat, "invert_z") + + col = sub.column(align=True) + col.itemL(text="Light Group:") + col.itemR(mat, "light_group", text="") + row = col.row() + row.active = mat.light_group + row.itemR(mat, "light_group_exclusive", text="Exclusive") + sub = split.column() sub.itemR(mat, "face_texture") colsub = sub.column() colsub.active = mat.face_texture colsub.itemR(mat, "face_texture_alpha") - sub.itemR(mat, "invert_z") - sub.itemR(mat, "light_group") - sub.itemR(mat, "light_group_exclusive") - - - + sub.itemR(mat, "vertex_color_paint") + sub.itemR(mat, "vertex_color_light") + sub.itemR(mat, "object_color") class MATERIAL_PT_shadows(MaterialButtonsPanel): __idname__= "MATERIAL_PT_shadows" @@ -201,7 +190,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type != "HALO") + return (mat and mat.type != 'HALO') def draw(self, context): layout = self.layout @@ -211,18 +200,14 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "diffuse_color", text="") - sub.itemR(mat, "vertex_color_paint") - sub.itemR(mat, "vertex_color_light") + row = sub.row() + row.active = mat.shadeless== False + row.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) sub = split.column() sub.active = mat.shadeless== False - sub.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) - sub.itemR(mat, "translucency", slider=True) - sub.itemR(mat, "object_color") - - row = layout.row() - row.active = mat.shadeless== False - row.itemR(mat, "diffuse_shader", text="Shader") + sub.itemR(mat, "diffuse_shader", text="") + sub.itemR(mat, "use_diffuse_ramp", text="Ramp") split = layout.split() split.active = mat.shadeless== False @@ -240,8 +225,8 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "diffuse_fresnel_factor", text="Factor") - layout.template_color_ramp(mat.diffuse_ramp, expand=True) - + if mat.use_diffuse_ramp: + layout.template_color_ramp(mat.diffuse_ramp, expand=True) class MATERIAL_PT_specular(MaterialButtonsPanel): __idname__= "MATERIAL_PT_specular" @@ -249,7 +234,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type != "HALO") + return (mat and mat.type != 'HALO') def draw(self, context): layout = self.layout @@ -261,29 +246,30 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "specular_color", text="") - sub = split.column() sub.itemR(mat, "specular_reflection", text="Intensity", slider=True) - - layout.itemR(mat, "spec_shader", text="Shader") + + sub = split.column() + sub.itemR(mat, "specular_shader", text="") + sub.itemR(mat, "use_specular_ramp", text="Ramp") split = layout.split() sub = split.column() - if mat.spec_shader in ('COOKTORR', 'PHONG'): + if mat.specular_shader in ('COOKTORR', 'PHONG'): sub.itemR(mat, "specular_hardness", text="Hardness") - if mat.spec_shader == 'BLINN': + if mat.specular_shader == 'BLINN': sub.itemR(mat, "specular_hardness", text="Hardness") sub = split.column() sub.itemR(mat, "specular_ior", text="IOR") - if mat.spec_shader == 'WARDISO': + if mat.specular_shader == 'WARDISO': sub.itemR(mat, "specular_slope", text="Slope") - if mat.spec_shader == 'TOON': + if mat.specular_shader == 'TOON': sub.itemR(mat, "specular_toon_size", text="Size") sub = split.column() sub.itemR(mat, "specular_toon_smooth", text="Smooth") - layout.template_color_ramp(mat.specular_ramp, expand=True) - + if mat.use_specular_ramp: + layout.template_color_ramp(mat.specular_ramp, expand=True) class MATERIAL_PT_sss(MaterialButtonsPanel): __idname__= "MATERIAL_PT_sss" @@ -292,7 +278,7 @@ class MATERIAL_PT_sss(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type == "SURFACE") + return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) def draw_header(self, context): layout = self.layout @@ -331,7 +317,7 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type == "SURFACE") + return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) def draw_header(self, context): layout = self.layout @@ -375,7 +361,7 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type == "SURFACE") + return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) def draw_header(self, context): layout = self.layout @@ -419,7 +405,7 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): def poll(self, context): mat = context.material - return (mat and mat.type == "HALO") + return (mat and mat.type == 'HALO') def draw(self, context): layout = self.layout diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 7551d902ad8..9d427778810 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9281,6 +9281,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } for(ma = main->mat.first; ma; ma = ma->id.next) { + if(ma->mode & MA_WIRE) { + ma->material_type= MA_TYPE_WIRE; + ma->mode &= ~MA_WIRE; + } if(ma->mode & MA_HALO) { ma->material_type= MA_TYPE_HALO; ma->mode &= ~MA_HALO; diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index 1f93bcf1317..5b566a244b4 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -148,6 +148,7 @@ typedef struct Material { #define MA_TYPE_SURFACE 0 #define MA_TYPE_HALO 1 #define MA_TYPE_VOLUME 2 +#define MA_TYPE_WIRE 3 /* flag */ /* for render */ @@ -159,7 +160,7 @@ typedef struct Material { #define MA_TRACEBLE 1 #define MA_SHADOW 2 #define MA_SHLESS 4 -#define MA_WIRE 8 +#define MA_WIRE 8 /* deprecated */ #define MA_VERTEXCOL 16 #define MA_HALO_SOFT 16 #define MA_HALO 32 /* deprecated */ diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 2eab89e43b2..f8cead563ff 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -166,6 +166,28 @@ static void rna_MaterialTextureSlot_enabled_set(PointerRNA *ptr, int value) } } +static void rna_Material_use_diffuse_ramp_set(PointerRNA *ptr, int value) +{ + Material *ma= (Material*)ptr->data; + + if(value) ma->mode |= MA_RAMP_COL; + else ma->mode &= ~MA_RAMP_COL; + + if((ma->mode & MA_RAMP_COL) && ma->ramp_col == NULL) + ma->ramp_col= add_colorband(0); +} + +static void rna_Material_use_specular_ramp_set(PointerRNA *ptr, int value) +{ + Material *ma= (Material*)ptr->data; + + if(value) ma->mode |= MA_RAMP_SPEC; + else ma->mode &= ~MA_RAMP_SPEC; + + if((ma->mode & MA_RAMP_SPEC) && ma->ramp_spec == NULL) + ma->ramp_spec= add_colorband(0); +} + #else static void rna_def_material_mtex(BlenderRNA *brna) @@ -477,11 +499,23 @@ static void rna_def_material_colors(StructRNA *srna) RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL); /* Color bands */ + prop= RNA_def_property(srna, "use_diffuse_ramp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAMP_COL); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Material_use_diffuse_ramp_set"); + RNA_def_property_ui_text(prop, "Use Diffuse Ramp", "Toggle diffuse ramp operations."); + RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL); + prop= RNA_def_property(srna, "diffuse_ramp", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "ramp_col"); RNA_def_property_struct_type(prop, "ColorRamp"); RNA_def_property_ui_text(prop, "Diffuse Ramp", "Color ramp used to affect diffuse shading."); + prop= RNA_def_property(srna, "use_specular_ramp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAMP_SPEC); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Material_use_specular_ramp_set"); + RNA_def_property_ui_text(prop, "Use Specular Ramp", "Toggle specular ramp operations."); + RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL); + prop= RNA_def_property(srna, "specular_ramp", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "ramp_spec"); RNA_def_property_struct_type(prop, "ColorRamp"); @@ -912,7 +946,7 @@ void rna_def_material_specularity(StructRNA *srna) { PropertyRNA *prop; - static EnumPropertyItem prop_spec_shader_items[] = { + static EnumPropertyItem prop_specular_shader_items[] = { {MA_SPEC_COOKTORR, "COOKTORR", 0, "CookTorr", ""}, {MA_SPEC_PHONG, "PHONG", 0, "Phong", ""}, {MA_SPEC_BLINN, "BLINN", 0, "Blinn", ""}, @@ -920,9 +954,9 @@ void rna_def_material_specularity(StructRNA *srna) {MA_SPEC_WARDISO, "WARDISO", 0, "WardIso", ""}, {0, NULL, 0, NULL, NULL}}; - prop= RNA_def_property(srna, "spec_shader", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "specular_shader", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "spec_shader"); - RNA_def_property_enum_items(prop, prop_spec_shader_items); + RNA_def_property_enum_items(prop, prop_specular_shader_items); RNA_def_property_ui_text(prop, "Specular Shader Model", ""); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); @@ -1042,7 +1076,8 @@ void RNA_def_material(BlenderRNA *brna) static EnumPropertyItem prop_type_items[] = { {MA_TYPE_SURFACE, "SURFACE", 0, "Surface", "Render object as a surface."}, - {MA_TYPE_VOLUME, "VOLUME", 0, "Volume", "Render object as a volume."}, + {MA_TYPE_WIRE, "WIRE", 0, "Wire", "Render the edges of faces as wires (not supported in ray tracing)."}, + // {MA_TYPE_VOLUME, "VOLUME", 0, "Volume", "Render object as a volume."}, {MA_TYPE_HALO, "HALO", 0, "Halo", "Render object as halo particles."}, {0, NULL, 0, NULL, NULL}}; @@ -1128,14 +1163,9 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Shadeless", "Makes this material insensitive to light or shadow."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); - prop= RNA_def_property(srna, "wireframe", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_WIRE); - RNA_def_property_ui_text(prop, "Wireframe", "Render the edges of faces as wires (not supported in ray tracing)."); - RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); - - prop= RNA_def_property(srna, "z_buffer", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "z_transparency", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ZTRA); - RNA_def_property_ui_text(prop, "Z Buffer", "Enable Z-buffering of transparent faces"); + RNA_def_property_ui_text(prop, "Z Transparency", "Enable alpha buffer for transparent faces."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); prop= RNA_def_property(srna, "vertex_color_light", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 5853b51a6b1..2b06f164c12 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1250,7 +1250,7 @@ static void particle_curve(Render *re, ObjectRen *obr, DerivedMesh *dm, Material { HaloRen *har=0; - if(ma->mode&MA_WIRE) + if(ma->material_type == MA_TYPE_WIRE) static_particle_wire(obr, ma, loc, loc1, sd->first, sd->line); else if(ma->material_type == MA_TYPE_HALO) { har= RE_inithalo_particle(re, obr, dm, ma, loc, loc1, sd->orco, sd->uvco, sd->size, 1.0, seed); @@ -1627,7 +1627,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem path_nbr=(int)pow(2.0,(double) part->ren_step); if(path_nbr) { - if((ma->material_type != MA_TYPE_HALO) && (ma->mode & MA_WIRE)==0) { + if(!ELEM(ma->material_type, MA_TYPE_HALO, MA_TYPE_WIRE)) { sd.orco = MEM_mallocN(3*sizeof(float)*(totpart+totchild), "particle orcos"); set_object_orco(re, psys, sd.orco); } @@ -3124,7 +3124,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) } /* if wire material, and we got edges, don't do the faces */ - if(ma->mode & MA_WIRE) { + if(ma->material_type == MA_TYPE_WIRE) { end= dm->getNumEdges(dm); if(end) ok= 0; } @@ -3209,7 +3209,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) end= dm->getNumEdges(dm); mvert= dm->getVertArray(dm); ma= give_render_material(re, ob, 1); - if(end && (ma->mode & MA_WIRE)) { + if(end && (ma->material_type == MA_TYPE_WIRE)) { MEdge *medge; struct edgesort *edgetable; int totedge= 0; @@ -3834,7 +3834,7 @@ static void split_quads(ObjectRen *obr, int dir) vlr= RE_findOrAddVlak(obr, a); /* test if rendering as a quad or triangle, skip wire */ - if(vlr->v4 && (vlr->flag & R_STRAND)==0 && (vlr->mat->mode & MA_WIRE)==0) { + if(vlr->v4 && (vlr->flag & R_STRAND)==0 && (vlr->mat->material_type != MA_TYPE_WIRE)) { if(vlr->v4) { @@ -3884,7 +3884,7 @@ static void check_non_flat_quads(ObjectRen *obr) vlr= RE_findOrAddVlak(obr, a); /* test if rendering as a quad or triangle, skip wire */ - if(vlr->v4 && (vlr->flag & R_STRAND)==0 && (vlr->mat->mode & MA_WIRE)==0) { + if(vlr->v4 && (vlr->flag & R_STRAND)==0 && (vlr->mat->material_type != MA_TYPE_WIRE)) { /* check if quad is actually triangle */ v1= vlr->v1; diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index df74e88e87e..010930fcb85 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -133,7 +133,7 @@ void makeraytree(Render *re) else vlr++; /* baking selected to active needs non-traceable too */ if((re->flag & R_BAKE_TRACE) || (vlr->mat->mode & MA_TRACEBLE)) { - if((vlr->mat->mode & MA_WIRE)==0) { + if(vlr->mat->material_type != MA_TYPE_WIRE) { VECCOPY(co1, vlr->v1->co); VECCOPY(co2, vlr->v2->co); VECCOPY(co3, vlr->v3->co); @@ -194,7 +194,7 @@ void makeraytree(Render *re) else vlr++; if((re->flag & R_BAKE_TRACE) || (vlr->mat->mode & MA_TRACEBLE)) - if((vlr->mat->mode & MA_WIRE)==0) + if(vlr->mat->material_type != MA_TYPE_WIRE) RE_ray_tree_add_face(re->raytree, RAY_OBJECT_SET(re, obi), vlr); } } diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c index 71cd678233d..33085b98095 100644 --- a/source/blender/render/intern/source/shadbuf.c +++ b/source/blender/render/intern/source/shadbuf.c @@ -1557,7 +1557,7 @@ static void isb_bsp_fillfaces(Render *re, LampRen *lar, ISBBranch *root) ma= vlr->mat; ok= 1; if((ma->mode & MA_SHADBUF)==0) ok= 0; - if(ma->mode & MA_WIRE) ok= 0; + if(ma->material_type == MA_TYPE_WIRE) ok= 0; zspanstrand.shad_alpha= zspan.shad_alpha= ma->shad_alpha; } @@ -1589,7 +1589,7 @@ static void isb_bsp_fillfaces(Render *re, LampRen *lar, ISBBranch *root) c4= testclip(hoco[3]); /* ***** NO WIRE YET */ - if(ma->mode & MA_WIRE) { + if(ma->material_type == MA_TYPE_WIRE) { if(vlr->v4) zbufclipwire(&zspan, i, a+1, vlr->ec, hoco[0], hoco[1], hoco[2], hoco[3], c1, c2, c3, c4); else diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c index 6b1d11be6f3..c860e9ac5d1 100644 --- a/source/blender/render/intern/source/shadeinput.c +++ b/source/blender/render/intern/source/shadeinput.c @@ -617,7 +617,7 @@ void shade_input_calc_viewco(ShadeInput *shi, float x, float y, float z, float * /* returns not normalized, so is in viewplane coords */ calc_view_vector(view, x, y); - if(shi->mat->mode & MA_WIRE) { + if(shi->mat->material_type == MA_TYPE_WIRE) { /* wire cannot use normal for calculating shi->co, so * we reconstruct the coordinate less accurate */ if(R.r.mode & R_ORTHO) diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 0d8f1be8c85..4436f3aa047 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -2154,7 +2154,7 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart*, ma= vlr->mat; nofill= ma->mode & (MA_ZTRA|MA_ONLYCAST); env= (ma->mode & MA_ENV); - wire= (ma->mode & MA_WIRE); + wire= (ma->material_type == MA_TYPE_WIRE); for(zsample=0; zsamplemode & MA_ZINV || (zmaskpass && neg_zmask)) @@ -2341,7 +2341,7 @@ void zbuffer_shadow(Render *re, float winmat[][4], LampRen *lar, int *rectz, int c2= zbuf_shadow_project(cache, vlr->v2->index, obwinmat, vlr->v2->co, ho2); c3= zbuf_shadow_project(cache, vlr->v3->index, obwinmat, vlr->v3->co, ho3); - if((ma->mode & MA_WIRE) || (vlr->flag & R_STRAND)) { + if((ma->material_type == MA_TYPE_WIRE) || (vlr->flag & R_STRAND)) { if(vlr->v4) { c4= zbuf_shadow_project(cache, vlr->v4->index, obwinmat, vlr->v4->co, ho4); zbufclipwire(&zspan, 0, a+1, vlr->ec, ho1, ho2, ho3, ho4, c1, c2, c3, c4); @@ -2571,7 +2571,7 @@ void zbuffer_sss(RenderPart *pa, unsigned int lay, void *handle, void (*func)(vo ma= vlr->mat; nofill= ma->mode & MA_ONLYCAST; env= (ma->mode & MA_ENV); - wire= (ma->mode & MA_WIRE); + wire= (ma->material_type == MA_TYPE_WIRE); } } else { @@ -3357,7 +3357,7 @@ static int zbuffer_abuf(RenderPart *pa, APixstr *APixbuf, ListBase *apsmbase, Re zspan= &zspans[zsample]; zspan->polygon_offset= polygon_offset; - if(ma->mode & (MA_WIRE)) { + if(ma->material_type == MA_TYPE_WIRE) { if(v4) zbufclipwire(zspan, i, zvlnr, vlr->ec, ho1, ho2, ho3, ho4, c1, c2, c3, c4); else diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 072889a530f..7f6a9966189 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -559,7 +559,7 @@ bool ConvertMaterial( material->ref = mat->ref; material->amb = mat->amb; - material->ras_mode |= (mat->mode & MA_WIRE)? WIRE: 0; + material->ras_mode |= (mat->material_type == MA_TYPE_WIRE)? WIRE: 0; } else { int valid = 0; From c543eca36e9bc568dcfaa8fb6aa039ed6726a7d6 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 25 Jul 2009 21:33:43 +0000 Subject: [PATCH 380/512] 2.5: * Fixed a typo in User preferences. * Add a use_ prefix for some projection paint booleans in RNA. --- release/ui/space_info.py | 2 +- source/blender/makesrna/intern/rna_scene.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 5ff8609f32d..9d72aa7c5e9 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -440,7 +440,7 @@ class INFO_PT_system(bpy.types.Panel): colsplitcol.itemL(text="OpenGL:") colsplitcol.itemR(system, "clip_alpha", slider=True) colsplitcol.itemR(system, "use_mipmaps") - colsplitcol.itemL(text="Windom Draw Method:") + colsplitcol.itemL(text="Window Draw Method:") row = colsplitcol.row() row.itemR(system, "window_draw_method", expand=True) colsplitcol.itemL(text="Textures:") diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index ea1e04d41b7..1d712fbd88d 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -362,19 +362,19 @@ static void rna_def_tpaint(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_DISABLE); RNA_def_property_ui_text(prop, "Project Paint", "Use projection painting for improved consistency in the brush strokes"); - prop= RNA_def_property(srna, "occlude", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_occlude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)"); - prop= RNA_def_property(srna, "cull", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_cull", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)"); - prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); RNA_def_property_ui_text(prop, "Normal", "Paint most on faces pointing towards the view"); - prop= RNA_def_property(srna, "stencil_layer", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_stencil_layer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK); RNA_def_property_ui_text(prop, "Stencil Layer", "Set the mask layer from the UV layer buttons"); @@ -382,7 +382,7 @@ static void rna_def_tpaint(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK_INV); RNA_def_property_ui_text(prop, "Invert", "Invert the mask"); - prop= RNA_def_property(srna, "clone_layer", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_clone_layer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE); RNA_def_property_ui_text(prop, "Clone Layer", "Use another UV layer as clone source, otherwise use 3D the cursor as the source"); From 580d000f8fa6d65bfbab348aeee1719cffebf8cb Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 25 Jul 2009 22:20:26 +0000 Subject: [PATCH 381/512] 2.5: * Fix crash entering particle mode, and particles not showing. Janne, please check the changes I made in psys_cache_paths, I'm not confident they are correct. * Fix some warnings --- source/blender/blenkernel/intern/boids.c | 8 +++----- source/blender/blenkernel/intern/particle.c | 19 ++++++++++--------- .../blenkernel/intern/particle_system.c | 4 +--- source/blender/blenlib/BLI_kdtree.h | 2 +- .../editors/space_view3d/space_view3d.c | 2 +- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index 931ad0b3043..d8926fc5753 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -399,7 +399,7 @@ static int rule_flock(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti KDTreeNearest ptn[11]; float vec[3] = {0.0f, 0.0f, 0.0f}, loc[3] = {0.0f, 0.0f, 0.0f}; int neighbors = BLI_kdtree_find_n_nearest(bbd->psys->tree, 11, pa->state.co, pa->prev_state.ave, ptn); - int n, nearest = 1; + int n; int ret = 0; if(neighbors > 1) { @@ -898,8 +898,6 @@ static BoidState *get_boid_state(BoidSettings *boids, ParticleData *pa) { /* determines the velocity the boid wants to have */ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) { - ParticleData *pars=bbd->psys->particles; - ParticleEffectorCache *ec=0; BoidRule *rule; BoidSettings *boids = bbd->part->boids; BoidValues val; @@ -1259,7 +1257,6 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) } case eBoidMode_Falling: { - float zvec[3] = {0.0f,0.0f,1.0f}; float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f}; /* gather apparent gravity to r_ve */ @@ -1523,4 +1520,5 @@ BoidState *boid_get_current_state(BoidSettings *boids) } return state; -} \ No newline at end of file +} + diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 6e8f9ee213c..e4f8a484061 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -2568,8 +2568,7 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra ParticleSettings *part = psys->part; ParticleData *pa; - ParticleKey result, *kkey[2] = {NULL, NULL}; - HairKey *hkey[2] = {NULL, NULL}; + ParticleKey result; ParticleEdit *edit = 0; ParticleEditKey *ekey = 0; @@ -2709,6 +2708,10 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra dietime = birthtime + pa_length * (dietime - birthtime); } + else + /* XXX brecht: don't know if this code from 2.4 is correct + * still, but makes hair appear again in particle mode */ + dietime= pind.hkey[0][pa->totkey-1].time; /*--interpolate actual path from data points--*/ for(k=0, ca=cache[i]; k<=steps; k++, ca++){ @@ -2731,14 +2734,14 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra if(edit){ if(pset->brushtype==PE_BRUSH_WEIGHT){ if(k==steps) - VecLerpf(ca->col, nosel_col, sel_col, hkey[0]->weight); + VecLerpf(ca->col, nosel_col, sel_col, pind.hkey[0]->weight); else VecLerpf(ca->col, nosel_col, sel_col, - (1.0f - keytime) * hkey[0]->weight + keytime * hkey[1]->weight); + (1.0f - keytime) * pind.hkey[0]->weight + keytime * pind.hkey[1]->weight); } else{ - if((ekey + (hkey[0] - pa->hair))->flag & PEK_SELECT){ - if((ekey + (hkey[1] - pa->hair))->flag & PEK_SELECT){ + if((ekey + (pind.hkey[0] - pa->hair))->flag & PEK_SELECT){ + if((ekey + (pind.hkey[1] - pa->hair))->flag & PEK_SELECT){ VECCOPY(ca->col, sel_col); } else{ @@ -2746,7 +2749,7 @@ void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra } } else{ - if((ekey + (hkey[1] - pa->hair))->flag & PEK_SELECT){ + if((ekey + (pind.hkey[1] - pa->hair))->flag & PEK_SELECT){ VecLerpf(ca->col, nosel_col, sel_col, keytime); } else{ @@ -3627,8 +3630,6 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i ParticleData *pa; ChildParticle *cpa; ParticleTexture ptex; - ParticleKey *kkey[2] = {NULL, NULL}; - HairKey *hkey[2] = {NULL, NULL}; ParticleKey *par=0, keys[4], tstate; ParticleThreadContext ctx; /* fake thread context for child modifiers */ ParticleInterpolationData pind; diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 43174343302..b5d58e9db8c 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -2065,7 +2065,6 @@ void psys_count_keyed_targets(Object *ob, ParticleSystem *psys) { ParticleSystem *kpsys; ParticleTarget *pt = psys->targets.first; - int psys_num = BLI_findindex(&ob->particlesystem, psys); int keys_valid = 1; psys->totkeyed = 0; @@ -2087,7 +2086,6 @@ void psys_count_keyed_targets(Object *ob, ParticleSystem *psys) static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) { - Object *kob = ob; ParticleSystem *kpsys = psys; ParticleTarget *pt; ParticleData *pa; @@ -2143,7 +2141,7 @@ static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) if(psys->flag & PSYS_KEYED_TIMING && pt->duration!=0.0f) k++; - pt = (pt->next && pt->next->flag & PTARGET_VALID) ? pt = pt->next : psys->targets.first; + pt = (pt->next && pt->next->flag & PTARGET_VALID)? pt->next : psys->targets.first; } psys->flag |= PSYS_KEYED; diff --git a/source/blender/blenlib/BLI_kdtree.h b/source/blender/blenlib/BLI_kdtree.h index 585107b0c4a..3b1947cf0c9 100644 --- a/source/blender/blenlib/BLI_kdtree.h +++ b/source/blender/blenlib/BLI_kdtree.h @@ -52,7 +52,7 @@ void BLI_kdtree_balance(KDTree *tree); /* Find nearest returns index, and -1 if no node is found. * Find n nearest returns number of points found, with results in nearest. -/* Normal is optional, but if given will limit results to points in normal direction from co. */ + * Normal is optional, but if given will limit results to points in normal direction from co. */ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest); int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 2b162f9574d..a99c227ae1f 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -280,7 +280,7 @@ static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype) /* copy last mode, then we can re-init the region maps */ rv3d->lastmode= stype; - + keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0); if(ELEM(stype, 0, NS_MODE_OBJECT)) WM_event_add_keymap_handler(&ar->handlers, keymap); From 5d240af42b0199a7832aa2acbc866283cfab49cb Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 25 Jul 2009 22:22:47 +0000 Subject: [PATCH 382/512] 2.5: fix for use background image toggle in 3d view, it didn't allocate the right data. --- release/ui/space_view3d.py | 26 ++++++++++++---------- source/blender/makesrna/intern/rna_space.c | 23 +++++++++++++++++++ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index c96960eb857..0d1a8fd7bc5 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -182,18 +182,20 @@ class VIEW3D_PT_background_image(bpy.types.Panel): layout = self.layout view = context.space_data - bg = context.space_data.background_image - - layout.active = view.display_background_image - split = layout.split() - col = split.column() - col.itemR(bg, "image") -# col.itemR(bg, "image_user") - col.itemR(bg, "size") - col.itemR(bg, "transparency", slider=True) - col.itemL(text="Offset:") - col.itemR(bg, "x_offset", text="X") - col.itemR(bg, "y_offset", text="Y") + bg = view.background_image + + if bg: + layout.active = view.display_background_image + + split = layout.split() + col = split.column() + col.itemR(bg, "image", text="") + #col.itemR(bg, "image_user") + col.itemR(bg, "size") + col.itemR(bg, "transparency", slider=True) + col.itemL(text="Offset:") + col.itemR(bg, "x_offset", text="X") + col.itemR(bg, "y_offset", text="Y") bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index f04f3b7be68..8960714862d 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -287,6 +287,22 @@ static void rna_ConsoleLine_cursor_index_range(PointerRNA *ptr, int *min, int *m *max= ci->len; } +static void rna_View3D_display_background_image_set(PointerRNA *ptr, int value) +{ + View3D *vd= (View3D*)ptr->data; + + if(value) vd->flag |= V3D_DISPBGPIC; + else vd->flag &= ~V3D_DISPBGPIC; + + if((vd->flag & V3D_DISPBGPIC) && vd->bgpic == NULL) { + vd->bgpic= MEM_callocN(sizeof(BGpic), "bgpic"); + vd->bgpic->size= 5.0; + vd->bgpic->blend= 0.5; + vd->bgpic->iuser.fie_ima= 2; + vd->bgpic->iuser.ok= 1; + } +} + #else static void rna_def_space(BlenderRNA *brna) @@ -454,6 +470,7 @@ static void rna_def_background_image(BlenderRNA *brna) prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "ima"); RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space."); + RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, NULL); prop= RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NEVER_NULL); @@ -612,6 +629,7 @@ static void rna_def_space_3dview(BlenderRNA *brna) RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_background_image", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, NULL, "rna_View3D_display_background_image_set"); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPIC); RNA_def_property_ui_text(prop, "Display Background Image", "Display a reference image behind objects in the 3D View"); RNA_def_property_update(prop, NC_WINDOW, NULL); @@ -701,6 +719,11 @@ static void rna_def_space_buttons(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels."); RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "brush_texture", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SB_BRUSH_TEX); + RNA_def_property_ui_text(prop, "Brush Texture", "Show brush textures."); + RNA_def_property_update(prop, NC_WINDOW, NULL); + /* pinned data */ prop= RNA_def_property(srna, "pin_id", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "pinid"); From 756488fbe2c0beaf205cb28d6f4ca1e62a64588a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 25 Jul 2009 22:31:02 +0000 Subject: [PATCH 383/512] 2.5: Painting Various fixes for painting, sculpting and particle edit, still much to be done... * Move RNA paint and sculpt structs into rna_sculpt_paint.c, * Added Particle Edit RNA. * Some tweaks to existing Paint RNA. * Put texture paint and particle edit object in context. * Fix some errors in the brush layout, properly doing None checks, fixing some wrong property identifiers. * Added tool enum for texture paint and particle edit in panels. * Allow editing brush textures in the texture buttons, still with a stupid toggle, ideas for how to make the connection better are welcome. --- release/ui/buttons_texture.py | 70 ++-- release/ui/space_view3d_toolbar.py | 202 +++++----- source/blender/blenkernel/intern/image.c | 51 +-- source/blender/blenlib/BLI_arithb.h | 3 + source/blender/blenlib/intern/arithb.c | 14 +- source/blender/editors/physics/editparticle.c | 23 +- .../blender/editors/screen/screen_context.c | 21 +- .../editors/space_buttons/buttons_context.c | 79 +++- .../editors/space_view3d/view3d_toolbar.c | 12 +- source/blender/makesdna/DNA_brush_types.h | 1 + source/blender/makesdna/DNA_scene_types.h | 5 +- source/blender/makesdna/DNA_space_types.h | 1 + source/blender/makesrna/RNA_access.h | 4 +- source/blender/makesrna/intern/makesrna.c | 2 +- source/blender/makesrna/intern/rna_brush.c | 2 +- source/blender/makesrna/intern/rna_define.c | 2 +- source/blender/makesrna/intern/rna_internal.h | 2 +- source/blender/makesrna/intern/rna_scene.c | 144 +------ .../makesrna/intern/rna_sculpt_paint.c | 363 ++++++++++++++++++ source/blender/makesrna/intern/rna_vpaint.c | 90 ----- 20 files changed, 674 insertions(+), 417 deletions(-) create mode 100644 source/blender/makesrna/intern/rna_sculpt_paint.c delete mode 100644 source/blender/makesrna/intern/rna_vpaint.c diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index d86cec17d01..80ae503ee6a 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -19,6 +19,7 @@ class TEXTURE_PT_preview(TextureButtonsPanel): ma = context.material la = context.lamp wo = context.world + br = context.brush if ma: layout.template_preview(tex, parent=ma) @@ -26,6 +27,8 @@ class TEXTURE_PT_preview(TextureButtonsPanel): layout.template_preview(tex, parent=la) elif wo: layout.template_preview(tex, parent=wo) + elif br: + layout.template_preview(tex, parent=br) else: layout.template_preview(tex) @@ -34,7 +37,7 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): __no_header__ = True def poll(self, context): - return (context.material or context.world or context.lamp or context.texture) + return (context.material or context.world or context.lamp or context.brush or context.texture) def draw(self, context): layout = self.layout @@ -43,10 +46,11 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): ma = context.material la = context.lamp wo = context.world + br = context.brush space = context.space_data slot = context.texture_slot - if ma or la or wo: + if ma or la or wo or br: row = layout.row() if ma: row.template_list(ma, "textures", ma, "active_texture_index", type="ICONS") @@ -54,21 +58,28 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): row.template_list(la, "textures", la, "active_texture_index", type="ICONS") elif wo: row.template_list(wo, "textures", wo, "active_texture_index", type="ICONS") + elif br: + row.template_list(br, "textures", br, "active_texture_index", type="ICONS") split = layout.split(percentage=0.65) - if ma or la or wo: + if ma or la or wo or br: if slot: split.template_ID(slot, "texture", new="texture.new") else: split.itemS() - elif tex: split.template_ID(space, "pin_id") + + if not space.pin_id and \ + (context.sculpt_object or context.vertex_paint_object or \ + context.weight_paint_object or context.texture_paint_object): + split.itemR(space, "brush_texture", text="Brush", toggle=True) + else: split.itemS() - - layout.itemS() + layout.itemS() + if tex: split = layout.split(percentage=0.2) @@ -89,32 +100,34 @@ class TEXTURE_PT_mapping(TextureButtonsPanel): ma = context.material la = context.lamp wo = context.world + br = context.brush tex = context.texture_slot textype = context.texture - split = layout.split(percentage=0.3) - col = split.column() - col.itemL(text="Coordinates:") - col = split.column() - col.itemR(tex, "texture_coordinates", text="") + if not br: + split = layout.split(percentage=0.3) + col = split.column() + col.itemL(text="Coordinates:") + col = split.column() + col.itemR(tex, "texture_coordinates", text="") - if tex.texture_coordinates == 'ORCO': - """ - ob = context.object - if ob and ob.type == 'MESH': + if tex.texture_coordinates == 'ORCO': + """ + ob = context.object + if ob and ob.type == 'MESH': + split = layout.split(percentage=0.3) + split.itemL(text="Mesh:") + split.itemR(ob.data, "texco_mesh", text="") + """ + elif tex.texture_coordinates == 'UV': split = layout.split(percentage=0.3) - split.itemL(text="Mesh:") - split.itemR(ob.data, "texco_mesh", text="") - """ - elif tex.texture_coordinates == 'UV': - split = layout.split(percentage=0.3) - split.itemL(text="Layer:") - split.itemR(tex, "uv_layer", text="") - elif tex.texture_coordinates == 'OBJECT': - split = layout.split(percentage=0.3) - split.itemL(text="Object:") - split.itemR(tex, "object", text="") - + split.itemL(text="Layer:") + split.itemR(tex, "uv_layer", text="") + elif tex.texture_coordinates == 'OBJECT': + split = layout.split(percentage=0.3) + split.itemL(text="Object:") + split.itemR(tex, "object", text="") + if ma: split = layout.split(percentage=0.3) col = split.column() @@ -147,7 +160,7 @@ class TEXTURE_PT_influence(TextureButtonsPanel): __label__ = "Influence" def poll(self, context): - return (context.texture_slot and context.texture and context.texture.type != 'NONE') + return (context.texture_slot and context.texture and context.texture.type != 'NONE' and (not context.brush)) def draw(self, context): layout = self.layout @@ -155,6 +168,7 @@ class TEXTURE_PT_influence(TextureButtonsPanel): ma = context.material la = context.lamp wo = context.world + br = context.brush textype = context.texture tex = context.texture_slot diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 7889827ee7b..af298e6e27b 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -9,7 +9,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "objectmode" class VIEW3D_PT_tools_objectmode(View3DPanel): - __idname__ = "VIEW3D_PT_tools_objectmode" __label__ = "Object Tools" def draw(self, context): @@ -49,7 +48,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_mesh" class VIEW3D_PT_tools_editmode_mesh(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_mesh" __label__ = "Mesh Tools" def draw(self, context): @@ -97,7 +95,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_curve" class VIEW3D_PT_tools_editmode_curve(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_curve" __label__ = "Curve Tools" def draw(self, context): @@ -132,7 +129,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_surface" class VIEW3D_PT_tools_editmode_surface(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_surface" __label__ = "Surface Tools" def draw(self, context): @@ -167,7 +163,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_text" class VIEW3D_PT_tools_editmode_text(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_text" __label__ = "Text Tools" def draw(self, context): @@ -189,7 +184,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_armature" class VIEW3D_PT_tools_editmode_armature(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_armature" __label__ = "Armature Tools" def draw(self, context): @@ -220,7 +214,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_mball" class VIEW3D_PT_tools_editmode_mball(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_mball" __label__ = "Meta Tools" def draw(self, context): @@ -241,7 +234,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "editmode_lattice" class VIEW3D_PT_tools_editmode_lattice(View3DPanel): - __idname__ = "VIEW3D_PT_tools_editmode_lattice" __label__ = "Lattice Tools" def draw(self, context): @@ -262,7 +254,6 @@ class View3DPanel(bpy.types.Panel): __context__ = "posemode" class VIEW3D_PT_tools_posemode(View3DPanel): - __idname__ = "VIEW3D_PT_tools_posemode" __label__ = "Pose Tools" def draw(self, context): @@ -301,102 +292,104 @@ class VIEW3D_PT_tools_posemode(View3DPanel): # ********** default tools for paint modes **************** -class VIEW3D_PT_tools_brush(bpy.types.Panel): +class PaintPanel(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" + + def paint_settings(self, context): + ts = context.tool_settings + + if context.sculpt_object: + return ts.sculpt + elif context.vertex_paint_object: + return ts.vertex_paint + elif context.weight_paint_object: + return ts.weight_paint + elif context.texture_paint_object: + return ts.image_paint + elif context.particle_edit_object: + return ts.particle_edit + + return False + +class VIEW3D_PT_tools_brush(PaintPanel): __label__ = "Brush" - def brush_src(self, context): - ts = context.tool_settings - if context.sculpt_object: - return ts.sculpt - elif context.vpaint_object: - return ts.vpaint - elif context.wpaint_object: - return ts.wpaint - elif context.tpaint_object: - return ts.tpaint - return False - def poll(self, context): - return self.brush_src(context) + return self.paint_settings(context) def draw(self, context): - src = self.brush_src(context) - brush = src.brush + settings = self.paint_settings(context) + brush = settings.brush layout = self.layout - layout.split().row().template_ID(src, "brush") + if context.particle_edit_object: + layout.column().itemR(settings, "tool", expand=True) + else: + layout.split().row().template_ID(settings, "brush") - if context.sculpt_object: - layout.column().itemR(brush, "sculpt_tool", expand=True) + if brush and not context.particle_edit_object: + if context.sculpt_object: + layout.column().itemR(brush, "sculpt_tool", expand=True) - split = layout.split() - - col = split.column() - row = col.row(align=True) - row.itemR(brush, "size", slider=True) - row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") - - if context.wpaint_object: - col.itemR(context.tool_settings, "vertex_group_weight", text="Weight", slider=True) + elif context.texture_paint_object: + col = layout.column(align=True) + col.item_enumR(settings, "tool", "DRAW") + col.item_enumR(settings, "tool", "SOFTEN") + if settings.use_projection: + col.item_enumR(settings, "tool", "CLONE") + else: + col.item_enumR(settings, "tool", "SMEAR") + + split = layout.split() - col.itemR(brush, "strength", slider=True) - row = col.row(align=True) - row.itemR(brush, "falloff", slider=True) - row.itemR(brush, "falloff_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") - - if context.vpaint_object: - col.itemR(brush, "color", text="") - if context.tpaint_object: + col = split.column() row = col.row(align=True) - row.itemR(brush, "clone_opacity", slider=True, text=Opacity) - row.itemR(brush, "opacity_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") - - row = col.row(align=True) - row.itemR(brush, "space", text="") - rowsub = row.row(align=True) - rowsub.active = brush.space - rowsub.itemR(brush, "spacing", text="Spacing", slider=True) - rowsub.itemR(brush, "spacing_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + row.itemR(brush, "size", slider=True) + row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + if context.weight_paint_object: + col.itemR(context.tool_settings, "vertex_group_weight", text="Weight", slider=True) + + col.itemR(brush, "strength", slider=True) + row = col.row(align=True) + row.itemR(brush, "falloff", slider=True) + row.itemR(brush, "falloff_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + if context.vertex_paint_object: + col.itemR(brush, "color", text="") + if context.texture_paint_object: + row = col.row(align=True) + row.itemR(brush, "clone_opacity", slider=True, text="Opacity") + row.itemR(brush, "opacity_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") + + row = col.row(align=True) + row.itemR(brush, "space", text="") + rowsub = row.row(align=True) + rowsub.active = brush.space + rowsub.itemR(brush, "spacing", text="Spacing", slider=True) + rowsub.itemR(brush, "spacing_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") - split = layout.split() - col = split.column() - col.itemR(brush, "airbrush") - col.itemR(brush, "anchored") - col.itemR(brush, "rake") + split = layout.split() + col = split.column() + col.itemR(brush, "airbrush") + col.itemR(brush, "anchored") + col.itemR(brush, "rake") -class VIEW3D_PT_tools_brush_curve(bpy.types.Panel): - __space_type__ = "VIEW_3D" - __region_type__ = "TOOLS" +class VIEW3D_PT_tools_brush_curve(PaintPanel): __label__ = "Curve" - def brush_src(self, context): - ts = context.tool_settings - if context.sculpt_object: - return ts.sculpt - elif context.vpaint_object: - return ts.vpaint - elif context.wpaint_object: - return ts.wpaint - elif context.tpaint_object: - return ts.tpaint - return False - def poll(self, context): - return self.brush_src(context) + settings = self.paint_settings(context) + return (settings and settings.brush and settings.brush.curve) def draw(self, context): - src = self.brush_src(context) - brush = src.brush + settings = self.paint_settings(context) + brush = settings.brush layout = self.layout split = layout.split() split.template_curve_mapping(brush.curve) -class VIEW3D_PT_sculpt_options(bpy.types.Panel): - __space_type__ = "VIEW_3D" - __region_type__ = "TOOLS" +class VIEW3D_PT_sculpt_options(PaintPanel): __label__ = "Options" def poll(self, context): @@ -429,15 +422,14 @@ class VIEW3D_PT_sculpt_options(bpy.types.Panel): class View3DPanel(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" - __context__ = "weightpaint" + __context__ = "weight_paint" -class VIEW3D_PT_weightpaint_options(View3DPanel): - __idname__ = "VIEW3D_PT_tools_weightpaint" +class VIEW3D_PT_weight_paint_options(View3DPanel): __label__ = "Options" def draw(self, context): layout = self.layout - wpaint = context.tool_settings.wpaint + wpaint = context.tool_settings.weight_paint col = layout.column() col.itemL(text="Blend:") @@ -459,15 +451,14 @@ class VIEW3D_PT_weightpaint_options(View3DPanel): class View3DPanel(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" - __context__ = "vertexpaint" -class VIEW3D_PT_vertexpaint_options(View3DPanel): - __idname__ = "VIEW3D_PT_vertexpaintoptions" +class VIEW3D_PT_vertex_paint_options(View3DPanel): + __context__ = "vertex_paint" __label__ = "Options" def draw(self, context): layout = self.layout - vpaint = context.tool_settings.vpaint + vpaint = context.tool_settings.vertex_paint col = layout.column() col.itemL(text="Blend:") @@ -488,17 +479,36 @@ class VIEW3D_PT_vertexpaint_options(View3DPanel): class View3DPanel(bpy.types.Panel): __space_type__ = "VIEW_3D" __region_type__ = "TOOLS" - __context__ = "texturepaint" + __context__ = "texture_paint" -class VIEW3D_PT_tools_texturepaint(View3DPanel): - __idname__ = "VIEW3D_PT_tools_texturepaint" - __label__ = "Texture Paint Tools" +class VIEW3D_PT_tools_texture_paint(View3DPanel): + __label__ = "Options" def draw(self, context): layout = self.layout layout.itemL(text="Nothing yet") +# ********** default tools for particle mode **************** + +class View3DPanel(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "TOOLS" + __context__ = "particle_mode" + +class VIEW3D_PT_tools_particle_edit(View3DPanel): + __label__ = "Options" + + def draw(self, context): + layout = self.layout + pe = context.tool_settings.particle_edit + + col = layout.column(align=True) + + col.itemR(pe, "emitter_deflect", text="Deflect") + sub = col.row() + sub.itemR(pe, "emitter_distance", text="Distance") + sub.active = pe.emitter_deflect bpy.types.register(VIEW3D_PT_tools_objectmode) bpy.types.register(VIEW3D_PT_tools_editmode_mesh) @@ -512,6 +522,8 @@ bpy.types.register(VIEW3D_PT_tools_posemode) bpy.types.register(VIEW3D_PT_tools_brush) bpy.types.register(VIEW3D_PT_tools_brush_curve) bpy.types.register(VIEW3D_PT_sculpt_options) -bpy.types.register(VIEW3D_PT_vertexpaint_options) -bpy.types.register(VIEW3D_PT_weightpaint_options) -bpy.types.register(VIEW3D_PT_tools_texturepaint) +bpy.types.register(VIEW3D_PT_vertex_paint_options) +bpy.types.register(VIEW3D_PT_weight_paint_options) +bpy.types.register(VIEW3D_PT_tools_texture_paint) +bpy.types.register(VIEW3D_PT_tools_particle_edit) + diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 93924d1ea0d..62af05fbc9a 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -456,19 +456,19 @@ static ImBuf *add_ibuf_size(int width, int height, char *name, int floatbuf, sho * easy to tweak like this, speed isn't really that much of an issue in this situation... */ /* checkers */ - for(y=0; yy; y++) { - dark = pow(-1, floor(y / checkerwidth)); + for(y=0; yx; x++) { + for(x=0; x 0) { - rect_float[0] = rect_float[1] = rect_float[2] = 0.25; - rect_float[3] = 1.0; + rect_float[0] = rect_float[1] = rect_float[2] = 0.25f; + rect_float[3] = 1.0f; } else { - rect_float[0] = rect_float[1] = rect_float[2] = 0.58; - rect_float[3] = 1.0; + rect_float[0] = rect_float[1] = rect_float[2] = 0.58f; + rect_float[3] = 1.0f; } rect_float+=4; } @@ -489,11 +489,11 @@ static ImBuf *add_ibuf_size(int width, int height, char *name, int floatbuf, sho if (floatbuf) rect_float= (float*)ibuf->rect_float; else rect= (unsigned char*)ibuf->rect; - for(y=0; yy; y++) { - hoffs = 0.125 * floor(y / checkerwidth); + for(y=0; yx; x++) { - h = 0.125 * floor(x / checkerwidth); + for(x=0; xy; y++) { - for(x=0; xx; x++) { + char ccol[4]; + + ccol[0]= (char)(color[0]*255.0f); + ccol[1]= (char)(color[1]*255.0f); + ccol[2]= (char)(color[2]*255.0f); + ccol[3]= (char)(color[3]*255.0f); + + for(y=0; y1.0e-35F) { + if(d>1.0e-35f) { d= (float)sqrt(d); n[0]/=d; n[1]/=d; n[2]/=d; } else { - n[0]=n[1]=n[2]= 0.0; - d= 0.0; + n[0]=n[1]=n[2]= 0.0f; + d= 0.0f; } return d; } @@ -3334,7 +3334,7 @@ float Normalize2(float *n) d= n[0]*n[0]+n[1]*n[1]; - if(d>1.0e-35F) { + if(d>1.0e-35f) { d= (float)sqrt(d); n[0]/=d; n[1]/=d; @@ -3352,15 +3352,15 @@ void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b) h *= 360.0f; - if(s==0.0) { + if(s==0.0f) { *r = v; *g = v; *b = v; } else { - if(h==360) h = 0; + if(h== 360.0f) h = 0.0f; - h /= 60; + h /= 60.0f; i = (int)floor(h); f = h - i; p = v*(1.0f-s); diff --git a/source/blender/editors/physics/editparticle.c b/source/blender/editors/physics/editparticle.c index f414297dab4..20033c747f9 100644 --- a/source/blender/editors/physics/editparticle.c +++ b/source/blender/editors/physics/editparticle.c @@ -271,6 +271,7 @@ typedef struct PEData { float smoothfac; float weightfac; float growfac; + int totrekey; int invert; int tot; @@ -1748,7 +1749,6 @@ static void rekey_particle(PEData *data, int pa_index) ParticleSystem *psys= data->psys; ParticleData *pa= &psys->particles[pa_index]; ParticleEdit *edit= psys->edit; - ParticleEditSettings *pset= PE_settings(data->scene); ParticleKey state; HairKey *key, *new_keys; ParticleEditKey *ekey; @@ -1757,19 +1757,19 @@ static void rekey_particle(PEData *data, int pa_index) pa->flag |= PARS_REKEY; - key= new_keys= MEM_callocN(pset->totrekey * sizeof(HairKey),"Hair re-key keys"); + key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey),"Hair re-key keys"); /* root and tip stay the same */ VECCOPY(key->co, pa->hair->co); - VECCOPY((key + pset->totrekey - 1)->co, (pa->hair + pa->totkey - 1)->co); + VECCOPY((key + data->totrekey - 1)->co, (pa->hair + pa->totkey - 1)->co); sta= key->time= pa->hair->time; - end= (key + pset->totrekey - 1)->time= (pa->hair + pa->totkey - 1)->time; - dval= (end - sta) / (float)(pset->totrekey - 1); + end= (key + data->totrekey - 1)->time= (pa->hair + pa->totkey - 1)->time; + dval= (end - sta) / (float)(data->totrekey - 1); /* interpolate new keys from old ones */ - for(k=1,key++; ktotrekey-1; k++,key++) { - state.time= (float)k / (float)(pset->totrekey-1); + for(k=1,key++; ktotrekey-1; k++,key++) { + state.time= (float)k / (float)(data->totrekey-1); psys_get_particle_on_path(data->scene, data->ob, psys, pa_index, &state, 0); VECCOPY(key->co, state.co); key->time= sta + k * dval; @@ -1780,7 +1780,7 @@ static void rekey_particle(PEData *data, int pa_index) MEM_freeN(pa->hair); pa->hair= new_keys; - pa->totkey=pset->totrekey; + pa->totkey=data->totrekey; if(edit->keys[pa_index]) MEM_freeN(edit->keys[pa_index]); @@ -1798,14 +1798,11 @@ static void rekey_particle(PEData *data, int pa_index) static int rekey_exec(bContext *C, wmOperator *op) { PEData data; - ParticleEditSettings *pset; PE_set_data(C, &data); - pset= PE_settings(data.scene); - pset->totrekey= RNA_int_get(op->ptr, "keys"); - - data.dval= 1.0f / (float)(pset->totrekey-1); + data.dval= 1.0f / (float)(data.totrekey-1); + data.totrekey= RNA_int_get(op->ptr, "keys"); foreach_selected_particle(&data, rekey_particle); diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 2dc2cf9f293..3842dd3d62f 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -50,7 +50,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult "scene", "selected_objects", "selected_bases", "selected_editable_objects", "selected_editable_bases" "active_base", "active_object", "edit_object", - "sculpt_object", "vpaint_object", "wpaint_object", NULL}; + "sculpt_object", "vertex_paint_object", "weight_paint_object", + "texture_paint_object", "brush", "particle_edit_object", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -116,19 +117,31 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } - else if(CTX_data_equals(member, "vpaint_object")) { + else if(CTX_data_equals(member, "vertex_paint_object")) { if(G.f & G_VERTEXPAINT && scene->basact) CTX_data_id_pointer_set(result, &scene->basact->object->id); return 1; } - else if(CTX_data_equals(member, "wpaint_object")) { + else if(CTX_data_equals(member, "weight_paint_object")) { if(G.f & G_WEIGHTPAINT && scene->basact) CTX_data_id_pointer_set(result, &scene->basact->object->id); return 1; } - + else if(CTX_data_equals(member, "texture_paint_object")) { + if(G.f & G_TEXTUREPAINT && scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } + else if(CTX_data_equals(member, "particle_edit_object")) { + if(G.f & G_PARTICLEEDIT && scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } + return 0; } diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 3a3f5bd83ee..1bc663a789b 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" #include "DNA_armature_types.h" +#include "DNA_brush_types.h" #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_modifier_types.h" @@ -45,6 +46,7 @@ #include "BLI_listbase.h" #include "BKE_context.h" +#include "BKE_global.h" #include "BKE_material.h" #include "BKE_modifier.h" #include "BKE_particle.h" @@ -65,7 +67,7 @@ typedef struct ButsContextPath { PointerRNA ptr[8]; int len; - int worldtex; + int flag; } ButsContextPath; static int set_pointer_type(ButsContextPath *path, bContextDataResult *result, StructRNA *type) @@ -302,10 +304,48 @@ static int buttons_context_path_particle(ButsContextPath *path) return 0; } +static int buttons_context_path_brush(ButsContextPath *path) +{ + Scene *scene; + ToolSettings *ts; + Brush *br= NULL; + PointerRNA *ptr= &path->ptr[path->len-1]; + + /* if we already have a (pinned) brush, we're done */ + if(RNA_struct_is_a(ptr->type, &RNA_Brush)) { + return 1; + } + /* if we have a scene, use the toolsettings brushes */ + else if(buttons_context_path_scene(path)) { + scene= path->ptr[path->len-1].data; + ts= scene->toolsettings; + + if(G.f & G_SCULPTMODE) + br= ts->sculpt->brush; + else if(G.f & G_VERTEXPAINT) + br= ts->vpaint->brush; + else if(G.f & G_WEIGHTPAINT) + br= ts->wpaint->brush; + else if(G.f & G_TEXTUREPAINT) + br= ts->imapaint.brush; + + if(br) { + RNA_id_pointer_create(&br->id, &path->ptr[path->len]); + path->len++; + + return 1; + } + } + + /* no path to a world possible */ + return 0; +} + static int buttons_context_path_texture(ButsContextPath *path) { Material *ma; Lamp *la; + Brush *br; World *wo; MTex *mtex; Tex *tex; @@ -315,8 +355,21 @@ static int buttons_context_path_texture(ButsContextPath *path) if(RNA_struct_is_a(ptr->type, &RNA_Texture)) { return 1; } + /* try brush */ + else if((path->flag & SB_BRUSH_TEX) && buttons_context_path_brush(path)) { + br= path->ptr[path->len-1].data; + + if(br) { + mtex= br->mtex[(int)br->texact]; + tex= (mtex)? mtex->tex: NULL; + + RNA_id_pointer_create(&tex->id, &path->ptr[path->len]); + path->len++; + return 1; + } + } /* try world */ - else if(path->worldtex && buttons_context_path_world(path)) { + else if((path->flag & SB_WORLD_TEX) && buttons_context_path_world(path)) { wo= path->ptr[path->len-1].data; if(wo) { @@ -354,21 +407,21 @@ static int buttons_context_path_texture(ButsContextPath *path) return 1; } } - /* TODO: material nodes, brush */ + /* TODO: material nodes */ - /* no path to a particle system possible */ + /* no path to a texture possible */ return 0; } -static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int worldtex) +static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int flag) { SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); ID *id; int found; memset(path, 0, sizeof(*path)); - path->worldtex= worldtex; + path->flag= flag; /* if some ID datablock is pinned, set the root pointer */ if(sbuts->pinid) { @@ -431,18 +484,18 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts) { ButsContextPath *path; PointerRNA *ptr; - int a, worldtex, flag= 0; + int a, pflag, flag= 0; if(!sbuts->path) sbuts->path= MEM_callocN(sizeof(ButsContextPath), "ButsContextPath"); path= sbuts->path; - worldtex= (sbuts->flag & SB_WORLD_TEX); + pflag= (sbuts->flag & (SB_WORLD_TEX|SB_BRUSH_TEX)); /* for each context, see if we can compute a valid path to it, if * this is the case, we know we have to display the button */ for(a=0; amainb, worldtex); + buttons_context_path(C, path, sbuts->mainb, pflag); if(!(flag & (1 << sbuts->mainb))) { if(flag & (1 << BCONTEXT_OBJECT)) @@ -505,7 +558,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r "world", "object", "mesh", "armature", "lattice", "curve", "meta_ball", "lamp", "camera", "material", "material_slot", "texture", "texture_slot", "bone", "edit_bone", "particle_system", - "cloth", "soft_body", "fluid", "collision", NULL}; + "cloth", "soft_body", "fluid", "collision", "brush", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -648,6 +701,10 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r return 1; } } + else if(CTX_data_equals(member, "brush")) { + set_pointer_type(path, result, &RNA_Brush); + return 1; + } return 0; } diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 89a6d659d67..1564fcb169b 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -175,12 +175,12 @@ char *view3d_context_string(const bContext *C) else { Object *ob = CTX_data_active_object(C); - if(ob && (ob->flag & OB_POSEMODE)) return "posemode"; - else if (G.f & G_SCULPTMODE) return "sculptmode"; - else if (G.f & G_WEIGHTPAINT) return "weightpaint"; - else if (G.f & G_VERTEXPAINT) return "vertexpaint"; - else if (G.f & G_TEXTUREPAINT) return "texturepaint"; - else if(G.f & G_PARTICLEEDIT) return "particlemode"; + if(ob && (ob->flag & OB_POSEMODE)) return "pose_mode"; + else if (G.f & G_SCULPTMODE) return "sculpt_mode"; + else if (G.f & G_WEIGHTPAINT) return "weight_paint"; + else if (G.f & G_VERTEXPAINT) return "vertex_paint"; + else if (G.f & G_TEXTUREPAINT) return "texture_paint"; + else if(G.f & G_PARTICLEEDIT) return "particle_mode"; } return "objectmode"; diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 93a974c1180..f88d3b68ebf 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -111,6 +111,7 @@ typedef struct Brush { #define SCULPT_TOOL_FLATTEN 7 #define SCULPT_TOOL_CLAY 8 +/* ImagePaintSettings.tool */ #define PAINT_TOOL_DRAW 0 #define PAINT_TOOL_SOFTEN 1 #define PAINT_TOOL_SMEAR 2 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index c8d0fc9ff5e..28da3ba1316 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -434,7 +434,7 @@ typedef struct ImagePaintSettings { short flag, tool; /* for projection painting only */ - short seam_bleed,normal_angle; + short seam_bleed, normal_angle; void *paintcursor; /* wm handle */ } ImagePaintSettings; @@ -960,11 +960,10 @@ typedef enum SculptFlags { SCULPT_LOCK_Z = 256 } SculptFlags; -/* toolsettings->imagepaint_flag */ +/* ImagePaintSettings.flag */ #define IMAGEPAINT_DRAWING 1 #define IMAGEPAINT_DRAW_TOOL 2 #define IMAGEPAINT_DRAW_TOOL_DRAWING 4 - /* projection painting only */ #define IMAGEPAINT_PROJECT_DISABLE 8 /* Non projection 3D painting */ #define IMAGEPAINT_PROJECT_XRAY 16 diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 3db97112090..007ea6ef51f 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -577,6 +577,7 @@ typedef struct SpaceConsole { #define SB_PRV_OSA 1 #define SB_PIN_CONTEXT 2 #define SB_WORLD_TEX 4 +#define SB_BRUSH_TEX 8 /* sbuts->align */ #define BUT_FREE 0 diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index d4532e78239..64a4887701b 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -221,7 +221,7 @@ extern StructRNA RNA_ID; extern StructRNA RNA_IDProperty; extern StructRNA RNA_IDPropertyGroup; extern StructRNA RNA_Image; -extern StructRNA RNA_ImagePaintSettings; +extern StructRNA RNA_ImagePaint; extern StructRNA RNA_ImageSequence; extern StructRNA RNA_ImageTexture; extern StructRNA RNA_ImageUser; @@ -478,7 +478,7 @@ extern StructRNA RNA_UserPreferencesLanguage; extern StructRNA RNA_UserPreferencesSystem; extern StructRNA RNA_UserPreferencesView; extern StructRNA RNA_UserSolidLight; -extern StructRNA RNA_VPaint; +extern StructRNA RNA_VertexPaint; extern StructRNA RNA_VectorFont; extern StructRNA RNA_VertexGroup; extern StructRNA RNA_VertexGroupElement; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 40bcb4dabbb..0b7fa0e4634 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1938,6 +1938,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_render.c", NULL, RNA_def_render}, {"rna_scene.c", NULL, RNA_def_scene}, {"rna_screen.c", NULL, RNA_def_screen}, + {"rna_sculpt_paint.c", NULL, RNA_def_sculpt_paint}, {"rna_sensor.c", NULL, RNA_def_sensor}, {"rna_sequence.c", NULL, RNA_def_sequence}, {"rna_space.c", NULL, RNA_def_space}, @@ -1947,7 +1948,6 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_ui.c", "rna_ui_api.c", RNA_def_ui}, {"rna_userdef.c", NULL, RNA_def_userdef}, {"rna_vfont.c", NULL, RNA_def_vfont}, - {"rna_vpaint.c", NULL, RNA_def_vpaint}, {"rna_wm.c", "rna_wm_api.c", RNA_def_wm}, {"rna_world.c", NULL, RNA_def_world}, {NULL, NULL}}; diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 8089d2e8b38..e064fd7f935 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -179,7 +179,7 @@ void rna_def_brush(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_TORUS); RNA_def_property_ui_text(prop, "Wrap", "Enable torus wrapping while painting."); - prop= RNA_def_property(srna, "alpha_pressure", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "opacity_pressure", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_ALPHA_PRESSURE); RNA_def_property_ui_text(prop, "Opacity Pressure", "Enable tablet pressure sensitivity for opacity."); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index d5d21ddb053..42c6f74b6ec 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -723,7 +723,7 @@ void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *struct break; if(!srnafrom) { - fprintf(stderr, "RNA_def_struct_nested: struct %s not found.\n", structname); + fprintf(stderr, "RNA_def_struct_nested: struct %s not found for %s.\n", structname, srna->identifier); DefRNA.error= 1; } diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index a1d32d5be78..ed0395ede23 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -151,6 +151,7 @@ void RNA_def_render(struct BlenderRNA *brna); void RNA_def_rna(struct BlenderRNA *brna); void RNA_def_scene(struct BlenderRNA *brna); void RNA_def_screen(struct BlenderRNA *brna); +void RNA_def_sculpt_paint(struct BlenderRNA *brna); void RNA_def_sensor(struct BlenderRNA *brna); void RNA_def_sequence(struct BlenderRNA *brna); void RNA_def_space(struct BlenderRNA *brna); @@ -161,7 +162,6 @@ void RNA_def_sound(struct BlenderRNA *brna); void RNA_def_ui(struct BlenderRNA *brna); void RNA_def_userdef(struct BlenderRNA *brna); void RNA_def_vfont(struct BlenderRNA *brna); -void RNA_def_vpaint(struct BlenderRNA *brna); void RNA_def_wm(struct BlenderRNA *brna); void RNA_def_world(struct BlenderRNA *brna); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 1d712fbd88d..22f6bff2cc4 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -323,128 +323,6 @@ static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr) #else -static void rna_def_tpaint(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - - static EnumPropertyItem texture_paint_items[] = { - {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", "Draw brush"}, - {PAINT_TOOL_SOFTEN, "SOFTEN", 0, "Soften", "Soften brush"}, - {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", "Smear brush"}, - {0, NULL, 0, NULL, NULL}}; - - static EnumPropertyItem projection_paint_items[] = { - {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", "Draw brush"}, - {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", "Smear brush"}, - {PAINT_TOOL_CLONE, "CLONE", 0, "Clone", "Clone brush, use RMB to drag source image"}, - {0, NULL, 0, NULL, NULL}}; - - srna= RNA_def_struct(brna, "ImagePaintSettings", NULL); - RNA_def_struct_nested(brna, srna, "Scene"); - RNA_def_struct_ui_text(srna, "Texture Painting", ""); - - prop= RNA_def_property(srna, "texture_paint_mode", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "tool"); - RNA_def_property_enum_items(prop, texture_paint_items); - RNA_def_property_ui_text(prop, "Paint Mode", ""); - - /********** Projection Painting **********/ - - prop= RNA_def_property(srna, "projection_paint_mode", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "tool"); - RNA_def_property_enum_items(prop, projection_paint_items); - RNA_def_property_ui_text(prop, "Paint Mode", ""); - - /* Boolean */ - - prop= RNA_def_property(srna, "use_projection", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_DISABLE); - RNA_def_property_ui_text(prop, "Project Paint", "Use projection painting for improved consistency in the brush strokes"); - - prop= RNA_def_property(srna, "use_occlude", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); - RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)"); - - prop= RNA_def_property(srna, "use_cull", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); - RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)"); - - prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); - RNA_def_property_ui_text(prop, "Normal", "Paint most on faces pointing towards the view"); - - prop= RNA_def_property(srna, "use_stencil_layer", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK); - RNA_def_property_ui_text(prop, "Stencil Layer", "Set the mask layer from the UV layer buttons"); - - prop= RNA_def_property(srna, "invert_mask", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK_INV); - RNA_def_property_ui_text(prop, "Invert", "Invert the mask"); - - prop= RNA_def_property(srna, "use_clone_layer", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE); - RNA_def_property_ui_text(prop, "Clone Layer", "Use another UV layer as clone source, otherwise use 3D the cursor as the source"); - - /* Integer */ - - prop= RNA_def_property(srna, "normal_angle", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "normal_angle"); - RNA_def_property_range(prop, 10, 90); - RNA_def_property_ui_text(prop, "Angle", "Paint most on faces pointing towards the view acording to this angle"); - - prop= RNA_def_property(srna, "bleed", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "seam_bleed"); - RNA_def_property_range(prop, 0, 8); - RNA_def_property_ui_text(prop, "Bleed", "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)"); -} - -static void rna_def_sculpt(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - - srna= RNA_def_struct(brna, "Sculpt", NULL); - RNA_def_struct_nested(brna, srna, "Scene"); - RNA_def_struct_ui_text(srna, "Sculpt", ""); - - prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "Brush"); - RNA_def_property_ui_text(prop, "Brush", ""); - - prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X); - RNA_def_property_ui_text(prop, "Symmetry X", "Mirror brush across the X axis."); - - prop= RNA_def_property(srna, "symmetry_y", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Y); - RNA_def_property_ui_text(prop, "Symmetry Y", "Mirror brush across the Y axis."); - - prop= RNA_def_property(srna, "symmetry_z", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Z); - RNA_def_property_ui_text(prop, "Symmetry Z", "Mirror brush across the Z axis."); - - prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_X); - RNA_def_property_ui_text(prop, "Lock X", "Disallow changes to the X axis of vertices."); - - prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Y); - RNA_def_property_ui_text(prop, "Lock Y", "Disallow changes to the Y axis of vertices."); - - prop= RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Z); - RNA_def_property_ui_text(prop, "Lock Z", "Disallow changes to the Z axis of vertices."); - - prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_BRUSH); - RNA_def_property_ui_text(prop, "Show Brush", ""); - - prop= RNA_def_property(srna, "partial_redraw", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_FAST); - RNA_def_property_ui_text(prop, "Partial Redraw", "Optimize sculpting by only refreshing modified faces."); -} - static void rna_def_tool_settings(BlenderRNA *brna) { StructRNA *srna; @@ -484,14 +362,22 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_struct_type(prop, "Sculpt"); RNA_def_property_ui_text(prop, "Sculpt", ""); - prop= RNA_def_property(srna, "vpaint", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "VPaint"); + prop= RNA_def_property(srna, "vertex_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "vpaint"); RNA_def_property_ui_text(prop, "Vertex Paint", ""); - prop= RNA_def_property(srna, "wpaint", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "VPaint"); + prop= RNA_def_property(srna, "weight_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "wpaint"); RNA_def_property_ui_text(prop, "Weight Paint", ""); + prop= RNA_def_property(srna, "image_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "imapaint"); + RNA_def_property_ui_text(prop, "Image Paint", ""); + + prop= RNA_def_property(srna, "particle_edit", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "particle"); + RNA_def_property_ui_text(prop, "Particle Edit", ""); + /* Transform */ prop= RNA_def_property(srna, "proportional_editing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "proportional", 0); @@ -555,12 +441,6 @@ static void rna_def_tool_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "vertex_group_weight", PROP_FLOAT, PROP_PERCENTAGE); RNA_def_property_float_sdna(prop, NULL, "vgroup_weight"); RNA_def_property_ui_text(prop, "Vertex Group Weight", "Weight to assign in vertex groups."); - - /* Sculpt */ - rna_def_sculpt(brna); - - /* Texture Paint */ - rna_def_tpaint(brna); } void rna_def_render_layer_common(StructRNA *srna, int scene) diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c new file mode 100644 index 00000000000..df40663fa02 --- /dev/null +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -0,0 +1,363 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "rna_internal.h" + +#include "DNA_scene_types.h" + +#ifdef RNA_RUNTIME + +static PointerRNA rna_ParticleEdit_brush_get(PointerRNA *ptr) +{ + ParticleEditSettings *pset= (ParticleEditSettings*)ptr->data; + ParticleBrushData *brush= NULL;; + + if(pset->brushtype != PE_BRUSH_NONE) + brush= &pset->brush[pset->brushtype]; + + return rna_pointer_inherit_refine(ptr, &RNA_ParticleBrush, brush); +} + +static PointerRNA rna_ParticleBrush_curve_get(PointerRNA *ptr) +{ + return rna_pointer_inherit_refine(ptr, &RNA_CurveMapping, NULL); +} + +#else + +static void rna_def_sculpt(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "Sculpt", NULL); + RNA_def_struct_ui_text(srna, "Sculpt", ""); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Brush"); + RNA_def_property_ui_text(prop, "Brush", ""); + + prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X); + RNA_def_property_ui_text(prop, "Symmetry X", "Mirror brush across the X axis."); + + prop= RNA_def_property(srna, "symmetry_y", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Y); + RNA_def_property_ui_text(prop, "Symmetry Y", "Mirror brush across the Y axis."); + + prop= RNA_def_property(srna, "symmetry_z", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Z); + RNA_def_property_ui_text(prop, "Symmetry Z", "Mirror brush across the Z axis."); + + prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_X); + RNA_def_property_ui_text(prop, "Lock X", "Disallow changes to the X axis of vertices."); + + prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Y); + RNA_def_property_ui_text(prop, "Lock Y", "Disallow changes to the Y axis of vertices."); + + prop= RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Z); + RNA_def_property_ui_text(prop, "Lock Z", "Disallow changes to the Z axis of vertices."); + + prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_BRUSH); + RNA_def_property_ui_text(prop, "Show Brush", ""); + + prop= RNA_def_property(srna, "partial_redraw", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_FAST); + RNA_def_property_ui_text(prop, "Partial Redraw", "Optimize sculpting by only refreshing modified faces."); +} + +static void rna_def_vertex_paint(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + static EnumPropertyItem prop_mode_items[] = { + {0, "MIX", 0, "Mix", "Use mix blending mode while painting."}, + {1, "ADD", 0, "Add", "Use add blending mode while painting."}, + {2, "SUB", 0, "Subtract", "Use subtract blending mode while painting."}, + {3, "MUL", 0, "Multiply", "Use multiply blending mode while painting."}, + {4, "BLUR", 0, "Blur", "Blur the color with surrounding values"}, + {5, "LIGHTEN", 0, "Lighten", "Use lighten blending mode while painting."}, + {6, "DARKEN", 0, "Darken", "Use darken blending mode while painting."}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "VertexPaint", NULL); + RNA_def_struct_sdna(srna, "VPaint"); + RNA_def_struct_ui_text(srna, "Vertex Paint", "Properties of vertex and weight paint mode."); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Brush"); + RNA_def_property_ui_text(prop, "Brush", ""); + + prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, prop_mode_items); + RNA_def_property_ui_text(prop, "Brush Mode", "Mode in which color is painted."); + + prop= RNA_def_property(srna, "all_faces", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_AREA); + RNA_def_property_ui_text(prop, "All Faces", "Paint on all faces inside brush."); + + prop= RNA_def_property(srna, "vertex_dist", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SOFT); + RNA_def_property_ui_text(prop, "Vertex Dist", "Use distances to vertices (instead of paint entire faces)."); + + prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_NORMALS); + RNA_def_property_ui_text(prop, "Normals", "Applies the vertex normal before painting."); + + prop= RNA_def_property(srna, "spray", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SPRAY); + RNA_def_property_ui_text(prop, "Spray", "Keep applying paint effect while holding mouse."); + + prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.1f, 5.0f); + RNA_def_property_ui_text(prop, "Gamma", "Vertex paint Gamma."); + + prop= RNA_def_property(srna, "mul", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.1f, 50.0f); + RNA_def_property_ui_text(prop, "Mul", "Vertex paint Mul."); +} + +static void rna_def_image_paint(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem tool_items[] = { + {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", ""}, + {PAINT_TOOL_SOFTEN, "SOFTEN", 0, "Soften", ""}, + {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", ""}, + {PAINT_TOOL_CLONE, "CLONE", 0, "Clone", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "ImagePaint", NULL); + RNA_def_struct_sdna(srna, "ImagePaintSettings"); + RNA_def_struct_ui_text(srna, "Image Paint", "Properties of image and texture painting mode."); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Brush"); + RNA_def_property_ui_text(prop, "Brush", ""); + + prop= RNA_def_property(srna, "tool", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, tool_items); + RNA_def_property_ui_text(prop, "Tool", ""); + + /* booleans */ + + prop= RNA_def_property(srna, "show_brush_draw", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_DRAW_TOOL); + RNA_def_property_ui_text(prop, "Show Brush Draw", "Enables brush shape while drawing."); + + prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_DRAW_TOOL_DRAWING); + RNA_def_property_ui_text(prop, "Show Brush", "Enables brush shape while not drawing."); + + prop= RNA_def_property(srna, "use_projection", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_DISABLE); + RNA_def_property_ui_text(prop, "Project Paint", "Use projection painting for improved consistency in the brush strokes."); + + prop= RNA_def_property(srna, "occlude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); + RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)"); + + prop= RNA_def_property(srna, "cull", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); + RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)"); + + prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); + RNA_def_property_ui_text(prop, "Normal", "Paint most on faces pointing towards the view"); + + prop= RNA_def_property(srna, "use_stencil_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK); + RNA_def_property_ui_text(prop, "Stencil Layer", "Set the mask layer from the UV layer buttons"); + + prop= RNA_def_property(srna, "invert_mask", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK_INV); + RNA_def_property_ui_text(prop, "Invert", "Invert the mask"); + + prop= RNA_def_property(srna, "use_clone_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE); + RNA_def_property_ui_text(prop, "Clone Layer", "Use another UV layer as clone source, otherwise use 3D the cursor as the source"); + + /* integers */ + + prop= RNA_def_property(srna, "seam_bleed", PROP_INT, PROP_UNSIGNED); + RNA_def_property_ui_range(prop, 0, 8, 0, 0); + RNA_def_property_ui_text(prop, "Bleed", "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)."); + + prop= RNA_def_property(srna, "normal_angle", PROP_INT, PROP_UNSIGNED); + RNA_def_property_range(prop, 0, 90); + RNA_def_property_ui_text(prop, "Angle", "Paint most on faces pointing towards the view acording to this angle."); +} + +static void rna_def_particle_edit(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem tool_items[] = { + {PE_BRUSH_NONE, "NONE", 0, "None", "Don't use any brush."}, + {PE_BRUSH_COMB, "COMB", 0, "Comb", "Comb hairs."}, + {PE_BRUSH_SMOOTH, "SMOOTH", 0, "Smooth", "Smooth hairs."}, + {PE_BRUSH_WEIGHT, "WEIGHT", 0, "Weight", "Assign weight to hairs."}, + {PE_BRUSH_ADD, "ADD", 0, "Add", "Add hairs."}, + {PE_BRUSH_LENGTH, "LENGTH", 0, "Length", "Make hairs longer or shorter."}, + {PE_BRUSH_PUFF, "PUFF", 0, "Puff", "Make hairs stand up."}, + {PE_BRUSH_CUT, "CUT", 0, "Cut", "Cut hairs."}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem select_mode_items[] = { + {SCE_SELECT_PATH, "PATH", ICON_EDGESEL, "Path", ""}, // XXX icon + {SCE_SELECT_POINT, "POINT", ICON_VERTEXSEL, "Point", ""}, // XXX icon + {SCE_SELECT_END, "END", ICON_FACESEL, "End", "E"}, // XXX icon + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem puff_mode[] = { + {0, "ADD", 0, "Add", "Make hairs more puffy."}, + {1, "SUB", 0, "Sub", "Make hairs less puffy."}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem length_mode[] = { + {0, "GROW", 0, "Grow", "Make hairs longer."}, + {1, "SHRINK", 0, "Shrink", "Make hairs shorter."}, + {0, NULL, 0, NULL, NULL}}; + + /* edit */ + + srna= RNA_def_struct(brna, "ParticleEdit", NULL); + RNA_def_struct_sdna(srna, "ParticleEditSettings"); + RNA_def_struct_ui_text(srna, "Particle Edit", "Properties of particle editing mode."); + + prop= RNA_def_property(srna, "tool", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "brushtype"); + RNA_def_property_enum_items(prop, tool_items); + RNA_def_property_ui_text(prop, "Tool", ""); + + prop= RNA_def_property(srna, "selection_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "selectmode"); + RNA_def_property_enum_items(prop, select_mode_items); + RNA_def_property_ui_text(prop, "Selection Mode", "Particle select and display mode."); + + prop= RNA_def_property(srna, "keep_lengths", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_KEEP_LENGTHS); + RNA_def_property_ui_text(prop, "Keep Lengths", "Keep path lengths constant."); + + prop= RNA_def_property(srna, "keep_root", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_LOCK_FIRST); + RNA_def_property_ui_text(prop, "Keep Root", "Keep root keys unmodified."); + + prop= RNA_def_property(srna, "emitter_deflect", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DEFLECT_EMITTER); + RNA_def_property_ui_text(prop, "Deflect Emitter", "Keep paths from intersecting the emitter."); + + prop= RNA_def_property(srna, "emitter_distance", PROP_FLOAT, PROP_UNSIGNED); + RNA_def_property_float_sdna(prop, NULL, "emitterdist"); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 10, 3); + RNA_def_property_ui_text(prop, "Emitter Distance", "Distance to keep particles away from the emitter."); + + prop= RNA_def_property(srna, "show_time", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_SHOW_TIME); + RNA_def_property_ui_text(prop, "Show Time", "Show time values of the baked keys."); + + prop= RNA_def_property(srna, "show_children", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_SHOW_CHILD); + RNA_def_property_ui_text(prop, "Show Children", "Show child particles."); + + prop= RNA_def_property(srna, "mirror_x", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_X_MIRROR); + RNA_def_property_ui_text(prop, "X-Axis Mirror", "Mirror operations over the X axis while editing."); + + prop= RNA_def_property(srna, "add_interpolate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_INTERPOLATE_ADDED); + RNA_def_property_ui_text(prop, "Interpolate", "Interpolate new particles from the existing ones."); + + prop= RNA_def_property(srna, "add_keys", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "totaddkey"); + RNA_def_property_range(prop, 2, INT_MAX); + RNA_def_property_ui_range(prop, 2, 20, 10, 3); + RNA_def_property_ui_text(prop, "Keys", "How many keys to make new particles with."); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "ParticleBrush"); + RNA_def_property_pointer_funcs(prop, "rna_ParticleEdit_brush_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Brush", ""); + + /* brush */ + + srna= RNA_def_struct(brna, "ParticleBrush", NULL); + RNA_def_struct_sdna(srna, "ParticleBrushData"); + RNA_def_struct_ui_text(srna, "Particle Brush", "Particle editing brush."); + + prop= RNA_def_property(srna, "size", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 1, INT_MAX); + RNA_def_property_ui_range(prop, 1, 100, 10, 3); + RNA_def_property_ui_text(prop, "Size", "Brush size."); + + prop= RNA_def_property(srna, "strength", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 1, INT_MAX); + RNA_def_property_ui_range(prop, 1, 100, 10, 3); + RNA_def_property_ui_text(prop, "Strength", "Brush strength."); + + prop= RNA_def_property(srna, "steps", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "step"); + RNA_def_property_range(prop, 1, INT_MAX); + RNA_def_property_ui_range(prop, 1, 50, 10, 3); + RNA_def_property_ui_text(prop, "Steps", "Brush steps."); + + prop= RNA_def_property(srna, "puff_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "invert"); + RNA_def_property_enum_items(prop, puff_mode); + RNA_def_property_ui_text(prop, "Puff Mode", ""); + + prop= RNA_def_property(srna, "length_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "invert"); + RNA_def_property_enum_items(prop, length_mode); + RNA_def_property_ui_text(prop, "Length Mode", ""); + + /* dummy */ + prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "CurveMapping"); + RNA_def_property_pointer_funcs(prop, "rna_ParticleBrush_curve_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Curve", ""); +} + +void RNA_def_sculpt_paint(BlenderRNA *brna) +{ + rna_def_sculpt(brna); + rna_def_vertex_paint(brna); + rna_def_image_paint(brna); + rna_def_particle_edit(brna); +} + +#endif + diff --git a/source/blender/makesrna/intern/rna_vpaint.c b/source/blender/makesrna/intern/rna_vpaint.c deleted file mode 100644 index bf6b70dab23..00000000000 --- a/source/blender/makesrna/intern/rna_vpaint.c +++ /dev/null @@ -1,90 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Campbell Barton - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include - -#include "RNA_define.h" -#include "RNA_types.h" - -#include "rna_internal.h" - -#include "DNA_scene_types.h" - -#ifdef RNA_RUNTIME - -#else - -void RNA_def_vpaint(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - static EnumPropertyItem prop_mode_items[] = { - {0, "MIX", 0, "Mix", "Use mix blending mode while painting."}, - {1, "ADD", 0, "Add", "Use add blending mode while painting."}, - {2, "SUB", 0, "Subtract", "Use subtract blending mode while painting."}, - {3, "MUL", 0, "Multiply", "Use multiply blending mode while painting."}, - {4, "BLUR", 0, "Blur", "Blur the color with surrounding values"}, - {5, "LIGHTEN", 0, "Lighten", "Use lighten blending mode while painting."}, - {6, "DARKEN", 0, "Darken", "Use darken blending mode while painting."}, - {0, NULL, 0, NULL, NULL}}; - - srna= RNA_def_struct(brna, "VPaint", NULL); - RNA_def_struct_ui_text(srna, "Vertex Paint", "Properties of the Vpaint tool."); - - prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "Brush"); - RNA_def_property_ui_text(prop, "Brush", ""); - - prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, prop_mode_items); - RNA_def_property_ui_text(prop, "Brush Mode", "The Mode in which color is painted."); - - prop= RNA_def_property(srna, "all_faces", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_AREA); - RNA_def_property_ui_text(prop, "All Faces", "Paint on all faces inside brush."); - - prop= RNA_def_property(srna, "vertex_dist", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SOFT); - RNA_def_property_ui_text(prop, "Vertex Dist", "Use distances to vertices (instead of paint entire faces)."); - - prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_NORMALS); - RNA_def_property_ui_text(prop, "Normals", "Applies the vertex normal before painting."); - - prop= RNA_def_property(srna, "spray", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SPRAY); - RNA_def_property_ui_text(prop, "Spray", "Keep applying paint effect while holding mouse."); - - prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.1f, 5.0f); - RNA_def_property_ui_text(prop, "Gamma", "Vpaint Gamma."); - - prop= RNA_def_property(srna, "mul", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.1f, 50.0f); - RNA_def_property_ui_text(prop, "Mul", "Vpaint Mul."); - -} - -#endif - From e9ca43521f99c6b9baf6d9278f85323086fcade2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 25 Jul 2009 22:57:29 +0000 Subject: [PATCH 384/512] BGE Physics Add support back for reinstancePhysics mesh, a frequently requested feature in the BGE forums. from what I can tell Sumo supported this but bullet never did. Currently only accessible via python at the moment. - rigid body, dynamic, static types work. - instanced physics meshes are modified too. - compound shapes are not supported. Physics mesh can be re-instanced from... * shape keys & armature deformations * subsurf (any other modifiers too) * RAS_TexVert's (can be modified from python) Moved the reinstancePhysicsMesh functions from RAS_MeshObject into KX_GameObject since the physics data is stored here. video and blend file demo. http://www.graphicall.org/ftp/ideasman42/reinstance.ogv http://www.graphicall.org/ftp/ideasman42/reinstance_demo.blend --- .../Converter/BL_BlenderDataConversion.cpp | 5 +- source/gameengine/Converter/BL_MeshDeformer.h | 2 + .../Ketsji/KX_ConvertPhysicsObject.h | 2 +- .../Ketsji/KX_ConvertPhysicsObjects.cpp | 41 +- source/gameengine/Ketsji/KX_GameObject.cpp | 24 ++ source/gameengine/Ketsji/KX_GameObject.h | 1 + source/gameengine/Ketsji/KX_MeshProxy.cpp | 12 - source/gameengine/Ketsji/KX_MeshProxy.h | 1 - .../Physics/Bullet/CcdPhysicsController.cpp | 407 +++++++++++++++++- .../Physics/Bullet/CcdPhysicsController.h | 7 + source/gameengine/PyDoc/GameTypes.py | 32 +- source/gameengine/Rasterizer/RAS_Deformer.h | 7 + .../gameengine/Rasterizer/RAS_MeshObject.cpp | 7 + source/gameengine/Rasterizer/RAS_MeshObject.h | 8 + 14 files changed, 506 insertions(+), 50 deletions(-) diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 385301b1105..caa76263b25 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1040,7 +1040,10 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* layer.face++; } } - meshobj->m_sharedvertex_map.clear(); + // keep meshobj->m_sharedvertex_map for reinstance phys mesh. + // 2.49a and before it did: meshobj->m_sharedvertex_map.clear(); + // but this didnt save much ram. - Campbell + meshobj->EndConversion(); // pre calculate texture generation for(list::iterator mit = meshobj->GetFirstMaterial(); diff --git a/source/gameengine/Converter/BL_MeshDeformer.h b/source/gameengine/Converter/BL_MeshDeformer.h index 99ae5f9dea0..289826e45e7 100644 --- a/source/gameengine/Converter/BL_MeshDeformer.h +++ b/source/gameengine/Converter/BL_MeshDeformer.h @@ -68,6 +68,8 @@ public: virtual RAS_Deformer* GetReplica(){return NULL;}; virtual void ProcessReplica(); struct Mesh* GetMesh() { return m_bmesh; }; + virtual class RAS_MeshObject* GetRasMesh() { return (RAS_MeshObject*)m_pMeshObject; }; + virtual float (* GetTransVerts(int *tot))[3] { *tot= m_tvtot; return m_transverts; } // virtual void InitDeform(double time){}; protected: diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h index 74042366bae..cf50e0ccd06 100644 --- a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h +++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h @@ -194,7 +194,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj, struct KX_ObjectProperties* objprop); void KX_ClearBulletSharedShapes(); -//bool KX_ReInstanceShapeFromMesh(RAS_MeshObject* meshobj); +bool KX_ReInstanceBulletShapeFromMesh(KX_GameObject *gameobj, KX_GameObject *from_gameobj, RAS_MeshObject* from_meshobj); #endif #endif //KX_CONVERTPHYSICSOBJECTS diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp index 51c41c0686d..cc8a00e8454 100644 --- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp +++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp @@ -1220,5 +1220,44 @@ void KX_ClearBulletSharedShapes() { } -#endif +/* Refresh the physics object from either an object or a mesh. + * gameobj must be valid + * from_gameobj and from_meshobj can be NULL + * + * when setting the mesh, the following vars get priority + * 1) from_meshobj - creates the phys mesh from RAS_MeshObject + * 2) from_gameobj - creates the phys mesh from the DerivedMesh where possible, else the RAS_MeshObject + * 3) gameobj - update the phys mesh from DerivedMesh or RAS_MeshObject + * + * Most of the logic behind this is in shapeInfo->UpdateMesh(...) + */ +bool KX_ReInstanceBulletShapeFromMesh(KX_GameObject *gameobj, KX_GameObject *from_gameobj, RAS_MeshObject* from_meshobj) +{ + KX_BulletPhysicsController *spc= static_cast((gameobj->GetPhysicsController())); + CcdShapeConstructionInfo *shapeInfo; + /* if this is the child of a compound shape this can happen + * dont support compound shapes for now */ + if(spc==NULL) + return false; + + shapeInfo = spc->GetShapeInfo(); + + if(shapeInfo->m_shapeType != PHY_SHAPE_MESH || spc->GetSoftBody()) + return false; + + spc->DeleteControllerShape(); + + if(from_gameobj==NULL && from_meshobj==NULL) + from_gameobj= gameobj; + + /* updates the arrays used for making the new bullet mesh */ + shapeInfo->UpdateMesh(from_gameobj, from_meshobj); + + /* create the new bullet mesh */ + btCollisionShape* bm= shapeInfo->CreateBulletShape(spc->getConstructionInfo().m_margin); + + spc->ReplaceControllerShape(bm); + return true; +} +#endif diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index b266095c715..36a9efe5b91 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -66,6 +66,7 @@ typedef unsigned long uint_ptr; #include "KX_PythonInit.h" #include "KX_PyMath.h" #include "KX_PythonSeq.h" +#include "KX_ConvertPhysicsObject.h" #include "SCA_IActuator.h" #include "SCA_ISensor.h" #include "SCA_IController.h" @@ -1183,6 +1184,7 @@ PyMethodDef KX_GameObject::Methods[] = { {"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS}, {"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_O}, {"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS}, + {"reinstancePhysicsMesh", (PyCFunction)KX_GameObject::sPyReinstancePhysicsMesh,METH_VARARGS}, KX_PYMETHODTABLE(KX_GameObject, rayCastTo), KX_PYMETHODTABLE(KX_GameObject, rayCast), @@ -1280,6 +1282,28 @@ PyObject* KX_GameObject::PyEndObject() } +PyObject* KX_GameObject::PyReinstancePhysicsMesh(PyObject* args) +{ + KX_GameObject *gameobj= NULL; + RAS_MeshObject *mesh= NULL; + + PyObject *gameobj_py= NULL; + PyObject *mesh_py= NULL; + + if ( !PyArg_ParseTuple(args,"|OO:reinstancePhysicsMesh",&gameobj_py, &mesh_py) || + (gameobj_py && !ConvertPythonToGameObject(gameobj_py, &gameobj, true, "gameOb.reinstancePhysicsMesh(obj, mesh): KX_GameObject")) || + (mesh_py && !ConvertPythonToMesh(mesh_py, &mesh, true, "gameOb.reinstancePhysicsMesh(obj, mesh): KX_GameObject")) + ) { + return NULL; + } + + /* gameobj and mesh can be NULL */ + if(KX_ReInstanceBulletShapeFromMesh(this, gameobj, mesh)) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; +} + PyObject* KX_GameObject::PyGetPosition() { diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index ff5c8a01e6e..d2450d342c1 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -872,6 +872,7 @@ public: KX_PYMETHOD_DOC_O(KX_GameObject,getDistanceTo); KX_PYMETHOD_DOC_O(KX_GameObject,getVectTo); KX_PYMETHOD_DOC_VARARGS(KX_GameObject, sendMessage); + KX_PYMETHOD_VARARGS(KX_GameObject, ReinstancePhysicsMesh); /* Dict access */ KX_PYMETHOD_VARARGS(KX_GameObject,get); diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp index ee5813ad854..c6989a81c6d 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.cpp +++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp @@ -87,7 +87,6 @@ PyMethodDef KX_MeshProxy::Methods[] = { {"getVertexArrayLength", (PyCFunction)KX_MeshProxy::sPyGetVertexArrayLength,METH_VARARGS}, {"getVertex", (PyCFunction)KX_MeshProxy::sPyGetVertex,METH_VARARGS}, {"getPolygon", (PyCFunction)KX_MeshProxy::sPyGetPolygon,METH_VARARGS}, -KX_PYMETHODTABLE(KX_MeshProxy, reinstancePhysicsMesh), //{"getIndexArrayLength", (PyCFunction)KX_MeshProxy::sPyGetIndexArrayLength,METH_VARARGS}, {NULL,NULL} //Sentinel @@ -262,17 +261,6 @@ PyObject* KX_MeshProxy::PyGetPolygon(PyObject* args, PyObject* kwds) return polyob; } -KX_PYMETHODDEF_DOC(KX_MeshProxy, reinstancePhysicsMesh, -"Reinstance the physics mesh.") -{ -#if 0 - //this needs to be reviewed, it is dependend on Sumo/Solid. Who is using this ? - if(KX_ReInstanceShapeFromMesh(m_meshobj)) - Py_RETURN_TRUE; -#endif - Py_RETURN_FALSE; -} - PyObject* KX_MeshProxy::pyattr_get_materials(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_MeshProxy* self= static_cast(self_v); diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h index bfdd4be4118..cbdce3c2745 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.h +++ b/source/gameengine/Ketsji/KX_MeshProxy.h @@ -69,7 +69,6 @@ public: KX_PYMETHOD(KX_MeshProxy,GetVertexArrayLength); KX_PYMETHOD(KX_MeshProxy,GetVertex); KX_PYMETHOD(KX_MeshProxy,GetPolygon); - KX_PYMETHOD_DOC(KX_MeshProxy, reinstancePhysicsMesh); static PyObject* pyattr_get_materials(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject * pyattr_get_numMaterials(void * self, const KX_PYATTRIBUTE_DEF * attrdef); diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 3c41a856660..20e830c9dc3 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -22,6 +22,8 @@ subject to the following restrictions: #include "PHY_IMotionState.h" #include "CcdPhysicsEnvironment.h" #include "RAS_MeshObject.h" +#include "KX_GameObject.h" + #include "BulletSoftBody/btSoftBody.h" #include "BulletSoftBody//btSoftBodyInternals.h" #include "BulletSoftBody/btSoftBodyHelpers.h" @@ -529,7 +531,7 @@ void CcdPhysicsController::CreateRigidbody() } -static void DeleteBulletShape(btCollisionShape* shape) +static void DeleteBulletShape(btCollisionShape* shape, bool free) { if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) { @@ -539,7 +541,66 @@ static void DeleteBulletShape(btCollisionShape* shape) if (meshInterface) delete meshInterface; } - delete shape; + if(free) { + delete shape; + } +} + +bool CcdPhysicsController::DeleteControllerShape( ) +{ + if (m_collisionShape) + { + // collision shape is always unique to the controller, can delete it here + if (m_collisionShape->isCompound()) + { + // bullet does not delete the child shape, must do it here + btCompoundShape* compoundShape = (btCompoundShape*)m_collisionShape; + int numChild = compoundShape->getNumChildShapes(); + for (int i=numChild-1 ; i >= 0; i--) + { + btCollisionShape* childShape = compoundShape->getChildShape(i); + DeleteBulletShape(childShape, true); + } + } + DeleteBulletShape(m_collisionShape, true); + + return true; + } + + return false; +} + +bool CcdPhysicsController::ReplaceControllerShape(btCollisionShape *newShape) +{ + + /* Note, deleting the previous collision shape must be done alredy */ + /* if (m_collisionShape) DeleteControllerShape(); */ + + m_object->setCollisionShape(newShape); + m_collisionShape= newShape; + m_cci.m_collisionShape= newShape; + + + /* Copied from CcdPhysicsEnvironment::addCcdPhysicsController() */ + + /* without this, an object can rest on the old physics mesh + * and not move to account for the physics mesh, even with 'nosleep' */ + btSoftRigidDynamicsWorld* dw= GetPhysicsEnvironment()->getDynamicsWorld(); + btCollisionObjectArray &obarr= dw->getCollisionObjectArray(); + btCollisionObject *ob; + btBroadphaseProxy* proxy; + + for(int i= 0; i < obarr.size(); i++) { + ob= obarr[i]; + if (ob->getCollisionShape() == newShape); { + proxy = obarr[i]->getBroadphaseHandle(); + + if(proxy) + dw->getPairCache()->cleanProxyFromPairs(proxy,dw->getDispatcher()); + } + } + + return true; } CcdPhysicsController::~CcdPhysicsController() @@ -554,22 +615,8 @@ CcdPhysicsController::~CcdPhysicsController() delete m_bulletMotionState; delete m_object; - if (m_collisionShape) - { - // collision shape is always unique to the controller, can delete it here - if (m_collisionShape->isCompound()) - { - // bullet does not delete the child shape, must do it here - btCompoundShape* compoundShape = (btCompoundShape*)m_collisionShape; - int numChild = compoundShape->getNumChildShapes(); - for (int i=numChild-1 ; i >= 0; i--) - { - btCollisionShape* childShape = compoundShape->getChildShape(i); - DeleteBulletShape(childShape); - } - } - DeleteBulletShape(m_collisionShape); - } + DeleteControllerShape(); + if (m_shapeInfo) { m_shapeInfo->Release(); @@ -1264,7 +1311,7 @@ PHY_IPhysicsController* CcdPhysicsController::GetReplica() if (m_shapeInfo) { // This situation does not normally happen - cinfo.m_collisionShape = m_shapeInfo->CreateBulletShape(0.01); + cinfo.m_collisionShape = m_shapeInfo->CreateBulletShape(m_cci.m_margin); } else if (m_collisionShape) { @@ -1621,6 +1668,311 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, return true; } +#include + +/* Updates the arrays used by CreateBulletShape(), + * take care that recalcLocalAabb() runs after CreateBulletShape is called. + * */ +bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject* gameobj, class RAS_MeshObject* meshobj) +{ + int numpolys; + int numverts; + + unsigned int tot_bt_tris= 0; + unsigned int tot_bt_verts= 0; + + int i, j; + int v_orig; + + /* Use for looping over verts in a face as a try or 2 tris */ + const int quad_verts[7]= {0,1,2, 0,2,3, -1}; + const int tri_verts[4]= {0,1,2, -1}; + const int *fv_pt; + + if(gameobj==NULL && meshobj==NULL) + return false; + + if(m_shapeType != PHY_SHAPE_MESH) + return false; + + RAS_Deformer *deformer= gameobj ? gameobj->GetDeformer():NULL; + + /* get the mesh from the object if not defined */ + if(meshobj==NULL) { + + /* modifier mesh */ + if(deformer && deformer->GetFinalMesh()) + meshobj= deformer->GetRasMesh(); + + /* game object first mesh */ + if(meshobj==NULL) { + if(gameobj->GetMeshCount() > 0) { + meshobj= gameobj->GetMesh(0); + } + } + } + + if(deformer && deformer->GetFinalMesh() && deformer->GetRasMesh() == meshobj) + { /* + * Derived Mesh Update + * + * */ + + DerivedMesh* dm= gameobj->GetDeformer()->GetFinalMesh(); + + MVert *mvert = dm->getVertArray(dm); + MFace *mface = dm->getFaceArray(dm); + numpolys = dm->getNumFaces(dm); + numverts = dm->getNumVerts(dm); + int* index = (int*)dm->getFaceDataArray(dm, CD_ORIGINDEX); + + MFace *mf; + MVert *mv; + + int flen; + + if(CustomData_has_layer(&dm->faceData, CD_MTFACE)) + { + MTFace *tface = (MTFace *)dm->getFaceDataArray(dm, CD_MTFACE); + MTFace *tf; + + vector vert_tag_array(numverts, false); + vector vert_remap_array(numverts, 0); + + for(mf= mface, tf= tface, i=0; i < numpolys; mf++, tf++, i++) { + if(tf->mode & TF_DYNAMIC) + { + if(mf->v4) { + tot_bt_tris+= 2; + flen= 4; + } else { + tot_bt_tris++; + flen= 3; + } + + for(j=0; jv1 + j)); + + if(vert_tag_array[v_orig]==false) + { + vert_tag_array[v_orig]= true; + vert_remap_array[v_orig]= tot_bt_verts; + tot_bt_verts++; + } + } + } + } + + m_vertexArray.resize(tot_bt_verts*3); + btScalar *bt= &m_vertexArray[0]; + + m_triFaceArray.resize(tot_bt_tris*3); + int *tri_pt= &m_triFaceArray[0]; + + m_polygonIndexArray.resize(tot_bt_tris); + int *poly_index_pt= &m_polygonIndexArray[0]; + + + for(mf= mface, tf= tface, i=0; i < numpolys; mf++, tf++, i++) + { + if(tf->mode & TF_DYNAMIC) + { + if(mf->v4) { + fv_pt= quad_verts; + *poly_index_pt++ = *poly_index_pt++ = index[i]; + flen= 4; + } else { + fv_pt= tri_verts; + *poly_index_pt++ = index[i]; + flen= 3; + } + + for(; *fv_pt > -1; fv_pt++) + { + v_orig = (*(&mf->v1 + (*fv_pt))); + + if(vert_tag_array[v_orig]) + { + mv= mvert + v_orig; + *bt++ = mv->co[0]; + *bt++ = mv->co[1]; + *bt++ = mv->co[2]; + + vert_tag_array[v_orig]= false; + } + *tri_pt++ = vert_remap_array[v_orig]; + } + } + } + } + else { + /* no need for a vertex mapping. simple/fast */ + + tot_bt_verts= numverts; + + for(mf= mface, i=0; i < numpolys; mf++, i++) { + tot_bt_tris += (mf->v4 ? 2:1); + } + + m_vertexArray.resize(tot_bt_verts*3); + btScalar *bt= &m_vertexArray[0]; + + m_triFaceArray.resize(tot_bt_tris*3); + int *tri_pt= &m_triFaceArray[0]; + + m_polygonIndexArray.resize(tot_bt_tris); + int *poly_index_pt= &m_polygonIndexArray[0]; + + for(mv= mvert, i=0; i < numverts; mv++, i++) { + *bt++ = mv->co[0]; *bt++ = mv->co[1]; *bt++ = mv->co[2]; + } + + for(mf= mface, i=0; i < numpolys; mf++, i++) { + unsigned int *fv = &mf->v1; + + if(mf->v4) { + fv_pt= quad_verts; + *poly_index_pt++ = *poly_index_pt++ = index[i]; + } + else { + fv_pt= tri_verts; + *poly_index_pt++ = index[i]; + } + + for(; *fv_pt > -1; fv_pt++) + *tri_pt++ = (*(&mf->v1 + (*fv_pt))); + } + } + } + else { /* + * RAS Mesh Update + * + * */ + + /* Note!, gameobj can be NULL here */ + + /* transverts are only used for deformed RAS_Meshes, the RAS_TexVert data + * is too hard to get at, see below for details */ + float (*transverts)[3]= NULL; + int transverts_tot= 0; /* with deformed meshes - should always be greater then the max orginal index, or we get crashes */ + + if(deformer) { + /* map locations from the deformed array + * + * Could call deformer->Update(); but rely on redraw updating. + * */ + transverts= deformer->GetTransVerts(&transverts_tot); + } + + // Tag verts we're using + numpolys= meshobj->NumPolygons(); + numverts= meshobj->m_sharedvertex_map.size(); + const float *xyz; + + + vector vert_tag_array(numverts, false); + vector vert_remap_array(numverts, 0); + + for(int p=0; pGetPolygon(p); + if (poly->IsCollider()) + { + for(i=0; i < poly->VertexCount(); i++) + { + v_orig= poly->GetVertex(i)->getOrigIndex(); + if(vert_tag_array[v_orig]==false) + { + vert_tag_array[v_orig]= true; + vert_remap_array[v_orig]= tot_bt_verts; + tot_bt_verts++; + } + } + tot_bt_tris += (poly->VertexCount()==4 ? 2:1); + } + } + + m_vertexArray.resize(tot_bt_verts*3); + btScalar *bt= &m_vertexArray[0]; + + m_triFaceArray.resize(tot_bt_tris*3); + int *tri_pt= &m_triFaceArray[0]; + + /* cant be used for anything useful in this case, since we dont rely on the original mesh + * will just be an array like pythons range(tot_bt_tris) */ + m_polygonIndexArray.resize(tot_bt_tris); + + + for(int p=0; pGetPolygon(p); + + if (poly->IsCollider()) + { + /* quad or tri loop */ + fv_pt= (poly->VertexCount()==3 ? tri_verts:quad_verts); + + for(; *fv_pt > -1; fv_pt++) + { + v_orig= poly->GetVertex(*fv_pt)->getOrigIndex(); + + if(vert_tag_array[v_orig]) + { + if(transverts) { + /* deformed mesh, using RAS_TexVert locations would be too troublesome + * because they are use the gameob as a hash in the material slot */ + *bt++ = transverts[v_orig][0]; + *bt++ = transverts[v_orig][1]; + *bt++ = transverts[v_orig][2]; + } + else { + /* static mesh python may have modified */ + xyz= meshobj->GetVertexLocation( v_orig ); + *bt++ = xyz[0]; + *bt++ = xyz[1]; + *bt++ = xyz[2]; + } + + vert_tag_array[v_orig]= false; + } + + *tri_pt++ = vert_remap_array[v_orig]; + } + } + + m_polygonIndexArray[p]= p; /* dumb counting */ + } + } + +#if 0 + /* needs #include */ + printf("# vert count %d\n", m_vertexArray.size()); + for(int i=0; i~btBvhTriangleMeshShape(); + + m_unscaledShape = new(m_unscaledShape) btBvhTriangleMeshShape( indexVertexArrays, true ); + } else { + m_unscaledShape = new btBvhTriangleMeshShape( indexVertexArrays, true ); + } + + m_forceReInstance= false; m_unscaledShape->recalcLocalAabb(); } collisionShape = new btScaledBvhTriangleMeshShape(m_unscaledShape, btVector3(1.0f,1.0f,1.0f)); @@ -1776,7 +2139,7 @@ CcdShapeConstructionInfo::~CcdShapeConstructionInfo() m_shapeArray.clear(); if (m_unscaledShape) { - DeleteBulletShape(m_unscaledShape); + DeleteBulletShape(m_unscaledShape, true); } m_vertexArray.clear(); if (m_shapeType == PHY_SHAPE_MESH && m_meshObject != NULL) diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h index d73759bac76..8eb2e616ecf 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h @@ -146,6 +146,9 @@ public: return m_meshObject; } + bool UpdateMesh(class KX_GameObject* gameobj, class RAS_MeshObject* mesh); + + bool SetProxy(CcdShapeConstructionInfo* shapeInfo); CcdShapeConstructionInfo* GetProxy(void) { @@ -185,6 +188,7 @@ protected: // the actual shape is of type btScaledBvhTriangleMeshShape std::vector m_shapeArray; // for compound shapes bool m_useGimpact; //use gimpact for concave dynamic/moving collision detection + bool m_forceReInstance; //use gimpact for concave dynamic/moving collision detection float m_weldingThreshold1; //welding closeby vertices together can improve softbody stability etc. CcdShapeConstructionInfo* m_shapeProxy; // only used for PHY_SHAPE_PROXY, pointer to actual shape info }; @@ -381,6 +385,9 @@ protected: CcdPhysicsController (const CcdConstructionInfo& ci); + bool DeleteControllerShape(); + bool ReplaceControllerShape(btCollisionShape *newShape); + virtual ~CcdPhysicsController(); CcdConstructionInfo& getConstructionInfo() diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 35d8cd63c44..6a554a7c42e 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -2078,6 +2078,26 @@ class KX_GameObject(SCA_IObject): @param to: The name of the object to send the message to (optional) @type to: string """ + def reinstancePhysicsMesh(gameObject, meshObject): + """ + Updates the physics system with the changed mesh. + + If no arguments are given the physics mesh will be re-created from the first mesh assigned to the game object. + + @param gameObject: optional argument, set the physics shape from this gameObjets mesh. + @type gameObject: string, L{KX_GameObject} or None + @param meshObject: optional argument, set the physics shape from this mesh. + @type meshObject: string, L{KX_MeshProxy} or None + + @note: if this object has instances the other instances will be updated too. + @note: the gameObject argument has an advantage that it can convert from a mesh with modifiers applied (such as subsurf). + @warning: only triangle mesh type objects are supported currently (not convex hull) + @warning: if the object is a part of a combound object it will fail (parent or child) + @warning: rebuilding the physics mesh can be slow, running many times per second will give a performance hit. + @rtype: boolean + @return: True if reinstance succeeded, False if it failed. + """ + def get(key, default=None): """ Return the value matching key, or the default value if its not found. @@ -2387,18 +2407,6 @@ class KX_MeshProxy(SCA_IObject): @rtype: L{KX_PolyProxy} @return: a polygon object. """ - def reinstancePhysicsMesh(): - """ - Updates the physics system with the changed mesh. - - A mesh must have only one material with collision flags, - and have all collision primitives in one vertex array (ie. < 65535 verts) and - be either a polytope or polyheder mesh. If you don't get a warning in the - console when the collision type is polytope, the mesh is suitable for reinstance. - @bug: This currently does not work. - @rtype: boolean - @return: True if reinstance succeeded, False if it failed. - """ class SCA_MouseSensor(SCA_ISensor): """ diff --git a/source/gameengine/Rasterizer/RAS_Deformer.h b/source/gameengine/Rasterizer/RAS_Deformer.h index fe9b1540af8..75c0dcd1eeb 100644 --- a/source/gameengine/Rasterizer/RAS_Deformer.h +++ b/source/gameengine/Rasterizer/RAS_Deformer.h @@ -38,6 +38,7 @@ #include "GEN_Map.h" struct DerivedMesh; +class RAS_MeshObject; class RAS_Deformer { @@ -71,6 +72,12 @@ public: { return NULL; } + virtual class RAS_MeshObject* GetRasMesh() + { + /* m_pMesh does not seem to be being used?? */ + return NULL; + } + virtual float (* GetTransVerts(int *tot))[3] { *tot= 0; return NULL; } protected: class RAS_MeshObject *m_pMesh; diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp index 1dfcb0c512d..0ae6ad9d7ea 100644 --- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp +++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp @@ -382,6 +382,13 @@ RAS_TexVert* RAS_MeshObject::GetVertex(unsigned int matid, return NULL; } +const float* RAS_MeshObject::GetVertexLocation(unsigned int orig_index) +{ + vector& sharedmap = m_sharedvertex_map[orig_index]; + vector::iterator it= sharedmap.begin(); + return it->m_darray->m_vertex[it->m_offset].getXYZ(); +} + void RAS_MeshObject::AddMeshUser(void *clientobj, SG_QList *head, RAS_Deformer* deformer) { list::iterator it; diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h index e763d6e7c7f..bf9c0f7b682 100644 --- a/source/gameengine/Rasterizer/RAS_MeshObject.h +++ b/source/gameengine/Rasterizer/RAS_MeshObject.h @@ -126,6 +126,7 @@ public: /* vertex and polygon acces */ int NumVertices(RAS_IPolyMaterial* mat); RAS_TexVert* GetVertex(unsigned int matid, unsigned int index); + const float* GetVertexLocation(unsigned int orig_index); int NumPolygons(); RAS_Polygon* GetPolygon(int num) const; @@ -141,6 +142,13 @@ public: bool culled); void RemoveFromBuckets(void *clientobj); + void EndConversion() { +#if 0 + m_sharedvertex_map.clear(); // SharedVertex + vector > shared_null(0); + shared_null.swap( m_sharedvertex_map ); /* really free the memory */ +#endif + } /* colors */ void DebugColor(unsigned int abgr); From dd918da8de8b885d90420dc86351a4996dbd6ea6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 26 Jul 2009 01:32:37 +0000 Subject: [PATCH 385/512] ReplaceMesh Actuator option to replace the physics mesh and display mesh + python api options. When the mesh field is left blank and Physics option is enabled, it reinstances the physics mesh from the existing mesh. like calling gameOb.reinstancePhysicsMesh() from python. --- source/blender/makesdna/DNA_actuator_types.h | 4 + source/blender/src/buttons_logic.c | 5 +- .../Converter/KX_ConvertActuators.cpp | 5 +- source/gameengine/GameLogic/SCA_IScene.h | 2 +- source/gameengine/Ketsji/KX_GameObject.cpp | 14 +- source/gameengine/Ketsji/KX_GameObject.h | 2 +- .../Ketsji/KX_SCA_ReplaceMeshActuator.cpp | 13 +- .../Ketsji/KX_SCA_ReplaceMeshActuator.h | 4 + source/gameengine/Ketsji/KX_Scene.cpp | 220 +++++++++--------- source/gameengine/Ketsji/KX_Scene.h | 2 +- source/gameengine/PyDoc/GameTypes.py | 11 +- 11 files changed, 162 insertions(+), 120 deletions(-) diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h index f713b4a8acc..c3f668ff622 100644 --- a/source/blender/makesdna/DNA_actuator_types.h +++ b/source/blender/makesdna/DNA_actuator_types.h @@ -405,6 +405,10 @@ typedef struct FreeCamera { /* editObjectActuator->flag */ #define ACT_TRACK_3D 1 +/* editObjectActuator->flag for replace mesh actuator */ +#define ACT_EDOB_REPLACE_MESH_NOGFX 2 /* use for replace mesh actuator */ +#define ACT_EDOB_REPLACE_MESH_PHYS 4 + /* SceneActuator->type */ #define ACT_SCENE_RESTART 0 #define ACT_SCENE_SET 1 diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index f9e109b98e7..a57bcf5d7df 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -2177,7 +2177,10 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh 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), 19, &(eoa->me), "replace the existing mesh with this one"); + 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, B_NOP, "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, B_NOP, "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; diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp index ea812a71fdd..b6fc7f1dbba 100644 --- a/source/gameengine/Converter/KX_ConvertActuators.cpp +++ b/source/gameengine/Converter/KX_ConvertActuators.cpp @@ -638,7 +638,10 @@ void BL_ConvertActuators(char* maggiename, = new KX_SCA_ReplaceMeshActuator( gameobj, tmpmesh, - scene + scene, + (editobact->flag & ACT_EDOB_REPLACE_MESH_NOGFX)==0, + (editobact->flag & ACT_EDOB_REPLACE_MESH_PHYS)!=0 + ); baseact = tmpreplaceact; diff --git a/source/gameengine/GameLogic/SCA_IScene.h b/source/gameengine/GameLogic/SCA_IScene.h index b641efc6ee1..79d922a998e 100644 --- a/source/gameengine/GameLogic/SCA_IScene.h +++ b/source/gameengine/GameLogic/SCA_IScene.h @@ -55,7 +55,7 @@ public: //virtual void DelayedReleaseObject(class CValue* gameobj)=0; virtual void ReplaceMesh(class CValue* gameobj, - void* meshobj)=0; + void* meshobj, bool use_gfx, bool use_phys)=0; std::vector& GetDebugProperties(); void AddDebugProperty(class CValue* debugprop, const STR_String &name); diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index 36a9efe5b91..e9263ee62e0 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -1182,7 +1182,7 @@ PyMethodDef KX_GameObject::Methods[] = { {"getChildrenRecursive", (PyCFunction)KX_GameObject::sPyGetChildrenRecursive,METH_NOARGS}, {"getPhysicsId", (PyCFunction)KX_GameObject::sPyGetPhysicsId,METH_NOARGS}, {"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS}, - {"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_O}, + {"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_VARARGS}, {"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS}, {"reinstancePhysicsMesh", (PyCFunction)KX_GameObject::sPyReinstancePhysicsMesh,METH_VARARGS}, @@ -1260,15 +1260,21 @@ bool KX_GameObject::ConvertPythonVectorArgs(PyObject* args, } */ -PyObject* KX_GameObject::PyReplaceMesh(PyObject* value) +PyObject* KX_GameObject::PyReplaceMesh(PyObject* args) { KX_Scene *scene = KX_GetActiveScene(); - RAS_MeshObject* new_mesh; + + PyObject *value; + int use_gfx= 1, use_phys= 0; + RAS_MeshObject *new_mesh; + + if (!PyArg_ParseTuple(args,"O|ii:replaceMesh", &value, &use_gfx, &use_phys)) + return NULL; if (!ConvertPythonToMesh(value, &new_mesh, false, "gameOb.replaceMesh(value): KX_GameObject")) return NULL; - scene->ReplaceMesh(this, new_mesh); + scene->ReplaceMesh(this, new_mesh, (bool)use_gfx, (bool)use_phys); Py_RETURN_NONE; } diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index d2450d342c1..32df5803f31 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -865,7 +865,7 @@ public: KX_PYMETHOD_VARARGS(KX_GameObject,GetMesh); KX_PYMETHOD_NOARGS(KX_GameObject,GetPhysicsId); KX_PYMETHOD_NOARGS(KX_GameObject,GetPropertyNames); - KX_PYMETHOD_O(KX_GameObject,ReplaceMesh); + KX_PYMETHOD_VARARGS(KX_GameObject,ReplaceMesh); KX_PYMETHOD_NOARGS(KX_GameObject,EndObject); KX_PYMETHOD_DOC(KX_GameObject,rayCastTo); KX_PYMETHOD_DOC(KX_GameObject,rayCast); diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp index 00842d7012a..6bb9385889f 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp @@ -96,6 +96,8 @@ PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = { PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = { KX_PYATTRIBUTE_RW_FUNCTION("mesh", KX_SCA_ReplaceMeshActuator, pyattr_get_mesh, pyattr_set_mesh), + KX_PYATTRIBUTE_BOOL_RW ("useDisplayMesh", KX_SCA_ReplaceMeshActuator, m_use_gfx), + KX_PYATTRIBUTE_BOOL_RW ("usePhysicsMesh", KX_SCA_ReplaceMeshActuator, m_use_phys), { NULL } //Sentinel }; @@ -179,11 +181,15 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh, KX_SCA_ReplaceMeshActuator::KX_SCA_ReplaceMeshActuator(SCA_IObject *gameobj, class RAS_MeshObject *mesh, SCA_IScene* scene, + bool use_gfx, + bool use_phys, PyTypeObject* T) : SCA_IActuator(gameobj, T), m_mesh(mesh), - m_scene(scene) + m_scene(scene), + m_use_gfx(use_gfx), + m_use_phys(use_phys) { } /* End of constructor */ @@ -205,7 +211,8 @@ bool KX_SCA_ReplaceMeshActuator::Update() if (bNegativeEvent) return false; // do nothing on negative events - if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh); + if (m_mesh || m_use_phys) /* NULL mesh is ok if were updating physics */ + m_scene->ReplaceMesh(GetParent(),m_mesh, m_use_gfx, m_use_phys); return false; } @@ -227,7 +234,7 @@ CValue* KX_SCA_ReplaceMeshActuator::GetReplica() void KX_SCA_ReplaceMeshActuator::InstantReplaceMesh() { - if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh); + if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh, m_use_gfx, m_use_phys); } /* eof */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h index 0e7f7852701..46d6f3eebf1 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h @@ -50,12 +50,16 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator // mesh reference (mesh to replace) RAS_MeshObject* m_mesh; SCA_IScene* m_scene; + bool m_use_phys; + bool m_use_gfx; public: KX_SCA_ReplaceMeshActuator( SCA_IObject* gameobj, RAS_MeshObject *mesh, SCA_IScene* scene, + bool use_gfx, + bool use_phys, PyTypeObject* T=&Type ); diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index b57a07779cb..caab0f38db9 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -1017,92 +1017,119 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj) -void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj) +void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj, bool use_gfx, bool use_phys) { KX_GameObject* gameobj = static_cast(obj); RAS_MeshObject* mesh = static_cast(meshobj); - if(!gameobj || !mesh) - { - std::cout << "warning: invalid object, mesh will not be replaced" << std::endl; + if(!gameobj) { + std::cout << "KX_Scene::ReplaceMesh Warning: invalid object, doing nothing" << std::endl; return; } - - gameobj->RemoveMeshes(); - gameobj->AddMesh(mesh); - if (gameobj->m_isDeformable) - { - BL_DeformableGameObject* newobj = static_cast( gameobj ); + if(use_gfx && mesh != NULL) + { + gameobj->RemoveMeshes(); + gameobj->AddMesh(mesh); - if (newobj->GetDeformer()) + if (gameobj->m_isDeformable) { - delete newobj->GetDeformer(); - newobj->SetDeformer(NULL); - } - - if (mesh->IsDeformed()) - { - // we must create a new deformer but which one? - KX_GameObject* parentobj = newobj->GetParent(); - // this always return the original game object (also for replicate) - Object* blendobj = newobj->GetBlenderObject(); - // object that owns the new mesh - Object* oldblendobj = static_cast(m_logicmgr->FindBlendObjByGameMeshName(mesh->GetName())); - Mesh* blendmesh = mesh->GetMesh(); - - bool bHasModifier = BL_ModifierDeformer::HasCompatibleDeformer(blendobj); - bool bHasShapeKey = blendmesh->key != NULL && blendmesh->key->type==KEY_RELATIVE; - bool bHasDvert = blendmesh->dvert != NULL; - bool bHasArmature = - parentobj && // current parent is armature - parentobj->GetGameObjectType() == SCA_IObject::OBJ_ARMATURE && - oldblendobj && // needed for mesh deform - blendobj->parent && // original object had armature (not sure this test is needed) - blendobj->parent->type == OB_ARMATURE && - blendobj->partype==PARSKEL && - blendmesh->dvert!=NULL; // mesh has vertex group - bool releaseParent = true; - + BL_DeformableGameObject* newobj = static_cast( gameobj ); - if (oldblendobj==NULL) { - std::cout << "warning: ReplaceMesh() new mesh is not used in an object from the current scene, you will get incorrect behavior" << std::endl; - bHasShapeKey= bHasDvert= bHasArmature=bHasModifier= false; + if (newobj->GetDeformer()) + { + delete newobj->GetDeformer(); + newobj->SetDeformer(NULL); } - - if (bHasModifier) + + if (mesh->IsDeformed()) { - BL_ModifierDeformer* modifierDeformer; - if (bHasShapeKey || bHasArmature) - { - modifierDeformer = new BL_ModifierDeformer( - newobj, - oldblendobj, blendobj, - static_cast(mesh), - true, - static_cast( parentobj ) - ); - releaseParent= false; - modifierDeformer->LoadShapeDrivers(blendobj->parent); + // we must create a new deformer but which one? + KX_GameObject* parentobj = newobj->GetParent(); + // this always return the original game object (also for replicate) + Object* blendobj = newobj->GetBlenderObject(); + // object that owns the new mesh + Object* oldblendobj = static_cast(m_logicmgr->FindBlendObjByGameMeshName(mesh->GetName())); + Mesh* blendmesh = mesh->GetMesh(); + + bool bHasModifier = BL_ModifierDeformer::HasCompatibleDeformer(blendobj); + bool bHasShapeKey = blendmesh->key != NULL && blendmesh->key->type==KEY_RELATIVE; + bool bHasDvert = blendmesh->dvert != NULL; + bool bHasArmature = + parentobj && // current parent is armature + parentobj->GetGameObjectType() == SCA_IObject::OBJ_ARMATURE && + oldblendobj && // needed for mesh deform + blendobj->parent && // original object had armature (not sure this test is needed) + blendobj->parent->type == OB_ARMATURE && + blendobj->partype==PARSKEL && + blendmesh->dvert!=NULL; // mesh has vertex group + bool releaseParent = true; + + + if (oldblendobj==NULL) { + std::cout << "warning: ReplaceMesh() new mesh is not used in an object from the current scene, you will get incorrect behavior" << std::endl; + bHasShapeKey= bHasDvert= bHasArmature=bHasModifier= false; } - else + + if (bHasModifier) { - modifierDeformer = new BL_ModifierDeformer( - newobj, - oldblendobj, blendobj, - static_cast(mesh), - false, - NULL - ); + BL_ModifierDeformer* modifierDeformer; + if (bHasShapeKey || bHasArmature) + { + modifierDeformer = new BL_ModifierDeformer( + newobj, + oldblendobj, blendobj, + static_cast(mesh), + true, + static_cast( parentobj ) + ); + releaseParent= false; + modifierDeformer->LoadShapeDrivers(blendobj->parent); + } + else + { + modifierDeformer = new BL_ModifierDeformer( + newobj, + oldblendobj, blendobj, + static_cast(mesh), + false, + NULL + ); + } + newobj->SetDeformer(modifierDeformer); + } + else if (bHasShapeKey) + { + BL_ShapeDeformer* shapeDeformer; + if (bHasArmature) + { + shapeDeformer = new BL_ShapeDeformer( + newobj, + oldblendobj, blendobj, + static_cast(mesh), + true, + true, + static_cast( parentobj ) + ); + releaseParent= false; + shapeDeformer->LoadShapeDrivers(blendobj->parent); + } + else + { + shapeDeformer = new BL_ShapeDeformer( + newobj, + oldblendobj, blendobj, + static_cast(mesh), + false, + true, + NULL + ); + } + newobj->SetDeformer( shapeDeformer); } - newobj->SetDeformer(modifierDeformer); - } - else if (bHasShapeKey) - { - BL_ShapeDeformer* shapeDeformer; - if (bHasArmature) + else if (bHasArmature) { - shapeDeformer = new BL_ShapeDeformer( + BL_SkinDeformer* skinDeformer = new BL_SkinDeformer( newobj, oldblendobj, blendobj, static_cast(mesh), @@ -1111,49 +1138,28 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj) static_cast( parentobj ) ); releaseParent= false; - shapeDeformer->LoadShapeDrivers(blendobj->parent); + newobj->SetDeformer(skinDeformer); } - else + else if (bHasDvert) { - shapeDeformer = new BL_ShapeDeformer( - newobj, - oldblendobj, blendobj, - static_cast(mesh), - false, - true, - NULL + BL_MeshDeformer* meshdeformer = new BL_MeshDeformer( + newobj, oldblendobj, static_cast(mesh) ); + newobj->SetDeformer(meshdeformer); } - newobj->SetDeformer( shapeDeformer); + + // release parent reference if its not being used + if( releaseParent && parentobj) + parentobj->Release(); } - else if (bHasArmature) - { - BL_SkinDeformer* skinDeformer = new BL_SkinDeformer( - newobj, - oldblendobj, blendobj, - static_cast(mesh), - true, - true, - static_cast( parentobj ) - ); - releaseParent= false; - newobj->SetDeformer(skinDeformer); - } - else if (bHasDvert) - { - BL_MeshDeformer* meshdeformer = new BL_MeshDeformer( - newobj, oldblendobj, static_cast(mesh) - ); - newobj->SetDeformer(meshdeformer); - } - - // release parent reference if its not being used - if( releaseParent && parentobj) - parentobj->Release(); } + + gameobj->AddMeshUser(); + } + + if(use_phys) { /* update the new assigned mesh with the physics mesh */ + KX_ReInstanceBulletShapeFromMesh(gameobj, NULL, use_gfx?NULL:mesh); } - - gameobj->AddMeshUser(); } KX_Camera* KX_Scene::FindCamera(KX_Camera* cam) @@ -1844,4 +1850,4 @@ KX_PYMETHODDEF_DOC(KX_Scene, addObject, // the object is added to the scene so we dont want python to own a reference replica->Release(); return replica->GetProxy(); -} \ No newline at end of file +} diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index 79d3f7fd828..c4f868f6a02 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -323,7 +323,7 @@ public: int NewRemoveObject(CValue* gameobj); void ReplaceMesh(CValue* gameobj, - void* meshobj); + void* meshob, bool use_gfx, bool use_phys); /** * @section Logic stuff * Initiate an update of the logic system. diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 6a554a7c42e..b1d1ce71173 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -1642,10 +1642,14 @@ class KX_GameObject(SCA_IObject): Delete this object, can be used inpace of the EndObject Actuator. The actual removal of the object from the scene is delayed. """ - def replaceMesh(mesh): + def replaceMesh(mesh, useDisplayMesh=True, usePhysicsMesh=False): """ Replace the mesh of this object with a new mesh. This works the same was as the actuator. @type mesh: L{KX_MeshProxy} or mesh name + @type useDisplayMesh: bool + @param useDisplayMesh: when enabled the display mesh will be replaced (optional argument). + @type usePhysicsMesh: bool + @param usePhysicsMesh: when enabled the physics mesh will be replaced (optional argument). """ def getVisible(): """ @@ -3791,6 +3795,11 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator): @ivar mesh: L{KX_MeshProxy} or the name of the mesh that will replace the current one Set to None to disable actuator @type mesh: L{KX_MeshProxy} or None if no mesh is set + + @ivar useDisplayMesh: when true the displayed mesh is replaced. + @type useDisplayMesh: boolean + @ivar usePhysicsMesh: when true the physics mesh is replaced. + @type usePhysicsMesh: boolean """ def setMesh(name): """ From f4d70c98125034808745886873a6d3e7e60527cb Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 26 Jul 2009 03:22:24 +0000 Subject: [PATCH 386/512] 2.5 - Restoring 'set bone setting' operators for Armatures/PoseMode In the future, it might be a good idea to look for more efficient alternatives... --- .../editors/armature/armature_intern.h | 5 +- .../blender/editors/armature/armature_ops.c | 21 ++- .../blender/editors/armature/editarmature.c | 155 +++++++++------- .../editors/space_view3d/view3d_header.c | 169 ++++-------------- 4 files changed, 154 insertions(+), 196 deletions(-) diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 471ea6a6ccd..bf329270b8c 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -56,12 +56,13 @@ void ARMATURE_OT_extrude(struct wmOperatorType *ot); void ARMATURE_OT_click_extrude(struct wmOperatorType *ot); void ARMATURE_OT_fill(struct wmOperatorType *ot); void ARMATURE_OT_merge(struct wmOperatorType *ot); - void ARMATURE_OT_separate(struct wmOperatorType *ot); void ARMATURE_OT_autoside_names(struct wmOperatorType *ot); void ARMATURE_OT_flip_names(struct wmOperatorType *ot); +void ARMATURE_OT_flags_set(struct wmOperatorType *ot); + /* ******************************************************* */ /* Pose-Mode Operators */ void POSE_OT_hide(struct wmOperatorType *ot); @@ -96,6 +97,8 @@ void POSE_OT_paths_clear(struct wmOperatorType *ot); void POSE_OT_autoside_names(struct wmOperatorType *ot); void POSE_OT_flip_names(struct wmOperatorType *ot); +void POSE_OT_flags_set(struct wmOperatorType *ot); + /* ******************************************************* */ /* Etch-A-Ton */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 757430a281a..bfe3befe1b3 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -131,11 +131,12 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_click_extrude); WM_operatortype_append(ARMATURE_OT_fill); WM_operatortype_append(ARMATURE_OT_merge); - WM_operatortype_append(ARMATURE_OT_separate); WM_operatortype_append(ARMATURE_OT_autoside_names); WM_operatortype_append(ARMATURE_OT_flip_names); + + WM_operatortype_append(ARMATURE_OT_flags_set); /* SKETCH */ WM_operatortype_append(SKETCH_OT_gesture); @@ -179,6 +180,8 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_autoside_names); WM_operatortype_append(POSE_OT_flip_names); + WM_operatortype_append(POSE_OT_flags_set); + /* POSELIB */ WM_operatortype_append(POSELIB_OT_browse_interactive); @@ -242,6 +245,14 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, /*KM_CTRL|KM_ALT*/0, 0); + /* set flags */ + kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(kmi->ptr, "mode", 2); // toggle + kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + RNA_enum_set(kmi->ptr, "mode", 1); // enable + kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "mode", 0); // clear + /* Armature -> Etch-A-Ton ------------------------ */ WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", SELECTMOUSE, KM_PRESS, 0, 0); @@ -296,6 +307,14 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_groups_menu", GKEY, KM_PRESS, KM_CTRL, 0); + /* set flags */ + kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(kmi->ptr, "mode", 2); // toggle + kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + RNA_enum_set(kmi->ptr, "mode", 1); // enable + kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "mode", 0); // clear + // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index cda7f1754bb..f20c38a0246 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -371,6 +371,7 @@ void apply_rot_armature (Scene *scene, Object *ob, float mat[3][3]) ED_armature_edit_free(ob); } +/* exported for use in editors/object/ */ /* 0 == do center, 1 == center new, 2 == center cursor */ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode) { @@ -1251,72 +1252,106 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_ return chbone; } - -/* used by posemode and editmode */ -void setflag_armature (Scene *scene, short mode) +/* callback for posemode setflag */ +static int pose_setflag_exec (bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX get from context - Object *ob; - bArmature *arm; - int flag; + int flag= RNA_enum_get(op->ptr, "type"); + int mode= RNA_enum_get(op->ptr, "mode"); - /* get data */ - if (obedit) - ob= obedit; - else if (OBACT) - ob= OBACT; - else - return; - arm= (bArmature *)ob->data; - - /* get flag to set (sync these with the ones used in eBone_Flag */ - if (mode == 2) - flag= pupmenu("Disable Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5|Locked%x6"); - else if (mode == 1) - flag= pupmenu("Enable Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5|Locked%x6"); - else - flag= pupmenu("Toggle Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5|Locked%x6"); - switch (flag) { - case 1: flag = BONE_DRAWWIRE; break; - case 2: flag = BONE_NO_DEFORM; break; - case 3: flag = BONE_MULT_VG_ENV; break; - case 4: flag = BONE_HINGE; break; - case 5: flag = BONE_NO_SCALE; break; - case 6: flag = BONE_EDITMODE_LOCKED; break; - default: return; + /* loop over all selected pchans */ + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pchans) + { + bone_setflag(&pchan->bone->flag, flag, mode); } + CTX_DATA_END; - /* determine which mode armature is in */ - if ((!obedit) && (ob->flag & OB_POSEMODE)) { - /* deal with pose channels */ - bPoseChannel *pchan; - - /* set setting */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone) && (arm->layer & pchan->bone->layer)) { - if (pchan->bone->flag & BONE_SELECTED) { - bone_setflag(&pchan->bone->flag, flag, mode); - } - } - } - } - else if (obedit) { - /* deal with editbones */ - EditBone *curbone; - - /* set setting */ - for (curbone= arm->edbo->first; curbone; curbone= curbone->next) { - if (arm->layer & curbone->layer) { - if (curbone->flag & BONE_SELECTED) { - bone_setflag(&curbone->flag, flag, mode); - } - } - } - } + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_active_object(C)); - BIF_undo_push("Change Bone Setting"); + return OPERATOR_FINISHED; } +/* callback for editbones setflag */ +static int armature_bones_setflag_exec (bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + int flag= RNA_enum_get(op->ptr, "type"); + int mode= RNA_enum_get(op->ptr, "mode"); + + /* loop over all selected pchans */ + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_bones) + { + bone_setflag(&ebone->flag, flag, mode); + } + CTX_DATA_END; + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_edit_object(C)); + + return OPERATOR_FINISHED; +} + +/* settings that can be changed */ +static EnumPropertyItem prop_bone_setting_types[] = { + {BONE_DRAWWIRE, "DRAWWIRE", 0, "Draw Wire", ""}, + {BONE_NO_DEFORM, "DEFORM", 0, "Deform", ""}, + {BONE_MULT_VG_ENV, "MULT_VG", 0, "Multiply Vertex Groups", ""}, + {BONE_HINGE, "HINGE", 0, "Hinge", ""}, + {BONE_NO_SCALE, "NO_SCALE", 0, "No Scale", ""}, + {BONE_EDITMODE_LOCKED, "LOCKED", 0, "Locked", "(For EditMode only)"}, + {0, NULL, 0, NULL, NULL} +}; + +/* ways that settings can be changed */ +static EnumPropertyItem prop_bone_setting_modes[] = { + {0, "CLEAR", 0, "Clear", ""}, + {1, "ENABLE", 0, "Enable", ""}, + {2, "TOGGLE", 0, "Toggle", ""}, + {0, NULL, 0, NULL, NULL} +}; + + +void ARMATURE_OT_flags_set (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Set Bone Flags"; + ot->idname= "ARMATURE_OT_flags_set"; + ot->description= "Set flags for armature bones."; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= armature_bones_setflag_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", ""); +} + +void POSE_OT_flags_set (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Set Bone Flags"; + ot->idname= "POSE_OT_flags_set"; + ot->description= "Set flags for armature bones."; + + /* callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= pose_setflag_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", ""); +} + + /* **************** END PoseMode & EditMode *************************** */ /* **************** Posemode stuff ********************** */ @@ -1501,8 +1536,6 @@ void ARMATURE_OT_select_linked(wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - /* props */ } /* does bones and points */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index abf170c9549..529db1cbb06 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2765,10 +2765,18 @@ static void view3d_edit_armature_rollmenu(bContext *C, uiLayout *layout, void *a //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } +static void view3d_edit_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + PointerRNA ptr; + + uiItemEnumO(layout, "Toggle a Setting", 0, "ARMATURE_OT_flags_set", "mode", 2); + uiItemEnumO(layout, "Enable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 1); + uiItemEnumO(layout, "Disable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 0); +} + #if 0 static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) { -#if 0 static short numcuts= 2; switch(event) { @@ -2783,14 +2791,7 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) case 7: /* Warp */ initTransform(TFM_WARP, CTX_NONE); Transform(); - case 10: /* forked! */ - extrude_armature(1); - break; - case 16: /* Alt-S transform (BoneSize) */ - initTransform(TFM_BONESIZE, CTX_NONE); - Transform(); - break; case 17: /* move to layer */ pose_movetolayer(); break; @@ -2799,66 +2800,6 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) add_blockhandler(curarea, VIEW3D_HANDLER_BONESKETCH, UI_PNL_UNSTOW); break; } - -#endif -} - - -#ifndef DISABLE_PYTHON -static void do_view3d_scripts_armaturemenu(bContext *C, void *arg, int event) -{ -#if 0 - BPY_menu_do_python(PYMENU_ARMATURE, event); - -#endif -} - -static uiBlock *view3d_scripts_armaturemenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; -// XXX BPyMenu *pym; -// int i= 0; -// short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_scripts_armaturemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_scripts_armaturemenu, NULL); - - /* note that we acount for the N previous entries with i+20: */ -// for (pym = BPyMenuTable[PYMENU_ARMATURE]; pym; pym = pym->next, i++) { -// -// uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19, -// NULL, 0.0, 0.0, 1, i, -// pym->tooltip?pym->tooltip:pym->filename); -// } - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} -#endif /* DISABLE_PYTHON */ - -static void do_view3d_armature_settingsmenu(bContext *C, void *arg, int event) -{ -// XXX setflag_armature(event); -} - -static uiBlock *view3d_armature_settingsmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "view3d_armature_settingsmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_armature_settingsmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle a Setting|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Enable a Setting|Ctrl Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Disable a Setting|Alt W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; } #endif @@ -2867,23 +2808,19 @@ static void view3d_edit_armaturemenu(bContext *C, uiLayout *layout, void *arg_un Object *obedit = CTX_data_edit_object(C); bArmature *arm= obedit->data; - //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - #if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Bone Sketching|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, ""); uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, ""); - // XXX uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, ""); #endif + uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu); uiItemMenuF(layout, "Bone Roll", 0, view3d_edit_armature_rollmenu); -#if 0 - if (arm->drawtype==ARM_ENVELOPE) - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); - else if (arm->drawtype==ARM_B_BONE) - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale B-Bone Width|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); -#endif + if (arm->drawtype == ARM_ENVELOPE) + uiItemEnumO(layout, "Scale Envelope Distance", 0, "TFM_OT_transform", "mode", TFM_BONESIZE); + else + uiItemEnumO(layout, "Scale B-Bone Width", 0, "TFM_OT_transform", "mode", TFM_BONESIZE); uiItemS(layout); @@ -2918,15 +2855,10 @@ static void view3d_edit_armaturemenu(bContext *C, uiLayout *layout, void *arg_un #endif uiItemMenuF(layout, "Parent", 0, view3d_edit_armature_parentmenu); - //uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); -#if 0 -#ifndef DISABLE_PYTHON - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemS(layout); - uiDefIconTextBlockBut(block, view3d_scripts_armaturemenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, ""); -#endif -#endif + uiItemMenuF(layout, "Bone Settings ", 0, view3d_edit_armature_settingsmenu); } @@ -2993,6 +2925,15 @@ static void view3d_pose_armature_poselibmenu(bContext *C, uiLayout *layout, void uiItemO(layout, NULL, 0, "POSELIB_OT_pose_remove"); } +static void view3d_pose_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + PointerRNA ptr; + + uiItemEnumO(layout, "Toggle a Setting", 0, "POSE_OT_flags_set", "mode", 2); + uiItemEnumO(layout, "Enable a Setting", 0, "POSE_OT_flags_set", "mode", 1); + uiItemEnumO(layout, "Disable a Setting", 0, "POSE_OT_flags_set", "mode", 0); +} + #if 0 static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event) { @@ -3000,65 +2941,29 @@ static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event) ob=OBACT; switch(event) { - case 0: /* transform properties */ -// XXX mainqenter(NKEY, 1); - break; - case 1: /* copy current pose */ - copy_posebuf(); - break; - case 2: /* paste pose */ - paste_posebuf(0); - break; - case 3: /* paste flipped pose */ - paste_posebuf(1); - break; - case 4: /* insert keyframe */ - common_insertkey(); - break; case 5: pose_copy_menu(); break; - case 9: - pose_flip_names(); - break; - case 13: - if(ob && (ob->flag & OB_POSEMODE)) { - bArmature *arm= ob->data; - if( (arm->drawtype == ARM_B_BONE) || (arm->drawtype == ARM_ENVELOPE)) { - initTransform(TFM_BONESIZE, CTX_NONE); - Transform(); - break; - } - } - break; case 14: /* move bone to layer / change armature layer */ pose_movetolayer(); break; case 15: pose_relax(); break; - case 16: /* auto-extensions for bones */ - case 17: - case 18: - pose_autoside_names(event-16); - break; - case 19: /* assign pose as restpose */ - apply_armature_pose2bones(); - break; - case 20: /* delete keyframe */ - common_deletekey(); - break; } } #endif static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused) -{ +{ + Object *ob = CTX_data_active_object(C); + bArmature *arm= ob->data; + #if 0 // XXX to be ported, using uiItemMenuF(layout, "", 0, view3d_pose_armature_menu); uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); - // ... clear transfrom sub-menu was here.... - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); #endif + if ( (arm) && ((arm->drawtype == ARM_B_BONE) || (arm->drawtype == ARM_ENVELOPE)) ) + uiItemEnumO(layout, "Scale Envelope Distance", 0, "TFM_OT_transform", "mode", TFM_BONESIZE); uiItemMenuF(layout, "Clear Transform", 0, view3d_pose_armature_transformmenu); uiItemS(layout); @@ -3105,6 +3010,10 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemMenuF(layout, "Show/Hide Bones", 0, view3d_pose_armature_showhidemenu); + uiItemS(layout); + + uiItemMenuF(layout, "Bone Settings", 0, view3d_pose_armature_settingsmenu); + #if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Attributes...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); @@ -3112,12 +3021,6 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Armature Layers|Shift M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Bone To Layer|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - // ... show/hide bones was here - uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, - NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); #endif } From 117fdd8072fb6b8390d85498d8185c55a81f40e8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 26 Jul 2009 03:54:17 +0000 Subject: [PATCH 387/512] * projection paint options in the toolbar * renamed __no_header__ -> __show_header__ --- release/ui/buttons_data_armature.py | 2 +- release/ui/buttons_data_bone.py | 2 +- release/ui/buttons_data_camera.py | 2 +- release/ui/buttons_data_curve.py | 2 +- release/ui/buttons_data_lamp.py | 2 +- release/ui/buttons_data_lattice.py | 2 +- release/ui/buttons_data_mesh.py | 2 +- release/ui/buttons_data_text.py | 2 +- release/ui/buttons_game.py | 2 +- release/ui/buttons_material.py | 2 +- release/ui/buttons_object.py | 2 +- release/ui/buttons_particle.py | 2 +- release/ui/buttons_texture.py | 2 +- release/ui/buttons_world.py | 2 +- release/ui/space_info.py | 14 +++++++------- release/ui/space_view3d_toolbar.py | 15 +++++++++++++-- .../blender/makesrna/intern/rna_sculpt_paint.c | 16 ++++++++-------- source/blender/makesrna/intern/rna_ui.c | 4 ++-- 18 files changed, 44 insertions(+), 33 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index ad34d867350..b2c135e4a9b 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_arm(DataButtonsPanel): __idname__ = "DATA_PT_context_arm" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index b31cac15425..4458f8d2d94 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -11,7 +11,7 @@ class BoneButtonsPanel(bpy.types.Panel): class BONE_PT_context_bone(BoneButtonsPanel): __idname__ = "BONE_PT_context_bone" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py index 7ca70029e49..9f7a11a980c 100644 --- a/release/ui/buttons_data_camera.py +++ b/release/ui/buttons_data_camera.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_camera(DataButtonsPanel): __idname__ = "DATA_PT_context_camera" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py index 04c4cd6d01e..caaab7b21fc 100644 --- a/release/ui/buttons_data_curve.py +++ b/release/ui/buttons_data_curve.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_curve(DataButtonsPanel): __idname__ = "DATA_PT_context_curve" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 018650cf8bf..aa84c5c471d 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -21,7 +21,7 @@ class DATA_PT_preview(DataButtonsPanel): class DATA_PT_context_lamp(DataButtonsPanel): __idname__ = "DATA_PT_context_lamp" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py index 1bcaa342c67..57713749b0c 100644 --- a/release/ui/buttons_data_lattice.py +++ b/release/ui/buttons_data_lattice.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_lattice(DataButtonsPanel): __idname__ = "DATA_PT_context_lattice" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index d4bf9698a89..ed4c50aaf1a 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_mesh(DataButtonsPanel): __idname__ = "DATA_PT_context_mesh" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py index 81d54af0ef7..84abe554f5c 100644 --- a/release/ui/buttons_data_text.py +++ b/release/ui/buttons_data_text.py @@ -11,7 +11,7 @@ class DataButtonsPanel(bpy.types.Panel): class DATA_PT_context_text(DataButtonsPanel): __idname__ = "DATA_PT_context_text" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index 1a0f6666a47..c2bba62fc27 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -205,7 +205,7 @@ class WorldButtonsPanel(bpy.types.Panel): return (rd.engine == 'BLENDER_GAME') class WORLD_PT_game_context_world(WorldButtonsPanel): - __no_header__ = True + __show_header__ = False def poll(self, context): rd = context.scene.render_data diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 9a28a74d0f7..30f7f7122dc 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -21,7 +21,7 @@ class MATERIAL_PT_preview(MaterialButtonsPanel): class MATERIAL_PT_context_material(MaterialButtonsPanel): __idname__= "MATERIAL_PT_context_material" - __no_header__ = True + __show_header__ = False def poll(self, context): return (context.object) diff --git a/release/ui/buttons_object.py b/release/ui/buttons_object.py index 8caeaacf5c1..9ab28241e5d 100644 --- a/release/ui/buttons_object.py +++ b/release/ui/buttons_object.py @@ -8,7 +8,7 @@ class ObjectButtonsPanel(bpy.types.Panel): class OBJECT_PT_context_object(ObjectButtonsPanel): __idname__ = "OBJECT_PT_context_object" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index f74dfa06427..46d7a7999f4 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -20,7 +20,7 @@ class ParticleButtonsPanel(bpy.types.Panel): class PARTICLE_PT_particles(ParticleButtonsPanel): __idname__= "PARTICLE_PT_particles" - __no_header__ = True + __show_header__ = False def poll(self, context): return (context.particle_system or context.object) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 80ae503ee6a..df409d3c524 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -34,7 +34,7 @@ class TEXTURE_PT_preview(TextureButtonsPanel): class TEXTURE_PT_context_texture(TextureButtonsPanel): __idname__= "TEXTURE_PT_context_texture" - __no_header__ = True + __show_header__ = False def poll(self, context): return (context.material or context.world or context.lamp or context.brush or context.texture) diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index e0305bbaf04..67cf5cc2e89 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -20,7 +20,7 @@ class WORLD_PT_preview(WorldButtonsPanel): layout.template_preview(world) class WORLD_PT_context_world(WorldButtonsPanel): - __no_header__ = True + __show_header__ = False def poll(self, context): rd = context.scene.render_data diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 9d72aa7c5e9..365bcada6b9 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -171,7 +171,7 @@ class INFO_MT_help(bpy.types.Menu): class INFO_PT_tabs(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout @@ -182,7 +182,7 @@ class INFO_PT_tabs(bpy.types.Panel): class INFO_PT_view(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "View" - __no_header__ = True + __show_header__ = False def poll(self, context): userpref = context.user_preferences @@ -287,7 +287,7 @@ class INFO_PT_view(bpy.types.Panel): class INFO_PT_edit(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "Edit" - __no_header__ = True + __show_header__ = False def poll(self, context): userpref = context.user_preferences @@ -385,7 +385,7 @@ class INFO_PT_edit(bpy.types.Panel): class INFO_PT_system(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "System" - __no_header__ = True + __show_header__ = False def poll(self, context): userpref = context.user_preferences @@ -451,7 +451,7 @@ class INFO_PT_system(bpy.types.Panel): class INFO_PT_filepaths(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "File Paths" - __no_header__ = True + __show_header__ = False def poll(self, context): userpref = context.user_preferences @@ -510,7 +510,7 @@ class INFO_PT_filepaths(bpy.types.Panel): class INFO_PT_language(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = "Language" - __no_header__ = True + __show_header__ = False def poll(self, context): userpref = context.user_preferences @@ -533,7 +533,7 @@ class INFO_PT_language(bpy.types.Panel): class INFO_PT_bottombar(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" __label__ = " " - __no_header__ = True + __show_header__ = False def draw(self, context): layout = self.layout diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index af298e6e27b..acc2590132e 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -486,8 +486,19 @@ class VIEW3D_PT_tools_texture_paint(View3DPanel): def draw(self, context): layout = self.layout - - layout.itemL(text="Nothing yet") + ipaint = context.tool_settings.image_paint + + col = layout.column() + col.itemR(ipaint, "use_projection") + col.itemR(ipaint, "use_occlude") + col.itemR(ipaint, "use_backface_cull") + col.itemR(ipaint, "use_normal_falloff") + col.itemR(ipaint, "invert_stencil") + col.itemR(ipaint, "use_clone_layer") + col.itemR(ipaint, "use_stencil_layer") + + col.itemR(ipaint, "seam_bleed") + col.itemR(ipaint, "normal_angle") # ********** default tools for particle mode **************** diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index df40663fa02..1e512d8f9bb 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -185,25 +185,25 @@ static void rna_def_image_paint(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_DISABLE); RNA_def_property_ui_text(prop, "Project Paint", "Use projection painting for improved consistency in the brush strokes."); - prop= RNA_def_property(srna, "occlude", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); + prop= RNA_def_property(srna, "use_occlude", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY); RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)"); - prop= RNA_def_property(srna, "cull", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); + prop= RNA_def_property(srna, "use_backface_cull", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE); RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)"); - prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); + prop= RNA_def_property(srna, "use_normal_falloff", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_FLAT); RNA_def_property_ui_text(prop, "Normal", "Paint most on faces pointing towards the view"); prop= RNA_def_property(srna, "use_stencil_layer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK); RNA_def_property_ui_text(prop, "Stencil Layer", "Set the mask layer from the UV layer buttons"); - prop= RNA_def_property(srna, "invert_mask", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "invert_stencil", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_MASK_INV); - RNA_def_property_ui_text(prop, "Invert", "Invert the mask"); + RNA_def_property_ui_text(prop, "Invert", "Invert the stencil layer"); prop= RNA_def_property(srna, "use_clone_layer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE); diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 21bacc76a8c..c3655ab2542 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -647,8 +647,8 @@ static void rna_def_panel(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "type->flag", PNL_DEFAULT_CLOSED); RNA_def_property_flag(prop, PROP_REGISTER); - prop= RNA_def_property(srna, "no_header", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "type->flag", PNL_NO_HEADER); + prop= RNA_def_property(srna, "show_header", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", PNL_NO_HEADER); RNA_def_property_flag(prop, PROP_REGISTER); } From a934773475182feeddc4dd208dc5222975d9206a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 26 Jul 2009 04:31:46 +0000 Subject: [PATCH 388/512] - console scrollback userpref - copy coperator for the console (Ctrl+C and from the menu) --- release/ui/space_console.py | 1 + release/ui/space_info.py | 1 + .../editors/space_console/console_intern.h | 5 +- .../editors/space_console/console_ops.c | 47 ++++++++++++++++++- .../editors/space_console/space_console.c | 3 ++ source/blender/makesdna/DNA_userdef_types.h | 2 +- source/blender/makesrna/intern/rna_userdef.c | 5 ++ 7 files changed, 59 insertions(+), 5 deletions(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 08695569748..cf5727cd3a2 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -50,6 +50,7 @@ class CONSOLE_MT_console(bpy.types.Menu): layout.column() layout.itemO("console.clear") + layout.itemO("console.copy") class CONSOLE_MT_report(bpy.types.Menu): __space_type__ = "CONSOLE" diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 365bcada6b9..9e94be9b746 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -432,6 +432,7 @@ class INFO_PT_system(bpy.types.Panel): colsplitcol.itemR(system, "filter_file_extensions") colsplitcol.itemR(system, "hide_dot_files_datablocks") colsplitcol.itemR(system, "audio_mixing_buffer") + colsplitcol.itemR(lan, "scrollback", text="Console Scrollback") col = split.column() colsplit = col.split(percentage=0.85) diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 3c6eeb63505..0a80059fc65 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -34,9 +34,6 @@ struct ConsoleLine; struct wmOperatorType; struct ReportList; -/* TODO, make into a pref */ -#define CONSOLE_SCROLLBACK_LIMIT 128 - /* console_draw.c */ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */ @@ -62,8 +59,10 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot); void CONSOLE_OT_clear(wmOperatorType *ot); void CONSOLE_OT_history_cycle(wmOperatorType *ot); +void CONSOLE_OT_copy(wmOperatorType *ot); void CONSOLE_OT_zoom(wmOperatorType *ot); + /* console_report.c */ void CONSOLE_OT_select_pick(wmOperatorType *ot); /* report selection */ void CONSOLE_OT_select_all_toggle(wmOperatorType *ot); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index ca6e3983eac..70570f6208a 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -37,9 +37,11 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" #include "BLI_blenlib.h" +#include "BLI_dynstr.h" #include "PIL_time.h" #include "BKE_utildefines.h" @@ -79,7 +81,10 @@ void console_scrollback_free(SpaceConsole *sc, ConsoleLine *cl) void console_scrollback_limit(SpaceConsole *sc) { int tot; - for(tot= BLI_countlist(&sc->scrollback); tot > CONSOLE_SCROLLBACK_LIMIT; tot--) + + if (U.scrollback < 32) U.scrollback= 128; // XXX - save in user defaults + + for(tot= BLI_countlist(&sc->scrollback); tot > U.scrollback; tot--) console_scrollback_free(sc, sc->scrollback.first); } @@ -548,6 +553,46 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", console_line_type_items, CONSOLE_LINE_OUTPUT, "Type", "Console output type."); } + +static int copy_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + DynStr *buf_dyn= BLI_dynstr_new(); + char *buf_str; + + ConsoleLine *cl; + + for(cl= sc->scrollback.last; cl; cl= cl->prev) { + BLI_dynstr_append(buf_dyn, cl->line); + BLI_dynstr_append(buf_dyn, "\n"); + } + + buf_str= BLI_dynstr_get_cstring(buf_dyn); + BLI_dynstr_free(buf_dyn); + + WM_clipboard_text_set(buf_str, 0); + + MEM_freeN(buf_str); + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy to Clipboard"; + ot->idname= "CONSOLE_OT_copy"; + + /* api callbacks */ + ot->poll= console_edit_poll; + ot->exec= copy_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ +} + static int zoom_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index db70eff386f..c50fef7faf6 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -214,6 +214,7 @@ void console_operatortypes(void) WM_operatortype_append(CONSOLE_OT_clear); WM_operatortype_append(CONSOLE_OT_history_cycle); + WM_operatortype_append(CONSOLE_OT_copy); WM_operatortype_append(CONSOLE_OT_zoom); @@ -292,6 +293,8 @@ void console_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "CONSOLE_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0); + + WM_keymap_add_item(keymap, "CONSOLE_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", " "); /* fake tabs */ WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index d8a943e1656..bda4355d30b 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -293,7 +293,7 @@ typedef struct UserDef { short userpref, viewzoom; int mixbufsize; - int pad1; + int scrollback; /* console scrollback limit */ int dpi; /* range 48-128? */ short encoding; short transopts; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 3344489e389..c2017c1d939 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1922,6 +1922,11 @@ static void rna_def_userdef_language(BlenderRNA *brna) RNA_def_property_range(prop, 48, 128); RNA_def_property_ui_text(prop, "DPI", "Font size and resolution for display."); RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "scrollback", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "scrollback"); + RNA_def_property_range(prop, 32, 32768); + RNA_def_property_ui_text(prop, "Scrollback", "Maximum number of lines to store for the console buffer."); /* Language Selection */ From 3e5f46ebf963cfda0f698a9f0c047ce4df77b79f Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 26 Jul 2009 08:53:23 +0000 Subject: [PATCH 389/512] 2.5 Various fixes: * Small code and layout cleanup in 3DView Side Panels. * Added missing redraw notifier for changing world datablock and cursor location. --- release/ui/space_view3d.py | 5 +++-- release/ui/space_view3d_toolbar.py | 14 +++++--------- source/blender/makesrna/intern/rna_scene.c | 2 ++ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index 0d1a8fd7bc5..fc550982afa 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -187,13 +187,14 @@ class VIEW3D_PT_background_image(bpy.types.Panel): if bg: layout.active = view.display_background_image - split = layout.split() - col = split.column() + col = layout.column() col.itemR(bg, "image", text="") #col.itemR(bg, "image_user") col.itemR(bg, "size") col.itemR(bg, "transparency", slider=True) col.itemL(text="Offset:") + + col = layout.column(align=True) col.itemR(bg, "x_offset", text="X") col.itemR(bg, "y_offset", text="Y") diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index acc2590132e..0a9b1090f9e 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -319,9 +319,10 @@ class VIEW3D_PT_tools_brush(PaintPanel): return self.paint_settings(context) def draw(self, context): + layout = self.layout + settings = self.paint_settings(context) brush = settings.brush - layout = self.layout if context.particle_edit_object: layout.column().itemR(settings, "tool", expand=True) @@ -340,10 +341,8 @@ class VIEW3D_PT_tools_brush(PaintPanel): col.item_enumR(settings, "tool", "CLONE") else: col.item_enumR(settings, "tool", "SMEAR") - - split = layout.split() - col = split.column() + col = layout.column() row = col.row(align=True) row.itemR(brush, "size", slider=True) row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") @@ -368,8 +367,7 @@ class VIEW3D_PT_tools_brush(PaintPanel): rowsub.itemR(brush, "spacing", text="Spacing", slider=True) rowsub.itemR(brush, "spacing_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="") - split = layout.split() - col = split.column() + col = layout.column() col.itemR(brush, "airbrush") col.itemR(brush, "anchored") col.itemR(brush, "rake") @@ -386,8 +384,7 @@ class VIEW3D_PT_tools_brush_curve(PaintPanel): brush = settings.brush layout = self.layout - split = layout.split() - split.template_curve_mapping(brush.curve) + layout.template_curve_mapping(brush.curve) class VIEW3D_PT_sculpt_options(PaintPanel): __label__ = "Options" @@ -537,4 +534,3 @@ bpy.types.register(VIEW3D_PT_vertex_paint_options) bpy.types.register(VIEW3D_PT_weight_paint_options) bpy.types.register(VIEW3D_PT_tools_texture_paint) bpy.types.register(VIEW3D_PT_tools_particle_edit) - diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 22f6bff2cc4..2066ebe18a9 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1639,11 +1639,13 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "World", "World used for rendering the scene."); + RNA_def_property_update(prop, NC_WORLD, NULL); prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "cursor"); RNA_def_property_ui_text(prop, "Cursor Location", "3D cursor location."); RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4); + RNA_def_property_update(prop, NC_WINDOW, NULL); /* Bases/Objects */ prop= RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE); From 3d096c2712cf846cfb0bf56cb084599349783129 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 26 Jul 2009 09:35:40 +0000 Subject: [PATCH 390/512] blender 2.5 MSVC9 projectfiles fix renamed rna_vpaint.c -> rna_sculpt_paint.c --- projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj | 8 ++++---- projectfiles_vc9/blender/makesrna/RNA_rna.vcproj | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj index 5bae7780660..3db292155f1 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj @@ -766,6 +766,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_screen.c" > + + @@ -810,10 +814,6 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_vfont.c" > - - diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj index 9fbe9e77442..0699468bfcf 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj @@ -322,6 +322,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_screen_gen.c" > + + @@ -362,10 +366,6 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_vfont_gen.c" > - - From 812530aca81385af5a34fab851b4031521a1abe0 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 26 Jul 2009 11:01:56 +0000 Subject: [PATCH 391/512] 2.5 - More armature/bone operator tweaks * Restored quick operators for moving bones between layers and switching visible armature layers. The popup used here (based on the layers template) is not optimal yet - you can click on multiple layer buttons to enable/disable them, but you need to move your mouse outside the area for it to confirm. * Separate armatures works again. I've tweaked the arguments to ED_object_duplicate() to make this work (besides, the other users of this wouldn't have been affected). * Added some missing special (transform) operators to the menus + keymaps --- .../editors/armature/armature_intern.h | 6 + .../blender/editors/armature/armature_ops.c | 34 +- .../blender/editors/armature/editarmature.c | 9 +- source/blender/editors/armature/poseobject.c | 337 ++++++++++++++---- source/blender/editors/include/ED_object.h | 4 +- source/blender/editors/object/object_edit.c | 5 +- .../editors/space_view3d/view3d_header.c | 49 +-- 7 files changed, 311 insertions(+), 133 deletions(-) diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index bf329270b8c..0c8c0e8e644 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -63,6 +63,9 @@ void ARMATURE_OT_flip_names(struct wmOperatorType *ot); void ARMATURE_OT_flags_set(struct wmOperatorType *ot); +void ARMATURE_OT_armature_layers(struct wmOperatorType *ot); +void ARMATURE_OT_bone_layers(struct wmOperatorType *ot); + /* ******************************************************* */ /* Pose-Mode Operators */ void POSE_OT_hide(struct wmOperatorType *ot); @@ -99,6 +102,9 @@ void POSE_OT_flip_names(struct wmOperatorType *ot); void POSE_OT_flags_set(struct wmOperatorType *ot); +void POSE_OT_armature_layers(struct wmOperatorType *ot); +void POSE_OT_bone_layers(struct wmOperatorType *ot); + /* ******************************************************* */ /* Etch-A-Ton */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index bfe3befe1b3..389a0a5174a 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -55,6 +55,7 @@ #include "ED_armature.h" #include "ED_screen.h" #include "ED_object.h" +#include "ED_transform.h" #include "armature_intern.h" @@ -137,6 +138,9 @@ void ED_operatortypes_armature(void) WM_operatortype_append(ARMATURE_OT_flip_names); WM_operatortype_append(ARMATURE_OT_flags_set); + + WM_operatortype_append(ARMATURE_OT_armature_layers); + WM_operatortype_append(ARMATURE_OT_bone_layers); /* SKETCH */ WM_operatortype_append(SKETCH_OT_gesture); @@ -182,6 +186,9 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_flags_set); + WM_operatortype_append(POSE_OT_armature_layers); + WM_operatortype_append(POSE_OT_bone_layers); + /* POSELIB */ WM_operatortype_append(POSELIB_OT_browse_interactive); @@ -243,7 +250,7 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "ARMATURE_OT_fill", FKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "ARMATURE_OT_merge", MKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, /*KM_CTRL|KM_ALT*/0, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); /* set flags */ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); @@ -252,6 +259,18 @@ void ED_keymap_armature(wmWindowManager *wm) RNA_enum_set(kmi->ptr, "mode", 1); // enable kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); RNA_enum_set(kmi->ptr, "mode", 0); // clear + + /* armature/bone layers */ + WM_keymap_add_item(keymap, "ARMATURE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "ARMATURE_OT_bone_layers", MKEY, KM_PRESS, 0, 0); + + /* special transforms: */ + /* 1) envelope/b-bone size */ + kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE); + /* 2) set roll */ + kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "mode", TFM_BONE_ROLL); /* Armature -> Etch-A-Ton ------------------------ */ WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0); @@ -270,7 +289,7 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_apply", AKEY, KM_PRESS, KM_CTRL, 0); - /*clear pose*/ + // TODO: clear pose WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "POSE_OT_loc_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "POSE_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0); @@ -307,13 +326,22 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_groups_menu", GKEY, KM_PRESS, KM_CTRL, 0); - /* set flags */ + /* set flags */ kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0); RNA_enum_set(kmi->ptr, "mode", 2); // toggle kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); RNA_enum_set(kmi->ptr, "mode", 1); // enable kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0); RNA_enum_set(kmi->ptr, "mode", 0); // clear + + /* armature/bone layers */ + WM_keymap_add_item(keymap, "POSE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "POSE_OT_bone_layers", MKEY, KM_PRESS, 0, 0); + + /* special transforms: */ + /* 1) envelope/b-bone size */ + kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index f20c38a0246..95d4e263490 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -99,9 +99,7 @@ /* ************* XXX *************** */ static int okee() {return 0;} -static int pupmenu() {return 0;} static void BIF_undo_push() {} -static void adduplicate() {} /* ************* XXX *************** */ /* **************** tools on Editmode Armature **************** */ @@ -1043,9 +1041,7 @@ static int separate_armature_exec (bContext *C, wmOperator *op) ED_armature_edit_free(obedit); /* 2) duplicate base */ - adduplicate(1, USER_DUP_ARM); /* no transform and zero so do get a linked dupli */ - - newbase= BASACT; /* basact is set in adduplicate() */ + newbase= ED_object_add_duplicate(scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */ newob= newbase->object; newbase->flag &= ~SELECT; @@ -1064,8 +1060,6 @@ static int separate_armature_exec (bContext *C, wmOperator *op) /* 5) restore original conditions */ obedit= oldob; - BASACT= oldbase; - BASACT->flag |= SELECT; ED_armature_to_edit(obedit); @@ -1274,7 +1268,6 @@ static int pose_setflag_exec (bContext *C, wmOperator *op) /* callback for editbones setflag */ static int armature_bones_setflag_exec (bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); int flag= RNA_enum_get(op->ptr, "type"); int mode= RNA_enum_get(op->ptr, "mode"); diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index e9ebdb87a3c..174bb39d7b9 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -89,7 +89,6 @@ #include "armature_intern.h" /* ************* XXX *************** */ -static int movetolayer_short_buts() {return 1;} static int pupmenu() {return 0;} static void error() {}; static void BIF_undo_push() {} @@ -1683,90 +1682,270 @@ void pose_activate_flipped_bone(Scene *scene) } } -/* This function pops up the move-to-layer popup widgets when the user - * presses either SHIFT-MKEY or MKEY in PoseMode OR EditMode (for Armatures) - */ -void pose_movetolayer(Scene *scene) + +/* ********************************************** */ + +/* Present a popup to get the layers that should be used */ +// TODO: move to wm? +static uiBlock *wm_layers_select_create_menu(bContext *C, ARegion *ar, void *arg_op) { - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - bArmature *arm; - short lay= 0; - short shift= 0; // XXX + wmOperator *op= arg_op; + uiBlock *block; + uiLayout *layout; + uiStyle *style= U.uistyles.first; - if (ob==NULL) return; - arm= ob->data; + block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS); + uiBlockClearFlag(block, UI_BLOCK_LOOP); + uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN); - if (shift) { - /* armature layers */ - lay= arm->layer; - if ( movetolayer_short_buts(&lay, "Armature Layers")==0 ) return; - if (lay==0) return; - arm->layer= lay; - if(ob->pose) - ob->pose->proxy_layer= lay; + layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, 150, 20, style); + uiItemL(layout, op->type->name, 0); + uiTemplateLayers(layout, op->ptr, "layers"); /* must have a property named layers setup */ - } - else if (obedit) { - /* the check for editbone layer moving needs to occur before posemode one to work */ - EditBone *ebo; - EditBone *flipBone; - - for (ebo= arm->edbo->first; ebo; ebo= ebo->next) { - if (arm->layer & ebo->layer) { - if (ebo->flag & BONE_SELECTED) - lay |= ebo->layer; - } - } - if (lay==0) return; - - if ( movetolayer_short_buts(&lay, "Bone Layers")==0 ) return; - if (lay==0) return; - - for (ebo= arm->edbo->first; ebo; ebo= ebo->next) { - if (arm->layer & ebo->layer) { - if (ebo->flag & BONE_SELECTED) { - ebo->layer= lay; - if (arm->flag & ARM_MIRROR_EDIT) { - flipBone = ED_armature_bone_get_mirrored(arm->edbo, ebo); - if (flipBone) - flipBone->layer = lay; - } - } - } - } - - BIF_undo_push("Move Bone Layer"); - } - else if (ob->flag & OB_POSEMODE) { - /* pose-channel layers */ - bPoseChannel *pchan; - - if (pose_has_protected_selected(ob, 0, 1)) - return; - - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & BONE_SELECTED) - lay |= pchan->bone->layer; - } - } - if (lay==0) return; - - if ( movetolayer_short_buts(&lay, "Bone Layers")==0 ) return; - if (lay==0) return; - - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if (arm->layer & pchan->bone->layer) { - if (pchan->bone->flag & BONE_SELECTED) - pchan->bone->layer= lay; - } - } - - BIF_undo_push("Move Bone Layer"); - } + uiPopupBoundsBlock(block, 4.0f, 0, 0); + uiEndBlock(C, block); + + return block; } +/* ------------------- */ + +/* Present a popup to get the layers that should be used */ +static int pose_armature_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + Object *ob= CTX_data_active_object(C); + bArmature *arm= (ob)? ob->data : NULL; + PointerRNA ptr; + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* sanity checking */ + if (arm == NULL) + return OPERATOR_CANCELLED; + + /* get RNA pointer to armature data to use that to retrieve the layers as ints to init the operator */ + RNA_id_pointer_create((ID *)arm, &ptr); + RNA_boolean_get_array(&ptr, "layer", layers); + RNA_boolean_set_array(op->ptr, "layers", layers); + + /* part to sync with other similar operators... */ + /* pass on operator, so return modal */ + uiPupBlockOperator(C, wm_layers_select_create_menu, op, WM_OP_EXEC_DEFAULT); + return OPERATOR_RUNNING_MODAL|OPERATOR_PASS_THROUGH; +} + +/* Set the visible layers for the active armature (edit and pose modes) */ +static int pose_armature_layers_exec (bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + bArmature *arm= (ob)? ob->data : NULL; + PointerRNA ptr; + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* get the values set in the operator properties */ + RNA_boolean_get_array(op->ptr, "layers", layers); + + /* get pointer for armature, and write data there... */ + RNA_id_pointer_create((ID *)arm, &ptr); + RNA_boolean_set_array(&ptr, "layer", layers); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + + +void POSE_OT_armature_layers (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Change Armature Layers"; + ot->idname= "POSE_OT_armature_layers"; + ot->description= "Change the visible armature layers."; + + /* callbacks */ + ot->invoke= pose_armature_layers_invoke; + ot->exec= pose_armature_layers_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean_array(ot->srna, "layers", 16, NULL, "Layers", "Armature layers to make visible."); +} + +void ARMATURE_OT_armature_layers (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Change Armature Layers"; + ot->idname= "ARMATURE_OT_armature_layers"; + ot->description= "Change the visible armature layers."; + + /* callbacks */ + ot->invoke= pose_armature_layers_invoke; + ot->exec= pose_armature_layers_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean_array(ot->srna, "layers", 16, NULL, "Layers", "Armature layers to make visible."); +} + +/* ------------------- */ + +/* Present a popup to get the layers that should be used */ +static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* get layers that are active already */ + memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ + + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pchans) + { + short bit; + + /* loop over the bits for this pchan's layers, adding layers where they're needed */ + for (bit= 0; bit < 16; bit++) { + if (pchan->bone->layer & (1<ptr, "layers", layers); + + /* part to sync with other similar operators... */ + /* pass on operator, so return modal */ + uiPupBlockOperator(C, wm_layers_select_create_menu, op, WM_OP_EXEC_DEFAULT); + return OPERATOR_RUNNING_MODAL|OPERATOR_PASS_THROUGH; +} + +/* Set the visible layers for the active armature (edit and pose modes) */ +static int pose_bone_layers_exec (bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + bArmature *arm= (ob)? ob->data : NULL; + PointerRNA ptr; + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* get the values set in the operator properties */ + RNA_boolean_get_array(op->ptr, "layers", layers); + + /* set layers of pchans based on the values set in the operator props */ + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pchans) + { + /* get pointer for pchan, and write flags this way */ + RNA_pointer_create((ID *)arm, &RNA_Bone, pchan->bone, &ptr); + RNA_boolean_set_array(&ptr, "layer", layers); + } + CTX_DATA_END; + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_bone_layers (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Change Bone Layers"; + ot->idname= "POSE_OT_bone_layers"; + ot->description= "Change the layers that the selected bones belong to."; + + /* callbacks */ + ot->invoke= pose_bone_layers_invoke; + ot->exec= pose_bone_layers_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean_array(ot->srna, "layers", 16, NULL, "Layers", "Armature layers that bone belongs to."); +} + +/* ------------------- */ + +/* Present a popup to get the layers that should be used */ +static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* get layers that are active already */ + memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ + + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) + { + short bit; + + /* loop over the bits for this pchan's layers, adding layers where they're needed */ + for (bit= 0; bit < 16; bit++) { + if (ebone->layer & (1<ptr, "layers", layers); + + /* part to sync with other similar operators... */ + /* pass on operator, so return modal */ + uiPupBlockOperator(C, wm_layers_select_create_menu, op, WM_OP_EXEC_DEFAULT); + return OPERATOR_RUNNING_MODAL|OPERATOR_PASS_THROUGH; +} + +/* Set the visible layers for the active armature (edit and pose modes) */ +static int armature_bone_layers_exec (bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + bArmature *arm= (ob)? ob->data : NULL; + PointerRNA ptr; + int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */ + + /* get the values set in the operator properties */ + RNA_boolean_get_array(op->ptr, "layers", layers); + + /* set layers of pchans based on the values set in the operator props */ + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) + { + /* get pointer for pchan, and write flags this way */ + RNA_pointer_create((ID *)arm, &RNA_EditBone, ebone, &ptr); + RNA_boolean_set_array(&ptr, "layers", layers); + } + CTX_DATA_END; + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void ARMATURE_OT_bone_layers (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Change Bone Layers"; + ot->idname= "ARMATURE_OT_bone_layers"; + ot->description= "Change the layers that the selected bones belong to."; + + /* callbacks */ + ot->invoke= armature_bone_layers_invoke; + ot->exec= armature_bone_layers_exec; + ot->poll= ED_operator_editarmature; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean_array(ot->srna, "layers", 16, NULL, "Layers", "Armature layers that bone belongs to."); +} + + #if 0 // XXX old sys /* for use with pose_relax only */ diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 8d4819d2d71..c8a72a2aa97 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -54,8 +54,8 @@ void ED_base_object_activate(struct bContext *C, struct Base *base); void ED_base_object_free_and_unlink(struct Scene *scene, struct Base *base); void ED_object_apply_obmat(struct Object *ob); - /* single object duplicate, if dupflag==0, fully linked, else it uses U.dupflag */ -struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int usedupflag); + /* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */ +struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int dupflag); void ED_object_parent(struct Object *ob, struct Object *parent, int type, const char *substr); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 1752f48990d..1ee3f1b2f53 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -6301,12 +6301,11 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag return basen; } -/* single object duplicate, if dupflag==0, fully linked, else it uses U.dupflag */ +/* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */ /* leaves selection of base/object unaltered */ -Base *ED_object_add_duplicate(Scene *scene, Base *base, int usedupflag) +Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag) { Base *basen; - int dupflag= usedupflag?U.dupflag:0; clear_id_newpoins(); clear_sca_new_poins(); /* sensor/contr/act */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 529db1cbb06..25cf4fe6862 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2745,15 +2745,6 @@ static void view3d_edit_armature_parentmenu(bContext *C, uiLayout *layout, void uiItemO(layout, NULL, 0, "ARMATURE_OT_parent_clear"); } -#if 0 -void do_view3d_edit_armature_rollmenu(bContext *C, void *arg, int event) -{ - /* "Set Roll|Ctrl R" - interactively set bone roll */ - initTransform(TFM_BONE_ROLL, CTX_NONE); - Transform(); -} -#endif - static void view3d_edit_armature_rollmenu(bContext *C, uiLayout *layout, void *arg_unused) { /* 0 = 'Global', 1 = 'Cursor' */ @@ -2761,14 +2752,13 @@ static void view3d_edit_armature_rollmenu(bContext *C, uiLayout *layout, void *a uiItemEnumO(layout, "Clear Roll (Z-Axis Up)", 0, "ARMATURE_OT_calculate_roll", "type", 0); uiItemEnumO(layout, "Roll to Cursor", 0, "ARMATURE_OT_calculate_roll", "type", 1); - //uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiItemS(layout); + + uiItemEnumO(layout, "Set Roll", 0, "TFM_OT_transform", "mode", TFM_BONE_ROLL); } static void view3d_edit_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - PointerRNA ptr; - uiItemEnumO(layout, "Toggle a Setting", 0, "ARMATURE_OT_flags_set", "mode", 2); uiItemEnumO(layout, "Enable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 1); uiItemEnumO(layout, "Disable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 0); @@ -2791,11 +2781,6 @@ static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event) case 7: /* Warp */ initTransform(TFM_WARP, CTX_NONE); Transform(); - - case 17: /* move to layer */ - pose_movetolayer(); - break; - case 23: /* bone sketching panel */ add_blockhandler(curarea, VIEW3D_HANDLER_BONESKETCH, UI_PNL_UNSTOW); break; @@ -2847,12 +2832,10 @@ static void view3d_edit_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemS(layout); -#if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Armature Layers|Shift M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Bone To Layer|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); -#endif + uiItemO(layout, NULL, 0, "ARMATURE_OT_armature_layers"); + uiItemO(layout, NULL, 0, "ARMATURE_OT_bone_layers"); + + uiItemS(layout); uiItemMenuF(layout, "Parent", 0, view3d_edit_armature_parentmenu); @@ -2927,8 +2910,6 @@ static void view3d_pose_armature_poselibmenu(bContext *C, uiLayout *layout, void static void view3d_pose_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - PointerRNA ptr; - uiItemEnumO(layout, "Toggle a Setting", 0, "POSE_OT_flags_set", "mode", 2); uiItemEnumO(layout, "Enable a Setting", 0, "POSE_OT_flags_set", "mode", 1); uiItemEnumO(layout, "Disable a Setting", 0, "POSE_OT_flags_set", "mode", 0); @@ -2944,9 +2925,6 @@ static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event) case 5: pose_copy_menu(); break; - case 14: /* move bone to layer / change armature layer */ - pose_movetolayer(); - break; case 15: pose_relax(); break; @@ -3004,23 +2982,18 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemO(layout, "Flip Left/Right Names", 0, "POSE_OT_flip_names"); - //separator + move layer operators... + uiItemS(layout); + + uiItemO(layout, NULL, 0, "POSE_OT_armature_layers"); + uiItemO(layout, NULL, 0, "POSE_OT_bone_layers"); uiItemS(layout); uiItemMenuF(layout, "Show/Hide Bones", 0, view3d_pose_armature_showhidemenu); - - uiItemS(layout); - uiItemMenuF(layout, "Bone Settings", 0, view3d_pose_armature_settingsmenu); #if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Attributes...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Armature Layers|Shift M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Bone To Layer|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); #endif } From 4e024a1e6e41640d2f70624bb15778dc6a6c6695 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 26 Jul 2009 11:57:27 +0000 Subject: [PATCH 392/512] 2.5 - 'Reset' buttons for Limit Distance and Stretch To Constraints --- release/ui/buttons_data_armature.py | 4 ++ release/ui/buttons_object_constraint.py | 15 +++--- .../blender/editors/object/editconstraint.c | 52 +++++++++++++++++++ source/blender/editors/object/object_intern.h | 2 + source/blender/editors/object/object_ops.c | 2 + 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index b2c135e4a9b..51113226dac 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -96,20 +96,24 @@ class DATA_PT_bone_groups(DataButtonsPanel): row.template_list(pose, "bone_groups", pose, "active_bone_group_index") col = row.column(align=True) + col.active = (ob.proxy == None) col.itemO("pose.group_add", icon="ICON_ZOOMIN", text="") col.itemO("pose.group_remove", icon="ICON_ZOOMOUT", text="") group = pose.active_bone_group if group: col = layout.column() + col.active= (ob.proxy == None) col.itemR(group, "name") split = layout.split(0.5) + split.active= (ob.proxy == None) split.itemR(group, "color_set") if group.color_set: split.template_triColorSet(group, "colors") row = layout.row(align=True) + row.active= (ob.proxy == None) row.itemO("pose.group_assign", text="Assign") row.itemO("pose.group_remove", text="Remove") #row.itemO("pose.bone_group_remove_from", text="Remove") diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 8d531df9e19..1766513a952 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -379,26 +379,29 @@ class ConstraintButtonsPanel(bpy.types.Panel): def limit_distance(self, layout, con): self.target_template(layout, con) - layout.itemR(con, "distance") + col = layout.column(align=True); + col.itemR(con, "distance") + col.itemO("constraint.limitdistance_reset") row = layout.row() row.itemL(text="Clamp Region:") row.itemR(con, "limit_mode", text="") - #Missing: Recalculate Button def stretch_to(self, layout, con): self.target_template(layout, con) - row = layout.row() - row.itemR(con, "original_length", text="Rest Length") - row.itemR(con, "bulge", text="Volume Variation") + col = layout.column(align=True) + col.itemR(con, "original_length", text="Rest Length") + col.itemO("constraint.stretchto_reset") + + col = layout.column() + col.itemR(con, "bulge", text="Volume Variation") row = layout.row() row.itemL(text="Volume:") row.itemR(con, "volume", expand=True) row.itemL(text="Plane:") row.itemR(con, "keep_axis", expand=True) - #Missing: Recalculate Button def floor(self, layout, con): self.target_template(layout, con) diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 437beda324b..9e8205e58ab 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -462,6 +462,58 @@ void object_test_constraints (Object *owner) /* ********************** CONSTRAINT-SPECIFIC STUFF ********************* */ +/* ---------- Distance-Dependent Constraints ---------- */ +/* StretchTo, Limit Distance */ + +static int stretchto_reset_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_StretchToConstraint); + + /* just set original length to 0.0, which will cause a reset on next recalc */ + RNA_float_set(&ptr, "original_length", 0.0f); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + return OPERATOR_FINISHED; +} + +void CONSTRAINT_OT_stretchto_reset (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reset Original Length"; + ot->idname= "CONSTRAINT_OT_stretchto_reset"; + ot->description= "Reset original length of bone for Stretch To Constraint."; + + ot->exec= stretchto_reset_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + +static int limitdistance_reset_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_LimitDistanceConstraint); + + /* just set distance to 0.0, which will cause a reset on next recalc */ + RNA_float_set(&ptr, "distance", 0.0f); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + return OPERATOR_FINISHED; +} + +void CONSTRAINT_OT_limitdistance_reset (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reset Distance"; + ot->idname= "CONSTRAINT_OT_limitdistance_reset"; + ot->description= "Reset limiting distance for Limit Distance Constraint."; + + ot->exec= limitdistance_reset_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ------------- Child-Of Constraint ------------------ */ /* ChildOf Constraint - set inverse callback */ diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index da1dd458555..29076d9f32a 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -120,6 +120,8 @@ void CONSTRAINT_OT_delete(struct wmOperatorType *ot); void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); void CONSTRAINT_OT_move_down(struct wmOperatorType *ot); +void CONSTRAINT_OT_stretchto_reset(struct wmOperatorType *ot); +void CONSTRAINT_OT_limitdistance_reset(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 27d481ef509..c54a8cef8dc 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -125,6 +125,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(CONSTRAINT_OT_delete); WM_operatortype_append(CONSTRAINT_OT_move_up); WM_operatortype_append(CONSTRAINT_OT_move_down); + WM_operatortype_append(CONSTRAINT_OT_stretchto_reset); + WM_operatortype_append(CONSTRAINT_OT_limitdistance_reset); WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse); WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse); From 569bb8f47d62f40004f87a4862d87b4b1937fecb Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 26 Jul 2009 12:40:44 +0000 Subject: [PATCH 393/512] 2.5 filebrowser Bugfixes: * crash when loading file that has filebrowser open * file size over 2GB/4GB? shows negative number Other: * tried to improve drawing speed a bit by only drawing the files actually shown and improving refresh behaviour a bit. Note: Solution I found so far is to use the non-standard _stat64, as far as I could see, WIN64 should work without that patch (Genscher, please check and if needed you can enable this too by removing the !defined(WIN64) ) This probably needs to be fixed in at least one other place (BLI_filesize), will look into this once this fix proves stable enough) --- source/blender/blenlib/BLI_storage_types.h | 4 + source/blender/blenlib/intern/storage.c | 8 +- .../blender/editors/include/ED_fileselect.h | 2 + source/blender/editors/space_file/file_draw.c | 5 +- source/blender/editors/space_file/filesel.c | 113 +++++++++++------- .../blender/editors/space_file/space_file.c | 29 ++++- source/blender/windowmanager/WM_types.h | 1 + 7 files changed, 113 insertions(+), 49 deletions(-) diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h index 385aa39e6cb..9430ac8c5ff 100644 --- a/source/blender/blenlib/BLI_storage_types.h +++ b/source/blender/blenlib/BLI_storage_types.h @@ -55,7 +55,11 @@ struct direntry{ char *string; mode_t type; char *relname; +#if defined(WIN32) && !defined(WIN64) && (_MSC_VER>=1500) + struct _stat64 s; +#else struct stat s; +#endif unsigned int flags; char size[16]; char mode1[4]; diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 7af383e2356..997d9b9c3f1 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -265,7 +265,13 @@ void BLI_builddir(char *dirname, char *relname) while(dlink){ memset(&files[actnum], 0 , sizeof(struct direntry)); files[actnum].relname = dlink->name; +// use 64 bit file size, only needed for WIN32, WIN64 should work fine with stat. +// Excluding other than current MSVC compiler until able to test. +#if defined(WIN32) && !defined(WIN64) && (_MSC_VER>=1500) + _stat64(dlink->name,&files[actnum].s); +#else stat(dlink->name,&files[actnum].s); +#endif files[actnum].type=files[actnum].s.st_mode; files[actnum].flags = 0; totnum++; @@ -361,7 +367,7 @@ void BLI_adddirstrings() * will buy us some time until files get bigger than 4GB or until * everyone starts using __USE_FILE_OFFSET64 or equivalent. */ - st_size= (off_t)files[num].s.st_size; + st_size= files[num].s.st_size; if (st_size > 1024*1024*1024) { sprintf(files[num].size, "%.2f GB", ((double)st_size)/(1024*1024*1024)); diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index 1b8524eea33..5cd789d4875 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -64,6 +64,7 @@ typedef struct FileLayout short width; short height; short flag; + short dirty; float column_widths[MAX_FILE_COLUMN]; } FileLayout; @@ -80,6 +81,7 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar); FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar); +int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar); int ED_fileselect_layout_offset(FileLayout* layout, int x, int y); void ED_fileselect_layout_tilepos(FileLayout* layout, int tile, short *x, short *y); diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 339ebe27fcd..780b99c3cae 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -505,6 +505,7 @@ void file_draw_list(const bContext *C, ARegion *ar) struct FileList* files = sfile->files; struct direntry *file; int numfiles; + int numfiles_layout; int colorid = 0; short sx, sy; int offset; @@ -543,8 +544,10 @@ void file_draw_list(const bContext *C, ARegion *ar) sx = ar->v2d.cur.xmin + layout->tile_border_x; sy = ar->v2d.cur.ymax - layout->tile_border_y; + + numfiles_layout = ED_fileselect_layout_numfiles(layout, ar); - for (i=offset; (i < numfiles); ++i) + for (i=offset; (i < numfiles) && (itot.xmin+2; diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 72f97898891..bd271c6fb4b 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -141,6 +141,21 @@ void ED_fileselect_reset_params(SpaceFile *sfile) sfile->params->title[0] = '\0'; } +int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar) +{ + int numfiles; + short width, height; + + if (layout->flag & FILE_LAYOUT_HOR) { + short width = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*layout->tile_border_x; + numfiles = width/layout->tile_w + 1; + } else { + short height = ar->v2d.cur.ymax - ar->v2d.cur.ymin - 2*layout->tile_border_y; + numfiles = height/layout->tile_h + 1; + } + + return layout->columns*layout->rows; +} int ED_fileselect_layout_offset(FileLayout* layout, int x, int y) { @@ -227,68 +242,78 @@ static void column_widths(struct FileList* files, struct FileLayout* layout) void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar) { - FileSelectParams* params = ED_fileselect_get_params(sfile); + FileSelectParams *params = ED_fileselect_get_params(sfile); + FileLayout *layout=0; View2D *v2d= &ar->v2d; int maxlen = 0; - int numfiles = filelist_numfiles(sfile->files); - int textheight = file_font_pointsize(); + int numfiles; + int textheight; if (sfile->layout == 0) { sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout"); - } + sfile->layout->dirty = 1; + } + + if (!sfile->layout->dirty) return; + + numfiles = filelist_numfiles(sfile->files); + textheight = file_font_pointsize(); + layout = sfile->layout; + if (params->display == FILE_IMGDISPLAY) { - sfile->layout->prv_w = 96; - sfile->layout->prv_h = 96; - sfile->layout->tile_border_x = 6; - sfile->layout->tile_border_y = 6; - sfile->layout->prv_border_x = 6; - sfile->layout->prv_border_y = 6; - sfile->layout->tile_w = sfile->layout->prv_w + 2*sfile->layout->prv_border_x; - sfile->layout->tile_h = sfile->layout->prv_h + 2*sfile->layout->prv_border_y + textheight; - sfile->layout->width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->layout->tile_border_x); - sfile->layout->columns= sfile->layout->width / (sfile->layout->tile_w + 2*sfile->layout->tile_border_x); - if(sfile->layout->columns > 0) - sfile->layout->rows= numfiles/sfile->layout->columns + 1; // XXX dirty, modulo is zero + layout->prv_w = 96; + layout->prv_h = 96; + layout->tile_border_x = 6; + layout->tile_border_y = 6; + layout->prv_border_x = 6; + layout->prv_border_y = 6; + layout->tile_w = layout->prv_w + 2*layout->prv_border_x; + layout->tile_h = layout->prv_h + 2*layout->prv_border_y + textheight; + layout->width= (v2d->cur.xmax - v2d->cur.xmin - 2*layout->tile_border_x); + layout->columns= layout->width / (layout->tile_w + 2*layout->tile_border_x); + if(layout->columns > 0) + layout->rows= numfiles/layout->columns + 1; // XXX dirty, modulo is zero else { - sfile->layout->columns = 1; - sfile->layout->rows= numfiles + 1; // XXX dirty, modulo is zero + layout->columns = 1; + layout->rows= numfiles + 1; // XXX dirty, modulo is zero } - sfile->layout->height= sfile->layout->rows*(sfile->layout->tile_h+2*sfile->layout->tile_border_y) + sfile->layout->tile_border_y*2; - sfile->layout->flag = FILE_LAYOUT_VER; + layout->height= sfile->layout->rows*(layout->tile_h+2*layout->tile_border_y) + layout->tile_border_y*2; + layout->flag = FILE_LAYOUT_VER; } else { - sfile->layout->prv_w = 0; - sfile->layout->prv_h = 0; - sfile->layout->tile_border_x = 8; - sfile->layout->tile_border_y = 2; - sfile->layout->prv_border_x = 0; - sfile->layout->prv_border_y = 0; - sfile->layout->tile_h = textheight*3/2; - sfile->layout->height= v2d->cur.ymax - v2d->cur.ymin; - sfile->layout->rows = sfile->layout->height / (sfile->layout->tile_h + 2*sfile->layout->tile_border_y);; + layout->prv_w = 0; + layout->prv_h = 0; + layout->tile_border_x = 8; + layout->tile_border_y = 2; + layout->prv_border_x = 0; + layout->prv_border_y = 0; + layout->tile_h = textheight*3/2; + layout->height= v2d->cur.ymax - v2d->cur.ymin - 2*layout->tile_border_y; + layout->rows = layout->height / (layout->tile_h + 2*layout->tile_border_y); - column_widths(sfile->files, sfile->layout); + column_widths(sfile->files, layout); if (params->display == FILE_SHORTDISPLAY) { - maxlen = sfile->layout->column_widths[COLUMN_NAME] + - sfile->layout->column_widths[COLUMN_SIZE]; + maxlen = layout->column_widths[COLUMN_NAME] + + layout->column_widths[COLUMN_SIZE]; maxlen += 20+2*10; // for icon and space between columns } else { - maxlen = sfile->layout->column_widths[COLUMN_NAME] + - sfile->layout->column_widths[COLUMN_DATE] + - sfile->layout->column_widths[COLUMN_TIME] + - sfile->layout->column_widths[COLUMN_SIZE]; + maxlen = layout->column_widths[COLUMN_NAME] + + layout->column_widths[COLUMN_DATE] + + layout->column_widths[COLUMN_TIME] + + layout->column_widths[COLUMN_SIZE]; /* XXX add mode1, mode2, mode3, owner columns for non-windows platforms */ maxlen += 20+4*10; // for icon and space between columns } - sfile->layout->tile_w = maxlen + 40; - if(sfile->layout->rows > 0) - sfile->layout->columns = numfiles/sfile->layout->rows + 1; // XXX dirty, modulo is zero + layout->tile_w = maxlen + 40; + if(layout->rows > 0) + layout->columns = numfiles/layout->rows + 1; // XXX dirty, modulo is zero else { - sfile->layout->rows = 1; - sfile->layout->columns = numfiles + 1; // XXX dirty, modulo is zero + layout->rows = 1; + layout->columns = numfiles + 1; // XXX dirty, modulo is zero } - sfile->layout->width = sfile->layout->columns * (sfile->layout->tile_w + 2*sfile->layout->tile_border_x) + sfile->layout->tile_border_x*2; - sfile->layout->flag = FILE_LAYOUT_HOR; - } + layout->width = sfile->layout->columns * (layout->tile_w + 2*layout->tile_border_x) + layout->tile_border_x*2; + layout->flag = FILE_LAYOUT_HOR; + } + layout->dirty= 0; } FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar) diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 5af79eb2800..077ad65830c 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -153,6 +153,7 @@ static void file_free(SpaceLink *sl) /* spacetype; init callback, area size changes, screen set, etc */ static void file_init(struct wmWindowManager *wm, ScrArea *sa) { + printf("file_init\n"); } @@ -200,6 +201,9 @@ static void file_refresh(const bContext *C, ScrArea *sa) } filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0); if(params->sort!=FILE_SORT_NONE) filelist_sort(sfile->files, params->sort); + + if (sfile->layout) sfile->layout->dirty= 1; + } static void file_listener(ScrArea *sa, wmNotifier *wmn) @@ -213,11 +217,9 @@ static void file_listener(ScrArea *sa, wmNotifier *wmn) case ND_FILELIST: if (sfile->files) filelist_free(sfile->files); ED_area_tag_refresh(sa); - ED_area_tag_redraw(sa); break; case ND_PARAMS: ED_area_tag_refresh(sa); - ED_area_tag_redraw(sa); break; } break; @@ -241,6 +243,23 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) } +static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_FILE: + switch (wmn->data) { + case ND_FILELIST: + ED_region_tag_redraw(ar); + break; + case ND_PARAMS: + ED_region_tag_redraw(ar); + break; + } + break; + } +} + static void file_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ @@ -252,6 +271,10 @@ static void file_main_area_draw(const bContext *C, ARegion *ar) View2DScrollers *scrollers; float col[3]; + /* Needed, because filelist is not initialized on loading */ + if (!sfile->files) + file_refresh(C, NULL); + layout = ED_fileselect_get_layout(sfile, ar); /* clear and setup matrix */ @@ -471,7 +494,7 @@ void ED_spacetype_file(void) art->regionid = RGN_TYPE_WINDOW; art->init= file_main_area_init; art->draw= file_main_area_draw; - // art->listener= file_main_area_listener; + art->listener= file_main_area_listener; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 3a646c5e799..cadb9502adb 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -190,6 +190,7 @@ typedef struct wmNotifier { /* NC_FILE Filebrowser */ #define ND_PARAMS (60<<16) #define ND_FILELIST (61<<16) +#define ND_FILEDISPLAY (62<<16) /* NC_ANIMATION Animato */ #define ND_KEYFRAME_SELECT (70<<16) From 7084447c73bd5b2b5fb9aa12a4e3b2e983723c2f Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 26 Jul 2009 12:49:43 +0000 Subject: [PATCH 394/512] 2.5 file browser * enable large file size for WIN64 too. --- source/blender/blenlib/BLI_storage_types.h | 2 +- source/blender/blenlib/intern/storage.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h index 9430ac8c5ff..cdc85d1be39 100644 --- a/source/blender/blenlib/BLI_storage_types.h +++ b/source/blender/blenlib/BLI_storage_types.h @@ -55,7 +55,7 @@ struct direntry{ char *string; mode_t type; char *relname; -#if defined(WIN32) && !defined(WIN64) && (_MSC_VER>=1500) +#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500) struct _stat64 s; #else struct stat s; diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 997d9b9c3f1..817209eaed4 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -265,9 +265,9 @@ void BLI_builddir(char *dirname, char *relname) while(dlink){ memset(&files[actnum], 0 , sizeof(struct direntry)); files[actnum].relname = dlink->name; -// use 64 bit file size, only needed for WIN32, WIN64 should work fine with stat. +// use 64 bit file size, only needed for WIN32 and WIN64. // Excluding other than current MSVC compiler until able to test. -#if defined(WIN32) && !defined(WIN64) && (_MSC_VER>=1500) +#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500) _stat64(dlink->name,&files[actnum].s); #else stat(dlink->name,&files[actnum].s); From 9ac754eca5466d62abed6d207d1efdbbb7d77b18 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 26 Jul 2009 12:52:39 +0000 Subject: [PATCH 395/512] 2.5 First step towards keymap editor! Before getting too excited: - doesn't save yet - no rna properties can be defined - no insert/remove keymap options yet - no option yet to set 'key press/release' But what does work; - Keymap list is in outliner, new category (Keymaps are listed in order as being created now) - enable/disable a keymap entry: click on dot icon - it displays python api names for ops - browse new operator for keymap (menu button) - set keymap to use other keys, mouse or tweak events - four modifier key options I first intent to test it all well, there are still quite some modal map conflicts (like border select) and there's problems assigning items to tweaks Another issue is that a visual editor for keymaps might be quite hard to use... the amount of data and options is just not so fun for a buttons menu. There are ways to improve this though. Maybe do this via a script? --- .../blender/editors/animation/anim_markers.c | 2 + source/blender/editors/interface/interface.c | 2 +- .../editors/interface/interface_handlers.c | 7 +- source/blender/editors/interface/view2d_ops.c | 6 + .../blender/editors/space_outliner/outliner.c | 309 +++++++++++++++++- .../editors/space_outliner/outliner_header.c | 4 +- .../editors/space_outliner/outliner_intern.h | 2 + source/blender/makesdna/DNA_space_types.h | 1 + .../makesdna/DNA_windowmanager_types.h | 4 + source/blender/makesrna/intern/rna_wm.c | 24 +- source/blender/windowmanager/WM_api.h | 1 + .../windowmanager/intern/wm_event_system.c | 2 + .../blender/windowmanager/intern/wm_keymap.c | 10 + .../windowmanager/intern/wm_operators.c | 20 +- 14 files changed, 377 insertions(+), 17 deletions(-) diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 7de3acdacef..d33eece52c9 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -85,6 +85,7 @@ static ListBase *context_get_markers(const bContext *C) } /* Get the marker that is closest to this point */ +/* XXX for select, the min_dist should be small */ TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x) { TimeMarker *marker, *nearest=NULL; @@ -828,6 +829,7 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) /* XXX marker context */ for(marker= markers->first; marker; marker= marker->next) { if ((marker->frame > xminf) && (marker->frame <= xmaxf)) { + /* XXX weak... */ switch (event_type) { case LEFTMOUSE: if ((marker->flag & SELECT) == 0) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 18634e21a36..ca3be250a92 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -740,7 +740,7 @@ static void ui_is_but_sel(uiBut *but) push= 2; break; case KEYEVT: - if (value==-1) push= 1; + push= 2; break; case TOGBUT: case TOG: diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 1736cd1ef52..0987f0d2f2a 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1805,7 +1805,10 @@ static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, w { if(data->state == BUTTON_STATE_HIGHLIGHT) { if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val==KM_PRESS) { - button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT); + short event= (short)ui_get_but_val(but); + /* hardcoded prevention from editing or assigning ESC */ + if(event!=ESCKEY) + button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT); return WM_UI_HANDLER_BREAK; } } @@ -1814,7 +1817,7 @@ static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, w return WM_UI_HANDLER_CONTINUE; if(event->val==KM_PRESS) { - if(WM_key_event_string(event->type)[0]) + if(event->type!=ESCKEY && WM_key_event_string(event->type)[0]) ui_set_but_val(but, event->type); else data->cancel= 1; diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 44b7f1d13da..ee2a50d12a9 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -151,6 +151,12 @@ static void view_pan_apply(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(vpd->sa); UI_view2d_sync(vpd->sc, vpd->sa, v2d, V2D_LOCK_COPY); + + /* exceptions */ + if(vpd->sa->spacetype==SPACE_OUTLINER) { + SpaceOops *soops= vpd->sa->spacedata.first; + soops->storeflag |= SO_TREESTORE_REDRAW; + } } /* cleanup temp customdata */ diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 0df0cb46473..b1919391c8d 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1123,6 +1123,45 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i } } } + else if(type == TSE_KEYMAP) { + wmKeyMap *km= (wmKeyMap *)idv; + wmKeymapItem *kmi; + char opname[OP_MAX_TYPENAME]; + + te->directdata= idv; + te->name= km->nameid; + + if(!(tselem->flag & TSE_CLOSED)) { + + for (kmi= km->keymap.first; kmi; kmi= kmi->next) { + const char *key= WM_key_event_string(kmi->type); + + if(key[0]) { + wmOperatorType *ot= NULL; + + if(kmi->propvalue); + else ot= WM_operatortype_find(kmi->idname, 0); + + if(ot || kmi->propvalue) { + TreeElement *ten= outliner_add_element(soops, &te->subtree, kmi, te, TSE_KEYMAP_ITEM, a); + + ten->directdata= kmi; + + if(kmi->propvalue) { + ten->name= "Modal map, not yet"; + } + else { + WM_operator_py_idname(opname, ot->idname); + ten->name= BLI_strdup(opname); + ten->flag |= TE_FREE_NAME; + } + } + } + } + } + else + te->flag |= TE_LAZY_CLOSED; + } return te; } @@ -1376,6 +1415,14 @@ static void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops) tselem->flag &= ~TSE_CLOSED; } } + else if(soops->outlinevis==SO_KEYMAP) { + wmWindowManager *wm= mainvar->wm.first; + wmKeyMap *km; + + for(km= wm->keymaps.first; km; km= km->next) { + ten= outliner_add_element(soops, &soops->tree, (void*)km, NULL, TSE_KEYMAP, 0); + } + } else { ten= outliner_add_element(soops, &soops->tree, OBACT, NULL, 0, 0); if(ten) ten->directdata= BASACT; @@ -2193,6 +2240,21 @@ static int tree_element_active_sequence_dup(bContext *C, Scene *scene, TreeEleme return(0); } +static int tree_element_active_keymap_item(bContext *C, TreeElement *te, TreeStoreElem *tselem, int set) +{ + wmKeymapItem *kmi= te->directdata; + + if(set==0) { + if(kmi->inactive) return 0; + return 1; + } + else { + kmi->inactive= !kmi->inactive; + } + return 0; +} + + /* generic call for non-id data to make/check active in UI */ /* Context can be NULL when set==0 */ static int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set) @@ -2213,10 +2275,8 @@ static int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, break; case TSE_LINKED_PSYS: return tree_element_active_psys(C, scene, te, tselem, set); - break; case TSE_POSE_BASE: return tree_element_active_pose(C, scene, te, tselem, set); - break; case TSE_POSE_CHANNEL: return tree_element_active_posechannel(C, scene, te, tselem, set); case TSE_CONSTRAINT: @@ -2227,10 +2287,11 @@ static int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, return tree_element_active_posegroup(C, scene, te, tselem, set); case TSE_SEQUENCE: return tree_element_active_sequence(C, te, tselem, set); - break; case TSE_SEQUENCE_DUP: return tree_element_active_sequence_dup(C, scene, te, tselem, set); - break; + case TSE_KEYMAP_ITEM: + return tree_element_active_keymap_item(C, te, tselem, set); + } return 0; } @@ -4953,6 +5014,241 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa } } +static void operator_call_cb(struct bContext *C, void *arg_kmi, void *arg2) +{ + wmOperatorType *ot= arg2; + wmKeymapItem *kmi= arg_kmi; + + if(ot) + BLI_strncpy(kmi->idname, ot->idname, OP_MAX_TYPENAME); +} + +static void operator_search_cb(const struct bContext *C, void *arg_kmi, char *str, uiSearchItems *items) +{ + wmOperatorType *ot = WM_operatortype_first(); + + for(; ot; ot= ot->next) { + + if(BLI_strcasestr(ot->idname, str)) { + char name[OP_MAX_TYPENAME]; + + /* display name for menu */ + WM_operator_py_idname(name, ot->idname); + + if(0==uiSearchItemAdd(items, name, ot, 0)) + break; + } + } +} + +/* operator Search browse menu, open */ +static uiBlock *operator_search_menu(bContext *C, ARegion *ar, void *arg_kmi) +{ + static char search[OP_MAX_TYPENAME]; + wmEvent event; + wmWindow *win= CTX_wm_window(C); + wmKeymapItem *kmi= arg_kmi; + wmOperatorType *ot= WM_operatortype_find(kmi->idname, 0); + uiBlock *block; + uiBut *but; + + /* clear initial search string, then all items show */ + search[0]= 0; + + block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS); + uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1); + + /* fake button, it holds space for search items */ + uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL); + + but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 0, 150, 19, ""); + uiButSetSearchFunc(but, operator_search_cb, arg_kmi, operator_call_cb, ot); + + uiBoundsBlock(block, 6); + uiBlockSetDirection(block, UI_DOWN); + uiEndBlock(C, block); + + event= *(win->eventstate); /* XXX huh huh? make api call */ + event.type= EVT_BUT_OPEN; + event.val= KM_PRESS; + event.customdata= but; + event.customdatafree= FALSE; + wm_event_add(win, &event); + + return block; +} + +#define OL_KM_KEYBOARD 0 +#define OL_KM_MOUSE 1 +#define OL_KM_TWEAK 2 +#define OL_KM_SPECIALS 3 + +static short keymap_menu_type(short type) +{ + if(ISKEYBOARD(type)) return OL_KM_KEYBOARD; + if(WM_key_event_is_tweak(type)) return OL_KM_TWEAK; + if(type >= LEFTMOUSE && type <= WHEELOUTMOUSE) return OL_KM_MOUSE; +// return OL_KM_SPECIALS; + return 0; +} + +static char *keymap_type_menu(void) +{ + static char string[500]; + static char formatstr[] = "|%s %%x%d"; + char *str= string; + + str += sprintf(str, "Event Type %%t"); + + str += sprintf(str, formatstr, "Keyboard", OL_KM_KEYBOARD); + str += sprintf(str, formatstr, "Mouse", OL_KM_MOUSE); + str += sprintf(str, formatstr, "Tweak", OL_KM_TWEAK); +// str += sprintf(str, formatstr, "Specials", OL_KM_SPECIALS); + + return string; +} + +static char *keymap_mouse_menu(void) +{ + static char string[500]; + static char formatstr[] = "|%s %%x%d"; + char *str= string; + + str += sprintf(str, "Mouse Event %%t"); + + str += sprintf(str, formatstr, "Left Mouse", LEFTMOUSE); + str += sprintf(str, formatstr, "Middle Mouse", MIDDLEMOUSE); + str += sprintf(str, formatstr, "Right Mouse", RIGHTMOUSE); + str += sprintf(str, formatstr, "Action Mouse", ACTIONMOUSE); + str += sprintf(str, formatstr, "Select Mouse", SELECTMOUSE); + str += sprintf(str, formatstr, "Mouse Move", MOUSEMOVE); + str += sprintf(str, formatstr, "Wheel Up", WHEELUPMOUSE); + str += sprintf(str, formatstr, "Wheel Down", WHEELDOWNMOUSE); + str += sprintf(str, formatstr, "Wheel In", WHEELINMOUSE); + str += sprintf(str, formatstr, "Wheel Out", WHEELOUTMOUSE); + + return string; +} + +static char *keymap_tweak_menu(void) +{ + static char string[500]; + static char formatstr[] = "|%s %%x%d"; + char *str= string; + + str += sprintf(str, "Tweak Event %%t"); + + str += sprintf(str, formatstr, "Left Mouse", EVT_TWEAK_L); + str += sprintf(str, formatstr, "Middle Mouse", EVT_TWEAK_M); + str += sprintf(str, formatstr, "Right Mouse", EVT_TWEAK_R); + str += sprintf(str, formatstr, "Action Mouse", EVT_TWEAK_A); + str += sprintf(str, formatstr, "Select Mouse", EVT_TWEAK_S); + + return string; +} + +static void keymap_type_cb(bContext *C, void *kmi_v, void *unused_v) +{ + wmKeymapItem *kmi= kmi_v; + short maptype= keymap_menu_type(kmi->type); + + if(maptype!=kmi->maptype) { + switch(kmi->maptype) { + case OL_KM_KEYBOARD: + kmi->type= AKEY; + kmi->val= KM_PRESS; + break; + case OL_KM_MOUSE: + kmi->type= LEFTMOUSE; + kmi->val= KM_PRESS; + break; + case OL_KM_TWEAK: + kmi->type= EVT_TWEAK_L; + kmi->val= KM_ANY; + break; + case OL_KM_SPECIALS: + kmi->type= AKEY; + kmi->val= KM_PRESS; + } + ED_region_tag_redraw(CTX_wm_region(C)); + } +} + +static void outliner_draw_keymapbuts(uiBlock *block, ARegion *ar, SpaceOops *soops, ListBase *lb) +{ + TreeElement *te; + TreeStoreElem *tselem; + + uiBlockSetEmboss(block, UI_EMBOSST); + + for(te= lb->first; te; te= te->next) { + tselem= TREESTORE(te); + if(te->ys >= ar->v2d.cur.ymin && te->ys <= ar->v2d.cur.ymax) { + uiBut *but; + char *str; + int xstart= 240; + int butw1= 20; /* operator */ + int butw2= 90; /* event type, menus */ + int butw3= 43; /* modifiers */ + + if(tselem->type == TSE_KEYMAP_ITEM) { + wmKeymapItem *kmi= te->directdata; + + /* modal map? */ + if(kmi->propvalue); + else { + uiDefBlockBut(block, operator_search_menu, kmi, "", xstart, (int)te->ys+1, butw1, OL_H-1, "Assign new Operator"); + } + xstart+= butw1+10; + + /* map type button */ + kmi->maptype= keymap_menu_type(kmi->type); + + str= keymap_type_menu(); + but= uiDefButS(block, MENU, 0, str, xstart, (int)te->ys+1, butw2, OL_H-1, &kmi->maptype, 0, 0, 0, 0, "Event type"); + uiButSetFunc(but, keymap_type_cb, kmi, NULL); + xstart+= butw2+5; + + /* edit actual event */ + switch(kmi->maptype) { + case OL_KM_KEYBOARD: + uiDefKeyevtButS(block, 0, "", xstart, (int)te->ys+1, butw2, OL_H-1, &kmi->type, "Key code"); + xstart+= butw2+5; + break; + case OL_KM_MOUSE: + str= keymap_mouse_menu(); + uiDefButS(block, MENU, 0, str, xstart,(int)te->ys+1, butw2, OL_H-1, &kmi->type, 0, 0, 0, 0, "Mouse button"); + xstart+= butw2+5; + break; + case OL_KM_TWEAK: + str= keymap_tweak_menu(); + uiDefButS(block, MENU, 0, str, xstart, (int)te->ys+1, butw2, OL_H-1, &kmi->type, 0, 0, 0, 0, "Tweak gesture"); + xstart+= butw2+5; + break; + } + + /* modifiers */ + uiBlockBeginAlign(block); + uiDefButS(block, OPTION, 0, "Shift", xstart, (int)te->ys+1, butw3+5, OL_H-1, &kmi->shift, 0, 0, 0, 0, "Modifier"); xstart+= butw3+5; + uiDefButS(block, OPTION, 0, "Ctrl", xstart, (int)te->ys+1, butw3, OL_H-1, &kmi->ctrl, 0, 0, 0, 0, "Modifier"); xstart+= butw3; + uiDefButS(block, OPTION, 0, "Alt", xstart, (int)te->ys+1, butw3, OL_H-1, &kmi->alt, 0, 0, 0, 0, "Modifier"); xstart+= butw3; + uiDefButS(block, OPTION, 0, "Cmd", xstart, (int)te->ys+1, butw3, OL_H-1, &kmi->oskey, 0, 0, 0, 0, "Modifier"); xstart+= butw3; + xstart+= 5; + uiBlockEndAlign(block); + + /* rna property */ + if(kmi->ptr && kmi->ptr->data) + uiDefBut(block, LABEL, 0, "(RNA property)", xstart, (int)te->ys+1, butw2, OL_H-1, &kmi->oskey, 0, 0, 0, 0, ""); xstart+= butw2; + + + } + } + + if((tselem->flag & TSE_CLOSED)==0) outliner_draw_keymapbuts(block, ar, soops, &te->subtree); + } +} + + static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, SpaceOops *soops, ListBase *lb) { uiBut *bt; @@ -5007,7 +5303,7 @@ void draw_outliner(const bContext *C) /* get extents of data */ outliner_height(soops, &soops->tree, &sizey); - if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) { + if (ELEM3(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF, SO_KEYMAP)) { /* RNA has two columns: * - column 1 is (max_width + OL_RNA_COL_SPACEX) or * (OL_RNA_COL_X), whichever is wider... @@ -5053,6 +5349,9 @@ void draw_outliner(const bContext *C) outliner_draw_rnacols(ar, soops, sizex_rna); outliner_draw_rnabuts(block, scene, ar, soops, sizex_rna, &soops->tree); } + else if(soops->outlinevis == SO_KEYMAP) { + outliner_draw_keymapbuts(block, ar, soops, &soops->tree); + } else if (!(soops->flag & SO_HIDE_RESTRICTCOLS)) { /* draw restriction columns */ outliner_draw_restrictcols(ar, soops); diff --git a/source/blender/editors/space_outliner/outliner_header.c b/source/blender/editors/space_outliner/outliner_header.c index fe2f054899c..0743a447298 100644 --- a/source/blender/editors/space_outliner/outliner_header.c +++ b/source/blender/editors/space_outliner/outliner_header.c @@ -233,9 +233,9 @@ void outliner_header_buttons(const bContext *C, ARegion *ar) /* data selector*/ if(G.main->library.first) - uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10|Datablocks %x11|User Preferences %x12", xco, yco, 120, 20, &soutliner->outlinevis, 0, 0, 0, 0, ""); + uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10|Datablocks %x11|User Preferences %x12||Key Maps %x13", xco, yco, 120, 20, &soutliner->outlinevis, 0, 0, 0, 0, ""); else - uiDefButS(block, MENU, B_REDR, "Outliner Display%t|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10|Datablocks %x11|User Preferences %x12", xco, yco, 120, 20, &soutliner->outlinevis, 0, 0, 0, 0, ""); + uiDefButS(block, MENU, B_REDR, "Outliner Display%t|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10|Datablocks %x11|User Preferences %x12||Key Maps %x13", xco, yco, 120, 20, &soutliner->outlinevis, 0, 0, 0, 0, ""); xco += 120; /* KeyingSet editing buttons */ diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index d5986f3ebbd..65b0708d64b 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -95,6 +95,8 @@ typedef struct TreeElement { #define TSE_RNA_PROPERTY 31 #define TSE_RNA_ARRAY_ELEM 32 #define TSE_NLA_TRACK 33 +#define TSE_KEYMAP 34 +#define TSE_KEYMAP_ITEM 35 /* outliner search flags */ #define OL_FIND 0 diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 007ea6ef51f..c61935c106f 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -749,6 +749,7 @@ enum { #define SO_SEQUENCE 10 #define SO_DATABLOCKS 11 #define SO_USERDEF 12 +#define SO_KEYMAP 13 /* SpaceOops->storeflag */ #define SO_TREESTORE_CLEANUP 1 diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index f6f0fc1a753..a7ad502d438 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -229,6 +229,10 @@ typedef struct wmKeymapItem { short keymodifier; /* rawkey modifier */ short propvalue; /* if used, the item is from modal map */ + + short inactive; /* if set, deactivated item */ + short maptype; /* keymap editor */ + short pad2, pad3; } wmKeymapItem; diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 9c9c256e819..4a2154bc3cf 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -40,8 +40,28 @@ EnumPropertyItem event_value_items[] = { {KM_RELEASE, "RELEASE", 0, "Release", ""}, {0, NULL, 0, NULL, NULL}}; -/* not returned: CAPSLOCKKEY, UNKNOWNKEY, COMMANDKEY, GRLESSKEY */ +/* not returned: CAPSLOCKKEY, UNKNOWNKEY, GRLESSKEY */ EnumPropertyItem event_type_items[] = { + + {LEFTMOUSE, "LEFTMOUSE", 0, "Left Mouse", ""}, + {MIDDLEMOUSE, "MIDDLEMOUSE", 0, "Middle Mouse", ""}, + {RIGHTMOUSE, "RIGHTMOUSE", 0, "Right Mouse", ""}, + {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action Mouse", ""}, + {SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", ""}, + + {MOUSEMOVE, "MOUSEMOVE", 0, "Mouse Move", ""}, + + {WHEELUPMOUSE, "WHEELUPMOUSE", 0, "Wheel Up", ""}, + {WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, "Wheel Down", ""}, + {WHEELINMOUSE, "WHEELINMOUSE", 0, "Wheel In", ""}, + {WHEELOUTMOUSE, "WHEELOUTMOUSE", 0, "Wheel Out", ""}, + + {EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Tweak Left", ""}, + {EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Tweak Middle", ""}, + {EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Tweak Right", ""}, + {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Tweak Action", ""}, + {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Tweak Select", ""}, + {AKEY, "A", 0, "A", ""}, {BKEY, "B", 0, "B", ""}, {CKEY, "C", 0, "C", ""}, @@ -86,6 +106,8 @@ EnumPropertyItem event_type_items[] = { {RIGHTALTKEY, "RIGHT_ALT", 0, "Right Alt", ""}, {RIGHTCTRLKEY, "RIGHT_CTRL", 0, "Right Ctrl", ""}, {RIGHTSHIFTKEY, "RIGHT_SHIFT", 0, "Right Shift", ""}, + + {COMMANDKEY, "COMMAND", 0, "Command", ""}, {ESCKEY, "ESC", 0, "Esc", ""}, {TABKEY, "TAB", 0, "Tab", ""}, diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 0a68d2c9053..ca60c6e7637 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -96,6 +96,7 @@ wmKeyMap *WM_modalkeymap_get(struct wmWindowManager *wm, const char *nameid); void WM_modalkeymap_add_item(wmKeyMap *km, short type, short val, int modifier, short keymodifier, short value); void WM_modalkeymap_assign(wmKeyMap *km, const char *opname); +int WM_key_event_is_tweak(short type); const char *WM_key_event_string(short type); char *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 78c7f7a7383..2a1fc009baa 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -626,6 +626,8 @@ static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi) { int kmitype= wm_userdef_event_map(kmi->type); + if(kmi->inactive) return 0; + /* the matching rules */ if(kmitype==KM_TEXTINPUT) if(ISKEYBOARD(winevent->type)) return 1; diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index 764b209d755..1d959665f40 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -290,3 +290,13 @@ char *WM_key_event_operator_string(const bContext *C, const char *opname, int op return NULL; } +/* ********************* */ + +int WM_key_event_is_tweak(short type) +{ + if(type>=EVT_TWEAK_L && type<=EVT_GESTURE) + return 1; + return 0; +} + + diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 5c484dfa322..6c90926d545 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -906,7 +906,7 @@ void WM_paint_cursor_end(wmWindowManager *wm, void *handle) It stores 4 values (xmin, xmax, ymin, ymax) and event it ended with (event_type) */ -static int border_apply(bContext *C, wmOperator *op, int event_type) +static int border_apply(bContext *C, wmOperator *op, int event_type, int event_orig) { wmGesture *gesture= op->customdata; rcti *rect= gesture->customdata; @@ -924,9 +924,14 @@ static int border_apply(bContext *C, wmOperator *op, int event_type) RNA_int_set(op->ptr, "ymin", rect->ymin); RNA_int_set(op->ptr, "xmax", rect->xmax); RNA_int_set(op->ptr, "ymax", rect->ymax); - if( RNA_struct_find_property(op->ptr, "event_type") ) - RNA_int_set(op->ptr, "event_type", event_type); + /* XXX weak; border should be configured for this without reading event types */ + if( RNA_struct_find_property(op->ptr, "event_type") ) { + if(ELEM4(event_orig, EVT_TWEAK_L, EVT_TWEAK_R, EVT_TWEAK_A, EVT_TWEAK_S)) + event_type= LEFTMOUSE; + + RNA_int_set(op->ptr, "event_type", event_type); + } op->type->exec(C, op); return 1; @@ -947,7 +952,10 @@ static void wm_gesture_end(bContext *C, wmOperator *op) int WM_border_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { - op->customdata= WM_gesture_new(C, event, WM_GESTURE_CROSS_RECT); + if(WM_key_event_is_tweak(event->type)) + op->customdata= WM_gesture_new(C, event, WM_GESTURE_RECT); + else + op->customdata= WM_gesture_new(C, event, WM_GESTURE_CROSS_RECT); /* add modal handler */ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op); @@ -984,14 +992,14 @@ int WM_border_select_modal(bContext *C, wmOperator *op, wmEvent *event) case LEFTMOUSE: case MIDDLEMOUSE: case RIGHTMOUSE: - if(event->val==1) { + if(event->val==KM_PRESS) { if(gesture->type==WM_GESTURE_CROSS_RECT && gesture->mode==0) { gesture->mode= 1; wm_gesture_tag_redraw(C); } } else { - if(border_apply(C, op, event->type)) { + if(border_apply(C, op, event->type, gesture->event_type)) { wm_gesture_end(C, op); return OPERATOR_FINISHED; } From 6d84e38856af0bdf01e09022277e6d8f1e54aa22 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 26 Jul 2009 13:10:29 +0000 Subject: [PATCH 396/512] 2.5 Space RNA: * Added Key Map Editor to Outliner "display_mode" RNA. --- source/blender/makesrna/intern/rna_space.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8960714862d..b9d94d0103c 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -439,6 +439,7 @@ static void rna_def_space_outliner(BlenderRNA *brna) {10, "SEQUENCE", 0, "Sequence", ""}, {11, "DATABLOCKS", 0, "Datablocks", ""}, {12, "USER_PREFERENCES", 0, "User Preferences", ""}, + {13, "KEYMAPS", 0, "Key Maps", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "SpaceOutliner", "Space"); From b666f55e0e779d1f30f81035bef571db705d5913 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 26 Jul 2009 16:31:48 +0000 Subject: [PATCH 397/512] 2.5 Layout files: * Removed __idname__ from all panels. Note: Operator classes still need that id. Don't remove it there. --- release/ui/buttons_data_armature.py | 6 ------ release/ui/buttons_data_bone.py | 5 ----- release/ui/buttons_data_camera.py | 3 --- release/ui/buttons_data_curve.py | 5 ----- release/ui/buttons_data_empty.py | 1 - release/ui/buttons_data_lamp.py | 6 ------ release/ui/buttons_data_lattice.py | 2 -- release/ui/buttons_data_mesh.py | 7 ------- release/ui/buttons_data_modifier.py | 1 - release/ui/buttons_data_text.py | 7 ------- release/ui/buttons_game.py | 2 -- release/ui/buttons_object.py | 7 ------- release/ui/buttons_object_constraint.py | 2 -- release/ui/buttons_particle.py | 11 ----------- release/ui/buttons_physics_cloth.py | 5 ----- release/ui/buttons_physics_field.py | 2 -- release/ui/buttons_physics_fluid.py | 4 ---- release/ui/buttons_physics_softbody.py | 5 ----- release/ui/space_buttons.py | 1 - release/ui/space_console.py | 1 - release/ui/space_filebrowser.py | 1 - release/ui/space_info.py | 1 - release/ui/space_outliner.py | 1 - release/ui/space_sequencer.py | 8 -------- release/ui/space_text.py | 1 - 25 files changed, 95 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index 51113226dac..34a6964ef23 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.armature != None) class DATA_PT_context_arm(DataButtonsPanel): - __idname__ = "DATA_PT_context_arm" __show_header__ = False def draw(self, context): @@ -30,7 +29,6 @@ class DATA_PT_context_arm(DataButtonsPanel): split.itemS() class DATA_PT_skeleton(DataButtonsPanel): - __idname__ = "DATA_PT_skeleton" __label__ = "Skeleton" def draw(self, context): @@ -63,7 +61,6 @@ class DATA_PT_skeleton(DataButtonsPanel): sub.template_layers(arm, "layer_protection") class DATA_PT_display(DataButtonsPanel): - __idname__ = "DATA_PT_display" __label__ = "Display" def draw(self, context): @@ -80,7 +77,6 @@ class DATA_PT_display(DataButtonsPanel): sub.itemR(arm, "delay_deform", text="Delay Refresh") class DATA_PT_bone_groups(DataButtonsPanel): - __idname__ = "DATA_PT_bone_groups" __label__ = "Bone Groups" def poll(self, context): @@ -121,7 +117,6 @@ class DATA_PT_bone_groups(DataButtonsPanel): #row.itemO("object.bone_group_deselect", text="Deselect") class DATA_PT_paths(DataButtonsPanel): - __idname__ = "DATA_PT_paths" __label__ = "Paths" def draw(self, context): @@ -150,7 +145,6 @@ class DATA_PT_paths(DataButtonsPanel): sub.itemR(arm, "paths_show_keyframe_numbers", text="Keyframe Numbers") class DATA_PT_ghost(DataButtonsPanel): - __idname__ = "DATA_PT_ghost" __label__ = "Ghost" def draw(self, context): diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index 4458f8d2d94..0f072b3607d 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -10,7 +10,6 @@ class BoneButtonsPanel(bpy.types.Panel): return (context.bone or context.edit_bone) class BONE_PT_context_bone(BoneButtonsPanel): - __idname__ = "BONE_PT_context_bone" __show_header__ = False def draw(self, context): @@ -24,7 +23,6 @@ class BONE_PT_context_bone(BoneButtonsPanel): row.itemR(bone, "name", text="") class BONE_PT_transform(BoneButtonsPanel): - __idname__ = "BONE_PT_transform" __label__ = "Transform" def draw(self, context): @@ -70,7 +68,6 @@ class BONE_PT_transform(BoneButtonsPanel): col.row().itemR(pchan, "euler_rotation", text="") class BONE_PT_bone(BoneButtonsPanel): - __idname__ = "BONE_PT_bone" __label__ = "Bone" @@ -107,7 +104,6 @@ class BONE_PT_bone(BoneButtonsPanel): sub.itemR(bone, "hidden", text="Hide") class BONE_PT_inverse_kinematics(BoneButtonsPanel): - __idname__ = "BONE_PT_inverse_kinematics" __label__ = "Inverse Kinematics" __default_closed__ = True @@ -177,7 +173,6 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel): split.itemL() class BONE_PT_deform(BoneButtonsPanel): - __idname__ = "BONE_PT_deform" __label__ = "Deform" __default_closed__ = True diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py index 9f7a11a980c..595ac01e5bd 100644 --- a/release/ui/buttons_data_camera.py +++ b/release/ui/buttons_data_camera.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.camera != None) class DATA_PT_context_camera(DataButtonsPanel): - __idname__ = "DATA_PT_context_camera" __show_header__ = False def draw(self, context): @@ -30,7 +29,6 @@ class DATA_PT_context_camera(DataButtonsPanel): split.itemS() class DATA_PT_camera(DataButtonsPanel): - __idname__ = "DATA_PT_camera" __label__ = "Lens" def draw(self, context): @@ -76,7 +74,6 @@ class DATA_PT_camera(DataButtonsPanel): col.itemR(cam, "dof_distance", text="Distance") class DATA_PT_camera_display(DataButtonsPanel): - __idname__ = "DATA_PT_camera_display" __label__ = "Display" def draw(self, context): diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py index caaab7b21fc..36272ca5d3d 100644 --- a/release/ui/buttons_data_curve.py +++ b/release/ui/buttons_data_curve.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.object and context.object.type == 'CURVE' and context.curve) class DATA_PT_context_curve(DataButtonsPanel): - __idname__ = "DATA_PT_context_curve" __show_header__ = False def draw(self, context): @@ -31,7 +30,6 @@ class DATA_PT_context_curve(DataButtonsPanel): class DATA_PT_shape_curve(DataButtonsPanel): - __idname__ = "DATA_PT_shape_curve" __label__ = "Shape" def draw(self, context): @@ -70,7 +68,6 @@ class DATA_PT_shape_curve(DataButtonsPanel): # sub.itemR(curve, "vertex_normal_flip") class DATA_PT_geometry_curve(DataButtonsPanel): - __idname__ = "DATA_PT_geometry_curve" __label__ = "Geometry " def draw(self, context): @@ -92,7 +89,6 @@ class DATA_PT_geometry_curve(DataButtonsPanel): sub.itemR(curve, "bevel_object", icon="ICON_OUTLINER_OB_CURVE") class DATA_PT_pathanim(DataButtonsPanel): - __idname__ = "DATA_PT_pathanim" __label__ = "Path Animation" def draw_header(self, context): @@ -117,7 +113,6 @@ class DATA_PT_pathanim(DataButtonsPanel): sub.itemR(curve, "offset_path_distance", text="Offset Children") class DATA_PT_current_curve(DataButtonsPanel): - __idname__ = "DATA_PT_current_curve" __label__ = "Current Curve" def draw(self, context): diff --git a/release/ui/buttons_data_empty.py b/release/ui/buttons_data_empty.py index f97dedcf6cf..a12883be6a2 100644 --- a/release/ui/buttons_data_empty.py +++ b/release/ui/buttons_data_empty.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.object and context.object.type == 'EMPTY') class DATA_PT_empty(DataButtonsPanel): - __idname__ = "DATA_PT_empty" __label__ = "Empty" def draw(self, context): diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index aa84c5c471d..bf9bf24221b 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -20,7 +20,6 @@ class DATA_PT_preview(DataButtonsPanel): layout.template_preview(lamp) class DATA_PT_context_lamp(DataButtonsPanel): - __idname__ = "DATA_PT_context_lamp" __show_header__ = False def draw(self, context): @@ -40,7 +39,6 @@ class DATA_PT_context_lamp(DataButtonsPanel): split.itemS() class DATA_PT_lamp(DataButtonsPanel): - __idname__ = "DATA_PT_lamp" __label__ = "Lamp" def draw(self, context): @@ -104,7 +102,6 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "gamma", text="Value") class DATA_PT_sunsky(DataButtonsPanel): - __idname__ = "DATA_PT_sunsky" __label__ = "Sun/Sky" def poll(self, context): @@ -170,7 +167,6 @@ class DATA_PT_sunsky(DataButtonsPanel): sub.itemR(lamp, "atmosphere_extinction", slider=True ,text="Extinction") class DATA_PT_shadow(DataButtonsPanel): - __idname__ = "DATA_PT_shadow" __label__ = "Shadow" def poll(self, context): @@ -263,7 +259,6 @@ class DATA_PT_shadow(DataButtonsPanel): row.itemR(lamp, "shadow_buffer_clip_end", text=" Clip End") class DATA_PT_spot(DataButtonsPanel): - __idname__ = "DATA_PT_spot" __label__ = "Spot" def poll(self, context): @@ -290,7 +285,6 @@ class DATA_PT_spot(DataButtonsPanel): colsub.itemR(lamp, "halo_step", text="Step") class DATA_PT_falloff_curve(DataButtonsPanel): - __idname__ = "DATA_PT_falloff_curve" __label__ = "Falloff Curve" __default_closed__ = True diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py index 57713749b0c..4ccac2dfa9c 100644 --- a/release/ui/buttons_data_lattice.py +++ b/release/ui/buttons_data_lattice.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.lattice != None) class DATA_PT_context_lattice(DataButtonsPanel): - __idname__ = "DATA_PT_context_lattice" __show_header__ = False def draw(self, context): @@ -31,7 +30,6 @@ class DATA_PT_context_lattice(DataButtonsPanel): class DATA_PT_lattice(DataButtonsPanel): - __idname__ = "DATA_PT_lattice" __label__ = "Lattice" def draw(self, context): diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index ed4c50aaf1a..8d6d0ade9f1 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.mesh != None) class DATA_PT_context_mesh(DataButtonsPanel): - __idname__ = "DATA_PT_context_mesh" __show_header__ = False def draw(self, context): @@ -30,7 +29,6 @@ class DATA_PT_context_mesh(DataButtonsPanel): split.itemS() class DATA_PT_normals(DataButtonsPanel): - __idname__ = "DATA_PT_normals" __label__ = "Normals" def draw(self, context): @@ -50,7 +48,6 @@ class DATA_PT_normals(DataButtonsPanel): sub.itemR(mesh, "double_sided") class DATA_PT_vertex_groups(DataButtonsPanel): - __idname__ = "DATA_PT_vertex_groups" __label__ = "Vertex Groups" def poll(self, context): @@ -88,7 +85,6 @@ class DATA_PT_vertex_groups(DataButtonsPanel): layout.itemR(context.tool_settings, "vertex_group_weight", text="Weight") class DATA_PT_shape_keys(DataButtonsPanel): - __idname__ = "DATA_PT_shape_keys" __label__ = "Shape Keys" def poll(self, context): @@ -146,7 +142,6 @@ class DATA_PT_shape_keys(DataButtonsPanel): layout.enabled = False class DATA_PT_uv_texture(DataButtonsPanel): - __idname__ = "DATA_PT_uv_texture" __label__ = "UV Texture" def draw(self, context): @@ -167,7 +162,6 @@ class DATA_PT_uv_texture(DataButtonsPanel): layout.itemR(lay, "name") class DATA_PT_vertex_colors(DataButtonsPanel): - __idname__ = "DATA_PT_vertex_colors" __label__ = "Vertex Colors" def draw(self, context): @@ -193,4 +187,3 @@ bpy.types.register(DATA_PT_vertex_groups) bpy.types.register(DATA_PT_shape_keys) bpy.types.register(DATA_PT_uv_texture) bpy.types.register(DATA_PT_vertex_colors) - diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py index f4d0f7f8ad0..c4d2aea06e5 100644 --- a/release/ui/buttons_data_modifier.py +++ b/release/ui/buttons_data_modifier.py @@ -7,7 +7,6 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "modifier" class DATA_PT_modifiers(DataButtonsPanel): - __idname__ = "DATA_PT_modifiers" __label__ = "Modifiers" def draw(self, context): diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py index 84abe554f5c..9fabf25b11b 100644 --- a/release/ui/buttons_data_text.py +++ b/release/ui/buttons_data_text.py @@ -10,7 +10,6 @@ class DataButtonsPanel(bpy.types.Panel): return (context.object and context.object.type == 'TEXT' and context.curve) class DATA_PT_context_text(DataButtonsPanel): - __idname__ = "DATA_PT_context_text" __show_header__ = False def draw(self, context): @@ -30,7 +29,6 @@ class DATA_PT_context_text(DataButtonsPanel): split.itemS() class DATA_PT_shape_text(DataButtonsPanel): - __idname__ = "DATA_PT_shape_text" __label__ = "Shape Text" def draw(self, context): @@ -65,7 +63,6 @@ class DATA_PT_shape_text(DataButtonsPanel): sub.itemR(curve, "fast") class DATA_PT_geometry_text(DataButtonsPanel): - __idname__ = "DATA_PT_geometry_text" __label__ = "Geometry" def draw(self, context): @@ -87,7 +84,6 @@ class DATA_PT_geometry_text(DataButtonsPanel): sub.itemR(curve, "bevel_object") class DATA_PT_font(DataButtonsPanel): - __idname__ = "DATA_PT_font" __label__ = "Font" def draw(self, context): @@ -118,7 +114,6 @@ class DATA_PT_font(DataButtonsPanel): # sub.itemR(text, "edit_format") class DATA_PT_paragraph(DataButtonsPanel): - __idname__ = "DATA_PT_paragraph" __label__ = "Paragraph" def draw(self, context): @@ -144,7 +139,6 @@ class DATA_PT_paragraph(DataButtonsPanel): """ class DATA_PT_textboxes(DataButtonsPanel): - __idname__ = "DATA_PT_textboxes" __label__ = "Text Boxes" def draw(self, context): @@ -158,4 +152,3 @@ bpy.types.register(DATA_PT_geometry_text) bpy.types.register(DATA_PT_font) bpy.types.register(DATA_PT_paragraph) #bpy.types.register(DATA_PT_textboxes) - diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index c2bba62fc27..3f60bceb284 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -12,7 +12,6 @@ class PhysicsButtonsPanel(bpy.types.Panel): return ob and ob.game and (rd.engine == 'BLENDER_GAME') class PHYSICS_PT_game_physics(PhysicsButtonsPanel): - __idname__ = "PHYSICS_PT_game_physics" __label__ = "Physics" def draw(self, context): @@ -77,7 +76,6 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel): sub.itemR(game, "lock_z_rot_axis", text="Z") class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel): - __idname__ = "PHYSICS_PT_game_collision_bounds" __label__ = "Collision Bounds" def draw_header(self, context): diff --git a/release/ui/buttons_object.py b/release/ui/buttons_object.py index 9ab28241e5d..b2c8105f2bb 100644 --- a/release/ui/buttons_object.py +++ b/release/ui/buttons_object.py @@ -7,7 +7,6 @@ class ObjectButtonsPanel(bpy.types.Panel): __context__ = "object" class OBJECT_PT_context_object(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_context_object" __show_header__ = False def draw(self, context): @@ -19,7 +18,6 @@ class OBJECT_PT_context_object(ObjectButtonsPanel): row.itemR(ob, "name", text="") class OBJECT_PT_transform(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_transform" __label__ = "Transform" def draw(self, context): @@ -32,7 +30,6 @@ class OBJECT_PT_transform(ObjectButtonsPanel): row.column().itemR(ob, "scale") class OBJECT_PT_relations(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_relations" __label__ = "Relations" def draw(self, context): @@ -57,7 +54,6 @@ class OBJECT_PT_relations(ObjectButtonsPanel): sub.active = parent != None class OBJECT_PT_groups(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_groups" __label__ = "Groups" def draw(self, context): @@ -83,7 +79,6 @@ class OBJECT_PT_groups(ObjectButtonsPanel): split.column().itemR(group, "dupli_offset", text="") class OBJECT_PT_display(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_display" __label__ = "Display" def draw(self, context): @@ -103,7 +98,6 @@ class OBJECT_PT_display(ObjectButtonsPanel): flow.itemR(ob, "draw_transparent", text="Transparency") class OBJECT_PT_duplication(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_duplication" __label__ = "Duplication" def draw(self, context): @@ -137,7 +131,6 @@ class OBJECT_PT_duplication(ObjectButtonsPanel): layout.itemR(ob, "dupli_group", text="Group") class OBJECT_PT_animation(ObjectButtonsPanel): - __idname__ = "OBJECT_PT_animation" __label__ = "Animation" def draw(self, context): diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 1766513a952..b239a96a16a 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -512,7 +512,6 @@ class ConstraintButtonsPanel(bpy.types.Panel): row.itemR(con, "axis_z") class OBJECT_PT_constraints(ConstraintButtonsPanel): - __idname__ = "OBJECT_PT_constraints" __label__ = "Constraints" __context__ = "constraint" @@ -531,7 +530,6 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): self.draw_constraint(con) class BONE_PT_constraints(ConstraintButtonsPanel): - __idname__ = "BONE_PT_constraints" __label__ = "Constraints" __context__ = "bone" diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index 46d7a7999f4..f35d15bbb80 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -19,7 +19,6 @@ class ParticleButtonsPanel(bpy.types.Panel): return particle_panel_poll(context) class PARTICLE_PT_particles(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_particles" __show_header__ = False def poll(self, context): @@ -83,7 +82,6 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): split.itemR(psys, "reactor_target_particle_system", text="Particle System") class PARTICLE_PT_emission(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_emission" __label__ = "Emission" def poll(self, context): @@ -135,7 +133,6 @@ class PARTICLE_PT_emission(ParticleButtonsPanel): row.itemR(part, "grid_resolution") class PARTICLE_PT_cache(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_cache" __label__ = "Cache" __default_closed__ = True @@ -216,7 +213,6 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): #row.itemR(cache, "end_frame") class PARTICLE_PT_initial(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_initial" __label__ = "Velocity" def poll(self, context): @@ -283,7 +279,6 @@ class PARTICLE_PT_initial(ParticleButtonsPanel): sub.itemR(part, "angular_velocity_factor", text="") class PARTICLE_PT_physics(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_physics" __label__ = "Physics" def poll(self, context): @@ -427,7 +422,6 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): layout.itemR(key, "mode", expand=True) class PARTICLE_PT_boidbrain(ParticleButtonsPanel): - __idname__ = "PARTICLE_PT_boidbrain" __label__ = "Boid Brain" def poll(self, context): @@ -522,7 +516,6 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel): class PARTICLE_PT_render(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_render" __label__ = "Render" def poll(self, context): @@ -664,7 +657,6 @@ class PARTICLE_PT_render(ParticleButtonsPanel): col.itemL(text="") class PARTICLE_PT_draw(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_draw" __label__ = "Display" __default_closed__ = True @@ -721,7 +713,6 @@ class PARTICLE_PT_draw(ParticleButtonsPanel): #subcol.itemL(text="Override material color") class PARTICLE_PT_children(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_children" __label__ = "Children" __default_closed__ = True @@ -798,7 +789,6 @@ class PARTICLE_PT_children(ParticleButtonsPanel): sub.itemR(part, "kink_shape", slider=True) class PARTICLE_PT_effectors(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_effectors" __label__ = "Effectors" __default_closed__ = True @@ -824,7 +814,6 @@ class PARTICLE_PT_effectors(ParticleButtonsPanel): layout.itemR(part, "eweight_lennardjones", slider=True) class PARTICLE_PT_vertexgroups(ParticleButtonsPanel): - __idname__= "PARTICLE_PT_vertexgroups" __label__ = "Vertexgroups" __default_closed__ = True diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index dcfa1a331e5..372dc32d063 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -12,7 +12,6 @@ class PhysicButtonsPanel(bpy.types.Panel): return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_cloth(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_cloth" __label__ = "Cloth" def draw(self, context): @@ -76,7 +75,6 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel): """ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel): - __idname__= "PHYSICS_PT_cloth_cache" __label__ = "Cloth Cache" __default_closed__ = True @@ -126,7 +124,6 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel): layout.itemO("ptcache.bake_all", text="Update All Dynamics to current frame") class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_clothcollision" __label__ = "Cloth Collision" __default_closed__ = True @@ -159,7 +156,6 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): col.itemR(cloth, "self_min_distance", slider=True, text="Distance") class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_stiffness" __label__ = "Cloth Stiffness Scaling" __default_closed__ = True @@ -197,4 +193,3 @@ bpy.types.register(PHYSICS_PT_cloth) bpy.types.register(PHYSICS_PT_cloth_cache) bpy.types.register(PHYSICS_PT_cloth_collision) bpy.types.register(PHYSICS_PT_cloth_stiffness) - diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 7df14b3eef9..180133f599e 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -11,7 +11,6 @@ class PhysicButtonsPanel(bpy.types.Panel): return (context.object != None) and (not rd.use_game_engine) class PHYSICS_PT_field(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_field" __label__ = "Force Fields" __default_closed__ = True @@ -166,7 +165,6 @@ class PHYSICS_PT_field(PhysicButtonsPanel): #layout.itemR(field, "surface") class PHYSICS_PT_collision(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_collision" __label__ = "Collision" __default_closed__ = True diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index f25aa117c74..1f56c423c13 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -12,7 +12,6 @@ class PhysicButtonsPanel(bpy.types.Panel): return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_fluid(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_fluid" __label__ = "Fluid" def draw(self, context): @@ -168,7 +167,6 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col.itemR(fluid, "velocity_radius", text="Radius") class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_domain_gravity" __label__ = "Domain World" __default_closed__ = True @@ -212,7 +210,6 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): col.itemR(fluid, "compressibility", slider=True) class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_domain_boundary" __label__ = "Domain Boundary" __default_closed__ = True @@ -243,7 +240,6 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): col.itemR(fluid, "surface_subdivisions", text="Subdivisions") class PHYSICS_PT_domain_particles(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_domain_particles" __label__ = "Domain Particles" __default_closed__ = True diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py index fbcc1be3f01..c73bef18e73 100644 --- a/release/ui/buttons_physics_softbody.py +++ b/release/ui/buttons_physics_softbody.py @@ -12,7 +12,6 @@ class PhysicButtonsPanel(bpy.types.Panel): return (ob and ob.type == 'MESH') and (not rd.use_game_engine) class PHYSICS_PT_softbody(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_softbody" __label__ = "Soft Body" def draw(self, context): @@ -54,7 +53,6 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel): class PHYSICS_PT_softbody_goal(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_softbody_goal" __label__ = "Soft Body Goal" def poll(self, context): @@ -94,7 +92,6 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel): layout.item_pointerR(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group") class PHYSICS_PT_softbody_edge(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_softbody_edge" __label__ = "Soft Body Edges" def poll(self, context): @@ -145,7 +142,6 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel): col.itemR(softbody, "face_collision", text="Face") class PHYSICS_PT_softbody_collision(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_softbody_collision" __label__ = "Soft Body Collision" def poll(self, context): @@ -178,7 +174,6 @@ class PHYSICS_PT_softbody_collision(PhysicButtonsPanel): col.itemR(softbody, "ball_damp", text="Dampening") class PHYSICS_PT_softbody_solver(PhysicButtonsPanel): - __idname__ = "PHYSICS_PT_softbody_solver" __label__ = "Soft Body Solver" def poll(self, context): diff --git a/release/ui/space_buttons.py b/release/ui/space_buttons.py index cae9a813433..b444913809d 100644 --- a/release/ui/space_buttons.py +++ b/release/ui/space_buttons.py @@ -3,7 +3,6 @@ import bpy class Buttons_HT_header(bpy.types.Header): __space_type__ = "BUTTONS_WINDOW" - __idname__ = "BUTTONS_HT_header" def draw(self, context): layout = self.layout diff --git a/release/ui/space_console.py b/release/ui/space_console.py index cf5727cd3a2..264203d74e5 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -6,7 +6,6 @@ del bpy_ops class CONSOLE_HT_header(bpy.types.Header): __space_type__ = "CONSOLE" - __idname__ = "CONSOLE_HT_header" def draw(self, context): sc = context.space_data diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py index b0aaae8f0a5..9a235516c9d 100644 --- a/release/ui/space_filebrowser.py +++ b/release/ui/space_filebrowser.py @@ -4,7 +4,6 @@ import bpy class FILEBROWSER_HT_header(bpy.types.Header): __space_type__ = "FILE_BROWSER" - __idname__ = "FILEBROWSER_HT_header" def draw(self, context): st = context.space_data diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 9e94be9b746..3cc01a35c1f 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -3,7 +3,6 @@ import bpy class INFO_HT_header(bpy.types.Header): __space_type__ = "USER_PREFERENCES" - __idname__ = "INFO_HT_header" def draw(self, context): st = context.space_data diff --git a/release/ui/space_outliner.py b/release/ui/space_outliner.py index 545a001349b..5815acc7e12 100644 --- a/release/ui/space_outliner.py +++ b/release/ui/space_outliner.py @@ -3,7 +3,6 @@ import bpy class OUTLINER_HT_header(bpy.types.Header): __space_type__ = "OUTLINER" - __idname__ = "OUTLINER_HT_header" def draw(self, context): so = context.space_data diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py index 13f90a1af63..4f60f5ccd61 100644 --- a/release/ui/space_sequencer.py +++ b/release/ui/space_sequencer.py @@ -8,7 +8,6 @@ def act_strip(context): # Header class SEQUENCER_HT_header(bpy.types.Header): __space_type__ = "SEQUENCE_EDITOR" - __idname__ = "SEQUENCE_HT_header" def draw(self, context): @@ -263,7 +262,6 @@ class SequencerButtonsPanel_Output(bpy.types.Panel): class SEQUENCER_PT_edit(SequencerButtonsPanel): __label__ = "Edit Strip" - __idname__ = "SEQUENCER_PT_edit" def draw(self, context): layout = self.layout @@ -302,7 +300,6 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel): class SEQUENCER_PT_effect(SequencerButtonsPanel): __label__ = "Effect Strip" - __idname__ = "SEQUENCER_PT_effect" def poll(self, context): if context.space_data.display_mode != 'SEQUENCER': @@ -395,7 +392,6 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel): class SEQUENCER_PT_input(SequencerButtonsPanel): __label__ = "Strip Input" - __idname__ = "SEQUENCER_PT_input" def poll(self, context): if context.space_data.display_mode != 'SEQUENCER': @@ -451,7 +447,6 @@ class SEQUENCER_PT_input(SequencerButtonsPanel): class SEQUENCER_PT_filter(SequencerButtonsPanel): __label__ = "Filter" - __idname__ = "SEQUENCER_PT_filter" def poll(self, context): if context.space_data.display_mode != 'SEQUENCER': @@ -500,7 +495,6 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel): class SEQUENCER_PT_proxy(SequencerButtonsPanel): __label__ = "Proxy" - __idname__ = "SEQUENCER_PT_proxy" def poll(self, context): if context.space_data.display_mode != 'SEQUENCER': @@ -533,7 +527,6 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel): class SEQUENCER_PT_view(SequencerButtonsPanel_Output): __label__ = "View Settings" - __idname__ = "SEQUENCER_PT_view" def draw(self, context): st = context.space_data @@ -560,4 +553,3 @@ bpy.types.register(SEQUENCER_PT_filter) bpy.types.register(SEQUENCER_PT_proxy) bpy.types.register(SEQUENCER_PT_view) # view panels - diff --git a/release/ui/space_text.py b/release/ui/space_text.py index 51f7f6447ae..1b4fcea24b6 100644 --- a/release/ui/space_text.py +++ b/release/ui/space_text.py @@ -3,7 +3,6 @@ import bpy class TEXT_HT_header(bpy.types.Header): __space_type__ = "TEXT_EDITOR" - __idname__ = "TEXT_HT_header" def draw(self, context): st = context.space_data From 4741137fc9639a3902a0a7bbbebb7256841ac027 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 26 Jul 2009 18:18:14 +0000 Subject: [PATCH 398/512] misc py/rna changes - running a script from a file now uses the PyRun_File(FILE *, ...) rather then PyRun_String("exec(open(r'/somepath.py').read())"...), aparently FILE struct on windows could not ensured to be the same between blender and python, since we use our own python on windows now it should be ok. - generating docs works again (operator update for py style syntax broke them) - python operator doc strings was being overwritten - added rna property attribute "default" to get the default value of a property, not working on arrays currently because variable length arrays are not supported. --- release/ui/bpy_ops.py | 20 +++- source/blender/blenkernel/intern/screen.c | 2 +- source/blender/makesrna/intern/rna_rna.c | 95 +++++++++++++++++++ source/blender/python/epy_doc_gen.py | 23 ++--- source/blender/python/intern/bpy_interface.c | 14 ++- source/blender/python/intern/bpy_operator.c | 34 ++++++- .../blender/python/intern/bpy_operator_wrap.c | 4 +- source/blender/python/intern/bpy_rna.c | 54 +++++------ .../windowmanager/intern/wm_operators.c | 4 +- 9 files changed, 196 insertions(+), 54 deletions(-) diff --git a/release/ui/bpy_ops.py b/release/ui/bpy_ops.py index aaf9edc082e..aa9bfb460f0 100644 --- a/release/ui/bpy_ops.py +++ b/release/ui/bpy_ops.py @@ -3,6 +3,7 @@ from bpy.__ops__ import add as op_add from bpy.__ops__ import remove as op_remove from bpy.__ops__ import dir as op_dir from bpy.__ops__ import call as op_call +from bpy.__ops__ import get_rna as op_get_rna class bpy_ops(object): ''' @@ -89,13 +90,22 @@ class bpy_ops_submodule_op(object): self.module = module self.func = func - def __call__(self, **kw): + def idname(self): # submod.foo -> SUBMOD_OT_foo - id_name = self.module.upper() + '_OT_' + self.func - - # Get the operator from - return op_call(id_name, kw) + return self.module.upper() + '_OT_' + self.func + + def __call__(self, **kw): + # Get the operator from blender + return op_call(self.idname(), kw) + + def get_rna(self): + ''' + currently only used for '__rna__' + ''' + return op_get_rna(self.idname()) + + def __repr__(self): return "" % (self.module, self.func, id(self)) diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 524120bf014..c1f621274c0 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -112,7 +112,7 @@ ARegionType *BKE_regiontype_from_id(SpaceType *st, int regionid) if(art->regionid==regionid) return art; - printf("Error, region type missing in %s\n", st->name); + printf("Error, region type missing in - name:\"%s\", id:%d\n", st->name, st->spaceid); return st->regiontypes.first; } diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index aeaedd6f81d..385c7f5b2b1 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -432,6 +432,19 @@ static int rna_Property_registered_optional_get(PointerRNA *ptr) return prop->flag & PROP_REGISTER_OPTIONAL; } +static int rna_BoolProperty_default_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + return ((BooleanPropertyRNA*)prop)->defaultvalue; +} + +static int rna_IntProperty_default_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + return ((IntPropertyRNA*)prop)->defaultvalue; +} static int rna_IntProperty_hard_min_get(PointerRNA *ptr) { PropertyRNA *prop= (PropertyRNA*)ptr->data; @@ -467,6 +480,12 @@ static int rna_IntProperty_step_get(PointerRNA *ptr) return ((IntPropertyRNA*)prop)->step; } +static float rna_FloatProperty_default_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + return ((FloatPropertyRNA*)prop)->defaultvalue; +} static float rna_FloatProperty_hard_min_get(PointerRNA *ptr) { PropertyRNA *prop= (PropertyRNA*)ptr->data; @@ -509,6 +528,19 @@ static int rna_FloatProperty_precision_get(PointerRNA *ptr) return ((FloatPropertyRNA*)prop)->precision; } +static void rna_StringProperty_default_get(PointerRNA *ptr, char *value) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + strcpy(value, ((StringPropertyRNA*)prop)->defaultvalue); +} +static int rna_StringProperty_default_length(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + return strlen(((StringPropertyRNA*)prop)->defaultvalue); +} + static int rna_StringProperty_max_length_get(PointerRNA *ptr) { PropertyRNA *prop= (PropertyRNA*)ptr->data; @@ -516,6 +548,28 @@ static int rna_StringProperty_max_length_get(PointerRNA *ptr) return ((StringPropertyRNA*)prop)->maxlength; } +static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + EnumPropertyRNA *eprop; + + rna_idproperty_check(&prop, ptr); + eprop= (EnumPropertyRNA*)prop; + + if(eprop->itemf==NULL || eprop->itemf==rna_EnumProperty_default_itemf) + return eprop->item; + + return eprop->itemf(C, ptr, free); +} + +/* XXX - not sore this is needed? */ +static int rna_EnumProperty_default_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + rna_idproperty_check(&prop, ptr); + return ((EnumPropertyRNA*)prop)->defaultvalue; +} + static int rna_enum_check_separator(CollectionPropertyIterator *iter, void *data) { EnumPropertyItem *item= (EnumPropertyItem*)data; @@ -816,6 +870,31 @@ static void rna_def_number_property(StructRNA *srna, PropertyType type) { PropertyRNA *prop; + prop= RNA_def_property(srna, "default", type, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Default", "Default value for this number"); + + switch(type) { + case PROP_BOOLEAN: + RNA_def_property_boolean_funcs(prop, "rna_BoolProperty_default_get", NULL); + break; + case PROP_INT: + RNA_def_property_int_funcs(prop, "rna_IntProperty_default_get", NULL, NULL); + break; + case PROP_FLOAT: + RNA_def_property_float_funcs(prop, "rna_FloatProperty_default_get", NULL, NULL); + break; + } + + +#if 0 // XXX - Variable length arrays + prop= RNA_def_property(srna, "default_array", type, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + if(type == PROP_INT) RNA_def_property_int_funcs(prop, "rna_IntProperty_default_array_get", NULL, NULL); + else RNA_def_property_float_funcs(prop, "rna_FloatProperty_default_array_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Default", "Default value for this number"); +#endif + prop= RNA_def_property(srna, "array_length", PROP_INT, PROP_UNSIGNED); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_int_funcs(prop, "rna_Property_array_length_get", NULL, NULL); @@ -866,6 +945,11 @@ static void rna_def_string_property(StructRNA *srna) { PropertyRNA *prop; + prop= RNA_def_property(srna, "default", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_string_funcs(prop, "rna_StringProperty_default_get", "rna_StringProperty_default_length", NULL); + RNA_def_property_ui_text(prop, "Default", "string default value."); + prop= RNA_def_property(srna, "max_length", PROP_INT, PROP_UNSIGNED); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_int_funcs(prop, "rna_StringProperty_max_length_get", NULL, NULL); @@ -876,6 +960,17 @@ static void rna_def_enum_property(BlenderRNA *brna, StructRNA *srna) { PropertyRNA *prop; + /* the itemf func is used instead, keep blender happy */ + static EnumPropertyItem default_dummy_items[] = { + {PROP_NONE, "DUMMY", 0, "Dummy", ""}, + {0, NULL, 0, NULL, NULL}}; + + prop= RNA_def_property(srna, "default", PROP_ENUM, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_enum_items(prop, default_dummy_items); + RNA_def_property_enum_funcs(prop, "rna_EnumProperty_default_get", NULL, "rna_EnumProperty_default_itemf"); + RNA_def_property_ui_text(prop, "Default", "Default value for this enum"); + prop= RNA_def_property(srna, "items", PROP_COLLECTION, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_struct_type(prop, "EnumPropertyItem"); diff --git a/source/blender/python/epy_doc_gen.py b/source/blender/python/epy_doc_gen.py index 9f3efc916bf..57c67233bf2 100644 --- a/source/blender/python/epy_doc_gen.py +++ b/source/blender/python/epy_doc_gen.py @@ -503,20 +503,21 @@ def rna2epy(target_path): def op2epy(target_path): out = open(target_path, 'w') - operators = dir(bpy.ops) - operators.remove('add') - operators.remove('remove') - operators.sort() + op_mods = dir(bpy.ops) + op_mods.remove('add') + op_mods.remove('remove') - for op in operators: - - if op.startswith('__'): + for op_mod_name in sorted(op_mods): + if op_mod_name.startswith('__'): continue + + op_mod = getattr(bpy.ops, op_mod_name) - # rna = getattr(bpy.types, op).__rna__ - rna = bpy.ops.__rna__(op) - - write_func(rna, '', out, 'OPERATOR') + operators = dir(op_mod) + for op in sorted(operators): + # rna = getattr(bpy.types, op).__rna__ + rna = getattr(op_mod, op).get_rna() + write_func(rna, '', out, 'OPERATOR') out.write('\n') out.close() diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index ef2406d446c..473b3d42095 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -260,10 +260,16 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc py_result = PyEval_EvalCode( text->compiled, py_dict, py_dict ); } else { - char pystring[512]; - /* TODO - look into a better way to run a file */ - sprintf(pystring, "exec(open(r'%s').read())", fn); - py_result = PyRun_String( pystring, Py_file_input, py_dict, py_dict ); + FILE *fp= fopen(fn, "r"); + if(fp) { + py_result = PyRun_File(fp, fn, Py_file_input, py_dict, py_dict); + fclose(fp); + } + else { + PyErr_Format(PyExc_SystemError, "Python file \"%s\" could not be opened: %s", fn, strerror(errno)); + py_result= NULL; + } + } if (!py_result) { diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 240ce2030ba..2ffa9db4027 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -38,6 +38,7 @@ #include "MEM_guardedalloc.h" #include "BKE_report.h" +#include "BKE_utildefines.h" /* 'self' stores the operator string */ @@ -77,14 +78,14 @@ static PyObject *pyop_call( PyObject * self, PyObject * args) } - ot= WM_operatortype_find(opname, 1); + ot= WM_operatortype_find(opname, TRUE); if (ot == NULL) { PyErr_Format( PyExc_SystemError, "bpy.__ops__.call: operator \"%s\"could not be found", opname); return NULL; } - if(ot->poll && (ot->poll(C) == 0)) { + if(ot->poll && (ot->poll(C) == FALSE)) { PyErr_SetString( PyExc_SystemError, "bpy.__ops__.call: operator poll() function failed, context is incorrect"); return NULL; } @@ -146,10 +147,38 @@ static PyObject *pyop_dir(PyObject *self) return list; } +static PyObject *pyop_getrna(PyObject *self, PyObject *value) +{ + wmOperatorType *ot; + PointerRNA ptr; + char *opname= _PyUnicode_AsString(value); + BPy_StructRNA *pyrna= NULL; + + if(opname==NULL) { + PyErr_SetString(PyExc_TypeError, "bpy.__ops__.get_rna() expects a string argument"); + return NULL; + } + ot= WM_operatortype_find(opname, TRUE); + if(ot==NULL) { + PyErr_Format(PyExc_KeyError, "bpy.__ops__.get_rna(\"%s\") not found", opname); + return NULL; + } + + /* type */ + //RNA_pointer_create(NULL, &RNA_Struct, ot->srna, &ptr); + + /* XXX - should call WM_operator_properties_free */ + WM_operator_properties_create(&ptr, ot->idname); + pyrna= (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ptr); + pyrna->freeptr= TRUE; + return (PyObject *)pyrna; +} + PyObject *BPY_operator_module( void ) { static PyMethodDef pyop_call_meth = {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL}; static PyMethodDef pyop_dir_meth = {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL}; + static PyMethodDef pyop_getrna_meth = {"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL}; static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL}; static PyMethodDef pyop_remove_meth = {"remove", (PyCFunction) PYOP_wrap_remove, METH_O, NULL}; @@ -158,6 +187,7 @@ PyObject *BPY_operator_module( void ) PyModule_AddObject( submodule, "call", PyCFunction_New(&pyop_call_meth, NULL) ); PyModule_AddObject( submodule, "dir", PyCFunction_New(&pyop_dir_meth, NULL) ); + PyModule_AddObject( submodule, "get_rna", PyCFunction_New(&pyop_getrna_meth, NULL) ); PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) ); PyModule_AddObject( submodule, "remove", PyCFunction_New(&pyop_remove_meth, NULL) ); diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index 02d721739e7..080d2e8ce6a 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -265,8 +265,8 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) } item= PyObject_GetAttrString(py_class, PYOP_ATTR_DESCRIPTION); - ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):""; - Py_DECREF(item); + ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):"undocumented python operator"; + Py_XDECREF(item); /* api callbacks, detailed checks dont on adding */ if (PyObject_HasAttrString(py_class, "invoke")) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index e83bb68a387..c76cb252f2c 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -171,7 +171,7 @@ static PyObject *pyrna_struct_repr( BPy_StructRNA * self ) char *name; /* print name if available */ - name= RNA_struct_name_get_alloc(&self->ptr, NULL, 0); + name= RNA_struct_name_get_alloc(&self->ptr, NULL, FALSE); if(name) { pyob= PyUnicode_FromFormat( "[BPy_StructRNA \"%.200s\" -> \"%.200s\"]", RNA_struct_identifier(self->ptr.type), name); MEM_freeN(name); @@ -190,7 +190,7 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA * self ) /* if a pointer, try to print name of pointer target too */ if(RNA_property_type(self->prop) == PROP_POINTER) { ptr= RNA_property_pointer_get(&self->ptr, self->prop); - name= RNA_struct_name_get_alloc(&ptr, NULL, 0); + name= RNA_struct_name_get_alloc(&ptr, NULL, FALSE); if(name) { pyob= PyUnicode_FromFormat( "[BPy_PropertyRNA \"%.200s\" -> \"%.200s\" -> \"%.200s\" ]", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name); @@ -225,7 +225,7 @@ static char *pyrna_enum_as_string(PointerRNA *ptr, PropertyRNA *prop) { EnumPropertyItem *item; char *result; - int free= 0; + int free= FALSE; RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); if(item) { @@ -258,31 +258,31 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) switch(RNA_property_subtype(prop)) { case PROP_VECTOR: if(len>=2 && len <= 4) { - PyObject *vec_cb= newVectorObject_cb(ret, len, mathutils_rna_array_cb_index, 0); + PyObject *vec_cb= newVectorObject_cb(ret, len, mathutils_rna_array_cb_index, FALSE); Py_DECREF(ret); /* the vector owns now */ ret= vec_cb; /* return the vector instead */ } break; case PROP_MATRIX: if(len==16) { - PyObject *mat_cb= newMatrixObject_cb(ret, 4,4, mathutils_rna_matrix_cb_index, 0); + PyObject *mat_cb= newMatrixObject_cb(ret, 4,4, mathutils_rna_matrix_cb_index, FALSE); Py_DECREF(ret); /* the matrix owns now */ ret= mat_cb; /* return the matrix instead */ } else if (len==9) { - PyObject *mat_cb= newMatrixObject_cb(ret, 3,3, mathutils_rna_matrix_cb_index, 0); + PyObject *mat_cb= newMatrixObject_cb(ret, 3,3, mathutils_rna_matrix_cb_index, FALSE); Py_DECREF(ret); /* the matrix owns now */ ret= mat_cb; /* return the matrix instead */ } break; case PROP_ROTATION: if(len==3) { /* euler */ - PyObject *eul_cb= newEulerObject_cb(ret, mathutils_rna_array_cb_index, 0); + PyObject *eul_cb= newEulerObject_cb(ret, mathutils_rna_array_cb_index, FALSE); Py_DECREF(ret); /* the matrix owns now */ ret= eul_cb; /* return the matrix instead */ } else if (len==4) { - PyObject *quat_cb= newQuaternionObject_cb(ret, mathutils_rna_array_cb_index, 0); + PyObject *quat_cb= newQuaternionObject_cb(ret, mathutils_rna_array_cb_index, FALSE); Py_DECREF(ret); /* the matrix owns now */ ret= quat_cb; /* return the matrix instead */ } @@ -325,7 +325,7 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) ret = PyUnicode_FromString( identifier ); } else { EnumPropertyItem *item; - int free= 0; + int free= FALSE; /* don't throw error here, can't trust blender 100% to give the * right values, python code should not generate error for that */ @@ -673,7 +673,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v return -1; } else { BPy_StructRNA *param= (BPy_StructRNA*)value; - int raise_error= 0; + int raise_error= FALSE; if(data) { int flag = RNA_property_flag(prop); @@ -690,7 +690,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v *((void**)data)= param->ptr.data; } else { - raise_error= 1; + raise_error= TRUE; } } else { @@ -1465,13 +1465,13 @@ static void foreach_attr_type( BPy_PropertyRNA *self, char *attr, PropertyRNA *prop; *raw_type= -1; *attr_tot= 0; - *attr_signed= 0; + *attr_signed= FALSE; RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { prop = RNA_struct_find_property(&itemptr, attr); *raw_type= RNA_property_raw_type(prop); *attr_tot = RNA_property_array_length(prop); - *attr_signed= (RNA_property_subtype(prop)==PROP_UNSIGNED) ? 0:1; + *attr_signed= (RNA_property_subtype(prop)==PROP_UNSIGNED) ? FALSE:TRUE; break; } RNA_PROP_END; @@ -1489,7 +1489,7 @@ static int foreach_parse_args( int target_tot; #endif - *size= *raw_type= *attr_tot= *attr_signed= 0; + *size= *raw_type= *attr_tot= *attr_signed= FALSE; if(!PyArg_ParseTuple(args, "sO", attr, seq) || (!PySequence_Check(*seq) && PyObject_CheckBuffer(*seq))) { PyErr_SetString( PyExc_TypeError, "foreach_get(attr, sequence) expects a string and a sequence" ); @@ -1569,7 +1569,7 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set) if(set) { /* get the array from python */ - buffer_is_compat = 0; + buffer_is_compat = FALSE; if(PyObject_CheckBuffer(seq)) { Py_buffer buf; PyObject_GetBuffer(seq, &buf, PyBUF_SIMPLE | PyBUF_FORMAT); @@ -1616,7 +1616,7 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set) } } else { - buffer_is_compat = 0; + buffer_is_compat = FALSE; if(PyObject_CheckBuffer(seq)) { Py_buffer buf; PyObject_GetBuffer(seq, &buf, PyBUF_SIMPLE | PyBUF_FORMAT); @@ -1962,14 +1962,14 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) item= PyTuple_GET_ITEM(args, i); i++; - kw_arg= 0; + kw_arg= FALSE; } else if (kw != NULL) { item= PyDict_GetItemString(kw, parm_id); /* borrow ref */ if(item) kw_tot++; /* make sure invalid keywords are not given */ - kw_arg= 1; + kw_arg= TRUE; } if (item==NULL) { @@ -1990,7 +1990,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) char error_prefix[512]; PyErr_Clear(); /* re-raise */ - if(kw_arg) + if(kw_arg==TRUE) snprintf(error_prefix, sizeof(error_prefix), "%s.%s(): error with keyword argument \"%s\" - ", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), parm_id); else snprintf(error_prefix, sizeof(error_prefix), "%s.%s(): error with argument %d, \"%s\" - ", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), i, parm_id); @@ -2013,12 +2013,12 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) DynStr *good_args= BLI_dynstr_new(); char *arg_name, *bad_args_str, *good_args_str; - int found= 0, first=1; + int found= FALSE, first= TRUE; while (PyDict_Next(kw, &pos, &key, &value)) { arg_name= _PyUnicode_AsString(key); - found= 0; + found= FALSE; if(arg_name==NULL) { /* unlikely the argname is not a string but ignore if it is*/ PyErr_Clear(); @@ -2029,28 +2029,28 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) for(; iter.valid; RNA_parameter_list_next(&iter)) { parm= iter.parm; if (strcmp(arg_name, RNA_property_identifier(parm))==0) { - found= 1; + found= TRUE; break; } } RNA_parameter_list_end(&iter); - if(!found) { + if(found==FALSE) { BLI_dynstr_appendf(bad_args, first ? "%s" : ", %s", arg_name); - first= 0; + first= FALSE; } } } /* list good args */ - first= 1; + first= TRUE; RNA_parameter_list_begin(&parms, &iter); for(; iter.valid; RNA_parameter_list_next(&iter)) { parm= iter.parm; BLI_dynstr_appendf(good_args, first ? "%s" : ", %s", RNA_property_identifier(parm)); - first= 0; + first= FALSE; } RNA_parameter_list_end(&iter); @@ -2403,7 +2403,7 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr ) } pyrna->ptr= *ptr; - pyrna->freeptr= 0; + pyrna->freeptr= FALSE; // PyObSpit("NewStructRNA: ", (PyObject *)pyrna); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 6c90926d545..39114dcfe13 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -137,7 +137,7 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType*)) ot->name= dummy_name; } - RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:""); // XXX All ops should have a description but for now allow them not to. + RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:"(undocumented operator)"); // XXX All ops should have a description but for now allow them not to. RNA_def_struct_identifier(ot->srna, ot->idname); BLI_addtail(&global_ops, ot); } @@ -149,7 +149,7 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType*, void*), void *us ot= MEM_callocN(sizeof(wmOperatorType), "operatortype"); ot->srna= RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); opfunc(ot, userdata); - RNA_def_struct_ui_text(ot->srna, ot->name, "DOC_BROKEN"); /* TODO - add a discription to wmOperatorType? */ + RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:"(undocumented operator)"); RNA_def_struct_identifier(ot->srna, ot->idname); BLI_addtail(&global_ops, ot); } From cbb9dfaab80ed52950a4ea4c1570370eddacfa64 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 26 Jul 2009 18:52:27 +0000 Subject: [PATCH 399/512] 2.5 file browser * operator for create new directory activated (IKEY) * operator for rename (works on files and directories so far) (CTRL+LMB) Note: fail to rename is rather quiet, no message popup, just doesn't rename if it can't. So far checked that (On Windows Vista) rename fails on system directories, which I think acceptable. Note: I removed the code that (silently) deletes file if I rename file to an existing one. Considered harmful :) --- release/ui/space_filebrowser.py | 1 + source/blender/blenlib/BLI_storage_types.h | 1 - source/blender/blenlib/intern/fileops.c | 13 ++--- source/blender/editors/space_file/file_draw.c | 53 +++++++++++++++---- .../blender/editors/space_file/file_intern.h | 1 + source/blender/editors/space_file/file_ops.c | 31 +++++++++++ source/blender/editors/space_file/filelist.c | 6 --- source/blender/editors/space_file/filelist.h | 2 +- .../blender/editors/space_file/space_file.c | 6 ++- source/blender/makesdna/DNA_space_types.h | 3 +- 10 files changed, 90 insertions(+), 27 deletions(-) diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py index 9a235516c9d..2d35616069c 100644 --- a/release/ui/space_filebrowser.py +++ b/release/ui/space_filebrowser.py @@ -48,6 +48,7 @@ class FILEBROWSER_MT_directory(bpy.types.Menu): def draw(self, context): layout = self.layout + layout.itemO("file.directory_new", text="New Directory", icon='ICON_NEWFOLDER') layout.itemO("file.refresh", text="Refresh", icon='ICON_FILE_REFRESH') layout.itemO("file.parent", text="Parent", icon='ICON_FILE_PARENT') diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h index cdc85d1be39..36d96f6075c 100644 --- a/source/blender/blenlib/BLI_storage_types.h +++ b/source/blender/blenlib/BLI_storage_types.h @@ -77,7 +77,6 @@ struct direntry{ #define SELECT 1 #define HIDDEN 1 #define FIRST 1 -#define ACTIVE 2 #define DESELECT 0 #define NOT_YET 0 #define VISIBLE 0 diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 42fd75a543e..b9c0dd65ede 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -311,10 +311,10 @@ void BLI_recurdir_fileops(char *dirname) { int BLI_rename(char *from, char *to) { if (!BLI_exists(from)) return 0; - /* make sure the filenames are different (case insensitive) before removing */ - if (BLI_exists(to) && BLI_strcasecmp(from, to)) - if(BLI_delete(to, 0, 0)) return 1; - + /* refuse to rename if file already exists */ + if (BLI_exists(to)) + return 1; + return rename(from, to); } @@ -391,8 +391,9 @@ void BLI_recurdir_fileops(char *dirname) { int BLI_rename(char *from, char *to) { if (!BLI_exists(from)) return 0; - if (BLI_exists(to)) if(BLI_delete(to, 0, 0)) return 1; - + /* refuse to rename if file already exists */ + if (BLI_exists(to)) return 1; + return rename(from, to); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 780b99c3cae..f2906686db5 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -495,6 +495,25 @@ void file_draw_previews(const bContext *C, ARegion *ar) uiSetRoundBox(0); } +static void renamebutton_cb(bContext *C, void *arg1, char *oldname) +{ + char newname[FILE_MAX+12]; + char orgname[FILE_MAX+12]; + char filename[FILE_MAX+12]; + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + struct direntry *file = (struct direntry *)arg1; + + BLI_make_file_string(G.sce, orgname, sfile->params->dir, oldname); + BLI_strncpy(filename, file->relname, sizeof(filename)); + BLI_make_file_string(G.sce, newname, sfile->params->dir, filename); + + if( strcmp(orgname, newname) != 0 ) { + BLI_rename(orgname, newname); + + /* to refresh the file list, does sorting again */ + filelist_free(sfile->files); + } +} void file_draw_list(const bContext *C, ARegion *ar) { @@ -554,15 +573,17 @@ void file_draw_list(const bContext *C, ARegion *ar) sy = v2d->tot.ymax - sy; file = filelist_file(files, i); - - if (params->active_file == i) { - if (file->flags & ACTIVE) colorid= TH_HILITE; - else colorid = TH_BACK; - draw_tile(sx-2, sy-3, layout->tile_w+2, sfile->layout->tile_h+layout->tile_border_y, colorid,20); - } else if (file->flags & ACTIVE) { - colorid = TH_HILITE; - draw_tile(sx-2, sy-3, layout->tile_w+2, sfile->layout->tile_h+layout->tile_border_y, colorid,0); - } + + if (!(file->flags & EDITING)) { + if (params->active_file == i) { + if (file->flags & ACTIVE) colorid= TH_HILITE; + else colorid = TH_BACK; + draw_tile(sx-2, sy-3, layout->tile_w+2, sfile->layout->tile_h+layout->tile_border_y, colorid,20); + } else if (file->flags & ACTIVE) { + colorid = TH_HILITE; + draw_tile(sx-2, sy-3, layout->tile_w+2, sfile->layout->tile_h+layout->tile_border_y, colorid,0); + } + } spos = sx; file_draw_icon(spos, sy-3, get_file_icon(file), ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH); @@ -571,7 +592,19 @@ void file_draw_list(const bContext *C, ARegion *ar) UI_ThemeColor4(TH_TEXT); sw = file_string_width(file->relname); - file_draw_string(spos, sy, file->relname, sw, layout->tile_h, FILE_SHORTEN_END); + if (file->flags & EDITING) { + uiBlock *block = uiBeginBlock(C, ar, "FileName", UI_EMBOSS); + uiBut *but = uiDefBut(block, TEX, 1, "", spos, sy-layout->tile_h-3, + layout->column_widths[COLUMN_NAME], layout->tile_h, file->relname, 1.0f, (float)FILE_MAX,0,0,""); + uiButSetRenameFunc(but, renamebutton_cb, file); + if ( 0 == uiButActiveOnly(C, block, but)) { + file->flags &= ~EDITING; + } + uiEndBlock(C, block); + uiDrawBlock(C, block); + } else { + file_draw_string(spos, sy, file->relname, sw, layout->tile_h, FILE_SHORTEN_END); + } spos += layout->column_widths[COLUMN_NAME] + 12; if (params->display == FILE_SHOWSHORT) { if (!(file->type & S_IFDIR)) { diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index dce56e05d6b..9f1e4ad0e25 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -70,6 +70,7 @@ void FILE_OT_refresh(struct wmOperatorType *ot); void FILE_OT_bookmark_toggle(struct wmOperatorType *ot); void FILE_OT_filenum(struct wmOperatorType *ot); void FILE_OT_delete(struct wmOperatorType *ot); +void FILE_OT_rename(struct wmOperatorType *ot); int file_exec(bContext *C, struct wmOperator *unused); int file_cancel_exec(bContext *C, struct wmOperator *unused); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 0bc2e310810..46bfa022914 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -870,6 +870,37 @@ void FILE_OT_filenum(struct wmOperatorType *ot) RNA_def_int(ot->srna, "increment", 1, 0, 100, "Increment", "", 0,100); } +int file_rename_exec(bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + + if(sfile->params) { + int idx = sfile->params->active_file; + int numfiles = filelist_numfiles(sfile->files); + if ( (0<=idx) && (idxfiles, idx); + file->flags |= EDITING; + } + ED_area_tag_redraw(sa); + } + + return OPERATOR_FINISHED; + +} + +void FILE_OT_rename(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Rename File or Directory"; + ot->idname= "FILE_OT_rename"; + + /* api callbacks */ + ot->exec= file_rename_exec; + ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ + +} + int file_delete_poll(bContext *C) { int poll = ED_operator_file_active(C); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 6e442c654ca..60a37aac9bd 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -113,7 +113,6 @@ typedef struct FileList int numfiles; int numfiltered; char dir[FILE_MAX]; - int has_func; short prv_w; short prv_h; short hide_dot; @@ -698,7 +697,6 @@ struct direntry * filelist_file(struct FileList* filelist, int index) return &filelist->filelist[fidx]; } - int filelist_find(struct FileList* filelist, char *file) { int index = -1; @@ -922,9 +920,5 @@ void filelist_sort(struct FileList* filelist, short sort) qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_extension); } - file= filelist->filelist; - for(num=0; numnumfiles; num++, file++) { - file->flags &= ~HILITE; - } filelist_filter(filelist); } diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index dd3c2c766c1..785e40d145c 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -54,7 +54,7 @@ void filelist_sort(struct FileList* filelist, short sort); int filelist_numfiles(struct FileList* filelist); const char * filelist_dir(struct FileList* filelist); void filelist_setdir(struct FileList* filelist, const char *dir); -struct direntry * filelist_file(struct FileList* filelist, int index); +void filelist_end_edit(struct FileList* filelist, int index); void filelist_hidedot(struct FileList* filelist, short hide); void filelist_setfilter(struct FileList* filelist, unsigned int filter); void filelist_filter(struct FileList* filelist); diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 077ad65830c..cdf65fc5af2 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -272,7 +272,7 @@ static void file_main_area_draw(const bContext *C, ARegion *ar) float col[3]; /* Needed, because filelist is not initialized on loading */ - if (!sfile->files) + if (!sfile->files || filelist_empty(sfile->files)) file_refresh(C, NULL); layout = ED_fileselect_get_layout(sfile, ar); @@ -346,6 +346,7 @@ void file_operatortypes(void) WM_operatortype_append(FILE_OT_filenum); WM_operatortype_append(FILE_OT_directory_new); WM_operatortype_append(FILE_OT_delete); + WM_operatortype_append(FILE_OT_rename); } /* NOTE: do not add .blend file reading on this level */ @@ -360,7 +361,7 @@ void file_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "FILE_OT_hidedot", HKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_previous", BACKSPACEKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_next", BACKSPACEKEY, KM_PRESS, KM_SHIFT, 0); - /* WM_keymap_add_item(keymap, "FILE_OT_directory_new", IKEY, KM_PRESS, 0, 0); */ /* XXX needs button */ + WM_keymap_add_item(keymap, "FILE_OT_directory_new", IKEY, KM_PRESS, 0, 0); /* XXX needs button */ WM_keymap_add_item(keymap, "FILE_OT_delete", XKEY, KM_PRESS, 0, 0); /* keys for main area */ @@ -368,6 +369,7 @@ void file_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "FILE_OT_select", LEFTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_border", BKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "FILE_OT_highlight", MOUSEMOVE, KM_ANY, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_loadimages", TIMER1, KM_ANY, KM_ANY, 0); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, 0, 0); diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index c61935c106f..c113f627da3 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -642,7 +642,8 @@ enum FileSortTypeE { #define FILE_BOOKMARKS 512 /* files in filesel list: 2=ACTIVE */ -#define HILITE 1 +#define EDITING 1 +#define ACTIVE 2 #define BLENDERFILE 4 #define PSXFILE 8 #define IMAGEFILE 16 From 6c0e9e21cbd0b20340a1e0bc8f7d06236f3a0909 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 26 Jul 2009 18:56:27 +0000 Subject: [PATCH 400/512] indentation error with some operators (strip the descriptions) if 0'd the exec() workaround for running python scripts incase windows devs want to test. theeth said the problem is when you compile a debug blender against a non debug python (or the ther way I assume), you can get a FILE struct mismatch. A quick way to test this on windows is to run this from the command line. blender -P somescript.py Somescript.py can be anything --- source/blender/python/epy_doc_gen.py | 10 +++++----- source/blender/python/intern/bpy_interface.c | 10 +++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/source/blender/python/epy_doc_gen.py b/source/blender/python/epy_doc_gen.py index 57c67233bf2..8630a0c8f8e 100644 --- a/source/blender/python/epy_doc_gen.py +++ b/source/blender/python/epy_doc_gen.py @@ -69,11 +69,11 @@ def write_func(rna, ident, out, func_type): # Operators and functions work differently if func_type=='OPERATOR': rna_func_name = rna_struct.identifier - rna_func_desc = rna_struct.description + rna_func_desc = rna_struct.description.strip() items = rna_struct.properties.items() else: rna_func_name = rna.identifier - rna_func_desc = rna.description + rna_func_desc = rna.description.strip() items = rna.parameters.items() for rna_prop_identifier, rna_prop in items: @@ -94,7 +94,7 @@ def write_func(rna, ident, out, func_type): array_str = get_array_str(length) kw_type_str= "@type %s: %s%s" % (rna_prop_identifier, rna_prop_type, array_str) - kw_param_str= "@param %s: %s" % (rna_prop_identifier, rna_prop.description) + kw_param_str= "@param %s: %s" % (rna_prop_identifier, rna_prop.description.strip()) kw_param_set = False if func_type=='OPERATOR': @@ -205,7 +205,7 @@ def rna2epy(target_path): out.write(ident+ '\t"""\n') title = 'The %s Object' % rna_struct.name - description = rna_struct.description + description = rna_struct.description.strip() out.write(ident+ '\t%s\n' % title) out.write(ident+ '\t%s\n' % ('=' * len(title))) out.write(ident+ '\t\t%s\n' % description) @@ -238,7 +238,7 @@ def rna2epy(target_path): if rna_prop_identifier=='rna_type': continue - rna_desc = rna_prop.description + rna_desc = rna_prop.description.strip() if rna_desc: rna_words.update(rna_desc.split()) if not rna_desc: rna_desc = rna_prop.name diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 473b3d42095..707c5769357 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -260,6 +260,14 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc py_result = PyEval_EvalCode( text->compiled, py_dict, py_dict ); } else { +#if 0 + char *pystring; + pystring= malloc(strlen(fn) + 32); + pystring[0]= '\0'; + sprintf(pystring, "exec(open(r'%s').read())", fn); + py_result = PyRun_String( pystring, Py_file_input, py_dict, py_dict ); + free(pystring); +#else FILE *fp= fopen(fn, "r"); if(fp) { py_result = PyRun_File(fp, fn, Py_file_input, py_dict, py_dict); @@ -269,7 +277,7 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc PyErr_Format(PyExc_SystemError, "Python file \"%s\" could not be opened: %s", fn, strerror(errno)); py_result= NULL; } - +#endif } if (!py_result) { From d0422dec359e7e10938bc43e93b4fa590f2de3a2 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Sun, 26 Jul 2009 19:23:07 +0000 Subject: [PATCH 401/512] 2.5 file browser * fix some notifiers, so directory is correctly shown --- source/blender/editors/space_file/file_ops.c | 35 +++++++++++-------- .../blender/editors/space_file/space_file.c | 16 +++++++-- source/blender/windowmanager/WM_types.h | 1 - 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 46bfa022914..8e64f2a594a 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -105,12 +105,18 @@ static void file_deselect_all(SpaceFile* sfile) } } -static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val) +typedef enum FileSelect { FILE_SELECT_DIR = 1, + FILE_SELECT_FILE = 2 } FileSelect; + + +static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val) { int first_file = -1; int last_file = -1; int act_file; short selecting = (val == LEFTMOUSE); + FileSelect retval = FILE_SELECT_FILE; + FileSelectParams *params = ED_fileselect_get_params(sfile); // FileLayout *layout = ED_fileselect_get_layout(sfile, ar); @@ -147,25 +153,18 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v BLI_add_slash(params->dir); params->file[0] = '\0'; file_change_dir(sfile); + retval = FILE_SELECT_DIR; } } else if (file) { if (file->relname) { BLI_strncpy(params->file, file->relname, FILE_MAXFILE); - /* XXX - if(event==MIDDLEMOUSE && filelist_gettype(sfile->files)) - imasel_execute(sfile); - */ } } - /* XXX - if(BIF_filelist_gettype(sfile->files)==FILE_MAIN) { - active_imasel_object(sfile); - } - */ } + return retval; } @@ -185,8 +184,11 @@ static int file_border_select_exec(bContext *C, wmOperator *op) BLI_isect_rcti(&(ar->v2d.mask), &rect, &rect); - file_select(sfile, ar, &rect, val ); - WM_event_add_notifier(C, NC_WINDOW, NULL); + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + } else { + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + } return OPERATOR_FINISHED; } @@ -226,8 +228,11 @@ static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) /* single select, deselect all selected first */ file_deselect_all(sfile); - file_select(sfile, ar, &rect, val ); - WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + } else { + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + } } return OPERATOR_FINISHED; } @@ -306,7 +311,7 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) file_change_dir(sfile); params->file[0] = '\0'; - WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); } return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index cdf65fc5af2..fdc3a927c5e 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -469,10 +469,19 @@ static void file_ui_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } -//static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) -//{ +static void file_ui_area_listener(ARegion *ar, wmNotifier *wmn) +{ /* context changes */ -//} + switch(wmn->category) { + case NC_FILE: + switch (wmn->data) { + case ND_FILELIST: + ED_region_tag_redraw(ar); + break; + } + break; + } +} /* only called once, from space/spacetypes.c */ void ED_spacetype_file(void) @@ -515,6 +524,7 @@ void ED_spacetype_file(void) art->regionid = RGN_TYPE_UI; art->minsizey= 60; art->keymapflag= ED_KEYMAP_UI; + art->listener= file_ui_area_listener; art->init= file_ui_area_init; art->draw= file_ui_area_draw; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index cadb9502adb..3a646c5e799 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -190,7 +190,6 @@ typedef struct wmNotifier { /* NC_FILE Filebrowser */ #define ND_PARAMS (60<<16) #define ND_FILELIST (61<<16) -#define ND_FILEDISPLAY (62<<16) /* NC_ANIMATION Animato */ #define ND_KEYFRAME_SELECT (70<<16) From 9dc819a56d72cbdbd45994472fe85d3c3dcd8338 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Jul 2009 18:17:21 +0000 Subject: [PATCH 402/512] readonly face normal option eg. me.faces[0].normal --- release/io/export_ply.py | 12 ++++-------- source/blender/makesrna/intern/rna_mesh.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/release/io/export_ply.py b/release/io/export_ply.py index 6fdf4bf41b9..3668693db16 100644 --- a/release/io/export_ply.py +++ b/release/io/export_ply.py @@ -130,12 +130,10 @@ def write(filename, scene, ob, \ smooth = f.smooth - # XXX need face normals - """ if not smooth: - normal = tuple(f.no) + normal = tuple(f.normal) normal_key = rvec3d(normal) - """ + if faceUV: uv = active_uv_layer[i] uv = uv.uv1, uv.uv2, uv.uv3, uv.uv4 # XXX - crufty :/ @@ -149,12 +147,10 @@ def write(filename, scene, ob, \ pf= ply_faces[i] for j, vidx in enumerate(f_verts): v = mesh_verts[vidx] - """ + if smooth: - normal= tuple(v.no) + normal= tuple(v.normal) normal_key = rvec3d(normal) - """ - normal_key = None # XXX if faceUV: uvcoord= uv[j][0], 1.0-uv[j][1] diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index 3a7015b65be..525814f1f5e 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -39,6 +39,7 @@ #include "DNA_scene_types.h" #include "BLI_editVert.h" +#include "BLI_arithb.h" #include "BKE_customdata.h" #include "BKE_depsgraph.h" @@ -110,6 +111,17 @@ static void rna_MEdge_crease_set(PointerRNA *ptr, float value) medge->crease= (char)(CLAMPIS(value*255.0f, 0, 255)); } +static void rna_MeshFace_normal_get(PointerRNA *ptr, float *values) +{ + Mesh *me= (Mesh*)ptr->id.data; + MFace *mface= (MFace*)ptr->data; + + if(mface->v4) + CalcNormFloat4(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, me->mvert[mface->v4].co, values); + else + CalcNormFloat(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co, values); +} + /* notice red and blue are swapped */ static void rna_MeshColor_color1_get(PointerRNA *ptr, float *values) { @@ -892,6 +904,13 @@ static void rna_def_mface(BlenderRNA *brna) prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH); RNA_def_property_ui_text(prop, "Smooth", ""); + + prop= RNA_def_property(srna, "normal", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_array(prop, 3); + RNA_def_property_range(prop, -1.0f, 1.0f); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_float_funcs(prop, "rna_MeshFace_normal_get", NULL, NULL); + RNA_def_property_ui_text(prop, "face normal", "local space unit length normal vector for this face"); } static void rna_def_mtface(BlenderRNA *brna) From 324187b61a92c0c02c0e528a3f918ea73345a28e Mon Sep 17 00:00:00 2001 From: Elia Sarti Date: Mon, 27 Jul 2009 18:26:48 +0000 Subject: [PATCH 403/512] 2.5 / Drag & Drop Small tweak for MOUSEDRAG/DROP event generation --- .../windowmanager/intern/wm_event_system.c | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 2a1fc009baa..d8e904b7c54 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1441,13 +1441,17 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) cx = abs((win->downx - event.x)); cy = abs((win->downy - event.y)); - /* probably minimum drag size should be #defined instead of hardcoded 3 */ - if (win->downstate == LEFTMOUSE && (cx > 3 || cy > 3)) { + /* probably minimum drag size should be #defined instead of hardcoded 3 + * also, cy seems always to be 6 pixels off, not sure why + */ + if ((win->downstate == LEFTMOUSE || win->downstate == MOUSEDRAG) && (cx > 3 || cy > 9)) { wmEvent dragevt= *evt; dragevt.type= MOUSEDRAG; dragevt.customdata= NULL; dragevt.customdatafree= 0; + win->downstate= MOUSEDRAG; + wm_event_add(win, &dragevt); } } @@ -1479,16 +1483,21 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) win->downx= event.x; win->downy= event.y; } - else if (win->downstate) { - wmEvent dropevt= *evt; - dropevt.type= MOUSEDROP; - dropevt.customdata= NULL; - dropevt.customdatafree= 0; + else { + short downstate= win->downstate; + win->downstate= 0; win->downx= 0; win->downy= 0; - wm_event_add(win, &dropevt); + if (downstate == MOUSEDRAG) { + wmEvent dropevt= *evt; + dropevt.type= MOUSEDROP; + dropevt.customdata= NULL; + dropevt.customdatafree= 0; + + wm_event_add(win, &dropevt); + } } break; From eb40d8ef0f49873a7f262af367decb7e652e7618 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Jul 2009 18:50:10 +0000 Subject: [PATCH 404/512] render api utility function to initialize a render layer from an image rather then loading through python. lay = result.layers[0] lay.rect_from_file("somefile.png", part.x, part.y) If the source image is bigger then the render layer x/y offsets can be used to choose the part of the image use. --- release/ui/space_view3d_toolbar.py | 3 +- source/blender/makesrna/intern/rna_render.c | 11 +++++ .../render/extern/include/RE_pipeline.h | 3 ++ .../blender/render/intern/source/pipeline.c | 42 +++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 0a9b1090f9e..7fd8d75209f 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -27,7 +27,8 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): col.itemO("object.duplicate") col.itemO("object.delete") - if context.active_object.type == 'MESH': + active_object= context.active_object + if active_object and active_object.type == 'MESH': layout.itemL(text="Shading:") col = layout.column(align=True) diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 89c48230357..7268d560282 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -297,10 +297,21 @@ static void rna_def_render_layer(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; + FunctionRNA *func; srna= RNA_def_struct(brna, "RenderLayer", NULL); RNA_def_struct_ui_text(srna, "Render Layer", ""); + func= RNA_def_function(srna, "rect_from_file", "RE_layer_rect_from_file"); + RNA_def_function_ui_description(func, "Copies the pixels of this renderlayer from an image file."); + RNA_def_function_flag(func, FUNC_USE_REPORTS); + prop= RNA_def_string(func, "filename", "", 0, "Filename", "Filename to load into this render tile, must be no smaller then the renderlayer"); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_int(func, "x", 0, 0, INT_MAX, "Offset X", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_int(func, "y", 0, 0, INT_MAX, "Offset Y", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + RNA_define_verify_sdna(0); rna_def_render_layer_common(srna, 0); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index d96054f5a76..2df3a0a4f8b 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -39,6 +39,7 @@ struct bNodeTree; struct Image; struct NodeBlurData; struct Object; +struct ReportList; struct RenderData; struct RenderEngine; struct RenderEngineType; @@ -265,6 +266,8 @@ typedef struct RenderEngine { ListBase fullresult; } RenderEngine; +void RE_layer_rect_from_file(RenderLayer *layer, struct ReportList *reports, char *filename, int x, int y); + struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h); void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result); void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 3e50ea92846..4a84b1e78b6 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -45,6 +45,7 @@ #include "BKE_main.h" #include "BKE_node.h" #include "BKE_object.h" +#include "BKE_report.h" #include "BKE_scene.h" #include "BKE_writeavi.h" /* <------ should be replaced once with generic movie module */ #include "BKE_pointcache.h" @@ -2876,6 +2877,47 @@ void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info) re->i.statstr= NULL; } +/* loads in image into a result, size must match + * x/y offsets are only used on a partial copy when dimensions dont match */ +void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *filename, int x, int y) +{ + ImBuf *ibuf = IMB_loadiffname(filename, IB_rect); + + if(ibuf && (ibuf->rect || ibuf->rect_float)) { + if (ibuf->x == layer->rectx && ibuf->y == layer->recty) { + if(ibuf->rect_float==NULL) + IMB_float_from_rect(ibuf); + + memcpy(layer->rectf, ibuf->rect_float, sizeof(float)*4*layer->rectx*layer->recty); + } else { + if ((ibuf->x - x >= layer->rectx) && (ibuf->y - y >= layer->recty)) { + ImBuf *ibuf_clip; + + if(ibuf->rect_float==NULL) + IMB_float_from_rect(ibuf); + + ibuf_clip = IMB_allocImBuf(layer->rectx, layer->recty, 32, IB_rectfloat, 0); + if(ibuf_clip) { + IMB_rectcpy(ibuf_clip, ibuf, 0,0, x,y, layer->rectx, layer->recty); + + memcpy(layer->rectf, ibuf_clip->rect_float, sizeof(float)*4*layer->rectx*layer->recty); + IMB_freeImBuf(ibuf_clip); + } + else { + BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to allocate clip buffer '%s'\n", filename); + } + } + else { + BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: incorrect dimensions for partial copy '%s'\n", filename); + } + } + + IMB_freeImBuf(ibuf); + } + else { + BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to load '%s'\n", filename); + } +} static void external_render_3d(Render *re, RenderEngineType *type) { RenderEngine engine; From a869bdc44e8591b8e45c4aa3b0fac43f5ae55a26 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Mon, 27 Jul 2009 19:06:33 +0000 Subject: [PATCH 405/512] 2.5 file browser New: * added filter and display to some operator properties. Now file browser opens showing only .blend files and folders on file->open and on image->open changes to image display and only shows images and movies. Fixes: * fixed stupid removal of wrong prototype in last commit * fixed a few warnings --- .../blender/editors/include/ED_fileselect.h | 3 +- .../blender/editors/space_file/file_panels.c | 5 +- source/blender/editors/space_file/filelist.c | 3 - source/blender/editors/space_file/filelist.h | 2 +- source/blender/editors/space_file/filesel.c | 64 ++++++++++++------- source/blender/editors/space_file/fsmenu.c | 4 +- .../blender/editors/space_file/space_file.c | 2 +- .../blender/editors/space_image/image_ops.c | 25 ++++++++ .../windowmanager/intern/wm_event_system.c | 12 +--- .../windowmanager/intern/wm_operators.c | 11 +++- 10 files changed, 88 insertions(+), 43 deletions(-) diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index 5cd789d4875..c56807ad09a 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -70,8 +70,7 @@ typedef struct FileLayout struct FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile); -short ED_fileselect_set_params(struct SpaceFile *sfile, const char *title, const char *dir, const char *path, - short flag, short display, short filter, short sort); +short ED_fileselect_set_params(struct SpaceFile *sfile); void ED_fileselect_reset_params(struct SpaceFile *sfile); diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c index 96366b9f82b..351d1619508 100644 --- a/source/blender/editors/space_file/file_panels.c +++ b/source/blender/editors/space_file/file_panels.c @@ -121,7 +121,10 @@ static void file_panel_operator(const bContext *C, Panel *pa) continue; if(strcmp(RNA_property_identifier(prop), "filename") == 0) continue; - + if(strcmp(RNA_property_identifier(prop), "display") == 0) + continue; + if(strncmp(RNA_property_identifier(prop), "filter", 6) == 0) + continue; uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0); } RNA_STRUCT_END; diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 60a37aac9bd..7ebc8c4338f 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -903,9 +903,6 @@ void filelist_swapselect(struct FileList* filelist) void filelist_sort(struct FileList* filelist, short sort) { - struct direntry *file; - int num;/* , act= 0; */ - switch(sort) { case FILE_SORT_ALPHA: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_name); diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index 785e40d145c..dd3c2c766c1 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -54,7 +54,7 @@ void filelist_sort(struct FileList* filelist, short sort); int filelist_numfiles(struct FileList* filelist); const char * filelist_dir(struct FileList* filelist); void filelist_setdir(struct FileList* filelist, const char *dir); -void filelist_end_edit(struct FileList* filelist, int index); +struct direntry * filelist_file(struct FileList* filelist, int index); void filelist_hidedot(struct FileList* filelist, short hide); void filelist_setfilter(struct FileList* filelist, unsigned int filter); void filelist_filter(struct FileList* filelist); diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index bd271c6fb4b..6263f9fe57f 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -73,6 +73,8 @@ #include "BIF_gl.h" #include "BIF_glutil.h" +#include "RNA_access.h" + #include "UI_interface.h" #include "UI_resources.h" #include "UI_view2d.h" @@ -95,41 +97,60 @@ static int fnmatch(const char *pattern, const char *string, int flags) FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile) { if (!sfile->params) { - ED_fileselect_set_params(sfile, "", NULL, "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA); + ED_fileselect_set_params(sfile); } return sfile->params; } -short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char *last_dir, const char *path, - short flag, short display, short filter, short sort) +short ED_fileselect_set_params(SpaceFile *sfile) { char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX]; FileSelectParams *params; + wmOperator *op = sfile->op; + /* create new parameters if necessary */ if (!sfile->params) { sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams"); + /* set path to most recently opened .blend */ + BLI_strncpy(sfile->params->dir, G.sce, sizeof(sfile->params->dir)); + BLI_split_dirfile(G.sce, dir, file); + BLI_strncpy(sfile->params->file, file, sizeof(sfile->params->file)); + BLI_make_file_string(G.sce, sfile->params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ } params = sfile->params; - params->flag = flag; - params->display = display; - params->filter = filter; - params->sort = sort; - - BLI_strncpy(params->title, title, sizeof(params->title)); - - if(last_dir){ - BLI_strncpy(params->dir, last_dir, sizeof(params->dir)); - } - else { - BLI_strncpy(name, path, sizeof(name)); - BLI_convertstringcode(name, G.sce); - - BLI_split_dirfile(name, dir, file); - BLI_strncpy(params->file, file, sizeof(params->file)); - BLI_strncpy(params->dir, dir, sizeof(params->dir)); - BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + /* set the parameters from the operator, if it exists */ + if (op) { + BLI_strncpy(params->title, op->type->name, sizeof(params->title)); + params->filter = 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_image") ? IMAGEFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_movie") ? MOVIEFILE : 0; + if (params->filter != 0) + params->flag |= FILE_FILTER; + + if (RNA_property_is_set(op->ptr, "display")) { + params->display= RNA_int_get(op->ptr, "display"); + } else { + params->display = FILE_SHORTDISPLAY; + } + + /* if operator has path set, use it, otherwise keep the last */ + if (RNA_property_is_set(op->ptr, "filename")) { + RNA_string_get(op->ptr, "filename", name); + BLI_convertstringcode(name, G.sce); + BLI_split_dirfile(name, dir, file); + BLI_strncpy(params->file, file, sizeof(params->file)); + BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + } + } else { + /* default values, if no operator */ + params->flag = 0; + params->display = FILE_SHORTDISPLAY; + params->filter = 0; + params->sort = FILE_SORT_ALPHA; } return 1; @@ -144,7 +165,6 @@ void ED_fileselect_reset_params(SpaceFile *sfile) int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar) { int numfiles; - short width, height; if (layout->flag & FILE_LAYOUT_HOR) { short width = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*layout->tile_border_x; diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index a87ad4c4fd8..c67a9e7a0d5 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -310,7 +310,9 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) if (line[len-1] == '\n') { line[len-1] = '\0'; } - fsmenu_insert_entry(fsmenu, category, line, 0, 1); + if (BLI_exist(line)) { + fsmenu_insert_entry(fsmenu, category, line, 0, 1); + } } } } diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index fdc3a927c5e..a03026d0184 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -195,11 +195,11 @@ static void file_refresh(const bContext *C, ScrArea *sa) params->active_file = -1; // added this so it opens nicer (ton) } filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); + filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0); if (filelist_empty(sfile->files)) { filelist_readdir(sfile->files); } - filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0); if(params->sort!=FILE_SORT_NONE) filelist_sort(sfile->files, params->sort); if (sfile->layout) sfile->layout->dirty= 1; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index fd37020c3b4..a429de65610 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -609,6 +609,10 @@ static const EnumPropertyItem image_file_type_items[] = { static void image_filesel(bContext *C, wmOperator *op, const char *path) { RNA_string_set(op->ptr, "filename", path); + RNA_boolean_set(op->ptr, "filter_image", 1); + RNA_boolean_set(op->ptr, "filter_movie", 1); + RNA_boolean_set(op->ptr, "filter_folder", 1); + RNA_enum_set(op->ptr, "display", FILE_IMGDISPLAY); WM_event_add_fileselect(C, op); } @@ -649,6 +653,14 @@ static int open_invoke(bContext *C, wmOperator *op, wmEvent *event) void IMAGE_OT_open(wmOperatorType *ot) { + PropertyRNA *prop; + + static EnumPropertyItem file_display_items[] = { + {FILE_SHORTDISPLAY, "FILE_SHORTDISPLAY", ICON_SHORTDISPLAY, "Short List", "Display files as short list"}, + {FILE_LONGDISPLAY, "FILE_LONGDISPLAY", ICON_LONGDISPLAY, "Long List", "Display files as a detailed list"}, + {FILE_IMGDISPLAY, "FILE_IMGDISPLAY", ICON_IMGDISPLAY, "Thumbnails", "Display files as thumbnails"}, + {0, NULL, 0, NULL, NULL}}; + /* identifiers */ ot->name= "Open"; ot->idname= "IMAGE_OT_open"; @@ -663,6 +675,19 @@ void IMAGE_OT_open(wmOperatorType *ot) /* properties */ RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open."); + + prop= RNA_def_boolean(ot->srna, "filter_image", 0, "Show image files", ""); + RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE); + prop= RNA_def_boolean(ot->srna, "filter_movie", 0, "Show movie files", ""); + RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE); + prop= RNA_def_boolean(ot->srna, "filter_folder", 0, "Show folders", ""); + RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); + + prop= RNA_def_property(ot->srna, "display", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "display"); + RNA_def_property_enum_items(prop, file_display_items); + RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list"); + } /******************** replace image operator ********************/ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index d8e904b7c54..e707d096a60 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -820,18 +820,8 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa /* settings for filebrowser, sfile is not operator owner but sends events */ sfile= (SpaceFile*)CTX_wm_space_data(C); sfile->op= handler->op; - - /* XXX for now take the settings from the existing (previous) filebrowser - should be stored in settings and passed via the operator */ - if (sfile->params) { - flag = sfile->params->flag; - filter = sfile->params->filter; - display = sfile->params->display; - sort = sfile->params->sort; - dir = sfile->params->dir; - } - ED_fileselect_set_params(sfile, handler->op->type->name, dir, path, flag, display, filter, sort); + ED_fileselect_set_params(sfile); dir = NULL; MEM_freeN(path); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 39114dcfe13..1f1a34ee308 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -672,6 +672,8 @@ static int wm_open_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { RNA_string_set(op->ptr, "filename", G.sce); + RNA_boolean_set(op->ptr, "filter_blender", 1); + RNA_boolean_set(op->ptr, "filter_folder", 1); WM_event_add_fileselect(C, op); return OPERATOR_RUNNING_MODAL; @@ -693,6 +695,7 @@ static int wm_open_mainfile_exec(bContext *C, wmOperator *op) static void WM_OT_open_mainfile(wmOperatorType *ot) { + PropertyRNA *prop; ot->name= "Open Blender File"; ot->idname= "WM_OT_open_mainfile"; @@ -700,7 +703,13 @@ static void WM_OT_open_mainfile(wmOperatorType *ot) ot->exec= wm_open_mainfile_exec; ot->poll= WM_operator_winactive; - RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH); + RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of blendfile to open."); + + prop= RNA_def_boolean(ot->srna, "filter_blender", 0, "Filter Blendfiles", ""); + RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE); + prop= RNA_def_boolean(ot->srna, "filter_folder", 0, "Filter Blendfiles", ""); + RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); + } static int wm_recover_last_session_exec(bContext *C, wmOperator *op) From 793324ef836f9719c8c97c51ed9e4c6a7bb68e59 Mon Sep 17 00:00:00 2001 From: Shaul Kedem Date: Mon, 27 Jul 2009 19:33:06 +0000 Subject: [PATCH 406/512] small msvc fix --- source/blender/editors/space_outliner/outliner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index b1919391c8d..589feac6226 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -561,7 +561,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i TreeElement *te; TreeStoreElem *tselem; ID *id= idv; - int a; + int a = 0; if(ELEM3(type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM)) { id= ((PointerRNA*)idv)->id.data; From 09fd0a5e48ec415a1e1ec3bbc1e062d206c8a8f3 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 27 Jul 2009 20:39:10 +0000 Subject: [PATCH 407/512] 2.5 Part 1 of Layout Code Cleanup: * Again, some layout code cleaning. * Made assignments more consistent. I started to write code guidelines in the wiki: http://wiki.blender.org/index.php/LayoutFiles-Code_Guidelines Matt/William: You are welcome to change them or add new infos, I will continue on improving them as well in the next few days. --- release/ui/buttons_data_armature.py | 110 +++++++++--------- release/ui/buttons_data_bone.py | 46 ++++---- release/ui/buttons_data_camera.py | 54 ++++----- release/ui/buttons_data_curve.py | 63 +++++----- release/ui/buttons_data_empty.py | 1 + release/ui/buttons_data_lamp.py | 171 ++++++++++++++-------------- release/ui/buttons_data_lattice.py | 2 - release/ui/buttons_data_mesh.py | 17 +-- 8 files changed, 232 insertions(+), 232 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index 34a6964ef23..6f467ee30da 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -7,7 +7,7 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.armature != None) + return (context.armature) class DATA_PT_context_arm(DataButtonsPanel): __show_header__ = False @@ -38,43 +38,40 @@ class DATA_PT_skeleton(DataButtonsPanel): arm = context.armature space = context.space_data + split = layout.split() - if arm: - split = layout.split() - - col = split.column() - col.itemR(arm, "rest_position") - - sub = col.column() - sub.itemL(text="Deform:") - sub.itemR(arm, "deform_vertexgroups", text="Vertes Groups") - sub.itemR(arm, "deform_envelope", text="Envelopes") - sub.itemR(arm, "deform_quaternion", text="Quaternion") - sub.itemR(arm, "deform_bbone_rest", text="B-Bones Rest") - #sub.itemR(arm, "x_axis_mirror") - #sub.itemR(arm, "auto_ik") + col = split.column() + col.itemR(arm, "rest_position") + col.itemL(text="Deform:") + col.itemR(arm, "deform_vertexgroups", text="Vertes Groups") + col.itemR(arm, "deform_envelope", text="Envelopes") + col.itemR(arm, "deform_quaternion", text="Quaternion") + col.itemR(arm, "deform_bbone_rest", text="B-Bones Rest") + #col.itemR(arm, "x_axis_mirror") + #col.itemR(arm, "auto_ik") - sub = split.column() - sub.itemL(text="Layers:") - sub.template_layers(arm, "layer") - sub.itemL(text="Protected Layers:") - sub.template_layers(arm, "layer_protection") + col = split.column() + col.itemL(text="Layers:") + col.template_layers(arm, "layer") + col.itemL(text="Protected Layers:") + col.template_layers(arm, "layer_protection") class DATA_PT_display(DataButtonsPanel): __label__ = "Display" def draw(self, context): layout = self.layout + arm = context.armature layout.row().itemR(arm, "drawtype", expand=True) - sub = layout.column_flow() - sub.itemR(arm, "draw_names", text="Names") - sub.itemR(arm, "draw_axes", text="Axes") - sub.itemR(arm, "draw_custom_bone_shapes", text="Shapes") - sub.itemR(arm, "draw_group_colors", text="Colors") - sub.itemR(arm, "delay_deform", text="Delay Refresh") + flow = layout.column_flow() + flow.itemR(arm, "draw_names", text="Names") + flow.itemR(arm, "draw_axes", text="Axes") + flow.itemR(arm, "draw_custom_bone_shapes", text="Shapes") + flow.itemR(arm, "draw_group_colors", text="Colors") + flow.itemR(arm, "delay_deform", text="Delay Refresh") class DATA_PT_bone_groups(DataButtonsPanel): __label__ = "Bone Groups" @@ -84,11 +81,11 @@ class DATA_PT_bone_groups(DataButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object pose= ob.pose row = layout.row() - row.template_list(pose, "bone_groups", pose, "active_bone_group_index") col = row.column(align=True) @@ -109,7 +106,7 @@ class DATA_PT_bone_groups(DataButtonsPanel): split.template_triColorSet(group, "colors") row = layout.row(align=True) - row.active= (ob.proxy == None) + row.active = (ob.proxy == None) row.itemO("pose.group_assign", text="Assign") row.itemO("pose.group_remove", text="Remove") #row.itemO("pose.bone_group_remove_from", text="Remove") @@ -121,52 +118,55 @@ class DATA_PT_paths(DataButtonsPanel): def draw(self, context): layout = self.layout + arm = context.armature split = layout.split() - sub = split.column() - sub.itemR(arm, "paths_show_around_current_frame", text="Around Frame") - col = sub.column(align=True) - if (arm.paths_show_around_current_frame): - col.itemR(arm, "path_before_current", text="Before") - col.itemR(arm, "path_after_current", text="After") - else: - col.itemR(arm, "path_start_frame", text="Start") - col.itemR(arm, "path_end_frame", text="End") - - col.itemR(arm, "path_size", text="Step") - sub.itemR(arm, "paths_calculate_head_positions", text="Head") + col = split.column() + col.itemR(arm, "paths_show_around_current_frame", text="Around Frame") - sub = split.column() - sub.itemL(text="Show:") - sub.itemR(arm, "paths_show_frame_numbers", text="Frame Numbers") - sub.itemR(arm, "paths_highlight_keyframes", text="Keyframes") - sub.itemR(arm, "paths_show_keyframe_numbers", text="Keyframe Numbers") + sub = col.column(align=True) + if (arm.paths_show_around_current_frame): + sub.itemR(arm, "path_before_current", text="Before") + sub.itemR(arm, "path_after_current", text="After") + else: + sub.itemR(arm, "path_start_frame", text="Start") + sub.itemR(arm, "path_end_frame", text="End") + + sub.itemR(arm, "path_size", text="Step") + col.itemR(arm, "paths_calculate_head_positions", text="Head") + + col = split.column() + col.itemL(text="Show:") + col.itemR(arm, "paths_show_frame_numbers", text="Frame Numbers") + col.itemR(arm, "paths_highlight_keyframes", text="Keyframes") + col.itemR(arm, "paths_show_keyframe_numbers", text="Keyframe Numbers") class DATA_PT_ghost(DataButtonsPanel): __label__ = "Ghost" def draw(self, context): layout = self.layout + arm = context.armature split = layout.split() - sub = split.column() - sub.itemR(arm, "ghost_type", text="Scope") + col = split.column() + col.itemR(arm, "ghost_type", text="Scope") - col = sub.column(align=True) + sub = col.column(align=True) if arm.ghost_type == 'RANGE': - col.itemR(arm, "ghost_start_frame", text="Start") - col.itemR(arm, "ghost_end_frame", text="End") - col.itemR(arm, "ghost_size", text="Step") + sub.itemR(arm, "ghost_start_frame", text="Start") + sub.itemR(arm, "ghost_end_frame", text="End") + sub.itemR(arm, "ghost_size", text="Step") elif arm.ghost_type == 'CURRENT_FRAME': - col.itemR(arm, "ghost_step", text="Range") - col.itemR(arm, "ghost_size", text="Step") + sub.itemR(arm, "ghost_step", text="Range") + sub.itemR(arm, "ghost_size", text="Step") - sub = split.column() - sub.itemR(arm, "ghost_only_selected", text="Selected Only") + col = split.column() + col.itemR(arm, "ghost_only_selected", text="Selected Only") bpy.types.register(DATA_PT_context_arm) bpy.types.register(DATA_PT_skeleton) diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index 0f072b3607d..e05b64e5e11 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -14,6 +14,7 @@ class BONE_PT_context_bone(BoneButtonsPanel): def draw(self, context): layout = self.layout + bone = context.bone if not bone: bone = context.edit_bone @@ -27,9 +28,9 @@ class BONE_PT_transform(BoneButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object bone = context.bone - if not bone: bone = context.edit_bone @@ -43,7 +44,7 @@ class BONE_PT_transform(BoneButtonsPanel): sub.itemR(bone, "roll", text="") sub.itemL() sub.itemR(bone, "locked") - sub.itemS() + else: pchan = ob.pose.pose_channels[context.bone.name] @@ -70,9 +71,9 @@ class BONE_PT_transform(BoneButtonsPanel): class BONE_PT_bone(BoneButtonsPanel): __label__ = "Bone" - def draw(self, context): layout = self.layout + bone = context.bone arm = context.armature if not bone: @@ -80,28 +81,27 @@ class BONE_PT_bone(BoneButtonsPanel): split = layout.split() - sub = split.column() - sub.itemL(text="Parent:") + col = split.column() + col.itemL(text="Parent:") if context.bone: - sub.itemR(bone, "parent", text="") + col.itemR(bone, "parent", text="") else: - sub.item_pointerR(bone, "parent", arm, "edit_bones", text="") - row = sub.row() - row.itemR(bone, "connected") + col.item_pointerR(bone, "parent", arm, "edit_bones", text="") + + row = col.row() row.active = bone.parent != None + row.itemR(bone, "connected") - sub.itemL(text="Layers:") - sub.template_layers(bone, "layer") + col.itemL(text="Layers:") + col.template_layers(bone, "layer") - sub = split.column() - - sub.itemL(text="Inherit:") - sub.itemR(bone, "hinge", text="Rotation") - sub.itemR(bone, "inherit_scale", text="Scale") - - sub.itemL(text="Display:") - sub.itemR(bone, "draw_wire", text="Wireframe") - sub.itemR(bone, "hidden", text="Hide") + col = split.column() + col.itemL(text="Inherit:") + col.itemR(bone, "hinge", text="Rotation") + col.itemR(bone, "inherit_scale", text="Scale") + col.itemL(text="Display:") + col.itemR(bone, "draw_wire", text="Wireframe") + col.itemR(bone, "hidden", text="Hide") class BONE_PT_inverse_kinematics(BoneButtonsPanel): __label__ = "Inverse Kinematics" @@ -119,6 +119,7 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object bone = context.bone pchan = ob.pose.pose_channels[context.bone.name] @@ -178,6 +179,7 @@ class BONE_PT_deform(BoneButtonsPanel): def draw_header(self, context): layout = self.layout + bone = context.bone if not bone: bone = context.edit_bone @@ -186,6 +188,7 @@ class BONE_PT_deform(BoneButtonsPanel): def draw(self, context): layout = self.layout + bone = context.bone if not bone: bone = context.edit_bone @@ -196,6 +199,7 @@ class BONE_PT_deform(BoneButtonsPanel): col = split.column() col.itemL(text="Envelope:") + sub = col.column(align=True) sub.itemR(bone, "envelope_distance", text="Distance") sub.itemR(bone, "envelope_weight", text="Weight") @@ -208,6 +212,7 @@ class BONE_PT_deform(BoneButtonsPanel): col = split.column() col.itemL(text="Curved Bones:") + sub = col.column(align=True) sub.itemR(bone, "bbone_segments", text="Segments") sub.itemR(bone, "bbone_in", text="Ease In") @@ -221,4 +226,3 @@ bpy.types.register(BONE_PT_transform) bpy.types.register(BONE_PT_bone) bpy.types.register(BONE_PT_deform) bpy.types.register(BONE_PT_inverse_kinematics) - diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py index 595ac01e5bd..811858e3627 100644 --- a/release/ui/buttons_data_camera.py +++ b/release/ui/buttons_data_camera.py @@ -7,7 +7,7 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.camera != None) + return (context.camera) class DATA_PT_context_camera(DataButtonsPanel): __show_header__ = False @@ -49,53 +49,49 @@ class DATA_PT_camera(DataButtonsPanel): elif cam.type == 'ORTHO': row.itemR(cam, "ortho_scale") - split = layout.split() - split.itemR(cam, "panorama"); - split.itemL() + layout.itemR(cam, "panorama"); split = layout.split() - sub = split.column(align=True) - sub.itemL(text="Shift:") - sub.itemR(cam, "shift_x", text="X") - sub.itemR(cam, "shift_y", text="Y") + col = split.column(align=True) + col.itemL(text="Shift:") + col.itemR(cam, "shift_x", text="X") + col.itemR(cam, "shift_y", text="Y") - sub = split.column(align=True) - sub.itemL(text="Clipping:") - sub.itemR(cam, "clip_start", text="Start") - sub.itemR(cam, "clip_end", text="End") + col = split.column(align=True) + col.itemL(text="Clipping:") + col.itemR(cam, "clip_start", text="Start") + col.itemR(cam, "clip_end", text="End") - split = layout.split() - col = split.column() - col.itemL(text="Depth of Field:") - col.itemR(cam, "dof_object", text="") - col = split.column() - col.itemL() - col.itemR(cam, "dof_distance", text="Distance") + layout.itemL(text="Depth of Field:") + + row = layout.row() + row.itemR(cam, "dof_object", text="") + row.itemR(cam, "dof_distance", text="Distance") class DATA_PT_camera_display(DataButtonsPanel): __label__ = "Display" def draw(self, context): - cam = context.camera layout = self.layout + + cam = context.camera split = layout.split() - sub = split.column() - sub.itemR(cam, "show_limits", text="Limits") - sub.itemR(cam, "show_mist", text="Mist") - sub.itemR(cam, "show_title_safe", text="Title Safe") - sub.itemR(cam, "show_name", text="Name") + col = split.column() + col.itemR(cam, "show_limits", text="Limits") + col.itemR(cam, "show_mist", text="Mist") + col.itemR(cam, "show_title_safe", text="Title Safe") + col.itemR(cam, "show_name", text="Name") col = split.column() col.itemR(cam, "show_passepartout", text="Passepartout") - colsub = col.column() - colsub.active = cam.show_passepartout - colsub.itemR(cam, "passepartout_alpha", text="Alpha", slider=True) + sub = col.column() + sub.active = cam.show_passepartout + sub.itemR(cam, "passepartout_alpha", text="Alpha", slider=True) col.itemR(cam, "draw_size", text="Size") bpy.types.register(DATA_PT_context_camera) bpy.types.register(DATA_PT_camera) bpy.types.register(DATA_PT_camera_display) - diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py index 36272ca5d3d..d0e1756986d 100644 --- a/release/ui/buttons_data_curve.py +++ b/release/ui/buttons_data_curve.py @@ -28,7 +28,6 @@ class DATA_PT_context_curve(DataButtonsPanel): split.template_ID(space, "pin_id") split.itemS() - class DATA_PT_shape_curve(DataButtonsPanel): __label__ = "Shape" @@ -72,6 +71,7 @@ class DATA_PT_geometry_curve(DataButtonsPanel): def draw(self, context): layout = self.layout + curve = context.curve split = layout.split() @@ -93,60 +93,63 @@ class DATA_PT_pathanim(DataButtonsPanel): def draw_header(self, context): layout = self.layout + curve = context.curve layout.itemR(curve, "path", text="") def draw(self, context): - curve = context.curve layout = self.layout + + curve = context.curve + layout.active = curve.path split = layout.split() - sub = split.column() - sub.itemR(curve, "path_length", text="Frames") - sub.itemR(curve, "follow") + col = split.column() + col.itemR(curve, "path_length", text="Frames") + col.itemR(curve, "follow") - sub = split.column() - sub.itemR(curve, "stretch") - sub.itemR(curve, "offset_path_distance", text="Offset Children") + col = split.column() + col.itemR(curve, "stretch") + col.itemR(curve, "offset_path_distance", text="Offset Children") class DATA_PT_current_curve(DataButtonsPanel): __label__ = "Current Curve" def draw(self, context): layout = self.layout + currentcurve = context.curve.curves[0] # XXX split = layout.split() - sub = split.column() - sub.itemL(text="Cyclic:") - sub.itemR(currentcurve, "cyclic_u", text="U") - sub.itemR(currentcurve, "cyclic_v", text="V") - sub.itemL(text="Order:") - sub.itemR(currentcurve, "order_u", text="U") - sub.itemR(currentcurve, "order_v", text="V") - sub.itemL(text="Endpoints:") - sub.itemR(currentcurve, "endpoint_u", text="U") - sub.itemR(currentcurve, "endpoint_v", text="V") + col = split.column() + col.itemL(text="Cyclic:") + col.itemR(currentcurve, "cyclic_u", text="U") + col.itemR(currentcurve, "cyclic_v", text="V") + col.itemL(text="Order:") + col.itemR(currentcurve, "order_u", text="U") + col.itemR(currentcurve, "order_v", text="V") + col.itemL(text="Endpoints:") + col.itemR(currentcurve, "endpoint_u", text="U") + col.itemR(currentcurve, "endpoint_v", text="V") - sub = split.column() - sub.itemL(text="Bezier:") - sub.itemR(currentcurve, "bezier_u", text="U") - sub.itemR(currentcurve, "bezier_v", text="V") - sub.itemL(text="Resolution:") - sub.itemR(currentcurve, "resolution_u", text="U") - sub.itemR(currentcurve, "resolution_v", text="V") - sub.itemL(text="Interpolation:") - sub.itemR(currentcurve, "tilt_interpolation", text="Tilt") - sub.itemR(currentcurve, "radius_interpolation", text="Tilt") - sub.itemR(currentcurve, "smooth") + col = split.column() + col.itemL(text="Bezier:") + col.itemR(currentcurve, "bezier_u", text="U") + col.itemR(currentcurve, "bezier_v", text="V") + col.itemL(text="Resolution:") + col.itemR(currentcurve, "resolution_u", text="U") + col.itemR(currentcurve, "resolution_v", text="V") + col.itemL(text="Interpolation:") + col.itemR(currentcurve, "tilt_interpolation", text="Tilt") + col.itemR(currentcurve, "radius_interpolation", text="Tilt") + col.itemR(currentcurve, "smooth") bpy.types.register(DATA_PT_context_curve) bpy.types.register(DATA_PT_shape_curve) bpy.types.register(DATA_PT_geometry_curve) bpy.types.register(DATA_PT_pathanim) bpy.types.register(DATA_PT_current_curve) - diff --git a/release/ui/buttons_data_empty.py b/release/ui/buttons_data_empty.py index a12883be6a2..827fe02e411 100644 --- a/release/ui/buttons_data_empty.py +++ b/release/ui/buttons_data_empty.py @@ -14,6 +14,7 @@ class DATA_PT_empty(DataButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object layout.itemR(ob, "empty_draw_type") diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index bf9bf24221b..a3505dd6970 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -7,17 +7,15 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.lamp != None) + return (context.lamp) class DATA_PT_preview(DataButtonsPanel): - __idname__= "DATA_PT_preview" __label__ = "Preview" def draw(self, context): layout = self.layout - lamp = context.lamp - layout.template_preview(lamp) + layout.template_preview(context.lamp) class DATA_PT_context_lamp(DataButtonsPanel): __show_header__ = False @@ -49,58 +47,52 @@ class DATA_PT_lamp(DataButtonsPanel): layout.itemR(lamp, "type", expand=True) split = layout.split() - col = split.column() - #col.itemL(text="Type:") - #col.itemR(lamp, "type", text="") - colsub = col.column() - colsub.itemR(lamp, "color", text="") - colsub.itemR(lamp, "energy") + col = split.column() + col.itemR(lamp, "color", text="") + col.itemR(lamp, "energy") col.itemR(lamp, "negative") - #col.itemR(lamp, "distance") + col.itemR(lamp, "distance") - sub = split.column() - #sub.itemL(text="Influence:") - sub.itemR(lamp, "layer", text="This Layer Only") - sub.itemR(lamp, "specular") - sub.itemR(lamp, "diffuse") - #sub.itemR(lamp, "negative") + col = split.column() + col.itemR(lamp, "layer", text="This Layer Only") + col.itemR(lamp, "specular") + col.itemR(lamp, "diffuse") + + split = layout.split() if lamp.type in ('POINT', 'SPOT'): - split = layout.split() col = split.column() col.itemL(text="Falloff:") - col = col.column(align=True) - col.itemR(lamp, "falloff_type", text="") - col.itemR(lamp, "distance") - col.itemR(lamp, "sphere") + sub = col.column(align=True) + sub.itemR(lamp, "falloff_type", text="") + sub.itemR(lamp, "distance") + sub.itemR(lamp, "sphere") - if lamp.falloff_type != 'LINEAR_QUADRATIC_WEIGHTED': + if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED': col = split.column() - - else: - sub = split.column() - sub.itemL(text="Attenuation Distance:") - sub = sub.column(align=True) + col.itemL(text="Attenuation Distance:") + sub = col.column(align=True) sub.itemR(lamp, "linear_attenuation", slider=True, text="Linear") sub.itemR(lamp, "quadratic_attenuation", slider=True, text="Quadratic") + else: + split.column() if lamp.type == 'AREA': - split = layout.split() col = split.column() col.itemL(text="Shape:") - col = col.column(align=True) - col.itemR(lamp, "shape", text="") + sub = col.column(align=True) + sub.itemR(lamp, "shape", text="") if (lamp.shape == 'SQUARE'): - col.itemR(lamp, "size") + sub.itemR(lamp, "size") if (lamp.shape == 'RECTANGLE'): - col.itemR(lamp, "size", text="Size X") - col.itemR(lamp, "size_y", text="Size Y") + sub.itemR(lamp, "size", text="Size X") + sub.itemR(lamp, "size_y", text="Size Y") - sub = split.column() - sub.itemL(text="Gamma:") - sub.itemR(lamp, "gamma", text="Value") - + col = split.column() + col.itemL(text="Gamma:") + col.itemR(lamp, "gamma", text="Value") + class DATA_PT_sunsky(DataButtonsPanel): __label__ = "Sun/Sky" @@ -110,6 +102,7 @@ class DATA_PT_sunsky(DataButtonsPanel): def draw(self, context): layout = self.layout + lamp = context.lamp.sky row = layout.row() @@ -125,30 +118,29 @@ class DATA_PT_sunsky(DataButtonsPanel): col = split.column() col.active = lamp.sky col.itemL(text="Blend Mode:") - colsub = col.column(align=True) - colsub.itemR(lamp, "sky_blend_type", text="") - colsub.itemR(lamp, "sky_blend", text="Factor") + sub = col.column(align=True) + sub.itemR(lamp, "sky_blend_type", text="") + sub.itemR(lamp, "sky_blend", text="Factor") col.itemL(text="Color Space:") - colsub = col.column(align=True) - colsub.itemR(lamp, "sky_color_space", text="") - colsub.itemR(lamp, "sky_exposure", text="Exposure") + sub = col.column(align=True) + sub.itemR(lamp, "sky_color_space", text="") + sub.itemR(lamp, "sky_exposure", text="Exposure") col = split.column() col.active = lamp.sky col.itemL(text="Horizon:") - colsub = col.column(align=True) - colsub.itemR(lamp, "horizon_brightness", text="Brightness") - colsub.itemR(lamp, "spread", text="Spread") + sub = col.column(align=True) + sub.itemR(lamp, "horizon_brightness", text="Brightness") + sub.itemR(lamp, "spread", text="Spread") col.itemL(text="Sun:") - colsub = col.column(align=True) - colsub.itemR(lamp, "sun_brightness", text="Brightness") - colsub.itemR(lamp, "sun_size", text="Size") - colsub.itemR(lamp, "backscattered_light", slider=True,text="Back Light") + sub = col.column(align=True) + sub.itemR(lamp, "sun_brightness", text="Brightness") + sub.itemR(lamp, "sun_size", text="Size") + sub.itemR(lamp, "backscattered_light", slider=True,text="Back Light") - row = layout.row() - row.itemS() + layout.itemS() split = layout.split() @@ -175,31 +167,32 @@ class DATA_PT_shadow(DataButtonsPanel): def draw(self, context): layout = self.layout + lamp = context.lamp layout.itemR(lamp, "shadow_method", expand=True) if lamp.shadow_method != 'NOSHADOW': - split = layout.split() col = split.column() col.itemR(lamp, "shadow_color", text="") - sub = split.column() - sub.itemR(lamp, "shadow_layer", text="This Layer Only") - sub.itemR(lamp, "only_shadow") + col = split.column() + col.itemR(lamp, "shadow_layer", text="This Layer Only") + col.itemR(lamp, "only_shadow") if lamp.shadow_method == 'RAY_SHADOW': - col = layout.column() col.itemL(text="Sampling:") col.row().itemR(lamp, "shadow_ray_sampling_method", expand=True) if lamp.type in ('POINT', 'SUN', 'SPOT'): split = layout.split() + col = split.column(align=True) col.itemR(lamp, "shadow_soft_size", text="Soft Size") + col = split.column(align=True) col.itemR(lamp, "shadow_ray_samples", text="Samples") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': @@ -207,56 +200,56 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.type == 'AREA': split = layout.split() - col = split.column() - - if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': - col.itemR(lamp, "umbra") - col.itemR(lamp, "dither") - col.itemR(lamp, "jitter") - else: - col.itemL() - + col = split.column(align=True) col.itemR(lamp, "shadow_ray_samples_x", text="Samples") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") - + + if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': + col = split.column() + col.itemR(lamp, "umbra") + col.itemR(lamp, "dither") + col.itemR(lamp, "jitter") + else: + split.column() + if lamp.shadow_method == 'BUFFER_SHADOW': col = layout.column() col.itemL(text="Buffer Type:") col.row().itemR(lamp, "shadow_buffer_type", expand=True) if lamp.shadow_buffer_type in ('REGULAR', 'HALFWAY'): - split = layout.split() + col = split.column() col.itemL(text="Filter Type:") col.itemR(lamp, "shadow_filter_type", text="") - - colsub = col.column(align=True) - colsub.itemR(lamp, "shadow_buffer_soft", text="Soft") - colsub.itemR(lamp, "shadow_buffer_bias", text="Bias") + sub = col.column(align=True) + sub.itemR(lamp, "shadow_buffer_soft", text="Soft") + sub.itemR(lamp, "shadow_buffer_bias", text="Bias") col = split.column() col.itemL(text="Sample Buffers:") col.itemR(lamp, "shadow_sample_buffers", text="") - - colsub = col.column(align=True) - colsub.itemR(lamp, "shadow_buffer_size", text="Size") - colsub.itemR(lamp, "shadow_buffer_samples", text="Samples") + sub = col.column(align=True) + sub.itemR(lamp, "shadow_buffer_size", text="Size") + sub.itemR(lamp, "shadow_buffer_samples", text="Samples") if (lamp.shadow_buffer_type == 'IRREGULAR'): - row = layout.row() - row.itemR(lamp, "shadow_buffer_bias", text="Bias") + layout.itemR(lamp, "shadow_buffer_bias", text="Bias") row = layout.row() row.itemR(lamp, "auto_clip_start", text="Autoclip Start") - if not (lamp.auto_clip_start): - row.itemR(lamp, "shadow_buffer_clip_start", text="Clip Start") + sub = row.row() + sub.active = not lamp.auto_clip_start + sub.itemR(lamp, "shadow_buffer_clip_start", text="Clip Start") + row = layout.row() row.itemR(lamp, "auto_clip_end", text="Autoclip End") - if not (lamp.auto_clip_end): - row.itemR(lamp, "shadow_buffer_clip_end", text=" Clip End") + sub = row.row() + sub.active = not lamp.auto_clip_end + sub.itemR(lamp, "shadow_buffer_clip_end", text=" Clip End") class DATA_PT_spot(DataButtonsPanel): __label__ = "Spot" @@ -267,9 +260,11 @@ class DATA_PT_spot(DataButtonsPanel): def draw(self, context): layout = self.layout + lamp = context.lamp split = layout.split() + col = split.column() sub = col.column(align=True) sub.itemR(lamp, "spot_size", text="Size") @@ -278,11 +273,11 @@ class DATA_PT_spot(DataButtonsPanel): col = split.column() col.itemR(lamp, "halo") - colsub = col.column(align=True) - colsub.active = lamp.halo - colsub.itemR(lamp, "halo_intensity", text="Intensity") + sub = col.column(align=True) + sub.active = lamp.halo + sub.itemR(lamp, "halo_intensity", text="Intensity") if lamp.shadow_method == 'BUFFER_SHADOW': - colsub.itemR(lamp, "halo_step", text="Step") + sub.itemR(lamp, "halo_step", text="Step") class DATA_PT_falloff_curve(DataButtonsPanel): __label__ = "Falloff Curve" @@ -299,6 +294,7 @@ class DATA_PT_falloff_curve(DataButtonsPanel): def draw(self, context): layout = self.layout + lamp = context.lamp layout.template_curve_mapping(lamp.falloff_curve) @@ -310,4 +306,3 @@ bpy.types.register(DATA_PT_falloff_curve) bpy.types.register(DATA_PT_spot) bpy.types.register(DATA_PT_shadow) bpy.types.register(DATA_PT_sunsky) - diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py index 4ccac2dfa9c..3766b9ff1a5 100644 --- a/release/ui/buttons_data_lattice.py +++ b/release/ui/buttons_data_lattice.py @@ -28,7 +28,6 @@ class DATA_PT_context_lattice(DataButtonsPanel): split.template_ID(space, "pin_id") split.itemS() - class DATA_PT_lattice(DataButtonsPanel): __label__ = "Lattice" @@ -55,4 +54,3 @@ class DATA_PT_lattice(DataButtonsPanel): bpy.types.register(DATA_PT_context_lattice) bpy.types.register(DATA_PT_lattice) - diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 8d6d0ade9f1..87c4a596b4d 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -40,9 +40,10 @@ class DATA_PT_normals(DataButtonsPanel): col = split.column() col.itemR(mesh, "autosmooth") - colsub = col.column() - colsub.active = mesh.autosmooth - colsub.itemR(mesh, "autosmooth_angle", text="Angle") + sub = col.column() + sub.active = mesh.autosmooth + sub.itemR(mesh, "autosmooth_angle", text="Angle") + sub = split.column() sub.itemR(mesh, "vertex_normal_flip") sub.itemR(mesh, "double_sided") @@ -55,10 +56,10 @@ class DATA_PT_vertex_groups(DataButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object row = layout.row() - row.template_list(ob, "vertex_groups", ob, "active_vertex_group_index") col = row.column(align=True) @@ -92,6 +93,7 @@ class DATA_PT_shape_keys(DataButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object key = ob.data.shape_keys kb = ob.active_shape_key @@ -135,8 +137,7 @@ class DATA_PT_shape_keys(DataButtonsPanel): row.itemR(key, "relative") row.itemR(key, "slurph") - row = layout.row() - row.itemR(kb, "name") + layout.itemR(kb, "name") if context.edit_object: layout.enabled = False @@ -146,11 +147,12 @@ class DATA_PT_uv_texture(DataButtonsPanel): def draw(self, context): layout = self.layout + me = context.mesh row = layout.row() - col = row.column() + col.template_list(me, "uv_textures", me, "active_uv_texture_index", rows=2) col = row.column(align=True) @@ -166,6 +168,7 @@ class DATA_PT_vertex_colors(DataButtonsPanel): def draw(self, context): layout = self.layout + me = context.mesh row = layout.row() From 71e0e22ae02a0d2f2174f4080397c9bd9b0c4b88 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Mon, 27 Jul 2009 22:02:47 +0000 Subject: [PATCH 408/512] * cmake / mac - unzip python modules from /lib/release into .blender/python on build This last commit should make everything right for compiling out of the box with python 3.1 on Mac OS X intel. I've been testing/developing this on 10.5 and I'd be very interested to hear feedback from people on other OS versions! Scons and PPC to go... --- source/creator/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index adf0dca0d81..48d06f00b7e 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -130,7 +130,8 @@ IF(APPLE) COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/Resources/ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ - COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/darwin/extra/python ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ + COMMAND mkdir ${TARGETDIR}/blender.app/Contents/MacOS/.blender/python/ + COMMAND unzip -q ${LIBDIR}/release/python.zip -d ${TARGETDIR}/blender.app/Contents/MacOS/.blender/python/ COMMAND find ${TARGETDIR}/blender.app -name CVS -prune -exec rm -rf {} "\;" COMMAND find ${TARGETDIR}/blender.app -name CVS.sandboxinfo -prune -exec rm -rf {} "\;" COMMAND find ${TARGETDIR}/blender.app -name .DS_Store -prune -exec rm -rf {} "\;" From cc3c21f27cd0cf80d00d35f77a0ede8d942a5cce Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Mon, 27 Jul 2009 22:15:17 +0000 Subject: [PATCH 409/512] * scons changes for mac osx intel / precompiled python 3.1 Feedback (especially on < 10.5) would be most appreciated! --- config/darwin-config.py | 48 +++++++++++++++++++++++++---------------- tools/Blender.py | 5 +++++ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/config/darwin-config.py b/config/darwin-config.py index 785f1cb42a2..14e6eb955ff 100644 --- a/config/darwin-config.py +++ b/config/darwin-config.py @@ -10,8 +10,6 @@ import commands # IMPORTANT NOTE : OFFICIAL BUILDS SHOULD BE DONE WITH SDKs USE_SDK=True -BF_PYTHON_VERSION = '2.3' - cmd = 'uname -p' MAC_PROC=commands.getoutput(cmd) cmd = 'uname -r' @@ -32,9 +30,12 @@ LIBDIR = '${LCGDIR}' if MAC_PROC== 'powerpc' and BF_PYTHON_VERSION == '2.3': MAC_MIN_VERS = '10.3' MACOSX_SDK='/Developer/SDKs/MacOSX10.3.9.sdk' -else: +elif MAC_CUR_VER=='10.4': MAC_MIN_VERS = '10.4' MACOSX_SDK='/Developer/SDKs/MacOSX10.4u.sdk' +else: + MAC_MIN_VERS = '10.5' + MACOSX_SDK='/Developer/SDKs/MacOSX10.5.sdk' # enable ffmpeg support @@ -46,24 +47,35 @@ if USE_SDK==True: #BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib' #BF_FFMPEG_LIB = 'avformat.a avcodec.a avutil.a' -# python.org libs install in /library we want to use that for 2.5 -# -# if you want py2.5 on leopard without installing -# change value to BF_PYTHON = '/Library/Frameworks/Python.framework/Versions/' -# BEWARE: in that case it will work only on leopard +BF_PYTHON_VERSION = '3.1' -if BF_PYTHON_VERSION=='2.3': - BF_PYTHON = '/System/Library/Frameworks/Python.framework/Versions/' +if BF_PYTHON_VERSION=='3.1': + # python 3.1 uses precompiled libraries in bf svn /lib by default + + BF_PYTHON = LIBDIR + '/python' + BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' + # BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}' + BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}' + BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/python${BF_PYTHON_VERSION}' + # BF_PYTHON_LINKFLAGS = '-u _PyMac_Error -framework System' else: - BF_PYTHON = '/Library/Frameworks/Python.framework/Versions/' + # python 2.5 etc. uses built-in framework -BF_PYTHON_INC = '${BF_PYTHON}${BF_PYTHON_VERSION}/include/python${BF_PYTHON_VERSION}' -BF_PYTHON_BINARY = '${BF_PYTHON}${BF_PYTHON_VERSION}/bin/python${BF_PYTHON_VERSION}' -BF_PYTHON_LIB = '' -BF_PYTHON_LIBPATH = '${BF_PYTHON}${BF_PYTHON_VERSION}/lib/python${BF_PYTHON_VERSION}/config' -BF_PYTHON_LINKFLAGS = '-u _PyMac_Error -framework System -framework Python' -if MAC_CUR_VER=='10.3' or MAC_CUR_VER=='10.4': - BF_PYTHON_LINKFLAGS ='-u __dummy '+BF_PYTHON_LINKFLAGS + # python.org libs install in /library we want to use that for 2.5 + # + # if you want py2.5 on leopard without installing + # change value to BF_PYTHON = '/Library/Frameworks/Python.framework/Versions/' + # BEWARE: in that case it will work only on leopard + + BF_PYTHON = '/System/Library/Frameworks/Python.framework/Versions/' + + BF_PYTHON_INC = '${BF_PYTHON}${BF_PYTHON_VERSION}/include/python${BF_PYTHON_VERSION}' + BF_PYTHON_BINARY = '${BF_PYTHON}${BF_PYTHON_VERSION}/bin/python${BF_PYTHON_VERSION}' + BF_PYTHON_LIB = '' + BF_PYTHON_LIBPATH = '${BF_PYTHON}${BF_PYTHON_VERSION}/lib/python${BF_PYTHON_VERSION}/config' + BF_PYTHON_LINKFLAGS = '-u _PyMac_Error -framework System -framework Python' + if MAC_CUR_VER=='10.3' or MAC_CUR_VER=='10.4': + BF_PYTHON_LINKFLAGS ='-u __dummy '+BF_PYTHON_LINKFLAGS BF_QUIET = '1' WITH_BF_OPENMP = '0' diff --git a/tools/Blender.py b/tools/Blender.py index 749fa55a833..73ee6bb813d 100644 --- a/tools/Blender.py +++ b/tools/Blender.py @@ -323,6 +323,7 @@ def AppIt(target=None, source=None, env=None): a = '%s' % (target[0]) builddir, b = os.path.split(a) + libdir = env['LCGDIR'][1:] bldroot = env.Dir('.').abspath binary = env['BINARYKIND'] @@ -355,6 +356,10 @@ def AppIt(target=None, source=None, env=None): commands.getoutput(cmd) cmd = 'cp %s/bin/.blender/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary) commands.getoutput(cmd) + cmd = 'mkdir %s/%s.app/Contents/MacOS/.blender/python/'%(builddir,binary) + commands.getoutput(cmd) + cmd = 'unzip -q %s/release/python.zip -d %s/%s.app/Contents/MacOS/.blender/python/'%(libdir,builddir,binary) + commands.getoutput(cmd) cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) commands.getoutput(cmd) cmd = 'cp -R %s/release/ui %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) From 396ebf0c91b1527e6ea1ab923a314a164007b8e9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Jul 2009 22:41:35 +0000 Subject: [PATCH 410/512] better loading partially written TARGA's, dont read over the end of the buffer and set the remaining pixels 0. --- source/blender/imbuf/intern/IMB_targa.h | 2 +- source/blender/imbuf/intern/readimage.c | 4 +- source/blender/imbuf/intern/targa.c | 66 ++++++++++++++++++++----- 3 files changed, 56 insertions(+), 16 deletions(-) diff --git a/source/blender/imbuf/intern/IMB_targa.h b/source/blender/imbuf/intern/IMB_targa.h index 956bc512b97..7759e4bc772 100644 --- a/source/blender/imbuf/intern/IMB_targa.h +++ b/source/blender/imbuf/intern/IMB_targa.h @@ -41,7 +41,7 @@ struct ImBuf; int imb_is_a_targa(void *buf); -struct ImBuf *imb_loadtarga(unsigned char *mem, int flags); +struct ImBuf *imb_loadtarga(unsigned char *mem, int size, int flags); short imb_savetarga(struct ImBuf * ibuf, char *name, int flags); #endif diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c index 1a6ab104bcf..4104a8db65c 100644 --- a/source/blender/imbuf/intern/readimage.c +++ b/source/blender/imbuf/intern/readimage.c @@ -143,7 +143,7 @@ ImBuf *IMB_ibImageFromMemory(int *mem, int size, int flags) { ibuf = imb_bmp_decode((uchar *)mem, size, flags); if (ibuf) return(ibuf); - ibuf = imb_loadtarga((uchar *)mem, flags); + ibuf = imb_loadtarga((uchar *)mem, size, flags); if (ibuf) return(ibuf); ibuf = imb_loaddpx((uchar *)mem, size, flags); @@ -229,7 +229,7 @@ struct ImBuf *IMB_loadiffmem(int *mem, int flags) { } } - ibuf = imb_loadtarga((uchar *) mem,flags); + ibuf = imb_loadtarga((uchar *) mem,maxlen,flags); if (ibuf) return(ibuf); if (IB_verbose) fprintf(stderr,"Unknown fileformat\n"); diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c index 303e5685503..4e6326a1fd6 100644 --- a/source/blender/imbuf/intern/targa.c +++ b/source/blender/imbuf/intern/targa.c @@ -365,8 +365,24 @@ int imb_is_a_targa(void *buf) { return checktarga(&tga, buf); } -static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int psize) +static void complete_partial_load(struct ImBuf *ibuf, unsigned int *rect) { + int size = (ibuf->x * ibuf->y) - (rect - ibuf->rect); + if(size) { + printf("decodetarga: incomplete file, %.1f%% missing\n", 100*((float)size / (ibuf->x * ibuf->y))); + + /* not essential but makes displaying partially rendered TGA's less ugly */ + memset(rect, 0, size); + } + else { + /* shouldnt happen */ + printf("decodetarga: incomplete file, all pixels written\n"); + } +} + +static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int mem_size, int psize) +{ + unsigned char *mem_end = mem+mem_size; int count, col, size; unsigned int *rect; uchar * cp = (uchar *) &col; @@ -380,9 +396,13 @@ static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int psize) /* set alpha */ cp[0] = 0xff; cp[1] = cp[2] = 0; - + while(size > 0){ count = *mem++; + + if(mem>mem_end) + goto partial_load; + if (count >= 128) { /*if (count == 128) printf("TARGA: 128 in file !\n");*/ count -= 127; @@ -452,15 +472,28 @@ static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int psize) } *rect++ = col; count --; + + if(mem>mem_end) + goto partial_load; } + + if(mem>mem_end) + goto partial_load; } } } - if (size) printf("decodetarga: count would overwrite %d pixels\n", -size); + if (size) { + printf("decodetarga: count would overwrite %d pixels\n", -size); + } + return; + +partial_load: + complete_partial_load(ibuf, rect); } -static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int psize) +static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int mem_size, int psize) { + unsigned char *mem_end = mem+mem_size; int col,size; unsigned int *rect; uchar * cp = (uchar *) &col; @@ -476,6 +509,9 @@ static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int psize) cp[1] = cp[2] = 0; while(size > 0){ + if(mem>mem_end) + goto partial_load; + if (psize & 2){ if (psize & 1){ /* order = bgra */ @@ -505,10 +541,14 @@ static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int psize) *rect++ = col; size--; } + return; + +partial_load: + complete_partial_load(ibuf, rect); } -struct ImBuf *imb_loadtarga(unsigned char *mem, int flags) +struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags) { TARGA tga; struct ImBuf * ibuf; @@ -579,18 +619,18 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, int flags) case 1: case 2: case 3: - if (tga.pixsize <= 8) ldtarga(ibuf,mem,0); - else if (tga.pixsize <= 16) ldtarga(ibuf,mem,1); - else if (tga.pixsize <= 24) ldtarga(ibuf,mem,2); - else if (tga.pixsize <= 32) ldtarga(ibuf,mem,3); + if (tga.pixsize <= 8) ldtarga(ibuf,mem,mem_size,0); + else if (tga.pixsize <= 16) ldtarga(ibuf,mem,mem_size,1); + else if (tga.pixsize <= 24) ldtarga(ibuf,mem,mem_size,2); + else if (tga.pixsize <= 32) ldtarga(ibuf,mem,mem_size,3); break; case 9: case 10: case 11: - if (tga.pixsize <= 8) decodetarga(ibuf,mem,0); - else if (tga.pixsize <= 16) decodetarga(ibuf,mem,1); - else if (tga.pixsize <= 24) decodetarga(ibuf,mem,2); - else if (tga.pixsize <= 32) decodetarga(ibuf,mem,3); + if (tga.pixsize <= 8) decodetarga(ibuf,mem,mem_size,0); + else if (tga.pixsize <= 16) decodetarga(ibuf,mem,mem_size,1); + else if (tga.pixsize <= 24) decodetarga(ibuf,mem,mem_size,2); + else if (tga.pixsize <= 32) decodetarga(ibuf,mem,mem_size,3); break; } From fe881aa7ad0ba77052d0c637a5a4056f8ef427f8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 01:06:56 +0000 Subject: [PATCH 411/512] - lamp UI was missing y samples for rectangle area lamps - returned ID types from RNA funcs didnt get their ID's assigned which crashed in some cases (still not working for members of ID types). - ob.create_remder_mesh() wasnt assigning any materials. --- release/ui/buttons_data_lamp.py | 15 ++++++++----- .../blender/makesrna/intern/rna_object_api.c | 21 +++++++++++++++++++ source/blender/python/intern/bpy_rna.c | 8 +++++-- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index a3505dd6970..9c5b3dd1573 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -85,7 +85,7 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "shape", text="") if (lamp.shape == 'SQUARE'): sub.itemR(lamp, "size") - if (lamp.shape == 'RECTANGLE'): + elif (lamp.shape == 'RECTANGLE'): sub.itemR(lamp, "size", text="Size X") sub.itemR(lamp, "size_y", text="Size Y") @@ -198,15 +198,20 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") - if lamp.type == 'AREA': + elif lamp.type == 'AREA': split = layout.split() col = split.column(align=True) - col.itemR(lamp, "shadow_ray_samples_x", text="Samples") + if lamp.shape == 'SQUARE': + col.itemR(lamp, "shadow_ray_samples_x", text="Samples") + elif lamp.shape == 'RECTANGLE': + col.itemR(lamp, "shadow_ray_samples_x", text="Samples X") + col.itemR(lamp, "shadow_ray_samples_y", text="Samples Y") + if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") - if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': + elif lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': col = split.column() col.itemR(lamp, "umbra") col.itemR(lamp, "dither") @@ -236,7 +241,7 @@ class DATA_PT_shadow(DataButtonsPanel): sub.itemR(lamp, "shadow_buffer_size", text="Size") sub.itemR(lamp, "shadow_buffer_samples", text="Samples") - if (lamp.shadow_buffer_type == 'IRREGULAR'): + elif lamp.shadow_buffer_type == 'IRREGULAR': layout.itemR(lamp, "shadow_buffer_bias", text="Bias") row = layout.row() diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 053ab115b3b..3541bc2b1b0 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -34,6 +34,8 @@ #ifdef RNA_RUNTIME +#include "MEM_guardedalloc.h" + #include "BKE_customdata.h" #include "BKE_DerivedMesh.h" @@ -61,6 +63,25 @@ Mesh *rna_Object_create_render_mesh(Object *ob, Scene *scene) DM_to_mesh(dm, me); dm->release(dm); + + { /* update the material */ + short i, *totcol =give_totcolp(ob); + + /* free the current material list */ + if(me->mat) + MEM_freeN((void *)me->mat); + + me->mat= (Material **)MEM_callocN(sizeof(void *)*(*totcol), "matarray"); + + for(i=0; i<*totcol; i++) { + Material *mat= give_current_material(ob, i+1); + if(mat) { + me->mat[i]= mat; + mat->id.us++; + } + } + } + return me; } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index c76cb252f2c..91e443dbc93 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1867,8 +1867,12 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) newptr= *(PointerRNA*)data; } else { - /* XXX this is missing the ID part! */ - RNA_pointer_create(NULL, type, *(void**)data, &newptr); + if(RNA_struct_is_ID(type)) { + RNA_id_pointer_create(*(void**)data, &newptr); + } else { + /* XXX this is missing the ID part! */ + RNA_pointer_create(NULL, type, *(void**)data, &newptr); + } } if (newptr.data) { From ddb09d3220a3e2efa755cb46e474f5ceb53c4aa4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 01:48:10 +0000 Subject: [PATCH 412/512] =?UTF-8?q?[#19036]=20blender=20should=20use=20'st?= =?UTF-8?q?atic=20inline'=20in=20BKE=5Fcloth.h=20to=20work=20with=20C99=20?= =?UTF-8?q?T=C3=B6r=C3=B6k=20Edwin=20(edwintorok)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this was the only thing stopping blender being compiled with clang --- source/blender/blenkernel/BKE_cloth.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h index 28c826d17c3..b537536043d 100644 --- a/source/blender/blenkernel/BKE_cloth.h +++ b/source/blender/blenkernel/BKE_cloth.h @@ -64,8 +64,7 @@ struct CollisionTree; #elif defined (__sun) || defined (__sun__) # define DO_INLINE #else -# define DO_INLINE inline -# define LINUX +# define DO_INLINE static inline #endif #define CLOTH_MAX_THREAD 2 From 858450767191660618fbeeaaf39e1ad91f338a70 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 28 Jul 2009 03:54:40 +0000 Subject: [PATCH 413/512] 2.5 - Start of Make Proxy Operator The code has been ported to the operator+rna system, however, there are currently issues related to how the pointer-rna's work for use as operator properties. (NOTE: RNA_property_pointer_set only takes into account builtin props for now, but not id-props, while the corresponding get method seems to take them into account) The alternative to using pointer-properties for the operator, is to store strings and look up the relevant objects later, but there should be a nicer way... --- source/blender/editors/object/object_edit.c | 154 +++++++++++++----- source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 2 + .../editors/space_view3d/view3d_header.c | 4 +- 4 files changed, 117 insertions(+), 44 deletions(-) diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 1ee3f1b2f53..0d3118fd654 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -2666,68 +2666,110 @@ void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d) DAG_scene_sort(scene); } -static Object *group_objects_menu(Group *group) + +/* ******************** make proxy operator *********************** */ + +/* present menu listing the possible objects within the group to proxify */ +static void proxy_group_objects_menu (bContext *C, wmOperator *op, Object *ob, Group *group) { + PointerRNA gob_ptr; + uiPopupMenu *pup; + uiLayout *layout; GroupObject *go; - int len= 0; - short a, nr; - char *str; - - for(go= group->gobject.first; go; go= go->next) { - if(go->ob) - len++; + int len=0; + + /* check if there are any objects within the group to assign for */ + for (go= group->gobject.first; go; go= go->next) { + if (go->ob) len++; } - if(len==0) return NULL; + if (len==0) return; - str= MEM_callocN(40+32*len, "menu"); + /* now create the menu to draw */ + pup= uiPupMenuBegin(C, "Make Proxy For:", 0); + layout= uiPupMenuLayout(pup); - strcpy(str, "Make Proxy for: %t"); - a= strlen(str); - for(nr=1, go= group->gobject.first; go; go= go->next, nr++) { - a+= sprintf(str+a, "|%s %%x%d", go->ob->id.name+2, nr); + /* make RNA pointer for object that group belongs to */ + RNA_id_pointer_create((ID *)ob, &gob_ptr); + + for (go= group->gobject.first; go; go= go->next) { + if (go->ob) { + PointerRNA props_ptr, ob_ptr; + + /* create pointer for this object */ + RNA_id_pointer_create((ID *)go->ob, &ob_ptr); + + /* create operator properties, and assign the relevant pointers to that, + * and add a menu entry which uses these props + */ + WM_operator_properties_create(&props_ptr, op->idname); + RNA_pointer_set(&props_ptr, "object", ob_ptr); + RNA_pointer_set(&props_ptr, "group_object", gob_ptr); + uiItemFullO(layout, go->ob->id.name+2, 0, op->idname, props_ptr.data, WM_OP_EXEC_REGION_WIN); + } } - a= pupmenu_col(str, 20); - MEM_freeN(str); - if(a>0) { - go= BLI_findlink(&group->gobject, a-1); - return go->ob; - } - return NULL; + /* display the menu, and be done */ + uiPupMenuEnd(C, pup); } - -/* adds empty object to become local replacement data of a library-linked object */ -void make_proxy(Scene *scene) +/* set the object to proxify */ +static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt) { - Object *ob= OBACT; - Object *gob= NULL; + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); - if(scene->id.lib) return; - if(ob==NULL) return; - - - if(ob->dup_group && ob->dup_group->id.lib) { - gob= ob; + /* sanity checks */ + if (!scene || scene->id.lib || !ob) + return OPERATOR_CANCELLED; + + /* Get object to work on - use a menu if we need to... */ + if (ob->dup_group && ob->dup_group->id.lib) { /* gives menu with list of objects in group */ - ob= group_objects_menu(ob->dup_group); + proxy_group_objects_menu(C, op, ob, ob->dup_group); } - else if(ob->id.lib) { - if(okee("Make Proxy Object")==0) - return; + else if (ob->id.lib) { + uiPopupMenu *pup= uiPupMenuBegin(C, "OK?", ICON_QUESTION); + uiLayout *layout= uiPupMenuLayout(pup); + PointerRNA ob_ptr, props_ptr; + + /* create pointer for this object */ + RNA_id_pointer_create((ID *)ob, &ob_ptr); + + /* create operator properties, and assign the relevant pointers to that, + * and add a menu entry which uses these props + */ + WM_operator_properties_create(&props_ptr, op->idname); + RNA_pointer_set(&props_ptr, "object", ob_ptr); + uiItemFullO(layout, op->type->name, 0, op->idname, props_ptr.data, WM_OP_EXEC_REGION_WIN); + + /* present the menu and be done... */ + uiPupMenuEnd(C, pup); } else { - error("Can only make proxy for a referenced object or group"); - return; + /* error.. cannot continue */ + BKE_report(op->reports, RPT_ERROR, "Can only make proxy for a referenced object or group"); } - if(ob) { + /* this invoke just calls another instance of this operator... */ + return OPERATOR_CANCELLED; +} + +static int make_proxy_exec (bContext *C, wmOperator *op) +{ + PointerRNA ob_ptr= RNA_pointer_get(op->ptr, "object"); + PointerRNA gob_ptr= RNA_pointer_get(op->ptr, "group_object"); + Object *ob= ob_ptr.data; + Object *gob= gob_ptr.data; + Scene *scene= CTX_data_scene(C); + + if (ob) { Object *newob; Base *newbase, *oldbase= BASACT; char name[32]; + /* Add new object for the proxy */ newob= add_object(scene, OB_EMPTY); - if(gob) + if (gob) strcpy(name, gob->id.name+2); else strcpy(name, ob->id.name+2); @@ -2740,15 +2782,43 @@ void make_proxy(Scene *scene) newob->lay= newbase->lay; /* remove base, leave user count of object, it gets linked in object_make_proxy */ - if(gob==NULL) { + if (gob==NULL) { BLI_remlink(&scene->base, oldbase); MEM_freeN(oldbase); - } + } + object_make_proxy(newob, ob, gob); + /* depsgraph flushes are needed for the new data */ DAG_scene_sort(scene); DAG_object_flush_update(scene, newob, OB_RECALC); } + else { + BKE_report(op->reports, RPT_ERROR, "No object to make proxy for"); + return OPERATOR_CANCELLED; + } + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_proxy_make (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Make Proxy"; + ot->idname= "OBJECT_OT_proxy_make"; + ot->description= "Add empty object to become local replacement data of a library-linked object"; + + /* callbacks */ + ot->invoke= make_proxy_invoke; + ot->exec= make_proxy_exec; + ot->poll= ED_operator_object_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_pointer(ot->srna, "object", "Object", "Proxy Object", "Lib-linked/grouped object to make a proxy for."); + RNA_def_pointer(ot->srna, "group_object", "Object", "Group Object", "Group instancer (if applicable)."); } /* ******************** make parent operator *********************** */ diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 29076d9f32a..da34f35e647 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -66,6 +66,7 @@ void OBJECT_OT_object_add(struct wmOperatorType *ot); void OBJECT_OT_duplicate(struct wmOperatorType *ot); void OBJECT_OT_delete(struct wmOperatorType *ot); void OBJECT_OT_join(struct wmOperatorType *ot); +void OBJECT_OT_proxy_make(struct wmOperatorType *ot); void OBJECT_OT_shade_smooth(struct wmOperatorType *ot); void OBJECT_OT_shade_flat(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index c54a8cef8dc..f4407de60db 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -88,6 +88,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_duplicates_make_real); WM_operatortype_append(OBJECT_OT_duplicate); WM_operatortype_append(OBJECT_OT_join); + WM_operatortype_append(OBJECT_OT_proxy_make); WM_operatortype_append(OBJECT_OT_shade_smooth); WM_operatortype_append(OBJECT_OT_shade_flat); WM_operatortype_append(GROUP_OT_group_create); @@ -185,6 +186,7 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_ALT, 0)->ptr, "linked", 1); WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 25cf4fe6862..ae2b600f8f4 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2100,9 +2100,9 @@ static void view3d_edit_objectmenu(bContext *C, uiLayout *layout, void *arg_unus uiItemO(layout, NULL, 0, "OBJECT_OT_duplicate"); uiItemBooleanO(layout, "Duplicate Linked", 0, "OBJECT_OT_duplicate", "linked", 1); uiItemO(layout, NULL, 0, "OBJECT_OT_delete"); - + + uiItemO(layout, NULL, 0, "OBJECT_OT_proxy_make"); #if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, ""); uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, ""); uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, ""); From e52dbadcff81d5346619c5a4b6c87dd94c950d7a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 28 Jul 2009 05:26:01 +0000 Subject: [PATCH 414/512] 2.5 Lamp Buttons: * Layout Fix for shadow panel. --- release/ui/buttons_data_lamp.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 9c5b3dd1573..abe78aca28f 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -210,14 +210,14 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") - + split.column() + elif lamp.shadow_ray_sampling_method == 'CONSTANT_QMC': + split.column() elif lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': col = split.column() col.itemR(lamp, "umbra") col.itemR(lamp, "dither") col.itemR(lamp, "jitter") - else: - split.column() if lamp.shadow_method == 'BUFFER_SHADOW': col = layout.column() From 37b49492a8064e135770862a11374e7aa9683047 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 05:51:38 +0000 Subject: [PATCH 415/512] simple povray render integration. Supports... - camera/lamp/mesh object types - meshes with modifiers applied, normals/uv/vertex colors - materials, reflection, transparency - spot/area/point lamps, samples, raytrace options - scene render size, AA setting Details... - Doesn't need any 3rd party modules. - Runs povray from the subprocess module, updating the image from a TARGA. - Currently no UI panels or support for custom settings. This could be used as an example for other scripts. --- release/io/engine_render_pov.py | 564 ++++++++++++++++++++++++++++++++ 1 file changed, 564 insertions(+) create mode 100644 release/io/engine_render_pov.py diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py new file mode 100644 index 00000000000..550f9889f6b --- /dev/null +++ b/release/io/engine_render_pov.py @@ -0,0 +1,564 @@ +import bpy + +from math import atan, pi, degrees +import subprocess +import os +import sys +import time + +def write_pov(filename, scene=None, info_callback = None): + file = open(filename, 'w') + + # Only for testing + if not scene: + scene = bpy.data.scenes[0] + + render = scene.render_data + materialTable = {} + + def saneName(name): + name = name.lower() + for ch in ' /\\+=-[]{}().,<>\'":;~!@#$%^&*|?': + name = name.replace(ch, '_') + return name + + def writeMatrix(matrix): + file.write('\tmatrix <%.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f>\n' %\ + (matrix[0][0], matrix[0][1], matrix[0][2], matrix[1][0], matrix[1][1], matrix[1][2], matrix[2][0], matrix[2][1], matrix[2][2], matrix[3][0], matrix[3][1], matrix[3][2]) ) + + def exportCamera(): + camera = scene.camera + matrix = camera.matrix + + # compute resolution + Qsize=float(render.resolution_x)/float(render.resolution_y) + + file.write('camera {\n') + file.write('\tlocation <0, 0, 0>\n') + file.write('\tlook_at <0, 0, -1>\n') + file.write('\tright <%s, 0, 0>\n' % -Qsize) + file.write('\tup <0, 1, 0>\n') + file.write('\tangle %f \n' % (360.0*atan(16.0/camera.data.lens)/pi)) + + file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotationPart().toEuler()])) + file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2])) + file.write('}\n') + + + + def exportLamps(lamps): + # Get all lamps + for ob in lamps: + lamp = ob.data + + matrix = ob.matrix + + color = tuple([c * lamp.energy for c in lamp.color]) # Colour is modified by energy + + file.write('light_source') + file.write('{\n') + file.write('\t< 0,0,0 >\n') + file.write('\tcolor red %.6f green %.6f blue %.6f\n' % color) + + if lamp.type == 'POINT': # Point Lamp + pass + elif lamp.type == 'SPOT': # Spot + file.write('\tspotlight\n') + + # Falloff is the main radius from the centre line + file.write('\tfalloff %.2f\n' % (lamp.spot_size/2.0) ) # 1 TO 179 FOR BOTH + file.write('\tradius %.6f\n' % ((lamp.spot_size/2.0) * (1-lamp.spot_blend)) ) + + # Blender does not have a tightness equivilent, 0 is most like blender default. + file.write('\ttightness 0\n') # 0:10f + + file.write('\tpoint_at <0, 0, -1>\n') + elif lamp.type == 'AREA': + + size_x = lamp.size + samples_x = lamp.shadow_ray_samples_x + if lamp.shape == 'SQUARE': + size_y = size_x + samples_y = samples_x + else: + size_y = lamp.size_y + samples_y = lamp.shadow_ray_samples_y + + + + file.write('\tarea_light <%d,0,0>,<0,0,%d> %d, %d\n' % (size_x, size_y, samples_x, samples_y)) + if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': + if lamp.jitter: + file.write('\tjitter\n') + else: + file.write('\tadaptive 1\n') + file.write('\tjitter\n') + + if lamp.shadow_method == 'NOSHADOW': + file.write('\tshadowless\n') + + file.write('\tfade_distance %.6f\n' % lamp.distance) + file.write('\tfade_power %d\n' % 1) # Could use blenders lamp quad? + writeMatrix(matrix) + + file.write('}\n') + + def exportMeshs(sel): + def bMat2PovString(material): + povstring = 'finish {' + if world != None: + povstring += 'ambient <%.6f, %.6f, %.6f> ' % tuple([c*material.ambient for c in world.ambient_color]) + + povstring += 'diffuse %.6f ' % material.diffuse_reflection + povstring += 'specular %.6f ' % material.specular_reflection + + + if material.raytrace_mirror.enabled: + #povstring += 'interior { ior %.6f } ' % material.IOR + raytrace_mirror= material.raytrace_mirror + if raytrace_mirror.reflect: + povstring += 'reflection {' + povstring += '<%.6f, %.6f, %.6f>' % tuple(material.mirror_color) # Should ask for ray mirror flag + povstring += 'fresnel 1 falloff %.6f exponent %.6f metallic %.6f} ' % (raytrace_mirror.fresnel, raytrace_mirror.fresnel_fac, raytrace_mirror.reflect) + + + + if material.raytrace_transparency.enabled: + #povstring += 'interior { ior %.6f } ' % material.IOR + pass + + #file.write('\t\troughness %.6f\n' % (material.hard*0.5)) + #file.write('\t\t\tcrand 0.0\n') # Sand granyness + #file.write('\t\t\tmetallic %.6f\n' % material.spec) + #file.write('\t\t\tphong %.6f\n' % material.spec) + #file.write('\t\t\tphong_size %.6f\n' % material.spec) + povstring += 'brilliance %.6f ' % (material.specular_hardness/256.0) # Like hardness + povstring += '}' + #file.write('\t}\n') + return povstring + + + world = scene.world + + # Convert all materials to strings we can access directly per vertex. + for material in bpy.data.materials: + materialTable[material.name] = bMat2PovString(material) + + + ob_num = 0 + + for ob in sel: + ob_num+= 1 + + if ob.type in ('LAMP', 'CAMERA', 'EMPTY'): + continue + + me = ob.data + me_materials= me.materials + + me = ob.create_render_mesh(scene) + + if not me: + continue + + if info_callback: + info_callback('Object %2.d of %2.d (%s)' % (ob_num, len(sel), ob.name)) + + #if ob.type!='MESH': + # continue + # me = ob.data + + matrix = ob.matrix + try: uv_layer = me.active_uv_texture.data + except:uv_layer = None + + try: vcol_layer = me.active_vertex_color.data + except:vcol_layer = None + + + def regular_face(f): + fv = f.verts + if fv[3]== 0: + return fv[0], fv[1], fv[2] + return fv[0], fv[1], fv[2], fv[3] + + faces_verts = [regular_face(f) for f in me.faces] + faces_normals = [tuple(f.normal) for f in me.faces] + verts_normals = [tuple(v.normal) for v in me.verts] + + # quads incur an extra face + quadCount = len([f for f in faces_verts if len(f)==4]) + + file.write('mesh2 {\n') + file.write('\tvertex_vectors {\n') + file.write('\t\t%s' % (len(me.verts))) # vert count + for v in me.verts: + file.write(',\n\t\t<%.6f, %.6f, %.6f>' % tuple(v.co)) # vert count + file.write('\n }\n') + + + # Build unique Normal list + uniqueNormals = {} + for fi, f in enumerate(me.faces): + fv = faces_verts[fi] + # [-1] is a dummy index, use a list so we can modify in place + if f.smooth: # Use vertex normals + for v in fv: + key = verts_normals[v] + uniqueNormals[key] = [-1] + else: # Use face normal + key = faces_normals[fi] + uniqueNormals[key] = [-1] + + file.write('\tnormal_vectors {\n') + file.write('\t\t%d' % len(uniqueNormals)) # vert count + idx = 0 + for no, index in uniqueNormals.items(): + file.write(',\n\t\t<%.6f, %.6f, %.6f>' % no) # vert count + index[0] = idx + idx +=1 + file.write('\n }\n') + + + # Vertex colours + vertCols = {} # Use for material colours also. + + if uv_layer: + # Generate unique UV's + uniqueUVs = {} + + for fi, uv in enumerate(uv_layer): + + if len(faces_verts[fi])==4: + uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4 + else: + uvs = uv.uv1, uv.uv2, uv.uv3 + + for uv in uvs: + uniqueUVs[tuple(uv)] = [-1] + + file.write('\tuv_vectors {\n') + #print unique_uvs + file.write('\t\t%s' % (len(uniqueUVs))) # vert count + idx = 0 + for uv, index in uniqueUVs.items(): + file.write(',\n\t\t<%.6f, %.6f>' % uv) + index[0] = idx + idx +=1 + ''' + else: + # Just add 1 dummy vector, no real UV's + file.write('\t\t1') # vert count + file.write(',\n\t\t<0.0, 0.0>') + ''' + file.write('\n }\n') + + + if me.vertex_colors: + + for fi, f in enumerate(me.faces): + material_index = f.material_index + material = me_materials[material_index] + + if material and material.vertex_color_paint: + + col = vcol_layer[fi] + + if len(faces_verts[fi])==4: + cols = col.color1, col.color2, col.color3, col.color4 + else: + cols = col.color1, col.color2, col.color3 + + for col in cols: + key = col[0], col[1], col[2], material_index # Material index! + vertCols[key] = [-1] + + else: + if material: + diffuse_color = tuple(material.diffuse_color) + key = diffuse_color[0], diffuse_color[1], diffuse_color[2], material_index + vertCols[key] = [-1] + + + else: + # No vertex colours, so write material colours as vertex colours + for i, material in enumerate(me_materials): + + if material: + diffuse_color = tuple(material.diffuse_color) + key = diffuse_color[0], diffuse_color[1], diffuse_color[2], i # i == f.mat + vertCols[key] = [-1] + + + # Vert Colours + file.write('\ttexture_list {\n') + file.write('\t\t%s' % (len(vertCols))) # vert count + idx=0 + for col, index in vertCols.items(): + + if me_materials: + material = me_materials[col[3]] + materialString = materialTable[material.name] + else: + materialString = '' # Dont write anything + + float_col = col[0], col[1], col[2], 1-material.alpha, materialString + #print material.apl + file.write(',\n\t\ttexture { pigment {rgbf<%.6f, %.6f, %.6f, %.6f>}%s}' % float_col) + index[0] = idx + idx+=1 + + file.write( '\n }\n' ) + + # Face indicies + file.write('\tface_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for fi, f in enumerate(me.faces): + fv = faces_verts[fi] + material_index= f.material_index + if len(fv) == 4: indicies = (0,1,2), (0,2,3) + else: indicies = ((0,1,2),) + + if vcol_layer: + col = vcol_layer[fi] + + if len(fv) == 4: + cols = col.color1, col.color2, col.color3, col.color4 + else: + cols = col.color1, col.color2, col.color3 + + + if not me_materials or me_materials[material_index] == None: # No materials + for i1, i2, i3 in indicies: + file.write(',\n\t\t<%d,%d,%d>' % (fv[i1], fv[i2], fv[i3])) # vert count + else: + material = me_materials[material_index] + for i1, i2, i3 in indicies: + if me.vertex_colors and material.vertex_color_paint: + # Colour per vertex - vertex colour + + col1 = cols[i1] + col2 = cols[i2] + col3 = cols[i3] + + ci1 = vertCols[col1[0], col1[1], col1[2], material_index][0] + ci2 = vertCols[col2[0], col2[1], col2[2], material_index][0] + ci3 = vertCols[col3[0], col3[1], col3[2], material_index][0] + else: + # Colour per material - flat material colour + diffuse_color= material.diffuse_color + ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], diffuse_color[2], f.material_index][0] + + file.write(',\n\t\t<%d,%d,%d>, %d,%d,%d' % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count + + + + file.write('\n }\n') + + # normal_indices indicies + file.write('\tnormal_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for fi, f in enumerate(me.faces): + fv = faces_verts[fi] + if len(fv) == 4: indicies = (0,1,2), (0,2,3) + else: indicies = ((0,1,2),) + + for i1, i2, i3 in indicies: + if f.smooth: + file.write(',\n\t\t<%d,%d,%d>' %\ + (uniqueNormals[verts_normals[fv[i1]]][0],\ + uniqueNormals[verts_normals[fv[i2]]][0],\ + uniqueNormals[verts_normals[fv[i3]]][0])) # vert count + else: + idx = uniqueNormals[faces_normals[fi]][0] + file.write(',\n\t\t<%d,%d,%d>' % (idx, idx, idx)) # vert count + + + file.write('\n }\n') + + + # normal_indices indicies + + if uv_layer: + file.write('\tuv_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for f in me.faces: + fv = faces_verts[fi] + + if len(fv) == 4: indicies = (0,1,2), (0,2,3) + else: indicies = ((0,1,2),) + + uv = uv_layer[fi] + if len(faces_verts[fi])==4: + uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4 + else: + uvs = uv.uv1, uv.uv2, uv.uv3 + + for i1, i2, i3 in indicies: + file.write(',\n\t\t<%d,%d,%d>' %\ + (uniqueUVs[tuple(uvs[i1][0:2])][0],\ + uniqueUVs[tuple(uvs[i2][0:2])][0],\ + uniqueUVs[tuple(uvs[i2][0:2])][0])) # vert count + file.write('\n }\n') + + if me.materials: + material = me.materials[0] # dodgy + if material and material.raytrace_transparency.enabled: + file.write('\tinterior { ior %.6f }\n' % material.raytrace_transparency.ior) + + writeMatrix(matrix) + file.write('}\n') + + bpy.data.remove_mesh(me) + + + exportCamera() + #exportMaterials() + sel = scene.objects + lamps = [l for l in sel if l.type == 'LAMP'] + exportLamps(lamps) + exportMeshs(sel) + + file.close() + + +def write_pov_ini(filename_ini, filename_pov, filename_image): + scene = bpy.data.scenes[0] + render = scene.render_data + + x= int(render.resolution_x*render.resolution_percentage*0.01) + y= int(render.resolution_y*render.resolution_percentage*0.01) + + file = open(filename_ini, 'w') + + file.write('Input_File_Name="%s"\n' % filename_pov) + file.write('Output_File_Name="%s"\n' % filename_image) + + file.write('Width=%d\n' % x) + file.write('Height=%d\n' % y) + + # Needed for border render. + ''' + file.write('Start_Column=%d\n' % part.x) + file.write('End_Column=%d\n' % (part.x+part.w)) + + file.write('Start_Row=%d\n' % (part.y)) + file.write('End_Row=%d\n' % (part.y+part.h)) + ''' + + file.write('Display=0\n') + file.write('Pause_When_Done=0\n') + file.write('Output_File_Type=C\n') # TGA, best progressive loading + file.write('Output_Alpha=1\n') + + if render.antialiasing: + aa_mapping = {'OVERSAMPLE_5':2, 'OVERSAMPLE_8':3, 'OVERSAMPLE_11':4, 'OVERSAMPLE_16':5} # method 1 assumed + file.write('Antialias=1\n') + file.write('Antialias_Depth=%d\n' % aa_mapping[render.antialiasing_samples]) + else: + file.write('Antialias=0\n') + + file.close() + + +class PovrayRenderEngine(bpy.types.RenderEngine): + __label__ = "Povray" + DELAY = 0.02 + def _export(self, scene): + import tempfile + + self.temp_file_in = tempfile.mktemp(suffix='.pov') + self.temp_file_out = tempfile.mktemp(suffix='.ppm') + self.temp_file_ini = tempfile.mktemp(suffix='.ini') + + def info_callback(txt): + self.update_stats("", "POVRAY: " + txt) + + write_pov(self.temp_file_in, scene, info_callback) + + def _render(self): + + try: os.remove(self.temp_file_out) # so as not to load the old file + except: pass + + write_pov_ini(self.temp_file_ini, self.temp_file_in, self.temp_file_out) + + print ("***-STARTING-***") + # This works too but means we have to wait until its done + # os.system('povray %s' % self.temp_file_ini) + + self.process = subprocess.Popen(["povray", self.temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE + print ("***-DONE-***") + + def _cleanup(self): + for f in (self.temp_file_in, self.temp_file_ini, self.temp_file_out): + try: os.remove(f) + except: pass + + self.update_stats("", "") + + def render(self, scene): + + self.update_stats("", "POVRAY: Exporting data from Blender") + self._export(scene) + self.update_stats("", "POVRAY: Parsing File") + self._render() + + r = scene.render_data + + # compute resolution + x= int(r.resolution_x*r.resolution_percentage*0.01) + y= int(r.resolution_y*r.resolution_percentage*0.01) + + + + # Wait for the file to be created + while not os.path.exists(self.temp_file_out): + time.sleep(self.DELAY) + + self.update_stats("", "POVRAY: Rendering") + + prev_size = -1 + + def update_image(): + result = self.begin_result(0, 0, x, y) + lay = result.layers[0] + # possible the image wont load early on. + try: lay.rect_from_file(self.temp_file_out, 0, 0) + except: pass + self.end_result(result) + + # Update while povray renders + while True: + + # test if povray exists + if self.process.poll() != None: + update_image(); + break + + # user exit + if self.test_break(): + try: # It might not be running + self.process.terminate() + except: + pass + + break + + # Would be nice to redirect the output + # stdout_value, stderr_value = self.process.communicate() # locks + + + # check if the file updated + new_size = os.path.getsize(self.temp_file_out) + + if new_size != prev_size: + update_image() + prev_size = new_size + + time.sleep(self.DELAY) + + self._cleanup() + + +bpy.types.register(PovrayRenderEngine) From 0b3eb956c4f2faa3c4ae7153fe62da5eda80a751 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 06:12:58 +0000 Subject: [PATCH 416/512] wrote images with the wrong extension (still ran), but is confusing. --- release/io/engine_render_pov.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index 550f9889f6b..4d6c508e2ca 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -468,7 +468,7 @@ class PovrayRenderEngine(bpy.types.RenderEngine): import tempfile self.temp_file_in = tempfile.mktemp(suffix='.pov') - self.temp_file_out = tempfile.mktemp(suffix='.ppm') + self.temp_file_out = tempfile.mktemp(suffix='.tga') self.temp_file_ini = tempfile.mktemp(suffix='.ini') def info_callback(txt): From 9cbdf73cf0ce53bdf256b1b28efbb066a71e43b9 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 28 Jul 2009 06:26:10 +0000 Subject: [PATCH 417/512] 2.5 Part 2 of Layout Code Cleanup: * Cleanup of Modifier and Text Data Panels. * Made some small layout tweaks. * Added missing RNA properties for Cast Modifier. --- release/ui/buttons_data_modifier.py | 223 +++++++++--------- release/ui/buttons_data_text.py | 102 ++++---- source/blender/makesrna/intern/rna_modifier.c | 21 ++ 3 files changed, 188 insertions(+), 158 deletions(-) diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py index c4d2aea06e5..909677d61f0 100644 --- a/release/ui/buttons_data_modifier.py +++ b/release/ui/buttons_data_modifier.py @@ -10,8 +10,9 @@ class DATA_PT_modifiers(DataButtonsPanel): __label__ = "Modifiers" def draw(self, context): - ob = context.object layout = self.layout + + ob = context.object row = layout.row() row.item_menu_enumO("object.modifier_add", "type") @@ -84,9 +85,11 @@ class DATA_PT_modifiers(DataButtonsPanel): def armature(self, layout, ob, md): layout.itemR(md, "object") + row = layout.row() row.item_pointerR(md, "vertex_group", ob, "vertex_groups") row.itemR(md, "invert") + flow = layout.column_flow() flow.itemR(md, "use_vertex_groups", text="Vertex Groups") flow.itemR(md, "use_bone_envelopes", text="Bone Envelopes") @@ -107,34 +110,31 @@ class DATA_PT_modifiers(DataButtonsPanel): split = layout.split() col = split.column() - col = col.column() col.itemR(md, "constant_offset") - colsub = col.column() - colsub.active = md.constant_offset - colsub.itemR(md, "constant_offset_displacement", text="") + sub = col.column() + sub.active = md.constant_offset + sub.itemR(md, "constant_offset_displacement", text="") col.itemS() - sub = col.row().itemR(md, "merge_adjacent_vertices", text="Merge") - colsub = col.column() - colsub.active = md.merge_adjacent_vertices - colsub.itemR(md, "merge_end_vertices", text="First Last") - colsub.itemR(md, "merge_distance", text="Distance") + col.itemR(md, "merge_adjacent_vertices", text="Merge") + sub = col.column() + sub.active = md.merge_adjacent_vertices + sub.itemR(md, "merge_end_vertices", text="First Last") + sub.itemR(md, "merge_distance", text="Distance") col = split.column() - col = col.column() col.itemR(md, "relative_offset") - colsub = col.column() - colsub.active = md.relative_offset - colsub.itemR(md, "relative_offset_displacement", text="") + sub = col.column() + sub.active = md.relative_offset + sub.itemR(md, "relative_offset_displacement", text="") col.itemS() - col = col.column() col.itemR(md, "add_offset_object") - colsub = col.column() - colsub.active = md.add_offset_object - colsub.itemR(md, "offset_object", text="") + sub = col.column() + sub.active = md.add_offset_object + sub.itemR(md, "offset_object", text="") layout.itemS() @@ -148,14 +148,11 @@ class DATA_PT_modifiers(DataButtonsPanel): row.itemR(md, "only_vertices") layout.itemL(text="Limit Method:") - row = layout.row() - row.itemR(md, "limit_method", expand=True) + layout.row().itemR(md, "limit_method", expand=True) if md.limit_method == 'ANGLE': - row = layout.row() - row.itemR(md, "angle") + layout.itemR(md, "angle") elif md.limit_method == 'WEIGHT': - row = layout.row() - row.itemR(md, "edge_weight_method", expand=True) + layout.row().itemR(md, "edge_weight_method", expand=True) def boolean(self, layout, ob, md): layout.itemR(md, "operation") @@ -170,23 +167,27 @@ class DATA_PT_modifiers(DataButtonsPanel): col = split.column() col.itemR(md, "randomize") - colsub = col.column() - colsub.active = md.randomize - colsub.itemR(md, "seed") - - - + sub = col.column() + sub.active = md.randomize + sub.itemR(md, "seed") + def cast(self, layout, ob, md): layout.itemR(md, "cast_type") - col = layout.column_flow() - col.itemR(md, "x") - col.itemR(md, "y") - col.itemR(md, "z") - col.itemR(md, "factor") - col.itemR(md, "radius") - col.itemR(md, "size") + layout.itemR(md, "object") + if md.object: + layout.itemR(md, "use_transform") + + flow = layout.column_flow() + flow.itemR(md, "x") + flow.itemR(md, "y") + flow.itemR(md, "z") + flow.itemR(md, "factor") + flow.itemR(md, "radius") + flow.itemR(md, "size") + + layout.itemR(md, "from_radius") + layout.item_pointerR(md, "vertex_group", ob, "vertex_groups") - #Missing: "OB" and "From Radius" def cloth(self, layout, ob, md): layout.itemL(text="See Cloth panel.") @@ -220,9 +221,10 @@ class DATA_PT_modifiers(DataButtonsPanel): col = split.column() col.itemR(md, "use_edge_angle", text="Edge Angle") - colsub = col.column() - colsub.active = md.use_edge_angle - colsub.itemR(md, "split_angle") + sub = col.column() + sub.active = md.use_edge_angle + sub.itemR(md, "split_angle") + col = split.column() col.itemR(md, "use_sharp", text="Sharp Edges") @@ -233,7 +235,7 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "unborn") layout.itemR(md, "alive") layout.itemR(md, "dead") - # Missing: "Refresh" and "Clear Vertex Group" ? + # Missing: "Refresh" and "Clear Vertex Group" Operator def fluid(self, layout, ob, md): layout.itemL(text="See Fluid panel.") @@ -243,7 +245,7 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "force", slider=True) layout.itemR(md, "object") layout.item_pointerR(md, "vertex_group", ob, "vertex_groups") - # Missing: "Reset" and "Recenter" + # Missing: "Reset" and "Recenter" Operator def lattice(self, layout, ob, md): layout.itemR(md, "object") @@ -263,6 +265,7 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "invert") layout.itemS() + layout.itemO("object.modifier_mdef_bind", text="Bind") row = layout.row() row.itemR(md, "precision") @@ -272,17 +275,19 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "merge_limit") split = layout.split() - sub = split.column() - sub.itemR(md, "x") - sub.itemR(md, "y") - sub.itemR(md, "z") - sub = split.column() - sub.itemL(text="Textures:") - sub.itemR(md, "mirror_u") - sub.itemR(md, "mirror_v") - sub = split.column() - sub.itemR(md, "clip", text="Do Clipping") - sub.itemR(md, "mirror_vertex_groups", text="Vertex Group") + col = split.column() + col.itemR(md, "x") + col.itemR(md, "y") + col.itemR(md, "z") + + col = split.column() + col.itemL(text="Textures:") + col.itemR(md, "mirror_u") + col.itemR(md, "mirror_v") + + col = split.column() + col.itemR(md, "clip", text="Do Clipping") + col.itemR(md, "mirror_vertex_groups", text="Vertex Group") layout.itemR(md, "mirror_object") @@ -295,19 +300,19 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "object") layout.itemR(md, "particle_system_number") - col = layout.column_flow() - col.itemR(md, "normal") - col.itemR(md, "children") - col.itemR(md, "size") - col.itemR(md, "path") + flow = layout.column_flow() + flow.itemR(md, "normal") + flow.itemR(md, "children") + flow.itemR(md, "size") + flow.itemR(md, "path") if md.path: - col.itemR(md, "keep_shape") - col.itemR(md, "unborn") - col.itemR(md, "alive") - col.itemR(md, "dead") - col.itemL(md, "") + flow.itemR(md, "keep_shape") + flow.itemR(md, "unborn") + flow.itemR(md, "alive") + flow.itemR(md, "dead") + flow.itemL(md, "") if md.path: - col.itemR(md, "axis", text="") + flow.itemR(md, "axis", text="") if md.path: row = layout.row() @@ -332,14 +337,13 @@ class DATA_PT_modifiers(DataButtonsPanel): row.itemR(md, "y") row.itemR(md, "z") - col = layout.column_flow() - col.itemR(md, "negative") - col.itemR(md, "positive") - col.itemR(md, "cull_front_faces") - col.itemR(md, "cull_back_faces") + flow = layout.column_flow() + flow.itemR(md, "negative") + flow.itemR(md, "positive") + flow.itemR(md, "cull_front_faces") + flow.itemR(md, "cull_back_faces") elif md.mode == 'NEAREST_SURFACEPOINT': layout.itemR(md, "keep_above_surface") - # To-Do: Validate if structs def simpledeform(self, layout, ob, md): layout.itemR(md, "mode") @@ -354,13 +358,15 @@ class DATA_PT_modifiers(DataButtonsPanel): def smooth(self, layout, ob, md): split = layout.split() - sub = split.column() - sub.itemR(md, "x") - sub.itemR(md, "y") - sub.itemR(md, "z") - sub = split.column() - sub.itemR(md, "factor") - sub.itemR(md, "repeat") + + col = split.column() + col.itemR(md, "x") + col.itemR(md, "y") + col.itemR(md, "z") + + col = split.column() + col.itemR(md, "factor") + col.itemR(md, "repeat") layout.item_pointerR(md, "vertex_group", ob, "vertex_groups") @@ -369,11 +375,12 @@ class DATA_PT_modifiers(DataButtonsPanel): def subsurf(self, layout, ob, md): layout.itemR(md, "subdivision_type") - col = layout.column_flow() - col.itemR(md, "levels", text="Preview") - col.itemR(md, "render_levels", text="Render") - col.itemR(md, "optimal_draw", text="Optimal Display") - col.itemR(md, "subsurf_uv") + + flow = layout.column_flow() + flow.itemR(md, "levels", text="Preview") + flow.itemR(md, "render_levels", text="Render") + flow.itemR(md, "optimal_draw", text="Optimal Display") + flow.itemR(md, "subsurf_uv") def surface(self, layout, ob, md): layout.itemL(text="See Fields panel.") @@ -381,7 +388,7 @@ class DATA_PT_modifiers(DataButtonsPanel): def uvproject(self, layout, ob, md): if ob.type == 'MESH': layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers") - layout.itemR(md, "projectors") + #layout.itemR(md, "projectors") layout.itemR(md, "image") layout.itemR(md, "horizontal_aspect_ratio") layout.itemR(md, "vertical_aspect_ratio") @@ -391,27 +398,27 @@ class DATA_PT_modifiers(DataButtonsPanel): def wave(self, layout, ob, md): split = layout.split() - sub = split.column() - sub.itemL(text="Motion:") - sub.itemR(md, "x") - sub.itemR(md, "y") - sub.itemR(md, "cyclic") + col = split.column() + col.itemL(text="Motion:") + col.itemR(md, "x") + col.itemR(md, "y") + col.itemR(md, "cyclic") - sub = split.column() - sub.itemR(md, "normals") - row = sub.row(align=True) - row.active = md.normals - row.itemR(md, "x_normal", text="X", toggle=True) - row.itemR(md, "y_normal", text="Y", toggle=True) - row.itemR(md, "z_normal", text="Z", toggle=True) + col = split.column() + col.itemR(md, "normals") + sub = col.row(align=True) + sub.active = md.normals + sub.itemR(md, "x_normal", text="X", toggle=True) + sub.itemR(md, "y_normal", text="Y", toggle=True) + sub.itemR(md, "z_normal", text="Z", toggle=True) - col = layout.column_flow() - col.itemR(md, "time_offset") - col.itemR(md, "lifetime") - col.itemR(md, "damping_time") - col.itemR(md, "falloff_radius") - col.itemR(md, "start_position_x") - col.itemR(md, "start_position_y") + flow = layout.column_flow() + flow.itemR(md, "time_offset") + flow.itemR(md, "lifetime") + flow.itemR(md, "damping_time") + flow.itemR(md, "falloff_radius") + flow.itemR(md, "start_position_x") + flow.itemR(md, "start_position_y") layout.itemR(md, "start_position_object") layout.item_pointerR(md, "vertex_group", ob, "vertex_groups") @@ -422,10 +429,10 @@ class DATA_PT_modifiers(DataButtonsPanel): elif md.texture_coordinates == 'OBJECT': layout.itemR(md, "texture_coordinates_object") - col = layout.column_flow() - col.itemR(md, "speed", slider=True) - col.itemR(md, "height", slider=True) - col.itemR(md, "width", slider=True) - col.itemR(md, "narrowness", slider=True) + flow = layout.column_flow() + flow.itemR(md, "speed", slider=True) + flow.itemR(md, "height", slider=True) + flow.itemR(md, "width", slider=True) + flow.itemR(md, "narrowness", slider=True) bpy.types.register(DATA_PT_modifiers) diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py index 9fabf25b11b..757e61307df 100644 --- a/release/ui/buttons_data_text.py +++ b/release/ui/buttons_data_text.py @@ -43,81 +43,82 @@ class DATA_PT_shape_text(DataButtonsPanel): split = layout.split() - sub = split.column() - sub.itemL(text="Caps:") - sub.itemR(curve, "front") - sub.itemR(curve, "back") + col = split.column() + col.itemL(text="Caps:") + col.itemR(curve, "front") + col.itemR(curve, "back") + col.itemL(text="Textures:") + col.itemR(curve, "uv_orco") + col.itemR(curve, "auto_texspace") - sub.itemL(text="Textures:") - sub.itemR(curve, "uv_orco") - sub.itemR(curve, "auto_texspace") - - sub = split.column() - sub.itemL(text="Resolution:") + col = split.column() + col.itemL(text="Resolution:") + sub = col.column(align=True) sub.itemR(curve, "resolution_u", text="Preview U") - sub.itemR(curve, "resolution_v", text="Preview V") sub.itemR(curve, "render_resolution_u", text="Render U") + sub = col.column(align=True) + sub.itemR(curve, "resolution_v", text="Preview V") sub.itemR(curve, "render_resolution_v", text="Render V") - - sub.itemL(text="Display:") - sub.itemR(curve, "fast") + col.itemL(text="Display:") + col.itemR(curve, "fast") class DATA_PT_geometry_text(DataButtonsPanel): __label__ = "Geometry" def draw(self, context): layout = self.layout + curve = context.curve split = layout.split() - sub = split.column() - sub.itemL(text="Modification:") - sub.itemR(curve, "width") - sub.itemR(curve, "extrude") - sub.itemR(curve, "taper_object") + col = split.column() + col.itemL(text="Modification:") + col.itemR(curve, "width") + col.itemR(curve, "extrude") + col.itemR(curve, "taper_object") - sub = split.column() - sub.itemL(text="Bevel:") - sub.itemR(curve, "bevel_depth", text="Depth") - sub.itemR(curve, "bevel_resolution", text="Resolution") - sub.itemR(curve, "bevel_object") + col = split.column() + col.itemL(text="Bevel:") + col.itemR(curve, "bevel_depth", text="Depth") + col.itemR(curve, "bevel_resolution", text="Resolution") + col.itemR(curve, "bevel_object") class DATA_PT_font(DataButtonsPanel): __label__ = "Font" def draw(self, context): layout = self.layout + text = context.curve - layout.row() layout.itemR(text, "font") split = layout.split() - sub = split.column() - # sub.itemR(text, "style") - # sub.itemR(text, "bold") - # sub.itemR(text, "italic") - # sub.itemR(text, "underline") + col = split.column() + # col.itemR(text, "style") + # col.itemR(text, "bold") + # col.itemR(text, "italic") + # col.itemR(text, "underline") # ToDo: These settings are in a sub struct (Edit Format). - sub.itemR(text, "text_size") - sub.itemR(text, "shear") + col.itemR(text, "text_size") + col.itemR(text, "shear") - sub = split.column() - sub.itemR(text, "text_on_curve") - sub.itemR(text, "family") - sub.itemL(text="Underline:") - sub.itemR(text, "ul_position", text="Position") - sub.itemR(text, "ul_height", text="Height") - - # sub.itemR(text, "edit_format") + col = split.column() + col.itemR(text, "text_on_curve") + col.itemR(text, "family") + col.itemL(text="Underline:") + col.itemR(text, "ul_position", text="Position") + col.itemR(text, "ul_height", text="Height") + # col.itemR(text, "edit_format") class DATA_PT_paragraph(DataButtonsPanel): __label__ = "Paragraph" def draw(self, context): layout = self.layout + text = context.curve layout.itemL(text="Align:") @@ -125,17 +126,17 @@ class DATA_PT_paragraph(DataButtonsPanel): split = layout.split() - sub = split.column() - sub.itemL(text="Spacing:") - sub.itemR(text, "spacing", text="Character") - sub.itemR(text, "word_spacing", text="Word") - sub.itemR(text, "line_dist", text="Line") + col = split.column(align=True) + col.itemL(text="Spacing:") + col.itemR(text, "spacing", text="Character") + col.itemR(text, "word_spacing", text="Word") + col.itemR(text, "line_dist", text="Line") - sub = split.column() - sub.itemL(text="Offset:") - sub.itemR(text, "x_offset", text="X") - sub.itemR(text, "y_offset", text="Y") - #sub.itemR(text, "wrap") + col = split.column(align=True) + col.itemL(text="Offset:") + col.itemR(text, "x_offset", text="X") + col.itemR(text, "y_offset", text="Y") + #col.itemR(text, "wrap") """ class DATA_PT_textboxes(DataButtonsPanel): @@ -143,6 +144,7 @@ class DATA_PT_textboxes(DataButtonsPanel): def draw(self, context): layout = self.layout + text = context.curve """ diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index b3dfc6a8dd6..c89cc4ad63e 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -311,6 +311,11 @@ static void rna_CurveModifier_object_set(PointerRNA *ptr, PointerRNA value) modifier_object_set(&((CurveModifierData*)ptr->data)->object, OB_CURVE, value); } +static void rna_CastModifier_object_set(PointerRNA *ptr, PointerRNA value) +{ + modifier_object_set(&((CastModifierData*)ptr->data)->object, OB_MESH, value); +} + static void rna_ArmatureModifier_object_set(PointerRNA *ptr, PointerRNA value) { modifier_object_set(&((ArmatureModifierData*)ptr->data)->object, OB_ARMATURE, value); @@ -1203,6 +1208,12 @@ static void rna_def_modifier_cast(BlenderRNA *brna) RNA_def_property_enum_items(prop, prop_cast_type_items); RNA_def_property_ui_text(prop, "Cast Type", ""); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_ui_text(prop, "Object", "Control object: if available, its location determines the center of the effect"); + RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_dependency_update"); prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_X); @@ -1219,6 +1230,16 @@ static void rna_def_modifier_cast(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Z", ""); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); + prop= RNA_def_property(srna, "from_radius", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_SIZE_FROM_RADIUS); + RNA_def_property_ui_text(prop, "From Radius", "Use radius as size of projection shape (0 = auto)"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "use_transform", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_USE_OB_TRANSFORM); + RNA_def_property_ui_text(prop, "Use transform", "Use object transform to control projection shape"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); + prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fac"); RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); From 61178b19eabdc3e3833c167cdc8128db8994f9ca Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 28 Jul 2009 06:50:30 +0000 Subject: [PATCH 418/512] 2.5 - Anim Editor cleanups + Graph Editor Clutter Reduction * Cleaned up some parts of the code that were unused/could be done a bit nicer * Added a new option for only showing the keyframes of the selected F-Curves in the Graph Editor, as another way of reducing the clutter. --- .../blender/editors/animation/anim_channels.c | 4 +- source/blender/editors/animation/anim_draw.c | 38 ++---------- .../blender/editors/animation/anim_filter.c | 42 +++++++++----- source/blender/editors/include/ED_anim_api.h | 30 +++++----- .../blender/editors/space_graph/graph_draw.c | 58 +++++++------------ .../blender/editors/space_graph/graph_edit.c | 2 +- .../editors/space_graph/graph_header.c | 1 + .../editors/space_graph/graph_select.c | 9 ++- .../blender/editors/space_nla/nla_channels.c | 6 +- source/blender/editors/space_nla/nla_draw.c | 8 +-- source/blender/editors/space_nla/nla_edit.c | 12 ++-- source/blender/makesdna/DNA_action_types.h | 2 + source/blender/makesdna/DNA_space_types.h | 2 + source/blender/makesrna/intern/rna_space.c | 4 ++ 14 files changed, 103 insertions(+), 115 deletions(-) diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 6b31fbe25a9..f518b5b0a2e 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -722,7 +722,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *op) /* only groups - don't check other types yet, since they may no-longer exist */ if (ale->type == ANIMTYPE_GROUP) { bActionGroup *agrp= (bActionGroup *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; FCurve *fcu, *fcn; /* skip this group if no AnimData available, as we can't safely remove the F-Curves */ @@ -760,7 +760,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *op) for (ale= anim_data.first; ale; ale= ale->next) { /* only F-Curves, and only if we can identify its parent */ if (ale->type == ANIMTYPE_FCURVE) { - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; FCurve *fcu= (FCurve *)ale->data; /* if no AnimData, we've got nowhere to remove the F-Curve from */ diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 6c39e670f5c..6388106fdb5 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -242,40 +242,10 @@ AnimData *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale) return NULL; /* handling depends on the type of animation-context we've got */ - if (ale && ale->id) - return BKE_animdata_from_id(ale->id); - - /* no appropriate object found */ - return NULL; -} - -/* Set/clear temporary mapping of coordinates from 'local-action' time to 'global-nla-scaled' time - * - the old mapping is stored in a static var, but that shouldn't be too bad as UI drawing - * (where this is called) is single-threaded anyway - */ -// XXX was called: map_active_strip() -// TODO: should this be depreceated? -void ANIM_nla_mapping_draw(gla2DDrawInfo *di, AnimData *adt, short restore) -{ - static rctf stored; - - if (restore) { - /* restore un-mapped coordinates */ - gla2DSetMap(di, &stored); - } - else { - /* set mapped coordinates */ - rctf map; - - gla2DGetMap(di, &stored); - map= stored; - - map.xmin= BKE_nla_tweakedit_remap(adt, map.xmin, NLATIME_CONVERT_MAP); - map.xmax= BKE_nla_tweakedit_remap(adt, map.xmax, NLATIME_CONVERT_MAP); - - if (map.xmin == map.xmax) map.xmax += 1.0f; - gla2DSetMap(di, &map); - } + if (ale) + return ale->adt; + else + return NULL; } /* ------------------- */ diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 5676fee5bac..2e755a360fa 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -17,11 +17,11 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2008 Blender Foundation. + * The Original Code is Copyright (C) 2008 Blender Foundation, Joshua Leung * All rights reserved. * * - * Contributor(s): Joshua Leung + * Contributor(s): Joshua Leung (original author) * * ***** END GPL LICENSE BLOCK ***** */ @@ -33,15 +33,16 @@ * for cases to ignore. * * While this is primarily used for the Action/Dopesheet Editor (and its accessory modes), - * the IPO Editor also uses this for it's channel list and for determining which curves - * are being edited. + * the Graph Editor also uses this for its channel list and for determining which curves + * are being edited. Likewise, the NLA Editor also uses this for its channel list and in + * its operators. * * Note: much of the original system this was based on was built before the creation of the RNA * system. In future, it would be interesting to replace some parts of this code with RNA queries, * however, RNA does not eliminate some of the boiler-plate reduction benefits presented by this * system, so if any such work does occur, it should only be used for the internals used here... * - * -- Joshua Leung, Dec 2008 + * -- Joshua Leung, Dec 2008 (Last revision July 2009) */ #include @@ -73,6 +74,7 @@ #include "BLI_blenlib.h" +#include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_key.h" @@ -205,6 +207,12 @@ static short graphedit_get_context (bAnimContext *ac, SpaceIpo *sipo) if (sipo->ads == NULL) sipo->ads= MEM_callocN(sizeof(bDopeSheet), "GraphEdit DopeSheet"); + /* set settings for Graph Editor - "Selected = Editable" */ + if (sipo->flag & SIPO_SELCUVERTSONLY) + sipo->ads->filterflag |= ADS_FILTER_SELEDIT; + else + sipo->ads->filterflag &= ~ADS_FILTER_SELEDIT; + /* sync settings with current view status, then return appropriate data */ switch (sipo->mode) { case SIPO_MODE_ANIMATION: /* Animation F-Curve Editor */ @@ -403,11 +411,20 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) -/* quick macro to test if a anim-channel (F-Curve, Group, etc.) is selected in an acceptable way */ +/* quick macro to test if an anim-channel (F-Curve, Group, etc.) is selected in an acceptable way */ #define ANIMCHANNEL_SELOK(test_func) \ ( !(filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) || \ ((filter_mode & ANIMFILTER_SEL) && test_func) || \ ((filter_mode & ANIMFILTER_UNSEL) && test_func==0) ) + +/* quick macro to test if an anim-channel (F-Curve) is selected ok for editing purposes + * - _SELEDIT means that only selected curves will have visible+editable keyframes + */ +// FIXME: this doesn't work cleanly yet... +#define ANIMCHANNEL_SELEDITOK(test_func) \ + ( !(filter_mode & ANIMFILTER_SELEDIT) || \ + (filter_mode & ANIMFILTER_CHANNELS) || \ + (test_func) ) /* ----------- 'Private' Stuff --------------- */ @@ -430,6 +447,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->ownertype= ownertype; ale->id= owner_id; + ale->adt= BKE_animdata_from_id(owner_id); /* do specifics */ switch (datatype) { @@ -649,7 +667,7 @@ static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionG /* only work with this channel and its subchannels if it is editable */ if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_FCU(fcu)) { /* only include this curve if selected in a way consistent with the filtering requirements */ - if ( ANIMCHANNEL_SELOK(SEL_FCU(fcu)) ) { + if ( ANIMCHANNEL_SELOK(SEL_FCU(fcu)) && ANIMCHANNEL_SELEDITOK(SEL_FCU(fcu)) ) { /* only include if this curve is active */ if (!(filter_mode & ANIMFILTER_ACTIVE) || (fcu->flag & FCURVE_ACTIVE)) { ale= make_new_animlistelem(fcu, ANIMTYPE_FCURVE, owner, ownertype, owner_id); @@ -1628,10 +1646,10 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int dataOk= 0; break; } - + /* particles */ partOk = 0; - if(!(ads->filterflag & ADS_FILTER_NOPART) && ob->particlesystem.first) { + if (!(ads->filterflag & ADS_FILTER_NOPART) && ob->particlesystem.first) { ParticleSystem *psys = ob->particlesystem.first; for(; psys; psys=psys->next) { if (psys->part) { @@ -1653,7 +1671,6 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int break; } } - /* check if all bad (i.e. nothing to show) */ if (!actOk && !keyOk && !dataOk && !matOk && !partOk) @@ -1705,17 +1722,16 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int dataOk= 0; break; } - + /* particles */ partOk = 0; - if(ob->particlesystem.first) { + if (ob->particlesystem.first) { ParticleSystem *psys = ob->particlesystem.first; for(; psys; psys=psys->next) { if(psys->part && ANIMDATA_HAS_KEYS(psys->part)) { partOk = 1; break; } - } } diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 854b5390e8c..8f7c0ceeab6 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -30,15 +30,18 @@ #define ED_ANIM_API_H struct ID; -struct Scene; struct ListBase; +struct AnimData; + struct bContext; struct wmWindowManager; struct ScrArea; struct ARegion; struct View2D; -struct gla2DDrawInfo; + +struct Scene; struct Object; + struct bActionGroup; struct FCurve; struct FModifier; @@ -88,18 +91,19 @@ typedef enum eAnimCont_Types { typedef struct bAnimListElem { struct bAnimListElem *next, *prev; - void *data; /* source data this elem represents */ - int type; /* one of the ANIMTYPE_* values */ - int flag; /* copy of elem's flags for quick access */ - int index; /* copy of adrcode where applicable */ + void *data; /* source data this elem represents */ + int type; /* one of the ANIMTYPE_* values */ + int flag; /* copy of elem's flags for quick access */ + int index; /* copy of adrcode where applicable */ - void *key_data; /* motion data - mostly F-Curves, but can be other types too */ - short datatype; /* type of motion data to expect */ + void *key_data; /* motion data - mostly F-Curves, but can be other types too */ + short datatype; /* type of motion data to expect */ - struct ID *id; /* ID block that channel is attached to (may be used */ + struct ID *id; /* ID block that channel is attached to */ + struct AnimData *adt; /* source of the animation data attached to ID block (for convenience) */ - void *owner; /* group or channel which acts as this channel's owner */ - short ownertype; /* type of owner */ + void *owner; /* group or channel which acts as this channel's owner */ + short ownertype; /* type of owner */ } bAnimListElem; @@ -166,6 +170,7 @@ typedef enum eAnimFilter_Flags { ANIMFILTER_ACTIVE = (1<<8), /* channel should be 'active' */ ANIMFILTER_ANIMDATA = (1<<9), /* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */ ANIMFILTER_NLATRACKS = (1<<10), /* only include NLA-tracks */ + ANIMFILTER_SELEDIT = (1<<11), /* link editability with selected status */ } eAnimFilter_Flags; @@ -341,9 +346,6 @@ void ipo_rainbow(int cur, int tot, float *out); /* Obtain the AnimData block providing NLA-scaling for the given channel if applicable */ struct AnimData *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale); -/* Set/clear temporary mapping of coordinates from 'local-action' time to 'global-nla-mapped' time */ -void ANIM_nla_mapping_draw(struct gla2DDrawInfo *di, struct AnimData *adt, short restore); - /* Apply/Unapply NLA mapping to all keyframes in the nominated F-Curve */ void ANIM_nla_mapping_apply_fcurve(struct AnimData *adt, struct FCurve *fcu, short restore, short only_keys); diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 67a93b2e786..105ecf23c3e 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -723,24 +723,6 @@ static void draw_fcurve_curve_bezts (FCurve *fcu, View2D *v2d, View2DGrid *grid) glEnd(); } -#if 0 -static void draw_ipokey(SpaceIpo *sipo, ARegion *ar) -{ - View2D *v2d= &ar->v2d; - IpoKey *ik; - - glBegin(GL_LINES); - for (ik= sipo->ipokey.first; ik; ik= ik->next) { - if (ik->flag & SELECT) glColor3ub(0xFF, 0xFF, 0x99); - else glColor3ub(0xAA, 0xAA, 0x55); - - glVertex2f(ik->val, v2d->cur.ymin); - glVertex2f(ik->val, v2d->cur.ymax); - } - glEnd(); -} -#endif - /* Public Curve-Drawing API ---------------- */ /* Draw the 'ghost' F-Curves (i.e. snapshots of the curve) */ @@ -855,26 +837,30 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri glDisable(GL_BLEND); } - /* 2) draw handles and vertices as appropriate based on active */ - if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) { - /* only draw controls if this is the active modifier */ - if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) { - switch (fcm->type) { - case FMODIFIER_TYPE_ENVELOPE: /* envelope */ - draw_fcurve_modifier_controls_envelope(fcu, fcm, &ar->v2d); - break; + /* 2) draw handles and vertices as appropriate based on active + * - if the option to only show controls if the F-Curve is selected is enabled, we must obey this + */ + if (!(sipo->flag & SIPO_SELCUVERTSONLY) || (fcu->flag & FCURVE_SELECTED)) { + if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) { + /* only draw controls if this is the active modifier */ + if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) { + switch (fcm->type) { + case FMODIFIER_TYPE_ENVELOPE: /* envelope */ + draw_fcurve_modifier_controls_envelope(fcu, fcm, &ar->v2d); + break; + } } } - } - else if ( ((fcu->bezt) || (fcu->fpt)) && (fcu->totvert) ) { - if (fcu->bezt) { - /* only draw handles/vertices on keyframes */ - draw_fcurve_handles(sipo, ar, fcu); - draw_fcurve_vertices(sipo, ar, fcu); - } - else { - /* samples: should we only draw two indicators at either end as indicators? */ - draw_fcurve_samples(sipo, ar, fcu); + else if ( ((fcu->bezt) || (fcu->fpt)) && (fcu->totvert) ) { + if (fcu->bezt) { + /* only draw handles/vertices on keyframes */ + draw_fcurve_handles(sipo, ar, fcu); + draw_fcurve_vertices(sipo, ar, fcu); + } + else { + /* samples: should we only draw two indicators at either end as indicators? */ + draw_fcurve_samples(sipo, ar, fcu); + } } } diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 24c7a0c5c23..37389b32b3a 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -1386,7 +1386,7 @@ static int graphkeys_euler_filter_exec (bContext *C, wmOperator *op) */ /* step 1: extract only the rotation f-curves */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index e4ce889a188..a0ac64e3672 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -87,6 +87,7 @@ static void graph_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) else uiItemO(layout, "Show Handles", ICON_CHECKBOX_HLT, "GRAPH_OT_handles_view_toggle"); + uiItemR(layout, NULL, 0, &spaceptr, "only_selected_curves_handles", 0, 0, 0); uiItemR(layout, NULL, 0, &spaceptr, "automerge_keyframes", 0, 0, 0); if (sipo->flag & SIPO_DRAWTIME) diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index c4885d095ed..43f35862315 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -567,8 +567,13 @@ static short findnearest_fcurve_vert (bAnimContext *ac, int mval[2], FCurve **fc *fcurve= 0; *bezt= 0; - /* get curves to search through */ + /* get curves to search through + * - if the option to only show keyframes that belong to selected F-Curves is enabled, + * include the 'only selected' flag... + */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_CURVESONLY); + if (sipo->flag & SIPO_SELCUVERTSONLY) + filter |= ANIMFILTER_SEL; ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { @@ -718,7 +723,7 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short select_mode, s else { BeztEditFunc select_cb; BeztEditData bed; - + /* initialise keyframe editing data */ memset(&bed, 0, sizeof(BeztEditData)); diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 79c2c94719c..fae6d8ecd8b 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -247,7 +247,7 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho case ANIMTYPE_NLATRACK: { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; short offset; /* offset for start of channel (on LHS of channel-list) */ @@ -431,7 +431,7 @@ static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op) /* add tracks... */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; /* check if just adding a new track above this one, * or whether we're adding a new one to the top of the stack that this one belongs to @@ -497,7 +497,7 @@ static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *op) /* delete tracks */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; /* call delete on this track - deletes all strips too */ free_nlatrack(&adt->nla_tracks, nlt); diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 6809c7928ac..d36cc32fa84 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -520,7 +520,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) switch (ale->type) { case ANIMTYPE_NLATRACK: { - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip; int index; @@ -540,7 +540,7 @@ void draw_nla_main_data (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_NLAACTION: { - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; float color[4]; /* just draw a semi-shaded rect spanning the width of the viewable area if there's data, @@ -932,7 +932,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) } else if (group == 5) { /* Action Line */ - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { @@ -1018,7 +1018,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) /* draw NLA-action line 'status-icons' - only when there's an action */ if ((ale->type == ANIMTYPE_NLAACTION) && (ale->data)) { - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; offset += 16; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 64fed7c2433..d476852ef2d 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -312,7 +312,7 @@ static int nlaedit_add_actionclip_exec (bContext *C, wmOperator *op) /* for every active track, try to add strip to free space in track or to the top of the stack if no space */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaStrip *strip= NULL; /* create a new strip, and offset it to start on the current frame */ @@ -391,7 +391,7 @@ static int nlaedit_add_transition_exec (bContext *C, wmOperator *op) /* for each track, find pairs of strips to add transitions to */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaStrip *s1, *s2; /* get initial pair of strips */ @@ -505,7 +505,7 @@ static int nlaedit_add_meta_exec (bContext *C, wmOperator *op) /* for each track, find pairs of strips to add transitions to */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaStrip *strip; /* create meta-strips from the continuous chains of selected strips */ @@ -624,7 +624,7 @@ static int nlaedit_duplicate_exec (bContext *C, wmOperator *op) */ for (ale= anim_data.last; ale; ale= ale->prev) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaStrip *strip, *nstrip, *next; NlaTrack *track; @@ -866,7 +866,7 @@ static int nlaedit_split_exec (bContext *C, wmOperator *op) /* for each NLA-Track, split all selected strips into two strips */ for (ale= anim_data.first; ale; ale= ale->next) { NlaTrack *nlt= (NlaTrack *)ale->data; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaStrip *strip, *next; for (strip= nlt->strips.first; strip; strip= next) { @@ -1329,7 +1329,7 @@ static int nlaedit_snap_exec (bContext *C, wmOperator *op) /* since we may add tracks, perform this in reverse order */ for (ale= anim_data.last; ale; ale= ale->prev) { ListBase tmp_strips = {NULL, NULL}; - AnimData *adt= BKE_animdata_from_id(ale->id); + AnimData *adt= ale->adt; NlaTrack *nlt= (NlaTrack *)ale->data; NlaStrip *strip, *stripn; NlaTrack *track; diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 255b48bc9db..0c6c04273e3 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -299,8 +299,10 @@ typedef enum DOPESHEET_FILTERFLAG { /* general filtering */ ADS_FILTER_ONLYSEL = (1<<0), /* only include channels relating to selected data */ + /* temporary (runtime flags) */ ADS_FILTER_ONLYDRIVERS = (1<<1), /* for 'Drivers' editor - only include Driver data from AnimData */ ADS_FILTER_ONLYNLA = (1<<2), /* for 'NLA' editor - only include NLA data from AnimData */ + ADS_FILTER_SELEDIT = (1<<3), /* for Graph Editor - used to indicate whether to include a filtering flag or not */ /* datatype-based filtering */ ADS_FILTER_NOSHAPEKEYS = (1<<6), diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index c113f627da3..da662111898 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -709,6 +709,8 @@ enum FileSortTypeE { #define SIPO_NOHANDLES (1<<2) #define SIPO_NODRAWCFRANUM (1<<3) #define SIPO_DRAWTIME (1<<4) +#define SIPO_SELCUVERTSONLY (1<<5) +#define SIPO_DRAWNAMES (1<<6) /* SpaceIpo->mode (Graph Editor Mode) */ enum { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index b9d94d0103c..db05246c46d 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1060,6 +1060,10 @@ static void rna_def_space_graph(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_NOHANDLES); RNA_def_property_ui_text(prop, "Show Handles", "Show handles of Bezier control points."); + prop= RNA_def_property(srna, "only_selected_curves_handles", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SELCUVERTSONLY); + RNA_def_property_ui_text(prop, "Only Selected Curve Keyframes", "Only keyframes of selected F-Curves are visible and editable."); + /* editing */ prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL); From 17b0a794c7b72b9e18c029c4892b49dc9a381363 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 28 Jul 2009 07:24:25 +0000 Subject: [PATCH 419/512] NLA: Mute/Disable NLA Playback Exposed toggles (defined on AnimData) that will mute the evaluation of that AnimData block's NLA stack. It's active action will then be the only thing that gets evaluated. --- .../blender/editors/animation/anim_filter.c | 18 ++++ .../blender/editors/space_nla/nla_channels.c | 91 +++++++++++++++++-- source/blender/editors/space_nla/nla_draw.c | 85 ++++++++++++++++- 3 files changed, 185 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 2e755a360fa..5970cf481ac 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -459,6 +459,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= sce; ale->datatype= ALE_SCE; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_OBJECT: @@ -470,6 +472,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= ob; ale->datatype= ALE_OB; + + ale->adt= BKE_animdata_from_id(&ob->id); } break; case ANIMTYPE_FILLACTD: @@ -523,6 +527,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSLAM: @@ -534,6 +540,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSCAM: @@ -545,6 +553,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSCUR: @@ -556,6 +566,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSSKEY: @@ -567,6 +579,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSWOR: @@ -578,6 +592,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; case ANIMTYPE_DSPART: @@ -589,6 +605,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; + + ale->adt= BKE_animdata_from_id(data); } break; diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index fae6d8ecd8b..98dacc8ef5b 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -117,6 +117,7 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho case ANIMTYPE_SCENE: { Scene *sce= (Scene *)ale->data; + AnimData *adt= ale->data; if (x < 16) { /* toggle expand */ @@ -124,6 +125,12 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho notifierFlags |= ND_ANIMCHAN_EDIT; } + else if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + + notifierFlags |= ND_ANIMCHAN_EDIT; + } else { /* set selection status */ if (selectmode == SELECT_INVERT) { @@ -144,12 +151,19 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho Scene *sce= (Scene *)ads->source; Base *base= (Base *)ale->data; Object *ob= base->object; + AnimData *adt= ale->adt; if (x < 16) { /* toggle expand */ ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX notifierFlags |= ND_ANIMCHAN_EDIT; } + else if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + + notifierFlags |= ND_ANIMCHAN_EDIT; + } else if (nlaedit_is_tweakmode_on(ac) == 0) { /* set selection status */ if (selectmode == SELECT_INVERT) { @@ -197,49 +211,112 @@ static int mouse_nla_channels (bAnimContext *ac, float x, int channel_index, sho case ANIMTYPE_DSMAT: { Material *ma= (Material *)ale->data; - ma->flag ^= MA_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + ma->flag ^= MA_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSLAM: { Lamp *la= (Lamp *)ale->data; - la->flag ^= LA_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + la->flag ^= LA_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCAM: { Camera *ca= (Camera *)ale->data; - ca->flag ^= CAM_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + ca->flag ^= CAM_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSCUR: { Curve *cu= (Curve *)ale->data; - cu->flag ^= CU_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + cu->flag ^= CU_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSSKEY: { Key *key= (Key *)ale->data; - key->flag ^= KEYBLOCK_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + key->flag ^= KEYBLOCK_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSWOR: { World *wo= (World *)ale->data; - wo->flag ^= WO_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + wo->flag ^= WO_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; case ANIMTYPE_DSPART: { ParticleSettings *part= (ParticleSettings *)ale->data; - part->flag ^= PART_DS_EXPAND; + AnimData *adt= ale->adt; + + if ( (adt) && (x >= (NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) { + /* toggle mute */ + adt->flag ^= ADT_NLA_EVAL_OFF; + } + else { + /* toggle expand */ + part->flag ^= PART_DS_EXPAND; + } notifierFlags |= ND_ANIMCHAN_EDIT; } break; diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index d36cc32fa84..3feefcc11ab 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -638,6 +638,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_SCENE: /* scene */ { Scene *sce= (Scene *)ale->data; + AnimData *adt= ale->adt; group= 4; indent= 0; @@ -649,6 +650,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand= ICON_TRIA_DOWN; else expand= ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } sel = SEL_SCEC(sce); strcpy(name, sce->id.name+2); @@ -658,6 +667,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) { Base *base= (Base *)ale->data; Object *ob= base->object; + AnimData *adt= ale->adt; group= 4; indent= 0; @@ -674,6 +684,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) else expand= ICON_TRIA_RIGHT; + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } + sel = SEL_OBJC(base); strcpy(name, ob->id.name+2); } @@ -706,7 +724,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; - + strcpy(name, "Particles"); } break; @@ -715,6 +733,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */ { Material *ma = (Material *)ale->data; + AnimData *adt= ale->adt; group = 0; indent = 0; @@ -725,6 +744,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, ma->id.name+2); } @@ -732,6 +759,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSLAM: /* lamp (dopesheet) expand widget */ { Lamp *la = (Lamp *)ale->data; + AnimData *adt= ale->adt; group = 4; indent = 1; @@ -741,6 +769,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, la->id.name+2); } @@ -748,6 +784,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSCAM: /* camera (dopesheet) expand widget */ { Camera *ca = (Camera *)ale->data; + AnimData *adt= ale->adt; group = 4; indent = 1; @@ -757,6 +794,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, ca->id.name+2); } @@ -764,6 +809,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSCUR: /* curve (dopesheet) expand widget */ { Curve *cu = (Curve *)ale->data; + AnimData *adt= ale->adt; group = 4; indent = 1; @@ -773,6 +819,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, cu->id.name+2); } @@ -780,16 +834,25 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSSKEY: /* shapekeys (dopesheet) expand widget */ { Key *key= (Key *)ale->data; + AnimData *adt= ale->adt; group = 4; indent = 1; - special = ICON_SHAPEKEY_DATA; // XXX + special = ICON_SHAPEKEY_DATA; if (FILTER_SKE_OBJD(key)) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } + //sel = SEL_OBJC(base); strcpy(name, "Shape Keys"); } @@ -797,6 +860,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSWOR: /* world (dopesheet) expand widget */ { World *wo= (World *)ale->data; + AnimData *adt= ale->adt; group = 4; indent = 1; @@ -806,6 +870,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, wo->id.name+2); } @@ -813,6 +885,7 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) case ANIMTYPE_DSPART: /* particle (dopesheet) expand widget */ { ParticleSettings *part= (ParticleSettings*)ale->data; + AnimData *adt= ale->adt; group = 0; indent = 0; @@ -823,6 +896,14 @@ void draw_nla_channel_list (bAnimContext *ac, SpaceNla *snla, ARegion *ar) expand = ICON_TRIA_DOWN; else expand = ICON_TRIA_RIGHT; + + /* NLA evaluation on/off button */ + if (adt) { + if (adt->flag & ADT_NLA_EVAL_OFF) + mute = ICON_MUTE_IPO_ON; + else + mute = ICON_MUTE_IPO_OFF; + } strcpy(name, part->id.name+2); } From 1e237e7e2ffc6b5d22819abbc3a49c570ec3213d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 08:50:11 +0000 Subject: [PATCH 420/512] console copy text was upside down. made ctrl+space operator find and autocomplete in the console, need a bette way to make these key bindings co-exist. --- source/blender/editors/screen/screen_ops.c | 1 - source/blender/editors/space_console/console_draw.c | 2 +- .../blender/editors/space_console/console_intern.h | 7 ++++--- source/blender/editors/space_console/console_ops.c | 2 +- source/blender/editors/space_console/space_console.c | 4 ++-- source/blender/windowmanager/intern/wm_operators.c | 12 ++++++++++-- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 32f09f489a6..55668c5e9be 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -3111,7 +3111,6 @@ void ED_keymap_screen(wmWindowManager *wm) RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_screen_set", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", -1); WM_keymap_add_item(keymap, "SCREEN_OT_screen_full_area", UPARROWKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "SCREEN_OT_screen_full_area", DOWNARROWKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "SCREEN_OT_screen_full_area", SPACEKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "SCREEN_OT_screenshot", F3KEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "SCREEN_OT_screencast", F3KEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 68cb1cc4a01..4f225bb8fcb 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -59,7 +59,7 @@ #include "UI_interface.h" #include "UI_resources.h" -//#include "console_intern.h" +#include "console_intern.h" static void console_font_begin(SpaceConsole *sc) { diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 0a80059fc65..62caad83144 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -33,6 +33,7 @@ struct ConsoleLine; struct wmOperatorType; struct ReportList; +struct bContext; /* console_draw.c */ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); @@ -42,10 +43,10 @@ void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, struct Repo /* console_ops.c */ void console_history_free(SpaceConsole *sc, ConsoleLine *cl); void console_scrollback_free(SpaceConsole *sc, ConsoleLine *cl); -ConsoleLine *console_history_add_str(const bContext *C, char *str, int own); -ConsoleLine *console_scrollback_add_str(const bContext *C, char *str, int own); +ConsoleLine *console_history_add_str(const struct bContext *C, char *str, int own); +ConsoleLine *console_scrollback_add_str(const struct bContext *C, char *str, int own); -ConsoleLine *console_history_verify(const bContext *C); +ConsoleLine *console_history_verify(const struct bContext *C); int console_report_mask(SpaceConsole *sc); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 70570f6208a..37f16f3d88a 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -563,7 +563,7 @@ static int copy_exec(bContext *C, wmOperator *op) ConsoleLine *cl; - for(cl= sc->scrollback.last; cl; cl= cl->prev) { + for(cl= sc->scrollback.first; cl; cl= cl->next) { BLI_dynstr_append(buf_dyn, cl->line); BLI_dynstr_append(buf_dyn, "\n"); } diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index c50fef7faf6..408d0410067 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -171,7 +171,7 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) console_scrollback_add_str(C, "Cursor: Left/Right Home/End", 0); console_scrollback_add_str(C, "Remove: Backspace/Delete", 0); console_scrollback_add_str(C, "Execute: Enter", 0); - console_scrollback_add_str(C, "Autocomplete: Ctrl+Enter", 0); + console_scrollback_add_str(C, "Autocomplete: Ctrl+Space", 0); console_scrollback_add_str(C, "Ctrl +/- Wheel: Zoom", 0); console_scrollback_add_str(C, "Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.ui", 0); } @@ -281,7 +281,7 @@ void console_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "CONSOLE_OT_exec", PADENTER, KM_PRESS, 0, 0); //WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", TABKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ - WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", RETKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */ + WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */ #endif /* report selection */ diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 1f1a34ee308..e048601a4d7 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -521,6 +521,14 @@ static int wm_search_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_CANCELLED; } +/* op->poll */ +int wm_search_menu_poll(bContext *C) +{ + if(CTX_wm_window(C)==NULL) return 0; + if(CTX_wm_area(C) && CTX_wm_area(C)->spacetype==SPACE_CONSOLE) return 0; // XXX - so we can use the shortcut in the console + return 1; +} + static void WM_OT_search_menu(wmOperatorType *ot) { ot->name= "Search Menu"; @@ -528,7 +536,7 @@ static void WM_OT_search_menu(wmOperatorType *ot) ot->invoke= wm_search_menu_invoke; ot->exec= wm_search_menu_exec; - ot->poll= WM_operator_winactive; + ot->poll= wm_search_menu_poll; } @@ -1708,7 +1716,7 @@ void wm_window_keymap(wmWindowManager *wm) /* debug/testing */ WM_keymap_verify_item(keymap, "WM_OT_ten_timer", TKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); WM_keymap_verify_item(keymap, "WM_OT_debug_menu", DKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); - WM_keymap_verify_item(keymap, "WM_OT_search_menu", FKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); + WM_keymap_verify_item(keymap, "WM_OT_search_menu", SPACEKEY, KM_PRESS, KM_CTRL, 0); } From b2ceadc3595eb379ec62bd1f900134084cd6062c Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 28 Jul 2009 10:40:08 +0000 Subject: [PATCH 421/512] * copy io scripts into osx bundle with cmake, in post-build process --- source/creator/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 48d06f00b7e..70a25d8662f 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -130,6 +130,7 @@ IF(APPLE) COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/Resources/ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ + COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/io ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ COMMAND mkdir ${TARGETDIR}/blender.app/Contents/MacOS/.blender/python/ COMMAND unzip -q ${LIBDIR}/release/python.zip -d ${TARGETDIR}/blender.app/Contents/MacOS/.blender/python/ COMMAND find ${TARGETDIR}/blender.app -name CVS -prune -exec rm -rf {} "\;" From fee10e5a400762a556db7167f8a1e55ed1dfd1ff Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 28 Jul 2009 10:57:36 +0000 Subject: [PATCH 422/512] * copy io scripts into osx bundle with scons, in post-build process --- tools/Blender.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/Blender.py b/tools/Blender.py index 73ee6bb813d..6bb77e3cc85 100644 --- a/tools/Blender.py +++ b/tools/Blender.py @@ -364,6 +364,8 @@ def AppIt(target=None, source=None, env=None): commands.getoutput(cmd) cmd = 'cp -R %s/release/ui %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) commands.getoutput(cmd) + cmd = 'cp -R %s/release/io %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary) + commands.getoutput(cmd) cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary) commands.getoutput(cmd) cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary) From f4f3a9b08b04077e6e9272e4fdd4cd550b47be02 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 28 Jul 2009 11:04:08 +0000 Subject: [PATCH 423/512] 2.5 Lamp Buttons: * Some layout tweaks and fixes by nudelZ. --- release/ui/buttons_data_lamp.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index abe78aca28f..4a61684c8e2 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -49,10 +49,13 @@ class DATA_PT_lamp(DataButtonsPanel): split = layout.split() col = split.column() - col.itemR(lamp, "color", text="") - col.itemR(lamp, "energy") + sub = col.column(align=True) + sub.itemR(lamp, "color", text="") + sub.itemR(lamp, "energy") col.itemR(lamp, "negative") - col.itemR(lamp, "distance") + + if lamp.type == "AREA": + col.itemR(lamp, "distance") col = split.column() col.itemR(lamp, "layer", text="This Layer Only") @@ -67,7 +70,7 @@ class DATA_PT_lamp(DataButtonsPanel): sub = col.column(align=True) sub.itemR(lamp, "falloff_type", text="") sub.itemR(lamp, "distance") - sub.itemR(lamp, "sphere") + col.itemR(lamp, "sphere") if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED': col = split.column() @@ -201,20 +204,18 @@ class DATA_PT_shadow(DataButtonsPanel): elif lamp.type == 'AREA': split = layout.split() - col = split.column(align=True) + col = split.column() + sub = split.column(align=True) if lamp.shape == 'SQUARE': - col.itemR(lamp, "shadow_ray_samples_x", text="Samples") + sub.itemR(lamp, "shadow_ray_samples_x", text="Samples") elif lamp.shape == 'RECTANGLE': - col.itemR(lamp, "shadow_ray_samples_x", text="Samples X") - col.itemR(lamp, "shadow_ray_samples_y", text="Samples Y") + sub.itemR(lamp, "shadow_ray_samples_x", text="Samples X") + sub.itemR(lamp, "shadow_ray_samples_y", text="Samples Y") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': - col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") - split.column() - elif lamp.shadow_ray_sampling_method == 'CONSTANT_QMC': - split.column() + sub.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") + elif lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': - col = split.column() col.itemR(lamp, "umbra") col.itemR(lamp, "dither") col.itemR(lamp, "jitter") From 74e4ad20c9e8d19f85aaa2995652e3f65bdfc0c9 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 16:33:02 +0000 Subject: [PATCH 424/512] 2.5: code cleanup, added CTX_wm_space_* for each space type, instead of casting everywhere. --- source/blender/blenkernel/BKE_context.h | 11 +++ source/blender/blenkernel/intern/context.c | 77 +++++++++++++++++++ source/blender/editors/animation/anim_ops.c | 14 ++-- source/blender/editors/animation/keyframing.c | 9 +-- .../blender/editors/armature/editarmature.c | 4 +- source/blender/editors/screen/screen_ops.c | 10 +-- .../editors/sculpt_paint/paint_image.c | 9 +-- .../editors/space_action/action_header.c | 6 +- .../editors/space_action/space_action.c | 4 +- .../editors/space_buttons/buttons_context.c | 8 +- .../editors/space_buttons/buttons_header.c | 7 +- .../editors/space_buttons/buttons_ops.c | 2 +- .../editors/space_buttons/space_buttons.c | 4 +- .../editors/space_graph/graph_buttons.c | 2 +- .../editors/space_graph/graph_header.c | 4 +- .../blender/editors/space_graph/graph_ops.c | 2 +- .../blender/editors/space_graph/space_graph.c | 4 +- .../editors/space_image/image_buttons.c | 24 +++--- .../editors/space_image/image_header.c | 2 +- .../blender/editors/space_image/image_ops.c | 66 ++++++++-------- .../blender/editors/space_image/space_image.c | 6 +- .../editors/space_logic/logic_buttons.c | 7 +- .../editors/space_logic/logic_header.c | 6 +- .../editors/space_logic/logic_window.c | 8 +- .../blender/editors/space_logic/space_logic.c | 6 +- source/blender/editors/space_nla/nla_header.c | 4 +- source/blender/editors/space_nla/space_nla.c | 4 +- source/blender/editors/space_node/node_draw.c | 6 +- source/blender/editors/space_node/node_edit.c | 14 ++-- .../blender/editors/space_node/node_header.c | 20 ++--- .../blender/editors/space_node/node_select.c | 4 +- .../blender/editors/space_node/node_state.c | 4 +- .../blender/editors/space_node/space_node.c | 2 +- .../blender/editors/space_outliner/outliner.c | 47 ++++++----- .../editors/space_outliner/outliner_header.c | 2 +- .../blender/editors/space_time/space_time.c | 2 +- .../blender/editors/space_time/time_header.c | 12 +-- .../editors/space_view3d/view3d_header.c | 2 +- .../editors/transform/transform_conversions.c | 2 +- source/blender/editors/uvedit/uvedit_ops.c | 20 ++--- 40 files changed, 267 insertions(+), 180 deletions(-) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 83cac0adf93..e47ad969b91 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -122,6 +122,17 @@ struct RegionView3D *CTX_wm_region_view3d(const bContext *C); struct SpaceText *CTX_wm_space_text(const bContext *C); struct SpaceImage *CTX_wm_space_image(const bContext *C); struct SpaceConsole *CTX_wm_space_console(const bContext *C); +struct SpaceButs *CTX_wm_space_buts(const bContext *C); +struct SpaceFile *CTX_wm_space_file(const bContext *C); +struct SpaceSeq *CTX_wm_space_seq(const bContext *C); +struct SpaceOops *CTX_wm_space_outliner(const bContext *C); +struct SpaceNla *CTX_wm_space_nla(const bContext *C); +struct SpaceTime *CTX_wm_space_time(const bContext *C); +struct SpaceNode *CTX_wm_space_node(const bContext *C); +struct SpaceLogic *CTX_wm_space_logic(const bContext *C); +struct SpaceIpo *CTX_wm_space_graph(const bContext *C); +struct SpaceAction *CTX_wm_space_action(const bContext *C); +struct SpaceInfo *CTX_wm_space_info(const bContext *C); void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm); void CTX_wm_window_set(bContext *C, struct wmWindow *win); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 08182dc873b..78c29a96bff 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -256,6 +256,83 @@ struct SpaceImage *CTX_wm_space_image(const bContext *C) return NULL; } +struct SpaceButs *CTX_wm_space_buts(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_BUTS) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceFile *CTX_wm_space_file(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_FILE) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceSeq *CTX_wm_space_seq(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_SEQ) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceOops *CTX_wm_space_outliner(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_OUTLINER) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceNla *CTX_wm_space_nla(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_NLA) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceTime *CTX_wm_space_time(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_TIME) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceNode *CTX_wm_space_node(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_NODE) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceLogic *CTX_wm_space_logic(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_LOGIC) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceIpo *CTX_wm_space_graph(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_IPO) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceAction *CTX_wm_space_action(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_ACTION) + return C->wm.area->spacedata.first; + return NULL; +} + +struct SpaceInfo *CTX_wm_space_info(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_INFO) + return C->wm.area->spacedata.first; + return NULL; +} + void CTX_wm_manager_set(bContext *C, wmWindowManager *wm) { C->wm.manager= wm; diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 7107639b036..9c039693b72 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -67,7 +67,7 @@ static int change_frame_init(bContext *C, wmOperator *op) return 0; if (curarea->spacetype == SPACE_TIME) { - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); /* timeline displays frame number only when dragging indicator */ // XXX make this more in line with other anim editors? @@ -103,7 +103,7 @@ static void change_frame_exit(bContext *C, wmOperator *op) return; if (curarea->spacetype == SPACE_TIME) { - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); /* timeline displays frame number only when dragging indicator */ // XXX make this more in line with other anim editors? @@ -322,31 +322,31 @@ static int toggle_time_exec(bContext *C, wmOperator *op) switch (curarea->spacetype) { case SPACE_TIME: /* TimeLine */ { - SpaceTime *stime= (SpaceTime *)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); stime->flag ^= TIME_DRAWFRAMES; } break; case SPACE_ACTION: /* Action Editor */ { - SpaceAction *saction= (SpaceAction *)CTX_wm_space_data(C); + SpaceAction *saction= CTX_wm_space_action(C); saction->flag ^= SACTION_DRAWTIME; } break; case SPACE_IPO: /* Graph Editor */ { - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); sipo->flag ^= SIPO_DRAWTIME; } break; case SPACE_NLA: /* NLA Editor */ { - SpaceNla *snla= (SpaceNla *)CTX_wm_space_data(C); + SpaceNla *snla= CTX_wm_space_nla(C); snla->flag ^= SNLA_DRAWTIME; } break; case SPACE_SEQ: /* Sequencer */ { - SpaceSeq *sseq= (SpaceSeq *)CTX_wm_space_data(C); + SpaceSeq *sseq= CTX_wm_space_seq(C); sseq->flag ^= SEQ_DRAWFRAMES; } break; diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 60d0aa2c7bd..7bee57708ec 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -965,18 +965,15 @@ static int modify_key_op_poll(bContext *C) { ScrArea *sa= CTX_wm_area(C); Scene *scene= CTX_data_scene(C); + SpaceOops *so= CTX_wm_space_outliner(C); /* if no area or active scene */ if (ELEM(NULL, sa, scene)) return 0; /* if Outliner, only allow in DataBlocks view */ - if (sa->spacetype == SPACE_OUTLINER) { - SpaceOops *so= (SpaceOops *)CTX_wm_space_data(C); - - if ((so->outlinevis != SO_DATABLOCKS)) - return 0; - } + if (so && (so->outlinevis != SO_DATABLOCKS)) + return 0; /* TODO: checks for other space types can be added here */ diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 95d4e263490..a5028973e4b 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -2033,7 +2033,7 @@ static EnumPropertyItem prop_calc_roll_types[] = { static int armature_calc_roll_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - View3D *v3d= (View3D *)CTX_wm_space_data(C); + View3D *v3d= CTX_wm_view3d(C); Object *ob= CTX_data_edit_object(C); void (*roll_func)(Scene *, View3D *, EditBone *) = NULL; @@ -2851,7 +2851,7 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) Object *obedit= CTX_data_edit_object(C); bArmature *arm= (obedit) ? obedit->data : NULL; Scene *scene= CTX_data_scene(C); - View3D *v3d= (View3D *)CTX_wm_space_data(C); + View3D *v3d= CTX_wm_view3d(C); EditBone *newbone=NULL; ListBase points = {NULL, NULL}; int count; diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 55668c5e9be..f5c639745a3 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -168,11 +168,11 @@ int ED_operator_buttons_active(bContext *C) int ED_operator_node_active(bContext *C) { - if(ed_spacetype_test(C, SPACE_NODE)) { - SpaceNode *snode= (SpaceNode *)CTX_wm_space_data(C); - if(snode->edittree) - return 1; - } + SpaceNode *snode= CTX_wm_space_node(C); + + if(snode && snode->edittree) + return 1; + return 0; } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index b190b76a81e..48e07b7a489 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -4387,10 +4387,9 @@ static int image_paint_poll(bContext *C) return 1; } else { - ScrArea *sa= CTX_wm_area(C); - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); - if(sa && sa->spacetype==SPACE_IMAGE) { + if(sima) { ARegion *ar= CTX_wm_region(C); if((sima->flag & SI_DRAWTOOL) && ar->regiontype==RGN_TYPE_WINDOW) @@ -4507,7 +4506,7 @@ static int paint_init(bContext *C, wmOperator *op) view3d_set_viewcontext(C, &pop->vc); } else { - pop->s.sima= (SpaceImage*)CTX_wm_space_data(C); + pop->s.sima= CTX_wm_space_image(C); pop->s.v2d= &CTX_wm_region(C)->v2d; } @@ -4815,7 +4814,7 @@ static int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy) RegionView3D *rv3d= CTX_wm_region_view3d(C); if(!rv3d) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); ED_space_image_zoom(sima, ar, zoomx, zoomy); diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 7820b231212..43e91ea6bb5 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -77,7 +77,7 @@ static void act_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); - SpaceAction *sact= (SpaceAction*)CTX_wm_space_data(C); + SpaceAction *sact= CTX_wm_space_action(C); PointerRNA spaceptr; /* retrieve state */ @@ -248,7 +248,7 @@ static void do_action_buttons(bContext *C, void *arg, int event) static void saction_idpoin_handle(bContext *C, ID *id, int event) { - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); + SpaceAction *saction= CTX_wm_space_action(C); Object *obact= CTX_data_active_object(C); printf("actedit do id: \n"); @@ -296,7 +296,7 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event) void action_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); - SpaceAction *saction= (SpaceAction *)CTX_wm_space_data(C); + SpaceAction *saction= CTX_wm_space_action(C); bAnimContext ac; uiBlock *block; int xco, yco= 3, xmax; diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index 0b06499693c..55e035cfced 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -165,7 +165,7 @@ static void action_main_area_init(wmWindowManager *wm, ARegion *ar) static void action_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); + SpaceAction *saction= CTX_wm_space_action(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DGrid *grid; @@ -228,7 +228,7 @@ static void action_channel_area_init(wmWindowManager *wm, ARegion *ar) static void action_channel_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C); + SpaceAction *saction= CTX_wm_space_action(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DScrollers *scrollers; diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 1bc663a789b..614017cc4c6 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -416,7 +416,7 @@ static int buttons_context_path_texture(ButsContextPath *path) static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int flag) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); ID *id; int found; @@ -546,7 +546,7 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts) int buttons_context(const bContext *C, const char *member, bContextDataResult *result) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); ButsContextPath *path= sbuts?sbuts->path:NULL; if(!path) @@ -713,7 +713,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r static void pin_cb(bContext *C, void *arg1, void *arg2) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); ButsContextPath *path= sbuts->path; PointerRNA *ptr; int a; @@ -738,7 +738,7 @@ static void pin_cb(bContext *C, void *arg1, void *arg2) void buttons_context_draw(const bContext *C, uiLayout *layout) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); ButsContextPath *path= sbuts->path; uiLayout *row; uiBlock *block; diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index b5af1ab598c..a1041bc5106 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -65,7 +65,10 @@ static void do_buttons_buttons(bContext *C, void *arg, int event) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); + + if(!sbuts) /* window type switch */ + return; switch(event) { case B_CONTEXT_SWITCH: @@ -87,7 +90,7 @@ static void do_buttons_buttons(bContext *C, void *arg, int event) void buttons_header_buttons(const bContext *C, ARegion *ar) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); uiBlock *block; int xco, yco= 3; diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index fee79c6d9c2..b1ffc7249f4 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -910,7 +910,7 @@ void SCENE_OT_render_layer_remove(wmOperatorType *ot) static int toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) { bScreen *sc= CTX_wm_screen(C); - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); PointerRNA ptr; uiPopupMenu *pup; uiLayout *layout; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 1d478514779..0195ba4b18d 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -149,7 +149,7 @@ static void buttons_main_area_init(wmWindowManager *wm, ARegion *ar) static void buttons_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); int vertical= (sbuts->align == BUT_VERTICAL); buttons_context_compute(C, sbuts); @@ -267,7 +267,7 @@ static void buttons_context_area_init(wmWindowManager *wm, ARegion *ar) static void buttons_context_area_draw(const bContext *C, ARegion *ar) { - SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + SpaceButs *sbuts= CTX_wm_space_buts(C); uiStyle *style= U.uistyles.first; uiBlock *block; uiLayout *layout; diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 0e48d56ac90..82babb70c53 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -242,7 +242,7 @@ static void driver_update_flags_cb (bContext *C, void *fcu_v, void *dummy_v) /* drivers panel poll */ static int graph_panel_drivers_poll(const bContext *C, PanelType *pt) { - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); if(sipo->mode != SIPO_MODE_DRIVERS) return 0; diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index a0ac64e3672..1b8b579326f 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -69,7 +69,7 @@ static void graph_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); - SpaceIpo *sipo= (SpaceIpo*)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); PointerRNA spaceptr; /* retrieve state */ @@ -252,7 +252,7 @@ static void do_graph_buttons(bContext *C, void *arg, int event) void graph_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); uiBlock *block; int xco, yco= 3; diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index 68f4db555f8..fc4c05915c9 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -68,7 +68,7 @@ static int view_toggle_handles_exec (bContext *C, wmOperator *op) { - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); ARegion *ar= CTX_wm_region(C); if (sipo == NULL) diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index c36d790f0be..31daee2187e 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -217,7 +217,7 @@ static void graph_main_area_init(wmWindowManager *wm, ARegion *ar) static void graph_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceIpo *sipo= (SpaceIpo*)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DGrid *grid; @@ -294,7 +294,7 @@ static void graph_channel_area_init(wmWindowManager *wm, ARegion *ar) static void graph_channel_area_draw(const bContext *C, ARegion *ar) { - SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C); + SpaceIpo *sipo= CTX_wm_space_graph(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DScrollers *scrollers; diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index 2294c9e73ce..4dcaa96caf7 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -127,7 +127,7 @@ static void image_editcursor_buts(const bContext *C, View2D *v2d, uiBlock *block static void do_image_panel_events(bContext *C, void *arg, int event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); switch(event) { @@ -234,7 +234,7 @@ static void image_transform_but_attr(SpaceImage *sima, int *imx, int *imy, int * /* is used for both read and write... */ static void image_editvertex_buts(const bContext *C, uiBlock *block) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Object *obedit= CTX_data_edit_object(C); static float ocent[2]; float cent[2]= {0.0, 0.0}; @@ -347,7 +347,7 @@ static void image_editvertex_buts(const bContext *C, uiBlock *block) /* is used for both read and write... */ static void image_editcursor_buts(const bContext *C, View2D *v2d, uiBlock *block) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); static float ocent[2]; int imx= 256, imy= 256; int step, digits; @@ -386,7 +386,7 @@ static void image_editcursor_buts(const bContext *C, View2D *v2d, uiBlock *block #if 0 static void image_panel_view_properties(const bContext *C, Panel *pa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); Object *obedit= CTX_data_edit_object(C); uiBlock *block; @@ -448,7 +448,7 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima, int evt_del, int evt_keepdata, int evt_texbrowse, int evt_texdel) { -// SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); +// SpaceImage *sima= CTX_wm_space_image(C); ToolSettings *settings= CTX_data_tool_settings(C); Brush *brush= settings->imapaint.brush; ID *id; @@ -565,14 +565,14 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima, static int image_panel_paint_poll(const bContext *C, PanelType *pt) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); return (sima->image && (sima->flag & SI_DRAWTOOL)); } static void image_panel_paintcolor(const bContext *C, Panel *pa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ToolSettings *settings= CTX_data_tool_settings(C); Brush *brush= settings->imapaint.brush; uiBlock *block; @@ -591,7 +591,7 @@ static void image_panel_paintcolor(const bContext *C, Panel *pa) static void image_panel_paint(const bContext *C, Panel *pa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); uiBlock *block; if(!sima->image || (sima->flag & SI_DRAWTOOL)==0) @@ -605,7 +605,7 @@ static void image_panel_paint(const bContext *C, Panel *pa) static void image_panel_curves_reset(bContext *C, void *cumap_v, void *ibuf_v) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); CurveMapping *cumap = cumap_v; int a; @@ -625,7 +625,7 @@ static void image_panel_curves_reset(bContext *C, void *cumap_v, void *ibuf_v) static void image_panel_curves(const bContext *C, Panel *pa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ImBuf *ibuf; uiBlock *block; uiBut *bt; @@ -1201,7 +1201,7 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I short redraw, short imagechanged) { Scene *scene= CTX_data_scene(C); - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Image *ima= *ima_pp; uiBut *but; char str[128], *strp; @@ -1397,7 +1397,7 @@ void uiTemplateImageLayers(uiLayout *layout, bContext *C, Image *ima, ImageUser static void image_panel_properties(const bContext *C, Panel *pa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); uiBlock *block; block= uiLayoutFreeBlock(pa->layout); diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c index 35088f0e4d1..e0fd652bf92 100644 --- a/source/blender/editors/space_image/image_header.c +++ b/source/blender/editors/space_image/image_header.c @@ -416,7 +416,7 @@ static void do_image_buttons(bContext *C, void *arg, int event) static int toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Object *obedit= CTX_data_edit_object(C); uiPopupMenu *pup; uiLayout *layout; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index a429de65610..723d3eeaf82 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -109,7 +109,7 @@ static void sima_zoom_set_factor(SpaceImage *sima, ARegion *ar, float zoomfac) static int space_image_poll(bContext *C) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); if(sima && sima->spacetype==SPACE_IMAGE) if(ED_space_image_buffer(sima)) return 1; @@ -119,7 +119,7 @@ static int space_image_poll(bContext *C) static int space_image_file_exists_poll(bContext *C) { if(space_image_poll(C)) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ImBuf *ibuf= ED_space_image_buffer(sima); if(ibuf && BLI_exists(ibuf->name) && BLI_is_writable(ibuf->name)) @@ -131,10 +131,10 @@ static int space_image_file_exists_poll(bContext *C) int space_image_main_area_poll(bContext *C) { - SpaceLink *slink= CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); // XXX ARegion *ar= CTX_wm_region(C); - if(slink && (slink->spacetype == SPACE_IMAGE)) + if(sima) return 1; // XXX (ar && ar->type->regionid == RGN_TYPE_WINDOW); return 0; @@ -149,7 +149,7 @@ typedef struct ViewPanData { static void view_pan_init(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ViewPanData *vpd; op->customdata= vpd= MEM_callocN(sizeof(ViewPanData), "ImageViewPanData"); @@ -165,7 +165,7 @@ static void view_pan_init(bContext *C, wmOperator *op, wmEvent *event) static void view_pan_exit(bContext *C, wmOperator *op, int cancel) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ViewPanData *vpd= op->customdata; if(cancel) { @@ -180,7 +180,7 @@ static void view_pan_exit(bContext *C, wmOperator *op, int cancel) static int view_pan_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); float offset[2]; RNA_float_get_array(op->ptr, "offset", offset); @@ -209,7 +209,7 @@ static int view_pan_invoke(bContext *C, wmOperator *op, wmEvent *event) static int view_pan_modal(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ViewPanData *vpd= op->customdata; float offset[2]; @@ -269,7 +269,7 @@ typedef struct ViewZoomData { static void view_zoom_init(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ViewZoomData *vpd; op->customdata= vpd= MEM_callocN(sizeof(ViewZoomData), "ImageViewZoomData"); @@ -284,7 +284,7 @@ static void view_zoom_init(bContext *C, wmOperator *op, wmEvent *event) static void view_zoom_exit(bContext *C, wmOperator *op, int cancel) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ViewZoomData *vpd= op->customdata; if(cancel) { @@ -298,7 +298,7 @@ static void view_zoom_exit(bContext *C, wmOperator *op, int cancel) static int view_zoom_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); sima_zoom_set_factor(sima, ar, RNA_float_get(op->ptr, "factor")); @@ -325,7 +325,7 @@ static int view_zoom_invoke(bContext *C, wmOperator *op, wmEvent *event) static int view_zoom_modal(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); ViewZoomData *vpd= op->customdata; float factor; @@ -392,7 +392,7 @@ static int view_all_exec(bContext *C, wmOperator *op) int width, height; /* retrieve state */ - sima= (SpaceImage*)CTX_wm_space_data(C); + sima= CTX_wm_space_image(C); ar= CTX_wm_region(C); scene= (Scene*)CTX_data_scene(C); obedit= CTX_data_edit_object(C); @@ -449,7 +449,7 @@ static int view_selected_exec(bContext *C, wmOperator *op) int width, height; /* retrieve state */ - sima= (SpaceImage*)CTX_wm_space_data(C); + sima= CTX_wm_space_image(C); ar= CTX_wm_region(C); scene= (Scene*)CTX_data_scene(C); obedit= CTX_data_edit_object(C); @@ -493,7 +493,7 @@ void IMAGE_OT_view_selected(wmOperatorType *ot) static int view_zoom_in_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); sima_zoom_set_factor(sima, ar, 1.25f); @@ -516,7 +516,7 @@ void IMAGE_OT_view_zoom_in(wmOperatorType *ot) static int view_zoom_out_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); sima_zoom_set_factor(sima, ar, 0.8f); @@ -541,7 +541,7 @@ void IMAGE_OT_view_zoom_out(wmOperatorType *ot) static int view_zoom_ratio_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); sima_zoom_set(sima, ar, RNA_float_get(op->ptr, "ratio")); @@ -620,7 +620,7 @@ static void image_filesel(bContext *C, wmOperator *op, const char *path) static int open_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); Image *ima= NULL; @@ -640,7 +640,7 @@ static int open_exec(bContext *C, wmOperator *op) static int open_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); char *path= (sima->image)? sima->image->name: U.textudir; if(RNA_property_is_set(op->ptr, "filename")) @@ -711,7 +711,7 @@ static int replace_exec(bContext *C, wmOperator *op) static int replace_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); char *path= (sima->image)? sima->image->name: U.textudir; if(!sima->image) @@ -816,7 +816,7 @@ static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOpera static int save_as_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); Image *ima = ED_space_image(sima); char str[FILE_MAX]; @@ -834,7 +834,7 @@ static int save_as_exec(bContext *C, wmOperator *op) static int save_as_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Image *ima = ED_space_image(sima); ImBuf *ibuf= ED_space_image_buffer(sima); Scene *scene= CTX_data_scene(C); @@ -941,7 +941,7 @@ void IMAGE_OT_save(wmOperatorType *ot) static int save_sequence_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ImBuf *ibuf; int tot= 0; char di[FILE_MAX], fi[FILE_MAX]; @@ -1020,7 +1020,7 @@ static int reload_exec(bContext *C, wmOperator *op) SpaceImage *sima; /* retrieve state */ - sima= (SpaceImage*)CTX_wm_space_data(C); + sima= CTX_wm_space_image(C); if(!sima->image) return OPERATOR_CANCELLED; @@ -1062,7 +1062,7 @@ static int new_exec(bContext *C, wmOperator *op) int width, height, floatbuf, uvtestgrid; /* retrieve state */ - sima= (SpaceImage*)CTX_wm_space_data(C); + sima= CTX_wm_space_image(C); scene= (Scene*)CTX_data_scene(C); obedit= CTX_data_edit_object(C); @@ -1127,7 +1127,7 @@ static int pack_test(bContext *C, wmOperator *op) static int pack_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Image *ima= ED_space_image(sima); ImBuf *ibuf= ED_space_image_buffer(sima); int as_png= RNA_boolean_get(op->ptr, "as_png"); @@ -1150,7 +1150,7 @@ static int pack_exec(bContext *C, wmOperator *op) static int pack_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ImBuf *ibuf= ED_space_image_buffer(sima); uiPopupMenu *pup; uiLayout *layout; @@ -1336,7 +1336,7 @@ typedef struct ImageSampleInfo { static void sample_draw(const bContext *C, ARegion *ar, void *arg_info) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ImBuf *ibuf= ED_space_image_buffer(sima); ImageSampleInfo *info= arg_info; @@ -1349,7 +1349,7 @@ static void sample_draw(const bContext *C, ARegion *ar, void *arg_info) static void sample_apply(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); ImBuf *ibuf= ED_space_image_buffer(sima); ImageSampleInfo *info= op->customdata; @@ -1464,7 +1464,7 @@ static void sample_exit(bContext *C, wmOperator *op) static int sample_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ARegion *ar= CTX_wm_region(C); ImBuf *ibuf= ED_space_image_buffer(sima); ImageSampleInfo *info; @@ -1557,7 +1557,7 @@ typedef struct RecordCompositeData { int record_composite_apply(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); RecordCompositeData *rcd= op->customdata; Scene *scene= CTX_data_scene(C); ImBuf *ibuf; @@ -1585,7 +1585,7 @@ int record_composite_apply(bContext *C, wmOperator *op) static int record_composite_init(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); RecordCompositeData *rcd; @@ -1607,7 +1607,7 @@ static int record_composite_init(bContext *C, wmOperator *op) static void record_composite_exit(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); RecordCompositeData *rcd= op->customdata; scene->r.cfra= rcd->old_cfra; diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 709fbb6299b..aaea875a005 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -246,7 +246,7 @@ void image_keymap(struct wmWindowManager *wm) static void image_refresh(const bContext *C, ScrArea *sa) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Object *obedit= CTX_data_edit_object(C); Image *ima; @@ -306,7 +306,7 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn) static int image_context(const bContext *C, const char *member, bContextDataResult *result) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); if(CTX_data_dir(member)) { static const char *dir[] = {"edit_image", NULL}; @@ -416,7 +416,7 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar) static void image_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Object *obedit= CTX_data_edit_object(C); Scene *scene= CTX_data_scene(C); View2D *v2d= &ar->v2d; diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index db6922f304c..58c1eddb6c1 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -80,7 +80,7 @@ static void do_logic_panel_events(bContext *C, void *arg, int event) static void logic_panel_properties(const bContext *C, Panel *pa) { -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); uiBlock *block; block= uiLayoutFreeBlock(pa->layout); @@ -90,7 +90,7 @@ static void logic_panel_properties(const bContext *C, Panel *pa) static void logic_panel_view_properties(const bContext *C, Panel *pa) { - // SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); + // SpaceLogic *slogic= CTX_wm_space_logic(C); uiBlock *block; block= uiLayoutFreeBlock(pa->layout); @@ -101,8 +101,9 @@ static void logic_panel_view_properties(const bContext *C, Panel *pa) void logic_buttons_register(ARegionType *art) { - PanelType *pt; #if 0 + PanelType *pt; + pt= MEM_callocN(sizeof(PanelType), "spacetype logic panel properties"); strcpy(pt->idname, "LOGIC_PT_properties"); strcpy(pt->label, "Logic Properties"); diff --git a/source/blender/editors/space_logic/logic_header.c b/source/blender/editors/space_logic/logic_header.c index d0e905728be..9444e3893d1 100644 --- a/source/blender/editors/space_logic/logic_header.c +++ b/source/blender/editors/space_logic/logic_header.c @@ -63,12 +63,12 @@ static void do_logic_buttons(bContext *C, void *arg, int event) { -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); } static uiBlock *logic_addmenu(bContext *C, ARegion *ar, void *arg_unused) { -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); uiBlock *block; short yco= 0, menuwidth=120; @@ -87,7 +87,7 @@ static uiBlock *logic_addmenu(bContext *C, ARegion *ar, void *arg_unused) void logic_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); uiBlock *block; short xco, yco= 3; diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index ab4574d5940..03b4a2b84f4 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -2751,7 +2751,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh static void do_sensor_menu(bContext *C, void *arg, int event) { - SpaceLogic *slogic= (SpaceLogic *)CTX_wm_space_data(C); + SpaceLogic *slogic= CTX_wm_space_logic(C); ID **idar; Object *ob; bSensor *sens; @@ -2800,7 +2800,7 @@ static uiBlock *sensor_menu(bContext *C, ARegion *ar, void *arg_unused) static void do_controller_menu(bContext *C, void *arg, int event) { - SpaceLogic *slogic= (SpaceLogic *)CTX_wm_space_data(C); + SpaceLogic *slogic= CTX_wm_space_logic(C); ID **idar; Object *ob; bController *cont; @@ -2849,7 +2849,7 @@ static uiBlock *controller_menu(bContext *C, ARegion *ar, void *arg_unused) static void do_actuator_menu(bContext *C, void *arg, int event) { - SpaceLogic *slogic= (SpaceLogic *)CTX_wm_space_data(C); + SpaceLogic *slogic= CTX_wm_space_logic(C); ID **idar; Object *ob; bActuator *act; @@ -3011,7 +3011,7 @@ static int is_sensor_linked(uiBlock *block, bSensor *sens) void logic_buttons(bContext *C, ARegion *ar) { - SpaceLogic *slogic= (SpaceLogic *)CTX_wm_space_data(C); + SpaceLogic *slogic= CTX_wm_space_logic(C); Object *ob= CTX_data_active_object(C); ID **idar; bSensor *sens; diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index a593cfd1e7f..9f458bd8129 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -188,7 +188,7 @@ void logic_keymap(struct wmWindowManager *wm) static void logic_refresh(const bContext *C, ScrArea *sa) { -// SpaceLogic *slogic= (SpaceImage*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); // Object *obedit= CTX_data_edit_object(C); } @@ -215,7 +215,7 @@ static void logic_listener(ARegion *ar, wmNotifier *wmn) static int logic_context(const bContext *C, const char *member, bContextDataResult *result) { -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); return 0; @@ -239,7 +239,7 @@ static void logic_main_area_init(wmWindowManager *wm, ARegion *ar) static void logic_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ -// SpaceLogic *slogic= (SpaceLogic*)CTX_wm_space_data(C); +// SpaceLogic *slogic= CTX_wm_space_logic(C); View2D *v2d= &ar->v2d; View2DScrollers *scrollers; float col[3]; diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c index 3f504441108..20343adef03 100644 --- a/source/blender/editors/space_nla/nla_header.c +++ b/source/blender/editors/space_nla/nla_header.c @@ -83,7 +83,7 @@ static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); - SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + SpaceNla *snla= CTX_wm_space_nla(C); PointerRNA spaceptr; /* retrieve state */ @@ -213,7 +213,7 @@ static void do_nla_buttons(bContext *C, void *arg, int event) void nla_header_buttons(const bContext *C, ARegion *ar) { - SpaceNla *snla= (SpaceNla *)CTX_wm_space_data(C); + SpaceNla *snla= CTX_wm_space_nla(C); ScrArea *sa= CTX_wm_area(C); uiBlock *block; int xco, yco= 3; diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 923208f3b35..09ca1d6ee19 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -223,7 +223,7 @@ static void nla_channel_area_init(wmWindowManager *wm, ARegion *ar) /* draw entirely, view changes should be handled here */ static void nla_channel_area_draw(const bContext *C, ARegion *ar) { - SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + SpaceNla *snla= CTX_wm_space_nla(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DScrollers *scrollers; @@ -268,7 +268,7 @@ static void nla_main_area_init(wmWindowManager *wm, ARegion *ar) static void nla_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C); + SpaceNla *snla= CTX_wm_space_nla(C); bAnimContext ac; View2D *v2d= &ar->v2d; View2DGrid *grid; diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index f2e2486075b..70e2167c1e4 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -473,7 +473,7 @@ static void socket_vector_menu_cb(bContext *C, void *node_v, void *ntree_v) /* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */ static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *socket_v) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ScrArea *sa= CTX_wm_area(C); bNode *node; bNodeSocket *sock= socket_v; @@ -577,7 +577,7 @@ static void node_draw_preview(bNodePreview *preview, rctf *prv) static void do_node_internal_buttons(bContext *C, void *node_v, int event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); if(event==B_NODE_EXEC) { if(snode->treetype==NTREE_SHADER) { @@ -1050,7 +1050,7 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d) { float col[3]; View2DScrollers *scrollers; - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0); diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 0384965e49e..fe68a56dea5 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1089,7 +1089,7 @@ typedef struct NodeSizeWidget { static int node_resize_modal(bContext *C, wmOperator *op, wmEvent *event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); bNode *node= editnode_get_active(snode->edittree); NodeSizeWidget *nsw= op->customdata; @@ -1132,7 +1132,7 @@ static int node_resize_modal(bContext *C, wmOperator *op, wmEvent *event) static int node_resize_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); bNode *node= editnode_get_active(snode->edittree); @@ -1691,7 +1691,7 @@ void node_mute(SpaceNode *snode) int node_duplicate_exec(bContext *C, wmOperator *op) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ntreeCopyTree(snode->edittree, 1); /* 1 == internally selected nodes */ @@ -1833,7 +1833,7 @@ static void node_remove_extra_links(SpaceNode *snode, bNodeSocket *tsock, bNodeL /* in_out = starting socket */ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); NodeLinkDrag *nldrag= op->customdata; bNode *tnode, *node; @@ -1970,7 +1970,7 @@ static int node_link_init(SpaceNode *snode, NodeLinkDrag *nldrag) static int node_link_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); NodeLinkDrag *nldrag= MEM_callocN(sizeof(NodeLinkDrag), "drag link op customdata"); @@ -2166,7 +2166,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot) static int cut_links_exec(bContext *C, wmOperator *op) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); float mcoords[256][2]; int i= 0; @@ -2573,7 +2573,7 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt) static int node_delete_selection_exec(bContext *C, wmOperator *op) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); node_delete(snode); diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c index 8c48d4b54e1..367242d1262 100644 --- a/source/blender/editors/space_node/node_header.c +++ b/source/blender/editors/space_node/node_header.c @@ -67,7 +67,7 @@ static void do_node_selectmenu(bContext *C, void *arg, int event) { ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); /* functions in editnode.c assume there's a tree */ if(snode->nodetree==NULL) @@ -124,7 +124,7 @@ static uiBlock *node_selectmenu(bContext *C, ARegion *ar, void *arg_unused) void do_node_addmenu(bContext *C, void *arg, int event) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); bNode *node; /* store selection in temp test flag */ @@ -144,7 +144,7 @@ void do_node_addmenu(bContext *C, void *arg, int event) static void node_make_addmenu(bContext *C, int nodeclass, uiBlock *block) { Main *bmain= CTX_data_main(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); bNodeTree *ntree; int tot= 0, a; short yco= 0, menuwidth=120; @@ -393,7 +393,7 @@ static uiBlock *node_add_dynamicmenu(bContext *C, ARegion *ar, void *arg_unused) static uiBlock *node_addmenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); uiBlock *block; short yco= 0, menuwidth=120; @@ -449,7 +449,7 @@ static uiBlock *node_addmenu(bContext *C, ARegion *ar, void *arg_unused) static void do_node_nodemenu(bContext *C, void *arg, int event) { ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); int fromlib=0; /* functions in editnode.c assume there's a tree */ @@ -514,7 +514,7 @@ static void do_node_nodemenu(bContext *C, void *arg, int event) static uiBlock *node_nodemenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); uiBlock *block; short yco= 0, menuwidth=120; @@ -574,7 +574,7 @@ static uiBlock *node_nodemenu(bContext *C, ARegion *ar, void *arg_unused) static void do_node_viewmenu(bContext *C, void *arg, int event) { -// SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); +// SpaceNode *snode= CTX_wm_space_node(C); // ARegion *ar= CTX_wm_region(C); ScrArea *sa= CTX_wm_area(C); @@ -598,7 +598,7 @@ static void do_node_viewmenu(bContext *C, void *arg, int event) static uiBlock *node_viewmenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); uiBlock *block; short yco= 0, menuwidth=120; @@ -641,7 +641,7 @@ static void do_node_buttons(bContext *C, void *arg, int event) { // NODE_FIX_ME : instead of using "current material/texture/scene", node editor can also pin context? // note: scene context better not gets overridden, that'll clash too much (ton) - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); Scene *scene= CTX_data_scene(C); Material *ma; Tex *tx; @@ -687,7 +687,7 @@ static void do_node_buttons(bContext *C, void *arg, int event) void node_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); Scene *scene= CTX_data_scene(C); uiBlock *block; short xco, yco= 3; diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 450b17e69bb..73becc1ebe8 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -107,7 +107,7 @@ static void node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval, short static int node_select_exec(bContext *C, wmOperator *op) { // XXX wmWindow *window= CTX_wm_window(C); - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); int select_type; short mval[2]; @@ -232,7 +232,7 @@ static EnumPropertyItem prop_select_types[] = { static int node_borderselect_exec(bContext *C, wmOperator *op) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); bNode *node; rcti rect; diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c index f05a24ef05a..8d805490942 100644 --- a/source/blender/editors/space_node/node_state.c +++ b/source/blender/editors/space_node/node_state.c @@ -140,7 +140,7 @@ static int node_toggle_visibility(SpaceNode *snode, ARegion *ar, short *mval) static int node_toggle_visibility_exec(bContext *C, wmOperator *op) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); short mval[2]; @@ -187,7 +187,7 @@ static int node_fit_all_exec(bContext *C, wmOperator *op) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); - SpaceNode *snode= (SpaceNode *)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); snode_home(sa, ar, snode); ED_region_tag_redraw(ar); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 2e84a8b2c15..773c61f14d6 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -285,7 +285,7 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn) static int node_context(const bContext *C, const char *member, bContextDataResult *result) { - SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C); + SpaceNode *snode= CTX_wm_space_node(C); if(CTX_data_dir(member)) { static const char *dir[] = {"selected_nodes", NULL}; diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 589feac6226..21ba9cfa707 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1489,7 +1489,7 @@ void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, Tre static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); @@ -1528,7 +1528,7 @@ static void object_toggle_selectability_cb(bContext *C, Scene *scene, TreeElemen static int outliner_toggle_selectability_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); @@ -1567,7 +1567,7 @@ void object_toggle_renderability_cb(bContext *C, Scene *scene, TreeElement *te, static int outliner_toggle_renderability_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); @@ -1596,7 +1596,7 @@ void OUTLINER_OT_renderability_toggle(wmOperatorType *ot) static int outliner_toggle_expanded_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); ARegion *ar= CTX_wm_region(C); if (outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1)) @@ -1627,7 +1627,7 @@ void OUTLINER_OT_expanded_toggle(wmOperatorType *ot) static int outliner_toggle_selected_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); ARegion *ar= CTX_wm_region(C); if (outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1)) @@ -1680,7 +1680,7 @@ static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curleve static int outliner_one_level_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); ARegion *ar= CTX_wm_region(C); int add= RNA_boolean_get(op->ptr, "open"); int level; @@ -2367,7 +2367,7 @@ static int outliner_item_activate(bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); TreeElement *te; float fmval[2]; int extend= RNA_boolean_get(op->ptr, "extend"); @@ -2447,7 +2447,7 @@ static int do_outliner_item_openclose(bContext *C, SpaceOops *soops, TreeElement static int outliner_item_openclose(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); TreeElement *te; float fmval[2]; int all= RNA_boolean_get(op->ptr, "all"); @@ -2514,7 +2514,7 @@ static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, T static int outliner_item_rename(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); TreeElement *te; float fmval[2]; @@ -2592,7 +2592,7 @@ static TreeElement *outliner_find_id(SpaceOops *soops, ListBase *lb, ID *id) static int outliner_show_active_exec(bContext *C, wmOperator *op) { - SpaceOops *so= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *so= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); View2D *v2d= &ar->v2d; @@ -2822,7 +2822,7 @@ static void tree_element_show_hierarchy(Scene *scene, SpaceOops *soops, ListBase /* show entire object level hierarchy */ static int outliner_show_hierarchy_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); ARegion *ar= CTX_wm_region(C); Scene *scene= CTX_data_scene(C); @@ -3247,7 +3247,7 @@ static EnumPropertyItem prop_object_op_types[] = { static int outliner_object_operation_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); int event; char *str; @@ -3329,7 +3329,7 @@ static EnumPropertyItem prop_group_op_types[] = { static int outliner_group_operation_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); int event; /* check for invalid states */ @@ -3386,7 +3386,7 @@ static EnumPropertyItem prop_id_op_types[] = { static int outliner_id_operation_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); int scenelevel=0, objectlevel=0, idlevel=0, datalevel=0; int event; @@ -3453,7 +3453,7 @@ static EnumPropertyItem prop_data_op_types[] = { static int outliner_data_operation_exec(bContext *C, wmOperator *op) { - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); int scenelevel=0, objectlevel=0, idlevel=0, datalevel=0; int event; @@ -3517,7 +3517,6 @@ void OUTLINER_OT_data_operation(wmOperatorType *ot) static int outliner_drag_invoke(bContext *C, wmOperator *op, wmEvent *event) { - wmWindow *win= CTX_wm_window(C); Object *ob= CTX_data_active_object(C); PointerRNA ptr; @@ -3626,7 +3625,7 @@ static int outliner_operation(bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); TreeElement *te; float fmval[2]; @@ -3660,7 +3659,7 @@ static int ed_operator_outliner_datablocks_active(bContext *C) { ScrArea *sa= CTX_wm_area(C); if ((sa) && (sa->spacetype==SPACE_OUTLINER)) { - SpaceOops *so= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *so= CTX_wm_space_outliner(C); return (so->outlinevis == SO_DATABLOCKS); } return 0; @@ -3873,7 +3872,7 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, short m static int outliner_drivers_addsel_exec(bContext *C, wmOperator *op) { - SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soutliner= CTX_wm_space_outliner(C); /* check for invalid states */ if (soutliner == NULL) @@ -3908,7 +3907,7 @@ void OUTLINER_OT_drivers_add(wmOperatorType *ot) static int outliner_drivers_deletesel_exec(bContext *C, wmOperator *op) { - SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soutliner= CTX_wm_space_outliner(C); /* check for invalid states */ if (soutliner == NULL) @@ -4043,7 +4042,7 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa static int outliner_keyingset_additems_exec(bContext *C, wmOperator *op) { - SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soutliner= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); KeyingSet *ks= verify_active_keyingset(scene, 1); @@ -4083,7 +4082,7 @@ void OUTLINER_OT_keyingset_add_selected(wmOperatorType *ot) static int outliner_keyingset_removeitems_exec(bContext *C, wmOperator *op) { - SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soutliner= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); KeyingSet *ks= verify_active_keyingset(scene, 1); @@ -4765,7 +4764,7 @@ static void restrictbutton_bone_cb(bContext *C, void *poin, void *poin2) static void namebutton_cb(bContext *C, void *tsep, char *oldname) { - SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); TreeStore *ts= soops->treestore; @@ -5294,7 +5293,7 @@ void draw_outliner(const bContext *C) Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); View2D *v2d= &ar->v2d; - SpaceOops *soops= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soops= CTX_wm_space_outliner(C); uiBlock *block; int sizey= 0, sizex= 0, sizex_rna= 0; diff --git a/source/blender/editors/space_outliner/outliner_header.c b/source/blender/editors/space_outliner/outliner_header.c index 0743a447298..0c7859ed4e2 100644 --- a/source/blender/editors/space_outliner/outliner_header.c +++ b/source/blender/editors/space_outliner/outliner_header.c @@ -209,7 +209,7 @@ void outliner_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); Scene *scene= CTX_data_scene(C); - SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); + SpaceOops *soutliner= CTX_wm_space_outliner(C); uiBlock *block; int xco, yco= 3, xmax; diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 24afd24740a..61488db0007 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -214,7 +214,7 @@ static void time_main_area_init(wmWindowManager *wm, ARegion *ar) static void time_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); View2D *v2d= &ar->v2d; View2DGrid *grid; View2DScrollers *scrollers; diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index f79e04755e2..436a841deb8 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -96,7 +96,7 @@ static void do_time_redrawmenu(bContext *C, void *arg, int event) if(event < 1001) { bScreen *screen= CTX_wm_screen(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); stime->redraws ^= event; @@ -116,7 +116,7 @@ static void do_time_redrawmenu(bContext *C, void *arg, int event) static uiBlock *time_redrawmenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); uiBlock *block; short yco= 0, menuwidth=120, icon; @@ -171,7 +171,7 @@ static uiBlock *time_redrawmenu(bContext *C, ARegion *ar, void *arg_unused) static void do_time_viewmenu(bContext *C, void *arg, int event) { ScrArea *curarea= CTX_wm_area(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); View2D *v2d= UI_view2d_fromcontext_rwin(C); Scene *scene= CTX_data_scene(C); int first; @@ -229,7 +229,7 @@ static void do_time_viewmenu(bContext *C, void *arg, int event) static uiBlock *time_viewmenu(bContext *C, ARegion *ar, void *arg_unused) { ScrArea *curarea= CTX_wm_area(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); View2D *v2d= UI_view2d_fromcontext_rwin(C); uiBlock *block; short yco= 0, menuwidth=120; @@ -375,7 +375,7 @@ static uiBlock *time_framemenu(bContext *C, ARegion *ar, void *arg_unused) void do_time_buttons(bContext *C, void *arg, int event) { bScreen *screen= CTX_wm_screen(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); Scene *scene= CTX_data_scene(C); switch(event) { @@ -445,7 +445,7 @@ void do_time_buttons(bContext *C, void *arg, int event) void time_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); + SpaceTime *stime= CTX_wm_space_time(C); Scene *scene= CTX_data_scene(C); uiBlock *block; uiBut *but; diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index ae2b600f8f4..218011054d5 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -205,7 +205,7 @@ static void handle_view3d_lock(bContext *C) { Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); - View3D *v3d= (View3D *)CTX_wm_space_data(C); + View3D *v3d= CTX_wm_view3d(C); if (v3d != NULL && sa != NULL) { if(v3d->localview==0 && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 1a0b16695e1..c14b8c8a646 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2416,7 +2416,7 @@ static void UVsToTransData(SpaceImage *sima, TransData *td, TransData2D *td2d, f static void createTransUVs(bContext *C, TransInfo *t) { - SpaceImage *sima = (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima = CTX_wm_space_image(C); Image *ima = CTX_data_edit_image(C); Scene *scene = CTX_data_scene(C); TransData *td = NULL; diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 801da08e611..bb5a8b1dd40 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -1132,7 +1132,7 @@ static int stitch_exec(bContext *C, wmOperator *op) Image *ima; MTFace *tf; - sima= (SpaceImage*)CTX_wm_space_data(C); + sima= CTX_wm_space_image(C); scene= CTX_data_scene(C); obedit= CTX_data_edit_object(C); em= BKE_mesh_get_editmesh((Mesh*)obedit->data); @@ -1451,7 +1451,7 @@ static int sticky_select(float *limit, int hitv[4], int v, float *hituv[4], floa static int mouse_select(bContext *C, float co[2], int extend, int loop) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); ToolSettings *ts= CTX_data_tool_settings(C); Object *obedit= CTX_data_edit_object(C); @@ -1815,7 +1815,7 @@ void UV_OT_select_loop(wmOperatorType *ot) static int select_linked_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); ToolSettings *ts= CTX_data_tool_settings(C); Object *obedit= CTX_data_edit_object(C); @@ -2050,7 +2050,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje static int border_select_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); ToolSettings *ts= CTX_data_tool_settings(C); Object *obedit= CTX_data_edit_object(C); @@ -2223,7 +2223,7 @@ static void select_uv_inside_ellipse(SpaceImage *sima, Scene *scene, int select, int circle_select_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data); @@ -2313,7 +2313,7 @@ static int snap_cursor_to_selection(Scene *scene, Image *ima, Object *obedit, Vi static int snap_cursor_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); Image *ima= CTX_data_edit_image(C); @@ -2545,7 +2545,7 @@ static int snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit) static int snap_selection_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); Image *ima= CTX_data_edit_image(C); @@ -2694,7 +2694,7 @@ void UV_OT_select_pinned(wmOperatorType *ot) static int hide_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ToolSettings *ts= CTX_data_tool_settings(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data); @@ -2837,7 +2837,7 @@ void UV_OT_hide(wmOperatorType *ot) static int reveal_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); ToolSettings *ts= CTX_data_tool_settings(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data); @@ -3029,7 +3029,7 @@ static int set_tile_exec(bContext *C, wmOperator *op) static int set_tile_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Image *ima= CTX_data_edit_image(C); ARegion *ar= CTX_wm_region(C); float fx, fy; From aa44603146e87f29f08cee2abab7e0ddd89222c5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 16:46:14 +0000 Subject: [PATCH 425/512] 2.5: File browser * Side panels now use list widgets. * Enabled theme colors for side panel. * Add button in bookmarks panel. * Operator panel title now uses operator name. * For unix, added / to system, and home and desktop to bookmarks. * For opening fileselect with filter, cleaned up the code a bit, adding WM_operator_properties_filesel instead of duplicating code. * Also added filter for all operators calling fileselect, only image and file open did it before. * Hide . files by default, and also hide files ending with ~. * Added back .. (but not .) in the file list, I really missed this. * File highlight now only happens when you're actually over a file, instead staying after you move the mouse away. * Fix some redraw/refresh issues. --- source/blender/blenlib/intern/storage.c | 12 +- source/blender/editors/curve/editfont.c | 2 +- source/blender/editors/screen/screendump.c | 2 +- source/blender/editors/space_file/file_draw.c | 8 +- source/blender/editors/space_file/file_ops.c | 119 +++++++++------ .../blender/editors/space_file/file_panels.c | 141 ++++++++++++------ source/blender/editors/space_file/filesel.c | 29 ++-- source/blender/editors/space_file/fsmenu.c | 24 ++- .../blender/editors/space_file/space_file.c | 8 +- .../blender/editors/space_image/image_ops.c | 35 +---- source/blender/editors/space_info/info_ops.c | 2 +- .../editors/space_sequencer/sequencer_add.c | 16 +- source/blender/editors/space_text/text_ops.c | 4 +- source/blender/makesdna/DNA_space_types.h | 2 + source/blender/makesrna/intern/rna_space.c | 18 +-- source/blender/makesrna/intern/rna_ui.c | 3 + source/blender/makesrna/intern/rna_userdef.c | 2 +- source/blender/windowmanager/WM_api.h | 1 + .../windowmanager/intern/wm_event_system.c | 18 ++- .../windowmanager/intern/wm_operators.c | 31 ++-- 20 files changed, 290 insertions(+), 187 deletions(-) diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 817209eaed4..0a416e624cb 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -218,7 +218,7 @@ void BLI_builddir(char *dirname, char *relname) { struct dirent *fname; struct dirlink *dlink; - int rellen, newnum = 0; + int rellen, newnum = 0, len; char buf[256]; DIR *dir; @@ -237,13 +237,11 @@ void BLI_builddir(char *dirname, char *relname) if ( (dir = (DIR *)opendir(".")) ){ while ((fname = (struct dirent*) readdir(dir)) != NULL) { + len= strlen(fname->d_name); - if(hide_dot && fname->d_name[0]=='.' && fname->d_name[1]!='.' && fname->d_name[1]!=0) { - } - else if ( ( (fname->d_name[0] == '.') && (fname->d_name[1] == 0) ) || - ( (fname->d_name[0] == '.') && (fname->d_name[1] == '.') && (fname->d_name[2] == 0)) ) { - /* ignore '.' and '..' */ - } + if(hide_dot && fname->d_name[0]=='.' && fname->d_name[1]!='.' && fname->d_name[1]!=0); /* ignore .file */ + else if(hide_dot && len && fname->d_name[len-1]=='~'); /* ignore file~ */ + else if (((fname->d_name[0] == '.') && (fname->d_name[1] == 0) )); /* ignore . */ else { dlink = (struct dirlink *)malloc(sizeof(struct dirlink)); if (dlink){ diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index 9f2bd6f26f9..46be95063ec 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -416,7 +416,7 @@ void FONT_OT_file_paste(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", "File path of text file to load."); + WM_operator_properties_filesel(ot, FOLDERFILE|TEXTFILE); } /******************* paste buffer operator ********************/ diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c index 81da74217ec..d69c6dfcdba 100644 --- a/source/blender/editors/screen/screendump.c +++ b/source/blender/editors/screen/screendump.c @@ -173,7 +173,7 @@ void SCREEN_OT_screenshot(wmOperatorType *ot) ot->flag= 0; - RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH); + WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE); RNA_def_boolean(ot->srna, "full", 1, "Full Screen", ""); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index f2906686db5..1074a24f9ae 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -153,7 +153,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar) uiBut* but; uiBlock* block; - SpaceFile* sfile = (SpaceFile*) CTX_wm_space_data(C); + SpaceFile* sfile = CTX_wm_space_file(C); FileSelectParams* params = ED_fileselect_get_params(sfile); /* Initialize UI block. */ @@ -345,7 +345,7 @@ static void file_draw_string(short sx, short sy, const char* string, float width void file_calc_previews(const bContext *C, ARegion *ar) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); View2D *v2d= &ar->v2d; ED_fileselect_init_layout(sfile, ar); @@ -354,7 +354,7 @@ void file_calc_previews(const bContext *C, ARegion *ar) void file_draw_previews(const bContext *C, ARegion *ar) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); FileSelectParams* params= ED_fileselect_get_params(sfile); FileLayout* layout= ED_fileselect_get_layout(sfile, ar); View2D *v2d= &ar->v2d; @@ -517,7 +517,7 @@ static void renamebutton_cb(bContext *C, void *arg1, char *oldname) void file_draw_list(const bContext *C, ARegion *ar) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); FileSelectParams* params = ED_fileselect_get_params(sfile); FileLayout* layout= ED_fileselect_get_layout(sfile, ar); View2D *v2d= &ar->v2d; diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 8e64f2a594a..c515ef6e295 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -143,14 +143,20 @@ static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, s params->active_file = last_file; if(file && S_ISDIR(file->type)) { - /* the path is too long! */ - if (strlen(params->dir) + strlen(file->relname) >= FILE_MAX ) + /* the path is too long and we are not going up! */ + if (strcmp(file->relname, "..") && strlen(params->dir) + strlen(file->relname) >= FILE_MAX ) { // XXX error("Path too long, cannot enter this directory"); } else { - BLI_cleanup_dir(G.sce, params->dir); - strcat(params->dir, file->relname); - BLI_add_slash(params->dir); + if (strcmp(file->relname, "..")==0) { + /* avoids /../../ */ + BLI_parent_dir(params->dir); + } else { + BLI_cleanup_dir(G.sce, params->dir); + strcat(params->dir, file->relname); + BLI_add_slash(params->dir); + } + params->file[0] = '\0'; file_change_dir(sfile); retval = FILE_SELECT_DIR; @@ -172,7 +178,7 @@ static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, s static int file_border_select_exec(bContext *C, wmOperator *op) { ARegion *ar= CTX_wm_region(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); short val; rcti rect; @@ -216,24 +222,31 @@ void FILE_OT_select_border(wmOperatorType *ot) static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); short val; rcti rect; + if(ar->regiontype != RGN_TYPE_WINDOW) + return OPERATOR_CANCELLED; + rect.xmin = rect.xmax = event->x - ar->winrct.xmin; rect.ymin = rect.ymax = event->y - ar->winrct.ymin; val = event->val; - if (BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin)) { + if(!BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin)) + return OPERATOR_CANCELLED; + + /* single select, deselect all selected first */ + file_deselect_all(sfile); + + if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + else + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); + + WM_event_add_mousemove(C); /* for directory changes */ + WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); - /* single select, deselect all selected first */ - file_deselect_all(sfile); - if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) { - WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); - } else { - WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); - } - } return OPERATOR_FINISHED; } @@ -254,7 +267,7 @@ void FILE_OT_select(wmOperatorType *ot) static int file_select_all_invoke(bContext *C, wmOperator *op, wmEvent *event) { ScrArea *sa= CTX_wm_area(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); int numfiles = filelist_numfiles(sfile->files); int i; int select = 1; @@ -299,7 +312,7 @@ void FILE_OT_select_all_toggle(wmOperatorType *ot) static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(RNA_struct_find_property(op->ptr, "dir")) { char entry[256]; @@ -333,7 +346,7 @@ void FILE_OT_select_bookmark(wmOperatorType *ot) static int bookmark_add_invoke(bContext *C, wmOperator *op, wmEvent *event) { ScrArea *sa= CTX_wm_area(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); struct FSMenu* fsmenu = fsmenu_get(); struct FileSelectParams* params= ED_fileselect_get_params(sfile); @@ -398,7 +411,7 @@ void FILE_OT_delete_bookmark(wmOperatorType *ot) static int loadimages_invoke(bContext *C, wmOperator *op, wmEvent *event) { ScrArea *sa= CTX_wm_area(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if (sfile->files) { filelist_loadimage_timer(sfile->files); if (filelist_changed(sfile->files)) { @@ -425,31 +438,41 @@ void FILE_OT_loadimages(wmOperatorType *ot) int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my) { FileSelectParams* params; - int numfiles, actfile; + int numfiles, actfile, origfile; if(sfile==NULL || sfile->files==NULL) return 0; - + numfiles = filelist_numfiles(sfile->files); params = ED_fileselect_get_params(sfile); - actfile = find_file_mouse(sfile, ar, mx , my, 0); - - if (params && (actfile >= 0) && (actfile < numfiles) ) { - params->active_file=actfile; - return 1; - } - params->active_file= -1; - return 0; + origfile= params->active_file; + + mx -= ar->winrct.xmin; + my -= ar->winrct.ymin; + + if(BLI_in_rcti(&ar->v2d.mask, mx, my)) { + actfile = find_file_mouse(sfile, ar, mx , my, 0); + + if((actfile >= 0) && (actfile < numfiles)) + params->active_file=actfile; + else + params->active_file= -1; + } + else + params->active_file= -1; + + return (params->active_file != origfile); } static int file_highlight_invoke(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); - - if( file_hilight_set(sfile, ar, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin)) { - ED_area_tag_redraw(CTX_wm_area(C)); - } + SpaceFile *sfile= CTX_wm_space_file(C); + + if(!file_hilight_set(sfile, ar, event->x, event->y)) + return OPERATOR_CANCELLED; + + ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -467,7 +490,7 @@ void FILE_OT_highlight(struct wmOperatorType *ot) int file_cancel_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); folderlist_free(sfile->folders_prev); folderlist_free(sfile->folders_next); @@ -492,7 +515,7 @@ void FILE_OT_cancel(struct wmOperatorType *ot) /* sends events now, so things get handled on windowqueue level */ int file_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); char name[FILE_MAX]; if(sfile->op) { @@ -559,7 +582,7 @@ void FILE_OT_exec(struct wmOperatorType *ot) int file_parent_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { if (BLI_has_parent(sfile->params->dir)) { @@ -589,7 +612,7 @@ void FILE_OT_parent(struct wmOperatorType *ot) int file_refresh_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); file_change_dir(sfile); @@ -612,7 +635,7 @@ void FILE_OT_previous(struct wmOperatorType *ot) int file_previous_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { if (!sfile->folders_next) @@ -642,7 +665,7 @@ void FILE_OT_next(struct wmOperatorType *ot) int file_next_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { if (!sfile->folders_next) sfile->folders_next = folderlist_new(); @@ -666,7 +689,7 @@ int file_directory_new_exec(bContext *C, wmOperator *unused) char tmpdir[FILE_MAXFILE]; int i = 1; - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { @@ -706,7 +729,7 @@ int file_directory_exec(bContext *C, wmOperator *unused) { char tmpstr[FILE_MAX]; - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { @@ -741,7 +764,7 @@ int file_directory_exec(bContext *C, wmOperator *unused) int file_filename_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { if (file_select_match(sfile, sfile->params->file)) @@ -768,7 +791,7 @@ void FILE_OT_refresh(struct wmOperatorType *ot) int file_hidedot_exec(bContext *C, wmOperator *unused) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); if(sfile->params) { sfile->params->flag ^= FILE_HIDE_DOT; @@ -849,7 +872,7 @@ void FILE_OT_bookmark_toggle(struct wmOperatorType *ot) int file_filenum_exec(bContext *C, wmOperator *op) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); int inc = RNA_int_get(op->ptr, "increment"); if(sfile->params && (inc != 0)) { @@ -909,7 +932,7 @@ void FILE_OT_rename(struct wmOperatorType *ot) int file_delete_poll(bContext *C) { int poll = ED_operator_file_active(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); struct direntry* file; if (sfile->params) { @@ -929,7 +952,7 @@ int file_delete_poll(bContext *C) int file_delete_exec(bContext *C, wmOperator *op) { char str[FILE_MAX]; - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); struct direntry* file; diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c index 351d1619508..f3c18859fb0 100644 --- a/source/blender/editors/space_file/file_panels.c +++ b/source/blender/editors/space_file/file_panels.c @@ -44,97 +44,150 @@ #include "UI_resources.h" #include "UI_view2d.h" +#include "WM_api.h" +#include "WM_types.h" + #include "file_intern.h" #include "fsmenu.h" #include -static void do_file_panel_events(bContext *C, void *arg, int event) +static void file_panel_cb(bContext *C, void *arg_entry, void *arg_unused) { + PointerRNA ptr; + char *entry= (char*)arg_entry; + WM_operator_properties_create(&ptr, "FILE_OT_select_bookmark"); + RNA_string_set(&ptr, "dir", entry); + WM_operator_name_call(C, "FILE_OT_select_bookmark", WM_OP_INVOKE_REGION_WIN, &ptr); + WM_operator_properties_free(&ptr); } -static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, int icon, int allow_delete) +static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, short *nr, int icon, int allow_delete) { + SpaceFile *sfile= CTX_wm_space_file(C); uiBlock *block; + uiBut *but; + uiLayout *box, *col; struct FSMenu* fsmenu = fsmenu_get(); - int nentries = fsmenu_get_nentries(fsmenu, category); - int i; + char *curdir= (sfile->params)? sfile->params->dir: ""; + int i, nentries = fsmenu_get_nentries(fsmenu, category); + /* reset each time */ + *nr= -1; + + /* hide if no entries */ + if(nentries == 0) + return; + + /* layout */ uiLayoutSetAlignment(pa->layout, UI_LAYOUT_ALIGN_LEFT); - block= uiLayoutFreeBlock(pa->layout); - uiBlockSetHandleFunc(block, do_file_panel_events, NULL); - uiBlockSetEmboss(block, UI_EMBOSSP); - uiBlockBeginAlign(block); + block= uiLayoutGetBlock(pa->layout); + box= uiLayoutBox(pa->layout); + col= uiLayoutColumn(box, 1); + for (i=0; i< nentries;++i) { char dir[FILE_MAX]; char temp[FILE_MAX]; - uiLayout* layout = uiLayoutRow(pa->layout, UI_LAYOUT_ALIGN_LEFT); + uiLayout* layout = uiLayoutRow(col, 0); char *entry = fsmenu_get_entry(fsmenu, category, i); + /* set this list item as active if we have a match */ + if(strcmp(curdir, entry) == 0) + *nr= i; + /* create nice bookmark name, shows last directory in the full path currently */ BLI_strncpy(temp, entry, FILE_MAX); BLI_add_slash(temp); BLI_getlastdir(temp, dir, FILE_MAX); BLI_del_slash(dir); - /* operator shows the short bookmark name, should eventually have tooltip */ - uiItemStringO(layout, dir, icon, "FILE_OT_select_bookmark", "dir", entry); - if (allow_delete && fsmenu_can_save(fsmenu, category, i) ) + if(dir[0] == 0) + BLI_strncpy(dir, entry, FILE_MAX); + + /* create list item */ + but= uiDefIconTextButS(block, LISTROW, 0, icon, dir, 0,0,UI_UNIT_X*10,UI_UNIT_Y, nr, 0, i, 0, 0, entry); + uiButSetFunc(but, file_panel_cb, entry, NULL); + uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); + + /* create delete button */ + if(allow_delete && fsmenu_can_save(fsmenu, category, i)) { + uiBlockSetEmboss(block, UI_EMBOSSN); uiItemIntO(layout, "", ICON_X, "FILE_OT_delete_bookmark", "index", i); + uiBlockSetEmboss(block, UI_EMBOSS); + } } - uiBlockEndAlign(block); } static void file_panel_system(const bContext *C, Panel *pa) { - file_panel_category(C, pa, FS_CATEGORY_SYSTEM, ICON_DISK_DRIVE, 0); + SpaceFile *sfile= CTX_wm_space_file(C); + + if(sfile) + file_panel_category(C, pa, FS_CATEGORY_SYSTEM, &sfile->systemnr, ICON_DISK_DRIVE, 0); } static void file_panel_bookmarks(const bContext *C, Panel *pa) { - file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, ICON_BOOKMARKS, 1); -} + SpaceFile *sfile= CTX_wm_space_file(C); + uiLayout *row; + if(sfile) { + row= uiLayoutRow(pa->layout, 0); + uiItemO(row, "Add", ICON_ZOOMIN, "file.add_bookmark"); + uiItemL(row, NULL, 0); + + file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, &sfile->bookmarknr, ICON_BOOKMARKS, 1); + } +} static void file_panel_recent(const bContext *C, Panel *pa) { - file_panel_category(C, pa, FS_CATEGORY_RECENT, ICON_FILE_FOLDER, 0); + SpaceFile *sfile= CTX_wm_space_file(C); + + if(sfile) + file_panel_category(C, pa, FS_CATEGORY_RECENT, &sfile->recentnr, ICON_FILE_FOLDER, 0); } +static int file_panel_operator_poll(const bContext *C, PanelType *pt) +{ + SpaceFile *sfile= CTX_wm_space_file(C); + return (sfile && sfile->op); +} + +static void file_panel_operator_header(const bContext *C, Panel *pa) +{ + SpaceFile *sfile= CTX_wm_space_file(C); + wmOperator *op= sfile->op; + + BLI_strncpy(pa->drawname, op->type->name, sizeof(pa->drawname)); +} + static void file_panel_operator(const bContext *C, Panel *pa) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); - struct wmOperator *op = sfile ? sfile->op : NULL; - uiBlock *block; - int sy; + SpaceFile *sfile= CTX_wm_space_file(C); + wmOperator *op= sfile->op; + int empty= 1; - block= uiLayoutFreeBlock(pa->layout); - uiBlockSetHandleFunc(block, do_file_panel_events, NULL); + RNA_STRUCT_BEGIN(op->ptr, prop) { + if(strcmp(RNA_property_identifier(prop), "rna_type") == 0) + continue; + if(strcmp(RNA_property_identifier(prop), "filename") == 0) + continue; + if(strcmp(RNA_property_identifier(prop), "display") == 0) + continue; + if(strncmp(RNA_property_identifier(prop), "filter", 6) == 0) + continue; - sy= 0; - if (op) { - uiBlockBeginAlign(block); - RNA_STRUCT_BEGIN(op->ptr, prop) { - if(strcmp(RNA_property_identifier(prop), "rna_type") == 0) - continue; - if(strcmp(RNA_property_identifier(prop), "filename") == 0) - continue; - if(strcmp(RNA_property_identifier(prop), "display") == 0) - continue; - if(strncmp(RNA_property_identifier(prop), "filter", 6) == 0) - continue; - uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0); - } - RNA_STRUCT_END; - uiBlockEndAlign(block); + uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0); + empty= 0; } - uiBlockLayoutResolve(C, block, NULL, &sy); - uiEndBlock(C, block); - uiDrawBlock(C, block); -} + RNA_STRUCT_END; + if(empty) + uiItemL(pa->layout, "No properties.", 0); +} void file_panels_register(ARegionType *art) { @@ -161,6 +214,8 @@ void file_panels_register(ARegionType *art) pt= MEM_callocN(sizeof(PanelType), "spacetype file operator properties"); strcpy(pt->idname, "FILE_PT_operator"); strcpy(pt->label, "Operator"); + pt->poll= file_panel_operator_poll; + pt->draw_header= file_panel_operator_header; pt->draw= file_panel_operator; BLI_addtail(&art->paneltypes, pt); } diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 6263f9fe57f..8ee7d3515b5 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -124,18 +124,24 @@ short ED_fileselect_set_params(SpaceFile *sfile) if (op) { BLI_strncpy(params->title, op->type->name, sizeof(params->title)); params->filter = 0; - params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0; params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0; params->filter |= RNA_boolean_get(op->ptr, "filter_image") ? IMAGEFILE : 0; params->filter |= RNA_boolean_get(op->ptr, "filter_movie") ? MOVIEFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_text") ? TEXTFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_python") ? PYSCRIPTFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_font") ? FTFONTFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_sound") ? SOUNDFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_text") ? TEXTFILE : 0; + params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0; if (params->filter != 0) params->flag |= FILE_FILTER; + + params->flag |= FILE_HIDE_DOT; - if (RNA_property_is_set(op->ptr, "display")) { - params->display= RNA_int_get(op->ptr, "display"); - } else { - params->display = FILE_SHORTDISPLAY; - } + if(params->filter & (IMAGEFILE|MOVIEFILE)) + params->display= FILE_IMGDISPLAY; + else + params->display= FILE_SHORTDISPLAY; /* if operator has path set, use it, otherwise keep the last */ if (RNA_property_is_set(op->ptr, "filename")) { @@ -147,12 +153,15 @@ short ED_fileselect_set_params(SpaceFile *sfile) } } else { /* default values, if no operator */ - params->flag = 0; + params->flag |= FILE_HIDE_DOT; params->display = FILE_SHORTDISPLAY; params->filter = 0; params->sort = FILE_SORT_ALPHA; } + /* new params, refresh file list */ + if(sfile->files) filelist_free(sfile->files); + return 1; } @@ -188,8 +197,8 @@ int ED_fileselect_layout_offset(FileLayout* layout, int x, int y) offsetx = (x)/(layout->tile_w + 2*layout->tile_border_x); offsety = (y)/(layout->tile_h + 2*layout->tile_border_y); - if (offsetx > layout->columns-1) offsetx = -1 ; - if (offsety > layout->rows-1) offsety = -1 ; + if (offsetx > layout->columns-1) return -1 ; + if (offsety > layout->rows-1) return -1 ; if (layout->flag & FILE_LAYOUT_HOR) active_file = layout->rows*offsetx + offsety; @@ -386,7 +395,7 @@ int file_select_match(struct SpaceFile *sfile, const char *pattern) void autocomplete_directory(struct bContext *C, char *str, void *arg_v) { char tmp[FILE_MAX]; - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); /* search if str matches the beginning of name */ if(str[0] && sfile->files) { diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index c67a9e7a0d5..9d80dd7273a 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -34,9 +34,12 @@ #include "MEM_guardedalloc.h" +#include "DNA_space_types.h" /* FILE_MAX */ + #include "BLI_blenlib.h" #include "BLI_linklist.h" #include "BLI_dynstr.h" +#include "BLI_string.h" #ifdef WIN32 #include /* need to include windows.h so _WIN32_IE is defined */ @@ -245,7 +248,7 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) FSMenuCategory category = FS_CATEGORY_BOOKMARKS; FILE *fp; - #ifdef WIN32 +#ifdef WIN32 /* Add the drive names to the listing */ { __int64 tmp; @@ -272,8 +275,7 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) SHGetSpecialFolderPath(0, folder, CSIDL_DESKTOPDIRECTORY, 0); fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, folder, 1, 0); } -#endif - +#else #ifdef __APPLE__ { OSErr err=noErr; @@ -293,6 +295,22 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, 1, 0); } } +#else + /* unix */ + { + char dir[FILE_MAXDIR]; + char *home= BLI_gethome(); + + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, "/", 1, 0); + + if(home) { + BLI_snprintf(dir, FILE_MAXDIR, "%s/", home); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); + BLI_snprintf(dir, FILE_MAXDIR, "%s/Desktop/", home); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); + } + } +#endif #endif fp = fopen(filename, "r"); diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index a03026d0184..7cdd1d89041 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -184,7 +184,7 @@ static SpaceLink *file_duplicate(SpaceLink *sl) static void file_refresh(const bContext *C, ScrArea *sa) { - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); FileSelectParams *params = ED_fileselect_get_params(sfile); if (!sfile->folders_prev) @@ -217,9 +217,11 @@ static void file_listener(ScrArea *sa, wmNotifier *wmn) case ND_FILELIST: if (sfile->files) filelist_free(sfile->files); ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); break; case ND_PARAMS: ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); break; } break; @@ -263,7 +265,7 @@ static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) static void file_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= CTX_wm_space_file(C); FileSelectParams *params = ED_fileselect_get_params(sfile); FileLayout *layout=NULL; @@ -305,7 +307,7 @@ static void file_main_area_draw(const bContext *C, ARegion *ar) /* on first read, find active file */ if (params->active_file == -1) { wmEvent *event= CTX_wm_window(C)->eventstate; - file_hilight_set(sfile, ar, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin); + file_hilight_set(sfile, ar, event->x, event->y); } if (params->display == FILE_IMGDISPLAY) { diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 723d3eeaf82..d9f02a35142 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -609,10 +609,6 @@ static const EnumPropertyItem image_file_type_items[] = { static void image_filesel(bContext *C, wmOperator *op, const char *path) { RNA_string_set(op->ptr, "filename", path); - RNA_boolean_set(op->ptr, "filter_image", 1); - RNA_boolean_set(op->ptr, "filter_movie", 1); - RNA_boolean_set(op->ptr, "filter_folder", 1); - RNA_enum_set(op->ptr, "display", FILE_IMGDISPLAY); WM_event_add_fileselect(C, op); } @@ -653,14 +649,6 @@ static int open_invoke(bContext *C, wmOperator *op, wmEvent *event) void IMAGE_OT_open(wmOperatorType *ot) { - PropertyRNA *prop; - - static EnumPropertyItem file_display_items[] = { - {FILE_SHORTDISPLAY, "FILE_SHORTDISPLAY", ICON_SHORTDISPLAY, "Short List", "Display files as short list"}, - {FILE_LONGDISPLAY, "FILE_LONGDISPLAY", ICON_LONGDISPLAY, "Long List", "Display files as a detailed list"}, - {FILE_IMGDISPLAY, "FILE_IMGDISPLAY", ICON_IMGDISPLAY, "Thumbnails", "Display files as thumbnails"}, - {0, NULL, 0, NULL, NULL}}; - /* identifiers */ ot->name= "Open"; ot->idname= "IMAGE_OT_open"; @@ -674,27 +662,14 @@ void IMAGE_OT_open(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open."); - - prop= RNA_def_boolean(ot->srna, "filter_image", 0, "Show image files", ""); - RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE); - prop= RNA_def_boolean(ot->srna, "filter_movie", 0, "Show movie files", ""); - RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE); - prop= RNA_def_boolean(ot->srna, "filter_folder", 0, "Show folders", ""); - RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); - - prop= RNA_def_property(ot->srna, "display", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "display"); - RNA_def_property_enum_items(prop, file_display_items); - RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list"); - + WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE); } /******************** replace image operator ********************/ static int replace_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); char str[FILE_MAX]; if(!sima->image) @@ -740,7 +715,7 @@ void IMAGE_OT_replace(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to replace current image with."); + WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE); } /******************** save image as operator ********************/ @@ -884,15 +859,15 @@ void IMAGE_OT_save_as(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path to save image to."); RNA_def_enum(ot->srna, "file_type", image_file_type_items, R_PNG, "File Type", "File type to save image as."); + WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE); } /******************** save image operator ********************/ static int save_exec(bContext *C, wmOperator *op) { - SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); + SpaceImage *sima= CTX_wm_space_image(C); Image *ima = ED_space_image(sima); ImBuf *ibuf= ED_space_image_buffer(sima); Scene *scene= CTX_data_scene(C); diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c index 56f925a2e81..640c968742c 100644 --- a/source/blender/editors/space_info/info_ops.c +++ b/source/blender/editors/space_info/info_ops.c @@ -330,7 +330,7 @@ void FILE_OT_find_missing_files(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open."); + WM_operator_properties_filesel(ot, 0); } #if 0 diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index f6cf6de4b00..4a300b7390d 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -97,7 +97,6 @@ /* avoid passing multiple args and be more verbose */ #define SEQPROP_STARTFRAME 1<<0 #define SEQPROP_ENDFRAME 1<<1 -#define SEQPROP_FILENAME 1<<2 static void sequencer_generic_props__internal(wmOperatorType *ot, int flag) { @@ -111,9 +110,6 @@ static void sequencer_generic_props__internal(wmOperatorType *ot, int flag) RNA_def_int(ot->srna, "channel", 1, 1, MAXSEQ, "Channel", "Channel to place this strip into", 1, MAXSEQ); - if(flag & SEQPROP_FILENAME) - RNA_def_string(ot->srna, "filename", "", FILE_MAX, "Scene Name", "full path to load the strip data from"); - RNA_def_boolean(ot->srna, "replace_sel", 1, "Replace Selection", "replace the current selection"); } @@ -312,7 +308,8 @@ void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); + WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); RNA_def_boolean(ot->srna, "sound", FALSE, "Sound", "Load hd sound with the movie"); // XXX need to impliment this } @@ -417,7 +414,8 @@ void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); + WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); RNA_def_boolean(ot->srna, "hd", FALSE, "HD Sound", "Load the sound as streaming audio"); // XXX need to impliment this } @@ -512,7 +510,8 @@ void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME); + WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE); + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); RNA_def_collection_runtime(ot->srna, "files", &RNA_OperatorFileListElement, "Files", ""); } @@ -646,7 +645,8 @@ void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_ENDFRAME|SEQPROP_FILENAME); + WM_operator_properties_filesel(ot, 0); + 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_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_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 79912d9ed0e..4c9f47ed170 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -231,7 +231,7 @@ void TEXT_OT_open(wmOperatorType *ot) ot->poll= text_new_poll; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open."); + WM_operator_properties_filesel(ot, FOLDERFILE|TEXTFILE|PYSCRIPTFILE); } /******************* reload operator *********************/ @@ -498,7 +498,7 @@ void TEXT_OT_save_as(wmOperatorType *ot) ot->poll= text_edit_poll; /* properties */ - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path to save image to."); + WM_operator_properties_filesel(ot, FOLDERFILE|TEXTFILE|PYSCRIPTFILE); } /******************* run script operator *********************/ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index da662111898..d24d9af4177 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -200,6 +200,8 @@ typedef struct SpaceFile { struct FileLayout *layout; + short recentnr, bookmarknr; + short systemnr, pad2; } SpaceFile; typedef struct SpaceOops { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index db05246c46d..4fb494256f7 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1232,7 +1232,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna) prop= RNA_def_property(srna, "do_filter", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_FILTER); RNA_def_property_ui_text(prop, "Filter Files", "Enable filtering of files."); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "hide_dot", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_HIDE_DOT); @@ -1249,49 +1249,49 @@ static void rna_def_fileselect_params(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE); RNA_def_property_ui_text(prop, "Filter Images", "Show image files."); RNA_def_property_ui_icon(prop, ICON_FILE_IMAGE, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_blender", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE); RNA_def_property_ui_text(prop, "Filter Blender", "Show .blend files."); RNA_def_property_ui_icon(prop, ICON_FILE_BLEND, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_movie", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE); RNA_def_property_ui_text(prop, "Filter Movies", "Show movie files."); RNA_def_property_ui_icon(prop, ICON_FILE_MOVIE, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_script", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", PYSCRIPTFILE); RNA_def_property_ui_text(prop, "Filter Script", "Show script files."); RNA_def_property_ui_icon(prop, ICON_FILE_SCRIPT, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_font", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", FTFONTFILE); RNA_def_property_ui_text(prop, "Filter Fonts", "Show font files."); RNA_def_property_ui_icon(prop, ICON_FILE_FONT, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_sound", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", SOUNDFILE); RNA_def_property_ui_text(prop, "Filter Sound", "Show sound files."); RNA_def_property_ui_icon(prop, ICON_FILE_SOUND, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_text", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", TEXTFILE); RNA_def_property_ui_text(prop, "Filter Text", "Show text files."); RNA_def_property_ui_icon(prop, ICON_FILE_BLANK, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); prop= RNA_def_property(srna, "filter_folder", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); RNA_def_property_ui_text(prop, "Filter Folder", "Show folders."); RNA_def_property_ui_icon(prop, ICON_FILE_FOLDER, 0); - RNA_def_property_update(prop, NC_FILE | ND_PARAMS, NULL); + RNA_def_property_update(prop, NC_FILE | ND_FILELIST, NULL); } diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index c3655ab2542..590f85fedd7 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -620,6 +620,9 @@ static void rna_def_panel(BlenderRNA *brna) prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "UILayout"); + prop= RNA_def_property(srna, "text", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "drawname"); + /* registration */ prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "type->idname"); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index c2017c1d939..f1fd11a0094 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -488,7 +488,7 @@ static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype) } /* list/channels */ - if(ELEM4(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE)) { + if(ELEM5(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE, SPACE_FILE)) { prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "List Back", ""); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index ca60c6e7637..36c78d17ab3 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -164,6 +164,7 @@ int WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, struct void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring); void WM_operator_properties_free(struct PointerRNA *ptr); +void WM_operator_properties_filesel(struct wmOperatorType *ot, int filter); /* operator as a python command (resultuing string must be free'd) */ char *WM_operator_pystring(struct wmOperator *op); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index e707d096a60..c75feafe623 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -885,10 +885,22 @@ static int handler_boundbox_test(wmEventHandler *handler, wmEvent *event) if(handler->bblocal) { rcti rect= *handler->bblocal; BLI_translate_rcti(&rect, handler->bbwin->xmin, handler->bbwin->ymin); - return BLI_in_rcti(&rect, event->x, event->y); + + if(BLI_in_rcti(&rect, event->x, event->y)) + return 1; + else if(event->type==MOUSEMOVE && BLI_in_rcti(&rect, event->prevx, event->prevy)) + return 1; + else + return 0; + } + else { + if(BLI_in_rcti(handler->bbwin, event->x, event->y)) + return 1; + else if(event->type==MOUSEMOVE && BLI_in_rcti(handler->bbwin, event->prevx, event->prevy)) + return 1; + else + return 0; } - else - return BLI_in_rcti(handler->bbwin, event->x, event->y); } return 1; } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index e048601a4d7..e25c86ea2fd 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -320,6 +320,21 @@ int WM_operator_filesel(bContext *C, wmOperator *op, wmEvent *event) } } +/* default properties for fileselect */ +void WM_operator_properties_filesel(wmOperatorType *ot, int filter) +{ + RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "Path to file."); + + RNA_def_boolean(ot->srna, "filter_blender", (filter & BLENDERFILE), "Filter .blend files", ""); + RNA_def_boolean(ot->srna, "filter_image", (filter & IMAGEFILE), "Filter image files", ""); + RNA_def_boolean(ot->srna, "filter_movie", (filter & MOVIEFILE), "Filter movie files", ""); + RNA_def_boolean(ot->srna, "filter_python", (filter & PYSCRIPTFILE), "Filter python files", ""); + RNA_def_boolean(ot->srna, "filter_font", (filter & FTFONTFILE), "Filter font files", ""); + RNA_def_boolean(ot->srna, "filter_sound", (filter & SOUNDFILE), "Filter sound files", ""); + RNA_def_boolean(ot->srna, "filter_text", (filter & TEXTFILE), "Filter text files", ""); + RNA_def_boolean(ot->srna, "filter_folder", (filter & FOLDERFILE), "Filter folders", ""); +} + /* op->poll */ int WM_operator_winactive(bContext *C) { @@ -678,10 +693,7 @@ static void untitled(char *name) static int wm_open_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { - RNA_string_set(op->ptr, "filename", G.sce); - RNA_boolean_set(op->ptr, "filter_blender", 1); - RNA_boolean_set(op->ptr, "filter_folder", 1); WM_event_add_fileselect(C, op); return OPERATOR_RUNNING_MODAL; @@ -703,7 +715,6 @@ static int wm_open_mainfile_exec(bContext *C, wmOperator *op) static void WM_OT_open_mainfile(wmOperatorType *ot) { - PropertyRNA *prop; ot->name= "Open Blender File"; ot->idname= "WM_OT_open_mainfile"; @@ -711,13 +722,7 @@ static void WM_OT_open_mainfile(wmOperatorType *ot) ot->exec= wm_open_mainfile_exec; ot->poll= WM_operator_winactive; - RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of blendfile to open."); - - prop= RNA_def_boolean(ot->srna, "filter_blender", 0, "Filter Blendfiles", ""); - RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE); - prop= RNA_def_boolean(ot->srna, "filter_folder", 0, "Filter Blendfiles", ""); - RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE); - + WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE); } static int wm_recover_last_session_exec(bContext *C, wmOperator *op) @@ -810,7 +815,7 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot) ot->exec= wm_save_as_mainfile_exec; ot->poll= WM_operator_winactive; - RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", ""); + WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE); RNA_def_boolean(ot->srna, "compress", 0, "Compress", "Write compressed .blend file."); } @@ -839,7 +844,7 @@ static void WM_OT_save_mainfile(wmOperatorType *ot) ot->exec= wm_save_as_mainfile_exec; ot->poll= WM_operator_winactive; - RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", ""); + WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE); RNA_def_boolean(ot->srna, "compress", 0, "Compress", "Write compressed .blend file."); } From 347a1f4376e08ef56d932175669402b3eeb99948 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 28 Jul 2009 16:48:02 +0000 Subject: [PATCH 426/512] 2.5 Keymap feature: RightMouse in pulldown menus allows to assign a new hotkey. --- source/blender/editors/include/UI_interface.h | 3 + source/blender/editors/interface/interface.c | 40 ++++- .../editors/interface/interface_handlers.c | 144 +++++++++++++++++- .../blender/editors/space_outliner/outliner.c | 3 +- source/blender/windowmanager/WM_api.h | 1 + .../blender/windowmanager/intern/wm_keymap.c | 69 ++++++--- source/blender/windowmanager/wm_event_types.h | 4 + 7 files changed, 236 insertions(+), 28 deletions(-) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 8dc766499bc..d818f298de7 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -206,6 +206,8 @@ typedef struct uiLayout uiLayout; #define HSVCIRCLE (42<<9) #define LISTBOX (43<<9) #define LISTROW (44<<9) +#define HOTKEYEVT (45<<9) + #define BUTTYPE (63<<9) /* Drawing @@ -426,6 +428,7 @@ uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int icon, char *str, short x1, short y1, short x2, short y2, char *tip); void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip); +uiBut *uiDefHotKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *keypoin, short *modkeypoin, char *tip); uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, short x1, short y1, short x2, short y2, char *tip); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index ca3be250a92..f6bf8f2cd31 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -739,6 +739,7 @@ static void ui_is_but_sel(uiBut *but) case BUT: push= 2; break; + case HOTKEYEVT: case KEYEVT: push= 2; break; @@ -1846,7 +1847,33 @@ void ui_check_but(uiBut *but) strcat(but->drawstr, WM_key_event_string((short) ui_get_but_val(but))); } break; - + + case HOTKEYEVT: + if (but->flag & UI_SELECT) { + short *sp= (short *)but->func_arg3; + + strcpy(but->drawstr, but->str); + + if(*sp) { + char *str= but->drawstr; + + if(*sp & KM_SHIFT) + str= strcat(str, "Shift "); + if(*sp & KM_CTRL) + str= strcat(str, "Ctrl "); + if(*sp & KM_ALT) + str= strcat(str, "Alt "); + if(*sp & KM_OSKEY) + str= strcat(str, "Cmd "); + } + else + strcat(but->drawstr, "Press a key "); + } else { + /* XXX todo, button currently only used temporarily */ + strcpy(but->drawstr, WM_key_event_string((short) ui_get_but_val(but))); + } + break; + case BUT_TOGDUAL: /* trying to get the dual-icon to left of text... not very nice */ if(but->str[0]) { @@ -2941,6 +2968,17 @@ void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, ui_check_but(but); } +/* short pointers hardcoded */ +/* modkeypoin will be set to KM_SHIFT, KM_ALT, KM_CTRL, KM_OSKEY bits */ +uiBut *uiDefHotKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *keypoin, short *modkeypoin, char *tip) +{ + uiBut *but= ui_def_but(block, HOTKEYEVT|SHO, retval, str, x1, y1, x2, y2, keypoin, 0.0, 0.0, 0.0, 0.0, tip); + but->func_arg3= modkeypoin; /* XXX hrmf, abuse! */ + ui_check_but(but); + return but; +} + + /* arg is pointer to string/name, use uiButSetSearchFunc() below to make this work */ uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, short x1, short y1, short x2, short y2, char *tip) { diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 0987f0d2f2a..5c3fc890144 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -840,6 +840,9 @@ static void ui_apply_button(bContext *C, uiBlock *block, uiBut *but, uiHandleBut ui_apply_but_CHARTAB(C, but, data); break; #endif + case HOTKEYEVT: + ui_apply_but_BUT(C, but, data); + break; case LINK: case INLINK: ui_apply_but_LINK(C, but, data); @@ -1801,6 +1804,60 @@ static int ui_do_but_BUT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEv return WM_UI_HANDLER_CONTINUE; } +static int ui_do_but_HOTKEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event) +{ + if(data->state == BUTTON_STATE_HIGHLIGHT) { + if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val==KM_PRESS) { + but->drawstr[0]= 0; + button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT); + return WM_UI_HANDLER_BREAK; + } + } + else if(data->state == BUTTON_STATE_WAIT_KEY_EVENT) { + short *sp= (short *)but->func_arg3; + + if(event->type == MOUSEMOVE) + return WM_UI_HANDLER_CONTINUE; + + if(ELEM(event->type, ESCKEY, LEFTMOUSE)) { + /* data->cancel doesnt work, this button opens immediate */ + ui_set_but_val(but, 0); + button_activate_state(C, but, BUTTON_STATE_EXIT); + return WM_UI_HANDLER_BREAK; + } + + /* always set */ + *sp= 0; + if(event->shift) + *sp |= KM_SHIFT; + if(event->alt) + *sp |= KM_ALT; + if(event->ctrl) + *sp |= KM_CTRL; + if(event->oskey) + *sp |= KM_OSKEY; + + ui_check_but(but); + ED_region_tag_redraw(data->region); + + if(event->val==KM_PRESS) { + if(ISHOTKEY(event->type)) { + + if(WM_key_event_string(event->type)[0]) + ui_set_but_val(but, event->type); + else + data->cancel= 1; + + button_activate_state(C, but, BUTTON_STATE_EXIT); + return WM_UI_HANDLER_BREAK; + } + } + } + + return WM_UI_HANDLER_CONTINUE; +} + + static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event) { if(data->state == BUTTON_STATE_HIGHLIGHT) { @@ -3103,6 +3160,67 @@ static int ui_do_but_LINK(bContext *C, uiBut *but, uiHandleButtonData *data, wmE return WM_UI_HANDLER_CONTINUE; } +/* callback for hotkey change button/menu */ +static void do_menu_change_hotkey(bContext *C, void *but_v, void *key_v) +{ + uiBut *but= but_v; + IDProperty *prop= (but->opptr)? but->opptr->data: NULL; + short *key= key_v; + char buf[512], *butstr, *cpoin; + + /* signal for escape */ + if(key[0]==0) return; + + WM_key_event_operator_change(C, but->optype->idname, but->opcontext, prop, key[0], key[1]); + + /* complex code to change name of button */ + if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) { + + butstr= MEM_mallocN(strlen(but->str)+strlen(buf)+2, "menu_block_set_keymaps"); + + /* XXX but->str changed... should not, remove the hotkey from it */ + cpoin= strchr(but->str, '|'); + if(cpoin) *cpoin= 0; + + strcpy(butstr, but->str); + strcat(butstr, "|"); + strcat(butstr, buf); + + but->str= but->strdata; + BLI_strncpy(but->str, butstr, sizeof(but->strdata)); + MEM_freeN(butstr); + + ui_check_but(but); + } + +} + + +static uiBlock *menu_change_hotkey(bContext *C, ARegion *ar, void *arg_but) +{ + uiBlock *block; + uiBut *but= arg_but; + wmOperatorType *ot= WM_operatortype_find(but->optype->idname, 1); + static short dummy[2]; + char buf[OP_MAX_TYPENAME+10]; + + dummy[0]= 0; + dummy[1]= 0; + + block= uiBeginBlock(C, ar, "_popup", UI_EMBOSSP); + uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_MOVEMOUSE_QUIT|UI_BLOCK_RET_1); + + BLI_strncpy(buf, ot->name, OP_MAX_TYPENAME); + strcat(buf, " |"); + + but= uiDefHotKeyevtButS(block, 0, buf, 0, 0, 200, 20, dummy, dummy+1, ""); + uiButSetFunc(but, do_menu_change_hotkey, arg_but, dummy); + + uiPopupBoundsBlock(block, 6.0f, 50, -10); + uiEndBlock(C, block); + + return block; +} static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) { @@ -3145,9 +3263,22 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) } /* handle menu */ else if(event->type == RIGHTMOUSE && event->val == KM_PRESS) { - button_timers_tooltip_remove(C, but); - ui_but_anim_menu(C, but); - return WM_UI_HANDLER_BREAK; + /* RMB has two options now */ + if(but->rnapoin.data && but->rnaprop) { + button_timers_tooltip_remove(C, but); + ui_but_anim_menu(C, but); + return WM_UI_HANDLER_BREAK; + } + else if((but->block->flag & UI_BLOCK_LOOP) && but->optype) { + IDProperty *prop= (but->opptr)? but->opptr->data: NULL; + char buf[512]; + + if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) { + + uiPupBlock(C, menu_change_hotkey, but); + + } + } } } @@ -3176,6 +3307,9 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) case KEYEVT: retval= ui_do_but_KEYEVT(C, but, data, event); break; + case HOTKEYEVT: + retval= ui_do_but_HOTKEYEVT(C, but, data, event); + break; case TOGBUT: case TOG: case TOGR: @@ -3521,6 +3655,10 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA } button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); + /* activate right away */ + if(but->type==HOTKEYEVT) + button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT); + if(type == BUTTON_ACTIVATE_OPEN) { button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 21ba9cfa707..b05d9637a69 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1132,8 +1132,9 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i te->name= km->nameid; if(!(tselem->flag & TSE_CLOSED)) { + a= 0; - for (kmi= km->keymap.first; kmi; kmi= kmi->next) { + for (kmi= km->keymap.first; kmi; kmi= kmi->next, a++) { const char *key= WM_key_event_string(kmi->type); if(key[0]) { diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 36c78d17ab3..7d3dd478178 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -100,6 +100,7 @@ int WM_key_event_is_tweak(short type); const char *WM_key_event_string(short type); char *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len); +void WM_key_event_operator_change(const bContext *C, const char *opname, int opcontext, struct IDProperty *properties, short key, short modifier); /* handlers */ diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index 1d959665f40..ad0dd786791 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -65,6 +65,8 @@ static void keymap_event_set(wmKeymapItem *kmi, short type, short val, int modif } else { + kmi->shift= kmi->ctrl= kmi->alt= kmi->oskey= 0; + /* defines? */ if(modifier & KM_SHIFT) kmi->shift= 1; @@ -232,7 +234,7 @@ static char *wm_keymap_item_to_string(wmKeymapItem *kmi, char *str, int len) strcat(buf, "Alt "); if(kmi->oskey) - strcat(buf, "OS "); + strcat(buf, "Cmd "); strcat(buf, WM_key_event_string(kmi->type)); BLI_strncpy(str, buf, len); @@ -240,7 +242,7 @@ static char *wm_keymap_item_to_string(wmKeymapItem *kmi, char *str, int len) return str; } -static char *wm_keymap_item_find(ListBase *handlers, const char *opname, int opcontext, IDProperty *properties, char *str, int len) +static wmKeymapItem *wm_keymap_item_find_handlers(ListBase *handlers, const char *opname, int opcontext, IDProperty *properties) { wmEventHandler *handler; wmKeymapItem *kmi; @@ -251,45 +253,66 @@ static char *wm_keymap_item_find(ListBase *handlers, const char *opname, int opc for(kmi=handler->keymap->first; kmi; kmi=kmi->next) if(strcmp(kmi->idname, opname) == 0 && WM_key_event_string(kmi->type)[0]) if(kmi->ptr && IDP_EqualsProperties(properties, kmi->ptr->data)) - return wm_keymap_item_to_string(kmi, str, len); + return kmi; return NULL; } -char *WM_key_event_operator_string(const bContext *C, const char *opname, int opcontext, IDProperty *properties, char *str, int len) +static wmKeymapItem *wm_keymap_item_find(const bContext *C, const char *opname, int opcontext, IDProperty *properties) { - char *found= NULL; + wmKeymapItem *found= NULL; /* look into multiple handler lists to find the item */ if(CTX_wm_window(C)) - if((found= wm_keymap_item_find(&CTX_wm_window(C)->handlers, opname, opcontext, properties, str, len))) - return found; + found= wm_keymap_item_find_handlers(&CTX_wm_window(C)->handlers, opname, opcontext, properties); + - if(CTX_wm_area(C)) - if((found= wm_keymap_item_find(&CTX_wm_area(C)->handlers, opname, opcontext, properties, str, len))) - return found; + if(CTX_wm_area(C) && found==NULL) + found= wm_keymap_item_find_handlers(&CTX_wm_area(C)->handlers, opname, opcontext, properties); - if(ELEM(opcontext, WM_OP_EXEC_REGION_WIN, WM_OP_INVOKE_REGION_WIN)) { - if(CTX_wm_area(C)) { - ARegion *ar= CTX_wm_area(C)->regionbase.first; - for(; ar; ar= ar->next) - if(ar->regiontype==RGN_TYPE_WINDOW) - break; + if(found==NULL) { + if(ELEM(opcontext, WM_OP_EXEC_REGION_WIN, WM_OP_INVOKE_REGION_WIN)) { + if(CTX_wm_area(C)) { + ARegion *ar= CTX_wm_area(C)->regionbase.first; + for(; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_WINDOW) + break; - if(ar) - if((found= wm_keymap_item_find(&ar->handlers, opname, opcontext, properties, str, len))) - return found; + if(ar) + found= wm_keymap_item_find_handlers(&ar->handlers, opname, opcontext, properties); + } + } + else { + if(CTX_wm_region(C)) + found= wm_keymap_item_find_handlers(&CTX_wm_region(C)->handlers, opname, opcontext, properties); } } - else { - if(CTX_wm_region(C)) - if((found= wm_keymap_item_find(&CTX_wm_region(C)->handlers, opname, opcontext, properties, str, len))) - return found; + + return found; +} + +char *WM_key_event_operator_string(const bContext *C, const char *opname, int opcontext, IDProperty *properties, char *str, int len) +{ + wmKeymapItem *found= wm_keymap_item_find(C, opname, opcontext, properties); + + if(found) { + wm_keymap_item_to_string(found, str, len); + return str; } return NULL; } +/* searches context and changes keymap item, if found */ +void WM_key_event_operator_change(const bContext *C, const char *opname, int opcontext, IDProperty *properties, short key, short modifier) +{ + wmKeymapItem *found= wm_keymap_item_find(C, opname, opcontext, properties); + + if(found) { + keymap_event_set(found, key, KM_PRESS, modifier, 0); + } +} + /* ********************* */ int WM_key_event_is_tweak(short type) diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index 6e7186542de..ee18a0fb45b 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -196,6 +196,10 @@ /* only used for KM_TEXTINPUT, so assume that we want all user-inputtable ascii codes included */ #define ISKEYBOARD(event) (event >=' ' && event <=255) +/* test whether event type is acceptable as hotkey, excluding modifiers */ +#define ISHOTKEY(event) (event >=' ' && event <=320 && !(event>=LEFTCTRLKEY && event<=ESCKEY) && !(event>=UNKNOWNKEY && event<=GRLESSKEY)) + + /* **************** BLENDER GESTURE EVENTS ********************* */ #define EVT_ACTIONZONE_AREA 0x5000 From 87b547c79f9d2e24f8d33fbeb376fdbe43891b14 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 28 Jul 2009 16:50:13 +0000 Subject: [PATCH 427/512] 2.5 Fix in include file, missing 'struct' --- source/blender/windowmanager/WM_api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7d3dd478178..0d3ad96d8c3 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -100,7 +100,7 @@ int WM_key_event_is_tweak(short type); const char *WM_key_event_string(short type); char *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len); -void WM_key_event_operator_change(const bContext *C, const char *opname, int opcontext, struct IDProperty *properties, short key, short modifier); +void WM_key_event_operator_change(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, short key, short modifier); /* handlers */ From e3d17ca33d61b320e1337bec1998c75c8606917f Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 28 Jul 2009 16:56:22 +0000 Subject: [PATCH 428/512] 2.5 OSX fix: carbon code can not be included in blender code, it conflicts with struct ID --- source/blender/editors/space_file/fsmenu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 9d80dd7273a..12a3c38ab09 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -51,6 +51,8 @@ #endif #ifdef __APPLE__ +/* XXX BIG WARNING: carbon.h can not be included in blender code, it conflicts with struct ID */ +#define ID ID_ #include #include "BKE_utildefines.h" From 561db001cc676763710dd0c587773a3cf2ffb5eb Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Tue, 28 Jul 2009 17:22:49 +0000 Subject: [PATCH 429/512] PovrayRenderEngine: Should now work with win32 and win64 povray installations --- release/io/engine_render_pov.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index 4d6c508e2ca..c8d5b77d4be 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -6,6 +6,13 @@ import os import sys import time +import platform as pltfrm + +if pltfrm.architecture()[0] == '64bit': + bitness = 64 +else: + bitness = 32 + def write_pov(filename, scene=None, info_callback = None): file = open(filename, 'w') @@ -487,7 +494,16 @@ class PovrayRenderEngine(bpy.types.RenderEngine): # This works too but means we have to wait until its done # os.system('povray %s' % self.temp_file_ini) - self.process = subprocess.Popen(["povray", self.temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE + pov_binary = "povray" + + if sys.platform=='win32': + if bitness == 64: + pov_binary = "pvengine64" + else: + pov_binary = "pvengine" + + self.process = subprocess.Popen([pov_binary, self.temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE + print ("***-DONE-***") def _cleanup(self): From 94e06c9859478e1afdd1814f186c441327df3e5d Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Tue, 28 Jul 2009 17:23:45 +0000 Subject: [PATCH 430/512] changed some sprintfs to strcats, thanks to Fredrik Axelsson for the patch --- source/blender/src/editmesh_loop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/src/editmesh_loop.c b/source/blender/src/editmesh_loop.c index dfd18e208fb..21cd69cd2b4 100644 --- a/source/blender/src/editmesh_loop.c +++ b/source/blender/src/editmesh_loop.c @@ -246,9 +246,9 @@ void CutEdgeloop(int numcuts) sprintf(msg,"Number of Cuts: %d",numcuts); if(smooth){ - sprintf(msg,"%s (S)mooth: on",msg); + strcat(msg," (S)mooth: on"); } else { - sprintf(msg,"%s (S)mooth: off",msg); + strcat(msg," (S)mooth: off"); } headerprint(msg); From a5e1ff294e9e4b2a8b50f197693283f59eb4ff43 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 17:59:59 +0000 Subject: [PATCH 431/512] 2.5: UI * Text editing in buttons now hides the label, to give more space. * Tweak slider buttons text clipping, happened a bit too early. * Move editing text closer to the left, because the < > buttons are not visible then anyway. --- source/blender/editors/interface/interface.c | 6 +-- .../editors/interface/interface_handlers.c | 6 ++- .../editors/interface/interface_widgets.c | 48 +++++++++++-------- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index f6bf8f2cd31..9e9b6165a73 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -1887,10 +1887,8 @@ void ui_check_but(uiBut *but) } /* if we are doing text editing, this will override the drawstr */ - if(but->editstr) { - strcpy(but->drawstr, but->str); - strcat(but->drawstr, but->editstr); - } + if(but->editstr) + strcpy(but->drawstr, but->editstr); /* text clipping moved to widget drawing code itself */ } diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5c3fc890144..50877439e89 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1045,15 +1045,17 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, sho /* XXX solve generic */ if(but->type==NUM || but->type==NUMSLI) - startx += 20; + startx += (int)(0.5f*(but->y2 - but->y1)); + else if(but->type==TEX) + startx += 5; + /* XXX does not take zoom level into account */ while((BLF_width(origstr+but->ofs) + startx) > x) { if (but->pos <= 0) break; but->pos--; origstr[but->pos+but->ofs] = 0; } - but->pos -= strlen(but->str); but->pos += but->ofs; if(but->pos<0) but->pos= 0; diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 9678a5dfc9d..485f8a2e1e7 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -749,7 +749,7 @@ static void ui_text_leftclip(uiFontStyle *fstyle, uiBut *but, rcti *rect) /* textbut exception */ if(but->editstr && but->pos != -1) { - int pos= but->pos+strlen(but->str); + int pos= but->pos+1; if(pos-1 < but->ofs) { pos= but->ofs-pos+1; @@ -784,44 +784,46 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw; if ((but->selend - but->selsta) > 0) { - /* XXX weak, why is this? (ton) */ - t= but->str[0]?1:-2; - /* text button selection */ - selsta_tmp = but->selsta + strlen(but->str); - selend_tmp = but->selend + strlen(but->str); + selsta_tmp = but->selsta; + selend_tmp = but->selend; if(but->drawstr[0]!=0) { ch= but->drawstr[selsta_tmp]; but->drawstr[selsta_tmp]= 0; - selsta_draw = BLF_width(but->drawstr+but->ofs) + t; + selsta_draw = BLF_width(but->drawstr+but->ofs); but->drawstr[selsta_tmp]= ch; ch= but->drawstr[selend_tmp]; but->drawstr[selend_tmp]= 0; - selwidth_draw = BLF_width(but->drawstr+but->ofs) + t; + selwidth_draw = BLF_width(but->drawstr+but->ofs); but->drawstr[selend_tmp]= ch; + + /* if at pos 0, leave a bit more to the left */ + t= (pos == 0)? 0: 1; glColor3ubv((unsigned char*)wcol->item); glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2); } } else { /* text cursor */ - pos= but->pos+strlen(but->str); + pos= but->pos; if(pos >= but->ofs) { if(but->drawstr[0]!=0) { ch= but->drawstr[pos]; but->drawstr[pos]= 0; - t= BLF_width(but->drawstr+but->ofs) + 1; + t= BLF_width(but->drawstr+but->ofs); but->drawstr[pos]= ch; } - else t= 1; + + /* if at pos 0, leave a bit more to the left */ + t += (pos == 0)? 0: 1; glColor3ub(255,0,0); glRects(rect->xmin+t, rect->ymin+2, rect->xmin+t+2, rect->ymax-2); @@ -857,7 +859,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB if(but==NULL) return; /* cutting off from left part */ - if ELEM3(but->type, NUM, NUMABS, TEX) { + if ELEM5(but->type, NUM, NUMABS, NUMSLI, SLI, TEX) { ui_text_leftclip(fstyle, but, rect); } else but->ofs= 0; @@ -889,7 +891,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB if(but->editstr || (but->flag & UI_TEXT_LEFT)) rect->xmin += 5; } - else if(but->flag & UI_TEXT_LEFT) + else if((but->flag & UI_TEXT_LEFT)) rect->xmin += 5; /* always draw text for textbutton cursor */ @@ -1599,6 +1601,7 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round { uiWidgetBase wtb; float rad= 0.5f*(rect->ymax - rect->ymin); + int textoffs; widget_init(&wtb); @@ -1613,9 +1616,15 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round widgetbase_draw(&wtb, wcol); /* text space */ - rect->xmin += (rect->ymax-rect->ymin); - rect->xmax -= (rect->ymax-rect->ymin); - + if(!(state & UI_TEXTINPUT)) { + rect->xmin += (rect->ymax-rect->ymin); + rect->xmax -= (rect->ymax-rect->ymin); + } + else { + textoffs= rad; + rect->xmin += textoffs; + rect->xmax -= textoffs; + } } @@ -1822,6 +1831,7 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s rcti rect1; double value; float offs, fac; + int textoffs; char outline[3]; widget_init(&wtb); @@ -1831,6 +1841,7 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s /* fully rounded */ offs= 0.5f*(rect->ymax - rect->ymin); + textoffs= offs; round_box_edges(&wtb, roundboxalign, rect, offs); wtb.outline= 0; @@ -1872,9 +1883,8 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s widgetbase_draw(&wtb, wcol); /* text space */ - rect->xmin += (rect->ymax-rect->ymin); - rect->xmax -= (rect->ymax-rect->ymin); - + rect->xmin += textoffs; + rect->xmax -= textoffs; } static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign) From 86336f5cdd2bbe607bbece162bddfade7062b305 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Tue, 28 Jul 2009 18:07:00 +0000 Subject: [PATCH 432/512] 2.5 file browser Bugfix: revert to previous behaviour of BLI_rename, is used for safe blendfile saving. Added guard in file browser though to prevent user from invoking this. --- source/blender/blenlib/intern/fileops.c | 9 ++++----- source/blender/editors/space_file/file_draw.c | 15 +++++++++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index b9c0dd65ede..0228032df01 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -311,9 +311,9 @@ void BLI_recurdir_fileops(char *dirname) { int BLI_rename(char *from, char *to) { if (!BLI_exists(from)) return 0; - /* refuse to rename if file already exists */ - if (BLI_exists(to)) - return 1; + /* make sure the filenames are different (case insensitive) before removing */ + if (BLI_exists(to) && BLI_strcasecmp(from, to)) + if(BLI_delete(to, 0, 0)) return 1; return rename(from, to); } @@ -391,8 +391,7 @@ void BLI_recurdir_fileops(char *dirname) { int BLI_rename(char *from, char *to) { if (!BLI_exists(from)) return 0; - /* refuse to rename if file already exists */ - if (BLI_exists(to)) return 1; + if (BLI_exists(to)) if(BLI_delete(to, 0, 0)) return 1; return rename(from, to); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 1074a24f9ae..e807bad28bf 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -501,6 +501,8 @@ static void renamebutton_cb(bContext *C, void *arg1, char *oldname) char orgname[FILE_MAX+12]; char filename[FILE_MAX+12]; SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + ARegion* ar = CTX_wm_region(C); + struct direntry *file = (struct direntry *)arg1; BLI_make_file_string(G.sce, orgname, sfile->params->dir, oldname); @@ -508,10 +510,15 @@ static void renamebutton_cb(bContext *C, void *arg1, char *oldname) BLI_make_file_string(G.sce, newname, sfile->params->dir, filename); if( strcmp(orgname, newname) != 0 ) { - BLI_rename(orgname, newname); - - /* to refresh the file list, does sorting again */ - filelist_free(sfile->files); + if (!BLI_exists(newname)) { + BLI_rename(orgname, newname); + /* to make sure we show what is on disk */ + filelist_free(sfile->files); + } else { + BLI_strncpy(file->relname, oldname, strlen(oldname)+1); + } + + ED_region_tag_redraw(ar); } } From c645f3660d9361a0a9ca8b0fd55b54d2f5007835 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Tue, 28 Jul 2009 18:20:16 +0000 Subject: [PATCH 433/512] 2.5 file browser * Bugfix: keep the filename when changing directory, either by clicking on it or by selecting a bookmark * MSVC uninitialized variable runtime check fix in widget_draw_text --- source/blender/editors/interface/interface_widgets.c | 2 +- source/blender/editors/space_file/file_ops.c | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 485f8a2e1e7..cea3038b901 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -780,7 +780,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b /* text button selection and cursor */ if(but->editstr && but->pos != -1) { - short t, pos, ch; + short t=0, pos=0, ch; short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw; if ((but->selend - but->selsta) > 0) { diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index c515ef6e295..65a46d6514d 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -157,7 +157,6 @@ static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, s BLI_add_slash(params->dir); } - params->file[0] = '\0'; file_change_dir(sfile); retval = FILE_SELECT_DIR; } @@ -322,7 +321,6 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) BLI_strncpy(params->dir, entry, sizeof(params->dir)); BLI_cleanup_dir(G.sce, params->dir); file_change_dir(sfile); - params->file[0] = '\0'; WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); } From 5d7a7525a4a5d593fd708801d5fd54f4d5a3035a Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Tue, 28 Jul 2009 18:25:02 +0000 Subject: [PATCH 434/512] 2.5 file browser Bugfix: scrollwheel in left panel area should pan, not zoom. --- source/blender/editors/space_file/space_file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 7cdd1d89041..aa879820cff 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -535,7 +535,7 @@ void ED_spacetype_file(void) art= MEM_callocN(sizeof(ARegionType), "spacetype file region"); art->regionid = RGN_TYPE_CHANNELS; art->minsizex= 240; - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + art->keymapflag= ED_KEYMAP_UI; art->listener= file_channel_area_listener; art->init= file_channel_area_init; art->draw= file_channel_area_draw; From 9a874da36c2e9eb5a4d48c8c7bbce3db48f882a9 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 18:51:06 +0000 Subject: [PATCH 435/512] 2.5: File browse button in ui layouts now works, e.g. for render output path or fluidsim path. --- source/blender/editors/include/UI_interface.h | 5 +- .../editors/interface/interface_anim.c | 4 ++ .../editors/interface/interface_handlers.c | 11 ++- .../editors/interface/interface_layout.c | 32 ++++++++- .../editors/space_buttons/buttons_intern.h | 1 + .../editors/space_buttons/buttons_ops.c | 71 +++++++++++++++++++ .../editors/space_buttons/space_buttons.c | 1 + 7 files changed, 121 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index d818f298de7..70fbad3216d 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -142,6 +142,7 @@ typedef struct uiLayout uiLayout; #define UI_BUT_ANIMATED_KEY (1<<21) #define UI_BUT_DRIVEN (1<<22) #define UI_BUT_INACTIVE (1<<23) +#define UI_BUT_LAST_ACTIVE (1<<24) #define UI_PANEL_WIDTH 340 #define UI_COMPACT_PANEL_WIDTH 160 @@ -674,9 +675,9 @@ void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func); void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname); void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname); -/* Animation */ - +/* Helpers for Operators */ void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index); +void uiFileBrowseContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop); /* Styled text draw */ void uiStyleFontSet(struct uiFontStyle *fs); diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 4a2ef50a31b..d2e9236fcff 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -165,6 +165,10 @@ void uiAnimContextProperty(const bContext *C, struct PointerRNA *ptr, struct Pro uiBlock *block; uiBut *but; + memset(ptr, 0, sizeof(*ptr)); + *prop= NULL; + *index= 0; + if(ar) { for(block=ar->uiblocks.first; block; block=block->next) { for(but=block->buttons.first; but; but= but->next) { diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 50877439e89..93293a6f352 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3687,6 +3687,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *but, int mousemove) { uiBlock *block= but->block; + uiBut *bt; /* ensure we are in the exit state */ if(data->state != BUTTON_STATE_EXIT) @@ -3712,7 +3713,14 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b if(!data->cancel) ui_apply_autokey_undo(C, but); - /* disable tooltips until mousemove */ + /* disable tooltips until mousemove + last active flag */ + for(block=data->region->uiblocks.first; block; block=block->next) { + for(bt=block->buttons.first; bt; bt=bt->next) + bt->flag &= ~UI_BUT_LAST_ACTIVE; + + block->tooltipdisabled= 1; + } + ui_blocks_set_tooltips(data->region, 0); /* clean up */ @@ -3728,6 +3736,7 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b MEM_freeN(but->active); but->active= NULL; but->flag &= ~(UI_ACTIVE|UI_SELECT); + but->flag |= UI_BUT_LAST_ACTIVE; ui_check_but(but); /* adds empty mousemove in queue for re-init handler, in case mouse is diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 2705cde27c9..6932ad350b0 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -486,7 +486,9 @@ static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, i if(subtype == PROP_FILEPATH || subtype == PROP_DIRPATH) { uiBlockSetCurLayout(block, uiLayoutRow(sub, 1)); uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w-UI_UNIT_X, h); - but= uiDefIconBut(block, BUT, 0, ICON_FILESEL, x, y, UI_UNIT_X, h, NULL, 0.0f, 0.0f, 0.0f, 0.0f, "DUMMY file select button"); /* XXX */ + + /* BUTTONS_OT_file_browse calls uiFileBrowseContextProperty */ + but= uiDefIconButO(block, BUT, "BUTTONS_OT_file_browse", WM_OP_INVOKE_DEFAULT, ICON_FILESEL, x, y, UI_UNIT_X, h, "Browse for file or directory."); } else but= uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w, h); @@ -495,6 +497,34 @@ static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, i return but; } +void uiFileBrowseContextProperty(const bContext *C, PointerRNA *ptr, PropertyRNA **prop) +{ + ARegion *ar= CTX_wm_region(C); + uiBlock *block; + uiBut *but, *prevbut; + + memset(ptr, 0, sizeof(*ptr)); + *prop= NULL; + + if(!ar) + return; + + for(block=ar->uiblocks.first; block; block=block->next) { + for(but=block->buttons.first; but; but= but->next) { + prevbut= but->prev; + + /* find the button before the active one */ + if((but->flag & UI_BUT_LAST_ACTIVE) && prevbut && prevbut->rnapoin.id.data) { + if(RNA_property_type(prevbut->rnaprop) == PROP_STRING) { + *ptr= prevbut->rnapoin; + *prop= prevbut->rnaprop; + return; + } + } + } + } +} + /********************* Button Items *************************/ /* disabled item */ diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index c505c7fdb18..8ed17ab1fa8 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -89,6 +89,7 @@ void PARTICLE_OT_target_move_down(struct wmOperatorType *ot); void SCENE_OT_render_layer_add(struct wmOperatorType *ot); void SCENE_OT_render_layer_remove(struct wmOperatorType *ot); +void BUTTONS_OT_file_browse(struct wmOperatorType *ot); void BUTTONS_OT_toolbox(struct wmOperatorType *ot); #endif /* ED_BUTTONS_INTERN_H */ diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index b1ffc7249f4..e52efe8508d 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -72,6 +72,7 @@ #include "RNA_define.h" #include "UI_interface.h" +#include "UI_resources.h" #include "buttons_intern.h" // own include @@ -935,3 +936,73 @@ void BUTTONS_OT_toolbox(wmOperatorType *ot) ot->invoke= toolbox_invoke; } +/********************** filebrowse operator *********************/ + +typedef struct FileBrowseOp { + PointerRNA ptr; + PropertyRNA *prop; +} FileBrowseOp; + +static int file_browse_exec(bContext *C, wmOperator *op) +{ + FileBrowseOp *fbo= op->customdata; + char *str; + + str= RNA_string_get_alloc(op->ptr, "filename", 0, 0); + RNA_property_string_set(&fbo->ptr, fbo->prop, str); + RNA_property_update(C, &fbo->ptr, fbo->prop); + MEM_freeN(str); + + MEM_freeN(op->customdata); + return OPERATOR_FINISHED; +} + +static int file_browse_cancel(bContext *C, wmOperator *op) +{ + MEM_freeN(op->customdata); + op->customdata= NULL; + + return OPERATOR_CANCELLED; +} + +static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + PointerRNA ptr; + PropertyRNA *prop; + FileBrowseOp *fbo; + char *str; + + uiFileBrowseContextProperty(C, &ptr, &prop); + + if(!prop) + return OPERATOR_CANCELLED; + + fbo= MEM_callocN(sizeof(FileBrowseOp), "FileBrowseOp"); + fbo->ptr= ptr; + fbo->prop= prop; + op->customdata= fbo; + + str= RNA_property_string_get_alloc(&ptr, prop, 0, 0); + RNA_string_set(op->ptr, "filename", str); + MEM_freeN(str); + + WM_event_add_fileselect(C, op); + + return OPERATOR_RUNNING_MODAL; +} + +void BUTTONS_OT_file_browse(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "File Browse"; + ot->idname= "BUTTONS_OT_file_browse"; + + /* api callbacks */ + ot->invoke= file_browse_invoke; + ot->exec= file_browse_exec; + ot->cancel= file_browse_cancel; + + /* properties */ + WM_operator_properties_filesel(ot, 0); +} + diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 0195ba4b18d..0f57152cef6 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -209,6 +209,7 @@ void buttons_operatortypes(void) WM_operatortype_append(SCENE_OT_render_layer_remove); WM_operatortype_append(BUTTONS_OT_toolbox); + WM_operatortype_append(BUTTONS_OT_file_browse); } void buttons_keymap(struct wmWindowManager *wm) From 801d44a09efd98a2345dd8b5938b4d811bbf68fc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 18:54:02 +0000 Subject: [PATCH 436/512] 2.5: Materials and textures can now be assigned again even if not slot for them is available. --- release/ui/buttons_material.py | 9 +++-- release/ui/buttons_texture.py | 32 +++++++-------- source/blender/makesrna/intern/rna_brush.c | 40 ++++++++++--------- source/blender/makesrna/intern/rna_lamp.c | 34 +++++++++------- source/blender/makesrna/intern/rna_material.c | 37 +++++++++-------- source/blender/makesrna/intern/rna_object.c | 27 +++++++------ source/blender/makesrna/intern/rna_world.c | 33 ++++++++------- 7 files changed, 115 insertions(+), 97 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 30f7f7122dc..66eca1a14b8 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -52,10 +52,13 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): split = layout.split(percentage=0.65) - if ob and slot: - split.template_ID(slot, "material", new="material.new") + if ob: + split.template_ID(ob, "active_material", new="material.new") row = split.row() - row.itemR(slot, "link", expand=True) + if slot: + row.itemR(slot, "link", expand=True) + else: + row.itemL() elif mat: split.template_ID(space, "pin_id") split.itemS() diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index df409d3c524..d638d1356f9 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -48,26 +48,26 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): wo = context.world br = context.brush space = context.space_data - slot = context.texture_slot - if ma or la or wo or br: + if ma: + id = ma + elif la: + id = la + elif wo: + id = wo + elif br: + id = br + else: + id = None + + if id: row = layout.row() - if ma: - row.template_list(ma, "textures", ma, "active_texture_index", type="ICONS") - elif la: - row.template_list(la, "textures", la, "active_texture_index", type="ICONS") - elif wo: - row.template_list(wo, "textures", wo, "active_texture_index", type="ICONS") - elif br: - row.template_list(br, "textures", br, "active_texture_index", type="ICONS") + row.template_list(id, "textures", id, "active_texture_index", type="ICONS") split = layout.split(percentage=0.65) - if ma or la or wo or br: - if slot: - split.template_ID(slot, "texture", new="texture.new") - else: - split.itemS() + if id: + split.template_ID(id, "active_texture", new="texture.new") elif tex: split.template_ID(space, "pin_id") @@ -75,8 +75,6 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): (context.sculpt_object or context.vertex_paint_object or \ context.weight_paint_object or context.texture_paint_object): split.itemR(space, "brush_texture", text="Brush", toggle=True) - else: - split.itemS() layout.itemS() diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index e064fd7f935..2bb4333365b 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -46,29 +46,32 @@ static void rna_Brush_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *p static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr) { - Brush *brush= (Brush*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, brush->mtex[(int)brush->texact]); + Brush *br= (Brush*)ptr->data; + Tex *tex; + + tex= (br->mtex[(int)br->texact])? br->mtex[(int)br->texact]->tex: NULL; + return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } -static void rna_Brush_active_texture_index_set(PointerRNA *ptr, int value) +static void rna_Brush_active_texture_set(PointerRNA *ptr, PointerRNA value) { - Brush *brush= (Brush*)ptr->data; - int act= brush->texact; + Brush *br= (Brush*)ptr->data; + int act= br->texact; - if(value == act || value < 0 || value >= MAX_MTEX) - return; + if(br->mtex[act] && br->mtex[act]->tex) + id_us_min(&br->mtex[act]->tex->id); - /* auto create/free mtex on activate/deactive, so we can edit - * the texture pointer in the buttons UI. */ - if(brush->mtex[act] && !brush->mtex[act]->tex) { - MEM_freeN(brush->mtex[act]); - brush->mtex[act]= NULL; + if(value.data) { + if(!br->mtex[act]) + br->mtex[act]= add_mtex(); + + br->mtex[act]->tex= value.data; + id_us_plus(&br->mtex[act]->tex->id); + } + else if(br->mtex[act]) { + MEM_freeN(br->mtex[act]); + br->mtex[act]= NULL; } - - brush->texact= value; - - if(!brush->mtex[value]) - brush->mtex[value]= add_mtex(); } static float rna_Brush_rotation_get(PointerRNA *ptr) @@ -224,7 +227,8 @@ void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve."); /* texture */ - rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get", "rna_Brush_active_texture_index_set", "TextureSlot"); + rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get", + "rna_Brush_active_texture_set", "TextureSlot"); /* clone tool */ prop= RNA_def_property(srna, "clone_image", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index b8150ee3c7d..299bd37496b 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -64,30 +64,33 @@ static void rna_Lamp_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *pt static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr) { Lamp *la= (Lamp*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, la->mtex[(int)la->texact]); + Tex *tex; + + tex= (la->mtex[(int)la->texact])? la->mtex[(int)la->texact]->tex: NULL; + return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } -static void rna_Lamp_active_texture_index_set(PointerRNA *ptr, int value) +static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value) { Lamp *la= (Lamp*)ptr->data; int act= la->texact; - if(value == act || value < 0 || value >= MAX_MTEX) - return; + if(la->mtex[act] && la->mtex[act]->tex) + id_us_min(&la->mtex[act]->tex->id); - /* auto create/free mtex on activate/deactive, so we can edit - * the texture pointer in the buttons UI. */ - if(la->mtex[act] && !la->mtex[act]->tex) { + if(value.data) { + if(!la->mtex[act]) { + la->mtex[act]= add_mtex(); + la->mtex[act]->texco= TEXCO_GLOB; + } + + la->mtex[act]->tex= value.data; + id_us_plus(&la->mtex[act]->tex->id); + } + else if(la->mtex[act]) { MEM_freeN(la->mtex[act]); la->mtex[act]= NULL; } - - la->texact= value; - - if(!la->mtex[value]) { - la->mtex[value]= add_mtex(); - la->mtex[value]->texco= TEXCO_GLOB; - } } static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr) @@ -349,7 +352,8 @@ static void rna_def_lamp(BlenderRNA *brna) RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); /* textures */ - rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", "rna_Lamp_active_texture_index_set", "LampTextureSlot"); + rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", + "rna_Lamp_active_texture_set", "LampTextureSlot"); } static void rna_def_lamp_falloff(StructRNA *srna) diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index f8cead563ff..d7c677d05f3 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -85,28 +85,31 @@ static void rna_Material_mtex_begin(CollectionPropertyIterator *iter, PointerRNA static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr) { Material *ma= (Material*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, ma->mtex[(int)ma->texact]); + Tex *tex; + + tex= (ma->mtex[(int)ma->texact])? ma->mtex[(int)ma->texact]->tex: NULL; + return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } -static void rna_Material_active_texture_index_set(PointerRNA *ptr, int value) +static void rna_Material_active_texture_set(PointerRNA *ptr, PointerRNA value) { Material *ma= (Material*)ptr->data; int act= ma->texact; - if(value == act || value < 0 || value >= MAX_MTEX) - return; + if(ma->mtex[act] && ma->mtex[act]->tex) + id_us_min(&ma->mtex[act]->tex->id); - /* auto create/free mtex on activate/deactive, so we can edit - * the texture pointer in the buttons UI. */ - if(ma->mtex[act] && !ma->mtex[act]->tex) { + if(value.data) { + if(!ma->mtex[act]) + ma->mtex[act]= add_mtex(); + + ma->mtex[act]->tex= value.data; + id_us_plus(&ma->mtex[act]->tex->id); + } + else if(ma->mtex[act]) { MEM_freeN(ma->mtex[act]); ma->mtex[act]= NULL; } - - ma->texact= value; - - if(!ma->mtex[value]) - ma->mtex[value]= add_mtex(); } static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, float *max) @@ -1276,7 +1279,8 @@ void RNA_def_material(BlenderRNA *brna) /* common */ rna_def_animdata_common(srna); - rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", "rna_Material_active_texture_index_set", "MaterialTextureSlot"); + rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", + "rna_Material_active_texture_set", "MaterialTextureSlot"); rna_def_material_colors(srna); rna_def_material_diffuse(srna); @@ -1302,14 +1306,13 @@ void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeg RNA_def_property_ui_text(prop, "Textures", "Texture slots defining the mapping and influence of textures."); prop= RNA_def_property(srna, "active_texture", PROP_POINTER, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_struct_type(prop, structname); - RNA_def_property_pointer_funcs(prop, activeget, NULL, NULL); + RNA_def_property_struct_type(prop, "Texture"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, activeget, activeset, NULL); RNA_def_property_ui_text(prop, "Active Texture", "Active texture slot being displayed."); prop= RNA_def_property(srna, "active_texture_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "texact"); - RNA_def_property_int_funcs(prop, NULL, activeset, NULL); RNA_def_property_range(prop, 0, MAX_MTEX-1); RNA_def_property_ui_text(prop, "Active Texture Index", "Index of active texture slot."); } diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 8c6f77a1e83..53a73e0b03e 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -377,7 +377,17 @@ static void rna_Object_active_material_index_range(PointerRNA *ptr, int *min, in static PointerRNA rna_Object_active_material_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; - return rna_pointer_inherit_refine(ptr, &RNA_MaterialSlot, ob->mat+ob->actcol); + Material *ma; + + ma= (ob->totcol)? give_current_material(ob, ob->actcol): NULL; + return rna_pointer_inherit_refine(ptr, &RNA_Material, ma); +} + +static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value) +{ + Object *ob= (Object*)ptr->id.data; + + assign_material(ob, value.data, ob->actcol); } static void rna_Object_active_particle_system_index_range(PointerRNA *ptr, int *min, int *max) @@ -400,15 +410,6 @@ static void rna_Object_active_particle_system_index_set(struct PointerRNA *ptr, psys_set_current_num(ob, value); } -#if 0 -static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value) -{ - Object *ob= (Object*)ptr->id.data; - - assign_material(ob, value.data, ob->actcol); -} -#endif - static PointerRNA rna_MaterialSlot_material_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; @@ -1027,9 +1028,11 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Materials", "Material slots in the object."); prop= RNA_def_property(srna, "active_material", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "MaterialSlot"); - RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", NULL, NULL); + RNA_def_property_struct_type(prop, "Material"); + RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", "rna_Object_active_material_set", NULL); + RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Active Material", "Active material being displayed."); + RNA_def_property_update(prop, NC_OBJECT|ND_SHADING, "rna_Object_update"); prop= RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "actcol"); diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index 8beaa855201..f23b893539d 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -66,31 +66,33 @@ static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *p static PointerRNA rna_World_active_texture_get(PointerRNA *ptr) { World *wo= (World*)ptr->data; + Tex *tex; - return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, wo->mtex[(int)wo->texact]); + tex= (wo->mtex[(int)wo->texact])? wo->mtex[(int)wo->texact]->tex: NULL; + return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } -static void rna_World_active_texture_index_set(PointerRNA *ptr, int value) +static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value) { World *wo= (World*)ptr->data; int act= wo->texact; - if(value == act || value < 0 || value >= MAX_MTEX) - return; + if(wo->mtex[act] && wo->mtex[act]->tex) + id_us_min(&wo->mtex[act]->tex->id); - /* auto create/free mtex on activate/deactive, so we can edit - * the texture pointer in the buttons UI. */ - if(wo->mtex[act] && !wo->mtex[act]->tex) { + if(value.data) { + if(!wo->mtex[act]) { + wo->mtex[act]= add_mtex(); + wo->mtex[act]->texco= TEXCO_VIEW; + } + + wo->mtex[act]->tex= value.data; + id_us_plus(&wo->mtex[act]->tex->id); + } + else if(wo->mtex[act]) { MEM_freeN(wo->mtex[act]); wo->mtex[act]= NULL; } - - wo->texact= value; - - if(!wo->mtex[value]) { - wo->mtex[value]= add_mtex(); - wo->mtex[value]->texco= TEXCO_VIEW; - } } #else @@ -407,7 +409,8 @@ void RNA_def_world(BlenderRNA *brna) RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA); rna_def_animdata_common(srna); - rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get", "rna_World_active_texture_index_set", "WorldTextureSlot"); + rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get", + "rna_World_active_texture_set", "WorldTextureSlot"); /* colors */ prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR); From 8cf4ef091c91fa4666aa9b017ddba61b52c02806 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 28 Jul 2009 18:59:36 +0000 Subject: [PATCH 437/512] 2.5: various one-liner fixes * Image window only show game properties in game mode. * Fix image window render info drawing wrong with alpha enabled. * Win32 editmode cursor now uses a different one than the system cursor, that one is barely visible, especially in the new theme colors. * Center text in operator header print. * Fix sequencer unlock shortcut key. * Fix uv layer / vertex color active render button now graying out. * Workaround to get default zoom level 1:1 again for new buttons (will try to fix properly later, is due to scrollbars). --- release/ui/space_image.py | 3 ++- source/blender/editors/interface/interface_templates.c | 2 +- source/blender/editors/interface/view2d.c | 6 ++++-- source/blender/editors/screen/area.c | 2 +- source/blender/editors/space_image/image_draw.c | 1 + source/blender/editors/space_sequencer/sequencer_ops.c | 2 +- source/blender/windowmanager/intern/wm_cursors.c | 7 +++++++ 7 files changed, 17 insertions(+), 6 deletions(-) diff --git a/release/ui/space_image.py b/release/ui/space_image.py index f8950892957..eeac19c04e0 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -275,8 +275,9 @@ class IMAGE_PT_game_properties(bpy.types.Panel): __label__ = "Game Properties" def poll(self, context): + rd = context.scene.render_data sima = context.space_data - return (sima and sima.image) + return (sima and sima.image) and (rd.engine == 'BLENDER_GAME') def draw(self, context): sima = context.space_data diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 8b01c341565..4383ba8858b 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1558,7 +1558,7 @@ ListBase uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, char *pr /* XXX hardcoded */ if(itemptr.type == &RNA_MeshTextureFaceLayer || itemptr.type == &RNA_MeshColorLayer) { uiBlockSetEmboss(block, UI_EMBOSSN); - uiItemR(subrow, "", ICON_SCENE, &itemptr, "active_render", 0, 0, 0); + uiDefIconButR(block, TOG, 0, ICON_SCENE, 0, 0, UI_UNIT_X, UI_UNIT_Y, &itemptr, "active_render", 0, 0, 0, 0, 0, NULL); uiBlockSetEmboss(block, UI_EMBOSS); } diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 0f7532383c9..c76110ac440 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -273,10 +273,12 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->tot.ymin= -winy; v2d->cur.xmin= 0.0f; - v2d->cur.xmax= winx*panelzoom; + /* bad workaround for keeping zoom level with scrollers */ + v2d->cur.xmax= (winx - V2D_SCROLL_WIDTH)*panelzoom; v2d->cur.ymax= 0.0f; - v2d->cur.ymin= -winy*panelzoom; + /* bad workaround for keeping zoom level with scrollers */ + v2d->cur.ymin= (-winy + V2D_SCROLL_HEIGHT)*panelzoom; } break; diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 62f6e87f073..c74a5ca9c87 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -330,7 +330,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar) glClear(GL_COLOR_BUFFER_BIT); UI_ThemeColor(TH_TEXT); - BLF_draw_default(20, 6, 0.0f, ar->headerstr); + BLF_draw_default(20, 8, 0.0f, ar->headerstr); } else if(at->draw) { at->draw(C, ar); diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index 7050c7f6d7c..ff25a2635d2 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -151,6 +151,7 @@ static void draw_render_info(Image *ima, ARegion *ar) /* clear header rect */ UI_GetThemeColor3fv(TH_BACK, colf); glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(colf[0]+0.1f, colf[1]+0.1f, colf[2]+0.1f, 0.5f); glRecti(rect.xmin, rect.ymin, rect.xmax, rect.ymax+1); glDisable(GL_BLEND); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index f561fb2ac43..74f22b86b75 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -123,7 +123,7 @@ void sequencer_keymap(wmWindowManager *wm) RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "unselected", 1); WM_keymap_add_item(keymap, "SEQUENCER_OT_lock", LKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "SEQUENCER_OT_unlock", HKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_unlock", LKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_reload", RKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c index 79830aca12f..56a8d76d8bf 100644 --- a/source/blender/windowmanager/intern/wm_cursors.c +++ b/source/blender/windowmanager/intern/wm_cursors.c @@ -104,6 +104,13 @@ void WM_cursor_set(wmWindow *win, int curs) return; } +#ifdef _WIN32 + /* the default win32 cross cursor is barely visible, + * only 1 pixel thick, use another one instead */ + if(curs==CURSOR_EDIT) + curs= BC_CROSSCURSOR; +#endif + GHOST_SetCursorVisibility(win->ghostwin, 1); win->cursor= curs; From 00e92c4d8c27bad7405155df1fe26ee87d887485 Mon Sep 17 00:00:00 2001 From: Diego Borghetti Date: Tue, 28 Jul 2009 19:14:25 +0000 Subject: [PATCH 438/512] Fix crash on Linux with some WM. This is fixed on trunk but was remove in some merge (give conflict). --- intern/ghost/intern/GHOST_SystemX11.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index fcf78d9ad20..e5e88502f45 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -534,11 +534,28 @@ GHOST_SystemX11::processEvent(XEvent *xe) window, data); } } else if (((Atom)xcme.data.l[0]) == m_wm_take_focus) { + XWindowAttributes attr; + Window fwin; + int revert_to; + /* as ICCCM say, we need reply this event * with a SetInputFocus, the data[1] have * the valid timestamp (send by the wm). + * + * Some WM send this event before the + * window is really mapped (for example + * change from virtual desktop), so we need + * to be sure that our windows is mapped + * or this call fail and close blender. */ - XSetInputFocus(m_display, xcme.window, RevertToParent, xcme.data.l[1]); + if (XGetWindowAttributes(m_display, xcme.window, &attr) == True) { + if (XGetInputFocus(m_display, &fwin, &revert_to) == True) { + if (attr.map_state == IsViewable) { + if (fwin != xcme.window) + XSetInputFocus(m_display, xcme.window, RevertToParent, xcme.data.l[1]); + } + } + } } else { /* Unknown client message, ignore */ } From b073fe336c5002af49187989da09c38c4ae0f8d0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 19:32:46 +0000 Subject: [PATCH 439/512] - UVs weren't exported correctly. - check for user quit while povray is parsing the file. - detect if povray cant parse the file and exit the render loop. --- release/io/engine_render_pov.py | 114 +++++++++++++++++--------------- 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index c8d5b77d4be..31fa9f17e95 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -62,8 +62,7 @@ def write_pov(filename, scene=None, info_callback = None): color = tuple([c * lamp.energy for c in lamp.color]) # Colour is modified by energy - file.write('light_source') - file.write('{\n') + file.write('light_source {\n') file.write('\t< 0,0,0 >\n') file.write('\tcolor red %.6f green %.6f blue %.6f\n' % color) @@ -365,8 +364,8 @@ def write_pov(filename, scene=None, info_callback = None): # normal_indices indicies file.write('\tnormal_indices {\n') file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count - for fi, f in enumerate(me.faces): - fv = faces_verts[fi] + for fi, fv in enumerate(faces_verts): + if len(fv) == 4: indicies = (0,1,2), (0,2,3) else: indicies = ((0,1,2),) @@ -380,32 +379,27 @@ def write_pov(filename, scene=None, info_callback = None): idx = uniqueNormals[faces_normals[fi]][0] file.write(',\n\t\t<%d,%d,%d>' % (idx, idx, idx)) # vert count - file.write('\n }\n') - - # normal_indices indicies - if uv_layer: file.write('\tuv_indices {\n') file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count - for f in me.faces: - fv = faces_verts[fi] + for fi, fv in enumerate(faces_verts): if len(fv) == 4: indicies = (0,1,2), (0,2,3) else: indicies = ((0,1,2),) uv = uv_layer[fi] if len(faces_verts[fi])==4: - uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4 + uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3), tuple(uv.uv4) else: - uvs = uv.uv1, uv.uv2, uv.uv3 + uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3) for i1, i2, i3 in indicies: file.write(',\n\t\t<%d,%d,%d>' %\ - (uniqueUVs[tuple(uvs[i1][0:2])][0],\ - uniqueUVs[tuple(uvs[i2][0:2])][0],\ - uniqueUVs[tuple(uvs[i2][0:2])][0])) # vert count + (uniqueUVs[uvs[i1]][0],\ + uniqueUVs[uvs[i2]][0],\ + uniqueUVs[uvs[i2]][0])) # vert count file.write('\n }\n') if me.materials: @@ -508,8 +502,9 @@ class PovrayRenderEngine(bpy.types.RenderEngine): def _cleanup(self): for f in (self.temp_file_in, self.temp_file_ini, self.temp_file_out): - try: os.remove(f) - except: pass + #try: os.remove(f) + #except: pass + pass self.update_stats("", "") @@ -530,50 +525,59 @@ class PovrayRenderEngine(bpy.types.RenderEngine): # Wait for the file to be created while not os.path.exists(self.temp_file_out): - time.sleep(self.DELAY) - - self.update_stats("", "POVRAY: Rendering") - - prev_size = -1 - - def update_image(): - result = self.begin_result(0, 0, x, y) - lay = result.layers[0] - # possible the image wont load early on. - try: lay.rect_from_file(self.temp_file_out, 0, 0) - except: pass - self.end_result(result) - - # Update while povray renders - while True: - - # test if povray exists - if self.process.poll() != None: - update_image(); - break - - # user exit if self.test_break(): - try: # It might not be running - self.process.terminate() - except: - pass - + try: self.process.terminate() + except: pass break - # Would be nice to redirect the output - # stdout_value, stderr_value = self.process.communicate() # locks - - - # check if the file updated - new_size = os.path.getsize(self.temp_file_out) - - if new_size != prev_size: - update_image() - prev_size = new_size + if self.process.poll() != None: + self.update_stats("", "POVRAY: Failed") + break time.sleep(self.DELAY) + if os.path.exists(self.temp_file_out): + + self.update_stats("", "POVRAY: Rendering") + + prev_size = -1 + + def update_image(): + result = self.begin_result(0, 0, x, y) + lay = result.layers[0] + # possible the image wont load early on. + try: lay.rect_from_file(self.temp_file_out, 0, 0) + except: pass + self.end_result(result) + + # Update while povray renders + while True: + + # test if povray exists + if self.process.poll() != None: + update_image(); + break + + # user exit + if self.test_break(): + try: self.process.terminate() + except: pass + + break + + # Would be nice to redirect the output + # stdout_value, stderr_value = self.process.communicate() # locks + + + # check if the file updated + new_size = os.path.getsize(self.temp_file_out) + + if new_size != prev_size: + update_image() + prev_size = new_size + + time.sleep(self.DELAY) + self._cleanup() From 4ad9dd7c8e359133bb3785810e6b7811afbc1abc Mon Sep 17 00:00:00 2001 From: Diego Borghetti Date: Tue, 28 Jul 2009 20:02:09 +0000 Subject: [PATCH 440/512] Bitmap mode is back. The option of Texture or Bitmap font is working again, yes it's really uuuuugly right now, but it work. On the next commit I go to put this at the same level that texture font. Change this from User Preferences -> Language -> Textued Fonts, save the preferences and run blender again. --- source/blender/blenfont/intern/blf.c | 2 +- source/blender/blenfont/intern/blf_glyph.c | 4 ++-- source/blender/editors/interface/interface_style.c | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index cd7f969d5e5..af57f822c40 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -349,7 +349,7 @@ void BLF_draw(char *str) glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT); glPushAttrib(GL_ENABLE_BIT); glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE); - glPixelStorei( GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glDisable(GL_BLEND); glRasterPos3f(font->pos[0], font->pos[1], font->pos[2]); diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index d2767d6ffb1..9a3d91ac4e5 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -573,10 +573,10 @@ int blf_glyph_bitmap_render(FontBLF *font, GlyphBLF *g, float x, float y) return(0); } - glBitmap(0, 0, 0.0, 0.0, x + font->pos[0], y - font->pos[1], (const GLubyte *)&null_bitmap); + glBitmap(0, 0, 0.0, 0.0, x, y, (const GLubyte *)&null_bitmap); glPixelStorei(GL_UNPACK_ROW_LENGTH, gt->pitch * 8); glBitmap(gt->width, gt->height, 0.0, gt->pos_y, 0.0, 0.0, (const GLubyte *)gt->image); - glBitmap(0, 0, 0.0, 0.0, -x - font->pos[0], -y + font->pos[1], (const GLubyte *)&null_bitmap); + glBitmap(0, 0, 0.0, 0.0, -x, -y, (const GLubyte *)&null_bitmap); return(1); } diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 762b32056ac..9ac839e1283 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -248,6 +248,9 @@ void uiStyleInit(void) BLF_size(11, U.dpi); BLF_size(12, U.dpi); BLF_size(14, U.dpi); + + if (!(U.transopts & USER_USETEXTUREFONT)) + BLF_mode(BLF_MODE_BITMAP); } } From 4ba8397ab0ec3092f17dca831b0553f50e12d931 Mon Sep 17 00:00:00 2001 From: Diego Borghetti Date: Tue, 28 Jul 2009 21:06:23 +0000 Subject: [PATCH 441/512] Forget add the bearing X, a little better now (hinting). --- source/blender/blenfont/intern/blf_glyph.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 9a3d91ac4e5..805da02ba36 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -573,10 +573,10 @@ int blf_glyph_bitmap_render(FontBLF *font, GlyphBLF *g, float x, float y) return(0); } - glBitmap(0, 0, 0.0, 0.0, x, y, (const GLubyte *)&null_bitmap); + glBitmap(0, 0, 0.0, 0.0, x + gt->pos_x, y, (const GLubyte *)&null_bitmap); glPixelStorei(GL_UNPACK_ROW_LENGTH, gt->pitch * 8); glBitmap(gt->width, gt->height, 0.0, gt->pos_y, 0.0, 0.0, (const GLubyte *)gt->image); - glBitmap(0, 0, 0.0, 0.0, -x, -y, (const GLubyte *)&null_bitmap); + glBitmap(0, 0, 0.0, 0.0, -x - gt->pos_x, -y, (const GLubyte *)&null_bitmap); return(1); } From e3f6770bd3daf7d55654fe460fc81e4806bbfdfe Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Tue, 28 Jul 2009 21:08:28 +0000 Subject: [PATCH 442/512] 2.5 file browser * small tweak for tab completion of directory: make TEX button interactive again Note1: only TAB key triggers update (see ui_do_but_textedit, line 1599) --- source/blender/editors/interface/interface_handlers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 93293a6f352..da2899dd3b2 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1595,7 +1595,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle } if(changed) { - /* never update while typing for now */ + /* only update when typing for TAB key */ if(update && data->interactive) ui_apply_button(C, block, but, data, 1); else ui_check_but(but); @@ -3636,7 +3636,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData"); data->window= CTX_wm_window(C); data->region= ar; - if( ELEM3(but->type, TEX, BUT_CURVE, SEARCH_MENU) ); // XXX curve is temp + if( ELEM(but->type, BUT_CURVE, SEARCH_MENU) ); // XXX curve is temp else data->interactive= 1; data->state = BUTTON_STATE_INIT; From a638f611a8893f2b598c103920945737cda3da92 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Jul 2009 22:44:50 +0000 Subject: [PATCH 443/512] list the filesystems on linux. --- source/blender/editors/space_file/fsmenu.c | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 12a3c38ab09..41d97e1e0ae 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -58,6 +58,10 @@ #include "BKE_utildefines.h" #endif +#ifdef __linux__ +#include +#endif + #include "fsmenu.h" /* include ourselves */ @@ -303,7 +307,7 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) char dir[FILE_MAXDIR]; char *home= BLI_gethome(); - fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, "/", 1, 0); + // fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, "/", 1, 0); if(home) { BLI_snprintf(dir, FILE_MAXDIR, "%s/", home); @@ -311,6 +315,33 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) BLI_snprintf(dir, FILE_MAXDIR, "%s/Desktop/", home); fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); } + + { + /* loop over mount points */ + struct mntent *mnt; + FILE *fp; + fp = setmntent (MOUNTED, "r"); + if (fp == NULL) { + fprintf(stderr, "could not get a list of mounted filesystemts\n"); + } + else { + while ((mnt = getmntent (fp))) { + /* printf("%s %s %s %s %s %s\n", mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts, mnt->mnt_freq, mnt->mnt_passno); */ + + /* probably need to add more here */ + if( (strcmp (mnt->mnt_fsname, "none")==0) || /* /sys, /dev/pts */ + (strcmp (mnt->mnt_type, "ramfs")==0) /* /dev */ + ) { + continue; + } + + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, mnt->mnt_dir, 1, 0); + } + if (endmntent (fp) == 0) { + fprintf(stderr, "could not close the list of mounted filesystemts\n"); + } + } + } } #endif #endif From cacc5f782a5d792225f3d4970857f9776488ef3d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 29 Jul 2009 00:37:37 +0000 Subject: [PATCH 444/512] - console remove doubles with command history - povray file removal was uncommented --- release/io/engine_render_pov.py | 5 ++- release/ui/space_console.py | 2 +- .../editors/space_console/console_ops.c | 34 +++++++++++++++++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index 31fa9f17e95..186118246b8 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -502,9 +502,8 @@ class PovrayRenderEngine(bpy.types.RenderEngine): def _cleanup(self): for f in (self.temp_file_in, self.temp_file_ini, self.temp_file_out): - #try: os.remove(f) - #except: pass - pass + try: os.remove(f) + except: pass self.update_stats("", "") diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 264203d74e5..a5662fa3db3 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -182,7 +182,7 @@ class CONSOLE_OT_exec(bpy.types.Operator): else: sc.prompt = self.PROMPT # insert a new blank line - bpy.ops.console.history_append(text="", current_character=0) + bpy.ops.console.history_append(text="", current_character=0, remove_duplicates= True) # Insert the output into the editor # not quite correct because the order might have changed, but ok 99% of the time. diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 37f16f3d88a..2637a4fb1a9 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -88,6 +88,21 @@ void console_scrollback_limit(SpaceConsole *sc) console_scrollback_free(sc, sc->scrollback.first); } +static ConsoleLine * console_history_find(SpaceConsole *sc, const char *str, ConsoleLine *cl_ignore) +{ + ConsoleLine *cl; + + for(cl= sc->history.last; cl; cl= cl->prev) { + if (cl==cl_ignore) + continue; + + if(strcmp(str, cl->line)==0) + return cl; + } + + return NULL; +} + /* return 0 if no change made, clamps the range */ static int console_line_cursor_set(ConsoleLine *cl, int cursor) { @@ -476,11 +491,23 @@ void CONSOLE_OT_history_cycle(wmOperatorType *ot) static int history_append_exec(bContext *C, wmOperator *op) { ConsoleLine *ci= console_history_verify(C); - - char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); /* own this text in the new line, dont free */ int cursor= RNA_int_get(op->ptr, "current_character"); - + short rem_dupes= RNA_boolean_get(op->ptr, "remove_duplicates"); + + if(rem_dupes) { + SpaceConsole *sc= CTX_wm_space_console(C); + ConsoleLine *cl; + + while((cl= console_history_find(sc, ci->line, ci))) + console_history_free(sc, cl); + + if(strcmp(str, ci->line)==0) { + MEM_freeN(str); + return OPERATOR_FINISHED; + } + } + ci= console_history_add_str(C, str, 1); /* own the string */ console_line_cursor_set(ci, cursor); @@ -505,6 +532,7 @@ void CONSOLE_OT_history_append(wmOperatorType *ot) /* properties */ RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); RNA_def_int(ot->srna, "current_character", 0, 0, INT_MAX, "Cursor", "The index of the cursor.", 0, 10000); + RNA_def_boolean(ot->srna, "remove_duplicates", 0, "Remove Duplicates", "Remove duplicate items in the history"); } From 208c535869de41c9036582e80528c4cacb132339 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Wed, 29 Jul 2009 04:53:10 +0000 Subject: [PATCH 445/512] Use the Ramer-Douglas-Peucker algorithm instead of a reverse Chaikin filter to reduce stroke complexity. Divergence limit is 4 pixels (could be tweakable but 4 is a nice number). --- .../editors/armature/editarmature_sketch.c | 105 ++++++++++++++++-- 1 file changed, 98 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 974eeb91a68..16c5971a930 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -89,6 +89,7 @@ typedef enum SK_PMode typedef struct SK_Point { float p[3]; + short p2d[2]; float no[3]; float size; SK_PType type; @@ -591,12 +592,14 @@ SK_Sketch* sk_createSketch() return sketch; } -void sk_initPoint(bContext *C, SK_Point *pt) +void sk_initPoint(bContext *C, SK_Point *pt, SK_DrawData *dd) { ARegion *ar = CTX_wm_region(C); RegionView3D *rv3d = ar->regiondata; VECCOPY(pt->no, rv3d->viewinv[2]); + pt->p2d[0] = dd->mval[0]; + pt->p2d[1] = dd->mval[1]; Normalize(pt->no); /* more init code here */ } @@ -892,16 +895,14 @@ void sk_cancelStroke(SK_Sketch *sketch) } } -/* Apply reverse Chaikin filter to simplify the polyline - * */ void sk_filterStroke(SK_Stroke *stk, int start, int end) { SK_Point *old_points = stk->points; int nb_points = stk->nb_points; + char *marked = NULL; + char work; int i, j; - return; - if (start == -1) { start = 0; @@ -917,6 +918,10 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) sk_appendStrokePoint(stk, old_points + i); } +#if 0 + + /* Apply reverse Chaikin filter to simplify the polyline + * */ for (i = start, j = start; i <= end; i++) { if (i - j == 3) @@ -960,6 +965,91 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) j = i; } } +#else + /* Ramer-Douglas-Peucker */ + marked = MEM_callocN(nb_points, "marked array"); + marked[start] = 1; + marked[end] = 1; + + work = 1; + + /* while still reducing */ + while (work) + { + int ls, le; + work = 0; + + ls = start; + le = start+1; + + /* while not over interval */ + while (ls < end) + { + int i; + int max_i = 0; + short v1[2]; + float max_dist = 16; /* more than 4 pixels */ + + /* find the next marked point */ + while(marked[le] == 0) + { + le++; + } + + /* perpendicular vector to ls-le */ + v1[1] = old_points[le].p2d[0] - old_points[ls].p2d[0]; + v1[0] = old_points[ls].p2d[1] - old_points[le].p2d[1]; + + + for( i = ls + 1; i < le; i++ ) + { + float mul; + float dist; + short v2[2]; + + v2[0] = old_points[i].p2d[0] - old_points[ls].p2d[0]; + v2[1] = old_points[i].p2d[1] - old_points[ls].p2d[1]; + + if (v2[0] == 0 && v2[1] == 0) + { + continue; + } + + mul = (float)(v1[0]*v2[0] + v1[1]*v2[1]) / (float)(v2[0]*v2[0] + v2[1]*v2[1]); + + dist = mul * mul * (v2[0]*v2[0] + v2[1]*v2[1]); + + if (dist > max_dist) + { + max_dist = dist; + max_i = i; + } + } + + if (max_i != 0) + { + work = 1; + marked[max_i] = 1; + } + + ls = le; + le = ls + 1; + } + } + + + /* adding points after range */ + for (i = start; i <= end; i++) + { + if (marked[i]) + { + sk_appendStrokePoint(stk, old_points + i); + } + } + + MEM_freeN(marked); +#endif + /* adding points after range */ for (i = end + 1; i < nb_points; i++) @@ -1571,7 +1661,7 @@ int sk_addStrokeDrawPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_Dra { SK_Point pt; - sk_initPoint(C, &pt); + sk_initPoint(C, &pt, dd); sk_getStrokeDrawPoint(C, &pt, sketch, stk, dd); @@ -1734,7 +1824,7 @@ int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_Dra int point_added; SK_Point pt; - sk_initPoint(C, &pt); + sk_initPoint(C, &pt, dd); point_added = sk_getStrokeSnapPoint(C, &pt, sketch, stk, dd); @@ -2998,6 +3088,7 @@ int sk_draw_stroke(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData * sk_addStrokePoint(C, sketch, stk, dd, snap); sk_updateDrawData(dd); sk_updateNextPoint(sketch, stk); + return 1; } From 1744061a9104b736a11f13b4165cce105cfdd06e Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Jul 2009 11:53:37 +0000 Subject: [PATCH 446/512] 2.5 Small fix: SHIFT+D caused transform to move with more precision, as if shiftkey was pressed. --- source/blender/editors/transform/transform.c | 6 +++--- source/blender/editors/transform/transform_input.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 35915c96f3c..e3e4822b383 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1947,7 +1947,7 @@ int handleEventWarp(TransInfo *t, wmEvent *event) { int status = 0; - if (event->type == MIDDLEMOUSE && event->val) + if (event->type == MIDDLEMOUSE && event->val==KM_PRESS) { // Use customData pointer to signal warp direction if (t->customData == 0) @@ -2081,7 +2081,7 @@ int handleEventShear(TransInfo *t, wmEvent *event) { int status = 0; - if (event->type == MIDDLEMOUSE && event->val) + if (event->type == MIDDLEMOUSE && event->val==KM_PRESS) { // Use customData pointer to signal Shear direction if (t->customData == 0) @@ -3514,7 +3514,7 @@ void initBevel(TransInfo *t) int handleEventBevel(TransInfo *t, wmEvent *event) { - if (event->val) { + if (event->val==KM_PRESS) { if(!G.editBMesh) return 0; switch (event->type) { diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index ae8aacb3477..6bd0a8c8d42 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -317,7 +317,7 @@ int handleMouseInput(TransInfo *t, MouseInput *mi, wmEvent *event) { case LEFTSHIFTKEY: case RIGHTSHIFTKEY: - if (event->val) + if (event->val==KM_PRESS) { t->modifiers |= MOD_PRECISION; /* shift is modifier for higher precision transform From b3d07534679e243759892f2a1206dc8756a1c004 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 29 Jul 2009 11:59:21 +0000 Subject: [PATCH 447/512] 2.5 - Small tweaks to order of buttons for Animation Editor header buttons to have more consistent layout --- .../editors/space_action/action_header.c | 26 ++++++------------- .../editors/space_graph/graph_header.c | 14 +++++----- source/blender/makesdna/DNA_anim_types.h | 20 +++++++++----- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 43e91ea6bb5..7f5e2851070 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -385,10 +385,7 @@ void action_header_buttons(const bContext *C, ARegion *ar) uiBlockEndAlign(block); xco += 30; } - else if (saction->mode == SACTCONT_ACTION) { // not too appropriate for shapekeys atm... - /* NAME ETC */ - //uiClearButLock(); - + else if (saction->mode == SACTCONT_ACTION) { /* NAME ETC */ xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)saction->action, ID_AC, &saction->pin, xco, yco, saction_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_DELETE|UI_ID_FAKE_USER|UI_ID_ALONE|UI_ID_PIN); @@ -396,14 +393,6 @@ void action_header_buttons(const bContext *C, ARegion *ar) xco += 8; } - /* COPY PASTE */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); - xco += XIC; - uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); - uiBlockEndAlign(block); - xco += (XIC + 8); - /* draw AUTOSNAP */ if (saction->mode != SACTCONT_GPENCIL) { if (saction->flag & SACTION_DRAWTIME) { @@ -422,12 +411,13 @@ void action_header_buttons(const bContext *C, ARegion *ar) xco += (70 + 8); } - /* draw LOCK */ - // XXX this feature is probably not relevant anymore! - //uiDefIconButS(block, ICONTOG, B_LOCK, ICON_UNLOCKED, xco, yco, XIC, YIC, - // &(saction->lock), 0, 0, 0, 0, - // "Updates other affected window spaces automatically " - // "to reflect changes in real time"); + /* COPY PASTE */ + uiBlockBeginAlign(block); + uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); + xco += XIC; + uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); + uiBlockEndAlign(block); + xco += (XIC + 8); } /* always as last */ diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 1b8b579326f..4369c321c5e 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -314,13 +314,6 @@ void graph_header_buttons(const bContext *C, ARegion *ar) xco += 6*XIC + 15; } - /* copy + paste */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); - uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); - uiBlockEndAlign(block); - xco += (XIC + 8); - /* auto-snap selector */ if (sipo->flag & SIPO_DRAWTIME) { uiDefButS(block, MENU, B_REDR, @@ -336,6 +329,13 @@ void graph_header_buttons(const bContext *C, ARegion *ar) } xco += 98; + /* copy + paste */ + uiBlockBeginAlign(block); + uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); + uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); + uiBlockEndAlign(block); + xco += (XIC + 8); + /* ghost curves */ // XXX these icons need to be changed if (sipo->ghostCurves.first) diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index cb1cd9e3ed8..35381e4612a 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -457,10 +457,14 @@ typedef struct NlaStrip { float blendin, blendout; /* strip blending length (only used when there are no F-Curves) */ short blendmode; /* strip blending mode (layer-based mixing) */ - short extendmode; /* strip extrapolation mode (time-based mixing) */ - short flag; /* settings */ + short extendmode; /* strip extrapolation mode (time-based mixing) */ + short pad1; + short type; /* type of NLA strip */ + + int flag; /* settings */ + int pad2; } NlaStrip; /* NLA Strip Blending Mode */ @@ -498,21 +502,23 @@ typedef enum eNlaStrip_Flag { NLASTRIP_FLAG_USR_INFLUENCE = (1<<5), NLASTRIP_FLAG_USR_TIME = (1<<6), + /* NLA strip length is synced to the length of the referenced action */ + NLASTRIP_FLAG_SYNC_LENGTH = (1<<9), + /* playback flags (may be overriden by F-Curves) */ /* NLA strip blendin/out values are set automatically based on overlaps */ NLASTRIP_FLAG_AUTO_BLENDS = (1<<10), /* NLA strip is played back in reverse order */ NLASTRIP_FLAG_REVERSE = (1<<11), /* NLA strip is muted (i.e. doesn't contribute in any way) */ - // TODO: this overlaps a lot with the functionality in track NLASTRIP_FLAG_MUTED = (1<<12), - /* NLA strip length is synced to the length of the referenced action */ - NLASTRIP_FLAG_SYNC_LENGTH = (1<<13), + /* NLA Strip is played back in 'ping-pong' style */ + NLASTRIP_FLAG_MIRROR = (1<<13), /* temporary editing flags */ /* NLA-Strip is really just a temporary meta used to facilitate easier transform code */ - NLASTRIP_FLAG_TEMP_META = (1<<14), - NLASTRIP_FLAG_EDIT_TOUCHED = (1<<15), + NLASTRIP_FLAG_TEMP_META = (1<<30), + NLASTRIP_FLAG_EDIT_TOUCHED = (1<<31), } eNlaStrip_Flag; /* NLA Strip Type */ From f75005c2a89f6cc5f1bdac33e26341a14ed92888 Mon Sep 17 00:00:00 2001 From: Jiri Hnidek Date: Wed, 29 Jul 2009 12:35:09 +0000 Subject: [PATCH 448/512] 2.5 MetaBalls - It is possible to work with MetaBalls in edit mode now - Added basic UI to the button window (feel free to change it :-)) - Header menus should work - Undo & redo should work - Removed global variable editelems and lastelem (moved it to the MetaBall struct) - All tools from old editmball.c was converted to the operators - Added lastelem to the RNA - Experimental: mb->editelems is only pointer at mb->elems or NULL (depends on Mode). ListBase of MetaElems is not duplicated in edit mode. Tested with scons at Linux and mac OS X TODO: - Recalc data after Undo or Redo - Solve issue with basic MetaBall and Python UI script (only base MetaBall object influence Wiresize and Threshold) - Fix orientation of manipulator in "Normal mode" --- release/ui/buttons_data_metaball.py | 71 ++ source/blender/blenloader/intern/readfile.c | 2 + source/blender/editors/Makefile | 1 + source/blender/editors/SConscript | 1 + source/blender/editors/include/ED_mball.h | 39 + source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/metaball/Makefile | 56 ++ source/blender/editors/metaball/SConscript | 11 + source/blender/editors/metaball/editmball.c | 676 ++++++++++++++++++ .../blender/editors/metaball/mball_intern.h | 47 ++ source/blender/editors/metaball/mball_ops.c | 68 ++ source/blender/editors/object/object_edit.c | 88 ++- source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 2 + source/blender/editors/screen/screen_ops.c | 9 + source/blender/editors/space_api/spacetypes.c | 3 + .../blender/editors/space_view3d/drawobject.c | 5 - .../editors/space_view3d/space_view3d.c | 6 + .../editors/space_view3d/view3d_header.c | 179 +---- .../editors/space_view3d/view3d_select.c | 6 +- .../editors/transform/transform_conversions.c | 8 +- .../editors/transform/transform_manipulator.c | 5 +- source/blender/editors/util/undo.c | 3 +- source/blender/makesdna/DNA_meta_types.h | 6 +- source/blender/makesrna/intern/rna_meta.c | 34 +- 25 files changed, 1153 insertions(+), 175 deletions(-) create mode 100644 release/ui/buttons_data_metaball.py create mode 100644 source/blender/editors/include/ED_mball.h create mode 100644 source/blender/editors/metaball/Makefile create mode 100644 source/blender/editors/metaball/SConscript create mode 100644 source/blender/editors/metaball/editmball.c create mode 100644 source/blender/editors/metaball/mball_intern.h create mode 100644 source/blender/editors/metaball/mball_ops.c diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py new file mode 100644 index 00000000000..12d44ff7a42 --- /dev/null +++ b/release/ui/buttons_data_metaball.py @@ -0,0 +1,71 @@ +import bpy + +class DataButtonsPanel(bpy.types.Panel): + __space_type__ = "BUTTONS_WINDOW" + __region_type__ = "WINDOW" + __context__ = "data" + + def poll(self, context): + return (context.meta_ball != None) + +class DATA_PT_context_metaball(DataButtonsPanel): + __show_header__ = False + + def draw(self, context): + layout = self.layout + + ob = context.object + mball = context.meta_ball + space = context.space_data + + split = layout.split(percentage=0.65) + + if ob: + split.template_ID(ob, "data") + split.itemS() + elif mball: + split.template_ID(space, "pin_id") + split.itemS() + +class DATA_PT_metaball(DataButtonsPanel): + __label__ = "Metaball" + + def draw(self, context): + layout = self.layout + + mball = context.meta_ball + + split = layout.split() + sub = split.column() + + sub.itemL(text="Settings:") + sub.itemR(mball, "threshold", text="Threshold") + sub.itemR(mball, "wire_size", text="View Resolution") + sub.itemR(mball, "render_size", text="Render Resolution") + + sub.itemL(text="Update:") + sub.itemR(mball, "flag", expand=True) + +class DATA_PT_metaball_metaelem(DataButtonsPanel): + __label__ = "MetaElem" + + def draw(self, context): + layout = self.layout + + metaelem = context.meta_ball.last_selected_element + + if(metaelem != None): + split = layout.split() + sub = split.column() + + sub.itemL(text="Settings:") + sub.itemR(metaelem, "stiffness", text="Stiffness") + sub.itemR(metaelem, "size", text="Size") + sub.itemL(text="Type:") + sub.itemR(metaelem, "type", expand=True) + sub.itemR(metaelem, "negative", text="Negative") + + +bpy.types.register(DATA_PT_context_metaball) +bpy.types.register(DATA_PT_metaball) +bpy.types.register(DATA_PT_metaball_metaelem) \ No newline at end of file diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 9d427778810..bdb98a8ae72 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2508,6 +2508,8 @@ static void direct_link_mball(FileData *fd, MetaBall *mb) mb->disp.first= mb->disp.last= NULL; mb->editelems= NULL; mb->bb= NULL; +/* mb->edit_elems.first= mb->edit_elems.last= NULL;*/ + mb->lastelem= NULL; } /* ************ READ WORLD ***************** */ diff --git a/source/blender/editors/Makefile b/source/blender/editors/Makefile index 6463815a268..dbd0ca779aa 100644 --- a/source/blender/editors/Makefile +++ b/source/blender/editors/Makefile @@ -40,6 +40,7 @@ DIRS = armature \ transform \ screen \ curve \ + metaball \ gpencil \ physics \ preview \ diff --git a/source/blender/editors/SConscript b/source/blender/editors/SConscript index d7bb567e3eb..0a13082faaf 100644 --- a/source/blender/editors/SConscript +++ b/source/blender/editors/SConscript @@ -9,6 +9,7 @@ SConscript(['datafiles/SConscript', 'animation/SConscript', 'armature/SConscript', 'mesh/SConscript', + 'metaball/SConscript', 'object/SConscript', 'curve/SConscript', 'gpencil/SConscript', diff --git a/source/blender/editors/include/ED_mball.h b/source/blender/editors/include/ED_mball.h new file mode 100644 index 00000000000..adb50867bf9 --- /dev/null +++ b/source/blender/editors/include/ED_mball.h @@ -0,0 +1,39 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +void ED_operatortypes_metaball(void); +void ED_keymap_metaball(struct wmWindowManager *wm); + +struct MetaElem *add_metaball_primitive(struct bContext *C, int type, int newname); + +void mouse_mball(struct bContext *C, short mval[2], int extend); + +void free_editMball(struct Object *obedit); +void make_editMball(struct Object *obedit); +void load_editMball(struct Object *obedit); + diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index a2e8f3a4ec1..d2e058f9f6d 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -134,6 +134,7 @@ int ED_operator_editsurf(struct bContext *C); int ED_operator_editsurfcurve(struct bContext *C); int ED_operator_editfont(struct bContext *C); int ED_operator_editlattice(struct bContext *C); +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); diff --git a/source/blender/editors/metaball/Makefile b/source/blender/editors/metaball/Makefile new file mode 100644 index 00000000000..d971ec9b412 --- /dev/null +++ b/source/blender/editors/metaball/Makefile @@ -0,0 +1,56 @@ +# +# $Id$ +# +# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2007 Blender Foundation +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): none yet. +# +# ***** END GPL LICENSE BLOCK ***** +# +# Makes module object directory and bounces make to subdirectories. + +LIBNAME = ed_metaball +DIR = $(OCGDIR)/blender/$(LIBNAME) + +include nan_compile.mk + +CFLAGS += $(LEVEL_1_C_WARNINGS) + +CPPFLAGS += -I$(NAN_GLEW)/include +CPPFLAGS += -I$(OPENGL_HEADERS) + +CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include +CPPFLAGS += -I$(NAN_ELBEEM)/include + +CPPFLAGS += -I../../windowmanager +CPPFLAGS += -I../../blenkernel +CPPFLAGS += -I../../blenloader +CPPFLAGS += -I../../blenlib +CPPFLAGS += -I../../makesdna +CPPFLAGS += -I../../makesrna +CPPFLAGS += -I../../imbuf +CPPFLAGS += -I../../gpu +CPPFLAGS += -I../../render/extern/include + +# own include + +CPPFLAGS += -I../include diff --git a/source/blender/editors/metaball/SConscript b/source/blender/editors/metaball/SConscript new file mode 100644 index 00000000000..4b1b4090631 --- /dev/null +++ b/source/blender/editors/metaball/SConscript @@ -0,0 +1,11 @@ +#!/usr/bin/python +Import ('env') + +sources = env.Glob('*.c') + +incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' +incs += ' #/intern/guardedalloc ../../gpu' +incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' + +env.BlenderLib ( 'bf_editors_metaball', sources, Split(incs), [], libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/metaball/editmball.c b/source/blender/editors/metaball/editmball.c new file mode 100644 index 00000000000..7b9175f8ae0 --- /dev/null +++ b/source/blender/editors/metaball/editmball.c @@ -0,0 +1,676 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "DNA_meta_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" +#include "DNA_view3d_types.h" +#include "DNA_windowmanager_types.h" + +#include "RNA_define.h" +#include "RNA_access.h" + +#include "BKE_utildefines.h" +#include "BKE_depsgraph.h" +#include "BKE_object.h" +#include "BKE_context.h" + +#include "ED_screen.h" +#include "ED_view3d.h" +#include "ED_transform.h" +#include "ED_util.h" + +#include "WM_api.h" +#include "WM_types.h" + +/* This function is used to free all MetaElems from MetaBall */ +void free_editMball(Object *obedit) +{ +} + +/* This function is called, when MetaBall Object is + * switched from object mode to edit mode */ +void make_editMball(Object *obedit) +{ + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml;/*, *newml;*/ + + ml= mb->elems.first; + + while(ml) { + if(ml->flag & SELECT) mb->lastelem = ml; + ml= ml->next; + } + + mb->editelems = &mb->elems; +} + +/* This function is called, when MetaBall Object switched from + * edit mode to object mode. List od MetaElements is copied + * from object->data->edit_elems to to object->data->elems. */ +void load_editMball(Object *obedit) +{ + MetaBall *mb = (MetaBall*)obedit->data; + + mb->editelems= NULL; + mb->lastelem= NULL; +} + +/* Add metaelem primitive to metaball object (which is in edit mode) */ +MetaElem *add_metaball_primitive(bContext *C, int type, int newname) +{ + Scene *scene= CTX_data_scene(C); + View3D *v3d= CTX_wm_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mball = (MetaBall*)obedit->data; + MetaElem *ml; + float *curs, mat[3][3], cent[3], imat[3][3], cmat[3][3]; + + /* Deselect all existing metaelems */ + ml= mball->editelems->first; + while(ml) { + ml->flag &= ~SELECT; + ml= ml->next; + } + + Mat3CpyMat4(mat, obedit->obmat); + + if(v3d) { + curs= give_cursor(scene, v3d); + VECCOPY(cent, curs); + } + else + cent[0]= cent[1]= cent[2]= 0.0f; + + cent[0]-= obedit->obmat[3][0]; + cent[1]-= obedit->obmat[3][1]; + cent[2]-= obedit->obmat[3][2]; + + if (rv3d) { + Mat3CpyMat4(imat, rv3d->viewmat); + Mat3MulVecfl(imat, cent); + Mat3MulMat3(cmat, imat, mat); + Mat3Inv(imat,cmat); + Mat3MulVecfl(imat, cent); + } + + ml= MEM_callocN(sizeof(MetaElem), "metaelem"); + + ml->x= cent[0]; + ml->y= cent[1]; + ml->z= cent[2]; + ml->quat[0]= 1.0; + ml->quat[1]= 0.0; + ml->quat[2]= 0.0; + ml->quat[3]= 0.0; + ml->rad= 2.0; + ml->s= 2.0; + ml->flag= SELECT | MB_SCALE_RAD; + + switch(type) { + case MB_BALL: + ml->type = MB_BALL; + ml->expx= ml->expy= ml->expz= 1.0; + break; + case MB_TUBE: + ml->type = MB_TUBE; + ml->expx= ml->expy= ml->expz= 1.0; + break; + case MB_PLANE: + ml->type = MB_PLANE; + ml->expx= ml->expy= ml->expz= 1.0; + break; + case MB_ELIPSOID: + ml->type = MB_ELIPSOID; + ml->expx= 1.2f; + ml->expy= 0.8f; + ml->expz= 1.0; + break; + case MB_CUBE: + ml->type = MB_CUBE; + ml->expx= ml->expy= ml->expz= 1.0; + break; + default: + break; + } + + mball->lastelem= ml; + + return ml; +} + +/***************************** Select/Deselect operator *****************************/ + +/* Select or deselect all MetaElements */ +static int select_deselect_all_metaelems_exec(bContext *C, wmOperator *op) +{ + //Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml; + int any_sel= 0; + + /* Is any metaelem selected? */ + ml= mb->editelems->first; + if(ml) { + while(ml) { + if(ml->flag & SELECT) break; + ml= ml->next; + } + if(ml) any_sel= 1; + + ml= mb->editelems->first; + while(ml) { + if(any_sel) ml->flag &= ~SELECT; + else ml->flag |= SELECT; + ml= ml->next; + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + //DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + } + + return OPERATOR_FINISHED; +} + +void MBALL_OT_select_deselect_all_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select/Deselect All"; + ot->idname= "MBALL_OT_select_deselect_all_metaelems"; + + /* callback functions */ + ot->exec= select_deselect_all_metaelems_exec; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/***************************** Select inverse operator *****************************/ + +/* Invert metaball selection */ +static int select_inverse_metaelems_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml; + + ml= mb->editelems->first; + if(ml) { + while(ml) { + if(ml->flag & SELECT) + ml->flag &= ~SELECT; + else + ml->flag |= SELECT; + ml= ml->next; + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + } + + return OPERATOR_FINISHED; +} + +void MBALL_OT_select_inverse_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Inverse"; + ot->idname= "MBALL_OT_select_inverse_metaelems"; + + /* callback functions */ + ot->exec= select_inverse_metaelems_exec; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/***************************** Select random operator *****************************/ + +/* Random metaball selection */ +static int select_random_metaelems_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml; + float percent= RNA_float_get(op->ptr, "percent"); + + if(percent == 0.0) + return OPERATOR_CANCELLED; + + ml= mb->editelems->first; + BLI_srand( BLI_rand() ); /* Random seed */ + + /* Stupid version of random selection. Should be improved. */ + while(ml) { + if(BLI_frand() < percent) + ml->flag |= SELECT; + else + ml->flag &= ~SELECT; + ml= ml->next; + } + + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + + return OPERATOR_FINISHED; +} + + +void MBALL_OT_select_random_metaelems(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Random..."; + ot->idname= "MBALL_OT_select_random_metaelems"; + + /* callback functions */ + ot->exec= select_random_metaelems_exec; + ot->invoke= WM_operator_props_popup; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_float_percentage(ot->srna, "percent", 0.5f, 0.0f, 1.0f, "Percent", "Percentage of metaelems to select randomly.", 0.0001f, 1.0f); +} + +/***************************** Duplicate operator *****************************/ + +/* Duplicate selected MetaElements */ +static int duplicate_metaelems_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml, *newml; + + ml= mb->editelems->last; + if(ml) { + while(ml) { + if(ml->flag & SELECT) { + newml= MEM_dupallocN(ml); + BLI_addtail(mb->editelems, newml); + mb->lastelem= newml; + ml->flag &= ~SELECT; + } + ml= ml->prev; + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + } + + return OPERATOR_FINISHED; +} + +static int duplicate_metaelems_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + int retv= duplicate_metaelems_exec(C, op); + + if (retv == OPERATOR_FINISHED) { + RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); + WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + } + + return retv; +} + + +void MBALL_OT_duplicate_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Duplicate"; + ot->idname= "MBALL_OT_duplicate_metaelems"; + + /* callback functions */ + ot->exec= duplicate_metaelems_exec; + ot->invoke= duplicate_metaelems_invoke; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* to give to transform */ + RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); +} + +/***************************** Delete operator *****************************/ + +/* Delete all selected MetaElems (not MetaBall) */ +static int delete_metaelems_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb= (MetaBall*)obedit->data; + MetaElem *ml, *next; + + ml= mb->editelems->first; + if(ml) { + while(ml) { + next= ml->next; + if(ml->flag & SELECT) { + if(mb->lastelem==ml) mb->lastelem= NULL; + BLI_remlink(mb->editelems, ml); + MEM_freeN(ml); + } + ml= next; + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + } + + return OPERATOR_FINISHED; +} + +void MBALL_OT_delete_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete"; + ot->idname= "MBALL_OT_delete_metaelems"; + + /* callback functions */ + ot->exec= delete_metaelems_exec; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/***************************** Hide operator *****************************/ + +/* Hide selected MetaElems */ +static int hide_metaelems_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb= (MetaBall*)obedit->data; + MetaElem *ml; + int hide_unselected= RNA_boolean_get(op->ptr, "unselected"); + + ml= mb->editelems->first; + + if(ml) { + /* Hide unselected metaelems */ + if(hide_unselected) { + while(ml){ + if(!(ml->flag & SELECT)) + ml->flag |= MB_HIDE; + ml= ml->next; + } + /* Hide selected metaelems */ + } else { + while(ml){ + if(ml->flag & SELECT) + ml->flag |= MB_HIDE; + ml= ml->next; + } + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + } + + return OPERATOR_FINISHED; +} + +void MBALL_OT_hide_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Hide"; + ot->idname= "MBALL_OT_hide_metaelems"; + + /* callback functions */ + ot->exec= hide_metaelems_exec; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* props */ + RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected."); +} + +/***************************** Unhide operator *****************************/ + +/* Unhide all edited MetaElems */ +static int reveal_metaelems_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + MetaBall *mb= (MetaBall*)obedit->data; + MetaElem *ml; + + ml= mb->editelems->first; + + if(ml) { + while(ml) { + ml->flag &= ~MB_HIDE; + ml= ml->next; + } + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + } + + return OPERATOR_FINISHED; +} + +void MBALL_OT_reveal_metaelems(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reveal"; + ot->idname= "MBALL_OT_reveal_metaelems"; + + /* callback functions */ + ot->exec= reveal_metaelems_exec; + ot->poll= ED_operator_editmball; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* Select MetaElement with mouse click (user can select radius circle or + * stiffness circle) */ +void mouse_mball(bContext *C, short mval[2], int extend) +{ + static MetaElem *startelem=NULL; + Object *obedit= CTX_data_edit_object(C); + ViewContext vc; + MetaBall *mb = (MetaBall*)obedit->data; + MetaElem *ml, *act=NULL; + int a, hits; + unsigned int buffer[4*MAXPICKBUF]; + rcti rect; + + view3d_set_viewcontext(C, &vc); + + rect.xmin= mval[0]-12; + rect.xmax= mval[0]+12; + rect.ymin= mval[1]-12; + rect.ymax= mval[1]+12; + + hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); + + /* does startelem exist? */ + ml= mb->editelems->first; + while(ml) { + if(ml==startelem) break; + ml= ml->next; + } + + if(ml==NULL) startelem= mb->editelems->first; + + if(hits>0) { + ml= startelem; + while(ml) { + for(a=0; aselcol1==buffer[ 4 * a + 3 ]){ + ml->flag |= MB_SCALE_RAD; + act= ml; + } + if(ml->selcol2==buffer[ 4 * a + 3 ]){ + ml->flag &= ~MB_SCALE_RAD; + act= ml; + } + } + if(act) break; + ml= ml->next; + if(ml==NULL) ml= mb->editelems->first; + if(ml==startelem) break; + } + + /* When some metaelem was found, then it is neccessary to select or + * deselet it. */ + if(act) { + if(extend==0) { + /* Deselect all existing metaelems */ + ml= mb->editelems->first; + while(ml) { + ml->flag &= ~SELECT; + ml= ml->next; + } + /* Select only metaelem clicked on */ + act->flag |= SELECT; + } + else { + if(act->flag & SELECT) + act->flag &= ~SELECT; + else + act->flag |= SELECT; + } + mb->lastelem= act; + + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + } + } +} + + +/* ************* undo for MetaBalls ************* */ + +/* free all MetaElems from ListBase */ +static void freeMetaElemlist(ListBase *lb) +{ + MetaElem *ml, *next; + + if(lb==NULL) return; + + ml= lb->first; + while(ml){ + next= ml->next; + BLI_remlink(lb, ml); + MEM_freeN(ml); + ml= next; + } + + lb->first= lb->last= NULL; +} + + +static void undoMball_to_editMball(void *lbu, void *lbe) +{ + ListBase *lb= lbu; + ListBase *editelems= lbe; + MetaElem *ml, *newml; + + freeMetaElemlist(editelems); + + /* copy 'undo' MetaElems to 'edit' MetaElems */ + ml= lb->first; + while(ml){ + newml= MEM_dupallocN(ml); + BLI_addtail(editelems, newml); + ml= ml->next; + } + +} + +static void *editMball_to_undoMball(void *lbe) +{ + ListBase *editelems= lbe; + ListBase *lb; + MetaElem *ml, *newml; + + /* allocate memory for undo ListBase */ + lb= MEM_callocN(sizeof(ListBase), "listbase undo"); + lb->first= lb->last= NULL; + + /* copy contents of current ListBase to the undo ListBase */ + ml= editelems->first; + while(ml){ + newml= MEM_dupallocN(ml); + BLI_addtail(lb, newml); + ml= ml->next; + } + + return lb; +} + +/* free undo ListBase of MetaElems */ +static void free_undoMball(void *lbv) +{ + ListBase *lb= lbv; + + freeMetaElemlist(lb); + MEM_freeN(lb); +} + +ListBase *metaball_get_editelems(Object *ob) +{ + if(ob && ob->type==OB_MBALL) { + struct MetaBall *mb= (struct MetaBall*)ob->data; + return mb->editelems; + } + return NULL; +} + + +static void *get_data(bContext *C) +{ + Object *obedit= CTX_data_edit_object(C); + return metaball_get_editelems(obedit); +} + +/* this is undo system for MetaBalls */ +void undo_push_mball(bContext *C, char *name) +{ + undo_editmode_push(C, name, get_data, free_undoMball, undoMball_to_editMball, editMball_to_undoMball, NULL); +} + diff --git a/source/blender/editors/metaball/mball_intern.h b/source/blender/editors/metaball/mball_intern.h new file mode 100644 index 00000000000..8cf749733dd --- /dev/null +++ b/source/blender/editors/metaball/mball_intern.h @@ -0,0 +1,47 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef ED_MBALL_INTERN_H +#define ED_MBALL_INTERN_H + +#include "DNA_object_types.h" + +#include "DNA_windowmanager_types.h" + +void MBALL_OT_hide_metaelems(struct wmOperatorType *ot); +void MBALL_OT_reveal_metaelems(struct wmOperatorType *ot); + +void MBALL_OT_delete_metaelems(struct wmOperatorType *ot); +void MBALL_OT_duplicate_metaelems(struct wmOperatorType *ot); + +void MBALL_OT_select_deselect_all_metaelems(struct wmOperatorType *ot); +void MBALL_OT_select_inverse_metaelems(struct wmOperatorType *ot); +void MBALL_OT_select_random_metaelems(struct wmOperatorType *ot); + +#endif + diff --git a/source/blender/editors/metaball/mball_ops.c b/source/blender/editors/metaball/mball_ops.c new file mode 100644 index 00000000000..38593af372f --- /dev/null +++ b/source/blender/editors/metaball/mball_ops.c @@ -0,0 +1,68 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" + +#include "DNA_listBase.h" +#include "DNA_windowmanager_types.h" + +#include "mball_intern.h" + +void ED_operatortypes_metaball(void) +{ + WM_operatortype_append(MBALL_OT_delete_metaelems); + WM_operatortype_append(MBALL_OT_duplicate_metaelems); + + WM_operatortype_append(MBALL_OT_hide_metaelems); + WM_operatortype_append(MBALL_OT_reveal_metaelems); + + WM_operatortype_append(MBALL_OT_select_deselect_all_metaelems); + WM_operatortype_append(MBALL_OT_select_inverse_metaelems); + WM_operatortype_append(MBALL_OT_select_random_metaelems); +} + +void ED_keymap_metaball(wmWindowManager *wm) +{ + ListBase *keymap= WM_keymap_listbase(wm, "Metaball", 0, 0); + + WM_keymap_add_item(keymap, "OBJECT_OT_metaball_add", AKEY, KM_PRESS, KM_SHIFT, 0); + + WM_keymap_add_item(keymap, "MBALL_OT_reveal_metaelems", HKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "MBALL_OT_hide_metaelems", HKEY, KM_PRESS, 0, 0); + RNA_enum_set(WM_keymap_add_item(keymap, "MBALL_OT_hide_metaelems", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1); + + WM_keymap_add_item(keymap, "MBALL_OT_delete_metaelems", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MBALL_OT_duplicate_metaelems", DKEY, KM_PRESS, KM_SHIFT, 0); + + WM_keymap_add_item(keymap, "MBALL_OT_select_deselect_all_metaelems", AKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MBALL_OT_select_inverse_metaelems", IKEY, KM_PRESS, KM_CTRL, 0); +} + diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 0d3118fd654..f699ae93a08 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -114,6 +114,7 @@ #include "ED_curve.h" #include "ED_particle.h" #include "ED_mesh.h" +#include "ED_mball.h" #include "ED_object.h" #include "ED_screen.h" #include "ED_transform.h" @@ -538,6 +539,78 @@ void OBJECT_OT_surface_add(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", prop_surface_types, 0, "Primitive", ""); } +static EnumPropertyItem prop_metaball_types[]= { + {MB_BALL, "MBALL_BALL", ICON_META_BALL, "Meta Ball", ""}, + {MB_TUBE, "MBALL_TUBE", ICON_META_TUBE, "Meta Tube", ""}, + {MB_PLANE, "MBALL_PLANE", ICON_META_PLANE, "Meta Plane", ""}, + {MB_CUBE, "MBALL_CUBE", ICON_META_CUBE, "Meta Cube", ""}, + {MB_ELIPSOID, "MBALL_ELLIPSOID", ICON_META_ELLIPSOID, "Meta Ellipsoid", ""}, + {0, NULL, 0, NULL, NULL} +}; + +static int object_metaball_add_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + MetaBall *mball; + MetaElem *elem; + int newob= 0; + + if(obedit==NULL || obedit->type!=OB_MBALL) { + object_add_type(C, OB_MBALL); + ED_object_enter_editmode(C, 0); + newob = 1; + } + else DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA); + + obedit= CTX_data_edit_object(C); + elem= (MetaElem*)add_metaball_primitive(C, RNA_enum_get(op->ptr, "type"), newob); + mball= (MetaBall*)obedit->data; + BLI_addtail(mball->editelems, elem); + + /* userdef */ + if (newob && (U.flag & USER_ADD_EDITMODE)==0) { + ED_object_exit_editmode(C, EM_FREEDATA); + } + + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + + return OPERATOR_FINISHED; +} + +static int object_metaball_add_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Object *obedit= CTX_data_edit_object(C); + uiPopupMenu *pup; + uiLayout *layout; + + pup= uiPupMenuBegin(C, op->type->name, 0); + layout= uiPupMenuLayout(pup); + if(!obedit || obedit->type == OB_MBALL) + uiItemsEnumO(layout, op->type->idname, "type"); + else + uiItemsEnumO(layout, "OBJECT_OT_metaball_add", "type"); + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +void OBJECT_OT_metaball_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Metaball"; + ot->description= "Add an metaball object to the scene."; + ot->idname= "OBJECT_OT_metaball_add"; + + /* api callbacks */ + ot->invoke= object_metaball_add_invoke; + ot->exec= object_metaball_add_exec; + ot->poll= ED_operator_scene_editable; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", prop_metaball_types, 0, "Primitive", ""); +} static int object_add_text_exec(bContext *C, wmOperator *op) { Object *obedit= CTX_data_edit_object(C); @@ -616,7 +689,6 @@ void OBJECT_OT_armature_add(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } - static int object_primitive_add_invoke(bContext *C, wmOperator *op, wmEvent *event) { uiPopupMenu *pup= uiPupMenuBegin(C, "Add Object", 0); @@ -625,7 +697,7 @@ static int object_primitive_add_invoke(bContext *C, wmOperator *op, wmEvent *eve uiItemMenuEnumO(layout, "Mesh", ICON_OUTLINER_OB_MESH, "OBJECT_OT_mesh_add", "type"); uiItemMenuEnumO(layout, "Curve", ICON_OUTLINER_OB_CURVE, "OBJECT_OT_curve_add", "type"); uiItemMenuEnumO(layout, "Surface", ICON_OUTLINER_OB_SURFACE, "OBJECT_OT_surface_add", "type"); - uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_META, "OBJECT_OT_object_add", "type", OB_MBALL); + uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_META, "OBJECT_OT_metaball_add", "type"); uiItemO(layout, "Text", ICON_OUTLINER_OB_FONT, "OBJECT_OT_text_add"); uiItemS(layout); uiItemO(layout, "Armature", ICON_OUTLINER_OB_ARMATURE, "OBJECT_OT_armature_add"); @@ -3629,9 +3701,8 @@ void ED_object_exit_editmode(bContext *C, int flag) if(freedata) free_editLatt(obedit); } else if(obedit->type==OB_MBALL) { -// extern ListBase editelems; -// load_editMball(); -// if(freedata) BLI_freelistN(&editelems); + load_editMball(obedit); + if(freedata) free_editMball(obedit); } /* freedata only 0 now on file saves */ @@ -3721,14 +3792,15 @@ void ED_object_enter_editmode(bContext *C, int flag) scene->obedit= ob; // XXX for context ok= 1; make_editText(ob); + WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_TEXT, scene); } else if(ob->type==OB_MBALL) { scene->obedit= ob; // XXX for context -// ok= 1; -// XXX make_editMball(); + ok= 1; + make_editMball(ob); + WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_MBALL, scene); - } else if(ob->type==OB_LATTICE) { scene->obedit= ob; // XXX for context diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index da34f35e647..17d4f5deaae 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -73,6 +73,7 @@ void OBJECT_OT_shade_flat(struct wmOperatorType *ot); void OBJECT_OT_mesh_add(struct wmOperatorType *ot); void OBJECT_OT_curve_add(struct wmOperatorType *ot); void OBJECT_OT_surface_add(struct wmOperatorType *ot); +void OBJECT_OT_metaball_add(wmOperatorType *ot); void OBJECT_OT_text_add(struct wmOperatorType *ot); void OBJECT_OT_armature_add(struct wmOperatorType *ot); /* only used as menu */ diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index f4407de60db..fe092847183 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -104,6 +104,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_armature_add); WM_operatortype_append(OBJECT_OT_object_add); WM_operatortype_append(OBJECT_OT_primitive_add); + WM_operatortype_append(OBJECT_OT_mesh_add); + WM_operatortype_append(OBJECT_OT_metaball_add); WM_operatortype_append(OBJECT_OT_modifier_add); WM_operatortype_append(OBJECT_OT_modifier_remove); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index f5c639745a3..07454088604 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -40,6 +40,7 @@ #include "DNA_mesh_types.h" #include "DNA_curve_types.h" #include "DNA_scene_types.h" +#include "DNA_meta_types.h" #include "BKE_blender.h" #include "BKE_colortools.h" @@ -312,6 +313,14 @@ int ED_operator_editlattice(bContext *C) return 0; } +int ED_operator_editmball(bContext *C) +{ + Object *obedit= CTX_data_edit_object(C); + if(obedit && obedit->type==OB_MBALL) + return NULL != ((MetaBall *)obedit->data)->editelems; + return 0; +} + /* *************************** action zone operator ************************** */ /* operator state vars used: diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c index b427742077a..5c33b648947 100644 --- a/source/blender/editors/space_api/spacetypes.c +++ b/source/blender/editors/space_api/spacetypes.c @@ -51,6 +51,7 @@ #include "ED_sculpt.h" #include "ED_space_api.h" #include "ED_uvedit.h" +#include "ED_mball.h" /* only call once on startup, storage is global in BKE kernel listbase */ void ED_spacetypes_init(void) @@ -93,6 +94,7 @@ void ED_spacetypes_init(void) ED_operatortypes_marker(); ED_operatortypes_pointcache(); ED_operatortypes_fluid(); + ED_operatortypes_metaball(); ED_operatortypes_boids(); ui_view2d_operatortypes(); @@ -120,6 +122,7 @@ void ED_spacetypes_keymap(wmWindowManager *wm) ED_keymap_curve(wm); ED_keymap_armature(wm); ED_keymap_particle(wm); + ED_keymap_metaball(wm); ED_marker_keymap(wm); UI_view2d_keymap(wm); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 0f498810fb5..53630b2bee0 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -123,11 +123,6 @@ (((vd->drawtype==OB_SOLID) && (dt>=OB_SOLID) && (vd->flag2 & V3D_SOLID_TEX) && (vd->flag & V3D_ZBUF_SELECT)) == 0) \ ) - -/* pretty stupid */ -/* editmball.c */ -extern ListBase editelems; - static void draw_bounding_volume(Scene *scene, Object *ob); static void drawcube_size(float size); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index a99c227ae1f..fa6bbb476da 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -305,6 +305,12 @@ static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype) else WM_event_remove_keymap_handler(&ar->handlers, keymap); + keymap= WM_keymap_listbase(wm, "Metaball", 0, 0); + if(stype==NS_EDITMODE_MBALL) + WM_event_add_keymap_handler(&ar->handlers, keymap); + else + WM_event_remove_keymap_handler(&ar->handlers, keymap); + keymap= WM_keymap_listbase(wm, "Lattice", 0, 0); if(stype==NS_EDITMODE_LATTICE) WM_event_add_keymap_handler(&ar->handlers, keymap); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 218011054d5..26ca5a07973 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1069,58 +1069,14 @@ static void view3d_select_curvemenu(bContext *C, uiLayout *layout, void *arg_unu #endif } -void do_view3d_select_metaballmenu(bContext *C, void *arg, int event) +static void view3d_select_metaballmenu(bContext *C, uiLayout *layout, void *arg_unused) { -#if 0 - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_mball(); - break; - case 3: /* Inverse */ - selectinverse_mball(); - break; - case 4: /* Select Random */ - selectrandom_mball(); - break; - } -#endif -} - - -static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - if(ar->alignment==RGN_ALIGN_TOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; + uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "MBALL_OT_select_deselect_all_metaelems"); + uiItemO(layout, NULL, 0, "MBALL_OT_select_inverse_metaelems"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "MBALL_OT_select_random_metaelems"); } static void view3d_select_latticemenu(bContext *C, uiLayout *layout, void *arg_unused) @@ -2557,112 +2513,41 @@ static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unuse uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_curve_showhidemenu); } -static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event) +static void view3d_edit_metaball_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) { -#if 0 - switch(event) { - case 10: /* show hidden control points */ - reveal_mball(); - break; - case 11: /* hide selected control points */ - hide_mball(0); - break; - case 12: /* hide selected control points */ - hide_mball(1); - break; - } -#endif + uiItemO(layout, NULL, 0, "MBALL_OT_hide_metaelems"); + uiItemO(layout, NULL, 0, "MBALL_OT_reveal_metaelems"); + uiItemBooleanO(layout, "Hide Unselected", 0, "MBALL_OT_hide_metaelems", "unselected", 1); } -static uiBlock *view3d_edit_mball_showhidemenu(bContext *C, ARegion *ar, void *arg_unused) +static void view3d_edit_metaballmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_edit_mball_showhidemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_edit_mball_showhidemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} -static void do_view3d_edit_metaballmenu(bContext *C, void *arg, int event) -{ -#if 0 Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; + ToolSettings *ts= CTX_data_tool_settings(C); + PointerRNA tsptr; - switch(event) { - case 1: /* undo */ - BIF_undo(); - break; - case 2: /* redo */ - BIF_redo(); - break; - case 3: /* duplicate */ - duplicate_context_selected(); - break; - case 4: /* delete */ - delete_context_selected(); - break; - case 5: /* Shear */ - initTransform(TFM_SHEAR, CTX_NONE); - Transform(); - break; - case 6: /* Warp */ - initTransform(TFM_WARP, CTX_NONE); - Transform(); - break; - case 7: /* Transform Properties */ - add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, 0); - break; - } -#endif -} + RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr); -static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "view3d_edit_metaballmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL); + uiItemO(layout, "Undo Editing", 0, "ED_OT_undo"); + uiItemO(layout, "Redo Editing", 0, "ED_OT_redo"); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); -// XXX uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, ""); + uiItemS(layout); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu); - uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, ""); - // XXX uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, ""); + uiItemS(layout); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemO(layout, NULL, 0, "MBALL_OT_delete_metaelems"); + uiItemO(layout, NULL, 0, "MBALL_OT_duplicate_metaelems"); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_edit_mball_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Hide MetaElems", 0, yco-=20, 120, 19, ""); - - if(ar->alignment==RGN_ALIGN_TOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; + uiItemS(layout); + + uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O + uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O + + uiItemS(layout); + + uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_metaball_showhidemenu); } static void view3d_edit_text_charsmenu(bContext *C, uiLayout *layout, void *arg_unused) @@ -3894,7 +3779,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o } else if (ob && ob->type == OB_FONT) { xmax= 0; } else if (ob && ob->type == OB_MBALL) { - uiDefPulldownBut(block, view3d_select_metaballmenu, NULL, "Select", xco,yco, xmax-3, 20, ""); + uiDefMenuBut(block, view3d_select_metaballmenu, NULL, "Select", xco,yco, xmax-3, 20, ""); } else if (ob && ob->type == OB_LATTICE) { uiDefMenuBut(block, view3d_select_latticemenu, NULL, "Select", xco, yco, xmax-3, 20, ""); } else if (ob && ob->type == OB_ARMATURE) { @@ -3936,7 +3821,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o xco+= xmax; } else if (ob && ob->type == OB_MBALL) { xmax= GetButStringLength("Metaball"); - uiDefPulldownBut(block, view3d_edit_metaballmenu, NULL, "Metaball", xco,yco, xmax-3, 20, ""); + uiDefMenuBut(block, view3d_edit_metaballmenu, NULL, "Metaball", xco,yco, xmax-3, 20, ""); xco+= xmax; } else if (ob && ob->type == OB_LATTICE) { xmax= GetButStringLength("Lattice"); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 8182069c142..4a702665c88 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -82,6 +82,7 @@ #include "ED_screen.h" #include "ED_types.h" #include "ED_util.h" +#include "ED_mball.h" #include "UI_interface.h" #include "UI_resources.h" @@ -1361,9 +1362,10 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) do_nurbs_box_select(&vc, &rect, val==LEFTMOUSE); } else if(obedit->type==OB_MBALL) { + MetaBall *mb = (MetaBall*)obedit->data; hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - ml= NULL; // XXX editelems.first; + ml= mb->editelems->first; while(ml) { for(a=0; amval, extend); else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) mouse_nurb(C, event->mval, extend); + else if(obedit->type==OB_MBALL) + mouse_mball(C, event->mval, extend); } else if(G.f & G_PARTICLEEDIT) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index c14b8c8a646..40e133f554f 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1217,8 +1217,7 @@ static void createTransArmatureVerts(bContext *C, TransInfo *t) static void createTransMBallVerts(bContext *C, TransInfo *t) { - // TRANSFORM_FIX_ME -#if 0 + MetaBall *mb = (MetaBall*)t->obedit->data; MetaElem *ml; TransData *td; TransDataExtension *tx; @@ -1227,7 +1226,7 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) int propmode = t->flag & T_PROP_EDIT; /* count totals */ - for(ml= editelems.first; ml; ml= ml->next) { + for(ml= mb->editelems->first; ml; ml= ml->next) { if(ml->flag & SELECT) countsel++; if(propmode) count++; } @@ -1244,7 +1243,7 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) Mat3CpyMat4(mtx, t->obedit->obmat); Mat3Inv(smtx, mtx); - for(ml= editelems.first; ml; ml= ml->next) { + for(ml= mb->editelems->first; ml; ml= ml->next) { if(propmode || (ml->flag & SELECT)) { td->loc= &ml->x; VECCOPY(td->iloc, td->loc); @@ -1285,7 +1284,6 @@ static void createTransMBallVerts(bContext *C, TransInfo *t) tx++; } } -#endif } /* ********************* curve/surface ********* */ diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 78837b3b0bb..3366f8d72d7 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -301,11 +301,10 @@ int calc_manipulator_stats(const bContext *C) } } else if(obedit->type==OB_MBALL) { - /* editmball.c */ - ListBase editelems= {NULL, NULL}; /* XXX */ + MetaBall *mb = (MetaBall*)obedit->data; MetaElem *ml, *ml_sel=NULL; - ml= editelems.first; + ml= mb->editelems->first; while(ml) { if(ml->flag & SELECT) { calc_tw_center(scene, &ml->x); diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index 6f742d70440..be04cdecac6 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -74,7 +74,6 @@ /* ***************** generic undo system ********************* */ /* ********* XXX **************** */ -static void undo_push_mball() {} static void sound_initialize_sounds() {} /* ********* XXX **************** */ @@ -93,7 +92,7 @@ void ED_undo_push(bContext *C, char *str) else if (obedit->type==OB_FONT) undo_push_font(C, str); else if (obedit->type==OB_MBALL) - undo_push_mball(str); + undo_push_mball(C, str); else if (obedit->type==OB_LATTICE) undo_push_lattice(C, str); else if (obedit->type==OB_ARMATURE) diff --git a/source/blender/makesdna/DNA_meta_types.h b/source/blender/makesdna/DNA_meta_types.h index 862f3ca184b..2da4e9ab5a6 100644 --- a/source/blender/makesdna/DNA_meta_types.h +++ b/source/blender/makesdna/DNA_meta_types.h @@ -85,8 +85,10 @@ typedef struct MetaBall { mother ball changes will effect other objects thresholds, but these may also have their own thresh as an offset */ float thresh; - - + + /* used in editmode */ + /*ListBase edit_elems;*/ + MetaElem *lastelem; } MetaBall; /* **************** METABALL ********************* */ diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index 5f95336af2d..beb5bbaf51b 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * Contributor(s): Blender Foundation (2008), Juho Vepsäläinen + * Contributor(s): Blender Foundation (2008), Juho Vepsalainen, Jiri Hnidek * * ***** END GPL LICENSE BLOCK ***** */ @@ -34,12 +34,28 @@ #ifdef RNA_RUNTIME +#include "DNA_scene_types.h" +#include "DNA_object_types.h" + +#include "BKE_depsgraph.h" + +#include "WM_types.h" + static int rna_Meta_texspace_editable(PointerRNA *ptr) { MetaBall *mb= (MetaBall*)ptr->data; return (mb->texflag & AUTOSPACE)? 0: PROP_EDITABLE; } +static void rna_MetaBall_update_data(bContext *C, PointerRNA *ptr) +{ + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); + + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); +} + #else void rna_def_metaelement(BlenderRNA *brna) @@ -61,43 +77,50 @@ void rna_def_metaelement(BlenderRNA *brna) /* enums */ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, prop_type_items); RNA_def_property_ui_text(prop, "Type", "Metaball types."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); /* number values */ prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "x"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Location", ""); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ROTATION); RNA_def_property_float_sdna(prop, NULL, "quat"); RNA_def_property_ui_text(prop, "Rotation", ""); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "rad"); RNA_def_property_ui_text(prop, "Radius", ""); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "expx"); RNA_def_property_range(prop, 0.0f, 20.0f); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Size", "Size of element, use of components depends on element type."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "stiffness", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "s"); RNA_def_property_range(prop, 0.0f, 10.0f); RNA_def_property_ui_text(prop, "Stiffness", "Stiffness defines how much of the element to fill."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); /* flags */ prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", MB_NEGATIVE); RNA_def_property_ui_text(prop, "Negative", "Set metaball as negative one."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", MB_HIDE); RNA_def_property_ui_text(prop, "Hide", "Hide element."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); } void rna_def_metaball(BlenderRNA *brna) @@ -120,16 +143,22 @@ void rna_def_metaball(BlenderRNA *brna) RNA_def_property_struct_type(prop, "MetaElement"); RNA_def_property_ui_text(prop, "Elements", "Meta elements."); + prop= RNA_def_property(srna, "last_selected_element", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "lastelem"); + RNA_def_property_ui_text(prop, "Last selected element.", "Last selected element."); + /* enums */ prop= RNA_def_property(srna, "flag", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_update_items); RNA_def_property_ui_text(prop, "Update", "Metaball edit update behavior."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); /* number values */ prop= RNA_def_property(srna, "wire_size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "wiresize"); RNA_def_property_range(prop, 0.050f, 1.0f); RNA_def_property_ui_text(prop, "Wire Size", "Polygonization resolution in the 3D viewport."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "render_size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rendersize"); @@ -140,6 +169,7 @@ void rna_def_metaball(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "thresh"); RNA_def_property_range(prop, 0.0f, 5.0f); RNA_def_property_ui_text(prop, "Threshold", "Influence of meta elements."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); /* materials, textures */ rna_def_texmat_common(srna, "rna_Meta_texspace_editable"); From 2ee51efd6b5c3c0f90c6b0b07f7b4fc168cd9860 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 29 Jul 2009 13:33:14 +0000 Subject: [PATCH 449/512] * Reverted some superfluous button alignment. The 'Align' should not be overused, it gets quite ugly (and loses communication impact) when used between buttons of different types. Dependencies should be shown via layout and greying out. These lamp panels still needs some cleaning up too... --- release/ui/buttons_data_lamp.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 4a61684c8e2..dbc00ec0c39 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -49,7 +49,7 @@ class DATA_PT_lamp(DataButtonsPanel): split = layout.split() col = split.column() - sub = col.column(align=True) + sub = col.column() sub.itemR(lamp, "color", text="") sub.itemR(lamp, "energy") col.itemR(lamp, "negative") @@ -67,7 +67,7 @@ class DATA_PT_lamp(DataButtonsPanel): if lamp.type in ('POINT', 'SPOT'): col = split.column() col.itemL(text="Falloff:") - sub = col.column(align=True) + sub = col.column() sub.itemR(lamp, "falloff_type", text="") sub.itemR(lamp, "distance") col.itemR(lamp, "sphere") @@ -84,8 +84,8 @@ class DATA_PT_lamp(DataButtonsPanel): if lamp.type == 'AREA': col = split.column() col.itemL(text="Shape:") + col.itemR(lamp, "shape", text="") sub = col.column(align=True) - sub.itemR(lamp, "shape", text="") if (lamp.shape == 'SQUARE'): sub.itemR(lamp, "size") elif (lamp.shape == 'RECTANGLE'): @@ -311,4 +311,4 @@ bpy.types.register(DATA_PT_lamp) bpy.types.register(DATA_PT_falloff_curve) bpy.types.register(DATA_PT_spot) bpy.types.register(DATA_PT_shadow) -bpy.types.register(DATA_PT_sunsky) +bpy.types.register(DATA_PT_sunsky) \ No newline at end of file From 9547fc48ac653c039dc857d08ece8b1072d717c4 Mon Sep 17 00:00:00 2001 From: Jiri Hnidek Date: Wed, 29 Jul 2009 14:07:51 +0000 Subject: [PATCH 450/512] - Fix some things I missed in my last commit - Change name of OBJECT_OT_object_add operator - Use new OBJECT_OT_object_add operator in space_info.py --- release/ui/space_info.py | 2 +- source/blender/editors/metaball/editmball.c | 11 +++++++++-- source/blender/editors/object/object_edit.c | 2 +- source/blender/makesrna/intern/rna_meta.c | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 3cc01a35c1f..855ce0b4f8f 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -113,7 +113,7 @@ class INFO_MT_add(bpy.types.Menu): layout.item_menu_enumO( "OBJECT_OT_mesh_add", "type", text="Mesh", icon="ICON_OUTLINER_OB_MESH") layout.item_menu_enumO( "OBJECT_OT_curve_add", "type", text="Curve", icon="ICON_OUTLINER_OB_CURVE") layout.item_menu_enumO( "OBJECT_OT_surface_add", "type", text="Surface", icon="ICON_OUTLINER_OB_SURFACE") - layout.item_enumO("OBJECT_OT_object_add", "type", "META", icon="ICON_OUTLINER_OB_META") + layout.item_menu_enumO( "OBJECT_OT_metaball_add", "type", "META", icon="ICON_OUTLINER_OB_META") layout.itemO("OBJECT_OT_text_add", text="Text", icon="ICON_OUTLINER_OB_FONT") layout.itemS() diff --git a/source/blender/editors/metaball/editmball.c b/source/blender/editors/metaball/editmball.c index 7b9175f8ae0..b9bb219783f 100644 --- a/source/blender/editors/metaball/editmball.c +++ b/source/blender/editors/metaball/editmball.c @@ -45,6 +45,7 @@ #include "DNA_scene_types.h" #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" +#include "DNA_userdef_types.h" #include "RNA_define.h" #include "RNA_access.h" @@ -106,6 +107,8 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) MetaElem *ml; float *curs, mat[3][3], cent[3], imat[3][3], cmat[3][3]; + if(!obedit) return NULL; + /* Deselect all existing metaelems */ ml= mball->editelems->first; while(ml) { @@ -114,7 +117,6 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) } Mat3CpyMat4(mat, obedit->obmat); - if(v3d) { curs= give_cursor(scene, v3d); VECCOPY(cent, curs); @@ -127,12 +129,17 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) cent[2]-= obedit->obmat[3][2]; if (rv3d) { - Mat3CpyMat4(imat, rv3d->viewmat); + if (!(newname) || U.flag & USER_ADD_VIEWALIGNED || !rv3d) + Mat3CpyMat4(imat, rv3d->viewmat); + else + Mat3One(imat); Mat3MulVecfl(imat, cent); Mat3MulMat3(cmat, imat, mat); Mat3Inv(imat,cmat); Mat3MulVecfl(imat, cent); } + else + Mat3One(imat); ml= MEM_callocN(sizeof(MetaElem), "metaelem"); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index f699ae93a08..f34dc2e7c23 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -597,7 +597,7 @@ static int object_metaball_add_invoke(bContext *C, wmOperator *op, wmEvent *even void OBJECT_OT_metaball_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Metaball"; + ot->name= "Metaball"; ot->description= "Add an metaball object to the scene."; ot->idname= "OBJECT_OT_metaball_add"; diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index beb5bbaf51b..d57c102a35f 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -40,6 +40,7 @@ #include "BKE_depsgraph.h" #include "WM_types.h" +#include "WM_api.h" static int rna_Meta_texspace_editable(PointerRNA *ptr) { From 198d996934af5e7c6a8bf8a6bcfec8c664536f9b Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 29 Jul 2009 14:17:15 +0000 Subject: [PATCH 451/512] * a few more small lamp panels tweaks --- release/ui/buttons_data_lamp.py | 49 ++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index dbc00ec0c39..5be25278e93 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -52,39 +52,41 @@ class DATA_PT_lamp(DataButtonsPanel): sub = col.column() sub.itemR(lamp, "color", text="") sub.itemR(lamp, "energy") - col.itemR(lamp, "negative") - if lamp.type == "AREA": - col.itemR(lamp, "distance") - col = split.column() - col.itemR(lamp, "layer", text="This Layer Only") - col.itemR(lamp, "specular") - col.itemR(lamp, "diffuse") - split = layout.split() + + #split = layout.split() if lamp.type in ('POINT', 'SPOT'): - col = split.column() - col.itemL(text="Falloff:") + #col = split.column() + #col.itemL(text="Falloff:") sub = col.column() - sub.itemR(lamp, "falloff_type", text="") + sub.itemR(lamp, "falloff_type", text="Falloff") sub.itemR(lamp, "distance") - col.itemR(lamp, "sphere") + if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED': - col = split.column() - col.itemL(text="Attenuation Distance:") + #col = split.column() + col.itemL(text="Attenuation Factors:") sub = col.column(align=True) sub.itemR(lamp, "linear_attenuation", slider=True, text="Linear") sub.itemR(lamp, "quadratic_attenuation", slider=True, text="Quadratic") - else: - split.column() + #else: + # + # split.column() + + col.itemR(lamp, "sphere") if lamp.type == 'AREA': - col = split.column() - col.itemL(text="Shape:") - col.itemR(lamp, "shape", text="") + #col = split.column() + col.itemR(lamp, "distance") + col.itemR(lamp, "gamma") + + #col = split.column() + + + col.itemR(lamp, "shape") sub = col.column(align=True) if (lamp.shape == 'SQUARE'): sub.itemR(lamp, "size") @@ -92,9 +94,12 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "size", text="Size X") sub.itemR(lamp, "size_y", text="Size Y") - col = split.column() - col.itemL(text="Gamma:") - col.itemR(lamp, "gamma", text="Value") + col = split.column() + col.itemR(lamp, "negative") + col.itemR(lamp, "layer", text="This Layer Only") + col.itemR(lamp, "specular") + col.itemR(lamp, "diffuse") + class DATA_PT_sunsky(DataButtonsPanel): __label__ = "Sun/Sky" From fa7a2091f1afb50e276730c5fdc0ff4b7141f327 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 29 Jul 2009 17:15:17 +0000 Subject: [PATCH 452/512] 2.5 MetaBall Buttons: * Code and layout cleanup. --- release/ui/buttons_data_metaball.py | 48 ++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py index 12d44ff7a42..03f489aeb9b 100644 --- a/release/ui/buttons_data_metaball.py +++ b/release/ui/buttons_data_metaball.py @@ -6,7 +6,7 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.meta_ball != None) + return (context.meta_ball) class DATA_PT_context_metaball(DataButtonsPanel): __show_header__ = False @@ -35,37 +35,37 @@ class DATA_PT_metaball(DataButtonsPanel): mball = context.meta_ball - split = layout.split() - sub = split.column() + col = layout.column() - sub.itemL(text="Settings:") - sub.itemR(mball, "threshold", text="Threshold") - sub.itemR(mball, "wire_size", text="View Resolution") - sub.itemR(mball, "render_size", text="Render Resolution") - - sub.itemL(text="Update:") - sub.itemR(mball, "flag", expand=True) + col.itemL(text="Settings:") + col.itemR(mball, "threshold", text="Threshold") + col.itemL(text="Resolution:") + col = layout.column(align=True) + col.itemR(mball, "wire_size", text="View") + col.itemR(mball, "render_size", text="Render") + + layout.itemR(mball, "flag") -class DATA_PT_metaball_metaelem(DataButtonsPanel): - __label__ = "MetaElem" +class DATA_PT_metaball_element(DataButtonsPanel): + __label__ = "Meta Element" + + def poll(self, context): + return (context.meta_ball and context.meta_ball.last_selected_element) def draw(self, context): layout = self.layout metaelem = context.meta_ball.last_selected_element - if(metaelem != None): - split = layout.split() - sub = split.column() + col = layout.column() - sub.itemL(text="Settings:") - sub.itemR(metaelem, "stiffness", text="Stiffness") - sub.itemR(metaelem, "size", text="Size") - sub.itemL(text="Type:") - sub.itemR(metaelem, "type", expand=True) - sub.itemR(metaelem, "negative", text="Negative") - - + col.itemL(text="Settings:") + col.itemR(metaelem, "stiffness", text="Stiffness") + col.itemR(metaelem, "size", text="Size") + col.itemL(text="Type:") + col.row().itemR(metaelem, "type", expand=True) + col.itemR(metaelem, "negative", text="Negative") + bpy.types.register(DATA_PT_context_metaball) bpy.types.register(DATA_PT_metaball) -bpy.types.register(DATA_PT_metaball_metaelem) \ No newline at end of file +bpy.types.register(DATA_PT_metaball_element) \ No newline at end of file From 4a1266baadf2251bf19ac8ebe15e334273b1f5a3 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Jul 2009 17:56:38 +0000 Subject: [PATCH 453/512] 2.5 Operator goodies! --- Macro operators Operators now can consist of multiple operators. Such a macro operator is identical and behaves identical to other opererators. Macros can also be constructed of macros even! Currently only hardcoded macros are implemented, this to solve combined operators such as 'add duplicate' or 'extrude' (both want a transform appended). Usage is simple: - WM_operatortype_append_macro() : add new operatortype, name, flags - WM_operatortype_macro_define() : add existing operator to macro (Note: macro_define will also allow properties to be set, doesnt work right now) On converting the macro wmOperatorType to a real operator, it makes a list of all operators, and the standard macro callbacks (exec, invoke, modal, poll) just will use all. Important note; switching to a modal operator only works as last in the chain now! Macros implemented for duplicate, extrude and rip. Tool menu works fine for it, also the redo hotkey F4 works properly. --- Operator redo fix The operators use the undo system to switch back, but this could give errors if other actions added undo pushes (buttons, outliner). Now the redo for operator searches back for the correct undo level. This fixes issues with many redos. Note for brecht: removed the ED_undo_push for buttons... it was called on *every* button now, which is probably too much? For example, using the 'toolbar' redo also caused this... --- source/blender/blenkernel/BKE_blender.h | 1 + source/blender/blenkernel/intern/blender.c | 16 ++ source/blender/editors/include/ED_util.h | 1 + .../editors/interface/interface_handlers.c | 4 +- source/blender/editors/mesh/editmesh_add.c | 3 - source/blender/editors/mesh/editmesh_tools.c | 14 +- source/blender/editors/mesh/mesh_ops.c | 22 ++- source/blender/editors/object/object_edit.c | 4 +- source/blender/editors/object/object_ops.c | 11 +- .../editors/space_view3d/view3d_edit.c | 24 +-- .../blender/editors/space_view3d/view3d_ops.c | 4 +- .../editors/space_view3d/view3d_toolbar.c | 30 +++- source/blender/editors/util/editmode_undo.c | 15 ++ source/blender/editors/util/undo.c | 46 ++++-- source/blender/editors/util/util_intern.h | 1 + .../makesdna/DNA_windowmanager_types.h | 19 +++ source/blender/windowmanager/WM_api.h | 4 + source/blender/windowmanager/WM_types.h | 1 + source/blender/windowmanager/intern/wm.c | 6 + .../windowmanager/intern/wm_event_system.c | 54 ++++++- .../windowmanager/intern/wm_operators.c | 140 +++++++++++++++++- 21 files changed, 360 insertions(+), 60 deletions(-) diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 795c7585b9c..19b9c315939 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -71,6 +71,7 @@ void pushpop_test(void); /* global undo */ extern void BKE_write_undo(struct bContext *C, char *name); extern void BKE_undo_step(struct bContext *C, int step); +extern void BKE_undo_name(struct bContext *C, const char *name); extern void BKE_reset_undo(void); extern char *BKE_undo_menu_string(void); extern void BKE_undo_number(struct bContext *C, int nr); diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 20505356d95..2728aa30e6e 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -688,6 +688,22 @@ void BKE_undo_number(bContext *C, int nr) BKE_undo_step(C, 0); } +/* go back to the last occurance of name in stack */ +void BKE_undo_name(bContext *C, const char *name) +{ + UndoElem *uel; + + for(uel= undobase.last; uel; uel= uel->prev) { + if(strcmp(name, uel->name)==0) + break; + } + if(uel && uel->prev) { + curundo= uel->prev; + BKE_undo_step(C, 0); + } +} + + char *BKE_undo_menu_string(void) { UndoElem *uel; diff --git a/source/blender/editors/include/ED_util.h b/source/blender/editors/include/ED_util.h index 7ccbf1ff18d..7b1c87f9cb2 100644 --- a/source/blender/editors/include/ED_util.h +++ b/source/blender/editors/include/ED_util.h @@ -44,6 +44,7 @@ void ED_editors_exit (struct bContext *C); /* undo.c */ void ED_undo_push (struct bContext *C, char *str); void ED_undo_push_op (struct bContext *C, struct wmOperator *op); +void ED_undo_pop_op (struct bContext *C, struct wmOperator *op); void ED_undo_pop (struct bContext *C); void ED_undo_redo (struct bContext *C); void ED_OT_undo (struct wmOperatorType *ot); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index da2899dd3b2..6f2b49c0513 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -358,8 +358,8 @@ static void ui_apply_but_funcs_after(bContext *C) if(after.rename_orig) MEM_freeN(after.rename_orig); - if(after.undostr[0]) - ED_undo_push(C, after.undostr); +// if(after.undostr[0]) +// ED_undo_push(C, after.undostr); } } diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 92aa46ea390..34eca8748bc 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -1683,9 +1683,6 @@ static int mesh_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) mesh_duplicate_exec(C, op); WM_cursor_wait(0); - RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); - return OPERATOR_FINISHED; } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 76f355ab7f9..93e91732b2b 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -704,7 +704,7 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - int constraint_axis[3] = {0, 0, 1}; +// int constraint_axis[3] = {0, 0, 1}; extrude_mesh(scene, obedit, em, op); @@ -717,11 +717,11 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_boolean_set(op->ptr, "mirror", 0); /* the following two should only be set when extruding faces */ - RNA_enum_set(op->ptr, "constraint_orientation", V3D_MANIP_NORMAL); - RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); +// RNA_enum_set(op->ptr, "constraint_orientation", V3D_MANIP_NORMAL); +// RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); +// WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -4991,9 +4991,9 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) BKE_mesh_end_editmesh(obedit->data, em); - RNA_enum_set(op->ptr, "proportional", 0); - RNA_boolean_set(op->ptr, "mirror", 0); - WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); +// RNA_enum_set(op->ptr, "proportional", 0); +// RNA_boolean_set(op->ptr, "mirror", 0); +// WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 8ed68d5cd20..edb131d7da2 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -230,6 +230,8 @@ static void MESH_OT_specials(wmOperatorType *ot) void ED_operatortypes_mesh(void) { + wmOperatorType *ot; + WM_operatortype_append(MESH_OT_select_all_toggle); WM_operatortype_append(MESH_OT_select_more); WM_operatortype_append(MESH_OT_select_less); @@ -313,6 +315,20 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_edge_specials); WM_operatortype_append(MESH_OT_face_specials); WM_operatortype_append(MESH_OT_specials); + + /* macros */ + ot= WM_operatortype_append_macro("MESH_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); + WM_operatortype_macro_define(ot, "MESH_OT_duplicate"); + WM_operatortype_macro_define(ot, "TFM_OT_translate"); + + ot= WM_operatortype_append_macro("MESH_OT_rip_move", "Rip", OPTYPE_UNDO|OPTYPE_REGISTER); + WM_operatortype_macro_define(ot, "MESH_OT_rip"); + WM_operatortype_macro_define(ot, "TFM_OT_translate"); + + ot= WM_operatortype_append_macro("MESH_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER); + WM_operatortype_macro_define(ot, "MESH_OT_extrude"); + WM_operatortype_macro_define(ot, "TFM_OT_translate"); + } /* note mesh keymap also for other space? */ @@ -363,7 +379,7 @@ void ED_keymap_mesh(wmWindowManager *wm) WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1); - WM_keymap_add_item(keymap, "MESH_OT_extrude", EKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MESH_OT_extrude_move", EKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MESH_OT_spin", RKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "MESH_OT_screw", NINEKEY, KM_PRESS, KM_CTRL, 0); @@ -386,12 +402,12 @@ void ED_keymap_mesh(wmWindowManager *wm) WM_keymap_add_item(keymap, "MESH_OT_colors_rotate",EIGHTKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "MESH_OT_colors_mirror",EIGHTKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "MESH_OT_rip",VKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MESH_OT_rip_move",VKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MESH_OT_merge", MKEY, KM_PRESS, KM_ALT, 0); /* add/remove */ WM_keymap_add_item(keymap, "MESH_OT_edge_face_add", FKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "MESH_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "MESH_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0); /* use KM_RELEASE because same key is used for tweaks */ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index f34dc2e7c23..5fd5f4ff0ad 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -6497,8 +6497,8 @@ static int duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) { duplicate_exec(C, op); - RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); +// RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); +// WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index fe092847183..c1509e78502 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -63,6 +63,8 @@ void ED_operatortypes_object(void) { + wmOperatorType *ot; + WM_operatortype_append(OBJECT_OT_editmode_toggle); WM_operatortype_append(OBJECT_OT_posemode_toggle); WM_operatortype_append(OBJECT_OT_parent_set); @@ -147,6 +149,13 @@ void ED_operatortypes_object(void) WM_operatortype_append(LATTICE_OT_select_all_toggle); WM_operatortype_append(LATTICE_OT_make_regular); + + /* macros */ + ot= WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); + if(ot) { + WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); + WM_operatortype_macro_define(ot, "TFM_OT_translate"); + } } void ED_keymap_object(wmWindowManager *wm) @@ -185,7 +194,7 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_ALT, 0)->ptr, "linked", 1); WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index f278b717f10..acb3a2257dc 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -560,7 +560,7 @@ void VIEW3D_OT_viewrotate(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; + ot->flag= OPTYPE_BLOCKING; } /* ************************ viewmove ******************************** */ @@ -644,7 +644,7 @@ void VIEW3D_OT_viewmove(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; + ot->flag= OPTYPE_BLOCKING; } /* ************************ viewzoom ******************************** */ @@ -844,7 +844,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; + ot->flag= OPTYPE_BLOCKING; RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX); } @@ -925,7 +925,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; RNA_def_boolean(ot->srna, "center", 0, "Center", ""); } @@ -1064,7 +1064,7 @@ void VIEW3D_OT_view_center(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; } /* ********************* Set render border operator ****************** */ @@ -1312,7 +1312,7 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; /* rna */ RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); @@ -1477,7 +1477,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; RNA_def_enum(ot->srna, "type", prop_view_items, 0, "View", "The Type of view"); } @@ -1546,7 +1546,7 @@ void VIEW3D_OT_view_orbit(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; RNA_def_enum(ot->srna, "type", prop_view_orbit_items, 0, "Orbit", "Direction of View Orbit"); } @@ -1596,7 +1596,7 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; RNA_def_enum(ot->srna, "type", prop_view_pan_items, 0, "Pan", "Direction of View Pan"); } @@ -1628,7 +1628,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; } @@ -1730,7 +1730,7 @@ void VIEW3D_OT_clip_border(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; /* rna */ RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); @@ -1783,7 +1783,7 @@ void VIEW3D_OT_drawtype(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; /* rna XXX should become enum */ RNA_def_int(ot->srna, "draw_type", 0, INT_MIN, INT_MAX, "Draw Type", "", INT_MIN, INT_MAX); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 69b297b2e03..c82db3bbe32 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -218,8 +218,8 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW3D_OT_snap_menu", SKEY, KM_PRESS, KM_SHIFT, 0); - /* drag & drop */ - WM_keymap_add_item(keymap, "VIEW3D_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); + /* drag & drop (disabled) */ +// WM_keymap_add_item(keymap, "VIEW3D_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); /* radial control */ RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE); diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 1564fcb169b..67d8bc3e5ee 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -109,7 +109,7 @@ static void redo_cb(bContext *C, void *arg_op, void *arg2) int retval; printf("operator redo %s\n", lastop->type->name); - ED_undo_pop(C); + ED_undo_pop_op(C, lastop); retval= WM_operator_repeat(C, lastop); if((retval & OPERATOR_FINISHED)==0) { printf("operator redo failed %s\n", lastop->type->name); @@ -118,11 +118,25 @@ static void redo_cb(bContext *C, void *arg_op, void *arg2) } } +static void view3d_panel_operator_redo_buts(const bContext *C, Panel *pa, wmOperator *op) +{ + wmWindowManager *wm= CTX_wm_manager(C); + PointerRNA ptr; + + if(!op->properties) { + IDPropertyTemplate val = {0}; + op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); + } + + RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); + uiDefAutoButsRNA(C, pa->layout, &ptr, 1); + +} + static void view3d_panel_operator_redo(const bContext *C, Panel *pa) { wmWindowManager *wm= CTX_wm_manager(C); wmOperator *op; - PointerRNA ptr; uiBlock *block; block= uiLayoutGetBlock(pa->layout); @@ -139,13 +153,13 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) uiBlockSetFunc(block, redo_cb, op, NULL); - if(!op->properties) { - IDPropertyTemplate val = {0}; - op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); + if(op->macro.first) { + for(op= op->macro.first; op; op= op->next) + view3d_panel_operator_redo_buts(C, pa, op); + } + else { + view3d_panel_operator_redo_buts(C, pa, op); } - - RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(C, pa->layout, &ptr, 1); } /* ******************* */ diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c index 8484ad78bc4..17a1e0b6cdb 100644 --- a/source/blender/editors/util/editmode_undo.c +++ b/source/blender/editors/util/editmode_undo.c @@ -297,6 +297,21 @@ static void undo_number(bContext *C, int nr) undo_editmode_step(C, 0); } +void undo_editmode_name(bContext *C, const char *undoname) +{ + UndoElem *uel; + + for(uel= undobase.last; uel; uel= uel->prev) { + if(strcmp(undoname, uel->name)==0) + break; + } + if(uel && uel->prev) { + curundo= uel->prev; + undo_editmode_step(C, 0); + } +} + + /* ************** for interaction with menu/pullown */ void undo_editmode_menu(bContext *C) diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index be04cdecac6..435f2c7ecf4 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -71,6 +71,8 @@ #include "UI_interface.h" #include "UI_resources.h" +#include "util_intern.h" + /* ***************** generic undo system ********************* */ /* ********* XXX **************** */ @@ -81,7 +83,7 @@ void ED_undo_push(bContext *C, char *str) { wmWindowManager *wm= CTX_wm_manager(C); Object *obedit= CTX_data_edit_object(C); - + if(obedit) { if (U.undosteps == 0) return; @@ -114,13 +116,7 @@ void ED_undo_push(bContext *C, char *str) } } -void ED_undo_push_op(bContext *C, wmOperator *op) -{ - /* in future, get undo string info? */ - ED_undo_push(C, op->type->name); -} - -static int ed_undo_step(bContext *C, int step) +static int ed_undo_step(bContext *C, int step, const char *undoname) { Object *obedit= CTX_data_edit_object(C); ScrArea *sa= CTX_wm_area(C); @@ -140,8 +136,12 @@ static int ed_undo_step(bContext *C, int step) ED_text_undo_step(C, step); } else if(obedit) { - if ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE) - undo_editmode_step(C, step); + if ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE) { + if(undoname) + undo_editmode_name(C, undoname); + else + undo_editmode_step(C, step); + } } else { int do_glob_undo= 0; @@ -163,7 +163,10 @@ static int ed_undo_step(bContext *C, int step) #ifndef DISABLE_PYTHON // XXX BPY_scripts_clear_pyobjects(); #endif - BKE_undo_step(C, step); + if(undoname) + BKE_undo_name(C, undoname); + else + BKE_undo_step(C, step); sound_initialize_sounds(); } @@ -177,22 +180,35 @@ static int ed_undo_step(bContext *C, int step) void ED_undo_pop(bContext *C) { - ed_undo_step(C, 1); + ed_undo_step(C, 1, NULL); } void ED_undo_redo(bContext *C) { - ed_undo_step(C, -1); + ed_undo_step(C, -1, NULL); +} + +void ED_undo_push_op(bContext *C, wmOperator *op) +{ + /* in future, get undo string info? */ + ED_undo_push(C, op->type->name); +} + +void ED_undo_pop_op(bContext *C, wmOperator *op) +{ + /* search back a couple of undo's, in case something else added pushes */ + ed_undo_step(C, 0, op->type->name); } static int ed_undo_exec(bContext *C, wmOperator *op) { /* "last operator" should disappear, later we can tie ths with undo stack nicer */ WM_operator_stack_clear(C); - return ed_undo_step(C, 1); + return ed_undo_step(C, 1, NULL); } + static int ed_redo_exec(bContext *C, wmOperator *op) { - return ed_undo_step(C, -1); + return ed_undo_step(C, -1, NULL); } void ED_undo_menu(bContext *C) diff --git a/source/blender/editors/util/util_intern.h b/source/blender/editors/util/util_intern.h index 37e6c5c25e1..8a0787dde3f 100644 --- a/source/blender/editors/util/util_intern.h +++ b/source/blender/editors/util/util_intern.h @@ -33,6 +33,7 @@ /* editmode_undo.c */ void undo_editmode_clear(void); +void undo_editmode_name(bContext *C, const char *undoname); #endif /* ED_UTIL_INTERN_H */ diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index a7ad502d438..704acbfd52b 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -171,6 +171,18 @@ typedef struct wmWindow { /* should be somthing like DNA_EXCLUDE * but the preprocessor first removes all comments, spaces etc */ +# +# +typedef struct wmOperatorTypeMacro { + struct wmOperatorTypeMacro *next, *prev; + + /* operator id */ + char idname[MAX_ID_NAME]; + /* rna pointer to access properties, like keymap */ + struct PointerRNA *ptr; + +} wmOperatorTypeMacro; + # # typedef struct wmOperatorType { @@ -204,6 +216,9 @@ typedef struct wmOperatorType { /* rna for properties */ struct StructRNA *srna; + /* struct wmOperatorTypeMacro */ + ListBase macro; + short flag; /* pointer to modal keymap, do not free! */ @@ -265,9 +280,13 @@ typedef struct wmOperator { /* runtime */ wmOperatorType *type; /* operator type definition from idname */ void *customdata; /* custom storage, only while operator runs */ + struct PointerRNA *ptr; /* rna pointer to access properties */ struct ReportList *reports; /* errors and warnings storage */ + ListBase macro; /* list of operators, can be a tree */ + struct wmOperator *opm; /* current running macro, not saved */ + } wmOperator; /* operator type exec(), invoke() modal(), return values */ diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 0d3ad96d8c3..f65e5b1b077 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -158,6 +158,10 @@ void WM_operatortype_append (void (*opfunc)(wmOperatorType*)); void WM_operatortype_append_ptr (void (*opfunc)(wmOperatorType*, void *), void *userdata); int WM_operatortype_remove(const char *idname); +wmOperatorType *WM_operatortype_append_macro(char *idname, char *name, int flag); +wmOperatorTypeMacro *WM_operatortype_macro_define(wmOperatorType *ot, const char *idname); + + int WM_operator_call (struct bContext *C, struct wmOperator *op); int WM_operator_repeat (struct bContext *C, struct wmOperator *op); int WM_operator_name_call (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 3a646c5e799..a083d589d31 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -43,6 +43,7 @@ struct wmWindowManager; #define OPTYPE_REGISTER 1 /* register operators in stack after finishing */ #define OPTYPE_UNDO 2 /* do undo push after after */ #define OPTYPE_BLOCKING 4 /* let blender grab all input from the WM (X11) */ +#define OPTYPE_MACRO 8 /* context to call operator in for WM_operator_name_call */ /* rna_ui.c contains EnumPropertyItem's of these, keep in sync */ diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 863fb3ab4bd..c0ac7b06f5a 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -74,6 +74,12 @@ void WM_operator_free(wmOperator *op) MEM_freeN(op->reports); } + if(op->macro.first) { + wmOperator *opm; + for(opm= op->macro.first; opm; opm= opm->next) + WM_operator_free(opm); + } + MEM_freeN(op); } diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index c75feafe623..33e8a392ba3 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -244,6 +244,23 @@ void wm_event_do_notifiers(bContext *C) /* ********************* operators ******************* */ +static int wm_operator_poll(bContext *C, wmOperatorType *ot) +{ + wmOperatorTypeMacro *otmacro; + + for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) { + wmOperatorType *ot= WM_operatortype_find(otmacro->idname, 0); + + if(0==wm_operator_poll(C, ot)) + return 0; + } + + if(ot->poll) + return ot->poll(C); + + return 1; +} + /* if repeat is true, it doesn't register again, nor does it free */ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat) { @@ -252,7 +269,7 @@ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat) if(op==NULL || op->type==NULL) return retval; - if(op->type->poll && op->type->poll(C)==0) + if(0==wm_operator_poll(C, op->type)) return retval; if(op->type->exec) @@ -320,6 +337,26 @@ static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, P BKE_reports_init(op->reports, RPT_STORE); } + /* recursive filling of operator macro list */ + if(ot->macro.first) { + static wmOperator *motherop= NULL; + wmOperatorTypeMacro *otmacro; + + /* ensure all ops are in execution order in 1 list */ + if(motherop==NULL) + motherop= op; + + for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) { + wmOperatorType *otm= WM_operatortype_find(otmacro->idname, 0); + wmOperator *opm= wm_operator_create(wm, otm, otmacro->ptr, NULL); + + BLI_addtail(&motherop->macro, opm); + opm->opm= motherop; /* pointer to mom, for modal() */ + } + + motherop= NULL; + } + return op; } @@ -345,7 +382,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_PASS_THROUGH; - if(ot->poll==NULL || ot->poll(C)) { + if(wm_operator_poll(C, ot)) { wmOperator *op= wm_operator_create(wm, ot, properties, NULL); if((G.f & G_DEBUG) && event && event->type!=MOUSEMOVE) @@ -809,7 +846,6 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa case EVT_FILESELECT_OPEN: case EVT_FILESELECT_FULL_OPEN: { - short flag =0; short display =FILE_SHORTDISPLAY; short filter =0; short sort =FILE_SORT_ALPHA; char *dir= NULL; char *path= RNA_string_get_alloc(handler->op->ptr, "filename", NULL, 0); if(event->val==EVT_FILESELECT_OPEN) @@ -1198,7 +1234,17 @@ void WM_event_set_handler_flag(wmEventHandler *handler, int flag) wmEventHandler *WM_event_add_modal_handler(bContext *C, ListBase *handlers, wmOperator *op) { wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "event modal handler"); - handler->op= op; + + /* operator was part of macro */ + if(op->opm) { + /* give the mother macro to the handler */ + handler->op= op->opm; + /* mother macro opm becomes the macro element */ + handler->op->opm= op; + } + else + handler->op= op; + handler->op_area= CTX_wm_area(C); /* means frozen screen context for modal handlers! */ handler->op_region= CTX_wm_region(C); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index e25c86ea2fd..2b7a18dc1cf 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -154,6 +154,134 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType*, void*), void *us BLI_addtail(&global_ops, ot); } +/* ********************* macro operator ******************** */ + +/* macro exec only runs exec calls */ +static int wm_macro_exec(bContext *C, wmOperator *op) +{ + wmOperator *opm; + int retval= OPERATOR_FINISHED; + +// printf("macro exec %s\n", op->type->idname); + + for(opm= op->macro.first; opm; opm= opm->next) { + + if(opm->type->exec) { +// printf("macro exec %s\n", opm->type->idname); + retval= opm->type->exec(C, opm); + + if(!(retval & OPERATOR_FINISHED)) + break; + } + } +// if(opm) +// printf("macro ended not finished\n"); +// else +// printf("macro end\n"); + + return retval; +} + +static int wm_macro_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + wmOperator *opm; + int retval= OPERATOR_FINISHED; + +// printf("macro invoke %s\n", op->type->idname); + + for(opm= op->macro.first; opm; opm= opm->next) { + + if(opm->type->invoke) + retval= opm->type->invoke(C, opm, event); + else if(opm->type->exec) + retval= opm->type->exec(C, opm); + + if(!(retval & OPERATOR_FINISHED)) + break; + } + +// if(opm) +// printf("macro ended not finished\n"); +// else +// printf("macro end\n"); + + + return retval; +} + +static int wm_macro_modal(bContext *C, wmOperator *op, wmEvent *event) +{ +// printf("macro modal %s\n", op->type->idname); + + if(op->opm==NULL) + printf("macro error, calling NULL modal()\n"); + else { +// printf("macro modal %s\n", op->opm->type->idname); + return op->opm->type->modal(C, op->opm, event); + } + + return OPERATOR_FINISHED; +} + +/* Names have to be static for now */ +wmOperatorType *WM_operatortype_append_macro(char *idname, char *name, int flag) +{ + wmOperatorType *ot; + + if(WM_operatortype_exists(idname)) { + printf("Macro error: operator %s exists\n", idname); + return NULL; + } + + ot= MEM_callocN(sizeof(wmOperatorType), "operatortype"); + ot->srna= RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); + + ot->idname= idname; + ot->name= name; + ot->flag= OPTYPE_MACRO | flag; + + ot->exec= wm_macro_exec; + ot->invoke= wm_macro_invoke; + ot->modal= wm_macro_modal; + ot->poll= NULL; + + RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:"(undocumented operator)"); // XXX All ops should have a description but for now allow them not to. + RNA_def_struct_identifier(ot->srna, ot->idname); + + BLI_addtail(&global_ops, ot); + + return ot; +} + +wmOperatorTypeMacro *WM_operatortype_macro_define(wmOperatorType *ot, const char *idname) +{ + wmOperatorTypeMacro *otmacro= MEM_callocN(sizeof(wmOperatorTypeMacro), "wmOperatorTypeMacro"); + + BLI_strncpy(otmacro->idname, idname, OP_MAX_TYPENAME); + + /* do this on first use, since operatordefinitions might have been not done yet */ +// otmacro->ptr= MEM_callocN(sizeof(PointerRNA), "optype macro ItemPtr"); +// WM_operator_properties_create(otmacro->ptr, idname); + + BLI_addtail(&ot->macro, otmacro); + + return otmacro; +} + +static void wm_operatortype_free_macro(wmOperatorType *ot) +{ + wmOperatorTypeMacro *otmacro; + + for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) { + if(otmacro->ptr) { + WM_operator_properties_free(otmacro->ptr); + MEM_freeN(otmacro->ptr); + } + } + BLI_freelistN(&ot->macro); +} + + int WM_operatortype_remove(const char *idname) { wmOperatorType *ot = WM_operatortype_find(idname, 0); @@ -163,6 +291,10 @@ int WM_operatortype_remove(const char *idname) BLI_remlink(&global_ops, ot); RNA_struct_free(&BLENDER_RNA, ot->srna); + + if(ot->macro.first) + wm_operatortype_free_macro(ot); + MEM_freeN(ot); return 1; @@ -348,7 +480,7 @@ static void redo_cb(bContext *C, void *arg_op, void *arg2) wmOperator *lastop= arg_op; if(lastop) { - ED_undo_pop(C); + ED_undo_pop_op(C, lastop); WM_operator_repeat(C, lastop); } } @@ -1677,6 +1809,12 @@ static void WM_OT_ten_timer(wmOperatorType *ot) /* called on initialize WM_exit() */ void wm_operatortype_free(void) { + wmOperatorType *ot; + + for(ot= global_ops.first; ot; ot= ot->next) + if(ot->macro.first) + wm_operatortype_free_macro(ot); + BLI_freelistN(&global_ops); } From 3d70e21c170f3fb0bd8f15ae02b4cc953fa3a9c2 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Jul 2009 18:03:25 +0000 Subject: [PATCH 454/512] 2.5 Makefile fix: added metaball.a lib --- source/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/source/Makefile b/source/Makefile index 680d8c8bfaa..351db333aba 100644 --- a/source/Makefile +++ b/source/Makefile @@ -229,6 +229,7 @@ PULIB += $(OCGDIR)/blender/ed_view3d/$(DEBUG_DIR)libed_view3d.a PULIB += $(OCGDIR)/blender/ed_interface/$(DEBUG_DIR)libed_interface.a PULIB += $(OCGDIR)/blender/ed_object/$(DEBUG_DIR)libed_object.a PULIB += $(OCGDIR)/blender/ed_curve/$(DEBUG_DIR)libed_curve.a +PULIB += $(OCGDIR)/blender/ed_metaball/$(DEBUG_DIR)libed_metaball.a PULIB += $(OCGDIR)/blender/ed_armature/$(DEBUG_DIR)libed_armature.a PULIB += $(OCGDIR)/blender/ed_mesh/$(DEBUG_DIR)libed_mesh.a PULIB += $(OCGDIR)/blender/ed_sculpt_paint/$(DEBUG_DIR)libed_sculpt_paint.a From 785bf413f30d70da9344caa8291726e0c1b247b9 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Jul 2009 18:04:35 +0000 Subject: [PATCH 455/512] 2.5 On 2nd thought: added back undopushes on every button use. Operator re-use works with it now! --- source/blender/editors/interface/interface_handlers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 6f2b49c0513..da2899dd3b2 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -358,8 +358,8 @@ static void ui_apply_but_funcs_after(bContext *C) if(after.rename_orig) MEM_freeN(after.rename_orig); -// if(after.undostr[0]) -// ED_undo_push(C, after.undostr); + if(after.undostr[0]) + ED_undo_push(C, after.undostr); } } From da14738624117d54aa088a192e72b9270cdcf5d9 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Jul 2009 18:15:46 +0000 Subject: [PATCH 456/512] 2.5 Two bugfixes, reported by Sebastian Skejo in IRC: - File operator poll wasn't secure, search for it crashed - Knife tool depends on having view3d context, fixed poll for it --- source/blender/editors/interface/interface_regions.c | 10 ++++++---- source/blender/editors/mesh/editmesh_loop.c | 2 +- source/blender/editors/space_file/file_ops.c | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 70716de6bdc..7cce7a0bbed 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -748,12 +748,14 @@ void ui_searchbox_autocomplete(bContext *C, ARegion *ar, uiBut *but, char *str) { uiSearchboxData *data= ar->regiondata; - data->items.autocpl= autocomplete_begin(str, ui_get_but_string_max_length(but)); + if(str[0]) { + data->items.autocpl= autocomplete_begin(str, ui_get_but_string_max_length(but)); - but->search_func(C, but->search_arg, but->editstr, &data->items); + but->search_func(C, but->search_arg, but->editstr, &data->items); - autocomplete_end(data->items.autocpl, str); - data->items.autocpl= NULL; + autocomplete_end(data->items.autocpl, str); + data->items.autocpl= NULL; + } } static void ui_searchbox_region_draw(const bContext *C, ARegion *ar) diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c index 7fc3753eefb..20fd33fc731 100644 --- a/source/blender/editors/mesh/editmesh_loop.c +++ b/source/blender/editors/mesh/editmesh_loop.c @@ -723,7 +723,7 @@ void MESH_OT_knife_cut(wmOperatorType *ot) ot->modal= WM_gesture_lines_modal; ot->exec= knife_cut_exec; - ot->poll= ED_operator_editmesh; + ot->poll= EM_view3d_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 65a46d6514d..a217dbe9f57 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -933,7 +933,7 @@ int file_delete_poll(bContext *C) SpaceFile *sfile= CTX_wm_space_file(C); struct direntry* file; - if (sfile->params) { + if (sfile && sfile->params) { if (sfile->params->active_file < 0) { poll= 0; } else { From 2621dd90e39e7d447255d86a7111641d2098e404 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 29 Jul 2009 18:44:54 +0000 Subject: [PATCH 457/512] 2.5 MetaBalls: * Layout tweaks by nudelZ. Thanks! --- release/ui/buttons_data_metaball.py | 38 +++++++++++++++-------- source/blender/makesrna/intern/rna_meta.c | 2 +- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py index 03f489aeb9b..b2e2728afe5 100644 --- a/release/ui/buttons_data_metaball.py +++ b/release/ui/buttons_data_metaball.py @@ -35,16 +35,20 @@ class DATA_PT_metaball(DataButtonsPanel): mball = context.meta_ball - col = layout.column() + split = layout.split() + col = split.column() + col.itemL(text="Resolution:") + sub = col.column(align=True) + sub.itemR(mball, "wire_size", text="View") + sub.itemR(mball, "render_size", text="Render") + + col = split.column() col.itemL(text="Settings:") col.itemR(mball, "threshold", text="Threshold") - col.itemL(text="Resolution:") - col = layout.column(align=True) - col.itemR(mball, "wire_size", text="View") - col.itemR(mball, "render_size", text="Render") - - layout.itemR(mball, "flag") + + layout.itemL(text="Update:") + layout.itemR(mball, "flag", expand=True) class DATA_PT_metaball_element(DataButtonsPanel): __label__ = "Meta Element" @@ -57,14 +61,22 @@ class DATA_PT_metaball_element(DataButtonsPanel): metaelem = context.meta_ball.last_selected_element - col = layout.column() - + split = layout.split() + + col = split.column() + col.itemL(text="Size:") + col.itemR(metaelem, "size", text="") + + col = split.column() col.itemL(text="Settings:") col.itemR(metaelem, "stiffness", text="Stiffness") - col.itemR(metaelem, "size", text="Size") - col.itemL(text="Type:") - col.row().itemR(metaelem, "type", expand=True) - col.itemR(metaelem, "negative", text="Negative") + + layout.itemL(text="Type:") + layout.itemR(metaelem, "type", expand=True) + + flow = layout.column_flow() + flow.itemR(metaelem, "negative", text="Negative") + flow.itemR(metaelem, "hide", text="Hide") bpy.types.register(DATA_PT_context_metaball) bpy.types.register(DATA_PT_metaball) diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index d57c102a35f..279e1e084b0 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -130,7 +130,7 @@ void rna_def_metaball(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem prop_update_items[] = { {MB_UPDATE_ALWAYS, "UPDATE_ALWAYS", 0, "Always", "While editing, update metaball always."}, - {MB_UPDATE_HALFRES, "HALFRES", 0, "Half Resolution", "While editing, update metaball in half resolution."}, + {MB_UPDATE_HALFRES, "HALFRES", 0, "Half", "While editing, update metaball in half resolution."}, {MB_UPDATE_FAST, "FAST", 0, "Fast", "While editing, update metaball without polygonization."}, {MB_UPDATE_NEVER, "NEVER", 0, "Never", "While editing, don't update metaball at all."}, {0, NULL, 0, NULL, NULL}}; From 49faf9011ad09e18ee21a25a58393fdada508623 Mon Sep 17 00:00:00 2001 From: Elia Sarti Date: Wed, 29 Jul 2009 20:51:05 +0000 Subject: [PATCH 458/512] 2.5 / Drag & Drop Removed all related code. Talked with Ton about this and agreed to postpone it at indefinite time in the future, when things get more relaxed. Files saved since my first commit should not break although I'm not 100% sure. --- .../blender/editors/space_outliner/outliner.c | 50 ------------------- .../editors/space_outliner/outliner_intern.h | 2 - .../editors/space_outliner/outliner_ops.c | 5 -- .../editors/space_view3d/view3d_intern.h | 1 - .../blender/editors/space_view3d/view3d_ops.c | 4 -- .../editors/space_view3d/view3d_select.c | 50 ------------------- .../makesdna/DNA_windowmanager_types.h | 4 +- .../windowmanager/intern/wm_event_system.c | 39 --------------- source/blender/windowmanager/wm_event_types.h | 3 -- 9 files changed, 1 insertion(+), 157 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index b05d9637a69..84dea679767 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -3514,56 +3514,6 @@ void OUTLINER_OT_data_operation(wmOperatorType *ot) } -/* ****** Drag & Drop ****** */ - -static int outliner_drag_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - Object *ob= CTX_data_active_object(C); - PointerRNA ptr; - - RNA_pointer_create(NULL, &RNA_Object, ob, &ptr); - - return OPERATOR_RUNNING_MODAL; -} - -static int outliner_drag_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - switch(event->type) { - case MOUSEDRAG: - - break; - case MOUSEDROP: - return OPERATOR_FINISHED; - case ESCKEY: - return OPERATOR_CANCELLED; - } - - return OPERATOR_RUNNING_MODAL; -} - -static int outliner_drag_exec(bContext *C, wmOperator *op) -{ - return OPERATOR_FINISHED; -} - -void OUTLINER_OT_drag(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Drag"; - ot->idname= "OUTLINER_OT_drag"; - - /* api callbacks */ - ot->invoke= outliner_drag_invoke; - ot->modal= outliner_drag_modal; - ot->exec= outliner_drag_exec; - - ot->poll= ED_operator_outliner_active; - - /* flags */ - /* ot->flag= OPTYPE_UNDO; */ -} - - /* ******************** */ diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 65b0708d64b..4f9a0f686b9 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -129,8 +129,6 @@ void OUTLINER_OT_group_operation(struct wmOperatorType *ot); void OUTLINER_OT_id_operation(struct wmOperatorType *ot); void OUTLINER_OT_data_operation(struct wmOperatorType *ot); -void OUTLINER_OT_drag(struct wmOperatorType *ot); - void OUTLINER_OT_show_one_level(struct wmOperatorType *ot); void OUTLINER_OT_show_active(struct wmOperatorType *ot); void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 417851982a3..2e11eb379b4 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -56,8 +56,6 @@ void outliner_operatortypes(void) WM_operatortype_append(OUTLINER_OT_id_operation); WM_operatortype_append(OUTLINER_OT_data_operation); - WM_operatortype_append(OUTLINER_OT_drag); - WM_operatortype_append(OUTLINER_OT_show_one_level); WM_operatortype_append(OUTLINER_OT_show_active); WM_operatortype_append(OUTLINER_OT_show_hierarchy); @@ -89,9 +87,6 @@ void outliner_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OUTLINER_OT_operation", RIGHTMOUSE, KM_PRESS, 0, 0); - /* drag & drop */ - WM_keymap_add_item(keymap, "OUTLINER_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); - WM_keymap_add_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 382ba68e95f..3e9382509f4 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -115,7 +115,6 @@ void VIEW3D_OT_select_extend(struct wmOperatorType *ot); void VIEW3D_OT_select_circle(struct wmOperatorType *ot); void VIEW3D_OT_select_border(struct wmOperatorType *ot); void VIEW3D_OT_select_lasso(struct wmOperatorType *ot); -void VIEW3D_OT_drag(struct wmOperatorType *ot); /* view3d_view.c */ void VIEW3D_OT_smoothview(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index c82db3bbe32..112847272e5 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -73,7 +73,6 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_view_center); WM_operatortype_append(VIEW3D_OT_select); WM_operatortype_append(VIEW3D_OT_select_border); - WM_operatortype_append(VIEW3D_OT_drag); WM_operatortype_append(VIEW3D_OT_clip_border); WM_operatortype_append(VIEW3D_OT_select_circle); WM_operatortype_append(VIEW3D_OT_smoothview); @@ -217,9 +216,6 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW3D_OT_camera_to_view", PAD0, KM_PRESS, KM_ALT|KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_snap_menu", SKEY, KM_PRESS, KM_SHIFT, 0); - - /* drag & drop (disabled) */ -// WM_keymap_add_item(keymap, "VIEW3D_OT_drag", MOUSEDRAG, KM_ANY, 0, 0); /* radial control */ RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 4a702665c88..54e556b58ed 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1602,56 +1602,6 @@ void VIEW3D_OT_select(wmOperatorType *ot) } -/* ****** Drag & Drop ****** */ - -static int view3d_drag_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - wmWindow *win= CTX_wm_window(C); - Object *ob= CTX_data_active_object(C); - PointerRNA ptr; - - RNA_pointer_create(NULL, &RNA_Object, ob, &ptr); - - return OPERATOR_RUNNING_MODAL; -} - -static int view3d_drag_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - switch(event->type) { - case MOUSEDRAG: - - break; - case MOUSEDROP: - return OPERATOR_FINISHED; - case ESCKEY: - return OPERATOR_CANCELLED; - } - - return OPERATOR_RUNNING_MODAL; -} - -static int view3d_drag_exec(bContext *C, wmOperator *op) -{ - return OPERATOR_FINISHED; -} - -void VIEW3D_OT_drag(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Drag"; - ot->idname= "VIEW3D_OT_drag"; - - /* api callbacks */ - ot->invoke= view3d_drag_invoke; - ot->modal= view3d_drag_modal; - ot->exec= view3d_drag_exec; - ot->poll= ED_operator_view3d_active; - - /* flags */ - /* ot->flag= OPTYPE_UNDO; */ -} - - /* -------------------- circle select --------------------------------------------- */ static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int index) diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 704acbfd52b..b6a2b4c0544 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -146,9 +146,7 @@ typedef struct wmWindow { short cursor; /* current mouse cursor type */ short lastcursor; /* for temp waitcursor */ short addmousemove; /* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */ - short downstate; /* used for drag & drop: remembers mouse button down state */ - short downx, downy; /* mouse coords for button down event */ - short pad3, pad4, pad5; + int pad3; struct wmEvent *eventstate; /* storage for event system */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 33e8a392ba3..3f668b23b24 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1485,23 +1485,6 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) update_tablet_data(win, &event); wm_event_add(win, &event); - - cx = abs((win->downx - event.x)); - cy = abs((win->downy - event.y)); - - /* probably minimum drag size should be #defined instead of hardcoded 3 - * also, cy seems always to be 6 pixels off, not sure why - */ - if ((win->downstate == LEFTMOUSE || win->downstate == MOUSEDRAG) && (cx > 3 || cy > 9)) { - wmEvent dragevt= *evt; - dragevt.type= MOUSEDRAG; - dragevt.customdata= NULL; - dragevt.customdatafree= 0; - - win->downstate= MOUSEDRAG; - - wm_event_add(win, &dragevt); - } } break; } @@ -1525,28 +1508,6 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) update_tablet_data(win, &event); wm_event_add(win, &event); - - if (event.val) { - win->downstate= event.type; - win->downx= event.x; - win->downy= event.y; - } - else { - short downstate= win->downstate; - - win->downstate= 0; - win->downx= 0; - win->downy= 0; - - if (downstate == MOUSEDRAG) { - wmEvent dropevt= *evt; - dropevt.type= MOUSEDROP; - dropevt.customdata= NULL; - dropevt.customdatafree= 0; - - wm_event_add(win, &dropevt); - } - } break; } diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index ee18a0fb45b..3da621bda85 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -56,9 +56,6 @@ /* only use if you want user option switch possible */ #define ACTIONMOUSE 0x005 #define SELECTMOUSE 0x006 - /* drag & drop support */ -#define MOUSEDRAG 0x007 -#define MOUSEDROP 0x008 /* defaults from ghost */ #define WHEELUPMOUSE 0x00a #define WHEELDOWNMOUSE 0x00b From 992382ddb3ddd3d225b74bf931fe734ad82ba2fb Mon Sep 17 00:00:00 2001 From: William Reynish Date: Wed, 29 Jul 2009 20:56:22 +0000 Subject: [PATCH 459/512] Even more metaball layout changes. Added icons in menu, moved type setting at top of panel. Need to make the size widgets only show the relevant options. --- release/ui/buttons_data_metaball.py | 14 +++++++------- source/blender/makesrna/intern/rna_meta.c | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py index b2e2728afe5..009a13df0b7 100644 --- a/release/ui/buttons_data_metaball.py +++ b/release/ui/buttons_data_metaball.py @@ -51,7 +51,7 @@ class DATA_PT_metaball(DataButtonsPanel): layout.itemR(mball, "flag", expand=True) class DATA_PT_metaball_element(DataButtonsPanel): - __label__ = "Meta Element" + __label__ = "Active Element" def poll(self, context): return (context.meta_ball and context.meta_ball.last_selected_element) @@ -61,6 +61,10 @@ class DATA_PT_metaball_element(DataButtonsPanel): metaelem = context.meta_ball.last_selected_element + split = layout.split(percentage=0.3) + split.itemL(text="Type:") + split.itemR(metaelem, "type", text="") + split = layout.split() col = split.column() @@ -70,13 +74,9 @@ class DATA_PT_metaball_element(DataButtonsPanel): col = split.column() col.itemL(text="Settings:") col.itemR(metaelem, "stiffness", text="Stiffness") + col.itemR(metaelem, "negative", text="Negative") + col.itemR(metaelem, "hide", text="Hide") - layout.itemL(text="Type:") - layout.itemR(metaelem, "type", expand=True) - - flow = layout.column_flow() - flow.itemR(metaelem, "negative", text="Negative") - flow.itemR(metaelem, "hide", text="Hide") bpy.types.register(DATA_PT_context_metaball) bpy.types.register(DATA_PT_metaball) diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index 279e1e084b0..257b10d8408 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -64,11 +64,11 @@ void rna_def_metaelement(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; static EnumPropertyItem prop_type_items[] = { - {MB_BALL, "BALL", 0, "Ball", ""}, - {MB_TUBE, "TUBE", 0, "Tube", ""}, - {MB_PLANE, "PLANE", 0, "Plane", ""}, - {MB_ELIPSOID, "ELLIPSOID", 0, "Ellipsoid", ""}, // NOTE: typo at original definition! - {MB_CUBE, "CUBE", 0, "Cube", ""}, + {MB_BALL, "BALL", ICON_META_BALL, "Ball", ""}, + {MB_TUBE, "TUBE", ICON_META_TUBE, "Tube", ""}, + {MB_PLANE, "PLANE", ICON_META_PLANE, "Plane", ""}, + {MB_ELIPSOID, "ELLIPSOID", ICON_META_ELLIPSOID, "Ellipsoid", ""}, // NOTE: typo at original definition! + {MB_CUBE, "CUBE", ICON_META_CUBE, "Cube", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "MetaElement", NULL); From 80015c886791c3a89dba8b37a0fc6a97cbd3f87c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 29 Jul 2009 21:35:03 +0000 Subject: [PATCH 460/512] 2.5: File Browser on Unix * Attempt to better filter file systems, it displayed all kinds of devices which are not interesting to the user. The trick used is now to use mounts starting with "/dev". * Add / at the end to properly highlight directories in the list. * Fix for non-linux unixes, this now falls back to showing / again. --- source/blender/editors/space_file/fsmenu.c | 30 ++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 41d97e1e0ae..73233431fd8 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -307,8 +307,6 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) char dir[FILE_MAXDIR]; char *home= BLI_gethome(); - // fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, "/", 1, 0); - if(home) { BLI_snprintf(dir, FILE_MAXDIR, "%s/", home); fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); @@ -317,30 +315,42 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) } { + int found= 0; +#ifdef __linux__ /* loop over mount points */ struct mntent *mnt; FILE *fp; + int len; + fp = setmntent (MOUNTED, "r"); if (fp == NULL) { fprintf(stderr, "could not get a list of mounted filesystemts\n"); } else { while ((mnt = getmntent (fp))) { - /* printf("%s %s %s %s %s %s\n", mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts, mnt->mnt_freq, mnt->mnt_passno); */ - - /* probably need to add more here */ - if( (strcmp (mnt->mnt_fsname, "none")==0) || /* /sys, /dev/pts */ - (strcmp (mnt->mnt_type, "ramfs")==0) /* /dev */ - ) { + /* not sure if this is right, but seems to give the relevant mnts */ + if(strncmp(mnt->mnt_fsname, "/dev", 4)) continue; - } - fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, mnt->mnt_dir, 1, 0); + len= strlen(mnt->mnt_dir); + if(len && mnt->mnt_dir[len-1] != '/') { + BLI_snprintf(dir, FILE_MAXDIR, "%s/", mnt->mnt_dir); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, dir, 1, 0); + } + else + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, mnt->mnt_dir, 1, 0); + + found= 1; } if (endmntent (fp) == 0) { fprintf(stderr, "could not close the list of mounted filesystemts\n"); } } +#endif + + /* fallback */ + if(!found) + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, "/", 1, 0); } } #endif From 2df1eeba0e212fe551f2e4cbfe222bd36026670f Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Wed, 29 Jul 2009 22:37:33 +0000 Subject: [PATCH 461/512] Only show ~/Desktop/ if really exists. --- source/blender/editors/space_file/fsmenu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 73233431fd8..b45b57c6be9 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -311,7 +311,9 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) BLI_snprintf(dir, FILE_MAXDIR, "%s/", home); fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); BLI_snprintf(dir, FILE_MAXDIR, "%s/Desktop/", home); - fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); + if (BLI_exists(dir)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, dir, 1, 0); + } } { From 408ba429e6aa392f769aac4a442a7a06c1740326 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 29 Jul 2009 22:57:53 +0000 Subject: [PATCH 462/512] 2.5: Buttons View * When resizing the window, the top position is now preserved, instead of the center position. * Fix zoom level not being preserved in various cases, when changing both with and height. This replaces some earlier code which did this at screen level but wasn't very reliable. * Different tabs now each preserve their own scroll. * When switching between tabs, it now scrolls to show as many buttons as possible, instead of possibly showing empty space. There is a trade-off here between doing that keeping the buttons in the same place, no ideal solution exists I think. * Change zooming in/out to be symmetric, for example doing numpad + then - did not give the original zoom level back. * Added some calls to avoid hanging tooltips when manipulating the view. Internals: * Added V2D_KEEPOFS_X and V2D_KEEPOFS_Y to keep the top/bottom rather than the center. * Renamed V2D_KEEPZOOM to V2D_LIMITZOOM (seems more appropriate), and make V2D_KEEPZOOM preserve the zoom level. --- source/blender/blenkernel/intern/screen.c | 13 +- source/blender/blenloader/intern/readfile.c | 11 +- source/blender/editors/include/ED_screen.h | 2 +- source/blender/editors/include/UI_view2d.h | 5 + source/blender/editors/interface/view2d.c | 131 +++++++++++++++--- source/blender/editors/interface/view2d_ops.c | 52 +++++-- source/blender/editors/screen/area.c | 27 ++-- source/blender/editors/screen/screen_edit.c | 28 ---- .../editors/space_buttons/space_buttons.c | 22 +-- .../editors/space_console/space_console.c | 4 +- .../blender/editors/space_file/space_file.c | 4 +- .../blender/editors/space_graph/space_graph.c | 2 +- .../blender/editors/space_image/space_image.c | 2 +- .../blender/editors/space_info/space_info.c | 2 +- .../blender/editors/space_logic/space_logic.c | 4 +- source/blender/editors/space_nla/space_nla.c | 2 +- .../blender/editors/space_node/space_node.c | 2 +- .../editors/space_outliner/space_outliner.c | 2 +- .../editors/space_sequencer/space_sequencer.c | 2 +- .../blender/editors/space_text/space_text.c | 2 +- .../editors/space_view3d/space_view3d.c | 4 +- source/blender/makesdna/DNA_view2d_types.h | 12 +- 22 files changed, 229 insertions(+), 106 deletions(-) diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index c1f621274c0..cc740d7fb3d 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -179,6 +179,9 @@ ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar) else newar->regiondata= MEM_dupallocN(ar->regiondata); } + + if(ar->v2d.tab_offset) + newar->v2d.tab_offset= MEM_dupallocN(ar->v2d.tab_offset); newar->panels.first= newar->panels.last= NULL; BLI_duplicatelist(&newar->panels, &ar->panels); @@ -271,10 +274,14 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar) } else if(ar->type && ar->type->free) ar->type->free(ar); - - if(ar) { - BLI_freelistN(&ar->panels); + + if(ar->v2d.tab_offset) { + MEM_freeN(ar->v2d.tab_offset); + ar->v2d.tab_offset= NULL; } + + if(ar) + BLI_freelistN(&ar->panels); } /* not area itself */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index bdb98a8ae72..3029e482312 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4681,6 +4681,9 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype) } } + ar->v2d.tab_offset= NULL; + ar->v2d.tab_num= 0; + ar->v2d.tab_cur= 0; ar->handlers.first= ar->handlers.last= NULL; ar->uiblocks.first= ar->uiblocks.last= NULL; ar->headerstr= NULL; @@ -5654,7 +5657,7 @@ static void area_add_header_region(ScrArea *sa, ListBase *lb) /* initialise view2d data for header region, to allow panning */ /* is copy from ui_view2d.c */ - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); ar->v2d.keepofs = V2D_LOCKOFS_Y; ar->v2d.keeptot = V2D_KEEPTOT_STRICT; ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; @@ -5847,7 +5850,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) memcpy(&ar->v2d, &snode->v2d, sizeof(View2D)); ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT; + ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; break; } case SPACE_BUTS: @@ -5868,7 +5871,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) ar->regiontype= RGN_TYPE_WINDOW; ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); break; } case SPACE_TEXT: @@ -8199,7 +8202,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) simasel->v2d.minzoom= 0.5f; simasel->v2d.maxzoom= 1.21f; simasel->v2d.scroll= 0; - simasel->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT; + simasel->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; simasel->v2d.keeptot= 0; simasel->prv_h = 96; simasel->prv_w = 96; diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index d2e058f9f6d..fc29d64eb37 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -55,7 +55,7 @@ void ED_region_init(struct bContext *C, struct ARegion *ar); void ED_region_tag_redraw(struct ARegion *ar); void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct); void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar); -void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context); +void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context, int contextnr); void ED_region_header_init(struct ARegion *ar); void ED_region_header(const struct bContext *C, struct ARegion *ar); diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index e3fbd906cf6..38c4d82e6da 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -145,10 +145,15 @@ typedef struct View2DScrollers View2DScrollers; void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy); void UI_view2d_curRect_validate(struct View2D *v2d); +void UI_view2d_curRect_validate_resize(struct View2D *v2d, int resize); void UI_view2d_curRect_reset(struct View2D *v2d); void UI_view2d_sync(struct bScreen *screen, struct ScrArea *sa, struct View2D *v2dcur, int flag); void UI_view2d_totRect_set(struct View2D *v2d, int width, int height); +void UI_view2d_totRect_set_resize(struct View2D *v2d, int width, int height, int resize); + +/* per tab offsets, returns 1 if tab changed */ +int UI_view2d_tab_set(struct View2D *v2d, int tab); /* view matrix operations */ void UI_view2d_view_ortho(const struct bContext *C, struct View2D *v2d); diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index c76110ac440..f9fb7a9306f 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -154,13 +154,15 @@ static void view2d_masks(View2D *v2d) */ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) { - short tot_changed= 0; + short tot_changed= 0, init= 0; uiStyle *style= U.uistyles.first; /* initialise data if there is a need for such */ if ((v2d->flag & V2D_IS_INITIALISED) == 0) { /* set initialised flag so that View2D doesn't get reinitialised next time again */ v2d->flag |= V2D_IS_INITIALISED; + + init= 1; /* see eView2D_CommonViewTypes in UI_view2d.h for available view presets */ switch (type) { @@ -170,7 +172,7 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) case V2D_COMMONVIEW_STANDARD: { /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ - v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM); + v2d->keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM); v2d->minzoom= 0.01f; v2d->maxzoom= 1000.0f; @@ -197,7 +199,7 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) case V2D_COMMONVIEW_LIST: { /* zoom + aspect ratio are locked */ - v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); v2d->minzoom= v2d->maxzoom= 1.0f; /* tot rect has strictly regulated placement, and must only occur in +/- quadrant */ @@ -214,7 +216,7 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) case V2D_COMMONVIEW_STACK: { /* zoom + aspect ratio are locked */ - v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); v2d->minzoom= v2d->maxzoom= 1.0f; /* tot rect has strictly regulated placement, and must only occur in +/+ quadrant */ @@ -230,7 +232,7 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) case V2D_COMMONVIEW_HEADER: { /* zoom + aspect ratio are locked */ - v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); v2d->minzoom= v2d->maxzoom= 1.0f; v2d->min[0]= v2d->max[0]= (float)(winx-1); v2d->min[1]= v2d->max[1]= (float)(winy-1); @@ -257,9 +259,10 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) float panelzoom= (style) ? style->panelzoom : 1.0f; /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ - v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM); + v2d->keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM|V2D_KEEPZOOM); v2d->minzoom= 0.5f; v2d->maxzoom= 2.0f; + //tot_changed= 1; v2d->align= (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); v2d->keeptot= V2D_KEEPTOT_BOUNDS; @@ -298,17 +301,16 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* set 'tot' rect before setting cur? */ if (tot_changed) - UI_view2d_totRect_set(v2d, winx, winy); + UI_view2d_totRect_set_resize(v2d, winx, winy, !init); else - UI_view2d_curRect_validate(v2d); - + UI_view2d_curRect_validate_resize(v2d, !init); } /* Ensure View2D rects remain in a viable configuration * - cur is not allowed to be: larger than max, smaller than min, or outside of tot */ // XXX pre2.5 -> this used to be called test_view2d() -void UI_view2d_curRect_validate(View2D *v2d) +void UI_view2d_curRect_validate_resize(View2D *v2d, int resize) { float totwidth, totheight, curwidth, curheight, width, height; float winx, winy; @@ -351,10 +353,30 @@ void UI_view2d_curRect_validate(View2D *v2d) if(winx<1) winx= 1; if(winy<1) winy= 1; - /* keepzoom (V2D_KEEPZOOM set), indicates that zoom level on each axis must not exceed limits + /* V2D_LIMITZOOM indicates that zoom level should be preserved when the window size changes */ + if (resize && (v2d->keepzoom & V2D_KEEPZOOM)) { + float zoom, oldzoom; + + if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) { + zoom= winx / width; + oldzoom= v2d->oldwinx / curwidth; + + if(oldzoom != zoom) + width *= zoom/oldzoom; + } + + if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) { + zoom= winy / height; + oldzoom= v2d->oldwiny / curheight; + + if(oldzoom != zoom) + height *= zoom/oldzoom; + } + } + /* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits * NOTE: in general, it is not expected that the lock-zoom will be used in conjunction with this */ - if (v2d->keepzoom & V2D_KEEPZOOM) { + else if (v2d->keepzoom & V2D_LIMITZOOM) { float zoom, fac; /* check if excessive zoom on x-axis */ @@ -460,11 +482,17 @@ void UI_view2d_curRect_validate(View2D *v2d) if ((width != curwidth) || (height != curheight)) { float temp, dh; - /* resize from centerpoint */ + /* resize from centerpoint, unless otherwise specified */ if (width != curwidth) { if (v2d->keepofs & V2D_LOCKOFS_X) { cur->xmax += width - (cur->xmax - cur->xmin); } + else if (v2d->keepofs & V2D_KEEPOFS_X) { + if(v2d->align & V2D_ALIGN_NO_POS_X) + cur->xmin -= width - (cur->xmax - cur->xmin); + else + cur->xmax += width - (cur->xmax - cur->xmin); + } else { temp= (cur->xmax + cur->xmin) * 0.5f; dh= width * 0.5f; @@ -477,6 +505,12 @@ void UI_view2d_curRect_validate(View2D *v2d) if (v2d->keepofs & V2D_LOCKOFS_Y) { cur->ymax += height - (cur->ymax - cur->ymin); } + else if (v2d->keepofs & V2D_KEEPOFS_Y) { + if(v2d->align & V2D_ALIGN_NO_POS_Y) + cur->ymin -= height - (cur->ymax - cur->ymin); + else + cur->ymax += height - (cur->ymax - cur->ymin); + } else { temp= (cur->ymax + cur->ymin) * 0.5f; dh= height * 0.5f; @@ -496,7 +530,7 @@ void UI_view2d_curRect_validate(View2D *v2d) curheight= cur->ymax - cur->ymin; /* width */ - if ( (curwidth > totwidth) && !(v2d->keepzoom & (V2D_KEEPZOOM|V2D_LOCKZOOM_X)) ) { + if ( (curwidth > totwidth) && !(v2d->keepzoom & (V2D_KEEPZOOM|V2D_LOCKZOOM_X|V2D_LIMITZOOM)) ) { /* if zoom doesn't have to be maintained, just clamp edges */ if (cur->xmin < tot->xmin) cur->xmin= tot->xmin; if (cur->xmax > tot->xmax) cur->xmax= tot->xmax; @@ -542,13 +576,13 @@ void UI_view2d_curRect_validate(View2D *v2d) * We favour moving the 'minimum' across, as that's origin for most things * (XXX - in the past, max was favoured... if there are bugs, swap!) */ - if ((cur->ymin < tot->ymin) && (cur->ymax > tot->ymax)) { + if ((cur->xmin < tot->xmin) && (cur->xmax > tot->xmax)) { /* outside boundaries on both sides, so take middle-point of tot, and place in balanced way */ - temp= (tot->ymax + tot->ymin) * 0.5f; + temp= (tot->xmax + tot->xmin) * 0.5f; diff= curheight * 0.5f; - cur->ymin= temp - diff; - cur->ymax= temp + diff; + cur->xmin= temp - diff; + cur->xmax= temp + diff; } else if (cur->xmin < tot->xmin) { /* move cur across so that it sits at minimum of tot */ @@ -579,7 +613,7 @@ void UI_view2d_curRect_validate(View2D *v2d) } /* height */ - if ( (curheight > totheight) && !(v2d->keepzoom & (V2D_KEEPZOOM|V2D_LOCKZOOM_Y)) ) { + if ( (curheight > totheight) && !(v2d->keepzoom & (V2D_KEEPZOOM|V2D_LOCKZOOM_Y|V2D_LIMITZOOM)) ) { /* if zoom doesn't have to be maintained, just clamp edges */ if (cur->ymin < tot->ymin) cur->ymin= tot->ymin; if (cur->ymax > tot->ymax) cur->ymax= tot->ymax; @@ -664,6 +698,11 @@ void UI_view2d_curRect_validate(View2D *v2d) view2d_masks(v2d); } +void UI_view2d_curRect_validate(View2D *v2d) +{ + return UI_view2d_curRect_validate_resize(v2d, 0); +} + /* ------------------ */ /* Called by menus to activate it, or by view2d operators to make sure 'related' views stay in synchrony */ @@ -783,7 +822,7 @@ void UI_view2d_curRect_reset (View2D *v2d) /* ------------------ */ /* Change the size of the maximum viewable area (i.e. 'tot' rect) */ -void UI_view2d_totRect_set (View2D *v2d, int width, int height) +void UI_view2d_totRect_set_resize (View2D *v2d, int width, int height, int resize) { int scroll= view2d_scroll_mapped(v2d->scroll); @@ -841,7 +880,57 @@ void UI_view2d_totRect_set (View2D *v2d, int width, int height) } /* make sure that 'cur' rect is in a valid state as a result of these changes */ - UI_view2d_curRect_validate(v2d); + UI_view2d_curRect_validate_resize(v2d, resize); +} + +void UI_view2d_totRect_set(View2D *v2d, int width, int height) +{ + UI_view2d_totRect_set_resize(v2d, width, height, 0); +} + +int UI_view2d_tab_set(View2D *v2d, int tab) +{ + float default_offset[2]= {0.0f, 0.0f}; + float *offset, *new_offset; + int changed= 0; + + /* if tab changed, change offset */ + if(tab != v2d->tab_cur && v2d->tab_offset) { + if(tab < v2d->tab_num) + offset= &v2d->tab_offset[tab*2]; + else + offset= default_offset; + + v2d->cur.xmax += offset[0] - v2d->cur.xmin; + v2d->cur.xmin= offset[0]; + + v2d->cur.ymin += offset[1] - v2d->cur.ymax; + v2d->cur.ymax= offset[1]; + + /* validation should happen in subsequent totRect_set */ + + changed= 1; + } + + /* resize array if needed */ + if(tab >= v2d->tab_num) { + new_offset= MEM_callocN(sizeof(float)*(tab+1)*2, "view2d tab offset"); + + if(v2d->tab_offset) { + memcpy(new_offset, v2d->tab_offset, sizeof(float)*v2d->tab_num*2); + MEM_freeN(v2d->tab_offset); + } + + v2d->tab_offset= new_offset; + v2d->tab_num= tab+1; + } + + /* set current tab and offset */ + v2d->tab_cur= tab; + v2d->tab_offset[2*tab+0]= v2d->cur.xmin; + v2d->tab_offset[2*tab+1]= v2d->cur.ymax; + + return changed; } /* *********************************************************************** */ diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index ee2a50d12a9..1e8cda68e6d 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -151,6 +151,7 @@ static void view_pan_apply(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(vpd->sa); UI_view2d_sync(vpd->sc, vpd->sa, v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); /* exceptions */ if(vpd->sa->spacetype==SPACE_OUTLINER) { @@ -493,17 +494,33 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op) { ARegion *ar= CTX_wm_region(C); View2D *v2d= &ar->v2d; - float dx, dy; - - /* calculate amount to move view by */ - dx= (v2d->cur.xmax - v2d->cur.xmin) * (float)RNA_float_get(op->ptr, "zoomfacx"); - dy= (v2d->cur.ymax - v2d->cur.ymin) * (float)RNA_float_get(op->ptr, "zoomfacy"); + float dx, dy, facx, facy; + /* calculate amount to move view by, ensuring symmetry so the + * old zoom level is restored after zooming back the same amount */ + facx= RNA_float_get(op->ptr, "zoomfacx"); + facy= RNA_float_get(op->ptr, "zoomfacy"); + + if(facx >= 0.0f) { + dx= (v2d->cur.xmax - v2d->cur.xmin) * facx; + dy= (v2d->cur.ymax - v2d->cur.ymin) * facy; + } + else { + dx= ((v2d->cur.xmax - v2d->cur.xmin)/(1.0f + 2.0f*facx)) * facx; + dy= ((v2d->cur.ymax - v2d->cur.ymin)/(1.0f + 2.0f*facy)) * facy; + } + /* only resize view on an axis if change is allowed */ if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) { if (v2d->keepofs & V2D_LOCKOFS_X) { v2d->cur.xmax -= 2*dx; } + else if (v2d->keepofs & V2D_KEEPOFS_X) { + if(v2d->align & V2D_ALIGN_NO_POS_X) + v2d->cur.xmin += 2*dx; + else + v2d->cur.xmax -= 2*dx; + } else { v2d->cur.xmin += dx; v2d->cur.xmax -= dx; @@ -513,18 +530,25 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op) if (v2d->keepofs & V2D_LOCKOFS_Y) { v2d->cur.ymax -= 2*dy; } + else if (v2d->keepofs & V2D_KEEPOFS_Y) { + if(v2d->align & V2D_ALIGN_NO_POS_Y) + v2d->cur.ymin += 2*dy; + else + v2d->cur.ymax -= 2*dy; + } else { v2d->cur.ymin += dy; v2d->cur.ymax -= dy; } } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); - + /* request updates to be done... */ ED_area_tag_redraw(CTX_wm_area(C)); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); } /* --------------- Individual Operators ------------------- */ @@ -681,6 +705,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(CTX_wm_area(C)); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); } /* cleanup temp customdata */ @@ -922,6 +947,7 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(CTX_wm_area(C)); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); return OPERATOR_FINISHED; } @@ -1162,6 +1188,7 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(CTX_wm_area(C)); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); } /* handle user input for scrollers - calculations of mouse-movement need to be done here, not in the apply callback! */ @@ -1301,20 +1328,20 @@ static int reset_exec(bContext *C, wmOperator *op) /* posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) { v2d->cur.xmax= 0.0f; - v2d->cur.xmin= v2d->winx*style->panelzoom; + v2d->cur.xmin= -winx*style->panelzoom; } else if ((v2d->align & V2D_ALIGN_NO_NEG_X) && !(v2d->align & V2D_ALIGN_NO_POS_X)) { - v2d->cur.xmax= (v2d->cur.xmax - v2d->cur.xmin)*style->panelzoom; + v2d->cur.xmax= winx*style->panelzoom; v2d->cur.xmin= 0.0f; } /* - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) { v2d->cur.ymax= 0.0f; - v2d->cur.ymin= -v2d->winy*style->panelzoom; + v2d->cur.ymin= -winy*style->panelzoom; } else if ((v2d->align & V2D_ALIGN_NO_NEG_Y) && !(v2d->align & V2D_ALIGN_NO_POS_Y)) { - v2d->cur.ymax= (v2d->cur.ymax - v2d->cur.ymin)*style->panelzoom; + v2d->cur.ymax= winy*style->panelzoom; v2d->cur.ymin= 0.0f; } } @@ -1325,6 +1352,7 @@ static int reset_exec(bContext *C, wmOperator *op) /* request updates to be done... */ ED_area_tag_redraw(CTX_wm_area(C)); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); + WM_event_add_mousemove(C); return OPERATOR_FINISHED; } @@ -1340,7 +1368,7 @@ void VIEW2D_OT_reset(wmOperatorType *ot) ot->poll= view2d_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + // ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } /* ********************************************************* */ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index c74a5ca9c87..79ba11a5c55 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1132,7 +1132,7 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) /************************ standard UI regions ************************/ -void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *context) +void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *context, int contextnr) { ScrArea *sa= CTX_wm_area(C); uiStyle *style= U.uistyles.first; @@ -1142,7 +1142,10 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex View2D *v2d= &ar->v2d; View2DScrollers *scrollers; float col[3]; - int xco, yco, x, y, miny=0, w, em, header, triangle, open; + int xco, yco, x, y, miny=0, w, em, header, triangle, open, newcontext= 0; + + if(contextnr >= 0) + newcontext= UI_view2d_tab_set(v2d, contextnr); if(vertical) { w= v2d->cur.xmax - v2d->cur.xmin; @@ -1242,23 +1245,27 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex /* before setting the view */ if(vertical) { - v2d->keepofs |= V2D_LOCKOFS_X; - v2d->keepofs &= ~V2D_LOCKOFS_Y; + v2d->keepofs |= V2D_LOCKOFS_X|V2D_KEEPOFS_Y; + v2d->keepofs &= ~(V2D_LOCKOFS_Y|V2D_KEEPOFS_X); // don't jump back when panels close or hide - y= MAX2(-y, -v2d->cur.ymin); + if(!newcontext) + y= MAX2(-y, -v2d->cur.ymin); + else + y= -y; } else { - v2d->keepofs &= ~V2D_LOCKOFS_X; - v2d->keepofs |= V2D_LOCKOFS_Y; + v2d->keepofs |= V2D_LOCKOFS_Y|V2D_KEEPOFS_X; + v2d->keepofs &= ~(V2D_LOCKOFS_X|V2D_KEEPOFS_Y); // don't jump back when panels close or hide - x= MAX2(x, v2d->cur.xmax); + if(!newcontext) + x= MAX2(x, v2d->cur.xmax); y= -y; } // +V2D_SCROLL_HEIGHT is workaround to set the actual height - UI_view2d_totRect_set(v2d, x, y+V2D_SCROLL_HEIGHT); + UI_view2d_totRect_set(v2d, x+V2D_SCROLL_WIDTH, y+V2D_SCROLL_HEIGHT); /* set the view */ UI_view2d_view_ortho(C, v2d); @@ -1282,6 +1289,8 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) // XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file) // scrollbars for button regions ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + ar->v2d.keepzoom |= V2D_KEEPZOOM; + // correctly initialised User-Prefs? if(!(ar->v2d.align & V2D_ALIGN_NO_POS_Y)) ar->v2d.flag &= ~V2D_IS_INITIALISED; diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index dd6bb09c1e4..817959aef13 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -603,21 +603,6 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge) } } -/* helper call for below, correct buttons view */ -static void screen_test_scale_region(ListBase *regionbase, float facx, float facy) -{ - ARegion *ar; - - for(ar= regionbase->first; ar; ar= ar->next) { - if(ar->regiontype==RGN_TYPE_WINDOW) { - ar->v2d.cur.xmin *= facx; - ar->v2d.cur.xmax *= facx; - ar->v2d.cur.ymin *= facy; - ar->v2d.cur.ymax *= facy; - } - } -} - /* test if screen vertices should be scaled */ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) { @@ -668,19 +653,6 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) CLAMP(sv->vec.y, 0, winsizey); } - - /* keep buttons view2d same size */ - for(sa= sc->areabase.first; sa; sa= sa->next) { - SpaceLink *sl; - - if(sa->spacetype==SPACE_BUTS) - screen_test_scale_region(&sa->regionbase, facx, facy); - - for(sl= sa->spacedata.first; sl; sl= sl->next) - if(sl->spacetype==SPACE_BUTS) - screen_test_scale_region(&sl->regionbase, facx, facy); - } - } /* test for collapsed areas. This could happen in some blender version... */ diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 0f57152cef6..71f8642afd4 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -155,27 +155,27 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar) buttons_context_compute(C, sbuts); if(sbuts->mainb == BCONTEXT_SCENE) - ED_region_panels(C, ar, vertical, "scene"); + ED_region_panels(C, ar, vertical, "scene", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_WORLD) - ED_region_panels(C, ar, vertical, "world"); + ED_region_panels(C, ar, vertical, "world", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_OBJECT) - ED_region_panels(C, ar, vertical, "object"); + ED_region_panels(C, ar, vertical, "object", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_DATA) - ED_region_panels(C, ar, vertical, "data"); + ED_region_panels(C, ar, vertical, "data", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_MATERIAL) - ED_region_panels(C, ar, vertical, "material"); + ED_region_panels(C, ar, vertical, "material", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_TEXTURE) - ED_region_panels(C, ar, vertical, "texture"); + ED_region_panels(C, ar, vertical, "texture", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_PARTICLE) - ED_region_panels(C, ar, vertical, "particle"); + ED_region_panels(C, ar, vertical, "particle", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_PHYSICS) - ED_region_panels(C, ar, vertical, "physics"); + ED_region_panels(C, ar, vertical, "physics", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_BONE) - ED_region_panels(C, ar, vertical, "bone"); + ED_region_panels(C, ar, vertical, "bone", sbuts->mainb); else if(sbuts->mainb == BCONTEXT_MODIFIER) - ED_region_panels(C, ar, vertical, "modifier"); + ED_region_panels(C, ar, vertical, "modifier", sbuts->mainb); else if (sbuts->mainb == BCONTEXT_CONSTRAINT) - ED_region_panels(C, ar, vertical, "constraint"); + ED_region_panels(C, ar, vertical, "constraint", sbuts->mainb); sbuts->re_align= 0; sbuts->mainbo= sbuts->mainb; diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 408d0410067..e406cc5a561 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -100,12 +100,12 @@ static SpaceLink *console_new(const bContext *C) ar->v2d.scroll |= (V2D_SCROLL_RIGHT); ar->v2d.align |= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */ ar->v2d.keepofs |= V2D_LOCKOFS_X; - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS; ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ - //ar->v2d.keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM); + //ar->v2d.keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM); return (SpaceLink *)sconsole; } diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index aa879820cff..ea640eab090 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -106,7 +106,7 @@ static SpaceLink *file_new(const bContext *C) ar->regiontype= RGN_TYPE_WINDOW; ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM); ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); ar->v2d.keeptot= V2D_KEEPTOT_STRICT; ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; @@ -418,7 +418,7 @@ static void file_channel_area_init(wmWindowManager *wm, ARegion *ar) static void file_channel_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void file_channel_area_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 31daee2187e..222f2142c38 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -362,7 +362,7 @@ static void graph_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void graph_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void graph_region_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index aaea875a005..1506df89c45 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -487,7 +487,7 @@ static void image_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void image_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void image_buttons_area_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 60d8b17668e..fe5bbf04af1 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -120,7 +120,7 @@ static void info_main_area_init(wmWindowManager *wm, ARegion *ar) static void info_main_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } void info_operatortypes(void) diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index 9f458bd8129..703b408aae6 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -142,7 +142,7 @@ static SpaceLink *logic_new(const bContext *C) ar->v2d.maxzoom= 1.21f; ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT; + ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; ar->v2d.keeptot= 0; @@ -279,7 +279,7 @@ static void logic_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void logic_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } /************************* header region **************************/ diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 09ca1d6ee19..6f377aabd4e 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -364,7 +364,7 @@ static void nla_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void nla_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void nla_region_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 773c61f14d6..25e1b368ccb 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -118,7 +118,7 @@ static SpaceLink *node_new(const bContext *C) ar->v2d.maxzoom= 1.21f; ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); - ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT; + ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT; ar->v2d.keeptot= 0; return (SpaceLink *)snode; diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 4737fb53a1a..f57445a32f1 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -218,7 +218,7 @@ static SpaceLink *outliner_new(const bContext *C) ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O); ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); - ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); + ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT); ar->v2d.keeptot= V2D_KEEPTOT_STRICT; ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f; diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index c7c92b71861..084416f3a60 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -234,7 +234,7 @@ static void sequencer_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void sequencer_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void sequencer_buttons_area_listener(ARegion *ar, wmNotifier *wmn) diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index c260fe05093..a9c0d3ff76b 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -372,7 +372,7 @@ static void text_properties_area_init(wmWindowManager *wm, ARegion *ar) static void text_properties_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } /********************* registration ********************/ diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index fa6bbb476da..e1f0b537241 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -538,7 +538,7 @@ static void view3d_buttons_area_init(wmWindowManager *wm, ARegion *ar) static void view3d_buttons_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, NULL); + ED_region_panels(C, ar, 1, NULL, -1); } static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) @@ -595,7 +595,7 @@ static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar) static void view3d_tools_area_draw(const bContext *C, ARegion *ar) { - ED_region_panels(C, ar, 1, view3d_context_string(C)); + ED_region_panels(C, ar, 1, view3d_context_string(C), -1); } static int view3d_context(const bContext *C, const char *member, bContextDataResult *result) diff --git a/source/blender/makesdna/DNA_view2d_types.h b/source/blender/makesdna/DNA_view2d_types.h index dd73d691b62..bc019ef8121 100644 --- a/source/blender/makesdna/DNA_view2d_types.h +++ b/source/blender/makesdna/DNA_view2d_types.h @@ -59,15 +59,21 @@ typedef struct View2D { short around; /* pivot point for transforms (rotate and scale) */ float cursor[2]; /* only used in the UV view for now (for 2D-cursor) */ + + float *tab_offset; /* different offset per tab, for buttons */ + int tab_num; /* number of tabs stored */ + int tab_cur; /* current tab */ } View2D; /* ---------------------------------- */ /* view zooming restrictions, per axis (v2d->keepzoom) */ /* zoom is clamped to lie within limits set by minzoom and maxzoom */ -#define V2D_KEEPZOOM 0x0001 +#define V2D_LIMITZOOM 0x0001 /* aspect ratio is maintained on view resize */ #define V2D_KEEPASPECT 0x0002 + /* zoom is kept when the window resizes */ +#define V2D_KEEPZOOM 0x0004 /* zooming on x-axis is not allowed */ #define V2D_LOCKZOOM_X 0x0100 /* zooming on y-axis is not allowed */ @@ -78,6 +84,10 @@ typedef struct View2D { #define V2D_LOCKOFS_X (1<<1) /* panning on y-axis is not allowed */ #define V2D_LOCKOFS_Y (1<<2) + /* on resize, keep the x offset */ +#define V2D_KEEPOFS_X (1<<3) + /* on resize, keep the y offset */ +#define V2D_KEEPOFS_Y (1<<4) /* view extent restrictions (v2d->keeptot) */ /* 'cur' view can be out of extents of 'tot' */ From 239b78c6377c41ba49e36a1dbd3cede6a3347f64 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 29 Jul 2009 23:12:30 +0000 Subject: [PATCH 463/512] - include operator commands in tooltips (needs sanitizing for transform operators, there are massive :|) - WM_operator_pystring can now be used with an operator type and properties (rather then a wmOperator instance) - removed menus from file selector --- release/ui/space_filebrowser.py | 32 +++---------------- .../editors/interface/interface_regions.c | 15 +++++++++ source/blender/editors/space_file/file_draw.c | 5 +-- source/blender/editors/space_file/file_ops.c | 1 + source/blender/windowmanager/WM_api.h | 2 +- source/blender/windowmanager/intern/wm.c | 2 +- .../windowmanager/intern/wm_event_system.c | 2 +- .../windowmanager/intern/wm_operators.c | 16 ++++++---- 8 files changed, 36 insertions(+), 39 deletions(-) diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py index 2d35616069c..0fecbdbfbba 100644 --- a/release/ui/space_filebrowser.py +++ b/release/ui/space_filebrowser.py @@ -11,18 +11,16 @@ class FILEBROWSER_HT_header(bpy.types.Header): params = st.params layout.template_header() - - if context.area.show_menus: - row = layout.row() - row.itemM("FILEBROWSER_MT_directory") - row.itemM("FILEBROWSER_MT_bookmarks") - + row = layout.row(align=True) row.itemO("file.parent", text="", icon='ICON_FILE_PARENT') row.itemO("file.refresh", text="", icon='ICON_FILE_REFRESH') row.itemO("file.previous", text="", icon='ICON_PREV_KEYFRAME') row.itemO("file.next", text="", icon='ICON_NEXT_KEYFRAME') + row = layout.row(align=True) + row.itemO("file.directory_new", text="", icon='ICON_NEWFOLDER') + layout.itemR(params, "display", expand=True, text="") layout.itemR(params, "sort", expand=True, text="") @@ -41,27 +39,5 @@ class FILEBROWSER_HT_header(bpy.types.Header): row.active = params.do_filter -class FILEBROWSER_MT_directory(bpy.types.Menu): - __space_type__ = "FILE_BROWSER" - __label__ = "Directory" - - def draw(self, context): - layout = self.layout - - layout.itemO("file.directory_new", text="New Directory", icon='ICON_NEWFOLDER') - layout.itemO("file.refresh", text="Refresh", icon='ICON_FILE_REFRESH') - layout.itemO("file.parent", text="Parent", icon='ICON_FILE_PARENT') - -class FILEBROWSER_MT_bookmarks(bpy.types.Menu): - __space_type__ = "FILE_BROWSER" - __label__ = "Bookmarks" - - def draw(self, context): - layout = self.layout - - layout.itemO("file.add_bookmark", text="Add current directory", icon='ICON_BOOKMARKS') - bpy.types.register(FILEBROWSER_HT_header) -bpy.types.register(FILEBROWSER_MT_directory) -bpy.types.register(FILEBROWSER_MT_bookmarks) diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 7cce7a0bbed..94442c5de22 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -391,6 +391,21 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) data->linedark[data->totline]= 1; data->totline++; } + else if (but->optype) { + PointerRNA *opptr; + char *str; + opptr= uiButGetOperatorPtrRNA(but); + + str= WM_operator_pystring(but->optype, opptr); + + /* operator info */ + BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s", str); + data->linedark[data->totline]= 1; + data->totline++; + + WM_operator_properties_free(opptr); + MEM_freeN(str); + } if(data->totline == 0) { MEM_freeN(data); diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index e807bad28bf..933b9cc69ad 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -81,6 +81,7 @@ /* ui geometry */ #define IMASEL_BUTTONS_HEIGHT 40 +#define IMASEL_BUTTONS_MARGIN 6 #define TILE_BORDER_X 8 #define TILE_BORDER_Y 8 @@ -134,8 +135,8 @@ void file_draw_buttons(const bContext *C, ARegion *ar) /* Button layout. */ const short min_x = 10; const short max_x = ar->winx - 10; - const short line2_y = ar->winy - IMASEL_BUTTONS_HEIGHT - 12; - const short line1_y = line2_y + IMASEL_BUTTONS_HEIGHT/2 + 4; + const short line2_y = IMASEL_BUTTONS_HEIGHT/2 + IMASEL_BUTTONS_MARGIN*2; + const short line1_y = IMASEL_BUTTONS_MARGIN; const short input_minw = 20; const short btn_h = UI_UNIT_Y; const short btn_fn_w = UI_UNIT_X; diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index a217dbe9f57..9c73956d375 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -716,6 +716,7 @@ void FILE_OT_directory_new(struct wmOperatorType *ot) /* identifiers */ ot->name= "Create New Directory"; ot->idname= "FILE_OT_directory_new"; + ot->description= "Create a new directory"; /* api callbacks */ ot->invoke= WM_operator_confirm; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index f65e5b1b077..3670f1a613f 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -172,7 +172,7 @@ void WM_operator_properties_free(struct PointerRNA *ptr); void WM_operator_properties_filesel(struct wmOperatorType *ot, int filter); /* operator as a python command (resultuing string must be free'd) */ -char *WM_operator_pystring(struct wmOperator *op); +char *WM_operator_pystring(struct wmOperatorType *ot, struct PointerRNA *opptr); void WM_operator_bl_idname(char *to, const char *from); void WM_operator_py_idname(char *to, const char *from); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index c0ac7b06f5a..46cf13f7d75 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -103,7 +103,7 @@ void wm_operator_register(bContext *C, wmOperator *op) /* Report the string representation of the operator */ - buf = WM_operator_pystring(op); + buf = WM_operator_pystring(op->type, op->ptr); BKE_report(CTX_wm_reports(C), RPT_OPERATOR, buf); MEM_freeN(buf); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 3f668b23b24..86de5498ce9 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -362,7 +362,7 @@ static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, P static void wm_operator_print(wmOperator *op) { - char *buf = WM_operator_pystring(op); + char *buf = WM_operator_pystring(op->type, op->ptr); printf("%s\n", buf); MEM_freeN(buf); } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 2b7a18dc1cf..d0d50810fdc 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -340,8 +340,12 @@ void WM_operator_bl_idname(char *to, const char *from) } /* print a string representation of the operator, with the args that it runs - * so python can run it again */ -char *WM_operator_pystring(wmOperator *op) + * so python can run it again, + * + * When calling from an existing wmOperator do. + * WM_operator_pystring(op->type, op->ptr); + */ +char *WM_operator_pystring(wmOperatorType *ot, PointerRNA *opptr) { const char *arg_name= NULL; char idname_py[OP_MAX_TYPENAME]; @@ -353,18 +357,18 @@ char *WM_operator_pystring(wmOperator *op) char *cstring, *buf; int first_iter=1; - WM_operator_py_idname(idname_py, op->idname); + WM_operator_py_idname(idname_py, ot->idname); BLI_dynstr_appendf(dynstr, "bpy.ops.%s(", idname_py); - iterprop= RNA_struct_iterator_property(op->ptr->type); + iterprop= RNA_struct_iterator_property(opptr->type); - RNA_PROP_BEGIN(op->ptr, propptr, iterprop) { + RNA_PROP_BEGIN(opptr, propptr, iterprop) { prop= propptr.data; arg_name= RNA_property_identifier(prop); if (strcmp(arg_name, "rna_type")==0) continue; - buf= RNA_property_as_string(op->ptr, prop); + buf= RNA_property_as_string(opptr, prop); BLI_dynstr_appendf(dynstr, first_iter?"%s=%s":", %s=%s", arg_name, buf); From e5a668ea9b099198fd7bafae46924f8d0e61f55e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 29 Jul 2009 23:18:18 +0000 Subject: [PATCH 464/512] error in last comit --- source/blender/editors/interface/interface_regions.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 94442c5de22..a6822618f0f 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -394,7 +394,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) else if (but->optype) { PointerRNA *opptr; char *str; - opptr= uiButGetOperatorPtrRNA(but); + opptr= uiButGetOperatorPtrRNA(but); /* allocated when needed, the button owns it */ str= WM_operator_pystring(but->optype, opptr); @@ -403,7 +403,6 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) data->linedark[data->totline]= 1; data->totline++; - WM_operator_properties_free(opptr); MEM_freeN(str); } From 589623356441a988107614b4d922d481797612d5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 29 Jul 2009 23:21:57 +0000 Subject: [PATCH 465/512] 2.5: update .B.blend, to have 1:1 zoom levels for the buttons. --- source/blender/editors/datafiles/B.blend.c | 5743 +++++++++----------- 1 file changed, 2689 insertions(+), 3054 deletions(-) diff --git a/source/blender/editors/datafiles/B.blend.c b/source/blender/editors/datafiles/B.blend.c index 1a77d99ef2f..980a9ee1697 100644 --- a/source/blender/editors/datafiles/B.blend.c +++ b/source/blender/editors/datafiles/B.blend.c @@ -1,695 +1,264 @@ /* DataToC output of file */ -int datatoc_B_blend_size= 106008; +int datatoc_B_blend_size= 94308; char datatoc_B_blend[]= { - 66, 76, 69, 78, 68, 69, 82, 95,118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0, 64,245, 34, 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, 71, 76, 79, 66, 32, 0, 0, 0,208,244, 34, 0,186, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 48, - 0, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,144,247, 75, 1, 8,120, 76, 1, 0, 16, 0, 0,128, 32, 4, 0, 87, 77, 0, 0, -140, 0, 0, 0, 8,246, 75, 1, 76, 1, 0, 0, 1, 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, 1, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,246, 75, 1,200,246, 75, 1,200,246, 75, 1,200,246, 75, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 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,184,144, 73, 1, 0,116, 74, 1, 68, 65, 84, 65, -148, 0, 0, 0,200,246, 75, 1, 77, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,243, 75, 1, 1, 0, 0, 0, - 0, 0, 0, 0,144,247, 75, 1, 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,252,255, 23, 0,128, 7,157, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, - 0, 0, 0, 0, 48,201, 73, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,176,159, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 74,156, 3,208, 73,156, 3,208,171, 73, 1, 40,117, 73, 1,224, 89, 74, 1, 96,120, 74, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0,144,247, 75, 1,178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,101,101,110, 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, 80,248, 75, 1,248,251, 75, 1, 64,252, 75, 1, 8, 1, 76, 1, 80, 1, 76, 1, -248,105, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8,120, 76, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 80,248, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,152,248, 75, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,248, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, -224,248, 75, 1, 80,248, 75, 1, 0, 0, 0, 0, 0, 0,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,224,248, 75, 1, -179, 0, 0, 0, 1, 0, 0, 0, 40,249, 75, 1,152,248, 75, 1, 0, 0, 0, 0,128, 7,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 20, 0, 0, 0, 40,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,112,249, 75, 1,224,248, 75, 1, 0, 0, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,184,249, 75, 1, 40,249, 75, 1, - 0, 0, 0, 0, 0, 0,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,184,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, - 0,250, 75, 1,112,249, 75, 1, 0, 0, 0, 0,128, 7,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 0,250, 75, 1, -179, 0, 0, 0, 1, 0, 0, 0, 72,250, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 20, 0, 0, 0, 72,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,144,250, 75, 1, 0,250, 75, 1, 0, 0, 0, 0,128, 7, 80, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,216,250, 75, 1, 72,250, 75, 1, - 0, 0, 0, 0, 20, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,216,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, - 32,251, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 20, 6,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 32,251, 75, 1, -179, 0, 0, 0, 1, 0, 0, 0,104,251, 75, 1,216,250, 75, 1, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 20, 0, 0, 0,104,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,176,251, 75, 1, 32,251, 75, 1, 0, 0, 0, 0, 20, 6,100, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,248,251, 75, 1,104,251, 75, 1, - 0, 0, 0, 0, 20, 6,124, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,248,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0,176,251, 75, 1, 0, 0, 0, 0,128, 7,124, 3, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 64,252, 75, 1, -180, 0, 0, 0, 1, 0, 0, 0,136,252, 75, 1, 0, 0, 0, 0,152,248, 75, 1,224,248, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 24, 0, 0, 0,136,252, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,208,252, 75, 1, 64,252, 75, 1,152,248, 75, 1, -112,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208,252, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, - 24,253, 75, 1,136,252, 75, 1,224,248, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, - 24,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 96,253, 75, 1,208,252, 75, 1,112,249, 75, 1,184,249, 75, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,168,253, 75, 1, 24,253, 75, 1, - 80,248, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,253, 75, 1,180, 0, 0, 0, - 1, 0, 0, 0,240,253, 75, 1, 96,253, 75, 1, 40,249, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 24, 0, 0, 0,240,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 56,254, 75, 1,168,253, 75, 1,112,249, 75, 1,216,250, 75, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56,254, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,128,254, 75, 1, -240,253, 75, 1,184,249, 75, 1,216,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128,254, 75, 1, -180, 0, 0, 0, 1, 0, 0, 0,200,254, 75, 1, 56,254, 75, 1, 80,248, 75, 1, 32,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 24, 0, 0, 0,200,254, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 16,255, 75, 1,128,254, 75, 1,112,249, 75, 1, - 32,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, - 88,255, 75, 1,200,254, 75, 1,216,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, - 88,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,160,255, 75, 1, 16,255, 75, 1,144,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,232,255, 75, 1, 88,255, 75, 1, - 32,251, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,232,255, 75, 1,180, 0, 0, 0, - 1, 0, 0, 0, 48, 0, 76, 1,160,255, 75, 1,144,250, 75, 1,176,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 24, 0, 0, 0, 48, 0, 76, 1,180, 0, 0, 0, 1, 0, 0, 0,120, 0, 76, 1,232,255, 75, 1,216,250, 75, 1,176,251, 75, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120, 0, 76, 1,180, 0, 0, 0, 1, 0, 0, 0,192, 0, 76, 1, - 48, 0, 76, 1,184,249, 75, 1,248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192, 0, 76, 1, -180, 0, 0, 0, 1, 0, 0, 0, 8, 1, 76, 1,120, 0, 76, 1, 40,249, 75, 1,248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 24, 0, 0, 0, 8, 1, 76, 1,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,192, 0, 76, 1,176,251, 75, 1, -248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 80, 1, 76, 1,184, 0, 0, 0, 1, 0, 0, 0, - 48, 4, 76, 1, 0, 0, 0, 0,112,249, 75, 1,152,248, 75, 1,224,248, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0,131, 4, 0, 0,157, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 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,248,193, 65, 1,168,119, 76, 1,168,119, 76, 1,240, 1, 76, 1, 16, 3, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0,152,171, 77, 1,216,170, 77, 1, 68, 65, 84, 65,236, 0, 0, 0,240, 1, 76, 1,185, 0, 0, 0, - 1, 0, 0, 0, 16, 3, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,103, 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,128,237, 68, - 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, - 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,131, 4, 0, 0, -156, 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, 0, 0, 0, 0, 0, 0, 32,195, 65, 1,224, 91,165, 3,224, 91,165, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 72,189,163, 3,248, 92, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 16, 3, 76, 1,185, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,240, 1, 76, 1, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,110, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, - 6, 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,157, 4, 0, 0, -157, 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, 1, 0, 0, 0, 0, 0, 0, 0,144,194, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 48, 4, 76, 1,184, 0, 0, 0, - 1, 0, 0, 0,168, 80, 76, 1, 80, 1, 76, 1,144,250, 75, 1,176,251, 75, 1,248,251, 75, 1, 40,249, 75, 1, 0, 0, 0, 0, - 21, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,123, 3, 0, 0, 4, 4,108, 1,124, 3, 1, 0, 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,191, 65, 1, 40, 73, 76, 1,136, 79, 76, 1,208, 4, 76, 1, -240, 5, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,168,115, 73, 1,208, 93, 74, 1, 68, 65, 84, 65,236, 0, 0, 0,208, 4, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0,240, 5, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,182, 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,107, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,108, 1, 26, 0,108, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0,128, 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,108, 1, 26, 0, 3, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,193, 65, 1, 80,195,156, 3, 80,195,156, 3, 0, 0, 0, 0, - 0, 0, 0, 0,128, 95, 74, 1,112, 96, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,240, 5, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 4, 76, 1, 0, 0, 0, 0, 0,128,142, 67, 0, 64,112,196, 0, 0, 0, 0, - 0, 0, 0, 0,210,113,151, 67,236, 12, 57,196,168, 20,236,181, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0, 97, 3, 0, 0, - 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0, 97, 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, 3, 0, - 2, 0, 0, 4, 6, 0,108, 1, 98, 3, 91, 1, 80, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0,128, 7, 0, 0, - 26, 0, 0, 0,123, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1, 98, 3, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,192, 65, 1,160, 57,155, 3,240, 44,164, 3, 16, 7, 76, 1, -192, 71, 76, 1, 56, 98, 74, 1, 40, 99, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 7, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,120, 8, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,255, 71, 1,176, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 9, 76, 1, 16, 7, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 71, 1,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,224, 9, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, - 72, 11, 76, 1,120, 8, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 71, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 72, 11, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,176, 12, 76, 1,224, 9, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,253, - 71, 1, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 12, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 24, 14, 76, 1, 72, 11, 76, 1, - 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,252, 71, 1,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 14, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0,128, 15, 76, 1,176, 12, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,251, 71, 1,212, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 15, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,232, 16, 76, 1, 24, 14, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 76,101,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, 0, - 76,101,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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81,255, 74, 1,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 80, 18, 76, 1, -128, 15, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,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, 68,105,115,112,108, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 74, 1,107, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 80, 18, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,184, 19, 76, 1,232, 16, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,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, 80,114,101,118,105,101,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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,255, 74, 1,136, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 19, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 32, 21, 76, 1, 80, 18, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 74, 1, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 32, 21, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, -136, 22, 76, 1,184, 19, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,254, 74, 1,180, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -136, 22, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,240, 23, 76, 1, 32, 21, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77,105,115,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, 77,105,115,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,253, - 74, 1,107, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 23, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 88, 25, 76, 1,136, 22, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,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, 83,116, 97,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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 74, 1, 60, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 88, 25, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0,192, 26, 76, 1,240, 23, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99, -116,105,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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99, -116,105,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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 74, 1, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,192, 26, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 40, 28, 76, 1, 88, 25, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1,149, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 40, 28, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,144, 29, 76, 1, -192, 26, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,111,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, 83,104, 97,100,111,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 74, 1,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,144, 29, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,248, 30, 76, 1, 40, 28, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83,117,114,102, 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, 0, 0, 83,117,114,102, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,255, 74, 1, 83, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 68, 65, 84, 65, 56, 1, 0, 0,248, 30, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 96, 32, 76, 1,144, 29, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 74, 1, 36, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 96, 32, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, -200, 33, 76, 1,248, 30, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1, 96, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, -200, 33, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 48, 35, 76, 1, 96, 32, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, - 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 48, 35, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,152, 36, 76, 1,200, 33, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,254, 74, 1, 36, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,152, 36, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0, 0, 38, 76, 1, 48, 35, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 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,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,253, 74, 1,146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 38, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,104, 39, 76, 1,152, 36, 76, 1,168,192, 65, 1, 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, 46, 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, 68, 65, 84, 65, 56, 1, 0, 0,104, 39, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,208, 40, 76, 1, - 0, 38, 76, 1, 16,176,159, 3, 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, 46, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,208, 40, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0, 56, 42, 76, 1,104, 39, 76, 1,120,158,159, 3, 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,189,254, 46, 1,178, 0, - 0, 0, 0, 0, 0, 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, - 68, 65, 84, 65, 56, 1, 0, 0, 56, 42, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,160, 43, 76, 1,208, 40, 76, 1, 32,160,159, 3, - 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,107,254, 46, 1, 58, 0, 24, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 43, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, - 8, 45, 76, 1, 56, 42, 76, 1,200,161,159, 3, 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, 83,254, 46, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 8, 45, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,112, 46, 76, 1,160, 43, 76, 1, 40, 18,156, 3, 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,213,253, - 46, 1,102, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112, 46, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,216, 47, 76, 1, 8, 45, 76, 1, -208, 19,156, 3, 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,106,253, 46, 1, 83, 0, 0, 0, 0, 0, 4, 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, 68, 65, 84, 65, 56, 1, 0, 0,216, 47, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0, 64, 49, 76, 1,112, 46, 76, 1,120, 21,156, 3, 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, 42,253, 46, 1,123, 0, 0, 0, 0, 0, - 4, 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, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0, 64, 49, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,168, 50, 76, 1,216, 47, 76, 1,184,224,159, 3, 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, 33,253, 46, 1,108, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,168, 50, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 16, 52, 76, 1, - 64, 49, 76, 1, 8,228,159, 3, 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, 50,252, 46, 1,215, 0, 24, 0, 0, 0, 0, 0, 7, 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, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 52, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,120, 53, 76, 1,168, 50, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, - 99,111,110,116,101,120,116, 95,108, 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, 68, 65, 84, 65, 95, 80, 84, 95, - 99,111,110,116,101,120,116, 95,108, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 46, 1, 36, 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, - 68, 65, 84, 65, 56, 1, 0, 0,120, 53, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 54, 76, 1, 16, 52, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,112,114,101,118,105,101,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, 68, 65, 84, 65, 95, 80, 84, 95,112,114,101,118,105,101,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, 80,114,101,118,105,101,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, 24,255, 46, 1,136, 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, 68, 65, 84, 65, 56, 1, 0, 0,224, 54, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, - 72, 56, 76, 1,120, 53, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 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,107,254, 46, 1,149, 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, 68, 65, 84, 65, 56, 1, 0, 0, - 72, 56, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,176, 57, 76, 1,224, 54, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 95, 80, 84, 95,115,104, 97,100,111,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, 68, 65, 84, 65, - 95, 80, 84, 95,115,104, 97,100,111,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, 83,104, 97,100, -111,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, 0,160,253, - 46, 1,179, 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, 68, 65, 84, 65, 56, 1, 0, 0,176, 57, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 24, 59, 76, 1, 72, 56, 76, 1, - 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, 46, 1, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 59, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0,128, 60, 76, 1,176, 57, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 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, 68, 65, 84, 65, 95, 80, 84, 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, 77,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, 66,255, 46, 1, 94, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128, 60, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,232, 61, 76, 1, 24, 59, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95,109, 97,116,101,114,105, 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, - 68, 65, 84, 65, 95, 80, 84, 95,109, 97,116,101,114,105, 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, - 77, 97,116,101,114,105, 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, 0, 0, - 0, 0,172,254, 46, 1,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 61, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 80, 63, 76, 1, -128, 60, 76, 1, 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, 0, 0, 0, 0, 0, 0, 22,254, 46, 1,126, 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, 68, 65, 84, 65, 56, 1, 0, 0, 80, 63, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,184, 64, 76, 1,232, 61, 76, 1, 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, 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,128,253, 46, 1,126, 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, - 68, 65, 84, 65, 56, 1, 0, 0,184, 64, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 32, 66, 76, 1, 80, 63, 76, 1, 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, 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,234,252, 46, 1,126, 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, 68, 65, 84, 65, 56, 1, 0, 0, 32, 66, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, -136, 67, 76, 1,184, 64, 76, 1, 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, 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, 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, 84,252, 46, 1,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, -136, 67, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,240, 68, 76, 1, 32, 66, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 95, 80, 84, 95, 99, 97,109,101,114, 97,100,105,115,112,108, 97,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, 68, 65, 84, 65, - 95, 80, 84, 95, 99, 97,109,101,114, 97,100,105,115,112,108, 97,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, 68,105,115,112, -108, 97,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,180,255, - 46, 1, 16, 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, 68, 65, 84, 65, 56, 1, 0, 0,240, 68, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 88, 70, 76, 1,136, 67, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95, 99, 97,109,101,114, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 99, 97,109,101,114, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 46, 1, 36, 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, 68, 65, 84, 65, 56, 1, 0, 0, 88, 70, 76, 1,181, 0, 0, 0, - 1, 0, 0, 0,192, 71, 76, 1,240, 68, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101, -114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 97,109,101, -114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,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, 0, 0, 0,178,254, 46, 1,198, 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, 68, 65, 84, 65, - 56, 1, 0, 0,192, 71, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88, 70, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101,114, 97, 95,100,105,115,112,108, 97,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, - 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101,114, 97, 95,100,105,115,112,108, 97,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, - 68,105,115,112,108, 97,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, 52,254, 46, 1,102, 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, 68, 65, 84, 65,232, 0, 0, 0, 40, 73, 76, 1,151, 0, 0, 0, 1, 0, 0, 0,136, 79, 76, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 0, 0, 0, 0, 40,164,155, 3,255, 20, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 64, 74, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 96, 75, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65,236, 0, 0, 0, 96, 75, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 74, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, -128, 76, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,128, 76, 76, 1,145, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,136, 79, 76, 1,146, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 40, 73, 76, 1, 64, 74, 76, 1, 96, 75, 76, 1, 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, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, - 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, 68, 65, 84, 65,112, 0, 0, 0,168, 80, 76, 1, -184, 0, 0, 0, 1, 0, 0, 0,200, 90, 76, 1, 48, 4, 76, 1, 80,248, 75, 1, 32,251, 75, 1,104,251, 75, 1,144,250, 75, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 20, 6,100, 0, 1, 0, 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,170, 65, 1,136, 83, 76, 1,168, 89, 76, 1, - 72, 81, 76, 1,104, 82, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,160, 99, 74, 1, 96,100, 74, 1, 68, 65, 84, 65,236, 0, 0, 0, - 72, 81, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,104, 82, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,118, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,128,194, 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, 19, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 6, 26, 0, 20, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 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, 20, 6, 26, 0, - 5, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,171, 65, 1,248, 79,158, 3,248, 79,158, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 16,102, 74, 1,136,102, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, -104, 82, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72, 81, 76, 1, 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, 19, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 18, 0, 0, 0, - 73, 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, 20, 6, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 6, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 74, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,171, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,104, 74, 1, 48,106, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, -136, 83, 76, 1,161, 0, 0, 0, 1, 0, 0, 0,168, 89, 76, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 96, 84, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0,128, 85, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 6, 26, 0, 0, 0, 1, 0, + 66, 76, 69, 78, + 68, 69, 82, 45,118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0, 80,187,118,198,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, + 71, 76, 79, 66, 40, 0, 0, 0, 64,187,118,198,255,127, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 48, 0, 0, 0, 0, +250, 0, 0, 0, 1, 0, 0, 1,208,233, 90, 2, 0, 0, 0, 0, 96,130, 91, 2, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, + 87, 77, 0, 0,224, 0, 0, 0,144,231, 90, 2, 0, 0, 0, 0, 75, 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, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,232, 90, 2, 0, 0, 0, 0,176,232, 90, 2, 0, 0, 0, 0,176,232, 90, 2, 0, 0, 0, 0,176,232, 90, 2, 0, 0, 0, 0, + 3, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,128, 85, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 84, 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,144,131,100, 2, 0, 0, 0, 0,176,167,177, 2, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, +176,232, 90, 2, 0, 0, 0, 0, 76, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,186, 91, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208,233, 90, 2, 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, + 5, 0, 30, 0,118, 7, 97, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0,131,100, 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,240, 14,119, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,224,180, 2, 0, 0, 0, 0,224,224,180, 2, 0, 0, 0, 0, + 64,132,100, 2, 0, 0, 0, 0,176,133,100, 2, 0, 0, 0, 0,112,134,100, 2, 0, 0, 0, 0,144,191,100, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,208,233, 90, 2, 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, 83, 82, 83, 99,114,101,101,110, 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,224,234, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 32,240, 90, 2, 0, 0, 0, 0,144,247, 90, 2, 0, 0, 0, 0, 0,248, 90, 2, 0, 0, 0, 0,160,111, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,130, 91, 2, 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, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,149,150, 0, 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, +224,234, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 64,235, 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, 68, 65, 84, 65, 32, 0, 0, 0, 64,235, 90, 2, 0, 0, 0, 0, +180, 0, 0, 0, 1, 0, 0, 0,160,235, 90, 2, 0, 0, 0, 0,224,234, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,235, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, + 0,236, 90, 2, 0, 0, 0, 0, 64,235, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 0,236, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, +160,235, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 96,236, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, 0,236, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, +180, 0, 0, 0, 1, 0, 0, 0, 32,237, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,237, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, +128,237, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,128,237, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, + 32,237, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 80, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +224,237, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0,128,237, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, +180, 0, 0, 0, 1, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12, 6, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, + 0,239, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0, +160,238, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 96,239, 90, 2, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 80, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, +180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118, 7, 80, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,240, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +144,240, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,235, 90, 2, 0, 0, 0, 0,160,235, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,240, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 0,241, 90, 2, 0, 0, 0, 0, 32,240, 90, 2, 0, 0, 0, 0, 64,235, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,241, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +112,241, 90, 2, 0, 0, 0, 0,144,240, 90, 2, 0, 0, 0, 0,160,235, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,241, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +224,241, 90, 2, 0, 0, 0, 0, 0,241, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,241, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 80,242, 90, 2, 0, 0, 0, 0,112,241, 90, 2, 0, 0, 0, 0,224,234, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,242, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +192,242, 90, 2, 0, 0, 0, 0,224,241, 90, 2, 0, 0, 0, 0, 0,236, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,242, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 48,243, 90, 2, 0, 0, 0, 0, 80,242, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,243, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +160,243, 90, 2, 0, 0, 0, 0,192,242, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,243, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 16,244, 90, 2, 0, 0, 0, 0, 48,243, 90, 2, 0, 0, 0, 0,224,234, 90, 2, 0, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,244, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +128,244, 90, 2, 0, 0, 0, 0,160,243, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,244, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +240,244, 90, 2, 0, 0, 0, 0, 16,244, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,244, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 96,245, 90, 2, 0, 0, 0, 0,128,244, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,245, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +208,245, 90, 2, 0, 0, 0, 0,240,244, 90, 2, 0, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,245, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 64,246, 90, 2, 0, 0, 0, 0, 96,245, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,246, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +176,246, 90, 2, 0, 0, 0, 0,208,245, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,246, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 32,247, 90, 2, 0, 0, 0, 0, 64,246, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,247, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, +144,247, 90, 2, 0, 0, 0, 0,176,246, 90, 2, 0, 0, 0, 0, 0,236, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,247, 90, 2, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,247, 90, 2, 0, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0,248, 90, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, +192,251, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, 64,235, 90, 2, 0, 0, 0, 0, +160,235, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, + 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,112,153, 76, 2, 0, 0, 0, 0, +208,129, 91, 2, 0, 0, 0, 0,208,129, 91, 2, 0, 0, 0, 0,224,248, 90, 2, 0, 0, 0, 0, 80,250, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 78,100, 2, 0, 0, 0, 0, 64,153,118, 2, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,224,248, 90, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 80,250, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,106, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 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,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, + 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, + 26, 0,119, 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, 0, 0, 0, 0, + 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +119, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,155, 76, 2, 0, 0, 0, 0, + 96,164,100, 2, 0, 0, 0, 0, 96,164,100, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208,138,100, 2, 0, 0, 0, 0, 64,140,100, 2, 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, 80,250, 90, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,248, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 6, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 97, 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, 1, 0, 0, 0, 0, 0, 0, 0, 96,154, 76, 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, + 68, 65, 84, 65,160, 0, 0, 0,192,251, 90, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,176, 81, 91, 2, 0, 0, 0, 0, + 0,248, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, 96,239, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 0,236, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, + 4, 4,106, 1, 80, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,149, 76, 2, 0, 0, 0, 0,240, 72, 91, 2, 0, 0, 0, 0, + 80, 80, 91, 2, 0, 0, 0, 0,160,252, 90, 2, 0, 0, 0, 0, 16,254, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160,158,118, 2, 0, 0, 0, 0, 96,169,118, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +160,252, 90, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 16,254, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,193, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,181, 67, 0, 0, 0, 0, 0, 0,248, 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,105, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,106, 1, 31, 0,106, 1, 31, 0, 0, 0, + 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, 6, 0, 0,118, 7, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106, 1, 31, 0, 3, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,152, 76, 2, 0, 0, 0, 0,112,176,178, 2, 0, 0, 0, 0, +112,176,178, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,143,100, 2, 0, 0, 0, 0, + 32,146,100, 2, 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, + 16,254, 90, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,252, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,172, 67, 0,192, 71,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,172, 67, 0,192, 71,196, 0, 0, 0, 0, + 89, 1, 0, 0,106, 1, 0, 0, 18, 0, 0, 0, 48, 3, 0, 0, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 88, 1, 0, 0, 18, 0, 0, 0, 48, 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, 4, 6, 0,106, 1, 49, 3, 89, 1, 31, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 90,119, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,118, 7, 0, 0, + 31, 0, 0, 0, 79, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106, 1, 49, 3, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,150, 76, 2, 0, 0, 0, 0,176,210,178, 2, 0, 0, 0, 0, + 96, 53,180, 2, 0, 0, 0, 0,128,255, 90, 2, 0, 0, 0, 0, 96, 55,180, 2, 0, 0, 0, 0, 80,148,100, 2, 0, 0, 0, 0, +240,151,100, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, +240, 72, 91, 2, 0, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0, 80, 80, 91, 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, 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, 2, 0, 1, 0, 0, 0, 0, 0,128,236,177, 2, 0, 0, 0, 0, +255, 20, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 74, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0,160, 75, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 75, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 74, 91, 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, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 16, 77, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 16, 77, 91, 2, 0, 0, 0, 0, +146, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, +226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, + 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, +184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80, 80, 91, 2, 0, 0, 0, 0,147, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 72, 91, 2, 0, 0, 0, 0, 48, 74, 91, 2, 0, 0, 0, 0,160, 75, 91, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 64,153, 91, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 0, 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, 68, 65, 84, 65,160, 0, 0, 0, +176, 81, 91, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 94, 91, 2, 0, 0, 0, 0,192,251, 90, 2, 0, 0, 0, 0, +224,234, 90, 2, 0, 0, 0, 0,160,238, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0,224,237, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 6, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 12, 6,100, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,118, 76, 2, 0, 0, 0, 0,112, 85, 91, 2, 0, 0, 0, 0,160, 92, 91, 2, 0, 0, 0, 0, +144, 82, 91, 2, 0, 0, 0, 0, 0, 84, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,174,118, 2, 0, 0, 0, 0,176,185,118, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 82, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 84, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,104, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,193, 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, 11, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 12, 6, 26, 0, 12, 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, 0, 0, 0, 0, 0, 0, 0, 0, 11, 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, 12, 6, 26, 0, 5, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,120, 76, 2, 0, 0, 0, 0,208,218,179, 2, 0, 0, 0, 0,208,218,179, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,155,100, 2, 0, 0, 0, 0, 96,156,100, 2, 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, 0, 84, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 82, 91, 2, 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, 11, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 11, 6, 0, 0, + 18, 0, 0, 0, 73, 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, 12, 6, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 74, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,119, 76, 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,144,158,100, 2, 0, 0, 0, 0,160,163,100, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,112, 85, 91, 2, 0, 0, 0, 0, +162, 0, 0, 0, 1, 0, 0, 0,160, 92, 91, 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, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 86, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0,240, 87, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, - 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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,160, 86, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,160, 86, 76, 1, -145, 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, 87,213,108, 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, 68, 65, 84, 65, 40, 1, 0, 0,240, 87, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 86, 91, 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, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 89, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 96, 89, 91, 2, 0, 0, 0, 0, +146, 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, 87,213,108, 66, 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,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 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, @@ -712,536 +281,571 @@ char datatoc_B_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, - 68, 65, 84, 65,240, 0, 0, 0,168, 89, 76, 1,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136, 83, 76, 1, 96, 84, 76, 1, -128, 85, 76, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, - 0, 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, 68, 65, 84, 65,112, 0, 0, 0,200, 90, 76, 1,184, 0, 0, 0, 1, 0, 0, 0,248,105, 76, 1,168, 80, 76, 1, - 32,251, 75, 1,112,249, 75, 1,216,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0,101, 0, 0, 0, -129, 4, 0, 0, 1, 1, 20, 6, 29, 4, 1, 0, 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,172, 65, 1,216,104, 76, 1,216,104, 76, 1,104, 91, 76, 1,176,100, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, -248,171, 77, 1,104,107, 74, 1, 68, 65, 84, 65,236, 0, 0, 0,104, 91, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,136, 92, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,194, 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, 19, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 6, 26, 0, 20, 6, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 26, 0, 7, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,178, 65, 1,120, 81,158, 3,120, 81,158, 3, 0, 0, 0, 0, 0, 0, 0, 0,120,109, 74, 1,224,110, 74, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,136, 92, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,176,100, 76, 1, -104, 91, 76, 1, 0, 0, 0, 0, 0, 0, 92, 67, 0, 64, 55,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0, 41,196, + 68, 65, 84, 65, 32, 1, 0, 0,160, 92, 91, 2, 0, 0, 0, 0,147, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112, 85, 91, 2, 0, 0, 0, 0,128, 86, 91, 2, 0, 0, 0, 0,240, 87, 91, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 64,153, 91, 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,219, 0, 0, 0, 0, 0, 0, 0,163, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 0,164, 2,220, 0, -164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 19, 6, 0, 0,127, 0, 0, 0,129, 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, 1, 0, 0, 0, - 0, 0, 0, 0,152,173, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0,168, 93, 76, 1, 72, 99, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,168, 93, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 16, 95, 76, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,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, 84,114, 97,110,115,102,111,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,220, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 16, 95, 76, 1, -181, 0, 0, 0, 1, 0, 0, 0,120, 96, 76, 1,168, 93, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 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, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,220, 0, 29, 1, - 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, - 68, 65, 84, 65, 56, 1, 0, 0,120, 96, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 97, 76, 1, 16, 95, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,169,253,220, 0, 36, 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, 68, 65, 84, 65, 56, 1, 0, 0,224, 97, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, - 72, 99, 76, 1,120, 96, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, - 97,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, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, - 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,220, 0, 66, 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, 68, 65, 84, 65, 56, 1, 0, 0, - 72, 99, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224, 97, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,115,116, - 32, 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, 76, 97,115,116, - 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,253, -220, 0, 16, 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, 68, 65, 84, 65,236, 0, 0, 0,176,100, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136, 92, 76, 1, + 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, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 0, 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, 68, 65, 84, 65,160, 0, 0, 0, + 0, 94, 91, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,160,111, 91, 2, 0, 0, 0, 0,176, 81, 91, 2, 0, 0, 0, 0, +160,238, 90, 2, 0, 0, 0, 0, 96,236, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0, 0,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 6, 0, 0,101, 0, 0, 0, 69, 4, 0, 0, 1, 1, 12, 6,225, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192,121, 76, 2, 0, 0, 0, 0, 64,110, 91, 2, 0, 0, 0, 0, 64,110, 91, 2, 0, 0, 0, 0, +224, 94, 91, 2, 0, 0, 0, 0,144,105, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,188,118, 2, 0, 0, 0, 0,224,204,118, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 94, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 80, 96, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,193, 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, 11, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 12, 6, 26, 0, 12, 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, 0, 0, 0, 0, 0, 0, 0, 0, 11, 6, 0, 0,101, 0, 0, 0,126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 26, 0, 7, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112,130, 76, 2, 0, 0, 0, 0,128, 47,182, 2, 0, 0, 0, 0,128, 47,182, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,167,100, 2, 0, 0, 0, 0,192,170,100, 2, 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, 80, 96, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0,144,105, 91, 2, 0, 0, 0, 0,224, 94, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, + 0, 64, 55,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0, 41,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, + 0, 0, 0, 0,163, 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, + 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 0,164, 2,220, 0,164, 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, 11, 6, 0, 0, 11, 6, 0, 0,127, 0, 0, 0, 69, 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, + 1, 0, 0, 0, 0, 0, 0, 0,160,123, 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 97, 91, 2, 0, 0, 0, 0, 0,104, 91, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,105, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 96, 91, 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, 19, 6, 0, 0,127, 0, 0, 0,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 3, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,173, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,112, 74, 1,136,116, 74, 1, 0, 0, 0, 0, -208,101, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,208,101, 76, 1,145, 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,235, 28,212, 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,238, 4, 53, 63,186,103, 59,190, -247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, -217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,236, 4, 53, 63,244, 4, 53, 63, - 0, 0, 24, 53, 0, 0, 0, 0,137,103, 59,190,118,103, 59, 62,227, 70,119, 63, 0, 0, 0, 0,238,217, 46, 63,221,217, 46,191, -213,131,132, 62, 0, 0, 0, 0,186,213, 60, 65,168,213, 60,193,221, 28,143, 64, 0, 0,128, 63,100,253, 69, 63, 17, 71,155,190, -194,219, 46,191,247,217, 46,191,119,253, 69, 63,224, 70,155, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50,180,226,204, 63, - 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65, 20,129, 37, 63,162,128, 37, 63, - 0, 0,252, 53, 0, 0,160, 52, 47, 45,226,189, 25, 45,226, 61, 74, 56, 21, 63, 0, 0,240, 51, 0,133, 19,196,242,132, 19, 68, - 27,154, 95,195, 81,253, 71,194,205, 90, 19, 68,191, 90, 19,196, 36, 90, 95, 67, 95,255, 71, 66,238, 4, 53, 63,186,103, 59,190, -247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, -217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,100,253, 69, 63, 17, 71,155,190, -194,219, 46,191,247,217, 46,191,119,253, 69, 63,224, 70,155, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50,180,226,204, 63, - 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65, 79,241,194, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,241,194, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,241,194, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,122,163, 59, 63,235,250, 15,191, -221,141,110,190,230,113,155,190,152, 60,138, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 8,154, 58, 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, 11, 6, 0, 0,127, 0, 0, 0, 69, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6,199, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176,122, 76, 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,240,172,100, 2, 0, 0, 0, 0, 96,186,100, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 0,107, 91, 2, 0, 0, 0, 0, +146, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 29,224, 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,238, 4, 53, 63,186,103, 59,190,247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62, +244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63,217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 60,138,193, 0, 0,128, 63,236, 4, 53, 63,244, 4, 53, 63, 0, 0, 24, 53, 0, 0, 0, 0,137,103, 59,190,118,103, 59, 62, +227, 70,119, 63, 0, 0, 0, 0,238,217, 46, 63,221,217, 46,191,213,131,132, 62, 0, 0, 0, 0,186,213, 60, 65,168,213, 60,193, +221, 28,143, 64, 0, 0,128, 63,102,253, 69, 63,120, 16,164,190,194,219, 46,191,247,217, 46,191,120,253, 69, 63, 67, 16,164, 62, +191,219, 46, 63,244,217, 46, 63, 67,228, 68, 50,189,122,216, 63, 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 21,138, 65,152, 60,138, 65, 15,132, 37, 63,166,125, 37, 63, 0, 96,160, 55, 0,128,139, 54, 97, 17,214,189, 77, 17,214, 61, + 92, 58, 13, 63, 0, 0,184,179,168,135, 19,196,155,135, 19, 68, 34,158, 95,195,235, 0, 72,194,116, 93, 19, 68,103, 93, 19,196, + 42, 94, 95, 67,248, 2, 72, 66,238, 4, 53, 63,186,103, 59,190,247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62, +244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63,217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 60,138,193, 0, 0,128, 63,102,253, 69, 63,120, 16,164,190,194,219, 46,191,247,217, 46,191,120,253, 69, 63, 67, 16,164, 62, +191,219, 46, 63,244,217, 46, 63, 67,228, 68, 50,189,122,216, 63, 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 21,138, 65,152, 60,138, 65, 55,243,195, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,243,195, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,243,195, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63,122,163, 59, 63,235,250, 15,191,221,141,110,190,230,113,155,190,152, 60,138, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 21,212,154, 58, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,216,104, 76, 1,146, 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, 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, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0,255,255, 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, 68, 65, 84, 65,112, 0, 0, 0,248,105, 76, 1, -184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,200, 90, 76, 1,176,251, 75, 1,216,250, 75, 1,184,249, 75, 1,248,251, 75, 1, - 0, 0, 0, 0, 21, 6, 0, 0,128, 7, 0, 0,125, 3, 0, 0,129, 4, 0, 0, 3, 3,108, 1, 5, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 65, 1, 8,214, 69, 1,136,118, 76, 1, -152,106, 76, 1,184,107, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 74, 1,192,117, 74, 1, 68, 65, 84, 65,236, 0, 0, 0, -152,106, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,184,107, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,182, 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,107, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,108, 1, 26, 0,108, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0, -128, 7, 0, 0,125, 3, 0, 0,150, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1, 26, 0, - 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,170, 65, 1, 96,225,163, 3, 96,225,163, 3, - 0, 0, 0, 0, 0, 0, 0, 0,112,119, 74, 1,232,119, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, -184,107, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,106, 76, 1, 0, 0, 0, 0, 0,128,131, 67, 0, 0,194,194, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 67, 0, 0, 89,195, 0, 0, 0, 0, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0, -234, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0, -234, 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, 0, 4, 6, 0,108, 1,235, 0, 91, 1,217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0, -128, 7, 0, 0,151, 3, 0, 0,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,235, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,169, 65, 1,200, 71,165, 3,200, 71,165, 3, - 0, 0, 0, 0, 0, 0, 0, 0,176,121, 74, 1,160,122, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, - 8,214, 69, 1,155, 0, 0, 0, 1, 0, 0, 0, 40,112, 76, 1, 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, + 68, 65, 84, 65, 32, 1, 0, 0, 64,110, 91, 2, 0, 0, 0, 0,147, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 64,153, 91, 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, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, +159, 0, 0, 0, 0, 0, 0, 0, 3, 0,255,255, 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, 68, 65, 84, 65,160, 0, 0, 0, +160,111, 91, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 91, 2, 0, 0, 0, 0, + 96,239, 90, 2, 0, 0, 0, 0, 64,238, 90, 2, 0, 0, 0, 0,192,236, 90, 2, 0, 0, 0, 0,192,239, 90, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0,118, 7, 0, 0, 81, 3, 0, 0, 69, 4, 0, 0, 3, 3,106, 1,245, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,116, 76, 2, 0, 0, 0, 0, 96,115, 91, 2, 0, 0, 0, 0,112,128, 91, 2, 0, 0, 0, 0, +128,112, 91, 2, 0, 0, 0, 0,240,113, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96,207,118, 2, 0, 0, 0, 0,144, 82,119, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,112, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0,240,113, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,181, 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,105, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,106, 1, 26, 0,106, 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, 0, 0, 0, 0, 13, 6, 0, 0,118, 7, 0, 0, 81, 3, 0, 0,106, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106, 1, 26, 0, 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 76, 2, 0, 0, 0, 0,128, 5,182, 2, 0, 0, 0, 0,128, 5,182, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,190,100, 2, 0, 0, 0, 0,208,190,100, 2, 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,240,113, 91, 2, 0, 0, 0, 0, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, + 0, 0,194,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,172, 67, 0, 0, 73,195, 0, 0, 0, 0, 89, 1, 0, 0,106, 1, 0, 0, + 18, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 88, 1, 0, 0, + 18, 0, 0, 0,218, 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, 0, 4, 6, 0,106, 1,219, 0, 89, 1,201, 0, 0, 0, 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, 6, 0, 0,118, 7, 0, 0,107, 3, 0, 0, 69, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106, 1,219, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,117, 76, 2, 0, 0, 0, 0,192, 43,182, 2, 0, 0, 0, 0,192, 43,182, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193,100, 2, 0, 0, 0, 0, 48,195,100, 2, 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, 96,115, 91, 2, 0, 0, 0, 0, +156, 0, 0, 0, 1, 0, 0, 0, 16,121, 91, 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, 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,136,162,159, 3, -136,162,159, 3,216,108, 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,224, 8,182, 2, 0, 0, 0, 0, +224, 8,182, 2, 0, 0, 0, 0,208,116, 91, 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, 68, 65, 84, 65, 16, 0, 0, 0,208,116, 91, 2, 0, 0, 0, 0, +207, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 32,117, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, + 32,117, 91, 2, 0, 0, 0, 0,206, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 96,130, 91, 2, 0, 0, 0, 0, + 19, 0, 0, 0, 1, 0, 1, 0, 96,130, 91, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 96,130, 91, 2, 0, 0, 0, 0, + 21, 0, 1, 0, 1, 0, 1, 0, 96,130, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,145, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,176,157, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,128,173, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,128,167, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224,171, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 16,163, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,176,140, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 64,153, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,208,139, 91, 2, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 48,118, 91, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0,160,119, 91, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, + 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, + 26, 0,195, 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, + 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +195, 0, 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, + 68, 65, 84, 65, 40, 1, 0, 0,160,119, 91, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,118, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67, +223,204, 35,196, 26, 85,207,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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0, +156, 0,195, 0,156, 0, 0, 0, 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, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 0, 1, 0, 0, 16,121, 91, 2, 0, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0,112,128, 91, 2, 0, 0, 0, 0, + 96,115, 91, 2, 0, 0, 0, 0, 48,118, 91, 2, 0, 0, 0, 0,160,119, 91, 2, 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, - 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,216,108, 76, 1,208, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, - 24,109, 76, 1, 68, 65, 84, 65,156, 0, 0, 0, 24,109, 76, 1,207, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 8,120, 76, 1, 19, 0, 0, 0, 1, 0, 1, 0, 8,120, 76, 1, 20, 0, 0, 0, 1, 0, 1, 0, 8,120, 76, 1, 21, 0, 1, 0, - 1, 0, 1, 0, 8,120, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, 80,131, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,216,141, 76, 1, - 0, 0, 0, 0, 1, 0, 1, 0, 88,154, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,104,149, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, - 16,153, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,216,145, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,200,127, 76, 1, 0, 0, 0, 0, - 1, 0, 1, 0, 72,138, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, 16,127, 76, 1, 68, 65, 84, 65,236, 0, 0, 0,232,109, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0, 8,111, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, - 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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,236, 0, 0, 0, 8,111, 76, 1, -185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,232,109, 76, 1, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, - 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, - 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, - 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 40,112, 76, 1, -151, 0, 0, 0, 1, 0, 0, 0,136,118, 76, 1, 8,214, 69, 1,232,109, 76, 1, 8,111, 76, 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, 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, 40, 1, 0, 0, + 80,122, 91, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0,192,123, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, +192,123, 91, 2, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,122, 91, 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,150, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 64,113, 76, 1,185, 0, 0, 0, - 1, 0, 0, 0, 96,114, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, - 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, - 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 89, 6, 0, 0,108, 7, 0, 0, + 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 68, 65, 84, 65,236, 0, 0, 0, 96,114, 76, 1,185, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 64,113, 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, 48,125, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, + 48,125, 91, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, + 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, - 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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,128,115, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,128,115, 76, 1,145, 0, 0, 0, - 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, - 0, 0, 0,128, 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, 32,193, - 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, 32, 65, - 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, - 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, -129,255, 71, 66, 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, 32,193, - 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, - 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,136,118, 76, 1,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40,112, 76, 1, 64,113, 76, 1, 96,114, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,112,128, 91, 2, 0, 0, 0, 0,147, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16,121, 91, 2, 0, 0, 0, 0, 80,122, 91, 2, 0, 0, 0, 0,192,123, 91, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 64,153, 91, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, - 83, 67, 0, 0,220, 4, 0, 0, 8,120, 76, 1,143, 0, 0, 0, 1, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,138, 76, 1, 80,131, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,184,245, 75, 1, -104,125, 76, 1,184,245, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,184,125, 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, 1, 0, 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 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, + 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, + 83, 67, 0, 0,192, 5, 0, 0, 96,130, 91, 2, 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, 83, 67, 83, 99,101,110,101, 0, +116, 97,103,101, 0, 97,105,110, 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, 64,153, 91, 2, 0, 0, 0, 0, 48,145, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,136, 91, 2, 0, 0, 0, 0, 64,137, 91, 2, 0, 0, 0, 0, 96,136, 91, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,137, 91, 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, - 68,172, 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,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0, -141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, - 23, 0, 33, 0, 0, 0,128, 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, 0, 0, 68,172, 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,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 1, 0, 0, 0, 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0,128, 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, 0, 0, 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,139, 91, 2, 0, 0, 0, 0, 48,139, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,217, 69, 1,104,217, 69, 1, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 98, 97, 99,107, 98,117, +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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 98, 97, 99,107, 98,117,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, 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, 47,116,109,112, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 6, 0, 0, 0, 16, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176,191, 66, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 16, 0, 0, 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, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,151, 72, 1, 1, 0, 0, 0, 1, 0, 10, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,184,245, 75, 1,125, 0, 0, 0, - 1, 0, 0, 0, 24,125, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 10, 3, 1, 2,216,141, 76, 1, - 68, 65, 84, 65, 28, 0, 0, 0, 24,125, 76, 1,125, 0, 0, 0, 1, 0, 0, 0,104,125, 76, 1,184,245, 75, 1, 1, 0, 0, 0, - 2, 0, 0, 0, 0, 4, 0, 0,233, 3, 65, 3,216,145, 76, 1, 68, 65, 84, 65, 28, 0, 0, 0,104,125, 76, 1,125, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 24,125, 76, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,102, 3, 93, 3, 72,138, 76, 1, - 68, 65, 84, 65, 36, 1, 0, 0,184,125, 76, 1,141, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 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, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 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, -104,217, 69, 1,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,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,255,255, 15, 0, - 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,136, 0, 0, 0, 16,127, 76, 1, - 30, 0, 0, 0, 1, 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, +205,204, 28, 65, 0, 0, 0, 0, 32, 0, 0, 0,128, 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,128, 2,224, 1, 60, 0, 32, 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,128, 7, 56, 4, 68, 65, 84, 65, 40, 0, 0, 0, + 96,136, 91, 2, 0, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0,208,136, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 6, 3,227, 1,176,157, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +208,136, 91, 2, 0, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0, 64,137, 91, 2, 0, 0, 0, 0, 96,136, 91, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,228, 3, 33, 3, 16,163, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 64,137, 91, 2, 0, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,136, 91, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 97, 3, 61, 3, 64,153, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, +176,137, 91, 2, 0, 0, 0, 0,142, 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, 63, 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 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, 2, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 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, + 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 88, 0, 0, 0, 48,139, 91, 2, 0, 0, 0, 0, +129, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, + 76, 97,121,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,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 67, 65, 0, 0,152, 0, 0, 0,208,139, 91, 2, 0, 0, 0, 0, 29, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 63,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 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, 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,132, 1, 0, 0,200,127, 76, 1, 40, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 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, 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,128,129, 76, 1, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66, +161, 14,234, 64, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,232, 1, 0, 0,176,140, 91, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 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, 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, +224,142, 91, 2, 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, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,128,129, 76, 1, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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,184,130, 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, 0, 0, 0, 0, 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,144, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,224,142, 91, 2, 0, 0, 0, 0, + 54, 1, 0, 0, 1, 0, 0, 0, 1, 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, 96,144, 91, 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,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,184,130, 76, 1, 53, 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, 32, 0, 0, 0, 0,131, 76, 1, 19, 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, 87, 79, 0, 0,112, 1, 0, 0, 80,131, 76, 1,124, 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,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, 96,144, 91, 2, 0, 0, 0, 0, 52, 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,192,144, 91, 2, 0, 0, 0, 0, + 19, 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,216, 1, 0, 0, 48,145, 91, 2, 0, 0, 0, 0, +123, 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, - 1, 0, 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,128, 62, - 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61,205,204,204, 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,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, 0, 0, - 0, 0, 0, 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, 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, 2, 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,128, 62, 0, 0,128, 62, 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61,205,204,204, 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,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, 0, 0, 0, 0, 0, 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, 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, + 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, 84, 88, 0, 0,120, 0, 0, 0,240,132, 76, 1, 28, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, 0, 0, 0,152,133, 76, 1, -152,133, 76, 1,152,133, 76, 1,152,133, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,134, 76, 1, -255,255,255,255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,133, 76, 1, - 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,133, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, - 68, 65, 84, 65, 4, 0, 0, 0,224,133, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0, 92, 3, 0, 0, - 72,138, 76, 1,115, 0, 0, 0, 1, 0, 0, 0,216,141, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 88, 0, 0,176, 0, 0, 0, 80,147, 91, 2, 0, 0, 0, 0, 27, 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, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, 0, 0, 0, 64,148, 91, 2, 0, 0, 0, 0, 64,148, 91, 2, 0, 0, 0, 0, + 64,148, 91, 2, 0, 0, 0, 0, 64,148, 91, 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,149, 91, 2, 0, 0, 0, 0,255,255,255,255, 0, 4, 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, 64,148, 91, 2, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,148, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 69, 69, 82, 70, 68, 65, 84, 65, 4, 0, 0, 0,176,148, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 79, 66, 0, 0, 40, 4, 0, 0, 64,153, 91, 2, 0, 0, 0, 0,114, 0, 0, 0, 1, 0, 0, 0,176,157, 91, 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, 79, 66, 67, 97, 109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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, 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, - 16,127, 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,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, 42,254,141, 63,192, 57, 49, 60, - 34,159, 80, 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,128, 63,125,103,133, 51,176,219,194,178, 0, 0, 0, 0, -190, 32, 66, 51, 1, 0,128, 63,168,200,153, 51, 0, 0, 0, 0, 32,206, 18,179,126,126,149, 50, 1, 0,128, 63, 0, 0, 0, 0, -241,251,133, 52,172,182, 27,180,174,236,252, 51, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128, -129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, - 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, - 0, 0, 0, 0, 79, 66, 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, 2, 0, 1, 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,208,139, 91, 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, 1, 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, 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, 79, 66, 0, 0, 92, 3, 0, 0,216,141, 76, 1,115, 0, 0, 0, 1, 0, 0, 0,216,145, 76, 1, - 72,138, 76, 1, 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, 1, 0, 0, 4, 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,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, + 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 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, 0, 0,128, 63,157,190,215, 49, +167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, + 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 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, 2, 0, 1, 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, 0, 0, 0, 0, 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,165, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,154, 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,104,145, 76, 1, -160,145, 76, 1, 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, 0, 0, 0, 0, 0,128, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 66, 0, 0, 40, 4, 0, 0,176,157, 91, 2, 0, 0, 0, 0,114, 0, 0, 0, 1, 0, 0, 0, 16,163, 91, 2, + 0, 0, 0, 0, 64,153, 91, 2, 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, 1, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,193,181, 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,128,173, 91, 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,192,162, 91, 2, 0, 0, 0, 0,112,162, 91, 2, 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, 0, 0, 0, 0, 0,128, 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,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,222,149, 47, 63, 52, 70, 58, 63, +179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, + 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,204,180, 2, 0, 0, 0, 0,160,185,181, 2, + 0, 0, 0, 0, 25, 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, 68, 65, 84, 65, 8, 0, 0, 0,192,162, 91, 2, 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,112,162, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 79, 66, 0, 0, 40, 4, 0, 0, 16,163, 91, 2, 0, 0, 0, 0,114, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176,157, 91, 2, 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, 1, 0, 0, 4, 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,176,140, 91, 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, +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,229,123, 38, 63, + 87, 43, 98, 61,229,229,238, 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,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, -222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, 56, 53,101, 63, 0, 0, 0,128, - 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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,104,225,155, 3, 56,161,155, 3, - 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, -104,145, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,160,145, 76, 1, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,216,145, 76, 1,115, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -216,141, 76, 1, 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, 1, 0, 0, 4, 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,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, 53,236,148,190,222,102, 69,191, 37,255, 16, 63, + 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, + 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,127, 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,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,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 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, 35,233,134, 49,251,110, 17,179, 0, 0, 0, 0, 49,158,141, 50, 1, 0,128, 63,126,214,237, 50, 0, 0, 0, 0, -155,248, 28,178,199,139, 96,177,254,255,127, 63, 0, 0, 0, 0, 80,136,159,178,192, 4,158,178,209,114,143,179, 0, 0,128, 63, - 53,236,148,190,222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128, -235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, - 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 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, 64, 1, 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, 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, 77, 65, 0, 0,112, 2, 0, 0, -104,149, 76, 1, 42, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 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,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, 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, 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, 0, 0, 3, 0, 1, 3, 3, 0, 1, 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,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,128, 63, 0, 0,128, 63, 8,152, 76, 1, + 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, + 77, 65, 0, 0,224, 2, 0, 0,128,167, 91, 2, 0, 0, 0, 0, 41, 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, 65, 77, 97,116,101,114,105, + 97,108, 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,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, 0, 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, 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, 0, 0, 3, 0, 1, 3, 3, 0, 1, 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,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,160,170, 91, 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,192,152, 76, 1, 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,205,204, 76, 63,205,204, 76, 63, -205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -136, 0, 0, 0, 8,152, 76, 1, 33, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,153, 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, - 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, 16, 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, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -192,152, 76, 1, 19, 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, 84, 69, 0, 0, 24, 1, 0, 0, 16,153, 76, 1, 38, 0, 0, 0, 1, 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, 1, 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, 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, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 1, 0, 0, 0, - 2, 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, 77, 69, 0, 0, 24, 1, 0, 0, - 88,154, 76, 1, 52, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 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,155, 76, 1, 32,162, 76, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 96,157, 76, 1,216,159, 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,216,155, 76, 1, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,158, 76, 1, - 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,160, 76, 1, 1, 0, 0, 0, 5, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,160,155, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0,104,149, 76, 1, 68, 65, 84, 65, - 84, 1, 0, 0,216,155, 76, 1, 58, 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, 96,157, 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,112,171, 91, 2, 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,205,204, 76, 63, +205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +160,170, 91, 2, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,171, 91, 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, 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,144, 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, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,112,171, 91, 2, 0, 0, 0, 0, 19, 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, + 84, 69, 0, 0, 88, 1, 0, 0,224,171, 91, 2, 0, 0, 0, 0, 37, 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, 1, 0, 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, 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, 5, 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, 1, 0, 0, 0, 2, 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, 77, 69, 0, 0,144, 1, 0, 0,128,173, 91, 2, 0, 0, 0, 0, + 51, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,182, 91, 2, 0, 0, 0, 0, + 48,182, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177, 91, 2, 0, 0, 0, 0, +176,179, 91, 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, 80,175, 91, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,178, 91, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,180, 91, 2, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, + 1, 0, 1, 0, 1, 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, +240,182, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128,167, 91, 2, 0, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, + 80,175, 91, 2, 0, 0, 0, 0, 57, 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,177, 91, 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, 68, 65, 84, 65,192, 0, 0, 0, 96,157, 76, 1, 58, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, - 26,182,255, 0, 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255, 0, 3, 0, 0, 0, -250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, - 0, 0,128, 63,230, 73,230, 73,230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182, -230, 73,255, 0, 3, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255, 0, 3, 0, 0, 0, -255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, - 80,158, 76, 1, 58, 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,216,159, 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, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, + 0,177, 91, 2, 0, 0, 0, 0, 57, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255, 0, 3, 0, 0, 0, + 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255, 0, 3, 0, 0, 0,250,255,127,191, 3, 0,128, 63, + 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73, +230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255, 0, 3, 0, 0, 0, + 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255, 0, 3, 0, 0, 0,255,255,127,191, 0, 0,128, 63, + 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 0,178, 91, 2, 0, 0, 0, 0, + 57, 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,176,179, 91, 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, - 68, 65, 84, 65,144, 0, 0, 0,216,159, 76, 1, 55, 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, 84, 1, 0, 0,152,160, 76, 1, 58, 1, 0, 0, 5, 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, 32,162, 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, 68, 65, 84, 65,144, 0, 0, 0,176,179, 91, 2, 0, 0, 0, 0, + 54, 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,104, 1, 0, 0, +128,180, 91, 2, 0, 0, 0, 0, 57, 1, 0, 0, 5, 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, 48,182, 91, 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, 0, 68, 65, 84, 65,120, 0, 0, 0, 32,162, 76, 1, 54, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, - 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82, 40, 11, 0, 0, -112,152,230, 0,177, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 68, 65, 84, 65,120, 0, 0, 0, + 48,182, 91, 2, 0, 0, 0, 0, 53, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82, 64, 11, 0, 0, 32, 94,154, 1, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, + 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 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, 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, 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, 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, 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, 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, @@ -1258,836 +862,846 @@ char datatoc_B_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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, - 3, 0, 0, 0, 48, 52, 6, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, - 5, 0, 2, 0, 32,174, 76, 1,232,194, 76, 1,192,184, 73, 1,192,184, 73, 1, 72,222, 73, 1, 72,222, 73, 1, 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, 0, 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, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 48, 52, 6, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0,192,194, 91, 2, 0, 0, 0, 0, +192,215, 91, 2, 0, 0, 0, 0,240,195,100, 2, 0, 0, 0, 0,240,195,100, 2, 0, 0, 0, 0, 80, 51,101, 2, 0, 0, 0, 0, + 80, 51,101, 2, 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, 0, 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, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, + 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, 0, 0, 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, 2, 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, 68, 65, 84, 65,152, 20, 0, 0, 32,174, 76, 1, -175, 0, 0, 0, 1, 0, 0, 0,232,194, 76, 1, 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, 25, 0,231,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, -255,255,255,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,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 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,180,180,180,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 10, 0,236,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 90, 90,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, -145,145,145,245, 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, -180,180,180,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,130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 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, -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, 2, 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,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, + 68, 65, 84, 65,192, 20, 0, 0,192,194, 91, 2, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0,192,215, 91, 2, 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, 25, 0,231,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,255,255,255,255,255,255,255,255, 0, 0, 0,255, + 0, 0, 38, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,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,145,145,145,245, 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,180,180,180,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,130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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,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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, + 3, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, + 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, +255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,145,145,145,245, 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,132,132,132,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, + 0, 0, 0, 40,195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, +200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, +150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, 68, 65, 84, 65,192, 20, 0, 0, +192,215, 91, 2, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,194, 91, 2, 0, 0, 0, 0, + 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 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, 25, 0,231,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, + 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, + 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, + 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255, +255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, +255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, - 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,255,255,255,128, 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, -145,145,145,245, 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,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 3, 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, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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, +107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255, +255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255, +124,137,150,255, 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, +255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, +158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 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,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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, -145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 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, -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, 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110,110,110,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, +153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 145,145,145,245, 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, -132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, +165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 2, 0, 0, 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, + 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, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, +158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, + 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, +255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255, +127,127,127,255,142,138,145,255,120,145,120,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, +100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +145,145,145,245, 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, + 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, + 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255, +255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, +255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, - 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,255,255,255,128, 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, -145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, -145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,255,255,255,128, - 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,145,145,145,245, 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,255,140, 25,255, - 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,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, - 68, 65, 84, 65,152, 20, 0, 0,232,194, 76, 1,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,174, 76, 1, 82,111,117,110, -100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 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, 25, 0,231,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, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -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, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, - 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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, 0, 0, 0, 51, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, -217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, - 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, - 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 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,255,255,255,128, 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,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,107,107,107,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, - 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,255,255,255,255, -255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255, -178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255, -135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204, -255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, - 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, - 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 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,255,255,255,128, 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,195,195,195,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255, -127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,153,153,153,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, - 2, 0, 0, 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, 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,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, -255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, - 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, -127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255, -142,138,145,255,120,145,120,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,100,100,100,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, - 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, 0, 0, 0, 51, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, -217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, - 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, - 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 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,255,255,255,128, 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, 68, 78, 65, 49,204,208, 0, 0, 0, 31,154, 3, 0, 0, 0, 0, 1, 0, 0, 0, - 83, 68, 78, 65, 78, 65, 77, 69, 59, 10, 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105, -108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116, -115, 0,118,103,114,111,117,112, 91, 51, 50, 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, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, - 99,114,105,112,116, 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,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, - 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, - 0, 89, 70, 95, 98,107,104,114,111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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, -109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 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,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, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0, -100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115, -112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, - 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108, -111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117, -109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, - 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, - 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, - 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, - 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95, -100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, - 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0, -107, 50, 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,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,118,101, - 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 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,104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, - 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,109, - 97,112,115,105,122,101, 0,100,114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, - 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0, -109,105,100, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, - 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 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,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, 51, 50, 93, 0, 42, -116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101, -118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110, -100, 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,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,115,121,115, 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, 42,117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111, -116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, - 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102, -108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, - 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70, -108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, - 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99, -116, 0,102,111,114, 99,101,102,105,101,108,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,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, - 97,109,112, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97, -100, 0,102, 95,112,111,119,101,114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, - 0,107,105,110,107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,102,114, 97,109, -101, 0,116,111,116,112,111,105,110,116, 0, 42,120,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,120,100, 97,116, 97, 95,116,121,112,101, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101, -118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 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, 42,112, 97,114,116,105, 99,108,101,115, 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,110,111,100,101,109, 97,115,115, 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,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,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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, - 97,110,105,109, 69,110,100, 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, 83,117, -114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, - 83,117,114,102, 78,111,114,109, 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, - 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97, -109, 98,107, 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,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, 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,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, -112, 97,100, 91, 51, 93, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0, -112, 97,115,115, 95,120,111,114, 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,102,102, 99,111,100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0, -115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, - 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, - 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,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, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101, -116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70, -101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0, -121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120, -101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120, -112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112, -116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97, -100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, - 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, - 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115, -105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0, -112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, - 91, 51, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 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, 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,100,114, 97,119, 95,116,105,109,101,100, 0,115,101,108,101, 99,116,109, -111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0, -112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108, -101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, 91, 53, 93, 0,103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42, -119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116,102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, - 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112, -111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, 99, 97,109,101,114, 97, 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, 42,101,100, 0,102,114, 97,109,105,110,103, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116, -115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 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,106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115, -116,101,112, 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, - 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115,116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108, -111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, - 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, - 95,100, 97,116, 97, 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,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,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,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, - 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0, -100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118,105,101,119, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111, -117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105, -101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102, -108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97, -103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, - 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117, -102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117, -114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,112,114,101,118,105,101,119, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98, -111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,110,114, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114, -111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105, -103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 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,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, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, - 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114, -107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, - 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110, -101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116, -105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101, -119,108,105,110,101,115, 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,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, 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, - 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110, -116, 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,110,117,109,116,105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49,224,211, 0, 0, 96,169,184, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69,102, 10, 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,119, 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, 51, 50, + 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, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97, +100, 49, 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,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, + 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 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, 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,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105, +115,116, 0, 89, 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, + 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114,111,116, 0, 42,100,111,102, 95,111, 98, 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,109,101,110,117,110,114, 0, + 42,115, 99,101,110,101, 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,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, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, + 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, + 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97, +114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,101,120,116,101,110,100, + 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, 99,111, 98, 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0, +112, 97,100, 91, 55, 93, 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,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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112, +111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116, +111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117, +115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116, +105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, + 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 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, 91, 51, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, + 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, + 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97, +109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 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,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,114, 97,100,105,117,115, 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,104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, + 42,101,100,105,116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, + 99,117, 98,101,109, 97,112,115,105,122,101, 0,100,114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42, +112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101, +120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0, +118, 91, 52, 93, 0,109,105,100, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111, +108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102, +105,101,114, 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,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, + 51, 50, 93, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0, +109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 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,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110, +100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 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,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, +115,121,115, 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, 42,117,110,100,111, 95,118,101,114,116,115, 0, +117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,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, 51, 50, 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,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, +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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111, +100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 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,105,112,111,119,105,110, 0,115, 99, + 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, + 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114, +111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, + 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112, +101, 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,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, 99,117,114,105,110,100,101,120, 0, + 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108,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,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119, +101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, + 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95,112,111,119,101,114, 95,114, 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, +116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,114,110,103, + 0,102, 95,110,111,105,115,101, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0, 42,120,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,110, 97,109,101, 91, 54, 52, 93, 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, 50, 52, 48, 93, 0, +109,101,109, 95, 99, 97, 99,104,101, 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, 42,112, 97,114,116,105, 99,108,101,115, 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, 51, 50, 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, 51, 50, 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, 51, 50, 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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110, +100, 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, 83,117,114,102, 97, 99,101, 0, + 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, 83,117,114,102, 78,111, +114,109, 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0, +104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 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,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, 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,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, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 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,102,102, 99,111,100,101, 99,100, 97, +116, 97, 0, 97,117,100,105,111, 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,114,116, 49, 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,119,105,110,112,111,115, 0, +112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0, +100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0, +114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 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,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, 71, 73,113,117, 97,108,105,116, +121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100, +105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109, +112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, + 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111, +116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97, +100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, + 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, + 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119, +101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, + 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, + 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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,112, 97,100, 49, 49, 0,102,114, 97,109,105,110,103, + 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 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, 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,100,114, 97,119, 95, +116,105,109,101,100, 0,115,101,108,101, 99,116,109,111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, + 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0,112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, 0,116, 97, 98, +108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, 91, 53, 93, 0, +103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116,102,108, 97,103, + 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100,101, + 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105, +112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95, +115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, + 99, 97,109,101,114, 97, 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, 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,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 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,106,117,109,112,102,114, 97,109,101, 0,102,114, + 97,109,101, 95,115,116,101,112, 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, 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115,116,109,111,100,101, 0,114,102,108, + 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, + 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116, +111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 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,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,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,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, + 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, + 0,108, 97,121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118,105,101,119, 0,115, 99,101,110,101, +108,111, 99,107, 0, 97,114,111,117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105, +100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110, +101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99, +116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0, +116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114, +100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116, +101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 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, 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99, +107, 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,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,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, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0, +115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116, +105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, 0,102,112, 95,115, +116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108, +111, 97,100,105,109, 97,103,101, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111, +114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121, +112,101,110,114, 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, 99, +101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 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, +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, 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, 50, 53, 54, 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,114,101, +100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 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,110,117,109,116,105, 108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107, 114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111, 108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117, @@ -2114,578 +1728,581 @@ char datatoc_B_blend[]= { 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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,115, -116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, - 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, - 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116, -105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, - 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, - 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, - 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0, -121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,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,119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100, -111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101, -109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112, -104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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,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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42, -105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, - 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116, -105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116, -105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, - 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99, -101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70, -105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, - 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117, -112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115, -101,100,101,108,101,109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, - 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105, -109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105, -115,102,108, 97,103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111, -100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99,111, -112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98,117, -116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, 97, 99, - 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, - 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, - 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, - 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112, -105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0, -115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91, - 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101, -108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100, -115,103, 97,109,101,101,110,103,105,110,101, 0, 42, 97,114,101, 97, 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, 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,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, 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,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,114,111,112, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, - 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104, -105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, - 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0,114,111,116, -109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, - 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, - 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101, -109,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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, - 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0, -105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, - 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110, -107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111, -117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104, -114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100, -101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108, -111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115, -100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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,105,116,101,114, 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,115, 97,116, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0, -114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111, -102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, - 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110,110, -101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, 95, -116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, - 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, - 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0, -114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109, -101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97, -108,105,118,101, 0,108,111,111,112, 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,114,116, 50, 91, 51, 93, 0,100,114, 97,119, 95, -115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,117, -114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103, -114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116,115, -104, 97,112,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,100, 97,109, -112,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, -102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, 99, - 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105,110, -103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98,111, -105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, - 41, 40, 41, 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,116, 97,114,103,101, -116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118,101, -110,116,115, 0,107,101,121,101,100, 95,116, 97,114,103,101,116,115, 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, 51, - 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 42,116,121,112,101,115,116,114, 0, 42,109,101,115,115, 97,103,101, 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,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,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,107,101,121,109, 97, -112,115, 0, 42,103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97, -109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, - 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,107,101,121,109, 97,112, 0,110, 97,109,101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105, -111,110,105,100, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109,118, 97,108, 91, 50, - 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121, -109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, - 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 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, 42,114,110, 97, 95, -112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, - 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, - 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,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121, -112,101, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121, -105,110,103,102,108, 97,103, 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, 0, 84, 89, 80, 69,161, 1, 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,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,105, 0,118,101, 99, 50, -102, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0, -118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 83, 99,114,105,112,116, 76,105,110,107, - 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112, -112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111, -114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67, -111,108, 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, 77, 68,105, -115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, - 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, - 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, - 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, - 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, - 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, - 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, - 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, - 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, - 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, - 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, - 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, - 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, 32,117,108,116,105,114,101,115, 76,101,118,101,108, 59, 13, 10, 13, 10,116,121, -112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 77,117,108,116,105,114,101,115, 32,123, 13, 10, 9, 76,105,115,116, 66, 97, -115,101, 32,108,101,118,101,108,115, 59, 13, 10, 9, 77, 86,101,114,116, 32, 42,118,101,114,116,115, 59, 13, 10, 13, 10, 9,117, -110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,108,101,118,101,108, 95, 99,111,117,110,116, 44, 32, 99,117,114,114,101,110, -116, 44, 32,110,101,119,108,118,108, 44, 32,101,100,103,101,108,118,108, 44, 32,112,105,110,108,118,108, 44, 32,114,101,110,100, -101,114,108,118,108, 59, 13, 10, 9,117,110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32, -102,108, 97,103, 59, 13, 10, 13, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, - 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111, -116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, - 97, 59, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 13, 10, 9,115,104,111,114,116, 32, 42, -101,100,103,101, 95,102,108, 97,103,115, 59, 13, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, - 59, 13, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 13, 10, 13, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114, -101,115, 32, 42, 42, 47, 13, 10, 13, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, - 86,105,115,105, 98,105,108,105,116,121, 32,123, 13, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114, -116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78, -101,119, 32, 73,110,100,101,120, 32, 42, 47, 13, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32, -101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, - 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 13, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, - 59, 13, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 13, 10, 9,117,110,115,105,103,110,101,100, - 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32, -112, 97,100, 59, 13, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 13, 10, 13, 10, 47, 42, - 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 13, 10, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, - 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, - 54, 41, 13, 10, 13, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, - 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 13, - 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 13, 10, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32, -114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 13, 10, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 13, 10, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 13, 10, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 13, 10, 13, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114, -116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 47, 42, 32,114,101,110,100,101,114, 32, - 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, - 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 13, 10, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, - 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, - 90, 9, 9, 54, 52, 13, 10, 13, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, - 50, 86, 51, 9, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 13, 10, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, - 86, 49, 9, 9, 9, 56, 13, 10, 13, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, - 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 13, 10, 47, 42, - 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, - 69,108, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 13, 10, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, - 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, - 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108, -100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, - 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97, -116,101,100, 33, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 13, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, - 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 13, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97, -115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100, -101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 13, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 84, 69, 88, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, - 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 13, 10, 13, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, - 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 13, 10, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, - 66, 76, 69, 9, 49, 48, 50, 52, 13, 10, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, - 52, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, - 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 13, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97, -110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103, -115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110, -116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 83, 79, 76, 73, 68, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 13, 10, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, - 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, - 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,115,117, 98, 32,105,115, - 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114, -102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, - 9, 51, 13, 10, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 13, 10, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, - 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, - 68, 52, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 13, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, - 9, 32, 32, 32, 32, 9, 49, 50, 56, 13, 10, 13, 10, 35,101,110,100,105,102, 13, 10, 35, 79, 67, 75, 33,110,101, 32, 67,249, 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,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, 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, 76, 97,116,116,105, 99,101, - 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 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, 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, 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, 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, 70,114, 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114, -107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, - 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103, -115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, 97, - 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 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, - 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, - 73,109, 97, 83,101,108, 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, -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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 72,101, 97,100,101,114, 0, 72,101, 97,100,101,114, 84,121,112,101, 0, 77,101,110,117, 0, 77,101,110,117, 84,121, -112,101, 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, 84, 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,104, -100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, - 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112, -108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97, -110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111, -100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105, -109, 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, 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, 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, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105, -108,100, 80, 97,114,116,105, 99,108,101, 0, 75,101,121,101,100, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, - 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114, -116,105, 99,108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 76,105,110,107, 78, +105,116,101,109, 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,108, +105,115,116, 95,105,116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, + 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0, +102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, 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,115,110,100, 0,116, + 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, + 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, + 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, + 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, + 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0, +118,101,114,115,105,111,110,115, 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,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,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,119,109, +112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122, +101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101, +117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,102,108, + 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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,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,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, 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,110, + 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115, +101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, + 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114, +105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116, +115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116, +105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114, +101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100, +105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95, +115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, + 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110, +116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, + 0,109,105,110,102, 97, 99, 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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, + 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0, +112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97, +103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, + 50, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, + 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, + 98,117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, + 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101, +101,100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97, +109,112, 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108, +101, 0, 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, + 0,112,105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99, +101, 0,115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97, +100, 91, 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114, +118,101,108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117, +110,100,115,103, 97,109,101,101,110,103,105,110,101, 0, 42, 97,114,101, 97, 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, 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,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, 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,115,107,101,116, 99,104, 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,114,111,112, 0, 99,111,110,115,116,102, +108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, + 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116, +115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0, +101,117,108, 91, 51, 93, 0,114,111,116,109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, + 97,110, 98, 97,115,101, 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, 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101, +114,102,108, 97,103, 0, 97,100,115, 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105, +100,101, 0, 42,103,114,112, 0,116,101,109,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, 42,116, 97,114, 0,115,117, + 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, + 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, + 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, + 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116, +111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, + 50, 93, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105, +100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, + 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105, +122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42, +115,101,108,105,110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101, +115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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, +105,116,101,114, 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,115, 97,116, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, + 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111, +100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108, +100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, + 0, 99,108,111,110,101, 0,105,110,110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114, +111,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 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,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,101,100,105,116,102, +108, 97,103, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97, +110,100, 91, 51, 93, 0, 42,115,116,105, 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, + 0, 42, 98,111,105,100, 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, + 0,100,105,101,116,105,109,101, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, + 0, 97,108,105,118,101, 0,108,111,111,112, 0, 42, 98,111,105,100,115, 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,100,114, 97, +119, 95,115,116,101,112, 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,115,105,109,112, +108,105,102,121, 95,102,108, 97,103, 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,106,105,116,102, 97, 99, 0, +101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116,115,104, 97,112,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,100, 97,109,112,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,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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, +101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116, 91, 49, 48, 93, 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,101,100,105,116, 0, 40, + 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 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,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114, +115, 0,114,101, 97, 99,116,101,118,101,110,116,115, 0,116,114,101,101, 95,102,114, 97,109,101, 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, 51, 50, 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,116,114,101,101, 0, 42, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118, +105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, + 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, 42,116,121,112,101,115, +116,114, 0, 42,109,101,115,115, 97,103,101, 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,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, +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,107,101,121,109, 97,112,115, 0, 42,103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99, +114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, 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,112,114,111,112,118, 97,108,117,101, 0,105,110, 97, 99,116,105,118, +101, 0,109, 97,112,116,121,112,101, 0,107,101,121,109, 97,112, 0,110, 97,109,101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99, +101,105,100, 0,114,101,103,105,111,110,105,100, 0,105,115, 95,109,111,100, 97,108, 0, 42,105,116,101,109,115, 0, 42, 99,117, +115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0,109,118, 97, +108, 91, 50, 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42, +107,101,121,109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102, +114,101,101, 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 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, 42,114, +110, 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, + 53, 54, 93, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, + 91, 51, 93, 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,103,114,111,117,112, 91, 54, 52, 93, 0,105, +100,116,121,112,101, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0, +107,101,121,105,110,103,102,108, 97,103, 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,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, 99, 99,117,114, 97, 99,121, 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, 0, 0, + 84, 89, 80, 69,168, 1, 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,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,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51, +100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110, +103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87, +101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 77, 68,105,115,112,115, + 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, + 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, + 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, + 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, + 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, + 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, + 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, + 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69, +108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, + 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, + 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, + 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, + 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, + 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, + 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, + 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, + 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, + 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, + 50, 56, 32, 35,101,110,100,105,102, 32, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, + 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97, +110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101,118,101, +108,115, 32, 42, 47, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, + 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, 59, 10, + 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101,115, 59, + 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101,102, 32, +115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110,115,105, +103,110,101,100, 32,105,110,116, 32, 42,118,101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, + 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101, +100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, + 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, + 32, 42,111,108,100, 95,102, 97, 99,101,115, 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 10, + 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32, +116,111,116,118,101,114,116, 44, 32,112, 97,100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116, +121, 59, 10, 10, 47, 42, 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, + 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, + 9, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, + 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, + 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101, +114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, + 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, + 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, + 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97,108, 32, + 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102,108,105, +112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, + 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, + 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40, +109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, + 49, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, + 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, + 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, + 42, 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, + 69,108, 9, 48, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32,104,105, +100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98,101, 32, + 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, 32, 42, + 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, + 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, + 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, + 82, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, + 9, 9, 49, 54, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116, +101,100, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, + 79, 76, 9, 9, 50, 48, 52, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, + 48, 57, 54, 9, 47, 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, + 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, + 97,110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97, +103,115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97, +110,116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 79, 76, 73, 68, 9, 48, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, + 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108, +108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, + 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, + 97,110,121,109,111,114,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, + 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, + 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, + 69, 68, 50, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, + 9, 32, 32, 32, 32, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, + 10,105,110, 79, 67, 75, 33,116, 95,102, 97, 99,101, 59, 32, 32, 32, 32, 32,129, 71, 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,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, 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, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114, +111,117,112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, + 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 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, 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, 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, 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, 71, 97,109,101, 68, 97,116, 97, + 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 66, +114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, + 0, 83, 99,117,108,112,116, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110,116, 0, 84,111,111, +108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, + 0, 98, 71, 80,100, 97,116, 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97, +116, 97, 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, 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103, +105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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,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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101, +102, 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, 84, 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,104,100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 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, 70,114,101,101, 67, 97,109,101, +114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83, +111,117,110,100, 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, 80,111,115,101, 67,104, 97,110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, + 73,109, 97,103,101, 65,110,105,109, 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, 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, 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, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108, +101, 75,101,121, 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, 97,116, 97, 0, 66,111,105,100, 68, 97,116, 97, 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, 69,100, +105,116, 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, 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, 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, 69,118,101,110,116, @@ -2699,33 +2316,37 @@ char datatoc_B_blend[]= { 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, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, - 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 0, - 40, 2, 0, 0, 32, 0,140, 0, 92, 3, 92, 0, 36, 0, 56, 0, 84, 0,112, 0,124, 0, 48, 0, 16, 0, 24, 0, 40, 0,120, 0, - 12, 0,136, 0, 36, 0,220, 4,128, 1, 0, 0, 0, 0, 0, 0,136, 0, 24, 1, 84, 1, 24, 0, 8, 3,168, 0, 0, 0,140, 0, -132, 0,132, 1, 8, 1, 56, 0,112, 2, 76, 0, 60, 1, 0, 0,108, 0,104, 0,140, 0, 56, 0, 8, 0, 16, 0, 76, 1, 0, 0, - 0, 0, 0, 0, 24, 1, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 0, 0, 24, 0, 76, 0, 32, 0, - 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 12, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 40, 0, 56, 0, - 72, 0, 92, 0,100, 0, 72, 0,100, 0,120, 0, 68, 0, 64, 0,112, 0, 64, 0,152, 0,156, 0, 64, 0, 96, 0,108, 0,188, 0, -104, 0,184, 0, 56, 0, 76, 0, 0, 0,132, 0, 28, 0,232, 0,104, 0, 0, 0, 64, 0, 0, 0, 0, 0, 68, 0, 8, 0, 8, 0, -220, 0, 80, 0, 76, 1, 76, 0, 68, 0, 68, 0, 64, 0,164, 1,112, 0,108, 0,188, 0, 40, 0, 92, 0, 56, 0,120, 0,128, 0, -152, 0,208, 0, 0, 0, 24, 0, 16, 0, 0, 0, 0, 0, 0, 0,112, 1, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 0,224, 3, - 56, 0, 16, 0, 80, 0, 16, 0,196, 0, 8, 0, 84, 0, 80, 0, 32, 0, 0, 0, 32, 0, 36, 1, 32, 0, 24, 2, 0, 0, 0, 0, - 56, 0,216, 2, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 40, 0,136, 0, 48, 0,140, 0,196, 0, 20, 0,232, 0, -204, 0,124, 1, 52, 0, 0, 0, 92, 0, 0, 0,248, 0, 12, 0, 12, 0,136, 0,188, 0,124, 2, 80, 2, 40, 0,168, 0,232, 0, - 52, 0,136, 2, 28, 0, 80, 0, 16, 1, 32, 0,224, 0, 32, 0, 32, 0, 48, 2, 16, 1, 16, 0,152, 20, 56, 0, 40, 11, 20, 0, - 24, 0, 56, 1, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0,112, 0, 0, 0,236, 0, 0, 0, 32, 0, 80, 0, 28, 0, 16, 0, - 8, 0, 52, 0,252, 0,240, 0,168, 1,196, 0, 28, 1, 0, 0, 16, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 0, - 56, 1, 0, 0, 56, 0, 64, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, - 76, 0, 80, 0, 60, 0,128, 0, 76, 0, 60, 0, 12, 0, 92, 0, 28, 0, 20, 0, 80, 0, 16, 0, 76, 0,108, 0, 84, 0, 28, 0, - 96, 0, 60, 0, 56, 0,108, 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 40, 0, 0, 0, 68, 0,184, 0, 24, 0, 4, 1,120, 0, -172, 1,104, 0,216, 0, 64, 0, 44, 0, 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, - 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 32, 0, -208, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, - 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 44, 0, 20, 0, 68, 0, 24, 0, 56, 0, 72, 0, 28, 0,252, 0,244, 1, 0, 0, 0, 0, - 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 24, 0, 24, 0,140, 0,148, 0, 56, 0, 0, 0, 0, 0, 92, 0, 0, 0, 88, 0, 0, 0, - 88, 0, 20, 0, 24, 0, 16, 0, 20, 0, 8, 0, 8, 0, 24, 0, 20, 0, 88, 0, 24, 1, 16, 0, 68, 0, 0, 1, 20, 0,152, 0, - 88, 0, 96, 0, 88, 0, 20, 0, 56, 0, 0, 0, 83, 84, 82, 67,104, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, + 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, 84, 76, 69, 78, 1, 0, 1, 0, + 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, + 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0, 40, 4,112, 0, + 36, 0, 56, 0,112, 0,128, 0,168, 0, 88, 0, 40, 0, 48, 0,176, 0, 16, 0,152, 0, 40, 0,192, 5,184, 1, 0, 0, 0, 0, + 0, 0,144, 0, 88, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0,232, 0,136, 0,232, 1, 56, 1, 80, 0,224, 2,104, 0, 88, 1, + 0, 0,128, 0,104, 0,200, 0, 80, 0, 8, 0, 16, 0,200, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, + 12, 0, 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, + 32, 0, 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, + 80, 0,128, 0, 80, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0,128, 0,208, 0, 72, 0,112, 0, 0, 0,136, 0, 32, 0, +232, 1,152, 0, 0, 0,112, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, 8, 1,104, 0,216, 1, 96, 0, 88, 0, 88, 0, 88, 0, +184, 1,136, 0,128, 0,232, 0, 48, 0,144, 0, 72, 0,120, 0,136, 0, 16, 1,224, 0, 0, 0, 40, 0, 16, 0, 0, 0, 0, 0, + 0, 0,216, 1, 40, 0,184, 0,152, 0, 56, 0, 16, 0, 88, 0, 24, 4, 64, 0, 24, 0, 16, 0, 88, 0, 88, 0, 24, 0, 40, 1, + 8, 0, 88, 0, 88, 0, 40, 0, 0, 0, 48, 0, 64, 1, 32, 0, 48, 2, 0, 0, 0, 0, 64, 0,248, 2,104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 1, 56, 0,152, 0, 72, 0,208, 0,240, 0, 32, 0, 0, 1,240, 0,128, 1,104, 0, 0, 0,144, 0, + 0, 0, 40, 1, 16, 0, 16, 0,168, 0,224, 0,144, 2,120, 2, 64, 0,200, 0, 32, 1, 72, 0,208, 2, 40, 0,112, 0, 24, 1, + 32, 0,232, 0, 32, 0, 32, 0, 80, 2, 16, 1, 16, 0,192, 20, 56, 0, 64, 11, 32, 0, 40, 0, 80, 1, 0, 0, 0, 0,160, 0, + 0, 0, 40, 1, 0, 0, 40, 0, 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 72, 1, 0, 0, 32, 0, + 12, 0, 24, 0, 48, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 64, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, + 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 32, 0, + 20, 0, 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 64, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, + 40, 0, 0, 0, 88, 0,224, 0, 40, 0, 24, 1,168, 0,232, 1,120, 0, 8, 1, 88, 0, 56, 0, 80, 0,128, 0, 80, 0,112, 0, + 56, 0, 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 28, 0, 28, 0, 28, 0, + 56, 0, 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0, 0, 1, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, + 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, 72, 0, 24, 0, + 56, 0, 72, 0, 40, 0,248, 0, 20, 0, 8, 2,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, + 32, 0,224, 0,224, 0, 72, 0, 0, 0, 0, 0,112, 0, 0, 0,112, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, + 16, 0, 24, 0, 20, 0,104, 0, 32, 1, 16, 0,104, 0, 0, 1, 40, 0,200, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 56, 0, + 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 83, 84, 82, 67,112, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, @@ -2746,574 +2367,588 @@ char datatoc_B_blend[]= { 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, - 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 5, 0, 27, 0, 84, 0, - 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, 0, 41, 0, 6, 0, 41, 0, 0, 0, 41, 0, 1, 0, 0, 0, 88, 0, - 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, 0, 42, 0, 0, 0, 42, 0, 1, 0, 4, 0, 91, 0, 4, 0, 92, 0, - 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 43, 0, 15, 0, 27, 0, 31, 0, - 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, 0, 41, 0,100, 0, 41, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, - 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0,108, 0, 8, 0,109, 0, 44, 0, 3, 0, 4, 0,110, 0, - 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 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, - 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0, 7, 0,125, 0, 36, 0, 80, 0, 40, 0,126, 0, 32, 0,127, 0, - 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0, 19, 0, - 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 2, 0,138, 0, 47, 0,139, 0, 48, 0, 32, 0, 27, 0, 31, 0, - 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, 0, 51, 0,143, 0, 2, 0,134, 0, 2, 0, 19, 0, 2, 0,144, 0, - 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, - 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, 0, 44, 0,154, 0, 30, 0,155, 0, 0, 0,156, 0, 7, 0,157, 0, - 4, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 7, 0,163, 0, 7, 0,164, 0, 52, 0, 31, 0, - 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 2, 0,168, 0, 32, 0,169, 0, 53, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, - 0, 0,173, 0, 0, 0,174, 0, 0, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, - 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 2, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, - 7, 0,189, 0, 7, 0, 57, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 54, 0, 15, 0, - 0, 0,195, 0, 9, 0,196, 0, 0, 0,197, 0, 0, 0,198, 0, 4, 0,199, 0, 4, 0,200, 0, 9, 0,201, 0, 7, 0,202, 0, - 7, 0,203, 0, 7, 0,204, 0, 4, 0,205, 0, 9, 0,206, 0, 9, 0,207, 0, 4, 0,208, 0, 4, 0, 37, 0, 55, 0, 6, 0, - 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,209, 0, 7, 0, 67, 0, 4, 0, 64, 0, 56, 0, 5, 0, 2, 0, 19, 0, - 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,210, 0, 55, 0,204, 0, 57, 0, 17, 0, 32, 0,169, 0, 48, 0,211, 0, 58, 0,212, 0, - 7, 0,213, 0, 7, 0,214, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,216, 0, 4, 0,217, 0, - 2, 0,218, 0, 2, 0,219, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,220, 0, 2, 0,221, 0, 53, 0, 57, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, - 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, - 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0,244, 0, - 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0,248, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,249, 0, - 7, 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,132, 0, 4, 0, 23, 0, - 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0, 0, 1, 7, 0, 1, 1, 7, 0,191, 0, 46, 0, 2, 1, 59, 0, 3, 1, - 36, 0, 80, 0, 48, 0,211, 0, 54, 0, 4, 1, 56, 0, 5, 1, 57, 0, 6, 1, 30, 0,155, 0, 0, 0, 7, 1, 0, 0, 8, 1, - 60, 0, 8, 0, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0,177, 0, 4, 0, 19, 0, 7, 0, 11, 1, 7, 0, 12, 1, 7, 0, 13, 1, - 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 14, 1, 2, 0,179, 0, - 2, 0, 15, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 16, 1, 7, 0, 17, 1, 7, 0, 18, 1, - 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, - 62, 0, 27, 1, 2, 0, 28, 1, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, - 2, 0, 32, 1, 2, 0, 33, 1, 2, 0, 34, 1, 2, 0, 35, 1, 0, 0, 36, 1, 0, 0, 37, 1, 2, 0, 38, 1, 2, 0, 39, 1, - 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 2, 0, 47, 1, - 2, 0, 43, 0, 2, 0, 48, 1, 2, 0, 49, 1, 2, 0, 50, 1, 2, 0, 51, 1, 7, 0, 52, 1, 7, 0, 53, 1, 7, 0, 54, 1, - 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, - 7, 0, 63, 1, 2, 0, 64, 1, 2, 0, 65, 1, 4, 0, 66, 1, 4, 0, 67, 1, 2, 0, 68, 1, 2, 0, 69, 1, 2, 0, 70, 1, - 2, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 2, 0, 76, 1, 2, 0, 77, 1, 52, 0, 78, 1, - 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 64, 0,130, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 2, 0, 79, 1, 2, 0, 19, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 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, 7, 0, 87, 1, 7, 0, 88, 1, 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, 7, 0,100, 1, 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, 0, 0,110, 1, 0, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, - 2, 0,114, 1, 2, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 2, 0,120, 1, 2, 0,121, 1, - 4, 0, 14, 1, 4, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, - 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, - 0, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 4, 0,141, 1, 0, 0,142, 1, 0, 0, 48, 1, 0, 0,143, 1, - 0, 0, 7, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0, 65, 1, 2, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 7, 0,149, 1, - 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 2, 0,165, 0, 2, 0,166, 0, 56, 0,154, 1, 56, 0,155, 1, - 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, 0, 0,159, 1, 2, 0,160, 1, 2, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, - 52, 0, 78, 1, 59, 0, 3, 1, 36, 0, 80, 0, 65, 0,164, 1, 30, 0,155, 0, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, - 7, 0,168, 1, 7, 0,169, 1, 2, 0,170, 1, 2, 0, 70, 0, 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, 2, 0,180, 1, 2, 0,181, 1, 7, 0,182, 1, - 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, 4, 0,189, 1, 40, 0,126, 0, - 12, 0,190, 1, 66, 0, 4, 0, 27, 0, 31, 0, 0, 0,191, 1, 67, 0, 2, 0, 44, 0,154, 0, 68, 0, 26, 0, 68, 0, 0, 0, - 68, 0, 1, 0, 69, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, 4, 0,195, 1, 4, 0,196, 1, 4, 0,197, 1, 4, 0,198, 1, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,199, 1, 2, 0,200, 1, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,201, 1, - 7, 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, 23, 0, 7, 0,208, 1, - 7, 0,209, 1, 70, 0, 16, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0,210, 1, 12, 0,211, 1, 12, 0,212, 1, 36, 0, 80, 0, - 64, 0,213, 1, 2, 0, 19, 0, 2, 0,214, 1, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0,215, 1, - 7, 0,216, 1, 7, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 2, 0, 55, 0, - 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 0, 0,226, 1, 0, 0,227, 1, 34, 0, 7, 0, 7, 0,228, 1, - 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, 7, 0,221, 1, 7, 0, 37, 0, 71, 0, 21, 0, 71, 0, 0, 0, - 71, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, 2, 0, 19, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,232, 1, - 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 34, 0, 49, 0, - 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, 72, 0, 5, 0, 2, 0,243, 1, 2, 0,229, 1, 0, 0, 19, 0, - 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0,244, 1, 74, 0, 62, 0, - 27, 0, 31, 0, 39, 0, 75, 0, 69, 0,192, 1, 12, 0,245, 1, 12, 0,211, 1, 12, 0,246, 1, 32, 0,247, 1, 32, 0,248, 1, - 32, 0,249, 1, 36, 0, 80, 0, 75, 0,250, 1, 38, 0,251, 1, 64, 0,213, 1, 12, 0,252, 1, 7, 0, 9, 1, 7, 0,177, 0, - 7, 0, 10, 1, 4, 0,178, 0, 2, 0,253, 1, 2, 0,214, 1, 2, 0, 19, 0, 2, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, - 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, 34, 0, 5, 2, 2, 0, 23, 0, - 2, 0, 99, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 16, 2, 0, 0, 17, 2, 76, 0, 18, 2, 77, 0, 19, 2, - 0, 0, 20, 2, 66, 0, 21, 2, 66, 0, 22, 2, 66, 0, 23, 2, 66, 0, 24, 2, 4, 0, 25, 2, 7, 0, 26, 2, 4, 0, 27, 2, - 4, 0, 28, 2, 73, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, 72, 0, 32, 2, 72, 0, 33, 2, 78, 0, 39, 0, 27, 0, 31, 0, - 69, 0,192, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, 64, 0,213, 1, 79, 0, 35, 2, 80, 0, 36, 2, 81, 0, 37, 2, - 82, 0, 38, 2, 83, 0, 39, 2, 84, 0, 40, 2, 85, 0, 41, 2, 86, 0, 42, 2, 78, 0, 43, 2, 87, 0, 44, 2, 88, 0, 45, 2, - 89, 0, 46, 2, 89, 0, 47, 2, 89, 0, 48, 2, 4, 0, 54, 0, 4, 0, 49, 2, 4, 0, 50, 2, 4, 0, 51, 2, 4, 0, 52, 2, - 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0, 53, 2, 4, 0, 54, 2, 2, 0, 55, 2, 2, 0, 19, 0, - 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,214, 1, 2, 0, 58, 2, 90, 0, 59, 2, 91, 0, 60, 2, 81, 0, 8, 0, 9, 0, 61, 2, - 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 79, 0, 7, 0, - 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, 2, 0,229, 1, 0, 0, 71, 2, 0, 0, 19, 0, 83, 0, 5, 0, - 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, 2, 0, 19, 0, 92, 0, 2, 0, 4, 0, 74, 2, 7, 0,220, 1, - 84, 0, 3, 0, 92, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, 82, 0, 6, 0, 7, 0, 77, 2, 2, 0, 78, 2, 2, 0,229, 1, - 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,184, 0, 85, 0, 4, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, - 93, 0, 6, 0, 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 94, 0, 1, 0, - 7, 0, 79, 2, 95, 0, 5, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, 4, 0, 37, 0, 86, 0, 1, 0, - 7, 0, 80, 2, 87, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, 80, 0, 7, 0, 7, 0, 62, 2, 48, 0, 61, 2, 0, 0, 19, 0, - 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 96, 0, 1, 0, 7, 0, 82, 2, 97, 0, 1, 0, 4, 0, 83, 2, - 98, 0, 1, 0, 0, 0, 84, 2, 99, 0, 1, 0, 7, 0, 62, 2,100, 0, 3, 0, 4, 0, 85, 2, 0, 0, 96, 0, 7, 0, 86, 2, -102, 0, 4, 0, 7, 0,209, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,103, 0, 1, 0,102, 0, 63, 2,104, 0, 5, 0, - 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, 0, 0,184, 0,105, 0, 2, 0, 4, 0, 89, 2, 4, 0, 88, 2, -106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 0, 90, 2,103, 0, 91, 2,105, 0, 92, 2, 4, 0, 54, 0, 4, 0, 50, 2, - 4, 0, 49, 2, 4, 0, 37, 0, 82, 0, 93, 2, 90, 0, 14, 0, 12, 0, 94, 2, 82, 0, 93, 2, 0, 0, 95, 2, 0, 0, 96, 2, - 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, 0, 0,101, 2, 0, 0, 19, 0, 89, 0, 46, 2, 89, 0, 48, 2, - 2, 0,102, 2, 0, 0,103, 2, 91, 0, 8, 0, 4, 0,104, 2, 4, 0,105, 2, 79, 0,106, 2, 83, 0,107, 2, 4, 0, 50, 2, - 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, 0,107, 0, 0, 0,107, 0, 1, 0, 4, 0, 17, 0, 4, 0, 14, 1, - 0, 0, 20, 0, 47, 0,139, 0, 0, 0,108, 2,108, 0, 7, 0,107, 0,109, 2, 2, 0,110, 2, 2, 0, 94, 2, 2, 0,111, 2, - 2, 0, 94, 0, 9, 0,112, 2, 9, 0,113, 2,109, 0, 3, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0,110, 0, 5, 0, -107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0, 2, 0,114, 2, 0, 0,115, 2,111, 0, 5, 0,107, 0,109, 2, 7, 0, 92, 0, - 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,112, 0, 5, 0,107, 0,109, 2, 32, 0,119, 2, 0, 0, 72, 0, 4, 0, 14, 1, - 4, 0, 19, 0,113, 0, 13, 0,107, 0,109, 2, 32, 0,120, 2, 32, 0,121, 2, 32, 0,122, 2, 32, 0,123, 2, 7, 0,124, 2, - 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 4, 0, 94, 0, 4, 0,129, 2,114, 0, 5, 0, -107, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, 32, 0,132, 2,115, 0, 3, 0,107, 0,109, 2, 7, 0,133, 2, - 4, 0, 94, 0,116, 0, 10, 0,107, 0,109, 2, 7, 0,134, 2, 4, 0,135, 2, 4, 0, 37, 0, 2, 0, 94, 0, 2, 0,136, 2, - 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2,117, 0, 3, 0,107, 0,109, 2, 7, 0, 37, 0, 4, 0, 17, 0, -118, 0, 11, 0,107, 0,109, 2, 53, 0,141, 2, 7, 0,142, 2, 4, 0,143, 2, 0, 0,140, 2, 7, 0,144, 2, 4, 0,145, 2, - 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 10, 0,107, 0,109, 2, 32, 0,149, 2, 48, 0,150, 2, - 4, 0, 94, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,120, 0, 3, 0, -107, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,121, 0, 5, 0,107, 0,109, 2, 7, 0,156, 2, 0, 0,140, 2, 2, 0, 19, 0, - 2, 0,157, 2,122, 0, 8, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,156, 2, 7, 0,221, 1, 7, 0,110, 0, 0, 0,140, 2, - 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 0,109, 2, 32, 0,158, 2, 0, 0,140, 2, 53, 0,141, 2, 32, 0,146, 2, - 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, - 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, 0, 0,147, 2, 7, 0,166, 2, 7, 0,167, 2, 7, 0, 43, 0, -124, 0, 7, 0,107, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, 4, 0, 70, 0, 32, 0,169, 0, 7, 0,170, 2, 0, 0,140, 2, -125, 0, 9, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,171, 2, 7, 0,172, 2, 7, 0,165, 2, 4, 0,173, 2, 4, 0,174, 2, - 7, 0,175, 2, 0, 0, 20, 0,126, 0, 1, 0,107, 0,109, 2,127, 0, 6, 0,107, 0,109, 2, 47, 0,139, 0,128, 0,176, 2, -129, 0,177, 2,130, 0,178, 2,131, 0,179, 2,132, 0, 14, 0,107, 0,109, 2, 82, 0,180, 2, 82, 0,181, 2, 82, 0,182, 2, - 82, 0,183, 2, 82, 0,184, 2, 82, 0,185, 2, 79, 0,186, 2, 4, 0,187, 2, 4, 0,188, 2, 2, 0,189, 2, 2, 0, 37, 0, - 7, 0,190, 2,133, 0,191, 2,134, 0, 3, 0,107, 0,109, 2,135, 0,192, 2,136, 0,191, 2,137, 0, 4, 0,107, 0,109, 2, - 32, 0,169, 0, 4, 0,193, 2, 4, 0, 37, 0,138, 0, 2, 0, 4, 0,194, 2, 7, 0,220, 1,139, 0, 2, 0, 4, 0,130, 0, - 4, 0,195, 2,140, 0, 20, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0,140, 2, 2, 0,196, 2, 2, 0,197, 2, 2, 0, 19, 0, - 2, 0, 37, 0, 7, 0,198, 2, 7, 0,199, 2, 4, 0, 54, 0, 4, 0,200, 2,139, 0,201, 2,138, 0,202, 2, 4, 0,203, 2, - 4, 0,204, 2, 4, 0,205, 2, 4, 0,195, 2, 7, 0,206, 2, 7, 0,207, 2, 7, 0,208, 2,141, 0, 8, 0,107, 0,109, 2, -142, 0,209, 2,135, 0,192, 2, 4, 0,210, 2, 4, 0,211, 2, 4, 0,212, 2, 2, 0, 19, 0, 2, 0, 57, 0,143, 0, 8, 0, -107, 0,109, 2, 32, 0, 45, 0, 2, 0,213, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, 7, 0,214, 2, 7, 0,215, 2, -144, 0, 5, 0,107, 0,109, 2, 4, 0,216, 2, 2, 0, 19, 0, 2, 0,217, 2, 7, 0,218, 2,145, 0, 7, 0,107, 0,109, 2, - 82, 0,219, 2, 4, 0,220, 2, 0, 0,221, 2, 0, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2,146, 0, 3, 0,107, 0,109, 2, -147, 0,225, 2,131, 0,179, 2,148, 0, 10, 0,107, 0,109, 2, 32, 0,226, 2, 32, 0,227, 2, 0, 0,228, 2, 7, 0,229, 2, - 2, 0,230, 2, 2, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 0, 0,115, 2,149, 0, 9, 0,107, 0,109, 2, 32, 0,234, 2, - 0, 0,228, 2, 7, 0,235, 2, 7, 0,236, 2, 0, 0, 14, 1, 0, 0,130, 2, 0, 0,237, 2, 0, 0, 37, 0,150, 0, 27, 0, - 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,238, 2, 2, 0, 19, 0, 2, 0,239, 2, 2, 0,240, 2, 2, 0,241, 2, - 2, 0, 70, 0, 0, 0,242, 2, 0, 0,243, 2, 0, 0,244, 2, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0,245, 2, 7, 0,246, 2, - 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 34, 0,251, 2, 36, 0, 80, 0, 38, 0,251, 1, 84, 0, 40, 2, - 7, 0,252, 2, 7, 0,253, 2,150, 0,254, 2,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, 0, 0, 20, 0, 69, 0, 3, 0, - 7, 0,255, 2, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,112, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 0, 3, - 4, 0, 1, 3, 4, 0, 2, 3, 4, 0, 3, 3, 0, 0, 4, 3, 32, 0, 38, 0, 32, 0, 5, 3, 32, 0, 6, 3, 32, 0, 7, 3, - 32, 0, 8, 3, 36, 0, 80, 0, 75, 0,250, 1, 69, 0,192, 1,152, 0, 9, 3,152, 0, 10, 3,153, 0, 11, 3, 9, 0, 2, 0, - 12, 0, 12, 3, 12, 0, 34, 2, 12, 0,211, 1, 12, 0, 13, 3, 12, 0, 14, 3, 64, 0,213, 1, 0, 0, 15, 3, 4, 0,214, 1, - 4, 0, 16, 3, 7, 0, 9, 1, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0,177, 0, 7, 0, 19, 3, 7, 0, 10, 1, 7, 0, 20, 3, - 7, 0, 21, 3, 7, 0,171, 2, 7, 0, 22, 3, 7, 0,213, 0, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 24, 3, 2, 0, 25, 3, - 2, 0, 26, 3, 2, 0, 27, 3, 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, 2, 0, 32, 3, 2, 0, 33, 3, - 2, 0, 34, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 7, 0, 39, 3, 7, 0, 26, 2, 7, 0, 40, 3, - 7, 0, 41, 3, 7, 0, 42, 3, 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3, 7, 0, 48, 3, - 7, 0, 49, 3, 0, 0, 50, 3, 0, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, 7, 0, 55, 3, 40, 0,126, 0, - 12, 0, 56, 3, 12, 0, 57, 3, 12, 0, 58, 3, 12, 0, 59, 3, 7, 0, 60, 3, 2, 0, 81, 2, 2, 0, 61, 3, 7, 0, 63, 2, - 4, 0, 62, 3, 4, 0, 63, 3,154, 0, 64, 3, 2, 0, 65, 3, 2, 0,220, 0, 7, 0, 66, 3, 12, 0, 67, 3, 12, 0, 68, 3, - 12, 0, 69, 3, 12, 0, 70, 3,155, 0, 71, 3,156, 0, 72, 3, 65, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, 2, 0, 76, 3, - 2, 0, 77, 3, 7, 0, 55, 2, 2, 0, 78, 3, 2, 0, 79, 3,147, 0, 80, 3,135, 0, 81, 3,135, 0, 82, 3, 4, 0, 83, 3, - 4, 0, 84, 3, 4, 0, 85, 3, 4, 0, 70, 0, 12, 0, 86, 3,157, 0, 14, 0,157, 0, 0, 0,157, 0, 1, 0, 32, 0, 38, 0, - 7, 0,171, 2, 7, 0, 11, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, 4, 0,174, 2, 4, 0, 87, 3, - 2, 0, 17, 0, 2, 0, 88, 3, 7, 0,175, 2,155, 0, 36, 0, 2, 0, 89, 3, 2, 0, 90, 3, 2, 0, 19, 0, 2, 0,165, 2, - 7, 0, 91, 3, 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, - 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, - 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, - 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 53, 0,170, 0,158, 0,119, 3, 7, 0,120, 3, 4, 0,118, 2, -159, 0, 6, 0,159, 0, 0, 0,159, 0, 1, 0, 4, 0,121, 3, 4, 0,122, 3, 7, 0, 2, 0, 9, 0,123, 3,131, 0, 12, 0, - 4, 0, 19, 0, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, 4, 0,129, 3, 4, 0,130, 3, - 0, 0,131, 3, 0, 0,132, 3, 0, 0,133, 3, 12, 0,134, 3,160, 0, 1, 0, 7, 0,228, 1,154, 0, 30, 0, 4, 0, 19, 0, - 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3, 4, 0,138, 3, 4, 0,139, 3, 4, 0,140, 3, 4, 0,141, 3, 7, 0,142, 3, - 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 7, 0,150, 3, + 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, + 40, 0, 1, 0, 0, 0, 84, 0, 0, 0, 85, 0, 4, 0, 23, 0, 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, + 4, 0, 87, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, + 42, 0, 15, 0, 27, 0, 31, 0, 0, 0, 93, 0, 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, + 4, 0, 98, 0, 4, 0, 99, 0, 12, 0,100, 0, 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, + 43, 0, 3, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0, 2, 0, 44, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 7, 0,108, 0, 7, 0,109, 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, 2, 0,119, 0, 2, 0,120, 0, 7, 0,121, 0, 36, 0, 80, 0, + 32, 0,122, 0, 45, 0, 13, 0, 4, 0,123, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0, + 2, 0, 19, 0, 2, 0,129, 0, 2, 0,130, 0, 2, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 46, 0,134, 0, 47, 0, 32, 0, + 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,135, 0, 48, 0,136, 0, 49, 0,137, 0, 50, 0,138, 0, 2, 0,129, 0, 2, 0, 19, 0, + 2, 0,139, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, + 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 4, 0,147, 0, 4, 0,148, 0, 43, 0,149, 0, 30, 0,150, 0, 0, 0,151, 0, + 7, 0,152, 0, 4, 0,153, 0, 2, 0,154, 0, 2, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, 7, 0,159, 0, + 51, 0, 31, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 2, 0,163, 0, 32, 0,164, 0, 52, 0,165, 0, 0, 0,166, 0, + 0, 0,167, 0, 0, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, 7, 0,171, 0, 7, 0,172, 0, 2, 0,173, 0, 2, 0,174, 0, + 2, 0,175, 0, 2, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, + 7, 0,183, 0, 7, 0,184, 0, 7, 0, 57, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, + 53, 0, 15, 0, 0, 0,190, 0, 9, 0,191, 0, 0, 0,192, 0, 0, 0,193, 0, 4, 0,194, 0, 4, 0,195, 0, 9, 0,196, 0, + 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 4, 0,200, 0, 9, 0,201, 0, 9, 0,202, 0, 4, 0,203, 0, 4, 0, 37, 0, + 54, 0, 6, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, 7, 0,204, 0, 7, 0, 67, 0, 4, 0, 64, 0, 55, 0, 5, 0, + 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,205, 0, 54, 0,199, 0, 56, 0, 17, 0, 32, 0,164, 0, 47, 0,206, 0, + 57, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 2, 0, 17, 0, 2, 0,210, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,211, 0, + 4, 0,212, 0, 2, 0,213, 0, 2, 0,214, 0, 4, 0,129, 0, 4, 0,140, 0, 2, 0,215, 0, 2, 0,216, 0, 52, 0, 59, 0, + 27, 0, 31, 0, 39, 0, 75, 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, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, + 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, 2, 0,237, 0, 2, 0,238, 0, + 2, 0,239, 0, 2, 0,240, 0, 2, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,210, 0, + 7, 0,244, 0, 7, 0,245, 0, 7, 0,246, 0, 7, 0,247, 0, 4, 0,248, 0, 4, 0,249, 0, 2, 0,250, 0, 2, 0,251, 0, + 2, 0,252, 0, 2, 0,127, 0, 4, 0, 23, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 7, 0,253, 0, 7, 0,254, 0, + 7, 0,186, 0, 45, 0,255, 0, 58, 0, 0, 1, 36, 0, 80, 0, 47, 0,206, 0, 53, 0, 1, 1, 55, 0, 2, 1, 56, 0, 3, 1, + 30, 0,150, 0, 0, 0, 4, 1, 0, 0, 5, 1, 59, 0, 8, 0, 7, 0, 6, 1, 7, 0, 7, 1, 7, 0,172, 0, 4, 0, 19, 0, + 7, 0, 8, 1, 7, 0, 9, 1, 7, 0, 10, 1, 32, 0, 45, 0, 60, 0, 82, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 11, 1, 2, 0,174, 0, 2, 0, 12, 1, 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, + 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 7, 0, 17, 1, 7, 0, 18, 1, 7, 0, 19, 1, 7, 0, 20, 1, + 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 61, 0, 24, 1, 2, 0, 25, 1, 2, 0, 70, 0, 7, 0,110, 0, 7, 0,111, 0, + 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 28, 1, 2, 0, 29, 1, 2, 0, 30, 1, 2, 0, 31, 1, 2, 0, 32, 1, 0, 0, 33, 1, + 0, 0, 34, 1, 2, 0, 35, 1, 2, 0, 36, 1, 2, 0, 37, 1, 2, 0, 38, 1, 2, 0, 39, 1, 7, 0, 40, 1, 7, 0, 41, 1, + 7, 0, 42, 1, 7, 0, 43, 1, 2, 0, 44, 1, 2, 0, 43, 0, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 47, 1, 2, 0, 48, 1, + 7, 0, 49, 1, 7, 0, 50, 1, 7, 0, 51, 1, 7, 0, 52, 1, 7, 0, 53, 1, 7, 0, 54, 1, 7, 0, 55, 1, 7, 0, 56, 1, + 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, 2, 0, 61, 1, 2, 0, 62, 1, 4, 0, 63, 1, 4, 0, 64, 1, + 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 67, 1, 2, 0, 68, 1, 7, 0, 69, 1, 7, 0, 70, 1, 7, 0, 71, 1, 7, 0, 72, 1, + 2, 0, 73, 1, 2, 0, 74, 1, 36, 0, 80, 0, 51, 0, 75, 1, 2, 0, 76, 1, 2, 0, 77, 1, 30, 0,150, 0, 62, 0, 2, 0, + 27, 0, 31, 0, 36, 0, 80, 0, 63, 0,129, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 78, 1, 2, 0, 19, 0, 7, 0,180, 0, + 7, 0,181, 0, 7, 0,182, 0, 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, 7, 0, 87, 1, 7, 0, 88, 1, 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, 7, 0,100, 1, + 7, 0,101, 1, 7, 0,102, 1, 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, + 0, 0,109, 1, 0, 0,110, 1, 7, 0,111, 1, 7, 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, 2, 0,119, 1, 2, 0,120, 1, 4, 0, 11, 1, 4, 0,121, 1, 2, 0,122, 1, 2, 0,123, 1, + 2, 0,124, 1, 2, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, + 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 0, 0,136, 1, 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, + 4, 0,140, 1, 0, 0,141, 1, 0, 0, 45, 1, 0, 0,142, 1, 0, 0, 4, 1, 2, 0,143, 1, 2, 0,144, 1, 2, 0, 76, 1, + 2, 0,145, 1, 2, 0,146, 1, 2, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, + 2, 0,160, 0, 2, 0,161, 0, 55, 0,153, 1, 55, 0,154, 1, 0, 0,155, 1, 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, + 2, 0,159, 1, 2, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, 51, 0, 75, 1, 58, 0, 0, 1, 36, 0, 80, 0, 64, 0,163, 1, + 30, 0,150, 0, 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 2, 0,169, 1, 2, 0, 70, 0, + 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, 2, 0,179, 1, 2, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, + 4, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, 12, 0,189, 1, 65, 0, 4, 0, 27, 0, 31, 0, 0, 0,190, 1, 66, 0, 2, 0, + 43, 0,149, 0, 67, 0, 26, 0, 67, 0, 0, 0, 67, 0, 1, 0, 68, 0,191, 1, 4, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, + 4, 0,195, 1, 4, 0,196, 1, 4, 0,197, 1, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,198, 1, 2, 0,199, 1, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,200, 1, 7, 0,201, 1, 7, 0,202, 1, 7, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, + 7, 0,206, 1, 7, 0, 23, 0, 7, 0,207, 1, 7, 0,208, 1, 69, 0, 17, 0, 27, 0, 31, 0, 68, 0,191, 1, 12, 0,209, 1, + 12, 0,210, 1, 12, 0,211, 1, 36, 0, 80, 0, 63, 0,212, 1, 2, 0, 19, 0, 2, 0,213, 1, 4, 0,173, 0, 7, 0, 6, 1, + 7, 0,172, 0, 7, 0, 7, 1, 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 67, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, + 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 2, 0, 55, 0, 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, + 0, 0,226, 1, 0, 0,227, 1, 34, 0, 7, 0, 7, 0,228, 1, 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, + 7, 0,221, 1, 7, 0, 37, 0, 70, 0, 21, 0, 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, + 2, 0, 19, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, + 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, + 71, 0, 5, 0, 2, 0,243, 1, 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 72, 0, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 8, 0, 7, 0,244, 1, 73, 0, 62, 0, 27, 0, 31, 0, 39, 0, 75, 0, 68, 0,191, 1, 12, 0,245, 1, + 12, 0,210, 1, 12, 0,246, 1, 32, 0,247, 1, 32, 0,248, 1, 32, 0,249, 1, 36, 0, 80, 0, 74, 0,250, 1, 38, 0,251, 1, + 63, 0,212, 1, 12, 0,252, 1, 7, 0, 6, 1, 7, 0,172, 0, 7, 0, 7, 1, 4, 0,173, 0, 2, 0,253, 1, 2, 0,213, 1, + 2, 0, 19, 0, 2, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, + 2, 0, 3, 2, 4, 0, 4, 2, 34, 0, 5, 2, 2, 0, 23, 0, 2, 0, 95, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, + 7, 0, 16, 2, 0, 0, 17, 2, 75, 0, 18, 2, 76, 0, 19, 2, 0, 0, 20, 2, 65, 0, 21, 2, 65, 0, 22, 2, 65, 0, 23, 2, + 65, 0, 24, 2, 4, 0, 25, 2, 7, 0, 26, 2, 4, 0, 27, 2, 4, 0, 28, 2, 72, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, + 71, 0, 32, 2, 71, 0, 33, 2, 77, 0, 39, 0, 27, 0, 31, 0, 68, 0,191, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, + 63, 0,212, 1, 78, 0, 35, 2, 79, 0, 36, 2, 80, 0, 37, 2, 81, 0, 38, 2, 82, 0, 39, 2, 83, 0, 40, 2, 84, 0, 41, 2, + 85, 0, 42, 2, 77, 0, 43, 2, 86, 0, 44, 2, 87, 0, 45, 2, 88, 0, 46, 2, 88, 0, 47, 2, 88, 0, 48, 2, 4, 0, 54, 0, + 4, 0, 49, 2, 4, 0, 50, 2, 4, 0, 51, 2, 4, 0, 52, 2, 4, 0,173, 0, 7, 0, 6, 1, 7, 0,172, 0, 7, 0, 7, 1, + 7, 0, 53, 2, 4, 0, 54, 2, 2, 0, 55, 2, 2, 0, 19, 0, 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,213, 1, 2, 0, 58, 2, + 89, 0, 59, 2, 90, 0, 60, 2, 80, 0, 8, 0, 9, 0, 61, 2, 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, + 2, 0, 11, 1, 2, 0, 65, 2, 2, 0, 66, 2, 78, 0, 7, 0, 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, + 2, 0,229, 1, 0, 0, 71, 2, 0, 0, 19, 0, 82, 0, 5, 0, 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, + 2, 0, 19, 0, 91, 0, 2, 0, 4, 0, 74, 2, 7, 0,220, 1, 83, 0, 3, 0, 91, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, + 81, 0, 6, 0, 7, 0, 77, 2, 2, 0, 78, 2, 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,179, 0, 84, 0, 4, 0, + 0, 0,204, 0, 0, 0,180, 0, 0, 0,181, 0, 0, 0,182, 0, 92, 0, 6, 0, 47, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, + 2, 0, 11, 1, 2, 0, 65, 2, 2, 0, 66, 2, 93, 0, 1, 0, 7, 0, 79, 2, 94, 0, 5, 0, 0, 0,204, 0, 0, 0,180, 0, + 0, 0,181, 0, 0, 0,182, 0, 4, 0, 37, 0, 85, 0, 1, 0, 7, 0, 80, 2, 86, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, + 79, 0, 7, 0, 7, 0, 62, 2, 47, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 11, 1, 2, 0, 65, 2, 2, 0, 66, 2, + 95, 0, 1, 0, 7, 0, 82, 2, 96, 0, 1, 0, 4, 0, 83, 2, 97, 0, 1, 0, 0, 0, 84, 2, 98, 0, 1, 0, 7, 0, 62, 2, + 99, 0, 3, 0, 4, 0, 85, 2, 0, 0, 92, 0, 7, 0, 86, 2,101, 0, 4, 0, 7, 0,204, 0, 7, 0,180, 0, 7, 0,181, 0, + 7, 0,182, 0,102, 0, 1, 0,101, 0, 63, 2,103, 0, 5, 0, 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, + 0, 0,179, 0,104, 0, 2, 0, 4, 0, 89, 2, 4, 0, 88, 2,105, 0, 10, 0,105, 0, 0, 0,105, 0, 1, 0,103, 0, 90, 2, +102, 0, 91, 2,104, 0, 92, 2, 4, 0, 54, 0, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 37, 0, 81, 0, 93, 2, 89, 0, 14, 0, + 12, 0, 94, 2, 81, 0, 93, 2, 0, 0, 95, 2, 0, 0, 96, 2, 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, + 0, 0,101, 2, 0, 0, 19, 0, 88, 0, 46, 2, 88, 0, 48, 2, 2, 0,102, 2, 0, 0,103, 2, 90, 0, 8, 0, 4, 0,104, 2, + 4, 0,105, 2, 78, 0,106, 2, 82, 0,107, 2, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,106, 0, 7, 0, +106, 0, 0, 0,106, 0, 1, 0, 4, 0, 17, 0, 4, 0, 11, 1, 0, 0, 20, 0, 46, 0,134, 0, 0, 0,108, 2,107, 0, 7, 0, +106, 0,109, 2, 2, 0,110, 2, 2, 0, 94, 2, 2, 0,111, 2, 2, 0, 90, 0, 9, 0,112, 2, 9, 0,113, 2,108, 0, 3, 0, +106, 0,109, 2, 32, 0,164, 0, 0, 0, 20, 0,109, 0, 5, 0,106, 0,109, 2, 32, 0,164, 0, 0, 0, 20, 0, 2, 0,114, 2, + 0, 0,115, 2,110, 0, 5, 0,106, 0,109, 2, 7, 0, 88, 0, 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,111, 0, 5, 0, +106, 0,109, 2, 32, 0,119, 2, 0, 0, 72, 0, 4, 0, 11, 1, 4, 0, 19, 0,112, 0, 13, 0,106, 0,109, 2, 32, 0,120, 2, + 32, 0,121, 2, 32, 0,122, 2, 32, 0,123, 2, 7, 0,124, 2, 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, + 4, 0,128, 2, 4, 0, 90, 0, 4, 0,129, 2,113, 0, 5, 0,106, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, + 32, 0,132, 2,114, 0, 3, 0,106, 0,109, 2, 7, 0,133, 2, 4, 0, 90, 0,115, 0, 10, 0,106, 0,109, 2, 7, 0,134, 2, + 4, 0,135, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,136, 2, 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2, +116, 0, 3, 0,106, 0,109, 2, 7, 0, 37, 0, 4, 0, 17, 0,117, 0, 11, 0,106, 0,109, 2, 52, 0,141, 2, 7, 0,142, 2, + 4, 0,143, 2, 0, 0,140, 2, 7, 0,144, 2, 4, 0,145, 2, 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0, +118, 0, 10, 0,106, 0,109, 2, 32, 0,149, 2, 47, 0,150, 2, 4, 0, 90, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, + 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 3, 0,106, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,120, 0, 5, 0, +106, 0,109, 2, 7, 0,156, 2, 0, 0,140, 2, 2, 0, 19, 0, 2, 0,157, 2,121, 0, 8, 0,106, 0,109, 2, 32, 0,164, 0, + 7, 0,156, 2, 7, 0,221, 1, 7, 0,106, 0, 0, 0,140, 2, 2, 0, 19, 0, 2, 0, 17, 0,122, 0, 21, 0,106, 0,109, 2, + 32, 0,158, 2, 0, 0,140, 2, 52, 0,141, 2, 32, 0,146, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, + 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, + 0, 0,147, 2, 7, 0,166, 2, 7, 0,167, 2, 7, 0, 43, 0,123, 0, 7, 0,106, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, + 4, 0, 70, 0, 32, 0,164, 0, 7, 0,170, 2, 0, 0,140, 2,124, 0, 9, 0,106, 0,109, 2, 32, 0,164, 0, 7, 0,171, 2, + 7, 0,172, 2, 7, 0,165, 2, 4, 0,173, 2, 4, 0,174, 2, 7, 0,175, 2, 0, 0, 20, 0,125, 0, 1, 0,106, 0,109, 2, +126, 0, 6, 0,106, 0,109, 2, 46, 0,134, 0,127, 0,176, 2,128, 0,177, 2,129, 0,178, 2,130, 0,179, 2,131, 0, 14, 0, +106, 0,109, 2, 81, 0,180, 2, 81, 0,181, 2, 81, 0,182, 2, 81, 0,183, 2, 81, 0,184, 2, 81, 0,185, 2, 78, 0,186, 2, + 4, 0,187, 2, 4, 0,188, 2, 2, 0,189, 2, 2, 0, 37, 0, 7, 0,190, 2,132, 0,191, 2,133, 0, 7, 0,106, 0,109, 2, + 81, 0,180, 2, 81, 0,192, 2,134, 0,193, 2,135, 0,191, 2, 4, 0,194, 2, 4, 0,187, 2,136, 0, 4, 0,106, 0,109, 2, + 32, 0,164, 0, 4, 0,195, 2, 4, 0, 37, 0,137, 0, 2, 0, 4, 0,196, 2, 7, 0,220, 1,138, 0, 2, 0, 4, 0,125, 0, + 4, 0,197, 2,139, 0, 20, 0,106, 0,109, 2, 32, 0,164, 0, 0, 0,140, 2, 2, 0,198, 2, 2, 0,199, 2, 2, 0, 19, 0, + 2, 0, 37, 0, 7, 0,200, 2, 7, 0,201, 2, 4, 0, 54, 0, 4, 0,202, 2,138, 0,203, 2,137, 0,204, 2, 4, 0,205, 2, + 4, 0,206, 2, 4, 0,207, 2, 4, 0,197, 2, 7, 0,208, 2, 7, 0,209, 2, 7, 0,210, 2,140, 0, 8, 0,106, 0,109, 2, +141, 0,211, 2,134, 0,193, 2, 4, 0,212, 2, 4, 0,213, 2, 4, 0,214, 2, 2, 0, 19, 0, 2, 0, 57, 0,142, 0, 8, 0, +106, 0,109, 2, 32, 0, 45, 0, 2, 0,215, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, 7, 0,216, 2, 7, 0,217, 2, +143, 0, 5, 0,106, 0,109, 2, 4, 0,218, 2, 2, 0, 19, 0, 2, 0,219, 2, 7, 0,220, 2,144, 0, 7, 0,106, 0,109, 2, + 81, 0,221, 2, 4, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2, 0, 0,225, 2, 0, 0,226, 2,145, 0, 3, 0,106, 0,109, 2, +146, 0,227, 2,130, 0,179, 2,147, 0, 10, 0,106, 0,109, 2, 32, 0,228, 2, 32, 0,229, 2, 0, 0,230, 2, 7, 0,231, 2, + 2, 0,232, 2, 2, 0,233, 2, 0, 0,234, 2, 0, 0,235, 2, 0, 0,115, 2,148, 0, 9, 0,106, 0,109, 2, 32, 0,236, 2, + 0, 0,230, 2, 7, 0,237, 2, 7, 0,238, 2, 0, 0, 11, 1, 0, 0,130, 2, 0, 0,239, 2, 0, 0, 37, 0,149, 0, 27, 0, + 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,240, 2, 2, 0, 19, 0, 2, 0,241, 2, 2, 0,242, 2, 2, 0,243, 2, + 2, 0, 70, 0, 0, 0,244, 2, 0, 0,245, 2, 0, 0,246, 2, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0,247, 2, 7, 0,248, 2, + 7, 0,249, 2, 7, 0,250, 2, 7, 0,251, 2, 7, 0,252, 2, 34, 0,253, 2, 36, 0, 80, 0, 38, 0,251, 1, 83, 0, 40, 2, + 7, 0,254, 2, 7, 0,255, 2,149, 0, 0, 3,150, 0, 3, 0,150, 0, 0, 0,150, 0, 1, 0, 0, 0, 20, 0, 68, 0, 3, 0, + 7, 0, 1, 3, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,111, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 2, 3, + 4, 0, 3, 3, 4, 0, 4, 3, 4, 0, 5, 3, 0, 0, 6, 3, 32, 0, 38, 0, 32, 0, 7, 3, 32, 0, 8, 3, 32, 0, 9, 3, + 32, 0, 10, 3, 36, 0, 80, 0, 74, 0,250, 1, 68, 0,191, 1,151, 0, 11, 3,151, 0, 12, 3,152, 0, 13, 3, 9, 0, 2, 0, + 12, 0, 14, 3, 12, 0, 34, 2, 12, 0,210, 1, 12, 0, 15, 3, 12, 0, 16, 3, 63, 0,212, 1, 0, 0, 17, 3, 4, 0,213, 1, + 4, 0, 18, 3, 7, 0, 6, 1, 7, 0, 19, 3, 7, 0, 20, 3, 7, 0,172, 0, 7, 0, 21, 3, 7, 0, 7, 1, 7, 0, 22, 3, + 7, 0, 23, 3, 7, 0,171, 2, 7, 0, 24, 3, 7, 0,208, 0, 4, 0, 25, 3, 2, 0, 19, 0, 2, 0, 26, 3, 2, 0, 27, 3, + 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, 2, 0, 32, 3, 2, 0, 33, 3, 2, 0, 34, 3, 2, 0, 35, 3, + 2, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 4, 0, 39, 3, 4, 0, 40, 3, 7, 0, 41, 3, 7, 0, 26, 2, 7, 0, 42, 3, + 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3, 7, 0, 48, 3, 7, 0, 49, 3, 7, 0, 50, 3, + 7, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 0, 0, 54, 3, 0, 0, 55, 3, 7, 0, 56, 3, 7, 0, 57, 3, 12, 0, 58, 3, + 12, 0, 59, 3, 12, 0, 60, 3, 12, 0, 61, 3, 7, 0, 62, 3, 2, 0, 81, 2, 2, 0, 63, 3, 7, 0, 63, 2, 4, 0, 64, 3, + 4, 0, 65, 3,153, 0, 66, 3, 2, 0, 67, 3, 2, 0,215, 0, 7, 0, 68, 3, 12, 0, 69, 3, 12, 0, 70, 3, 12, 0, 71, 3, + 12, 0, 72, 3,154, 0, 73, 3,155, 0, 74, 3, 64, 0, 75, 3, 2, 0, 76, 3, 2, 0, 77, 3, 2, 0, 78, 3, 2, 0, 79, 3, + 7, 0, 55, 2, 2, 0, 80, 3, 2, 0, 81, 3,146, 0, 82, 3,134, 0, 83, 3,134, 0, 84, 3, 4, 0, 85, 3, 4, 0, 86, 3, + 4, 0, 87, 3, 4, 0, 70, 0, 12, 0, 88, 3,156, 0, 14, 0,156, 0, 0, 0,156, 0, 1, 0, 32, 0, 38, 0, 7, 0,171, 2, + 7, 0, 8, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, 4, 0,174, 2, 4, 0, 89, 3, 2, 0, 17, 0, + 2, 0, 90, 3, 7, 0,175, 2,154, 0, 36, 0, 2, 0, 91, 3, 2, 0, 92, 3, 2, 0, 19, 0, 2, 0,165, 2, 7, 0, 93, 3, + 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, + 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, + 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, 7, 0,115, 3, 7, 0,116, 3, 2, 0,117, 3, + 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, 52, 0,165, 0,157, 0,121, 3, 7, 0,122, 3, 4, 0,118, 2,158, 0, 6, 0, +158, 0, 0, 0,158, 0, 1, 0, 4, 0,123, 3, 4, 0,124, 3, 7, 0, 2, 0, 9, 0,125, 3,130, 0, 15, 0, 4, 0, 19, 0, + 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, 4, 0,129, 3, 4, 0,130, 3, 4, 0,131, 3, 4, 0,124, 3, 4, 0, 81, 2, + 4, 0, 57, 0, 0, 0,132, 3, 0, 0,133, 3, 0, 0,134, 3, 0, 0,135, 3, 12, 0,136, 3,159, 0, 1, 0, 7, 0,228, 1, +153, 0, 30, 0, 4, 0, 19, 0, 7, 0,137, 3, 7, 0,138, 3, 7, 0,139, 3, 4, 0,140, 3, 4, 0,141, 3, 4, 0,142, 3, + 4, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 7, 0,150, 3, 7, 0,151, 3, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, 7, 0,157, 3, 7, 0,158, 3, - 7, 0,159, 3, 4, 0,160, 3, 4, 0,161, 3, 7, 0,162, 3, 7, 0, 46, 3,156, 0, 44, 0,142, 0,163, 3, 4, 0,122, 3, - 4, 0,164, 3,161, 0,165, 3,162, 0,166, 3, 7, 0, 37, 0, 7, 0,167, 3, 7, 0,168, 3, 7, 0,169, 3, 7, 0,170, 3, - 7, 0,171, 3, 7, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, 2, 0,177, 3, 2, 0,178, 3, - 7, 0,179, 3, 7, 0,180, 3, 4, 0,131, 0, 4, 0,181, 3, 4, 0,182, 3, 2, 0,183, 3, 2, 0,184, 3,160, 0,185, 3, - 4, 0,186, 3, 4, 0, 82, 0, 7, 0,187, 3, 7, 0,188, 3, 7, 0,189, 3, 7, 0,190, 3, 2, 0,191, 3, 2, 0,192, 3, - 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3, 2, 0,197, 3, 2, 0,198, 3,163, 0,199, 3, 7, 0,200, 3, - 7, 0,201, 3,131, 0,202, 3,147, 0, 48, 0, 2, 0, 17, 0, 2, 0,203, 3, 2, 0,204, 3, 2, 0,205, 3, 7, 0,206, 3, - 2, 0,207, 3, 2, 0,208, 3, 7, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, - 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 4, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, 78, 0,222, 3, - 78, 0,223, 3, 78, 0,224, 3, 0, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 36, 0, 80, 0, 2, 0,228, 3, 0, 0,229, 3, - 0, 0,230, 3, 7, 0,231, 3, 4, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 4, 0,235, 3, 4, 0, 19, 0, 7, 0,236, 3, - 7, 0,237, 3, 7, 0,238, 3, 82, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 7, 0,243, 3, 7, 0,244, 3, - 7, 0,245, 3, 7, 0,246, 3, 4, 0,247, 3,164, 0, 72, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,179, 0, 2, 0, 15, 1, - 2, 0, 48, 1, 2, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, - 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 86, 1, 7, 0, 88, 1, 7, 0, 87, 1, 7, 0, 1, 4, 4, 0, 2, 4, 7, 0, 3, 4, - 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, 2, 0, 10, 4, 2, 0, 14, 1, - 2, 0, 11, 4, 2, 0, 12, 4, 2, 0, 13, 4, 2, 0, 14, 4, 2, 0, 15, 4, 2, 0, 16, 4, 7, 0, 17, 4, 7, 0, 18, 4, - 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, - 7, 0, 27, 4, 7, 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, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 2, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, - 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 19, 0, 7, 0, 48, 4, 7, 0, 49, 4, - 36, 0, 80, 0, 52, 0, 78, 1, 30, 0,155, 0, 40, 0,126, 0,165, 0, 8, 0,165, 0, 0, 0,165, 0, 1, 0, 4, 0, 23, 3, - 4, 0, 50, 4, 4, 0, 19, 0, 2, 0, 51, 4, 2, 0, 52, 4, 32, 0,169, 0,166, 0, 13, 0, 9, 0, 53, 4, 9, 0, 54, 4, - 4, 0, 55, 4, 4, 0, 56, 4, 4, 0, 57, 4, 4, 0, 58, 4, 4, 0, 59, 4, 4, 0, 60, 4, 4, 0, 61, 4, 4, 0, 62, 4, - 4, 0, 63, 4, 4, 0, 37, 0, 0, 0, 64, 4,167, 0, 5, 0, 9, 0, 65, 4, 9, 0, 66, 4, 4, 0, 67, 4, 4, 0, 70, 0, - 0, 0, 68, 4,168, 0, 13, 0, 4, 0, 17, 0, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4, - 4, 0, 94, 0, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, 26, 0, 30, 0,169, 0, 4, 0, - 4, 0, 79, 4, 7, 0, 80, 4, 2, 0, 19, 0, 2, 0, 81, 4,170, 0, 11, 0,170, 0, 0, 0,170, 0, 1, 0, 0, 0, 20, 0, - 64, 0, 82, 4, 65, 0, 83, 4, 4, 0, 23, 3, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 37, 0, 4, 0, 86, 4, 4, 0, 87, 4, -171, 0,131, 0,166, 0, 88, 4,167, 0, 89, 4,168, 0, 90, 4,169, 0, 91, 4, 4, 0, 92, 4, 4, 0,131, 0, 4, 0,181, 3, - 4, 0, 93, 4, 4, 0, 94, 4, 4, 0, 95, 4, 4, 0, 96, 4, 2, 0, 19, 0, 2, 0, 97, 4, 7, 0, 26, 2, 7, 0, 98, 4, - 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 2, 0,103, 4, 2, 0,104, 4, 2, 0,105, 4, 2, 0,106, 4, - 2, 0,219, 0, 2, 0,107, 4, 2, 0,108, 4, 2, 0,118, 3, 2, 0,109, 4, 2, 0,110, 4, 2, 0, 35, 1, 2, 0,110, 0, - 2, 0,111, 4, 2, 0,112, 4, 2, 0,113, 4, 2, 0,114, 4, 2, 0,115, 4, 2, 0,116, 4, 2, 0,117, 4, 2, 0,118, 4, - 2, 0,119, 4, 2, 0, 36, 1, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, 4, 0,124, 4, 4, 0, 14, 1, - 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 24, 0,131, 4, 24, 0,132, 4, - 23, 0,133, 4, 12, 0,134, 4, 2, 0,135, 4, 2, 0, 37, 0, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, - 4, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, - 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, 2, 0,154, 4, 2, 0,155, 4, - 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, - 4, 0,164, 4, 4, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 7, 0,169, 4, 4, 0,170, 4, 4, 0,171, 4, - 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, - 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 0, 0,183, 4, 0, 0,184, 4, 4, 0,185, 4, 2, 0,186, 4, 2, 0,161, 1, - 0, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 7, 0,192, 4, 7, 0,193, 4, 2, 0,194, 4, - 2, 0,195, 4, 7, 0,196, 4, 2, 0,197, 4, 2, 0,198, 4, 4, 0,199, 4, 2, 0,200, 4, 2, 0,201, 4, 2, 0,202, 4, - 2, 0,203, 4, 7, 0,204, 4, 7, 0, 70, 0, 43, 0,205, 4,172, 0, 9, 0,172, 0, 0, 0,172, 0, 1, 0, 0, 0, 20, 0, - 2, 0,206, 4, 2, 0,207, 4, 2, 0,208, 4, 2, 0, 43, 0, 7, 0,209, 4, 7, 0, 70, 0,173, 0, 5, 0, 7, 0,210, 4, - 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,161, 1,174, 0, 5, 0,174, 0, 0, 0,174, 0, 1, 0, 4, 0,121, 3, - 0, 0,131, 3, 4, 0, 19, 0,175, 0, 6, 0,176, 0,211, 4, 2, 0, 19, 0, 2, 0,212, 4, 2, 0,213, 4, 2, 0,214, 4, - 9, 0,215, 4,177, 0, 4, 0, 2, 0,110, 0, 2, 0,142, 2, 2, 0,124, 3, 2, 0,216, 4,178, 0, 10, 0, 2, 0, 19, 0, - 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4,177, 0,220, 4, 9, 0,215, 4, 7, 0,221, 4, 4, 0,222, 4, 4, 0,223, 4, - 4, 0, 37, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 0,224, 4, 7, 0,225, 4,180, 0, 8, 0,181, 0,226, 4, -176, 0,211, 4, 7, 0,227, 4, 4, 0, 94, 0, 0, 0,228, 4, 0, 0,229, 4, 0, 0,230, 4, 0, 0,231, 4,182, 0, 9, 0, -176, 0,211, 4, 7, 0,232, 4, 7, 0,233, 4, 2, 0, 14, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,234, 4, 84, 0,235, 4, - 9, 0,215, 4,183, 0, 72, 0,182, 0,236, 4,182, 0,237, 4,180, 0,238, 4, 7, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, - 7, 0,242, 4, 7, 0,243, 4, 2, 0,124, 3, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, 2, 0,248, 4, - 2, 0,223, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, - 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5,175, 0, 7, 5, -178, 0, 8, 5, 7, 0, 9, 5, 7, 0, 10, 5, 7, 0, 11, 5, 2, 0, 12, 5, 2, 0, 70, 0, 0, 0, 13, 5, 0, 0, 14, 5, - 0, 0, 15, 5, 0, 0, 16, 5, 0, 0, 17, 5, 0, 0, 18, 5, 2, 0, 19, 5, 7, 0, 20, 5, 7, 0, 21, 5, 7, 0, 22, 5, - 7, 0, 23, 5, 7, 0, 24, 5, 7, 0, 25, 5, 7, 0, 26, 5, 7, 0, 27, 5, 7, 0, 28, 5, 7, 0, 29, 5, 2, 0, 30, 5, - 0, 0, 31, 5, 0, 0, 32, 5, 0, 0, 33, 5, 0, 0, 34, 5, 32, 0, 35, 5, 0, 0, 36, 5, 0, 0, 37, 5, 0, 0, 38, 5, - 0, 0, 39, 5, 0, 0, 40, 5, 0, 0, 41, 5, 0, 0, 42, 5, 0, 0, 43, 5, 2, 0, 44, 5, 2, 0, 45, 5, 2, 0, 46, 5, - 2, 0, 47, 5, 2, 0, 48, 5,184, 0, 8, 0, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 4, 0, 52, 5, 4, 0, 53, 5, - 4, 0, 54, 5, 4, 0, 54, 0, 4, 0, 50, 2, 47, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0, 55, 5,164, 0, 56, 5, - 47, 0, 57, 5, 48, 0,211, 0, 12, 0, 58, 5,165, 0, 59, 5, 32, 0, 60, 5, 7, 0, 61, 5, 7, 0, 62, 5, 7, 0, 63, 5, - 7, 0, 64, 5, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 7, 1, 59, 0, 3, 1,185, 0, 65, 5,173, 0, 66, 5,183, 0, 67, 5, -186, 0, 68, 5,171, 0,185, 0,169, 0, 91, 4, 40, 0,126, 0, 12, 0,104, 0, 12, 0, 69, 5,187, 0, 70, 5, 2, 0, 71, 5, - 2, 0, 72, 5, 2, 0,220, 0, 2, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 12, 0, 76, 5,188, 0, 6, 0, 48, 0,211, 0, - 46, 0, 2, 1, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,110, 0, 7, 0, 77, 5,189, 0, 35, 0, 7, 0, 78, 5, 7, 0, 79, 5, - 7, 0, 80, 5, 7, 0, 81, 5, 7, 0, 82, 5, 7, 0, 83, 5, 7, 0, 84, 5, 7, 0, 85, 5, 7, 0, 86, 5, 7, 0, 21, 1, - 7, 0, 87, 5, 7, 0, 88, 5, 7, 0, 89, 5, 7, 0, 90, 5, 7, 0,176, 0, 2, 0, 91, 5, 2, 0, 92, 5, 4, 0, 93, 5, - 2, 0, 94, 5, 2, 0, 95, 5, 2, 0, 96, 5, 2, 0, 97, 5, 7, 0, 98, 5, 69, 0, 99, 5,190, 0,100, 5,189, 0,101, 5, -191, 0,102, 5,192, 0,103, 5,193, 0,104, 5,194, 0,105, 5,195, 0,106, 5, 7, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, - 4, 0,161, 1,196, 0, 54, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, - 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 43, 0, 4, 0,114, 5, 2, 0, 96, 5, 2, 0, 97, 5, 32, 0, 55, 5, 32, 0,115, 5, -188, 0,116, 5,196, 0,101, 5, 0, 0,117, 5, 4, 0, 23, 3, 4, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 2, 0,121, 5, - 2, 0,122, 5, 2, 0,161, 1, 2, 0, 19, 0, 2, 0,123, 5, 2, 0,124, 5, 7, 0,116, 0, 7, 0,125, 5, 7, 0,126, 5, - 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,176, 0, 7, 0, 61, 5, 2, 0,130, 5, 2, 0, 65, 1, 2, 0,131, 5, - 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 4, 0,139, 5, - 12, 0,140, 5, 2, 0,141, 5, 2, 0, 64, 2, 2, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, 9, 0,145, 5,190, 0,100, 5, -198, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,146, 5, 23, 0,147, 5, 23, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, - 7, 0,151, 5, 7, 0,152, 5, 2, 0,153, 5, 2, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 2, 0,157, 5, 2, 0, 19, 0, - 2, 0,158, 5, 2, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 2, 0,162, 5, 2, 0,122, 5, 7, 0,163, 5,197, 0, 6, 0, -197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,199, 0, 8, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,200, 0,164, 5, 47, 0,139, 0,201, 0, 14, 0, -197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,202, 0,166, 5, - 12, 0,167, 5, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5,203, 0, 31, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,191, 0,102, 5, 2, 0,171, 5, 2, 0,172, 5, - 2, 0,158, 5, 2, 0,173, 5,198, 0,165, 5, 2, 0,174, 5, 2, 0,138, 0, 2, 0,169, 5, 2, 0,175, 5, 9, 0,176, 5, - 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0, 32, 3, 2, 0,182, 5, 2, 0,183, 5, - 0, 0, 19, 0, 0, 0, 48, 1, 9, 0,250, 1, 4, 0,184, 5, 4, 0,185, 5, 27, 0,186, 5,204, 0, 16, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 7, 0, 14, 2, 7, 0, 15, 2, - 2, 0,174, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 4, 0, 19, 0, 7, 0,190, 5,190, 0,100, 5,205, 0, 15, 0, - 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 19, 0, 2, 0,194, 5, 2, 0,195, 5, 2, 0,104, 1, 2, 0,196, 5, - 2, 0, 37, 0, 4, 0,197, 5, 4, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, 0, 0,201, 5, 0, 0,202, 5,206, 0, 12, 0, -197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 4, 0, 37, 0,205, 0,203, 5,207, 0,204, 5, 12, 0,205, 5, - 12, 0,206, 5,208, 0,207, 5,195, 0,208, 5,209, 0,209, 5,210, 0, 17, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, - 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 12, 0,210, 5,211, 0,211, 5, 0, 0,212, 5,212, 0,213, 5, - 4, 0,214, 5, 4, 0,215, 5, 2, 0, 19, 0, 2, 0,216, 5, 2, 0,217, 5, 2, 0, 37, 0,213, 0, 29, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 48, 0,150, 2, 46, 0, 2, 1, 62, 0,218, 5, - 2, 0,138, 0, 2, 0,219, 5, 2, 0, 70, 0, 2, 0,220, 5, 4, 0, 19, 0, 2, 0,221, 5, 2, 0,170, 5, 2, 0,169, 5, - 2, 0,161, 1, 0, 0,222, 5, 0, 0,223, 5, 0, 0,224, 5, 0, 0,122, 5, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,190, 5, - 7, 0, 65, 1, 7, 0,225, 5, 7, 0,226, 5,190, 0,100, 5,214, 0, 11, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, - 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0,168, 5, 2, 0, 19, 0, 4, 0, 37, 0,202, 0,166, 5,198, 0,165, 5, -215, 0, 27, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 43, 0,227, 5, - 4, 0,228, 5, 4, 0,229, 5, 2, 0, 94, 0, 2, 0,138, 0, 2, 0,230, 5, 0, 0,231, 5, 0, 0,232, 5, 4, 0,233, 5, - 4, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 2, 0,237, 5, 2, 0,238, 5, 7, 0,239, 5, 23, 0,240, 5, 23, 0,241, 5, - 4, 0,242, 5, 4, 0,243, 5, 0, 0,244, 5, 0, 0,245, 5,216, 0, 10, 0, 27, 0, 31, 0, 9, 0,246, 5, 9, 0,247, 5, - 9, 0,248, 5, 9, 0,249, 5, 9, 0,250, 5, 4, 0, 94, 0, 4, 0,251, 5, 0, 0,252, 5, 0, 0,253, 5,217, 0, 10, 0, -197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,216, 0,254, 5, 2, 0, 94, 0, 2, 0,138, 0, - 4, 0, 43, 0, 9, 0,255, 5,218, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, -198, 0,165, 5, 4, 0, 19, 0, 4, 0, 0, 6,219, 0, 23, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, - 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 27, 0, 1, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,138, 0, 7, 0, 2, 6, - 9, 0, 3, 6, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 4, 6, 7, 0, 5, 6, 59, 0, 3, 1, 59, 0, 6, 6, 4, 0, 7, 6, - 2, 0,178, 5, 2, 0, 37, 0,190, 0,100, 5,220, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, - 7, 0,112, 5, 2, 0,113, 5, 2, 0, 19, 0, 2, 0, 32, 3, 4, 0, 37, 0,190, 0,100, 5,221, 0, 42, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,207, 0,204, 5, 0, 0,191, 5, - 0, 0,192, 5, 0, 0,193, 5, 2, 0, 17, 0, 2, 0,200, 5, 2, 0, 19, 0, 2, 0,194, 5, 9, 0, 3, 6, 4, 0,197, 5, - 4, 0, 8, 6, 4, 0, 9, 6, 4, 0,198, 5, 23, 0, 10, 6, 23, 0, 11, 6, 7, 0, 12, 6, 7, 0, 13, 6, 7, 0, 14, 6, - 7, 0, 2, 6, 2, 0, 15, 6, 2, 0,210, 0, 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 16, 6, - 2, 0, 17, 6, 9, 0, 18, 6, 9, 0, 19, 6, 9, 0, 20, 6, 9, 0, 21, 6, 9, 0, 22, 6, 2, 0, 23, 6, 0, 0,202, 5, - 58, 0, 24, 6,222, 0, 7, 0,222, 0, 0, 0,222, 0, 1, 0, 4, 0, 25, 6, 4, 0, 23, 0, 0, 0, 88, 0, 4, 0, 26, 6, - 4, 0, 17, 0,223, 0, 13, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, - 4, 0, 17, 0, 4, 0, 27, 6, 4, 0, 19, 0, 4, 0,230, 5, 12, 0, 28, 6, 12, 0, 29, 6, 0, 0, 30, 6,224, 0, 7, 0, -224, 0, 0, 0,224, 0, 1, 0, 0, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 37, 0,225, 0, 12, 0, - 2, 0, 33, 6, 2, 0, 35, 6, 2, 0, 36, 6, 0, 0,115, 2, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6, 2, 0, 40, 6, - 2, 0, 41, 6, 2, 0,158, 5, 7, 0, 42, 6, 7, 0, 43, 6,226, 0, 18, 0,226, 0, 0, 0,226, 0, 1, 0, 0, 0,131, 3, -225, 0, 44, 6,225, 0, 45, 6,225, 0, 46, 6,225, 0, 47, 6, 7, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, - 2, 0, 52, 6, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 57, 6, 2, 0, 58, 6,227, 0, 10, 0, - 0, 0, 59, 6, 0, 0, 60, 6, 0, 0, 61, 6, 0, 0, 62, 6, 0, 0, 63, 6, 0, 0, 64, 6, 2, 0, 65, 6, 2, 0, 66, 6, - 2, 0, 67, 6, 2, 0, 37, 0,228, 0, 8, 0, 0, 0, 68, 6, 0, 0, 69, 6, 0, 0, 70, 6, 0, 0, 71, 6, 0, 0, 72, 6, - 0, 0, 73, 6, 7, 0, 77, 5, 7, 0, 37, 0,229, 0, 16, 0,227, 0, 74, 6,227, 0, 75, 6,227, 0, 76, 6,227, 0, 77, 6, -227, 0, 78, 6,227, 0, 79, 6,227, 0, 80, 6,227, 0, 81, 6,227, 0, 82, 6,227, 0, 83, 6,227, 0, 84, 6,227, 0, 85, 6, -227, 0, 86, 6,227, 0, 87, 6,228, 0, 88, 6, 0, 0, 89, 6,230, 0, 71, 0, 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 63, 6, - 0, 0, 92, 6, 0, 0, 93, 6, 0, 0, 94, 6, 0, 0, 95, 6, 0, 0, 96, 6, 0, 0, 97, 6, 0, 0, 98, 6, 0, 0, 99, 6, - 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0,103, 6, 0, 0,104, 6, 0, 0,105, 6, 0, 0,106, 6, 0, 0,107, 6, - 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, 0, 0,114, 6, 0, 0,115, 6, - 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, 0, 0,122, 6, 0, 0,123, 6, - 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, 0, 0,130, 6, 0, 0,131, 6, - 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6, - 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, 0, 0,146, 6, 0, 0,147, 6, - 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0,153, 6, 0, 0,154, 6, 0, 0,155, 6, - 0, 0,156, 6, 0, 0,157, 6, 0, 0,158, 6, 0, 0, 96, 0,231, 0, 5, 0, 0, 0,159, 6, 0, 0,114, 6, 0, 0,116, 6, - 2, 0, 19, 0, 2, 0, 37, 0,232, 0, 21, 0,232, 0, 0, 0,232, 0, 1, 0, 0, 0, 20, 0,229, 0,160, 6,230, 0,161, 6, -230, 0,162, 6,230, 0,163, 6,230, 0,164, 6,230, 0,165, 6,230, 0,166, 6,230, 0,167, 6,230, 0,168, 6,230, 0,169, 6, -230, 0,170, 6,230, 0,171, 6,230, 0,172, 6,230, 0,173, 6,230, 0,174, 6,230, 0,175, 6,230, 0,176, 6,231, 0,177, 6, -233, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, 7, 0,178, 6, 7, 0,228, 1,234, 0, 67, 0, 4, 0, 19, 0, - 4, 0,179, 6, 4, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, 0, 0,183, 6, 0, 0,184, 6, 0, 0,185, 6, 0, 0,186, 6, - 0, 0,187, 6, 0, 0,188, 6, 0, 0,189, 6, 2, 0,190, 6, 2, 0, 37, 0, 4, 0,191, 6, 4, 0,192, 6, 4, 0,193, 6, - 4, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 4, 0,197, 6, 4, 0, 43, 0, 4, 0,198, 6, 2, 0,199, 6, 2, 0,200, 6, - 2, 0,201, 6, 2, 0,202, 6, 12, 0,203, 6, 12, 0,204, 6, 12, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, - 2, 0,209, 6, 2, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6,233, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6, - 2, 0,217, 6, 2, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, 4, 0,223, 6, 4, 0,224, 6, - 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, 2, 0,231, 6, 2, 0,232, 6, - 2, 0,233, 6, 2, 0,234, 6, 2, 0,235, 6, 2, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 7, 0,239, 6, 2, 0, 12, 5, - 2, 0,240, 6, 56, 0,241, 6,200, 0, 21, 0, 27, 0, 31, 0, 12, 0,242, 6, 12, 0,243, 6, 12, 0,244, 6, 12, 0,110, 5, - 47, 0,139, 0, 47, 0,245, 6, 2, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6, 2, 0,249, 6, 2, 0,250, 6, 2, 0,251, 6, - 2, 0,252, 6, 2, 0, 37, 0, 2, 0,253, 6, 2, 0,254, 6, 4, 0, 70, 0,195, 0,255, 6, 9, 0, 0, 7, 2, 0, 1, 7, -235, 0, 5, 0,235, 0, 0, 0,235, 0, 1, 0,235, 0, 2, 7, 13, 0, 3, 7, 4, 0, 19, 0,236, 0, 7, 0,236, 0, 0, 0, -236, 0, 1, 0,235, 0, 4, 7,235, 0, 5, 7, 2, 0,132, 4, 2, 0, 19, 0, 4, 0, 37, 0,237, 0, 23, 0,237, 0, 0, 0, -237, 0, 1, 0,238, 0, 6, 7,239, 0,209, 5, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 2, 0, 10, 7, 2, 0, 11, 7, - 2, 0, 12, 7, 2, 0, 13, 7, 2, 0, 14, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0, 15, 7, 2, 0, 16, 7, 2, 0, 17, 7, - 4, 0, 18, 7,237, 0, 19, 7, 9, 0, 20, 7, 4, 0, 21, 7, 4, 0, 22, 7, 0, 0, 23, 7,240, 0, 2, 0,241, 0, 6, 7, -239, 0,209, 5,242, 0, 2, 0,243, 0, 6, 7,239, 0,209, 5,244, 0, 23, 0,244, 0, 0, 0,244, 0, 1, 0,235, 0, 4, 7, -235, 0, 5, 7,235, 0, 24, 7,235, 0, 25, 7,200, 0, 26, 7, 23, 0, 52, 0, 0, 0,111, 5, 0, 0, 27, 7, 2, 0,159, 5, - 2, 0,160, 5, 2, 0, 28, 7, 2, 0, 37, 0, 2, 0,249, 6, 2, 0, 26, 6, 2, 0, 19, 0, 40, 0,126, 0,245, 0, 6, 7, - 12, 0, 29, 7, 12, 0,110, 5, 12, 0, 30, 7, 12, 0, 31, 7,246, 0, 21, 0,246, 0, 0, 0,246, 0, 1, 0,198, 0,165, 5, - 23, 0, 32, 7, 23, 0, 33, 7, 2, 0,159, 5, 2, 0,160, 5, 2, 0, 34, 7, 2, 0, 35, 7, 2, 0, 36, 7, 2, 0, 19, 0, - 7, 0, 10, 2, 2, 0,248, 6, 2, 0,252, 6, 4, 0, 43, 0,247, 0, 6, 7, 12, 0, 37, 7, 12, 0, 38, 7, 12, 0, 30, 7, - 0, 0, 39, 7, 9, 0, 40, 7,248, 0, 11, 0, 0, 0, 41, 7, 2, 0, 42, 7, 2, 0, 43, 7, 2, 0, 44, 7, 2, 0, 45, 7, - 2, 0,121, 4, 2, 0,116, 4,200, 0, 46, 7, 47, 0, 47, 7, 4, 0, 48, 7, 4, 0, 49, 7,249, 0, 1, 0, 0, 0, 50, 7, -250, 0, 8, 0, 58, 0, 51, 7, 58, 0, 52, 7,250, 0, 53, 7,250, 0, 54, 7,250, 0, 55, 7, 2, 0,134, 0, 2, 0, 19, 0, - 4, 0, 56, 7,251, 0, 4, 0, 4, 0,228, 5, 4, 0, 57, 7, 4, 0,233, 5, 4, 0, 58, 7,252, 0, 2, 0, 4, 0, 59, 7, - 4, 0, 60, 7,253, 0, 7, 0, 7, 0, 61, 7, 7, 0, 62, 7, 7, 0, 63, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 3, 4, - 7, 0, 64, 7,254, 0, 6, 0, 0, 0, 65, 7, 0, 0,193, 5, 50, 0,142, 0, 2, 0,110, 0, 2, 0,120, 4, 4, 0, 37, 0, -255, 0, 21, 0,255, 0, 0, 0,255, 0, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 66, 7, 4, 0, 67, 7, - 4, 0, 68, 7,249, 0, 69, 7, 0, 0, 65, 7, 4, 0, 70, 7, 4, 0, 71, 7,254, 0, 6, 3,251, 0, 72, 7,252, 0, 73, 7, -253, 0, 74, 7,250, 0, 75, 7,250, 0, 76, 7,250, 0, 77, 7, 58, 0, 78, 7, 58, 0, 79, 7, 0, 1, 12, 0, 0, 0,191, 1, - 9, 0,196, 0, 0, 0,197, 0, 4, 0,200, 0, 4, 0,208, 0, 9, 0,201, 0, 7, 0,203, 0, 7, 0,204, 0, 9, 0, 80, 7, - 9, 0, 81, 7, 9, 0,205, 0, 9, 0,207, 0, 1, 1, 43, 0, 1, 1, 0, 0, 1, 1, 1, 0, 9, 0, 82, 7, 9, 0, 26, 0, - 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 92, 0, 4, 0, 83, 7, 4, 0, 84, 7, 4, 0, 67, 7, - 4, 0, 68, 7, 4, 0, 85, 7, 4, 0,219, 0, 4, 0, 86, 7, 4, 0, 87, 7, 7, 0,233, 4, 7, 0, 88, 7, 4, 0,131, 0, - 4, 0, 89, 7,255, 0, 90, 7, 36, 0, 80, 0, 47, 0,139, 0, 50, 0,142, 0, 7, 0, 91, 7, 7, 0, 92, 7, 0, 1, 4, 1, - 1, 1, 93, 7, 1, 1, 94, 7, 1, 1, 95, 7, 12, 0, 96, 7, 2, 1, 97, 7, 3, 1, 98, 7, 7, 0, 99, 7, 7, 0,100, 7, - 4, 0,101, 7, 7, 0,102, 7, 9, 0,103, 7, 4, 0,104, 7, 4, 0,105, 7, 4, 0,106, 7, 7, 0,107, 7, 4, 1, 4, 0, - 4, 1, 0, 0, 4, 1, 1, 0, 12, 0,108, 7, 1, 1,109, 7,185, 0, 6, 0, 12, 0,110, 7, 12, 0, 96, 7, 12, 0,111, 7, - 1, 1,112, 7, 0, 0,113, 7, 0, 0,114, 7, 5, 1, 4, 0, 7, 0,115, 7, 7, 0,113, 0, 2, 0,116, 7, 2, 0,117, 7, - 6, 1, 6, 0, 7, 0,118, 7, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 4, 0,122, 7, 4, 0,123, 7, 7, 1, 12, 0, - 7, 0,124, 7, 7, 0,125, 7, 7, 0,126, 7, 7, 0,127, 7, 7, 0,128, 7, 7, 0,129, 7, 7, 0,130, 7, 7, 0,131, 7, - 7, 0,132, 7, 7, 0,133, 7, 4, 0,154, 2, 4, 0,134, 7, 8, 1, 2, 0, 7, 0,210, 4, 7, 0, 37, 0, 9, 1, 5, 0, - 7, 0,135, 7, 7, 0,136, 7, 4, 0, 94, 0, 4, 0,116, 2, 4, 0,137, 7, 10, 1, 6, 0, 10, 1, 0, 0, 10, 1, 1, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 11, 1, 8, 0, 11, 1, 0, 0, 11, 1, 1, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,131, 0, 12, 1, 45, 0, 12, 1, 0, 0, 12, 1, 1, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0,215, 0, 2, 0,177, 3, 2, 0,139, 7, 7, 0,140, 7, 7, 0, 93, 0, - 7, 0,167, 2, 4, 0,141, 7, 4, 0, 82, 0, 4, 0,118, 2, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,145, 7, - 7, 0,146, 7, 7, 0,147, 7, 7, 0,164, 2, 7, 0, 1, 1, 7, 0,148, 7, 7, 0,149, 7, 7, 0, 37, 0, 7, 0,150, 7, - 7, 0,151, 7, 7, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7, 2, 0,158, 7, - 2, 0,159, 7, 2, 0,160, 7, 2, 0,123, 5, 2, 0,161, 7, 2, 0,211, 1, 2, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, - 7, 0,213, 0, 13, 1,165, 7, 65, 0,164, 1, 14, 1, 16, 0, 14, 1, 0, 0, 14, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, - 2, 0,138, 7, 2, 0,215, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, - 7, 0,166, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2,212, 0, 5, 0, 2, 0, 17, 0, 2, 0, 56, 7, 2, 0, 19, 0, - 2, 0,167, 7, 27, 0, 1, 6,211, 0, 3, 0, 4, 0, 69, 0, 4, 0,168, 7,212, 0, 2, 0, 15, 1, 11, 0, 15, 1, 0, 0, - 15, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0,169, 7, 4, 0, 22, 0, 4, 0,170, 7, 2, 0, 19, 0, 2, 0, 37, 0, - 9, 0,171, 7, 9, 0,172, 7, 16, 1, 5, 0, 0, 0, 20, 0, 7, 0, 21, 1, 7, 0,173, 7, 4, 0,174, 7, 4, 0, 37, 0, - 17, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 18, 1, 4, 0, 0, 0, 20, 0, 64, 0,175, 7, - 7, 0, 21, 1, 7, 0, 37, 0, 19, 1, 6, 0, 2, 0,176, 7, 2, 0,177, 7, 2, 0, 17, 0, 2, 0,178, 7, 0, 0,179, 7, - 0, 0,180, 7, 20, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0,181, 7, 0, 0,182, 7, 21, 1, 3, 0, - 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 22, 1, 4, 0, 2, 0,183, 7, 2, 0,184, 7, 2, 0, 19, 0, 2, 0, 37, 0, - 23, 1, 6, 0, 0, 0, 20, 0, 0, 0,185, 7, 2, 0,186, 7, 2, 0,164, 2, 2, 0, 14, 1, 2, 0, 70, 0, 24, 1, 5, 0, - 0, 0, 20, 0, 7, 0,113, 0, 7, 0, 5, 4, 2, 0, 19, 0, 2, 0,130, 2, 25, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, - 4, 0,183, 7, 26, 1, 7, 0, 0, 0, 20, 0, 7, 0, 5, 4, 0, 0,187, 7, 0, 0,188, 7, 2, 0, 14, 1, 2, 0, 43, 0, - 4, 0,189, 7, 27, 1, 3, 0, 32, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7, 28, 1, 18, 0, 28, 1, 0, 0, 28, 1, 1, 0, - 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 19, 0, 2, 0,193, 7, 2, 0,194, 7, 2, 0,195, 7, 2, 0, 43, 0, 2, 0, 70, 0, - 0, 0, 20, 0, 9, 0, 2, 0, 29, 1,196, 7, 32, 0, 45, 0, 2, 0,216, 4, 2, 0, 99, 7, 2, 0,197, 7, 2, 0, 37, 0, - 30, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,198, 7, 2, 0, 19, 0, 2, 0,130, 2, 2, 0,199, 7, 4, 0,200, 7, - 4, 0,201, 7, 4, 0,202, 7, 4, 0,203, 7, 4, 0,204, 7, 31, 1, 1, 0, 0, 0,205, 7, 32, 1, 4, 0, 43, 0,227, 5, - 0, 0,206, 7, 4, 0, 14, 1, 4, 0, 19, 0, 29, 1, 18, 0, 29, 1, 0, 0, 29, 1, 1, 0, 29, 1,207, 7, 2, 0, 17, 0, - 2, 0, 19, 0, 2, 0,208, 7, 2, 0,195, 7, 2, 0,169, 7, 2, 0,209, 7, 2, 0, 70, 0, 2, 0,161, 1, 0, 0, 20, 0, - 9, 0, 2, 0, 33, 1,196, 7, 28, 1,210, 7, 2, 0, 15, 0, 2, 0,211, 7, 4, 0,212, 7, 34, 1, 3, 0, 4, 0,190, 2, - 4, 0, 37, 0, 32, 0, 45, 0, 35, 1, 12, 0,152, 0,213, 7, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,140, 7, 4, 0, 93, 0, - 0, 0, 20, 0, 0, 0,214, 7, 2, 0,215, 7, 2, 0,216, 7, 2, 0,217, 7, 2, 0,218, 7, 7, 0,219, 7, 36, 1, 10, 0, - 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0,221, 7, 2, 1, 97, 7, 2, 0, 17, 0, 2, 0,222, 7, - 2, 0,223, 7, 2, 0,224, 7, 37, 1, 7, 0, 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0, 17, 0, - 2, 0,225, 7, 7, 0,137, 3, 38, 1, 11, 0, 4, 0,190, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 0,226, 7, - 0, 0, 20, 0, 7, 0,227, 7, 7, 0,228, 7, 7, 0, 40, 3, 2, 0,229, 7, 2, 0,230, 7, 39, 1, 5, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 0, 55, 5, 40, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, - 0, 0,181, 7, 32, 0, 45, 0, 41, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 41, 3, 7, 0,231, 7, - 7, 0,232, 7, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0, 17, 3, 7, 0, 20, 3, 7, 0,233, 7, 7, 0,234, 7, 32, 0,235, 7, - 42, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,214, 7, 2, 0, 43, 0, - 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 43, 1, 8, 0, 32, 0, 45, 0, 7, 0,161, 2, 7, 0,238, 7, 7, 0,239, 7, - 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,240, 7, 44, 1, 12, 0, 2, 0, 17, 0, 2, 0, 14, 1, 2, 0, 19, 0, - 2, 0,164, 2, 2, 0,190, 2, 2, 0,241, 7, 4, 0, 37, 0, 7, 0,242, 7, 7, 0,243, 7, 7, 0,244, 7, 7, 0,245, 7, - 0, 0,246, 7, 45, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 2, 0, 81, 4, - 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 65, 0,164, 1, 46, 1, 7, 0, 4, 0,118, 2, 4, 0,247, 7, 4, 0,248, 7, - 4, 0,249, 7, 7, 0,250, 7, 7, 0,251, 7, 0, 0,187, 7, 47, 1, 7, 0, 0, 0,252, 7, 32, 0,253, 7, 0, 0,191, 7, - 2, 0,254, 7, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,192, 7, 48, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, - 4, 0, 93, 0, 0, 0,255, 7, 0, 0, 0, 8, 49, 1, 1, 0, 4, 0, 19, 0, 50, 1, 6, 0, 0, 0, 96, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 4, 0, 1, 8, 7, 0, 2, 8, 43, 0,227, 5, 51, 1, 4, 0, 0, 0,184, 0, 2, 0, 19, 0, 4, 0, 17, 0, - 32, 0, 45, 0, 52, 1, 2, 0, 4, 0, 17, 0, 4, 0,148, 5, 33, 1, 10, 0, 33, 1, 0, 0, 33, 1, 1, 0, 33, 1,207, 7, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,169, 7, 2, 0, 3, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 53, 1, 10, 0, - 7, 0, 40, 3, 7, 0, 4, 8, 7, 0, 5, 8, 7, 0, 6, 8, 7, 0, 7, 8, 4, 0, 19, 0, 7, 0,241, 7, 7, 0, 8, 8, - 7, 0, 9, 8, 7, 0, 37, 0, 2, 1, 20, 0, 27, 0, 31, 0, 0, 0,195, 0, 54, 1, 10, 8, 9, 0, 11, 8, 44, 0,154, 0, - 44, 0, 12, 8, 9, 0, 13, 8, 36, 0, 80, 0, 7, 0,137, 3, 7, 0, 14, 8, 7, 0, 15, 8, 7, 0, 16, 8, 7, 0, 17, 8, - 7, 0, 18, 8, 7, 0, 19, 8, 4, 0, 94, 0, 4, 0, 20, 8, 0, 0, 21, 8, 0, 0, 22, 8, 0, 0, 23, 8, 55, 1, 6, 0, - 27, 0, 31, 0, 7, 0, 24, 8, 7, 0, 25, 8, 7, 0, 26, 8, 2, 0, 27, 8, 2, 0, 28, 8, 56, 1, 15, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,244, 0, 29, 8,198, 0,165, 5, 2, 1, 97, 7, 2, 0, 14, 1, - 2, 0,220, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, 2, 0,170, 5, 4, 0, 70, 0, 57, 1, 6, 0, 57, 1, 0, 0, - 57, 1, 1, 0, 32, 0, 45, 0, 9, 0, 30, 8, 4, 0,220, 0, 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, 0, 12, 0, 31, 8, - 4, 0,136, 0, 7, 0, 32, 8, 58, 1, 25, 0, 58, 1, 0, 0, 58, 1, 1, 0, 58, 1, 38, 0, 12, 0, 33, 8, 0, 0, 20, 0, - 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, 4, 0, 19, 0, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, - 7, 0, 21, 1, 7, 0,220, 1, 7, 0, 41, 8, 7, 0,116, 2, 7, 0, 42, 8, 7, 0, 43, 8, 7, 0, 44, 8, 7, 0, 45, 8, - 7, 0, 46, 8, 7, 0,177, 0, 2, 0,136, 0, 2, 0,249, 4, 59, 1, 20, 0, 27, 0, 31, 0, 12, 0, 47, 8, 12, 0, 48, 8, - 12, 0, 49, 8, 4, 0, 19, 0, 4, 0,119, 5, 2, 0,168, 2, 2, 0,184, 5, 2, 0,136, 0, 2, 0, 50, 8, 2, 0, 51, 8, - 2, 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, 60, 8, 60, 1, 38, 0, 60, 1, 0, 0, 60, 1, 1, 0, 26, 0, 61, 8, 12, 0, 67, 3, 0, 0, 20, 0, 2, 0, 19, 0, - 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 2, 0, 26, 3, 2, 0, 65, 8, 4, 0,253, 1, 4, 0, 57, 8, 4, 0, 58, 8, - 58, 1, 66, 8, 60, 1, 38, 0, 60, 1, 67, 8, 12, 0, 68, 8, 9, 0, 69, 8, 9, 0, 70, 8, 9, 0, 71, 8, 7, 0, 9, 1, - 7, 0,177, 0, 7, 0, 72, 8, 7, 0,201, 1, 2, 0, 73, 8, 2, 0, 37, 0, 7, 0, 74, 8, 7, 0, 75, 8, 7, 0, 22, 3, - 7, 0, 76, 8, 7, 0, 77, 8, 7, 0, 78, 8, 7, 0, 79, 8, 7, 0, 80, 8, 7, 0, 81, 8, 7, 0,250, 1, 32, 0, 82, 8, -153, 0, 9, 0, 12, 0, 83, 8, 2, 0, 19, 0, 2, 0, 84, 8, 7, 0, 26, 2, 7, 0, 85, 8, 7, 0, 86, 8, 12, 0, 87, 8, - 4, 0, 88, 8, 4, 0, 37, 0, 61, 1, 7, 0, 61, 1, 0, 0, 61, 1, 1, 0, 12, 0, 21, 8, 4, 0, 19, 0, 4, 0, 89, 8, - 0, 0,131, 3,231, 0, 90, 8,152, 0, 7, 0, 27, 0, 31, 0, 12, 0, 91, 8, 12, 0, 83, 8, 12, 0, 92, 8, 12, 0,104, 0, - 4, 0, 19, 0, 4, 0, 93, 8,202, 0, 4, 0, 27, 0, 94, 8, 12, 0, 83, 8, 4, 0, 95, 8, 4, 0, 19, 0, 62, 1, 17, 0, -197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,152, 0, 9, 3, -202, 0, 96, 8, 0, 0, 14, 1, 0, 0,168, 5, 2, 0, 19, 0, 2, 0, 97, 8, 2, 0,169, 5, 2, 0,170, 5, 2, 0, 98, 8, - 7, 0, 99, 8, 63, 1, 8, 0, 63, 1, 0, 0, 63, 1, 1, 0, 61, 1,100, 8, 36, 0, 80, 0, 12, 0, 12, 3, 4, 0, 19, 0, - 0, 0, 20, 0, 4, 0,101, 8, 64, 1, 5, 0, 64, 1, 0, 0, 64, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0,102, 8, - 65, 1, 12, 0, 65, 1, 0, 0, 65, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,103, 8, 0, 0,104, 8, - 0, 0,102, 8, 7, 0,105, 8, 7, 0,106, 8, 4, 0, 37, 0, 36, 0, 80, 0, 66, 1, 9, 0, 66, 1, 0, 0, 66, 1, 1, 0, - 32, 0,107, 8, 0, 0,108, 8, 7, 0,109, 8, 2, 0,110, 8, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 67, 1, 7, 0, - 43, 0,227, 5, 26, 0, 61, 8, 4, 0, 19, 0, 4, 0,111, 8, 12, 0,112, 8, 32, 0,107, 8, 0, 0,108, 8, 68, 1, 12, 0, - 32, 0,107, 8, 2, 0,113, 8, 2, 0, 19, 0, 2, 0,114, 8, 2, 0,115, 8, 0, 0,108, 8, 32, 0,116, 8, 0, 0,117, 8, - 7, 0,118, 8, 7, 0,220, 1, 7, 0,119, 8, 7, 0,120, 8, 69, 1, 6, 0, 32, 0,107, 8, 4, 0,121, 8, 4, 0,122, 8, - 4, 0, 94, 0, 4, 0, 37, 0, 0, 0,108, 8, 70, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, - 71, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 72, 1, 10, 0, 32, 0,107, 8, 4, 0,123, 8, - 7, 0,130, 0, 4, 0, 19, 0, 2, 0,223, 5, 2, 0,124, 8, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,125, 8, 0, 0,108, 8, - 73, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 74, 1, 10, 0, 32, 0,107, 8, 2, 0, 17, 0, - 2, 0,183, 3, 4, 0, 92, 0, 4, 0, 93, 0, 7, 0,238, 7, 7, 0,239, 7, 4, 0, 37, 0,152, 0,213, 7, 0, 0,108, 8, - 75, 1, 4, 0, 32, 0,107, 8, 4, 0, 27, 3, 4, 0,126, 8, 0, 0,108, 8, 76, 1, 5, 0, 32, 0,107, 8, 7, 0,130, 0, - 4, 0,127, 8, 4, 0, 27, 3, 4, 0, 28, 3, 77, 1, 6, 0, 32, 0,107, 8, 4, 0,128, 8, 4, 0,129, 8, 7, 0,130, 8, - 7, 0,131, 8, 0, 0,108, 8, 78, 1, 16, 0, 32, 0,107, 8, 32, 0, 67, 8, 4, 0, 17, 0, 7, 0,132, 8, 7, 0,133, 8, - 7, 0,134, 8, 7, 0,135, 8, 7, 0,136, 8, 7, 0,137, 8, 7, 0,138, 8, 7, 0,139, 8, 7, 0,140, 8, 2, 0, 19, 0, - 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 79, 1, 3, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,123, 5, 80, 1, 5, 0, - 32, 0,107, 8, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,141, 8, 0, 0,108, 8, 81, 1, 10, 0, 32, 0,107, 8, 0, 0,108, 8, - 2, 0,142, 8, 2, 0,143, 8, 0, 0,144, 8, 0, 0,145, 8, 7, 0,146, 8, 7, 0,147, 8, 7, 0,148, 8, 7, 0,149, 8, - 82, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, 2, 0, 19, 0, - 2, 0,123, 5, 83, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, - 2, 0, 19, 0, 2, 0,123, 5, 84, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, - 7, 0,151, 8, 2, 0, 19, 0, 2, 0,123, 5, 85, 1, 7, 0, 32, 0,107, 8, 0, 0,108, 8, 7, 0, 21, 1, 7, 0, 31, 1, - 2, 0, 19, 0, 2, 0, 14, 1, 4, 0, 37, 0, 86, 1, 5, 0, 32, 0,226, 2, 7, 0, 21, 1, 2, 0,230, 2, 0, 0,232, 2, - 0, 0,152, 8, 87, 1, 10, 0, 87, 1, 0, 0, 87, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,153, 8, 7, 0,222, 0, - 7, 0,223, 0, 2, 0, 21, 8, 2, 0,154, 8, 32, 0, 45, 0, 88, 1, 22, 0, 88, 1, 0, 0, 88, 1, 1, 0, 2, 0, 19, 0, - 2, 0, 14, 1, 2, 0,155, 8, 2, 0,156, 8, 36, 0, 80, 0,152, 0,213, 7, 32, 0,169, 0, 7, 0, 92, 0, 7, 0, 93, 0, - 7, 0,157, 8, 7, 0,158, 8, 7, 0,159, 8, 7, 0,160, 8, 7, 0,157, 2, 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, - 0, 0,163, 8, 0, 0,164, 8, 12, 0, 14, 3, 89, 1, 8, 0, 7, 0,228, 1, 7, 0,238, 7, 7, 0,239, 7, 9, 0, 2, 0, - 2, 0,165, 8, 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 90, 1, 18, 0, 90, 1, 0, 0, 90, 1, 1, 0, 90, 1,169, 8, - 0, 0, 20, 0, 89, 1,170, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,171, 8, 2, 0,172, 8, 2, 0,173, 8, 2, 0,174, 8, - 4, 0, 43, 0, 7, 0,175, 8, 7, 0,176, 8, 4, 0,177, 8, 4, 0,178, 8, 90, 1,179, 8, 91, 1,180, 8, 92, 1, 33, 0, - 92, 1, 0, 0, 92, 1, 1, 0, 92, 1,181, 8, 0, 0, 20, 0, 0, 0,182, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 66, 7, - 2, 0, 99, 7, 2, 0,183, 8, 2, 0,138, 0, 2, 0,172, 8, 2, 0, 56, 7, 12, 0,208, 7, 12, 0,184, 8, 27, 0, 1, 6, - 9, 0,185, 8, 7, 0,175, 8, 7, 0,176, 8, 7, 0,255, 1, 7, 0,186, 8, 2, 0,187, 8, 2, 0,188, 8, 7, 0,189, 8, - 7, 0,190, 8, 2, 0,191, 8, 2, 0,192, 8, 9, 0,193, 8, 24, 0,194, 8, 24, 0,195, 8, 24, 0,196, 8, 93, 1,155, 0, - 94, 1,197, 8, 91, 1, 8, 0, 91, 1, 0, 0, 91, 1, 1, 0, 92, 1,198, 8, 92, 1,199, 8, 90, 1,200, 8, 90, 1,179, 8, - 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,201, 8, 12, 0,202, 8, 89, 1,203, 8, - 12, 0,204, 8, 4, 0, 17, 0, 4, 0,205, 8, 4, 0,206, 8, 4, 0,207, 8, 12, 0,208, 8, 94, 1,209, 8, 90, 1,210, 8, - 90, 1,211, 8, 9, 0,212, 8, 9, 0,213, 8, 4, 0,214, 8, 9, 0,215, 8, 9, 0,216, 8, 9, 0,217, 8, 95, 1, 6, 0, - 4, 0,129, 0, 4, 0,131, 0, 4, 0, 56, 7, 0, 0,218, 8, 0, 0,219, 8, 2, 0, 37, 0, 96, 1, 16, 0, 2, 0, 12, 7, - 2, 0, 13, 7, 2, 0,220, 8, 2, 0, 5, 8, 2, 0,221, 8, 2, 0, 68, 0, 7, 0,156, 2, 7, 0,222, 8, 7, 0,223, 8, - 2, 0, 35, 1, 0, 0,224, 8, 0, 0,232, 4, 2, 0,225, 8, 2, 0, 37, 0, 4, 0,226, 8, 4, 0,227, 8, 97, 1, 9, 0, - 7, 0,228, 8, 7, 0,229, 8, 7, 0, 19, 8, 7, 0,113, 0, 7, 0,230, 8, 7, 0,190, 5, 2, 0,231, 8, 0, 0,232, 8, - 0, 0, 37, 0, 98, 1, 4, 0, 7, 0,233, 8, 7, 0,234, 8, 2, 0,231, 8, 2, 0, 37, 0, 99, 1, 3, 0, 7, 0,235, 8, - 7, 0,236, 8, 7, 0, 15, 0,100, 1, 7, 0, 0, 0,191, 1, 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0, 69, 4, - 4, 0,131, 0, 4, 0,181, 3,101, 1, 7, 0, 7, 0,237, 8, 7, 0,238, 8, 7, 0,239, 8, 7, 0, 10, 2, 7, 0,240, 8, - 7, 0,241, 8, 7, 0,242, 8,102, 1, 4, 0, 2, 0,243, 8, 2, 0,244, 8, 2, 0,245, 8, 2, 0,246, 8,103, 1, 2, 0, - 7, 0, 5, 0, 7, 0, 6, 0,104, 1, 2, 0, 0, 0,171, 0, 0, 0,247, 8,105, 1, 1, 0, 0, 0, 20, 0,106, 1, 10, 0, - 0, 0,248, 8, 0, 0,249, 8, 0, 0,173, 5, 0, 0,250, 8, 2, 0,220, 8, 2, 0,251, 8, 7, 0,252, 8, 7, 0,253, 8, - 7, 0,254, 8, 7, 0,161, 8,107, 1, 2, 0, 9, 0,255, 8, 9, 0, 0, 9,108, 1, 11, 0, 0, 0,120, 4, 0, 0, 17, 0, - 0, 0,231, 8, 0, 0,113, 0, 0, 0, 1, 9, 0, 0,110, 0, 0, 0,184, 0, 7, 0, 2, 9, 7, 0, 3, 9, 7, 0, 4, 9, - 7, 0, 5, 9,109, 1, 8, 0, 7, 0,176, 7, 7, 0,130, 0, 7, 0,232, 4, 7, 0, 82, 2, 7, 0, 6, 9, 7, 0,209, 0, - 7, 0, 7, 9, 4, 0, 17, 0,110, 1, 4, 0, 2, 0, 8, 9, 2, 0, 9, 9, 2, 0, 10, 9, 2, 0, 37, 0,111, 1, 1, 0, - 0, 0, 20, 0,112, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 0, 11, 9,113, 1, 10, 0, 2, 0,122, 3, - 2, 0, 19, 0, 7, 0, 5, 4, 7, 0, 12, 9, 7, 0, 13, 9, 7, 0, 14, 9, 7, 0, 15, 9,112, 1, 16, 9,112, 1, 17, 9, -112, 1, 18, 9, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, 24, 0, 19, 9, 24, 0, 20, 9,113, 1, 21, 9, 7, 0, 22, 9, - 7, 0, 23, 9, 7, 0, 24, 9, 7, 0, 25, 9,114, 1, 4, 0, 48, 0,150, 2, 7, 0, 26, 9, 7, 0, 94, 1, 7, 0, 37, 0, -176, 0, 17, 0, 27, 0, 31, 0,114, 1, 27, 9, 62, 0, 16, 9, 52, 0, 78, 1, 2, 0, 19, 0, 2, 0, 77, 5, 4, 0,110, 0, - 7, 0, 28, 9, 7, 0, 7, 2, 7, 0, 29, 9, 7, 0, 30, 9, 7, 0, 94, 1, 7, 0, 31, 9, 2, 0, 48, 1, 0, 0, 32, 9, - 0, 0,115, 3, 0, 0, 96, 0,115, 1, 10, 0, 4, 0, 17, 0, 4, 0,130, 0, 4, 0, 19, 0, 4, 0, 88, 3, 4, 0, 33, 9, - 4, 0, 34, 9, 4, 0, 35, 9, 0, 0, 96, 0, 0, 0, 20, 0, 9, 0, 2, 0, 89, 0, 6, 0,115, 1, 36, 9, 4, 0, 37, 9, - 4, 0, 38, 9, 4, 0, 39, 9, 4, 0, 37, 0, 9, 0, 40, 9,116, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, - 2, 0, 41, 9, 2, 0, 37, 0,117, 1, 5, 0, 7, 0, 77, 2, 7, 0, 42, 9, 7, 0, 43, 9, 7, 0, 44, 9, 7, 0,190, 2, -118, 1, 7, 0, 4, 0, 45, 9, 4, 0, 46, 9, 4, 0, 47, 9, 7, 0, 48, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0, 51, 9, -119, 1, 8, 0,119, 1, 0, 0,119, 1, 1, 0, 32, 0, 45, 0, 4, 0,213, 2, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0,190, 2, - 7, 0,184, 7,120, 1, 26, 0, 32, 0, 52, 9,117, 1, 84, 3,117, 1, 53, 9,116, 1, 54, 9,117, 1,165, 7, 7, 0, 55, 9, - 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 59, 9, - 7, 0, 60, 9, 7, 0,110, 0, 7, 0, 61, 9, 4, 0, 45, 9, 4, 0, 62, 9, 4, 0, 37, 0, 4, 0, 82, 0, 4, 0, 63, 9, - 2, 0, 19, 0, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0,118, 3,121, 1,117, 0, 27, 0, 31, 0, 39, 0, 75, 0, 4, 0, 19, 0, - 2, 0, 17, 0, 2, 0,142, 8, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 73, 8, 2, 0, 68, 9, 2, 0, 69, 9, 2, 0, 70, 9, - 2, 0, 71, 9, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0, 77, 9, 2, 0, 78, 9, - 2, 0, 79, 9, 2, 0, 80, 9, 2, 0, 81, 9, 2, 0,211, 1, 2, 0,158, 7, 2, 0,134, 7, 2, 0, 82, 9, 2, 0, 83, 9, - 2, 0,116, 3, 2, 0,117, 3, 2, 0, 84, 9, 2, 0, 85, 9, 2, 0, 86, 9, 2, 0, 87, 9, 2, 0, 88, 9, 2, 0, 89, 9, - 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 2, 0, 93, 9, 2, 0, 94, 9, 7, 0, 95, 9, 7, 0, 96, 9, 7, 0, 97, 9, - 7, 0,140, 7, 7, 0, 93, 0, 7, 0,167, 2, 7, 0,146, 7, 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 4, 0,141, 7, - 4, 0,139, 7, 4, 0,101, 9, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,102, 9, 7, 0,103, 9, 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, 40, 3, 7, 0,110, 0, 7, 0,110, 9, - 7, 0,111, 9, 7, 0,112, 9, 7, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 4, 0,117, 9, 4, 0,118, 9, - 7, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, 7, 0,122, 9, 7, 0,123, 9, 7, 0, 57, 0, 7, 0,124, 9, 7, 0,125, 9, - 7, 0,112, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, 7, 0,130, 9, - 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 7, 0,134, 9, 7, 0,135, 9, 7, 0,136, 9, 7, 0,137, 9, 7, 0,138, 9, - 4, 0,139, 9, 4, 0,140, 9, 7, 0, 47, 3, 7, 0,141, 9, 7, 0,142, 9, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, - 7, 0,146, 9, 7, 0,147, 9, 0, 0,148, 9, 65, 0, 73, 3, 65, 0,149, 9, 32, 0,150, 9, 32, 0,151, 9, 36, 0, 80, 0, -155, 0, 71, 3,155, 0,152, 9,142, 0, 39, 0,142, 0, 0, 0,142, 0, 1, 0,121, 1,153, 9,120, 1,163, 3,118, 1, 67, 8, -122, 1,154, 9, 9, 0,155, 9,123, 1,156, 9,123, 1,157, 9, 12, 0,158, 9, 12, 0,159, 9,156, 0, 72, 3, 32, 0,160, 9, - 32, 0,161, 9, 32, 0, 38, 0, 12, 0,162, 9, 12, 0,163, 9, 12, 0,164, 9, 7, 0,213, 0, 7, 0, 92, 4, 4, 0,118, 2, - 4, 0, 19, 0, 4, 0,141, 7, 4, 0,165, 9, 4, 0,166, 9, 4, 0,167, 9, 4, 0, 57, 0, 2, 0,220, 0, 2, 0,168, 9, - 2, 0,169, 9, 2, 0, 65, 3, 2, 0,170, 9, 2, 0,118, 3, 0, 0,171, 9, 2, 0,172, 9, 2, 0,173, 9, 2, 0,174, 9, - 9, 0,175, 9,131, 0,202, 3,129, 0, 34, 0,124, 1,176, 9, 7, 0,174, 3, 7, 0,177, 9, 7, 0,178, 9, 7, 0, 8, 4, - 7, 0,179, 9, 7, 0, 50, 3, 7, 0, 40, 3, 7, 0,180, 9, 7, 0, 9, 2, 7, 0,181, 9, 7, 0,182, 9, 7, 0,183, 9, - 7, 0,184, 9, 7, 0,185, 9, 7, 0,186, 9, 7, 0,175, 3, 7, 0,187, 9, 7, 0,188, 9, 7, 0,189, 9, 7, 0,176, 3, - 7, 0,172, 3, 7, 0,173, 3, 4, 0,190, 9, 4, 0, 94, 0, 4, 0,191, 9, 4, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9, - 2, 0,195, 9, 2, 0,196, 9, 2, 0,197, 9, 2, 0, 37, 0, 4, 0, 70, 0,130, 0, 8, 0,124, 1,198, 9, 7, 0,199, 9, - 7, 0,200, 9, 7, 0,165, 1, 7, 0,201, 9, 4, 0, 94, 0, 2, 0,202, 9, 2, 0,203, 9,125, 1, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,204, 9,126, 1, 6, 0,126, 1, 0, 0,126, 1, 1, 0,125, 1,205, 9, 4, 0,206, 9, - 2, 0,207, 9, 2, 0, 19, 0,127, 1, 5, 0,127, 1, 0, 0,127, 1, 1, 0, 12, 0,208, 9, 4, 0,209, 9, 4, 0, 19, 0, -128, 1, 9, 0,128, 1, 0, 0,128, 1, 1, 0, 12, 0,129, 0,127, 1,210, 9, 4, 0, 19, 0, 2, 0,207, 9, 2, 0,211, 9, - 7, 0, 95, 0, 0, 0,212, 9,190, 0, 6, 0, 27, 0, 31, 0, 12, 0,134, 4, 4, 0, 19, 0, 2, 0,213, 9, 2, 0,214, 9, - 9, 0,215, 9,129, 1, 6, 0,129, 1, 0, 0,129, 1, 1, 0, 4, 0, 17, 0, 4, 0, 23, 0, 0, 0,216, 9, 0, 0,217, 9, -130, 1, 5, 0, 12, 0,218, 9, 4, 0,219, 9, 4, 0,220, 9, 4, 0, 19, 0, 4, 0, 37, 0,131, 1, 13, 0, 27, 0, 31, 0, -132, 1,221, 9,132, 1,222, 9, 12, 0,223, 9, 4, 0,224, 9, 2, 0,225, 9, 2, 0, 37, 0, 12, 0,226, 9, 12, 0,227, 9, -130, 1,228, 9, 12, 0,229, 9, 12, 0,230, 9, 12, 0,231, 9,132, 1, 30, 0,132, 1, 0, 0,132, 1, 1, 0, 9, 0,232, 9, - 4, 0,247, 6, 4, 0, 37, 0,200, 0,164, 5,200, 0,233, 9, 0, 0,234, 9, 2, 0,235, 9, 2, 0,236, 9, 2, 0, 12, 7, - 2, 0, 13, 7, 2, 0,237, 9, 2, 0,238, 9, 2, 0, 88, 3, 2, 0, 26, 6, 2, 0,239, 9, 2, 0,240, 9, 4, 0,161, 1, -133, 1,241, 9,134, 1,242, 9,135, 1,243, 9, 4, 0,244, 9, 4, 0,245, 9, 9, 0,246, 9, 12, 0,247, 9, 12, 0,227, 9, - 12, 0, 30, 7, 12, 0,248, 9, 12, 0,249, 9,136, 1, 12, 0,136, 1, 0, 0,136, 1, 1, 0, 0, 0,250, 9,137, 1,251, 9, - 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 37, 0, -138, 1, 6, 0,138, 1, 0, 0,138, 1, 1, 0, 12, 0, 1, 10, 0, 0, 2, 10, 4, 0, 3, 10, 4, 0, 4, 10,208, 0, 8, 0, -208, 0, 0, 0,208, 0, 1, 0, 0, 0,250, 9, 26, 0, 30, 0,139, 1, 6, 7, 9, 0, 5, 10,137, 1,251, 9,130, 1, 6, 10, -133, 1, 23, 0,133, 1, 0, 0,133, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0, 7, 10, - 2, 0, 8, 10, 2, 0, 9, 10, 2, 0, 10, 10, 0, 0, 11, 10, 0, 0, 37, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, - 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 43, 0, 0, 0, 12, 10, 2, 0, 13, 10, 2, 0, 14, 10, 4, 0, 70, 0, 9, 0, 5, 10, -140, 1, 8, 0,140, 1, 0, 0,140, 1, 1, 0, 9, 0, 2, 0, 9, 0, 15, 10, 0, 0,131, 3, 2, 0, 17, 0, 2, 0, 19, 0, - 7, 0, 16, 10,141, 1, 5, 0, 7, 0, 17, 10, 4, 0, 18, 10, 4, 0, 19, 10, 4, 0, 14, 1, 4, 0, 19, 0,142, 1, 6, 0, - 7, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 4, 0, 17, 0, 4, 0, 19, 0,143, 1, 5, 0, 7, 0,238, 7, - 7, 0,239, 7, 7, 0,190, 2, 2, 0,224, 1, 2, 0,225, 1,144, 1, 5, 0,143, 1, 2, 0, 4, 0, 54, 0, 7, 0, 24, 10, - 7, 0,238, 7, 7, 0,239, 7,145, 1, 4, 0, 2, 0, 25, 10, 2, 0, 26, 10, 2, 0, 27, 10, 2, 0, 28, 10,146, 1, 2, 0, - 43, 0,254, 5, 26, 0, 61, 8,147, 1, 3, 0, 24, 0, 29, 10, 4, 0, 19, 0, 4, 0, 37, 0,148, 1, 6, 0, 7, 0,110, 0, - 7, 0,142, 2, 7, 0, 30, 10, 7, 0, 37, 0, 2, 0,219, 0, 2, 0, 31, 10,149, 1, 7, 0,149, 1, 0, 0,149, 1, 1, 0, - 27, 0, 1, 6, 0, 0, 32, 10, 4, 0, 33, 10, 4, 0, 94, 0, 0, 0,131, 3,150, 1, 6, 0, 12, 0,112, 8, 0, 0, 34, 10, - 7, 0, 61, 0, 7, 0, 16, 10, 4, 0, 17, 0, 4, 0, 19, 0,151, 1, 3, 0, 7, 0, 35, 10, 4, 0, 19, 0, 4, 0, 37, 0, -152, 1, 15, 0,152, 1, 0, 0,152, 1, 1, 0, 61, 1,100, 8,150, 1, 62, 0, 12, 0, 14, 3, 35, 0, 50, 0,151, 1, 36, 10, - 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,255, 0, 4, 0, 33, 10, 0, 0, 32, 10, 4, 0, 37, 10, 7, 0, 38, 10, -153, 1, 2, 0, 0, 0, 39, 10, 0, 0, 40, 10,154, 1, 4, 0,154, 1, 0, 0,154, 1, 1, 0,152, 0,226, 2, 12, 0, 41, 10, -155, 1, 22, 0,155, 1, 0, 0,155, 1, 1, 0, 12, 0, 42, 10,152, 0,213, 7,154, 1, 43, 10, 12, 0, 44, 10, 12, 0, 14, 3, - 0, 0,131, 3, 7, 0, 16, 10, 7, 0, 45, 10, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,157, 8, 7, 0,158, 8, 7, 0,157, 2, - 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, 2, 0, 46, 10, 2, 0, 47, 10, 2, 0, 19, 0, 2, 0, 17, 0,156, 1, 6, 0, -156, 1, 0, 0,156, 1, 1, 0, 12, 0, 42, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,131, 3,157, 1, 10, 0,157, 1, 0, 0, -157, 1, 1, 0, 27, 0, 1, 6, 0, 0, 48, 10, 4, 0, 49, 10, 4, 0, 50, 10, 0, 0, 32, 10, 4, 0, 33, 10, 2, 0, 19, 0, - 2, 0, 51, 10,158, 1, 6, 0,158, 1, 0, 0,158, 1, 1, 0, 12, 0, 52, 10, 0, 0,131, 3, 4, 0, 19, 0, 4, 0, 53, 10, -159, 1, 5, 0,159, 1, 0, 0,159, 1, 1, 0, 0, 0, 32, 10, 4, 0, 33, 10, 7, 0,134, 2, 39, 0, 9, 0,152, 0, 9, 3, -152, 0, 54, 10,154, 1, 43, 10, 12, 0, 55, 10,155, 1, 56, 10, 12, 0, 57, 10, 12, 0, 58, 10, 4, 0, 19, 0, 4, 0,220, 0, -160, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0,159, 3, 7, 0,160, 3, 7, 0,161, 3, 4, 0,162, 3, 4, 0,163, 3, 7, 0,164, 3, 7, 0, 48, 3,155, 0, 49, 0, +141, 0,165, 3, 4, 0,124, 3, 4, 0,166, 3,160, 0,167, 3,161, 0,168, 3, 0, 0, 37, 0, 0, 0,169, 3, 2, 0,170, 3, + 7, 0,171, 3, 0, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, 7, 0,177, 3, 7, 0,178, 3, + 7, 0,179, 3, 7, 0,180, 3, 7, 0,181, 3, 2, 0,182, 3, 0, 0,183, 3, 2, 0,184, 3, 7, 0,185, 3, 7, 0,186, 3, + 0, 0,187, 3, 4, 0,126, 0, 4, 0,188, 3, 4, 0,189, 3, 2, 0,190, 3, 2, 0,191, 3,159, 0,192, 3, 4, 0,193, 3, + 4, 0, 82, 0, 7, 0,194, 3, 7, 0,195, 3, 7, 0,196, 3, 7, 0,197, 3, 2, 0,198, 3, 2, 0,199, 3, 2, 0,200, 3, + 2, 0,201, 3, 2, 0,202, 3, 2, 0,203, 3, 2, 0,204, 3, 2, 0,205, 3,162, 0,206, 3, 7, 0,207, 3, 7, 0,208, 3, +130, 0,209, 3,146, 0, 48, 0, 2, 0, 17, 0, 2, 0,210, 3, 2, 0,211, 3, 2, 0,212, 3, 7, 0,213, 3, 2, 0,214, 3, + 2, 0,215, 3, 7, 0,216, 3, 2, 0,217, 3, 2, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, 7, 0,222, 3, + 7, 0,223, 3, 7, 0,224, 3, 4, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 7, 0,228, 3, 77, 0,229, 3, 77, 0,230, 3, + 77, 0,231, 3, 0, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 36, 0, 80, 0, 2, 0,235, 3, 0, 0,236, 3, 0, 0,237, 3, + 7, 0,238, 3, 4, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 4, 0,242, 3, 4, 0, 19, 0, 7, 0,243, 3, 7, 0,244, 3, + 7, 0,245, 3, 81, 0,246, 3, 7, 0,247, 3, 7, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, + 7, 0,253, 3, 4, 0,254, 3,163, 0, 73, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,174, 0, 2, 0, 12, 1, 2, 0, 45, 1, + 2, 0,255, 3, 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, + 7, 0, 7, 4, 7, 0, 85, 1, 7, 0, 87, 1, 7, 0, 86, 1, 7, 0, 8, 4, 4, 0, 9, 4, 7, 0, 10, 4, 7, 0, 11, 4, + 7, 0, 12, 4, 7, 0, 13, 4, 7, 0, 14, 4, 7, 0, 15, 4, 7, 0, 16, 4, 2, 0, 17, 4, 2, 0, 11, 1, 2, 0, 18, 4, + 2, 0, 19, 4, 2, 0, 20, 4, 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, 7, 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, 2, 0, 36, 4, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, + 7, 0, 43, 4, 2, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4, 7, 0, 50, 4, + 7, 0, 51, 4, 2, 0, 52, 4, 2, 0, 53, 4, 2, 0, 54, 4, 2, 0, 19, 0, 7, 0, 55, 4, 7, 0, 56, 4, 36, 0, 80, 0, + 51, 0, 75, 1, 2, 0, 76, 1, 2, 0, 77, 1, 30, 0,150, 0,164, 0, 8, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0, 25, 3, + 4, 0, 57, 4, 4, 0, 19, 0, 2, 0, 58, 4, 2, 0, 59, 4, 32, 0,164, 0,165, 0, 13, 0, 9, 0, 60, 4, 9, 0, 61, 4, + 4, 0, 62, 4, 4, 0, 63, 4, 4, 0, 64, 4, 4, 0, 65, 4, 4, 0, 66, 4, 4, 0, 67, 4, 4, 0, 68, 4, 4, 0, 69, 4, + 4, 0, 70, 4, 4, 0, 37, 0, 0, 0, 71, 4,166, 0, 5, 0, 9, 0, 72, 4, 9, 0, 73, 4, 4, 0, 74, 4, 4, 0, 70, 0, + 0, 0, 75, 4,167, 0, 13, 0, 4, 0, 17, 0, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, 4, 0, 79, 4, 4, 0, 80, 4, + 4, 0, 90, 0, 4, 0, 81, 4, 4, 0, 82, 4, 4, 0, 83, 4, 4, 0, 84, 4, 4, 0, 85, 4, 26, 0, 30, 0,168, 0, 4, 0, + 4, 0, 86, 4, 7, 0, 87, 4, 2, 0, 19, 0, 2, 0, 77, 1,169, 0, 11, 0,169, 0, 0, 0,169, 0, 1, 0, 0, 0, 20, 0, + 63, 0, 88, 4, 64, 0, 89, 4, 4, 0, 25, 3, 4, 0, 90, 4, 4, 0, 91, 4, 4, 0, 37, 0, 4, 0, 92, 4, 4, 0, 93, 4, +170, 0,132, 0,165, 0, 94, 4,166, 0, 95, 4,167, 0, 96, 4,168, 0, 97, 4, 4, 0,194, 2, 4, 0,126, 0, 4, 0,188, 3, + 4, 0, 98, 4, 4, 0, 99, 4, 4, 0,100, 4, 4, 0,101, 4, 2, 0, 19, 0, 2, 0,102, 4, 7, 0, 26, 2, 7, 0,103, 4, + 7, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, 7, 0,107, 4, 2, 0,108, 4, 2, 0,109, 4, 2, 0,110, 4, 2, 0,111, 4, + 2, 0,214, 0, 2, 0,112, 4, 2, 0,113, 4, 2, 0,120, 3, 2, 0,114, 4, 2, 0,115, 4, 2, 0, 32, 1, 2, 0,106, 0, + 2, 0,116, 4, 2, 0,117, 4, 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, + 2, 0,124, 4, 2, 0, 33, 1, 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 4, 0,129, 4, 4, 0, 11, 1, + 2, 0,130, 4, 2, 0,131, 4, 2, 0,132, 4, 2, 0,133, 4, 2, 0,134, 4, 2, 0,135, 4, 24, 0,136, 4, 24, 0,137, 4, + 23, 0,138, 4, 12, 0,139, 4, 2, 0,140, 4, 2, 0, 37, 0, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, + 4, 0,145, 4, 7, 0,146, 4, 7, 0,147, 4, 7, 0,148, 4, 7, 0,149, 4, 2, 0,150, 4, 2, 0,151, 4, 2, 0,152, 4, + 2, 0,153, 4, 2, 0,154, 4, 2, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 7, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, + 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, 2, 0,164, 4, 2, 0,165, 4, 2, 0,166, 4, 2, 0,167, 4, 2, 0,168, 4, + 4, 0,169, 4, 4, 0,170, 4, 4, 0,171, 4, 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 4, 0,175, 4, 4, 0,176, 4, + 4, 0,177, 4, 4, 0,178, 4, 7, 0,179, 4, 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 7, 0,183, 4, 7, 0,184, 4, + 7, 0,185, 4, 7, 0,186, 4, 7, 0,187, 4, 0, 0,188, 4, 0, 0,189, 4, 4, 0,190, 4, 2, 0,191, 4, 2, 0,160, 1, + 0, 0,192, 4, 7, 0,193, 4, 7, 0,194, 4, 4, 0,195, 4, 4, 0,196, 4, 7, 0,197, 4, 7, 0,198, 4, 2, 0,199, 4, + 2, 0,200, 4, 7, 0,201, 4, 2, 0,202, 4, 2, 0,203, 4, 4, 0,204, 4, 2, 0,205, 4, 2, 0,206, 4, 2, 0,207, 4, + 2, 0,208, 4, 7, 0,209, 4, 7, 0, 70, 0, 42, 0,210, 4, 0, 0,211, 4,171, 0, 9, 0,171, 0, 0, 0,171, 0, 1, 0, + 0, 0, 20, 0, 2, 0,212, 4, 2, 0,213, 4, 2, 0,214, 4, 2, 0, 43, 0, 7, 0,215, 4, 7, 0, 70, 0,172, 0, 7, 0, + 2, 0,135, 2, 2, 0, 11, 1, 2, 0,109, 0, 2, 0,216, 4, 7, 0,217, 4, 7, 0, 70, 0, 42, 0,218, 4,173, 0, 5, 0, + 7, 0,219, 4, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,160, 1,174, 0, 24, 0, 7, 0, 15, 4, 7, 0, 16, 4, + 2, 0, 11, 1, 2, 0,220, 4, 2, 0, 18, 4, 2, 0, 19, 4, 2, 0, 20, 4, 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 23, 4, +173, 0,221, 4, 2, 0,108, 4, 2, 0,109, 4, 2, 0,110, 4, 2, 0,111, 4, 2, 0,214, 0, 2, 0,112, 4, 2, 0,113, 4, + 2, 0,120, 3,172, 0,222, 4, 2, 0,223, 4, 2, 0,114, 4, 2, 0,117, 4, 2, 0,118, 4,175, 0, 5, 0,175, 0, 0, 0, +175, 0, 1, 0, 4, 0,123, 3, 0, 0,132, 3, 4, 0, 19, 0,176, 0, 6, 0,177, 0,224, 4, 2, 0, 19, 0, 2, 0,225, 4, + 2, 0,226, 4, 2, 0,227, 4, 9, 0,228, 4,178, 0, 4, 0, 2, 0,106, 0, 2, 0,142, 2, 2, 0,126, 3, 2, 0,229, 4, +179, 0, 10, 0, 2, 0, 19, 0, 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4,178, 0,233, 4, 9, 0,228, 4, 7, 0,234, 4, + 4, 0,235, 4, 4, 0,236, 4, 4, 0, 37, 0,180, 0, 4, 0,180, 0, 0, 0,180, 0, 1, 0, 0, 0,237, 4, 7, 0,238, 4, +181, 0, 8, 0,182, 0,239, 4,177, 0,224, 4, 7, 0,240, 4, 4, 0, 90, 0, 0, 0,241, 4, 0, 0,242, 4, 0, 0,243, 4, + 0, 0,244, 4,183, 0, 9, 0,177, 0,224, 4, 7, 0,245, 4, 7, 0,246, 4, 2, 0, 11, 1, 2, 0, 19, 0, 4, 0, 36, 0, + 4, 0,247, 4, 83, 0,248, 4, 9, 0,228, 4,184, 0, 72, 0,183, 0,249, 4,183, 0,250, 4,181, 0,251, 4, 7, 0,252, 4, + 2, 0,253, 4, 2, 0,254, 4, 7, 0,255, 4, 7, 0, 0, 5, 2, 0,126, 3, 2, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, + 7, 0, 4, 5, 2, 0, 5, 5, 2, 0,236, 4, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 9, 5, 7, 0, 10, 5, + 7, 0, 11, 5, 7, 0, 12, 5, 2, 0, 13, 5, 2, 0, 14, 5, 2, 0, 15, 5, 2, 0, 16, 5, 2, 0, 17, 5, 2, 0, 18, 5, + 2, 0, 19, 5,176, 0, 20, 5,179, 0, 21, 5, 7, 0, 22, 5, 7, 0, 23, 5, 7, 0, 24, 5, 2, 0, 25, 5, 2, 0, 70, 0, + 0, 0, 26, 5, 0, 0, 27, 5, 0, 0, 28, 5, 0, 0, 29, 5, 0, 0, 30, 5, 0, 0, 31, 5, 2, 0, 32, 5, 7, 0, 33, 5, + 7, 0, 34, 5, 7, 0, 35, 5, 7, 0, 36, 5, 7, 0, 37, 5, 7, 0, 38, 5, 7, 0, 39, 5, 7, 0, 40, 5, 7, 0, 41, 5, + 7, 0, 42, 5, 2, 0, 43, 5, 0, 0, 44, 5, 0, 0, 45, 5, 0, 0, 46, 5, 0, 0, 47, 5, 32, 0, 48, 5, 0, 0, 49, 5, + 0, 0, 50, 5, 0, 0, 51, 5, 0, 0, 52, 5, 0, 0, 53, 5, 0, 0, 54, 5, 0, 0, 55, 5, 0, 0, 56, 5, 2, 0, 57, 5, + 2, 0, 58, 5, 2, 0, 59, 5, 2, 0, 60, 5, 2, 0, 61, 5,185, 0, 8, 0, 4, 0, 62, 5, 4, 0, 63, 5, 4, 0, 64, 5, + 4, 0, 65, 5, 4, 0, 66, 5, 4, 0, 67, 5, 4, 0, 54, 0, 4, 0, 50, 2, 46, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 32, 0, 68, 5,163, 0, 69, 5, 46, 0, 70, 5, 47, 0,206, 0, 12, 0, 71, 5,164, 0, 72, 5, 32, 0, 73, 5, 7, 0, 74, 5, + 7, 0, 75, 5, 7, 0, 76, 5, 7, 0, 77, 5, 4, 0, 25, 3, 2, 0, 19, 0, 2, 0, 4, 1, 58, 0, 0, 1,186, 0, 78, 5, +184, 0, 79, 5,187, 0, 80, 5,170, 0,180, 0,168, 0, 97, 4, 12, 0,100, 0, 12, 0, 81, 5,188, 0, 82, 5, 2, 0, 83, 5, + 2, 0, 84, 5, 2, 0,215, 0, 2, 0, 85, 5, 4, 0, 86, 5, 4, 0, 87, 5, 12, 0, 88, 5,173, 0,221, 4,174, 0, 89, 5, +189, 0, 6, 0, 47, 0,206, 0, 45, 0,255, 0, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,106, 0, 7, 0, 90, 5,190, 0, 35, 0, + 7, 0, 91, 5, 7, 0, 92, 5, 7, 0, 93, 5, 7, 0, 94, 5, 7, 0, 95, 5, 7, 0, 96, 5, 7, 0, 97, 5, 7, 0, 98, 5, + 7, 0, 99, 5, 7, 0, 18, 1, 7, 0,100, 5, 7, 0,101, 5, 7, 0,102, 5, 7, 0,103, 5, 7, 0,171, 0, 2, 0,104, 5, + 2, 0,105, 5, 4, 0,106, 5, 2, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5, 7, 0,111, 5, 68, 0,112, 5, +191, 0,113, 5,190, 0,114, 5,192, 0,115, 5,193, 0,116, 5,194, 0,117, 5,195, 0,118, 5,196, 0,119, 5, 7, 0,120, 5, + 2, 0,121, 5, 2, 0,122, 5, 4, 0,160, 1,197, 0, 54, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, + 7, 0,125, 5, 2, 0,126, 5, 7, 0, 99, 5, 7, 0, 18, 1, 7, 0, 43, 0, 4, 0,127, 5, 2, 0,109, 5, 2, 0,110, 5, + 32, 0, 68, 5, 32, 0,128, 5,189, 0,129, 5,197, 0,114, 5, 0, 0,130, 5, 4, 0, 25, 3, 4, 0,131, 5, 2, 0,132, 5, + 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,160, 1, 2, 0, 19, 0, 2, 0,136, 5, 2, 0,137, 5, 7, 0,112, 0, + 7, 0,138, 5, 7, 0,139, 5, 7, 0,140, 5, 7, 0,141, 5, 7, 0,142, 5, 7, 0,171, 0, 7, 0, 74, 5, 2, 0,143, 5, + 2, 0, 62, 1, 2, 0,144, 5, 2, 0,145, 5, 2, 0,146, 5, 2, 0,147, 5, 2, 0,148, 5, 2, 0,149, 5, 2, 0,150, 5, + 2, 0,151, 5, 4, 0,152, 5, 12, 0,153, 5, 2, 0,154, 5, 2, 0, 64, 2, 2, 0,155, 5, 0, 0,156, 5, 0, 0,157, 5, + 9, 0,158, 5,191, 0,113, 5,199, 0, 25, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,159, 5, 23, 0,160, 5, 23, 0,161, 5, + 7, 0,162, 5, 7, 0,163, 5, 7, 0,164, 5, 7, 0,165, 5, 2, 0,166, 5, 2, 0,167, 5, 2, 0,168, 5, 2, 0,169, 5, + 2, 0,170, 5, 2, 0, 19, 0, 2, 0,171, 5, 2, 0,172, 5, 2, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5, 2, 0,135, 5, + 7, 0,176, 5, 7, 0,177, 5, 4, 0,178, 5, 4, 0,179, 5,198, 0, 6, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, + 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5,200, 0, 8, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, + 7, 0,125, 5, 2, 0,126, 5,201, 0,180, 5, 46, 0,134, 0,202, 0, 14, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, + 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5,199, 0,181, 5,203, 0,182, 5, 12, 0,183, 5, 2, 0, 11, 1, 2, 0, 19, 0, + 2, 0,184, 5, 0, 0,185, 5, 0, 0,186, 5,204, 0, 20, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, + 7, 0,125, 5, 2, 0,126, 5,192, 0,115, 5,199, 0,181, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 2, 0,190, 5, + 2, 0,171, 5, 2, 0,191, 5, 0, 0, 19, 0, 0, 0, 77, 1, 9, 0,250, 1, 4, 0,192, 5, 4, 0,193, 5, 27, 0,194, 5, +205, 0, 16, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5,199, 0,181, 5, + 7, 0, 14, 2, 7, 0, 15, 2, 2, 0,187, 5, 2, 0,195, 5, 2, 0,196, 5, 2, 0,197, 5, 4, 0, 19, 0, 7, 0,198, 5, +191, 0,113, 5,206, 0, 15, 0, 0, 0,199, 5, 0, 0,200, 5, 0, 0,201, 5, 2, 0, 19, 0, 2, 0,202, 5, 2, 0,203, 5, + 2, 0,103, 1, 2, 0,204, 5, 2, 0, 37, 0, 4, 0,205, 5, 4, 0,206, 5, 2, 0,207, 5, 2, 0,208, 5, 0, 0,209, 5, + 0, 0,210, 5,207, 0, 16, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 4, 0, 37, 0,206, 0,211, 5, +208, 0,212, 5, 12, 0,213, 5, 12, 0,214, 5,209, 0,215, 5,196, 0,216, 5,210, 0,217, 5, 2, 0,218, 5, 2, 0,219, 5, + 2, 0,220, 5, 2, 0, 70, 0,211, 0, 17, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, + 2, 0,126, 5,199, 0,181, 5, 12, 0,221, 5,212, 0,222, 5, 0, 0,223, 5,213, 0,224, 5, 4, 0,225, 5, 4, 0,226, 5, + 2, 0, 19, 0, 2, 0,227, 5, 2, 0,228, 5, 2, 0, 37, 0,214, 0, 29, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, + 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5, 47, 0,150, 2, 45, 0,255, 0, 61, 0,229, 5, 2, 0,133, 0, 2, 0,230, 5, + 2, 0, 70, 0, 2, 0,231, 5, 4, 0, 19, 0, 2, 0,232, 5, 2, 0,186, 5, 2, 0,185, 5, 2, 0,160, 1, 0, 0,233, 5, + 0, 0,234, 5, 0, 0,235, 5, 0, 0,135, 5, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,198, 5, 7, 0, 62, 1, 7, 0,236, 5, + 7, 0,237, 5,191, 0,113, 5,215, 0, 11, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, + 2, 0,126, 5, 2, 0,184, 5, 2, 0, 19, 0, 4, 0, 37, 0,203, 0,182, 5,199, 0,181, 5,216, 0, 27, 0,198, 0, 0, 0, +198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5, 42, 0,238, 5, 4, 0,239, 5, 4, 0,240, 5, + 2, 0, 90, 0, 2, 0,133, 0, 2, 0,241, 5, 0, 0,242, 5, 0, 0,243, 5, 4, 0,244, 5, 4, 0,245, 5, 4, 0,246, 5, + 4, 0,247, 5, 2, 0,248, 5, 2, 0,249, 5, 7, 0,250, 5, 23, 0,251, 5, 23, 0,252, 5, 4, 0,253, 5, 4, 0,254, 5, + 0, 0,255, 5, 0, 0, 0, 6,217, 0, 10, 0, 27, 0, 31, 0, 9, 0, 1, 6, 9, 0, 2, 6, 9, 0, 3, 6, 9, 0, 4, 6, + 9, 0, 5, 6, 4, 0, 90, 0, 4, 0, 6, 6, 0, 0, 7, 6, 0, 0, 8, 6,218, 0, 10, 0,198, 0, 0, 0,198, 0, 1, 0, + 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5,217, 0, 9, 6, 2, 0, 90, 0, 2, 0,133, 0, 4, 0, 43, 0, 9, 0, 10, 6, +219, 0, 8, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5,199, 0,181, 5, 4, 0, 19, 0, + 4, 0, 11, 6,220, 0, 23, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5, +199, 0,181, 5, 27, 0, 12, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,133, 0, 7, 0, 13, 6, 9, 0, 14, 6, 7, 0, 14, 2, + 7, 0, 15, 2, 7, 0, 15, 6, 7, 0, 16, 6, 58, 0, 0, 1, 58, 0, 17, 6, 4, 0, 18, 6, 2, 0, 19, 6, 2, 0, 37, 0, +191, 0,113, 5,221, 0, 10, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5, + 2, 0, 19, 0, 2, 0, 34, 3, 4, 0, 37, 0,191, 0,113, 5,222, 0, 42, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, + 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5,199, 0,181, 5,208, 0,212, 5, 0, 0,199, 5, 0, 0,200, 5, 0, 0,201, 5, + 2, 0, 17, 0, 2, 0,208, 5, 2, 0, 19, 0, 2, 0,202, 5, 9, 0, 14, 6, 4, 0,205, 5, 4, 0, 20, 6, 4, 0, 21, 6, + 4, 0,206, 5, 23, 0, 22, 6, 23, 0, 23, 6, 7, 0, 24, 6, 7, 0, 25, 6, 7, 0, 26, 6, 7, 0, 13, 6, 2, 0, 27, 6, + 2, 0,205, 0, 2, 0,103, 1, 2, 0,204, 5, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 28, 6, 2, 0, 29, 6, 9, 0, 30, 6, + 9, 0, 31, 6, 9, 0, 32, 6, 9, 0, 33, 6, 9, 0, 34, 6, 2, 0, 35, 6, 0, 0,210, 5, 57, 0, 36, 6,223, 0, 7, 0, +223, 0, 0, 0,223, 0, 1, 0, 4, 0, 37, 6, 4, 0, 23, 0, 0, 0, 84, 0, 4, 0, 38, 6, 4, 0, 17, 0,224, 0, 13, 0, +198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5, 4, 0, 17, 0, 4, 0, 39, 6, + 4, 0, 19, 0, 4, 0,241, 5, 12, 0, 40, 6, 12, 0, 41, 6, 0, 0, 42, 6,225, 0, 7, 0,225, 0, 0, 0,225, 0, 1, 0, + 0, 0, 43, 6, 2, 0, 44, 6, 2, 0, 45, 6, 2, 0, 46, 6, 2, 0, 37, 0,226, 0, 12, 0, 2, 0, 45, 6, 2, 0, 47, 6, + 2, 0, 48, 6, 0, 0,115, 2, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 52, 6, 2, 0, 53, 6, 2, 0,171, 5, + 7, 0, 54, 6, 7, 0, 55, 6,227, 0, 18, 0,227, 0, 0, 0,227, 0, 1, 0, 0, 0,132, 3,226, 0, 56, 6,226, 0, 57, 6, +226, 0, 58, 6,226, 0, 59, 6, 7, 0, 60, 6, 2, 0, 61, 6, 2, 0, 62, 6, 2, 0, 63, 6, 2, 0, 64, 6, 2, 0, 65, 6, + 2, 0, 66, 6, 2, 0, 67, 6, 2, 0, 68, 6, 2, 0, 69, 6, 2, 0, 70, 6,228, 0, 10, 0, 0, 0, 71, 6, 0, 0, 72, 6, + 0, 0, 73, 6, 0, 0, 74, 6, 0, 0, 75, 6, 0, 0, 76, 6, 2, 0, 77, 6, 2, 0, 78, 6, 2, 0, 79, 6, 2, 0, 37, 0, +229, 0, 8, 0, 0, 0, 80, 6, 0, 0, 81, 6, 0, 0, 82, 6, 0, 0, 83, 6, 0, 0, 84, 6, 0, 0, 85, 6, 7, 0, 90, 5, + 7, 0, 37, 0,230, 0, 17, 0,228, 0, 86, 6,228, 0, 87, 6,228, 0, 88, 6,228, 0, 89, 6,228, 0, 90, 6,228, 0, 91, 6, +228, 0, 92, 6,228, 0, 93, 6,228, 0, 94, 6,228, 0, 95, 6,228, 0, 96, 6,228, 0, 97, 6,228, 0, 98, 6,228, 0, 99, 6, +228, 0,100, 6,229, 0,101, 6, 0, 0,102, 6,231, 0, 71, 0, 0, 0,103, 6, 0, 0,104, 6, 0, 0, 75, 6, 0, 0,105, 6, + 0, 0,106, 6, 0, 0,107, 6, 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, + 0, 0,114, 6, 0, 0,115, 6, 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, + 0, 0,122, 6, 0, 0,123, 6, 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, + 0, 0,130, 6, 0, 0,131, 6, 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, + 0, 0,138, 6, 0, 0,139, 6, 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, + 0, 0,146, 6, 0, 0,147, 6, 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0,153, 6, + 0, 0,154, 6, 0, 0,155, 6, 0, 0,156, 6, 0, 0,157, 6, 0, 0,158, 6, 0, 0,159, 6, 0, 0,160, 6, 0, 0,161, 6, + 0, 0,162, 6, 0, 0,163, 6, 0, 0,164, 6, 0, 0,165, 6, 0, 0,166, 6, 0, 0,167, 6, 0, 0,168, 6, 0, 0,169, 6, + 0, 0,170, 6, 0, 0,171, 6, 0, 0, 92, 0,232, 0, 5, 0, 0, 0,172, 6, 0, 0,127, 6, 0, 0,129, 6, 2, 0, 19, 0, + 2, 0, 37, 0,233, 0, 21, 0,233, 0, 0, 0,233, 0, 1, 0, 0, 0, 20, 0,230, 0,173, 6,231, 0,174, 6,231, 0,175, 6, +231, 0,176, 6,231, 0,177, 6,231, 0,178, 6,231, 0,179, 6,231, 0,180, 6,231, 0,181, 6,231, 0,182, 6,231, 0,183, 6, +231, 0,184, 6,231, 0,185, 6,231, 0,186, 6,231, 0,187, 6,231, 0,188, 6,231, 0,189, 6,232, 0,190, 6,234, 0, 5, 0, + 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, 7, 0,191, 6, 7, 0,228, 1,235, 0, 67, 0, 4, 0, 19, 0, 4, 0,192, 6, + 4, 0,193, 6, 0, 0,194, 6, 0, 0,195, 6, 0, 0,196, 6, 0, 0,197, 6, 0, 0,198, 6, 0, 0,199, 6, 0, 0,200, 6, + 0, 0,201, 6, 0, 0,202, 6, 2, 0,203, 6, 2, 0, 37, 0, 4, 0,204, 6, 4, 0,205, 6, 4, 0,206, 6, 4, 0,207, 6, + 2, 0,208, 6, 2, 0,209, 6, 4, 0,210, 6, 4, 0, 40, 6, 4, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, + 2, 0,215, 6, 12, 0,216, 6, 12, 0,217, 6, 12, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, + 2, 0,223, 6, 2, 0,224, 6, 2, 0,225, 6, 2, 0,226, 6,234, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, + 2, 0,231, 6, 2, 0,232, 6, 2, 0,233, 6, 2, 0,234, 6, 2, 0,235, 6, 4, 0,236, 6, 4, 0,237, 6, 2, 0,238, 6, + 2, 0,239, 6, 2, 0,240, 6, 2, 0,241, 6, 2, 0,242, 6, 2, 0,243, 6, 2, 0,244, 6, 2, 0,245, 6, 2, 0,246, 6, + 2, 0,247, 6, 2, 0,248, 6, 2, 0,249, 6, 0, 0,250, 6, 0, 0,251, 6, 7, 0,252, 6, 2, 0, 25, 5, 2, 0,253, 6, + 55, 0,254, 6,201, 0, 21, 0, 27, 0, 31, 0, 12, 0,255, 6, 12, 0, 0, 7, 12, 0, 1, 7, 12, 0,123, 5, 46, 0,134, 0, + 46, 0, 2, 7, 2, 0, 3, 7, 2, 0, 4, 7, 2, 0, 5, 7, 2, 0, 6, 7, 2, 0, 7, 7, 2, 0, 8, 7, 2, 0, 9, 7, + 2, 0, 37, 0, 2, 0, 10, 7, 2, 0, 11, 7, 4, 0, 70, 0,196, 0, 12, 7, 9, 0, 13, 7, 2, 0, 14, 7,236, 0, 5, 0, +236, 0, 0, 0,236, 0, 1, 0,236, 0, 15, 7, 13, 0, 16, 7, 4, 0, 19, 0,237, 0, 7, 0,237, 0, 0, 0,237, 0, 1, 0, +236, 0, 17, 7,236, 0, 18, 7, 2, 0,137, 4, 2, 0, 19, 0, 4, 0, 37, 0,238, 0, 23, 0,238, 0, 0, 0,238, 0, 1, 0, +239, 0, 19, 7,240, 0,217, 5, 0, 0, 20, 7, 0, 0, 21, 7, 0, 0, 22, 7, 2, 0, 23, 7, 2, 0, 24, 7, 2, 0, 25, 7, + 2, 0, 26, 7, 2, 0, 27, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0, 28, 7, 2, 0, 29, 7, 2, 0, 30, 7, 4, 0, 31, 7, +238, 0, 32, 7, 9, 0, 33, 7, 4, 0, 34, 7, 4, 0, 35, 7, 0, 0, 36, 7,241, 0, 22, 0,241, 0, 0, 0,241, 0, 1, 0, +236, 0, 17, 7,236, 0, 18, 7,236, 0, 37, 7,236, 0, 38, 7,201, 0, 39, 7, 23, 0, 52, 0, 0, 0,124, 5, 0, 0, 40, 7, + 2, 0,172, 5, 2, 0,173, 5, 2, 0, 41, 7, 2, 0, 37, 0, 2, 0, 6, 7, 2, 0, 38, 6, 2, 0, 19, 0,242, 0, 19, 7, + 12, 0, 42, 7, 12, 0,123, 5, 12, 0, 43, 7, 12, 0, 44, 7,243, 0, 21, 0,243, 0, 0, 0,243, 0, 1, 0,199, 0,181, 5, + 23, 0, 45, 7, 23, 0, 46, 7, 2, 0,172, 5, 2, 0,173, 5, 2, 0, 47, 7, 2, 0, 48, 7, 2, 0, 49, 7, 2, 0, 19, 0, + 7, 0, 10, 2, 2, 0, 5, 7, 2, 0, 9, 7, 4, 0, 43, 0,244, 0, 19, 7, 12, 0, 50, 7, 12, 0, 51, 7, 12, 0, 43, 7, + 0, 0, 52, 7, 9, 0, 53, 7,245, 0, 11, 0, 0, 0, 54, 7, 2, 0, 55, 7, 2, 0, 56, 7, 2, 0, 57, 7, 2, 0, 58, 7, + 2, 0,126, 4, 2, 0,121, 4,201, 0, 59, 7, 46, 0, 60, 7, 4, 0, 61, 7, 4, 0, 62, 7,246, 0, 1, 0, 0, 0, 63, 7, +247, 0, 8, 0, 57, 0, 64, 7, 57, 0, 65, 7,247, 0, 66, 7,247, 0, 67, 7,247, 0, 68, 7, 2, 0,129, 0, 2, 0, 19, 0, + 4, 0, 69, 7,248, 0, 4, 0, 4, 0,239, 5, 4, 0, 70, 7, 4, 0,244, 5, 4, 0, 71, 7,249, 0, 2, 0, 4, 0, 72, 7, + 4, 0, 73, 7,250, 0, 7, 0, 7, 0, 74, 7, 7, 0, 75, 7, 7, 0, 76, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 10, 4, + 7, 0, 77, 7,251, 0, 6, 0, 0, 0, 78, 7, 0, 0,201, 5, 49, 0,137, 0, 2, 0,106, 0, 2, 0,125, 4, 4, 0, 37, 0, +252, 0, 21, 0,252, 0, 0, 0,252, 0, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 79, 7, 4, 0, 80, 7, + 4, 0, 81, 7,246, 0, 82, 7, 0, 0, 78, 7, 4, 0, 83, 7, 4, 0, 84, 7,251, 0, 8, 3,248, 0, 85, 7,249, 0, 86, 7, +250, 0, 87, 7,247, 0, 88, 7,247, 0, 89, 7,247, 0, 90, 7, 57, 0, 91, 7, 57, 0, 92, 7,253, 0, 12, 0, 0, 0,190, 1, + 9, 0,191, 0, 0, 0,192, 0, 4, 0,195, 0, 4, 0,203, 0, 9, 0,196, 0, 7, 0,198, 0, 7, 0,199, 0, 9, 0, 93, 7, + 9, 0, 94, 7, 9, 0,200, 0, 9, 0,202, 0,254, 0, 43, 0,254, 0, 0, 0,254, 0, 1, 0, 9, 0, 95, 7, 9, 0, 26, 0, + 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 88, 0, 4, 0, 96, 7, 4, 0, 97, 7, 4, 0, 80, 7, + 4, 0, 81, 7, 4, 0, 98, 7, 4, 0,214, 0, 4, 0, 99, 7, 4, 0,100, 7, 7, 0,246, 4, 7, 0,101, 7, 4, 0,126, 0, + 4, 0,102, 7,252, 0,103, 7, 36, 0, 80, 0, 46, 0,134, 0, 49, 0,137, 0, 7, 0,104, 7, 7, 0,105, 7,253, 0, 1, 1, +254, 0,106, 7,254, 0,107, 7,254, 0,108, 7, 12, 0,109, 7,255, 0,110, 7, 0, 1,111, 7, 7, 0,112, 7, 7, 0,113, 7, + 4, 0,114, 7, 7, 0,115, 7, 9, 0,116, 7, 4, 0,117, 7, 4, 0,118, 7, 4, 0,119, 7, 7, 0,120, 7, 1, 1, 4, 0, + 1, 1, 0, 0, 1, 1, 1, 0, 12, 0,121, 7,254, 0,122, 7,186, 0, 6, 0, 12, 0,123, 7, 12, 0,109, 7, 12, 0,124, 7, +254, 0,125, 7, 0, 0,126, 7, 0, 0,127, 7, 2, 1, 4, 0, 7, 0,128, 7, 7, 0,109, 0, 2, 0,129, 7, 2, 0,130, 7, + 3, 1, 6, 0, 7, 0,131, 7, 7, 0,132, 7, 7, 0,133, 7, 7, 0,134, 7, 4, 0,135, 7, 4, 0,136, 7, 4, 1, 12, 0, + 7, 0,137, 7, 7, 0,138, 7, 7, 0,139, 7, 7, 0,140, 7, 7, 0,141, 7, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, + 7, 0,145, 7, 7, 0,146, 7, 4, 0,154, 2, 4, 0,147, 7, 5, 1, 2, 0, 7, 0,219, 4, 7, 0, 37, 0, 6, 1, 5, 0, + 7, 0,148, 7, 7, 0,149, 7, 4, 0, 90, 0, 4, 0,116, 2, 4, 0,150, 7, 7, 1, 6, 0, 7, 1, 0, 0, 7, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,151, 7, 2, 0, 57, 0, 8, 1, 8, 0, 8, 1, 0, 0, 8, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,151, 7, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,126, 0, 9, 1, 45, 0, 9, 1, 0, 0, 9, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,151, 7, 2, 0,210, 0, 2, 0,182, 3, 2, 0,152, 7, 7, 0,153, 7, 7, 0, 89, 0, + 7, 0,167, 2, 4, 0,154, 7, 4, 0, 82, 0, 4, 0,118, 2, 7, 0,155, 7, 7, 0,156, 7, 7, 0,157, 7, 7, 0,158, 7, + 7, 0,159, 7, 7, 0,160, 7, 7, 0,164, 2, 7, 0,254, 0, 7, 0,161, 7, 7, 0,162, 7, 7, 0, 37, 0, 7, 0,163, 7, + 7, 0,164, 7, 7, 0,165, 7, 2, 0,166, 7, 2, 0,167, 7, 2, 0,168, 7, 2, 0,169, 7, 2, 0,170, 7, 2, 0,171, 7, + 2, 0,172, 7, 2, 0,173, 7, 2, 0,136, 5, 2, 0,174, 7, 2, 0,210, 1, 2, 0,175, 7, 0, 0,176, 7, 0, 0,177, 7, + 7, 0,208, 0, 10, 1,178, 7, 64, 0,163, 1, 11, 1, 16, 0, 11, 1, 0, 0, 11, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0,151, 7, 2, 0,210, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, + 7, 0,179, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2,213, 0, 5, 0, 2, 0, 17, 0, 2, 0, 69, 7, 2, 0, 19, 0, + 2, 0,180, 7, 27, 0, 12, 6,212, 0, 3, 0, 4, 0, 69, 0, 4, 0,181, 7,213, 0, 2, 0, 12, 1, 7, 0, 12, 1, 0, 0, + 12, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0,182, 7, 13, 1, 5, 0, 0, 0, 20, 0, + 7, 0, 18, 1, 7, 0,183, 7, 4, 0,184, 7, 4, 0, 37, 0, 14, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, + 2, 0, 70, 0, 15, 1, 4, 0, 0, 0, 20, 0, 63, 0,185, 7, 7, 0, 18, 1, 7, 0, 37, 0, 16, 1, 6, 0, 2, 0,186, 7, + 2, 0,187, 7, 2, 0, 17, 0, 2, 0,188, 7, 0, 0,189, 7, 0, 0,190, 7, 17, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, + 0, 0, 20, 0, 0, 0,191, 7, 0, 0,192, 7, 18, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 19, 1, 4, 0, + 2, 0,193, 7, 2, 0,194, 7, 2, 0, 19, 0, 2, 0, 37, 0, 20, 1, 6, 0, 0, 0, 20, 0, 0, 0,195, 7, 2, 0,196, 7, + 2, 0,164, 2, 2, 0, 11, 1, 2, 0, 70, 0, 21, 1, 5, 0, 0, 0, 20, 0, 7, 0,109, 0, 7, 0, 12, 4, 2, 0, 19, 0, + 2, 0,130, 2, 22, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, 4, 0,193, 7, 23, 1, 7, 0, 0, 0, 20, 0, 7, 0, 12, 4, + 0, 0,197, 7, 0, 0,198, 7, 2, 0, 11, 1, 2, 0, 43, 0, 4, 0,199, 7, 24, 1, 3, 0, 32, 0,200, 7, 0, 0,201, 7, + 0, 0,202, 7, 25, 1, 18, 0, 25, 1, 0, 0, 25, 1, 1, 0, 2, 0, 17, 0, 2, 0,203, 7, 2, 0, 19, 0, 2, 0,204, 7, + 2, 0,205, 7, 2, 0,206, 7, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, 26, 1,207, 7, 32, 0, 45, 0, + 2, 0,229, 4, 2, 0,112, 7, 2, 0,208, 7, 2, 0, 37, 0, 27, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,209, 7, + 2, 0, 19, 0, 2, 0,130, 2, 2, 0,210, 7, 4, 0,211, 7, 4, 0,212, 7, 4, 0,213, 7, 4, 0,214, 7, 4, 0,215, 7, + 28, 1, 1, 0, 0, 0,216, 7, 29, 1, 4, 0, 42, 0,238, 5, 0, 0,217, 7, 4, 0, 11, 1, 4, 0, 19, 0, 26, 1, 18, 0, + 26, 1, 0, 0, 26, 1, 1, 0, 26, 1,218, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,219, 7, 2, 0,206, 7, 2, 0,203, 7, + 2, 0,220, 7, 2, 0, 70, 0, 2, 0,160, 1, 0, 0, 20, 0, 9, 0, 2, 0, 30, 1,207, 7, 25, 1,221, 7, 2, 0, 15, 0, + 2, 0,222, 7, 4, 0,223, 7, 31, 1, 3, 0, 4, 0,190, 2, 4, 0, 37, 0, 32, 0, 45, 0, 32, 1, 12, 0,151, 0,224, 7, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,153, 7, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,225, 7, 2, 0,226, 7, 2, 0,227, 7, + 2, 0,228, 7, 2, 0,229, 7, 7, 0,230, 7, 33, 1, 10, 0, 2, 0, 19, 0, 2, 0,231, 7, 4, 0,153, 7, 4, 0, 89, 0, + 2, 0,232, 7,255, 0,110, 7, 2, 0, 17, 0, 2, 0,233, 7, 2, 0,234, 7, 2, 0,235, 7, 34, 1, 7, 0, 2, 0, 19, 0, + 2, 0,231, 7, 4, 0,153, 7, 4, 0, 89, 0, 2, 0, 17, 0, 2, 0,236, 7, 7, 0,139, 3, 35, 1, 11, 0, 4, 0,190, 2, + 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 77, 0,237, 7, 0, 0, 20, 0, 7, 0,238, 7, 7, 0,239, 7, 7, 0, 42, 3, + 2, 0,240, 7, 2, 0,241, 7, 36, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 46, 0,134, 0, 32, 0, 68, 5, + 37, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0,191, 7, 32, 0, 45, 0, 38, 1, 13, 0, 2, 0, 19, 0, + 2, 0, 17, 0, 2, 0,203, 7, 2, 0, 43, 3, 7, 0,242, 7, 7, 0,243, 7, 7, 0, 6, 1, 7, 0, 7, 1, 7, 0, 19, 3, + 7, 0, 22, 3, 7, 0,244, 7, 7, 0,245, 7, 32, 0,246, 7, 39, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,153, 7, + 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,225, 7, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,247, 7, 2, 0,248, 7, 40, 1, 8, 0, + 32, 0, 45, 0, 7, 0,161, 2, 7, 0,249, 7, 7, 0,250, 7, 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,251, 7, + 41, 1, 12, 0, 2, 0, 17, 0, 2, 0, 11, 1, 2, 0, 19, 0, 2, 0,164, 2, 2, 0,190, 2, 2, 0,252, 7, 4, 0, 37, 0, + 7, 0,253, 7, 7, 0,254, 7, 7, 0,255, 7, 7, 0, 0, 8, 0, 0, 1, 8, 42, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, + 4, 0,153, 7, 4, 0, 89, 0, 0, 0, 20, 0, 2, 0, 77, 1, 2, 0, 64, 0, 2, 0,247, 7, 2, 0,248, 7, 64, 0,163, 1, + 43, 1, 7, 0, 4, 0,118, 2, 4, 0, 2, 8, 4, 0, 3, 8, 4, 0, 4, 8, 7, 0, 5, 8, 7, 0, 6, 8, 0, 0,197, 7, + 44, 1, 7, 0, 0, 0, 7, 8, 32, 0, 8, 8, 0, 0,201, 7, 2, 0, 9, 8, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,202, 7, + 45, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,153, 7, 4, 0, 89, 0, 0, 0, 10, 8, 0, 0, 11, 8, 46, 1, 1, 0, + 4, 0, 19, 0, 47, 1, 6, 0, 0, 0, 92, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 12, 8, 7, 0, 13, 8, 42, 0,238, 5, + 48, 1, 4, 0, 0, 0,179, 0, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 45, 0, 49, 1, 2, 0, 4, 0, 17, 0, 4, 0,161, 5, + 30, 1, 10, 0, 30, 1, 0, 0, 30, 1, 1, 0, 30, 1,218, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,203, 7, 2, 0, 14, 8, + 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 50, 1, 10, 0, 7, 0, 42, 3, 7, 0, 15, 8, 7, 0, 16, 8, 7, 0, 17, 8, + 7, 0, 18, 8, 4, 0, 19, 0, 7, 0,252, 7, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 37, 0,255, 0, 20, 0, 27, 0, 31, 0, + 0, 0,190, 0, 51, 1, 21, 8, 9, 0, 22, 8, 43, 0,149, 0, 43, 0, 23, 8, 9, 0, 24, 8, 36, 0, 80, 0, 7, 0,139, 3, + 7, 0, 25, 8, 7, 0, 26, 8, 7, 0, 27, 8, 7, 0, 28, 8, 7, 0, 29, 8, 7, 0, 30, 8, 4, 0, 90, 0, 4, 0, 31, 8, + 0, 0, 32, 8, 0, 0, 33, 8, 0, 0, 34, 8, 52, 1, 6, 0, 27, 0, 31, 0, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, + 2, 0, 38, 8, 2, 0, 39, 8, 53, 1, 15, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, 4, 0,124, 5, 7, 0,125, 5, +241, 0, 40, 8,199, 0,181, 5,255, 0,110, 7, 2, 0, 11, 1, 2, 0,231, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, + 2, 0,186, 5, 4, 0, 70, 0, 54, 1, 6, 0, 54, 1, 0, 0, 54, 1, 1, 0, 32, 0, 45, 0, 9, 0, 41, 8, 4, 0,215, 0, + 4, 0, 37, 0, 64, 0, 4, 0, 27, 0, 31, 0, 12, 0, 42, 8, 4, 0,131, 0, 7, 0, 43, 8, 55, 1, 25, 0, 55, 1, 0, 0, + 55, 1, 1, 0, 55, 1, 38, 0, 12, 0, 44, 8, 0, 0, 20, 0, 7, 0, 45, 8, 7, 0, 46, 8, 7, 0, 47, 8, 7, 0, 48, 8, + 4, 0, 19, 0, 7, 0, 49, 8, 7, 0, 50, 8, 7, 0, 51, 8, 7, 0, 18, 1, 7, 0,220, 1, 7, 0, 52, 8, 7, 0,116, 2, + 7, 0, 53, 8, 7, 0, 54, 8, 7, 0, 55, 8, 7, 0, 56, 8, 7, 0, 57, 8, 7, 0,172, 0, 2, 0,131, 0, 2, 0, 6, 5, + 56, 1, 21, 0, 27, 0, 31, 0, 12, 0, 58, 8, 12, 0, 59, 8, 12, 0, 60, 8, 9, 0, 61, 8, 4, 0, 19, 0, 4, 0,132, 5, + 2, 0,168, 2, 2, 0,192, 5, 2, 0,131, 0, 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 2, 0, 65, 8, 2, 0, 66, 8, + 4, 0, 67, 8, 4, 0, 68, 8, 4, 0, 69, 8, 4, 0, 70, 8, 4, 0, 71, 8, 4, 0, 72, 8, 57, 1, 38, 0, 57, 1, 0, 0, + 57, 1, 1, 0, 26, 0, 73, 8, 12, 0, 69, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0, 74, 8, 2, 0, 75, 8, 2, 0, 76, 8, + 2, 0, 28, 3, 2, 0, 77, 8, 4, 0,253, 1, 4, 0, 69, 8, 4, 0, 70, 8, 55, 1, 78, 8, 57, 1, 38, 0, 57, 1, 79, 8, + 12, 0, 80, 8, 9, 0, 81, 8, 9, 0, 82, 8, 9, 0, 83, 8, 7, 0, 6, 1, 7, 0,172, 0, 7, 0, 84, 8, 7, 0,200, 1, + 2, 0, 85, 8, 2, 0, 37, 0, 7, 0, 86, 8, 7, 0, 87, 8, 7, 0, 24, 3, 7, 0, 88, 8, 7, 0, 89, 8, 7, 0, 90, 8, + 7, 0, 91, 8, 7, 0, 92, 8, 7, 0, 93, 8, 7, 0,250, 1, 32, 0, 94, 8,152, 0, 9, 0, 12, 0, 95, 8, 2, 0, 19, 0, + 2, 0, 96, 8, 7, 0, 26, 2, 7, 0, 97, 8, 7, 0, 98, 8, 12, 0, 99, 8, 4, 0,100, 8, 4, 0, 37, 0, 58, 1, 7, 0, + 58, 1, 0, 0, 58, 1, 1, 0, 12, 0, 32, 8, 4, 0, 19, 0, 4, 0,101, 8, 0, 0,132, 3,232, 0,102, 8,151, 0, 7, 0, + 27, 0, 31, 0, 12, 0,103, 8, 12, 0, 95, 8, 12, 0,104, 8, 12, 0,100, 0, 4, 0, 19, 0, 4, 0,105, 8,203, 0, 4, 0, + 27, 0,106, 8, 12, 0, 95, 8, 4, 0,107, 8, 4, 0, 19, 0, 59, 1, 17, 0,198, 0, 0, 0,198, 0, 1, 0, 12, 0,123, 5, + 4, 0,124, 5, 7, 0,125, 5, 2, 0,126, 5,199, 0,181, 5,151, 0, 11, 3,203, 0,108, 8, 0, 0, 11, 1, 0, 0,184, 5, + 2, 0, 19, 0, 2, 0,109, 8, 2, 0,185, 5, 2, 0,186, 5, 2, 0,110, 8, 7, 0,111, 8, 60, 1, 8, 0, 60, 1, 0, 0, + 60, 1, 1, 0, 58, 1,112, 8, 36, 0, 80, 0, 12, 0, 14, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0,113, 8, 61, 1, 5, 0, + 61, 1, 0, 0, 61, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0,114, 8, 62, 1, 12, 0, 62, 1, 0, 0, 62, 1, 1, 0, + 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,115, 8, 0, 0,116, 8, 0, 0,114, 8, 7, 0,117, 8, 7, 0,118, 8, + 4, 0, 37, 0, 36, 0, 80, 0, 63, 1, 9, 0, 63, 1, 0, 0, 63, 1, 1, 0, 32, 0,119, 8, 0, 0,120, 8, 7, 0,121, 8, + 2, 0,122, 8, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 64, 1, 7, 0, 42, 0,238, 5, 26, 0, 73, 8, 4, 0, 19, 0, + 4, 0,123, 8, 12, 0,124, 8, 32, 0,119, 8, 0, 0,120, 8, 65, 1, 12, 0, 32, 0,119, 8, 2, 0,125, 8, 2, 0, 19, 0, + 2, 0,126, 8, 2, 0,127, 8, 0, 0,120, 8, 32, 0,128, 8, 0, 0,129, 8, 7, 0,130, 8, 7, 0,220, 1, 7, 0,131, 8, + 7, 0,132, 8, 66, 1, 6, 0, 32, 0,119, 8, 4, 0,133, 8, 4, 0,134, 8, 4, 0, 90, 0, 4, 0, 37, 0, 0, 0,120, 8, + 67, 1, 4, 0, 32, 0,119, 8, 4, 0, 19, 0, 4, 0,133, 8, 0, 0,120, 8, 68, 1, 4, 0, 32, 0,119, 8, 4, 0, 19, 0, + 4, 0,133, 8, 0, 0,120, 8, 69, 1, 10, 0, 32, 0,119, 8, 4, 0,135, 8, 7, 0,125, 0, 4, 0, 19, 0, 2, 0,234, 5, + 2, 0,136, 8, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,137, 8, 0, 0,120, 8, 70, 1, 4, 0, 32, 0,119, 8, 4, 0, 19, 0, + 4, 0,133, 8, 0, 0,120, 8, 71, 1, 10, 0, 32, 0,119, 8, 2, 0, 17, 0, 2, 0,190, 3, 4, 0, 88, 0, 4, 0, 89, 0, + 7, 0,249, 7, 7, 0,250, 7, 4, 0, 37, 0,151, 0,224, 7, 0, 0,120, 8, 72, 1, 4, 0, 32, 0,119, 8, 4, 0, 29, 3, + 4, 0,138, 8, 0, 0,120, 8, 73, 1, 5, 0, 32, 0,119, 8, 7, 0,125, 0, 4, 0,139, 8, 4, 0, 29, 3, 4, 0, 30, 3, + 74, 1, 6, 0, 32, 0,119, 8, 4, 0,140, 8, 4, 0,141, 8, 7, 0,142, 8, 7, 0,143, 8, 0, 0,120, 8, 75, 1, 16, 0, + 32, 0,119, 8, 32, 0, 79, 8, 4, 0, 17, 0, 7, 0,144, 8, 7, 0,145, 8, 7, 0,146, 8, 7, 0,147, 8, 7, 0,148, 8, + 7, 0,149, 8, 7, 0,150, 8, 7, 0,151, 8, 7, 0,152, 8, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, + 76, 1, 3, 0, 32, 0,119, 8, 4, 0, 19, 0, 4, 0,136, 5, 77, 1, 5, 0, 32, 0,119, 8, 4, 0, 19, 0, 4, 0, 37, 0, + 7, 0,153, 8, 0, 0,120, 8, 78, 1, 10, 0, 32, 0,119, 8, 0, 0,120, 8, 2, 0,154, 8, 2, 0,155, 8, 0, 0,156, 8, + 0, 0,157, 8, 7, 0,158, 8, 7, 0,159, 8, 7, 0,160, 8, 7, 0,161, 8, 79, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,162, 8, 7, 0,163, 8, 2, 0, 19, 0, 2, 0,136, 5, 80, 1, 8, 0, 7, 0, 9, 0, + 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,162, 8, 7, 0,163, 8, 2, 0, 19, 0, 2, 0,136, 5, 81, 1, 8, 0, + 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,162, 8, 7, 0,163, 8, 2, 0, 19, 0, 2, 0,136, 5, + 82, 1, 7, 0, 32, 0,119, 8, 0, 0,120, 8, 7, 0, 18, 1, 7, 0, 28, 1, 2, 0, 19, 0, 2, 0, 11, 1, 4, 0, 37, 0, + 83, 1, 5, 0, 32, 0,228, 2, 7, 0, 18, 1, 2, 0,232, 2, 0, 0,234, 2, 0, 0,164, 8, 84, 1, 10, 0, 84, 1, 0, 0, + 84, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,165, 8, 7, 0,217, 0, 7, 0,218, 0, 2, 0, 32, 8, 2, 0,166, 8, + 32, 0, 45, 0, 85, 1, 22, 0, 85, 1, 0, 0, 85, 1, 1, 0, 2, 0, 19, 0, 2, 0, 11, 1, 2, 0,167, 8, 2, 0,168, 8, + 36, 0, 80, 0,151, 0,224, 7, 32, 0,164, 0, 7, 0, 88, 0, 7, 0, 89, 0, 7, 0,169, 8, 7, 0,170, 8, 7, 0,171, 8, + 7, 0,172, 8, 7, 0,157, 2, 7, 0,173, 8, 7, 0,226, 7, 7, 0,174, 8, 0, 0,175, 8, 0, 0,176, 8, 12, 0, 16, 3, + 86, 1, 8, 0, 7, 0,228, 1, 7, 0,249, 7, 7, 0,250, 7, 9, 0, 2, 0, 2, 0,177, 8, 2, 0,178, 8, 2, 0,179, 8, + 2, 0,180, 8, 87, 1, 18, 0, 87, 1, 0, 0, 87, 1, 1, 0, 87, 1,181, 8, 0, 0, 20, 0, 86, 1,182, 8, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,183, 8, 2, 0,184, 8, 2, 0,185, 8, 2, 0,186, 8, 4, 0, 43, 0, 7, 0,187, 8, 7, 0,188, 8, + 4, 0,189, 8, 4, 0,190, 8, 87, 1,191, 8, 88, 1,192, 8, 89, 1, 33, 0, 89, 1, 0, 0, 89, 1, 1, 0, 89, 1,193, 8, + 0, 0, 20, 0, 0, 0,194, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 79, 7, 2, 0,112, 7, 2, 0,195, 8, 2, 0,133, 0, + 2, 0,184, 8, 2, 0, 69, 7, 12, 0,219, 7, 12, 0,196, 8, 27, 0, 12, 6, 9, 0,197, 8, 7, 0,187, 8, 7, 0,188, 8, + 7, 0,255, 1, 7, 0,198, 8, 2, 0,199, 8, 2, 0,200, 8, 7, 0,201, 8, 7, 0,202, 8, 2, 0,203, 8, 2, 0,204, 8, + 9, 0,205, 8, 24, 0,206, 8, 24, 0,207, 8, 24, 0,208, 8, 90, 1,150, 0, 91, 1,209, 8, 88, 1, 8, 0, 88, 1, 0, 0, + 88, 1, 1, 0, 89, 1,210, 8, 89, 1,211, 8, 87, 1,212, 8, 87, 1,191, 8, 4, 0, 19, 0, 4, 0, 37, 0, 58, 0, 20, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,213, 8, 12, 0,214, 8, 86, 1,215, 8, 12, 0,216, 8, 4, 0, 17, 0, 4, 0,217, 8, + 4, 0,218, 8, 4, 0,219, 8, 12, 0,220, 8, 91, 1,221, 8, 87, 1,222, 8, 87, 1,223, 8, 9, 0,224, 8, 9, 0,225, 8, + 4, 0,226, 8, 9, 0,227, 8, 9, 0,228, 8, 9, 0,229, 8, 92, 1, 6, 0, 4, 0,124, 0, 4, 0,126, 0, 4, 0, 69, 7, + 0, 0,230, 8, 0, 0,231, 8, 2, 0, 37, 0, 93, 1, 16, 0, 2, 0, 25, 7, 2, 0, 26, 7, 2, 0,232, 8, 2, 0, 16, 8, + 2, 0,233, 8, 2, 0, 68, 0, 7, 0,156, 2, 7, 0,234, 8, 7, 0,235, 8, 2, 0, 32, 1, 0, 0,236, 8, 0, 0,245, 4, + 2, 0,237, 8, 2, 0, 37, 0, 4, 0,238, 8, 4, 0,239, 8, 94, 1, 9, 0, 7, 0,240, 8, 7, 0,241, 8, 7, 0, 30, 8, + 7, 0,109, 0, 7, 0,242, 8, 7, 0,198, 5, 2, 0,243, 8, 0, 0,244, 8, 0, 0, 37, 0, 95, 1, 4, 0, 7, 0,245, 8, + 7, 0,246, 8, 2, 0,243, 8, 2, 0, 37, 0, 96, 1, 3, 0, 7, 0,247, 8, 7, 0,248, 8, 7, 0, 15, 0, 97, 1, 7, 0, + 0, 0,190, 1, 2, 0,123, 4, 2, 0,124, 4, 2, 0,125, 4, 2, 0, 76, 4, 4, 0,126, 0, 4, 0,188, 3, 98, 1, 7, 0, + 7, 0,249, 8, 7, 0,250, 8, 7, 0,251, 8, 7, 0, 10, 2, 7, 0,252, 8, 7, 0,253, 8, 7, 0,254, 8, 99, 1, 4, 0, + 2, 0,255, 8, 2, 0, 0, 9, 2, 0, 1, 9, 2, 0, 2, 9,100, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,101, 1, 2, 0, + 0, 0,166, 0, 0, 0, 3, 9,102, 1, 1, 0, 0, 0, 20, 0,103, 1, 10, 0, 0, 0, 4, 9, 0, 0, 5, 9, 0, 0,191, 5, + 0, 0, 6, 9, 2, 0,232, 8, 2, 0, 7, 9, 7, 0, 8, 9, 7, 0, 9, 9, 7, 0, 10, 9, 7, 0,173, 8,104, 1, 2, 0, + 9, 0, 11, 9, 9, 0, 12, 9,105, 1, 11, 0, 0, 0,125, 4, 0, 0, 17, 0, 0, 0,243, 8, 0, 0,109, 0, 0, 0, 13, 9, + 0, 0,106, 0, 0, 0,179, 0, 7, 0, 14, 9, 7, 0, 15, 9, 7, 0, 16, 9, 7, 0, 17, 9,106, 1, 8, 0, 7, 0,186, 7, + 7, 0,125, 0, 7, 0,245, 4, 7, 0, 82, 2, 7, 0, 18, 9, 7, 0,204, 0, 7, 0, 19, 9, 4, 0, 17, 0,107, 1, 4, 0, + 2, 0, 20, 9, 2, 0, 21, 9, 2, 0, 22, 9, 2, 0, 37, 0,108, 1, 1, 0, 0, 0, 20, 0,109, 1, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 2, 0, 19, 0, 2, 0, 23, 9,110, 1, 10, 0, 2, 0,124, 3, 2, 0, 19, 0, 7, 0, 12, 4, 7, 0, 24, 9, + 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9,109, 1, 28, 9,109, 1, 29, 9,109, 1, 30, 9, 61, 0, 9, 0, 4, 0, 19, 0, + 4, 0, 64, 0, 24, 0, 31, 9, 24, 0, 32, 9,110, 1, 33, 9, 7, 0, 34, 9, 7, 0, 35, 9, 7, 0, 36, 9, 7, 0, 37, 9, +111, 1, 4, 0, 47, 0,150, 2, 7, 0, 38, 9, 7, 0, 93, 1, 7, 0, 37, 0,177, 0, 17, 0, 27, 0, 31, 0,111, 1, 39, 9, + 61, 0, 28, 9, 51, 0, 75, 1, 2, 0, 19, 0, 2, 0, 90, 5, 4, 0,106, 0, 7, 0, 40, 9, 7, 0, 7, 2, 7, 0, 41, 9, + 7, 0, 42, 9, 7, 0, 93, 1, 7, 0, 43, 9, 2, 0, 45, 1, 0, 0, 44, 9, 0, 0,117, 3, 0, 0, 92, 0,112, 1, 10, 0, + 4, 0, 17, 0, 4, 0,125, 0, 4, 0, 19, 0, 4, 0, 90, 3, 4, 0, 45, 9, 4, 0, 46, 9, 4, 0, 47, 9, 0, 0, 92, 0, + 0, 0, 20, 0, 9, 0, 2, 0, 88, 0, 6, 0,112, 1, 48, 9, 4, 0, 49, 9, 4, 0, 50, 9, 4, 0, 51, 9, 4, 0, 37, 0, + 9, 0, 52, 9,113, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, 2, 0, 53, 9, 2, 0, 37, 0,114, 1, 5, 0, + 7, 0, 77, 2, 7, 0, 54, 9, 7, 0, 55, 9, 7, 0, 56, 9, 7, 0,190, 2,115, 1, 7, 0, 4, 0, 57, 9, 4, 0, 58, 9, + 4, 0, 59, 9, 7, 0, 60, 9, 7, 0, 61, 9, 7, 0, 62, 9, 7, 0, 63, 9,116, 1, 8, 0,116, 1, 0, 0,116, 1, 1, 0, + 32, 0, 45, 0, 4, 0,215, 2, 2, 0, 19, 0, 2, 0, 11, 1, 7, 0,190, 2, 7, 0,194, 7,117, 1, 24, 0, 32, 0, 64, 9, +114, 1, 86, 3,114, 1, 65, 9,113, 1, 66, 9,114, 1,178, 7,118, 1, 67, 9, 7, 0, 68, 9, 7, 0, 69, 9, 7, 0, 70, 9, + 7, 0, 61, 9, 7, 0, 62, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 71, 9, 7, 0,106, 0, 7, 0, 72, 9, 4, 0, 57, 9, + 4, 0, 73, 9, 4, 0, 82, 0, 4, 0, 74, 9, 2, 0, 19, 0, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0,120, 3,119, 1,107, 0, + 27, 0, 31, 0, 39, 0, 75, 0,120, 1, 77, 9, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0,154, 8, 2, 0, 78, 9, 2, 0, 79, 9, + 2, 0, 85, 8, 2, 0, 80, 9, 2, 0, 81, 9, 2, 0, 82, 9, 2, 0, 83, 9, 2, 0, 84, 9, 2, 0, 85, 9, 2, 0, 86, 9, + 2, 0,120, 3, 2, 0, 87, 9, 2, 0, 88, 9, 2, 0, 89, 9, 2, 0, 90, 9, 2, 0, 91, 9, 2, 0, 92, 9, 2, 0,210, 1, + 2, 0,171, 7, 2, 0,147, 7, 2, 0, 93, 9, 2, 0, 94, 9, 2, 0,118, 3, 2, 0,119, 3, 2, 0, 95, 9, 2, 0, 96, 9, + 2, 0, 97, 9, 2, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 7, 0,101, 9, 2, 0,102, 9, 2, 0,103, 9, 7, 0,104, 9, + 7, 0,105, 9, 7, 0,106, 9, 7, 0,153, 7, 7, 0, 89, 0, 7, 0,167, 2, 7, 0,159, 7, 7, 0,107, 9, 7, 0,108, 9, + 7, 0,109, 9, 4, 0,154, 7, 4, 0,152, 7, 4, 0,110, 9, 7, 0,155, 7, 7, 0,156, 7, 7, 0,157, 7, 7, 0,111, 9, + 7, 0,112, 9, 7, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 7, 0,117, 9, 7, 0,118, 9, 7, 0, 42, 3, + 7, 0,106, 0, 7, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, 7, 0,122, 9, 7, 0,123, 9, 7, 0,124, 9, 7, 0,125, 9, + 4, 0,126, 9, 4, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, 7, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, + 7, 0,134, 9, 7, 0,114, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,135, 9, 7, 0,136, 9, 7, 0,137, 9, 7, 0,138, 9, + 7, 0,139, 9, 7, 0,140, 9, 7, 0,141, 9, 7, 0,142, 9, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, 7, 0,146, 9, + 7, 0,147, 9, 4, 0,148, 9, 4, 0,149, 9, 7, 0,150, 9, 64, 0, 75, 3, 64, 0,151, 9, 32, 0,152, 9, 32, 0,153, 9, + 36, 0, 80, 0,154, 0, 73, 3,154, 0,154, 9,141, 0, 41, 0,141, 0, 0, 0,141, 0, 1, 0,119, 1,155, 9,117, 1,165, 3, +115, 1, 79, 8,121, 1,156, 9, 9, 0,157, 9,122, 1,158, 9,122, 1,159, 9, 12, 0,160, 9, 12, 0,161, 9,155, 0, 74, 3, + 32, 0,162, 9, 32, 0,163, 9, 32, 0, 38, 0, 12, 0,164, 9, 12, 0,165, 9, 12, 0,124, 8, 0, 0, 20, 0, 7, 0,208, 0, + 7, 0,194, 2, 7, 0,166, 9, 4, 0,118, 2, 4, 0, 19, 0, 4, 0,154, 7, 4, 0,167, 9, 4, 0,168, 9, 4, 0,169, 9, + 2, 0,215, 0, 2, 0,170, 9, 2, 0,171, 9, 2, 0, 67, 3, 2, 0,172, 9, 2, 0,120, 3, 0, 0,173, 9, 2, 0,174, 9, + 2, 0,175, 9, 2, 0,176, 9, 9, 0,177, 9,130, 0,209, 3,123, 1,178, 9,128, 0, 34, 0,124, 1,179, 9, 7, 0,179, 3, + 7, 0,180, 9, 7, 0,181, 9, 7, 0, 15, 4, 7, 0,182, 9, 7, 0, 52, 3, 7, 0, 42, 3, 7, 0,183, 9, 7, 0, 9, 2, + 7, 0,184, 9, 7, 0,185, 9, 7, 0,186, 9, 7, 0,187, 9, 7, 0,188, 9, 7, 0,189, 9, 7, 0,180, 3, 7, 0,190, 9, + 7, 0,191, 9, 7, 0,192, 9, 7, 0,181, 3, 7, 0,177, 3, 7, 0,178, 3, 4, 0,193, 9, 4, 0, 90, 0, 4, 0,194, 9, + 4, 0,195, 9, 2, 0,196, 9, 2, 0,197, 9, 2, 0,198, 9, 2, 0,199, 9, 2, 0,200, 9, 2, 0, 37, 0, 4, 0, 70, 0, +129, 0, 8, 0,124, 1,201, 9, 7, 0,202, 9, 7, 0,203, 9, 7, 0,164, 1, 7, 0,204, 9, 4, 0, 90, 0, 2, 0,205, 9, + 2, 0,206, 9,125, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,207, 9,126, 1, 6, 0,126, 1, 0, 0, +126, 1, 1, 0,125, 1,208, 9, 4, 0,209, 9, 2, 0,210, 9, 2, 0, 19, 0,127, 1, 5, 0,127, 1, 0, 0,127, 1, 1, 0, + 12, 0,211, 9, 4, 0,212, 9, 4, 0, 19, 0,128, 1, 9, 0,128, 1, 0, 0,128, 1, 1, 0, 12, 0,124, 0,127, 1,213, 9, + 4, 0, 19, 0, 2, 0,210, 9, 2, 0,214, 9, 7, 0, 91, 0, 0, 0,215, 9,191, 0, 6, 0, 27, 0, 31, 0, 12, 0,139, 4, + 4, 0, 19, 0, 2, 0,216, 9, 2, 0,217, 9, 9, 0,218, 9,129, 1, 7, 0,129, 1, 0, 0,129, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 23, 0, 0, 0,219, 9, 0, 0,220, 9,130, 1, 5, 0, 12, 0,221, 9, 4, 0,222, 9, 4, 0,223, 9, + 4, 0, 19, 0, 4, 0, 37, 0,131, 1, 13, 0, 27, 0, 31, 0,132, 1,224, 9,132, 1,225, 9, 12, 0,226, 9, 4, 0,227, 9, + 2, 0,228, 9, 2, 0, 37, 0, 12, 0,229, 9, 12, 0,230, 9,130, 1,231, 9, 12, 0,232, 9, 12, 0,233, 9, 12, 0,234, 9, +132, 1, 30, 0,132, 1, 0, 0,132, 1, 1, 0, 9, 0,235, 9, 4, 0, 4, 7, 4, 0, 37, 0,201, 0,180, 5,201, 0,236, 9, + 0, 0,237, 9, 2, 0,238, 9, 2, 0,239, 9, 2, 0, 25, 7, 2, 0, 26, 7, 2, 0,240, 9, 2, 0,241, 9, 2, 0, 90, 3, + 2, 0, 38, 6, 2, 0,242, 9, 2, 0,243, 9, 4, 0,160, 1,133, 1,244, 9,134, 1,245, 9,135, 1,246, 9, 4, 0,247, 9, + 4, 0,248, 9, 9, 0,249, 9, 12, 0,250, 9, 12, 0,230, 9, 12, 0, 43, 7, 12, 0,251, 9, 12, 0,252, 9,136, 1, 16, 0, +136, 1, 0, 0,136, 1, 1, 0, 0, 0,253, 9,137, 1,254, 9, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,255, 9, 2, 0, 0, 10, + 2, 0, 1, 10, 2, 0, 2, 10, 2, 0, 3, 10, 2, 0, 4, 10, 2, 0, 5, 10, 2, 0, 6, 10, 2, 0, 70, 0, 2, 0,160, 1, +138, 1, 9, 0,138, 1, 0, 0,138, 1, 1, 0, 12, 0, 7, 10, 0, 0, 8, 10, 2, 0, 9, 10, 2, 0, 10, 10, 2, 0, 11, 10, + 2, 0, 37, 0, 9, 0, 12, 10,209, 0, 10, 0,209, 0, 0, 0,209, 0, 1, 0, 0, 0,253, 9, 26, 0, 30, 0,139, 1, 19, 7, + 9, 0, 13, 10,137, 1,254, 9,130, 1, 14, 10, 12, 0, 15, 10,209, 0, 16, 10,133, 1, 23, 0,133, 1, 0, 0,133, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0, 17, 10, 2, 0, 18, 10, 2, 0, 19, 10, 2, 0, 20, 10, + 0, 0, 21, 10, 0, 0, 37, 0, 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 1, 10, 2, 0, 2, 10, 2, 0, 3, 10, 2, 0, 43, 0, + 0, 0, 22, 10, 2, 0, 23, 10, 2, 0, 24, 10, 4, 0, 70, 0, 9, 0, 13, 10,140, 1, 8, 0,140, 1, 0, 0,140, 1, 1, 0, + 9, 0, 2, 0, 9, 0, 25, 10, 0, 0,132, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0, 26, 10,141, 1, 5, 0, 7, 0, 27, 10, + 4, 0, 28, 10, 4, 0, 29, 10, 4, 0, 11, 1, 4, 0, 19, 0,142, 1, 6, 0, 7, 0, 30, 10, 7, 0, 31, 10, 7, 0, 32, 10, + 7, 0, 33, 10, 4, 0, 17, 0, 4, 0, 19, 0,143, 1, 5, 0, 7, 0,249, 7, 7, 0,250, 7, 7, 0,190, 2, 2, 0,224, 1, + 2, 0,225, 1,144, 1, 5, 0,143, 1, 2, 0, 4, 0, 54, 0, 7, 0, 34, 10, 7, 0,249, 7, 7, 0,250, 7,145, 1, 4, 0, + 2, 0, 35, 10, 2, 0, 36, 10, 2, 0, 37, 10, 2, 0, 38, 10,146, 1, 2, 0, 42, 0, 9, 6, 26, 0, 73, 8,147, 1, 3, 0, + 24, 0, 39, 10, 4, 0, 19, 0, 4, 0, 37, 0,148, 1, 6, 0, 7, 0,106, 0, 7, 0,142, 2, 7, 0, 40, 10, 7, 0, 37, 0, + 2, 0,214, 0, 2, 0, 41, 10,149, 1, 7, 0,149, 1, 0, 0,149, 1, 1, 0, 27, 0, 12, 6, 0, 0, 42, 10, 4, 0, 43, 10, + 4, 0, 90, 0, 0, 0,132, 3,150, 1, 6, 0, 12, 0,124, 8, 0, 0, 44, 10, 7, 0, 61, 0, 7, 0, 26, 10, 4, 0, 17, 0, + 4, 0, 19, 0,151, 1, 3, 0, 7, 0, 45, 10, 4, 0, 19, 0, 4, 0, 37, 0,152, 1, 15, 0,152, 1, 0, 0,152, 1, 1, 0, + 58, 1,112, 8,150, 1, 62, 0, 12, 0, 16, 3, 35, 0, 50, 0,151, 1, 46, 10, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, + 2, 0,252, 0, 4, 0, 43, 10, 0, 0, 42, 10, 4, 0, 47, 10, 7, 0, 48, 10,153, 1, 2, 0, 0, 0, 49, 10, 0, 0, 50, 10, +154, 1, 4, 0,154, 1, 0, 0,154, 1, 1, 0,151, 0,228, 2, 12, 0, 51, 10,155, 1, 24, 0,155, 1, 0, 0,155, 1, 1, 0, + 12, 0, 52, 10,151, 0,224, 7,154, 1, 53, 10, 12, 0, 54, 10, 12, 0, 16, 3, 0, 0,132, 3, 7, 0, 26, 10, 7, 0, 55, 10, + 7, 0, 88, 0, 7, 0, 89, 0, 7, 0,169, 8, 7, 0,170, 8, 7, 0,157, 2, 7, 0,173, 8, 7, 0,226, 7, 7, 0,174, 8, + 2, 0, 56, 10, 2, 0, 57, 10, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 70, 0,156, 1, 6, 0,156, 1, 0, 0, +156, 1, 1, 0, 12, 0, 52, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,132, 3,157, 1, 10, 0,157, 1, 0, 0,157, 1, 1, 0, + 27, 0, 12, 6, 0, 0, 58, 10, 4, 0, 59, 10, 4, 0, 60, 10, 0, 0, 42, 10, 4, 0, 43, 10, 2, 0, 19, 0, 2, 0, 61, 10, +158, 1, 6, 0,158, 1, 0, 0,158, 1, 1, 0, 12, 0, 62, 10, 0, 0,132, 3, 4, 0, 19, 0, 4, 0, 63, 10,159, 1, 5, 0, +159, 1, 0, 0,159, 1, 1, 0, 0, 0, 42, 10, 4, 0, 43, 10, 7, 0,134, 2, 39, 0, 9, 0,151, 0, 11, 3,151, 0, 64, 10, +154, 1, 53, 10, 12, 0, 65, 10,155, 1, 66, 10, 12, 0, 67, 10, 12, 0, 68, 10, 4, 0, 19, 0, 4, 0,215, 0,160, 1, 2, 0, + 27, 0, 31, 0, 39, 0, 75, 0,161, 1, 5, 0,161, 1, 0, 0,161, 1, 1, 0, 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0, +162, 1, 6, 0,161, 1, 69, 10, 32, 0, 45, 0, 4, 0, 70, 10, 7, 0, 71, 10, 4, 0, 72, 10, 4, 0, 32, 8,163, 1, 3, 0, +161, 1, 69, 10, 4, 0, 70, 10, 7, 0, 73, 10,164, 1, 8, 0,161, 1, 69, 10, 32, 0, 45, 0, 7, 0, 6, 1, 7, 0, 74, 10, + 7, 0,194, 2, 7, 0, 30, 8, 4, 0, 70, 10, 4, 0, 75, 10,165, 1, 5, 0,161, 1, 69, 10, 7, 0, 76, 10, 7, 0,112, 7, + 7, 0,163, 2, 7, 0, 57, 0,166, 1, 3, 0,161, 1, 69, 10, 7, 0, 30, 8, 7, 0, 77, 10,118, 1, 4, 0, 7, 0, 78, 10, + 7, 0,121, 9, 2, 0, 79, 10, 2, 0, 11, 1,167, 1, 14, 0,167, 1, 0, 0,167, 1, 1, 0, 12, 0, 80, 10, 12, 0, 81, 10, + 12, 0, 82, 10, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0, 83, 10, 7, 0, 84, 10, 4, 0, 72, 10, 4, 0, 32, 8, + 7, 0,139, 3, 7, 0,165, 2,120, 1, 23, 0, 4, 0, 70, 10, 4, 0, 85, 10, 7, 0, 86, 10, 7, 0, 57, 0, 7, 0, 87, 10, + 7, 0,161, 2, 7, 0, 78, 10, 7, 0, 88, 10, 7, 0,142, 2, 7, 0, 89, 10, 7, 0, 12, 4, 7, 0, 90, 10, 7, 0, 91, 10, + 7, 0, 92, 10, 7, 0, 93, 10, 7, 0, 94, 10, 7, 0, 95, 10, 7, 0, 96, 10, 7, 0, 97, 10, 7, 0, 98, 10, 7, 0, 99, 10, + 7, 0,100, 10, 12, 0,101, 10, 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}; From 86cfc1966e3b148f2ee8ba97fab26f212e8c9060 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 29 Jul 2009 23:48:06 +0000 Subject: [PATCH 466/512] better blender doesnt look idiot for siggraph with tips wider then the screen. only show operator args in the tooltip that are different from the defaults. --- .../editors/interface/interface_regions.c | 2 +- source/blender/windowmanager/WM_api.h | 2 +- source/blender/windowmanager/intern/wm.c | 2 +- .../windowmanager/intern/wm_event_system.c | 2 +- .../windowmanager/intern/wm_operators.c | 41 +++++++++++++++++-- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index a6822618f0f..b59db055647 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -396,7 +396,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) char *str; opptr= uiButGetOperatorPtrRNA(but); /* allocated when needed, the button owns it */ - str= WM_operator_pystring(but->optype, opptr); + str= WM_operator_pystring(but->optype, opptr, 0); /* operator info */ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s", str); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 3670f1a613f..decd855eae0 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -172,7 +172,7 @@ void WM_operator_properties_free(struct PointerRNA *ptr); void WM_operator_properties_filesel(struct wmOperatorType *ot, int filter); /* operator as a python command (resultuing string must be free'd) */ -char *WM_operator_pystring(struct wmOperatorType *ot, struct PointerRNA *opptr); +char *WM_operator_pystring(struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args); void WM_operator_bl_idname(char *to, const char *from); void WM_operator_py_idname(char *to, const char *from); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 46cf13f7d75..13157378057 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -103,7 +103,7 @@ void wm_operator_register(bContext *C, wmOperator *op) /* Report the string representation of the operator */ - buf = WM_operator_pystring(op->type, op->ptr); + buf = WM_operator_pystring(op->type, op->ptr, 1); BKE_report(CTX_wm_reports(C), RPT_OPERATOR, buf); MEM_freeN(buf); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 86de5498ce9..d40e6c60bfd 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -362,7 +362,7 @@ static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, P static void wm_operator_print(wmOperator *op) { - char *buf = WM_operator_pystring(op->type, op->ptr); + char *buf = WM_operator_pystring(op->type, op->ptr, 1); printf("%s\n", buf); MEM_freeN(buf); } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index d0d50810fdc..41613d0ab78 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -345,7 +345,7 @@ void WM_operator_bl_idname(char *to, const char *from) * When calling from an existing wmOperator do. * WM_operator_pystring(op->type, op->ptr); */ -char *WM_operator_pystring(wmOperatorType *ot, PointerRNA *opptr) +char *WM_operator_pystring(wmOperatorType *ot, PointerRNA *opptr, int all_args) { const char *arg_name= NULL; char idname_py[OP_MAX_TYPENAME]; @@ -355,7 +355,17 @@ char *WM_operator_pystring(wmOperatorType *ot, PointerRNA *opptr) /* for building the string */ DynStr *dynstr= BLI_dynstr_new(); char *cstring, *buf; - int first_iter=1; + int first_iter=1, ok= 1; + + + /* only to get the orginal props for comparisons */ + PointerRNA opptr_default; + PropertyRNA *prop_default; + char *buf_default; + if(!all_args) { + WM_operator_properties_create(&opptr_default, ot->idname); + } + WM_operator_py_idname(idname_py, ot->idname); BLI_dynstr_appendf(dynstr, "bpy.ops.%s(", idname_py); @@ -370,13 +380,36 @@ char *WM_operator_pystring(wmOperatorType *ot, PointerRNA *opptr) buf= RNA_property_as_string(opptr, prop); - BLI_dynstr_appendf(dynstr, first_iter?"%s=%s":", %s=%s", arg_name, buf); + ok= 1; + + if(!all_args) { + /* not verbose, so only add in attributes that use non-default values + * slow but good for tooltips */ + prop_default= RNA_struct_find_property(&opptr_default, arg_name); + + if(prop_default) { + buf_default= RNA_property_as_string(&opptr_default, prop_default); + + if(strcmp(buf, buf_default)==0) + ok= 0; /* values match, dont bother printing */ + + MEM_freeN(buf_default); + } + + } + if(ok) { + BLI_dynstr_appendf(dynstr, first_iter?"%s=%s":", %s=%s", arg_name, buf); + first_iter = 0; + } MEM_freeN(buf); - first_iter = 0; + } RNA_PROP_END; + if(all_args==0) + WM_operator_properties_free(&opptr_default); + BLI_dynstr_append(dynstr, ")"); cstring = BLI_dynstr_get_cstring(dynstr); From 78b32ceeed03a3ad82ad28883c59131e86392315 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 00:46:48 +0000 Subject: [PATCH 467/512] switched file and dir by mistake --- source/blender/editors/space_file/file_draw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 933b9cc69ad..5a07c6a7550 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -135,8 +135,8 @@ void file_draw_buttons(const bContext *C, ARegion *ar) /* Button layout. */ const short min_x = 10; const short max_x = ar->winx - 10; - const short line2_y = IMASEL_BUTTONS_HEIGHT/2 + IMASEL_BUTTONS_MARGIN*2; - const short line1_y = IMASEL_BUTTONS_MARGIN; + const short line1_y = IMASEL_BUTTONS_HEIGHT/2 + IMASEL_BUTTONS_MARGIN*2; + const short line2_y = IMASEL_BUTTONS_MARGIN; const short input_minw = 20; const short btn_h = UI_UNIT_Y; const short btn_fn_w = UI_UNIT_X; From 24a269a07c150d449363b455d4de89a88151d651 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Thu, 30 Jul 2009 01:39:42 +0000 Subject: [PATCH 468/512] Move some sketching base code in kernel. Other code will eventually move out of armature editor (to help reuse). This solves the issue reported by Cambo on the ml about kernel code calling editor functions. --- source/blender/blenkernel/BKE_sketch.h | 157 ++++ source/blender/blenkernel/intern/armature.c | 5 +- source/blender/blenkernel/intern/sketch.c | 600 ++++++++++++++ .../editors/armature/editarmature_sketch.c | 738 +----------------- source/blender/editors/include/ED_armature.h | 3 - 5 files changed, 780 insertions(+), 723 deletions(-) create mode 100644 source/blender/blenkernel/BKE_sketch.h create mode 100644 source/blender/blenkernel/intern/sketch.c diff --git a/source/blender/blenkernel/BKE_sketch.h b/source/blender/blenkernel/BKE_sketch.h new file mode 100644 index 00000000000..424dd5c9f80 --- /dev/null +++ b/source/blender/blenkernel/BKE_sketch.h @@ -0,0 +1,157 @@ +/** + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef BKE_SKETCH_H +#define BKE_SKETCH_H + +typedef enum SK_PType +{ + PT_CONTINUOUS, + PT_EXACT, +} SK_PType; + +typedef enum SK_PMode +{ + PT_SNAP, + PT_PROJECT, +} SK_PMode; + +typedef struct SK_Point +{ + float p[3]; + short p2d[2]; + float no[3]; + float size; + SK_PType type; + SK_PMode mode; +} SK_Point; + +typedef struct SK_Stroke +{ + struct SK_Stroke *next, *prev; + + SK_Point *points; + int nb_points; + int buf_size; + int selected; +} SK_Stroke; + +#define SK_OVERDRAW_LIMIT 5 + +typedef struct SK_Overdraw +{ + SK_Stroke *target; + int start, end; + int count; +} SK_Overdraw; + +#define SK_Stroke_BUFFER_INIT_SIZE 20 + +typedef struct SK_DrawData +{ + short mval[2]; + short previous_mval[2]; + SK_PType type; +} SK_DrawData; + +typedef struct SK_Intersection +{ + struct SK_Intersection *next, *prev; + SK_Stroke *stroke; + int before; + int after; + int gesture_index; + float p[3]; + float lambda; /* used for sorting intersection points */ +} SK_Intersection; + +typedef struct SK_Sketch +{ + ListBase strokes; + ListBase depth_peels; + SK_Stroke *active_stroke; + SK_Stroke *gesture; + SK_Point next_point; + SK_Overdraw over; +} SK_Sketch; + + +typedef struct SK_Gesture { + SK_Stroke *stk; + SK_Stroke *segments; + + ListBase intersections; + ListBase self_intersections; + + int nb_self_intersections; + int nb_intersections; + int nb_segments; +} SK_Gesture; + + +/************************************************/ + +void freeSketch(SK_Sketch *sketch); +SK_Sketch* createSketch(); + +void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk); + +void sk_freeStroke(SK_Stroke *stk); +SK_Stroke* sk_createStroke(); + +SK_Point *sk_lastStrokePoint(SK_Stroke *stk); + +void sk_allocStrokeBuffer(SK_Stroke *stk); +void sk_shrinkStrokeBuffer(SK_Stroke *stk); +void sk_growStrokeBuffer(SK_Stroke *stk); +void sk_growStrokeBufferN(SK_Stroke *stk, int n); + +void sk_replaceStrokePoint(SK_Stroke *stk, SK_Point *pt, int n); +void sk_insertStrokePoint(SK_Stroke *stk, SK_Point *pt, int n); +void sk_appendStrokePoint(SK_Stroke *stk, SK_Point *pt); +void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, int end); + +void sk_trimStroke(SK_Stroke *stk, int start, int end); +void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], float p_end[3]); +void sk_polygonizeStroke(SK_Stroke *stk, int start, int end); +void sk_flattenStroke(SK_Stroke *stk, int start, int end); +void sk_reverseStroke(SK_Stroke *stk); + +void sk_filterLastContinuousStroke(SK_Stroke *stk); +void sk_filterStroke(SK_Stroke *stk, int start, int end); + +void sk_initPoint(SK_Point *pt, SK_DrawData *dd, float *no); +void sk_copyPoint(SK_Point *dst, SK_Point *src); + +int sk_stroke_filtermval(SK_DrawData *dd); +void sk_endContinuousStroke(SK_Stroke *stk); + +void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk); + +void sk_initDrawData(SK_DrawData *dd, short mval[2]); + +void sk_deleteSelectedStrokes(SK_Sketch *sketch); +void sk_selectAllSketch(SK_Sketch *sketch, int mode); + +#endif diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 37130a0e3a0..eb8a894e800 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -66,8 +66,7 @@ #include "BKE_object.h" #include "BKE_object.h" #include "BKE_utildefines.h" - -//XXX #include "BIF_editdeform.h" +#include "BKE_sketch.h" #include "IK_solver.h" @@ -144,7 +143,7 @@ void free_armature(bArmature *arm) /* free sketch */ if (arm->sketch) { - ED_freeSketch(arm->sketch); + freeSketch(arm->sketch); arm->sketch = NULL; } } diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c new file mode 100644 index 00000000000..8deae7e8e10 --- /dev/null +++ b/source/blender/blenkernel/intern/sketch.c @@ -0,0 +1,600 @@ +/** + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" + +#include "BKE_sketch.h" +#include "BKE_utildefines.h" + +#include "DNA_userdef_types.h" + +void freeSketch(SK_Sketch *sketch) +{ + SK_Stroke *stk, *next; + + for (stk = sketch->strokes.first; stk; stk = next) + { + next = stk->next; + + sk_freeStroke(stk); + } + + BLI_freelistN(&sketch->depth_peels); + + MEM_freeN(sketch); +} + +SK_Sketch* createSketch() +{ + SK_Sketch *sketch; + + sketch = MEM_callocN(sizeof(SK_Sketch), "SK_Sketch"); + + sketch->active_stroke = NULL; + sketch->gesture = NULL; + + sketch->strokes.first = NULL; + sketch->strokes.last = NULL; + + return sketch; +} + +void sk_initPoint(SK_Point *pt, SK_DrawData *dd, float *no) +{ + if (no) + { + VECCOPY(pt->no, no); + Normalize(pt->no); + } + else + { + pt->no[0] = 0; + pt->no[1] = 0; + pt->no[2] = 1; + } + pt->p2d[0] = dd->mval[0]; + pt->p2d[1] = dd->mval[1]; + /* more init code here */ +} + +void sk_copyPoint(SK_Point *dst, SK_Point *src) +{ + memcpy(dst, src, sizeof(SK_Point)); +} + +void sk_allocStrokeBuffer(SK_Stroke *stk) +{ + stk->points = MEM_callocN(sizeof(SK_Point) * stk->buf_size, "SK_Point buffer"); +} + +void sk_freeStroke(SK_Stroke *stk) +{ + MEM_freeN(stk->points); + MEM_freeN(stk); +} + +SK_Stroke* sk_createStroke() +{ + SK_Stroke *stk; + + stk = MEM_callocN(sizeof(SK_Stroke), "SK_Stroke"); + + stk->selected = 0; + stk->nb_points = 0; + stk->buf_size = SK_Stroke_BUFFER_INIT_SIZE; + + sk_allocStrokeBuffer(stk); + + return stk; +} + +void sk_shrinkStrokeBuffer(SK_Stroke *stk) +{ + if (stk->nb_points < stk->buf_size) + { + SK_Point *old_points = stk->points; + + stk->buf_size = stk->nb_points; + + sk_allocStrokeBuffer(stk); + + memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); + + MEM_freeN(old_points); + } +} + +void sk_growStrokeBuffer(SK_Stroke *stk) +{ + if (stk->nb_points == stk->buf_size) + { + SK_Point *old_points = stk->points; + + stk->buf_size *= 2; + + sk_allocStrokeBuffer(stk); + + memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); + + MEM_freeN(old_points); + } +} + +void sk_growStrokeBufferN(SK_Stroke *stk, int n) +{ + if (stk->nb_points + n > stk->buf_size) + { + SK_Point *old_points = stk->points; + + while (stk->nb_points + n > stk->buf_size) + { + stk->buf_size *= 2; + } + + sk_allocStrokeBuffer(stk); + + memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); + + MEM_freeN(old_points); + } +} + + +void sk_replaceStrokePoint(SK_Stroke *stk, SK_Point *pt, int n) +{ + memcpy(stk->points + n, pt, sizeof(SK_Point)); +} + +void sk_insertStrokePoint(SK_Stroke *stk, SK_Point *pt, int n) +{ + int size = stk->nb_points - n; + + sk_growStrokeBuffer(stk); + + memmove(stk->points + n + 1, stk->points + n, size * sizeof(SK_Point)); + + memcpy(stk->points + n, pt, sizeof(SK_Point)); + + stk->nb_points++; +} + +void sk_appendStrokePoint(SK_Stroke *stk, SK_Point *pt) +{ + sk_growStrokeBuffer(stk); + + memcpy(stk->points + stk->nb_points, pt, sizeof(SK_Point)); + + stk->nb_points++; +} + +void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, int end) +{ + int size = end - start + 1; + + sk_growStrokeBufferN(stk, len - size); + + if (len != size) + { + int tail_size = stk->nb_points - end + 1; + + memmove(stk->points + start + len, stk->points + end + 1, tail_size * sizeof(SK_Point)); + } + + memcpy(stk->points + start, pts, len * sizeof(SK_Point)); + + stk->nb_points += len - size; +} + +void sk_trimStroke(SK_Stroke *stk, int start, int end) +{ + int size = end - start + 1; + + if (start > 0) + { + memmove(stk->points, stk->points + start, size * sizeof(SK_Point)); + } + + stk->nb_points = size; +} + +void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], float p_end[3]) +{ + SK_Point pt1, pt2; + SK_Point *prev, *next; + float delta_p[3]; + int i, total; + + total = end - start; + + VecSubf(delta_p, p_end, p_start); + + prev = stk->points + start; + next = stk->points + end; + + VECCOPY(pt1.p, p_start); + VECCOPY(pt1.no, prev->no); + pt1.mode = prev->mode; + pt1.type = prev->type; + + VECCOPY(pt2.p, p_end); + VECCOPY(pt2.no, next->no); + pt2.mode = next->mode; + pt2.type = next->type; + + sk_insertStrokePoint(stk, &pt1, start + 1); /* insert after start */ + sk_insertStrokePoint(stk, &pt2, end + 1); /* insert before end (since end was pushed back already) */ + + for (i = 1; i < total; i++) + { + float delta = (float)i / (float)total; + float *p = stk->points[start + 1 + i].p; + + VECCOPY(p, delta_p); + VecMulf(p, delta); + VecAddf(p, p, p_start); + } +} + +void sk_polygonizeStroke(SK_Stroke *stk, int start, int end) +{ + int offset; + int i; + + /* find first exact points outside of range */ + for (;start > 0; start--) + { + if (stk->points[start].type == PT_EXACT) + { + break; + } + } + + for (;end < stk->nb_points - 1; end++) + { + if (stk->points[end].type == PT_EXACT) + { + break; + } + } + + offset = start + 1; + + for (i = start + 1; i < end; i++) + { + if (stk->points[i].type == PT_EXACT) + { + if (offset != i) + { + memcpy(stk->points + offset, stk->points + i, sizeof(SK_Point)); + } + + offset++; + } + } + + /* some points were removes, move end of array */ + if (offset < end) + { + int size = stk->nb_points - end; + memmove(stk->points + offset, stk->points + end, size * sizeof(SK_Point)); + stk->nb_points = offset + size; + } +} + +void sk_flattenStroke(SK_Stroke *stk, int start, int end) +{ + float normal[3], distance[3]; + float limit; + int i, total; + + total = end - start + 1; + + VECCOPY(normal, stk->points[start].no); + + VecSubf(distance, stk->points[end].p, stk->points[start].p); + Projf(normal, distance, normal); + limit = Normalize(normal); + + for (i = 1; i < total - 1; i++) + { + float d = limit * i / total; + float offset[3]; + float *p = stk->points[start + i].p; + + VecSubf(distance, p, stk->points[start].p); + Projf(distance, distance, normal); + + VECCOPY(offset, normal); + VecMulf(offset, d); + + VecSubf(p, p, distance); + VecAddf(p, p, offset); + } +} + +void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk) +{ + if (sketch->active_stroke == stk) + { + sketch->active_stroke = NULL; + } + + BLI_remlink(&sketch->strokes, stk); + sk_freeStroke(stk); +} + +void sk_reverseStroke(SK_Stroke *stk) +{ + SK_Point *old_points = stk->points; + int i = 0; + + sk_allocStrokeBuffer(stk); + + for (i = 0; i < stk->nb_points; i++) + { + sk_copyPoint(stk->points + i, old_points + stk->nb_points - 1 - i); + } + + MEM_freeN(old_points); +} + + +/* Ramer-Douglas-Peucker algorithm for line simplification */ +void sk_filterStroke(SK_Stroke *stk, int start, int end) +{ + SK_Point *old_points = stk->points; + int nb_points = stk->nb_points; + char *marked = NULL; + char work; + int i; + + if (start == -1) + { + start = 0; + end = stk->nb_points - 1; + } + + sk_allocStrokeBuffer(stk); + stk->nb_points = 0; + + /* adding points before range */ + for (i = 0; i < start; i++) + { + sk_appendStrokePoint(stk, old_points + i); + } + + marked = MEM_callocN(nb_points, "marked array"); + marked[start] = 1; + marked[end] = 1; + + work = 1; + + /* while still reducing */ + while (work) + { + int ls, le; + work = 0; + + ls = start; + le = start+1; + + /* while not over interval */ + while (ls < end) + { + int max_i = 0; + short v1[2]; + float max_dist = 16; /* more than 4 pixels */ + + /* find the next marked point */ + while(marked[le] == 0) + { + le++; + } + + /* perpendicular vector to ls-le */ + v1[1] = old_points[le].p2d[0] - old_points[ls].p2d[0]; + v1[0] = old_points[ls].p2d[1] - old_points[le].p2d[1]; + + + for( i = ls + 1; i < le; i++ ) + { + float mul; + float dist; + short v2[2]; + + v2[0] = old_points[i].p2d[0] - old_points[ls].p2d[0]; + v2[1] = old_points[i].p2d[1] - old_points[ls].p2d[1]; + + if (v2[0] == 0 && v2[1] == 0) + { + continue; + } + + mul = (float)(v1[0]*v2[0] + v1[1]*v2[1]) / (float)(v2[0]*v2[0] + v2[1]*v2[1]); + + dist = mul * mul * (v2[0]*v2[0] + v2[1]*v2[1]); + + if (dist > max_dist) + { + max_dist = dist; + max_i = i; + } + } + + if (max_i != 0) + { + work = 1; + marked[max_i] = 1; + } + + ls = le; + le = ls + 1; + } + } + + + /* adding points after range */ + for (i = start; i <= end; i++) + { + if (marked[i]) + { + sk_appendStrokePoint(stk, old_points + i); + } + } + + MEM_freeN(marked); + + /* adding points after range */ + for (i = end + 1; i < nb_points; i++) + { + sk_appendStrokePoint(stk, old_points + i); + } + + MEM_freeN(old_points); + + sk_shrinkStrokeBuffer(stk); +} + + +void sk_filterLastContinuousStroke(SK_Stroke *stk) +{ + int start, end; + + end = stk->nb_points -1; + + for (start = end - 1; start > 0 && stk->points[start].type == PT_CONTINUOUS; start--) + { + /* nothing to do here*/ + } + + if (end - start > 1) + { + sk_filterStroke(stk, start, end); + } +} + +SK_Point *sk_lastStrokePoint(SK_Stroke *stk) +{ + SK_Point *pt = NULL; + + if (stk->nb_points > 0) + { + pt = stk->points + (stk->nb_points - 1); + } + + return pt; +} + +void sk_endContinuousStroke(SK_Stroke *stk) +{ + stk->points[stk->nb_points - 1].type = PT_EXACT; +} + +void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk) +{ + if (stk) + { + memcpy(&sketch->next_point, stk->points[stk->nb_points - 1].p, sizeof(SK_Point)); + } +} + +int sk_stroke_filtermval(SK_DrawData *dd) +{ + int retval = 0; + if (ABS(dd->mval[0] - dd->previous_mval[0]) + ABS(dd->mval[1] - dd->previous_mval[1]) > U.gp_manhattendist) + { + retval = 1; + } + + return retval; +} + +void sk_initDrawData(SK_DrawData *dd, short mval[2]) +{ + dd->mval[0] = mval[0]; + dd->mval[1] = mval[1]; + dd->previous_mval[0] = -1; + dd->previous_mval[1] = -1; + dd->type = PT_EXACT; +} + + +void sk_deleteSelectedStrokes(SK_Sketch *sketch) +{ + SK_Stroke *stk, *next; + + for (stk = sketch->strokes.first; stk; stk = next) + { + next = stk->next; + + if (stk->selected == 1) + { + sk_removeStroke(sketch, stk); + } + } +} + +void sk_selectAllSketch(SK_Sketch *sketch, int mode) +{ + SK_Stroke *stk = NULL; + + if (mode == -1) + { + for (stk = sketch->strokes.first; stk; stk = stk->next) + { + stk->selected = 0; + } + } + else if (mode == 0) + { + for (stk = sketch->strokes.first; stk; stk = stk->next) + { + stk->selected = 1; + } + } + else if (mode == 1) + { + int selected = 1; + + for (stk = sketch->strokes.first; stk; stk = stk->next) + { + selected &= stk->selected; + } + + selected ^= 1; + + for (stk = sketch->strokes.first; stk; stk = stk->next) + { + stk->selected = selected; + } + } +} diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 16c5971a930..f3f7bccde04 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -49,6 +49,7 @@ #include "BKE_object.h" #include "BKE_anim.h" #include "BKE_context.h" +#include "BKE_sketch.h" #include "ED_view3d.h" #include "ED_screen.h" @@ -74,76 +75,21 @@ //#include "mydevice.h" #include "reeb.h" -typedef enum SK_PType -{ - PT_CONTINUOUS, - PT_EXACT, -} SK_PType; -typedef enum SK_PMode -{ - PT_SNAP, - PT_PROJECT, -} SK_PMode; -typedef struct SK_Point -{ - float p[3]; - short p2d[2]; - float no[3]; - float size; - SK_PType type; - SK_PMode mode; -} SK_Point; +typedef int (*GestureDetectFct)(bContext*, SK_Gesture*, SK_Sketch *); +typedef void (*GestureApplyFct)(bContext*, SK_Gesture*, SK_Sketch *); -typedef struct SK_Stroke -{ - struct SK_Stroke *next, *prev; +typedef struct SK_GestureAction { + char name[64]; + GestureDetectFct detect; + GestureApplyFct apply; +} SK_GestureAction; - SK_Point *points; - int nb_points; - int buf_size; - int selected; -} SK_Stroke; +SK_Point boneSnap; +int LAST_SNAP_POINT_VALID = 0; +float LAST_SNAP_POINT[3]; -#define SK_OVERDRAW_LIMIT 5 - -typedef struct SK_Overdraw -{ - SK_Stroke *target; - int start, end; - int count; -} SK_Overdraw; - -#define SK_Stroke_BUFFER_INIT_SIZE 20 - -typedef struct SK_DrawData -{ - short mval[2]; - short previous_mval[2]; - SK_PType type; -} SK_DrawData; - -typedef struct SK_Intersection -{ - struct SK_Intersection *next, *prev; - SK_Stroke *stroke; - int before; - int after; - int gesture_index; - float p[3]; - float lambda; /* used for sorting intersection points */ -} SK_Intersection; - -typedef struct SK_Sketch -{ - ListBase strokes; - ListBase depth_peels; - SK_Stroke *active_stroke; - SK_Stroke *gesture; - SK_Point next_point; - SK_Overdraw over; -} SK_Sketch; typedef struct SK_StrokeIterator { HeadFct head; @@ -166,40 +112,12 @@ typedef struct SK_StrokeIterator { int stride; } SK_StrokeIterator; -typedef struct SK_Gesture { - SK_Stroke *stk; - SK_Stroke *segments; - - ListBase intersections; - ListBase self_intersections; - - int nb_self_intersections; - int nb_intersections; - int nb_segments; -} SK_Gesture; - -typedef int (*GestureDetectFct)(bContext*, SK_Gesture*, SK_Sketch *); -typedef void (*GestureApplyFct)(bContext*, SK_Gesture*, SK_Sketch *); - -typedef struct SK_GestureAction { - char name[64]; - GestureDetectFct detect; - GestureApplyFct apply; -} SK_GestureAction; - -SK_Point boneSnap; -int LAST_SNAP_POINT_VALID = 0; -float LAST_SNAP_POINT[3]; - /******************** PROTOTYPES ******************************/ void initStrokeIterator(BArcIterator *iter, SK_Stroke *stk, int start, int end); void sk_deleteSelectedStrokes(SK_Sketch *sketch); -void sk_freeStroke(SK_Stroke *stk); -void sk_freeSketch(SK_Sketch *sketch); - SK_Point *sk_lastStrokePoint(SK_Stroke *stk); int sk_detectCutGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch); @@ -561,331 +479,6 @@ void sk_retargetStroke(bContext *C, SK_Stroke *stk) /**************************************************************/ -void sk_freeSketch(SK_Sketch *sketch) -{ - SK_Stroke *stk, *next; - - for (stk = sketch->strokes.first; stk; stk = next) - { - next = stk->next; - - sk_freeStroke(stk); - } - - BLI_freelistN(&sketch->depth_peels); - - MEM_freeN(sketch); -} - -SK_Sketch* sk_createSketch() -{ - SK_Sketch *sketch; - - sketch = MEM_callocN(sizeof(SK_Sketch), "SK_Sketch"); - - sketch->active_stroke = NULL; - sketch->gesture = NULL; - - sketch->strokes.first = NULL; - sketch->strokes.last = NULL; - - return sketch; -} - -void sk_initPoint(bContext *C, SK_Point *pt, SK_DrawData *dd) -{ - ARegion *ar = CTX_wm_region(C); - RegionView3D *rv3d = ar->regiondata; - - VECCOPY(pt->no, rv3d->viewinv[2]); - pt->p2d[0] = dd->mval[0]; - pt->p2d[1] = dd->mval[1]; - Normalize(pt->no); - /* more init code here */ -} - -void sk_copyPoint(SK_Point *dst, SK_Point *src) -{ - memcpy(dst, src, sizeof(SK_Point)); -} - -void sk_allocStrokeBuffer(SK_Stroke *stk) -{ - stk->points = MEM_callocN(sizeof(SK_Point) * stk->buf_size, "SK_Point buffer"); -} - -void sk_freeStroke(SK_Stroke *stk) -{ - MEM_freeN(stk->points); - MEM_freeN(stk); -} - -SK_Stroke* sk_createStroke() -{ - SK_Stroke *stk; - - stk = MEM_callocN(sizeof(SK_Stroke), "SK_Stroke"); - - stk->selected = 0; - stk->nb_points = 0; - stk->buf_size = SK_Stroke_BUFFER_INIT_SIZE; - - sk_allocStrokeBuffer(stk); - - return stk; -} - -void sk_shrinkStrokeBuffer(SK_Stroke *stk) -{ - if (stk->nb_points < stk->buf_size) - { - SK_Point *old_points = stk->points; - - stk->buf_size = stk->nb_points; - - sk_allocStrokeBuffer(stk); - - memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); - - MEM_freeN(old_points); - } -} - -void sk_growStrokeBuffer(SK_Stroke *stk) -{ - if (stk->nb_points == stk->buf_size) - { - SK_Point *old_points = stk->points; - - stk->buf_size *= 2; - - sk_allocStrokeBuffer(stk); - - memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); - - MEM_freeN(old_points); - } -} - -void sk_growStrokeBufferN(SK_Stroke *stk, int n) -{ - if (stk->nb_points + n > stk->buf_size) - { - SK_Point *old_points = stk->points; - - while (stk->nb_points + n > stk->buf_size) - { - stk->buf_size *= 2; - } - - sk_allocStrokeBuffer(stk); - - memcpy(stk->points, old_points, sizeof(SK_Point) * stk->nb_points); - - MEM_freeN(old_points); - } -} - - -void sk_replaceStrokePoint(SK_Stroke *stk, SK_Point *pt, int n) -{ - memcpy(stk->points + n, pt, sizeof(SK_Point)); -} - -void sk_insertStrokePoint(SK_Stroke *stk, SK_Point *pt, int n) -{ - int size = stk->nb_points - n; - - sk_growStrokeBuffer(stk); - - memmove(stk->points + n + 1, stk->points + n, size * sizeof(SK_Point)); - - memcpy(stk->points + n, pt, sizeof(SK_Point)); - - stk->nb_points++; -} - -void sk_appendStrokePoint(SK_Stroke *stk, SK_Point *pt) -{ - sk_growStrokeBuffer(stk); - - memcpy(stk->points + stk->nb_points, pt, sizeof(SK_Point)); - - stk->nb_points++; -} - -void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, int end) -{ - int size = end - start + 1; - - sk_growStrokeBufferN(stk, len - size); - - if (len != size) - { - int tail_size = stk->nb_points - end + 1; - - memmove(stk->points + start + len, stk->points + end + 1, tail_size * sizeof(SK_Point)); - } - - memcpy(stk->points + start, pts, len * sizeof(SK_Point)); - - stk->nb_points += len - size; -} - -void sk_trimStroke(SK_Stroke *stk, int start, int end) -{ - int size = end - start + 1; - - if (start > 0) - { - memmove(stk->points, stk->points + start, size * sizeof(SK_Point)); - } - - stk->nb_points = size; -} - -void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], float p_end[3]) -{ - SK_Point pt1, pt2; - SK_Point *prev, *next; - float delta_p[3]; - int i, total; - - total = end - start; - - VecSubf(delta_p, p_end, p_start); - - prev = stk->points + start; - next = stk->points + end; - - VECCOPY(pt1.p, p_start); - VECCOPY(pt1.no, prev->no); - pt1.mode = prev->mode; - pt1.type = prev->type; - - VECCOPY(pt2.p, p_end); - VECCOPY(pt2.no, next->no); - pt2.mode = next->mode; - pt2.type = next->type; - - sk_insertStrokePoint(stk, &pt1, start + 1); /* insert after start */ - sk_insertStrokePoint(stk, &pt2, end + 1); /* insert before end (since end was pushed back already) */ - - for (i = 1; i < total; i++) - { - float delta = (float)i / (float)total; - float *p = stk->points[start + 1 + i].p; - - VECCOPY(p, delta_p); - VecMulf(p, delta); - VecAddf(p, p, p_start); - } -} - -void sk_polygonizeStroke(SK_Stroke *stk, int start, int end) -{ - int offset; - int i; - - /* find first exact points outside of range */ - for (;start > 0; start--) - { - if (stk->points[start].type == PT_EXACT) - { - break; - } - } - - for (;end < stk->nb_points - 1; end++) - { - if (stk->points[end].type == PT_EXACT) - { - break; - } - } - - offset = start + 1; - - for (i = start + 1; i < end; i++) - { - if (stk->points[i].type == PT_EXACT) - { - if (offset != i) - { - memcpy(stk->points + offset, stk->points + i, sizeof(SK_Point)); - } - - offset++; - } - } - - /* some points were removes, move end of array */ - if (offset < end) - { - int size = stk->nb_points - end; - memmove(stk->points + offset, stk->points + end, size * sizeof(SK_Point)); - stk->nb_points = offset + size; - } -} - -void sk_flattenStroke(SK_Stroke *stk, int start, int end) -{ - float normal[3], distance[3]; - float limit; - int i, total; - - total = end - start + 1; - - VECCOPY(normal, stk->points[start].no); - - VecSubf(distance, stk->points[end].p, stk->points[start].p); - Projf(normal, distance, normal); - limit = Normalize(normal); - - for (i = 1; i < total - 1; i++) - { - float d = limit * i / total; - float offset[3]; - float *p = stk->points[start + i].p; - - VecSubf(distance, p, stk->points[start].p); - Projf(distance, distance, normal); - - VECCOPY(offset, normal); - VecMulf(offset, d); - - VecSubf(p, p, distance); - VecAddf(p, p, offset); - } -} - -void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk) -{ - if (sketch->active_stroke == stk) - { - sketch->active_stroke = NULL; - } - - BLI_remlink(&sketch->strokes, stk); - sk_freeStroke(stk); -} - -void sk_reverseStroke(SK_Stroke *stk) -{ - SK_Point *old_points = stk->points; - int i = 0; - - sk_allocStrokeBuffer(stk); - - for (i = 0; i < stk->nb_points; i++) - { - sk_copyPoint(stk->points + i, old_points + stk->nb_points - 1 - i); - } - - MEM_freeN(old_points); -} - - void sk_cancelStroke(SK_Sketch *sketch) { if (sketch->active_stroke != NULL) @@ -895,201 +488,6 @@ void sk_cancelStroke(SK_Sketch *sketch) } } -void sk_filterStroke(SK_Stroke *stk, int start, int end) -{ - SK_Point *old_points = stk->points; - int nb_points = stk->nb_points; - char *marked = NULL; - char work; - int i, j; - - if (start == -1) - { - start = 0; - end = stk->nb_points - 1; - } - - sk_allocStrokeBuffer(stk); - stk->nb_points = 0; - - /* adding points before range */ - for (i = 0; i < start; i++) - { - sk_appendStrokePoint(stk, old_points + i); - } - -#if 0 - - /* Apply reverse Chaikin filter to simplify the polyline - * */ - for (i = start, j = start; i <= end; i++) - { - if (i - j == 3) - { - SK_Point pt; - float vec[3]; - - sk_copyPoint(&pt, &old_points[j+1]); - - pt.p[0] = 0; - pt.p[1] = 0; - pt.p[2] = 0; - - VECCOPY(vec, old_points[j].p); - VecMulf(vec, -0.25); - VecAddf(pt.p, pt.p, vec); - - VECCOPY(vec, old_points[j+1].p); - VecMulf(vec, 0.75); - VecAddf(pt.p, pt.p, vec); - - VECCOPY(vec, old_points[j+2].p); - VecMulf(vec, 0.75); - VecAddf(pt.p, pt.p, vec); - - VECCOPY(vec, old_points[j+3].p); - VecMulf(vec, -0.25); - VecAddf(pt.p, pt.p, vec); - - pt.size = -0.25 * old_points[j].size + 0.75 * old_points[j+1].size + 0.75 * old_points[j+2].size - 0.25 * old_points[j+3].size; - - sk_appendStrokePoint(stk, &pt); - - j += 2; - } - - /* this might be uneeded when filtering last continuous stroke */ - if (old_points[i].type == PT_EXACT) - { - sk_appendStrokePoint(stk, old_points + i); - j = i; - } - } -#else - /* Ramer-Douglas-Peucker */ - marked = MEM_callocN(nb_points, "marked array"); - marked[start] = 1; - marked[end] = 1; - - work = 1; - - /* while still reducing */ - while (work) - { - int ls, le; - work = 0; - - ls = start; - le = start+1; - - /* while not over interval */ - while (ls < end) - { - int i; - int max_i = 0; - short v1[2]; - float max_dist = 16; /* more than 4 pixels */ - - /* find the next marked point */ - while(marked[le] == 0) - { - le++; - } - - /* perpendicular vector to ls-le */ - v1[1] = old_points[le].p2d[0] - old_points[ls].p2d[0]; - v1[0] = old_points[ls].p2d[1] - old_points[le].p2d[1]; - - - for( i = ls + 1; i < le; i++ ) - { - float mul; - float dist; - short v2[2]; - - v2[0] = old_points[i].p2d[0] - old_points[ls].p2d[0]; - v2[1] = old_points[i].p2d[1] - old_points[ls].p2d[1]; - - if (v2[0] == 0 && v2[1] == 0) - { - continue; - } - - mul = (float)(v1[0]*v2[0] + v1[1]*v2[1]) / (float)(v2[0]*v2[0] + v2[1]*v2[1]); - - dist = mul * mul * (v2[0]*v2[0] + v2[1]*v2[1]); - - if (dist > max_dist) - { - max_dist = dist; - max_i = i; - } - } - - if (max_i != 0) - { - work = 1; - marked[max_i] = 1; - } - - ls = le; - le = ls + 1; - } - } - - - /* adding points after range */ - for (i = start; i <= end; i++) - { - if (marked[i]) - { - sk_appendStrokePoint(stk, old_points + i); - } - } - - MEM_freeN(marked); -#endif - - - /* adding points after range */ - for (i = end + 1; i < nb_points; i++) - { - sk_appendStrokePoint(stk, old_points + i); - } - - MEM_freeN(old_points); - - sk_shrinkStrokeBuffer(stk); -} - -void sk_filterLastContinuousStroke(SK_Stroke *stk) -{ - int start, end; - - end = stk->nb_points -1; - - for (start = end - 1; start > 0 && stk->points[start].type == PT_CONTINUOUS; start--) - { - /* nothing to do here*/ - } - - if (end - start > 1) - { - sk_filterStroke(stk, start, end); - } -} - -SK_Point *sk_lastStrokePoint(SK_Stroke *stk) -{ - SK_Point *pt = NULL; - - if (stk->nb_points > 0) - { - pt = stk->points + (stk->nb_points - 1); - } - - return pt; -} float sk_clampPointSize(SK_Point *pt, float size) { @@ -1127,7 +525,7 @@ void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height) { float vec2[3] = {0, 0, 1}, axis[3]; float angle; - + glPushMatrix(); Crossf(axis, vec2, pt->no); @@ -1415,12 +813,6 @@ void sk_updateOverdraw(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawDa int closest_index = -1; int dist = SNAP_MIN_DISTANCE * 2; -// /* If snapping, don't start overdraw */ Can't do that, snap is embed too now -// if (sk_lastStrokePoint(stk)->mode == PT_SNAP) -// { -// return; -// } - for (target = sketch->strokes.first; target; target = target->next) { if (target != stk) @@ -1659,9 +1051,11 @@ int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok int sk_addStrokeDrawPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd) { + ARegion *ar = CTX_wm_region(C); + RegionView3D *rv3d = ar->regiondata; SK_Point pt; - sk_initPoint(C, &pt, dd); + sk_initPoint(&pt, dd, rv3d->viewinv[2]); sk_getStrokeDrawPoint(C, &pt, sketch, stk, dd); @@ -1822,9 +1216,11 @@ int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd) { int point_added; + ARegion *ar = CTX_wm_region(C); + RegionView3D *rv3d = ar->regiondata; SK_Point pt; - sk_initPoint(C, &pt, dd); + sk_initPoint(&pt, dd, rv3d->viewinv[2]); point_added = sk_getStrokeSnapPoint(C, &pt, sketch, stk, dd); @@ -1910,38 +1306,6 @@ void sk_getStrokePoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke * } } -void sk_endContinuousStroke(SK_Stroke *stk) -{ - stk->points[stk->nb_points - 1].type = PT_EXACT; -} - -void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk) -{ - if (stk) - { - memcpy(&sketch->next_point, stk->points[stk->nb_points - 1].p, sizeof(SK_Point)); - } -} - -int sk_stroke_filtermval(SK_DrawData *dd) -{ - int retval = 0; - if (ABS(dd->mval[0] - dd->previous_mval[0]) + ABS(dd->mval[1] - dd->previous_mval[1]) > U.gp_manhattendist) - { - retval = 1; - } - - return retval; -} - -void sk_initDrawData(SK_DrawData *dd, short mval[2]) -{ - dd->mval[0] = mval[0]; - dd->mval[1] = mval[1]; - dd->previous_mval[0] = -1; - dd->previous_mval[1] = -1; - dd->type = PT_EXACT; -} /********************************************/ static void* headPoint(void *arg); @@ -2789,56 +2153,6 @@ void sk_applyGesture(bContext *C, SK_Sketch *sketch) /********************************************/ -void sk_deleteSelectedStrokes(SK_Sketch *sketch) -{ - SK_Stroke *stk, *next; - - for (stk = sketch->strokes.first; stk; stk = next) - { - next = stk->next; - - if (stk->selected == 1) - { - sk_removeStroke(sketch, stk); - } - } -} - -void sk_selectAllSketch(SK_Sketch *sketch, int mode) -{ - SK_Stroke *stk = NULL; - - if (mode == -1) - { - for (stk = sketch->strokes.first; stk; stk = stk->next) - { - stk->selected = 0; - } - } - else if (mode == 0) - { - for (stk = sketch->strokes.first; stk; stk = stk->next) - { - stk->selected = 1; - } - } - else if (mode == 1) - { - int selected = 1; - - for (stk = sketch->strokes.first; stk; stk = stk->next) - { - selected &= stk->selected; - } - - selected ^= 1; - - for (stk = sketch->strokes.first; stk; stk = stk->next) - { - stk->selected = selected; - } - } -} void sk_selectStroke(bContext *C, SK_Sketch *sketch, short mval[2], int extend) { @@ -2987,7 +2301,7 @@ void sk_drawSketch(Scene *scene, View3D *v3d, SK_Sketch *sketch, int with_names) } } -#if 0 +#if 1 if (sketch->depth_peels.first != NULL) { float colors[8][3] = { @@ -3204,16 +2518,6 @@ void BIF_selectAllSketch(bContext *C, int mode) } #endif -void ED_freeSketch(SK_Sketch *sketch) -{ - sk_freeSketch(sketch); -} - -SK_Sketch* ED_createSketch() -{ - return sk_createSketch(); -} - SK_Sketch* contextSketch(const bContext *C, int create) { Object *obedit = CTX_data_edit_object(C); @@ -3225,7 +2529,7 @@ SK_Sketch* contextSketch(const bContext *C, int create) if (arm->sketch == NULL && create) { - arm->sketch = sk_createSketch(); + arm->sketch = createSketch(); } sketch = arm->sketch; } @@ -3244,7 +2548,7 @@ SK_Sketch* viewcontextSketch(ViewContext *vc, int create) if (arm->sketch == NULL && create) { - arm->sketch = sk_createSketch(); + arm->sketch = createSketch(); } sketch = arm->sketch; } diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 31b0f712b97..738cbf094cb 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -141,9 +141,6 @@ int ED_operator_sketch_mode_active_stroke(struct bContext *C); int ED_operator_sketch_full_mode(struct bContext *C); int ED_operator_sketch_mode(const struct bContext *C); -void ED_freeSketch(struct SK_Sketch *sketch); -struct SK_Sketch* ED_createSketch(); - void BIF_convertSketch(struct bContext *C); void BIF_deleteSketch(struct bContext *C); void BIF_selectAllSketch(struct bContext *C, int mode); /* -1: deselect, 0: select, 1: toggle */ From 39ea55fff1e0ce362bb5e9bc958b6d651293e30d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 01:52:00 +0000 Subject: [PATCH 469/512] Operator Copy/Paste you can copy operator strings from buttons or the reporting interface and run them in the console. - Ctrl+C over an operator button copies its python string to the clipboard. - Paste in the console (1 line only for now). - operators run from python no longer require all arguments. --- .../editors/interface/interface_handlers.c | 14 +++++++ .../editors/space_console/console_intern.h | 1 + .../editors/space_console/console_ops.c | 39 +++++++++++++++++++ .../editors/space_console/space_console.c | 2 + source/blender/python/intern/bpy_operator.c | 2 +- source/blender/python/intern/bpy_rna.c | 31 ++++++++------- source/blender/python/intern/bpy_rna.h | 2 +- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index da2899dd3b2..30cfafb24f8 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -961,6 +961,20 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, button_activate_state(C, but, BUTTON_STATE_EXIT); } } + /* operator button (any type) */ + else if (but->optype) { + if(mode=='c') { + PointerRNA *opptr; + char *str; + opptr= uiButGetOperatorPtrRNA(but); /* allocated when needed, the button owns it */ + + str= WM_operator_pystring(but->optype, opptr, 0); + + WM_clipboard_text_set(str, 0); + + MEM_freeN(str); + } + } } /* ************* in-button text selection/editing ************* */ diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 62caad83144..6d002efcc8e 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -61,6 +61,7 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot); void CONSOLE_OT_clear(wmOperatorType *ot); void CONSOLE_OT_history_cycle(wmOperatorType *ot); void CONSOLE_OT_copy(wmOperatorType *ot); +void CONSOLE_OT_paste(wmOperatorType *ot); void CONSOLE_OT_zoom(wmOperatorType *ot); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 2637a4fb1a9..fa9055f2d8d 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -205,6 +205,11 @@ static int console_line_insert(ConsoleLine *ci, char *str) { int len = strlen(str); + if(len>0 && str[len-1]=='\n') {/* stop new lines being pasted at the end of lines */ + str[len-1]= '\0'; + len--; + } + if(len==0) return 0; @@ -621,6 +626,40 @@ void CONSOLE_OT_copy(wmOperatorType *ot) /* properties */ } +static int paste_exec(bContext *C, wmOperator *op) +{ + ConsoleLine *ci= console_history_verify(C); + + char *buf_str= WM_clipboard_text_get(0); + + if(buf_str==NULL) + return OPERATOR_CANCELLED; + + console_line_insert(ci, buf_str); /* TODO - Multiline copy?? */ + + MEM_freeN(buf_str); + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_paste(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Paste from Clipboard"; + ot->idname= "CONSOLE_OT_paste"; + + /* api callbacks */ + ot->poll= console_edit_poll; + ot->exec= paste_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER; + + /* properties */ +} + static int zoom_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index e406cc5a561..a763e7ce153 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -215,6 +215,7 @@ void console_operatortypes(void) WM_operatortype_append(CONSOLE_OT_clear); WM_operatortype_append(CONSOLE_OT_history_cycle); WM_operatortype_append(CONSOLE_OT_copy); + WM_operatortype_append(CONSOLE_OT_paste); WM_operatortype_append(CONSOLE_OT_zoom); @@ -295,6 +296,7 @@ void console_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "CONSOLE_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "CONSOLE_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", " "); /* fake tabs */ WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 2ffa9db4027..034440d77ac 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -95,7 +95,7 @@ static PyObject *pyop_call( PyObject * self, PyObject * args) RNA_pointer_create(NULL, ot->srna, NULL, &ptr); if(kw && PyDict_Size(kw)) - error_val= pyrna_pydict_to_props(&ptr, kw, "Converting py args to operator properties: "); + error_val= pyrna_pydict_to_props(&ptr, kw, 0, "Converting py args to operator properties: "); if (error_val==0) { diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 91e443dbc93..27bfb89b963 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -375,9 +375,9 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) return ret; } -/* This function is only used by operators right now - * Its used for taking keyword args and filling in property values */ -int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefix) +/* This function is used by operators and converting dicts into collections. + * Its takes keyword args and fills them with property values */ +int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const char *error_prefix) { int error_val = 0; int totkw; @@ -397,20 +397,21 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefi break; } - item= PyDict_GetItemString(kw, arg_name); + item= PyDict_GetItemString(kw, arg_name); /* wont set an error */ if (item == NULL) { - PyErr_Format( PyExc_TypeError, "%.200s: keyword \"%.200s\" missing", error_prefix, arg_name ? arg_name : ""); - error_val = -1; /* pyrna_py_to_prop sets the error */ - break; + if(all_args) { + PyErr_Format( PyExc_TypeError, "%.200s: keyword \"%.200s\" missing", error_prefix, arg_name ? arg_name : ""); + error_val = -1; /* pyrna_py_to_prop sets the error */ + break; + } + } else { + if (pyrna_py_to_prop(ptr, prop, NULL, item, error_prefix)) { + error_val= -1; + break; + } + totkw--; } - - if (pyrna_py_to_prop(ptr, prop, NULL, item, error_prefix)) { - error_val= -1; - break; - } - - totkw--; } RNA_STRUCT_END; @@ -753,7 +754,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v else RNA_property_collection_add(ptr, prop, &itemptr); - if(pyrna_pydict_to_props(&itemptr, item, "Converting a python list to an RNA collection")==-1) { + if(pyrna_pydict_to_props(&itemptr, item, 1, "Converting a python list to an RNA collection")==-1) { Py_DECREF(item); return -1; } diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h index 76e4a13c167..9138fd511b0 100644 --- a/source/blender/python/intern/bpy_rna.h +++ b/source/blender/python/intern/bpy_rna.h @@ -70,7 +70,7 @@ PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop ); /* operators also need this to set args */ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value, const char *error_prefix); -int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefix); +int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const char *error_prefix); PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop); /* functions for setting up new props - experemental */ From 61bd567071c6db82532cf2c2e5598dc500937881 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 30 Jul 2009 03:26:33 +0000 Subject: [PATCH 470/512] * tiny tweak to icon/text padding in list ui templates --- source/blender/editors/interface/interface_widgets.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index cea3038b901..596ae1b7276 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -889,10 +889,10 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB rect->xmin += UI_icon_get_width(but->icon+but->iconadd); if(but->editstr || (but->flag & UI_TEXT_LEFT)) - rect->xmin += 5; + rect->xmin += 10; } else if((but->flag & UI_TEXT_LEFT)) - rect->xmin += 5; + rect->xmin += 10; /* always draw text for textbutton cursor */ widget_draw_text(fstyle, wcol, but, rect); From ade8f5197a1971839253bb8d30eac676d5868e1c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 08:10:10 +0000 Subject: [PATCH 471/512] Engine specific panel's - All of this is in python and easy to change. - each panel class has a set() of compatible engines. - this set is checked for the poll function - external engines can add themselves to this panels compatible engines eg. buttons_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER') I tried doing this by subclassing each panel and replacing only the poll function to reference 'POVRAY_RENDER' but it became fairly complicated and meant registering many of the same panels under different names. Added mist support to povray. --- release/io/engine_render_pov.py | 55 ++++++++++++++++++++++++++++++--- release/ui/buttons_material.py | 38 ++++++++++++++--------- release/ui/buttons_scene.py | 18 ++++++++--- release/ui/buttons_world.py | 15 ++++++--- release/ui/space_console.py | 1 + 5 files changed, 101 insertions(+), 26 deletions(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index 186118246b8..c89d4390c77 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -64,7 +64,7 @@ def write_pov(filename, scene=None, info_callback = None): file.write('light_source {\n') file.write('\t< 0,0,0 >\n') - file.write('\tcolor red %.6f green %.6f blue %.6f\n' % color) + file.write('\tcolor rgb<%.3g, %.3g, %.3g>\n' % color) if lamp.type == 'POINT': # Point Lamp pass @@ -310,7 +310,7 @@ def write_pov(filename, scene=None, info_callback = None): float_col = col[0], col[1], col[2], 1-material.alpha, materialString #print material.apl - file.write(',\n\t\ttexture { pigment {rgbf<%.6f, %.6f, %.6f, %.6f>}%s}' % float_col) + file.write(',\n\t\ttexture { pigment {rgbf<%.3g, %.3g, %.3g, %.3g>}%s}' % float_col) index[0] = idx idx+=1 @@ -412,6 +412,22 @@ def write_pov(filename, scene=None, info_callback = None): bpy.data.remove_mesh(me) + def exportWorld(world): + if not world: + return + + mist = world.mist + + if mist.enabled: + file.write('\tfog {\n') + file.write('\t\tdistance %.6f\n' % mist.depth) + file.write('\t\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1-mist.intensity,))) + #file.write('\t\tfog_offset %.6f\n' % mist.start) + #file.write('\t\tfog_alt 5\n') + #file.write('\t\tturbulence 0.2\n') + #file.write('\t\tturb_depth 0.3\n') + file.write('\t\tfog_type 1\n') + file.write('\t}\n') exportCamera() #exportMaterials() @@ -419,6 +435,7 @@ def write_pov(filename, scene=None, info_callback = None): lamps = [l for l in sel if l.type == 'LAMP'] exportLamps(lamps) exportMeshs(sel) + exportWorld(scene.world) file.close() @@ -462,7 +479,8 @@ def write_pov_ini(filename_ini, filename_pov, filename_image): file.close() -class PovrayRenderEngine(bpy.types.RenderEngine): +class PovrayRender(bpy.types.RenderEngine): + __idname__ = 'POVRAY_RENDER' __label__ = "Povray" DELAY = 0.02 def _export(self, scene): @@ -471,6 +489,11 @@ class PovrayRenderEngine(bpy.types.RenderEngine): self.temp_file_in = tempfile.mktemp(suffix='.pov') self.temp_file_out = tempfile.mktemp(suffix='.tga') self.temp_file_ini = tempfile.mktemp(suffix='.ini') + ''' + self.temp_file_in = '/test.pov' + self.temp_file_out = '/test.tga' + self.temp_file_ini = '/test.ini' + ''' def info_callback(txt): self.update_stats("", "POVRAY: " + txt) @@ -580,4 +603,28 @@ class PovrayRenderEngine(bpy.types.RenderEngine): self._cleanup() -bpy.types.register(PovrayRenderEngine) +bpy.types.register(PovrayRender) + +# Use some of the existing buttons. +import buttons_scene +buttons_scene.SCENE_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_scene.SCENE_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_scene.SCENE_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_scene.SCENE_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER') +del buttons_scene + +# Use only a subset of the world panels +import buttons_world +buttons_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER') +buttons_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER') +del buttons_world + +# Example of wrapping every class 'as is' +import buttons_material +for member in dir(buttons_material): + subclass = getattr(buttons_material, member) + try: subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: pass +del buttons_material diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 66eca1a14b8..26a5294f218 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -5,13 +5,15 @@ class MaterialButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" __context__ = "material" + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here def poll(self, context): - return (context.material != None) + return (context.material) and (context.scene.render_data.engine in self.COMPAT_ENGINES) class MATERIAL_PT_preview(MaterialButtonsPanel): __idname__= "MATERIAL_PT_preview" __label__ = "Preview" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout @@ -22,9 +24,13 @@ class MATERIAL_PT_preview(MaterialButtonsPanel): class MATERIAL_PT_context_material(MaterialButtonsPanel): __idname__= "MATERIAL_PT_context_material" __show_header__ = False + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def poll(self, context): - return (context.object) + # An exception, dont call the parent poll func because + # this manages materials for all engine types + + return (context.object) and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw(self, context): layout = self.layout @@ -66,6 +72,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): class MATERIAL_PT_material(MaterialButtonsPanel): __idname__= "MATERIAL_PT_material" __label__ = "Shading" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout @@ -100,6 +107,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel): __idname__= "MATERIAL_PT_strand" __label__ = "Strand" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -132,6 +140,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel): class MATERIAL_PT_options(MaterialButtonsPanel): __idname__= "MATERIAL_PT_options" __label__ = "Options" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout @@ -165,6 +174,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel): class MATERIAL_PT_shadows(MaterialButtonsPanel): __idname__= "MATERIAL_PT_shadows" __label__ = "Shadows" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout @@ -190,10 +200,10 @@ class MATERIAL_PT_shadows(MaterialButtonsPanel): class MATERIAL_PT_diffuse(MaterialButtonsPanel): __idname__= "MATERIAL_PT_diffuse" __label__ = "Diffuse" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def poll(self, context): - mat = context.material - return (mat and mat.type != 'HALO') + return (context.material.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw(self, context): layout = self.layout @@ -234,10 +244,10 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): class MATERIAL_PT_specular(MaterialButtonsPanel): __idname__= "MATERIAL_PT_specular" __label__ = "Specular" + COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def poll(self, context): - mat = context.material - return (mat and mat.type != 'HALO') + return (context.material.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw(self, context): layout = self.layout @@ -278,10 +288,10 @@ class MATERIAL_PT_sss(MaterialButtonsPanel): __idname__= "MATERIAL_PT_sss" __label__ = "Subsurface Scattering" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): - mat = context.material - return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) + return (context.material.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw_header(self, context): layout = self.layout @@ -317,10 +327,10 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel): __idname__= "MATERIAL_PT_raymir" __label__ = "Ray Mirror" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): - mat = context.material - return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) + return (context.material.type in 'SURFACE', 'WIRE') and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw_header(self, context): layout = self.layout @@ -361,10 +371,10 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): __idname__= "MATERIAL_PT_raytransp" __label__= "Ray Transparency" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): - mat = context.material - return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE')) + return (context.material.type in 'SURFACE', 'WIRE') and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw_header(self, context): layout = self.layout @@ -405,10 +415,10 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): class MATERIAL_PT_halo(MaterialButtonsPanel): __idname__= "MATERIAL_PT_halo" __label__= "Halo" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): - mat = context.material - return (mat and mat.type == 'HALO') + return (context.material.type == 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES) def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 8b6bcb98e06..e952f19796a 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -5,14 +5,15 @@ class RenderButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" __context__ = "scene" - + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + def poll(self, context): rd = context.scene.render_data - return (not rd.use_game_engine) + return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES) class SCENE_PT_render(RenderButtonsPanel): __label__ = "Render" - + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout rd = context.scene.render_data @@ -26,7 +27,8 @@ class SCENE_PT_render(RenderButtonsPanel): class SCENE_PT_layers(RenderButtonsPanel): __label__ = "Layers" __default_closed__ = True - + COMPAT_ENGINES = set(['BLENDER_RENDER']) + def draw(self, context): layout = self.layout scene = context.scene @@ -111,6 +113,7 @@ class SCENE_PT_layers(RenderButtonsPanel): class SCENE_PT_shading(RenderButtonsPanel): __label__ = "Shading" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -132,6 +135,7 @@ class SCENE_PT_shading(RenderButtonsPanel): class SCENE_PT_performance(RenderButtonsPanel): __label__ = "Performance" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -174,6 +178,7 @@ class SCENE_PT_performance(RenderButtonsPanel): class SCENE_PT_post_processing(RenderButtonsPanel): __label__ = "Post Processing" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -201,6 +206,7 @@ class SCENE_PT_post_processing(RenderButtonsPanel): class SCENE_PT_output(RenderButtonsPanel): __label__ = "Output" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -263,6 +269,7 @@ class SCENE_PT_output(RenderButtonsPanel): class SCENE_PT_encoding(RenderButtonsPanel): __label__ = "Encoding" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): rd = context.scene.render_data @@ -309,6 +316,7 @@ class SCENE_PT_encoding(RenderButtonsPanel): class SCENE_PT_antialiasing(RenderButtonsPanel): __label__ = "Anti-Aliasing" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): layout = self.layout @@ -334,6 +342,7 @@ class SCENE_PT_antialiasing(RenderButtonsPanel): class SCENE_PT_dimensions(RenderButtonsPanel): __label__ = "Dimensions" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -373,6 +382,7 @@ class SCENE_PT_dimensions(RenderButtonsPanel): class SCENE_PT_stamp(RenderButtonsPanel): __label__ = "Stamp" __default_closed__ = True + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): rd = context.scene.render_data diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 67cf5cc2e89..1a51bf7676d 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -5,14 +5,16 @@ class WorldButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" __context__ = "world" - + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + def poll(self, context): rd = context.scene.render_data - return (context.world != None) and (not rd.use_game_engine) + return (context.world != None) and (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES) class WORLD_PT_preview(WorldButtonsPanel): __label__ = "Preview" - + COMPAT_ENGINES = set(['BLENDER_RENDER']) + def draw(self, context): layout = self.layout world = context.world @@ -21,10 +23,11 @@ class WORLD_PT_preview(WorldButtonsPanel): class WORLD_PT_context_world(WorldButtonsPanel): __show_header__ = False + COMPAT_ENGINES = set(['BLENDER_RENDER']) def poll(self, context): rd = context.scene.render_data - return (context.scene != None) and (not rd.use_game_engine) + return (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES) def draw(self, context): layout = self.layout @@ -42,6 +45,7 @@ class WORLD_PT_context_world(WorldButtonsPanel): class WORLD_PT_world(WorldButtonsPanel): __label__ = "World" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout @@ -64,6 +68,7 @@ class WORLD_PT_world(WorldButtonsPanel): class WORLD_PT_mist(WorldButtonsPanel): __label__ = "Mist" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): layout = self.layout @@ -87,6 +92,7 @@ class WORLD_PT_mist(WorldButtonsPanel): class WORLD_PT_stars(WorldButtonsPanel): __label__ = "Stars" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): layout = self.layout @@ -108,6 +114,7 @@ class WORLD_PT_stars(WorldButtonsPanel): class WORLD_PT_ambient_occlusion(WorldButtonsPanel): __label__ = "Ambient Occlusion" + COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): layout = self.layout diff --git a/release/ui/space_console.py b/release/ui/space_console.py index a5662fa3db3..8814553e55f 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -50,6 +50,7 @@ class CONSOLE_MT_console(bpy.types.Menu): layout.column() layout.itemO("console.clear") layout.itemO("console.copy") + layout.itemO("console.paste") class CONSOLE_MT_report(bpy.types.Menu): __space_type__ = "CONSOLE" From 249c5fcddc5546a7fa86c48d6752812e44e98c64 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Thu, 30 Jul 2009 08:30:57 +0000 Subject: [PATCH 472/512] World UI Cleaned up AO influence controls. These buttons had no labels, and were aligned strangely. Also made mist intensity a slider, since it's a percentage. --- release/ui/buttons_world.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 1a51bf7676d..62c720d09d1 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -86,7 +86,7 @@ class WORLD_PT_mist(WorldButtonsPanel): flow.itemR(world.mist, "start") flow.itemR(world.mist, "depth") flow.itemR(world.mist, "height") - flow.itemR(world.mist, "intensity") + flow.itemR(world.mist, "intensity", slider=True) layout.itemR(world.mist, "falloff") @@ -163,12 +163,21 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel): col.itemR(ao, "pixel_cache") col.itemR(ao, "correction") - col = layout.column(align=True) + col = layout.column() col.itemL(text="Influence:") - row = col.row() - row.itemR(ao, "blend_mode", text="") - row.itemR(ao, "color", text="") - row.itemR(ao, "energy", text="") + + col.row().itemR(ao, "blend_mode", expand=True) + + split = layout.split() + + col = split.column() + col.itemR(ao, "energy") + + col = split.column() + colsub = col.split(percentage=0.3) + colsub.itemL(text="Color:") + colsub.itemR(ao, "color", text="") + bpy.types.register(WORLD_PT_context_world) bpy.types.register(WORLD_PT_preview) From d56466747d5ee1df8492981e4e80448c3a7bf00f Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 30 Jul 2009 10:11:19 +0000 Subject: [PATCH 473/512] 2.5 Part 3 of Layout Code Cleanup: * More cleanup to match new coding guidelines. http://wiki.blender.org/index.php/Dev:Py/Blender2.5/Layouts/Guidelines * Replaced some if's with proper elif's. * Removed some unnecessary code. Note: Please don't use inconsistent assign names like colsub, subcol1 etc. anymore! --- release/ui/buttons_data_lamp.py | 24 +- release/ui/buttons_data_metaball.py | 3 +- release/ui/buttons_game.py | 154 +++++----- release/ui/buttons_material.py | 357 ++++++++++++------------ release/ui/buttons_object.py | 46 +-- release/ui/buttons_object_constraint.py | 192 ++++++------- release/ui/buttons_physics_field.py | 185 ++++++------ release/ui/buttons_physics_fluid.py | 126 +++++---- release/ui/buttons_physics_softbody.py | 48 ++-- release/ui/buttons_scene.py | 67 +++-- 10 files changed, 608 insertions(+), 594 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 5be25278e93..a522a66c871 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -52,41 +52,24 @@ class DATA_PT_lamp(DataButtonsPanel): sub = col.column() sub.itemR(lamp, "color", text="") sub.itemR(lamp, "energy") - - - - - #split = layout.split() - + if lamp.type in ('POINT', 'SPOT'): - #col = split.column() - #col.itemL(text="Falloff:") - sub = col.column() sub.itemR(lamp, "falloff_type", text="Falloff") sub.itemR(lamp, "distance") - - + if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED': - #col = split.column() col.itemL(text="Attenuation Factors:") sub = col.column(align=True) sub.itemR(lamp, "linear_attenuation", slider=True, text="Linear") sub.itemR(lamp, "quadratic_attenuation", slider=True, text="Quadratic") - #else: - # - # split.column() col.itemR(lamp, "sphere") if lamp.type == 'AREA': - #col = split.column() col.itemR(lamp, "distance") col.itemR(lamp, "gamma") - - #col = split.column() - - col.itemR(lamp, "shape") + sub = col.column(align=True) if (lamp.shape == 'SQUARE'): sub.itemR(lamp, "size") @@ -99,7 +82,6 @@ class DATA_PT_lamp(DataButtonsPanel): col.itemR(lamp, "layer", text="This Layer Only") col.itemR(lamp, "specular") col.itemR(lamp, "diffuse") - class DATA_PT_sunsky(DataButtonsPanel): __label__ = "Sun/Sky" diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py index 009a13df0b7..fa463d49c0d 100644 --- a/release/ui/buttons_data_metaball.py +++ b/release/ui/buttons_data_metaball.py @@ -76,8 +76,7 @@ class DATA_PT_metaball_element(DataButtonsPanel): col.itemR(metaelem, "stiffness", text="Stiffness") col.itemR(metaelem, "negative", text="Negative") col.itemR(metaelem, "hide", text="Hide") - - + bpy.types.register(DATA_PT_context_metaball) bpy.types.register(DATA_PT_metaball) bpy.types.register(DATA_PT_metaball_element) \ No newline at end of file diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index 3f60bceb284..9635ecfa67c 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -16,70 +16,78 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel): def draw(self, context): layout = self.layout - ob = context.active_object + ob = context.active_object game = ob.game layout.itemR(game, "physics_type") layout.itemS() split = layout.split() + col = split.column() - col.itemR(game, "actor") - col.itemR(game, "ghost") col.itemR(ob, "restrict_render", text="Invisible") # out of place but useful + col = split.column() col.itemR(game, "do_fh", text="Use Material Physics") col.itemR(game, "rotation_fh", text="Rotate From Normal") col.itemR(game, "no_sleeping") layout.itemS() + split = layout.split() + col = split.column() col.itemL(text="Attributes:") - colsub = col.column(align=True) - colsub.itemR(game, "mass") - colsub.itemR(game, "radius") - colsub.itemR(game, "form_factor") + sub = col.column(align=True) + sub.itemR(game, "mass") + sub.itemR(game, "radius") + sub.itemR(game, "form_factor") + col.itemS() + col.itemL(text="Damping:") - colsub = col.column(align=True) - colsub.itemR(game, "damping", text="Translation", slider=True) - colsub.itemR(game, "rotation_damping", text="Rotation", slider=True) + sub = col.column(align=True) + sub.itemR(game, "damping", text="Translation", slider=True) + sub.itemR(game, "rotation_damping", text="Rotation", slider=True) col = split.column() - col.itemL(text="Velocity:") - colsub = col.column(align=True) - colsub.itemR(game, "minimum_velocity", text="Minimum") - colsub.itemR(game, "maximum_velocity", text="Maximum") - col.itemS() - col.itemR(game, "anisotropic_friction") + sub = col.column(align=True) + sub.itemR(game, "minimum_velocity", text="Minimum") + sub.itemR(game, "maximum_velocity", text="Maximum") - colsub = col.column() - colsub.active = game.anisotropic_friction - colsub.itemR(game, "friction_coefficients", text="", slider=True) + col.itemS() + + col.itemR(game, "anisotropic_friction") + sub = col.column() + sub.active = game.anisotropic_friction + sub.itemR(game, "friction_coefficients", text="", slider=True) layout.itemS() + split = layout.split() - sub = split.column() - sub.itemL(text="Lock Translation:") - sub.itemR(game, "lock_x_axis", text="X") - sub.itemR(game, "lock_y_axis", text="Y") - sub.itemR(game, "lock_z_axis", text="Z") - sub = split.column() - sub.itemL(text="Lock Rotation:") - sub.itemR(game, "lock_x_rot_axis", text="X") - sub.itemR(game, "lock_y_rot_axis", text="Y") - sub.itemR(game, "lock_z_rot_axis", text="Z") + + col = split.column() + col.itemL(text="Lock Translation:") + col.itemR(game, "lock_x_axis", text="X") + col.itemR(game, "lock_y_axis", text="Y") + col.itemR(game, "lock_z_axis", text="Z") + + col = split.column() + col.itemL(text="Lock Rotation:") + col.itemR(game, "lock_x_rot_axis", text="X") + col.itemR(game, "lock_y_rot_axis", text="Y") + col.itemR(game, "lock_z_rot_axis", text="Z") class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel): __label__ = "Collision Bounds" def draw_header(self, context): layout = self.layout + ob = context.active_object game = ob.game @@ -90,17 +98,13 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel): ob = context.scene.objects[0] game = ob.game + layout.active = game.use_collision_bounds - - - layout.itemR(game, "collision_bounds", text="Bounds") - split = layout.split() - sub = split.column() - sub.itemR(game, "collision_compound", text="Compound") - sub = split.column() - sub.itemR(game, "collision_margin", text="Margin", slider=True) + row = layout.row() + row.itemR(game, "collision_compound", text="Compound") + row.itemR(game, "collision_margin", text="Margin", slider=True) bpy.types.register(PHYSICS_PT_game_physics) bpy.types.register(PHYSICS_PT_game_collision_bounds) @@ -119,6 +123,7 @@ class SCENE_PT_game(SceneButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data row = layout.row() @@ -130,64 +135,63 @@ class SCENE_PT_game_player(SceneButtonsPanel): def draw(self, context): layout = self.layout + gs = context.scene.game_data - row = layout.row() - row.itemR(gs, "fullscreen") + + layout.itemR(gs, "fullscreen") split = layout.split() + col = split.column() col.itemL(text="Resolution:") - colsub = col.column(align=True) - colsub.itemR(gs, "resolution_x", slider=False, text="X") - colsub.itemR(gs, "resolution_y", slider=False, text="Y") + sub = col.column(align=True) + sub.itemR(gs, "resolution_x", slider=False, text="X") + sub.itemR(gs, "resolution_y", slider=False, text="Y") col = split.column() col.itemL(text="Quality:") - colsub = col.column(align=True) - colsub.itemR(gs, "depth", text="Bit Depth", slider=False) - colsub.itemR(gs, "frequency", text="FPS", slider=False) + sub = col.column(align=True) + sub.itemR(gs, "depth", text="Bit Depth", slider=False) + sub.itemR(gs, "frequency", text="FPS", slider=False) # framing: col = layout.column() col.itemL(text="Framing:") col.row().itemR(gs, "framing_type", expand=True) - - colsub = col.column() - colsub.itemR(gs, "framing_color", text="") + sub = col.column() + sub.itemR(gs, "framing_color", text="") class SCENE_PT_game_stereo(SceneButtonsPanel): __label__ = "Stereo" def draw(self, context): layout = self.layout + gs = context.scene.game_data - - # stereo options: - col= layout.column() - row = col.row() - row.itemR(gs, "stereo", expand=True) - stereo_mode = gs.stereo + # stereo options: + layout.itemR(gs, "stereo", expand=True) + # stereo: if stereo_mode == 'STEREO': - row = layout.row() - row.itemR(gs, "stereo_mode") + layout.itemR(gs, "stereo_mode") # dome: if stereo_mode == 'DOME': - row = layout.row() - row.itemR(gs, "dome_mode", text="Dome Type") + layout.itemR(gs, "dome_mode", text="Dome Type") split=layout.split() + col=split.column() col.itemR(gs, "dome_angle", slider=True) col.itemR(gs, "dome_tesselation", text="Tesselation") + col=split.column() col.itemR(gs, "dome_tilt") col.itemR(gs, "dome_buffer_resolution", text="Resolution", slider=True) - col=layout.column() - col.itemR(gs, "dome_text") + + layout.itemR(gs, "dome_text") bpy.types.register(SCENE_PT_game) bpy.types.register(SCENE_PT_game_player) @@ -207,7 +211,7 @@ class WORLD_PT_game_context_world(WorldButtonsPanel): def poll(self, context): rd = context.scene.render_data - return (context.scene != None) and (rd.use_game_engine) + return (context.scene) and (rd.use_game_engine) def draw(self, context): layout = self.layout @@ -228,6 +232,7 @@ class WORLD_PT_game_world(WorldButtonsPanel): def draw(self, context): layout = self.layout + world = context.world row = layout.row() @@ -270,35 +275,39 @@ class WORLD_PT_game_physics(WorldButtonsPanel): def draw(self, context): layout = self.layout + gs = context.scene.game_data - flow = layout.column_flow() - flow.itemR(gs, "physics_engine") + + layout.itemR(gs, "physics_engine") if gs.physics_engine != "NONE": - flow.itemR(gs, "physics_gravity", text="Gravity") + layout.itemR(gs, "physics_gravity", text="Gravity") split = layout.split() + col = split.column() col.itemL(text="Physics Steps:") - colsub = col.column(align=True) - colsub.itemR(gs, "physics_step_max", text="Max") - colsub.itemR(gs, "physics_step_sub", text="Substeps") + sub = col.column(align=True) + sub.itemR(gs, "physics_step_max", text="Max") + sub.itemR(gs, "physics_step_sub", text="Substeps") col.itemR(gs, "fps", text="FPS") col = split.column() col.itemL(text="Logic Steps:") col.itemR(gs, "logic_step_max", text="Max") - col.itemS() - col.itemR(gs, "use_occlusion_culling", text="Occlusion Culling") - colsub = col.column() - colsub.active = gs.use_occlusion_culling - colsub.itemR(gs, "occlusion_culling_resolution", text="Resolution") + col = layout.column() + col.itemR(gs, "use_occlusion_culling", text="Occlusion Culling") + sub = col.column() + sub.active = gs.use_occlusion_culling + sub.itemR(gs, "occlusion_culling_resolution", text="Resolution") else: split = layout.split() + col = split.column() col.itemL(text="Physics Steps:") col.itemR(gs, "fps", text="FPS") + col = split.column() col.itemL(text="Logic Steps:") col.itemR(gs, "logic_step_max", text="Max") @@ -306,4 +315,3 @@ class WORLD_PT_game_physics(WorldButtonsPanel): bpy.types.register(WORLD_PT_game_context_world) bpy.types.register(WORLD_PT_game_world) bpy.types.register(WORLD_PT_game_physics) - diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 26a5294f218..729d39e3b60 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -11,18 +11,17 @@ class MaterialButtonsPanel(bpy.types.Panel): return (context.material) and (context.scene.render_data.engine in self.COMPAT_ENGINES) class MATERIAL_PT_preview(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_preview" __label__ = "Preview" COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout + mat = context.material layout.template_preview(mat) class MATERIAL_PT_context_material(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_context_material" __show_header__ = False COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) @@ -51,7 +50,6 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): if context.edit_object: row = layout.row(align=True) - row.itemO("object.material_slot_assign", text="Assign") row.itemO("object.material_slot_select", text="Select") row.itemO("object.material_slot_deselect", text="Deselect") @@ -88,117 +86,115 @@ class MATERIAL_PT_material(MaterialButtonsPanel): if mat.type in ('SURFACE', 'WIRE', 'VOLUME'): split = layout.split() - sub = split.column() - sub.itemR(mat, "alpha", slider=True) - sub.itemR(mat, "ambient", slider=True) - sub.itemR(mat, "emit") - sub.itemR(mat, "translucency", slider=True) + col = split.column() + col.itemR(mat, "alpha", slider=True) + col.itemR(mat, "ambient", slider=True) + col.itemR(mat, "emit") + col.itemR(mat, "translucency", slider=True) - sub = split.column() - sub.itemR(mat, "z_transparency") - sub.itemR(mat, "shadeless") - sub.itemR(mat, "tangent_shading") - sub.itemR(mat, "cubic", slider=True) + col = split.column() + col.itemR(mat, "z_transparency") + col.itemR(mat, "shadeless") + col.itemR(mat, "tangent_shading") + col.itemR(mat, "cubic", slider=True) elif mat.type == 'HALO': layout.itemR(mat, "alpha", slider=True) class MATERIAL_PT_strand(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_strand" __label__ = "Strand" __default_closed__ = True COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw(self, context): layout = self.layout - tan = context.material.strand + mat = context.material + tan = mat.strand split = layout.split() - sub = split.column() - sub.itemL(text="Size:") - sub.itemR(tan, "start_size", text="Root") - sub.itemR(tan, "end_size", text="Tip") - sub.itemR(tan, "min_size", text="Minimum") - sub.itemR(tan, "blender_units") - colsub = sub.column() - colsub.active = mat.shadeless== False - colsub.itemR(tan, "tangent_shading") + col = split.column() + col.itemL(text="Size:") + col.itemR(tan, "start_size", text="Root") + col.itemR(tan, "end_size", text="Tip") + col.itemR(tan, "min_size", text="Minimum") + col.itemR(tan, "blender_units") + sub = col.column() + sub.active = mat.shadeless == False + sub.itemR(tan, "tangent_shading") - sub = split.column() - sub.itemR(tan, "shape") - sub.itemR(tan, "width_fade") - sub.itemR(tan, "uv_layer") - colsub = sub.column() - colsub.active = mat.shadeless== False - colsub.itemR(tan, "surface_diffuse") - colsubsub = colsub.column() - colsubsub.active = tan.surface_diffuse - colsubsub.itemR(tan, "blend_distance", text="Distance") + col = split.column() + col.itemR(tan, "shape") + col.itemR(tan, "width_fade") + col.itemR(tan, "uv_layer") + sub = col.column() + sub.active = mat.shadeless == False + sub.itemR(tan, "surface_diffuse") + sub = col.column() + sub.active = tan.surface_diffuse + sub.itemR(tan, "blend_distance", text="Distance") class MATERIAL_PT_options(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_options" __label__ = "Options" COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout + mat = context.material split = layout.split() - sub = split.column() - sub.itemR(mat, "traceable") - sub.itemR(mat, "full_oversampling") - sub.itemR(mat, "sky") - sub.itemR(mat, "exclude_mist") - sub.itemR(mat, "invert_z") - - col = sub.column(align=True) - col.itemL(text="Light Group:") - col.itemR(mat, "light_group", text="") - row = col.row() + col = split.column() + col.itemR(mat, "traceable") + col.itemR(mat, "full_oversampling") + col.itemR(mat, "sky") + col.itemR(mat, "exclude_mist") + col.itemR(mat, "invert_z") + sub = col.column(align=True) + sub.itemL(text="Light Group:") + sub.itemR(mat, "light_group", text="") + row = sub.row() row.active = mat.light_group row.itemR(mat, "light_group_exclusive", text="Exclusive") - sub = split.column() - sub.itemR(mat, "face_texture") - colsub = sub.column() - colsub.active = mat.face_texture - colsub.itemR(mat, "face_texture_alpha") - sub.itemR(mat, "vertex_color_paint") - sub.itemR(mat, "vertex_color_light") - sub.itemR(mat, "object_color") + col = split.column() + col.itemR(mat, "face_texture") + sub = col.column() + sub.active = mat.face_texture + sub.itemR(mat, "face_texture_alpha") + col.itemR(mat, "vertex_color_paint") + col.itemR(mat, "vertex_color_light") + col.itemR(mat, "object_color") class MATERIAL_PT_shadows(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_shadows" __label__ = "Shadows" COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) def draw(self, context): layout = self.layout + mat = context.material split = layout.split() - sub = split.column() - sub.itemR(mat, "shadows", text="Receive") - sub.itemR(mat, "transparent_shadows", text="Receive Transparent") - sub.itemR(mat, "only_shadow", text="Shadows Only") - sub.itemR(mat, "cast_shadows_only", text="Cast Only") - sub.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) - sub = split.column() - sub.itemR(mat, "ray_shadow_bias", text="Auto Ray Bias") - colsub = sub.column() - colsub.active = not mat.ray_shadow_bias - colsub.itemR(mat, "shadow_ray_bias", text="Ray Shadow Bias") + col = split.column() + col.itemR(mat, "shadows", text="Receive") + col.itemR(mat, "transparent_shadows", text="Receive Transparent") + col.itemR(mat, "only_shadow", text="Shadows Only") + col.itemR(mat, "cast_shadows_only", text="Cast Only") + col.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) + + col = split.column() + col.itemR(mat, "ray_shadow_bias", text="Auto Ray Bias") + sub = col.column() + sub.active = not mat.ray_shadow_bias + sub.itemR(mat, "shadow_ray_bias", text="Ray Shadow Bias") sub.itemR(mat, "cast_buffer_shadows") sub.itemR(mat, "shadow_buffer_bias", text="Buffer Bias") - class MATERIAL_PT_diffuse(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_diffuse" __label__ = "Diffuse" COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) @@ -207,42 +203,41 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): def draw(self, context): layout = self.layout + mat = context.material split = layout.split() - sub = split.column() - sub.itemR(mat, "diffuse_color", text="") - row = sub.row() - row.active = mat.shadeless== False - row.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) - - sub = split.column() + col = split.column() + col.itemR(mat, "diffuse_color", text="") + sub = col.column() sub.active = mat.shadeless== False - sub.itemR(mat, "diffuse_shader", text="") - sub.itemR(mat, "use_diffuse_ramp", text="Ramp") + sub.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) - split = layout.split() - split.active = mat.shadeless== False - sub = split.column() + col = split.column() + col.active = mat.shadeless== False + col.itemR(mat, "diffuse_shader", text="") + col.itemR(mat, "use_diffuse_ramp", text="Ramp") + + col = layout.column() + col.active = mat.shadeless== False if mat.diffuse_shader == 'OREN_NAYAR': - sub.itemR(mat, "roughness") - if mat.diffuse_shader == 'MINNAERT': - sub.itemR(mat, "darkness") - if mat.diffuse_shader == 'TOON': - sub.itemR(mat, "diffuse_toon_size", text="Size") - sub = split.column() - sub.itemR(mat, "diffuse_toon_smooth", text="Smooth") - if mat.diffuse_shader == 'FRESNEL': - sub.itemR(mat, "diffuse_fresnel", text="Fresnel") - sub = split.column() - sub.itemR(mat, "diffuse_fresnel_factor", text="Factor") - - if mat.use_diffuse_ramp: + col.itemR(mat, "roughness") + elif mat.diffuse_shader == 'MINNAERT': + col.itemR(mat, "darkness") + elif mat.diffuse_shader == 'TOON': + row = col.row() + row.itemR(mat, "diffuse_toon_size", text="Size") + row.itemR(mat, "diffuse_toon_smooth", text="Smooth") + elif mat.diffuse_shader == 'FRESNEL': + row = col.row() + row.itemR(mat, "diffuse_fresnel", text="Fresnel") + row.itemR(mat, "diffuse_fresnel_factor", text="Factor") + + elif mat.use_diffuse_ramp: layout.template_color_ramp(mat.diffuse_ramp, expand=True) class MATERIAL_PT_specular(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_specular" __label__ = "Specular" COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) @@ -251,41 +246,39 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): def draw(self, context): layout = self.layout + mat = context.material - layout.active = mat.shadeless== False + layout.active = mat.shadeless == False split = layout.split() - sub = split.column() - sub.itemR(mat, "specular_color", text="") - sub.itemR(mat, "specular_reflection", text="Intensity", slider=True) + col = split.column() + col.itemR(mat, "specular_color", text="") + col.itemR(mat, "specular_reflection", text="Intensity", slider=True) - sub = split.column() - sub.itemR(mat, "specular_shader", text="") - sub.itemR(mat, "use_specular_ramp", text="Ramp") - - split = layout.split() - - sub = split.column() + col = split.column() + col.itemR(mat, "specular_shader", text="") + col.itemR(mat, "use_specular_ramp", text="Ramp") + + col = layout.column() if mat.specular_shader in ('COOKTORR', 'PHONG'): - sub.itemR(mat, "specular_hardness", text="Hardness") - if mat.specular_shader == 'BLINN': - sub.itemR(mat, "specular_hardness", text="Hardness") - sub = split.column() - sub.itemR(mat, "specular_ior", text="IOR") - if mat.specular_shader == 'WARDISO': - sub.itemR(mat, "specular_slope", text="Slope") - if mat.specular_shader == 'TOON': - sub.itemR(mat, "specular_toon_size", text="Size") - sub = split.column() - sub.itemR(mat, "specular_toon_smooth", text="Smooth") + col.itemR(mat, "specular_hardness", text="Hardness") + elif mat.specular_shader == 'BLINN': + row = col.row() + row.itemR(mat, "specular_hardness", text="Hardness") + row.itemR(mat, "specular_ior", text="IOR") + elif mat.specular_shader == 'WARDISO': + col.itemR(mat, "specular_slope", text="Slope") + elif mat.specular_shader == 'TOON': + row = col.row() + row.itemR(mat, "specular_toon_size", text="Size") + row.itemR(mat, "specular_toon_smooth", text="Smooth") if mat.use_specular_ramp: layout.template_color_ramp(mat.specular_ramp, expand=True) class MATERIAL_PT_sss(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_sss" __label__ = "Subsurface Scattering" __default_closed__ = True COMPAT_ENGINES = set(['BLENDER_RENDER']) @@ -301,30 +294,31 @@ class MATERIAL_PT_sss(MaterialButtonsPanel): def draw(self, context): layout = self.layout - sss = context.material.subsurface_scattering + mat = context.material + sss = context.material.subsurface_scattering + layout.active = sss.enabled split = layout.split() split.active = mat.shadeless== False - sub = split.column() - sub.itemR(sss, "color", text="") - sub.itemL(text="Blend:") - sub.itemR(sss, "color_factor", slider=True) - sub.itemR(sss, "texture_factor", slider=True) - sub.itemL(text="Scattering Weight:") - sub.itemR(sss, "front") - sub.itemR(sss, "back") + col = split.column() + col.itemR(sss, "color", text="") + col.itemL(text="Blend:") + col.itemR(sss, "color_factor", slider=True) + col.itemR(sss, "texture_factor", slider=True) + col.itemL(text="Scattering Weight:") + col.itemR(sss, "front") + col.itemR(sss, "back") - sub = split.column() - sub.itemR(sss, "ior") - sub.itemR(sss, "scale") - sub.itemR(sss, "radius", text="RGB Radius") - sub.itemR(sss, "error_tolerance") + col = split.column() + col.itemR(sss, "ior") + col.itemR(sss, "scale") + col.itemR(sss, "radius", text="RGB Radius") + col.itemR(sss, "error_tolerance") class MATERIAL_PT_raymir(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_raymir" __label__ = "Ray Mirror" __default_closed__ = True COMPAT_ENGINES = set(['BLENDER_RENDER']) @@ -334,32 +328,34 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel): def draw_header(self, context): layout = self.layout + raym = context.material.raytrace_mirror layout.itemR(raym, "enabled", text="") def draw(self, context): layout = self.layout - raym = context.material.raytrace_mirror + mat = context.material + raym = context.material.raytrace_mirror layout.active = raym.enabled split = layout.split() - sub = split.column() - sub.itemR(raym, "reflect", text="Reflectivity", slider=True) - sub.itemR(mat, "mirror_color", text="") - sub.itemR(raym, "fresnel") - sub.itemR(raym, "fresnel_fac", text="Fac", slider=True) + col = split.column() + col.itemR(raym, "reflect", text="Reflectivity", slider=True) + col.itemR(mat, "mirror_color", text="") + col.itemR(raym, "fresnel") + col.itemR(raym, "fresnel_fac", text="Fac", slider=True) - sub = split.column() - sub.itemR(raym, "gloss", slider=True) - colsub = sub.column() - colsub.active = raym.gloss < 1 - colsub.itemR(raym, "gloss_threshold", slider=True, text="Threshold") - colsub.itemR(raym, "gloss_samples", text="Samples") - colsub.itemR(raym, "gloss_anisotropic", slider=True, text="Anisotropic") + col = split.column() + col.itemR(raym, "gloss", slider=True) + sub = col.column() + sub.active = raym.gloss < 1 + sub.itemR(raym, "gloss_threshold", slider=True, text="Threshold") + sub.itemR(raym, "gloss_samples", text="Samples") + sub.itemR(raym, "gloss_anisotropic", slider=True, text="Anisotropic") row = layout.row() row.itemR(raym, "distance", text="Max Dist") @@ -368,7 +364,6 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel): layout.itemR(raym, "fade_to") class MATERIAL_PT_raytransp(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_raytransp" __label__= "Ray Transparency" __default_closed__ = True COMPAT_ENGINES = set(['BLENDER_RENDER']) @@ -378,34 +373,34 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): def draw_header(self, context): layout = self.layout + rayt = context.material.raytrace_transparency layout.itemR(rayt, "enabled", text="") def draw(self, context): layout = self.layout - rayt = context.material.raytrace_transparency - mat = context.material - layout.active = rayt.enabled + mat = context.material + rayt = context.material.raytrace_transparency + + layout.active = rayt.enabled and mat.shadeless = False split = layout.split() - split.active = mat.shadeless== False - sub = split.column() - sub.itemR(rayt, "ior") - sub.itemR(rayt, "fresnel") - sub.itemR(rayt, "fresnel_fac", text="Fac", slider=True) + col = split.column() + col.itemR(rayt, "ior") + col.itemR(rayt, "fresnel") + col.itemR(rayt, "fresnel_fac", text="Fac", slider=True) - sub = split.column() - sub.itemR(rayt, "gloss", slider=True) - colsub = sub.column() - colsub.active = rayt.gloss < 1 - colsub.itemR(rayt, "gloss_threshold", slider=True, text="Threshold") - colsub.itemR(rayt, "gloss_samples", text="Samples") + col = split.column() + col.itemR(rayt, "gloss", slider=True) + sub = col.column() + sub.active = rayt.gloss < 1 + sub.itemR(rayt, "gloss_threshold", slider=True, text="Threshold") + sub.itemR(rayt, "gloss_samples", text="Samples") flow = layout.column_flow() - flow.active = mat.shadeless== False flow.itemR(rayt, "filter", slider=True) flow.itemR(rayt, "limit") flow.itemR(rayt, "falloff") @@ -413,7 +408,6 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): flow.itemR(rayt, "depth") class MATERIAL_PT_halo(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_halo" __label__= "Halo" COMPAT_ENGINES = set(['BLENDER_RENDER']) @@ -433,7 +427,6 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): col.itemR(halo, "size") col.itemR(halo, "hardness") col.itemR(halo, "add", slider=True) - col.itemL(text="Options:") col.itemR(halo, "use_texture", text="Texture") col.itemR(halo, "use_vertex_normal", text="Vertex Normal") @@ -442,30 +435,28 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): col.itemR(halo, "soft") col = split.column() - col = col.column() col.itemR(halo, "ring") - colsub = col.column() - colsub.active = halo.ring - colsub.itemR(halo, "rings") - colsub.itemR(mat, "mirror_color", text="") + sub = col.column() + sub.active = halo.ring + sub.itemR(halo, "rings") + sub.itemR(mat, "mirror_color", text="") col.itemR(halo, "lines") - colsub = col.column() - colsub.active = halo.lines - colsub.itemR(halo, "line_number", text="Lines") - colsub.itemR(mat, "specular_color", text="") + sub = col.column() + sub.active = halo.lines + sub.itemR(halo, "line_number", text="Lines") + sub.itemR(mat, "specular_color", text="") col.itemR(halo, "star") - colsub = col.column() - colsub.active = halo.star - colsub.itemR(halo, "star_tips") + sub = col.column() + sub.active = halo.star + sub.itemR(halo, "star_tips") col.itemR(halo, "flare_mode") - colsub = col.column() - colsub.active = halo.flare_mode - colsub.itemR(halo, "flare_size", text="Size") - colsub.itemR(halo, "flare_subsize", text="Subsize") - colsub.itemR(halo, "flare_boost", text="Boost") - colsub.itemR(halo, "flare_seed", text="Seed") - colsub.itemR(halo, "flares_sub", text="Sub") - + sub = col.column() + sub.active = halo.flare_mode + sub.itemR(halo, "flare_size", text="Size") + sub.itemR(halo, "flare_subsize", text="Subsize") + sub.itemR(halo, "flare_boost", text="Boost") + sub.itemR(halo, "flare_seed", text="Seed") + sub.itemR(halo, "flares_sub", text="Sub") bpy.types.register(MATERIAL_PT_context_material) bpy.types.register(MATERIAL_PT_preview) diff --git a/release/ui/buttons_object.py b/release/ui/buttons_object.py index b2c8105f2bb..d59ed604c55 100644 --- a/release/ui/buttons_object.py +++ b/release/ui/buttons_object.py @@ -11,6 +11,7 @@ class OBJECT_PT_context_object(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object row = layout.row() @@ -22,6 +23,7 @@ class OBJECT_PT_transform(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object row = layout.row() @@ -34,9 +36,11 @@ class OBJECT_PT_relations(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object split = layout.split() + col = split.column() col.itemR(ob, "layers") col.itemS() @@ -58,6 +62,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object split = layout.split() @@ -83,6 +88,7 @@ class OBJECT_PT_display(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object row = layout.row() @@ -102,6 +108,7 @@ class OBJECT_PT_duplication(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object layout.itemR(ob, "dupli_type", expand=True) @@ -109,13 +116,13 @@ class OBJECT_PT_duplication(ObjectButtonsPanel): if ob.dupli_type == 'FRAMES': split = layout.split() - sub = split.column(align=True) - sub.itemR(ob, "dupli_frames_start", text="Start") - sub.itemR(ob, "dupli_frames_end", text="End") + col = split.column(align=True) + col.itemR(ob, "dupli_frames_start", text="Start") + col.itemR(ob, "dupli_frames_end", text="End") - sub = split.column(align=True) - sub.itemR(ob, "dupli_frames_on", text="On") - sub.itemR(ob, "dupli_frames_off", text="Off") + col = split.column(align=True) + col.itemR(ob, "dupli_frames_on", text="On") + col.itemR(ob, "dupli_frames_off", text="Off") layout.itemR(ob, "dupli_frames_no_speed", text="No Speed") @@ -135,30 +142,31 @@ class OBJECT_PT_animation(ObjectButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object split = layout.split() - sub = split.column() - sub.itemL(text="Time Offset:") - sub.itemR(ob, "time_offset_edit", text="Edit") - row = sub.row() + col = split.column() + col.itemL(text="Time Offset:") + col.itemR(ob, "time_offset_edit", text="Edit") + row = col.row() row.itemR(ob, "time_offset_particle", text="Particle") row.active = len(ob.particle_systems) != 0 - row = sub.row() + row = col.row() row.itemR(ob, "time_offset_parent", text="Parent") row.active = ob.parent != None - row = sub.row() + row = col.row() row.itemR(ob, "slow_parent") row.active = ob.parent != None - sub.itemR(ob, "time_offset", text="Offset") + col.itemR(ob, "time_offset", text="Offset") - sub = split.column() - sub.itemL(text="Track:") - sub.itemR(ob, "track", text="") - sub.itemR(ob, "track_axis", text="Axis") - sub.itemR(ob, "up_axis", text="Up Axis") - row = sub.row() + col = split.column() + col.itemL(text="Track:") + col.itemR(ob, "track", text="") + col.itemR(ob, "track_axis", text="Axis") + col.itemR(ob, "up_axis", text="Up Axis") + row = col.row() row.itemR(ob, "track_override_parent", text="Override Parent") row.active = ob.parent != None diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index b239a96a16a..3804ef5d409 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -8,6 +8,7 @@ class ConstraintButtonsPanel(bpy.types.Panel): def draw_constraint(self, con): layout = self.layout + box = layout.template_constraint(con) if box: @@ -91,23 +92,23 @@ class ConstraintButtonsPanel(bpy.types.Panel): split = layout.split() - sub = split.column() - sub.itemL(text="Location:") - sub.itemR(con, "locationx", text="X") - sub.itemR(con, "locationy", text="Y") - sub.itemR(con, "locationz", text="Z") + col = split.column() + col.itemL(text="Location:") + col.itemR(con, "locationx", text="X") + col.itemR(con, "locationy", text="Y") + col.itemR(con, "locationz", text="Z") - sub = split.column() - sub.itemL(text="Rotation:") - sub.itemR(con, "rotationx", text="X") - sub.itemR(con, "rotationy", text="Y") - sub.itemR(con, "rotationz", text="Z") + col = split.column() + col.itemL(text="Rotation:") + col.itemR(con, "rotationx", text="X") + col.itemR(con, "rotationy", text="Y") + col.itemR(con, "rotationz", text="Z") - sub = split.column() - sub.itemL(text="Scale:") - sub.itemR(con, "sizex", text="X") - sub.itemR(con, "sizey", text="Y") - sub.itemR(con, "sizez", text="Z") + col = split.column() + col.itemL(text="Scale:") + col.itemR(con, "sizex", text="X") + col.itemR(con, "sizey", text="Y") + col.itemR(con, "sizez", text="Z") row = layout.row() row.itemO("constraint.childof_set_inverse") @@ -134,18 +135,18 @@ class ConstraintButtonsPanel(bpy.types.Panel): if con.pole_target and con.pole_target.type == "ARMATURE": layout.item_pointerR(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone") - col = layout.column_flow() - col.itemR(con, "iterations") - col.itemR(con, "pole_angle") - col.itemR(con, "weight") - col.itemR(con, "orient_weight") - col.itemR(con, "chain_length") + flow = layout.column_flow() + flow.itemR(con, "iterations") + flow.itemR(con, "pole_angle") + flow.itemR(con, "weight") + flow.itemR(con, "orient_weight") + flow.itemR(con, "chain_length") - col = layout.column_flow() - col.itemR(con, "tail") - col.itemR(con, "rotation") - col.itemR(con, "targetless") - col.itemR(con, "stretch") + flow = layout.column_flow() + flow.itemR(con, "tail") + flow.itemR(con, "rotation") + flow.itemR(con, "targetless") + flow.itemR(con, "stretch") def follow_path(self, layout, con): self.target_template(layout, con) @@ -168,24 +169,24 @@ class ConstraintButtonsPanel(bpy.types.Panel): col = split.column() col.itemR(con, "use_limit_x") - colsub = col.column() - colsub.active = con.use_limit_x - colsub.itemR(con, "minimum_x", text="Min") - colsub.itemR(con, "maximum_x", text="Max") + sub = col.column() + sub.active = con.use_limit_x + sub.itemR(con, "minimum_x", text="Min") + sub.itemR(con, "maximum_x", text="Max") col = split.column() col.itemR(con, "use_limit_y") - colsub = col.column() - colsub.active = con.use_limit_y - colsub.itemR(con, "minimum_y", text="Min") - colsub.itemR(con, "maximum_y", text="Max") + sub = col.column() + sub.active = con.use_limit_y + sub.itemR(con, "minimum_y", text="Min") + sub.itemR(con, "maximum_y", text="Max") col = split.column() col.itemR(con, "use_limit_z") - colsub = col.column() - colsub.active = con.use_limit_z - colsub.itemR(con, "minimum_z", text="Min") - colsub.itemR(con, "maximum_z", text="Max") + sub = col.column() + sub.active = con.use_limit_z + sub.itemR(con, "minimum_z", text="Min") + sub.itemR(con, "maximum_z", text="Max") row = layout.row() row.itemR(con, "limit_transform") @@ -200,33 +201,33 @@ class ConstraintButtonsPanel(bpy.types.Panel): col = split.column() col.itemR(con, "use_minimum_x") - colsub = col.column() - colsub.active = con.use_minimum_x - colsub.itemR(con, "minimum_x", text="") + sub = col.column() + sub.active = con.use_minimum_x + sub.itemR(con, "minimum_x", text="") col.itemR(con, "use_maximum_x") - colsub = col.column() - colsub.active = con.use_maximum_x - colsub.itemR(con, "maximum_x", text="") + sub = col.column() + sub.active = con.use_maximum_x + sub.itemR(con, "maximum_x", text="") col = split.column() col.itemR(con, "use_minimum_y") - colsub = col.column() - colsub.active = con.use_minimum_y - colsub.itemR(con, "minimum_y", text="") + sub = col.column() + sub.active = con.use_minimum_y + sub.itemR(con, "minimum_y", text="") col.itemR(con, "use_maximum_y") - colsub = col.column() - colsub.active = con.use_maximum_y - colsub.itemR(con, "maximum_y", text="") + sub = col.column() + sub.active = con.use_maximum_y + sub.itemR(con, "maximum_y", text="") col = split.column() col.itemR(con, "use_minimum_z") - colsub = col.column() - colsub.active = con.use_minimum_z - colsub.itemR(con, "minimum_z", text="") + sub = col.column() + sub.active = con.use_minimum_z + sub.itemR(con, "minimum_z", text="") col.itemR(con, "use_maximum_z") - colsub = col.column() - colsub.active = con.use_maximum_z - colsub.itemR(con, "maximum_z", text="") + sub = col.column() + sub.active = con.use_maximum_z + sub.itemR(con, "maximum_z", text="") row = layout.row() row.itemR(con, "limit_transform") @@ -241,33 +242,33 @@ class ConstraintButtonsPanel(bpy.types.Panel): col = split.column() col.itemR(con, "use_minimum_x") - colsub = col.column() - colsub.active = con.use_minimum_x - colsub.itemR(con, "minimum_x", text="") + sub = col.column() + sub.active = con.use_minimum_x + sub.itemR(con, "minimum_x", text="") col.itemR(con, "use_maximum_x") - colsub = col.column() - colsub.active = con.use_maximum_x - colsub.itemR(con, "maximum_x", text="") + sub = col.column() + sub.active = con.use_maximum_x + sub.itemR(con, "maximum_x", text="") col = split.column() col.itemR(con, "use_minimum_y") - colsub = col.column() - colsub.active = con.use_minimum_y - colsub.itemR(con, "minimum_y", text="") + sub = col.column() + sub.active = con.use_minimum_y + sub.itemR(con, "minimum_y", text="") col.itemR(con, "use_maximum_y") - colsub = col.column() - colsub.active = con.use_maximum_y - colsub.itemR(con, "maximum_y", text="") + sub = col.column() + sub.active = con.use_maximum_y + sub.itemR(con, "maximum_y", text="") col = split.column() col.itemR(con, "use_minimum_z") - colsub = col.column() - colsub.active = con.use_minimum_z - colsub.itemR(con, "minimum_z", text="") + sub = col.column() + sub.active = con.use_minimum_z + sub.itemR(con, "minimum_z", text="") col.itemR(con, "use_maximum_z") - colsub = col.column() - colsub.active = con.use_maximum_z - colsub.itemR(con, "maximum_z", text="") + sub = col.column() + sub.active = con.use_maximum_z + sub.itemR(con, "maximum_z", text="") row = layout.row() row.itemR(con, "limit_transform") @@ -284,21 +285,21 @@ class ConstraintButtonsPanel(bpy.types.Panel): col = split.column() col.itemR(con, "rotate_like_x", text="X") - colsub = col.column() - colsub.active = con.rotate_like_x - colsub.itemR(con, "invert_x", text="Invert") + sub = col.column() + sub.active = con.rotate_like_x + sub.itemR(con, "invert_x", text="Invert") col = split.column() col.itemR(con, "rotate_like_y", text="Y") - colsub = col.column() - colsub.active = con.rotate_like_y - colsub.itemR(con, "invert_y", text="Invert") + sub = col.column() + sub.active = con.rotate_like_y + sub.itemR(con, "invert_y", text="Invert") col = split.column() col.itemR(con, "rotate_like_z", text="Z") - colsub = col.column() - colsub.active = con.rotate_like_z - colsub.itemR(con, "invert_z", text="Invert") + sub = col.column() + sub.active = con.rotate_like_z + sub.itemR(con, "invert_z", text="Invert") layout.itemR(con, "offset") @@ -311,21 +312,21 @@ class ConstraintButtonsPanel(bpy.types.Panel): col = split.column() col.itemR(con, "locate_like_x", text="X") - colsub = col.column() - colsub.active = con.locate_like_x - colsub.itemR(con, "invert_x", text="Invert") + sub = col.column() + sub.active = con.locate_like_x + sub.itemR(con, "invert_x", text="Invert") col = split.column() col.itemR(con, "locate_like_y", text="Y") - colsub = col.column() - colsub.active = con.locate_like_y - colsub.itemR(con, "invert_y", text="Invert") + sub = col.column() + sub.active = con.locate_like_y + sub.itemR(con, "invert_y", text="Invert") col = split.column() col.itemR(con, "locate_like_z", text="Z") - colsub = col.column() - colsub.active = con.locate_like_z - colsub.itemR(con, "invert_z", text="Invert") + sub = col.column() + sub.active = con.locate_like_z + sub.itemR(con, "invert_z", text="Invert") layout.itemR(con, "offset") @@ -516,11 +517,11 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): __context__ = "constraint" def poll(self, context): - return (context.object != None) + return (context.object) def draw(self, context): - ob = context.object layout = self.layout + ob = context.object row = layout.row() row.item_menu_enumO("object.constraint_add", "type") @@ -538,9 +539,10 @@ class BONE_PT_constraints(ConstraintButtonsPanel): return (ob and ob.type == "ARMATURE" and context.bone) def draw(self, context): + layout = self.layout + ob = context.object pchan = ob.pose.pose_channels[context.bone.name] - layout = self.layout row = layout.row() row.item_menu_enumO("pose.constraint_add", "type") diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 180133f599e..b9c81042a13 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -16,6 +16,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel): def draw(self, context): layout = self.layout + ob = context.object field = ob.field @@ -24,65 +25,67 @@ class PHYSICS_PT_field(PhysicButtonsPanel): split = layout.split(percentage=0.3) split.itemL(text="Type:") - split.itemR(field, "type", text="" - ) + split.itemR(field, "type", text="") split = layout.split() - sub = split.column() + col = split.column() if field.type == "GUIDE": - sub = col.column() - sub.itemR(field, "guide_path_add") + col.itemR(field, "guide_path_add") - if field.type == "WIND": - sub.itemR(field, "strength") - sub = split.column() - sub.itemR(field, "noise") - sub.itemR(field, "seed") + elif field.type == "WIND": + col.itemR(field, "strength") + + col = split.column() + col.itemR(field, "noise") + col.itemR(field, "seed") - - if field.type == "VORTEX": - sub.itemR(field, "strength") - sub = split.column() - sub.itemL(text="") + elif field.type == "VORTEX": + col.itemR(field, "strength") + + col = split.column() + col.itemL(text="") - if field.type in ("SPHERICAL", "CHARGE", "LENNARDJ"): - sub.itemR(field, "strength") - sub = split.column() - sub.itemR(field, "planar") - sub.itemR(field, "surface") + elif field.type in ("SPHERICAL", "CHARGE", "LENNARDJ"): + col.itemR(field, "strength") - if field.type == "BOID": - sub.itemR(field, "strength") - sub = split.column() - sub.itemR(field, "surface") + col = split.column() + col.itemR(field, "planar") + col.itemR(field, "surface") - if field.type == "MAGNET": - sub.itemR(field, "strength") - sub = split.column() - sub.itemR(field, "planar") + elif field.type == "BOID": + col.itemR(field, "strength") - if field.type == "HARMONIC": - sub.itemR(field, "strength") - sub.itemR(field, "harmonic_damping", text="Damping") - sub = split.column() - sub.itemR(field, "surface") - sub.itemR(field, "planar") + col = split.column() + col.itemR(field, "surface") - if field.type == "TEXTURE": - sub.itemR(field, "strength") - sub.itemR(field, "texture", text="") - sub.itemR(field, "texture_mode") - sub.itemR(field, "texture_nabla") - sub = split.column() - sub.itemR(field, "use_coordinates") - sub.itemR(field, "root_coordinates") - sub.itemR(field, "force_2d") + elif field.type == "MAGNET": + col.itemR(field, "strength") + + col = split.column() + col.itemR(field, "planar") + + elif field.type == "HARMONIC": + col.itemR(field, "strength") + col.itemR(field, "harmonic_damping", text="Damping") + + col = split.column() + col.itemR(field, "surface") + col.itemR(field, "planar") + + elif field.type == "TEXTURE": + col.itemR(field, "strength") + col.itemR(field, "texture", text="") + col.itemR(field, "texture_mode") + col.itemR(field, "texture_nabla") + + col = split.column() + col.itemR(field, "use_coordinates") + col.itemR(field, "root_coordinates") + col.itemR(field, "force_2d") if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET", "BOID"): - - layout.itemS() layout.itemL(text="Falloff:") layout.itemR(field, "falloff_type", expand=True) @@ -93,19 +96,18 @@ class PHYSICS_PT_field(PhysicButtonsPanel): layout.itemS() split = layout.split() - sub = split.column() - sub.itemR(field, "use_min_distance", text="Minimum") - colsub1 = sub.column() - colsub1.active = field.use_min_distance - colsub1.itemR(field, "minimum_distance", text="Distance") + col = split.column() + col.itemR(field, "use_min_distance", text="Minimum") + sub = col.column() + sub.active = field.use_min_distance + sub.itemR(field, "minimum_distance", text="Distance") - sub = split.column() - - sub.itemR(field, "use_max_distance", text="Maximum") - colsub2 = sub.column() - colsub2.active = field.use_max_distance - colsub2.itemR(field, "maximum_distance", text="Distance") + col = split.column() + col.itemR(field, "use_max_distance", text="Maximum") + sub = col.column() + sub.active = field.use_max_distance + sub.itemR(field, "maximum_distance", text="Distance") if field.falloff_type == "CONE": layout.itemS() @@ -113,45 +115,43 @@ class PHYSICS_PT_field(PhysicButtonsPanel): row = layout.row() row.itemR(field, "radial_falloff", text="Power") - row.itemL(text="") + row.itemL() split = layout.split() - sub = split.column() - sub.itemR(field, "use_radial_min", text="Minimum") - colsub1 = sub.column() - colsub1.active = field.use_radial_min - colsub1.itemR(field, "radial_minimum", text="Angle") + col = split.column() + col.itemR(field, "use_radial_min", text="Minimum") + sub = col.column() + sub.active = field.use_radial_min + sub.itemR(field, "radial_minimum", text="Angle") - sub = split.column() - - sub.itemR(field, "use_radial_max", text="Maximum") - colsub2 = sub.column() - colsub2.active = field.use_radial_max - colsub2.itemR(field, "radial_maximum", text="Angle") - - if field.falloff_type == "TUBE": + col = split.column() + col.itemR(field, "use_radial_max", text="Maximum") + sub = col.column() + sub.active = field.use_radial_max + sub.itemR(field, "radial_maximum", text="Angle") + elif field.falloff_type == "TUBE": layout.itemS() layout.itemL(text="Radial:") + row = layout.row() row.itemR(field, "radial_falloff", text="Power") - row.itemL(text="") + row.itemL() split = layout.split() - sub = split.column() - sub.itemR(field, "use_radial_min", text="Minimum") - colsub1 = sub.column() - colsub1.active = field.use_radial_min - colsub1.itemR(field, "radial_minimum", text="Distance") + col = split.column() + col.itemR(field, "use_radial_min", text="Minimum") + sub = col.column() + sub.active = field.use_radial_min + sub.itemR(field, "radial_minimum", text="Distance") - sub = split.column() - - sub.itemR(field, "use_radial_max", text="Maximum") - colsub2 = sub.column() - colsub2.active = field.use_radial_max - colsub2.itemR(field, "radial_maximum", text="Distance") + col = split.column() + col.itemR(field, "use_radial_max", text="Maximum") + sub = col.column() + sub.active = field.use_radial_max + sub.itemR(field, "radial_maximum", text="Distance") #if ob.type in "CURVE": #if field.type == "GUIDE": @@ -179,6 +179,7 @@ class PHYSICS_PT_collision(PhysicButtonsPanel): def draw(self, context): layout = self.layout + md = context.collision settings = context.object.collision @@ -190,25 +191,25 @@ class PHYSICS_PT_collision(PhysicButtonsPanel): col.itemL(text="Particle:") col.itemR(settings, "permeability", slider=True) col.itemL(text="Particle Damping:") - colsub = col.column(align=True) - colsub.itemR(settings, "damping_factor", text="Factor", slider=True) - colsub.itemR(settings, "random_damping", text="Random", slider=True) + sub = col.column(align=True) + sub.itemR(settings, "damping_factor", text="Factor", slider=True) + sub.itemR(settings, "random_damping", text="Random", slider=True) col.itemL(text="Soft Body and Cloth:") - colsub = col.column(align=True) - colsub.itemR(settings, "outer_thickness", text="Outer", slider=True) - colsub.itemR(settings, "inner_thickness", text="Inner", slider=True) + sub = col.column(align=True) + sub.itemR(settings, "outer_thickness", text="Outer", slider=True) + sub.itemR(settings, "inner_thickness", text="Inner", slider=True) - col.itemL(text="Force Fields:") + layout.itemL(text="Force Fields:") layout.itemR(md, "absorption", text="Absorption") col = split.column() col.itemL(text="") col.itemR(settings, "kill_particles") col.itemL(text="Particle Friction:") - colsub = col.column(align=True) - colsub.itemR(settings, "friction_factor", text="Factor", slider=True) - colsub.itemR(settings, "random_friction", text="Random", slider=True) + sub = col.column(align=True) + sub.itemR(settings, "friction_factor", text="Factor", slider=True) + sub.itemR(settings, "random_friction", text="Random", slider=True) col.itemL(text="Soft Body Damping:") col.itemR(settings, "damping", text="Factor", slider=True) diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 1f56c423c13..33979faa4a7 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -16,6 +16,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): def draw(self, context): layout = self.layout + md = context.fluid ob = context.object @@ -42,9 +43,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): if fluid: - - col = layout.column(align=True) - col.itemR(fluid, "type") + layout.itemR(fluid, "type") if fluid.type == 'DOMAIN': layout.itemO("fluid.bake", text="BAKE") @@ -52,56 +51,59 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col = split.column() col.itemL(text="Resolution:") - colsub = col.column() - colsub.itemR(fluid, "resolution", text="Final") - colsub.itemL(text="Render Display:") - colsub.itemR(fluid, "render_display_mode", text="") + sub = col.column() + sub.itemR(fluid, "resolution", text="Final") + sub.itemL(text="Render Display:") + sub.itemR(fluid, "render_display_mode", text="") col.itemL(text="Time:") - colsub = col.column(align=True) - colsub.itemR(fluid, "start_time", text="Start") - colsub.itemR(fluid, "end_time", text="End") + sub = col.column(align=True) + sub.itemR(fluid, "start_time", text="Start") + sub.itemR(fluid, "end_time", text="End") col = split.column() - colsub = col.column() - colsub.itemL(text="Required Memory: " + fluid.memory_estimate) - colsub.itemR(fluid, "preview_resolution", text="Preview") - colsub.itemL(text="Viewport Display:") - colsub.itemR(fluid, "viewport_display_mode", text="") - colsub = col.column() - colsub.itemL(text="") - colsub.itemR(fluid, "reverse_frames") - colsub.itemR(fluid, "generate_speed_vectors") + col.itemL(text="Required Memory: " + fluid.memory_estimate) + col.itemR(fluid, "preview_resolution", text="Preview") + col.itemL(text="Viewport Display:") + col.itemR(fluid, "viewport_display_mode", text="") + col.itemL() + col.itemR(fluid, "reverse_frames") + col.itemR(fluid, "generate_speed_vectors") layout.itemL(text="Path:") layout.itemR(fluid, "path", text="") - if fluid.type == 'FLUID': + elif fluid.type == 'FLUID': split = layout.split() + col = split.column() col.itemL(text="Volume Initialization:") col.itemR(fluid, "volume_initialization", text="") col.itemR(fluid, "export_animated_mesh") + col = split.column() col.itemL(text="Initial Velocity:") col.itemR(fluid, "initial_velocity", text="") - if fluid.type == 'OBSTACLE': + elif fluid.type == 'OBSTACLE': split = layout.split() + col = split.column() col.itemL(text="Volume Initialization:") col.itemR(fluid, "volume_initialization", text="") col.itemR(fluid, "export_animated_mesh") + col = split.column() col.itemL(text="Slip Type:") - colsub=col.column(align=True) - colsub.itemR(fluid, "slip_type", text="") + sub = col.column(align=True) + sub.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - colsub.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") + sub.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") col.itemR(fluid, "impact_factor") - if fluid.type == 'INFLOW': + elif fluid.type == 'INFLOW': split = layout.split() + col = split.column() col.itemL(text="Volume Initialization:") col.itemR(fluid, "volume_initialization", text="") @@ -112,24 +114,26 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col.itemL(text="Inflow Velocity:") col.itemR(fluid, "inflow_velocity", text="") - if fluid.type == 'OUTFLOW': + elif fluid.type == 'OUTFLOW': split = layout.split() + col = split.column() col.itemL(text="Volume Initialization:") col.itemR(fluid, "volume_initialization", text="") col.itemR(fluid, "export_animated_mesh") - col = split.column() - if fluid.type == 'PARTICLE': + split.column() + + elif fluid.type == 'PARTICLE': split = layout.split() col = split.column() col.itemL(text="Influence:") - colsub = col.column(align=True) - colsub.itemR(fluid, "particle_influence", text="Size") - colsub.itemR(fluid, "alpha_influence", text="Alpha") - col.itemL(text="Path:") + sub = col.column(align=True) + sub.itemR(fluid, "particle_influence", text="Size") + sub.itemR(fluid, "alpha_influence", text="Alpha") + layout.itemL(text="Path:") layout.itemR(fluid, "path", text="") col = split.column() @@ -138,7 +142,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col.itemR(fluid, "floats") col.itemR(fluid, "tracer") - if fluid.type == 'CONTROL': + elif fluid.type == 'CONTROL': split = layout.split() col = split.column() @@ -148,23 +152,23 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col = split.column() col.itemL(text="Time:") - col=col.column(align=True) - col.itemR(fluid, "start_time", text="Start") - col.itemR(fluid, "end_time", text="End") + sub = col.column(align=True) + sub.itemR(fluid, "start_time", text="Start") + sub.itemR(fluid, "end_time", text="End") split = layout.split() col = split.column() col.itemL(text="Attraction Force:") - col=col.column(align=True) - col.itemR(fluid, "attraction_strength", text="Strength") - col.itemR(fluid, "attraction_radius", text="Radius") + sub = col.column(align=True) + sub.itemR(fluid, "attraction_strength", text="Strength") + sub.itemR(fluid, "attraction_radius", text="Radius") col = split.column() col.itemL(text="Velocity Force:") - col=col.column(align=True) - col.itemR(fluid, "velocity_strength", text="Strength") - col.itemR(fluid, "velocity_radius", text="Radius") + sub = col.column(align=True) + sub.itemR(fluid, "velocity_strength", text="Strength") + sub.itemR(fluid, "velocity_radius", text="Radius") class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): __label__ = "Domain World" @@ -181,6 +185,7 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): def draw(self, context): layout = self.layout + fluid = context.fluid.settings split = layout.split() @@ -188,26 +193,25 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): col = split.column() col.itemL(text="Gravity:") col.itemR(fluid, "gravity", text="") - col.itemL(text="Real World Size:") col.itemR(fluid, "real_world_size", text="Metres") col = split.column() col.itemL(text="Viscosity Presets:") - colsub=col.column(align=True) - colsub.itemR(fluid, "viscosity_preset", text="") + sub = col.column(align=True) + sub.itemR(fluid, "viscosity_preset", text="") if fluid.viscosity_preset == 'MANUAL': - colsub.itemR(fluid, "viscosity_base", text="Base") - colsub.itemR(fluid, "viscosity_exponent", text="Exponent", slider=True) + sub.itemR(fluid, "viscosity_base", text="Base") + sub.itemR(fluid, "viscosity_exponent", text="Exponent", slider=True) else: - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemL() + sub.itemL() col.itemL(text="Optimization:") - col=col.column(align=True) - col.itemR(fluid, "grid_levels", slider=True) - col.itemR(fluid, "compressibility", slider=True) + sub = col.column(align=True) + sub.itemR(fluid, "grid_levels", slider=True) + sub.itemR(fluid, "compressibility", slider=True) class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): __label__ = "Domain Boundary" @@ -224,20 +228,23 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): def draw(self, context): layout = self.layout + fluid = context.fluid.settings split = layout.split() + col = split.column() col.itemL(text="Slip Type:") - col=col.column(align=True) - col.itemR(fluid, "slip_type", text="") + sub = col.column(align=True) + sub.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - col.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") + sub.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") + col = split.column() col.itemL(text="Surface:") - col=col.column(align=True) - col.itemR(fluid, "surface_smoothing", text="Smoothing") - col.itemR(fluid, "surface_subdivisions", text="Subdivisions") + sub = col.column(align=True) + sub.itemR(fluid, "surface_smoothing", text="Smoothing") + sub.itemR(fluid, "surface_subdivisions", text="Subdivisions") class PHYSICS_PT_domain_particles(PhysicButtonsPanel): __label__ = "Domain Particles" @@ -254,9 +261,10 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel): def draw(self, context): layout = self.layout + fluid = context.fluid.settings - col=layout.column(align=True) + col = layout.column(align=True) col.itemR(fluid, "tracer_particles") col.itemR(fluid, "generate_particles") diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py index c73bef18e73..80e11f92d6b 100644 --- a/release/ui/buttons_physics_softbody.py +++ b/release/ui/buttons_physics_softbody.py @@ -16,6 +16,7 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel): def draw(self, context): layout = self.layout + md = context.soft_body ob = context.object @@ -50,22 +51,23 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel): col.itemL(text="Simulation:") col.itemR(softbody, "gravity") col.itemR(softbody, "speed") - - + class PHYSICS_PT_softbody_goal(PhysicButtonsPanel): __label__ = "Soft Body Goal" def poll(self, context): - return (context.soft_body != None) + return (context.soft_body) def draw_header(self, context): layout = self.layout + softbody = context.soft_body.settings layout.itemR(softbody, "use_goal", text="") def draw(self, context): layout = self.layout + md = context.soft_body ob = context.object @@ -81,34 +83,35 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel): col = split.column() col.itemL(text="Goal Strengths:") col.itemR(softbody, "goal_default", text="Default") - subcol = col.column(align=True) - subcol.itemR(softbody, "goal_min", text="Minimum") - subcol.itemR(softbody, "goal_max", text="Maximum") + sub = col.column(align=True) + sub.itemR(softbody, "goal_min", text="Minimum") + sub.itemR(softbody, "goal_max", text="Maximum") col = split.column() col.itemL(text="Goal Settings:") col.itemR(softbody, "goal_spring", text="Stiffness") col.itemR(softbody, "goal_friction", text="Damping") + layout.item_pointerR(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group") class PHYSICS_PT_softbody_edge(PhysicButtonsPanel): __label__ = "Soft Body Edges" def poll(self, context): - return (context.soft_body != None) + return (context.soft_body) def draw_header(self, context): layout = self.layout + softbody = context.soft_body.settings layout.itemR(softbody, "use_edges", text="") def draw(self, context): layout = self.layout + md = context.soft_body ob = context.object - - split = layout.split() if md: softbody = md.settings @@ -128,14 +131,14 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel): col = split.column() col.itemR(softbody, "stiff_quads") - subcol = col.column() - subcol.active = softbody.stiff_quads - subcol.itemR(softbody, "shear") + sub = col.column() + sub.active = softbody.stiff_quads + sub.itemR(softbody, "shear") col.itemR(softbody, "new_aero", text="Aero") - subcol = col.column() - subcol.enabled = softbody.new_aero - subcol.itemR(softbody, "aero", text="Factor") + sub = col.column() + sub.enabled = softbody.new_aero + sub.itemR(softbody, "aero", text="Factor") col.itemL(text="Collision:") col.itemR(softbody, "edge_collision", text="Edge") @@ -145,25 +148,26 @@ class PHYSICS_PT_softbody_collision(PhysicButtonsPanel): __label__ = "Soft Body Collision" def poll(self, context): - return (context.soft_body != None) + return (context.soft_body) def draw_header(self, context): layout = self.layout + softbody = context.soft_body.settings layout.itemR(softbody, "self_collision", text="") def draw(self, context): layout = self.layout + md = context.soft_body ob = context.object - - split = layout.split() if md: softbody = md.settings layout.active = softbody.self_collision + layout.itemL(text="Collision Type:") layout.itemR(softbody, "collision_type", expand=True) @@ -177,15 +181,14 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel): __label__ = "Soft Body Solver" def poll(self, context): - return (context.soft_body != None) + return (context.soft_body) def draw(self, context): layout = self.layout + md = context.soft_body ob = context.object - - split = layout.split() - + if md: softbody = md.settings @@ -200,7 +203,6 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel): col = split.column() col.itemR(softbody, "error_limit") - col.itemL(text="Helpers:") col.itemR(softbody, "choke") col.itemR(softbody, "fuzzy") diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index e952f19796a..9e0d6c12e17 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -14,8 +14,10 @@ class RenderButtonsPanel(bpy.types.Panel): class SCENE_PT_render(RenderButtonsPanel): __label__ = "Render" COMPAT_ENGINES = set(['BLENDER_RENDER']) + def draw(self, context): layout = self.layout + rd = context.scene.render_data row = layout.row() @@ -31,6 +33,7 @@ class SCENE_PT_layers(RenderButtonsPanel): def draw(self, context): layout = self.layout + scene = context.scene rd = scene.render_data @@ -44,6 +47,7 @@ class SCENE_PT_layers(RenderButtonsPanel): rl = rd.layers[rd.active_layer_index] split = layout.split() + col = split.column() col.itemR(scene, "visible_layers", text="Scene") col = split.column() @@ -54,6 +58,7 @@ class SCENE_PT_layers(RenderButtonsPanel): layout.itemS() layout.itemL(text="Include:") + split = layout.split() col = split.column() @@ -81,6 +86,7 @@ class SCENE_PT_layers(RenderButtonsPanel): layout.itemS() split = layout.split() + col = split.column() col.itemL(text="Passes:") col.itemR(rl, "pass_combined") @@ -117,6 +123,7 @@ class SCENE_PT_shading(RenderButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data split = layout.split() @@ -139,6 +146,7 @@ class SCENE_PT_performance(RenderButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data split = layout.split() @@ -146,16 +154,14 @@ class SCENE_PT_performance(RenderButtonsPanel): col = split.column(align=True) col.itemL(text="Threads:") col.row().itemR(rd, "threads_mode", expand=True) - colsub = col.column() - colsub.enabled = rd.threads_mode == 'THREADS_FIXED' - colsub.itemR(rd, "threads") + sub = col.column() + sub.enabled = rd.threads_mode == 'THREADS_FIXED' + sub.itemR(rd, "threads") - col = split.column() - - sub = col.column(align=True) - sub.itemL(text="Tiles:") - sub.itemR(rd, "parts_x", text="X") - sub.itemR(rd, "parts_y", text="Y") + col = split.column(align=True) + col.itemL(text="Tiles:") + col.itemR(rd, "parts_x", text="X") + col.itemR(rd, "parts_y", text="Y") split = layout.split() @@ -166,15 +172,14 @@ class SCENE_PT_performance(RenderButtonsPanel): row.enabled = not rd.full_sample col = split.column() + col.active = rd.use_compositing col.itemL() col.itemR(rd, "free_image_textures") - col.active = rd.use_compositing row = layout.row() row.active = rd.render_raytracing row.itemR(rd, "octree_resolution", text="Ray Tracing Octree") - class SCENE_PT_post_processing(RenderButtonsPanel): __label__ = "Post Processing" __default_closed__ = True @@ -182,6 +187,7 @@ class SCENE_PT_post_processing(RenderButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data split = layout.split() @@ -193,12 +199,12 @@ class SCENE_PT_post_processing(RenderButtonsPanel): col = split.column() row = col.row() row.itemR(rd, "fields", text="Fields") - rowsub = row.row() - rowsub.active = rd.fields - rowsub.itemR(rd, "fields_still", text="Still") - rowsub = col.row() - rowsub.active = rd.fields - rowsub.itemR(rd, "field_order", expand=True) + sub = row.row() + sub.active = rd.fields + sub.itemR(rd, "fields_still", text="Still") + sub = col.row() + sub.active = rd.fields + sub.itemR(rd, "field_order", expand=True) split = layout.split() split.itemL() @@ -210,6 +216,7 @@ class SCENE_PT_output(RenderButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data layout.itemR(rd, "output_path", text="") @@ -230,6 +237,7 @@ class SCENE_PT_output(RenderButtonsPanel): elif rd.file_format == 'OPENEXR': split = layout.split() + col = split.column() col.itemR(rd, "exr_codec") @@ -277,9 +285,11 @@ class SCENE_PT_encoding(RenderButtonsPanel): def draw(self, context): layout = self.layout + rd = context.scene.render_data split = layout.split() + split.itemR(rd, "ffmpeg_format") if rd.ffmpeg_format in ('AVI', 'QUICKTIME', 'MKV', 'OGG'): split.itemR(rd, "ffmpeg_codec") @@ -320,12 +330,14 @@ class SCENE_PT_antialiasing(RenderButtonsPanel): def draw_header(self, context): layout = self.layout + rd = context.scene.render_data layout.itemR(rd, "antialiasing", text="") def draw(self, context): layout = self.layout + rd = context.scene.render_data layout.active = rd.antialiasing @@ -385,13 +397,15 @@ class SCENE_PT_stamp(RenderButtonsPanel): COMPAT_ENGINES = set(['BLENDER_RENDER']) def draw_header(self, context): + layout = self.layout + rd = context.scene.render_data - layout = self.layout layout.itemR(rd, "render_stamp", text="") def draw(self, context): layout = self.layout + rd = context.scene.render_data layout.active = rd.render_stamp @@ -408,17 +422,17 @@ class SCENE_PT_stamp(RenderButtonsPanel): col.itemR(rd, "stamp_marker", text="Marker") col.itemR(rd, "stamp_sequence_strip", text="Seq. Strip") - sub = split.column() - sub.active = rd.render_stamp - sub.itemR(rd, "stamp_foreground", slider=True) - sub.itemR(rd, "stamp_background", slider=True) - sub.itemR(rd, "stamp_font_size", text="Font Size") + col = split.column() + col.active = rd.render_stamp + col.itemR(rd, "stamp_foreground", slider=True) + col.itemR(rd, "stamp_background", slider=True) + col.itemR(rd, "stamp_font_size", text="Font Size") row = layout.split(percentage=0.2) row.itemR(rd, "stamp_note", text="Note") - rowsub = row.row() - rowsub.active = rd.stamp_note - rowsub.itemR(rd, "stamp_note_text", text="") + sub = row.row() + sub.active = rd.stamp_note + sub.itemR(rd, "stamp_note_text", text="") bpy.types.register(SCENE_PT_render) bpy.types.register(SCENE_PT_layers) @@ -430,4 +444,3 @@ bpy.types.register(SCENE_PT_encoding) bpy.types.register(SCENE_PT_performance) bpy.types.register(SCENE_PT_post_processing) bpy.types.register(SCENE_PT_stamp) - From 13786ba621a22dcd3a7c7a747d481e08b4e5530b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 30 Jul 2009 10:33:27 +0000 Subject: [PATCH 474/512] 2.5 - Tiny tweak to a tiny tweak for text padding (22039) The second tweak made (for the case without an icon) was causing superfluous spacing all over the UI for things like checkboxes + combo-boxes + text widgets. This was quite ugly and gave readability issues with the checkboxes in particular. --- source/blender/editors/interface/interface_widgets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 596ae1b7276..eed4425b7ad 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -892,7 +892,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB rect->xmin += 10; } else if((but->flag & UI_TEXT_LEFT)) - rect->xmin += 10; + rect->xmin += 5; /* always draw text for textbutton cursor */ widget_draw_text(fstyle, wcol, but, rect); From 248fa8ec5479ecccb9471c321fa685e5d9f4ad0c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 30 Jul 2009 10:38:46 +0000 Subject: [PATCH 475/512] 2.5 Buttons: * Material buttons didn't import. Fixed. * Removed Path label from Fluid panels. --- release/ui/buttons_material.py | 2 +- release/ui/buttons_physics_fluid.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 729d39e3b60..8c977567324 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -384,7 +384,7 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): mat = context.material rayt = context.material.raytrace_transparency - layout.active = rayt.enabled and mat.shadeless = False + layout.active = rayt.enabled and mat.shadeless == False split = layout.split() diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 33979faa4a7..17813beecaa 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -69,7 +69,6 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): col.itemR(fluid, "reverse_frames") col.itemR(fluid, "generate_speed_vectors") - layout.itemL(text="Path:") layout.itemR(fluid, "path", text="") elif fluid.type == 'FLUID': @@ -133,7 +132,6 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): sub.itemR(fluid, "particle_influence", text="Size") sub.itemR(fluid, "alpha_influence", text="Alpha") - layout.itemL(text="Path:") layout.itemR(fluid, "path", text="") col = split.column() From ec4904a9fe19492f7ed07d1ebc1664d51ebcbb06 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 11:05:45 +0000 Subject: [PATCH 476/512] Support for povray radiosity settings, adjust in scene panel. --- release/io/engine_render_pov.py | 166 ++++++++++++++++++++++++++++++-- 1 file changed, 158 insertions(+), 8 deletions(-) diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py index c89d4390c77..44f34d890f6 100644 --- a/release/io/engine_render_pov.py +++ b/release/io/engine_render_pov.py @@ -419,15 +419,39 @@ def write_pov(filename, scene=None, info_callback = None): mist = world.mist if mist.enabled: - file.write('\tfog {\n') - file.write('\t\tdistance %.6f\n' % mist.depth) - file.write('\t\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1-mist.intensity,))) - #file.write('\t\tfog_offset %.6f\n' % mist.start) - #file.write('\t\tfog_alt 5\n') - #file.write('\t\tturbulence 0.2\n') - #file.write('\t\tturb_depth 0.3\n') - file.write('\t\tfog_type 1\n') + file.write('fog {\n') + file.write('\tdistance %.6f\n' % mist.depth) + file.write('\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1-mist.intensity,))) + #file.write('\tfog_offset %.6f\n' % mist.start) + #file.write('\tfog_alt 5\n') + #file.write('\tturbulence 0.2\n') + #file.write('\tturb_depth 0.3\n') + file.write('\tfog_type 1\n') + file.write('}\n') + + def exportGlobalSettings(scene): + + file.write('global_settings {\n') + + if scene.pov_radio_enable: + file.write('\tradiosity {\n') + file.write("\t\tadc_bailout %.4g\n" % scene.pov_radio_adc_bailout) + file.write("\t\talways_sample %d\n" % scene.pov_radio_always_sample) + file.write("\t\tbrightness %.4g\n" % scene.pov_radio_brightness) + file.write("\t\tcount %d\n" % scene.pov_radio_count) + file.write("\t\terror_bound %.4g\n" % scene.pov_radio_error_bound) + file.write("\t\tgray_threshold %.4g\n" % scene.pov_radio_gray_threshold) + file.write("\t\tlow_error_factor %.4g\n" % scene.pov_radio_low_error_factor) + file.write("\t\tminimum_reuse %.4g\n" % scene.pov_radio_minimum_reuse) + file.write("\t\tnearest_count %d\n" % scene.pov_radio_nearest_count) + file.write("\t\tnormal %d\n" % scene.pov_radio_normal) + file.write("\t\trecursion_limit %d\n" % scene.pov_radio_recursion_limit) file.write('\t}\n') + + file.write('}\n') + + + exportCamera() #exportMaterials() @@ -436,6 +460,7 @@ def write_pov(filename, scene=None, info_callback = None): exportLamps(lamps) exportMeshs(sel) exportWorld(scene.world) + exportGlobalSettings(scene) file.close() @@ -605,6 +630,8 @@ class PovrayRender(bpy.types.RenderEngine): bpy.types.register(PovrayRender) + + # Use some of the existing buttons. import buttons_scene buttons_scene.SCENE_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER') @@ -628,3 +655,126 @@ for member in dir(buttons_material): try: subclass.COMPAT_ENGINES.add('POVRAY_RENDER') except: pass del buttons_material + +class RenderButtonsPanel(bpy.types.Panel): + __space_type__ = "BUTTONS_WINDOW" + __region_type__ = "WINDOW" + __context__ = "scene" + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + + def poll(self, context): + rd = context.scene.render_data + return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES) + +# Radiosity panel, use in the scene for now. +class SCENE_PT_povray_radiosity(RenderButtonsPanel): + __label__ = "Radiosity" + COMPAT_ENGINES = set(['POVRAY_RENDER']) + + def draw_header(self, context): + layout = self.layout + scene = context.scene + layout.itemR(scene, "pov_radio_enable", text="") + + def draw(self, context): + layout = self.layout + scene = context.scene + rd = scene.render_data + + layout.active = scene.pov_radio_enable + + split = layout.split() + + col = split.column() + + col.itemR(scene, "pov_radio_count") + col.itemR(scene, "pov_radio_recursion_limit") + col.itemR(scene, "pov_radio_error_bound") + + col.itemR(scene, "pov_radio_display_advanced") + + if scene.pov_radio_display_advanced: + col.itemR(scene, "pov_radio_adc_bailout") + col.itemR(scene, "pov_radio_brightness") + col.itemR(scene, "pov_radio_gray_threshold") + col.itemR(scene, "pov_radio_low_error_factor") + col.itemR(scene, "pov_radio_minimum_reuse") + col.itemR(scene, "pov_radio_nearest_count") + col.itemR(scene, "pov_radio_normal") + col.itemR(scene, "pov_radio_always_sample") + + +bpy.types.register(SCENE_PT_povray_radiosity) + + +FloatProperty= bpy.types.Scene.FloatProperty +IntProperty= bpy.types.Scene.IntProperty +BoolProperty= bpy.types.Scene.BoolProperty + +# Not a real pov option, just to know if we should write +BoolProperty( attr="pov_radio_enable", + name="Enable Radiosity", + description="Enable povrays radiosity calculation.", + default= False) +BoolProperty( attr="pov_radio_display_advanced", + name="Advanced Options", + description="Show advanced options.", + default= False) + +# Real pov options +FloatProperty( attr="pov_radio_adc_bailout", + name="ADC Bailout", + description="The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results.", + min=0.0, max=1000.0, soft_min=0.0, soft_max=1.0, default= 0.01) + +BoolProperty( attr="pov_radio_always_sample", + name="Always Sample", + description="Only use the data from the pretrace step and not gather any new samples during the final radiosity pass..", + default= True) + +FloatProperty( attr="pov_radio_brightness", + name="Brightness", + description="Ammount objects are brightened before being returned upwards to the rest of the system.", + min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default= 1.0) + +IntProperty( attr="pov_radio_count", + name="Ray Count", + description="number of rays that are sent out whenever a new radiosity value has to be calculated.", + min=1, max=1600, default= 35) + +FloatProperty( attr="pov_radio_error_bound", + name="Error Bound", + description="one of the two main speed/quality tuning values, lower values are more accurate.", + min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default= 1.8) + +FloatProperty( attr="pov_radio_gray_threshold", + name="Gray Threshold", + description="one of the two main speed/quality tuning values, lower values are more accurate.", + min=0.0, max=1.0, default= 0.0) + +FloatProperty( attr="pov_radio_low_error_factor", + name="Low Error Factor", + description="If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting.", + min=0.0, max=1.0, default= 0.5) + +# max_sample - not available yet + +FloatProperty( attr="pov_radio_minimum_reuse", + name="Minimum Reuse", + description="Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors).", + min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default= 0.015) + +IntProperty( attr="pov_radio_nearest_count", + name="Nearest Count", + description="Number of old ambient values blended together to create a new interpolated value.", + min=1, max=20, default= 5) + +BoolProperty( attr="pov_radio_normal", + name="Normals", + description="Radiosity estimation can be affected by normals.", + default= False) + +IntProperty( attr="pov_radio_recursion_limit", + name="Recursion Limit", + description="how many recursion levels are used to calculate the diffuse inter-reflection.", + min=1, max=20, default= 3) From 224ec40e4537a9505736610d258a4e98856c146e Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 30 Jul 2009 13:35:32 +0000 Subject: [PATCH 477/512] * Some nicer icons for the render still/ animation buttons --- release/datafiles/blenderbuttons | Bin 176743 -> 177476 bytes release/ui/buttons_scene.py | 4 +- .../editors/datafiles/blenderbuttons.c | 11073 ++++++++-------- source/blender/editors/include/UI_icons.h | 2 +- 4 files changed, 5551 insertions(+), 5528 deletions(-) diff --git a/release/datafiles/blenderbuttons b/release/datafiles/blenderbuttons index e011fec50cddc704d4ce7633a2a3ecb795d18c3c..ec879651eb2b0be5d379a86f7d95fc71c5233f95 100644 GIT binary patch literal 177476 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

MI@Nk7`;nlzZ(pv*s*U?a6B}Un8 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ⅆTy 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 diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 9e0d6c12e17..d34307d0291 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -21,8 +21,8 @@ class SCENE_PT_render(RenderButtonsPanel): rd = context.scene.render_data row = layout.row() - row.itemO("screen.render", text="Image", icon='ICON_IMAGE_COL') - row.item_booleanO("screen.render", "animation", True, text="Animation", icon='ICON_SEQUENCE') + row.itemO("screen.render", text="Image", icon='ICON_RENDER_RESULT') + row.item_booleanO("screen.render", "animation", True, text="Animation", icon='ICON_RENDER_ANIMATION') layout.itemR(rd, "display_mode", text="Display") diff --git a/source/blender/editors/datafiles/blenderbuttons.c b/source/blender/editors/datafiles/blenderbuttons.c index d7916989cae..1c7fff9f471 100644 --- a/source/blender/editors/datafiles/blenderbuttons.c +++ b/source/blender/editors/datafiles/blenderbuttons.c @@ -1,5530 +1,5553 @@ /* DataToC output of file */ -int datatoc_blenderbuttons_size= 176743; +int datatoc_blenderbuttons_size= 177476; char datatoc_blenderbuttons[]= { -137, 80, 78, 71, 13, 10, 26, - 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6,158, 0, 0, 10, 79,105, 67, - 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83, -233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161, -217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136, -138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, - 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, - 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116, -145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, - 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0, -172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, - 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, - 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, - 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, - 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128, -109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144, -185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, - 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34, -196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, - 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, - 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63, -199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, - 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46, -194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, - 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, - 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70, -162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, - 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99, -207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, - 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16, -123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, - 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64, -113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, - 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175, -232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, - 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42, -124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, - 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89, -253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53, -196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227, -152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151, -150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143, -206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158, -190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12, -206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, - 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41, -166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44, -182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187, -173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, - 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, - 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83, -155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93, -225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, - 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165, -119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, - 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, - 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152, -206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, - 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55, -186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157, -226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, - 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, - 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, - 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, - 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, - 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230, -189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126, -189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, - 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171, -196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, - 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54, -238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102, -213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215, -185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, - 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, - 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233, -130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225, -210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147, -211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214, -213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95, -244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145, -245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23, -254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175, -219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104, -249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0, -255, 0,255,160,189,167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7, -116, 73, 77, 69, 7,217, 7, 23, 19, 9, 14,174, 17,223, 22, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236, 93,119,120, 20,213,226, - 61,119,202,246, 77, 39,141, 4, 66, 71,186, 16, 64, 9, 96,144, 14,242, 80,121,162,128,160,226,243, 61,236, 15,177,128, 29, 20, -136,250, 20,108,136,242, 84,120, 32,250, 19, 21, 36, 54,154,116, 8, 16, 68, 8,197, 8, 18, 8, 37,132, 68, 82,183,239,206,253, -253,145,157,113,179,217, 50,193, 4, 81,238,249,190,249,182,204,204,153,219,231,220,115,239,157, 1, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,174,100,116, 97,156,140,147,113, 50, 78,198,201, 56, 25, 39,227,188,210,192, 93,196, - 57,180, 17,194, 65,189, 91,230,159,128,179,177,226,222,144,220,153, 94,190,231,255, 36,225,204,188,140, 57,105, 35,240,210, 70, - 40, 83,180, 17,202,125, 99,115,162,145,226, 78, 27, 33,223,159,255,147,132, 51,243, 50,228,244, 47, 63, 13,193, 27,168, 76,210, - 6, 14, 39,109,132,112, 54, 22, 39, 26, 41,238,180,145,242,190, 33,239, 77,151, 45,132,203, 64, 96, 0, 0,241,225, 39,151, 49, - 39, 26,137,179,161,195,183,177, 17, 56, 73, 35,148,129,231,189,188,155, 26, 80, 16,201,113,111,136, 60,162,141,192,219,152,226, -170, 33,203,125, 99,115,162,145, 56, 73, 3,167,231,198, 70,224,108,168,186, 68, 27,161, 46, 53, 70,153,247, 47, 63, 13,193,235, -207,217, 16,117,201,159,179, 33,202,253,165,224, 68, 35,113,146, 70, 72,211,198,184, 55, 93,182,224, 46, 50,177, 26, 3, 20,192, -128,203, 92, 8, 53,150,200,108,104, 23,167, 49, 57, 27, 50,143,158,111,132,222,204,128, 6,204, 35, 18, 32,188, 13,201, 73, 26, - 41,156, 13,145, 79,164, 17,234, 18,105,132,186, 68, 26,161,220, 95, 42,206,134,204,163,134,170, 75,164,145,234,146,127,124,159, -111, 96, 78,210, 72,225,108,136,124, 10,196, 73, 26,129,179, 49,226,158,121, 25,243, 94,246, 16, 46,147,112, 52,134, 16, 66, 3, - 58, 25,141,233,226, 52,150,211, 70, 26, 41, 93, 55, 53, 32,215,198, 70, 8,231,166, 6,236,209, 6, 18,132,207, 93,230,117,154, -213, 37, 86,151, 46,183,186, 68,131,116, 86,158,187,204,202,121, 67, 58, 66,161, 56,126,111, 62,209, 32, 29, 53,218,128,225,108, - 72,215,154, 92,162,250,116,217,129,187,140,194,210,208,243,123, 40, 26,199, 21,107,172,120, 55,100, 56, 7,252, 73,226,222, 24, -225,124,190,145,226,254,103, 73, 83, 86,151, 88, 93,186, 28,235,146,111,153,108,168,176, 54,116, 57, 15,196,217,144,243,144, 26, -178,140, 54,118,220,233,101,158,247,127, 10, 92,140,131,213, 88,189,227, 63, 3,103, 99,112, 55, 70, 56, 55,253, 73,210,180, 49, -194,249, 60, 26,118,200,145, 52, 66, 88, 27,115,152,176, 49,202,102, 99,150,119,114,153,135,243,207,146,239,141, 17,206,134,170, - 75,164, 17,234, 61,105,132,246,169, 49,203,102, 99,114, 54, 4,119, 99,132,179,177,242,158,129,129,129,129,129,129,129,129,225, - 74, 69, 80, 37,217,189,123,247,108,189, 94,223, 38,216,126,139,197,114,246,199, 31,127,188,158, 37, 33, 3, 3,131, 10,112,248, -109, 74,130,132,198, 25,226, 96, 96, 96, 96,184,108, 16,116,136, 80,163,209,180,218,188,121,115, 59, 73,146,224,118,187,225,241, -120,224,241,120,224,118,187,225,112, 56,240,247,191,255,189,222,195,139,221,186,117,219,204,113, 92,139,250,156,227,241,120, 78, -238,223,191,191, 95,176,253, 9, 9, 9,219, 1,180, 34,228, 55,173, 72, 8,129,252,219,247,127,142, 83,166,156,157, 57,117,234, - 84,143, 80,156,132,144, 86,190,124,254, 92, 1,120, 67,114,182,111,223,126,143, 32, 8,169,129,206, 15,198, 45, 73,210, 47,121, -121,121, 25,172,152, 94, 26,116,235,214,109, 51,207,243,245, 46,159, 63,254,248, 99,208,242,217,185,115,231, 31, 56,142,107, 26, - 40,143,131,148, 39,222,227,241,252,228,229, 12, 40, 64,146,146,146,182, 83, 74, 91,169, 44,151, 50, 78,157, 58,117,170,103,184, -122, 20, 42,156, 1,184, 67,114,250,138,171,148,148,148,172,248,248,248,123, 45, 22,139, 13, 0,229, 56,142,202,220, 50,175,199, -227, 57,127,228,200, 17,246,240, 66, 6, 6,134,191,182,192,146, 36,137,179,219,237,200,207,207, 7,165,117,219,121,142,227, 60, -245,189, 24,165,180,221,250,229, 75, 19, 12,241,137,240, 56, 29,208, 53, 73, 80,184,203, 14, 29,128,199,233,132,228,114,162, 73, -207,107,229, 48, 96,192,128, 1,124, 24,218,212,169, 83,167, 38, 68, 68, 68,192,102,179,193,102,179,193,110,183,195,110,183,195, -225,112,192,225,112,192,233,116,194,233,116,194,229,114,193,110,183,227,192,129, 3, 33,195, 78, 8, 73,125,232,161,135, 20, 78, -187,221, 14,155,205,166,112,217,237,118,133,211,225,112,192,110,183,227,224,193,131, 33, 57, 5, 65, 72,221,187,119,111,130, 70, -163, 1,165, 20,146, 36,129, 82, 90,107,243, 75, 43,244,237,219,215,201,138,232, 37, 69,187,149, 47,205, 78,208,197, 53,129,228, -114, 33,238,234,116, 37, 47, 78,175,255, 22,146,203, 5,201,229, 66,218,223,198, 40,255,103,102,102,134, 43,159,105,159, 61, 59, - 35, 90, 19, 17, 1,183,205,134,150,163,110, 86,118,228,189, 51, 15,212,229, 2,117, 59,209,245,145,167, 1, 0, 37, 37, 37,214, - 14, 29, 58,156, 65,232,213, 91,169,199,143, 31, 79,144,195,224, 47,212, 57,142,171,181,109,221,186, 21, 19, 39, 78, 12, 23,247, -212,167,158,122, 42, 65,174, 35,190,101,221,229,114, 41,245,199,237,118,195,229,114,193,225,112,224,135, 31,126, 80,229, 92, 37, - 39, 39,191,212,191,127,255,201,203,150, 45, 51,125,241,197, 23,166,150, 45, 91, 66,163,209,128,231,121,240, 60, 15,142,227,192, -243, 60,110,188,241, 70, 54, 55,131,129,129,225,175, 47,176,156, 78,231,241,161, 67,135, 82, 0,112, 56, 28, 41, 90,173, 86,227, - 39,192,154,102,100,100,252,228,127, 94,184,161, 67, 67,124, 34, 62,104, 25, 11, 0, 24,123,172, 84,185, 41,172,184,174,187,114, -204,248, 19,229, 53,199, 26, 12,224, 56,142,132, 17, 67, 48,155,205, 24, 58,116, 40,180, 90, 45,210,211,211,161,209,104, 32,138, - 98,208, 77, 13, 76, 38, 19,102,206,156, 41,139, 35,152,244, 58,220,215,255, 90,232, 9,197, 7, 63, 30,129,221, 35, 65, 16, 4, - 8,130, 0, 81, 20,235, 56, 82,129,160,209,104,112,224,192, 1,240, 60, 15, 65, 16,106,125,242, 60,143,213,171, 87,227,150, 91, -110, 1,207,243, 48, 26,141, 0,155, 12,120,201,161,139,107,130,207, 50,107,140,200,219, 11, 43,149,255,191, 29,247, 55,229,251, -164,211,213, 32,132, 64,163,209,168,203,247,136, 8,124,125,203, 8, 0,192,152,252, 98,165,204,236,159, 55, 27,162, 86, 11, 65, -212,160,203,212,167, 80, 82, 82, 98, 29, 51,102,204, 86,189, 94,255,157,138,206, 10, 78,158, 60,169,112,137,162, 88,167,220,115, - 28,135, 15, 63,252, 16, 39, 78,156, 80, 21,119,171,213,138, 57,115,230, 40,113, 11,196,235,251, 93, 69,220,185,164,164,164, 23, -251,247,239, 63,113,217,178,101, 49,132, 16, 44, 88,176, 0,130, 32,224,134, 27,110, 64, 92, 92, 28,214,172, 89, 3,141, 70,131, -199, 30,123,140, 21, 62, 6, 6,134, 43, 67, 96,253,248,227,143, 35,228,239,215, 92,115,205,225,173, 91,183, 94,229, 99,229,195, -237,118,107,220,110,119, 59,121,216,208,237,118,195,110,183, 99,252,248,241, 33,123,244, 30,167,163,142, 64, 10, 38,156,212,194, -225,112, 96,236,216,177,138,136, 9, 37,174,212,220, 24, 8, 33,176,219,237, 16, 4, 1,173,155,199,227,233,177, 61,209,151,167, -176,150, 2, 40,169,198,157,201, 2,246,165,182,195,155, 39, 75,113,162,162, 10,130,160,110,180, 84,146,164, 90,130,202,255,251, -194,133, 11, 49,110,220, 56,240, 60, 95,103, 8,137,225,210, 64,114,185,194,150,195,250,230,141,219,102, 3, 0,240, 62,130, 92, - 20, 69,104,245,122,240,162, 8, 65,171, 65, 73, 73,137,117,200,144, 33, 59, 13, 6,195,146,164,164,164,211,167, 78,157, 10, 89, - 62, 41,165, 16, 69, 17,130, 32, 4, 45,243, 31,126,248, 33,150, 46, 93,138,222,189,123,171, 42,243, 14,135, 3, 26,141, 6,179, -103,207,174,179,255,157,119,222,169, 35,176,194,128, 0,224, 18, 19, 19,239, 91,190,124,121,164,124,253,184,184, 56,136,162,136, -206,157, 59, 35, 34, 34, 2, 91,183,110,133,199,227, 81, 45, 86, 25, 24, 24,174, 76, 80, 74, 69, 0, 87, 3,136, 7,224, 1, 80, - 9, 32,218,231,144,243,222,207,120,249, 55, 33,100,119, 0,158, 94,222, 99,206, 19, 66,118,251,252,118, 0,208, 6,248,191, 20, -128,193,187,217, 1,108, 7,208,217,231, 58,242,121,240,191,174,172, 12, 50, 81,243,160,186, 1, 8,240,240, 59,121,184,240,200, -145, 35, 1,135, 11,253, 2, 31,178,149,212, 53, 73, 80,156,171, 79, 91,199, 41,255,143, 43, 40, 83, 26,216,175,123,183,133,206, -108, 66,207,231, 95, 9,155,232,242,141,161,184,184,184, 78,207,251, 98, 5, 22, 0,184, 92, 46, 24, 12, 58,124,255,238,117, 56, -251,139, 27,179,179, 11,177,106,215,113, 8,130,128, 81, 87,181,197,223,221, 64, 86,172, 30,255,114,123,224,148,168,170, 27, 24, -165,180,142,184,242, 21, 89,132, 16,229, 63,118,179,249, 99, 16,119,117,186,226, 92, 45,107, 22, 81,199,181, 2,128, 85,221, 91, - 64, 31, 97, 70,231,135,167,171, 42,159, 45, 71,221,172, 56, 87, 95,165,183,130,160,209, 64,212,105,241,247, 31, 11, 1,212, 12, - 11, 14,236,218,113, 83, 25,175, 93,124,199, 29,119,252,178,126,253,122,163,154,176,106, 52,154, 90,130, 45,144,184, 18, 4, 1, - 46, 63,209, 24,170, 83, 17, 76, 56,201,245,170,158, 14, 22, 44, 22,139, 99,213,170, 85,120,243,205, 55, 17, 23, 23,135,161, 67, -135, 34, 41, 41, 9, 43, 86,172, 0,165, 20, 15, 60,240, 0, 12, 6, 3, 12, 6, 3, 43,243, 12, 12, 12,161,180,200,117, 51,102, -204,232,153,149,149, 53,167, 79,159, 62, 31,111,223,190,125, 57, 33, 36,219, 71,123,140,242,182,101,217,242,111, 74,105, 47, 95, -145,229, 21,105,241,132,144,108,249,120,223,223,242, 39,165,116, 48, 0,173,252,123,198,140, 25,157,179,178,178,230, 76,159, 62, -253,201,185,115,231,106,102,204,152,209, 53, 43, 43,107,142,124,157, 64,225,240, 21, 88, 33,159, 2,236,116, 58,143, 15, 30, 60, - 88,213,138, 31,171,213, 90, 20, 70,128, 5,116, 6,124, 93, 1, 93,132, 25,134,136, 8, 16, 78, 93,131,235,114,185, 32, 8, 2, - 56,142,195,218,181,107, 97, 48, 24, 48,114,228,200,139, 30, 34,148, 69,155, 86,171,129, 16,205,225,142,215,246,224,252, 5,139, - 50, 36,184,174,160, 16,187, 12, 6, 60,221,177, 43,204, 85, 5,168,176, 59,126,151,131, 53,110,220, 56,216,108, 54,112, 28,167, -252,199,113, 92, 88,177,202,208,120, 8,182, 8,129, 16, 2,125,100, 4,244,102, 51,120,129, 87,197, 69, 41,253, 77, 8,105,181, - 16,117, 90, 8, 26,141, 34,174,134, 12, 25,178,179,140,215, 46, 62,125,250,244, 78, 0,122,181, 2, 75,118,176, 66,137, 43, 65, - 16,224,116, 58, 85,137, 23,187,221, 14,141,230,183,153, 0, 39, 79,158, 12, 41,176,194, 69, 27,128, 68, 8,145, 90,181,106,165, -156,147,152,152,136,232,232,104, 72,146, 4, 73,146,160,215,235, 97, 48, 24,106, 93,151,129,129,225,138, 69, 40, 45,162,203,202, -202,154,227, 43, 96,252, 5,141,175,112,242, 19, 81,190, 34,173,115,152,182, 63,219, 95, 52,201,215, 37,132,100,207,157, 59,119, - 84,152,112,156,247, 23, 88,114,131, 24, 16,190,195,133, 13,117,243, 10,117, 3, 51, 68, 69, 66,107, 50,193, 59,253,138,134,227, -114, 58,157,202,156,147,123,239,189, 55,104,175,222,119,110, 74, 56, 56, 28, 14,240, 28, 15,232, 90, 66, 66,142,114,179, 82, 54, -141, 6, 5,205,187,129, 20,157,134, 32,168,155,239, 47, 59, 88,178,136,122,224,129, 7,176,104,209, 34,101, 98, 50, 0,240, 60, -143,246,237,219,227,216,177, 99,172,170,253, 1,160,148,134, 29,182,214, 71, 70, 64,103, 54,131, 87,225, 52,202,251,149, 57, 76, -122, 29,120,141, 6,130,166,102, 88,112,244,232,209,155,202,202,202, 22,119,234,212,233,103,212, 60,198,128,168,173, 63,129,202, -249,226,197,139,107,137,171,250, 56, 88,114, 61,242, 69,160,225,194, 49, 99,198,168,117,176, 40, 33,132,138,162,136,193,131, 7, -163,107,215,174, 88,181,106, 21, 36, 73,194,253,247,223, 15,131,193,128,249,243,231,195,237,118, 35, 43, 43,139, 57, 88, 12, 12, - 12,161,238,249,214,233,211,167, 63, 73, 8,201,246, 58, 73,121, 33,132, 84,160,182,189,151,159, 72, 59, 31,228,184, 81,129, 68, -150,239,119, 25, 51,102,204,232,236, 31, 14, 95,199,204, 87, 96, 53,214,251,219,106,161,236,208, 1,101, 66,187, 60, 44, 72, 8, -193,183, 25, 87, 65,107, 54, 65,111, 54,163,223,202, 45, 74,175, 25, 47,190,170,202,193,146,133, 83,105,105,105,216, 33, 66,181, -174, 24,175, 17,177,211, 44,130,138,124,173, 27,150, 40,138,224, 4, 17, 5,241,237, 64,132, 53, 16, 60,110, 85, 55, 7,217,201, -240, 93, 61,117,199, 29,119,128,227, 56, 69,100,117,239,222, 29,126,121,194,112, 9,113,102,195,119,248,230,182,154,186,234, 59, - 44,152,221,187, 13,116, 17,102,232, 76, 38,100,174,222,174, 12,231, 98,254,123, 97, 57,143,188,255, 54,242, 94,159, 11, 65, 20, -113,243,222, 2,197,185,234,123, 85,219,157, 14, 83,228,226,147, 39, 79,238, 4,192,221,118,219,109,209, 61,122,244, 80,101,139, - 17, 66,106, 77, 60, 23, 4, 33,160,184, 18, 4, 1,110,183, 91, 85,220,157, 78,167, 42, 39, 73,118,177,212, 52,148,114, 58, 69, - 69, 69, 33, 34, 34, 66, 89, 65, 43, 59, 87,242,252, 77,181,245,146,129,129,225, 47,143, 96, 90,196, 62,119,238,220,188,185,115, -231, 42, 78,146,191,131, 21,228,190,123,131, 87, 76,197,203,226, 12,128, 61,208,252,172, 64,174,152,191,240,242,253, 47, 43, 43, -107,142,127, 56,124,135, 37, 3,206,206,238,214,173,219, 55, 70,163,177,165,218,212,168,207, 67, 71, 61, 78,103,157,158, 56, 33, - 4,122,179, 25,218, 8, 51,116,102,115, 80,151, 43,216,141, 70, 30, 34,228,121, 94,185,233, 44, 89,178, 4,102,179, 25,119,221, -117,215, 69, 77,114,175, 17, 88, 60,190,212,228, 3, 26,161,206, 77,139, 23, 69,156,140,106, 6, 78, 20, 33,120,212, 57, 4,229, -229,229,224,121, 30,207, 61,247, 28,178,178,178,148,101,244,190, 75,235,125, 93, 15,134, 75, 15,223, 73,238,181, 92,213,136, 8, -165,124,250,254, 31,110, 78, 34, 33, 4,240,184,107, 86, 11,234,180,138,184, 26, 61,122,244, 38,135, 41,114,241, 85, 87, 93, 37, - 59, 87,156,209,104, 12,187,106,214,183,110,200, 66,199, 95, 92,201, 46,169,252,221,229,114,169, 42,243,178,192, 90,180,104, 81, -200,206,136,124, 93,181,229,148,227, 56,108,222,188, 25,123,247,238,197,189,247,222, 11,131,193,128, 55,222,120, 3,110,183, 27, -179,102,205,130,193, 96,128, 86,171,101,133,143,129,129, 33, 20, 98,100,129,227, 21, 73,181,156, 37,239,220,169, 81,190,191, 3, - 57, 92, 94,199,105,115,152,246,240, 43,175, 48, 11, 8,217, 73,243, 59, 39,219, 95,156, 9,126, 78, 9, 1, 0,173, 86,219,114, -219,182,109,237, 36, 73,130,199,227, 65,168, 79,135,195,129, 91,111,189, 85,245, 67, 71, 37, 87,141,192,226,252, 86,202,233, 34, - 35,160, 53,255,118, 3,243,185,137,133,109,197,101, 7,203, 87, 96, 61,247,220,115, 16, 4, 1,139, 22, 45, 2, 0, 60,250,232, -163,245,118,176,168, 4,108,247,108, 68,211, 5,221, 64, 23,235,113,110,243, 97,136,162,136,164,222, 67, 32,245,252, 59, 74,181, -145, 48,121,231, 85,169, 25,118, 44, 45, 45,197,137, 19, 39, 64, 8,193, 35,143, 60, 18, 82, 92,173, 93,187,150,205,193,250, 3, - 5, 22,199,243,181,242,195,183,124,250,137,175,240,227,100,110, 55, 68,157,174,214,106,193,178,178,178,197, 39, 79,158,204, 1, - 64, 38, 78,156, 24,109, 52, 26,241,254,251,239, 91, 0,104, 86,174, 92,105, 8,199,233, 59,143,207,223,185,242, 23, 88, 30, 79, -248, 33,108,185, 83,161,198,237,173,143,192,146,203, 55, 33, 4, 30,143, 71,113,174, 92, 46,151,242, 91,167,211,177,130,199,192, -192, 80, 71,139,248,225,188,223, 60, 39,226,231, 52,157, 15, 36,172,124,135, 3,229,239,132, 16, 87, 0, 94,135,223,208,161,255, -255,242,103,233,220,185,115,191,151,157, 43,159,255,107,133, 35,168,131,197,113, 28,236,118, 59, 14, 29, 58,164,182,135,170,250, -161,163,113,233,215, 96,252,137,114, 16, 66,176,166,127, 39,232,205,102,104,204, 38,100,124,182, 81,105,176, 11,178, 30,131,198, -100, 70, 92,191, 33,170, 26,112,143,199, 83, 71, 96,149,149,149, 65, 20, 69,188,248,226,139,224, 56, 14, 47,189,244, 18, 82, 82, - 82,112,246,236, 89,100,102,102,170,186,217,112, 18, 7,253,157,177,208,255, 43, 2,220,189,109,208,249,111,255, 66,121,101, 11, -236,119,152,208,161, 58, 31, 49, 27,158,135, 83,114,171,122, 76, 3, 33, 4,110,183, 27,223,127,255, 61, 68, 81,132,219,237, 86, -110, 62,148, 82,229, 41,249,242, 67, 29, 95,122,233, 37, 86,213,254, 0, 52,187,225, 38,220,113,198, 2, 0,248, 38,227, 42,232, - 76, 38,104, 35,204,232,247,197,102,165,124,254, 50,103, 26, 52, 38, 51,162,123,245, 87,197,217,241,254, 71,209,225,190,105, 40, - 41, 41,177, 14,238,222,121,115, 57,175,251,176, 75,151, 46,202,156, 43,163,209, 8,189, 94, 79, 80,251,117, 50, 97, 69, 11,199, -113, 97,197,149,252, 93,109,167,194,127, 21,110, 40,129,165, 22, 28,199,225,174,187,238, 66,114,114, 50,222,124,243,205, 90,206, -213,147, 79, 62, 9,151,203,133,249,243,231,179,194,199,192,192, 16,170,221,219,173,246, 88, 74,105, 47, 31, 49,181,251, 98,120, -235,115,189, 96, 8,216,242,218,237,246,130, 65,131, 6, 33,200,190, 20,157, 78, 87,171,117,149, 31, 58, 26, 96,168,176, 11,128, - 3,126, 17,255,109, 88,208, 59, 89, 88,235, 55,236,162, 53, 71, 64, 52,153,193, 5,110,196,235,112, 6,114,176,228,161,147,242, -242,114,136,162,136, 55,223,124, 19,145,145,145,176,219,237,129,122,222, 1, 57,121,158,135,229,132, 5,199,159,217, 15,157,233, - 40,218, 15,137, 64,132,120, 12,109,183,172,132,219,237, 0,124,134, 12,213,112,182,111,223, 30,207, 61,247, 92,157,199, 51, 4, - 67,122,122,122, 88,206, 6, 0,227, 12, 34, 98,116, 17,102,232, 35, 34,130,150, 79, 33,240,179,155,106,113,202,251,101,231,170, - 74, 99,252,240,228,241,227, 57, 0,184,137, 19, 39, 70, 25,141, 70, 44, 92,184,208, 2,128,123,225,133, 23,140,105,105,105,188, -154,112,114, 28,135, 37, 75,150,212,153,115, 21, 76, 96,169, 9,167,219,237,174, 35,176,198,142, 29, 91,231, 65,163, 33, 28,172, - 58,225,148,231, 96, 53,105,210, 4, 70,163, 81,121,237,150, 94,175,135, 94,175, 87,158, 14, 31, 98,168,149,149, 79,198,201, 56, -175, 28,206, 75, 46,198, 26, 19, 1, 5,214,190,125,251,134, 7, 59, 33, 35, 35, 35,127,219,182,109,109,125,223, 77,232,118,187, - 53,118,187,189,221,141, 55,222, 24,182,171, 44, 73, 18,116, 58, 29, 40,165,184,250,233,172,154, 46, 60,247,219,144, 32,165, 20, -209,125, 7,131,240, 60, 60, 30, 9, 46,151, 43,236, 42, 66,155,205, 86,107, 2,122,160,229,235, 85, 85, 85, 33,159,243,227,207, -105,181, 90,107,205,235, 34, 30,138, 95,214,173,168,187,154,208,123, 29,181,208,235,245,181,134, 77, 84,218,165, 12,151, 8,242, - 3, 60, 41,165,232,252,208,244, 26,167,136,231,106,237,143,234,213, 31, 68, 16, 33,213,204, 91, 10,183, 48,132,156, 63,127,222, - 58,122,244,232, 77,148,210, 15,110,188,241,198,159, 80,243,176, 58,106, 54,155,117,162, 40, 74, 0,126, 5, 64, 47, 92,184, 16, -117,250,244,105,201,102,179, 53, 15, 23,206,205,155, 55,227,232,209,163,232,209,163,135,226,124,202,155, 60,124,127, 49, 14, 86, -160, 39,194, 7,123,146,123,125, 28,172,168,168, 40,104,181, 90,188,248,226,139,208,104, 52, 48, 24,106, 70, 65,231,207,159,175, -164, 57, 3, 3, 3,195, 95, 9,245,126, 97,179, 36, 73,124,176,225,195,112, 67,133, 30,143,231,212, 53,215, 92, 83,223,235,157, - 11,115, 67, 60,181,101,203, 22,141,255, 11,105, 3,189, 0,215,231,191,176,156,187,119,239,214,132, 56, 63,208,247,115,245,137, -187,154,249, 43,110,183,251, 52, 43,162,151, 14,110,183,251, 84,239,222,189, 3,239,124,238,165, 96,249,122, 46,140,104,249,185, - 93,187,118,103,204,102,243, 87,137,137,137,165,219,182,109,139,235,213,171, 87,156,239, 49,189,122,245, 74,246, 59,205,129, 16, - 43,122, 9, 33,167,238,184,227, 14, 77,152,242,232,255,253, 84,152, 78,197,169,188,188, 60, 77,160,242, 30,236,147, 82,122, 74, - 69,178,158, 24, 49, 98, 4, 23,168, 14, 5, 72,203,243,172, 20, 50, 48, 48, 92,177, 2,203,102,179, 21, 14, 26, 52, 40,224,186, -111,139,197,114, 50,212,185, 7, 15, 30,236,217,208, 17, 56,125,250,116,198,159,129,179, 49,226,206,112,249,231,209,193,131, 7, -123, 3, 64,121,121, 57, 66,189,254,166, 62, 40, 44, 44,108,240,242,217, 24,156, 0,112,232,208,161, 62,172,100, 49, 48, 48, 48, -129,165, 2,106, 31,199,192,192,192,192,192,192,192,192,112,165,130, 99, 73,192,192,192,192,192,192,192,192,208,176, 32,168, 89, - 9, 16, 8,245, 89, 29,208,229, 34,174,125,128,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 28,103, 56,238,203,114,117,226, -229,134, 46,140,147,113, 50, 78,198,201, 56, 25, 39,227,100,156, 87, 26,216, 16, 33, 3, 3, 3, 3, 3, 3, 3, 67, 3, 67, 96, - 73,240,135,129, 7,224,105, 40, 50, 74,105, 52,128, 96, 47,116,115, 16, 66,202, 46,146, 87, 11, 64,244,110, 0,224, 2,224, 34, -132, 56, 88, 22, 50, 48,252,181,144,158,158, 62,153, 82, 58, 27, 53,111,129,122, 49, 55, 55,247, 45,150, 42, 12, 12, 13, 44,176, - 90,183,110,189,135,227,184,212, 64, 47, 32, 14,246, 92, 28,143,199,115,234,200,145, 35,106,151,186, 11,201,201,201, 99, 77, 38, -211,245, 60,207,247,245,158,191,173,186,186,250,251,179,103,207,126, 10,192,125, 49, 17,106,217,178,101,164,205,102,187,149, 16, - 50,193, 43, 16, 62,210,235,245,255,119,252,248,241,138,139, 76,163, 54, 73, 73, 73, 31,137,162,200, 23, 22, 22, 94, 15, 0,205, -154, 53,251,222,225,112,120,138,139,139, 39, 0, 56, 90, 79, 62, 78,163,209,100, 93,115,205, 53,253,182,108,217,242, 63, 0,239, - 52, 80, 94,234, 56,142, 59, 17,104,135, 36, 73,105, 23, 33,172, 52, 0,162,230,207,159, 31,187,116,233,210,238,103,207,158,237, - 10, 0,201,201,201,251, 39, 78,156,248, 3,165,244, 87, 0,229,132, 16, 39,171, 70,127,110,180,109,219,118, 15,199,113,169,245, -121,150,156,247, 21, 85,167, 14, 29, 58,212, 51, 24, 39,207,243,169, 97,158, 71, 87,231,187, 36, 73,191, 28, 60,120, 48,224, 35, - 35,218,181,107,183,131,231,249,150,225,194, 22, 40,156,193, 30,193,209,174, 93,187, 61, 60,207,167,214,151, 83,146,164, 95,242, -242,242, 50, 26,146,243, 82,135, 19, 0, 50, 51, 51,117,213,213,213, 31,153,205,230,110,213,213,213,147, 37, 73,122,118,227,198, -141,137, 28,199, 97,240,224,193,207,166,167,167, 31,215,233,116, 11,108, 54,219, 15,102,179,121,252,166, 77,155,236,172,198, 48, - 48,252,254, 70,247, 92, 85, 85, 21,149, 33, 73, 18,117,185, 92,212,110,183, 83,171,213, 74,171,171,171,105,101,101, 37,173,168, -168,160,229,229,229,180,180,180,148,118,238,220,217,255,161,139, 1,199,104, 83, 82, 82,186,180,111,223, 62,255,173,183,222,178, - 23, 22, 22, 82,167,211, 73, 93, 46, 23, 45, 44, 44,164,111,191,253,182,189,125,251,246,249, 41, 41, 41,193,198,119, 3,253,207, - 37, 39, 39, 15, 73, 78, 78, 94, 62,108,216, 48,199,250,245,235,169,221,110,167, 22,139,133,174, 94,189,154, 14, 24, 48,192,145, -156,156,188, 60, 57, 57,121, 8, 2, 15,139, 6,187, 86,247,150, 45, 91, 30, 61,117,234,148,103,203,150, 45,206,184,184,184, 47, -227,226,226,190, 44, 44, 44,244,156, 60,121, 82, 74, 77, 77, 61, 10,160,123, 61,194, 9, 0, 55, 79,155, 54,173,224,248,241,227, -150,204,204,204, 29, 62,255, 19,132,127,114,123,151, 64,206, 21,165, 52,145, 82,154,132,154,135, 83,214,217, 40,165, 73,222, 99, -162, 85,114,154,142, 29, 59,150,154,152,152,152,229,117,170,106,241, 17, 66, 28,137,137,137, 89,199,142, 29, 75,165,148,154,234, - 17,247,223, 3,198,217, 72,156, 87, 93,117, 85, 81,117,117, 53,165,148, 82,143,199, 67,157, 78, 39,181,217,108,212, 98,177,208, -170,170,170, 90,245, 92,222,202,202,202,104,151, 46, 93,206,133,224, 60,103,177, 88,106,181, 29, 14,135,131,218,108, 54,106,181, - 90,169,197, 98,161,213,213,213,181,182,170,170, 42,218,189,123,247,194, 16,156,103,229,112, 74,146, 68,221,110, 55,117, 58,157, -212,225,112, 80,187,221, 78,109, 54, 91,173, 77,254,175,119,239,222, 65,195,217,161, 67,135,115, 86,171, 85, 53,167,188,245,232, -209,227, 76, 67,113,202,255, 93,125,245,213, 69,161, 56,109, 54,219,197,132,179, 48, 84, 89, 74, 79, 79,255,252,248,241,227,212, -106,181,210, 33, 67,134,216, 31,121,228, 17,234,241,120,104,118,118, 54, 29, 59,118, 44,189,231,158,123,104,105,105, 41,157, 49, - 99, 6,237,209,163,199, 23,172, 30, 49,206, 70,230,188, 50, 28, 44,142,227, 96, 50,153,240,241,199, 31, 7,124,253,140,255,247, -180, 52,117, 38, 73, 98, 98, 98,207,212,212,212, 77, 43, 87,174, 52, 36, 36, 36, 40,255, 59,157, 78, 68, 70, 70,226,174,187,238, -210, 14, 30, 60,184,237,237,183,223,190,211,237,118,103,158, 59,119,110, 79, 40,190,164,164,164, 49,113,113,113,111, 77,157, 58, - 53,113,244,232,209,136,137,137,169,181,127,212,168, 81, 24, 57,114,164,230,151, 95,126, 25,247,233,167,159,142,251,223,255,254, - 87, 84, 85, 85,245, 96, 81, 81,209,231,161,120,141, 70,227,224,182,109,219,190,191,126,253,250,212,232,232,104, 52,109,218,148, -123,230,153,103,186,180,110,221,218,144,156,156,204,157, 57,115, 6,159,127,254,121,235,137, 19, 39,174, 58,121,242,228,100,187, -221,190, 94, 69,244,181,177,177,177,143,253,235, 95,255,138,171,172,172,116,239,221,187, 87,118,191,180, 58,157,238,217,107,175, -189,182,199,198,141, 27, 63, 1,176,248, 98,156, 43, 74,105, 5,126, 27,202,147,225,146,247,171,113,178, 40,165,218,189,123,247, -198,244,237,219,247, 11,187,221,222,227, 31,255,248,199,233, 87, 94,121, 69, 27, 25, 25, 25, 9,128,148,149,149, 93,152, 57,115, -166,231,141, 55,222,120,162, 83,167, 78,131,182,109,219,118, 51,165,148, 13, 25,254,201, 97, 52, 26,177,122,245,234,128,175,153, - 10, 84,231,163,163,163,195,190,141,192, 96, 48, 96,237,218,181,202,121,190,175,150, 10,244, 61, 58, 58, 26,148,210,144,164,122, -189, 30, 91,183,110, 85, 94, 3, 20,172, 93,146, 63,141, 70, 35, 8, 33, 92, 56,206, 77,155, 54,133,229,146, 63,205,102, 51, 80, - 51,196, 31, 54,156,225,226, 44,127, 55,153, 76, 97,211, 83,167,211, 41,156,190, 28,193,126,155, 76, 38,132,235,180, 25, 12,134, -110,137,137,137,200,201,201,193,243,207, 63,175,237,220,185, 51,242,243,243,193,113, 28, 38, 79,158,140, 78,157, 58,161,168,168, - 8,157, 58,117,194,214,173, 91,187,179,154,194,192,208, 0, 2, 75, 70,176, 6,214,255, 59, 16,240, 53, 24,181,150, 90,166,165, -165,233, 68, 81,252,108,245,234,213,134,184,184,223,222, 22,226,112, 56, 80, 89, 89,137,170,170, 42, 84, 86, 86,194,100, 50, 97, -193,130, 5,134, 9, 19, 38,124,166,211,233,218,157, 56,113,194, 30,140,147, 16, 50,111,223,190,125,137,110,183, 27, 90,173, 54, -168, 88,108,211,166, 13, 30,124,240, 65,244,235,215, 47,105,220,184,113,243, 0,124, 30,140, 19, 0,146,147,147,223,222,182,109, - 91,170, 86,171, 69,126,126, 62, 78,157, 58,133, 41, 83,166,164, 73,146,132,194,194, 66,228,231,231,227,204,153, 51,120,239,189, -247, 82, 39, 76,152,176,224,244,233,211,109, 67,197,221,139,123, 30,121,228,145,182, 49, 49, 49,220, 43,175,188, 82, 94, 85, 85, -245,158,247,255, 25,243,231,207, 31,159,153,153, 25,255,143,127,252,131,110,219,182,237, 99,212,188, 46, 37,104,122,250,206,185, -242, 14,231, 1,128,135, 82,122,216,239,156, 14, 62,251, 65, 41, 77, 4, 96, 39,132,148, 7,224, 36, 0, 34,135, 15, 31, 62,205, -110,183,247,216,178,101,203,209,126,253,250,165, 1, 56, 75, 41, 61, 15, 0, 49, 49, 49,166,215, 95,127, 61,113,212,168, 81, 63, - 13, 30, 60,184,199,240,225,195,167,157, 63,127,126, 54,165,180,132, 16, 66, 67,196,253,247,130,113, 54, 18,167,119, 40, 9,130, - 32, 96,196,136, 17, 32,132, 4,124,223,230,142, 29, 59, 48,104,208, 32,136,162,136,187,239,190, 91, 53,231,176, 97,195,224,118, -187,235,240,249, 11, 16,249, 29,157,161,226, 78, 41,173,245,142,208, 64,226,194,119, 11,192, 87,135, 83,146,164,128, 92,193, 68, -150,252,178,122, 53,113, 87, 43, 46,195,133,211,151, 83, 20, 69,100,100,100, 96,239,222,189, 33,197, 86,184,112, 2, 64,117,117, -245,157, 55,222,120,227,154, 41, 83,166,232, 1,160,164,164,164,214,139,232,143, 28, 57, 2,187,221,142,101,203,150,193,110,183, -223,203,234, 17,227,108,100,206, 80,157,127, 17,192,213, 0,226, 81, 51,127,185, 18, 64,180,247, 94,169, 5, 80, 10,192,224,221, -236, 0,170, 0, 52,241,158, 94,226,237,108,248,190,166,236,188,239, 75,161, 41,165,189,188,220,242, 43,187,226,125,142,149,175, -225,255,219,255,179, 22,183, 92,171,229,225,159, 76,223, 10, 45,191,132, 53,156,184,146, 27, 71, 21, 9,244,192,140, 25, 51, 18, -125,197,149,221,110, 71, 69, 69, 5, 42, 43, 43,149,207,252,252,124,104,181, 90,140, 29, 59, 54,145, 82,250, 64, 24, 90, 13,207, -243,216,187,119, 47, 86,174, 92,137,227,199,143,215, 57,224,216,177, 99,120,253,245,215,241,234,171,175,162,162,162, 2, 0, 52, -193,200,186,117,235,246,252,248,241,227,119, 14, 24, 48, 64, 39, 8, 2,246,237,219,135,118,237,218, 97,251,246,237, 56,121,242, - 36, 46, 92,184,128, 35, 71,142,160, 75,151, 46, 56,122,244, 40, 42, 42, 42,208,185,115,103, 93,143, 30, 61,182,164,165,165, 61, - 31, 42,156, 41, 41, 41, 79,254,235, 95,255,210,157, 61,123, 86, 90,178,100,201, 54, 0,219, 1, 76,121,234,169,167, 38, 13, 27, - 54, 44,254,240,225,195, 21,187,119,239,222, 19, 68, 92, 5,114,174, 78,114, 28,119,130, 82, 90, 65, 41,181,162,102, 2,122,173, -155,145,219,237,182, 91,173,214,242,210,210,210, 18,142,227, 78,112, 28,151, 15, 64, 23,140,115,226,196,137,173, 75, 74, 74,238, -255,247,191,255,125,188, 95,191,126,105,148,210, 35,148,210, 82,111,129,181,187,221,238,210,178,178,178,159,250,246,237,155, 60, -126,252,248,163, 37, 37, 37,247, 79,156, 56,177,117, 8, 78,134,203, 31,212,227,241, 64, 20, 69,108,220,184, 17, 91,183,110,197, -214,173, 91,177,109,219, 54,108,223,190, 29, 59,118,236,192,142, 29, 59, 32, 8, 2,182,111,223,142,237,219,183,227,193, 7, 31, - 12, 91,231, 61, 30, 15, 4, 65,192,166, 77,155,176,107,215, 46,101,219,189,123, 55,118,237,218, 5,131,193,160, 70, 12,249,118, -166, 20,206, 64,219,219,111,191,173,136, 67,185,109,226, 56, 46,164, 43,230, 47, 92,252, 5, 75, 90,139, 22,117,246,133, 11,167, - 44,218, 4, 65,192,127,255,251, 95,156, 62,125, 26,111,190,249, 38,142, 29, 59,134,151, 95,126, 25,121,121,121,152, 53,107, 22, -118,239,222,141, 25, 51,102, 96,203,150, 45,242,203,223,105, 56, 78, 89, 92, 57,157, 78, 37, 60, 71,142, 28,193,156, 57,115,176, -111,223, 62, 60,251,236,179,216,177, 99, 7, 30,123,236, 49,240,124, 72,147, 13,233,233,233,147, 9, 33,159,182,111,223, 94, 55, -112,224, 64, 8,130,128, 57,115,230, 72,207, 62,251,108,241, 83, 79, 61, 85,156,157,157, 77, 91,183,110, 13,135,195,129,136,136, - 8, 80, 74, 23,167,167,167, 63,192,170, 11, 67, 99,182, 69,254, 90,196, 7,215,205,152, 49, 99, 32, 33, 36, 59, 35, 35, 99, 34, -128,104, 66, 72, 54, 0,173,247, 51,110,198,140, 25,189, 9, 33,217, 51,102,204,232, 9,160, 9, 33, 36,219,251,251,122, 0,113, -242,111,239,241,241,126,226, 45,222,231,255,120,191, 99,181,129,126,251,127,250,115,251, 58, 88,196, 27, 49,226,219, 64,214, 71, - 96,133,107,112,205,102,243,200,225,195,135,107,124,197,149,175,115, 37,127, 86, 86, 86,226,167,159,126, 66,151, 46, 93, 52,102, -179,121, 36,128,255,132,181,226, 4, 1, 77,155, 54, 69, 73, 73, 9, 14, 28, 56,128,180,180, 52,184, 92, 46,124,247,221,119, 40, - 43, 43,131, 70,163,129, 70,163,129,195, 17, 90,187,116,232,208, 97,196,210,165, 75,123,254,239,127,255,187, 32, 8, 2,142, 28, - 57,130,143, 62,250, 8,148, 82, 52,105,210, 4, 22,139, 5,197,197,197,152, 55,111, 30,156, 78, 39,204,102, 51, 82, 82, 82,244, - 15, 60,240, 64,191,153, 51,103,138, 39, 78,156, 8, 38,178,174, 25, 51,102, 76,100, 68, 68, 4, 30,126,248, 97,201,233,116,190, - 10,224,218, 49, 99,198, 60,249,224,131, 15,198, 22, 20, 20, 56,238,185,231,158, 61, 78,167,115,158,108, 30,250, 11,166, 0,130, - 53,168,115,229,118,187,229, 52, 61, 94, 89, 89,137,132,132,132,230,148, 82, 77,152, 60,210,108,223,190, 61, 3, 0,255,194, 11, - 47,232, 41,165,231,124,195,224,116, 58,101, 78,119,121,121,121,241, 99,143, 61,230, 94,190,124, 57,239, 61,231, 16, 0, 27,107, - 31,254,124,144,133,139, 40,138, 24, 49, 98, 68, 45, 65,177,121,243,102, 12, 31, 62, 92,169,239, 26,141, 70, 57, 46, 28,167,175, - 43, 38, 59, 79, 50,239,247,223,127, 95,199,121, 81,217, 73, 83, 28,150, 64,194,199, 95,116,201, 29, 69, 53, 98, 40,144,200,146, -219, 22,127,103, 72, 77, 56, 69, 81,196,131, 15, 62, 8, 65, 16,240,216, 99,143, 65, 20, 69, 92,125,245,213, 16, 4, 1,125,250, -244,129, 32, 8,184,254,250,235, 85,119, 80,229,112,238,216,177, 3,233,233,233, 74,120,174,190,250,106,244,234,213, 11,130, 32, -160,127,255,254, 16, 4, 1, 67,135, 14, 13,203, 73, 41,125,118,227,198,141,137,102,179, 25, 63,253,244, 19,120,158, 7, 33,164, -116,239,222,189,137, 0,112,195, 13, 55,148,216,108,182, 56,155,205,134, 65,131, 6, 33, 35, 35, 35,126,249,242,229,207, 0, 96, - 43, 11, 25, 26,181, 73,242,215, 34,178, 1,144,149,149, 53,135, 82, 58, 42,216,137,242,126, 66, 72,246,220,185,115, 71,121,203, -121,157,223,178,203,228, 39,222, 58,251, 58, 80,242,121,190,215, 11,117,109,191,227,207,251, 11, 44, 10, 96, 64,160, 70, 55,144, - 85,238,255, 93, 77, 3, 97,179,217,174,150,221, 43,155,205, 86, 75, 80, 85, 85, 85,213, 18, 90, 14,135, 3,173, 90,181,130,205, -102,187,186,190, 55,139,228,228,100, 56,157, 78, 44, 90,180, 72, 17, 86,190, 34, 33, 20, 14, 30, 60,120,124,231,206,157, 61,210, -211,211, 99,190,248,226,139,243,131, 7, 15,142, 31, 54,108, 24,244,122, 61,108, 54, 27,220,110, 55,174,185,230, 26,116,232,208, - 1,197,197,197,248,230,155,111, 74,218,181,107,215, 36, 39, 39, 71, 42, 42, 42, 58, 17,130,122,208,160, 65,131, 64, 8,193, 55, -223,124,243, 43,128, 92,189, 94,255,249,156, 57,115,162,237,118,187, 52,105,210,164,194, 95,127,253,245, 49, 0, 46,173, 86,251, -159,235,174,187,238,154,245,235,215,127, 34, 73, 82,189, 27, 51,187,221, 94, 43,109, 43, 43, 43, 97, 52, 26,213, 60, 18, 66, 44, - 43, 43,235, 10, 0, 70,163, 49, 22, 62, 43, 36,173, 86,171,146, 71,222,252,177,197,198,198,154, 0,192,123,142,200,218,133, 63, - 47,228,155,247,198,141, 27,107,213,111,217,129,242,175,243, 90,173, 22,171, 87,175, 86,197,233, 43,166, 84, 12,231,133,116,155, -100,129, 37, 8, 2,222,123,175,102,132,253,225,135, 31, 86,206,247,191,134,154,246, 66, 22, 67,130, 32,160,195,115, 18, 0, 39, - 78,189,166,135, 40,214, 20,105,255, 48,123, 27, 83, 85,174,216,155,111,190,137, 81,163, 70, 33, 59, 59, 59,228,231,200,145, 35, - 85,133, 83, 16, 4,232,116,186, 90,194,111,223,190,125, 1,121, 23, 46, 92, 24,118, 78,155, 36, 73,248,234,171,175,192,113, 92, - 45,199,235,233,167,159,254,151,201,100, 50,111,218,180, 9,231,206,157, 67,117,117, 53,170,170,170, 16, 19, 19, 19, 61,104,208, -160,125, 69, 69, 69, 5,135, 14, 29,186,153,213, 28,134, 70,114,177, 6, 4,248,223, 58,125,250,244, 39, 9, 33,217,211,167, 79, -127,114,238,220,185,121,222,186,145,237, 87, 87,178,195,212,165,108,175, 24,218,237,173,203,218,130, 51, 63, 0, 0, 32, 0, 73, - 68, 65, 84,189,252,196,219,121, 66,200,110, 74,233, 13,193,206, 5,224,240, 19, 84,181,134, 8,101,238,144, 14,150,255,220,132, - 80,223,189, 22,119,184, 6, 87, 32,132,212, 17, 0,129, 28, 44,151,203,133,210,210, 82, 72,146,212,160,207,234, 10, 39,176, 14, - 28, 56,112,215,228,201,147,207, 68, 69, 69,117, 43, 45, 45, 61,171,211,233,250,111,222,188,185,153,203,229, 66,100,100, 36, 34, - 35, 35,241,245,215, 95, 35, 42, 42, 10,255,254,247,191, 79, 90,173,214,237, 38,147, 41,209,106,181,254, 88, 84, 84,244,116, 80, -229, 34,138,131,250,247,239,143,220,220, 92,148,149,149,109, 0,208,109,194,132, 9, 67,155, 53,107, 70,102,207,158,109, 59,122, -244,232, 91, 0,206,155, 76,166,255, 46, 93,186, 52,179, 71,143, 30,230, 73,147, 38, 97,211,166, 77,239,215,199, 25,178, 88, 44, -181,132,149,156,166, 17, 17, 17,170,158,185,229, 77,111, 74, 8,161,114,207,223, 87, 88,249, 8, 96,202,243,188, 4,128, 54,116, - 30, 49, 92,122, 7, 75,174,235,127,251,219,223,234, 76,110,215,104, 52, 88,179,102, 13,110,186,233, 38,165,195,146,158,158,174, -218,109, 26, 61,122,180, 34, 8,214,172, 89, 19, 84, 96,133, 27,210,242,119,155, 30,122,232, 33,136,162,136,183,222,122, 11, 83, -167, 78, 5,207,243,120,237,181,215,192,113, 28,158,121,230,153,122,139, 75, 81, 20,113,252,165,154,207,212, 71, 42, 80,250, 78, - 34, 0, 32, 34, 50,178, 38, 62,146,164,254, 14,225,141,123, 56,231,202, 87, 88,133, 27, 34,244,117, 1,243,243,243,149,239,125, -250,244,169,229, 92, 9,130, 16, 86,176,121,175, 55,107,224,192,129,179, 83, 83, 83, 19,166, 76,153, 66, 4, 65, 64,207,158, 61, -155, 12, 30, 60,184, 92, 16, 4,253,163,143, 62, 26,104, 42,133, 8,160, 91,199,142, 29, 77,172,230, 48, 92, 98, 7,203, 62,119, -238,220,188,185,115,231, 6,116,168,252,157,164, 80, 78,147, 44,172,188, 66, 40, 94, 22,109,168,153,159,188, 59,220,185,240, 14, - 9, 6,114,185,124,225,239, 96,205,244,111,120,212, 8, 44, 53,243, 39,188,174,200,254,146,146,146, 62, 58,157, 14, 21, 21, 21, -117,110,218,190,162,128,231,121, 20, 23, 23,195,104, 52,238,111,200,156, 11, 55, 68, 8,192,246,243,207, 63, 79,243,249,221,107, -236,216,177,203, 63,249,228,147, 86,235,214,173, 67, 78, 78, 14,154, 52,105,130, 57,115,230,252, 82, 80, 80, 48, 30,192,238,226, -226,226,176,215,109,221,186,117, 39,179,217,140,109,219,182, 1,192, 22, 0,119,222,119,223,125,196,233,116, 98,193,130, 5, 22, - 0,235,162,162,162, 62, 95,177, 98, 69,183,110,221,186,233,214,173, 91, 87,153,147,147,179, 81,165,184,242, 80, 74, 3, 10,171, -202,202, 74, 84, 87, 87,195,108, 54,171, 17, 88,238,200,200,200, 3,149,149,149,183, 90,173,214, 10,157, 78, 23, 81, 81, 81, 97, -247,117, 24,171,170,170, 80, 93, 93, 13, 65, 16,196,252,252,252, 51, 0, 90, 71, 70, 70, 30,192, 69, 62,183,140,225,143, 7,199, -113, 84, 22, 25,235,214,173, 11, 88,215, 69, 81,196,119,223,125, 87,171,190,127,243,205, 55, 97, 69,155, 32, 8,202, 74,194,112, - 14,150, 79,227, 26,218,102, 21, 69,240, 60,143,119,222,121, 7,148, 82,197,185,226, 56, 14,211,167, 79,135, 78,167,195,139, 47, -190,136,233,211,167,171,114,177,124, 93,177,150, 79, 88,127,107, 28,189,231, 58, 29,142, 26,151,158,227,124, 69,150, 42,167, 45, -220, 4,247,250,136, 96, 95,167, 77,167,211, 5,157,220, 30,224,102, 21, 16,185,185,185, 31,116,239,222,253,104,124,124,252,218, -140,140, 12,221,158, 61,123,240,224,131, 15, 18,187,221, 30,185,110,221, 58,229,186,129,210,171,186,186, 90,207,106, 14, 67, 35, - 58, 88, 51, 3,252, 31, 35, 11, 39,175, 24, 82, 91,119,178,125,143,151, 57,252, 69,145,215, 17,219, 28,142, 43,208,185,193, 32, - 4,171,132,254,141, 68, 56,161,165,166,247,105,181, 90,215,111,220,184,177,215, 77, 55,221, 36,132, 26, 30,172,170,170, 66, 98, - 98, 34,142, 29, 59,230,182, 90,173, 97, 31,127,224,241,168,127, 32,122, 56, 7, 43, 0,118,151,148,148,184,157, 78, 39,218,182, -109,139,148,148, 20, 88,173, 86,188,254,250,235,110, 0,187, 85,114,104, 76, 38, 19, 15, 0,229,229,229, 64,205,106,135,118,237, -218,181, 67,110,110, 46, 46, 92,184,176, 10,192,160,153, 51,103,118,191,246,218,107, 53,159,124,242,137,229,222,123,239, 93,229, -114,185,102,171,236,129, 59,220,110,119, 75,142,227,156,101,101,101,167,125,133, 85, 98, 98, 98,140,217,108,230,138,139,139, 93, -106,146,167,107,215,174,187, 78,157, 58,133, 23, 94,120,225,252,156, 57,115,218, 85, 86, 86, 94, 40, 47, 47,119,203,194,170,162, -162, 2, 86,171,149,139,143,143,215, 45, 92,184,208, 8, 0, 93,187,118,221, 5,128, 61,112,244,207,220,162,249, 45,104, 9,244, -168, 6,181,147,209,253,133,203,141, 55,222, 88,199, 17,147,183, 21, 43, 86,212,154,215, 20,110,232, 77,230,124,251,237,183,241, -240,195, 15, 67,167,211, 97,254,252,249,181,230, 96, 5,233, 17, 7,229,148, 69, 91,203, 39,172, 40,122, 35, 22,162, 40, 34,238, -222,115,181,134, 8, 3,196, 77,149, 16,156, 51,103, 78,131, 12, 17,250,138, 62,249,145, 56,139, 22, 45,194,216,177, 99,177,101, -203,150,139, 30, 34,108,217,178,229,210,215, 95,127, 93,119,232,208, 33, 84, 84, 84,224,252,249,243,176,217,108, 40, 44, 44, 84, -242, 48,136, 83,110, 96,181,134,161,145,220,171, 96, 56,239, 55,127,138,248, 14,215,133,248,244, 63, 30, 62,255,249,242,158, 39, -132,184, 2, 92,239,124, 0, 81,229,127, 13,223, 99,206, 7,114,176, 2,221,184, 85, 63,166,193, 59, 65, 50,156, 16,152,247,220, -115,207,221,223,175, 95,191,216,200,200, 72,156, 57,115, 38,160,131, 21, 25, 25, 9,167,211,137,141, 27, 55, 86, 72,146, 52, 47, - 76,134,184, 92, 46, 23, 18, 18, 18, 80, 82, 82, 2, 41,136,141,207,113, 28, 12, 6, 3,170,170,170,128, 48,147,199, 3,221, 40, - 92, 46, 23,156, 78, 39,156, 78, 39, 92, 46, 87,125, 11,141,193,251, 76, 26, 84, 87, 87, 3, 64,117,211,166, 77, 91,235,245,122, -121,213, 99, 62,128,129,195,134, 13, 19, 75, 75, 75,233, 61,247,220,179,131, 82,250, 96, 24, 87,200,177,113,227,198, 22, 0, 96, - 48, 24,242, 1,160,176,176,208, 85, 86, 86,134,170,170, 42,197, 33, 52, 24, 12,184,249,230,155,147, 40,165,216,184,113, 99, 11, -141, 70, 67, 67,136, 33,123,118,118,246,193,168,168,168,229, 89, 89, 89,227,111,184,225,134,188,174, 93,187,182,172,170,170, 42, -182, 88, 44, 86,171,213, 74, 5, 65,208,196,197,197,233,214,174, 93,123,116,199,142, 29, 67, 34, 35, 35,151,103,103,103, 31, 68, -205, 42, 67,134, 63, 99,139,230, 55,183, 41,144,168,170,207, 10, 58, 95,225, 34, 8, 2,190,251,238,187,144, 46,142, 90, 78, 95, -145, 49,109,218, 52,188,241,198, 27,117, 28,172,217,179,107,250, 36, 79, 61,245, 84,189, 28, 34, 65, 16, 80,244, 70, 44,146, 30, -250,181,142,131, 69,188,225,171,207, 16,161,124,254,172, 89,179, 32,138,162, 50,132, 55,100,200,144, 90, 67,131,106,133,149, 47, -103,113,113, 49, 4, 65, 64,108,108, 44,198,143, 31,143,161, 67,135,214,225, 83,203, 91, 88, 88,248,195,171,175,190,218, 60, 37, - 37, 5,159,124,242,137,195,100, 50,105, 7, 14, 28, 72,203,203,203, 73, 40, 7,203,106,181, 50, 7,139,225, 82,183, 83,187, 47, - 37,111, 67, 92, 79, 8,215,232,254,206,199, 52,116,129,207,179, 50, 78,156, 56, 81,158,148,148, 52, 97,220,184,113, 95,188,243, -206, 59,134,214,173, 91,227,200,145, 35,184,112,225, 2,156, 78, 39, 52, 26, 13,154, 54,109,138,170,170, 42,124,246,217,103, 22, -139,197, 50,161,168,168,168, 60, 20, 39, 33,228,169, 17, 35, 70, 44,124,250,233,167,245,157, 58,117,194,133, 11, 23, 80, 85, 85, -165,244,188, 8, 33,136,140,140,132,209,104,196,129, 3, 7,176, 99,199, 14, 43, 33,228,169, 80,156,129,132,166, 44,172,100,161, - 21,110,101,146, 31,167,201,104, 52,202, 61, 63, 0,112, 55,111,222, 60, 17,128, 44,176, 78,180,106,213,234,233, 54,109,218,144, -165, 75,151, 82, 74,233,186, 32,226, 74,225, 36,132, 92,160,148,150, 1, 72,116, 56, 28, 26, 0,168,168,168,112,198,197,197, 37, -232,116, 58, 73,167,211, 73,122,189, 94, 58,123,246,172,219,237,118,107, 0, 32, 51, 51,211, 1,224,156,223, 92, 15, 95, 78,137, - 82, 90,185, 96,193,130,231,239,188,243,206, 62,125,251,246,237,124,207, 61,247, 28,186,247,222,123,145,146,146, 18, 83, 85, 85, -101,203,207,207, 47,123,231,157,119,108,187,118,237, 26, 34,138,226,137, 5, 11, 22, 60, 15,160,146, 16, 34,169, 77,207,139, 4, -227,108, 36, 78,185, 60, 4, 18, 86,190,191, 85, 8,161, 90,225,148, 69,219,173,183,222,170,172, 62,244,119,174,234,203, 9, 64, - 89, 65,248,248,227,143,215, 10,223,211, 79, 63,173,182, 87,236, 27,119,197,109, 18, 4, 1,229,139, 82,106,137,191,122,136,170, - 58,156,130, 32,224,217,103,159, 85,237, 96, 5,152,131, 21, 52,156,153,153,153,168,174,174,134, 40,138, 88,179,102, 77, 80, 7, - 43, 92,122, 26, 12,134,241,171, 86,173,250, 72,167,211,117,117, 56, 28,119,151,148,148, 44,177, 88, 44,205,203,202,202, 66, 58, - 88, 54,155, 77,199,234, 17,227,196, 37,126, 22,214,159, 13, 33,187,120,110,183, 27,205,154, 53,171,245,110, 43,121, 50, 59,207, -243,202,202, 19, 53, 43, 8,101, 20, 21, 21,173, 1, 48,230,230,155,111, 94,118,231,157,119, 70,116,232,208, 65, 76, 75, 75,131, -213,106, 69, 65, 65, 1, 10, 10, 10,220, 27, 54,108,168,176, 88, 44,183,123,143, 13,137, 51,103,206,252,207,237,118,127, 55,113, -226,196,103,187,119,239, 62,101,234,212,169,124,171, 86,173, 80, 94, 94,142,152,152, 24,196,199,199,163,160,160, 0,159,125,246, -153,167,172,172,108,161,199,227,153, 85, 92, 92,124,190, 62,137,228,118,187,121,151,203,133,113,227,198, 65,146, 36,204,159, 63, - 31,110,183,155,175, 7,133,211,233,116, 82, 0,164,164,164, 4, 0, 44,178,224,250,249,231,159, 1,224,100,139, 22, 45,204, 0, -176,126,253,122,130,154,231, 99,169, 81,222,148, 82,170, 56, 89, 29, 58,116, 40,240,111, 20,101,231, 74,118,189,194, 77,164, 37, -132,216, 40,165,231,237,118,251,176, 71, 30,121,228,217, 69,139, 22,141, 95,180,104, 81,157,227, 34, 35, 35,151,191,246,218,107, -179,198,143, 31,127,158, 16,194, 30,207,240, 87,104, 12,252,220,170,250, 78, 1, 8,198,249,229,151, 95,214,231,225,154, 33, 93, - 49, 66, 72,192, 21,137,161,218, 32, 21,157,161,160, 15, 20,253, 61,174,160, 32, 8,120,229,149, 87, 20,231,202,119,242,249,197, - 56, 88, 50,103,108,108,108, 77,175,205,100,130, 36, 73, 24, 57,114,228, 69,243,122,223, 45, 56, 70,254,157,158,158, 62,235,227, -143, 63,158, 77, 41,141, 3, 32,248,166,129,154,116,100, 96, 96, 80, 33,176, 60, 30,207,169, 1, 3, 6,192,183,247, 20,238,101, -173,110,183,251,148, 74,145,245, 93,203,150, 45, 91, 45, 90,180,232, 97,147,201, 52,216,102,179,117, 5, 0,189, 94,191,191,186, -186,122, 29,199,113,175, 23, 21, 21,169,126, 57,179, 87, 48, 61,192,113,220,252,137, 19, 39,206,206,200,200,184,229,158,123,238, - 33,130, 32,224,211, 79, 63,165,167, 79,159, 94,193,113,220, 83,103,207,158, 61,118, 49,137,100, 52, 26,127, 90,177, 98, 69,235, - 47,191,252, 18, 46,151, 11, 11, 23, 46,132, 78,167,251,169, 30, 20,231, 55,108,216,176,172,111,223,190,227,119,236,216,177, 28, -192,129, 45, 91,182,124,116,221,117,215, 77,216,190,125,251,255, 1, 56,180,113,227,198,143, 50, 50, 50, 38,236,218,181,235,115, - 0, 63,214,163,209, 85,156, 44,183, 59,240,136, 98, 16,231, 42, 20,103, 5,165,212, 57,121,242,228, 71,110,185,229,150, 69,185, -185,185,215,200,143,111,136,142,142,222,159,158,158,158,179, 98,197,138, 35, 94,231,138,137,171, 63, 57,228, 9,233, 49, 49, 49, -224, 56, 78,217,228,167,121,215, 87, 8,201,156,148, 82,196,196,196, 4,236,152,133,224, 12,169,106, 40,165, 48,155,205, 10,167, -202,213,203, 97,109, 40,179,217, 92, 43,140, 42, 64,195,197,221, 63,156,106,210, 44, 28,167,201,100,130,211,233, 84,205, 9, 21, -139, 6,124,145,155,155,251, 1,128, 15,218,180,105,243, 51,128, 54, 76, 84, 49, 48, 52,130,192, 58,114,228, 72,207,198,188,240, -241,227,199, 43, 0,204,242,110, 13,130,211,167, 79, 31, 3,112,235,214,173, 91,255,179,125,251,246,103,188,141,235, 11,225,222, -103, 24, 14, 63,254,248,227, 77,162, 40, 46, 88,188,120,113, 6,165, 20, 81, 81, 81,219,143, 30, 61,122, 95,125, 56, 60, 30,207, -148, 29, 59,118, 76,133,119, 85,160,195,225,152,178,117,235,214, 71, 1, 84,203,251,119,238,220,169,252,174,231,205,140, 82, 74, - 29,148,210,228, 32,135, 56,212,138, 43, 63, 39,203,177, 98,197,138, 42, 0,251,240,219,115,174, 92,222,205,238, 55, 44,200,240, - 39,133,219,237, 62, 61, 96,192, 0, 33, 92, 7, 42,192,121,167, 66,117,208,250,247,239,143,139,224, 60, 29, 34,168, 39, 50, 50, - 50, 56,181, 92, 50, 92, 46, 87,113, 8,241,117,170, 79,159, 62, 1,195, 25, 38,205, 66,198,189, 79,159, 62,245, 10,163, 55, 44, -167, 27,154, 51, 76,122, 6,133,213,106,189, 16, 31, 31, 95,101,179,217, 68,187,221, 46,250, 59,246, 6,131,225,188,213,106,101, -149,135,129,225, 15, 4,123,211, 56,227,100,156,140,147,113, 50, 78,198,201, 56,175, 56,112, 44, 9, 24, 24, 24, 24, 24, 24, 24, - 24, 26, 22, 36,132, 10,173,207,234,128,139, 81,178, 7, 24, 39,227,100,156,140,147,113, 50, 78,198,121,197,113,134,227,102,171, - 19, 27, 73,120, 49, 78,198,201, 56, 25, 39,227,100,156,140,243,202,227,252, 75,129, 13, 17, 50, 48, 48, 48, 48, 48, 48, 48, 48, -129,197,192,192,192,192,192,192,192,192, 4, 22, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,191, 3, - 36, 37, 37, 37, 51, 57, 57,185,207,149,154, 0, 2, 43, 3, 12, 12, 12, 12, 12, 12, 12, 13,129,102,205,154, 69,123, 60,158, 59, - 1,220,215,186,117,235,214, 0, 64, 8, 57, 64, 41,125,221, 96, 48,124,116,236,216, 49,199, 21,163, 48, 89,113, 96, 96, 96, 96, - 96, 96, 96,248, 61, 72, 78, 78,238, 14,224, 62,131,193,112,251, 53,215, 92,163, 29, 56,112, 32, 98, 98, 98,224,118,187,113,246, -236, 89,108,216,176, 1,251,246,237,251,213,229,114, 45,112,185, 92, 11, 74, 74, 74,206, 93, 73, 2,107,147,247, 51,147, 21, 21, - 6, 6, 6, 6, 6, 6, 6, 53, 72, 74, 74,122,117,248,240,225,143,196,196,196,160,109,219,182, 72, 74, 74,130,221,110,135,213, -106, 5,165, 20,130, 32,128, 82,138,202,202, 74,236,217,179, 7, 57, 57, 57,238,138,138,138,229,132,144,215,207,158, 61,251,131, - 31,221, 95, 70,139,200, 2,139, 2, 24,224, 23, 57, 6, 6, 6, 6, 6, 6, 6,134,144, 72, 78, 78, 62,183,126,253,250, 4,143, -199,131,146,146, 18,216,237,118, 88, 44, 22, 69, 96,241, 60, 15, 74, 41,220,110, 55, 0, 64,146, 36, 28, 58,116, 8, 59,118,236, - 64, 97, 97,225,107, 69, 69, 69,211,254,138, 90,132,243, 83,141, 76, 92, 49, 48, 48, 48, 48, 48, 48,212, 11,118,187, 29, 75,151, - 46, 69, 73, 73, 9,154, 53,107,134,148,148, 20, 68, 69, 69, 65,175,215, 3,128, 34,174, 0,128,227, 56,116,238,220, 25, 19, 38, - 76, 0, 33,100,130, 31,213, 95, 70,139,176, 73,238, 12, 12, 12, 12, 12, 12, 12,191, 7, 46,167,211,137,158, 61,123,226,248,241, -227,200,205,205, 69,143, 30, 61,208,177, 99, 71,148,148,148,224,204,153, 51,181, 14,222,181,107, 23,246,238,221,139,235,174,187, -238, 47,157, 40,188,247,147, 0,120, 30,192,157, 0, 22,179,178,194,192,192,192,192,192,192,160, 6, 17, 17, 17,191,110,218,180, -105,104, 90, 90,154,152,158,158, 14,157, 78,135,147, 39, 79, 34, 39, 39, 7,102,179, 25, 93,187,118,133,205,102,195,230,205,155, -177,122,245,106,148,149,149,161, 69,139, 22,192,187,239,225,231,215,204,229, 85, 85, 85,243,254,138, 90,196,119,146,123,166,247, -115, 19, 43, 46, 12, 12, 12, 12, 12, 12, 12,106,145,156,156, 28, 71, 8,121,170,105,211,166,247,223,126,251,237, 98,155, 54,109, -112,234,212, 41,148,148,148,224,194,133, 11,216,185,115, 39, 0, 32, 37, 37, 5, 41, 41, 41, 40, 40, 40,192,129, 3, 7,172,118, -187,253,222, 51,103,206,252,239,175,168, 69,216, 99, 26, 24, 24, 24, 24, 24, 24, 24, 26, 74,104, 53, 3, 48,179, 77,155, 54,147, -198,142, 29,203, 53,109,218, 20,167, 79,159,198,134, 13, 27,208,186,117,107, 20, 23, 23, 99,207,158, 61,158,138,138,138,133, 30, -143,103, 86,113,113,241,121,150,106, 23, 7,246,166,113,198,201, 56, 25, 39,227,100,156,140,243, 10,227, 76, 76, 76,236,144,156, -156,188,114,232,208,161,244,157,119,222,161, 15, 60,240, 0,237,209,163,135,148,156,156,252,105, 74, 74, 74,235, 43, 65, 0,177, - 73,238, 12, 12, 12, 12, 12, 12, 12, 13,138,115,231,206, 29, 6,112, 19, 33,228,154,188,188,188, 39, 1, 64,146,164, 23,206,157, - 59,183,231, 74, 73, 3, 38,176, 24, 24, 24, 24, 24, 24, 24, 26, 5,103,206,156,201, 1,240,183, 43, 49,238,236,101,207, 12, 12, - 12, 12, 12, 12, 12, 12, 76, 96, 49, 48, 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192,192,112, 69,129, 32,248, 74, -128, 3,245,224,185,152, 21, 10, 7, 24, 39,227,100,156,140,147,113, 50, 78,198,121,197,113,134,227, 62,128, 43, 8, 23,251,188, - 44,182,132,149,113, 50, 78,198,201, 56,255, 60,156,164,129, 56,137,119,227,188, 27,169, 39,247,165, 10,231,159, 37,238, 87, 10, -231, 95, 10,225, 86, 17,250, 38,146,228,221,104, 3, 9, 54,174, 1,249, 24, 26, 71, 84,203, 21,131,178,124, 98, 96,248, 75,163, - 33,219,122,185,237,224,125, 56, 61,222, 13,191,179, 45,105,140,123,210,229, 30,247, 43,153,243, 47, 41,176, 8, 0, 18, 31, 31, -191, 38, 33, 33,225,250,146,146, 18, 9, 0, 8, 33,224, 56, 14, 28,199, 65, 16, 4,107, 65, 65, 65,100,125, 47,152,144,144,240, -126,124,124,252,157,165,165,165,146,204, 69, 8, 1,207,243,224,121,222,122,236,216,177,200, 63, 58, 81,122,244,232,113,193,225, -112,152,253,255,215,106,181,182,189,123,247, 70, 92, 9,229,162, 93,187,118,183, 25,141, 70, 67,144,253,244,135, 31,126, 88,164, -150,172, 69,139, 22,187, 12, 6, 67,180, 32, 8,224,121, 30,130, 32,160,186,186,186,236,240,225,195,189,189,251,183, 25, 12,134, - 56,158,231,229,178, 5,155,205, 86,122,232,208,161,190,236,190, 87, 23,153,153,153, 2,234,255,136, 21,247,166, 77,155,220,151, - 42,140,148, 82,206,145, 27,209,134,184,173,221, 8, 71,163,168, 68,202,169, 96,248, 81,155, 94,121, 84, 85, 75, 77,136,244, 7, - 39,115,115, 0,110, 0,103,234, 29,247, 0, 61,118, 1, 24,238, 1,198,121,127,218, 56,160,148, 0,249,113,192,103,231, 0,171, - 95,227,123, 41,111, 68, 4, 0, 73, 77, 77,125, 61, 49, 49,241,174,202,202, 74, 11,207,243, 32,132, 80, 66,136,156, 23,190,249, - 2, 73,146, 78, 29, 60,120,176,103,152,155,172,216,188,121,243,215,226,227,227,239,176, 88, 44, 22, 66,136,194, 41,111,190,220, - 30,143,231, 84, 94, 94, 94,207, 75, 24,206, 63, 36,238,190, 92,242,111, 73,146, 66,197, 93,225, 76, 77, 77,125, 45, 49, 49,241, -142,170,170, 42,139,247,190,249,187,195,121,153,115,254,101, 5, 22,151,144,144,176,170,119,239,222, 3,190,252,242, 75,238,240, -225,195, 92,135, 14, 29,224,241,120, 32, 73, 18, 40,165, 72, 79, 79, 55,214,247, 98,137,137,137, 75,122,246,236, 57,110,245,234, -213,220,170, 85,171,184, 94,189,122,129, 16, 2,143,199, 3,143,199,131, 65,131, 6, 25,126,103,124,204,130, 32, 76,213,106,181, -153,110,183,187, 35, 0,136,162,120,200,110,183,111,114,187,221,243, 0, 84,169, 33,113,185, 92,198,188,188,188, 58,105,211,187, -119,111,237,197, 6,172,109,219,182,219, 57,142,107,229, 91,200,194,125, 82, 74,127, 57,120,240, 96, 70, 48,206,246,237,219,135, -229,244,255, 79,146,164, 95,242,242,242, 50, 66,149,137,182,109,219,142,235,212,169,147,254,211, 79, 63, 69, 97, 97, 33, 76, 38, - 19, 36, 73,130,199,227,129,203,229,194, 77, 55,221, 84, 47,203,215, 96, 48, 68,110,216,176,161, 77, 66, 66, 2,138,139,139, 81, - 82, 82,130, 41, 83,166,228,251,236,143,251,254,251,239,219,197,198,198,194, 98,177,160,188,188, 28, 19, 38, 76,248,211, 87,174, - 33,253, 91,189, 72,128, 88,249,183, 71,194,175,235,183,253,242,244,239,229,181,219,237,103, 61, 30, 79,140,159, 32, 9,121, 14, -207,243, 23, 0,196,135,211,194, 0,254,198,243,124, 91, 81, 20,175,162,148,182,112,187,221,137, 0,160,209,104,206,241, 60, 95, -224,114,185,142, 56, 28,142,159, 1,172, 6, 80, 16,140,200,145, 27,209,198, 99,183,220, 82,109,151, 70, 74, 20, 73, 28, 65,145, - 73,103,249,218,145, 27,177, 66,173,200,250, 3,209,178,105,211,166,175, 0,192,153, 51,103, 30, 3,112,252,247, 18,122,128,113, -148,210, 40, 0, 40, 47, 47,143, 42, 44, 44, 76, 90,189,122,117,231, 57,115,230, 12,212,218,108, 47, 59,128, 67,161,206, 31,124, - 93,235, 61, 2, 33,169,138, 90,166,210,169,117,155,127,105,136, 27, 19,151,146,146,242,250,136, 17, 35, 38, 46, 92,184,208,152, -147,147, 99,236,218,181,171,183,227, 11,165,189,167,148, 42,101,236,218,107,251,132, 19,108, 66,211,166, 77,231,143, 24, 49, 98, -252,130, 5, 11,140, 71,142, 28, 49,182,108,217, 82,225,244, 45,179,114, 7,251,234,171,187, 95,234,112, 54,106,220,135, 13, 27, - 54,126,225,194,133,198,253,251,247, 27,219,181,107,167,112, 82, 90, 91, 59,115, 28,135,158, 61,123,169,226, 28, 62,124,248,248, -119,223,125,215,152,155,155,107,236,216,177,163, 87,164, 65, 9,227,197,132,243, 50,231,252, 75, 10, 44, 46, 62, 62,126,105,207, -158, 61,135,125,249,229,151, 60, 0,228,230,230,162,180,180, 20, 41, 41, 41, 48,155,205,208,235,245,176,217,108,245,234,101, 37, - 36, 36,188,223,171, 87,175,113, 95,126,249,165, 8, 0,159,223,126, 19,126, 17,129, 7,139, 29,208,104, 52, 56,122,244, 40,120, -158,255, 61, 61,183,235, 34, 34, 34,254,183,114,229,202,152, 30, 61,122,112, 37, 37, 37,104,217,178, 37,126,253,245,215,222,155, - 55,111, 78,191,251,238,187,239,174,172,172,156, 4, 96,179, 90,194,175,190,250, 10, 38,147, 73,217,156, 78,231, 69,143, 37,243, - 60,159,154,147,147,147, 96, 54,155,225,241,120, 64, 41,173, 85,129,253, 43,158, 36, 73,232,223,191,191, 51,100,230, 9, 66,106, - 78, 78, 78,130,193, 96,168,195,229,241,120,160,213,106,193,113,156,220, 67,132,219,237, 70, 70, 70, 70, 40, 78,210,174, 93,187, -219,100,113,197,113, 28, 62,249,228, 19, 36, 37, 37, 33, 33, 33, 1, 38,147, 9, 6, 67,253, 53,176, 32, 8,136,139,139,195,253, -247,223,143,219,110,187, 13,203,150, 45,131, 40,138,181,246,199,198,198,226,219,111,191, 69,100,100, 36,210,210,210,106,237,255, -179,130, 0,177,223,109,254,205,145,189,101,212,213,194,160,126, 45, 23, 40, 21,173,230, 32, 42,121, 93, 11,201,227,185,176, 97, -251,201,103, 85,116, 0,154,108,219,182, 13, 58,157, 78,221,205,221,227, 65,239,222,189,155,132, 57,108,100,151, 46, 93, 62,191, -255,254,251, 53,109,218,180, 33,162, 40, 66, 16, 4, 8,130, 32,151,199, 52, 74,105,154, 36, 73, 3,206,157, 59, 71,223,124,243, -205,151, 55,110,220,120, 51,128,175, 3,198,221,109,237, 86,109,151, 70, 82,138,164,196,193,180,121,241, 58,130,106,187, 52, 50, - 74,176, 30, 5,112, 57, 11,172, 72,131,193,240,204,167,159,126,170, 1,128,193,131, 7, 63, 99,181, 90,255, 13,160,162,161, 46, - 16, 21, 21,133,168,168, 40,116,233,210, 5, 99,198,140,137,238,222,189,251,163, 45,236,246, 41, 5,128, 35,104, 29,226,184,212, -111,190,207, 79,144,127,143,191,169,135,102,104,102,235,115,212,107,153,249,123,104,146,135,158, 90,191,237,120, 56, 1,198, 37, - 37, 37,253,103,248,240,225,183, 46, 92,184, 48, 2, 0,222,127,255,125,140, 28, 57, 18, 73, 73, 73, 48, 24, 12,208,104, 52,208, -104, 52, 16, 69, 81,249, 12,115,147,229,147,146,146, 94,190,225,134, 27,110, 89,176, 96, 65, 4, 0, 44, 89,178, 4,163, 70,141, - 66, 92, 92, 28, 34, 35, 35,161,211,233,160,213,106,189, 92, 4, 52,124,171, 95, 39,156,247, 12, 29,136, 86, 6, 29,254, 54,251, - 21, 68, 71, 71, 99,195,180,251, 32,114, 28,238,251,118, 19, 34, 35, 35,213,180, 31,117, 56,115,115,115,113,238,220,185,128,113, -231,121, 62, 92,125, 83,226, 62,114,228,200, 91,100,206, 37, 75,150, 96,216,176, 97,136,139,139,131,217,108, 86,226,254, 27, 55, -167,138,115,216,176, 97,183,188,251,238,187, 10,231,160, 65,131, 16, 27, 27,139,136,136, 8,104, 52, 26, 37, 61,235,147, 71,151, - 57,231, 95, 82, 96, 17,175,123,117,107,118,118,182,146,243,162, 40, 66,167,211, 41,133,195,247,198,173,246, 94, 19, 31, 31,127, -231,151, 95,126,169,156,228,240,171, 84,122,189,190,190,156,181, 58,120,215, 95,127,253,199,217,217,217,122,141, 70, 3,171,213, -138,188,188, 60, 68, 69, 69, 65,171,213,226,198, 27,111,228, 51, 50, 50,226,174,191,254,250,207,126,250,233,167,241, 0,214,169, - 24,226,128,217,108,174, 37,176, 40,189,120,253, 71, 8,129,193, 96,192,170, 85,171, 32, 8, 66,173, 66, 22,168, 17, 75, 76, 76, - 12,235, 74, 0,128, 78,167,195,246,237,219,193,113, 28, 68, 81, 84,182,175,190,250, 10,211,166, 77,195,185,115,231,148,125, 17, - 17, 97, 71, 55,137,209,104, 52,200,226, 74,206,123,131,193, 0, 81, 20,137, 32, 8,132,231,121,185, 73, 39, 80, 57,148, 33, 8, - 2, 10, 10, 10,112,251,237,183, 99,241,226,197,120,225,133, 23, 48,126,252,248, 90,251, 43, 42, 42, 16, 19, 19,131,232,232,104, -232,116,186,223, 83, 22, 46, 27, 72,126,169, 51,235,133,151,141, 18, 0,137, 74,128, 4, 80, 80,229,251,217,179, 71,241,234,127, -222,224,213,114,235,116, 58,108,219,182, 13,190,195,174, 28,199, 65,163,209,212,250, 79, 16, 4, 36, 39, 39,171,225,155,185,114, -229, 74,237, 39,159,124,130, 47,190,248, 2, 30,143, 7,162, 40, 66,175,215, 35, 50, 50, 18,177,177,177,202,150,150,150, 70, 62, -248,224, 3, 77,183,110,221,102, 86, 84, 84, 4, 22, 88, 28,141,146,188,226, 10, 0, 18, 6,211,230,199,190,228, 99,162, 35,106, - 92,156,203,184, 61,156,241,214, 91,111,197,165,167,167, 3, 0,222,122,235,173,184,201,147, 39,207, 0,240, 52,106,134, 12, 47, -174,131, 5,124, 76, 8, 25,231,117,108,245, 67,134, 12,209,190,253,246,219,184,234,170,171,240,208, 67, 15,197,190,250,242,203, -127, 3,176, 34,120, 89,170, 93,152,230,190,242, 70,180,111,135,234,183, 13,248,245,124, 1,158,121,230, 69, 21,250, 31, 92,211, -166, 77,239,126,239,189,247,148,233, 16,177,177,177, 74, 27,228,223, 70,201,159, 33,218, 37,226,117,133, 38, 47, 92,184, 80,225, -140,143,143,175,197, 33,138, 34, 10, 14,253,128,111,222,207,130, 41, 46, 25, 19,166,205,173,119, 56, 83,116, 90,164, 26,180,232, -214,173, 27, 12, 6, 3,114,197,154, 91,153, 44,174,212,132,211,159,147,231,121, 37,140,148, 82,216,108, 54, 84, 86, 86,194,227, -241,192,225,112, 32, 61, 61, 93, 85,220,223,125,247, 93,133,179, 73,147, 38, 74,251,238,219,206,203,155,220,129, 9, 19,206,201, -255,253,239,127, 21,206,184,184, 56,133, 75, 16, 4,104, 52, 26, 44, 89,178, 4, 42, 29,109,213,156,245,205,119,127,206,227,199, -143, 99,206,156, 57,208,104, 52,242, 20, 32,197,177, 76, 73, 73,193,155,111,190,169,234, 30,247, 87,115,176, 72, 73, 73,137,116, -248,240, 97,110,207,158, 61,208,104, 52,136,143,143, 71,239,222,189, 1, 0, 78,167, 19,130, 32,192, 96, 48,144,182,109,219,158, -147, 19, 77,254,244, 27, 75,151,151, 90,114,191,254,250,171,180,102,205, 26,110,217,152, 97,112, 80,160,251, 51,115, 49,108,212, - 40,124,151,162, 5, 15,160,247,225, 18,104,181, 90, 33, 41, 41,201, 37,103,130,204,235, 55, 55,203,127,249,102,132,201,100,250, - 96,245,234,213,122,142,227, 80, 89, 89, 9, 73,146,208,183,111, 95, 16, 66,176,127,255,126, 60,253,244,211,248,252,243,207,177, -114,229, 74, 67,143, 30, 61, 62,176, 90,173, 29, 1, 84,250,112, 28, 8, 84, 56, 35, 35, 35, 97, 48, 24, 20,129,101, 48, 24, 72, -251,246,237,207, 5,153, 71,112,250,224,193,131,233,193, 56,101, 39,225,230,155,111, 86,230,156,201, 55, 64,223,202, 38,127,207, -203,203, 11,148, 95,117, 56, 37, 73, 66,191,126,253, 0, 0, 38,147, 9,102,179, 25,223,127,255,189,178,191, 71,143, 30,112, 56, - 28,104,210,164, 9, 14, 29, 58,164,138,179,168,168, 8, 75,151, 46,133, 40,138,136,139,139,131, 40,138,154,117,235,214,189, 96, - 50,153,162,120,158, 71,116,116, 52, 70,141, 26,181,208, 39, 12,158,175,191,254, 90, 8,198,201,243, 60,244,122, 61,150, 44, 89, -130, 57,115,230,224,201, 39,159,244,119,247, 96,179,217, 16, 23, 23,135,152,152, 24,196,196,196,168, 10,103, 3,160, 81, 57, 41, - 40,242,246,126,135,131,251,214,193, 67, 61,144, 60, 18,168, 68,225,145, 36,236, 93,187,171,221,217, 95,206,164, 80,208,154, 41, -181, 0, 60, 85,213,238,204, 56,237, 85, 0, 86,109, 42,117,204, 15, 23, 78,158,231,225,116, 58,241,221,119,223,225,232,209,163, - 88,179,102, 13,172, 86, 43,154, 52,105,130,232,232,104,100,100,100, 96,242,228,201,193, 4,214, 1,191,178,185,228,244,233,211, -221, 51, 50, 50, 72,121,121, 57, 74, 74, 74, 80, 89, 89, 9,167,211, 9,167,211,169,228,161,201,100, 66, 82, 82, 18,172, 86, 43, -181,219,237, 75,130,198, 93, 34,229, 28, 65,209,177, 85, 66,147,214, 55,186, 13,231,190,143,179, 91, 29, 26,247, 59,171,140,147, -191,122,162,245, 80,142,114, 20,168,137, 58, 33,160,146,199, 83,178,110,203, 47,247,255,193,249, 62,101,234,212,169, 29,125,135, -167, 39, 76,152,128,188,188,188,142,243,230,205,155, 2,224,173,250,114, 26,128, 20,212, 40,179,111, 81,179, 97,166,213, 74, 94, - 88,181,234,102, 0,119,172, 92,185, 18,227,199,143,199,127, 94,126,185, 75, 0,129,117,192,183,195, 87,144,191, 25,199,243,183, - 65,146, 36,239, 70,131,126,167,234,194, 73,170,170,170,108, 57, 57, 57,230, 15, 63,252, 16,177,177,177,104,209,162, 5, 34, 34, - 34,160,211,233,234,136, 1,121, 11, 23,119,139,197, 98, 59,124,248,176,249,227,143, 63, 70, 92, 92, 28,210,210,210, 96, 50,153, -160,215,235,149, 14,122,206,154,149,152, 50,233, 70,148,158, 60,130, 55,254,125,155,234,112,222, 51,100, 32, 82, 13, 90,220, 56, -107, 46, 58,118,236,136, 21,183,141, 6, 71,128,123, 55,236,132, 40,138,248,112,228,117,208,233,180,184,119,195,110,213,156,187, -119,239, 6,165, 20,105,105,105,176, 90,173,138,203,166,209,104,176,110,221, 58,140, 30, 61, 26,203,150, 45,195,181,215, 94, 27, - 54,238, 85, 85, 85,182,253,251,247,155, 63,250,232, 35,196,198,198,162, 89,179,102, 48, 26,141, 10,159,175,136,105,213,170, 21, -202,202,202,208,186,117,235,144,156,213,213,213,182,220,220, 92,243,178,101,203, 16, 27, 27,139,212,212, 84, 24,141,198, 90, 78, -216,204,153, 51,107, 17,116,235,214,237,119,115,214, 55,223,253, 57,199,140, 25,131,214,173, 91, 35, 50, 50, 82, 73, 3,127,161, - 93, 31, 80, 74,123,161,246, 52, 7, 7, 0,173,207,231,121, 66,200,238, 0,199,201,255,139, 0,174,246,238,243,120, 53, 64,116, - 0,190, 96, 60, 37, 94, 83, 33,222,239,248, 90,215, 9, 36,176,228,250, 56, 0,192, 86, 0,232,208,161, 3, 74, 75, 75,161,211, -233,208,187,119,111,156, 63,127, 94,177,249, 36, 73,194,216,177, 99,249, 39,158,120, 34,129,227, 56,184, 92, 46, 80, 74,193,243, - 60,228,158,159,191, 14,224, 56, 14, 25, 25, 25, 56,232, 77,211, 97,163, 70, 33, 53, 53, 85,153,196,161,211,233, 48,126,252,120, - 50,109,218, 52, 65,118, 47, 40,165,176, 90,173,232,214,173,155, 33,132, 59,242,239,207, 62,251, 44, 74,171,213, 42,226, 74, 14, -203,225,195,135,241,234,171,175,226,142, 59,238,192,201,147, 39,145,156,156,140, 71, 31,125,212,156,149,149,245,111,167,211, 57, - 43, 92,134,154,205,230, 90, 2,107,210,164, 73, 66, 70, 70, 70,130,209,104, 84,220, 45,175,168, 68, 70, 70, 6, 9,231, 96, 73, -146,132,111,191,253, 54, 96,239,208,191,199, 64, 8, 1,165, 84, 21,103, 78, 78,142, 34,206,100,247, 66,222,159,151,151,167, 56, - 88, 94, 33, 24,138,147,202, 66, 77,182,201, 69, 81,212,228,228,228,204, 78, 78, 78, 54, 79,154, 52, 9,149,149,149,104,218,180, - 41,134, 14, 29, 10, 73,146,224,116, 58,241,224,131, 15,134,116, 94, 68, 81,196,174, 93,187,144,149,149,133, 39,158,120, 2, 11, - 23, 46,196,224,193,131,107, 57, 88,114, 79, 55, 50,242, 15, 95,227,208,128, 22, 22,224,116,187, 96,177, 88, 65,169, 7, 30,137, - 66,242, 72,216,191,113,111,187, 95,246, 29,237,156,189,124,169, 8, 0,182, 77, 43,125,207, 74, 30,179,224,255,218,103,198,136, - 57,155, 46,184,114,194, 12, 59,227,190,251,238,195,179,207, 62,139, 91,111,189, 21,107,215,174,197, 83, 79, 61,133,187,239,190, - 91, 17,239,114, 89, 80, 49,236,248,222,132, 9, 19,254,181, 98,197,138,171, 30,121,228, 17, 78,174,147, 70,163, 17,132, 16,216, -108, 54,101, 59,124,248,176,244,207,127,254,243, 39,135,195,241, 94,208,130, 36, 24,126, 52,233, 44, 95,159, 45,229,218, 22,109, -136,229,136, 16,233,140, 79, 27, 80,126, 67,187,193,116,240,109, 45, 98,168, 84,227,240, 81, 80,216,109,213,120,242,137,199,248, - 63, 56,183, 70, 14, 25, 50,100,232,236,217,179,235,236,152, 61,123, 54, 14, 29, 58, 52,116,237,218,181, 5,193,134, 68,131,136, -171,212,168,164,164,121, 0, 96, 40, 42,154,106, 5, 78, 1,192, 11,192, 48, 15, 48,122,237,218,181, 0,128,230,205,155, 67, 2, - 58, 17,224,127, 60,240, 49,128,111, 2, 57,234, 78,151, 27, 86,171, 13, 18,173, 41, 71, 18,149, 32,121,106, 92, 80,127,145,165, - 98,220,141, 2,144,120,158, 71,151, 46, 93, 48,108,216, 48,104,181, 90,152,205,102,165,157,247,111,147, 84,220, 20, 41, 0,137, - 16,130, 86,173, 90, 97,232,208,161,208,104, 52, 48,153, 76,136,140,140, 84, 4, 22,207,243,232,146, 49, 16, 31, 47,123, 5, 19, -135,117,198,164,235, 18,241,217,254, 18, 85,225, 76, 51,106,145,102,208,161, 67,135, 14,136,136,136, 0, 33, 0,207,115, 74, 56, - 77, 70, 61, 52,202,240,163,186,184, 23, 21, 21,161,160,160, 0, 5, 5, 5,224, 56, 14,125,251,246,133, 86,171,133, 32, 8,200, -207,207,199,172, 89,179,224,112, 56, 84,113,114, 28,135,182,109,219, 98,224,192,129,208,106,181,144,239, 21,190, 67,131,162, 40, -162,178,178, 18,109,218,180,193,170, 85,171,208,191,127,255,176,156, 29, 59,118,196,128, 1, 3,160,209,104, 96, 48, 24,148,169, - 58, 90,159,184, 86, 85, 85, 41,233,208,189,123,247,122,113,174,217,117, 18,139,214,124, 15,187, 67, 66,133,197, 85,235,132,228, - 38,145,216,250,209, 19,170,226, 46,115,190,247,222,123, 40, 43, 43, 83,218, 33,121, 65,155,108,158,164,166,166,226,221,119,223, - 13,122, 15,242,106,145, 77,126,251,226, 9, 33,217, 62,117, 98, 20, 33, 36,219,247, 51,216,113,222,175,215,205,152, 49,163,103, - 86, 86,214,156, 62,125,250,124,188,125,251,246,229,193,248,130,241,204,152, 49,163,115, 86, 86,214, 28,223,227, 3, 92, 39,160, -131, 37, 15,249,112,178, 51,147,146,146,162,140, 59,155,205,102,104, 52, 26,229, 96,183,219,141, 15, 62,248, 0, 9, 9, 9, 72, - 76, 76, 84, 62,131,101, 0,199,113,160,148,226,161,243, 53, 83,128,190,109,170, 65, 1,128, 27,206, 83,133,207,227,241, 96,197, -138, 21,136,136,136, 80, 42,186,217,108, 14, 57, 92,164,213,106, 7,244,234,213,139,179,219,237,138, 77,206,113, 28, 14, 31, 62, -140,172,172, 44,140, 31, 63, 30,237,219,183,135,199,227, 65,117,117, 53,174,191,254,122,241,141, 55,222, 24,160, 86, 96, 25,141, - 70,101,222,145,221,110,199,250,245,235, 17, 29, 29,141,152,152, 24,196,197,197, 33, 54, 54, 22, 58,157, 14,132,144,240, 45, 26, -165,184,249,230,155,107, 57, 87,190,174,149,111,131, 38, 15,251,169,225,188,246,218,107, 21,247,202,108, 54,227,155,111,126,107, -159,123,247,101,240, 54,107, 0, 0, 32, 0, 73, 68, 65, 84,238, 13, 74, 41,226,227,227,177, 99,199, 14, 53,141, 46, 36, 73, 66, - 66, 66, 2, 68, 81, 36,235,214,173,123,193, 43,174,136, 40,138,248,225,135, 31,144,151,151,135,248,248,120,165, 87, 26, 14,213, -213,213,103,223,120,227, 13,207,219,111,191, 13, 0, 24, 52,104, 16,202,203,203,139,125,246,151, 78,156, 56,177, 86,124, 47, 92, -184, 80,250, 23,208, 87,112, 59,221,176, 88,109,168,170,172,134, 75,242,192,229,246,160,248,244,249,232, 39,166, 77, 21,255,243, -224,100, 0,192,180,249,111,161,242,221,223, 26,176, 47,166,141, 75,184,249,213, 79,166, 3,184, 49, 20,191,197, 98,129,205,102, - 67,243,230,205,177,123,247,110, 84, 86, 86, 98,240,224,193,181,220,223, 48, 67, 16,190,112,156, 62,125,186,239,168, 81,163,118, -191,246,218,107,173, 59,117,234, 68,170,171,171, 81, 93, 93, 13,139,197, 2,249,251,129, 3, 7,232,242,229,203,127,177, 88, 44, - 25, 8, 49,103, 72,155, 94,121,212,145, 27,177, 98,203,143,154, 81,127, 31, 51, 58,234,212,233, 66,119,169, 85, 95, 85,110,253, -201,238,161,135, 64, 61, 20, 30, 74, 65, 61, 18, 60, 84,250,163,215,111,167,182,107,215,238,159,203,150, 45, 11, 40, 72,121,158, -199,178,101,203,208,175, 95,191,127,230,231,231, 31, 70,136,201,253, 50, 90, 0, 90,183, 40, 62,241,127,255,247,127, 26, 0, 24, - 56,112,224, 19, 45, 92,174,105, 5,128,163, 83,215,174,183,108,223,190, 61,202,104,172, 89, 39, 20, 21, 21, 5, 74, 41,111,177, - 88,162, 50, 50, 50,110,217,191,127,127, 93,129, 37, 81,184, 92,110, 88,109,118,148,149, 87,193,229,112,193, 45,185,225,113, 75, -112, 75, 53,238,168,219,227,129,228,246,192, 45,121,192, 11,124, 68,230, 53,205,170,106,188, 44, 82,182, 57,167,176, 89,160, 34, - 90,179,194, 11, 72, 74, 74, 82,134,132,125,231,202,168,112, 49,234, 24,245, 53,109, 33, 85,218,198, 31, 55,102,163,248,208, 86, -104, 8,133,228,113, 65,114, 59,225,113, 57,193, 67,194,161, 99,167,209,169,105,216, 54, 68, 9,231,240,103, 94, 68,239,222,189, -241,217,184, 27, 65, 8,112,239,250, 29,208,104, 52, 88,126,211, 96,104,245, 90,252, 99,205, 78,181,225,172, 21,247,220,220, 92, - 60,244,208, 67,120,233,165,151, 96, 48, 24,148,206,201,145, 35, 71,240,201, 39,159, 96,200,144, 33,170,227, 78, 72,205, 80,171, -156,134, 51,102,204,192,153, 51,103, 48,111,222, 60,244,236,217, 19,162, 40,162,172,172, 12, 25, 25, 25, 56,119,238,156, 42, 78, - 74, 37,196,198,198, 42,211,117,252,231,136,201, 29,217,250,228,145, 47,231, 93, 55, 37,227,203,109,203, 65, 64,176,243,163,169, -181,238, 71,239,124,178,165,222,156,207, 62,251,108,173,112,214,211,189,146,181, 8, 9,114,207, 27,165,210,241,146,143,147, 19, - 89,151,149,149, 53,199,255,252,112,124,190,251,253,206,119,248,137,178,115,106,134, 8, 41,199,113,144, 36, 9,102,179, 25, 90, -109,141, 3,230,127, 35, 53,153, 76,181, 20,121,184,241,100,158,231, 65, 41, 85, 18,150, 15,176,127,199,142, 29,117, 68,192,127, -255,251,223,144,227,180,110,183,187, 99, 68, 68, 4, 42, 43, 43,149, 57, 82, 90,173, 22,211,167, 79,199,196,137, 19, 21,113,165, -213,106,177,120,241, 98,164,167,167,195,225,112,116, 12,149,160, 26,141,198,210,181,107, 87, 78,118,129, 12, 6, 3, 25, 63,126, - 60,239,116, 58,161,215,235,107,185, 78,242,220,180,112, 98, 72,118,155,190,251,238, 59, 85, 14,150,218, 57, 72,148, 82,236,221, -187,183,150, 80,243, 46, 53, 6, 0,236,219,183, 79,185,209,170, 29,239,246,120, 60, 48, 24, 12, 68,163,209, 16,147,201, 20, 53, -105,210, 36,133, 87,206,115, 57,222,106, 38, 90,239,223,191,255,250,144,227, 53, 7, 14,252, 37, 31,199, 32, 73, 18,156, 46, 23, -172, 86, 27, 42,171, 45,152, 57,215, 59,162, 54, 19, 57, 0,114,250, 78,121, 8,247, 13, 27, 50, 16,225, 87,247, 5, 68,108,108, - 44, 62,255,252,115,136,162,136, 85,171, 86, 33, 50, 50, 18,163, 71,143, 70,100,100, 36,158,120,226, 9,220,118,219,109,245, 17, - 88, 0, 80, 94, 90, 90,218,119,234,212,169,187, 95,126,249,229,230,205,155, 55,135,211,233,132,195,225,128,211,233,196,177, 99, -199,176,124,249,242, 66,139,197,210, 23, 64,121, 56, 50,109,122,229,209,236, 71, 90,159,237, 55,230, 38,219,161,162, 53, 56, 87, -116, 30,110,207, 41,184, 61, 30,184, 93,238, 26, 65, 32, 73,112, 59,221,224,121, 46,242,250, 62,105,235,106, 38,252, 19, 7,128, - 17,151, 48,171,104,126,126,126,105,124,124,188,220,131,140,116, 56, 28,196,219,150, 80,252, 54,193,189, 26,128, 83, 13, 97, 33, - 48,229, 63, 47,189,212, 76, 30,190,127,233,165,151,154, 61,250,200, 35, 83, 0,188,126,104,255,254,165,119,221,117,215,212, 79, - 63,253,180,214, 57,119,221,117, 23, 14,237,223,191, 52, 88,207,199,229,114,193,106,181,163,164,228, 87,220,115,239, 51, 62,221, -125,170,244,251,107, 38,189, 83, 0,208, 3, 64,201,185,159,241,224, 67,143,234, 66,117,168,188,245, 29,162, 40,214,153,132,236, -219,190,171,104, 63,168,255, 20, 11,141, 70,131,163,219,179, 49,117,202, 45,128,199, 13, 56,171, 1,167, 5,212,105, 1,117, 84, -131,104, 13,160, 46,155, 42, 94,143,199,163, 76,219, 16,120, 14, 58,237,111,237,166,209,104,128, 86,175, 85, 27,206, 58,113, 63, -113,226, 4,238,191,255,126, 56, 28, 14,140, 25, 51, 6, 54,155, 13,118,187, 29, 54,155, 13,173, 90,181,130,213,106, 85, 29,119, - 73,146, 20, 23,112,234,212,169,232,217,179, 39,102,205,154,133,199, 31,127, 28,173, 90,181,194,148, 41, 83,240,241,199, 31,163, -115,231,206,176, 88, 44, 97, 57,229,182,196,108, 54, 67, 16, 4,165, 13,246,205, 43, 89, 96,169,205,163, 64,156,132,252, 54,239, -214, 55,223, 31,158, 52,168,222,156,115,230,204, 65, 73, 73, 73, 29,231,202,215,193, 90,176, 96,193, 69, 85, 86, 63,151, 41,236, -113,132,144, 92,239, 95,214,233,211,167, 63, 73, 8,201,158, 62,125,250,147,115,231,206,205, 83,195, 23,104, 63, 33,228, 43,239, -253,247, 6,159,255,114,213, 8, 44,200,110,147,108,107,202, 9, 39,239, 3, 0,163,209,136,236,236,108,172, 88,177,162,214, 13, - 37, 24,100,209,246,117,124, 77, 1, 24,233,117,174,228,223, 35,138, 37,140, 26, 53, 10,173, 90,181,170,229, 94, 25, 12,134,144, - 98, 67,146, 36,156, 56,113, 2, 7, 14, 28, 64,159, 62,125, 80, 94, 94, 14, 1,192,180,253,251,209,105,210, 36,216,189,194, 79, -171,213,226,159,255,252,167,170, 12,220,179,103, 79,173, 73, 64, 29, 59,118, 60,149,145,145,145,178, 99,199, 14,197,209,210,233, -116,208,235,245,138,200, 80, 83,169, 41,165,184,229,150, 91,106,137, 33,127,129, 37, 87,158,111,191,253, 86,213, 16, 33,165, 20, -153,153,153,138,123, 21, 17, 17,129, 47,190,248, 66, 57,230,186,235,174, 3, 33, 4, 9, 9, 9,248,230,155,111,194,114,202,105, - 42,231, 61,207,243,168,174,174, 70,110,110, 46,180, 90,173, 50, 63,195, 96, 48, 40,241,103, 8,150,225, 18, 28, 46, 23, 44, 86, - 27, 42, 43,107, 26,210,163, 7, 62,171,117,136,211,126,241,139,211,100, 39,180,162,162, 2,235,215,175,199,231,159,127,142,158, - 61,123,214, 26, 30, 84, 59, 68,232, 59,143,224,215, 95,127,237,247,248,227,143,239,124,225,133, 23,154,198,197,197,193,233,116, -226,196,137, 19,248,224,131, 15,206, 88, 44,150,126, 0,206,171, 79, 3, 10,183,203, 13,155,197,138,242,202,106, 60, 63,123,113, -208, 38, 2, 0,156,142, 74,140, 26,145,169,189,196, 57,117, 26,192,221, 62,191,151, 2,144, 39,227, 87, 0,152, 88, 31, 50, 17, - 24, 48,230,150, 91, 6, 78,157, 58, 85,249,111,234,212,169,216,185,115,231, 64,113,197,138, 3, 46, 96, 35,191, 98, 69,151,121, -243,230, 41,199,204,155, 55, 15,159,175, 88,177,193, 3,108, 12,210,109,175,113,176,172, 54, 84, 85, 91, 17, 25,157,140,211,199, - 55,133, 13,139,134,183,131,134,104,151,229, 54, 36,216,188,155,122,136, 43, 37,164,242,177,242,188,163, 46, 3,111,193,107,175, -255, 23, 58,142,226,230,129,157, 16,111,144, 64,140,177,208,100, 78, 7,137, 78,171, 57,235,249,171,161,166,173,219,244,212, 52, - 28, 51,233,241,207,181,219, 32,138, 34, 62, 31, 55, 18, 26,173, 6,119,124,181,185,102,113,207,228,155,161,209,105, 49,244,157, - 79,212,220,168,149,184, 31, 61,122, 20,219,182,109, 67,135, 14, 29,240,243,207, 63, 43,115,108,229,251,150,202, 14,175, 18,119, -185, 29, 47, 42, 42,194,168, 81,163,160,209,104,176,120,241, 98,108,218,180, 9,143, 63,254, 56,238,186,235, 46, 92,127,253,245, -193,230,197,214,225,244,205,163, 96,243,163,234,155, 71,254,156, 74,249,253, 29,249, 46,115,202,147,219, 3,137,245,223, 59,177, -221,199, 45, 74, 12,176,239, 6,127,231,137, 82,218,203, 59, 55,202, 62,119,238,220,188,185,115,231,142, 34,132,100,207,157, 59, -119, 84, 48, 7, 43, 16, 79,128,253, 97,219, 65,193, 79,133, 14,240, 21, 81,218, 16, 99,217, 38,147, 9,119,223,125, 55,158,120, -226, 9,101, 34, 99, 40,200,202, 53, 20,178,179,179,235,252,183,106,213,170,112, 67,132,135,163,162,162,122, 14, 28, 56, 16,229, -229,229, 56,121,242, 36,204,102, 51, 58,189,250, 42,246,223,119, 31,174, 94,184, 16,220,192,129, 74,133,223,191,127, 63,116, 58, -221, 97,155,205, 86,175, 76, 53,155,205,136,137,137,129, 94,175, 71, 68, 68, 4, 34, 34, 34, 96, 50,153, 20,161, 21,110,136, 80, - 46,124, 95,125,245, 85, 72,231,202,215,242, 85, 35,134, 40,165,216,177, 99, 71, 29, 7, 75,190,166,188, 79,118, 50,212,112,122, - 29, 75,170,211,233,192,243, 60,140, 70,163, 98,247,235,245,122,101, 83,235, 96,133,123,144,104, 90, 90, 90,173, 7,145,254, 63, -123,231, 29, 30, 69,181,134,241,119,102,182,111, 54, 13, 82, 72, 15, 1, 2,129,208, 66,151, 38,160, 8, 72, 17, 68,176, 97,167, -169,112,189, 82, 45, 24, 80, 1, 69, 64, 16, 1, 1, 5, 1, 1, 43, 77,138,244, 38,229,146,208, 99, 66, 40,233, 33, 36, 33,109, -179,117,202,185,127, 36, 27, 55, 33,101, 55, 4, 80, 56,191,231,217,103,119,167,188,115,206,204,153,153,119,190, 83, 70, 46,151, -151, 27,136,244,223, 95, 69,104, 70,177,190,184,206,245, 45, 22, 11,100, 50, 25,126,253,245, 87,116,234,212,169,204, 92,217,140, -149,253,113,119,146,180, 91,183,110, 61,186,120,241,226,147, 11, 22, 44,240,212,235,245, 88,179,102, 77,129, 94,175,127, 20,165, -237,136, 28,190, 24, 2,224,173, 2, 12,102, 51,244, 69, 37,251,224,234,197, 95,106, 52,101,255,102,154,183,106,245,226,234,213, -171,111,155,190,122,245,106, 36, 38, 38,190,136,243,231, 15, 6, 1,203,167, 78,157,218,184, 93,187,118, 65, 0, 48,117,234,212, -212, 32, 96,121,117,231,185,173,138, 80, 95,106,214, 77,197, 57,117, 22,105,173,248,192,119,167, 55, 68,134, 97,202, 76,198,227, - 35, 94, 67,198,181,120, 68,104,115,224,227,225, 2,169, 40, 3,138, 62,209, 56,127, 75,139, 47,151,239,118, 42,157, 90,165, 2, -106,205,223,213, 77,106,141, 26,170,210, 90, 5,134, 97,160,214,106, 32, 87, 42,157,206,123,124,124, 60,180, 90, 45, 68, 81,188, -237,126,227,108,143,102, 66, 72,217,189,115,193,130, 5,152, 60,121, 50,214,172, 89,131,243,231,207,163, 77,155, 54,120,236,177, -199,112,243,230, 77,156, 59,119, 14,102,179,217,225,116,218,223, 47,226,226,226,176,119,239, 94, 36, 36, 36, 32, 53, 53,181,214, -199,189, 98, 53, 99,105, 13, 78,137,121,221,123, 6, 79, 63, 30, 85, 43,205,232,232,104,220,188,121,243,182,200,149,125,243,163, -106, 34, 88,101, 94,164,154,242, 21, 99,111,130,108,145, 38,123, 67, 84,241, 63, 0, 79,219,180,105,211,166,189,231,232,122,246, -255,109, 17, 48, 71,170, 22,237, 13, 22, 83,177,186,142, 97,152,178,157,110, 31,153,178,253,214,106,181,101, 81,166,144,144,144, -106,163, 87,182, 19,142,227, 56,116,191, 86, 4,165, 82, 89, 86,157,215,255,166, 84, 46, 68, 30, 22, 22, 86,174, 13,150,253, 65, -169, 12,179,217,124,240,224,193,131,109, 7, 15, 30,204,197,197,197, 65, 38,147, 65,146, 36,152, 59,119, 70,155,229,203,113,225, -157,119,208,227,250,117,152,121, 30,106,181, 26,187,118,237,178, 26, 12,134,131,206, 20, 26,150,101, 25,155,193, 82,169, 84,112, -117,117,133,155,155, 91, 89, 52,199,153,139, 80, 85, 79,136,246, 31,103, 78,104, 91,131,126,251, 27,171,237,248, 25,141,198,114, -134,203, 81,236,171, 12,108,166,200,221,221,189, 92,181,168, 45,138,231,136,193,170,105, 32, 81,149, 74,229,118,248,240,225,198, -110,110,110, 32,132, 32, 39, 39, 7,207, 62,251,236,229,127,125, 0, 11,164,164,145,187,209, 4,189,209, 84,231,250, 63,252,240, - 3,174, 92,185, 2,171,213,138, 57,115,230,220,102,172,106, 25,193,178,113, 69,163,209, 72,253,250,245,195,241,227,199,161, 82, -169,120,212, 98,252, 42, 34, 73,176,242, 2, 76, 70, 51,244,197,197,120, 24,184,116,254,252,207, 46, 46, 46,207, 2,208,229,231, -231,115,238,238,238,208,106,181, 48, 26,141, 5, 92,105, 79,193, 36,192,162,225,249,207, 70,140, 24,177, 16, 0,100, 60,255, 89, -117,227, 96,149, 25,172, 58,222,143,182,235, 86, 85,209,171,218,154, 43,134, 97, 74,186,231,179, 44,214,204,153,140, 8,109, 54, -162, 26,186,192,116,243, 10, 84,110, 94, 96, 60, 66,241,229,242,221,136, 75,186,229, 84, 58,159, 91,247, 11,130,130,130,176,253, -165, 33, 80,169, 84,120,246,151,189, 37,141,180,199,142,132, 66,173, 66,159, 37, 63,212, 42,239, 6,131,161,202, 72,149, 19, 17, -172, 50, 77,155, 1,140,138,138, 66,147, 38, 77,112,240,224, 65, 68, 69, 69, 33, 49, 49, 17,137,137,137, 72, 74, 74,194,249,243, -231,145,151,151,231,244, 49,218,180,105, 19,178,179,179,161, 80, 40, 80, 88, 88,136,235,215,175, 87,215,254,217,225,227,110,163, -217,147,209, 0, 0,127,111,119,167, 12,150,189,230,188,121,243,156, 25,230,161,156, 76, 53,243,114, 42,180,117,178,253,183, 84, - 48, 59, 21,255, 87, 92, 30, 0,110, 2,224,106, 88,175,226,255,156, 57,115,230, 28,180, 69,190, 74,117,185,170,218, 95, 85,140, - 96,217,155, 0, 99,179,102,205, 52,246,245,167, 44,203,194,213,213,149,153, 52,105, 18,199, 48, 12,116, 58, 29,220,221,221, 17, - 30, 30, 14,171,181,230,102, 9, 10,133,194,216,177, 99, 71,141,125,232,149, 97, 24,184,184,184,112, 83,166, 76, 97, 86,173, 90, - 85,233,122, 91,183,110,173,182,112, 11,130,176,112,212,168, 81,175,167,165,165,121,250,250,250, 34, 51, 51, 19, 10,133,162,100, -180,216, 94,189,208,253,218, 53, 88, 75, 13, 67,124,124, 60, 86,174, 92, 89,108,181, 90, 23, 58,123,209,208,233,116,168, 95,191, - 62, 84, 42, 85,185, 94, 49,118,161, 85,135, 34, 88,117,105,174,108,154,246, 55, 86,219,239,177, 99,199,150,253,119,230, 34,169, - 80, 40,200,147, 79, 62, 89,246, 14, 66, 15, 15, 15,120,121,121, 33, 43, 43,235,239,158, 58,165,145, 59, 71, 13, 86, 77, 3,137, -202,229,114, 88,173,214,178,234,204, 37, 75,150,220,137, 49,248,231, 24, 44, 65, 98,116, 58,111,248,251, 55,133,183,143, 9,146, - 36,214,153,182, 32, 8, 24, 55,110, 92,185, 49,175,108, 55, 98,219, 32,182,182, 30,190,246,225,127,103,159,196,239, 56, 58, 66, - 0, 94, 40,141,226, 25, 44,255,186, 99, 24, 18, 18,226,150,156,156, 92, 89,187,168, 74,123,251, 1,127, 15,201,192, 1,159,164, -164,164,180,116,119,119, 71,223,190,125,177,109,243,230,173, 31, 2,101, 33, 27, 35,144,166,185,113,227, 63,165,191,211,107, 10, -234,217,170, 8,139, 13,117,109,214,153,219,162, 87,119, 90,149,195,178, 37, 15,102,191,125,243, 25, 34, 52, 89,104, 19,172,194, -177, 19,231,208, 41,136,128,152, 21,181, 78,167, 78,167, 43,105,140,175,213, 66,165,250,187,205,149, 74,171,129, 66,169,170,117, -222,237, 35, 85,119, 26,193, 98, 24,182,220,126,124,253,245,215, 49,117,234, 84,244,237,219, 23,137,137,137, 56,124,248, 48, 46, - 95,190,140, 9, 19, 38, 32, 50, 50, 18, 79, 60,241,132, 83,199,232,183,223,126, 67, 65, 65, 1, 8, 33,200,206,206,134,201,100, -194,140, 25, 51,238,248,184,219,184,182,103, 54, 0,224,151, 61,177,181,214,156, 62,125,122,217, 24,140,182,123,126, 13, 81, 43, - 71,238,119,167,170,251,239,236,250,247,130, 74, 13,214,229,203,151, 43,237, 43, 31, 17, 17,145,213,167, 79, 31,159,132,132, 4, -232,116, 58,132,135,135,195,108, 54, 87, 87, 13,209, 18,165, 99,101, 92,186,116,169, 82,205,176,176, 48,235,227,143, 63, 46,111, -208,160, 65,185,200,149,173,135,141,189, 51,174,168, 89, 74,145,201,100, 26,221,181,107,215,181, 59,119,238,212,132,135,135,163, -160,160,164,253,237,154, 53,107,240,214, 91,111, 65,163,209, 32, 33, 33, 1, 67,134, 12, 49, 24, 12,134,209, 40, 63, 6, 86,101, -154,183, 25, 25,133, 66, 81, 86, 77,102,171, 42, 83, 86, 31,138,190, 77,147, 97, 24, 44, 94,188,184,210,177,160, 42,178,124,249, -242,202,220,124,165,233,252,226,139, 47,234, 76,243,228,201,147,229,222, 49, 56,112,224,192,111,158,120,226, 9,164,166,166,150, -171, 22,172,193, 96,149,211,172,105, 32, 81,142,227,224,235,235,139,143, 63,254, 24, 94, 94, 94,104,208,160, 65,101, 6,171,218, - 99, 84, 75,238,170, 38, 97, 73,204,162, 5,209,221,190,249,246, 23,185, 74,201,226,248,225, 95, 80,152,119,163,124, 4,214,250, -119,151,104,101, 84, 31, 88, 98,247, 57,148, 78,179,217,140,207, 63,255, 28,209,209,209,136,142,142,174, 54, 65, 85,116,135,174, - 49,239,246, 6,203, 65,179,117,155,166, 36,137,140, 90,235, 9,173,139, 63, 34, 35, 61, 33,145,154,199,234,148,238,255,113, 55, -164,166,166,186, 7, 5, 5,225,242,229,203, 12,254,110,143,245,247,177, 82, 42,159,173, 96,176,110, 63,223,129,243, 27, 54,108, -104,217,170, 85, 43, 44, 89,178, 4, 0, 94,250,252,143, 63, 70, 70, 27, 75,194,153, 28,176,177,212,140,213,152, 78,145,136,140, - 90,235, 1,141,174,116, 63, 74,142,143,121, 74,170,201,187,237,230,119, 39, 15,122,149,105,218,214,191,122,252,119, 60,217, 63, - 16,127,158, 60,143,125,105, 46, 8, 82,101,192,207,144, 13, 41,251, 47,252,103,120, 20,190,252,185,228, 38,126,254,116,205,154, - 12,195,224,232,164,209,208,169, 85,120,122,195, 14,200,229,114, 28,124,231,101, 40, 20, 10,244, 92, 80, 82, 37,123,225,243,233, -144,169,148,136,152, 16,237, 80, 58, 43,214,212,216,218, 92,217,155,171, 26, 34, 88, 85,230, 93,175,215, 35, 47, 47, 15,107,215, -174,197,171,175,190,138,155, 55,111,226,250,245,235, 72, 72, 72,192,198,141, 27,203,221,227,224,196, 49,154, 54,109, 26,222,125, -247, 93,176, 44,139,150, 45, 91, 34, 58, 58, 26, 93,186,116,113,250, 24, 85, 60,238, 21,113, 32,122, 85,165,230,162, 69,139,156, -238,176,245, 32,226, 84, 3, 13, 91, 36,203,203,203, 11, 46, 46, 46, 0, 80,238, 6, 91, 83, 53, 97, 85,154,130, 32, 64,163,209, - 64,163,209,148, 27, 22, 97,240,224,193, 53, 70,176, 74,217,149,144,144,240,124,139, 22, 45,190,139,142,142,118,121,244,209, 71, -229,254,254,254,104,215,174, 29, 18, 18, 18,240,251,239,191, 91,151, 46, 93,106, 48, 24, 12,175, 2,216, 83, 27,243,108,107,248, -109, 63,162,189, 51,136,162,152,122,253,250,117,191, 47,190,248,130, 99, 24, 6, 11, 23, 46, 44, 55, 64,107,197, 60,158, 56,113, - 66, 32,132, 92,169, 33,138,145,122,253,250,117,191,249,243,231,151,211,180,125, 42,154, 20, 71, 52,171,194,150,231,138,251,192, -145,147,167,166,129, 68,101, 50, 25,226,227,227,241,209, 71, 31,129, 97,152,114, 29, 39,254,205,252,249,191,204, 85, 93,218,193, -243,217,225,189, 91, 49, 96, 97,169, 36,210,203,229,230,151,153,171,161,243, 55,225,183,119, 71, 58,114, 44,174, 31, 58,116, 40, -120,246,236,217, 28,199,113,152, 55,111, 94,185,178, 84,241,184,239,223,191, 95,212,104, 52, 41,181,205,135,213,106,117,164, 23, - 85, 85, 39,248,177,197,243, 62,234,251,205,234,109,114,134,177,224,248,161, 95, 80,144, 95,121,215,116,165, 92,134,117, 27,182, - 10, 50,142, 77,189,207,135,238,155,199, 30,123,108,198,222,189,123,101, 65, 65, 65,181, 22, 9, 4,182, 45, 94,188,184,255,168, - 81,163,234, 53,111,222,220,214,249, 68, 89,250, 65,233,200,238,187, 28, 52, 73, 91,190,252,226,163,151, 86,172,222,166,100, 25, - 43,142, 31,254, 5, 5, 21,204,250,237,209,104, 57,214,111,216, 98,149,201,184,248,154,174,193,181,233,193,236, 8,109,159,124, - 21, 95,239, 88, 9,159, 86,253,241,204,160,110, 56,186,228, 37,140,104,110,132,245,199,231,208,242,153,117, 88, 51,189, 36,122, -211,230,167,233, 14,221, 43,220,116,127, 15, 88,201,178, 44, 84,106, 13,228,202,191,163, 47, 74,173, 22,156, 19, 17, 91, 91,222, -171,139, 84, 57,187, 63, 56,142, 67, 88, 88, 24, 26, 53,106,132,174, 93,187,162,109,219,182,232,213,171, 23,206,157, 59,135,115, -231,206, 97,194,132, 9,213,153,171, 26,143, 81,223,190,125,209,175, 95,191, 59, 62, 54, 21,143,123, 93,224, 72, 89, 26, 63,126, - 60, 0,220, 81, 52,235,129, 54, 88,222,222,222, 80, 42,149,181, 50, 84,149,105, 90, 44,150, 50, 99,165,209,104,202, 34, 86, 91, -183,110,117,166,128,239, 49, 26,141,145, 31,124,240,193, 68,141, 70,211,203,104, 52, 70, 0,128, 86,171,253,203, 96, 48, 28,176, - 90,173,139, 0,228,223, 73, 90,237, 13, 70, 37, 81,174,106, 31,241,179,179,179,159,120,241,197, 23,247,176, 44,219,176,186, 23, - 51,219,153,213,164,172,172,172,254, 53,105,190,240,194, 11,149,106, 86,166,235,136,102, 21,230,176,156,169,178,239, 97,232, 80, - 33,171, 97, 32, 81,185, 92, 14,157, 78,135,205,155, 55,163,126,253,250, 15,212, 9,118, 60, 38,243,243,234,230,247,172,175, 60, - 4,192,123,232,252, 77, 41,135,114,173, 33, 67,231,111, 74,254,237,221,145,193, 53, 24,158, 71,230,206,157,123,148,231,249, 16, - 7,203,109,178,217,108,238,230,108,218, 9, 33,136,143,143,151, 94,127,253,245,156,236,236,236,103,106,147,255,195,199,147, 23, -116,235,232,239, 53,124, 72,183, 14, 96, 24, 88, 44, 85, 52,234,101, 64, 8, 33, 68,198,177,169,135, 78,164,190,126,159, 95,161, -113, 54, 57, 57,121, 86,227,198,141,199, 0,168,234, 78,184,177, 38,145, 36,192,162, 52,155,191,104,223,190,253,148,247,222,123, -207, 99,208,160, 65, 8, 10, 10,130,187,187,243,111, 11, 58,118, 42,125, 76,231,118, 98,224,211,131,187, 61,193, 50, 12, 49, 91, -170,111, 28,205,216,246,167,140,139, 63,124, 50,173,117,117,209,121,155, 41,191, 27,209,134, 62,195, 95, 65,159,225,175,148,149, -167,125, 63, 63,138,152,244, 63,208,142, 77,135,121, 69, 55, 48,110,182,162, 94,243, 48, 55, 44,203, 98,208,234,205, 80, 40, 20, -101,233,124,100,110,249,126, 1,225,111, 58,254, 46,117,251,188,219, 71,176, 42,185, 22, 59,213, 6,139,227, 56,228,228,228, 32, - 33, 33, 1, 89, 89, 89, 48, 24, 12,136,139,139,131,197, 98, 65, 94, 94, 30, 90,182,108,233,220,211,253, 93, 56, 70,247, 83,243, - 97, 48, 86,181, 50, 88,132,144,180, 78,157, 58,213,116, 51,118,170,151,145, 76, 38, 51,117,235,214,141,169,172,183,129,237,183, - 70,163,113,244,241, 57,223,106,181, 70, 91,173,214,104,148, 86,133, 89,173,214, 59,110, 72, 34,138, 98, 70,199,142, 29,185,234, - 46,250,146, 36, 85, 59, 98, 92, 78, 78, 78,113, 78, 78, 78,157,190, 58,252,110,104, 86,114,210,136, 99,198,140,169,214, 73,185, -184,184, 84,219,184,168,166,129, 68, 13, 6, 67,230,139, 47,190, 40,218, 87, 53,219, 15, 68,250, 64,195,144,228, 1,207,190, 22, -114, 40,215, 26, 2, 0, 54,147, 5, 66,146,171, 90,229,244,233,211, 89, 0, 26,223,237,164, 93,187,118,205,210,169, 83,167,245, - 69, 69, 69,227, 1, 24,106,171,115,244, 84,198,244,127,225,145, 57, 11, 96,236,157,138, 88,128, 56, 95,147,105, 92,244,135, 31, - 62,253,209,135, 31,134, 75, 64,125,148,142, 81,197, 57, 96,210,236, 57, 17,115,163,206,199, 6, 19, 69, 49,237,145, 71, 30,113, -122,157,154,230, 87, 51,146, 56,126, 64, 16,112,218,121,205,187,145, 78,155,102,171, 86,173,208,166, 77,155,178,111, 27,246,211, -219,182,109,235,144,102, 84, 84, 20,154, 55,111, 94,229, 8,237, 21,219, 92,221,239,188,219,176, 61,250,182,109,187,187,206, 52, -239, 52,157,148,234,105, 73, 53,169, 38,213,252,215,106,114,116,127, 82, 77,170, 73, 53,239,161,230, 3, 5, 75,119, 1,133, 66, -169,234, 1,147,238, 2, 10,133, 66,169, 29, 76, 53, 46,212,153,158, 59,181,113,178, 23,168, 38,213,164,154, 84,147,106, 82, 77, -170,249,208,105,214,164, 93,215, 61,135, 31, 72,104,248,148,106, 82, 77,170, 73, 53,169, 38,213,164,154, 15, 29,180,138,144, 66, -161, 80, 40, 20, 10,165,142,145,209, 93, 64,161, 60,220, 68,223,225,131, 86,244,109, 99,131, 62,220,233,164, 80, 40, 20,128, 70, -176, 40, 20, 10,133, 66,161, 80,168,193,162, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,229, 33,131,161,187,128, - 66,121,184,137,166,109,176, 40, 20, 10,165,206,161, 17, 44, 10,133, 66,161, 80, 40,148, 58,198,214,139,208,254,125,125, 52,170, - 69,161, 80, 40, 20, 10,229, 94,243, 64,121, 17, 25, 53, 86, 20, 10,133, 66,161, 80,254, 33, 60, 48, 94,132,173,194, 57, 82, 40, - 20, 10,133, 66,161,220,107, 30, 24, 47,194, 62,136,174,145, 66,161, 80, 40, 20,202,191,146, 7, 54,130, 69,163, 88, 20, 10,133, - 66,161, 80,238, 23, 15,140, 23,145, 61,104,142,145, 66,161, 80, 40, 20,202,191,146, 7,202,139,220,237, 97, 26,232,155,198,169, - 38,213,164,154, 84,147,106, 82, 77,170,249,208, 65,199,193,162, 80, 40, 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,133, - 26, 44, 10,133, 66,161, 80, 40,148,135, 10, 25,221, 5, 20,202,195, 77,244,191,228, 29,125,209,244, 93,130, 20, 10,229, 95, 4, -141, 96, 81, 40, 20, 10,133, 66,161,212, 49, 12,170,238, 9,112,193, 9,157,218,244, 38,184, 64, 53,169, 38,213,164,154, 84,147, -106, 82,205,135, 78,179, 38,237, 11,160,220, 21,227, 69, 53,169, 38,213,164,154, 84,147,106, 82,205,135, 79,243,129,130, 86, 17, - 82, 42, 34, 67,245,109,243,106,154,127,175, 52, 41, 20, 10,133, 66,249, 71,223, 76, 41, 20, 27, 93, 0, 12, 44,253,189, 29,192, -113, 39,231,223, 43,205,251, 66, 84, 84,148, 70,173, 86,247,221,191,127,191, 34, 62, 62, 30, 39, 78,156, 32, 63,252,240, 3,111, - 50,153,254,136,141,141, 53,210,226,243, 96,208,182,109,219, 39, 24,134,153, 10, 0,132,144,207,206,156, 57,179,251, 14,228,152, -198,141, 27, 79, 80, 42,149, 3,228,114,185,191, 40,138,140,217,108,206, 48, 26,141,123,210,211,211,231,163,118, 13,247, 59,120, -121,121,141,141,140,140, 12,191,118,237, 90,106, 74, 74,202, 58, 0,187, 1, 60, 17, 28, 28,252, 98, 88, 88, 88,208,197,139, 23, - 47,231,228,228, 44, 7,240,191,251,152, 78, 10,133, 26, 44, 7, 96, 61, 61, 61, 31,215,104, 52, 19,245,122,125,148,155,155,219, - 69, 65, 16, 22,103,102,102,110,167, 39,222, 3, 85, 22, 6, 18, 66,228, 0,192,113,220,144,142, 29, 59,134, 48, 12, 35, 49, 12, - 67, 8, 33,204,201,147, 39,219,138,162,200, 2, 0,195, 48, 3, 75, 47,222, 66,109, 53, 5, 65, 96, 78,159, 62,237,172,230, 93, -161, 69,139, 22,179, 9, 33,254,213,238, 32,153,172,253,190,125,251,154,109,217,178, 69, 88,183,110, 93,254,200,145, 35,117, 47, -191,252,178,108,205,154, 53, 95, 3,248, 79,197,229,155, 55,111,190,128,101, 89, 47, 71,182, 47, 73, 82, 78, 92, 92,220,127,105, - 49,188,255, 48, 12, 51,245,181,185, 7,123, 72, 4,248,110, 90, 79,182,212,188,212,214,172,125,255,212, 83, 79, 61,219,180,105, - 83,153, 36, 73,224,121, 30,102,179,185, 89,108,108,236,163,187,119,239,110,159,148,148,244,140,147,146, 3,167, 77,155,182,114, -214,172, 89,222,114,185,156,225,121,190,243,143, 63,254,216,111,236,216,177,103,151, 47, 95,222,102,196,136, 17,174,182,233, 31, -125,244, 81,255, 57,115,230,188, 3, 96,227,125, 72, 39,133, 66,111,170,213,205,212,233,116, 77,188,189,189,223, 45, 44, 44,236, -223,190,125,251,130,209,163, 71, 95, 61,119,238, 92, 92,100,100,164,126,245,234,213,159,242, 60,191,212,211,211,243,143,194,194, -194,249, 89, 89, 89,113, 78,110,187, 9,128,209, 0,250, 3, 8, 4,144, 1, 96, 39,128,149, 0,226,107,147, 25,127,127,255, 86, - 46, 46, 46, 83, 24,134,233, 92, 92, 92, 28,232,226,226,146, 65, 8, 57, 89, 84, 84, 52,239,198,141, 27,177,181,209, 12, 8, 8, -104, 4,224,109,153, 76,214, 93, 20,197,134, 28,199, 37,139,162,120, 68, 20,197, 37,153,153,153,151,107,163,249, 72,160,110,144, -164,115,155,207,115,154, 32,189, 73, 80,232, 84, 50, 94, 46,153, 82,165,226,252,105,167, 82,139,127,249, 39, 20, 12,165, 82,201, -174, 91,183,174,141, 82,169, 4, 0, 88, 44, 22, 68, 70, 70,222,209,123,162,228,114, 57, 59,111,222,188, 54, 10,133, 2, 0, 96, -181, 90,209,187,119,239,127,196,187,167, 24,134, 9,140,137,137,113,183,165,173, 34,162, 40, 98,200,144, 33,161, 74,165, 18,203, -151, 47, 23,114,114,114,162,190,251,238,187,152,175,191,254,218,235,251,239,191, 31, 94,153,193, 98, 89,214,171, 42, 77, 81, 20, - 97,181, 90, 33, 8, 2, 44, 22, 11,122,245,234, 69,175, 70,255, 16, 8, 33, 33, 4,192,206,115, 38, 0,168,127, 39, 90, 26,141, - 38, 98,232,208,161,178,236,236,108,200,229,114, 88,173, 86,220,184,113, 3,141, 26, 53,226, 44, 22, 75, 83,103,245,154, 53,107, - 54,118,206,156, 57, 62, 59,118,236,176,174, 95,191,222,252,216, 99,143, 41, 94,125,245, 85,183, 30, 61,122,116, 15, 12, 12,100, -191,251,238, 59,243,222,189,123,173, 47,188,240,130,106,246,236,217, 62, 59,119,238,124,246,252,249,243, 27,239,117, 58, 41, 20, - 74, 53, 6, 75,167,211, 29,210,233,116,141,223,120,227,141,248,241,227,199,255,161,211,233, 68, 0,184,113,227,134,106,200,144, - 33,217,195,134, 13,187,105, 48, 24,184,165, 75,151, 6,127,245,213, 87,123,116, 58, 93,186, 94,175,239,232,200,189, 12,192, 68, -150,101,223,238,219,183,239, 33,158,231,179, 55,111,222,252,211,240,225,195,187, 73,146,228,178,127,255,254,223, 69, 81,252, 6, -192, 23, 78, 68,199,184,176,176,176,104, 47, 47,175, 73,203,150, 45, 83, 53,108,216, 16, 90,173, 22, 69, 69, 69,193,151, 47, 95, - 14,154, 56,113,226, 96,141, 70,179,216,221,221,253,131,216,216, 88,222,209,123,174,191,191,255,127, 92, 93, 93, 63,249,244,211, - 79,213, 45, 90,180, 96,180, 90, 45,146,146,146, 90, 30, 63,126, 60,242,219,111,191,125,149,101,217,153,233,233,233, 14,167,179, - 39, 32, 51, 55,246,222,237, 26,218,178,215,242,149,223, 50, 94, 46, 90,200, 24, 6,188,213, 42,207, 50, 24,195,222, 26, 55,230, -167,206,170, 75,199,138,228, 89,125,226,226, 96,189,199,101, 65, 0,176,157,227,184, 33, 74,165,146, 29, 50,100, 8,246,238,221, -203,152, 76, 38, 25, 0,168,213,106, 97,200,144, 33,208,104, 52,176, 88, 44, 18, 74,170,243, 4, 0,170,210,245,205,213,105,202, -229,114,182, 87,175, 94,134,211,167, 79,231, 26, 12, 6,185, 77,179, 87,175, 94,245, 84, 42,149,150,231,121, 71, 53,239,166,169, -196,149, 43, 87,110, 51, 66, 55,111,222, 68,110,110, 46,204,102, 51,147,151,151, 7, 81, 20, 97, 54,155,179, 69, 81, 4,203,178, -182, 50, 93, 41, 10,133, 2, 9, 9, 9,183, 77,183, 90,173, 48, 26,141,224,121, 30,133,133,133, 26,181, 90,221,184, 91,183,110, -105, 0,182,232,245,250,249,231,206,157, 75,166,151,167,251, 70,202,239,103, 76,193, 0,172, 0,174,221,161,113,151, 0,224,200, -145, 35,200,202,202, 66,118,118, 54,178,179,179, 17, 20, 20, 4, 66,136,211,209,255,248,248,248, 69,109,219,182,101,206,158, 61, -187, 13,192,202, 77,155, 54, 13,189,117,235,214,178,201,147, 39,215,155, 55,111,222,173, 41, 83,166,140, 3,240,219,166, 77,155, - 94,105,213,170,213,160,243,231,207,127,121, 63,210, 73,161, 80,170,105,228, 78, 8,241,111,210,164,201,173,133, 11, 23, 54,155, - 54,109, 90,125,189, 94,207,149, 70,137, 76, 0, 96, 48, 24,184,169, 83,167,122,207,157, 59,183,153, 74,165,202, 19, 4,193,187, - 18,153,202,186, 90,190,237,230,230, 54,248,234,213,171,155,154, 53,107, 86,111,206,156, 57,103, 92, 92, 92,200,151, 95,126, 25, -219,168, 81, 35,191,228,228,228,181,110,110,110,189, 1, 76,170, 34,105,183,105,134,134,134,126, 52,124,248,240, 73,199,142, 29, - 83,181,110,221, 26,174,174,174,224, 56, 14, 30, 30, 30,232,212,169, 19,115,248,240, 97,213,128, 1, 3, 38, 20, 20, 20,204,115, - 84, 51, 32, 32, 96, 82,191,126,253, 62, 61,125,250,180,166, 79,159, 62,140, 82,169, 68,126,126, 62,148, 74, 37,186,116,233,194, - 44,251,122,137,166,101,139,230, 31, 5, 6, 6,206,114, 84,211,220,196,107,207,200,241, 83,123,111,223,185,155,241,245,245,197, -213, 47,102,225, 72,143, 72, 36,126, 60, 13,126,126,126,216,182, 99, 23, 51,112,212,248,110,110,188,239,126, 71, 53,235, 0,123, -205,227,145,145,145, 49,113,113,113,232,222,189, 59,126,250,233,167,214,147, 39, 79, 30, 63,121,242,228,241, 63,253,244, 83,235, -238,221,187, 35, 46, 46, 14,145,145,145, 49, 40,105, 43, 53, 30,192,173,210,207,248,234, 52, 15, 29, 58,132,222,189,123,231,109, -218,180,169,209,140, 25, 51,102,207,152, 49, 99,246, 79, 63,253, 20,214,187,119,239,188, 67,135, 14, 57,171,121, 55,242, 94,102, -168, 42,126, 8, 33,144, 36, 9, 62, 62, 62, 55,119,236,216, 65, 6, 14, 28,200, 53,104,208, 32, 99,200,144, 33,170,147, 39, 79, - 18,134, 97,182, 59,147, 78, 66, 8,140, 70, 35,140, 70, 35,174, 93,187,166, 89,188,120,113,183, 73,147, 38, 53,249,241,199, 31, - 3, 38, 76,152, 48,206,205,205, 45,182,117,235,214, 33,247, 58,239, 84,179, 44,242,120,163,212, 92, 21,179, 44,155, 82, 91,205, - 97,195,134,181, 12, 9, 9,241,253,241,162, 39,242, 20,205, 32,202,221, 33, 41, 60, 32,214,239,128, 68, 69, 63,248,251,251,251, - 6, 7, 7,119,113, 50,157,123,206,158, 61,219, 31,192,114, 0, 34,128,159,167, 76,153,242, 58,195, 48,191, 76,153, 50,101, 12, -128,159, 75,167,175, 58,127,254,252, 32, 0, 7,238, 83, 58,105, 89,162,154,117, 10, 33,164, 3, 33,228,201,210, 79, 71, 66, 72, -167, 10,255,149, 21,150,123,172,138,239, 39, 43,252,239, 80, 97,189, 14,117,109,176,136,221,199,246, 68,195,127,254,249,231, 39, -190,253,246,219,189,153,153,153,126, 97, 97, 97, 79, 14, 29, 58, 52,164,176,176,144, 29, 54,108, 88,168,159,159,223,192, 3, 7, - 14, 52, 24, 54,108,216,254,225,195,135, 31,103, 24,198,145,118, 51,141, 56,142,123,231,236,217,179, 71, 67, 67, 67,173, 25, 25, - 25,174,109,219,182, 45, 2,128,240,240,112, 67,110,110,174,198,213,213, 21, 59,118,236, 56,197, 48,204,104, 0,205,106, 18,244, -243,243,107,235,229,229, 53,233,147, 79, 62, 81,113, 28, 87,233, 50, 42,149, 10,159,124,242,137,202,205,205,237, 13,127,127,255, -206, 53,105,250,250,250, 70,184,186,186, 70, 47, 94,188, 88,109,177, 88, 96,181, 90,225,235,235, 11,157, 78,135,204,204, 76,164, - 95,191,142,155, 73, 73,152,240,218,107, 26, 23,141,230, 29, 63, 63,191, 54, 53,105,118, 11,209, 13,209, 5, 52,127,244,173,183, - 39,226,210,196,215,176, 55, 64,137, 6,111, 79, 69,235,131, 23, 16, 56,115, 62, 14,132,185, 33,230,153,199,241,206, 59,239, 66, -225, 19,246, 72,151, 64,151,145,247, 37,164, 41,147, 17,149, 74, 5,147,201, 36, 59,114,228, 72,119, 65, 16,228,130, 32,200, 15, - 31, 62,252,232, 31,127,252,209,127,206,156, 57, 79,104, 52,154,113,157, 59,119,254,158, 97,152, 69,132, 16, 13, 33, 68, 3, 96, -158, 93,228,233, 54, 77,185, 92, 14,163,209, 40, 63,125,250,244, 24, 81, 20,149,162, 40, 42, 79,159, 62,253,230,129, 3, 7, 94, - 92,190,124,185,211,154,247, 10,142,227, 32,147,201, 32,151,203,209,166, 77,155,171, 27, 54,108,224,253,253,253,101, 43, 86,172, -240,244,241,241,113,249,254,251,239,243,243,242,242, 62,119, 70,211, 98,177,192,108, 54,195,104, 52,226,200,145, 35, 13,223,120, -227, 13,153,197, 98, 17, 71,141, 26,117,139,231,121,243,155,137,186,117,110, 0, 0, 32, 0, 73, 68, 65, 84,111,190,233,166,211, -233,222,165,207,127,247, 7, 66,136, 8,160, 24,128,158, 16, 98, 6,128,144,144, 16,149,191,191,127,171,144,144, 16,135,203,163, - 94,175,255,102,193,130, 5,129,172,202, 3, 71, 45, 3,176,137,204,194, 30,143,175,145, 29, 58, 25,190, 65, 77,208,175, 95, 63, - 31,134, 97,150,212, 65,146,183, 0, 24, 14,224,215,218,172,124,183,211,217,190,125,251,238,237,218,181, 59, 29, 21, 21,149,217, -174, 93,187,211,237,219,183,239,126,167, 25,158, 57, 6,143,205,125,139, 77,155, 53, 22,100,238, 91,108,218,204, 49,120,140,150, -220, 7,227,244,171,232, 69,236,240,102, 24,102, 59,195, 48,219,167, 79,159,222, 11, 64,253, 10,255, 31,177, 95, 14,128,178,178, -111,219,199,110,186, 55, 33,228, 73,187,245,188,235,236,126,106,247,187,210,106, 14,111,111,111,203,123,239,189,119,214,100, 50, - 93,248,254,251,239, 27,143, 31, 63,190,109, 72, 72, 72,194,176, 97,195,126,215,106,181,130,173,141,142,131,188, 54, 96,192,128, - 29,245,234,213, 99,114,114,114, 20, 22,139, 69,118,227,198, 13,133, 40,138, 12,199,113,196, 96, 48,200, 18, 19, 19,229, 86,171, - 85,234,220,185,243,214,227,199,143,143, 6,240, 78,117,130, 90,173,246,205, 21, 43, 86,168,171, 50, 87,162, 40, 66,175,215, 67, - 16, 4,204,156, 57, 83, 61,105,210,164,137, 0, 78, 84,167, 41,151,203, 39, 44, 92,184, 80,109,171, 2,146, 36, 9,177,177,177, -200,185,121, 19,230,162, 66, 88,138, 10, 97, 41,200, 3,171, 47,192,139,253,159, 80, 47,255,117,243,127, 1,188, 88,237, 77, 85, -165,155,251,253,202,111, 33,138, 34, 50, 54, 87,222, 36,226,214,177,131, 16, 5, 30,179, 63,155,199,188,243,218,136, 57, 64,241, -166,127, 74,169, 87, 42,149,236, 23, 95,124,209, 76,169, 84,130, 97, 24, 98,177, 88,208,162, 69, 11,230, 14, 53,185, 69,139, 22, -181, 85, 40, 20,140, 77,179,101,203,150,204, 63,237,140, 87, 40, 20,208,104, 52, 8, 13, 13, 53, 14, 26, 52,232,248,162, 69,139, -130, 57,142,211,202,100,178, 93, 5, 5, 5,115, 46, 93,186,228, 84, 53,146,217,108,134,201,100,130,201,100, 66, 74, 74, 74,131, -198,141, 27, 51,255,249,207,127,196,226,226,226,176, 85,171, 86, 93,217,180,105,147,118,201,146, 37,195, 0,188, 77,175,183,247, -150, 70,141, 26, 41, 1,184, 7,215,151, 21,203, 57, 20,103, 10,130,111, 64, 64,192, 84, 65, 16,218,135,135,135,123, 38, 38, 38, -230,249,251,251,159, 96, 89,118, 99, 90, 90, 90,102, 13, 70,141, 17, 4, 1, 99, 58,230, 99, 92,103, 22,130, 32, 32, 63, 63, 31, - 41, 41, 41,184,120,241, 34, 78,158,188, 88,171, 52,134,134,134,190,166, 86,171,251, 42,149,202, 80, 81, 20, 89,131,193,144,108, - 54,155,247,102,100,100,124, 83,197,141, 9,247, 35,157,118,250,243,135, 14, 29,234,239,238,238,142, 51,103,206,248,159, 59,119, -110, 62,128,246,119,116,237,144,179,223,141,122,125, 73, 64, 61, 15, 15, 36,197,109, 11,216,178,243,199,239, 0, 41,144,150,224, - 7,130,170,238, 1,217,132,144,129,165, 1,160,237,115,230,204, 25, 88, 90,190, 6,218,255,119,160, 60,222,182, 28,195, 48,219, - 43,155, 94,151, 6,139, 84,147, 49,168,213,106,113,236,216,177, 9, 91,183,110, 13,109,223,190,253, 95, 85, 53, 6,174,129,174, -205,154, 53, 75, 62,117,234, 20,241,246,246,182, 72,146,196,104,181, 90, 81,163,209, 72, 5, 5, 5,224,121,158, 36, 39, 39,203, - 82, 82, 82, 20, 94, 94, 94, 10, 0, 53,134,234,228,114,121,151,134, 13, 27, 86, 25, 41,208,235,245, 40, 42, 42,130,217,108,134, -175,175, 47,195,178,108,167, 26,195,122, 44,219,173, 89,179,102, 76, 94, 94, 30,252,253,253,113,244,232, 81,232, 11,242, 97, 46, - 42,130,185, 32, 31,214,194, 2,136,133,249,200,191,153,137, 80,191, 64,134, 97,152, 46, 53,105, 10,156, 38,196, 71,231,130,196, - 89, 83,209, 33, 54, 25,140, 92,129, 83, 45,253, 64,248,146,166, 86, 29,207,103,128, 81, 40,241,215,132,151,209,224,249, 55,192, -179,170,128,251, 81,178, 5, 65, 96,204,102, 51,212,106,181,208,189,123,247, 35, 28,199, 61,170, 84, 42,217,113,227,198,225,198, -141, 27,229, 78,128,113,227,198, 65,163,209,192,108, 54, 11, 0, 38,163,138, 54, 83,130, 32, 48, 60,207, 67,163,209,240,237,219, -183,255,134,227,184, 55,149, 74, 37,215,180,105,211,172,185,115,231,102,184,184,184,184,164,164,164,220, 82, 42,149,105,161,161, -161, 29, 53, 26, 77, 72, 77,154,247, 18,149, 74, 5,153, 76, 6,150,101, 81,191,126,253,226,220,220,220,147,215,174, 93,123,174, - 54, 90,162, 40,194, 98,177,128,231,121,152, 76, 38, 72,146,132,115,231,206, 65,165, 82,201, 69, 81,188, 40,138,162, 86, 46,151, -131,227, 56, 58, 70,221, 61, 38, 42, 42,234,209, 80, 13,230,143,243, 51,123, 54, 26,232,162,215,170,184,226,103, 55,243, 29, 30, -123,236,153, 39, 38, 79,158,170,243,242,242, 82, 94,191,126,221,244,229,151, 95, 54,252,237,183,223, 24,148,180, 19,173,146,140, -140,140, 95,230,206,157, 91,239,209, 71, 31, 13,147,203,229, 76,126,126, 62,178,179,179,113,243,230, 77,164,164,164,144,164,164, -164,171,130, 32,252,228, 76, 26, 91,181,106,181,106,224,192,129,163, 90,180,104, 33, 39,132,128,231,121, 24, 12,134,182, 39, 79, -158, 28,124,244,232,209,238,215,175, 95,119,186, 92,102,102,102,254,244,217,103,159,185,244,236,217,179,153, 92, 46,103,235, 34, -157, 21,110,104,254, 58,157, 14,123,247,238,133,155,155, 27,106,234,173,235, 8, 86, 65, 10,168,231, 81, 31,166,203, 11,224,239, - 22, 2,171, 32, 5,208, 18,252, 64, 69,177,152, 74, 76,208,255, 8, 33, 79,222,169, 25,186, 91,102,170, 86, 17, 44, 27, 55,110, -220, 80,233,245,122,153, 36, 73,172,217,108,150, 75,146, 4,185, 92,206, 59,185,189, 22, 67,135, 14, 61,209,161, 67, 7, 67,105, - 4, 67,112,119,119, 23, 10, 10, 10, 80,106,176, 36,153, 76,102,210,233,116,166,176,176, 48,192,129, 42, 66,163,209, 24,172,209, -104,110,155,110, 48, 24,160,215,235,203, 12,150,193, 96,128,155,155, 27,138,139,139,107, 60,185, 69, 81, 12,213,106,181,200,200, -200, 0, 0,232,243,243, 96, 42, 44,132,181,168, 0,214,252, 60,240, 5,249,224, 11,242,192, 26,141,240, 8, 12,130, 32, 8, 65, - 53,105, 22,155, 69, 37, 7,130,155,219,127,129,239,155,147,171, 92,238,214,145, 3,208, 53,110, 10,163,209,122, 63,198, 40,235, -114,241,226,197,118,205,155, 55,199,144, 33, 67,240,204, 51,207,156,211,104, 52, 62, 75,150, 44,105,145,158,158,126,219,194, 79, - 61,245, 20,222,126,251,109, 12, 29, 58,116,237,217,179,103,151, 86,167,217,179,103, 79,244,234,213,171,222, 51,207, 60,147,164, -211,233, 98, 86,174, 92,217,113,230,204,153, 89, 6,131, 33, 61, 38, 38,166, 85, 90, 90,154, 54, 60, 60,252, 96,100,100, 36,187, - 99,199,142,144, 26, 52,239,181,233, 4,207,243,176, 90,173, 48,155,205, 32,132, 56, 28,101, 35,164,124, 64,129,231,249,178, 30, -132, 38,147, 9, 60,207, 51, 91,182,108,198,182,109,219,216,184,184, 75,129,211,166, 77, 71,126,126, 62, 68, 81,164,151,217,123, - 68,187,118,237,250,203,136,180, 98, 68, 3, 94,253,130,175,160,151,177, 68,127,249,219, 15,138,207,121,200,204,230, 98,198,245, -253, 15, 62,240,188,114,229,138,245,179,207, 62,203, 28, 50,100,136,250,245,215, 95,111,190, 99,199,142,238, 65, 65, 65,223,166, -166,166,230, 87, 21,248,236,220,185,243, 9, 79, 79,207, 70,235,215,175,207,202,200,200,168,199,243,188,214, 98,177, 88, 45, 22, -203, 21,171,213,122,212, 98,177,236,189,113,227, 70,140, 51,105,213,233,116,173, 71,142, 28, 41,207,203,203,131, 76, 38,131,213, -106, 69,118,118, 54,162,162,162,184,125,251,246,181,168, 77,254,227,226,226, 22,228,231,231, 31,220,182,109, 91, 95, 23, 23,151, -118, 74,165,178,129, 40,138,162,201,100,202, 50,153, 76,103,107,147,206, 10, 55,180,140,216,216, 88,127, 87, 87, 87,164,167,167, -131, 97,152,140, 59, 61,102, 10, 57,155,154,244,215,214, 32,127,183,134,136,143, 63, 1,133,156, 77,165, 35, 6, 61,216, 17, 44, -187,182, 82, 3,107, 48, 73,198,105,211,166,189,199, 48,204,246,105,211,166,189, 87, 77, 4, 75,180, 95,206,110,249, 58,123,168, -175,246, 38, 94, 84, 84, 36,251,223,255,254, 87, 63, 37, 37, 69,215,160, 65, 3, 67,100,100,100, 62,195, 48, 68, 20, 69,246,214, -173, 91, 46,105,105,105,106, 79, 79, 79,115, 80, 80, 80,129,131,219,187,252,214, 91,111,245,156, 49, 99, 70,204,227,143, 63,158, - 3, 0,121,121,121,200,206,206,182,245,210, 66, 70, 70, 6,123,250,244,233,122,187,118,237,106, 11, 7,122,240,104, 52,154,148, -162,162,162,166, 30, 30, 30,101, 55, 52,155,169,178,255,182, 90,173, 40, 42, 42,130,139,139, 75,141, 39, 55,203,178,233,233,233, -233,141,141, 70, 3,146, 19, 19, 97, 46, 42,128,181,176, 0,124, 97, 62,248,252,124,136,249,183,192,234,139,160,211,104, 80,116, - 43, 23, 28,199,221,168, 73,211, 69,197, 89,120, 65, 84,122,247, 27, 12, 48, 85,223,159, 61, 58,117, 3,137,104, 13,141,230, 87, -254, 30, 23,106, 25,128,129,182, 49,169, 52, 26, 13, 62,253,244, 83,196,196,196, 72,213, 85, 3, 43,149, 74,176, 44, 43, 58,162, -169, 82,169, 52, 51,102,204,208,156, 61,123, 86,173, 84, 42,161,211,233,180,103,207,158,109,245,231,159,127,178, 6,131,129,107, -220,184,241,208,128,128, 0,125, 13,154,119,213, 72, 85, 54, 77,175,215,151,181,155,186,117,235,150, 76,173, 86,135,119,239,222, -253,184,197, 98,249, 73, 16,132,213,177,177,177,133, 85, 62,105, 91,111,239, 12, 42, 73, 18, 4, 65,128, 32, 8,144,201,100,210, -150, 45, 91,241,213,210, 69,248,121,211,175,164,103,207,158,204,142, 29, 59, 32, 73, 82, 26,189,206,222, 27, 36, 73,154,127, 96, -234,211,106,136,162,222,124,112, 67,241,238, 92, 89,241,183, 23, 14,156,206,229,205,170, 38, 77,194, 34,220, 92,221,217,239,215, -125,123, 43, 51,235,234,229,175,190, 74, 11,154, 61,123,182, 71, 88, 88,152,123, 66, 66, 66, 0,128,252, 42,140, 80,232,203, 47, -191,252,234,173, 91,183,228, 43, 87,174, 92,147,158,158,126, 24,192,213,138, 65, 51,148,180, 51,148, 3,240, 69, 73, 15,218, 61, - 0,214, 86, 99, 86, 36,134, 97,112,240,224,193,219,122,251, 73,146, 84,107,135,145,153,153,153,215,169, 83,167,214,151, 47, 95, -222,146,159,159,191,190,146,235,236,224,200,200,200,103, 79,157, 58,245, 33,128, 43, 78, 70,176,222,137,139,139,251, 92,146,164, - 16,150,101,147, 9, 33, 83,238,244,152, 89,172,210,235, 91,119,110, 90,105,225,197, 96,165,156, 75,177, 88,165, 55,104, 73,126, -224,177,181,145,130,189,113,170,196, 24,253, 57,103,206, 28,205,220,185,115, 49,103,206,156,139,149, 69,176,108, 70,107,206,156, - 57, 23,109,203,217, 45,127,184,174, 13, 22, 83,201,141, 69, 55,125,250,244,174,109,219,182,205,120,244,209, 71, 51, 27, 54,108, -104,176,205,211,106,181, 22, 15, 15, 15,139,217,108, 86,101,100,100,120,255,245,215, 95, 13, 37, 73,210, 56,176,189,253, 30, 30, - 30,245, 78,159, 62, 93,127,227,198,141, 77, 98, 99, 99, 67,158,127,254,249,158,102,179, 25, 22,139, 5,215,174, 93, 11, 89,177, - 98,133,164, 80, 40,242, 25,134,249, 31, 74,122,195, 84, 11,207,243,199, 47, 95,190, 28,222,169, 83, 39,134,231,249,114,166,202, -254,183, 82,169, 68,122,122, 58,145, 36,233,164, 3,233, 60,113,250,212,169,198, 45,155, 55,135,185, 32, 15,150,194,124, 88, 11, -242, 33, 20,228, 67, 42,204, 7,171, 47, 66,253,122,114,104, 52, 46,184,156,145,137,210,180, 86,139, 92, 48, 38,165, 23, 20, 54, -109, 28,253, 5, 14,132,185,129,240,214,178,106, 65, 0,101,213,133,143,252,149,141, 35,127, 30,135, 76, 52,167,223,207,146,108, -177, 88,164, 97,195,134,157, 98, 89,182,206,222, 55,197,243,188, 52,126,252,248, 50,205,212,212,212, 91,169,169,169,106,163,209, -200,234,116, 58,253,253, 62,123,121,158,175,212, 32, 89, 44, 22, 24,141, 70,100,102,102, 42,247,236,217,211,253,248,241,227,138, - 75,151, 46,225,248,241,227,109,182,108,217, 50,189, 89,179,102,173,227,227,227,111, 56, 98,218, 36, 73,130,237, 62, 72, 8, 1, - 33,132, 3,128,173,191,109, 71,191,126,253,152,162,162, 34,108,219,182,173, 78,170, 81, 40, 14, 83, 12, 65,212, 88, 14,109, 40, -126, 55, 81, 89,120,209, 32,251, 36, 38, 38,102,247,128, 1, 3,142,248,251,134,185, 1,128, 74,161,243,230,136,171,206,219,219, - 91, 5, 0,254,254,254,237,120,158, 95,154,158,158,222,173, 50,193,167,158,122,234, 17, 31, 31,159,182, 59,119,238, 60,155,158, -158,126,164, 18,115,133,166, 77,155,206,188,112,225, 66,127,185, 92,206,216, 93,252, 73, 85, 6,107,216,176, 97, 77,149, 74,101, -253, 29,151,221, 81,168,104, 12,137,205, 7,225, 84, 16, 61, 90, 35, 89,209, 2,190,190,127,213,215,106,181,109,174, 94,189,122, -214,201,252, 7,143, 24, 49,226,247, 85,171, 86, 69,244,235,215, 79,121,236,216,177,219, 12, 86, 68, 68,196,176,125,251,246, 13, - 31, 55,110, 92,235,245,235,215, 15, 2,144,232,168,120,108,108,236, 49,148,188,177,161,206,248,232, 27,236, 5,196,144,210, 64, - 4, 45,193, 15,120,244,170,148,108,187,232, 83, 54, 0,166,194,255,179,165,231,144,133, 16, 98, 91, 54,219, 46,106,101,169, 16, -245,170,108, 94, 54,195, 48,117, 22,220,144, 85,243,228,189,231,218,181,107, 29, 70,140, 24,145,109,111,174,236,171, 71,116, 58, -157,217,205,205, 77,127,234,212, 41,127, 81, 20, 15, 58,176,189,149,251,246,237, 59,176,120,241,226, 13,245,234,213,227, 95,124, -241, 69,118,234,212,169, 71,114,115,115, 73,110,110, 46,150, 44, 89,210,163,123,247,238, 71,146,147,147,197,152,152,152, 87, 0, -244,171, 73,208, 96, 48,124,253,230,155,111, 62,123,228,200, 17,181,197, 98, 65,126,126,254,109,209, 43,158,231,193,113, 28,150, - 46, 93,106, 46, 46, 46, 94,228, 64, 36,227,155,175,191,254,122,248,138,175, 22,171,101,188, 21,134,252, 60,136,165, 31,206, 84, - 12,157,154, 69,227,182,222,200,207, 80, 97,221,206, 99, 70, 65, 16,190,174,209, 96,153,244,147,199,141, 25,189,125,207,254, 3, -168,223,173, 55,114, 14,236,186, 61, 26,228,237, 11,139,213,138, 79,102, 69, 19,198,152, 63,245, 94, 7,112, 0,108, 47, 29, 77, - 29, 0,182,159, 61,123,246,120,155, 54,109,250, 91, 44,150,234,140, 24, 36, 73,226,106,163,169, 82,169,210,154, 54,109,186,191, - 81,163, 70, 67, 1,160,121,243,230,191,177, 44,219,187, 6,205,187,106,176,102,204,152,129,185,115,231, 98,218,180,105,101, 6, -201,246, 0, 96, 54,155, 27,238,218,181, 75,121,236,216, 49,178,110,221,186,156,167,159,126,218,227,249,231,159,247, 88,191,126, -253,127, 0, 76,173, 74,115,202,148, 41, 88,190,124, 57,198,142, 29,123,219,124,142,227,164,244,244, 52,152, 45,102,178,117,235, -214, 12,153, 76,230,249,229,151, 95,106, 38, 77,154,196,208,107,237,189, 65, 20,197,247,187, 45,216, 50, 17,208,240,130, 32, 44, - 58,127, 62,230, 96,105,212,198,103,193,130, 5, 74, 0,248, 98,222, 23,114, 66,136,220, 54, 48,236,199, 31,127,172, 30, 51,102, -140, 79, 85,154,191,252,242, 75,222,199, 31,127, 92,255,245,215, 95,239,119,224,192, 1,245,169, 83,167,118,161,228, 45, 5, 57, -165,142,192, 43, 33, 33,225,152,183,183,183,223,166, 77,155, 26,247,237,219,215,165, 70, 23, 88, 92,252,237,178,101,203, 66,231, - 31,118,197,142,226,161, 72, 37,207,128,212, 35,168,167, 40, 66,115, 93, 10,122,250,165,250,175, 95,191,126, 37,128,118, 78,100, -191,197,211, 79, 63,189,121,213,170, 85, 13, 71,143, 30,157,118,236,216,177, 84, 0, 51, 43, 46, 20, 19, 19,147,251,242,203, 47, - 39,175, 89,179,166,177, 36, 73,187, 55,108,216,208, 15,192,101, 90,122, 40,247,204,121, 57, 16,200,168,205,178,119, 19, 89, 53, - 23,157,215,242,242,242, 34,167, 77,155,246,185,191,191,127,112,116,116,244,245,230,205,155, 23,219,230,231,230,230,234, 14, 29, - 58, 20, 86, 88, 88, 88, 36, 8,194, 40, 0,231, 42,145,105,137,242, 99,101, 36, 75,146,244,121,155, 54,109,158,253,241,199, 31, - 15,185,186,186, 22,158, 56,113,194,205,205,205,173,224,210,165, 75, 46, 28,199, 25,174, 94,189,138,189,123,247,246, 0,240, 85, - 21, 79, 73,229, 52, 51, 51, 51,207, 40,149,202, 47, 38, 77,154, 52,233,195, 15, 63, 84, 75,146, 4,163,209,136,162,162, 34,152, - 76,166,178,198,201, 27, 55,110, 52,155,205,230, 21, 25, 25, 25, 39, 28,208, 60,206,113,220,242, 69, 95, 46, 26,255,198,179, 35, -148, 36, 63, 23, 5,153, 70, 48,166, 98,232,212, 74,180,232, 29,128,226, 92, 6,171, 14,157,182,220,178, 88, 55,101,100,100, 28, -172, 73,243, 88,170,254,247, 78,202,196,189, 31,207,138,126,108,250,234, 95, 33, 73, 18,254,122,243, 69,228, 29,222, 11,109,243, - 86,120,228,175,108, 88, 44, 22, 76,155, 50, 9,156, 33,235,200,201,212,226,159, 29,216,159,117,129,189,230,113,252,253,238, 50, - 1,192,248,115,231,206,141,138,136,136,192,184,113,227,240,212, 83, 79,149, 91,113,243,230,205, 88,182,108, 25,204,102,243, 40, - 0,177, 0,150, 58,163,217,176, 97,195,142, 45, 90,180,224,252,253,253, 13,165,102,163,247,197,139, 23, 59, 68, 68, 68,212,164, - 89,231,121, 39,132,228, 37, 38, 38,186,205,155, 55,143,177, 90,173,152, 57,115, 38,108,198,210, 22,113,122,255,253,247,253, 93, - 93, 93, 49,127,254,124, 75, 78, 78, 78,159,220,220,220,125,139, 23, 47,246,218,184,113,227,115,118, 6,203, 94,243,102, 92, 92, -156,235,242,229,203, 89, 65, 16,176, 96,193,130,219, 34, 90,239,188,243, 14,172, 86, 30,114,153,220, 98, 54,153, 91,104, 52,154, - 43,158,158,158, 26, 73,146,200, 61, 60,238, 15,181,230,249,243,231,247,160,164,106,174, 82,108,237,232,140, 70, 35,114,114,114, -144,147,147, 3,119,119,247,138, 79,219,229, 52,141, 70,227,217, 41, 83,166,196,124,243,205, 55,253,254,252,243,207, 17,135, 15, - 31, 30,176,119,239, 94, 83,114,114,178,192,243, 60,241,243,243,147,117,235,214, 77, 61, 96,192, 0, 23,149, 74,197,190,255,254, -251, 57,159,126,250,169, 23,128,220,170, 52, 9, 33,156, 36, 73,248,111,247, 66, 76,233, 37,131,217, 92,242, 64,153,145,145,142, -139, 23, 47,226,248,241,120, 48, 12,195, 58,185, 63, 23,173, 95,191, 62, 76,169, 84, 50, 27, 54,108, 8,222,176, 97,195,132,154, -118,222,218,181,107, 67, 55,108,216,176, 20,192, 99, 40,105,248, 68,203, 18,213,164, 56, 99,176, 74,185, 40, 8, 66,191,148,148, -148,110,163, 71,143,254, 44, 34, 34,194, 44, 8,130,124,247,238,221,205,114,114,114,148,130, 32, 76,129,243,245,149,203, 77, 38, - 19,134, 12, 25, 50,165, 81,163, 70,251, 98, 99, 99, 91, 63,249,228,147,187, 55,111,222,220, 77, 16,132,171, 23, 46, 92, 24, 5, - 96, 81,169,193,114,136,164,164,164,153,123,247,238,101, 78,156, 56,241,238,180,105,211, 84,222,222,222,140,135,135, 7,140, 70, - 35, 82, 83, 83,201,154, 53,107,204,102,179,249, 43,119,119,247, 15, 28,213,244,246,246,158,122,248,244,105,101,194,149,196, 87, - 94,233,255,184, 58, 56,188, 41,116, 12,160,191,149,139, 67,135, 50,177,250,228, 89, 83,142,197,250, 3,199,113, 14,119,165, 15, -188,146,221,111,207,166, 85, 59, 15,238,223,255,216,236,185,159, 51,254, 47,188, 1,151,144,134,144, 66,155,224,208,193,131,248, -244,227,153,132,211,103, 29,230,175,100, 61,126, 31,203,132,205, 1,168, 0,204,147, 36, 73, 86,250, 52,143,183,223,126, 27,246, -175,206, 89,182,108, 25,140, 70, 35, 0,200, 24,134,153, 7,224, 59, 84, 61,162,123,101,154, 65,191,255,254,123,144,189,102, 68, - 68,132,163,154,117, 74, 86, 86,214, 7,175,189,246,218, 92,185, 92,238, 46, 73,210,109,141,211, 1,192,197,197, 5,133,133,133, - 16, 69, 81,168, 87,175, 94, 60,207,243,144,201,100, 85,158, 71,197,197,197, 31,140, 29, 59,246, 19,134, 97,170,140,116,104, 52, -154,228,163, 71,143, 54,121,254,249,231,217, 77,155, 54, 93,123,238,185,231, 84,127,254,249,167,136, 90,142,105, 68,185,251, 16, - 66, 80, 92, 92, 12, 84, 63, 36, 66,202,143, 63,254, 56, 37, 38, 38, 70, 61,118,236,216,118, 47,188,240,130, 91,175, 94,189,116, -246, 11, 24,141, 70,105,219,182,109,197,203,151, 47,207, 61,124,248,240,255, 94,125,245,213,161, 0,170, 12, 23,103,100,100,252, -190,100,201, 18,247,158, 61,123,134,139,162,136,156,156,156,178, 54, 88,105,105,105, 72, 78, 78, 78,150, 36,105,171,147,217,121, -243,249,231,159,223,177,102,205,154,144,209,163, 71,167,109,220,184,113, 43,128,202,218,212,234,134, 13, 27, 54,120,205,154, 53, - 33, 99,198,140, 73, 1, 48, 1,180, 85, 57,133, 82,167, 12,225, 56,238, 79, 0, 67,156,112,184, 85, 17, 2,224, 19,148,212,155, - 22,148, 58,225,217, 0, 26,213, 86,211,223,223,191, 85,120,120,248, 15, 77,155, 54,189, 30, 16, 16,192, 55,109,218, 52, 57, 60, - 60,124, 83,131, 6, 13,162,106,171,233,231,231,215, 53, 40, 40,104,119, 96, 96, 96, 78,112,128, 63, 9, 12, 12,188, 21, 28, 28, -188, 55, 32, 32,160,103,109, 53, 59, 5,233, 6,118,106, 26, 16,223, 46,178,137, 57,188, 81, 67, 18,213,162,137,185,115,179,160, -132,142,193, 46,195,238, 96,127,222,201, 83, 72,101,168, 0, 24, 72, 41, 12,195,240,109,218,180, 89, 30, 21, 21,181, 52, 42, 42, -106,105,235,214,173, 87, 48, 12,195,219,230, 3, 48,224,239, 65, 65,239,165,230,221,200,123,165,116,235,214,109,237,134, 13, 27, -196,217,179,103, 23,116,238,220, 57,119,246,236,217, 5, 27, 54,108, 16,187,117,235,182,182,182,154,173, 91,183, 14,233,222,189, -251,173,181,107,215, 10,151, 47, 95, 38,107,215,174, 21,186,119,239,126,171,194, 72,238,247, 61,239, 15,163,230,240,225,195, 19, -137, 29, 22,139,133,100,103,103,147,132,132, 4,114,228,200, 17,242,248,227,143, 39, 58,160, 41, 3,208, 11,192,130,192,192,192, - 61, 93,187,118,189,220,189,123,247, 43,141, 26, 53,250, 83,161, 80,172, 7,240, 50, 74,222,119,232,135,146, 97, 73,124,171,211, -244,243,243,235, 18, 17, 17, 49,187,109,219,182, 91, 59,119,238,124,172, 93,187,118,199,155, 54,109,186,189, 97,195,134,115,253, -252,252, 30,169,101,222,131, 71,140, 24,113, 81,175,215,139, 61,122,244,216, 86,217, 74, 81, 81, 81,107,244,122,189,248,194, 11, - 47, 36,160,228, 61,178,180, 44, 81,205,187,161, 73,121, 88, 11,138, 51,163, 56, 63, 32,121, 31, 95,106,114, 12, 40,255,218,154, -154,230,223,107,205,123,178, 63,155, 55,111,238,249,216, 99,143,189,185,117,235,214,119,175, 94,189,250,238,214,173, 91,223,237, -219,183,239,155,205,155, 55,247,188,147,116,182,110,221, 58,164, 91,183,110, 95,117,237,218, 53,173, 91,183,110, 95, 85, 48, 87, -244, 34,126,159, 52, 7, 13, 26,180,115,196,136, 17,137, 35, 71,142,188, 50,114,228,200,196,225,195,135, 39, 14, 29, 58, 52,113, -208,160, 65,137,253,250,245, 75,236,213,171,215,206, 7, 40,239,193, 29, 58,116,248,193,213,213,245,133,202,102, 42, 20,138,193, - 93,186,116,249, 25, 64, 99, 90,150,168, 38, 53, 88,212, 96, 81,205,186,209, 84,161,250,215,213, 84, 54,255,126,104,210,227, 78, - 53,169, 38,213,164,154,212, 96,253, 99,144,209, 93, 64,169, 1,243, 29,206,191, 87,154, 20, 10,133, 66,161,252, 99, 96,170,113, -161,206,244, 14,168,141,147,189, 64, 53,169, 38,213,164,154, 84,147,106, 82,205,135, 78,179,162,246,211, 21,166, 87, 28, 7,114, - 5,181,107,117,115, 96,168, 38,213,164,154, 84,147,106, 82, 77,170,249,240,105, 86,198,232,127,171, 1,162, 47,148,165, 80, 40, - 20, 10,133, 66,161, 6,139, 66,161, 80, 40, 20, 10,229,159,141, 67,141,220, 21, 10, 69, 36, 33,228, 85,134, 97, 26, 48, 12,115, -131, 16,242,157,213,106,189,248,176,237, 44,133, 66, 17,201, 48,204,171,132,144, 6,132,144, 27, 12,195,220,215,253, 64, 0,102, -102,116,201,104,210, 31, 69,131, 48,213, 15,124, 72,161, 80, 40, 20, 10,229,126, 27,172,144,192,192, 17, 44,199, 44,182,242,162, - 39, 47, 8,236,146, 37, 75,216, 65,131, 6, 97,219,182,109,152,240,246,219, 19, 88,142,149, 20, 50, 89, 30,145,132, 9,201,105, -153, 63, 58,178,177,161, 67,135,102,241, 60, 95,229,168,214, 28,199,221,220,178,101,139,239,157,102,202, 63,234,153, 44,222,106, -173,114, 59, 50,153,252,102,230,217,159, 29,218, 78, 96,160,223, 8,142, 97, 23,243,162,228, 41,138, 18,251,213, 87, 95,149,237, -135,183,222,122,107,130, 92, 38,147, 20,114, 46, 79, 18,201,132,228,180,180, 31,239,213,129,179, 55, 87, 0, 48, 51, 26, 12,137, - 6,168,201,162, 80, 40, 20, 10,229, 31,108,176, 24, 22, 75, 55,124, 51,207, 51,247, 86, 30, 54,110,222,141,136,136, 8, 92,186, -116, 9, 17, 17, 17,232,214,177, 53,251, 68,151, 54, 44,199,194,123,198, 87,235,150, 2,112,200, 88,240, 60,239,243,219,111,191, -129, 97, 24,136,162, 8, 65, 16, 32, 8, 2,120,158, 71, 81, 81, 17, 38, 78,156,232, 83, 23,153,226,173, 86,159,171,255,251, 21, -114,142, 1, 47, 18,240, 2, 1, 47, 72,176,138, 4,133, 6, 1,189,159,124,222,225,237,176, 96,151,126,183,120,158,103,126, 65, - 1,126,221,177,167,220,126,232,221,181, 3,251,204,128, 71, 89,173, 70,225, 61,122,234,103, 14,239,135,186,192,222, 92,149,155, - 22, 77, 13, 22,133, 66,161, 80, 40,255, 88,131,101,225, 69, 79,223,122,238, 88,253,221,119,152, 50,237, 99, 52,107,214, 12,132, - 16, 48, 12,131,247, 62,156,133,133, 31, 79,195,200,254, 61,192, 11,146,103, 53,250,183,117,213,100, 24, 6,215,175, 95,135,209, -104, 44,247,137,140,140,116, 52,205, 14,117,255,148,115, 12,126,143, 45,130,149,151, 96, 21, 74, 63,188,132, 94, 45, 93,157,210, -228, 69,201,211,195, 77,135,149,223, 44,195,148, 89,243,202,237,135,169,239,125,136,175,231,126,128,119,198,189, 4, 11, 47,122, -214, 38,157, 78, 66, 53,169, 38,213,164,154, 84,147,106, 62,168,154, 15,164,193,234, 9,224,160,205, 3,149,153, 11,139, 9, 45, -130,234, 99,217,252, 79, 64,192, 66, 34, 4, 32, 0,145,120, 52,244,210,194,104, 48, 56,189, 65, 73,146, 96,181, 90,193,243, 60, - 86,172, 88, 1,189, 94, 15, 73,146, 16, 17, 17, 1, 0,136,138,138,178,143,192,164,196,198,198,134,212,164,233,221,114, 72, 50, - 8,130,237,167,125, 52,239, 91, 28,139,189, 10, 66, 0,149, 70,139,225, 47,140,129, 40, 17, 88,121,231,223, 79,106, 50, 24,224, -167,147, 99,225,167, 31,130,149, 43,192,130, 1,203, 50, 96, 25, 9,205, 2, 61, 97, 46,121, 57,241, 61,229,163,104,144,138, 81, -172,143,162, 65,162,105,153,166, 80, 40, 20,202,191,147, 74,189,200,191,221, 96, 29,172, 44, 51, 22,147, 17,129,158, 10, 52,208, -185, 67, 16, 68, 92,180,250,161,200, 96,130,213,202, 35,217,106,197,149, 51,153,120,228,145, 71,192,243,188,104,181, 90,161, 80, - 40, 10,182,108,217, 82,175, 38,131,197,243, 60,172, 86, 43,138,139,139,177,126,253,122,200,100, 50, 72, 82,137,241, 41,121,199, -111,201,119,215,174, 93,131, 29,202, 5, 65,240,149, 83,191,192, 85,205, 65,144, 8, 4,129,128, 23, 1, 81, 34, 48, 88, 36, 12, -123,237, 3, 8,146, 4, 65,146, 96,113,192, 96,217, 27, 54, 1,192,144,233, 27, 1,232,202,230,187,169, 8,166,116,101,161, 80, -170,160, 84,112, 48, 27, 13,247,252,192, 49, 0, 33,209,127, 87, 21,210, 70,238, 20, 10,133, 66,249,151,115,240, 65, 48, 86, 21, - 13,150,189,123, 60,244,183,193, 50, 64,224, 69,240,130, 8,129, 23, 80,160, 55,226,243,207, 63,135, 74,165, 2,195, 48,101,102, - 73,146, 36,150,231,121, 12, 24, 48,192,179,166, 13,138,162, 8,171,213, 10,171,213, 10, 66, 8, 56,142, 67,167, 78,157,110, 91, -238,196,137, 19, 78,101,196, 85,205,161,225, 99,211,111,155,126,242,151, 79, 64, 8,129, 40,150,124, 28, 49, 88, 53, 25,182,182, - 61,159,129,217,194,131, 16, 0,164, 36,194,117, 63, 96, 0, 98,107,115, 21, 77, 79, 76, 10,133, 66,161, 60, 24,148,243, 34, 15, -138,193, 42,231, 30,205, 70, 35,120, 94,128, 32,136,224,249, 18, 99,164,209,104,208,163, 71,143, 18, 31, 98, 23,109,218,189,123, - 55,172, 86,107,141, 27,180, 53,106, 47, 53,102, 32,132, 96,227,198,141,144,203,229,101, 31,133, 66,225,116, 70, 4,145, 96,250, -212,255, 66, 33, 99, 33,151,177,101,223, 34, 33, 32,164,196, 28,137, 18,129,153,119, 44,200, 83,157, 97, 3, 0,139,217, 10, 16, - 2, 2, 2, 99,113, 49, 61, 29, 40, 20, 10,133, 66,169, 27, 30,136, 72,150,205, 96, 61,138, 74,170,151, 44,198,226,210,232,149, - 8, 94, 16,202, 12,212,252,249,243, 33,147,201,160, 84, 42, 33,147,201,202, 12,145, 35, 6,203,100, 50, 33, 44, 44, 12, 22,139, - 5, 17, 17, 17, 32,132,224,217,103,159,189,109,185, 83,167, 78, 57,149, 17, 94, 36,152,243,217,130,219,166, 31,253,233, 99,180, -106,222, 16, 29,155,184,192,100,149, 80,104, 16,238,216,176, 1, 40,137, 96, 1, 32, 4, 48, 22, 27,232,233, 64,161, 80, 40, 20, -202,157, 81,169, 23,249,183, 27,172, 67,149,185, 69,147,193, 0,129, 23,202, 76,150,197, 98,129, 36, 73,120,251,237,183,111, 19, -218,183,111, 31, 44, 22, 75,245, 27,147,201,110,190,241,198, 27,229,134, 72, 32,132,224,151, 95,126,129, 74,165, 42, 23,197, 98, - 24,231,204, 43, 47, 18, 68,191, 63, 9, 74, 57, 87,206, 16, 73, 18,176,237,247, 63,176,237,247, 63,202,150,229, 56,249,205, 59, - 49,108, 0, 96,177,148, 70,176, 8, 65,177,190,136,158, 22, 20, 10,133, 66,161,220, 25,149,122,145,127,187,193,170, 20,147,177, - 24,188, 93, 27, 44,171,213, 10, 65, 16,176, 98,197,138,114,213,121,114,185, 28, 44,203,214, 24,193,218,188,121,115,185,193, 61, -163,162,162, 8, 33, 4,195,135, 15, 47,171,110,124,229,149, 87, 48,122,244,104,167, 13,150, 32, 18,204,156, 61,191, 76,103,192, - 99,221, 49,164,127, 79, 72,165, 94, 56,251,226, 22,167, 4,171, 51,108, 0, 96, 49,151,180,193, 34, 0, 12, 69,180,138,144, 66, -161, 80, 40, 20,138, 3, 6, 75, 46, 99, 11,174, 36,223,112,247,114, 81, 67,144,204, 16,164,146,158,127,162, 40, 98,244,232,191, - 95,110,253,220,115,207, 97,212,168, 81, 85, 25,172,150,168, 97,172, 12, 73,146,112,244,232, 81, 48, 12, 3,150,101,203, 62,213, - 80,169,102,177, 89,194,177, 31,103, 65, 34, 4, 18, 1, 36, 82,226,167, 44,130, 67,209,198,219, 52,107, 50,108, 42,157, 7, 56, -150,128, 97,128, 43,105, 89,144,113,108,129,179,121,175, 5, 84,147,106, 82, 77,170, 73, 53,169,230,131,170,249,112, 24, 44, 34, -146, 9,203,183,159, 88,204,139,146,187,109, 90,139, 22, 45, 96,181, 90,177,107,215,174, 50,227,193,113, 92, 89,149,158, 35,109, -176, 42,144,210,163, 71,143,234,134, 98, 72,113, 72,133, 65, 74,251, 94, 35,130,171,155,239,108,194,106, 50,108,171, 14,255,253, - 10, 66, 25,203, 22,128,144, 9,180, 56, 81, 40, 20, 10,133, 66,169,214, 96,165,102,100,172, 3,176,206,126, 90,155, 54,109,244, -131, 7, 15,214, 8,130, 0,139,197, 2,171,213, 10,139,197, 82,246, 81,169, 84, 78,141,184,233,200, 32,162,142,144,125, 97, 75, - 72,157,238, 21, 7, 12, 91,102,102,102, 8, 45, 62, 20, 10,133, 66,161, 80,156, 50, 88,149, 97, 48, 24, 60, 24,134,145,101,100, -100,220, 54,239,198,141, 27, 64,201,184,156,255,122,234,220,176, 81, 40, 20, 10,133, 66,161, 6,171, 42, 14, 29, 58, 36, 60, 40, - 38,138, 66,161, 80, 40, 20, 10,229,110,193,210, 93, 64,161, 80, 40, 20, 10,133, 82,183, 48, 40,233, 9, 80, 25,206,244, 14,104, - 89,139,109, 95,160,154, 84,147,106, 82, 77,170, 73, 53,169,230, 67,167, 89,147,182,253,250,163, 1,172,160,118,173,110, 14, 12, -213,164,154, 84,147,106, 82, 77,170, 73, 53, 31, 62,205,202, 24,253,111, 53, 64,180,138,208, 25,162, 70,203,233, 78,160, 80, 40, - 20, 10,133, 82, 19,178,123,181,161,232,232,104,246, 14,215,151,238,219, 94, 10, 24,214,152,147,225,243,214,193, 1,253,207,228, - 14,221, 65, 68,102, 42,210,127,189, 66,139, 79,237,104,227, 2, 47,158,145, 15,244,212,169,135, 4,187,202, 58, 39,230, 24,254, - 52, 88,165,109,132,225,183,196, 21, 33,143,238, 33, 10,133, 82,233,165, 56, 32,192,243,216,177, 99,193, 93,187,118, 77, 73, 79, - 79,207,115,116, 94, 85,248,134,181, 27,229,170,211,190,105, 50,155, 27,186,187,185,221,188,149,155,187, 60,243,218,153, 37,182, -249, 13, 27, 54,116,219,176, 97,131,255,115,207, 61,151,113,253,250,245, 66,122, 4, 40,247,212, 96,181,111,223,190,161, 36, 73, - 47, 1,120,129, 16,114,246,204,153, 51, 79,215, 70,103,223,190,125, 1, 60,207,119, 16, 4, 33, 10, 64,148, 70,171,107, 99, 54, -155,110, 50, 32, 47,247,239,223,255,140,179,122, 81, 81, 81,191, 3, 24, 80,217, 60,134, 97,102,198,196,196, 68, 59,170,197,201, -240,249, 31, 91, 86, 13,201, 52,104,112, 40, 38,249,169,239,190,152, 6, 0, 67,255,137, 7,212,207,207, 79, 3,224,101,150,101, -251,168, 84,170,112,147,201,148, 4,224, 60,195, 48, 75,211,211,211, 51,106, 41,203, 70,234,228,175,105, 53,218,126,126,174,202, -168,244,188,194,116,147, 85, 58, 34, 49,214,121,206, 26,162, 70,128,210,167,158,199,161,119,135,117,139,104,221,162, 9,164,228, -179, 48,229,103, 15,142, 73, 55, 12,254,230,228,205,255, 90,138, 12, 81, 87, 1,139, 35, 90,129,129,129,126,162, 40,202, 50, 51, - 51, 83,109, 23, 67,179,217,220, 30, 64, 4,128,191, 84, 42,213,233, 59,189, 40,254, 91, 52, 3, 2, 2,252, 37, 73,122,221,215, -215,247,201,172,172,172,223, 89,150, 93,117, 7,199,155,242,144, 16,210,233,197, 5, 12,203,120, 57,179, 14,145, 72, 78,242,201, -117,255,189,151,233, 36,164,100,164,231,128,128,128, 87,130,131,131,155, 16, 66, 18, 8, 33, 95, 86, 56, 7,110,155,199, 48, 76, -149,175,242, 8,105,209,101,243, 27, 47, 61,215,123,226,184, 87,116, 90,173, 6, 6,163,169,254,210,149,223,127,177,116,229,250, - 1, 73,151,142,245, 7, 0,127,127,255,161, 65, 65, 65,161, 22,139,229, 58, 33,228,251,154, 52, 41,148, 59, 54, 88,205,155, 55, -119, 81, 42,149,195, 89,150,125,185, 85, 84,231,110,131,159,121,153,225, 25, 45, 62,157,244,156,211, 67, 56,196,198,198,170, 50, - 51, 51, 63,110,216,172,221,127, 30,237, 59,132,109, 30,209, 12, 94,245, 61, 33,177, 74,172,217,117,185,254,193,111, 94, 89, 2, -160, 75, 45,146, 57,224,199, 29, 39,145,153, 47,130, 97, 0,134, 1, 88, 6,208,155, 36,188,247,106,183,143, 0, 56,102,176,162, - 70,203, 35, 26,248,244,191,124, 75,141, 93, 23,120, 0,254,208,122,250,246, 55,120,143,150, 35,118, 5,255, 79, 58,152, 13, 26, - 52,136,170, 87,175,222,215,175,188,242,138,103,120,120,184,159, 82,169,212,154, 76,166, 38,201,201,201, 13, 23, 46, 92,248,120, -131, 6, 13,230,222,184,113,227, 87,103, 52,155,185,171,130, 67, 27,248,254, 56,117,220, 75, 29,195,195,130, 32,179, 20,131,152, -245, 65,201,215,175,118,153,189,234,215, 55, 24,198,244,236,165, 66, 97,175,163,122,106, 87,197,251,239,141,126, 54,162,177, 43, -129,229,210, 81,200, 56, 2,181,171, 39, 58, 6,115, 96, 64,154, 71,239,207,120, 15, 69,214,143, 28, 48,146,179, 68, 81,124, 15, - 0,211,160, 65,131, 31,229,114,249,169,246,237,219, 55, 27, 57,114, 36,211,170, 85, 43,156, 57,115,166,249,182,109,219,158, 22, - 4, 33,222, 98,177,156,172, 95,191,254,217,184,184, 56,171,131,229, 91,145,155,155,219, 70,169, 84,118,250, 39,107,250,249,249, -105, 44, 22,203, 75,129,129,129,163, 31,121,228,145, 86,131, 6, 13, 98,154, 54,109,138,248,248,248,118, 59,119,238,252,232,200, -145, 35,231,211,210,210, 86, 40,149,202,239, 51, 51, 51, 29, 26, 4,120,120, 31,196,255,188, 15,205,106, 59,191, 2, 30, 0,212, - 0, 50, 29, 9, 38, 0,208, 2,184,118, 31, 52,239, 70,164, 37,142, 97,152,122,165, 55,100,219,131, 93,185,223,246,223,162, 40, - 22,167,164,164, 52,170, 78, 51, 40, 40,168,185, 36, 73,156,253, 52,185,188,234, 86, 11,130, 32, 72,105,105,105,151,170,211,100, - 88,198,107,197,215, 11,220,101, 44, 32,146,210, 15, 79, 32, 18, 2, 73, 2, 68, 9, 16, 37, 9,130, 72, 32, 4,150,212,198, 0, - 0, 32, 0, 73, 68, 65, 84, 17, 9,188, 64, 48,243,163,247,238,231,101,238, 73, 0, 61, 0, 28, 6,176,168,154,121, 95, 86, 39, -226,221,168,205,139, 47, 61, 59,188,215,123,147,222,212, 17, 66, 64, 8,129, 70,173,194,228,137, 99,149, 38,147,165,171, 95,147, -246,163, 51, 19, 79,175,100, 24,166, 23,128,246, 0, 78, 3,248,158, 90, 6,202,221, 50, 88, 76,187,118,237,122, 16, 66, 94,110, -224, 31, 56,124,216,243, 99, 52,161, 77, 90, 66, 47,185,225,122,142,132,216, 3, 27, 0, 96,147, 51, 27,223,189,123,119,123, 66, -176,122,220,180, 5,205, 90,183,237,128, 11,233, 2,142,165,138, 40,190, 34, 66,198, 25, 33, 73, 0, 33,196, 92,219,204,165,229, - 9, 56, 18,111, 1,199, 2, 44, 11,112, 44, 3,206,217,247,116,199,174,224, 47, 5, 15,221,241,199,169,244,167,160,246,133, 33, - 47, 29,134,188,172,157, 72,219,252,143, 50, 87,254,254,254,189, 67, 67, 67,191,156, 56,113, 98,131,204,204,204,122, 39, 79,158, -132, 74,165,130,167,167,167,204,203,203,171,217,180,105,211, 10,102,207,158, 61,217,199,199,231,204,205,155, 55,147, 28, 50, 5, - 46,138,136,238,173, 34,254,156, 49, 43,218,221, 28,179, 19,249, 63,255, 12,142,149,160,112,209,193, 79,163,197,162, 39, 67,235, - 77,219,157,250, 43,107,181, 68, 92, 48,153,210, 29,209, 12,242,169,215,183,113,120, 83,228,111, 95,138,196,124, 51,142,103,153, - 49,184,103,123, 52,246,212,160,173, 32,162,190, 90,214,187, 38,131, 21, 16, 16,224, 41, 73,210,212,164,164, 36, 86,161, 80, 48, - 13, 27, 54,124,118,197,138, 21,164,121,243,230,101,111,221,238,210,165, 11,186,116,233,194,232,245,250,136, 99,199,142, 69,108, -222,188,153, 47, 40, 40,136,201,200,200, 88, 83,117,100, 41, 44,197,108, 54, 5,153,204, 22,211,194,133, 11,127,232,220,185,179, -164, 84, 42,113, 39,154,165,198,119,189, 86,171,213,206,152, 49, 35,167, 67,135, 14,164, 46, 52, 67, 67, 67,255,232,216,177, 99, -175,190,125,251,202,186,118,237, 10,127,127,255,178,121, 94, 94, 94,232,222,189, 59,147,154,154,218,250,200,145, 35, 75,255,248, -227,143,197,103,206,156, 57,144,148,148,212,215,129, 67,212,244, 14,231,151, 11,254, 2,152, 3, 96, 37,128, 99,213, 61,198, 0, -120, 14,192,231,247, 73,179,250,135, 2,181, 58,203,100, 50,249,148,254,190,105, 50,153,124,107,188, 88, 50,140,110,225,194,133, - 62, 10,133, 2, 44,203, 66, 20, 69,136,162, 8, 73,146, 64, 8, 41,251,182,189,114,108,214,172, 89, 98, 77,154,146, 36,177, 11, - 22, 44,144,107, 52, 26, 0, 0,207,243,229,190,109,216,254,207,154, 53,203,161,107,148, 70,201,225,195, 73,163, 59,178,162, 69, - 93,237,246, 57,165,233,181,201, 95,158,186, 15,102,213, 51, 32, 32,224, 37, 0,131, 0,216,206,241, 86, 1, 1, 1,251, 43, 44, -218,170,244,187, 56, 32, 32,224, 0,128,223, 3, 2, 2, 86, 87, 86, 93,232,238,226, 58,246,221,183, 95,119, 37,132, 96,230,207, - 57,152,249, 75, 14, 62, 28, 90, 15,147, 7,104,241,234, 11, 79,187,172, 94,247,211,152,210, 50,102, 35, 1, 37,189,238,105,244, -138, 82,247, 6,171,109,219,182, 59,250, 15, 29,213,175,115,143,190, 16, 20, 62,136,191,201, 32,245, 58,129,140, 19,192, 66,194, -181,255,109, 33, 44,203, 86,116,248, 85,118,213,220,177, 99,199,127,131, 27,183,153,251, 94,244, 28,238, 66,150, 18,171,143, 24, - 33,154, 11, 96,204,185,130,226,155,151, 81,116, 35, 14,249,233, 23,206,179, 44, 27,237,168,230,237, 97,101, 64, 34, 4, 12, 97, - 0, 9, 37,231, 6, 91,169,195,170, 86,147,136,204,212,152, 63, 86, 63,213,118,200,116, 92, 62,178, 14, 32,236, 84, 7, 54,127, - 55, 94,130,121,161,138, 72,198,227, 33, 33, 33,243,198,140, 25, 19,120,238,220, 57, 55,131,193, 80,124,234,212,169, 67,153,153, -153,190, 94, 94, 94,169, 35, 71,142,124,196,199,199,199,167, 71,143, 30,218,221,187,119,191, 15,224,245,154, 52, 35,181,138,200, -174, 29, 90, 30,255,100,222,124,151,156, 95, 23,195,114,253, 28,142,103,153,112, 46,219, 72, 2,220, 10,152, 17, 45, 61,225,162, -148, 97,116, 39, 31,221,127,182, 37,125, 6, 19,158,119, 36,239, 13, 3,124, 27,241, 70, 35, 76, 70, 43,118, 92, 46, 48, 30,207, - 43,240, 97, 93,211,178, 39, 63,213, 94,205,229,100,160,129,171,188, 9,110, 58,183, 63, 25,134,129, 86,171,173,116,158,187,187, - 59,186,116,233,130, 70,141, 26,201,159,123,238,185,206, 0,214, 84,165,105,181, 90,253,210,211, 51, 16,222, 52, 92,213,167, 79, - 31,134,227, 56, 88, 44,150, 59,210, 4, 0, 23, 23,151, 65, 81, 81, 81,178,181,107,215,230, 39, 37, 37, 93, 28, 54,108, 88,186, - 86,171, 45,119, 67,213,106,181, 8, 14, 14,198,248,241,227,229,111,188,241, 70,141,154,190,190,190,143,175, 91,183, 14, 12,195, -148,221,188, 43, 18, 18, 18,130, 6, 13, 26, 96,192,128, 1,178,167,159,126,250,241,164,164,164, 42,247,231,240, 62,136,183,153, -167,225,125,170,191,137,148,206, 79,168, 36,146, 85, 49,157,185, 0,150, 3,248, 13,192,240, 42, 12, 81, 87, 0, 63, 3,232, 15, - 84,122,228,171,212, 84, 40, 20, 10,171,213,234, 89,137,241,113, 86,179,236, 84,143,137,137, 65,187,118,237, 80,241,219,102,132, - 24,134,241,113,244,220,228, 56, 14,203,150, 45, 3,203,178, 80, 40, 20,144,203,229, 80, 40, 20,183,125,218,182,109,235,240,249, - 46,151,203,177,108,217, 50,136,162,200, 38, 37, 37,189, 44,138,226, 16,147,201,228,163,209,104,178, 21, 10,197,246,158, 61,123, -126,167, 82,169, 4,103, 52, 89, 14, 96, 69,139,122,239,238,173, 46, 85,173,100, 54,155, 49,112,200, 8,176, 12,123,207,175,117, -199,142, 29, 11, 14, 14, 14,110, 90, 26,157, 2,128,195,233,233,233, 61,236,254,219,115, 56, 61, 61,221,214, 52, 36, 49, 37, 37, - 37, 56, 36, 36, 36,175,162,166,197, 98,109,168,211,185,128, 16,130,153,191,228,192,180, 54, 12,234, 81,215,240,106, 39, 51, 92, - 93, 93, 33, 8, 66,179,128,128,128,239, 1,132,151, 70,175, 6, 7, 4, 4, 52, 37,132, 28,104,216,176,225,111,118, 85,250,247, -236, 58,255,144,104, 86,115, 63, 39, 29, 0,120,219, 77,178, 0,176, 61,173,230,148, 26,224,250, 21,166,219, 47,103,251,206,182, - 5, 50, 75,215, 35,118,186,217, 12,195,252,175,174, 13, 22,177,115,231, 85,197,120,220,210,140, 30,208, 95,247,130,140,149, 32, -227, 24,200, 56, 0, 96,144,155, 22, 7, 75,113,238,209,152,152,152,235,142,108,116,215,174, 93, 93, 66,155,119,252, 44,250,147, - 47,216,239, 14, 27, 81, 96, 48, 33,231,210, 86,100,158,250, 54, 83, 18,172, 91, 89,150, 61,205,178,108,108, 84,235, 86,241,126, -126,126, 98,109, 51, 39,145,146, 16,119,153,177,146, 0,166, 54, 15, 32,233,191, 94, 65,216,251,229,255,255, 67, 8, 8, 8,232, - 31, 22, 22, 54,103,204,152, 49, 33,177,177,177,174, 69, 69, 69,217,123,247,238,141,183, 90,173,103, 88,150, 93,148,145,145,209, -115,221,186,117,218, 41, 83,166,244,109,218,180,105,211, 63,254,248,195, 80, 99,228, 74, 43,111,253,194,139, 35,142, 15, 25, 61, - 65,125,241,151, 37, 80,197,199, 98,197,165, 60,241,116,150,241,125,147, 94,248, 82,163,149,117,205, 55, 9,123,222,237,238,199, -250,185,202, 17,228,174,120,244, 92,145, 99, 47,250, 86,202, 85, 50, 34, 83,195, 98, 22, 80,108,145, 44,113, 57, 40,126, 92, 16, -173,196,197, 75, 13, 0, 50,142,173,209,244,167,167,167,231,249,249,249,125, 22, 26, 26,250, 1,195, 48,164, 71,143, 30,151,218, -181,107, 87, 44, 73, 18,140, 70, 35,172, 86, 43,228,114, 57,140, 70, 35,146,147,147,113,242,228, 73,184,187,187, 59,181, 95,243, -243,243, 17, 26, 26, 10,173, 86,123,199,154,146, 36, 49, 75,151, 46, 85, 95,188,120, 81,253,219,111,191,213,251,239,127,255, 91, -208,182,109,219,184,167,158,122, 42,181, 94,189,122,214,179,103,207,226,248,241,227,200,203,203, 67,199,142, 29, 29,210,180, 90, -173,144,201,100, 48, 26,141, 80,169, 84,144,201,100, 16, 4, 1,146, 36,149,153, 46,189, 94,143, 91,183,110, 65, 46,151,215,248, - 34,118,155, 89, 26,222, 7,228,167,159,255,188, 89, 82, 55, 84,200,195, 90,192, 67, 40,224,193, 23,240,224,243,249,103, 38,206, -111,253,243, 62, 56, 19, 7, 62, 81,106,174,126,174,196,100,117,181,155,126,214, 89, 77,171,213,122,212,102,124,212,106,181,143, - 45,186,160, 82,169,120,179,217,220,203, 73, 77,196,196,196, 32, 42, 42,138, 43,213, 36,132, 16, 91,123, 27,167, 47, 26, 12,195, -128,227, 56,200,229,114,112, 28,135,168,168, 40, 12, 26, 52, 8, 77,155, 54, 69, 90, 90, 26, 14, 30, 60,136,203,151, 47, 67,161, - 80,148,171, 58,172, 9,185, 92, 14,150,101,217,132,132,132,239,250,244,233,211,120,194,132, 9,202,224,224, 96,196,199,199, 55, - 88,186,116,233,168,125,251,246,245, 28, 58,116,232, 40, 0, 66,117,213,135,229,140, 96,169,105, 50,155,205,136,139,139,171,126, - 89,167,171, 0,238,156,174, 93,187,166, 16, 66, 18, 81, 82,245,215, 42, 61, 61,189, 71, 64, 64,192, 14, 0, 21, 13, 97,113,122, -122,250,128,128,128,128, 2, 0,231, 1, 36, 48, 12,147, 82,153,166,135,187, 91,182, 94, 95,236,235,226,162,197,251, 67, 60,160, - 30,117, 13,111,247,226,192,243, 60,174, 94,189,142,134,161,129,204,166,213, 91,108, 85,131,237, 79,159, 62, 13,148, 84, 21, 38, -165,166,166,250,119,234,212,137, 54,120,191, 75, 62,170, 26, 47,226,205, 48,204,118, 59,195, 53,208,246,127,218,180,105,239,205, -153, 51,231, 34,195, 48,219,237,167,219, 47,103,255, 93,122,142,110, 39,132, 12,156, 62,125,122,228,220,185,115,103,219,150,189, - 47, 17, 44,142,227,134, 93,216,245,229,137, 38, 86, 18,226, 27,249,100,185,253,144,124,118, 23, 36, 73, 90,227,136,206,241,227, -199,213,130,132,239,166,188, 55,139,253,230,128, 17, 89, 55, 50,144,113,232,115, 24,111,198,173,214,104, 52,239,246,233, 55,240, -142, 11,110, 84, 84, 84,164, 71,253, 6, 48, 91, 73,169,193, 42,111,178, 30, 20,252,252,252, 6,133,133,133,205,218,186,117,107, -136,209,104,116, 61,118,236, 88,254,158, 61,123, 18,173, 86,235,170, 27, 55,110,172, 47, 93,108,171, 76, 38,251,152, 16, 2,157, - 78, 39,227, 56, 78, 83, 93,168, 59,210, 77, 30,245,210, 11, 47, 28,253,239,162,149,234,196, 11,103,177,120,211, 14,168,136, 85, -188,148,107,121,234,162, 94, 40, 41,180, 6, 97,127, 64,142, 49,157, 16, 4,201, 89, 6,245,180,242, 6,157, 1,245, 9,192, 84, - 83,154,189,130, 66, 88, 33, 32, 12, 71, 12,102,232,220, 20, 74, 0, 8, 8,111,193,157, 45, 20,112,236,212, 95, 80,171, 61, 21, -142,228, 61, 51, 51,115,134,191,191,127,232,158, 61,123, 88,131,193, 80,124,238,220, 57,212,175, 95, 31, 62, 62, 62,112,115,115, - 67,124,124, 60,246,238,221,139,132,132, 4, 16, 66,170,139, 18, 84, 74, 86, 86, 22, 10, 11, 11,235, 68, 83, 16, 4, 6, 0, 34, - 35, 35, 17, 25, 25,169, 76, 79, 79,247,217,190,125,187,231,236,217,179,111,248,249,249,237, 54, 26,255,110, 30, 85,177,186,167, -186,136, 2, 0,152, 76, 38,152,205,102, 40, 20, 10,168,213,106, 40, 20, 10, 20, 22, 22, 34, 43, 43, 11, 69, 69, 69, 37, 55, 19, - 15,143,178,229, 29, 66,148,128, 19,221, 78,223,238,230, 95,246,169,101, 81, 61, 86,106,162,246, 3,176, 29,223, 44, 91, 64, 12, -213, 87,245, 85,167, 89,110,127,216, 69,153,228,181,209,180, 69,170, 24,134, 41,119,149, 80,171,213, 55,109,145,171,210, 72, 89, -141, 90,182,106, 65,165, 82,137,200,200, 72,188,251,238,187,136,143,143,199,209,163, 71,225,227,227,131, 39,158,120, 2, 50,153, - 12,169,169,169, 96, 89,214, 33,131,165, 80, 40,192,243, 60, 18, 19, 19, 95,238,221,187,119,216,226,197,139,149, 73, 73, 73,136, -143,143,135,155,155, 27, 62,254,248, 99,213,212,169, 83, 3,119,239,222,253, 70,155, 54,109,150, 57,124,109,103, 74,170,255, 6, - 14, 25, 81,137, 17,113,145,175, 93,243,173,210,102,188,216,251, 48,176, 79,122,122,122, 30, 33,100, 1,128,133,165,213,130, 61, - 0,184,164,167,167,247,178,187, 9,147,210,106, 65, 0, 56,159,158,158,222, 27, 0,169,170, 65,122,230,205,204,229,159, 47,250, -102,225,204,247,222, 81, 78, 30,160,197,171,157,204, 16, 69, 17, 28,199, 97,241,242,213,252,229,184, 11,231,218,183,111,191, 29, -192,224,211,167, 79,163,125,251,246, 69, 0, 46, 3,184,174, 84, 42,105,231,145,251,233,192, 42,152, 32,155,113,154, 51,103,206, -192,202, 76, 85, 37, 15, 63,229,166,207,157, 59,119,182,221,255, 58,237,197, 46,171,224, 28,171,123, 10,247,243,240, 14,168, 55, -230,249, 39,176,249,156,237,133,132, 4, 86,179, 1, 55,226, 15, 24, 44, 22,203,207,142,108, 48, 55, 55,247,227, 87,223,157,223, -248,116,138, 12,153,121, 6,100,236,155, 69,172,249, 73,195, 7, 13, 26,180,185, 46, 50, 20, 21, 21, 21,233,233,229,127,240,131, -207, 86, 98,127,162, 5, 18, 1, 24,130,191,141,213, 3, 50,242,151,191,191,127, 19, 15, 15,143, 47,182,108,217,226,163, 84, 42, - 93,207,159, 63, 47, 30, 58,116, 40,131,231,249,165, 55,110,220,216,104,183,220, 11, 45, 91,182,228, 93, 92, 92,144,153,153,105, -226,121, 94, 95,213,177,110,161, 86, 7, 70,181,138, 56,252,223, 69, 43,213, 38,139, 5, 5, 70, 51,188,253,252,196,163,231,227, -158,138,211,139,101, 79, 4,205,117,178, 71,218,135, 7, 4,176, 26, 87,192, 80,136,244, 66, 75,134, 35,230, 10, 0, 92, 92, 61, -216,192,246,143,162,253,196,175,112, 41,250,125, 2,228,194,195,215,159,237, 53,254, 83,232,218, 13,194,178, 9, 47, 75,127, 71, -112,107,196, 24, 30, 30,142, 51,103,206,216,202, 22,114,115,115, 17, 22, 22,134,197,139, 23,151, 91,208,145,155, 98, 21,229,245, -142, 53, 37, 73, 98, 42, 68, 29, 49,110,220, 56,249,206,157, 59, 93,236,205,149, 51,154, 22,139,165,204, 80, 16, 66, 96,177, 88, - 96,177, 88,224,226,226,130,196,196,196,242,126, 73, 20, 43,173,234,172, 58,193, 5,149,135,187,248,220, 59,105,119,120, 12,128, -194,206, 4,249, 2,232, 86, 75,115,117,155,241,169, 11, 98, 98, 98, 42,189, 14,218,170, 30, 99, 98, 98, 72,187,118,237,124, 29, -213, 35,132, 64,169, 84, 98,240,224,193,248,235,175,191,144,145,145, 1, 87, 87, 87,152,205,102,152,205,102, 68, 69, 69, 33, 43, - 43,203,225,232,149,157,110,255,183,223,126, 91,125,253,250,117,220,186,117, 11,106,181, 26,130, 32, 64, 20, 69,188,241,198, 27, -234,241,227,199,247, 3,224,184,193,226, 24, 60,246,242,103,149,182,173,218,255,237,127,122,170, 84,170,178,234, 22,142,253, 71, - 93, 64,237, 31, 20,157,218,137,217,215, 47, 44, 91,183,241,183,199, 5,171,181,215,107, 47,141,112,213,185,104,113,245, 90, 18, -150,173, 90,203,239, 63,114,106,127, 86, 90, 98,127, 0, 76, 64, 64, 64,211,210,200,213,229,244,244,244,151,170, 51,109,148, 58, -141, 98, 85,100, 52, 74, 59,182, 84,101,156,156, 49,104,246, 17, 46, 27,211,167, 79,143,156, 51,103, 78,157,182, 49,148, 85, 81, - 88, 43,154,150,182, 30, 94, 1, 7,166,207, 94,169,251,237, 28,135,188,204, 4,152,110, 38, 32, 40,106, 8,178, 18,142,129,136, -252,175,113,113,113,197, 53,109,108,247,238,221,225, 65, 77,219, 79,108,211,174, 19, 62,255, 93, 15,253,165,141,176,228, 93, 95, - 54,112,224,192,186, 51, 87,245,253, 14,190, 55,119,101,189,109, 23,229,200,205, 72, 64,252,150,169, 16,173,183,213,138,237,112, - 70,183, 39, 32, 19, 60,173,120,188, 57,131,155,127, 26,144,217, 19, 50, 28,186,191, 47,189,206,200,200, 72,244,240,240,248,126, -229,202,149, 99, 91,183,110,173,157, 56,113,226,229,194,194,194, 79, 50, 51, 51,127,180, 51, 87,189,195,194,194, 38,205,154, 53, -171,113,114,114, 50, 14, 31, 62,156,200,113, 92,149,245,203,151, 76,166, 52,246,252,165,165, 71,127, 88, 53,153, 13, 14,199,166, - 89, 83,132, 63, 47,196, 13,142,211,139, 59,203,204,149,139, 34,162, 75,100,163,237,111, 78, 24,195,138,103,119, 33, 62,249, 38, - 50,245,252, 62,135,159, 70,139, 12,188, 92,165,129,174, 65, 40,146,141,146,194,223,223,255,100, 90,190,241,255,236,157,119, 84, - 20,215,223,198,159,153,237,187,176, 75, 47, 75, 21, 21,144,170, 32,160,162,216,162,177,196, 22, 19,123,212,152, 24, 53,137,198, -168,137, 53,138, 13,141,209,168,104,138, 49, 54, 18,197,246,198,196, 26,163, 34, 22,172, 20, 59, 34, 34,125,169,210, 89,216, 54, -247,253, 3,240,135,132,178,148,244,249,156,179,103, 97,102,246,217,123,103,238,222,251,204,247,150,225,211, 28, 46,104, 46, 31, - 73, 5,149,205,106,196, 25,230,247, 33,201,186,166, 5, 64,147, 93,100, 77, 58,185, 86,104,214, 68,176,126,231, 87, 52, 26,170, -165,154,181, 13, 86, 93, 51, 85,223, 57,106,150,193, 82, 23,215,127, 13, 84,249,109, 49,177,163, 38, 33,130,214,152,171, 26,227, - 83, 51, 0, 93, 40, 20,190, 48, 42,250, 70,153, 26,138, 96, 53,182, 95,239,150,159,162,192, 48, 12,120, 60, 30,156,157,157,113, -237,218, 53,200,100, 50, 24, 26, 26, 66, 34,145, 64, 40, 20, 66, 38,147, 65, 32, 16,128,166,105,208,122, 26, 23,141, 70, 3,149, - 74,101,109,103,103,135, 39, 79,158, 64, 36, 18,189,120, 9, 4, 2,184,186,186,162,180,180,180, 89,166,179, 57,166,137,243, 47, - 90,154, 58,229, 97,212,235,214, 46, 1,147, 15,254,223,137,247, 43, 43, 85, 94,157, 92, 59,226,209,189,152, 59,217,233,137, 67, - 88,143,243,183, 49,206, 53,124,135,170, 89,162,109,210,141, 87,159,201, 90,191,126,125, 72,237, 40, 88, 91, 27, 44, 52,102,174, - 22,174,253, 78,118, 56,134, 70,161, 34, 30, 41,103,150,148,232,212,229, 5, 12,163,113, 44,120,122, 5,120,121, 64,110, 99,141, -161,127, 96,255,145,244,197, 71, 42,168, 75, 50, 81,124,255, 96,178, 80, 40, 92,212,150,230,106,209,186,157,166, 63,221,225,226, -121,230, 99, 60, 61,181,184, 72,167, 46,239, 31, 19, 19,211,236,117,180,222, 3,120,223, 1,154, 17, 22, 22,163,100, 66,122,195, -180,209, 82,244, 30, 32,134,140, 47,195,170, 47,232, 71,101,129,204,130,156, 40, 28,135, 47,120,136,193, 95, 50,163,240,193,131, - 7,107,119,238,220, 73,107,181,218,105,106,181, 58, 88,161, 80,188,136, 34,202,229,242,129, 14, 14, 14, 27, 86,175, 94,109,151, -156,156, 44,184,126,253,250,243,216,216, 88, 70,167,211,173,111, 76,243, 94,177,234,211, 15, 63,156,205,233,104,111, 51, 59, 49, - 61,125,196,253, 18,221,153,154,125,158, 18,190,103, 96, 23,183,171,171, 87, 46,150,170,175, 31, 69, 89, 86, 58,182, 95,207, 42, -102,116,154,197,122, 70,221, 76,175, 92, 56,143,197,211,167, 50, 37, 37, 37,144, 8,248, 76,122,252, 83,206,228, 1,189,117,159, - 47,156, 79,103,101,101,161,188,172,140, 99, 99, 99, 99,154,153,153,249, 92, 31,205,250, 12, 69,125,141,107,179, 12, 70,253,141, -121,139, 53,235, 70,176, 26, 51, 88,250,106,214,238, 18,107,234,124,232,116,186,230,117, 17,106, 27, 48, 88,234, 92,117, 43,139, -108, 42, 69, 81, 14, 53,127,183,197,111,160,162,162,194,178, 86, 84, 12, 0,168,150, 70, 43,171, 35, 88,141,238,111,142,201,170, -137, 96, 37, 38, 38,194,194,194, 2, 90,173, 22, 6, 6, 6, 16,139,197, 16,139,197, 80, 42,149, 16, 8, 4,224,112, 56,205, 74, -167, 80, 40,204,138,143,143,119, 52, 49, 49,129, 78,167,123,201,100, 61,123,246, 12, 70, 70, 70, 57,250,142,191,170,138, 96, 1, -231,246, 46,172,119, 22,161,177,145,193, 75, 66, 28,138,194,223,136,218,227,116, 90, 20, 85,202, 74,184,249, 3,128, 31,108,109, -109,247,237,255,254,164,159,159,159,223,201,214,106,178,252,193,238,171,218, 24,213, 30, 75,181,104,209,162, 22,175, 29,178,104, -209,162, 37,245, 69,180,218,210, 96, 81,117,222,255,103,174,204,108, 34, 22,172,222, 33,219,127,155, 70,145,226, 17, 50,207, 45, - 43, 98,212,229,253,105,154, 86,164, 69,125,119, 4, 64,121, 76, 76, 76,164,158,141,161,111, 39, 23, 23, 28,190,175, 69, 69,214, - 29,208, 20,217, 59, 96,192,128,242,214,102,162,198, 92,125, 26,242,157,233,225, 88, 46, 10,170, 76, 96, 17,211, 2,115, 53, 65, - 32,232,200,163,233, 13,246, 93,220, 94, 27,151,148, 90,218,175,131,200,120,104, 71, 33, 56,215,143,225,184, 77, 14,158,155, 95, -192,172,205,182, 29,163,126, 46,254, 37, 70, 88,246,188,139,183,151,236,182,193,189,147, 26,162,251, 52,239, 50,254,244,193,239, -137,137,137,171,173,172,172,126,202,206,206,126, 49, 58,213,214,214,118,136,131,131, 67,200,170, 85,171,218,165,165,165, 73,227, -226,226,138,143, 28, 57,242,140,166,233, 85, 89, 89, 89, 57, 77,105,222, 47,213,204, 39,169,138,239, 31,148,233,226, 95, 68,174, - 36,188,206,147, 39,143,187, 54, 96,252,219,162,164,139,251, 96,154,254, 0, 91,110,230,232,210,139, 42, 38,196, 43,145,165,143, -185, 18, 8, 4,135, 67,143, 30,125,226,229,229, 69,149,151,151, 67,163,209, 32, 55, 55, 23, 95,252,120,248, 62,195, 48, 48, 49, - 49,193,249,243,231,153,143, 62,250,232,176,141,141,205, 24,125, 76, 22,195, 48, 47, 26,171,134,162, 64, 98,177,184,121, 6,163, -250, 51,181, 13, 76,107, 52, 27, 50, 88,117, 35, 91,205,212,172,250, 1, 87, 15,110,111, 40,162,199,225,112,192, 48, 76,189,145, -190,134,195, 36,133, 13, 24,172,156,214,222, 72, 56,162,241,137, 52,127, 25, 34,145, 40,187,218, 60, 49, 13, 45,197,208,220, 8, - 22, 0, 8, 4, 2, 68, 69, 69, 97,240,224,193, 96, 24, 6, 66,161, 16, 98,177, 24, 34,145, 8, 55,111,222, 4,159,207, 7,135, -195,105, 86, 55, 33,143,199, 59,189,125,251,246,169,235,215,175, 23, 51, 12, 3,129, 64, 0,177, 88, 12,161, 80,136, 47,191,252, - 82, 41, 16, 8,206, 52,203, 96,161,233, 89,132,181,205,216,159, 77,157,101, 26,234, 46,197, 80,155,186, 75, 56, 52,184, 76,131, -141,141,141,169,157,157,221,187,132, 16,143,234, 77, 47,205, 22,172,117,104, 77,197,226, 98,107,107,187,175,158, 89,132, 44,109, - 31,189, 66, 3,117, 68,110,157,232,149,170,214,255,185, 0,168,234,255,115,107, 25,176,218,127,171,234,217,150,191,110,221,186, -136, 90,145,171,220,182,204, 76,131, 17,172, 46, 93,186,184, 25,155,217, 68,204, 91,189, 67,182,239, 6, 7, 69,138,135,200,139, -248,172,136,104,149,181, 77, 75,175,102,126,159,143,165,165, 25,242,162, 42,160, 41,120, 2,138,162, 98, 90,155, 1,127,127,127, -103,169,145,197,197, 5,107,190, 51, 61, 16,205, 69, 97,230,255, 76, 96, 75, 34, 87, 92,154,254, 98,211,175, 7, 71, 8,179, 30, - 65,121,231,162, 49,239,121, 58,238,231,168,113, 56, 42,171,228,226,213,157, 87,104,119, 18,212,127,130,177, 97,255, 9,166,216, - 50,235,140,105,118,197, 3,220, 72, 56, 49, 50,100,241, 9,130,191,104,117,247,218,230, 74, 46,151, 15,183,177,177, 89,121,242, -228, 73, 71,173, 86, 43,189,116,233, 82,201,145, 35, 71,158,106,181,218,208,172,172,172,147,122, 71,199,202,212, 47,204,149,167, -140,231, 59,109,202,148, 43, 31,109,254, 86,244, 32,250, 22, 54,236, 59, 9, 41, 79,163,139,206,172, 24,243,160,236,127,221,135, -141,158, 87, 46,119,213,129, 3, 7, 12,220,221,221,169,252,252,252, 23, 13,190, 90,173, 70,113,113, 49,138,138,138,160, 82,169, -224,229,229, 69,175, 88,177,194, 96,249,242,229,171, 0,124,208, 68,132, 32,103,229,202,149,150,239,189,247, 30,100, 50, 25,242, -243,243,161,209,104, 94, 68,155,132, 66, 33,140,141,141, 81, 88, 88,136,115,231,206,129, 16,210,168,185,228,243,249, 10, 91, 91, - 27,123,177,196, 64, 37,145, 72,136,161,161, 97,171, 53,171, 27,219,172,161, 67,135, 90,175, 92,185, 82, 80,187,145, 86,171,213, - 84, 75, 53, 9, 33,229,175,190,250,170, 36, 52, 52, 20,142,142,142, 80,169, 84, 96, 24,230, 69, 4,171,102,105,128,212,212, 84, -172, 93,187, 22,132, 16,253,111,100, 52, 5, 26,216, 77,177,128, 58, 95, 3,117,190, 6,170, 60, 13,212, 57, 26,104,203,255,118, - 83, 68, 90, 50, 0, 93,143, 72,152,101,107, 35, 88, 20, 69,129, 16, 2, 62,159,143,180,180, 52,156, 63,127, 30, 1, 1, 1,144, - 74,165, 40, 43, 43,195,181,107,215,144,149,149,213,162, 8, 86,255,254,253,247,158, 61,123, 54,232,195, 15, 63,116,154, 57,115, -166,216,205,205, 13,201,201,201,216,188,121,115,197,195,135, 15, 51,230,204,153,179,179, 57,122,116,245,210, 53,122,205, 34,164, -255,124,111,220,192, 50, 13, 67, 27, 56,188,246, 18, 14,117,151,105,120,193,177, 99,199,156,108,109,109,221, 80, 53,190, 10,248, -253,108,193,218,220,190,125,251,182, 31,216, 89,132,127,117,228,234,214, 63, 45,205,220,134,127,116,244,199,221,222, 88, 42,219, -123,157,139,130,140,251, 40,186,188,162,174,185,210, 7, 47,212, 90, 43,131, 39,146,122,105, 9, 31, 64, 5,180,133, 79, 33, 16, - 8, 98, 91,144,230,151, 52, 25,134,153,223,253,141,165,166, 97,183,184, 40,202,124,136,220,139,203, 91, 98,174,188, 0,220,123, - 15,224,217,251,120,188, 38,204,126,140,138,139,225,160, 0,124, 31, 91,134,107,233,170, 47,213, 42,213,154,135,197,170, 66, 91, - 49, 76,194, 67,114,150, 15,121,221,251, 35,215,113,231,112, 35,247, 27, 64, 2,152, 88,112,135,228,248,106,107,119, 23,190,148, -206, 54,162, 81, 77, 27, 27, 27,103, 67, 67,195, 47, 78,159, 62,109, 33, 16, 8,100, 15, 30, 60,208, 29, 61,122, 52, 77,167,211, -109,170, 61,240,189, 57,154, 30, 34,145,157,123,123,251,200, 57,155,190, 22,149,148,150,161, 76,165,134,141,131,173, 46, 50,250, -209, 27, 15,202,212, 63,235,163,105,105,105,217,111,244,232,209,157,187,118,237, 74, 55,100,174,138,139,139, 81, 90, 90,138,244, -244,116, 4, 5, 5,209,110,110,110, 94,149,149,149,253,114,114,114, 34, 26, 74,167, 66,161, 8, 14, 15, 15,239,121,232,208,161, - 97,211,167, 79,151,142, 30, 61, 26, 98,177, 24,101,101,101,176,183,183, 7,195, 48,184,124,249, 50, 18, 18, 18, 74, 0,156, 80, - 40, 20, 87, 27, 75,231,179,103, 73, 14, 0,104, 59, 59,187,158,131, 7, 15,110, 19, 77, 0,200,205,205,237, 24, 25, 25,185,112, -228,200,145,115, 7, 13, 26, 36, 93,178,100, 9,223,201,201, 9, 58,157,142,106,169,102, 65, 65,129, 81, 76, 76,204,198, 94,189, -122,125, 48,120,240, 96,110, 72, 72, 8,140,140,140,160,211,233, 32, 22,139, 81, 92, 92,140, 85,171, 86,225,202,149, 43, 90, 66, -200, 87, 69, 69, 69, 11, 26,211,172,189, 14,214,152, 57, 95,118,105,172, 16, 54,178, 14,214,159, 94,230,171, 35, 77, 4,205,235, - 26,108, 50,157,213, 3,218,127,183, 30,150,190,154, 53, 75, 47, 8, 4, 2,112,185, 92,228,230,230,226,236,217,179, 47,173,127, - 37, 16, 8, 94, 44,227,208, 64, 4,171,222,116, 74,165, 82,230,205, 55,223,156,118,250,244,233,169,243,231,207, 31, 89, 82, 82, - 98, 41,147,201,114, 13, 12, 12, 78,204,153, 51,103,183,177,177,113, 99, 75, 52,252, 78,147, 67, 83, 13,206, 34,124, 41,106,202, - 17, 84, 52, 48, 92,235, 15,189,238,117,150,105,168,187, 20, 67,109,234, 46,225, 80,119,153,134, 23,154,163, 70,141,122,134,170, -197, 67,233,234,247,186,179, 5,107,112,185,125,251,182,159,159,159,223, 37, 0, 98,252,126, 22,225,159, 94,230,255,229,154,255, - 42, 26, 27,131, 37,186, 26,157, 0, 90,152,131,146, 27, 95,180,196, 92,253, 14,109,101, 89,226,234,131, 73, 62, 58,149, 18,218, -226,148,199,131, 95, 27,154,211,218, 12, 16, 66, 12,174,196, 36,130, 43,202, 71,225,245,207, 11, 41, 93,101,255,152,152,152,184, -150,104,125, 7,104, 38,222,121,116,241,233,149,243,175,216, 0, 72,121,174, 66, 92,252,243,179,199,148,202,249, 53,199,100, 92, - 71, 1,128,185,191,114,239,117, 50,117, 41, 26,104,100, 3,228,164,106, 80,144,171, 61,253, 87,141,197,170, 33, 51, 51,243,137, -135,135,199,190, 93,187,118,205,242,245,245, 53,156, 61,123,118, 66, 81, 81,209, 75, 3,223,155,203,131,138,138,116, 36, 38,127, -115,241,251,205,159,136,220, 2,112, 52,100,177,238, 82,116,252,168,251,165,106,189,251,172,133, 66, 97,223, 89,179,102,241,203, -203,203, 27, 52, 87,197,197,197, 40, 41, 41, 65,113,113, 49,226,226,226, 48,122,244,104,225,163, 71,143,250, 2,136,104,172,206, - 79, 79, 79,191,220,161, 67,135,155,223,124,243,205,128,176,176,176,129,239,188,243,142,160,111,223,190,120,240,224, 1,110,222, -188,169, 82,171,213,191,137, 68,162,115, 79,159, 62,213,119, 16,214, 31,161,169, 85, 42,149,107,197, 98,113,232,145, 35, 71,214, - 92,184,112,225,173,169, 83,167, 26,104,181, 90,170, 53,154, 69, 69, 69,115,205,205,205,151,157, 58,117,106,239,217,179,103, 71, -189,245,214, 91,244,156, 57,115,176,109,219, 54, 28, 61,122,148,209,233,116, 63,243,120,188, 41,121,121,121, 77, 78, 64,169,189, - 14, 86, 99,235, 92, 53,181, 95, 15,254,136,187,208, 86,107,214,141,132,213,204, 22,172, 49, 85,205,233, 30,172, 77,231,206,157, - 95, 90,231,170,102, 64,123,205,139,195,225,128,203,229, 54,171,139,208,211,211, 19, 60, 30,143,241,241,241,217, 13, 96, 55,240, -242, 35,115,120, 60,222,139, 69, 77,245,161, 82,203,224,251, 93,251,110,106, 25, 2, 29, 67, 64, 24, 64, 67, 0, 70,199, 64,199, - 16,232, 24,166,106, 89, 52, 2, 40, 43,116,127,122,189, 86,107,153,134, 47,235, 89,138,225, 5,245, 44,225,208,224,115, 3, 51, - 51, 51,159, 19, 66,106,198,163,214, 55, 91,176, 70,115, 95,245,118,113, 70, 70,198,228,198, 52, 89, 88,154, 99,176,150,148, 70, -111,213, 0, 48,163, 40,106,113, 76, 76,204,131,214,126, 25,135, 67, 47,206, 57,254,118, 40, 1, 10, 56, 20, 22,183, 69, 6,116, - 58,221,210,178,152, 80,134, 16, 98, 76, 81,212,162,232,232,232, 86,165,147,104,181,239,127,177,243,242,151, 22, 70,130,129,121, -133,149,167, 64, 81,245,174,218,174, 5,249,240,135,207, 83, 63, 55,177,224, 14, 41,200,213,158,102,104, 44,252, 59, 92,208, 7, - 15, 30,132,236,220,185,147,243,237,183,223, 78, 83,169, 84, 47, 13,124,111,177,102,169,250,211,143, 63, 93,198,233,228,100, 55, - 59, 62, 57,117,228,253, 82,253,186, 5,107, 33,176,181,181,189, 95, 94, 94, 14,138,162, 80, 89, 89,249,146,161,170,109,176,212, -106, 53,114,114,114,224,228,228, 4,138,162,244,106, 33,170, 77,201, 73, 51, 51,179, 75, 91,183,110,125,109,219,182,109,129, 12, -195, 68,169,213,234,147,249,249,249,165, 45,201,243, 31,161, 89,253,185,143,180, 90,237,250,109,219,182,109, 20,137, 68,126, 57, - 57, 57,145,173,209,172, 54, 79,111,152,154,154,218,236,219,183,239,240,174, 93,187,186,115,185,220,235, 20, 69,141, 41, 42, 42, -106,201,122, 61,143, 91,185,191, 41,142,254, 1,197,190,213,154,181,199, 92,181,180,155,241,165,250, 65,171, 45, 93,188,120,113, - 78,221,103, 14,214, 94,243,170,246,187, 74,165,170,208, 67,147,249,236,179,207, 26,189,137,171,109,180, 42, 42, 42,154,236,210, - 37, 12,201, 27, 58,246,253,230,213,145, 12,201,251, 11,171,184,227, 0,158, 84,191, 72, 35,251,154,149, 37, 84,173,209,150, 76, - 8, 73,174,163, 91,123, 59, 11, 75,219, 24,172,152,152,152, 52, 0,111,183,229,151, 13, 30, 60,248, 60, 0,183,182,212,188,115, -231, 78, 10,128,183,218, 74,239,128, 74,149, 8, 96,216,123, 57, 42,222,143,104, 56, 34, 85, 61,160,253,245, 58,221,130,127, 11, -234, 27,248,222, 90,238,151,106,230,147,164,140,151, 6,190, 55,163,177,249, 85, 40, 20, 82,197,197,197, 80,171,213, 40, 41, 41, -121, 97,174,106,155, 44,173, 86, 11,138,162, 80, 82, 82, 2, 67, 67, 67,104, 52,154,102,221, 41, 86,155,148,240, 62,125,250, 28, -137,140,140,108,147,101, 52,254, 8, 77,165, 82,153,165, 84, 42, 39,246,233,211,135,219, 86,154,207,159, 63,207, 4, 16,216,161, - 67, 7, 65, 51,162, 96, 13, 70,178, 90,186, 95, 15,190,253, 3,138,252,143,127,183,138, 53, 37, 37,197,189,173, 53,211,210,210, - 30,182,121, 58,111,252, 48,239,159,208, 80,213, 68,141,108,109,109,247,165,166,166, 58, 80, 20,149, 90, 55,146,212,216,190,198, - 52, 1,192,201,201,233, 88, 90, 90,154,141, 80, 40,204,212,103, 59, 11,203,223, 1, 47, 86,147,213,100, 53, 89, 77, 86,147,213, -100, 53, 89,205, 22,242,222, 63,213, 0,253,139,150,141, 99, 97, 97, 97, 97, 97, 97, 97,249,123, 64, 53,226, 66,155, 51, 59,160, - 37, 78,246, 30,171,201,106,178,154,172, 38,171,201,106,178,154,255, 57,205,166,180,107,127,254, 61, 84,173,228,206,210, 6, 23, -134,213,100, 53, 89, 77, 86,147,213,100, 53, 89,205,255,158,102,125,176, 93,132, 44, 44, 44, 44, 44, 44, 44, 44, 44, 85,112,217, - 83,192,162, 15,182,182,182,235,186,117,235,246,254,173, 91,183, 54,165,165,165,173,106,161,134,141,153,153,217, 90, 0,129,132, - 16, 33,135,195,121,152,151,151, 23,146,158,158,126,185,165,233,146,203,229,246, 22, 22, 22,107, 1,116,103, 24,134,207,227,241, -238,103,103,103,175,201,204,204,188,222, 82, 77,115,115,115, 3,185, 92,238, 71, 8,177, 36,132,208, 60, 30,175, 32, 35, 35, 35, - 46, 55, 55, 55,135, 45, 9, 44, 44, 44, 44, 44,173, 54, 88,193, 31, 66, 14, 53,184,193,223, 33,173,122,147, 12, 85,139,174,185, - 1,120,132,170,199, 11,180,246,145, 1,255, 20,205,191, 59,180,177,177,241,171, 18,137,228,163,210,210, 82, 31,153, 76,118, 95, -171,213,134, 42, 20,138, 19, 0, 90,245,136, 19, 11, 11, 11,203, 81,163, 70, 45,218,186,117, 43,166, 77,155,182,236,228,201,147, -155,155,187,110,147,155,155,219, 8,169, 84,186, 99,245,234, 53, 22, 1, 1, 1,148, 72, 36, 66, 98, 98,162,237,210,165, 75,124, -205,205,205, 15,199,198,198,126,208,220,116,121,120,120,140,145, 74,165,161, 33, 33, 33, 22,126,126,126, 20,151,203,197,221,187, -119,237, 86,174, 92, 25, 96, 97, 97,177, 47, 46, 46,110,126,115, 53, 61, 61, 61,157, 12, 13, 13, 3,215,172, 89, 35, 10, 8, 8, -128, 80, 40,196,195,135, 15, 13,150, 44, 89, 98,161, 80, 40,158,196,198,198,222,104,142,158,239,123,209, 60,190, 68,205, 5, 0, -117, 57, 95, 27,243, 93, 87,141,190,219,216,234,137,133,133,133,229, 95,104,176, 86,206,196, 42, 74,139, 37,160, 65,125, 52, 30, -135,182, 29,162,111,246,239,223,191,211, 59,239,188, 67, 85, 63, 58,194, 61, 60, 60,252,141, 19, 39, 78,196, 51, 12,115, 3, 64, - 28, 0,181,158,223,203, 7,208,133,166,233,110,127,115,205,191, 61,134,134,134,206, 22, 22, 22,243,139,139,139,135,248,249,249, - 21,207,156, 57, 51,249,250,245,235, 73,254,254,254, 21,187,118,237, 10,209,104, 52, 95, 27, 27, 27,255, 86, 82, 82,178,177,165, -235, 98,241,120, 60, 55,138,162,144,145,145, 1, 30,143,199, 19, 8, 4,238, 0,244, 54, 26,118,118,118,114,169, 84,250,237,161, - 99,191, 90, 22, 87,210,120,146,203, 0, 40,135,142, 54,199,234, 13,219,204, 54,174, 93, 54,161,172,172,236,202,147, 39, 79, 14, -234,171, 41,151,203,237,165, 82,105,232,133, 11, 23, 44,133, 66, 33, 24,134, 65, 73, 73, 9, 44, 45, 45,177,110,221, 58,211,213, -171, 87,191, 83, 84, 84,116, 41, 57, 57,249,184,190,154,230,230,230, 6,134,134,134,129, 17, 17, 17, 34,129, 64, 64,105, 52, 26, -170,178,178, 18,214,214,214,228,203, 47,191, 20, 46, 93,186,212,181,176,176, 48, 43, 57, 57, 57, 85, 47,115,181, 35,154, 87,252, -107, 68, 15,146,166, 92, 6, 0,148, 72,188,166, 79,112,242,205,140,187, 71, 2,154,218,230,187, 35,250, 90,204, 12,214,100,177, -252,185,200,229,242,158, 78, 78, 78,199, 82, 83, 83,163, 56, 28,206,184,148,148,148,202, 54,144,181, 3,224, 4,192, 4, 85, 19, -171,158, 3, 72, 6, 94,220,184, 55, 27,179, 14,125,135, 67, 40,121, 27,132,116,161, 1,128,166,227, 24,117,217,158,252,132,139, -199, 91,165, 41, 50,152, 6,134,233, 66,131, 48,160, 57,119,136,182,108,103, 94,252,197,211,108,201, 96,105, 51,131, 21,252, 14, - 76, 40, 96,225,226,153,239,209, 92, 14,135, 10,217,241,221,248, 91, 81,199,137,220,161,203,139, 71,110, 4, 5, 5, 33, 40, 40, -136,218,176, 97,131,219,133, 11, 23,220,246,239,223,175,137,138,138,138, 6,176,183,161, 47, 11,153, 45, 78,213,106,148,246,160, -197, 21,237,186,127,189, 63, 48, 48,136, 17, 10,133,104,141, 38, 0,188,255, 38,247,183, 74,202,158,234, 59,108,121, 74, 91,105, -254, 67,204, 85,164, 84, 42,141, 96, 27,225, 0, 0, 32, 0, 73, 68, 65, 84,237, 56, 99,198,140, 39,179,102,205,186,100, 96, 96, - 64, 0, 32, 39, 39,199,224,181,215, 94, 43, 24, 53,106, 84,126,121,121, 57,190,249,230, 27,251,208,208,208,223,164, 82,105, 70, - 73, 73, 73, 64,115,202,135, 92, 46, 95, 63, 96,192,128,121, 19, 39, 78,132, 84, 42,197,212,169, 83, 81, 89, 89, 25,117,225,194, -133, 13, 10,133, 98, 25,128, 38,159,157, 97, 98, 98,178, 98,229,202,149,150,165, 42, 14,150,133, 37,226,121,105,149,111,144, 8, -104,124,240,138, 16,147, 39, 79, 49,138,141,141,221, 0, 64,111,131,101, 97, 97,177, 54, 36, 36,196,162,230, 90,151,150,150,162, -180,180, 20, 37, 37, 37, 40, 45, 45,197,196,137, 19,101, 79,158, 60,217,130,170,213,157,245,109, 92,252,214,172, 89, 35, 18, 8, - 4, 56,126,252,120,231,138,138, 10,174, 70,163, 1, 33, 68,219,169, 83,167,184, 41, 83,166,240, 19, 18, 18,122, 0,208,203, 96, -201,179,192, 43, 82, 42,191,218,254,249, 39, 22, 0,240,225,194, 47,190, 2,148,221,136, 30,219,228, 89,240,143, 1, 88,131,213, - 56, 28, 0,175,243,120,188,209, 29, 59,118,244,123,242,228, 73,172, 86,171,253, 63, 0,255,135,214,159,187, 87,108,108,108,214, -102,102,102,110, 7,240,195,127,229,132,118,232,208,225,167,253,251,247,155,157, 58,117,106,196,234,213,171,199, 2,216,215, 10, - 57, 30,128, 30,213,166,234, 81,181,177, 66,181,209,234, 4,160, 3,128,171,205,185,225, 53,115, 9, 52, 4, 87, 22,222,163,103, -159, 94, 99,222, 24, 37,181, 48, 53, 66, 89,165, 14, 9,201, 89, 14,103, 79,253,212,231, 49, 95, 28,165, 85, 23,141,207, 79,136, - 42,109,174,102,191,254, 3,123,245,127,101,128,212,200,200, 24,249, 37, 26, 60, 77, 78,119,140,252,237,231, 32,154, 43,190, 4, - 74,243, 86,206,189,223,202,217,159, 28, 75,115,208,107,144, 59, 69, 81, 48, 48, 52,168,119,159,145,145, 17,250,246,237,139,144, -144, 16, 30,128,238,117,118,191, 52, 85, 83,167, 83,201,151,125, 48, 27, 2, 46, 17,190, 54,100, 16, 37,147,201, 90,173, 9, 0, - 86,166,218, 1,221, 92,149,125,178,227,230, 76,138,139, 92,235,165,170, 40,252,221,147, 78, 37, 18, 9,156,157,157,177,116,233, - 82,189, 52,219,128, 63, 92,147, 16, 98,227,238,238, 94,178,121,243,102,215,229,203,151,155, 84, 84, 84, 24, 0,176,115,247,233, -105, 67,211,180,189, 74,165,146, 6, 7, 7,155,127,254,249,231,174, 22, 22, 22,133,132, 16,139,230,164, 83, 46,151,111, 14, 9, - 9,153,191,103,207, 30,202,223,223, 31, 82,169, 20, 61,122,244, 64, 88, 88, 24,189, 98,197,138, 69,114,185,124,189,158,121, 15, - 10, 8, 8,160, 24, 0, 5,165, 90, 68,172,235,138,171, 95,248,163, 92,197,160,168,164, 20, 74,165, 18, 34,145, 72,108,102,102, -102,216,140,243,217,221,207,207,143, 2,240,194, 84,149,148, 84,189, 74, 75,203,160, 82,169, 65,211,180,204,209,209, 81,216,140, -243,105, 25, 16, 80,229, 63, 43, 42, 42,184, 35, 70,140,192,176, 97,195, 80, 82, 82,194, 45, 46, 46,134, 74,165, 2, 77,211,252, -234,134,189, 73, 77,149,132, 71, 49,132,177, 50,144,136,205, 13, 36, 98,115,134, 48, 86, 0,160,207, 54,149,132, 71,253,197,229, -211,130,166,233,221, 29, 58,116,120, 72,211,244, 62, 0,214,173,212,244, 7, 16, 34, 22,139,207,185,185,185,165, 73, 36,146, 11, - 0,214, 87, 55,192, 45,209, 20, 72, 36,146, 11, 33, 33, 33,135, 99, 99, 99,199,158, 63,127,222,233,238,221,187,111,108,216,176, - 33,220,208,208,176,230,193,188, 45,254,109, 58, 57, 57,237,186,113,227,134,127, 96, 96,224,247, 0,132,109,244,123,231, 0,240, -169, 54, 28,127,139, 58,164, 54,182,182,182, 29,125,124,124,204, 57, 28, 14,130,130,130, 64, 8, 9,106,165,102, 32,128, 44, 0, -145, 0,114,171,111,198,116, 0,242, 0, 92,174,190, 81, 9,106,150, 38, 87, 22,254,209,199,159, 14, 94, 48,251, 93,105, 76,138, - 14, 59,207, 42,112,232, 74, 46, 50, 74,132, 24, 56,114,154, 81,159,161, 19, 7,113,249, 70,225,205,213, 92,180,104,201,224,119, -167, 78,146,222,203,164,113,248,106, 30,174, 60, 42, 70, 57,101,130,190, 35,223, 51,113, 15, 24,242, 26, 5,254,222,191,195, 53, -250, 15,104,254, 7, 34, 88,187, 80,176,114, 38, 62, 15,249,230,187,101, 52, 69, 17, 59,151, 65, 15,156,156,187,151, 49, 12, 3, -165, 82, 9,181, 90, 13, 30,143, 7,165, 82,137,148,148, 20,220,184,113, 3, 70, 70, 70,205,250,226,194,162, 34,216,218, 57, 65, - 34,145,180,137,230,244, 55, 71,113, 83, 21, 10,110, 84, 76, 68,215,131, 91,247,119,181,239, 48,240, 81,151,190,159,222, 51, 52, -114, 80,198,197,197,225,218,181,107, 40, 40, 40, 64, 77, 3,250,111,128,162, 40,205,198,141, 27, 99, 50, 51, 51,113,249,242,101, -159,149, 91,126,108,119,175,184, 3, 55,183,148,240, 44, 12,179, 29,221,196,143,117, 5,207,159, 39,205,159, 63,255,130, 92, 46, - 87,205,158, 61,187,143, 62,186,182,182,182, 34,138,162,186, 14, 26, 52,232,131, 41, 83,166, 32, 57, 57, 25, 11, 22, 44, 80,197, -197,197, 21,118,237,218,213,100,227,198,141,252,247,222,123, 15, 81, 81, 81,243, 35, 34, 34,142, 0,184,159,145,145,209,216,179, -212, 4, 34,145, 8, 40,170,186, 81, 85,107, 9,106,134,133,149,150,150,130, 38,133,224,243,249, 52, 77,211, 22, 0,244,186,243, -100, 24,134, 47, 16, 8, 80, 86, 86,134,210,210, 82,100,228,150, 34, 37,187, 12, 37,101,149, 80, 42, 53,168,172, 32, 16, 74,173, -104, 77,110,174, 25,128, 12,125, 52, 9, 33,116, 77,119,163, 74,165,130, 82,169,132, 74,165,130, 74,165,122,241, 56, 31, 14,135, - 35,181,181,181,149,101,100,100, 20, 52,217,154, 10,196, 90, 14,205, 15, 89,178,230,171, 96, 0,224,208,252, 16, 67, 84, 48,250, -108,227, 8,196,218,191,176,104, 9, 45, 44, 44, 34, 14, 31, 62,236,238,236,236,140,103,207,158,185,141, 25, 51,166,155, 66,161, -240, 1,208,220,187,120, 9, 77,211,159, 79,153, 50,229,253, 9, 19, 38, 80, 46, 46, 46,224,114,185,208,106,181,118,137,137,137, -253, 14, 29, 58,180,112,215,174, 93, 59,117, 58,221,124,125,175, 61, 0, 90, 32, 16, 28,220,177, 99, 71,239,110,221,186, 97,223, -190,125,184,121,243, 38,227,239,239, 79, 79,158, 60, 25,142,142,142,221, 39, 79,158,124,180,178,178,114,152, 62, 17,214,122,112, -236,209,163,135, 61,135,195, 65, 96, 96, 32, 63, 42, 42,202, 23, 64, 84,107, 3,206,118,118,118,145,125,251,246,245, 57,119,238, - 92, 76, 86, 86, 86,223,102,228, 23,114,185,124,164,149,149,213, 6,169, 84,106,162,239,103, 74, 75, 75,203,179,179,179, 23,100, -102,102, 30,209,179,252, 7,122,123,123, 67,171,213,194,200,200, 8,214,214,214,189, 40,138,154,111,100,100,244,122,113,113,241, -188,140,140,140,155,205,200,175,109,245, 13,124,205,115, 1,219, 85, 71,173,128,170,231, 89, 62, 3,144, 4,192, 6,128, 61,244, -232, 46, 52,235,208,119,120, 96, 80,191, 94, 65,221,188,232,117, 71,146,161, 99, 24,112,161, 3,151,195, 32, 79,199, 3, 69, 81, -112,116,245,231, 88,221,187,221, 93,171, 86, 15,207, 79, 56,119, 92, 31,205,193,131, 6, 5,117,114,117,161, 55, 29, 75, 69, 97, -198, 61, 93,246,163, 11,121, 20, 77,163,125,151,129,230,142,174, 62,156,142, 62,175,240,178,147,239,245, 83,119,236, 61,160, 32, -241,210, 57,214, 54,176,180,196, 96,145,218,119, 86, 43,190,197,114, 51, 99,180,123,112,239, 14,157,150,165, 42,187,115,231, 14, -204,204,204, 96,105,105, 9,153, 76,134,248,248,120,156, 59,119, 14,143, 31, 63, 6, 33, 4, 62, 62, 62,205,250,226,236,172, 44, -228, 63, 47,105, 83, 77, 7,185, 28, 14,114, 57, 55,175,160, 16,215,238,220,117, 63,190,115, 64,167,108,122,198, 30,165, 82,249, -226, 24,141,230,223,215,235, 98,105,105,169,251,240,195,217,249,211,191, 74,234, 48,190,191, 45,103,100, 15,107, 28,139, 82,112, -194, 47,114,200,178,119, 58,231, 37, 38, 38,232,157,105, 7, 7,135,181,189,123,247,254,132,203,229,242,222,123,175,106,249,145, - 57,115,230, 84,222,189,123,215, 35, 61, 61, 61,169,178,178,178,211,188,121,243,238, 30, 61,122,148,247,238,187,239, 82, 21, 21, - 21, 55,121, 60, 30,137,140,140, 92,165, 80, 40,130,235, 53, 26, 28, 78,236,131, 7, 15,218,105, 69, 54, 48,151,210, 24,180, 44, -166,170,197, 17, 18,228,101,103,224,126,226, 45, 88, 88, 88, 24,153,155,155, 63,202,201,201,169,204,206,206,254, 40, 41, 41,105, -111, 99,233,228,241,120,247,239,222,189,107,103,101,101,133,210,210, 82,164,229,148, 97,247, 53, 10,229,149, 98, 0, 98,112, 32, -133,212,220, 94,218,158,148,199,153,152,152,168, 85, 42,213,162, 39, 79,158,252,208,132,102,193,195,135, 15, 13,108,109,109,193, -225,112,212,135, 14, 29,226,171, 84, 42, 16, 66,180,167, 78,157, 26, 87, 88, 88, 24,216,161, 67, 7,218,209,209,113,163,131,131, -131, 82,161, 80, 76, 79, 78, 78,110,240, 65,195,103,230,116, 84,247, 9,190,248,117,225,179,180, 67, 0, 96,219,205,253,249,137, - 96, 95, 85,159,224,210, 38,183,157,153,211,241,175, 28, 39,248,246,146, 37, 75,220, 77, 77, 77, 49,115,230, 76,172, 92,185, 18, -203,151, 47,119,158, 57,115,230,123, 0, 54, 55, 67, 71,108,109,109,125,107,235,214,173,110, 61,123,246,196,169, 83,167,112,224, -192, 1, 36, 37, 37,105,157,156,156,184,221,186,117,195,138, 21, 43, 48,104,208,160,233,179,103,207,238,147,153,153,233,171,167, -233,152,182, 98,197,138,145,189,122,245,194,212,169, 83, 43, 47, 94,188, 56, 22,192,217,223,126,251,173,127,100,100,228,145, 31, -127,252, 81, 28, 18, 18, 50,120,222,188,121,179, 0,108,111, 65,254, 71,245,238,221, 27, 0,208,171, 87, 47,108,216,176, 97, 80, - 43, 13,150,192,204,204,236,228,190,125,251,124, 92, 93, 93,241,214, 91,111,249,142, 29, 59,246,100, 65, 65,193, 64, 0,122, 61, - 55, 82, 46,151,127,190, 99,199,142,142, 98,177, 88,239, 47, 85,169, 84,166, 51,102,204, 88,223, 28,131,229,229,229,133,139, 23, - 47, 98,192,128, 1,240,244,244,236, 56, 99,198,140,141,131, 6, 13,194,199, 31,127,124, 69,171,213,218,100,103,103,235,251,160, -103, 71, 0, 53,207, 45,117, 0,224,140,170,238, 64, 0,232, 86,253,254,172,218,108,117,210,199, 96, 65,100,240,246,136, 97,195, -164,255, 23,149, 3, 29,195,192,205, 86, 4,119, 7, 25,146,115, 42,144,156,145, 15, 30,165,134, 84, 44,132,119,224,107, 38,207, -179,147,223,134, 62,195, 3,132,146,183, 71,141, 24,102,248,211,181, 28, 20,102,220, 39, 41,183, 14, 93,208, 84,148, 77, 7,128, - 7,151,126,248,214,202, 68, 52,208,165, 75, 87, 78,121,208, 72,147,200, 99,223,188, 93, 0,176, 6,235,143,135, 52, 35,202,251, -207,139, 96,213,144, 95, 8,165,153,181, 59,210,178, 98,171,254,207,207, 71,126,126, 62,218,183,111,143,208,208,208,151,142,109, -233, 19,232,255, 8, 77,115, 19, 99,140,232,215,135,115, 47,254, 27,142,146, 81,182,137,230,223,182, 36, 18, 66, 40,138,162, 82, -242, 52,198,121,197, 26,254,184,126,246,132,199,161, 49,190,159, 3,181,253,120, 10, 63, 79, 41, 49,230,112, 56, 52, 33,164,201, - 59,121, 95, 95, 95,158,151,151,215, 39,187,118,237,226, 41, 20, 10, 24, 27, 27, 67,163,209, 32, 54, 54, 54, 83,161, 80, 36, 1, - 64, 86, 86, 86,252,205,155, 55,179,117, 58,157,157,155,155, 27,102,204,152,129, 78,157, 58, 81,243,231,207, 95,120,240,224,193, - 85,168,103,198, 98,118,118,118,200,210,165, 75,123,175,221, 16,106, 54,169, 27,133,178,114, 21, 74, 75, 75,145,156,112, 31,164, - 84,133, 77,155,190,132, 88, 44,166, 0,240,115,115,115,249,193,193, 43,190, 55, 54, 54, 30, 22, 29, 29, 61,186, 65,131,158,157, -189,102,197,138, 21, 1,155, 54,109, 50, 45, 45, 45,133,178,162, 2, 37, 74, 1,110,124, 89, 21,161,236, 54,239, 38,182,127,177, -145,246,114, 52, 48, 43, 45, 45,197, 39,159,124,178, 85, 34,145,116,143,139,139,123,191, 33,205,140,140,140,184, 37, 75,150, 88, -108,219,182, 77,216,169, 83,167,187,197,197,197, 40, 40, 40,160,143, 30, 61,186,218,209,209,209,116,235,214, 80, 74, 34,145, 0, - 0,210,210,210,248,203,150, 45, 61,104,104,104,248,227,189,123,247,166, 54,116,121, 34,131,251, 86, 2, 68, 97, 99,211,190, 99, -249, 53, 58,216,198,166,226, 74,100,112,102, 24, 64, 20,213,113, 72, 98,109,109, 61, 41,117,159,176, 87,101, 37,179, 37, 43, 43, -229, 49,240,215, 62, 84,214,220,220,124,246,200,145, 35,177,126,253,122, 28, 63,126,124,158,169,169,233,151, 43, 87,174,132,141, -141,205,135,153,153,153, 91,170, 43, 64,125,248, 98,243,230,205,110,110,110,110,152, 50,101,138,234,220,185,115, 75, 0, 28, 3, -144,114,249,242,101,135,189,123,247, 14, 63,120,240,224,250,173, 91,183,138,182,109,219,214,241,141, 55,222,216,194, 48,204, 59, - 77,137, 90, 89, 89,125, 60, 97,194, 4,108,220,184, 17, 23, 47, 94,124, 3,192,169,234, 93,167,175, 94,189, 58, 60, 36, 36,228, -252,178,101,203,176,121,243,230,185,233,233,233,205, 53, 88,134,238,238,238,159, 13, 30, 60, 24,151, 47, 95, 70, 80, 80, 16,122, -244,232, 49,239,218,181,107,161,168,234,218,106, 46,180,161,161,225,193, 61,123,246, 4,181,107,215, 14,107,214,172,193, 39,159, -124,130, 93,187,118, 5,189,245,214, 91, 7,203,202,202, 70, 67,143, 89,190,134,134,134,134, 98,177, 24,235,215,175, 39,169,169, -169, 77, 70, 79,229,114,185,201,103,159,125, 70, 25,233,215, 13,192,177,177,177, 49,178,178,178,234,109,109,109,141,173, 91,183, -194,210,210, 18,243,230,205,131,153,153, 25,202,202,202, 48,122,244,104,222,245,235,215,199, 3, 8,213, 51,223,102, 0,106, 34, - 94,238,213,230,170,164,250,255,235, 0,122, 85, 27,172,231, 0, 76,245, 58,145,132,120,153, 24,203,144,121, 55, 27, 92,104,225, -230, 32,197,237,196, 50,168,117, 4, 18, 3, 67,148,149, 20,162, 75, 71, 11, 20,151,219, 1, 96,244, 90, 4,147,207,161,187, 10, -132, 98,228, 20, 23, 33,235,225,249,124,181,174,114, 70,209,179,171,105, 0, 96,210, 62,104,198,253, 27,103,110,143, 30, 18,100, -153, 91,224, 0, 66,152, 0,176,176, 52,231,199,223,212, 1, 12,243,251,223,126,237,136, 80, 13,106,117,235,110,184,255, 8,205, -250,248, 35, 52,255, 14, 62,203,214,132, 91,100, 32,162,181,191,221,206,209,105,180, 58,252,122, 59, 75, 39, 17, 82, 90, 19,161, -170,152, 97, 24,189, 26,196,152,152, 24,205,229,203,151,247, 45, 94,188, 24,155, 55,111,198,211,167, 79,193,227,241,224,234,234, -106,101,103,103, 39,175,174,184,237, 61, 61, 61,205, 57, 28, 14, 18, 19, 19,113,224,192, 1, 4, 7, 7,147,232,232,232, 93, 13, - 53, 20, 10,133, 34, 54, 59, 59,123,199,186, 85, 75, 10,121,149,153,144,232,114,161, 43,124, 10,158,174, 8,179,231, 45,198,179, - 60, 29, 98,159,149, 32,246, 89, 9,178,148, 34,124,182,102, 19,199,217,217,121,184,173,173,237,160,134,210,154,153,153,121, 93, -161, 80,132, 45, 95,190,188, 40, 47, 47,239, 69,249, 81,107, 25,168,181, 76,221,198, 9,235,214,173, 51,150,203,229,227,108,108, -108,250, 54,164,153,155,155,155,147,153,153,153,184,120,241, 98,117,110,110, 46,138,139,139,113,230,204,153, 55,218,183,111,111, - 58,127,241, 42,234, 89, 30,121,145,206, 34,198, 24, 27, 67,119,114, 58,116,232, 48, 81, 46,151, 55, 58,142,200,198,198,182,163, -187,123,135,195,215,175, 95,159,218,177, 99,199,247,107,140, 85,141,145,114,114,114,154, 25, 29, 29, 61,205,199,199,227,176,149, -149,117,167,191,184, 44,245, 27, 55,110, 92, 39,134, 97,112,248,240,225,187, 0, 54,255,244,211, 79,183, 42, 43, 43, 49,126,252, -120, 39, 0,131,245,212,241,159, 56,113,226,251, 65, 65, 65,152, 59,119,174,250,220,185,115, 93, 1,124,137,170,217, 99, 4, 64, - 10,128,208,200,200,200, 46,179,103,207,174, 12, 8, 8,192,212,169, 83,167,161,225, 49, 57, 53, 4, 78,152, 48,193,141, 97, 24, -132,135,135,223,169,101,174,106,184,112,228,200,145,235, 42,149, 10,147, 38, 77,106, 15,160,127, 51,242,206, 23, 10,133,135, 87, -175, 94,109,156,145,145,129,201,147, 39, 87,198,199,199, 35, 56, 56, 88,108,100,100,116, 10,128, 97,115, 79,166, 80, 40,252,238, -155,111,190, 25,233,237,237,141, 89,179,102,169,190,254,250,235, 57,239,191,255,190,170,107,215,174,248,234,171,175, 70, 10, 4, -130,102, 61, 2, 36, 59, 59,187, 48, 50, 50,210,172,169, 87, 86, 86, 86,182, 62,122,246,246,246,198,158,158,158,119,253,253,253, -243, 58,119,238,220, 1, 0,238,223,191,159,123,248,240, 97, 98,102,102,134, 51,103,206,224,187,239,190, 67,207,158, 61, 33,149, - 74,199, 55, 51, 10, 65,106,253, 93,223,254,186,199, 53, 14, 69,145,162,114, 45,184, 52, 13, 30,135, 32, 37,187, 2,106, 29, 1, -159, 71,131,199, 1,184, 52,129,153,148, 7, 30,143, 3,125,111, 82,104,138, 66, 65,153, 6, 92, 14, 5,158,128, 79,209, 90,221, -139, 16, 33,205,213,137,133, 34, 33,101,105,196, 7,159, 75,129,162,192,194,210,118, 17, 44, 0,208,233,126, 31,248,168, 47, 10, -164, 82,169, 90,149,144, 63, 66,179, 62,254, 8,205,191,146,226,226, 98,110,100,100,164, 17,143,199, 51, 24,230,221, 51,255,243, - 67, 9,230, 43,247, 63,134,128, 3,106,120,103, 90,113, 49,226, 28, 85, 80, 80, 96,226,236,236, 92,160,143, 94, 82, 82,210,244, -176,176,176, 53, 52, 77, 7,232,116,186, 67,155, 55,111,198,246,237,219, 37, 51,103,206,140,215,233,116, 25, 46, 46, 46,246, 91, -182,108, 17, 2, 64, 88, 88, 24,126,253,245,215, 81, 60, 30,239,102,106,106,106, 86, 99,186,119,238,220, 89, 86, 88, 88, 24,149, -148,148, 20, 74, 81,148,177, 84, 42, 53,249,233,167,159, 40, 69,161, 10,203,194,158,190,152, 89,104, 32,228, 96,241,235, 22,120, -243,205, 49,220, 39, 79,158,124,145,145,145,241,107, 67,154,177,177,177,243, 10, 11, 11, 35, 19, 18, 18, 54,243,205, 92,205, 68, - 94,239, 73,251, 47,174,234,126,148,155, 10, 65, 87, 87,136, 69, 69, 69,200,203,203,195,180,105,211,140,215,174, 93,187, 48, 51, - 51,243, 98, 67,154,113,113,113,215,139,138,138, 20, 9, 9, 9,221, 9, 33, 2, 35, 35,163,158,155, 55,111,166, 82,158,171,176, -104,111, 34, 74, 42,170,210, 41, 21,241,176,106,130, 29,166, 78,157,202,125,246,236,217,231, 10,133,162, 87,253,230,202,198,217, -221,221,253,240,254,253,251,221,183,108,217,242,252,201,147, 39,101,114,185,124,101,237, 99,146,147,147, 43,215,173, 91,151, 31, - 22, 22,230, 58,121,242,228,195, 49, 49, 49, 99, 91,186,164, 70,107,145,201,100,235,103,204,152,129,131, 7, 15,162,160,160, 96, - 75,117, 25,219,188,127,255,254,240,233,211,167, 35, 44, 44,108,125,110,110,238, 25, 61, 26,197, 33,227,199,143,199,233,211,167, -113,254,252,249,207, 0, 60,104,224,184,132,203,151, 47, 47,252,249,231,159,183, 78,152, 48, 1,187,119,239, 30,140,170, 1,208, - 13, 49,112,208,160, 65, 56,117,234, 20,242,243,243,191,170,239,128,194,194,194,175,127,249,229,151,238,131, 6, 13,194,186,117, -235, 6, 2,184,160, 71,214,221,140,140,140,246,108,221,186,213,223,219,219, 27, 19, 39, 78,172, 80,171,213,131, 63,249,228,147, -227, 7, 14, 28,144,238,219,183,207,239,189,247,222,187,145,147,147,243,110,117, 4,166,233,198,155,166, 67, 54,109,218,244, 78, -223,190,125, 49,111,222, 60,237,175,191,254, 58, 2,192,217, 51,103,206, 36,126,250,233,167, 39, 55,109,218,196,217,184,113,227, - 59, 31,125,244, 81, 46,195, 48, 75,254,138,235, 77, 81,212,198, 77,155, 54,185,123,120,120,160,162,162, 2, 79,159, 62, 69,118, -118,246,254, 51,103,206,156,189,119,239,222,134,172,172,172,163, 86, 86, 86,211,231,205,155,103,231,239,239,239, 95, 86, 86,102, -162,207,248,195, 90,145,169, 28, 0, 15, 81, 53,177,168,230,188,117, 67, 85,215, 32, 80, 53,163,176, 64,207,196,222, 77,120,150, -209,222,196, 80,134, 2, 70,128,103, 25,121, 16, 27, 24,128, 38, 52,180,202, 2, 56, 59, 90,130, 33, 64,113, 94, 6,104,154,186, -171,143,164, 70,199, 68, 39,167,101,219, 26, 27,136,224,220,117,168,217,157, 11,187,127,144,181,239,249, 30,151, 67,113,120, 2, -195, 29, 19, 39, 76, 49,215,232, 8, 74, 11, 20,160, 56,244, 77,176,176,180,117, 4,171,110,191,127,221, 40,144, 88, 44, 70,101, -101,243,150, 75,249, 35, 52,245,249,206,182,214,252, 43,209,104, 52,210,247,223,127,191, 87,122,122,186,204,213,213, 53,113,168, -191,197,181, 93,115,218, 95,235, 38,123, 80,190,244, 53,234,154,189, 40,251,150, 80, 40, 76, 45, 40, 40, 16,132,133,133,249,106, - 52, 26,137, 62,186, 89, 89, 89,169,153,153,153,135,143, 28, 57,242,195,137, 19, 39,208,169, 83, 39, 92,186,116, 73,154,144,144, -224, 22, 17, 17, 97,224,236,236,140,163, 71,143,226,151, 95,126,217,169, 80, 40,126,110,202, 92,213,144,154,154,122, 38, 46, 46, -174, 99,126,126,126, 71, 99, 99, 99,141,177,177, 49,234,206, 44, 44,171,212,161,176,184, 4,198,198,198,144, 72, 36, 78, 77,105, - 38, 39, 39, 31,191,115,231, 78,123,152,186, 5,113,146,246, 23,125,253, 97, 39,124,253, 97, 39,172,126,171, 3,172, 77, 4, 40, - 44, 44, 68,110,110, 46,114,115,115, 65, 8,129, 78,167,115,215, 67, 51, 53, 46, 46,238, 96, 70, 70,198, 57, 11, 11, 11,202,208, -208, 16, 4, 64, 65,169, 26, 87, 55,248,227,234, 6,127, 20,148,170, 81, 82, 90, 6, 91, 91, 91, 72,165,210,122,187, 35, 76, 76, - 76,164,132,144,189,223,127,255,189,155, 84, 42,229, 76,159, 62,221,248,218,181,107,189,174, 93,187,182,168,206,171,215,135, 31, -126,104, 34,145, 72, 56,187,119,239,118,225,112, 56,123, 28, 29, 29,141,254,228,226,196, 1,240,193,244,233,211,253, 68, 34, 17, -182,111,223,158, 4,224,199,234,125,135,191,254,250,235,120, 0,152, 51,103,142, 39,128,121,104,124, 38, 37,248,124,126, 87,119, -119,119, 92,187,118, 13, 0,126,106,226,187,143, 68, 69, 69,193,217,217, 25, 34,145,200,191,137, 99,157,236,237,237, 17, 31, 31, - 15, 0,177, 13,121,239,248,248,120,216,219,219,131,162, 40, 39, 61,242, 62,242,213, 87, 95,189, 27, 17, 17,225, 31, 24, 24,136, -119,222,121, 71,117,227,198,141,161, 0, 46,197,198,198,246,155, 52,105, 82,153,139,139, 11, 34, 35, 35,221, 38, 77,154, 20, 69, -211,244, 26, 61, 52,167,173, 90,181,106,241,168, 81,163,176,106,213, 42,114,232,208,161,137, 0,206, 86,239,251, 53, 60, 60,124, -242,218,181,107,201,232,209,163,177,114,229,202,197, 0,102, 53, 38, 86, 94, 94, 94,164,211,233, 80, 94, 94,174,215, 29,162,190, -199,183,111,223,126,136,135,135, 7,126,254,249,103, 8, 4, 2,252,246,219,111,160,105,250,100, 86, 86,214,217,232,232,104,239, -204,204,204,213, 10,133,226, 72, 98, 98, 34,130,130,130,104,157, 78, 55, 90,207,242,244, 12,128,119,245,223,105,168, 26,143, 21, - 8,160, 39,128,132,234, 72, 38, 80,245, 60,187,103,250, 8, 50,170,210,125,231, 79, 29, 41, 50, 49,228,195,220,196, 0, 86,230, - 50,112, 52,101,128,170, 16, 29, 29,173, 16,224,110,141,103, 57, 42, 68,157, 59, 92, 88, 94, 90,174,215,242, 18, 58,117,217,158, -243,103,126, 46, 50, 53,228,163, 93, 71, 15, 12,159, 56,215,199,205,187,219,111, 94,190,189,126, 93,182, 34,164,243,171,189,220, -169, 7,105, 21,184,126,254, 88, 65,121, 73,241, 30,214, 50,176,180, 52,130, 85, 95, 0, 52,103,222,188,121,150,243,231,207,135, - 76, 38, 67,126,126, 62, 52, 26,205,139,104,147, 80, 40,132,177,177, 49,242,243,243, 17, 30, 30,142,234,187,149,134,107,112,142, - 64,177,230,171,109,246, 20,199, 64, 37, 20, 75,136,169,164,245,154, 0,160,210,112,115,190, 9, 63,106, 58,164,119, 15,174,131, - 92,254,187,253, 45,209,252,135, 24,172,223,178,178,178,252, 58,117,234,148,229,232,232,168,172,168,168, 0, 81, 42, 75, 78,133, -111,233, 96,111, 52,235, 41, 77,211, 68, 44, 22, 51,198,198,198,101, 79,159, 62,165,180, 90,109, 68,115,244, 9, 33, 51,103,206, -156, 73, 95,190,124,121,226, 91,111,189,133,118,237,218, 33, 54, 54, 22, 97, 97, 97, 56,114,228,200, 94, 62,159, 63,167, 37,233, - 78, 75, 75, 43,117,119,119,127, 41, 2, 82,119,102,161,166, 50, 23, 12,195,232, 61, 56,191, 32, 38,236, 49,199,220, 92,227,233, -240,191,229, 68, 10, 10, 10,144,155,151,135,220,220, 92,228, 85,191, 19, 66,244, 14, 97, 82, 20, 85,162, 82,169,234,164,243,127, -221,143,101,101,101, 80, 87,230, 64,167,211,213,171, 89, 80, 80, 80, 34,151,203,183,133,134,134,110, 90,189,122,181,229,230,205, -155,159, 63,122,244,168,152,166,233,138, 58, 55, 49,162,142, 29, 59, 74, 55,110,220,104, 21, 26, 26,250,156, 97,152,109, 41, 41, - 41, 69,127, 98, 81, 26,229,237,237,189,119,200,144, 33,210,247,223,127, 31,161,161,161, 80, 40, 20,139, 0,212,204,100,100,242, -242,242, 62,253,234,171,175, 78, 44, 92,184, 16,106,181,122,227,169, 83,167, 86,198,196,196,204,172,101,194, 94,194,194,194,194, -142,203,229, 34, 38, 38,166, 24,192,211,166, 60,125, 76, 76, 76, 54, 69, 81, 86,114,185,188, 67, 82, 82, 82,131, 7,154,154,154, -118,148, 74,165,200,200,200, 64, 35, 13,115,114,102,102, 38, 17, 8, 4,148,141,141,141,115,245,177, 13, 98, 98, 98,242,233,247, -223,127,207,141,136,136,192,138, 21, 43,210, 83, 82, 82, 38,213,138,162,197, 68, 71, 71, 7,245,235,215,239,192,194,133, 11, 93, - 63,255,252,115, 42, 62, 62,126, 86, 76, 76,204,178,198, 52, 29, 29, 29,103, 78,155, 54, 13,219,182,109,195,142, 29, 59,102, 1, - 56, 92,231,144, 3, 95,125,245,149,137,153,153,217,182, 25, 51,102, 96,207,158, 61,147,158, 61,123,246, 77, 67,122, 25, 25, 25, - 11,199,141, 27,183,252,249,243,231, 33,250, 92, 80,125,142,151,203,229, 35,252,252,252,172, 8, 33, 8, 13, 13,205,218,182,109, - 91,121,113,113,241,143, 10,133, 34,162, 78, 36,238,232,153, 51,103,230,189,255,254,251,136,136,136,216, 30, 25, 25, 73, 20, 10, -197,247, 77, 36, 65,129,170,117,174,220,171, 35, 88,105,248,253, 64,118,215,234,247,116,125,242,148,159,112,241, 56,135, 39,186, - 26,119,243,226,171, 78,158, 65, 60, 75, 19, 41,108,157,205, 97,106,200, 7, 1,112, 47, 69,137,235,151,206,106,114, 20,169, 81, -250,204, 32,172,209,124,194, 23, 71, 73,204, 29, 95,109,239,209,139,235,228,236,130,129, 61, 59,155,152,201,120, 80,105, 8,126, -139, 43,194,181,200,211,154,156,236,180, 8,118, 6,225,159, 23, 88,253, 47, 69,184,130,184, 92,238, 23,159,126,250,233,142,135, - 15, 31,238, 72, 72, 72,216, 17, 19, 19,179, 99,205,154, 53, 59,130,131,131,119,248,249,249,237,160,105,250, 11, 84,141,157,168, - 27, 17,243,250, 51, 52,251,244, 1,119,226, 96,172, 89, 53,147, 91, 30,182,198, 94,147,123,105, 44, 33,247,103,145, 85, 51, 65, - 90,145,206,214,242,103,105,122,114,185,220, 51,142,142,142,215,247,237,219,119, 48, 38, 38,102,183,169,169,105,230,154, 53,107, -190,159, 51,103, 78,184,181,181,245, 77, 30,143,119, 14, 64,231,150,166,211,202,202,234,141,183,222,122,139,156, 62,125,154,188, -249,230,155,196,198,198,102,104,107,243,222,189,123,247,172,123,247,238,145,135,105,101,228,141,181,113,164,231,130, 91,164,231, -130, 91,100,240,178,155,228,219, 3,103,201,138, 21,193,196,203,203,235, 92,115, 52,187,116,233,146,144,147,147, 67, 8, 33,228, -249,243,231, 36, 62, 62,158, 92,190,124,153, 28, 61,122,148,236,216,177,131,132,132,132, 48,157, 59,119,222,219, 28,205, 30, 61, -122, 60,127,242,228, 9,121,144, 90, 70, 70,173,190, 83,157,206,155,100,216,138,104, 18,126,242, 58, 89,181,106, 21,241,240,240, - 56,212,152,166, 92, 46, 31,191, 96,193, 2,197,243,231,207, 53,254,254,254,145,117,247,251,250,250, 30,203,203,203,211, 44, 93, -186, 52,219,198,198,102,202,159, 93,150,204,204,204,174,166,167,167,147,164,164, 36,242,201, 39,159, 16, 14,135, 83,111,227, 73, -211,244,246,185,115,231,146,167, 79,159,146,204,204, 76, 34,151,203, 99, 27, 73,231, 48, 75, 75,203,219, 0, 70,233,153,158, 97, -150,150,150, 55, 1,140,110, 44,239, 14, 14, 14, 15,210,211,211,137,135,135,199,243,198,196,156,157,157,211,210,211,211,137,139, -139, 75,134, 30,231,243, 53, 43, 43,171,104, 0,107, 1,136, 26,185, 25,253,216,218,218,250, 42,128, 15,244,208, 28,233,234,234, - 26, 3, 96,118, 19,249,126,207,201,201, 41, 14,192,107,127,246,117,247,244,244,188,150,145,145, 65,118,238,220, 73,228,114,249, -194,198, 62,212,174, 93,187,159,143, 31, 63, 78, 20, 10, 5,241,241,241,137,209, 51,157, 92, 0,125, 80, 53, 14,206, 26, 85, 11, -143,242, 0, 88, 1,232, 11,160, 31,170,158,192,161,119, 29, 98,230, 18,104,104,229, 53,228,132,199,171,179,159, 79, 93, 23, 65, - 22,238, 77, 36,159,253,152, 68,230,134, 94, 33,254,195,230, 62,183,233,252,218, 9, 51,151, 64,195,230,106,202,189,135,158,236, - 60,244,227,231,111,175, 59, 79,150,236,123, 74,130, 15, 36,145,143,182, 68,146,128, 17,115,243,237, 58, 15,255,201,210,107,160, -228, 47,174,231,255, 43,154,245,254, 70,254,237, 70, 75, 0,224, 53,169, 84, 26,186, 98,197,138, 29, 55,110,220,216, 49,108,216, -176, 29, 2,129, 32,180,186, 98, 16,180,224, 2,180,185,230,224, 0, 72,167,141,160,119,175,158,197, 85, 31,219,220, 73,179,106, - 38, 72, 27,164,243,159, 82,160,123,241,120,188,107,222,222,222, 17, 82,169, 52,183, 93,187,118,151,121, 60,222, 77, 0,189, 91, -155, 78, 43, 43, 43,243,119,222,121,135,121,246,236, 25,153, 50,101, 10,209,163,251,170, 73, 77,123,123,251,254,163, 71,143,214, -164,101, 21,146,203,113,105,228,196,165, 7,100,255,137,107,100,199,129,179,100,203, 55,123,201,192,129, 3, 43,173,172,172, 28, -155,163,233,224,224, 48,120,196,136, 17,133,121,121,121, 36, 62, 62,158, 92,186,116,233,133,185,250,230,155,111, 72,231,206,157, -243,109,109,109,109,154,163,233,232,232, 56,114,210,164, 73, 26, 69,126, 25,185,241, 32,139,252,118, 35,145, 28,187,112,135, 28, - 56,113,141,236, 61,240, 19,233,211,167, 79,133,185,185,185, 85, 83,154,114,185,124,220,216,177, 99,159,184,186,186,126, 91,143, - 25,248,106,236,216,177, 41, 54, 54, 54,147,255,162,178, 52,216,214,214, 54,158,207,231,159, 4, 48,185,137,207,141,231,114,185, -199,173,173,173,111, 1,120,253, 47, 40,243,195, 44, 45, 45,175, 3, 24,161,135, 97,187,222,128,193, 99, 27,197,170, 50, 57,172, - 75,151, 46,113,214,214,214,155,208, 68,151,175,173,173,173, 72, 46,151,127,225,227,227,115,205,218,218,122,116, 51,211,105, 87, -125, 99, 59,178,250, 21,132,170,181,175, 90,156,119, 51,151, 1,195,109,125, 70, 28,179,233,252, 90,138, 77,231, 97, 41,118,190, - 35,143,153,185, 12, 24,222, 90, 77, 59,223,145, 63,219,116, 25,150,106,215,101,120,178,131,239,200, 99,230,157, 6, 12, 97,205, - 16,107,176,254, 44, 12, 1,140,167,105,122, 59,128,241,104,122, 86,141,215, 95,161, 57,184, 15,108,223,127,147,115,106,209, 84, - 94,110, 27,166,243,159, 82,160, 71,114,185,220,168,234,138,172,205,210,233,236,236,252,253,140, 25, 51,116, 14, 14, 14,219,218, - 74,211,221,221,125,211,240,225,195,213,223,125,247, 29,249,229,151, 95,200,247,223,127, 79, 62,249,228, 19,210,183,111,223, 74, - 87, 87,215,169, 45,209,244,246,246, 94,221,191,127,255,188,240,240,112,114,240,224, 65,178,125,251,118, 18, 18, 18,194,248,248, -248,228,184,186,186, 14,107,137,166,151,151,215,119, 35, 71,142, 84,239,219,183,143, 92,184,112,129, 28, 60,120,144, 44, 91,182, -140,244,233,211,167,194,197,197,229, 13,125, 53, 59,116,232,208,144,193,135,175,175, 47,143,173,112, 89, 77, 86,147,213,100, 13, -214,127,215, 96,213,192,253, 3, 46,192, 63, 69,243, 63,251, 35,145,203,229,226,182,214,180,177,177,233,236,233,233,121,190, 91, -183,110, 5,254,254,254, 57, 94, 94, 94, 71,229,114,185,125, 43,211,233,227,235,235,123,216,199,199,231,137,175,175,239,125,111, -111,239,111,107,150,153,104, 69, 58,187,121,123,123, 95, 12, 8, 8, 40,244,247,247,207,246,240,240, 8,175, 19,185, 98,203, 18, -171,201,106,178,154,172, 38,107,176,154,109, 64,234,242, 71, 60,198,227,159,162,249,159, 69,161, 80, 40,219, 90, 51, 51, 51,243, - 78,102,102,230, 43,109,156,206, 88,133, 66, 49,166,141,211,121, 35, 51, 51,179, 47, 91, 10, 88, 88, 88, 88, 88,244,129,102, 79, - 1, 11, 11, 11, 11, 11, 11, 11, 75,219, 66,161,225, 48, 95,115,158,148,221,146, 80,225, 61, 86,147,213,100, 53, 89, 77, 86,147, -213,100, 53,255,115,154,117,181,235,142,101,173, 59,251,247, 59,176,180,201,133, 97, 53, 89, 77, 86,147,213,100, 53, 89, 77, 86, -243,191,167,249,175,130,237, 34,100, 97, 97, 97, 97, 97, 97, 97, 97, 13, 22, 11, 11, 11, 11, 11, 11, 11, 11,107,176, 88, 88, 88, - 88, 88, 88, 88, 88, 88,131,197,194,194,194,194,194,194,194,194,194, 26, 44, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22,150,255, 10,132, 61, 5, 44, 44, 44, 44, 44, 44, 44,172, 23,105, 29,108, 23, 33, 11, 11, 11, 11, 11, 11, 11, 11,107, -176, 88, 88, 88, 88, 88, 88, 88, 88,254, 25, 6,139,237, 26,100, 97, 97, 97, 97, 97, 97,249, 43,249, 87,122,145, 62,213, 25,235, -195, 94, 95, 22, 22, 22, 22, 22, 22, 22,214,139,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,180, - 28,246, 73,227,172, 38,171,201,106,178,154,172, 38,171,201,106,254,231, 96,103, 17,178,176,176,176,176,176,176,176,176, 6,139, -133,133,133,133,133,133,133,133, 53, 88, 44, 44, 44, 44, 44, 44, 44, 44,172,193, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 13, 22, - 11, 11, 11, 11, 11, 11, 11,203,223, 6, 10, 13,207, 4,184,215, 12,157,150,204, 38,184,199,106,178,154,172, 38,171,201,106,178, -154,172,230,127, 78,179, 41,237,123, 96,249, 67,140, 23,171,201,106,178,154,172, 38,171,201,106,178,154,255, 61,205,127, 21, 92, -246, 20,176,176,252,179, 33,135,193,129,101, 39, 39, 48,196, 6, 92,129, 2, 23,238, 62,165,130,193,180, 90,211,198,195, 17, 42, -141, 21,196,162, 92,252,122, 39,169,181,154, 44, 44, 44, 44,172,193, 98, 97, 97,249,231, 32,119,115,133, 14,235,192,129, 28, 68, -157,136,158, 30,235,128, 7,173, 11,177,155,185,185, 66,195,172, 1,151,182,131, 74,253, 24,189, 59,173, 7,226, 31,176, 39,155, -133,133,133, 69, 63,254,146, 65,238,126,126,126,209,126,126,126,171,251,244,233, 35,100, 47, 1,203, 31, 69,159, 62,125,132,126, -126,126,171,253,252,252,162,255,173,121, 36,119,189, 36,208,234,134,168, 52,140,237,153,168, 66,203,242, 10,157, 43,248,218,161, -228,170,139, 97,171, 52,121,212,171, 21, 26,198,225,135,223,202,173,202, 42,180,238,160,209, 42,205, 26, 60, 61, 61,141,253,253, -253,207,116,233,210,197,156, 45,161, 44, 44, 44,172,193,106, 99, 24,134,241,181,180,180,156,167, 84, 42, 83,186,118,237, 58,226, -191,116,194,187,117,235, 22,213,189,123,247,236, 30, 61,122,100,247,232,209, 35,166,169,237,255, 70,228,114,185,171,151,151, 87, -138,135,135,199,227,218,219, 45, 58,191, 30,232, 22, 52,121,133,153,199,200, 62,173,253,142,174, 93,187,142, 80, 42,149, 41,150, -150,150,243, 24,134,241,253,215,158,204, 50,198, 10, 52,167,223,131,228,114, 73, 86,161,198, 42, 58,190, 92, 10,194,233, 11, 53, -228,173,210,100, 72,255,184, 68,165,193,181,167, 22, 86,151,239, 85,202, 64,232,126, 32,148,117,107,147, 43, 16, 8,102, 17, 66, - 6,242,120,188,185,108,245,251,159,199, 11,192, 8, 0,254,109,168,249,121,167, 78,157, 50, 0,124,196,158, 94,150,127,140,193, -122,211, 9, 61, 39,180, 71,228, 88, 39,148,140,107,143,210, 73,237,113,229,141, 14,104,113, 67,120,244,232, 81,113, 88, 88,152, -165,135,135, 71,120, 64, 64,192,149,174, 93,187,186,180, 68,199,207,207,239,140,159,159,223,152,186,219,186,118,237, 58,174,246, - 54,127,127,255,251,254,254,254, 69,126,126,126, 79,245,209,245,245,245,125,226,235,235, 91,230,231,231,247,164, 78,195, 61,206, -223,223,255, 76,157,239, 27, 83,119, 91,131, 39,156,166,237,142, 31, 63,110,149,141, 59, 80, 0, 0, 32, 0, 73, 68, 65, 84,121, -242,228, 73, 75, 46,151,107, 85,119,251,137, 19, 39, 94,218,222,130,243, 49,221,207,207, 47,170, 78, 94,222,173,187,173, 9,115, - 18,229,235,235,251,110, 29,221, 40, 63, 63,191,233,109, 97,174,122,247,238,125, 37, 54, 54,214, 65, 42,149, 26,215,222,103,109, -102, 60, 40,234,196, 87,243,166,142,121,117,150,133,251, 40,239, 22, 26, 43,151,128,128,128, 43, 30, 30, 30,225, 97, 97, 97,150, - 71,143, 30, 21,255, 91,127,188,228,161, 59, 31, 90,166, 55,195, 16,139, 7, 79, 43, 44,134,190,246, 38, 55,238,137,210, 66,163, -213,153,130,226,244, 37, 23, 29,133, 45,210,212,104,130, 24, 66,172,206,199,241, 45,250, 14,255,144, 19,113,151,107,161,209,233, -204,160, 65,159,150,104,214, 42,135, 60, 14,135, 51,111,198,140, 25, 52, 69, 81, 31,118,232,208, 65,240, 95,170,108, 3,188, 96, -219,191, 43,231,166,175, 59,122,182,161,172,167, 68, 34,185, 13,192,245, 31,118, 58,124, 1, 72, 0,252, 2,192, 10,109, 51, 92, -101,243,170, 85,171, 62,189,119,239,158, 77,251,246,237, 87, 2,224,176, 77, 60,203,223,222, 96,141,115, 66,176,149,181,237,217, -165,155,247,247,254, 62, 50,201,240,235,227, 49, 6,243, 22,134,244,180, 54,177, 56, 53,169, 3,214, 55,242,209,123,141,220,201, -226,233,211,167, 8, 13, 13, 21, 5, 7, 7, 7, 26, 25, 25,221, 9, 8, 8,216,226,238,238,110,208, 68,114, 94,210, 36,132,244, -228,241,120,223, 7, 4, 4,236,169,169,176, 41,138,234, 41, 20, 10,191, 11, 8, 8,248,161,166, 27,178,107,215,174,237,111,222, -188, 41,163, 40,202, 74,159,116, 6, 4, 4,200,163,163,163, 37, 64, 85, 36,160, 79,159, 62, 66,127,127,255, 48, 91, 91,219, 29, - 64, 85, 5,217,161, 67, 7, 65, 64, 64,192, 30,123,123,251,157, 20, 69,245,212, 39,239, 52, 77,195,216,216, 24,251,247,239, 7, -135,243,191,223, 63, 69, 81, 48, 54, 54,198,143, 63,254, 8,138,162,154,125, 62,221,221,221, 13,252,252,252,142,202,229,242, 45, - 12,195,244, 0, 0, 47, 47, 47,137,191,191,255, 17, 91, 91,219,173, 53,219,244,209, 36,132,244,224,243,249, 91,252,253,253,143, -120,121,121, 73, 0,128, 97,152, 30, 92, 46,119,179,159,159,223,209,230, 92, 35, 31, 31,159, 25,222,222,222,153,222,222,222,153, -174,174,174,107,173,172,172, 46,110,219,182,205,172,118,222,107, 34, 87,217, 57,249, 5, 81,183,238,199,207,155,241,102, 95, 7, -123,171, 73, 70,157, 71, 26,233,147,247,154,252, 7, 4, 4,108, 49, 50, 50,186, 19, 28, 28, 28, 24, 26, 26, 42,122,250,244, 41, - 4, 2, 1, 90, 82, 62, 91,193,159,167,153, 79, 89,130, 34, 3,226, 83,148,162,118,206,126, 6,150,110,111,194,194,152, 43,188, -246,176, 76, 10, 14, 94, 1, 79, 98,209, 50, 77,238, 43,247,147,148, 98,147,246, 67, 36,254,221,123,131, 50,112, 17, 94,140, 45, -147,129, 75,183, 76,179,214,125, 90,143, 30, 61, 4, 3, 6, 12,128,141,141, 13,199,200,200,104,210,223,234,124,254,129,154, 1, - 94,176,149,138, 4, 55, 54,173,250,216,207,198, 76,242,179,158, 38,171,169,116,122, 90, 90, 90, 70,124,245,213, 87, 93,165, 82, -233, 37, 61, 77,214,223,225,124,250, 2,224, 3,184, 94,253,255, 3, 0, 65,173,212,220, 28, 28, 28, 60,119,241,226,197, 40, 41, - 41,193,212,169, 83,101, 0, 54,233,171,105,104,104,232,236,237,237,253,131,135,135, 71,106,151, 46, 93, 84,110,110,110, 21,174, -174,174,201,158,158,158,123,133, 66,161,211,191,189,124,254,141, 52, 27,190,249, 35, 68, 64, 8,233, 71, 8,121,141, 16,242, 10, - 33, 36,160,250,111,255,234,215,107,132,144, 1,117,222,253,171, 63, 91,179,191, 91, 3, 26,175,213,253, 92,173,207,212,253,255, -165,191,245, 49, 88,164,206,251, 11,198,180, 71,160,153,181,237,167,159, 31,187, 37,102, 18,226, 16,253, 78,127,196,127, 52, 10, -226, 39,113, 88, 52,123,145, 88, 42, 53,153,253,102,123,244,107,201, 9,123,252,248, 49,194,195,195, 97,110,110, 78,237,218,181, - 75, 56,102,204,152, 89, 50,153, 44,205,207,207,111,146,190, 26, 28, 14, 71,183,103,207, 30,195,145, 35, 71,142, 55, 53, 53,189, -239,235,235,219,158,166,105,221,190,125,251, 12,199,141, 27, 55, 70,165, 82, 61,236,218,181,171, 75, 76, 76,140,238,214,173, 91, -160,105,253,130,118,209,209,209,218,211,167, 79,191,136,138, 16, 66, 30,174, 95,191,126,252, 79, 63,253, 36, 53, 50, 50, 98,124, -125,125,219,219,219,219,223,255,252,243,207, 39, 29, 57,114, 68, 42,147,201,244,154, 97, 69, 81, 20, 42, 42, 42, 32, 18,137, 94, - 50, 82, 20, 69, 65,169, 84, 66, 40, 20,234,157,198, 90,145, 1, 79, 51, 51,179, 71,235,214,173, 27,121,236,216, 49,177, 84, 42, -133,159,159,159,187,177,177,113,252,134, 13, 27, 70,253,252,243,207, 98,169, 84,170,183, 30,159,207,199,143, 63,254, 40,153, 56, -113,226, 8,161, 80,248,200,207,207,207,157,207,231,227,192,129, 3,146, 73,147, 38, 13,147, 72, 36, 15,125,125,125, 61,245,209, -210,104, 52,203,111,221,186, 37,191,120,241,162,220,209,209,113,206,215, 95,127,109,197,227,241, 0, 0, 58,157,238,165,200,213, -164,209, 3,187,205, 93,254, 85,132,178,162, 82,181,102,209,180,190, 60, 29,186,235, 25,181,155, 36,147,201,210,198,140, 25, 51, -107,215,174, 93, 66,115,115,115, 42, 60, 60, 28,143, 31, 63,254,215,222, 25,145,195,224,128,209,249, 2,232, 24,243, 88,105,222, -165,247, 36, 46,114,126, 65,128,187, 33, 55, 50,166,212,146, 16,226, 8, 45, 9, 32, 23,251,112,155,165,201, 33, 93, 64, 49, 46, -103, 99, 41,243,192, 1,147,184, 41, 41, 41,112,114,239,203, 57,113, 11, 86,132, 16, 39, 48,240,107,142,102,109,120, 60,222,138, -177, 99,199, 26, 36, 39, 39, 35, 48, 48, 80, 34, 16, 8,150,183, 69, 20,143, 92,119,117, 36,145, 46,125,201, 85, 23,121, 75,211, -246, 71, 71,174,100, 34,193,245, 3, 63, 28,180,241, 14,154, 78,237,248,216,209,212, 66,202,251,185,149,145, 44, 79, 75, 75,203, - 11, 55,110,220, 48,123,245,213, 87, 17, 28, 28,108, 33,147,201,244, 53, 89,127,117,228,170,198, 92,137, 81,213, 61,152, 1,192, -174, 21,154, 91,131,131,131,231, 46, 89,178, 4,215,175, 95,199,134, 13, 27, 48,100,200, 16,152,152,152, 52, 89,127,188,245,214, - 91,146,192,192,192,232, 17, 35, 70,196,205,157, 59,119,210,137, 19, 39,236,247,236,217,195,127,251,237,183,133, 99,199,142,117, -252,248,227,143,167, 12, 29, 58,244, 94, 64, 64,192,141, 55,223,124, 83,212, 66, 99, 64, 17, 66, 40, 54,158,163,223,233,106,200, -139, 0,232,188,120,241,226, 0,138,162, 78, 44, 94,188,216, 15,128, 57, 69, 81, 39, 0, 88, 0,176,168,254, 91, 80,231,221,130, - 16, 50,160,214,126,179,250, 52,106, 94,181, 63, 87,243,153,122,190,163,238,223,122, 69,176,250, 0,184, 84,247, 0, 46,193,170, - 25,243, 86,139,158,237,253, 18,138, 31, 54,131,206,203, 0,167, 48, 11,149,151,126,129,230,242,113, 76,238,209, 67, 44,166,168, - 53, 45, 57,147, 82,169, 20,124, 62, 31, 9, 9, 9,120,248,240, 33,134, 14, 29,202, 15, 13, 13, 53,246,244,244,252, 46, 48, 48, - 48,206,207,207,175,179, 62,134,197,217,217, 25,227,199,143, 23,124,244,209, 71, 29, 68, 34, 81, 12, 33,132,231,228,228,132,113, -227,198,241, 23, 46, 92,216, 78, 36, 18,221, 98, 24,134, 47,145, 72, 26,139, 14,253, 78, 87, 44, 22, 3, 0,207,197,197,229,118, -120,120,184, 83,207,158, 61,185,103,207,158, 69,113,113, 49,215,213,213, 53,238,192,129, 3, 29, 3, 3, 3,185, 87,174, 92, 65, - 89, 89, 25,209, 87,183,172,172, 12, 98,177,248,119, 6,171,172,172,236,119,198, 75, 15,115, 49,189, 99,199,142,183,194,195,195, -237,130,130,130, 56, 17, 17, 17, 40, 41, 41,129,163,163,227,237,240,240,112,187,158, 61,123,114,162,162,162, 80, 82, 82,162,183, -166, 64, 32,128,147,147, 19,198,142, 29,203, 91,176, 96,129, 29,143,199,187, 37, 16, 8,224,232,232,136,177, 99,199,242,231,207, -159,111, 39, 16, 8,110,232,217,101,200, 1, 0,173, 86,139, 49, 99,198, 24,136,197, 98,164,165,165,129, 97, 24, 48, 76,149, 39, - 85,228,230,223,189,122,235,222,163,121, 51,199,244, 41,171,172,172,252,245,226,237,135, 30, 46,142,118, 20, 69,218, 53,145,247, -206,129,129,129,113,158,158,158,223,133,134,134, 26, 15, 29, 58,148,255,240,225, 67, 36, 36, 36,128,207,231,163, 57,166,242, 31, -135,137,135, 25, 56, 24,152,146,169, 18, 10, 12,236,164,134,230,157,128,231,151,208,222, 70, 8, 16, 74,116,235, 81,185, 1,104, - 50, 16,200, 51,107,150,166,142, 25,152,148,161, 18,170,197, 94,134, 54,182, 14,200,207,207,135,189,147, 27, 42, 97, 33,136,186, - 87,102, 8,210, 76,205,106,186,116,233, 18,100,111,111,111,221,174, 93, 59,228,229,229,193,217,217, 25,134,134,134, 38,190,190, -190, 3, 91, 92, 19, 95,116, 20,162, 8, 61,161,166, 54,129,162, 87,130,112,215,129,155,235, 75,162,125,121,127, 59,115,245,227, - 65, 91, 51,185, 27,112,239, 29, 88,153, 10,176,107,113, 23, 83, 11,169,176,165, 38,203,211,202,202,234,194,141, 27, 55,204, 69, - 34, 17,162,163,163,225,225,225,129, 47,191,252,210,194,196,196,228,239,108,178,106,155, 43, 83, 0, 74, 0, 12,128, 9, 45,140, -134, 80, 0,182,175, 94,189,122,206,146, 37, 75,112,237,218, 53,216,218,218, 34, 39, 39, 7, 65, 65, 65, 41, 5, 5, 5,141,182, - 75, 30, 30, 30,118, 9, 9, 9, 25, 31,127,252,177,111, 88, 88,152,216,192,192, 0,133,133,133,216,185,115, 39, 22, 47, 94, 12, -138,162, 64, 8,193,238,221,187, 37,211,166, 77, 11, 72, 76, 76,204,112,116,116,212,107,248, 70,181,169, 18, 16, 66, 36, 0, 12, - 0, 72, 8, 33,162,217,179,103, 11, 0, 8,171,205,165, 8, 0, 15, 44,117,169,215,139, 0, 48, 95,191,126,125, 8, 33,100,216, -250,245,235, 67,106,181,157, 39, 26,105,111,107,155, 38, 0, 64, 93, 13, 66,200,176,218,239,181, 63, 75, 8, 25, 70, 8, 25, 86, -251,243,141,125, 95, 99, 6,235, 98,117,198,234,218,201,206,214,237, 59,161,240,183,195, 16,115,168,151, 94,116,210, 93,216,139, -184,208, 16,226,217,146,179,104,104,104,248,226, 69,211, 52, 20, 10, 5, 56, 28, 14,150, 47, 95, 46,154, 61,123,182, 55,159,207, -191, 22, 20, 20,180,174, 41,195, 2, 0, 55,111,222,132,179,179, 51,181,100,201, 18, 89,159, 62, 85,119,177,119,238,220, 65,199, -142, 29,169,181,107,215, 74,135, 15, 31, 78, 73, 36, 18,189,163, 67, 52, 77, 67, 44, 22,163,111,223,190,212,158, 61,123, 12,133, - 66, 33, 78,158, 60,137,188,188, 60,188,250,234,171,220, 61,123,246, 24,138, 68, 34, 68, 70, 70,162,168,168, 72,111, 93,138,162, - 80, 89, 89, 89,175,193,170, 47,178,213, 24, 61,122,244,216,101,109,109,189, 37, 44, 44, 76, 40, 22,139, 17, 17, 17,129,162,162, - 34,140, 31, 63, 94,251,227,143, 63,138,100, 50, 25,162,162,162, 80, 84, 84,212,162, 82,126,243,230, 77,116,236,216,145, 90,186, -116,169,184, 71,143, 30, 26, 0,136,141,141,133,139,139, 11,181,116,233, 82,177, 76, 38,219,220,179,103,207, 93,141,105, 48, 12, - 3,133, 66,129,123,247,238, 33, 41, 41, 9,121,121,121,200,205,205, 69, 73, 73, 9,180, 90, 45, 0, 64, 82, 82,124,114,251,158, -227,113, 6, 98,177,164,155,183,139,195,141,152, 7, 57, 6, 98,177,196,197,201,193, 21, 8,174,247,196, 6, 5, 5,173,227,243, -249,215,102,207,158,237,189,124,249,114, 17,135,195,129, 66,161, 0, 77,211, 47,149,171,127,233, 45, 30, 5,158,202, 5,132,242, -189,254,160,212, 52,104,208, 4, 62,114, 79, 3, 68, 3, 80, 92,244,235,102,199,253,249, 74,153, 21, 24,116, 6, 31,110,132,128, -210, 75,147,171,118, 6, 40,191,179,209, 90,179, 94,131,102,241,211,211,211,193,231,243, 33, 20, 10,225,211,243, 13,238,129, 8, -141, 53,128, 46,224,161,147, 62,154,181, 17, 10,133,159, 77,155, 54,205, 32, 35, 35,227,133,230,144, 33, 67, 12, 36, 18,201,138, - 22,155, 43, 90,210, 3, 90, 50,247,126,146,210,113,237, 94,133,219,211, 52,165, 27, 8,230, 67,163,241,105,173,201,114,112,112, -232,235,226,226,146,212,174, 93,187, 94,173, 52, 87,215,194,127, 60,104,107,106, 93,101,174,160, 43, 7, 56, 98, 88, 91,154, 96, -215,138,190,166, 22, 50,113,115, 77,150,167,149,149,213,249,235,215,175,155,139, 68, 34,220,190,125, 27, 2,129, 0, 34,145, 8, -222,222,222,216,177, 99,135,133,169,169,233,223,197,100,153, 0, 24, 4,224, 77, 0,111,212, 50, 87, 78, 0,250, 3, 24, 8,192, - 26, 64, 36,128, 56, 61, 53,123,113, 56,156,147,157, 59,119,206,228,114,185, 15, 66, 66, 66, 62, 88,184,112, 33,182,110,221,138, -190,125,251, 62, 93,180,104, 17,226,227,227,181,229,229,229, 35, 0, 52,218, 16,150,150,150,254,178,116,233, 82,163,215, 95,127, -189,230,127, 92,185,114, 5,251,246,237,131,129,129, 65,109,179,132,225,195,135, 99,250,244,233, 38, 42,149,234,104, 99,154,150, -150,150,175, 68, 68, 68,184, 0, 16, 84, 27,168, 26,131,101,112,238,220, 57, 99,145, 72,100, 26, 16, 16, 32,171,222, 46,121,253, -245,215,205,184, 92,110, 47,176,160, 41, 47,210,144,193,169,107,128,234,219, 87,159,121,106,113,253,219,200,247, 53,102,176,250, - 86, 23,244,223,161,126,158, 13, 33,116,144,112, 40,136,185, 84,213, 59,135,130,152, 98,192, 45,200, 6,213,194,224,167,161,161, - 33,164, 82,233,239,140,150, 82,169, 68,105,105,169, 94, 70,163,102, 44,143,137,137,201,139, 70,187,166, 97, 53, 53, 53, 69,101, -101, 37, 40,138,130,129,129, 1, 12, 12, 12,154, 21,193, 18,137,170, 34,194, 81, 81, 81,184,122,245, 42,184, 92, 46, 76, 77, 77, - 1, 0,183,111,223,198,221,187,119, 33, 16, 8, 96,102,102,214, 44, 93,181, 90, 93,111, 23,161, 74,165,106, 86, 23, 33, 77,211, -168,168,168, 32,183,111,223,198,189,123,247, 32, 20, 10, 97, 97, 97, 1,129, 64,128,180,180, 52, 60,122,244, 8, 2,129, 0, 22, - 22, 22, 45,186, 62, 50,153, 12,133,133,133, 96, 24,166, 38,154, 7,153, 76,134,210,210, 82,208, 52,173, 87, 58, 25,134, 65, 70, - 70, 6,242,242,242,144,154,154,138,220,220,220, 23, 38,171,166,139,176,165, 80, 20,133,210,210, 82, 40,149,202,223, 25,171,154, -114,245,175,228,138,167, 17, 40,222,171,185,133, 26, 97,110,169,192,200,170,227, 0, 32,239, 52, 64,113, 0,158, 9,186,251,182, - 71, 74,150,206, 32, 62, 85, 37,130, 6,131,112,193,213, 68, 47, 77, 14,111, 96, 78,145, 70,152, 92,104, 33,115,247,234,138,156, -156, 28, 8,133, 66, 8,133, 66,248,117,127, 5, 73,153,140,228,193, 51,165, 4, 4,175,234,165, 89,141,143,143, 79, 7,177, 88, -220,195,215,215,151,202,206,206,134, 80, 40,132, 72, 36, 66,143, 30, 61, 64,211,180,119,151, 46, 93,220,154, 85,193, 37,118, 16, -128, 39,233, 14,144,185,143,158,149,219,252, 28,165,116, 29, 62,234, 13,211,205,135,114,220, 30, 61,171,112,130, 74,187, 0,101, -234,174, 45, 53, 89,142,142,142,125, 12, 13, 13, 79,124,246,217,103, 78, 66,161,240,116,187,118,237,130, 90, 84,191, 9, 57,223, -126, 54,119,130,173, 73,141,185,210,150, 1, 28, 49,192,145, 84,153, 44, 43,115,172,249,104,128,169,132,207,251, 63,125, 53,197, - 98,241,129,237,219,183, 91,212,152, 43, 62,159, 15,145, 72,244,226,229,235,235,139,229,203,151, 91,152,154,154,238,255,139, 75, -169, 41,170,198, 85,221, 1,112, 20,192,249, 90,230,202, 25,192,255, 85, 71,173, 98, 0,164,232,169, 25, 56,120,240,224,136,167, - 79,159, 14,141,139,139,147,103,101,101,185,205,159, 63, 31, 91,182,108,193,194,133, 11,247, 19, 66, 92, 15, 31, 62,236,115,243, -230, 77,111,125, 34, 98, 89, 89, 89, 19, 23, 45, 90,148,151,151,151, 7, 0,240,242,242, 66, 97, 97, 33, 22, 44, 88,128,185,115, -231,214,148, 93, 0, 64, 78, 78, 14, 54,110,220,152,157,149,149, 53,181, 49, 77,157, 78,151,246,211, 79, 63,245, 80,169, 84, 14, -213,134, 82, 8, 64,146,146,146, 98, 84, 86, 86, 38,227,112, 56, 82, 3, 3, 3,153, 80, 40, 52,152, 54,109, 26,255,193,131, 7, -238, 90,173, 54,131,245, 84, 47,209,160, 23,169, 47,210,212,208,182,150, 30,175,175,201,106,174,193,138, 4,208,251,119, 6,134, -194,157,212, 91,145, 48,245,240,125, 57,130,197,165, 32,145,202,144,148,145, 6, 62,168,251, 45, 72,224,239, 26, 67, 67, 67, 67, - 40, 20, 10, 44, 90,180,168,252,135, 31,126,184,171, 82,169,122, 92,190,124,121,177, 62, 17, 44, 75, 75, 75,164,166,166,146, 47, -190,248,162,248,244,233,211,218,154,109,105,105,105,100,217,178,101, 37, 7, 15, 30, 36,205,233, 34,172,137, 96, 69, 70, 70,146, - 21, 43, 86, 20,101,102,102, 18, 83, 83, 83,152,153,153,225,220,185,115,218,197,139, 23, 23, 37, 38, 38, 18, 83, 83, 83,152,154, -154, 54,203, 96,105,181, 90,136,197,226,151, 12, 10, 69, 81,208,104, 52,191,139,108, 53,198,213,171, 87,223, 41, 42, 42,250,120, -193,130, 5,202,135, 15, 31, 18, 11, 11, 11, 88, 88, 88, 96,239,222,189,220, 41, 83,166, 40,239,220,185,243, 98, 91, 75, 48, 55, - 55,199,227,199,143, 73, 72, 72,136,242,252,249,243, 60, 0,176,176,176, 64,124,124, 60, 89,181,106,149,178,176,176,240,227,171, - 87,175,190,211, 68,133,131,164,164, 36, 20, 23, 23, 67,167,211,161,178,178, 18,185,185,185, 72, 79, 79,127, 97,176,148, 6,178, -193, 31,190, 61,188, 75,153, 82, 89,126,227,110, 66,106, 55, 95, 15,203, 50,165,178, 60,225, 89,234, 99, 32,184,222,177,109,151, - 47, 95, 94,172, 82,169,122,252,240,195, 15,119, 23, 45, 90, 84,174, 80, 40,234, 45, 79,132,144,127, 95,245, 67, 24,107, 16,210, -235,202,221, 82,227,129,175,141, 19, 80,197, 55, 1, 77, 41,192, 51, 1,120,198,224,138,204, 48,228, 21, 31,206,158, 95,139,173, - 65, 49,129, 16, 9,155, 30,223,194, 16, 43, 48, 76,208,185,219, 21, 38,189,134,206, 22, 60,127,254, 28, 52, 77,191, 48, 88, 18, - 3, 3,188, 50,236, 45,122,247,175,149,214, 96, 72, 79,112, 56,122,143,153,225,243,249,159,190,253,246,219,252,130,130,130,151, - 52,197, 98, 49, 70,141, 26, 37,148, 74,165,203,244,206,250, 67,119, 62,178,133,221,193,144,185,241,201, 74,155,159,174, 42, 93, -231, 47,223, 45,246,236,220, 13, 51, 71, 90,138,215,134,229,120,196, 37,150, 59,129,214,205, 67,185,202,143,236,104,158,201,106, -215,174, 93,144,129,129,193,201, 99,199,142, 73,250,245,235,135,249,243,231, 27, 8,133,194,211,142,142,142,189,155,123,153,202, - 74,116, 31,174,218, 28,150,125,231,208, 32, 64, 91, 82,109,174,254,247,202, 41, 98,176,124,123, 68,145, 70, 71, 38,232,171,169, - 84, 42,167,188,251,238,187,249, 71,143, 30,253,157,185, 18,137, 68,120,246,236, 25,214,174, 93,251,252,249,243,231, 83,255,226, - 82,234, 3, 32, 22, 64, 69,117, 52, 66,130,170,153,130, 61, 0,156, 3,160, 3,144, 13, 64,161,175, 32,135,195, 89,248,245,215, - 95,115,149, 74, 37,166, 79,159,142,180,180, 52,100,102,102, 98,233,210,165,207, 24,134,153, 82,173, 25, 7,224,145, 62,122,106, -181, 58,190,160,160, 96,216,224,193,131, 11, 11, 10, 10,208,185,115,103, 12, 27, 54, 12,214,214,214,176,177,177,193,136, 17, 35, -224,226,226,130,252,252,124, 76,152, 48,225,121,110,110,238, 32, 0,141,206, 66,207,207,207, 79, 60,116,232, 80,226, 7, 31,124, -224,159,150,150,230, 5, 64,174,209,104, 76,149, 74,165, 84,171,213, 26,202,100, 50,179,174, 93,187, 90,204,156, 57,211,248,214, -173, 91, 30,233,233,233,165,205, 48,152,255, 21,234,245, 34,173,184, 17, 63,217,154, 72, 85,125, 17, 48,125,169,105,225,169, 58, -239,255, 43,132,192,242,125, 71,246, 85, 8, 28, 93, 96,228,214, 5, 18,145, 8, 98,161, 0, 98, 99, 83, 84, 48, 12,190,127,150, - 85, 94, 70,200,178, 22, 36,254,165,136, 3,195, 48,216,177, 99, 71,197,154, 53,107, 10,179,178,178,102, 94,190,124,185,203,237, -219,183,239,232, 99,132,138,139,139,113,248,240, 97,229,158, 61,123,158, 42,149, 74, 95, 62,159,175, 81,169, 84,216,191,127,127, -197,150, 45, 91,146,203,203,203,253,121, 60,158,186, 57,221,111, 53, 99,176,120, 60,158,166,162,162,194, 55, 60, 60, 60,241,228, -201,147, 74,153, 76, 6, 30,143,167, 41, 47, 47,247, 14, 11, 11,139, 15, 15, 15, 87,202,100,178,102, 25, 55,134, 97,234,141, 96, -233,116, 58, 8,133,194,102,141,193,186,125,251,246, 78,181, 90,221,109,255,254,253,233,187,119,239,174,144,201,100, 0, 0,141, - 70,227,191,111,223,190,244,111,191,253,182,178,185, 99,145, 84, 42, 21,116, 58, 29,194,194,194, 42, 15, 28, 56,144,174,213,106, -253,107,182,237,222,189,187, 34, 44, 44, 44, 93,173, 86,119,187,125,251,246,206,166,180,116, 58,157,174,176,176, 16, 92, 46, 23, - 79,159, 62,173, 20, 10,133,224,112, 56, 72, 72, 72,120, 97,176, 44,205, 77, 61,122,250,123,185,125,249,237,225, 72, 3,161, 80, - 56,168,175,159,251,131,132,148,116, 66,168,228, 38,242,126,231,242,229,203, 93,178,178,178,102,174, 89,179,166,112,199,142, 29, - 21, 12,195,188, 84,174,254,149, 6, 75, 13, 9, 40,136, 19,210, 42,165, 34,158,134, 66,214,255, 1,124,147,106,131, 85,245,178, -177,181,195,173, 71,229, 82, 80, 16, 64,165,177,108, 82, 83, 67, 12, 64, 65,114, 47, 5, 82, 46, 95, 76,101,101,101,189,136, 52, -213, 24, 34,167,142,238,136, 73, 40, 53, 4, 69,132,168,154, 90,175,119, 69,101,104,104,200, 85, 40, 20, 47,180, 94,104, 58, 57, -113, 52, 26,205, 32,189,243,158,171,147,131, 97, 62,124,156, 90, 97,243,255,236,125,119,120, 20,213,254,254, 59, 51,219, 75, 26, -233, 64, 8, 4, 82, 72, 8,189,247, 34, 85,186, 40, 69,148, 34,213,139,160, 32,162,136, 34, 29,164,138, 82,148,222, 4, 66,239, - 32, 29, 41, 1, 66, 73, 2, 41,164,247,108,218,110,182,151,153,243,251, 35, 9, 2,166,108,128,251,189,247,231,157,247,121,246, -201,206,236,204,155,211,230,156,119, 62,159,207, 57,231,232,159,134,128, 47,190,219, 38,147, 49,133, 64,242, 58, 52, 10,240,194, -204, 49, 77,197,115,183,168, 26,221,141,214,215, 7, 69, 38,163,145,214,238,183,139,186,117,235,118,148,203,229,103,142, 30, 61, - 42, 87, 40, 20, 72, 72, 72, 64,147, 38, 77,176,112,225, 66,185, 92, 46, 63, 93,167, 78,157,174,213,169,166, 59,177, 72,209, 22, -179,237,102,111, 78,203,126,148,196,150, 8, 43,186, 68, 92,169,212, 4,159,204, 59, 81, 84,168, 49,190,119, 59,210,118,169, 26, -180, 15,212,106,117,175,121,243,230,229,231,229,229,189, 36,174, 82, 82, 82,202,132, 64, 87, 0, 81,255,225, 86,170, 64, 73,240, -122, 16,128, 6, 0,154, 2,176, 1, 40, 46, 21, 66,213, 70, 72, 72, 72,115, 95, 95, 95,108,220,184, 17, 91,182,108, 41, 92,189, -122, 53, 8, 33, 8, 8, 8,112,124, 93,206,220,220,220,240,152,152,152,222, 77,155, 54,125,178,126,253,250,116,111,111,111,110, -194,132, 9, 24, 63,126, 60,220,221,221,217,117,235,214,165,118,234,212, 41,242,217,179,103,239,232,245,250,199,246, 52,247,188, -188,188,155, 91,183,110, 13,239,209,163,135,195,216,177, 99, 61,183,108,217,226,245,244,233,211, 58,122,189,190, 86,110,110,174, -226,218,181,107,146,157, 59,119,122, 69, 71, 71, 39, 25,141,198,112,148, 31,208,253,191,138, 10,181, 8, 0, 85,169,208, 49,191, -242, 87, 85,197,111,246,222, 91,238,119, 59,174,171, 16, 85,206,184, 57,152,136,155, 31,214, 47, 90,177,112,219,230, 47, 71, 55, -110, 40,171, 91, 47, 24,172,182, 8,143,179,179,177, 51, 75,173,183, 18,242,115, 88, 34, 46,191,174,192, 98, 24, 6,231,206,157, - 99,247,238,221,107, 33,132,252,170,209,104,190,125,242,228,137,206, 94, 30,142,227,152,113,227,198,105, 11, 11, 11, 15,103,101, -101, 77, 78, 72, 72, 48,119,236,216,145, 25, 53,106,148,182,160,160,224, 56, 69, 81, 19,238,223,191,111,234,208,161, 67,181, 6, - 91,138,162, 32, 18,137, 64, 81, 20,238,221,187,151, 20, 28, 28,220,232,246,237,219,191,196,198,198,126, 64, 8, 97, 34, 34, 34, -210,154, 55,111,222,228,230,205,155,235,159, 62,125, 58,146,227, 56,198, 94,222, 50,235,216,139, 66,138,166,233,231,162,142,170, -166,207, 53, 34, 34, 34, 42, 56, 56, 56, 56, 60, 60,124,199,196,137, 19,123, 3,144,223,187,119,239, 73,104,104,104,195,219,183, -111,239,248,248,227,143,251,148,190, 65,218, 55,126, 91, 44, 24, 60,120,176, 94,173, 86,159, 45, 46, 46, 30, 19, 25, 25,169,111, -222,188,121,217,185,115, 69, 69, 69, 99,170, 81, 71, 11,126,250,233,167,239, 74,235,106,199,154, 53,107, 62,153, 53,107,150,123, - 70, 70,198,115,129,149,155, 87,112,169,253,187,211,216,252, 34,181,121,219,154,217,195,100, 82,137,248,219,101,219,174, 88,153, -231,211,184,171, 18,153,123,130,131,131,143,133,135,135, 47,186,123,247,238,196, 81,163, 70,137,122,247,238,205,136,197,226,127, -166,192, 18,179, 26, 16, 58,115, 88,119, 23,201,186,159,183,138,198, 14,172, 47, 13,109,232, 91, 34,174, 68, 46,184, 27, 93,132, -239,126, 60,200, 45,159,226,158, 8, 14,105, 96, 17, 83, 37,167, 82,160,129,209,154,251, 73,111,145,100,233,175, 51,252, 58,244, -255, 82, 18, 28,218,250,185, 16,122, 26,117, 15,107, 22, 79,227,150, 79,174,145, 8,142,202,132,205, 62, 43, 1, 0,216,108,182, - 97,203,150, 45, 59, 59,118,236, 88, 69,163, 70,141,158,115, 38, 37, 37, 97,249,242,229, 6,147,201,244,158,125,125, 6, 40, 92, - 23, 52, 99, 89,214, 99,207,249,124,255,207, 63,155, 44,151,209, 5, 64,226,202, 18,241, 34,116, 66,179, 80, 55,124,247,153,151, -112,230,210, 19, 33, 55,126,241,211,194, 42, 10, 6,144,105, 15,191, 64, 32, 56,181,100,201, 18,185, 76, 38, 67, 92, 92, 28,100, - 50, 25,164, 82, 41, 90,180,104,129,181,107,215,202, 63,253,244,211, 51, 93,186,116, 81, 94,189,122,213, 86, 29,145,213, 38,144, -109, 55,123,195,179, 91, 43,166, 59,123, 53, 9,114, 67, 94, 49,240,201,247, 39, 11, 11, 52,134,247,171, 41,174,158,139,172,162, -162,162, 94, 51,102,204, 56,191,125,251,118,215,224,224, 96,164,165,165, 97,196,136, 17,249, 42,149,170,219,127,129,184, 2, 0, - 29,128, 90, 0, 98, 81, 18,139, 20,143,146,184,164,215,158,229, 25, 29, 29, 29,145,146,146,226, 61,126,252,120,104, 52, 26,151, -225,195,135, 35, 33, 33, 1,177,177,177, 15,222, 36,161, 70,163,241,110,122,122,122,227,207, 63,255,124,244,236,217,179, 59, 56, - 56, 56,212, 35,132, 16,141, 70,147,200,178,236, 13, 0,123,129,106,237,195, 73, 0,196, 63,123,246, 44,241,217,179,103,158, 59, -118,236,112, 46, 45, 3,160, 36,176, 95, 93,106,189, 99,193,163, 58, 99,242,221,255,196,189,255, 39, 24, 86, 15, 29,198,214,167, -174,142,242, 67,241, 72, 63,104,199, 54,160,236, 89,104,180,220,221,182,155, 55,111, 78,108, 54, 27, 57,127,254, 60,233,219,183, -175,174, 99,199,142,213, 89,104,244, 37,206,174, 93,187,254,109,161,209,174, 93,187,158,109,221,186,245, 75, 11,141,118,233,210, - 37,170, 75,151, 46,234,206,157, 59, 39,216,147,206,206,157, 59, 63,237,208,161,131,174,115,231,206, 47, 13, 36,173, 90,181, 26, -212,189,123,247,151, 76,142,173, 91,183, 30,248,234,185,138,242,254,206, 59,239,164,197,198,198,146,212,212, 84,210,175, 95,191, -231, 29,127,143, 30, 61,210, 30, 62,124, 72, 98, 99, 99, 73,159, 62,125, 50,171, 83,158, 47,162,101,203,150, 19, 58,117,234,116, -243,149, 52,127,242,234,185,202, 56, 59,117,234,116,179, 85,171, 86,159,188,122,174, 26, 11,141, 86,152, 78,111,111,239,192,102, -205,154,229,174, 89,179,134,248,249,249,229,190,248, 91,163,174,227,230, 21,105,180,154, 89, 11, 54, 30, 40,103,161, 81,187,118, -110,111,209,162, 69, 64,199,142, 29,111,244,237,219, 87,119,254,252,121, 98,179,217, 72,243,230,205,201,235,150,231,107,224,223, -206, 73,158, 4,139,200,159,193, 29,200,181,224, 83, 79,119,249, 62, 25,211, 75, 97,186,191,183, 15, 33, 79,191, 36,183, 15,142, - 39,237,130,197,236,159,191,248,196,146,107, 13,207,144,235,129,157,201,153,114, 23,244,252, 59,231,181, 6,157,200,181,134,103, -162,119,248, 62, 25,220,217,221,188,119,215,102, 18, 31, 31, 79,142, 31,217, 75,218, 6,203, 75, 57,131,207,147,107,193,221,236, -225,124,229,153,239,208,174, 93, 59,237,129, 3, 7, 72, 92, 92, 28,185,112,225, 2,105,223,190,189,190, 89,179,102,221,236,205, - 59, 33,160,200,213,144,193,182,203, 65, 55,190, 30,161, 44,250,164,183,212, 52,162,155,216, 60,168,157,200,210,171,185,200,214, - 33, 88,192, 54,241,163,185, 96, 31,144, 94, 45,100, 38,114, 45,232, 58,185, 17,220,219,222,116, 6, 4, 4,164,214,173, 91,151, - 84,244, 9, 12, 12, 84,149, 77,160,169,110,189,183, 9,132,239, 59,173, 36, 89, 23,127,237, 70, 6,116,118,200,111, 27, 42,232, -254, 22,218, 82, 51, 55, 55,183,188,237,219,183, 19, 79, 79, 79, 21,128, 70,255, 13,237,179, 20, 53, 0, 12,194, 95,211,216,149, - 0,186, 1,240,123, 3,206,246,189,122,245,178, 70, 68, 68,144,132,132, 4,114,246,236, 89,210,161, 67, 7, 27, 74, 98,118,240, - 95,148,119,158,147, 71,133,102,184,183, 93, 1,145,229, 9,172,222,189,123, 27,174, 94,189,170, 53,155,205,147,238,223,191,127, -252, 77, 57,255, 29,233,252,119,112,118,235,214,237, 38, 77,211,126,165, 83,128, 51, 47, 94,188,216,188, 84, 20,222,100, 24,198, -175,212,186,151,121,233,210,165,230,255,180,188,191, 40,178,104,154, 62, 7,192,148,145,145,241,124,182,147,123,200,192,118, 53, - 92,156,186, 21, 21,169, 31,228, 68, 29, 63,243, 38,233,108,209,162,197, 64,177, 88,188,185, 75,151, 46,202,115,231,206,201, 34, - 34, 34,168,127, 82,121,146, 51,245,197,112, 16,183, 4,139, 57,145, 9,250,122,223,110,205,171,223,191, 87,123,225,142,131,215, -184, 21, 83, 61,158,181, 15, 81, 36,129,226,150,131, 53,133, 83, 93, 83, 76,118,115,202,169,214,128,112,206,195,103,122,223, 89, - 27, 10,253,223, 25,240, 9,115, 34,108, 51,247,227, 84,215,103,237, 67,148,169, 0,150,131,211,223,178,151,243, 85,145, 37,145, - 72,206,140, 28, 57, 82,185,111,223, 62,131,209,104,236,255,224,193,131,203,213,201, 59,185, 25, 84, 7, 54,106, 49, 64,124,170, - 46, 54, 58, 30, 54,110, 33,213, 61, 38,245,191,161,222,219, 4,194, 87,225, 32, 57,169, 55,217,102,216,105,185,178, 39,157,205, - 92, 92, 92,118, 23, 22, 22, 14,183,211,114,245,127,153,119,119,148,172,115, 37, 40, 29,107,162, 80, 69, 12,147, 29,156, 29, 25, -134,249,170,126,253,250, 77, 18, 18, 18, 34, 89,150,253, 17, 37,179,206,254,241, 99,199,255, 8, 39, 47,176,222,180, 2, 58,118, -236,120,159,101,217,179, 34,145,104,241,213,171, 87, 77,124,227,227, 57,255, 29,156, 93,186,116,145, 88, 44,150,185, 12,195,244, -185,113,227, 70,139,127, 90,222, 95, 20, 89,247, 99,117,126, 75,247, 20,248,126, 49,220, 37,213, 14,113, 85, 57,103,169,200, 10, -143,209,215, 93,190,183,216,119,230,112,101,170, 29,226,202,174,188, 55,111,222,188,131, 84, 42,221,105, 48, 24, 38,216, 33,174, -254, 46,176,158, 4,139, 80,104,173, 5, 27, 19, 10, 26, 21, 47,211,207, 17, 61,132, 76, 36,178,144, 67,189,255,196,194, 63, 71, - 60, 39,207,201, 11,172,255,107,252, 71, 86, 61,174, 96,176,227,193,227,173,162, 84,188,207, 43,253,252,243,222,142,250, 38,152, -201,153,250,247,224, 32, 94,214, 34, 80, 54,237,240, 98,153, 30, 28,149, 14,138, 91, 91,133,184,170,138, 51, 28,114,235,178,214, -129,178, 25, 71, 22,203,244, 0,178, 65,176,166, 10,113,101, 23, 34, 34, 34,254,132,253,110,162,191,167, 47,248,137, 5, 64, 18, - 33, 72,198, 15,149,188, 32,126, 15, 66, 81,124,240, 48, 15, 30, 60,254,199, 4, 22, 15, 30, 60,222,162,200,122, 18,124, 23,249, -204, 44,176,240,131,196,150,130, 34, 91, 54,213, 55,197,252,134,156,119,144, 79, 77, 7,135, 64,136,109,207, 80,100,126, 35,206, -183,158,239, 18,241, 84,177,128,154,207,183, 13, 30, 60,120,240, 2,139, 7, 15, 30,111, 34, 54, 74,172, 58,233,165,159,255, 90, - 78, 30, 60,120,240,248,159,234,155, 81,241, 76,128,234,248, 86, 95,103, 54, 65, 36,207,201,115,242,156, 60, 39,207,201,115,242, -156,255,115,156, 85,113,243,177, 93,255, 38,225,197,115,242,156, 60, 39,207,201,115,242,156, 60,231,255, 30,231, 63, 10, 52, 95, - 4, 60,120,240,224,193,131, 7, 15, 30,111, 23,255,209, 24, 44,153,107,128, 55, 4,116, 19,138, 35, 13, 1,128,208,212, 83,216, -184, 71,134,252,184,172, 55, 38,247, 8,149, 43,133,204, 94,173,149, 29,133,220, 72,253, 91, 74,114, 71, 0,190, 40,217, 59,234, - 6,223,124,120,240,224,193,131, 7, 15, 30,213, 18, 88, 1,237, 6, 95, 87,200, 20,254, 0,192, 17, 2,150, 3, 52,133,185,183, - 82, 31,255, 49, 4, 0,188, 67,186, 31, 17, 43,220,218,113, 28, 1, 71, 8,108, 28,129,205,100,136,207,123,114,218,174,157,231, - 21,238,129, 67,186,191,211, 99,104,255,254,239, 6, 53, 14,109,220, 0, 0, 30, 71, 62,126,118,242,228,169,152, 75,127, 80,135, -117,170,216, 35,111,146, 49,165, 80, 56,175, 85,235, 54,189,239,222,189, 51, 87, 11,124,243,150,202, 75, 68,110,244,219, 69,117, - 60,221,131,111, 58, 60,120,240,224,193,131, 7,143,106, 11, 44,133, 76,225,127,233,216, 86,143, 35,215,211, 0, 0,239,180,240, -194, 15,171,182, 15,222,242,248,143, 24, 0,104,215,185,111,224,183,159,143,193,205, 40, 21, 8, 33,104,230, 95, 3,131, 63,252, -212,174,127, 42,245, 12,110, 53,108,216,123,163,102,205,154, 57, 48, 62, 62, 62,121,223,190,125,215, 1,160, 83,231,206,254, 75, -150, 44,249, 96,165, 75, 13,201,254,176, 67, 25,198,156, 39,175,181,127,144,194,179,190, 91,195, 32,255, 79,246,254,246,163,160, -123,191, 17,227, 83,173,154, 53,186,156,132,188,215,225, 18,215, 14,241,115, 18,138,126,160,104, 90, 96,210, 22,120, 0,128,139, - 79,179,147, 18, 7, 15, 86, 42,149, 61,214, 25, 12, 59,115,159,156,221, 2,126,195, 78, 30, 60,120,240,224,193,131, 71, 85, 2, - 11, 0,148, 82, 1, 98,146, 74,188,117,206,114, 96,226,199,239, 33, 39, 39, 59,208, 98,227, 48,122,248, 16, 68,196,100, 33, 54, - 73, 5, 66,128,192,218,118,239, 37, 12, 6, 92,203,113,227,199,117, 57,119,254,124,248,188,111,231,237,162, 40,220, 2,128,205, -191,254,214,238,187,239,191,155, 48,250,227,209, 61,195,194,194,162, 0,188,150,192,162, 69,206,107,150, 47,254, 65,153,145,103, - 52,126, 54,243, 75,102,214,231,211, 87, 2,248,248,117,196, 85,176, 79,237,197,215,207,135,201,229,114, 57,182,108,217, 34, 1, -142, 97,254,172,113,210,119,251,247, 7, 11,166,253,143,191,236,107,114, 94, 44, 30,175,215,235,135,228,199,253,145,197, 55, 41, - 30, 60,120,240,224,193,131, 71,165, 2,139,229, 8,158, 38,102,151,136, 22, 70,128,119, 59, 56, 97,229,162,175, 96, 48,177,120, -152,168,198,209, 63,211, 96,210, 21,129, 16,160, 67,168, 71,121, 54,156,151,166, 90,174,252, 76,214,156, 17, 11,135,223,138, 85, -212,173,225,226,226, 18, 23,190, 75,247,221,135, 57,193, 2,155,229,254,162, 19,173, 18, 21, 14,226,246, 7,195,194, 66, 6,244, -239, 47,118,116,116,154, 45,114,238, 89,155, 51, 90,102,170, 83,174,170, 43,226,124, 21, 10,207,144, 46, 3,222,237,247,174,151, -151, 39, 59,114,201,173,167, 63, 79,107, 81, 39, 32,176, 97,215, 88,171,190,139, 46, 39,246,106, 5,183, 69,150, 39,174, 26,120, -123, 46,190,122, 54, 76,110, 52, 26,145,152,152,136,252,252,252,146, 31, 41, 10, 52,205,160,150,183, 55,214, 47,157, 41,223,119, -164,113,139,121, 75, 55, 30, 3,208, 26,127,149,194,191, 99,154, 41,207,201,115,242,156, 60, 39,207,201,115,254, 83, 57,255, 81, - 40,155, 69, 88,174,123,235, 89, 90, 62, 98, 18,179,208,188, 97, 45, 52,168,235,133,240,184, 66,236,189,148,134,109,231,147,113, -233,145, 10,156,208, 1,217,197, 20,226, 83,114, 16,155,156, 87,165,143,140, 17, 11,135,207, 88,161,158, 21,226,167,105,123,229, -192, 52,212, 84,198,133,124,181,170,104, 26, 35, 22, 14,247,240,114,222, 55,107,250,228, 15, 29,228, 50,177,217,100, 70,189,186, - 62,210, 41, 19,198,141, 21, 41, 21,251,236,205,140,155, 91,176, 66, 44, 83,236, 90,252,221, 76,233,234, 35,113,169, 58, 51, 90, -120,157,249, 0, 0, 32, 0, 73, 68, 65, 84,209,133,221,204, 76,152, 53,231, 59, 13, 35,148,253,234,230, 22,172,176,135, 71, 92, - 59,196,207,215,213,117,241,141,115, 97,114,139,197,132,204,204, 76,152,205,102,216,108,182,231,215, 16, 0,197, 6, 27, 18,179, - 12,232,210,185, 3,211,188, 89,163,134,238, 13,251, 78,226,155, 20, 15, 30, 60,120,240,224,241, 90,248, 71,133,218, 84,184, 76, -131,206,160,139,255,104,210,172, 92,127,135, 44,243,144,110,193, 0, 1, 84, 89,201,136, 14, 63,135,184,251,231, 81,172, 74, 5, - 33, 64,221,186,117, 32, 50, 36,154, 55,111,218,144,203,217,140,241, 21,241, 13,236,233, 93, 59, 62, 67, 65,175,152, 85,231, 86, - 92,108,150,219,212, 89,219, 17, 23,155,229,182, 98, 86,157, 91,241, 25, 10, 90, 46, 98,219,127, 60, 98, 16, 53,168,127, 31,124, -245,213, 44, 12,234,223, 7,179, 38,127, 64, 73,197,194,182,246,102,198, 40,150, 46,155, 51,111,129, 67,118,145,197,124, 39, 86, - 99, 82,202,229,146, 63,159,234,244, 38, 34,179, 12, 28, 62, 81,101, 18, 9, 22,216, 35,174,188, 29, 29, 23,223,252,227,144,156, - 16,130,244,244,116, 88, 44, 22, 88,173, 86, 88,173,214,231,215, 21,105,173, 72, 85, 25,144,146,171, 71,100,178, 6,125,251,244, -145, 11,132,226, 15,249,231,131, 7, 15, 30, 60,120,240,224, 81,161,192,138,187,117,180, 83,196,197,221,158,121, 57, 57,106,133, - 68, 0, 1, 77, 35, 55, 61, 1, 59, 87, 77, 71,216,207, 51, 81,148, 21, 15, 66, 0,153,136,129, 73,155,175,206,126, 24,230,153, - 95,201, 12, 66, 10,214,158,191,236, 78,170,151,156, 69,156,246,158,213, 10, 1, 96,239, 89,173, 48, 57,139, 56,253,178, 59,169, -158,152,168,192,177, 44,250, 15,122, 15,187,118,108, 65,187,238,131, 16,118, 45, 21,122,131,197,174,253,207, 36, 30, 1,117, 61, -188,188,222,155, 49,186,135, 67,235, 64, 23,101,128,143, 51,195, 8, 69, 54,177, 80,194,157,184,167,206,232,221,127, 8, 45, 87, - 56,246,145,120, 4,212,173,140,199, 73, 40,250,225,207,243,135,228, 12,195, 32, 53, 53, 21, 22,139, 5,102,179, 25, 38,147,233, -185, 5, 75,163,183, 34, 35,223,128, 52,149, 30,169, 42, 61,158,164,106, 32, 86,184,192,106,181,242, 11,175,241,224,193,131, 7, - 15, 30, 60,236, 91,104, 52, 51,183, 0, 53, 28, 24,184,215,172,135, 81,211, 87, 2, 0, 88,206, 6,130,146,229, 25,236,177,233, - 17, 8, 47,252,107,116,189,196,186,222,148,250,195,190,114, 3, 0,124,216, 87,110,168,235, 77,169,255, 53,186, 94,162,158,117, -177,176, 44,139, 27, 81,185, 88,177,255, 9,230,109,127,132,115,247,236,143, 25, 23, 8,101, 51,150, 47, 93, 34, 23, 48, 20, 21, -149, 82,172,205, 42,176,105, 69, 34,161, 69, 40, 22, 88,181,102,202,144,172, 98,243,251,188, 63, 53,137, 97,132, 83,171, 76, 43, -225, 64, 8,129,201,100,130,217,108,126,254, 41,179, 96, 21,104, 45,200,204, 55, 34, 85,101, 64, 90,233, 39,167,208, 0, 66,248, -137,132, 60,120,240,224,193,131, 7,143,151, 5, 86,185,187,211,115, 0,226,146, 85,144, 8, 56,212,174,211,224,175, 43, 8, 64, - 8, 96,181,113,118,253,163,227, 23,178,210,253,106,233,200,236,149,169,237, 66, 27,186, 62,154, 50,210,231,105,104, 67,215, 71, -179, 87,166,182,243,171,165, 35, 86, 78,204, 18, 66, 64, 56, 2, 66, 8, 8, 1, 56,206,126,193, 66, 81, 76,219,102, 13,125, 5, - 63,236,139, 79,153,186, 33,246, 41, 37, 16, 88,197, 98,177,205,211, 73, 70,213,118,147, 9,138, 77, 48, 6,133, 54,183, 82, 64, -243,202,120,212, 86,203,247, 29,122,191,175,183, 88,108,240,241,241,129,217,108,126,238, 34, 44,179, 96, 21,105, 45,200, 40, 48, - 34, 77,101, 64,170,202, 0,131,145,197,227,167,201,160,104,134, 15,250,227,193,131, 7, 15, 30, 60, 94, 31,229,106,145,255,159, - 5, 22,245,194,231,111,240,245,241,196,157,200, 20,212,241,148,192,209,201, 1, 79,159,165,131,102, 4, 96,104, 10, 54,214,254, -114, 32,102,235,254,213,179,157, 86,166,102,177,183, 55,236, 78,136, 79,205, 98,111,175,158,237,180,146,152,173,251,129, 18,193, -198, 17, 2,238,133,191,118,115, 19,206,195,205, 73, 34,184,251, 76, 91, 64, 49, 2,147, 72, 40, 48,121,187, 74, 40,111, 55,153, -192,199, 85, 38, 86, 72,133,180,183,167, 39, 7, 66, 60, 43,227, 49,167, 71, 39,102,107, 52,115, 59,245,122, 79, 47, 20, 10,225, -231,231,247,220,130, 85, 38,176, 74, 44, 88, 6,164,170,244,200, 46, 48, 66, 38,161,241,240,214, 69, 61,203, 90,119,242,207, 6, - 15, 30, 60,120,240,224,241, 90,168, 84,139,252,255,134,170,183,202, 33, 4, 10,185, 12, 28, 45,197,141,123,207,208, 48,184, 9, -182, 31, 15, 71,131,208, 54,200, 42,182,129, 84, 99, 59,195, 89, 63, 25, 34, 0, 68, 12,236, 41,175, 61,164,111,173,158, 4,194, - 11, 27,126,215,164, 3, 64, 80, 91,148, 10,171, 18,203, 21, 71, 74,150,137,168, 70,173,100,166,230,234,148,245,188, 20,120,146, -102, 54, 57,200,165, 54,103,185, 72,224,238, 36,102, 28,101, 2,129, 64, 68,211, 69, 69,170, 98,128,202,172,138,203,156, 30,157, -152,138,144,185,157,251,142, 88,124,253,236, 1,121,253,250,245,241,240,225,195,231, 46, 66,189,209, 6,170,216, 2,161,140, 32, -160,150, 18, 79, 35,174,179,249,185, 25,209,133,177,103,183,240,207, 7, 15, 30, 60,120,240,224,193,195, 46,117,196,113, 4,238, -110, 46,144, 40,157,144,168, 50, 67, 11,119,168, 13, 20, 56, 22, 96,109,149,138,160,114,131,190,143, 95,200, 74, 63,118, 33,111, -235,241, 11, 89,233, 47,107,185,191,220,131,132,144,138, 92,132,161,229,235, 64,246,204,201, 11, 55, 10, 6,183,245,112,166,133, - 66,131, 88,194, 88,100, 82,161, 85, 46, 17,192,195, 73, 36,174,237, 34,146, 92, 57,245, 59, 77,113,228,146, 61,156,230,244,232, -196,164,220,220,185,221,251,143,212,123,122,121, 97,244,232,209,168, 83,167, 14, 0,160,134,130,134,175, 11, 13,129, 41, 27, 87, -143,111,213, 61,189,127,249, 62, 88,211, 16,188,108,214,228,119, 89,231, 57,121, 78,158,147,231,228, 57,121,206,255, 81,216,181, -217,115,125,111, 5,252,107, 41, 96, 52,123,194, 96,102,161, 51,217, 80,172,183, 66,173,183, 34, 57, 91,143,216, 43,111,158, 16, - 82, 42,176, 64, 40,112,132, 0, 84,137,155,144,216,105, 40,212, 9, 53, 43,151, 47,249, 97,196,129,131, 71,200,103,253,188,107, -223,137, 55,164, 73, 24,161, 89, 46,161, 5,142, 50,154, 77, 74, 76,202, 60,127,242,247, 70,122,169,126,140,189,105, 50,167, 71, - 39,198, 1,115,131,154,119,255, 1, 4, 2,179, 65,173,152,211, 33, 4,231,206,158, 50,136,111,220,183, 82, 2,113, 36,199, 90, -118,151, 90,174,248, 8,119, 30, 60,120,240,224,193,131,135,125, 2, 75,111,208,199,247, 28,250, 73,233,134,207, 4, 44, 91, 98, - 89, 98,203, 92,121, 28, 1,107, 49,196,191,105, 66, 88,142, 11,223,184,125,127,191,166,205,218, 48, 33,190, 14,208, 20,229,225, -222,157, 91, 54,194,113,183,236, 34, 72, 73, 49,217, 60,164, 31,188,255,222,224,223,199, 79,254, 76,219,169, 75, 55,185,171,171, -163, 45, 47, 55, 95,179,115,203,129,194, 35, 7,246, 52,162, 56,238, 35,164,164,152,170,147, 46,115,122,116,162, 25, 40, 91,223, -170, 59, 16,210, 69,151,249,104,128, 14,184,196, 55, 31, 30, 60,120,240,224,193,131,199,107, 9,172,248,219, 71, 59,253, 95, 36, -164,160, 32,103,244,238,223, 15, 47,218,115,224,120, 7,147,197, 82,139, 3,147,198, 90,173, 87, 37,197,249,223,217,203,161,203, -141,137,134,175,111,203,223,126, 94,249,249,175,191,172,238, 1,142,109, 0,138, 74,162, 56,114, 73, 43,213,143, 71,102,245,196, - 85, 57,200,163, 58,158,238, 5, 32,143,111, 58, 60,120,240,224,193,131, 7,143,215, 22, 88,255, 87, 40, 76, 8, 47, 46, 4, 62, -123, 99,162,148, 20,147, 22, 88,138,146,207,219, 70, 36,248,253,151,120,240,224,193,131, 7, 15, 30, 85,128,230,139,128, 7, 15, - 30, 60,120,240,224,193,227,237,130, 66,197, 51, 1,170, 99,169,121,157,217, 4,145, 60, 39,207,201,115,242,156, 60, 39,207,201, -115,254,207,113, 86,197,205,123,138,254, 77,194,139,231,228, 57,121, 78,158,147,231,228, 57,121,206,255, 61,206,127, 20,120, 23, - 33, 15, 30, 60,120,240,248,159,131,107,192, 0,165,107,192, 0,165,189,215,187, 5, 15,243,116, 11, 30,230,201,151, 28, 15,123, - 33,224,139,224,173, 64,130,146,109, 27, 45,255,169, 4, 56, 59,215,115,180, 57,184, 29,161, 57,211,114, 77,250,227, 11,111, 59, -127, 33, 33, 33,205, 0, 32, 58, 58,250, 1,128, 55,157,141, 9,185, 71,224, 72, 23, 71,231, 73, 22,206,204,234,117,250,141,186, -156,184,176,183,153, 96, 55,183, 96,133, 89, 34, 91, 1,138,244, 5, 1, 77,104,234, 34,163,177,126,161, 86, 63, 82, 87,118,159, -207,192, 37, 13,199, 15,123,247,219,173, 97,167, 22,165, 29,255,230,233,171,191,187,244,249,201,225,179,209, 61,102,255,188,255, -228,242,252, 19, 95,105,249,166, 95,125,248,116, 24,233,108, 19,120, 49, 89, 87, 87,229, 87,231,190, 90,129,109,163,132, 66,161, -187,197, 98,201,205,140,187, 99,215,219,115,237,160,118, 17, 12, 67,215,100,109, 92,122,122,236,173,150,124,233, 87, 13,153,119, - 80, 51,138,101,191, 34, 28, 43,228,192,172, 49,229,197,223,120, 19, 62,111,111,111,153,147,147, 83,103, 71, 71, 71, 31,185, 92, - 46, 45, 44, 44, 52, 20, 22, 22,166,166,164,164, 92, 2, 96,251, 79,228,209, 45,100,208,215, 12,141,239, 75,191,255,144, 23,125, -108,105,229,215, 15, 92, 68, 81,214,175, 75,191, 47,205,139, 62,254,237,127, 67, 93,121,132, 14,105, 3,194,125, 78,211, 76,123, -150,216,150,168, 34,143,111,168,206,253,109,219,182, 29,108,181, 90, 37,101,199, 66,161,208,116,251,246,237,163,252, 83,240, 31, - 18, 88,181,130,135,185, 88, 5,100,190,128,161,223,227, 8,113,200,126, 24,166,248,111,206, 96,157,214,163,239,209, 52, 93,251, -197,115, 28,199,165,167,134,239,126, 91,157,109,237, 85, 51, 90,124,149,147,111,208,252,184,231,233,194,138,196,135, 71,211, 17, - 55, 41,154,242,163, 40, 10, 52, 5, 48, 52, 5, 0,153,105,225,123,202,219,124,218,219, 81, 33, 8,212,232,108,145, 0,170, 28, -132,164, 53,252,107, 10, 92, 60,175,118, 29, 50,173,222,189,115,219,131, 89,139,165,135, 46, 55, 38,250, 45,228,205,189, 65,131, - 6,173, 24,134,113,157, 54,109,154, 8, 0,214,172, 89,227,207,178,108,254,179,103,207,238, 2, 80,189,150,184,114, 15, 26,189, -238,199, 31,118,245,237,219, 23,153, 42, 29, 86,172,217,208,245,236,201, 3,239,191, 53,145,229,221, 92,102, 19, 51,145,159,126, -254, 93,237,126,221, 90, 9,138,180, 86,156,190,116,123,116,216,182, 21,221,157,208,164,113,101, 34,139,211, 23,125,235,233, 64, -250,112,250, 34, 0, 24,249,183,246,175,180,190, 83, 67,142,190,222, 18,193,195,124,224,112,149, 73,105,249,209, 57,161, 72,228, - 75, 81,116, 73,189, 51, 20,232,210, 54, 96,179,154, 83,158,221,216,222,251,191,162,163,110,254, 97, 54, 5,202,149, 46, 77, 31, - 69, 1, 52, 77, 67, 64, 1, 32, 68,147,120,107,135,235, 91,248, 55, 78,161,254,206,141, 58,248,235,182, 94, 77, 44, 80, 10, 58, -207, 56, 69, 17,122, 67,234,245,213, 15,237,185, 89, 42,149,186,156, 56,113,194,189, 79,159, 62, 78, 30,141, 6, 93,181,231, 30, - 49,163, 13, 57,121,242,184,168, 79,159,222,213,104,159,129, 61, 65,211,187, 41, 64,200,113,100, 13,195,145, 3,218,252,216,103, -168,230, 98,194,238,141, 6, 45, 0,133, 96,187,111, 32,120,162,138, 58,246,221,107,150, 45, 35,243, 8, 26, 35,147, 74,103,249, - 7, 54, 12, 76, 78, 74,136,213,104,212,171, 13,185,177, 91, 75, 95,254,236, 6,101, 99,103,156,191,116,115,152, 64, 40,164,122, -119,107,165, 48, 1,189,171,203,241, 34, 60, 61, 61, 7,175, 95,191,190,126,187,118,237, 0, 0, 54,155,205,241,224,193,131, 94, - 11, 23, 46, 84,196,198,198, 30,126, 29,206,154, 53,107,214,114,114,114,170, 35,147,201,106, 1,128,193, 96,200, 80,171,213,169, -153,153,153, 25, 85,166,167,233, 48, 55,194, 90, 23,156, 61,252,171, 0, 0,122, 15,157,180,168,110,151, 89, 46, 20, 35, 52,148, -119, 61,107, 51, 43, 76,133, 73,159, 95, 60,177,157, 2,128, 30, 3,199,206,113, 11, 30,246,115,222,147,176,156,255,200,195, 58, -108, 24,227, 22,103, 25, 76, 17,234,139,230, 45, 90,180, 29, 58,168, 47, 66, 26,212,196,224, 17, 83,102, 1,168,150,192,178, 90, -173,146,176,176,176,218, 52, 77, 51, 22,139,197, 56, 98,196,136,220, 55, 73,154,127,135,143,110,130,162,124, 44, 54,219,111, 41, -183, 27, 44, 2,230,115,175,166,221, 59, 73, 48, 23, 20, 61,129,112, 92, 90,246,131,223,219,243, 2,171, 20,174, 1, 3,148, 86, - 1,137,236,218,169,173,235,215, 83,134,136, 55, 29,184,142,227,160, 50,178, 30, 30,172,245,223,154, 65,154,166,107, 31,219,187, -222, 67, 38, 97, 0, 0, 90, 3,139,161,163,167, 85,253, 0,183, 28,117, 5, 20,130,202,124,168, 44,107,147, 10, 4, 66, 35, 5, - 0, 84,201,236, 0,153, 76,124,123,102,219, 24,245,216, 1,126, 31,125,245,115,196, 14, 0,206, 0,178,203,237,180,104,186,246, -239,219,214,120,212,114,149, 66,192, 80,208, 26,108, 24,242,209, 23,108,121,130,109,235,220,118, 11, 70,247,173, 59,220,163,207, -161,161, 69,197,230, 51,149,165, 83,225, 25,220, 80,238,228,126, 97,232,196, 5, 53, 13,112,196,183,139, 86,123,220, 60, 31,118, - 61, 43, 35,197,146,154,158,174,183, 89,172, 49,249, 5, 89, 51,181, 89,113,113,246,118,212, 74,165,178,190, 82,169,108,218,164, - 73, 19,233,172, 89,179,132, 93,187,118,125,254,227,196,137, 19, 69, 87,174, 92,241, 94,185,114,101,191, 71,143, 30, 25,181, 90, -237, 67,173, 86,155, 0,128,181,183, 78,188,188,220,255,245,222,224, 1,232,254,222,167, 96, 57, 10, 19,166,206,192,185, 51,135, - 39, 3,120, 43, 2, 75,201,208, 63, 76,152,246, 77,237, 46,237, 90, 8,150, 29,140,135,147, 92,132,222,109, 90, 10, 36,204,108, -239,223,183,173, 92, 13, 53,198,149,103,185,226,244, 69,223,134,186, 89, 70, 12,108,239,135,227,191, 91, 70,160,199,151,160,229, -206,207, 45, 89,245,251, 76,115,144,176,185,235,107, 57, 51, 30, 18, 54,119,125,253, 62,211,254, 72, 56,187,190,184,178,180, 8, - 69, 34,223,173, 63, 47, 14,168,161, 20,129, 97, 40, 8,104, 26, 12, 67,193,100,102, 49,122,202,215,111,171,153, 51, 50,143,128, -126, 52, 48, 22, 37, 35,225,118, 67,110,220,233,234,212, 9, 69, 51,174, 7,183,173, 20,120, 56,137,193, 48, 20, 24,186,228,147, -148,109,192,103, 95,206,119,122, 83,161,222,183,131, 71,171, 47,135, 7,245,110, 27, 90,163,201,254, 91,148,115,219,190,195, 93, -243,140,178, 49,191, 31,187, 50,130,116,250,252, 14, 33,220,143,233, 55,214,157,175,140,196,100, 50,229,244,238,211,215,145, 18, - 40,228,127, 28,217,209,185,108,179,121, 43,203,253,181, 57, 60, 1,202, 94, 98, 56, 2, 76,252,100, 60,122,247,233,171,231,108, - 92,122, 53, 58,141,221,103,255,184,225,110,180, 18,172, 90,191,101,129, 78,157,183, 32,241,169,107,178, 86,157,247,185, 33, 55, -238,184,253, 74, 5,193,177, 55, 15, 14,217,123,242, 22, 66, 67,130,193,114, 37,251,171, 6,214, 86, 96,223,169,219,104, 24,212, -176,100,241,102,142, 32,200, 71,137, 46,239,126,244,154,197,219, 69,160,240, 84,237, 27, 60,124,236,176, 33,239,141,128,179,163, - 18,102,139, 41,240,210,249, 51,191,110, 92,191,162,131, 54, 59,102, 76,117,196, 33,199,177,226,191,190, 91,165, 0,132, 0,204, -175, 91,249, 53,107,214,116,111,213,170,213,243, 99,155,205,134,122,245,234, 33, 35, 35, 35,168,218, 47, 2, 30, 30,242,154, 53, -107,190, 59,115,230, 76,143,110,221,186, 9,221,221,221, 1, 0, 42,149,170,214,229,203,151,155,175, 90,181, 42, 55, 51, 51,243, - 84,110,110,174,190, 66, 81,193, 25, 69, 12, 17, 48, 18,137,172, 84,215,130,158, 53,109, 84, 19,119,119,247,114, 95,142,243,243, - 11,196,223,127,255, 29, 37, 16, 8, 75,174, 39,132, 38, 28, 91,225, 30, 35,237,218,181, 27,104,177, 88,164,229,253,150,103,115, -239,103,228,196,195, 81,186,153,177,128, 97, 10,179, 30, 30,114,183,251, 65,106, 60,176,151, 32,129,108, 28, 48,104, 80,221,193, -253,186,194,219,221, 9,151,110,199, 96,250,220, 85,176,218,216,181,175,213,121, 48,140, 32, 55, 55, 55,217,197,197,197,235, 45, -140,183,126,199,246,254,228,113,249,250,189, 57, 63, 75,126,159, 98,182,142,177,150,109,127,199,114, 4,242,124,145,176,243,160, -158, 14,174,181, 2,101, 91,126, 94, 38,228, 45, 88, 47, 86,132,152, 89,216,177,125, 43,215,175,103,140, 23, 47,220,114, 21,183, -206,159, 50,100, 61, 12,123, 43,226, 74,233, 30,216,142, 98, 4,147, 40,134, 81, 80, 52, 37,230, 88, 46,205,102, 54, 47, 50,228, -199,101,189, 41, 55,203, 1,135,254,172,166, 48, 39,196,255,215, 95, 86,121,120, 58, 75, 96, 48,219, 48,238, 95,243,176,121,237, - 2, 7,119, 39, 49, 76, 22, 22,219,143,221,205,107,162, 91, 77,198,246,243,251,104,241,214,168,195, 63,238,126,122,184,178, 78, -140,166,104,120, 56, 73,176,104, 95, 12, 28,229, 66,212, 80,138, 65,211,229,139,171,177, 3, 74, 56,139,138,205, 54, 0,226,138, - 58, 55,133, 87,163, 78, 14,110, 53,195,134,124,178,192, 61, 78, 69,129, 16, 51, 18,156, 36, 24, 58,122,138,115, 3, 47, 25, 20, - 82, 6,201,105, 89,245,190,156, 61,187,101, 36,161, 91,153,178, 99, 82,171,202,118,221,186,117,135,246,239,223, 95, 62,115,230, - 76,161,143,143, 15,118, 31, 60,231,219,115,216,103, 3, 50,178,243,125, 56, 2,120,122,212, 72, 27, 63,188,223,137,211,167, 79, -167,164,165,165, 9, 87,172, 88,209,230,200,145, 35, 33,217,217,217,118,191,137,178,132,192, 96,102,193,178, 28, 88,142,130,170, -232,181, 60,142,116,197,111,213,100, 80,175,174,173, 5,107,142, 38,160, 88,111,133, 76,196, 32, 62, 75,135,118,237, 90, 9, 14, -108,167,186,149,119,199,248, 97,239,126,235,233, 64,250, 12,108,239, 7, 15, 23, 57,182,253,188, 24,199,111, 38,246,201, 41,166, -176,158, 48,147,188, 37,130,158, 10, 46,107,125,215,150,254, 94, 61, 90,248,226, 94, 75,127,175,107,247,159,198,202,222, 95, 53, - 45, 67, 43,252,163,240,236,103,197, 21,213,123, 13,165, 8, 91,206, 37, 67, 33, 17, 66, 33, 21,148,124, 36, 2,208,244,155,109, - 24, 47,245, 14,246, 97, 56,118, 60,195, 8,198,143,248,224,253,154, 35, 71, 12, 35, 20,205,224,224,225, 19,131,246,236,217,157, -101,181,152,183,176, 52,179,213,152,245, 36,173, 74, 45, 64, 1, 30, 78, 98,124,249, 91, 36, 28,228, 66, 56,202,133,112,144, 9, -209,163,169,251,155,164,211,101,242,160,250,253, 38, 15,169,219, 45,168,142, 50,224,225, 51,117,244,248, 69,247,214, 94, 41,234, - 54, 99,253,154, 16, 87,113,161, 73, 48,111,214, 39,130,140,204,172,110, 7, 79, 92,237,206,154,199,197,216, 44,186,111, 84,143, - 14, 30, 43,143, 44, 61,230, 86,243, 90,109,135, 73, 45, 90,235,227,135,177,233, 13, 10,140, 98, 68,167,104, 74,203, 84, 8,101, - 89,217,150,150,111, 86,122, 50, 10,244,204,141, 12, 87,186, 27,174,222,170,150, 43,202, 96,225,240, 48, 81,139,186,129,205,225, -229, 93, 19,230,126,163,234,134, 95, 58,116, 44,252,234,177,165,250,236,167,223,216,203,179,247,228, 45, 44, 92,186, 54, 14, 20, -158,148,142,230,193, 51,191,152, 22,176,106,245,250,151,206, 77,249,116,106,192,235,138,107,185,103,238,158,119, 6,142, 25,214, -164, 77, 79,196, 61, 75, 64, 92,212, 61,244,120,167, 55,250,246, 31, 2,179,201,248,209,214, 95,215,223,213,229,196,252,242,183, - 62,215,171, 97,199,198,161,193,123,106,122,215,244, 33,164,116,107, 50, 66, 96, 50, 25, 49,251,243, 9,208,107,139, 17, 20, 20, -218,193,185, 83, 47, 19, 40, 6, 28, 71,144,159,159,167,139,121, 26,253,142, 49, 55,230,142,189, 9,212,235,245, 86,149, 74,133, - 7, 15, 30, 32, 54, 54, 22, 81, 81, 81,200,207,207,135,147,147,147, 86,167,211,217,157, 81,103,103,103,199,198,141, 27,143, 58, -112,224,128,212,201,233, 47,205,111, 54,155, 33,151,203, 49,120,240, 96, 97,199,142, 29,107,141, 29, 59,246, 99,139,197,178,183, -168,168, 72, 83, 30, 79,193,227, 83,153,158,161,131, 54,245, 27, 54,113, 10, 0,136, 36,202,196,117,191, 29,142,170,236,127,139, -164,142,190,239, 12, 30,215, 0,132,128,162,168,117,249, 49, 71,178, 43,186,214, 98,177,200,246,239,223, 95,139,162,168,151,198, -215, 5, 63,237,111,255, 56, 46,235,157,141,243,191, 18, 56, 40, 36,200, 83,155, 49,105,202, 52, 55,187,197, 85,232,192,169,173, -154, 53,255,101,222,172, 9, 80,200,101, 56,127, 59, 1,159,127,189,212, 86,144,151,187, 11, 20,181, 38, 47,250,232,155,122, 45, -222,202,118,111, 1,181,148,112,232,221, 78, 58,225,131,174, 82,179,149, 69,161,214, 10,147,133, 5, 71, 8,212, 58, 43,162, 83, -138,225,230, 36,194, 22,252,243, 81, 45,129, 37, 16,138,251,127, 54,166,159,120,229,222, 59,184,117,126,175, 33,235, 65,152,252, -185, 50,104, 49, 60, 49,253,254,126,191, 87,110,137,180,103,144, 16, 80,204,234,246,109, 91,246,154, 56,105, 10,105, 18,228, 43, - 2,104, 60,137, 75,178,110,219,186,101,204,229, 27,226,181,154,244,200,111, 95, 24, 76,171, 53,125,147,227,184,244, 87, 45, 86, - 28,247,183,183,217,200,242, 6, 28,103,133, 16,155, 78, 37,150,188, 25,131,192, 73, 46,196,190,203,233,208, 20,100,228, 53, 49, -172,254,115,124, 63,143,129,139,182, 70, 31,219,112, 34,231, 62,128, 40, 0, 57, 21,113, 82, 52, 32, 96, 40, 56, 41, 68,112,146, - 11,225,164, 20,130,166,168, 10,197,213,188, 95, 31,237, 0, 16,243,138,184,122,206, 41,247, 8,108,228,224, 90,235,232,123,147, -151,184, 60, 78,181,128,166, 1, 63, 47, 5, 92,148, 98,152,173, 64,178,202, 82,154, 87, 71, 76,157, 57,223,125,206, 23,147, 79, -231,100,119,105, 2, 92,181, 85,150,119,189, 94, 47, 30, 61,122,180,208,106,181, 90,198, 78, 95,212, 43, 43, 39,111,208,218, 37, - 95, 74,220,220, 92,161, 51,218,240,224, 73,114,240,210, 31,127,246, 59,115, 37,252,200,156,201,131,142,247,233,211,199,105,255, -254,253, 92,117,234, 93,149,147,247,243,246,221, 97,187,214,172, 92,138,167,201, 5,216,246,235, 6, 16,214,182,169,138,170,124, -137,115,243,230,205, 30, 59,118,236,160,111,223,190,157,255,170, 0,165, 40, 40, 10,212, 38, 56, 43, 68,144, 75, 4,240,114,150, -192,213, 65, 4,137,136, 6, 77,191,212,137, 60,231,220, 26,118,106, 17,167, 47,194,241,223, 45, 35,182,253,188, 24,227,254, 53, - 23,145,121,162,179,180,220,121,209,191,134, 15,250,170,134, 28,125,107, 57,211, 30, 61, 90,212,133, 66, 42,194,215,159,141, 70, -171,251,201, 30,233, 69,220,220, 2, 61,154,206, 63,139,111,203, 75, 39,205, 80, 16, 48, 52, 28,100, 66, 92, 57,181, 47, 87, 95, -172, 86, 83, 76,137,133,197,106,182,164,216,217,140,255, 86,158,114,143,192, 57,205, 26, 55, 90, 60,101,226,120,186, 67,187,214, -132,166, 5,200,211, 88, 40, 2,130, 25,255,154,140,169,147, 39,120,165,103,228,124,247,203,134,205,223, 94,186, 64, 22,234, 84, - 79,231, 87,198,201, 80, 52,104,154,130, 66, 38,132, 82,250,215,199,104,230, 64, 81, 96,106, 53, 31,174, 6, 5, 80, 20,149,153, -126,239,247, 96,123,210, 89,179,113,223,139, 87,115, 69, 13,245,167,141,183,226,227, 34, 22,133, 63, 74, 13, 7, 80,224,211,217, -249, 99,171,149, 64,107,180, 33, 41, 71, 15,155,153, 80,227,250,248,162,222, 48, 42,104,201,182,136, 93,103, 30,193,241,133,206, -254, 37,206,140,219, 97, 70,215,208, 33,195,215,252,180,249,238,202,197,115,153,124,141, 25, 44, 1,100, 98, 6,210,210,143, 76, -196,192,168, 83,227,151, 77,191,101,219, 64, 13,197,213,202,219,252,223, 59, 13,242,225,208,126,157,127,167, 0, 49, 69,139,210, -107,250,214,245,237,222,127,140,180,199,128,143,192,218, 44,115,238, 95, 39,151,245,185, 49, 23,237,225, 12, 13, 9, 6, 40, 60, - 81, 69, 30, 27, 90, 50, 72, 14, 58,220, 48,168, 97,192,171,231,252,253, 3, 3,236,169,247,178,102, 37,115, 15,152,232,223,176, -241,236,182, 29,187,215,205,204, 55,193,165,150, 63, 30, 68,220,199,185,131,191, 68, 24,138, 11, 87,158, 59,121,100,246,194,101, -107,155,246, 31,252, 1,142, 29, 61, 48, 83,151, 19,179,161,180, 76,159,115, 18,142,251,112,199,150,205, 62, 66,145, 4, 86,150, -192,106,227, 96,101, 57, 88,109, 4, 89, 89,153, 40,214,106, 33,149, 57, 64,225, 88, 3, 86, 91,137,165,208,100,178, 42, 38,127, -212,127,170, 17,184, 83, 94, 58,235,182,254,240, 30,104,170,118,201, 59,106,105,157,153,140,122,111,111,239, 93, 0, 32,145, 72, - 32,145, 72, 96,179,217,240, 56, 19, 51,188,189, 58,127, 13, 82, 90,217, 28,151,158,253,224,247,150, 21,229,221,199,199,103, 64, -121,226, 74,171,213,226,207,187,143,156,182,239, 63,223, 39, 57, 45,187, 62,199,122,152,100, 94, 77,123, 23, 21, 93, 30, 80, 81, -121,230, 68, 30,155,234,211,101, 58, 61,115,202,104,255,117,191,133,133,199,159, 91, 84,169, 57,185, 94,143,175,204,179,167,142, -108,185,124,221,182,184,140,107,235, 62,175,170,142, 68, 34,145, 80,165, 82, 61,127,190, 23,172, 63,212, 55, 53, 71,243,206,143, -139,231,138, 30, 36,104,241, 40, 41, 11, 99,122,250,218,253,188,123,133, 12, 14,170, 93,167,214,218,181, 11,167, 35, 54,211,128, -245,135,194,113,245,212,174,251, 22, 99,241,187,170,232, 19,185,175,211,135,188, 5,129,245, 55,206,178,129,224,242,163, 60, 20, - 27, 74,132,149,149,229, 80,108,176, 33,183,200, 4,181,206, 10,173,209,138, 49,239,248, 86, 95,253, 17,210, 10,128, 59, 0, 21, - 69, 81,119, 95, 60, 46,211,160,101, 67,204, 43,199,121,165, 22, 67,215,210,177, 66,252, 2,173,249, 5, 35, 70,121,231,203,238, -143, 6, 16, 92,202,201, 2, 8,167, 40,170,208, 30,129, 69,202,204,149, 47, 20,114,185,175,172,172,205, 90,187,166,183, 55, 56, -146,254,210, 37,190,173,135,235, 63, 27,255,190,108, 37,107,211,101, 61, 60,100,119, 76,150,210, 61,160,189, 72, 36, 62,181,116, -217, 10, 50,124, 64, 23,113,182,218,106,136,206, 48,170,180, 38, 98,243,114,111, 32, 89,182,124,185,114,201,178,149,159, 30, 57, -204, 21,105,115,162,127, 44,143,195,187,229,136,123, 20, 69,215,166,255, 50,203,131,112, 36, 61,227,222,190,150, 0,240, 38,177, - 86, 58,163, 13, 12, 67, 65, 88, 26,147,162, 55,179,208, 23,101,231, 55,209,175,253,115,124,159, 18,113,117, 39,195, 43,129, 97, - 84, 22, 0,149,186, 32,104,138,130, 70,111,133,163, 76, 8, 39,133, 8,206,114,209,139, 22,172,242,196, 85, 84,101,156, 34,139, - 37,141,181,154,140,132,101,209,175,149, 59, 60,156,196,240,118,145, 64, 42, 22,192,202, 2, 6, 51, 7,131,153, 69, 74,174, 30, -197,122, 9, 26,119, 25,225,239,230,125, 71,159,157,212,114, 71,126,202,189, 73,149, 90,152, 88, 22,123,194,206,249,103,100,229, - 14, 58,182,123,181, 36, 87,109,197,163,100, 45,114, 11,205, 32,148, 19,190,254,246, 91,201,188,121,223, 15, 57,112,244, 98, 82, -251,150,129,233,213, 45, 87,189, 42,102,247,193, 67, 97, 63,191, 59, 96,176, 67,116,248, 25,196, 61,184, 56, 79,151, 91,189,248, - 43, 95, 95, 95,246,151, 95,126,113,222,180,105,147,255,177, 99,199,210, 84, 42, 85, 98,217, 67,229,234, 32,202,188,112,233,154, -107,151, 14,157, 5,105,121, 70,184, 57,136,224,235, 41,199,253,155,151,205, 52, 69,157, 45,143,175,212, 13, 56, 18, 61,190,196, -241,155,137,125,162,242, 37, 87, 62,153, 48, 46,249,194,169,240,252,159,118, 95, 92, 81, 75,105,125, 40,229,114,215,223,111,233, -239, 53,103,218,104, 44,253,105, 55,174,222,127,154,171,163,107, 46,206, 50,217, 42,156, 84,192,208,128, 80, 64,193, 65, 38,132, - 94,167, 86, 71, 93,220, 24,248,150, 94,142, 62, 62,119,116, 55, 93, 80,108, 69,122,158,129,202,204, 47,134,141,227,224,172, 16, -195,198, 1, 69, 5,121,212,158, 61,187,113,247,238, 45, 26, 12,253, 9,128,249, 85, 89,176, 24,154,130, 82, 42,128, 82, 86, 98, - 5, 82,202, 4,176,216, 56, 4,248,249, 96,237,130,207, 28,221, 61, 60,209,107,232, 36,187, 19, 40, 83,184, 52,221,185,113, 33, -174,220,122,216,245,114,252,190, 86, 30,161, 77,127, 18,178,194,149, 32,196, 96,178,178,208,168, 11, 97, 52,165,161,117,173, 60, -212, 80,176, 72,214,120, 35, 50, 59, 78, 89, 85, 71,159, 31,121,228, 1, 69, 6,127,123,240,196,165,165,189,123,118, 69, 84,146, -166, 68, 92,137, 74,196,149,128,226,176,122,211,102,107,161,186,184,127,126,212,177,188,215,104,159,127,148,118,198, 37, 2,129, -213,186,239, 89,255,237,206, 9,179, 87,244,238, 61,228, 99, 42,242,238,229,111,244,192, 69,123,173,231,127, 63, 71,236, 58, 87, - 81, 87,226,209,160,229,222,237, 59,246, 13, 15, 9,240, 65, 78,145, 21,153,133, 22, 92,191, 31,143, 35,155,191, 41, 42,202, 73, -248, 16, 22,173,150,163,108,234,243,231, 78,156,253,244,179,217,104,212,168,105, 93, 77,186,198,241,213,216, 67,142,161, 54,127, - 52,126,242,112, 79, 15, 79, 7,174,212,130,197, 17,130,160,160, 16,244, 27, 48, 20, 87,174,221, 68,116,212,163,146,243, 28, 64, - 8, 65, 81, 97,126,182,205,106,222, 81, 97, 59, 98,168,218,219, 55,173,246,160, 41,192, 98,227, 96,182,114,152,243,245, 60,243, -244,239,214,119,236,221,161, 73, 20, 3, 78,147,154, 85,228,124, 55, 38,171, 49, 37,116,244, 30, 53,241, 43,145,193,194, 66,163, -183,226,226,193,117, 21,102,218,219,175, 73, 59,101,157, 14,227, 39,206,221, 36,145, 48,180,165, 81,160, 79, 98,151,182,141,210, -234,212,116, 43, 94,178,110, 79,235,155,247, 99,250, 13,125,111,136,116,120,253, 16,170,166,171,212, 97,242,212,105, 77, 88,255, - 14, 31,229,196,255,185,171,194,193, 79, 32, 41,242,169,237,243,220,149,232,222,104,208, 35, 0,175,142,252, 41,170,168, 99, 77, - 0,192,195,211,203, 72, 9, 37,197,213, 16, 4, 4, 0,126,248, 41,172, 95,186, 74, 59,236,199,197,115, 69, 15, 18,117,120,144, -160,134, 88,196,192,100,177, 63,172,141,165,200,140,175,166,141, 19, 22,232,108,184,252, 72,133,200,123,151,136,205,162, 25, 67, - 40,193, 88,183, 70,131, 62,162,128,122, 4, 72,162, 41,252,106,166,177, 67,253,232,152,250,117, 45, 88,238,193, 67,218, 83, 12, -250, 49, 2, 81, 43,128,107,104,179, 90, 61,104,134,201,203,121,116,200,179, 26,121,135, 62, 55, 14, 43,150,124,135,181, 91,142, - 32, 60,182, 0, 78,182, 52, 28,219,182, 24, 51,151,238,129,222,204, 86,150,134,138,244,136, 59, 69, 81, 39, 9, 33,253, 9, 33, -239, 0, 16,151, 29,151,244, 97,212,201,210,255,253,210,241,156, 57,115,190, 89,186,116,105, 84,217,181,101,231,203,174,173,236, -252, 11,247,187,126,253,245,215,161,203,150, 45, 91,210,174, 93,187,223,111,222,188,153, 8,192, 46,129,245, 98, 38, 42,124,202, - 61, 66, 7,182, 38,132, 99,188, 92,149,240,247,243,129,226,253,177,178,211, 20,165, 99, 24,154,222,190,230,107,105,190, 65, 0, - 1,195,216,109,239,149,122, 4,181,145, 41, 21,167,247, 31, 56, 68, 2,234,122,137, 15,221, 46, 74,189,159,168,127,110,210,213, -168, 82,196,254, 53, 76,204,240, 15,134, 42,206,158,191, 48, 67, 11,252, 88,254,192, 64,215,254,105,245,114, 15, 7,153, 16, 52, - 5,104, 12, 54,204,248,226,171, 55, 30,189, 8, 8, 51,245,139,239, 65, 83, 37,131,143, 86, 93,128,197,107,182,107,135,214,190, -116, 99,124, 31,183,129,139,182, 70, 31, 59,255, 68, 22, 63,100, 72,119,117,114,114,114, 97,102,102,102,229, 46, 24,194,166, 15, -251,120,186,136,166, 75,220, 70, 20, 69, 1, 96,115, 94, 71, 92, 1, 64, 81, 81,146, 70, 42, 86, 14,217,189,122,218,150, 58,181, -107,213,112,144, 75,161, 84, 72,168,134, 65, 13,164,109,219,180,147,249, 54,104, 36,186,246, 68,139, 84,149, 1, 9, 25, 26, 72, -220, 67,133,195,187,246,196,238,117, 95,245,203, 79,185, 87,101,254, 47,221,138, 28,176, 97,229, 92, 73, 78,161, 5, 79,210,138, -145, 93, 96, 66,118,161, 17,217,133, 38, 40,165, 2,180,237, 49, 84,114,252, 98,216,224,246, 45, 3,127,122,157,242, 77,120,150, -120, 36, 37, 35,107, 76,147,102,173,177,103,231,246,182,168, 85, 75,138,140, 12,163,189,247,111,217,178,165,160,121,243,230,110, - 63,254,248,163, 46, 40, 40,168,233,230,205,155,253, 98, 99, 99,175,212,175, 95,127,192,198,117, 11,175, 76,159,187,210, 87, 0, -155, 83,219, 14, 29, 24,185,152,194,237,107,231, 77, 59,182,108,202,180, 20,105,103, 87, 58,122,201,157, 23,229, 20, 83,112,175, -233, 19,169, 16, 90,123, 9,229,150,216,194,221,159,237, 46, 4, 14,215,239, 51,237,143,203,247, 98, 98, 91,220, 79,246,184,116, - 63, 54,183, 64,111, 13, 76, 56, 59,179,210, 14,151,161, 74, 45, 88,242,191, 44,150, 30, 77,134,197, 19,138,114, 47, 19, 54, 20, - 74, 44, 90, 84,201, 67,152,153, 17,113,192,142,192,104,138,112, 28, 16,155,174, 69,177,193, 6,163,213, 6, 31, 55, 5, 84, 57, -233,216,248,211, 14, 68,220,187,139, 94,125, 7,226,151,223,246, 96,194, 71,239, 27,171,122, 48,105,154, 2, 77, 83,165,150,171, - 18,113,165,148, 10, 0, 10, 40,210, 89,113,248, 70, 26, 26,248,209,160,170,225, 45,116, 80,202,160, 46, 54,130, 22, 42,241,244, -250, 46,249,153, 75,225, 95,207, 95,185,245, 75,141, 54, 39,245, 89,244, 45, 4,185,228,195,175,166, 25, 81, 57, 78,184, 87, 80, - 23, 65, 13,234,131, 22,221,181,139, 59, 47,170,241,138,227,244,161,254,173,154,133,180,171,227,225, 4,131,153, 45,181, 98, 9, -176, 99,251,118, 36, 39,165,143,207,143, 62, 22,241, 54,148,172, 46, 55, 81, 37,241,240,255,244,241,237,139,137,131, 63,156, 10, -175, 90,117,154, 22,165, 62,176, 51, 60,193, 62, 49,197,217, 39,176,232, 26,117,155,237,220,185,251,224,112,191, 58, 94,184, 16, -158,132,136,103,133,112,116,112, 6,163,240, 70, 96,151,177,206,143,207,174,123,207,144,167,221, 41, 20,201, 63,105,221,182, 3, - 8, 33,136,121, 26, 85,160, 86, 59,253,173, 9, 24,178, 98, 30,220,202,138,113,124, 73, 20,187, 53,108,234,224, 84,227,129,209, -194, 34, 35, 35, 29,127,222,188,210,220,144, 21,243,160, 58,229, 37, 17,209, 56,127, 63, 23, 22, 27, 7,139,149, 67,243,198, 13, -141, 66,145,172,211,242, 45,167,218,102,231,228,210,114,165, 19,231,228, 86, 95,228,108,205, 54, 61, 76, 84,139, 44, 54, 14,245, -189, 43,127, 47,151,215,168,191,228,243, 47,166, 7, 11,196, 50,104,116, 38,115, 86,122,134,215,175,251, 46,107,159,196, 68,215, -170, 87,183,142,227,194,133,243, 69, 26, 35, 65,110,145, 9,121,197, 22,234,131,145,227,107,238,218,246,203,135, 0,118, 85, 35, -233,141,127,223,181,201, 90, 67, 41,162,138,245, 86,162,210, 24,217,169,159,206,104,252, 38,109,231, 37,113,149,160,195,131,196, - 34, 72, 68, 12, 36, 34, 6, 86,155,125, 33,146,110,193,195, 20,110,174,138, 15,219, 52,243,199,185,251, 42, 8, 24, 10, 6,157, -198, 44,149, 40, 35, 27, 54, 12,160,155, 53, 13, 69,215,142,237,241, 44, 49, 57,232,220,133, 75,107,194,239, 70, 44, 22, 54, 26, - 60, 59, 47,234,232, 47,213, 73,107, 74,134, 74,145, 99,243, 25,225,225,229, 22, 58,112,224, 0, 73,157, 90,158,148,155,171, 51, - 88,136, 48,101,234,191, 60,236,246, 26, 17, 2, 2, 96,217,130,175, 97, 50,155,225,225, 44, 6, 33,192,182,245, 63,192,108, 54, -163,166,171, 20,106,157,181, 42,161, 87,161, 30, 41, 79, 16,189, 42,180,202,190,151, 93,183,116,233,210,254,175, 8,192,254, 21, - 8,195,191, 93, 87,118,255,178,101,203,150,188,240,187,190, 58, 46, 66,170,178, 76,185, 53, 30,220, 65, 34,150,157,255,101,233, - 12,186, 72,103,129, 68, 68,163,190, 95, 61, 76,251,108,186,188, 71, 51, 15, 24,224,136, 67,251,118,104,108,172,245,164, 93,111, -182,158,254, 45, 21, 50,249,217,109, 59,247,113, 94, 30,110,212,175,127,168, 18, 85, 26,219,243, 37, 14, 98,239, 28,231,238,157, -251,213,155,128, 58, 43,151,202,252, 77,102,147, 75,133, 61, 78,105,133,110, 59,159, 12,134,166,193,188,165,149,189,104,154,102, -127,251,105, 33,220, 28, 75, 98,174,126, 88, 88, 25, 0,227, 0, 0, 32, 0, 73, 68, 65, 84,187,187,120,128,251,217, 75, 47,138, -171,102,205,154,169,155, 54,109, 90, 68,211, 85,255,211,180,187,123,203,155, 45,241, 90,226,170, 12,198,156,199,119,141, 64,168, - 58,249,175,115,103,208, 92,232, 86,239,224,204, 17,163, 62,252,218,179,209, 0,135,164, 44, 53,196,180, 21,173,130,189,113,229, -220, 97, 46, 45,241,201,100,123,184,115,243,213, 62,110,174,174,136, 72,208, 34, 51,223,136,172,130, 18,113,149, 93, 96,132,198, - 96, 67,179,122, 30, 40, 82,107,125, 94, 91,192, 82,228,232,185,179,231,198,244, 29, 52, 28,211,190,156,223,119,203,134, 85,143, -180, 30, 14, 31, 25,115,159,134,219,115,127, 88, 88, 24,123,239,222,189,196,188,188,188, 86,179,103,207, 46,174, 87,175,158,215, -194,133, 11, 39,214,175, 95,191,102,143,110,221,212,119, 47,183,221, 57,253,203,249,221,190,153,190,197,143,166,233, 28,194,145, -227,153, 58,235,247,200,123, 98,168,180,158,142,127,243,244,251, 4,203,152, 30,157, 92,143,187,202,232, 16, 33,101, 26,137,224, -249, 7,240,100,190, 37,225,236,250, 98,217,251,171,166,101, 20,113,115,141,180,215,226,170,196, 85,137, 5,139,130,217,194,193, - 81, 38, 44,155, 57, 10, 16,120,111, 88,191, 74,238,238, 36,129,128,161, 32,100,104,168,245, 86,228,107,204,248,114,246,108,123, - 75,144, 99, 57, 14,122, 19, 11,131,217, 6, 10, 20,138, 53,121,248,250,203,207,209,119,192, 80,140,159,252, 5,138, 12,192,189, -196, 98, 88,172,214, 42,101, 17, 67, 1,122,147, 13,227,123,251, 34,191,216, 2,157,209, 6,179,133,131, 92, 42,128, 64, 64, 67, - 33, 17,192, 65, 38, 4, 69, 17,145,151,151,215, 68, 0, 16, 10,133,198,180,180,180,221, 21,187,231, 9,234,250,120,194, 96,161, -209,122,248, 74,188,211, 46, 16, 15, 46,108, 21, 92,187,243,216,239,203,249,107, 48,117,100, 59,132,197, 52, 64, 13,143,186, 80, -202,165,176, 18, 26, 0,177, 51, 32,111, 62, 71, 91,134,140,220,244,219,182,152, 5,243,190,146, 22,234, 40, 72, 68, 2, 92,186, -244, 7,110,221,185,183, 46, 47,250,216,238,183, 25, 75, 33, 36,180,167,163,147, 35,164, 98, 6, 22,139,201,238,128,111,150, 35, - 0, 65,176,123,232,160,195,165,117, 31,204,149,115,206, 14, 11, 22,229, 84, 51,116,251,166, 45,123, 62,244,246,242,192,145,139, -143,176,115,203,207,168, 21,218, 23,241,247, 55,193,167,197, 96, 40,253,186, 67,236,112,112, 34,205, 8, 26, 79,157,254,245,208, - 22, 45,219,225,230,245,203,200,205,206,218, 4,196,216, 21,131,198, 8,169,207,186,189,211, 31, 38, 11,139, 78,221,251,227,236, -137, 35,211, 80, 58,121,226,117,193, 48, 52,247,175, 9, 35,132,185, 69,102, 97,174,218,132,140, 60, 3, 18,179,117, 56,182,127, -171,221,102, 59,138,161, 91,117,105, 90, 91, 56,113,197,165, 52,159,218,222, 38,161,201, 32,139,125,246,172,225, 39, 99, 62, 20, -214,243, 15,162, 85, 69, 38,168,212,102,168,212,102,232,140, 86, 52,168, 89,135, 54,217, 4,237,170,155, 86, 15, 39,169,240,151, -147,137,112,148, 11,208, 62,216,245,181,131,176, 57,142,251, 75, 92, 45, 42,177, 92, 61, 76, 84, 67, 42, 98, 32, 22, 50,144,136, -104, 88, 89, 98,231, 88,100, 27, 49,105,204, 7, 50,179,149, 32, 79, 99, 6, 67, 83,240,114,115,149,248,120, 7, 98,219,202,127, - 1, 0, 38,124,181, 1,159,140, 27,141,160, 64,127,168,213,197,178, 79,166, 76, 95, 13,192, 46,129, 69, 8, 33,123,142, 93, 11, -185, 23,153, 50,243,227, 49, 31, 9,135, 15,236, 76, 71, 36,104,144, 85, 96, 66, 66,188, 30,102,107,245, 86,163,177,177, 37, 62, -223,237, 7, 78, 66, 46, 98,160, 82,151, 60, 46,139,214, 31,128, 82, 38, 64,118,161, 25, 28, 87,169,245,174, 82, 61, 82,145,213, -169, 58,120, 81,132, 85,118,158,162,168,147,115,230,204,249, 6, 0,153, 51,103,206, 55,101,199, 75,151, 46, 53, 0,200,180, 87, - 96,161, 34,183,160, 91,227,193, 29,100, 98,233,249, 93,235,191,145, 93,140, 37, 88,119,254, 62,250,181,245,134, 72, 64, 65,170, -244,194,131,196, 34, 92,188,120,172,248,250,173, 59, 70,138,182, 86, 57, 45, 74,230, 21,216, 92, 46, 81,252,241,243,230,157, 54, - 79, 47, 47,236,187, 81,152,153,175,181, 89,255,114, 79, 89,169,123,231,126,245,179,113,214, 62,198,156,248,187, 85,189,121,115, -132,136,150,110, 60, 14, 66, 8,192,177,224,192,129, 17, 73, 20,117, 90,127,152, 3, 10, 96, 89, 78, 42, 96,104,227,115, 63, 72, -201,208,148,158, 26,190,175,101, 85, 53,236, 40, 23, 98,255,213,116,168, 11, 50,243, 6,184,159,253,179, 76, 92,157,141,146,196, -183,104,209, 76,221,166, 77,155, 34,137, 68, 2,134, 97, 94,167,142,223, 72, 92, 85,140, 8,107, 94, 18,150, 29, 58, 36, 29,216, - 87, 17,218, 70, 76, 9,209,162,161, 55,174,156, 63,194,221, 58,179,117,136, 33, 55,238,148,189, 38, 94,173,209,134,204, 2, 3, - 50,242, 12,200, 42, 44,181, 96, 21,152, 64, 81,128,209,252,102,203,215, 24,114,227, 78,236,222,189,117,147,201,138,201,157,122, - 13,198,204,249, 63,251,239,222,180,226,122, 50,177,181,210,171,226, 31,219,245,198,149,146, 98,218,179,103, 79, 68,113,113,113, -207,213,171, 87,107,131,131,131,197, 50,153, 44, 31,128, 52, 46, 38, 70,116,233,244,193, 36, 85,102,230, 36,171,213,122,215,222, -116,249,118, 25, 35,145, 89, 34, 38,250,202,219,247,174,239, 37,135,175, 92,215,187,161,242,225,143,249,221,167, 47, 81, 93, 90, -151,155,101,178, 93, 40,208,163,105,134, 86,248,135, 93,157,141,197,156, 50,106,210, 28, 48, 52, 5,139,201,156,242,220, 29,225, - 36,193,252,221, 79,224, 32, 19, 66, 41, 19,194, 65, 38, 64,135, 96, 87, 84,195, 64, 68,172, 54, 2,131,217, 6,131,137,133,193, -100,131, 91, 29,103,252,182, 43, 12,169, 42, 3,142,223,205,195,211,100, 13, 2,125, 20, 32,164,106,187, 19, 71, 88,221, 7, 19, -231, 58, 48, 52, 13,134, 2,221,208,191, 46, 10,180,102,136, 4, 52,196, 98, 49,228, 82, 1, 28,229, 66, 8, 5, 66,132, 63,122, - 4,147,201,132, 54,109,218, 72,171,114, 56, 56, 40,101, 8,240,171, 9,139,213,134,211,215,162,177,104,198, 16,244,236,220, 18, - 95, 50, 98, 60, 53, 53,131, 67, 13, 7,112, 20, 3,139,141,131,201,202, 2,160, 42, 19,192,237, 75,227, 34,140, 0,110,103,199, - 28, 73,101,153, 65, 19,207,156,191,180,123, 64,191, 94,136,120, 24,133, 67, 71,142, 95,207,115, 85,207,122,209, 42,129,191,102, -193, 69,189,102,115,165, 8, 77,207,104,215,161, 43,180,133,185,200, 73, 75,178,187, 83, 15,169,227,128,207,103, 76, 11, 8, 10, - 10, 10, 96, 57, 2,142, 35, 8,241,117,192,164, 41, 83, 2, 26,248, 7, 6,112,165,179, 8, 27,250, 56, 84,202,163,240, 12,154, -186,120,245,198,143,124,124,124,112,246,198, 19, 44,157, 59, 57, 66, 46, 87,214,107, 89,195,193,153, 11,106,138,196,200, 11,168, - 81,183, 8,142,158, 1,181, 7,246, 28, 83,187,239,187,131,241,248,225,125,172,253,113,225, 45, 29, 35, 91, 98, 79, 90, 21, 30, -126,238, 77,155,183, 30,229, 88,195, 19,133,106, 45,148, 46, 30, 8,110,210,114, 84,244, 67,211, 87,186,220, 68,213,235, 62,235, - 28, 33, 48, 89, 56, 20,104, 45, 72, 87, 25,144,148,163, 71, 82,182, 30, 28, 71,200,139, 46,234,202,251, 99,138, 82, 72, 4,130, - 26,214,248, 58,143,254,184, 68,124,125, 60,169, 21, 11,103, 51, 22, 34, 65,174,218, 12,149,198, 12,149,218, 4,149,166, 68, 96, -185, 40, 5,224, 8, 87,237,217, 25, 5, 90, 11, 28,100, 2, 56, 41, 68, 96,217,215,143,249,158,191,102, 95,251,116,149,182,199, -143,139,230,138, 30, 36,233,240, 40, 81, 13,137,136, 46,177, 94,149, 10, 44,123,221,194,140,128,158,246,238, 59,109,144,166, 50, - 66,192,208, 16, 48, 52,252, 27, 53,135,155,156, 67,143,225,115, 0, 0, 3,250,149, 44, 67,146,152,165,195,137,219, 89, 0, 32, -178, 55,173,185,121, 26,233,145, 11, 17,211,247,253,182, 66,108,100,133,216,120, 42, 25, 70, 51, 11,137,168,212,237, 46,174,222, -248,102, 99, 75, 44, 88,105, 42, 11,116, 38, 22, 26,189, 5,132, 0,225,241,197,208,155, 88,168,245, 22,180, 13,170, 81,229, 51, - 87,197,248,212,255,141, 60, 84, 37,247,171,240, 87,156, 86,149, 22,172,165, 75,151, 70, 45, 93,186,180, 92,139,152, 61, 2,171, -124,113, 37,146,158,223,249,211, 55,178, 63, 98, 8,174, 60,202,199,176, 78,181,145,159,155,142, 45, 27,214,113,132, 0, 18,169, - 56,155,181,113,103,140,156,109,182,250,209,201, 74,253,190,114,183,224, 38, 82,177,228,210,210,181,155, 44, 94,222,181,185,195, -183,139,114,213,122,246, 37, 91, 33,107, 50,209,132, 35, 34, 99, 78,188, 93,131, 34, 77, 83,150,249,211,134,128, 35, 4,223,175, - 59,128,165, 51, 71, 64, 41, 21,200, 41,138,146,235,140, 54,204, 88,184, 21,171,191, 29,231, 32,151, 8, 74,133, 1,139,201,211, -190,180, 79, 4,152, 88,232, 10,179,243, 27,107,215,188, 34,174, 90,168, 91,181,106, 85,228,226,226, 2,133, 66,241, 58, 2,235, -111,226,202,203,203,171,166, 92, 46,175, 81,102, 13, 99, 24, 6, 44,203,234,226,227,227, 95,107,209, 55, 77, 81,222,209,204,164, -200, 54, 29,186,190,139,171,231,143,114,183, 78,111, 25, 82,157, 41,230,206, 78,142,105,247,163, 83,130, 1, 37, 50,242,141,200, - 46, 52, 34,171,192, 4,139,141,131,175,167, 28,233,105,169,112,118, 82,166,217,203, 39,243,244,239, 67, 19,102, 18, 71,225, 55, - 67, 78,204,105, 0,208,101, 70, 79, 57,176,123,211,227,168,168,135,107,251,143,152, 38,238,249,222, 20,209,230,101,159,206, 1, - 48,194,238,206, 33, 55, 87,127,252,248,241, 91, 53,107,214,236,255,253,247,223,155, 0,136, 77, 38,147,124,220,184,113,242,148, -148,148,207, 1,216,149,198,142, 99,183,185, 81, 82,210, 71, 68,140, 35,125,229,186, 94,221, 59,183, 67,251, 80, 31,164,119,110, - 7, 0,159,165,232,149,129,166,250,191,237,183,178, 56,179,113,199,233,165, 19,134,119,255,124,183, 96,254,234,172,147,243, 43, -181,136,197, 94,223,214,187,188,174, 67, 88, 26,248,254,162,192,178,177,164, 58, 46, 56, 98,101, 57,232, 77, 54,232, 77, 54,104, -141, 86, 92,124,144,139,156, 34, 51, 10,117, 22, 24, 77, 44, 8, 0,139,149,148,173, 42, 82,185, 88,189,181,211,185,236,123,173, -230,195,213,235, 22, 76,115, 60,116, 35, 29, 10, 73, 73, 60,150,147, 66, 12, 71,185, 16, 0,193,149, 43, 87, 80, 54, 61,190,170, -183,248, 67,103,195,177,122,199, 37,156,221, 58, 27, 82, 49,131,166,131, 23, 96,204,224, 54,224, 56,130,103, 49,145, 57, 1,193, -205, 60,105,165, 28, 52,141,178,152,148,202,202,211, 21,192,113, 0,253, 1,188, 11,128,168,162,143, 21, 30,101,243,117,151, 78, -237, 83,232, 12, 38, 91, 97,202,147,159,161,203,235, 82,150,132,210, 55,224, 43, 0, 58,191,174, 49, 91,230, 17,184,238,147, 41, - 51,134, 53,104, 80, 31, 7,246,110, 3, 33,212, 33,123,111,222,125,226, 22,214,172,125,121,198,224,164, 41, 83, 2, 54,111,220, -248,210,185,143,198, 77,172,108, 22, 33,229,236,238, 61, 59,168, 97, 8,110, 71,165, 99,197,188,169, 17,198,220,196,145,102,165, -235, 36,139, 46,235,139,144,208,102,240,242,116, 69,118, 86, 14,186, 13,234,137,190,189,123,227,241,195,251, 88,244,221,151,183, -160, 55,247,170,202,106,251,151, 16, 18, 78,238,218,123,176, 80,111,178, 96,253,138,239, 48,105,214, 98,180,237, 54, 64, 24,249, -224,206,100, 0, 11,236,205,179,217,202,161, 91, 19,119,152,173, 44, 44, 86, 14,199, 19, 25,193,223, 45, 5,128,128,161,233,102, -245, 75,220,187, 26,131,181,242, 74, 16, 80,217,133,154,226,186, 63, 47,158,206,232, 76, 44, 84,106, 19,114,139,204, 80,105, 76, -200, 83,155, 74,196,149,218,140, 60,181, 9, 2,134, 66, 92, 98, 6, 24,134,170,118,252, 93,145,206,130,214,129, 46, 0, 40,208, -175,233, 14,201,179,185,247,125, 24,155,222, 99,197,194,185,162, 7,137, 90, 60, 74,210,148, 10, 43, 26,226, 23, 4, 22,103, 71, - 8,150,123,240,128,246, 35,135,246,107,228,168,144, 34, 35,166, 24, 2,154,130,128,161,224,232,238, 3, 39,169, 17,211,166, 78, -130,107, 13, 39,164,230, 25,177,238, 72, 44, 30, 69,199,131, 51, 84, 47,219, 27,246,156, 29,242,209,135,195, 37,180, 80,138,221, -231, 19, 33, 22, 49, 16,192,140,232, 59,215, 76, 57,233, 73,150, 98, 77,145, 66, 32, 16,218, 69, 74, 1,196,198,114, 32,132, 96, -201, 15, 95,227,247, 29, 27,112,246, 94, 14, 8, 74,150,106,248,243,240, 42,204,152,179, 8, 42,141, 25, 0,245,218, 10,150,162, -168, 83,132,144,119, 95, 21, 66,175,138,164, 23, 44, 80,229,113,220,125,145,163,236,250,138, 4,220,139, 49, 89,176,115,177,109, - 65, 57, 74,145, 42, 19, 87, 82,177,248,252,142,117, 95,203, 46,198,226,185,184, 50,104,243,176,107,235,102, 45, 1,247, 78,110, -212,241,112,123, 11, 68,238, 30, 16, 42,145, 75,174,206, 93,180,206, 84,179,182,159,237,244, 3, 77,126,177,145,253,155, 25, 68, - 36, 87,176, 10, 39,119,163, 64, 44, 89, 45, 52,152,191,203,203,123,162,171,170, 74, 57, 66,112,226, 78, 54,192,149, 84,226,129, -107, 25, 37,235,248, 48, 20, 88,174,196,207,125, 33, 34,247,249, 57,251, 42, 16,216,127, 62, 34,175, 34,113,229,236,236, 12,103, -103,103, 40,149,202,234,182,141,114, 45, 87,114,185,188,198,185,115,231,164,142,142,142, 96, 24, 6, 38,147, 9, 61,123,246,124, -173,198, 39,247, 8, 28,209,182,251,144,165, 29,187,189,139,203,231, 14,115,183, 78,111, 31,106, 80, 85, 99,253, 30, 0,125, 59, - 55, 57,177, 98,213,122,191, 89,115,230, 74, 20, 82, 1, 10,181, 22, 48, 52, 5, 95, 15, 25, 92,149, 12,110, 93, 58,105, 28,217, -167,153,221,226,207,167,118,221, 93,171,214,109,114, 93,189,252,135, 94, 15,174,155, 61,139,138,146, 52, 0, 96, 80,197,109,138, -141,164, 98,106,215, 57,127,181,105,231, 33,240,168,229,223, 47, 41, 39,166, 90,249, 85,169, 84,185,135, 15, 31,126, 18, 18, 18, -210,114,232,208,161,100,201,146, 37, 46,233,233,233, 7,237, 21, 87, 0,208,189,119,251, 25, 10,161,181,157,171,140, 14,169,239, - 37, 71,251,208, 18,239,231,240,119, 59,162,182, 79, 29, 36,100,235,155,229, 27, 56,145,206, 42,172,191,113,211,182,187,190, 53, - 4, 19,108, 90, 67, 52,128, 99,213,238, 28, 80,218, 73,202, 75,197,149, 84, 0,165, 76, 8,142,148,252,102,191, 5,139,131,217, -194, 65,111,182, 65,111, 98, 75,196,150,153, 5,199,149, 4, 43, 83, 20, 5,139,149,173,242,109,176,188, 94,210,209,197, 13,126, -117, 75,210,248,252, 35, 19,130,162, 0,119,119,119,184,186, 86,189,238, 40,199,113, 48, 91,108,165,131, 46,251,124, 82,135,217, - 98, 3, 33, 4,177,177,113,179,147, 19,147, 7,249, 7, 52,232, 28,210,164, 89, 13,153,152, 70,169,117,170,178,183,218,145, 0, -172,120, 97,205, 52, 33, 3,227,145,195,135, 20,253, 7, 12, 40,180,232,242, 94,156, 44,193, 0,232, 83, 42,198, 12,213,173, 38, -133,123,224, 96, 23,215, 26,139, 71,143,157, 20,216,237,157,222,184,114,241, 2,142, 31,222,183, 83,175,138, 61,111, 47, 73, 80, - 80,208,223,102, 17, 54,240, 15,252,219, 44,194,186,126, 1, 21, 10, 44, 39,167, 38,142, 77, 90,117,245, 73,201,179,224,204,153, -211,208,169,179,231,153,205, 90, 61,132,100,203, 31,135,127, 29, 63,114,242,247,142,109, 91,181,132,179,131, 28,110, 46, 74,220, -191,119, 11,203, 23,204,189, 5,189,185, 87,213,253,103, 41,130,131, 69,181,100, 62,211,125,235, 55,194,253, 59, 55,240, 44, 54, - 50,234,193,221, 91,141,252, 67,219,192,189,166,239,244, 20, 55,102, 25,158, 60,169,114,167, 10,194,146,244,143, 39,126, 81, 58, -232,149,156,107,219,212, 79,252,247, 70, 72,193,102,181,176,187, 55, 47,207,125,113, 22, 97, 69,188,198,226,162,176,235,119, 30, -127, 57,176,119, 39,170,204, 21, 88, 38,170, 94, 61,246,175,165,192,179,199, 79, 57,171, 78,125,168,122, 85, 78,114,166, 76,253, - 76, 86,146,118, 14,164,100, 97,181,234,182, 27, 24, 89,209,168,141, 63,124, 67, 61, 76,214,225,113,146,166,196, 45, 88, 42,176, - 36, 34, 6,226,210,191,132,216,161, 47,104,122,197, 71,239,247, 70,158,218, 12,142,144,210,181,244, 40, 8, 4, 66,164,104,128, - 52,141, 22,170,162, 28, 36, 38, 37, 67,157,157, 8,154,102,224, 90,203, 31,250, 84,251,210, 90,204, 42, 3,173, 28, 26,188,223, -191, 19,115,244,102, 22,100, 18, 1,138,243,210,112,227,220, 1, 3, 97,217, 77,102,171,249,119, 15, 34,142,124, 18, 25,102,177, -179,235, 80,105,116,102, 79,137,136,193,129,237, 63,227,131, 49, 83,158, 91,179, 1,224,203,185, 11, 65, 81, 20, 10,213, 90, 0, -148,202, 14,203,213,139,199,170, 23, 44, 79,127, 59,126, 65, 20,149,119, 76,149, 30,155, 43,224, 48,191, 34,170,204,175,156, 55, -191,194,103,215,226,200, 21, 90,176,132, 52,115, 97,251,218,111,164, 81,185, 18,132, 63,205,198,176, 78,181,161,215,228, 97,243, - 47,107,180, 70,171,165,111, 94,164,253,226,170,180,161,244,254, 96,220,204,168,250,254,193,230,139,145,197,137, 69, 58,107,133, -113, 12,109,134,125, 19, 21,113,234,231,126,106,107,226, 84,133,119, 8,203,217,108, 43, 12,170,216, 31,202,239,196,137,248,251, -117, 7, 74,196, 21,199,225,171,229,187, 64, 56,182,116, 1, 63, 22,132,229,240,175,121, 27, 96, 43,253,206,114, 44, 40, 43, 43, -175, 42,185, 74,169,232,124, 99,237, 26,167, 87,197, 85,243,230,205,139,156,157,157,225,234,234, 10, 23, 23, 23,148, 9,162, 55, -117, 11,210, 52, 13,165, 82,137, 43, 87,174, 64,169, 84, 66,161,120,189, 5,242, 21, 30, 65, 31,180,238, 62,120, 79,183, 1,227, -232, 63,142,108,102,239, 92, 57, 57,204,168,138,177, 91, 4,176, 44, 75, 89,173, 86,244,238,218, 34,229, 65, 76,234,217,133, 63, -252,208,167, 85,247,247, 36,237,131, 60, 96, 48,219,144,158,150,134, 91,151,143, 27,253,235,184,157,109,223, 50, 48,221,106,181, -130,101,217, 42, 7,112,147,201,156, 79, 11,165,174,195, 71,140,146,220, 13, 15,223, 35,247, 8,220, 71, 51,220, 67,194, 50, 77, - 64,184, 15,154, 52, 14,134,197,198,193,160,215, 20,188, 78,190,163,162,162,238,174, 90,181, 42, 72, 40, 20,214, 14, 11, 11,203, - 43, 44, 44,172,214,118, 65, 23, 78,133,175, 19, 40,173,113,101, 22,172,180, 78,237, 48,162,127, 71,252,126,234, 6, 46, 95,187, -133, 20,189,242,129,206,204, 28, 77, 79,207, 52,133,184,168, 15, 15,238, 80,143, 57,180, 75,115, 40,170,235,236,247, 9,145, 93, -200,187, 58,223,238, 9, 30, 20, 5,104, 12,214, 23, 44, 88, 37,241, 77, 52, 77,217,109,193,162,128,196,107, 55,239,135,182, 8, - 12,198,131, 4, 13, 84,133, 38,232,205, 37,237,158,128,192,213, 81, 4,137,136, 65, 74, 82, 34, 56, 98, 73,170,222, 56, 3, 85, -223, 97,147, 4,165,175, 47, 2,161, 80,240, 60, 32, 66, 38, 21,107, 61, 60, 60,236, 18, 88, 86,150,197,208,222,109,208,182, 85, - 19, 12,154,188, 10, 0,112,113,231, 87,112, 81,138, 16, 22, 22,134,180, 63,215,238,246,107, 55,249,124,228,227,232,247,162, 34, -110,142,234,219, 66,214,204, 75,144, 37,170, 68, 21, 31, 43,117, 17,118, 3,208,179,212, 50,101,101,109, 92,106,159, 62,189, 57, -150,229, 94,140,137,112, 1,208, 14, 64, 1,128,251,165,162,172,146, 23,192,160,119, 64, 99, 31, 40, 74,170,148,201, 83,234,213, -171, 95,179, 85,219, 54, 78,131,135,190, 15,177, 72,140, 63, 46,156,195, 79,107,150, 29,208,102, 61, 25, 87, 45,247,152,157, 1, -237,149,185,139,212,106, 39, 93,108,244,131,194,196, 28,179,139,192, 57, 0, 66,137,195, 36,202,169,230, 58, 70,162,252,190, 86, -219, 49,142, 23,111,132, 35,234,193, 77,212,116,147, 33,241, 89,188, 62,242, 97,196, 6, 61, 37,252, 1,121, 79,244,246,166, 83, -158,207,190,215,118,116, 31, 23,163,133,197,245, 75,167,140,156,141,235,115,251,234,233,103, 62,129,173,164,161,173,122,184,228, - 29,219, 50, 84, 15,252, 94, 21, 79,114,248,158,191,133, 94, 48,228,253,204,211, 23,174, 41,107,214,241,103, 64,209, 48, 25,116, - 80,165, 68,218,140,154, 28,125,110,228,177,154,118,133, 3,216, 50,230,125,183,108,211,212, 22, 77, 27, 41, 8, 17,191,100,177, - 42,251,158, 95,108, 46,137,153,213, 21, 33,225,241, 13,163, 42, 94,253,117,229,125,157, 85,158,159, 95,240,124,106,190, 76,235, - 92, 87,237,164,150, 60, 31,214, 25,192, 73,237,252,220, 82,145,159, 95, 32,102, 89,171,220,158,199,211,217, 65,138,199, 73,153, -207, 3,218, 37, 34,186, 52,246,234, 47, 75,150,157,207,121, 11,129, 88,129,140,124, 35,104, 66,192,113, 54,216,172,102,104, 53, - 26,100,102,100, 35, 39, 39, 23,218, 98, 53,100, 74,103,132, 54,107, 9, 7, 7, 7, 60,185,119, 25, 0,117,194, 46, 49,200,137, - 2, 90,181,108, 41,140, 74, 46,134,197,202, 65, 8, 11,174,159,221,111,180, 89,205, 3,114, 35,143, 93, 2,236,216, 74,228, 69, -247, 32, 71,254,136,140, 73,105,228,227,230, 77, 69, 36, 20, 97,215,175,235, 75,102,147,218, 74,172,153, 81,169, 58,100,230,235, -144,145,150, 66,192,177,127, 84,231, 89,162, 40,234,110,101,199,175,105, 9,123, 99,142,215, 18, 88, 54,155, 77, 90,199,183, 46, - 70, 76, 26,141, 13, 27, 54, 34, 54, 33, 5,191,254,178,182, 68, 92, 61, 62,250,167,157,252,161, 40, 93, 43, 67,159, 19,179,194, -232,210, 58,253,196,195, 66,218, 96, 38,182,202, 59,187,122,232, 52,110,245, 57, 67,113,129,152, 53,233, 5, 39,118,143,219, 87, - 30, 39, 0, 48, 52,101, 46,117, 11,130,162, 40,148,185, 5, 55, 44,152, 0,185,132, 1, 69, 81,208,155,108,248,232,243,213,216, -185,186,228,205,234,147,169, 51,245, 21,165,179, 76, 8,125,222, 46,142, 26,219,199,111,224,162,173,209,199,110, 36,187, 38,188, -251,110, 23,117,179,102,205,138,100, 50, 25, 20, 10, 5, 28, 29, 29,225,232,232, 8,103,103,231, 42,243, 94, 10,207,170, 98,174, -104,154,134,163,163, 35,100, 50, 89, 69,194,237, 85,206,151,197,149,103,192,251,173,187, 14,218,215,125,224,120,250,143, 35,191, -114,247,174,156,120,223,168,138, 61,106,111, 29,149, 90, 29, 30, 14, 29, 58,180,241,164, 73,147, 68,223, 76, 29,122,238,220,149, -251,177,135, 47, 28, 26, 80, 80, 84,236, 67, 8,129,179,147, 50,109, 88,207,198, 39, 58,181, 10, 74,185,120,241, 34,183,111,223, - 62, 19, 69, 81,143,171, 74,103, 94, 94,238,246,139, 23, 47, 45,239,220,165, 43,126,221,177,239,221,232,232, 39,239, 62,139,143, -131,143,111,125,212,171, 31, 0, 61,229,140,139, 87,175,163,184, 32,103,187,157,229,249,215, 15,161,161,181, 24,134,169, 93, 84, - 84,100,156, 55,111, 94, 16,203,178,199, 67, 67, 67, 91,114, 28,151, 21, 29, 29,157,110, 79,222,111,237,254, 72, 5, 96,151,111, -151, 49, 7, 51, 45, 69,211, 1, 44,243,169, 83, 7,151,175,221,194,237, 63,239,108,204,147,215,249, 97,236,168,143, 39,212,117, - 21, 78, 24,212,190, 46,227,225, 34,199,222, 95, 87, 49,199,110, 38,175, 73,206,183,254,182,252,234,252, 69,246,212, 81, 25, 10, -138, 45,232, 16,226, 10,155,141,128, 37, 4, 52, 69,193, 65, 38,168, 72, 96,253,141, 83, 96,150,140,155, 50,121,210,179,208, 38, -205,102,140, 26, 51, 73,212,172, 65, 29,132,199, 21, 2,160,224,234, 40, 71,102,102, 22,174, 31,255,205, 86,152,241,116, 35,195, -112, 11,170, 83,158, 25, 17,251,253,203,190,123,121,121, 77,124, 16, 25,137, 43, 87,174,192,213,213, 21,101,226,170, 2, 23,225, - 75,156,133,133,197,127, 46, 92,245, 91,135, 9, 31, 14, 66,255,174,141,112,245,238, 51,152,173, 28, 44, 54,238,121,144,107,226, -173, 77,226,233,195,235,155,167, 14, 13,212,232,173,226,228,239,147, 53, 87,241,242, 34,178,175,166,211, 12,224, 28,128, 54, 0, - 6, 1, 56,255,202, 30,131, 20, 74,226,174, 26, 1,184, 5, 32,209,174,188,211,216,123,255,238, 61, 87,139,141,195,245, 59, 15, -131,187,119,104, 6,194, 17,220,189,123, 15, 91,182,109, 49, 62,126,244, 96,165, 46,199,107, 1, 42,222, 50,166,220,242,180,119, - 22, 97, 5, 2,171,148,243,170, 45, 59, 57,104,227,205, 27, 87,231, 74,106,182, 68,195,126,223, 12,204,120,120,124,160, 87, 72, -111,184, 53,232,128,204,135, 71, 17,241,231,222,211,247,108,182, 57, 82,142, 78,209,231,197,232,236,125,222,203, 32,145,202,167, - 53,106,222, 5,105,169,201, 72,138,139,220,105, 44,136,207, 76,121,198,236,204, 72, 79,153, 92, 47,164, 3,110,156,251,253,179, - 74, 4, 86,165,109,222, 77,172,222,120,229,198,205, 17, 25, 7,143,123, 22,107, 13, 50,129,128,214, 75, 24,228,136,244,207,246, -219,157,206, 39, 79, 44, 69,245, 29,135,142,154,244,237,169, 53,203,231, 9, 61,156, 37,200, 46, 52, 66,163,183,226,255,177,119, -223, 97, 81,156,235,223,192,191,187, 59,219,216,165,215,165, 7, 41, 42,138, 5,123, 84,236, 81,140, 13,163,137,198, 22, 61, 49, - 26,245, 36, 26,253, 25, 79, 44, 88,210,142, 38,150, 20, 19, 99,143,189,197, 18,107, 20,209,168,104, 20, 65, 20,233, 32, 32,101, -129,101,105,219,103,119,222, 63, 20,142,241, 80, 22,147,188,231, 28,189, 63,215,197,165,192,236,151,153,217,103,118,239,125,102, -230,121, 42,181, 38, 8,120, 64,176,151, 45,180, 53,149,136, 59,185,211,196, 25, 85,163,129,120, 83, 67,153,174,109, 70,172,210, -149,101,205, 94,188,120, 17, 4, 98,123,175,128,254,139,140,143,170,242,167, 6, 51,119, 6, 2, 90, 44,130,190,178,112,248,226, -197,139, 90,113, 28, 55,192,181,205,136,170, 39,230, 34,172,119,219,203,170,140,152,208,207, 23, 6,211,163,241,195,204,230, 71, -215,218, 89, 30,143,106,142,198,251,149,235, 50, 57, 64,180,255,231,107,120, 88, 92, 14,173,222, 4,131,145,133,129, 53,131,207, - 23,192,201,201, 9,193, 45,194,225,232, 96, 15,101,105, 25,126,187,246, 43,226, 82,111,103,113,192,170, 82,231,138, 93,214, 60, - 71, 60, 70, 30,236,225,238,202, 43,174, 50, 64, 42, 17, 32,238, 98,172, 9,192,182,218,226,170, 57,239, 29, 0, 80,161, 81,127, -249,225,202,245,227,191,253, 98,153,162,125,128, 61,242, 74,117,200, 47,209,162, 74,199, 2,224,192,154, 57, 24,116, 21, 72,249, -237,116, 17, 11,205,151,120,206, 53,220,131, 37, 20,234,127, 75, 76,149,124, 24,189, 26,201,233, 89,216,188,241,171, 26,125,243, -138,171,127,179,109, 86,139,189,127,197, 70,212,119, 90,208,194,113, 56, 30, 87, 84, 55,237, 71,237,169,194, 91,233,234,166,226, -132,171,231,116,252,191,218, 66,104,195,145,135,113, 18, 73,169, 37, 55, 55,183,124,215,174, 93,117, 69,143, 64, 32, 64,237,245, - 82, 6,131,161,201,187,138,156,236,197,109, 39, 70,190,244, 70, 67,197,149, 64, 32,128,197, 98,169,235,189,106,238,169, 71,153, - 91,203, 65, 93,250,142,218,219,127,228,223,248,231,127,250,193,114,243,226,177, 49, 53, 37,169, 71,154,187, 47,213,106,245, 93, - 0,105,107,214,172,233,184,121,243,230, 22,243,231,207,207,252,225,211, 25, 27, 30,125,130,123,244, 89, 38, 62, 62,158,155, 57, -115,166, 94,167,211,101,149,151,151,223,130, 21,147, 92,107,138, 83,214,108,251,246,159,173,242, 30, 22, 78, 9,106,219, 13,174, - 1, 93,161, 8,234, 6, 85,181, 17,215,211, 31, 34,243,222,121, 36, 95, 61,184, 79, 91,226,241, 9,144,106,245,250,118,232,208, -193,143,207,231, 15,231, 56,174,165, 92, 46, 15,224, 56, 78,204, 48,204, 88, 30,143,151,198,178,236,189,208,208,208,243,201,201, -201, 86,207, 25,246, 32,118,187,222,191,207,148,245, 15, 52,242,190,153, 69,154,240, 7, 26,121,188, 70,226, 48,175,228,194,122, -253,118,129,247, 90,152,202,238, 30,220, 81,113,120,247,166, 47, 4, 19,166,127, 96, 78, 82,217,191,199,216,218, 52,171,183,140, -207,227, 21,206,159,191,224, 95,195, 52,240, 30,157, 24,124, 60,100, 67,129, 53, 25,143,199, 52, 90,152,120, 79,248,117,210,251, - 51, 86,182,235,210,115, 98,159, 33,111,240,109, 69,114,156, 59,242, 29,151,149, 24,115,128,225,204, 31,105, 75, 50,179,254,232, -241,101, 48, 24,126, 87, 88, 89,211,123, 5, 0, 37, 46, 21,125,127, 62,123,113,202,137,211,177,159, 70, 14,234,229,242,205,146, -215,241,207,239,143,194, 86, 38, 1,103, 49,227,245,126,190, 99,150,254,173,245,112, 95, 15,169,247,161,152,252, 75,179,215, 38, - 45,212,104,140,169,104,122,222, 59, 14, 64, 28,128, 96, 0,195, 31, 47, 47, 7, 80, 3,160,250,241,239,127,122,252,189,213,140, -172, 5,217,197, 58, 28, 61,124, 16, 9,215,207, 35, 57, 57,165, 42,249, 94,242, 87, 60,134, 91, 91, 83,156,166, 2,210,154,189, -239,204,245,222, 49,136,250,239, 44,108, 68,141,192,230,147,248, 19,171,251,134,244,255,123, 15,151,160,158,112,242,127, 84, 83, - 86,228, 39, 33,239,183,131, 71,171, 10, 68, 99,129,187,166,154,103,124,142,189,124, 91,132, 88, 4, 98, 92,189,120, 18,156,197, -178, 17, 0, 56,139,101,227,237, 95, 79,206,232, 22, 57, 13,206,238,254, 29,212,185,241,141, 14,229,211, 16, 27,134,173,248,121, -251, 39, 7,178,179,179,113,255,254,125,164,167,167, 67,165, 82, 97,247,238,203,205, 26,171,169, 36,243,218, 57,158,128, 25, 60, -254,173,247,143, 71,189, 22, 37,245, 11, 8,226,183,242,177,135,139, 29,131,148,140,135,200, 72, 74,179,164, 39, 94,210,113, 90, -229,168,146,140,171, 13,246,142,184,134,142,241,224,243, 77, 31,158, 63,246,104,110,193,129, 35,167,182,250,191,217,243,187, 59, -187, 56,213,251, 58,174, 42, 43, 23, 71, 71, 47,109, 85,187,124, 83,115, 17,242, 5,130,170,233, 51,230,200,249, 60,126,221,105, - 64,174,118,183,213,254,195,113, 0, 15, 16, 9,153, 38,159,178, 41, 81,189,192, 90, 44,168,214, 26, 81,173, 49, 66, 93,173, 67, - 81,169, 26,119,239,101,224,198,229, 83,200,206, 72,175, 98, 89, 54, 6, 28, 14,151,184, 84,236,171,103, 96,221,134,123, 88, 33, -240,115,118,178, 67,118,185, 14, 54, 34, 6, 5,185,233,172,145,213, 61,243, 32,235,101, 9,199, 11, 5,109, 71,188,242,214,187, -255, 56, 29, 17,209,219,190,125,120,103,185,171,189, 29, 68, 12, 15, 25,185,197,184, 19,255, 91,205,131,212,219,149,102,147,118, - 72,217,221,227,127,120,150,150,255,217, 2,203,104,102, 7,126,240,143,207,206,154,205,102, 27, 70, 32,208,154, 56,203,144, 63, - 82, 92,253, 85, 56,206,146,255,238,123, 11,126,247,129,192,100,182,216,252,237,221,249,218, 39, 63, 32,240, 76,102, 89,109,207, - 21,199,113,141,245,106, 8, 74,212,250,170, 69,223, 38,236,248,124,199,189,131,120, 52,130,107,254, 31, 93,207,242, 74, 67,130, -203,160,253, 35,171, 52, 44, 15, 64,114, 61,153, 53,253,251,247,175, 43,182, 30,159,174,179,250,245, 82, 44,149,205,232, 55,124, - 42,255,252,209,205,150,223, 98,142,142,125,150,226,234,201,167, 95,167,211, 93,215,233,116, 73, 31,125,244, 81, 23, 15, 15, 15, -143,165, 75,151, 74, 43, 43, 43,133,223,124,243,141,174,180,180,180,168,178,178,242, 26,154,119, 93,139,165, 60,255,206, 91, 63, - 31, 50,125,199, 59,184,229, 21, 39,119,239,193,142,174,190, 45,203, 75,242, 51, 42,203,242, 79,243, 44, 56, 87, 93,146,122,173, -185, 43,154,144,144,144, 27, 22, 22,246,147, 64, 32,240, 49,155,205,174, 60, 30,207,150,227,184,114,150,101,203, 45, 22, 75, 97, -115,138,171, 39,139, 44,223,214,189,246,148,105, 45, 98, 35, 79,186,231, 65,236,118, 61, 0, 40,207, 45,208, 0, 56,134,190,255, - 23,117,244,106,246, 87,119,203,237,231,148,196,254,243,120,115,243, 11,110,239, 15,254,179,218,191,174,240, 94, 62,128, 41,119, -110,226,139,164,248,107,203,120, 28,132,102,176,171,180,202,244,155,127, 70,190, 80, 40,212,117,238,220,185,222,187, 5, 37, 18, - 73,227,227,150,197,198,178, 74, 96, 51,250,244,217,126,250,252,229, 41,167,206,253,250,105,247, 30,189, 92,164, 18, 47,248, 59, - 25,177,125, 65,167,191,159,143, 47,185, 49, 98,193,165,111, 51, 11,116,137,104,252,250,171,250,164, 3,168,120,220,147,181, 9, -192,244,199,199, 86, 82,179, 11, 1, 11,222,236,209,163,235,110, 30,143,199,112,172,229,159,215,132,130, 61,186,194,228,124,252, -193,233, 67,218, 7,216, 99,250,140, 25, 33,129, 65,255,186,139,176,237, 75,118,152, 48,229,237, 16,255, 22, 33,117, 63,107,229, -219,196, 7,170,194,120,109,181,123,216,160,148,179,107,150,184,100, 92,121,215,198,217,199,182,166, 52, 71, 85,158,115,115,141, - 70,233,177,166,158, 25, 26,154, 37, 59,253,238,218, 45, 95, 44,156, 95,248, 48, 99,179,166, 36,237,209, 89,135,146,180,164,228, - 91, 88, 82, 90,148, 63,191, 76,153,185,230, 89,247, 69, 77, 77, 77,193,174, 93,187, 28,123,246,236,201,247,240,240, 64, 73, 73, - 9, 98, 98, 98, 44, 22,139,229, 97,115,179,148,105,151, 99, 16, 24,232,188,103,123,197, 63, 25, 27,187,161,172, 25, 94, 28,199, -129,225,243, 10,141,250,138,211, 37,142,218, 5,184, 19,215,104, 59,226, 44,102, 30,199,231,248,181,115, 11, 90, 44, 22,222,234, -175,119,230, 8,132,226,122, 79,169,154, 77, 6,153,197, 98,177,122, 46,194, 98,193, 3,151, 48, 83,235,166,239,226,227,128, 36, -222,253, 38, 62,156,114,103, 94,142,156, 52,152,101,205,166,199,199, 71,237,151,146,227,120, 23,192, 51,159, 45,117,174,186,214, -156,162,234,119, 47,244, 70,163, 35,248, 34,216,201, 76,224,131,135,202,138, 10,137,155, 89,156, 92,250, 7,218,146,242,238,177, -187,202, 62,125,252, 13,191, 92,152, 28,123,249,202, 88,206, 98, 9, 48,115, 0, 56, 94,182,193,168, 59,160,180, 47,221,241,172, -235,251,191,134,247, 23,231, 91,117,186,228,191, 48, 83, 4,192, 21,143,134,196, 47,254,147,215,179,193,185, 5,255,200,182,219, - 42, 90,247,146, 72,101, 11, 52,154,170,205, 90,101,218,241, 63,121,127, 58, 72, 36,146,112, 91, 91, 91, 97,105,105,233,245,199, -111,106,207,227,243, 94,167,215, 91, 91, 93,251, 15,126,249,253,115, 63,223, 88,255,248,244, 97, 29,239, 49, 95, 74, 39, 12,141, -152,183,243,240,137,181,245,220, 69,248, 63,191,237,127, 89,102,159, 62,140,123,185,253, 20,179,217,178,170,127, 72,149,166, 40, - 43,101,230,229, 59, 37,215, 1, 84,253,193,245, 28,255, 68, 15,214,158,255,150,109,119,107, 59,114, 5,120, 8,181, 58,129, 67, -114,201,221,163, 75,155, 92,207,208, 80,145,172, 4, 78,154, 82,215,178,103, 40,172,254, 19,109, 73,208,174, 93,187,222, 34,145, -200,207,108, 54,203, 12, 6,131, 70,171,213,102,231,228,228, 92, 69,195, 19,146,255,165,235,233, 30, 54,114,173, 80, 40,124, 15, - 0, 76, 38,211,122,101,210,209,185,141, 61,176,145,229,255,250,253, 57,102,140, 0, 7, 15,154,255,138,231,200,171,227,107,106, -147,137,173,155,123, 72, 36,100, 42, 30,222, 62,228,248, 31,108, 75,164,153, 79, 42,101, 82, 38,101, 82,230,211,248,180, 63, 41, -243, 63,153,233, 25, 58,204,215, 51,116,152,213,131, 37, 55,176, 60,237, 79,210, 32,134,118, 1, 33,228, 63,192, 66,187,128,252, - 39, 21, 38,159,200,251, 43,151, 39,132,215, 72, 21,218,156,174,191,103,169,100,147, 40,147, 50, 41,147, 50, 41,147, 50, 41,243, -133,203,108, 42,155, 78, 61,254, 69,133, 23,101, 82, 38,101, 82, 38,101, 82, 38,101,190,120,153,207, 21, 62,237, 2, 66, 8, 33, -132, 16, 42,176, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66, - 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33, -132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8,249,235,208, 76,227,148, 73,153,148, 73,153,148, 73,153,148,249,194,161, -145,220, 9, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 66, 5, 22, - 33,132, 16, 66,200,127, 13, 30, 26,190, 19, 32,169, 25, 57,207,114, 55, 65, 18,101, 82, 38,101, 82, 38,101, 82, 38,101,190,112, -153, 77,101, 39,129,252, 37,133, 23,101, 82, 38,101, 82, 38,101, 82, 38,101,190,120,153,207, 21, 58, 69, 72, 8, 33,132, 16, 66, - 5, 22, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 16, 42,176, 8, 33,132, 16, 66, 8, 33,132, - 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 27,194, 75,109, 0, 0, 32, 0, 73, - 68, 65, 84, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,127, 33,154,105,156, 50, 41,147, - 50, 41,147, 50, 41,147, 50, 95, 56, 52,146, 59, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80, -129, 69, 8, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,249,175,193, 67,195,119, 2, 36, 53, 35,231, 89,238, 38, 72,162, 76,202, -164, 76,202,164, 76,202,164,204, 23, 46,179,169,236, 36,144,191,164,240,162, 76,202,164, 76,202,164, 76,202,164,204, 23, 47,243, -185, 66,167, 8, 9, 33,132, 16, 66,168,192, 34,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 66, - 5, 22, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, - 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,228, 47, 68, 51,141, 83, 38,101, 82, 38,101, - 82, 38,101, 82,230, 11,135, 70,114, 39,132, 16, 66, 8,161, 2,139, 16, 66, 8, 33,132, 10, 44, 66, 8, 33,132, 16, 42,176, 8, - 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33,255, 53,120,104,248, 78,128,164,102,228, 60,203,221, 4, 73,148, 73,153,148, 73, -153,148, 73,153,148,249,194,101, 54,149,157, 4,242,151, 20, 94,148, 73,153,148, 73,153,148, 73,153,148,249,226,101, 62, 87,232, - 20, 33, 33,132, 16, 66, 8, 21, 88,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66,168,192, 34, -132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, - 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132, 16, 66, 8, 33,132,252,133,104,166,113,202,164, 76,202,164, 76,202,164, - 76,202,124,225,208, 72,238,132, 16, 66, 8, 33, 84, 96, 17, 66, 8, 33,132, 80,129, 69, 8, 33,132, 16, 66, 5, 22, 33,132, 16, - 66, 8,161, 2,139, 16, 66, 8, 33,228,191, 6, 15, 13,223, 9,144,212,140,156,103,185,155, 32,137, 50, 41,147, 50, 41,147, 50, - 41,147, 50, 95,184,204,166,178,147, 64,254,146,194,139, 50, 41,147, 50, 41,147, 50, 41,147, 50, 95,188,204,231, 10,157, 34, 36, -132, 16, 66, 8,249,147, 49,245,254,176,235,170, 98,150,101,221, 1,128, 97, 24,165,233,198, 98, 69, 99, 33,190,158,158, 3,205, -192, 15, 0, 32, 0,222,206, 47, 44, 60, 87, 79,230, 57,150,101,157, 30,103,150,155,110, 44,126,165,177, 76, 97,215, 85,103,159, - 92,158,189,177,120,208,211,203,112, 0, 95,216,117, 85,225, 83,235,234,105,237,198,243, 0,203,255,143,245,252, 95,201,124,145, - 9,187,173, 42, 54,153, 30,181, 35,161,144, 81, 26,175, 55,222,142, 68,221, 86, 21, 62,185,188,233,250, 98,143,167,151, 17,247, -248, 36,215,100, 98, 61, 1, 64, 34, 22,151, 4,251,123,172,107, 44, 51, 51, 79,249,190, 86,167,119,123,156, 89,104,184,246, 15, -191,255,213, 99,211, 90, 30, 30, 30,157,249,124,254, 98, 30,143,103,255,196,143, 19, 11, 10, 10,222,167, 86, 73, 8,121,238, 10, - 44,150,101,221,111, 29, 89,134, 26, 61, 48, 96,210, 42,247, 22,163, 54,237,126,122, 25,147,174, 92,172, 73, 59,218, 70, 96, 82, - 59, 57,218,112, 78,105,105,105,124, 0,240,242,242,250, 1,128, 95, 61,153, 78,183,142, 44,131,198, 0, 68,140, 91,238,212,193, -223,223,190,146,199,251,192,198,198,166,191, 78,167,107, 11, 0, 82,169,244,174, 86,171,189, 96,207,113, 95, 60,189,124, 67, 27, -240,228,186,246,159,184,202,189,101,212, 15,127, 55,155,205, 98,125,230,254, 62,150,170, 7,140,192,108,248,122, 72, 97,225,169, -239, 1,179, 53, 59,228,201,191,219,231,141,127,184,248,122,122, 14,180,145,201, 58,203,108,109,123,155,205,230, 80,139,197, 2, -139,197,146,172,173,169,185,204,154, 76, 55,205, 38,141,203,173,159, 62,177, 52,182,158, 79,111, 75, 39,128, 81, 42, 20, 99,109, -108,109,251, 10, 4,130,158, 0, 96, 54,155,175,104,171,171, 47,186, 23, 21, 29,176,102,219,173,221, 63,207,186,252,139,198,100, - 98,221,179,206, 44,131,222, 4,132,191,246,169,123,251, 55,119,236, 1, 0,131, 50,193,163, 58,237, 88, 55, 0,144, 7, 13,187, - 46, 81,132, 23, 3, 0,243,160,208, 61,245,196, 71,208,155,128,208, 97,203,221,235,203, 52, 24,140,190,233, 39,151, 64,111, 2, -254, 22,125,208,115,193,140, 49, 50, 0,136,249,233,251,160,179, 7,215,191, 10, 0,175,140,121,239,231,126,163,222,201, 0,128, -213,223, 29,244,220,245,241, 24,232, 77, 64,216,200,149,190,207,122,108,178,250, 10,145, 58,245, 68,176,169,178,192,201, 87,206, - 40,154,123,108, 58, 0, 14,213,192,108,158, 64,208, 43, 56, 56,184, 19, 0,100,100,100,220,178,176,236,175,182,192,215,127,102, - 91, 18, 8, 4,127,127,248,240,225,240, 39,127,230,237,237, 77, 13,146, 16,242,124, 22, 88, 0, 80,163, 7, 98,211,129, 62,221, -219, 99,250,132, 87,109,159,252,221, 79,219, 62,243,125,120,247,108,232,234,189,235, 4, 45, 91,182, 68, 90, 90,154, 85,127, 76, - 99, 0, 46,166, 1, 18, 93,182,157, 70, 40,204,140, 94,188,216,190, 87,175, 94,140,151,151, 23, 0, 64,169, 84,118,191,124,249, -114,231,229,203,151,207,148,232,178,203, 53, 6, 84, 93,180, 34,186,118, 93,219,182,124, 9, 31,205, 25,231, 0, 0,235, 62, 56, -208,249,228,213, 4,231,236,236,236, 1,159,124,242, 73,153,247,181,107, 27,109, 45,150,173, 41,197,197,121,214,172,231,190, 83, -241, 54,193,198,115, 45,198, 76,157,122,216,207,207, 79,230,227,227,195,147, 74,165, 16, 8, 4,168,174,174,246, 74, 73, 73, 25, -120,251,246,109,237,165,107, 71,133, 9,241,163,179, 10,132,225, 90,107,182, 93,196,150, 74,107, 66, 66,238,141,137,140,244, 25, - 54,108,152, 52, 32, 32, 0, 0,144,157,157, 29,242,243,207, 63,143, 63,121,242,228, 82, 17, 91,202,106, 12,208, 53,181,237,181, -153, 0, 32, 4, 94,118,118,119,159, 32, 20, 10,195, 88,150,245,126,220,187,240,208,100, 50, 37,169,148,202, 93, 79, 47, 79,254, -157,222, 4, 36, 23, 2, 3,123,135, 99,226,232,129,114, 0, 88,248,198,199,221, 31,100,167,139, 12, 6, 3, 90,182, 10,237,185, -242,211, 47,207,128,207,199,143,135,127,169, 91,190,209,194,150,227, 35, 77, 9, 36,222,207,194,178,143, 55,112, 69,137, 7,187, -176,229,247, 6,149,149,150, 50, 0,224,226,234, 58,118,223,158, 93,231, 20,237,199,252,150, 81, 92, 83,183,188, 53,237,189,190, - 99,243,228,222, 13, 94, 15,147, 46,180,249,246,204,102,161,159,159, 31,146,146,146,154,117,108,162, 34,197, 78,230,233,153, 28, -189, 96,129, 34, 34, 34, 2,114,185, 28, 66,161, 16, 38,147,105,224,149, 43, 87, 6, 46, 91,182,108,102,101, 69, 74,141,181,199, -166, 21,125,135, 95,120,180,236,211, 47,106,196, 80,207,254,125,186, 99,244,144,158,212, 16, 9, 33,207,111,129,197, 48,140,114, -208,228, 79,220,123,119, 11,195,111, 9,169, 21,217,185, 69,213,181,191, 83,223, 63, 18, 50, 35,170, 67,216,166,147, 39, 96, 52, - 26,113,245,234, 85,220,188,121, 19, 87,175, 94,229,190,248,226, 11,173, 0,120,187,129,204,242,136,113,203,157, 36,250, 60,219, - 78, 46,121, 1,251,246, 92, 20,104,181, 90,196,198,198,162,188,188, 28, 18,137, 4,222,222,222,232,221,187, 55, 19, 19, 19,227, -252,198,248, 9, 14,175,140,154,150,165,151,248, 86, 51, 12, 83,206, 54,180, 1, 12,163, 28, 48,105,149,123,155,144,151,144,145, - 83, 80,241,209,167,155,171, 45,102,142,209, 61,200, 55, 94,186,116, 9, 29, 59,118,196,190,125,251, 92,202,203,203,151,108,223, -190,125,177,199, 87,219,214, 23,231,167,124,128,134,243,202, 35,198, 45,119,106,105, 62,239,119, 96,247, 86, 81, 66, 66,130,104, -227,198,141, 80,169, 84, 16,139,197,112,112,112,128, 66,161, 64,203,150, 45,121, 51,103,206,148,245,235,151,134,143, 62,152,234, - 87,228, 20,149,210,208,122,214,102,138, 12,133,178, 16,193,205,160, 31,118,236,224,119,237,218,149,247,228, 50,126,126,126,232, -219,183,175, 52, 42, 42, 42,104,230,172, 57,150,129, 81,239,100, 24,197,158,154,166, 50, 81,147,103,227,162,185,230, 53,112,220, -184,227,209,209,209,142,158,158,158,144,201,100, 0,128,138,138, 10,159,156,156,156,238,203,150, 45, 27,115, 61,113, 31, 19, 49, - 44,175, 0,114, 95,109, 99,251,243, 69, 37, 20, 50,202,218,158, 40, 59,185, 77,121, 94,126,113,205,163, 94, 40, 3, 12, 6, 3, -244,122, 61,222,157,249,142,224,237,215,186, 6,251,247,254,251,237,236,135,197,170,208, 95,226,156,107, 31,107,170, 63,179,180, -205,136,149, 78, 0,192,175,204,170, 41,207, 57,251,183, 15,231,206,245, 86, 40,102, 64, 36, 18, 1, 0,182,109,221,202,148,149, -149, 69,174, 92,185, 50,140,147, 15,168,108, 51, 98,165,252,241, 99,203, 77,205, 60, 54,203, 83, 79,180,248,120,246,224, 14, 63, -124,122, 2,102,179, 25,113,113,113,184,116,233, 18,190,252,242, 75,238,212,169, 83, 21,246,114,121,163,199, 38, 42, 82,236,122, -121, 22, 5,126,254,249, 33,158, 88, 44,198,209,163, 71,113,255,254,125,240,249,124,180,111,223, 30, 19, 39, 78,196,192,129, 3, - 21,211,167,191,195, 69, 12,121, 35, 19, 14,173,170,254, 88, 91,138,230,179, 78,119,254, 62,123,250,155,158,175,141, 28,140, 13, - 95,125, 75, 5, 22, 33,228,249,198, 1,188,128, 81,155,246, 28,184,197,157, 8, 24,181,105, 15, 7,240, 56,128, 39, 1,252,250, -247,239,111,168,174,174,230, 18, 18, 18,184,177, 99,199,150, 47, 92,176, 96,203,142,109,219,162,245, 26,205,187,157, 58,116,152, -200, 61, 26,250,161,254, 76, 71, 71,251,192,192,192,146,188,188, 60,238,212,169, 83,220,242,229,203,185,221,187,119,115,167, 79, -159,230,206,159, 63,207,157, 62,125,154,219,191,127, 63,151,144,144,192,165,167,167,115, 65, 65, 65, 37, 1,142,142,246,141,100, -242, 57,128, 31, 28,245,253, 7, 7,111,154,163, 67,162,126,120,159, 3,248, 65, 10, 69,171, 65,131, 6,153, 15, 29, 58,196,237, -218,181,139,219,177, 99, 7,151,152,152,200,149,150,150,114,222,254,129, 37,181,143,107,104, 61, 57,128, 23, 30, 30, 94,162, 86, -171, 57, 63, 63, 63, 78, 36, 18,113,238,238,238, 92,203,150, 45,185,238,221,187,115, 67,134, 12,225,198,143, 31,207, 45, 89,178, -132, 83,171,213,156,191,191,127,113,237,227, 26,202,236,238,237, 45, 13, 10, 10,202,189,115,231, 14,215, 16,157, 78,199,149,150, -150,114, 23, 46, 92,224,130,130,130,114,187,123,123, 75, 27,203, 20, 2,225, 97, 97, 97, 37,165,165,165,156,197, 98,225, 52, 26, - 13, 87, 86, 86,198,149,149,149,113,229,229,229,156,193, 96,224, 44, 22, 11,103,177, 88,184,148,148, 20, 46, 48, 48, 80, 41, 4, -194, 27,202,124,193,219, 60,191,190, 47,111, 15,143, 33, 10,133, 66,123,232,208, 33,238,225,195,135,220,246,237,219, 57, 62,240, -241,211,203,213,151, 57, 38,116,140, 40, 60,124,186,141, 64, 96,243,234,203, 47,191,108,190,122,245, 42,119,235,214, 45,238,195, - 15, 63,228,134, 15, 31,206,141, 24, 49,130,139,142,142,230,114,115,115,185,188,188, 60,238,149, 87, 94, 49, 11, 4, 54,175,134, -135, 79,183, 25, 19, 58, 70,212,156, 99, 83, 10,248, 14, 27, 54, 76,107, 52, 26,185,204,204, 76,174,109,219,182,249, 2, 96,130, - 8, 8, 13, 4,196, 77,181, 79,123,192,209,211,211,179,240,218,181,107,220,161, 67,135, 56,127,127,255, 18, 1,240,150, 4, 8, -144, 0, 1, 2,224,173, 22, 45, 90,148, 92,187,118,141, 43, 45, 45,229,252,252,252, 10,237, 1,199,103,111, 75,209,124,247,182, -163,182,174,252,234, 16,151,146, 95,195,173,252,234, 16,231,209,178,111, 46,199,113,156,167,167,231, 57,106,145,132,144,231,178, - 7,171, 33,124, 27,155,101,159,126,250,169, 72,171,213, 98,197,138, 21, 37,239,206,152,177,202,213,221,221, 40, 20, 10, 33,148, - 72,154, 14,176,183,127,127,209,162, 69,142, 6,131, 1,241,241,241,232,212,169, 19,164, 82, 41,132, 66, 33, 68, 34, 17, 24,134, -129, 66,161, 64,105,105, 41, 60, 60, 60, 48,115,230, 76,135,175, 55,108,120, 31,106,245,138,198, 98, 45,102,142, 1, 0,179,217, - 44,246,245,242,154,222,182, 93,187, 47,102,206,156,201,151,203,229,208,235,245,208,235,245, 72, 73, 73,129,139,139, 11,100, 54, - 54, 86,109, 51,159,207,231,219,218,218, 34, 54, 54, 22, 91,183,110, 69, 86, 86, 22, 10, 10, 10, 96,111,111,143,142, 29, 59, 34, - 52, 52, 20, 61,123,246, 68,122,122, 58,120, 60, 94,147,111, 50,197, 2,193,236,137,227,198,185,135,133,213,127,103,171, 94,175, -135, 90,173,134, 90,173,134,135,135, 7, 34, 35, 35,221,143, 31, 61, 58, 27,192,154,250,150,151, 1,138,128,144,144,227, 55,110, -220,112,229,243,249,136,141,141,133, 70,163,129, 78,167, 3,203,178,224,241,120,144, 74,165,232,209,163, 7, 92, 92, 92, 16, 18, - 18,130, 35, 71,142,184, 13, 26, 52,232,103, 89,113,113, 56,128, 66,106,254, 77,203, 47, 46, 62,219, 9,112,121,243,205, 55, 79, - 37, 38, 38, 70, 76,152, 48, 1,197,197,197,255, 16,124,248, 97,185, 25, 88,219,216, 99, 15, 36, 31,100,125, 0,185,179,155,219, -247,159,125,246, 25,191,168,168, 8,243,230,205, 43, 43,200,203, 91, 36, 5,174, 1,192,207,199,142,245,216,185,115,231,167,187, -118,237,114,217,177, 99, 7,191, 83,167, 78,155,148,241,155,218,220, 2, 42,154, 83,185,232,128,191,175, 91,183, 78,170,211,233, - 48,104,208,160, 76, 77,118,118,123, 22,208, 90,251,248,106, 96,118,244,130, 5, 10,137, 68,130,249,243,231,151,150, 62,120,208, -150, 5, 74,158, 88, 36, 71,158,149,117,106,210,164, 73,119, 19, 19, 19, 93,215,174, 93,171,120, 45, 42,106, 54,128, 85,214,254, -141,127, 93,208,206,183, 55,219,198,134,140, 26, 18,233,209,170,133, 59, 14, 29, 61,131,175, 55,237,222, 6,117,198,247,222,222, -222,179,249,124,254,106,106,121,132,144, 23,170,192,114,114,114,234, 28, 20, 20,132,243,231,207,163,117,235,214, 71,220,107,139, - 43,161, 16,102,115,211,215,144,219,200,229, 3, 34, 34, 34,152,171, 87,175, 34, 32, 32, 0, 54, 54, 54,117,133, 85,109,145, 37, - 20, 10,161, 80, 40, 80, 81, 81,129, 94,189,122, 9,183,110,221, 58, 0,192,138,166,178, 11,115, 82,108,145,185,245,205,229, 43, - 87, 6,118,238,220, 25, 70,163,241, 81, 33, 34,147, 65,175,215, 67, 40, 20,194,104, 52, 66,103,224, 42,173,217, 86,179,217,108, - 22, 8, 4,240,243,243,195,210,165, 75,161,211,233,234, 78,235, 84, 86, 86, 66,173, 86, 35, 62, 62, 30,217,217,217,176, 88, 44, - 92, 83,121, 50, 91,219,200, 17, 35, 70,136,235,251,157,193, 96,168, 43,174, 42, 42, 42,160,211,233,208,161, 67, 7,241,133, 11, - 23, 34, 27, 42,176,120, 82,233,152, 29, 59,118,184,139,197, 98,232,116, 58,164,165,165, 33, 35, 35, 3, 41, 41, 41,122,149, 74, -197,218,218,218,242, 60, 61, 61, 5, 21, 21, 21,226, 73,147, 38,241,170,170,170, 0, 0, 81, 81, 81, 46,219,182,108,121, 29, 6, -195, 90,106,254,214,185, 5,232,131, 12,134,225, 93,187,118,189,240,219,111,191,117,122,239,189,247,144,152,152,248, 79,217,190, -125,151, 52,192,237, 70,219, 37, 48,115,245,194,133,158,114,185, 28, 19, 39, 78, 84,105,242,242,218,179, 64,209, 19,139,164,186, -100,103,159,158, 60,121,114, 82, 98, 98,162,211,218,181,107, 21,175,143, 25, 51, 19,192,167,205, 89, 71, 7, 7,135,174, 10,133, - 2,167, 79,159, 70,110,118,246,194,230, 20, 87, 0,192, 19, 8,122,245,233,211, 7, 63,253,244, 19,242, 31, 60, 88,248, 84,113, - 5, 0,168, 1, 74,152,204,204,133,219,182,109,219, 58,117,234, 84,240, 25,166, 23, 88,235, 79, 16,214,119, 65,251,187, 11, 87, -227,200,233,184,109,202,187,237,254, 6,252,100, 1,112,131, 90, 28, 33,228,121,208,172,113,176, 90,180,104,209, 66, 34,145, 32, - 39, 39, 7,221,186,117,203, 22,138,197,144,136,197,144,216,216, 88,247, 41, 91,167,107,167, 80, 40, 80, 89, 89, 9, 87, 87, 87, -136, 68, 34,136, 68, 34,136,197, 98,136,197,226,186,239,237,236,236,192,231,243,225,237,237, 13,157, 78,215,174,169, 92,182, 34, -205,253,204,246,133,179, 78, 30,217, 25, 24, 21, 21, 5, 47, 47, 79,120,123,123, 65, 46,151,131, 97, 24,248,249,249, 33, 40, 40, - 8, 91,182,108, 1,207, 62,228,186, 53,235,250,100,209, 36, 16, 8, 96, 54,155, 81, 92, 92,140,148,148, 20, 36, 38, 38,226,218, -181,107,136,143,143, 71,117,117,181, 85,219,174,209,104, 58,214,215,209,245,116,113,165, 86,171, 81, 82, 82,130,140,140, 12, 84, - 85, 85,133, 55, 88,236,186,184,140, 14, 11, 11, 19, 0,128, 84, 42, 69,139, 22, 45,240,221,119,223,177,231, 78,159,126,221,230, -183,223, 28,205, 23, 46, 56,236,249,241,199,215,167, 77,155,102,190,126,253, 58, 42, 43, 43,145,154,154, 10, 55, 55, 55, 70, 98, - 99,243, 58, 53,253,230,201, 0,106,228, 85, 85, 67, 94,126,249,229,172,138,138, 10,172, 94,189,154,207,216,217,125,255, 14, 32, -104,244, 0, 19, 8,122,247,235,215, 15, 71,143, 30, 69,254,131, 7, 31,150,253,190,184, 2, 0,148, 1, 69,217, 25, 25, 11,183, -109,219,134,200,200, 72, 48, 12,211,187,185,235,215,189,123,247, 48,142,227,112,231,206, 29,136,129,184,230, 62, 62, 56, 56,184, -147,173,173, 45,238,223,191, 15, 33,112,169,161,229,132,192,165,248,248,120,216,216,216,160, 77,155, 54,157,155,247, 87,132, 95, -120,180,236, 83,248,238,194,213, 56,124,250, 10, 0,224,167,227,167,138, 31, 21, 87,209, 22,106,101,132,144, 23,182,192, 2, 0, -142,227, 32, 16, 8, 32, 98, 24,216, 72, 36, 16, 75, 36, 16, 11,133,214,127, 82,230,241, 32,145, 72,254,173,168,170, 45,180,106, -255,149,203,229, 86,103,154, 10,127,141,152, 50,121,146,216,214,214, 22,102, 51, 11,134, 97, 32,147,201,160, 80,120,160, 85,171, - 86, 80,169, 84, 24, 62, 98,148,238,129,138, 57, 46,244, 25,144,248, 44, 59,138,101, 89,212,212,212,160,188,188, 28, 42,149, 10, -149,149,149,208,233,116,176,226,236, 96, 93,157,150,155,155,139,189,123,247,162,172,172,172,193,226, 42, 51, 51, 19, 59,119,238, - 68,118,118, 54, 4, 2,129,213,207,207,128, 1, 3,112,226,196, 9, 65,223, 1, 3, 54, 63,240,247, 47,124,224,239, 95,216,119, -192,128,205,199,142, 29, 19,120,123,123, 35, 55, 55, 23,241,241,241, 80,169, 84,176, 88, 44,116, 13,214, 51, 40, 0,202, 53, 42, -213,212,127,252,227, 31,156,173,173, 45,214,172, 89,211,113, 11, 48,190,177,199, 4, 6, 5,117,178,181,181, 69,114,114, 50,100, -141, 20, 46, 50,224,210,173, 91,183, 96, 99, 99,131, 86,161,161,157,159,229,184,180, 88, 44, 48,155,205,245,142,239,102,205,113, - 41, 20, 10,193,231,255, 85, 99, 15, 71,243, 89,167, 14,127,159, 61,123,142,231,223,231,188,139, 11,177,143,106, 64, 65,117,102, - 26, 21, 87,132,144,231, 81,179, 78, 17,102,100,100,100,235,116,186,208,128,128, 0,220,189,123, 55,160,109,187,118,137, 66,161, - 16, 18,161,176,241,143,241,143, 73,165,210, 59,197,197,197, 61,125,124,124, 96, 50,153,234, 78, 9,214,158, 38,172,253, 30, 0, - 36, 18, 9,146,147,147, 33,149, 74,239, 52,185, 17,230,106,255, 22, 45, 90,160,168,168, 24, 18,137, 4, 78, 78,142,176,177,177, -129, 68, 34,197,167,159,126,106,217,188,105,211, 55,146,182,179,213,115,167, 45,228,110,172,250,225, 63,178,163,101, 50,217,157, -128,128,128, 30,114,185, 28, 71,142, 28, 65,118,118, 54,212,106,117,221,117, 83, 90,173, 22,122,189, 30, 82,169, 20,109,218,180, -129,179,179, 51,238,222,189,219,224,182,151,151,149, 29, 78, 74, 74,234,209,165, 75,151,186, 93,223,183,111, 95, 94,223,190,125, - 93,159,232, 53, 67, 89, 89, 25, 18, 18, 18, 16, 27, 27, 11,150,101,113,239,222, 61,179, 94,171,221, 71, 77,255,217,232,128, 43, -130,109,219,182,206,152, 49, 99, 90,207,158, 61,193, 1, 67, 1,252,216,224, 39, 24, 62,159,199, 48, 12,120, 60, 94,163,133, 15, - 15,176,112, 28, 87, 91,236, 52,187, 0,190,118,237, 90,146,217,108,238,217,178,101, 75,232,129,174, 0, 78, 52,231,241,233,233, -233,183, 76, 38,211,192, 14, 29, 58,224,240,129, 3, 17, 0,114,234,253, 48, 3, 68,132,135,135, 67,171,213,226,222,189,123, 55, -173, 45,174,220,219,222,217, 60,123,250,155,111,189, 54,114, 48, 14, 29, 61,131,159,142,159,206,251,246,243, 5,190, 28,103, 49, - 82,171, 34,132,188,240, 61, 88, 21, 21, 21,191,221,191,127, 31,221,187,119, 71,122,102,102,148, 94,171, 21,213,246, 98,241, 5, - 77,151, 88,218,154,154,243,191,254,250, 43,219,177, 99, 71, 84, 87, 87,215, 21, 85, 79,246, 94,213, 22, 92,114,185, 28,167, 78, -157, 50,106,107,106,206, 55,149,107,102,205, 22, 62,159, 15, 30,143, 7,189, 94,143,194,194, 34,232,116,122,252,240,195, 15,216, -178,105,211,248,252,194,194,247, 33,113,210,254, 21, 59,208,218,247, 66,173, 86,123,254,252,249,243,166,128,128, 0, 76,153, 50, - 5,115,231,206,197,220,185,115,241,206, 59,239,224,173,183,222,194,132, 9, 19, 48,122,244,104,116,235,214, 13,110,110,110,200, -202,202, 50,105,181,218, 6,183,157,211,233, 14, 78,158, 60, 89,169,211,233, 96, 54,155,161,215,235,161,213,106,235,122,217,226, -227,227,113,248,240, 97,108,218,180, 9, 63,255,252, 51,106,106,106, 80, 89, 89,137, 91,183,110,169, 5, 38,211,126,106,250,127, -232,160, 57,244,235,175,191,194,201,201, 9, 94, 62, 62,125, 26,253, 80,146,158,126,219,108, 54,163,125,251,246,168, 1, 26, 92, -182, 6,232,211,177, 99, 71,232,116, 58, 36,223,187, 23,223,220,117,170,170,170,186,145,149,149,133,190,125,251,194,211,199,231, - 11, 15,192,166, 57,143,183,176,236,175, 87,174, 92,193,164, 73,147,224,223,162,197,231,114,192,237,233,101,228,128, 91, 64, 80, -208,231,111,189,245, 22,206,158, 61, 11, 11,203,254,218, 80,158,135,135, 71,103, 79, 79,207, 99, 94, 94, 94,177, 30, 65,231,114, -162,134,116,127,235,201, 11,218, 57,117,198, 88,111,111,239, 93,124, 62,127, 62,181, 40, 66,200, 11, 95, 96, 89,180,218,229,139, - 22, 45, 50, 8, 4, 2,204,154, 53,203,237,235,111,191, 93,190,127,255,254, 46, 9,119,238, 40, 12,122,125,211, 21, 86,101,229, -186,149, 43, 87,170,141, 70, 35, 90,183,110, 13,149, 74, 5,179,217, 12,129, 64, 0,134, 97, 32, 16, 8,192,231,243, 33,147,201, -144,148,148,132,125,251,246, 85,162,178,114, 93,147,235,101,177,220, 57,114,228, 8, 24,134,225,164, 82,105, 93,209,179, 97,195, - 6,229,180,194,194,195, 0, 32, 16, 8, 12, 0,192, 23,240,172,186, 42,151,207,231, 55,121,225,186, 88, 44,174,189,184,191,233, -139,220, 89,118,221,119,223,125, 87,149,150,150, 6,141, 70, 83,119,106,176,186,186, 26, 85, 85, 85,117,223,215, 22,137,151, 46, - 93,170,146,177,108,131,219,174, 1,138,178,211,210,134,119,233,210,165, 44, 39, 39, 7,213,213,213, 72, 79, 79,199,181,107,215, -112,226,196, 9,196,196,196, 32, 35, 35, 3, 6,131, 1,142,142,142,168,172,172,196,177, 99,199, 42,245,213,213,131, 53,245, 92, - 7, 68,254,197,215,211,115,128,135,187,123,158,155,171,235, 67, 95, 79,207, 1,245, 20, 26,169,169,169,169, 48,155,205, 8, 12, - 12,116,110,236, 58, 44, 51,203,254,122,237,218, 53, 76,152, 48, 1, 10,111,239, 79,221,234, 41, 92,220, 0, 55, 79, 31,159, 79, -167, 76,153,130,243,231,207,195,220, 72,225,210, 16, 41,176, 97,193,130, 5, 90,145, 72,132,125,251,246, 5,218, 7, 7,167, 48, -192,155, 98,160,117, 16, 32,106,234,241,182,192,215, 75,150, 44, 41, 2,128, 93,187,118,185,122, 6, 5,221,101,128, 41, 82,224, - 37, 41,240, 18, 3, 76,241, 12, 10,186,187,111,223, 62, 87,150,101, 49,119,238,220, 34, 91,224,235,134,242, 4, 2,193,223, 11, - 10, 10,134, 63,124,248, 48,162, 40,253,170,239,183,159, 47,192,133,216, 56,124,189,105,247, 54,229,221,118,127, 83, 42, 31,222, - 40, 40, 40,152,248,240,225,195, 36,106,113,132,144,231, 81,189,221, 47, 76,215, 85,197, 0,231,222,167,123,123,252,150,144, 82, -225,226,228,112,186,246,119,234,251, 71, 66, 94,239,235,223,113,249,242,229,224,241,120,184,127,255, 62, 18, 19, 31, 93,214,180, -122,245,106, 13,159,227,162,158,152,239, 44, 12, 64,210,227,204,115, 44,203, 58, 73,244,121,182,225, 78, 89, 45,126,220,177, 77, - 96,103,103,135,234,234,106, 8, 4, 2, 72,165, 82,200,229,114, 72, 36, 18, 36, 38, 38, 98,210,148,169,230, 12,182,195,191, 6, - 26,253,215,124,103,117,153,181,227, 15,245,116,113,145,229,138, 68, 31,184,121,120, 44,152, 51,103,142, 77, 68, 68, 4,196, 98, - 49, 58,119,235, 93,100,211,113,193,122,190,128,199, 22,148, 86, 44, 14,122,201,203,225, 94, 90, 14, 0,158,210,116, 99,177,231, - 19,167,108,254,109, 61,219, 73, 19, 3,127,252,118,133,125,219,182,109,193,113, 28, 42, 42, 42, 80, 92, 92, 12,165, 82, 9,181, - 90, 13,173, 86, 11,139,197,130, 95,126,249, 5,191, 92,207,172, 44,182,123, 37,179,161,245,252,215,182,231,216,133,218,164, 6, -172, 95,251,133,192,201,201, 9,197,197,197, 40, 45, 45,173, 59, 85,104, 54,155, 81, 85, 85,133,163,199,127, 54,103,154,219,101, -235, 37, 47, 85, 53,149,137,154, 60, 27,231,234, 43,222,157,195, 2,184,119,222,121,199,206,222,222, 30, 22,139, 5, 42,149, 10, -217,217,217, 72, 77, 77,197,229,203,151, 53,202, 74, 19,167,117, 29,148, 95, 55,208,104, 61,153,127,162,255,185,204, 39,199,178, -242,242,244, 44,124,240,224,129,187,217,108,134,183,183, 55,171, 86,169, 62, 19, 3,103, 69, 64, 1, 15,224,170,128, 37,107,215, -175,159, 58,114,228, 72,116,237,218, 53,175,168,184,248,165,250,218, 18, 7,240,189, 0, 39,145,191,127,114, 92, 92,156, 91,106, -106, 42, 38, 79,158, 92, 82,144,151,247,129, 61, 16, 11, 0,149, 64, 31, 47, 95,223, 47,246,236,217,227, 22, 22, 22,134,246,237, -219,151,232,179,179, 67, 11,128,242, 6,218,103,131,199,102,121,234,137, 22,179,162,194,186,188,251,238,187, 96, 89, 22,177,177, -177,184,126,253, 58,114,115,115,113,229,202, 21,181,189, 92,254, 70, 99,199, 38, 42, 82,236, 34, 67,106, 2,119,237,250,145, 39, - 18,137,176,109,219, 54,196,199, 63,234, 76, 11, 15, 15,199, 91,111,189, 5,150,101, 49, 97,194, 68,238,231, 20,155,127, 13, 52, - 90, 79, 91,242,246,246, 14,179, 88, 44,107,120, 60,158,200, 44,118,239, 82,148, 21, 47,245,108,217,171,160, 40,109,128,111, 51, -175,185,162,246, 73,153,148,249,226,100, 62, 87,154,156,139,112,213, 70, 56,252,126, 58,142,183, 11,143,110,251,140, 25,250,234, -240,208,197, 31, 45, 18,180,107,215, 14, 22,139, 5, 93,187,118,197,228,201,147,101,161,161,161, 77,205,119, 86,253,202,168,105, - 89,175,188,242,138,227,172, 89,179, 28,250,244,233, 35,172,157, 42,231,206,157, 59, 56,121,242,164,113,239,222,189,149, 15,197, -189,213, 87, 78,109,169,182,102,190,179, 43,101,101, 26, 0, 43, 90, 26,141,155,150,124,244, 81,116,219,118,237,166,189,255,254, -251,124, 91,185, 76,184,106,241,219, 82, 0,248,248,171,189, 14, 35,199,188,137,117,193, 64,159,241,245,207, 29,247,228,122,230, - 23, 42, 31,188, 57,117,108,240,180, 9, 81,150, 81,163, 70,201, 28, 28, 28,224,235,235, 11, 71, 71, 71,100,101,101,225,206,157, - 59,220,217,179,103,171, 19,238,231, 10,119,238, 63,251, 64,108,235,110,205,188,129, 85,175,140,156,156, 61,101,202, 20,167,168, -168, 40,187,182,109,219, 10,133, 66, 33, 36, 18, 9, 74, 75, 75,145,159,159,111,140,137,137,169,126, 40,234, 81,126,229,244,246, - 42, 43,231, 34,212, 70,140, 91,158,126,254, 76,244,251, 9, 9, 9, 19, 1,116, 48, 26,141, 62,102,179,153,199,231,243, 11,205, -102,115,162,174,186,122, 43, 27, 30,189,142,230, 34,180,142,217,108, 22,153,205,102,168,213,106,156, 59,119,142,201,200,200, 88, -156,144,144,176,184,160,160, 0, 70,163, 17, 99,198,140, 65,120,120, 56, 46, 94,188,136,146,226,226,227,141,101, 21, 0,229,204, -131, 7, 83,103,206,156,121, 98,251,246,237,188, 59,119,238,184,109,221,186,245,199, 91,183,110, 1, 0, 58,117,234,132,169, 83, -167,130, 97, 24, 76,158, 60,153,203,205,206,158,202, 2,229,141,180,207,198,142,205,146,147,123, 55, 36,140, 26, 61,166,205,178, - 37, 31, 9,123,246,236, 9, 55, 55, 55,244,238,221, 27, 70,163,209,209,138, 99,179, 42, 98,200, 27,153, 29, 58,116,144,175, 93, -187, 86, 49,117,234, 84,204,158, 61, 27, 0,160,213,106,113,246,236, 89,204,157, 59,183, 40,151,233, 86,115, 43,102, 95,163,237, -243,113,207,212, 32, 0,240,242, 66, 44,128, 8,126, 77, 78, 38, 93,208, 78, 8,121,161, 11, 44,224, 95,243,157, 93,190,158,132, - 39,167,227,120,196, 57,217,228, 28,149, 57,117,238,103,109, 4, 38,181,147, 13, 99,112, 74, 76, 72,224,103,101,101, 53,250,199, -106,231, 59,211, 75,124,171,205,133,101, 93, 54,172, 91,247,254,230,205,155, 7,212, 14,197, 32,149, 74,239,104,107,106,206,163, -178,114,157, 62,192,247, 66,115,231,206, 75, 45, 43, 43, 6, 48, 35,200, 98, 89, 63,101,218, 59,171,121,182,190,204,162, 85, 63, -232, 4, 2,129, 33,243, 97, 49,214, 5, 3,114, 43,198, 67,213, 24,128, 59,101,238,236, 93,174, 79,202,154,207, 62,155,183,241, -235,175,187,217,216,218, 70, 24,141,198, 80,139,197, 2, 0,201, 58,141,230, 18,107, 52, 94,127,232, 53,253, 75,177,173, 59,103, -237,188,129,122,105, 64,149, 92,123,185,203,161, 3, 7,222, 59,117,234,212,191,109,187, 29,176, 94,111, 31,112,222,154,109,127, -114, 25, 19,112, 21, 74,229,213,198,186, 42,105, 46, 66,235,240, 57,238,109, 39, 39,167, 31, 7, 12, 24, 32, 29, 56,112, 32,134, - 14, 29,138,151, 95,126, 25, 22,139, 5, 28,199,161,170,170, 10,251,247,239,199, 63,255,249,207, 52, 15, 96,121, 83,121, 44,112, -154, 57,122,116, 68,167, 78,157,182,174, 93,187,214,101,198,140, 25,176,121, 60,180,137, 86,171, 69, 76, 76, 12,230,206,157, 91, -150,147,153, 57,149, 5, 78, 55,149,215,248,177, 41, 77,101, 29, 71,102,191, 49,251,179, 96, 83,101,129,147,139,140, 85,220, 77, -186, 99,245,177, 9,135, 86, 85, 21,241,251,187,190, 22, 21, 53,155,207, 48,189,106,135, 98,184,119,239,222,205,218,201,158, 17, -254,214, 47,205,105, 75, 28,247,104,236, 57,142,227,232,130,118, 66,200,139, 93, 96, 49, 12,163,172,237,229, 97, 24, 70,153,245, -211,244, 55, 27, 11,241,245,244, 28,248,248,211, 49,154,154,139,176,246,255, 89,106,117,213,227, 17,218,235, 29, 68, 84,248,212, -242,205,153,239, 44,163,184, 56, 5,192,171,192, 3, 32,229,242,163,188,174,171, 62,124,114,155, 26,220, 33,191,251,187, 34, 85, -126,113,241,101, 0,151, 1,252,179,222,245,244, 19,169,154, 90,207,167,183, 61,225,193,131,202,199,219, 93,255,182,187, 55,189, -237, 79,103, 54,249, 68,255,129,253,249,162, 41, 44, 41,249, 9,128,220,245,196, 9,143,147, 39, 78,188, 62,111,222,188,215,188, -188,188,130, 93, 93, 93,157,236,236,236,248,113,113,113, 89, 6,157,110,125, 16,176, 61, 21,208, 88,147,201, 2, 39, 21,153,153, -173, 71, 12, 27,246, 62,159, 97,122,133,134,134,134, 3, 64,114,114,114,188,133,101,127,117, 3,214,177,128,202,138,231,177,121, -199,166,164,249,199,102, 5, 80, 1, 96, 21, 88, 22, 72, 76,252,195,199,166,197, 98, 89,229,237,237, 93, 69, 35,180, 19, 66,200, -159, 39,140, 50, 41,243, 57,202, 20, 0,176,167,253, 73,153,148, 73,153,148,249,151,100, 62, 87,248,180, 11, 8,177,154, 25, 64, - 37,237, 6, 66, 8, 33, 77,225, 53, 82,133, 54,231,238,128,103,169,100,147, 40,147, 50, 41,147, 50, 41,147, 50, 41,243,133,203, -108, 42,155,238, 78,252,139, 10, 47,202,164, 76,202,164, 76,202,164, 76,202,124,241, 50,159, 43,116,138,144, 16, 66, 30,139,142, - 6,159,227,192,227,184,104, 62,199, 29, 16,112,220, 24, 1,199,225, 15,205,221, 57,102, 76,253, 3,209,206,121, 19,118,180,199, - 9,121,126, 49,180, 11,254,115, 20, 10,133,159,135,135,199,247, 28,199,241,148, 74,229,244,162,162,162, 92,218, 43,255,125,156, -157,157, 7, 0,128, 74,165, 58,255,188,110, 99,155, 0, 68,113, 60,180,126,242,103, 60, 11,114,239,229,252,126,158,197, 54, 47, - 97, 34,199,255,253, 88, 90, 60, 14,247,239,101,227, 72,115, 62,216,141, 26,224,182, 6, 0,126, 58, 95, 50, 31,207, 48, 57,117, - 83, 60, 61, 61, 91,186,184,184,156, 17, 8, 4,140,217,108,158,153,148,148,116,162,169, 15,154,239,142,198, 34,182,200,117,209, -146, 25, 60,161, 65,191, 90,173,215,233, 42,248,124,126,182, 72, 36,186, 60,103, 2,119,250,171, 93,166,187, 13, 60,190,193,245, -111, 27,128, 72,190,190,205,240,240,214, 89,153,107,198,118, 93,215,103,154,171, 48,235,230,109,219,141, 71,114,191,119,112,244, - 24,254,247, 55,138, 78, 72,108,204, 19,255,185, 21,213,116,164, 89,231, 19,192,217, 8,180, 19, 73, 36, 62,102,150,245, 0, 0, - 1,195, 20,155,244,250, 60, 17,144,184, 8, 80,255,151,100,186,154, 24, 38, 76, 36, 22,251,152, 77, 38, 15, 30,192, 65, 40, 84, - 90, 12,134, 60, 51,203, 38, 69, 3,101,207,186,158, 66,137,196,215,204,178, 30, 60,128,251,179,182,253,207,204, 36, 77, 20, 88, -129,129,129, 55,249,124,190, 15,159,255,168,147,235,201, 57,247,106,255,255,244,191,102,179, 57, 63, 37, 37,165,179,181,127, 60, - 32, 32,192, 94,167,211,189,206,227,241,222, 4, 0,142,227,118, 75,165,210,253,217,217,217,207,116, 33,113, 64, 64,128, 61,199, -113,243,109,108,108,250,235,116,186,182, 0, 32,149, 74,239,106,181,218, 11, 60, 30,111,205, 51,230, 50,158,158,158, 99,229,114, -121, 63,150,101,251,113, 28,199, 99, 24, 38, 70,163,209, 92, 40, 44, 44, 60, 0,160,217, 35, 30,120,122,122,218,184,184,184,124, -236,232,232, 56,126,214,172, 89,101,206,206,206,173,150, 47, 95,254,155,139,139,203, 30,149, 74,245, 81, 97, 97,161,246,191,164, -125, 4, 41, 20,138,221, 66,161, 80,144,151,151,215, 15, 0,124,125,125, 99, 12, 6,131, 89,169, 84,190, 9, 32,163, 57, 97,174, -174,174,114,161, 80,216, 93, 46,151,119,150,203,229, 17,102,179, 57,212, 98,177,192, 98,177, 36,215,212,212, 92, 50,153, 76, 55, - 77, 38, 83, 92,105,105,105,205,127,209, 49, 98, 39, 18,137,126,100, 89, 22, 0, 66, 0, 84, 61,143, 47, 4, 28, 15,173,239,221, - 77,110,245,187, 98,170,109,232,191, 47,199,135, 95, 3,203, 89, 93, 96, 13,237,229, 56,100,120,100, 7, 62, 0, 24, 13,191, 13, - 57,249,171,250,228,159, 93, 92, 13, 29, 58,244,234,250,245,235,157,244,122, 61, 22, 44, 88,176, 91,175,215,127,147,158,158,190, -168,177,199,217,219, 59,204, 91,241,201,215,178,199,175,103,238, 22,139,197,189,176, 32, 47, 36,229,254,157, 33, 41,247,147, 62, -157, 51,230,254, 53, 45,107,126,103,203, 79,184,111,205,122,132,190,132, 97,195, 71, 71,189,186, 98,105, 52,198,143, 31,255,210, - 93,149,206,198,251,110,130,184,134,179, 13,114,117,247, 25,177,240,163,207,121,113, 87, 47,142, 56,176,119,243,133,255,155,106, -234, 79, 69, 86,147,120,171, 24,166,187, 67,112,112,196, 27, 63,253, 4, 91, 95, 95,134,145, 72,248, 0,192,234,245,190,213,121, -121,158,251, 70,140,232, 22,157,154,122, 49, 26,184,254,159,204, 92,193, 48, 61, 29,130,131,123,142, 63,121, 18,182,158,158, 12, - 95, 36,226, 3,128,197,104,244,169, 44, 40,240,220,247,234,171, 93,163,211,211, 47, 69,179,108, 28,172,152,106,237,127,104,219, -137, 53, 5, 22,159,207,247,137,143,143,119,151,203,229,120, 92,252,192,108, 54,195,108, 54,227,241,155, 98,221,192,139, 28,199, -129,101, 89,244,237,219,215,170, 79,175,158,158,158,253, 1, 76, 9, 14, 14,126,109,254,252,249,162,158, 61,123,194,108, 54,227, -194,133, 11,189,215,174, 93,251,149, 94,175, 63, 12, 96,123, 97, 97,225,121,107, 63,221, 42, 20,138,193, 2,129, 96,215,226,197, -139,237,123,245,234,197,212,142, 14,175, 84, 42,187, 95,190,124,185,243,242,229,203,103, 42, 20,138, 9, 69, 69, 69,103,172,221, - 57,222,222,222, 97, 50,153,236, 96,100,100,164, 79,231,206,157,165, 45, 91,182, 4,199,113,184,125,251,246,212,148,148,148,113, - 39, 79,158,223,178,194,155, 0, 0, 32, 0, 73, 68, 65, 84, 92,166,209,104,198, 52, 99, 62, 53, 94, 80, 80,208,100, 59, 59,187, -143,231,205,155,231, 60,106,212, 40,113, 82, 82, 82,121, 96, 96, 32,239,240,225,195,110,199,143, 31,159,249,205, 55,223,140,149, -201,100, 31,101,100,100,236,176,230,192, 11, 14, 14,190,201,231,243,125,172, 41,128,155, 89, 4,119, 12, 8, 8,216,127,233,210, -165,128,156,156, 28,115, 84, 84,212, 78, 0,184,114,229, 74,123,142,227,120, 61,123,246, 60,149,159,159,255, 58,128,219,214,108, -184,151,151, 87,123, 7, 7,135,163,163, 70,141,114,246,243,243,147,249,248,248,240,164, 82, 41, 4, 2, 1,170,171,171,189, 82, - 82, 82, 6,222,190,125, 91,123,229,202, 21,149, 72, 36, 26, 81, 80, 80,144,216,140,118,252,178,187,187,251, 68,161, 80, 24,198, -178,172, 55, 0, 48, 12,243,208,100, 50, 37, 41,149,202, 31, 1, 92,125,214, 3,196,195,195,227,171,181,107,215,186, 22, 23, 23, -115,209,209,209, 95, 85, 84, 84, 76,126,158, 95, 16,146,110,199,225,242,149, 75,248,110,211,143, 21, 28,135, 7,255, 86, 96, 89, -144,222,182,109,168,219, 59,111, 79,116,238,221, 51, 2, 97, 29,187, 55,153, 57,178,191,203, 10,177,136,113,209,232,245,215, 75, -243,249, 71,101,114, 81,212,132,209,157, 51, 1,224,244, 47,119,162,186, 6, 58,253,234,234, 99, 25, 41,147, 72,186, 25,140,108, -217,209, 11,101, 75,155, 83, 76, 41, 20,138, 51,182,182,182, 50,181, 90, 93, 84, 86, 86,182, 49, 50, 50,114,213,218,181,107,157, - 50, 51, 51,145,151,151,135, 41, 83,166,216, 62,124,248,112,150, 94,175,191,150,151,151,215, 96, 79, 86,101, 85,197,186,143,163, -231, 45,179,115,112, 18,200,108,228,176,181,179, 71, 64,139, 16,116,233,214, 27, 3, 95, 25,129,204,140,148, 30,251,119,109,190, - 61,115,116,254,167, 41, 42,172,140,141,109,248,181,169,141, 63,250,140,120,237, 81,113,181,116, 69, 52, 82, 83,238, 87,229,228, -242,231,252,124,139, 47,139,236,223, 70, 98,208, 87,231,196, 93,189, 24,208,253,229,190, 0,208,249,192,222,205, 23,162,223, 52, - 13,136,222,253,124, 22,240,127, 70,113,181, 66, 40,156, 60,120,237, 90,247,240,153, 51, 69,213,217,217,198,204,239,190,211, 20, - 95,186,100,102, 36, 18,206,119,200, 16,158, 91,191,126,210,153,201,201,162, 43,159,125, 22, 33, 92,190, 60,240, 35,163,113,215, -127, 42,115,232,134, 13,110, 29,167, 79, 23, 85,102,102, 26, 83,191,250, 74, 91,244,203, 47,172, 72, 42,181,248, 12, 29, 42,240, - 24, 52, 72, 50,243,238, 93,209,181,213,171,123, 50, 75,150,180, 88,108, 50,253,248,156,108, 59,105, 70,129, 5,185, 92,142,189, -123,247, 66, 40, 20, 66, 40, 20,130, 97,152, 6,255,239,239,239,111, 77, 17, 52,218,197,197,229,235,121,243,230,121, 12, 31, 62, - 28, 78, 78,191,159,101, 99,216,176, 97, 24, 58,116,168, 40, 43, 43,107,220,129, 3, 7,198,237,220,185,179,168,186,186,122, 78, - 81, 81,209,225, 38,222,188,251, 5, 4, 4, 28,222,187,119,175,141, 86,171, 69,108,108, 44,202,203,203, 33,145, 72,224,237,237, -141,222,189,123, 51, 49, 49, 49,206,227,198,141, 59,204,231,243,135, 21, 20, 20,196, 88,241,198,218,217,201,201, 41,118,211,166, - 77,210,214,173, 91,243,210,211,211,209,161, 67, 7, 0, 64, 89, 89, 25,134, 13, 27, 38, 29, 53,106, 84,208,172, 89,179,174,177, - 44,219,183,184,184,248,102, 19,219,222,201,195,195, 99,199,144, 33, 67,188, 62,252,240, 67,123, 91, 91, 91,228,228,228, 20, 42, - 20,138,144,218, 34,104,228,200,145,226, 65,131, 6,121,110,220,184,113,253,201,147, 39, 23,148,148,148, 76, 46, 42, 42,186,213, -104,181,202,231,251,220,186,117,203, 93, 38,147,161,184,184, 24,187,118,237,194,172, 89,179,192, 48, 12,148, 74, 37,246,239,223, -143, 57,115,230,128,207,231,163,178,178,210,170, 34, 88, 38,147, 13, 12, 14, 14,222,114,254,252,121, 31, 71, 71, 71,120,121,121, -241,151, 44, 89, 18, 22, 24, 24,104,227,233,233,201, 47, 40, 40,192,225,195,135, 3, 39, 78,156,120, 52, 55, 55,119,170, 94,175, -111,242,212,153,139,139,203,214,157, 59,119,250, 37, 36, 36, 96,227,198,141, 80,169, 84, 16,139,197,112,112,112,128, 66,161, 64, -203,150, 45,121, 51,103,206,148,245,235,215, 79, 22, 29, 29,189, 21, 64, 71, 43,218,111, 7,119,119,247,239,251,245,235, 23, 24, - 29, 29,237,232,233,233, 9,153, 76, 6, 0,168,168,168,240,201,201,201,233,190,108,217,178, 49, 55,111,222,204, 82, 42,149,239, - 0, 72,104,230,241,209,177, 77,155, 54,195, 70,141, 26, 37, 40, 42, 42,194,230,205,155,135, 85, 84, 84,116,180,182,168,252, 95, -116,249,202, 37,244, 27, 50, 14, 90,214, 70,120,252,200, 46,174,234,204,151, 46,182,142,142, 12, 0, 84,171,213,236,208, 55, 63, -176, 12, 27, 49,193,216,127,200, 72,205,133,211,187,101,214, 20, 88, 98, 17,227,178,111,203,140,188, 75,113,105,161,103, 46,228, - 12, 28, 53, 98, 32,159,145,183, 10, 2,128, 15,222,127, 91,252,211,177, 95,190, 25,220,255,165,194,136,238, 33,121,111, 76,251, -206,183, 57,197, 85, 96, 96,224,197, 51,103,206,120,136,197, 98,148,151,151,187,108,219,182,237,203,238,221,187,243, 51, 50, 50, -112,255,254,125,100,103,103, 67,173, 86,163,107,215,174,182,247,238,221,219, 8,160,193, 2,235,219, 67,248,248,179,133, 30, 27, -220, 60,221, 2, 76, 6,189, 27,171, 47,110,123,254, 76, 66,251, 67,251, 53,157,220, 21, 62, 33,227, 38, 76,199,194, 37,159, 11, -143, 28,220,177, 20, 49,103, 17,219,216, 40,254, 60,188,252,143, 15, 23,161, 82,163,199,132, 55,223,198,196, 9,111,187,112, 22, -131, 39,103,209,201, 13,186,114, 71, 7, 81,202,137, 29,219,246, 71, 1,240,121,162,200, 58, 79, 69, 86,253, 86, 48, 76,183, 87, -190,248,194,189,195,204,153,146,132,229,203,107, 74, 47, 93,210,182, 24, 58,180, 60,124,198, 12, 61, 0, 84,101,103,139, 82,151, - 45,147,185, 69, 68,216,244,252,191,255,115, 52,105, 52,138, 21,159,124,210,117, 41,112,163,185,153, 1,227,199,155,215, 28, 62, -220, 37,238,179,207,250, 98,229, 74, 65,191,240,240,219, 75,190,251, 46,223,154,204, 85, 12,211, 61,242,155,111,220,219,189,245, -150,228,230,162, 69, 53,234, 27, 55,180, 65, 81, 81,170, 46,115,231, 26, 32, 16, 64,147,159, 47,204, 88,190, 92,238,208,173,155, - 77,143, 15, 62,112, 52, 27, 12, 30,209,203,150,117,107,172,135,104, 5,195,116, 27,178,110,157, 91,135, 25, 51, 36, 9,171, 86, -213, 20, 92,184,160,175, 12, 13, 69,199,215, 94, 43,243,118,113,209, 63,235,182, 63,153, 89, 26, 19,243,135,247, 39,169,239,101, -160, 1, 45, 91,182, 44, 78, 73, 73,113, 63,116,232,144, 85, 5,150,151,151, 23,122,247,238,173, 76, 74, 74,242,104,228, 5, 49, - 47, 47, 47,207,135,101, 89,136,197,226, 70, 87,172,170,170, 10,137,137,137, 24, 55,110, 92,126, 97, 97, 97,131, 47,186, 78, 78, - 78,118, 78, 78, 78,153, 49, 49, 49,174,247,238,221,195,205,155, 55, 17, 24, 24, 8, 39, 39, 39, 8,133, 66,152, 76, 38, 84, 85, - 85, 33, 56, 56, 24, 50,153, 12, 67,135, 14, 45, 85,169, 84,129,229,229,229, 13,190,136,249,251,251, 75,132, 66, 97,218,161, 67, -135,124,195,194,194,112,227,198, 13,248,250,250, 66,161, 80, 0, 0,178,179,179,113,229,202, 21, 68, 70, 70, 34, 41, 41, 9, 51, -102,204,200, 51,153, 76, 33, 15, 30, 60,208, 55,120,186, 32, 52,180,240,192,129, 3,249,173, 91,183,214,213,212,212,240,139,139, -139,133,151, 46, 93, 98,171,171,171,109,213,106,181,176,162,162,130,169,168,168, 16,214,212,212, 8,249,124,190, 72,175,215, 11, -227,226,226, 4, 42,149,170,209,129, 45, 91,181,106, 85,124,255,254,125,247, 99,199,142,161, 93,187,118, 56,116,232, 16,230,207, -159,143, 43, 87,174,192,199,199, 7, 7, 15, 30,196,252,249,243,113,255,254,125,184,185,185,161,127,255,254,141, 62, 71, 0, 16, - 20, 20,148,158,152,152, 24, 36, 22,139,145,145,145,129,252,252,124, 68, 68, 68,192, 98,177,160,168,168, 8,105,105,105, 40, 40, - 40, 64, 80, 80, 16,222,124,243,205,140,135, 15, 31, 6, 55,213,208,194,195,195, 75,206,159, 63,239,218,190,125,123, 20, 21, 21, -193,209,209,177,238,203,193,193, 1,142,142,142,104,209,162, 5,230,205,155,135, 14, 29, 58, 40, 31, 60,120,224,209, 84,241, 19, - 22, 22,118,230,194,133, 11,174,206,206,206,208,233,116,208,233,116,117, 31, 14,100, 50, 25,132, 66, 33, 0, 32, 45, 45, 13,195, -134, 13, 43,201,204,204, 28,210,140,226,136,239,225,225,113, 63, 33, 33, 33,196,206,206, 14,121,121,121, 72, 74, 74,194,180,105, -211,210,106,106,106, 90,227, 47,184,110,232, 63, 41,180, 5, 22,223,187,155,220,170, 77,155,208,138, 73, 83,223, 17,142, 28, 62, -178, 38,254,250, 89,147, 80,127,177,250,149,222, 14, 5, 0,112, 62,174,202, 93, 47,236, 45,234,220,117, 48,239,232,209,163,210, - 29,219,191,103,238,222, 77, 86,180,105, 27,154,146,156,133, 85, 13,101,191,218,215, 97,210,252,217, 67, 66, 35,122, 70, 48,149, - 53,156, 98,203,214, 31,186, 62,200,201,244, 0, 0,255,151, 2,139,167, 77,125,251,134,189,156, 87,116,233,202, 37,118,205,215, -167,147,127,190, 88,177,211,138,222,229, 64, 95, 95,223,107,219,182,109,115,117,117,117,133,131,131, 3, 52, 26, 13,140, 70, 35, -238,221,187,167,219,183,111,159,201,222,222,222,174,168,168, 8,229,229,229, 96, 24, 6,113,113,113,185,197,197,197,245,125, 18, -172,187,217,231,192,129,104,166, 79,103, 63, 39, 17,159,179, 17,155, 83,188, 24, 1, 39,230,193,209,227,124,108, 92,135,139,177, -151, 38, 12, 29,254,134, 91,143,158,253,240,249,170,133,166,236,188,188,142,143, 79, 23,254, 91, 91,104, 29,128,254,163, 70, 71, -141, 93,177, 52, 26,209, 43,150,227,196,241,159, 42,108,109,248,122,123, 59,161, 67, 68,175,158,186,121,115, 94,207,211, 84,169, -125,191, 92,187,102,252,160, 33, 81, 62,221, 95,238,139,184,171, 23,113, 96,239,230,155, 34, 9,157, 46,124, 82, 52,224,228, 24, - 24,248,206,236,180, 52,209,157,232,232,106,182,160,160,188,243,220,185,165,245, 45,155,127,238,156, 92,236,229,101,239, 50, 98, -132,211, 90,127,127,152,148,202,239,235,187,134,168,190,204, 27,158,158,142, 71, 98, 98, 6, 88, 24,166,207,172,217,179,109, 6, - 14, 28,136,202,202, 74,156, 56,113, 2,123,118,239,214, 43, 20,138, 68,199, 27, 55,110, 7, 22, 22, 46,174, 47,243, 19,192,217, -174,101,203,233,179,146,147, 69,241,139, 23, 87, 67,165, 82,133,207,153, 83,102, 54,155,121,211, 87,173, 26,154, 89, 88,216,167, -184,180,212, 31, 0,220, 29, 29,243, 90,123,122,198,111,216,185,243,222,215,173, 90,113,213, 5, 5,223, 71,215, 51, 7,233,211, -235,185,239,202, 21,143, 83, 37, 37,127,115,114,114,178, 41, 45, 43, 19,136,132, 66, 85,167,144,144,125,159,207,153, 19,171,189, -121, 83,252,172,219,222,121,238,220,210, 10,141,134,249,104,195,134,158, 5,101,101, 47,213, 24, 12,193, 21,213,213, 10,214,104, -228,219,217,216,148,189, 20, 20, 84, 92,121,225, 66,145,127,117,245,123,235, 53, 26, 37,181,202, 63,216,131,197,227,241,192,113, -156, 85,197,149, 80, 40,252,221,105,168, 70,136, 4, 2, 1,110,220,184, 1,165, 82,137,118,237,218, 33, 32, 32,224,119, 11,100, -102,102,226,228,201,147, 40, 47, 47, 71,167, 78,157, 0, 64,212, 88,160,157,157,221,251,139, 22, 45,114, 52, 24, 12,136,143,143, - 71,167, 78,157, 32,149, 74, 33, 20, 10, 33, 18,137,192, 48, 12, 20, 10, 5, 74, 75, 75,225,225,225,129,153, 51,103, 58,108,216, -176,225,253,242,242,242, 21, 13,101,114, 28, 55,123,220,184,113,238, 97, 97,143,238, 66,205,203,203,171, 93, 23, 0,128,187,187, - 59,110,223,190,141, 78,157, 58,193,195,195, 3,145,145,145,238, 71,143, 30,157, 13, 96, 77,131, 27, 46, 18,241, 91,183,110,221, - 5, 0,228,114, 57,248,124,126,170,189,189,189,155,135,135,135,220,222,222,254,223,182,113,219,182,109,106,177, 88,108,178,102, -167, 22, 21, 21, 33, 44, 44, 12,106,245,163, 99,169,166,166, 6,193,193,193,168,168,168, 0, 0,232,245,122,120,121,121,213, 21, - 32, 13,105,223,190,125,116,235,214,173, 95,145,203,229, 18,134, 97,144,144,144,128,240,240,112,236,219,183, 15,254,254,254,144, -201,100, 72, 73, 73, 65,251,246,237, 17, 27, 27, 11, 55, 55, 55,180,109,219, 86,226,238,238,126, 89,165, 82,197, 60,120,240, 32, -186,145,158, 54,190,173,173, 45, 98, 99, 99,177,117,235, 86,100,101,101,161,160,160, 0,246,246,246,232,216,177, 35, 66, 67, 67, -209,179,103, 79,164,167,167,131,215,116, 99, 82,132,132,132,156,184,113,227,134, 43,159,207, 71,108,108, 44, 52, 26, 13,116, 58, - 29, 88,150, 5,143,199,131, 84, 42, 69,143, 30, 61,224,226,226,130,144,144, 16, 28, 57,114,196,109,208,160, 65, 39,139,139,139, - 59, 2, 40,106,106,159, 58, 57, 57,189,183,116,233, 82, 95, 15, 15, 15, 84, 85, 85, 65,163,209,192,203,203, 11,131, 6, 13,242, - 62,121,242,228,123, 6,131, 97,237,115,245, 73,203,130,220, 54,109, 67,193,113,120,112,252,200, 46,206,199, 77, 26,214,183,147, -197, 61,245, 30,211, 35, 46, 46,169, 45, 0, 56,201, 3, 18, 66, 66,141,169,177,191,157,203, 63,113,108, 79,130,217, 12,126,104, -155,208, 86,124, 14, 15, 27,203, 46,205,231, 31, 61,115, 33,103, 96,251,246,189, 5, 27,190, 92, 54,114,250,212,193, 18,103,167, -222,188,202,252,253,184,114,235,142,255,146, 37, 31,186,175, 92,249,217,241, 51, 23,114,204,165,249,252,143,173, 89,223,160,151, -156,191, 58,244,133,208,181,170,106, 55, 18,210,109,193,179,105,143,128, 22, 65,168,172,172,132, 68, 34,145,142, 31, 63,222,188, -104,209, 34,141,157,157,157,236,113, 91, 86,242,249,252,193, 77, 6,223, 79, 6,219, 46,152, 21,218, 25, 44, 22,206, 86, 11, 93, -133,232, 78,122, 38,122,247,139, 44,238,218,169,227,170,207,214,172, 93, 28, 24,220,202,109,252,164,119,132, 95,124,190,248, 59, -128,235, 93,111, 76, 54, 46,240, 14, 29,177, 1,240,234,138,165,209,200,204, 76,115,154, 62, 90,189,156, 17,216,120,181,110,215, -199,238,187,109,231,134, 4,183,108,245,210,244,153,239,253,188,105,227,250, 87,159,236,201,218,187,123,211, 81,192, 60, 0,214, - 93,155,243, 34,104, 63,241,196, 9,104,114,115, 77,170,203,151,117, 3,190,254,186,180,211,164, 73,107,141, 38,147, 43,143,199, -251,221,165, 16, 60, 30, 15,176, 88,120,204,154, 53,124,206,203, 11, 38, 71,199, 41, 72, 77,109,217, 84,230,103, 38,211,232, 81, - 29, 59,190,186,101,215, 46,248,251,251,215,101, 58, 56, 56, 96,246,236,217,152, 57,115,166, 36, 49, 49,177,219,201,147, 39,187, -237,252,230, 27, 15,148,148,140,126, 58,208, 8,180, 27,127,236, 24,170,179,179,141,170, 27, 55,116,253,215,175, 47,187,248,219, -111,206, 31,126,243,205,146,118,225,225,222,223, 70, 71, 75,252,252, 30,221, 31,146,155,155, 27,188,126,221, 58,191,126,131, 6, -245, 92,248,193, 7,219,110,207,155,215, 6,143,166,100,107,112, 61,139, 46, 93, 50,156, 82,169,254,118,224,224, 65,199, 86,173, - 90,129,227, 56,164,167,167,187,111,221,186,245,157, 62, 51,103, 78,252, 96,220,184, 37,131,178,178,202,205,101,101,226, 97, 95, -125, 37,220, 59,118,108,219,166, 50,107,247, 39, 0,188, 54,127,254,251, 93, 95,126,185, 77,228,248,241,206, 94, 94, 94, 60, 27, - 27, 27, 24,141, 70, 20, 21, 21, 57,165,164,164, 4,157,175,168,168, 60,123,251,246,143,208,104, 6, 81,147,252,131, 5, 22, 0, -152,205,230,102, 21, 88, 86, 22, 89,117, 61, 94,165,165,165, 72, 74, 74,130,191,191, 63, 76, 38, 19,206,156, 57, 3,181, 90, 13, -145, 72, 4,145, 72, 4,131,193,208,100,150, 92, 46, 31, 24, 17, 17,193, 92,189,122, 21, 1, 1, 1,176,177,177,169, 43,172,106, -139, 44,161, 80, 8,133, 66,129,138,138, 10,244,234,213, 75,184,117,235,214,129,104, 96, 30, 64, 0,176,181,181, 29, 58, 98,196, -136,186, 46,182,154,154, 26, 8, 4,143,238,180, 54, 24, 12,168,170,170, 66, 89, 89, 25, 42, 42, 42,160,211,233,208,161, 67, 7, -241,133, 11, 23,134, 54, 86, 96, 61, 73,163,209, 84, 43,149, 74,199,222,189,123, 59,109,223,190, 61,165, 71,143, 30,191,187,104, -248,226,197,139, 58,189, 94,207,136,197, 98,171, 46,118,223,181,107, 87,221,190, 47, 40, 40,192,247,223,127, 15,139,197, 2, 30, -143,135,180,180, 52,108,216,176,161,238, 90,185,198,158,163,214,173, 91, 71,254,248,227,143,157,119,238,220, 89,206, 48, 12, 82, - 82, 82,176,123,247,110,112, 28, 7, 87, 87, 87,104, 52, 26, 40,149, 74,172, 93,187, 22, 70,163, 17,182,182,182,240,246,246,150, -206,158, 61,187,215,242,229,203,133,141, 21, 88,102,179,217, 44, 16, 8,224,231,231,135,165, 75,151, 66,167,211, 65, 36,122, 84, - 87, 86, 86, 86, 66,173, 86, 35, 62, 62, 30,217,217,217,176, 88, 44,141,190,177, 72,165,210, 49, 59,118,236,112, 23,139,197,208, -233,116, 72, 75, 75, 67, 70, 70, 6, 82, 82, 82,244, 42,149,138,181,181,181,229,121,122,122, 10, 42, 42, 42,196,147, 38, 77,226, - 85, 85, 85,129,227, 56, 68, 69, 69,185,108,217,178,229,117,131,193,176,174,137, 93,234,166, 80, 40,254, 49,125,250,116,105,237, -126,179, 88, 44, 40, 41, 41,193,216,177, 99,101, 49, 49, 49,139, 12, 6,195,110, 0, 37,207,203, 11,193,147,119, 11, 86,157,249, -210,229,236,217,111, 95, 74,189,199,244, 16,160,172, 91,120,159,247, 24, 0,184,127,115, 91,207,244,228, 27,102, 91, 11, 47,243, -231,221,107,174,217,133,188, 83, 6,224,104, 99,189,128, 67,123, 57, 14,145,201, 69, 81,163, 70, 12,228,111,217,250, 67,215,233, - 83, 7, 75,220, 59,252,192, 3, 0, 39,137, 15, 94, 54,125,192,215, 25,106,164, 91,182,254,208,117,212,136,161,215,179,115, 30, -172,117, 81, 56, 30, 57,249,171,250,116, 99,189,132,158,174,140,183,147, 77, 41,156,124, 7,194, 63,212, 9,241,241,241, 56,122, -248, 42,130, 91,117,129,193, 96,128,201,100,146, 15, 27, 54, 76,115,240,224, 65, 93, 89, 89, 89,149,209,104,236, 83, 88, 88,152, -218,100,125,133, 82, 75, 7,190,197, 40, 54, 11, 89,109,141,184,102,206,146,195,175,119,125, 57,178,147,179,159,183,208, 69,202, - 30,239,219, 39, 98,215,158,157,223,207,251, 96,225, 74,116, 8,239,241,242, 28,209,111,109,191,218,101,186, 83, 95, 86,114, 14, - 78,240,143, 28, 97, 51, 83,211, 95,125,144,151,147,223,210, 87, 97,200,200,229, 76,239, 45,250,110, 80,239,129, 99,218, 7,181, -234, 46,190,123,255, 42,111,222,220,121,123,190,252,114,245,248,218, 34,235, 82,236,153, 62,209, 83,114,196,209,219,161,167,183, - 40, 64, 36,145,248,216,250,251, 51,217,219,183,107, 3,135, 15, 47, 7, 0, 19,203,186,198, 93,191,238, 32,147,201,192,113, 28, - 76, 38,211,239,174, 17,174,189, 46,120, 96,223,190, 30,214,100,230,125,251,109,251, 89,179,102,161,168,168, 8, 44,203,214,245, -126, 63,241,154,141,202,202, 74,140, 30, 61, 26,219, 54,110,172,247,188,184, 80, 34,241,181,245,245,101,178,183,111,215, 6,189, -250,170, 10,102, 51,111,225, 55,223, 44,253, 96,193,130,128,177,175,191,254,187,207,141,161,161,161,248,118,227, 70,241,238,221, -187,189, 63,219,184,113,106,164, 68,146, 9,189,190,209,245,172,106,219, 22, 78, 73, 73, 54,173, 90,181,170, 43, 40, 67, 66, 66, -240,249,231,159, 75, 38, 76,152, 32,158, 60,113,226, 23,119, 91,181, 90, 31,157,157,157,238,210,178,165, 61, 35,145,248, 52,149, - 89,187, 63, 1,160,218, 96, 8,139, 94,185,210,233,250,245,235, 40, 40, 40, 0,199,113,117,127,167,125,251,246,188,215, 95,127, -221,161,123,231,206, 93,169, 69,254, 73, 61, 88,245, 21, 88, 13, 21, 90,214, 22, 87, 79,255, 13, 79, 79, 79, 24,141, 70,252,240, -195, 15,117,133, 85,221, 39, 2,163,177,201, 12,157, 78,215, 78,161, 80,160,178,178, 18, 45, 91,182,172,203,168, 93,175,218, 47, -169, 84, 10,157, 78, 7,111,111,111,232,116,186,118, 77, 20, 64, 29, 29, 28, 28,106,123,179,160,127,220, 72, 13, 6, 3,212,106, - 53,212,106, 53, 12, 6, 3,202,203,203, 81, 93, 93, 13,181, 90,141,170,170,170,112,107,182,217, 98,177, 32, 41, 41, 41,163, 85, -171, 86, 29, 5, 2, 1,108,109,109,229, 53, 53, 53,168,189,153, 64,165, 82, 97,199,142, 29, 53,147, 38, 77,114,141,139,139,211, - 90,179, 15,231,204,153, 3,137, 68, 2,141, 70,131,141, 27, 55, 98,206,156, 57, 16,137, 68,168,170,170,194,198,141, 27, 49,111, -222, 60, 48, 12, 3,189, 94,143,125,251,246, 53,252, 38,123,239, 94,118, 92, 92, 92,120,167, 78,157,156,142, 28, 57, 82, 50,112, -224, 64,183,193,131, 7,215,237, 59,150,101,209,173, 91, 55,180,110,221, 26, 74,165, 18,167, 78,157, 42, 13, 9, 9,113,189,126, -253,186,165,168,168,232, 65, 19,219, 93, 87, 52, 9, 4, 2,152,205,102, 20, 23, 23, 67,173, 86,163,164,164, 4, 5, 5, 5,200, -207,207, 7,195, 52, 61,114,136,139,139,203,107, 97, 97, 97,130,199,197, 22, 90,180,104,129, 15, 62,248,128,213,106,181, 99, 1, -156,122,188, 88,228,158, 61,123,142, 4, 7, 7, 51, 94, 94, 94, 72, 75, 75,131,155,155, 27, 99, 99, 99,243, 70, 83, 5,150, 66, -161,216,118,252,248,113,231,218, 59,104,107,105,181, 90,176, 44,139,113,227,198, 57,111,217,178,101,155,209,104, 28,250, 60,190, - 40,216, 58, 58, 50,175,244,118, 40,136,139, 75,106, 27,222,231, 61,198,185,229,178, 71, 5, 56,192,196, 95, 90, 31,222,187, 91, -216,238,218,235,178, 26, 51,106,128,219,154,225,145, 29,248, 19, 70,119,206,100,228,173,130,118,237, 88,239,225,236,212,251, 95, - 47, 20,140, 51,228, 82,160,181,191,153,127,237, 68,166,199,188,121,173, 12,187,191,251, 91,230,174,195, 55, 7,138,196, 9,253, -127, 58, 95, 50,175,161,236,187,153,166, 99, 21, 58,231, 80,135,138,195, 60,184,188,141,240,240,112,184,185,121,225,219, 77, 63, -194,251,165, 78, 48, 24, 12,176,183,183,151, 61,122, 25, 49,238,178,166,184, 2,128,232,232, 88, 75, 68, 68, 31, 35,227,230,202, -206,158,253,229,232,193,145,163, 67,251,244, 29,192,157, 59,119,218,248,114,168,177, 96, 64,159,238, 69, 23, 99, 99,211,138,138, - 30,134,180, 14,109,143,148,187, 55, 7,115, 28,146,120,188,250,123,155,238,102,225,180,142,119, 47,102,223,130,233, 22,173, 33, -222,102,213, 55,119, 34, 95, 29, 57, 57, 44,162, 87,111,203,185, 95,206, 26,196, 80, 39,219,246,122,249,225,228,137,111, 28,217, -183,255,208, 43, 49,191,156, 8,174, 80, 23,159, 88,243, 35, 21, 87,117, 31,206, 88,214,131,145, 72,248,197, 49, 49,108,135,105, -211,234,246,139, 76, 38,195,209,163, 71, 33, 22,139, 33, 18,137, 32, 22,139,235,190, 68, 34, 17, 20, 10, 5,120, 28,199,111, 78, -102, 97, 97, 33,138,138,138,224,224,224, 0, 55, 55, 55, 20, 21, 21,225,202,149, 43, 72, 75, 75, 3,195, 48,136,140,140, 4,191, -129,247,205,167, 50, 13,127, 91,177, 98, 72,219,246,237,189,158, 46,174,106,223,219, 84, 42, 21,250,244,233,195, 59,119,238,156, -219,165,204,204,145,208,235,127,108, 44,179,221,136, 17,101,202,243,231,235,253,219,109,218,180,225, 29, 57,122, 84, 50,126,220, -184,185,159,111,218,180,110,201, 23, 95, 20,129,101, 21,205,217,118, 30,143,199,231,241,120,240,245,245,133, 74,165, 66,117,117, -117,109,135, 3,156,156,156, 96, 50,153, 96,177, 88,132,212, 34,173,199,111,170, 24,120,186,144,106,232,139,207,231, 63, 83,145, -213, 24,107, 10,172,218, 34, 67, 34,145,252,238,224,170,253,122,242,224,171, 45, 98,172, 32,168,172,172,196,225,195,135,161, 82, -169, 80, 85, 85,245,187,226,170,182,231, 42, 43, 43, 11,123,246,236,193,195,135, 15, 33, 16, 8,172, 26,180, 53, 43, 43,235,102, - 64, 64, 64,199,218, 30,177,126,253,250,249, 92,190,124,185,160,182,152, 91,188,120,113,105,247,238,221, 93,159,126,115,111,116, -101, 5, 2, 92,185,114, 5, 26,141, 6, 28,199, 65, 36, 18, 33, 37, 37, 5, 44,203,130,227, 56, 48, 12,131,146,146,146, 38,123, -176,146,146,146,222,154, 58,117,234,186,105,211,166,197, 44, 92,184,240, 92,255,254,253,243,120, 60, 30, 76, 38, 19,236,237,237, -161, 80, 40,144,154,154, 10,173, 86,139,247,223,127, 63,119,231,206,157,191,108,220,184, 49,102,243,230,205,235,242,243,243,167, - 54,231,185,101, 89, 22, 53, 53, 53, 40, 47, 47,135, 74,165, 66,101,101, 37,116, 58,221, 51,181,161, 1, 3, 6,224,196,137, 19, -130, 1, 3, 6,108,241,247,247, 47,242,247,247, 47, 26, 48, 96,192,150, 99,199,142, 9,188,189,189,145,151,151,135,248,248,120, -168, 84, 42, 88, 44, 22, 94, 19,189,171,253, 38, 78,156,216,203,207,207,143,103, 52, 26,161,215,235, 97, 48, 24, 96, 52, 26, 97, - 54,155,145,155,155,139, 54,109,218,240,253,252,252,122, 0,232, 71, 47, 33,205, 83,153,191, 31,156,242,107,112,170,189,176, 40, -191, 65,141,238,217,114,202,203,203, 63,126,247,147, 10,165,185, 34, 6,247,110, 29, 70,149,150,129, 79,112, 63,188, 51,109, 28, -126,187, 30,131,178,178, 50, 36, 39, 39, 35, 34, 34, 66,196,227,241,154,213, 54,247,238, 61, 97, 30, 63,238,255, 94, 31, 48,120, -116,231, 1, 3,135,154,207,157, 59,175,191,113,237,244,205,224, 0,123, 37,199,170,139, 29,236,101,183,210, 83,147, 17,210,170, - 13, 76,172, 37, 2,136,110,180, 77,101,102,194,240,115,145,167,249,245, 57, 73, 19, 7, 15,159,210, 97,192,192,193,166, 51,167, -143,155, 47,159, 61, 24, 63,184,223, 75,177,159,174,222,237,171, 50,181,108, 43,181, 87,156,236,209, 81,214,123,198, 40,191,233, -212, 82,234,233,117,146, 74, 45,120,252,186,201,227,241, 96,177, 88,126, 87, 84, 61,253,101,205,123,210,147,153,181, 56,142,131, - 90,173, 70, 90, 90, 26, 86,175, 94,141,219,183,111,195,108, 54,215,245,100, 53,248, 62,244,248,148,174, 72, 42,181, 0, 64,102, - 97, 97,159, 89,179,102, 73,234, 43,174,202,202,202, 80, 90, 90,138,135, 15, 31, 34, 50, 50, 82, 84,233,236,220,177,169,245,244, -118,119,215,203,164,210,226,212,212,212,127, 91,223,170,170, 42, 72, 36, 18,124,253,205, 55,162, 19, 73, 73,115, 46, 95,185,226, -216,156,253, 89,155,195,227,241,224,238,238,142,160,160, 32,132,135,135,163, 93,187,118,144, 74,165,184,123,247, 46,190,255,254, -123, 8,120, 60,150, 90,226,159,208,131,213, 80,129, 85,223,255, 25,134, 65,115, 10, 2,107, 89,115,138, 80, 42,149,222, 41, 46, - 46,238,233,227,227, 3,147,201, 84,215,123, 85,123,154,176,246,123, 0,144, 72, 36, 72, 78, 78,134, 84, 42,189,211, 88,166, 76, - 38,187, 35, 16, 8,122,116,233,210, 5, 71,142, 28, 65, 76, 76, 12,178,178,178,160,213,106,161,211,233,160,213,106,113,247,238, - 93, 88, 44, 22,132,133,133,193,193,193, 1, 50,153,236, 78, 83,235, 90, 83, 83, 83,200, 48, 76, 43, 27, 27,155,127,157,234,240, -244, 68,105,105,169,197,100, 50, 97,199,142, 29,149, 10,133, 66,110, 99, 99, 99,245,254,228,241,120, 80, 42,149,240,245,245, 69, -101,229,163, 97,190,170,170,170,224,238,238, 14,163,209, 8,139,197, 2,189, 94, 15, 91, 91,219,186, 46,223,198, 58, 4,211,211, -211, 63,120,226,251, 46, 99,199,142,221,179,111,223,190, 22,191,252,242, 11,174, 95,191, 14, 87, 87, 87,124,242,201, 39, 89, 57, - 57, 57,227, 1,252,166, 84,254, 63,246,174, 59, 60,138,234,237,158,153,237,233,189, 46, 9, 36, 33, 36, 33, 9, 37, 36,160,244, - 42, 16, 64, 1, 41, 42, 8,136, 8, 40,162,136, 82, 68,169, 34, 72, 19,108, 72, 7,233, 82,165,151, 64, 2,129, 72, 47,105,132, -244,178,233,125,179,125,103,230,126,127,144,240, 11, 24,146, 77, 64, 63,203,156,231,217, 39,187,147,153, 51,183,205,189,103,222, -247,222,247,254,245,243, 29, 75, 74, 74, 14,198,198,198,190, 28, 22, 22,246,184,119,232,217,179, 39,213,179,103, 79,199,218, 38, -253,146,146, 18,220,189,123, 23, 81, 81, 81, 48, 26,141, 72, 72, 72, 96, 53, 26,205,222,250,250, 28,185, 92,190,253,203, 47,191, -180,100, 24, 6, 2,129, 0, 34,145, 8, 12,195, 64, 42,149, 62,182,212,102,101,101, 97,216,176, 97, 54,235,214,173,219,166,211, -233, 90, 2, 48,252,155, 58,133,170,242,114, 38,226,119,165,179,157,133,215,221,196,155,219,186, 4, 84,247, 19,137, 55,183, 50, - 50, 11,143,107,215,238,106,172, 58,201,202, 27,236,104,143, 68, 20,125,106,208,223, 24,112,250,252,253, 97, 51, 63,158, 36,105, -222,194,167,224,202,173,251,205, 59, 27,103,210, 22, 50, 64,165, 5, 74, 43,128,196, 76, 1,215,188,133, 79,193,141, 91, 15, 36, -171,215,110,246, 81,171,244, 53, 46,194,103, 66,161, 80,104, 47, 19, 50,116,230, 26,243,168, 55,198, 8, 36, 18,153, 61,148,165, -201,104,222, 92,142, 81, 67,187,224,135, 77,103, 97, 99,107, 7, 23, 23, 23, 80, 20,101,209,136,236, 83, 49, 17,183, 39,190,253, -206,228,151,250,189, 18,206,158, 57,123, 18, 17,103, 14, 93,219,190,118,238, 33,131, 80,105, 65,179, 85,102, 30,205, 92,239,165, -167, 37,189,213,189,231, 43,144,153,153,183, 4, 2,234, 28,197, 91,183,192,219,160,225, 9, 14, 89,135,118, 46,148,189,253,206, -123,157,251, 15,124,149, 57,115,234, 8,206, 28,251,229,247, 5, 31,182, 56,153,118,119,183, 56,230,122,142,108,232,136,169,101, -199, 35, 18,244,175, 47,246, 74,114,111,213, 94, 3,164,241,163, 83,205, 11,164, 80, 88,192,232,116, 30,205,250,247, 23,168, 51, - 51, 69,150, 46, 46, 76,205, 75, 90,237,151,234,167, 45, 88, 52, 77, 3, 52,205,153,194,105,106, 90, 52, 26, 13,184,103,196, 62, -164,106, 56, 7, 14, 20,168,115,114, 68,133, 37, 37, 45, 90,180,104,241,196, 57, 70,163, 17, 37, 37, 37,143, 63,229,229,229,144, -201,100, 40, 53, 26, 93, 76, 73,103,247,182,109,119,172, 89,189,250,211,141,155, 54, 61,118,245, 40,149, 74, 84, 86, 86,162,162, -162, 2, 52, 77, 99,214,236,217,210,217,139, 23,127, 48, 88, 40,156, 1,134, 49,185, 60,107, 94,214,105,154,134, 80, 40, 68,102, -102,230,227, 79, 86, 86, 22,100, 50, 25, 8, 69,113,124,139,124, 1, 2,171,102,146,123, 67,226,170,230,187, 64, 32, 48,205,220, - 91,253, 38,240,162, 44, 88, 42,149,234,124,116,116,116,167,254,253,251, 11, 99, 98, 98,224,230,230,246, 7, 55,161, 80, 40, 4, - 69, 81, 48, 55, 55,199,169, 83,167, 12, 42,149,234,124, 3, 15, 81, 68, 68, 68, 68,232, 39,159,124, 34, 26, 63,126, 60,226,226, -226, 48,101,202, 20,148,149,149,161,178,178, 18, 37, 37, 37,208,104, 52,232,212,169, 19,100, 50, 25,146,147,147,141, 26,141,166, -161, 80, 5,164,176,176,176,202,201,201,201,237,233,127,140, 24, 49,194,229,167,159,126, 82, 39, 38, 38, 26,187,116,233, 98, 13, -160, 81,130,117,207,158, 61,143,235,236,193,131, 7, 88,191,126,253,227,121, 8,183,110,221,194,170, 85,171,192,178,172, 41, 2, -235,105,220, 40, 46, 46,102, 12, 6, 3,124,125,125, 33,151,203,161,209,104,176,110,221, 58, 6,192,141, 63,163, 65,154, 98,193, -210,106,181, 7,198,141, 27, 55,251,206,157, 59,110, 98,177,184,198,116, 13,142,227, 96, 48, 24,144,145,145,129,132,132, 4, 36, - 39, 39,163,184,184, 24,132, 16,232,245,122,220,186,117,171,220,104, 52,238,127, 22,175,147,147,211, 23, 91,182,108,113, 53, 51, - 51,251, 67, 96,221,154, 78,167,198,245,234,236,236,140,158, 61,123, 58, 95,184,112,225, 11,131,193, 48,255,159,222, 17,212, 68, -104, 39, 28,146,195,223,154,201, 77,157, 50, 81,220,170,181, 33, 41, 57,225, 58,123,251,210,186, 16, 0,144, 89,120, 92,107,229, -223, 33,254,114,172, 37, 55,232,237, 89,237, 3,188, 33,160, 8,252, 41,130,226,167, 35,190,215,188,163,157,140, 46, 63,217,209, -199, 46,250,200,111,231,127,156, 51,115,210,245, 47,191,156,227,172,213,171,100, 1,205, 89, 26,120, 36,174, 98,226, 44,180, 75, -150, 76,186,190,124,245, 14, 46, 43,197, 48,227,122,106,249, 51, 87,248,214, 22, 45, 52,157, 43,115,245,153,145,235,213,170,119, -139,123,191,111,160, 28,173, 5,176,106, 61, 24, 3, 7,188,130,115, 17,209,200,204,211,160,250, 5,160,222,176, 7,173,155, 99, -108, 13, 39, 69, 67, 54,118,194,123,221, 7, 14,124,149,156, 60,241, 27,115,228,215, 95,162,247,236, 93,181,159, 22,139,133, 6, -206, 90, 79, 9,180,229,172,192, 54, 78, 85, 81, 10, 0, 16, 9,197,214,245,248, 7, 60,227,227, 18,253, 3, 3, 3, 92,199, 78, -152,108, 19, 62,240, 53,114,242,228, 17,110,255,174, 29, 23,247,127,215,102, 23,103,172, 20,231,101,168,165, 21, 74, 99, 5, 17, - 72,108,171,148,156,186, 64,219, 82,235,254,251, 8, 3,112,128, 31,157,106,198, 1,157, 46,167, 42, 59,219,205,190, 71, 15,105, -242,194,133,230, 46,157, 58,105, 41,138,106, 80, 96, 9, 4, 2,144,103,204,227,123,154,179, 49, 2,139, 80, 84,157,139,143, 88, -157, 46,187, 42, 51,211,205,177, 71, 15, 89,202,252,249,230,117, 89,237, 75, 74, 74, 80, 90, 90,250,132,192,170,238,107, 76, 74, -231,202,143, 63,254, 61,108,252,248,210,152,152, 24,151,151, 95,126,153,170,172,172,124, 44,174,106,190, 59, 57, 57, 81,158, 45, - 90, 88,157, 87, 40,124,234,154,131, 85, 87,121,154,146,119,154,166,159, 89,158, 60,158,195,130,101,170,192, 50, 97,112, 52, 26, -141, 70, 56, 59, 59,163,184,184, 24, 28,199, 61,179, 34,205,204,204,106,124,192,245,174,164, 83, 42,149,107,151, 44, 89, 50,173, - 87,175, 94,142, 1, 1, 1, 40, 42, 42,130,179,179, 51, 4, 2,193,227,116,213,240,197,198,198, 98,223,190,125,149, 74,165,114, -109, 3,249,254,246,231,159,127,254, 32, 60, 60,220,222,201,201, 9,118,118,118,184,119,239, 30,108,109,109,161, 84, 42,241,224, -193, 3, 88, 89, 89,129,162, 40,232,116, 58, 92,186,116, 73,201,113,220,183, 13, 60,152,228,202,149, 43, 6,115,115,243,123, 37, - 37, 37,130,226,226, 98, 65,117,120, 6, 81, 69, 69,133,232,244,233,211,142, 54, 54, 54,234, 11, 23, 46, 20,121,122,122, 10,210, -211,211, 5,122,189,190, 65,149, 69, 81, 20, 62,254,248, 99,136,197, 98,232,116, 58,172, 93,187, 22, 51,103,206,132, 80, 40,132, - 94,175,199,138, 21, 43, 48,111,222,188,199,130,249,216,177, 99,141,106, 32, 53, 19, 72, 13, 6, 3, 12, 6, 3,140, 70,227,159, -218, 32, 77,116, 17,230, 63,124,248,112,112, 88, 88,216,217, 35, 71,142, 56, 88, 91, 91, 35, 55, 55, 23, 69, 69, 69, 40, 40, 40, - 64, 97, 97, 33,148, 74, 37,116, 58, 29,108,109,109,145,153,153,137,179,103,207, 86, 86, 85, 85,189,130,122, 86, 16, 10, 4,130, -113,221,187,119, 23, 62,157, 6,154,166, 31,183, 39,145, 72, 4,137, 68, 2,133, 66,129,238,221,187, 75,162,162,162,198, 1,248, -199, 11,172,154, 8,237, 65, 65,173,157, 6,191, 58,198, 16,218,177,127, 85,212,141,115, 57,150, 28,149,218,173, 83,240,110, 0, -184,118, 87, 99,117, 57,214,146,107,215,161, 47, 53,104,176,166,253,246,173, 27, 37,241,113,241, 94,129,193,129,245, 70,244,119, -108,198,189,214,191,119,139, 60,107, 11, 74,184,100,201,242, 99, 91,182,110,234, 24,115,252,127, 97, 26,150, 44,121, 20,166,161, -127,239, 22, 76,252,131,164,215,144,138, 95, 76, 21, 45,131, 7,247,191,189,101,219, 62, 40,146,143,185,127,251,169,153, 4, 37, -133,128,121, 7,116, 15,117,192,205,205, 9,184,123,247,110, 62,199,113,245,187,114,105,120,198,198,198,251, 7, 5, 7,186,190, - 61,225, 61,155,240,240,215,112,242,228, 81,236,220,182, 49,234,101,219,144, 45,153, 55,138, 5,114,127, 59,177,185,173, 68, 44, - 20,203,132, 98,161,184,216, 96,124,100, 93, 23,138, 69,214,192,200,122, 7,157, 41,147,199,216,244,238,247, 26, 78, 84,115,126, -217,126,196,102, 47, 97,107,170,211,167, 43,167,122, 53,247,106,174, 82, 23, 84,210,180,196,160,213,113, 86, 43, 55,103,172, 73, - 77, 25,151, 10, 96, 53,248, 85,132, 53,184,183, 51, 60,188,227,244,148, 20,177, 83,215,174,102,185, 23, 47,154, 63,237, 34,172, - 75, 96, 9,133, 66,128,166, 25, 83, 56,169,115,231,104, 0, 16,139,197,207,124,177, 23,139,197, 80,171,213, 96, 40,170,206, 19, -196,192,189,157,131, 7,119,154,158,146, 34,178,239,213,203,220,233,206,157,172,244,244,116,191,144,144, 16,176, 44,251,132,229, -170,230,163,213,106,161,215,235, 33,147, 74, 99, 77, 73,103, 66, 66, 69,103, 0, 0, 32, 0, 73, 68, 65, 84,193,165, 75,218,121, - 19, 38,204,255,224,253,247,191,219,183,127,191,204,218,218, 26,149,149,149, 80, 42,149,143, 63, 58,157, 14,161, 97, 97,162, 95, - 30, 60, 24,139,178,178, 5,166,148,167, 75,175, 94,234,134,250,228,106,193,202,187, 8, 27, 1,186, 33, 11,214,115,134,105, 8, -126,138,115,222,192,129, 3,181,105,105,105,240,240,240,120, 44, 82,106,223,211,218,218, 26,182,182,182,136,143,143,199,150, 45, - 91, 52, 20, 69,205,171,143,179,172,172, 76,169,213,106, 71,191,241,198, 27, 26,145, 72, 4,127,127,255,199,110, 29, 66,200,227, -185, 87,177,177,177, 24, 55,110,156, 90,171,213,142,174, 35, 6,214, 19,156,153,153,153, 21, 42,149,234,173, 49, 99,198,168, 19, - 19, 19,209,173, 91, 55,220,185,115, 7, 42,149, 10, 85, 85, 85, 72, 79, 79, 71, 96, 96, 32, 12, 6, 3, 14, 28, 56,160, 86,169, - 84,111,101,102,102, 86,212,199,169, 84, 42,135,124,243,205, 55,130,147, 39, 79,122,185,187,187, 7,133,133,133, 5,244,238,221, -187,229,176, 97,195,154,135,135,135,187,181,106,213, 74,219,191,127,127,167,129, 3, 7, 58, 9, 4, 2, 81, 74, 74, 74, 30, 33, -100, 96,125,156,181, 5, 64, 82, 82, 18, 12, 6,195, 31,230, 92,213,172, 38,100, 89,214,164, 58,170, 75,100,215, 8,171, 26,161, -101,130, 37, 44,184,142, 52, 54,120,145, 68, 34,169,177,112, 18, 19, 56,239, 36, 36, 36,244,235,220,185,243,237,113,227,198, 41, -179,178,178, 32, 22,139, 33,151,203,209,188,121,115, 88, 88, 88,160,180,180, 20, 7, 14, 28, 80,159, 58,117, 42,182,178,178,178, - 39,254, 24, 3, 43,248,169, 52,166,215,213,185, 10, 4,130, 63, 8,172,154,157, 2,104,154, 78,111, 76,121, 54, 17,127, 25,231, -228, 73, 99,237, 7, 13,121,205,234,232,209,163,178,245,235, 55,199,119,235,246,222, 14, 75,183, 15, 78, 91,186,125,112,186,211, -203,239,238,254,254,231,109, 15, 15,255,246,155,217,160, 65,195,108,166,190, 55,214, 29, 20, 37,108,136,211, 92, 42,237,212,253, -165, 86,229,151,174, 92, 98,150,175,222,193,118,233, 22,126,237,187,239,127,222,255,221,247, 63,239,239,210, 45,252,218,242,213, - 59,216, 75, 87, 46, 49,221, 95,106, 85,110, 46,149,118, 50, 37,157, 83, 38,143,177, 25, 20,254, 26,142, 31, 63,204,236,217,177, -118,197,209, 72,125,143, 17,179,181, 5,153, 15, 35, 8,242,151,194, 89, 18,141,172,172,172, 10,134, 97,122,213, 49,193,189, 78, -206,169,239,141,169, 45,174, 46,197,167, 99,211,198,219,183,217,159, 38, 44, 52,238, 62,115, 88,115, 60,234,118,101,212,205,172, -178,162,135, 21,169, 42,101,165,158,227, 56, 16,142, 21, 44, 90, 4,170,190, 58,234,210,165, 39, 46,156,219,141, 29, 91, 55, 84, -112, 28,180, 35, 15, 28, 96, 71,254,180,144, 52,111,222,162,249,174, 93,187,169,193, 67,134,218, 16, 2,110,200,208,215,108,247, -236,218, 67,121,123,123,183,240,241,129,248,159,222,150, 94, 20,231, 66,160,172, 50, 51, 51,234,198,186,117,122,151,209,163,237, - 37, 46, 46,214,224, 56,170,161, 57, 88,117, 88,176,158,201,233, 98,111,175, 56,115,230, 12,252,253,253, 33,151,203,159,240,200, -136, 68, 34,120,122,122,194,201,201, 9,103,207,158, 5, 1,110,214,197, 57, 23, 40, 47, 79, 77,141,188,182,114,165,206,101,196, - 8,187,246,222,222, 55,191, 91,183, 78,207,178,236, 99,171, 85,237,191,101,101,101, 96, 89, 22, 23, 47, 92,208, 87,105, 52, 91, -234, 75,231,173, 31,126,208,213,228,189,147, 86,171, 26, 26, 26,186,108,236,216,177,134,244,244,116,176, 44,139,218,150,172,194, -194, 66, 88, 89, 89, 65,163,213, 54,115,118,118, 54, 55,133,179,240,228, 73, 75, 52,208,175, 11, 4,130,167, 93,132,127, 70,189, -255,119, 44, 88, 12,195,192,195,195,227,137, 56, 35, 53, 19, 7,107, 44, 67, 38, 90,174, 0, 0,185,185,185,191, 48, 12,115,102, -236,216,177,243,219,183,111, 63,101,198,140, 25, 2,111,111,111, 84, 84, 84,192,206,206, 14, 78, 78, 78,200,200,200,192,193,131, - 7,217,242,242,242,159, 89,150, 93, 92, 88, 88, 88,100, 2,239, 69, 0,131, 95,121,229,149,125, 31,124,240,129, 77,143, 30, 61, - 68, 53, 3,224,253,251,247,113,242,228, 73,195,222,189,123, 43,181, 90,237,104, 83,162,184, 3, 64,126,126,254, 89, 0,175,143, - 31, 63,126,215,176, 97,195,172,180, 90,173, 40, 45, 45, 13,122,189, 30, 12,195,160,180,180,212, 16, 25, 25, 89,165, 86,171,199, - 84,159,219, 16,223,173,252,252,252, 64,131,193, 48,238,246,237,219, 75, 95,127,253,117,135,206,157, 59,139, 25,134, 65,116,116, -116, 81, 72, 72,136,115,101,101,165,225,202,149, 43, 37, 90,173,118, 94,110,110,174, 73, 91,229, 80, 20,133,202,202, 74, 56, 58, - 58, 66,171,213,130,227, 56,232,245,122, 88, 89, 89, 61,222,222,136, 16,242,232,225,104,188,139, 16, 12,195, 8,140, 70, 35,222, -120,227, 13,112, 28,135,181,107,215,130, 97, 24, 65, 99,121, 44, 45, 45,111,198,197,197, 13, 14, 10, 10,122,156, 30,154,166, 65, -211, 52,164, 82, 41, 28, 29, 29,225,224,224,128,243,231,207,131,166,233,155, 38,210,222, 45, 46, 46,238,112,230,204,153,206,119, -239,222,125, 27, 64, 59,131,193,208,140,101, 89,138,166,233, 60,150,101,239, 85, 85, 85,109,129,137, 91,229, 20, 22, 22, 46, 29, - 55,110, 92,200,158, 61,123, 44,133, 66,225,227,242,162,105, 26, 98,177, 24,142,142,142,144,201,100,104,217,178, 37, 52, 26, 13, -190,248,226,139, 74,181, 90,189,244,223,212, 33,116,235,210, 29, 23, 78,239, 54,223,177,125,167,146,101, 65, 87,135, 98,120,140, - 0,111, 8,182,111,221, 40,145, 9,181,118,221,186,116, 55,201,181,162, 55, 48, 37,163, 39,254,236, 81,189, 85,206,210,244,140, -204,111,119,255,252,110, 42, 0,172, 94,187,217, 39, 43,197, 48, 35,254, 65,210,107,235, 55, 71,118,210, 27, 24,147, 54,192,253, -159,104,217, 85, 1, 2,109,110,110,238, 53,138,146,123,117,123,199, 48,207,191, 5,245,106, 65, 9,167,160, 40,234,195,220,220, -220, 84, 83,243,222,185,115, 15, 68,158,219,131, 29,219,118, 85, 80, 28,180, 53,207,223, 1,128, 28, 88, 24, 69,128,168,154, 83, - 85, 83, 95,199,162,121,179,166,204,172, 84, 86,172, 89,255, 83,253,110,147,182,237, 94, 66,219,118, 47, 97,218,135,159,219, 4, - 6, 5,120, 2,192,129, 3, 96,131,188,226,143,205, 95,188,240,213,197,243, 23,162, 82,173, 67,205,182, 58, 15, 18,227, 79,164, -166, 65,207, 15, 79,255,195,124,134,185,134,207, 62,107,165,173,168,112,234, 58,123,182,163,112,229, 74,186,230, 5,250,105, 11, -214, 99,235, 85, 35, 56, 79, 71, 68,156,248,236,211, 79, 21,171, 86,174,236,191,252,155,111,204, 90,183,110,141,252,252,124, 4, - 4, 4, 64, 46,151, 35, 58, 58, 26,103, 79,157, 82, 85,105, 52,243, 92, 93, 93,215,231,229,229,213,201,185, 16,184, 38,156, 55, -175,165, 94,165,114, 89,181,117,235,195,222,125,251, 22,108,217,178,165,217,128, 1, 3,104,181, 90,141,138,138, 10, 84, 84, 84, - 64,167,211, 65, 44, 22, 35, 87,161,224,114, 20,138,123, 89, 89, 89, 91,234, 77,231, 39,159,180, 82,151,150, 58,117,157, 61,219, -209, 88, 82, 34,155,153,145,145, 67,111,223,254,205,148,201,147, 63,157,241,201, 39,210,102,205,154, 81, 58,157,238,177,208, 50, - 26,141, 48, 51, 51, 51, 50, 12,227, 0, 64,109, 10,167,236,196, 9,166,164,164, 4,246,246,246,143,195, 46,209, 52, 13,153, 76, - 6, 59, 59, 59, 84, 85, 85,129, 16,194, 7,192,109,140, 71,230, 89,255,240,247,247,191, 41, 20, 10,155,213, 54, 17,214,181,183, - 93,237,239, 12,195,228,196,197,197,133, 62,165,112,235, 52,125,202,229,114, 31,142,227,190,238,220,185,243,235,147, 38, 77,162, -162,162,162, 16, 17, 17, 65, 20, 10,197, 1,154,166,231, 41, 20,138,212,122,222,108,234,228,180,179,179,179,178,178,178,250,216, -194,194,162,111, 77, 40, 6,153, 76,118, 95,165, 82,157, 87, 42,149,107,235,137,222,254, 76, 78, 47, 47, 47,107,142,227, 62,178, -176,176,232, 87, 92, 92,220, 30, 0, 28, 29, 29,239,168, 84,170,115, 52, 77,175,171,103, 3,233,103,114,186,185,185,153, 89, 90, - 90, 46,181,183,183,127,107,210,164, 73, 14, 81, 81, 81,121,119,238,220, 17, 87, 86, 86,238,102, 24,166,190,205,158,255,192,217, -186,117,235, 39,246, 34,124,145,117, 4, 0,109,219,182, 61, 62,100,200,144, 65,111,189,245, 22,140, 70, 35,126,254,249,103,156, - 61,123,246, 68, 74, 74,202,224, 6,222, 62,159,224,116,113,113,113,148,203,229,145, 99,198,140,105, 62,116,232, 80,115, 27, 27, - 27, 8, 4, 2,168, 84, 42,164,166,166,226,254,253,251,228,236,217,179, 85,241,241,241, 57, 26,141,166,103, 65, 65, 65,177,169, -229,249,156,111,201, 79,112, 10,133,194, 30, 30, 30, 30,123, 23, 44, 88, 96,213,175, 95, 63, 51, 7, 7, 7, 8,133, 66, 48, 12, -131,130,130, 2,196,198,198,226,228,201,147,170, 95,127,253, 85, 85, 82, 82,242, 6,106,141,186,127,101, 58, 95, 52,103, 77, 36, -247, 39,218, 86, 96,235,248,196,116, 44,123,226,152, 23, 62,137,143,139,111, 83,219,114, 85, 43,146,187, 73,233, 12,239,106, 27, -254,250,208,176,190, 0,112,240,200,141,243, 13,108,246,252,116, 58,191,140,143, 75,124,106,179,233,128, 7, 9,105, 88,210,228, -188,123, 97,126,108,108,252, 19,156,193,193,129, 15, 18,210,159, 29,157,254,105, 67,111,157,207,102,205,124,177, 39,207,204, 74, -200,248,159, 11,180,117, 11, 12,126,237,245, 97,131, 62,159, 51, 23, 95, 47, 95,134,163, 7, 15,159, 72,200,120,188,157,207, 63, -178, 45,253,137,156,212, 87, 66,225, 75,230,110,110,221,247, 56, 58,206, 61,115,238,156,101,205,252,218,154, 57,146, 79, 47,184, - 10, 9, 9, 41,188,123,247,174,139, 41,156,131,191,255,222,160,181,178,146, 46,255,249,231, 30,106,189,190,199,204,153, 51,133, - 55,111,222,196,222,221,187, 25, 77,118,246,174,124,150,253,232, 25,222,143, 63,228,253, 43,145,168,147,204,193,161,103,171,185, -115,165,203,247,237, 27, 47,111,214,204,101,240,144, 33, 98,161, 80, 8,149, 74,133,220,220, 92, 92,137,142,214,102,102,101,197, -106,181,218, 97, 57, 57, 57,121,166,230,125,240,247,223, 27,108,125,124, 96,233,226,194, 93,190,114,197,118,246,130, 5, 83, 92, -220,220,108,186,118,235, 38, 50, 55, 55, 71, 89, 89, 25,178,178,178,112,249,242,229,194,212,212, 84,119, 0,172, 41,156,191,221, -191,223,246,194,181,107, 35, 62,251,236, 51, 73, 64, 64, 0,172,172,172, 80, 89, 89,137,132,132, 4, 92,185,114, 69,183,111,223, -190, 10,149, 74, 53, 37, 39, 39,231,183, 63,177,222,255, 27, 2,235,175,122,240, 92, 92, 92, 66,105,154,254,178,218, 29,181,164, -161, 61,253,254, 77,157,142,171,171,171,167,157,157,221, 70,141, 70, 67,116, 58,221,228,252,252,252,172,191, 97, 58,133,161,161, -161, 63, 21, 22, 22,118, 38,132,192,198,198,230,106, 92, 92,220,251,168,223, 23,255, 44, 78,129,171,171,107,103, 11, 11,139, 78, - 22, 22, 22, 61, 12, 6, 67,235,234,121,120, 9,106,181, 58,202,104, 52, 94,203,207,207,191, 90,221, 33,252,127,230, 93, 0,160, -159,187,187,251,187, 28,199,249,210, 52,109, 91,237, 42, 45, 39,132, 36,151,149,149,109, 6,112,238,111,144,206, 23,198, 25,232, -133, 97,132, 66,192, 19,157, 3,135,172,167, 39,175,215, 76,134,127,226, 60,130,196,248,116, 28,110, 68, 58,233,161,125,156, 86, - 1,143, 86, 26,162,254,137,179, 79,138, 33, 19, 68, 75,163, 5, 86,115,140,171,147, 51, 19, 59, 77,228,227,158,167,142, 2,155, -163, 7, 40,116,230, 40, 92, 75, 76,199,133,127, 99, 95,247, 34, 57,191, 6,236,127,245,243,187, 74, 11,133,174, 20, 69,209, 0, - 64,209, 52,199, 1, 44,104,154,169,237, 22,124,234,133,178, 94, 78, 3,208, 70, 44,149, 54, 99, 25,198,165, 68, 44,182,186, 98, - 97,209, 65, 7, 84,185,178,236,151, 17,165,165, 15, 26,155,206,133,128, 29,128, 64,161, 84,234,121,197,220,124, 72,169,157, 93, -135, 50,134,113, 1,192, 73,165,210,184, 42,181,122, 75,118,118,246,230, 58, 60, 21, 13,166, 83, 36,149,122,176, 12,227, 66, 1, -132, 22, 10, 11,207, 72,165, 30, 69, 78, 78,111,171, 53,154,230, 82,169,212, 8,160,210, 96, 48,140,201,206,206,142,104, 12,103, -150, 64, 16,120,207,202,170, 27,107,109,237, 96, 0, 44, 12, 28,103, 48, 24,141,217, 58,157,238,190, 64, 32, 88,163, 80, 40, 82, -254,228,122,231,209,200,135,132,231,228, 57,121, 78,158,147,231,228, 57,121,206, 63,153,211,217,217,217,220,213,213,213,179,250, - 37,241,159,152,247,127, 21,132,124, 17,240,224,193,131, 7, 15, 30,255,124, 20, 22, 22,170, 81,199,156, 43, 30,255, 63,168,111, -245, 75, 99, 76,127, 77, 81,178,177, 60, 39,207,201,115,242,156, 60, 39,207,201,115,254,231, 56, 27,226,230, 93,143,127,146,240, -226, 57,121, 78,158,147,231,228, 57,121, 78,158,243,191,199,249,175, 2,205, 23,193, 51,225, 82,253,121,209,231,242,248,119,183, -133,167, 33,175,254, 52,230,124, 55,190,200,121,240,224,193,227,159,141,255,143, 57, 88, 53, 3, 85,193, 11, 58,239, 69, 95, 11, - 0,203, 40, 10,179, 0,128, 16,172, 0, 48,247,121,206, 37,207,216,209,253,105, 4, 5, 5, 57, 82, 20,213,199,198,198,166,141, - 82,169,140, 37,132,156,187,127,255,126, 9,101,226,254, 79, 30, 30, 30, 94, 50,153,108, 60, 69, 81,173,171,239,155,160,213,106, -183,103,103,103,167,191,128,122,163, 0,188, 39,149, 74, 71,217,218,218,250,150,149,149, 37,235,245,250, 95, 1,108, 64, 19, 34, - 78,187,185,185,249, 1, 24,199,113,156,144,166,233, 61,121,121,121,119, 77,189,214, 57,232,181,253, 4,104, 5,128,230, 40,110, - 4, 77,232, 3, 0, 56, 10,120, 88, 24,119,116,212, 11,110,175,141,105, 11, 79,190,189,208,244,114, 66,184,207, 0,128,162,232, -149, 44,203,126, 94,223,249, 2,129, 96, 53,225,184,143, 64,129, 80, 20,189,146,227,184, 57,124, 23,197,131, 7, 15, 30,255, 1, -200,229,242,129,110,110,110,187,220,220,220,118,201,229,242,129, 38, 92, 18, 92,199, 96,197, 82, 20, 88,224,201,248, 58,141, 56, -175, 33,179,100,237,107, 87,153,152,181,218,156, 46, 20, 5,150, 84,131,162,192, 57, 59, 59,111,116,119,119, 95,251,244,199,217, -217,121, 35, 69,129,171,117, 46, 91, 75,220, 5,215, 22, 88, 13,125, 66, 66, 66, 28,222,121,231,157,117, 10,133, 98,131,193, 96, -216,152,149,149,181, 97,228,200,145,235,252,253,253, 93, 77,201,187,183,183,247,208,215,134,190, 30,121, 41,230,230,131,164,228, -204,220,248, 7,169, 25,103,206, 95,190,214,127, 96,248,121,111,111,239,161,141,168, 35, 10,192,100,161, 80,120,209,210,210, 50, - 71, 40, 20, 94, 4, 48, 85, 32, 16,252,182,108,217,178,140,184,184,184,130,232,232,232,242,200,200, 72,197,196,137, 19,147, 41, -138, 58,134, 63, 90, 66,131, 27,178,226,184,185,185, 45,206,206,206,190,153,151,151,119,171, 89,179,102, 63, 62,197, 81,151,213, -231, 49,167, 83,208,107,247, 10, 43, 12,164,176,194, 64,156,130, 94, 35,181,190,223,107,100,147,110,168, 45,253,161, 45, 88, 88, - 88,248, 63, 37,228, 93,158,193,249,135,107,237,237,237,221, 9, 33,116,203,150, 45, 59,202,229,242, 31,228,114,249, 15, 45, 91, -182,236, 72, 8,161,237,237,237,221,101, 82,105,131,109,233, 5,130,231,228, 57,121, 78,158,243,239,198,249,223,181, 96, 17, 66, -222, 78, 78, 78, 54,231, 56, 14,254,254,254, 99, 1,156,106,140, 85,137,162, 48,139,227, 30, 89,115,104,154,154,221,171, 87,239, - 16, 51, 51,179, 39, 34, 22,107, 52, 26,201,197,139, 23,250,112, 28,161,170,207,155, 69, 8,214,153,104,141,114,161, 40,204,210, -235,117,180, 72, 36,129, 64, 64,207, 12, 14,110, 19, 90, 92, 92, 28,193,178,236,207,117, 4,175,108,216,108, 67, 81,216,178,101, - 75,107, 23, 23,151, 63,236,161, 82, 80, 80, 32, 30, 50,100,112,163,248,222,110,211, 70,166, 77, 77,237, 70,139, 68,158, 6,163, -209, 17, 0, 68, 34, 81,137,204,210,210,227,139,121,243,204, 45, 44, 44,184,146,146, 18, 84, 86, 86, 82,211,166, 77,147, 77,155, - 54,173, 31,128, 29,245,113, 54,107,214,204, 59,184,109,251,233,219,183,109,235, 84, 81, 90,170,221,188,102,253,109,157, 80,170, -110,222,218, 79,252,229,130,175,108, 22,207,159, 59,217, 96, 48,196,230,228,228,164, 53,100,116, 1,112,248,227,143, 63, 14, 26, - 60,120,176, 68,169, 84,202,212,106,117,139, 93,187,118,125, 17, 22, 22,102, 25, 18, 18, 34,217,187,119, 47, 85, 94, 94, 14, 66, -136,121, 64, 64, 0, 25, 57,114,164,118,255,254,253,211, 0,124,215, 24, 11, 16,203,178,162,154, 72,233, 12,195, 72,170,219,162, -193, 20,139, 17, 5, 60, 12,234, 58, 18,160,224, 27, 23,253,171, 44,168,219, 72, 45, 8,146, 41,224, 97,245,139,192, 36,142,227, -188,158, 97, 85, 74, 87, 40, 20,155,154,242,176, 12, 26, 52, 24, 0, 54,222,186,117,235, 82, 81, 81, 81, 51,142, 99,199,152,106, -217,162, 40,138, 18, 10,133,227, 0, 44,215,104, 52, 19, 35, 34, 34,218, 3, 64,159, 62,125,196, 0,110, 18, 66, 58,227,207,143, - 75,199,131, 7, 15, 30, 60,254,166, 2, 75, 12, 0,151, 46, 93, 2, 33, 68,210,132,251, 81,181,133,203, 71, 31,125, 4, 55,183, - 39,167,155,228,229,229, 33, 50,242,226,243,228,233,137, 65,106,233,210,165, 54, 37, 37, 37,175,110,217,178,165, 63,128, 47, 10, - 10, 10, 34, 27,184,190,128, 16,172,160,105,106, 54, 69, 81,144, 72,164,233,147, 39, 79,190, 89,157,127,159, 99,199,142,153, 15, - 25, 50, 68, 77, 81, 84, 42, 0, 72, 36, 82,103,129,128,246, 34,132,212, 12,180,207, 20,130,175, 91, 90,250, 19, 66,134, 76, 89, -189,154,237, 16, 30, 46,180,118,118, 22,128,166, 81,148,149,229,176,241,199, 31, 59, 63, 56,123, 86,234, 26, 16,144,165,151, 72, -202,147,146,146,224,230,230, 6,177, 88,220,224, 91,130,185,185,249,196,143,103,124,234, 84, 81, 90,166, 49, 42,149, 6, 75,142, -101,172,101, 34,170,178,168,164, 60, 61,219, 90, 61,113,234,116,225,252, 57,159, 76, 4,240,121, 3, 84,211,102,204,152,209,186, - 99,199,142,242,125,251,246, 81, 21, 21, 21, 16, 10,133,150,237,219,183, 71,104,104, 40, 27, 17, 17, 65,121,123,123, 35, 56, 56, - 24,209,209,209,184,114,229, 10, 21, 18, 18, 98,126,248,240,225,177, 70,163,241,187,134, 68,181, 64, 64,207, 25, 49, 98,228, 64, -115,115,115,163, 70,163,193,164, 73,147,160, 82,169,208,186,117,235,182, 61,123,246,140,209,233,116,162,163, 71,143, 4,179, 44, -135,250,196,117,141, 27,176,218, 98,213, 6, 4,201, 69,113, 71,219,214,252,159,227, 56,175, 7, 15, 30, 4,150,151,151,131,227, -184,199,123, 50, 2, 64,247,238,221, 27,211,150, 10, 8,193,138, 33, 67, 6,207, 6, 40,244,238,221,187,100,250,244,233,108, 66, - 66, 66,207,225,195,135,189,244,240, 97,114,125, 47, 1, 5, 20, 69,175,164,105,106, 22, 69, 81,212,248,241, 19, 10, 44, 45, 45, -135,121,120,120, 60,160, 40, 74, 40, 22,139,107,158, 3, 65,235,214,173,157,130,131,131,167,218,217,217, 21, 10,104,218,153,128, - 16,138,162, 87, 18,194, 21,240, 93, 20, 15, 30, 60,120,252, 7, 4, 22, 69, 81,197,119,238,220,113,211,106,181,160, 40,202, 20, -107, 80,236, 83, 3,206, 79, 52, 77,189, 79, 81, 20,130,131,219,164,173, 93,187,182,174,253,182,244,193,193,109,210, 4, 2,218, -155, 16, 2,138,162,215, 63, 53,208,196, 54, 52, 32, 74, 36,210, 89, 0,224,230,230, 94,112,252,248,113,227,136, 17, 35,176,114, -229, 74,201,156, 57,115,190,162,105,122,116, 94, 94, 94, 78, 61,233, 4,128,185, 78, 78,206,246, 91,182,108,105, 61,121,242,228, -155,185,185,185, 31, 3,128,187,187,251, 90, 0,109, 40,138, 74,173,117, 12, 27, 54,108, 8,157, 56,113, 98, 66, 97, 97,225,220, -103,113,190,110,101,229,235,224,238, 62,116, 85,116, 52, 17, 50, 12, 85,113,243,102,121, 78,126,190, 65,207,178,244,169,180,180, - 78,163, 39, 76, 16,187,184,185,145,163, 27, 54, 52, 87,139, 68,132,149,201, 42,226,226,226,136,193, 96,184,223, 80,222, 41,138, - 10,176,179,181,179,216,188,122,253, 77, 39,169,128,114,244,112,167,196,214,182, 66,218,210, 74, 74, 4, 2, 77,115, 15,119, 43, -138,162, 2, 26,170, 35,177, 88, 60,182,127,255,254,230,123,247,238,165,130,131,131, 97,107,107,139, 75,151, 46,225,206,157, 59, - 40, 43, 43,163, 25,134, 65, 88, 88, 24, 86,172, 88, 1, 15, 15, 15, 84, 84, 84, 32, 35, 35,195, 81, 44, 22, 59, 25,141,198,103, -149,231, 19,130,119,214,172, 89,112,118,118, 6,203,178,200,203,203, 67, 85, 85, 21, 44, 44, 44, 96, 99, 99,131,220,220, 92, 28, - 61,122,196,148,182,100, 18, 94,126,249,101, 53,128,140,167, 45, 88,141,225,148,203,229,103, 11, 11,139,186,245,234,213, 11,229, -229,229,134, 5, 11, 22,160,125,251,246,104,213,202,175,193,116,178, 44,251,185,163,163,227, 86, 7, 7,135,213,211,167, 79,119, -117,112,112,128, 78,167,155, 87, 82, 82,130, 89,179,102, 1, 0, 66, 67, 67,219, 16, 66, 78, 76,156, 56, 17, 94, 94, 94,138,210, -210,210,172, 7, 15, 30, 76, 46, 44, 44,140,173,181,197,209,159,177,100,153,231,228, 57,121, 78,158,243,239,198,249,175, 20, 88, -164,214, 64, 72,240, 12, 87, 5, 33,164, 76, 46,151,187,153,153,153,129, 16, 82,214,216,155,113, 28, 55,205,193,193,161,112,238, -220,185, 93,253,252,252,244,211,166, 77,139,205,200,200,152, 87,251,156, 22, 45, 90, 44,253,225,135, 31,144,148,148,148,177,108, -217,178,232,146,146,146, 37,141,188,205, 28, 66,176, 22, 0,114,115,115,139,143, 29, 59,214, 49, 42, 42,106,206,218,181,107,221, -166, 77,155, 38,153, 62,125,250, 84, 19, 44, 57, 16, 10,133,154,186,220,130,117,193,197,197,197, 32, 20, 10,159,181,127, 32, 38, -119,232, 32, 37, 28, 55,244,155, 75,151, 56, 46, 39, 71,123,114,219, 54,172,188,114,101,138,141,163,163,167,147,147, 19,241,106, -214,172,200,140, 97, 10, 42,139,138,232,144,254,253, 69,103,118,236,104, 46,245,242,138, 63,112,224, 64, 21,199,113,103, 77, 72, - 66,149,222,104,212, 89,120,184, 27,135,188,214,191,205,253,235,119,146,204,236,237,233, 54, 97,237, 3, 19,147, 51,110, 81,128, - 30,104,120,243, 88, 27, 27, 27,191,226,226, 98, 84, 86, 86,194,201,201, 9,235,214,173,131,139,139, 11,212,106, 53,226,226,226, - 72,179,102,205,168,203,151, 47,195,221,221, 29, 69, 69, 69,208,235,245, 80,171,213,133,122,189,254, 89,121, 47,160,105,193,102, -154,166, 38, 81, 20, 5, 95,223, 86, 5,223,125,247,157,145, 16,130,128,128, 0, 12, 27, 54, 12,151, 46, 93, 66, 92, 92, 92,141, -149,201,232,229,229, 93, 64,211,148,243,163,230, 86,191, 69,176,129,182, 6, 0, 25,121,121,121,115,155,114,189, 92, 46,151,177, - 44, 59,197,215,215,119,240,155,111,190,105, 16,139,197, 80,171,213, 53,101, 97, 24, 48, 96, 64,201,144, 33,131, 29, 78,156, 56, - 81,111, 58,139,139,139, 83, 91,183,110, 61,233,211, 79, 63,221,185,126,253,122,219,207, 63,255,252,241, 38,220, 44,203,130,227, -184,199, 86,182,195,135, 15, 35, 61, 61,253,235,194,194, 66,190,227,226,193,131,199,127, 17, 38,105,145,127,162, 5,235, 47,201, -140, 64, 32,216,112,246,236,217,246,221,187,119, 23,246,233,211, 39,248,244,233,211,193, 10,133, 34,182,122, 80, 11,238,211,167, - 79,176,179,179, 51,214,173, 91,167, 22, 8, 4, 27,154,120,155,199,131, 93, 94, 94, 94, 12, 69, 81, 95, 30, 58,116,104,203,228, -201,147,225,226,226,210, 62, 55, 55,247, 47, 45,228,178,164,164, 46,227, 23, 47,230,100,128,224,196,206,157,228,171,232,232,111, -246,255,250,171,216,199,199, 7,132, 16,100,100,100, 88,255,188,101,139,253,232,126,253,226,242, 85, 42, 42, 37, 63,159,141, 63, -126,156, 46,161,233,239, 83, 83, 83,139,107,111,214, 92, 23, 12, 6,195,141,172,204, 76,191, 46,221,186,184, 93,186, 25,127,123, -248,208,193,189,104, 33, 77,167,103,230,221,112,114,176,183,184,114, 53,186,210, 96, 48,220,104, 40,157, 42,149, 42,157, 97, 24, -123, 66,136, 83,100,100, 36, 28, 29, 29, 81, 86, 86, 6,163,209, 8,131,193,160, 87,171,213,178,196,196, 68,232,116, 58,232,116, - 58, 88, 91, 91,227,254,253,251, 5, 12,195, 92,120, 22, 39,203,178,239, 1, 88, 76, 8, 65, 82, 82,146,162,218,245,217,202,214, -214,118, 55,195, 48,200,205,205, 69,100,100,228,152,188,188,188,164,218,250,166,250,175,162,201, 79, 41, 33, 77,174, 47, 39, 39, -167, 96,177, 88, 60,247,195, 15, 63,116, 9, 10, 10,130, 86,171, 5, 0, 88, 90, 90, 66,173, 86,195,218,218, 26,157, 59,119, 78, - 88,178,100,137,129, 16,140, 7,144, 95, 31, 95, 66, 66, 66,145,159,159,223,135,147, 39, 79, 94,228,231,231,231, 77, 8,129,175, -175, 47,250,247,239,143,147, 39, 79,226,225,195,135, 80,169, 84,236,245,235,215,247,102,103,103, 31,231,251, 88, 30, 60,120,240, - 34,235,223, 99,193, 66,117,134,200,159,125,195,194,194,194,162,196,196,196,211,183,110,221, 26, 60,106,212, 40, 68, 70, 70,142, - 7,240, 9, 0, 72,165,210,241,163, 70,141,194,173, 91,183,144,152,152,120,186,176,176,176,232, 69,220,147,162, 40,181, 94,255, -200,128, 35,147,201,204, 26, 57, 80,251, 84,187, 6, 65, 8,241,121,214,177, 6,172, 97,158, 47, 15, 27, 70, 87,221,185, 83,190, -248,204,153,143,247, 28, 58, 36,246,240,240,128, 82,169,132, 64, 32,128,181,181, 53,213, 63, 60,220,110,243,158, 61,174, 30, 86, - 86, 87,166, 78,152,240,224,235,115,231,212, 87, 42, 42, 76, 10,175,160,213,106,183, 44, 93,242,101,175,157,187,246, 7,248, 7, -248,218,157, 60,123,241,182,131,131,181,153,151,151,143,180,162,188, 92,247,195,218,149, 66,149, 74,181,181, 33, 30,141, 70,115, - 56, 34, 34, 98,168,135,135,135, 83,108,108, 44,244,122, 61, 88,150, 69,223,190,125, 65, 8,145, 2,224,132, 66, 33, 18, 18, 18, - 96, 48, 24, 10, 31, 62,124,168, 72, 73, 73,145, 2, 88,222, 0,245, 19, 66,137,166,233,209,131, 7, 15, 6,195, 48,232,223,191, - 63,142, 28, 57, 50, 10,192,162,103,157,255, 28, 22,172, 22,110,110,110,203,170,239,105,210,228,118, 87, 87,215,174, 45, 91,182, - 92,180,106,213, 10,202,197,197, 13, 44,203,192,104, 52,160,168,168, 4, 74,165, 18,129,129,129,240,244,244,196,242,229,203, 1, -224, 72, 67,226,170, 6, 73, 73, 73,201, 0,222,152, 48, 97,130,248,210,165, 75,161, 90,173,246,219,126,253,250,225,246,237,219, -184,123,247,238, 91,206,206,206,133, 30, 30, 30,140, 92, 46,159, 68, 81,148,181, 76, 38,219,243, 34,202,129, 7, 15, 30, 60,254, - 97,248, 75,180,200, 95, 45,176,234,205,152,179,179,179,121, 89, 73,225, 71, 94, 94, 94, 50, 0,144,138, 5,189, 29, 28, 28,190, - 46, 41, 41,169,106,236, 77,213,106,245,254, 93,187,118,189,178,102,205, 26,113,120,120,120,203, 67,135, 14,117, 4,128,240,240, -240,150, 86, 86, 86,216,181,107,151, 65,173, 86,239,127, 81,153,228, 56,174,127, 88, 88, 24, 74, 75, 75,145,145,145,113,179, 49, -215, 30, 59,118,204, 28, 64,155,134,142,213, 7,189,209,232,100,237,230, 38, 44,184,116,201,160, 97, 24, 79, 63, 63, 63, 40,149, - 74, 72, 36, 18,232,116, 58,164,167,167, 67, 44, 22, 83, 15,211,210, 28,231,124,242,201,101, 51, 63, 63,203,154, 21,134,166, 32, - 47, 47, 79, 3, 96,250, 87, 75,191,218,189,106,229, 74,231,210,146,178, 36,177,196, 76,107,110, 38,181,159,253,233, 18, 82, 80, - 80, 48,179,122,143,170,134,176,124,247,238,221, 3, 94,121,229,149,123, 30, 30, 30,206,197,197,197,174,149,149,149,164,180,180, -148,170,110, 27, 20, 0,220,187,119, 15,153,153,153, 12,203,178,151, 1, 44,134, 9,238,199,199,166, 41,185,220,174, 99,199,142, - 3, 28, 28, 28, 30,187, 34, 67, 66, 66, 6, 0,248, 94,161, 80,148,189,200,198,125,246,236, 89,115,142,227, 2, 1, 96,192,128, - 1,166,138,241,183, 71,143, 30, 77,153,153, 89,128, 97, 24, 72,165, 98, 72,165, 82, 88, 90, 90,195,222,222, 30,153,153,153,232, -221,187, 55,151,150,150,118,212,220,220,124, 91, 99,211,116,241,226,197, 87, 59,118,236,248,201,212,169, 83, 97, 52, 26, 49,116, -232, 80, 40, 20,138, 85,233,233,233,251, 92, 93, 93,199,204,155, 55,207,209,193,193, 1,179,102,205, 50, 3,176,144,239,107,121, -240,224,193,139,172,127,135,192,122,214,160, 24,102,103,103, 55,173,176,176, 80, 86,227,122,161, 40, 74,214,174,101,203, 13, 98, -177,248,167,188,188,188, 43,141,185,105,121,121,121,101, 90, 90,218,209,152,152,152,145,195,135, 15,199,185,115,231,198, 1,192, -240,225,195, 17, 19, 19,131,180,180,180,163,229,229,229,149, 47, 34,131,238,238,238,175,247,236,217,115, 92,199,142, 29,113,236, -216, 49,176, 44,123,161, 49,215,215, 94, 49, 88,215, 42,194,154, 99,166,112, 73, 30,197, 57, 2,203,178, 16, 8, 4,208,106,181, -200,203,203,195,131, 7, 15, 96,109,109,141,178,210, 82,202,218,222,222,160,211,233,216,198,230, 51, 47, 47, 47,231,206,205,223, - 83, 52, 90,173,200,206,193, 94,109,101, 33, 33,149, 74, 37,125,239,222,237,188,194,194,194, 12, 83,181, 32, 33,164,199,153, 51, -103,230, 11, 4,130, 81,114,185, 28, 35, 71,142,164,250,244,233, 3,137, 68, 2,141, 70,131,242,242,242,154,114,244, 6, 0, 71, - 71, 71, 23,115,115,243,131, 52, 77, 23,164,167,167, 79,108,232, 6, 44,203, 14,127,237,181,215,132, 70,163, 17, 75,150, 44,193, -194,133, 11, 49,112,224, 64,225,141, 27, 55,134, 3,216,244,162, 26, 54, 33, 4,175,188,242,202,227, 73,238, 79, 77,110,175, 19, - 61,122,244, 16,166,165,165,249,200,229,114,100,100,100,192,220,220, 28, 46, 46, 46,176,181,181,133,163,163, 35,214,172, 89,131, -111,191,253,246,174, 64, 32, 88,159,151,151,151,210,216, 52,121,122,122, 78, 26, 59,118,236,164,145, 35, 71, 66,169, 84, 34, 38, - 38, 6, 93,186,116,193,178,101,203, 92,163,163,163,103,132,133,133, 65, 40, 20, 34, 42, 42, 10, 44,203,102,243,125, 44, 15, 30, - 60,120,252,243, 5, 22,245,148,114, 4, 0,216,218,218, 90,203,100,178,201,225,225,225, 93,135, 14, 29,138,254,253,251, 63,113, -241,186,117,235, 44, 35, 35, 35,103,127,247,221,119, 61, 0,172,207,205,205, 45,109,132, 85,233,240,238,221,187,195, 95,126,249, -101,243, 94,189,122,249, 0,128, 84, 42,213,239,222,189, 91,205,113,220,225, 38,228,229,137,232,237,114,185, 60, 76, 32, 16,140, - 31, 56,112, 96,216, 59,239,188,131,184,184, 56,236,218,181, 43,193,207,207,239, 92, 65,129,233,243,166,159, 90, 49, 88,215, 42, -194,181, 13, 89,179, 36, 34, 81, 81,101, 94,158,131,208,205, 77, 98, 33,145,100,223,184,113,195,167,101,203,150, 84, 90, 90, 26, -146,146,146, 96, 48, 24,112,231,206, 29, 66, 3, 57, 2,107,107, 58,243,222, 61, 74, 44, 18, 53, 58,102,151,153,152,235,240,197, -172,247,124,181, 90, 77, 96, 69, 69, 5, 35, 20, 10,133, 82, 17,155,214, 72, 26,157,135,135,199,107, 44,203, 58,234,245,122,163, -139,139,139,232,252,249,243,144, 72, 36,120,180,250, 51, 24, 18,137, 68, 47,151,203,149, 0, 96,105,105, 73, 47, 91,182, 76, 52, - 99,198,140,184,134,136, 67, 66, 66, 68, 18,137,100,180,159,159, 31,174, 94,189,138,248,248,248,212,171, 87,175,250,116,232,208, - 1, 30, 30, 30,163,221,220,220,182,223,190,125,219,248,162, 4, 22, 26, 57,201, 61, 42, 42,138,115,119,119, 7, 69, 81, 16, 8, - 4, 80,171,213, 72, 75, 75, 67,231,206,157,177,117,235, 86,172, 93,187,246,151,252,252,252,109, 77, 73,207,132, 9, 19,196,109, -219,182,125,123,228,200,145, 72, 77, 77,197,242,229,203, 75,242,243,243, 47,158, 57,115,102,248,212,169, 83, 5, 93,186,116, 65, -113,113, 49,182,111,223,206,220,190,125,123, 91,120,120,248,206,141, 27, 55,242, 61, 20, 15, 30, 60,254,107,150,171,186,190,255, -187, 44, 88,238,238,238,131,100, 50,217,187,163, 71,143, 22,248,251,251,163,160,160, 0, 86, 22, 82, 61, 69, 81, 18, 0,176,178, -144,233,141, 70, 35,166, 78,157,138,246,237,219,119,156, 61,123,118, 24,203,178,191, 20, 20, 20, 28, 52,229,198,133,133,133,106, -154,166, 15,188,255,254,251,203,239,220,185,237, 13, 0,215,175, 95, 79,203,205,205,157, 99,162, 59,171, 54,106,130, 83, 82, 50, -153,217, 61, 95, 95,223,146,208,208, 80,187, 97,195,134,193,209,209, 17,183,111,223,198,178,101,203,226,180, 90,237,180,168,168, - 40,230,175, 46,100,134, 97,178,174, 29, 63,110,247,202,152, 49,118, 75, 70,143,254,225,157, 9, 19, 86,124,189,108,153, 88, 46, -151, 83,214,214,214,184,123,247, 46,217,188,105,147, 97,223,202,149, 63, 8,204,204,196,151,142, 28,145,176, 70, 99,114, 99,238, - 33,151,203,123,132,117,234, 24,188,106,205,119,208,168,171,112, 61,230, 56,202, 74,139,177, 97,211,161, 54,114,185,188,135, 66, -161,136,106, 68,122,125, 14, 28, 56,240, 72, 28, 74, 36, 88,188,120, 49,220,221,221, 97,109,109,141,170,170, 42,188,247,222,123, -146,143, 62,250, 8, 0, 16, 31, 31, 15, 75, 75, 75, 83,173,108,189, 38, 79,158,108,109, 52, 26,113,234,212, 41, 29,203,178,211, -207,157, 59,119,184, 93,187,118,210,238,221,187, 91,239,220,185,179, 55,128, 51,255,143,207, 3, 71, 8,201, 58,123,246,172,231, -200,145, 35, 33, 22,139, 81, 86, 86, 6, 43, 43, 43,172, 90,181,138, 24, 12,134,131, 77, 37, 86, 40, 20, 18, 71, 71, 71, 9,203, -178, 56,112,224, 0, 42, 43, 43, 39,230,228,228,228,183,108,217,242,240,236,217,179,103,250,250,250,122, 37, 39, 39,103,178, 44, -187, 82,161, 80,164, 3, 0, 47,176,120,240,224,193,227, 95, 40,176, 0,188,117,250,244,105, 1,199,113,216,184,113, 35,110,221, -186, 69, 44,173,237, 63,182,178,161,118, 88, 91, 91,179,229,229,229,111,173, 88,177, 98,232,252,249,243,169,110,221,186, 33, 38, - 38,134,242,246,246, 30, 14,160,246, 32, 20,140,122, 98,101, 84, 84, 84,220, 40, 40,200,247,174, 21,181,221, 91, 42,149, 53,180, -218,237,105,206,167,131, 89,182, 91,186,116,105,172,179,179,179, 49, 54, 54, 22,235,215,175,231,110,221,186,117, 2,192,170,194, -194, 66,141,137,156, 47, 2,143, 57,237,252,252,174,108,157, 59, 55,228,229, 87, 95, 37,189, 71,141,226, 86, 75, 36,159,126,185, - 96,193,244,210,202, 74, 15,142,227,224, 96, 99,147,245,203,210,165,107,186,116,235,166,185,255,251,239, 22,209,191,253,102,230, -210,162,197,229,198,164, 83,161, 80, 68, 69, 70, 94,198,246, 77,107, 96, 48,232,144,167,200, 4, 0, 20,151, 84,160, 1,113,245, - 7, 78,154,166,203,199,143, 31,111,174,215,235,169,209,163, 71,139, 10, 11, 11,209,178,101, 75, 0, 64,101,101, 37, 78,156, 56, -129,128,128, 71, 97,181,238,223,191,255,248,123, 67,233, 52, 55, 55, 31,213,181,107, 87,100,100,100, 32, 46, 46,238,100, 97, 97, - 97, 81,124,124,252,201,204,204,204,225,161,161,161, 56,124,248,240,200,122, 4, 86,163,234,168, 38,176,104, 35,219, 18, 24,134, -153,125,248,240,225,201, 49, 49, 49, 61, 62,249,228, 19,170, 79,159, 62, 0, 0,149, 74,197,154, 56,223,240,153,233,172,113, 15, -115, 28, 7, 15, 15, 15, 21, 0,164,164,164,164, 3,248,160,169,156, 47,162,125,242,156, 60, 39,207,201,115,254, 77, 56,255, 51, - 2,139,225, 56, 14,145,145,145, 56,116,232, 16,171,215,235,231,230,231,231, 63,168, 30,204, 1, 96,219,157, 59,119, 46, 15, 31, - 62,124,117, 82, 82,146, 32, 62, 62, 30,132,144, 70,205, 29,210,106,181,198,167, 35, 16,104,181,218,231,118, 17,109,221,186, 21, -249,249,249,250,204,204,204,223, 12, 6,195,174,146,146,146,188,166,114,189,136, 85,132, 27,110,221,210,189,110,101,117,100, 78, -175, 94,195,151,156, 62, 45, 27, 56, 97,130,190,231,128, 1, 95, 67,175,215,139, 68, 34, 14,102,102, 2,129,153,153, 56,254,247, -223, 45, 86, 77,153,226, 64,209,244,209, 31,227,227, 53,141,181, 96,245,236,217, 13,227,223,157, 1,141,166, 10,191, 95, 61,142, -242,210, 98,196,220, 72,130,206,128, 70, 89,176,132, 66,161,167,209,104,148, 50, 12,163, 32,132,224,237,183,223, 6,203,178,208, -106,181, 80, 42,149, 40, 45, 45,213,126,248,225,135,116,181,104,194, 43,175,188, 98, 82, 84,127, 31, 31, 31, 79,161, 80,136, 51, -103,206, 64, 32, 16, 28,124, 36,136, 5, 7, 35, 34, 34,134,143, 30, 61, 26,114,185,220, 47, 53, 53,181,193,198, 16,174, 11, 0, - 0, 32, 0, 73, 68, 65, 84,201,141,143, 55,123,166,224, 11, 0,160,224,235, 20,244,218,189,154,205,158,105,154, 78,111,223,190, -189, 73,243,174,158, 70, 81, 81, 81, 33, 30, 77,220,255,117,214,172, 89, 83, 59,118,236, 24,188,104,209, 34, 0, 16, 60,183,121, -140,227,192, 48,204,115,133,144,224,193,131, 7, 15, 30,255,112,129, 69, 81,212,222, 94,189,122,189, 65, 8, 17,208, 52,189,171, - 70, 92,213, 70, 78, 78, 78,154, 92, 46,223,232,229,229,245,102,181,229, 99, 79, 35,239, 95, 64, 8,190,161,105,170,246,222,115, - 5, 77,224, 88, 81,205, 65, 9,133,162, 93,215,174, 93,251, 60, 55, 55, 55, 31, 0,251,188, 5,244, 34, 86, 17, 2,192, 65,165, - 50,249,117, 75,203,163, 83,219,181, 27, 50,116,250,116, 18,218,175,159,141,107,139, 22, 12, 99, 52,178,169,247,238, 81,209,135, - 15,139,163,127,251,205, 76, 64, 81,199, 14,170, 84, 15, 26,155, 78,133, 66, 17,117,225, 98,212,217, 17,195,195, 95,241,241,114, - 7, 0,164,166,231,162,184,180,226,108, 99,196, 21, 0,100,102,102,234, 0,232, 92, 93, 93,135,239,223,191,255, 0, 69, 81, 84, -237,237,102, 0,232,132, 66, 97, 43, 0, 80, 42,149,205, 15, 31, 62,188, 91, 40, 20,230, 52,196, 27, 31, 31,191,119,193,130, 5, - 99,210,210,210,126, 83, 40, 20, 41,213,233, 78,185,124,249,242,250,220,220,220, 49,153,153,153, 59, 97,194,202, 17, 2,180,138, -139,254,181, 13, 0, 4,117, 29,137,184,232, 95,101, 0,218, 4,117, 29, 89, 83, 22,207, 61, 89,190, 58, 46,215, 71,215,175, 95, -127,185,127,255,254,227, 9, 33,133,207,195, 39,147,201,140, 58,157,142, 97, 89, 86,104, 48, 24,136, 76, 38, 51,242,221, 15, 15, - 30, 60,120,252,123,241,103, 79, 34, 51,213,132,248,196, 4,245, 38,114, 54,134,163, 65, 78, 55, 55,183,105, 20, 69,249,152, 74, - 64, 8, 73,205,203,203,251,161, 46, 78, 66, 30,185, 47,129,103,111,246, 76,140,198, 76,153,143,207,229, 95,238,223,215,214, 33, -118,185,198,148,167,175,175, 47, 73, 78, 78, 54,181,126,235,229,148,203,229, 50,161, 80,248,180,133, 74, 87, 45,194,106,183, 35, - 1, 0,166,145,245,222,164, 58,122,108,193, 2,104,142,226, 70,208,132, 62, 0,128,171,177, 96,253, 9,237,179, 73,233,172, 93, -239, 0,224,227,227,243,126, 64, 64,192,152,123,247,238,237,207,206,206, 94,215,224,195,217,200,122,255,147,158, 77,158,147,231, -228, 57,121,206,191,138,179,161,113, 54, 12,128, 83,245,207,154, 56,153, 78, 79,125,215, 3,168, 61,102,213,252, 46,162, 40,234, - 70, 45,142,199,199, 77,184, 22, 0,138, 1,220,163, 40, 74,143,191, 9,130,121, 78,158,147,231,252, 31,122,244,232, 33,228,203, -147,231,228, 57,121, 78,158,179,241,226,138, 16, 50, 8,143,188, 28,132, 16, 50,168,230,247,211,223,107,206,169,253,187,250, 47, -158, 62,207,148,107, 1,144, 57,115,230,204, 37,132,244,106, 76,154,105,240,224,193,227, 47,195,255,199, 42, 86, 30, 60,120,240, -248, 23,192,137,162,168,227,132,144,193,132,144,193, 20, 69, 29,175, 71,140, 13,174,253,183, 62,212,197, 83,115,143,218,191,151, - 47, 95,254, 53,128, 70,237, 4, 35,172, 71,133, 54,198,244, 23,220,132,255,197,242,156, 60, 39,207,201,115,242,156, 60, 39,207, -249,159,227,124, 81,215, 63, 55,234, 18,107, 53, 66,174,246,239, 57,115,230,124,142, 70,236, 90,242, 87,128, 55,159,242,156, 60, - 39,207,201,115,242,156, 60, 39,207,249,188, 66,232,153, 46,189,250,220,133, 79,127, 55,197, 69, 88,223,185,141, 73,179, 16, 60, -120,240,224,193,131, 7, 15, 30,127,111, 20,213,182, 54, 85, 91,152,216, 57,115,230,124, 94,115,172,218,202,164, 3, 32,125,250, -226,167,174,171, 23,141, 57,151, 23, 88, 77, 64,187,150,244, 18, 79, 79,231,208,234, 66, 6,169, 14, 81,192, 85, 71, 17, 32, 53, -193,140, 8, 7,194, 17,228,230,149,223,186,159,134, 47,159,161,188, 27,156,235,214,173,155,171,189, 64, 83,245, 45,203,177, 93, - 0,128, 2,125, 73, 36,178,253, 36,226,186,162,188,214,106,178,122, 17,224,131,214, 50, 33, 62,227, 56,180,165, 40,128,162,112, - 79,203, 96,101, 98, 42, 18, 94, 64,145, 80, 65,222,120, 79, 34, 53, 31,109, 99,107,231, 91, 86, 82,252,208, 96,208,253, 26,159, -142, 13,104,194,166,156,254, 62,104, 15, 22,179, 89, 14, 34, 33,141,111, 19, 51, 16,205,183, 58, 30, 60,120,252, 69,214,144,231, -154,127, 92, 87,159, 76, 8,161,158,147,147, 15,144, 87,127,249,220,168,158,232, 94, 35,122,138, 0,220, 95,182,108, 89,217,178, -101,203,106, 31,187, 11,160, 93,245,121, 69,117, 8, 37,125,245,111,125, 29,231,232, 77, 57,247, 79, 17, 88,129,205, 48, 21, 4, - 11, 65,129, 0, 88, 20,159,131,245,141,186,190, 37,250,202,132,130,205, 32, 16,104,141,236, 76,194,226, 82,157, 5, 41, 64,119, -153, 72,176, 26, 20, 56, 45,195, 78,140, 79,193,121, 83,239, 17,228,139, 1, 66,138,222,201,113, 68,196,114,100, 7, 56, 28,183, - 52,226,202,239, 10,104, 27,147, 86, 79, 79,231,208, 35,231,243, 94,185,184,119, 58, 58,181,247, 5,225,140, 0, 97, 96, 30,240, - 25, 34,126,121, 27,157,218,120, 62, 58,198, 25, 97, 25,178, 26, 3,187,218,144,251,105, 77,219,159,186, 91, 55, 87,123, 51,142, -187,183,126,203, 78, 87, 79,223,151, 41,194,233,144,124,231,212, 91, 31,205,154,215,171, 79, 71,121, 91, 0, 13,238,241,216,214, - 23,239,122,122,250,127, 54, 99,222, 26,218,221,189,153, 37,199,232,153,188,236,248, 14,223,175, 89,112, 80, 76,103,174,190,151, -140,205,166,182,227, 64, 47, 76, 22,138, 36, 35,205,204, 45,124,213,106,101, 50,107, 52,254, 74, 11,132, 3, 86,174, 88,219,190, - 71,175,129,150,156, 46,159, 54, 50, 84,224,190,253,123,154,255,240,211,250,240,216, 84,246, 85, 0, 92,163, 50,205,226,227,251, - 71,223, 27, 33, 18, 10,168,128, 65,155, 44, 0,166,127,163, 57, 0, 4,121, 33,136, 52, 28, 9, 29, 20,240, 99, 92, 58,226,154, - 82, 63, 1, 94,216, 66, 1,126, 0, 14, 80, 4,123,227, 51, 80,200,119,119, 60,120,252,187, 32,151,203, 47, 42, 20,138, 94, 47, -152,179,147, 66,161,184,198,151,238,139, 19, 89,117, 28,190, 94,199,177, 27,127,135,244, 54,214,130,245, 85, 92,114,182, 29, 56, - 3,130,252,124,150, 0,141, 19, 88, 50,161, 96,199,141,123, 5,174, 32, 6,108, 90,243,254, 62,189, 17, 96, 24, 3, 88,198, 8, -150, 49, 62,250,206, 26,193, 49, 90, 44,248, 54, 18, 96,148, 8,109,223,106, 7,192,186,153,122, 15, 17,232,157,183,174,156,181, -167,152, 10,236,219,190,236,195,204,220,170, 15,207, 95,207, 45, 14, 20,105,230,198,103, 96, 91, 99, 6,241,139,123, 63,194,174, -131, 39,115,214,109,218,159,200,129,192,206, 82,234, 63,118,120,156,199, 47, 7, 47,102,175,221,170, 77, 36, 28,129,173,149,212, -127,220,171,201,158,207, 83, 9, 2, 77,213,183, 63,109,218,230,234,217,188, 57,101, 76,255, 10, 48,234,224,225, 25, 46,152, 55, -227, 93,183, 69, 43,126, 92, 3, 96, 92,189,214, 32,111, 4,182,240,105, 61,115,199,190,171,158,170,170, 66,253,133, 19,159,167, - 80,132, 24, 29, 29, 3,196,139,191, 90,101,246,197,220, 25,159,232,217,156,107, 15,210, 16,223, 64, 82,232,214, 94, 56,250,245, -215, 43,219,246,233, 55,196,146,213, 23, 9,180, 85, 74,191,205,219,182, 44, 12, 8,234,104,222, 53,164,153,184,232,202, 20, 74, -173, 44,133,129,152, 73,123,135,246,177, 86,143, 29,101,220,242,203,158,105,241,105,248,174, 81,250,138,249, 95,172, 17, 3, 3, - 25, 0, 17,154, 48,129,144, 0, 31,220,137,185, 56,153, 41,187, 1,112,134,106,209,107, 0, 56, 35, 72,173,191, 47,189,185, 13, - 0,166, 52,165,126,104, 10,175,156, 63,127,195,173,160, 32, 47,236,219,111,191,158, 75,168, 27,167, 64, 97,103, 66, 26,162,154, - 34, 10,121,240,224,241,247,132,187,187, 59,155,155,155, 43,120,145,156,114,185, 60, 92,161, 80,156,124, 30, 14, 55, 55,183,207, - 0,188, 91,253,115,115, 94, 94,222,202,231, 77, 87,104,104,104, 51, 66,136,107,181,112,201,191,121,243,102, 14,223, 2,254,127, - 5,150, 12,132, 3,174, 12, 5,168,198, 45, 87,172, 30, 12,101,160, 4,128,177, 10,175, 13,238, 11, 71, 7, 55,128, 85, 1,172, - 6, 96,212, 0,251,232, 83, 92,148, 9, 48, 42,160,232, 20, 24, 66,164,141,206,149,177, 2, 40,252, 21,175,188,236, 9, 91, 43, - 25, 62,122, 35,208,113,227,145,164,205,155,143, 60,232, 27,159,134,209, 38,165,149, 16,116, 10,241,197,186, 77,170,196, 99,145, - 69,253, 1, 32,188,135,195,233, 78,109,154,123,172,221,170, 77, 60,121,169,108, 0, 0, 12,232, 98,125,170, 99,176,171, 39,247, - 28,219,159,176, 28,219,213,179,101, 8,197,100,173, 0, 77,151,161,170,170, 24,217,169,219,225,232,210,159,102, 56,174,123, 67, -215,155, 9, 49,231,163,207,150, 11, 85, 85, 5,122,194, 20,114, 46,150,197, 98, 17, 40, 1,167,186,172,215,228,151, 87,125,252, -193, 88,102,230,156,175,231, 0, 24, 83, 31, 79,160, 55,166,173, 94,177,182, 77,151,142,254,206,249,209, 31, 81, 85, 21, 5, 48, - 18, 51,233,171, 61,186,192,174,121, 32, 87,112,103, 53, 37,117,235, 11, 59, 47, 31,228,220,223,133,204,123,135,168,110, 29,135, - 75,119,236, 22,143, 5, 12,117, 10, 44, 95, 87,116,237,255, 74,199,125, 62,205,221,221, 8,225,192,113, 28, 8,225,160,213,179, -152,251, 67, 10, 84, 26, 6,131,251,190,212,197,193, 70,160,163, 1, 16,194, 33, 59,183, 68,125,225,106, 98,159,212, 92, 52,248, -230, 71, 1, 63,182,123,185, 87,215,123,215, 99, 2, 12,185,199, 17, 54,108, 89, 34,133,255,185, 27, 9,208,245,118,196,182, 0, - 96, 91,147, 95,154, 8, 1,155,245,251,114, 52, 11,121, 79,176, 97,219,105,167,138, 18,197,184, 67,251,127, 26,241,211,198, 13, -187, 18,211,154, 38,218,120,240,224,241,247, 67,110,110,238, 11, 23, 89, 87,175, 94,205,125, 30,145, 21, 26, 26,218, 61, 55, 55, -119, 69,110,110,110,141, 8, 92,209,177, 99,199,249, 53,227,212, 83,168, 32,132,140,185,121,243,230,165,250, 56,103,204,152,225, -126,229,202, 21,175,155, 55,111, 2, 0,194,194,194,188, 66, 67, 67,189,234, 58,215,220,220,156,109,215,174, 93,198,183,223,126, -155,203,183,144, 63, 87, 96, 37,230, 95,254, 56, 68, 95,170, 6,128, 68, 19,206,127, 98,169,165,214,200, 46,223,190,118,220,242, - 32, 63, 59, 84, 42,245, 56,119, 57,163,218,130,197,128,101,141,143,255,246,127,217, 17,157,153, 41,248,110,239, 3, 48, 44,183, -172, 62,206,167, 97,224,184, 55,219,119, 31,181,159, 35, 68, 98,110, 78, 87,180,244,112,112,158, 57,182, 29,253,209, 27, 65,208, -104,153, 81,187, 79,165, 92, 72,200,192, 38,147, 56, 57,166, 14,225, 85,199, 49,142,109, 48,239,207, 66, 59,127,179, 78,195, 6, -118,179,134,177, 20,172, 42, 29,122,150, 67, 94,158, 10,105,185, 98,216,112, 5, 38,113,114, 28,218,186,186,186,153, 95, 61, 59, - 59,221,217,170, 76,236, 96,198,138,197, 20, 71,104, 35, 17,232,245,137, 90, 59,247,190, 34,142, 67,219,134,234,200,204,204,234, -237,110,189, 6,217,100, 69,188, 75,153,121, 12,132,179,119, 51,164,223,218,142,194,216,227, 40, 41,204,164,108, 72, 25,204, 91, -249, 96,224,240, 55,176, 98, 90, 40, 42, 43,171, 64, 21,165,218, 72, 36, 82, 91,192, 80, 39, 39,161, 49,102,245, 55, 75,221,132, - 66,250, 81,121, 18, 6, 32, 70,128, 24,161,172,210, 65,175,215, 67, 38, 38,176,144, 17,160,218, 13,203,178,122,243,182,125,230, -188, 15,176,215, 26,202,123, 92, 58,226, 2,189, 16, 13,194, 4, 16, 86, 3, 10,136,142, 79,255,159,232, 9,242, 66, 80,135, 62, - 19, 62,160,128, 31,155, 82, 71,193, 45, 48, 56, 52,192,210,194,140, 73, 68, 78,228,135, 72, 97,101,196,165,205,187,120, 99,204, - 52,243, 13,155, 55, 14, 1,200, 84, 60, 57, 7,237,207, 88, 94,204,115,242,156,255, 72, 78,107,107,107,239, 22, 45, 90,204, 55, - 26,141,221,197, 98,177,139,193, 96, 0,199,113,249, 18,137,228,114, 70, 70,198,226,202,202,202,180,191, 91,222, 79,157, 58,213, - 24,145,213, 32,167, 72, 36,194,201,147, 39,147, 27, 33,178,158,224,164,105,122,231,129, 3, 7,176,127,255,126, 0,192,197,139, - 23,209,170, 85, 43,139,186, 46,204,206,206,182,120,253,245,215,119, 2,240,168,143,243,225,195,135,222, 75,151, 46,197,129, 3, - 7, 0, 0,191,252,242, 11,252,252,252,234, 76,204,221,187,119, 5, 95,124,241,133, 55,128,220,191,160,142,254,181, 2,139,160, -225,173, 85, 82, 93,173, 68, 33, 48, 26, 1, 32,181,177, 55, 75, 72,197, 55,235,182,156, 30, 16,113,232,199,238, 50, 9,141,133, -223,206,204, 46, 42, 82,190, 36, 20, 60,114,179, 48, 44,104, 59, 91, 73,204,178, 15,219,121,150, 85,104,241, 91,148,226, 82,124, - 26, 26,101, 10,141, 79,197, 57,128,179,173,182, 13, 65, 85, 89,232, 55,110,222,185,189,123,191, 25,208,118,198,152,182, 56, 26, -153, 49, 3, 96, 26,220,171,142,112, 28, 8, 97, 30, 79,106,175, 62, 88,237,114,250,223, 49,142, 16,128, 24, 65, 26, 57,207,123, -209,162,145,194,163,123, 15, 15,176,144, 10,191,159, 50,105,178,181,177, 36, 30, 21,229, 44,242,139, 85,200, 44,178, 5,107,214, - 18, 73,113,215, 88, 1, 77, 55, 56,255,140,162, 81, 73,140, 42, 43, 59, 51, 51, 58,176,227,251,110, 21,177,159, 87, 74, 5, 70, -129,109,251,165, 86, 5,247, 87,103, 49,186,194, 42,138,126, 82, 1,213,217, 25,218,216,180,210, 41, 51, 4, 21,229, 37,176,109, - 19,136,129,175, 14,193,194,137,173,161, 84,170, 80, 84,114,149,248, 54,183,161,180,183,119, 99,222,219, 1, 40, 41,206,131,222, - 8,208,149,218, 82,173, 94, 91,245,108, 75, 32, 54,124, 60,115,214,155,205,155, 57, 89,212, 44, 22, 32, 28,139,118,193, 62,232, -215,171, 19,206,197, 92,197,141,219, 73,224, 8, 87,189,152,128, 69, 78, 97,121,129,214,192,110,111,148,117,148, 99, 30, 89, 66, -235, 16, 96,104,130,107, 48, 56, 24,230,172, 10, 95,134,181,182,154, 56,251,237,230, 86, 86, 18, 10, 90, 51, 22, 90,173, 17,202, -196, 31,224,208,172, 13,204,101, 50, 42, 36, 68, 35,188,125, 27,252,190,130, 60,120,212,194,136, 17, 35,100, 5, 5, 5,145, 30, - 30, 30,129,125,251,246, 53,239,222,189, 59, 84, 42, 21,206,156, 57, 3,181, 90,221,220,195,195,163,249,217,179,103,135,103,102, -102,198,123,120,120,244, 60,112,224,128,182,177,247,168,153, 84,254,162, 39,135, 75, 36, 18,196,196,196,188, 80, 75,150, 68, 34, -193,245,235,215,147,155, 98,201, 82,169, 84, 98, 87, 87, 87, 56, 56, 56,128,101, 89,168, 84, 42, 28, 57,114, 4,149,149,149,224, - 56, 14,102,102,102, 88,125,170, 2,218, 7, 7,176,249,251,165,168,168,168, 16, 55,196, 89, 92, 92, 76,249,251,251, 67,167,211, -129, 97, 24,104,181, 90,156, 63,127,254,241,111,161, 80,136, 37, 7, 10,160, 75,218,139, 29, 27, 86,163,184,184,152,250, 11,155, -143, 41, 90,228, 31, 37,176,106, 50,244,167,103,140,101,153,185, 27,183,239,141,153,251,225,104, 76,123,187,143,199,226,239, 14, -247, 77, 72,195, 14, 0,104,237,141,113, 99,195,125, 61,109, 45, 68, 88,244,243, 77, 0,100,238,243,222, 47, 46, 19, 73,129, 62, -220,140,195,145,153,145,159, 79, 12,129,143,135,117,171, 50, 67,169, 36, 53,213,132,249, 62,156, 17,118,150, 82,255,240, 30, 14, -167, 65, 56,216, 90, 74, 3, 64, 88,216, 90, 73,253, 7,116,177, 62,197, 17, 2, 91, 11,113, 0,225, 76, 15,206,221, 49, 88, 58, -201, 76, 68, 79,178,176,178,245,252,120,202, 88,179, 65,131, 94, 55,179,144, 16,148,196,159, 68, 37, 9,130,222,194, 2, 68, 93, -142,180,135,177,236,169,168,155, 10,169,131,219,167, 64,122,253,201,100,113, 41, 55, 59, 97, 88, 11,223,190,182, 69, 55,231, 21, -122,247,217,237, 69,131,165, 85, 49,195, 11, 45,172, 2,197,209,119, 99, 25,142,197,213,134,210,166,172,172,204, 48, 26,224,166, - 53,138,172, 82,174,111,195,156,177, 65, 40, 47, 43,130, 86,199,160, 92,197, 24,220, 28, 13, 82,109,217,125,232,244, 12,116, 6, - 2,145,185, 59,206,198,196, 22,115,140,241,212, 51, 21,121, 30,238,164,238,186, 99, 89,251,152,143, 27,218,205,182, 51,187, 3, - 86,131,204,172, 92,236, 56, 24, 19,146,154,135, 59,207,247, 72, 50, 32,204,255,250,232,154,201,239, 77,153,220, 30,208, 28, 29, -197,140,232,251, 69,115, 6, 5,246, 12, 98,165,148, 54, 15, 20, 0,115,153, 16, 58, 25, 11, 27,153, 15,136, 65, 73,212, 90,109, -121, 92, 44,248,200,236, 60,120,212,130,191,191,191,171, 66,161,136,155, 57,115,166,253,176, 97,195, 30,139,129,237,219,183, 99, -237,218,181, 88,184,112, 33,140, 70, 35, 54,110,220,104,126,240,224,193,142, 63,254,248, 99,142,167,167,103, 80, 86, 86, 86,190, -137,162, 74, 92, 61,118, 61,154, 85, 64, 8,187,104,209, 34,178,112,225, 66,212, 28, 3,192, 2, 13,191, 84, 62, 75, 12, 73, 36, - 18, 36, 38, 38,190, 16,145, 37, 18,137, 32, 22,139, 33,145, 72,240,224,193,131, 70,139, 44,134, 97, 4, 57, 57, 57,168,172,172, - 68,191, 33, 67,176,118,249,114,116,239,222, 29,125,251,246, 5, 33, 4, 17, 17, 17,232,108,151, 4,251, 33, 61,144,144,144, 0, -163,209,104,146,103, 42, 39, 39, 7, 37, 37, 37, 24, 48,100, 8, 54,253,244, 19, 58,116,232, 0,127,127,127, 0, 64,100,100, 36, -250,200, 51, 96,233,223, 23, 73, 73, 73,127,101,243,249,203,180,200, 95,109,193,250, 75, 16,151,138,223,185,195, 81,199,223, 24, - 20, 54,120, 72,239, 64,108,218,123, 97, 41,164,149,123, 1,192, 65, 42,253,234,237, 65, 62,136, 79, 45, 67,196,245,220,227, 9, -233,248,253, 69,220,147, 99,225,232, 96,107, 14,208, 18,168,245, 44, 99,109,221,240,196,100, 14, 4,230,173,231, 96,236,176, 4, -143, 78,109, 60, 60, 8, 97,170, 87, 12,174,193,184, 87,147, 61,195,130, 92, 60, 31,185,188,140,176,238,188, 27,224, 44, 26, 76, - 71,183,246,178,179,159, 78,255,240,229, 65, 67,222, 48, 19,155, 59,128,211,100,195, 88,122, 15, 37,105, 23,161, 51,107,143,162, -156,116,236, 61,250, 91, 69, 98, 90, 65,165, 64, 64,159, 19,218,184,204, 58,127, 62,173,138,162,234,111,103, 90, 1,150, 45,156, - 63,119,208,222, 93,123,108,204,220,187,225,225,209,240,114,137,192, 40,117,150,251, 65,195, 88,177,171,182, 30,183, 85, 1,203, - 27, 74,159, 90, 85,121,232,124,196,233,209,190,110, 93,173,210, 99,143, 67,173,214, 67,103, 4,130, 59,244, 2,203, 17, 9, 69, - 83,156,181, 64, 64, 21, 20,148,130, 50,114, 5,151,111,167,231, 69,223, 72, 21,232,232,134,185,159,104,116, 98,193,244, 33,125, -219, 1,172, 6,175,246, 11,198,183, 91, 35, 62, 4,216, 9,207,247, 88, 26, 65, 88, 13, 8,208, 53,208, 11, 63,115, 64,215, 91, -167,190, 13, 8, 29, 56, 3,141,177, 96, 5,121, 97, 96,160,159,251,182,111,151,206,181,183,119,246, 16,128,213,128, 98, 42, 9, - 87,250, 59,132,170,135,176,110, 54, 8,172, 77, 23,108,248,105, 85, 21,199,145,189,104, 66,136, 10, 30, 60,254,205,208,106,181, -135,150, 47, 95,110, 63,120,240,163,213,238, 85, 85, 85,184,122,245, 42, 54,111,222, 12, 11, 11,139,218, 98, 9,225,225,225, 32, -132,216, 47, 88,176,224, 16,128,151,159,197,217,185,115,231, 33,107,214,172,201, 2,240, 16,143, 98, 28,137,241,104,131,121,114, -254,252,121, 26, 0, 58,118,236,200, 94,191,126,157, 3, 64,198,140, 25, 35, 58,122,244,104, 43,149, 74, 21,213, 84,129, 37,145, - 72,160, 80, 40,158, 91,100,137, 68,162,199,124, 98,177, 24, 10,133,162, 81, 34,139, 97, 24,225,137, 19, 39,112,251,246,109, 44, - 10, 9,193, 71,110,110,112,112,112, 64, 84, 84, 20, 8, 33,176,176,176, 64,105,105, 41,246,238,221,139, 94,189,122,129, 97, 24, -177, 41,188, 71,142, 28,193,173, 91,183,176, 36, 52, 20, 31, 90, 88,192,214,214, 22,145,145,145, 0, 0,169, 84, 10,133, 66,129, -243,231,207,163,103,207,158,124,163,254,179, 5, 86, 15, 64, 88, 74,193,213,104,208,128, 48, 4,160,224,222,186, 53,196, 9, 9, -141,127, 75,160,129,121,235,182, 30, 31,244,237,220, 87,169,247, 70,132,184, 47,254,241,226, 84, 0,152, 56,202, 79,110, 46, 21, - 98,221,222,120, 66, 3,243, 94, 68, 6, 91,183,134,152,210, 97,106,191, 46,254,200, 45,214, 35, 53,171,226, 66, 66,186,105, 46, -157,136, 29, 99,241,203,161,200,236,181,219,158, 92, 49,184,237,200,173,172,213, 59,180,137, 4, 4,182,102,162,128, 9,175,118, -110,112, 21, 97,199, 96,233,164,217, 51,102,188,252,218, 91,179,204,140, 57,135,161,203, 56, 1,176,106,168, 85, 20, 42, 25, 95, -228,101,229, 96,209,183,123,178,117, 70,250,205,155,241,218, 70, 9,203,135, 15, 81, 37,244,174, 28,182,252,155,249,231,190, 94, -180,192, 82,170,136,168, 20, 9,161,162, 29,186,139,190,154,191, 94,168,172,208,191,158,154, 5,101, 67, 60, 58, 26,203,191, 89, -253,221,160,119,199, 14, 75,244,243,232,233,192,230,167, 58,168, 43, 42, 10,119,159,186,229, 90,253, 54, 65, 1, 64, 74,122, 9, -138, 74, 85, 12,203, 24,163,172, 12, 88, 28,175, 48,125,245,159,183, 51,156, 6,247, 14,122,203,201, 86, 2,141,170, 12,206,118, - 98,244,239,218,242, 45,163, 54,105,118, 90, 97,227, 98,140, 60,161,175,170, 93,132, 49,155,123, 7,128, 51, 4, 16,206, 8,125, -230,206,166,188, 62,205,152, 49,186,185,141,189,133,158,166, 88, 21, 32,178, 3, 36, 78, 20,109,230, 5,129,153, 39, 50,146,111, - 50, 51,222, 31, 93,146,145,145,191,197,145, 96, 37,223,133,240,224,241, 36, 50, 51, 51,223,254,252,243,207,163, 59,117,234,228, -226,232,232,136,224,224, 96, 28, 59,118, 12,159,126,250,233,227,115,218,183,111, 15, 0, 40, 41, 41,193, 55,223,124,147,159,155, -155,251,118,189, 47,230,113,113,137, 59,119,238,236,218,182,109, 91,189, 88, 44, 46,171, 17, 89,153,153,153, 66,149, 74, 69,233, -245,122, 98, 97, 97,193, 73,165, 82,227,200,145, 35, 13,215,175, 95,111,165, 82,169, 50,159,199,130, 21, 26, 26,122,191,188,188, -188,130,162,168,231, 14,225, 80, 35,174, 2, 2, 2,156,244,122, 61, 11,160,180, 41, 33, 28, 24,134, 65,104,104, 40,206, 95,186, -137, 83,151,238,163,170, 40, 21, 99, 94,239,143,128,128, 0,156, 57,115,166,201,117, 22, 26, 26,138,243,231,163, 17,121,243, 1, - 10, 50,227, 49,246,141,161,240,247,247,199,249,243,231,249, 6,253, 2, 4, 86,189, 38,185, 0, 79,180,163,173, 37,191,204,123, -181,101,160, 48,120, 33, 40,161, 25, 14,111, 59,214,101,238,215, 63, 39, 10, 42,178,198,196,154,176,218,235,137,135, 37, 29,113, - 4, 15,246,220,141, 15,120,235,213,238, 30,216,244,171,249,151, 0, 48,170,159, 55,174,199, 23,225, 90,108,225,158,248, 38,198, - 44,170,141, 96,103,152,179, 58,236,249,102,214,107, 61,155, 55,115,197,230,253,209,160, 8, 14,153, 52,208, 18, 66, 58,181,245, -196,218,109, 79,175, 24,116,243, 92,189, 67,155,120,246,170,114, 32, 0,244,123,201,252, 84, 88,107,123, 79, 66,234, 95, 70, 40, - 19,209,239, 13,124,245,109, 51,166,224, 12,184,210, 95, 33,146,136,161, 81,177,200, 43,212, 65, 99,110,134, 11,151,163, 52, 85, -106,102,198,189,100,166, 73, 86,187,132, 52,164,138,133,183,179, 84, 26,141,155,165,125, 75, 21, 77,129, 84,233, 69,228, 86,188, - 66, 21,159,133, 7,166,112,164,166, 66,255,146,156,233,182, 97,199,175,243, 69, 34,201, 40,129, 0,148,179,173,133,211,207,235, -150,192,202,202, 18,132, 81,130,232,138, 49,108,226,215, 69,177,201, 70,111, 0,104,213, 10,150,221,218,138,118, 8,105, 42,231, -226, 29,195, 23, 13,221,131, 18, 96,202,152, 87,219,137, 56,163, 10,211, 23,236,195,134,175, 94,197,216, 33,173, 69, 39, 46, 36, - 77, 1,176,184,233,102,202, 71, 46,194,151,223,187,148, 72, 1,209, 4,232,122,243,248, 87, 1,104,132,231, 49, 36, 4, 34,182, -138,106,221, 90,174, 23,177, 57,123, 65,201,228, 68,224,216, 19,176,104, 69, 17,203, 96,252,176,110,126,213,166,205,155,207,114, - 20, 22, 61,200,104, 48,228, 5, 15, 30,255, 85,164,230,230,230, 14, 8, 15, 15,143, 56,115,230,140,125,112,240,163, 29, 85,110, -221,186, 5, 0,143, 93, 81, 5, 5, 5,120,243,205, 55,139,243,242,242, 6,160,129, 57,189, 74,165, 50,237,240,225,195, 46, 26, -141, 38,236,139, 47,190, 40,104,209,162,133,210,104, 52, 18,165, 82, 9,134, 97,136,147,147,147,168, 67,135, 14, 84, 80, 80,144, - 38, 34, 34,194, 33, 59, 59, 91, 9, 32,163, 41,137,127,247,221,119,113,240,224, 65, 0,192,139,136,139, 37, 22,139, 17, 30, 30, - 46,191,122,245,170,162,154,179,201,113,177, 8, 33,184,119,239, 30, 46, 39,179,144, 88,216, 33, 35,177, 18,231,127, 59,138, 49, -239, 77, 6,195, 52,125,182,194,221,187,119,177,247,252, 93,184,200, 91,162, 66,119, 15, 71,142, 28,193,212,169, 83,159,139,179, -137,248,215,184, 7,159,182, 96,253, 33, 67, 62, 62,144, 72,245, 88,208,175,163,124,214,200, 62, 45, 5,140, 58, 23, 28,199, 65, - 0,192,209,138,198,214, 77, 27,188,127, 61,124, 50,230,251,239,126,252, 14,122,110, 94,108, 33,212,141, 48, 99, 45, 88,179,253, -202,168,157, 75,122, 8,167,142, 8,176, 7, 0,177,136,198,186, 61,113, 12,104, 44,120,158, 76,189, 36,135,172, 74,140,247,156, -157,109,190,156,251,254, 32,251,158,157,252, 16, 21, 19,139,239,118,197, 92,146,216,225, 23, 83, 31, 59,194, 49, 79, 76,104,127, -116,172, 14,227, 23,105,184, 17,178, 28,113,149,152, 59, 66,155,113, 18, 66,137, 20, 12, 99, 64, 81,129, 26,233,249, 28,100,238, - 34, 92,191,151,169, 25,250,214,176, 19,207,211, 48, 45,204,101,238, 11,190, 90,213, 76,163, 81, 50,149,229,197,140, 80, 28, 35, - 52, 55,147,230, 63,218, 57,192, 52,252,174,128,182,123, 59, 81, 7, 16, 78, 32, 21, 16,245,220, 25,227, 45, 20, 73,103,224,235, -148, 11, 10, 4,102,238,131, 96,101, 33, 16,119,109, 43,202, 2, 0, 11,115,115,201, 55,139, 63,181,249,120,246,162,203,166, 88, - 19,253,156, 93, 63, 14,246,181, 71,212,181, 4, 92,186,145, 25,119,233,247,164,160, 94, 29,221,225,231,109,251,145,196,182,124, -121, 83, 44,162,143,234,224,145,139,176,102, 21, 97,144, 23,130,194, 6,127,241,172,213,131,117,194,235, 54,184, 36,111, 2,138, - 18,128,128, 2,180, 10, 48,217, 59, 33,240,254,144, 28, 58,250,149,102,243,166,205, 75, 18, 50,120,171, 21, 15, 30, 13,161,162, -162,226, 94, 98, 98, 98,255,118,237,218,109,159, 62,125,186,213, 91,111,189,229,254,238,187,239,210, 0, 80, 80, 80,192,173, 93, -187, 54,247,251,239,191,175, 40, 46, 46,158, 96, 52, 26,239,155,242,132,231,229,229, 93,221,186,117,107, 81,116,116,116,208, 75, - 47,189,100, 30, 22, 22,198, 57, 59, 59,139,213,106, 53,155,157,157,173,137,137,137, 97,147,147,147,109,202,203,203,147, 1,164, -160, 9,238,123,119,119,119,208, 52,189,216,195,195, 99,190, 66,161,104,243, 34,230, 96,249,250,250,186, 3, 72,150,203,229,190, -141,117, 15,254, 97,192, 22, 10, 81, 86, 86, 6,101, 78, 10,212, 37,197,240, 23,168,209,222,222, 17, 86, 86, 86,207, 37,134, 42, - 42, 42, 32,212, 21, 32,245, 94, 38,202,243, 51, 16,216, 60, 20, 22, 22, 22,208,233,116,255, 31,205,135,250,183, 60, 7,207,116, - 17, 6, 54,195, 84, 51, 96,237,248,145,222, 98,239,230,205,160, 47,186,133, 59, 41, 85,248, 98, 75,199,120,129,216, 74, 55,109, - 92,191, 14,189,250, 58,161, 71,207,142, 84,139,230,182, 31, 45, 95,190,254,131, 64, 73,241,167,241,217, 88,103,202,141,227, 83, -145,198,113,133,155, 47,222, 80, 76,105,230,164, 1, 1,193,197,155,121,184,159, 82,182, 57, 49, 29,105,141,201, 68, 96, 75,244, - 21, 82,244, 62,194, 18,153,141,149,133, 50, 48,160,153, 99,223,174,109,233, 1,189,194, 32, 22, 2,209,215,238, 98,198, 87,135, -126,231, 36,100,144,201, 43,190, 8,247, 7,225,244,104,197, 32,243,196,138, 65, 66, 8, 1,199,128,144,250,167,117, 9,104, 42, - 95, 85,112,211, 85, 98, 21, 8, 67,201, 5, 20, 20, 84, 33, 46,213,128, 42,120,160, 44, 39, 7,132,176, 89, 11, 22,252,218,228, - 39,196,209,209,209,217,187,149, 95,203,239, 55, 29,128, 65, 87,129,212,248,109,168,170,204,199, 87,203,126,107, 41,151, 59,244, - 80, 40, 20, 81,166,183,110,202, 47,226,194, 30,103, 16, 64, 32,148,226,196,198,253, 40, 22,154,193,209, 70, 12, 78, 91,136,247, - 38,141,177, 9, 31, 52,198, 6, 0,178, 82,238,194,211,222, 52, 93,109, 40,199,240, 81, 19,252,109,193,170,241,203,145,187, 90, -154,194,128, 95,126,139, 75,233,213,193, 86, 54,170, 95,115,187,197, 27,202, 95, 7,176,167, 73,250,138, 99,159, 88, 69,216,148, -213,131, 7, 0, 54,128, 32,101,207,249, 34,203,145,225, 33,102, 98, 33, 69, 17,173, 2, 28, 37,166,214,253,184, 85, 41,161,176, -145, 31, 58,121,240, 48, 13, 26,141,230,150, 70,163,105,243,217,103,159,189,249,249,231,159,119,183,176,176,240, 6, 0,149, 74, -149,102, 52, 26, 47, 85, 63,235,108, 99, 30,115, 0,201, 41, 41, 41,105, 41, 41, 41, 46,191,252,242,139, 45, 0, 89,245,255,180, - 0,202, 1, 20, 52,146,243, 9,212,136, 41,119,119,247,249, 47,170, 28,106,196,148, 92, 46,247,109,202,245, 2,129,128,165,233, - 71, 59,251, 72,165, 82, 92,190,124, 25, 3,187,118,195,221,243,153, 8,112,241, 64,175, 49,227,113,228,226, 69, 8, 4,130,154, -243, 27, 53,142, 8,133, 66, 68, 71, 71, 99,196,224,158, 56,114,228, 8,124, 66,219,225,195, 15, 63,196,233,211,167, 33, 20,242, -187,233,253, 41, 2, 11, 4,139,207,237,251, 90, 12,206,136, 3,187, 87,224,220, 13,181,254,129, 2,243,252,115,176,246, 0,148, - 92, 97,241,193, 41, 39, 34, 83, 87,190, 51, 97,176,121,239, 30,253,208,187,123, 47, 97, 80,187, 30, 95, 2, 79, 8,172, 96,212, - 19, 43,131, 53, 98,201,198,131,137,147,247,157, 76,162,192, 40, 49,250,213, 48,194, 26,177,164,129, 52,255,129,211,198,220,114, - 95,244,229, 24, 59,176, 85,200, 79,191, 40,115,117,241, 6,136, 17, 15, 31, 38,225,135,173, 71,184,200,152, 7, 59,245, 2, 76, - 79, 77,128,202, 84,206, 71,138,138,129,141,165,228, 15, 43, 6,109,205, 68, 1,253, 94, 50, 63, 69, 8, 33, 86,230,162, 0, 82, -183, 5,235, 9, 78,173,145,219,184,115,199,166, 85, 19, 39,190,107, 81,162, 83, 32, 41, 59, 14, 90,129, 28, 2,243,150,136,187, -121, 70,163, 49,114,155, 76,168,175,103,150,103,113,113,113,225,173,155,165,216,183,125, 25,140, 70, 29, 10,243, 30,105,212,188, -130, 74, 88, 91,203, 99, 20, 10,133,201,156, 6,134,171, 24, 62,236, 61,177,153, 12,102, 99, 70, 13,146,164,228,234, 16,226,111, -245,168, 89, 24,138,145, 24,121, 25,189,156, 31, 77,134, 76, 73, 20,192,243, 37,119,147,210,105,101, 37,158, 62,176,155, 28,105, -153,249,184,124, 75,177, 35, 45, 23,185, 44,201,219,145,146,245,127,236,157,119,120, 20, 85,219,198,239,153,217,154, 77,239,187, -155,102, 8, 33, 36,212,132, 78,130,116, 8, 77, 64, 64, 64, 4, 65, 69, 41, 98, 65,165, 55, 1, 1, 17, 68,138, 8,136,136, 32, - 2, 82, 69,164,247, 30, 18, 2,132,144, 16, 18, 18, 82, 54,189,111,157,157,242,253,145,242, 6, 76,217, 4, 62,124,229,157,223, -117,237,181,217,157,201,189,115,230,204,204,185,207,115, 90,225, 7,131,187,123,227,219, 29,247, 62, 4,204,187,234,147,246,230, -190,104,206, 1, 97,224,205,224, 25, 3,120, 32,172,185, 47,154, 91, 56,114,240,111,154, 34, 18,111,174,222,157, 60,247,247,115, - 57,131,191,120,183,139, 93,104,167,126, 82,112,102,190, 68,103, 52,199, 62, 66,241,179,228,209, 51, 32,104, 10,154,255, 86, 77, - 22,192, 14,179,217,188,163,176,176,240,121,106,102,224,239,243, 50, 61, 83,218,171, 54, 7,102,100,100, 80,106,181,154,181,160, -147,123, 93,154,215,171, 26,173,242,232, 85, 93, 81,172,167, 53, 51, 58,116,232,224, 52,104,208, 32, 48, 12,131,132,132, 4,164, -164,164, 96,208,132,241,112,116,116,196,245,123,247,144,144,144,128,249,243,231,131, 97, 24,220,184,113, 35,173, 46, 77,177, 88, - 76,183,110,221, 90, 50,100,200, 16, 48, 12,131,196,196, 68, 36, 39, 39,227,195, 15, 63,132,189,189, 61,238,221,187,135,196,196, - 68,204,159, 63, 31, 70,163, 17, 73, 73, 73,244, 11,186,150,254, 71, 12, 22, 1, 22,156, 25, 69, 17, 11,240,195, 17,208, 52,131, -192,123,105,120, 84,209,241,228, 94, 26, 54, 82,252,237, 63,110,199,220, 79,138,188,222, 67,138,226, 59,168,111,205,225, 65, 26, - 52,182,138,146, 18, 48, 37,118,200,249, 11,143,210, 75, 74, 31,164, 65,211,128,232, 5, 1, 86, 7, 20,221,196,193, 35,231, 32, -147,223, 66, 68,212,125,246, 74,100,252,110,146,199,226,216,100, 60,168,191, 38, 15,155, 54,107,240,246,107, 15,203, 70, 12,242, -102,240, 28, 3,251,208, 93, 24,255, 90,103,239,118,129, 14,222,224,204,224,121, 51, 28,123,158, 5,230,202,107,213,187,113,215, -184,165, 75,176,124, 88, 73,113,110,135,222,221,187, 89,187, 6,188,129,162, 7,247, 16, 19,117, 82,127,243, 78,252,213, 27,119, -141, 91,158, 37, 35, 61, 60, 60, 94,237,217,179, 41, 70,190, 61, 11,180,177, 16,137, 49, 63,161,164, 56, 19, 23, 47,219,224,254, -227,226, 78, 0, 44,142, 96, 93,141, 97,154, 3, 5, 8,109, 33,126,108, 39, 53, 41,199, 14, 31, 8,153,200, 0,206, 92, 2,130, -206,197,195,124,186,104,216,130, 52, 22, 0, 20,114, 66,100, 45, 42,178,179, 40,210,232,231,220, 68, 33, 49,227,151, 67, 49,224, -136,178,101,150, 56, 2, 27,127,249,227,225, 7,139,167,134,160,153,159, 99,235, 91, 9,217, 21,109,240,150, 86,105,167,220, 60, -188, 40,208, 16, 51, 15, 60,103,198,165,149,142,129, 93, 62, 47,152,130, 6, 46,139,115, 55, 17,233, 0, 62, 0,171,219,244,209, -210, 99,243,218,182,184, 23, 54,253,131,193,118, 32,132,133,209, 5, 4, 4, 94, 60, 58,157,238,253, 25, 51,102,108,162, 40,202, - 21, 0,193,243, 60,140, 70,163,232,199, 31,127, 20, 51, 12, 67, 82, 20,197,202,229,114, 38, 50, 50,210,204,113, 92, 14, 77,211, -239,215,165,105, 50,153, 30,174, 95,191,190,177,217,108,174, 28,113,104, 52, 26,177, 99,199, 14, 24,141, 70,200,100, 50,216,216, -216, 32, 49, 49, 17, 4, 65,208, 44,203, 62, 20,114,226,121, 26, 44, 96, 81,232,235, 11, 22,128, 7, 1, 2, 11,239,165,253,125, - 50,166, 59,233,200,104,230, 73,127,210, 60,184,235,130,114, 83,182,168,190, 7, 96, 96,217,225,237,218, 4,252, 6, 0, 70,142, -125,171, 33,137, 40, 54,232,223, 8,110,223,105, 55,199,243, 34,134,229,127, 36, 73,236, 51, 0,177,137,143,234, 30, 57, 87, 19, - 25,154,194,200,126, 97,246,124,197, 18, 56,149,205,130,229,211, 49,240, 60,207, 87, 54, 11,206,149, 35, 55,207, 88,103,111,234, -139,183, 12,125,218,183,144,189,119,252,124,212, 68,150,227,149, 20, 73,100, 26,204,220,230,103, 53, 87,229,181,163,243,167, 78, -165,159,184, 29,230,222,199,165,124,154,213,220, 66, 32,183, 8, 39,210,211, 75,207, 55, 68,179, 64,111, 30, 60,123,229,161,195, - 82, 17, 37, 2,120,112, 92, 89,122, 13, 52,155, 95,102,194,128,150,254, 80,127,254, 35,243, 27, 69, 17, 41,117,233, 93,191,163, -249,118,228,231,167, 62,139, 73, 40,248, 49, 57,189,172,230,147,156,142,187,123,142, 63,154,247, 48,181,228,179,187, 9, 5,223, -160,158,253, 38, 8, 96, 67,187,215, 22,252,237,187,103, 61,159,247, 31, 35, 26,192, 80,240,105,189, 71, 78, 90, 55,157, 32, 32, - 44, 19, 33, 32,240, 63, 68, 69, 20,139, 36,201, 47,159,151,102, 69, 20, 11, 64, 66, 61,142,227, 58,128,150,207, 51,109, 81, 81, - 81,121, 0,242,132, 92,254,119,211, 66,208, 4,120,158, 39,159,229, 85,223,227,244,247,247,231,235, 97, 84,132, 60, 18, 52, 5, - 77, 65, 83,120, 38, 63,227, 51,153,231,121,226, 89, 94, 66, 30,189,124, 8,205, 30, 47, 0,130, 32,184, 23,249,123, 9, 9, 9, -132,112,214, 5, 4, 4, 4, 94,220, 51,249,121, 47,217, 35,240,239,135, 20, 78,129,128,128,128,128,128,128,128,192,115, 54,221, -168, 57,204, 87,159,209, 1, 13, 9, 21,222, 21, 52, 5, 77, 65, 83,208, 20, 52, 5, 77, 65,243,127, 78,179, 46,109, 97,116,226, -255,147,241, 18, 52, 5, 77, 65, 83,208, 20, 52, 5, 77, 65,243,127, 79,243,165, 66,104, 34, 20, 16, 16, 16, 16, 16, 16, 16, 16, - 12,150,128,128,128,128,128, 25, 33, 81,140, 0, 0, 32, 0, 73, 68, 65, 84,128,128,128, 96,176, 4, 4, 4, 4, 4, 4, 4, 4, - 4,131, 37, 32, 32, 32, 32, 32, 32, 32, 32, 32, 24, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129,151, -157,138,165, 85,186, 10,167, 66, 64, 64, 64, 64, 64, 64, 64,240, 34,207, 47, 81, 85,223, 5, 4, 4, 4, 4, 4, 4, 4, 4, 47, - 34,184, 70, 1, 1, 1, 1, 1, 1, 1,193,139,252,119,186, 70, 1, 1, 1, 1, 1, 1, 1, 1,193,139, 60, 35,194, 40, 66, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129,231,136,176,210,184,160, - 41,104, 10,154,130,166,160, 41,104, 10,154,255,115, 8,125,176, 4, 4, 4, 4, 4, 4, 4, 4, 4,131, 37, 32, 32, 32, 32, 32, - 32, 32, 32, 24, 44, 1, 1, 1, 1, 1, 1, 1, 1,193, 96, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 75, 64, 64, 64, 64, 64, - 64, 64,224,191, 6, 2, 53,143, 4,184, 91, 15,157,134,140, 38,184, 43,104, 10,154,130,166,160, 41,104, 10,154,130,230,255,156, -102, 93,218,119, 33,240,255, 98,188, 4, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,252,223,211,124,169, 16,154, 8, 5, 4, 4, - 4, 4, 4, 4, 4,158, 51,162,127,216,220, 85, 24, 60, 14,255, 89, 69,251,191, 77, 83, 64, 64,224, 57,208,165, 53,102, 72, 37, -226, 9, 6,218,188,226,114, 52,126,234, 26, 2,103,134,195,114,185, 68,212,197,104, 98,190,190,116, 27, 63,214, 83,146,120,234, -179,112,175, 63, 35,189,123,247,158, 8, 96, 1,207,243, 60,199,113,115,206,156, 57,179,253,121, 60,235,149, 74,229, 40, 0, 10, - 0, 32, 73,178, 40, 35, 35, 99,175, 37,255,216,181,107, 87, 81,105,105,105, 50, 0,143,242,175, 30, 68, 69, 69, 5,212,181, 77, -160,254, 68, 68, 68,240, 62, 62, 62,104,217,178,101, 92,102,102,230, 58, 0, 27,133,179,242, 95,100,176, 2, 92,229, 29, 95,241, -114, 29,112, 44,242,241,156,186,110, 56, 15, 15,143,229,174,174,174,147,116, 58,157, 1, 0, 79,146, 36, 79, 16, 4, 42, 94, 0, -192,178,108, 78, 92, 92,156,165, 97,200,231,166,217,164, 73,147,155, 36, 73,122, 86,252, 15, 0,212,245, 55,199,113,105,177,177, -177,109,235, 58, 72,165, 82,217,151, 36,201,153,117,237,199,113,220,242,204,204,204,227,181,237,211,162, 69,139, 40,107,107,107, -119,146, 36,137,154,246,225,249,255,148, 57, 12,195,240, 58,157, 46,235,222,189,123, 33,245,205, 91,181, 90, 61,135,231,249, 16, - 0, 63,107, 52,154,163, 0,216,103,185, 86,212,106,245, 48,158,231,231,150,159,195, 37, 25, 25, 25,251,234,243,255,254,254,254, - 55, 37, 18,137, 39, 69, 81,196,211,121, 82,221,103,142,227,120,147,201,148, 22, 31, 31,223, 86,184,237, 95, 60,157, 90,163, 99, - 99, 95,213,252,169,111,118,199,103,203,119, 79, 13,109,193,228, 74,164,146,141,195,194, 26, 59, 52,243,115,192,151,155,174, 78, - 3,184,250, 24, 44,194,203,203, 43,216,221,221,221, 87,175,215, 87, 92,139, 60, 69, 81, 79,236, 68,211, 52, 29, 23, 23,119, 84, -200, 1, 11, 11, 4,145,104,254, 31,127,252,161,226, 56, 14,253,251,247, 95, 8,224,121, 24, 44, 66, 38,147, 89, 61,122,244, 8, -102,179,153,244,241,241,177,169,103, 25,229, 18, 25, 25, 9,154,166, 77,157, 58,117,242,169,186, 77, 42,149,186, 92,185,114, 5, - 0, 76,109,218,180,241,105,232, 1, 6, 5, 5, 89, 91, 91, 89,125, 74, 17, 68, 47,150,231, 3, 1,128, 34,136,251, 44,207,159, -210,234,245,171, 99, 99, 99,181, 47,123,222,159, 60,121, 18, 19, 39, 78,196,157, 59,119,154, 30, 61,122,244,251, 57,115,230, 76, -209,104, 52,221, 1,228, 8,119,198, 63,108,176, 26, 43,173,155,186, 58, 58, 28, 89,177,116, 17,142,245,121,187, 54,131, 69,170, - 84,170, 21, 93,186,116,153,176,115,231, 78,235, 3, 7, 14, 88,251,250,250, 66, 34,145,128,162, 40, 80, 20, 5,146, 36, 65, 81, - 20, 6, 15, 30, 76, 88,106,174,170,106,158, 62,125,218, 58, 32, 32,160,178,144,229,121,190,210,100,245,239,223,191, 78, 77,146, - 36, 61,163,162,162,220,228,114,121,229,255,115, 28,247,196,139,231,249,202, 23,203,178,232,210,165,139,101, 7, 74,146, 51, 99, - 99, 99, 95,213,106,181, 79,104, 84,252, 70,197,223,175,190,250, 42, 0, 28,175, 67, 75,125,249,226,105, 55,130, 78, 2,152,124, -240,148, 19, 32,109, 4,144,178,106,247,207,207,207, 71,247,238,221,169,134,228,175,171,171,235,216,115,231,206,249, 63,122,244, -104,200, 87, 95,125,149,119,245,234,213,239, 1,108,213,104, 52,169, 13,209,227,121,126, 73, 82, 82, 82, 19,158,231,225,231,231, -183, 24, 64,189, 12, 22, 69, 81,158, 39, 79,158,116,147, 74,165,149,249, 92,211, 59,203,178,160,105, 26,225,225,225,140,112,203, -255, 67, 15, 26, 2,139, 71,190,214, 27,122, 51, 9,179,153,113, 85,185,218,238,152, 54,182,171, 24,188, 9,219, 15, 71,193,204, -112, 63,213,215, 92,245,235,215,207,103,227,198,141,162,216,216, 88, 81, 80, 80, 16, 88,150,173,124,113, 28, 87,175,251, 82,160, -210, 96, 17, 36, 73, 34, 61, 61, 29, 54, 54, 54,246,221,186,117,203, 96, 89,118,246,197,139, 23,183,255, 63,252,220, 19,145, 45, -130, 32,180, 26,141,102,215,139, 78,115,235,214,173,187,200,197,226,221,139, 22,124,226, 22,216,188, 5,233,236,234,140,135, 15, -211, 32, 21,241,161, 15,227, 30,116, 88,188,236,187, 15, 90,183,110, 61, 50, 58, 58,250,226,203,150,223,222, 67,183,124,207, 49, -244, 36, 0,216, 20, 1, 0,155, 81, 82, 82,130,119,223,125, 23,135, 14, 29, 10,234,216,177,227,114,150,101, 39, 8,119,198, 63, -104,176,252,212,114, 15, 27,137,252,196,166, 31,214, 17,230,146, 44,199, 58,110,168, 37, 93,186,116,121,107,231,206,157,142, 4, - 65,224,244,135,239,192,129, 54, 64, 61,255,107, 56,186,184,194, 52,115, 34,108, 89, 6, 45,207, 68,215,231, 38,125, 66, 51, 46, - 46, 14,249,249,249,112,117,117,133, 66,161,128, 76, 38,131, 68, 34,129, 84, 42,181,236,233, 77, 16,144,203,229, 56,121,242, 36, - 68, 34, 81,229,139,162,168,106, 63,187,187,187, 91,124,174, 56,142, 91, 30, 24, 24,216, 42, 62, 62,222,174,160,160, 0,157, 58, -117, 42, 38, 8,226,118, 21,227,209,234,246,237,219,118, 22,151, 52,116, 18, 74, 31,255, 0,190, 96, 31,224,240, 58, 88,187,145, - 48,160,209, 19,133, 76,133, 41,100,217,134, 7,157,114,114,114,232, 11, 23, 46, 32, 56, 56, 24,187,119,239,118, 46, 40, 40,152, -255,243,207, 63,207, 93,179,102,205, 28,141, 70,179,188, 1,146, 78, 0, 16, 23, 23, 7, 0,142, 13, 57, 38,169, 84,138,107,215, -174,129,231,249, 74, 83, 78,146, 36, 72,146,196, 31, 9, 46,208,154, 72,232,178,238, 98,218, 32, 31,248,250,250,254, 45,170, 37, -240, 98, 8,107,133,254,109, 90,181,232,232,227,229,141,115, 87,110, 64, 34, 21, 59, 76, 30, 55, 16,182, 54, 34,172,220,250, 39, -247, 56, 45,127,234,165,219, 22, 71, 74, 8,149, 74,213,170, 79,159, 62, 94, 27, 55,110,148, 0,192,221,187,119,161,209,104,224, -230,230, 6,185, 92, 14,177, 88, 12,138,162, 32,145, 72,132,147, 95, 15, 66, 66, 66,154, 55,111,222,220,154,101, 89,232,116, 58, -252,240,195, 15,246,114,185,220,126,224,192,129, 22, 71,178,106,104,182, 11, 52, 26,141,122,149, 74,165, 0,192,145, 36, 89,250, -116,100, 11, 0, 84, 42,149,117, 53,146, 12,128,220, 54,109,218,120, 0,144, 2,120, 80,117,155,201,100,170,105,155,165,105, 14, - 13,105,213,244,232,226, 37, 11,172, 51,179, 30,192,222, 46, 19,156, 57, 27,223,127,255, 61,172,172,236,176,112,225,108,209,193, -182,109,148, 31,127, 50,235,136, 72, 36, 10,191,121,243,230,213,151, 41,207, 57,134,158,212,186,109,231,202,207,219, 79,174,133, -209, 62, 4,233, 11, 23, 98,205,154, 53,104,210,164, 73,251,251,247,239, 11, 55,199, 63,101,176,154,123,217, 57,240, 28,127,226, -199,141,171,165,160,181,142,113, 17,151,171,110,174, 58,212,146, 0, 64,186,187,187, 79,222,181,107,151, 93, 69, 97, 23, 64,176, -112, 0,141, 87,154, 53,131,194,222, 1, 89, 12, 13,222, 76, 67, 42,145,212, 84, 32,214,169, 73,146, 36,196, 98,241, 19, 47,169, - 84,138,170,209,142, 90, 52,171,214,230, 64, 81, 20, 78,158, 60, 9,179,217,140,225,195,135, 87,107,182,106,160, 90,205,204,204, -204,227,106,181,250, 54,207,243,175,114, 28, 7,130, 32,110,103,100,100,116,173,216,174, 84, 42,251,182,110,221,122, 38,199,113, -203,235,210,228,121, 30, 96,242,192,231,239,130,109,167, 92, 20, 95,117, 1, 97,221, 11, 44,124,112, 55, 33, 19,167,111, 38, 35, - 55,191, 20,109, 2,220,208,167,147, 31, 56,142,179,248, 56,171,162, 82,169,154, 4, 5, 5, 5,154,205,102, 92,184,112, 1, 44, -203,162,101,203,150, 24, 63,126, 60,185,118,237,218,241, 0,150,215, 87, 19, 64,116,100,100,100,175,204,204, 76, 0,184, 99,193, -254,119,171, 51,194,191,252,242, 11, 12, 6,195,223,118,118,236,250, 21, 62,123,221, 7,227, 63,220,142,175,227,247, 98,195,134, - 13, 79, 52,151,214,227, 56,235,139,160,249,183,140,194,248, 17, 67,135,128,146, 88, 35,238, 97, 26,186,118, 12,129,155,155, 27, -110,199, 62,196,227,244,252, 44,130,192,219,125, 59, 75,151,235,245,166,185, 23,163,177,181, 46, 77,149, 74,213,104,243,230,205, -226,170,223, 73, 36,146,202, 40,120,213,104,248,211, 77,134, 66, 30, 85,175, 25, 18, 18,210,188,119,239,222, 23, 23, 44, 88, 96, -251,248,241, 99, 92,190,124, 25, 62, 62, 62,208,235,245,213,221, 55,181,105, 86,215,108,199,101,102,102,254,218,144,227, 60,127, -254, 60, 3,192,179,186, 29,106,219,102, 73,218, 91,180,104,161,144,136, 68,123,190, 92, 60,207, 58, 50,242, 40, 58,135,134,195, -202,214, 31, 12,157,134,188,252, 82, 20, 36,100, 96,217,178,213,152, 59,119, 22,190, 90,186,216,118,212,152,241,187, 59,118,236, -216,228,218,181,107,134,151, 37,223, 73,145,100, 99,244,205, 43,147, 0,160, 56,118, 63, 62, 26,221, 25, 37, 37, 9,248,224,131, -121, 72, 79, 79,199,131, 7, 15, 34, 95,240,113,190,180, 6,139,199,223, 59,141,214,138,135, 7,228,172,217,124,228,251,111,151, -219,219,218, 40, 92,111,158, 56,136,148,148,204, 90,255, 71,167,211,153, 14, 29, 58,132, 19, 83, 38,160, 9,193,192,113,254, 74, -184,169,213, 40,154, 48, 24,165,102, 26,141,255,186, 1,153,141, 13,164,214, 54, 22, 71, 28,116, 58,157,233,236,217,179,136,137, -137,129, 72, 36,130,141,141, 13,172,173,173, 33,147,201, 42,141, 85,197, 3,216, 82, 77,158,231, 33, 18,137,112,247,238, 93,164, -164,164,192,193,193, 1,151, 47, 95, 70,175, 94,189,158, 48, 87, 20, 69, 61,209,199,203, 82, 42,154, 22,171, 51, 96,168,163,105, -240, 9,196, 46,128,211, 91, 40,185,166, 6, 28,199,192,204,219,131,227, 57,220, 74,200,195,251, 99, 6, 0, 0, 38,207,253, 1, -189, 58,248, 86, 54, 65,214, 7,181, 90,253,126,203,150, 45, 87, 79,154, 52,137,180,182,182,134,209,104,132,209,104, 68, 92, 92, - 28,156,157,157,161, 80, 40, 26, 20, 38,224,121,254,145, 90,173,134, 92, 46, 7,207,243,143, 26,162, 65, 16, 4,246,236,217, 83, -237,182,183, 87,223,131,168,172,123, 22, 54,110,220, 8,134, 97,192,243,188, 16,194,250, 39,224,225,225,174,244, 4,201,155,145, -145,149,139,193,253,251, 64, 36,177, 65,114, 90, 46, 90, 55,243, 83,189, 57, 40, 84, 69, 17, 12,190, 88,177,107, 50,192,109,181, -224,126,103, 99, 99, 99,197,209,209,209,160, 40, 10,118,118,118, 80, 40, 20,144, 72, 36,144,201,100,149,198, 74,136, 96,213, 78, -159, 62,125,166,114, 28, 55,155,227,184,130,118,237,218,169, 23, 45, 90,100,159,150,150,134,187,119,239, 98,215,174, 93,185, 60, -207, 51,229,157,221, 23, 62,235,111, 89, 16,217, 2, 65, 16,245,238,231, 20, 20, 20, 36, 97,232,194,143,236,173,216,215, 68,164, -157, 15, 83, 92,250,168,216, 76, 30,138, 79,203, 88, 91, 30,253,170, 17,153, 88, 60,117,205,202,217,238, 46,206, 52,250,246,125, - 13,137,143, 10, 48,107,214,112, 20, 23, 27,176,243,151, 85, 0,164,160, 25, 10, 33,237,195,161, 82,121, 33,172,115,152,234,194, -165, 11,147, 1,172,122, 89,174,129,199, 7,222,155, 12, 96,177,183,183,247,249, 31,150, 45,243,239,217,179, 39, 0,224,244,233, -211,248,105,244,104, 44, 4,198,218, 2,154,143,128, 89, 47,244,137, 81, 79, 47,242,223,110,176, 42, 18, 84,159,132, 17,114,198, -118,239,162,217, 83,125,189, 27,249, 41,175,255,185, 7, 73, 73,233,200,202, 42,168,237,164,113, 4, 65,112,141, 26, 53,130,157, -217, 0,123,222, 4, 55,149, 26,182, 78,206, 40, 48,151, 71,174,172,173, 33,181,182,177,244,225, 88,169,217,172, 89, 51,100,101, -101, 65, 34,145,192,198,198, 6,182,182,182,149, 6,171,194, 92, 89,250,192, 37, 8, 2, 28,199, 65, 36, 18,225,246,237,219, 8, - 11, 11,131,151,151, 23,118,239,222,141,190,125,251,254, 45,138,213,144,166,167,138, 62, 87, 85, 35, 87, 36, 73,206,180,164,115, -251, 19, 72, 27,131,177,125, 3,164,162, 39,104,222, 14, 70, 94, 85,222, 36,200,227,207, 27, 89,136, 79,201,125,162,185,208,114, -243,236,161,150,203,229,219,103,205,154,213,163,109,219,182,160,105, 26, 0,160, 80, 40, 96, 52, 26, 33, 22,139, 65,211, 52,244, -122,125,250, 63,113,225, 86,156,243, 19, 39, 78,128, 32,136, 74,163, 91,209, 84,168,213,164, 98,252,180,157,144,138,128,219,183, -111, 35, 48, 48, 80, 40, 81,255, 33,172,228,114,103,169,220, 30, 28, 99,128, 72, 44,134,183,215, 43,224, 88, 35, 10,138,117,120, -251,141, 65,136,186,115, 15, 71,207, 94,103,204,102,110,173,165,154, 1, 1, 1,200,206,206, 6, 69, 81,176,181,181,133,181,181, - 53,154, 54,109,138,212,212,212, 39,162, 88, 2, 53, 67,146,228,156,163, 71,143,186, 83, 20,165,100, 24, 6,169,169,169,184,125, -251, 54,214,173, 91,151,165,213,106,187, 69, 69, 69,197, 55, 64,182,166,102,187,234, 58,171, 55, 36,178, 85,181,242,231,111, 39, - 51,157, 90,185, 98,138,103,203,214,237, 8, 57,101, 83,164,123,152, 29,118,227,250,213,208,185, 91,127,159,154, 82,168,235,153, -157,157, 93, 99,229,141, 34,201, 94, 77,155,183, 32, 57, 46, 13,148, 36, 16,223,174,254, 12,249, 5, 90,148,150,232, 1, 72, 97, - 50,139, 96, 52, 18,232,222,163, 39,118,239, 57,132,118,109,219, 81, 20, 73,246,121,153, 12, 22, 0, 80, 20,181,252,224,193,131, -254,114,185, 28, 75,151, 46,133,173,173, 45,174, 45, 94,140,159, 36, 18, 88, 1,216, 72,211, 51,241,226, 12, 86, 67,188,200,191, - 34,130, 85, 47, 60, 61, 61, 87,117, 12,237,240,106,163,102,237,228,215,143,237, 71,194,131, 20,228,230, 22,129, 7,244,181,157, - 60,130, 32,120,177, 88, 12,183, 47,190,132,119,203,150,208, 77, 28,134, 2, 51, 13,191, 63,175, 65,102, 99,131,251,189, 67,192, -155, 76,232, 18,155,101,169,113,225, 9,130,224, 1,192,197,197, 5, 18,137, 4,114,185, 28,114,185,188,178,239, 85,213,151,165, -102,136,227, 56, 20, 23, 23,227,209,163, 71,152, 56,113, 34, 20, 10, 5, 8,130, 64, 86, 86, 22,124,124,124, 64, 81, 20,210,211, -211,113,230,204, 25, 52,106,212, 8, 82,169,180, 94, 23, 67,149, 78,237,173,212,106,245,121,158,231, 91,221,188,121,211,174,109, -219,182,168, 87, 4,139,144,192, 8, 31,176,240, 4,199,255,167,175,149,153,121,178,242, 86, 97,178, 44,193,221,221, 61, 40, 48, - 48,240,234,186,117,107,109,221,220,220,193,113, 44,204,102, 51,138,138,138,161,211,233,224,237,237, 13,107,107,107,126,229,202, -149, 4,203,178,255,216, 80,222, 10, 67, 85, 17, 65,172,232,127, 69,146, 36,166,189,230,141,130, 2, 91, 80, 84,217,103, 75,211, - 46,240,252,177,182,182,117, 18, 73,172,193,145, 34,216,219, 59, 66, 36,181, 6,199,136,192,114,128,173,189, 11,174, 68,197,225, -234,157,146,247,179,243, 96,201,208,125, 94, 36, 18,241, 20, 69,193,205,205,173,210, 76,137,197,226,138,107, 23,197,197,197,160, - 40,170,242, 59,129,218, 43,146,201,201,201,208,106,181,184,118,237, 26,246,236,217,147,243,180,185,234,221,187,247, 36,133, 66, - 49,215, 96, 48, 44, 61,126,252,248,247,181,105, 54,160,217,174, 33,145,175,128,144,144, 16,177,152, 47, 56,250,215,254,213,158, -118,108, 20,129,228,247,128,248,226, 88,155, 27,110,157,123,182, 31, 72, 52,251,242, 99,159,193,243, 86,255,149,157,141, 32,212, - 48,226,153, 7, 90,200,173,228, 0, 79,224,242,165, 99,101,205,130,249, 37, 40,213, 26, 96,164, 41, 24, 77, 4, 12, 52,129,158, -189,194,177,121,235,111,208,100, 23,128, 7, 90,190,108,215, 65,147, 38, 77,218,120,120,120,224,227,143, 63,134, 97,215, 46,148, - 2, 24, 8,224, 96,121,165,218, 22,152, 46,220, 45, 47,208, 96,121,120,120, 76,109,213,170,213,187, 91,126,222,105,179, 98,222, - 23,197, 5,177,119, 40,147,158,182, 54,154,205,166,135,154,188,181,117,152,161,178, 90,167,131, 35, 20,118,246, 48, 62, 21,185, -226, 77, 38,112,180, 9, 18,203, 31,142, 60, 65, 16,224,121, 30, 86, 86, 86,144, 74,165,213, 70,174,234, 19,193, 2,128,194,194, - 66,236,217,179, 7,237,219,183,135, 66,161, 0, 69, 81,104,213,170, 21, 98, 99, 99,225,231,231, 7, 0, 56,120,240, 32, 94,127, -253,117, 36, 36, 36, 32, 40, 40,200, 38, 34, 34,162, 94, 6,139,101, 89,156, 56,113,194,142,231,249, 87,121,158, 71, 78, 78,195, - 70,195,178, 44, 11,173, 86,139, 19, 39, 78, 32, 35, 35, 3, 74,165, 18, 69, 69,182,176, 83,115,149,102,177,226,101,225,131,247, -139,119,222,121,199,214,198,198, 6, 44,203, 64, 44, 22, 87, 26, 87,177, 88,130,184,184, 56,140, 30, 61,186, 40, 57, 57,249,243, - 6,142,250, 33, 68, 34,194,189,168,168, 0, 37,197,133,160, 40,120, 1,160,208,128,169, 31, 72,146,172,124,175,120, 17, 4, 1, -137,152,130,210,221,181,178,227,123,121,244, 78,104, 34,124,129,190, 10,192, 72, 0,111, 21,148,152, 68,249, 37,122,128, 49,225, - 81,242, 35, 20,106,105,240,140, 25,143,211, 52,208, 26, 57,228,229,151,160,117,155,190,235,206,158, 61, 59,135,166,233,217, 0, -142, 88,114,205, 71, 68, 68,224,194,133, 11,184,116,233, 18, 42, 58, 74, 3,128,157,157, 29, 78,158, 60,137,238,221,187, 11,185, - 80, 11, 52, 77, 47,237,211,167,207,108,165, 82, 41, 95,181,106,149,189,183,183, 55, 8,130, 40,126, 58,114,213,182,109,219, 57, - 51,103,206, 84, 13, 31, 62,124, 26,128,239, 27,248,115,181,117, 86,175,181,140,170,110, 42,134,236,236,204, 73,155,182,143,119, -181, 22, 63,202, 64,242,183,229,230,139, 2,116,197,192,217,157,144,188,250,101,242,152, 30,147,221, 50, 74,214,190,147,158,153, -190,185,134, 7, 29, 23, 23,159,130, 13, 27,214, 96,238,220,201,216,181,115, 13, 56, 94,130, 18,173, 25,238,234, 96,152,204, 28, - 8, 82,140, 78,157,187,224,210,149,235, 0, 75, 99,218,196,171, 47,221, 92,107, 15, 30, 60,184,145,146,146, 18, 56,111,222, 60, -108,243,240,128,173,173, 45, 62, 93,176,224, 42,203,178,157,133,187,228,249, 24, 44,139, 67,114, 30, 30, 30, 67, 85, 42,213,138, -157, 59,119, 90,101,100,100, 64,221,164,185,221, 31,191,239, 49,186,217, 72,244,154,252,130,113,209, 25,218, 58,135,219,147, 36, - 9,102,241,167,200, 99, 76,240,253,227, 10,100, 54, 54,136,239,219, 22,188,201,132,206,145,201,144,217,216, 64, 36,183,170,119, - 98,170,139, 88, 85,125, 85, 20,198,117, 97, 50,153, 28,122,245,234,133,158, 61,123, 98,216,176, 97,149, 77,129,193,193,193,248, -237,183,223, 48,116,232, 80, 68, 71, 71, 67,173, 86,163,105,211,166,104,218,180, 41,206,158, 61, 91,191, 56,104,121, 4,171,111, -223,190,197, 4, 65,220,230,121,190,213,141, 27, 55,236,234,171, 81, 97,160, 78,156, 56,129, 1, 3, 6,192,207,207, 15, 81, 81, - 81, 56,249,229, 74,136,108, 92, 0,210, 13, 60,199, 87, 70,182, 44,233,131, 37,145, 72,194, 26, 53,106,132,204,204, 44,200,100, - 50, 56, 58, 58,192,202,202, 10, 50,153, 28,203,150, 45,227, 54,111,222,188,158, 32,136, 47, 53, 26, 77,126, 3,204,121, 99, 23, - 23,151, 95,198,141, 29,211,193,217,217, 5,238,238, 42,204,156, 49, 43,124,215,111,187, 99, 30, 63,126, 60, 42, 35, 35,227,142, -165, 90, 4, 65,192,100, 50,129,162, 40, 28,140,119,133,214, 68,160, 56, 45, 18, 31,189,230, 83,105,182, 42,154,122, 43,166,191, - 16,120, 49, 80, 20,181,237,211, 79, 63,237, 54, 98,196, 8, 66, 66,154, 77, 39,143,111, 23,177, 44, 67,124, 54,251, 71,246,220, -197,243, 36,203, 50,196,176,209,211,185,163,103,238,144,239, 79, 91,201, 6,119, 28,128,187,119,239, 42, 7, 14, 28,184,196,108, - 54, 91,100,176, 42,242,184,134,223, 23,154, 8,235,224,244,233,211,235, 1,172,239,221,187,119,166, 66,161, 64,105,105,233,223, -250, 41, 6, 5, 5, 89, 39, 37, 37, 73,164, 82, 41,218,180,105,227,202,113, 92, 60, 65, 16,171, 78,156, 56,177,165, 62,191, 85, - 67,100,171,193,211, 52,216, 58,177,131, 90,182,107,106, 27,103, 61,207,214, 74,108,184,245, 74,188,220,142, 0, 80,164, 87, 38, - 94, 78, 27, 85, 74,102, 83,173, 91,246,104, 6, 91,177,226, 53, 0,213, 26, 44, 2,184,173, 45, 41,233,163,211, 51, 56,127, 46, - 26,195,135,123,195, 64,147,208, 27, 72,208,102, 30, 36, 37, 1, 65, 73, 48,110,194,187, 48, 49, 28, 10, 53, 26, 16, 64,244,203, -118, 29,176, 44, 59,115,240,224,193,237,150, 46, 93, 26,244,233,167,159, 2, 0,212,106,117,167, 57,115,230,220,251, 7,230,193, -122,105,154, 7,159,142, 96,213,154,176,174, 93,187,110, 49,155,205, 67,242,243,243, 29,223,125,247, 93, 58, 55, 55, 23, 7, 14, - 28,192, 79, 63,253,164,211,154,169,155,133,121,204,216, 36,141, 54,205,146, 66,145, 36, 73, 72,204,102,240,204,127, 34, 87,156, -209, 88, 25,201, 18, 91, 41,234,151, 35,229, 17,172,234, 76, 85, 69, 36,171, 62, 15, 91,153, 76, 86,120,233,210, 37,183,180,180, -180, 39, 58,180,251,250,250, 2, 0,110,220,184,129,107,215,174, 97,212,168, 81, 16,137, 68,144, 72, 36,184,125,251,118, 73,125, -142,185,194,240, 84,140, 34, 84, 42,149,125, 59,116,232, 80,211,232,193, 58,181, 30, 63,126, 12, 63, 63, 63, 24,141, 70, 56, 56, - 56, 32, 79,243, 8,143, 31, 37, 65,103,140, 71, 35,165, 28,217,217,217,144,201,100,150,222,112,108, 69,193,101, 52, 26,161,209, -100, 66,173, 86, 99,199,142,157,216,178,101,203, 40,141, 70,179,183, 33,215,154, 74,165,154,222,191,127,255, 37, 67,134, 12, 17, -233,180,165,224,185, 50,195, 35,145, 74,240,221,119,223, 53, 61,115,230,204,173,117,235,214,125, 37,151,203,151, 36, 38, 38,154, -234,202,115, 0,216,182,109, 27, 0, 64,209,113, 1,102,142,120, 5,111, 77,222,142, 85,171,246, 63,145, 86,138,162,176,104,209, - 34,161, 68,125,129,116,236,216, 49,120,246,236,217,226,138, 62,113,106,239,165, 12, 77,211, 28, 0, 4,182,122,245, 63,145,202, -190, 64, 66, 66, 2, 86,173, 90, 5,173, 86, 11,145, 72, 36, 49,155,205, 22,253, 70,175, 94,189,208,183,111,223,202,102, 66, 23, - 23, 23,208, 52, 13,134, 97, 4,115, 85,207, 72,214,128, 1, 3,102,115, 28,199,115, 28, 55,175,226,251,144,144, 16, 43, 55, 55, -183,203,107,214,172,113,102, 24, 6,211,167, 79,119,200,205,205,117,152, 50,101,202, 44, 0, 91,106, 40, 39,234, 51,187,186, 69, -211, 52, 84,215,167,139, 32,136, 70,214,214,246,200, 65, 38, 10, 93,204,193,133,206, 76,254, 9,205,251,183,189, 82, 91, 7, 90, -177,102, 63,178,216, 4,123, 43, 59,128,227,155,212,248,156,227,184, 19,177, 49,247,122,122,122,248, 81,135,254, 56,135, 1,131, -134,194, 96, 34, 96,160, 73, 16,148, 24, 4, 37, 65,187, 14,157,225,235, 23, 0,142, 3,238, 69, 71,210,102,142,251,235,101,202, -251,170,243, 96, 77,255,238, 52,230, 44,254, 22, 99,134,245,197,248,241,227,255,201,121,176, 94,218, 62, 88, 53,153,171,183, 29, - 29, 29, 71, 79,152, 48,193,234,198,141, 27, 88,188,120,177,232,228,201,147,116, 68, 68, 4,195,178,236,244,140,140,140, 77,245, -249, 81,146, 36,209,104,231,159, 80, 43,149,120, 16,222,238,137,200,213,249, 86,158,224,140, 70,244, 78, 42,170,119, 98, 42,154, -178, 42,140, 85,133,185,170,101, 42,133,218,106,224,213,206,123,245,193, 7, 31, 96,203,150, 45,232,220,185, 51,252,253,253, 33, - 18,137, 42,155,165, 26, 18,193,170,160,222,163, 7,159,170,205,123,123,123,227,206,157, 59,176,183,183,199, 47,191,252, 2, 47, - 79, 15,140,237,227, 11,147,201, 4,179,217, 12,173, 86, 91, 17,193,170,243, 64, 57,142,139, 57,112,224,128,223,136, 17, 35,120, -145, 72, 68, 24,141, 70, 0,192,218,181,107,179,235, 59,227,122,121,109,104,152, 76, 38,219, 58,106,212, 40,219,166, 77,155, 34, - 43, 43, 11,215,175, 95,197,172, 89, 51,175,139,197, 34, 67,120,191,254,221,130,130,154, 99,242,228,201,100,112,112,240,220, 89, -179,102, 77,247,244,244, 28,159,150,150,182,167, 46,147,245,219,111,191, 1, 0,222,249,238, 62, 76,166,178,130,121,227,198,141, - 80, 42,149, 79,236,251,240,225, 67, 97, 20,225, 11,132, 97, 24,158, 36, 73, 34, 53, 53,149, 86, 40, 20,132,147,147,147, 72, 38, -147,193,104, 52, 86, 26,173,132,132, 4, 28, 57,114, 4,105,105,105,112,114,114, 34,237,237,237,193, 48, 76,129,165,215,124,213, -209,130, 21,134, 74, 48, 87,245,231,252,249,243,235, 1,172,175,248,220,179,103,207,137, 4, 65,204, 48,155,205,118, 91,182,108, -113,176,179,179, 35,142, 28, 57, 98,250,225,135, 31, 74, 41,138, 42, 0,176,178,182, 50,229,121,205,174, 94, 75,228, 11, 44,131, - 7, 5,165, 73, 62, 98, 27, 21, 23,109, 32,174,124,156, 58, 51,176,128,108,226, 78, 52,111,206, 12,207,142,185, 60,214,156,216, - 57, 39, 43,155, 96,121,190,198, 73,156, 10,138,138,190,223,250,243,238,143, 14,236,219,238, 45,183, 83, 96,204, 91, 83,113,226, -212, 69, 72,101, 10, 92,191,121, 11, 38,154, 69,242,227,116,140,122,115, 12, 84,110,206,160,116, 25, 26,163,201,180,233,101,202, -251, 39,230,193,106,219, 25,151,247,175,196,111,241,222, 72, 95,188,248,159,158, 7,235,165,139, 96, 85, 75,251,246,237,109, 11, - 11, 11,191,251,228,147, 79,172,180, 90, 45,114,115,115,145,151,151,135,235,215,175,159, 52,155,205, 31,213, 54, 74, 3,101,171, -109,223,125,186, 80,164, 40, 10, 78,174,110,144,217,216,130, 55,153, 42, 35, 87, 18,133, 53, 56,163, 17, 28,109, 2,106,110,206, -169, 86,147, 32,136,191, 69,173,234, 97,174,158,208,172,136,136, 85, 55,169,168,151,151, 23,190,250,234,171,191, 77,211, 96,201, -113, 2,101,163, 5,121,158,111, 85, 17,121,226,121,190,149, 82,169,236,107,225,200,193,106, 53, 57,142, 67,215,174, 93,113,242, -228, 73,220,185,115, 7, 36, 73,162, 95,191,126, 32, 8, 2,246,246,246, 16,137, 68,149,102,174, 98, 64, 64,109,154, 44,203,190, -245,211, 79, 63,125,246,215, 95,127,125,241,225,135, 31, 90,189,250,234,171, 21,253,188,114, 80,182,198, 99,189,142,147,227,184, -133,183,111,223,182,101, 24, 6, 75,151, 46,197,205,155, 55,181, 15, 31, 62,252, 68,163,209,108, 5,192, 23, 20,150,140, 73, 76, -124,180, 97,254,252,249,182, 61,122,244,192,141, 27, 55,228, 94, 94, 94,243, 1,236,169, 43,237,215,175, 95, 7, 69, 81, 96,242, - 83, 48,121,230,110,216, 40,196,136,139,139, 67, 94, 94, 94,229,181, 86, 75, 83, 82,181,154,207,136,160, 9, 32, 34, 34,226,247, -245,235,215,127, 48,110,220, 56, 9,207,243,108, 74, 74,138, 25, 0,161, 84, 42,169,136,136, 8,238,240,225,195,208,235,245,240, -244,244, 36, 61, 60, 60,136,147, 39, 79,114,177,177,177,215,121,158,159,109,233,113, 86, 53, 87, 98,177, 24,122,189,222, 82,115, - 37,228, 81,237, 44,216,191,127,191,202, 96, 48, 64, 42,149, 98,239,222,189,244,246,237,219,239, 21, 23, 23,119,137,138,138,210, - 55, 68,179, 1,211, 52,212,170, 89, 82, 64, 30, 57,121,226, 94, 43,115,247, 31,137, 15, 51,243,194, 42, 43,174, 4,225,178,215, -189,133,139,188,125,235,116,155, 11,223,144,165,188,238,112, 77,154,137,137,137, 38,219,224,224,215, 63,253,108,222,217,197, 11, - 23,216, 46,255,122, 5,238, 14, 24,142,194, 34, 29,140, 38, 22, 52,195, 97,225,194, 47,225,230,228, 0, 71, 9, 93, 90,168, 39, - 94,143,141,141,165, 95,166,124,127,198,121,176,254, 63,142,243,165,162, 78,247,161,211,233, 22, 7, 4, 4, 72, 99, 99, 99,241, -240,225, 67,196,199,199,131,101,217,132,244,244,244,129, 13,253, 81,146, 36, 97,111,111, 15,169, 84,138, 78,119,210, 33,149, 72, - 32,181, 46, 91,158,170,119, 82, 17,192,243, 32,165,178,122,107, 62, 61,231,213,179,140, 34, 98, 89,182,114,134,246,170,235, 25, - 62, 61, 90,173,190,145, 43,146, 36,103, 94,189,122,213, 46, 37, 37, 5, 60,207, 99,255,254,253,118,195,134, 13,155,217,144,232, - 21,207,243,200,203,203, 3,199,113, 16,139,197,232,209,163, 7, 66, 66, 66, 80, 90, 90, 10,150,101, 43,155, 47, 37, 18, 73,189, - 70, 17,102,103,103,235, 0, 44, 50,155,205,155,230,206,157,187,168, 69,139, 22,239,126,252,241,199, 36, 26, 56, 40,130, 32, 8, -134, 97, 24,236,221,187, 23,251,246,237, 43,225,121, 62, 64,163,209,100, 86,137,222,237,188,118,237,218,201,161, 67,135, 38, 36, - 38, 38,218, 21, 21, 21, 1,117,204, 97, 83,126,109,194,223,223, 31, 44,203, 98,197,100, 79,148,148,180, 4,203,178, 96, 24, 6, - 10,133,226,137, 37,136,132, 89,220, 95,112,205,152,227,102,205,153, 51,231,216, 87, 95,125, 53,115,218,180,105, 29,198,141, 27, - 39,150, 72, 36, 92,122,122, 58,179,107,215, 46,162, 73,147, 38,164, 88, 44, 38, 78,156, 56,193,221,184,113,227, 26,195, 48, 43, - 0,212,107, 41,146,170,230, 74,232,115,245, 92,217, 51, 98,196,136,113,195,135, 15,183, 10, 14, 14,150,253,244,211, 79,133, 90, -173,182, 38,115,245,183,224,101, 77,211, 52, 60,167, 9, 72, 1, 0, 26,141,102,211,151, 11, 46, 76, 30,227, 63,186,201,187,206, -175,224,148, 54, 27, 5, 98,138,180,115, 32, 17,236, 67, 65, 87,152,232,118,234,198,254,120,141, 70,179,173, 54,157, 91,183,110, - 69,145, 36,217,245,173,183,223, 57, 48, 97,220, 4,245, 23, 31,127, 36, 62,114,242, 44, 88,179, 17, 23, 79,159,134,139, 13,201, -210,218,172,140, 34, 51, 57, 56, 42, 42,234,165,235,127, 85, 62, 15,214,100, 0,163, 22, 44, 88,176,107,242,228,201,224, 56, 14, -231,206,157,195,134, 25, 51,176,144,101,199,218, 2,186,143,202,246, 17,120, 94, 6,171, 93,187,118,175,104,181,218, 95, 76, 38, - 83, 48,199,113,210,243,231,207,195, 96, 48, 32, 54, 54, 86,207,113,220,239,207,240,155, 41,253,250,245, 35,159, 94, 47,174, 6, -147, 99,105,231,186,148, 94,189,122, 61, 55, 77,142,227,210,170,174, 97, 86,147,110,213,207, 12,195,164, 89,114,160, 28,199, 45, -239,212,169,211,223,190,107, 96, 33,150,212,179,103, 79,250,105,211, 85,221,223, 85,210,159,102,169,126,110,110,110, 22,128,247, - 57,142, 91, 51,126,252,248, 5, 0, 18, 26,104,176,150, 4, 5, 5,205, 45,251,147, 88,156,145,145,145, 89,141,169,203, 81,171, -213,239,122,121,121, 85, 46, 0, 93, 87,218,123,247,238, 77,215,181,200,115,213,200, 21,199,113,105,194, 45,255, 66,185,168,211, -233, 46, 46, 91,182,172,203,134, 13, 27,102,125,240,193, 7,237, 71,142, 28, 41,234,218,181, 43,142, 30, 61,202,158, 59,119,238, -186, 94,175, 95, 94, 95, 99, 69, 16, 68,233,211,247, 80, 45,149, 16,131,144, 13,245,227,244,233,211,159,118,238,220,121,193,158, - 61,123,146,125,124,124,100, 4, 65, 48, 22,154,171,231, 62, 77, 67,109, 70,142, 42, 53, 12,218, 57,250,131, 35,193, 31,190,227, -211,183,115, 27,185,103, 99,149, 50, 46, 37, 15,169,183, 79,234, 19,207,111,120,196, 27,242, 6,193,130,136,123,100,100,100,180, -159,159, 95,192,166,159,182,188, 35,161,168,222, 28,207,135,124, 62,101, 44, 72,130,136,162, 89,246,100,113, 73,201,214,186,250, -132,254,219,145, 73, 36, 99,167, 76,153,130, 29, 59,118,224,192,154, 53,232,155,150,134,223, 36, 18, 88, 73, 36,216, 72,211,147, - 32, 24,172, 6, 81,163, 19, 9, 8, 8,248, 45, 63, 63,127,120,113,113, 49,195, 48, 12, 75, 16, 4, 67, 16,132,158,227,184, 47, - 57,142,251, 1,101,157,208,234, 66, 8,197, 11,154,130,166,160, 89, 65, 23, 59, 59,187,143, 57,142, 67,105,105,233, 26, 11,141, -149,112, 62,255, 33,205,238,221,187,175, 38, 73,178, 3,203,178, 63,159, 59,119,110,243,179,104,214,179,243,123,125,142, 83,164, - 84, 42, 39,240,142, 54, 3, 97, 22,249,243, 52, 21, 71,209,249, 71,202, 35, 87,156,144,239,150,105,198,197,197,241, 78, 78, 78, -200,207,207,199,190,166, 77,159,216,102, 11,108,172, 33,130,245, 66,155, 8,121,158,111, 7,192,181,162,254, 15, 32, 14, 64, 27, - 0, 86, 0,140, 0, 74, 1,184, 84,249,151,188,242,109, 21,219, 47, 16, 4, 97,198, 75, 68, 11, 65, 83,208, 20, 52, 5, 77, 65, - 83,208, 20, 52, 5,205,103, 52, 88, 3, 80, 22,216,225,103,206,156, 57,139,231,249,240,153, 51,103,206,170,242,185,114,123,217, -238,252,128,167,182,183,195, 75,134,112,241, 9,154,130,166,160, 41,104, 10,154,130,166,160,249, 92, 12, 86,109,239, 53,253, 93, -229,253,133, 66,212,114,146,238,254, 63,159,232,187,130,166,160, 41,104, 10,154,130,166,160, 41,104,254,207,105,214,165,125,183, - 58,131, 69, 16,196, 17,158,231, 7, 86,125,175,178,125, 32, 0, 84,108,171,248,187,234,118,130, 32,254,196, 75,132,224,238, 5, - 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,124, 38,254,141, 17,172, 26, 71, 17,242,123,247, 82,233, 65,176,147, 90, 41, 36, 0, - 96,210,235,104,143, 88, 20, 19, 35, 70,176, 16, 16, 16, 16, 16, 16, 16, 16,120,193, 16, 4,113,100,230,204,153,179,255, 13,199, - 42,170,201, 92,229,182, 85,184,136,140, 5, 1, 44, 67, 7, 2,128,136,228,239,231,182,117,140,231,247,238,205,125,222, 38, 43, - 60, 60,124, 54,207,243,238, 98,177,248, 79,165, 82,121,110,243,230,205,102,225, 50,122,241,240, 60, 95,231, 98,141,109,218,180, -113, 52, 26,141, 43, 57,142,235, 81,190,206,223, 57,137, 68,242,217,173, 91,183,242, 9,130,168,113, 72,180,183,183,247, 46, 63, - 63,191, 0,190, 12, 0,120, 98, 94,174,138,239, 42,182, 63,126,252,248, 65, 90, 90,218,155,150, 30,187,151,151,151,175, 92, 46, -127,155, 32,136,160,114,157, 88,131,193,240,115,106,106,234,163,255,181,124, 84,169, 84, 86, 60,207, 15, 17,139,197,227,156,156, -156,218,231,228,228, 44,204,200,200,248,246, 25,158, 17,211, 29, 28, 28, 70, 57, 56, 56, 52,202,207,207, 79, 44, 46, 46,222, 3, - 96, 21,128, 58,239,211, 47,167,168, 59,190,218,191,235,188, 11, 71,207, 47,158,191, 33,227,218,211,219, 23, 78, 87, 57,247,232, - 25, 58,239,175, 63,175,124,185,108, 67, 70,125,215,182, 36,203, 95, 64,217,136,177,138, 14,174,255,173,249, 18, 12, 96, 6,203, -178, 98,146, 36,191,205,204,204,188,244,223,126, 45, 53,109,218,244, 11,169, 84, 58,137, 36,201,196,172,172,172, 9, 26,141,230, -121, 77,117, 66,250,248,248,216,166,164,164,148,192,178,201,139, 5, 0,116,236,216, 49,139,166,105,183,218,246,145, 72, 36,217, -215,174, 93,115,127, 9,147,159, 91,209,244, 7, 32, 27, 0, 85,254,217, 84,254,158, 85,229,187,172, 26,182,255,243, 6, 43, 61, - 8,118, 34, 99, 65, 64, 94,214,189,145, 57,154, 91,111, 0,128,171, 42,120,143,179,123,179,221,233, 65, 82, 90,217,116,168,141, - 88, 33,250,158,162,196,193, 6,147,209, 69, 44, 18,231,210,140,249, 22,105,226, 39,103,198, 29,120,108,201, 15, 15, 28, 56, 48, - 0,128,125, 72, 72, 72,196,197,139, 23,219,127,251,237,183,170,125,251,246,181,138,140,140, 28, 61,104,208,160, 63,120,158, 63, -126,228,200, 17,125,189, 82,211,181,171,200,173,208,105, 44, 37, 18, 13, 2,208,138,231, 1, 16,212,109,206, 76,255,153,237,152, -247, 51,202,230,104,105,216,133, 29,226, 20, 64,112,244,231, 98,138,239, 98,102,137,139, 60, 41, 89,121, 45, 42, 63,222,114, 3, -160,234, 37, 21, 17, 63, 2,128,137,225,223, 77, 77,213,156,122,150,253,106,120,128,247, 6,176,147, 32, 8, 49,128,141, 44,203, - 30,204,202,202,138,134, 5,147,118, 90, 66,179,102,205, 92, 9,130,184,189,186,195,126,171, 0, 0, 32, 0, 73, 68, 65, 84,122, -245,106,231, 14, 29, 58, 80, 28,199,225,204,153, 51,111,206,157, 59,183,111,243,230,205, 91,148, 95,244,213,226,231,231, 23,112, -250,244,233,214,199,142, 29, 67,231,206,157,193,113, 28, 56,142,131,131,131, 3, 14, 31, 62,140, 14, 29, 58, 84,126,231,238,238, -142,174, 93,187, 34, 45,205,178,103,121,163, 70,141,134, 52,111,209,122,218, 39,159,207,112,119,115,118,177,101, 88,134, 78, 79, -215,168,215,124,187,162,163, 88, 44,254, 62, 41, 41,233, 96, 67, 42, 74,158,158,158, 35,197, 98,241, 64, 0, 65,229,223,197,154, -205,230, 35,105,105,105,187, 45, 45,200, 91,181,106,117,129, 36,201, 87,234,243,195, 44,203, 62,190,115,231, 78, 88, 67,242, 72, -173, 86,143, 80,171,213, 63,117,236,216, 81, 17, 28, 28, 12,137, 68,130,175,191,254,122,186, 5, 6, 75, 4, 96,186, 66,161, 24, -105,109,109,237, 87, 90, 90,250, 80,175,215,239,147, 74,165,189,190,251,238, 59,175,208,208, 80,219,172,172, 44,130,162, 40,247, - 63,254,248, 99,236,186,117,235,250, 50, 12,211,179,174,107,171, 32,145,155, 39, 19, 7,118, 41,120,120,118, 30,128,126, 79,111, -103, 12,242,113,148,216,107, 32,197, 71,165,150,155, 54,139, 11,104, 79, 79,207,239,220,221,221,199,235,245,122, 3, 65, 16,124, -249,171,162,150, 11, 0, 48,153, 76, 5,241,241,241, 77,107, 19,122,165,163,227, 77,138,164,106,156,187,137,229,216,180,228,107, - 5,109,159, 67, 5,230,227,232,232,232,225, 34,145,136,104,221,186,181, 53,128,190,150,154, 11,149, 74, 21, 64, 16,196, 28,158, -231, 35, 52, 26,205,247, 0, 88,181, 90,221,157,231,249, 47,202,211,251,117, 70, 70,198,217,242,107,224,123,127,127,255,215, 18, - 18, 18, 54,102,100,100, 44,105,232,241,250,251,251, 79,158, 58,117,234,130, 73,147, 38, 89,229,229,229,249,244,233,211,231, 87, -141, 70,211,229, 89,206, 65, 72, 72,136, 56, 51, 51,115,186,171,171,235,135,237,218,181, 83,221,187,119, 47, 51, 37, 37,101,173, - 82,169, 92, 21, 21, 21, 85,167, 97,111,217,178,165, 90, 36, 18,141, 7, 48,182,188, 0,253, 13,192,207,183,110,221, 74,252, 95, - 48, 88, 52, 77,187,157, 90, 50, 15, 4, 69, 65,222,165, 23, 56,142, 67,238,202, 5, 96,242,115,225,178,100, 45, 24,134, 65,175, - 94,189,220, 94,210,200,213,141,127,219, 49, 87,107,176,164, 86, 10, 9,203,208,129, 57,154, 91,111,180, 15, 95,107, 15, 0, 55, -142, 77,123,195,217,163,249, 93,169, 72, 17, 47,179,147,239,127,125, 80,175,224,225, 3,187, 18,158, 42, 55,164,105,178,221,183, -254,118, 60,252,200,241,179,251, 81, 54, 47, 69,157, 20, 23, 23, 47,245,241,241,113, 61,125,250,116,178, 84, 42,181,146,203,229, -196,136, 17, 35,172, 70,143, 30,221,236,204,153, 51,126,199,142, 29, 27,254,218,107,175, 29,147, 72, 36,127,254,254,251,239,117, -174, 79,230,214, 98, 72, 51,178, 68,246,251,224, 33,253, 94, 25,208,219, 77,234,163,116, 5,199,201, 17,151, 68,123,159,188, 24, - 21,126,244,216,137,207,217,160, 33, 35,114, 98, 15,222,177,244,228, 52,111,110,231, 96, 69,242,159, 90, 73,249, 81,221, 58,251, -251, 14,234,215,153,104,212,184, 17,226, 99,227,253,206,158,143, 24, 47,163,238, 61,210,155,136,223,244, 28,177, 58, 38,166,184, -176, 54, 45,169,136,216,118, 59, 38, 65,205,178, 44,190, 94,241,213, 73,142, 39, 43,103, 87,175,120, 85,204, 66,254,205, 55,223, -192,104, 52,162, 93,112,243,109,248,207,188, 49,150,240,235,189,123,247,156,117, 58, 29,142, 29, 59, 54, 75,163,209,204, 58,126, -252,184, 38, 53, 53,245,115,141, 70,243,219,115,168,221,175,223,184,113,163,115,251,246,237, 41,154, 46,155,223, 52, 52, 52,148, -154, 61,123,182,211,178,101,203,214, 0, 24, 85, 75,225,194, 31, 59,118, 12,191,252,242, 75,238,138, 21, 43,210, 0,192,197,197, -197,227,205, 55,223,116,221,185,115,103,206,234,213,171,211,120,158,135,179,179,179,231,200,145, 35, 93,121,222,178, 67,245,244, -244,108,212,162, 85,240,180,159,183,109,235, 80,148,159,111,248,113,245,198, 40,163, 72,166,243, 9, 10,144,204, 91,176,196,254, -203,249,179,222,167,105,250,110, 90, 90, 90,146,165,137, 84, 42,149,222, 50,153,108,255,236,217,179, 91,132,133,133,137,221,220, -220,144,149,149,133,184,184,184, 22,151, 47, 95, 30,114,240,224,193,233, 70,163,241,245,204,204,204, 58, 43, 19, 60,207, 55, 57, -244,245, 87,110, 50,103, 23,112,102, 51, 28, 91, 6, 87,110,203, 56,115, 28,156,217, 12,206,108,134,215,128, 33,149,145,188,238, -221,187, 55,104, 74,114, 15, 15, 15,117,147, 38, 77,118,204,156, 57, 83, 98, 52, 26,113,235,214, 45, 92,189,122,149,203,206,206, -174,107, 34, 91, 17, 65, 16, 39, 22, 44, 88,224, 25, 22, 22,102,155,155,155, 11,150,101, 93, 14, 30, 60, 56, 57, 36, 36,196,206, -211,211, 83,186,125,251,246,138, 21, 2,156,252,252,252,156, 70,143, 30,109,250,229,151, 95,166, 3, 88, 81, 83,228,170,240, 33, - 55, 79, 67,249,133, 55,109,251, 54, 50, 69,199,195, 63,233,131,191, 28,252,200,202, 72, 86,184,159,159,109, 81,186,213, 12, 27, -187, 22, 78, 69,233, 39,103,132,251,249,109, 57,150,152,104,201,162,233,164,135,135,199,119,253,251,247,127,115,227,198,141,138, -216,216, 88, 69, 80, 80, 16, 56,142, 3,195, 48, 96, 89,182, 98,221, 77, 84,157, 48,184, 38, 40,146,242,188,188, 63,198,205,202, -202,170,242, 62,172,120,215,106,181,232, 59,174,227,115,121,216,114, 28, 39,173,184,174, 25,134,145, 3, 16, 3,176,116, 2,203, - 69, 87,174, 92, 25,241,215, 95,127,141, 89,178,100, 73, 19,141, 70, 51,149,227,184,121,177,177,177, 93, 1, 32, 40, 40, 72, 10, -224,172, 74,165,154,240,193, 7, 31, 76,154, 50,101, 10,198,141, 27, 55, 47, 35, 35, 99,105, 67,239,123,169, 84, 58,255,131, 15, - 62,176, 50,155,205,176,178,178, 2, 77,211,141,159, 37,253, 65, 65, 65,146,252,252,252,125,139, 22, 45, 26, 56,120,240,224,138, - 37,188,148, 23, 46, 92, 88,246,217,103,159,117, 14, 9, 9, 25, 90,147,201, 10, 9, 9, 9, 6,240,165,175,175,111,223,113,227, -198, 81,161,161,161, 40, 45, 45,197,137, 19, 39,230,236,223,191,127, 78, 72, 72,200, 21, 0,243,162,162,162,206,189,236, 38,139, -178,177, 69,220,235,221,225, 23,155, 7, 0,200,252,190,108,105, 72,187,249,223, 8, 33,190,127,131,193,170, 11,157, 78, 23, 50, -107,218, 88,144,100, 89, 45,209,191,145, 55,150,205,158, 72, 28, 58,114, 60,164,142,240,230,106,150,101,155, 56, 57, 57,125,158, -151,151, 39, 95,179,102,141, 60, 61, 61, 61,112,223,190,125,124,116,116, 52, 36, 18, 9,236,237,237,209,163, 71, 15, 89,120,120, -120,227, 43, 87,174,120,239,223,191,127,112,255,254,253,127, 62,122,244,232, 31, 53,233, 58,183, 24,212,196,197,213,245,252, 55, - 75,222,115,106,209,200, 15, 38,179, 25,105,217,233,224, 33,133,210,205, 26, 99,134,180,150,132,182,149,248,175,218,112,250, 28, - 65,190,246,106,118,204,225,152,186,210, 24, 22,162,184,209,189,211, 43,109, 94,235,219,153,244, 15,106, 6,137, 76,241,159, 90, - 84, 72, 8, 90,134,132, 16, 19, 39,150, 52,138,142,138,158,123,236,244,245,217,246, 18, 38,242, 82,148,174,125,205, 37, 45,100, - 21,107,167,189, 62,236, 13, 4, 4, 4, 60,241, 48,175,248, 59, 57, 57, 25, 4, 65, 32, 55, 55, 23, 28, 15,105, 3,242, 6,215, -174, 93, 67,235,214,173,209,167, 79, 31,140, 26, 53, 74,117,240,224,193, 95,215,175, 95,223, 53, 61, 61,125,226,179, 92, 44, 44, -203,134,134,132,132, 80, 52, 77,131,162, 40,228,229,229, 33, 41, 41, 9,126,126,126, 20,203,178,221,234, 48, 26,232,220,185, 51, - 86,172, 88,145,118,225,194,133, 16, 0,232,210,165, 75, 84,135, 14, 29, 92, 87,175, 94,157,118,233,210,165, 54, 0,208,185,115, -231,200,182,109,219,186, 90,122, 76, 10,133,226,157,143, 63,249,204,181, 40,191, 64,111, 46, 41,161,109, 56,150,177,147,139,137, -226,156,188,194, 71,169,118,186,119, 38, 77, 19,205,159,249,233, 59, 0, 44,106,179, 87, 42,149,222,129,129,129, 55,182,108,217, -226,230,236,236,140,194,194, 66,228,229,229,225,198,141, 27,224, 56, 14,225,225,225,178,144, 86,173, 66, 86,173, 94,125, 21, 64, - 39, 75, 76,150,204,217, 5,251,186,150,221, 26, 35, 18,243, 42, 35, 44,199, 70, 13,170,220,103,116, 74,217,226,230,114,185,188, -193,203,250,240, 60,223, 41, 52, 52, 84, 2, 0,211,167, 79, 47,214,106,181,203, 8,130,248, 85,163,209,164,215,241,175,211,231, -206,157,235,209,168, 81, 35,159, 95,127,253, 21,165,165,165, 0,224,214,168, 81, 35, 52,105,210,132, 61,127,254, 60, 2, 2, 2, - 96,107,107,139,243,231,207,227,218,181,107, 8, 14, 14,182,149, 72, 36,111,208, 52, 93,173,193,122,181,127,215,121, 50,113, 96, -151,166,109,223,134,141,157, 10, 91,118,237, 70,220,205,159,187, 24,205,247,231,205,194,249,183, 40, 94,246,118,246, 99,235,153, -190,109,187, 57,251, 55, 31,140, 87,218,220,114, 49,178, 23,146,230,246,110,180, 92, 36, 55,108, 95,184, 74,147, 87,147,185, 82, - 42,149, 43,251,245,235, 55, 98,227,198,141, 14, 0,112,231,206, 29,100,102,102,194,213,213, 21,114,185, 28, 98,177, 24, 34,145, -168, 94, 75,101, 89, 89, 89, 65,163,209,160,162,226,192,178, 44, 74, 74, 74, 42, 23, 13, 95,184, 16,228,194,133,150, 69,155,148, - 74,101, 88, 72, 72,200, 78, 79, 79, 79,175,170,223, 27,141, 70, 76,156, 56, 17, 90,173, 22,193,193,193,161,238,238,238, 70,130, - 32,192,113, 28,178,178,178, 74,239,220,185,211, 59, 35, 35,227,122, 13,181,119,125,102,102, 38, 38, 77,154,132,199,143, 31, 79, -217,177, 99, 71, 10, 65, 16,114,169, 84, 90,177, 93,170, 82,169, 2, 2, 2, 2,190,123,239,189,247,144,156,156,140,248,248,248, - 27,207, 82,169,146,201,100, 90,150,101,221, 24,134,129, 94,175, 71,120,120,184,156,227,184, 44,177, 88,124,191,176,176,112, 76, - 90, 90,154,198,210,114, 70,165, 82, 41,181, 90,237,198,105,211,166,245,239,218,181, 43,238,223,191,143, 99,199,142,225,181,215, - 94, 67,183,110,221, 48,103,206,156, 1,243,230,205,155, 14,160,166,202,192,239,251,246,237,243,245,244,244,172, 92, 18,201,206, -206, 14,239,188,243, 14,198,142, 29,139,163, 71,143,118,254,234,171,175,246,117,237,218,213,237,252, 51,180, 84,252, 27,144,181, -237, 12,191,216, 60, 36, 6, 57,151,181, 14,148, 27,173,138,207,240, 8, 17,156,205,127,179,193, 50,233,117,180,136,228,239,187, -170,130,247,220, 56, 54,173,178,137, 16, 12,127,223, 68,235,232,178,176, 57,143, 98, 29, 3, 43, 25,137,100, 77, 9,238, 38,230, - 86, 39,117,247,169,194,255,147,181,107,215,226,235,175,191,238,167,215,235, 75,147,146,146, 52,165,165,165,218, 49, 99,198, 16, - 98,177, 24,151, 47, 95,198,163, 71,143,208,178,101, 75, 56, 56, 56, 32, 44, 44, 76,210,167, 79, 31,175, 9, 19, 38,188, 5,224, -143,234, 52, 49,124, 56, 37, 73, 33, 14,175, 92, 50,210,137,160,226, 17,255,184, 16,141, 61,219,195,217,222, 11,233, 57,165,136, -188,119, 20,241, 15,255, 68, 99, 79,111, 76,124,179,177,195,183, 63,228, 28, 65,200,196,198,136,122,162,159,215,223,134,132,202, - 37,108,187,133,107,163,193,106, 31,130, 55, 63, 6, 79,103,254,189,112,119,240, 66, 96,107,119, 40,164,174,228,157,216,111,219, -213,150,118, 35,195,127,177,116,241,162,173,173,130,219,160,168,168, 8,235,214,173,171, 52, 86, 60,207, 87,214,184, 59,118,236, - 8,179,217,140,173, 91,183,194,204,149,133,255,107, 59,206,167, 24,221,161, 67,135,221, 60,207, 75,173,172,172, 50, 91,183,110, -237, 51,117,234, 84,209,200,145, 35,161,215,235,223,219,178,101,203,241,204,204,204, 3,245,212, 44,107, 70,121,229,149,176,110, -221,186, 89, 81, 20, 5,154,166, 81, 84, 84,132,180,180, 52, 36, 37, 37,193,197,197, 5,248, 79, 95,152, 26, 53,159, 94, 11,145, -231,121,190, 34,253, 85,141, 88,197,121,177,228, 56, 9,130, 8,116,116,112,180,254,113,213,198,155,174, 50,138,112,241, 82, 19, - 18, 59, 7, 17,105, 99, 43,227, 41, 74,239,227,165,182, 37, 8, 34,176,134,100, 61,173, 73,200,100,178,253,219,182,109,115, 19, -139,197, 96, 89, 22,174,174,174, 72, 74, 74, 66, 97, 97, 33, 74, 74, 74,144,116, 63, 22,190,158,158,248,104,226,187,170, 69,223, -172,222, 15,160,237, 83,133,216,223, 23,227, 54,155,159, 62,230,154, 66,224,176,240, 56,107,138,144, 60,202,200,200,128, 66,161, - 64, 80, 80,144, 77, 68, 68,196,197,140,140,140,244,186, 52,229,114,249, 27,161,161,161,182,187,118,237, 66,155, 54,109, 96,111, -111,143,179,103,207,226,206,157, 59,160,105,154, 44, 41, 41,129,141,141, 13,150, 47, 95, 14,111,111,111, 20, 21, 21, 33, 37, 37, -197, 89, 44, 22,187, 84, 24,146,167, 53, 47, 28, 61,191,184, 32,241,236,188, 76,234,120,248,150, 93,187,241,222,232,145, 80, 50, -137, 23, 29, 27,147,139,251, 13,232, 60,159, 18,123, 13,180,182,109,225,216,164,197, 96, 72,164, 54,152,250,197,151,136,191,123, -216, 81, 87,114,103, 10,107, 78,245, 90,184,106,239, 71,213,164,157, 0, 64,170,213,234,119, 55,109,218,100, 91,233,184, 72, 18, - 98,177,248, 9, 99, 85,177, 24,123, 13,231,244,110, 53,149, 7,208, 52, 13,154,166,193,113, 28,114,114,114, 80, 82, 82, 2, 71, - 71,199,178, 29, 22, 0, 88, 0, 2, 68,141,134,229,110,149,227, 25,179,123,247,110, 47,133, 66,241,183,157, 82, 83, 83, 81, 84, - 84, 4,107,107,107, 56, 56, 56,192,108, 54,131, 97, 24, 24,141, 70,155,110,221,186, 77, 6,112,189, 58, 77,138,162, 62,157, 52, -105, 82,232,145, 35, 71,252,150, 44, 89, 2,154,166, 87,230,228,228,224,189,247,222, 3,199,113, 8, 11, 11,235,200,243,124,220, -180,105,211,202,194, 93,139, 22,153, 75, 75, 75, 63,104,232,181,228,230,230,214,172, 85,171, 86,142,167, 78,157, 66, 88, 88, 24, -140, 70, 35, 38, 79,158,108,247,238,187,239,218, 93,185,114,197,117,205,154, 53,219,211,210,210,122,213,166, 25, 18, 18, 34,206, -202,202,154,209,173, 91,183,233,189,122,245,178,207,205,205,133, 76, 38,195,158, 61,123,240,227,143, 63,254, 69,211,244,220,125, -251,246, 45,221,188,121,115,248,224,193,131,177,121,243,230,105, 26,141,230,107,148, 53,155, 62,173,169,246,242,242,194,237,219, -183,225,232,232, 8, 23, 23, 23, 20, 21, 21,225,218,181,107,184,113,227, 6, 2, 3, 3, 65, 16,132, 99,121,153,198, 60,203,125, - 84, 79, 94,184,102,229, 26,171, 85,174, 93, 0, 96,107,119,211, 22,205,138,175, 86,171, 7, 59, 56, 56, 76,225,121, 94, 84, 80, - 80,176, 73,161, 80,252, 94,203, 50, 65,194, 66,207, 22, 26,172,138,124,233, 6,224,188, 71, 44,138,115,219, 58,198, 59,187, 55, -219,237,236,209,188,236, 36, 50,252,125, 74,230, 24,239,126, 83, 87, 12, 0,180,153,199,149,251, 5,184,157,144,133,219, 15, 50, - 97, 35,175,187,214,237,236,236,140,206,157, 59,227,208,161, 67, 72, 77, 77,181, 89,190,124,121, 19,154,166,233, 65,131, 6,101, -188,242,202, 43, 5, 97, 97, 97, 16,139,197,184,126,253, 58,138,139,139, 65, 81, 20,164, 82, 41, 56,142,171, 49,210,230,246,128, -125,123,220,196, 16, 63, 23, 7, 18,127, 92, 62,142,142,129, 67,161,144,137,145, 83,160, 7, 73, 16,120,248,232, 20, 88,214, 26, -209,247, 31,163, 83, 11,107,116,233, 96,239, 89,122, 58,127, 98, 46,176,193,146, 19, 68,167,159,131,244,149,215, 1,121,115,240, -166,135,224, 76,233,224,197,110,208,234,228,200, 77, 78,193,253,107,191,131,103,116,117,234,164,165,105,126,218,186,109,123,216, -185,177,111,191,205,113, 28, 86,172, 88,113, 46, 33, 33,161,123,213,125,252,252,252,206,206,153, 51,167, 91, 65, 65, 1,142, 31, - 63,254,115, 93, 11,149, 62,141, 70,163, 57, 5,192,169,138,161,245,142,138,138,218,181, 99,199,142, 78,111,189,245, 22,246,238, -221,251,121, 53, 6,171, 86,166, 77,155, 38, 62,116,232, 80, 95, 43, 43,171,117,243,230,205,179, 49,153, 76,208,104, 52,200,204, -204,172,140,182,197,196,196,176, 34,145,232, 74, 29,133,127,181,139, 77, 63,109,176,170,124,103,105,205,187,212,100, 54, 27,173, -189,212,230, 65,131,251,182,188,115,227, 86,188,149,147, 19,217,178, 93,112,179,251, 9,201,145, 68, 89, 19,140, 69,205, 48,158, -158,158, 35, 23, 44, 88,208,210,206,206, 14, 28,199,193,222,222, 30, 57, 57, 57,149,134,210, 84, 82, 12,186,184, 8,183, 83,146, - 16,214,173, 7,250,116,234, 24,244,167,217, 60, 50, 45, 45,237,183,218,116,157, 90,133, 84, 70,174,246,250, 57, 87,126, 63, 42, -185,176,210, 0, 28,109,239, 15,153,141, 53, 90,124, 60,171,193, 55,115,102,102,102,212,169, 83,167,142,134,135,135,247,159, 56, -113, 34,153,153,153,121,140, 97,152,208,236,236,236,123,181,253,159,141,141, 77,227,220,220, 92,148,148,148,192,222,222, 30,107, -214,172,129,155,155, 27,116, 58, 29, 34, 34, 34,120, 79, 79, 79,226,236,217,179,240,240,240, 64, 94, 94, 30,104,154,134, 78,167, -203, 52,153, 76, 53,246,145, 44,111, 6,236,247, 73,111,252, 21,119,243,231, 46, 30, 72,138, 24,254,121,151, 7,209, 55,226, 83, -207,156,190,188,152, 49,200, 83, 11,211, 78,206,104,212, 46,218,101,202,231,139,176,126,229, 2,196, 93, 63,159,239,238, 93,178, -129, 37,140, 63,215, 17,165, 53,196,198,198,218, 70, 71, 71,131, 36, 73,216,217,217,193,218,218,186,114, 97,243, 10,115, 37, 18, - 89, 30,160,175,168,224, 84,152,171,156,156, 28, 60, 76,137,199,190, 51,219, 97,102,204, 46,219, 58,216,101,250, 73, 36,183,139, -154,231,206,206,139, 65, 84, 29, 5,224,166, 81,163, 70,141,244,240,240,176,173,250,125,235,214,173,241,230,155,111,226,216,177, - 99,184,121,243,230, 19, 21,172,156,156, 28, 13,203,178, 53,166, 59, 53, 53,181,144,227,184,240,119,223,125, 55,242,192,129, 3, -118,223,124,243, 77,101,151,130,138,102,209,138,247, 93,187,118, 33, 50, 50,114, 94, 86, 86,214,253,134, 92, 71,238,238,238,129, - 3, 7, 14,188,176, 97,195, 6,135,172,172, 44,228,230,230, 66,171,213, 66, 44, 22,131, 97, 24,248,251,251, 19, 44,203,250,214, -213, 28, 72,211,244,225, 51,103,206,244,109,210,164, 9, 0,192,108, 54,227,242,229,203,152, 56,113, 98,158, 66,161,120, 35, 37, - 37, 69,171, 82,169,230, 28, 57,114, 36,188,117,235,214,104,217,178,165, 50, 59, 59,219, 54, 37,165, 60,156, 91,205,179,130,101, -217,202,252,217,186,117,107,229, 54,131,161,108,201, 73,147,201, 68,180,109,219,214,247,230,205,155, 47,237,224,150,148, 29, 91, -144, 60,251, 67,248, 92,140, 3, 0, 68, 54, 43,235,114,229,115, 62,182,108,135,177, 99,235,165,167, 82,169,156,121,158,127,175, - 89,179,102, 31,135,135,135,187,170, 84, 42, 56, 59, 59,227,206,157, 59,161,199,143, 31, 95,103, 52, 26,127, 96, 89,246, 7, 75, -162,245,207,129, 39,188,200,203, 20,193, 34,202, 19, 71, 16, 35, 70,176,252,222,189,185,233, 65, 82, 90, 42, 82,196, 3,128,137, -214,209,238, 55,117,197,196,136, 17,172,107,243,193,224,193,131,229,202,163, 13, 60, 15,214,194,113, 32,134,251,195,192, 21, 30, -134,155,227, 96,108,222,124, 0,217,217,217,146, 53,107,214,188,114,224,192, 1,207, 49, 99,198, 60,246,247,247, 47,234,209,163, - 7,182,111,223, 14,165, 82, 9,147,201, 4,142,227,106,116,111,182, 78,236,240, 14, 45,253,169,248,148, 59,104,219,100, 24,124, - 85, 97,120,152, 94,132,130, 18, 35,242,138,244, 8, 8,248, 28, 89,249, 58, 20,107, 13,184, 19,247, 43, 60, 85,141, 72, 74,252, - 48, 28, 22, 26, 44,227,195,157, 48, 38,237,134, 68,213, 29,210, 70, 35, 33,118,233,132,212,184,115,184,117,106, 53,210, 30, 92, - 2,207,177,112,247, 10,180,180, 9,103,225,218,181,107,199, 44, 91,182, 76,244,225,135, 31,118, 91,190,124,121,183,140,140,140, -115, 0,160, 86,171,187,189,253,246,219,221,108,109,109,177,116,233, 82, 51,207,243, 11,159, 53,115, 51, 51, 51, 31,171,213,234, - 41,167, 78,157,138,158, 48, 97, 2, 2, 3, 3, 67,226,227,227, 73, 88,208,177,214,223,223,127,162, 84, 42, 29,207, 48, 76,147, -209,163, 71,147,239,189,247,158,141,155,155, 27,146,147,147, 97, 52, 26, 65,146, 36, 36, 18, 9, 98, 98, 98,184,195,135, 15, 23, - 73, 36,146,105, 22, 68, 88,224,226,226,226, 17, 22, 22, 22, 9, 0, 78, 78, 78,158, 28,199,193,217,217,217,179, 83,167, 78,145, - 0,224,232,232,232, 81,157, 17,171,209, 0,211,116,196,227,148,148,128,208, 46,161,170, 11, 55,239, 69,189, 62,100, 96,119, 82, - 68,146,143, 82, 52, 17,174,206, 78,214,151,175, 92, 42,166,105, 58,194, 18, 45,177, 88, 60, 48, 44, 44, 76, 84, 80, 80, 0,181, - 90,141,156,156, 28,164,167,167,195,108, 54,195, 80, 84, 0,186,184, 24,116, 81, 33,120, 93, 41, 18, 35,174, 35,200,203, 67,118, -162,172, 19,252,111,117,213, 56,171,139, 80, 17, 4, 81,249,157,204,214, 6, 86,182,182,149,205, 31,245,120, 56, 14,182,179,179, -155, 81, 82, 82,114, 52, 35, 35, 99,137,201,100,154,186,108,217,178,118, 95,126,249,165,203,140, 25, 51,236,102,204,152,177, 87, - 46,151, 7,167,164,164, 24,107,116,168,165,165, 15,205,102,179, 51, 0,247,211,167, 79,195,213,213, 21,197,197,197, 48,155,205, -208,235,245, 38, 71, 71, 71,121, 94, 94, 30, 12, 6, 3, 76, 38, 19,236,236,236, 16, 25, 25,153,207, 48,204, 31,117, 29,159, 67, - 99,114,177,209,124,127,158, 83, 51,235,116,150,119,238, 90,162,231, 10, 22,174,210, 44, 6,176, 42,220,207,111,139,137, 59,159, - 20,127,247,144, 99, 82,196,217,252,140, 7, 58,191, 31,143, 38,149,212,241,240,229, 8,130,224,155, 54,109,138,156,156, 28, 80, - 20, 5,107,107,107,216,216,216, 32, 48, 48, 16,169,169,169, 13, 54, 88, 85,205,213,169,171, 71,144, 91,170,193,150,149,187,224, -161,244, 34, 1,184,166,103,166,246,158, 48,125, 68,135,199,118,143,150, 61,186, 92,184,188,150,138,206, 45,141, 70, 99,247, 68, -248, 69,173,238,238,232,232,120,134,166,105, 36, 39, 39,227,196,137, 19,221,210,211,211,235, 85,128,164,167,167, 39,242, 60, 31, - 62,100,200,144,237, 45, 91,182,108,204,243, 60, 2, 3, 3, 49,120,240, 96,236,219,183, 15,247,238,221, 67,113,113, 49,119,241, -226,197,109, 26,141,166, 65, 29,114,148, 74,101,211,254,253,251, 95, 90,191,126,189, 99,110,110, 46, 12, 6, 3, 74, 75, 75,241, -251,239,191, 35, 52, 52, 20,114,185, 28,107,215,174, 45,102, 24,102,125,109,230,138,231,249, 67, 7, 14, 28,232,235,231,231,135, -251,247,239,227,226,197,139,112,117,117,133,149,149, 21, 6, 13, 26,228,188,123,247,238,169, 65, 65, 65,171,181, 90,237,226,254, -253,251,131,101, 89,220,188,121, 83, 83, 62,170,176,198, 60,170,177, 92, 49, 24,192,243, 60,204,102,243, 26,146, 36,223, 8, 9, - 9,233, 19, 21, 21,117, 3, 47, 9, 30, 30, 30,205,197, 98,241, 71, 0,144,147,147,131, 66, 14,176,201, 47, 27,116, 91, 84,254, -184,204,207,207,175,124,214,248,251,251,255,169,215,235,103,167,167,167,215, 24,101, 82,171,213,173, 20, 10,197,199,221,187,119, - 31, 51, 96,192, 0,138,166,105, 28, 57,114, 4,235,215,175, 71,120,120, 56,252,253,253,241,249,231,159,219, 27,141,198,153,199, -142, 29,155,113,225,194,133, 99, 37, 37, 37,179,106,211,124, 78, 84,122,145,151,201, 96,241,229,174,177, 44,133,101, 83, 49, 20, -148,215,104, 92,156,156,156,214,179, 44,219, 61, 32, 32, 0, 12,159,133,228,135, 15, 80, 82,192,193,108, 50,130,227,120,240,156, -101,231,130, 43, 60, 12,187, 87,121, 20, 95, 32, 64,211, 52,220,220,220,176,124,249,114, 20, 21, 21,137, 38, 76,152,224,187,104, -209,162, 91, 6,131, 1, 90,173, 22,122,189, 30,122,189,190, 86,131, 37,145, 27, 91,250,184, 55, 65,137,190, 61, 20, 82, 41,242, -138,141, 40, 40, 49, 34,183,208,128,253,135, 70,195,168,215,129, 49,153,192,210, 12,108,220,135,194,223,169, 59,128, 4,139, 38, - 72,171, 12,162,112, 12,232,244,147,160,211, 79, 66,209,122, 14, 14,173,125,235,137,253, 24,198,178, 38,255,204,204,204,199, 7, - 15, 30,252,126,252,248,241,211,134, 12, 25,130, 31,126,248,225,235,140,140,140,182,229, 81,132,175,135, 14, 29,138,152,152, 24, - 92,184,112, 97,227,243,170, 45,240, 60,239,236,228,228, 4,146, 36,161,211,233,140,117,153,171,223,127,255,157, 88,180,104,209, -177, 65,131, 6,117,154, 58,117,170, 66,169, 84,130,231,121,152, 76, 38,164,165,165,129, 36, 73, 20, 22, 22, 98,235,214,173,218, -155, 55,111,242, 82,169,244,138, 88, 44,126, 63, 38, 38, 38,163,174,190, 67,142,142,142, 24, 61,122,180,107,251,246,237, 93,171, -142, 24,124,227,141, 55, 92,219,182,109, 91,249,157,167,167,167,197,233, 51, 24, 12, 91,151, 46,158,215,125,199,206, 61,129, 77, - 3,253, 29,143,158, 56, 27,229,236,108,103,229,235,235, 39, 43, 42, 44, 52,174, 95,179, 82,164,213,106,127,178, 80, 46,200,197, -197, 5,153,153,153, 72, 72, 72,128,209,104, 44,107,194,209,149,194, 84, 88, 8,186,168, 0, 48,232, 33,101, 89, 24,115,179,224, -235,231, 11,252,103,132, 97,237, 79,140, 42,102,234,233, 38, 65,130, 32, 96,101,111, 7,169,181, 53, 40,177,200,226, 62, 88, 74, -165,178, 77,112,112,240,158,205,155, 55, 75, 62,253,244,211, 14,215,175, 95, 95,159,146,146,146, 34, 18,137,122,174, 92,185,242, -198,146, 37, 75,100, 99,198,140,105,186,105,211,166,113, 0, 54,213,114, 14,247, 28, 61,122,244, 77,111,111,111,247,187,119,239, -194, 96, 48,128,227, 56,244,235,215, 15, 0,228, 21,251,197,197,197,233,245,122,125, 86, 76, 76, 76, 73, 74, 74, 10, 13, 11, 70, -253,205,223,144,113,237,147,156, 11,175,171, 84,234,171, 82,153, 79, 35, 82, 23, 57,244,147,225, 30,223,124,251,123,186,225, 88, - 98, 98,201,220,222,141,150,235, 74,238, 78,113,244,212,110,248,254, 72,146, 37, 29,220, 43, 71, 11,186,184,184, 84, 54, 9, 74, - 36,146,138,232, 11,138,138,138,234,106, 34,172,182,240, 46, 42, 42, 66, 81, 81, 17, 30, 60,186,143,156, 18, 13, 78,254,118, 21, - 44,203, 86, 70, 71,212,238,158, 56,245,219, 13,219,110,195,219,205, 46,110, 89,120, 54,255, 14, 34, 44,189, 78, 73,146,252,120, -216,176, 97,160,105, 26,131, 7, 15,198,174, 93,187, 62,110, 72, 13, 61, 35, 35,227, 90, 70, 70, 70,147,132,132, 4, 59,179,217, -252,218,160, 65,131,126,238,223,191, 63,174, 94,189,138,211,167, 79,119, 51,153, 76,241, 44,203,234, 85, 42,213, 50,158,231,221, - 8,130, 88,166,209,104,106, 29,237,220,164, 73,147, 49,182,182,182, 75,173,172,172, 74, 26, 55,110,172,174,136, 92,105,181, 90, - 48, 12,131,180,180, 52,252,245,215, 95,154,163, 71,143,106,120,158, 87,148,150,150, 46, 72, 77, 77,253,189,166,102,193,210,210, -210,131,135, 15, 31, 14,247,243,243,195,249,243,231,177, 98,197, 10, 52,110,220, 24,219,182,109, 67,231,206,157,225,235,235, 11, - 39, 39,167,143,138,139,139, 59,173, 88,177,162,127, 72, 72, 8, 14, 28, 56,128,236,236,236,117,181, 61,159,106,123,206,234,245, -122,240, 60,143, 30, 61,122, 76,252,244,211, 79, 49,104,208,160, 19,109,218,180,105, 31, 25, 25,249,224,223, 94, 72,171, 84,170, -229, 61,122,244,152,209,170, 85, 43,236,220,185, 19,198,182, 97,176,222,246, 7,238, 14, 12, 5, 15, 64,189,237, 80, 89,123,221, -107,101, 3, 58,124,123, 14,199,140, 25, 51,250, 15, 29, 58,212, 27, 64,243, 26, 52,191, 25, 51,102,204,244,183,222,122, 11, 81, - 81, 81,216,180,105, 19,110,221,186, 85, 89,230,153,205,102,196,198,198, 34, 54, 54, 22, 42,149, 10, 3, 7, 14, 36,222,127,255, -253,126,253,250,245,115, 69, 89,183,136,255,239, 40, 86,183,151,169,137,176, 70,215,232,238,238,238,226,232,232, 24,179,126,253, -122,231, 14, 29, 58, 80, 12,195,224,244,153, 51,248,236,195, 9, 8, 31, 56, 5, 6,163, 20,140,129, 0, 43,177,177,236, 23,237, - 6,162,248, 2, 1,206,166, 63, 76, 38, 19, 38,238,146,192,129,200,194,154,183,221, 1,128,208,235,245, 48, 26,141,208,235,245, -208,106,181,208,106,181, 96, 89,182,198,167,100, 73,161, 53, 77,155, 57,164,103,167, 32, 77,115, 23,246, 54,222,224, 73, 47,100, -229,235, 64,192, 13,102, 67, 28,184,242, 27,211,168, 79,131,214,248,108,166,152, 45, 73,170, 38, 50, 99,121,159, 74,150,101,151, -174, 92,185,114,226,250,245,235,101, 83,166, 76,105,179,100,201,146,215, 0,224,189,247,222,107, 35,151,203,177, 97,195, 6, 35, -203,178, 75,159, 83,254, 82, 36, 73,126,252,234,171,175,162,184,184, 24, 49, 49, 49, 71,234,250,135, 57,115,230, 76, 30, 54,108, - 88,167, 69,139, 22, 41, 12, 6, 3,116,186,178,230,207,162,162, 34,104,181, 90,100,101,101, 97,250,244,233, 5, 52, 77, 79,122, -244,232,209,190,122, 24, 61, 28, 62,124, 24, 59,118,236,120, 98,196,224, 27,111,188,225,186,107,215,174,236,181,107,215,166,243, - 60,207, 59, 57, 57,121, 14, 31, 62,220,205,210, 22, 66,141, 70,163, 7, 48,109,201,210, 37,191,126,179,114,165, 91,126, 94, 65, -188, 68,106,101, 80, 88,201,156,102,124,182,152,207,202,202,154,158,157,157,173,179,244, 56, 11, 10, 10,144,148,148, 4, 43, 43, - 43, 72, 36, 18,176,186, 82,112, 90, 45,140, 5,121, 32, 77, 70,200, 88, 22, 78, 10, 25,188,220,221,225,237,102, 89, 95,124,205, -217, 19,248,107,228,192, 39,154, 5, 9,130,192,177,206, 77, 33,181,177,134,220,198, 6, 97, 7, 47,150, 85, 24, 36, 18, 96,205, -102, 75,154,113, 92, 84, 42,213,225,117,235,214, 73,114,115,115, 17, 19, 19, 19,157,146,146, 82,228,232,232,104,107, 54,155,185, - 7, 15, 30,156,138,139,139, 27,232,235,235, 11,158,231,235, 26,253,181,106,255,254,253,189, 67, 67, 67, 25, 95, 95, 95,235,156, -156, 28,239,130,130, 2, 66,163,121,178, 15,115, 68, 68,132,252,241,227,199, 58,142,227, 14,148,155,171, 58, 47,252, 79,134,123, -200,175, 68, 97, 90, 87, 23,223, 86,246,174,173,144,107,190,213,234, 90,116,230,180, 79,134,123,172,253,246,247,116, 3, 75, 24, -127,102,205,169, 94, 34,185, 97,123,125,154, 16,120,158, 71, 68, 68, 4, 46, 94,188,136,139, 23, 47, 34, 57, 57,185,114, 7,123, -123,123,156, 60,121, 18,221,187,119,183,248, 70,209,233,116, 80,169, 84,112,112,112,192,129,115,191,224,199,111,118, 85,118,116, -175, 32, 55, 55, 23, 10,133, 2, 75, 63, 91,109, 51,225,139,225,139,243,145,219,199, 18,109, 79, 79,207, 70,161,161,161, 3,220, -221,221, 81, 80, 80, 0, 87, 87, 87,180,107,215,110, 16, 77,211,190,217,217,217, 13,106,202, 50,153, 76,147,187,119,239,190,100, -250,244,233, 48,155,205, 24, 57,114, 36,146,146,146,246, 36, 38, 38,174,241,241,241,153, 54,101,202, 20,119, 23, 23, 23, 76,158, - 60,217, 26,192,235, 53,233, 52,109,218,244,147, 47,190,248,226,171,177, 99,199,202,204,102, 51, 78,159, 62, 93, 25,165,102, 24, - 6, 41, 41, 41, 88,176, 96,129,166,184,184,184,107,122,122,250, 67, 11, 42,145,211, 15, 30, 60,216, 47, 32, 32, 0,199,142, 29, -195,164, 73,147,254,180,177,177,105, 62, 96,192, 0,111,107,107,107, 68, 71, 71,131,166,105,168, 84, 42,247,153, 51,103, 14,236, -219,183, 47, 78,157, 58,133,197,139, 23, 31, 81, 42,149,171,158,190,230,158, 54,193, 34,145, 8,230,167,250, 52, 82, 20,133, 91, -183,110,161, 71,143, 30,152, 49, 99, 6, 0,224,212,169, 83,118,125,250,244,185,219,181,107, 87,187,243,231,207, 27,255,205,133, -180,181,181,245,248,109,219,182, 33, 33, 33, 1,151, 46, 93, 66, 94, 94, 30, 76, 38, 19,138,184,178,155, 65, 86, 30,185,226, 61, -124,208,121,250,108,140, 26,248, 58, 52, 26, 13, 72,146,116,169,165,194, 55,102,246,236,217,248,235,175,191,176,124,249,114, 20, - 23, 23, 87,187,159,149,149, 21,218,181,107,135,224,224, 96, 36, 37, 37, 1,128,203, 11, 72,242, 75, 25,193,170, 41,234,176,230, -251,239,191,119, 14, 13, 13,165,180, 90, 45, 56,142, 67,167,142, 29, 49,238,237,113, 56,126,224,119,168, 26,117, 7,101,176, 2, - 99,171,176,204, 96,120,253,140,252,252,124,200,100, 50,200,203, 59,148,222, 78,171, 12,239,194, 96, 48, 84,154,171,138,247,218, - 96, 76,210,200,216, 68,214,171,184,244, 22,174, 71,238,128,217,100,130,111,147, 89, 48, 50, 46,176,118,123, 7,122,250, 48,232, -194,178,145,187, 82,187,110,200,202,202, 5, 64, 88, 20,226,172,174,144,231,244,127,239,236,206,177,150, 27,172,236,236,236,156, -139, 23, 47,174,186,117,235,214,156,126,253,250,225,199, 31,127, 92,206,243, 60,250,247,239,143,136,136, 8, 68, 71, 71,175,202, -206,206,206,121, 30,121,171, 84, 42,183,110,216,176,161,191,187,187, 59,246,239,223, 15,158,231,235, 52, 68, 82,169,244,189,105, -211,166, 41, 42,162, 24, 82,169, 20,122,189, 30,153,153,153,160,105, 26, 7, 14, 28, 48,154, 76,166, 79,147,147,147,247,213,231, - 96,120,158,231,219,183,111,143,213,171, 87,167, 93,190,124,185, 13, 0,116,234,212, 41,178,109,219,182,174,107,215,174, 77,191, -126,253,122, 27, 0,104,223,190,253,205,224,224,224,122,205,227,162,209,104,210,110,221,188,246, 80,111, 48,136, 29,157,157,116, -182,214, 82,190,184,164,132,188,125, 59, 74,147,157,157,157, 92, 15,169,216,152,152,152, 22,233,233,233, 72, 73, 73, 1,171, 43, - 5,105, 52,130, 48,234,209,179, 83, 71, 88,129,135, 12, 28, 36,156, 25, 98, 74,132,146,146, 82, 0,136,173, 51,106, 91,165, 64, -168, 48, 87, 4, 65, 64,110, 99, 3,169,173, 13,100, 54, 54, 79, 68,180, 44, 49,151, 86, 86, 86,191,110,218,180, 73,165, 82,169, -240,237,183,223, 66,165, 82, 5, 42,149, 74,157,173,173,173,149,139,139, 11, 2, 2, 2,208,182,109, 91,156, 61,123, 22, 4, 65, -212, 85, 48, 50, 60,207,247,185,116,233,210,244, 43, 87,174,140, 80,171,213,196,216,177, 99, 17, 30, 30, 14,153, 76, 6,189, 94, -143,130,130, 2,252,249,231,159, 4,199,113, 33,229, 6,207, 71, 38,147,237, 34, 8, 34, 45, 57, 57,249,141,167, 5, 55, 46,105, -169, 46,209,115, 19, 72,173,213,235, 93,251,250,182,236,209,183, 23, 26, 53,233,137, 30,125, 83, 1, 96,185,139,248,209,200, 21, -179, 29, 14, 56,218, 17,219,174, 28, 60, 53, 63,172, 95,247,185, 11,233,115,139, 23,174, 43,168, 51,138, 69, 16, 68,101, 97, 75, -146,100,181, 81, 42,138,162, 64,146,164,101,207, 36,142, 77, 11,127,187, 83,229,103, 51,243,127,236, 93,119, 88, 20, 87,223, 61, - 51,179, 59, 91,216, 5,145,190,128, 5,177, 2, 42,210,172, 17,177,196,196, 24,141, 73,140, 37,150, 24, 75,212, 88, 98,137, 26, - 83,176, 98, 52,118,141, 45,177, 36, 81,163,168, 49, 26, 35,106, 16,187,210, 81, 68, 81, 1, 41,187, 75, 83,154,176,125,103,190, - 63, 96, 9, 32,101, 33,250,165,188,115,158,103,159,221, 41,123,230,150, 41,103,206,253,221,123,117,118, 46, 78, 45, 72,147,115, - 5, 0,197,197,197,200,200,200,128, 94,175,135,173,173, 45,244,122, 93,215, 70,188, 84,205, 30, 53,106, 20,161, 86,171, 49,127, -254,124,172, 91,183, 14,195,135, 15, 39,110,221,186, 53, 27,192,220,198, 94,216,206,206,206,235,102,204,152, 49,255,131, 15, 62, - 64, 97, 97, 33,194,195,195, 17, 20, 20,132,111,191,253,214, 62, 60, 60,124,117,175, 94,189, 64, 81, 20,206,159, 63, 15,157, 78, -119,191,129,235,125,214,248,241,227,133,153,153,153,160,105, 26,126,126,126,200,202,202, 66,105,105, 41,114,115,115,177,124,249, -242,236,162,162,162,126, 10,133,226,145, 25, 73, 35,221,221,221,231,180,107,215, 14,127,252,241, 7,102,204,152,241,187, 68, 34, -121,187,160,160, 96,154, 70,163,217, 50,116,232, 80,244,234,213, 11,247,239,223,199,155,111,190, 9,127,127,127,132,135,135, 99, -209,162, 69,191, 89, 88, 88,188,211,192, 56, 88, 15, 34, 34, 34, 58,251,249,249,161,180,180, 20, 37, 37, 37,224,243,249,176,182, -182, 70, 82, 82, 18,218,183,111,143, 69,139, 22, 97,195,134, 13,152, 55,111, 30,243,234,171,175, 26,116, 58, 29,109,234,101,249, -111, 70,105,105, 41,171, 84, 42, 97,101,101,133,163, 71,143,226,246,133, 48,156,153,245, 33, 68,159,175, 3,203,178,200, 90,185, - 24,253, 63,253, 28, 61,226, 83,160, 84, 42,113,224,192, 1,144, 36,137, 26, 29, 80,158,123,182, 21, 21, 21,161, 91,183,110,162, - 66,194,102, 0, 0, 32, 0, 73, 68, 65, 84,136,138,138,194,129, 3, 7,176,113,227,198, 74,183,150,207,231,163, 95,191,126, 24, - 52,104, 16, 30, 60,120,128, 93,187,118,193,202,202, 10, 28,154, 38,176,136, 26,223, 85,220, 25,166,191,191,191, 63,245,236,217, - 51,168,213,106,228,228,228, 32, 45, 45, 13, 98,177, 24,242,220, 12, 4,180,125,134,108, 66,139,196,184,100, 35, 65,241,227, 26, -178,225,117, 58, 29,180, 90, 45, 18, 18, 18,202,187,190,183, 15,169, 12,126,174,136,249,128, 90,173, 70, 68, 68, 4, 43, 22,139, - 33,145, 72,136,250,218,222, 25,131,230,247,139,215,226,135,140, 27,209, 95,112, 62,226, 59,232, 53, 6, 60,211, 88,163, 84,173, - 69,137,138, 15,173,112, 48, 8,226, 10, 72, 74,136, 94,221,218, 34,252,234, 3,181, 81,175, 59,107,158, 42, 48,130,178,233, 10, -227,211,132, 42, 2,171,250, 27, 22, 45,148,194,104,104, 92,175, 96,145, 72,180,110,253,250,245,179,190,255,254,123,203,105,211, -166,117, 48, 61, 44,182,111,223, 94, 34, 18,137,214,253,213, 58,149,201,100,227,220,220,220,150,127,245,213, 87, 46,221,186,117, - 67, 76, 76, 12, 66, 66, 66,126,203,206,206, 62,105,198,155,177,171,173,173, 45,158, 61,123, 6,129, 64, 0,163,209,136,220,220, - 92,100,100,100, 64, 40, 20, 34, 50, 50, 82,219,170, 85,171,227, 77, 73,152, 57, 1,237, 85,123, 84, 54, 6, 98,154,241,253,252, -211,169,237,212,106,149,103, 73, 73,137,129,199,227,241,132,124, 99,106, 99, 56,244,122,253,233, 43, 87,174,188,213,167, 79, 31, - 97,114, 66, 28,116, 69, 69,208, 23, 23,130, 54, 26, 96,227,219, 13,164, 86, 13, 66,171,135,139, 7, 11, 85,161, 4,215, 98, 83, -244,122,189,190, 65, 87,208, 36,176, 72,138,170, 30,119,101,101, 9,129,180, 92, 96, 85, 93, 79, 52,208,174,229,224,224, 96,209, -183,111,223, 1, 62, 62, 62, 96, 89, 22,235,214,173,131, 86,171, 21,232,245,122,232,245,122,232,116, 58,148,148,148,224,216,177, - 99,248,225,135, 31,174, 53,107,214,108,159, 66,161,104, 40,153, 6, 23, 23,151,143, 25,134,113, 48, 24, 12, 58,123,123,123,250, -200,145, 35, 16,137, 68, 32, 73, 18,221,186,117,131, 72, 36,210,200,100, 50, 29, 0,216,219,219,235,215,175, 95,207,155, 60,121, - 50, 93, 27,153,119, 64,135, 5, 70,214, 54, 80, 32,108,229,214,204,190, 43,218,180, 31, 0, 0, 24, 52,116, 18,218,180,107,129, -162,188,132, 54, 90, 77,250, 8,138,120,210,252,199, 27,242,164, 87, 44, 58,127,240, 36, 43, 34, 25,192,247,230,158, 75, 3, 6, - 12,192,171,175,190, 90,217, 28,232,224,224, 0,173, 86, 11,131,193, 96,182,184, 2, 0,211, 32,162,193,193, 32,241, 21,176,175, -187,101, 54,128, 74,123,178,168,168, 8,153,153,153, 72, 79, 79,175,188, 79, 49,172,121,111,215, 50,153, 76,220,166, 77,155,137, - 94, 94, 94, 8, 15, 15, 71, 66, 66,130,252,210,165, 75, 46, 1, 1, 1,112,117,117,253,128,101,217,207, 42, 92, 88,179, 96,103, -103, 39,233,222,189,251,172, 15, 62,248, 0,247,239,223,199,162, 69,139,158,100,103,103,159, 56,125,250,244,228, 79, 62,249,132, - 12, 12, 12, 68,110,110, 46,118,238,220,105,140,140,140,252,166,121,243,230,203,179,179,179,235, 43,199, 84,133, 66,209, 90,173, - 86,227,201,147, 39, 48, 13,201,112,246,236, 89,132,133,133,229, 20, 22, 22,246, 83, 42,149, 15,205, 73, 91,171, 86,173, 44,125, -125,125, 29,147,147,147,113,248,240, 97,232,116,186,207,211,211,211,117, 86, 86, 86, 63,109,223,190,253, 43,119,119,119,155,190, -125,251,162, 87,175, 94, 96, 89, 22,167, 78,157, 66,112,112,240,111, 98,177,248,237,164,164, 36, 93, 3,244, 35, 86,172, 88,177, -194,206,206,238,189,177, 99,199,146,190,190,190,136,142,142,134,209,104,196,128, 1, 3, 42,197,213,217,179,103, 15,158, 61,123, -246, 93, 0,180, 84, 42, 21,253,219,221, 43, 19,212,106, 53,146,147,147,225,232,232,136,118, 1, 61,177,232, 78, 26,174, 92,191, - 1,150,101,209, 39, 49, 13,207,158,149, 98,223,190,125,136,137,137, 1, 69, 81,112,119,119,111,144, 83,167,211,225,225,195,135, -200,203,203,195,240,225,195,241,254,251,239, 99,237,218,181,208,233,116, 88,186,116, 41,158, 62,125,138,221,187,119,227,225,195, -135,224,241,120,144, 74,165,255, 31, 89,173, 83,139,252, 39, 29, 44,160,188,237,155, 97, 24, 40, 20, 10, 68, 69, 69, 33, 45, 45, - 13, 18,137, 4, 42, 3,195,108,189, 25,207,144, 4, 95,110,100,113,149, 53,224,211,134,148,184, 94,175, 39,120, 60, 30,174, 95, -191,142, 71,143, 30,193,170, 29, 91,233, 94,233,245,122,104, 52, 26,148,149,149,129,207,231, 63,187,113,227,198,227,232,232,232, - 54, 60, 30,175,206, 94, 96,185,237,169,253,231, 47,252,177,192,183,155,103,135,129,129,193, 56,125,250, 75, 20, 22, 23,163, 84, -195,195, 51,149, 14,165,106, 22,206,150,109,209,189,171, 15,242,158,104,241, 32, 49, 38, 43,159,182,105,176, 13, 70,111, 36,139, - 14,110,155,214,108,216,187, 51, 32,114,234, 11,109,218, 17, 48,170,156, 74,129, 69,139, 44, 97,101,215, 18,197,207, 84,184,150, -148, 10,189,145, 44, 50,183,208,211,210,210,138, 53, 26,205,170,107,215,174,125,109,234,249,115,249,242,101,164,164,164,172, 82, - 42,149,197,141,169, 64,153, 76, 54, 16,192, 33, 0, 34, 7, 7,135, 28,127,127,127,217,171,175,190, 42, 10, 12, 12, 4, 69, 81, -136,141,141,197,180,105,211,206, 73,165,210,183, 97,198,152, 56, 2,129, 32,167,168,168,168,153, 80, 40,132, 94,175, 71,118,118, - 54,238,223,191, 15,149, 74,133,156,156, 28, 16, 4,161,136,136,136, 80, 53,246, 68, 51,245,208,170,249,144,172, 77, 60, 55,178, - 23, 33, 92, 92, 92, 2,253,187, 7,116,254,102,195, 22,168,202,158, 33,242,198,105, 20, 60,205,199,174, 61,199,187,184,184,184, - 4,154, 27, 76,156,149,149,245,243,241,227,199,231,123,123,121,249,184,183,104,129,219,233,105,160, 25, 35, 4, 70, 35, 40,173, - 26,164, 81, 3,215,206, 44, 72, 82,138,156,236, 18,236, 56, 23,126,167, 98, 84,247,250,211,247,250, 48,140, 73, 47, 2, 65, 16, - 56,247,138, 39, 68, 82, 41,104,169, 4,189,142, 69, 84,138,170,199,107, 22,130,150, 72,209,220,191,225,129, 49,115,115,115,203, -174, 93,187, 22,125,239,222, 61,255,142, 29, 59, 98,217,178,101,200,204,204, 4,203,178,200,205,205, 85,231,229,229,201,159, 60, -121,242,152, 32,136, 19, 10,133, 98, 15,204, 28, 45,156, 97, 24,135, 83,167, 78, 1, 0, 13, 0,127,252,241, 7,156,157,157,209, -172, 89, 51, 20, 23, 23, 99,252,248,241,194, 47,190,248, 2, 0, 16, 27, 27,203, 23,137, 68,117,114, 37,198,221, 95, 95, 80,204, - 22,144,165, 49,111,231, 27,226,186,244, 31,156,133, 65, 67, 63,192,249,211,251, 16, 30,118, 1,118,252,180, 84,163,248,217,239, -121,169,249, 37,202,210,246, 59, 61,253, 38, 83,138,103, 97,187,102, 12, 75,230,185,202,152,163, 75,118,212, 63,112, 47,203,178, -160, 40,234,185,128,246,198,138,171,170, 8, 14, 6,131,175, 64,180,225,243,226,228,217,153,131,157, 29, 93, 43, 95, 46, 50, 50, - 50,144,153,153,137,118,237,218, 33, 45, 61, 5, 2, 1, 29,103,230,121, 63,118,232,208,161,150, 90,173, 22,191,252,242,139,129, - 32,136,161,167, 78,157,138,246,246,246,230, 5, 5, 5, 89,238,219,183,111, 44,128, 61,141,105, 49,146, 74,165,180, 94,175,199, -254,253,251, 33,151,203, 3,115,114,114,146, 88,150,221,249,209, 71, 31,125,235,225,225,209, 46, 41, 41,233,129, 74,165,154,161, - 84, 42, 19,234,107,114, 3,128,194,194,194, 9,175,189,246,218, 81,134, 97, 90,245,238,221, 91, 50,102,204, 24, 43,150,101,225, -225,225,129, 51,103,206, 40,148, 74,165,217, 49, 76,233,233,233, 37, 87,174, 92,201,241,244,244,116,148,201,100,160,105,122,141, -147,147,211, 74,138,162,190,121,243,205, 55,109,142, 28, 57,130,208,208, 80, 72, 36, 18,164,166,166, 42,238,221,187,183,201,201, -201,105,179, 57, 35,184,199,198,198,166, 2, 24,227,239,239, 31,188,113,227,198,207, 73,146, 28,119,238,220,185,202,177,206, 76, -226,202,205,205,109, 66,104,104,232,251,255, 49, 35, 68,175,213,106, 97,107,107,139,188,188, 60,228,230,230,162,101,203,150,232, -217,179, 39,244,122, 61, 78,158,254, 13, 87,174, 92, 1,203,178,176,179,179,131,149,149, 21,226,227,227, 1,160,190,222,195,122, -157, 78, 7, 27, 27, 27, 20, 22, 22, 34, 62, 62, 30, 14, 14, 14,152, 55,111, 30,180, 90, 45,142, 28, 57,130,184,184, 56,144, 36, - 9,123,123,123, 88, 90, 90, 34, 46, 46,174, 33, 78, 14,141, 21, 88, 20, 69, 93,188,120,241,226,187, 93,187,118,229, 61,120,240, - 0, 15, 30,148, 95,111, 42,149,202,192,163, 16,154,123,251,228,152,122,254,222, 25, 85,198,202, 16, 8, 4, 59,222,125,247,221, - 25,147, 38, 77,194,204,153, 51, 65,146, 36,190,143,213, 32, 35,131,129, 78,167, 67, 78, 78, 14,110,223,190,205,250,251,251, 19, - 12,195,232,250,245,235, 55, 37, 38, 38, 38,128,162,168,226,186, 56, 17, 26,106, 52,116,126,115,248,246, 29,123,174, 79,156, 56, -209,102,216,240,237,136,189,155,136,194,210,242, 86, 38,103, 59, 9,186,119, 92,136,220, 39, 26,132,253,126,186,128, 49,168,223, - 65,226,207,250,250,210, 9, 0,121,101, 42,135,157, 7,142,175, 59,124,236,196,148,169, 19,198,136,250,245,155, 0,126,201,109, - 24,159,196,192,185,125,111, 16,148, 5,110,197,199, 34,225, 97,166,186, 76, 77,237, 41,214,169, 22, 54,196, 89,205, 75, 39,201, -173,187,119,108, 89,125,246,124, 4,165,211,233, 48,228,181, 1, 70,146, 36,183, 54, 80, 29,207,113, 90, 88, 88, 28,142,143,143, -183,209,104, 52,200,202,202,106,211,161, 67, 7,176, 44,139,244,244,116,108,218,180,201,112,230,204,153,237, 34,145,104, 81, 61, -111,136,213, 56,245,122,253,161,253,251,247, 47,249,248,227,143, 69,185,185,185,184,119,239, 30, 74, 75, 75,161,211,233, 16, 19, - 19,163,214,235,245,135,205, 56,175,158, 75,167, 73, 96,217,216,216,184,116,239,222,221,212,139,208,133, 97, 24, 52,111,222,220, -213,223,223, 63, 26, 0,154, 53,107, 86, 87, 47,194, 58,203, 83, 46,151, 95,138,136,184,130,253,123, 54, 64,167,211, 64, 41, 47, -119, 26,242,159, 20,161, 1,113, 85,147,147, 85,171,213,111,111,220,180,233,230,244, 9,227,156, 94,233, 63, 0,153, 9,241,208, - 62,205, 3,105, 52,128,207,242, 80,150, 43, 70, 78,206, 51,172, 62,115, 33, 87,165, 86,215, 38, 90,107, 77,103,101,179,160,149, - 37,132, 82, 41, 4, 21,174,149,105,155, 64,106, 9,190, 68, 10,138,166,107,107,242,122,142,179,172,172,236,157,169, 83,167, 38, -156, 57,115,166,249,152, 49, 99, 48,108,216,176,216,194,194,194,160,130,130,130, 18, 51,175,253,231, 56, 73,146,204, 29, 50,100, -136,131, 86,171, 53,140, 26, 53,138,151,159,159, 15, 83, 23,251,146,146, 18,252,254,251,239,232,216,177,124,214,153,196,196, 68, -120,122,122,214,201, 57,101,209, 29, 57,128, 21,159,188,235,242,205,205,248,236,217, 0,214,180,105,231,138,240,176, 11,184, 18, -126,125,113,143,206,204,150, 55,198, 6, 44, 23,245,127,111,161,167,239,100, 74,106, 37,195,129,227,199,168,187, 49,223,173, 82, -151,222,113,199,142,227, 11,235, 74, 39, 65, 16, 96, 89,182,154,184,226,241,120, 40, 43, 43, 51, 87, 92,213,125,109, 18, 96,139, -189, 10, 62,159, 56,111,100,207, 63, 14,223,178,148, 72, 36,149, 49, 63,109,219,182, 5,143,207,195,247, 39,182,150, 22, 22,230, -127, 97, 14,167, 68, 34,249, 56, 40, 40, 8, 41, 41, 41, 72, 72, 72, 56,166, 84, 42, 19, 88,150, 61,150,154,154, 58, 42, 32, 32, - 0, 63,255,252,243,199,245, 8,172, 90, 57, 77, 35,214, 87,184,189, 79, 1, 64,169, 84,198, 3,232,241,232,209,163, 70,229,189, - 98,176,208,222, 21,229,154, 57, 98,196, 8, 43,131,193,128, 10,241,108,219,200,115,137, 81, 42,149,155, 35, 35, 35, 67,186,117, -235,134,209,163, 71, 15,138,142,142, 30,228,237,237, 13,119,119,119, 20, 20, 20, 32, 34, 34,226, 71,134, 97, 62, 82, 42,149,106, - 0,108, 61, 2,176,214,188, 71, 69, 69, 61, 4, 48,222,199,199,231, 61, 30,143, 7, 43, 43, 43, 74, 46,151, 83,231,206,157, 3, -128,169,161,161,161,198, 38,213,123,211,241,210, 57, 9,130, 88, 58, 97,194,132,157,211,166, 77, 19, 5, 4, 4,160,168,168,168, - 82,244,159, 57,115, 6, 21, 61,177, 97,107,107,139,135, 15, 31,226,196,137, 19,218,162,162,162, 77, 52, 77,175,169,143,115,252, -248,241,213, 56, 77,226,237,244,233,211, 48,117, 34,177,181,181,197,131, 7, 15,112,252,248,113,117, 81, 81,209, 6,173, 86,187, -246, 37,231,253,127, 75, 96, 61,125,250,116,206,146, 37, 75,130, 62,252,240, 67, 91,149, 74, 69,217,217,217, 65,161, 80, 24,194, -194,194,158,150,148,148,204,105,204,193,110,220,184, 49,243,141, 55,222,216,180,119,239,222,221,187,119,239, 14, 28, 61,122, 52, -198, 15, 25,130, 25, 61, 37,208,104, 52, 32, 8, 2, 97, 97, 97,247, 47, 94,188,216,134,166,105, 77,112,112, 48, 3,224,102, 67, -188, 79,238,156,122, 64,117,126, 43,112,203,214,111, 67,125,252,122,180,106,237,214, 90,216,187, 69, 51,232,244, 70,228,228, 62, -193,165,235,119, 53, 15,238,198,103, 50, 58,237,200,188,164,134, 71,113, 7,128,164, 36,232,128,146, 57, 30, 30,150,203,214,238, - 56,184,227,135,163,199, 70, 76, 25,253, 54,207,183, 75, 16,210,178, 79,226,114,244, 69, 67, 65, 9,123,162, 68, 75, 77, 79, 74, - 42, 41,104,108,193,203,229,114,181,136,207, 22,169,213,106,155,180,180, 52,228, 40, 21,197,114,185, 66,221,148,102, 55,141, 70, -131,148,148, 20, 92,184,112, 1,177,177,177,184,118,237,154,238,220,185,115,123, 73,146, 92, 85,207, 64,147,181, 95,217,157, 59, -127,253,221,119,223,189,107, 52, 26,221,251,245,235, 39,178,177,177, 65,126,126, 62, 34, 35, 35,181,113,113,113, 41,157, 59,119, - 94,219,212,147,205,201,201, 9, 35, 71,142,116,240,245,245,117, 48,245, 24,108,209,162, 5,222,121,231, 29, 7,111,111,239,202, -117, 45, 91,182, 68, 99,134,106,112,113,113, 9,236,215,239, 21, 76,156,252, 9, 84,170,103,184,121,253, 52, 10,159,230,227, 70, - 84, 50, 52, 58, 4, 54,166, 59,124, 69,239,205, 30, 43, 55,109, 57,254, 90,119,127,143, 14,206, 78, 66, 91,183,214,144,216, 59, -225,233,147, 39,184, 25,255, 72,191,237,252,165, 59, 42,181,250,109,115,123,122, 50, 12, 83,217,203,205,115,246, 98,144, 36, 89, - 57, 11,130,105,187,149, 95, 31,144, 60, 62,140, 44,160,211,233, 26,116,239,148, 74,101, 22, 65, 16,239,204,154, 53,235,143,253, -251,247,147,253,250,245,235,246,235,175,191,254,165, 73,115,229,114,185,107,133, 43, 90,108,101,101,197,251,224,131, 15,160,215, -235, 81, 86, 86,134,226,226, 98, 60,121,242, 68, 51,119,238, 92, 33, 0,208, 52,173,127,237,181,215, 26,188,127,108, 12,149,171, - 63,121,215,101,139, 29, 63,109, 84, 81, 94, 66, 27, 59,126, 90,106,143,206,204,150,141,161,114,181,131,117,217, 74,121, 94, 68, -178,226, 89,216,174, 3,199,143, 81, 19, 70,188, 99,148, 73, 31, 44,182,107,129,163,102,221,188,106, 8,172,166, 58, 87,207,221, - 79, 18, 17,155, 37, 73, 9, 9, 26, 25,240,217,202,249,235,165,118,246,118, 48, 24, 12, 72,205, 72,193,222,227,219, 74, 75, 52, - 5,171,158, 38, 33,218, 28,174, 54,109,218,184, 81, 20,133,147, 39, 79, 2,128,105,104,131,109,191,255,254,251,168,177, 99,199, -162,101,203,150,158, 12,195, 8,235, 27, 70,163, 54,247, 78,175,215, 55,186, 25,189,193,182, 25,130, 72,137,143,143,119,113,113, -113, 33, 14, 31, 62,252, 76,167,211, 5, 55,225, 26, 95,255,219,111,191,189,194,178,236,107, 62, 62, 62,104,213,170, 21, 0,224, -238,221,187,184,114,229,202, 33,185, 92, 62, 17, 47,102,114,103,150, 32, 8, 20, 23, 23,155,198, 53,209, 73,165,210,255,228,164, -209, 10,133,226, 7,131,193, 16, 22, 28, 28,252,101,219,182,109, 63,154, 58,117, 42,213,161, 67, 7, 20, 21, 21,193,202,202, 10, - 50,153, 12,114,185, 28, 63,252,240,131, 49, 55, 55,119, 47, 73,146,203,148, 74,165,162,169,156,205,155, 55,135, 76, 38, 67, 86, - 86,150,137,115,183, 94,175, 95,158,159,159,159, 3, 14,141,187,166,204,217,169, 98,152,134,205, 70,163, 49,200,228,106, 61,125, -250,116, 78, 78,121,196,120,147,212,253, 27,111,188,209, 54, 63, 63,127,183, 78,167, 11, 28, 54,108, 24, 70,143, 30,141, 55,223, -124, 19,163, 71,143,166, 76,174,213,175,191,254,122,175, 81,111, 12, 21,147, 61,147, 20, 61,148,101,217,174, 0, 8,130, 36,205, -153,236,185, 65, 37,222,205,195,210, 93, 44,100,246,136, 5, 76, 31,149,150,188,170,210,144, 83,226,146, 74, 82,254,202,155, 77, -197,196,206, 63, 1,128, 70,207,142,203,202, 82,158,111,108,121, 86, 52, 17, 30, 38, 8,130, 98, 89,118, 43,203,178,135,101, 50, - 89,138, 57,182,123, 77, 78,150,101, 73,160,124,112,209, 11, 23, 46,124, 73, 16,196, 56,141, 70, 99, 47, 20, 10,243, 88,150,253, -113,224,192,129,203,183,108,217,162,175,231, 6,205,212,149, 78, 87, 87,215,131,206,206,206,237, 43,142, 83, 45,230,202,244,109, - 90, 95, 49, 30,209, 35,185, 92, 62,214,220,242,116,111,227, 18,230,238,230,242,170,187,155, 51, 0, 32, 37, 77,129,148, 52,249, -185,148, 84,249,224, 38,214, 81,229,100,207, 68,197, 80, 12,172,121,147, 61, 87,227,244,244,244,140,166, 40,202,181, 49, 23, 37, -195, 48,138,196,196, 68, 31,115,210, 41,147,201,198,180,104,209, 98,141, 66,161, 56,158,149,149,245,201,139,120,243,150,201,100, -189, 72,146, 60,195, 48,140,184,166,195,101, 18, 97,117, 4,185,215,201,249,245,103, 94, 95,244, 14,124,101,196,181, 75, 87, 78, - 44, 90,157,184,162,234,182,153,111, 53,159, 52,118,230,156,181, 7,183,111,254,116,251, 47, 5,123, 27, 74,103,151, 46, 93, 34, - 0,180, 55,185, 89,245,193,104, 52, 42, 18, 19, 19,253,154,226, 58,216,116,129,191,181,196,110,133, 86,167,243, 38, 9,176,124, -154,142, 47, 44,204,255,162, 14,113, 85, 43,167,139,139,203,154,118,237,218,205,121,244,232,209,161,172,172,172, 15,171,148,241, - 55,173, 91,183,158,153,153,153,185, 45, 43, 43,107,161,185,117,228,230,230,102,229,237,237, 93,176,108,217, 50,242,171,175,190, - 66,100,100,164,141, 92, 46, 47,120, 17,245,222,178,101, 75, 39,145, 72,116,128, 97, 24,119,163,209,184, 61, 53, 53,117,125, 83, - 56, 61, 60, 60,232,194,194,194, 57, 45, 90,180,152,231,232,232,232,152,147,147,147,158,145,145, 17,146,157,157,253, 93, 35,196, - 85,131,117,228,227,227,163, 1,202,167, 19, 51, 51,222,234, 95,233, 96,213, 56,159,220, 25,134, 89,229,237,237,253,238,164, 73, -147,136,164,164, 36,156, 63,127, 30,143, 31, 63, 62, 81, 17,207,247,224, 69,112,134,133,133,177,233,233,233, 71, 73,146,252, 92, - 46,151,167,252, 63,230,157, 67, 35, 79,148,122,241,198, 27,111,180, 13, 8, 8,136,232,210,165, 11,211,165, 75,151,146, 23,193, -249, 50,210,249,167,134,179,147,188,104,206,151,145,206,166,112,178, 44, 75,254,149,207, 63, 33,239,237,218,181, 99, 97,254,252, -107,255,186, 58,250,183,114,238, 88,217,197,249,214,133,247, 54,238,249,186,243,115,147,151, 7,207,106,110,249,199,201,183,215, - 6,207,106,110,249, 31, 45, 79,178,137, 47,184,157,107,127, 49,107,177,243,173,183,222, 50,182,104,209, 98,247, 63, 60,239, 68, -171, 86,173,132,220,117,244,226, 57, 29, 29, 29,253,100, 50,217, 41,153, 76,118,202,197,197, 37,224, 5,115,254,226,228,228,228, -243, 55,229,157,195,203, 56,249,222,124,243, 77,135,183,222,122,203,134,187,240, 56, 78,142,147,227,228, 56,235,231,148,201,100, - 98,174, 60, 57,206,255, 32,231,127, 10,188,127, 74, 66, 78,157, 58,149,203, 85, 7, 7, 14, 28, 56, 52,140,198, 12,237,192,129, - 3,135,191, 7, 68, 61, 42,180, 49,109,171, 77, 81,178,119, 56, 78,142,147,227,228, 56, 57, 78,142,147,227,252,159,227,108,136, -155,139,237,122, 73,194,139,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,255, 61,206,255, 20, 72,174, 8, 56,188,108,108,153, - 12,151, 45,147,225,242,178,246,231,192,129, 3, 7, 14, 28,254,105,224,253,215, 50,228,235,235,235,201,178,236, 88,130, 32,222, - 5, 0,150,101, 67, 9,130, 56, 24, 19, 19, 99,214, 8,180, 34,145, 40, 91,173, 86, 59, 84,252,206, 85,171,213,178, 42,155,137, - 42, 31,160,188,183, 90,213, 79,173,112,115,115,203,214,104, 52,230,204,175, 23, 71, 16, 68, 44,195, 48, 49, 82,169,244,234,195, -135, 15,147,205,205,247,192,129, 3, 63,146, 72, 36, 95,168, 84,170,181,231,206,157,219,252,255, 80,212,221, 91, 56, 59,237,211, - 27,116, 76,118,238,211,165, 0,106,157,134,103,251, 36,132, 16, 44, 22, 86,252, 94, 55,115, 47,150,212, 71,218,216,253,235,129, - 31,159,207,255,216,209,209,241,245,172,172,172,104, 0,159,130, 27,133,152, 3, 7, 14, 28, 56,252, 19, 5, 86, 15, 31,155, 14, - 4,163, 91,200,167,216, 87,244, 70,226, 10, 75,210,235,110,198, 62, 77,254, 43, 9,144,201,100, 45, 8,130,232,199,178,172, 7, - 73,146,183, 25,134, 57,167, 84, 42,159, 52,134,195,199,199,167, 5,128,209, 0,198,116,239,222,189,243,244,233,211,209,174, 93, - 59,168,213,106, 68, 70, 70, 46,254,233,167,159, 22,179, 44,123, 7,229, 83,202, 28,142,141,141,205,172,139, 75,173, 86, 59,152, -198,102, 34, 8,194,225,221,119,223,141,172, 50, 9, 47, 97,154, 92,150,101,217,155, 0,110, 16, 4,113,253,231,159,127,206,234, - 96, 47,234,209,186,133,253, 27,103, 99, 50,150,214,228,212,104, 52, 14,113,167, 78,128, 53, 24,241, 76,158,129,182,111,143,174, -220,118,254,237, 1, 96, 75,139,193, 23,210,113, 65,191, 94,143, 5, 16,147,145,145, 17,219,170, 85,171,228,250, 56,107,162, 91, -183,110,203,131,131,131,237,134, 13, 27,246, 49,128, 58, 5, 86, 99, 56,235,129,176,135, 95,215,139,167,142, 29, 22,129, 32,241, -214,136,119, 15, 93,139,185, 51, 30, 64,181, 9,160,183, 79,132, 35, 65, 96,225,244,185,211, 41, 0,248,118,211,142, 79, 55,190, -143, 45,159,252,132,108,103,103,231, 32,150,101, 63,173, 40,231,181, 10,133,226,226,246,137,112, 4,176,104,250,220,233, 4, 0, -236,216,180, 99,225,246,137,216, 60,115, 63, 26, 59,192,221,140,137, 19, 39,110, 89,181,106, 21, 85, 49, 8,223,107,158,158,158, - 29,138,139,139, 61, 1,112,193,193, 28, 56,112,224,192,225,239, 23, 88, 94, 94, 86,214, 98,146,157, 39, 22,176,163,251,245,106, -231,246,230,235,189,136, 54,109,219, 32, 57, 41,217,253,226,165,168, 15,132,212,221, 52,149,150, 56,172, 98,136, 13,137,137,245, -207, 31,246,249,100,232, 13,134,242, 99,242,120, 48, 30, 56,231,122, 34, 40, 40,200,109,210,164, 73,240,241,241, 65,116,116,116, -208,209,163, 71,231,252,246,219,111, 81,122,189,254,140, 80, 40,140,104,104,132, 99, 31, 31,159, 53, 46, 46, 46,159,206,159, 63, -159,240,243,243,131, 80,248,231,176, 43, 82,169, 20, 3, 6, 12,192,128, 1, 3,144,157,157,221, 57, 34, 34,162,243,193,131, 7, - 67,124,124,124,214,198,198,198, 46, 54,167,128,190,248,226, 11,223, 90, 86,135, 17, 4,241,136, 36,201, 24, 15, 15,143,172,182, - 78,146,142,118, 54,214,167,191, 94,181, 12,103, 95,157, 88,167,112,249,101,112, 47, 0,168, 38,176,116,249, 57, 16, 89, 74,227, -104,177, 56, 22, 64, 12,128,216, 86,173, 90,197,153,203, 9, 0,129,129,129,194,251,247,239, 19, 44,203, 34, 32, 32,192,134, 32, -136,100,146, 36, 55,159, 61,123,118, 71,213,253, 26,195,217,144,123, 21,188,112, 38,157,159, 18,135,123,215,207, 97,184,175,139, - 40, 54,241,254, 74,181, 86,127,172,190, 63, 17, 4, 73,238,143,182, 91, 12,228,206, 97, 24,230,139,164,164,164, 64, 0,240,240, -240, 16, 0,184,120, 32,178,249,144,137,189,138,254,202, 36,159, 52, 69, 81,219,247,238,221, 59,121,252,248,241, 72, 79, 79,199, -213,171, 87, 33,149, 74,177,124,249,242,214,243,231,207, 15, 49, 24, 12,115,184,203,158, 3, 7, 14, 28, 56,252,173, 2,171,143, -143, 69,100, 80,207,214,190,195, 6,247, 34,219,121,120,130, 22, 90, 84,110,235,226,227,131, 46, 62, 62,196,212,169, 37,109,226, - 99,227, 63, 63,251,199,173,207,154,209,134,152,171,177,101,117, 14,122,102, 48,128, 23,178,234, 32, 0,224,192,158,177, 84,114, -114,178,155, 88, 44,174, 42, 20, 16, 24, 24, 72,134,132,132,116,191,120,241, 98,247,195,135, 15,235,244,122,253, 38,133, 66, 81, -223,212, 25,159, 30, 61,122,148,160, 40, 10, 20, 69,213,185,147,147,147, 19, 6, 13, 26, 4, 39, 39, 39, 98,225,194,133,159, 2, -168, 85, 96,137, 68,162, 92,130, 32, 28, 0,160,121,243,230,198,224,224,224,120,182, 2, 0,192, 48,204, 77,138,162,110, 16, 4, -113,243,196,137, 19,114,119,103,145,139,148, 22,158,219,189,115, 43,244,197, 57,117,142,227, 85,166,200, 50,169,140,106,235, 5, - 18,139, 56,129, 68, 18, 43,144, 74, 99, 0,196, 18, 4, 17,103, 46,167, 73, 92,137,197,226,203, 59,119,238,108, 14, 0,179,102, -205,178, 46, 43, 43,179,158, 50,101,202, 98, 0,149, 2,171, 49,156,245,192,250,149,158,126,143,223,121,243, 53, 43,159,238,125, -112, 51,244, 91, 20, 22,150,162,180,164, 12, 12,195, 60, 55,243,239,204,253,200,217, 62, 9,235,190,221,184, 99, 17, 65,146,132, -247,224, 79, 49,216,134,157,157,255,227,143,137, 0,248, 2,129,160,162, 72, 8,158,139,139,139,179,165,115,135,117,237,250,116, -196,142,205,219,193, 50, 12, 11, 96, 93, 35,220, 43, 7, 75, 75,203,147,231,206,157,235,238,239,239,143,155, 55,111, 34, 37, 37, - 5, 51,103,206,212,206,156, 57,147,158, 48, 97, 2, 49,111,222,188, 89,107,215,174, 13, 5,112,141,187,244, 57,112,224,192,129, -195,223, 38,176, 68,180,209, 63,120, 75, 60,140,165,143,192,234, 51,192,234,178,159,219,199,194,186, 5, 58,121, 59,194, 66, 96, - 79,222, 78,218,232, 95, 99,115,189, 93, 45, 77,226, 42,116,189,179,151,170, 84, 73, 3,128, 88, 34,211,189, 51, 79,158,232,239, -239, 15,123,123,123,250,250,245,235,243,128,106,115,147,213,228, 36,180, 9,209,184,247,102,111,180,189,247, 20, 22, 22, 22, 48, - 61,184, 77, 72, 78, 78,198,229,203,151,145,158,158, 14,119,119,119,224,249, 17,148, 43, 57,213,106,181,211,224,193,131, 35,214, -174, 93,219,119,205,154, 53,183, 15, 29, 58,212, 15, 64, 89,173,238, 94, 11, 43,107,198,192,158,219,179, 99, 35, 31,218, 82,155, -251, 81,215,234,204,187,219,155,239, 96,122, 97,121,211,227, 17, 79,103,136,172,164, 16, 74, 45,227, 6,133, 69, 85, 58, 87, 4, - 65,196,153,203, 25, 20, 20,244, 1,143,199, 91,170,211,233,154,237,218,181,203,218,218,218,154, 60,121,242,164,110,231,206,157, - 37, 52, 77,107, 9,130, 88,221,148,116,214, 7, 62, 69,173,248, 38,120,161,149, 5,105, 64,236,153, 31,145,149,158,129,132,135, -114,253,207, 87,238, 26,181,122,227,164,218, 56,103,238,197,146,121,111, 9,246, 69, 43,221, 79, 13,253,106,102,251,149,195, 28, -161,211,233,246,228,229,229, 97,202,148, 41, 96, 24, 6,125,250,244,233,205,178,172,124,246,236,217,112,119,119,199,158, 95, 31, -148,241,138,111,245, 59, 24, 94, 18,109,102, 58, 59,183,106,213,234,220,197,139, 23, 29, 93, 92, 92, 16, 17, 17,129,236,236,108, -200,100, 50,204,156, 57, 83,176,102,205,154, 3,197,197,197, 35, 87,173, 90, 37,186,115,231,206,225,176,176,176, 22, 40,143,153, -123, 25, 93,129, 57, 78,142,147,227,228, 56, 57,206, 23, 12,150,101,253, 1,216, 3,200, 35, 8, 34,170,234,114,197, 46,246, 21, -223, 53,151,243, 43,158,249, 85, 39, 47,207,175,120, 6,216, 3, 48, 2,136, 36, 8,162,224, 69,167,217, 36,176, 2, 1, 68, 0, - 88, 6, 32,184,230, 78, 58,121, 4, 4,173,223, 6, 68, 94, 96,181,143,192,104,229, 96,249, 14, 40, 45, 19, 33,255,113, 58,238, -221, 12, 5,107, 40,107,248, 96, 60, 24,182,110, 26,203,179,180, 0,104,161,189,174,164,164, 4, 18,137, 4,170, 82, 37, 61, 97, - 74,165,179, 69, 95,188,120, 17, 49, 49, 49,112,118,118,110, 80, 4, 2, 0,171, 45,111, 69,212,106,181,208,106,181,200, 30, 18, - 0, 73,143,190, 40, 24, 55, 19, 23, 46, 92, 64, 94, 94, 30,104,154, 6, 77,211, 48, 24, 12, 13,166,147,172,152,137,215,100, 90, -213,182,143,139, 11, 68, 70,189,254,244,214, 13,171,173,172,164, 22,142,209,231,126, 65,122,122,182, 89,133, 46,144, 88, 64, 32, -182,136, 19, 72,196,213,196, 85, 99, 56, 41,138, 90,126,236,216, 49, 23,141, 70, 3,154,166, 17, 26, 26,170,219,191,127,127, 98, -105,105,233, 43,177,177,177,170, 23,145,206,154,176,181,183,255,237,237,247,167,205, 92,249,225, 32,168, 74,213, 56,113,229, 46, -254,184,157, 54, 12,192, 85, 0,165,117,253,111,195, 47,218,135,206,206, 69, 3,166, 76,153, 18,119,252,248,113,187,111,190,249, - 6, 70,163, 17, 6,131, 1, 6,131,161,242,183,209,104,196,161, 67,135,112,245,214,221,217, 74,101, 73,180,153,201,114,118,115, -115,187,112,235,214, 45,123, 11, 11, 11,156, 63,127, 30,133,133,133,152, 49, 99, 70,165,115, 85, 88, 88, 56,122,199,142, 29,239, - 60,126,252,248,155, 43, 87,174, 60, 1, 64, 1, 48,128, 3, 7, 14, 28, 56,252,147, 80,159, 22,177, 39, 8,226, 52,203,178, 67, - 89,150, 29, 8, 64, 96, 90, 6, 0,130, 32, 78, 87, 60,183,171, 45, 47, 94,188,248,179,144,144,144, 68,211,178,105,159, 37, 75, -150,120,173, 89,179,102,117,207,158, 61, 15, 95,191,126, 61, 21,192, 75, 19, 88, 17,168,103, 94, 44,205,163,159,160, 73,253, 25, -180, 44, 8,130, 54,163,192,183,235,137,204,251, 17,136,187,176, 1, 89, 15,174,130,101,140,112,108,209,169,193,131,173,252, 14, -124,153, 76, 22,163, 80, 40, 16, 27, 27,139, 71,143, 30, 65, 36,122,174,101, 9,127,252,241, 7, 0,192,209,209,209, 60,193,226, -223, 27, 45,226,149,200,244, 46,239,240,215, 34, 94, 9, 0, 88,189,100, 9, 4, 2, 1,104,154,174,220,215,104, 52, 54,200, 71, - 84, 68,181, 87, 52, 11,214,214, 59,144, 16, 25, 44,143,126,181,248,227, 86,110,238,237,156,111,253,118, 4,169,169,114,228,228, -152, 87, 63, 66,169, 36, 78,104, 41,137, 21,136,255,108, 22,108, 2,231,145,145, 35, 71,126, 48, 98,196, 8,113,143, 30, 61,132, -223,127,255,125, 97, 77,113,245, 87,211, 89, 21, 78, 78, 78,131,223,120,227,141,223,166, 78,157,138,225,175, 13,196,216, 62, 30, -108, 86,110,145, 10,192,249,138, 55,128,122,161, 80, 40,228, 0, 6,189,253,246,219, 63,121,121,121,121,176, 44,139, 78,157, 58, - 97,248,240,225, 56,118,236, 24,238,222,189,139,146,146, 18,221,149, 43, 87, 54, 41,149,202,189,102, 38,203,162,121,243,230,103, -195,195,195,237, 45, 44, 44,112,238,220, 57,148,149,149, 61,231, 92,173, 94,189, 90,148,150,150,182, 45, 44, 44,172, 53,202,135, - 38,225,196, 21, 7, 14, 28, 56,252,243, 80,175, 22, 49, 9, 39,150,101,135, 86, 21, 76, 53,133,150,233,183,105,191,144,144,144, -161, 85,197, 23, 0,172, 89,179,102,117,149,229,178,151,145, 25,147,192,234, 87, 33, 36,250, 1,184, 84,195,150, 43,255,193, 24, -160,147,159,135, 78,126, 30, 22,222, 75,113,114,203,184,106, 68,230, 56, 67,181, 65,173, 86,131, 47,176,213, 29,216, 51,150, 6, - 0, 35, 43,209, 61,119,236,134,173, 67,179,143,103, 78, 58, 9,130, 32,171,240, 62, 39, 30, 92, 93, 93,215,247,236,221,189, 79, -187, 46, 1, 22,183,206, 30,199,195, 7,233,200,207, 47, 2, 88,168,235,226, 60, 63,234,117,148,166, 36, 67,108,101, 21, 55, 56, - 60,190,154,115,213, 20,206, 11, 23, 46, 44,232,209,163,199, 23,161,161,161, 10,119,119,119, 33,143,199,211,213, 16, 87, 77, 74, -103, 85,200,100,178,222, 60, 30,239, 28, 73,146,226,160,160, 32,204,158, 61, 27,155, 55,111, 54, 48,124,209,208, 29,103,163, 71, - 62,211,232,150,154, 35,174,170,136,172, 4,133, 66,225,153,156,156, 44, 52, 24, 12, 65,111,190,249,230,153, 33, 67,134,224,198, -141, 27,184,112,225, 66,123,157, 78,167,172, 56,238,114, 0,142, 36, 73,174,173,103, 38,119,146,166,233,195, 23, 46, 92,240,114, -118,118,198,249,243,231, 81, 86, 86, 86,233, 92, 77,156, 56,177,154,115,117,253,250,245, 39,156,184,226,192,129, 3,135,127, 52, -234,212, 34, 85,221,167,218, 68,150, 57,168, 34,190, 84,139, 23, 47,254,140, 32,136,211, 21, 14,151, 10,128,226,101, 9,172, 75, - 21,170,145, 69,195, 51,188,195, 88,146,250,220, 58,134,105,250,115,171,253,192,176, 68,177, 88,140, 29, 59,118,192,194,194,162, -209,194,169,244,204,113,100,206,124,191,210,185, 50, 57, 89, 24, 60,161,169, 2,203,228, 96,221, 68,141, 38, 66, 23, 23,151,143, -187,116,233,242,225,238,253, 63, 89,174,249,226,211,162,226,123,137, 60,117,153, 70,162,209, 27,116,143,114,242,235, 28, 30,193, - 80, 92, 8,161, 68, 18,199,183, 16, 63, 39,174,154,202,121,243,230, 77,117,255,254,253,247,173, 94,189,186, 7,195, 48,251, 95, - 68, 58,171,138, 43, 91, 91,219,176,109,219,182,137,197, 98, 49, 52, 26, 13,214,174, 93,139, 63,254,248, 99,104,118,118,118, 24, -128,176,166,214,183, 78,167,155, 60,112,224,192,141, 11, 22, 44,128, 94,175,199,168, 81,163,240,248,241,227,115, 15, 31, 62,220, -236,234,234,186, 96,198,140, 25,206,118,118,118,152, 62,125, 58, 13, 96, 98, 29, 52, 95, 31, 60,120,112,168,183,183, 55, 46, 93, -186,132,162,162, 34,200,100, 50,124,252,241,199,130,144,144,144, 3, 37, 37, 37, 35, 67, 66, 66, 56,231,138, 3, 7, 14, 28,254, - 61, 48, 75,139, 84,117,162, 26,131, 42,255,227,135,132,132, 36,134,132,132, 84,115,184, 94,150,192, 98,171,168,199, 6,221, 33, - 70,245,124, 12, 15, 99, 52, 52, 38,147,102,237,103, 78,115, 30,240,103, 12, 86, 45, 66,233,185,229, 70,196, 96,133,177, 44,123, -189,170,192,114,113,113,121,203,201,201,233,235,131, 7, 15,138, 21, 10, 5, 92, 59,116,110,246,219,177,159, 53,142, 18,161, 58, -235,233,211, 9, 9,138,210,208,186, 56, 25,117,105,156, 72, 34,141, 21, 89, 72,107,138,171, 38,115, 2, 64,120,120,248,252,154, -235,254, 42,167, 76, 38,235,109,103,103, 23,182,109,219, 54, 11,133, 66, 1,154,166, 33,149, 74, 17, 30, 30,142, 10,113,213,100, -184,184,184, 4,207,156, 57,243,171,137, 19, 39,162,160,160, 0, 23, 46, 92, 64, 80, 80, 16,182,109,219,214, 42, 60, 60,124, 99, -175, 94,189, 64, 81, 20,206,159, 63, 15,189, 94,255,160, 14,154, 17, 83,167, 78, 93,240,206, 59,239, 32, 50, 50, 18, 74,165, 18, -211,167, 79,215,126,252,241,199,149, 49, 87,223,126,251,237, 59,105,105,105,156,115,197,129, 3, 7, 14,255, 30,212,169, 69,106, - 60,203,127, 99, 89,246,141,154,174, 86, 77,241,101,114,168,170, 46,215,220,191, 98,187,250,101,100,198, 36,176,234,118,173, 88, - 35, 40,155,174, 48, 62, 77,168, 34,176,148,213,118,161,133, 82, 24,205, 16, 46,159, 79,134,222,222, 90,201,251, 97, 57, 9,190, -192, 86,215,126, 96, 88, 98, 93,251, 74,165, 82, 48, 12, 99,150, 14,163,135,188, 67,181, 29,252, 22, 82,186, 56,129,213,235, 42, -157, 44,124,246, 89, 53,113, 69,211, 52,180, 90, 45,208,112,179, 86, 36, 65, 16,143, 41,138,186, 1,128, 13, 12, 12,220,163,215, -235,223, 42, 40, 40,104, 62,101,202, 20, 93,126,126, 62, 78,156, 56,129,125,251,246,169,158,233,120,209, 5, 79,244,227, 82,149, -165, 89,245,240,197,189,113, 41,177,154,115,245, 2, 56,159,195,139,224,148,201,100,189, 29, 28, 28, 42,197,149, 80, 40,132, 84, - 42,133, 92, 46, 7,143,199,251, 75,131,116,182,106,213, 74,232,235,235,187,104,194,132, 9,184,119,239, 30, 22, 47, 94,172, 84, - 40, 20,199, 79,158, 60, 57,125,222,188,121,188,192,192, 64,228,230,230, 98,231,206,157,250,200,200,200,213,217,217,217,235,106, - 61,105,121,188,201, 43, 86,172, 96, 21, 10, 5,145,146,146, 82,205,185, 42, 46, 46, 30, 25, 18, 18, 34, 74, 77, 77,229,156, 43, - 14, 28, 56,112,248,119,161,190, 22,180,252, 10,241,148, 83,203, 50, 85, 69, 88,213, 92,206,173,177, 12, 0,218, 26,219,227, 95, -166,192,170, 21,122, 35, 89,116,112,219,180,102,195,222,157, 1,145, 83, 95,104,211,142,128, 81,229, 84, 10, 44, 90,100, 9, 43, -187,150, 40,126,166,194,181,164, 84,232,141, 21,225, 15,183, 0, 0, 32, 0, 73, 68, 65, 84,100, 81,125,124, 6, 3,120,179,230, -254,217, 91,208,218,218, 26, 69, 69, 69,213, 28, 45, 11, 11, 11, 56, 59, 59,163,184,184, 24,161,161,161, 96, 89,246, 90, 3,110, -216,138, 9, 19, 38,124, 57, 99,198, 12,178,237,152, 73,120,118,243,202,115,174,149, 72, 36,130, 88, 44,134, 92, 46,199,253,251, -247, 25,150,101, 87, 52,160,142,111,145, 36, 25,247,243,207, 63,103, 5, 6, 6, 78,108,222,188,249,152, 73,147, 38,137, 35, 35, - 35,177, 98,197, 10,222,249,243,231,117, 81, 81, 81, 6,163,209, 56, 95,161, 80,236,108,240,140, 33,136,154,226,234, 47,115,214, - 34,174,254, 50,167, 76, 38,235,229,236,236, 28,182,121,243,102,139,236,236,108, 8,133, 66, 88, 90, 90, 34, 35, 35, 3, 43, 86, -172, 40, 53, 24, 12,175,253,197,243, 77, 40,145, 72,132,122,189, 30,251,247,239,135, 92, 46,239,153,157,157,157,193, 48,204,206, -143, 62,250,104,139,135,135, 71,167,251,247,239, 63,120,246,236,217,204,156,156,156,123,117,145, 88, 91, 91,247,180,183,183, 39, -110,220,184,129,233,211,167,107,103,205,154, 85, 25,115,197, 57, 87, 28, 56,112,224,240, 31, 84, 94, 4, 17, 89,223,242, 63, 17, -245, 78,246,156, 87,166,114,216,121,224,248,150, 81,239, 13, 80,135,133,135, 3,173, 38,128,239, 50, 24,160, 68,112,110,223, 27, -246,173,123, 32,254, 97, 54, 78, 92, 73, 84, 39,203,181, 91,242,202, 84, 53,231,219,171,119,182,237,162,162, 34,180,110,221, 26, -143,194,135,120, 69, 29,237,228,227, 99,179,213,167, 5,214,123,133,135,135, 99,253,250,245,207,146,147,147, 55,180,111,223,126, - 65,125,156,113,113,113,203, 50, 51, 51,187, 45, 89,178,228,236,210,172, 98, 20, 44,223,142,226,185, 19,144, 61,160, 11, 44, 44, - 44, 96,103,103,135,210,210, 82, 92,190,124, 25,241,241,241,103,213,106,117,183,184,184,184,101,245,113,178, 44,123,211,195,195, - 35, 37, 32, 32,192,178,168,168,104,243,132, 9, 19,196,165,165,165,200,207,207,199,147, 39, 79,112,235,214,173,243, 90,173,214, -171, 1,209, 82,201,201, 48, 76,165,184,122, 81,156, 85,241,162, 56, 37, 18,201,194, 19, 39, 78, 88,144, 36, 9,161, 80,136,102, -205,154, 33, 51, 51, 19,203,151, 47, 47, 85,169, 84,175, 41,149, 74,115, 7,232,172,179,222, 25,134,129,193, 96, 0,203,178, 16, - 8, 4,197, 0,144,147,147,115, 47, 53, 53,117,192,169, 83,167,100,143, 30, 61,234, 87,135,184,170,228,204,207,207,143,120,252, -248, 49, 36, 18, 9,102,205,154, 37, 88,189,122,245, 15,155, 55,111, 86,135,132,132,208, 3, 7, 14,220, 22, 22, 22,214, 81,165, - 82,245, 53, 67, 92,253, 47,207, 90,207,113,114,156, 28, 39,199,249, 79,227,252, 79,161, 94, 7, 43, 41, 9, 58,160,100,142,135, -135,229,178,181, 59, 14,238,248,225,232,177, 17, 83, 70,191,205,243,237, 18,132,180,236,147,184, 28,125,209, 80, 80,194,158, 40, -209, 82,211,147,146, 74, 26,236,251,207,227,193,176,100,233, 88, 30, 0,240,249, 48,124, 54,116,104,132,151,151, 87,159, 97,222, -185,244,244, 89,229,206,214,142,173, 99,233,136,136,136,163, 66,161,112, 87, 90, 90, 90,177, 92, 46,111, 48, 19,241,241,241,183, - 1,188, 78, 81, 84,223, 5, 11, 22,124, 61,196,205, 53, 96, 68,207,126,224,243,249,136,138,138,194,211,167, 79, 35, 73,146, 92, - 20, 23, 23,119,217,156, 66,249,245,215, 95,179, 0,160,172,172,108, 69,251,246,237, 5, 73, 73, 73,120,244,232, 17,146,147,147, - 97, 52, 26, 31,202,229,242, 70, 5,196,137, 68,162, 91, 4, 65, 36,190, 72,206,170,120, 81,156, 42,149,106,245,202,149, 43, 95, - 93,182,108,153,208,210,210, 18,113,113,113, 88,182,108, 89,169, 90,173,110,140,184,170, 23, 44,203, 66,175,215, 55,170,231,103, - 45, 88,228,237,237,221,113,229,202,149,237, 43, 98,185, 56,231,138, 3, 7, 14, 28, 56,252,123, 4,214,159, 66,171,164, 0,192, -123,221, 60, 44,221, 87,111,255,105,143, 88,192,244, 81,105,201,171, 42, 13, 57, 37, 46,169, 36,197,220,131,173,252, 14,252,234, -107,148,176,182,182,150,100, 58,225,153,105, 77,102, 14,160, 84, 42,215, 54, 37, 51,209,209,209,151, 1,116,103, 89,118,196, 25, -130,248, 12, 72, 5,203,178,171,227,226,226, 78, 52,134,199,223,223,191,117,105,105,233, 15, 26,141,166, 27,195, 48,130, 75,151, - 46, 65,173, 86, 35, 41, 41, 73,197, 48, 76,104, 99,211,149,150,150,150,248,162, 57, 95, 70, 58,229,114,121,212,233,211,167, 7, - 18, 4,113, 97,209,162, 69,194,229,203,151,191, 80,113,101, 99, 99, 83,150,157,157,253, 68,173, 86,219,230,228,228,104,109,108, -108,202,210,211,211,155, 66,245,176,184,184,184,203, 39,159,124,178,124,193,130, 5, 11,191,254,250,107,154,139,185,226,192,129, - 3, 7, 14,255,122, 4, 6,218, 73,204,220,213, 44, 11,241,243,201,208, 47,158, 8,118,241, 68,176,159, 79,134,254, 69,112, 54, - 18,213, 56, 59,116,232,112,216,206,206,206, 64,211,180,134, 36,201, 50,138,162,138,121, 60, 94, 54, 73,146,211, 97,198, 48, 22, -255,102, 78, 0,112,116,116,244,243,244,244, 60, 44,147,201,122,189,136,242,172, 10, 39, 39,167, 87, 93, 93, 93,143, 56, 59, 59, -247,123, 65,156,254,175,189,246,218, 99,177, 88,124,221,220, 23,134,255,207,115,137,227,228, 56, 57, 78,142,147,227,228, 0,238, - 68,225, 56,255,165,156, 68, 19,196, 21, 87,158, 28, 39,199,201,113,114,156,156,192,122,105, 32,185, 34,224,240, 31, 0, 11,174, - 89,144, 3, 7, 14, 28, 56,252,131, 64,212,163, 66, 27, 51, 83,118, 83,148,236, 29,142,147,227,228, 56, 57, 78,142,147,227,228, - 56,255,231, 56, 27,226,190, 3, 14, 47, 69,120,113,156, 28, 39,199,201,113,114,156, 28, 39,199,249,191,199,249,159, 2,215, 68, -200,129, 3, 7, 14, 28, 56,112,224,240,130,209,232,192, 96,127,127,255,118, 0, 16, 21, 21,245,240, 37,166,235, 99,153, 76, 54, -165,107,215,174, 30, 52, 77,147, 69, 69, 69,203, 46, 93,186,180,172,182, 29,187,118,237, 26,253,234,171,175,186, 95,188,120, 81, - 11,252, 57,255,160,233,219,104, 52,102,197,196,196,248,113, 85,253,247,192,201,201, 41, 76, 36, 18,181, 42, 31, 96,148,133,129, - 49,194,200,176, 48, 26, 25,232,141, 44,116, 90,117,186,182,172,120,112,147,184,189, 71,180, 52, 26,153, 16, 22,236, 14,130, 37, -166,179, 4,187,131, 96,137,143, 88,146,216, 65, 48,236, 52,240, 12,223,192,192, 91,192, 99,248, 75,149, 73,161,153,255,133,242, - 12, 14, 14, 38,255,226,255,107,157,127,170, 91,183,110,167, 69, 34, 81,219,186,254, 87, 86, 86,166, 76, 72, 72, 8,250, 47,159, -171,142,142,142,125, 73,146,220, 10,192,171,198,166,123, 0,230, 40,149,202, 63,254,234, 49,252,197, 98,158, 29, 69, 77,227, 19, -196,167, 0,160,103,217,181,249, 70,227,174, 40,149,234, 31, 19, 67,104,111,111,127,153,162,168,246,165,101,101,165,207, 74, 74, -220,165, 82,105,138,216, 66, 34, 49, 26,140, 15,158, 60,201,235,203,221,213, 56,112,120, 65, 2,203,199,199,167, 3,128, 64,130, - 32, 2, 89,150,237,219,190,125,123,199,178,178, 50, 24,141,198, 28,130, 32, 46,179, 44,123, 9,192,165,216,216,216,228, 23,145, - 32,146, 36,215,109,220,184,113,254,172, 89,179, 42, 69,210,157, 59,119,208,165, 75,151, 90,247,167, 40,202,117,205,154, 53,205, - 50, 50, 50, 64,211, 52, 4, 2, 65,229,135,162, 40,244,232,209,163, 81,199,111,222,188,185,165,131,131,195, 50,130, 32, 70,146, - 36, 73, 53,180, 63,195, 48, 70,150,101,143,230,230,230,126, 85, 80, 80, 80,210,152, 99,249,249,118,209, 3, 68, 29,199, 96,141, -209, 49,183,249,245,253,191, 67,135, 14,209, 60, 30,207,181,170,160, 52,161,234,114,213,223, 70,163, 49,235,238,221,187,126,230, -150,133,200,194, 98, 33, 65,242, 6,130,101, 58,149,147,145,247, 88,198,112, 65, 93, 86,182,206,156,252, 10,133,194, 86, 49,177, -177,237,239,222, 79,133,123,155,150,208,234, 12,208,104,245, 56,121, 33, 10,222, 30,110, 24, 54,100, 80,147,207, 21, 3, 67, 4, - 47,253,120, 92,255,213, 91, 15,249,127, 54,107,140,116,245,214, 67,126,159,205, 26, 99,185,122,219, 33,191,165,179,199, 90,174, -220,122,208,111,233,236,177,205, 86,109, 61,168, 5, 48,185, 41,199,152,212,185,101, 41,105, 52, 8,107,173,123,138,167,217,123, - 39, 67,242,119, 92,184,171, 87,175,238,160,211,233,146, 38,142,242, 91,209,169,157, 67,110,109,251, 20, 21,229, 58, 60,186, 23, -253, 5,248,180,135, 71,192,103,245, 94,159, 52, 77,183,185,124,249,114,123,211, 72,251, 70,163, 17, 70,163, 17, 6,131, 1, 90, -173, 22,239,188,243, 14,239, 69,164,219,215,215,119, 18,203,178,171,202, 79, 75, 98,101, 76, 76,204,182,191, 64, 39,229,241,120, -159, 8, 4,130, 64,131,193,224, 1, 0,124, 62, 63, 73,163,209, 92, 50, 24, 12, 27,129, 63,199,215, 51,243,222,179, 41, 50, 50, -210,211,210,210, 18, 58,157,174,114, 98,120,138,162, 58,117,239,222,125, 59,128,246,127, 53,255,118, 20, 53,173, 87,159, 62,155, - 39,205,157, 75, 21, 68, 69, 97,235,158, 61,155, 80, 80, 0, 0,219, 27,250,175,139,139, 75, 52, 65, 16,174,141, 57, 30,203,178, - 89,114,185,188, 81, 47,152, 20, 69,181,127,156,161,112,104,221,210, 25,207, 74, 74, 96, 97, 33,145, 68,221, 73,115,240,245,106, -205, 61, 49, 57,112,120, 17, 2,203,199,199,231, 12,128,192, 78,157, 58,137, 7, 13, 26, 4, 31, 31, 31,180,106,213, 10, 34,145, - 8, 0,240,244,233, 83,199,187,119,239,190, 23, 23, 23,247,222,141, 27, 55, 0, 64, 5,224,106,108,108,108,173,110,196,128,161, -125,102,137,164,194,205, 0,144, 39,127,162,204, 74,201,221,170, 84, 42,215, 1,168,250, 70,237, 62,126,252,248,121,179,103,207, -198,233,211,167,113,232,208, 33,104, 52, 26, 20, 21,213, 61,197,161,209,104,204, 26, 63,126, 60, 47, 57, 57,217, 80,151,131,213, -152, 2,113,112,112, 88, 54,106,212,168,185,158,158,158,149,211,186,232,245,250,202,239,130,130, 2,204,155, 55,207,116,243, 2, -195, 48, 8, 15, 15,159,245,233,167,159,162,160,160,224,147,218, 56, 7,246,117,143,230, 17,132, 43,243,167, 40,203,186,112, 37, -213, 15, 32,168,168,232,120,162,198, 13, 17, 0, 16,224,223,173, 65,113,199,227,241, 92, 99, 99, 99, 29,104,154, 54, 43,111, 12, -195,192,199,199,199,172,125,157,157,157,131, 40, 30,125,104,196,232, 15,155,119,243,241,225,187, 58,203,160, 55, 24,144,154,150, - 17, 16, 31, 23,211,237,220,169,159,167,136, 68,162, 49, 10,133,226, 98,125, 60,122, 35,131,248,196,135, 56,127, 53, 22,111,210, - 34,148,169,181, 40, 41,211,226,135, 95,175, 33, 43,183,168,201, 39,110, 64, 64,128, 75,158, 65,219,125,246,228,183, 36,223,124, -123, 64, 50,123,242, 91, 88,191,227,135,202,239, 89, 31, 14,199,186,111, 15, 72,103,127, 56, 28, 91,119,238,235,233, 22, 16,224, - 18, 25, 25, 89,231,180, 0,117,213, 17,105, 52, 8,247,220,149, 83, 0,144,183,115, 39,116, 57, 57,112,254,234, 43, 0,192, 84, - 47, 87, 97, 99,210,236,229,229, 85, 41,136,235, 21,142, 6, 67, 86, 98, 98,162, 95, 67,226,202, 96, 48,176, 60, 30,239,139, 43, -191, 47, 11,237, 21,208,161, 90, 97, 38, 63, 72,110, 22,252,229, 87,239, 30, 57, 91,194,190,247,154,101, 82, 82,228,234,122, 69, - 22,195, 48,164, 70,163,193,131, 7, 15,106, 29,101,159, 36, 73, 99, 83,234, 41, 48, 48, 80, 88, 90, 90,122, 80, 42,149,118, 45, - 45, 45,157,196, 48,204,151, 17, 17, 17,142, 36, 73, 98,224,192,129, 95,250,250,250,166, 9,133,194,111,213,106,117,156, 84, 42, - 29,115,233,210, 37,141,153,212,125, 45, 45, 45,127,248,229,151, 95,154,251,248,248,144,249,249,249,112,115,115,195,211,167, 79, - 3, 46, 95,190,236,251,225,135, 31,126, 88, 82, 82, 50, 30,192,229, 70, 36,183,163, 68, 34, 97, 39, 76,152, 64, 24,141,127,102, -247,251,239,191,135,111,219,156,182,131,186,137,202,212, 58,182,232, 74,130,232, 35,150,100,175,166,167, 23, 53,250, 4,230, 19, -196,167,147,230,206,165,104,165, 18,146,228,100, 12, 37, 8,222,238,114, 55,171, 65,129, 69, 16,132,235,178, 61,115, 28, 4, 2, - 1,244,122,125,229,135,101, 0,176, 0,203, 0, 44,195,130,101, 1,176, 4, 24, 35,131,245, 75,246, 52,249, 26,179,144, 72, 44, - 28, 29,157,114,196, 22, 22, 22, 44, 56,112,224,240, 34, 29,172,215, 35, 34, 34, 96, 48, 24, 96,105,105, 9,138,170,254,188,183, -177,177, 65,223,190,125,209,189,123,119, 12, 28, 56, 16,247,239,223, 23,127,253,245,215,117,218, 17, 99,231, 15, 69,139,246,142, - 38, 17, 33,187,114, 58, 54,228,187,101,199,236,148, 74,101,213,185, 6, 39, 77,157, 58,149,120,242,228, 9, 70,142, 28,121, 89, -163,209, 12, 7, 80, 92, 95, 6, 18, 18, 18,252, 18, 18, 18, 94, 88,129, 16, 4, 49, 82, 38,147,225,240,225,195,208,106,181,207, -109,183,178,178, 66, 98, 98, 98,213,183, 61,116,235,214,141, 34, 8, 98, 36,128, 90, 5, 22, 73, 16,174,191, 71, 60,172,156,167, -113,212,176,110,244,160,190,238, 57,207,212,122, 22, 0,177,116,233,210, 74,113,197,178, 44,150, 47, 95,110,118,122,105,154,198, -189,123,247, 64, 81, 20, 82,250,116, 0, 0,116,142,205, 4, 69, 81,136,239,234, 12, 0,232,249,160, 0, 60, 30, 15, 82,169,212, - 92,113,213,207, 81,230,250,203,146,175, 66, 44,213,122, 22,191,133, 71, 34, 67,113, 30, 44,203, 66,230, 96,131, 94,190, 62,124, -143, 46, 93, 29,246,110, 95,247, 11,128,225, 10,133, 34,162,110,177, 96,132, 71,135, 54,216,255,203,101,172,250, 54, 20, 79,138, -213, 40, 41, 43, 47,215,129, 61, 61,241,253,250,166,213, 19, 69, 81,235, 58,181,105,211, 98,255,145, 48,244,234, 17,128,253, 71, -206,162,103,143, 0,236, 63, 90,190,124,224,104, 24, 94,233,217, 29, 7,142,134,161,179, 71,251,150, 79, 30, 23,173, 3, 48,186, - 78,247,162,102, 29, 13, 47,175, 35, 94,161,145, 48,213,205,227,233,211,203,203,167, 66, 96, 53,250, 98,171, 16,196,102,184,198, - 13, 58, 87, 6,131, 1,185,185,185, 68, 97, 97, 33,107,109,109,253,110, 85,145,101, 18, 87, 63,255, 94, 12, 85,242, 86,226,167, -159, 46, 49,239,191, 31,152,148, 20,185,218, 3,229,205, 93,207, 65,167,211,165,189,250,234,171, 44, 0,104,181, 90, 23,129, 64, - 64,215, 16, 96,206,189,122,245,122, 78,160, 53,212,116, 88, 90, 90,122,240,232,209,163, 35, 28, 29, 29, 49,124,248,240,115,158, -158,158, 2, 11, 11, 11,252,254,251,239,112,117,117,181,179,178,178, 58, 19, 18, 18,130, 13, 27, 54,180, 60,119,238,220, 33, 0, - 35,204, 40,202,129, 65, 65, 65,135, 79,159, 62, 45,162,105, 26, 42,149, 10,137,137,137,104,214,172, 25, 4, 2, 1,134, 15, 31, - 78,245,234,213,203, 54, 40, 40,232, 88,114,114,242, 24, 0, 23,204,173, 35,149, 74,197, 46, 89,178, 4, 22, 22, 22,144, 72, 36, -149, 31,177,192, 72,236, 8,110, 35,158,187, 38, 91,188,244,211,247,215,236,222,123,234, 34,195,176, 95,102,102, 22, 23, 54,246, - 60, 40,136,138,130, 36, 57, 25,234,232,232, 70,159, 67,174, 84, 23, 44, 94,176,216, 36,122, 33, 16, 8,170, 57,247,166,223, 52, - 77,163, 91,183,110, 13,242,117,234,212,105, 39, 69, 81,246,213,210, 87, 80, 64,125,241,249,103,134,219,137,247, 37,122, 3, 36, -106,173, 30, 43,151,127,105,160, 72,138,242,242,242, 58,193,178,108,222,221,187,119, 63,226, 30,159, 28, 56, 52, 93, 96, 65, 42, -149, 34, 42, 42, 10, 4, 65,192,210,210, 18, 86, 86, 86,104,214,172, 25,138,139,139,113,247,238, 93,220,187,119, 15,105,105,105, - 32, 73, 18,238,238,238,192,243,163,135, 87,118,181, 60,184,254, 52, 68, 82, 33, 8, 2,240, 31,212, 21,126,253,189,113,231, 86, -202,156,168,115,216,163, 84, 42, 31, 0,224,117,238,220,249,195, 30, 61,122, 96,195,134, 13,208,104, 52, 27,235, 16, 87,207,117, -223,156,246, 22,239, 10,205, 35, 91,232, 12, 76,230,174, 95, 12,175,120,123,123, 71,251,248,248,184,221,190,125, 91,111,114,179, -106, 54,147,213,136,203,170,198,153,159,159, 15,134, 97,204,118,133, 10, 11,107,189,199,222,169,233, 74,153,176, 50,100,131,117, - 73, 81, 46, 86,172,253, 17,122,189, 30,243,231,207, 7,195, 48, 96, 24, 6, 70,163, 17, 5, 5, 5,229, 35, 59, 53,144,119, 83, -158, 40,138,170, 38,128, 27, 90,174,143,211,206,206, 78, 66, 82,252, 67, 11,150,174,176, 76, 72,206,194,233,240, 72,176, 44,139, -147,187,191, 4, 0, 12,159,186, 28,114,101, 30,122,249,118,194,196,105,159, 88,110, 10, 89,122,200,206,206,174,109,126,126,126, -105,109,156,122, 3,131,208,179, 55,160,124,242, 12,227, 71,244,135, 70,171, 71,110,142, 18,251,190,253, 6, 51, 62, 56,142,230, - 82,177,147,216,190, 77,114,213, 50,178,180,180,164,212,106,245,229, 7, 15, 30, 76,174, 43,157,122,189,254,245, 37,115,167, 96, -211,158, 80,120,185, 59,226,244,249,155,240,239,220, 10,103,194, 35,209,179,139, 27,206, 94,138, 70, 47,111,119, 92,188,113, 7, -115, 62,122, 31, 11,231, 92,126,189, 81,117,180,122,131,117, 73,113, 46,126, 91,125, 0,185,219,182, 33,125,214, 44,248, 87,156, - 19, 81, 36, 9,218,197, 5,176,106,184, 60,107,195,189,123,247,160,209, 60,111,212, 8,133, 66,116,234,212,169, 94, 78,147,115, -149,147,147, 67,228,228,228, 64, 34,145, 16, 73,137,119,140, 30, 94,157,223, 53, 62, 61,178, 7, 0,202,157,171, 98,148,221,223, - 2,213,131,173,160, 11,111,147,187,151, 79,211, 78,253,114, 87, 82,149,107,244, 78,141, 23,149,202,242,233,222,189,251,189,171, - 87,175,118,172,226, 2,195, 96, 48,208, 6,131,161,189,169,217,208, 96, 48, 64,163,209, 96,204,152, 49, 84,125,121, 23,139,197, - 93, 29, 29, 29,113,235,214, 45, 4, 7, 7, 11,188,188,188,240,224,193, 3,144, 36,137, 73,147, 38,193,211,211, 19,121,121,121, -240,247,247,199,149, 43, 87,186,153, 81,158,150, 18,137,100,239,169, 83,167, 68, 36, 73,162,164,164, 4, 12,195,160,119,239,222, - 32, 8, 2,183,111,223,198,231,159,127,142,227,199,143,227,151, 95,126, 17,251,250,250,238, 45, 43, 43,243, 0, 80, 98, 70, 29, -177, 26,141,134, 21,137, 68, 16,137, 68, 16, 10,133, 16, 10,133,160,105, 26, 42, 45,133,105, 95,165,105,248, 66, 41,211,181,139, -123,219, 25, 83, 71,144, 43,214,236, 11, 7,112,210,220,122, 7,202, 99,174,182,125,247,221,150, 55, 42, 58, 24, 29, 45, 41, 97, -244, 44,187,214,156,107, 19, 0, 20,108, 34,108,188, 8,156,219, 23,141,225,211,251,130,230, 11, 64,243,105, 8,104, 1,248, 21, -191,105, 62, 13, 1, 95, 8,202, 78,221, 32, 39,159,207,183,139,141,141,181,174,122,127, 48, 24, 12, 73,179,102,205,114, 31, 49, -108,168,227,145,227,167,169,113,163,134, 27,157, 28, 29,242, 51, 51,211, 31, 2,176,246,245,245,101, 27,123,206, 55, 1, 28,231, -255, 38,103,157, 96, 89,214, 31, 64,213,151, 1, 45, 0,129,233,177, 93,113,111,179,173,177, 30, 0,242, 42,190,237,235, 88,206, - 7,112, 23,128, 71,197, 58, 35,128, 72,130, 32, 10,254,106,154, 77, 2,171,234, 5, 67,212,146, 49, 20, 23, 23,163,184,184, 24, -153,153,153,216,177, 99, 7,248,124, 62,120, 60, 30,120, 60, 30, 72,146,172,140, 87,168, 11,127,156,190,186, 21,192, 86, 31, 31, - 31,254,119, 55, 66,207, 44,221, 63,103, 64,247, 65,190, 84,244,249,219,239, 2, 88, 9,224,245, 9, 19, 38,216, 1,192,129, 3, - 7,242, 1,252,110,182,139,195, 35, 91,108,217,252, 99,203,217,115,198,153, 4,133,235,158, 61,123,154,103,101,101, 85,123,163, -163,105,186,193,184, 44,150,101,143, 62,124,248,112,174, 76, 38,171,124,144, 84,109, 38, 52, 24, 12, 16,137, 68,149, 98, 72,163, -209,224,224,193,131, 6,150,101,143,214,195,137,228,196, 63,240, 32,241, 34,140, 70,166,154,152, 82,171,213, 8, 14, 14,174,116, -175, 0, 96,122,133, 83, 98, 46,234,115,174, 40,138,194, 85,247,114, 37, 48, 36,143,125, 46, 86,171, 38,248, 2,209,252, 33,111, -191,111, 99, 96,169, 74,113, 85,158,135,114,113, 33,224,243, 32, 22,242,241, 32, 37, 19,110, 46,190, 24,240,218, 91,205, 47,156, - 57, 54, 31, 64,173,157, 16,244, 70, 6, 67,250,249,226,219,195, 23, 81,252, 76,141,226,194,167,200,207,188,135,164,132, 72, 8, - 4, 2,220,188,121,211,178, 89, 51,107,203, 54,109,220, 96, 52, 50,184,122, 51, 26, 22, 22, 98, 28, 62,244,147,155, 70,167, 71, -198,227,180,201,117, 8, 91, 94, 47, 63, 15, 20,231,103,128,199,227,161,151, 79, 91,240,120, 60,244,246,109, 15,138,162,208,199, -191, 35, 40,138, 66, 96,119, 79,180,109,219, 22, 12,195,240, 26,184,120,145,124,231, 15, 36,223,189, 8,150, 97, 96,100,202,155, -127, 89, 0, 58,165,242,249,124,101,103,131,181,114,104,202, 77, 2,139, 22, 45, 42, 84, 40, 20,186, 90,156, 67,250,248,241,227, -214,245, 77,132, 77,211,180, 7,143,199, 75,122,250,244, 41, 99, 97, 97, 65, 26,141, 6,198,195,171, 51,117,229,247,101,149,115, - 79, 6, 47, 95, 22,250,222,107, 86,239,254,184,239, 20, 75,219,247, 38, 8, 74,104,152,242,229, 46, 1,248,180, 7,160, 51,231, -165,129,212,104, 52,184,127,255,126,131,147,114,179, 44, 91,239, 9, 85, 90, 90, 58,113,248,240,225,231, 62,250,232, 35,145,233, -229,133,199,227, 85,138,254, 71,143, 30,129, 36, 73,236,222,189, 27, 26,141,166,193, 19,159,199,227,205, 61,118,236, 88, 51,129, - 64, 80, 41,174, 88,150, 5, 69, 81,184,119,239, 30,214,175, 95,143, 9, 19, 38, 32, 35, 35, 3, 50,153, 12,243,231,207,151,174, - 89,179,102,174, 78,167, 51,199, 22, 78,208,106,181,126, 98,177, 24, 66,161, 16, 38,161, 5, 0, 49,143, 28,239,164,165,165,117, -105,217, 82,226,228,230,121,251,215,126,125,186,122,219,218, 90,247, 76, 77, 47, 58,217,152,250,207,208,235,119, 43, 74, 75, 63, - 31,185,119,175,195,229, 95,127,101,238,252,250,107, 22,207,104,220,101,238,255,165,207, 90,162, 36,153,135,192,192, 64, 92,186, -116, 25, 67,135, 14,133,145,166,193, 8, 4, 96, 4, 2,176, 52, 13, 8, 4, 32, 4, 2,176, 22, 22,102,157,146, 20, 69, 33, 59, - 59,187,218,186,169, 83,167,166,191,255,254,251, 14, 0, 11,133, 66,206,126, 50,119,182, 60, 63, 63,159,117,116,116,228,108, 9, - 14, 47, 85, 71,213,163, 69,236, 9,130, 56, 93,229,222, 51,212,180,188,120,241,226,207, 66, 66, 66, 18, 9,130, 56, 93,117,189, -105,191, 10, 67,226,116,109,203, 21,255,181, 93,178,100, 73,231, 53,107,214,172,238,217,179,231,225,235,215,175,167, 2,120, 97, - 2,139,168,200,152, 89,243,215,213,246,144,110, 72, 96,153, 16, 27, 27,171,119,118,118,254,238, 94,116,234,128,142,126,237, 33, -150, 8, 7, 1,216, 42, 20, 10, 63, 25, 63,126, 60,110,222,188,137, 59,119,238,124,143, 70,140,204,173, 51, 48,153,179,231,140, -131,206,192,100,154, 28,170,249,243,231,211, 87,175, 94,213,213,229, 96,213,197,149,155,155,251, 85,100,100, 36,234, 11,114,127, -239,189,247,170, 62,140, 42,131,220,235, 60, 99, 24, 22, 58,157, 30,165,165,170,114, 97, 85,241,240, 54, 26,141, 40, 45, 45,197, -168, 81,163, 42, 69, 23,195, 48,200,205,205,109, 82,101,146, 36,217, 24,231,170,118, 14,138, 26,220,213,219,135, 31,126, 61,161, -218,195,245,173,105, 43, 33,160,203,197,149, 88, 68, 67, 44,228, 35, 83,145,131, 78, 30, 94,244,165,243,167, 7,215, 41,176, 12, - 70,108,253,233, 60, 64, 16, 8, 61, 29, 14, 63, 55, 11, 44,251,124, 17, 70,142, 28, 9,129, 64,132, 99,199,142, 98,221,246,253, -152,222,170, 21, 88, 0,221,253,186, 97,237,206,195, 88,177,124, 57,121,244, 72,104,159,134,210,203,231,243, 65, 81, 84,229, 67, -187,230, 55, 69, 81, 13,138,132,202, 58,210,235, 81, 86,170,130,145, 97,192, 48, 44, 88,134, 1, 88, 22, 46,171, 86,193,101,213, - 42, 68,145,229, 29,248, 60, 75, 75,161, 82,169,128,126, 93, 27, 45,174,180, 90, 45, 20, 10,133, 46, 33, 33,161,182, 39, 85,142, - 86,171,173, 55,189,159,125,246, 89,242,234,213,171, 61,108,108,108,146, 18, 18,226,245, 93,187,122,243,107,198, 96,117,104,223, -161, 40,120,249,178,208,113, 31,188,249,238,206,207, 71, 27, 62,250,234, 7,158, 41,208, 61,244,108,112,195,215,147, 78,151, 54, -112,224, 64,179,194,110, 84, 42, 85,118, 93,219, 76, 1,237, 29, 58,116, 16,246,239,223, 31,151, 47, 95,198,170, 85,171, 24,131, -193,144, 15, 0,189,122,245,178, 95,177, 98, 5,113,247,238, 93, 88, 91, 91, 35, 55, 55,119,191,175,175,239,138,250, 2,223, 5, - 2, 65, 63,127,127,127, 82,163,209, 84,190,148,144, 36,137,123,247,238, 97,205,154, 53, 24, 51,102, 12, 58,116,232, 80,121,109, - 5, 5, 5,241,183,108,217,210,207, 28,129, 69,146,228,156, 1, 3, 6,124,131,242, 94,132, 85,111,114, 73, 0, 22, 2, 64, 70, -198,147,236,152,152,228,196, 1,129, 62,126,109,221, 92,100,145, 49,143,235,229,116,112,112, 88, 66,146,228,123, 0, 40, 0,153, -133, 36,217,206,222,222,222,177,239,208,161,120, 70, 16,212,174,179,103, 9,158, 88, 44, 69,102,166, 89, 77,141, 79,248,143, 32, -243, 17,131,230,211,152,240,233, 48,156, 62,125, 26, 51,131,223,175,112,178,202, 29, 44, 62,159, 6,205, 23, 64, 96,223,180,142, -137, 21,247, 38,194,202,170, 25, 0,160, 89,179,102,166,251, 38, 1,128, 37, 73,146, 11,201,226,240,178,208,160, 22, 49, 9,164, -154, 66, 43, 36, 36,100,104,205,117, 85,197, 84,109,191,171,254,119,205,154, 53,171,171,112,151,189,136,204,240, 94, 84,169,232, -245,245,207,209, 28, 20, 20, 52,203,210,210,114,179,105,249,241, 53, 57, 30, 95,147,195,163,163, 87,111, 31,111,191,194, 49, 99, -198,192,214,214, 22, 11, 23, 46,100, 1,236,109,204,177,119,253, 98,120,165,234,114,124,124,188, 95,124,124,124,147,242, 81, 80, - 80, 80, 82, 17,172,254,201, 11,180, 54,161,215,233, 81, 90,166,134, 78,167,131, 94,111,132,193, 96,132,175,167, 37,126,216,181, - 8, 90,173, 14,122, 99,249,186,114,167,204, 8, 33,173, 65,223,238,174,122, 16,164,234,242,205, 12,171,250,248,189, 98, 50, 64, - 81, 20, 18,188, 93,106,117,174, 6, 41,116,102, 11, 45,150, 49,118,116,116,116, 64,198,217, 91,229,111,204, 22, 34,132, 29, 88, - 1,137, 69,249,155,252,235, 19, 62, 43, 23, 89, 66, 26, 58,157, 22, 14,142,173, 97, 48,234, 59,214,197,103,208,235,180, 93,219, -187,192,218, 82,140,248,168, 27,248,228,227,201,152, 52,233, 67,208, 34, 75, 92,186,116, 17, 25,138, 92, 60,202, 42,192,199, 95, -125, 11,189,222, 8,157,193, 8,189,129,193,166,125,167,161, 51, 54,172,140,104,154,198,252,249,243,197,117,109, 63,124,248,176, -202, 44,129,197, 86,136,224, 50, 21, 52,106, 13,180,186,242,186, 48,182,225, 99,229,231,239, 67,175,215, 67, 53,186, 39,116,122, - 61,140,115, 70, 64,167,211, 33,211,130, 71,246,246,149,233, 65,144,170,107,209,114, 43,115, 5, 86, 93,233, 97, 89,182,214,166, -195,186, 68, 86,215,174,222, 73, 19, 70,249,133, 92,187, 30,149,119,237,122,212,115,251,181,233,224,151,242,209,202,195, 75,204, -233, 69, 88,205,198,169,210, 92,248, 23,207,251, 47, 35, 34, 34, 28,165, 82, 41,146,147,147, 65, 81, 20, 8,130,120, 18, 27, 27, -235, 8, 0,111,188,241, 70, 62,159,207,183,165, 40, 10,115,231,206, 5, 69, 81,246, 51,103,206,252, 2, 64,157, 2,203, 96, 48, -120, 88, 90, 90,162,164,164,164,178, 28, 5, 2, 1, 22, 47, 94,140,113,227,198, 85,138, 43,129, 64,128,253,251,247,195,215,215, - 23, 90,173,214,195,156,244,202,229,242, 40, 0,175,152, 33, 64,202,227,242, 24,166,193, 19,139, 36,201,137,241,211,167,183, 83, - 71, 70, 98, 6,195,120,118,236,216, 17,106,245,159, 77,119,109,219,182,109,153,149,149,149, 45,147,201,126, 2,240,173, 82,169, -140,171,215,193, 42,109, 1,117,154, 0, 70,154,198,225,147, 39, 49,110,220, 56, 8, 4,194, 74,231, 10, 52, 13, 66, 32, 0, 73, -211, 48, 82,194, 70,215, 25,195, 48, 40, 46, 46,166,246,239,223,223,198,203,203,139, 96, 1,116,234,228, 73,156,254,237,183,150, - 82,169, 52,213,198,198, 70, 7, 14, 28,254, 78, 5, 86, 69, 32,189, 8,174,197,139, 23,127, 6,128, 93,188,120,241,103,166,229, -144,144, 16, 21, 0,197, 63, 70, 96, 53,228, 96,109,216,176,161,206,161, 22, 76, 15,151, 45, 91,182,224,135, 31,126,216, 0, 32, -165, 49,199,158, 58,156,119,203, 66, 76,203,202, 84, 58,229,238,147,134,238, 93,187,118,141,238,217,179,103,155,232,232,232, 58, - 29,172,186,198,198,122, 25,195, 52,176, 44, 11,173, 78,143,178, 50, 21,212, 90, 45,230, 45,218,110, 86,221,235,180, 37,188, 55, - 94,235, 43,110,200, 73, 52, 39, 6,171,161,166,193,234, 98,217, 0,147, 6,120, 86,166, 70,208,152,197,136,250,181, 92, 27,155, -196,149, 88,200,135, 72,192, 7, 73, 0, 68, 61,198,167, 94, 85, 60,236,211, 89,147,175,236,248,254, 7,215,183,250, 78,193,236, -217,179,193, 19, 88,160,185,173, 61, 12, 70, 22, 45,157, 29,240, 40,171, 0,199,182, 45,170,240,134, 89,244, 29, 27,140, 13,159, - 79,193,186,224,134,223,192, 41,138,194,182,109,219, 84, 53, 93,171,170, 78,150,185, 34,216,228, 50,170, 52, 90, 44, 88,242,173, -249,117, 52,248, 21,177,185,101, 91, 91,199, 9,115, 5, 88, 77,145, 85,225,138,212,217,232, 39,180, 5, 60,122, 15,249,252,239, -188, 25, 50, 12,131,223,126,251,237, 57,119,181,102, 29,154,235,182, 50, 12,131,244,244,116,220,185,115, 7, 61,123,246, 68, 81, - 81, 17,120, 0,230,223,190, 13,207,241,227,161,169, 8, 93, 16, 8, 4,152, 58,117,234,203,122,199, 46, 23, 88, 68,253, 21,229, -228,228,180,190, 83,167, 78,237, 82, 10, 10, 16, 19, 31,143,128,138,244, 92,189,122,181,170, 3,136,177, 99,199, 10, 82, 83, 83, - 63,188,119,239,222,135, 44,203,110,200,206,206,158, 95, 23,103,169, 69, 22, 28, 59, 11,177,119,205, 9,204, 90, 62, 1,246,157, - 68, 88,191,100,119,229,246,117,223, 5, 87,196, 97, 9, 32,146, 54, 62,107,197,197,197,188,111,214,175,239,218, 61,160,135,120, -220,132, 73,164,214,192, 96,229,215,155,169, 35,135, 14,216, 30, 56,240,163, 88, 36, 18, 37,113,143,120, 14,127, 39, 94,148,184, -170,233, 96,133,132,132, 36,134,132,132, 60,231,134,189, 84,129, 69, 81, 20,170,118, 89,174,237, 33,111, 78, 12,214,188,121,243, - 96,105,105, 89,235, 54,157, 78,199, 38, 36, 36,220, 85, 42,149,123,234,123,123,173, 11, 2, 62,233,184,225,155,125,174,179,231, -140, 99,128,242,222, 90,219,183,111,183, 54,197, 96, 85,141,195,106, 40, 6,203,193,193, 97,217,218,181,107,103,191,254,250,235, - 36, 73,146,213, 30,126,166, 97, 25,170,126,244,122, 61, 78,157, 58, 53, 59, 36, 36,164,206, 97, 26, 88,182,188,249,169,180, 76, - 5,181,166,252, 1,251,232, 78,168,185,103, 64,195,142, 67,133,115,213, 35,249,105,173,206,213, 89,199,242, 7,215,144,188,134, -185, 8,146, 74, 78, 75,207, 12,112,178,179, 70, 65,209, 51, 8, 43,154, 5, 77, 48,137, 43,177,144, 70,243,102, 82, 60,125,146, - 11, 62,159, 95,159, 59,146,158,171, 76,127,101,212,136, 33,231, 72,138, 39,170,186,129, 47,182,178, 56,127,237,118,243,156,130, - 50, 48, 85,242,201,176, 44,102,173, 48,207,196,228,243,249,152, 57,115,102,157, 2,231,228,201,147,170,198, 11, 44, 77,227,234, -168, 17, 78,102, 67, 14,150,185, 2,171, 38, 76,189, 11,105,154,246,168, 16, 95,102,163,107,215,174,191, 91, 88, 88,184,153,187, -191,185,131,142, 18, 4,177,188,127,255,254,171, 92, 93, 93, 29, 62,250,232, 35,130,199,227,193,207,207,207,110,224,192,129, 69, - 0,208,177, 99, 71, 75,211, 61,102,211,166, 77, 72, 74, 74,202, 35, 8, 98, 69,189,215,186, 64,112,175, 89,179,102,126,253,251, -247, 71, 81, 81, 17, 50, 50, 50, 32,149, 74,225,185,126, 61,110,207,152, 1,239,157, 59, 65,246,239, 95, 46, 48,133, 66,220,190, -125, 27, 66,161,240, 94, 85,215,168, 42,156,157,157,187,179,229, 65,230,189,241,103,179, 4, 11,224, 26, 65, 16,159, 42, 20,138, - 91,207,219, 82, 4, 89,254,162, 86,127, 69, 17, 4, 49,118,201,146, 37, 32,197, 98,200,122,246,132, 42, 37, 5, 58,157, 14, 61, -122,244,128,191,191,127,249, 53,219,163, 7, 40,138, 66,187,118,237, 96, 99, 99,131,227,199,143,143, 5, 80,167,192, 18, 20, 57, - 66,147, 41,196,196,137, 19, 65,211, 2, 64, 32,192,130, 5, 11,170,220,227, 4,160, 42,226,177, 24,163,192,156, 55,120,182,198, - 11, 0, 33, 20, 8,132, 19, 62,248,144,252,116,193, 39,140,222, 96, 96,120, 60, 62, 57,127,233,106,242,193,253, 59,194,210,210, - 82,146,104,204,219, 26, 7, 14, 47,193,193,170, 42,180,170,184, 80,117, 33,175,106, 92, 86, 93, 2,173,106, 76, 22, 0,205,139, - 72, 43,175,218,123, 89,117, 60,136,143,143,111,239,229,229,133,140,140,140,186,122,202,149,119, 97, 22,139,241,240,225, 67, 0, -120, 80,215,129, 46, 94,188,184, 21,192, 86,211,178, 76, 38,235,217,111,100,191,107,222,253,125, 16,186,241, 72,145, 82,169,244, -198,159, 99, 98, 17,206,206,206,227,248, 2,222,123,109, 59,183, 12, 52, 50,204,218,139,167,174, 45,171,139,187,102, 12,150,193, - 96,104,114, 12, 22, 65, 16, 35, 95,127,253,117,242,238,221,187, 24, 53,106, 20,126,252,241,199, 58, 11,111,220,184,113, 56,124, -248, 48, 6, 15, 30, 76,174, 89,179,166,206, 97, 26, 88, 22,208,235, 12, 40, 45, 83, 67,173,214,188,180, 19,239,175, 58, 87, 0, -192, 50,134, 11,183,227, 98,186,117,241,237,201, 79,203,204,134, 72,192,175, 38,176, 44,132, 52, 68,194,242,117, 78,246,205, 17, -121,253,146,206, 96,208, 55,212, 13, 62, 93,167,126,246,220, 32,141, 44, 65, 37, 15,234,221,165,121,173,142,231,146, 9,232,242, -243, 6,179, 4,214,247,223,127,175,170,203,189, 50,183, 12, 88, 22,149, 77,132,101,170, 23, 91, 71, 14, 14, 14,246, 14, 14, 14, - 59,172,173,173, 69,166,216,161,218,182, 55,107,214, 76, 84,159,195,213,144,184,170, 24, 23, 43,105,245,234,213,141, 18, 89, 2, -129,192,237,218,181,107,237, 77,113,129,245,125,107,181, 90,188,247,222,123,102,217,130, 49, 49, 49,123,187,117,235,246,200,222, -222,254,124,175, 94,189,132,119,239,222,197,202,149, 43, 9, 62,159,111,101,186, 46, 75, 74, 74,192,227,241, 80, 80, 80, 0,130, - 32, 38,198,196,196,156,173,143, 83,163,209, 68, 68, 68, 68,116, 27, 54,108, 24,149,148,148, 4, 30,143, 7,134, 97,160,233,209, - 3,222, 59,119,226,206, 39,159,160,111, 90, 26, 52,122, 61, 68, 34, 17,206,158, 61,171, 43, 43, 43,139,168, 39,239,187,111,220, -184,225, 37, 18,137,160,211,233,192, 48, 12, 72,146, 36, 40,138,234,227,229,229,181, 5,128,127,213,253, 91,183,182,119,240,243, -238,208,209,200, 48, 70,185, 34, 47,207, 12, 71, 8, 63,254,248, 35,122,244,232,129,192,192, 64,200,229,114,164,164,164, 96,200, -144, 33,149,251,196,199,199, 35, 54, 54, 22,109,219,182,109,216, 1,181,204,131,189,135,176, 50,222,138,230,211,160,121,229,194, -202,228, 92,209,124, 26, 52, 45,128, 80, 96, 86, 88, 0, 91,243,124, 52,197, 94, 73, 36, 22, 76,187,118,237,238, 62,120,248,200, - 19, 0,217,172,153,181,217,177,182, 28, 56,252, 37,143,184, 30,161, 84,245,114,168,178,156, 7,128,168, 88,206,171, 34,164,242, - 8,130,136, 98, 89,214,191,198,190,166,237,218, 26,223,166,237,241, 47, 34, 35,245,221, 40,135, 76,158, 60,121,231,171,175,190, - 58, 96,254,252,249,144, 74,165, 80, 42,149,149, 23,152, 64, 32, 64,139, 22, 45,160, 82,169,112,249,242,101, 20, 22, 22,134, 3, -152,102,238,129,149, 74,229,205,135,113, 15,158,244, 25,214,221,214,163,123, 71,235,172,228,172, 30, 74,165,242, 58, 0,194,197, -197,229,187,209,159,188,254, 65,208,219, 1,160, 5,124,100, 62,204,198,197, 83,215,234,228,170, 25,131,245, 87,198,198, 34, 73, -146, 34, 8, 2,163, 70,141, 50,107,255,209,163, 71,227,210,165, 75,168,175, 57,177,188,137, 80,135,178, 82, 21,202, 94,160,192, - 34, 8, 2, 70,163,177,210,185, 50,125, 6, 41,116, 32, 73,178, 82, 88,188,158,203,152,205,169, 46, 43, 91,119,229,194,201,169, - 29, 61,187,218,247,244,233,128, 7,169,153, 88,247,217,159, 77, 45, 11,166,143,198,254,195,167,224,236,100, 11,141,234, 25,194, -206,156, 42, 42, 46, 46, 94,215,212, 60,236, 63,113, 9, 0,240,202,216,234,125, 4, 70,205, 3, 16, 15,255, 0, 0, 32, 0, 73, - 68, 65, 84,221,100,222, 9,204,227, 97,210,164, 73,117, 58, 88,231,207,159, 87, 85,117, 34, 27,170,163,210, 82, 53,202, 84,170, - 23, 86, 71, 50,153,204,219,223,223,255,252,174, 93,187,108,237,236,236,160, 80, 40,170, 9, 44,153, 76,230,237,231,231,119,126, -215,174, 93,182,246,246,246,200,200,200, 48,123,136,144, 26,226, 10,121,121,121, 68, 65, 65, 1,211,188,121,243, 70,137, 44,146, - 36,161,209,104,144,148,148,100,238, 53, 98,246,160,163,110,110,110, 63,110,222,188, 89,248,248,241, 99,232,245,122,220,189,123, -247,185, 78, 8, 20, 69, 97,241,226,197, 88,186,116,233, 14, 0,173,234,227, 51, 24, 12, 27,199,143, 31, 63, 89, 46,151, 55,119, -116,116,132, 82,169, 4, 77,211, 96, 89, 22, 68, 80, 16, 94, 73, 77,133,206,104,132, 88, 44,198,253,251,247,177,103,207,158, 82, -157, 78,183,177, 54, 46,119,119,119, 1,128,246, 52, 77,227,253,247,223,175,182,237,192,129, 3,232,233, 81,224,103, 29, 64, 63, - 51,178,180,230, 25, 60,126, 39, 73,146,240,243,233,208,161, 79,207, 46,157, 19,239,166, 61, 82,228, 62,189,214, 64,246,245, 90, -173, 22,157, 58,117, 66, 84, 84, 20, 46, 92,184,128,254,253,251,163,111,223,190,136,136,136, 64,116,116, 52, 98, 99, 99, 65, 16, - 4,108,109,109, 77,113,172,245, 6,179,242,139,108,161, 83, 8, 1,154,254, 51,222,170, 34,230,138, 18, 8, 42,123, 20,178, 2, - 1, 24,129,121, 3, 16, 87, 21, 77, 21,105,209,108,218,184, 78, 40,145, 72,140, 0, 96, 41,149, 24,143, 28,216, 14, 91, 27, 27, - 13,219, 20,123,149, 3,135, 23,243,188,139,250, 59,254,251, 82, 4, 86,108,108,108, 42,128,129, 0,198, 94,190,124,121,195,188, -121,243,236,251,244,233,131,167, 79,159,162, 85,171, 86,144,201,100,136,142,142, 70,124,124,124, 62,203,178,243, 99, 98, 98,106, -179,122, 58,163,158, 49,103, 20, 41,202,163,186,178,178, 25,222,125, 58,226, 82,232,149, 16, 39, 39,167,105, 60, 30,111,206,132, - 37,195, 62,232,247,150, 63,146, 99,211,112,243,220,109, 40, 51,242,235,229, 52, 39, 6,171,234,119, 45, 49, 88,149,156, 12,195, - 24,181, 90, 45,126,254,249,103,179, 68,214,161, 67,135,160, 86,171,193, 48,140,177,174,188, 27, 25, 35, 97,105,101, 15,151,150, - 30,208,105, 75,193, 48,230,191, 5,178, 13,148,167,193, 96,192,178,101,203,176,112,225, 66,172, 88,177,162, 94, 33,178,125,123, -173,177, 95,213, 56, 11, 10, 10, 74,132, 66,225,184,195,223,111, 14, 29, 59,101,182,165,107, 47,111,236, 61,114, 6,122,157, 30, - 34, 33, 15,205,173,164,104,231,230, 2,173,186, 12,223,110,221, 80,172, 86,171,198,213, 18,123, 86, 95,189, 87,195,196, 17,129, -248,122,207,175,184,114,240, 79,131,242,149,177, 95,225,167,111,102,193,199,103, 95,189,156, 70,163, 17,124, 62, 31, 7, 15, 30, - 84,213,213,155,144,162, 40,212, 35,176,170,213,145,149,149, 61, 92, 91,123, 66,171,126,246,194,234,200,214,214,118,225,255,177, -247,221, 97, 81, 92,253,247,103,102,182, 23,122,219,165, 42, 32, 74, 19, 65, 84, 84,236,177, 99, 52, 81, 99,137,141, 36, 38, 26, - 91, 52,177,197,216, 98,130, 45,209,152,216, 19,149, 52, 21, 91, 98,195,104, 84, 84,196, 66, 83, 41,162,130, 74, 91, 88, 58, 11, -108,223,153,223, 31, 2, 81, 35,176,152,228,247,190,223, 55,115,158,103,159,221,217,153, 57,115,231,206,157, 59,103,206,189,247, -115,191,253,246, 91, 59,181, 90,141,204,204, 76,100,102,102,130, 32,136,140,231,215,215,214,214,226,206,157, 59, 13, 34, 39,195, -220,252,108,112,174, 74, 74, 74, 8,133, 66, 1,177, 88, 76,222,186,117, 75, 19, 20, 20,148,129,250, 62, 90, 45,157,187, 86,171, -125, 52, 96,192,128,166, 28, 35, 23,129, 64,240,204,148, 77, 13, 65, 71, 95,208, 84,248,167,116,230,229,229,165,124,245,213, 87, -238,237,219,183,199,174, 93,187,180, 22, 22, 22,252,249,243,231,131,162, 40, 98,243,230,205, 76,121,121,185,126,241,226,197,252, - 43, 87,174,160,182,182, 54,197,140, 58, 68,165,209,104,166,247,232,209,227,251,211,167, 79,139,124,124,124, 26,103,122,216,183, -111, 31,102,205,154, 5,145, 72,132,172,172, 44,140, 28, 57,178,174,174,174,110, 58,158,141,129,213,200,105, 52, 26, 9, 46,151, -203,208, 52,141,101,203,150, 61, 19, 88, 84, 44, 22, 67,196, 55, 97,231,106, 47,201, 7,235,138, 36,115,102, 78,158,252,164,156, -208,166,180,244,135, 15,118,238,249,245, 2,158,141, 18,255,167,115, 39, 8,226,227,207, 63,255,124,123,207,158, 61, 69, 82,169, - 20, 62, 62, 62,136,143,143, 71,124,124, 60, 46, 95,190,220,112,253, 97,107,107,139,202,202, 74,228,229,229,169, 9,130,248,184, - 57, 78,218,170, 10,246, 62, 79, 28, 44,110, 67,204, 43,158,224,153,209,131, 79,226, 96, 61,137,139,213, 82,126, 62,223,189,195, -214,214,214,216,185,115, 72,186, 90,173,166, 26,180,148,189,189,253,157,250,109, 25, 55, 55, 55,221,159,139,188,249,247,123, 43, -192,114,254, 59, 57,255,167,208,162,213,159,146,146,242, 83, 64, 64,192,233,181,107,215,174, 61,122,244,232, 59,115,230,204, 33, - 44, 45, 45, 17, 19, 19,195,148,151,151,239,229,243,249, 31, 93,187,118,237,165,226, 69, 48, 12,179,239,202,241,107, 51, 38,124, - 48,130,152,179,113,106,207,148,139,119, 50,130,122,250,160, 99, 15, 31, 36,158, 79,199,214,165,251,127, 48, 26,140,203,139,138, -138,114,155,227, 49,167, 15, 86,195,135,195,225,180, 24, 7,235,232,209,163,115,134, 13, 27, 70,222,184,113,227, 79,125,174,158, -238,135,117,246,236, 89,232,245,122,196,196,196,208,205,197,193,162,129, 95, 54,109, 92, 62,229,187,232,147,124,146,208, 35,225, -210, 97, 84, 85, 20, 53,155, 55, 60, 30, 23, 63,254,252,139,158,195,161,238, 54,147,214,199, 73, 73, 73,118,235,214,173,163, 72, -146,196,214,173, 91,159,113,174,158,199,237,219,183,105,131,193,208,226,181, 82, 40, 20,103,105,154, 30,191, 99,211,234,125,253, - 6,191,106,237,235, 27,192,113,116,116, 7,135, 36, 81, 89, 94,130,155,215,174, 24, 99, 79, 30,171,212,233,116, 83, 21, 10,197, -217,191, 82, 0,163,118, 30,123,225,255,163,231,124,217,146,139, 98, 52, 24, 12, 28,137, 68, 2,163,209,248, 66,113, 53, 96,192, - 0, 81,124,124,188, 90,175,215,131,162,168,102, 21,211,147,107,180, 98,202,119,223,255,189,215,200,100, 50,249, 85, 84, 84,160, -182,182, 22,137,137,137,204,214,173, 91, 75, 42, 43, 43,151, 62,189,190,188,188, 28, 42,149, 10, 55,111,222,100,118,237,218, 85, - 82, 93, 93,189,212,220,252,107,136,139, 85, 81, 81, 65,139,197, 98,210, 96, 48, 24,130,130,130,132, 60, 30,207,207, 92,142,212, -212,212, 33, 77,173,235,209,163,199,189,248,248,248,118, 79,207, 77,104, 52, 26,121, 90,173,214,103,228,200,145, 45,214, 31, 34, -145,104,194,225,195,135,127, 18, 10,133, 29, 53, 26,205,219, 74,165,114, 31, 0,119,138,162,112,255,254,253, 82,163,209, 56,118, -217,178,101,223,213,214,214,222,150, 74,165, 19,205, 76,114,108, 86, 86,214, 68,127,127,255, 61, 43, 87,174,148,244,237,219,151, -235,236,236,140,206,157, 59, 35, 43, 43, 11, 39, 79,158,212,111,219,182,173,174,174,174, 46, 18,192,217,102, 94, 58, 24, 0,132, -209,104,124,102, 14, 83, 62,159, 15, 46,151,139, 58, 45,137,119,150,101,171,105,112,213,159,111,248,225, 36,195,128, 40, 84,148, -150, 22, 21, 87, 94,231, 24, 12,151, 30, 43,106,170,154,114,198, 52, 26, 77, 48,195, 48,156,234,234,234,205, 90,173,118,234,252, -249,243,229,235,215,175, 71, 80, 80, 16, 74, 75, 75, 97,107,107, 11,185, 92,142,154,154, 26,228,228,228,152,244,122,253, 14,147, -201,180, 90,169, 84, 54,219,236,104, 42, 21,163,141,101, 96,227, 11, 35, 65, 16, 32,105, 18,132,158, 0,101,162, 64, 25, 40, 16, - 28,206, 19,119,203,188, 41,180, 24,163,209,136,136,136, 8,156, 56,113, 2,163, 70,141, 98,208, 76,255,147, 19, 39, 78,192, 28, - 71,152, 5, 11, 22,102,142, 34, 76, 75, 75,171, 4,240, 46, 65, 16,209,179,103,207, 62, 65,211, 52,151,166,233,225,169,169,169, -151,255,202,193,139,138,138,146,174,158, 76, 92,234,224, 98, 29, 53,100, 98, 79, 4,116,241,128,201,104, 66,252,169, 20,236,253, -252,216,254,252,188,252,105,120,118,174,194, 23,194,156, 62, 88,207, 59, 88, 77,113, 41,149,202, 21,107,214,172,193,103,159,125, -214,234, 81,132, 77,109,147,144, 88,248,110, 88,103,218,117,244,171, 61, 7,147, 4,193,104,155,233,103, 67, 16, 96, 26,122, 69, -112, 56,212,221, 75,215,243,131,154,201,191, 1, 51,103,206,252,157, 36, 73,143,167, 45,254,102, 30,246,138,178,178,178, 65,230, - 92,155,226,226,226,211, 46, 46, 46,237,227, 98,127, 93,114,229,220,233,190, 38,147,222,155, 0, 1, 30,143,247,192, 96, 50, 94, - 52,232,116, 81, 5, 5, 5,127, 57, 16,219,146,119, 71,225,113, 97, 41, 56, 28,234, 73,236,169,250,128,166,135,183,204, 71, 72, -200,143, 77,238, 39, 16, 8, 78,239,217,179, 39, 98,242,228,201, 4,135,195,105,108,118,107, 56,127,146, 36,113,237,218, 53,181, - 78,167,195,222,189,123, 25,145, 72,212,108,224,218,127,234, 26,213,212,212, 68,142, 28, 57,114, 31, 0, 1,128,251, 85, 85, 85, -239, 41, 20,138,252,167,215,143, 26, 53,106, 31, 0, 1, 65, 16,127, 90,223, 18, 26, 66, 54,216,216,216,100,212, 59, 87,194,151, -233,232,222, 76,249,166,154,106, 62, 52,167,169,176,126,110,193,215, 27,150, 59,119,238,188,122,198,140, 25, 79, 79,246,124, 9, -128,215, 75, 36,237,172, 90,173, 14, 88,182,108,217, 92,145, 72,212, 79,173, 86,251, 2,128, 88, 44,206,172,171,171,187,160,215, -235,191, 2,208,108,108,169,236,236,108, 93,219,182,109,179,140, 70, 99,160,163,163, 99,227,232, 67, 62,255,137,243,115, 45,211, - 54,177,176,176,176,203,147,113,154,215,205, 78,216,169, 83,167,218,216,216,216, 12, 34, 8, 98, 12,195, 48, 29, 84, 42,149,118, -249,242,229, 87,227,226,226,170, 51, 51, 51,135,244,234,213,139,144,201,100,120,248,240, 33, 83, 83, 83,115,136, 36,201,143, 21, - 10, 69,139, 35,167, 25,134,201,111,206,165,110,106,159,230,214,235,116,186,146,171, 87,175,218,158, 59,119,142, 50,153, 76,136, -141,141,109,124,145,124, 81,107, 96,118,118, 54,116, 58,157,134,125,116,178, 96,209, 50,254,233,209, 32,102, 89,136,114,185,124, -156, 80, 34,152,233,209, 94, 30, 84,152,163, 76, 87, 85,214,253,168, 80, 40,118,226, 73,200,122,214, 62,253, 31,229,228,137, 44, -206, 16, 20,207,163,201,135,131, 73,255, 88,175, 86, 13,126, 17,103,215,174, 93, 93,120, 60,222, 6,173, 86, 59,180,185, 40,237, - 20, 69, 25, 69, 34,209,105,141, 70,243,209, 11, 38,123,254, 63,151,159, 43, 87,174,124,161,125, 96,238, 40,194,149, 43, 87,210, -173, 73,103, 80, 80,208, 5,177, 88, 44,127,209,186,186,186,186,220, 91,183,110, 13,250, 47,201,207,167, 71, 0,154,205,249, 82, -163, 8, 91,224,244,240,240, 16,232,245,250, 16, 0,237, 1, 88, 3, 40, 55, 24, 12,177,165,165,165,197, 78, 78, 78,161, 36, 73, -126, 82, 47, 94, 63, 45, 46, 46, 78,252, 79,222,155, 46, 46, 46, 66, 75, 75,203, 13, 36, 73,202,205, 20,220, 58,165, 82, 57,191, -172,172,172,136,173,235, 88, 78,176, 77,132,255, 81, 4,178,156, 44, 39,203,201,114,178,156, 44, 39,203,201,114,254,219,192, 54, -166,179, 96,193,130, 5, 11, 22, 44, 88,252,205, 32,154, 81,161,173,177,254, 94, 70,201,222, 97, 57, 89, 78,150,147,229,100, 57, - 89, 78,150,243, 95,199,217, 18, 55,219,244,248, 15, 9, 47,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255,125,156,255, 83, - 96,155, 8, 89,176, 96,193,130, 5, 11, 22, 44,254, 83, 2, 75,226,228,235,103,239, 17,180,207,198,181,227, 45, 27,215,142,183, -236, 61,130,246, 73,156,124,253,254,141,153, 38,151,203, 69, 50,153,108,162,155,155,219,217, 78,157, 58, 85, 59, 59, 59,127,192, - 22,165,214,163, 15,192, 25, 7,188, 63, 25,200,157, 12,228,142, 3,222,239,243, 55, 78, 64,254,223,130,213,239, 59,135, 93, 58, - 61,241,244,234,247,157, 95, 24,128,109,229, 2,185,221,149,216,177, 95, 45,121,223,217,246,111, 58,164,133,163,163,227, 46, 39, - 39,167, 71,142,142,142,143, 29, 29, 29,247, 0,176, 98, 75, 28, 11, 22, 44, 88,252,255,131, 89, 15, 51, 27,247,192,183,189, 61, -189, 63, 90,189, 98, 9,225, 34,115, 16, 27,140, 38,253,195, 71,249,254, 43,214,172, 61, 84,200,231,124, 89,145,123,231,219,151, - 56, 54,225,234,234, 58,142,203,229, 70, 0,104, 16,106, 25, 6,131,225, 68,126,126,254, 1,152, 55,220, 26, 29, 59,118,188, 66, - 81,148,123,107, 14, 76,211,244,163, 91,183,110,245,126,153, 12,115,118,118, 30,235,236,236,188, 39, 44, 44, 76, 28, 28, 28, 12, - 30,143,135,245,235,215, 47, 40, 44, 44,220,100,190,178,232,195,113,172,180,157, 76,113, 56, 35, 0, 4, 49, 12, 0,130,186, 69, - 27,244, 39,149, 54,101,251, 16, 23,103, 86, 24,113,153, 76,182,148, 32,136,169,245,121,245,173, 66,161,216,240, 79, 20, 18,185, - 92,238, 70, 16, 68, 63,134, 97,124, 73,146,188, 77,211,244,111, 10,133,162,236,175,242, 58, 1,239,246, 8, 15,255,106,202,130, - 5,148,250,210, 37,124,181,103,207,102, 84, 87, 3,192,214,214,150,165,110,221,130,199, 88, 88, 32,130, 0, 66, 64,128, 32,193, -164,148, 87,146,167,110,222, 76, 62, 0, 51, 98,169, 53,133,144,144,144,147, 0, 26, 38,142, 59,149,156,156, 60,188,181, 28, 21, -217,244, 39, 2,174,111,175,138, 7, 23, 62, 1, 48,244,249,245, 70,141,112, 10,197,117,139,160,152,228, 60, 0, 95,252,197,108, - 21, 59, 56, 56,220, 58,118,236,152,107,183,110,221, 56, 0,144,152,152, 56, 57, 34, 34,162,127, 73, 73, 73, 32,128,234,255, 68, - 69, 19, 22, 22,102, 99, 52, 26,163, 41,130, 8,163,105,218, 26, 0, 72,146,172, 52, 49,204, 53, 14,135, 51,229,101,131, 21,179, - 96,193,130,197,255, 89,129, 37,113,236,224,239,227,221,110, 65,236,209,104,183,202,242, 74,205,214, 13,251,146,213, 28,126, 93, - 91,127, 31,222,150, 47,215, 89,207,154,247,225, 60,189,214,112,189, 86,121, 55,221,220,131,202,100, 50,119,129, 64,112,100,233, -210,165,129,225,225,225, 92, 71, 71, 71, 20, 23, 23,227,238,221,187,129,241,241,241,163,142, 29, 59,182, 64,171,213,190,222, 82, - 4,119, 0,144,240,121,158, 7,214,125, 46,227, 91,219,128, 49, 25, 97, 29,208, 9, 0,192,208, 52, 20, 23,207,130, 54, 24,192, -208, 38,184, 14,121,245,201,255, 12,131,174, 93,187,242, 94, 38,179, 92, 92, 92,156,125,124,124,126, 88,188,120, 49, 79,171,213, - 34, 37, 37, 5, 9, 9, 9,180, 82,169, 92,107, 46,135, 99,224, 40,127, 82, 37, 56, 52,114,212,208, 54,195, 7, 58,242, 61,100, - 14,160,105, 33,238,230,232,221,207, 94, 78, 30,114, 42,246,183,143, 76,126,163,198,150,100, 28,187,221, 28, 79, 64, 64, 64, 88, - 69, 69,197,103, 5, 5, 5, 13,194,111,125,215,174, 93,151, 63,189,205,243,129, 2,105,154, 6,135,195, 41,174,171,171, 27,151, -150,150,150,252, 34,222,101,111,195, 96, 52, 62, 41, 23, 28, 14, 76,209,191,185, 30,237,215,175, 95,219,200,200, 72,132,132,132, - 32, 49, 49,177, 95, 76, 76,204,220,147, 39, 79,222, 52, 24, 12,167, 4, 2,193,197,199,143, 31,191,212, 4,139, 60, 96,225,148, - 5, 11, 40,233,163, 71,144,166,164,224,205,234,106,206, 58, 96, 97,107, 4, 86, 72, 72,136,167,157, 13, 14,141,122,189,143,159, - 76,230,207,227,114,237,193, 48, 12, 12,134,242,246, 37, 37, 25, 99,172,172,176,184,170,138, 26,125,243,230,205,251,230,240,133, -134,134, 58,209, 52,189,131, 97, 24, 30, 65, 16,179, 1, 12,139,141,141,133,201,100,194,240,225,195,135,133,132,132,120, 50, 12, -243,181, 84, 42,101,212,106,245, 91,137,137,137,197,205, 57, 87,149, 15,232, 79, 20,148,215,144, 14,161, 83, 81,196, 57, 51,228, -131, 65, 56,109,237, 69,126,186,124,107,225, 53, 0, 24,226,229,101, 81, 85, 32, 90, 36,181, 12,180,173, 42, 56,187,104,136,151, -215,238,216,236,108,213,203,222,208,206,206,206, 27,162,163,163,221,194,194,194, 26,131,228, 6, 7, 7, 83,235,215,175,119,153, - 63,127,254,230,138,138,138,105,102,138,234,246,118,118,118,103,104,154,214,166,167,167,183,111,248,223, 33,232,181, 30,118, 22, -146, 1, 37, 21,170, 75,101,233,191,196,153,195,213,185,115,231, 72,194,100,218,245,229,178, 89,148, 95, 80, 16,196,246,142,208, - 23, 22,162,214,104,176,189,150,154, 54,124,221,166, 93, 37,157, 59,119,158,158,148,148,180,135,173,146, 89,176, 96,241,175, 17, - 88, 2, 1,127,241,138,143, 23, 17, 21,101,149,106,189,170, 90, 47,102,116, 70, 75,177,144,168, 86,150, 84, 62,180, 20,215,205, -159, 55, 71,184,104,241,199,139,107,129, 55,205, 21, 87,190,190,190, 55,118,239,222,237,104,107,107,139,170,170, 42,148,149,149, -225,198,141, 27, 96, 24, 6, 67,135, 14, 21,116,234,216, 49,228,203, 77,155, 18, 0,116,111, 73,100,113,184, 28,130, 43,145,224, -112,159, 16,144, 60, 30, 70,103, 42,158,136, 11,131, 30,177,227, 71, 0, 0, 40, 62, 31,111,220, 83, 2, 0,132, 66,225, 75,103, - 22,195, 48,221,123,246,236,201, 3,128, 5, 11, 22, 84,215,214,214, 70, 17, 4,241,147, 66,161, 40, 48,103,127,187,192, 17, 62, -246, 14, 14,113, 27,215,188, 99, 27,232,233, 5,157,193,128,124,101, 1, 24,240, 33,115,148,224,205, 81,157,120, 61, 67,121,237, -190,216,250,251, 69,130,124,181,183, 50,237,215,180, 38,133,165, 68, 18,189,121,243,102, 28, 60,120, 16, 0,112,225,194, 5,248, -248,248, 72, 90, 74,195,221,187,119,189,166, 78,157,186, 31, 64,187, 23,173, 55, 26,193,137,250,236, 39, 0, 64,244,238,137, 84, - 86, 86, 86, 91,145, 72,244,148,249,214, 7,125,250,244, 33,163,162,162,186, 93,184,112,161,219,254,253,251,245, 6,131, 97,115, - 97, 97, 97,204,203,228,169,250,210, 37, 72, 83, 82,128, 75,151, 90,189,111,167, 78,157,220,253,252,236, 18,190,216,184,220,225, -248,137, 52,108,220,184, 7, 15, 30, 60, 0, 0,120,121,121, 97,226,132,177,220,159,126,220, 17,176,120,241,202,171, 38, 83, 72, -120,114,114,114,139,209,205,105,154,222, 17, 21, 21,245,170, 84, 42,197,226,197,139,179, 60, 61, 61, 97,105,105,137,157, 59,119, -194,198,198, 6, 6,131, 33,107,253,250,245,156,194,194, 66,108,217,178,229,187,167,220,173, 63,161,247,176, 62,159, 8,184,190, -189, 58,132, 78,133,212, 82,142,221, 63, 31,192,221,196,125,189,180,134,204, 79,150, 32,110, 18,197, 8,166, 42,115, 37,139,219, -134,246,181,107, 23, 48, 18,109, 58,167,216,107, 77,151,114,150, 13,244, 92,203, 17,106,162, 87,126,241, 2,151,112, 76, 12, 21, - 88,125,211,246,206, 89, 73, 25,208, 24, 52,148,168,255,128,102, 48,162, 79,159, 62, 84,131,192,126,244,232, 17,116, 58, 29,252, -253,253, 73,157, 78,215,207, 92,113,213,187,119,239, 43, 63,252,240,131, 93,175, 94,189,158,153,186, 69,102,103, 61, 56,238,200, -230, 57,159,125,245,163,239,247, 12, 81,217,210,139, 64,231,206,157, 35, 59,182,247,250,118,243,250, 21, 4, 85,155, 15,142,117, - 25, 64,151, 65,177,255, 59, 64,108,139,225,239,205, 71,151,110,221,168, 57,243,150,126, 75,132,134, 50,137,137,137,123,217,106, -153, 5, 11, 22,255, 10,129, 69, 51,116,144,131,131,173,112,203,134,125,137,114, 33, 73,200, 92,157, 9,190,165, 53, 7, 82,137, -128,164,184,106, 47, 47, 87, 30,205,208, 77, 77, 21,242,252, 80, 75, 66, 32, 16, 28,217,187,119,175, 35,151,203, 5, 77,211,112, -112,112, 64, 78, 78, 14, 42, 42, 42, 80, 83, 83,131, 7, 25, 25,104,227,230,138, 57,211,223,145,127,186,241,139, 35, 0, 66,241, -108,115,225, 51,156, 12,205,128, 54, 62,219,162, 70, 16,196, 11,219, 23,155,153, 70,198,172, 33,161, 52, 77, 63, 44, 44, 44,132, - 88, 44,134,159,159,159,244,230,205,155,151, 11, 11, 11, 11,204,226, 28, 51,134,226, 61, 38,126,221,176,102,156, 45, 65,101, 33, - 43,183, 18,222,174, 93, 97,103,229,134,130,146, 26, 36,165,159, 66,214,131,147,240,118,117,199,244,137,222,214,155,118,148,156, - 64,200,116,111, 36,239, 50,188,136, 83,165, 82, 73,221,221,221,225,226,226, 2,154,166, 97, 50,153,144,150,150,214,248,187, 97, -190,196,134,223,155,127,138,135, 13, 85,138,113,175, 13, 67,121,121,185,212,220,115,111, 16, 87,135,190,112, 14, 80,215, 42,120, - 0, 32,146,200,245,163,231, 23,164,117,233,210, 5, 14, 14, 14,188,171, 87,175,206, 7, 16,211,218,252,212, 3,235,191,218,187, -119,203,155, 85, 85, 36, 0,124, 75, 16,180,254, 73, 84,109,179,202,146,131, 61,113,116,211,166, 79, 28, 8, 38, 29,182, 86,235, -112,227,198, 99,232,245, 79,174,124, 89,153, 18,179,223,175, 6,135, 99,129, 47,190, 88, 97,247,198,184, 25,135,241,100,212, 11, -221, 92, 58, 25,134,225,101,102,102, 34, 32, 32, 0,251,247,239,231, 80, 20,133,235,215,175, 67, 36, 18, 97,234,212,169, 8, 12, - 12,228,136, 68, 34, 92,190,124, 25,213,213,213, 68,115,233,188,116, 42,238,211,138,236, 11,159, 20, 81,103,134,236,254,249, 0, -222,153, 48, 14, 50, 99,246,101, 27,111,242,211,161,195,123, 44,167,184,110, 17, 18,139, 64, 27,159,192,145,224,241,165,152,181, -112, 53,178,238,252,106, 83,167,186,253,190,201,144,231,182,242,139,152,185,127, 74,231,161,177,166, 41,123, 47,117, 62,231,158, -236,113, 39,101,250,117, 69,242,174, 91,127, 28,218,143, 3, 82,109,221, 32,174,238,223,191,143, 7, 15, 30,128,162, 40,168,213, -234,103, 38,245,125,154, 51, 56, 56,248, 93,147,201,180, 28, 0,116, 58,221, 62,145, 72, 20,249,245,215, 95,219, 81,212, 31, 51, - 69, 53, 56, 87,197,202,178,138,171, 55,211,238,206,127,119, 76,223, 75,215,238,228,233,185, 35,115,171,110,253, 82,245,162,252, - 12, 11, 11,179, 33,105,122,215, 87, 27, 87, 17,166,236,223, 33,240,235, 11,142,212, 7, 38, 67, 1, 52, 21, 53, 80,231, 20, 65, -191,243, 27,120,189, 55, 15, 27,214,127, 70, 76,152,244,214, 46, 47, 47,175, 35,217,207, 58,120,255,196,112,109,150,147,229,100, - 57,255, 59, 57,255, 93, 2,139, 32,200,106,189,222,192,181,116,115, 49,140,126,189,119,199,228,235,119,178,164,182, 86,100,167, -174, 29,253,239,100,229, 39,193,104,210, 19, 4,105, 86,191, 14, 87, 87,215,113, 43, 86,172,232,104,105,105, 9,154,166, 97,101, -101,133,146,146, 18,232,245,122, 84, 87, 87, 67, 91,163,130, 94, 85,141,212,220, 71, 8,239,219, 23, 3,187,119,247, 59,101, 48, -140,203,207,207,223,223, 20,167,137,164, 24,187,144,174, 24,155, 93, 6, 90,175, 67,140,151, 93,163,107, 53,254, 81, 37, 8,130, -128, 73,167,197,169,174,237, 32,144, 74, 16,244,209,138,151,206,172,162,162,162,228,115,231,206,157, 30, 50,100,200,208,233,211, -167,147, 69, 69, 69,177, 70,163,177,167, 82,169,108,177,121,212,241,158,105,234,148,233, 33, 94,246,214, 36,142,199,159, 65,152, -239,107, 16, 11,184, 40,169, 80,131, 36, 8, 60,120,120, 14, 38,147, 4,169,153,185,232, 30, 40, 65,175,110, 86,174, 53,191,151, - 79, 47,109,186,185,140,168,168,168,128, 82,169,132,193, 96,128,209,104,196,152,177, 99, 17,189,111, 31,106,107,107,161,209,104, -160,211,233, 64,211, 79,244, 68, 81, 73, 13,110,164,198, 34,180, 99,251, 6,199,227,197, 5,130, 3,227,215,155, 39,114, 44,196, - 0, 79,224,160, 87,169, 84,144, 72, 36, 80,215, 42,120, 83,222,105,116,182,120, 23, 46, 92, 64, 82, 82, 18,156,157,157,205, 42, - 71, 47,194, 3, 96,215, 67,147,105,217,208,163, 71, 29,227,143, 30,165,175, 29, 63,158, 47, 80,169,118,154,179,111,183,110,193, - 99,102,205, 26,238, 39, 18,138,144,159,187, 25,190,190, 60, 44,248,192, 14, 81,235, 74, 1, 0,115,102,185, 34, 52,212, 14,213, -149,135, 96,239,184, 20, 11,230,143,242,174,169, 97, 38, 39, 36,164,236,107,190,188, 19,179,127,252,241,199,172, 65,131, 6,113, -146,147,147, 33, 16, 8, 32, 18,137, 32, 20, 10, 33, 18,137, 80, 84, 84, 4,157, 78,135,152,152, 24, 99,125, 19, 98,147,168,111, - 6, 28,250,193, 64,156,190,155,184,175,151, 11,153,147, 58,106,126,143,135,201,215, 83,107,206,255, 30,255,169, 81, 35,204,171, -204, 63,187,200,179, 75,170,253,251, 31,173,194, 55, 27, 86,224,238,245,184,114, 39,119,213, 86, 19,161,125, 97, 58,251,244, 89, -201,113,117,149, 25,102, 70,142,182, 58, 33,191,250,206, 9, 14, 74,139,203,111,111, 68,246, 13,181,192, 39, 96, 82,123, 79, 66, -119,254,252,121, 81,239,222,189,161, 86,171,159,220, 11, 20,133, 31,127,252,145, 54, 26,141, 23, 94,196,105, 48, 24,150, 39, 37, - 37,201,235,234,234, 48, 97,194,132, 57, 43, 87,174,148,112,185,220, 39,247,151,201,244,140,115,181,102,211,247,103,230, 45,223, -122,225,204,254,117,206,107, 22, 71,246,125,115,214,103, 23, 0,196,190,216, 13, 53, 70,111, 90,183,132, 18, 88,235, 65,116, 25, - 4,189, 82,141,199,223, 78,135,174, 74,141,246,159,174, 6,192,131, 78, 79,225,196,168,177,160,108,157,241,118,239,158,156,157, -113, 87,162, 1,140, 98,171,102, 22, 44, 88, 60,247,242,219, 5,128, 67,253, 98,105,253,115,204, 14, 64,131,203,238, 0, 64, 7, -128,255,212,110,207, 47, 63,189,237,243,203, 79,255, 46,173, 55,118, 28,240,100,202,190, 27, 4, 65,180,186,159,104,195, 40,194, -167, 13, 31,230, 57,215,230,210,131,236, 71,234,190,125, 66,229, 23,110,220, 75, 30,242,218,192,174,189,251,119, 11, 43, 46,171, -206,150, 57, 88, 74,174, 94,191, 38,160,105,218,172,246, 29, 46,151, 27, 17, 30, 30,206,169,168,168,128, 88, 44, 70, 73, 73, 9, - 10, 10, 10,160,215,235,161,174,170,132,182,178, 2,234,138,114, 24, 84,149,120,112,243, 58, 58,184,187, 8,234, 59,193,155,133, -231, 29,170,134,217,230, 9,146,132,208,210, 2, 34, 75, 75, 80, 84,235, 34, 83,200,229,242,145, 29, 58,116,184,230,236,236,188, -172,254, 13,255,253,168,168,168, 82,134, 97,176,104,209, 34, 75, 75, 75,203, 24, 15, 15, 15, 65, 75, 60, 22,182,166, 49,221, 58, -182,163,178, 30,223, 70,168,207,104,180,149,247,198,131,130, 42,148, 84,105, 80, 84, 94,139,246,237, 63,130,131,243, 59,176,146, -189,135,219,119,243, 32,151,181, 37, 41, 46,111, 72, 11,130,239,153,229,159,127,250, 9,117,117,117,104,215,174, 29,198,143, 31, -143,133, 11, 23, 98,220,184,113,112,118,118, 70,175,118, 28, 68, 78, 26, 3,165, 82,217,108, 58,215,124, 11,238,218,159,228,201, - 83, 86, 48,201,237, 6,156, 78,123,240,224, 1,178,178,254,220,178,246,251,239,191,163,170,170,170,241, 1,108, 14, 28, 29, 29, -151,200,100,178, 91, 50,153, 44, 77, 38,147,157, 42,118,118,206, 52,120,121, 57,245, 28, 53,138,240,127,227, 13, 42, 79, 34, 33, - 30,186,185, 73,205,225,178,180,196,240,208,208,112,126,101,197,158, 70, 83, 42,114,154, 3,174,196, 5, 32,254,114,103,204,158, -229, 5,146, 16,130, 32,121,168,171,253, 29,254, 1,129, 60, 11, 11,166,217,178, 84,223,161, 61, 59, 32, 32,128, 51, 99,198, 12, - 8, 4, 2, 68, 71, 71, 99,251,246,237,248,242,203, 47,145,149,149, 5, 15, 15, 15,200,229,114, 56, 57, 57,113, 0,100,215,239, -211, 44,172,189,201, 79,181,134,204,203, 54, 62,146,108,130,116,236,161, 53, 10, 71,175,252, 66, 81,182,102, 91,206, 23, 15,239, -170,189, 50,175,199,149,101,221,249,133,206,185,121,161,180,240, 94,141,215,154,109, 57, 95, 68,109, 45, 44,127, 17, 87, 92,220, - 10,211,177, 83,113,250,218,154, 58,206,200,161, 3,212,239, 77, 27,223,222, 86,220,225, 71,184, 12, 10,110,227, 38,159,180,226, -243, 45,186,183,103,204,211,127,251,221, 30, 70,165, 82,161,186,186, 26, 95,125,245,149,241,248,241,227, 5, 38,147,105, 94, 19, - 73,164,234, 5, 17,198,142, 29, 43, 17,137, 68,200,203,203,107,116, 65, 1, 64, 81, 82,118, 59,254,230,157,204,249,239,141,237, - 83,171,213,106,207, 92, 76,204,240,247,241,112, 37, 8,166, 77, 83,231, 77, 17, 68, 88, 64, 80, 16, 24,166, 18, 36,199, 29,249, -223,111,132,186,168, 28,117, 37,229, 32,185, 18, 24, 32,132,158,225, 67, 24,212, 21,143,147, 82,224, 36,181, 4,135, 32,122,178, -143, 18, 22, 44,254,189, 58,170, 41, 45, 2,192,129, 32,136, 19, 4, 65,156, 88,178,100, 73, 63, 0,118, 4, 65,156,168, 23, 65, - 14,245,191,249, 13,219, 52,177,236,240, 52,207,115,251, 62,253,219,126,201,146, 37,253, 9,130, 56,209,163, 71,143, 73,245, 66, -174,213,104, 81,109, 80, 26, 93,212,146,101, 43, 72, 75, 41,223,194,223,175,173,205,241,223, 46, 37,199, 95, 75,201,176, 16, 11, - 5, 53,181,181,252, 47,191,222,238, 78,212,169,205,237,228,237,103,111,111, 15,189, 94,143,251,247,239, 35, 63, 63, 31,122,189, - 30,198,186, 90,104, 43, 43,161,169,168, 0, 93, 87, 3,158,137,134,186,180, 4, 54, 66, 62,240,199, 8,195,230,148,109,163,152, -122,145,224, 34, 8, 2, 66, 75, 11,240, 45,164, 32, 57,148,217,153, 35,147,201, 58, 7, 7, 7, 31, 60,127,254,124,183,240,240, -240, 79, 61, 60, 60,172,138,139,139, 31, 23, 23, 23, 15,216,176, 97,131,214,193,193, 1,111,190,249,102, 7,131,193, 48,165, 37, - 46,158, 80,219,209,195,201, 7,238, 78, 35,225,108, 23,134,178,106, 45, 74, 42,213, 40, 42,171,195,129,195,227,113,246,244,120, -164, 92,158,132,251,215, 35, 81, 86,107, 9,161,109, 63, 0, 76,179,129,220,174, 93,187,134, 29, 59,118, 52,126,190,249,230, 27, -148,151,151, 35, 32, 32, 0,121,121,121,136,141,141, 69, 81, 81, 17, 28, 28, 28,144,146,146,130,157, 59,119,226,250,245,235,173, - 46, 36, 26,141, 6, 92,190,157, 62,122,247, 68, 68,239,158, 8, 19, 35,209, 63,157,247,102, 23, 54,146,156,170, 24, 53,170,163, -194,218,218, 63, 40, 40,104,232, 27,111,188,225,213,173, 91,183,198,245,222,222,222,238, 28, 14,167, 72, 46,151,127, 43,151,203, -131,155, 37,163,153, 16, 27, 91, 63,232,180,153,245,215,152, 3,130, 16,160,255,192, 12,244,236,149, 4,189,129, 15,130, 20,128, - 36,132, 48, 26,203, 96,105,225, 4,134, 33, 90, 10,140, 55, 44, 54, 54, 22, 59,118,236, 64, 78, 78, 78, 99,243,104, 68, 68,196, -236, 9, 19, 38, 28, 49,153, 76, 56,113,226, 4,142, 29, 59, 6, 79, 79, 79, 4, 7, 7, 67,175,215, 15,107,233,188,151,111, 45, -188,246,211,151,167,199,115,141,214,193,124,129,135, 39,169, 18,143,156,217,199, 94, 2, 0,177,217,217, 42, 39,119,213,218, 58, -213,157, 92, 27,215,218,117, 45,119,112, 39,152,196,172,180,235,251, 15,255, 86, 85, 92, 90,198, 13,233, 20,168,254,108,213, 71, -188, 54,109,219,173, 95,177,104,166, 83, 65,181,176,106,224,156,211,153, 71, 98,111,212, 76,142,156,110,124,107,250, 44,205,153, -223,126, 63, 74,211,116, 16,154, 24, 65, 72,211, 52, 20, 10, 5,238,220,185,131,156,156, 28,148,150,150,162,164,164, 4, 42,149, -170,177, 89, 81,172,170, 62,249,205,222,227,169, 18,145, 72,220,173,163,143,251,245,228,116,165, 68, 36, 18,251,180,117,111, 15, -188,120, 2,106,154,166,173,159,228, 33, 1,213,157, 75,208,148,171,160,174,172,129,186,188, 6, 90, 61, 5,141,150,132, 70, 79, -194,190,215, 32,212,212,170,161, 41,175, 4,205, 48, 54,236, 51,134, 5, 11, 22,205, 60,239, 35,214,174, 93,251,121,115,235,159, -250,214, 61,183, 12,130, 32, 78, 48, 12, 19,193, 48, 76, 68,189,152,106,208, 9, 39,158,230, 89,187,118,237,231, 12,195, 68, 92, -189,122,245,103, 0,117, 47,147,214, 22,155,118,202,202,238,213, 88, 16,126,175,207, 91,180,252,212,143,187,183, 56,150,151, 87, -100,241,132, 34,141, 80,200,183, 93,184,104,149,117,109, 93,213,235,181, 21,230,143,122,170,168,168,104,124,120,241,120, 60,152, -234,106, 97, 82,215, 65, 83, 81, 6, 66,175, 5,207,100,130,173, 88, 12,119,103, 39,180,113,146,181,200, 71,209, 38,162,240,236, - 41,156,153,244,218, 51,205,130,180, 94,135,216, 30, 29,192,151, 74, 32,178,182, 65,248,177,203, 79,132, 14,143, 7,172, 88,215, - 34,175,147,147,147,189, 92, 46,255,245,235,175,191,230,149,150,150, 34, 45, 45, 45,245,241,227,199, 85, 54, 54, 54, 22, 6,131, -129,190,119,239,222,185,187,119,239, 70,180,109,219, 22, 12,195,120,183,196,167,170,148,232,245, 6, 26, 5,202,199,200, 87,220, -129,149,212, 29, 12,233,134,226,242, 58, 16,112,132, 65,115,183,177, 47,153, 86,157,143, 90, 45, 97, 86,126,234,245,122, 24, 12, - 6, 24, 12, 6,232,116, 58, 76,158, 60, 25, 87, 19, 18,240,211,177,139,200,203,203,131,167, 76,140,241,227,198,162, 83,167, 78, - 72, 76, 76,124,233, 66,237,243,202,153, 52,145, 72,132,237,219,183, 67, 44, 22,163,181, 2, 75, 38,147,125,225,235,235,219,238, -110,109, 45,210, 51, 51,209,117,236, 88, 0,192,149, 43, 87, 26,183, 81,171,213,152, 56,113, 34, 63, 39, 39,231,173,204,204,204, -183, 24,134,249,178,168,168,104, 65, 83,156, 39, 79, 38,224,189,247,210, 81, 82,242,196,217, 61,240,179,127,227,186,135, 57,122, - 12, 25,254,164,229,202,218,218, 26, 95,124, 97, 94,208, 97,147,201,132,157, 59,119, 66, 36, 18, 53, 10, 44, 30,143,215,115,254, -252,249,175,191,104,123,127,127,255, 22, 57, 63, 24,227, 34,188,146,202,188,111,213,174,109,160,149, 67, 16, 74,141, 41, 29,147, - 11,138,102,127, 48,198,101,243,166, 67, 5, 26, 19,161,221,103, 50,228,185,113,132,154,104,115,210,152, 29,251,181,174,188,237, -244,232, 34,101,213,199,179,166,191,105,103,109,227, 84,243,237,215, 81,214, 36, 73,226,120,146,174, 34,192,203,206,102,100,216, - 87, 53,239,125,240, 73,178,206,248,120, 54,242, 78,220, 69, 51, 97, 79,104,154, 70, 65, 65, 1, 74, 75, 75,145,155,155,139,146, -146, 18, 16, 4,129,146,146,146, 86, 57,148, 47,114,148,117,249, 5, 40, 58,250, 29,100, 19,223, 68,251,213,171, 65,211, 92,168, -235,140, 56,212,107, 0,170,171,212,208,209, 4,172, 59,247,192,192, 19,151, 65,210, 70, 32,225, 42,251, 4, 97,193,130, 69,115, -245,202,137,197,139, 23, 47, 53,115,219,115, 12,195,152, 21, 90,231,121,193,181,120,241,226,165, 13,199,138,138,138, 82, 3, 40, -252,219, 5, 22, 0,168, 74, 51,178,211,211, 57,138,154, 58,181,208,198,214,166,206, 66,202,103,170, 42,171,168,204,251, 89,154, -218,162, 7,119, 91,113,188,140,180,180,180,192,130,130, 2,228, 62,126, 12, 67, 93, 45, 8,157, 22,208,168,241, 74,175,158, 16, - 2, 16, 18, 0,143,214,131,162,248,168,169,169, 6,128,140,150, 72,105,131,225,153, 74,189,177, 89,208,194, 2,124,169, 4, 2, - 75,139,103, 28, 45,115, 32, 18,137,126,218,185,115,167, 92, 46,151, 99,211,166, 77,144,203,229,190, 50,153,172,206,194,194, 66, -100,111,111,143,246,237,219, 35, 52, 52, 20, 23, 46, 92, 0, 65, 16, 15, 90,226, 51,234,248, 73, 25,217, 38,183,234,154, 20, 92, - 79,250, 1, 6,157, 14,109,125,150, 64,107,180,135,196,241, 45,168,245,191, 66, 95,121, 17, 0,192,183,236,139,226,226, 82, 0, -196,157,150,156,187,231,151,111,221,186,133,125, 71,175,192,221,175, 47,138,202, 99,113,231, 78, 34,156,108,126,131,143,127, 0, - 12, 6, 67,107,222, 18,204, 22, 36,102, 22,244,137, 75,150, 44, 65,149, 72, 4, 12, 31, 14, 94,118, 54,244,122, 61,194,194,194, -208,165, 75, 23, 0, 64, 88, 88, 24, 40,138, 66,187,118,237, 96,107,107,139, 35, 71,142, 76, 4,240, 66,129,197, 16, 68, 10,109, - 42,243,245,242,242,106, 20, 88,209,223,151, 32, 57,241, 21, 16,224, 99,203, 55,127, 92, 18,119,119,119, 20, 21,229,128, 32,152, -150, 58,101,158, 26, 62,124,248, 48, 27, 27, 27, 76,155, 54, 13, 34,145, 8,175,189,246, 26,212,106,245, 27,245,111, 52, 88,178, -100, 9, 0, 96,197,138, 21, 88,185,114, 37,234,234,234,154, 12, 81,177,125, 77, 71,103,149,154,142, 36,235, 68,175,245,179,111, - 27,212,127,240, 43,240,244, 25,128,254,131,243, 0,224,115,123,238,195,177,235,150, 90, 31,181,177, 36,246, 94, 61,118,110,121, -248,208,126,203, 86,234, 47,126,186,242,235,138, 22, 95, 88, 42, 31,238, 82,101,114, 71,108,222,178,195,184,105,197,210,249,130, -199,165,250,242,194, 10,186, 70, 34,224, 88,120, 59, 65, 58,123,225,167, 57,133,133,247, 63, 68,222,111, 89,230, 92,195,156,156, - 28,104,181, 90,189,114,252, 0, 0, 32, 0, 73, 68, 65, 84, 90,152, 76, 38,104,181, 90,212,212,212, 32, 63, 63,191,241,250,170, - 37,150, 67,102, 77, 27,209,169, 86,173,174,187,126,251, 94,238,178, 57,111,118,175, 85,171,235,238, 61,204,205, 2,182,208, 77, - 92,243,202, 58, 85,141,173, 78,101, 64,101,106, 22,236,251,123, 64,103, 36,160, 53, 82, 40, 47, 85, 65,111, 2, 12, 36, 23,174, - 99, 38,195, 72,112, 80, 93, 82, 4,242, 37,250, 57,176, 96,193,226,223,229, 96, 17, 4,113, 34, 42, 42, 42,226,159,226, 6,128, -168,168,168,180,168,168,168,191,116,172, 6,129,213,247,169, 55,220,190, 47,170, 43,221,173,171, 92, 62, 95,250,186,179,193,160, -243,173,169,169, 49,113, 56,124,142,155,149,186,168, 60,215,252,131, 25, 12,134, 19,151, 47, 95, 30,213,171, 87, 47,193,189,219, -169,208, 86, 85, 65, 91, 85, 9, 30,109,132,173, 48, 20,164, 65, 7, 66,167,133, 75, 7, 26,234,106, 33, 18,110,222, 53, 24, 12, -134, 19,205,102, 8, 24,134, 54, 62, 17, 14, 36, 73, 61,211, 84, 40,176,144,130, 47,149, 66, 32,181,120, 97, 19, 98, 83,112,116, -116, 20,247,238,221,123, 64, 72, 72, 8, 24,134,193,134, 13, 27,160,211,233,248, 13, 78,145, 94,175,135, 74,165,194,225,195,135, -241,253,247,223,199, 91, 89, 89,237, 45, 44,108, 94,220,210, 70,237,233, 11,241,169,195, 38,189,214,159,127,246,226,183, 48,104, -141,168,209, 90,163, 86,163,131, 74,205,133, 78, 48, 24, 4,113, 25, 36, 37, 64,143, 96,111,156,191,114, 79, 99, 50,232, 99, 91, - 35,134, 8,130,128, 86,171,133, 82, 89,130,114,213, 5, 64, 85, 0,123,189, 10, 53, 15, 31, 32,120,242, 20,232,116,186, 22,185, -150,189, 13,131,131,181,130,243,253,106, 18, 92,190,157,222,231,149, 51, 77,134,138,144, 74,165,141,125,116,204, 65,117,117, 53, -126,248,225, 7,132,133,133,161, 79,159, 62, 40, 40, 40, 64,118,118, 54,134, 13,251,163,149, 45, 53, 53, 21,201,201,201,240,246, -246,110,129,139, 57, 85, 94,126,127,236,200,145, 35,121,215,174, 93, 3,195, 48,240,241,177,130,165,133, 20, 4, 41,128,159,159, - 3,128,187, 32, 8, 2,125,251,246,133, 94, 95,104,172,173,197,169,230, 56,147,147,147,135,135,132,132,120, 26, 12,134,172,192, -192, 64, 78, 81, 81, 17,198,140, 25,131, 3, 7, 14, 52,188,209, 96,241,226,197,207,236, 83, 83, 83,163,105,138,175, 83,215,246, - 31,154, 24,187, 62,124,129,135,167,149, 67, 16, 60,125, 6, 0, 0, 6, 70, 68,194,179,157, 27,170, 74,110,121,234,180,143, 95, -163,136, 50,155, 31,175, 21,164,247, 18, 7, 78, 43,205,187,120, 15,128, 57,129,123, 25,245,189,227,197,185, 92,203,131,135,126, - 57,241,238,136, 17,175,114, 12, 38,218, 24,232,206,177, 58,112,228,164,178,224,113,238, 87,200,253, 45,237,153, 91,165,105,129, -101,170,172,172,132, 84, 42, 69,118,118,182,118,196,136, 17, 2,181, 90,141,123,247,238, 53, 10, 44, 71,123, 91,255,158, 93, 2, -125,215,108,250,254,140, 68, 32, 16, 12,238, 27,234,151,126,239,113, 62,195, 16,143,154,228,101,152,107,247, 50, 50,134, 59,216, -187, 67,113,241, 42, 36,225, 67,161,213, 18,208,232,105,232, 76,128,145,226,193,170, 83, 87,136,188,252, 64, 51, 64,198,237, 84, - 24, 25, 38,158,125,132,176, 96,241,175, 69, 75, 90, 4, 4, 65,156,232,222,189,251,254,167, 93,166,134,223, 0,180, 0,154,235, - 19, 93,242,180,136,106,104, 54,108,234, 56,207,241,190,180,192,138, 67, 51, 35,203,236,237,237, 29,253, 58, 4,120,237,254,238, - 91,232,181, 85,200, 78,223,139, 90, 85, 49, 62,249, 60,193,219,197,197,165, 79, 65, 65, 65,156, 57, 7,203,207,207, 63,112,228, -200,145, 5,157, 2, 2, 66,218,184,186,226,214,163,135,224, 49, 38,240, 76, 38,144,122, 45, 56, 38, 29, 92,253,105,144,164, 4, - 69, 69, 42,236,140,253,253, 78,125, 84,247,166,223,190, 9, 10,110, 35, 70, 99,194,192,225, 96, 12,122,252,214,203, 31, 66,169, - 20, 2,107,107,244, 56,124,241, 73,200, 6,163, 1,143,214,126, 4,158, 68, 10,219,176,190, 45,166, 83,169, 84,214,197,199,199, - 39,102,102,102,118,233,208,161, 3, 86,173, 90,133,188,188, 60, 48, 12, 3,165, 82,169, 41, 41, 41, 41, 40, 43, 43,123, 68, 16, -196,209,194,194,194,221, 48, 35, 82,184,210,135,218,119,246,220,239, 31,118, 14,246,111,255, 74,159,149, 56,113, 98, 57, 42,171, -171, 81,171,229,160, 70,173, 71,173,134,129,179,133, 55,186, 5,133,160,164, 76,135,123,105, 73,249,165, 60,219, 93,173,180, 78, -145,154,154, 10, 15, 91, 2,233, 89,201,176,215,148,163,131,181, 20, 33,225,189,144,147,147, 99,150, 51,101, 52,130, 51,123,222, - 31,163, 5,173,173,173, 81, 85, 85,245,204,126, 98,177, 24,206,206,206,168,174,174,198,161, 67,135,192,152,247, 80, 52,232,116, - 58,248,250,250,226,230,205,155, 56,119,238, 28,250,247,239,143,222,189,123,227,226,197,139, 72, 76, 76, 68,114,114, 50, 8,130, -128,157,157, 93,131,219,214,164,229,118,227, 70,106,140, 84, 74, 44,153, 54,109, 70,224,155,111,190,137,195,135,247, 35,114, 90, - 7, 16,164, 0, 4, 33,192,171, 35,124,177,250,211, 68,116,235,214, 23,246,246, 60,156, 59,151,150,195,225, 88,125,111,134, 88, -253,122,253,250,245, 28,161, 80, 8,157, 78,135,154,154, 26,148,149, 61, 9, 71,245, 34, 7, 75,173, 86, 55, 25, 88, 45, 45,229, -238, 23, 21,213, 76, 5, 89,151,244, 90,169, 33, 37,168,255,224,124, 12,140,152,134,179, 39,246,226,252,153,115,176,231, 62,204, - 49,137,106, 78,151,228,148,170, 10,107,124,118,250,135,190, 77, 41,106,207,236,152,249,106, 22,229, 42,167, 99,150,108,175,174, -108, 41,189,229,233, 63,252,250, 43,131, 87,195,195,186,122,119,116,119,230,151,151, 41,113,228,151,211,105,250,135,135, 79,212, - 87, 84,230, 88,145,171,183,108,217,178, 28, 0,104,154,222,183,105,211,166,183, 63,252,240, 67,135,130,130,130, 70,129,165, 44, - 45, 63,223, 99,248,108, 83, 89,101,149,110,207,166,133, 99, 68, 66, 1,127,217,218, 61, 23, 13, 20,174, 53, 89,185,112, 56, 83, -150,110,251,177,228, 80,204, 94,202, 65,200,195,149, 69, 43,144,253,251, 5,232, 9, 30, 6,255,118, 29, 58,189, 9,213,202, 50, -156,159, 54, 19, 54,114, 91,156, 42,187,103,170, 82, 85, 79, 97,159, 49, 44, 88,252,107,209,156, 22, 41,121, 74, 16,149, 3,120, - 20, 21, 21, 85,250,148,187, 84, 2, 32, 21, 64,167,250,237, 74,158,219,175,132, 32,136,155, 12,195,116,121,138,167,228, 41,161, -245,244,111,221,115,219,164,254, 21,129,213, 44, 74, 75, 75,149, 55, 18,239, 32,254,236,118, 24, 13, 90, 84,213,219, 86,133,197, - 26, 88, 90, 90, 38, 52, 68, 19,127, 1, 2,241,108,172, 12, 70,163,209,188,190,105,243,230,107,239, 78,153, 36,235, 61, 96, 0, - 30,223,190, 5,109,121, 41, 40,147, 9, 20,193, 69, 77,169, 16,197, 69,213,136,250,245,180, 82,173,209,188,254,130, 7,196,243, -156,141,157,220, 25,130,128,208,202, 18, 2,137, 4, 2, 43,203, 63, 28, 43,130, 0, 95,106, 1,174, 68, 10,138,199, 55, 39,157, -168,171,171, 27, 61,125,250,244, 91,167, 78,157,178,153, 48, 97, 2, 94,125,245,213,228,202,202,202,126, 21, 21, 21,230,246, 55, -123,150,243,208, 33,147, 49,112,196,200,173,219,119, 95,157, 58,117,170,237,171, 35,183, 34, 57, 61, 13,149,181,142, 0, 0,103, -123, 9,186,117,248, 8,202, 50, 45,206,156, 62, 81, 65, 27, 53,163,145,118,192,208, 20, 39,195, 48,140,189,189,253, 51,174, 28, - 69, 81,184,120,241, 34,230,206,157, 11,123,139,139, 80, 61,202, 70,199, 94,125, 48,240,205, 41,136,140,140, 4, 69, 81,176,179, -179,123,222,205,248,211,185, 63,141,170,170, 42,180,105,211, 6,191,237,238, 16,160,211, 40,121, 33,182, 0, 1, 43,253,217,243, -195,210, 46, 93,186, 84, 3, 96,183,143,143, 79,204,115, 35, 26,255,196, 73, 16,196,199,159,127,254,249,246,158, 61,123,138,164, - 82, 41,124,124,124, 16, 31, 31,143,248,248,120, 92,190,252,164,127,156,157,157, 29,108,109,109, 81, 89, 89,137,188,188, 60, 53, - 65, 16, 31, 55,195, 73, 87, 87, 83,163,206,158, 61,122,125,196,136,215,237,135, 12,233, 14,153, 76, 5,163,177, 20, 4,201,131, - 64,232,136,221,187,215, 66, 89, 92,142,171, 9, 9,229, 53, 53,156,209, 73, 73,127,154,130,232, 69,233,212,199,198,198, 66, 40, - 20,226,240,225,195, 70, 39, 39, 39,142,181,181,117,147, 14,150, 70,163, 17, 52,197,249,206,162, 59, 5, 0, 62,253, 96,140,203, -198,171,105,197,163, 0,252,228,217,206, 21,231,207,156,195,229,243, 87, 23,135, 5,210, 91,134, 79,236,186, 90,216,255,141,143, -252, 59,191, 77, 73, 45,229,136, 62,114,152, 74, 79,250,246, 51, 77,237, 29, 47,108, 63,242, 81, 11,215,136, 1,128, 26,101,241, -146,168, 47,191,217, 23,181,106,185,104,195, 87,219, 10,213,165, 69, 75,235, 69, 63,211,140,123,213,200,153,147,147,179, 19,192, -206,167,156,230, 31,214,174, 93,123,105,210,164, 73, 14, 13, 14,101, 73,250,175, 9, 37, 64, 66, 64,223,200, 79,122,116, 9,232, -240,217, 87, 63,158,201,205, 43,254,177, 42,163, 49, 6,214,159,210,121,237,218,181,138,206,157, 59, 79,255,104,209,202,111, 87, -173, 94, 65,248,206, 91,140,172,248,155,208,170,245,208, 51, 20, 12, 32,144,180,230, 75, 88, 56, 88,226, 10, 83,206,104, 41,242, -157,236, 63,119,242,111,182,124,190, 36, 88, 78,150,147,229,252,239,228,108,206, 64,184,249,130,191, 95, 52,147,198,205,230,246, -107,130,231, 31,129, 89, 2,203,197,197,165,247,192, 1, 97,232, 57,112, 6,244,218, 74,100,167,237, 65,141,170, 24, 46, 50, 1, -178,115,171,187,215,171, 78,179, 80, 31,153, 61,236,179,205, 91,142, 12,238,218,197,207,199, 69, 46,176,110,227, 1,137,163, 19, - 74, 75, 74,112, 61, 41,203,176,237,204,249, 59,106,141,198,172,169,114,104,154,102, 24,134, 1,143,199, 3, 67, 81,240,159,189, - 8, 36, 73, 62, 55, 90,144,128,101,104, 56, 72, 14, 23, 6, 51,251, 12, 41, 20,138,124,130, 32, 70,207,158, 61,251,247,125,251, -246,145,125,251,246, 13,254,245,215, 95,233,191,146,217,101,119,142,223,163, 2, 71,245,217,242,245,182, 67, 33,161, 97, 30,109, -218,182, 17,244,116,179,130,222, 96, 66,177,178, 12,113, 87,211,181,247,210, 83,243,104,189,110,108, 73, 70,211, 81,220,235, 31, -130,185,206,206,206, 78, 43, 87,174,132,209,104,132,201,100,130,209,104, 68,105,105, 41,146,147,147,209, 57,172, 59,124,223,122, - 27,229,229,229,248,238,187,239,224,234,234,138, 97,195,134, 65,165, 82,225,210,165, 75,185, 77,187, 14, 48, 46,249,120, 34, 7, - 0,184, 92, 24,151, 70, 68, 92, 12, 8, 8, 8,127,181,147,146, 55, 99,246, 19,103,107,221,218,137,188,139, 23, 47,198, 8, 4, -130,157, 15, 31, 62,172,110, 70, 96,195,203,203,139,175,209,104,130, 25,134,225, 84, 87, 87,111,214,106,181, 83,231,207,159, 47, - 95,191,126, 61,130,130,130, 80, 90, 90, 10, 91, 91, 91,200,229,114,212,212,212, 32, 39, 39,199,164,215,235,119,152, 76,166,213, - 74,165,178,164,185, 60, 72, 76, 76,124,104, 50, 5,119, 47, 46,218,126,100,198,123,131,124, 12,134, 80,190,165, 85, 47, 48,140, - 17,149, 21,121, 32,152, 91,250,163,199,126,127, 80, 89, 73,189,158,148,148,116,207,156,107, 68,146,228,123,199,143, 31, 71,195, - 84, 57,133,133,133,217, 36, 73, 54,233, 96,153,131, 77,135, 10, 52, 0,126, 30, 51, 88, 62,175,170,228, 86,123,123,238,195,156, -176, 64,122,203,166, 67, 5, 26, 71,235,186, 53, 5, 37, 23,179, 10,107,206,236,140, 62,114,152,154,242,218,104,147, 92,122,111, -177,189, 27,204,137,140,207, 4, 5, 5,185,147,100,121, 91,101,217,221,196,200,119,222,125,195,138,167, 62, 21,228, 82,218,206, -232,228, 47, 76, 79, 79,127,212, 10, 23,235,233,178,159, 5,160,247, 23, 95,124,113,230,121,107, 92, 89, 90,126,190,123,196, 44, -166,178,178, 42,165, 36,227,215,219, 45,113, 53, 76,127, 51,121, 82,228,174,119,222,154, 78, 5,206, 89,136,252, 11,191, 3, 70, - 3, 20,151,227, 32,182, 48,225, 68,233, 35, 83, 29, 69, 78, 79, 74, 74, 98,163,184,179, 96,193,226,127, 6,102,247,250,246,242, -116, 57,227,213,214,101,144, 87, 91,103, 0, 64,246,195, 66,100, 63, 44,248, 45, 59,167, 96,240, 75, 42,220,198,201,158,137,250, - 80, 12,140,121,147, 61, 63,195, 25, 16, 16,144, 76,146,164,115,107, 78,218,100, 50,229,167,167,167,135,154,147, 78,185, 92, 62, -193,205,205,109,109, 97, 97,225,145,252,252,252, 15,254, 22,117, 95, 63,217, 51, 73,241, 34, 24,134, 9, 2, 64, 16, 36,105,206, -100,207,141,156,206,206,206, 29, 69, 34,209, 78, 14,135,227,222,112, 29, 27,154,241,244,122, 61, 85, 85, 85, 37,212,233,116, 20, - 0,130,199,227, 25,165, 82,169,134,203,229, 26, 77, 38, 83,174,193, 96,120,183,176,176,240,182,185,111, 33,126,126,126,146,136, -208,140,154,134, 41,116,150,124, 60, 17,107,247, 53, 91,118, 26, 57,239,221,187,215,222,198,198,102, 28, 65, 16, 99, 24,134,233, -160, 82,169,180,203,151, 47, 79,137,139,139,171,118,119,119, 31,210,171, 87, 47,226,214,173, 91,120,244,232, 17, 83, 83, 83,115, -136, 36,201,143, 11, 10, 10,178, 91, 89,150,200, 30, 61,130,199, 91, 72, 49,156,102,208, 9, 96, 8,130, 32,110,215,212, 16,167, -228,242,182, 63, 30, 58,116,200,244,178,111, 96, 33, 33, 33, 39,107,106,106,134,221,187,119,175,169,183,170,231,239,163, 38, 57, - 55, 44, 13,252,184,123,159,240,209,241,113,151,143, 46,250, 60,237,211,167,215,189, 63,202, 38,114,226,251,115,215,255,180,245, -171,133, 91,143, 85,236, 49, 39,157, 33, 33, 33,158, 0,198, 51, 12, 19, 64, 16,132, 15, 77, 67, 72, 16, 76, 57, 65, 16,233, 52, - 77,167,210, 52,125,252,246,237,219,133,255, 13,111,180, 79, 79,246, 76,152, 76,214, 38,130, 48,119,178,103,214, 33, 96, 57, 89, - 78,214,193,250, 63, 9,179, 35,112,103,231, 20, 12,206,206, 41, 64,187,118,237,152,251,247,239,183, 74,156, 53,245,246, 93, 31, -161,125,255, 95, 33, 73, 75, 75, 11,249, 39, 51, 72,161, 80,252,172, 80, 40,126,254, 91, 73,227,226,140, 74, 96, 15,158,124, 94, - 10,245, 2,169,155, 57,219,214,213,213,161,178,178,242,165,147,155,145,145, 81, 59, 42,236, 15,103,139,195,129,209,220,125, 7, - 13, 26,244, 88,175,215,159, 3,144, 15,192, 26, 64,185,193, 96,136, 45, 45, 45, 45, 54,153, 76,161,143, 31, 63,254,164,222,137, -252,180,184,184,248,101,227, 72,208, 87,175,166,252, 4,224,167, 63,175, 74,254, 75,151, 42, 57, 57,121,184, 92, 46, 79,182,179, -179,243,214,104, 52,124,141, 70,195,101, 24,166,177,236,139, 68,162,146,134,136,233, 45,193,202, 18,209, 20, 81,102,103, 99, 73, -252,201,169,177,119,193, 97,117,237,157,246,246, 46, 56,220,138,180,229,116,234,212,233, 7,146, 36,219,210, 52,237, 4,192,146, - 97, 80,202, 48, 76,169,201,100,202,191,115,231, 78,225,127, 75, 69, 83, 47,160, 34,192,130, 5, 11, 22, 44,254, 54,133,203,114, -178,156, 44, 39,203,201,114,178,156, 44, 39,203,249,175, 2,201,102, 1, 11, 22, 44, 88,176, 96,193,130,197,223, 11,162, 25, 21, -218,154,182,213,151, 81,178,119, 88, 78,150,147,229,100, 57, 89, 78,150,147,229,252,215,113,182,196,205,246,237,250,135,132, 23, -203,201,114,178,156, 44, 39,203,201,114,178,156,255, 62,206,255, 41,176, 77,132, 44, 88,176, 96,193,130, 5, 11, 22,127, 51,154, - 28, 69,232,233,233,234, 79,154,232,158, 12, 67, 82, 12,201, 24,136,106,245,129,236,231,130,108,186,185,185, 89,115, 73,140, 32, - 24, 70, 66, 16,180,137,166,200,248,156,156,252,116,115, 14,236,231,231,199, 3, 48,149,203,229,134,235,245,122, 57,151,203, 85, -104, 52,154, 43, 92, 46,119, 95, 70, 70,134,254,191, 41,147,122,246,236, 57,254,208,161, 67,214, 17, 17, 17, 90,189, 94,111,228, -241,120,156,253,251,247, 11,166, 77,155, 86, 25, 31, 31,255, 82,163, 32,131,131,131,251,173, 91,183,206,115,192,128, 1, 8, 15, - 15,175, 29, 58,116, 40, 47, 52, 52,148,183,104,209,162,156,148,148,148, 11,173,225,114,116,116,244,231,112, 56,223, 19, 4, 65, - 49, 12, 51,249,169, 16, 12,255, 4, 38, 0, 24, 11, 64, 14,160, 8,192, 65, 0, 47, 59,202,114, 8,128, 17, 0,130,234,151,111, - 1, 56, 14, 32,246, 47,164,111, 8,128, 17, 4, 65,116, 2, 0,134, 97, 82,255, 70,206,160,122,206,191, 45,157,127,245,220, 67, - 66, 66,150,243,249,252,119, 0, 64,167,211,237,145, 74,165, 81, 47,218, 46, 46, 46, 78,135, 38, 66,159,248,181, 5,147,126,220, - 23, 0,224, 63, 34, 19, 0,208,210,114,198,195,151, 27, 69,204,164,251, 50, 47,226, 37,252, 51, 95,122, 84,178, 92, 46,159, 57, -108,216,176, 69,177,177,177,159, 21, 20, 20,236, 2, 11, 22, 44, 88,252,183, 10, 44, 79, 79, 87,255, 49,163, 94,255,252,189,119, -103, 16, 20, 69, 34, 35, 51,147,243,254,156, 15, 6,249, 58, 57,185, 72, 52, 26, 63, 6,160,213, 34,209, 29,181,186,174, 96,251, -214,175, 45, 58,180,111,111, 50,153,104,236,216,185,125,232,161, 99, 71,150,182, 36,178, 28, 28, 28, 60,185, 92,238,230, 57,115, -230, 56, 14, 26, 52,136,116,114,114, 66,126,126,190,229,209,163, 71,219,125,247,221,119, 17, 14, 14, 14,243, 74, 74, 74,114, 94, -230,132,100, 50, 89, 47,185, 13,134,136, 4, 76, 63, 84, 19, 80, 27,137, 11, 10, 29, 19, 91, 84, 84,116,249,101, 51, 73,167,211, -205,174,171,171, 11,243,247,247,167,183,111,223, 78, 76,159, 62,157, 33, 8,130, 84,171,213,123,241,146, 97, 38, 68, 34,209,214, - 1, 3, 6,248,132,135,135,103,199,199,199, 15, 7,112,114,236,216,177, 94, 34,145,232, 30,128, 14,173,225,162, 40,106,111,122, -122,122, 39,181, 90,141,208,208,208,239, 0,116,254,135,202,203,119, 54, 54, 54,134,109,219,182,237, 12, 14, 14,246,174,168,168, -168,125,247,221,119, 95,185,125,251,118,127, 0,111,181,130, 71, 2, 96,139, 88, 44,166,230,205,155,119,250,181,215, 94, 75,149, - 72, 36,210,187,119,239,114,231,206,157, 59, 57, 55, 55,119, 12,128, 57, 0,106, 91,203,105,103,103, 39, 90,179,102, 77, 82,143, - 30, 61,148, 66,161, 80,148,147,147, 67,204,155, 55,111,250,221,187,119,255, 10, 39,111,245,234,213,241,125,251,246,205, 22, 8, - 4,226,220,220, 92,234,195, 15, 63,140, 76, 74, 74,122,105, 78,107,107,107,254,242,229,203, 19,250,244,233,243, 72, 40, 20, 74, -178,179,179,201,249,243,231,191,125,255,254,125,179, 57,123,247,238, 61, 94,173, 86,175,186,116,233, 18, 0,160,123,247,238,203, -117, 58,221,178, 63,137, 26,134, 65,120,120,184,134, 36,201,119, 46, 93,186,244,194,242,186, 47,241,163,241, 0,240,225, 39, 13, -203, 79,190, 95,180, 60, 53,116,195,126,194, 63,179, 85, 5,199,175,237, 19,113,183,253,242,172, 73, 0,240,254,135, 79,254,223, -126,185, 97,253, 76,166, 53,162,205,217,217,249,221,174, 93,187, 46,185,126,253,122,116,104,104,232,220, 93,187,118,113, 35, 34, - 34,214,208, 52,237, 61,100,200,144, 49, 9, 9, 9, 27,238,222,189,187,149,173,226, 89,176, 96,241, 95, 37,176, 72, 19,221,243, -189,119,103, 16,227, 38,140, 47, 82, 20, 43,105,169,133,213,132,131, 49, 49,226,246,237,219,147,154, 45, 91, 96, 44, 45,133,105, -193,130, 30,113,113,113,134, 89,243, 22,168,181,154,186,189,114, 39, 71,241,129,159,247,203,142, 28, 62,212, 19, 64,122,115,206, - 21,151,203,221,124,248,240, 97,153,167,167, 39,116, 58, 29, 74, 74, 74,160,215,235,241,218,107,175, 81, 97, 97, 97,178,200,200, -200,205,246,246,246,175,183,198,201,178,183,183,119,234,224,206, 61, 53,113,236,224,246,253,122,135,138,100, 46,109,129,124, 26, - 5,217,247,186,252,126, 45,105, 78,204,217,139, 89,119,171,244,195, 74, 75, 75,139, 91,155, 73,101,101,101,139,222,125,247,221, - 67, 65, 65, 65, 14, 2,129, 0, 78, 78, 78,196,219,111,191, 93,172, 80, 40, 86,191,108,198, 55, 68, 7, 39, 73,210,244,220,247, -203,208,185, 90, 89, 89,193,210,210, 18, 0, 92,254, 74,129, 24, 51,102, 12,149,155,155,251, 14, 77,211,126, 79,255,175, 80, 40, -188,140, 70, 99,233,195,135,143, 58,105,116,250,110, 51, 63, 92,181,102,220,136,126,150, 9, 9, 9,228,240,225,195,185, 23, 47, - 94,156,208, 10, 39,107, 75,135, 14, 29,110,175, 95,191, 94,151,113, 47, 39,240,183,139, 9,164,163,173,132,246,108,211, 70,154, -150,150,198,139,138,138, 42,137,138,138,218, 2, 32,178, 21, 73,223, 50,112,224,192,188, 37, 75,150, 80, 25, 89, 15,188, 46, 39, -164,192, 82,202, 55,185,187, 58, 11, 19, 18, 18, 56,219,183,111,199,210,165, 75, 91,205,217,175, 95,191,123,159,126,250, 41, 83, -164, 44,111,151,243, 80, 1, 11, 41,223,104,103,103, 39,186,120,241, 34,177,111,223, 62,221,220,185,115,183,208, 52,221, 42,206, - 30, 61,122, 60, 88,177, 98, 5,145,121, 63,167,221,149,132, 20, 72, 37, 60, 99, 27,119, 87,225,141, 27, 55,136,175,191,254,218, -176,124,249,114,179,210,201, 48,204,142, 13, 27, 54,224,151, 95,126, 1, 0,252,252,243,207,240,242,242,122,166, 0,169, 53, 26, - 16, 4,129, 71, 15, 31,138,223,123,239,189, 29, 47,122, 33, 72, 63,238,139,125,137,192,212,169, 83,139,204, 58,131,140, 13,173, -118,173, 26,132,213,140, 25, 51,242,155,216,108,210,214,141,230,139,172,158, 61,123, 46, 58,112,224,128,125, 76, 76,204,135, 71, -143, 30, 5, 0,136,197, 98,241, 55,223,124, 51,115,228,200,145,120,235,173,183, 22,177, 2,139, 5, 11, 22,255,117, 2,139, 97, - 72,138,162, 72, 40,139, 75, 13, 3, 95, 25, 20,249,205,182,109, 2, 62,159, 15,157, 78,135,218,243,231,193,104,181,176, 18,137, - 48,108,216, 48,110, 96, 96,160,229,244,200,200,183,149,197, 69, 59, 41,138,148, 49, 12, 73,181,112,204,169,115,230,204,113,244, -244,244,124,102, 2, 97,147,201,132,226,226, 98, 88, 88, 88,224,141, 55,222,176,255,225,135, 31,166, 2, 48,203,238,119,116,116, -108,227,211,214,254,106,204,183, 31,202, 28,173, 9,160,228, 48,240,248, 30,240,147, 16, 62,142, 30,240,233,223, 91, 52,162, 91, - 96,167,241,235,247,165,144, 36,217, 67,169, 84, 62,106, 77, 38, 61,122,244,232,138, 78,167,123, 71,163,209, 28, 3, 64,198,199, -199, 51,185,185,185,239, 21, 23, 23, 63,126,217,140, 55,153, 76,168,172,172, 4, 77,211, 20,128,198,111,147,153, 83,249,252, 19, - 24, 51,102, 12,149,151,151,247,174,159,159, 95,187,221,187,119, 67,169, 84, 66, 40, 20,130,166,105,116,239,222,221,253,149, 87, - 94,121, 80, 82, 94,101, 99, 52,154,244,249,143, 31,134,174,221,144, 82,210,201,191,195,149,152,152,152, 96,123,123,251, 55,204, - 20, 88, 67, 44, 44, 44, 56,159,125,246,153, 90,230,234, 53, 78,238,238,195,189,122,243,118, 22, 79,204,103,202,170, 84,170,148, -148,148,172, 85,171, 86,245, 62,117,234,148,242,206,157, 59, 67, 96, 94,147,217, 16, 59, 59, 59,209,226,197,139, 9, 43, 59,231, -129,225,189,221,185, 73,183,210, 31,240,197,124, 58, 60, 60,124,196,213,171, 87,191,155, 63,127,126,240,201,147, 39,171, 19, 18, - 18,204,230,180,181,181,229,174, 94,189,218,228,228,236, 49,210,189,109, 59,174,139,204,222, 31, 0,238,102,221,255,182,184,184, -248,193,123,239,189,215,237,244,233,211,170,216,216, 88,179, 57,173,172,172,120,203,151, 47,103,252, 2,131, 35, 3,130, 58,147, -199,127,187,148, 32,146,240, 77,213,181,234,154,244,244,244, 7, 11, 23, 46,236,122,242,228, 73,213,205,155, 55, 91,228,172,171, -171,179,112,117,117,133, 76, 38, 3,173, 86,163,186,186, 26, 71,142, 28,129, 74,165,130,201,100,130, 72, 36,194, 87,177,229,208, -220, 63,142,157,155, 87, 67,173, 86, 91,252, 29,229,164,161,121,175, 53,226,170, 25, 97,133,167,132,215,164, 25,189,190, 97,154, -107, 46,108,112,174,174, 92,185,146, 31, 19, 19,227,232,237,237,141,190,125,159, 76,224, 30, 25, 25,137, 87, 94,121, 5,191,252, -242, 11,126,251,237,183,220, 81,163, 70,229, 36, 37, 37,109,200,207,207,223,193, 86,245, 44, 88,176,248,255,141, 23,218, 37, 12, - 65,212,166,101,100,112,165,214,214,147,190,217,182, 77,192,229,114,241,232,209, 35,164,167,167,163,238,252,121,168,175, 94,133, - 82,169,132, 74,165,130,131,131, 3,162, 54,108,144,240, 68,146,200,123,247,239, 83, 12,201, 60, 61, 65,241,159,134, 90,242,249, -252,240, 97,195,134,145, 79,139,171,167, 81, 84, 84,132, 65,131, 6,113, 56, 28, 78,120, 19,105,126,158,147,112,118, 32,142, 31, -220, 53, 79,230,200,185, 13,220,159, 11, 84, 94, 6,140,149,128,186, 6,120,120, 27, 56,250, 5, 92,203,239, 19, 63,205, 25,235, -228, 34,226, 29,199,159,163,208, 55, 59, 36,212,197,197,197,203,219,219,123,247,232,209,163, 73, 0, 8, 15, 15, 39,188,189,189, -119,186,184,184,120, 53,179, 91,179,156, 26,141,230, 90, 69, 69, 5, 49,124,248,112,187, 30, 61,122,156, 29, 62,124,184, 29, 0, - 66,163,209, 92,123, 89,206,122,216,245,235,215,175,204,211,211,243,103, 15, 15, 15,129, 25,219, 55,114,230,230,230,190,227,235, -235,219,110,247,238,221, 20, 69, 81,216,181,107, 23, 14, 30, 60,136, 75,151, 46,161,164,164, 68, 60,127,254,124,235, 95,207, 39, -159, 59,123, 57,245,196,188, 25,239,210, 3, 59, 7,203, 5,165, 69,101,118,118,118, 67, 1,200,204, 76,231,136,217,179,103,159, - 74, 78,127, 40, 35, 40,129,128,199,227, 9,101, 78,246,142,114, 71,167, 54,114, 71,167,246, 22, 98,177, 77,109,109,109,238,177, - 99,199, 24, 60,233,163,100, 22,231,170, 85,171,110,164,223,203,117,100, 72, 30,159,199,227,242,236,109,172,109,199,188, 58,104, - 4, 0,136, 5, 2,113,109,109,173,226,135, 31,126,104, 21,231,138, 21, 43, 46, 23, 20, 87,202, 56, 92,158, 64, 40, 16, 52,206, - 18,110,107, 99,229, 34,149, 72,196, 58,157, 46,111,247,238,221,198,214,112, 46, 91,182, 44, 62,227,126,174, 19, 73, 82, 20, 73, - 18, 28, 7, 59, 27,123, 59, 59, 59,185,157,141,173,139,136,207,151,212,212,212,228,255,252,243,207, 38,115, 57,139,139,139,145, -153,153, 9,183, 46, 93,112,238,220, 57,184,185,185, 97,236,216,177, 24, 55,110, 28, 68, 34, 17,186, 90, 63,192,107, 67,122,224, -193,131, 7, 77, 94,119,115, 4,147,179,179,115, 92,107,202, 18,240,164, 89,176, 57,113,245, 60,103, 19,219,221,121,222,185, 58, -114,228,136,253,166, 77,155,130, 63,248,224,131,236, 35, 71,142, 32, 40, 40, 8, 25, 25, 25,112,113,113,193,254,253,251, 49,107, -214,172,236,149, 43, 87, 6, 31, 60,120,208, 41, 48, 48,112,241, 75,222, 71,173, 5,203,201,114,178,156, 44, 90, 22, 88, 6, 26, -199,103,207,157, 95, 23, 29, 29, 45,230,243,249,120,252,248, 49,138,138,138,112,244,240, 97,211,196,142, 29, 85,147,131,131,171, -143, 30, 62,204,232,245,122, 48, 12,131,118,237,218, 97,216,176, 97,162,183,167,207, 80, 18,213,234, 3,205,190,209, 50,140,163, -131,131, 67,227,164,185,207, 88, 91, 83,167,194,104, 52,194,194,194, 2, 4, 65, 56,154,115, 2,114,185,124,108,228,135, 3,220, - 44, 61, 44,139,153,162,189,229, 0, 9,112, 44, 0,142, 37, 32,182, 4, 68, 22,128, 64, 2,109,226,213,114,134, 8,127, 52, 56, -228, 13, 23,185, 92, 62,182, 53,153,100,111,111,191, 44, 38, 38,198,225,246,237,219,140, 74,165,130, 82,169,100, 22, 46, 92,232, - 96,111,111,191,236,101, 51,190,176,176,112, 77,100,100,100,209,232,209,163,173,163,163,163,221, 71,143, 30,109, 29, 25, 25, 89, - 84, 88, 88,184,230,175, 92, 80, 46,151, 75,157, 63,127,222,246,195, 15, 63, 28,111, 48, 24, 18,251,247,239, 95, 22, 28, 28,156, -232,228,228,228,209,210,190, 52, 77,251, 53,136, 43, 0,160, 40, 10,124, 62, 31, 66,161, 16, 86, 86, 86,149, 57, 57, 57,198, 54, -118, 60,142,169,182,162,206,195,138, 47, 12,239,228,239,236,232,234,254,122,109,109,109, 18, 0,133,153, 73, 12, 26, 50,100, 8, - 71, 15, 1,102,190,245, 74,251,247,166,132,183,219,185,241,173,126, 91, 62,155,220,253,203, 85,147,250,172, 89, 50,113, 60, 65, - 27, 13, 30, 30, 30, 94, 13, 29,213, 91, 2, 65, 16,157,122,245,234, 37, 50, 82, 2,242,122,202,189,236,187,247,243,148, 35, 6, -135,135, 53, 30, 48, 36,100,156,157,157,221, 48, 79, 79,207,190, 4, 65, 12, 54, 55,157,125,251,246, 21,112, 69, 18,210,221,217, -190,131,173,181,212,187, 97,133,131,131,195, 96, 39,153,236, 45,130, 49,213,202,229,114, 87,129, 64,208,201, 92,206,254,253,251, - 11,140,148,128,148, 57, 88, 59, 58,218, 89,219,141, 26,210, 59,188,127,120,151, 30, 61,186,119, 29, 24,210,165,203, 84,152, 12, -117, 30, 30, 30, 46,230,158,251,177, 99,199,240,245,215, 95,163,167,191, 63, 60, 60, 60,224,224,224,128,243,231,207,227,252,249, -243,144, 72, 36,168,172,172,196,142, 29, 59, 16, 27, 27,251,151, 43,139, 6, 65,212,208, 49,253,239,192,243, 34,171, 37,177,119, -229,202,149, 35, 49, 49, 49,240,246,246,198,180,105,211,188,246,238,221,155,157,157,157, 13,169, 84,138,212,212, 84,124,244,209, - 71,217, 43, 87,174,244,154, 58,117, 42,246,237,219,135,212,212,212,104,182,154,103,193,130,197,127, 2, 13, 77,132, 76,189,171, -195, 0, 32,242,242,242, 42,125,125,125, 93,188,189,189, 73,157, 78,135,170,170, 42,156, 57,125,218,180,255,224,193,147, 58,157, -110, 14, 73,146,188,125,223,127,191,195,209,201,169,223,152,177, 99, 9,131,193,128, 1, 3, 6,240,207,159, 63,111,119, 59, 47, - 79,213,220, 1, 41,138,106,116,143,102,206,156,137,205,155, 55, 3, 0,166, 76,153,242,135,192, 51, 24, 26, 38,209,109, 17, 98, - 43, 83, 68,159, 87, 2, 44,242, 36, 95, 91,104,122, 84,171, 60,179, 92,174, 74, 85,146,174,224, 8, 57, 16, 75, 65, 27, 97,188, - 87, 19,150,148,253,184,173,159,240,148,178,109,207, 14, 93,113, 48,225,104, 4,158,140,126, 51, 11, 34,145,168,171, 68, 34, 65, - 70, 70, 70,121,104,104,104,165,165,165,165,149,143,143,143,189, 72, 36,234,250,178, 25,175, 84, 42, 31,114, 56,156, 62,175,191, -254,250,251, 36, 73,190, 66,211,244,185,178,178,178,173, 74,165,242,161,153, 15,166, 25, 12,195,172, 0,112,168,225, 63,189, 94, - 15,146, 36,193, 48, 12, 70,140, 24,129,181,107,215,250,159, 59,119, 14,151, 46, 93,178,157, 56,113,226, 53,185, 92, 94, 73, 16, -196, 91,133,133,133, 77,186,100,101,101,101,216,190,125, 59, 40,138,130,181,181, 53, 44, 44, 44, 32, 20, 10,209,183,111,223,226, -245,235,215,251,196,196,196, 24,202,218, 41, 25,126, 77, 85,173,157,200,199,153,180,119,240,124,127,250,187,215, 1,196,152,123, -238, 82,169,212,194,130, 82,215, 80,140,134,218,180,101, 39, 71,204, 33, 33,225,242, 32, 36,107,136, 37,203, 63,101,132, 4, 37, - 70, 43,230,201, 4, 0, 30,143, 39,182,226, 67,199, 19,115, 77, 82, 49,159,248, 59,110, 14,145, 72, 36,145,242,160,107,106, 61, -159,228,240, 1, 8, 9,130,168, 51,151, 83, 40, 20, 74, 45,249,140,182,169,245, 22, 92, 30,143, 32, 8, 33,154,232,228, 62,102, - 0,152,152,205, 79, 4, 78,231, 63,110, 25,152, 76, 38,116,233,210, 5, 7,127, 57,135, 51,151,211, 80,158,159,142, 73, 99,135, -162, 77,155, 54,160,105,186,217, 52, 53,244,193, 50,227,165, 0,206,206,206,113,133,103,173, 90,220,214,220,166,193,167, 57,253, - 71,100, 54, 59, 58,209,197,197,101,122, 80, 80,208,148,163, 71,143,162, 95,191,126,136,136,136, 64,135, 14, 29,188, 38, 78,156, - 8, 0,232,221,187, 55,162,162,162,188,198,143, 31,143, 99,199,142,225,212,169, 83, 8, 13, 13,157,155,152,152,168, 84, 40, 20, -219,216,234,158, 5,139,255,122, 60,163, 69,254, 87, 4,214,159, 32,208,235, 59,104,182,111, 71,221,185,115,224,159, 61,139,147, -157, 58,213, 24,141,198, 5, 10,133, 34, 15, 0, 28, 29, 29,231,197, 28, 58, 20, 63,232,194, 5, 75, 93, 70, 6,220,238,220, 1, -167,125,251, 96,115, 15, 28, 21, 21,213, 40, 10, 0, 32, 58, 58, 26,213,213,213,168,170,170,130,209,104,246, 92,194,224,114,137, -158,142,246,238, 80,224, 30,104, 14,199,226,161,191,174,135, 68,109, 89,224,246,208,190,166,138,219,137,200, 82,118,178,208,168, - 12,221, 72,158, 14,186, 74, 13,156,237, 92,192, 33, 57, 61, 91,147, 73, 13,142,142, 72, 36, 42, 79, 74, 74,122,181, 87,175, 94, -191, 2,176,111,248,255, 47,184, 88,247, 11, 11, 11,231,190,148,245, 72,146, 43, 46, 94,188,232, 24, 19, 19, 51,235,155,111,190, - 97, 0, 64,167,211, 53,118,146,215,233,116,224,112, 56,160,105, 26, 18,137, 4, 28, 14,199,233,232,209,163, 78, 35, 71,142,220, - 10,160,201,235, 36, 22,139,225,228,228, 4, 46,151, 11, 43, 43, 43,212, 86, 87, 72,182,127,190,172,175,216,198,201,118,238,220, - 5,228,212,169, 83,211,190,249,230, 27, 87,103,239,118, 1,153,153,153,185, 19,166, 69,198,239,223,191,191, 6,230,119,112,191, -149,157,157,205, 15,240,107, 39, 60,121,168,134, 22,115, 24,136, 75, 63,131, 88, 36, 7,159,239, 10,177, 64, 0, 30,159,111,175, - 40, 42, 42,102, 24,230,129, 89,119, 36,195,164,230,228,228, 80,109,221,101,124, 85,157, 81, 37,166, 76, 22,247,147,111,101,181, - 11, 9,106, 15, 0,154,140, 91, 23, 5,109,189,249,138,138, 42,129,179,179,115,122, 43,210,201,115,114,114,226,167,101,220,223, -109,111,107,233,238,228,228, 56, 16, 0, 12,234,186, 52, 66,167, 41,164, 56, 28,121,121, 69, 69,137, 70,163,185,111, 46,103, 86, - 86, 22,199,187,141,171,224,200,137,179,123, 28, 45,165,110,246, 34,129,147,165,132, 39,229,155, 76,181,124,218, 84,200, 19, 8, -100,133, 69, 69,165, 12,195,100, 53, 69,210,208, 97, 28,248,238,135,250,243,111,112,119,112, 53,155,129,141,131, 51,202,242,238, -226,252,241, 99,152, 50,115,150, 89,247,211,198, 79,167,237,223,248,233,180, 38,195, 51, 60, 39,136,254,122,205,147,225, 23,247, - 60,167, 66,209,124,133, 58,100,200,144,143,119,237,218, 37,110,164,200,200, 64,120,248,147,158, 4,171, 86,173,194,224,193,131, -225,227,227,131,244,244,116,120,120,120,224,200,145, 35,160, 40,138, 59,125,250,244, 69,187,119,239,102, 5, 22, 11, 22, 44,254, -191,162,201, 33,107, 52,195,208,166,138, 10, 48, 58, 93,131, 67,192, 48, 12, 35,254, 67,216,112,197,214,214,214, 4,215,197, 5, -132, 80,248,228, 79,130,248,203, 61,180, 57, 28, 78,171, 4,150,201, 4, 10,132, 1, 12, 24, 0, 36, 8,144,168, 19,241,177,210, - 41,130, 88, 34, 95, 68,149,136,109, 8,130, 34, 65,144, 4, 64, 0,140,129,134,137, 49,181, 86, 25, 49, 53, 53, 53,208,106,181, - 54,222,222,222, 39, 53, 26,141, 77,253,131,141,249, 79, 93, 56,147,201,148, 77,146, 36, 38, 79,158,140, 6,165,175,211,233,144, -149,149, 5,141, 70, 3,157, 78,135,244,244,116, 84, 87, 87, 67,167,211, 33, 49, 49, 17, 30, 30, 30,224,112, 56,242,230,120,141, - 70, 35, 28, 28, 28, 32,151,203,161,173,173,150, 28,222,181,121,248,250, 85, 75,236, 39,120, 51,228,119, 91,190,160,219,183,111, - 95, 25, 16, 16, 96, 47, 18,137, 42,130,130,130,202,246,239,223,127, 20,173, 11,209,112,124,201,146, 37,221,250,246,237,235, 99, -109, 33, 50, 72,132,128,152,170, 5,159, 81,131,107, 44,134,143,103, 59,154, 16,139, 59,140, 31, 63, 94,139, 39,113,161,204,226, -156, 63,127,190,119, 96, 96,160,220,198, 82, 80, 43,226, 17, 69, 66,202,164,168, 76,191,117, 13, 0, 4,214,182,106, 8, 68,129, - 83,166, 76, 81,183,134,115,225,194,133,126,109,219,182,149,241, 56, 76, 29, 97, 50, 22, 54,174,209,106,138, 41, 46,175, 14, 60, - 94,200,220,185,115,245,173,225,252,240,195, 15,125, 59,117,234,228,228, 96, 37,172, 21,113, 81, 40,162, 76,133, 92,157, 54,143, -103,212, 21, 11,109,108,234, 32, 18, 7, 79,154, 52, 73,215, 20,103,131,123,245,188, 51,196,225,112, 80, 88, 88,136,242,135, 87, - 81,254,240, 54,218,147, 42,116,115,114,128, 84, 42,109,241,126, 34,252, 51,137,140,135, 32, 50, 30,130, 32,252, 51,137, 23, 45, - 63, 47,178,228,114,121,179,101,191,217,166,190, 12,191,184,151,225, 60,117,234,212,186,145, 35, 71, 26,198,141, 27,135,179,103, -207,130, 32, 8, 92,185,114, 5, 5, 5, 5, 24, 60,120, 48, 24,134, 65, 74, 74, 10,244,122, 61, 50, 50, 50, 48,102,204, 24, 68, - 68, 68,212,197,198,198,126,198, 86,245, 44, 88,176,248, 79,200,176,243,224, 0, 0, 32, 0, 73, 68, 65, 84, 9,172,190,245,150, - 92,223,134, 21, 6,129, 32,141,158, 61, 27, 86,191,252, 2,238,189,123, 24,243,250,235,150, 2,129, 96,139, 76, 38,235, 44,151, -203,123,138, 68,162,173,243,231,207,183,176,139,138,130,243,165, 75, 80,156, 61, 11, 3,151,123,179, 53, 7, 87,171,213, 13,110, - 12,116,245, 66,206,218,218, 26, 52, 77,195, 92,237,194,152,144,160, 40,185, 7, 62,218,128, 1, 84,167, 85,253, 19, 38,100,175, -118, 58,167,106,223,254, 94, 53,215,123,189, 99, 55,251,221,109,123,220, 84, 19,220, 26,158, 37, 31,133,133,133, 96, 64, 39,180, - 38,157, 26,141,166,170,182,182,150,240,246,246,182, 79, 74, 74,242,110,215,174,157, 29, 0, 66,171,213,222,248, 43,153, 47,151, -203,187, 7, 7, 7, 31, 12, 9, 9,201, 9, 14, 14, 62, 40,151,203,187,183, 98,247,239,146,147,147, 65, 81, 20,166, 79,159, 14, -149, 74, 5,157, 78,135,188,188, 60,228,230,230, 66,167,211, 33, 45, 45, 13,153,153,153,208,233,116, 72, 73, 73,129, 86,171, 53, - 71,184,193,194,194, 2,149,101, 74,201,129,237, 95, 12,255,108,213, 39,162,170,251, 73,200, 47, 44, 6,109, 82, 23,126,242,201, - 39,217,222,222,222, 87,116, 58,157,175,201,100, 26, 6,224, 64, 43,203, 91, 74,135, 14, 29,250,110,220,184,177,231,234,117,223, -243,173,164,213, 16, 88,219,130,111, 35, 6,223, 35, 20, 83, 62,250,146,179,115,231,182, 91, 87,174, 92, 41,129,121, 35,243, 72, - 0, 41, 93,186,116,233, 89, 84, 84,212, 39, 36, 36, 36,212,165,109, 91,137, 68, 38,175, 16,200,156, 75,105,173,230, 26,100, 46, -189,163,163,163,111, 92,184,112, 65,209, 26, 78, 15, 15,143,222,219,182,109,235,214,166, 77,155,110, 98, 75, 75,169, 70,165,250, -193, 88, 87, 23, 67, 73,165,124,136, 36,131, 98, 99, 99,175,236,223,191,191,168, 53,156,126,126,126,189,162,162,162,186,116,238, -220,185,155,171,151,151, 84,228, 40, 43,147, 56,187, 42, 69, 62,254, 60,200, 92, 95,137,142,142,190,122,241,226, 69,115,211, 9, -146, 36,193,225,112, 32,149, 74, 17, 23, 23,135,136, 94, 29, 32, 39,203, 17,212, 70,142,161,211,222,194,111,191,253, 6, 46,151, -139,191,234,182,190,192,125,109, 81, 16,181, 86,124,181,196,169, 80, 40,182, 37, 38, 38,126,245,198, 27,111,224,149, 87, 94, 65, -106,106, 42, 22, 46, 92,152,125,241,226, 69, 0, 64,106,106, 42,214,172, 89,147,157,144,144,128,105,211,166, 33, 60, 60, 28, 41, - 41, 41,209,108,240, 81, 22, 44,254,207,224, 79, 90,228,255, 50, 26,154, 8,227,158,254,246,178,177,177,208,104,234,242,227,226, -226,244,195,134, 13,227,137, 68, 34,140, 29, 55,142,116,115,119,239, 21, 23, 29,125, 94, 34, 22, 19,227,150, 44,145, 6, 6, 6, - 54, 86,242,191,254,250,171,186,170,170,178,204,205,205,205, 58, 47, 47,175,210,156,131,151,150,150, 66, 38,147,129,162, 40,212, -214,214,130,162, 40, 72,165, 82,212,213,213,153,221, 7,171,182,154, 60,123, 37, 46,237,149,126, 99,103,170, 6,101,235, 37, 70, -198,174,187, 5,201,192, 4, 3, 52,117, 12,140, 52,195,185,206, 88,119, 57,239, 19, 81,177,166, 93,233,221,252,115,219, 28,212, -140,238,108,107, 50,169,162,162, 98,217,204,153, 51, 15, 4, 4, 4,216, 91, 88, 88,192,201,201,137,124,231,157,119, 74,242,242, -242, 62,125,217,140,247,243,243, 27,239,235,235,187, 37, 38, 38,198, 54, 39, 39, 7, 0,218, 46, 89,178,164, 95,102,102,230,156, -140,140, 12,115,130,151, 30,220,184,113,227,150,254,253,251, 75,194,194,194, 26, 5,150, 94,175,111,252,126,254,119, 67,115,108, -115,160,105, 26, 66,161, 16, 49,223,110, 30,244,217,170, 79, 68,101, 25, 9,184,117,229, 44, 98, 31,106,235, 54,236,217,119, 77, -216,224, 86,182,246,124, 29,196, 29, 45,172, 45, 14,246, 27, 56,196,121,212,148,153,228,170, 85,171,152,223,207,196, 48,123,190, -153, 13, 47,223,175, 64, 16, 36, 50,239,166, 98,198,184,222, 76,218,237,180, 46, 0, 92, 91,203,185,110,221,186,218,204,204,204, -170,131, 7, 15, 10,221,220,220,188, 73,146, 20, 20, 21, 23,151,141, 31, 63, 62, 53, 62, 62,190,156,166,233,217, 47,149,206,223, -127,175,141,142,142, 22, 59, 56, 56,248,146, 36, 41,168,170,170, 42,157, 57,115,102,114, 76, 76,140,138,166,233, 57, 47,195, 25, - 30, 30, 94,115,224,192, 1,177,187,187,123, 7,146, 36, 5,133, 69, 69,165,227,198,141, 75, 73, 72, 72,168,198,147, 64,163, 47, -196,216,121,153,232,251,218,147,223, 34,145,168,204,207,207,207,110,216,176, 97, 48,153, 76,200,201,201,193,237,219,183, 49,100, -226,155,176,181,181,197,133, 59,119,160, 80, 40,176,116,233, 82,168,213,106,220,191,127, 95,241,119, 86, 30,245, 77,123,140, 66, -161,248,211,205,154,126,220,183, 49,136,232, 51,226,202,147,136,107,174,159, 85,115,156, 0, 48,104,208,160,105, 35, 71,142,196, - 47,191,252,130,133, 11, 23,102,175, 92,185,210,107,220,184,113, 72, 79, 79, 71,112,112, 48, 22, 44, 88,224,181,113,227,198,108, -134, 97,188,122,244,232, 1, 87, 87,215, 87, 21, 10,197, 71,236,115,139, 5,139,255, 19,136,123,238,251,127, 66, 96, 1, 79,117, - 40, 99, 44, 69,227,118,109,219,106, 53,107,222,130, 90,127,127,127, 27, 39, 39, 39,144, 36,137, 33, 67,135, 18,221,207,156,177, -224,202,229,176,235,216, 17, 12,195,128,166,105, 92,190,116, 9,231,207,159,175,253, 97,207,119, 46,145,111,191, 61, 2, 64,147, - 35,119, 26,154,213, 8,130, 64, 73, 73, 73,163,192, 18, 10,133, 40, 44, 44,132, 76, 38, 3,143,199, 3, 69, 81, 28, 0, 20,128, -102,155, 29,101, 50,217,247, 81,107,210, 23,231, 5,125,232, 25, 46, 38,137,211,181, 69, 32, 65,192,200,208, 32,213, 12,104,154, -129,214, 0, 4,184, 80, 54,231,180,176,190,145,118, 54, 71, 38,147,125,175,248,127,237, 93,121, 92, 84,213,251,126,238,157,125, - 99, 88, 5, 70, 80, 84, 16, 65, 80, 17, 23,114, 41, 67,201, 52, 41,203,181,178,220, 77, 49,205, 22, 83, 83,127,226,146,230,146, -154,153, 75,106,185,175,153, 89, 46, 41,229, 23, 50, 23,100, 81, 17,149, 77, 65,129, 97,223, 97,214,187,252,254,128,161,145, 16, -102, 80, 19,235, 62,159,207,253,220,185,115,103,158, 57,231,220, 59,231, 60,247,125,223,243, 30,181,229, 99,205,157, 59,119,206, -105, 52,154,169,149,149,149, 71, 0,144,151, 46, 93, 98,238,222,189, 59,221,210,128,244,250, 32,149, 74,103, 31, 62,124,216, 97, -233,210,165,197,191,255,254,123,105,255,254,253,109, 87,172, 88,225,248,230,155,111,206,134, 5,217,225,213,106,181, 6,192,174, -220,220,220,233, 61,122,244, 64, 81, 81, 17,244,122, 61,226,226,226,208,190,125,123,196,196,196,192,199,199, 7,209,209,209,240, -245,245, 5, 77,211,208,106,181,160, 45, 72,180,149,125, 63, 67, 33,211, 21, 43,179, 47,159,196,237,107, 49, 56,153,166,171, 90, -253,221,193,147,157,187,118,175,180, 84,248,154,163,131,179,204,223,197,201,241,215,181,107,190,176,201,186,124, 10,135,182,174, -101,127,251,229,151,110, 98, 37,222,237,245,210,251, 35,141, 6,180, 98, 88, 8,251,246,237,141, 87,187,221, 32, 4, 58, 20,255, - 30,219,112, 38,243,250, 56,143,236,222, 31,168, 5,252,219,181,107,247, 42,143,199,107, 1,192, 64,211,116, 34, 44, 92,130,230, - 97,229,212, 2,254, 42,149,234, 85,137, 68,226, 70, 16,132, 70,163,209, 36, 63, 14, 78, 79, 79,207, 87,121, 60, 94, 75, 0, 85, - 52, 77, 39,193,202,165,114, 66, 66, 66, 86,239,216,177,227, 35,157, 78,231,104,102,109, 37, 78,157, 58, 5,189, 94, 15,145, 72, -196,202,229,114,220,191,127,159, 5,160,102, 89,118,234,227,234, 56,134, 15, 31,142, 75,151, 46, 45, 6,176,168,161,207, 21, 21, - 21,241, 29, 28, 28, 40,115,225,245,176, 44,240,150,112, 94,190,124,121,229,228,201,147,103,159, 62,125, 58, 51, 60, 60,188,235, -184,113,227,112,236,216, 49,180,110,221, 26,183,111,223,198, 71, 31,125, 4,130, 32, 60,215,172, 89, 19,127,224,192, 1, 85, 78, - 78,206,151,220,152,197,129,195, 51, 5,226,223, 82,145,122, 99,176, 8,134, 16,120,183,111, 79,235,171, 42,190,159, 52,126,124, -213,141, 27, 55, 64,211, 52, 40,138,130, 54, 58, 26,149,191,254, 10,138,162,192,178, 44, 46, 95,186,132,153, 51,102, 84,104,171, - 42,182,183,109,219,134, 37, 88, 86,110, 70,245,183,213,182,245, 38, 95, 32,170, 93,132, 26,141, 6, 2,129, 0, 10,133, 2,249, -249,249, 16,137, 68,144, 74,165, 8, 8, 8, 32,221,221,221, 67,235, 41,222, 3,156,113,113,113, 70,148,233, 70,252, 52,246,131, - 28,247, 42,138,157, 98,215, 22,173, 4,210,234,120, 43, 0, 45,108, 72,132,248,241,225,192, 47, 96,175,239,124, 75, 77, 80,165, - 35,226,226,226,140, 13,113,214,133, 74,165,234,224,239,239,255,141, 41, 15,214,243,207, 63, 79,118,234,212,233,107,149, 74,213, -161,129,175, 53,200, 41,145, 72,196, 0,112,246,236,217,162,168,168,168,193,103,207,158, 45, 2,192,154,222,183,132,147, 36,201, -111,183,110,221, 10,153, 76, 6,138,162,160,215,235,161,211,233,160,215,235,255,182, 57, 57, 57, 33, 34, 34, 2, 12,195,156,104, -172,156, 29, 59,117,169, 40,229,219,229,238, 60,254, 27, 78,165, 27, 42,154, 32,174,106, 57,253, 92,229, 62,110, 45,170, 5, 70, -225,205,139, 72,185, 30,131,147, 39,126,142,215, 2, 89, 37,101, 88, 94, 82,134, 46,149, 90,216,247,236,136,130, 95,143,204, 37, - 62, 30, 3, 2, 68,189,107,230, 89,196, 89, 35, 80,166,209, 52,221,147,166,233,158, 0,166, 53, 32, 90,172,226,212,106,181, 65, - 26,141,230,177,114, 90, 91, 78, 83, 12, 22, 0, 44, 92,184, 48, 58, 42, 42,106, 84,116,116,116,127,211,150,144,144, 16,124,231, -206,157,224,172,172,172,224, 59, 63,139,121, 9, 9, 9,252,152,152, 24, 65, 76, 76, 76,235,216,216,216,211,150,222,159, 15,131, -121,128,187, 90,173, 14,175, 99,105,170,229, 36,252,110, 17,223,172, 9,219,115,248,240, 97,215,199,197, 9, 0,183,111,223,254, -102,199,142, 29, 30, 1, 1, 1,238,166, 84, 12,219,183,111, 7, 80,157,201,126,237,218,181,232,213,171, 23,220,221,221,157, 99, - 99, 99,219,101,103,103,111,181,246,191,217, 68,112,156, 28, 39,199,201,193, 2,129, 69, 48, 52, 77, 51,112,118,113,182,201,207, -203,219, 24, 22, 54,173,112,201,146, 37,218,200,200, 72,232,111,221,130, 54, 46, 14, 17, 17, 17,248,224,131, 15,170,222,155, 58, - 85,173,173,170, 88,239,234,226,236, 68,211, 12, 8,130,105,208, 66, 66,146,100, 90,114,114, 50, 0, 64,167,211,225,235,175,191, - 54, 26, 12, 6, 40,149, 74,176, 44,139,109,219,182, 49, 0, 48, 96,192, 0,185, 64, 32,176,104, 9,146,236,236,236,107,101,247, -179, 7,254,240,230,180,180,155, 7,126, 46,235, 92,168,199, 40,137, 10,175,119,102,209, 78,146,129,123, 23,191, 43,189,184,101, - 88, 90, 85,241,253,151,179,179,179,175, 89,219, 72,174,174,174,255,183,111,223, 62,231,216,216, 88, 86,167,211, 33, 43, 43,139, -157, 61,123,182,179,171,171,235,255, 61,138, 74, 47, 41, 41, 1, 73,146, 76, 77,187, 48,214,170,247,172,172,172,132, 35, 71,142, -252,116,238,220, 57,184,187,187,131,166,233, 90,129,101,190,231,243,249, 32, 8, 2, 91,182,108, 41, 33, 8, 98, 94, 99,188, 34, -145, 8, 91, 15,157, 60,245,201,230,163,135, 14, 69, 68, 31,109,170,229, 10, 0,100, 54,202,165, 95,174,254,194,214,228,106,220, - 23,155, 93, 70,208,108,253,174, 58, 67, 86,245, 61, 82,191,192,106, 26,231,147, 40,231, 83,228,124,154,168,158,233,167, 38, 90, -182,108,137, 31,126,248,193,234, 24, 44,191,118,196,223,130,219,155,202,153,144,144,240,197,168, 81,163,114,195,195,195, 55,105, -181,218,202,154,135, 55,195,151, 95,126,185,230,253,247,223,207,205,202,202,226, 44, 87, 28, 56,112,120,170,168, 55, 77, 3,195, - 35,255,220,178,117,243,224,131,251, 15,184,242,120,164,235,157, 59,119,175,188, 59,113, 98, 86, 84, 84,148,131,160,125,251,158, - 36, 73, 50,250,185,115, 47, 86,148,149, 22,237,254,254, 59,143,182,109,219, 4,212, 44,246,204, 50, 60,242,207,134,126,176,168, -168,104,231,172, 89,179,122,238,218,181, 75,184,122,245,234,202,172,172,172, 51,151, 47, 95, 30,188,105,211, 38,201,182,109,219, -170, 74, 75, 75,143,159, 60,121,114,104,112,112, 48,165,215,235, 45,206, 47,148,151,151,151,136,188, 60, 95,114,237,182,183,147, -182,238, 25,200,242,200,222,208, 10, 65,176,244, 5,146,170, 56,147,151,157,189, 15, 0,213,148, 70,146, 72, 36, 1, 82,169, 20, - 41, 41, 41,197, 61,123,246,212,139, 68, 34, 65,155, 54,109, 28, 37, 18, 73, 64, 83, 27,158,101, 89,182,184,184, 24, 44,203,242, - 1, 16, 52, 77,243, 1,128,105, 44,105, 81, 29, 8,133,194, 55, 39, 76,152,240,211,166, 77,155, 6, 14, 24, 48, 0,158,158,158, - 48, 26,141,240,241,241,129, 94,175,135,183,183, 55,180, 90, 45,190,250,234, 43, 84, 84, 84,124,148,157,157, 93,220, 16, 31,195, - 48, 16,139,197, 16,137, 68,240,233,216,169, 74, 34,145,160,169,226, 10, 0,228, 34,180,187,127,233, 4, 82,174,199,226, 96,156, -186,164,210,192, 12, 74,202,175,186, 81,247,115, 85,122, 84, 6, 15,154, 86, 45,188,141,168,120, 28,156, 79,162,156, 79,155,211, - 60, 6,203,146,207, 62, 46, 60, 44, 38,170, 33,220,188, 11, 98,218,243, 27, 89,220,220, 88,111,142,171,166,112,154,144,153,153, -185,197,180, 4, 14, 73,146,169, 51,103,206,156,157,149,149,181, 78,173, 86,111, 82,171,213,139,184,174,157, 3, 7, 14,205, 82, - 96,221,185,147,153,120,228,216,209,207,142,254,112,164, 15,203,146, 60,150, 32, 42, 1,242,231,196,196,196, 7,130,215, 61,237, -237,109, 38, 76,158, 48,154, 96, 8, 1, 65, 48, 52,195, 35,255,188,115, 39, 51,177, 17,107,211,245,254,253,251,111, 12, 14, 14, -158, 72,211,244,170,148,148,148, 51, 36, 73,198, 15, 26, 52,232, 19,138,162,214,164,165,165,157,241,241,241, 57,123,240,224,193, - 79,105,154,182,214, 66, 68,101,103,103,239, 66, 3, 49, 96, 77,196, 18, 0,182, 98,177,184, 52, 54, 54,246, 64,159, 62,125,222, - 36, 8,194, 22, 64,105, 83, 9,117, 58,221,204,242,242,114,167,209,163, 71, 27, 1,248,188,241,198, 27,243,146,147,147, 5,149, -149,149,105,214,240,100,100,100,232, 60, 60, 60,134,134,133,133,109, 23, 10,133, 3,240, 87,146, 54,147,144, 3,203,178,160,105, -250,120, 77,219, 60, 20, 2,129,160, 98,200,144, 33, 10, 11, 44, 92, 21,150,150, 47,167,160,124,230,178,157, 39, 87,232,140, 12, - 67, 49,236,212,164,188,170,122, 71,253, 43,137,240,127,220,156,214,224, 89,225, 4,128,105,207,111,220,131,155, 27,107, 5,148, -201,109, 88,247,248, 73,161,198,226,196, 2, 88,220,216,103, 27, 90, 87,176,169,156,117,145,149,149,245, 45, 55, 83,144, 3, 7, - 14,255, 53,112,254,105,142,147,227,228, 56, 57, 78,142,147,227,228, 56,255,115, 32,185, 38,224,192,129, 3, 7, 14, 28, 56,112, -120,188, 32, 26, 80,161,214,172,148,221, 20, 37,155,192,113,114,156, 28, 39,199,201,113,114,156, 28,231,127,142,179, 49,238, 4, -112,120, 34,194,139,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,255, 30,231,191, 10,156,139,144, 3, 7, 14, 28, 56,112,224, -192,129, 19, 88,205, 2,239,162, 58, 41,100, 2,128, 95,107,142,155, 10, 41,128,185,102,124,167, 0,124, 10, 64,204, 53,115,179, - 6,143,107, 2, 14, 77,133, 74,165,234,208,177, 99,199,216, 70,146, 21,115,224,192,225, 25, 6,255, 97, 39, 60, 61, 61, 47,144, - 36,217,142, 36,171, 53,152,121, 46, 36,211,235,186,123,150,101,239,220,188,121,179,247,195, 56,219,182,109, 91,203, 73,146, 36, - 8,130, 0, 73,146, 48, 26,141, 54, 60, 30,175,188, 62, 78,154,166, 51,147,146,146,186, 55,163, 54,219, 99,111,111,111,220,180, -105,211, 55,129,129,129,237,139,138,138, 42,167, 76,153,242,114, 66, 66, 66, 8,128,119,172,228,234, 68, 16,196,238, 30, 61,122, - 28,125,255,253,247, 15,251,249,249,217, 84, 86, 86,138, 15, 30, 60,232,186,101,203,150, 63,104,154,158, 0, 32,145,187, 77,155, - 15, 92, 93, 93, 3, 9,130,216,168, 80, 40,186, 87, 84, 84, 92, 1, 48, 93,173, 86, 95,229, 90,230, 31,197, 36,145, 72, 52,200, -219,219,187,167, 78,167, 43,190,115,231, 78,116, 77, 74,151,156,199,196,111, 11,224,255,196, 98,113,144,151,151, 87,171,228,228, -228,251, 6,131,225, 50,170,211,181,148, 62, 42,185, 74,165,234, 16, 20, 20,116,126,249,242,229,142,243,230,205, 59, 31, 29, 29, -221, 87,173, 86, 39,113,151,149,195,211, 64,171, 86,173,236, 42, 43, 43,183,147, 36, 25, 40,145, 72, 92,109,108,108,160, 80, 40, -114,196, 98,113,188, 76, 38,155,120,242,228,201, 18,174,149, 30,179,192,226,241,120,238,209,209,209,206, 54, 54, 54,160,105, 26, - 12,195,128, 97,152,218,245, 7,107,150, 20, 52, 9, 43,208, 52,141,224,224,224, 6, 87, 19,230,243,249,173, 98, 99, 99,157, 21, -138,191, 82, 45, 25, 12, 6,116,233,210,133,137,139,139,115,174,187,144,176, 94,175, 71,183,110,221,216,102,212, 94, 99, 28, 29, - 29,245, 25, 25,247,122,105,117,134,222, 97,179,151,254,223,232,215,250,217, 94,188,120,145,124,245,213, 87, 5,231,206,157,123, - 23,192,110, 11,185,164, 4, 65,236, 88,176, 96,193, 23,124,161,204,249,200,201, 11,252,175,183,238,187,223,169, 99, 91, 98,214, -140, 48,217,204,153, 51,163,125,125,125,191,163,105,250,121, 0, 58,238, 86,109, 30,255, 23,129, 64,240,211,138, 21, 43,220,114, -212,106,172, 93,183,238, 57, 0,155, 0, 60,199, 53,205, 63,134,185,139, 23, 47, 94,241,246,219,111,131,162, 40,104, 52,154,150, -169,169,169,254, 11, 22, 44,120, 35, 53, 53,181, 39,128,180, 71,228,111,225,237,237,125,107,214,172, 89, 14, 61,123,246, 4, 73, -146, 40, 41, 41,105,121,254,252,249,231,118,236,216,241,238,189,123,247,124, 1,228, 63,202, 15,216,219,219,239, 93,179,102,141, -163, 88, 44,198,247,223,127,239, 56,106,212,168, 63, 0, 60,255, 8, 34,139,116,116,116,156, 9, 32,152, 97, 24, 49,128,203,197, -197,197,203, 0, 24,184,219,133, 67, 67,112,116,116,156,148,155,155,251,141, 76, 38, 19,218,217,217, 65, 42,149, 66, 40, 20, 66, - 36, 18,181,182,183,183,111,173, 80, 40, 94,121,243,205, 55,167, 31, 56,112, 96, 59,215, 90,143, 81, 96,145, 36, 9,169, 84,138, -131, 7, 15,130,199,227, 65, 40, 20, 66, 32, 16, 64, 32, 16, 60,240,218,116,220,170, 85,171, 70,127,204,100,149, 58,126,252, 56, -108,109,109,161, 84, 42,209,177, 99, 71, 16, 4, 1,177, 88,140,136,136,136, 7,120,187,119,239,254, 72, 89,196,155,130, 17, 3, -170,147,116,214,151,188, 49,116,122, 38, 94,125,123,249,240, 42,157,241, 5,150, 37, 52, 57,197,198,162, 37,171,191, 73,236,234, -223,145, 56,116,232, 80, 55, 39, 39,167,183,172, 16, 88, 31,244,236,217,243, 56, 5,145,203,132,113,227,199,141, 39, 9,106,216, -248,143, 23,159,143, 75, 45,222,238, 23,184, 47, 63, 63,115,234,215, 95,127,157, 20, 22, 22, 54, 19,192, 42, 75,203,223,189,123, -247,123, 12,195,180,170, 17,201, 5, 82,169, 84, 21, 25, 25, 73, 53,131,123,173, 37,128,213, 0,140, 0, 86, 2, 48, 79,186,217, - 65, 40, 20,174, 50, 24, 12, 69,168, 94,232,247,126,115,252,179,184,185,185,249,190,243,206, 59, 78,133,249,249, 88,187,110, 93, -109,147,195,130, 69,201, 31, 55, 2, 3, 3,219, 73, 36,146,213, 0, 2,117, 58,157, 27, 0, 72,165,210, 44,150,101,127,212,104, - 52,243,227,226,226, 52, 77,125,160, 5,224,143,135, 47,217,196,174, 90,181, 42,233,211, 79, 63,189,243, 20, 56,219,184,184,184, - 44, 31, 57,114, 36, 78,156, 56,129,147, 39, 79, 26, 37, 18, 9,127,220,184,113,196,244,233,211,237,103,205,154,245, 10,128,175, - 30,177,105, 95, 89,188,120,177, 67,199,142, 29,113,228,200, 17, 92,189,122, 85,211,161, 67, 7,105,191,126,253,192,227,241, 28, -230,207,159, 63, 24,192,206, 71,249,129,226,226,226,101, 75,151, 46,221,181,113,227, 70,155,180,180, 52, 44, 94,188,216,233,253, -247,223,143, 4,208,207, 10,145, 37, 6, 48, 19, 64, 48,143,199,123,126,220,184,113,212,140, 25, 51, 4, 36, 73, 26,215,175, 95, -223, 98,251,246,237,163, 5, 2, 65, 96, 97, 97, 97, 5, 56,160,129,113,206,192, 48,140, 0,128, 4,128,174,177,227,127, 83,221, - 29, 28, 28,166, 21, 21, 21,109,106,217,178, 37, 90,180,104, 81, 59,214, 50, 12,131,202,202, 74,104, 52, 26,180,107,215, 78,216, -177, 99,199,109,211,167, 79, 23,124,243,205, 55,155,185, 59,198,122,129,213, 15, 64,164,217,123,253, 0, 68, 18, 4, 1,134, 97, - 32, 16, 8,192,227,241,192,231,243,107,133,143,249,107,211,246, 16, 33,148, 80,231,102, 38,202,203,203,107,197,149,173,173,109, -173, 37,204,104, 52,254,141,147,166,105,144, 36,201, 54,196,249,152, 80,203,121,120,189, 47,118,198,204,126,115,103, 76,245,241, -224,183,171,247, 59, 99,128,136,203, 83, 87,175,218,220,167,213, 7,203,190, 95, 81, 88, 88,146,231,231,222,130,122,235,237,126, - 30,162,130,220, 2,199,182,109, 67, 1,228, 89, 81,206,190, 83,167, 78, 61,114,228, 92,138, 92, 44, 22,137,120, 36,120, 29, 60, -219, 9,220,148,237, 29, 90,188,220, 83,148,158,150,246,199,187,239,190, 59, 53, 44, 44,204,209, 76, 96, 53, 90,119,150,101, 85, -103,206,156, 1,159,207, 71, 72, 72,136,125,205, 53,166, 44,169,251,147,104, 79, 51, 44,200,205,205,125, 83,171,213,162,123,247, -238,175, 21, 22, 22, 6, 3,136, 7,208,121,232,208,161,127, 28, 62,124,216, 38, 46, 46, 14,207, 61,247,156, 20,192,168,167, 88, -206,191, 65,165, 82,157, 1,240, 18, 65, 16,208,107,181,250,213, 95, 62,176,204, 93, 76, 29,113,245,196,203, 25, 16, 16,224, 43, -145, 72, 46,124,249,229,151, 74, 63, 63, 63, 66, 32, 16,128,162, 40, 36, 39, 39,183,218,179,103,207,123, 87,174, 92, 25, 28, 24, - 24,232, 87,207,162,230,150,212,221,255,143, 63,254,168,244,244,244,172, 87, 48, 86, 85, 85,241, 60, 61, 61, 95,124,136, 24,122, -210,156,153,185,185,185,175,191,244,210, 75, 83,115,114,114,110, 81, 20, 53, 7, 64, 39, 39, 39,167,184,225,195,135, 67, 42,149, - 6,107, 52,154,175, 30,229,186, 59, 59, 59, 15,237,221,187, 55, 54,110,220,136,149, 43, 87,134, 0,248,237,151, 95,126, 25, 80, - 86, 86, 22,241,218,107,175,193,206,206,238,245,146,146,146,157,143,112, 47,117,232,217,179,231,182,143, 62,250,200,230,151, 95, -126,129,183,183, 55,202,202,202, 48, 97,194, 4,231, 13, 27, 54,252, 15,192,139,102, 34,235, 97,156,126, 98,177,120,231,254,253, -251, 21,158,158,158,158, 66,161,144,244,244,244, 68, 81, 81, 17,180, 90,173,120,217,178,101,157, 37, 18,201,213,175,190,250,106, - 39,128, 97, 79,249,127, 84, 10, 64, 9,192, 14,214,185, 87, 19, 26,224,171,141, 79, 21, 8, 4, 16,139,197,144, 72, 36,144, 72, - 36,184,115,231,206, 15, 60, 30,111, 60, 65, 16, 70, 75, 56,137,191, 6,174, 0, 0,209,141, 29, 3, 96,154, 65,191,228, 78, 16, -196,122, 0,193,168,142,163,142,116,118,118,254, 32, 55, 55, 55,195, 82, 78,149, 74,229, 88, 88, 88,248, 85,203,150, 45,225,236, -236,140,154, 7,114,116,239,222, 29, 90,173, 22, 55,110,220, 0,195, 48, 72, 77, 77,133, 82,169, 68,231,206,157,191, 10, 15, 15, - 63, 18, 30, 30, 94,248, 4,235, 94,175, 22,121,214, 5,214,255,106,158, 44, 77,149, 49, 29,131,166,233, 90,129, 85, 87,252,212, - 21, 92, 4, 65,128,101, 89,162, 17, 11, 22,169,215,235,107,197,149, 82,169,172, 21,103, 20, 69,213, 43,176,154, 10, 59, 59,187, - 95, 75, 74, 74,214, 1, 56,211,148,239,143, 27, 55,238,111,241, 28,115,231,206,189,159,159,159, 79, 15,237,219, 65,188,123,247, -137,194,119, 67, 95,116,245,243,114,247,145, 59, 58, 7, 84, 85, 85, 93, 1, 32,176,198, 32,226,231,231,103,179,121,127,100,222, -219, 51, 87, 47,113,119, 81,208, 61,188, 93,148, 94, 14,114,145,163,132, 79,217,177, 84,137, 76, 38,243, 7, 80,104,109,217,109, -109,109,113,252,248,241,230,118,175,217,107, 52, 26, 20, 23, 23, 99,203,150, 45,202,169, 83,167,158, 43, 44, 44,252, 96,232,208, -161, 27,143, 28, 57, 34, 47, 41, 41,129,193, 96, 0, 0, 77, 51,252,159, 44,181,183,183,127, 33, 56, 56, 88,116,224,208, 33, 17, -203,178,149,168, 94,142,168,130,101,217,247,255,233,194, 72, 36,146, 79,150, 45, 91,166,244,243,243, 35, 10, 10, 10,192,178, 44, - 72,146,132,147,147, 19,102,207,158, 45,153, 63,127,190, 91, 82, 82,210,103,104,194,178, 51, 0,136,135, 9, 33, 0,144,201,100, - 52,172,159, 28, 83, 47, 39, 69, 81, 68,159, 62,125,102, 23, 20, 20,116,214,104, 52,159, 91,192, 67, 1, 56,158,153,153,105,126, -115, 95,189,117,235,150,134,207,231, 75,219,182,109, 27,148,152,248,104, 33,139, 29, 58,116,232, 37, 16, 8,112,249,242,101,157, - 89,231, 30,121,237,218, 53,221,176, 97,195,196,173, 90,181,234, 85, 82, 98, 89, 72,138, 74,165,234,224,229,229,117,214,201,201, - 73,106, 90,178,202,209,209, 81,176,106,213, 42,155,204,204, 76, 80, 20,133,121,243,230, 33, 52, 52, 20,246,246,246, 24, 63,126, -188,203,182,109,219,246, 2,232,214,144,229, 74, 44, 22,239, 76, 73, 73,241, 81,169, 84,210, 75,151, 46,161, 75,151, 46, 40, 40, - 40, 64, 78, 78, 14, 42, 42, 42,144,147,147,131,137, 19, 39, 58,175, 93,187, 86,213,140,254, 67, 37,124, 62, 31,114,185,220,174, -180,180,244, 81,226,216,196, 0, 68, 0,192,231,243,107,197,149, 88, 44,134, 88,252,159,152, 23,228, 70, 16, 68,162, 64, 32, 16, -203,229,114, 33, 73,146,144,203,229, 47,187,187,187,223, 8, 9, 9,233,180,103,207,158,116, 75, 72,180, 90,237,110,169, 84, 42, -104,209,162, 5, 0, 96,224,192,129, 24, 55,110, 28,242,243,243,153,236,236,108,248,248,248,144,145,145,145,200,205,205,197,213, -171, 87,209,163, 71, 15,129,131,131,195,110, 0,131,159, 96,221, 30,170, 69,158,101,129, 85,183,114,181, 96, 24,230, 1,113, 85, -159,229,202,220,130,213,152, 59,143, 32, 8,208, 52, 13, 87, 87, 87,200,100, 50,200,100,178,218,115, 38, 49,103,190,177, 44,219, -100, 23, 97,251,246,237,251,203,100,178,231,207,157, 59,247, 26,128, 8, 75,191, 55,114,214,173, 90,171, 85, 93, 4, 4, 4, 92, -152, 55,111,222,160,223,127,255,189,184, 87,151,118,140, 56,251,126,161,204,222,169, 11,209,194, 57, 36,108,242,148,139, 0,246, - 91, 81,196,108,173, 86, 43,110,227, 74,106,178, 75,203,244,237,148,182,118,237,108, 21,178, 54, 78,182,142,246, 18, 17, 41,119, -113,110,105, 52, 26, 75, 0,100, 55, 70,100,238, 22, 20,139,197,122,130, 32,248,118,118,118,176,181,181, 53, 20, 23, 23,107, 3, - 3, 3, 33, 18,137, 10,132, 66,161,197,238,194, 30, 61,122,228,210, 52,237,220,208,103,132, 66, 97,222,165, 75,151, 92, 44,172, -239,252,128,128,128,126,155, 54,109,106,225,237,237,141, 45, 91,182, 40,143, 28, 57,178,115,239,222,189, 40, 41, 41,193,221,187, -119, 49, 97,194,132, 50, 84,187, 17,155,155, 41,253,252,136, 17, 35,176,125,251,118,182,230, 33, 66, 78, 16, 68, 23, 91, 91,219, -219, 55,111,222,252,199,227, 92, 72,146,124,217,199,199,135, 40, 45, 45, 5,203,178,224,241,120, 15,108,179,103,207,150, 78,156, - 56,113,193,115,207, 61, 55, 91, 32, 16,148, 81, 20,117,160,162,162,226,243, 27, 55,110, 52,171, 96,213,231,159,127,254,195,251, -247,239,135,122,120,120,252,252, 8, 52, 44, 69, 81,122,150,101,165, 60, 30, 79,240,168,101, 34, 8,130, 87,211, 31,105,205, 44, -191, 84,205,177, 24, 86,204, 30,117,112,112,216,187,103,207, 30,119,119,119,119, 24,141, 70, 24,141, 70, 84, 86, 86, 34, 50, 50, - 18, 58,157,174,118, 81,246, 47,190,248, 66, 59,125,250,116,201,161, 67,135,242, 52, 26,205,152, 70,104,103, 30, 62,124,216, 70, -165, 82, 73, 53, 26, 13,210,210,210,208,173, 91, 55,148,151,151,163,178,178, 18, 85, 85, 85, 48, 24, 12, 40, 45, 45,181,163,105, - 90,223, 92,174, 53,143,199,131, 88, 44,134, 64, 32, 40,105,213,170, 21, 72,146,148,100,100,100, 52,197,229,166, 4, 80,198,231, -243, 69,230,194, 74, 34,145, 32, 33, 33,225, 96, 3,214,171,250,111, 30,243, 96, 98, 11,142,159, 54, 8,130, 88, 47, 16, 8,196, -142,142,142, 66,211,123, 6,131, 65,104,111,111, 15, 15, 15,143,141, 0, 94,177,144,167,171,163,163, 35, 8,130,128, 80, 40,196, -228,201,147, 17, 29, 29,253, 99,102,102,230,187,121,121,121,168,168,168,216,173, 84, 42,223,200,203,203, 3, 77,211, 72, 79, 79, - 71, 64, 64, 64,215,127,168,154,207,188,176,170, 43,176,250,213,217,155, 44, 82,141, 90,174, 26,113, 17, 62, 0,131,193,160, 8, - 13, 13,101, 76, 98,204, 52,139, 16, 0, 65,211, 52,132, 66,225, 3,156, 53, 2,171, 73, 55,184, 88, 44,198, 43,175,188, 34,145, -201,100,199,126,249,229,151,215, 0,252,222,212, 70, 58,126,100,159,203,170, 69,243, 22, 57,180,108,235,245,217,103,159,241, 7, - 15, 30, 28,113,224,192,129, 30, 78,125,251, 15,138,250,237,160,203,150, 57,199,127, 62,120,240, 96, 57, 44,143,191, 2,128, 63, -127,252,241, 71,213, 39, 51,194,132,253,250,245,251, 97,108,231,143,248, 42, 17, 99,227, 32, 22,242,100, 60, 62, 41,110,213,102, -208,111,145, 81,106, 0, 81, 22,116, 18,170,136,136, 8,216,217,217, 1,128, 72,175,215,195,206,206, 14, 91,182,108,145, 40,149, - 74, 40,149, 74,244,238,221,219, 94, 40, 20, 54,230, 46, 52, 23,188,206,255,251,223,255,160, 80, 40, 80, 89, 89, 9,157, 78, 7, -138,162,192,178,108,237,147,227,139, 47,190,232,108, 69,125,211,202,202,202, 94, 8, 11, 11,139,218,180,105, 83, 11, 47, 47, 47, - 44, 89,178, 4,133,133,133,184,119,239, 30,198,140, 25, 83,118,231,206,157, 96, 60, 24,155,245,212,209,169, 83, 39,246,252,249, -243, 56,117,234, 20, 94,125,245, 85,226,248,241,227, 6,154,166,133,217,217,217,215,179,179,179,159, 74,153, 40,138,178, 17,137, - 68, 48, 26,141,224,243,249,181, 46,124,147,192,114,115,115,195,217,179,103,249, 85, 85, 85,252,194,194, 66,217,142, 29, 59,102, -196,196,196,168, 0,188,245, 52,219,114,243,230,205, 30,147, 39, 79,190,199,231,243,217, 65,131, 6,189,147,145,145,241,186, 74, -165,250,237,220,185,115, 95, 2,176, 58, 93,129,191,191,127, 12,143,199,115, 55, 26,141,194, 99,199,142, 25,105,154, 22,118,234, -212, 41,215,100, 45, 50,141,141, 20, 69,101, 38, 39, 39,119,183,132, 79,163,209, 8,191,253,246, 91,163, 86,171, 21,118,238,220, -185,150,203, 96, 48, 8,127,250,233, 39,163,209,104, 20,118,232,208, 33,198,146,153,205, 69, 69, 69, 99,102,205,154,245,199,193, -131, 7,157,120, 60, 30, 50, 50, 50, 80, 84, 84, 4, 59, 59, 59,236,217,179, 7,109,218,180, 65, 68, 68, 68, 17, 77,211,147,182, -111,223,190, 64,163,209,140,177, 32, 6,235,197,160,160, 32,143,146,146, 18,216,218,218,162,162,162, 2, 49, 49, 49,240,243,243, - 67,118,118, 54, 72,146,132,157,157, 29, 54,111,222, 92, 69, 16, 68, 81,115,248, 15,145, 36, 89, 43,132,204, 4,145, 54, 40, 40, - 8,127,254,249,231, 62, 43, 69,145,222,212,255,152,187, 6,197, 98, 49,120, 60,158,213, 46, 15,134, 97,132, 0,186,154, 6,244, -198,142,155, 1,250,201,229,114, 97,221, 55,139,139,139,133, 62, 62, 62,207, 91, 49, 62, 58, 74,165,210,106,194,126,253,144,151, -151, 71,123,122,122,142, 30, 61,122,180, 17, 0,166, 76,153, 50, 58, 63, 63, 95,107, 52, 26,121,124, 62, 31,249,249,249,104,215, -174,157,227, 63, 81,191,186, 90,228, 89, 23, 88, 4,170,221, 29,230,251, 90, 11, 86, 99,150, 43,211, 57,147, 80,106,228,143, 86, - 18, 27, 27, 43,151,203,229,181,239, 25,141, 70,116,237,218,149, 97, 24,134,168,251, 91,143, 98,193, 18,139,197,176,179,179,195, - 91,111,189, 37,203,202,202,218,121,245,234, 85,119, 75,190, 87, 29,131,245,160,184,218,186,114,201,198,175, 87, 45,115, 76, 61, -245, 61,182,111, 88, 67,203,229,138,184,128,128,128, 23, 74, 75, 75,117,118,114, 29,114, 10,113, 4,192, 94,107,250, 28, 0, 7, - 47, 94,188, 24, 63,112,224,192,139,119,239,222,181,207, 72, 73, 57,175,212, 87, 84, 40, 90,181,165,132,206, 46, 67, 53, 6, 35, -127,196,136, 17, 46, 0, 54, 88,240, 52, 2,134, 97,112,226,196, 9,216,216,216, 64,169, 84,194,206,206, 14, 38,113,213, 84,220, -185,115, 7,153,153,153,144,203,229,144,203,229, 80, 40, 20, 80, 40, 20, 16,137, 68, 15, 88, 31,173, 64, 82, 89, 89,217, 7, 71, -143, 30, 61,176, 98,197, 10, 20, 23, 23,163,178,178, 18,139, 22, 45, 66, 90, 90,218, 44, 84,199,100, 53, 27,116,238,220,153,189, -112,225, 2,206,159, 63,143,202,202, 74,108,220,184, 17, 42,149,170, 63,128,133, 79,179, 92, 12,195, 8, 77,169, 78, 72,146,252, -155, 5,203, 36,182,164, 82, 41,156,156,156, 48,111,222, 60,225,208,161, 67, 67,159,102,153, 87,173, 90,213,126,253,250,245, 59, -118,237,218,117,106,204,152, 49,135, 18, 18, 18,198,219,218,218, 94,255,253,247,223,151,137,197, 98,166, 73,157, 23,159,239, 30, - 31, 31,111, 46,242, 5, 52, 77,203,104,154, 6, 69, 81, 48, 26,141,168,170,170, 66, 72, 72,136,197,124,209,209,209, 50, 0, 88, -184,112,161, 0,128,140, 97, 24,152,243,105, 52, 26,193,128, 1, 3, 44,234, 75,212,106,117,210,229,203,151,159, 31, 61,122,244, -133, 3, 7, 14,216,123,120,120, 32, 51, 51, 19,217,217,217,240,242,242,194,134, 13, 27, 42, 89,150,237, 83, 35,170,126,178,176, -218, 45,237,237,237, 5,247,238,221, 3, 69, 81, 8, 12, 12,196,230,205,155, 49,106,212, 40,248,251,251,163,188,188, 28,137,137, -137,216,185,115,167,189, 80, 40, 28,222, 28,196,149, 73, 4,213,183, 53,241, 1, 67, 41,145, 72,202, 36, 18,137,200, 36,180,174, - 92,185, 98,181,245,202, 12,241, 86, 30, 63, 53,152,250, 96,163,241,193,106,202,229,114,120,123,123, 91,204, 35,151,203, 9,211, - 24,107, 52, 26,161, 86,171,233,132,132,132, 90,129,170, 82,169,232, 75,151, 46,209, 58,157,142,103, 99, 99, 3, 0,176,179,179, -123,210, 34,243,161, 90,228, 89,183, 96, 69,213,217,215, 90,176, 76,130,167,161, 32,119, 62,159,111,169,192, 2,143,199,195,233, -211,167,161, 80, 40, 96, 99, 99, 3, 95, 95, 95,147, 21,166, 94,171, 88, 83, 5,150, 72, 36,130,173,173, 45,206,156, 57,163,189, -122,245,234,228,166, 90,174,182,174, 92,178,241,139,207, 23, 59, 22,222,188,136,204,108, 53, 10,115, 13, 49,127, 38,164,255,138, -234, 4,163,192,205,142,145,132,223, 45,139,197,149,175,147, 52, 64,105,175,252, 41,248,165, 65,110,175,143, 13, 35,167, 79,159, -222,107,220,184,113, 69,239,188,243,206, 76,169, 84,234, 79, 81, 84,113, 68,100,100,250,200,145, 35, 29, 75, 75, 75,199,193,130, -152, 36, 30,143,167, 30, 56,112, 96, 43, 0,176,177,177,209,127,247,221,119, 34, 59, 59, 59,188,253,246,219,218,156,156, 28, 73, - 77,123, 20, 91,106,189,170, 25,108,242, 38, 77,154,228,220, 72, 27,231, 89,217,164, 93, 67, 67, 67,183, 29, 60,120, 16,133,133, -133,168,172,172,132, 80, 40,196,234,213,171,113,239,222,189,175,146,146,146, 18,154, 75,103,214,165, 75, 23,246,210,165, 75,184, -126,253, 58,116, 58, 29, 38, 79,158, 12, 0,132, 90,173, 6,128,129, 79,219, 83,144,149,149,133, 61,123,246,128,166,105,140, 25, - 51, 6,109,218,180,169, 21, 88, 57, 57, 57,248,238,187,239, 64,211, 52, 38, 77,154,132,214,173, 91,195,104, 52, 74,250,245,235, -199,127, 90, 51, 74, 63,250,232,163,212, 31,127,252,241,212,253,251,247, 7,175, 92,185,178, 31, 65, 16,204,236,217,179,191, 80, - 42,149,143, 52,251,178,184,180, 28,183, 83, 50, 64, 81, 84,189, 91, 11, 39, 7,171,249,146,211,238,129,162,232, 90, 14,154,254, -139,207,209,193, 58, 62,181, 90, 93, 85, 88, 88, 88, 57,105,210, 36,187,109,219,182, 17,222,222,222,184,123,247, 46, 4, 2, 1, -108,108,108,170,110,223,190,109,109,106,134,172,162,162, 34,111, 30,143, 39, 76, 73, 73,129,135,135, 7,122,246,236,137,229,203, -151, 35, 63, 63, 31, 20, 69,193,217,217,153, 49, 26,141,113, 6,131, 33,234,105,255,143,234, 90,174, 76, 91,141,229,138, 4,240, - 51,254, 30, 56,222,168, 21,203,220,130,213, 84,235,213, 19, 20,149, 79,108,102,162,183,183,119,164, 82,169, 54, 9, 83, 95, 0, - 0, 32, 0, 73, 68, 65, 84, 12,189,117,235,214, 3, 86,172,183,222,122,203,224,229,229,245,135,165, 60, 74,165,178, 88, 36, 18, - 57,106,181, 90, 92,188,120, 17,190,190,190,194,210,210,210, 21,168, 78,122,141,159,126,250,105, 69,110,110,174,208,205,205, 13, - 0,224,227,227,131,210,210,210,226,127,160,249,254,166, 69,254, 13, 2,171, 94,179, 92, 93, 23, 97, 67, 34,203,148,144,180, 49, - 75,139, 70,163,169,181,136,200,229,114, 48, 12,243,128, 59,178,174,192,170,103, 22,161,197,127,236,115,231,206,105,183,110,221, - 58,162, 86, 12, 89, 0,243, 24,172,111,215, 46, 91,101, 18, 87,215,206,159,197, 79,183, 74, 11,102, 47, 95,187,190,169,141,221, -209, 73,214,197,197,197,241,127,107, 87,127,161,204,186,124, 10,135,182,174,101,175, 69, 71,247,152, 22, 29, 61,124,218,180,105, - 14,168,142,183,202, 2,112, 30,213,211,205, 45, 10,248,190,124,249,114,107,211,235, 30, 61,122, 24,149, 74, 37, 20, 10, 5,242, -243,243,133, 10,133, 66, 18, 25, 25,105,117,172, 67,116,116,180,203, 99,190,215, 58,188,250,234,171, 81, 63,252,240,131,188,164, -164, 4,233,233,233,248,244,211, 79,241,205, 55,223, 64,169, 84,226,196,137, 19, 54,161,161,161,255,187,125,251,118,111, 60,229, -228,170, 1, 1, 1,108,116,116, 52,210,211,211, 65, 81, 20, 94,127,253,245, 70, 31, 30,254, 97, 11, 22, 59,107,214, 44,108,219, -182, 13, 36, 73, 98,236,216,177, 40, 43, 43,171, 61,239,224,224, 80,223, 57, 30, 26,159, 81,250,228, 58, 26, 62,159,141,140,140, - 92,217,175, 95, 63,220,191,127,127,112,183,110,221,190, 30, 63,126,124,214,163,242,218,219,218, 32,192,207, 19, 58,157, 14, 58, -157, 14, 45, 91,182, 68,121,121, 57, 82, 83, 83,161,211,233,224,226,108,103, 53, 95, 87,255,246,208,235,245,208,233,116,112,118, -118, 70,101,101, 37,238,222,189, 11,157, 78,135, 22, 45,236,173,161,107,245,242,203, 47,159,219,183,111,159,227,222,189,123,245, -195,134, 13, 19, 45, 89,178,132, 80, 42,149,200,205,205, 69, 19,195,123, 34,207,159, 63,239, 17, 18, 18,226,147,152,152,136,168, -168, 40,232,245,122,116,237,218, 21,201,201,201,232,213,171, 23,202,202,202, 46, 95,185,114,165, 89,204,114,169, 43,172, 98, 98, - 98, 14, 10,133, 66, 22, 64, 83,173, 77, 0,128,204,204, 76,113,167, 78,157,116, 98,177, 88,116,225,194,133,125,143, 96,189,122, -252, 79, 63,143, 62, 51,241,161,104,223,190,253, 44,119,119,247,144,192,192, 64, 36, 38, 38, 10,197, 98, 49,222,121,231, 29,195, - 43,175,188, 98,224,243,249, 22, 79,184,145, 72, 36, 55,109,108,108, 94,208,233,116,208,235,245,136,136,136,128,131,131,195,167, -161,161,161, 31,168,213,106,100,103,103,139,196, 98,113,173,149, 60, 56, 56, 24, 69, 69, 69, 55,255,129,230,171, 87,139, 60,235, - 2,171, 94, 49,100,110,193,106,200, 61,104,169,192, 34, 73, 18,122,189, 30, 50,153,172, 86, 96,153,103,138,111, 10,231, 67,109, -190,241,241, 23,210,210,210,190, 4,112,178, 41,223, 63,188,119,151,202,150,169,106,149,125,249, 36,110, 95,139,193,143,137, 37, - 5,179,151,175,157,241,218,136,183,115,235, 10, 50,139,158, 60, 90,200, 58,185, 56, 87,139,171,194,155, 23,145,114, 61, 6, 39, - 47,103,198,234,129,100, 0,159, 63,206,139,106,242,173, 55, 39,136,197,226, 89,166,217,130,105,105,105, 24, 51,102, 76, 73,122, -122,122,216,235,175,191,254,205,175,191,254,106,111,111,111,143, 51,103,206,216,180,106,213,106, 5,128,167,233,206, 98, 99, 99, - 99, 81, 88, 88, 61,121,179, 79,159, 62,205, 74, 92, 1, 64,108,108,172, 48, 52, 52,244, 55, 0,253,111,222,188, 9,134, 97, 46, -196,197,197,245, 49,157,111,232,156, 37,250,173,188,188, 92, 96, 99, 99, 83,239, 96, 37, 20, 10,133, 77,176, 56,212,114,254,249, -231,159, 95,124,249,229,151, 63,126,252,241,199, 41,143,200, 89,175, 5, 43, 52, 52, 20, 90,157, 17,153,185,165,160, 40, 10, 85, -250,220, 71,178, 96,133,134,134, 66,163,213,227,158,186, 8, 20, 69,161, 66,107,177,161, 68,246,210, 75, 47,253,122,224,192, 1, -215, 11, 23, 46, 64,175,215, 51, 49, 49, 49,119,167, 76,153,162,156, 56,113,162, 99,117,149,155,132, 13,111,189,245,214,136, 63, -255,252,179,200,199,199,199,225,202,149, 43,200,203,203,131,209,104, 68,255,254,253, 33, 22,139, 51, 86,172, 88, 33,132, 5,161, - 5,255,164,192,186,121,243,166, 73, 88,141,125, 92, 66,200,100,193,250, 47, 97,223,190,125, 89,223,125,247,157,159, 74,165, 90, -255,206, 59,239, 4,183,108,217,146, 20,137, 68,145,124, 62,255, 3,130, 32, 50,172,104,187,241,246,246,246,169, 60, 30,143,151, -149,149,133,148,148, 20,240,120, 60,176, 44, 43,210,104, 52,112,113,113, 1,143,199, 51, 89,199,224,238,238, 78, 39, 39, 39,143, - 7,135,199, 35,176, 76, 88,186,116, 41,182,110,221,138,247,222,123,175,193,207,213,164, 5,168, 59, 16,117,130, 89,174, 12,211, - 44,194,240,240,240, 7,190,103,114, 5,134,133,133, 61,240,229, 99,199,142,213,231, 34,124,128,243, 97, 72, 75, 75,179, 70, 1, -215,114,154, 98,176, 70,142, 25,171,222,248,197,162,235, 59,143,255,214, 89,173, 97,213,179,151,175,253,168,174,184,178,148,211, -215, 69,222, 81,229,228, 16,249,229,234, 47,108, 77,214,176, 3,113, 57,165,160,216,247,172,188, 94,141,214, 93, 32, 16,168,123, -247,238,221, 10,176,216, 45,104, 81,123, 62,106, 57,117, 58, 29, 46, 93,186, 4, 0,152, 48, 97, 66, 73,122,122,250, 11, 0,110, -164,167,167,223, 28, 52,104, 80,228,233,211,167,237,107,158,232, 11,159,102, 57,129,234, 25,173,124, 62,223, 20,211, 64, 60,238, -107,244, 56,202,169, 86,171,223,155, 58,117,234, 86,157, 78,199,175,172,172,124,207,210,115,141,149,243,240,225,195, 41,222,222, -222,253,240,240, 84, 12, 12,128,139,143,194,185,126,253,122, 0,240,121, 20,206,135, 89,176, 14, 30, 60, 8,154,166,225,238, 98, - 11,157, 78, 7,243,120, 79, 75, 56,235, 90,176, 14, 29, 58, 4,134, 97,208, 90,229, 0,157, 78,215, 80,236,225, 3,156,142,142, -142,107,119,237,218,229,126,243,230, 77,100,101,101, 97,221,186,117, 25,249,249,249,175,240,249,124,241,215, 95,127,253,191, 33, - 67,134,184, 80, 20,165,107,194,189,164, 51, 24, 12,227,123,247,238,189,123,217,178,101,119,124,125,125, 91,245,238,221,219,190, -168,168, 40, 47, 62, 62, 62,125,235,214,173, 10,138,162,198,227,225,174,167,127,236,127, 4, 0,217,217,217,199, 81,157,190,198, - 90, 97,213,104, 57,163,163,163, 15,213,112,159,180,144,251, 31,169,251, 99,152,153,216, 96, 57, 39, 76,152,144,137,191,231, 55, -179,170,156,103,207,158, 77, 31, 61,122,244,210, 78,157, 58,133, 43, 20, 10, 36, 37, 37,213,166, 69, 50, 61,160, 19, 4,129,145, - 35, 71, 98,218,180,105, 56,115,230,204,210,145, 35, 71,166,255, 3,237,249,223, 16, 88, 52, 77,223, 79, 79, 79, 87,237,218,181, -139, 71, 16, 4,246,236,217,131,186,129,181,166, 61, 0, 92,186,116,137, 98, 89, 54,181,161, 31,163,105,250,126, 76, 76,140,203, -247,223,127, 47,144, 74,165, 16,139,197,200,206,206, 6,195, 48, 76,110,110, 46,185,111,223,190, 7,130,117, 47, 94,188, 72, 25, - 12,134,123, 79,171,113,254, 72,204,248,224,244,137, 31,157,122, 61,247, 66,137,210,193,161, 94,161,114,120,189, 47, 8,191,134, -173, 88,114, 27,229, 23, 95,174,254,194,206, 36,174, 14,198,229,148,104,117,116,240,173, 2,205,181,199, 93,230, 11, 23, 46,180, -110,166,247,218,162,126,253,250, 49, 0,156, 0, 44, 64,181,229, 14, 0,110,220,189,123,247, 57,111,111,239,143, 81,189,240,245, -162,167,105,189, 98, 24,198,220,114,218,108,131, 44,227,226,226,238, 0, 24, 96,237,185,198, 48,114,228,200, 52, 60,250,114, 51, - 79,156,211,132,162,146, 50,164,222,205,170, 89,202,139, 6,157,145, 99, 22, 63,101, 68, 81,153,117,105,228,138, 75,203,145,122, - 55, 19, 12,195, 86,243,209, 89,181, 65,238, 20, 69,161,160,164,113,175, 61,159,207,239, 27, 30, 30,254, 10, 73,146,228,165, 75, -151,116,171, 87,175,190,159,159,159, 63, 20,192,189,154, 24,190, 23,143, 29, 59,182,215,130,148, 12,230,156, 4, 69, 81,166,129, - 57,209,104, 52,246,154, 51,103,206, 76, 0,125, 1,180, 6,112, 15,213,161, 5, 27,208,140, 50,142, 19, 4, 49,246, 89,228,126, - 20, 60, 43, 51, 19, 15, 30, 60,184,120,218,180,105,252,160,160,160,207,122,244,232, 65,222,189,123, 23,121,121,121,181, 15,151, - 47,191,252, 50, 60, 60, 60,152,147, 39, 79, 46, 31, 54,108,216, 98,112,120,124, 2,171,160,160,224,229,177, 99,199,158, 37, 73, -178,237,195, 22,119, 54,183, 46, 49, 12,147,158,155,155,219, 96, 18,178,130,130,130,151, 23, 45, 90,116,150,207,231,183, 53, 91, -204, 89, 87, 88, 88, 24, 54,114,228,200, 77, 2,129, 64,108,110,237, 98, 24, 38, 67,173, 86,255,163, 1,197,117,243, 96, 13, 26, -242, 70,193,163,114,202, 69,240,188,127,233, 4, 82,174,199,226, 96, 92, 78,113,185,158,126, 49,185,160,234,191,166,252,243, 0, -132, 61,228, 92, 10,128,247,154, 65, 25,137,154,152, 63,130,235, 26,154, 63, 40,138,202, 12,233,255, 34,234,166,101,168,123, 76, -211,116,166,165,124, 3,130,251, 61,148,199,244,186, 49, 62, 30,143,247,113, 80, 80, 16,239,227,143, 63,206, 61,117,234,212,111, -197,197,197, 31, 1,168, 50,179, 48, 38,161,225,100,162,245,113, 58, 81, 20,101,190, 6,162, 14,213, 43, 60,172,226,238,132,102, -137,103, 98,102,226,230,205,155, 23,206,158, 61,123,103,203,150, 45,247,244,237,219,215,199,203,203, 75,105, 99, 99,131,178,178, -178,242,162,162,162,219, 39, 78,156, 24, 51,110,220,184, 59,220,229,108,158,232,244,172,113,142, 24, 0,150, 77,244,101,217, 68, - 95,118,196, 0,176,150, 28, 55,198,217,193, 69,222,175,103,107,101,108,231,150, 54, 87,124,156,229,126,255,165,246,228, 56, 57, -206,255, 32,103,107,145, 72,244, 19,159,207,239,251, 24, 57,157, 68, 34, 81, 11,238, 26,113,156, 79,146,115,196,136, 17,188, 17, - 35, 70,240,158, 98, 57, 31, 10,150,101,123,176, 44, 59,164,102,111,122, 29, 98,122,175, 57, 10, 32, 62, 56, 60,128, 35,191,129, -168,235,242,107,236,184, 49, 36,229, 86, 70, 90,251,196,202,129, 3,135,103, 22,247,244,122,253,208,199,204, 89,160,215,235,185, -150,229,240,100,199,191, 35, 71,232,102, 92,188, 22, 4, 65,252,194,178,108, 40, 0,152, 94,155,191,215,220, 64,114,183, 20, 7, - 14, 28, 56,112,224,192,129,195,227, 5,129,135,155,249,172,137, 17,106,138,169, 48,129,227,228, 56, 57, 78,142,147,227,228, 56, - 57,206,255, 28,103, 99,220,127,251, 62,203,178, 67, 26,178, 96, 17, 4,113,226,191, 38,224, 56,159, 55,199,201,113,114,156, 28, - 39,199,201,113,114,156,143, 4,150,101,135, 84,239,216, 33,230,175,205,246,205, 14, 92, 12, 22, 7, 14, 28, 56,112,224,192,161, -185, 67, 51,119,238,220,207, 8,130,248, 5, 0,230,206,157,251, 89,115, 47, 48, 39,176, 56,112,224,192,193, 12, 42,149,234, 85, - 0,139, 81, 29, 66,177, 66,173, 86, 31,226, 90,133,195,191, 9, 78, 78, 78,114, 71, 71,199,223, 72,146,244, 0, 30, 76,185, 84, -223,250,191, 12,195,168,139,138,138, 6,230,230,230, 22,252,147,156,117,112, 97,197,138, 21, 85, 43, 86,172, 48, 5,180,231, 3, - 32,106, 92,134,249,255, 10,129, 53,231,165, 54,207,183,116,115,219, 87, 82, 88, 24,167,171, 42,159,184,226,247,236,162, 38,254, -182,163, 72, 36, 26, 45,151,203, 67, 88,150,245,228,241,120,183, 74, 75, 75, 35,140, 70,227, 1, 0, 21,220, 95,128,195,211, 70, - 64, 64, 64,103,145, 72,244, 41, 65, 16,207, 81, 20,229, 46, 16, 8,178, 1, 92,214,233,116,171,227,227,227,227,184, 22,250,215, -128, 84,169, 84, 95,217,217,217, 5,149,148,148,140, 1,240, 89, 82, 82, 82, 23,146, 36,225,231,231,247,153, 74,165, 74,181,177, -177,217, 94, 94, 94,126, 65,173, 86,127,128, 38, 46,235,195,161,121,193,211,211, 51,134, 36, 73,119,243,229,218,234, 10,130,186, -123,150,101,239,220,188,121,179,247,195, 56,221,220,220, 60,149, 74,229, 38, 0, 61,234, 19, 21,230,168,201,175,118,165,172,172, - 44, 44, 43, 43,171,222, 68,188,246,246,246, 54,206,206,206,139, 9,130, 24, 73,146,100,163,233, 19, 24,134,161, 89,150, 61,156, -151,151,183,168,184,184,184,252,161,131,175,163, 99, 68, 84, 84, 84, 15, 39, 39,167, 70,115,254, 81, 20,133,204,204,204, 22,161, -161,161, 81,185,185,185,190,255, 36,167, 57, 8,130,208,163,122,237,198,103, 6, 86, 11, 44,130,198, 59, 19, 39,143,117, 43,185, -159,228,182,235,192,233, 14,159, 13,228,191,184,252,204,189, 28,107, 56, 36, 18,201,104, 47, 47,175, 13, 27, 54,108,112,108,219, -182, 45, 33,149, 74,161, 86,171,125,175, 94,189,250, 70,120,120,248,162,204,204,204,241, 20, 69,157,125,196,186,217, 57, 40,248, -159, 22, 85, 80,243,184,174,132,131, 53, 24, 49, 98, 4,239,254,253,251,225, 74,165,242,147, 57,115,230,136,219,181,107, 7,133, - 66,129,188,188,188,214,201,201,201,173, 54,109,218,244,106,175, 94,189,190, 22, 10,133,243, 35, 35, 35, 41,174,197,158,109,168, - 84,170,175,162,162,162,222,111,217,178, 37,250,244,233,115,161,107,215,174, 74,153, 76,134, 83,167, 78,193,211,211,211,223,214, -214,246,242,150, 45, 91, 4,139, 23, 47, 14, 56,122,244, 40,212,106,245, 12,174,213,254, 5,170,154, 36,221,227,226,226,156,101, - 50, 25,104,154,174, 89, 13,128, 1,203,178,181,123,115, 49, 68,211, 52,130,131,131, 13,141,140,109,223, 92,191,126, 61,196,180, -194,137,153,144,170, 23,217,217,217, 33,193,193,193,223, 0,168, 55,161,182,179,179,243,226, 81,163, 70,205,242,247,247,175, 93, -106,142, 97,152,218,125, 65, 65, 1,166, 79,159, 94,251, 27, 12,195, 32, 42, 42,106,230,135, 31,126,136,226,226,226, 15, 27,168, -187,135,147,147, 19,209,216, 18,120,225,225,225, 8, 15, 15,199,134, 13, 27, 8, 62,159,111,215, 72,123, 62,118,206,103, 29,214, - 11, 44,176, 39, 79, 30, 57, 52, 49,180,159, 15, 49,110,104,160,247,222,227, 49, 23,231, 12,104,251,194,202,223,238,222,183, 80, - 92,205,156, 58,117,234, 23, 75,150, 44,145,220,190,125, 27,137,137,137,160, 40, 10, 10,133, 2,157, 59,119, 38, 79,158, 60,169, -154, 57,115,230,145, 63,254,248, 99,130,193, 96, 56,218,212,138,185,218,243, 86,203,165,188,183, 43, 52,236,101, 3, 77, 31,111, -142,141,223,179,103,207, 51, 70,163,113,101,124,124,252,185,103,229,134, 9, 12, 12,236, 35, 20, 10, 23,137, 68,162, 65,255, 86, -113,145,145,145,177,232,249,231,159,255, 36, 60, 60, 92,124,247,238, 93, 36, 37, 37, 65,173, 86,163,109,219,182,104,219,182, 45, -177, 97,195, 6,201,215, 95,127, 61,227,234,213,171, 36,128,217,214,244,233,174,174,174,147, 6, 12, 24, 48,220,201,201,201, 54, - 43, 43,171,244,207, 63,255,252, 73,173, 86,127,139,198,215,140,124, 40,167,147,147,211,184,208,208,208,225, 14, 14, 14, 14,106, -181,186,232,183,223,126,251, 41, 47, 47,111,251, 35, 90, 90, 84, 0,186, 0,112,172, 57, 86,183,105,211,230, 70,122,122,122,222, - 99,228,204,110,211,166, 77, 98, 83, 56,157,156,156,228,124, 62,255, 16, 65, 16, 45, 27,176, 16,100, 83, 20, 53,170,160,160,160, -178, 33, 46,165, 82,249,156, 74,165,194,229,203,151,177, 96,193, 2,135,224,224, 96, 36, 39, 39,131, 36, 73,124,242,201, 39,132, -159,159,159, 32, 39, 39, 7,221,187,119, 71, 68, 68, 68,239,154,229,110, 56, 88,134,195, 0,236, 0,188, 5,192,220, 21,228, 4, -224, 24,170, 87,120, 24,246,180, 10, 39,149, 74,177,127,255,126, 8, 4, 2, 8,133, 66, 20, 23, 23,195,205,205, 13, 66,161, 16, - 2,129,160,118, 19, 10,133,104,213,170, 85,163,124, 12,195,244,228,241,120,168,168,168, 0, 77,211,181,203, 44,149,150,150,130, -101, 89,136, 68,162,218,247, 77,231, 24,134,233,217,128,213,102,100,203,150, 45,113,224,192, 1,212,151, 7, 77,169, 84, 34, 33, -225,175, 9,119, 60, 30, 15, 1, 1, 1, 36, 65, 16, 35, 1,124,216, 0, 47, 11, 0,147, 39, 79,126, 96,121,186,186,155,105,237, - 96,150,101,205,151, 16,251,199, 56,255,213, 2,107,110,255,182, 97,254,129, 1,171, 69, 34,129,148,161,141, 96, 40, 35, 24,163, - 30, 12, 67,225, 78,134, 26,158,206, 34, 76, 24,236,229,177,251, 76,114,194,188,151,218, 7,173, 56,155,146, 84,135,162,238, 84, -203, 54,254,254,254,139,151, 45, 91, 38,249,237,183,223,112,251,246,109, 44, 95,190, 28, 0, 32,151,203,113,234,212, 41,208, 52, -141,181,107,215,218, 12, 26, 52,104, 83,118,118,118, 36,128,162, 70, 56,235,131, 71,251,118,170,161, 71,215,188, 32,246,127,227, -200,250,156, 34,250, 4,128,134, 18,168, 61,137,101,107, 26,229,164, 40,234, 37,129, 64,208,187,107,215,174,175, 90, 40,178,158, - 74, 57,205,197,149, 64, 32, 56,109, 48, 24,100, 34,145,136,223,128, 40,120,170,229,124, 20,206,128,128,128,206, 74,165,242,147, - 69,139, 22,137, 47, 93,186,132,226,226, 98,228,229,229,225,131, 15, 62,192,230,205,155,225,239,239, 15,185, 92,142, 25, 51,102, - 72,166, 79,159, 30,214,189,123,247,195, 49, 49, 49, 49, 22,148,147,236,215,175,223,254, 61,123,246,180,165, 40,138, 4, 0,163, -209,104,159,145,145, 49,118,222,188,121,253,226,226,226,222,106, 66,123,146,189,123,247,222,179,119,239, 94, 47,145, 72, 68,214, -116,214, 45,222,125,247,221,137,243,231,207, 15,142,141,141,125,187,129,251,190,161,246,236, 42,147,201, 58,134,133,133, 21, 12, - 29, 58, 52, 11, 0, 98, 99, 99,137,248,248,248, 62, 99,199,142, 77, 15, 15, 15,143,111, 2,103, 55,153, 76,230,243,254,251,239, -231,191,242,202, 43,217, 66,161,144,185,116,233, 18, 47, 33, 33,161,239,164, 73,147,210,230,207,159,127,205, 26, 78,129, 64,112, -240,232,209,163,253,220,220,220,104,160,122, 53, 5,130, 32, 88,130, 32, 88,146, 36, 89,146, 36,145,150,150,214,102,196,136, 17, -251, 0,188,214, 16,103, 73, 73,201,216,190,125,251, 70, 45, 88,176,192, 1, 0,162,162,162,192,231,243,107, 7,132,219,183,111, - 67,167,211, 97,195,134, 13,134,242,242,242, 73,255,182,123,254, 9,115,182, 2,208, 19,192,239, 0,250,215,136, 44, 39, 0,231, - 0,248, 1,248,243,105,149,147, 36, 73,208, 52, 93, 43,162,206,158, 61,139,205,155, 55,227,192,129, 3,112,115,115,123, 64, 96, - 9, 4, 2, 60,196,229,151, 80, 71,100,152,250,118,208, 52,141,232,232,104,108,223,190, 29,206,206,206,112,114,116,132, 83,139, - 22, 8, 10, 10,130,201,106, 70,211,116,125,188, 15,112, 22, 20, 20,128, 97, 44,123, 86, 98, 89, 22,101,101,101, 22,183,103, 67, - 66,200,124,179,230, 26, 61, 34,231,127, 71, 96,169, 92,157,230,143, 24,254,146, 20, 52, 5, 24, 42, 1, 67, 21, 88, 67, 21, 88, -125, 37, 8,145, 20,172, 81, 11, 57,175, 16,239, 13,112, 81, 30,185,152,123,115, 78,112,235, 33, 43,207,221, 59,221,192,147,226, -194,173, 91,183,218, 94,191,126, 29, 73, 73, 73, 88,183,110, 29,150, 44, 89, 82,251,228,240,218,107,175,225,194,133, 11,208,235, -245, 88,176, 96,129,195,156, 57,115,222, 47, 47, 47,183,122,145, 73, 87, 71,254,230, 67,187, 55, 56, 56, 72, 11, 48, 97,232, 21, -199,111, 14,165,135,149, 86, 26,191,110,142, 23, 96,206,156, 57,178, 85,171, 86,253,108,133,200,122,106,150, 43,177, 88,124,122, -225,194,133,242,133, 11, 23,210,143,137,211,159,207,231, 31, 52, 26,141, 31,199,199,199,255,218, 4,138,214, 61,122,244, 88,158, -148,148,116,186,188,188,124,111,221,147, 66,161,240,181,110,221,186,141,185,120,241,226,103, 0, 82, 45, 33, 20,139,197, 51, 63, -249,228, 19, 73,102,102, 38, 74, 74, 74, 32, 22,139, 31,232,220,196, 98, 49, 72,146,132, 72, 36,194,187,239,190, 43,217,177, 99, -199, 71, 0,222,108,244,158,116,117,157,180,123,247,238,182, 6,131,129,172,172,172,132, 80, 40,132, 80, 40, 68,231,206,157,121, -179,103,207,110, 53,107,214,172,169,185,185,185, 27,173,169,188,189,189,253,216, 61,123,246,120,137, 68, 34, 82,173, 86,163, 79, -159, 62,184,124,249, 50,130,130,130,120,179,103,207,110, 61, 99,198,140, 41,249,249,249,155,173,181, 50,201,100, 50,255,168,168, -168,251, 45, 91,254,101, 28,106,219,182, 45, 59,120,240,224,162,164,164, 36,159,216,216,216,194,110,221,186,221,183,130,211, 77, - 38,147,249,254,250,235,175,234, 37, 75,150, 12,216,188,121,243,208, 26, 11,238,241,229,203,151,255, 86, 88, 88,232,119,249,242, -229,194,160,160,160, 44, 43, 56, 29, 93, 93, 93,169,176,176, 48,155,186, 39, 22, 45, 90,132,197,139, 23, 99,231,206,157,133, 0, -156, 27,172,108, 77, 64,187,191,191,191,178,127,255,254,136,138,138,194,140, 25, 51,116, 70,163, 49, 25, 0, 66, 66, 66, 58,132, -135,135,139,226,226,226, 96,111,111, 47, 80,171,213,223,169, 84, 42, 46,240,221,114, 12, 5,240, 63, 0,254, 53, 34,107, 20,128, - 35, 0, 58, 2, 72, 2, 48,226,105, 22,206, 36,176,178,178,178,176, 99,199, 14, 44, 95,190, 28,222,222,222, 48, 24, 12,224,243, -249,181,226,138,207,231,131, 32, 8,176, 44, 75, 88,202,123,229,202, 21,236,222,189, 27, 11,230,207,135,141, 77,245,109,106, 48, - 24, 80, 84, 92, 12,137, 68, 82, 43,194, 26, 17, 76,135, 83, 82, 82,102,185,185,185,213,186, 41,205, 93,132, 0,160, 80, 40,192, - 48, 12, 40,138,130, 78,167,195,182,109,219, 40,150,101, 15, 55, 98,109,170, 21, 67, 31,126,248, 33,116,186,191,214, 7,239,210, -165, 75,181, 53,164, 77, 27, 4, 4, 4,212, 30,155, 44, 84,150,112,110,239,211, 25, 26,179, 79,251,132,175, 1, 0,184,187,187, -195,199,199, 7, 42,149,202, 34,206,127,139,192, 50, 45,112,251,192, 66,183, 57, 57,121, 43,119,110,249,110,141, 72, 64, 10, 66, -122,251,192, 94, 76,129,144, 57, 64,216,111, 46, 8, 59,143,234, 47, 22,165, 65,255,235, 92,140, 10, 40, 32,119,235,120,199,194, - 7,121,182, 8, 63,157, 86,111,112, 29, 73,146,207,181,110,221, 26, 81, 81, 81,104,219,182, 45, 22, 46, 92, 8, 95, 95, 95,200, -100, 50,228,230,230,162,178,178, 18,114,185, 28, 52, 77, 35, 48, 48,144,103, 99, 99, 19,220, 4,129, 21,248, 74,255,110, 61,249, - 74, 95,244, 25,212, 11,103, 54,245,147,239,252, 37,123, 94,105,165,241, 59,152, 45,184,218, 92,240,250,235,175, 35, 55, 55, 87, -182,103,207,158, 38,139,172,158, 61,123,158,161, 40,234, 37, 11,204,225,231,206,159, 63,223,191,169,226,106,199,142, 29,114, 59, - 59, 59, 52, 22,188,105,133,184, 58, 63,118,236, 88,229,158, 61,123,126,236,218,181,235, 27, 86,138,172,214,163, 70,141, 58,177, -125,251,118,223, 33, 67,134, 40,162,162,162,254, 38,176,252,253,253, 95, 63,115,230,204, 27,211,166, 77,243,223,187,119,239,171, -168, 94, 84,186, 49, 51,119,239,118,237,218,225,222,189,123,200,205,205,133, 78,167, 67,110,110, 46, 0, 32, 51, 51, 19,238,238, -238,176,183,183,135,187,187, 59, 58,116,232, 64,144, 36, 25,100, 73, 97,131,131,131,135, 2, 32,211,210,210,144,159,159, 15, 91, - 91, 91,200,229,114,184,185,185,161,127,255,254,124, 47, 47,175, 87,172, 21, 88,131, 7, 15, 30, 46,147,201,200,140,140, 12,164, -167,167, 67,167,211, 33, 57, 57, 25,182,182,182, 8, 9, 9, 17,120,121,121,133, 54, 65, 96,117,154, 50,101, 74,158,185,184, 50, - 65, 46,151, 19, 62, 62, 62, 69,118,118,118,221, 1, 88, 35,176, 58,205,152, 49, 35,119,197,138, 21, 47, 68, 68, 68,204, 49,189, - 25, 17, 17,241, 41, 0,108,220,184, 49,202,193,193,161, 59, 0,107, 4, 22, 88,150,101, 38, 78,156,152, 34, 18,137, 96,218, 76, -194,117,205,154, 53, 32, 73,210,214, 2,154,207,146,146,146,186, 40, 20, 10, 36, 37, 37,129,199,227,129, 32,136, 20,181, 90,221, - 5, 0,156,157,157, 83,181, 90,173,167, 86,171,197,136, 17, 35,136, 33, 67,134,116, 94,183,110,221,124, 0,205, 69, 96,245, 0, -176, 22,128, 30,192,124, 0,151,155, 89, 23,151, 11,224, 69, 51,145, 21, 15, 64, 92, 35,174, 94,172, 57,255, 84, 64, 16, 4, 24, -134, 1,159,207,199,154, 53,107, 96, 48, 24,176,119,239, 94, 28, 57,114, 4, 36, 73,130, 32, 8, 16, 4, 1,165, 82,137,175,190, -250,170,246,216, 18, 80, 20,133,239,191,255, 30,115,231,204,169, 21, 87, 53, 15,125,112,117,113,129,163,147, 19,210,210,210, 26, - 21, 88,121,121,121,139,162,163,163,209, 80,144,251,176, 97,127,121, 88,205,131,220, 45, 41, 39,143,199,131, 78,167,195, 75, 47, -253, 53,124,188,255,254,251,181,175,139,139,139, 77,255, 9, 16, 22, 86,158,199,227, 65,195, 2,175, 75,254,122,239,149,143, 63, -126,192, 34,215, 0,103,189, 90,228, 95,105,193, 18,245,205,216,120,247, 2, 25, 48, 50,180,215, 56, 7,165, 20, 76,121, 54,132, - 3,194,113,189, 72,134,245, 91,170,199,194, 89, 35, 2,209,233,165,101,208,125, 55, 16,253,219,232, 69,223,197, 73,103, 3, 88, - 88, 31,159,147,147,147, 19, 69, 81, 32, 73, 18,114,185, 28, 14, 14, 14,144, 74,165, 40, 40, 40,192,204,153, 51,113,250,244,105, -232,245,122, 8,133, 66,180,107,215, 14, 6,131,193,211,106,235,149, 61,127,251,186, 53,203,237, 10,211,246, 33,246,118, 9,100, -182,238,152, 63,165,187,125,248,166,152, 69,249,197, 85,159, 54,199,139,224,231,231,135, 15, 62,248, 64,246,245,215, 95, 55, 73, -100, 81, 20,181,148,207,231,247,249,248,227,143,165, 35, 70,252,253,129, 48, 49, 49, 17, 83,167, 78,213, 84, 85, 85,125,222, 20, -113, 37, 18,137, 78,111,223,190, 93,110,107,107,139,123,247,238, 61, 54,113,181, 97,195, 6,165,167,167, 39, 4, 2,129,228,251, -239,191,183, 70,100,117, 24, 54,108,216,201,237,219,183,123, 76,153, 50, 37, 51, 42, 42, 42, 29,213,211,234, 31, 64, 92, 92, 92, -241,184,113,227, 50,118,238,220,233,197, 48,204,175,251,247,239, 15, 5,112,179,145,182,108, 45,147,201, 80, 80, 80,128, 89,179, -102, 61, 16,160,106,114,103, 3, 64, 82, 82, 18,220,221,221,161,213,106,221, 44,169,179,131,131,131, 61,203,178,152, 60,121, 50, -238,223,255, 75,155,184,185,185,225,254,253,251,160, 40,202,193,218,118,180,183,183,119, 48, 26,141,232,215,175, 31,180, 90, 45, - 0, 96,212,168, 81, 16, 8, 4,200,203,203,131,193, 96,112,108,194,229,113, 26, 50,100, 72,246,195, 78,202,229,114,163,189,189, -125, 27, 43, 57, 29, 67, 67, 67,179,182,110,221, 90,215, 85,135,232,232,232,215,108,109,109, 35, 28, 28, 28,124,154, 80, 86, 70, - 44, 22, 67, 44, 22, 67, 32, 16, 64, 36, 18, 65, 44, 22, 67, 36, 18, 65, 32, 16,128,199,227, 89,228, 87, 97, 24, 6, 39, 78,156, - 0, 73,146, 15,184, 46, 22, 44, 88,240,158, 76, 38,115,137,140,140,172,125, 0,172,168,168, 64,251,246,237,219,181,107,215,238, -106, 78, 78, 78,250,205,155, 55,223,120,202,221,199,106, 0,166, 89,109,155, 1, 4, 52,195, 46, 46, 23,192, 72, 0, 49, 53,226, - 74, 15, 96,248,211, 20, 87,230,215,158,207,231,215,254,207, 37, 18, 9, 2, 3, 3,107,197, 20, 65, 16,168,170,170,170,117, 17, - 90,106,193, 42, 45, 45,133, 74,165,130,141,141, 13,218,123,123, 35, 37, 57, 25, 0,106, 95,139, 68,162, 90, 33,214, 16,138,139, -139,203,107,130,213, 63,124,204,226,146, 5, 0, 62,191,225, 48,108,149, 74, 5,134, 97, 76,194,146,125, 28,156, 78, 78, 78,168, -168,168,176,136,243,223, 34,176,254,166, 24,195,195, 65,234, 46,180,221, 49,242,149,158,227, 58,186,203,161, 43, 72,131, 72,225, - 8,194,174, 13,214,111,249, 21, 55,211,171, 67,163,214, 31,137,195,206,121, 47,131,144, 57, 64,165,185, 13, 27,137,248,141,135, - 9,172,194,194,194, 10,131,193,224, 32,149, 74,193,231,243, 33, 20, 10, 81, 80, 80,128,255,251,191,255,195,161, 67,135,208,166, - 77, 27, 80, 20, 5,145, 72,132,252,252,124, 8,133, 66,171,102, 39,242,120, 24, 18, 54,238,165,182,114, 71,111, 20,198, 45,169, -126, 83, 25,136, 41,163,120,162, 47,119,223, 24,155, 95, 92,245, 37,170,131, 42,155, 21, 20, 10, 5, 2, 2, 2,240,246,219,111, -203,246,238,221,187, 11,128,187, 53,223,143,139,139,251, 51, 48, 48,112,224,218,181,107,207,168,213,106,105,215,174, 93,161, 80, - 40,160, 80, 40,144,150,150,134, 37, 75,150,104,117, 58, 93,104, 83,172, 99,124, 62,255,251,137, 19, 39,202,149, 74, 37,210,210, -210,224,224,224,240, 72,117, 13, 12, 12,244, 23, 8, 4,231, 55,108,216,160,244,242,242,194,173, 91,183,208,173, 91, 55,184,186, -186, 74, 86,172, 88, 97,169,200,250,102,223,190,125,109, 68, 34, 17,177,127,255,254,214,251,247,239,159,217,216,239,238,222,189, -187,205,254,253,251, 55, 0, 8, 65, 3,193,223, 66,161, 48, 51, 63, 63,223,171, 85,171, 86,216,177, 99, 7, 72,146, 68,118,118, - 54,230,207,159,143, 21, 43, 86, 32, 40, 40, 8, 54, 54, 54,104,213,170, 21, 82, 82, 82, 32,145, 72, 44,138,120,206,202,202, 42, - 2,224,124,250,244,105,228,231,255,149,178,197,195,195, 3, 69, 69, 69,208,233,116,133,214,182,101, 86, 86, 86, 33, 0,151,171, - 87,175, 34, 61, 61, 29,131, 6, 13,194,177, 99,199,208,189,123,119,208, 52, 13,163,209, 88,216,132, 75, 68,243,120, 60,182,129, - 78,148, 0, 96,111, 37, 39,213, 16,103, 77,191, 99, 45, 39, 88,150,101, 31, 38,174, 68, 34, 17, 26,249,205, 90,221,236,235,235, -187,184, 93,187,118, 29,231,207,159, 47,224,243,249,232,219,183,111,135,225,195,135,103,144, 36,233, 56,119,238, 92, 89,125,198, - 96, 0, 93, 58,118,236, 40,111, 6,221,135,185,149,174,185, 78, 58,113,174,177,248,137, 0, 24,106,246, 7,240, 87, 76,214, 83, -181, 96, 9,133, 66,132,135,135, 99,218,180,105,112,113,113,193,156, 57,115,192,231,243,107, 55,147, 85,198,100,213,178,240,222, -132,139,179,115,195,127,180,154, 32,247, 70, 30,162,158, 72,154, 6,147, 24,178, 36, 22,202,204,218,100,145,104,123, 68,206,127, -141,245,202, 92, 96, 61, 96,150,171, 21, 87,131,186,141,243,117,151, 34, 62, 46, 1,157, 92,141, 96, 5,130, 6,238, 22, 35, 8, -161, 28,118, 82,190,123, 3, 23, 32, 46, 61, 61,221,195,206,206, 14, 6,131, 1, 34,145, 8,157, 58,117,194,197,139, 23,161,211, -233,160,215,235, 33, 22,139, 33, 20, 10,113,227,198, 13, 24, 12,134, 40,107,244,149,147,146,183,225,211,207,150,216, 32,107, 7, -236,108, 68, 8,126,206, 11,144,119, 4,175,242, 54,214, 46, 8,117,120,111,254,177,245,185, 5,101,111, 54,183,139,160, 80, 40, -144,145,145,129,253,251,247, 87,233,116,186,177, 77,225, 48,137,172, 67,135, 14,157,177,179,179,147, 6, 5, 5, 33, 57, 57, 25, -159,127,254,185, 86,167,211, 13,105,106,124, 23, 69, 81,227,183,109,219,118,154,162, 40,185, 73, 92, 60,170,229,106,230,204,153, - 54,237,219,183, 71,106,106, 42,108,109,109, 97, 99, 99,131,182,109,219, 66,165, 82, 73,102,206,156,105,137,200,154,254,246,219, -111,159,220,185,115,167,199,148, 41, 83, 50, 15, 28, 56,112, 28, 64,105,125, 77, 59,108,216,176,215,118,238,220,233,241,222,123, -239,221, 3, 48, 19,141,204,172, 99, 24,230, 66,106,106,170,167,175,175, 47,209,161, 67, 7,136, 68, 34,184,185, 85, 27,169,186, -116,233, 2, 95, 95, 95, 8,133, 66, 0, 64,106,106, 42, 96, 97, 94,150, 63,254,248,227,167,164,164,164, 73,221,187,119,231,185, -186,186, 62, 48, 59,105,197,138, 21,134,140,140, 12,171,215,209,250,253,247,223,143, 37, 36, 36, 76,238,219,183, 47,223,222,222, - 30, 98,177, 24,157, 58,117,130, 74,165,194,231,159,127,110,184,123,247,110, 83,214,230,186,119,245,234, 85,137,183,183, 55,253, -144,123,213,166, 9,150,135,204,216,216, 88,225,115,207, 61,119,252,212,169, 83,254,230, 39,122,246,236,121, 92,161, 80,216, 2, -104,202,212, 60,198,220, 53,104,238, 42, 20,137, 68,224,243,249,141, 90,176,212,106,245,207, 46, 46, 46,119, 92, 92, 92,254,236, -221,187,183,109, 76, 76, 12, 22, 46, 92, 40,212,233,116,173, 35, 34, 34,106, 7,226,250, 6,208,202,202, 74, 73, 51,232, 62,102, - 1, 88, 7, 64, 6, 96, 78, 51, 28, 99, 92, 80, 29,208,238,131,106,183,224,168, 26,177,101,138,201,122,170, 34,139, 97, 24, 8, - 4, 2,248,248,248,224,195, 15, 63,196,202,149, 43, 17, 22, 22,134,246,237,219,215, 94,123, 83, 12, 86,205,140, 55,139, 6,126, -161, 80, 8, 23, 87, 87, 24,141,198, 90,235, 21, 0,164, 36, 39,131,207,231,131, 97, 24,232,116,186, 70, 93,132,206,206,206,139, - 87,173, 90, 53,115,240,224,193,164,249,140, 59,150,101,107,211, 73,152,111, 70,163, 17, 63,255,252,243,204, 21, 43, 86, 52,152, -166,193, 92,232,116,233,210,229, 1,183,224,198,141, 27,205,251,108,132,132,132, 88, 53,219,143,199,227,193, 39,124,205, 3,110, -193,147, 45,254,106,182, 86,239, 78, 65,251,207, 55, 60,140,243, 95,229, 34,172,183,134,134,139, 30,203, 70,188, 28, 48,206,215, - 77,140,171,113, 55,240, 75,180,250,118, 65, 65, 9,152,220, 4, 48,249,183, 48,107, 68, 32, 58,182,113, 64,199, 54, 14,152, 53, - 34, 16, 76,222, 13,176,197,105, 96, 37,246,200,171, 36, 30,234, 94, 40, 42, 42, 90,189,116,233,210, 98,123,123,123, 72, 36, 18, -136, 68, 34,100,102,102,194,207,207,175,246,184,230,201, 19, 11, 23, 46,204,207,207,207,223, 98,105, 69,228, 82,114,202,202,249, -111,186, 8,197, 54, 64, 81, 20,148, 74, 5,118,108, 89, 3,232,178, 1, 82,132, 87, 67, 2,120, 42, 23,187,254, 0, 58, 52,183, -139,112,239,222, 61,132,135,135, 87,105, 52,154, 71, 10,116,143,139,139,251,211, 96, 48, 12,220,178,101,139,230,151, 95,126,121, -100,113,101,226, 52, 26,141,131,118,237,218, 85,121,239,222, 61, 40, 20,138, 38,215, 83, 40, 20,206,165, 40, 74,185,110,221, 58, -230,165,151, 94,162,167, 79,159, 78,143, 31, 63,158, 30, 54,108, 24, 29, 18, 18, 66, 79,157, 58,149,214,233,116, 98,153, 76,182, -170, 17,170,164,163, 71,143, 6, 79,154, 52,233,214,183,223,126,235,254,194, 11, 47,180, 1,176,168,238, 22, 24, 24,104,191,115, -231, 78,143,105,211,166,165,238,223,191,255,101, 52,226, 30, 4, 0,157, 78,183,113,243,230,205, 90,146, 36,161, 80, 40, 32, 18, -137,208,162, 69,139, 90, 33,108, 26,200, 13, 6, 3, 54,109,218,164,209,104, 52,235, 45,169,123, 97, 97,225,142,217,179,103,223, - 61,115,230,140,209, 52,203, 39, 59, 59, 27,159,127,254,185, 97,203,150, 45, 89, 37, 37, 37,223, 90,219,158,101,101,101,223,127, -250,233,167,233, 39, 78,156, 48,146, 36,137,226,226, 98,216,217,217,225,243,207, 63, 55,124,251,237,183, 89,229,229,229, 86,115, -246,234,213, 43, 53, 43, 43,203, 70,167,211,253,205,250, 35, 16, 8, 8,137, 68, 98,154, 17,102, 49,186,119,239,158,154,158,158, -174, 92,182,108, 89,100, 72, 72,200, 74, 27, 27,155,100, 27, 27,155,228,144,144,144, 85,155, 54,109, 58, 87,195, 25, 97,117,231, - 69,146,181, 2,203,228, 42, 52, 89,177,106, 44, 89, 22,185, 8,125,125,125,247,237,222,189,219, 54, 57, 57, 25,101,101,101,136, -143,143, 71, 92, 92, 92,173, 43,215, 52,152,153,111, 0, 80, 85, 85, 37,109, 6,221,199,255, 80,157,250,194,171, 70,200, 52, 55, - 28, 49, 19, 87, 47,162,122,230,217,139, 53,199,254, 0,126,122,154, 22, 44,150,101,107, 31,118,222,124,243, 77, 68, 68, 68,160, -125,251,246,181,162,202,124, 22,161, 53, 34,131,166,105,116,234,212, 9, 58,189,254, 1,129,206,231,243,209,162, 69, 11,164,166, -166,130,162,168, 70, 45, 88, 4, 65,140, 28, 60,120, 48,153,152,152, 8, 95, 95, 95,196,197,197, 33, 46, 46, 14,241,241,241,184, -122,245, 42,174, 95,191,142, 27, 55,110,224,230,205,155,232,214,173, 27, 50, 50, 50,240,242,203, 47,155,210, 52, 52,104,100,179, -198,218,100,161,245,238, 73,112,254, 43, 44, 88,132,249,222,197, 94, 62,190,163,138,143,171, 87,111,226,120,108,209, 78,130, 32, -143,198,221,213,253,242,114,187,114, 24, 14,189,133, 78, 35,247, 96,231,188,151,171,159, 0,242,110,192,112,248, 29, 16, 50, 39, -164,148,201,161,209,151, 52,244,212, 28, 29, 19, 19,115,112,247,238,221, 19,199,141, 27, 39, 98, 24, 6, 82,169, 20, 31,125,244, - 81,109,142, 16, 30,143,135,176,176,176,138,188,188,188,117,176,112,230, 23, 0,169,173, 92,176, 96,204,228,133, 18,220,223, 10, -144, 66, 20,160, 43,186,188, 79, 84, 69,169, 0, 0, 6,157, 73, 68, 65, 84, 48, 17,121,233, 23,129,202,155, 0, 33,196,150, 47, - 38, 57,189, 54,254,203,111,115,242, 75,158,111, 46, 23,224,214,173, 91, 88,180,104,209, 35,139,171,186,150,172,227,199,143,239, -210,233,116,147, 31, 35,231,160,149, 43, 87,158,118,118,118,110,178, 91,196,205,205,237,221,130,130,130,137,150, 24,206, 44,209, -165,135, 14, 29, 26,146,158,158,190, 60, 41, 41,169,222,153,171, 55,110,220, 56, 54,112,224, 64,153, 53,179, 8,227,227,227,227, -130,130,130, 54,175, 91,183, 46,236,131, 15, 62,144, 72,165, 82, 40,149, 74, 36, 37, 37,161,117,235,214, 0, 0,141, 70,131,121, -243,230,105,140, 70,227,206,152,152,152,139,150, 62, 44, 39, 36, 36,140,153, 58,117,234,164, 14, 29, 58,188,198, 48,140,163, 94, -175, 47,204,200,200, 56, 81, 35,132,154,226,222, 97, 18, 19, 19,223,158, 54,109,218, 56,111,111,239,225, 6,131,193,145,162,168, -194,251,247,239, 31, 47, 43, 43,219,209, 20,206,139, 23, 47,230,143, 31, 63, 62, 45, 39, 39,199, 79,165, 82,149,218,218,218,234, -245,122, 61, 79,161, 80,216,136, 68,162,110, 0, 46, 18, 4,113,211, 26,206,152,152,152,220, 9, 19, 38,164,235,116,186, 14,219, -182,109,139,146,203,229,191, 17, 4, 65, 8,133, 66,123,185, 92, 30, 12, 32,146, 32,136, 20,107,203, 74,146, 36, 99, 46,168,204, -173, 88, 66,161, 16, 4, 65, 88, 36,176, 82, 83, 83,255, 92,186,116,105,231,118,237,218, 97,203,150, 45, 69, 10,133,194,102,248, -240,225,252,210,210, 82,162, 33, 11,150, 70,163,145,128, 67,163,207, 22, 53, 86,222,161,102,150, 79, 83,224,251, 17, 0, 37, 79, -179,112, 44,203, 62, 32,164, 90,183,110,253,128,168, 50, 63,103,141,192,162, 40, 10, 66,161, 16,124, 62, 31,174, 42, 85,173,152, - 99, 89, 22,201, 41, 41, 40, 46, 46,174, 77,211,208,200, 61,206, 35, 8, 2,163, 71,143,182,232,119,223,124,243, 77, 68, 70, 70, -162, 49,119,162,249,140,191, 54,109,218, 52, 42,134,106,202, 98,241, 44, 66,119,119,247,166,114, 18,117,246,255, 10,129,245, 0, -178,139,170,150,109,255, 49,126, 94,118, 25,117, 84,220, 59,227,195,240,112,176,243, 6,180, 57,227, 46, 23, 13,236, 72,102, 65, -247,109, 95, 16,202,234,193,134,173,200, 6, 33,119, 69,177,160, 53,126,142,203,201, 33, 5,188, 6,173, 15, 37, 37, 37,179,190, -250,234, 43,222,233,211,167, 71, 46, 95,190,220,206,199,199, 7, 99,198,140,129, 94,175,199,245,235,215, 49,117,234,212,162,252, -252,252,173, 37, 37, 37, 43, 45,173,132,147,146,255,127,235, 63, 27,232, 72, 50, 21, 64, 89, 44,192,183,133,147,131, 13,174,197, - 68, 1,165, 49, 0, 41, 4, 72, 17,186,119,245, 69, 23,127, 47,223,156,223,175,244, 5,112,190, 57, 92,128,247,222,123,239,177, -137, 43,115, 65, 4,160,221,227, 44,167, 73,100,125,252,241,199,167, 25,134,145, 53,233, 81,246,200, 17, 26, 13,231, 35,179,218, -248,119,229,202,149,183, 31,118,210, 96, 48, 28,191,120,241,162,213, 73,102,141, 70,227,188,196,196, 68,188,255,254,251,211,222, -121,231, 29,169,143,143, 15, 60, 60, 60,144,156,156,140,164,164, 36,108,222,188, 89,203, 48,204,142,146,146,146, 79,172,164,166, -203,202,202,182, 70, 71, 71,111,125,140,109,192,148,150,150,126, 23, 29, 29,253,221,227, 34,156, 60,121,114, 66,114,114,114,145, -155,155, 91, 16,143,199,235,140,234, 68,145,106, 0,223, 53, 69, 8, 1,192,180,105,211,174,166,166,166, 22,184,186,186, 6, 9, -133, 66,175, 26,206, 44, 0, 59,154,200, 89,120,237,218, 53,175,158, 61,123, 50, 60, 30,143, 21, 8, 4,108,205, 96,200,242,249, -124,150, 32, 8,246,215, 95,127,149,192,130,152,203,204,204,204,153, 59,119,238,100, 21, 10, 69, 80, 69, 69,197, 24, 0,187, 52, - 26, 77,207,146,146,146,218, 65,184, 62,104,181, 90, 49,167,159, 26,197,235, 15,121, 63, 23, 64,223,230, 80,192,165, 75,151, 98, -235,214,173,104, 44, 3,249,241,227,199, 27, 29,248, 77,247,138, 41,190, 74,175,215, 35, 49, 49, 17, 4, 65,212, 30,155, 39, 25, -165,105,186,193, 76,239, 12,195,208,122,189, 30, 7, 15, 30,180, 72,100,237,223,191, 31, 90,173, 22, 12,195, 88,212,207,214, 36, - 38, 69,113,113,113,109,234,132,192,192, 64,243, 62,212,234,246,228,241,120,240,241,241, 65, 65, 65, 1,156,156,156, 0, 84,187, - 5,107,197,103,101,229,127,230,230,183, 88, 37,134,247,243,176,213,242,201, 31, 3,220,152, 23,187,123,136,225,100, 39, 1, 79, - 32, 70,153,150, 64, 98,182, 22,231,111,150,221,167, 41, 54,116,249,239,233,150, 38,136,123, 78,165, 82,125, 70,211,180, 63, 73, -146, 50,150,101, 43,120, 60, 94,124,118,118,246, 98, 0, 55,172,169,132,173,130, 76,177,151,243,108, 5, 34, 17, 75, 83, 12, 0, - 18, 32, 73,128, 32, 1,240,106,246,213,199, 26,141, 65, 72, 51,196,209,188,130,194, 73, 79,187,241,159,127,254,249, 51,149,149, -149,207, 92, 38,119,169, 84,186,136,199,227, 13,250,183, 47, 19,211,189,123,247,238, 82,169,244, 51,134, 97,122,104,181, 90, 87, -169, 84,154, 75, 16, 68, 76,121,121,249, 23, 87,175, 94,189,196,141,157, 79, 15,143, 51,147,123, 93,152,114, 99, 57, 57, 57,121, - 95,187,118, 77, 98,110,193, 50, 31, 12,107,222, 39,184,171,241,108,194,215,215,247,242,190,125,251,186,183,110,221,154, 52, 5, - 92,147, 36, 89,187,153,220, 88, 38,107,203,165, 75,151,168,233,211,167, 95,188,118,237,218, 11, 15,227,244,242,242, 58, 19, 17, - 17,241,146,185,133,202, 36,164,234,190,166,105, 26, 85, 85, 85, 88,180,104,209,217,212,212,212,122,151,202,241,241,241, 89,183, - 96,193,130,153,175,188,242, 10, 73,146,228,223, 98,174,234,198, 97, 25, 12, 6, 28, 61,122,148,249,254,251,239, 55,220,190,125, -251,161, 49, 88, 1, 1, 1,247,227,227,227,221, 77, 41, 19,234,110,117,103,212, 2,192,115,207, 61,167,142,142,142,110,249, 79, -114,254,103, 4,150,233,243,115,250,123,140, 34, 64,142, 36, 9,166, 19, 8, 66,196,176, 72, 34,128, 51, 34,137,126, 83,248, 47, -106, 77,157,207,119,194,227,207,200,203,113,114,156, 79,131,147,132,101, 75,207,112,237,249, 47,225,244,242,242, 74, 73, 73, 73, -241,122,104,103,248,160,192,226,218,243, 25,227,116,114,114,146,183,104,209,226, 55,146, 36, 61, 30,182,184,179,185,184,102, 24, - 38, 61, 55, 55,119, 64, 94, 94, 94,213,195, 56,221,220,220, 60, 37, 18,201, 55, 12,195,244,180,100,177,103,146, 36,163,181, 90, -237,244, 58,139, 61,215,114, 62,198, 89,132, 15,148,211,207,207, 47, 53, 58, 58,218, 83, 42,149, 62, 16, 87, 88,183,206, 38,220, -189,123, 23,195,135, 15,207,184,118,237, 90,155, 39,204,249,175,130,181,107, 17,178, 43,127,207, 56, 8,224, 32,247,252,195,225, - 63, 6,134,107,130,255, 22, 52, 26, 77,113,139, 22, 45, 42,180, 90,173, 64,167,211, 9, 40,138,122, 96,128,147, 74,165,249, 26, -141,134,107,168,103, 20, 5, 5, 5,149, 5, 5, 5, 65,143,147,179, 70, 40, 13,124, 92,124, 79, 42, 15, 86,113,113,113,104,143, - 30, 61,126,229,243,249,226,186,226,167, 62, 49, 68,211,180,182,176,176,112,208, 63,205,249, 95, 19, 88, 28, 56,112,224,240,159, - 64,118,118,118, 80, 35, 2,140,107, 36, 14,207, 36,212,106,117,146, 90,173,246,104,238,156,207, 58, 72,174, 9, 56,112,224,192, -129, 3, 7, 14, 28, 56,129,197,129, 3, 7, 14, 28, 56,112,224,192, 9, 44, 14, 28, 56,112,224,192,129, 3, 7, 78, 96,113,224, -192,129, 3, 7, 14, 28, 56,112,104, 50,254, 31, 88,120,209,239, 80, 73, 49,190, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, + 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6,158, 0, 0, 0, + 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 10, 79,105, 67, 67, 80, 80,104,111,116,111,115, +104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75, +136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, + 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225,123,163,107,214, +188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199, +196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1, +120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64, +122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0, +128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, + 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, + 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, + 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, + 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, + 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37,238, 4,104, 94, + 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229,228,228,216, 74, +196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93,129, 71, 4,248, +224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, + 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, + 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128,104,131,225,207, +119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42, +176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, + 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, + 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, + 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59, +200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100,116, 49,154,143, + 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196,108, 48, 46,198, +195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, 18,129, 69,192, + 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34, +147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, + 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201,218,100,107,178, + 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83,226, 40, 82,202, +106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81, +135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17,221,149, 30, 78, +151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175, +152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, + 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212, +150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, + 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205,217,124,118, 42, +187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156,116, 78, 9,231, + 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72,171, 81,171, 71, +235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, 83,217, 83,221, +167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, 76,111,167,222, +121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, + 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15,140,105,198, 92, +227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, 76,199,205,204, +205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184,101, 73,178,228, + 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17,167,185, 78,147, + 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23,103,183,197,174, +195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58,222,154,206,156, +238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, 23,103,185,115, +131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245,157,155,179,155, +194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229,209, 63, 11,159, +149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97,239, 23, 62,246, + 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67,127, 35,255,100, +255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101,246,178,217,237, + 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, 14,133, 80,126, +232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119,209,220, 67,115, +223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63,198, 46,102, 89, +204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, 23,152, 47,200, + 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19, +119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236,145,188, 53,121, + 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, 49,131,146,145, +144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7,201,107,179,144, +172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, 43,205,237,204, +179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57,178, 60,113,121, +219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77,107,129, 94,193, +202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, 27, 62, 21,137, +138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207,102,210,102,233, +230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151,205, 40,219,187, +131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, 97,215,248,110, +209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73,251,179,247, 63, +174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29,210, 61, 84, 82, +143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233,247, 9,223,247, + 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, 98, 91,186, 79, +204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103,242,207,140,157, +149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139,231, 59,188, 59, +206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187,156,187,154,174, +185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61,221,189,243,122, +111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65,217, 67,221,135, +213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, 5,143,153,143, +203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203,174, 23, 22, 47, +126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, 30,190,201,120, + 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83,208,167,251,147, + 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,122, 37, 0, 0,128,131, 0, 0,249, +255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95,197, 70, 0, 2,170,111, 73, 68, 65, + 84,120,218,236,157,119,120, 20,197, 31,198,223, 45,215,239,210, 73, 15,132, 94, 67, 75,232,189, 55, 17, 4, 81, 1,193,142, 96, +193, 31,162, 2, 22, 4, 84,192, 10, 34, 2,138, 5, 5, 1, 69,165, 9, 82,165, 55, 9, 82, 67,232,129,116,146,144,126,125,119, +231,247, 71,114,231,229,114,185,187, 64, 66,115, 62,207,115,207,149,221,125,111,102,119,118,246,221,239,148,101, 8, 33,160, 80, + 40, 20, 10,133, 66,161, 84, 29, 44,221, 5, 20, 10,133, 66,161, 80, 40,247, 22,205,169, 38,213,164,154, 84,147,106, 82, 77,170, + 73, 53,255, 75, 16, 66,110, 42,130, 85, 29,109,138,164,244,213,253, 30,208,172,174,188, 87,165,118,247, 82,189, 25,247, 72, 58, +187,223,197,154,164, 26,116, 73, 53,148, 41, 82, 13,229,190,186, 53, 81, 77,121, 39,213,112,220,103,220, 35,233,236,126, 23,106, + 58,151,159,170,208,117, 85, 38, 73, 21,167,147, 84, 67, 58,171, 75, 19,213,148,119, 82, 77,199,190, 42,175, 77,119, 45,252, 93, + 96, 48, 0,128,113,208,103,238, 98, 77, 84,147,102, 85,167,111, 87, 53,104, 50,213, 80, 6,102,148,234,238,174, 66, 67,100,203, +123, 85, 28, 35, 82, 13,186,213,105,174,170,178,220, 87,183, 38,170, 73,147,169,226,253,185,171, 26, 52,171,234, 92, 34,213,112, + 46, 85, 71,153,119, 46, 63, 85,161,235,172, 89, 21,231,146,179,102, 85,148,251,219,161,137,106,210,100,170, 97,159, 86,199,181, +233,174,133,189,201,157, 85, 29, 16, 0, 61,238,114, 35, 84, 93, 38,179,170,163, 56,213,169, 89,149,199,104, 70, 53,220,205,244, +168,194, 99,196,184, 72,111, 85,106, 50,213,148,206,170, 56, 78, 76, 53,156, 75, 76, 53,156, 75, 76, 53,148,251,219,165, 89,149, +199,168,170,206, 37,166,154,206, 37,231,252,206,168, 98, 77,166,154,210, 89, 21,199,201,149, 38, 83, 13,154,213,145,247,238,119, +177,238, 93, 15,127,151,164,163, 58,140, 16,170, 48,146, 81,157, 81,156,234,138,180, 49,213,180, 95,119, 87,161,214,174,106, 72, +231,238, 42,188,163,117,101, 8,223,189,203,207,105,122, 46,209,115,233,110, 59,151, 72, 5, 55, 43,239,222,101,229,188, 42, 35, + 66,238, 52,110,245, 56,145, 10,110,212, 72, 21,166,179, 42,163,214,204,109, 58,159,238, 58,238,166, 81,132, 85,221,191,135,160, +122,162, 98,213,149,239,170, 76,103,143,123, 36,239,213,145,206, 25,213,148,247,123,101,159,210,115,137,158, 75,119,227,185,228, + 88, 38,171, 42,173, 85, 93,206, 93,105, 86,101, 63,164,170, 44,163,213,157,119,114,151, 31,251,123,130,155,137, 96, 85,215,221, +241,189,160, 89, 29,218,213,145,206,221,247,200, 62,173,142,116,206, 64,213, 54, 57, 50,213,144,214,234,108, 38,172,142,178, 89, +157,229,157,185,203,211,121,175, 28,247,234, 72,103, 85,157, 75, 76, 53,156,247, 76, 53,212, 79,213, 89, 54,171, 83,179, 42,180, +171, 35,157,213,117,236, 41, 20, 10,133, 66,161, 80, 40,255, 69, 8, 33, 21, 71,176, 90,183,110,189, 81,165, 82,213,175,104,185, + 94,175, 79, 63,113,226, 68, 79,186, 27, 41, 20,138, 23,176,248,183, 75,130,132,234,105,226,160, 80, 40,148,187,134, 10, 13,150, + 92, 46,175,187,103,207,158,134,146, 36, 65, 16, 4,136,162, 8, 81, 20, 33, 8, 2,204,102, 51, 30,126,248,225, 74, 55, 47,182, +108,217,114, 15,203,178,181, 43,179,141, 40,138,215, 78,158, 60,217,165,162,229, 33, 33, 33, 7, 0,212,101,152,127,163,142, 12, +195,192,246,221,241,119,150,181,119, 57, 75, 75, 73, 73,137,117,167,201, 48, 76, 93, 71, 61,103, 45, 23,186,110, 53, 27, 53,106, +116,148,231,249, 40, 87,219, 87,164, 45, 73,210,229,211,167, 79,119,162,197,244,246,208,178,101,203, 61, 28,199, 85,186,124,158, + 56,113,162,194,242, 25, 19, 19,243, 15,203,178, 17,174,142,113, 5,229,137, 19, 69,241, 92,169,166, 75, 3, 18, 22, 22,118,128, + 16, 82,215,203,114,105, 35, 37, 37, 37,165,141,167,243,200, 93, 58, 93,104,187,213,116, 52, 87,145,145,145,115,131,131,131, 39, +232,245,122, 35, 0,194,178, 44,177,105,219,116, 69, 81,204, 74, 76, 76,164,147, 23, 82, 40,148,251,219, 96, 73,146,196,154, 76, + 38,156, 63,127, 30,174,158, 87,200,178,172, 88,217, 63, 35,132, 52,220,177,114,121,136, 58, 56, 20,162,197, 12,101,141, 16,187, +118, 94,194, 41,136, 22, 11, 36,171, 5, 53,218,116,176,165, 1, 61,122,244,224, 60,200, 70, 77,154, 52, 41,196,199,199, 7, 70, +163, 17, 70,163, 17, 38,147, 9, 38,147, 9,102,179, 25,102,179, 25, 22,139, 5, 22,139, 5, 86,171, 21, 38,147, 9,167, 78,157, +114,155,118,134, 97,162, 38, 78,156,104,215, 52,153, 76, 48, 26,141,118, 45,147,201,100,215, 52,155,205, 48,153, 76, 56,115,230, +140, 91, 77,158,231,163,142, 29, 59, 22, 34,151,203, 65, 8,129, 36, 73, 32,132,148,121, 57,237, 43,116,238,220,217, 66,139,232, +109,165,225,218, 15, 63, 8, 81, 6,213,128,100,181, 34,168, 85,156,253, 88,164,238,248, 19,146,213, 10,201,106, 69,244,131,195, +237,191,119,239,222,221, 83,249,140,254,117,250, 52,127,185,143, 15, 4,163, 17,117, 6, 15,179, 47, 56,189,120, 30,136,213, 10, + 34, 88,208,226,213,183, 1, 0,217,217,217,134, 38, 77,154,164,193,253,232,173,168, 43, 87,174,132,216,210,224,108,212, 89,150, + 45,243,218,183,111, 31,198,140, 25,227, 41,239, 81,111,189,245, 86,136,237, 28,113, 44,235, 86,171,213,126,254, 8,130, 0,171, +213, 10,179,217,140,127,254,249,199,171,200, 85,120,120,248,135, 93,187,118,125,122,197,138, 21,218,223,127,255, 93, 91,167, 78, + 29,200,229,114,112, 28, 7,142,227,192,178, 44, 56,142,195,208,161, 67,105,223, 12, 10,133,114,255, 27, 44,139,197,114,165, 95, +191,126, 4, 0,204,102,115,164, 66,161,144, 59, 25,176,136, 78,157, 58,157,115,222,206, 83,211,161, 58, 56, 20,223,213, 9, 4, + 0, 60,114, 41,199,126, 81, 88,211,173,181,125,157, 81, 87,243, 75,214, 85,171,193,178, 44,227,193, 12, 65,167,211,161, 95,191, +126, 80, 40, 20,136,139,139,131, 92, 46,135, 76, 38,171,240,229, 13, 90,173, 22, 51,103,206,180,153, 35,104, 85, 74,188,208,181, + 3, 84, 12,193,119, 39, 18, 97, 18, 37,240, 60, 15,158,231, 33,147,201,202, 69,164, 92, 33,151,203,113,234,212, 41,112, 28, 7, +158,231,203,188,115, 28,135, 13, 27, 54, 96,196,136, 17,224, 56, 14, 26,141, 6,160,157, 1,111, 59,202,160, 26,248,181,123, 73, + 32,242,241,228, 66,251,239,127,142,124,208,254,121,108,106, 49, 24,134,129, 92, 46,247,238,184,251,248, 96,211,136,129, 0,128, +225,231,175,219,203,204,201,121, 31, 64,166, 80,128,151,201,209,124,210, 91,200,206,206, 54, 12, 31, 62,124,159, 74,165,218,226, +197,205, 10,174, 93,187,102,215,146,201,100,229,202, 61,203,178,248,254,251,239,113,245,234, 85,175,242,110, 48, 24, 48,123,246, +108,123,222, 92,233, 58,126,246, 34,239,108, 88, 88,216,251, 93,187,118, 29,179, 98,197,138, 0,134, 97,176,104,209, 34,240, 60, +143, 7, 30,120, 0, 65, 65, 65,216,186,117, 43,228,114, 57, 94,127,253,117, 90,248, 40, 20,202,127,195, 96,157, 56,113, 98,160, +237,115,251,246,237,207,238,219,183,175,177, 67, 40, 31,130, 32,200, 5, 65,104,104,107, 54, 20, 4, 1, 38,147, 9,163, 70,141, +114,123, 71, 47, 90,204,229, 12, 82, 69,198,201, 91,204,102, 51, 30,121,228, 17,187,137,113,103,174,188,185, 48, 48, 12, 3,147, +201, 4,158,231, 81,175, 86, 48,222,126,164, 13, 58,115, 4,134, 28, 0,217,197,120, 50,156,199,241,168,134,248,226, 90, 14,174, + 22, 20,129,231,189,107, 45,149, 36,169,140,161,114,254,188,100,201, 18,140, 28, 57, 18, 28,199,149,107, 66,162,220, 30, 36,171, +213, 99, 57,172,236,177, 17,140, 70, 0, 0,231, 96,200,101, 50, 25, 20, 42, 21, 56,153, 12,188, 66,142,236,236,108, 67,223,190, +125, 15,169,213,234, 31,194,194,194, 82, 83, 82, 82,220,150, 79, 66, 8,100, 50, 25,120,158,175,176,204,127,255,253,247, 88,190, +124, 57,218,181,107,231, 85,153, 55,155,205,144,203,229,248,224,131, 15,202, 45, 95,188,120,113, 57,131,229, 1, 6, 0, 27, 26, + 26,250,194,202,149, 43,125,109,255, 31, 20, 20, 4,153, 76,134,152,152, 24,248,248,248, 96,223,190,125, 16, 69,209,107,179, 74, +161, 80,254,155, 16, 66,100, 0, 90, 1, 8, 6, 32, 2, 40, 4,224,239,176, 74, 86,233,123,176,237, 59,195, 48,127,187,208,105, + 91,186, 78, 22,195, 48,127, 59,124, 55, 3, 80,184,248, 61, 7,128,186,244,101, 2,112, 0, 64,140,195,255,216,182,131,243,255, +218,156, 65,119,148, 76, 84,215, 3, 46, 38,191,179, 53, 23, 38, 38, 38,186,108, 46,116, 74,188,219, 90, 82, 89, 35,196, 30,185, +250,165, 94,144,253,247,145, 73,121,246, 10,118, 83,187, 6, 80,234,180,104, 51,227, 99,143, 59,221,118, 97,184,126,253,122,185, + 59,239,155, 53, 88, 0, 96,181, 90,161, 86, 43,241,215, 87,221,144,126, 89,192, 7, 27,147,177,238,200, 21,240, 60,143,193,141, + 27,224, 97, 1,152, 27,168,194,243,130, 8,139, 68,188,186,128, 17, 66,202,153, 43, 71,147,197, 48,140,253, 55,122,177,185, 51, + 4,181,138,179, 71,174, 86,212,244, 41, 23,181, 2,128,117,173,107, 67,229,163, 67,204, 43, 83,189, 42,159,117, 6, 15,179, 71, +174,254,136,171, 11, 94, 46,135, 76,169,192,195, 39,146, 1,148, 52, 11,246,106,209,116,119, 30,167, 88,246,196, 19, 79, 92,222, +177, 99,135,198,155,180,202,229,242, 50,134,205,149,185,226,121, 30, 86, 39,211,232,238,166,162, 34,227,100, 59,175, 42, 25,193, +130, 94,175, 55,175, 91,183, 14, 95,124,241, 5,130,130,130,208,175, 95, 63,132,133,133, 97,205,154, 53, 32,132,224,165,151, 94, +130, 90,173,134, 90,173,166,101,158, 66,161,184,243, 34,221,166, 77,155,214,102,238,220,185,179, 59,118,236,184,234,192,129, 3, + 43, 25,134,217,232,224, 61, 6,151,214,101, 27,109,223, 9, 33,109, 29, 77, 86,169, 73, 11,102, 24,102,163,109,125,199,239,182, +119, 66, 72, 31, 0, 10,219,247,105,211,166,197,204,157, 59,119,246,212,169, 83,223,156, 51,103,142,124,218,180,105, 45,230,206, +157, 59,219,246, 63,174,210,225,104,176,220,206, 2,108,177, 88,174,244,233,211,199,171, 17, 63, 6,131, 33,195,131, 1,115, 25, + 25,112,140, 10, 40,125,116, 80,251,248,128, 97,189,171,112,173, 86, 43,120,158, 7,203,178,216,182,109, 27,212,106, 53, 6, 13, + 26,116,211, 77,132, 54,211,166, 80,200,193,251,179,120,226,179,163,200,202,213,219,155, 4,183, 39, 37,227,136, 90,141,183,155, +182,128,174, 40, 9, 5, 38,243, 45, 69,176, 70,142, 28, 9,163,209, 8,150,101,237,191,177, 44,235,209,172, 82,170,143,138, 6, + 33, 48, 12, 3,149,175, 15, 84, 58, 29, 56,158,243, 74,139, 16,242,175, 17, 82, 40, 32, 83, 42,192,203,229,118,115,213,183,111, +223, 67,121,156, 98, 89,106,106,234, 33, 0, 42,111, 13,150, 45,130,229,206, 92,241, 60, 15,139,197,226,149,121, 49,153, 76,144, +203,255,237, 9,112,237,218, 53,183, 6,203, 83,182, 1, 72, 12,195, 72,117,235,214,181,111, 19, 26, 26, 10,127,127,127, 72,146, + 4, 73,146,160, 82,169,160, 86,171,203,252, 47,133, 66,249,207,226,206,139, 40,231,206,157, 59,219,209,192, 56, 27, 26, 71,227, +228,100,162, 28, 77, 90,140,135,186,127,163,179,105,178,253, 47,195, 48, 27,231,204,153, 51,216, 67, 58,178,156, 13,150,173, 66, +116,137, 99,115, 97, 85, 93,188,220, 93,192,212,126,190, 80,104,181, 40,237,126, 69, 60,105, 89, 44, 22,123,159,147, 9, 19, 38, + 84,120, 87,239,216, 55,197, 19,102,179, 25, 28,203, 1,202, 58,144,112,216,126,177,178,191,228,114, 36,213,106, 9, 38, 35, 21, + 60,239, 93,127,127, 91, 4,203,102,162, 94,122,233, 37, 44, 93,186,212,222, 49, 25, 0, 56,142, 67,163, 70,141,112,233,210, 37, +122,170,221, 1, 8, 33, 30,155,173, 85,190, 62, 80,234,116,224,188,136, 52,218,150,219,251, 48,169,148,224,228,114,240,242,146, +102,193, 33, 67,134,236,206,203,203, 91,214,172, 89,179, 11, 40,153,198,128,241,246,252,113, 85,206,151, 45, 91, 86,198, 92, 85, + 38,130,101, 59,143, 28,113,213, 92, 56,124,248,112,111, 35, 88,132, 97, 24, 34,147,201,208,167, 79, 31,180,104,209, 2,235,214, +173,131, 36, 73,120,241,197, 23,161, 86,171, 49,127,254,124, 8,130,128,185,115,231,210, 8, 22,133, 66,113,119,205, 55, 76,157, + 58,245, 77,134, 97, 54,150, 70,146, 78,187, 49, 82,174,234,246,182, 78, 38, 45,171,130,245, 6,187, 50, 89,142,159,109, 76,155, + 54, 45,198, 57, 29,142, 17, 51, 71,131, 85, 93,207,111, 43, 67, 94,194, 41,123,135,118, 91,179, 32,195, 48,248,179, 83, 99, 40, +116, 90,168,116, 58,116, 89,187,215,126,215,140,247, 63,245, 42,130,101, 51, 78, 57, 57, 57, 30,155, 8,189,141,138,113,114, 25, + 14,233,100, 32, 50,174,204, 5, 75, 38,147,129,229,101, 72, 10,110, 8,134,223, 10, 94, 20,188,186, 56,216, 34, 25,142,163,167, +158,120,226, 9,176, 44,107, 55, 89,173, 91,183,134,211, 49,161,220, 70,210,118,110,193,230,199, 74,206, 85,199,102,193,141,237, +234, 67,233,163,131, 82,171, 69,247, 13, 7,236,205,185,152,255,181, 71,205,196,111,191,196,233,207,231,128,151,201, 48,236, 88, +146, 61,114,213,185,113,131, 67,102,173,239,178,107,215,174, 29, 2,192, 62,246,216, 99,254,177,177,177, 94,133,197, 24,134, 41, +211,241,156,231,121,151,230,138,231,121, 8,130,224, 85,222, 45, 22,139, 87,145, 36, 91, 20,203,155,138,210,182,159,252,252,252, +224,227,227, 99, 31, 65,107,139, 92,217,250,111,122,123, 94, 82, 40,148,251,158,138,188,136,105,206,156, 57,167,231,204,153, 99, +143, 36, 57, 71,176, 42,184,238, 62, 80,106,166,130,109,230, 12,128,201, 85,255, 44, 87, 81, 49,103,227,229,248,219,220,185,115, +103, 59,167,195,177, 89,210,101,239,236,150, 45, 91,110,214,104, 52,117,188,221, 27,149,153,116, 84,180, 88,202,221,137, 51, 12, + 3,149, 78, 7,133,143, 14, 74,157,174,194, 40, 87, 69, 23, 26, 91, 19, 33,199,113,246,139,206, 15, 63,252, 0,157, 78,135,167, +158,122,234,166, 58,185,151, 24, 44, 14,235,229,231, 1, 57, 95,238,162,197,201,100,184,230, 87, 19,172, 76, 6, 94,244, 46, 66, +144,159,159, 15,142,227,240,238,187,239, 98,238,220,185,246, 97,244,142, 67,235, 29,163, 30,148,219,143, 99, 39,247, 50, 81, 85, + 31, 31,123,249,116,252,221, 83,159, 68,134, 97, 0, 81, 40, 25, 45,168, 84,216,205,213,144, 33, 67,118,155,181,190,203, 26, 55, +110,108,139, 92,177, 26,141,198,227,168, 89,199,115,195,102,116,156,205,149, 45, 74,106,251,108,181, 90,189, 42,243, 54,131,181, +116,233, 82,183, 55, 35,182,255,245,182,156,178, 44,139, 61,123,246,224,216,177, 99,152, 48, 97, 2,212,106, 53, 22, 44, 88, 0, + 65, 16, 48,107,214, 44,168,213,106, 40, 20, 10, 90,248, 40, 20,138, 59, 2,108, 6,167,212, 36,149,137, 44,149,246,157, 26,236, +248,221, 85,132,171, 52,226,180,199, 67,125,248, 71,169, 49,115,137, 45,146,230,180,205, 70,103,115,198, 59, 69, 74, 24, 0, 80, + 40, 20,117,246,239,223,223, 80,146, 36,136,162, 8,119,239,102,179, 25,143, 62,250,168,215,147,142, 74,214, 18,131,197, 58,141, +148, 83,250,250, 64,161,251,247, 2,230,112, 17,243, 88,139,219, 34, 88,142, 6,235,221,119,223, 5,207,243, 88,186,116, 41, 0, +224,181,215, 94,171,116, 4,139, 72,192, 1,113, 23, 34, 22,181, 4, 89,166, 66,230,158,179,144,201,100, 8,107,215, 23, 82,155, +135,145,163,240,133,182,180, 95,149, 55,205,142, 57, 57, 57,184,122,245, 42, 24,134,193,171,175,190,234,214, 92,109,219,182,141, +246,193,186,131, 6,139,229,184, 50,199,195,177,124, 58,153, 47,207,237,100,130, 0,153, 82, 89,102,180, 96, 94, 94,222,178,107, +215,174, 29, 6,192,140, 25, 51,198, 95,163,209,224,219,111,191,213, 3,144,175, 93,187, 86,237, 73,211,177, 31,159,115,228,202, +217, 96,137,162,231, 38,108,219, 77,133, 55,209,222,202, 24, 44, 91,249,102, 24, 6,162, 40,218, 35, 87, 86,171,213,254, 93,169, + 84,210,130, 71,161, 80,202,121, 17, 39,178,156,250, 57, 49, 78,145,166, 44, 87,198,202,177, 57,208,246,153, 97, 24,171, 11, 93, +179, 83,211,161,243,239,182,247,156, 57,115,230,252,101,139, 92, 57,252, 94, 38, 29, 21, 70,176, 88,150,133,201,100, 66, 66, 66, +130,183,119,168, 94, 79, 58, 26, 20,215, 30,163,174,230,131, 97, 24,108,237,218, 12, 42,157, 14,114,157, 22,157,126,221,101,175, +176,147,230,190, 14,185, 86,135,160, 46,125,189,170,192, 69, 81, 44,103,176,242,242,242, 32,147,201,240,254,251,239,131,101, 89, +124,248,225,135,136,140,140, 68,122,122, 58,186,119,239,238,213,197,134,149, 88,168,158, 12,132,234,121, 31,176, 19,234, 35,230, +193,231,145, 95, 88, 27, 39,205, 90, 52, 41, 62,143,128,157, 51, 96,145, 4,175,166,105, 96, 24, 6,130, 32,224,175,191,254,130, + 76, 38,131, 32, 8,246,139, 15, 33,196, 62, 75,190,109, 82,199, 15, 63,252,144,158,106,119,128,154, 15, 60,132, 39,210,244, 0, +128,205,157, 26, 67,169,213, 66,225,163, 67,151,223,247,216,203,231,229,217,147, 33,215,234,224,223,182,171, 87,154, 77, 95,124, + 13, 77, 94,152,140,236,236,108, 67,159,214, 49,123,242, 57,229,247,205,155, 55,183,247,185,210,104, 52, 80,169, 84, 12,202, 62, + 78,198,163,105, 97, 89,214,163,185,178,125,246,246,166,194,121, 20,174, 59,131,229, 45, 44,203,226,169,167,158, 66,120,120, 56, +190,248,226,139, 50,145,171, 55,223,124, 19, 86,171, 21,243,231,207,167,133,143, 66,161,184,171,247,254,246,118, 93, 66, 72, 91, + 7, 51,245,247,205,232, 86,230,255, 42,194,101,205,107, 50,153,146,122,247,238,141, 10,150, 69, 42,149,202, 50,181,171,109,210, + 81, 23, 77,133,205, 1,156,114,202,248,191,205,130,165,157,133, 21, 78,205, 46, 10,157, 15,100, 90, 29, 88,215,149,120, 57, 77, + 87, 17, 44, 91,211, 73,126,126, 62,100, 50, 25,190,248,226, 11,248,250,250,194,100, 50,185,186,243,118,169,201,113, 28,244, 87, +245,184,242,206, 73, 40,181, 23,209,168,175, 15,124,100,151,208, 96,239, 90, 8,130, 25,112,104, 50,244, 70,179, 81,163, 70,120, +247,221,119,203, 77,207, 80, 17,113,113,113, 30, 53,171, 0,170, 89,129,137, 81,250,232,160,242,241,169,176,124,242,174,231,110, + 42,163,105, 91,110,139, 92, 21,201, 53,223, 95,187,114,229, 48, 0,118,204,152, 49,126, 26,141, 6, 75,150, 44,209, 3, 96,223, +123,239, 61, 77,116,116, 52,231, 77, 58, 89,150,197, 15, 63,252, 80,174,207, 85, 69, 6,203,155,116, 10,130, 80,206, 96, 61,242, +200, 35,229, 38, 26,117, 19,193, 42,151, 78, 91, 31,172, 26, 53,106, 64,163,209,216, 31,187,165, 82,169,160, 82,169,236,179,195, +187,105,106,165,229,147,106, 82,205,255,142,230,109, 55, 99,213,137, 75,131,117,252,248,241, 1, 21,109,208,169, 83,167,243,251, +247,239,111,224,248,108, 66, 65, 16,228, 38,147,169,225,208,161, 67, 61,222, 42, 75,146, 4,165, 82, 9, 66, 8, 90,189, 61,183, +228, 22,158,253,183, 73,144, 16, 2,255,206,125,192,112, 28, 68, 81,130,213,106,245, 56,138,208,104, 52,150,233,128,238,106,248, +122, 81, 81,145,219,121,126,156, 53, 13, 6, 67,153,126, 93,140, 72,112,121,251,154,242,163, 9, 75,255,199, 91, 84, 42, 85,153, +102, 19, 47,195,165,148,219,132,109, 2, 79, 66, 8, 98, 38, 78, 45,137, 20,113,108,153,229,126,109,187,130,225,101,144, 74,250, + 45,121, 26, 24,194,100,101,101, 25,134, 12, 25,178,155, 16,242,221,208,161, 67,207,161,100,178, 58,162,211,233,148, 50,153, 76, + 2,112, 3, 0,201,205,205,245, 75, 77, 77,149,140, 70, 99, 45, 79,233,220,179,103, 15, 46, 94,188,136,216,216, 88,123,228,211, +246,178, 53,223,223, 76, 4,203,213,140,240, 21,205,228, 94,153, 8,150,159,159, 31, 20, 10, 5,222,127,255,125,200,229,114,168, +213, 37,173,160,243,231,207,183,239,115, 10,133, 66,185,159,168,244, 3,155, 37, 73,226, 42,106, 62,244,212, 84, 40,138, 98, 74, +251,246,237, 43,251,127,153, 30, 46,136, 41,123,247,238,149, 59, 63,144,214,213, 3,112, 29,126,243,168,249,247,223,127,203,221, +108,239,234,115,102,101,242,238, 77,255, 21, 65, 16, 82,105, 17,189,125, 8,130,144,210,174, 93, 59,215, 11,223,253,176,162,227, +154,233,193,180, 92,104,216,176, 97,154, 78,167,251, 35, 52, 52, 52,103,255,254,253, 65,109,219,182, 13,114, 92,167,109,219,182, +225, 78,155,153,225,102, 68, 47,195, 48, 41, 79, 60,241,132,220, 67,121,116,254,156,226,225,166, 34,229,244,233,211,114, 87,229, +189,162,119, 66, 72,138, 23,187,245,234,192,129, 3, 89, 87,231,144,139,125,153, 69, 75, 33,133, 66,249,207, 26, 44,163,209,152, +220,187,119,111,151,227,190,245,122,253, 53,119,219,158, 57,115,166, 77, 85,103, 32, 53, 53,181,211,189,160, 89, 29,121,167,220, +253,199,232,204,153, 51,237, 0, 32, 63, 63, 31,238, 30,127, 83, 25,146,147,147,171,188,124, 86,135, 38, 0, 36, 36, 36,116,164, + 37,139, 66,161, 80,131,229, 5,222, 78,199, 64,161, 80, 40, 20, 10,133,242, 95,133,165,187,128, 66,161, 80, 40, 20, 10,165,106, + 97, 80, 50, 18,192, 21,149, 25, 29,208,252, 38,254,251, 20,213,164,154, 84,147,106, 82, 77,170, 73, 53,255,115,154,158,180,239, +202,209,137,149,193,211, 36,212, 85, 65,115,170, 73, 53,169, 38,213,164,154, 84,147,106, 82,205,255, 18,132, 16,218, 68, 72,161, + 80, 40, 20, 10,133, 82,213,240,116, 23,220, 49, 56, 0, 98, 85,137, 17, 66,252, 1, 84,244, 64, 55, 51,195, 48,121, 55,169,171, + 0, 32, 43,125, 1,128, 21,128,149, 97, 24, 51, 61,132, 20,202,253, 69, 92, 92,220,211,132,144, 15, 80,242, 20,168,247,227,227, +227, 23,210,189, 66,161, 84,177,193,170, 87,175,222, 81,150,101,163, 92, 61,128,184,162,121,113, 68, 81, 76, 73, 76, 76,244,118, +168, 59, 31, 30, 30,254,136, 86,171,237,201,113, 92,231,210,237,247, 23, 23, 23,255,149,158,158,254, 11, 0,225,102, 50, 84,167, + 78, 29, 95,163,209,248, 40,195, 48,163, 75, 13,194, 79, 42,149,234,231, 43, 87,174, 20,220,228, 62,170, 31, 22, 22,246,147, 76, + 38,227,146,147,147,123, 2, 64,205,154, 53,255, 50,155,205,226,245,235,215, 71, 3,184, 88, 73, 61, 86, 46,151,207,109,223,190, +125,151,189,123,247,254, 8, 96,113, 21, 29, 75, 37,203,178, 87, 93, 45,144, 36, 41,250, 38,140,149, 28,128,223,252,249,243, 3, +151, 47, 95,222, 58, 61, 61,189, 5, 0,132,135,135,159, 28, 51,102,204, 63,132,144, 27, 0,242, 25,134,177,208,211,232,222,166, + 65,131, 6, 71, 89,150,141,170,204, 92,114,165,143,168, 74, 73, 72, 72,104, 83,145, 38,199,113, 81, 30,230,163, 43,247, 89,146, +164,203,103,206,156,113, 57,101, 68,195,134, 13, 15,114, 28, 87,199, 83,218, 92,165,179,162, 41, 56, 26, 54,108,120,148,227,184, +168,202,106, 74,146,116,249,244,233,211,157,170, 82,243,118,167, 19, 0,186,119,239,174, 44, 46, 46,254, 73,167,211,181, 44, 46, + 46,126, 90,146,164,233,187,118,237, 10,101, 89, 22,125,250,244,153, 30, 23, 23,119, 69,169, 84, 46, 50, 26,141,255,232,116,186, + 81,187,119,239, 54,209, 51,134, 66,185,245, 74, 55,179,168,168,136,216,144, 36,137, 88,173, 86, 98, 50,153,136,193, 96, 32,197, +197,197,164,176,176,144, 20, 20, 20,144,252,252,124,146,147,147, 67, 98, 98, 98,156, 39, 93,116,217, 70, 27, 25, 25,217,188, 81, +163, 70,231, 23, 46, 92,104, 74, 78, 78, 38, 22,139,133, 88,173, 86,146,156,156, 76,190,252,242, 75, 83,163, 70,141,206, 71, 70, + 70, 86,212,190,235,234,119, 54, 60, 60,188,111,120,120,248,202,254,253,251,155,119,236,216, 65, 76, 38, 19,209,235,245,100,195, +134, 13,164, 71,143, 30,230,240,240,240,149,225,225,225,125,225,122,228,100, 69,255,213,186, 78,157, 58, 23, 83, 82, 82,196,189, +123,247, 90,130,130,130,214, 7, 5, 5,173, 79, 78, 78, 22,175, 93,187, 38, 69, 69, 69, 93, 4,208,186, 18,233, 4,128, 97,147, + 39, 79, 78,186,114,229,138,190,123,247,238, 7, 29,126,103,224,121,230,246,230,174, 34, 87,132,144, 80, 66, 72, 24, 74, 38,167, + 44,247, 34,132,132,149,174,227,239,165,166,246,210,165, 75, 81,161,161,161,115, 75, 35, 85,101,244, 24,134, 49,135,134,134,206, +189,116,233, 82, 20, 33, 68, 91,137,188,223, 10, 84,179,154, 52, 27, 55,110,156, 81, 92, 92, 76, 8, 33, 68, 20, 69, 98,177, 88, +136,209,104, 36,122,189,158, 20, 21, 21,149, 57,207,109,175,188,188, 60,210,188,121,243, 76, 55,154,153,122,189,190, 76,221, 97, + 54,155,137,209,104, 36, 6,131,129,232,245,122, 82, 92, 92, 92,230, 85, 84, 84, 68, 90,183,110,157,236, 70, 51,221,150, 78, 73, +146,136, 32, 8,196, 98,177, 16,179,217, 76, 76, 38, 19, 49, 26,141,101, 94,182,223,218,181,107, 87, 97, 58,155, 52,105,146,105, + 48, 24,188,214,180,189, 98, 99, 99,211,170, 74,211,246, 91,171, 86,173, 50,220,105, 26,141,198,155, 73,103,178,187,178, 20, 23, + 23,247,219,149, 43, 87,136,193, 96, 32,125,251,246, 53,189,250,234,171, 68, 20, 69,178,113,227, 70,242,200, 35,143,144,231,158, +123,142,228,228,228,144,105,211,166,145,216,216,216,223,233,121, 68, 53,171, 89,243,190,129, 16, 82,113, 4,139,101, 89,104,181, + 90,172, 90,181,202,229,227,103,156, 63, 71, 71,123, 23, 36, 9, 13, 13,109, 19, 21, 21,181,123,237,218,181,234,144,144, 16,251, +239, 22,139, 5,190,190,190,120,234,169,167, 20,125,250,244,105,240,248,227,143, 31, 18, 4,161,123,102,102,230, 81,119,122, 97, + 97, 97,195,131,130,130, 22, 78,154, 52, 41,116,200,144, 33, 8, 8, 8, 40,179,124,240,224,193, 24, 52,104,144,252,242,229,203, + 35,127,249,229,151,145, 63,254,248, 99, 70, 81, 81,209,203, 25, 25, 25,191,185,211,213,104, 52,125, 26, 52,104,240,237,142, 29, + 59,162,252,253,253, 17, 17, 17,193,190,243,206, 59,205,235,213,171,167, 14, 15, 15,103,211,210,210,240,219,111,191,213, 27, 51, +102,204,186,107,215,174, 61,109, 50,153,118,120,145,125, 69, 96, 96,224,235,207, 63,255,124, 80, 97, 97,161,112,236,216, 49, 91, +244, 75,161, 84, 42,167,119,232,208, 33,118,215,174, 93,171, 1, 44,187,153,200, 21, 33,164, 0,255, 54,229,217,176,218,150,123, + 19,201, 34,132, 40,142, 29, 59, 22,208,185,115,231,223, 77, 38, 83,236,179,207, 62,155,250,241,199, 31, 43,124,125,125,125, 1, + 48,121,121,121,185, 51,103,206, 20, 23, 44, 88, 48,165, 89,179,102,189,247,239,223, 63,140, 16, 66,155, 12,239,113, 52, 26, 13, + 54,108,216,224,242, 49, 83,174,206,121,127,127,127,143, 79, 35, 80,171,213,216,182,109,155,125, 59,199, 71, 75,185,250,236,239, +239, 15, 66,136, 91, 81,149, 74,133,125,251,246,217, 31, 3, 84, 81,189,100,123,215,104, 52, 96, 24,134,245,164,185,123,247,110, +143, 90,182,119,157, 78, 7,148, 52,241,123, 76,167,167, 60,219, 62,107,181, 90,143,251, 83,169, 84,218, 53, 29, 53, 42,250,174, +213,106,225,233,166, 77,173, 86,183, 12, 13, 13,197,225,195,135, 49, 99,198, 12, 69, 76, 76, 12,206,159, 63, 15,150,101,241,244, +211, 79,163, 89,179,102,200,200,200, 64,179,102,205,176,111,223,190,214,244, 76,161, 80,188,199, 99, 31,172,138, 42, 88,231,207, +128,203,199, 96,148, 25,106, 25, 29, 29,173,148,201,100,191,110,216,176, 65, 29, 20,244,239,211, 66,204,102, 51, 10, 11, 11, 81, + 84, 84,132,194,194, 66,104,181, 90, 44, 90,180, 72, 61,122,244,232, 95,149, 74,101,195,171, 87,175,154, 42,210,100, 24,102,222, +241,227,199, 67, 5, 65,128, 66,161,168,208, 44,214,175, 95, 31, 47,191,252, 50,186,116,233, 18, 54,114,228,200,121, 0,126,171, + 72, 19, 0,194,195,195,191,220,191,127,127,148, 66,161,192,249,243,231,145,146,146,130,241,227,199, 71, 75,146,132,228,228,100, +156, 63,127, 30,105,105,105,248,250,235,175,163, 70,143, 30,189, 40, 53, 53,181,129,187,188,151,242,220,171,175,190,218, 32, 32, + 32,128,253,248,227,143,243,139,138,138,190, 46,253,125,218,252,249,243, 71,117,239,222, 61,248,217,103,159, 37,251,247,239, 95, +133,146,199,165, 84,184, 63, 29,251, 92,149, 54,231, 1,128, 72, 8, 57,235,180, 77, 19,135,229, 32,132,132, 2, 48, 49, 12,147, +239, 66,147, 1,224, 59, 96,192,128,201, 38,147, 41,118,239,222,189, 23,187,116,233, 18, 13, 32,157, 16,146, 5, 0, 1, 1, 1, +218,207, 63,255, 60,116,240,224,193,231,250,244,233, 19, 59, 96,192,128,201, 89, 89, 89, 31, 16, 66,178, 25,134, 33,110,242,126, +171, 80,205,106,210, 44,109, 74, 2,207,243, 24, 56,112, 32, 24,134,113,249,188,205,131, 7, 15,162,119,239,222,144,201,100,120, +230,153,103,188,214,236,223,191, 63, 4, 65, 40,167,231,108, 64,108,207,232,116,151,119, 66, 72,153,103,132,186, 50, 23,142, 47, + 23,122,229, 52, 37, 73,114,169, 85,145,201,178, 61,172,222,155,188,123,107, 46, 61,165,211, 81, 83, 38,147,161, 83,167, 78, 56, +118,236,152, 91,179,229, 41,157, 0, 80, 92, 92,252,228,208,161, 67,183,142, 31, 63, 94, 5, 0,217,217,217,101, 30, 68,159,152, +152, 8,147,201,132, 21, 43, 86,192,100, 50, 77,160,231, 17,213,172,102, 77,119, 55,255, 50, 0,173, 0, 4,163,164,255,114, 33, + 0,255,210,107,165, 2, 64, 14, 0,117,233,203, 4,160, 8, 64,141,210,205,179, 75,111, 54, 28, 31, 83,150,229,248, 80,104, 66, + 72,219, 82,109,219, 35,187,130, 29,214,181,253,135,243,119,231,119,187, 54,128,191,109,103,181,173,249,167,187,227, 9,109,123, + 8,171, 39,115,101,171, 28,189,216, 65, 47, 77,155, 54, 45,212,209, 92,153, 76, 38, 20, 20, 20,160,176,176,208,254,126,254,252, +121, 40, 20, 10, 60,242,200, 35,161,132,144,151, 60,200,202, 57,142,195,177, 99,199,176,118,237, 90, 92,185,114,165,220, 10,151, + 46, 93,194,231,159,127,142, 79, 63,253, 20, 5, 5, 5, 0, 32,175, 72,172,101,203,150, 51, 70,141, 26,117,168, 71,143, 30, 74, +158,231,113,252,248,113, 52,108,216, 16, 7, 14, 28,192,181,107,215,144,155,155,139,196,196, 68, 52,111,222, 28, 23, 47, 94, 68, + 65, 65, 1, 98, 98, 98,148,177,177,177,123,163,163,163,103,184, 75,103,100,100,228,155,207, 63,255,188, 50, 61, 61, 93,250,225, +135, 31,246, 3, 56, 0, 96,252, 91,111,189, 53,182,127,255,254,193,103,207,158, 45,248,251,239,191,143, 86, 96,174, 92, 69,174, +174,177, 44,123,149, 16, 82, 64, 8, 49,160,164, 3,122,153,139,145, 32, 8, 38,131,193,144,159,147,147,147,205,178,236, 85,150, +101,207, 3, 80, 86,164, 57,102,204,152,122,217,217,217, 47,254,239,127,255,187,210,165, 75,151,104, 66, 72, 34, 33, 36,167,180, +192,154, 4, 65,200,201,203,203, 59,215,185,115,231,240, 81,163, 70, 93,204,206,206,126,113,204,152, 49,245,220,104, 82,238,129, +104,182, 40,138,144,201,100,216,181,107, 23,246,237,219,135,125,251,246, 97,255,254,253, 56,112,224, 0, 14, 30, 60,136,131, 7, + 15,130,231,121, 28, 56,112, 0, 7, 14, 28,192,203, 47,191,236,241,156, 23, 69, 17, 60,207, 99,247,238,221, 56,114,228,136,253, +245,247,223,127,227,200,145, 35, 80,171,213,222,152, 33,199,155, 41,187,166,171,215,151, 95,126,105, 55,135,182,186,137,101, 89, +183, 81, 49,103,227,226,108, 88,162,107,215, 46,183,204, 83, 58,109,166,141,231,121,124,243,205, 55, 72, 77, 77,197, 23, 95,124, +129, 75,151, 46,225,163,143, 62,194,233,211,167, 49,107,214, 44,252,253,247,223,152, 54,109, 26,246,238,221,107,123,248, 59,241, +164,105, 51, 87, 22,139,197,158,158,196,196, 68,204,158, 61, 27,199,143, 31,199,244,233,211,113,240,224, 65,188,254,250,235,224, + 56,183, 65, 54,196,197,197, 61,205, 48,204, 47,141, 26, 53, 82,246,234,213, 11, 60,207, 99,246,236,217,210,244,233,211,175,191, +245,214, 91,215, 55,110,220, 72,234,213,171, 7,179,217, 12, 31, 31, 31, 16, 66,150,197,197,197,189, 68, 79, 23, 74,117,214, 69, +206, 94,196,129,110,211,166, 77,235,197, 48,204,198, 78,157, 58,141, 1,224,207, 48,204, 70, 0,138,210,247,160,105,211,166,181, + 99, 24,102,227,180,105,211,218, 0,168,193, 48,204,198,210,239, 61, 1, 4,217,190,151,174, 31,236,100,222,130, 29,126, 15,118, + 90, 87,225,234,187,243,187,179,182, 99, 4,139, 41,205, 24,227, 88, 65, 86,198, 96,121,170,112,117, 58,221,160, 1, 3, 6,200, + 29,205,149, 99,228,202,246, 94, 88, 88,136,115,231,206,161,121,243,230,114,157, 78, 55, 8,192, 39, 30, 67,113, 60,143,136,136, + 8,100,103,103,227,212,169, 83,136,142,142,134,213,106,197,150, 45, 91,144,151,151, 7,185, 92, 14,185, 92, 14,179,217,189,119, +105,210,164,201,192,229,203,151,183,249,241,199, 31,115,121,158, 71, 98, 98, 34,126,250,233, 39, 16, 66, 80,163, 70, 13,232,245, +122, 92,191,126, 29,243,230,205,131,197, 98,129, 78,167, 67,100,100,164,234,165,151, 94,234, 50,115,230, 76,217,213,171, 87, 43, + 50, 89,237,135, 15, 31,238,235,227,227,131, 87, 94,121, 69,178, 88, 44,159, 2,232, 48,124,248,240, 55, 95,126,249,229,192,164, +164, 36,243,115,207, 61,119,212, 98,177,204,179, 5, 15,157, 13,147, 11,195, 90, 97,228, 74, 16, 4,219, 62,189, 82, 88, 88,136, +144,144,144, 90,132, 16,185,135, 99, 36, 63,112,224, 64, 39, 0,220,123,239,189,167, 34,132,100, 58,166,193, 98,177,216, 52,133, +252,252,252,235,175,191,254,186,176,114,229, 74,174,116,155, 4, 0, 70, 90, 63,220,123,216,140,139, 76, 38,195,192,129, 3,203, + 24,138, 61,123,246, 96,192,128, 1,246,243, 93, 46,151,219,215,243,164,233, 24, 21,179, 69,158,108,186,127,253,245, 87,185,200, +139,151, 55,105,246, 8,139, 43,227,227,108,186,108, 55,138,222,152, 33, 87, 38,203, 86,183, 56, 71,134,188, 73,167, 76, 38,195, +203, 47,191, 12,158,231,241,250,235,175, 67, 38,147,161, 85,171, 86,224,121, 30, 29, 59,118, 4,207,243,232,217,179,167,215, 55, +168,182,116, 30, 60,120, 16,113,113,113,246,244,180,106,213, 10,109,219,182, 5,207,243,232,218,181, 43,120,158, 71,191,126,253, + 60,106, 18, 66,166,239,218,181, 43, 84,167,211,225,220,185,115,224, 56, 14, 12,195,228, 28, 59,118, 44, 20, 0, 30,120,224,129, +108,163,209, 24,100, 52, 26,209,187,119,111,116,234,212, 41,120,229,202,149,239, 0,160, 35, 11, 41,213, 90, 37, 57,123, 17, 91, + 0, 96,238,220,185,179, 9, 33,131, 43,218,208,182,156, 97,152,141,115,230,204, 25, 92, 90,206,203,125,119,136, 50, 57,154,183, + 24,199, 8,148,109, 59,199,255,115,247,223, 78,235,103, 57, 27, 44, 2,160,135,171, 74,215, 85,168,220,249,179, 55, 21,132,209, +104,108,101,139, 94, 25,141,198, 50,134,170,168,168,168,140,209, 50,155,205,168, 91,183, 46,140, 70, 99,171,202, 94, 44,194,195, +195, 97,177, 88,176,116,233, 82,187,177,114, 52, 9,238, 56,115,230,204,149, 67,135, 14,197,198,197,197, 5,252,254,251,239, 89, +125,250,244, 9,238,223,191, 63, 84, 42, 21,140, 70, 35, 4, 65, 64,251,246,237,209,164, 73, 19, 92,191,126, 29,155, 55,111,206, +110,216,176, 97,141,195,135, 15, 75, 25, 25, 25, 87,221, 72,247,238,221,187, 55, 24,134,193,230,205,155,111, 0,136, 87,169, 84, +191,205,158, 61,219,223,100, 50, 73, 99,199,142, 77,190,113,227,198,235, 0,172, 10,133,226,147,110,221,186,181,223,177, 99,199, +106, 73,146, 42, 93,153,153, 76,166, 50,251,182,176,176, 16, 26,141,198,155, 41, 33,100,121,121,121, 45, 0, 64,163,209, 4,194, + 97,132,164,193, 96,176, 31,163,210,227, 99, 12, 12, 12,212, 2, 64,233, 54, 50, 90, 47,220,187,216, 46,222,187,118,237, 42,115, +126,219, 34, 80,206,231,188, 66,161,192,134, 13, 27,188,210,116, 52, 83, 94, 52,231,185,141, 54,217, 12, 22,207,243,248,250,235, +146, 22,246, 87, 94,121,197,190,189,243,127,120, 83, 95,216,204, 16,207,243,104,242,174, 4,192,130,148,207, 84,144,201, 74,138, +180,115,154, 75, 43, 83,175,162, 98, 95,124,241, 5, 6, 15, 30,140,141, 27, 55,186,125, 31, 52,104,144, 87,233,228,121, 30, 74, +165,178,140,241, 59,126,252,184, 75,221, 37, 75,150,120,236,211, 38, 73, 18,254,248,227, 15,176, 44, 91, 38,226,245,246,219,111, + 63,175,213,106,117,187,119,239, 70,102,102, 38,138,139,139, 81, 84, 84,132,128,128, 0,255,222,189,123, 31,207,200,200, 72, 74, + 72, 72, 24, 70,207, 28, 74, 53, 69,177,122,184,248,221, 48,117,234,212, 55, 25,134,217, 56,117,234,212, 55,231,204,153,115,186, +244,220,216,232,116,174,108,244,112, 46,109, 44, 53, 67,127,151,158,203,109,157,204, 91, 22,195, 48,127, 19, 66, 30,168,104, 91, + 0,102, 39, 67, 85,166,137,176,116,123,247, 17, 44,231,190, 9,238, 62,151,134,184, 61, 85,184, 60,195, 48,229, 12,128,171, 8, +150,213,106, 69, 78, 78, 14, 36, 73,170,210,185,186, 60, 25,172, 83,167, 78, 61,245,244,211, 79,167,249,249,249,181,204,201,201, + 73, 87, 42,149, 93,247,236,217, 83,211,106,181,194,215,215, 23,190,190,190,216,180,105, 19,252,252,252,240,191,255,253,239,154, +193, 96, 56,160,213,106, 67, 13, 6,195,137,140,140,140,183, 43,116, 46, 50, 89,239,174, 93,187, 34, 62, 62, 30,121,121,121, 59, + 1,180, 28, 61,122,116,191,154, 53,107, 50, 31,124,240,129,241,226,197,139, 11, 1,100,105,181,218,111,150, 47, 95,222, 61, 54, + 54, 86, 55,118,236, 88,236,222,189,251,219,202, 68,134,244,122,125, 25, 99,101,219,167, 62, 62, 62, 94,205,185, 85,186,191, 9, +195, 48,196,118,231,239,104,172, 28, 12, 48,225, 56, 78, 2, 64,170,250, 24, 81,110,127, 4,203,118,174, 63,248,224,131,229, 58, +183,203,229,114,108,221,186, 21, 15, 61,244,144,253,134, 37, 46, 46,206,235,104,211,144, 33, 67,236,134, 96,235,214,173, 21, 26, + 44, 79, 77, 90,206,209,166,137, 19, 39, 66, 38,147, 97,225,194,133,152, 52,105, 18, 56,142,195,103,159,125, 6,150,101,241,206, + 59,239, 84,218, 92,202,100, 50, 92,249,176,228, 61,234,213, 2,228, 44, 14, 5, 0,248,248,250,150,228, 71,146,188,191, 66,148, +230,221, 83,228,202,209, 88,121,106, 34,116,140, 2,158, 63,127,222,254,185, 99,199,142,101, 34, 87, 60,207,123, 52,108,165,255, + 55,171, 87,175, 94, 31, 68, 69, 69,133,140, 31, 63,158,225,121, 30,109,218,180,169,209,167, 79,159,124,158,231, 85,175,189,246, +154,171,174, 20, 50, 0, 45,155, 54,109,170,165,103, 14,229, 54, 71,176, 76,115,230,204, 57, 61,103,206, 28,151, 17, 42,231, 72, +146,187, 72,147,205, 88,149,154,172, 96,155,105, 67, 73,255,228,191, 61,109,139,210, 38, 65, 87, 81, 46, 71,156, 35, 88, 51,157, + 43, 30,111, 12,150, 55,253, 39, 74,163, 34, 39,179,179,179, 59, 42,149, 74, 20, 20, 20,148,187,104, 59,154, 2,142,227,112,253, +250,117,104, 52,154,147, 85,121,228, 60, 53, 17, 2, 48, 94,184,112, 97,178,195,247,182,143, 60,242,200,202,213,171, 87,215,221, +190,125, 59, 14, 31, 62,140, 26, 53,106, 96,246,236,217,151,147,146,146, 70, 1,248,251,250,245,235, 30,255,183, 94,189,122,205, +116, 58, 29,246,239,223, 15, 0,123, 1, 60,249,194, 11, 47, 48, 22,139, 5,139, 22, 45,210, 3,216,238,231,231,247,219,154, 53, +107, 90,182,108,217, 82,185,125,251,246,194,195,135, 15,239,242,210, 92,137,132, 16,151,198,170,176,176, 16,197,197,197,208,233, +116,222, 24, 44,193,215,215,247, 84, 97, 97,225,163, 6,131,161, 64,169, 84,250, 20, 20, 20,152, 28, 35,140, 69, 69, 69, 40, 46, + 46, 6,207,243,178,243,231,207,167, 1,168,231,235,235,123, 10, 55, 57,111, 25,229,206,195,178, 44,177,153,140,237,219,183,187, + 60,215,101, 50, 25,182,108,217, 82,230,124,223,188,121,179, 71,211,198,243,188,125, 36,161,167, 8,150, 67,229,234, 62,204, 42, +147,129,227, 56, 44, 94,188,184,228,113, 20,165,145, 43,150,101, 49,117,234, 84, 40,149, 74,188,255,254,251,152, 58,117,170, 87, + 81, 44,199,168, 88,157, 41,134,127, 43,199,210,109, 45,102,115, 73,148,158,101, 29, 77,150, 87,145, 54, 79, 29,220, 43, 99,130, + 29, 35,109, 74,165,178,194,206,237, 46, 46, 86, 46,137,143,143,255,174,117,235,214, 23,131,131,131,183,117,234,212, 73,121,244, +232, 81,188,252,242,203,140,201,100,242,221,190,125,187,253,127, 93,237,175,226,226, 98, 21, 61,115, 40,213, 24,193,154,233,226, +247, 0,155,113, 42, 53, 67,222,158, 59, 27, 29,215,183,105, 56,155,162,210,136,216, 30, 79, 90,174,182,173, 8,190,162,147,208, +185,146,240,100,180,188,185,251, 52, 24, 12, 59,118,237,218,213,246,161,135, 30,226,221, 53, 15, 22, 21, 21, 33, 52, 52, 20,151, + 46, 93, 18, 12, 6,131,199,233, 15, 68,209,251, 9,209, 61, 69,176, 92,240,119,118,118,182, 96,177, 88,208,160, 65, 3, 68, 70, + 70,194, 96, 48,224,243,207, 63, 23, 0,252,237,165,134, 92,171,213,114, 0,144,159,159, 15,148,140,118,104,216,176, 97, 67,196, +199,199, 35, 55, 55,119, 29,128,222, 51,103,206,108,221,161, 67, 7,249,234,213,171,245, 19, 38, 76, 88,103,181, 90, 63,240,242, + 14,220, 44, 8, 66, 29,150,101, 45,121,121,121,169,142,198, 42, 52, 52, 52, 64,167,211,177,215,175, 95,183,122,179,123, 90,180, +104,113, 36, 37, 37, 5,239,189,247, 94,214,236,217,179, 27, 22, 22, 22,230,230,231,231, 11, 54, 99, 85, 80, 80, 0,131,193,192, + 6, 7, 7, 43,151, 44, 89,162, 1,128, 22, 45, 90, 28, 1, 64, 39, 28,189,151,107, 52,167, 1, 45,174,166,106,240,182, 51,186, +179,113, 25, 58,116,104,185,136,152,237,181,102,205,154, 50,253,154, 60, 53,189,217, 52,191,252,242, 75,188,242,202, 43, 80, 42, +149,152, 63,127,126,153, 62, 88, 21,220, 17, 87,168,105, 51,109,117,166, 24,144,177, 32, 16, 50,153, 12, 65, 19, 50,203, 52, 17, +186,200,155, 87, 70,112,246,236,217, 85,210, 68,232,104,250,108, 83,226, 44, 93,186, 20,143, 60,242, 8,246,238,221,123,211, 77, +132,117,234,212, 89,254,249,231,159, 43, 19, 18, 18, 80, 80, 80,128,172,172, 44, 24,141, 70, 36, 39, 39,219,143, 97, 5,145,114, + 53, 61,107, 40,213, 20,189,170,136, 44,167,254, 83,140, 99,115,157,155,119,231,245,225,240,155,163,110, 22,195, 48, 86, 23,255, +151,229,194, 84, 57,255,135,227, 58, 89,174, 34, 88,174, 46,220, 94, 79,211, 80,218, 65,210,147, 17,152,247,238,187,239,190,216, +165, 75,151, 64, 95, 95, 95,164,165,165,185,140, 96,249,250,250,194, 98,177, 96,215,174, 93, 5,146, 36,205,243,112, 64,172, 86, +171, 21, 33, 33, 33,200,206,206,134, 84, 65, 24,159,101, 89,168,213,106, 20, 21, 21, 1, 30, 58,143,187,186, 80, 88,173, 86, 88, + 44, 22, 88, 44, 22, 88,173,214,202, 22, 26,117,233,156, 52, 40, 46, 46, 6,128,226,136,136,136,122, 42,149,202, 54,234,241, 60, +128, 94,253,251,247,151,229,228,228,144,231,158,123,238, 32, 33,228,101, 15, 81, 33,243,174, 93,187,106, 3,128, 90,173, 62, 15, + 0,201,201,201,214,188,188, 60, 20, 21, 21,217, 35,132,106,181, 26,195,134, 13, 11, 35,132, 96,215,174, 93,181,229,114, 57,113, + 99,134, 76, 27, 55,110, 60,227,231,231,183,114,238,220,185,163, 30,120,224,129,211, 45, 90,180,168, 83, 84, 84,116, 93,175,215, + 27, 12, 6, 3,225,121, 94, 30, 20, 20,164,220,182,109,219,197,131, 7, 15,246,245,245,245, 93,185,113,227,198, 51, 40, 25,101, + 72,185, 23,107, 52,167,190, 77,174, 76, 85,101, 70,208, 57, 26, 23,158,231,177,101,203, 22,183, 81, 28,111, 53, 29, 77,198,228, +201,147,177, 96,193,130,114, 17,172, 15, 62, 40,185, 39,121,235,173,183, 42, 21, 33,226,121, 30, 25, 11, 2, 17, 54,241, 70,185, + 8, 22, 83,154,190,202, 52, 17,218,182,159, 53,107, 22,100, 50,153,189, 9,175,111,223,190,101,154, 6,189, 53, 86,142,154,215, +175, 95, 7,207,243, 8, 12, 12,196,168, 81,163,208,175, 95,191,114,122,222,234, 38, 39, 39,255,243,233,167,159,214,138,140,140, +196,234,213,171,205, 90,173, 86,209,171, 87, 47,146,159,159,207,184,139, 96, 25, 12, 6, 26,193,162,220,238,122,234,239,219,169, + 91, 21,255,199,123,170,116,111,113,154,134,230,112,152, 43,227,234,213,171,249, 97, 97, 97,163, 71,142, 28,249,251,226,197,139, +213,245,234,213, 67, 98, 98, 34,114,115,115, 97,177, 88, 32,151,203, 17, 17, 17,129,162,162, 34,252,250,235,175,122,189, 94, 63, + 58, 35, 35, 35,223,157, 38,195, 48,111, 13, 28, 56,112,201,219,111,191,173,106,214,172, 25,114,115,115, 81, 84, 84,100,191,243, + 98, 24, 6,190,190,190,208,104, 52, 56,117,234, 20, 14, 30, 60,104, 96, 24,230, 45,119,154,174,140,166,205, 88,217,140,150,167, +145, 73, 78,154, 90,141, 70, 99,187,243, 3, 0,161, 86,173, 90,161, 0,108, 6,235,106,221,186,117,223,174, 95,191, 62,179,124, +249,114, 66, 8,217, 94,129,185,178,107, 50, 12,147, 75, 8,201, 3, 16,106, 54,155,229, 0, 80, 80, 80, 96, 9, 10, 10, 10, 81, + 42,149,146, 82,169,148, 84, 42,149,148,158,158, 46, 8,130, 32, 7,128,238,221,187,155, 1,100, 58,245,245,112,212,148, 8, 33, +133,139, 22, 45,154,241,228,147, 79,118,236,220,185,115,204,115,207, 61,151, 48, 97,194, 4, 68, 70, 70, 6, 20, 21, 21, 25,207, +159, 63,159,183,120,241, 98,227,145, 35, 71,250,202,100,178,171,139, 22, 45,154, 1,160,144, 97, 24,201,219,253,121,147, 80,205, +106,210,180,149, 7, 87,198,202,241,187, 23, 70,168, 76, 58,109,166,237,209, 71, 31,181,143, 62,116,142, 92, 85, 86, 19,128,125, + 4,225, 27,111,188, 81, 38,125,111,191,253,182,183,119,197,142,121,183, 71,155,120,158, 71,254,210,200, 50,230,175, 18,166,170, +156, 38,207,243,152, 62,125,186,215, 17, 44, 23,125,176, 42, 76,103,247,238,221, 81, 92, 92, 12,153, 76,134,173, 91,183, 86, 24, +193,242,180, 63,213,106,245,168,117,235,214,253,164, 84, 42, 91,152,205,230,103,178,179,179,127,208,235,245,181,242,242,242,220, + 70,176,140, 70,163,146,158, 71, 84, 19,183,121, 46,172,123, 13,183,183,120,130, 32,160,102,205,154,101,158,109,101,235,204,206, +113,156,125,228,137, 55, 35, 8,109,100,100,100,108, 5, 48,124,216,176, 97, 43,158,124,242, 73,159, 38, 77,154,200,162,163,163, + 97, 48, 24,144,148,148,132,164,164, 36, 97,231,206,157, 5,122,189,254,241,210,117,221,146,150,150,246,163, 32, 8, 91,198,140, + 25, 51,189,117,235,214,227, 39, 77,154,196,213,173, 91, 23,249,249,249, 8, 8, 8, 64,112,112, 48,146,146,146,240,235,175,191, +138,121,121,121, 75, 68, 81,156,117,253,250,245,172,202,236, 36, 65, 16, 56,171,213,138,145, 35, 71, 66,146, 36,204,159, 63, 31, +130, 32,112,149,144,176, 88, 44, 22, 2,128,201,206,206, 6, 0,189,205,112, 93,184,112, 1, 0,174,213,174, 93, 91, 7, 0, 59, +118,236, 96, 80, 50, 63,150, 55,206,155, 16, 66,236,145,172, 38, 77,154, 36, 57, 87,138,182,200,149, 45,234,229,169, 35, 45,195, + 48, 70, 66, 72,150,201,100,234,255,234,171,175, 78, 95,186,116,233,168,165, 75,151,150, 91,207,215,215,119,229,103,159,125, 54, +107,212,168, 81, 89, 12,195,208,233, 25,238,135,202,192, 41, 90, 85,217, 46, 0, 21,105,174, 95,191,190, 50,147,107,186,141,138, + 49, 12,227,114, 68,162,187, 58,200,139,155,161, 10, 39, 20,189,149,168, 32,207,243,248,248,227,143,237,145, 43,199,206,231, 55, + 19,193,178,105, 6, 6, 6,150,220,181,105,181,144, 36, 9,131, 6, 13,186,105,221,210,103, 11, 14,183,125,143,139,139,155,181, +106,213,170, 15, 8, 33, 65, 0,120,199,125,224,205,126,164, 80, 40, 94, 24, 44, 81, 20, 83,122,244,232, 1,199,187, 39, 79, 15, +107, 21, 4, 33,197, 75,147,181,165, 78,157, 58,117,151, 46, 93,250,138, 86,171,237, 99, 52, 26, 91, 0,128, 74,165, 58, 89, 92, + 92,188,157,101,217,207, 51, 50, 50,188,126, 56,115,169, 97,122,137,101,217,249, 99,198,140,249,160, 83,167, 78, 35,158,123,238, + 57,134,231,121,252,242,203, 47, 36, 53, 53,117, 13,203,178,111,165,167,167, 95,186,153,157,164,209,104,206,173, 89,179,166,222, +250,245,235, 97,181, 90,177,100,201, 18, 40,149,202,115,149,144,200,218,185,115,231,138,206,157, 59,143, 58,120,240,224, 74, 0, +167,246,238,221,251, 83,183,110,221, 70, 31, 56,112,224,103, 0, 9,187,118,237,250,169, 83,167, 78,163,143, 28, 57,242, 27,128, + 19,149,168,116,237,145, 44, 65,112,221,162, 88, 65,228,202,157,102, 1, 33,196,242,244,211, 79,191, 58, 98,196,136,165,241,241, +241,237,109,211, 55,248,251,251,159,140,139,139, 59,188,102,205,154,196,210,200, 21, 53, 87,247, 56,182, 14,233, 1, 1, 1, 96, + 89,214,254,178,205,230, 93, 89, 35,100,211, 36,132, 32, 32, 32,192,229,141,153, 27, 77,183,174,134, 16, 2,157, 78,103,215,244, +114,244,178,199, 48,148, 78,167, 43,147, 70, 47, 32,158,242,238,156, 78,111,246,153, 39, 77,173, 86, 11,139,197,226,181, 38,188, + 24, 52,224, 72,124,124,252,119, 0,190,171, 95,191,254, 5, 0,245,169,169,162, 80,170,193, 96, 37, 38, 38,182,169,206, 63,190, +114,229, 74, 1,128, 89,165,175, 42, 33, 53, 53,245, 18,128, 71,247,237,219,247,201,129, 3, 7,222, 41,173, 92,223,243,244, 60, + 67, 79,156, 56,113,226, 33,153, 76,182,104,217,178,101,157, 8, 33,240,243,243, 59,112,241,226,197, 23, 42,163, 33,138,226,248, +131, 7, 15, 78, 66,233,168, 64,179,217, 60,126,223,190,125,175, 1, 40,182, 45, 63,116,232,144,253,123, 37, 47,102,132, 16, 98, + 38,132,132, 87,176,138,217, 91,115,229, 20,201, 50,175, 89,179,166, 8,192,113,252, 59,207,149,181,244,101,114,106, 22,164,220, +163, 8,130,144,218,163, 71, 15,222,211, 13,148,139,237, 82,220,221,160,117,237,218, 21, 55,161,153,234, 38,169, 87, 59,117,234, +196,122,171,101,195,106,181, 94,119, 99,190, 82, 58,118,236,232, 50,157, 30,246,153,219,188,119,236,216,177, 82,105, 44, 77, 75, +106, 85,107,122,216,159, 21, 98, 48, 24,114,131,131,131,139,140, 70,163,204,100, 50,201,156, 35,246,106,181, 58,203, 96, 48,208, +147,135, 66,185,131,208, 39,141, 83, 77,170, 73, 53,169, 38,213,164,154, 84,243, 63, 5, 33, 4, 44,221, 13, 20, 10,133, 66,161, + 80, 40, 85, 11,227,198,133, 86,102,116,192,205, 56,217, 83, 84,147,106, 82, 77,170, 73, 53,169, 38,213,252,207,105,122,210,190, +231, 71, 39,222,142,254,139, 52,124, 74, 53,169, 38,213,164,154, 84,147,106, 82,205,255, 20,180,137,144, 66,161, 80, 40, 20, 10, +165, 26,160, 6,139, 66,161, 80, 40, 20, 10,133, 26, 44, 10,133, 66,161, 80, 40, 20,106,176, 40, 20, 10,133, 66,161,252,183, 96, + 34, 35, 35,187,135,135,135,119,252,175,238, 0,158,150, 1, 10,133, 66,161, 80, 40, 85, 65,205,154, 53,253, 69, 81,124, 18,192, + 11,245,234,213,171, 7, 0, 12,195,156, 34,132,124,174, 86,171,127,186,116,233,146,249, 63,227, 48,105,113,160, 80, 40, 20, 10, +133,114, 43,132,135,135,183, 6,240,130, 90,173,126,188,125,251,246,138, 94,189,122, 33, 32, 32, 0,130, 32, 32, 61, 61, 29, 59, +119,238,196,241,227,199,111, 88,173,214, 69, 86,171,117, 81,118,118,118,230,253,188, 63, 8, 33,101, 12,214,238,210,247,238,180, +168, 80, 40, 20, 10,133, 66,241,134,176,176,176, 79, 7, 12, 24,240,106, 64, 64, 0, 26, 52,104,128,176,176, 48,152, 76, 38, 24, + 12, 6, 16, 66,192,243, 60, 8, 33, 40, 44, 44,196,209,163, 71,113,248,240, 97,161,160,160, 96, 37,195, 48,159,167,167,167,255, +227, 36,119, 95,120, 17, 71,131, 69, 0,244,112,202, 28,133, 66,161, 80, 40, 20,138, 91,194,195,195, 51,119,236,216, 17, 34,138, + 34,178,179,179, 97, 50,153,160,215,235,237, 6,139,227, 56, 16, 66, 32, 8, 2, 0, 64,146, 36, 36, 36, 36,224,224,193,131, 72, + 78, 78,254, 44, 35, 35, 99,242,253,230, 69,156,231,193,218, 77,205, 21,133, 66,161, 80, 40,148,202, 98, 50,153,176,124,249,114, +100,103,103,163,102,205,154,136,140,140,132,159,159, 31, 84, 42, 21, 0,216,205, 21, 0,176, 44,139,152,152, 24,140, 30, 61, 26, + 12,195,140,118,146,186,111,188, 8,237,228, 78,161, 80, 40, 20, 10,229, 86,176, 90, 44, 22,180,105,211, 6, 87,174, 92, 65,124, +124, 60, 98, 99, 99,209,180,105, 83,100,103,103, 35, 45, 45,173,204,202, 71,142, 28,193,177, 99,199,208,173, 91,183,251,122,167, +216,154, 8,103,224,223,246,206,238,180,172, 80, 40, 20, 10,133, 66,241,134,136,136,136,177,193,193,193,139,199,140, 25,163,110, +213,170, 21, 82, 82, 82,144,154,154,138,220,220, 92,180,110,221, 26, 49, 49, 49,184,116,233, 18,182,108,217,130, 99,199,142, 65, +169, 84, 34, 42, 42, 10,186,149,171,240, 71, 68,120,106,122,122,122,212,253,230, 69,156, 59,185,219, 50,179,155, 22, 23, 10,133, + 66,161, 80, 40,222, 18, 30, 30, 30,196, 48,204, 91, 17, 17, 17, 47, 62,254,248,227,178,250,245,235, 35, 37, 37, 5,217,217,217, +200,205,205,197,161, 67,135, 0, 0,145,145,145,136,140,140, 68, 82, 82, 18, 78,157, 58,101, 48,153, 76, 19,210,210,210,126,188, +223,188,136,179,193,162, 80, 40, 20, 10,133, 66,185, 21,163, 85, 19,192,204,250,245,235,143,125,228,145, 71,216,136,136, 8,164, +166,166, 98,231,206,157,168, 87,175, 30,174, 95,191,142,163, 71,143,138, 5, 5, 5, 75, 68, 81,156,117,253,250,245,172,251,113, + 63, 16, 66,170,253, 63,232,147,198,169, 38,213,164,154, 84,147,106, 82,205,255,152,102,104,104,104,147,240,240,240,181,253,250, +245, 35,139, 23, 47, 38, 47,189,244, 18,137,141,141,149,194,195,195,127,137,140,140,172,119,191, 27, 77, 66, 8,237,228, 78,161, + 80, 40, 20, 10,165,106,201,204,204, 60, 11,224, 33,134, 97,218,159, 62,125,250, 77, 0,144, 36,233,189,204,204,204,163,255,149, +125, 64, 13, 22,133, 66,161, 80, 40,148,106, 33, 45, 45,237, 48,128, 7,255,139,121,167, 15,123,166, 80, 40, 20, 10,133, 66,161, + 6,139, 66,161, 80, 40, 20, 10,133, 26, 44, 10,133, 66,161, 80, 40,148,255, 20, 12, 42, 30, 9,112,170, 18, 58, 55, 51, 66,225, + 20,213,164,154, 84,147,106, 82, 77,170, 73, 53,255,115,154,158,180, 79,225, 30,167, 50,211, 52,220,236,124, 89,116, 8, 43,213, +164,154, 84,147,106,222, 59,154, 76, 21,105, 50,165, 47,182,244,197, 84, 82,251,118,165,243, 94,201,251,127, 69,243,190,193,155, +105, 26, 28,119,146, 84,250,170,138,217,179,108, 7,160,170,244, 40, 85,143,227,137, 65,232,113,162, 80,238,107,170,178,174,183, +213, 29,156,131,166, 88,250,194, 45,214, 37,213,113, 77,186,219,243,254, 95,214,188,167,225,221,237,168,224,224,224,173, 33, 33, + 33, 61,179,179,179, 37, 0, 96, 24, 6, 44,203,130,101, 89,240, 60,111, 72, 74, 74,242,173,236, 31,134,132,132,124, 27, 28, 28, +252,100, 78, 78,142,100,211, 98, 24, 6, 28,199,129,227, 56,195,165, 75,151,124,239,244, 78,137,141,141,205, 53,155,205, 58,231, +223, 21, 10,133,241,216,177, 99, 62,255,133,114,209,176, 97,195,199, 52, 26,141,186, 34,115,254,207, 63,255, 44,245, 86,172,118, +237,218, 71,212,106,181, 63,207,243,224, 56, 14, 60,207,163,184,184, 56,239,236,217,179,237, 74,151,239, 87,171,213, 65, 28,199, +217,202, 22,140, 70, 99, 78, 66, 66, 66,103,122,221, 43, 79,247,238,221,121, 84,126,138, 21, 97,247,238,221,194,109,188,123, 99, +205,241, 62,245, 25,193,208,146, 97,137, 31,145,152,124,194,171, 79, 40,226, 10, 47,122, 85, 83, 51,140,116,135,119,115, 45, 0, + 2,128,180, 74,231,221,197, 29, 59, 15, 12, 16,129,145,165, 95,141, 44,144,195, 0,231,131,128, 95, 51, 1,131, 83,229,123, 59, + 47, 68, 12, 0, 38, 42, 42,234,243,208,208,208,167, 10, 11, 11,245, 28,199,129, 97, 24,194, 48,140,237, 88, 56, 30, 23, 72,146, +148,114,230,204,153, 54, 30, 46,178,178, 90,181,106,125, 22, 28, 28,252,132, 94,175,215, 51, 12, 99,215,180,189, 28,181, 69, 81, + 76, 57,125,250,116,155,219,152,206, 59,146,119, 71, 45,219,119, 73,146,220,229,221,174, 25, 21, 21,245, 89,104,104,232, 19, 69, + 69, 69,250,210,235,230, 45,167,243, 46,215,188,111, 13, 22, 27, 18, 18,178,174, 93,187,118, 61,214,175, 95,207,158, 61,123,150, +109,210,164, 9, 68, 81,132, 36, 73, 32,132, 32, 46, 46, 78, 83,217, 63, 11, 13, 13,253,161, 77,155, 54, 35, 55,108,216,192,174, + 91,183,142,109,219,182, 45, 24,134,129, 40,138, 16, 69, 17,189,123,247, 86,223, 98,126,116, 60,207, 79, 82, 40, 20,221, 5, 65, +104, 10, 0, 50,153, 44,193,100, 50,237, 22, 4, 97, 30,128, 34,111, 68,172, 86,171,230,244,233,211,229,246, 77,187,118,237, 20, + 55,155,176, 6, 13, 26, 28, 96, 89,182,174, 99, 33,243,244, 78, 8,185,124,230,204,153, 78, 21,105, 54,106,212,200,163,166,243, +111,146, 36, 93, 62,125,250,116, 39,119,101,162, 65,131, 6, 35,155, 53,107,166,250,229,151, 95,144,156,156, 12,173, 86, 11, 73, +146, 32,138, 34,172, 86, 43, 30,122,232,161, 74,133,124,213,106,181,239,206,157, 59,235,135,132,132,224,250,245,235,200,206,206, +198,248,241,227,207, 59, 44, 15,250,235,175,191, 26, 6, 6, 6, 66,175,215, 35, 63, 63, 31,163, 71,143,190,231, 79,174,190, 93, +235,190,207, 0,129,182,239,162,132, 27, 59,246, 95,126,251, 86,117, 77, 38, 83,186, 40,138, 1, 78,134,196,237, 54, 28,199,229, + 2, 8,246,228,133, 1, 60,200,113, 92, 3,153, 76,214,152, 16, 82, 91, 16,132, 80, 0,144,203,229,153, 28,199, 37, 89,173,214, + 68,179,217,124, 1,192, 6, 0, 73, 21, 9,153,227,125,234,139, 38,253,136, 98,147, 52, 72, 34, 8, 99, 25,100,104,149,250, 77, +230,120,159, 53,222,154,172, 59, 72,157,136,136,136,143, 1, 32, 45, 45,237,117, 0, 87,110, 85, 80, 4, 70, 18, 66,252, 0, 32, + 63, 63,223, 47, 57, 57, 57,108,195,134, 13, 49,179,103,207,238,165, 48, 26, 63, 50, 3, 9,238,182,239,211,173,222, 81,158, 97, +162,236,110,153, 72, 41,219,247, 92,174,138, 11, 19, 27, 25, 25,249,249,192,129, 3,199, 44, 89,178, 68,115,248,240, 97, 77,139, + 22, 45, 74,111,124, 97,175,239, 9, 33,246, 50,214,161, 67, 71, 79,134,141,143,136,136,152, 63,112,224,192, 81,139, 22, 45,210, + 36, 38, 38,106,234,212,169, 99,215,116, 44,179,182, 27,236, 86,173, 90,223,238,116, 86,107,222,251,247,239, 63,106,201,146, 37, +154,147, 39, 79,106, 26, 54,108,104,215,116,238,151,195,178, 44,218,180,105,235,149,230,128, 1, 3, 70,125,245,213, 87,154,248, +248,120, 77,211,166, 77, 75, 77, 26,236,105,188,153,116,222,229,154,247,165,193, 98,131,131,131,151,183,105,211,166,255,250,245, +235, 57, 0,136,143,143, 71, 78, 78, 14, 34, 35, 35,161,211,233,160, 82,169, 96, 52, 26, 43,117,151, 21, 18, 18,242,109,219,182, +109, 71,174, 95,191, 94, 6, 0,191, 61,254, 16, 46,203,128,151,175,155, 33,151,203,113,241,226, 69,112, 28,119, 43,119,110,221, +124,124,124,126, 92,187,118,109, 64,108,108, 44,155,157,157,141, 58,117,234,224,198,141, 27,237,246,236,217, 19,247,204, 51,207, + 60, 83, 88, 88, 56, 22,192, 30,111, 5,255,248,227, 15,104,181, 90,251,203, 98,177,220,116, 91, 50,199,113, 81,135, 15, 31, 14, +209,233,116, 16, 69, 17,132,144, 50, 39,176,243,137, 39, 73, 18,186,118,237,106,113,123,240,120, 62,234,240,225,195, 33,106,181, +186,156,150, 40,138, 80, 40, 20, 96, 89,214,118,135, 8, 65, 16,208,169, 83, 39,119,154, 76,195,134, 13, 31,179,153, 43,150,101, +177,122,245,106,132,133,133, 33, 36, 36, 4, 90,173, 22,106,117,229, 61, 48,207,243, 8, 10, 10,194,139, 47,190,136,199, 30,123, + 12, 43, 86,172,128, 76, 38, 43,179, 60, 48, 48, 16,127,254,249, 39,124,125,125, 17, 29, 29, 93,102,249,189, 10, 3, 4,110,217, +243,111, 68,118,196,224, 86,124,239, 46,117, 22,217, 79,180,146,149,136, 84, 26,181,144, 68, 49,119,231,129,107,211,189,184, 1, +168,177,127,255,126, 40,149, 74,239, 46,238,162,136,118,237,218,213,240,176,218,160,230,205,155,255,246,226,139, 47,202,235,215, +175,207,200,100, 50,240, 60, 15,158,231,109,229, 49,154, 16, 18, 45, 73, 82,143,204,204, 76,242,197, 23, 95,124,180,107,215,174, + 97, 0, 54,185,204,187, 96,104, 89,108,146, 6, 17,130,176,208, 62,164,214,245,237, 12,138, 77,210, 32, 63,222,112, 17,192,221, +108,176,124,213,106,245, 59,191,252,242,139, 28, 0,250,244,233,243,142,193, 96,248, 31,128,130,170,250, 3, 63, 63, 63,248,249, +249,161,121,243,230, 24, 62,124,184,127,235,214,173, 95,171,109, 50,141, 79, 2,204, 21,158, 67, 44, 27,181,249,175,243, 33,182, +239,163, 30,138,149,247,235, 94, 47,147,148,134,204,156, 99,104,146, 72, 82,118,236,191,226,201,128,177, 97, 97, 97,159, 12, 24, + 48,224,209, 37, 75,150,248, 0,192,183,223,126,139, 65,131, 6, 33, 44, 44, 12,106,181, 26,114,185, 28,114,185, 28, 50,153,204, +254,238,225, 34,203,133,133,133,125,244,192, 3, 15,140, 88,180,104,145, 15, 0,252,240,195, 15, 24, 60,120, 48,130,130,130,224, +235,235, 11,165, 82, 9,133, 66, 81,170,197,192,139,190,192,229,210,249, 92,191, 94,168,171, 86,226,193, 15, 62,134,191,191, 63, +118, 78,126, 1, 50,150,197, 11,127,238,134,175,175,175, 55,245, 71, 57,205,248,248,120,100,102,102,186,204, 59,199,113,158,206, + 55,123,222, 7, 13, 26, 52,194,166,249,195, 15, 63,160,127,255,254, 8, 10, 10,130, 78,167,179,231,253, 95,109,214, 43,205,254, +253,251,143,248,234,171,175,236,154,189,123,247, 70, 96, 96, 32,124,124,124, 32,151,203,237,251,179, 50,199,232, 46,215,188, 47, + 13, 22, 83, 26,189,122,116,227,198,141,246, 35, 47,147,201,160, 84, 42,237,133,195,241,194,237,237,181, 38, 56, 56,248,201,245, +235,215,219, 55, 50, 59,157, 84, 42,149,170,178,154,101,110,240,122,246,236,185,106,227,198,141, 42,185, 92, 14,131,193,128,211, +167, 79,195,207,207, 15, 10,133, 2, 67,135, 14,229, 58,117,234, 20,212,179,103,207, 95,207,157, 59, 55, 10,192,118, 47,154, 56, +160,211,233,202, 24,172, 91,121,120, 35,195, 48, 80,171,213, 88,183,110, 29,120,158, 47, 83,200, 92, 85, 98,161,161,161, 30,163, + 18, 0,160, 84, 42,113,224,192, 1,176, 44, 11,153, 76,102,127,253,241,199, 31,152, 60,121, 50, 50, 51, 51,237,203,124,124, 60, +182,110, 50, 26,141, 70,109, 51, 87,182, 99,175, 86,171, 33,147,201, 24,158,231, 25,142,227,108, 85, 58, 3, 47,155, 50,120,158, + 71, 82, 82, 18, 30,127,252,113, 44, 91,182, 12,239,189,247, 30, 70,141, 26, 85,102,121, 65, 65, 1, 2, 2, 2,224,239,239, 15, +165, 82,121, 43,101,225,174, 65,114,218, 59,179,222,251, 72, 35, 1,144,136, 4, 72, 0, 1,177,127, 78, 79,191,136, 79, 63, 89, +192,121,171,173, 84, 42,177,127,255,126, 56, 54,187,178, 44, 11,185, 92, 94,230, 55,158,231, 17, 30, 30,238,141,222,204,181,107, +215, 42, 86,175, 94,141,223,127,255, 29,162, 40, 66, 38,147, 65,165, 82,193,215,215, 23,129,129,129,246, 87,116,116, 52,243,221, +119,223,201, 91,182,108, 57,179,160,160,192,181,193, 98,137,159, 84,106,174, 0, 32,164, 15,169,117,105, 61, 23,224,239, 83, 18, +197,185,139,235,195,105, 11, 23, 46, 12,138,139,139, 3, 0, 44, 92,184, 48,232,233,167,159,158, 6,224,109,148, 52, 25,222,220, + 13, 22,176,138, 97,152,145,165, 17, 91, 85,223,190,125, 21, 95,126,249, 37, 26, 55,110,140,137, 19, 39, 6,126,250,209, 71, 15, + 2, 88, 83,113, 89, 42, 91,152,230,124,188,192,223,241,134,234,223, 23,112, 35, 43, 9,239,188,243,190, 23,254, 31,108, 68, 68, +196, 51, 95,127,253,181,189, 59, 68, 96, 96,160,189, 14,114,174,163,108,239,110,234, 37,166, 52, 42,244,244,146, 37, 75,236,154, +193,193,193,101, 52,100, 50, 25,146, 18,254,193,230,111,231, 66, 27, 20,142,209,147,231, 84, 58,157,145, 74, 5,162,212, 10,180, +108,217, 18,106,181, 26,241,178,146, 75,153,205, 92,121,147, 78,103, 77,142,227,236,105, 36,132,192,104, 52,162,176,176, 16,162, + 40,194,108, 54, 35, 46, 46,206,171,188,127,245,213, 87,118,205, 26, 53,106,216,235,119,199,122,222,246,178,221,192,120, 72,231, +211,223,124,243,141, 93, 51, 40, 40,200,174,197,243, 60,228,114, 57,126,248,225, 7,120, 25,209,246, 90,179,178,199,221, 89,243, +202,149, 43,152, 61,123, 54,228,114,185,173, 11,144, 61, 98, 25, 25, 25,137, 47,190,248,194,171,107,220,253, 22,193, 98,178,179, +179,165,179,103,207,178, 71,143, 30,133, 92, 46, 71,112,112, 48,218,181,107, 7, 0,176, 88, 44,224,121, 30,106,181,154,105,208, +160, 65,166,109,167,217,222,157,218,210,109, 67, 45,217, 27, 55,110, 72, 91,183,110,101, 87, 12,239, 15, 51, 1, 90,191, 51, 7, +253, 7, 15,198,150, 72, 5, 56, 0,237,206,102, 67,161, 80,240, 97, 97, 97, 86,219, 65,176,233, 58,245,205,114, 30,190,233,163, +213,106,191,219,176, 97,131,138,101, 89, 20, 22, 22, 66,146, 36,116,238,220, 25, 12,195,224,228,201,147,120,251,237,183,241,219, +111,191, 97,237,218,181,234,216,216,216,239, 12, 6, 67, 83, 0,133, 14, 26,167, 92, 21, 78, 95, 95, 95,168,213,106,187,193, 82, +171,213, 76,163, 70,141, 50, 43,232, 71,144,122,230,204,153,184,138, 52,109,145,132, 97,195,134,217,251,156,217, 46,128,142, 39, +155,237,243,233,211,167, 93, 29,175,114,154,146, 36,161, 75,151, 46, 0, 0,173, 86, 11,157, 78,135,191,254,250,203,190, 60, 54, + 54, 22,102,179, 25, 53,106,212, 64, 66, 66,130, 87,154, 25, 25, 25, 88,190,124, 57,100, 50, 25,130,130,130, 32,147,201,228,219, +183,111,127, 79,171,213,250,113, 28, 7,127,127,127, 12, 30, 60,120,137, 67, 26,196, 77,155, 54,241, 21,105,114, 28, 7,149, 74, +133, 31,126,248, 1,179,103,207,198,155,111,190,233, 28,221,131,209,104, 68, 80, 80, 16, 2, 2, 2, 16, 16, 16,224, 85, 58,171, +128,106,213, 36, 32, 56,125,108, 11,206, 28,223, 14,145,136,144, 68, 9, 68, 34, 16, 37, 9,199,182, 29,105,152,126, 57, 45,146, +128,148,116,169, 5, 32, 22, 21, 11,221,131, 20,141, 1,172,219,157, 99,158,239, 41,157, 28,199,193, 98,177, 96,203,150, 45,184, +120,241, 34,182,110,221, 10,131,193,128, 26, 53,106,192,223,223, 31,157, 58,117,194,211, 79, 63, 93,145,193, 58,229, 84, 54,127, + 72, 77, 77,109,221,169, 83, 39, 38, 63, 63, 31,217,217,217, 40, 44, 44,132,197, 98,129,197, 98,177, 31, 67,173, 86,139,176,176, + 48, 24, 12, 6, 98, 50,153,126,168, 48,239, 18,147,207, 50,200,184,180,142,175, 81,111,168,160,206,252, 43,200,100, 48,203,133, +197,235, 52, 79,255, 49,165, 94, 63,150,176, 4, 40,201, 58,195,128, 72,162,152,189,125,239,229, 23,239,240,113, 31, 63,105,210, +164,166,142,205,211,163, 71,143,198,233,211,167,155,206,155, 55,111, 60,128,133,149,213, 84, 3,145, 40,113,102,127,162,228,133, +153, 6, 3,243,222,186,117,195, 0, 60,177,118,237, 90,140, 26, 53, 10,159,124,244, 81,115, 23, 6,235,148,227, 13, 95,210,249, + 61,184,114,126, 63, 36, 73, 42,125,145, 10, 63, 19,239,210,201, 20, 21, 21, 25, 15, 31, 62,172,251,254,251,239, 17, 24, 24,136, +218,181,107,195,199,199, 7, 74,165,178,156, 25,176,189, 60,229, 93,175,215, 27,207,158, 61,171, 91,181,106, 21,130,130,130, 16, + 29, 29, 13,173, 86, 11,149, 74,101,191, 65, 63,188,117, 45,198,143, 29,138,156,107,137, 88,240,191,199,188, 78,231,115,125,123, + 33, 74,173,192,208, 89,115,208,180,105, 83,172,121,108, 8, 88, 6,152,176,243, 16,100, 50, 25,190, 31,212, 13, 74,165, 2, 19, +118,254,237,181,230,223,127,255, 13, 66, 8,162,163,163, 97, 48, 24,236, 81, 54,185, 92,142,237,219,183, 99,200,144, 33, 88,177, + 98, 5, 58,116,232,224, 49,239, 69, 69, 69,198,147, 39, 79,234,126,250,233, 39, 4, 6, 6,162,102,205,154,208,104, 52,118, 61, + 71, 19, 83,183,110, 93,228,229,229,161, 94,189,122,110, 53,139,139,139,141,241,241,241,186, 21, 43, 86, 32, 48, 48, 16, 81, 81, + 81,208,104, 52,101, 34, 97, 51,103,206, 44, 35,208,178,101,203, 91,214,172,236,113,119,214, 28, 62,124, 56,234,213,171, 7, 95, + 95, 95,251, 62,112, 54,218,149,129, 16,210, 22,101,187, 57,152, 1, 40, 28,222,179, 24,134,249,219,197,122,182,223,101, 0, 90, +149, 46, 19, 75, 61,128,191, 11,189,138,116,178, 75,131, 10,193, 78,235,151,249, 31, 87, 6,203,118, 62,246, 0,176, 15, 0,154, + 52,105,130,156,156, 28, 40,149, 74,180,107,215, 14, 89, 89, 89,246, 48,159, 36, 73,120,228,145, 71,184, 41, 83,166,132,176, 44, + 11,171,213, 10, 66, 8, 56,142,131,237,206,207,217, 7,176, 44,139, 78,157, 58,225, 76,233, 62,237, 63,120, 48,162,162,162,236, +157, 56,148, 74, 37, 70,141, 26,197, 76,158, 60,153,183, 69, 47, 8, 33, 48, 24, 12,104,217,178,165,218, 77,116,228,127,191,254, +250,171,159, 66,161,176,155, 43, 91, 90,206,158, 61,139, 79, 63,253, 20, 79, 60,241, 4,174, 93,187,134,240,240,112,188,246,218, +107,186,185,115,231,254,207, 98,177,204,242,116, 64,117, 58, 93, 25,131, 53,118,236, 88,190, 83,167, 78, 33, 26,141,198, 30,221, + 42, 53,149,232,212,169, 19,227, 41,130, 37, 73, 18,254,252,243, 79,151,119,135,206,119, 12, 12,195,128, 16,226,149,230,225,195, +135,237,230,204, 22,189,176, 45, 63,125,250,180, 61,130, 85,106, 4,221,105, 18,155, 81,179,133,201,101, 50,153,252,240,225,195, + 31,132,135,135,235,198,142, 29,139,194,194, 66, 68, 68, 68,160, 95,191,126,144, 36, 9, 22,139, 5, 47,191,252,178,219,200,139, + 76, 38,195,145, 35, 71, 48,119,238, 92, 76,153, 50, 5, 75,150, 44, 65,159, 62,125,202, 68,176,108,119,186,190,190,119,124,140, + 67, 21,134,176, 0,139, 96,133, 94,111, 0, 33, 34, 68,137, 64, 18, 37,156,220,117,172,225,229,227, 23, 99, 54,174, 92, 46, 3, + 0,227,238,181,142, 91,133, 15, 95,244,115,163,238, 1,178,195,187,115,173,135, 61, 52, 59,227,133, 23, 94,192,244,233,211,241, +232,163,143, 98,219,182,109,120,235,173,183,240,204, 51,207,216,205,187,173, 44,120,209,236,248,245,232,209,163,159, 95,179,102, + 77,227, 87, 95,125,149,181,157,147, 26,141, 6, 12,195,192,104, 52,218, 95,103,207,158,149,198,141, 27,119,206,108, 54,127, 93, + 97, 65,226,213, 39,180, 74,253,166,244, 28,182, 65,198,206, 64,150,225,125, 45,193,209, 61,242, 31,104,216,135,244,121,172,118, + 0,145, 74, 34,124, 4, 4, 38, 99, 49,222,156,242, 58,119,135,143,214,160,190,125,251,246,251,224,131, 15,202, 45,248,224,131, + 15,144,144,144,208,111,219,182,109, 73, 21, 53,137, 86, 96,174,162,252,194,194,230, 1,128, 58, 35, 99,146, 1, 72, 1,128,247, +128,254, 34, 48,100,219,182,109, 0,128, 90,181,106, 65, 2,154, 49,192,143, 28,176, 10,192,102, 87, 17,117,139, 85,128,193, 96, +132, 68, 74,202,145, 68, 36, 72, 98, 73, 20,212,217,100,121,209,238, 70, 0, 72, 28,199,161,121,243,230,232,223,191, 63, 20, 10, + 5,116, 58,157,189,158,119,174,147,188,184, 40, 18, 0, 18,195, 48,168, 91,183, 46,250,245,235, 7,185, 92, 14,173, 86, 11, 95, + 95, 95,187,193,226, 56, 14,205, 59,245,194,170, 21, 31, 99, 76,255, 24,140,237, 22,138, 95, 79,102,123,149,206,104,141, 2,209, +106, 37,154, 52,105, 2, 31, 31, 31, 48, 12,192,113,172, 61,157, 90,141, 10,114,123,243,163,119,121,207,200,200, 64, 82, 82, 18, +146,146,146,192,178, 44, 58,119,238, 12,133, 66, 1,158,231,113,254,252,121,204,154, 53, 11,102,179,217, 43, 77,150,101,209,160, + 65, 3,244,234,213, 11, 10,133, 2,182,107,133, 99,211,160, 76, 38, 67, 97, 97, 33,234,215,175,143,117,235,214,161,107,215,174, + 30, 53,155, 54,109,138, 30, 61,122, 64, 46,151, 67,173, 86,219,187,234, 40, 28,242, 90, 84, 84,100,223, 15,173, 91,183,174,148, +230,214, 35,215,176,116,235, 95, 48,153, 37, 20,232,173,101, 54, 8,175,225,139,125, 63, 77,241, 42,239, 54,205,175,191,254, 26, +121,121,121,246,122,200, 54,160,205, 22, 60,137,138,138,194, 87, 95,125, 85,225, 53,168,212,139,236,118, 90, 22,204, 48,204, 70, +135,115, 98, 48,195, 48, 27, 29,223, 43, 90,175,244, 99,183,105,211,166,181,153, 59,119,238,236,142, 29, 59,174, 58,112,224,192, +202,138,244, 42,210,153, 54,109, 90,204,220,185,115,103, 59,174,239,226,127, 92, 70,176,108, 77, 62,172, 45, 50, 19, 25, 25,105, +111,119,214,233,116,144,203,229,246,149, 5, 65,192,119,223,125,135,144,144, 16,132,134,134,218,223, 43, 58, 0, 44,203,130, 16, +130,137, 89, 37, 93,128,254,140,144, 35, 9,192, 3, 89,196,174, 39,138, 34,214,172, 89, 3, 31, 31, 31,251,137,174,211,233,220, + 54, 23, 41, 20,138, 30,109,219,182,101, 77, 38,147, 61, 76,206,178, 44,206,158, 61,139,185,115,231, 98,212,168, 81,104,212,168, + 17, 68, 81, 68,113,113, 49,122,246,236, 41, 91,176, 96, 65, 15,111, 13,150, 70,163,177,247, 59, 50,153, 76,216,177, 99, 7,252, +253,253, 17, 16, 16,128,160,160, 32, 4, 6, 6, 66,169, 84,130, 97, 24,207, 53, 26, 33, 24, 54,108, 88,153,200,149, 99,212,202, +177, 66,179, 53,251,121,163,217,161, 67, 7,123,244, 74,167,211, 97,243,230,127,235,231,118,237,218,129, 16,130,224,224, 96, 28, + 60,120,208,155, 74, 23,146, 36, 33, 36, 36, 4, 50,153,140,217,190,125,251,123,165,230,138,145,201,100,248,231,159,127,112,250, +244,105, 4, 7, 7,219,239, 74, 61, 81, 92, 92,156,190, 96,193, 2,241,203, 47,191, 4, 0,244,238,221, 27,249,249,249,215, 29, +150,231,140, 25, 51,166, 76,126,115,115,115,115,238, 3,127, 5,193, 34, 64,111, 48,162,168,176, 24, 86, 73,132, 85, 16,113, 61, + 53,203,127,202,228, 73,178, 79, 94,126, 26, 0, 48,121,254, 66, 20,126,245,111, 5,246,251,228,145, 33,195, 62, 93, 61, 21,192, + 80,119,250,122,189, 30, 70,163, 17,181,106,213,194,223,127,255,141,194,194, 66,244,233,211,167, 76,244,215, 67, 19,132, 35,230, +212,212,212,206,131, 7, 15,254,251,179,207, 62,171,215,172, 89, 51,166,184,184, 24,197,197,197,208,235,245,176,125, 62,117,234, + 20, 89,185,114,229,101,189, 94,223, 9,110,250, 12, 41,226, 10, 47,154,227,125,214,236, 61, 33, 31,252,240,240, 33,126, 41,169, +201, 66,142, 65, 85,148,111, 56,103, 18, 73, 2,136, 72, 32, 18, 2, 34, 74, 16,137,116,167,199,111, 71, 53,108,216,112,220,138, + 21, 43, 92, 26, 82,142,227,176, 98,197, 10,116,233,210,101,220,249,243,231,207,194, 77,231,126, 27,181, 1,133, 32,147, 77,249, +249,231,159,229, 0,208,171, 87,175, 41,181,173,214,201, 73,128,185, 89,139, 22, 35, 14, 28, 56,224,167,209,148,140, 19,242,243, +243, 3, 33,132,211,235,245,126,157, 58,117, 26,113,242,228,201,242, 6, 75, 34,176, 90, 5, 24,140, 38,228,229, 23,193,106,182, + 66,144, 4,136,130, 4, 65, 42,137,142, 10,162, 8, 73, 16, 33, 72, 34, 56,158,243,233,222,190,102, 81, 73, 44,139,201,219,115, + 56,185,166,171, 34, 90, 50,194, 11, 8, 11, 11,179, 55, 9, 59,246,149,241, 34,138, 81, 46, 80, 95, 82, 23, 18,123,221,120, 98, +215, 70, 92, 79,216, 7, 57, 67, 32,137, 86, 72,130, 5,162,213, 2, 14, 18, 18, 46,165,162, 89,132,199, 58,196,158,206, 1,239, +188,143,118,237,218,225,215,145, 67,193, 48,192,132, 29, 7, 33,151,203,177,242,161, 62, 80,168, 20,120,118,235, 33,111,211, 89, + 38,239,241,241,241,152, 56,113, 34, 62,252,240, 67,168,213,106,251,205, 73, 98, 98, 34, 86,175, 94,141,190,125,251,122,157,119, +134, 41,105,106,181,237,195,105,211,166, 33, 45, 45, 13,243,230,205, 67,155, 54,109, 32,147,201,144,151,151,135, 78,157, 58, 33, + 51, 51,211, 43, 77, 66, 36, 4, 6, 6,218,187,235, 56,247, 17,179,221,200, 86,230, 24, 57,106, 62,245, 80, 56,214,239, 95, 9, + 6, 12, 14,253, 52,169,204,245,104,241,234,189,149,214,156, 62,125,122,153,116, 86, 50,122,101,243, 34, 76, 5,215,188,193, 94, + 70,188,108,235,217,118,178,114,238,220,185,179,157,183,247,164,231,184,220,105,123,179,147, 41,203,244,166,137,144,176, 44, 11, + 73,146,160,211,233,160, 80,148, 68,192,156, 47,164, 90,173,182,140, 35,247,212,158,204,113, 28, 8, 33,246, 29,203,185, 88,126, +240,224,193,114, 38,224,155,111,190,113,219, 78, 43, 8, 66, 83, 31, 31, 31, 20, 22, 22,218,251, 72, 41, 20, 10, 76,157, 58, 21, + 99,198,140,177,155, 43,133, 66,129,101,203,150, 33, 46, 46, 14,102,179,185,169,187, 29, 42,151,203,245, 45, 90,180, 96,109, 81, + 32,181, 90,205,140, 26, 53,138,179, 88, 44, 80,169, 84,101,162, 78,182,190,105,158,204,144, 45,218,180,101,203, 22,175, 34, 88, +222,246, 65, 34,132,224,216,177, 99,101,140, 90,233, 80, 99, 0,192,241,227,199,237, 23, 90,111,219,187, 69, 81,132, 90,173,102, +228,114, 57,163,213,106,253,198,142, 29,107,215,181, 29,115, 91,190,189,233,104,125,242,228,201,158,110,219,107, 78,157,186, 47, +167, 99,144, 36, 9, 22,171, 21, 6,131, 17,133,197,122,204,156, 83,218,162, 54, 19,135, 1, 28,238, 60,126, 34, 94,232,223,183, + 23, 60,143,238,115, 73, 96, 96, 32,126,251,237, 55,200,100, 50,172, 91,183, 14,190,190,190, 24, 50,100, 8,124,125,125, 49,101, +202, 20, 60,246,216, 99,149, 49, 88, 0,144,159,147,147,211,121,210,164, 73,127,127,244,209, 71,181,106,213,170, 5,139,197, 2, +179,217, 12,139,197,130, 75,151, 46, 97,229,202,149,201,122,189,190, 51,128,124, 79, 98,138,184,194,139, 27, 95,173,151,222,101, +248, 67,198,132,140,173,200,204,200,130, 32,166, 64, 16, 69, 8, 86,161,196, 16, 72, 18, 4,139, 0,142, 99,125,123,118,140,222, + 94,210,225,159, 49, 3, 24,120, 27, 15, 21, 57,127,254,124, 78,112,112,176,237, 14,210,215,108, 54, 51,165,117, 9,193,191, 29, +220,139, 1, 88,188, 17, 76, 6,198,127,242,225,135, 53,109,205,247, 31,126,248, 97,205,215, 94,125,117, 60,128,207, 19, 78,158, + 92,254,212, 83, 79, 77,250,229,151, 95,202,108,243,212, 83, 79, 33,225,228,201,229, 21,221,249, 88,173, 86, 24, 12, 38,100,103, +223,192,115, 19,222,113,184,221, 39,246,251,254,146, 78,239, 4, 0, 84, 0,144,157,121, 1, 47, 79,124, 77,233,238,134,170,244, +124,135, 76, 38, 43,215, 9,217,177,126,247,162,254, 32,206, 93, 44,228,114, 57, 46, 30,216,136, 73,227, 71, 0,162, 0, 88,138, + 1,139, 30,196,162, 7, 49, 23,131, 81,168, 65,172, 70,175,116, 69, 81,180,119,219,224, 57, 22, 74,197,191,245,166, 70,163,134, + 66,165,240, 54,157,229,242,126,245,234, 85,188,248,226,139, 48,155,205, 24, 62,124, 56,140, 70, 35, 76, 38, 19,140, 70, 35,234, +214,173, 11,131,193,224,117,222, 37, 73,178, 71, 1, 39, 77,154,132, 54,109,218, 96,214,172, 89,120,227,141, 55, 80,183,110, 93, +140, 31, 63, 30,171, 86,173, 66, 76, 76, 12,244,122,189, 71, 77, 91, 93,162,211,233,192,243,188,189, 14,118, 60, 86, 54,131,229, +237, 49,114,165,201, 48,255,246,187,117, 60,238,175,140,237, 93,105,205,217,179,103, 35, 59, 59,187, 92,228,202, 49,130,181,104, +209,162,155, 58, 89,157,162, 76, 30,215, 99, 24, 38,190,244, 39,195,212,169, 83,223,100, 24,102,227,212,169, 83,223,156, 51,103, +206,105,111,244, 92, 45,103, 24,230,143,210,235,239, 3, 14,191,197,123, 99,176, 96,139, 54,217,194,154,182, 29,103, 91, 6, 0, + 26,141, 6, 27, 55,110,196,154, 53,107,202, 92, 80, 42,194,102,218, 54, 5,151, 20,128, 65,165,145, 43,219,247,129,215, 37, 12, + 30, 60, 24,117,235,214, 45, 19,189, 82,171,213,110,205,134, 36, 73,184,122,245, 42, 78,157, 58,133,142, 29, 59, 34, 63, 63, 31, + 60,128,201, 39, 79,162,217,216,177, 48,149, 26, 63,133, 66,129,113,227,198,121,117, 0,143, 30, 61, 90,166, 19, 80,211,166, 77, + 83, 58,117,234, 20,121,240,224, 65,123, 68, 75,169, 84, 66,165, 82,217, 77,134, 55, 39, 53, 33, 4, 35, 70,140, 40, 99,134,156, + 13,150,237,228,249,243,207, 63,189,106, 34, 36,132,160,123,247,238,246,232,149,143,143, 15,126,255,253,119,251, 58,221,186,117, + 3,195, 48, 8, 9, 9,193,230,205,155, 61,106,218,246,169,237,216,115, 28,135,226,226, 98,196,199,199, 67,161, 80,216,251,103, +168,213,106,123,254, 41, 21, 29,112, 9,102,171, 21,122,131, 17,133,133, 37, 21,233,197, 83,191,150, 89,197, 98,186,249,193,105, +182, 72,104, 65, 65, 1,118,236,216,129,223,126,251, 13,109,218,180, 41,211, 60,232,109, 19,161, 99, 63,130, 27, 55,110,116,121, +227,141, 55, 14,189,247,222,123, 17, 65, 65, 65,176, 88, 44,184,122,245, 42,190,251,238,187, 52,189, 94,223, 5, 64,150,247,251, +128, 64,176, 10, 48,234, 13,200, 47, 44,198,140, 15,150, 85, 88, 69, 0,128,197, 92,136,193, 3,187, 43,110,243,145, 74, 5,240, +140,195,247,229, 0,252, 74, 63, 23, 0, 24, 83, 25, 49, 25,208, 99,248,136, 17,189, 38, 77,154,100,255,109,210,164, 73, 56,116, +232, 80, 47,217,154, 53,167,172,192, 46,110,205,154,230,243,230,205,179,175, 51,111,222, 60,252,182,102,205, 78, 17,216, 85,193, +109,123, 73, 4,203, 96, 68, 81,177, 1,190,254,225, 72,189,178,219, 99, 90,228,156, 9,196, 77,189,108,171, 67, 42,234,119, 83, + 9,115,101, 79,169,109, 93, 91,191,163,230,189, 70,224,179,207,191,129,146, 37, 24,214,171, 25,130,213, 18, 24, 77, 32,228,221, +167,130,241,143, 46,217,106, 70, 43,120, 83,215,237,126,107, 50, 46,105, 85, 24,183,109, 63,100, 50, 25,126, 27, 57, 8,114,133, + 28, 79,252,177,167,100,112,207,211,195, 32, 87, 42,208,111,241,106,111, 46,212,246,188, 95,188,120, 17,251,247,239, 71,147, 38, + 77,112,225,194, 5,123, 31, 91,219,117,203,203, 27, 94,123,222,109,245,120, 70, 70, 6, 6, 15, 30, 12,185, 92,142,101,203,150, + 97,247,238,221,120,227,141, 55,240,212, 83, 79,161,103,207,158, 21,245,139, 45,167,233,120,140, 42,234, 31, 85,217, 99,228,172, +105, 47,191,183,112,220,109,154,182,206,237,174,204,250,173,118,108,119,136, 22,133,186, 88,246,128,115,228,137, 16,210,182,180, +111,148,105,206,156, 57,167,231,204,153, 51,152, 97,152,141,115,230,204, 25, 92, 81, 4,203,149,142,139,229, 30,235, 65,222,201, +133,246,112, 52, 81, 10, 55,109,217, 90,173, 22,207, 60,243, 12,166, 76,153, 98,239,200,232, 14,155,115,117,199,198,141, 27,203, +253,182,110,221, 58, 79, 77,132,103,253,252,252,218,244,234,213, 11,249,249,249,184,118,237, 26,116, 58, 29,154,125,250, 41, 78, +190,240, 2, 90, 45, 89, 2,182, 87, 47,251, 9,127,242,228, 73, 40,149,202,179, 70,163,177, 82, 7, 85,167,211, 33, 32, 32, 0, + 42,149, 10, 62, 62, 62,240,241,241,129, 86,171,181, 27, 45, 79, 77,132,182,194,247,199, 31,127,184,141, 92, 57,134,124,189, 49, + 67,132, 16, 28, 60,120,176, 92, 4,203,246,159,182,101,182, 72,134, 55,154,165, 17, 75,162, 84, 42,193,113, 28, 52, 26,141, 61, +220,175, 82,169,236, 47,111, 35, 88,158, 38, 18,141,142,142, 46, 51, 17,169, 76, 38, 43, 51, 17,233,189,223, 68,104, 66,113, 81, +113,149,235,155,205,102,240, 60,143,223,126,251, 13,237,219,183,183,155, 43,155,177,114, 60,238,149, 36,229,198,141, 27, 61, 22, + 44, 88,112,248,179,207, 62, 11, 40, 42, 42,194,178,101,203,242,139,138,138,122,160,180, 31,145,215,149, 33, 0,171, 69,128,222, +100, 66, 81, 97,201, 62,184,116,250, 87,143,166,236, 94,166,105,139, 22, 99,190,255,254,251,114,191,127,255,253,247,184,112,225, +194, 24,156, 60,185,171, 38,176,100,202,148, 41,245,227,226,226,106, 2,192,148, 41, 83,146,107, 2, 75,220,157,231,182, 38,194, +162, 82,179,110, 44,206,174,178, 72,171,243, 13,223,173, 94, 16, 25,134,177,155,140,190,143, 62,131,180,203,137,104,162,201, 70, +136,191, 22, 82, 97, 26,228,189,103,224,228, 13, 13,230, 47,217, 82,169,116,106, 20,114,168,212,255, 54, 55,169,212, 42, 40, 75, + 91, 21, 24,134,129, 74,163,134, 76,161,168,116,222, 19, 19, 19,161,209,104, 32,138, 98,185,235, 77,101, 71, 52, 19, 66,236,215, +206,207, 62,251, 12,175,191,254, 58,150, 45, 91,134,147, 39, 79,162, 85,171, 86,232,211,167, 15,174, 95,191,142, 19, 39, 78,192, +100, 50,121,157, 78,199,235, 69, 66, 66, 2,182,111,223,142,115,231,206, 33, 57, 57,249,166,143,187,115, 51, 99,105, 11, 78,137, +121,221,254, 15, 30,238, 27,123, 83,154, 51,102,204,192,245,235,215,203, 69,174, 28,187, 31,185,137, 96,217,189,136,155,242, 21, +239,104,130,108,145, 38, 71, 67,228,252, 29, 64,128,237,183,169, 83,167,190,233,237,118,142,223,109, 17, 48,111,154, 22, 29, 13, + 22,227,220, 92,199, 48,140,125,167, 59, 70,166,108,159, 53, 26,141, 61,202, 20, 29, 29,237, 54,122,101, 59,225, 56,142, 67,215, +203,133, 80, 40, 20,246,230,188,129,215,165, 50, 33,242,186,117,235,150,233,131,229,120, 80, 92, 97, 50,153,118,237,218,181,171, +245,144, 33, 67,184,132,132, 4,240, 60, 15, 73,146, 96,234,208, 1,173,150, 44,193,169, 73,147,208,237,202, 21,152,172, 86,168, + 84, 42,252,249,231,159, 22,189, 94,191,171, 50,133,134,101, 89,198,102,176,148, 74, 37,124,124,124,224,235,235,107,143,230, 84, +166, 18,170,232, 14,209,241, 85,153, 19,218,214,161,223,241,194,106, 59,126, 6,131,161,140,225,242, 22,199, 38, 3,155, 41,242, +243,243, 43,211, 44,106,139,226,121, 99,176, 60, 77, 36,170, 84, 42,125,247,236,217, 83,223,215,215, 23,132, 16,100,103,103, 99, +228,200,145,231,239,249, 0, 22, 72, 73, 39,119,131, 17, 69, 6, 99,149,235,255,244,211, 79,184,120,241, 34, 44, 22, 11,230,204, +153, 83,206, 88,221,100, 4,203,198, 69,181, 90, 45, 13, 24, 48, 0, 7, 15, 30,132, 82,169,180,226, 38,230,175, 34,146, 4,139, + 85,128,209, 96, 66, 81,113, 49,254, 11,156, 57,121,114,141, 86,171, 29, 9, 64,151,151,151,199,249,249,249, 65,163,209,192, 96, + 48,228,115,165, 35, 5,147, 0,179,218,106,253,240,209, 71, 31,157, 7, 0,188,213,250,161,187,121,176,236, 6,171,138,247,163, +173,222,170, 40,122,117,179,230,138, 97,152,146,225,249, 44,139,101,115, 94, 71, 19, 77, 22, 98,235,104, 97,188,126, 17, 74,223, + 26, 96,252,107, 99,254,146, 45, 72, 72,186, 81,169,116,142, 90,254, 43,106,214,172,137,141, 79, 12,133, 82,169,196,200, 95,183, +151,116,210, 30,255, 24,228, 42, 37,122, 47,252,233,166,242,174,215,235, 43,140, 84, 85, 34,130,101,215,180, 25,192,216,216, 88, + 52,104,208, 0,187,118,237, 66,108,108, 44, 46, 92,184,128, 11, 23, 46, 32, 41, 41, 9, 39, 79,158, 68,110,110,110,165,143,209, +234,213,171,145,149,149, 5,185, 92,142,130,130, 2, 92,185,114,197, 93,255,103,175,143,187,141,198, 15,204, 0, 0, 68, 4,251, + 85,202, 96, 57,106,126,252,241,199,149,153,230,161,140,140,155,101,217, 78,125,157,108,223,205, 78,102,199,249,187,243,250, 0, +112, 29, 0,231, 97, 59,231,239,217,115,230,204,217,101,139,124,149,234,114, 21,245,191,114,142, 96, 57,154, 0, 67,227,198,141, +213,142,237,167, 44,203,194,199,199,135,121,237,181,215, 56,134, 97,160,211,233,224,231,231,135,134, 13, 27,194, 98,241,220, 45, + 65, 46,151, 27,218,181,107,167,118, 12,189, 50, 12, 3,173, 86,203,189,241,198, 27,204, 55,223,124,227,114,187,245,235,215,187, + 45,220,130, 32,204, 27, 59,118,236,179, 41, 41, 41, 1,161,161,161, 72, 79, 79,135, 92, 46, 47,153, 45,182,103, 79,116,189,124, + 25,150, 82,195,144,152,152,136,165, 75,151, 22, 91, 44,150,121,149,173, 52,116, 58, 29,130,130,130,160, 84, 42,203,140,138,113, + 8,173,122, 21,193,170, 74,115,101,211,116,188,176,218, 62,143, 31, 63,222,254,189, 50,149,164, 92, 46, 39, 15, 60,240,128,253, + 25,132,254,254,254,168, 81,163, 6, 50, 51, 51,255, 29,169, 83, 26,185,243,214, 96,121,154, 72, 84, 38,147,193, 98,177,216,155, + 51, 23, 46, 92,120, 43,198,224,238, 49, 88,130,196,232,116,193,136,136,104,132,224, 16, 35, 36, 73,172, 50,109, 65, 16, 48, 97, +194,132, 50,115, 94,217, 46,196,182, 73,108,109, 35,124, 29,195,255,149,189, 19,191,229,232, 8, 1,172, 66,105, 20, 79,111,190, +231,142, 97,116,116,180,239,213,171, 87, 93,245,139,114, 57,218, 15,248,119, 74, 6, 14,120,255,218,181,107,205,253,252,252,208, +175, 95, 63,108, 88,187,118,253, 59,128, 61,100, 99, 0, 82,212, 25, 25,255, 43,253,156,234, 41,168,103,107, 34, 44,214, 87,181, + 89,103,202, 69,175,110,181, 41,135,101, 75,110,204,126,255,234, 67, 52, 81,103,162, 85, 45, 37,246, 31, 58,129,246, 53, 9,136, + 73,126,211,233,212,233,116, 37,157,241, 53, 26, 40,149,255,246,185, 82,106,212,144, 43,148, 55,157,119,199, 72,213,173, 70,176, + 24,134, 45,179, 31,159,125,246, 89, 76,153, 50, 5,253,250,245,195,133, 11, 23,176,103,207, 30,156, 63,127, 30, 19, 39, 78, 68, + 76, 76, 12,250,247,239, 95,169, 99,244,251,239,191, 35, 63, 63, 31,132, 16,100,101,101,193,104, 52, 98,250,244,233,183,124,220, +109, 92,222, 54, 27, 0,240,235,182, 99, 55,173, 57,109,218, 52,251, 28,140,182,107,190,135,168,149, 55,215,187, 35,238,190, 87, +118,251,219,129, 75,131,117,254,252,121,151, 99,229,155, 52,105,146,217,187,119,239,144,115,231,206, 65,167,211,161, 97,195,134, + 48,153, 76,238,154, 33,154,163,116,174,140, 51,103,206,184,212,172, 91,183,174,165,111,223,190,178,176,176,176, 50,145, 43,219, + 8, 27, 71,103,236,172, 89, 74,161,209,104, 28,215,185,115,231, 31, 55,111,222,172,110,216,176, 33,242,243,243, 1, 0,203,150, + 45,195, 75, 47,189, 4,181, 90,141,115,231,206, 97,232,208,161,122,189, 94, 63, 14,101,231,192,114,165, 89,206,200,200,229,114, +123, 51,153,173,169, 76,225, 62, 20, 93, 78,147, 97, 24, 44, 88,176,192,229, 92, 80,206, 44, 89,178,196,149,155,119,153,206, 79, + 62,249,164,202, 52, 15, 31, 62, 92,230, 25,131,131, 7, 15,254,170,127,255,254, 72, 78, 78, 46,211, 44,232,193, 96,149,209,244, + 52,145, 40,199,113, 8, 13, 13,197,123,239,189,135, 26, 53,106, 32, 44, 44,204,149,193,114,123,140,110,146,106,213, 36, 44,137, +255,252,179, 25, 93,190,250,246, 87,153, 82,193,226,224,158, 95, 81,144,155, 81, 54, 2,107,249,119, 72,180, 34,182, 55,204,199, +118,120,149, 78,147,201,132,143, 62,250, 8, 51,102,204,192,140, 25, 51,220, 38,168,130,225,208, 30,243,238,104,176,188, 52, 91, +229, 52, 37, 73,100, 84,154, 0,104,180, 17,136,137, 9,128, 68, 60,207,213, 41,221,249,227,174, 79, 78, 78,246,171, 89,179, 38, +206,159, 63,207,224,223,254, 88,255, 30, 43,133, 98,164,147,193, 42,127,190, 3, 39, 87,174, 92,217,188, 69,139, 22, 88,184,112, + 33, 0, 60,241,209,214,173,143,205, 48,148,132, 51, 57, 96, 85,169, 25,243,152, 78,145,136,140, 74,227, 15,181,174,116, 63, 74, +222,207,121, 74,220,228,221,118,241,187,149, 27, 61, 87,154,182,237, 47, 29,252, 3, 15, 12,140,194,129,195, 39,177, 35, 69,139, +154,202, 52,132,235,179, 32,101,157,197,255, 70,196, 98,254,154,146,139,248,201,163,158, 53, 25,134,193,190,215,198, 65,167, 82, +226,225,149,155, 32,147,201,176,107,210,147,144,203,229,232,254, 89, 73,147,236,169,143,166,129, 87, 42,208,100,226, 12,175,210, +233,220, 82, 99,235,115,229,104,174, 60, 68,176, 42,204,123, 81, 81, 17,114,115,115,241,227,143, 63,226,233,167,159,198,245,235, +215,113,229,202, 21,156, 59,119, 14,171, 86,173, 42,115,141, 67, 37,142,209,212,169, 83, 49,121,242,100,176, 44,139,230,205,155, + 99,198,140, 25,232,216,177, 99,165,143,145,243,113,119,198,139,232, 85,133,154,159,127,254,121,165, 7,108,221,143, 84,170,131, +134, 45,146, 85,163, 70, 13,104,181, 90, 0, 40,115,129,245,212, 76, 88,145,166, 32, 8, 80,171,213, 80,171,213,101,166, 69, 24, + 50,100,136,199, 8, 86, 41,127,158, 59,119,110,116,179,102,205,190,155, 49, 99,134,182, 71,143, 30,178,136,136, 8,196,197,197, +225,220,185,115,248,227,143, 63, 44,139, 22, 45,210,235,245,250,167, 1,108,187, 25,243,108,235,248,237, 56,163,125,101, 16, 69, + 49,249,202,149, 43,225,159,124,242, 9,199, 48, 12,230,205,155, 87,102,130, 86,231, 60, 30, 58,116, 72, 32,132, 92,244, 16,197, + 72,190,114,229, 74,248,167,159,126, 90, 70,211,246,114, 54, 41,222,104, 86,132, 45,207,206,251,192,155,147,199,211, 68,162, 60, +207, 35, 49, 49, 17,239,190,251, 46, 24,134, 41, 51,112,226, 94,230,192,223,233,223,116,140, 67,192,200, 17,189, 90, 48, 96, 97, +118, 17,233,229,114,242,236,230,106,216,167,171,241,251,228,199,188, 57, 22, 87,118,239,222, 93,107,246,236,217, 28,199,113,248, +248,227,143,203,148, 37,231,227,190,115,231, 78, 81,173, 86, 95,187,217,124, 88, 44, 22,111, 70, 81, 85,116,130,239, 95,240,241, +187,253,190,250,126,131,140, 97,204, 56,184,251, 87,228,231,185, 30,154,174,144,241, 88,190,114,189,192,115,108,242, 29, 62,116, + 95,245,233,211,103,250,246,237,219,249,154, 53,107,222,180, 72, 20,176, 97,193,130, 5, 3,199,142, 29, 27,216,180,105, 83,219, +224, 19, 69,233, 11,165, 51,187,255,233,165, 73, 90, 55,255,147,119,159,248,250,251, 13, 10,150,177,224,224,158, 95,145,239,100, +214,203, 71,163,101, 88,177,114,157,133,231,185, 68, 79,117,240,205,140, 96,246,134,214, 15, 60,141, 47, 55, 45, 69, 72,139,129, +120,228,193, 46,216,183,240, 9, 60,218,212, 0,203,207,163,208,252,145,229, 88, 54,173, 36,122,211,234,151,105, 94, 93, 43,124, +117,255, 78, 88,201,178, 44,148, 42, 53,100,138,127,163, 47, 10,141, 6, 92, 37, 34,182,182,188,187,139, 84, 85,118,127,112, 28, +135,186,117,235,162, 94,189,122,232,220,185, 51, 90,183,110,141,158, 61,123,226,196,137, 19, 56,113,226, 4, 38, 78,156,232,206, + 92,121, 60, 70,253,250,245,195,128, 1, 3,110,249,216, 56, 31,247,170,192,155,178,244,194, 11, 47, 0,192, 45, 69,179,238,107, +131, 21, 28, 28, 12,133, 66,113, 83,134,202,149,166,217,108,182, 27, 43,181, 90,109,143, 88,173, 95,191,190, 50, 5,124,155,193, + 96,136,121,251,237,183, 95, 81,171,213, 61, 13, 6, 67, 19, 0,208,104, 52,103,245,122,253, 95, 22,139,229,115, 0,121,183,146, + 86, 71,131,225, 34,202,229,246, 22, 63, 43, 43,171,255,152, 49, 99,182,177, 44, 91,199,221,131,153, 29,204,106, 82,102,102,230, + 64, 79,154,143, 63,254,184, 75, 77, 87,186,222,104, 86, 96, 14,203,152, 42,199, 17,134, 94, 21, 50, 15, 19,137,202,100, 50,232, +116, 58,172, 93,187, 22, 65, 65, 65,247,213, 9,118, 48, 62,253, 35,119,203,187, 7, 41,118, 3, 8, 30,246,233,234,107,187,115, + 44,209,195, 62, 93,125,245,247,201,143,213,242, 96,120, 58,205,157, 59,119,159,213,106,141,246,178,220, 94, 53,153, 76, 93, 42, +155,118, 66, 8, 18, 19, 19,165,103,159,125, 54, 59, 43, 43,235,145,155,201,255,158,131, 87, 63,235,210, 46,162,198,136,161, 93, +218,130, 97, 96, 54, 87,208,169,151, 1, 33,132, 16,158, 99,147,119, 31, 74,126,246, 14, 63, 66,227,248,213,171, 87,103,213,175, + 95,255,121, 0, 21, 93, 9, 87,121, 18, 73, 2,204, 10,147,233,147, 54,109,218,188,241,230,155,111,250, 63,248,224,131,168, 89, +179, 38,252,252,252, 42,157,160,253, 71, 82,159,239, 16, 39, 70, 61, 60,164, 75,127,150, 97,136,201,236,190,115, 52, 99,219,159, + 60,151,184,231,112, 74, 75,119,209,121,155, 41,175,142,104, 67,239, 17, 79,161,247,136,167,236,229,105,199,154, 30,136, 79,221, +138, 56, 54, 21,166,175,187,128,241,181, 21,117,207,211,220,176, 44,139, 7,191, 95, 11,185, 92,110, 79,103,167,185,101,199, 5, + 52,124,209,251,103,169, 59,230,221, 49,130,229,162, 46,174, 84, 31, 44,142,227,144,157,157,141,115,231,206, 33, 51, 51, 19,122, +189, 30, 9, 9, 9, 48,155,205,200,205,205, 69,243,230,205, 43,119,119, 95, 13,199,232, 78,106,254, 23,140,213, 77, 25, 44, 66, + 72, 74,251,246,237, 61, 93,140, 43, 53,202,136,231,121, 99,151, 46, 93, 24, 87,163, 13,108,159,213,106,181,183,183,207,121, 22, +139,101,134,197, 98,153,129,210,166, 48,139,197,114,203, 29, 73, 68, 81, 76,107,215,174, 29,231,174,210,151, 36,201,237,140,113, +217,217,217,197,217,217,217, 85,250,232,240,234,208,116,113,210,136,207, 63,255,188, 91, 39,165,213,106,221,118, 46,242, 52,145, +168, 94,175, 79, 31, 51,102,140,232,216,212,236, 56, 17,233,125, 13, 67,174, 14, 26,249, 76,244,238, 28, 75, 52, 0,216, 76, 22, + 8,185, 90,209, 38, 71,143, 30,205, 4, 80,191,186,147,118,249,242,101,115,251,246,237, 87, 20, 22, 22,190, 0, 64,127,179, 58, +251,142,164, 77,187, 7,143,204,113, 0,227,111, 85,196, 12, 36,132, 26,141, 19,102,188,243,206,195,239,190,243, 78, 67, 9, 8, + 66,233, 28, 85,156, 23, 38,205,145, 67,241, 25, 85, 62, 55,152, 40,138, 41,157, 58,117,170,244, 54,158,150,187,153, 73, 28, 63, +161, 38,112,180,242,154,213,145, 78,155,102,139, 22, 45,208,170, 85, 43,251,187, 13,199,223, 91,183,110,237,149,102,108,108, 44, +154, 54,109, 90,225, 12,237,206,125,174,238,116,222,109,216,110,125, 91,183,222, 82,101,154,183,154, 78,138,123,154, 83, 77,170, + 73, 53,239, 89, 77,142,238, 79,170, 73, 53,169,230,109,212,188,111, 32,132,128,165,187,129, 66,161, 84,116,131, 73,119, 1,133, + 66,161,220, 28,140, 27, 23, 90,153,145, 59, 55,227,100, 79, 81, 77,170, 73, 53,169, 38,213,164,154, 84,243, 63,167,233, 73,187, +170, 71, 14,223,118,200,109,152, 48,153,134, 79,169, 38,213,164,154, 84,147,106, 82, 77,170,249,159,130, 54, 17, 82, 40, 20, 10, +133, 66,161, 84, 3, 60,221, 5, 20,202,127,155, 25,184,181, 27,173, 25,229,230, 6,253,111,167,147, 66,161, 80, 0,208, 8, 22, +133, 66,161, 80, 40, 20, 10, 53, 88, 20, 10,133, 66,161, 80, 40,212, 96, 81, 40, 20, 10,133, 66,161,252,183, 96,232, 46,160, 80, +254,219,204,160,125,176, 40, 20, 10,165, 74,161,163, 8, 41, 20, 10,133, 66,161, 80,170, 1,219, 40, 66,199, 25,177,104, 84,139, + 66,161, 80, 40, 20,202,237,230,190,242, 34, 60, 53, 86, 20, 10,133, 66,161, 80,238, 18,238, 27, 47,194, 86,224, 28, 41, 20, 10, +133, 66,161, 80,110, 55,247,141, 23, 97,239, 71,215, 72,161, 80, 40, 20, 10,229,158,228,190,141, 96,209, 40, 22,133, 66,161, 80, + 40,148, 59,197,125,227, 69,248,251,205, 49, 82, 40, 20, 10,133, 66,185, 39,185,175,188, 72,117, 79,211, 64,159, 52, 78, 53,169, + 38,213,164,154, 84,147,106, 82,205,255, 28,116, 30, 44, 10,133, 66,161, 80, 40, 20,106,176, 40, 20, 10,133, 66,161, 80,168,193, +162, 80, 40, 20, 10,133, 66,249, 79,193,211, 93, 64,161,252,183,153,113,143, 60,163,111, 6,125,150, 32,133, 66,185,135,160, 17, + 44, 10,133, 66,161, 80, 40,148, 42,134, 65,197, 35, 1, 78, 85, 66,231,102, 70, 19,156,162,154, 84,147,106, 82, 77,170, 73, 53, +169,230,127, 78,211,147,246, 41,220,227, 16, 82,253, 83,121,209, 33,172, 84,147,106, 82, 77,170, 73, 53,169, 38,213,252, 79, 65, + 8,161, 77,132,148,114,240,112,223, 55,207,211,242,219,165, 73,161, 80, 40, 20,202, 93,125, 49,165, 80,108,116, 4, 48,184,244, +243, 70, 0, 7, 43,185,252,118,105,222, 17, 98, 99, 99,213, 42,149,170,223,206,157, 59,229,137,137,137, 56,116,232, 16,249,233, +167,159,172, 70,163,113,235,177, 99,199, 12,180,248,220, 31,180,110,221,186, 63,195, 48, 83, 74,239, 66, 63,252,231,159,127,182, +220,130, 28, 83,191,126,253,137, 10,133, 98,144, 76, 38,139, 16, 69,145, 49,153, 76,105, 6,131, 97, 91,106,106,234,167,184,185, +142,251,109,107,212,168, 49, 62, 38, 38,166,225,229,203,151,147,175, 93,187,182, 28,192, 22, 0,253,107,213,170, 53,166,110,221, +186, 53, 79,159, 62,125, 62, 59, 59,123, 9,128,191,239, 96, 58, 41, 20,106,176,188,128, 13, 8, 8,232,171, 86,171, 95, 41, 42, + 42,138,245,245,245, 61, 45, 8,194,130,244,244,244,141,244,196,187,175,202,194, 96, 66,136, 12, 0, 56,142, 27,218,174, 93,187, +104,134, 97, 36,134, 97, 8, 33,132, 57,124,248,112,107, 81, 20, 89, 0, 96, 24,102,112,105,229, 45,220,172,166, 32, 8,204,209, +163, 71, 43,171, 89, 45, 52,107,214,108, 54, 33, 36,194,237, 14,226,249, 54, 59,118,236,104,188,110,221, 58, 97,249,242,229,121, +143, 61,246,152,238,201, 39,159,228,151, 45, 91,246, 37,128,255, 57,175,223,180,105,211,207, 88,150,173,225,205,255, 75,146,148, +157,144,144,240, 42, 45,134,119, 30,134, 97,166, 60, 51,119, 87, 55,137, 0,223, 77,237,206,150,154,151,155, 53,107, 63, 60,244, +208, 67, 35, 27, 53,106,196, 75,146, 4,171,213, 10,147,201,212,248,216,177, 99, 61,182,108,217,210, 38, 41, 41,233,145, 74, 74, + 14,158, 58,117,234,210, 89,179,102, 5,203,100, 50,198,106,181,118,248,249,231,159, 7,140, 31, 63,254,248,146, 37, 75, 90, 61, +250,232,163, 62,182,223,223,125,247,221,129,115,230,204,153, 4, 96,213, 29, 72, 39,133, 66, 47,170,238, 22,234,116,186, 6,193, +193,193,147, 11, 10, 10, 6,182,105,211, 38,127,220,184,113,151, 78,156, 56,145, 16, 19, 19, 83,244,253,247,223,127, 96,181, 90, + 23, 5, 4, 4,108, 45, 40, 40,248, 52, 51, 51, 51,161,146,255,221, 0,192, 56, 0, 3, 1, 68, 1, 72, 3,176, 25,192, 82, 0, +137, 55,147,153,136,136,136, 22, 90,173,246, 13,134, 97, 58, 20, 23, 23, 71,105,181,218, 52, 66,200,225,194,194,194,143, 51, 50, + 50,142,221,140,102,100,100,100, 61, 0, 47,243, 60,223, 85, 20,197, 58, 28,199, 93, 21, 69,113,175, 40,138, 11,211,211,211,207, +223,140,102,167, 40,221,131,146,206,247, 83, 43,167,174, 89,100, 20,228, 58, 37,111,149, 73,198,100,169, 56,111,234,145,228,226, + 95,239,134,130,161, 80, 40,216,229,203,151,183, 82, 40, 20, 0, 0,179,217,140,152,152,152, 91,122, 78,148, 76, 38, 99, 63,254, +248,227, 86,114,185, 28, 0, 96,177, 88,208,171, 87,175,187,226,217, 83, 12,195, 68,197,199,199,251,217,210,230,140, 40,138, 24, + 58,116,104,109,133, 66,129, 37, 75,150, 8,217,217,217,177,223,125,247, 93,252,151, 95,126, 89,227,135, 31,126, 24,225,202, 96, +177, 44, 91,163, 34, 77, 81, 20, 97,177, 88, 32, 8, 2,204,102, 51,122,246,236, 73,107,163,187, 4, 66, 72, 52, 1,176,249,132, + 17, 0,130,110, 69, 75,173, 86, 55, 25, 54,108, 24,159,149,149, 5,153, 76, 6,139,197,130,140,140, 12,212,171, 87,143, 51,155, +205,141, 42,171,215,184,113,227,241,115,230,204, 9,217,180,105,147,101,197,138, 21,166, 62,125,250,200,159,126,250,105,223,110, +221,186,117,141,138,138, 98,191,251,238, 59,211,246,237,219, 45,143, 63,254,184,114,246,236,217, 33,155, 55,111, 30,121,242,228, +201, 85,183, 59,157, 20, 10,197,141,193,210,233,116,187,117, 58, 93,253,231,158,123, 46,241,133, 23, 94,216,170,211,233, 68, 0, +200,200,200, 80, 14, 29, 58, 52,107,248,240,225,215,245,122, 61,183,104,209,162, 90, 95,124,241,197, 54,157, 78,151, 90, 84, 84, +212,206,155,107, 25,128, 87, 88,150,125,185, 95,191,126,187,173, 86,107,214,218,181,107,127, 25, 49, 98, 68, 23, 73,146,180, 59, +119,238,252, 67, 20,197,175, 0,124, 82,137,232, 24, 87,183,110,221, 25, 53,106,212,120,109,241,226,197,202, 58,117,234, 64,163, +209,160,176,176,176,214,249,243,231,107,190,242,202, 43, 67,212,106,245, 2, 63, 63,191,183,143, 29, 59,102,245,246,154, 27, 17, + 17,241, 63, 31, 31,159,247, 63,248,224, 3, 85,179,102,205, 24,141, 70,131,164,164,164,230, 7, 15, 30,140,249,246,219,111,159, +102, 89,118,102,106,106,170,215,233,236, 14,240,166,250,193, 91,124,106, 55,239,185,100,233,183, 76, 13,173, 6, 60,195,192,106, +177,200, 50,245,134,186, 47, 77,120,254,151, 14,202, 51,251, 11,101,153,189, 19, 18, 96,185,205,101, 65, 0,176,145,227,184,161, + 10,133,130, 29, 58,116, 40,182,111,223,206, 24,141, 70, 30, 0, 84, 42,149, 48,116,232, 80,168,213,106,152,205,102, 9, 37,205, +121, 2, 0,101,233,246, 38,119,154, 50,153,140,237,217,179,167,254,232,209,163, 57,122,189, 94,102,211,236,217,179,103,160, 82, +169,212, 88,173, 86,111, 53,171,211, 84,226,226,197,139,229,140,208,245,235,215,145,147,147, 3,147,201,196,228,230,230, 66, 20, + 69,152, 76,166, 44, 81, 20,193,178,172,173, 76,187, 68, 46,151,227,220,185,115,229,126,183, 88, 44, 48, 24, 12,176, 90,173, 40, + 40, 40, 80,171, 84,170,250, 93,186,116, 73, 1,176,174,168,168,232,211, 19, 39, 78, 92,165,213,211, 29,227,218, 31,255, 24,107, + 1,176, 0,184,124,139,198, 93, 2,128,189,123,247, 34, 51, 51, 19, 89, 89, 89,200,202,202, 66,205,154, 53, 65, 8,169,116,244, + 63, 49, 49,241,243,214,173, 91, 51,199,143, 31,223, 0, 96,233,234,213,171,135,221,184,113, 99,241,235,175,191, 30,248,241,199, + 31,223,120,227,141, 55, 38, 0,248,125,245,234,213, 79,181,104,209,226,193,147, 39, 79,206,191, 19,233,164, 80, 40,110,230,193, + 34,132, 68, 52,104,208,224,198,188,121,243, 26, 79,157, 58, 53,168,168,168,136, 43,141, 18, 25, 1, 64,175,215,115, 83,166, 76, + 9,158, 59,119,110, 99,165, 82,153, 43, 8, 66,176, 11, 25, 87, 67, 45, 95,246,245,245, 29,114,233,210,165,213,141, 27, 55, 14, +156, 51,103,206, 63, 90,173,150,204,159, 63,255, 88,189,122,245,194,175, 94,189,250,163,175,175,111, 47, 0,175, 85,144,180,114, +154,181,107,215,126,119,196,136, 17,175,237,223,191, 95,217,178,101, 75,248,248,248,128,227, 56,248,251,251,163,125,251,246,204, +158, 61,123,148,131, 6, 13,154,152,159,159,255,177,183,154,145,145,145,175, 13, 24, 48,224,131,163, 71,143,170,123,247,238,205, + 40, 20, 10,228,229,229, 65,161, 80,160, 99,199,142,204,226, 47, 23,170,155, 55,107,250,110, 84, 84,212, 44,111, 53, 77, 13,106, +108,123,236,133, 41,189, 54,110,222,194,132,134,134,226,210, 39,179,176,183, 91, 12, 46,188, 55, 21,225,225,225,216,176,233, 79, +102,240,216, 23,186,248, 90, 67,119,122,171, 89, 5, 56,106, 30,140,137,137,137, 79, 72, 72, 64,215,174, 93,241,203, 47,191,180, +124,253,245,215, 95,120,253,245,215, 95,248,229,151, 95, 90,118,237,218, 21, 9, 9, 9,136,137,137,137, 71, 73, 95,169, 23, 0, +220, 40,125,189,224, 78,115,247,238,221,232,213,171, 87,238,234,213,171,235, 77,159, 62,125,246,244,233,211,103,255,242,203, 47, +117,123,245,234,149,187,123,247,238,202,106, 86, 71,222,237,134,202,249, 69, 8,129, 36, 73, 8, 9, 9,185,190,105,211, 38, 50, +120,240, 96, 46, 44, 44, 44,109,232,208,161,202,195,135, 15, 19,134, 97, 54, 86, 38,157,132, 16, 24, 12, 6, 24, 12, 6, 92,190, +124, 89,189, 96,193,130, 46,175,189,246, 90,131,159,127,254, 57,114,226,196,137, 19,124,125,125,143,181,108,217, 50,250,118,231, +157,106,218, 35,143, 25,165,230,170,152,101,217,107, 55,171, 57,124,248,240,230,209,209,209,161, 63,159, 14, 64,174,188, 49, 68, +153, 31, 36,185, 63,196,160,182,184, 32, 31,128,136,136,136,208, 90,181,106,117,172,100, 58,183, 29, 63,126,124, 32,128, 37, 0, + 68, 0,107,222,120,227,141,103, 25,134,249,245,141, 55,222,120, 30,192,154,210,223,191, 57,121,242,228,131, 0,254,186, 67,233, +164,101,137,106, 86, 41,132,144,182,132,144, 7, 74, 95,237, 8, 33,237,157,190, 43,156,214,235, 83,193,251, 3, 78,223,219, 58, +109,215,182,170, 13, 22,113,120,217,238,104,172, 31,125,244,209,161,111,191,253,118,123,122,122,122,120,221,186,117, 31, 24, 54, +108, 88,116, 65, 65, 1, 59,124,248,240,218,225,225,225,131,255,250,235,175,176,225,195,135,239, 28, 49, 98,196, 65,134, 97,188, +233, 55, 83,143,227,184, 73,199,143, 31,223, 87,187,118,109, 75, 90, 90,154, 79,235,214,173, 11, 1,160, 97,195,134,250,156,156, + 28,181,143,143, 15, 54,109,218,116,132, 97,152,113, 0, 26,123, 18, 12, 15, 15,111, 93,163, 70,141,215,222,127,255,125, 37,199, +113, 46,215, 81, 42,149,120,255,253,247,149,190,190,190,207, 69, 68, 68,116,240,164, 25, 26, 26,218,196,199,199,103,198,130, 5, + 11, 84,102,179, 25, 22,139, 5,161,161,161,208,233,116, 72, 79, 79, 71,234,149, 43,184,158,148,132,137,207, 60,163,214,170,213, +147,194,195,195, 91,121,210,236, 18,173, 27,170,139,108,218,227,165,151, 95,193,153, 87,158,193,246, 72, 5,194, 94,158,130,150, +187, 78, 33,106,230,167,248,171,174, 47,226, 31,233,139, 73,147, 38, 67, 30, 82,183, 83,199, 40,237, 99,119, 36,164,201,243, 68, +169, 84,194,104, 52,242,123,247,238,237, 42, 8,130, 76, 16, 4,217,158, 61,123,122,108,221,186,117,224,156, 57,115,250,171,213, +234, 9, 29, 58,116,248,129, 97,152,207, 9, 33,106, 66,136, 26,192,199, 14,145,167,114,154, 50,153, 12, 6,131, 65,118,244,232, +209,231, 69, 81, 84,136,162,168, 56,122,244,232,139,127,253,245,215,152, 37, 75,150, 84, 90,243,118,193,113, 28,120,158,135, 76, + 38, 67,171, 86,173, 46,173, 92,185,210, 26, 17, 17,193,127,253,245,215, 1, 33, 33, 33,218, 31,126,248, 33, 47, 55, 55,247,163, +202,104,154,205,102,152, 76, 38, 24, 12, 6,236,221,187,183,206,115,207, 61,199,155,205,102,113,236,216,177, 55,172, 86,171,233, +197, 23, 95,244,213,233,116,147,233,253,223,157,129, 16, 34, 2, 40, 6, 80, 68, 8, 49, 1, 64,116,116,180, 50, 34, 34,162, 69, +116,116,180,215,229,177,168,168,232,171,207, 62,251, 44,138, 85,250, 99,159,121, 16, 86,147, 89,216,230,255, 37,178,106,191,142, +208,154, 13, 48, 96,192,128, 16,134, 97, 22, 86, 65,146,215, 1, 24, 1,224,183,155,217,184,186,211,217,166, 77,155,174,113,113, +113, 71, 99, 99, 99,211,227,226,226,142,182,105,211,166,235,173,102,120,230,243,232, 51,247, 37, 54,101,214,120,144,185, 47,177, + 41, 51,159, 71, 31, 90,114,239,143,211,207,217,139, 56, 16,204, 48,204, 70,134, 97, 54, 78,155, 54,173, 39,128, 32,167,239,157, + 28,215, 3,160,112,245,110,123, 57,252, 30, 76, 8,121,192, 97,187,224, 42,187,158, 58,124,118,217,204, 17, 28, 28,108,126,243, +205, 55,143, 27,141,198, 83, 63,252,240, 67,253, 23, 94,120,161,117,116,116,244,185,225,195,135,255,161,209,104, 4, 91, 31, 29, + 47,121,102,208,160, 65,155, 2, 3, 3,153,236,236,108,185,217,108,230, 51, 50, 50,228,162, 40, 50, 28,199, 17,189, 94,207, 95, +184,112, 65,102,177, 88,164, 14, 29, 58,172, 63,120,240,224, 56, 0,147,220, 9,106, 52,154, 23,191,254,250,107, 85, 69,230, 74, + 20, 69, 20, 21, 21, 65, 16, 4,204,156, 57, 83,245,218,107,175,189, 2,224,144, 59, 77,153, 76, 54,113,222,188,121, 42, 91, 19, +144, 36, 73, 56,118,236, 24,178,175, 95,135,169,176, 0,230,194, 2,152,243,115,193, 22,229, 99,204,192,254,170, 37,191,173,125, + 21,192, 24,183, 23, 85,165,110,238, 15, 75,191,133, 40,138, 72, 91,235,186, 75,196,141,253,187, 32, 10, 86,204,254,240, 99,102, +210, 51,143,206, 1,138, 87,223, 45,165, 94,161, 80,176,159,124,242, 73, 99,133, 66, 1,134, 97,136,217,108, 70,179,102,205,152, + 91,212,228, 62,255,252,243,214,114,185,156,177,105, 54,111,222,156,185,219,206,120,185, 92, 14,181, 90,141,218,181,107, 27, 30, +124,240,193,131,159,127,254,121, 45,142,227, 52, 60,207,255,153,159,159, 63,231,204,153, 51,149,106, 70, 50,153, 76, 48, 26,141, + 48, 26,141,184,118,237, 90, 88,253,250,245,153,255,253,239,127, 98,113,113,113,221,111,190,249,230,226,234,213,171, 53, 11, 23, + 46, 28, 14,224,101, 90,223,222, 94,234,213,171,167, 0,224, 87, 43,136, 47,150,113, 40, 78, 23,132,208,200,200,200, 41,130, 32, +180,105,216,176, 97,192,133, 11, 23,114, 35, 34, 34, 14,177, 44,187, 42, 37, 37, 37,221,131, 81, 99, 4, 65,192,243,237,242, 48, +161, 3, 11, 65, 16,144,151,151,135,107,215,174,225,244,233,211, 56,124,248,244, 77,165,177,118,237,218,207,168, 84,170,126, 10, +133,162,182, 40,138,172, 94,175,191,106, 50,153,182,167,165,165,125, 85,193,133, 9,119, 34,157, 14,250,159, 14, 27, 54, 44,194, +207,207, 15,255,252,243, 79,196,137, 19, 39, 62, 5,208,230,150,234, 14, 25,251,221,216,103, 23, 70, 6,250,251, 35, 41, 97, 67, +228,186,205, 63,127, 7, 72, 81,180, 4,223, 23, 84,116, 13,200, 34,132, 12, 46, 13, 0,109,156, 51,103,206,224,210,242, 53,216, +241,187, 23,229,177,220,122, 12,195,108,116,245,123, 85, 26, 44,226, 38, 99, 80,169, 84,226,248,241,227,207,173, 95,191,190,118, +155, 54,109,206, 86,212, 25,216, 3,157, 27, 55,110,124,245,200,145, 35, 36, 56, 56,216, 44, 73, 18,163,209,104, 68,181, 90, 45, +229,231,231,195,106,181,146,171, 87,175,242,215,174, 93,147,215,168, 81, 67, 14,192, 99,168, 78, 38,147,117,172, 83,167, 78,133, +145,130,162,162, 34, 20, 22, 22,194,100, 50, 33, 52, 52,148, 97, 89,182,189,199,176, 30,203,118,105,220,184, 49,147,155,155,139, +136,136, 8,236,219,183, 15, 69,249,121, 48, 21, 22,194,148,159, 7, 75, 65, 62,196,130, 60,228, 93, 79, 71,237,240, 40,134, 97, +152,142,158, 52, 5, 78, 29, 29,162,211,226,194,172, 41,104,123,236, 42, 24,153, 28, 71,154,135,131, 88, 75,186, 90,181, 59,153, + 6, 70,174,192,217,137, 79, 34,108,244,115,176,178,202,200, 59, 81,178, 5, 65, 96, 76, 38, 19, 84, 42,149,208,181,107,215,189, + 28,199,245, 80, 40, 20,236,132, 9, 19,144,145,145, 81,230, 4,152, 48, 97, 2,212,106, 53, 76, 38,147, 0,224,117, 84,208,103, + 74, 16, 4,198,106,181, 66,173, 86, 91,219,180,105,243, 21,199,113, 47, 42, 20, 10,174, 81,163, 70,153,115,231,206, 77,211,106, +181,218,107,215,174,221, 80, 40, 20, 41,181,107,215,110,167, 86,171,163, 61,105,222, 78,148, 74, 37,120,158, 7,203,178, 8, 10, + 10, 42,206,201,201, 57,124,249,242,229, 81, 55,163, 37,138, 34,204,102, 51,172, 86, 43,140, 70, 35, 36, 73,194,137, 19, 39,160, + 84, 42,101,162, 40,158, 22, 69, 81, 35,147,201,192,113, 28,157,163,238, 54, 19, 27, 27,219,163,182, 26,159, 78, 8, 55, 5,212, + 27,172, 45,210, 40,185,226,145,107,173,109,251,244,121,164,255,235,175, 79,209,213,168, 81, 67,113,229,202, 21,227,252,249,243, +235,252,254,251,239, 12, 74,250,137, 86, 72, 90, 90,218,175,115,231,206, 13,236,209,163, 71, 93,153, 76,198,228,229,229, 33, 43, + 43, 11,215,175, 95,199,181,107,215, 72, 82, 82,210, 37, 65, 16,126,169, 76, 26, 91,180,104,241,205,224,193,131,199, 54,107,214, + 76, 70, 8,129,213,106,133, 94,175,111,125,248,240,225, 33,251,246,237,235,122,229,202,149, 74,151,203,244,244,244, 95, 62,252, +240, 67,109,247,238,221, 27,203,100, 50,182, 42,210,233,116, 65,139,208,233,116,216,190,125, 59,124,125,125,225,105,180,174, 55, + 88, 4, 41, 50,208, 63, 8,198,243,159, 33,194, 55, 26, 22, 65,138,164, 37,248,190,138, 98, 49, 46, 76,208,223,132,144, 7,110, +213, 12, 85,151,153,186,169, 8,150,141,140,140, 12,101, 81, 81, 17, 47, 73, 18,107, 50,153,100,146, 36, 65, 38,147, 89, 43,249, +127,205,134, 13, 27,118,168,109,219,182,250,210, 8,134,224,231,231, 39,228,231,231,163,212, 96, 73, 60,207, 27,117, 58,157,177, +110,221,186,128, 23, 77,132, 6,131,161,150, 90,173, 46,247,187, 94,175, 71, 81, 81,145,221, 96,233,245,122,248,250,250,162,184, +184,216,227,201, 45,138, 98,109,141, 70,131,180,180, 52, 0, 64, 81, 94, 46,140, 5, 5,176, 20,230,195,146,151, 11,107,126, 30, +172,249,185, 96, 13, 6,248, 71,213,132, 32, 8, 53, 61,105, 22,155, 68, 5, 7,130,235, 27,127, 69,232,139,175, 87,184,222,141, +189,127, 65, 87,191, 17, 12, 6,203,157,152,163,172,227,233,211,167,227,154, 54,109,138,161, 67,135,226,145, 71, 30, 57,161, 86, +171, 67, 22, 46, 92,216, 44, 53, 53,181,220,202, 15, 61,244, 16, 94,126,249,101, 12, 27, 54,236,199,227,199,143, 47,114,167,217, +189,123,119,244,236,217, 51,240,145, 71, 30, 73,210,233,116,241, 75,151, 46,109, 55,115,230,204, 76,189, 94,159, 26, 31, 31,223, + 34, 37, 37, 69,211,176, 97,195, 93, 49, 49, 49,236,166, 77,155,162, 61,104,222,110,211, 9,171,213, 10,139,197, 2,147,201, 4, + 66,136,215, 81, 54,231,199, 37, 88,173, 86,251, 8, 66,163,209, 8,171,213,202,172, 91,183, 22, 27, 54,108, 96, 19, 18,206, 68, + 77,157, 58, 13,121,121,121, 16, 69,145, 86,179,183,137,184,184,184,129, 60,145,190,126, 52,204,170,122, 60, 84, 40,226, 89, 82, +116,254,219,183,139, 79,248,243, 38, 83, 49,227,243,214,219,111, 7, 92,188,120,209,242,225,135, 31,166, 15, 29, 58, 84,245,236, +179,207, 54,221,180,105, 83,215,154, 53,107,126,155,156,156,156, 87, 81,224,179, 67,135, 14,135, 2, 2, 2,234,173, 88,177, 34, + 51, 45, 45, 45,208,106,181,106,204,102,179,197,108, 54, 95,180, 88, 44,251,204,102,243,246,140,140,140,248,202,164, 85,167,211, +181,124,236,177,199,100,185,185,185,224,121, 30, 22,139, 5, 89, 89, 89,136,141,141,229,118,236,216,209,236,102,242,159,144,144, +240, 89, 94, 94,222,174, 13, 27, 54,244,211,106,181,113, 10,133, 34, 76, 20, 69,209,104, 52,102, 26,141,198,227, 55,147, 78,167, + 11, 90,218,177, 99,199, 34,124,124,124,144,154,154, 10,134, 97,210,110,245,152,201,101,108,114,210,217,245, 53, 35,124,235, 32, + 49,241, 16,228, 50, 54,153,206, 24,116,127, 71,176, 28,250, 74, 13,246, 96,146, 12, 83,167, 78,125,147, 97,152,141, 83,167, 78, +125,211, 77, 4, 75,116, 92,207, 97,253, 42,187,169,119,123, 17, 47, 44, 44,228,255,254,251,239,160,107,215,174,233,194,194,194, +244, 49, 49, 49,121, 12,195, 16, 81, 20,217, 27, 55,110,104, 83, 82, 82, 84, 1, 1, 1,166,154, 53,107,230,123,249,127,231, 95, +122,233,165,238,211,167, 79,143,239,219,183,111, 54, 0,228,230,230, 34, 43, 43,203, 54, 74, 11,105,105,105,236,209,163, 71, 3, +255,252,243,207,214,240, 98, 4,143, 90,173,190, 86, 88, 88,216,200,223,223,223,126, 65,179,153, 42,199,119,139,197,130,194,194, + 66,104,181, 90,143, 39, 55,203,178,169,169,169,169,245, 13, 6, 61,174, 94,184, 0, 83, 97, 62, 44, 5,249,176, 22,228,193,154, +151, 7, 49,239, 6,216,162, 66,232,212,106, 20,222,200, 1,199,113, 25,158, 52,181, 74,206,108, 21, 68, 69,240,128, 33, 0, 83, +241,245,217,191,125, 23,144, 38, 45,161, 86,255,102,189,205,133,154, 7, 48,216, 54, 39,149, 90,173,198, 7, 31,124,128,248,248, +120,201, 93, 51,176, 66,161, 0,203,178,162, 55,154, 74,165, 82, 61,125,250,116,245,241,227,199, 85, 10,133, 2, 58,157, 78,115, +252,248,241, 22, 7, 14, 28, 96,245,122, 61, 87,191,126,253, 97,145,145,145, 69, 30, 52,171,213, 72,185,250,173,168,168,200,222, +111,234,198,141, 27,188, 74,165,106,216,181,107,215,131,102,179,249, 23, 65, 16,190, 63,118,236, 88, 65,133,119,218,150,242,131, + 65, 37, 73,130, 32, 8, 16, 4, 1, 60,207, 75,235,214,173,199, 23,139, 62,199,154,213,191,145,238,221,187, 51,155, 54,109,130, + 36, 73, 41,180,158,189, 61, 72,146,244,233, 95, 83, 30, 86, 65, 20,139, 76,187, 86, 22,111,201,225,139,191, 61,245,215,209, 28, +171, 73,217,160, 65,221, 38,190, 62,126,236, 15,203,191,189,145,158,121,233,252, 23, 95,164,212,156, 61,123,182,127,221,186,117, +253,206,157, 59, 23, 9, 32,175, 2, 35, 84,251,201, 39,159,124,250,198,141, 27,178,165, 75,151, 46, 75, 77, 77,221, 3,224,146, +115,208, 12, 37,253, 12,101, 0, 66, 81, 50,130,118, 27,128, 31,221,152, 21,137, 97, 24,236,218,181,171,220,104, 63, 73,146,110, +218, 97,164,167,167,231,182,111,223,190,229,249,243,231,215,229,229,229,173,112, 81,207, 14,137,137,137, 25,121,228,200,145,119, + 0, 92,172,100, 4,107, 82, 66, 66,194, 71,146, 36, 69,179, 44,123,149, 16,242,198,173, 30, 51,179, 69,122,118,253,230,213, 75, +205, 86,177,150, 66,198, 93, 51, 91,164,231,104, 73,190,239,177,245,145,130,163,113,114, 97,140, 14,204,153, 51, 71, 61,119,238, + 92,204,153, 51,231,180,171, 8,150,205,104,205,153, 51,231,180,109, 61,135,245,247, 84,181,193, 98, 92, 92, 88,116,211,166, 77, +235,220,186,117,235,180, 30, 61,122,164,215,169, 83, 71,111, 91,166,209,104,204,254,254,254,102,147,201,164, 76, 75, 75, 11, 62, +123,246,108, 29, 73,146,212, 94,252,223, 78,127,127,255,192,163, 71,143, 6,173, 90,181,170,193,177, 99,199,162, 71,143, 30,221, +221,100, 50,193,108, 54,227,242,229,203,209, 95,127,253,181, 36,151,203,243, 24,134,249, 27, 37,163, 97,220, 98,181, 90, 15,158, + 63,127,190, 97,251,246,237, 25,171,213, 90,198, 84, 57,126, 86, 40, 20, 72, 77, 77, 37,146, 36, 29,246, 34,157,135,142, 30, 57, + 82,191,121,211,166, 48,229,231,194, 92,144, 7, 75,126, 30,132,252, 60, 72, 5,121, 96,139, 10, 17, 20, 40,131, 90,173,197,249, +180,116,148,166,213, 45, 50,193,144,148,154, 95,208,168,254,140, 79,240, 87, 93, 95, 16,171,197,222, 44, 8,192,222, 92,216,233, +108, 22,246, 30, 56, 8, 94, 52,165,222,201,146,108, 54,155,165,225,195,135, 31, 97, 89,182,202,158, 55,101,181, 90,165, 23, 94, +120,193,174,153,156,156,124, 35, 57, 57, 89,101, 48, 24, 88,157, 78, 87,116,167,207, 94,171,213,234,210, 32,153,205,102, 24, 12, + 6,164,167,167, 43,182,109,219,214,245,224,193,131,242, 51,103,206,224,224,193,131,173,214,173, 91, 55,173,113,227,198, 45, 19, + 19, 19, 51,188, 49,109,146, 36,193,118, 29, 36,132,128, 16,194, 1,192,250,223, 55, 98,192,128, 1, 76, 97, 97, 33, 54,108,216, + 80, 37,205, 40, 20,175, 41,134, 32,170,205,187, 87, 22, 79,190,160, 40, 56,173,231,223,143,143,143,223, 50,104,208,160,189, 17, +161,117,125, 1, 64, 41,215, 5,115,196, 71, 23, 28, 28,172, 4,128,136,136,136, 56,171,213,186, 40, 53, 53,181,139, 43,193,135, + 30,122,168, 83, 72, 72, 72,235,205,155, 55, 31, 79, 77, 77,221,235,194, 92,161, 81,163, 70, 51, 79,157, 58, 53, 80, 38,147, 49, + 14,149, 63,169,200, 96, 13, 31, 62,188,145, 66,161, 8,218,116,222, 15, 5,242,250,144,216, 60, 16, 78, 9,209,191, 37,174,202, +155, 33, 52,244,108,144, 70,163,105,117,233,210,165,227,149,204,127,173, 71, 31,125,244,143,111,190,249,166,201,128, 1, 3, 20, +251,247,239, 47,103,176,154, 52,105, 50,124,199,142, 29, 35, 38, 76,152,208,114,197,138, 21, 15, 2,184,224,173,248,177, 99,199, +246,163,228,137, 13, 85,198,187, 95, 97, 59, 32, 70,151, 6, 34,104, 9,190,207,163, 87,165,100, 57, 68,159,178, 0, 48, 78,223, +143,151,158, 67,102, 66,136,109,221, 44,135,168,149,217, 41,234,229,106, 89, 22,195, 48, 85, 22,220,224,221,220,121,111,187,124, +249,114,219, 71, 31,125, 52,203,209, 92, 57, 54,143,232,116, 58,147,175,175,111,209,145, 35, 71, 34, 68, 81,220,229,197,255, 45, +221,177, 99,199, 95, 11, 22, 44, 88, 25, 24, 24,104, 29, 51,102, 12, 59,101,202,148,189, 57, 57, 57, 36, 39, 39, 7, 11, 23, 46, +236,214,181,107,215,189, 87,175, 94, 21,227,227,227,159, 2, 48,192,147,160, 94,175,255,242,197, 23, 95, 28,185,119,239, 94,149, +217,108, 70, 94, 94, 94,185,232,149,213,106, 5,199,113, 88,180,104,145,169,184,184,248,115, 47, 34, 25, 95,125,249,229,151, 35, +190,254, 98,129,138,183, 90,160,207,203,133, 88,250,226,140,197,208,169, 88,212,111, 29,140,188, 52, 37,150,111,222,111, 16, 4, +225, 75,143, 6,203, 88,244,250,132,231,199,109,220,182,243, 47, 4,117,233,133,236,191,254, 44, 31, 13, 10, 14,133,217, 98,193, +251,179,102, 16,198,144, 55,229,118, 7,112, 0,108, 44,157, 77, 29, 0, 54, 30, 63,126,252, 96,171, 86,173, 6,154,205,102,119, + 70, 12,146, 36,113, 55,163,169, 84, 42, 83, 26, 53,106,180,179, 94,189,122,195, 0,160,105,211,166,191,179, 44,219,203,131,102, +181, 26,172,233,211,167, 99,238,220,185,152, 58,117,170,221, 32,217,110, 0, 76, 38, 83,157, 63,255,252, 83,177,127,255,126,178, +124,249,242,236,135, 31,126,216,127,244,232,209,254, 43, 86,172,248, 31,128, 41, 21,105,190,241,198, 27, 88,178,100, 9,198,143, + 31, 95,110, 57,199,113, 82,106,106, 10, 76,102, 19, 89,191,126,125, 26,207,243, 1,243,231,207, 87,191,246,218,107, 12,173,107, +111, 15,162, 40,190,213,229,179,117,175, 0,106,171, 32, 8,159,159, 60, 25,191,171, 52,106, 19,242,217,103,159, 41, 0,224,147, +143, 63,145, 17, 66,100,182,137, 97,223,123,239, 61,213,243,207, 63, 31, 82,145,230,175,191,254,154,251,222,123,239, 5, 61,251, +236,179, 3,254,250,235, 47,213,145, 35, 71,254, 68,201, 83, 10,178, 75, 29, 65,141,115,231,206,237, 15, 14, 14, 14, 95,189,122, +117,253,126,253,250,105, 61,186,192,226,226,111, 23, 47, 94, 92,251,211, 61, 62,216, 84, 60, 12,201,228, 17,144, 64,130, 64,121, + 33,154,234,174,161,123,120,114,196,138, 21, 43,150, 2,136,171, 68,246,155, 61,252,240,195,107,191,249,230,155, 58,227,198,141, + 75,217,191,127,127, 50,128,153,206, 43,197,199,199,231, 60,249,228,147, 87,151, 45, 91, 86, 95,146,164, 45, 43, 87,174, 28, 0, +224, 60, 45, 61,148,219,230,188,188, 8,100,220,204,186,213, 9,239,166,210,121, 38, 55, 55, 55,102,234,212,169, 31, 69, 68, 68, +212,154, 49, 99,198,149,166, 77,155, 22,219,150,231,228,228,232,118,239,222, 93,183,160,160,160, 80, 16,132,177, 0, 78,184,144, +105,142,178,115,101, 92,149, 36,233,163, 86,173, 90,141,252,249,231,159,119,251,248,248, 20, 28, 58,116,200,215,215,215, 55,255, +204,153, 51, 90,142,227,244,151, 46, 93,194,246,237,219,187, 1,248,162,130,187,164, 50,154,233,233,233,255, 40, 20,138, 79, 94, +123,237,181,215,222,121,231, 29,149, 36, 73, 48, 24, 12, 40, 44, 44,132,209,104,180,119, 78, 94,181,106,149,201,100, 50,125,157, +150,150,118,200, 11,205,131, 28,199, 45,249,124,254,231, 47, 60, 55,242, 81, 5,201,203, 65,126,186, 1,140,177, 24, 58,149, 2, +205,122, 69,162, 56,135,193, 55,187,143,154,111,152, 45,171,211,210,210,118,121,210,220,159, 92,244, 71,123,197,133,237,239,205, +154,209,103,218,247,191, 65,146, 36,156,125,113, 12,114,247,108,135,166,105, 11,116, 58,155, 5,179,217,140,169,111,188, 6, 78, +159,185,247,112,114,241, 26, 47,246,103, 85,224,168,121, 16,255, 62,187, 76, 0,240,194,137, 19, 39,198, 54,105,210, 4, 19, 38, + 76,192, 67, 15, 61, 84,102,195,181,107,215, 98,241,226,197, 48,153, 76, 99, 1, 28, 3,176,168, 50,154,117,234,212,105,215,172, + 89, 51, 46, 34, 34, 66, 95,106, 54,122,157, 62,125,186,109,147, 38, 77, 60,105, 86,121,222, 9, 33,185, 23, 46, 92,240,253,248, +227,143, 25,139,197,130,153, 51,103,194,102, 44,109, 17,167,183,222,122, 43,194,199,199, 7,159,126,250,169, 57, 59, 59,187,119, + 78, 78,206,142, 5, 11, 22,212, 88,181,106,213, 40, 7,131,229,168,121, 61, 33, 33,193,103,201,146, 37,172, 32, 8,248,236,179, +207,202, 69,180, 38, 77,154, 4,139,197, 10, 25, 47, 51,155,140,166,102,106,181,250, 98, 64, 64,128, 90,146, 36,114, 27,143,251, +127, 90,243,228,201,147,219, 80,210, 52,231, 18, 91, 63, 58,131,193,128,236,236,108,100,103,103,195,207,207,207,249,110,187,140, +166,193, 96, 56,254,198, 27,111,196,127,245,213, 87, 3, 14, 28, 56,240,232,158, 61,123, 6,109,223,190,221,120,245,234, 85,193, +106,181,146,240,240,112,190, 75,151, 46,170, 65,131, 6,105,149, 74, 37,251,214, 91,111,101,127,240,193, 7, 53, 0,228, 84,164, + 73, 8,225, 36, 73,194,171, 93, 11,240, 70, 79, 30, 38, 83,201, 13,101, 90, 90, 42, 78,159, 62,141,131, 7, 19,193, 48, 12, 91, +201,253,249,249,138, 21, 43,234, 42, 20, 10,102,229,202,149,181, 86,174, 92, 57,209,211,206,251,241,199, 31,107,175, 92,185,114, + 17,128, 62, 40,233,248, 68,203, 18,213,164, 84,198, 96,149,114, 90, 16,132, 1,215,174, 93,235, 50,110,220,184, 15,155, 52,105, + 98, 18, 4, 65,182,101,203,150,198,217,217,217, 10, 65, 16,222, 64,229,219, 43,151, 24,141, 70, 12, 29, 58,244,141,122,245,234, +237, 56,118,236, 88,203, 7, 30,120, 96,203,218,181,107,187, 8,130,112,233,212,169, 83, 99, 1,124, 94,106,176,188, 34, 41, 41, +105,230,246,237,219,153, 67,135, 14, 77,158, 58,117,170, 50, 56, 56,152,241,247,247,135,193, 96, 64,114,114, 50, 89,182,108,153, +201,100, 50,125,225,231,231,247,182,183,154,193,193,193, 83,246, 28, 61,170, 56,119,241,194, 83, 79, 13,236,171,170,213,176, 17, +116, 12, 80,116, 35, 7,187,119,167,227,251,195,199,141,217,102,203, 79, 28,199,121, 61,148, 62,234, 98,214,128,109,171,191,217, +188,107,231,206, 62,179,231,126,196, 68, 60,254, 28,180,209,117, 32,213,110,128,221,187,118,225,131,247,102, 18,174, 40,115,143, +245, 98,102,223, 59, 88, 38,108, 14, 64, 9,224, 99, 73,146,248,210,187,121,188,252,242,203,112,124,116,206,226,197,139, 97, 48, + 24, 0,128,103, 24,230, 99, 0,223,161,226, 25,221, 93,105,214,252,227,143, 63,106, 58,106, 54,105,210,196, 91,205, 42, 37, 51, + 51,243,237,103,158,121,102,174, 76, 38,243,147, 36,169, 92,231,116, 0,208,106,181, 40, 40, 40,128, 40,138, 66, 96, 96, 96,162, +213,106, 5,207,243, 21,158, 71,197,197,197,111,143, 31, 63,254,125,134, 97, 42,140,116,168,213,234,171,251,246,237,107, 48,122, +244,104,118,245,234,213,151, 71,141, 26,165, 60,112,224,128,136,155,156,211,136, 82,253, 16, 66, 80, 92, 92, 12,184,159, 18,225, +218,207, 63,255,252, 70,124,124,188,106,252,248,241,113,143, 63,254,184,111,207,158, 61,117,142, 43, 24, 12, 6,105,195,134, 13, +197, 75,150, 44,201,217,179,103,207,223, 79, 63,253,244, 48, 0, 21,134,139,211,210,210,254, 88,184,112,161, 95,247,238,221, 27, +138,162,136,236,236,108,123, 31,172,148,148, 20, 92,189,122,245,170, 36, 73,235, 43,153,157, 23, 71,143, 30,189,105,217,178,101, +209,227,198,141, 75, 89,181,106,213,122, 0,249, 46,214,211, 13, 31, 62,124,200,178,101,203,162,159,127,254,249,107, 0, 38,130, +246, 42,167, 80,170,148,161, 28,199, 29, 0, 48,180, 18, 14,183, 34,162, 1,188,143,146,118,211,252, 82, 39, 60, 27, 64,189,155, +213,140,136,136,104,209,176, 97,195,159, 26, 53,106,116, 37, 50, 50,210,218,168, 81,163,171, 13, 27, 54, 92, 29, 22, 22, 22,123, +179,154,225,225,225,157,107,214,172,185, 37, 42, 42, 42,187, 86,100, 4,137,138,138,186, 81,171, 86,173,237,145,145,145,221,111, + 86,179,125, 77,221,224,246,141, 34, 19,227, 98, 26,152, 26,214,171, 67, 98,155, 53, 48,117,104, 92,243, 92,187, 90,218,225,183, +176, 63,111,229, 46,196, 21, 74, 0,122, 82, 10,195, 48,214, 86,173, 90, 45,137,141,141, 93, 20, 27, 27,187,168,101,203,150, 95, + 51, 12, 99,181, 45, 7,160,199,191,147,130,222, 78,205,234,200,187, 75,186,116,233,242,227,202,149, 43,197,217,179,103,231,119, +232,208, 33,103,246,236,217,249, 43, 87,174, 20,187,116,233,242,227,205,106,182,108,217, 50,186,107,215,174, 55,126,252,241, 71, +225,252,249,243,228,199, 31,127, 20,186,118,237,122,195,105, 38,247, 59,158,247,255,162,230,136, 17, 35, 46, 16, 7,204,102, 51, +201,202,202, 34,231,206,157, 35,123,247,238, 37,125,251,246,189,224,133, 38, 15,160, 39,128,207,162,162,162,182,117,238,220,249, +124,215,174, 93, 47,214,171, 87,239,128, 92, 46, 95, 1,224, 73,148, 60,239, 48, 28, 37,211,146,132,186,211, 12, 15, 15,239,216, +164, 73,147,217,173, 91,183, 94,223,161, 67,135,253,113,113,113, 7, 27, 53,106,180,177, 78,157, 58,115,195,195,195, 59,221,100, +222,107, 61,250,232,163,167,139,138,138,196,110,221,186,109,112,181, 81,108,108,236,178,162,162, 34,241,241,199, 31, 63,135,146, +231,200,210,178, 68, 53,171, 67,243,190,186, 17,171,110,238,171,130, 82,153, 89,156,239,147,188,191, 80,106,114,244, 40,251,216, + 26, 79,203,111,183,230,109,217,159, 77,155, 54, 13,232,211,167,207,139,235,215,175,159,124,233,210,165,201,235,215,175,159,220, +175, 95,191, 23,155, 54,109, 26,112, 43,233,108,217,178,101,116,151, 46, 93,190,232,220,185,115, 74,151, 46, 93,190,112, 50, 87, +180, 18,191, 67,154, 15, 62,248,224,230, 71, 31,125,244,194, 99,143, 61,118,241,177,199, 30,187, 48, 98,196,136, 11,195,134, 13, +187,240,224,131, 15, 94, 24, 48, 96,192,133,158, 61,123,110,190,143,242, 94,171,109,219,182, 63,249,248,248, 60,238,106,161, 92, + 46, 31,210,177, 99,199, 53, 0,234,211,178, 68, 53,169,193,162, 6,139,106, 86,141,166, 18,238, 31, 87,227,106,249,157,208,164, +199,157,106, 82, 77,170, 73, 53,169,193,186,107, 12, 22, 79,119, 3,197, 3,166, 91, 92,126,187, 52, 41, 20, 10,133, 66,185,107, + 96,220,184,208,202,140, 14,184, 25, 39,123,138,106, 82, 77,170, 73, 53,169, 38,213,164,154,255, 57, 77,103,237,135,157,126,119, +158, 7,242,235,123,205, 92,209, 38, 66,170, 73, 53,169, 38,213,164,154, 84,147,106,222, 45,154,174, 24,135,123, 16, 66, 8,232, + 3,101, 41, 20, 10,133, 66,161, 80,170, 24,106,176, 40, 20, 10,133, 66,161, 80,170, 24,175, 58,185,203,229,242, 24, 66,200,211, + 12,195,132, 49, 12,147, 65, 8,249,206, 98,177,156,254,175,237, 44,185, 92, 30,195, 48,204,211,132,144, 48, 66, 72, 6,195, 48, +119,116, 63, 16,128,153, 57,163,100, 54,233,119,103,128, 48,238, 39, 62,164, 80, 40, 20, 10,133,114,167, 13, 86,116, 84,212,163, + 44,199, 44,176, 88,197, 0,171, 32,176, 11, 23, 46,100, 31,124,240, 65,108,216,176, 1, 19, 95,126,121, 34,203,177,146,156,231, +115,137, 36, 76,188,154,146,254,179, 55,127, 54,108,216,176, 76,171,213, 90,225,172,214, 28,199, 93, 95,183,110, 93,232,173,102, + 42, 34,246,145, 76,171,197, 82,225,255,240,188,236,122,250,241, 53, 94,253, 79, 84, 84,248,163, 28,195, 46,176,138, 82,128, 40, + 74,236, 23, 95,124, 97,223, 15, 47,189,244,210, 68, 25,207, 75,114, 25,151, 43,137,100,226,213,148,148,159,111,215,129,115, 52, + 87, 0, 48,115, 6, 24, 50, 3,160, 38,139, 66,161, 80, 40,148,187,216, 96, 49, 44, 22,173,252,234,227,128,156, 27,185, 88,181, +118, 11,154, 52,105,130, 51,103,206,160, 73,147, 38,232,210,174, 37,219,191, 99, 43,150, 99, 17, 60,253,139,229,139, 0,120,101, + 44,172, 86,107,200,239,191,255, 14,134, 97, 32,138, 34, 4, 65,128, 32, 8,176, 90,173, 40, 44, 44,196, 43,175,188, 18, 82, 21, +153,178, 90, 44, 33,151,254,254, 13, 50,142,129, 85, 36,176, 10, 4, 86, 65,130, 69, 36, 40,208, 11,232,245,192,104,175,255,135, + 5,187,232,187, 5, 31, 7,228,229,231,227,183, 77,219,202,236,135, 94,157,219,178,143, 12,234,193,106,212,242,224,113, 83, 62, +244,122, 63, 84, 5,142,230,170,204,111, 51,168,193,162, 80, 40, 20, 10,229,174, 53, 88,102,171, 24, 16, 26,232,135,239,191,251, + 14,111, 76,125, 15,141, 27, 55, 6, 33, 4, 12,195,224,205,119,102, 97,222,123, 83,241,216,192,110,176, 10, 82,128, 27,253,114, + 67, 53, 25,134,193,149, 43, 87, 96, 48, 24,202,188, 98, 98, 98,188, 77,179, 87,195, 63,101, 28,131, 63,142, 21,194, 98,149, 96, + 17, 74, 95, 86, 9, 61,155,251, 84, 74,211, 42, 74, 1,254,190, 58, 44,253,106, 49,222,152,245,113,153,253, 48,229,205,119,240, +229,220,183, 49,105,194, 19, 48, 91,197,128,155, 73,103, 37,161,154, 84,147,106, 82, 77,170, 73, 53,239, 87,205,251,210, 96,117, + 7,176,203,230,129,236,230,194,108, 68,179,154, 65, 88,252,233,251, 32, 96, 33, 17, 2, 16,128, 72, 86,212,169,161,129, 65,175, +175,244, 31, 74,146, 4,139,197, 2,171,213,138,175,191,254, 26, 69, 69, 69,144, 36, 9, 77,154, 52, 1, 0,196,198,198, 58, 70, + 96,174, 29, 59,118, 44,218,147,102,112,243,161, 87, 65, 80,203,241,183,119, 63,254, 22,251,143, 93, 2, 33,128, 82,173,193,136, +199,159,135, 40, 17, 88,172,149,127, 62,169, 81,175, 71,184, 78,134,121, 31,188, 3, 86, 38, 7, 11, 6, 44,203,128,101, 36, 52, +142, 10,128,169,228,225,196,183,149,119,103,128, 56, 71,177,222,157, 1, 50,131,150,105, 10,133, 66,161,220,155,184,244, 34,247, +186,193,218,229, 42, 51,102,163, 1, 81, 1,114,132,233,252, 32, 8, 34, 78, 91,194, 81,168, 55,194, 98,177,226,170,197,130,139, +255,164,163, 83,167, 78,176, 90,173,162,197, 98,129, 92, 46,207, 95,183,110, 93,160, 39,131,101,181, 90, 97,177, 88, 80, 92, 92, +140, 21, 43, 86,128,231,121, 72, 82,137,241,177, 77,206, 69, 8, 65,231,206,157,107,121,149, 11,130, 90, 23,143,252, 10, 31, 21, + 7, 65, 34, 16, 4, 2,171, 8,136, 18,129,222, 44, 97,248, 51,111, 67,144, 36, 8,146, 4,179, 23, 6,203,209,176, 9, 0,134, + 78, 91, 5, 64,103, 95,238,171, 36,120,163, 51, 11,185, 66, 9,133,156,131,201,160,191,237, 7,142, 1, 8,153,241,111, 83, 33, +237,228, 78,161, 80, 40,148,123,156, 93,247,131,177,114, 54, 88,142,238,113,247,191, 6, 75, 15,193, 42,194, 42,136, 16,172, 2, +242,139, 12,248,232,163,143,160, 84, 42,193, 48,140,221, 44, 73,146,196, 90,173, 86, 12, 26, 52, 40,192,211, 31,138,162, 8,139, +197, 2,139,197, 2, 66, 8, 56,142, 67,251,246,237,203,173,119,232,208,161, 74,101,196, 71,197,161, 78,159,105,229,126, 63,252, +235,251, 32,132, 64, 20, 75, 94,222, 24, 44, 79,134,173,117,247, 71, 96, 50, 91, 65, 8, 0, 82, 18,225,186, 19, 48, 0,177,245, +185,154, 65, 79, 76, 10,133, 66,161,220, 31,148,241, 34,247,139,193, 42,227, 30, 77, 6, 3,172, 86, 1,130, 32,194,106, 45, 49, + 70,106,181, 26,221,186,117, 43,241, 33, 14,209,166, 45, 91,182,192, 98,177,120,252, 67, 91,167,246, 82, 99, 6, 66, 8, 86,173, + 90, 5,153, 76,102,127,201,229,242, 74,103, 68, 16, 9,166, 77,121, 21,114,158,133,140,103,237,239, 34, 33, 32,164,196, 28,137, + 18,129,201,234, 93,144,199,157, 97, 3, 0,179,201, 2, 16, 2, 2, 2, 67,113, 49, 61, 29, 40, 20, 10,133, 66,169, 26,238,139, + 72,150,205, 96,245,128,139,230, 37,179,161,184, 52,122, 37,194, 42, 8,118, 3,245,233,167,159,130,231,121, 40, 20, 10,240, 60, +111, 55, 68,222, 24, 44,163,209,136,186,117,235,194,108, 54,163, 73,147, 38, 32,132, 96,228,200,145,229,214, 59,114,228, 72,165, + 50, 98, 21, 9,230,124,248, 89,185,223,247,253,242, 30, 90, 52,173,131,118, 13,180, 48, 90, 36, 20,232,133, 91, 54,108, 0, 74, + 34, 88, 0, 8, 1, 12,197,122,122, 58, 80, 40, 20, 10,133,114,107,184,244, 34,247,186,193,218,237,202, 45, 26,245,122, 8, 86, +193,110,178,204,102, 51, 36, 73,194,203, 47,191, 92, 78,104,199,142, 29, 48,155,205,238,255,140,231,175, 63,247,220,115,101,166, + 72, 32,132,224,215, 95,127,133, 82,169, 44, 19,197, 98,152,202,153, 87,171, 72, 48,227,173,215,160,144,113,101, 12,145, 36, 1, + 27,254,216,138, 13,127,108,181,175,203,113,178,235,183, 98,216, 0,192,108, 46,141, 96, 17,130,226,162, 66,122, 90, 80, 40, 20, + 10,133,114,107,184,244, 34,247,186,193,114,137,209, 80, 12,171, 67, 31, 44,139,197, 2, 65, 16,240,245,215, 95,151,105,206,147, +201,100, 96, 89,214, 99, 4,107,237,218,181,101, 38,247,140,141,141, 37,132, 16,140, 24, 49,194,222,220,248,212, 83, 79, 97,220, +184,113,149, 54, 88,130, 72, 48,115,246,167,118,157, 65,125,186, 98,232,192,238,144, 74,189,112,214,233,117,149, 18,116,103,216, + 0,192,108, 42,233,131, 69, 0,232, 11,105, 19, 33,133, 66,161, 80, 40, 20, 47, 12,150,140,103,243, 47, 94,205,240,171,161, 85, + 65,144, 76, 16,164,146,145,127,162, 40, 98,220,184,127, 31,110, 61,106,212, 40,140, 29, 59,182, 34,131,213, 28, 30,230,202,144, + 36, 9,251,246,237, 3,195, 48, 96, 89,214,254,114,131, 75,205, 98,147,132,253, 63,207,130, 68, 8, 36, 2, 72,164,196, 79,153, + 5,175,162,141,229, 52, 61, 25, 54,165,206, 31, 28, 75,192, 48,192,197,148, 76,240, 28,155, 95,217,188,223, 4, 84,147,106, 82, + 77,170, 73, 53,169,230,253,170,249,223, 48, 88, 68, 36, 19,151,108, 60,180,192, 42, 74,126,182,223,154, 53,107, 6,139,197,130, + 63,255,252,211,110, 60, 56,142,179, 55,233,121,211, 7,203,137,107,221,186,117,115, 55, 21,195, 53,175, 84, 24, 92,107,211,243, +209, 90,238,150, 87, 54, 97,158, 12,219, 55,123,254,125, 4, 33,207,178,249, 32,100, 34, 45, 78, 20, 10,133, 66,161, 80,220, 26, +172,228,180,180,229, 0,150, 59,254,214,170, 85,171,162, 33, 67,134,168, 5, 65,128,217,108,134,197, 98,129,217,108,182,191,148, + 74,101,165,102,220,244,102, 18, 81,111,200, 58,181, 46,186, 74,247,138, 23,134, 45, 61, 61, 61,154, 22, 31, 10,133, 66,161, 80, + 40,149, 50, 88,174,208,235,245,254, 12,195,240,105,105,105,229,150,101,100,100, 0, 37,243,114,222,243, 84,185, 97,163, 80, 40, + 20, 10,133, 66, 13, 86, 69,236,222,189, 91,184, 95, 76, 20,133, 66,161, 80, 40, 20, 74,117,193,210, 93, 64,161, 80, 40, 20, 10, +133, 82,181, 48, 40, 25, 9,224,138,202,140, 14,104,126, 19,255,125,138,106, 82, 77,170, 73, 53,169, 38,213,164,154,255, 57, 77, + 79,218,142,219,143, 3,240,245,189,102,174,108, 3, 1,171,147,230, 84,147,106, 82, 77,170, 73, 53,169, 38,213,164,154, 55,201, + 56,220,131, 16, 66,104, 19, 97,165,136, 29, 39,163, 59,129, 66,161, 80, 40, 20,138, 39,248,219,245, 71, 51,102,204, 96,111,113, +123,233,142,237,165,200,225,245, 57, 30, 31,181,172, 21, 57,240,159,156, 97,155,136,200, 76, 65,234,111, 23,105,241,185, 57, 90, +105, 81,195,202,200, 6, 7,232, 84, 67,107,249,240, 29, 46,100,235, 15,232, 45,210, 6,194, 88,215, 37, 20, 34,151,238, 33, 10, +133,226,178, 42,142,140, 12,216,191,127,127,173,206,157, 59, 95, 75, 77, 77,205,245,118, 89, 69,132,214,141, 27,235,163,211,188, +104, 52,153,234,248,249,250, 94,191,145,147,179, 36,253,242, 63, 11,109,203,235,212,169,227,187,114,229,202,136, 81,163, 70,165, + 93,185,114,165,128, 30, 1,202,109, 53, 88,109,218,180,169, 35, 73,210, 19, 0, 30, 39,132, 28,255,231,159,127, 30,190, 25,157, + 29, 59,118, 68, 90,173,214,182,130, 32,196, 2,136, 85,107,116,173, 76, 38,227,117, 6,228,201,129, 3, 7,254, 83, 89,189,216, +216,216, 63, 0, 12,114,181,140, 97,152,153,241,241,241, 51,188,213,226,120,124,180,117,221, 55, 67,211,245,106,236,142,191,250, +208,119,159, 76, 5,128, 97,119,227, 1, 13, 15, 15, 87, 3,120,146,101,217,222, 74,165,178,161,209,104, 76, 2,112,146, 97,152, + 69,169,169,169,105, 55, 41,203,198,232,100,207,104,212,154, 1,225, 62,138,216,212,220,130, 84,163, 69,218, 43, 49,150,143, 43, +107,136,234, 1,138,144, 64,255,221,147,135,119,105,210,178, 89, 3, 72, 87,143,195,152,151, 53, 36, 62, 85, 63,228,171,195,215, + 95, 53, 23,234, 99, 47, 1,102,111,180,162,162,162,194, 69, 81,228,211,211,211,147,109,149,161,201,100,106, 3,160, 9,128,179, + 74,165,242,232,173, 86,138,247,138,102,100,100,100,132, 36, 73,207,134,134,134, 62,144,153,153,249, 7,203,178,223,220,194,241, +166,252, 71,136,110, 63,230, 51,134,101,106, 84,102, 27, 34,145,236,171,135,151,191,122, 59,211, 73, 72,201, 76,207,145,145,145, + 79,213,170, 85,171, 1, 33,228, 28, 33,100,190,211, 57, 80,110, 25,195, 48, 21,118,132,137,110,214,113,237,115, 79,140,234,245, +202,132,167,116, 26,141, 26,122,131, 49,104,209,210, 31, 62, 89,180,116,197,160,164, 51,251, 7, 2, 64, 68, 68,196,176,154, 53, +107,214, 54,155,205, 87, 8, 33, 63,120,210,164, 80,110,217, 96, 53,109,218, 84,171, 80, 40, 70,176, 44,251,100,139,216, 14, 93, +134, 60,242, 36, 99,101, 52,248,224,181, 81,149,158,194,225,216,177, 99,202,244,244,244,247,234, 52,142,251, 95,143,126, 67,217, +166, 77, 26,163, 70, 80, 0, 36, 86,129,101,127,158, 15,218,245,213, 83, 11, 1,116,188,137,100, 14,250,121,211, 97,164,231,137, + 96, 24,128, 97, 0,150, 1,138,140, 18,222,124,186,203,187, 0,188, 51, 88,177,227,100, 77,194, 66, 6,158,191,161,194,159,167, +172, 0, 34,160, 9, 8, 29,168, 15, 30, 39,195,177,175,173,119,211,193, 12, 11, 11,139, 13, 12, 12,252,242,169,167,158, 10,104, +216,176, 97,184, 66,161,208, 24,141,198, 6, 87,175, 94,173, 51,111,222,188,190, 97, 97, 97,115, 51, 50, 50,126,171,140,102, 99, + 63,101,173,218, 97,161, 63, 79,153,240, 68,187,134,117,107,130, 55, 23,131,152,138,106, 94,189,114,169,227,236,111,126,123,142, + 97,140, 35,207, 20, 8,219,189,213, 83,249,200,223,122,115,220,200, 38,245,125, 8,204,103,246,129,231, 8, 84, 62, 1,104, 87, +139, 3, 3,210,116,198,206,180, 55, 81,104,121,215, 11, 35, 57, 75, 20,197, 55, 1, 48, 97, 97, 97, 63,203,100,178, 35,109,218, +180,105,252,216, 99,143, 49, 45, 90,180,192, 63,255,252,211,116,195,134, 13, 15, 11,130,144,104, 54,155, 15, 7, 5, 5, 29, 79, + 72, 72,176,120, 89,190,229, 57, 57, 57,173, 20, 10, 69,251,187, 89, 51, 60, 60, 92,109, 54,155,159,136,138,138, 26,215,169, 83, +167, 22, 15, 62,248, 32,211,168, 81, 35, 36, 38, 38,198,109,222,188,249,221,189,123,247,158, 76, 73, 73,249, 90,161, 80,252,144, +158,158,238,213, 36,192, 35,122, 35,113,205, 14, 52,190,217,229, 78,248, 3, 80, 1, 72,247, 38,152, 0, 64, 3,224,242, 29,208, +172,142, 72, 75, 2,195, 48,129,165, 23,100,219,141, 93,153,207,142,239,162, 40, 22, 95,187,118,173,158, 59,205,154, 53,107, 54, +149, 36,137,115,252, 77, 38,171,184,215,130, 32, 8, 82, 74, 74,202, 25,119,154, 12,203,212,248,250,203,207,252,120, 22, 16, 73, +233,203, 74, 32, 18, 2, 73, 2, 68, 9, 16, 37, 9,130, 72, 32, 17, 9, 86,129, 96,230,187,111,222,201,106,238, 1, 0,221, 0, +236, 1,240,185,155,101,243,221,137, 4,215,107, 53,230,137,145, 35,122,190,249,218,139, 58, 66, 8, 8, 33, 80,171,148,120,253, +149,241, 10,163,209,220, 57,188, 65,155,113,233, 23,142, 46,101, 24,166, 39,128, 54, 0,142, 2,248,129, 90, 6, 74,117, 25, 44, + 38, 46, 46,174, 27, 33,228,201,176,136,168, 17,195, 71, 63,175,174,221,160, 57,138, 36, 95, 92,201,150,112,236,175,149, 0,176, +186, 50,127,190,101,203,150, 54,132,224,251, 9, 83, 63,107,220,178,117, 91,156, 74, 21,176, 63, 89, 68,241, 69, 17, 60,103,128, + 36, 1,132, 16,211,205,102, 46, 37, 87,192,222, 68, 51, 56, 22, 96, 89,128, 99, 25,112,149,125, 78,247,177,175,173,103,106, 13, +219,180,245, 72,234, 67, 80,133, 66,159,155, 10,125,110,230,102,164,172,189,171,204, 85, 68, 68, 68,175,218,181,107,207,127,229, +149, 87,194,210,211,211, 3, 15, 31, 62, 12,165, 82,137,128,128, 0,190, 70,141, 26,141,167, 78,157,154, 63,123,246,236,215, 67, + 66, 66,254,185,126,253,122,146, 87,166, 64, 43,111,210,181, 69,147, 3,211,103,205,240, 51,197,111, 70,222,154, 53,224, 88, 9, +114,173, 14,225,106, 13, 62,127,160,118,224,212, 45,201,191,177, 22,115,147, 83, 70, 99,170, 55,154, 53, 67, 2,251,213,111,216, + 8,121, 27, 23,225, 66,158, 9, 7, 51, 77, 24,210,189, 13,234, 7,168,209, 90, 16, 17,164,226,123,121, 50, 88,145,145,145, 1, +146, 36, 77, 73, 74, 74, 98,229,114, 57, 83,167, 78,157,145, 95,127,253, 53,105,218,180,169,253,169,219, 29, 59,118, 68,199,142, + 29,153,162,162,162, 38,251,247,239,111,178,118,237, 90,107,126,126,126,124, 90, 90,218,178,138, 35, 75,117,175,153, 76,198,154, + 70,147,217, 56,111,222,188,159, 58,116,232, 32, 41, 20, 10,220,138,102,169,241, 93,161,209,104, 52,211,167, 79,207,110,219,182, + 45,169, 10,205,218,181,107,111,109,215,174, 93,207,126,253,250,241,157, 59,119, 70, 68, 68,132,125, 89,141, 26, 53,208,181,107, + 87, 38, 57, 57,185,229,222,189,123, 23,109,221,186,117,193, 63,255,252,243, 87, 82, 82, 82, 63, 47, 14, 81,163, 91, 92, 94, 38, +248, 11, 96, 14,128,165, 0,246,187,187,141, 1, 48, 10,192, 71,119, 72,211,253, 77,129, 74,149,105, 52, 26, 67, 74, 63, 95, 55, + 26,141,161, 30, 43, 75,134,209,205,155, 55, 47, 68, 46,151,131,101, 89,136,162, 8, 81, 20, 33, 73, 18, 8, 33,246,119,219, 72, +163, 89,179,102,137,158, 52, 37, 73, 98, 63,251,236, 51,153, 90,173, 6, 0, 88,173,214, 50,239, 54,108,223,103,205,154,229, 85, + 29,165, 86,112,120,231,181,113,237, 88,209,172,114,251,255,156,194,248,204,235,243,143,220, 1,179, 26, 16, 25, 25,249, 4,128, + 7, 1,216,206,241, 22,145,145,145, 59,157, 86,109, 81,250, 94, 28, 25, 25,249, 23,128, 63, 34, 35, 35,191,119,213, 92,232,167, +245, 25, 63,249,229,103,125, 8, 33,152,185, 38, 27, 51,127,205,198, 59,195, 2,241,250, 32, 13,158,126,252, 97,237,247,203,127, +121,190,180,140,217, 56,135,146, 81,247, 52,122, 69,169,122,131,213,186,117,235, 77, 3,135,141, 29,208,161, 91, 63, 8,242, 16, + 36, 94,103,144,124,133,128,231, 4,176,144,112,249,239,117,132,101, 89,103,135, 95,225, 80,205, 77,155, 54,189, 90,171,126,171, +185,111,206,152,195,157,202, 84,224,251,189, 6,136,166,124, 24,178, 47,162,248,250,121, 20,102, 36, 32, 47,245,212, 73,150,101, +103,120,171, 89, 62,172, 12, 72,132,128, 33, 12, 32,161,228,220, 96, 93, 58, 44,183,154, 68,100,166,196,111,253,254,161,214, 67, +167,225,252,222,229, 0, 97,167,120,241,247,213,241, 16,204, 83, 21, 68, 50,250, 70, 71, 71,127,252,252,243,207, 71,157, 56,113, +194, 87,175,215, 23, 31, 57,114,100,119,122,122,122,104,141, 26, 53,146, 31,123,236,177, 78, 33, 33, 33, 33,221,186,117,211,108, +217,178,229, 45, 0,207,122,210,140,209,200, 99, 58,183,109,126,240,253,143, 63,213,102,255,182, 0,230, 43, 39,112, 48,211,136, + 19, 89, 6, 18,233,155,207, 60,218, 60, 0, 90, 5,143,113,237, 67,116,255,219,144,244, 33,140, 24,237, 77,222,235, 68,134,214, +179, 26, 12, 48, 26, 44,216,116, 62,223,112, 48, 55, 63,132,245, 73,201,122,253,161, 54, 42, 46, 59, 13, 97, 62,178, 6,184, 94, +185,253,201, 48, 12, 52, 26,141,203,101,126,126,126,232,216,177, 35,234,213,171, 39, 27, 53,106, 84, 7, 0,203, 42,210,180, 88, + 44,225,169,169,105,104,216,168,161,178,119,239,222, 12,199,113, 48,155,205,183,164, 9, 0, 90,173,246,193,216,216, 88,254,199, + 31,127,204, 75, 74, 74, 58, 61,124,248,240, 84,141, 70, 83,230,130,170,209,104, 80,171, 86, 45,188,240,194, 11,178,231,158,123, +206,163,102,104,104,104,223,229,203,151,131, 97, 24,251,197,219,153,232,232,104,132,133,133, 97,208,160, 65,252,195, 15, 63,220, + 55, 41, 41,169,194,253, 57,162, 55, 18,109,230,105, 68,111,247, 23,145,210,229,231, 92, 68,178,156,211,153, 3, 96, 9,128,223, + 1,140,168,192, 16,117, 6,176, 6,192, 64,192,229,145,175, 80, 83, 46,151,203, 45, 22, 75,128, 11,227, 83, 89, 77,251,169, 30, + 31, 31,143,184,184, 56, 56,191,219,140, 16,195, 48, 33,222,158,155, 28,199, 97,241,226,197, 96, 89, 22,114,185, 28, 50,153, 12, +114,185,188,220,171,117,235,214, 94,159,239, 50,153, 12,139, 23, 47,134, 40,138,108, 82, 82,210,147,162, 40, 14, 53, 26,141, 33, +106,181, 58, 75, 46,151,111,236,222,189,251,119, 74,165, 82,168,140, 38,203, 1,172,104, 86,109,223,178, 94, 91,209, 70, 38,147, + 9,131,135, 62, 10,150, 97,111,123, 93,183,127,255,254, 90,181,106,213,106, 84, 26,157, 2,128, 61,169,169,169,221, 28,190, 59, +178, 39, 53, 53,213,214, 53,228,194,181,107,215,106, 69, 71, 71,231, 58,107,154,205,150, 58, 58,157, 22,132, 16,204,252, 53, 27, +198, 31,235, 66, 53,246, 50,158,110,111,130,143,143, 15, 4, 65,104, 28, 25, 25,249, 3,128,134,165,209,171, 33,145,145,145,141, + 8, 33,127,213,169, 83,231,119,135, 38,253,219, 86,207,255, 71, 52,221, 92,207, 73, 91, 0,193, 14, 63,153, 1,216,238, 86,179, + 75, 13,112,144,211,239,142,235,217,222,179,108,129,204,210,237,136,131,110, 22,195, 48,127, 87,181,193, 34, 14,238,188,162, 24, +143,111,138,193, 31, 69, 87,106,128,103, 37,240, 28, 3,158, 3, 0, 6, 57, 41, 9, 48, 23,231,236,139,143,143,191,226,205,159, +254,249,231,159, 29,107, 55,109,247,225,140,247, 63, 97,191,219, 99, 64,190,222,136,236, 51,235,145,126,228,219,116, 73,176,172, +103, 89,246, 40,203,178,199, 98, 91,182, 72, 12, 15, 15, 23,111, 54,115, 18, 41, 9,113,219,141,149, 4, 48, 55,115, 3,146,250, +219, 69,212,125,171,236,247,187,132,200,200,200,129,117,235,214,157,243,252,243,207, 71, 31, 59,118,204,167,176,176, 48,107,251, +246,237,137, 22,139,229, 31,150,101, 63, 79, 75, 75,235,190,124,249,114,205, 27,111,188,209,175, 81,163, 70,141,182,110,221,170, +247, 24,185,210,200, 90, 62, 62,230,209,131, 67,199, 77, 84,157,254,117, 33,148,137,199,240,245,153, 92,241,104,166,225, 45, 99, +145, 48, 95,173,225, 59,231, 25,133,109,147,187,134,179,225, 62, 50,212,244,147,247, 56, 81,232,221,131,190, 21, 50, 37, 79,120, + 21,204, 38, 1,197,102,201,156,144,141,226,190,130,104, 33,218, 26, 42, 0,224, 57,214,163,233, 79, 77, 77,205, 13, 15, 15,255, +176,118,237,218,111, 51, 12, 67,186,117,235,118, 38, 46, 46,174, 88,146, 36, 24, 12, 6, 88, 44, 22,200,100, 50, 24, 12, 6, 92, +189,122, 21,135, 15, 31,134,159,159, 95,165,246,107, 94, 94, 30,106,215,174, 13,141, 70,115,203,154,146, 36, 49,139, 22, 45, 82, +157, 62,125, 90,245,251,239,191, 7,190,250,234,171,249,173, 91,183, 78,120,232,161,135,146, 3, 3, 3, 45,199,143, 31,199,193, +131, 7,145,155,155,139,118,237,218,121,165,105,177, 88,192,243, 60, 12, 6, 3,148, 74, 37,120,158,135, 32, 8,144, 36,201,110, +186,138,138,138,112,227,198, 13,200,100, 50,143, 15, 98,183,153,165, 17,189, 65,126, 89,115,224,122, 73,219, 80,129, 21,150,124, + 43,132,124, 43,172,249, 86, 88,243,172,143,188,242,105,203, 53, 59, 80,153, 56,240,161, 82,115,181,198,133,201,234,236,240,251, +241,202,106, 90, 44,150,125, 54,227,163, 82,169, 66,108,209, 5,165, 82,105, 53,153, 76, 61, 43,169,137,248,248,120,196,198,198, +114,165,154,132, 16, 98,235,111, 83,233, 74,131, 97, 24,112, 28, 7,153, 76, 6,142,227, 16, 27, 27,139, 7, 31,124, 16,141, 26, + 53, 66, 74, 74, 10,118,237,218,133,243,231,207, 67, 46,151,151,105, 58,244,132, 76, 38, 3,203,178,236,185,115,231,190,235,221, +187,119,253,137, 19, 39, 42,106,213,170,133,196,196,196,176, 69,139, 22,141,221,177, 99, 71,247, 97,195,134,141, 5, 32,184,107, + 62, 44, 99, 4, 75, 77,147,201,100, 66, 66, 66,130,251,117, 43,221, 4,112,235,116,238,220,249, 26, 33,228, 2, 74,154,254, 90, +164,166,166,118,139,140,140,220, 4,192,217, 16, 22,167,166,166, 14,138,140,140,204, 7,112, 18,192, 57,134, 97,174,185,210,244, +247,243,205, 42, 42, 42, 14,213,106, 53,120,107,168, 63, 84, 99, 47,227,229,158, 28,172, 86, 43, 46, 93,186,130, 58,181,163,152, +213,223,175,179, 53, 13,182, 57,122,244, 40, 80,210, 84,152,148,156,156, 28,209,190,125,123,218,225,189,154,124,148, 27, 47, 18, +204, 48,204, 70, 7,195, 53,216,246,125,234,212,169,111,206,153, 51,231, 52,195, 48, 27, 29,127,119, 92,207,241,189,244, 28,221, + 72, 8, 25, 60,109,218,180,152,185,115,231,206,182,173,123, 71, 34, 88, 28,199, 13, 63,245,231,252, 67, 13, 44, 36, 58, 52,230, +129, 50,251,225,234,241, 63, 33, 73,210, 50,111,116, 14, 30, 60,168, 18, 36,124,247,198,155,179,216,175,254, 50, 32, 51, 35, 13, +105,187, 63,130,225,122,194,247,106,181,122,114,239, 1,131,111,185,224,198,198,198,198,248, 7,133,193,100, 33,165, 6,171,172, +201,186, 95, 8, 15, 15,127,176,110,221,186,179,214,175, 95, 31,109, 48, 24,124,246,239,223,159,183,109,219,182, 11, 22,139,229, +155,140,140,140, 21,165,171,173,231,121,254, 61, 66, 8,116, 58, 29,207,113,156,218, 93,168, 59,198, 87, 22,251,196,227,143,239, +123,245,243,165,170, 11,167,142, 99,193,234, 77, 80, 18,139,120, 38,199,252,208,233, 34,161,164,208,234,133,157,145,217,134, 84, + 66, 80, 83,198, 50, 8,212,200,194, 58, 0,170, 67,128,209, 83,154,107,212,140,102,133,200,186,216,171, 55, 65,231, 43, 87, 0, + 64,100,195,102,220,241, 2, 1,251,143,156,133, 74, 21, 32,247, 38,239,233,233,233,211, 35, 34, 34,106,111,219,182,141,213,235, +245,197, 39, 78,156, 64, 80, 80, 16, 66, 66, 66,224,235,235,139,196,196, 68,108,223,190, 29,231,206,157, 3, 33,196, 93,148,192, + 37,153,153,153, 40, 40, 40,168, 18, 77, 65, 16, 24, 0,136,137,137, 65, 76, 76,140, 34, 53, 53, 53,100,227,198,141, 1,179,103, +207,206, 8, 15, 15,223, 98, 48,252,219, 61,202,185,185,199, 93, 68, 1, 0,140, 70, 35, 76, 38, 19,228,114, 57, 84, 42, 21,228, +114, 57, 10, 10, 10,144,153,153,137,194,194,194,146,139,137,191,191,125,125,175, 16, 37,224, 80,151,163,229,221,252,147, 33, 55, + 89, 84,247,151,154,168,157, 0,108,199, 55,211, 22, 16,131,251,166, 62,119,154,101,246,135, 67,148, 73,118, 51,154,182, 72, 21, +195, 48,101,106, 9,149, 74,117,221, 22,185, 42,141,148,121,212,178, 53, 11, 42, 20, 10,196,196,196, 96,242,228,201, 72, 76, 76, +196,190,125,251, 16, 18, 18,130,254,253,251,131,231,121, 36, 39, 39,131,101, 89,175, 12,150, 92, 46,135,213,106,197,133, 11, 23, +158,236,213,171, 87,221, 5, 11, 22, 40,146,146,146,144,152,152, 8, 95, 95, 95,188,247,222,123,202, 41, 83,166, 68,109,217,178, +229,185, 86,173, 90, 45,246,186,110,103, 74,154,255, 6, 15,125,212,133, 17,209,202,126, 92,246,173,194,102,188,216, 59, 48,177, + 79,106,106,106, 46, 33,228, 51, 0,243, 74,155, 5,187, 1,208,166,166,166,246,116,184, 8,147,210,102, 65, 0, 56,153,154,154, +218, 11, 0,169,168, 67,122,250,245,244, 37, 31,125,254,213,188,153,111, 78, 82,188, 62, 72,131,167,219,155, 32,138, 34, 56,142, +195,130, 37,223, 91,207, 39,156, 58,209,166, 77,155,141, 0,134, 28, 61,122, 20,109,218,180, 41, 4,112, 30,192, 21,133, 66, 65, + 7,143,220, 73, 7,230,100,130,108,198,105,206,156, 57,131, 93,153, 42, 23, 55, 63,101,126,159, 59,119,238,108,135,239, 85, 58, +138,157,119,114,142,238,238,194,195,253,131, 35, 3,159, 31,221, 31,107, 79,216, 30, 72, 72, 96, 49,233,145,145,248,151,222,108, + 54,175,241,230, 15,115,114,114,222,123,122,242,167,245,143, 94,227,145,158,171, 71,218,142, 89,196,146,151, 52,226,193, 7, 31, + 92, 91, 21, 25,138,141,141,141, 9,168, 17,177,235,237, 15,151, 98,231, 5, 51, 36, 2, 48, 4,255, 26,171,251,100,230,175,136, +136,136, 6,254,254,254,159,172, 91,183, 46, 68,161, 80,248,156, 60,121, 82,220,189,123,119,154,213,106, 93,148,145,145,177,202, + 97,189,199,155, 55,111,110,213,106,181, 72, 79, 79, 55, 90,173,214,162,138,142,117, 51,149, 42, 42,182, 69,147, 61,175,126,190, + 84,101, 52,155,145,111, 48, 33, 56, 60, 92,220,119, 50,225,161,132, 34,209,126, 71,208, 84,199,119,106,211, 48, 50,146, 85,251, + 0,250, 2,164, 22,152,211,188, 49, 87, 0,160,245,241,103,163,218,244, 64,155, 87,190,192,153, 25,111, 17, 32, 7,254,161, 17, +108,207, 23, 62,128, 46,238, 65, 44,158,248,164,244,111, 4,215, 35,134,134, 13, 27,226,159,127,254,177,149, 45,228,228,228,160, +110,221,186, 88,176, 96, 65,153, 21,189,185, 40, 86, 80, 94,111, 89, 83,146, 36,198, 41,234,136, 9, 19, 38,200, 54,111,222,172, +117, 52, 87,149,209, 52,155,205,118, 67, 65, 8,129,217,108,134,217,108,134, 86,171,197,133, 11, 23,202,250, 37, 81,116,217,212, + 89,113,130,243, 93,135,187,172, 57,183,210,239,112, 63, 0,185,131, 9, 10, 5,208,229, 38,205, 85, 57,227, 83, 21,196,199,199, +187,172, 7,109, 77,143,241,241,241, 36, 46, 46, 46,212, 91, 61, 66, 8, 20, 10, 5,134, 12, 25,130,179,103,207, 34, 45, 45, 13, + 62, 62, 62, 48,153, 76, 48,153, 76,136,141,141, 69,102,102,166,215,209, 43, 7,221,129, 47,191,252,178,234,202,149, 43,184,113, +227, 6, 84, 42, 21, 4, 65,128, 40,138,120,238,185,231, 84, 47,188,240,194, 0, 0,222, 27, 44,142, 65,159, 39, 63,116,217,183, +106,231,183,255,235,174, 84, 42,237,205, 45, 28,123, 87, 85,160,142, 55,138,149,218,137, 89, 87, 78, 45, 94,190,234,247,190,130, +197,210,243,153, 39, 30,245,209,105, 53,184,116, 57, 9,139,191,249,209,186,115,239,145,157,153, 41, 23, 6, 2, 96, 34, 35, 35, + 27,149, 70,174,206,167,166,166, 62,225,206,180, 81,170, 52,138,229,204, 56,148, 14,108,169,200, 56, 85,198,160, 57, 70,184,108, + 76,155, 54, 45,102,206,156, 57, 85,218,199,144,175,160,176, 58,155,150,214,254, 53, 34,255,154, 54,123,169,238,247, 19, 28,114, +211,207,193,120,253, 28,106,198, 14, 69,230,185,253, 32,162,245,183,132,132,132, 98, 79,127,182,101,203,150,134, 53, 27,181,121, +165, 85, 92,123,124,244, 71, 17,138,206,172,130, 57,247,202,226,193,131, 7, 87,157,185, 10, 10,223,245,230,220,165,129, 27, 78, +203,144,147,118, 14,137,235,166, 64,180,148,107, 21,219, 84, 25,221,238, 0, 47, 4, 88,208,183, 41,131,235, 7,244, 72,239, 14, + 30,187,239,236, 67,175,211,210,210, 46,248,251,251,255,176,116,233,210,241, 45, 91,182,212,188,242,202, 43,231, 11, 10, 10,222, + 79, 79, 79,255,217,193, 92,245,170, 91,183,238,107,179,102,205,170,127,245,234, 85,236,217,179,231, 2,199,113, 21,182, 47,159, + 49, 26, 83,216,147,103, 22,237,251,233,155,215,217, 90, 13,177,122,214, 27,194,129, 83, 9, 67, 18,138,196,205,118,115,165,149, + 55,233, 24, 83,111,227,139, 19,159,103,255,207,222,121,135, 69,113,181, 81,252,204,204,246, 70,239,136,136, 10, 8,136, 5, 1, +123,141,198, 18, 91,140,137, 53, 49, 26,235, 23,141, 81, 99,143,189,197,216, 53, 49, 38,246,222, 98,239, 21,123, 69, 20, 81, 68, + 65,122,239,176,189,204,253,254, 0, 12, 26,202,130,166,207,239,121,246,217,221,217,153,179,247,206,220,153,123,230,189,101, 76, + 97,167, 17, 25,151,142,148, 66,195, 5,179,239, 70, 11, 84, 6,190, 72, 2,185, 83, 45,196,169, 89,129,139,139,203,237,196, 92, +181,128,102,120,160,121, 2,196,228,104,171, 84,137,179,236,239, 67,146,111,154, 22, 0,149, 54,145, 85,234,228,222, 66,179, 36, +130,245, 59,191, 98, 48, 80,213,213, 44,109,176,222, 52, 83,101,237,163, 42, 25, 44,125,126,217,199, 64,151,245, 46, 6,118,148, + 36, 68,248, 54,230,170,196,248,148,116, 64, 23,137, 68,175,140,138,185, 81,166,242, 34, 88, 21,253,110,118,205, 79, 81, 96, 89, + 22,124, 62, 31,158,158,158,184,121,243, 38, 44, 44, 44, 32,151,203, 33,149, 74, 33, 18,137, 96, 97, 97, 1,161, 80, 8,154,166, + 65,155,105, 92, 12, 6, 3,116, 58,157, 83,141, 26, 53,240,252,249,115,136,197,226, 87, 47,161, 80, 8,111,111,111, 20, 22, 22, + 86,201,116, 86,197, 52, 49,255,162,169,169,227,158,220,248,208,201, 43,248,211,189,191, 30, 31,163,213,234,252,235,121,215,197, +211,240,208,135,105,137, 47,186,114, 30,231,111, 99,156, 75,248, 25, 69,163, 68,223, 73, 51, 94, 89, 38,107,201,146, 37,139, 74, + 71,193,222,181,193, 66, 69,230,106,202,194,159, 45,246,135,210,200, 77,137, 68,220,233,233, 5, 38,189, 42,135,101, 13,238, 57, +209,215,128,215, 59,228, 86, 84, 25, 6,181,232,208,139,190,252, 84, 7,125, 65, 50,242, 31,239,141, 21,137, 68, 83,223,165,185, +154,186,248, 23,155, 67, 15,121,200, 78,126,134,232,147,211,242, 76,122, 85,135,208,208,208, 42,207,163, 53, 2,224,255, 12, 24, +122,218,219,247,182, 16,209, 75,135,246, 81,160, 77, 71, 9, 44, 4, 22,152,247, 61,253, 84,217,130,157,148,126, 3,199, 16, 0, + 62, 66,241,151,140, 40,140,136,136, 88,248,203, 47,191,208, 70,163,113,168, 94,175,159,147,146,146,242, 42,138,232,236,236,220, +169,102,205,154, 75,231,207,159, 95, 35, 54, 54, 86,120,235,214,173,236, 7, 15, 30,176, 38,147,105, 73, 69,154,225,249,186,201, + 95,126, 57,150,169,235,230, 50,246, 69, 98, 98,207,199, 5,166,211, 37,191,213,151, 10,234,183,104,228,115,125,254,220,105, 10, +253,173,131, 80,166, 38, 98,221,173,212,124,214,100,152,102,102,212,205,230,218,197, 11,152, 54,124, 8, 91, 80, 80, 0,169, 80, +192, 38, 70, 70, 51,159,118,108, 99,250,110,202, 68, 58, 53, 53, 21, 42,165,146,113,113,113,177, 73, 78, 78,206, 54, 71,179, 44, + 67, 81, 86,229, 90, 37,131, 81,118,101, 94,109,205, 55, 35, 88, 21, 25, 44,115, 53, 75, 55,137, 85,182, 63, 76, 38, 83,213,154, + 8,141,229, 24, 44,125,134,254, 45,139,108, 60, 69, 81, 53, 75, 62,191,139,115, 64,163,209, 56,148,138,138, 1, 0, 85,221,104, +101,113, 4,171,194,223,171, 98,178, 74, 34, 88, 47, 94,188,128,189,189, 61,140, 70, 35,100, 50, 25, 36, 18, 9, 36, 18, 9,212, +106, 53,132, 66, 33, 24,134,169, 82, 58, 69, 34, 81,106,100,100,164,187,181,181, 53, 76, 38,211,107, 38,235,229,203,151,176,180, +180, 76, 55,183,255, 85, 81, 4, 11, 56,191,117, 74,153,163, 8,173, 44,101,175, 9, 49, 20,133,191, 17,165,251,233, 84, 43,170, +148, 26,117,103, 7,128, 29,174,174,174,219,118,109, 60, 17, 24, 24, 24,120,226,109, 53, 57,254, 96,247, 85,108,140, 74,247,165, +154, 58,117,106,181,231, 14,153, 58,117,234,244,178, 34, 90,239,210, 96, 81,111,188,255,102,174,108, 93, 46, 77,154,191,193, 98, +215, 61, 26,121, 41, 79,145,124,126,102, 30,171, 87,117,160,105, 58, 37,225,198,207, 7, 0,168, 66, 67, 67, 67,204,172, 12, 3, +234,121,121, 97,255, 99, 35, 52,169, 15, 65, 83,100,107,199,142, 29, 85,111,155,137, 18,115, 53,121,209,207, 54,251, 31,240,144, + 83,100, 2,243,216,106,152,171, 1, 66, 97, 93, 62, 77, 47,117,107,228,243, 65,191,152,248,194,246,117,196, 86,221,234,138,192, +220, 58,140, 99, 46,233,200,182,187,136,209, 43, 93,235,222, 56,146,127, 52, 84,164,204,110,212,192,223,226,158, 44,252,132,129, +152, 38,103, 94,197,159,222,249,253,197,139, 23,243, 29, 29, 29, 15,165,165,165,189,234,157,234,234,234,218,181,102,205,154,139, +230,205,155, 87, 43, 33, 33, 65, 17, 22, 22,150,127,224,192,129,151, 52, 77,207, 75, 77, 77, 77,175, 76,243,113,161, 97, 34,137, + 79,217, 24,161, 52, 69,190,138, 92, 73,249, 13, 63,253,180,223,205,142,253, 63, 23,199, 92,222, 6,155,196, 8,172,186,147,110, + 74,204,211, 12,136, 84, 35,213, 28,115, 37, 20, 10,247,175, 57,120,240,185,191,191, 63,165, 82,169, 96, 48, 24,144,145,145,129, +239,119,238,127,204,178, 44,172,173,173,113,225,194, 5,246,171,175,190,218,239,226,226,242,177, 57, 38,139,101,217, 87,149, 85, +121, 81, 32,137, 68, 82, 53,131, 81,188, 77,105, 3,243, 54,154,229, 25,172, 55, 35, 91, 85,212, 44, 58,129,139, 59,183,151, 23, +209, 99, 24, 6, 44,203,150, 25,233, 43, 63, 76,146, 91,142,193, 74,127,219, 27, 9,119, 84, 60,144,230, 47, 67, 44, 22,167, 21, +155, 39,182,188,169, 24,170, 26,193, 2, 0,161, 80,136, 27, 55,110,160, 75,151, 46, 96, 89, 22, 34,145, 8, 18,137, 4, 98,177, + 24,119,238,220,129, 64, 32, 0,195, 48, 85,106, 38,228,243,249,167,214,173, 91, 55,100,201,146, 37, 18,150,101, 33, 20, 10, 33, +145, 72, 32, 18,137,176, 98,197, 10,181, 80, 40, 60, 93, 37,131,133,202, 71, 17,150, 54, 99,127, 54,111, 76,211,240,230, 84, 12, +165,121,115, 10,135,114,167,105,112,113,113,177,169, 81,163,198, 23,132, 16,191,226, 69,175,141, 22, 44,181,106,201,133,197,203, +213,213,117, 91, 25,163, 8, 57,222,125,244, 10,229, 92, 35, 50,222,136, 94,233, 74,125,207, 0, 64, 21,127,207, 40,101,192, 74, +127,214,149,177, 44,107,241,226,197,151, 74, 69,174, 50,222,101,102,202,141, 96, 53,106,212,200,199,202,214,229,210,132,249, 27, + 44,182,221,102,144,151,242, 4,153,151,190,205, 35, 70,117,105,211,210,170,138,255,215,216,193,193, 22,153, 55, 52, 48,228, 60, + 7, 69, 81,161,111,155,129,160,160, 32, 79,133,165,253,229, 73, 11,126,182,217,125,159,135,220,228,223, 76, 96,117, 34, 87, 60, +154,254,126,249,153,189, 61, 69,169, 79,161,126,120,217,138,159,157,136,199,233,122,236,191,145, 90,112,249,250, 47,215,104, 95, +210,186,195, 0, 43,121,135, 1, 54, 88, 53,250,180, 77,154, 38, 2,183,163,142,247, 90, 52,237, 56,193, 95, 52,187,123,105,115, +229,236,236,220,195,197,197,101,238,137, 19, 39,220,141, 70,163,226,202,149, 43, 5, 7, 14, 28,136, 54, 26,141,107, 82, 83, 83, + 79,152, 29, 29, 83,234, 95,153,171,250, 22,252,128,161,159,125,118,237,171,149, 63,137, 35,238,223,197,210,109, 39,160,224, 27, + 76,247,147, 53, 31, 71, 40,127,107, 62,172,112,191,242,120,243,118,239,222, 45,243,245,245,165,178,178,178, 94, 85,248,122,189, + 30,249,249,249,200,203,203,131, 78,167,131,191,191, 63, 61,123,246,108,217,172, 89,179,230, 1,248, 95, 37, 17,130,244,185,115, +231, 58,140, 24, 49, 2, 22, 22, 22,200,202,202,130,193, 96,120, 21,109, 18,137, 68,176,178,178, 66,110,110, 46,206,159, 63, 15, + 66, 72,133,230, 82, 32, 16,164,184,186,186,184, 73,164, 50,157, 84, 42, 37,114,185,252,173, 53,139, 43,219,212,110,221,186, 57, +205,157, 59, 87, 88,186,146,214,235,245, 84,117, 53, 9, 33,170,247,223,127, 95,186,102,205, 26,184,187,187, 67,167,211,129,101, +217, 87, 17,172,146,169, 1,226,227,227,177,112,225, 66, 16, 66,204,191,145, 49,228, 24, 80,227, 51,123,232,179, 12,208,103, 25, +160,203, 52, 64,159,110,128, 81,245,183, 27, 34, 82,157, 14,232,102, 68,194, 28,222, 54,130, 69, 81, 20, 8, 33, 16, 8, 4, 72, + 72, 72,192,133, 11, 23, 16, 28, 28, 12,133, 66, 1,165, 82,137,155, 55,111, 34, 53, 53,181, 90, 17,172, 14, 29, 58,108, 61,123, +246,108,235, 47,191,252,210, 99,212,168, 81, 18, 31, 31, 31,196,198,198, 98,229,202,149,154, 39, 79,158, 36,141, 27, 55,238,151, +170,232,209,197, 83,215,152, 53,138,144,254,243,189,113, 57,211, 52,116, 43,103,245,210, 83, 56,188, 57, 77,195, 43, 14, 31, 62, +236,225,234,234,234,131,162,254, 85,192,239, 71, 11,150,230,222,189,123,247, 2,193,141, 34,252,171, 35, 87,119,255,105,105,230, +149,127,210,209, 95, 55,253,104,134,197,214, 91, 60,228, 36, 61, 70,222,213,217,111,154, 43,115,240, 71,169,185, 50,248, 98,133, +191,145, 8, 0,104, 96,204,141,134, 80, 40,124, 80,141, 52,191,166,201,178,236,196,102, 31,205,176,217,126,151,135,188,228, 39, +200,184, 60,171, 58,230,202, 31, 64,248, 8,128,239,214,216,239, 3, 81,218, 51,104, 46,239, 1, 5, 96,227, 3, 37,110, 38,234, + 86,232,117,186, 5, 79,242,117,185,174, 18, 88,239, 89,148, 62,171,235,135, 13,190,242,238,119, 30,183, 51,214, 3, 82,192,218, +158,215, 53, 61,192, 88,186,185,240,181,116,190, 35, 42,212,116,113,113,241,148,203,229,223,159, 58,117,202, 94, 40, 20, 90, 68, + 68, 68,152, 14, 30, 60,152, 96, 50,153,150,151,238,248, 94, 21, 77, 63,177,184,134,111,109,183,144,113,203,127, 20, 23, 20, 42, +161,212,233,225, 82,211,213, 20,114,255,233, 71, 17, 74,253, 17,115, 52, 29, 28, 28,218,247,233,211,167, 97,147, 38, 77,232,242, +204, 85,126,126, 62, 10, 11, 11,145,152,152,136,214,173, 91,211, 62, 62, 62,254, 90,173,182,125,122,122,250,165,242,210,153,146, +146, 50,103,207,158, 61, 45,247,237,219,215,125,248,240,225,138, 62,125,250, 64, 34,145, 64,169, 84,194,205,205, 13, 44,203,226, +234,213,171,136,138,138, 42, 0,112, 60, 37, 37,229,122, 69,233,124,249, 50,166, 38, 0,186, 70,141, 26, 45,187,116,233,242, 78, + 52, 1, 32, 35, 35,163,110, 72, 72,200,148, 94,189,122,141,239,220,185,179, 98,250,244,233, 2, 15, 15, 15,152, 76, 38,170,186, +154, 57, 57, 57,150,161,161,161,203, 90,181,106,245,191, 46, 93,186,240, 22, 45, 90, 4, 75, 75, 75,152, 76, 38, 72, 36, 18,228, +231,231, 99,222,188,121,184,118,237,154,145, 16,242, 67, 94, 94,222,164,138, 52, 75,207,131,245,241,184, 21,141, 42, 42,132, 21, +204,131,245,167,151,249,226, 72, 19, 65,213,154, 6, 43, 77,103,113,135,246,223,205,135,101,174,102,201,212, 11, 66,161, 16, 60, + 30, 15, 25, 25, 25, 56,123,246,236,107,243, 95, 9,133,194, 87,211, 56,148, 19,193, 42, 51,157, 10,133,130,237,219,183,239,208, + 83,167, 78, 13,153, 56,113, 98,175,130,130, 2, 7, 11, 11,139, 12,153, 76,118,124,220,184,113,155,173,172,172, 42,154,162,225, +119,154, 12, 77,149, 59,138,240,181,168, 41, 35,212,148,211, 93,235, 15, 61,238,111, 76,211,240,230, 84, 12,165,121,115, 10,135, + 55,167,105,120,165,217,187,119,239,151, 40,154, 60,148, 46,126,127,115,180, 96, 9, 94,247,238,221, 11, 12, 12, 12,188, 2, 64, +130,223,143, 34,252,211,203,252,191, 92,243, 95, 69, 69,125,176,196,215,239, 71,129, 22,165,163,224,246,247,213, 49, 87,191,195, +168, 85,190,152,191, 55,166,177, 73,167,134, 49, 63,238, 89,151, 15,186,165,191,109, 6, 8, 33,178,107,161, 47,192, 19,103, 33, +247,214,119,185,148, 73,219, 33, 52, 52, 52,172, 58, 90, 63, 3,134,129, 15,159, 94,142,190,118,225, 61, 23, 0,113,217, 58,132, + 69,102,159, 61,172, 86, 79, 44, 89, 39,233, 22,114, 0,140, 63,195, 11,175,103,227,149,215,201,210, 5, 72,143, 55, 32, 39,195, +120,234,175,234,139, 85, 66,114,114,242,115, 63, 63,191,109,155, 54,109, 26, 29, 16, 16, 32, 31, 59,118,108, 84, 94, 94,222,107, + 29,223,171, 74,132, 70,147,136, 23,177,235, 47,111, 92,249,141,216, 39, 24, 7, 23, 77, 51, 93,185, 31,217,251,113,161,222,236, + 54,107,145, 72,212,110,244,232,209, 2,149, 74, 85,174,185,202,207,207, 71, 65, 65, 1,242,243,243, 17, 22, 22,134, 62,125,250, +136,158, 62,125,218, 14,192,165,138,174,249,137,137,137, 87,235,212,169,115,103,253,250,245, 29,183,111,223,222,105,216,176, 97, +194,118,237,218, 33, 34, 34, 2,119,238,220,209,233,245,250,115, 98,177,248,124,116,116,180,185,157,176,254, 8, 77,163, 90,173, + 94, 40,145, 72,214, 28, 56,112, 96,193,197,139, 23, 7, 15, 25, 50, 68,102, 52, 26,169,183,209,204,203,203, 27,111,103,103, 55, +243,228,201,147, 91,207,158, 61,219,123,240,224,193,244,184,113,227,176,118,237, 90, 28, 60,120,144, 53,153, 76, 71,248,124,254, +103,153,153,153,149, 14, 64, 41, 61, 15, 86, 69,243, 92, 85,246,187, 25,252, 17,119,161,111,173,249,102, 36,172,100,180, 96,137, +169,170, 74,243, 96,105, 26, 54,108,248,218, 60, 87, 37, 29,218, 75, 94, 12,195,128,199,227, 85,169,137,176,126,253,250,224,243, +249,108,227,198,141, 55, 3,216, 12,188,254,200, 28, 62,159,255,106, 82, 83,115,208, 26, 89,108,220,180,237,142,145, 37, 48,177, + 4,132, 5, 12, 4, 96, 77, 44, 76, 44,129,137,101,139,166, 69, 35,128, 90, 99,250,211,175,107,165,166,105, 88, 81,198, 84, 12, +175, 40, 99, 10,135,114,159, 27,152,156,156,156, 77, 8, 41,233,143, 90,214,104,193, 18,205,109,197,203, 37, 73, 73, 73,159, 86, +164,201,193, 81, 21,131, 53,189,240,254,106, 3, 0, 91,138,162,166,133,134,134, 70,188,237,159, 49, 12, 61, 45,253,216,231,107, + 8,144,195, 80,152,246, 46, 50, 96, 50,153,102, 40, 67,215,176,132, 16, 43,138,162,166,222,191,127,255,173,210, 73,140,198, 49, +223,255,114,117,133,189,165,176, 83,102,174,246, 36, 40,170,204, 89,219,141, 32, 95,238,248, 46,254, 59,107,123, 94,215,156, 12, +227, 41,150,198,148,191,195, 1,141,136,136, 88,244,203, 47,191, 48, 63,253,244,211, 80,157, 78,247, 90,199,247,106,107, 22,234, + 39,127, 61,121, 38, 83,207,163,198,216,200,216,248, 94,143, 11,205,107, 22, 44,133,208,213,213,245,177, 74,165, 2, 69, 81,208, +106,181,175, 25,170,210, 6, 75,175,215, 35, 61, 61, 29, 30, 30, 30,160, 40,202,172, 26,162,216,148,156,176,181,181,189,178,122, +245,234, 15,214,174, 93,219,130,101,217, 27,122,189,254, 68, 86, 86, 86, 97,117,242,252, 71,104, 22,111,247,149,209,104, 92,178, +118,237,218,101, 98,177, 56, 48, 61, 61, 61,228,109, 52,139,205,211, 71, 54, 54, 54, 46,219,182,109,219,191,105,211,166,102, 60, + 30,239, 22, 69, 81, 31,231,229,229, 85,103,190,158,103,111,249,123,101, 28,252, 3,138,253, 91,107,150,238,115, 85,221,102,198, +215,174, 15, 70, 99,225,180,105,211,210,223,124,230, 96,233, 57,175, 74,191,235,116, 58,141, 25,154,236,183,223,126, 91,225, 77, + 92,105,163,165,209,104, 42,109,210, 37, 44,201,236,246,201,152,170, 93, 35, 89,146,249, 23, 94,226,142, 1,120, 94,252, 34, 21, +252, 86,165, 44,161,104,142,182, 88, 66, 72,236, 27,186,165,151,115,112,188, 27,131, 21, 26, 26,154, 0,224,243,119,249,103, 93, +186,116,185, 0,192,231, 93,106, 62,124,248, 48, 14,192,224,119,165,183, 91,167,123, 1,160,251,136,116, 29,127, 39,202,143, 72, + 21,119,104,255,240,141,102,193,191, 5,101,117,124,127, 91, 30, 23, 26, 38,146,152,164,215, 58,190, 87,161,178, 57, 35, 18,137, +168,252,252,124,232,245,122, 20, 20, 20,188, 50, 87,165, 77,150,209,104, 4, 69, 81, 40, 40, 40,128, 92, 46,135,193, 96,168,210, +157, 98,177, 73,217,211,182,109,219, 3, 33, 33, 33,239,100, 26,141, 63, 66, 83,173, 86,167,170,213,234,129,109,219,182,229,189, + 43,205,236,236,236,100, 0, 45,234,212,169, 35,172, 66, 20,172,220, 72, 86,117,127, 55,131,159,254,128, 34,191,243,239,118, 97, +141,139,139,243,125,215,154, 9, 9, 9, 79,222,121, 58,111,239,152,240, 79,168,168, 74,162, 70,174,174,174,219,226,227,227,107, + 82, 20, 21,255,102, 36,169,162,223, 42,210, 4, 0, 15, 15,143,195, 9, 9, 9, 46, 34,145, 40,217,156,229, 28, 28,127, 7,252, + 57, 77, 78,147,211,228, 52, 57, 77, 78,147,211,228, 52,171,201,136,127,162,249, 33,132,224, 95, 52,109, 28, 7, 7, 7, 7, 7, + 7, 7,199,223, 3,170, 2, 23, 90,149,209, 1,213,113,178,225,156, 38,167,201,105,114,154,156, 38,167,201,105,254,231, 52, 43, +211, 46,189,253, 8, 20,205,228,254,143,162,162,167, 66,188, 43,184,240, 41,167,201,105,114,154,156, 38,167,201,105,114,154,213, +133,107, 34,228,224,224,224,224,224,224,224,224, 40,130,199,237, 2, 14,115,112,117,117, 93,220,180,105,211, 49,119,239,222, 93, +158,144,144, 48,175,154, 26, 46,182,182,182, 11, 1,180, 32,132,136, 24,134,121,146,153,153,185, 40, 49, 49,241,106,117,211,229, +236,236,236,102,111,111,191, 16, 64, 51,150,101, 5,124, 62,255,113, 90, 90,218,130,228,228,228, 91,213,213,180,179,179,147, 57, + 59, 59, 7, 18, 66, 28, 8, 33, 52,159,207,207, 73, 74, 74, 10,203,200,200, 72,231, 74, 2, 7, 7, 7, 7,199, 91, 27,172, 57, + 95,194, 25,122,240,230,252,140,132,226, 69, 22, 40,154,116,205, 7,192, 83, 20, 61, 94,224,109, 31, 25,240, 79,209,252,187, 67, + 91, 89, 89,189, 47,149, 74,191, 42, 44, 44,108,108, 97, 97,241,216,104, 52,174, 73, 73, 73, 57, 14,224,173, 30,113, 98,111,111, +239,208,187,119,239,169,171, 87,175,198,208,161, 67,103,158, 56,113, 98,101, 85,231,109,242,241,241,233,169, 80, 40, 54,204,159, +191,192, 62, 56, 56,152, 18,139,197,120,241,226,133,235,140, 25,211, 3,236,236,236,246, 63,120,240,224,127, 85, 77,151,159,159, +223,199, 10,133, 98,205,162, 69,139,236, 3, 3, 3, 41, 30,143,135, 71,143, 30,213,152, 59,119,110,176,189,189,253,182,176,176, +176,137, 85,213,172, 95,191,190,135, 92, 46,111,177, 96,193, 2,113,112,112, 48, 68, 34, 17,158, 60,121, 34,155, 62,125,186,125, + 74, 74,202,243, 7, 15, 30,220,174,138, 94,192,136,251,124,129, 84,207, 3, 0,189, 74, 96, 12,253,185,137,193,220,101,220,229, +137,131,131,131,227, 95,104,176,230,142,194, 60,202,136,233,160, 65,125,213, 31,251,214,238,163,239,116,232,208,161,222,176, 97, +195,168,226, 71, 71,248,238,217,179,231,163,227,199,143, 71,178, 44,123, 27, 64, 24, 0,189,153,255, 43, 0,208,136,166,233,166, +127,115,205,191, 61,114,185,220,211,222,222,126, 98,126,126,126,215,192,192,192,252, 81,163, 70,197,222,186,117, 43, 38, 40, 40, + 72,179,105,211,166, 69, 6,131,225, 71, 43, 43,171,115, 5, 5, 5,203,170, 59, 47, 22,159,207,247,161, 40, 10, 73, 73, 73,224, +243,249,124,161, 80,232, 11,192,108,163, 81,163, 70, 13,103,133, 66,241,211,190,195,103, 28,242,181, 52,158,103,176, 0, 84, 48, +209,118,152,191,116,173,237,178,133, 51, 7, 40,149,202,107,207,159, 63,223,107,174,166,179,179,179,155, 66,161, 88,115,241,226, + 69, 7,145, 72, 4,150,101, 81, 80, 80, 0, 7, 7, 7, 44, 94,188,216,102,254,252,249,195,242,242,242,174,196,198,198, 30, 51, + 87,211,206,206, 78, 38,151,203, 91, 92,186,116, 73, 44, 20, 10, 41,131,193, 64,105,181, 90, 56, 57, 57,145, 21, 43, 86,136,102, +204,152,225,157,155,155,155, 26, 27, 27, 27,111,150,185,218,112,159,159,127,230, 82,115,146,160,158, 9, 0,148, 88,178,160,237, +156,216, 59, 73,143, 14, 4, 87,182, 44, 96,195,253,155,161, 35, 57,147,197,241,231,226,236,236,220,210,195,195,227,112,124,124, +252, 13,134, 97,250,197,197,197,105,223,129,108, 13, 0, 30, 0,172, 81, 52,176, 42, 27, 64, 44,240,234,198,189,202,216,214,105, +215, 3, 34,233,231, 32,164, 17, 13, 0, 52, 29,198,234,149, 91,178,162, 46, 31,123, 43, 77,177,108, 40, 88,182, 17, 13,194,130, +102, 30, 18,163,242,151,204,200,203,167,184,146,193,241,206, 12,214,156, 97,176,166,128, 41,211, 70,141,160,121, 12, 67, 45,218, +240,115,255,187, 55,142, 17,231,154,141, 94, 61,114,163,117,235,214,104,221,186, 53,181,116,233, 82,159,139, 23, 47,250,236,218, +181,203,112,227,198,141,251, 0,182,150,247,103,139,198, 74,226,141, 6,181, 27,104,137,166, 86,179, 31,119,181,104,209,154, 21, +137, 68,120, 27, 77, 0, 24,211,151,119, 78, 75,185, 81,237,186,207,138,123, 87,154,255, 16,115, 21,162, 80, 40,234,142, 28, 57, +242,249,232,209,163,175,200,100, 50, 2, 0,233,233,233,178, 15, 62,248, 32,167,119,239,222, 89, 42,149, 10,235,215,175,119, 91, +179,102,205, 57,133, 66,145, 84, 80, 80, 16, 92,149,242,225,236,236,188,164, 99,199,142, 19, 6, 14, 28, 8,133, 66,129, 33, 67, +134, 64,171,213,222,184,120,241,226,210,148,148,148,153, 0, 42,125,118,134,181,181,245,236,185,115,231, 58, 20,234, 24,204,220, +254, 2,217,133, 69,190, 65, 42,164,241,191,247, 68,248,244,211,207, 44, 31, 60,120,176, 20,128,217, 6,203,222,222,126,225,162, + 69,139,236, 75,142,117, 97, 97, 33, 10, 11, 11, 81, 80, 80,128,194,194, 66, 12, 28, 56,208,226,249,243,231,171, 80, 52,187,179, +185,149, 75,224,130, 5, 11,196, 66,161, 16,199,142, 29,107,168,209,104,120, 6,131, 1,132, 16, 99,189,122,245,194, 62,251,236, + 51, 65, 84, 84, 84,115, 0,102, 25, 44,231, 84,240,243,212,234, 31,214,125,247,141, 61, 0,124, 57,229,251, 31, 0,117, 83, 98, +198, 50,231, 84, 4,133, 2,156,193,170, 24, 6,192,135,124, 62,191, 79,221,186,117, 3,159, 63,127,254,192,104, 52,254, 10,224, + 87,188,253,190,123,207,197,197,101, 97,114,114,242, 58, 0, 59,254, 43, 59,180, 78,157, 58,135,118,237,218,101,123,242,228,201, +158,243,231,207,255, 4,192,182,183,144,227, 3,104, 94,108,170,158, 22, 27, 43, 20, 27,173,122, 0,234, 0,184, 94,149, 27, 94, + 91,175, 22,114,240, 44,246, 52,111,217,182,213,199, 31,245, 86,216,219, 88, 66,169, 53, 33, 42, 54,181,230,217,147,135,218, 62, + 19, 72,110, 24,245,121,253,179,162,110, 20, 86, 85,179,125,135, 78,173, 58,188,215, 81, 97,105,105,133,172, 2, 3,162, 99, 19, +221, 67,206, 29,105, 77,243, 36, 87, 64, 25, 6,167,135,159, 83,113,167, 28, 71, 85, 48,171,147, 59, 69, 81,144,201,101,101,254, +102,105,105,137,118,237,218, 97,209,162, 69,124, 0,205,222,248,249,181,161,154, 38,147,206,121,230,255,198, 66,200, 35,162, 15, +186,118,166, 44, 44, 44,222, 90, 19, 0, 28,109,140, 29,155,122,171,219,166,133,141, 27, 20, 22,178,208, 95,167,201,253,221,147, + 78,165, 82, 41, 60, 61, 61, 49, 99,198, 12,179, 52,223, 1,127,184, 38, 33,196,197,215,215,183, 96,229,202,149,222,179,102,205, +178,214,104, 52, 50, 0, 53,124, 27,183,116,161,105,218, 77,167,211, 41,230,204,153, 99,247,221,119,223,121,219,219,219,231, 18, + 66,236,171,146, 78,103,103,231,149,139, 22, 45,154,184,101,203, 22, 42, 40, 40, 8, 10,133, 2,205,155, 55,199,246,237,219,233, +217,179,103, 79,117,118,118, 94, 98,102,222, 91, 7, 7, 7, 83, 44,128,156, 66, 35, 46, 45,110,130,235,223, 7, 65,165, 99,145, + 87, 80, 8,181, 90, 13,177, 88, 44,177,181,181,149, 87, 97,127, 54, 11, 12, 12,164, 0,188, 50, 85, 5, 5, 69,175,194, 66, 37, +116, 58, 61,104,154,182,112,119,119, 23, 85, 97,127, 58, 4, 7, 23,249, 79,141, 70,195,235,217,179, 39,186,119,239,142,130,130, + 2, 94,126,126, 62,116, 58, 29,104,154, 22, 20, 87,236,149,106,234,164,124,138, 37,172,163, 76, 42,177,147, 73, 37,118, 44, 97, + 29, 1,192,156,101, 58, 41,159,250,139,203,167, 61, 77,211,155,235,212,169,243,132,166,233,109, 0,156,222, 82, 51, 8,192, 34, +137, 68,114,222,199,199, 39, 65, 42,149, 94, 4,176,164,184, 2,174,142,166, 80, 42,149, 94, 92,180,104,209,254, 7, 15, 30,124, +114,225,194, 5,143, 71,143, 30,125,180,116,233,210, 61,114,185,188,228,193,188,213, 62, 55, 61, 60, 60, 54,221,190,125, 59,168, + 69,139, 22, 27, 1,136,222,209,249,206, 0,104, 92,108, 56,254, 22,215,144,210,184,186,186,214,109,220,184,177, 29,195, 48,104, +221,186, 53, 8, 33,173,223, 82,179, 5,128, 84, 0, 33, 0, 50,138,111,198, 76, 0, 50, 1, 92, 45,190, 81,105, 93, 37, 77,158, +197,158,175,190,158,220,101,210,216, 47, 20,161,113, 38,252,114, 54, 5,251,174,101, 32,169, 64,132, 78,189,134, 90,182,237, 54, +176, 51, 79, 96,185,167,170,154, 83,167, 78,239,242,197,144, 65,138,240,100, 26,251,175,103,226,218,211,124,168, 40,107,180,235, + 53,194,218, 55,184,235, 7, 20, 4, 91,255, 14,199,232, 63,160,249, 31,136, 96,109, 66,206,220, 81,248,110,209,250,159,103,210, + 20, 69,106,120,117,142,240,240,108,166,100, 89, 22,106,181, 26,122,189, 30,124, 62, 31,106,181, 26,113,113,113,184,125,251, 54, + 44, 45, 45,171,244,199,185,121,121,112,173,225, 1,169, 84,250, 78, 52,135,247,237,205,139, 79, 73,225,221, 8,189,212,100,239, +234, 93, 77,220,234,116,122,218,168,221,228,112,185,101, 77,117, 88, 88, 24,110,222,188,137,156,156, 28,148, 84,160,255, 6, 40, +138, 50, 44, 91,182, 44, 52, 57, 57, 25, 87,175, 94,109, 60,119,213,206, 90,225,249,117,120, 25,133,132,111, 47, 79,115,247,145, + 60, 51,229,100,103,199, 76,156, 56,241,162,179,179,179,110,236,216,177,109,205,209,117,117,117, 21, 83, 20,213,164,115,231,206, +255,251,236,179,207, 16, 27, 27,139, 73,147, 38,233,194,194,194,114,155, 52,105, 98,189,108,217, 50,193,136, 17, 35,112,227,198, +141,137,151, 46, 93, 58, 0,224,113, 82, 82, 82, 69,207, 82, 19,138,197, 98, 32,175,232, 70, 85,111, 36, 40,233, 22, 86, 88, 88, + 8,154,228, 66, 32, 16,208, 52, 77,219, 3, 48,235,206,147,101, 89,129, 80, 40,132, 82,169, 68, 97, 97, 33,146, 50, 10, 17,151, +166, 68,129, 82, 11,181,218, 0,173,134, 64,164,112,164, 13, 25, 25,182, 0,146,204,209, 36,132,208, 37,205,141, 58,157, 14,106, +181, 26, 58,157, 14, 58,157,238,213,227,124, 24,134, 81,184,186,186, 90, 36, 37, 37,229, 84, 90,155, 10, 37, 70,134, 22, 44,154, +190,224,135, 57, 0,192,208,130, 69,114,104, 88,115,150, 49, 66,137,241, 47, 44, 90, 34,123,123,251, 75,251,247,239,247,245,244, +244,196,203,151, 47,125, 62,254,248,227,166, 41, 41, 41,141, 1, 84,245, 46, 94, 74,211,244,119,159,125,246,217,152, 1, 3, 6, + 80, 94, 94, 94,224,241,120, 48, 26,141, 53, 94,188,120,209,126,223,190,125, 83, 54,109,218,244,139,201,100,154,104,238,177, 7, + 64, 11,133,194,189, 27, 54,108,104,211,180,105, 83,108,219,182, 13,119,238,220, 97,131,130,130,232, 79, 63,253, 20,238,238,238, +205, 62,253,244,211,131, 90,173,182,187, 57, 17,214, 50,112,111,222,188,185, 27,195, 48,104,209,162,133,224,198,141, 27, 1, 0, +110,188,109,192,185, 70,141, 26, 33,237,218,181,107,124,254,252,249,208,212,212,212,118, 85,200, 47,156,157,157,123, 57, 58, 58, + 46, 85, 40, 20,214,230,110, 83, 88, 88,168, 74, 75, 75,155,148,156,156,124,192,204,242,223,162, 65,131, 6, 48, 26,141,176,180, +180,132,147,147, 83, 43,138,162, 38, 90, 90, 90,126,152,159,159, 63, 33, 41, 41,233, 78, 21,242,235, 90,124, 3, 95,242, 92,192, + 90,197, 81, 43,160,232,121,150, 47, 1,196, 0,112, 1,224, 6, 51,154, 11,109,235,180,235,209,162,117,251, 86,173,155,250,211, +139, 15,196,194,196,178,224,193, 4, 30,195, 34,211,196, 7, 69, 81,112,247, 14, 98, 28,195,239, 53, 51,234,245, 61,178,162,206, + 31, 51, 71,179, 75,231,206,173,235,121,123,209,203, 15,199, 35, 55, 41,220,148,246,244, 98, 38, 69,211,168,221,168,147,157,187, +119, 99,166,110,227,247,248,105,177,225,237,245,117,219,116,204,121,113,229, 60,103, 27, 56,170, 99,176, 72,233, 59,171,217, 63, + 97,150,173, 21,106, 69,132, 63,164, 19, 82,117,202,135, 15, 31,194,214,214, 22, 14, 14, 14,176,176,176, 64,100,100, 36,206,159, + 63,143,103,207,158,129, 16,130,198,141, 27, 87,233,143,211, 82, 83,145,149, 93,240, 78, 53,107, 58, 59,163,166,179, 51, 47, 51, + 39, 23, 55, 31, 62,242, 61,246, 75,199,122,105,244,200, 45,106,181,250,213, 58, 6,195,191,175,213,197,193,193,193,244,229,151, + 99,179,134,255, 16, 83,167,127, 7, 87,166, 87,115, 39, 28,190,145,194,236,185,204,144,153,195, 26,102,190,120, 17,101,118,166, +107,214,172,185,176, 77,155, 54,223,240,120, 60,254,136, 17, 69,211,143,140, 27, 55, 78,251,232,209, 35,191,196,196,196, 24,173, + 86, 91,111,194,132, 9,143, 14, 30, 60,200,255,226,139, 47, 40,141, 70,115,135,207,231,147,144,144,144,121, 41, 41, 41,115,202, + 52, 26, 12,243, 32, 34, 34,162,150, 81,236, 2, 59, 5,141,206, 51, 67,139,106, 28, 17, 65,102, 90, 18, 30,191,184, 11,123,123, +123, 75, 59, 59,187,167,233,233,233,218,180,180,180,175, 98, 98, 98,182, 86,148, 78, 62,159,255,248,209,163, 71, 53, 28, 29, 29, + 81, 88, 88,136,132,116, 37, 54,223,164,160,210, 74, 0, 72,192, 64, 1,133,157,155,162, 54, 81,133, 89, 91, 91,235,117, 58,221, +212,231,207,159,239,168, 68, 51,231,201,147, 39, 50, 87, 87, 87, 48, 12,163,223,183,111,159, 64,167,211,129, 16, 98, 60,121,242, +100,191,220,220,220, 22,117,234,212,161,221,221,221,151,213,172, 89, 83,157,146,146, 50, 60, 54, 54,182,220, 7, 13,159, 30, 87, + 87,223,118,206,229, 31,115, 95, 38,236, 3, 0,215,166,190,217,199,231, 4,232,218,206, 41,172,116,217,233,113,117,255,202,126, +130,159, 79,159, 62,221,215,198,198, 6,163, 70,141,194,220,185,115, 49,107,214, 44,207, 81,163, 70,141, 0,176,178, 10, 58, 18, + 39, 39,167,187,171, 87,175,246,105,217,178, 37, 78,158, 60,137,221,187,119, 35, 38, 38,198,232,225,225,193,107,218,180, 41,102, +207,158,141,206,157, 59, 15, 31, 59,118,108,219,228,228,228, 0, 51, 77,199,208,217,179,103,247,106,213,170, 21,134, 12, 25,162, +189,124,249,242, 39, 0,206,158, 59,119,174, 67, 72, 72,200,129,157, 59,119, 74, 22, 45, 90,212,101,194,132, 9,163, 1,172,171, + 70,254,123,183,105,211, 6, 0,208,170, 85, 43, 44, 93,186,180,243, 91, 26, 44,161,173,173,237,137,109,219,182, 53,246,246,246, +198,224,193,131, 3, 62,249,228,147, 19, 57, 57, 57,157, 0,152,245,220, 72,103,103,231,239, 54,108,216, 80, 87, 34,145,152,253, +167, 58,157,206,102,228,200,145, 75,170, 98,176,252,253,253,113,249,242,101,116,236,216, 17,245,235,215,175, 59,114,228,200,101, +157, 59,119,198,215, 95,127,125,205,104, 52,186,164,165,165,153,251,160,103,119, 0, 37,207, 45,173, 9,192, 19, 69,205,129, 0, +208,180,248,253,101,177,217,170,103,142,193,130, 88,246,121,207,238,221, 21,191,222, 72,135,137,101,225,227, 42,134,111, 77, 11, +196,166,107, 16,155,148, 5, 62,165,135, 66, 34, 66,131, 22, 31, 88,103,167,197,126, 14,115,186, 7,136,164,159,247,238,217, 93, +126,232,102, 58,114,147, 30,147,184,187,251, 46, 26, 52,202,225, 0, 16,113,101,199, 79,142,214,226, 78, 94,141,154, 48,170,214, +189,172, 67, 14,175,255, 60, 7,224, 12,214, 31, 15,169, 66,148,247,159, 23,193, 42, 33, 43, 23,106, 91, 39, 95, 36,164, 62, 40, +250,158,149,133,172,172, 44,212,174, 93, 27,107,214,172,121,109,221,234, 62,129,254,143,208,180,179,182, 66,207,246,109,153,240, +200,245,140,154, 85,191, 19,205,191,109, 73, 36,132, 80, 20, 69,197,101, 26,172, 50,243, 13,130,126,237,221, 8,159,161,209,191, +125, 77,106,221,177, 56, 65,166, 90,106,197, 48, 12, 77, 8,169,244, 78, 62, 32, 32,128,239,239,239,255,205,166, 77,155,248, 41, + 41, 41,176,178,178,130,193, 96,192,131, 7, 15,146, 83, 82, 82, 98, 0, 32, 53, 53, 53,242,206,157, 59,105, 38,147,169,134,143, +143, 15, 70,142, 28,137,122,245,234, 81, 19, 39, 78,156,178,119,239,222,121, 40, 99,196, 98, 90, 90,218,162, 25, 51,102,180, 89, +184,116,141,237,160,166, 20,148, 42, 29, 10, 11, 11, 17, 27,245, 24,164, 80,135,229,203, 87, 64, 34,145, 80, 0, 4, 25, 25, 25, +130, 57,115,102,111,180,178,178,234,126,255,254,253, 62,229, 26,244,180,180, 5,179,103,207, 14, 94,190,124,185, 77, 97, 97, 33, +212, 26, 13, 10,212, 66,220, 94, 81, 20,161,108, 58,225, 14,214,125,191,140,246,119,151,217, 22, 22, 22,226,155,111,190, 89, 45, +149, 74,155,133,133,133,141, 41, 79, 51, 41, 41, 41,108,250,244,233,246,107,215,174, 21,213,171, 87,239, 81,126,126, 62,114,114, +114,232,131, 7, 15,206,119,119,119,183, 89,189,122, 13, 37,149, 74, 1, 0, 9, 9, 9,130,153, 51,103,236,149,203,229, 59,195, +195,195,135,148,119,120, 66,230,180,211, 2, 36,197,197,165,118, 93,213, 77,122,142,139,139,230, 90,200,156,228,237, 0, 73, 41, +142, 67, 18, 39, 39,167, 65,241,219, 68,173,180, 90,118, 85,106,106,220, 51,224,175,125,168,172,157,157,221,216, 94,189,122, 97, +201,146, 37, 56,118,236,216, 4, 27, 27,155, 21,115,231,206,133,139,139,203,151,201,201,201,171,138, 47,128,230,240,253,202,149, + 43,125,124,124,124,240,217,103,159,233,206,159, 63, 63, 29,192, 97, 0,113, 87,175, 94,173,185,117,235,214, 30,123,247,238, 93, +178,122,245,106,241,218,181,107,235,126,244,209, 71,171, 88,150, 29, 86,153,168,163,163,227,215, 3, 6, 12,192,178,101,203,112, +249,242,229,143, 0,156, 44,254,233,212,245,235,215,123, 44, 90,180,232,194,204,153, 51,177,114,229,202,241,137,137,137, 85, 53, + 88,114, 95, 95,223,111,187,116,233,130,171, 87,175,162,117,235,214,104,222,188,249,132,155, 55,111,174, 65, 81,211, 86, 85,161, +229,114,249,222, 45, 91,182,180,174, 85,171, 22, 22, 44, 88,128,111,190,249, 6,155, 54,109,106, 61,120,240,224,189, 74,165,178, + 15,204, 24,229, 43,151,203,229, 18,137, 4, 75,150, 44, 33,241,241,241,149, 70, 79,157,157,157,173,191,253,246, 91,202,210,188, +102, 0,198,197,197,197,210,209,209,177,141,147,147, 19, 86,175, 94, 13, 7, 7, 7, 76,152, 48, 1,182,182,182, 80, 42,149,232, +211,167, 15,255,214,173, 91,253, 1,172, 49, 51,223,182, 0, 74, 34, 94,190,197,230,170,160,248,251, 45, 0,173,138, 13, 86, 54, + 0, 27,179,118, 36, 33,254,214, 86, 22, 72,126,148, 6, 30,140,240,169,169,192,189, 23, 74,232, 77, 4, 82,153, 28,202,130, 92, + 52,170,107,143,124, 85, 13, 0,172, 89,147, 96, 10, 24,186,137, 80, 36, 65,122,126, 30, 82,159, 92,200,210,155,180, 35,243, 94, + 94, 79, 0, 0,235,218,173, 71, 62,190,125,250, 94,159,174,173, 29, 50,114,106,130, 16, 54, 24, 28, 28, 85, 57,249, 43, 91,129, +101,127,127,238,151,142, 8,149,160,215,191,221, 13,247, 31,161, 89, 22,127,132,230,223,193,103,185, 90,243,242,100, 98,218,120, +238, 94,186,201, 96, 52,225,204,189, 84,147, 84, 68, 25,173, 69,186,124,150,101,205,170, 16, 67, 67, 67, 13, 87,175, 94,221, 54, +109,218, 52,172, 92,185, 18,209,209,209,224,243,249,240,246,246,118,172, 81,163,134,115,241,133,219,173,126,253,250,118, 12,195, +224,197,139, 23,216,189,123, 55,230,204,153, 67,238,223,191,191,169,188,138, 34, 37, 37,229, 65, 90, 90,218,134,197,243,166,231, +242,181,201,144,154, 50, 96,202,141, 6,223,148,135,177, 19,166,225,101,166, 9, 15, 94, 22,224,193,203, 2,164,170,197,248,118, +193,114,198,211,211,179,135,171,171,107,231,242,210,154,156,156,124, 43, 37, 37,101,251,172, 89,179,242, 50, 51, 51, 95,149, 31, +189,145,133,222,200,190, 89, 57, 97,241,226,197, 86,206,206,206,253, 92, 92, 92,218,149,167,153,145,145,145,158,156,156,252, 98, +218,180,105,250,140,140, 12,228,231,231,227,244,233,211, 31,213,174, 93,219,102,226,180,121,212,203, 76,242, 42,157,121,172, 21, +150,173,249,133,169, 83,167,206, 64,103,103,231, 10,251, 17,185,184,184,214,245,245,173,179,255,214,173, 91, 67,234,214,173, 59, +166,196, 88,149, 24, 41, 15, 15,143, 81,247,239,223, 31,218,184,177,223,126, 71, 71,167,122,127,113, 89,106,223,175, 95,191,122, + 44,203, 98,255,254,253,143, 0,172, 60,116,232,208, 93,173, 86,139,254,253,251,123, 0,232, 98,166, 78,208,192,129, 3,199,180, +110,221, 26,227,199,143,215,159, 63,127,190, 9,128, 21, 40, 26, 61, 70, 0,196, 1, 88, 19, 18, 18,210,104,236,216,177,218,224, +224, 96, 12, 25, 50,100, 40,202,239,147, 83, 66,139, 1, 3, 6,248,176, 44,139, 61,123,246, 60, 44,101,174, 74,184,120,224,192, +129, 91, 58,157, 14,131, 6, 13,170, 13,160, 67, 21,242, 46, 16,137, 68,251,231,207,159,111,149,148,148,132, 79, 63,253, 84, 27, + 25, 25,137, 57,115,230, 72, 44, 45, 45, 79, 2,144, 87,117,103,138, 68,162,159,215,175, 95,223,171, 65,131, 6, 24, 61,122,180, +238,199, 31,127, 28, 55,102,204, 24, 93,147, 38, 77,240,195, 15, 63,244, 18, 10,133, 85,122, 4, 72, 90, 90, 90,110, 72, 72,136, +109,101,175,212,212,212, 52,115,244,220,220,220,172,234,215,175,255, 40, 40, 40, 40,179, 97,195,134,117, 0,224,241,227,199, 25, +251,247,239, 39,182,182,182, 56,125,250, 52,126,254,249,103,180,108,217, 18, 10,133,162,127, 21,163, 16,164,212,231,178,126,127, +115,189,138,161, 40,146,167, 50,130, 71,211,224, 51, 4,113,105, 26,232, 77, 4, 2, 62, 13, 62, 3,240,104, 2, 91, 5, 31,124, + 62, 3,115,111, 82,104,138, 66,142,210, 0, 30, 67,129, 47, 20, 80,180,209,244, 42, 68, 72,243, 76, 18,145, 88, 68, 57, 88, 10, + 32,224, 81,160, 40,112,112,188,187, 8, 22, 0,152, 76,191, 15,124,148, 21, 5,210,233,116,111,149,144, 63, 66,179, 44,254, 8, +205,191,146,252,252,124, 94, 72, 72,136, 37,159,207,151,117,111,208, 50,235,187,125, 81,118,115,119, 61,131,144, 1,213,163, 33, +157,114,249,210,121, 42, 39, 39,199,218,211,211, 51,199, 28,189,152,152,152,225,219,183,111, 95, 64,211,116,176,201,100,218,183, +114,229, 74,172, 91,183, 78, 58,106,212,168, 72,147,201,148,228,229,229,229,182,106,213, 42, 17, 0,108,223,190, 29,103,206,156, +233,205,231,243,239,196,199,199,167, 86,164,251,240,225,195,153,185,185,185, 55, 98, 98, 98,214, 80, 20,101,165, 80, 40,172, 15, + 29, 58, 68,165,228,234, 48,115,123,244,171,145,133, 50, 17,131,105, 31,218,163,111,223,143,121,207,159, 63,255, 62, 41, 41,233, + 76,121,154, 15, 30, 60,152,144,155,155, 27, 18, 21, 21,181, 82, 96,235,109, 43,246, 31,161,232, 48,173,168,249,209,217, 70, 4, +186,248,130,152,151,151,135,204,204, 76, 12, 29, 58,212,106,225,194,133, 83,146,147,147, 47,151,167, 25, 22, 22,118, 43, 47, 47, + 47, 37, 42, 42,170, 25, 33, 68,104,105,105,217,114,229,202,149, 84, 92,182, 14, 83,183,190, 64,129,166, 40,157, 10, 49, 31,243, + 6,212,192,144, 33, 67,120, 47, 95,190,252, 46, 37, 37,165, 85,217,230,202,197,211,215,215,119,255,174, 93,187,124, 87,173, 90, +149,253,252,249,115,165,179,179,243,220,210,235,196,198,198,106, 23, 47, 94,156,181,125,251,118,239, 79, 63,253,116,127,104,104, +232, 39,213,157, 82,227,109,177,176,176, 88, 50,114,228, 72,236,221,187, 23, 57, 57, 57,171,138,203,216,202, 93,187,118,237, 25, + 62,124, 56,182,111,223,190, 36, 35, 35,227,180, 25,149, 98,215,254,253,251,227,212,169, 83,184,112,225,194,183, 0, 34,202, 89, + 47,234,234,213,171, 83,142, 28, 57,178,122,192,128, 1,216,188,121,115, 23, 20,117,128, 46,143, 78,157, 59,119,198,201,147, 39, +145,149,149,245, 67, 89, 43,228,230,230,254,120,244,232,209,102,157, 59,119,198,226,197,139, 59, 1,184,104, 70,214,125, 44, 45, + 45,183,172, 94,189, 58,168, 65,131, 6, 24, 56,112,160, 70,175,215,119,249,230,155,111,142,237,222,189, 91,177,109,219,182,192, + 17, 35, 70,220, 78, 79, 79,255,162, 56, 2, 83,121,229, 77,211,139,150, 47, 95, 62,172, 93,187,118,152, 48, 97,130,241,204,153, + 51, 61, 1,156, 61,125,250,244,139,201,147, 39,159, 88,190,124, 57,179,108,217,178, 97, 95,125,245, 85, 6,203,178,211,255,138, +227, 77, 81,212,178,229,203,151,251,250,249,249, 65,163,209, 32, 58, 58, 26,105,105,105,187, 78,159, 62,125, 54, 60, 60,124,105, +106,106,234, 65, 71, 71,199,225, 19, 38, 76,168, 17, 20, 20, 20,164, 84, 42,173,205,233,127, 88, 42, 50,149, 14,224, 9,138, 6, + 22,149,236,183,166, 40,106, 26, 4,138, 70, 20,230,152,153,216, 71, 81, 47,147,106, 91,203, 45,144,195, 10,241, 50, 41, 19, 18, +153, 12, 52,161, 97, 84,231,192,211,221, 1, 44, 1,242, 51,147, 64,211,212, 35,115, 36, 13, 38,246,126,108, 66,154,171,149, 76, + 12,207, 38,221,108, 31, 94,220,188,195,162,118,203, 17, 60,134, 98,248, 66,249,134,129, 3, 62,179, 51,152, 8, 10,115, 82, 64, + 49,244, 29,112,112,188,235, 8,214,155,237,254,111, 70,129, 36, 18, 9,180,218,170, 77,151,242, 71,104,154,243,159,239, 90,243, +175,196, 96, 48, 40,198,140, 25,211, 42, 49, 49,209,194,219,219,251, 69,183, 32,251,155,155,198,213,190,217,212, 34, 66, 53,227, + 3,234,166,155, 56,237,174, 72, 36,138,207,201,201, 17,110,223,190, 61,192, 96, 48, 72,205,209, 77, 77, 77,141, 79, 78, 78,222, +127,224,192,129, 29,199,143, 31, 71,189,122,245,112,229,202, 21, 69, 84, 84,148,207,165, 75,151,100,158,158,158, 56,120,240, 32, +142, 30, 61,250, 75, 74, 74,202,145,202,204, 85, 9,241,241,241,167,195,194,194,234,102,101,101,213,181,178,178, 50, 88, 89, 89, +225,205,145,133, 74,173, 9,185,249, 5,176,178,178,130, 84, 42,245,168, 76, 51, 54, 54,246,216,195,135, 15,107,195,198,167, 53, + 19,179, 43,239,199, 47,235,225,199, 47,235, 97,254,224, 58,112,178, 22, 34, 55, 55, 23, 25, 25, 25,200,200,200, 0, 33, 4, 38, +147,201,215, 12,205,248,176,176,176,189, 73, 73, 73,231,237,237,237, 41,185, 92, 14, 2, 32,167, 80,143,235, 75,131,112,125,105, + 16,114, 10,245, 40, 40, 84,194,213,213, 21, 10,133,162,204,230, 8,107,107,107, 5, 33,100,235,198,141, 27,125, 20, 10, 5, 51, +124,248,112,171,155, 55,111,182,186,121,243,230,212, 55, 94,173,190,252,242, 75,107,169, 84,202,108,222,188,217,139, 97,152, 45, +238,238,238,150,127,114,113, 98, 0,252,111,248,240,225,129, 98,177, 24,235,214,173,139, 1,176,179,248,183,253, 63,254,248, 99, + 36, 0,140, 27, 55,174, 62,128, 9,168,120, 36, 37, 4, 2, 65, 19, 95, 95, 95,220,188,121, 19, 0, 14, 85,242,223, 7,110,220, +184, 1, 79, 79, 79,136,197,226,160, 74,214,245,112,115,115, 67,100,100, 36, 0, 60, 40,207,123, 71, 70, 70,194,205,205, 13, 20, + 69,121,152,145,247, 94,239,191,255,254,163, 75,151, 46, 5,181,104,209, 2,195,134, 13,211,221,190,125,187, 27,128, 43, 15, 30, + 60,104, 63,104,208, 32,165,151,151, 23, 66, 66, 66,124, 6, 13, 26,116,131,166,233, 5,102,104, 14,157, 55,111,222,180,222,189, +123, 99,222,188,121,100,223,190,125, 3, 1,156, 45,254,237,204,158, 61,123, 62, 93,184,112, 33,233,211,167, 15,230,206,157, 59, + 13,192,232,138,196, 84, 42, 85,158,201,100,130, 74,165, 50,235, 14,209,220,245,107,215,174,221,213,207,207, 15, 71,142, 28,129, + 80, 40,196,185,115,231, 64,211,244,137,212,212,212,179,247,239,223,111,144,156,156, 60, 63, 37, 37,229,192,139, 23, 47,208,186, +117,107,218,100, 50,245, 49,179, 60,189, 4,208,160,248,115, 2,138,250, 99,181, 0,208, 18, 64, 84,113, 36, 19, 40,122,158,221, + 75,115, 4, 89, 93,225,182, 11, 39, 15,228, 89,203, 5,176,179,150,193,209,206, 2,140, 65, 9,232,114, 81,215,221, 17,193,190, + 78,120,153,174,195,141,243,251,115, 85,133, 42,179,166,151, 48,233,149, 91, 46,156, 62,146,103, 35, 23,160, 86, 93, 63,244, 24, + 56,190,177, 79,131,166,231,252, 3, 90,157,153, 57,123, 81,195,247, 91,249, 82, 17, 9, 26,220,186,112, 56, 71, 85,144,191,133, +179, 12, 28,213,141, 96,149, 21, 0, 77,159, 48, 97,130,195,196,137, 19, 97, 97, 97,129,172,172, 44, 24, 12,134, 87,209, 38,145, + 72, 4, 43, 43, 43,100,101,101, 97,207,158, 61, 40,190, 91, 41,255, 10,206, 8, 83, 22,252,176,214,141, 98,100, 58,145, 68, 74, +108,164,111,175, 9, 0, 58, 3, 47,125,253,158,131, 54, 93,219, 52,231,213,116,118,254,221,239,213,209,252,135, 24,172,115,169, +169,169,129,245,234,213, 75,117,119,119, 87,107, 52, 26, 16,181,186,224,228,158, 85,117,220, 44, 71, 71,211, 52, 77, 36, 18, 9, +107,101,101,165,140,142,142,166,140, 70,227,165,170,232, 19, 66, 70,141, 26, 53,138,190,122,245,234,192,193,131, 7,163, 86,173, + 90,120,240,224, 1,182,111,223,142, 3, 7, 14,108, 21, 8, 4,227,170,147,238,132,132,132, 66, 95, 95,223,215, 34, 32,111,142, + 44, 52,104, 51,192,178,172,217,157,243,115, 66,183, 63, 99,236,236, 12,245,107,254, 54,157, 72, 78, 78, 14, 50, 50, 51,145,145, +145,129,204,226,119, 66,136,217, 33, 76,138,162, 10,116, 58,221, 27,233,252,173,249, 81,169, 84, 66,175, 77,135,201,100, 42, 83, + 51, 39, 39,167,192,217,217,121,237,154, 53,107,150,207,159, 63,223, 97,229,202,149,217, 79,159, 62,205,167,105, 90,243,198, 77, +140,184,110,221,186,138,101,203,150, 57,174, 89,179, 38,155,101,217,181,113,113,113,121,127, 98, 81,234,221,160, 65,131,173, 93, +187,118, 85,140, 25, 51, 6,107,214,172, 65, 74, 74,202, 84, 0, 37, 35, 25,217,204,204,204,201, 63,252,240,195,241, 41, 83,166, + 64,175,215, 47, 59,121,242,228,220,208,208,208, 81,165, 76,216,107,216,219,219,215,224,241,120, 8, 13, 13,205, 7, 16, 93,153, +167, 15, 13, 13, 77,163, 40,202,209,217,217,185, 78, 76, 76, 76,185, 43,218,216,216,212, 85, 40, 20, 72, 74, 74, 66, 5, 21,115, +108,114,114, 50, 17, 10,133,148,139,139,139,103,241,186,229, 98,109,109, 61,121,227,198,141,188, 75,151, 46, 97,246,236,217,137, +113,113,113,131, 74, 69,209, 66,239,223,191,223,186,125,251,246,187,167, 76,153,226,253,221,119,223, 81,145,145,145,163, 67, 67, + 67,103, 86,164,233,238,238, 62,106,232,208,161, 88,187,118, 45, 54,108,216, 48, 26,192,254, 55, 86,217,253,195, 15, 63, 88,219, +218,218,174, 29, 57,114, 36,182,108,217, 50,232,229,203,151,235,203,211, 75, 74, 74,154,210,175, 95,191, 89,217,217,217,139,204, + 57,160,230,172,239,236,236,220, 51, 48, 48,208,145, 16,130, 53,107,214,164,174, 93,187, 86,149,159,159,191, 51, 37, 37,229,210, + 27,145,184,131,167, 79,159,158, 48,102,204, 24, 92,186,116,105, 93, 72, 72, 8, 73, 73, 73,217, 88, 73, 18, 82, 80, 52,207,149, +111,113, 4, 43, 1,191,239,200,238, 93,252,158,104, 78,158,178,162, 46, 31, 99,248,226,235, 97,119, 46,191,239, 81,191, 53,223, +193, 90, 1, 87, 79, 59,216,200, 5, 32, 0,194,227,212,184,117,229,172, 33, 61, 37,254,134, 57, 35, 8, 75, 52,159, 11, 36, 55, +164,118,238,239,215,246,107,197,243,240,244, 66,167,150, 13,173,109, 45,248,208, 25, 8,206,133,229,225,102,200, 41, 67,122, 90, +194, 37,110, 4,225,159, 23, 88,253, 47, 69,184, 90,243,120,188,239, 39, 79,158,188,225,201,147, 39, 27,162,162,162, 54,132,134, +134,110, 88,176, 96,193,134, 57,115,230,108, 8, 12, 12,220, 64,211,244,247, 40,234, 59,241,102, 68,204,255,207,208,108,219, 22, +188,129, 93,176, 96,222, 40,158,106,251, 2, 55, 67,198,149, 79, 8,121, 60,154,204, 27, 5,242, 22,233,124, 91,254, 44,205,250, + 60, 30,239,180,187,187,251,173,109,219,182,237, 13, 13, 13,221,108, 99, 99,147,188, 96,193,130,141,227,198,141,219,227,228,228, +116,135,207,231,159, 7,208,176,186,233,116,116,116,252,104,240,224,193,228,212,169, 83,164,111,223,190,196,197,197,165,219,219, +230,189, 89,179,102,169,225,225,225,228, 73,130,146,124,180, 48,140,180,156,116,151,180,156,116,151,116,153,121,135,252,180,251, + 44,153, 61,123, 14,241,247,247, 63, 95, 21,205, 70,141, 26, 69,165,167,167, 19, 66, 8,201,206,206, 38,145,145,145,228,234,213, +171,228,224,193,131,100,195,134, 13,100,209,162, 69,108,195,134, 13,183, 86, 69,179,121,243,230,217,207,159, 63, 39, 17,241, 74, +210,123,254,195,226,116,222, 33,221,103,223, 39,123, 78,220, 34,243,230,205, 35,126,126,126,251, 42,210,116,118,118,238, 63,105, +210,164,148,236,236,108, 67, 80, 80, 80,200,155,191, 7, 4, 4, 28,206,204,204, 52,204,152, 49, 35,205,197,197,229,179, 63,187, + 44,217,218,218, 94, 79, 76, 76, 36, 49, 49, 49,228,155,111,190, 33, 12,195,148, 89,121,210, 52,189,110,252,248,241, 36, 58, 58, +154, 36, 39, 39, 19,103,103,231, 7, 21,164,179,187,131,131,195, 61, 0,189,205, 76, 79,119, 7, 7,135, 59, 0,250, 84,148,247, +154, 53,107, 70, 36, 38, 38, 18, 63, 63,191,236,138,196, 60, 61, 61, 19, 18, 19, 19,137,151,151, 87,146, 25,251,243, 3, 71, 71, +199,251, 0, 22, 2, 16, 87,112, 51,250,181,147,147,211,117, 0,255, 51, 67,179,151,183,183,119, 40,128,177,149,228,123,132,135, +135, 71, 24,128, 15,254,236,227, 94,191,126,253,155, 73, 73, 73,228,151, 95,126, 33,206,206,206, 83, 42,218,168, 86,173, 90, 71, +142, 29, 59, 70, 82, 82, 82, 72,227,198,141, 67,205, 76, 39, 15, 64, 91, 20,245,131,115, 66,209,196,163,124, 0,142, 0,218, 1, +104,143,162, 39,112,152,125, 13,177,245,106, 33,119,244,239,122,220,239,253,177,217, 67, 22, 95, 34, 83,182,190, 32,223,238,140, + 33,227,215, 92, 35, 65,221,199,103,187, 52,252,224,184,173, 87, 11,121, 85, 53,157, 27,116, 59,209,176,219,215,217,159, 47,190, + 64,166,111,139, 38,115,118,199,144,175, 86,133,144,224,158,227,179,106, 52,236,113,200,193,191,147,244, 47,190,206,255, 87, 52, +203, 60, 71,254,137,230,137, 16,243,199, 42, 9, 1,124,160, 80, 40,214,204,158, 61,123,195,237,219,183, 55,116,239,222,125,131, + 80, 40, 92, 83,124, 97, 16, 86,227, 0,188,115,205, 46,193, 80, 12,237, 73,111,158, 63,154,167, 63,188,178,158, 97,222, 40,144, +119,144,206,127, 74,129,110,197,231,243,111, 54,104,208,224,146, 66,161,200,168, 85,171,214, 85, 62,159,127, 7, 64,155,183, 77, +167,163,163,163,221,176, 97,195,216,151, 47, 95,146,207, 62,251,140,152,209,124, 85,169,166,155,155, 91,135, 62,125,250, 24, 18, + 82,115,201,213,176, 4,114,252, 74, 4,217,117,252, 38,217,176,251, 44, 89,181,126, 43,233,212,169,147,214,209,209,209,189, 42, +154, 53,107,214,236,210,179,103,207,220,204,204, 76, 18, 25, 25, 73,174, 92,185,242,202, 92,173, 95,191,158, 52,108,216, 48,203, +213,213,213,165, 42,154,238,238,238,189, 6, 13, 26,100, 72,201, 82,146,219, 17,169,228,220,237, 23,228,240,197,135,100,247,241, +155,100,235,238, 67,164,109,219,182, 26, 59, 59, 59,199,202, 52,157,157,157,251,125,242,201, 39,207,189,189,189,127, 42,195, 12, +252,240,201, 39,159,196,185,184,184,124,250, 23,149,165, 46,174,174,174,145, 2,129,224, 4,128, 79, 43,217,174, 63,143,199, 59, +230,228,228,116, 23,192,135,127, 65,153,239,238,224,224,112, 11, 64, 79, 51, 12,219,173,114, 12, 30, 87, 41, 22,149,201,238,141, + 26, 53, 10,115,114,114, 90,142, 74,154,124, 93, 93, 93,197,206,206,206,223, 55,110,220,248,166,147,147, 83,159, 42,166,179, 70, +241,141,109,175,226, 87,107, 20,205,125, 85,237,188,219,122,117,236,225,218,184,231, 97,151,134, 31,196,185, 52,236, 30, 87, 35, +160,215, 97, 91,175,142, 61,222, 86,179, 70, 64,175, 35, 46,141,186,199,215,104,212, 35,182,102, 64,175,195,118,245, 58,118,229, +204, 16,103,176,254,104,131, 85,130, 28, 64,127,154,166,215, 1,232,143,202, 71,213,248,255, 21,154, 93,218,194,117, 76, 95,230, +228,212, 33,252,140,119,152,206,127, 74,129,238,197,227,241,110, 20, 95,200,222, 89, 58, 61, 61, 61, 55,142, 28, 57,210, 84,179, +102,205,181,239, 74,211,215,215,119,121,143, 30, 61,244, 63,255,252, 51, 57,122,244, 40,217,184,113, 35,249,230,155,111, 72,187, +118,237,180,222,222,222, 67,170,163,217,160, 65,131,249, 29, 58,116,200,220,179,103, 15,217,187,119, 47, 89,183,110, 29, 89,180, +104, 17,219,184,113,227,116,111,111,239,238,213,209,244,247,247,255,185, 87,175, 94,250,109,219,182,145,139, 23, 47,146,189,123, +247,146,153, 51,103,146,182,109,219,106,188,188,188, 62, 50, 87,179, 78,157, 58,229, 25,124, 4, 4, 4,240,185, 11, 46,167,201, +105,114,154,156,193,250,239, 26,172, 18,120,127,192, 1,248,167,104,254,103, 79, 18,103,103,103,201,187,214,116,113,113,105, 88, +191,126,253, 11, 77,155, 54,205, 9, 10, 10, 74,247,247,247, 63,232,236,236,236,246,150,233,108, 28, 16, 16,176,191,113,227,198, +207, 3, 2, 2, 30, 55,104,208,224,167,146,105, 38,222, 34,157, 77, 27, 52,104,112, 57, 56, 56, 56, 55, 40, 40, 40,205,207,207, +111,207, 27,145, 43,174, 44,113,154,156, 38,167,201,105,114, 6,235,149,193,226, 85,115,219, 63,226, 49, 30,255, 20,205,255, 44, + 41, 41, 41,234,119,173,153,156,156,252, 48, 57, 57,249,189,119,156,206, 7, 41, 41, 41, 31,191,227,116,222, 78, 78, 78,110,199, +149, 2, 14, 14, 14, 14, 14,115,160,185, 93,192,193,193,193,193,193,193,193,241,110,161, 80,126,152,175, 42, 79,202,174, 78,168, + 48,156,211,228, 52, 57, 77, 78,147,211,228, 52, 57,205,255,156,230,155,218,111,246,101,125,115,244,239,207,248,135,241, 54,125, +176,254, 72,227,197,105,114,154,156, 38,167,201,105,114,154,156,230,127, 79,243, 95, 3, 33,132,107, 34,228,224,224,224,224,224, +224,224,120,215,112, 6,139,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, 28, 28, 28,156,193,226,224,224,224,224, +224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,199,223,130,178, 70, 17, 18,110,183, +112,112,112,112,112,112,112,252,149,254,228,223,144, 9,174,137,144,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, + 28, 28, 28,255, 12,131,197, 53, 13,114,112,112,112,112,112,112,252,149,252, 43,189, 72,219,226,140,181,229,142, 47, 7, 7, 7, + 7, 7, 7, 7,231, 69,222,194, 41, 18, 46,110,197,193,193,193,193,193,193,193,241,206, 13, 22,215, 7,139,131,131,131,131,131, +131,131,227, 29,243, 71, 27, 44,238, 73,227,156, 38,167,201,105,114,154,156, 38,167,201,105,114, 6,139,131,131,131,131,131,131, +131,131,131, 51, 88, 28, 28, 28, 28, 28, 28, 28, 28,156,193,226,224,224,224,224,224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, + 7, 7, 7,103,176, 56, 56, 56, 56, 56, 56, 56, 56,254, 42, 40,148, 63, 18, 32,188, 10, 58,213, 25, 77, 16,206,105,114,154,156, + 38,167,201,105,114,154,156,230,127, 78,179, 50,237,112,252,195,249, 51, 38, 26,229,134,176,114,154,156, 38,167,201,105,114,154, +156, 38,167,249,159,130, 16, 2, 30,183, 27, 56, 56,254,225, 39,242,126, 48,112,168,231, 1,150,184,128, 39, 76,193,197, 71,209, +212, 28,176,111,173,233,226,231, 14,157,193, 17, 18,113, 6,206, 60,140,121, 91, 77, 14, 14, 14,142,255, 18,156,193,226,224,248, +167,227,236,227, 13, 19, 22,131,129, 51,136,254, 5, 90,250, 45, 6, 34,222, 46,196,110,235,227, 13, 3,187, 0, 60,186, 6,116, +250,103,104, 83,111, 9, 16, 25,193,237,108, 14, 14, 14, 14,243,248, 75, 58,185, 7, 6, 6,222, 15, 12, 12,156,223,182,109, 91, + 17,119, 8, 56,254, 40,218,182,109, 43, 10, 12, 12,156, 31, 24, 24,120,255,223,154, 71,242,200, 95, 10,163,169,171,206,192,186, +158,190,145,235,160,210,152,188, 33, 48,118, 35,215,189,228,111,165,201,167,222,215, 24,216,154, 59,206,169, 28,149, 26,163, 47, +104,188,149,102, 9,245,235,215,183, 10, 10, 10, 58,221,168, 81, 35, 59,174,132,114,112,112,112, 6,235, 29,195,178,108,128,131, +131,195, 4,181, 90, 29,215,164, 73,147,158,255,165, 29,222,180,105,211, 27,205,154, 53, 75,107,222,188,121, 90,243,230,205, 67, + 43, 91,254,111,196,217,217,217,219,223,223, 63,206,207,207,239, 89,233,229,246, 13, 63,108,225,211,250,211,217,182,126,189,218, +190,237,127, 52,105,210,164,167, 90,173,142,115,112,112,152,192,178,108,192,191,118,103, 42, 89, 71,208, 76,251,136, 88,149, 52, + 53,215,224,120, 63, 82,165, 0, 97,218, 65, 15,231,183,210,100, 73,135,176, 23,106,217,205,104,123,199,171,225, 90, 11, 16,186, + 61, 8,229,244,182,201, 21, 10,133,163, 9, 33,157,248,124,254,120,238,242,251,159,199, 31, 64, 79, 0, 65,239, 80,243,187,122, +245,234, 37, 1,248,138,219,189, 28,255, 24,131,213,215, 3, 45, 7,212, 70,200, 39, 30, 40,232, 87, 27,133,131,106,227,218, 71, +117, 80,237,138,240,224,193,131,146,237,219,183, 59,248,249,249,237, 9, 14, 14,190,214,164, 73, 19,175,234,232, 4, 6, 6,158, + 14, 12, 12,252,248,205,101, 77,154, 52,233, 87,122, 89, 80, 80,208,227,160,160,160,188,192,192,192,104,115,116, 3, 2, 2,158, + 7, 4, 4, 40, 3, 3, 3,159,191, 81,113,247, 11, 10, 10, 58,253,198,255,125,252,230,178,114,119, 56, 77,215, 56,118,236,152, +195,137, 19, 39, 28,120, 60,158,227,155,203,143, 31, 63,254,218,242,106,236,143,225,129,129,129, 55,222,200,203, 23,111, 46,171, +196,156,220, 8, 8, 8,248,226, 13,221, 27,129,129,129,195,223,133,185,106,211,166,205,181, 7, 15, 30,212, 84, 40, 20, 86,165, +127,115,178,181,234,124,227,248, 15, 19,134,124,252,254,104,123,223,222, 13,170,105,172,188,130,131,131,175,249,249,249,237,217, +190,125,187,195,193,131, 7, 37,255,214,147,151, 60,241, 21,192,200,182, 97, 89, 98, 31, 17,173,177,239,246, 65, 95, 94,216,115, +181,189,193,104,178, 1,197,180, 35,151,221, 69,213,210, 52, 24, 90,179,132, 56, 94, 8, 19,216,183,235,241, 37,115,233, 17,207, +222, 96, 50,217,194,128,182,213,209, 44, 85, 14,249, 12,195, 76, 24, 57,114, 36, 77, 81,212,151,117,234,212, 17,254,151, 46,182, +193,254,112,237,208,132,185, 19,224,139,150,239, 80,182,190, 84, 42,189, 7,192,251, 31,182, 59, 2, 0, 72, 1, 28, 5,224,136, +119,211, 93,101,229,188,121,243, 38,135,135,135,187,212,174, 93,123, 46, 0,134,171,226, 57,254,246, 6,171,159, 7,230, 56, 58, +185,158,157,177,114, 87,155,141, 33, 49,242, 31,143,133,202, 38, 76, 89,212,210,201,218,254,228,160, 58, 88, 82,193,166,225, 21, +220,201, 34, 58, 58, 26,107,214,172, 17,207,153, 51,167,133,165,165,229,195,224,224,224, 85,190,190,190,178, 74,146,243,154, 38, + 33,164, 37,159,207,223, 24, 28, 28,188,165,228,130, 77, 81, 84, 75,145, 72,244,115,112,112,240,142,146,102,200, 38, 77,154,212, +190,115,231,142, 5, 69, 81,142,230,164, 51, 56, 56,216,249,254,253,251, 82,160, 40, 18,208,182,109, 91, 81, 80, 80,208,118, 87, + 87,215, 13, 64,209, 5,178, 78,157, 58,194,224,224,224, 45,110,110,110,191, 80, 20,213,210,156,188,211, 52, 13, 43, 43, 43,236, +218,181, 11, 12,243,219,249, 79, 81, 20,172,172,172,176,115,231, 78, 80, 20, 85,229,253,233,235,235, 43, 11, 12, 12, 60,232,236, +236,188,138,101,217,230, 0,224,239,239, 47, 13, 10, 10, 58,224,234,234,186,186,100,153, 57,154,132,144,230, 2,129, 96, 85, 80, + 80,208, 1,127,127,127, 41, 0,176, 44,219,156,199,227,173, 12, 12, 12, 60, 88,149, 99,212,184,113,227,145, 13, 26, 52, 72,110, +208,160, 65,178,183,183,247, 66, 71, 71,199,203,107,215,174,181, 45,157,247,146,200, 85, 90,122, 86,206,141,187,143, 35, 39,140, +236,219,174,166,155,227, 32,203,134,189, 44,205,201,123, 73,254,131,131,131, 87, 89, 90, 90, 62,156, 51,103, 78,139, 53,107,214, +136,163,163,163, 33, 20, 10, 81,157,242,249, 22,252,121,154, 89,148, 3, 40,210, 49, 50, 78, 45,174,229, 25, 40,115,240,233, 11, +123, 43,158,232,230, 19,165, 2, 12,222, 3, 95,106, 95, 61, 77,222,123,143, 99,212, 18,235,218, 93,165, 65,205,218,128,146,121, +137, 46, 63, 80, 90,128, 71, 87, 79,179,212,125, 90,243,230,205,133, 29, 59,118,132,139,139, 11, 99,105,105, 57,232,111,181, 63, +255, 64,205, 96,127,184, 42,196,194,219,203,231,125, 29,232, 98, 43, 61, 98,166,201,170, 44,157,245, 29, 28, 28, 46,253,240,195, + 15, 77, 20, 10,197, 21, 51, 77,214,223, 97,127, 6, 0, 16, 0,184, 85,252, 61, 2, 64,235,183,212, 92, 57,103,206,156,241,211, +166, 77, 67, 65, 65, 1,134, 12, 25, 98, 1, 96,185,185,154,114,185,220,179, 65,131, 6, 59,252,252,252,226, 27, 53,106,164,243, +241,241,209,120,123,123,199,214,175, 95,127,171, 72, 36,242,248,183,151,207,191,145,102,249, 55,127,132, 8, 9, 33,237, 9, 33, + 31, 16, 66,222, 35,132, 4, 23,127, 14, 42,126,125, 64, 8,233,248,198,123, 80,241,182, 37,191, 55, 45, 71,227,131, 55,183, 43, +181,205,155,223, 95,251,108,142,193, 34,111,188,191,226,227,218,104, 97,235,228, 58,249,187,195,119, 37,108, 84, 24,238, 15,235, +128,200,175,122, 67,242, 60, 12, 83,199, 78,149, 40, 20,214, 99,251,214, 70,251,234,236,176,103,207,158, 97,207,158, 61,176,179, +179,163, 54,109,218, 36,250,248,227,143, 71, 91, 88, 88, 36, 4, 6, 6, 14, 50, 87,131, 97, 24,211,150, 45, 91,228,189,122,245, +234,111, 99, 99,243, 56, 32, 32,160, 54, 77,211,166,109,219,182,201,251,245,235,247,177, 78,167,123,210,164, 73, 19,175,208,208, + 80,211,221,187,119, 65,211,230, 5,237,238,223,191,111, 60,117,234,212,171,168, 8, 33,228,201,146, 37, 75,250, 31, 58,116, 72, + 97,105,105,201, 6, 4, 4,212,118,115,115,123,252,221,119,223, 13, 58,112,224,128,194,194,194,194,172, 17, 86, 20, 69, 65,163, +209, 64, 44, 22,191,102,164, 40,138,130, 90,173,134, 72, 36, 50, 59,141,165, 34, 3,245,109,109,109,159, 46, 94,188,184,215,225, +195,135, 37, 10,133, 2,129,129,129,190, 86, 86, 86,145, 75,151, 46,237,125,228,200, 17,137, 66,161, 48, 91, 79, 32, 16, 96,231, +206,157,210,129, 3, 7,246, 20,137, 68, 79, 3, 3, 3,125, 5, 2, 1,118,239,222, 45, 29, 52,104, 80,119,169, 84,250, 36, 32, + 32,160,190, 57, 90, 6,131, 97,214,221,187,119,157, 47, 95,190,236,236,238,238, 62,238,199, 31,127,116,228,243,249, 0, 0,147, +201,244, 90,228,106, 80,159, 78, 77,199,207,250,225,146, 90,163,213, 45,152, 58,180, 29,223,132,102,102, 70,237, 6, 89, 88, 88, + 36,124,252,241,199,163, 55,109,218, 36,178,179,179,163,246,236,217,131,103,207,158,253,107,239,140,200,126, 48, 96, 77, 1, 0, +234,134, 62, 83,219, 53,106, 51,136,135,244,163, 8,246,149,243, 66, 66, 11, 29, 8, 33,238, 48,146, 96,114,185, 45,175, 74,154, + 12,105, 4,138,245, 58,251,128,178,107,209,113, 16, 47, 46, 46, 14, 30,190,237,152,227,119,225, 72, 8,241, 0,139,192,170,104, +150,134,207,231,207,254,228,147, 79,100,177,177,177,104,209,162,133, 84, 40, 20,206,122, 23, 81, 60,114,203,219,157,132,120,181, + 35,215,189,156,171,155,182, 63, 58,114,101, 33, 22,222,218,189, 99,175, 75,131,214,195,169, 13, 95,187,219,216, 43,248, 71,222, + 50,146, 85,223,193,193,225,226,237,219,183,109,223,127,255,125,204,153, 51,199,222,194,194,194, 92,147,245, 87, 71,174, 74,204, +149, 4, 69,205,131, 73, 0,106,188,133,230,234, 57,115,230,140,159, 62,125, 58,110,221,186,133,165, 75,151,162,107,215,174,176, +182,182,174,244,250, 49,120,240, 96,105,139, 22, 45,238,247,236,217, 51,108,252,248,241,131,142, 31, 63,238,182,101,203, 22,193, +231,159,127, 46,250,228,147, 79,220,191,254,250,235,207,186,117,235, 22, 30, 28, 28,124,187,111,223,190,226,106, 26, 3,138, 16, + 66,113,241, 28,243,118, 87,121, 94, 4, 64,195,105,211,166, 5, 83, 20,117,124,218,180,105,129, 0,236, 40,138, 58, 14,192, 30, +128,125,241,103,225, 27,239,246,132,144,142,165,126,183, 45, 75,163,228, 85,122,187,146,109,202,248,143, 55, 63,155, 21,193,106, + 11,224,202,155, 43,240, 8,230,141,156, 48, 95,252,114,235, 10,164,236, 88, 9, 58, 51, 9, 76,110, 42,180, 87,142,194,112,245, + 24, 62,109,222, 92, 34,161,168, 5,213,217,147, 10,133, 2, 2,129, 0, 81, 81, 81,120,242,228, 9,186,117,235, 38, 88,179,102, +141, 85,253,250,245,127,110,209,162, 69, 88, 96, 96, 96, 67,115, 12,139,167,167, 39,250,247,239, 47,252,234,171,175,234,136,197, +226, 80, 66, 8,223,195,195, 3,253,250,245, 19, 76,153, 50,165,150, 88, 44,190,203,178,172, 64, 42,149, 86, 20, 29,250,157,174, + 68, 34, 1, 0,190,151,151,215,189, 61,123,246,120,180,108,217,146,119,246,236, 89,228,231,231,243,188,189,189,195,118,239,222, + 93,183, 69,139, 22,188,107,215,174, 65,169, 84, 18,115,117,149, 74, 37, 36, 18,201,239, 12,150, 82,169,252,157,241, 50,195, 92, + 12,175, 91,183,238,221, 61,123,246,212,104,221,186, 53,115,233,210, 37, 20, 20, 20,192,221,221,253,222,158, 61,123,106,180,108, +217,146,185,113,227, 6, 10, 10, 10,204,214, 20, 10,133,240,240,240,192, 39,159,124,194,159, 52,105, 82, 13, 62,159,127, 87, 40, + 20,194,221,221, 29,159,124,242,137, 96,226,196,137, 53,132, 66,225,109, 51,155, 12, 25, 0, 48, 26,141,248,248,227,143,101, 18, +137, 4, 9, 9, 9, 96, 89, 22, 44, 91,228, 73, 83, 50,178, 30, 93,191, 27,254,116,194,168,143,219, 42,181, 90,237,153,203,247, +158,248,121,185,215,160, 40, 82,171,146,188, 55,108,209,162, 69, 88,253,250,245,127, 94,179,102,141, 85,183,110,221, 4, 79,158, + 60, 65, 84, 84, 20, 4, 2, 1,170, 98, 42,255,113, 88,251,217,130, 65,167,184,100,157, 72, 40,171,161,144,219,213, 3,178,175, +160,182,139, 8, 32,148,248,238, 83,149, 12, 52,233, 4,100,218, 86, 73,211,196,118,138, 73,210,137,244, 18,127,185,139,107, 77, +100,101,101,193,205,195, 7, 90,216, 11,111,132, 43,229, 32, 85,212, 44,166, 81,163, 70,173,221,220,220,156,106,213,170,133,204, +204, 76,120,122,122, 66, 46,151, 91, 7, 4, 4,116,170,246,149,248,178,187, 8,121,104, 9, 61,181, 28, 20, 61, 23,132,183, 24, +188,140, 0,114, 63,128,255,183, 51, 87, 59,247,186,218, 58,251, 0,225,195,224,104, 35,196,166,105,141,108,236, 21,162,234,154, +172,250,142,142,142, 23,111,223,190,109, 39, 22,139,113,255,254,125,248,249,249, 97,197,138, 21,246,214,214,214,127,103,147, 85, +218, 92,217, 0, 80, 3, 96, 1, 12,168,102, 52,132, 2,176,110,254,252,249,227,166, 79,159,142,155, 55,111,194,213,213, 21,233, +233,233,104,221,186,117, 92, 78, 78, 78,133,245,146,159,159, 95,141,168,168,168,164,175,191,254, 58, 96,251,246,237, 18,153, 76, +134,220,220, 92,252,242,203, 47,152, 54,109, 26, 40,138, 2, 33, 4,155, 55,111,150, 14, 29, 58, 52,248,197,139, 23, 73,238,238, +238,102,117,223, 40, 54, 85, 66, 66,136, 20,128, 12,128,148, 16, 34, 30, 59,118,172, 16,128,168,216, 92,138, 1,240,193,241, 38, +101,122, 17, 0,118, 75,150, 44, 89, 68, 8,233,190,100,201,146, 69,165,234,206,227, 21,212,183,165, 77, 19, 0,224, 77, 13, 66, + 72,247,210,239,165,183, 37,132,116, 39,132,116, 47,189,125, 69,255, 87,145,193,186, 92,156,177, 55,237,100, 67,167,218,245,144, +123,110, 63, 36, 12,245,218,139,142,121, 4, 55, 49, 15, 6, 66,234, 87,103, 47,202,229,242, 87, 47,154,166,145,146,146, 2,134, + 97, 48,107,214, 44,241,216,177, 99, 27, 8, 4,130,155,173, 91,183, 94, 92,153, 97, 1,128, 59,119,238,192,211,211,147,154, 62, +125,186, 69,219,182, 69,119,177, 15, 31, 62, 68,221,186,117,169,133, 11, 23, 42,122,244,232, 65, 73,165, 82,179,163, 67, 52, 77, + 67, 34,145,160, 93,187,118,212,150, 45, 91,228, 34,145, 8, 39, 78,156, 64,102,102, 38,222,127,255,125,222,150, 45, 91,228, 98, +177, 24, 33, 33, 33,200,203,203, 51, 91,151,162, 40,104,181,218, 50, 13, 86, 89,145,173,138,104,222,188,249, 38, 39, 39,167, 85, +219,183,111, 23, 73, 36, 18, 92,186,116, 9,121,121,121,232,223,191,191,113,231,206,157, 98, 11, 11, 11,220,184,113, 3,121,121, +121,213, 42,229,119,238,220, 65,221,186,117,169, 25, 51,102, 72,154, 55,111,110, 0,128, 7, 15, 30,192,203,203,139,154, 49, 99, +134,196,194,194, 98,101,203,150, 45, 55, 85,164,193,178, 44, 82, 82, 82, 16, 30, 30,142,152,152, 24,100,102,102, 34, 35, 35, 3, + 5, 5, 5, 48, 26,141, 0, 0,105, 65,254,137,117, 91,142,133,201, 36, 18,105,211, 6, 94, 53,111,135, 70,164,203, 36, 18,169, +151, 71, 77,111, 96, 78,153, 59,182,117,235,214,139, 5, 2,193,205,177, 99,199, 54,152, 53,107,150,152, 97, 24,164,164,164,128, +166,233,215,202,213,191,244, 22,143, 2, 95,231, 5, 66, 5,220,138, 40,180,105,221,121,128, 0, 25,167, 0, 98, 0, 40, 30,218, + 55,173,193, 59,114, 77,233, 8, 22, 13, 33,128, 15, 33,160,204,210,228,233, 61, 1, 42,240,236,125,163,109,171,206,163, 5,137, +137,137, 16, 8, 4, 16,137, 68,104,220,242, 35,222,238, 75, 6, 39, 0,141,192, 71, 61,115, 52, 75, 35, 18,137,190, 29, 58,116, +168, 44, 41, 41,233,149,102,215,174, 93,101, 82,169,116,118,181,205, 21, 45,109, 14, 35, 25,255, 56, 70,237,190,112,107,138, 79, +116,130,218, 7, 4, 19, 97, 48, 52,126, 91,147, 85,179,102,205,118, 94, 94, 94, 49,181,106,213,106,245,150,230,234,230,158,157, +123, 93,109,156,138,204, 21, 76, 42,128,145,192,201,193, 26,155,102,183,179,177,183,144, 84,213,100,213,119,116,116,188,112,235, +214, 45, 59,177, 88,140,123,247,238, 65, 40, 20, 66, 44, 22,163, 65,131, 6,216,176, 97,131,189,141,141,205,223,197,100, 89, 3, +232, 12,160, 47,128,143, 74,153, 43, 15, 0, 29, 0,116, 2,224, 4, 32, 4, 64,152,153,154,173, 24,134, 57,209,176, 97,195,100, + 30,143, 23,177,104,209,162,255, 77,153, 50, 5,171, 87,175, 70,187,118,237,162,167, 78,157,138,200,200, 72,163, 74,165,234, 9, +160,194,138,176,176,176,240,232,140, 25, 51, 44, 63,252,240,195,146,239,184,118,237, 26,182,109,219, 6,153, 76, 86,218, 44,161, + 71,143, 30, 24, 62,124,184,181, 78,167, 59, 88,145,166,131,131,195,123,151, 46, 93,242, 2, 32, 44, 54, 80, 37, 6, 75,118,254, +252,121, 43,177, 88,108, 19, 28, 28,108, 81,188, 92,250,225,135, 31,218,242,120,188, 86,224, 64,101, 94,164, 60,131,243,166, 1, + 42,235,183,178,204, 83,181,175,191, 21,252, 95, 69, 6,171, 93,113, 65,255, 29,250,236, 52,136, 96,130,148,161, 32,225, 81, 69, +239, 12, 5, 9,197,130,151,147, 6,170,154,193, 79,185, 92, 14,133, 66,241, 59,163,165, 86,171, 81, 88, 88,104,150,209, 40,233, +203, 99,109,109,253,170,210, 46,169, 88,109,108,108,160,213,106, 65, 81, 20,100, 50, 25,100, 50, 89,149, 34, 88, 98,113, 81, 68, +248,198,141, 27,184,126,253, 58,120, 60, 30,108,108,108, 0, 0,247,238,221,195,163, 71,143, 32, 20, 10, 97,107,107, 91, 37, 93, +189, 94, 95,102, 19,161, 78,167,171, 82, 19, 33, 77,211,208,104, 52,228,222,189,123, 8, 15, 15,135, 72, 36,130,189,189, 61,132, + 66, 33, 18, 18, 18,240,244,233, 83, 8,133, 66,216,219,219, 87,235,248, 88, 88, 88, 32, 55, 55, 23, 44,203,150, 68,243, 96, 97, + 97,129,194,194, 66,208, 52,109, 86, 58, 89,150, 69, 82, 82, 18, 50, 51, 51, 17, 31, 31,143,140,140,140, 87, 38,171,164,137,176, +186, 80, 20,133,194,194, 66,168,213,234,223, 25,171,146,114,245,175,228, 90,125, 75, 80,252,247, 51,114, 13,162,140, 66,161,165, + 99,221,142, 64,230, 41,128, 98, 0,190, 53,154, 5,212, 70, 92,170, 73, 22, 25,175, 19,195,128,206,184,232,109,109,150, 38,195, +239,148,158,103, 16,197,230,218, 91,248,250, 55, 65,122,122, 58, 68, 34, 17, 68, 34, 17, 2,155,189,135,152,100, 86, 26,241, 82, + 45, 5,193,251,102,105, 22,211,184,113,227, 58, 18,137,164,121, 64, 64, 0,149,150,150, 6,145, 72, 4,177, 88,140,230,205,155, +131,166,233, 6,141, 26, 53,242,169,210, 5,238, 69, 29, 33,248,210,102, 0, 25,255,244,165,202,229,200, 13,181,119,143,222, 31, +217,172,220,151,238,243,244,165,198, 3, 58,227, 36, 40,245, 77,170,107,178,220,221,221,219,202,229,242,227,223,126,251,173,135, + 72, 36, 58, 85,171, 86,173,214,213,186,190,137,152,159,190, 29, 63,192,213,186,196, 92, 25,149, 0, 35, 1, 24,105,145,201,114, +180,195,130,175, 58,218, 72, 5,252, 95,205,213,148, 72, 36,187,215,173, 91,103, 95, 98,174, 4, 2, 1,196, 98,241,171, 87, 64, + 64, 0,102,205,154,101,111, 99, 99,179,235, 47, 46,165, 54, 40,234, 87,245, 16,192, 65, 0, 23, 74,153, 43, 79, 0,191, 22, 71, +173, 66, 1,196,153,169,217,162, 75,151, 46,151,162,163,163,187,133,133,133, 57,167,166,166,250, 76,156, 56, 17,171, 86,173,194, +148, 41, 83,118, 17, 66,188,247,239,223,223,248,206,157, 59, 13,204,137,136,165,166,166, 14,156, 58,117,106,102,102,102, 38, 0, +192,223,223, 31,185,185,185,152, 52,105, 18,198,143, 31, 95, 82,118, 1, 0,233,233,233, 88,182,108, 89, 90,106,106,234,144,138, + 52, 77, 38, 83,194,161, 67,135,154,235,116,186,154,197,134, 82, 4, 64, 26, 23, 23,103,169, 84, 42, 45, 24,134, 81,200,100, 50, + 11,145, 72, 36, 27, 58,116,168, 32, 34, 34,194,215,104, 52, 38,113,158,234, 53,202,245, 34,101, 69,154,202, 91, 86,221,245,205, + 53, 89, 85, 53, 88, 33, 0,218,252,206,192, 80,120, 24,127, 55, 4, 54,126, 1,175, 71,176,120, 20,164, 10, 11,196, 36, 37, 64, + 0,234,113, 53, 18,248,187,202, 80, 46,151, 35, 37, 37, 5, 83,167, 78, 85,237,216,177,227,145, 78,167,107,126,245,234,213,105, +230, 68,176, 28, 28, 28, 16, 31, 31, 79,190,255,254,251,252, 83,167, 78, 25, 75,150, 37, 36, 36,144,153, 51,103, 22,236,221,187, +151, 84,165,137,176, 36,130, 21, 18, 18, 66,102,207,158,157,151,156,156, 76,108,108,108, 96,107,107,139,243,231,207, 27,167, 77, +155,150,247,226,197, 11, 98, 99, 99, 3, 27, 27,155, 42, 25, 44,163,209, 8,137, 68,242,154, 65,161, 40, 10, 6,131,225,119,145, +173,138,184,126,253,250,176,188,188,188,175, 39, 77,154,164,126,242,228, 9,177,183,183,135,189,189, 61,182,110,221,202,251,236, +179,207,212, 15, 31, 62,124,181,172, 58,216,217,217,225,217,179,103,100,209,162, 69,234, 11, 23, 46,240, 1,192,222,222, 30,145, +145,145,100,222,188,121,234,220,220,220,175,175, 95,191, 62,172,146, 11, 14, 98, 98, 98,144,159,159, 15,147,201, 4,173, 86,139, +140,140, 12, 36, 38, 38,190, 50, 88,106,153, 69,151, 47, 63,239,209, 72,169, 86,171,110, 63,138,138,111, 26,224,231,160, 84,171, + 85, 81, 47,227,159, 1,115,202,236,219,118,245,234,213,105, 58,157,174,249,142, 29, 59, 30, 77,157, 58, 85,149,146,146, 82,102, +121,250, 51,158, 7,245,231,135,176, 88, 39, 16,210,234,218,163, 66,171, 78, 31,244, 19, 82,249,119, 0, 67, 33,192,183, 6,248, + 86,224,137,109,209,245,189,198,204,150, 51,249, 78,160,216, 22, 16,139, 42,239,223,194, 18, 71,176,108,235,243,247, 52,214,173, +186,141, 21,102,103,103,131,166,233, 87, 6, 75, 42,147,225,189,238,131,233,205,103,180, 78, 96, 73, 75, 48,140,217,125,102, 4, + 2,193,228,207, 63,255, 92,144,147,147,243,154,166, 68, 34, 65,239,222,189, 69, 10,133, 98,166,217, 89,127,226, 43, 64,154,168, + 25, 88, 50, 62, 50, 86,237,114,232,186,218,123,226,172,205,146,250, 13,155, 98, 84, 47, 7,201,194,237,233,126, 97, 47, 84, 30, +160, 77, 19,160,210, 5,146, 13, 85, 51, 89,181,106,213,106, 45,147,201, 78, 28, 62,124, 88,218,190,125,123, 76,156, 56, 81, 38, + 18,137, 78,185,187,187,183,169,234, 97, 82, 22,152,190,156,183,114,123,218,195,125,157, 1, 99, 65,177,185,250,237,149,158,199, + 98,214,186, 75,121, 6, 19, 25, 96,174,166, 90,173,254,236,139, 47,190,200, 58,120,240,224,239,204,149, 88, 44,198,203,151, 47, +177,112,225,194,236,236,236,236, 33,127,113, 41,109, 12,224, 1, 0, 77,113, 52, 66,138,162,145,130,205, 1,156, 7, 96, 2,144, + 6, 32,197, 92, 65,134, 97,166,252,248,227,143, 60,181, 90,141,225,195,135, 35, 33, 33, 1,201,201,201,152, 49, 99,198, 75,150, +101, 63, 43,214, 12, 3,240,212, 28, 61,189, 94, 31,153,147,147,211,189, 75,151, 46,185, 57, 57, 57,104,216,176, 33,186,119,239, + 14, 39, 39, 39,184,184,184,160,103,207,158,240,242,242, 66, 86, 86, 22, 6, 12, 24,144,157,145,145,209, 25, 64,133,163,208,179, +178,178, 94,236,219,183,239,197,255,254,247,191,160,132,132, 4,127, 0,206, 6,131,193, 70,173, 86, 43,140, 70,163,220,194,194, +194,182, 73,147, 38,246,163, 70,141,178,186,123,247,174, 95, 98, 98, 98, 97, 21, 12,230,127,133, 50,189,200, 91,220,136,159,120, +155, 72, 85, 89, 17, 48,115, 41,169,225,169, 55,222,127, 43,132,192,172,109, 7,182,105,132,238, 94,176,244,105, 4,169, 88, 12, +137, 72, 8,137,149, 13, 52, 44,139,141, 47, 83, 85, 74, 66,102, 86, 35,241,175, 69, 28, 88,150,197,134, 13, 27, 52, 11, 22, 44, +200, 77, 77, 77, 29,117,245,234,213, 70,247,238,221,123,104,142, 17,202,207,207,199,254,253,251,213, 91,182,108,137, 86,171,213, + 1, 2,129,192,160,211,233,176,107,215, 46,205,170, 85,171, 98, 85, 42, 85, 16,159,207,215, 87,165,249,173,164, 15, 22,159,207, + 55,104, 52,154,128, 61,123,246,188, 56,113,226,132,218,194,194, 2,124, 62,223,160, 82,169, 26,108,223,190, 61,114,207,158, 61, +106, 11, 11,139, 42, 25, 55,150,101,203,140, 96,153, 76, 38,136, 68,162, 42,245,193,186,119,239,222, 47,122,189,190,233,174, 93, +187, 18, 55,111,222,172,177,176,176, 0, 0, 24, 12,134,160,109,219,182, 37,254,244,211, 79,218,170,246, 69,210,233,116, 48,153, + 76,216,190,125,187,118,247,238,221,137, 70,163, 49,168,100,217,230,205,155, 53,219,183,111, 79,212,235,245, 77,239,221,187,247, + 75,101, 90, 38,147,201,148,155,155, 11, 30,143,135,232,232,104,173, 72, 36, 2,195, 48,136,138,138,122,101,176, 28,236,108,252, + 90, 6,249,251,172,248,105,127,136, 76, 36, 18,117,110, 23,232, 27, 17, 21,151, 72, 8, 21, 91, 73,222, 31, 94,189,122,181, 81, +106,106,234,168, 5, 11, 22,228,110,216,176, 65,195,178,236,107,229,234, 95,105,176,244,144,130,130, 36, 42, 65,171, 16,243, 13, + 20, 82,127, 5, 4,214,197, 6,171,232,229,226, 90, 3,119,159,170, 20,160, 32,132,206,224, 80,169,166,129,200, 64, 65, 26, 30, + 7, 5, 79, 32,161, 82, 83, 83, 95, 69,154, 74, 12,145, 71, 93, 95,132, 70, 21,202, 65, 17, 17,138,134,214,155,125,161,146,203, +229,188,148,148,148, 87, 90,175, 52, 61, 60, 24,131,193,208,217,236,188,103,152,156,193,178, 95, 62,139,215,184, 28,190,174,246, +154, 48,107,179, 68,194,228, 0,177,171, 81,223,203, 9, 19,135, 52, 18,206,216,152, 81,255,110,132,170, 14, 40, 50, 10,245, 11, +205,190,187,168, 85,171, 86, 43,169, 84,122,234,240,225,195, 82,153, 76,134,232,232,104, 52,108,216, 16,243,231,207,151, 74,165, +210,147, 53,107,214,108, 87,149,195,116,251, 25,226, 10, 11, 76,205, 39,111, 72, 72,125,248,210, 84,100,172,232, 34,115,149,145, + 71,240,197,183,199,114,115,242, 53, 31,221, 10, 55, 94,172,130,236,131,188,188,188,247,191,253,246,219,172,204,204,204,215,204, + 85, 92, 92, 92,137, 17,104, 7,224,241, 95, 92, 74,101, 40,234,188, 94, 15, 64, 93, 0,141, 0, 24, 1, 20, 20, 27,161, 42,227, +231,231, 23,224,238,238,142,245,235,215, 99,227,198,141, 57, 43, 86,172, 0, 33, 4, 94, 94, 94, 22,213,213, 76, 79, 79,191, 19, + 25, 25,217,185, 81,163, 70, 79,214,174, 93,155,232,236,236,204, 14, 31, 62, 28,195,134, 13,131,189,189,189,105,245,234,213,241, +173, 91,183, 14,127,241,226, 69, 71,149, 74,245,200,156,226,158,153,153,121, 99,211,166, 77,119,222,123,239, 61,197,231,159,127, +238,184,113,227, 70,167,167, 79,159,214, 84,169, 84,174,233,233,233,178, 43, 87,174,136,182,109,219,230, 20, 17, 17,241, 82,163, +209,220, 65,217, 29,186,255,171,148,235, 69, 0,100, 20, 27, 29,221, 27,239, 25,149,252,102,238,182,101,126, 54, 99,189,114,169, +116,196,205,254, 24,220, 24, 84, 39,119,233,252,205, 27,190, 25,220,192, 71, 82,203,195, 23,166,194, 92, 60, 74, 77,197,182,148, + 60,149,129,144,117, 7, 98,112,169,186, 6,139, 97, 24,156, 57,115,198,180,107,215, 46, 61, 33,228,231,252,252,252,153, 79,158, + 60, 81,154,171,195,178, 44, 51,116,232,208,194,156,156,156, 95, 83, 82, 82, 70, 69, 71, 71,235, 90,181,106,197, 12, 28, 56,176, + 48, 59, 59,251, 40, 69, 81,195,239,223,191,175,109,217,178,101,149, 42, 91,138,162, 32, 16, 8, 64, 81, 20,238,221,187,247,210, +215,215,183,254,173, 91,183,126,120,246,236,217, 39,132, 16, 38, 52, 52, 52, 33, 32, 32,160,225,141, 27, 55,214, 62,125,250,116, + 0,203,178,140,185,186, 37,209,177,210, 70,138,166,233, 87,166,142,170, 98,155,107,104,104,232, 99, 95, 95, 95,223, 59,119,238, +108, 29, 49, 98, 68,103, 0,210,123,247,238, 61,241,247,247,247,185,117,235,214,214,207, 62,251,172, 75,241, 29,164,121,245,183, + 94,143,222,189,123,171,242,242,242, 78, 23, 20, 20, 12, 9, 15, 15, 87, 5, 4, 4,148, 44, 59,147,155,155, 59,164, 10,199,104, +222,154, 53,107,102, 21, 31,171,173, 43, 87,174,252, 98,210,164, 73,246, 73, 73, 73,175, 12, 86,122,102,246,197, 22, 31,140, 53, +101,229,230,233, 54,175,156,220, 87, 34, 22, 9,103, 46,217,124,217,192,188, 26,198, 93,153,201,220,233,235,235,123,228,206,157, + 59, 11,238,222,189, 59, 98,224,192,129,130,206,157, 59, 51, 66,161,240,223,105,176,132,166,124, 16, 58,185,111, 7,107,209,234, +117,155, 4,159,247,172, 35,246,247,113, 47, 50, 87, 2,107,220,141,200,197,172,239,247,179,223,141,182,143, 1,139, 4,152, 16, + 89,169,166,156,151, 15,141, 33,253,139,206, 2,209,226,159,199,215,110,217,253, 27,145,175,127,240, 43, 35,244,244,241, 61,172, + 92, 56,150,253,110,148, 77, 12, 88, 42, 25, 70,243,162, 4, 0, 96, 52, 26,251, 46, 89,178,228,244,231,159,127, 46,171, 95,191, +254, 43,205,151, 47, 95,226,187,239,190, 83,107,181,218,143,204,187,102,128,194, 85, 94, 99,147,201,228,176,243,108,150,231,215, +227, 70, 73, 37,116, 54, 16,179,172,200,188,240, 45,209,216,223, 14,179,198, 57,241, 39, 46, 62,230,119,237,135,218,133, 48, 8, +124, 1, 36,155,163,207,227,241, 78, 44, 90,180, 72, 42,145, 72, 16, 21, 21, 5,137, 68, 2,177, 88,140, 38, 77,154, 96,213,170, + 85,210,255,253,239,127,167,218,182,109, 43, 15, 9, 9, 49, 86,197,100, 53,245, 54, 53,159,252,227,139,155, 75,191,178,114,106, + 88,207, 14,153, 5,192, 23,179,143,231,100,231,171, 63,174,162,185,122,101,178,114,115,115,223, 31, 63,126,252,217, 45, 91,182, +216,250,250,250, 34, 33, 33, 1,253,251,247,207,202,200,200,104,255, 55, 48, 87, 0,160, 4,224, 10,224, 25,138,250, 34, 61, 71, + 81,191,164,106,143,242,140,136,136, 8,141,139,139,115, 30, 54,108, 24,242,243,243,173,251,245,235,135,232,232,104, 60,123,246, +236,193,219, 36, 84,163,209,220, 77, 76, 76,108,240,245,215, 95, 15,158, 60,121,114, 75,133, 66,225, 65, 8, 33,249,249,249, 49, + 38,147,233, 26,128, 93, 64,149,158,195, 73, 0, 60,127,241,226, 69,204,139, 23, 47, 28,183,110,221,106, 85,188, 15,128,162,142, +253,121,197,209, 59, 19, 56,170, 82, 39,223,253, 43,182,253, 83,232,235,129,150,159,215,161, 66, 6,214, 70,193,128,218, 40,252, +188, 46,101,206, 68,163,101, 62,109, 59, 32, 32,128, 24,141, 70,114,246,236, 89,210,181,107, 87,101,171, 86,173,170, 50,209,232, +107,154,237,218,181,251,221, 68,163,237,218,181, 59, 29, 28, 28,252,218, 68,163,109,219,182,125,220,182,109,219,188, 54,109,218, + 68,155,147,206, 54,109,218, 60,109,217,178,165,178, 77,155, 54,175, 85, 36, 65, 65, 65,189, 58,116,232,240, 90,200, 49, 56, 56, +184,231,155,203,202,203,123,199,142, 29, 19,158, 61,123, 70,226,227,227, 73,183,110,221, 94, 93,248,223,123,239,189,132,176,176, + 48,242,236,217, 51,210,165, 75,151,228,170,236,207,210, 4, 6, 6, 14,111,221,186,245,141, 55,210,252,197,155,203, 42,210,108, +221,186,245,141,160,160,160, 47,222, 92, 86,133,137, 70,203, 77,167,179,179,179,119,227,198,141,211, 87,174, 92, 73,106,215,174, +157, 94,250,183,250,237,134,126,155,155, 95,152, 63,105,222,250,125,101, 76, 52,106,214,147,219,155, 52,105,226,213,170, 85,171, +107, 93,187,118, 85,158, 61,123,150, 24,141, 70, 18, 16, 16, 64,170,187, 63,171,193, 31,174, 73,158,248, 10,200,117,223,150,228, +138,239,137,167,219,221,159, 12,121, 95,166,189,191,171, 11, 33, 79,191, 33,183,246, 15, 35,205,125,133,166,235, 63,184, 61, 35, + 87,124, 78,145,171,222,109,200,169, 50, 39,244,252,189,230,149,186,173,201, 21,159, 83, 17, 91,221,159,244,110, 99,175,219,181, +125, 3,121,254,252, 57, 57,122,104, 23,105,230, 43, 45,214,244, 61, 75,174,248,182, 55, 71,243,141,115,190,101,243,230,205, 11, +247,237,219, 71,162,162,162,200,185,115,231, 72,139, 22, 45, 84,141, 27, 55,110,111,110,222, 9, 1, 69, 66,252,122, 27, 47,213, +187, 54,173,191, 60,247,139,206, 98,109,255,246, 66, 93,175,230, 2,253,251, 1, 2, 99, 75, 95,158,169, 97,109,154,245,117, 3, +121,191,137, 68, 75,174,212,187, 74,174,249,118, 54, 55,157, 94, 94, 94,241,181,106,213, 34,229,189,188,189,189, 51, 74, 6,208, + 84,245,184, 55,245,134,123,199, 32, 81,202,133,159,219,147, 30,109, 20, 89,205,252,121, 29,222, 65, 89,106,108,103,103,151,185, +101,203, 22,226,232,232,152, 1,160,254,223,161,124, 22, 99, 3,160, 23,126, 27,198, 46, 7,208, 30, 64,237,183,208,108,241,254, +251,239, 27, 66, 67, 67, 73,116,116, 52, 57,125,250, 52,105,217,178,165, 17, 69,125,118,240, 55,202, 59,167,201, 1, 82,213,145, + 64,213, 60, 0,225,101, 25,172,206,157, 59,171, 67, 66, 66, 10,117, 58,221,200,251,247,239, 31,125, 91,205, 63, 34,157,127,132, +102,251,246,237,111,208, 52, 93,187,120, 8,112,242,133, 11, 23, 2,138, 77,225, 13,134, 97,106, 23, 31,152,228,139, 23, 47, 6, +252,219,242, 94,218,100,209, 52,125, 6,128, 54, 41, 41,233,213,104, 39,123,191,158,205,109,172, 45,219,231,230,230, 61, 72,123, +124,244,212,219,164,179, 73,147, 38, 61,133, 66,225,134,182,109,219,202,207,156, 57, 35, 9, 13, 13,165,254, 77,251,147,156,170, + 35,132, 66, 24, 8, 19,166,134, 71,171, 60,102,110,202,172,211,253,253, 22,252,173,251,175,176, 75,199, 56,188,104,225, 39,123, + 9,138,253, 14, 38,237, 29,170, 93,156,214,108, 77, 41, 21, 12,240,167,134,189, 80,185, 79,250, 49,199,179, 99,143, 47,152, 99, + 7, 54,176,223,143,177,125,209,194, 79, 30, 15,224, 59,176,170,155,230,106,190,105,178, 68, 34,209,169, 1, 3, 6,200,119,239, +222,173,214,104, 52,221, 31, 60,120,112,169, 42,121, 39, 55,234,213,132,145, 90, 8, 16,183,202,119, 27,253, 28, 70,118, 62,213, + 33, 50,254,239,112,220,155,122,195, 93,166, 16, 29, 87,105,141,227,205,140, 92,153,147,206,198,214,214,214, 59,114,114,114,250, +153, 25,185,250, 51,243,110,143,162,121,174,120, 40,106,242,121,140, 74,250, 48,153,161,217,138, 97,152, 41,117,234,212,105, 24, + 29, 29, 29,110, 50,153,190, 71,209,168,179,127,125,221,241, 31,209,228, 12,214,219, 30,128, 86,173, 90,221, 55,153, 76,167, 5, + 2,193,194,144,144, 16, 45, 87,248, 56,205, 63, 66,179,109,219,182, 34,189, 94, 63,131, 97,152, 46,215,174, 93,107,242,111,203, +123,105,147,117,255,153,178,246,226,157,217,238, 19,250, 89,199,155, 97,174, 42,214, 44, 54, 89,119, 34, 85,181,190,219, 85,224, + 62,177,159, 60,222, 12,115,101, 86,222, 3, 2, 2, 90,138,197,226,109,106,181,122,184, 25,230,234,247, 6,235,137,175, 0, 57, + 6, 87, 24, 25,127,208, 40,127,154,126,150,168,192,103,194,145,130, 52,234,227, 39,122,238, 60,226, 52, 57, 77,206, 96,253,217, + 6,235, 47,153,245,184,156,202,142,131,227,157, 82,108,222,191, 45,126,253,235,160,186, 70,235,200,169, 58,247,160, 16, 46,105, +226, 45, 25,251,235, 66,137, 10, 44,149, 8,138, 93, 85,137,185,170, 76,243, 14,164,134, 37,193,222,146,241,135, 22, 74, 84, 0, + 82, 65,176,178, 18,115,101, 22,161,161,161,215, 97,126, 51,209,239,211,231,251, 68, 15,224, 37, 33,136,197,220, 10,110, 16,103, +131, 80, 20,215,121,152,131,131,227,175,131,199,237, 2, 14,142,127,184,201,122,226,123, 23, 89,204, 36,152, 80, 27, 34, 99, 28, +114,141,169, 84,215, 56,221, 91,106,222, 70, 22,245, 21, 88,120, 67,104,124,129, 92,221, 91,105,190,243,124, 23,153,167,242, 13, +212, 28,174,108,112,112,112,112, 6,139,131,131,227,109,204, 70, 81, 84, 39,177,248,245,183,213,228,224,224,224,248, 79, 93,155, + 81,254, 72,128,170,180,173, 86,103, 52, 65, 56,167,201,105,114,154,156, 38,167,201,105,114,154,255, 57,205,202,180,255,241,125, +187,254,140, 41,130,184, 33,172,156, 38,167,201,105,114,154,156, 38,167,201,105,254,167, 32,132,128,230,118, 3, 7, 7, 7, 7, + 7, 7, 7,199,187,229, 47,237,131, 37,177,245,114, 6,143,110, 72,177,196, 7, 0, 8, 77, 61,133,145,125,168,206,138, 74,121, +107,113, 7,127,169,156,207,236, 42, 52,152, 6, 34, 61, 92,245,142,146,220, 10,128, 59,138,158, 29,117,141, 43, 62, 28, 28, 28, + 28, 28, 28, 28, 85, 50, 88, 94,205,123, 95,149, 73,100,158, 0,192, 18, 2, 19, 11,228,231,164,223,140,127,116,254, 67, 0,112, +246,235,112, 72, 40,179,107,206,178, 4, 44, 33, 48,178, 4, 70,173,250,121,230,147,147,102, 61,121, 94,102,239,253, 97,135,142, +239,245,233,222,253,131,122, 13,252, 27,212, 5,128, 71,225,143, 94, 28, 63,126, 34,242,226,121,234, 87,101,198,179, 67,111,147, + 49, 57,159,255,109, 80,112,211,206,119,239,222,158, 81, 8, 76,127, 71,251, 75, 64,174,117,219, 78,181, 58,249, 30, 87,116, 56, + 56, 56, 56, 56, 56, 56,170,108,176,100, 18,153,231,197, 35,155, 28, 14, 93, 77, 0, 0,116,108,226,132,185,203,183,244,222,248, +232,124, 36, 0, 52,111,211,213,123,230,215, 67,112,227,113, 6, 8, 33,104,236,105,131,222,131,254,103,214,159,138, 29,125,131, +250,246,253,104,224,164, 73, 19,123, 62,127,254, 60,118,247,238,221, 87, 1,160,117,155, 54,158,139, 22, 45,250,100,153,181,141, +104,239,129,131, 73,154,180, 39,213,122,126,144,204,177,142,157, 79, 61,207, 47,118,253,242, 61,175, 67,183,254,195,226, 13,249, + 43,149,105,209,153,213,209, 18,214,240,171,109,201, 23,204,165,104,154,167, 45,204,118, 0, 0,107,183,198,199, 69, 10, 7,147, + 88, 44,121,164, 84,171,183,165, 63, 57,189, 17,220, 3, 59, 57, 56, 56, 56, 56, 56, 56, 42, 51, 88, 0, 32, 23,243, 16,249,178, +168,181,206, 74, 10,140,248,236, 35,164,165,165,122,235,141, 44, 6,247,251, 16,161,145, 41,120,246, 50, 3,132, 0,222, 53,204, +126,150, 48, 24,176,129, 67,135, 13,109,123,230,236,217, 59,223,206,252,118, 59, 69,225, 38, 0,108,248,249,151,230,179,102,207, + 26, 62,248,179,193,157, 14, 28, 56,240, 24, 64,181, 12, 22, 45,176, 90,249,221,194,185,242,164, 76,141,102,220,196,111,152, 73, + 95,127,181, 12,192,103,213, 49, 87,190,110, 53, 22, 94, 61,123, 64, 42,149, 74,177,113,227, 70, 17,112, 4,115, 38, 13, 21,127, +208,189, 59, 76, 96, 90,124,255,195,238,134,103,133,194, 97, 42,149,234,195,172,168,243, 41, 92,145,226,224,224,224,224,224,224, +168,208, 96,153, 88,130,167, 49,169, 69,166,133,225,225,131,150,150, 88,182, 96, 10,212, 90, 19,194, 98,242,112,248,122, 2,180, +202, 92, 16, 2,180,244,119, 40, 43,134,243,218, 80,203,101,227, 36, 1,140,144,223,239,230, 51, 89, 45, 27,107,107,235,168, 59, +219,149,179, 6,165,249,242,140,250,251, 11,142, 5,197,200, 20,194, 22,251, 15, 28,240,235,209,189,187,208,194,194,114,178,192, +170, 83, 13, 86,163,159,152, 23, 23,146, 87,158,230,155,200, 28,253,218,246,248,160,219, 7, 78, 78,142,166, 1,139,110, 62, 93, + 55,182, 73, 77, 47,111,159,118,207, 12,170,182,202,180,103, 33,229,108, 22, 94,150,185,170,235,236,184, 48,228,244, 1,169, 70, +163, 65, 76, 76, 12,178,178,178,138,126,164, 40,208, 52, 3, 87,103,103,172, 93, 60, 81,186,251, 80,131, 38,223, 46, 94,127, 4, + 64, 48,126,219, 11,127,196, 48, 83, 78,147,211,228, 52, 57, 77, 78,147,211,252,183,106,254,171, 40, 25, 69, 88,102,243,214,139, +132, 44, 68,198,164, 32,192,199, 21,117,107, 57,225, 78, 84, 14,118, 93, 76,192,230,179,177,184,248, 48, 3, 44, 95,129,212, 2, + 10,207,227,210,240, 44, 54,179,210, 54, 50, 70,200,239, 55,126,105,222, 36,191,218,249,205, 46,239, 27, 11, 23,121,148,223,148, +229,185, 99, 25, 33,191,159,131,147,213,238, 73, 95,141, 26,164,144, 74,132, 58,173, 14, 30,181,220,196,163,135, 15,253, 92, 32, +151,237, 54, 55, 51,118,118,190, 50,161, 68,182,125,225,172,137,226, 21,135,162,226,149, 58,162, 60,112, 35, 57,122,210,212, 89, +249, 12, 95,242,179,157,157,175,204, 28, 29, 97, 13,191,218,238,182,182, 11,175,157, 57, 32,213,235,181, 72, 78, 78,134, 78,167, +131,209,104,124,181, 14, 1, 80,160, 54, 34, 38, 69,141,182,109, 90, 50, 1,141,235,251,216,251,116, 29,201, 21, 41, 14, 14, 14, + 14, 14,142,106,241,175,234,106, 83,238, 52, 13, 74,181,242,249,167, 35, 39,165,123, 42, 82,116, 31,182,247, 5, 8,144,145, 18, +139,136, 59,103, 16,117,255, 44, 10, 50,226, 65, 8, 80,171, 86, 77, 8,212, 49,186, 13, 63,253,152,206, 26, 53,207,203,211,235, +217,201,185,198,243, 36, 25,189,116, 82,205,155, 81,207, 82,236,198, 76,218,130,168,103, 41,118, 75, 39,213,188,249, 60, 73, 70, + 75, 5,166, 22,159,245,239, 69,245,234,222, 5, 83,166, 76, 66,175,238, 93, 48,105,212, 39,148, 88,200,111,102,110,102, 52, 66, +241,146,169,223,206, 83,164,230,234,117,183,159,229,107,229, 82,169,232,250, 83,165, 74, 75, 36,250,158,253, 70,100,104, 5,188, +121,230,152, 43,103, 11,139,133, 55,206, 31,148, 18, 66,144,152,152, 8,189, 94, 15,131,193, 0,131,193,240,106,189,220, 66, 3, +226, 51,212,136, 75, 87, 33, 60, 54, 31, 93,187,116,145,242,248,194, 65,220,249,193,193,193,193,193,193,193, 81,174,193,138,186, +121,184,117,232,133, 29,142,153,105,105,121, 50, 17, 15, 60,154, 70,122, 98, 52,182, 45,255, 10, 7,214, 77, 68,110,202,115, 16, + 2, 72, 4, 12,180,133, 89,121,169, 97, 7, 28,179, 42, 24, 65, 72,193,208,233,135, 29, 47, 61, 98, 83,136,229,174,211,133,124, + 0,216,117,186,144, 31,155, 66, 44,127,216,241,210, 67, 72, 50,192,154, 76,232,222,235, 35,108,223,186, 17,205, 59,244,194,129, + 43,241, 80,169,245,102, 61,255, 76,228,224, 85,203,193,201,233,163,241,131,223, 83, 4,123, 91,203,189,220,172, 24,134, 47, 48, + 10,249, 34,246,216,189,188,164,206,221, 63,164,165, 50,139, 46, 34, 7,175, 90, 21,233, 88,242, 5,115,175,159, 61, 40,101, 24, + 6,241,241,241,208,235,245,208,233,116,208,106,181,175, 34, 88,249, 42, 3,146,178,212, 72,200, 80, 33, 62, 67,133, 39,241,249, + 16,202,172, 97, 48, 24,184,137,215, 56, 56, 56, 56, 56, 56, 56,204,155,104, 52, 57, 61, 27, 54, 10, 6,246, 46, 30, 24,248,213, + 50, 0,128,137, 53,130,160,104,122, 6,115, 98,122, 4,252,115, 95, 14,246,136,169,229, 76,229, 13,234, 42, 85, 3,192,160,174, + 82,117, 45,103, 42,239,203,193, 30, 49, 42,147,181,222,100, 50,225,218,227,116, 44,221,251, 4,223,110,121,136, 51,247,204,239, + 51,206,227, 75,198,127,183,120,145,148,199, 80,212,227,184,130,194,148,108, 99,161, 64,192,215,243,133, 60, 67,161,142, 82,199, +102,152,178,186,124, 60,230, 37,195,240,199, 84,154, 86,194,130, 16, 2,173, 86, 11,157, 78,247,234, 85, 18,193,202, 46,212, 35, + 57, 75,131,248, 12, 53, 18,138, 95,105, 57,234, 63,101,106,124, 14, 14, 14, 14, 14, 14,142,127,150,193, 42,243,233,244, 44,128, +168,216, 12,136,120, 44,106,212,172,251,219, 26, 4, 32, 4, 48, 24, 89,179,254,232,232,185,148,196,218,174, 74, 50,121, 89,124, +115,127, 31,219,135,163, 7,184, 61,245,247,177,125, 56,121, 89,124,243,218,174, 74, 98, 96,133, 38, 66, 8, 8, 75, 64, 8, 1, + 33, 0,203,154,111, 88, 40,138,105,214,216,199,157, 55,119,247,243,184, 49, 63, 62,123, 74,241,120, 6,161, 80,104,116,180,148, + 80, 53,236, 36,188, 2, 45, 52,245,252, 3, 12, 20, 16, 80,145, 78,158, 65, 63,187,101,231,143, 85,122,189, 17,110,110,110,208, +233,116,175,154, 8, 75, 34, 88,185,133,122, 36,101,107,144,144,161, 70,124,134, 26,106,141, 9,143,158,198,130,162, 25,174,211, + 31, 7, 7, 7, 7, 7, 71,245, 41,211,139,252,147, 13, 22, 85,234,245, 59,220,221, 28,113, 59, 60, 14, 53, 29, 69,176,176, 84, +224,233,139, 68,208, 12, 15, 12, 77,193,104, 50,127, 63, 16,157, 97,239,138,201,150,203,226, 83, 76,183,126,220, 17,253, 60, 62, +197,116,107,197,100,203,101, 68,103,216, 11, 20, 25, 54,150, 16,176,165,222,205,214, 38,172,131,157,165,136,119,247, 69, 97, 54, +197,240,180, 2, 62, 79,235,108, 43,162,156,237, 36, 60, 55, 91,137, 80, 38,230,211,206,142,142, 44, 8,113,172, 72, 71,151, 24, + 17,147,154,159, 63,163,245,251, 31,169,248,124, 62,106,215,174,253, 42,130, 85, 98,176,138, 34, 88,106,196,103,168,144,154,173, +129, 68, 68, 35,236,230, 5,149,201,100,216,198,157, 27, 28, 28, 28, 28, 28, 28,213,162, 66, 47,242, 79,163,242, 71,229, 16, 2, +153, 84, 2,150, 22,227,218,189, 23,240,241,109,136, 45, 71,239,160,174,127, 83,164, 20, 24, 81,149,199, 25, 78, 90,163, 14, 5, + 16,218,179,147,180,198,135, 93, 93, 59, 17,240,207,253,184, 39, 63, 17, 0,234, 53, 67,177,177, 42,138, 92,177,164,104,154,136, + 42, 28,149,228,248,116,165,220,195, 73,134, 39, 9, 58,173, 66, 42, 54, 90, 73, 5, 60,123, 75, 33, 99, 33,225,241,120, 2,154, +206,205,205, 40, 0,168,228,202,180,116,137, 17, 49,241,240,155,209,166,107,255,133, 87, 79,239,147,214,169, 83, 7, 97, 97, 97, +175,154, 8, 85, 26, 35,168, 2, 61,248, 18, 2, 47, 87, 57,158,134, 94, 53,101,165, 39, 69,228, 60, 59,189,145, 59, 63, 56, 56, + 56, 56, 56, 56, 56,204,114, 71, 44, 75, 96,111,103, 13,145,220, 18, 49, 25, 58, 20,194, 30,121,106, 10,172, 9, 48, 25, 43, 52, + 65,101,118,250, 62,122, 46, 37,241,200,185,204, 77, 71,207,165, 36,190,238,229,126,107, 30, 36,132,148,215, 68,232, 95,182, 15, + 52,157, 58,126,238, 90,118,239,102, 14, 86, 52,159,175, 22,138, 24,189, 68,204, 55, 72, 69, 60, 56, 88, 10,132, 53,172, 5,162, +203, 39,246,208, 20, 75, 46,154,163,169, 75,140,136,121,153,158, 62,163, 67,247, 1, 42, 71, 39, 39, 12, 30, 60, 24, 53,107,214, + 4, 0,216,200,104,184, 91,211,224,105, 83, 17,114,116,147,242,233,253, 75,247, 97,210,126,136,215,195,154,220, 83,214, 57, 77, + 78,147,211,228, 52, 57, 77, 78,243, 63,138, 89, 15,123,174,227, 44,131,167,171, 12, 26,157, 35,212, 58, 19,148, 90, 35, 10, 84, + 6,228,169, 12,136, 77, 85,225,217,229,183, 79, 8, 41, 54, 88, 32, 20, 88, 66, 0,170,168,153,144,152, 25, 40, 84,242,243,151, +125,183,104,110,255,125,251, 15,145,113,221,156,107,220,126,174, 78, 16, 49,124,157, 84, 68,243, 44, 36,180,233,101,204,203,228, +179,199,247,212, 87,137, 85, 67,204, 77,147, 46, 49, 34, 38, 10,152, 81, 47,160,195, 92, 16,240,116,234, 60,217,212,150,126, 56, +115,250,132, 90,120,237,190,129,226, 9,195, 89,147,126, 71,113,228,138,235,225,206,193,193,193,193,193,193, 97,158,193, 82,169, + 85,207, 59,245,249,162,248,129,207, 4, 38, 83, 81,100,201, 84,210,148,199, 18,152,244,234,231,111,155, 16, 19,203,222, 89,191, +101,111,183, 70,141,155, 50,126,238, 10,228,231,102,226,222,237,155, 70,194,178, 55,205, 18,136,139,211, 26, 29,196,159,124,252, + 81,239, 61,195, 70,141, 43,108,221,182,189,212,214,214,194,152,153,158,149,191,109,227,190,156, 67,251,118,214,167, 88,246, 83, +196,197,105,171,146, 46, 93, 98, 68,140, 14, 40,153,223,170, 3,224,215, 86,153,252,176,135, 18,184,200, 21, 31, 14, 14, 14, 14, + 14, 14,142,106, 25,172,231,183, 14,183,254, 51, 18,146,157,157, 54,120,199,158, 95, 23,236,220,119,180,165, 86,175,119,101,193, + 36,152, 12,134, 16, 81, 65,214, 44,115, 53,148,233,145, 17,112,119, 15,252,101,221,178,175,127,254, 97,197,123, 96, 77,117, 65, + 81, 47, 41,150, 92, 44, 20,171,134, 33,185,106,230,170, 12, 50,169, 86, 39,223, 7,144,201, 21, 29, 14, 14, 14, 14, 14, 14,142, +106, 27,172, 63,139,156,232, 59, 5, 57,192,184,183, 22,138,139,211, 22, 2,139, 81,244,122,215,132,131,123,254, 18, 7, 7, 7, + 7, 7, 7, 71, 37,208,220, 46,224,224,224,224,224,224,224,224,120,183, 80, 40,127, 36, 64, 85, 34, 53,213, 25, 77, 16,206,105, +114,154,156, 38,167,201,105,114,154,156,230,127, 78,179, 50,237,127,124, 75,209,159,241,100, 23,110, 8, 43,167,201,105,114,154, +156, 38,167,201,105,114,154,255, 41, 8, 33, 92, 19, 33, 7, 7, 7, 7,199,127, 15, 91,175, 30,114, 91,175, 30,114,115,215,183, +243,237,235,104,231,219,215,145,219,115, 28,230,194,227,118,193, 59, 65,132,162,199, 54,234,255,170, 4, 88, 89,121, 88, 24, 21, +118,135,104, 86,251, 93,126,226,163,115,239, 58,127,126,126,126,141, 1, 32, 34, 34,226, 1,128,183, 29,141, 9,169,131,247, 0, +107, 11,171,145,122, 86,103, 82, 41, 85,235,149,105, 81, 7,222,101,130,237,236,124,101, 58,145,100, 41, 40,210, 21, 4, 52,161, +169, 11, 76,190, 97, 66, 94,222,195,188,138,182,115,235,185,200,103, 88,223, 15,102,110, 58,112, 98, 65,194,209,233, 79,223,252, +221,186,203, 26,197,184,193,239, 77, 94,183,247,248,119, 89,199,166, 20,114, 69,191,234,184,181, 28, 96,101,228, 57, 49, 41, 33, +203,179,170,178,157,171,119,179,199,124, 62,223, 94,175,215,167, 39, 71,221, 54,235,238,185, 70,189,230,161, 12, 67,187,152,140, +108, 98,226,179,155,129,220,222,175, 28,137,115,189,198,148,201, 52,133,176, 38, 62, 11,102,165, 54,243,249,181,183,209,115,118, +118,150, 88, 90, 90,182,177,176,176,112,147, 74,165,226,156,156, 28,117, 78, 78, 78,124, 92, 92,220, 69, 0,198,191, 34,143,118, +126,189,166, 49, 52,102, 23,127,158,155, 25,113,100,113,197,235,247, 92, 64, 81,134,105,197,159, 23,103, 70, 28,157,249,119, 56, + 86, 14,254, 31, 54, 5, 97,191,166,105,166,133,137, 24, 23,101,132, 31,253,177, 42,219, 55,107,214,172,183,193, 96, 16,149,124, +231,243,249,218, 91,183,110, 29,230,206,130,191,200, 96,185,250,246,181, 54,240,200, 28, 30, 67,127,196, 18,162, 72, 13, 59, 32, +251, 59,103,176,102,240,224,123, 52, 77,215, 40,189,140,101,217,196,248, 59, 59,222,213,197,182,198,242,241, 77,166,164,101,169, +243,191,223,249,116,126,121,230,195,161, 81,255, 27, 20, 77,213,166, 40, 10, 52, 5, 48, 52, 5, 0,201, 9,119,118,150,245,240, +105,103, 11, 25,207, 59, 95,105, 12, 7, 80,105, 37, 36,182,241,116,225, 89, 59,134,180,251,112,172,199,189, 51, 91,124, 77,122, +253,123,202,244,200,136,119,144, 55,251,186,117,235, 6, 49, 12, 99, 59,118,236, 88, 1, 0,172, 92,185,210,211,100, 50,101,189, +120,241,226, 46,128,140,106,153, 43,251,122,131, 87,127, 63,119,123,215,174, 93,145,156,161,196,210,149, 63,182, 59,125,124,223, +199,239,204,100, 57, 7, 72,140, 66, 38,252,127, 95,207,170,209,173,125, 16, 47,183,208,128,147, 23,111, 13, 62,176,121,105, 7, + 75, 52,108, 80,145,201, 98, 85,185, 51, 29, 21,164, 11,171,202, 5,128, 1,191, 43,255,114, 67, 71, 27, 41,186, 58,139,120, 97, + 89,192,175,149, 38, 37,240,211, 51,124,129,192,157,162,232,162,227,206, 80,160,139,203,128,209,160,139,123,113,109, 75,231,191, +197,133, 58, 96, 80, 42, 5,202,150, 46, 78, 31, 69, 1, 52, 77,131, 71, 1, 32, 36, 63,230,230, 86,219,119,240, 55,150,254,158, + 86,245, 91,122, 42, 55,133,196,100,203,121,109,198,159,160, 8,253, 99,252,213, 21, 97,230,108, 44, 22,139,173,143, 29, 59,102, +223,165, 75, 23, 75,135,250,189, 66,204,217, 70,200, 20,250, 29, 63,126, 84,208,165, 75,231, 42,148, 79,239, 78,160,233, 29, 20, +192,103, 89,178,146, 97,201,190,194,172,103, 47, 80,197,201,132,237,235,247,154, 7, 10,190,102,111, 64,240, 36,227,241,145, 89, +213,220,183,140,196,161,222, 16,137, 88, 60,201,211,219,199, 59,246,101,244,179,252,252,188, 21,234,244,103,155,138,111,254,204, +134, 50,154,198,159,189,120,163, 47,143,207,167, 58,183, 15,146,105,129,206, 85,213, 40,141,163,163, 99,239,181,107,215,214,105, +222,188, 57, 0,192,104, 52, 90,236,223,191,223,105,254,252,249,178,103,207,158,253, 90, 29, 77, 23, 23, 23, 87, 75, 75,203,154, + 18,137,196, 21, 0,212,106,117, 82, 94, 94, 94,124,114,114,114, 82,165,233,105,212,215,142,152, 12,243, 78,255,250, 51, 15, 0, + 58,247, 25,185,160, 86,219, 73,214, 20,195, 87,151,181,190,201,168,147,105,115, 94,126,125,225,216, 22, 10, 0,222,235,249,249, + 84, 59,223,190,235, 50,159, 28, 72,251, 75, 78,214,190,125, 25,187, 40,125,111,138, 80, 19, 2,154, 52,105,214,167, 87, 87,248, +213,117, 65,239,254,163, 39, 1,168,146,193, 50, 24, 12,162, 3, 7, 14,212,160,105,154,209,235,245,154,254,253,251,167,191, 77, +210, 60, 91,126,122, 3, 20,229,166, 55, 26,127,137,187, 85,119, 1, 48,135,125, 51,237,206, 47,121, 51, 64,209,195, 9,203, 38, +164, 62,216,211,130, 51, 88,197,216,122,245,144, 27,120, 36,188, 93,235,102,182,211, 70,127, 40,252,105,223, 85, 28, 5,149,148, + 18,182,223,245,239,154, 65,154,166,107, 28,217,181,214, 65, 34, 98, 0, 0,133,106, 19,250, 12, 30, 91,249, 9, 28, 56,240, 50, + 40,212, 43,105, 67, 53,153,140, 98, 30,143,175,161, 0,128, 42, 26, 29, 32,145, 8,111, 77,108, 22,153,247,121,143,218,159, 78, + 89, 23,186, 21,128, 21,128,212, 50, 47, 90, 52, 93, 99,207,230,149, 14,174,182, 98,240, 24, 10,133,106, 35, 62,252,116,130,169, + 44,195,182,105, 70,243,121,131,187,214,234,231,208,229, 96,159,220, 2,221,169,138,210, 41,115,244,245,145, 90,218,159,235, 51, + 98,158,139, 26, 22,152,185, 96,133,195,141,179, 7,174,166, 36,197,233,227, 19, 19, 85, 70,189, 33, 50, 43, 59,101, 98, 97, 74, + 84,148,185, 23,106,185, 92, 94, 71, 46,151, 55,106,216,176,161,120,210,164, 73,252,118,237,218,189,250,113,196,136, 17,130,203, +151, 47, 59, 47, 91,182,172,219,195,135, 15, 53,133,133,133, 97,133,133,133,209, 0, 76,230, 30, 19, 39, 39,251, 47, 63,234,221, + 3, 29, 62,250, 31, 76, 44,133,225, 99,198,227,204,169, 95, 71, 1,120, 39, 6, 75,206,208,115,135,143,157, 94,163,109,243, 38, +188, 37,251,159,195, 82, 42, 64,231,166,129, 60, 17, 51,217,121,207,230,101, 43,144,135,161,101, 69,174, 88, 85,238, 76,127, 59, +125,255,158, 45,106,227,232, 30,125,127,188,247, 13,104,169,213,171, 72, 86,157, 46, 99, 21, 34, 83,250, 90, 87, 43,198, 65,100, + 74, 95, 91,167,203,216,243,209,167,215, 22, 84,148, 22,190, 64,224,190,105,221, 66, 47, 27,185, 0, 12, 67,129, 71,211, 96, 24, + 10, 90,157, 9,131, 71, 79,123, 87,197,156,145, 56,120,117,163,129,207, 81, 84, 19,110, 81,167, 71,157,172,202, 49,161,104,198, +118,255,230,101, 60, 7, 75, 33, 24,134, 2, 67, 23,189, 94,166,170, 49,238,155, 57,150,111,107,212,187,182,116, 8,250,166, 95, +189,206,205,252,109, 26,238,189, 73, 89, 53,235,218,207, 54, 83, 35, 25,178,231,200,229,254,164,245,215,183, 9, 97,191, 79,188, +182,250,108, 69, 34, 90,173, 54,173,115,151,174, 22, 20, 79, 38, 61,127,104,107,155,146,135,205, 27, 76,236,111, 15,135, 39, 64, +201, 77, 12, 75,128, 17, 95, 12, 67,231, 46, 93, 85,172,145, 77,172,194, 69, 99,199,233,243,215,236, 53, 6,130,229,107, 55,206, + 83,230,101,206,139,121,106, 27, 91,152,151,249,181, 58, 61,234,168,249, 78, 5,190,207,110,236,255,112,215,241,155,240,247,243, +133,137, 45,122,190,170,119, 13, 25,118,159,184, 5,159,122, 62, 69,147, 55,179, 4,245,220,228,104,251,193,167,213,220,189,109, +121, 50,199,140,221,189,251,125,222,247,195,143,250,195,202, 66, 14,157, 94,235,125,241,236,169,159,215,175, 93,218,178, 48, 53, +114, 72, 85,204, 33,203,154,132,191,125, 54,136, 1,240, 1,232,170,123,240, 93, 92, 92,236,131,130,130, 94,125, 55, 26,141,240, +240,240, 64, 82, 82, 82,189, 42,223, 8, 56, 56, 72, 93, 92, 92, 62,152, 56,113,162, 67,251,246,237,249,246,246,246, 0,128,140, +140, 12,215, 75,151, 46, 5, 44, 95,190, 60, 61, 57, 57,249, 68,122,122,186,170, 92, 83,193,106, 4, 12,225, 49, 34,145,164,216, +215,130,158, 52,118, 96, 67,123,123,251, 50,111,142,179,178,178,133,179,103,207,162,120, 60,126,209,250,132,208,132, 53,149,251, +140,145,230,205,155,247,212,235,245,226,178,126,203, 52,218,119,211,176,194,126, 40,126,152, 49,143, 97,114, 82,194, 14,218,155, +125, 34, 53,232,249, 62, 47,154,172,239,209,171, 87,173,222,221,218,193,217,222, 18, 23,111, 69,226,171, 25,203, 97, 48,154, 86, + 85,235,226,193, 48,188,244,244,244, 88,107,107,107,167,119, 80,223,214, 62,178,107,141,195,165,171,247,166,174, 19,237, 25,173, + 51, 12, 49,148, 60,254,206,196, 18, 72,179, 4,252, 54,189, 58, 41,108, 93,189, 37, 27,215, 45,225,115, 17,172,210, 7, 66,200, +204,111,213, 34,200,118,218,248, 97,194,249, 27, 67,112,243,236, 9,117, 74,216,129,119, 98,174,228,246,222,205, 41,134, 55,146, + 98, 24, 25, 69, 83, 66,214,196, 38, 24,117,186, 5,234,172,168,148,183,213, 54,177,192,193,235, 85, 52,230,132,120,254,252,195, +114, 7, 71, 43, 17,212, 58, 35,134,126,249, 45, 54,172,154,167,176,183, 20, 66,171, 55, 97,203,145,187,153, 13,149, 43,200,231, +221,106,127,186,112,211,227, 95,191,223,241,244,215,138, 46, 98, 52, 69,195,193, 82,132, 5,187, 35, 97, 33,229,195, 70, 46, 4, + 77,151,109,174, 62,239, 81,164,153, 91,160, 51, 2, 16,150,119,113,147, 57,213,111,173,176,115, 57,240,225, 23,243,236,163, 50, + 40, 16,162, 67,180,165, 8,125, 6,143,182,170,235, 36,129, 76,204, 32, 54, 33,197,227,155,201,147, 3,195, 9, 29,164, 77,141, +140,175, 44,219,181,106,213,234,211,189,123,119,233,196,137, 19,249,110,110,110,216,177,255,140,123,167,190,227,122, 36,165,102, +185,177, 4,112,116,176, 73, 24,214,175,219,177,147, 39, 79,198, 37, 36, 36,240,151, 46, 93,218,244,208,161, 67,126,169,169,169, +102,223,137,154, 8,129, 90,103,130,201,196,194,196, 82,200,200,173, 86,139, 35, 93,254, 93, 53,233,245,126,187, 96,222,202,195, +209, 40, 80, 25, 32, 17, 48,120,158,162, 68,243,230, 65,188,125, 91,168,246,101,109, 49,172,239, 7, 51, 29, 21,164, 75,207, 22, +181,225, 96, 45,197,230,117, 11,113,244, 70, 76,151,180, 2, 10,107, 9, 51,210, 89,196,235, 36, 99, 83,214,182, 11,244,116,122, +175,137, 59,238, 5,122, 58, 93,185,255,244,153,228,227,229, 99,147, 10,249,231,115, 78,143, 43, 40,239,184,219,200, 5,216,120, + 38, 22, 50, 17, 31, 50, 49,175,232, 37,226,129,166,223,238,129,241, 98,103, 95, 55,134, 53, 13, 99, 24,222,176,254,159,124,236, + 50,160,127, 95, 66,209, 12,246,255,122,172,215,206,157, 59, 82, 12,122,221, 70, 19,205,108,210,164, 60, 73,168,212, 11, 80,128, +131,165, 16,223,252, 18, 14,133,148, 15, 11, 41, 31, 10, 9, 31,239, 53,178,127,155,116, 90,143,234, 85,167,219,168, 15,107,181, +175, 87, 83,238, 21,246, 34, 47, 98,216,130,123,171, 46,231,182, 31,191,118,165,159,173, 48, 71,203,251,118,210, 23,188,164,228, +148,246,251,143,133,116, 48,233,134, 70, 26,245,202,233, 25, 15,247, 31, 41, 75, 44, 49,242,102,128,107,179,190, 98,125,161,225, + 81,216,179,196,186,217, 26, 33, 34,226,242,139,247, 41, 31,242,146,125, 91,188,127, 83, 18, 99,145,173, 98,174, 37,217,210,237, + 17,114,179, 74, 77, 81,106, 61,139,176,152, 66,212,242, 14,128,147,179, 11,116,221, 6,214,186,115,241,224,145, 59, 33, 71, 22, +171, 82,159, 78, 55, 87,103,215,241,155,152,191,120, 85, 20, 40, 60, 41,174,205,125, 39, 78, 24,235,181,124,197,218,215,150,141, +254,223, 24,175,234,154,107,169, 99,250,206,142, 61,135,244,109,216,180, 19,162, 94, 68, 35,234,241, 61,188,215,177, 51,186,118, +255, 16, 58,173,230,211, 77, 63,175,189,171, 76,139,252,225,119,215, 92, 39,159, 86, 13,252,125,119,186, 56,187,184, 17, 82,252, +104, 50, 66,160,213,106, 48,249,235,225, 80, 21, 22,160, 94, 61,255,150, 86,173,223,215,130, 98,192,178, 4, 89, 89,153,202,200, +167, 17, 29, 53,233,145,183,205, 77,160, 74,165, 50,100,100,100,224,193,131, 7,120,246,236, 25, 30, 63,126,140,172,172, 44, 88, + 90, 90, 22, 42,149, 74,179, 51,106,101,101,101,209,160, 65,131,129,251,246,237, 19, 91, 90,254,230,249,117, 58, 29,164, 82, 41, +122,247,238,205,111,213,170,149,235,231,159,127,254,153, 94,175,223,149,155,155,155, 95,150, 78,246,163, 19,201,142,254,189,126, +234,214,119,196,104, 0, 16,136,228, 49,171,127,249,245,113, 69,255, 45, 16, 91,184,119,236, 61,180, 46, 8, 1, 69, 81,171,179, + 34, 15,165,150,183,174, 94,175,151,236,221,187,215,149,162,168,215,234,215,121,107,246,182,120, 20,149,210,113,253,156, 41, 60, +133, 76,132,204, 60, 29, 70,142, 30,107,103,182,185,242,239, 57, 38,168,113,192, 15,223, 78, 26, 14,153, 84,130,179,183,162,241, +245,180,197,198,236,204,244,237,160,168,149,153, 17,135,223,182,213,226,157, 12,123,243,114,149, 67,209,185,185,120,248, 39,237, +196, 58,131, 9, 57,133, 6,104,245, 38,176,132, 32, 79,105, 64, 68, 92, 1,236, 44, 5,216,136,127, 63, 85, 50, 88, 60,190,176, +251,184, 33,221,132,203,118,221,198,205,179,187,212, 41, 15, 14, 72, 95, 57,131, 38,253, 98, 18,239,239,173,253,198, 38,225,230, + 84, 18, 60,138, 89,209,162, 89,224,251, 35, 70,142, 38, 13,235,185, 11, 0, 26, 79,162, 94, 26, 54,111,218, 56,228,210, 53,225, +170,252,196,240,153,165, 42,211, 42, 13,223,100, 89, 54,241,205,136, 21,203,254,238,110, 54,188,172, 10,199, 74,198,199, 79, 39, + 98,138,238,140, 65, 96, 41,229, 99,247,165, 68,228,103, 39,101, 54, 84,175,184, 62,172,155, 67,207, 5,155, 34,142,252,120, 44, +237, 62,128,199, 0,210,202,211,164,104,128,199, 80,176,148, 9, 96, 41,229,195, 82,206, 7, 77, 81,229,154,171,111,127,126,184, + 21, 64,228, 27,230,234,149,166,212,193,187,190,194,214,245,240, 71,163, 22, 89, 63,138,215,131,166,129,218, 78, 50, 88,203,133, +208, 25,128,216, 12,125,113, 94, 45, 48,102,226, 28,251,169, 19, 70,157, 76, 75,109,219, 16, 8, 49, 86,148,119,149, 74, 37, 28, + 60,120, 48,223, 96, 48,232, 63,255,106,193,251, 41,105,153,189, 86, 45,250, 70,100,103,103, 11,165,198,136, 7, 79, 98,125, 23, +127,191,174,246,169,203,119, 14, 77, 29,213,235,104,151, 46, 93, 44,247,238,221,203, 86,229,184,103,164,101,174,219,178,227,192, +246,149,203, 22,227,105,108, 54, 54,255,252, 35,136,201,248, 83, 37,135,242, 53,205, 13, 27, 54, 56,108,221,186,149,190,117,235, + 86,214,155, 6,148,162, 32,203,206,211,194, 74, 38,128, 84,196,131,147,149, 8,182, 10, 1, 68, 2, 26, 52,253,218, 69,228,149, +230,166, 3, 39, 22,176,170, 92, 28,221,163,239,191,121,221, 66, 12,253,114, 6,194, 51, 5,167,105,169,213,130, 47,251,245,154, + 98, 35, 69, 87, 87, 43,218,225,189, 38,181, 32, 19, 11, 48,109,220, 96, 4,221,143,117, 72,204,101,103,100,171,208,104,206,105, +204, 44, 43,157, 52, 67,129,199,208, 80, 72,248,184,124, 98,119,186,170, 32, 47,143, 98,138, 34, 44, 6,157, 62,206,204, 98,252, +187,253, 41,117,240,158,218,184, 65,253,133,163, 71, 12,163, 91, 54, 15, 38, 52,205, 67,102,190,158, 34, 32, 24,255,229, 40,140, + 25, 53,220, 41, 49, 41,109,214, 15, 63,110,152,121,241, 28,153,175,204,120, 58,167, 34, 77,134,162, 65,211, 20,100, 18, 62,228, +226,223, 94, 26, 29, 11,138, 2,227, 26,208, 47, 15, 20, 64, 81, 84,114,226,189, 61,190,230,164,211,165, 65,215, 11, 33,233, 2, + 31,213, 73,205,205,231, 81,161, 11,238, 60,140,191, 3, 32,219,173,141,213,103, 6, 3, 65,161,198,136,151,105, 42, 24,117,132, + 26,218,197, 29, 30,125,169,122,139, 54,135,110, 63,245, 16, 22,165, 46,246,175,105, 38,221, 58,160,177,245,255,176,223,202, 53, + 27,238, 46, 91, 56,131,201,202,215,193, 68, 0,137,144,129,184,248, 37, 17, 48,208, 40,243,240,195, 79,191,164, 26, 65,245, 65, + 72,197,101,254,247, 23, 13, 50,168, 79,183, 54,123, 40, 64, 72,209,130, 68, 23,247, 90,238, 29,186, 15, 17,191,215,227, 83,152, +140,250,169,247,175,146, 75,170,244,200, 11,230,104,250,251,249, 2, 20,158,100,132, 31,233, 83, 84, 73,246,250,213,167,158,143, +215,155,203, 60, 61,189,189,204, 57,238, 37,197, 74, 98,239, 53,194,211,167,193,228,102,173, 58,212, 74,206,210,194,218,213, 19, + 15, 66,239,227,204,254, 31, 66,213, 5, 57,203,206, 28, 63, 52,121,254,146, 85,141,186,247,254, 4, 71, 14,239,155,168, 76,139, +252,177,120,159,190,210, 36, 44, 59,104,235,198, 13,110,124,129, 8, 6, 19,129,193,200,194, 96, 98, 97, 48, 18,164,164, 36,163, +160,176, 16, 98,137, 2, 50, 11, 27, 24,140, 69,145, 66,173,214, 32, 27,245,105,247, 49, 26,224,118, 89,233,172, 21, 60,232, 30, +104,170, 70,209, 61,106,241, 49,211,106, 84,206,206,206,219, 1, 64, 36, 18, 65, 36, 18,193,104, 52,226, 81, 50,198, 59, 59,181, +153, 6, 82,124,176, 89, 54, 49,245,193,158,192,242,242,238,230,230,214,163, 44,115, 85, 88, 88,136,235,119, 31, 90,110,217,123, +182, 75,108, 66,106, 29,214,228,160,149, 56, 53,234,156,155,123,169, 71,121,251, 51, 45,252,200, 24,183,182, 95,209, 19, 71, 15, +246, 92,253,203,129, 59,207,207, 44,168, 48,156,236,241,222, 20,221,228, 49, 3, 2,191, 91,189, 57, 42,233,202,234,175, 43, 59, + 70, 2,129,128,159,145,145,241,234,252,158,183,246, 96,215,248,180,252,142,223, 47,156, 33,120, 16, 93,136,135, 47, 83, 48,164, +147,187,217,231,187,147, 95,239,122, 53,106,186,174, 90, 53,255, 43, 60, 75, 86, 99,237,193, 59, 8, 57,177,253,190, 94, 83,240, + 65, 70,196,177,244,234, 92, 67,222,129,193,250,157,102, 73, 69,112,233, 97, 38, 10,212, 69,198,202, 96, 98, 81,160, 54, 34, 61, + 87,139, 60,165, 1,133, 26, 3,134,116,116,175,186,251, 35, 36, 8,128, 61,128, 12,138,162,238,150,254, 94,226, 65, 75,170,152, + 55,190,103, 22, 71, 12,109,139,235, 10, 97, 41, 89, 93,169, 32, 70, 89,203, 75,182,143, 0,224, 91,172,105, 2,112,135,162,168, + 28,115, 12, 22, 41, 9, 87,150,218,201,101,222,178,154,140,134, 26, 46,206,206, 96, 73,226,107,171,184, 7,247, 83,141, 27,246, +177,100,153,201,168, 76, 9, 59,104,118,159, 44,185,189, 87, 11,129, 64,120, 98,241,146,165,164, 95,143,182,194,212, 60,131, 58, + 34, 73,147, 81,168, 37, 70, 39,251,186,162, 37,223,125, 39, 95,180,100,217,255, 14,253,202,230, 22,166, 69,124, 95,150,134,115, + 96,255,123, 20, 69,215,160,127, 11,203,131,176, 36, 49,233,222,238, 64, 0,120,155,190, 86, 74,141, 17, 12, 67,129, 95,220, 39, + 69,165, 51, 65,149,155,154,213, 80,181,234,250,176, 46, 69,230,234,118,146, 83, 52,195,100,232, 1, 84,216, 4, 65, 83, 20,242, + 85, 6, 88, 72,248,176,148, 9, 96, 37, 21,148,142, 96,149,101,174, 30, 87,164, 41,208,235, 19, 76, 6,173,134,152, 76,232, 22, +100, 15, 7, 75, 33,156,173, 69, 16, 11,121, 48,152, 0,181,142,133, 90,103, 66, 92,186, 10, 5, 42, 17, 26,180,237,239,105,231, +124, 91,149,250, 50,112,107, 86,220,189,145, 21, 70,152, 76, 38,236, 60,112,198, 51, 41, 37,189,215,145, 29, 43, 68,233,121, 6, + 60,140, 45, 68,122,142, 14,132,178,196,180,153, 51, 69,223,126, 59,251,195,125,135, 47,188,108, 17,232,157, 88,213,253,170,202, +136,220,177,255,224,129,117, 31,244,232,173,136,184,115, 10, 81, 15, 46,124,171, 76,175, 90,255, 43,119,119,119,211, 15, 63,252, + 96,245,211, 79, 63,121, 30, 57,114, 36, 33, 35, 35, 35,166,228,164,178, 85, 8,146,207, 93,188, 98,219,182,101, 27, 94, 66,166, + 6,118, 10, 1,220, 29,165,184,127,227,146,142,166,168,211,101,233, 21, 55, 3, 14,192,123,223,224,232,141,152, 46,143,179, 68, +151,191, 24, 62, 52,246,220,137, 59, 89,107,118, 92, 88,234, 42, 55,132,137,217,244,181,247, 3, 61,157,166,142, 29,140,197,107, +118, 32,228,254,211,116, 37,237,178, 48, 69,107, 44,119, 80, 1, 67, 3,124, 30, 5,133,132, 15,149, 50, 47,239,241,133,245,222, +239,232,230,232,179, 51,135,119,208,217, 5, 6, 36,102,170,169,228,172, 2, 24, 89, 22, 86, 50, 33,140, 44,144,155,157, 73,237, +220,185, 3,119,239,222,164,193,208, 95, 0,152, 83, 89, 4,139,161, 41,200,197, 60,200, 37, 69, 81, 32,185,132, 7,189,145,133, + 87,109, 55,172,154, 55,206,194,222,193, 17,239,247, 25,105,118, 2, 37, 50,235, 70,219,214,207,199,229,155, 97,237, 46, 61,223, + 29,228,224,223,104, 13,223,196, 95, 6, 66,212, 90,131, 9,249,121, 57,208,104, 19, 16,236,154, 9, 27,153, 9,177,249,206, 8, + 79,141,146, 87,118,161,207, 10, 63,244,128, 34,189,103,238, 63,118,113,113,231, 78,237,240,248,101,126,145,185, 18, 20,153, 43, + 30,197, 98,197, 79, 27, 12, 57,121, 5,221,179, 30, 31,201,172, 70,249, 60, 95,124, 49, 46, 50, 8,166, 66,251,157,107,103,110, + 27, 62,121,105,231,206, 31,126, 70,133,223,189, 52, 93, 5, 92, 48, 55,122,254,251,101,196,172,101,229, 93, 74, 28,234, 6,238, +218,178,117,119, 63, 63, 47, 55,164,229, 26,144,156,163,199,213,251,207,113,104,195,244,220,220,180,232, 65,208, 23, 22,178,148, + 49,239,236,153, 99,167,255, 55,110, 50,234,215,111, 84, 43, 63, 49,223,226,205,190,135, 44, 67,109,248,116,216,168,126,142, 14, +142, 10,182, 56,130,197, 18,130,122,245,252,208,173, 71, 31, 92,190,114, 3, 17,143, 31, 22, 45,103,139,134,157,231,230,100,165, + 26, 13,186,173,229,150, 35,134,170,177,229,167, 21, 14, 52, 5,232,141, 44,116, 6, 22, 83,167,125,171,251,106,214,218, 86,157, + 91, 54,124,204,128,205,143, 79,201,181,186, 27,153,210,128,226, 91, 56, 15, 28, 49, 69,160,214,155,144,175, 50,224,194,254,213, +229,102,218,185,118,195,230,242,154, 45,135,141,152,241,147, 72,196,208,250,250,222,110, 49,109,155,213, 79,168,233, 98, 87,176, +104,245,206,224, 27,247, 35,187,245,249,232, 67,113,191, 58,126,148,139,173, 88, 49,106,204,216,134, 38,207,150,159,166, 61,191, +190,189,220,202,143, 39,202,117,171,225,246,170, 41,209,190,126,175,135, 0,222,172,249,227, 50, 30, 31,105, 8, 0, 14,142, 78, + 26,138, 47, 42,168,130, 33, 32, 0, 48,119,205,129,110,137, 25,133,125,191, 95, 56, 67,240, 32, 70,137, 7,209,121, 16, 10, 24, +104,245,230,119,107, 51, 81,100,252,148,177, 67,249,217, 74, 35, 46, 61,204, 64,248,189,139,196,168,207, 31, 66, 40,222,231,118, +245,123,125, 74, 1, 30, 4,120, 73, 83,248, 89, 71, 99,107,222,195, 35,121,213,141, 96,217,251,126,216,130, 98,208,141,225, 9, +130, 0,214,199,104, 48, 56,208, 12,147,153,246,240,160, 99, 21,242, 14, 85,122, 20,150, 46,154,133, 85, 27, 15,225,206,179,108, + 88, 26, 19,112,100,243, 66, 76, 92,188, 19, 42,157,169,162, 52,148,231, 71,236, 41,138, 58, 78, 8,233, 78, 8,233, 8, 64, 88, +242,189,232, 26, 70, 29, 47,254,239,215,190, 79,157, 58,117,250,226,197,139, 31,151,172, 91,178,188,100,221,138,150,151,218,222, +118,218,180,105,254, 75,150, 44, 89,212,188,121,243, 61, 55,110,220,136, 1, 96,150,193, 42,157,137,114,207,114, 7,255,158,193, +132,176,140,147,173, 28,158,181,221, 32,251,248,115,201, 73,138, 82, 50, 12, 77,111, 89, 57, 77,156,165,230,129,199, 48,102,199, +123,197, 14,245,154, 74,228,178,147,123,247, 29, 36, 94,181,156,132, 7,111,229,198,223,143, 81,189, 10,233,230,103,196, 9, 61, +109,180, 76,191, 79,250,200, 78,159, 61, 55,190, 16,248,190,236,138,129,174,177,102,197,119, 14, 10, 9, 31, 52, 5,228,171,141, + 24, 63, 97,202, 91,215, 94, 4,132, 25, 51, 97, 54,104,170,168,242, 41,204,203,198,194,149, 91, 10,251,212,184,120,109, 88, 23, +187,158, 11, 54, 69, 28, 57,251, 68,242,252,195, 15, 59,228,197,198,198,230, 36, 39, 39, 87,220, 4, 67, 76,137,125, 63,251, 74, + 64,211, 69,205, 70, 20, 69, 1, 48,165, 85,199, 92, 1, 64,110,238,203,124,177, 80,254,225,142, 21, 99, 55,214,172,225,106,163, +144,138, 33,151,137, 40,159,122,117,197,205,154, 54,151,184,215,173, 47,184,242,164, 16,241, 25,106, 68, 39,229, 67,100,239,207, +239,215,174, 19,118,172,158,210, 45, 43,238, 94,165,249,191,120, 51,188,199,143,203,102,136,210,114,244,120,146, 80,128,212,108, + 45, 82,115, 52, 72,205,209, 66, 46,230,161,217,123,125, 68, 71, 47, 28,232,221, 34,208,123, 77,117,246,111,244,139,152, 67,113, + 73, 41, 67, 26, 54, 14,198,206,109, 91,154,193,213, 85,140,164, 36,141,185,219,111,220,184, 49, 59, 32, 32,192,238,251,239,191, + 87,214,171, 87,175,209,134, 13, 27,106, 63,123,246,236,114,157, 58,117,122,172, 95, 61,255,242, 87, 51,150,185,243, 96,180,108, +214,178, 37, 35, 21, 82,184,117,229,172,118,235,198,159,146,245,185,133,147, 43,172,189,164, 86, 11,210, 10, 40,216,187,184,133, +203,248,134,247,249, 82,253,179,156, 29,227,118,228, 0,191,214,233, 50,246,252,165,123,145,207,154,220,143,117,184,120,255, 89, +122,182,202,224, 29,125,122, 98,133, 23, 92,134, 42,142, 96, 73,127,139, 88, 58, 52,236,251,156, 80,148,125,137,177,161, 80, 20, +209,162,138, 78,194,228,164,208,125,102,116,140,166, 8,203, 2,207, 18, 11, 81,160, 54, 66, 99, 48,194,205, 78,134,140,180, 68, +172, 95,179, 21,161,247,238,226,253,174, 61,241,195, 47, 59, 49,252,211,143, 53,149,157,152, 52, 77,129,166,169,226,200, 85,145, +185,146,139,121, 0, 5,228, 42, 13,248,245, 90, 2,234,214,166, 65, 85,161,181, 80, 33,151, 32,175, 64, 3,154, 47,199,211,171, +219,165,167, 46,222,153, 54,103,217,166,111,242, 11,211,226, 95, 68,220, 68, 61,235, 44,212,118,209,225,113,154, 37,238,101,215, + 66,189,186,117, 64, 11,238,154,165,157,249,184,193,210,163,244,193,238, 65,141,253,154,215,116,176,132, 90,103, 42,142, 98,241, +176,117,203, 22,196,190, 76, 28,150, 21,113, 36,244, 93, 56, 89,101,122, 76,134,200,193,243,127,143,110, 93,136,233, 61,104, 12, +156, 92,107, 54,202,141,127, 96,102,247, 4,243,204, 20,107,158,193,162,109,106, 53,222,182,109,199,254,126,181,107, 58,225,220, +157,151, 8,125,145, 3, 11,133, 21, 24,153, 51,188,219,126,110,245,232,244,234,143,212,153,133,219,248, 2,233, 23,193,205, 90, +130, 16,130,200,167,143,179,243,242, 44,127, 87, 4,212, 41,145, 15,110,166, 68, 90,188,102,138,237,124, 26, 41, 44,109, 30,104, +244, 38, 36, 37, 37,226,250,141,203, 1,234,148,200, 7, 85,217, 95, 34, 1,141,179,247,211,161, 55,178,208, 27, 88, 4, 52,240, +209,240, 5,146,214,223,109, 60,209, 44, 53, 45,157,150,202, 45, 89, 75,187, 58, 2, 43, 67,170, 54, 44, 38, 79,160, 55,178,168, +227, 92,241,125,185,212,166,206,162,175, 39,124,229,203, 19, 74,144,175,212,234, 82, 18,147,156,126,222,125,169,240, 73,100,132, +171, 71,173,154, 22,243,231,207, 17,228,107, 8,210,115,181,200, 44,208, 83,159, 12, 24,230,178,125,243, 15,131, 0,108,175, 66, +210, 27,236,217,254,147,193, 70, 46,160, 10, 84, 6,146,145,175, 49,141,249,223,248, 6,111, 83,118, 94, 51, 87,209, 74, 60,136, +201,133, 72,192, 64, 36, 96, 96, 48,154,215, 69,210,206,183,175,204,206, 86, 54,168,105, 99, 79,156,185,159, 1, 30, 67, 65,173, +204,215,137, 69,242,112, 31, 31, 47,186,113, 35,127,180,107,213, 2, 47, 98, 98,235,157, 57,119,113,229,157,187,161, 11,249,245, +123, 79,206,124,124,248,135,170,164, 53, 46, 41, 67,150,102,116,235,239,224,100,231,223,179,103, 15, 81, 77, 87, 71,202,206,214, + 10, 38, 8, 48,122,204,151, 14,102,183, 26, 17, 2, 2, 96,201,188,105,208,234,116,112,176, 18,130, 16, 96,243,218,185,208,233, +116,112,177, 21, 35, 79,105,168,204,232,149,235, 71,202, 50, 68,111, 26,173,146,207, 37,235, 45, 94,188,184,251, 27, 6,176,123, + 57,198,240,119,235,149,108,191,100,201,146, 69,165,126, 87, 85,165,137,144,170, 40, 83,118, 13,122,183, 20, 9, 37,103,127, 88, + 60,158,206, 85,234, 33, 18,208,168, 83,219, 3, 99,199,125, 37,125,175,177, 3,212,176,192,193,221, 91,243,141, 38,195,113,179, +238,108, 29, 61, 3,101, 18,233,233,205,219,118,179, 78, 14,118,212,207,231, 51, 98, 50,242,141,175,166, 56,120,118,251, 40,123, +239,204,207,206, 4,212,105,169, 88,226,169,213,105,173,203,189,226, 20, 31,208,205,103, 99,193,208, 52,152,119, 52,179, 23, 77, +211,166, 95,214,204,135,157, 69, 81,159,171,185,171,118, 20,244,176, 63,125,177,180,185,106,220,184,113, 94,163, 70,141,114,105, +186,242, 63, 77,184,187,171,172,209, 18,213, 50, 87, 37,104,210, 30,221,213, 0,254,121,177,191, 45, 59,133, 0,190,157,199,254, +137,253, 7, 14,154,230, 88,191,135,226,101, 74, 30,132,180, 1, 65,190,206,184,124,230, 87, 54, 33,230,201, 40,115,180,211,179, +242,220,236,108,109, 17, 26, 93,136,228, 44, 13, 82,178,139,204, 85,106,182, 6,249,106, 35, 26,123, 56, 32, 55,175,208,173,218, + 6,150, 34,135,207,156, 62, 51,164,107,175,126, 24,251,205,156,174, 27,127, 92,254,176,208, 65,241,169, 38,253,233, 29,115,182, + 63,112,224,128,233,222,189,123, 49,153,153,153, 65,147, 39, 79, 46,240,240,240,112,154, 63,127,254,136, 58,117,234,184,188,215, +190,125,222,221, 75,205,182,125,245,205,156,246,211,191,218, 88,155,166,233, 52,194,146,163,201, 74,195,108,100, 62, 81, 87,120, +156,142, 78,127, 58, 59, 90, 63,228,189,214,182, 71,109, 37,180, 31,159,210, 14,128,239,156,125,120, 50, 71, 31,125,122,109,129, +228,227,229, 99,147,114,217, 25, 26,218,105, 97,101,230,170, 40,130, 69, 65,167,103, 97, 33,225,151,140, 28, 5, 8,156,127, 92, +187, 92,106,111, 41, 2,143,161,192,103,104,228,169, 12,200,202,215,225,155,201,147,205,221,131,172,137,101,161,210,154,160,214, + 25, 65,129, 66, 65,126, 38,166,125,243, 53,186,246,232,131, 97,163, 38, 32, 87, 13,220,139, 41,128,222, 96,168,212, 22, 49, 20, +160,210, 26, 49,172,179, 59,178, 10,244, 80,106,140,208,233, 89, 72,197, 60,240,120, 52,100, 34, 30, 20, 18, 62, 40,138, 8,156, +156,156, 70, 0, 0,159,207,215, 36, 36, 36,236, 40,191,121,158,160,150,155, 35,212,122, 26,193,253,150,161, 99,115,111, 60, 56, +183,137,119,229,246,163,218,223,204, 89,137, 49, 3,154,227, 64,100, 93,216, 56,212,130, 92, 42,134,129,208, 0,136,153, 29,242, +230,176,180,254,195, 1, 63,253,178, 57,114,222,183, 83,196, 57, 74, 10, 34, 1, 15, 23, 47,158,199,205,219,247, 86,103, 70, 28, +217,241, 46,251, 82,240, 9,237,104, 97,105, 1,177,144,129, 94,175, 53,187,195,183,137, 37, 0,129,175,189,127,175, 95,139,143, +189, 47, 91,198, 50, 51, 34, 88,148,165,139,255,150,159, 54,238, 28,228,236,228,128, 67, 23, 30, 98,219,198,117,112,245,239,138, +231,247,127,130, 91,147,222,144,215,238, 0,161, 98,255, 8,154,225, 53, 24,243,213,180, 62, 77, 2,155,227,198,213, 75, 72, 79, + 77,249, 9,136, 52,171, 15, 26,195,167,198,181,239,216, 29, 90,189, 9,173, 59,116,199,233, 99,135,198,162,120,240, 68,117, 97, + 24,154,253,114,120,127,126,122,174,142,159,158,167, 69, 82,166, 26, 49,169, 74, 28,217,187,201,236,176, 29,197,208, 65,109, 27, +213,224,143, 88,122, 49,193,173,134,179,150,175, 85, 75,158,189,120,225,243,197,144, 65,124, 15,207,122,116, 70,174, 22, 25,121, + 58,100,228,233,160,212, 24, 80,215,165, 38,173, 53,242,154, 87, 53,173, 14,150, 98,254, 15,199, 99, 96, 33,229,161,133,175,109, +181, 59, 97,179, 44,251,155,185, 90, 80, 20,185, 10,139,201,131, 88,192, 64,200,103, 32, 18,208, 48,152,136,153,117,145,177,255, +200, 33,159, 72,116, 6,130,204,124, 29, 24,154,130,147,157,173,200,205,217, 27,155,151,125, 9, 0, 24, 62,229, 71,124, 49,116, + 48,234,121,123, 34, 47,175, 64,242,197,232,175, 86, 0, 48,203, 96, 17, 66,200,206, 35, 87,252,238,133,199, 77,252,108,200,167, +252,126, 61,219,208,161,209,249, 72,201,214, 34,250,185, 10, 58, 67,213,102,163, 49,154,138,218,124,183,236, 59, 14,169,128, 65, + 70, 94,209,233,178, 96,237, 62,200, 37, 60,164,230,232,192,178, 21, 70,239, 42,244, 35,229, 69,157,170, 66,105, 19, 86,209,114, +138,162,142, 79,157, 58,117, 58, 0, 50,117,234,212,233, 37,223, 23, 47, 94,172, 6,144,108,174,193, 66,121,205,130,118, 13,122, +183,148, 8,197,103,183,175,157, 46,185,240,140, 96,245,217,251,232,214,204, 25, 2, 30, 5,177,220, 9, 15, 98,114,113,225,194, +145,130,171, 55,111,107, 40,218, 80,233,176, 40,137,147,119,128, 84, 36, 59,191,110,195, 54,163,163,147, 19,118, 95,203, 73,206, + 42, 52, 26,126,107,158, 50, 80,247,206,252, 92,219,200, 26,186,104,210,158,223,173,236,206,155, 37, 68,176,120,253,209,162,105, +233, 89, 19, 88,176, 96, 4, 34, 89,205,224, 65,105,160, 0,147,137, 21,243, 24, 90,243,170, 29,164,168,106, 74,140,191,179, 59, +176,178, 35,108, 33,229, 99,111, 72, 34,242,178,147, 51,123,216,159,190, 94, 98,174, 78, 63, 22, 61,111,210,164,113, 94,211,166, + 77,115, 69, 34, 17, 24,134,169,206, 49,126, 43,115, 85, 62,161,134,204,151, 88,114,240,160,184,103, 87,153,127, 83, 33,197, 71, + 19, 31,103, 92, 62,123,136,189,121,106,211,135,234,244,168, 19,230,134,120, 11, 53, 70, 36,103,171,145,148,169, 70, 74, 78,113, + 4, 43, 91, 11,138, 2, 52,186,183,155,190, 70,157, 30,117,108,199,142, 77, 63,105, 13, 24,213,250,253,222,152, 56,103,157,231, +142,159,150, 94,141, 37,198, 32, 85,198,243, 71,102,221,113,197,197,105,119,238,220, 25, 90, 80, 80,208,105,197,138, 21,133,190, +190,190, 66,137, 68,146, 5, 64, 28, 21, 25, 41,184,120,114,255,203,140,228,228,145, 6,131,225,174,185,233,114,111, 59, 68, 36, +209,135,142,112,151,182,232, 92,199, 73, 10,119,169,178,179,143, 60,236,251,172, 14, 95, 45,202,184,184, 58, 61, 69,107, 60,151, +173, 66,163,164, 66,254,121,179, 46, 54,122, 93,220,192,145, 83,193,208, 20,244, 90, 93,220,171,230, 8, 75, 17,230,236,120, 2, +133,132, 15,185,132, 15,133,132,135,150,190,182,168, 66,128,136, 24,140, 4,106,157, 17,106,173, 9,106,173, 17,118, 53,173,240, +203,246, 3,136,207, 80,227,232,221, 76, 60,141,205,135,183,155, 12,132, 84, 30,119, 98,137, 73,249,201,136, 25, 10,134,166,193, + 80,160,125, 60,107, 33,187, 80, 7, 1,143,134, 80, 40,132, 84,204,131,133,148, 15, 62,143,143, 59, 15, 31, 66,171,213,162,105, +211,166,226,202, 26, 28, 20,114, 9,188,106,187, 64,111, 48,226,228,149, 8, 44, 24,255, 33, 58,181, 9,196, 55,140, 16, 79,181, +141,161,176, 81,128,165, 24,232,141, 44,180, 6, 19, 0,170, 34, 3,220,162,184, 95,132, 6,192,173,212,200, 67,241, 38,166,215, +136, 83,103, 47,238,232,209,237,125,132,134, 61,198,193, 67, 71,175,102,218,230, 77, 42, 29,149,192,111,163,224, 30, 87,179,184, + 82,132,166,199, 55,111,217, 14,133, 57,233, 72, 75,120,105,246, 69,221,175,166, 2, 95,143, 31,235, 85,175, 94, 61, 47, 19, 75, +192,178, 4,126,238, 10,140, 28, 61,218,171,174,167,183, 23, 91, 60,138,208,199, 77, 81,161,142,204,177,222,152,133, 43,214,127, +234,230,230,134,211,215,158, 96,241,140, 81,161, 82,169,220, 35,208, 70, 97,197,214,107,132,152,240,115,176,169,149, 11, 11, 71, +175, 26, 61, 59, 13,169,209,245,131,222,120, 20,118, 31,171,190,159,127, 83,201, 72, 22,153,147, 86,153, 67,109,251, 70, 1,193, + 3, 45,108, 28,145,147, 87, 8,185,181, 3,124, 27, 6, 14,140, 8,211, 78, 81,166,199,100, 84,247, 92,103, 9,129, 86,207, 34, +187, 80,143,196, 12, 53, 94,166,169,240, 50, 85, 5,150,253,237, 89, 34,149,149, 80, 10, 20, 37, 19,241,120, 54,134,231, 53, 31, +158,191, 72,220,221, 28,169,165,243, 39, 51,122, 34, 66,122,158, 14, 25,249, 58,100,228,105,145,145, 95,100,176,172,229, 60,176, +132,173,242,232,140,236, 66, 61, 20, 18, 30, 44,101, 2,152, 76,213,239,243, 61,103,229,238, 22,137, 25,133,239,125,191, 96,134, +224,193, 75, 37, 30,198,228, 65, 36,160,139,162, 87,197, 6,203,220,102, 97,134, 71,143,253,160, 99, 83, 36,100,104,192, 99,104, +240, 24, 26,158,245, 3, 96, 39,101,241, 94,191,169, 0,128, 30,221,138,166, 33,137, 73, 81,226,216,173, 20, 0, 16,152,155,214, +244,204,124,241,161,115,161, 95,237,254,101,169, 80, 99,226, 99,253,137, 88,104,116, 38,136, 4,197,205,238,194,170,213,111, 70, + 83, 81, 4, 43, 33, 67, 15,165,214,132,124,149, 30,132, 0,119,158, 23, 64,165, 53, 33, 79,165, 71,179,122, 54,149,158,115,149, +212, 79,221,223,170,133,170,104,251, 12,252,214, 79,171,210, 8,214,226,197,139, 31, 47, 94,188,184,204,136,152, 57, 6,171,108, +115, 37, 16,159,221,182,102,186,228,124, 36,193,229,135, 89,232,219,186, 6,178,210, 19,177,241,199,213, 44, 33,128, 72, 44, 76, + 53, 25,217, 83, 26,214, 56, 57,239,225,241, 10,219,125,165,118,190, 13,197, 66,209,197,197,171,126,210, 59, 57,215, 96,127,189, +149,155,158,167, 50,189, 22, 43, 52,105,181, 52, 97,137, 64,147,246,220,172, 74,145,166, 41,253,156,177, 31,130, 37, 4,179, 87, +239,195,226,137,253, 33, 23,243,164, 20, 69, 73,149, 26, 35,198,207,223,132, 21, 51,135, 42,164, 34, 94,177, 49, 48, 97,212,216, +111,204, 51, 1, 90, 19,148, 57,169, 89, 13, 10, 87,190, 97,174,154,228, 5, 5, 5,229, 90, 91, 91, 67, 38,147, 85,199, 96,253, +206, 92, 57, 57, 57,185, 72,165, 82,155,146,104, 24,195, 48, 48,153, 76,202,231,207,159, 87,107,210,183,252,220,204,195,201, 47, +195,155,182,108,247, 1, 66,206, 30,102,111,158,220,248, 97, 85,134,152, 91, 89, 90, 36,220,143,136,243, 5,228, 72,202,210, 32, + 53, 71,131,148,108, 45,244, 70, 22,238,142, 82, 36, 38,196,195,202, 82,158, 96,174,158,196,209,179, 11, 77,152,145, 44,133, 95, +212,105,145, 39, 1, 64,153, 28, 49,122,223,142,159, 30, 61,126, 28,182,170,123,255,177,194, 78, 31,141, 22,108, 88,242,191,169, + 0,250,155,125,113, 72, 79, 87, 29, 61,122,244,166,139,139, 75,247,217,179,103,107, 1, 8,181, 90,173,116,232,208,161,210,184, +184,184,175, 1,152,149,198, 86,159,111,182,163,196,164,139,128,104, 6,184, 75,149,239,119,104,211, 28, 45,252,221,144,216,166, + 57, 0,140,139, 83,201,189,181,117,126,217,107, 48,225,212,250,173, 39, 23, 15,239,215,225,235, 29,188, 57, 43, 82,142,207,169, + 48, 34,246,236,234,230,206,101, 93, 58,248,197, 29,223, 75, 27, 44,163,137, 84,165, 9,142, 24, 76, 44, 84, 90, 35, 84, 90, 35, + 10, 53, 6, 92,120,144,142,180, 92, 29,114,148,122,104,180, 38, 16, 0,122, 3, 41,153, 85,164, 98,179,122,115,155, 85,201,103, +215,128,126,121,171,231,141,181, 56,120, 45, 17, 50, 81, 81,127, 44, 75,153, 16, 22, 82, 62, 0,130,203,151, 47,163,100,120,124, +101,119,241, 7, 79,223,193,138,173, 23,113,122,211,100,136,133, 12, 26,245,158,135, 33,189,155,130,101, 9, 94, 68,134,167,121, +249, 54,118,164,229, 82,208, 52, 74,250,164, 84,180, 63,109, 1, 28, 5,208, 29,192, 7, 0, 72, 70,196,145,156,195,166, 44,229, +197, 19,187,101, 74,181,214,152, 19,247,100, 29,148,153,109, 75,146, 80,124, 7,124, 25, 64,155,234, 6,179, 37, 14,222,171,191, + 24, 61,190,111,221,186,117,176,111,215,102, 16, 66, 29, 52,119,227, 29,199,110, 98,229,170,215, 71, 12,142, 28, 61,218,107,195, +250,245,175, 45,251,116,232,136,138, 70, 17, 82, 86,246,206,147,235,249,248,225,214,227, 68, 44,253,118, 76,168, 38, 61,102,128, + 78,110, 59, 82,175, 76,153,224,231,223, 24, 78,142,182, 72, 77, 73, 67,251, 94,157,208,181,115,103, 60, 10,187,143, 5,179,190, +185, 9,149,238,253,202,162,182,191, 25, 33,254,168,118,157,123,243, 85, 90, 61,214, 46,157,133,145,147, 22,162, 89,251, 30,252, +240, 7,183, 71, 1,152,103,110,158,117, 6, 22,237, 27,218, 67,103, 48, 65,111, 96,113, 52,134,225,253, 62, 82, 0,240, 24,154, +110, 92,167,168,121, 55, 95,109,168,248, 32,240,168,212,156,252,130, 90,235, 22,126,197, 40,181, 38,100,228,105,145,158,171, 67, + 70,190, 22,153,121,218, 34,115,149,167, 67,102,158, 22, 60,134, 66, 84, 76, 18, 24,134,170,114,255,187, 92,165, 30,193,222,214, + 0, 40,208,213,108, 14,201, 52,218,119, 13,123,150,248,222,210,249, 51, 4, 15, 98, 10,241,240,101,126,177,177,162, 33, 44,101, +176, 88, 51,186, 96,217,251,246,104, 49,160, 79,183,250, 22, 50, 49,146, 34, 11,192,163, 41,240, 24, 10, 22,246,110,176, 20,107, + 48,118,204, 72,216,218, 88, 34, 62, 83,131,213,135,158,225, 97,196,115,176,234,170,101,251,199,157,167, 63,252,116, 80, 63, 17, +205, 23, 99,199,217, 24, 8, 5, 12,120,208, 33,226,246, 21,109, 90,226, 75,125, 65,126,174,140,199,227,155, 37, 74, 1,196,104, + 98, 65, 8,193,162,185,211,176,103,235,143, 56,125, 47, 13, 4, 69, 83, 53, 92,255,117, 57,198, 79, 93,128,140,124, 29, 0,170, +218, 14,150,162,168, 19,132,144, 15,222, 52, 66,111,154,164, 82, 17,168,178, 52,238,150,214, 40, 89,191, 60, 3, 87,186, 79, 22, +204,156,108,155, 87,134, 83,164, 74,204,149, 88, 40, 60,187,117,245, 52,201,133,103,120,101,174,212,133,153,216,190,105, 67, 33, + 1,219, 49,253,241,209, 59,230,238, 16,169,189,151,191, 72, 42, 10,153,177, 96,181,214,165, 70,109,227,201, 7,249, 89, 5, 26, +211,239,194, 32, 2,169,204, 36,179,180,215,240,132,162, 21,124,181,110, 86,102,230, 19,101,101,135,148, 37, 4,199,110,167, 2, +108,209, 65,220,119, 37,169,104, 30, 31,134,130,137, 45,106,231, 62, 23,154,254,106,153,121, 7, 16,216,123, 54, 52,179, 60,115, +101,101,101, 5, 43, 43, 43,200,229,242,170,150,141, 50, 35, 87, 82,169,212,230,204,153, 51, 98, 11, 11, 11, 48, 12, 3,173, 86, +139, 78,157, 58, 85,171,240, 73, 29,188,251, 55,235,240,225,226, 86,237, 63,192,165, 51,191,178, 55, 79,110,233,163,206,168,194, +252, 61, 0,186,182,105,120,108,233,242,181,181, 39, 77,157, 33,146,137,121,200, 41,212,131,161, 41,184, 59, 72, 96, 43,103,112, +243,226,113,205,128, 46,141,205, 54,127,110, 53,106,109, 95,190,250, 39,219, 21,223,205,125,255,193, 85,157, 99,110,238,203,124, + 0, 80,103, 68,253,244, 44,156,138,172, 81,243,108, 72,163, 54, 31,194,193,213,179,219,203,180,200, 42,229, 55, 35, 35, 35,253, +215, 95,127,125,226,231,231, 23,216,167, 79, 31,178,104,209, 34,235,196,196,196,253,230,154, 43, 0,232,208,185,197,120, 25,223, +208,220, 86, 66,251,213,113,146,162,133,127, 81,235,103,191, 15, 90,161,134, 91, 77, 68,167,170, 26,103,169, 89,129,210,192,175, +179,254,167,205,119,221,109,120,195,141,133,234, 8, 0, 71,170,124,113, 64,241, 69, 82, 90,108,174,196, 60,200, 37,124,176,164, +232, 55,243, 35, 88, 44,116,122, 22, 42,157, 17, 42,173,169,200,108,233, 76, 96,217,162,206,202, 20, 69, 65,111, 48, 85,122, 55, + 88,214, 85,210,194,218, 14,181,107, 21,165,241,213, 75,194, 7, 69, 1,246,246,246,176,181,173,124,222, 81,150,101,161,211, 27, +139, 43, 93,211,171, 65, 29, 58,189, 17,132, 16, 60,123, 22, 53, 57, 54, 38,182,151,167, 87,221, 54,126, 13, 27,219, 72,132, 52, +138,163, 83, 21,221,213, 14, 0, 96, 64,169, 57,211,248, 12, 52,135,126, 61, 40,235,222,163, 71,142, 94,153, 89,122,176, 4, 3, +160, 75,177, 25, 83, 87,245, 48,201,236,189,123, 91,219,218, 44, 28,252,249, 72,239,246, 29, 59,227,242,133,115, 56,250,235,238, +109,170,140,103,103,205, 21,169, 87,175,222,239, 70, 17,214,245,244,254,221, 40,194, 90,181,189,202, 53, 88,150,150, 13, 45, 26, + 6,181,115,139,203,212,227,212,169,147, 80,230,165,126,171,211, 21,170,192, 39, 27,207,255,250,243,176, 1,163,102, 91, 52, 11, + 10,132,149, 66, 10, 59,107, 57,238,223,187,137,239,230,205,184, 9,149,238,253,202,175,159,197,248,250, 10, 92, 37,110, 95,185, +215,169,143,251,183,175,225,197,179,240,199, 15,238,222,172,239,233,223, 20,246, 46,238, 95,197,217, 49, 75,240,228, 73,165, 79, +170, 32, 38,146,248,217,136, 9,197,149, 94,209,178,102,141,106, 11,127, 95, 8, 41, 24, 13,122,211,142, 13,223,165,151, 30, 69, + 88,158,174,166, 32,247,192,213,219,143,190,233,217,185, 53, 85,210, 20, 88, 98,170,222,252,238,233, 42,195,139, 71, 79, 89,131, + 50,239, 96,213, 14, 57, 73, 27, 61,102,156,164, 40,237, 44, 72,209,196,106, 85, 45, 55,208,152, 4, 3,215,207,157, 78,133,197, + 42,241,232,101,126, 81,179, 96,177,193, 18, 9, 24, 8,139,223,205,122, 24, 48, 77, 47,253,244,227,206,200,204,211,129, 37,164, +120, 46, 61, 10, 60, 30, 31,113,249, 64, 66,126, 33, 50,114,211, 16,243, 50, 22,121,169, 49,160,105, 6,182,174,158, 80,197,155, +151,214, 2,147,220,219,192,162,238,199,221, 91, 51,135,111,164, 64, 34,226,161, 32, 51, 1,215,206,236, 83, 19,147,233, 39,157, + 65,183,199,129, 8,195,159,132, 31,208,155,121,233,200,200, 87,234, 28, 69, 2, 6,251,182,172,195, 39, 67, 70,191,138,102, 3, +192, 55, 51,230,131,162, 40,228,228, 21, 2,160, 50,204,136, 92,149,254,158, 81, 42,242,244,187,239,165, 76, 81, 89,223,169,226, +239,186,114, 52,116,111,152, 42,221, 27,203,117,111,232,153, 53, 57,114,185, 17, 44, 62,205,156,219,178,106,186,248,113,186, 8, +119,158,166,162,111,235, 26, 80,229,103, 98,195, 15, 43, 11, 53, 6,125,215,204,112,243,205, 85,113, 65,233,252,201,208,137,143, +235,120,250,234, 46,132, 23,196,228, 42, 13,229,246, 99,104,218,119,250,227,208, 19,235,186,229, 25, 98,198,200,156,253, 76,172, +209,184, 84,157,241,108,110,217, 23,113, 34,156,189,122, 95,145,185, 98, 89, 76,249,110, 59, 8,107, 42,158,192,207, 4, 98, 98, +241,229,183, 63,194, 88,252,217,196,154, 64, 25, 76,210,202,146, 43, 23, 11,206, 54, 40, 92,105,249,166,185, 10, 8, 8,200,181, +178,178,130,173,173, 45,172,173,173, 81, 98,136,222,182, 89,144,166,105,200,229,114, 92,190,124, 25,114,185, 28, 50, 89,245, 38, +200,151, 57,212,251, 36,184, 67,239,157,237,123, 12,165,207, 31,218, 96,186,125,249,120, 95, 77, 70,164,217, 38,192,100, 50, 81, + 6,131, 1,157,219, 53,137,123, 16, 25,127,122,254,220,185, 93,130, 58,124, 36,106, 81,207, 1,106,157, 17,137, 9, 9,184,121, +233,168,198,179,166,221,233, 22,129,222,137, 6,131, 1, 38,147,169,210, 10, 92,171,213,101,209,124,177,109,191,254, 3, 69,119, +239,220,217, 41,117,240,222, 77, 51,108, 24, 49, 49, 13, 65,216, 79, 26, 54,240,133,222,200, 66,173,202,207,174, 78,190, 31, 63, +126,124,119,249,242,229,245,248,124,126,141, 3, 7, 14,100,230,228,228, 84,233,113, 65,231, 78,220, 89,205,147, 27,162, 74, 34, + 88, 9,173,155,163,127,247, 86,216,115,226, 26, 46, 93,185,137, 56,149,252,129, 82,199, 28, 78, 76, 76,214,250, 89,231,253,218, +187,165, 7,115,112,123,254,193,199,237, 38,127, 76,136,228, 92,102,200, 28,179, 7,120, 80, 20,144,175, 54,148,138, 96, 21,245, +111,162,105,202,236, 8, 22, 5,196, 92,185,113,223,191,137,183, 47, 30, 68,231, 35, 35, 71, 11,149,174,168,220, 19, 16,216, 90, + 8, 32, 18, 48,136,123, 25, 3,150,232, 95, 86,173,158, 65, 70,215,190, 35,121,197,183, 47, 60, 62,159,247,170, 67,132, 68, 44, + 44,116,112,112, 48,203, 96, 25, 76, 38,244,233,220, 20,205,130, 26,162,215,168,229, 0,128, 11,219,166,192, 90, 46,192,129, 3, + 7,144,112,125,213,142,218,205, 71,157, 13,127, 20,241,209,227,208, 27, 3,187, 54,145, 52,118,226,165, 8, 42,112,197, 71,138, +155, 8,219, 3,232, 84, 28,153, 50,152,140,108,124,151, 46,157, 89,147,137, 45,221, 39,194, 26, 64,115, 0,217, 0,238, 23,155, +178, 10,110, 0,235,117, 4,141,221,160, 40,177, 92, 34,141,243,240,168,227, 18,212,172,169,101,239, 62, 31, 67, 40, 16,226,252, +185, 51, 88,179,114,201,190,194,148, 39, 67,171,212, 60,102,102,135,246,138,154,139,242,242, 44,149,207, 34, 30,228,196,164,233, +172,121, 86, 94,224,139, 20, 35, 41, 75,151,213,140, 72, 62,219,181,217, 16,139, 11,215,238,224,241,131, 27,112,177,147, 32,230, +197,115, 85,120, 88,232,143, 42,138, 63, 23,153, 79, 84,230,166, 83,154,101,250,168,217,224, 46,214, 26,189, 9, 87, 47,158,208, +176, 70,182,203,173,144,147, 47,220,188,131,196,254, 65,239, 89,103, 30,217,216, 71, 5,236,169, 76, 39,246,206,206,223,117,189, + 96,200,199,201, 39,207, 93,145,187,212,244,100, 64,209,208,170,149,200,136, 11, 55,106,242,211, 84,233,225, 71, 92,204,234, 14, + 96, 76,250,118,214,146,159,198, 52,105, 84, 95, 70,136,240,181,136, 85,201,231,172, 2, 93, 81,159, 89,101, 46,162, 31, 93,211, +100, 60,207,155, 86,241,181,206, 32,205,202,202,126, 53, 52, 95, 82,104, 85, 43,207, 50, 79,244,170, 90,103, 0,203, 60,171, 87, +145,138,172,172,108,161,201,100,144,154,115,122, 90, 41,196,120,244, 50,249, 85,135,118,145,128, 46,238,123,245, 91, 36,203,204, +243,188, 9, 79, 40, 67, 82,150, 6, 52, 33, 96, 89, 35,140, 6, 29, 10,243,243,145,156,148,138,180,180,116, 20, 22,228, 65, 34, +183,130,127,227, 64, 40, 20, 10, 60,185,119, 9, 0,117,204, 44, 51,200, 10,188,130, 2, 3,249,143, 99, 11,160, 55,176,224, 67, +143,171,167,247,106,140, 6, 93,143,244,240, 35, 23, 1, 51, 30, 37, 82,186,121,144, 37,231,195, 35,227,234,187,217, 57, 83,161, +209,185,216,254,243,218,162,209,164,198,162,104,230,227,120, 37,146,179,148, 72, 74,136, 35, 96, 77,231,171,114, 46, 81, 20,117, +183,162,239,213,140,132,189,181, 70,181, 12,150,209,104, 20,215,116,175,133,254, 35, 7,227,199, 31,215,227, 89,116, 28,126,254, + 97, 85,145,185,122,116,248,186,153,250,254, 40,158, 43, 67,149, 22,185, 84, 99, 29,156,120, 44, 44,135, 86,235,136,177,226,139, +157, 7, 90, 15, 93,113, 70, 93,144, 45, 52,105, 85,188, 99, 59,134,238, 46, 75, 19, 0, 24,154,210, 21, 55, 11,130,162, 40,148, + 52, 11,254, 56,111, 56,164, 34, 6, 20, 69, 65,165, 53,226,211,175, 87, 96,219,138,162, 59,171, 47,198, 76, 84,149,151,206, 18, + 35,244,117,243, 40,234,243, 46,181,123, 46,216, 20,113,228, 90,172,109,244, 7, 31,180,205,107,220,184,113,174, 68, 34,129, 76, + 38,131,133,133, 5, 44, 44, 44, 96,101,101, 85,105,222,139,113,172,172,207, 21, 77,211,176,176,176,128, 68, 34, 41,207,184,189, +169,249,186,185,114,244,250, 56,184, 93,175,221, 29,122, 14,163,207, 31,250,153,189,119,249,216,199,154,140,103,135,205, 61, 70, +197, 81,135,176, 62,125,250, 52, 24, 57,114,164, 96,250,152, 62,103,206, 92,190,255,236,215,115, 7,123,100,231, 22,184, 17, 66, + 96,101, 41, 79,232,219,169,193,177,214, 65,245,226, 46, 92,184,192,238,222,189, 91, 75, 81,212,163,202,210,153,153,153,190,229, +194,133,139,223,181,105,219, 14, 63,111,221,253, 65, 68,196,147, 15, 94, 60,143,130,155,123, 29,120,212,241,130,138,178,194,133, +144,171, 40,200, 78,219, 98,230,254,252,237, 7,127,127, 87,134, 97,106,228,230,230,106,190,253,246,219,122, 38,147,233,168,191, +191,127, 32,203,178, 41, 17, 17, 17,137,230,228,253,230,142, 79, 51, 0,108,119,111, 59,100,127,178, 62,247, 43, 0, 75,220,106, +214,196,165, 43, 55,113,235,250,237,245,153,210,154,115, 63, 31,248,217,240, 90,182,252,225,189, 90,212, 98, 28,172,165,216,245, +243,114,230,200,141,216,149,177, 89,134, 95,190, 11,153,179,192,156, 99, 84, 66,118,129, 30, 45,253,108, 97, 52, 18,152, 8, 1, + 77, 81, 80, 72,120,229, 25,172,223,105,242,116,162,161,163, 71,141,124,225,223,176,241,248,129, 67, 70, 10, 26,215,173,137, 59, + 81, 57, 0, 40,216, 90, 72,145,156,156,130,171, 71,127, 49,230, 36, 61, 93,207, 48,236,188,170,236,207,164,208,189,158, 37,159, +157,156,156, 70, 60, 8, 15,199,229,203,151, 97,107,107,139, 18,115, 85, 78, 19,225,107,154, 57, 57, 5,215,231, 47,255,165,229, +240, 65,189,208,189, 93,125,132,220,125, 1,157,129,133,222,200,190,234,228, 26,115,243, 39,225, 87,253,234,232,198,244,241,206, + 87, 25,132,177,179, 99,243, 67,240,250, 36,178,111,166, 83, 7,224, 12,128,166, 0,122, 1, 56,251,198, 51, 6, 41, 20,245,187, +170, 15,224, 38,128, 24,179,242, 78, 99,215,253,187,247,108,245, 70, 22, 87,111,135,249,118,104,217, 24,132, 37,184,123,247, 30, + 54,110,222,168,121,244,240,193, 50,101,154,211, 60,148,255,200,152, 50,247,167,185,163, 8,203, 49, 88,197,154, 33,198,212,216, +122,235,111, 92, 11,153, 33,114, 9,132, 79,183,233, 61,147,194,142,246,116,242,235, 12,187,186, 45,145, 28,118, 24,161,215,119, +157,188,103, 52, 78, 21,179,116,156, 42, 51, 82,105,238,249, 94,130, 72, 44, 29, 91, 63,160, 45, 18,226, 99,241, 50, 42,124,155, + 38,251,121,114,220, 11,102, 91, 82, 98,220, 40, 15,191,150,184,118,102,207,184, 10, 12, 86,133,101,222, 78,152,183,254,242,181, + 27,255,103,239,172,195,163,184,214, 48,254,206,172,103,227,110, 36, 33, 36, 33, 2, 65,130,187, 23, 41, 94, 40,180,104,105,145, + 22,218, 34, 45, 80, 92, 90,104,129, 34, 21, 90,138,187, 67,113, 9, 16, 92, 67, 66,156,184,187,110,214,119,228,254, 65,146, 11, + 52,178, 1,122,111,229,252,158,103,159, 36,155,153,119,206, 57,115,102,230,157,239,216,232,204,195,191, 59, 42,202,213, 38, 66, + 33,173,146, 10,144, 43, 86, 37, 28, 52, 58,157,209,209,250, 18, 47,139,225,239, 79, 89,120,102,253,183,139, 68, 14, 86, 82,228, + 20,107, 80,166, 50,160, 76,109,128,128, 2,124, 92,204,160, 86,150,225,238,217,221, 6, 94, 95, 52, 28, 8, 53,212,164,105,215, +100,240, 74, 77, 97,210,244,133, 11,231, 67, 32,177,112,241,236, 57, 95,255,204,149,191, 52,153,185, 13,224,217,104, 62,180,101, +217,131, 22, 46,156,239,199,243,124, 47,187, 38,131, 21,207,173, 69, 88,109,222, 11, 21,122,140,233,225, 6,157,225,217,252, 97, + 44,251,172,175, 29, 87, 49,171, 57,106,143, 43, 87,105,242,128,248,208,153, 59,200,204, 45,134, 90,107,128, 78,207, 64,199,176, +160,105, 1,172,173,173,225,211, 40, 8, 86,150, 22,200, 43, 40,196,131, 59, 55,113, 55,238,113, 18, 15,172, 44,176, 41,221,107, +204, 57,162,132,166, 62,142, 14,118, 84,174, 66, 7,153, 84,128,187,215, 66, 12, 0,118, 84,154,171,250, 60, 59, 0,160, 84, 85, +242,253,188, 21, 27,223,251,121,221, 18,167,230,158, 22, 72, 47,208, 32, 35, 95, 13,133,134, 1,192,131, 97,121,232, 52,165,136, +125,112, 62,135,129,234,123,252,195,169, 57,130, 37, 18,105, 31,132,199, 73,231, 45, 93,131,232,248, 36,108,221,252,131, 82, 91, + 63,115,245, 7,118,124,210,232,192,159,145,137,234,154, 5, 57,158,199,169,187, 57, 85,203,126, 84, 54, 21, 62,138, 47,169, 75, + 78,180,102, 70,203, 47, 43,141,208,166,227,153,119,165,210, 2, 46, 45, 45,173,120,239,222,189, 85,166, 71, 32, 16,160,178,191, +148, 78,167,171,115, 84,145,181,133,164,233,216,254, 13, 71,213,100,174, 4, 2, 1, 56,142,171,138, 94,213,183,233, 81,110,239, +219,167, 77,247,161, 7,122, 14,249,144, 14, 62,241, 27,247,240,218,239, 35,148,249,113,199,235, 91,150, 37, 37, 37,145, 0,158, +174, 93,187,182,229,214,173, 91, 27,205,153, 51, 39,241,183, 85, 83, 55, 61,123,131,123,246, 46, 19, 26, 26,202, 79,155, 54, 77, +171,209,104,146,138,139,139, 31,193,136, 69,174, 85,185,177,107,119,252,252,157, 95,122,102,246, 4,239,166,237, 96,231,217, 22, + 78,222,237, 80, 84,174,199,189,248, 76, 36, 70, 5, 35,250,246,145,131,234,124,199,111,128, 56,163,211,219,162, 69, 11,119,154, +166, 7,241, 60,239,107,106,106,234,201,243,188, 68, 40, 20,142,164, 40,234, 41,195, 48, 81, 1, 1, 1,193,209,209,209, 70,175, + 25,150, 26,178, 83,235,209,109,194,198, 84,149,105,247,196, 28, 85, 80,170,202, 52, 84, 37,181,156,149,127,101,163,118,167,192, +117, 61, 12,133,145, 71,118,149, 30,219,183,101,157, 96,204,228,217,108, 68,145,197,103, 66, 51,147,122, 69,203,104,138,202,158, + 51,231,139,255, 78,211, 64, 61,107, 24,172,152,178, 33,203, 24,141,138, 57,141,230,134, 71,137,126,140,248,124,234,138,102,109, + 58,141,237,214,111, 20,109, 38, 54,197,165,227,191,240, 73,225, 87, 15, 11,121,118,129, 58, 63, 49,233,117,175, 47,157, 78,247, +130,177, 50, 38,122, 5, 0,249,182,165,221,207, 92,188, 54,225,244,249,144, 85,253,251,116,182,253,105,209,187,248,238,215,147, + 48,147, 75,193,115, 44,222,237,225, 54, 98,241,135,254,131,220, 28,101,174, 71,175,102, 92,159,190, 62, 98,174, 74,165,143, 67, +221,235,222,241, 0,238, 2,240, 1, 48,168, 98,123, 83, 0, 74, 0,229, 21,255, 63, 81,241,183,209,232, 25, 14,201,185, 26,156, + 60,118, 4, 97,247,130, 17, 29, 29,171,136,142,138,254,129, 18,242,235,149,185, 79,139,128,167,245, 46, 59,182,218, 17,131,168, +126,100, 97, 45, 40, 5, 38,223,132,158, 94,211,189,113,207, 79, 59,216,122,119,130,181,199, 51, 79, 89,154, 17,129,244, 7, 71, + 78, 42,178,196, 35,129, 72,131,242, 21,207,177,139, 91,163,198,156, 64,130,219,215,206,130,231,184,205, 0,192,115,220,230,199, + 55,207, 78,109,215,127, 18,108, 28, 60, 90,148,164,133,214, 58,149, 79, 77,152, 8,153,210, 51, 59,191, 57,156,156,156,140,152, +152, 24,196,199,199,163,168,168, 8,251,246,221, 40,173, 87, 87,128,196, 59,151, 40,129,176,239,123, 19, 63, 63, 53,236,157, 97, + 50,119, 79,111,218,175,129, 5,108,205,133,136, 77,200, 68, 66,196, 83, 46, 62,252,186,134, 87,231, 13,205, 79,184, 93, 99,116, +196, 46, 96,132, 35, 77, 27,230, 5,255,254,108,109,193,222, 67, 62,240,251,114,250,156,246, 54,182,214,213,222,199,139, 10,139, + 37, 75,151, 46,246,171,220,190,174,181, 8,105,129, 64, 49,121,234, 12, 83,154,162,171,154, 1,249,202, 98,171,252,193,243, 0, + 5,136, 69,194, 58, 79,217,132, 97,157,193,112, 28,202,213,122,148,171,244, 40, 41,215, 32,167,160, 4,145, 81, 9,184,127,227, + 28,146, 19,226, 21, 12,195, 92, 5,143, 99,249,182,165, 7,171,153, 88,183,230, 8, 43, 4,238, 54,214,230, 72, 46,214,192, 68, + 44, 68, 86, 90, 60,163,103, 52,175, 60,201,122, 97,216,169,108, 65,211,193,111, 77,252,248,171,243, 93,187,118,177,104, 30,212, +218,212,206,194, 28, 98, 33,133,132,180, 92, 60, 9,125,160, 76,141,123, 92,198, 26,212,253, 10, 35, 79,189,246, 42, 45,127, 91, +131,165,103,153,222,179,191, 90,125,145,101, 89, 19,161, 64,160, 54,240, 92,191,215, 49, 87,127, 22, 60,207,101,124,252,217, 23, + 47,188, 16, 24, 88,206,228,195,143,231,168,159,127, 65,160, 12,172,188, 50,114,197,243,124,109, 81, 13, 65,126,137, 86, 49,255, +231,176, 93,223,238,138, 58,130,103, 51,184,102,188,110, 58,139,203,116, 97,182,125, 14, 13, 81,168, 24, 10, 64,116, 53,154,202, +158, 61,123, 86,153,173,138,230, 58,163,239,151, 18,153,124,106,143, 65, 31,208,193, 39,183,114, 15,174,158, 28,249, 42,230,234, +249,211,175,209,104,238,105, 52,154,136, 5, 11, 22,180,113,116,116,116, 92,188,120,177,172,172,172, 76,244,211, 79, 63,105, 10, + 10, 10,114,202,202,202,238,160,126,253, 90,184,226,140, 39, 19,207, 28, 53,252, 66, 29,217,246,150,181,131,107, 95, 43, 59, 55, +223,226,252,140,132,178,194,140,243, 20,135, 75,229,249,113,119,234,155,208,176,176,176,180,192,192,192, 19, 2,129,160, 1,203, +178,118, 20, 69,153,241, 60, 95,204, 48, 76, 49,199,113,217,245, 49, 87,207,155, 44, 55,255,206,251, 11,213,156, 68, 79,201,246, +167,134,236,212, 2, 64,222,165, 47, 84, 0,126, 71,247, 47,135,157,188,157,252, 67,100,177,197,140,252,144,239, 78,213, 87, 63, +235,241, 33,159, 55, 85,255, 53,217, 81, 25, 0, 38, 60,121,136,117, 17,161,119,150, 80, 60, 68, 44,152,149,234,188,248,135,111, + 66, 95, 36, 18,105, 90,183,110, 93,237,104, 65,169, 84, 90,251,188,101, 33, 33, 76, 30,176, 21,221,186,237, 60, 31,124, 99,194, +185, 75, 55, 87,181,239,208,217, 86, 38,117,129,135,181, 30, 59,191,104,245,105,112,104,254,253,193, 95, 92,255, 57, 49, 75, 19, +142,218,251, 95, 85, 71, 60,128,210,138, 72,214, 22, 0,147, 43,174,173,136,122, 27, 1, 14,239,119,232,208,118, 31, 69, 81, 66, +158,225,190,187, 35, 18,236,215,100, 71,103,224, 53,151, 15,105,238,105,129,201, 83,167, 54,246,242,254,239, 40,194,166, 13,205, + 49,102,194, 71,141, 61, 26, 53,174,250,206,207,173,142, 23,170,236, 80,117,185, 67, 96,159,216,139,107, 23,217, 38,220,250,216, +196,166,129,153,178, 32,165,168, 56,229,225, 90, 85,158,227,218,106, 86,104,168, 23,201,241,145,235,183,173,155, 59, 39, 59, 51, + 97,171, 42,255,233,179, 86,135,252,167, 17,209,143,176,168, 32, 39, 99, 78, 97, 94,226,218, 87, 45, 11,165, 82,153,181,119,239, + 94,171, 78,157, 58,209,142,142,142,200,207,207,199,213,171, 87, 57,142,227, 50,235,171,149,247,244,198, 85,120,121,217,236,223, + 89,250,157,208,196,124, 0,195,194,133,231,121, 8,105, 42, 91,175, 45, 61,159,111,165,254, 2, 79,238,214, 90,143,120,142,165, +120,154,167, 43,215, 22,228, 56,142, 90,243,227,238, 20,129, 72, 82,109,147, 42,107,208,201, 57,142, 51,122, 45,194, 92, 65,170, +109,160,193,191,238, 81,124, 60, 16, 65,197,212,241,114,202, 95,232,216,127, 92, 95,134, 97, 13, 21,215, 71,229, 39,143,231,169, + 43,160,216,139, 5, 54,138, 59,245, 49, 85, 47,220,232,245,122, 43,208, 98,152,203, 13,160, 65,161,172,180, 84,106,207, 74,162, + 11, 94,163, 46,229, 69,254, 30,153,215,173,155,135,238,242,149,241, 33, 55,110,141,228, 57,206,147,229, 1,240, 84,178, 78,175, + 57,156,103, 81,176,235, 85,211,251,119,131,250,147,245,141,106, 46,249, 11,106,138, 1,216,225,217,148,248,185,111, 56,157, 53, +174, 45,248, 58,121, 55,115,242,239, 44,149,201,191, 80,169, 20, 91,213,121, 79, 79,189,225,242,180,148, 74,165, 65,102,102,102, +162,130,130,130,123, 21, 15,181,127,226,121,175,162,243,196,237,118, 61,251,118,252,252,210,153,251, 27, 43,154, 15,171,112, 29, +241,189,108,204,128,174,179,118, 31, 59,189,190,154, 81,132,127,251,188,255,105,154,221,186, 9, 29,138, 45, 38,176, 44,183,178, +103, 99,133, 42, 39, 41,118,218,141, 39,249,247, 0, 40, 94, 51,157,239, 61, 23,193,218,255, 87,201,187,125,211, 33,203, 65, 33, +192,104, 5, 30,209,249,145, 39, 23,215,153,206,128, 0,177, 60, 31,214,170, 2,187,194, 87, 48, 86,255,143,186, 36,104,214,172, + 89, 23,177, 88,236,206,178,172, 92,167,211,169,212,106,117,114, 74, 74,202,109,212,188, 32,249,159,154, 78,135,192, 33,235, 69, + 34,209,103, 0, 96, 48, 24, 54,230, 69,156,156, 89,219,142,181,108,255,231,151,231,136, 17, 2, 28, 57,194,254, 25,231,200,165, +229, 59, 37, 6, 3, 99, 89,245,224, 19, 9, 75, 51, 31, 31,181,250, 63,214,165,127, 12, 70, 13, 98,120, 3, 39,149,104, 18, 77, +162, 73, 52, 95,134, 38,229, 73, 52,255,159,154,206, 1, 3,221,156, 3, 6, 26, 61, 89,114, 13,219,147,242, 36,212,104,176,132, +164, 24, 8, 4,194,255, 1,142, 20, 1,225,255, 73,118,244,233,244, 63,115,123, 2,129,170,197,133,214, 39,244,247, 42, 78, 54, +130,104, 18, 77,162, 73, 52,137, 38,209, 36,154,255, 58,205,186,180,255,246, 77,143,164,137,144,104, 18, 77,162, 73, 52,137, 38, +209, 36,154,127, 21,205,127, 12, 60,207,131, 38,197, 64, 32, 16, 8, 4, 2,129,240,102, 33, 6,139, 64, 32, 16, 8, 4, 2,129, + 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2, +129, 64, 32, 16,254, 18,144, 81,132, 4, 2,129, 64, 32, 16, 8,127, 2,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, + 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, + 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,235,213, 32, 43,141, 19, 77,162, 73, 52,137, 38,209, 36,154, 68,147, 24, 44, 2, +129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, + 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,225,255, 5,133,154, 71, 2, 68,212, 67,231, 85, 70, 19, 68, 16, 77,162, 73, 52, +137, 38,209, 36,154, 68,243, 95,167, 89,151,118, 4,254,230,240, 60,255,167, 31,131, 12, 97, 37,154, 68,147,104, 18, 77,162, 73, + 52,137,230,191, 10,158,231, 73, 19, 33,129, 64, 32, 16, 8, 4,194,155,134, 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, + 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,129, 64, +248, 75, 64, 70, 17, 18, 8, 4, 2,129, 64, 32,252, 9, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, + 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, + 64, 32, 16, 8, 4, 2,129, 24,172, 87,131,172, 52, 78, 52,137, 38,209, 36,154, 68,147,104, 18, 77, 98,176, 8, 4, 2,129, 64, + 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2,129, + 24, 44, 2,129, 64, 32, 16, 8,132,255, 23, 20,106, 30, 9, 16, 81, 15,157, 87, 25, 77, 16, 65, 52,137, 38,209, 36,154, 68,147, +104, 18,205,127,157,102, 93,218, 17,248,155,195,243,252,159,126, 12, 50,132,149,104, 18, 77,162, 73, 52,137, 38,209, 36,154,255, + 42,120,158, 39, 77,132, 4, 2,129, 64, 32, 16, 8,111, 26, 98,176, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, + 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,225, 47, 1, 25, + 69, 72, 32, 16, 8, 4, 2,129,240, 39, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, + 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, + 16, 8, 4, 98,176, 94, 13,178,210, 56,209, 36,154, 68,147,104, 18, 77,162, 73, 52,137,193, 34, 16, 8, 4, 2,129, 64, 32, 16, +131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, + 2,129, 64, 32, 16,254, 95, 80,168,121, 36, 64, 68, 61,116, 94,101, 52, 65, 4,209, 36,154, 68,147,104, 18, 77,162, 73, 52,255, +117,154,117,105, 71,224,111, 14,207,243,127,250, 49,200, 16, 86,162, 73, 52,137, 38,209, 36,154, 68,147,104,254,171,224,121,158, + 52, 17, 18, 8, 4, 2,129, 64, 32,188,105,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, + 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8,132,191, 4,100, 20, 33,129, 64, + 32, 16, 8, 4,194,159, 0, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, + 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16,136, +193,122, 53,200, 74,227, 68,147,104, 18, 77,162, 73, 52,137, 38,209, 36, 6,139, 64, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, + 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, + 64,248,127, 65,161,230,145, 0, 17,245,208,121,149,209, 4, 17, 68,147,104, 18, 77,162, 73, 52,137, 38,209,252,215,105,214,165, + 29,129,191, 57, 60,207,255,233,199, 32, 67, 88,137, 38,209, 36,154, 68,147,104, 18, 77,162,249,175,130,231,121, 8, 73, 49, 16, + 8, 4, 2,129, 64, 32, 24,103,156,140,165, 90,131, 37,108,187, 50,151, 97, 24, 7, 0, 16, 10,133,121,134,251, 11,157,106, 19, +113,115,118,238,205, 2,191, 1,128, 0,248, 40, 35, 59,251, 82, 53,154,151, 24,134,177,174,208, 44, 54,220, 95,248, 86,109,154, +162,182, 43, 47, 62,191, 61,115,127, 97,159, 63,100, 20,160, 69,109, 87,102,191,148, 86,103, 99, 51, 79, 1,220,255, 34,157,127, + 23,205,127, 51,162,118, 43,115, 13,134,103,245, 72, 36, 18,230,233,239,213, 94,143,196,237, 86,102, 63,191,189,225,222, 66,199, +151,183,145,116,248, 38,205, 96, 96,156, 1, 64, 42,145,228,251,120, 56,110,168, 77, 51, 49, 61,239,115,181, 70,107, 95,161,153, +173,187,243,149,251,223,245,218, 52, 22, 71, 71,199,214, 52, 77, 47,164, 40,202,226,185,175,195,179,178,178, 62, 39,181,146, 64, + 32,252,157,169,214, 96, 49, 12,227,240,232,248, 18, 40,181, 64,175,113, 43, 29, 26, 13,221,178,239,229,109, 12,154, 98,137,234, +233,201, 38, 2, 67,137,181,149, 9,111,253,244,233, 83, 26, 0, 92, 92, 92,126, 3,224, 94,141,166,245,163,227, 75,160,210, 1, + 93, 71, 47,179,110,225,225, 97, 81, 70, 81,179, 77, 76, 76,122,106, 52,154,166, 0, 32,147,201, 34,213,106,245, 21, 11,158, 95, +247,242,246, 53,101,224,249,180,246, 28,187,210,193,119,216,111,159,178, 44, 43,209, 38, 30,234,198, 41, 82,133, 2, 86,247, 99, +191,236,236,115,191, 2,172, 49, 5,242,252,113,187,141,250,202,214,205,217,185,183,137, 92,222, 90,110,102,214,133,101,217, 0, +142,227,192,113, 92,180, 90,169,188,193, 24, 12, 15, 89,131,202,246,209,137,111,184,218,210,249,114, 94, 90, 1,194, 60, 39,167, +145, 38,102,102,221, 5, 2, 65, 39, 0, 96, 89,246,150,186,188,252,154, 67, 78,206, 97, 99,242,110,108,249,188,234,246,255, 54, + 12, 6,198, 33,233,194, 18,104, 13, 64,208, 59,171, 28,154,191,191,107, 63, 0,232,242,194, 28,203,159,254,222, 14, 0, 76,189, + 7,222,147, 58, 5,229, 2,128, 48, 53,219, 33,238,244, 2,104, 13, 64,192,192,101, 14,213,105,234,116,122,183,248,179,139,160, + 53, 0, 31, 46, 61,226,252,197,212, 17,114, 0,184,122,226, 87,239,139, 71, 54,190, 13, 0,111,141,248,236, 76,143,161, 83, 18, + 0, 96,205, 47, 71,156,247,126, 61, 2, 90, 3, 16, 56,100,133,219,171, 94,155,140,182, 84, 92, 18,119,218,199, 80,150,101,237, +102, 42,116,170,239,181,105, 9, 88,150, 3,211, 41,129,160,179,143,143, 79, 43, 0, 72, 72, 72,120,196, 49,204, 77, 51,224,199, + 55, 89,151, 4, 2,193,167,153,153,153,131,158,255,206,213,213,149, 84, 72, 2,129,240,207, 52, 88, 0,160,212, 2, 33,241, 64, +183,246,205, 49,121,204,219,102,207,255,239,196,142,213,110,153,145, 23, 3,214, 28,216, 32,240,245,245,197,211,167, 79,141, 58, +152, 74, 7, 92,123, 10, 72, 53,201,230, 42,145, 40,113,233,194,133, 22,157, 59,119, 22,186,184,184, 0, 0,242,242,242,218,223, +184,113,163,245,178,101,203,166, 73, 53,201,197, 42, 29, 20,215,140,144,174, 76,107, 83,223,134, 88, 48, 99,180, 37, 0,108,152, +125,184,245,217,219, 97, 54,201,201,201,189,190,249,230,155, 66,215, 59,119, 54,155,113,220,246,216,220,220,116, 99,210,121,240, + 92,168,137,143,254, 82,163, 17, 31,124,112,204,221,221, 93,222,160, 65, 3, 74, 38,147, 65, 32, 16,160,188,188,220, 37, 54, 54, +182,247,227,199,143,213,215,239,156, 20,133,133, 14, 79,202, 18, 5,169,141,201,187,152, 41,144, 41, 27, 55,142, 26,209,191,127, +131,129, 3, 7,202, 60, 61, 61, 1, 0,201,201,201,141,207,156, 57,243,222,217,179,103, 23,139,153, 2, 70,165,131,166,174,188, + 87,106, 2,128, 8,232,104,227,224, 48, 70, 36, 18, 5, 50, 12,227, 90, 17, 93,200, 52, 24, 12, 17, 69,121,121,123, 95,222,158, +240, 71,180, 6, 32, 58, 27,232,221, 37, 8, 99,135,247, 54, 5,128,185,163,190,110,159,154, 28, 47,214,233,116,240,245, 11,232, +180, 98,213,247, 23, 64,211,216,115,236,114,213,246,181, 26, 91,158,198,211, 60, 32, 60, 38, 9, 75,190,222,196,231,132, 31,105, +195, 20, 71,245, 41, 44, 40, 16, 2,128,173,157,221,200,131,251,247, 94,114,106, 62,226, 65, 66,174,178,106,123, 99,234,123,117, +215,230,217, 3,155, 92, 50, 35,174, 52,249,249,194, 86,145,187,187, 59, 34, 34, 34,234,117,109,162, 52,214, 92,238,236, 28,189, +244,139, 47,156,186,118,237, 10, 83, 83, 83,136, 68, 34, 24, 12,134,222,183,110,221,234,189,100,201,146,105,101,165,177, 74, 99, +175, 77, 35, 98,135,235, 28,125,187,245, 24, 54,120,128,115,207,110,237, 49,188, 95, 39, 82, 17, 9, 4,194, 63,215, 96, 9,133, +194,188, 62,227,191,113,232,210, 46, 16, 15,194,226, 74,147,211,114,202, 43,255, 87, 18,115,188,241,212, 97, 45, 2,183,156, 61, + 13,189, 94,143,219,183,111,227,225,195,135,184,125,251, 54,191,110,221, 58,181, 0,248,168, 6,205,226,174,163,151, 89, 75,181, +233,102,173,108,211, 61, 15,238,191, 38, 80,171,213, 8, 9, 9, 65,113,113, 49,164, 82, 41, 92, 93, 93,209,165, 75, 23,225,213, +171, 87,109, 70,189, 55,198,242,173,161,147,146,180, 82,183,114,161, 80, 88,204,212,148, 1,161, 48,175,215,184,149, 14, 77, 26, + 55, 68, 66, 74, 86,233,130, 85, 91,203, 57,150, 23,106, 82, 51,244,215,175, 95, 71,203,150, 45,113,240,224, 65,219,226,226,226, + 69, 59,119,238, 92,232,248,195,142,141,185, 25,177,179, 81,179, 94,113,215,209,203,172,125,217, 96,247,195,251,182,139,195,194, +194,196,155, 55,111, 70, 81, 81, 17, 36, 18, 9, 44, 45, 45,225,228,228, 4, 95, 95, 95,106,218,180,105,242, 30, 61,158, 98,193, +236, 15,220,115,172,135,197,214,148,206, 74, 77,177, 46, 91,222, 88,240,208,251,183, 93,187,232,182,109,219, 82,207,111,227,238, +238,142,238,221,187,203,134, 13, 27,230, 61,237,147, 25, 92,239, 97, 83, 18,244, 18,103, 85, 93,154, 80,166,155,216,170,238,184, +244, 30, 61,250,212,210,165, 75,173,156,157,157, 33,151,203, 1, 0,165,165,165, 13, 82, 82, 82,218, 47, 89,178,100,196,189,240, +131,194,174, 3,211,179, 96,234,166,174,173, 60,255,173,136, 68,194,188,202, 72,148,185,169, 73,113,122, 70,174,242, 89, 20, 74, + 7,157, 78, 7,173, 86,139,143,167, 77, 17,124,244, 78, 91, 31,143, 46,159, 62, 78,206,204, 45, 10,184,124,215,166,114, 95, 67, +245,154, 5, 77, 6,175,176, 6, 0,186, 44, 73, 89,156,114,241,195,121, 51,103,186, 58, 57, 77,133, 88, 44, 6, 0,236,216,190, + 93, 88, 88, 88,216,127,197,138, 21,129,188,105,175,178, 38,131, 87,152, 86,236, 91,108,168,231,181, 89, 28,119,186,209,215,211, +251,182,248,109,213,105,176, 44,139,187,119,239,226,250,245,235,248,254,251,239,249,115,231,206,149, 90,152,154,214,122,109,162, + 52,214,188,179,115,142,215,183,223, 30,165, 36, 18, 9, 78,158, 60,137,152,152, 24,208, 52,141,230,205,155, 99,236,216,177,232, +221,187,183,211,228,201, 83,248,174,253, 70, 37,194,210, 79,241,122,117,105, 41,205, 88, 63,249,116,250,228,247,157,223, 25,210, + 23,155,126,248,153, 24, 44, 2,129,240,207,134, 7, 40,207,161, 91,246, 31,126,196,159,246, 28,186,101, 63, 15, 80, 60, 64, 73, + 1,247,158, 61,123,234,202,203,203,249,176,176, 48,126,228,200,145,197,115,191,248, 98,219,174, 29, 59,150,106, 85,170,143, 91, +181,104, 49,150,127, 54,245, 67,245,154, 86, 86, 22, 94, 94, 94,249,233,233,233,252,185,115,231,248,101,203,150,241,251,246,237, +227,207,159, 63,207, 7, 7, 7,243,231,207,159,231, 15, 29, 58,196,135,133,133,241,241,241,241,188,183,183,119,190,167,149,149, + 69, 45,154, 52, 15,208, 62,195,126,157,125,228, 33,187,180,241,176,223, 62,231, 1,218,219,201,201,175, 79,159, 62,236,209,163, + 71,249,189,123,247,242,187,118,237,226,195,195,195,249,130,130, 2,222,213,195, 43,191,114,191,154,210,201, 3, 84, 80, 80, 80, +126, 73, 73, 9,239,238,238,206,139,197, 98,222,193,193,129,247,245,245,229,219,183,111,207,247,235,215,143,127,239,189,247,248, + 69,139, 22,241, 37, 37, 37,188,135,135, 71,110,229,126, 53,105,182,119,117,149,121,123,123,167, 61,121,242,132,175, 9,141, 70, +195, 23, 20, 20,240, 87,174, 92,225,189,189,189,211,218,187,186,202,106,211, 20, 1, 65,129,129,129,249, 5, 5, 5, 60,199,113, +188, 74,165,226, 11, 11, 11,249,194,194, 66,190,184,184,152,215,233,116, 60,199,113, 60,199,113,124,108,108, 44,239,229,229,149, + 39, 2,130,106,210,252,151,215,121,186,186,143,171,163, 99, 63, 39, 39, 39,245,209,163, 71,249,204,204, 76,126,231,206,157, 60, + 13,124,253,242,118,213,105,142, 8, 24, 33, 14, 10,154,108, 34, 16,152,188,221,177, 99, 71,246,246,237,219,252,163, 71,143,248, +121,243,230,241,131, 6, 13,226, 7, 15, 30,204, 47, 93,186,148, 79, 75, 75,227,211,211,211,249,183,222,122,139, 21, 8, 76,222, + 14, 10,154,108, 50, 34, 96,132,184, 62,215,166, 12,112, 27, 56,112,160, 90,175,215,243,137,137,137,124,211,166, 77, 51, 4,192, + 24, 49, 16,224, 5, 72,234,170,159, 22,128,149,179,179,115,246,157, 59,119,248,163, 71,143,242, 30, 30, 30,249, 2, 96,162, 20, +240,148, 2,158, 2, 96, 98,163, 70,141,242,239,220,185,195, 23, 20, 20,240,238,238,238,217, 22,128,213,171,215,165,165,180, 67, +211,161,219, 87,252,112,148,143,205, 80,242, 43,126, 56,202, 59,250,118, 79,227,121,158,119,118,118,190, 68,106, 36,129, 64,248, + 75, 62, 43,120,222,232, 79,189, 70, 17,210, 38, 38, 75, 86,173, 90, 37, 86,171,213, 88,190,124,121,254,199, 83,167,174,180,115, +112,208,139, 68, 34,136,164,210,186, 5, 44, 44, 62,159, 63,127,190,149, 78,167, 67,104,104, 40, 90,181,106, 5,153, 76, 6,145, + 72, 4,177, 88, 12,161, 80, 8, 39, 39, 39, 20, 20, 20,192,209,209, 17,211,166, 77,179,252,113,211,166,207, 81, 82,178,188, 54, + 89,142,229,133, 0,192,178,172,196,205,197,101,114,211,102,205,214, 77,155, 54,141, 54, 53, 53,133, 86,171,133, 86,171, 69,108, +108, 44,108,109,109, 33, 55, 49, 49, 42,207, 52, 77,211,102,102,102, 8, 9, 9,193,246,237,219,145,148,148,132,172,172, 44, 88, + 88, 88,160,101,203,150, 8, 8, 8, 64,167, 78,157, 16, 31, 31, 15,138,162,234,124,200,228, 10, 4,211,199,142, 30,237, 16, 24, + 88,253,200, 86,173, 86,139,146,146, 18,148,148,148,192,209,209, 17,253,251,247,119, 56,117,242,228,116, 0,107,171,219, 94, 14, + 56,121, 54,110,124,234,254,253,251,118, 52, 77, 35, 36, 36, 4, 42,149, 10, 26,141, 6, 12,195,128,162, 40,200,100, 50,116,232, +208, 1,182,182,182,104,220,184, 49,142, 31, 63,110,223,167, 79,159, 51,242,220,220, 32, 0,217,228, 82,169,155,140,220,220,139, +173, 0,219,247,223,127,255, 92,120,120,120,215, 49, 99,198, 32, 55, 55,247, 43,193,188,121,197, 44,176,190,182,125, 15, 71, 31, + 97, 26, 0,166, 54,246,246,191,174, 94,189,154,206,201,201,193,172, 89,179, 10,179,210,211,231,203,128, 59, 0,112,230,247,223, + 59,236,222,189,123,213,222,189,123,109,119,237,218, 69,183,106,213,106, 75, 94,232,150, 38,143,128,210,250, 56, 23, 13,240,233, +134, 13, 27,100, 26,141, 6,125,250,244, 73, 84, 37, 39, 55,103, 0,181,177,251,151, 3,211,151,126,241,133,147, 84, 42,197,156, + 57,115, 10, 10, 82, 83,155, 50, 64,254,115,155,164,152, 38, 37,157, 27, 55,110, 92,100,120,120,184,221,250,245,235,157,222, 25, + 54,108, 58,128,149,198, 30,227,191, 29,218,105, 11,214, 44,164,241,208,126,253, 29,253, 26, 57,224,232,201, 11,248,113,203,190, + 29, 40, 73,248,213,213,213,117, 58, 77,211,107, 72,205, 35, 16, 8,127,119,234,101,176,172,173,173, 91,123,123,123, 35, 56, 56, + 24,254,254,254,199, 29, 42,205,149, 72, 4,150,173,187, 15,185,137,169,105,175,174, 93,187, 10,111,223,190, 13, 79, 79, 79,152, +152,152, 84, 25,171, 74,147, 37, 18,137,224,228,228,132,210,210, 82,116,238,220, 89,180,125,251,246, 94, 0,150,215,165,157,157, + 18,107,134,196,237,239, 47, 91,177,194,171,117,235,214,208,235,245,207,140,136, 92, 14,173, 86, 11,145, 72, 4,189, 94, 15,141, +142, 47, 51, 38,175, 44,203,178, 2,129, 0,238,238,238, 88,188,120, 49, 52, 26, 77, 85,179, 78, 89, 89, 25, 74, 74, 74, 16, 26, + 26,138,228,228,100,112, 28, 87,231,184, 77,185,153, 89,255,193,131, 7, 75,170,251,159, 78,167,171, 50, 87,165,165,165,208,104, + 52,104,209,162,133,228,202,149, 43,253,107, 50, 88,148, 76, 54, 98,215,174, 93, 14, 18,137, 4, 26,141, 6, 79,159, 62, 69, 66, + 66, 2, 98, 99, 99,181, 69, 69, 69,140,153,153, 25,229,236,236, 44, 40, 45, 45,149,140, 27, 55,142, 82, 40, 20, 0,128, 97,195, +134,217,238,216,182,237, 93,232,116,235, 73,245, 55,142, 71,128,214, 91,167, 27,212,182,109,219, 43, 15, 30, 60,104,245,217,103, +159, 33, 60, 60,252, 59,249,193,131,215, 85,192,227, 90,235, 37, 48,109,205,220,185,206,166,166,166, 24, 59,118,108,145, 42, 61, +189, 57, 3,228, 60,183, 73,156,109,114,242,249,241,227,199, 71,132,135,135, 91,175, 95,191,222,233,221, 17, 35,166, 1, 88, 85, +159, 52, 90, 90, 90,182,117,114,114,194,249,243,231,145,150,156, 60,183, 62,230, 10, 0, 40,129,160,115,183,110,221,112,226,196, + 9,100,164,166,206,125,201, 92, 1, 0,148, 64,190, 48, 49,113,238,142, 29, 59,182,127,240,193, 7,160,133,194,206, 96,140,111, + 32,172,174, 67,251,199,115,215,224,248,249,187, 59,242, 34,155,125, 8,156,224, 0,220, 39, 53,142, 64, 32,252, 19,168,215, 82, + 57,141, 26, 53,106, 36,149, 74,145,146,146,130,118,237,218, 37,139, 36, 18, 72, 37, 18, 72, 77, 76,140,123,203,214,104,154, 57, + 57, 57,161,172,172, 12,118,118,118, 16,139,197, 16,139,197,144, 72, 36,144, 72, 36, 85,127,155,155,155,131,166,105,184,186,186, + 66,163,209, 52,171, 75,151, 41,125,234,112, 97,231,220, 79,206, 30,223,237, 53,108,216, 48,184,184, 56,195,213,213, 5,166,166, +166, 16, 10,133,112,119,119,135,183,183, 55,182,109,219, 6,202,162,241, 61, 99,210,250,188,105, 18, 8, 4, 96, 89, 22,185,185, +185,136,141,141, 69,120,120, 56,238,220,185,131,208,208, 80,148,151,151, 27,149,119,149, 74,213,178,186, 64,215,203,230,170,164, +164, 4,249,249,249, 72, 72, 72,128, 66,161, 8,170,209,236,218,218, 14, 15, 12, 12, 20, 0,128, 76, 38, 67,163, 70,141,240,203, + 47,191, 48,151,206,159,127,215,228,193, 3, 43,246,202, 21,203,253,123,246,188, 59,105,210, 36,246,222,189,123, 40, 43, 43, 67, + 92, 92, 28,236,237,237,133, 82, 19,147,119, 73,213,175, 31, 9,128,210, 84,161,232,215,177, 99,199,164,210,210, 82,172, 89,179, +134, 22,154,155,255, 58, 5, 16,212,122,129, 9, 4, 93,122,244,232,129,147, 39, 79, 34, 35, 53,117, 94,225,139,230, 10, 0, 80, + 8,228, 36, 39, 36,204,221,177, 99, 7,250,247,239, 15,161, 80,216,165,190,233,107,223,190,125, 32,207,243,120,242,228, 9, 36, +192,221,250,238,239,227,227,211,202,204,204, 12, 49, 49, 49, 16, 1,215,107,218, 78, 4, 92, 15, 13, 13,133,137,137, 9,154, 52, +105,210,186,126, 71, 17,173,115,244,237,150,253,241,220, 53, 56,118,254, 22, 0,224,196,169,115,185,207,204,213, 82,142,212, 50, + 2,129,240,175, 53, 88,192,179,246, 71,129, 64, 0,177, 80, 8, 19,169, 20, 18,169, 20, 18,145,200,248, 55,101,138,130, 84, 42, +253,131,169,170, 52, 90,149, 63, 77, 77, 77,141,214, 52,100,223,236, 58, 97,252, 56,137,153,153, 25, 88,150,129, 80, 40,132, 92, + 46,135,147,147, 35,252,252,252, 80, 84, 84,132, 65,131,135,106, 82,139,132,167, 68, 13,122,133,191, 74, 65, 49, 12, 3,165, 82, +137,226,226, 98, 20, 21, 21,161,172,172, 12, 26,141, 6, 70,180, 14, 86,249,180,180,180, 52, 28, 56,112, 0,133,133,133, 53,154, +171,196,196, 68,236,222,189, 27,201,201,201, 16, 8, 4, 70,159,159, 94,189,122,225,244,233,211,130,238,189,122,109, 77,245,240, +200, 78,245,240,200,238,222,171,215,214,223,127,255, 93,224,234,234,138,180,180, 52,132,134,134,162,168,168, 8, 28,199,145, 62, + 88,175, 64, 22, 80,172, 42, 42,250,224,171,175,190,226,205,204,204,176,118,237,218,150,219,128,247,106,219,199,203,219,187,149, +153,153, 25,162,163,163, 33,175,197,184,200,129,235,143, 30, 61,130,137,137, 9,252, 2, 2, 90,191,202,117,201,113, 28, 88,150, +173,118,126, 55, 99,174, 75,145, 72, 4,154,254,179,150, 39, 93, 74, 51,214, 45, 62,157, 62,125,134,243,167, 51, 62,198,149,144, +103, 30, 80, 80,158,248,148,152, 43, 2,129,240, 79,164, 94, 77,132, 9, 9, 9,201, 26,141, 38,192,211,211, 19,145,145,145,158, + 77,155, 53, 11, 23,137, 68,144,138, 68,181,191,198, 87, 32,147,201,158,228,230,230,118,106,208,160, 1, 12, 6, 67, 85,147, 96, +101, 51, 97,229,223, 0, 32,149, 74, 17, 29, 29, 13,153, 76,246,164,206, 76,176,229, 30,141, 26, 53, 66, 78, 78, 46,164, 82, 41, +172,173,173, 96, 98, 98, 2,169, 84,134, 85,171, 86,113, 91,183,108,249, 73,218,116,122,201,204, 73,115,249,251, 43,127,251,191, + 20,180, 92, 46,127,226,233,233,217,193,212,212, 20,199,143, 31, 71,114,114, 50, 74, 74, 74,170,250, 77,169,213,106,104,181, 90, +200,100, 50, 52,105,210, 4, 54, 54, 54,136,140,140,172, 49,239,197,133,133,199, 34, 34, 34, 58,180,105,211,166,170,232,187,119, +239, 78,117,239,222,221,238,185,168, 25, 10, 11, 11, 17, 22, 22,134,144,144, 16, 48, 12,131,168,168, 40, 86,171, 86, 31, 36, 85, +255,213,208, 0,183, 4, 59,118,108,159, 58,117,234,164, 78,157, 58,129, 7, 6, 0,216, 83,227, 27, 12, 77, 83, 66,161, 16, 20, + 69,213,106,124, 40,128,171,156, 33,152,170,135,107,175,228,206,157, 59, 17, 44,203,118,242,245,245,133, 22,104, 11,224,116,125, +246,143,143,143,127,100, 48, 24,122,183,104,209, 2,199, 14, 31,238, 10, 32,165,218,151, 25,160,107, 80, 80, 16,212,106, 53,162, +162,162, 30, 26,107,174, 28,154, 62,217, 58,125,242,251, 19,223, 25,210, 23, 71, 79, 94,192,137, 83,231,211,127,254,246, 11, 55, +158,231,244,164, 86, 17, 8,132,127,125, 4,171,180,180,244, 65, 76, 76, 12,218,183,111,143,248,196,196, 97, 90,181, 90, 92, 25, +197,162, 5,117, 91, 44,181, 82, 25,124,243,230, 77,166,101,203,150, 40, 47, 47,175, 50, 85,207, 71,175, 42, 13,151,169,169, 41, +206,157, 59,167, 87, 43,149,193,117,233,178, 12,203,209, 52, 13,138,162,160,213,106,145,157,157, 3,141, 70,139,223,126,251, 13, +219,182,108,121, 47, 35, 59,251,115, 72,173,213,127, 70, 1, 26,251, 44, 84,171,213,193,193,193,193, 6, 79, 79, 79, 76,152, 48, + 1, 51,103,206,196,204,153, 51, 49,101,202, 20, 76,156, 56, 17, 99,198,140,193,240,225,195,209,174, 93, 59,216,219,219, 35, 41, + 41,201,160, 86,171,107,204, 59,175,209, 28, 25, 63,126,124,158, 70,163, 1,203,178,208,106,181, 80,171,213, 85, 81,182,208,208, + 80, 28, 59,118, 12, 91,182,108,193,153, 51,103,160, 84, 42, 81, 86, 86,134, 71,143, 30,149, 8, 12,134, 67,164,234,191,214, 69, +115,244,230,205,155,176,182,182,134, 75,131, 6,221,106,125, 41,137,143,127,204,178, 44,154, 55,111, 14, 37, 80,227,182, 74,160, + 91,203,150, 45,161,209,104, 16, 29, 21, 21, 90,223, 52, 41, 20,138,251, 73, 73, 73,232,222,189, 59,156, 27, 52, 88,231, 8,152, +212,103,127,142, 97,110,222,186,117, 11,227,198,141,131, 71,163, 70,223,154, 2,246, 47,111, 99, 10,216,123,122,123,127, 59,113, +226, 68, 92,188,120, 17, 28,195,220,172, 73,207,209,209,177,181,179,179,243,239, 46, 46, 46, 33,142,222,151, 82,134,245,107, 63, +241,249, 14,237,124, 73,194, 72, 87, 87,215,189, 52, 77,207, 33, 53,138, 64, 32,252,235, 13, 22,167, 86, 47,155, 63,127,190, 78, + 32, 16,224,147, 79, 62,177,255,241,231,159,151, 29, 58,116,168, 77,216,147, 39, 78, 58,173,182,110,135, 85, 86,182, 97,197,138, + 21, 37,122,189, 30,254,254,254, 40, 42, 42, 2,203,178, 16, 8, 4, 16, 10,133, 16, 8, 4,160,105, 26,114,185, 28, 17, 17, 17, + 56,120,240, 96, 25,202,202, 54,212,153, 46,142,123,114,252,248,113, 8,133, 66, 94, 38,147, 85,153,158, 77,155, 54,229, 77,202, +206, 62, 6, 0, 2,129, 64, 7, 0,180,128, 50,170, 87, 46, 77,211,117,118, 92,151, 72, 36,149,157,251,235,238,228,206, 48, 27, +126,249,229, 23,197,211,167, 79,161, 82,169,170,154, 6,203,203,203,161, 80, 40,170,254,174, 52,137,215,175, 95, 87,200, 25,166, +198,188,171,128,156,228,167, 79, 7,181,105,211,166, 48, 37, 37, 5,229,229,229,136,143,143,199,157, 59,119,112,250,244,105, 92, +189,122, 21, 9, 9, 9,208,233,116,176,178,178, 66, 89, 89, 25,126,255,253,247, 50,109,121,121, 95, 85, 53,253,128, 8,255,197, +205,217,185,151,163,131, 67,186,189,157, 93,166,155,179,115,175,106,140, 70, 92, 92, 92, 28, 88,150,133,151,151,151, 77,109,253, +176, 88,134,185,121,231,206, 29,140, 25, 51, 6, 78,174,174,171,236,171, 49, 46,246,128,189,115,131, 6,171, 38, 76,152,128,224, +224, 96,176,181, 24,151,154,144, 1,155,190,248,226, 11,181, 88, 44,198,193,131, 7,189, 44,124,124, 98,133,192,251, 18,192,223, + 27, 16,215,181,191, 25,240,227,162, 69,139,114, 0, 96,239,222,189,118,206,222,222,145, 66, 96,130, 12,104, 40, 3, 26, 10,129, + 9,206,222,222,145, 7, 15, 30,180, 99, 24, 6, 51,103,206,204, 49, 3,126,172, 73, 79, 32, 16,124,154,149,149, 53, 40, 51, 51, +179,107, 78,252,109,183,159,191,253, 2, 87, 66,238,226,199, 45,251,118,228, 69, 54,251, 48, 47, 47,243,126, 86, 86,214,216,204, +204,204, 8, 82,227, 8, 4,194, 63,145,106,195, 47,194,182, 43,115, 1,222,161, 91,251,230,120, 16, 22, 91,106,107,109,121,190, +242,127, 37, 49,199, 27,191,219,221,163,229,178,101,203, 64, 81, 20, 98, 98, 98, 16, 30, 30, 14, 0, 88,179,102,141,138,230,249, + 97,207,173,119, 22, 8, 32,162, 66,243, 18,195, 48,214, 82,109,186, 89,144,117, 82,163, 61,187,118, 8,204,205,205, 81, 94, 94, + 14,129, 64, 0,153, 76, 6, 83, 83, 83, 72,165, 82,132,135,135, 99,220,132, 15,216, 4,166,197,127, 39, 26,253,239,122,103, 85, +154,149,243, 15,117,178,181,149,167,137,197,179,237, 29, 29,191,152, 49, 99,134, 73,215,174, 93, 33,145, 72,208,186, 93,151, 28, +147,150, 95,108,164, 5, 20,147, 85, 80,186,208,187,161,139,101,212,211, 20, 0, 84,158,225,254, 66,231,231,154,108,254,144,206, +102,178,112,175, 61, 63, 47,183,104,218,180, 41,120,158, 71,105,105, 41,114,115,115,145,151,151,135,146,146, 18,168,213,106,112, + 28,135,203,151, 47,227,242,189,196,178, 92,243,183, 18,107, 74,231,127,243,158, 98, 30, 96, 18,231,185,113,253, 58,129,181,181, + 53,114,115,115, 81, 80, 80, 80,213, 84,200,178, 44, 20, 10, 5, 78,158, 58,195, 38,178,205,146,181,210,134,138,186, 52,161, 76, + 55,177, 41,191,229,218, 58,208,147,159, 50,101,138,185,133,133, 5, 56,142, 67, 81, 81, 17,146,147,147, 17, 23, 23,135, 27, 55, +110,168,242,202, 12,188,218,174, 79, 70,213, 68,163,213,104,190, 65,254,118,154,207,207,101,229,226,236,156,157,154,154,234,192, +178, 44, 92, 93, 93,153,146,162,162,213, 18,224,162, 24,200,162, 0, 94, 1, 44, 90,191,113,227, 7, 67,134, 12, 65,219,182,109, +211,115,114,115, 27, 86, 87,151,120,128,118, 1,172,197, 30, 30,209,119,239,222,181,143,139,139,195,248,241,227,243,179,210,211, +103, 91, 0, 33, 0, 80, 6,116,115,113,115, 91,183,127,255,126,251,192,192, 64, 52,111,222, 60, 95,155,156, 28,144, 5, 20,215, + 80, 63,107,188, 54,139,227, 78, 55,250,100, 88, 96,155,143, 63,254, 24, 12,195, 32, 36, 36, 4,247,238,221, 67, 90, 90, 26,110, +221,186, 85, 98, 97,106, 58,170,182,107, 19,165,177,230,253, 27, 43,189,246,238,221, 67,137,197, 98,236,216,177, 3,161,161,207, +130,105, 65, 65, 65,152, 56,113, 34, 24,134,193,152, 49, 99,249, 51,177, 38,255,157,104,180,154,186,228,234,234, 26,200,113,220, + 90,138,162,196,172,196,161, 77, 78, 82,168,204,217,183,115, 86,206,211, 94,110,245,236,115, 69,234, 39,209, 36,154,255, 30,205, +191, 60,175,189,216,243,243,235,157,173,220, 12,203, 23,151,227,248, 40,251,228,142,213,194, 1,111, 15, 10, 88,184, 96,190,160, + 89,179,102,224, 56, 14,109,219,182,197,248,241,227,229, 1, 1, 1,117,173,119, 86,254,214,208, 73, 73,111,189,245,150,213, 39, +159,124, 98,217,173, 91, 55, 81,229, 82, 57, 79,158, 60,193,217,179,103,245, 7, 14, 28, 40,203,148,116, 41,185,117,110, 91,185, + 49,235,157,221, 42, 44, 84, 1, 88,238,171,215,111, 89,180, 96,193,210,166,205,154, 77,250,252,243,207,105, 51, 83,185,104,229, +194,143,100, 0,240,245, 15, 7, 44,135,140,120, 31, 27,124,128,110,239, 85,191,118,220,243,233,204,200,206, 75,125,255,131,145, + 62,147,198, 12,227,134, 14, 29, 42,183,180,180,132,155,155, 27,172,172,172,144,148,148,132, 39, 79,158,240, 23, 47, 94, 44, 15, +139, 73, 19,237, 62,116, 49, 85, 98,230, 96,204,186,129,138,183,134,140, 79,158, 48, 97,130,245,176, 97,195,204,155, 54,109, 42, + 18,137, 68,144, 74,165, 40, 40, 40, 64, 70, 70,134,254,234,213,171,229,153,226, 14,197,183,206,239, 84, 24,185, 22,161,186,235, +232,101,241,193, 23,150,126, 30, 22, 22, 54, 22, 64, 11,189, 94,223,128,101, 89,138,166,233,108,150,101,195, 53,229,229,219,153, +160,165, 27,200, 90,132,198,193,178,172,152,101, 89,148,148,148,224,210,165, 75,194,132,132,132,133, 97, 97, 97, 11,179,178,178, +160,215,235, 49, 98,196, 8, 4, 5, 5,225,218,181,107,200,207,205, 61, 85,155, 86, 22, 80, 44, 76, 77,253, 96,218,180,105,167, +119,238,220, 73, 61,121,242,196,126,251,246,237,123, 30, 61,122, 4, 0,104,213,170, 21, 62,248,224, 3, 8,133, 66,140, 31, 63, +158, 79, 75, 78,254,128, 1,138,107,169,159,181, 93,155,249,103, 15,108, 10, 27, 58,124, 68,147, 37,139, 22,136, 58,117,234, 4, +123,123,123,116,233,210, 5,122,189,222,202,136,107, 83,209,181,223,168,196, 22, 45, 90,152,174, 95,191,222,233,131, 15, 62,192, +244,233,211, 1, 0,106,181, 26, 23, 47, 94,196,204,153, 51,115,210,132,237,148,143,174, 30,172,181,126, 86, 68,166,250, 0,128, +139, 11, 66, 0,116,165,149, 41,137,164, 67, 59,129, 64,248,183, 80,231, 90,132, 55,238, 69,224,249,229, 56,158, 97, 19,109,176, + 25,150,248,193,204,213, 77, 4,134, 18,107, 19,161,206, 58, 60, 44,140, 78, 74, 74,170,245, 96,149,235,157,105,165,110,229,108, +118, 97,155, 77, 27, 54,124,190,117,235,214, 94,149, 83, 49,200,100,178, 39,106,165, 50, 24,101,101, 27,180,158,110, 87,234,187, +118, 94, 92, 97, 97, 46,128,169,222, 28,183,113,194,164, 41,107, 40, 51, 55,225,252,149,191,105, 4, 2,129, 46, 49, 51, 23, 27, +124, 0, 83, 35,230, 67, 85,233,128, 39,133, 14, 76, 36,223, 45,118,237,234,213,179, 54,255,248, 99, 59, 19, 51,179,174,122,189, + 62,128,227, 56, 0,136,214,168, 84,215, 25,189,254, 94,166,203,228,239, 37,102, 14,188,177,235, 6,106,101,158, 10, 83,245,141, + 54, 71, 15, 31,254,236,220,185,115,127,200,187, 57,176, 81,107,225, 25,108, 76,222,159,223,198, 0,220, 70, 94,222,237,218, 66, +149,100, 45, 66,227,160,121,254, 35,107,107,235, 61,189,122,245,146,245,238,221, 27, 3, 6, 12, 64,199,142, 29,193,113, 28,120, +158,135, 66,161,192,161, 67,135,240,221,119,223, 61,117, 4,150,213,165,199, 0,231,133, 39, 79, 14,110,213,170,213,246,245,235, +215,219, 78,157, 58, 21, 38, 21, 83,155,168,213,106, 92,189,122, 21, 51,103,206, 44, 76, 73, 76,252,128, 1,206,215,165, 87,251, +181, 41,139, 99,172,134, 36,143,154,190,218,199, 80,150,101,109, 43,103,156, 34, 35,158, 24,125,109,194,210, 79, 81, 26,122,168, +237, 59,195,134, 77,167,133,194,206,149, 83, 49, 68, 69, 69, 61,172, 92,236, 25, 65, 19, 47,215,167, 46,241,252,179,185,231,120, +158, 39, 29,218, 9, 4,194,191,219, 96, 9,133,194,188,202, 40,143, 80, 40,204, 75, 58, 49,249,253,218, 68,220,156,157,123, 87, +188, 29,163,174,181, 8, 43,127, 79, 42, 41, 81, 84,204,208, 94,237, 36,162,162,151,182,175,207,122,103, 9,185,185,177, 0,222, + 6, 82,129,216, 27,207,244,218,174,156,247,124,158,106, 44,144, 23,142, 43, 46,202,200,205,189, 1,224, 6,128,239,170, 77,167, +187,184,168,174,116,190,156,247,176,212,212,178,138,124, 87,159,119,135,186,243,254,178,102,157, 39,250, 53,202,243,223, 70,118, +126,254, 9, 0,166,118,167, 79, 59,158, 61,125,250,221, 89,179,102,189,227,226,226,226, 99,103,103,103,109,110,110, 78,223,189, +123, 55, 73,167,209,108,244, 6,118,198, 1, 42, 99, 52, 25,224,172, 83, 98,162,255,224,129, 3, 63,167,133,194,206, 1, 1, 1, + 65, 0, 16, 29, 29, 29,202, 49,204, 77,123, 96, 3, 3, 20, 25,113, 30,235,119,109, 74,235,127,109,150, 2,165, 0, 86,130, 97, +128,138,230,255,215,185, 54, 57,142, 91,233,234,234,170, 32, 51,180, 19, 8, 4,194,155, 35,144,104, 18,205,127,144,166, 0,128, + 5, 41, 79,162, 73, 52,137, 38,209,252, 83, 52,255,242,212,103, 45, 66, 26, 4, 2,193, 88, 88, 0,101,164, 24, 8, 4, 2,129, + 80, 23, 84, 45, 46,180, 62,163, 3, 94,197,201, 70, 16, 77,162, 73, 52,137, 38,209, 36,154, 68,243, 95,167, 89,151,246, 95,118, +116, 98,125, 70, 17,254,217,144,240, 41,209, 36,154, 68,147,104, 18, 77,162, 73, 52,255, 17,144, 38, 66, 2,129, 64,120, 5,150, + 46, 5,205,243,160,120,126, 41,205,243,135, 5, 60, 63, 66,192,243,120,173,181, 59, 71,140,168,126, 34,218, 25,239,195,156,148, + 56,129,240,207, 69, 72,138,224,255,135,147,147,147,187,163,163,227,175, 60,207, 83,121,121,121,147,115,114,114,210, 72,169,252, +245,176,177,177,233, 5, 0, 69, 69, 69,193,255,212, 60, 54,241,196, 48,158,130,255,243,223, 81, 28,210,162, 82, 94, 92,103,177, + 73, 67,140,229,233, 23,231,210,162,120,196, 68, 37,227,120, 61, 14, 71, 15,237,101,191, 22, 0, 78, 4,231,207,193, 43, 44, 78, + 93, 23,206,206,206,190,182,182,182, 23, 4, 2,129,144,101,217,105, 17, 17, 17,181,173,205, 72, 3,192,199,195, 49,159,201,177, +155,191,104, 42, 37,210,105,215,148,104, 53,154, 82,154,166,147,197, 98,241,141, 25, 99,248,243, 63,236, 53, 68,214,176,127,141, +233,111,234,137,254,180,182,201,160, 32,255,164,196,181, 35,219,110,232, 54,201, 78,148,244,240,177,217,230,227,105,191, 90, 90, + 57, 14,250,116, 84,206,105,169, 9, 59,246,187,237, 40, 39, 87,154,113,124, 3,216,232,129,102, 98,169,180, 1,203, 48,142, 0, + 32, 16, 10,115, 13, 90,109,186, 24, 8,159, 15,148,252, 69, 52,237, 12, 66, 97,160, 88, 34,105,192, 26, 12,142, 20,192, 67, 36, +202,227,116,186,116,150, 97, 34,150, 2,133,175,154, 78,145, 84,234,198, 50,140, 35, 5,240,111, 42,239,111, 82,147, 80,135,193, +242,242,242,122, 72,211,116, 3,154,126, 22,228,122,126,205,189,202,223, 95,254,201,178,108, 70,108,108,108,107, 99, 15,238,233, +233,105,161,209,104,222,165, 40,234,125, 0,224,121,126,159, 76, 38, 59,148,156,156,252, 74, 29,137, 61, 61, 61, 45,120,158,159, + 99, 98, 98,210, 83,163,209, 52, 5, 0,153, 76, 22,169, 86,171,175, 80, 20,181,246, 21,117,133,206,206,206, 35, 77, 77, 77,123, + 48, 12,211,131,231,121, 74, 40, 20, 94, 85,169, 84, 87,178,179,179, 15, 3,168,247,140, 7,206,206,206, 38,182,182,182, 95, 91, + 89, 89,189,247,201, 39,159, 20,218,216,216,248, 45, 91,182,236,129,173,173,237,254,162,162,162, 5,217,217,217,234,191, 72,253, +240,118,114,114,218, 39, 18,137, 4,233,233,233, 61, 0,192,205,205,237,170, 78,167, 99,243,242,242,222, 7,144, 80, 31, 49, 59, + 59, 59, 83,145, 72,212,222,212,212,180,181,169,169,105, 87,150,101, 3, 56,142, 3,199,113,209, 74,165,242,186,193, 96,120,104, + 48, 24,238, 22, 20, 20, 40,255, 66,215,136,185, 88, 44,222,195, 48, 12, 0, 52, 6,160,248, 39,222, 8,120, 10,254, 81,145,209, +126, 47,152,169,166, 1,127,220,142,134,123, 13,219, 25,109,176, 6,116,182,234, 55,168,127, 11, 26, 0,244,186, 7,253,206,222, + 44, 57,251,166,205,213,128, 1, 3,110,111,220,184,209, 90,171,213,226,139, 47,190,216,167,213,106,127,138,143,143,159, 95,219, +126, 22, 22,150,179,150,127,243,163,188,226,126,230,192,113,156, 67,118, 86,122,227,216,152, 39,253, 98, 99, 34, 86,205, 24, 17, +115, 71,205,176, 83,182,157, 64,140, 49,233, 8,104,136,129,131,134, 15,123,123,249,226,165,120,239,189,247, 26, 70, 22,105, 76, + 92, 35,195, 36, 74,222,204,219,206,161,193,224,185, 11,190,165,238,222,190, 54,248,240,129,173, 87,190,252,192,208,147,152,172, + 58,161, 86, 10,133,237, 45,125,124,186,142, 58,113, 2,102,110,110, 66,161, 84, 74, 3, 0,163,213,186,149,167,167, 59, 31, 28, + 60,184,221,210,184,184,107, 75,129,123,255, 79,205,229, 66, 97, 39, 75, 31,159, 78,239,157, 61, 11, 51,103,103, 33, 45, 22,211, + 0,192,233,245, 13,202,178,178,156, 15,190,253,118,219,165,241,241,215,151, 50,204, 93, 24,177,212,218,223, 40,239, 4, 99, 12, + 22, 77,211, 13, 66, 67, 67, 29, 76, 77, 77, 81, 97,126,192,178, 44, 88,150, 69,197, 67,177,106,226, 69,158,231,193, 48, 12,186, +119,239,110,212,219,171,179,179,115, 79, 0, 19,124,124,124,222,153, 51,103,142,184, 83,167, 78, 96, 89, 22, 87,174, 92,233,178, +126,253,250, 31,180, 90,237, 49, 0, 59,179,179,179,131,141,125,187,117,114,114,234, 43, 16, 8,246, 46, 92,184,208,162,115,231, +206,194,202,217,225,243,242,242,218,223,184,113,163,245,178,101,203,166, 57, 57, 57,141,201,201,201,185, 96,108,225,184,186,186, + 6,202,229,242, 35,253,251,247,111,208,186,117,107,153,175,175, 47,120,158,199,227,199,143, 63,136,141,141, 29,125,246,236,217, + 37, 42,149,106, 68, 61,214, 83,163,188,189,189,199,155,155,155,127, 61,107,214, 44,155,161, 67,135, 74, 34, 34, 34,138,189,188, +188,168, 99,199,142,217,159, 58,117,106,218, 79, 63,253, 52, 82, 46,151, 47, 72, 72, 72,216,101,204,133,231,227,227,243,144,166, +233, 6,198, 24,224,122,154,224,150,158,158,158,135,174, 95,191,238,153,146,146,194, 14, 27, 54,108, 55, 0,220,186,117,171, 57, +207,243, 84,167, 78,157,206,101,100,100,188, 11,224,177, 49, 25,119,113,113,105,110,105,105,121,114,232,208,161, 54,238,238,238, +242, 6, 13, 26, 80, 50,153, 12, 2,129, 0,229,229,229, 46,177,177,177,189, 31, 63,126,172,190,117,235, 86,145, 88, 44, 30,156, +149,149, 21, 94,143,122,220,209,193,193, 97,172, 72, 36, 10,100, 24,198, 21, 0,132, 66, 97,166,193, 96,136,200,203,203,219, 3, +224,246,171, 94, 32,142,142,142, 63,172, 95,191,222, 46, 55, 55,151, 95,186,116,233, 15,165,165,165,227,255,201, 55,132,136,199, +119,113,227,214,117,252,178,101, 79, 41,207, 35,245, 15, 6,139, 67,124,211,166, 1,246, 83, 62, 26,107,211,165, 83, 87, 4,182, +108, 95,167,230,144,158,182,203, 37, 98,161,173, 74,171,189, 87,144, 65,159,148,155,138,135,141, 25,222, 58, 17, 0,206, 95,126, + 50,172,173,151,245, 77,187, 6,220, 16,185, 84,218, 78,167,103, 10, 79, 94, 41, 92, 92, 31, 51,229,228,228,116,193,204,204, 76, + 94, 82, 82,146, 83, 88, 88,184,185,127,255,254, 43,215,175, 95,111,157,152,152,136,244,244,116, 76,152, 48,193, 44, 51, 51,243, + 19,173, 86,123, 39, 61, 61,189,198, 72, 86,153,162,116,195,215, 75,103, 45, 49,183,180, 22,200, 77, 76, 97,102,110, 1,207, 70, +141,209,166, 93, 23,244,126,107, 48, 18, 19, 98, 59, 28,218,187,245,241,180,225, 25,171, 98,139,176, 34, 36,164,230,123, 83, 19, + 15,116, 27,252,206, 51,115,181,120,249, 82,196,197,198, 40, 82,210,232, 25,103, 30,209,242,254, 61,155, 72,117,218,242,148,187, +183,175,121,182,239,216, 29, 0, 90, 31, 62,176,245,202,210,247, 13,189,150,238,251,103, 26,248, 55, 97,174,150,139, 68,227,251, +174, 95,239, 16, 52,109,154,184, 60, 57, 89,159,248,203, 47,170,220,235,215, 89,161, 84,202,187,245,235, 71,217,247,232, 33,155, + 22, 29, 45,190,181,122,117, 87,209,178,101, 94, 11,244,250,189,255, 47,205, 1,155, 54,217,183,156, 60, 89, 92,150,152,168,143, +251,225, 7,117,206,229,203,140, 88, 38,227, 26, 12, 24, 32,112,236,211, 71, 58, 45, 50, 82,124,103,205,154, 78,194, 69,139, 26, + 45, 52, 24,246,252, 67,242, 78,168,135,193,130,169,169, 41, 14, 28, 56, 0,145, 72, 4,145, 72, 4,161, 80, 88,227,239, 30, 30, + 30,198,152,160,225,182,182,182, 63,206,154, 53,203,113,208,160, 65,176,182,126,113,149,141,129, 3, 7, 98,192,128, 1,226,164, +164,164,209,135, 15, 31, 30,189,123,247,238,156,242,242,242, 25, 57, 57, 57,199,234,120,120,247,240,244,244, 60,118,224,192, 1, + 19,181, 90,141,144,144, 16, 20, 23, 23, 67, 42,149,194,213,213, 21, 93,186,116, 17, 94,189,122,213,102,244,232,209,199,104,154, + 30,152,149,149,117,213,136, 7,107,107,107,107,235,144, 45, 91,182,200,252,253,253,169,248,248,120,180,104,209, 2, 0, 80, 88, + 88,136,129, 3, 7,202,134, 14, 29,234,253,201, 39,159,220, 97, 24,166,123,110,110,238,195, 58,242,222,202,209,209,113, 87,191, +126,253, 92,230,205,155,103, 97,102,102,134,148,148,148,108, 39, 39,167,198,149, 38,104,200,144, 33,146, 62,125,250, 56,111,222, +188,121,227,217,179,103,191,200,207,207, 31,159,147,147,243,168, 86,183, 74,211, 13, 30, 61,122,228, 32,151,203,145,155,155,139, +189,123,247,226,147, 79, 62,129, 80, 40, 68, 94, 94, 30, 14, 29, 58,132, 25, 51,102,128,166,105,148,149,149, 25,101,130,229,114, +121,111, 31, 31,159,109,193,193,193, 13,172,172,172,224,226,226, 66, 47, 90,180, 40,208,203,203,203,196,217,217,153,206,202,202, +194,177, 99,199,188,198,142, 29,123, 50, 45, 45,237, 3,173, 86, 91,103,211,153,173,173,237,246,221,187,119,187,135,133,133, 97, +243,230,205, 40, 42, 42,130, 68, 34,129,165,165, 37,156,156,156,224,235,235, 75, 77,155, 54, 77,222,163, 71, 15,249,210,165, 75, +183, 3,104,105, 68,253,109,225,224,224,240,107,143, 30, 61,188,150, 46, 93,106,229,236,236, 12,185, 92, 14, 0, 40, 45, 45,109, +144,146,146,210,126,201,146, 37, 35, 30, 62,124,152,148,151,151, 55, 5, 64, 88, 61,175,143,150, 77,154, 52, 25, 56,116,232, 80, + 65, 78, 78, 14,182,110,221, 58,176,180,180,180,165,177,166,242,239,200,141, 91,215,209,163,223,104,168, 25, 19,209,169,227,123, +121,197,133,239,109,205,172,172,132, 0, 80, 94, 82,194, 12,120,127, 54, 55,112,240, 24,125,207,126, 67, 84, 87,206,239,147, 27, + 99,176, 36, 98,161,237,193,109, 83,211,175,223,125, 26,112,225, 74, 74,239,161,131,123,211, 66, 83, 63,111, 0,152,253,249, 71, +146, 19,191, 95,254,169,111,207,134,217, 93,219, 55, 78, 31, 53,233, 23,183,250,152, 43, 47, 47,175,107, 23, 46, 92,112,148, 72, + 36, 40, 46, 46,182,221,177, 99,199,247,237,219,183,167, 19, 18, 18, 16, 19, 19,131,228,228,100,148,148,148,160,109,219,182,102, + 81, 81, 81,155, 1,212,104,176,126, 62,138,175, 87,207,117,220,100,239,108,239,105,208,105,237, 25,109,110,211,224, 11, 97,205, +143, 30, 82,181,114,112,106,208,120,244,152,201,152,187,232, 91,209,241, 35,187, 22,227,234, 69,132,212, 54,139, 63,133,142, 95, +205,155,143, 50,149, 22, 99,222,255, 8, 99,199,124,100,203,115, 58,103,158,211,152,234, 52,197, 86,150,226,216,211,187,118, 28, + 26, 6,160,193,115, 38, 43,152,152,172,234, 89, 46, 20,182,123,107,221, 58,135, 22,211,166, 73,195,150, 45, 83, 22, 92,191,174, +110, 52, 96, 64,113,208,212,169, 90, 0, 80, 36, 39,139,227,150, 44,145,219,119,237,106,210,233,203, 47,173, 12, 42,149,211,242, +111,190,105,187, 24,184, 95, 95, 77,207,247,222, 99,215, 30, 59,214,230,238,234,213,221,177, 98,133,160, 71, 80,208,227, 69,191, +252,146, 97,140,230, 74,161,176,125,255,159,126,114,104, 54,113,162,244,225,252,249,202,146,251,247,213,222,195,134, 21,181,153, + 57, 83, 7,129, 0,170,140, 12, 81,194,178,101,166,150,237,218,153,116,152, 61,219,138,213,233, 28,151, 46, 89,210,174,182, 8, +209,114,161,176, 93,191, 13, 27,236, 91, 76,157, 42, 13, 91,185, 82,153,117,229,138,182, 44, 32, 0, 45,223,121,167,208,213,214, + 86,251,170,121,127, 94,179,224,234,213,215, 46, 79, 66,117,183,129, 26,240,245,245,205,141,141,141,117, 56,122,244,168, 81, 6, +203,197,197, 5, 93,186,116,201,139,136,136,112,172,229,134,152,158,158,158,222,128, 97, 24, 72, 36,146, 90, 19,166, 80, 40, 16, + 30, 30,142,209,163, 71,103,100,103,103,215,120,211,181,182,182, 54,183,182,182, 78,188,122,245,170, 93, 84, 84, 20, 30, 62,124, + 8, 47, 47, 47, 88, 91, 91, 67, 36, 18,193, 96, 48, 64,161, 80,192,199,199, 7,114,185, 28, 3, 6, 12, 40, 40, 42, 42,242, 42, + 46, 46,174,241, 38,230,225,225, 33, 21,137, 68, 79,143, 30, 61,234, 22, 24, 24,136,251,247,239,195,205,205, 13, 78, 78, 78, 0, +128,228,228,100,220,186,117, 11,253,251,247, 71, 68, 68, 4,166, 78,157,154,110, 48, 24, 26,167,166,166,106,107,108, 46, 8, 8, +200, 62,124,248,112,134,191,191,191, 70,169, 84,210,185,185,185,162,235,215,175, 51,229,229,229,102, 37, 37, 37,162,210,210, 82, + 97,105,105,169, 72,169, 84,138,104,154, 22,107,181, 90,209,221,187,119, 5, 69, 69, 69,181, 78,108,233,231,231,151, 27, 19, 19, +227,240,251,239,191,163, 89,179,102, 56,122,244, 40,230,204,153,131, 91,183,110,161, 65,131, 6, 56,114,228, 8,230,204,153,131, +152,152, 24,216,219,219,163,103,207,158,181,158, 35, 0,240,246,246,142, 15, 15, 15,247,150, 72, 36, 72, 72, 72, 64, 70, 70, 6, +186,118,237, 10,142,227,144,147,147,131,167, 79,159, 34, 43, 43, 11,222,222,222,120,255,253,247, 19, 50, 51, 51,125,234,170,104, + 65, 65, 65,249,193,193,193,118,205,155, 55, 71, 78, 78, 14,172,172,172,170, 62,150,150,150,176,178,178, 66,163, 70,141, 48,107, +214, 44,180,104,209, 34, 47, 53, 53,213,177, 46,243, 19, 24, 24,120,225,202,149, 43,118, 54, 54, 54,208,104, 52,208,104, 52, 85, + 47, 7,114,185, 28, 34,145, 8, 0,240,244,233, 83, 12, 28, 56, 48, 63, 49, 49,177, 95, 61,204, 17,237,232,232, 24, 19, 22, 22, +214,216,220,220, 28,233,233,233,136,136,136,192,164, 73,147,158, 42,149, 74,127,252, 9,253,134,254,159, 4, 52,194,194,168,200, +104,191, 38, 77, 2, 74,199,125, 48, 69, 52,100,208, 16,101,232,189,139, 6,145,246, 90,249, 91, 93, 44,179, 0, 32,248,174,194, + 65, 43,234, 34,110,221,182, 47,117,242,228, 73,217,174,157,191, 10, 35, 35,163,157,154, 52, 13,136,141, 78,194,202,154,180,223, +238,110, 57,110,206,244,126, 1, 93, 59,117, 21,150, 41,121,167,109,219,127,107,155,154,146,232, 8, 0, 30, 13,189,114, 39,125, +240,209,125, 11, 83, 42,231,250,173,235,204,218, 31,207, 71,159,185, 86,186,219,136,232,178,151,155,155,219,157, 29, 59,118,216, +217,217,217,193,210,210, 18, 42,149, 10,122,189, 30, 81, 81, 81,154,131, 7, 15, 26, 44, 44, 44,204,115,114,114, 80, 92, 92, 12, +161, 80,136,187,119,239,166,229,230,230, 86,247, 38, 88, 53,216,231,240,225,165,194,110,173,221,173,197, 52,111, 34, 97, 99, 93, +132, 2, 94, 66,193,202, 49, 56,228,110,139,107, 33,215,199, 12, 24, 52,202,190, 67,167, 30,248,118,229, 92, 67,114,122,122,203, +138,230,194, 63,212, 5,127, 79,244, 28, 58,124,216,200,229,139,151, 98,233,242,101, 56,125,234, 68,169,153, 9,173,181, 48, 23, + 89,118,237,220, 73, 51,107,198,187,233, 42, 69,137,219,247,235,215,190,215,167,223,176, 6,237, 59,118,199,221,219,215,112,248, +192,214,135, 98, 41,105, 46,124,158,165,128,181,149,151,215,148,233, 79,159,138,159, 44, 93, 90,206,100,101, 21,183,158, 57,179, +160,186,109, 51, 46, 93, 50,149,184,184, 88,216, 14, 30,108,189,222,195, 3,134,188,188, 95,171,235, 67, 84,157,230,125,103,103, +171,227, 87,175,246,226,132,194,110,159, 76,159,110,210,187,119,111,148,149,149,225,244,233,211,216,191,111,159,214,201,201, 41, +220,234,254,253,199, 94,217,217, 11,171,211,252, 6,176, 49,247,245,157,252, 73,116,180, 56,116,225,194,114, 20, 21, 21, 5,205, +152, 81,200,178, 44, 53,121,229,202, 1,137,217,217,221,114, 11, 10, 60, 0,192,193,202, 42,221,223,217, 57,116,211,238,221, 81, + 63,250,249,241,229, 89, 89,191, 46,173,102, 13,210,151,211,121,240,214, 45,199,115,249,249, 31, 90, 91, 91,155, 20, 20, 22, 10, +196, 34, 81, 81,171,198,141, 15,126, 59, 99, 70,136,250,225, 67,201,171,230,189,245,204,153, 5,165, 42,149,112,193,166, 77,157, +178, 10, 11, 27, 42,117, 58,159,210,242,114, 39, 70,175,167,205, 77, 76, 10, 27,122,123,231,150, 93,185,146,227, 81, 94,254,217, + 70,149, 42,239,223, 92, 31, 95,123,177,231,202,136, 10,207,243, 70,153, 43,145, 72,244, 66, 51, 84, 45,136, 5, 2, 1,238,223, +191,143,188,188, 60, 52,107,214, 12,158,158,158, 47,108,144,152,152,136,179,103,207,162,184,184, 24,173, 90,181, 2, 0,113,109, +130,230,230,230,159,207,159, 63,223, 74,167,211, 33, 52, 52, 20,173, 90,181,130, 76, 38,131, 72, 36,130, 88, 44,134, 80, 40,132, +147,147, 19, 10, 10, 10,224,232,232,136,105,211,166, 89,110,218,180,233,243,226,226,226,229,181, 20,224,244,209,163, 71, 59, 4, + 6, 62, 27,133,154,158,158, 94,153, 22, 0,128,131,131, 3, 30, 63,126,140, 86,173, 90,193,209,209, 17,253,251,247,119, 56,121, +242,228,116, 0,107,107,204,184, 88, 76,251,251,251,183, 1, 0, 83, 83, 83,208, 52, 29,103, 97, 97, 97,239,232,232,104,106, 97, + 97,241,135, 60,238,216,177,163, 68, 34,145, 24,140, 41,212,156,156, 28, 4, 6, 6,162,164,228,217,181,164, 84, 42,225,227,227, +131,210,210, 82, 0,128, 86,171,133,139,139, 75,149, 1,169,137,230,205,155, 47,245,247,247,127,203,212,212, 84, 42, 20, 10, 17, + 22, 22,134,160,160, 32, 28, 60,120, 16, 30, 30, 30,144,203,229,136,141,141, 69,243,230,205, 17, 18, 18, 2,123,123,123, 52,109, +218, 84,234,224,224,112,163,168,168,232,106,106,106,234,210, 90, 34,109,180,153,153, 25, 66, 66, 66,176,125,251,118, 36, 37, 37, + 33, 43, 43, 11, 22, 22, 22,104,217,178, 37, 2, 2, 2,208,169, 83, 39,196,199,199,131,170,187, 50, 57, 53,110,220,248,244,253, +251,247,237,104,154, 70, 72, 72, 8, 84, 42, 21, 52, 26, 13, 24,134, 1, 69, 81,144,201,100,232,208,161, 3,108,109,109,209,184, +113, 99, 28, 63,126,220,190, 79,159, 62,103,115,115,115, 91, 2,200,169,171, 76,173,173,173, 63, 91,188,120,177,155,163,163, 35, + 20, 10, 5, 84, 42, 21, 92, 92, 92,208,167, 79, 31,215,179,103,207,126,166,211,233,214,255,163,222,180, 56,164, 53,105, 26, 0, +158, 71,234,169,227,123,249, 6,246,178,192,238,173, 56,135,184, 40, 97,135,187,119, 35,154, 2,128,181,169,103, 88,227, 0,125, + 92,200,131, 75, 25,167,127,223, 31,198,178,160, 3,154, 4,248,209, 60, 50,107,211, 46,200,160, 79, 94,184,146,210,187,121,243, + 46,130, 77,223, 47, 25, 50,249,131,190, 82, 27,235, 46, 84, 89,198, 33,220,122,244,196, 99,209,162,121, 14, 43, 86,172, 62,117, +225, 74, 10, 91,144, 65,127,109, 76,122,189, 27,218,252,112,116,157,200, 78,161,216,135,176,120, 51, 80, 38,205,225,217,200, 27, +101,101,101,144, 74,165,178,247,222,123,143,157, 63,127,190,202,220,220, 92, 94, 81,151,243,104,154,238, 91,167,112, 76, 52,152, +102, 62,140,200, 92,199,113,188,153, 26,154, 82,241,147,248, 68,116,233,209, 63,183,109,171,150, 43, 87,175, 93,191,208,203,199, +207,254,189,113, 83, 68,235,190, 93,248, 11,192,119,169, 86, 38, 25, 87,168,163,199, 77, 0,188,189,124,241, 82, 36, 38, 62,181, +158, 60,188,100,153, 80, 96,226,226,223,172,155,249, 47, 59, 46,245,243,241,245,107, 56,121,218,103,103,182,108,222,248,246,243, +145,172, 3,251,182,156, 4,216, 94, 48,174,111,206,191,129,230, 99, 79,159,134, 42, 45,205, 80,116,227,134,166,215,143, 63, 22, +180, 26, 55,110,189,222, 96,176,163, 40,234,133,174, 16, 20, 69, 1, 28, 71, 9,215,174,165,121, 23, 23, 24,172,172, 38, 32, 46, +206,183, 46,205,213, 6,195,240,161, 45, 91,190,189,109,239, 94,120,120,120, 84,105, 90, 90, 90, 98,250,244,233,152, 54,109,154, + 52, 60, 60,188,221,217,179,103,219,237,254,233, 39, 71,228,231, 15,127, 89, 80, 15, 52,123,239,247,223, 81,158,156,172, 47,186, +127, 95,211,115,227,198,194,107, 15, 30,216,204,251,233,167, 69,205,130,130, 92,127, 94,186, 84,234,238,254,108,124, 72, 90, 90, +154,207,198, 13, 27,220,123,244,233,211,105,238,236,217, 59, 30,207,154,213, 4,207,150,100,171, 49,157, 57,215,175,235,206, 21, + 21,125,120,248,200, 17, 43, 63, 63, 63,240, 60,143,248,248,120,135,237,219,183, 79,233, 54,109,218,216,217,163, 71, 47,234,147, +148, 84,204, 22, 22, 74, 6,254,240,131,232,192,200,145, 77,235,210,172, 44, 79, 0,120,103,206,156,207,219,118,236,216,164,255, +123,239,217,184,184,184, 80, 38, 38, 38,208,235,245,200,201,201,177,142,141,141,245, 14, 46, 45, 45,187,248,248,241, 30,168, 84, +125, 72,149,124, 77,131, 5, 0, 44,203,214,203, 96, 25,105,178,170, 34, 94, 5, 5, 5,136,136,136,128,135,135, 7, 12, 6, 3, + 46, 92,184,128,146,146, 18,136,197, 98,136,197, 98,232,116,186, 58,181, 76, 77, 77,123,119,237,218, 85,120,251,246,109,120,122, +122,194,196,196,164,202, 88, 85,154, 44,145, 72, 4, 39, 39, 39,148,150,150,162,115,231,206,162,237,219,183,247, 70, 13,235, 0, + 2,128,153,153,217,128,193,131, 7, 87,133,216,148, 74, 37, 4,130,103, 35,173,117, 58, 29, 20, 10, 5, 10, 11, 11, 81, 90, 90, + 10,141, 70,131, 22, 45, 90, 72,174, 92,185, 50,160, 54,131,245, 60, 42,149,170, 60, 47, 47,207,170, 75,151, 46,214, 59,119,238, +140,237,208,161,195, 11,157,134,175, 93,187,166,209,106,181, 66,137, 68, 98, 84,103,247,189,123,247, 86,149,125, 86, 86, 22,126, +253,245, 87,112, 28, 7,138,162,240,244,233, 83,108,218,180,169,170,175, 92,109,231,200,223,223,191,255,158, 61,123, 90,239,222, +189,187, 88, 40, 20, 34, 54, 54, 22,251,246,237, 3,207,243,176,179,179,131, 74,165, 66, 94, 94, 30,214,175, 95, 15,189, 94, 15, + 51, 51, 51,184,186,186,202,166, 79,159,222,121,217,178,101,162,218, 12, 22,203,178,172, 64, 32,128,187,187, 59, 22, 47, 94, 12, +141, 70, 3,177,248,153,175, 44, 43, 43, 67, 73, 73, 9, 66, 67, 67,145,156,156, 12,142,227,106,125,176,200,100,178, 17,187,118, +237,114,144, 72, 36,208,104, 52,120,250,244, 41, 18, 18, 18, 16, 27, 27,171, 45, 42, 42, 98,204,204,204, 40,103,103,103, 65,105, +105,169,100,220,184,113,148, 66,161, 0,207,243, 24, 54,108,152,237,182,109,219,222,213,233,116, 27,234, 40, 82,123, 39, 39,167, +175, 38, 79,158, 44,171, 44, 55,142,227,144,159,159,143,145, 35, 71,202,175, 94,189, 58, 95,167,211,237, 3,144,255, 79,185, 17, + 60, 63, 90, 80,113,225,123,219,139, 23,127,110, 24, 23, 37,236, 32, 64, 97,187,160,110,159, 9, 1, 32,230,225,142, 78,241,209, +247, 89, 51,142, 74, 60,179,111,237, 29,243,198, 83, 10, 1,156,172, 45, 10, 56,160,179, 85, 63,185,169,120,216,208,193,189,233, +109,219,127,107, 59,249,131,190, 82,135, 22,191, 81, 0, 96, 45,109,128,142,134,217,180, 70,167,148,109,219,254, 91,219,161,131, + 7,220, 75, 78, 73, 93,111,235,100,117,252,236,205,146,243,181, 69, 9,157,237,132,174,214, 38, 5,176,118,235, 13,143, 0,107, +132,134,134,226,228,177,219,240,241,107, 3,157, 78, 7,131,193, 96, 58,112,224, 64,213,145, 35, 71, 52,133,133,133, 10,189, 94, +223, 45, 59, 59, 59,174, 78,127,133, 2,174, 5,205,233, 37,172,136, 81, 43, 37,202, 25,139,142,189,219,182, 99,255, 86, 54,238, +174, 34, 91, 25,115,170,123,183,174,123,247,239,254,117,214,236,185, 43,208, 34,168, 67,199, 25,226, 7, 77,127,216,107,120, 82, +157, 86,116, 10, 78,211,199,143, 51,137,113,241,111,167,166,167,100,248,186, 57,233, 18,210,120,195,103,243,127,233,211,165,247, +136,230,222,126,237, 37,145, 49,183,169, 89, 51,103,237,255,254,251, 53,239, 85,154,172,235, 33, 23,186, 45,157,144, 34, 89,186, + 19, 90,242,136, 2,196, 82,105, 3, 51, 15, 15, 97,242,206,157,106,175, 65,131,138, 1,192,192, 48,118,119,239,221,179,148,203, +229,224,121, 30, 6,131,225,133, 62,194,149,253,130,123,119,239,238,104,140,102,250,207, 63, 55,255,228,147, 79,144,147,147, 3, +134, 97,170,162,223,207,221,179, 81, 86, 86,134,225,195,135, 99,199,230,205,213,182,139,139,164, 82, 55, 51, 55, 55, 97,242,206, +157,106,239,183,223, 46, 2,203, 82,115,127,250,105,241,236, 47,190,240, 28,249,238,187, 47,188, 55, 6, 4, 4,224,231,205,155, + 37,251,246,237,115, 93,189,121,243, 7,253,165,210, 68,104,181,181,166, 83,209,180, 41,172, 35, 34, 76,252,252,252,170, 12,101, +227,198,141,241,237,183,223, 74,199,140, 25, 35, 25, 63,118,236,186, 72, 63,191,141, 75,147,147,227,109,125,125, 45,132, 82,105, +131,186, 52, 43,203, 19, 0,202,117,186,192,165, 43, 86, 88,223,187,119, 15, 89, 89, 89, 85,145, 26,138,162,208,188,121,115,234, +221,119,223,181,108,223,186,117, 91, 82, 35,223,128,193,162, 40,170, 90,131, 85,147,209, 50,214, 92,189,124, 12,103,103,103,232, +245,122,252,246,219,111, 85,198,170,234,141, 64,175,175, 83, 67,163,209, 52,115,114,114, 66, 89, 89, 25,124,125,125,171, 52, 42, +211, 85,249,145,201,100,208,104, 52,112,117,117,133, 70,163,105, 86,135, 1,106,105,105,105, 89, 21, 14,212, 86, 84, 82,157, 78, +135,146,146, 18,148,148,148, 64,167,211,161,184,184, 24,229,229,229, 40, 41, 41,129, 66,161, 8, 50, 38,207, 28,199, 33, 34, 34, + 34,193,207,207,175,165, 64, 32,128,153,153,153,169, 82,169, 68,229, 96,130,162,162, 34,236,218,181, 75, 57,110,220, 56,187,187, +119,239,170,141, 41,195, 25, 51,102, 64, 42,149, 66,165, 82, 97,243,230,205,152, 49, 99, 6,196, 98, 49, 20, 10, 5, 54,111,222, +140, 89,179,102, 65, 40, 20, 66,171,213,226,224,193,131, 53, 63,100,163,162,146,239,222,189, 27,212,170, 85, 43,235,227,199,143, +231,247,238,221,219,190,111,223,190, 85,101,199, 48, 12,218,181,107, 7,127,127,127,228,229,229,225,220,185,115, 5,141, 27, 55, +182,187,119,239, 30,151,147,147,147, 90, 71,190,171, 76,147, 64, 32, 0,203,178,200,205,205, 69, 73, 73, 9,242,243,243,145,149, +149,133,140,140, 12, 8,133,117,207, 28, 98,107,107,251, 78, 96, 96,160,160,194,108,161, 81,163, 70,152, 61,123, 54,163, 86,171, + 71, 2, 56, 87,177, 89,255,253,251,247, 31,247,241,241, 17,186,184,184,224,233,211,167,176,183,183, 23,154,152,152,140,170,203, + 96, 57, 57, 57,237, 56,117,234,148, 77,229, 8,218, 74,212,106, 53, 24,134,193,232,209,163,109,182,109,219,182, 67,175,215, 15, +248, 39,222, 20,204,172,172,132,111,117,177,204,186,123, 55,162,105, 80,183,207,132, 54,190, 75,158, 25,112, 64, 24,122,125, 99, + 80,151,118,129,251, 42,251,101,213,198,208, 94,246,107, 7,245,111, 65,143, 25,222, 58, 81,104,234,231,189,119,215, 70, 71, 27, +235, 46,255,189, 81, 8,109, 96, 42, 3,252, 61, 88,250,206,233, 68,199, 89,179,252,116,251,126,249, 48,113,239,177,135,189,197, +146,176,158, 39,130,243,103,213,164, 29,153,104,248,189, 84, 99, 19, 96, 89,122,140,130,237, 71, 8, 10, 10,130,189,189, 11,126, +222,178, 7,174, 13, 91, 65,167,211,193,194,194, 66,254,236, 54,162,223,107,140,185, 2,128,165, 75, 67,184,174, 93,187,233,133, +246,118,204,244,233,223, 15,239,219,127,120, 64,183,238,189,248, 75,151,206,235, 59, 6,232,179,122,117,107,159,115, 45, 36,228, +105, 78, 78,102, 99,255,128,230,136,141,124,216,151,231, 17, 65, 81,213, 71,155, 34,147,112, 94, 67, 69, 93, 61,248,197,100, 78, +173, 11, 53, 89,249,211,147,254,111, 15, 25, 31,216,181,115, 23,238,210,229,139, 58, 9, 74,162,205, 58,119,204, 28, 63,118,212, +241,131,135,142,190,117,245,242,105,159,210,146,220,211,107,247, 16,115, 85,245,114,198, 48,142, 66,169,148,206,189,122,149,105, + 49,105, 82, 85,185,200,229,114,156, 60,121, 18, 18,137, 4, 98,177, 24, 18,137,164,234, 35, 22,139,225,228,228, 4,138,231,233, +250,104,102,103,103, 35, 39, 39, 7,150,150,150,176,183,183, 71, 78, 78, 14,110,221,186,133,167, 79,159, 66, 40, 20,162,127,255, +254,160,107,120,110,190,164,169,251,112,249,242,126, 77,155, 55,119,121,217, 92, 85, 62,219,138,138,138,208,173, 91, 55,234,210, +165, 75,246,215, 19, 19,135, 64,171,221, 83,155,102,179,193,131, 11,243,130,131,171, 61,118,147, 38, 77,168,227, 39, 79, 74,223, + 27, 61,122,230,183, 91,182,108, 88,180,110, 93, 14, 24,198,169, 62,121,167, 40,138,166, 40, 10,110,110,110, 40, 42, 42, 66,121, +121,121,101,192, 1,214,214,214, 48, 24, 12,224, 56, 78, 68,106,164,241,208,117,153,129,151,141, 84, 77, 31,154,166, 95,201,100, +213,134, 49, 6,171,210,100, 72,165,210, 23, 46,174,202,207,243, 23, 95,165,137, 49, 2, 65, 89, 89, 25,142, 29, 59,134,162,162, + 34, 40, 20,138, 23,204, 85,101,228, 42, 41, 41, 9,251,247,239, 71,102,102, 38, 4, 2,129, 81,147,182, 38, 37, 37, 61,244,244, +244,108, 89, 25, 17,235,209,163, 71,131, 27, 55,110,100, 85,154,185,133, 11, 23, 22,180,111,223,222,238,229,135,123,173,137, 21, + 8,112,235,214, 45,168, 84, 42,240, 60, 15,177, 88,140,216,216, 88, 48, 12, 3,158,231, 33, 20, 10,145,159,159, 95,103, 4, 43, + 34, 34, 98,226, 7, 31,124,176, 97,210,164, 73, 87,231,206,157,123,169,103,207,158,233, 20, 69,193, 96, 48,192,194,194, 2, 78, + 78, 78,136,139,139,131, 90,173,198,231,159,127,158,182,123,247,238,203,155, 55,111,190,186,117,235,214, 13, 25, 25, 25, 31,212, +231,220, 50, 12, 3,165, 82,137,226,226, 98, 20, 21, 21,161,172,172, 12, 26,141,230,149,234, 80,175, 94,189,112,250,244,105, 65, +175, 94,189,182,121,120,120,228,120,120,120,228,244,234,213,107,219,239,191,255, 46,112,117,117, 69,122,122, 58, 66, 67, 67, 81, + 84, 84, 4,142,227,168, 58,162,171, 61,198,142, 29,219,217,221,221,157,210,235,245,208,106,181,208,233,116,208,235,245, 96, 89, + 22,105,105,105,104,210,164, 9,237,238,238,222, 1, 64, 15,114, 11,169, 31,101, 25,135,192,231,253, 8,190,232, 0,184,188,159, +160,212,188,154, 78,113,113,241,215, 31,127, 83,154,199,150, 94, 69,212,163, 99, 80,168,133,104,224,211, 3, 83, 38,141,198,131, +123, 87, 81, 88, 88,136,232,232,104,116,237,218, 85, 76, 81, 84,189,234,230,129, 3,167,217,247, 70,127,249,110,175,190,195, 91, +247,234, 61,128,189,116, 41, 88,123,255,206,249,135, 62,158, 22,121, 60, 83,146,107,105, 33,127, 20, 31, 23,141,198,126, 77, 96, + 96,184,174,192,210, 90,235, 84, 98, 34,116,103,114,156,217,119,103, 68,140,237, 59,104, 66,139, 94,189,251, 26, 46,156, 63,197, +222,184,120, 36,180,111,143,134, 33,171,214,236,115, 43, 50,248, 54,149, 89, 56,157,237,208, 82,222,101,234, 80,247,201,164,166, + 84, 19,117,146,201, 56, 84,220, 55, 41,138, 2,199,113, 47,152,170,151, 63,198, 60,147,158,215,172,132,231,121,148,148,148,224, +233,211,167, 88,179,102, 13, 30, 63,126, 12,150,101,171, 34, 89, 53, 62,135, 42,154,116,197, 50, 25, 7, 0,137,217,217,221, 62, +249,228, 19,105,117,230,170,176,176, 16, 5, 5, 5,200,204,204, 68,255,254,253,197,101, 54, 54, 45,235, 74,167,171,131,131, 86, + 46,147,229,198,197,197,253, 33,189, 10,133, 2, 82,169, 20, 63,254,244,147,248,116, 68,196,140, 27,183,110, 89,213,167, 60, 43, +117, 40,138,130,131,131, 3,188,189,189, 17, 20, 20,132,102,205,154, 65, 38,147, 33, 50, 50, 18,191,254,250, 43, 4, 20,197,144, +154,248, 6, 34, 88, 53, 25,172,234,126, 23, 10,133,168,143, 33, 48, 22, 99,154, 8,101, 50,217,147,220,220,220, 78, 13, 26, 52, +128,193, 96,168,138, 94, 85, 54, 19, 86,254, 13, 0, 82,169, 20,209,209,209,144,201,100, 79,106,211,148,203,229, 79, 4, 2, 65, +135, 54,109,218,224,248,241,227,184,122,245, 42,146,146,146,160, 86,171,161,209,104,160, 86,171, 17, 25, 25, 9,142,227, 16, 24, + 24, 8, 75, 75, 75,200,229,242, 39,117,165, 85,169, 84,102, 11,133, 66, 63, 19, 19,147,255, 54,117, 56, 59,163,160,160,128, 51, + 24, 12,216,181,107, 87,153,147,147,147,169,137,137,137,209,229, 73, 81, 20,242,242,242,224,230,230,134,178,178,103,211,124, 41, + 20, 10, 56, 56, 56, 64,175,215,131,227, 56,104,181, 90,152,153,153, 25,211, 57, 79, 19, 31, 31, 63,251,185,191,219,140, 28, 57, +114,255,193,131, 7, 27, 93,190,124, 25,247,238,221,131,157,157, 29,190,249,230,155,164,148,148,148,247, 0, 60,200,203,251,223, +247,119, 44, 44, 44, 60, 26, 17, 17,209,161, 77,155, 54, 85,119,135,238,221,187, 83,221,187,119,183,123, 62,164, 95, 88, 88,136, +176,176, 48,132,132,132,192, 96, 48, 32, 58, 58,154, 85,171,213, 7,106,187,231,184,186,186,238, 92,180,104,145, 25,195, 48, 16, + 8, 4, 16,137, 68, 96, 24, 6, 82,169,180, 42, 82,155,150,150,134, 97,195,134, 89,110,220,184,113,135, 86,171,245, 6,160,255, + 39,221, 20,202, 75, 74,152,224,187, 10, 7,107, 83,207,176,152,135, 59, 58,249, 87,220, 39, 98, 30,110,103,100,166,110,247,238, +133,169,205,219,201, 74,234,188,209,158, 8,206,159,163,215, 61,232,119,254,242,147, 97,179, 63,255, 72,226,209,208, 43,247,214, +163, 39, 30, 29, 13,179,105, 83, 25,160,212, 0, 69,165, 64, 76,170,128,243,104,232,149,251,224, 81,172,100,221,134,173, 94, 42, +165,174,178,137,176, 70, 50, 51, 51, 53, 55,120,126,232,236,239,229, 33,163,199, 8, 36, 18,153, 13, 20, 69,241,240,240,112,197, +187, 67, 59,225,199,223, 46,194,210,202, 26,142,142,142,160, 40,202,180, 30,217,167,238, 4,135, 78, 26,247,193,148,246,125,222, + 26,192, 94,184,120, 22,193, 23,142,221,219,185, 97,254, 49,189, 80, 97, 74,179,229, 38,110, 13,156,194,147,147,226,222,239,218, +253, 45,200, 76,228,222,128,127,181, 79,241,128,134, 24, 7, 26,238,224,144,118,108,207, 82,217,184, 15, 38,119,236,219,127, 48, +115,225,220, 9, 92, 56,181,251,238,146, 25, 13,207, 38,133,237, 19,223,185,159, 33, 27, 58, 98, 90,241,233,224,104,221, 59,203, + 61,227, 92, 26,183, 84, 3, 73,228,233, 84,249, 2, 41, 20,230, 50, 90,173, 91,131,190,125, 5,170,212, 84,145,153,163, 35, 83, +249,146,246,252, 75,245,203, 17, 44,154,166, 1,154,230,140,209, 52, 54, 45,106,181, 26, 92, 13,115, 31, 82,149,154,253,251, 11, + 84, 25, 25,162,188,194,194,134, 13, 27, 54,124, 97, 27,131,193,128,194,194,194,170, 79, 73, 73, 9,100, 50, 25,138, 12, 6, 71, + 99,210,217,181,121,243, 93,223,175, 91, 55,103,203,111,191, 85, 53,245, 40, 20, 10,148,149,149,161,180,180, 20, 52, 77,227,203, +185,115,165,115,151, 47,255,100,160, 80, 56, 19, 12, 99,116,121, 86,190,172,211, 52, 13,161, 80,136,212,212,212,170, 79, 90, 90, + 26,100, 50, 25,120,138,226, 72,141,124, 3, 6,171,178,147,123, 93,230,170,242,119,129, 64, 96, 92,184,183,226, 77,224, 77, 69, +176,148, 74,229,229,155, 55,111,182,235,219,183,175,240,206,157, 59,112,118,118,254, 67, 51,161, 80, 40, 4, 69, 81,144,203,229, + 56,119,238,156, 94,169, 84, 94,174,227, 34, 10, 14, 14, 14,110, 61,107,214, 44,209,132, 9, 19, 16, 25, 25,137,169, 83,167,162, +184,184, 24,101,101,101, 40, 44, 44,132, 90,173, 70,187,118,237, 32,147,201, 16, 31, 31,111, 80,171,213,117, 77, 85,192,231,229, +229,149,219,219,219, 59,191,252,143, 17, 35, 70, 56,254,252,243,207,170,152,152, 24, 67,167, 78,157, 44, 0,212,203,176,238,223, +191,191,234,156,197,198,198, 98,243,230,205, 85,253, 16, 30, 61,122,132,181,107,215,130,101,217, 87, 89,164,242, 65, 65, 65, 1, +163,215,235,225,227,227, 3, 87, 87, 87,168,213,106,108,220,184,145, 1,240,224,207,168,144,198, 68,176, 52, 26,205,145,241,227, +199,207,125,252,248,177,179, 88, 44,174, 12, 93,131,227, 56,232,245,122,164,164,164, 32, 58, 58, 26,241,241,241, 40, 40, 40, 0, +207,243,208,233,116,120,244,232, 81,137,193, 96, 56, 84,147,174,189,189,253,194,109,219,182, 57,153,152,152,252, 97, 98,221,202, +155, 78,101,211,171,131,131, 3,186,119,239,238,112,229,202,149,133,122,189,126,241,223,253, 70, 80, 57, 67, 59,207, 33,126,192, +251,179,185,105, 83, 39,137, 27, 7,232,227,226,163,239,179,161,215, 55, 6, 1,128,204,212,237, 94, 99,191, 86, 81, 55, 34,204, +184,183,199,125,217,210,191, 17, 4, 20, 15, 63,138, 71,193,203, 51,190, 87,190,163,157,189, 89,114,182,173,151,245,205, 19,191, + 95,254,105,222,236,143,238, 47, 90, 52,207, 65,163, 83,202,252, 61, 88, 26,120,102,174,238, 68,154,106, 86,172,248,232,254,234, +117,187,184,180, 4,253,204,251,137, 37, 53,142,240,125,222,180,208,116,150,204,201,107,102,150,103,227,158, 13,195,239,254, 74, +217, 89, 8, 96, 30, 48, 16,253,251,189,133, 75,193, 55,145,154,173, 70,197, 11, 64,173,211, 30, 4,120, 96,108,165, 38, 69, 67, + 54,118,226,228,174,253,251, 15,230,207,158,249,157, 57,113,120,247,205,253, 7,214, 30,162,197, 98,161,158,179,208, 81, 2, 77, + 9, 43,176,138, 84,150, 22, 1, 0, 68, 66,177, 69, 45,237, 3,238, 81,145, 49,126, 77,154,248, 59,141,157, 56,197,114, 64,255, + 33,252,217,179, 39,184, 67,123,119, 93, 61,180,169,217, 94,206, 80, 38,206, 78, 81, 73, 75, 21,134, 82, 94, 32,177, 42, 87,112, +170, 92,141,183,198,229,238, 8, 61,112,132, 60,157, 42,159, 3, 90,109, 70,121,122,186,179, 77,183,110,210,248,165, 75,229,142, +237,218,105, 40,138,170,211, 96, 9, 4, 2,240, 53,244,227,123, 89,179, 62, 6,139,167,168,106, 7, 31,177, 90,109,122,121,106, +170,179, 93,183,110,178,132,197,139,229,213, 69,237, 11, 11, 11, 81, 84, 84,244,130,193,170,184,215, 24,149,206, 53,159,127,126, +183,205,132, 9, 69,119,238,220,113,236,208,161, 3, 85, 86, 86, 86,101,174, 42,127,183,183,183,167,220, 27, 54, 52,191,156,153, +233, 85, 93, 31,172,234,202,211,152,188,211, 52, 93, 99,121, 18, 94, 35,130,101,172,193, 50,226,225,104, 48, 24, 12,112,112,112, + 64, 65, 65, 1, 56,142,171,241, 68,154,152,152, 84,182, 1,215, 58,146, 78,161, 80,108, 88,177, 98,197,244, 30, 61,122,216,249, +251,251, 35, 63, 63, 31, 14, 14, 14, 16, 8, 4, 85,233,170,212,139,136,136,192,193,131, 7,203, 20, 10,197,134, 58,242,189,254, +151, 95,126,249,100,192,128, 1, 54,246,246,246,176,182,182, 70,120,120, 56,172,172,172,160, 80, 40, 16, 27, 27, 11,115,115,115, + 80, 20, 5,173, 86,139,235,215,175, 43, 56,142, 91, 95,199,133,201,223,186,117, 75, 47,151,203,195, 11, 11, 11, 5, 5, 5, 5, +130,138,233, 25, 68,165,165,165,162,243,231,207,219, 89, 90, 90,170,174, 92,185,146,239,238,238, 46, 72, 78, 78, 22,232,116,186, + 58, 93, 22, 69, 81,248,252,243,207, 33, 22,139,161,213,106,177, 97,195, 6,204,158, 61, 27, 66,161, 16, 58,157, 14,223,125,247, + 29, 22, 44, 88, 80,101,152, 79,157, 58, 85,175, 10, 82,217,129, 84,175,215, 67,175,215,195, 96, 48,252,169, 21,210,200, 38,194, +156,167, 79,159, 14,108,211,166,205,197, 19, 39, 78,216, 90, 88, 88, 32, 43, 43, 11,249,249,249,200,205,205, 69, 94, 94, 30, 20, + 10, 5,180, 90, 45,172,172,172,144,154,154,138,139, 23, 47,150,149,151,151,191,133, 90, 70, 16, 10, 4,130,241, 93,187,118, 21, +190,156, 6,154,166,171,234,147, 72, 36,130, 68, 34, 65,102,102, 38,186,118,237, 42, 9, 9, 9, 25, 15,224,111,111,176, 42,103, +104,111,218, 52,192,126,224,224, 49,250,214,109,251,150,135, 60,184,148, 97,198, 81,137, 93,218, 5,238, 3,128,123, 97,106,243, + 27, 17,102, 92,139, 86,189,169,183, 7,170, 91,238,220,190, 69, 18, 21, 25,229,217, 36,176, 73,173, 51,250,219, 53,224,134,244, +237,217, 48,219,194,148, 18,174, 88,177,250,212,182,237,191,181,189,115,250,191,211, 52,172, 88,241,108,154,134,190, 61, 27, 50, + 81,177,113, 67,144,136,221,198,154,150,129, 3,251,134,110,219,113, 16,153,241,167, 92,214,207, 49,145,160, 48, 15,144,183, 66, +215,214,182,120,184, 53, 26, 97, 97, 97, 57, 28,199,213,222,148, 75,195, 61, 34, 34,202,175,105, 96, 19,167,113, 19, 39, 91, 14, + 24, 48, 4,103,207,158,196,158, 29, 91, 66, 58, 88, 5,109, 75,125, 80, 32,112,245,179, 22,203,173, 36, 98,161, 88, 38, 20, 11, +197, 5,122,195,179,232,186, 80, 44,178, 0, 70,214,250,208,153, 58,101,140,101,207, 62, 67,112,166, 66,115, 81,203, 17, 91, 61, +133, 1, 84,187, 57,107,166,121,122,120,122, 40, 85,185,101, 52, 45,209,107,180,156,249,154,173, 41,223, 39, 38,140, 79, 4,176, + 14,100, 20, 97, 37,225,123, 6, 12,104,251,105, 66,130,216,190,115,103,147,172,171, 87,229, 47, 55, 17, 86,103,176,132, 66, 33, + 64,211,140, 49,154,212,165, 75, 52, 0,136,197,226, 26, 95,236,197, 98, 49, 84, 42, 21, 24,138,170,118, 3, 49, 16,190,103,224, +192,118,159, 38, 36,136,108,122,244,144,219, 63,126,156,150,156,156,236, 27, 20, 20, 4,150,101, 95,136, 92, 85,126, 52, 26, 13, +116, 58, 29,100, 82,105,132, 49,233,204,189,126, 93,179, 96,226,196,197,159,124,252,241,166,131,135, 14,201, 44, 44, 44, 80, 86, + 86, 6,133, 66, 81,245,209,106,181,104,221,166,141,104,119,108,236, 88, 20, 23, 47, 49,166, 60, 29,123,244, 80,213,117, 79,174, + 48,172,164,137,176, 30,208,117, 69,176, 94,115,154,134,192,151, 52, 23,244,239,223, 95,147,148,148, 4, 55, 55,183, 42,147,242, +252, 49, 45, 44, 44, 96,101,101,133,168,168, 40,108,219,182, 77, 77, 81,212,130,218, 52,139,139,139, 21, 26,141,102,212,232,209, +163,213, 34,145, 8,126,126,126, 85,205, 58, 60,207, 87,245,189,138,136,136,192,248,241,227, 85, 26,141,102, 84, 53,115, 96,189, +160,153,154,154, 90,170, 84, 42,223, 31, 51,102,140, 42, 38, 38, 6, 93,186,116,193,227,199,143,161, 84, 42, 81, 94, 94,142,228, +228,100, 52,105,210, 4,122,189, 30, 71,142, 28, 81, 41,149,202,247, 83, 83, 83, 75,107,211, 84, 40, 20,131,190,253,246, 91,193, +217,179,103, 61, 93, 92, 92,154,182,105,211,198,191,103,207,158,222,195,134, 13,243, 24, 48, 96,128,115,227,198,141, 53,125,251, +246,181,239,223,191,191,189, 64, 32, 16, 37, 36, 36,100,243, 60,223,191, 54,205,231, 13, 64, 92, 92, 28,244,122,253, 31,250, 92, + 85,142, 38,100, 89,214,168,115, 84,157,201,174, 52, 86,149, 70,203,136, 72, 88, 96, 53,105,172,115, 39,137, 68, 82, 25,225,228, +141,208,124, 28, 29, 29,221,167, 99,199,142,161,227,199,143, 87,164,165,165, 65, 44, 22,195,213,213, 21, 30, 30, 30, 48, 53, 53, + 69, 81, 81, 17,142, 28, 57,162, 58,119,238, 92, 68, 89, 89, 89,119,252,113, 14,172,192,151,210,152, 92,221,205, 85, 32, 16,252, +193, 96, 85,174, 20, 64,211,116,114,125,202,243, 21,249,159,105, 78,249,104,172,205,219,131,134,152,159, 60,121, 82,182,121,243, +214,168, 46, 93, 38,239, 50,115,254,228,188,153,243, 39,231,219,117,248,112,223, 15,191,236,120,122,252,247,223, 77,222,126,123, +152,229,180,201, 99, 93, 64, 81,194,186, 52,229, 82,105,187,174,237, 27,151, 92,191,117,157, 89,189,110, 23,219,169,203,128,123, +155,126,248,229,208,166, 31,126, 57,212,169,203,128,123,171,215,237, 98,175,223,186,206,116,109,223,184, 68, 46,149,182, 51, 38, +157, 83,167,140,177,124,123,192, 16,156, 62,125,156,217,191,107,195,119, 39,175,233,186,141,152,171,201, 77,125, 26,204, 35,231, +107, 56, 72,110, 34, 45, 45,173,148, 97,152, 30,213,116,112,175, 86,115,218,228, 49,207,155,171,235, 81,201,248,109, 75,104, 40, +251,243,196,165,134,125, 23,142,171, 79,135,132,150,133, 60, 76, 43,206,127, 90,154,168, 84,148,233, 56,142, 3,207,177,130,101, +203, 64,213,118,142, 58,117,234,142, 43,151,246, 97,215,246, 95, 75, 57, 14,154,145, 71,142,176, 35,127, 94,202,123,120, 52,244, +216,187,119, 31, 53,112,208, 80, 75,158, 7, 55,104,232, 16,171,253,123,247, 83,141, 26, 53,106,232,229, 5,241,223,189, 46,189, + 41,205,165, 64,113, 89,106,106,200,131,141, 27,117,142,163, 70,217, 72, 28, 29, 45,192,113, 84, 93,125,176,170,137, 96,213,168, +233,104, 99,147,121,225,194, 5,248,249,249,193,213,213,245,133, 22, 25,145, 72, 4,119,119,119,216,219,219,227,226,197,139,224, +129,135,213,105,206, 7, 74, 74, 18, 19,175,221, 91,179, 70,235, 56, 98,132,117,203, 70,141, 30,110,218,184, 81,199,178,108, 85, +212,234,249,159,197,197,197, 96, 89, 22, 87,175, 92,209,149,171,213,219,106, 75,231,163, 31,127,212, 86,230,189,157, 70,163, 28, +218,186,245,170,177, 99,199,234,147,147,147,193,178, 44,158,143,100,229,229,229,193,220,220, 28,106,141,166,129,131,131,131,220, + 24,205,188,179,103,205, 80,199,125, 93, 32, 16,188,220, 68,248,103,156,247,127, 79, 4,139, 97, 24,184,185,185,189, 48,207, 72, +101,199,193,202,200,144,145,145, 43, 0, 64, 86, 86,214,110,134, 97, 46,140, 29, 59,118,113,203,150, 45,167,206,156, 57, 83,208, +168, 81, 35,148,150,150,194,218,218, 26,246,246,246, 72, 73, 73,193,209,163, 71,217,146,146,146, 95, 88,150, 93,158,151,151,151, +111,132,238, 85, 0, 3,223,122,235,173,131,159,124,242,137,101,183,110,221, 68,149, 15,192, 39, 79,158,224,236,217,179,250, 3, + 7, 14,148,105, 52,154, 81,198,204,226, 14, 0, 57, 57, 57, 23, 1,188, 51, 97,194,132,189,195,134, 13, 51,215,104, 52,162,164, +164, 36,232,116, 58, 48, 12,131,162,162, 34,253,181,107,215,202, 85, 42,213,152,138,109,235,210,123,148,147,147,211, 68,175,215, +143, 15, 13, 13,253,250,157,119,222,177,237,216,177,163,152, 97, 24,220,188,121, 51, 63, 40, 40,200,161,172,172, 76,127,235,214, +173, 66,141, 70,179, 32, 43, 43,203,168,165,114, 40,138, 66, 89, 89, 25,236,236,236,160,209,104,192,113, 28,116, 58, 29,204,205, +205,171,150, 55,226,121,254,217,197, 81,255, 38, 66, 48, 12, 35, 48, 24, 12, 24, 61,122, 52, 56,142,195,134, 13, 27,192, 48,140, +160,190, 58,102,102,102, 15, 35, 35, 35, 7, 54,109,218,180, 42, 61, 52, 77,131,166,105, 72,165, 82,216,217,217,193,214,214, 22, +151, 47, 95, 6, 77,211, 15,141,148, 13, 43, 40, 40,104,117,225,194,133,142, 97, 97, 97,227, 0,180,208,235,245, 13, 88,150,165, +104,154,206,102, 89, 54,188,188,188,124, 27,140, 92, 42, 39, 47, 47,239,235,241,227,199, 7,237,223,191,223, 76, 40, 20, 86,149, + 23, 77,211, 16,139,197,176,179,179,131, 76, 38,131,183,183, 55,212,106, 53, 22, 46, 92, 88,166, 82,169,190,254, 39,221, 16,186, +116,234,138, 43,231,247,201,119,237,220,163, 96, 89,208, 21, 83, 49, 84,225,223, 8,130,157,219,183, 72,100, 66,141,117,151, 78, + 93,141,106, 90,209,233,153,194, 81,147,126,113,171, 88, 42,231,235,228,148,212,245,251,126,249, 48, 17, 0,214,109,216,234,149, +150,160,159, 25, 21, 27, 55,100,243,214,107,237,116,122,198,168, 5,112,255,107, 90,246,150,130,135, 38, 43, 43,235, 30, 69,185, +122,118,249, 64,191,192,175, 33, 53, 56,183,144,203,164, 40,106, 70, 86, 86, 86,162,177,121,239,216,177, 27,174, 93,218,143, 93, + 59,246,150, 82, 28, 52,149,215,223, 17,128, 63,178, 52,132, 7, 66, 42, 55, 85, 78,123, 7,203, 22,124, 57,117,118,153,162,244, +251,205, 63,215,222,108,210,188, 69,123, 52,111,209, 30,211,103,124,101,217,164,169,191, 59, 0, 28, 57, 2,182,169,103,212,169, +197,203,151, 14, 94,190,120, 41,202, 84, 90, 84, 46,171, 19, 27, 19,117, 38, 49, 9, 58,242,120,250, 47,139, 25,230, 30,190,248, +162,177,166,180,212,190,243,220,185,118,194, 53,107,232,202, 23,232,151, 35, 88, 85,209,171,122,104,158, 15, 14, 62,243,197,156, + 57,153,107,215,172,233,187,250,219,111, 77, 2, 2, 2,144,147,147, 3,127,127,127,184,186,186,226,230,205,155,184,120,238,156, +178, 92,173, 94,224,228,228,180, 57, 59, 59,187, 90,205,165,192, 61,225,130, 5,222, 58,165,210,113,237,246,237, 79,123,246,238, +157,187,109,219,182, 6,253,250,245,163, 85, 42, 21, 74, 75, 75, 81, 90, 90, 10,173, 86, 11,177, 88,140,172,204, 76, 46, 35, 51, + 51, 60, 45, 45,109, 91,173,233,156, 53,171,177,170,168,200,190,243,220,185,118,134,194, 66,217,236,148,148, 12,122,231,206,111, +167, 78,153, 50,103,230,172, 89,210, 6, 13, 26, 80, 90,173,182,202,104, 25, 12, 6,152,152,152, 24, 24,134,177, 5,160, 50, 70, + 83,118,230, 12, 83, 88, 88, 8, 27, 27,155,170,105,151,104,154,134, 76, 38,131,181,181, 53,202,203,203,193,243, 60,153, 0,183, + 62, 45, 50, 53,253,195,207,207,239,161, 80, 40,108,240,124,136,176,186,181,237,158,255,157, 97,152,140,200,200,200,214, 47, 57, +220,106, 67,159,174,174,174, 94, 28,199,125,211,177, 99,199,119, 62,250,232, 35, 42, 36, 36, 4,193,193,193,124,102,102,230, 17, +154,166, 23,100,102,102, 38,214,242,102, 83,173,166,181,181,181,185,185,185,249,231,166,166,166,189, 43,167, 98,144,201,100, 79, +148, 74,229,101,133, 66,177,161,150,217,219,107,212,244,244,244,180,224, 56,238, 51, 83, 83,211, 62, 5, 5, 5, 45, 1,192,206, +206,238,177, 82,169,188, 68,211,244,198, 90, 22,144,174, 81,211,217,217,217,196,204,204,236,107, 27, 27,155,247, 63,250,232, 35, +219,144,144,144,236,199,143, 31,139,203,202,202,246, 49, 12, 83,219, 98,207,127,208, 12, 8, 8,120, 97, 45,194, 55,121,142, 0, +160,121,243,230,167, 7, 13, 26,244,246,251,239,191, 15,131,193,128, 95,126,249, 5, 23, 47, 94, 60,147,144,144, 48,176,142,183, +207, 23, 52, 29, 29, 29,237, 92, 93, 93,175,141, 25, 51,198, 99,232,208,161,114, 75, 75, 75, 8, 4, 2, 40,149, 74, 36, 38, 38, +226,201,147, 39,252,197,139, 23,203,163,162,162, 50,212,106,117,247,220,220,220, 2, 99,203,243, 53,223,146, 95,208, 20, 10,133, +221,220,220,220, 14, 44, 89,178,196,188, 79,159, 62, 38,182,182,182, 16, 10,133, 96, 24, 6,185,185,185,136,136,136,192,217,179, +103,149,135, 15, 31, 86, 22, 22, 22,142,198,115, 79,221,255,101, 58,223,180,102,229, 76,238, 47,212,173, 38, 1, 81, 49,201, 88, +245,194,119,158,152, 21, 21, 25,213,236,249,200,213,115, 51,185, 27,149,206, 1,157,173, 6,188, 51,180, 77,111, 0, 56,122,226, +193,229, 58, 22,123,126, 57,157,139,162, 34, 99, 94, 90,108,218, 63, 54, 58, 9, 43, 94, 57,239,158, 88, 28, 17, 17,245,130,102, + 96, 96,147,216,232,228,154,103,167,127, 57,208, 91,237,181, 89,217, 95,236,197, 45,211,162, 83,254,219, 4, 26,208, 16, 3,135, +188, 51,236,237,175,230,205,199, 55,171, 87,225,228,209,227,103,162, 83,170,150,243,249, 91,214,165, 63, 81,147, 90, 41, 20,182, +151, 59, 59,119,221,111,103, 55,255,194,165, 75,102,149,253,107, 43,251, 72,190, 60,224, 42, 40, 40, 40, 47, 44, 44,204,209, 24, +205,129, 63,252,160,215,152,155, 75, 87,255,242, 75, 55,149, 78,215,109,246,236,217,194,135, 15, 31,226,192,190,125,140, 58, 61, +125,111, 14,203,126, 86, 67,235,199, 31,242,190, 82, 36,106, 39,179,181,237,222,120,254,124,233,234,131, 7, 39,184, 54,104,224, + 56,112,208, 32,177, 80, 40,132, 82,169, 68, 86, 86, 22,110,221,188,169, 73, 77, 75,139,208,104, 52,195, 50, 50, 50,178,141,205, +251,192, 31,126,208, 91,121,121,193,204,209,145,187,113,235,150,213,220, 37, 75,166, 58, 58, 59, 91,118,238,210, 69, 36,151,203, + 81, 92, 92,140,180,180, 52,220,184,113, 35, 47, 49, 49,209, 5, 0,107,140,230,239, 79,158, 52,191,114,239,222,136, 47,190,248, + 66,226,239,239, 15,115,115,115,148,149,149, 33, 58, 58, 26,183,110,221,210, 30, 60,120,176, 84,169, 84, 78,205,200,200,248,253, + 79, 60,239,127,121,234, 19,168,160,254,228,180,212,121, 2, 28, 29, 29, 91,211, 52,189,168,162, 57,106, 69, 93,107,250,253,147, +110, 58, 78, 78, 78,238,214,214,214, 91,212,106, 53,175,213,106,167,228,228,228,164,253, 5,211, 41,108,221,186,245,207,121,121, +121, 29,121,158,135,165,165,229,237,200,200,200,143, 81,123, 91,124, 77,154, 2, 39, 39,167,142,166,166,166,237, 76, 77, 77,187, +233,245,250,128,138,126,120,209, 42,149, 42,196, 96, 48,220,203,201,201,185, 93,113, 67,248,127,230, 93, 0,160,143,139,139,203, +135, 28,199,249,208, 52,109, 85,209, 84, 90,194,243,124,124,113,113,241, 86, 0,151,254, 2,233,124, 99,154, 77, 60, 49,140,167, +224,255,194,205,129, 67,218,203,157,215, 43, 59,195,191,176, 29,143,152,168,100, 28,175, 71, 58,233,161,189,236,215, 2,207, 70, + 26,162,246,142,179, 47,154, 33, 35, 76, 75,189, 13,150, 7,198, 87,171,153,138, 61, 70,234,113,175,115,142,154,120,160, 27, 40, +116,228, 40,220,139, 73,198,149,127,226,189,238, 77,106,126, 3,216, 28,246,245,189, 77, 11,133, 78, 20, 69,209, 0, 64,209, 52, +199, 1, 44,104,154,121,190, 89,240,165, 23,202, 90, 53,245, 64, 51,177, 84,218,128,101, 24,199, 66,177,216,252,150,169,105, 43, + 45, 80,238,196,178,139,130,139,138, 98,235,155,206,165,128, 53,128, 38, 66,169,212,253,150, 92, 62,168,200,218,186, 85, 49,195, + 56, 2,224,164, 82,105,100,185, 74,181, 45, 61, 61,125,107, 53, 45, 21,117,166, 83, 36,149,186,177, 12,227, 72, 1, 60, 45, 20, +230, 93,144, 74,221,242,237,237,199,169,212,106, 15,169, 84,106, 0, 80,166,215,235,199,164,167,167, 7,215, 71, 51, 77, 32,104, + 18,110,110,222,133,181,176,176,213, 3,166,122,142,211,235, 13,134,116,173, 86,251, 68, 32, 16,124,159,153,153,153,240, 39,159, +247,127,148,193,250,179, 33,125, 8,136, 38,209, 36,154, 68,147,104, 18,205,255,129,166,131,131,131,220,201,201,201,189,226, 37, +241,239,152,247,191,133,193, 50,246, 35, 4,129, 64, 32, 16, 8,132,191, 61,121,121,121, 42, 84,211,231,138,240,255,161,182,209, + 47,245, 9,253,189,138,147,141, 32,154, 68,147,104, 18, 77,162, 73, 52,137,230,191, 78,179, 46,237,191,108,211, 35,105, 34, 36, +154, 68,147,104, 18, 77,162, 73, 52,137,230,223, 77,243, 47, 79,125,154, 8,105, 16,106,194,177,226,243,166,183, 37,252,179,235, +194,203,184, 86,124,234,179,189, 51, 41,114, 2,129, 64,248,123,243,255,232,131, 85,249,160,202,125, 67,219,189,233,125, 1, 96, + 21, 69,225,203,103,110, 21,223, 1,152,255, 58,219,242, 53,172,232,254, 50, 77,155, 54,181,163, 40,170,151,165,165,101, 51,133, + 66, 17,193,243,252,165, 39, 79,158, 20, 82, 70,174,255,228,230,230,230, 41,147,201, 38, 80, 20, 21, 80,113,220,104,141, 70,179, + 51, 61, 61, 61,249, 13,156, 55, 10,192,100,169, 84,250,174,149,149,149, 79,113,113,113,188, 78,167, 59, 12,224, 87,188,194,140, +211,206,206,206,190, 0,198,115, 28, 39,164,105,122,127,118,118,118,152,177,251, 58, 52, 29,114,136, 7, 26, 3,160, 57,138, 27, + 65,243,244, 17, 0, 28, 5, 60,205,139, 60,249,238, 27,174,175,245,169, 11, 47, 64,211,244,106,158,231,190, 0, 0,138,162,215, +176, 44,251, 85,109,219, 11, 4,130,117, 60,199,125, 6, 10, 60, 69,209,107, 56,142,155, 71,110, 81, 4, 2,129,240, 47,192,213, +213,181,191,179,179,243, 94,103,103,231,189,174,174,174,253,141,216, 37,176,154,135, 21, 75, 81, 96,129, 23,231,215,169,199,118, +117,133, 37,159,223,119,173,145, 89,123, 94,211,145,162,192,242, 21, 80, 20, 56, 7, 7,135, 45, 46, 46, 46, 27, 94,254, 56, 56, + 56,108,161, 40,112,207,109,203, 62,103,238, 2,159, 55, 88,117,125,130,130,130,108, 63,248,224,131,141,153,153,153,191,234,245, +250, 45,105,105,105,191,142, 28, 57,114,163,159,159,159,147, 49,121,111,212,168,209,208, 33, 67,223,185,118,253,206,195,216,184, +248,212,172,168,216,196,148, 11,151,111,220,235,219,127,192,229, 70,141, 26, 13,173,199, 57,162, 0, 76, 17, 10,133, 87,205,204, +204, 50,132, 66,225, 85, 0,211, 4, 2,193,239,171, 86,173, 74,137,140,140,204,189,121,243,102,201,181,107,215, 50, 39, 77,154, + 20, 79, 81,212, 41,252,113, 69,128,192,186,162, 56,206,206,206,203,211,211,211, 31,102,103,103, 63,106,208,160,193, 79, 47,105, + 84, 23,245,169,210,180,111, 58, 36, 60,175, 84,207,231,149,234,121,251,166, 67,248,231,126, 15,175,103,149,174,171, 46,253,161, + 46,152,154,154,250,189,100,228, 29,107,208,252,195,190, 54, 54, 54, 46, 60,207,211,222,222,222,109, 93, 93, 93,127,116,117,117, +253,209,219,219,187, 45,207,243,180,141,141,141,139, 76, 42,173,179, 46,189, 65,136, 38,209, 36,154, 68,243,175,166,249,151,231, + 79, 27, 69,200,243,252,184,248,248,120, 57,199,113,240,243,243, 27, 11,224, 92,125,162, 74, 20,133, 47, 57,238, 89, 52,135,166, +169,185, 61,122,244, 12, 50, 49, 49,121, 97,198, 98,181, 90, 45,185,122,245, 74, 47,142,227,169,138,237,190,228,121,108, 52, 50, + 26,229, 72, 81,248, 82,167,211,210, 34,145, 4, 2, 1, 61, 59, 48,176, 89,235,130,130,130, 96,150,101,127,169,102,242,202,186, +195, 54, 20,133,109,219,182, 5, 56, 58, 58,254, 97, 13,149,220,220, 92,241,160, 65, 3,235,165, 55,174, 89, 51,153, 38, 49,177, + 11, 45, 18,185,235, 13, 6, 59, 0, 16,137, 68,133, 50, 51, 51,183,133, 11, 22,200, 77, 77, 77,185,194,194, 66,148,149,149, 81, +211,167, 79,151, 77,159, 62,189, 15,128, 93,181,105, 54,104,208,160, 81, 96,243,150,159,238,220,177,163, 93,105, 81,145,102,235, +247,155, 67,181, 66,169,202, 35,192, 87,188,104,201, 74,203,229,139,231, 79,209,235,245, 17, 25, 25, 25, 73,117, 5, 93, 0, 28, +255,252,243,207,155, 14, 28, 56, 80,162, 80, 40,100, 42,149,170,225,222,189,123, 23,182,105,211,198, 44, 40, 40, 72,114,224,192, + 1,170,164,164, 4, 60,207,203,253,253,253,249,145, 35, 71,106, 14, 29, 58, 52, 29,192,166,250, 68,128, 88,150, 21, 85,118, 22, +100, 24, 70,130,103,209, 84,189, 49, 17, 35, 10,120,218,180,243, 72,128,130, 79,228,205,195,178,166, 93, 70,106,192, 35,158, 2, +158, 86,188, 8,124,196,113,156,103, 13, 81,165,228,204,204,204,223, 94,229,194,122,251,237,129, 0,176,229,209,163, 71,215,243, +243,243, 27,112, 28, 59,198,216,200, 22, 69, 81,148, 80, 40, 28, 15, 96,181, 90,173,158, 20, 28, 28,220, 18, 0,122,245,234, 37, + 6,240,144,231,249,142,248,243,231,165, 35, 16, 8, 4,194,255,136,250, 26, 44, 49, 0, 92,191,126, 29, 60,207, 75, 94,225,120, +212,243,198,229,179,207, 62,131,179,243,139,221, 77,178,179,179,113,237,218,213,215,201,211, 11, 15,169,175,191,254,218,178,176, +176,112,240,182,109,219,250, 2, 88,152,155,155,123,173,142,253,115,121, 30,223,209, 52, 53,151,162, 40, 72, 36,210,228, 41, 83, +166, 60,172,200,191,215,169, 83,167,228,131, 6, 13, 82, 81, 20,149, 8, 0, 18,137,212, 65, 32,160, 61,159, 57, 86,124, 87,155, + 17,124,199,204,204,143,231,249, 65, 83,215,173, 99, 91, 13, 24, 32,180,112,112, 16,128,166,145,159,150,102,187,229,167,159, 58, +198, 94,188, 40,117,242,247, 79,211, 73, 36, 37,113,113,113,112,118,118,134, 88, 44,174,243, 45, 65, 46,151, 79,250,124,230, 28, +251,210,162, 98,181, 65,161,208,155,113, 44, 99, 33, 19, 81,101,249,133, 37,201,233, 22,170, 73,211, 62, 21, 46,158, 55,107, 18, +128,175,234,144,154, 62,115,230,204,128,182,109,219,186, 30, 60,120,144, 42, 45, 45,133, 80, 40, 52,107,217,178, 37, 90,183,110, +205, 6, 7, 7, 83,141, 26, 53, 66, 96, 96, 32,110,222,188,137, 91,183,110, 81, 65, 65, 65,242,227,199,143,143, 53, 24, 12,155, +234, 50,213, 2, 1, 61,111,196,136,145,253,229,114,185, 65,173, 86,227,163,143, 62,130, 82,169, 68, 64, 64, 64,243,238,221,187, +223,209,106,181,162,147, 39, 79, 4,178, 44,135,218,204,117,101, 51, 96, 69,196,170, 25,120,196,231, 71,158,108, 94,249,127,142, +227, 60, 99, 99, 99,155,148,148,148,128,227,184,170, 53, 25, 1,160,107,215,174,245,169, 75,185, 60,143,239, 6, 13, 26, 56, 23, +160,208,179,103,207,194, 79, 63,253,148,141,142,142,238, 62,124,248,176,246, 79,159,198,215,246, 18,144, 75, 81,244, 26,154,166, +190,164, 40,138,154, 48, 97, 98,174,153,153,217, 48, 55, 55,183, 88,138,162,132, 98,177,184,242, 58, 16, 4, 4, 4,216, 7, 6, + 6, 78,179,182,182,206, 19,208,180, 3, 15,158,167, 40,122, 13,207,115,185,228, 22, 69, 32, 16, 8,255, 2,131, 69, 81, 84,193, +227,199,143,157, 53, 26, 13, 40,138, 50, 38, 26, 20,241,210, 3,231,103,154,166, 62,166, 40, 10,129,129,205,146, 54,108,216, 80, +221,122, 91,186,192,192,102, 73, 2, 1,221,136,231,121, 80, 20,189,249,165, 7, 77, 68, 93, 15, 68,137, 68,250, 37, 0, 56, 59, +187,228,158, 62,125,218, 48, 98,196, 8,172, 89,179, 70, 50,111,222,188,149, 52, 77,143,202,206,206,206,168, 37,157, 0, 48,223, +222,222,193,102,219,182,109, 1, 83,166, 76,121,152,149,149,245, 57, 0,184,184,184,108, 0,208,140,162,168,196,231,190,195,175, +191,254,218,122,210,164, 73,209,121,121,121,243,107,210,124,199,220,220,199,214,197,101,232,218,155, 55,121, 33,195, 80,165, 15, + 31,150,100,228,228,232,117, 44, 75,159, 75, 74,106, 55,106,226, 68,177,163,179, 51,127,242,215, 95, 61, 84, 34, 17,207,202,100, +165,145,145,145,188, 94,175,127, 82, 87,222, 41,138,242,183,182,178, 54,221,186,110,243, 67,123,169,128,178,115,115,161,196, 22, + 86, 66,218,204, 92,202, 11, 4,106, 15, 55, 23,115,138,162,252,235, 58, 71, 98,177,120,108,223,190,125,229, 7, 14, 28,160, 2, + 3, 3, 97,101,101,133,235,215,175,227,241,227,199, 40, 46, 46,166, 25,134, 65,155, 54,109,240,221,119,223,193,205,205, 13,165, +165,165, 72, 73, 73,177, 19,139,197,246, 6,131,161,166,242,124,193,240,126,249,229,151,112,112,112, 0,203,178,200,206,206, 70, +121,121, 57, 76, 77, 77, 97,105,105,137,172,172, 44,156, 60,121,194,152,186,100, 20, 29, 58,116, 80, 1, 72,121, 57,130, 85, 31, + 77, 87, 87,215,139,121,121,249, 93,122,244,232,129,146,146, 18,253,146, 37, 75,208,178,101, 75, 52,110,236, 91,103, 58, 89,150, +253,202,206,206,110,187,173,173,237,186, 79, 63,253,212,201,214,214, 22, 90,173,118, 65, 97, 97, 33,190,252,242, 75, 0, 64,235, +214,173,155,241, 60,127,102,210,164, 73,240,244,244,204, 44, 42, 42, 74,139,141,141,157,146,151,151, 23,241,220, 18, 71,127,198, +144,101,162, 73, 52,137, 38,209,252,171,105,254, 35, 13, 22,255,220,131,144, 71, 13, 77, 21, 60,207, 23,187,186,186, 58,155,152, +152,128,231,249,226,250, 30,140,227,184,233,182,182,182,121,243,231,207,239,236,235,235,171,155, 62,125,122, 68, 74, 74,202,130, +231,183,105,216,176,225,215, 63,254,248, 35,226,226,226, 82, 86,173, 90,117,179,176,176,112, 69, 61, 15, 51,143,231,177, 1, 0, +178,178,178, 10, 78,157, 58,213, 54, 36, 36,100,222,134, 13, 27,156,167, 79,159, 46,249,244,211, 79,167, 25, 17,201,129, 80, 40, + 84, 87,215, 44, 88, 29,142,142,142,122,161, 80, 88,211,250,129,152,210,170,149,148,231,184,161,223, 94,191,206,113, 25, 25,154, +179, 59,118, 96,205,173, 91, 83, 45,237,236,220,237,237,237,121,207, 6, 13,242, 77, 24, 38,183, 44, 63,159, 14,234,219, 87,116, + 97,215, 46, 15,169,167,103,212,145, 35, 71,202, 57,142,187,104, 68, 18,202,117, 6,131,214,212,205,197, 48,104, 72,223,102, 79, +238, 63,142, 51,177,177,161,155,181,105,217, 36, 38, 62,229, 17, 5,232,128,186, 23,143,181,180,180,244, 45, 40, 40, 64, 89, 89, + 25,236,237,237,177,113,227, 70, 56, 58, 58, 66,165, 82, 33, 50, 50,146,111,208,160, 1,117,227,198, 13,184,184,184, 32, 63, 63, + 31, 58,157, 14, 42,149, 42, 79,167,211,213,148,247, 92,154, 22,108,165,105,234, 35,138,162,224,227,211, 56,119,211,166, 77, 6, +158,231,225,239,239,143, 97,195,134,225,250,245,235,136,140,140,172,140, 50, 25, 60, 61, 27,229,210, 52,229,240,172,186,213, 30, + 17,172,163,174, 1, 64, 74,118,118,246,252, 87,217,223,213,213, 85,198,178,236, 84, 31, 31,159,129,239,189,247,158, 94, 44, 22, + 67,165, 82, 85,150,133,190, 95,191,126,133,131, 6, 13,180, 61,115,230, 76,173,233, 44, 40, 40, 72, 12, 8, 8,248,104,206,156, + 57,123, 54,111,222,108,245,213, 87, 95, 85, 45,194,205,178, 44, 56,142,171,138,178, 29, 63,126, 28,201,201,201,223,228,229,229, +145, 27, 23,129, 64,248, 55, 98,148, 23,249, 59, 70,176,254, 39,153, 17, 8, 4,191, 94,188,120,177,101,215,174, 93,133,189,122, +245, 10, 60,127,254,124, 96,102,102,102, 68,197, 67, 45,176, 87,175, 94,129, 14, 14, 14,216,184,113,163, 74, 32, 16,252,250,138, +135,169,122,216,101,103,103,223,161, 40,106,209,177, 99,199,182, 77,153, 50, 5,142,142,142, 45,179,178,178,254,167,133, 92, 28, + 23,215,105,194,242,229,156, 12, 16,156,217,179,135, 95,121,243,230,183,135, 14, 31, 22,123,121,121,129,231,121,164,164,164, 88, +252,178,109,155,205,168, 62,125, 34,115,148, 74, 42, 33, 39,135,141, 58,125,154, 46,164,233, 31, 18, 19, 19, 11,158, 95,172,185, + 58,244,122,253,131,180,212, 84,223, 78, 93, 58, 57, 95,127, 24, 21, 58,124,232,192, 30,180,144,166,147, 83,179, 31,216,219,218, +152,222,186,125,179, 76,175,215, 63,168, 43,157, 74,165, 50,153, 97, 24, 27,158,231,237,175, 93,187, 6, 59, 59, 59, 20, 23, 23, +195, 96, 48, 64,175,215,235, 84, 42,149, 44, 38, 38, 6, 90,173, 22, 90,173, 22, 22, 22, 22,120,242,228, 73, 46,195, 48, 87,106, +210,100, 89,118, 50,128,229, 60,207, 35, 46, 46, 46,179,162,233,179,177,149,149,213, 62,134, 97,144,149,149,133,107,215,174,141, +201,206,206,142,123,222,223, 84,252,204,124,229,171,244, 53, 38,131,179,183,183, 15, 20,139,197,243,103,204,152,225,216,180,105, + 83,104, 52, 26, 0,128,153,153, 25, 84, 42, 21, 44, 44, 44,208,177, 99,199,232, 21, 43, 86,232,121, 30, 19, 0,228,212,166, 23, + 29, 29,157,239,235,235, 59, 99,202,148, 41,203,124,125,125, 27,241, 60, 15, 31, 31, 31,244,237,219, 23,103,207,158,197,211,167, + 79,161, 84, 42,217,251,247,239, 31, 72, 79, 79, 63, 77,238,177, 4, 2,129,152,172,127, 78, 4, 11, 21, 25,250,211,167, 40,205, +203,203,203,143,137,137, 57,255,232,209,163,129,239,190,251, 46,174, 93,187, 54, 1,192, 44, 0,144, 74,165, 19,222,125,247, 93, + 60,122,244, 8, 49, 49, 49,231,243,242,242,242,223,196, 49, 41,138, 82,233,116,207, 2, 56, 50,153,204,164,158, 15,106,175,138, +166, 65,240, 60,239, 85,211,119,117, 68,195,220, 59, 12, 27, 70,151, 63,126, 92,178,252,194,133,207,247, 31, 59, 38,118,115,115, +131, 66,161,128, 64, 32,128,133,133, 5,213,119,192, 0,235,173,251,247, 59,185,153,155,223,154, 54,113, 98,236, 55,151, 46,169, +110,149,150, 26, 53,189,130, 70,163,217,246,245,138, 69, 61,246,236, 61,228,239,231,239, 99,125,246,226,213, 80, 91, 91, 11, 19, + 79, 79, 47,105,105, 73,137,246,199, 13,107,132, 74,165,114,123, 93, 58,106,181,250,120,112,112,240, 80, 55, 55, 55,251,136,136, + 8,232,116, 58,176, 44,139,222,189,123,131,231,121, 41, 0, 78, 40, 20, 34, 58, 58, 26,122,189, 62,239,233,211,167,153, 9, 9, + 9, 82, 0,171,235,144,126,193, 40,209, 52, 61,106,224,192,129, 96, 24, 6,125,251,246,197,137, 19, 39,222, 5,176,172,166,237, + 95, 35,130,213,208,217,217,121, 85,197, 49,141,234,220,238,228,228,212,217,219,219,123,217,218,181,223, 81,142,142,206, 96, 89, + 6, 6,131, 30,249,249,133, 80, 40, 20,104,210,164, 9,220,221,221,177,122,245,106, 0, 56, 81,151,185,170, 36, 46, 46, 46, 30, +192,232,137, 19, 39,138,175, 95,191,222, 90,163,209,172,239,211,167, 15, 66, 67, 67, 17, 22, 22,246,190,131,131, 67,158,155,155, + 27,227,234,234,250, 17, 69, 81, 22, 50,153,108,255,155, 40, 7, 2,129, 64,248,155,241, 63,241, 34,255,107,131, 85,107,198, 28, + 28, 28,228,197,133,121,159,121,122,122,202, 0, 64, 42, 22,244,180,181,181,253,166,176,176,176,188,190, 7, 85,169, 84,135,246, +238,221,251,214,247,223,127, 47, 30, 48, 96,128,247,177, 99,199,218, 2,192,128, 1, 3,188,205,205,205,177,119,239, 94,189, 74, +165, 58,244,166, 50,201,113, 92,223, 54,109,218,160,168,168, 8, 41, 41, 41, 15,235,179,239,169, 83,167,228, 0,154,213,245, 93, +109,232, 12, 6,123, 11,103,103, 97,238,245,235,122, 53,195,184,251,250,250, 66,161, 80, 64, 34,145, 64,171,213, 34, 57, 57, 25, + 98,177,152,122,154,148,100, 55,111,214,172, 27, 38,190,190,102,149, 35, 12,141, 33, 59, 59, 91, 13,224,211,149, 95,175,220,183, +118,205, 26,135,162,194,226, 56,177,196, 68, 35, 55,145,218,204,157,179,130,207,205,205,157, 93,177, 70, 85, 93,172,222,183,111, + 95,191,183,222,122, 43,220,205,205,205,161,160,160,192,169,172,172,140, 47, 42, 42,162, 42,234, 6, 5, 0,225,225,225, 72, 77, + 77,101, 88,150,189, 1, 96, 57,140,104,126,172, 10, 77,185,186, 90,183,109,219,182,159,173,173,109, 85, 83,100, 80, 80, 80, 63, + 0, 63,100,102,102, 22,191,201,202,125,241,226, 69, 57,199,113, 77, 0,160, 95,191,126,198,154,241,113,163, 70,141,162, 76, 76, + 76,193, 48, 12,164, 82, 49,164, 82, 41,204,204, 44, 96, 99, 99,131,212,212, 84,244,236,217,147, 75, 74, 74, 58, 41,151,203,119, +212, 55, 77, 87,175, 94, 29,220,182,109,219, 89,211,166, 77,131,193, 96,192,208,161, 67,145,153,153,185, 54, 57, 57,249,160,147, +147,211,152, 5, 11, 22,216,217,218,218,226,203, 47,191, 52, 1,176,148,220,107, 9, 4, 2, 49, 89,255, 12,131, 85,211, 67,177, +141,181,181,245,244,188,188, 60, 89,101,211, 11, 69, 81,178, 22,222,222,191,138,197,226,159,179,179,179,111,213,231,160, 37, 37, + 37,101, 73, 73, 73, 39,239,220,185, 51,114,248,240,225,184,116,233,210,120, 0, 24, 62,124, 56,238,220,185,131,164,164,164,147, + 37, 37, 37,101,111, 34,131, 46, 46, 46,239,116,239,222,125,124,219,182,109,113,234,212, 41,176, 44,123,165, 62,251, 63, 63, 98, +176,186, 81,132,149,223, 25,163, 37,121, 54,207, 17, 88,150,133, 64, 32,128, 70,163, 65,118,118, 54, 98, 99, 99, 97, 97, 97,129, +226,162, 34,202,194,198, 70,175,213,106,217,250,230, 51, 59, 59, 59,227,241,195,187, 9,106,141, 70,100,109,107,163, 50, 55,149, +240,101, 10, 5, 29, 30, 30,154,157,151,151,151, 98,172, 23,228,121,190,219,133, 11, 23, 22, 11, 4,130,119, 93, 93, 93, 49,114, +228, 72,170, 87,175, 94,144, 72, 36, 80,171,213, 40, 41, 41,169, 44,199, 70, 0, 96,103,103,231, 40,151,203,143,210, 52,157,155, +156,156, 60,169,174, 3,176, 44, 59,124,200,144, 33, 66,131,193,128, 21, 43, 86, 96,233,210,165,232,223,191,191,240,193,131, 7, +195, 1,252,246,166, 42, 54,207,243,120,235,173,183,170, 58,185,191,212,185,189, 90,186,117,235, 38, 76, 74, 74,242,114,117,117, + 69, 74, 74, 10,228,114, 57, 28, 29, 29, 97,101,101, 5, 59, 59, 59,124,255,253,247, 88,191,126,125,152, 64, 32,216,156,157,157, +157, 80,223, 52,185,187,187,127, 52,118,236,216,143, 70,142, 28, 9,133, 66,129, 59,119,238,160, 83,167, 78, 88,181,106,149,211, +205,155, 55,103,182,105,211, 6, 66,161, 16, 33, 33, 33, 96, 89, 54,157,220, 99, 9, 4, 2,225,239,111,176,168,151,156, 35, 0, +192,202,202,202, 66, 38,147, 77, 25, 48, 96, 64,231,161, 67,135,162,111,223,190, 47,236,188,113,227, 70,179,107,215,174,205,221, +180,105, 83, 55, 0,155,179,178,178,138,234, 17, 85, 58,190,111,223,190, 1, 29, 58,116,144,247,232,209,195, 11, 0,164, 82,169, +110,223,190,125, 42,142,227,142,191, 66, 94, 94,152,189,221,213,213,181,141, 64, 32,152,208,191,127,255, 54, 31,124,240, 1, 34, + 35, 35,177,119,239,222,104, 95, 95,223, 75,185,185,198,247,155,126,105,196,224, 6,252,113, 20,225,134,186,162, 89, 18,145, 40, +191, 44, 59,219, 86,232,236, 44, 49,149, 72,210, 31, 60,120,224,229,237,237, 77, 37, 37, 37, 33, 46, 46, 14,122,189, 30,143, 31, + 63,230,105, 32, 67, 96, 97, 65,167,134,135, 83, 98,145,168,222,115,118,153,136,185, 86, 11,191,156,236,163,209,168,155,148,150, +150, 50, 66,161, 80, 40, 21,177, 73,245,148,209,186,185,185, 13, 97, 89,214, 78,167,211, 25, 28, 29, 29, 69,151, 47, 95,134, 68, + 34,193,179,209,159,129,144, 72, 36, 58, 87, 87, 87, 5, 0,152,153,153,209,171, 86,173, 18,205,156, 57, 51,178, 46,225,160,160, + 32,145, 68, 34, 25,229,235,235,139,219,183,111, 35, 42, 42, 42,241,246,237,219, 94,173, 90,181,130,155,155,219, 40,103,103,231, +157,161,161,161,134, 55,101,176, 80,207, 78,238, 33, 33, 33,156,139,139, 11, 40,138,130, 64, 32,128, 74,165, 66, 82, 82, 18, 58, +118,236,136,237,219,183, 99,195,134, 13,187,115,114,114,118,188, 74,122, 38, 78,156, 40,110,222,188,249,184,145, 35, 71, 34, 49, + 49, 17,171, 87,175, 46,204,201,201,185,122,225,194,133,225,211,166, 77, 19,116,234,212, 9, 5, 5, 5,216,185,115, 39, 19, 26, + 26,186, 99,192,128, 1,123,182,108,217, 66,238, 80, 4, 2,225,223, 22,185,170,238,247,127, 86, 4,203,197,197,229,109,153, 76, +246,225,168, 81,163, 4,126,126,126,200,205,205,133,185,169, 84, 71, 81,148, 4, 0,204, 77,101, 58,131,193,128,105,211,166,161, +101,203,150,109,231,206,157,219,134,101,217,221,185,185,185, 71,141, 57,112, 94, 94,158,138,166,233, 35, 31,127,252,241,234,199, +143, 67, 27, 1,192,253,251,247,147,178,178,178,230, 25,217,156,245, 60,149,147, 83, 82, 50,153, 73,184,143,143, 79, 97,235,214, +173,173,135, 13, 27, 6, 59, 59, 59,132,134,134, 98,213,170, 85,145, 26,141,102,122, 72, 72, 8,243,191, 46,100,134, 97,210,238, +157, 62,109,253,214,152, 49,214, 43, 70,141,250,241,131,137, 19,191,251,102,213, 42,177,171,171, 43,101, 97, 97,129,176,176, 48, +126,235,111,191,233, 15,174, 89,243,163,192,196, 68,124,253,196, 9, 9,107, 48,196,215,231, 24,174,174,174,221,218,180,107, 27, +184,246,251, 77, 80,171,202,113,255,206,105, 20, 23, 21,224,215,223,142, 53,115,117,117,237,150,153,153, 25, 82,143,244,122, 29, + 57,114,228,153, 57,148, 72,176,124,249,114,184,184,184,192,194,194, 2,229,229,229,152, 60,121,178,228,179,207, 62, 3, 0, 68, + 69, 69,193,204,204,204,216, 40, 91,143, 41, 83,166, 88, 24, 12, 6,156, 59,119, 78,203,178,236,167,151, 46, 93, 58,222,162, 69, + 11,105,215,174, 93, 45,246,236,217,211, 19,192,133,255,227,245,192,241, 60,159,118,241,226, 69,247,145, 35, 71, 66, 44, 22,163, +184,184, 24,230,230,230, 88,187,118, 45,175,215,235,143,190,170,112,102,102,166,196,206,206, 78,194,178, 44,142, 28, 57,130,178, +178,178, 73, 25, 25, 25, 57,222,222,222,199,231,206,157, 59,219,199,199,199, 51, 62, 62, 62,149,101,217, 53,153,153,153,201, 0, + 64, 12, 22,129, 64, 32,252, 3, 13, 22,128,247,207,159, 63, 47,224, 56, 14, 91,182,108,193,163, 71,143,120, 51, 11,155,207,205, + 45,169, 93, 22, 22, 22,108, 73, 73,201,251,223,125,247,221,208,197,139, 23, 83, 93,186,116,193,157, 59,119,168, 70,141, 26, 13, + 7,240,252, 67, 40, 16,181,204,149, 81, 90, 90,250, 32, 55, 55,167,209,115,179,182, 55,146, 74,101,117,141,118,123, 89,243,229, +201, 44, 91,124,253,245,215, 17, 14, 14, 14,134,136,136, 8,108,222,188,153,123,244,232,209, 25, 0,107,243,242,242,212, 70,106, +190, 9,170, 52,173,125,125,111,109,159, 63, 63,168,195,224,193,124,207,119,223,229,214, 73, 36,115, 22, 45, 89,242,105, 81, 89, +153, 27,199,113,176,181,180, 76,219,253,245,215,223,119,234,210, 69,253,228,238, 93,211,155,191,255,110,226,216,176,225,141,250, +164, 51, 51, 51, 51,228,218,181, 27,216,249,219,247,208,235,181,200,206, 76, 5, 0, 20, 20,150,162, 14,115,245, 7, 77,154,166, + 75, 38, 76,152, 32,215,233,116,212,168, 81,163, 68,121,121,121,240,246,246, 6, 0,148,149,149,225,204,153, 51,240,247,127, 54, +173,214,147, 39, 79,170,126,175, 43,157,114,185,252,221,206,157, 59, 35, 37, 37, 5,145,145,145,103,243,242,242,242,163,162,162, +206,166,166,166, 14,111,221,186, 53,142, 31, 63, 62,178, 22,131, 85,175,115, 84, 57,177,104, 61,235, 18, 24,134,153,123,252,248, +241, 41,119,238,220,233, 54,107,214, 44,170, 87,175, 94, 0, 0,165, 82,201, 26,217,223,176,198,116, 86, 54, 15,115, 28, 7, 55, + 55, 55, 37, 0, 36, 36, 36, 36, 3,248,228, 85, 53,223, 68,253, 36,154, 68,147,104, 18,205,191,136,230,191,198, 96, 49, 28,199, +225,218,181,107, 56,118,236, 24,171,211,233,230,231,228,228,196, 86, 60,204, 1, 96,199,227,199,143,111, 12, 31, 62,124, 93, 92, + 92,156, 32, 42, 42, 10, 60,207,215,171,239,144, 70,163, 49,188, 60, 3,129, 70,163,121,237, 38,162,237,219,183, 35, 39, 39, 71, +151,154,154,250,187, 94,175,223, 91, 88, 88,152,253,170, 90,111, 98, 20,225,175,143, 30,105,223, 49, 55, 63, 49,175, 71,143,225, + 43,206,159,151,245,159, 56, 81,215,189, 95,191,111,160,211,233, 68, 34, 17, 7, 19, 19,129,192,196, 68, 28,117,247,174,233,218, +169, 83,109, 41,154, 62,249, 83, 84,148,186,190, 17,172,238,221,187, 96,194,135, 51,161, 86,151,227,238,237,211, 40, 41, 42,192, +157, 7,113,208,234, 81,175, 8,150, 80, 40,116, 55, 24, 12, 82,134, 97, 50,121,158,199,184,113,227,192,178, 44, 52, 26, 13, 20, + 10, 5,138,138,138, 52, 51,102,204,160, 43, 76, 19,222,122,235, 45,163,102,245,247,242,242,114, 23, 10,133,184,112,225, 2, 4, + 2,193,209,103,134, 88,112, 52, 56, 56,120,248,168, 81,163,224,234,234,234,155,152,152, 88,103,231,198,170,197,158, 41,248, 0, + 0, 40,248,216, 55, 29, 18, 94,185,216, 51, 77,211,201, 45, 91,182, 52,170,223,213,203,228,231,231,231,225, 89,199,253,195, 95, +126,249,229,180,182,109,219, 6, 46, 91,182, 12, 0, 4,175, 29, 30,227, 56, 48, 12,243, 90, 83, 72, 16, 8, 4, 2,225,111,110, +176, 40,138, 58,208,163, 71,143,209, 60,207, 11,104,154,222, 91,105,174,158, 39, 35, 35, 35,201,213,213,117,139,167,167,231,123, + 21,145,143,253,245, 60,126, 46,207,227, 91,154,166,158, 95,123, 46,247, 21, 52,190,171,208,160,132, 66,209,222,123,247,238,125, +149,149,149,149, 3,128,125,221, 2,122, 19,163, 8, 1,224,168, 66, 17,255,142,153,217,201,105, 45, 90, 12, 26,250,233,167,124, +235, 62,125, 44,157, 26, 54,100, 24,131,129, 77, 12, 15,167,110, 30, 63, 46,190,249,251,239, 38, 2,138, 58,117, 84,169,140,173, +111, 58, 51, 51, 51, 67,174, 92, 13,185, 56, 98,248,128,183,188, 60, 93, 0, 0,137,201, 89, 40, 40, 42,189, 88, 31,115, 5, 0, +169,169,169, 90, 0, 90, 39, 39,167,225,135, 14, 29, 58, 66, 81, 20,245,252,114, 51, 0,180, 66,161,176, 49, 0, 40, 20, 10,143, +227,199,143,239, 19, 10,133, 25,117,233, 70, 69, 69, 29, 88,178,100,201,152,164,164,164,223, 51, 51, 51, 19, 42,210,157,112,227, +198,141,205, 89, 89, 89, 99, 82, 83, 83,247,192,136,145, 35, 60,208, 56,242,230,225,102, 0,208,180,243, 72, 68,222, 60, 44, 3, +208,172,105,231,145,149,101,241,218,157,229, 43,230,229,250,236,254,253,251, 29,250,246,237, 59,129,231,249,188,215,209,147,201, +100, 6,173, 86,203,176, 44, 43,212,235,245,188, 76, 38, 51,144,219, 15,129, 64, 32,252,115,249,179, 59,145, 25, 27, 66,124,161, +131,250, 43,106,214, 71,163, 78, 77,103,103,231,233, 20, 69,121, 25, 43,192,243,124, 98,118,118,246,143,213,105,242,252,179,230, + 75,160,230,197,158,121,131, 33, 85,230,229,117, 99,247,147, 39,154,106,204, 46, 87,159,242,244,241,241,225,227,227,227,141, 61, +191,181,106,186,186,186,202,132, 66,225,203, 17, 42,109,133, 9,123,190, 30, 9, 0, 48,245, 60,239,175,116,142,170, 34, 88, 0, +205, 81,220, 8,154,167,143, 0,224, 42, 35, 88,127, 66,253,124,165,116, 62,127,222, 1,192,203,203,235, 99,127,127,255, 49,225, +225,225,135,210,211,211, 55,214,121,113,214,243,188,255, 73,215, 38,209, 36,154, 68,147,104,254,175, 52,235,122,206,182, 1, 96, + 95,241,103,229, 60,153,246, 47,253,174, 3,240,252, 51,171,242,239,124,138,162, 30, 60,167, 81,245,189, 17,251, 2, 64, 1,128, +112,212, 99, 90,162, 63,155, 64,162, 73, 52,137,230,127,233,214,173,155,144,148, 39,209, 36,154, 68,147,104,214,223, 92,241, 60, +255, 54,158,181,114,240, 60,207,191, 93,249,247,203,191, 87,110,243,252,223, 21, 63,241,242,118,198,236, 11,128,159, 55,111,222, +124,158,231,123,240, 60, 15, 99, 63, 52, 8, 4,194,255,140,255,199, 40, 86, 2,129, 64,248, 7, 96, 79, 81,212,105,158,231, 7, +242, 60, 63,144,162,168,211,181,152,177,129,207,255,172,141,234,116, 42,143,241,252,223,171, 87,175,254, 6, 64,189, 86,130, 17, +214,226, 66,235, 19,250, 11,124,133,255, 69, 16, 77,162, 73, 52,137, 38,209, 36,154, 68,243, 95,167,249,166,246,127,109,170, 51, +107,149, 70,238,249,191,231,205,155,247, 21,254, 66,205,131,117,157, 24,162, 73, 52,137, 38,209, 36,154, 68,147,104, 18, 77, 99, +140, 80,141, 77,122,181, 53, 23,190,252,187, 49, 77,132,117,108,107,116, 19,161, 16, 4, 2,129, 64, 32, 16, 8,127,109,242,159, +143, 54, 85, 68,152,216,121,243,230,125, 85,249, 93, 69,148, 73, 11, 64,250,242,206, 47,237, 87, 43,245,217,182, 54,136,193,170, +129, 22,222,244, 10,119,119,135,214, 21,133, 12,190, 98,138, 2,174, 98, 22, 1,190,114, 50, 35,158, 3,207,241,200,202, 46,121, +244, 36, 9,139,106,112,222,117,246,117,235,210,197,201, 70,160, 46, 95,207,114,108, 39, 0,160, 64, 95, 23,137,172,102, 5,223, +207, 44,121,110, 52, 89,173,248,123, 33, 64, 38,196, 23, 28,135,230, 20, 5, 80, 20,194, 53, 12,214,196, 36, 34,250, 13, 20, 9, +213,180, 17, 38, 75,164,242, 81,150, 86,214, 62,197,133, 5, 79,245,122,237,225,168,100,252,138, 87, 88,148,211,207, 11, 45,193, + 98, 46,203, 65, 36,164,177, 62, 38, 5, 55, 73,173, 35, 16, 8,255,163,104,200,107,245, 63,174,238,158,204,243, 60,245,154,154, +100,130,188,218,203,231, 65, 69, 71,247, 74,211,147, 15,224,201,170, 85,171,138, 87,173, 90,245,252,119, 97, 0, 90, 84,108,151, + 95,141, 81,210, 85,252,173,171,102, 27,157, 49,219,254, 41, 6,171, 73, 3, 76, 3,143,165,160,192, 3, 88, 22,149,129,205,245, +218,223, 27,189,101, 66,193, 86,240, 16,104, 12,236,108,158,197,245,106, 11, 82,128,174, 50,145, 96, 29, 40,112, 26,134,157, 20, +149,128,203,198, 30,163,169, 15,250, 9, 41,122, 15,199,241, 34,150,227,119,129,195,105, 51, 3,110,221,205,132,166, 62,105,117, +119,119,104,125,226,114,246, 91, 87, 15,124,138,118, 45,125,192,115, 6,128,103, 32,247,255, 2,193,187,199,161, 93, 51,247,103, +223,113, 6,152, 5,173, 67,255,206,150,252,147,164, 87, 91,159,186, 75, 23, 39, 27, 19,142, 11,223,188,109,143,147,187, 79, 7, +138,231,180,136,127,124,238,253,207,190, 92,208,163, 87, 91,215,230, 0,234, 92,227,177,185, 15, 62,116,119,247,251, 98,230,130, +239,105, 23,151, 6,102, 28,163, 99,178,211,163, 90,253,240,253,146,163, 98, 58,117, 93,120, 60,182, 26, 91,143,155,120, 98,138, + 80, 36, 25,105, 34, 55,245, 81,169, 20,241,172,193,112,152, 22, 8,251,173,249,110, 67,203,110, 61,250,155,113,218, 28,218,192, + 80, 77, 14, 30,218,239,241,227,207,155, 7, 68, 36,178,131, 1,112,245,202, 52,139,207,159,156,156, 60, 66, 36, 20, 80,254,111, +255,102, 10, 48,125,235,173, 1,160,169, 39,154,242,117,207,132, 14, 10,248, 41, 50, 25,145,175,114,126,252, 61,177,141, 2,124, + 1, 28,161,120, 28,136, 74, 65, 30,185,221, 17, 8,255, 44, 92, 93, 93,175,102,102,102,246,120,195,154,237, 50, 51, 51,239,145, +210,125,115, 38,171,154,175,239, 87,243,221,131, 63, 43, 13,245,153, 40,186,190, 17,172,149,145,241,233,214,224,244,104,234,235, +181, 2,168,159,193,146, 9, 5,187, 30,132,231, 58,129,215,227,183,239, 63, 62,168, 51, 0, 12,163, 7,203, 24,192, 50,134,103, +191,179, 6,112,140, 6, 75,214, 95, 3, 24, 5, 90,183,108,188, 11, 96,157,141, 61,134, 8,244,158, 71,183, 46,218, 80, 76, 41, + 14,238, 92, 53, 35, 53,171,124,198,229,251, 89, 5, 77, 68,234,249, 81, 41,216, 81,159,135,248,213, 3,159, 97,239,209,179, 25, + 27,127, 59, 20,195,129,135,181,153,212,111,236,240, 72,183,221, 71,175,166,111,216,174,137,225, 57, 30, 86,230, 82,191,241,131, +227,221, 95,231,132, 9,212,229,235,127,254,109,135,147,187,135, 7,101, 72, 94, 9, 24,180,112,115, 31, 32, 88, 48,243, 67,231, +101,223,253,244, 61,128,241,181, 70,131, 26,161, 73, 67,175,128,217,187, 14,222,118, 87,150,231,233,174,156,249, 42,129,226,121, +131,157,157,191,120,249,202,181, 38, 11,231,207,156,165, 99, 51,238,197, 38, 33,170,142,164,208, 1,158, 56,249,205, 55,107,154, +247,234, 51,200,140,213,229, 11, 52,229, 10,223,173, 59,182, 45,245,111,218, 86,222, 57,168,129, 56,255,214, 84, 74,165, 40,130, +158, 55,145,246,108,221,203, 66, 53,246, 93,195,182,221,251,167, 71, 37, 97, 83,189,252, 21,243,223,185, 70,244, 12,100, 0, 68, +120,133, 14,132, 60,240,201,227, 59, 87,167, 48,197, 15, 0, 78, 95, 97,122,245, 0,103, 0,255,220,207,246,239,237, 0,128,169, +175,114,126,104, 10,111, 93,190,252,192, 57, 55, 55,187,205,250,245,223,204,231,169, 7,231, 64, 97, 79,116, 18, 66, 94,197, 20, + 18, 8,132,191, 38, 46, 46, 46,108, 86, 86,150,224, 77,106,186,186,186, 14,200,204,204, 60,251, 58, 26,206,206,206, 95, 0,248, +176,226,207,173,217,217,217,107, 94, 55, 93,173, 91,183,110,192,243,188, 83,133,113,201,121,248,240, 97, 6,169, 1,111,150,250, + 26, 44, 25,120, 14,184, 53, 20,160,234, 55, 92,177,226, 97, 40, 3, 37, 0, 12,229, 24, 50,176, 55,236,108,157, 1, 86, 9,176, +106,128, 81, 1,236,179, 79, 65,126, 42,192, 40,129,252,115, 96,120, 94, 90,239, 92, 25, 74,129,188,195,120,171,131, 59,172,204, +101,248,108,116, 19,187, 45, 39,226,182,110, 61, 17,219, 59, 42, 9,163,140,117,169,237,130,124,176,241, 55,101,204,169,107,249, +125, 1, 96, 64, 55,219,243,237,154,121,184,109,216,174,137, 57,123,189,184, 31, 0,244,235,100,113,174,109,160,147, 59,247, 26, +203,159,176, 28,219,217,221, 59,136, 98,210,190, 3, 77, 23,163,188,188, 0,233,137, 59, 97,231,216,151,102, 56,174,107, 93,251, +155, 8, 49,239,179, 47, 86, 11,149,229,185, 58,158,201,227, 28,205, 10,196, 34, 80, 2, 78,121, 67,167,206, 41, 41,255,252,147, +177,204,236,121,223,204, 3, 48,166, 54,157, 38,141, 48,125,221,119, 27,154,117,106,235,231,144,115,243, 51,170,188, 52, 23, 6, +222, 68, 58,184, 91, 39, 88,123, 52,225,114, 31,175,163,164,206,189, 97,237,233,133,140, 39,123,145, 26,126,140,234,210,118,184, +116,215, 62,241, 88, 64, 95,173,193,242,113, 66,231,190,111,181, 61,232,229,225,226,204,243, 28, 56,142, 3,207,115,208,232, 88, +204,255, 49, 1, 74, 53,131,129,189,219,119,178,181, 20,104,105, 0, 60,207, 33, 61,171, 80,117,229,118, 76,175,196, 44,212,249, +230, 71, 1, 63,181,232,208,163,115,248,253, 59,254,250,172,211,104, 51,108, 85, 12,133,255, 54, 55,242, 64,231,208,224, 29,254, +192,142, 87,126,105,226,121,176,105,119, 87,163, 65,208,100,193,175, 59,206,219,151, 22,102,142, 63,118,232,231, 17, 63,111,249, +117,111, 76,210,171,153, 54, 2,129,240,215, 35, 43, 43,235,141,155,172,219,183,111,103,189,142,201,106,221,186,117,215,172,172, +172,239,178,178,178, 42, 77,224,119,109,219,182, 93, 92, 67, 52,165,148,231,249, 49, 15, 31, 62,188, 94,155,230,204,153, 51, 93, +110,221,186,229,249,240,225, 67, 0, 64,155, 54,109, 60, 91,183,110,237, 89,221,182,114,185,156,109,209,162, 69,202,250,245,235, +179, 72, 13,249,115, 13, 86, 76,206,141,207,131,116, 69, 42, 0,136, 49, 98,251, 23,134, 90,106, 12,236,234,157, 27,198,175,110, +234,107,141, 50,133, 14,151,110,164, 84, 68,176, 24,176,172,161,234,103,223, 14,118,232,200, 76,197,166, 3,177, 96, 88,110, 85, +109,154, 47,163,231,184,247, 90,118,125,247, 16,199,243, 18,185,156, 46,245,118,179,117,152, 61,182, 5,253,217,232,166, 80,107, +152,119,247,157, 75,184, 18,157,130,223,140,210,228,152,106,140, 87, 53,223,113,108,157,121,175,137, 22,126, 38,237,134,245,239, + 98, 1, 67, 17, 88,101, 50,116, 44,135,236,108, 37,146,178,196,176,228,114,141,210,228, 56, 52,119,114,114,150,223,190, 56, 55, +217,193,188, 88,108,107,194,138,197, 20,199,211, 6, 94,160,211,197,104,172, 93,122,139, 56, 14,205,235, 58, 71, 38, 38,230,227, +186,244,120,219, 50, 45,248, 67,202,196,173, 63, 28, 26, 53, 64,242,163,157,200,139, 56,141,194,188, 84,202,146, 47,134,188,177, + 23,250, 15, 31,141,239,166,183, 70, 89, 89, 57,168,252, 68, 75,137, 68,106, 5,232,171,213,228,105,140, 89,247,237,215,206, 66, + 33,253,172, 60,121, 6,224, 13, 0,111,128,162, 92, 11,157, 78, 7,153,152,135,169,140, 7, 42,154, 97, 89, 86, 39,111,222,107, +222,199, 0,123,175,174,188, 71, 38, 35,178,137, 39,110,130,103,252,121, 86, 13, 10,184, 25,149,252, 95,211,211,212, 19, 77, 91, +245,154,248, 9, 5,252,244, 42,231, 40,176, 33, 6,182,246, 55, 51, 53, 97, 98,144,113,109, 6, 18, 88, 25,239,216,236, 67,140, + 30, 51, 93,254,235,214, 45,131, 0,126, 26, 94,236,131,246,103, 12, 47, 38,154, 68,243,111,169,105, 97, 97,209,168, 97,195,134, +139, 13, 6, 67, 87,177, 88,236,168,215,235,193,113, 92,142, 68, 34,185,145,146,146,178,188,172,172, 44,233,175,150,247,115,231, +206,213,199,100,213,169, 41, 18,137,112,246,236,217,248,122,152,172, 23, 52,105,154,222,115,228,200, 17, 28, 58,116, 8, 0,112, +245,234, 85, 52,110,220,216,180,186, 29,211,211,211, 77,223,121,231,157, 61, 0,220,106,211,124,250,244,105,163,175,191,254, 26, + 71,142, 28, 1, 0,236,222,189, 27,190,190,190,213, 38, 38, 44, 44, 76,176,112,225,194, 70, 0,178,254, 7,231,232, 31,107,176, +120,212,189,180, 74,162,147,185, 40, 8, 6, 3, 0, 36,214,247, 96,209,137,248,118,227,182,243,253,130,143,253,212, 85, 38,161, +177,116,253,236,244,252,124, 69,123,161,224, 89, 51, 11,195,130,182,182,146,220, 89, 53,163,133,123,113,169, 6,191,135,100, 94, +143, 74, 66,189, 66,161, 81,137,184, 4,112, 86, 21,177, 33, 40,203,242,124,199, 47,184,116,224,192,183,253,154,207, 28,211, 28, + 39,175,165,204, 4,152, 58,215,170,227, 57, 14, 60,207, 84,117,106,175,248,178,162,201,233,191,223,113, 60, 15,240, 6,240,245, +236,231,189,108,217, 72,225,201, 3,199,251,153, 74,133, 63, 76,253,104,138,133,161, 48, 10,165, 37, 44,114, 10,148, 72,205,183, + 2,107,226,141,184,200,123,172,128,166,235,236,127, 70,209, 40,227, 13, 74,115,107, 19, 19,186, 73,219,143,157, 75, 35,190, 42, +147, 10, 12, 2,171,150, 95,155,231, 62, 89,151,198,104,243,202, 41,250, 69, 7, 84,237,205,208,210,178,177, 86,145, 34, 40, 45, + 41,132, 85,179, 38,232, 63,120, 16,150, 78, 10,128, 66,161, 68,126,225,109,222,199,195,146,210,132,238,195,130,113,254, 40, 44, +200,134,206, 0,208,101,154, 34,141, 78, 83, 94,115, 36, 16,191,126, 62,251,203,247, 60, 26,216,155, 86, 14, 22,224, 57, 22, 45, + 2,189,208,167, 71, 59, 92,186,115, 27, 15, 66,227,192,241, 92,197, 96, 2, 22, 25,121, 37,185, 26, 61,187,179, 94,209, 81,142, +121, 22, 9,173,198,128,225, 21,154, 6, 3, 3, 33,103,149, 88,212, 38,192,124,210,220,113, 30,230,230, 18, 10, 26, 19, 22, 26, +141, 1,138,152, 31, 97,219,160, 25,228, 50, 25, 21, 20,164, 22,134,134,130,172, 43, 72, 32, 60,199,136, 17, 35,100,185,185,185, +215,220,220,220,154,244,238,221, 91,222,181,107, 87, 40,149, 74, 92,184,112, 1, 42,149,202,195,205,205,205,227,226,197,139,195, + 83, 83, 83,163,220,220,220,186, 31, 57,114, 68, 83,223, 99, 84,118, 42,127,211,157,195, 37, 18, 9,238,220,185,243, 70, 35, 89, + 18,137, 4,247,239,223,143,127,149, 72,150, 82,169, 20, 59, 57, 57,193,214,214, 22, 44,203, 66,169, 84,226,196,137, 19, 40, 43, + 43, 3,199,113, 48, 49, 49,193,186,115,165,208,196, 30,193,214, 31,190, 70,105,105,169,184, 46,205,130,130, 2,202,207,207, 15, + 90,173, 22, 12,195, 64,163,209,224,242,229,203, 85,127, 11,133, 66,172, 56,146, 11,109,220, 1,236,250,117, 29, 10, 10, 10,168, +255, 97,245, 49,198,139,252,173, 12, 86,101,134,254,244,140,177, 44, 51,127,203,206, 3,119,230,207, 24,133,233,227,122,185, 45, +223,116,188,119,116, 18,118, 1, 64, 64, 35,140, 31, 59,192,199,221,202, 84,132,101,191, 60, 4,192,207,127,221,227, 69,166, 34, +174,137, 23, 55,243,248,181,212,107, 95, 77, 10,130,151,155, 69,227, 98,125,145, 36, 49,209,136,254, 62,156, 1,214,102, 82,191, + 1,221,108,207,131,231, 96,101, 38,245, 7,207,194,202, 92,234,215,175,147,197, 57,142,231, 97,101, 42,246,231, 57,227, 39,231, +110, 27, 40,253,200, 68, 68,127,100,106,110,229,254,249,212,177, 38,111,191,253,142,137,169,132, 71, 97,212, 89,148,241, 77,161, + 51, 53, 5,175, 42, 65,210,211, 8,246, 92,200,195, 76,169,173,243, 28, 32,185,246,100,178,184,158,149, 30, 61,172,161, 79,111, +171,252,135, 11,242, 26,245,218,231, 73,131,165,149,119,134,231,153,154, 55, 17,223, 12,139, 96, 56, 22,183,235, 74,155,162,172, + 44,197,160,135,179,198, 32, 50, 79,184,191, 3,243,198, 54, 69, 73,113, 62, 52, 90, 6, 37, 74, 70,239,108,167,151,106,138,159, + 64,171, 99,160,213,243, 16,201, 93,112,241, 78, 68, 1,199, 24,206,213,232,200,179,241, 56,113,239, 99,179,231,191,243,114, 70, +139,185,214, 38,143,193,170,145,154,150,133, 93, 71,239, 4, 37,102,227,241,235, 93,146, 12,120,230,191,247,232,202,206,239,175, +210,185,221,223, 3,109,197,140,232,135,101,243,222,110,210,189, 41, 43,165, 52,217,160, 0,200,101, 66,104,101, 44, 44,101, 94, +224,245, 10, 94,165,209,148, 68, 70,128,204,204, 78, 32, 60,135,159,159,159, 83,102,102,102,228,236,217,179,109,134, 13, 27, 86, +101, 6,118,238,220,137, 13, 27, 54, 96,233,210,165, 48, 24, 12,216,178,101,139,252,232,209,163,109,127,250,233,167, 12,119,119, +247,166,105,105,105, 57, 70,154, 42,113,197,179,235, 89,175, 2,158,103,151, 45, 91,198, 47, 93,186, 20,149,223, 1, 96,129,186, + 95, 42,107, 50, 67, 18,137, 4, 49, 49, 49,111,196,100,137, 68, 34,136,197, 98, 72, 36, 18,196,198,198,214,219,100, 49, 12, 35, +200,200,200, 64, 89, 89, 25,250, 12, 26,132, 13,171, 87,163,107,215,174,232,221,187, 55,120,158, 71,112,112, 48, 58, 90,199,193, +102, 80, 55, 68, 71, 71,195, 96, 48, 24,213, 50,149,145,145,129,194,194, 66,244, 27, 52, 8,191,253,252, 51, 90,181,106, 5, 63, + 63, 63, 0,192,181,107,215,208,203, 53, 5,102,126,189, 17, 23, 23,247,191,172, 62,255, 51, 47,242,191,142, 96,253, 79,136, 76, +196, 93,238,120,200,233,209,111,183, 25, 56,168,103, 19,252,118,224,202,215,144,150, 29, 0, 0, 91,169,116,229,184,183,189, 16, +149, 88,140,224,251, 89,167,163,147,113,247, 77, 28,147, 99, 97,103,107, 37, 7,104, 9, 84, 58,150,177,176,168,187, 99, 50, 7, + 30,242,128,121, 24, 59, 44,218,173, 93, 51, 55, 55,158,103, 42, 70, 12,126,143,241,131,227,221,219, 52,117,116,127,214,228,101, +128, 69,199,125, 0,103, 90,103, 58,186,180,148, 93,156,243,233,140, 14,111, 15, 26,109, 34,150,219,130, 83,167,195, 80, 20,142, +194,164,171,208,154,180, 68,126, 70, 50, 14,156,252,189, 52, 38, 41,183, 76, 32,160, 47, 9, 45, 29,191,188,124, 57,169,156,162, +106,175,103, 26, 1, 86, 45, 93, 60,255,237, 3,123,247, 91,154,184,116,193,211,147, 3, 74, 36, 2,131,212,193,213, 23,106,198, +156, 93,187,253,180,149, 18, 88, 93, 87,250, 84,202,178, 99,151,131,207,143,242,113,238,108,158, 28,113, 26, 42,149, 14, 90, 3, + 16,216,170, 7, 88,142,151, 80, 52,197, 89, 8, 4, 84,110,110, 17, 40, 3,151,123, 35, 52, 57,251,230,131, 68,129,150,174, 91, +251,133, 74, 39, 22,124, 58,168,119, 11,128, 85, 99,112,159, 64,172,223, 30, 60, 3, 96, 39,190,222,101,105, 0,207,170,193, 3, +157,155,120,226, 23, 14,232,252,232,220,122,255,214,253,103,162, 62, 17,172,166,158,232,223,196,215,101,199,250,175,231,219,216, + 56,184, 9,192,170, 65, 49,101, 60, 87,116, 23, 66,229, 83, 88, 52,120, 27,172,101, 39,252,250,243,218,114,142,227, 15,224, 21, +166,168, 32, 16,254,201,104, 52,154, 99,171, 87,175,182, 25, 56,240,217,104,247,242,242,114,220,190,125, 27, 91,183,110,133,169, +169,233,243,102, 9, 3, 6, 12, 0,207,243, 54, 75,150, 44, 57, 6,160, 67, 77,154, 29, 59,118, 28,244,253,247,223,167, 1,120, +138,103,115, 28,137,241,108,129,121,254,242,229,203, 52, 0,180,109,219,150,189,127,255, 62, 7,128, 31, 51,102,140,232,228,201, +147,141,149, 74,101,200,171, 26, 44,137, 68,130,204,204,204,215, 54, 89, 34,145,168, 74, 79, 44, 22, 35, 51, 51,179, 94, 38,139, + 97, 24,225,153, 51,103, 16, 26, 26,138,101, 65, 65,248,204,217, 25,182,182,182, 8, 9, 9, 1,207,243, 48, 53, 53, 69, 81, 81, + 17, 14, 28, 56,128, 30, 61,122,128, 97, 24,177, 49,186, 39, 78,156,192,163, 71,143,176,162,117,107,204, 48, 53,133,149,149, 21, +174, 93,187, 6, 0,144, 74,165,200,204,204,196,229,203,151,209,189,123,119, 82,169,255,108,131,213, 13, 16, 22, 81,112, 50,232, +213,224, 25, 30,160,224, 18, 16, 0,113,116,116,253,223, 18,104, 96,193,198,237,167,223, 94, 63,127, 48, 53,121, 68,144,203,242, +159,174, 78, 3,128, 73,239,250,186,202,165, 66,108, 60, 16,197,211,192,130, 55,145,193,128, 0,136, 41, 45,166,245,233,228,135, +172, 2, 29, 18,211, 74,175, 68, 39, 27,215,164, 19,188,107, 44,118, 31,187,150,190, 97,199,139, 35, 6,119,156,120,148,182,110, +151, 38,134, 7, 15, 43, 19,145,255,196,193, 29,235, 28, 69,216, 54, 80,250,209,220,153, 51, 59, 12,121,255, 75, 19, 67,198,113, +104, 83,206, 0,172, 10, 42, 37,133, 50,198, 7,217,105, 25, 88,182,126,127,186,214, 64,191,247, 48, 74, 83, 47, 99,249,244, 41, +202,133,141,202,134,173,254,118,241,165,111,150, 45, 49,147,102, 6,151,137,132, 80,210,182, 93, 69, 43, 23,111, 22, 42, 74,117, +239, 36,166, 65, 81,151,142,150,198,234,111,215,109,122,251,195,177,195, 98,124,221,186,219,178, 57,137,182,170,210,210,188,125, +231, 30, 57, 85,188, 77, 80, 0,144,144, 92,136,252, 34, 37,195, 50,134, 16,115, 61,150, 71,101, 26, 63,250,175,145, 3,236, 7, +246,108,250,190,189,149, 4,106,101, 49, 28,172,197,232,219,217,251,125,131, 38,110,110, 82, 94,253,230, 24,121,193, 95, 85, 52, + 17,222,217,218,211, 31,156,222,159,231, 12,208,165,238,121,149,215,167,153, 51, 71,121, 88,218,152,234,104,138, 85, 2, 34,107, + 64, 98, 79,209, 38,158, 16,152,184, 35, 37,254, 33, 51,243,227, 81,133, 41, 41, 57,219,236,120,172, 33,183, 16, 2,225, 69, 82, + 83, 83,199,125,245,213, 87, 55,219,181,107,231,104,103,103,135,192,192, 64,156, 58,117, 10,115,230,204,169,218,166,101,203,150, + 0,128,194,194, 66,124,251,237,183, 57, 89, 89, 89,227,106,125, 49,143,140,140,217,179,103, 79,231,230,205,155,235,196, 98,113, +113,165,201, 74, 77, 77, 21, 42,149, 74, 74,167,211,241,166,166,166,156, 84, 42, 53,140, 28, 57, 82,127,255,254,253,198, 74,165, + 50,245,117, 34, 88,173, 91,183,126, 82, 82, 82, 82, 74, 81,212,107, 79,225, 80,105,174,252,253,253,237,117, 58, 29, 11,160,232, + 85,166,112, 96, 24, 6,173, 91,183,198,229,235, 15,113,238,250, 19,148,231, 39, 98,204, 59,125,225,239,239,143, 11, 23, 46,188, +242, 57,107,221,186, 53, 46, 95,190,137,107, 15, 99,145,155, 26,133,177,163,135,194,207,207, 15,151, 47, 95, 38, 21,250, 13, 24, +172, 90, 67,114,254,238,104, 65, 91, 72,118, 47, 24,236,221, 68, 24,184, 20,148,208, 4,199,119,156,234, 52,255,155, 95, 98, 4, +165,105, 99, 34,140, 24,237,245,194,197,146,140, 72, 30,177,251,195,162,252,223, 31,220,213, 13,191, 29,150, 47, 2,128,119,251, + 52,194,253,168,124,220,139,200,219, 31,245,138,115, 22, 61, 79,160, 3,228,172, 22,251,191,253,114, 72,119,143, 6, 78,216,122, +232, 38, 40, 30,199,140,122,208,242, 60,223,174,185, 59, 54,236,120,121,196,160,179,251,186, 93,154,152,139,183, 21,253, 1,160, + 79,123,249,185, 54, 1, 54,238,124, 29,147, 99,200, 68,244,228,254,131,199,153, 48,185, 23,192, 21, 29,134, 72, 34,134, 90,201, + 34, 59, 79, 11,181,220, 4, 87,110,132,168,203, 85,204,204,240,120,230,149,162,118,209, 73, 72, 20, 11, 67,211,148,106,181,179, +153,141,183,146,166,192,151,235, 68,252,163,168, 76,101, 84, 26, 98,141,209, 72, 76,132,174,189, 43,211,229,215, 93,135, 23,139, + 68,146,119, 5, 2, 80, 14, 86,166,246,191,108, 92, 1,115,115, 51,240,140, 2,188,182, 0,195, 38,125,147, 31, 17,111,104, 4, + 0,141, 27,195,172, 75,115,209, 46, 33, 77,101, 92,125,172, 95, 88,215, 49, 40, 1,166,142, 25,220, 66,196, 25,148,248,116,201, + 65,252,186,114, 48,198, 14, 10, 16,157,185, 18, 55, 21,192,242, 87, 15, 83, 62,107, 34,236, 48,249,122, 12, 5,220,228,129,206, + 15, 79,175,244, 71, 61, 90, 30,131,130, 32, 98,203,169,128, 0, 87,157,136,205, 56, 0, 74,230,202, 11,236,186, 3,166,141, 41, +222, 44, 16, 63,110, 92, 92,254,219,214,173, 23, 57, 10,203, 98, 83,234,156,242,130, 64,248,183,146,152,149,149,213,111,192,128, + 1,193, 23, 46, 92,176, 9, 12,124,182,162,202,163, 71,143, 0,160,170, 41, 42, 55, 55, 23,239,189,247, 94, 65,118,118,118, 63, +212,209,167, 87,161, 80, 36, 29, 63,126,220, 81,173, 86,183, 89,184,112, 97,110,195,134, 13, 21, 6,131,129, 87, 40, 20, 96, 24, +134,183,183,183, 23,181,106,213,138,106,218,180,169, 58, 56, 56,216, 54, 61, 61, 93, 1, 32,229, 85, 18,255,225,135, 31,226,232, +209,163, 0,128, 55, 49, 47,150, 88, 44,198,128, 1, 3, 92,111,223,190,157, 89,161,249,202,243, 98,241, 60,143,240,240,112,220, +136,103, 33, 49,181, 70, 74, 76, 25, 46,255,126, 18, 99, 38, 79, 1,195,188,122,111,133,176,176, 48, 28,184, 28, 6, 71, 87,111, +148,106,195,113,226,196, 9, 76,155, 54,237,181, 52, 95,145,127, 76,243,224,203, 17,172, 63,100,200,203, 11, 18,169, 14, 75,250, +180,117,253,114,100, 47,111, 1,163,202, 2,199,113, 16, 0,176, 51,167,177,253,183, 95, 27, 29, 62,126,246,206, 15,155,126,218, + 4, 29,183, 32, 34, 15,170,122,132,177,150,124,191,243,214,187,123, 86,116, 19, 78, 27,225,111, 3, 0, 98, 17,141,141,251, 35, + 25,208, 88,242, 58,153,106,239, 10, 89,185, 24,147, 29, 28, 44, 23,205,255,248,109,155,238,237,124, 17,114, 39, 2,155,246,222, +185, 46,177,198,110, 99, 47, 59,158, 99, 94,232,208,254,236,187,106,130, 95,124,221,149,144,229,120, 39,137,220, 14,154,148,179, + 16, 74,164, 96, 24, 61,242,115, 85, 72,206,225, 32,115, 17,225,126,120,170,122,232,251,195,206,188, 78,197, 52,149,203, 92,150, +172, 92,219, 64,173, 86, 48,101, 37, 5,140, 80,124, 71, 40, 55,145,230, 60, 91, 57,192, 56,238,102, 66,211,181,133,168, 21,120, + 78, 32, 21,240,170,249, 51, 39,152,102,198, 93,128,143,125, 22, 40,240, 48,113,121, 27,230,166, 2,113,231,230,162, 52, 0, 48, +149,203, 37,223, 46,159, 99,249,249,220,101, 55,140,137, 38,250, 58, 56,125, 30,232, 99,131,144,123,209,184,254, 32, 53,242,250, +221,184,166, 61,218,186,192,183,145,213,103, 18,171,146,213,175, 18, 17,125,118, 14,158, 53, 17, 86,142, 34,108,234,137,166,109, + 6, 46,172,105,244, 96,181,120,134,130,139,107,196,131,162, 4,224, 65, 1,154, 76, 48,233,123, 32,104, 52,131, 63,118,114,165, +122,235,111, 91, 87, 68,167,144,168, 21,129, 80, 23,165,165,165,225, 49, 49, 49,125, 91,180,104,177,243,211, 79, 63, 53,127,255, +253,247, 93, 62,252,240, 67, 26, 0,114,115,115,185, 13, 27, 54,100,253,240,195, 15,165, 5, 5, 5, 19, 13, 6,195, 19, 99,174, +240,236,236,236,219,219,183,111,207,191,121,243,102,211,246,237,219,203,219,180,105,195, 57, 56, 56,136, 85, 42, 21,155,158,158, +174,190,115,231, 14, 27, 31, 31,111, 89, 82, 82, 18, 15, 32, 1,175,208,124,239,226,226, 2,154,166,151,187,185,185, 45,206,204, +204,108,246, 38,250, 96,249,248,248,184, 0,136,119,117,117,245,169,111,243,224, 31, 30,216, 66, 33,138,139,139,161,200, 72,128, +170,176, 0,126, 2, 21, 90,218,216,193,220,220,252,181,204, 80,105,105, 41,132,218, 92, 36,134,167,162, 36, 39, 5, 77, 60, 90, +195,212,212, 20, 90,173,246,255, 81,125,168,127,202,117, 80, 99, 19, 97,147, 6,152,102, 2,108,152, 48,178,145,184,145, 71, 3, +232,242, 31,225,113, 66, 57, 22,110,107, 27, 37, 16,155,107,167,143,239,211,170, 71,111,123,116,235,222,150,106,232, 97,245,217, +234,213,155, 63,105, 34, 41,152, 19,149,142,141,198, 28, 56, 42, 17, 73, 28,151,183,245,234,131,204,169, 13,236,213,224,193,227, +234,195,108, 60, 73, 40,222, 26,147,140,164,250,100,162,137, 55,122, 11, 41,250, 32,207,242, 50, 75,115, 83, 69, 19,255, 6,118, +189, 59, 55,167,251,245,104, 3,177, 16,184,121, 47, 12, 51, 87, 30,187,203, 73,248,183,141, 30,241,197,115,127, 48, 78,207, 70, + 12, 50, 47,140, 24,228,121,158, 7,199,128,231,107,239,214, 37,160,169, 28,101,238, 67, 39,137,121, 19,232, 11,175, 32, 55,183, + 28,145,137,122,148,195, 13,197, 25, 25,224,121, 54,109,201,146,195,175,124,133,216,217,217, 57, 52,106,236,235,253,195,111, 71, +160,215,150, 34, 49,106, 7,202,203,114,176,114,213,239,222,174,174,182,221, 50, 51, 51, 67,140,175,221,148,111,240,149,253, 14, +224, 1,129, 80,138, 51, 91, 14,161, 64,104, 2, 59, 75, 49, 56, 77, 30, 38,127, 52,198,114,192,219, 99, 44, 1, 32, 45, 33, 12, +238, 54,198,249,106,125, 9,134,191, 59,209,207, 10,172, 10,187, 79,132,105,104, 10,253,118,255, 30,153,208,163,149,149,236,221, + 62, 30,214,203,127, 45,121, 7,192,254, 87,242, 87, 28,251,194, 40,194, 87, 25, 61,120, 4, 96,253,121, 36,236,191,156,111, 54, +114, 64,144,137, 88, 72, 81,188, 38, 19, 28, 37,166, 54,254,180, 93, 33,161,176,133, 60, 58, 9, 4,227, 80,171,213,143,212,106, +117,179, 47,190,248,226,189,175,190,250,170,171,169,169,105, 35, 0, 80, 42,149, 73, 6,131,225,122,197,181,206,214,231, 50, 7, + 16,159,144,144,144,148,144,144,224,184,123,247,110, 43, 0,178,138,255,105, 0,148, 0,200,173,167,230, 11, 84,154, 41, 23, 23, +151,197,111,170, 28, 42,205,148,171,171,171,207,171,236, 47, 16, 8, 88,154,126,182,178,143, 84, 42,197,141, 27, 55,208,191,115, + 23,132, 93, 78,133,191,163, 27,122,140,153,128, 19, 87,175, 66, 32, 16, 84,110, 95,175,231,136, 80, 40,196,205,155, 55, 49, 98, + 96,119,156, 56,113, 2, 94,173, 91, 96,198,140, 25, 56,127,254, 60,132, 66,178,154,222,159, 98,176,192, 99,249,165,131,223,136, +193, 25,112,100,223,119,184,244, 64,165,139,205,196, 2,191, 12,108, 56, 2, 5,151, 87,112,116,234,153,107,137,107, 62,152, 56, + 80,222,179, 91, 31,244,236,218, 67,216,180, 69,183, 69,192, 11, 6, 43, 16,181,204,149,193, 26,176, 98,203,209,152, 41, 7,207, +198, 81, 96, 20, 24, 53,184, 13,207, 26,176,162,142, 52,255, 65,211, 82,110,118,240,230,141, 59,214, 96,203,145,147,124, 85,230, +228,216, 8,224, 13,120,250, 52, 14, 63,110, 63,193, 93,187, 19,187, 71, 39,192,167,137,209, 80, 26,171,249,204, 81, 49,176, 52, +147,252, 97,196,160,149,137,200,191, 79,123,249, 57,158,231,121,115,185,200,159,175, 62,130,245,130,166,198,192,109,217,179,235, +183,181,147, 38,125,104, 90,168,205, 68, 92,122, 36, 52, 2, 87, 8,228,222,136,124,120, 65,173, 54,112,191, 25,113,190,106, 44, +207,130,130,130,188, 71,255, 97,239,186,163,162,184, 30,238,157,153,237,176,244,186,128, 18,196,138, 21, 16,187, 98,239, 53,209, +168, 49,106,140,154,168,209, 36,154,196, 30,187, 24,141,198, 88,162,209, 36,106, 98,236,221, 24,123,175,116, 20, 81, 84, 64,218, + 46,189, 47, 91,102,119,102,190, 63, 96,249, 33, 82, 22, 52,205,111,238, 57,123,118,167,236,157,247,230,189,153,119,223,125, 45, + 52, 7, 7,118, 7,193, 96,208, 33, 67, 85,162, 81, 85,233, 5,176,182,118,191,147,154,154,106, 54, 39,109,100,243,223, 30, 49, + 85, 36,147, 66, 54,238,221, 65,226,103, 74, 29,252,154, 90,149,100, 11, 58, 11,143,174,222, 64, 15,231,146,206,144,207, 30, 81, +168,223,193,205,172,112, 90, 89,137,102, 13,232,234,142,248,196, 52,220, 8, 75,221, 19,175,132,146,225, 84,123,158, 37,229,125, + 60,172, 71,125,124,247,219,195,153,128, 97, 95,109,226,222,194, 11, 45, 88,160, 11, 56, 3, 56,163, 22, 28,208,165,133, 23, 90, +152, 57,114,240, 37, 78, 1,137,247, 54, 28,120,190,232,240,213,204, 97, 95, 77,238,106,221,185,227, 0, 49, 88, 3, 87, 88,172, + 51,196, 36,160,224, 85,210,232, 21,192,115,242,156,255, 85, 78, 6,192,111, 6,131,225,183,188,188,188,215,201,169,196,203,243, + 50,189, 82,220,203, 55, 7, 42,149, 74,202,205,205,141, 49,163,147,123, 77,156,247,202, 11,173, 82,247,170, 38, 23,171, 34,167, +178,125,251,246,246, 67,134, 12,129,209,104,196,211,167, 79,145,152,152,136, 33,147, 62,128,157,157, 29,238, 61,124,136,167, 79, +159,226,235,175,191,134,209,104, 68,112,112,112, 74, 77,156, 66,161,144,110,211,166,141,104,248,240,225, 48, 26,141,136,139,139, +195,243,231,207, 49,115,230, 76,216,216,216,224,225,195,135,136,139,139,195,215, 95,127, 13,157, 78,135,248,248,120,250,111,202, + 75,255, 79, 4, 22, 1, 6,172, 1,249, 33, 75,176,253, 52,104,218,136,102, 15, 83,144, 96,234,120,242, 48, 5,219, 40, 46,234, + 84, 84,244,163,248,176,123, 61,197, 40,184,143,218,214, 28,158,164, 64,101,101, 81, 88, 8, 99,161, 53, 50,255, 68, 66,106, 97, +209,147, 20,168,234,224, 94, 16, 96,138,129,252, 80, 28, 63,125, 21, 18,105, 4, 66,194, 31, 49,183,195, 98, 15,144, 28, 86,196, + 60,199,147,218,115,114,144,251,111,196,196,161,207, 74, 70, 12,114, 6,112,172, 17, 54,157,247,225,131,161,157,234, 7, 52,179, +173, 15,214, 0,142, 51,192,174,215, 21, 96,145,180, 90,190,224, 7,186,157, 93,125,165,239, 20, 22,100,181,239,211,163,187,165, + 83,147,119,145,255,228, 33,162,195, 47,104, 66,239,199,222, 9,126,160,219,249, 42, 9,233,238,238,222,173, 87,175,166, 24, 61, +113, 62,104, 93, 30,226,162,127, 65, 97, 65, 26,110,220,146,227, 81, 82, 65, 71, 0,102, 59, 88,119,162,141, 45,128, 92,116,110, + 41, 76,178, 22,235, 93,199,143, 28, 12,137, 64, 11,214, 80, 8,130,206,194,179, 28, 58,255,157, 37, 41, 12, 0, 88, 72, 9,129, +165, 32,223,218, 44,167,209,219,161,177,133,200,128, 95, 79, 68,131, 37, 74,150, 89, 98, 9,108,251,245,212,179,143, 87,124,226, +135,230,222,118,109, 34,158,102,152,218,224,205,173,210,206, 8, 61,185,172,153, 54,122, 49, 56,214,128,155,235,236,154,117,253, + 50,119, 6,234,184, 44,206,131, 56,164, 2,248, 24, 76,241,143,159,174, 58,187,184,109,203,135, 93,230,124, 60,204, 26, 4,191, + 48, 58, 15, 30, 60,254,126, 20, 23, 23,127, 52,119,238,220, 31, 41,138,114, 2, 64,112, 28, 7,157, 78, 39,248,233,167,159,132, + 70,163,145,164, 40,138,145, 74,165,198,176,176, 48, 3,203,178,153, 52, 77,127, 84, 19,167, 94,175,127,182,101,203,150,134, 6, +131,161,108,196,161, 78,167,195,111,191,253, 6,157, 78, 7,137, 68, 2,185, 92,142,184,184, 56, 16, 4, 65, 51, 12,243,140, 79, +137,215, 41,176,128,101,157,223, 94,178, 4, 28, 8, 16, 88,250, 48,229,229,201,152,238,167, 66,217,220,131,254,188,133,111,224, +146, 82, 81,182,172,182, 1,208, 50,204,200, 0,255, 38,251, 1, 64,199, 50,239,215, 37, 18, 5, 90,205,187,190,237, 58, 30, 96, + 57, 78, 96,100,184,159, 72, 18, 71,180, 64, 76, 92, 66,205, 35,231,170,130, 82,149, 23, 54,160,139, 13,103, 90, 2,167,172, 89, +176,116, 58, 6,142,227,184,178,102,193, 69, 82,100,101,235,106,236, 77,125, 35, 66,219,183, 93, 75,201,148,115,215,194,167, 50, + 44,231, 74,145, 68,154,214,192,238,120, 85,113, 85, 90, 59,186,118,241, 98,234,249,168, 46, 46,125, 29, 75,167, 89,205,202, 3, +178,242,113, 62, 53,181,232, 90, 93, 56,115, 53,134, 97, 11,214,157, 56, 41, 22, 80, 2,128, 3,203,150,196, 87, 75, 51, 57, 37, + 34, 12,104,213, 8,110, 95,254,100,220, 79, 81, 68, 98, 77,124,247,238,171,190, 27,253,229,197, 47,162,159,230,254,244, 60,181, +164,230,243, 60, 21, 15, 14,158, 75, 88,252, 44,185,240,139, 7, 79,115,191, 69, 45,251, 77, 16,192,214,128,161, 75, 94,218,247, +170,247,243, 81, 18, 34, 1,140, 0,151,210,103,244,180,205,115, 8, 2,252, 50, 17, 60,120,252, 63,130,201,197, 34, 73,114,249, +235,226, 52,185, 88, 0,158,214, 34, 28,247, 0,180,122,157,113, 11, 15, 15,207, 6,144,205,167,242,127, 27, 45,121, 78,128,227, + 56,242, 85, 62,181, 13,103,163, 70,141,184, 90, 8, 21, 62,141,120, 78,158,147,231,228,223,201,175,248, 78,230, 56,142,120,149, + 15,159, 70,255, 13,112, 28,103,246,135,111,246,248, 27, 64, 16, 4,251,119, 94,239,233,211,167, 4,127,215,121,240,224,193,227, +239,123, 39,191,238, 37,123,120,252,247, 65,242,183,128, 7, 15, 30, 60,120,240,224,193,227, 53,139,110, 84,109,243,213,102,116, + 64, 93,172,194, 7, 60, 39,207,201,115,242,156, 60, 39,207,201,115,254,191,227,172,137,251, 95, 59, 58,177,134, 57,197,255, 86, +240,237,253, 60, 39,207,201,115,242,156, 60, 39,207,201,115,190, 17,168, 77, 31, 44,190,137,144, 7, 15, 30, 60,120,240,224,193, +227, 53,131, 23, 88, 60,120,240,224,193,131, 7, 15, 30,188,192,226,193,131, 7, 15, 30, 60,120,240,224, 5, 22, 15, 30, 60,120, +240,224,193,131, 7, 47,176,120,240,224,193,131, 7, 15, 30, 60,120,212, 29,252,132,148, 60,120,240,224,193,131, 7, 15, 30,102, +160, 54,211, 52,152, 28, 44,211,210, 42,129,252,237,227,193,131, 7, 15, 30, 60,120,252, 19,250,229, 77,210, 34,229,151,202, 33, + 74, 35,198,187, 90, 60,120,240,224,193,131, 7,143,127, 2,111,140, 22, 33, 43, 40,199,238,124,218,242,224,193,131, 7, 15, 30, + 60,254, 33,188, 49, 90,164,162,131,197,131, 7, 15, 30, 60,120,240,224,241, 79,225,141,209, 34,252, 40, 66, 30, 60,120,240,224, +193,131, 7,143,191, 72, 96,241,238, 21, 15, 30, 60,120,240,224,193,227,159,196, 27,165, 69,120, 7,139, 7, 15, 30, 60,120,240, +224,193,227, 63, 38,176,248,149,198,121, 78,158,147,231,228, 57,121, 78,158,147,231,228, 5, 22, 15, 30, 60,120,240,224,193,131, + 7, 15, 94, 96,241,224,193,131, 7, 15, 30, 60,120,240, 2,139, 7, 15, 30, 60,120,240,224,193,131, 23, 88, 60,120,240,224,193, +131, 7, 15, 30, 60,120,129,197,131, 7, 15, 30, 60,120,240,224,241, 79,129, 64,213, 35, 1, 30,212,130,167, 46,163, 9, 30,240, +156, 60, 39,207,201,115,242,156, 60, 39,207,249,255,142,179, 38,238, 7,248,151,130,227,184,127, 77, 88,248, 33,172, 60, 39,207, +201,115,242,156, 60, 39,207,201,115,190, 17,224, 56,206,236, 15,223, 68,200,131, 7, 15, 30, 60,120,240,224,241,154, 33,248, 7, +175, 77,226,127,125,192, 88,148,172,160,205,253, 11, 57,121,252, 63,128,171,171,235, 57,169, 84,234,201,178, 44,140, 70, 14, 70, +150, 1,195,114, 96, 24, 22, 6,134, 3,173,215, 38,234,139, 11,250,241,119,170,238,232,218, 6,115,197, 34,225, 36, 45,109,248, +230, 86, 36,126, 9,244,131,131,145,197, 26,169, 72,208, 85,167, 55,174,189, 25,133,159,106, 73, 89,113, 89, 13,254, 89,127, 69, +244,233,211,103, 42,128, 37, 28,199,113, 44,203, 46,188,124,249,242,158,215,241,174,119,117,117, 29, 3,192, 2, 0, 72,146,204, + 87, 42,149,135,204,249, 99, 96, 96,160,160,168,168,232, 57, 0,247,210, 93, 79,194,195,195,155,212,116,140, 71,237, 17, 18, 18, +194,121,122,122,162, 85,171, 86,143,211,210,210, 54, 3,216,198,223,149,127,145,192,106,226, 36,237,240, 86, 61,167, 65,103,195, +146, 22,214,244,192,185,187,187,175,113,114,114,154, 86, 92, 92,172, 5,192,145, 36,201, 17, 4, 1,211, 7, 0, 24,134,201,124, +252,248,177,185, 54,228,107,227,108,220,184,113, 40, 73,146, 30,166,255, 0, 64, 77,191, 89,150, 77,137,137,137,105,107, 70, 65, +222,143, 36,201,121, 53,157,199,178,236,154,180,180,180,115,213,157,211,178,101,203,112, 75, 75, 75, 23,146, 36,171, 92,191,169, +124,123,177,209,104,228,138,139,139,211, 31, 62,124,232, 87,219,180,117,115,115, 91,200,113,156, 31,128,221, 42,149,234, 12, 0, +230, 85,242,138,155,155,219, 59, 28,199, 45, 42,189,135, 43,149, 74,229,145,218,252,191, 81,163, 70,161, 34,145,200,131,162, 40, +162, 98,154, 84,182,205,178, 44,167,215,235, 83, 98, 99, 99, 43, 77, 35,137, 68,226, 25, 22, 30,222,248,225,227,120,180,247,122, +132,109, 7,114,113, 36,103, 16, 6, 40,162,208,198,199, 11, 67, 7,246,225,223, 22,175,128,142,109,208,161,161,151,226,235, 79, +222,235,129, 47,214, 28,248,164,115, 75, 99,150, 72, 44,218,246, 78,151,134,182,205,189,109,177,252,199, 59,179, 0,182, 54, 2, +139,168, 87,175,158,175,139,139,139,151, 70,163, 49,229, 69,142,162,168, 23, 78,162,105,154,126,252,248,241, 25, 62, 5,204, 44, + 16, 4,130,175, 79,157, 58,165, 96, 89, 22, 3, 7, 14, 92, 10,224,117, 8, 44, 66, 34,145,200, 18, 18, 18, 96, 48, 24, 72, 79, + 79, 79,121, 45,203, 40,199,176,176, 48,208, 52,173,239,216,177,163,103,249, 99, 98,177,216,241,246,237,219, 0,160,247,247,247, +247,172,107, 0,125,124,124, 44, 45,101,178,217, 20, 65,244,102, 56,174, 25, 0, 80, 4,241,136,225,184,139,106,141,102, 67, 76, + 76,140,250, 77, 79,251, 11, 23, 46, 96,234,212,169,184,127,255,126,211, 51,103,206,252,176,112,225,194, 25, 42,149,170, 7,128, + 76,254,201,248,135, 5, 86, 67, 87,203,166, 78,118,182,167,191, 89,181, 12,103,251, 78,172, 78, 96,145, 10,133,226,155,174, 93, +187, 78,218,187,119,175,229,177, 99,199, 44,189,188,188, 32, 18,137, 64, 81, 20, 40,138, 2, 73,146,160, 40, 10,195,134, 13, 51, +119,225,199, 23, 56, 47, 93,186,100,217,164, 73,147,178, 66,150,227,184, 50,145, 53,112,224,192, 26, 57, 73,146,244, 8, 15, 15, +119,150, 74,165,101,255,103, 89,246,133, 79,249,118, 86,134, 97,208,181,107, 87,243, 2, 74,146,243, 98, 98, 98,186,169,213,234, +151,218,107,203,243,118,235,214, 13, 0,206,213,192,229,118,235,198, 37,103,130,142, 7,140, 57,224, 40,123, 64,220, 0, 32, 37, +149,158,159,147,147,131, 30, 61,122, 80,117, 73, 95, 39, 39,167,241, 87,175, 94,109,148,144,144, 48,124,245,234,213,217,119,238, +220,249, 1,192,207, 42,149, 42,185, 46,124, 28,199,173,140,143,143,111,204,113, 28,188,189,189, 87, 0,168,149,192,162, 40,202, +227,194,133, 11,206, 98,177,184, 44,157,171,250,102, 24, 6, 52, 77,163,127,255,254,198,170,248, 12, 12,139,200,232,167,184,112, + 51, 28,148,168, 27,206, 95,248, 18,240, 27,132, 95, 79,222, 66, 74, 70, 62,255,166,120,213, 23, 13,129, 21,163,135,246,129,198, + 64,194, 96, 48, 58, 41,156,172,126,155, 53, 62, 80, 8, 78,143, 61, 39,195, 97, 48,178,191,212, 86, 92, 13, 24, 48,192,115,219, +182,109,130,152,152, 24,129,143,143, 15, 24,134, 41,251,176, 44, 91,171,231,146, 71,153,192, 34, 72,146, 68,106,106, 42,228,114, +185, 77,247,238,221,149, 12,195, 44,184,113,227,198,158,191,224,114, 47, 56, 91, 4, 65,168, 85, 42,213,190,191, 59,206,109,218, +180,233, 42, 21, 10, 15, 44, 91,242,185,115,179, 22, 45, 73, 7, 39, 7, 60,123,150, 2,177,128,235,252,236,241,147,246, 43,130, +190,255,184, 77,155, 54,163, 35, 35, 35,111,188,105,233, 93,127,196,206, 31, 88, 35, 61, 13, 0,126, 12, 1,128, 29, 40, 44, 44, +196,228,201,147,113,226,196, 9,159, 14, 29, 58,172, 97, 24,102, 18,255,100,252,131, 2,203,219, 77,234, 46, 23, 73,207,255,184, +125, 51, 97, 40, 76,183,171,225,129, 90,217,181,107,215,247,247,238,221,107, 71, 16, 4, 46,205,252, 16,182,180, 22,110, 95,175, +133,157,163, 19,244,243,166,194,138, 49,162,213,229,200,218, 60,164, 47,112, 62,126,252, 24, 57, 57, 57,112,114,114,130,133,133, + 5, 36, 18, 9, 68, 34, 17,196, 98,177,121,111,111,130,128, 84, 42,197,133, 11, 23, 32, 16, 8,202, 62, 20, 69, 85,186,237,226, +226, 98,246,189, 98, 89,118, 77,179,102,205, 90,199,198,198, 90,231,230,230,162, 99,199,142, 5, 4, 65, 68,149, 19, 30,173,163, +162,162,172,205, 46,105,232,120, 20, 37,109, 7,151,123, 4,176,125, 27,140,245,104,104,209,224,133, 66,198, 36, 10, 25,166,238, +166, 83,102,102, 38,125,253,250,117,248,250,250,226,192,129, 3, 14,185,185,185, 95,239,222,189,123,209,198,141, 27, 23,170, 84, +170, 53,117,160,180, 7,128,199,143, 31, 3,128, 93, 93,194, 36, 22,139,113,247,238,221,146,206,132,165,162,156, 36, 73,144, 36, +137, 83, 79, 29,161,214,147, 40, 78,127,128, 89, 67, 60,225,229,229,245,146,171, 85, 30, 70, 35, 3,159, 38, 13,176,251,248,117, +172,250,225, 48,178,165, 45, 80, 24,186, 5, 0,208,187, 99,115,252,188,158,127, 89,212, 21, 93, 90, 99,160,127,235,150, 29, 60, +235,213,199,213,219,193, 16,137,133,182,211, 39, 12,134,149, 92,128,117, 63,255,193, 38,165,228,124,114, 51,202,108,167,132, 80, + 40, 20,173,251,246,237, 91,111,219,182,109, 34, 0,120,240,224, 1, 84, 42, 21,156,157,157, 33,149, 74, 33, 20, 10, 65, 81, 20, + 68, 34, 17,127,243,107, 1, 63, 63,191, 22, 45, 90,180,176,100, 24, 6,197,197,197,216,190,125,187,141, 84, 42,181, 25, 60,120, +176,217, 78, 86, 21,205,118,205,116, 58,157, 70,161, 80, 88, 0, 96, 73,146, 44,170,232,108, 1,128, 66,161,176,172,236,209, 4, +144,229,239,239,239, 14, 64, 12,224, 73,249, 99,122,189,190,170, 99,230,198,185,179, 95,235,166,103, 86,172, 92, 98,153,150,254, + 4, 54,214,105, 96, 13, 25,248,225,135, 31, 32,147, 89, 99,233,210, 5,130,227,109,253, 93, 63,251,124,254,105,129, 64,208, 63, + 52, 52,244,206,155,148,230,172,145,158,214,166,109,167,178,237, 61, 23, 54, 65,103,227,135,212,165, 75,177,113,227, 70, 52,110, +220,184,221,163, 71,143,248,135,227,159, 18, 88, 45,234, 89,219,114, 44,119,254,167,109, 27,196,160,213,118,143, 67,110,149, 63, + 92,126,168, 37, 1,128,116,113,113,153,190,111,223, 62,107, 83, 97,215,132, 96, 96, 11, 26,111, 53,111, 14, 11, 27, 91,164, 27, +105,112, 6, 26, 98,145,168,170, 2,177, 70, 78,146, 36, 33, 20, 10, 95,248,136,197, 98,148,119, 59,170,225, 44, 95,155, 3, 69, + 81,184,112,225, 2, 12, 6, 3, 70,142, 28, 89,169,216,170, 2,149,114,166,165,165,157,115,115,115,139,226, 56,174, 27,203,178, + 32, 8, 34, 74,169, 84, 6,154,142,187,186,186,246,107,211,166,205, 60,150,101,215,212,196,201,113, 28, 96,204, 6,151,179, 15, + 86, 29,179, 80,112,199, 17,132,101,111, 48,240,196,131,167,105,184, 20,250, 28, 89, 57, 69,240,111,226,140,190, 29,189,193,178, +172,217,225, 44, 15,133, 66,209,216,199,199,167,153,193, 96,192,245,235,215,193, 48, 12, 90,181,106,133, 15, 62,248,128,220,180, +105,211, 7, 0,214,212,150, 19, 64,100, 88, 88, 88,239,180,180, 52, 0,184,111,198,249, 15, 42, 19,194,191,254,250, 43,180, 90, +237, 75, 39,219, 5,174,198, 23,111,123,226,131,153,123,176, 54,246, 16,182,110,221, 90,217,240,218, 50, 78,131,145,197,225,179, +119,160,202, 46,194,159,179, 35, 65,184,142,194,154, 3, 28,118,253,240, 45,166,127,112, 20,118,114,153,171,204,169, 65,108,121, + 14, 43, 43, 43, 74,171,213, 94,127,242,228,201,228, 90,198,189,182,248,111,115, 18,248, 96,212,136,225,160, 68,150,120,252, 44, + 5,129, 29,252,224,236,236,140,168,152,103, 72, 74,205, 73, 39, 8, 76,236,215, 73,188, 70,163,209, 47,186, 17,137,159,107,226, + 84, 40, 20, 13,118,236,216, 33, 44,191, 79, 36, 18,149,185,224,229,221,240,138, 77,134,124, 26, 85,206,233,231,231,215,162, 79, +159, 62, 55,150, 44, 89, 98,149,148,148,132, 91,183,110,193,211,211, 19, 26,141,198,156, 97,233,229, 57, 43,107,182, 99,211,210, +210,126,175, 75, 56,175, 93,187,102, 4,224, 81,217, 9,213, 29, 51, 39,238, 45, 91,182,180, 16, 9, 4, 7,151,175, 88,108, 25, + 22,118, 6,157, 58,247,135,204,170, 17,140,116, 10,178,115,138,144,251, 84,137,160,160, 13, 88,180,104, 62, 86,175, 90, 97, 53, +102,220, 7, 7, 58,116,232,208,248,238,221,187,218, 55, 37,221, 73,129,104, 91,100,232,237,105, 0, 80, 16,115, 20,159,142,237, +132,194,194,167,248,248,227,197, 72, 77, 77,197,147, 39, 79,194,254,230,112,190,177, 2,139,195,203,157, 70,171,133,187, 59,164, +140,193,112,250,135,239,214,216, 88,201, 45,156, 66,207, 31, 71, 98, 98, 90,181,255, 41, 46, 46,214,159, 56,113, 2,231,103, 76, + 66, 99,194, 8,187,175,215,193,217,205, 13,249,147,134,161,200, 64,163,225,159,193,144,200,229, 16, 91,202,171,117, 28, 42,114, + 94,185,114, 5,209,209,209, 16, 8, 4,144,203,229,176,180,180,132, 68, 34, 41, 19, 86,166, 23,176,185,156, 28,199, 65, 32, 16, +224,193,131, 7, 72, 76, 76,132,173,173, 45,110,221,186,133,222,189,123,191, 32,174, 40,138,122,161,143,151,185, 48, 53, 45, 86, + 38,192, 80, 67,211,224, 11, 16, 58, 2,246,239,163,240,174, 27, 96, 55, 14, 6,206, 6, 44,199, 34,226,105, 54, 62, 26, 55, 8, + 0, 48,125,209,118,244,110,239, 85,214, 4, 89, 27,184,185,185,125,212,170, 85,171, 13,211,166, 77, 35, 45, 45, 45,161,211,233, +160,211,233,240,248,241, 99, 56, 56, 56,192,194,194,162, 78, 54, 1,199,113, 9,110,110,110,144, 74,165,224, 56, 46,161, 46, 28, + 4, 65,224,224,193,131,149, 30,155,184,225, 33, 4, 37,221,179,176,109,219, 54, 24,141, 70,112, 28, 87,101, 34, 25, 24, 22, 3, +187,251,227,135,253, 87, 64,184,142,194,182, 3,185,200, 74, 78, 67, 76, 84,176,201, 41,179,106,239,249,192, 10, 86,254,216,120, +227, 45,248,136, 99, 96, 97, 33,195,254,125,123,189,116,180, 1, 73,207, 19, 38,243,175,147,170, 18, 27,238, 46,174, 30, 32, 57, + 3,148,233, 89, 24, 54,176, 47, 4, 34, 57,158,167,100,161, 77,115,111,197,123, 67, 58, 43, 40,194,136,175,190,217, 55, 29, 96, +127, 54,227,121,103, 98, 98, 98,132,145,145,145,160, 40, 10,214,214,214,176,176,176,128, 72, 36,130, 68, 34, 41, 19, 86,188,131, + 85, 61,250,246,237,251, 9,203,178, 11, 88,150,205, 13, 8, 8,112, 91,182,108,153, 77, 74, 74, 10, 30, 60,120,128,125,251,246, +101,113, 28,103, 44,237,236,190,244, 85,175,101,134,179, 5,130, 32,106,221,207,201,199,199, 71,100,164,243, 62,181,145, 49, 67, + 5,164,181,167,177,160, 40,161,192, 64,158,136, 77, 81,110, 42,117,191,170,132, 68, 40,252,100,227,186, 5, 46,142, 14, 52,250, +245, 27,138,184,132, 92,204,159, 63, 18, 5, 5, 90,236,253,117, 61, 0, 49,104, 35, 5,191,118,253,161, 80,212, 67,151, 78, 93, + 20,215,111, 94,159, 14,224,141,241,179,147,142, 77,153, 14, 96, 69,253,250,245,175,109, 15, 10,106,212,171, 87, 47, 0,192,165, + 75,151,240,203,216,177, 88, 10,140,183, 2, 84,159, 2,243,255,214, 55, 70, 45,181,200,191, 93, 96,153, 34, 84,155,136, 17, 82, +163,213,161,101, 11, 62,241,170,223,192,219,245,222, 31, 7, 17, 31,159,138,244,244,220,234,110, 26, 75, 16, 4,219,160, 65, 3, + 88, 27,180,176,225,244,112, 86,184,193,202,222, 1,185,134, 82,231,202,210, 18, 98, 75,185,185, 47,199, 50,206,230,205,155, 35, + 61, 61, 29, 34,145, 8,114,185, 28, 86, 86, 86,101, 2,203, 36,174,204,125,225, 18, 4, 1,150,101, 33, 16, 8, 16, 21, 21,133, + 46, 93,186,160, 94,189,122, 56,112,224, 0,250,245,235,247,146,139, 85, 91,113,101, 18, 88,229, 29, 37, 83,231,119,115, 58,183, +191, 0,113, 67, 24,173,222, 5,105,209, 11, 52,103, 13, 29,167, 40,109, 18,228,240, 71,112, 58, 98, 19,179, 94,104, 46, 52, 95, + 60,187,187, 73,165,210, 61,243,231,207,239,217,182,109, 91,208, 52, 13, 0,176,176,176,128, 78,167,131, 80, 40, 4, 77,211,208, +104, 52,169,255, 68,198, 53,221,243,243,231,207,131, 32,136, 50,161,107,106, 42, 84,171,146,241,193,172,189, 16, 11,128,168,168, + 40, 52,107,214,172, 90, 62,131,145,193,230,189, 23, 0,130, 64,207,153, 15,208,214,203, 2,203, 22,205,197,168, 81,163, 32, 22, + 75,113,228,200, 33,172,219,250, 12,211, 38,250,224,202, 15, 35,113,210,111, 19, 58, 91, 92,198,138,229,203,201, 67, 7, 15,119, +225,139,235,170, 33,147, 74, 29,196, 82, 27,176, 70, 45, 4, 66, 33,234,215,123, 11, 44,163, 67,110, 65, 49, 38,190, 59, 4,225, +247, 31,226,204,149,123, 70,131,129,221,100, 46,103,147, 38, 77,144,145,145, 1,138,162, 96,101,101, 5, 75, 75, 75, 52,109,218, + 20,201,201,201, 47,184, 88, 60,170, 6, 73,146, 11,207,156, 57,227, 66, 81,148,171,209,104, 68,114,114, 50,162,162,162,176,121, +243,230,116,181, 90,221, 61, 60, 60, 60,182, 14,180, 85, 53,219, 85,214, 89,189, 46,206, 86,249,202, 95, 35,107,137,254,226,186, +111,102,120,180,106, 19, 64, 72, 41,121,126,241,179,140, 46,193,247,238,116, 94,244,243,225, 79, 18,243,138,123,101,100,100, 84, + 89,121,163, 72,178,119,211, 22, 45, 73,150, 77, 1, 37,106,134,239, 54,124,129,156, 92, 53,138, 10, 53, 0,196,208, 27, 4,208, +233, 8,244,232,217, 11, 7, 14,158, 64, 64,219, 0,138, 34,201,190,111,146,192, 2, 0,138,162,214, 28, 63,126,188,145, 84, 42, +197,170, 85,171, 96,101,101,133,187, 43, 86,224, 23,145, 8, 50, 0,219,104,122, 30,254, 62,129, 85, 23, 45,242,159,112,176,106, + 5, 15, 15,143,245, 29, 58,183,239,214,160,121,128,244,222,217,163,120,250, 36, 17, 89, 89,249,224, 0, 77,117, 55,143, 32, 8, + 78, 40, 20,194,249,171,229,168,223,170, 21,138,167,190,131, 92, 3, 13,239, 63,238, 66, 34,151,227, 81, 31, 63,112,122, 61,186, +198,164,155, 43, 92, 56,130, 32, 56, 0,112,116,116,132, 72, 36,130, 84, 42,133, 84, 42, 45,235,123, 85,254, 99,174, 24, 98, 89, + 22, 5, 5, 5, 72, 72, 72,192,212,169, 83, 97, 97, 97, 1,130, 32,144,158,158, 14, 79, 79, 79, 80, 20,133,212,212, 84, 92,190, +124, 25, 13, 26, 52,128, 88, 44,174, 85,102, 40,215,169,189,181,155,155,219, 53,142,227, 90,135,134,134, 90,183,109,219, 22,181, +114,176, 8, 17,116,240, 4, 3, 15,176,220,255,250, 90, 25,140, 47, 86,222, 76, 34,203, 28,184,184,184,248, 52,107,214,236,206, +230,205,155,172,156,157, 93,192,178, 12, 12, 6, 3,242,243, 11, 80, 92, 92,140,250,245,235,195,210,210,146, 91,183,110, 29,193, + 48,204, 63, 54,148,215, 36,168, 76, 14,162,169,255, 21, 73,146,152, 53,180, 62,114,115,173, 64, 81, 37,219, 53,197,221,104,160, +245,173, 27,187,195,214, 74,134,200,144, 59,248,252,147,201,152, 52,233, 67,136,164, 86,184,118,237, 10,146,148, 25,120,150,146, +139, 79,150,252, 0, 27,239,174,144,229, 28,196,163, 12, 22, 27,119,157, 6,205,112,252,244, 0,213,192,210,210,202, 94, 32,178, + 4, 75, 10, 96, 99, 99, 7,129,216, 18,172, 81, 0,134, 5,172,108, 28,113, 59,252, 49,238,220, 47,252, 40, 35, 27,230, 12,221, +231, 4, 2, 1, 71, 81, 20,156,157,157,203,196,148, 80, 40, 52,229, 93, 20, 20, 20,128,162,168,178,125, 60,170,175, 72, 62,127, +254, 28,106,181, 26,119,239,222,197,193,131, 7, 51, 43,138,171, 62,125,250, 76,179,176,176, 88,164,213,106, 87,157, 59,119,238, +135,234, 56,235,208,108, 87, 23,231,171,137,159,159,159, 80,200,229,158,249,243,232, 6, 15,107, 38,156,192,243, 41, 64,108, 65, +140, 60,216,185, 83,175,118,131,137,230,203, 63,243, 28,182,120,195,159, 25, 25,240, 65, 21, 35,158, 57,160,165, 84, 38, 5, 56, + 2,183,110,158, 45,105, 22,204, 41, 68,145, 90, 11, 29, 77, 65,167, 39,160,165, 9,244,234,221, 31, 59,126,222, 15, 85, 70, 46, + 56,160,213,155,150, 15, 26, 55,110,236,239,238,238,142,207, 62,251, 12,218,125,251, 80, 4, 96, 48,128,227,165,149,106, 43, 96, + 14,255,180,252,141, 2,203,221,221,253,147,214,173, 91, 79,222,185,123,175,252,155,197, 95, 21,228,198,220,167,244, 26,218, 82, +103, 48,232,159,169,178, 55,213, 32,134, 74,106,157,182,118,176,176,182,129,174,130,115,197,233,245, 96,105, 61, 68,230,191, 28, + 57,130, 32,192,113, 28,100, 50, 25,196, 98,113,165,206, 85,109, 28, 44, 0,200,203,203,195,193,131, 7,209,174, 93, 59, 88, 88, + 88,128,162, 40,180,110,221, 26, 49, 49, 49,240,246,246, 6, 0, 28, 63,126, 28,111,191,253, 54,158, 62,125, 10, 31, 31, 31,121, + 72, 72, 72,173, 4, 22,195, 48, 56,127,254,188, 53,199,113,221, 56,142, 67,102,102,221, 70,195, 50, 12, 3,181, 90,141,243,231, +207, 67,169, 84,194,213,213, 21,249,249, 86,176,118, 99,203,196,162,233, 99,230,139,247,171, 15, 63,252,208, 74, 46,151,131, 97, +140, 16, 10,133,101,194, 85, 40, 20,225,241,227,199, 24, 59,118,108,254,243,231,207,191,172,227,168, 31, 66, 32, 32, 92,242,243, +115, 81, 88,144, 7,138, 66, 61, 0, 20,234, 48,245, 3, 73,146,101,223,166, 15, 65, 16, 16, 9, 41,184,186, 56,149,117,124, 47, +117,239,170,110, 34,212, 20, 12,253,106,230,228, 27,219,126,254,213, 99,120,183, 41,152, 53,107, 22, 4, 98, 11,216, 57, 56,193, +200,112,168,239,230,140,103, 41,185, 56,255,229,125, 16,174,163, 80, 32, 26,138,110,239, 45,197,134, 69, 83,176,110,169,145,127, +147, 84,162,171, 0,140, 6,240,126,110,161, 94,144, 83,168, 1,140,122, 36, 60, 79, 64,158,154, 6,103, 52, 32, 41, 69, 5,181, +142, 69,118, 78, 33,218,248,247,219,124,229,202,149,133, 52, 77, 47, 0,112,218,156, 60, 31, 18, 18,130,235,215,175,227,230,205, +155, 48,117,148, 6, 0,107,107,107, 92,184,112, 1, 61,122,244,224, 83,161, 26,208, 52,189,170,111,223,190, 11, 92, 93, 93,165, +235,215,175,183,169, 95,191, 62, 8,130, 40,168,232, 92,181,109,219,118,225,188,121,243, 20, 35, 71,142,156, 5,224,135, 58, 94, +174,186,206,234,213,150, 81,149, 77,197,144,145,145, 54,237,199, 61, 31, 56, 89, 10, 19,148,120,254, 93,169,248,162,128,226, 2, +224,202, 94,136,186, 45,127, 62,174,231,116,103,101,225,166, 15, 83,211, 82,119, 84,241,162, 99, 31,199, 38, 98,235,214,141, 88, +180,104, 58,246,237,221, 8,150, 19,161, 80,109,128,139,155, 47,244, 6, 22, 4, 41, 68,199, 78, 93,113,243,246, 61,128,161, 49, +107,234,157, 55,174, 50,245,228,201,147,224,196,196,196,102,139, 23, 47,198, 46,119,119, 88, 89, 89, 97,246,146, 37,119, 24,134, +233,196, 63, 37,175, 71, 96,153,109,201,185,187,187,143, 80, 40, 20,223,236,221,187, 87,166, 84, 42,225,214,184,133,245,169,195, + 7,117,206,114,145, 70,149,147, 59, 33, 82,169,174,113,184, 61, 73,146, 48,174,152,141,108,163, 30, 94,167,110, 67, 34,151, 35, +182, 95, 91,112,122, 61, 58,133, 61,135, 68, 46,135, 64, 42,171,117,100, 42,115,172,202,127, 76,133,113, 77,208,235,245,182,189, +123,247, 70,175, 94,189,240,206, 59,239,148, 53, 5,250,250,250, 98,255,254,253, 24, 49, 98, 4, 34, 35, 35,225,230,230,134,166, + 77,155,162,105,211,166,184,114,229, 74,237,124,208, 82, 7,171, 95,191,126, 5, 4, 65, 68,113, 28,215, 58, 56, 56,216,186,182, + 28, 38, 1,117,254,252,121, 12, 26, 52, 8,222,222,222, 8, 15, 15,199,133,229,235, 32,144, 59, 2,164, 51, 56,150, 43,115,182, +204,233,131, 37, 18,137,186, 52,104,208, 0,105,105,233,144, 72, 36,176,179,179,133, 76, 38,131, 68, 34, 69, 80, 80, 16,187, 99, +199,142, 45, 4, 65, 44, 87,169, 84, 57,117, 16,231, 13, 29, 29, 29,127,157, 48,126, 92,123, 7, 7, 71,184,184, 40, 48,111,238, +252,254,251,246, 31,136, 78, 74, 74, 26,163, 84, 42,239,155,203, 69, 16, 4,244,122, 61, 40,138,194,241, 88, 39,168,245, 4, 10, + 82,194,240,233, 80,207, 50,177,101,106,234, 53, 77,127, 81, 13, 18, 51, 84,137, 93, 71,143, 24,120,158,164, 4,210,242, 7,132, + 50,107,139, 11,183,238,219,165,231, 22,151,245,207, 58,146,147, 5,150,227, 48,115,197, 47,252, 91,164, 18, 80, 20,181,107,246, +236,217,221, 71,141, 26, 69,136, 72,131,254,194,185, 61, 2,134, 49, 18, 95, 44,248,137,185,122,227, 26,201, 48, 70,226,157,177, +115,216, 51,151,239,147, 31,205, 90,199,248,118, 24,132, 7, 15, 30,184, 14, 30, 60,120,165,193, 96, 48, 75, 96,153,210,184,138, +235,243, 77,132, 53,224,210,165, 75, 91, 0,108,233,211,167, 79,154,133,133, 5,138,138,138, 94,234,167,232,227,227, 99, 25, 31, + 31, 47, 18,139,197,240,247,247,119, 98, 89, 54,150, 32,136,245,231,207,159,223, 89,155,107, 85,225,108,213,121,154, 6, 43,123, +102, 72,171,128,166, 86,143, 45, 23, 91,201,132,218,136,183, 98,165,214, 4,128,124,141,107,220,173,148, 49, 69,100, 6,213,166, + 85,207,230,176, 18, 90, 12, 5, 80,169,192, 34,128, 40,117, 97, 97,223, 98,141, 17,215,174, 70, 98,228,200,250,208,210, 36, 52, + 90, 18,180,129, 3, 73,137, 64, 80, 34, 76,152, 52, 25,122, 35,139, 60,149, 10, 4, 16,249,166,229, 3,134, 97,230, 13, 27, 54, + 44, 96,213,170, 85, 62,179,103,207, 6, 0,184,185,185,117, 92,184,112,225,195,127, 96, 30,172, 55,166,121,176,162,131, 85,109, +196, 2, 3, 3,119, 26, 12,134,225, 57, 57, 57,118,147, 39, 79,166,179,178,178,112,236,216, 49,252,242,203, 47,197,106, 3, 21, +154,151,109, 28, 31,175, 82,167,152, 83, 40,146, 36, 9,145,193, 0,206,248, 63,231,138,213,233,202,156, 44,161,204,162,214, 86, + 55,199,113,149,138, 42,147,147, 85,155,151,173, 68, 34,201,187,121,243,166,115, 74, 74,202, 11, 29,218,189,188,188, 0, 0,193, +193,193,184,123,247, 46,198,140, 25, 3,129, 64, 0,145, 72,132,168,168,168,194,218,132,217, 36,120, 76,163, 8, 93, 93, 93,251, +181,111,223,190,170,209,131, 53,114, 37, 37, 37,193,219,219, 27, 58,157, 14,182,182,182,200, 86, 37, 32, 41, 33, 30,197,186, 88, + 52,112,149, 34, 35, 35, 3, 18,137,196,220, 7,142, 49, 21, 92, 58,157, 14, 42, 85, 26,220,220,220,240,219,111,123,177,115,231, +206, 49, 42,149,234, 80, 93,242,154, 66,161,152, 51,112,224,192,149,195,135, 15, 23, 20,171,139,192,177, 37,130, 71, 36, 22,225, +251,239,191,111,122,249,242,229,136,205,155, 55,175,150, 74,165, 43,227,226,226,244, 53,165, 57, 0,236,218,181, 11, 0, 96,209, + 97, 9,230,141,122, 11,239, 79,223,131,245,235,143,190, 16, 87,138,162,176,108,217, 50,115,194,152, 72,107,139, 26,191,108,145, + 82,177,125, 58,183,178, 3,128,124,225, 80,156,191, 48, 6,240, 43, 25, 64,176, 97,254, 4,180, 58,176,129, 47,173, 43,160, 67, +135, 14,190, 11, 22, 44, 16,154,250,196,185,213, 95,101,164,105,154, 5,128,102,173,187,253,207,169,236, 7, 60,125,250, 20,235, +215,175,135, 90,173,134, 64, 32, 16, 25, 12, 6,179,174,209,187,119,111,244,235,215,175,172,153,208,209,209, 17, 52, 77,195,104, + 52,242,226,170,150, 78,214,160, 65,131, 22,176, 44,203,177, 44,187,216,180,223,207,207, 79,230,236,236,124,107,227,198,141, 14, + 70,163, 17,115,230,204,177,205,202,202,178,157, 49, 99,198,124, 0, 59,171, 40, 39,106, 51,187,186, 89,211, 52, 84,214,167,139, + 32,136, 6,150,150, 54,200, 68, 26,242, 28, 13,190,121, 14,198,156,243,170,143,162,234, 37,183,105, 38, 99, 12,222,100,129, 30, + 54, 50,107,128,229, 26, 87,249,158, 99,217,243, 49,209, 15,123,121,184,123, 83, 39, 78, 93,197,160, 33, 35,160,213, 19,208,210, + 36, 8, 74, 8,130, 18, 33,160,125, 39,120,121, 55, 1,203, 2, 15, 35,195,104, 3,203,254,249, 38,165,125,249,121,176,230,124, +127, 9, 11, 87,124,135,113,239,244,195, 7, 31,124,240, 79,206,131,245,198,246,193,170, 74, 92, 77,180,179,179, 27, 59,105,210, + 36, 89,112,112, 48, 86,172, 88, 33,184,112,225, 2, 29, 18, 18, 98,100, 24,102,142, 82,169,252,177, 54, 23, 37, 73, 18, 13,246, +254, 1, 55, 87, 87, 60,233, 31,240,130,115,117,173,181, 7, 88,157, 14,125,226,243,107, 29, 25, 83, 83,150, 73, 88,153,196, 85, + 53, 83, 41, 84, 87, 3,175,116,222,171,143, 63,254, 24, 59,119,238, 68,167, 78,157,208,168, 81, 35, 8, 4,130,178,102,169,186, + 56, 88, 38,212,122,244, 96,133,218,124,253,250,245,113,255,254,125,216,216,216,224,215, 95,127, 69, 61, 15,119,140,239,235, 5, +189, 94, 15,131,193, 0,181, 90,109,114,176,106, 12, 40,203,178,209,199,142, 29,243, 30, 53,106, 20, 39, 16, 8, 8,157, 78, 7, + 0,216,180,105, 83, 70,109,103, 92, 47,173, 13,189, 35,145, 72,126, 30, 51,102,140, 85,211,166, 77,145,158,158,142,123,247,238, + 96,254,252,121,247,132, 66,129,182,255,128,129,221,125,124, 90, 96,250,244,233,164,175,175,239,162,249,243,231,207,241,240,240, +248, 32, 37, 37,229, 96, 77, 34,107,255,254,253, 0,128, 15,191,127, 4,189,190,164, 96,222,182,109, 27, 92, 93, 93, 95, 56,247, +217,179,103,102,197,189, 42,236, 62,118, 13, 0,208,245,189, 37, 0, 26, 1,165,115,100,141,254,108, 35, 95, 66, 87, 86, 42, 26, +141, 28, 73,146, 68,114,114, 50,109, 97, 97, 65,216,219,219, 11, 36, 18, 9,116, 58, 93,153,208,122,250,244, 41, 78,159, 62,141, +148,148, 20,216,219,219,147, 54, 54, 54, 48, 26,141,185,230,230,249,242,163, 5, 77,130,138, 23, 87,181,199,181,107,215,182, 0, +216, 98,218,238,213,171,215, 84,130, 32,230, 26, 12, 6,235,157, 59,119,218, 90, 91, 91, 19,167, 79,159,214,111,223,190,189,136, +162,168, 92, 0,235,170, 43, 83, 94,215,236,234,213, 56, 95, 96,140,120,146, 91, 20,239, 41,148, 43,216, 72, 45,113,251,179,228, +121,205,114,201,198, 46, 68,139, 22,198,145, 25,209,183,198, 27,226, 58,101,166,103, 16, 12,199, 85, 57,137, 83,110,126,254, 15, + 63,239, 62,240,233,177, 35,123,234, 75,173, 45, 48,238,253, 79,112,254,226, 13,136, 37, 22,184, 23, 26, 1, 61,205,224,121, 82, + 42,198,188, 55, 14, 10,103, 7, 80,197, 74,149, 78,175,255,241, 77, 74,251, 23,230,193,106,219, 9,183,142,174,195,254,216,250, + 72, 93,177,226,159,158, 7,235,141,115,176, 42, 69,187,118,237,172,242,242,242,190,255,252,243,207,101,106,181, 26, 89, 89, 89, +200,206,206,198,189,123,247, 46, 24, 12,134, 79,171, 27,165,129,146,213,182, 31, 84, 44, 20, 41,138,130,189,147, 51, 36,114, 43, +112,122,125,153,115, 37,178,176, 4,171,211,129,165,245, 64,213,205, 57,149,114, 18, 4,241,146,107, 85, 11,113,245, 2,167,201, + 17,171,108, 82,209,122,245,234, 97,245,234,213, 47, 77,211, 96, 78, 56,129,146,209,130, 28,199,181, 54, 57, 79, 28,199,181,118, +117,117,237,103,230,200,193, 74, 57, 89,150, 69, 96, 96, 32, 46, 92,184,128,251,247,239,131, 36, 73, 12, 24, 48, 0, 4, 65,192, +198,198, 6, 2,129,160, 76,204,153, 6, 4, 84,199,201, 48,204,251,191,252,242,203, 23,127,254,249,231, 87, 51,103,206,148,117, +235,214,205,212,207, 43, 19, 37,107, 60,214, 42,156, 44,203, 46,141,138,138,178, 50, 26,141, 88,181,106, 21, 66, 67, 67,213,207, +158, 61,251, 92,165, 82,253, 12,128,203,205, 43, 28, 23, 23,151,176,245,235,175,191,182,234,217,179, 39,130,131,131,165,245,234, +213,251, 26,192,193,154,226,126,239,222, 61, 80, 20, 5, 99, 78, 34,166,207, 59, 0,185,133, 16,143, 31, 63, 70,118,118,118, 89, + 94,171,166, 41,169, 82,206,202, 48,113, 68, 32,190,217,121, 18,247,131,226, 64,184,142, 66,190,112, 40,186,190,183, 4,123,191, +157, 9, 63,191, 93,117,226,172, 5,254,115,156, 33, 33, 33,135,183,108,217,242,241,132, 9, 19, 68, 28,199, 49,137,137,137, 6, + 0,132,171,171, 43, 21, 18, 18,194,158, 60,121, 18, 26,141, 6, 30, 30, 30,164,187,187, 59,113,225,194, 5, 54, 38, 38,230, 30, +199,113, 11,204, 13,103,121,113, 37, 20, 10,161,209,104,204, 21, 87,124, 26, 85,143, 37, 71,143, 30, 85,104,181, 90,136,197, 98, + 28, 58,116,136,222,179,103,207,195,130,130,130,174,225,225,225,154,186,112,214, 97,154,134,106, 57, 11,115,201,211, 23,206, 63, +108,109,232,241, 19, 49, 51, 45,187,203,255,220,102,194,241,144, 75, 75, 71,105,187, 54,169,242,235,223,146, 69, 92,241,201,170, + 56,227,226,226,244, 86,190,190,111,207,254, 98,241,149, 21, 75,151, 88,173, 89,251, 13, 30, 12, 26,137,188,252, 98,232,244, 12, +104, 35,139,165, 75,151,195,217,222, 22,118, 34,186, 40, 79, 67,188, 29, 19, 19, 67,191, 73,233,254,138,243, 96,253, 21,225,124, +163, 80,163,250, 40, 46, 46, 94,209,164, 73, 19,113, 76, 76, 12,158, 61,123,134,216,216, 88, 48, 12,243, 52, 53, 53,117,112, 93, + 47, 74,146, 36,108,108,108, 32, 22,139,209,241,126, 42,196, 34, 17,196,150, 37,203, 83,245,137,207, 7, 56, 14,164, 88, 82,107, +206,138,115, 94,189,202, 40, 34,134, 97,202,102,104, 47,191,158, 97,197,209,106,181,117,174, 72,146,156,119,231,206, 29,235,196, +196, 68,112, 28,135,163, 71,143, 90,191,243,206, 59,243,234,226, 94,113, 28,135,236,236,108,176, 44, 11,161, 80,136,158, 61,123, +194,207,207, 15, 69, 69, 69, 96, 24,166,172,249, 82, 36, 18,213,106, 20, 97, 70, 70, 70, 49,128,101, 6,131,225,199, 69,139, 22, + 45,107,217,178,229,228,207, 62,251,140, 68, 29, 7, 69, 16, 4, 97, 52, 26,141, 56,116,232, 16,142, 28, 57, 82,200,113, 92, 19, +149, 74,149, 86,206,189,219,123,247,238,221, 11, 35, 70,140,120, 26, 23, 23,103,157,159,159, 15,212, 48,135, 77,105,222, 68,163, + 70,141,192, 48, 12,190,153,238,129,194,194, 86, 96, 24, 6, 70,163, 17, 22, 22, 22, 47, 44, 65, 84,151,169, 52,202, 35,232,199, +227, 37,113, 41,215, 7, 11, 0,222,153,197, 55, 15, 86,225,130,206, 95,184,112,225,217,213,171, 87,207,155, 53,107, 86,251, 9, + 19, 38, 8, 69, 34, 17,155,154,154,106,220,183,111, 31,209,184,113, 99, 82, 40, 20, 18,231,207,159,103,131,131,131,239, 26,141, +198,111, 0,212,106, 41,146,242,226,138,239,115,245, 90,113,112,212,168, 81, 19, 70,142, 28, 41,243,245,245,149,252,242,203, 47, +121,106,181,186, 42,113,245,146,121, 89,213, 52, 13,175,105, 2, 82, 0,128, 74,165,250,113,249,146,235,211,199, 53, 26,219,120, +178,195, 91,184,168,206, 64,174,144, 34,173,109, 73,248,122, 82, 40,206,139,115,190, 24,124, 52, 86,165, 82,237,170,142, 39, 34, + 34, 34,156, 36,201,192,247, 39,126,120,108,210,132, 73,110, 95,125,246,169,240,244,133, 43, 96, 12, 58,220,184,116, 9,142,114, +146,161,213,233,202,124, 3, 57, 44, 60, 60,252,141,235,127, 85, 58, 15,214,116, 0, 99,150, 44, 89,178,111,250,244,233, 96, 89, + 22, 87,175, 94,197,214,185,115,177,148, 97,198, 91, 1,197,159,150,156,195,227,117, 9,172,128,128,128,183,212,106,245,175,122, +189,222,151,101, 89,241,181,107,215,160,213,106, 17, 19, 19,163, 97, 89,246,240, 43, 92, 51,113,192,128, 1,100,197,245,226,170, + 16, 57,230,118,174, 75,236,221,187,247,107,227,100, 89, 54,165,252, 26,102, 85,241,150,223, 54, 26,141, 41,230, 4,148,101,217, + 53, 29, 59,118,124,105, 95, 29, 11,177,248, 94,189,122,209, 21, 69, 87,101,191,203,197, 63,197, 92,254,172,172,172,116, 0, 31, +177, 44,187,241,131, 15, 62, 88, 2,224,105, 29, 5,214, 74, 31, 31,159, 69, 37, 63,137, 21, 74,165, 50,173, 18, 81,151,233,230, +230, 54,185, 94,189,122,101, 11, 64,215, 20,247, 62,125,250,208, 53, 45,242, 92,222,185, 98, 89, 54,165,174,153,118,254, 71,195, +145,168,204,130, 90, 58, 2,231, 47,140, 42,235,131,117,100,211,108,248,249,237,229,223, 36,149,227, 70,113,113,241,141,160,160, +160,174, 91,183,110,157,255,241,199, 31,183, 27, 61,122,180, 32, 48, 48, 16,103,206,156, 97,174, 94,189,122, 79,163,209,172,169, +173,176, 34, 8,162,168,226, 51, 84, 77, 37, 68,203, 39, 67,237,112,233,210,165,217,157, 58,117, 90,114,240,224,193,231,158,158, +158, 18,130, 32,140,102,138,171,215, 62, 77, 67,117, 66,142, 42,210, 14,217, 59,246,227,211,190, 51, 63,244,236,215,201, 95,234, +209, 80,225,250, 56, 49, 27,201, 81, 23, 52,113,215,182, 38,112,218,236, 33, 48,195,113, 15, 11, 11,139,244,246,246,110,242,227, + 47, 59, 63, 20, 81, 84, 31,150,227,252,190,156, 49, 30, 36, 65,132,211, 12,115,161,160,176,240,231,154,250,132,254,215, 33, 17, +137,198,207,152, 49, 3,191,253,246, 27,142,109,220,136,126, 41, 41,216, 47, 18, 65, 38, 18, 97, 27, 77, 79, 3, 47,176,234,132, + 42,149, 72,147, 38, 77,246,231,228,228,140, 44, 40, 40, 48, 26,141, 70,134, 32, 8, 35, 65, 16, 26,150,101,151,179, 44,187, 29, + 37,157,208,234,100, 75,190, 34,120, 78,158,243,111,229, 20,201,172,206, 17,148,200,179,202, 66,156,161, 19,105, 77, 97, 63,254, +126,214,200,217,213,218,218,250, 51,150,101, 81, 84, 84,180,209, 76, 97,197,223,207,127,136,179, 71,143, 30, 27, 72,146,108,207, + 48,204,238,171, 87,175,238,120, 21,206, 90,118,126,175, 77, 56, 5,174,174,174,147, 56, 59,249, 96, 24, 4,141, 56,154,122, 76, +209, 57,167, 75,157, 43,150, 79,119,243, 56, 31, 63,126,204,217,219,219, 35, 39, 39, 7, 71,154, 54,125,225,152, 21,176,173, 10, + 7,235,111,109, 34,228, 56, 46, 0,128,147,169,254, 15,224, 49, 0,127, 0, 50, 0, 58, 0, 69, 0, 28,203,253, 37,187,244,152, +233,248,117,130, 32, 12,175, 33, 28,255, 26, 1,215,146,231,228, 57,121, 78,158,147,231,228, 57,121, 78,158,243, 21,133,205, 32, +148, 24, 59,220,188,121,243,230,115, 28,215,127,222,188,121,243,203,109,151, 29, 47, 57,157, 27, 84,225,120,192,107, 10,135,217, + 31, 94, 96,241,156, 60, 39,207,201,115,242,156, 60, 39,207,249,159, 16, 88,213,125, 87,245,187,220,247,223, 42,176,136,106,110, +210,131,191,248, 70, 63,224, 57,121, 78,158,147,231,228, 57,121, 78,158,243,255, 29,103, 77,220, 15, 42, 19, 88, 4, 65,156,230, + 56,110,112,249,239,114,199, 7, 3,128,233,152,233,119,249,227, 4, 65,252,241, 58, 4,214,191, 5,188,186,231, 57,121, 78,158, +147,231,228, 57,121, 78,158,243, 85,133,205,127,206,193,170,114, 20, 33,119,232, 16,149,234, 3,107,177,204, 66, 4, 0,122, 77, + 49,237, 30,131, 2, 98,212, 40, 6, 60,120,240,224,193,131, 7, 15, 30,127, 51, 8,130, 56, 61,111,222,188, 5,255,133,176, 10, +170, 18, 87, 89,109, 45, 28, 5,186,220, 38,140,145,110, 6, 0, 2,146,123,148,213,214, 46,150, 59,116, 40,235,117,139,172,254, +253,251, 47,224, 56,206, 69, 40, 20,254,225,234,234,122,117,199,142, 29, 6, 62, 27,253,253,224, 56,174,198,197, 26,253,253,253, +237,116, 58,221, 58,150,101,123,150,174,243,119, 85, 36, 18,125, 17, 17, 17,145, 67, 16, 68,149, 67,162,235,215,175,191,207,219, +219,187, 9, 87, 2, 0,120, 97, 94, 46,211, 62,211,241,164,164,164, 39, 41, 41, 41,239,153, 27,246,122,245,234,121, 73,165,210, +137, 4, 65,248,148,242,196,104,181,218,221,201,201,201, 9,255,223,210, 81,161, 80,200, 56,142, 27, 46, 20, 10, 39,216,219,219, +183,203,204,204, 92,170, 84, 42,191,123,133,119,196, 28, 91, 91,219, 49,182,182,182, 13,114,114,114,226, 10, 10, 10, 14, 2, 88, + 15,160,198,231,116,249, 12,183, 14,221, 6, 6, 46,190,126,230,218,138,175,183, 42,239, 86, 60,190,116,142,194,161,103,175,206, +139,255,252,227,246,242,160,173,202,218,174,109, 73,150,126,128,146, 17, 99,166, 14,174,255,214,116,241, 5, 48,151, 97, 24, 33, + 73,146,223,165,165,165,221,252,183,231,165,166, 77,155,126, 37, 22,139,167,145, 36, 25,151,158,158, 62, 73,165, 82,165,188, 38, +106,210,211,211,211, 42, 49, 49,177, 16,230, 77, 94,204, 3, 64,135, 14, 29,210,105,154,118,174,238, 28,145, 72,148,113,247,238, + 93,151, 55, 48,250, 89,166,166, 63, 0, 25, 0,168,210,109,125,233,119,122,185,125,233, 85, 28,255,231, 5, 86,170, 15,172, 5, +186,220, 38,217,233, 15, 71,103,170, 34,222, 5, 0, 39,133,239, 65, 7,151,230, 7, 82,125,196,180,107,211, 17,114,161,133,224, + 7,138, 18,250,106,245, 58, 71,161, 64,152, 69, 27, 13, 17,164,158,155,158,246,248, 88,146, 57, 23, 30, 60,120,112, 19, 0, 54, +126,126,126, 33, 55,110,220,104,247,221,119,223, 41,142, 28, 57,210, 58, 44, 44,108,236,144, 33, 67, 78,113, 28,119,238,244,233, +211,154, 90,197, 38, 48, 80,224,156,103, 63,158, 18, 8,134, 0,104,205,113, 0, 8, 42,138, 53,208,127,100,216,101,239, 70,201, + 28, 45,117,203,216,126,246, 77, 8,150,254, 82, 72,113, 93, 13, 12,113,131, 35, 69,235,238,134,231,196,154, 47, 0, 20,189,197, + 2,226, 39, 0,208, 27,185,201,201,201,170,139,175,114, 94, 21, 47,240, 62, 0,246, 18, 4, 33, 4,176,141, 97,152,227,233,233, +233,145, 48, 99,210, 78,115,208,188,121,115, 39,130, 32,162, 54,108,216,224,208,190,125,123,138,101, 89, 92,190,124,249,189, 69, +139, 22,245,107,209,162, 69,203,210, 76, 95, 41,188,189,189,155, 92,186,116,169,205,217,179,103,209,169, 83, 39,176, 44, 11,150, +101, 97,107,107,139,147, 39, 79,162,125,251,246,101,251, 92, 92, 92, 16, 24, 24,136,148, 20,243,222,229, 13, 26, 52, 24,222,162, +101,155, 89,159,127, 57,215,197,217,193,209,202,200, 24,233,212, 84,149,219,198,239,190,233, 32, 20, 10,127,136,143,143, 63, 94, +151,138,146,135,135,199,104,161, 80, 56, 24,128, 79,233,190, 24,131,193,112, 58, 37, 37,229,128,185, 5,121,235,214,173,175,147, + 36,249, 86,109, 46,204, 48, 76,210,253,251,247,187,212, 37,141,220,220,220, 70,185,185,185,253,210,161, 67, 7, 11, 95, 95, 95, +136, 68, 34,172, 93,187,118,142, 25, 2, 75, 0, 96,142,133,133,197,104, 75, 75, 75,239,162,162,162,103, 26,141,230,136, 88, 44, +238,253,253,247,223,215,235,220,185,179, 85,122,122, 58, 65, 81,148,203,169, 83,167,198,111,222,188,185,159,209,104,236, 85, 83, +222,202,141, 99, 23, 75,132,205,186,230, 62,187,178, 24,192,128,138,199,141, 90,233, 4, 74, 88,111, 48,197,133, 39,151,138, 54, +179, 11,104, 15, 15,143,239, 93, 92, 92, 62,208,104, 52, 90,130, 32,184,210,143,169,150, 11, 0,208,235,245,185,177,177,177, 77, +171, 35,122,171,131, 93, 40, 69, 82, 85,206,221,196,176, 76,202,243,187,185,109, 95, 67, 5,230,179,200,200,200,145, 2,129,128, +104,211,166,141, 37,128,126,230,138, 11,133, 66,209,132, 32,136,133, 28,199,133,168, 84,170, 31, 0, 48,110,110,110, 61, 56,142, +251,170, 52,190,107,149, 74,229,149,210, 60,240, 67,163, 70,141,134, 62,125,250,116,155, 82,169, 92, 89,215,240, 54,106,212,104, +250, 39,159,124,178,100,218,180,105,178,236,236,108,207,190,125,251,254,174, 82,169,186,190,202, 61,240,243,243, 19,166,165,165, +205,113,114,114,154, 25, 16, 16,160,120,248,240, 97, 90, 98, 98,226, 38, 87, 87,215,245,225,225,225, 53, 10,246, 86,173, 90,185, + 9, 4,130, 15, 0,140, 47, 45, 64,247, 3,216, 29, 17, 17, 17,247,255, 65, 96,209, 52,237,124,113,229, 98, 16, 20, 5,105,215, +222, 96, 89, 22, 89,235,150,192,152,147, 5,199,149,155, 96, 52, 26,209,187,119,111,231, 55,212,185, 10,254,175,133,185, 82,129, + 37,150, 89,136, 24, 35,221, 44, 83, 21,241,110,187,254,155,108, 0, 32,248,236,172,119, 29,220, 91, 60, 16, 11, 44, 98, 37,214, +210,163,111, 15,233,237, 59,114,112, 32,225,161,112, 70,138, 42,195,229,231,253,231,250,159, 62,119,229, 40, 74,230,165,168, 17, + 5, 5, 5,171, 60, 61, 61,157, 46, 93,186,244, 92, 44, 22,203,164, 82, 41, 49,106,212, 40,217,216,177, 99,155, 95,190,124,217, +251,236,217,179, 35,135, 14, 29,122, 86, 36, 18,253,113,248,240,225, 26,215, 39,115,110, 57,188, 57, 89, 40, 57, 60,108,248,128, +183, 6,245,113, 22,123,186, 58,129,101,165,120, 28, 79,215,191,112, 35,188,255,153,179,231,191,100,124,134,143,202,140, 57,126, +223,220,155,211,162,133,181,173,140,228,102,203,196,220,152,238,157, 26,121, 13, 25,208,137,104,208,176, 1, 98, 99, 98,189,175, + 92, 11,249, 64, 66, 61, 76,208,232,137,253, 26,150,216, 16, 29, 93,144, 87, 29,151, 88, 64,236,138,138,126,234,198, 48, 12,214, +126,179,250, 2,203,145,101,179,171,155, 62,166, 89,200,191,253,246, 91,232,116, 58, 4,248,182,216,133,255,205, 27, 99, 14,126, +127,248,240,161, 67,113,113, 49,206,158, 61, 59, 95,165, 82,205, 63,119,238,156, 42, 57, 57,249, 75,149, 74,181,255, 53,212,238, +183,108,219,182,205,161, 93,187,118, 20, 77,151,204,111,218,185,115,103,106,193,130, 5,246, 65, 65, 65, 27, 1,140,169,166,112, +225,206,158, 61,139, 95,127,253, 53,235,155,111,190, 73, 1, 0, 71, 71, 71,247,247,222,123,207,105,239,222,189,153, 27, 54,108, + 72,225, 56, 14, 14, 14, 14, 30,163, 71,143,118, 50,183, 35,161,135,135, 71,131,150,173,125,103,237,222,181,171,125,126, 78,142, +246,167, 13,219,194,117, 2, 73,177,167, 79, 19,209,226, 37, 43,109,150,127, 61,255, 35,154,166, 31,164,164,164,196,155, 27, 73, + 87, 87,215,250, 18,137,228,232,130, 5, 11, 90,118,233,210, 69,232,236,236,140,244,244,116, 60,126,252,184,229,173, 91,183,134, + 31, 63,126,124,142, 78,167,123, 59, 45, 45,173,198,202, 4,199,113,141, 79,172, 93,237, 44,113,112, 4,107, 48,192,174,149,111, +217, 49,229,229,115, 96, 13, 6,176, 6, 3,234, 13, 26, 94,230,228,245,232,209,163, 78, 83,146,187,187,187,187, 53,110,220,248, +183,121,243,230,137,116, 58, 29, 34, 34, 34,112,231,206, 29, 54, 35, 35,163,166,137,108, 5, 4, 65,156, 95,178,100,137, 71,151, + 46, 93,172,178,178,178,192, 48,140,227,241,227,199,167,251,249,249, 89,123,120,120,136,247,236,217, 99, 90, 33,192,222,219,219, +219,126,236,216,177,250, 95,127,253,117, 14,128,111,170,114,174,242,158,177,139, 85,148,119,255,166,109, 39, 34, 77,112,174,255, +231,125,241,167,173, 55, 89,230,100,245,247,246,182,202, 79,149,205,149, 91,183,180,207, 79,189, 48,183,191,183,247,206,179,113, +113,230, 44,154, 78,186,187,187,127, 63,112,224,192,247,182,109,219,102, 17, 19, 19, 99,225,227,227, 3,150,101, 97, 52, 26,193, + 48,140,105,221, 77,148,159, 48,184, 42, 80, 36,229,113,235,104,180,179, 76, 38, 43,123, 14, 77,223,106,181, 26,253, 38,116,120, + 45, 47, 91,150,101,197,166,124,109, 52, 26,165, 0,132, 0,204,157,192,114,217,237,219,183, 71,253,249,231,159,227, 86,174, 92, +217, 88,165, 82,125,194,178,236,226,152,152,152, 64, 0,240,241,241, 17, 3,184,162, 80, 40, 38,125,252,241,199,211,102,204,152, +129, 9, 19, 38, 44, 86, 42,149,171,234,250,220,139,197,226,175, 63,254,248, 99,153,193, 96,128, 76, 38, 3, 77,211, 13, 95, 37, +254, 62, 62, 62,162,156,156,156, 35,203,150, 45, 27, 60,108,216, 48,211, 18, 94,174,215,175, 95, 15,250,226,139, 47, 58,249,249, +249,141,168, 74,100,249,249,249,249, 2, 88,238,229,229,213,111,194,132, 9, 84,231,206,157, 81, 84, 84,132,243,231,207, 47, 60, +122,244,232, 66, 63, 63,191,219, 0, 22,135,135,135, 95,125,211, 69, 22, 37,183,194,227,183,123,192, 59, 38, 27, 0,144,246, 67, +201,210,144,214, 95,127,203, 91,124,255, 5,129, 85, 19,138,139,139,253,230,207, 26, 15,146, 44,169, 37, 54,106, 80, 31, 65, 11, +166, 18, 39, 78,159,243,171,193,222,220,192, 48, 76, 99,123,123,251, 47,179,179,179,165, 27, 55,110,148,166,166,166, 54, 59,114, +228, 8, 23, 25, 25, 9,145, 72, 4, 27, 27, 27,244,236,217, 83,210,191,127,255,134,183,111,223,174,127,244,232,209, 97, 3, 7, + 14,220,125,230,204,153, 83, 85,241, 58,180, 28,210,216,209,201,233,218,183, 43,167,216,183,108,224, 13,189,193,128,148,140, 84, +112, 16,195,213,217, 18,227,134,183, 17,117,110, 43,106,180,126,235,165,171, 4, 57,180, 91, 70,244,201,232,154,226,216,197,207, + 34,184, 71,199,183,252,135,246,235, 68, 54,242,105, 14,145,196,226,127,181, 40, 63, 63,180,242,243, 35,166, 78, 45,108, 16, 25, + 30,185,232,236,165,123, 11,108, 68,198,176,155,225,197,237,170, 46,105, 33, 49,173,157,246,246, 59,239,162, 73,147, 38, 47,188, +204, 77,191,159, 63,127, 14,130, 32,144,149,149, 5,150,131,184, 14,105,131,187,119,239,162, 77,155, 54,232,219,183, 47,198,140, + 25,163, 56,126,252,248,239, 91,182,108, 9, 76, 77, 77,157,250, 42,153,133, 97,152,206,126,126,126, 20, 77,211,160, 40, 10,217, +217,217,136,143,143,135,183,183, 55,197, 48, 76,247, 26,132, 6, 58,117,234,132,111,190,249, 38,229,250,245,235,126, 0,208,181, +107,215,240,246,237,219, 59,109,216,176, 33,229,230,205,155,254, 0,208,169, 83,167,176,182,109,219, 58,153, 27, 38, 11, 11,139, + 15, 63,251,252, 11,167,252,156, 92,141,161,176,144,150,179,140,209, 90, 42, 36, 10, 50,179,243, 18,146,173,139, 63,156, 54, 75, +240,245,188,217, 31, 2, 48,171,205,222,213,213,181,126,179,102,205,130,119,238,220,233,236,224,224,128,188,188, 60,100,103,103, + 35, 56, 56, 24, 44,203,162,127,255,254, 18,191,214,173,253,214,111,216,112, 7, 64, 71,115, 68,150,196,193, 17, 71, 2, 75, 30, +141, 81,113,217,101, 14,203,217, 49, 67,202,206, 25,155,152, 15, 0,144, 74,165,117, 94,214,135,227,184,142,157, 59,119, 22, 1, +192,156, 57,115, 10,212,106,117, 16, 65, 16,191,171, 84,170,212, 26,254, 58,103,209,162, 69,238, 13, 26, 52,240,252,253,247,223, + 81, 84, 84, 4, 0,206, 13, 26, 52, 64,227,198,141,153,107,215,174,161, 73,147, 38,176,178,178,194,181,107,215,112,247,238, 93, +248,250,250, 90,137, 68,162,119,105,154,174, 84, 96,117, 27, 24,184, 88, 34,108,214,181,105,219,137,144, 91, 43,176,115,223, 1, + 60, 14,221,221, 85,103,120,180,120, 62,174,189, 79,113,146,137, 25, 73,150,243,188,218,118,119,104,212, 98, 24,222,242,143,112, +212, 49,215,227, 23,245,105,176, 70, 32,213,238, 89,186, 94,149, 93,149,184,114,117,117, 93, 55, 96,192,128, 81,219,182,109,179, + 5,128,251,247,239, 35, 45, 45, 13, 78, 78, 78,144, 74,165, 16, 10,133, 16, 8, 4,181, 90, 42, 75, 38,147, 65,165, 82,193, 84, +113, 96, 24, 6,133,133,133,101,139,134, 47, 93, 10,114,233, 82,243,220, 38, 87, 87,215, 46,126,126,126,123, 61, 60, 60,234,149, +223,175,211,233, 48,117,234, 84,168,213,106,248,250,250,118,118,113,113,209, 17, 4, 1,150,101,145,158,158, 94,116,255,254,253, + 62, 74,165,242, 94, 21,181,119, 77, 90, 90, 26,166, 77,155,134,164,164,164, 25,191,253,246, 91, 34, 65, 16, 82,177, 88,108, 58, + 46, 86, 40, 20, 77,154, 52,105,242,253,148, 41, 83,240,252,249,115,196,198,198, 6,191, 74,165, 74, 34,145,168, 25,134,113, 54, + 26,141,208,104, 52,232,223,191,191,148,101,217,116,161, 80,248, 40, 47, 47,111, 92, 74, 74,138,202,220,114, 70,161, 80,184,170, +213,234,109,179,102,205, 26, 24, 24, 24,136, 71,143, 30,225,236,217,179, 24, 58,116, 40,186,119,239,142,133, 11, 23, 14, 90,188, +120,241, 28, 0, 85, 85, 6, 14, 31, 57,114,196,203,195,195,163,108, 73, 36,107,107,107,124,248,225,135, 24, 63,126, 60,206,156, + 57,211,105,245,234,213, 71, 2, 3, 3,157,175,189, 66, 75,197,127, 1,146,182,157,224, 29,147,141, 56, 31,135,146,214,129, 82, +161,101,218,134,187, 31,175,108,254,205, 2, 75,175, 41,166, 5, 36,247,200, 73,225,123, 48,248,236,172,178, 38, 66, 24,185, 71, +122,186,152, 46,177,205, 57, 20, 20, 27, 33,147,144,120,174, 42,196,131,184,172,202,168, 30, 84, 40,252, 63,223,180,105, 19,214, +174, 93, 59, 64,163,209, 20,197,199,199,171,138,138,138,212,227,198,141, 35,132, 66, 33,110,221,186,133,132,132, 4,180,106,213, + 10,182,182,182,232,210,165,139,168,111,223,190,245, 38, 77,154,244, 62,128, 83,149,113, 98,228, 72, 74,148, 72,156, 92,183,114, +180, 61, 65,197, 34, 54, 41, 15, 13, 61,218,193,193,166, 30, 82, 51,139, 16,246,240, 12, 98,159,253,129,134, 30,245, 49,245,189, +134,182,223,109,207, 60, 13,191,169, 13, 17,254, 66, 63,175,151,134,132, 74, 69, 76,192,210, 77,145, 96,212,207,192, 25,146,192, +209,105, 47, 23,238,182,245,208,172,141, 11, 44,196, 78,228,253,152,239, 2,170,139,187,206,200,125,181,106,197,178,159, 91,251, +250, 35, 63, 63, 31,155, 55,111, 46, 19, 86, 28,199,149,213,184, 59,116,232, 0,131,193,128,159,127,254, 25, 6,182,196,254,175, + 46,156, 21, 48,182,125,251,246, 7, 56,142, 19,203,100,178,180, 54,109,218,120,126,242,201, 39,130,209,163, 71, 67,163,209, 76, +217,185,115,231,185,180,180,180, 99,181,228, 44,105, 70,121,235,173, 46,221,187,119,151, 81, 20, 5,154,166,145,159,159,143,148, +148, 20,196,199,199,195,209,209, 17,248, 95, 95,152, 42, 57, 43,174,133,200,113, 28,103,138,127,121, 33,102,186, 47,230,132,147, + 32,136,102,118,182,118,150, 63,173,223, 22,234, 36,161, 8,199,122,110,132,200,218, 86, 64,202,173, 36, 28, 69,105, 60,235,185, + 89, 17, 4,209,172,138,104, 85,228, 36, 36, 18,201,209, 93,187,118, 57, 11,133, 66, 48, 12, 3, 39, 39, 39,196,199,199, 35, 47, + 47, 15,133,133,133,136,127, 20, 3, 47, 15, 15,124, 58,117,178, 98,217,183, 27,142, 2,104, 91,161, 16,123,121, 49,110,131,161, + 98,152,171,178,192, 97,102, 56,171,114, 72, 18,148, 74, 37, 44, 44, 44,224,227,227, 35, 15, 9, 9,185,161, 84, 42, 83,107,226, +148, 74,165,239,118,238,220,217,106,223,190,125,240,247,247,135,141,141, 13,174, 92,185,130,251,247,239,131,166,105,178,176,176, + 16,114,185, 28,107,214,172, 65,253,250,245,145,159,159,143,196,196, 68, 7,161, 80,232,104, 18, 36, 21, 57,175,159,185,182, 34, + 55,238,202,226, 52,234, 92,255,157,251, 14, 96,202,216,209,112, 53,198,221,176,107, 72,174, 24, 48,168,211,215,148,176,222, 96, + 75,171,150,118,141, 91, 14,131, 72, 44,199, 39, 95, 45, 71,236,131,147,118,197,133,247,103, 48,134,228,122, 75,215, 31,250,180, +146,184, 19, 0, 72, 55, 55,183,201, 63,254,248,163, 85,153,226, 34, 73, 8,133,194, 23,132,149,105, 49,246, 42,238,233,131, 74, + 42, 15,160,105, 26, 52, 77,131,101, 89,100,102,102,162,176,176, 16,118,118,118, 37, 39, 44, 1,176, 4, 4,136, 42, 5,203,131, +114,225, 25,119,224,192,129,122, 22, 22, 22, 47,157,148,156,156,140,252,252,124, 88, 90, 90,194,214,214, 22, 6,131, 1, 70,163, + 17, 58,157, 78,222,189,123,247,233, 0,238, 85,198, 73, 81,212,236,105,211,166,117, 62,125,250,180,247,202,149, 43, 65,211,244, +186,204,204, 76, 76,153, 50, 5, 44,203,162, 75,151, 46, 29, 56,142,123, 60,107,214,172, 18,187,107,217, 50, 67, 81, 81,209,199, +117,205, 75,206,206,206,205, 91,183,110,109,119,241,226, 69,116,233,210, 5, 58,157, 14,211,167, 79,183,158, 60,121,178,245,237, +219,183,157, 54,110,220,184, 39, 37, 37,165,119,117,156,126,126,126,194,244,244,244,185,221,187,119,159,211,187,119,111,155,172, +172, 44, 72, 36, 18, 28, 60,120, 16, 63,253,244,211,159, 52, 77, 47, 58,114,228,200,170, 29, 59,118,244, 31, 54,108, 24,118,236, +216, 49, 75,165, 82,173, 69, 73,179,105, 69, 78,183,122,245,234, 33, 42, 42, 10,118,118,118,112,116,116, 68,126,126, 62,238,222, +189,139,224,224, 96, 52,107,214, 12, 4, 65,216,149,150,105,198, 87,121,142,106,137,191,157,179,108,141,213,114,121, 23, 0,152, +234,213,180, 89,179,226,187,185,185, 13,179,181,181,157,193,113,156, 32, 55, 55,247, 71, 11, 11,139,195,213, 44, 19,196, 47,244, +108,166,192, 50,165, 75,119, 0,215,220, 99, 80,144,213,214, 46,214,193,165,249, 1, 7,247, 22, 37, 55,209,200, 61,162, 36,118, +177, 46,161,197, 5, 0, 64, 27, 56,220,126,148,139,168,167,233,136,122,146, 6,185,180,230, 90,183,131,131, 3, 58,117,234,132, + 19, 39, 78, 32, 57, 57, 89,190,102,205,154,198, 52, 77,211, 67,134, 12, 81,190,245,214, 91,185, 93,186,116,129, 80, 40,196,189, +123,247, 80, 80, 80, 0,138,162, 32, 22,139,193,178,108,149, 78,155,243, 19,102,226,132,169,126,222,142,182, 36, 78,221, 58,135, + 14,205, 70,192, 66, 34, 68,102,174, 6, 36, 65,224, 89,194, 69, 48,140, 37, 34, 31, 37,161, 99, 75, 75,116,109,111,227, 81,116, + 41,103,106, 22,176,213,156, 27, 68,167, 94,133,248,173,183, 1,105, 11,112,250,103, 96,245,169,224,132,206, 80, 23, 75,145,245, + 60, 17,143,238, 30, 6,103, 44,174,145, 39, 37, 69,245,203,207,187,246,116,185, 58,126,226, 68,150,101,241,205, 55,223, 92,125, +250,244,105,143,242,231,120,123,123, 95, 89,184,112, 97,247,220,220, 92,156, 59,119,110,119, 77, 11,149, 86,132, 74,165,186, 8, +192,190,156,160,173, 31, 30, 30,190,239,183,223,126,235,248,254,251,239,227,208,161, 67, 95, 86, 34,176,170,197,172, 89,179,132, + 39, 78,156,232, 39,147,201, 54, 47, 94,188, 88,174,215,235,161, 82,169,144,150,150, 86,230,182, 69, 71, 71, 51, 2,129,224,118, + 13,133,127,165,139, 77, 87, 20, 88,229,246,153, 91,243, 46,210, 27, 12, 58,203,122,110,134, 33,195,250,181,186, 31, 28, 17, 43, +179,183, 39, 91, 5,248, 54,127,244,244,121, 24, 81,210, 4, 99, 86, 51,140,135,135,199,232, 37, 75,150,180,178,182,182, 6,203, +178,176,177,177, 65,102,102,102,153,160,212, 23, 22,128, 46,200, 71, 84, 98, 60,186,116,239,137,190, 29, 59,248,252, 97, 48,140, + 78, 73, 73,217, 95, 29,175,125,107,191, 50,231,234,144,183, 67,217,254, 49,207,243,202, 4,192,153,118,141, 32,145, 91,162,229, +103,243,235,252, 48,167,165,165,133, 95,188,120,241, 76,255,254,253, 7, 78,157, 58,149, 76, 75, 75, 59,107, 52, 26, 59,103,100, +100, 60,172,238,127,114,185,188, 97, 86, 86, 22, 10, 11, 11, 97, 99, 99,131,141, 27, 55,194,217,217, 25,197,197,197, 8, 9, 9, +225, 60, 60, 60,136, 43, 87,174,192,221,221, 29,217,217,217,160,105, 26,197,197,197,105,122,189,190,202, 62,146,165,205,128, 3, + 62,239,131, 63, 31,135,238,238,234,142,248,144,145, 95,118,125, 18, 25, 28,155,124,249,210,173, 21, 70,173, 52, 57, 47,229,194, +220, 6, 1,145,142, 51,190, 92,134, 45,235,150,224,241,189,107, 57, 46,245, 11,183, 50,132,110,119, 13, 46,173, 54, 38, 38,198, + 42, 50, 50, 18, 36, 73,194,218,218, 26,150,150,150,101, 11,155,155,196,149, 64, 96,190, 65,111,170,224,152,196, 85,102,102, 38, +158, 37,198,226,200,229, 61, 48, 24, 13,142,187,218, 91,167,121,139, 68, 81,249, 45,178, 22,100, 71, 35,188,134, 2,240,199, 49, + 99,198,140,118,119,119,183, 42,191,191, 77,155, 54,120,239,189,247,112,246,236, 89,132,134,134,190, 80,193,202,204,204, 84, 49, + 12, 83,101,188,147,147,147,243, 88,150,237, 63,121,242,228,176, 99,199,142, 89,127,251,237,183,101, 93, 10, 76,205,162,166,239, +125,251,246, 33, 44, 44,108,113,122,122,250,163,186,228, 35, 23, 23,151,102,131, 7, 15,190,190,117,235, 86,219,244,244,116,100, +101,101, 65,173, 86, 67, 40, 20,194,104, 52,162, 81,163, 70, 4,195, 48, 94, 53, 53, 7,210, 52,125,242,242,229,203,253, 26, 55, +110, 12, 0, 48, 24, 12,184,117,235, 22,166, 78,157,154,109, 97, 97,241,110, 98, 98,162, 90,161, 80, 44, 60,125,250,116,255, 54, +109,218,160, 85,171, 86,174, 25, 25, 25, 86,137,137,165,118,110, 37,239, 10,134, 97,202,210,231,231,159,127, 46, 59,166,213,150, + 44, 57,169,215,235,137,182,109,219,122,133,134,134,190,177,131, 91, 18,127,219,137,231, 11,102,194,243,198, 99, 0, 64, 88,243, +146, 46, 87,158,215, 98, 74, 78, 24, 63,190, 86,124, 10,133,194,129,227,184, 41,205,155, 55,255,172,127,255,254, 78, 10,133, 2, + 14, 14, 14,184,127,255,126,231,115,231,206,109,214,233,116,219, 25,134,217,110,142, 91,255, 26,240,130, 22,121,147, 28, 44,162, + 52,114, 4, 49,106, 20,195, 29, 58,148,149,234, 35,166,197, 2,139, 88, 0,208,211,197,180, 75,104,113, 1, 49,106, 20,227,212, + 98, 24, 56,112, 96,216, 82,183,129,227,192,152, 57, 14, 68,251,232, 29,176,121, 39,225,108, 55, 12, 59,118, 28, 67, 70, 70,134, +104,227,198,141,111, 29, 59,118,204, 99,220,184,113, 73,141, 26, 53,202,239,217,179, 39,246,236,217, 3, 87, 87, 87,232,245,122, +176, 44, 91,165,122,179,178,103, 70,182,111,213,136,138, 77,188,143,182,141,223,129,151,162, 11,158,165,230, 35,183, 80,135,236, +124, 13,154, 52,249, 18,233, 57,197, 40, 80,107,113,255,241,239,240, 80, 52, 32, 41,225,179,254, 48, 83, 96,233,158,237,133, 46, +254, 0, 68,138, 30, 16, 55, 24, 13,161, 99, 71, 36, 63,190,138,136,139, 27,144,242,228, 38, 56,150,129, 75,189,102,230, 54,225, + 44,221,180,105,211,184,160,160, 32,193,204,153, 51,187,175, 89,179,166,187, 82,169,188, 10, 0,110,110,110,221, 39, 78,156,216, +221,202,202, 10,171, 86,173, 50,112, 28,183,244, 85, 19, 55, 45, 45, 45,201,205,205,109,198,197,139, 23, 35, 39, 77,154,132,102, +205,154,249,197,198,198,146, 48,163, 99,109,163, 70,141,166,138,197,226, 15,140, 70, 99,227,177, 99,199,146, 83,166, 76,145, 59, + 59, 59,227,249,243,231,208,233,116, 32, 73, 18, 34,145, 8,209,209,209,236,201,147, 39,243, 69, 34,209, 44, 51, 28, 22, 56, 58, + 58,186,119,233,210, 37, 12, 0,236,237,237, 61, 88,150,133,131,131,131, 71,199,142, 29,195, 0,192,206,206,206,189, 50, 33, 86, +165, 0,166,233,144,164,196,196, 38,157,187,118, 86, 92, 15,125, 24,254,246,240,193, 61, 72, 1, 73, 38, 36,170, 66,156, 28,236, + 45,111,221,190, 89, 64,211,116,136, 57, 92, 66,161,112,112,151, 46, 93, 4,185,185,185,112,115,115, 67,102,102, 38, 82, 83, 83, + 97, 48, 24,160,205,207, 5, 93, 80, 0, 58, 63, 15, 92,113, 17,226, 66,238,193,167,158,187,228,124, 73, 39,248,253, 53,213, 56, + 43,115,168, 8,130, 40,219, 39,177,146, 67,102,101, 85,214,252, 81,139,151,227, 48,107,107,235,185,133,133,133,103,148, 74,229, + 74,189, 94,255, 73, 80, 80, 80,192,242,229,203, 29,231,206,157,107, 61,119,238,220, 67, 82,169,212, 55, 49, 49, 81, 87,165, 66, + 45, 42,122,102, 48, 24, 28, 0,184, 92,186,116, 9, 78, 78, 78, 40, 40, 40,128,193, 96,128, 70,163,209,219,217,217, 73,179,179, +179,161,213,106,161,215,235, 97,109,109,141,176,176,176, 28,163,209,120,170,166,240,217, 54, 36, 87,232, 12,143, 22,219, 55,183, + 76,101, 56,135,192, 66, 13,155,187,116,189,106, 5,128,245,253,189,189,119,234,217,107,241,177, 15, 78,216,197,135, 92,201, 81, + 62, 41,246,254,233, 76,124, 97, 13, 47, 95,150, 32, 8,174,105,211,166,200,204,204, 4, 69, 81,176,180,180,132, 92, 46, 71,179, +102,205,144,156,156, 92,103,129, 85, 94, 92, 93,188,115, 26, 89, 69, 42,236, 92,183, 15,238,174,245, 72, 0, 78,169,105,201,125, + 38,205, 25,213, 62,201, 58, 33, 40,225, 86,222,154,106, 42, 58, 17, 42,149,202,250, 5,251,197,205,173,135,157,157,221,101,154, +166,241,252,249,115,156, 63,127,190,123,106,106,106,173, 10,144,212,212,212, 56,142,227,250, 15, 31, 62,124, 79,171, 86,173, 26, +114, 28,135,102,205,154, 97,216,176, 97, 56,114,228, 8, 30, 62,124,136,130,130, 2,246,198,141, 27,187, 84, 42, 85,157, 58,228, +184,186,186, 54, 29, 56,112,224,205, 45, 91,182,216,101,101,101, 65,171,213,162,168,168, 8,135, 15, 31, 70,231,206,157, 33,149, + 74,177,105,211,166, 2,163,209,184,165, 58,113,197,113,220,137, 99,199,142,245,243,246,246,198,163, 71,143,112,227,198, 13, 56, + 57, 57, 65, 38,147, 97,200,144, 33, 14, 7, 14, 28,248,196,199,199,103,131, 90,173, 94, 49,112,224, 64, 48, 12,131,208,208, 80, + 85,233,168,194, 42,211,168,202,114, 69,171, 5,199,113, 48, 24, 12, 27, 73,146,124,215,207,207,175,111,120,120,120, 48,222, 16, +184,187,187,183, 16, 10,133,159, 2, 64,102,102, 38,242, 88, 64,158, 83, 50,232, 54,191,244,117,153,147,147, 83,246,174,105,212, +168,209, 31, 26,141,102, 65,106,106,106,149, 46,147,155,155, 91,107, 11, 11,139,207,122,244,232, 49,110,208,160, 65, 20, 77,211, + 56,125,250, 52,182,108,217,130,254,253,251,163, 81,163, 70,248,242,203, 47,109,116, 58,221,188,179,103,207,206,189,126,253,250, +217,194,194,194,249,213,113,190, 38,148,105,145, 55, 73, 96,113,165,170,177, 36,134, 37, 83, 49,228,150,214,104, 28,237,237,237, +183, 48, 12,211,163, 73,147, 38, 48,114,233,120,254,236, 9, 10,115, 89, 24,244, 58,176, 44, 7,142, 53,239, 94,176,121, 39, 97, +221,141, 67,193,117, 2, 52, 77,195,217,217, 25,107,214,172, 65,126,126,190, 96,210,164, 73, 94,203,150, 45,139,208,106,181, 80, +171,213,208,104, 52,208,104, 52,213, 10, 44,145, 84,215,202,211,165, 49, 10, 53,237, 96, 33, 22, 35,187, 64,135,220, 66, 29,178, +242,180, 56,122, 98, 44,116,154, 98, 24,245,122, 48,180, 17,114,151, 17,104,100,223, 3,192, 83,179, 38, 72, 43, 51, 81, 88, 35, +232,212, 11,160, 83, 47,192,162,205, 66,156,216,244,254, 11,231, 25,141,230, 53,249,167,165,165, 37, 29, 63,126,252,135, 15, 62, +248, 96,214,240,225,195,177,125,251,246,181, 74,165,178,109,169,139,176,118,196,136, 17,136,142,142,198,245,235,215,183,189,174, +218, 2,199,113, 14,246,246,246, 32, 73, 18,197,197,197,186,154,196,213,225,195,135,137,101,203,150,157, 29, 50,100, 72,199, 79, + 62,249,196,194,213,213, 21, 28,199, 65,175,215, 35, 37, 37, 5, 36, 73, 34, 47, 47, 15, 63,255,252,179, 58, 52, 52,148, 19,139, +197,183,133, 66,225, 71,209,209,209,202,154,250, 14,217,217,217, 97,236,216,177, 78,237,218,181,115, 42, 63, 98,240,221,119,223, +117,106,219,182,109,217, 62, 15, 15, 15,179,227,167,213,106,127, 94,181, 98,113,143,223,246, 30,108,214,180, 89, 35,187, 51,231, +175,132, 59, 56, 88,203,188,188,188, 37,249,121,121,186, 45, 27,215, 9,212,106,245, 47,102,210,249, 56, 58, 58, 34, 45, 45, 13, + 79,159, 62,133, 78,167, 43,105,194, 41, 46,130, 62, 47, 15,116,126, 46,160,213, 64,204, 48,208,101,165,195,203,219, 11,248,223, + 8,195,234,223, 24,229,196, 84,197, 38, 65,130, 32, 32,179,177,134,216,210, 18,148, 80, 96,118, 31, 44, 87, 87, 87,127, 95, 95, +223,131, 59,118,236, 16,205,158, 61,187,253,189,123,247,182, 36, 38, 38, 38, 10, 4,130, 94,235,214,173, 11, 94,185,114,165,100, +220,184,113, 77,127,252,241,199, 9, 0,126,172,230, 30, 30, 60,115,230,204,123,245,235,215,119,121,240,224, 1,180, 90, 45, 88, +150,197,128, 1, 3, 0, 64,106, 58,239,241,227,199, 26,141, 70,147, 30, 29, 29, 93,152,152,152, 72,195,140, 81,127, 95,111, 85, +222,253, 60,243,250,219, 10,133,219, 29,177,196,179, 1, 89, 28, 54,226,243,145,238,223,126,119, 56, 85,123, 54, 46,174,112, 81, +159, 6,107,138, 11, 31,204,176,243, 80,111,253,225,116,188, 57, 29,220,203, 70, 11, 58, 58, 58,150, 53, 9,138, 68, 34,147,251, +130,252,252,252,154,154, 8, 43, 45,188,243,243,243,145,159,159,143, 39, 9,143,144, 89,168,194,133,253,119,192, 48, 76,153, 59, +226,230,226,129,139,251,131,173,186,143, 12, 88, 80,208, 42,239, 74,206,125,132,152,155, 79, 73,146,252,236,157,119,222, 1, 77, +211, 24, 54,108, 24,246,237,219,247, 89, 93,106,232, 74,165,242,174, 82,169,108,252,244,233, 83,107,131,193, 48,116,200,144, 33, +187, 7, 14, 28,136, 59,119,238,224,210,165, 75,221,245,122,125, 44,195, 48, 26,133, 66, 17,196,113,156, 51, 65, 16, 65, 42,149, +170,218,209,206,141, 27, 55, 30,103,101,101,181, 74, 38,147, 21, 54,108,216,208,205,228, 92,169,213,106, 24,141, 70,164,164,164, +224,207, 63,255, 84,157, 57,115, 70,197,113,156, 69, 81, 81,209,146,228,228,228,195, 85, 53, 11, 22, 21, 21, 29, 63,121,242,100, +127,111,111,111, 92,187,118, 13,223,124,243, 13, 26, 54,108,136, 93,187,118,161, 83,167, 78,240,242,242,130,189,189,253,167, 5, + 5, 5, 29,191,249,230,155,129,126,126,126, 56,118,236, 24, 50, 50, 50, 54, 87,247,126,170,238, 61,171,209,104,192,113, 28,122, +246,236, 57,117,246,236,217, 24, 50,100,200,121,127,127,255,118, 97, 97, 97, 79,254,235,133,180, 66,161, 88,211,179,103,207,185, +173, 91,183,198,222,189,123,161,107,219, 5,150,187, 78,225,193,224,206,224, 0,184,237, 58, 81,210, 94, 55,180,100, 64,135, 87, +175,145,152, 59,119,238,192, 17, 35, 70,212, 7,208,162, 10,206,111,199,141, 27, 55,231,253,247,223, 71,120,120, 56,126,252,241, + 71, 68, 68, 68,148,149,121, 6,131, 1, 49, 49, 49,136,137,137,129, 66,161,192,224,193,131,137,143, 62,250,104,192,128, 1, 3, +156, 80,210, 45,226,175,118,177,186,191, 73, 77,132, 85,170, 70, 23, 23, 23, 71, 59, 59,187,232, 45, 91,182, 56,180,111,223,158, + 50, 26,141,184,116,249, 50,190,152, 57, 9,253, 7,207,128, 86, 39,134, 81, 75,128, 17,201,205,187,162,245, 96, 20, 92, 39,192, +202, 7, 66,175,215, 99,234, 62, 17,108,137,116,108,156,232, 2, 0,132, 70,163,129, 78,167,131, 70,163,129, 90,173,134, 90,173, + 6,195, 48, 85,190, 37, 11,243, 44,105,218,192, 34, 53, 35, 17, 41,170, 7,176,145,215, 7, 71,214, 67,122, 78, 49, 8, 56,195, +160,125, 12,182,244,193,212,105, 82,160,214,189,154, 40,102, 10,227, 43,113,102,204,239, 83,201, 48,204,170,117,235,214, 77,221, +178,101,139,100,198,140, 25,254, 43, 87,174, 28, 10, 0, 83,166, 76,241,151, 74,165,216,186,117,171,142, 97,152, 85,175, 41,125, + 41,146, 36, 63,235,214,173, 27, 10, 10, 10, 16, 29, 29,125,186,166, 63, 44, 92,184,112,250, 59,239,188,211,113,217,178,101, 22, + 90,173, 22,197,197, 37,205,159,249,249,249, 80,171,213, 72, 79, 79,199,156, 57,115,114,105,154,158,150,144,144,112,164, 22, 66, + 15, 39, 79,158,196,111,191,253,246,194,136,193,119,223,125,215,105,223,190,125, 25,155, 54,109, 74,229, 56,142,179,183,183,247, + 24, 57,114,164,179,185, 45,132, 42,149, 74, 3, 96,214,202, 85, 43,127,255,118,221, 58,231,156,236,220, 88,145, 88,166,181,144, + 73,236,231,126,177,130, 75, 79, 79,159,147,145,145, 81,108,110, 56,115,115,115, 17, 31, 31, 15,153, 76, 6,145, 72, 4,166,184, + 8,172, 90, 13, 93,110, 54, 72,189, 14, 18,134,129,189,133, 4,245, 92, 92, 80,223,217,188,190,248,170, 43,231,241,231,232,193, + 47, 52, 11, 18, 4,129,179,157,154, 66, 44,183,132, 84, 46, 71,151,227, 55, 74, 42, 12, 34, 17,176,113,135, 57,205, 56,142, 10, +133,226,228,230,205,155, 69, 89, 89, 89,136,142,142,142, 76, 76, 76,204,183,179,179,179, 50, 24, 12,236,147, 39, 79, 46, 62,126, +252,120,176,151,151, 23, 56,142,171,105,244,215,250,163, 71,143,246,233,220,185,179,209,203,203,203, 50, 51, 51,179,126,110,110, + 46,161, 82,189,216,135, 57, 36, 36, 68,154,148,148, 84,204,178,236,177, 82,113, 85, 99,198,255,124,164,187,244,118, 56,102, 5, + 58,122,181,182,113,106,141, 44, 67, 68,235,187,145,105,179, 62, 31,233,190,233,187,195,169, 90,134,208,237,102, 12,201,245, 4, + 82,237,158,218, 52, 33,112, 28,135,144,144, 16,220,184,113, 3, 55,110,220,192,243,231,207,203, 78,176,177,177,193,133, 11, 23, +208,163, 71, 15,179, 31,148,226,226, 98, 40, 20, 10,216,218,218,226,216,213, 95,241,211,183,251,202, 58,186,155,144,149,149, 5, + 11, 11, 11,172,250, 98,131,124,210, 87, 35, 87,228, 32,171,175, 57,220, 30, 30, 30, 13, 58,119,238, 60,200,197,197, 5,185,185, +185,112,114,114, 66, 64, 64,192, 16,154,166,189, 50, 50, 50,234,212,148,165,215,235,167,247,232,209, 99,229,156, 57,115, 96, 48, + 24, 48,122,244,104,196,199,199, 31,140,139,139,219,232,233,233, 57,107,198,140, 25, 46,142,142,142,152, 62,125,186, 37,128,183, +171,226,105,218,180,233,231, 95,125,245,213,234,241,227,199, 75, 12, 6, 3, 46, 93,186, 84,230, 82, 27,141, 70, 36, 38, 38, 98, +201,146, 37,170,130,130,130,192,212,212,212,103,102, 84, 34,231, 28, 63,126,124, 64,147, 38, 77,112,246,236, 89, 76,155, 54,237, + 15,185, 92,222, 98,208,160, 65,245, 45, 45, 45, 17, 25, 25, 9,154,166,161, 80, 40, 92,230,205,155, 55,184, 95,191,126,184,120, +241, 34, 86,172, 88,113,218,213,213,117,125,197, 60, 87, 81, 4, 11, 4, 2, 24, 42,244,105,164, 40, 10, 17, 17, 17,232,217,179, + 39,230,206,157, 11, 0,184,120,241,162,117,223,190,125, 31, 4, 6, 6, 90, 95,187,118, 77,247, 95, 46,164, 45, 45, 45, 63,216, +181,107, 23,158, 62,125,138,155, 55,111, 34, 59, 59, 27,122,189, 30,249,108,201,195, 32, 41,117,174, 56,119, 79,116,154,179, 0, + 99, 6,191, 13,149, 74, 5,146, 36, 29,171,169,240,141, 91,176, 96, 1,254,252,243, 79,172, 89,179, 6, 5, 5, 5,149,158, 39, +147,201, 16, 16, 16, 0, 95, 95, 95,196,199,199, 3,128,227,223, 16,229, 55,210,193,170,202,117,216,248,195, 15, 63, 56,116,238, +220,153, 82,171,213, 96, 89, 22, 29, 59,116,192,132,137, 19,112,238,216, 97, 40, 26,244, 0,165,149,193,104,101, 97,158,192,168, +183, 27, 57, 57, 57,144, 72, 36,144,150,118, 40,141, 74, 41,179,119,161,213,106,203,196,149,233,187, 58, 24,245,226,176,152, 56, +166, 94, 65, 81, 4,238,133,253, 6,131, 94, 15,175,198,243,161, 51, 58,194,210,249, 67,104,232,147,160,243, 74, 70,238,138,173, +187, 35, 61, 61, 11, 0, 97,150,197, 89, 89, 33,207,106, 94,238,236,206, 50,230, 11,172,140,140,140,204, 27, 55,110,172,143,136, +136, 88, 56, 96,192, 0,252,244,211, 79,107, 56,142,195,192,129, 3, 17, 18, 18,130,200,200,200,245, 25, 25, 25,153,175, 35,109, + 93, 93, 93,127,222,186,117,235, 64, 23, 23, 23, 28, 61,122, 20, 28,199,213, 40,136,196, 98,241,148, 89,179,102, 89,152, 92, 12, +177, 88, 12,141, 70,131,180,180, 52,208, 52,141, 99,199,142,233,244,122,253,236,231,207,159, 31,169, 77, 96, 56,142,227,218,181, +107,135, 13, 27, 54,164,220,186,117,203, 31, 0, 58,118,236, 24,214,182,109, 91,167, 77,155, 54,165,222,187,119,207, 31, 0,218, +181,107, 23,234,235,235, 91,171,121, 92, 84, 42, 85, 74, 68,232,221,103, 26,173, 86,104,231, 96, 95,108,101, 41,230, 10, 10, 11, +201,168,168,112, 85, 70, 70,198,243, 90, 80,197, 68, 71, 71,183, 76, 77, 77, 69, 98, 98, 34,152,226, 34,144, 58, 29, 8,157, 6, +189, 58,118,128, 12, 28, 36, 96, 33, 98, 13, 16, 82, 2, 20, 22, 22, 1, 64, 76,141,174,109,185, 2,193, 36,174, 8,130,128, 84, + 46,135,216, 74, 14,137, 92,254,130,163,101,142,184,148,201,100,191,255,248,227,143, 10,133, 66,129,239,190,251, 14, 10,133,162, +153,171,171,107,177,149,149,149,204,209,209, 17, 77,154, 52, 65,219,182,109,113,229,202, 21, 16, 4, 81, 83,193,104,228, 56,174, +239,205,155, 55,231,220,190,125,123,148,155,155, 27, 49,126,252,120,244,239,223, 31, 18,137, 4, 26,141, 6,185,185,185,248,227, +143, 63, 8,150,101,253, 74, 5,158,167, 68, 34,217, 71, 16, 68,202,243,231,207,223,173, 72,184,109,101, 43,183, 66, 13, 59,137, + 84,203,222, 14,236,231,213,170,103,191,222,104,208,184, 23,122,246, 75, 6,128, 53,142,194,132,209,223, 44,176, 61,102,103, 77, +236,186,125,252,226,215, 93, 6,244, 88,180,148,190,186, 98,233,230,220, 26, 93, 44,130, 32,202, 10, 91,146, 36, 43,117,169, 40, +138, 2, 73,146,230,189,147, 88, 38,165,255,196,142,101,219, 6, 35,237,232,238, 90,143, 52, 57, 87, 0, 80, 80, 80,128,164,164, + 36, 24, 12, 6, 56, 56, 56,192, 96,160, 91,215,162, 82, 53,107,244,232,209,132, 86,171,197,156, 57,115,176,110,221, 58, 12, 27, + 54,140,184,119,239,222, 44, 0,159,213,246,193,118,115,115, 91, 55,125,250,244, 57, 31,124,240, 1,242,242,242,112,249,242,101, +244,232,209, 3, 63,252,240,131,211,229,203,151, 87,119,234,212, 9, 20, 69,225,194,133, 11,160,105,250,113, 13,207,251,204,241, +227,199, 75,146,147,147, 33, 18,137,208,182,109, 91,164,164,164, 64,173, 86, 35, 35, 35, 3,203,151, 47, 79,203,207,207,239,174, + 84, 42,159,153, 17, 52,210,219,219,251,211, 70,141, 26,225,210,165, 75,152, 62,125,250,159,150,150,150,111,231,230,230,126,164, +211,233, 54, 13, 30, 60, 24,157, 58,117,194,227,199,143, 49,100,200, 16, 4, 4, 4,224,242,229,203,152, 59,119,238, 31, 22, 22, + 22,239,212, 48, 15,214,147,171, 87,175,182,108,219,182, 45,212,106, 53, 10, 11, 11, 33, 20, 10, 97,107,107,139,152,152, 24, 52, +110,220, 24,115,231,206,197,134, 13, 27, 48,123,246,108,182,111,223,190, 70,154,166, 69,166, 81,150,255,101,168,213,106, 78,165, + 82,193,218,218, 26,135, 14, 29,194,253,139,231,112,102,230,135,144, 46, 90, 7,142,227,144,178,114, 30,122,126,181, 8, 29, 34, +227,160, 82,169,176,103,207, 30,144, 36,137, 10, 3, 80, 94, 42,219,242,243,243,225,235,235,139,144,144, 16,236,217,179, 7,223, +125,247, 93,153, 91, 43, 20, 10,209,189,123,119,244,233,211, 7, 79,158, 60,193,143, 63,254, 8,107,107,107,240,168,155,192, 34, + 42,124,151,115,103,216,158, 1, 1, 1, 84, 81, 81, 17,180, 90, 45,210,211,211,145,144,144, 0,153, 76,134,212,140, 36,180,107, + 88,132, 52, 66,143,232,136, 88,134,160,132, 17, 53,217,240, 52, 77, 67,175,215, 35, 42, 42,170,100,232,123,227,160,178,206,207, +165,125, 62,160,213,106,113,245,234, 85, 78, 38,147,193,210,210,146,168,174,237,157, 53,234,254,188,114, 43,114,224,251, 35,122, +138, 47, 92,253, 9, 6,157, 17, 69, 58, 91,168,181,122, 20,106,132,208, 75,250,129, 32,110,128,164, 36,232,228,219, 16,151,111, + 62,209, 50, 6,250,172,121,170,128, 1,101,223, 26, 76, 78, 84, 57,129,245, 98, 13, 75, 36,145,131, 49,214,110, 84,176, 84, 42, + 93,183,126,253,250,153, 63,255,252,179,213, 71, 31,125,212,196, 84, 88,108,221,186,181, 80, 42,149,174,123,213, 52, 85, 40, 20, +239,123,121,121, 45, 95,178,100,137,187,175,175, 47,194,194,194, 16, 20, 20,244, 71, 90, 90,218, 9, 51,106,198, 30, 14, 14, 14, + 40, 42, 42,130, 88, 44, 6,195, 48,200,200,200, 64, 82, 82, 18, 36, 18, 9,130,131,131,245,158,158,158, 71,235, 18, 48,115, 58, +180,151, 31, 81, 89, 27,200, 68,172,255,162,175,166, 54,210,106, 53,205, 11, 11, 11,141, 2,129, 64, 32, 17, 50,241,181,225, 48, + 24, 12,167,111,220,184, 49,188, 75,151, 46,146,216,168, 8,208,249,249, 48, 20,228, 65,196, 24, 97,239,239, 11, 82,175, 5,161, + 55,192,221,135,131, 38,207, 18,183,194,227, 12, 6,131,161, 70, 87,208, 36,176, 72,138,122,177,223,149,181, 21,196,242, 18,129, + 85,126, 63, 81, 67,187,150,179,179,179, 69,183,110,221,122,249,249,249,129,227, 56,172, 91,183, 14,122,189, 94,108, 48, 24, 96, + 48, 24, 64,211, 52, 10, 11, 11,113,228,200, 17,252,250,235,175,183,108,108,108,118, 41,149,202,154,130,105,116,119,119,255,132, +101, 89,103,163,209, 72, 59, 57, 57,137, 14, 30, 60, 8,169, 84, 10,146, 36,225,235,235, 11,169, 84,170, 83, 40, 20, 52, 0, 56, + 57, 57, 25,214,175, 95, 47,152, 60,121,178,168, 50,178, 54,237,154,124,193,112, 14,129, 98,137,167,151,141, 83,107, 52,104,220, + 11, 0,208,103,240, 36, 52,104, 84, 15,249,153, 81, 13,244,186,196, 17, 20,145,109,247,219,157,212,152,174, 22, 45, 63,200, 78, +185, 26, 11,224,103,115,243, 82,175, 94,189,208,183,111,223,178,230, 64,103,103,103,232,245,122, 24,141, 70,179,197, 21, 0,152, + 38, 17, 93,186, 20, 36,150, 0,187,218, 91,165, 1, 40,179, 39,243,243,243,145,156,156,140,196,196,196,178,247, 20,203,153, 87, +187, 86, 40, 20,178, 6, 13, 26, 76,108,209,162, 5, 46, 95,190,140,168,168,168,212,107,215,174,185,183,107,215, 14, 30, 30, 30, + 31,112, 28,183,160,212,133, 53, 11,142,142,142,150,237,219,183,159,249,193, 7, 31,224,241,227,199,152, 59,119,110,118, 90, 90, +218,177,211,167, 79, 79,254,252,243,207,201,192,192, 64,100,100,100, 96,251,246,237, 76,112,112,240,183,118,118,118,203,211,210, +210,170,187,143,241, 74,165,242, 45,173, 86,139,236,236,108,152,166,100, 56,123,246, 44,206,157, 59,151,158,151,151,215, 93,165, + 82, 61, 53, 39,108,158,158,158, 86,254,254,254, 46,177,177,177,216,191,127, 63,104,154, 94,148,152,152, 72, 91, 91, 91,239,221, +186,117,235, 18,111,111,111,251,110,221,186,161, 83,167, 78,224, 56, 14,167, 78,157,194,210,165, 75,255,144,201,100,111,199,196, +196,208, 53,208,143, 88,177, 98,197, 10, 71, 71,199,119,223,123,239, 61,210,223,223, 31,161,161,161, 96, 24, 6,189,122,245, 42, + 19, 87,103,207,158,253,253,236,217,179, 35, 1,136,228,114,185,244,191,238, 94,153,160,213,106, 17, 27, 27, 11, 23, 23, 23, 52, +106,215, 17,115, 31, 36,224,198,237, 59,224, 56, 14, 93,162, 19, 80, 84,164,198,174, 93,187, 16, 22, 22, 6,138,162,224,237,237, + 93, 35, 39, 77,211,120,250,244, 41, 50, 51, 51, 49,108,216, 48,140, 27, 55, 14,107,215,174, 5, 77,211, 88,184,112, 33,114,114, +114,176, 99,199, 14, 60,125,250, 20, 2,129, 0,114,185,252,239,136,106,149, 90,228,141,116,176,128,146,182,111,150,101,161, 84, + 42, 17, 18, 18,130,132,132, 4, 88, 90, 90, 66, 99,100,217,205,119, 35, 89,146, 16,166, 50, 28,110,114, 70,124, 85,147, 18, 55, + 24, 12,132, 64, 32,192,237,219,183,241,236,217, 51, 88, 55,226,202,220, 43,131,193, 0,157, 78,135,226,226, 98, 8,133,194,162, + 59,119,238, 60, 15, 13, 13,109, 32, 16, 8,170, 28, 5,150,209,152,218,125,225,226,165, 47,252,125,155, 55,233, 29,184, 20,167, + 79,127,141,188,130, 2,168,117, 2, 20,105,104,168,181, 28,220,172, 26,162,125,107, 63,100,102,235,241, 36, 58, 44, 37, 75,100, + 95, 99, 27,140,129, 33,243,127,223,242,145,205,208,145,211, 33,117,237, 6,125,194, 65,176,154,244, 50,129, 37,146, 90,193,218, +177, 62, 10,138, 52,184, 21, 19, 15, 3, 67,230,155,123,211, 19, 18, 18, 10,116, 58,221,170, 91,183,110,125, 99, 26,249,115,253, +250,117,196,197,197,173, 82,169, 84, 5,181, 73, 64,133, 66,209, 27,192, 62, 0, 82,103,103,231,244,128,128, 0, 69,223,190,125, +165,129,129,129,160, 40, 10,225,225,225,248,232,163,143,206,203,229,242,183, 97,198,156, 56, 98,177, 56, 61, 63, 63,223, 70, 34, +145,192, 96, 48, 32, 45, 45, 13,143, 31, 63,134, 70,163, 65,122,122, 58, 8,130, 80, 94,189,122, 85, 83,219,140,102, 26,161, 85, +177,144,172, 76, 60,215,114, 20, 33,220,221,221, 3, 3,218,183,107,249,237,134, 77,208, 20, 23, 33,248,206,105,228,230,100,225, +199,157, 71, 91,185,187,187, 7,154,219,153, 56, 37, 37,229,192,209,163, 71,231,180,105,209,194,207,187, 94, 61,220, 79, 76,128, +136,101, 32,102, 24, 80,122, 45, 72, 70, 7,143,150, 28, 72, 82,142,244,180, 66,108, 59,127,249, 65,233,172,238,213,135,111,192, + 80,140, 77,204, 7, 65, 16, 56,223,181, 57,164,114, 57, 68,114, 75,116, 58,114,181, 76, 84, 61, 95,243, 37, 68,150,114,216, 5, +212, 60, 49,102, 70, 70, 70,241,173, 91,183, 66, 31, 61,122, 20,208,180,105, 83, 44, 91,182, 12,201,201,201,224, 56, 14, 25, 25, + 25,218,204,204,204,212,236,236,236,231, 4, 65, 28, 83, 42,149, 59, 97,230,108,225, 44,203, 58,159, 58,117, 10, 0, 68, 0,112, +233,210, 37,184,185,185,193,198,198, 6, 5, 5, 5, 24, 63,126,188,100,241,226,197, 0,128,240,240,112,161, 84, 42,173,146, 43, + 58,226,241,250,220, 2, 46,151, 84,135,189,157,101,140,104,213,179, 95, 10,250, 12,254, 0, 23, 78,239,194,229,115, 23,225, 40, + 76,136,103,100, 69,127,102,198,103, 21,170,212,141,183, 55,111, 59,153, 82, 22,157,251,113,250,208, 88,129,135,130, 61, 52,127, + 91,245, 19,247,114, 28, 7,138,162, 94,234,208, 94, 91,113, 85, 30, 75,151,130,197, 18, 16, 13,132,130,136,212,180,228,126,110, + 46, 30,101,149,139,164,164, 36, 36, 39, 39,163, 81,163, 70, 72, 72,140,131, 88, 44,138, 48, 51,223,191, 55,120,240, 96, 43,189, + 94,143,227,199,143, 27, 9,130, 24,124,234,212,169,208, 54,109,218, 8,122,244,232, 97,181,107,215,174,247, 0,236,172, 77,139, +145, 92, 46, 23, 25, 12, 6,236,222,189, 27,169,169,169,129,233,233,233, 49, 28,199,109,255,248,227,143,127,240,241,241,105, 20, + 19, 19,243, 68,163,209, 76, 87,169, 84, 81,213, 53,185, 1, 64, 94, 94,222,132,254,253,251, 31, 98, 89,214,179,115,231,206,150, + 99,199,142,181,230, 56, 14, 62, 62, 62, 56,115,230,140, 82,165, 82,153,221,135, 41, 49, 49,177,240,198,141, 27,233,205,155, 55, +119, 81, 40, 20, 16,137, 68,107, 92, 93, 93, 87, 82, 20,245,237,144, 33, 67,236, 15, 30, 60,136,195,135, 15,195,210,210, 18,241, +241,241,202, 71,143, 30,109,116,117,117,253,222,156, 25,220,195,195,195,227, 1,140, 13, 8, 8, 88,250,221,119,223, 45, 34, 73, +242,253,243,231,207,151,205,117,102, 18, 87, 94, 94, 94, 19, 14, 31, 62, 60,238, 13, 51, 66, 12,122,189, 30, 14, 14, 14,200,204, +204, 68, 70, 70, 6,234,215,175,143,142, 29, 59,194, 96, 48,224,196,233, 63,112,227,198, 13,112, 28, 7, 71, 71, 71, 88, 91, 91, + 35, 50, 50, 18, 0,170, 27, 61,108,160,105, 26,246,246,246,200,203,203, 67,100,100, 36,156,157,157, 49,123,246,108,232,245,122, + 28, 60,120, 16, 17, 17, 17, 32, 73, 18, 78, 78, 78,176,178,178, 66, 68, 68, 68, 77,156, 60,106, 43,176, 40,138,186,114,229,202, +149,145,173, 91,183, 22, 60,121,242, 4, 79,158,148, 60,111, 26,141,198, 40,160,112, 56,227,254,137,177,213,252,189, 37,202,205, +149, 33, 22,139,183,141, 28, 57,114,250,164, 73,147, 48, 99,198, 12,144, 36,137,159,195,117, 72, 74, 98, 65,211, 52,210,211,211, +113,255,254,125, 46, 32, 32,128, 96, 89,150,238,222,189,251,148,176,176,176,118, 20, 69, 21, 84,197,137,195,135, 25, 99,203, 33, +195,182,110,219,121,123,226,196,137,246, 67,135,109, 69,248,195,104,228,169, 75, 90,153,220, 28, 45,209,190,233,151,200,200,214, +225,220,159,167,115, 89,163,246, 29, 68, 31, 48, 84, 23, 78, 0,200, 44,214, 56,111,223,115,116,221,254, 35,199,166, 76,157, 48, + 86,218,189,251, 4, 8, 11,239,131,201, 14,131, 91,227,206, 32, 40, 11,220,139, 12, 71,212,211,100,109,177,150,218, 89, 64,107, +190,172,137,243, 5, 47,157, 36, 55,239,216,182,105,245,217, 11, 87, 41,154,166, 49,176,127, 47,134, 36,201,205, 53, 36,199, 75, +156, 22, 22, 22,251, 35, 35, 35,237,117, 58, 29, 82, 82, 82, 26, 52,105,210, 4, 28,199, 33, 49, 49, 17, 27, 55,110, 52,158, 57, +115,102,171, 84, 42,157, 91, 77, 13,241, 5, 78,131,193,176,111,247,238,221,243, 63,249,228, 19,105, 70, 70, 6, 30, 61,122, 4, +181, 90, 13,154,166, 17, 22, 22,166, 53, 24, 12,251,205,200, 87, 47,133,211, 36,176,236,237,237,221,219,183,111,111, 26, 69,232, +206,178, 44,236,236,236, 60, 2, 2, 2, 66, 1,192,198,198,166,170, 81,132, 85,222,207,212,212,212,107, 87,175,222,192,238,157, + 27, 64,211, 58,168, 82, 75,156,134,172,236,124,212, 32,174, 42,114,114, 90,173,246,237,239, 54,110,188, 59,109,194,251,174, 93, +123,246, 66,114, 84, 36,244, 57,153, 32, 25, 35,132,156, 0,197, 25, 50,164,167, 23, 97,245,153,139, 25, 26,173,182, 50,209, 90, +105, 56,203,154, 5,173,173, 32,145,203, 33, 46,117,173, 76,199,196,114, 43, 8, 45,229,160, 68,162,202,154,188, 94,226, 44, 46, + 46,126,103,234,212,169, 81,103,206,156,177, 27, 59,118, 44,134, 14, 29, 26,158,151,151,215, 35, 55, 55,183,208,204,103,255, 37, + 78,146, 36, 51, 6, 14, 28,232,172,215,235,141,163, 71,143, 22,100,101,101,193, 52,196,190,176,176, 16,127,254,249, 39,154, 54, + 45, 89,117, 38, 58, 58, 26,205,155, 55,175,146,115,202,220, 7,169, 0, 86,124, 62,210,253,219,187,145,105,179, 0,172,105,208, +200, 3,151,207, 93,196,141,203,183,231,117,104,201,110, 26,244, 94,187,229,210,158,239,126,217,220,127, 50, 37,183, 86, 96,207, +209, 35,212,195,176,159, 86,105,213, 15,188,177,237,232,151, 85,133,147, 32,136,146,149,234,203,137, 43,129, 64,128,226,226, 98, +115,197, 85,213,207, 38, 1,174,160, 69,238,162,137,179, 71,117,188,180,255,158,149,165,165,101, 89,159,159,134, 13, 27, 66, 32, + 20,224,231, 99,155,213,121,121, 89,139,205,225,180,180,180,252,164, 71,143, 30,136,139,139, 67, 84, 84,212, 17,149, 74, 21,197, +113,220,145,248,248,248,209,237,218,181,195,129, 3, 7, 62,169, 70, 96, 85,202,105,154,177,190,212,237,205, 1, 0,149, 74, 21, + 9,160,195,179,103,207,106, 21,247,210,201, 66, 59,151,222,215,228, 17, 35, 70, 88, 27,141, 70,148,138,103,135, 90,230, 37, 86, +165, 82,125, 31, 28, 28, 28,228,235,235,139, 49, 99,198,244, 9, 13, 13,237,211,166, 77, 27,120,123,123, 35, 55, 55, 23, 87,175, + 94,253,141,101,217,143, 85, 42,149, 22, 0, 87,141, 0,172, 52,238, 33, 33, 33, 79, 1,140,247,243,243,123, 87, 32, 16,192,218, +218,154, 74, 77, 77,165,206,159, 63, 15, 0, 83, 15, 31, 62,204,212, 41,221,235,142,191,156,147, 32,136,133, 19, 38, 76,216,254, +209, 71, 31, 73,219,181,107,135,252,252,252, 50,209,127,230,204, 25,148,142,196,134,131,131, 3,158, 62,125,138, 99,199,142,233, +243,243,243, 55,138, 68,162, 53,213,113,142, 31, 63,254, 5, 78,147,120, 59,125,250, 52, 76,131, 72, 28, 28, 28,240,228,201, 19, + 28, 61,122, 84,155,159,159,191, 65,175,215,175,253,139,227,254,255, 75, 96,229,228,228,124, 58,127,254,252, 30, 31,126,248,161, +131, 70,163,161, 28, 29, 29,161, 84, 42,141,231,206,157,203, 41, 44, 44,252,180, 54, 23,187,115,231,206,140, 65,131, 6,109,252, +229,151, 95,118,236,216,177, 35,112,204,152, 49, 24, 63,112, 32,166,119,180,132, 78,167, 3, 65, 16, 56,119,238,220,227, 43, 87, +174, 52, 16,137, 68,186,165, 75,151,178, 0,238,214,196,155,253,224,212, 19,170,229,240,192, 77,155,127, 56,236,215,182,131,231, + 91, 94,111, 73, 58,215,179, 1,109, 96,144,158,145,141,107,183, 31,234,158, 60,140, 76,102,105,253,168,204,152,154,103,113, 7, +128,152, 24,208, 64,225,167, 62, 62, 86,203,214,110,251,125,219,175,135,142,140,152, 50,230,109,129,127,171, 30, 72, 72, 59,129, +235,161, 87,140,185,133,220,177, 66, 61, 53, 45, 38,166, 48,183,182, 55, 62, 53, 53, 85, 43, 21,114,249, 90,173,214, 62, 33, 33, + 1,233, 42,101, 65,106,170, 82, 91,151,102, 55,157, 78,135,184,184, 56, 92,188,120, 17,225,225,225,184,117,235, 22,125,254,252, +249, 95, 72,146, 92, 85,205, 68,147,149, 63,217, 45, 91,126,243,211, 79, 63,141,100, 24,198,187,123,247,238, 82,123,123,123,100, +101,101, 33, 56, 56, 88, 31, 17, 17, 17,215,178,101,203,181,117,205,108,174,174,174, 24, 53,106,148,179,191,191,191,179,105,196, + 96,189,122,245,240,206, 59,239, 56,183,105,211,166,108, 95,253,250,245, 81,155,169, 26,220,221,221, 3,187,119,239,138,137,147, + 63,135, 70, 83,132,187,183, 79, 35, 47, 39, 11,119, 66, 98,161,163, 17, 88,155,225,240,165,163, 55, 59,172,220,184,233,104,255, +246, 1, 62, 77,220, 92, 37, 14, 94,111,193,210,201, 21, 57,217,217,184, 27,249,204,176,229,194,181, 7, 26,173,246,109,115, 71, +122,178, 44, 91, 54,202,173,249,172,121, 32, 73,178,108, 21, 4,211,113,235,182, 93, 64, 10,132, 96, 56,128,166,233, 26,221, 59, +149, 74,149, 66, 16,196, 59, 51,103,206,188,180,123,247,110,178,123,247,238,190, 39, 79,158,124,165, 69,115, 83, 83, 83, 61, 74, + 93,209, 2,107,107,107,193, 7, 31,124, 0,131,193,128,226,226, 98, 20, 20, 20, 32, 59, 59, 91,247,217,103,159, 73, 0, 64, 36, + 18, 25,250,247,239, 95,227,251,227,187,195,169,218,207, 71,186,111,114, 20, 38,140,206,207,140,106,224, 40, 76,136,239,208,146, +221,244,221,225, 84,173,179,109,241,202,212,204,171,177,202,162,115, 63,238, 57,122,132,154, 48,226, 29, 70, 33,127, 50,207,177, + 30, 14,153,245,242,170, 32,176,234,234, 92,189,244, 62,137, 70,120,138,101, 92, 80,143, 81,237, 22,172,156,179, 94,238,232,228, + 8,163,209,136,248,164, 56,252,114,116,139,186, 80,151,187, 42, 39, 6,161,230,112, 53,104,208,192,139,162, 40,156, 56,113, 2, + 0, 76, 83, 27,108,249,243,207, 63, 71,191,247,222,123,168, 95,191,126,115,150,101, 37,213, 77,163, 81,153,123,103, 48, 24,106, +221,140, 94, 99,219, 12, 65,196, 69, 70, 70,186,187,187,187, 19,251,247,239, 47,162,105,122,105, 29,158,241,245,127,252,241, 71, + 87,142,227,250,251,249,249,193,211,211, 19, 0,240,240,225, 67,220,184,113, 99, 95,106,106,234, 68,188,158,197,157, 57,130, 32, + 80, 80, 80, 96,154,215,132,150,203,229,111,228,162,209, 74,165,242, 87,163,209,120,110,233,210,165, 95, 55,108,216,240,227,169, + 83,167, 82, 77,154, 52, 65,126,126, 62,172,173,173,161, 80, 40,144,154,154,138, 95,127,253,149,201,200,200,248,133, 36,201,101, + 42,149, 74, 89, 87, 78, 59, 59, 59, 40, 20, 10,164,164,164,152, 56,119, 24, 12,134,229, 89, 89, 89,233,224, 81,187,103,202,156, +147, 74,167,105,248,158, 97,152, 30, 38, 87, 43, 39, 39,231,211,244,146, 30,227,117, 82,247,131, 6, 13,106,152,149,149,181,131, +166,233,192,161, 67,135, 98,204,152, 49, 24, 50,100, 8,198,140, 25, 67,153, 92,171,147, 39, 79, 62,170, 85,141,161,116,177,103, +146, 18, 13,230, 56,174, 53, 0,130, 32, 73,115, 22,123,174, 81,137,251,250, 88,121,203, 36,236, 78,153,152,237,162,209,147, 55, + 53, 58,114, 74, 68, 76, 97,220,171,212,108, 74, 23,118,222, 11, 0, 58, 3,247,126, 74,138,234, 66,109,239,103,105, 19,225,126, +130, 32, 40,142,227, 54,115, 28,183, 95,161, 80,196,153, 99,187, 87,228,228, 56,142, 4, 74, 38, 23,189,120,241,226,215, 4, 65, +188,175,211,233,156, 36, 18, 73, 38,199,113,191,245,238,221,123,249,166, 77,155, 12,213,188,160,217,170,194,233,225,225,241,187, +155,155, 91,227,210,235,188,208,231,202,244,109,218, 95, 58, 31,209,179,212,212,212,247,204,189,159,222, 13,220,207,121,123,185, +247,245,246,114, 3, 0,196, 37, 40, 17,151,144,122, 62, 46, 62,181, 95, 29,211,168,108,177,103,162,116, 42, 6,206,188,197,158, + 95,224,108,222,188,121, 40, 69, 81, 30,181,121, 40, 89,150, 85, 70, 71, 71,251,153, 19, 78,133, 66, 49,182, 94,189,122,107,148, + 74,229,209,148,148,148,207, 95, 71,205, 91,161, 80,116, 34, 73,242, 12,203,178,178,138, 14,151, 73,132, 85,209,201,189, 74,206, +111, 22,180, 88,220, 57,176,235,136, 91,215,110, 28,155,187, 58,122, 69,249, 99, 51,134,219, 77,122,111,198,167,107,127,223,250, +253, 87, 91,143,231,254, 82, 83, 56, 91,181,106,117, 21, 64, 99,147,155, 85, 29, 24,134, 81, 70, 71, 71,183,173,139,235, 96,223, + 10, 1,182,150,142, 43,244, 52,221,134, 36,192, 9, 69,162,200,188,188,172,197, 85,136,171, 74, 57,221,221,221,215, 52,106,212, +232,211,103,207,158,237, 75, 73, 73,249,176,220, 61,254,246,173,183,222,154,145,156,156,188, 37, 37, 37,229, 75,115,211,200,203, +203,203,186, 77,155, 54,185,203,150, 45, 35,151, 44, 89,130,224,224, 96,251,212,212,212,220,215,145,238,245,235,215,119,149, 74, +165,123, 88,150,245,102, 24,102,107,124,124,252,250,186,112,250,248,248,136,242,242,242, 62,173, 87,175,222,108, 23, 23, 23,151, +244,244,244,196,164,164,164,160,180,180,180,159,106, 33,174,106, 76, 35, 63, 63, 63, 29, 80,178,156,152,153,253,173,254,147, 14, + 86,133,252,228,205,178,236,170, 54,109,218,140,156, 52,105, 18, 17, 19, 19,131, 11, 23, 46,224,249,243,231,199, 74,251,243, 61, +121, 29,156,231,206,157,227, 18, 19, 19, 15,145, 36,185, 40, 53, 53, 53,238,111,140,251,191, 30,175,187, 98,243,170, 25,165, 90, + 12, 26, 52,168, 97,187,118,237,174,182,106,213,138,109,213,170, 85,225,235,224,252, 43,194,249, 63, 13,231,104,249,186, 57,255, +138,112,214,133,147,227, 56,242, 85, 62,255,134,184, 55,106,212,136,131,249,235,175,253,231,210,232,191,202,185,109,101, 43,183, +123, 23,223,253,110,231, 55, 45, 95, 90,188,124,233, 76, 59,171, 75, 39,222, 94,187,116,166,157,213, 27,122, 63,201, 58, 86,112, + 91, 86, 94, 49,171,183,125,248,240,225, 76,189,122,245,118,252,203,227, 78,120,122,122, 74,248,231,232,245,115,186,184,184,180, + 85, 40, 20,167, 20, 10,197, 41,119,119,247,118,175,153,243,184,171,171,171,223, 63, 20,247,255,132,192, 50,247,243,143, 11, 44, + 19,134, 12, 25,226, 60,124,248,112,123,254,193,227, 57,121, 78,158,147,231,172,158, 83,161, 80,200,248,251,201,115,190,129,156, +111,148,192, 18,252, 91, 2,125,234,212,169, 12,240,224,193,131, 7,143, 26, 81,155,169, 29,120,240,224,241,207,128,168, 70,133, +214,166,109,181, 46, 74,246, 1,207,201,115,242,156, 60, 39,207,201,115,242,156,255,239, 56,107,226,254,215,246,237,250, 79,245, +193,226, 57,121, 78,158,147,231,228, 57,121, 78,158,147,231,252, 47,160, 54, 77,132, 36,120,240,248,139,177,105, 50,220, 55, 77, +134,251, 95,117, 62, 15, 30, 60,120,240,224,241,111,131,224, 77,139,144,191,191,127,115,142,227,222, 35, 8, 98,100,169,218, 60, + 76, 16,196,239, 97, 97, 97,102,205, 64, 43,149, 74,211,180, 90,173,115,233,239, 12,173, 86,171, 40,119,152, 40,247, 1, 74, 70, +171,149,255, 84, 10, 47, 47,175, 52,157, 78,103,206,250,122, 17, 4, 65,132,179, 44, 27, 38,151,203,111, 62,125,250, 52,214,220, +120,247,238,221,251, 99, 75, 75,203,197, 26,141,102,237,249,243,231,191,255, 27,110,117,251,122,110,174,187, 12, 70,154, 77,203, +200, 89, 8,224, 68,101, 39,109,157,132, 32,130,195,151,165,191,215,205,248, 5,243,171, 35,173,237,249,213,160,173, 80, 40,252, +196,197,197,101, 64, 74, 74, 74, 40,128,175,192,207, 66,204,131, 7, 15, 30, 60,254,141, 2,171,131,159,125, 19,130,165,191, 20, + 82, 92, 87, 3, 67,220,224, 72,209,186,187,225, 57,177,175, 18, 0,133, 66, 81,143, 32,136,238, 28,199,249,144, 36,121,159,101, +217,243, 42,149, 42,187, 54, 28,126,126,126,245, 0,140, 1, 48,182,125,251,246, 45,167, 77,155,134, 70,141, 26, 65,171,213, 34, + 56, 56,120,222,222,189,123,231,113, 28,247, 0, 37, 75,202,236, 15, 15, 15, 79,174,138, 75,171,213, 58,155,218, 88, 9,130,112, + 30, 57,114,100,112,185, 69,120, 9,211,226,178, 28,199,221, 5,112,135, 32,136,219, 7, 14, 28, 72,105,226, 36,237,240, 86, 61, +167, 65,103,195,146, 22, 86,228,212,233,116,206, 17,167,142,129, 51, 50, 40, 74, 77, 66,195,183,199,148, 29,187,240,118, 47,112, +234, 2, 8, 37,162,136, 30, 39,111,135, 3, 8, 75, 74, 74, 10,247,244,244,140,173,142,179, 34,124,125,125,151, 47, 93,186,212, +113,232,208,161,159, 0,168, 82, 96,213,134,179, 26, 72, 58,180,109,125,229,212,145,253, 82, 16, 36,134,143, 24,185,239, 86,216, +131,241, 0, 94, 88, 0,122,235, 68,184, 16, 4,190,156,246,217, 52, 10, 0,126,216,184,237,171,239,198, 97,211,231,123,145,230, +230,230,214,131,227,184,175, 74,239,243, 90,165, 82,121,101,235, 68,184, 0,152, 59,237,179,105, 4, 0,108,219,184,237,203,173, + 19,241,253,140,221,168,237, 4,119,211, 39, 78,156,184,105,213,170, 85, 84,233, 36,124,253,155, 55,111,222,164,160,160,160, 57, + 0,190,115, 48, 15, 30, 60,120,240,248,231, 5, 86,139, 22,214,182, 50,146,155, 45, 19,115, 99,186,119,106,228, 53,100, 64, 39, +162, 65,195, 6,136,141,137,245,190,114, 45,228, 3, 9,245, 48, 65,163, 39,246,107, 88, 98, 67,116,116,245,235,135, 45,154, 12, +131,209, 88,114, 77,129, 0,204,158,243, 30,199,122,244,232,225, 53,105,210, 36,248,249,249, 33, 52, 52,180,199,161, 67,135, 62, +253,227,143, 63, 66, 12, 6,195, 25,137, 68,114,181,166, 25,142,253,252,252,214,184,187,187,127, 53,103,206, 28,162,109,219,182, +144, 72,254, 55,237,138, 92, 46, 71,175, 94,189,208,171, 87, 47,164,165,165,181,188,122,245,106,203,223,127,255, 61,200,207,207, +111,109,120,120,248, 60,115,110,208,226,197,139,253, 43,217,125,142, 32,136,103, 36, 73,134,249,248,248,164, 52,116,181,108,234, +104,111,123,250,155, 85,203,112,182,239,196, 42,133,203,241,126,157, 0,224, 5,129, 69,103,165, 67,106, 37,143, 16,201,100,225, + 0,194, 0,132,123,122,122, 70,152,203, 9, 0,129,129,129,146,199,143, 31, 19, 28,199,161, 93,187,118,246, 4, 65,196,146, 36, +249,253,217,179,103,183,149, 63,175, 54,156, 53,185, 87, 75,191,156, 33,202,138,139,192,163,219,231, 49,204,223, 93, 26, 30,253, +120,165, 86,111, 56, 82,221,159, 8,130, 36,119,135, 58,206, 3, 50, 62,101, 89,118,113, 76, 76, 76, 32, 0,248,248,248,136, 1, + 92,217, 19,108, 55,112, 98,167,252, 87, 89,228, 83, 68, 81,212,214, 95,126,249,101,242,248,241,227,145,152,152,136,155, 55,111, + 66, 46,151, 99,249,242,229,111,205,153, 51, 39,200,104, 52,126,202, 63,246, 60,120,240,224,193,227, 31, 21, 88, 93,252, 44,130, +123,116,124,203,127,104,191, 78,100, 35,159,230, 16, 73, 44,202,142,181,242,243, 67, 43, 63, 63, 98,234,212,194, 6,145,225,145, +139,206, 94,186,183,192, 70,100, 12,187, 25, 94, 92,229,164,103, 70, 35, 4, 65,171,126, 7, 0,236,217,249, 30, 21, 27, 27,235, + 37,147,201,202, 11, 5, 4, 6, 6,146, 65, 65, 65,237,175, 92,185,210,126,255,254,253,180,193, 96,216,168, 84, 42,171, 91, 58, +227,171, 67,135, 14, 17, 20, 69,129,162,168, 42, 79,114,117,117, 69,159, 62,125,224,234,234, 74,124,249,229,151, 95, 1,168, 84, + 96, 73,165,210, 12,130, 32,156, 1,192,206,206,142, 89,186,116,105, 36, 87, 10, 0, 96, 89,246, 46, 69, 81,119, 8,130,184,123, +236,216,177, 84,111, 55,169,187, 92, 36, 57,191, 99,251,102, 24, 10,210,171,156,199,171, 88,153, 98, 82, 25, 47,236, 23, 91, 90, + 68,136, 45, 45,195,197,114,121, 24,128,112,130, 32, 34,204,229, 52,137, 43,153, 76,118,125,251,246,237,118, 0, 48,115,230, 76, +219,226,226, 98,219, 41, 83,166,204, 3, 80, 38,176,106,195, 89, 13,108,187,118,108,251,252,157, 33,253,173,253,218,119,193,221, +195, 63, 32, 47, 79, 13,117, 97, 49, 88,150,125,105,229,223, 25,187,145,190,117, 18,214,253,240,221,182,185, 4, 73, 18,109,250, +125,133,126,246,220,172,172,223,126,139, 6, 32, 20,139,197,165,183,132, 16,184,187,187,187, 89,185, 53, 89,215,168, 75, 83,108, +251,126, 43, 56,150,229, 0,172,171,133,123,229,108,101,101,117,226,252,249,243,237, 3, 2, 2,112,247,238, 93,196,197,197, 97, +198,140, 25,250, 25, 51,102,136, 38, 76,152, 64,204,158, 61,123,230,218,181,107, 15, 3,184,197, 63,250, 60,120,240,224,193,227, + 31, 19, 88, 82, 17, 19,176,116, 83, 36, 24,245, 51,112,134, 36,112,116,218, 75,231, 88,216,214, 67,179, 54, 46,176, 16, 59,145, +247, 99,190, 11,168,112,184,218,161,150, 38,113,117,120,189, 91, 11,141, 90, 37, 2, 0,153,165,130,126,103,118,106,116, 64, 64, + 0,156,156,156, 68,183,111,223,158, 13,188,176, 54, 89, 69, 78, 66, 31, 21,138, 71, 67, 58,163,225,163, 28, 88, 88, 88,192, 84, +112,155, 16, 27, 27,139,235,215,175, 35, 49, 49, 17,222,222,222,192,203, 51, 40,151,113,106,181, 90,215,126,253,250, 93, 93,187, +118,109,183, 53,107,214,220,223,183,111, 95,119, 0,197,149,186,123,245,172,109, 89, 35,119,126,231,182,239,132,208,171,237, 31, +135,220,170, 50,238, 94, 67,222,193,180,188,146,166,199,131,205,221, 32,181,150, 67, 34,183,138,232,115, 46,164,204,185, 34, 8, + 34,194, 92,206, 30, 61,122,124, 32, 16, 8, 22,210, 52,109,243,227,143, 63,218,218,218,218,146, 39, 78,156,160,183,111,223, 94, + 40, 18,137,244, 4, 65,172,174, 75, 56,171,131,144,162, 86,124,187,244, 75,107, 11,210,136,240, 51,191, 33, 37, 49, 9, 81, 79, + 83, 13, 7,110, 60,100,244, 6,102, 82,101,156, 51,126,193,252,217,195,197,187, 66, 85,222,167, 6, 47,153,209,120,229, 80, 23, +208, 52,189, 51, 51, 51, 19, 83,166, 76, 1,203,178,232,210,165, 75,103,142,227, 82,103,205,154, 5,111,111,111,236, 60,249,164, + 88, 80,112,175,251,239,151, 11, 67,205, 12,103, 75, 79, 79,207,243, 87,174, 92,113,113,119,119,199,213,171, 87,145,150,150, 6, +133, 66,129, 25, 51,102,136,215,172, 89,179,167,160,160, 96,212,170, 85,171,164, 15, 30, 60,216,127,238,220,185,122, 40,233, 51, +247, 87, 12, 5,230, 57,121, 78,158,147,231,228, 57, 95, 51, 56,142, 11, 0,224, 4, 32,147, 32,136,144,242,219,165,167, 56,149, +126, 87,220,206, 42, 45,243,203, 47, 94,158, 85, 90, 6, 56, 1, 96, 0, 4, 19, 4,145,251,186,195,108, 18, 88,129, 0,174, 2, + 88, 6, 96,105,197,147,232,212,171, 16,191,245, 54, 32,109, 1, 78,255, 12,172, 62, 21,156,208, 25,234, 98, 41,178,158, 39,226, +209,221,195,224,140,197, 53, 95, 76, 0,227,230,141,239, 9,172, 44, 0,145,196,137, 46, 44, 44,132,165,165, 37, 52,106,149,104, +194,148, 50,103, 75,116,229,202, 21,132,133,133,193,205,205,173, 70, 17, 8, 0,156,190,164, 21, 81,175,215, 67,175,215, 35,109, + 96, 59, 88,118,232,134,220,247,103,224,226,197,139,200,204,204,132, 72, 36,130, 72, 36,130,209,104,172, 49,156,100,233, 74,188, + 38,211,170,178,115,220,221, 33,101, 12,134,211,155, 55,172,182,182,150, 91,184,132,158, 63,142,196,196, 52,179,110,186,216,210, + 2, 98,153, 69,132,216, 82,246,130,184,170, 13, 39, 69, 81,203,143, 28, 57,226,174,211,233, 32, 18,137,112,248,240, 97,122,247, +238,221,209,106,181,186,107,120,120,184,230,117,132,179, 34, 28,156,156,254,120,123,220, 71, 51, 86,126,216, 7, 26,181, 22,199, +110, 60,196,165,251, 9, 67, 1,220, 4,160,174,234,127, 27,142,235,159,186,185,229,247,154, 50,101, 74,196,209,163, 71, 29,191, +253,246, 91, 48, 12, 3,163,209, 8,163,209, 88,246,155, 97, 24,236,219,183, 15, 55,239, 61,156,165, 82, 21,134,154, 25, 44, 55, + 47, 47,175,139,247,238,221,115,178,176,176,192,133, 11, 23,144,151,151,135,233,211,167,151, 57, 87,121,121,121, 99,182,109,219, +246,206,243,231,207,191,189,113,227, 70, 54, 0, 10,128, 17, 60,120,240,224,193,227,223,132,234,180,136, 19, 65, 16,167, 57,142, + 27,204,113, 92,111, 0, 98,211, 54, 0, 16, 4,113,186,180,220,126, 97,123,222,188,121, 11,130,130,130,162, 77,219,166,115,230, +207,159,223, 98,205,154, 53,171, 59,118,236,184,255,246,237,219,241, 0,254, 50,129,117, 21,213,172,139,165,123,182, 23,186,248, + 3, 16, 41,122, 64,220, 96, 52,132,142, 29,145,252,248, 42, 34, 46,110, 64,202,147,155,224, 88, 6, 46,245,154,213,120,177,149, + 63, 65,168, 80, 40,194,148, 74, 37,194,195,195,241,236,217, 51, 72,165, 47,181, 44,225,210,165, 75, 0, 0, 23, 23, 23,243, 4, + 75, 64,103,212,139, 84, 33,185, 77,201,128,191,122,145, 42, 0,192,234,249,243, 33, 22,139, 33, 18,137,202,206,101, 24,166, 70, + 62,162,180, 87,123,105,179, 96,101,163, 3, 9,169,209,234,208,146,121,159,120,122,121, 55,114,187,247,199, 65,196,199,167, 34, + 61,221,188,244,145,200, 45, 35, 36, 86,150,225, 98,217,255,154, 5,235,192,121,112,212,168, 81, 31,140, 24, 49, 66,214,161, 67, + 7,201,207, 63,255,156, 87, 81, 92,189,106, 56,203,195,213,213,181,223,160, 65,131,254,152, 58,117, 42,134,245,239,141,247,186, +248,112, 41, 25,249, 26, 0, 23, 74,107, 0,213, 66,169, 84,166, 2,232,243,246,219,111,239,109,209,162,133, 15,199,113,104,214, +172, 25,134, 13, 27,134, 35, 71,142,224,225,195,135, 40, 44, 44,164,111,220,184,177, 81,165, 82,253, 98,102,176, 44,236,236,236, +206, 94,190,124,217,201,194,194, 2,231,207,159, 71,113,113,241, 75,206,213,234,213,171,165, 9, 9, 9, 91,206,157, 59,247, 22, + 74,214,133,227,197, 21, 15, 30, 60,120,252,251, 80,173, 22, 49, 9, 39,142,227, 6,151, 23, 76, 21,133,150,233,183,233,188,160, +160,160,193,229,197, 23, 0,172, 89,179,102,117,185,237,226,191, 34, 50, 38,129,213,189, 84, 72,116, 7,112,173,130, 45, 87,242, +131, 53,130, 78,189, 0, 58,245, 2, 44,218, 44,196,137, 77,239,191, 64,100,142, 51, 84, 25,180, 90, 45,132, 98, 7,122,207,206, +247, 68, 0,192,112,150,244, 75,215,174,217, 58, 52,251,122,230,132,147, 32, 8,178, 28,239, 75,226,193,195,195, 99,125,199,206, +237,187, 52,106,213,206,226,222,217,163,120,250, 36, 17, 89, 89,249, 0, 7,109, 85,156, 23, 70, 15,128, 58, 46, 22, 50,107,235, +136,126,151, 35, 95,112,174,234,194,121,241,226,197, 47, 58,116,232,176,248,240,225,195, 74,111,111,111,137, 64, 32,160, 43,136, +171, 58,133,179, 60, 20, 10, 69,103,129, 64,112,158, 36, 73, 89,143, 30, 61, 48,107,214, 44,124,255,253,247, 70, 86, 40, 29,188, +237,108,232,168, 34, 29,189,208, 28,113, 85, 78,100, 69, 41,149,202,230,177,177,177, 18,163,209,216, 99,200,144, 33,103, 6, 14, + 28,136, 59,119,238,224,226,197,139,141,105,154, 86,149, 94,119, 57, 0, 23,146, 36,215, 86,179,146, 59, 41, 18,137,246, 95,188, +120,177,133,155,155, 27, 46, 92,184,128,226,226,226, 50,231,106,226,196,137, 47, 56, 87,183,111,223,206,230,197, 21, 15, 30, 60, +120,252,171, 81,165, 22, 41,239, 62, 85, 38,178,204, 65, 57,241,165,153, 55,111,222, 2,130, 32, 78,151, 58, 92, 26, 0,202,191, + 74, 96, 93, 43, 85,141, 28,106, 94,225, 29, 76, 97,252, 75,251, 88,182,238,229, 86,227,222,231,162,101, 50, 25,182,109,219, 6, + 11, 11,139, 90, 11, 39,245,153,163, 72,158, 49,174,204,185, 50, 57, 89,232, 55,161,174, 2,203,228, 96,221, 69,133, 38, 66,119, +119,247, 79, 90,181,106,245,225,142,221,123,173,214, 44,254, 42,191,224, 81,180, 64, 91,172,179,212, 25,140,244,179,244,172, 42, +167, 71, 48, 22,228, 65, 98,105, 25, 33,180,144,189, 36,174,234,202,121,247,238, 93,109,207,158, 61,119,173, 94,189,186, 3,203, +178,187, 95, 71, 56,203,139, 43, 7, 7,135,115, 91,182,108,145,201,100, 50,232,116, 58,172, 93,187, 22,151, 46, 93, 26,156,150, +150,118, 14,192,185,186,166, 55, 77,211,147,123,247,238,253,221, 23, 95,124, 1,131,193,128,209,163, 71,227,249,243,231,231,159, + 62,125,250,189,135,135,199, 23,211,167, 79,119,115,116,116,196,180,105,211, 68, 0, 38, 86, 65,243,205,239,191,255, 62,184, 77, +155, 54,184,118,237, 26,242,243,243,161, 80, 40,240,201, 39,159,136,131,130,130,246, 20, 22, 22,142, 10, 10, 10,226,157, 43, 30, + 60,120,240,248,239,192, 44, 45, 82,222,137,170, 13,202,253, 79, 24, 20, 20, 20, 29, 20, 20,244,130,195,245, 87, 9, 44,174,156, +122,172,209, 29, 98, 53, 47,247,225, 97, 25, 99,109, 34,105,214,121,230, 52,231, 1,255,235,131, 85,137, 80,122,105,187, 22,125, +176,206,113, 28,119,187,188,192,114,119,119, 31,238,234,234,250,205,239,191,255, 46, 83, 42,149,240,104,210,210,230,143, 35, 7, +116, 46,150, 18,109, 74, 78,206,132, 40,165,250,112, 85,156,172, 86, 29, 33,181,148,135, 75, 45,228, 21,197, 85,157, 57, 1,224, +242,229,203,115, 42,238,123, 85, 78,133, 66,209,217,209,209,241,220,150, 45, 91, 44,148, 74, 37, 68, 34, 17,228,114, 57, 46, 95, +190,140, 82,113, 85,103,184,187,187, 47,157, 49, 99,198,146,137, 19, 39, 34, 55, 55, 23, 23, 47, 94, 68,143, 30, 61,176,101,203, + 22,207,203,151, 47,127,215,169, 83, 39, 80, 20,133, 11, 23, 46,192, 96, 48, 60,169,130,102,196,212,169, 83,191,120,231,157,119, + 16, 28, 28, 12,149, 74,133,105,211,166,233, 63,249,228,147,178, 62, 87, 63,252,240,195, 59, 9, 9, 9,188,115,197,131, 7, 15, + 30,255, 29, 84,169, 69, 42,148,229,127,112, 28, 55,168,162,171, 85, 81,124,153, 28,170,242,219, 21,207, 47, 61,174,253, 43, 34, + 99, 18, 88, 85,187, 86, 28, 3,202,190, 53,152,156,168,114, 2, 75,245,194, 41, 34,137, 28,140, 25,194,101,209,100, 24,156,108, + 85,130, 95,151,147, 16,138, 29,232,198,189,207, 69, 87,117,174, 92, 46, 7,203,178,102,233, 48,209,192,119,168,134,253,134, 35, +174,149, 43, 56, 3, 93,230,100, 97,193,130, 23,196,149, 72, 36,130, 94,175, 7,106,110,214, 10, 38, 8,226, 57, 69, 81,119, 0, +112,129,129,129, 59, 13, 6,195,240,220,220, 92,187, 41, 83,166,208, 89, 89, 89, 56,118,236, 24,118,237,218,165, 41,162, 5,161, +185,217,134,247,227, 85,234,148,106,248, 34, 6, 93,139,126,193,185,122, 13,156, 47,225,117,112, 42, 20,138,206,206,206,206,101, +226, 74, 34,145, 64, 46,151, 35, 53, 53, 21, 2,129,224,149, 38,233,244,244,244,148,248,251,251,207,157, 48, 97, 2, 30, 61,122, +132,121,243,230,169,148, 74,229,209, 19, 39, 78, 76,155, 61,123,182, 32, 48, 48, 16, 25, 25, 25,216,190,125,187, 33, 56, 56,120, +117, 90, 90,218,186, 74, 51,173, 64, 48,121,197,138, 21,156, 82,169, 36,226,226,226, 94,112,174, 10, 10, 10, 70, 5, 5, 5, 73, +227,227,227,121,231,138, 7, 15, 30, 60,254, 91,168,174, 5, 45,171, 84, 60,165, 87,178, 77,149, 19, 86, 21,183, 51, 42,108, 3, +128,190,194,241,200,191, 82, 96, 85, 10, 3, 67,230,255,190,229, 35,155,161, 35,167, 67,234,218, 13,250,132,131, 96, 53,233,101, + 2, 75, 36,181,130,181, 99,125, 20, 20,105,112, 43, 38, 30, 6,134,204,175,142,207,104,132, 96,230,103,255, 27, 45,104,107,107, +139,252,252,252, 23, 28, 45, 11, 11, 11,184,185,185,161,160,160, 0,135, 15, 31, 6,199,113,183,106,112,195, 86, 76,152, 48,225, +235,233,211,167,147, 13,199, 78, 66,209,221, 27, 47,185, 86, 82,169, 20, 50,153, 12,169,169,169,120,252,248, 49,203,113,220,138, + 26,212,241, 61,146, 36, 35, 14, 28, 56,144, 18, 24, 24, 56,209,206,206,110,236,164, 73,147,100,193,193,193, 88,177, 98,133,224, +194,133, 11,116, 72, 72,136,145, 97,152, 57, 74,165,114,123,141, 57,134, 32, 42,138,171, 87,230,172, 68, 92,189, 50,167, 66,161, +232,228,230,230,118,238,251,239,191,183, 72, 75, 75,131, 68, 34,129,149,149, 21,146,146,146,176, 98,197, 10,181,209,104,236,255, +138,249, 77, 98,105,105, 41, 49, 24, 12,216,189,123, 55, 82, 83, 83, 59,166,165,165, 37,177, 44,187,253,227,143, 63,222,228,227, +227,211,236,241,227,199, 79,138,138,138,102,164,167,167, 63,170,138,196,214,214,182,163,147,147, 19,113,231,206, 29, 76,155, 54, + 77, 63,115,230,204,178, 62, 87,188,115,197,131, 7, 15, 30,111,160,242, 34,136,224,234,182,255,141,168,118,177,231,204, 98,141, +243,246, 61, 71, 55,141,126,183,151,246,220,229,203,128,231, 4, 8,221,251, 1,148, 20,110,141, 59,195,233,173, 14,136,124,154, +134, 99, 55,162,181,177,169,250, 77,153,197,154,138,235,237, 85,187,218,118,126,126, 62,222,122,235, 45, 60,187, 60,176, 69,200, +161,102,126,126,246,155,253,234, 97,125,139,203,151, 47, 99,253,250,245, 69,177,177,177, 27, 26, 55,110,252, 69,117,156, 17, 17, + 17,203,146,147,147,125,231,207,159,127,118, 97, 74, 1,114,151,111, 69,193,103, 19,144,214,171, 21, 44, 44, 44,224,232,232, 8, +181, 90,141,235,215,175, 35, 50, 50,242,172, 86,171,245,141,136,136, 88, 86, 29, 39,199,113,119,125,124,124,226,218,181,107,103, +149,159,159,255,253,132, 9, 19,100,106,181, 26, 89, 89, 89,200,206,206,198,189,123,247, 46,232,245,250, 22, 53,136,150, 50, 78, +150,101,203,196,213,235,226, 44,143,215,197,105,105,105,249,229,177, 99,199, 44, 72,146,132, 68, 34,129,141,141, 13,146,147,147, +177,124,249,114,181, 70,163,233,175, 82,169,204,157,160,179,202,116,103, 89, 22, 70,163, 17, 28,199, 65, 44, 22, 23, 0, 64,122, +122,250,163,248,248,248, 94,167, 78,157, 82, 60,123,246,172,123, 21,226,170,140, 51, 43, 43,235,234,243,231,207, 97,105,105,137, +153, 51,103,138, 87,175, 94,253,235,247,223,127,175, 13, 10, 10, 18,245,238,221,123,203,185,115,231,154,106, 52,154,110,102,136, +171,255,207,171,214,243,156, 60, 39,207,201,115,254,219, 56,223, 40, 84,235, 96,197,196,128, 6, 10, 63,245,241,177, 90,182,118, +219,239,219,126, 61,116,100,196,148, 49,111, 11,252, 91,245, 64, 66,218, 9, 92, 15,189, 98,204, 45,228,142, 21,234,169,105, 49, + 49,133, 53,142,253, 23, 8, 96,156,191,240, 61, 1, 0, 8,133, 48, 46, 24, 60,248,106,139, 22, 45,186, 12,109,147, 33,154, 54, +179,196,217,218,182,249, 61,209,213,171, 87, 15, 73, 36,146, 31, 19, 18, 18, 10, 82, 83, 83,107,140, 68,100,100,228,125, 0, 3, + 40,138,234,246,197, 23, 95,124, 51,208,203,163,221,136,142,221, 33, 20, 10, 17, 18, 18,130,156,156,156, 96,146, 36,231, 70, 68, + 68, 92, 55,231,166,156, 60,121, 50, 5, 0,138,139,139, 87, 52,110,220, 88, 28, 19, 19,131,103,207,158, 33, 54, 54, 22, 12,195, + 60, 77, 77, 77,173, 85,135, 56,169, 84,122,143, 32,136,232,215,201, 89, 30,175,139, 83,163,209,172, 94,185,114,101,223,101,203, +150, 73,172,172,172, 16, 17, 17,129,101,203,150,169,181, 90,109,109,196, 85,181,224, 56, 14, 6,131,161, 86, 35, 63, 43,193,220, + 54,109,218, 52, 93,185,114,101,227,210,190, 92,188,115,197,131, 7, 15, 30, 60,254, 59, 2,235,127, 66,171, 48, 23,192,187,190, + 62, 86,222,171,183,238,221, 41, 19,179, 93, 52,122,242,166, 70, 71, 78,137,136, 41,140, 51,247, 98, 43,127,130,240,197, 61, 42, +216,218,218, 90, 38,187,162,200,180, 39, 57, 29, 80,169, 84,107,235, 18,153,208,208,208,235, 0,218,115, 28, 55,226, 12, 65, 44, + 0,226,193,113,220,234,136,136,136, 99,181,225, 9, 8, 8,120, 75,173, 86,255,170,211,233,124, 89,150, 21, 95,187,118, 13, 90, +173, 22, 49, 49, 49, 26,150,101, 15,215, 54, 92, 9, 9, 9,209,175,155,243,175, 8,103,106,106,106,200,233,211,167,123, 19, 4, +113,113,238,220,185,146,229,203,151,191, 86,113,101,111,111, 95,156,150,150,150,173,213,106, 29,210,211,211,245,246,246,246,197, +137,137,137,117,161,122, 90, 80, 80,208,234,243,207, 63, 95,254,197, 23, 95,124,249,205, 55,223,136,248, 62, 87, 60,120,240,224, +193,227, 63,143,192, 64, 71, 75, 51, 79, 53,203, 66, 92, 52, 25,134,121, 19,193,205,155, 8,110,209,100, 24, 94, 7,103, 45,241, + 2,103,147, 38, 77,246, 59, 58, 58, 26, 69, 34,145,142, 36,201, 98,138,162, 10, 4, 2, 65, 26, 73,146,211, 96,198, 52, 22,255, +101, 78, 0,112,113,113,105,219,188,121,243,253, 10,133,162,211,235,184,159,229,225,234,234,218,215,195,195,227,160,155,155, 91, +247,215,196, 25,208,191,127,255,231, 50,153,236,182,185, 21,134,191, 51, 47,241,156, 60, 39,207,201,115,242,156,111, 14, 56,142, + 51,251,243, 87,131,207,124, 60,231,223,193, 73,212, 65, 92,241,247,147,231,228, 57,121, 78,158,147, 23, 88,127,153,192, 34,193, +131,199, 27,144,231,193, 55, 11,242,224,193,131, 7,143,127, 17,136,106, 84,104,109, 86,202,174,139,146,125,192,115,242,156, 60, + 39,207,201,115,242,156, 60,231,255, 59,206,154,184, 31,224, 95,138,191,163,233,239,175, 20, 94, 60, 39,207,201,115,242,156, 60, + 39,207,201,115,254,255,227,252,215,131,111, 34,228,193,131, 7, 15, 30, 60,120,240,248, 7, 81,235,142,193, 1, 1, 1,141, 0, + 32, 36, 36,228,233, 95, 24,174, 79, 20, 10,197,148,214,173, 91,251,136, 68, 34, 50, 63, 63,127,217,181,107,215,150, 85,118, 98, +235,214,173, 67,251,246,237,235,125,229,202, 21, 61,240,191,245, 7, 77,223, 12,195,164,132,133,133,181,229,147,250,159,129,171, +171,235, 57,169, 84,234, 89, 50,193, 40, 7, 35,203,128, 97, 57, 48, 12, 11, 3,195,129,214,107, 19,245,197, 5,253,234,196,221, +102, 68,125,134, 97,131, 56,112,219, 8,142,152,198, 17,220, 54,130, 35, 62,230, 72, 98, 27,193,114, 31, 65, 96,252, 22, 70,193, + 23, 2, 86,184, 80, 21,115, 56,249, 77,184,159, 75,151, 46, 37, 95,241,255,149,174, 63,229,235,235,123, 90, 42,149, 54,172,234, +127,197,197,197,170,168,168,168, 30,111,114, 94,117,113,113,233, 70,146,228,102, 0, 45, 42, 28,122, 4,224, 83,149, 74,117,233, + 85,175, 17, 32,147, 9, 28, 41,234, 35, 33, 65,124, 5, 0, 6,142, 91,155,197, 48, 63,134,104, 52,255,154, 62,132, 78, 78, 78, +215, 41,138,106,172, 46, 46, 86, 23, 21, 22,122,203,229,242, 56,153,133,165, 37, 99,100,158,100,103,103,118,227,223,106, 60,120, +188, 38,129,229,231,231,215, 4, 64, 32, 65, 16,129, 28,199,117,107,220,184,177, 75,113,113, 49, 24,134, 73, 39, 8,226, 58,199, +113,215, 0, 92, 11, 15, 15,143,125, 29, 1, 34, 73,114,221,119,223,125, 55,103,230,204,153,101, 34,233,193,131, 7,104,213,170, + 85,165,231, 83, 20,229,177,102,205, 26,155,164,164, 36,136, 68, 34,136,197,226,178, 15, 69, 81,232,208,161, 67,173,174,111,103, +103,103,229,236,236,188,140, 32,136, 81, 36, 73, 82, 53,157,207,178, 44,195,113,220,161,140,140,140, 37,185,185,185,133,181,185, + 86, 91,255, 86, 6,128,168,226, 26, 28, 19, 26,118, 95, 88,221,255,155, 52,105, 18, 42, 16, 8, 60,202, 11, 74, 19,202,111,151, +255,205, 48, 76,202,195,135, 15,219,154,123, 47,164, 22, 22, 95, 18,164,160, 55, 56,182, 89, 9, 25,249,136, 99,141, 23,181,197, +197,235,204,137,175, 68, 34,241, 12, 11, 15,111,252,240,113, 60,188, 27,212,135,158, 54, 66,167, 55,224,196,197, 16,180,241,241, +194,208,129,125,234,156, 87,140, 44,177,116,225, 39,239,247, 92,189,121, 95,192,130,153, 99,229,171, 55,239,107,187, 96,230, 88, +171,213, 91,246,181, 93, 56,235, 61,171,149,155,127,111,187,112,214,123, 54,171, 54,255,174, 7, 48,185, 46,215,152,212,178,190, +154,100,140,146, 74,211,158, 18,232,126,121,144,100,249, 79, 60,184,171, 87,175,110, 66,211,116,204,196,209,109, 87, 52,107,228, +156, 81,217, 57,249,249, 25,206,207, 30,133, 46,134, 80,228,227,211,110, 65,181,207,167, 72, 36,106,112,253,250,245,198,166,153, +246, 25,134, 1,195, 48, 48, 26,141,208,235,245,120,231,157,119, 4,175, 35,220,254,254,254,147, 56,142, 91, 85,146, 45,137,149, + 97, 97, 97, 91, 94,129, 78, 46, 16, 8, 62, 23,139,197,129, 70,163,209, 7, 0,132, 66, 97,140, 78,167,187,102, 52, 26,191, 3, +254, 55,191,158,153,239,158,141,193,193,193,205,173,172,172, 64,211,116,217,194,240, 20, 69, 53,107,223,190,253, 86, 0,141, 95, + 53,254,142, 20,245, 81,167, 46, 93,190,159,244,217,103, 84,110, 72, 8, 54,239,220,185, 17,185,185, 0,176,181,166,255,186,187, +187,135, 18, 4,225, 81,155,235,113, 28,151,146,154,154, 90,171, 10, 38, 69, 81,141,159, 39, 41,157,223,170,239,134,162,194, 66, + 88, 88, 88, 90,134, 60, 72,112,246,111,241, 22, 95, 98,242,224,241, 58, 4,150,159,159,223, 25, 0,129,205,154, 53,147,245,233, +211, 7,126,126,126,240,244,244,132, 84, 42, 5, 0,228,228,228,184, 60,124,248,240,221,136,136,136,119,239,220,185, 3, 0, 26, + 0, 55,195,195,195, 43,117, 35,122, 13,238, 50, 83, 42,151,124, 15, 0,153,169,217,170,148,184,140,205, 42,149,106, 29,128,242, + 53,106,239,241,227,199,207,158, 53,107, 22, 78,159, 62,141,125,251,246, 65,167,211, 33, 63, 63,191,202, 8, 48, 12,147, 50,126, +252,120, 65,108,108,172,177, 42, 7,171, 54, 55,196,217,217,121,217,232,209,163, 63,107,222,188,121,217,178, 46, 6,131,161,236, + 59, 55, 55, 23,179,103,207, 54,189,188,192,178, 44, 46, 95,190, 60,243,171,175,190, 66,110,110,238,231,149,113,246,238,230, 29, + 42, 32, 8, 15,246,127,162, 44,229,226,141,248,182, 0, 65,133,132, 70, 18, 21, 94,136, 0,128,118, 1,190, 53,138, 59,129, 64, +224, 17, 30, 30,238, 44, 18,137,204,138, 27,203,178,240,243,243, 51,235, 92, 55, 55,183, 30,148, 64,180,111,196,152, 15,237,124, +253,252,132, 30,110, 10, 24,140, 70,196, 39, 36,181,139,140, 8,243, 61,127,234,192, 20,169, 84, 58, 86,169, 84, 94,169,142,199, +192,176,136,140,126,138, 11, 55,195, 49, 68, 36, 69,177, 86,143,194, 98, 61,126, 61,121, 11, 41, 25,249,117,206,184,237,218,181, +115,207, 52,234,219,207,154, 60,220,242,219, 31,246, 88,206,154, 60, 28,235,183,253, 90,246, 61,243,195, 97, 88,247,195, 30,249, +172, 15,135, 97,243,246, 93, 29,189,218,181,115, 15, 14, 14,174,114, 89,128,170,210,136,100,140,146,157, 15, 83, 41, 0,200,220, +190, 29,116,122, 58,220,150, 44, 1, 0, 76,109,225, 33,169, 77,152, 91,180,104, 81, 38,136,171, 21,142, 70, 99, 74,116,116,116, +219,154,196,149,209,104,228, 4, 2,193,226, 27,127, 46, 59,220,169, 93,147, 23,110,102,236,147, 88,155,165, 95, 47, 25,121,240, +108, 33,247,110,127,171,152,152,224,213,213,138, 44,150,101, 73,157, 78,135, 39, 79,158, 84,218,137,147, 36, 73,166, 46,233, 20, + 24, 24, 40, 81,171,213,191,203,229,242,214,106,181,122, 18,203,178, 95, 95,189,122,213,133, 36, 73,244,238,221,251,107,127,127, +255, 4,137, 68,242,131, 86,171,141,144,203,229, 99,175, 93,187,166, 51,147,186,155,149,149,213,175,199,143, 31,183,243,243,243, + 35,179,178,178,224,229,229,133,156,156,156,118,215,175, 95,247,255,240,195, 15, 63, 44, 44, 44, 28, 15,224,122, 45,130,219,212, +210,210,146,155, 48, 97, 2,193, 48,255,139,238,207, 63,255, 12,255,134,233, 13,251,248, 74,139,181, 52,151,127, 35, 74,250, 49, + 71,114, 55, 19, 19,243,107,157,129,133, 4,241,213,164,207, 62,163, 68, 42, 21, 44, 99, 99, 49,152, 32, 4, 59, 74,220,172, 26, + 5, 22, 65, 16, 30,203,118,126,234, 44, 22,139, 97, 48, 24,202, 62, 28, 11,128, 3, 56, 22,224, 88, 14, 28, 7,128, 35,192, 50, + 44,214,207,223, 89,231,103,204,194,210,210,194,197,197, 53, 93,102, 97, 97,193,129, 7, 15, 30,175,211,193, 26,112,245,234, 85, + 24,141, 70, 88, 89, 89,129,162, 94, 44,239,237,237,237,209,173, 91, 55,180,111,223, 30,189,123,247,198,227,199,143,101,223,124, +243, 77,149,118,196,123,115, 6,163, 94, 99, 23,147,136, 80,220, 56, 29, 30,244,211,178, 35,142, 42,149,170,252, 90,131,147,166, + 78,157, 74,100,103,103, 99,212,168, 81,215,117, 58,221, 48, 0, 5,213, 69, 32, 42, 42,170,109, 84, 84,212,107,187, 33, 4, 65, +140, 82, 40, 20,216,191,127, 63,244,122,253, 75,199,173,173,173, 17, 29, 29, 93,190,182, 7, 95, 95, 95,138, 32,136, 81, 0, 42, + 21, 88, 36, 65,120,252,121,245,105,217, 58,141,163,135,250,138,250,116,243, 78, 47,210, 26, 56, 0,196,194,133, 11,203,196, 21, +199,113, 88,190,124,185,217,225, 21,137, 68,120,244,232, 17, 40,138, 66, 92,151, 38, 0,128,150,225,201,160, 40, 10,145,173,221, + 0, 0, 29,159,228, 66, 32, 16, 64, 46,151,155, 43,174,186,187, 40, 60,142,207, 95, 18,100,165, 53,112,248,227,114, 48,146,148, + 23,192,113, 28, 20,206,246,232,228,239, 39,244,105,213,218,249,151,173,235,142, 3, 24,166, 84, 42,175, 86, 45, 22, 24,248, 52, +105,128,221,199,175, 99,213, 15,135,145, 93,160, 69, 97,113,201,125,237,221,177, 57,126, 94, 95,183,116,162, 40,106, 93,179, 6, + 13,234,237, 62,120, 14,157, 58,180,195,238,131,103,209,177, 67, 59,236, 62, 84,178,189,231,208, 57,116,237,216, 30,123, 14,157, + 67, 75,159,198,245,179,159,231,175, 3, 48,166, 74,247,162, 98, 26, 13, 43, 73, 35, 65, 30, 67,152,210,230,249,180,105, 37,247, +167, 84, 96,213,250, 97, 43, 21,196,102,184,198, 53, 58, 87, 70,163, 17, 25, 25, 25, 68, 94, 94, 30,103,107,107, 59,178,188,200, + 50,137,171, 3,127, 22, 64, 19,187,153,216,187,247, 26, 59,110, 92, 96, 76, 76,240,106, 31,148, 52,119,189, 4,154,166, 19,250, +246,237,203, 1,128, 94,175,119, 23,139,197,162, 10, 2,204,173, 83,167, 78, 47, 9,180,154,154, 14,213,106,245,239,135, 14, 29, + 26,225,226,226,130, 97,195,134,157,111,222,188,185,216,194,194, 2,127,254,249, 39, 60, 60, 60, 28,173,173,173,207, 4, 5, 5, + 97,195,134, 13,245,207,159, 63,191, 15,192, 8, 51,110,101,239, 30, 61,122,236, 63,125,250,180, 84, 36, 18, 65,163,209, 32, 58, + 58, 26, 54, 54, 54, 16,139,197, 24, 54,108, 24,213,169, 83, 39,135, 30, 61,122, 28,137,141,141, 29, 11,224,162,185,105,164,209, +104,184,249,243,231,195,194,194, 2,150,150,150,101, 31,153,152, 33,182, 45,109, 32,251,108, 77,154,108,225, 87,227,214,236,248, +229,212, 21,150,229,190, 78, 78, 46,200,171,109, 62,200, 13, 9,129,101,108, 44,180,161,161,181,206, 67, 30, 84, 43,204,251, 98, +158, 73,244, 66, 44, 22,191,224,220,155,126,139, 68, 34,248,250,250,214,200,215,172, 89,179,237, 20, 69, 57,189, 16,190,220, 92, +106,241,162, 5,198,251,209,143, 45, 13, 70, 88,106,245, 6,172, 92,254,181,145, 34, 41,170, 69,139, 22,199, 56,142,203,124,248, +240,225,199,124,241,201,131, 71,221, 5, 22,228,114, 57, 66, 66, 66, 64, 16, 4,172,172,172, 96,109,109, 13, 27, 27, 27, 20, 20, + 20,224,225,195,135,120,244,232, 17, 18, 18, 18, 64,146, 36,188,189,189,129,151,103, 15, 47, 27,106,249,251,250,211,144,202, 37, + 32, 8, 32,160, 79,107,180,237,217, 6, 15,238,197,125, 26,114, 30, 59, 85, 42,213, 19, 0,130,150, 45, 91,126,216,161, 67, 7, +108,216,176, 1, 58,157,238,187, 42,196,213, 75,195, 55, 63, 26, 46,184, 33, 18,144,245,104, 35,155,252,227,113, 99,215, 54,109, +218,132,250,249,249,121,221,191,127,223, 96,114,179, 42, 54,147, 85,232,151,245, 2,103, 86, 86, 22, 88,150, 53,219, 21,202,203, +171,244, 29,251,160,162, 43,101,194,202,160, 13,182,133,249, 25, 88,177,246, 55, 24, 12, 6,204,153, 51, 7, 44,203,130,101, 89, + 48, 12,131,220,220,220,146,153,157,106,136,187, 41, 78, 20, 69,189, 32,128,107,218,174,142,211,209,209,209,146,164,132,251,190, + 88,184,194, 42, 42, 54, 5,167, 47, 7,131,227, 56,156,216,241, 53, 0, 96,216,212,229, 72, 85,101,162,147,127, 51, 76,252,232, +115,171,141, 65, 11,247, 57, 58, 58, 54,204,202,202, 82, 87,198,105, 48,178, 56,124,246, 14, 84,217, 69, 24, 63,162, 39,116,122, + 3, 50,210, 85,216,245,195,183,152,254,193, 81,216,201,101,174, 50,167, 6,177,229,239,145,149,149, 21,165,213,106,175, 63,121, +242,100,114, 85,225, 52, 24, 12, 3,230,127, 54, 5, 27,119, 30, 70, 11,111, 23,156,190,112, 23, 1, 45, 61,113,230,114, 48, 58, +182,242,194,217,107,161,232,212,198, 27, 87,238, 60,192,167, 31,143,195,151,159, 94, 31, 80,171, 52, 90,189,193,182,176, 32, 3, +127,172,222,131,140, 45, 91,144, 56,115, 38, 2, 74,243, 68, 8, 73, 66,228,238, 14, 88,215,124, 63, 43,195,163, 71,143,160,211, +189,108,212, 72, 36, 18, 52,107,214,172, 90, 78,147,115,149,158,158, 78,164,167,167,195,210,210,146,136,137,126,192,248,180,104, + 57,146,201, 57,184, 19, 0, 74,156,171, 2, 20, 63,222, 4,205,147,205, 16,229,221, 39,119, 44,255, 72, 63,245,235, 31, 99,202, + 61,163, 15, 42, 84, 84,202,238, 79,251,246,237, 31,221,188,121,179,105, 57, 23, 24, 70,163, 81,100, 52, 26, 27,155,154, 13,141, + 70, 35,116, 58, 29,198,142, 29, 75, 85, 23,119,153, 76,214,218,197,197, 5,247,238,221,195,210,165, 75,197, 45, 90,180,192,147, + 39, 79, 64,146, 36, 38, 77,154,132,230,205,155, 35, 51, 51, 19, 1, 1, 1,184,113,227,134,175, 25,247,211,202,210,210,242,151, + 83,167, 78, 73, 73,146, 68, 97, 97, 33, 88,150, 69,231,206,157, 65, 16, 4,238,223,191,143, 69,139, 22,225,232,209,163, 56,126, +252,184,204,223,223,255,151,226,226, 98, 31, 0,133,102,164, 17,167,211,233, 56,169, 84, 10,169, 84, 10,137, 68, 2,137, 68, 2, +145, 72, 4,141,158,194, 71, 75, 18,116, 66,137,156,109,221,202,187,225,244,169, 35,200, 21,107,118, 93, 6,112,194,220,116, 7, + 74,250, 92,109,249,233,167, 77,131, 74,150,116,194,161,194, 66,214,192,113,107,205,121, 54, 1, 64,201, 69,195,190, 5,129,243, +187, 66, 49,108, 90, 55,136,132, 98,136,132, 34,136, 69, 98, 8, 75,127,139,132, 34,136,133, 18, 80,142,218, 26, 57,133, 66,161, + 99,120,120,184,109,249,247,131,209,104,140,153, 57,115,166,247,136,161,131, 93, 14, 30, 61, 77,189, 63,122, 24,227,234,226,156, +149,156,156,248, 20,128,173,191,191, 63, 87,219, 60, 95, 7,240,156,255, 63, 57,171, 4,199,113, 1, 0,202, 87, 6,244, 0,196, +166, 98,187,244,221,230, 80, 97, 63, 0,100,150,126, 59, 85,177,157, 5,224, 33, 0,159,210,125, 12,128, 96,130, 32,114, 95, 53, +204, 38,129, 85,254,129, 33, 42,137, 24, 10, 10, 10, 80, 80, 80,128,228,228,100,108,219,182, 13, 66,161, 16, 2,129, 0, 2,129, + 0, 36, 73,150,245, 87,168, 10,151, 78,223,220, 12, 96,179,159,159,159,240,167, 59,135,207, 44,220,253,105,175,246,125,252,169, +208, 11,247, 71, 2, 88, 9, 96,192,132, 9, 19, 28, 1, 96,207,158, 61, 89, 0,254, 52,219,197, 17,144,245, 54,125,255, 91,253, + 89,159,190,111, 18, 20, 30, 59,119,238,180, 75, 73, 73,121,161, 70, 39, 18,137,106,236,151,197,113,220,161,167, 79,159,126,166, + 80, 40,202, 10,146,242,205,132, 70,163, 17, 82,169,180, 76, 12,233,116, 58,252,254,251,239, 70,142,227, 14, 85,195,137,216,232, + 75,120, 18,125, 5, 12,195,190, 32,166,180, 90, 45,150, 46, 93,250,194,212,250,211, 74,157, 18,115, 81,157,115, 69, 81, 20,110, +122,151, 40,129,129,153,220, 75,125,181, 42, 66, 40,150,206, 25,248,246, 56,123, 35, 71,149,137,171,146, 56,148,136, 11,177, 80, + 0,153, 68,136, 39,113,201,240,114,247, 71,175,254,195,237, 46,158, 57, 50, 7, 64,165,131, 16, 12, 12,139,129,221,253,241,195, +254, 43, 40, 40,210,162, 32, 47, 7, 89,201,143, 16, 19, 21, 12,177, 88,140,187,119,239, 90,217,216,216, 90, 53,104,224, 5,134, + 97,113,243,110, 40, 44, 44,100,216,191,111,175,151,142, 54, 32,233,121,194,228, 42,132,173,160, 83, 91, 31, 20,100, 37, 65, 32, + 16,160,147, 95, 67, 8, 4, 2,116,246,111, 12,138,162,208, 37,160, 41, 40,138, 66, 96,251,230,104,216,176, 33, 88,150, 21,212, +240,240, 34,246,193, 37,196, 62,188, 2,142,101,193,176, 37,205,191, 28, 0, 90,165,122, 57, 94,105,105,224,172,157,235,242,146, +192,220,185,115,243,148, 74, 37, 93,137,115, 40, 58,122,244,168,109,117,243,172,136, 68, 34, 31,129, 64, 16,147,147,147,195, 90, + 88, 88,144, 12, 99,100,125, 90,180,164,110,252,185,172,108,237,201,165,203,151, 29,126,183,191,245,200,223,118,157,226, 68, 78, +157, 9,130,146, 24,167,124,253,163, 24, 66,145, 15, 64,155, 83,105, 32,117, 58, 29, 30, 63,126, 92,227,156, 47, 28,199, 85,155, +161,212,106,245,196, 97,195,134,157,255,248,227,143,165,166,202,139, 64, 32, 40, 19,253,207,158, 61, 3, 73,146,216,177, 99, 7, +116, 58, 93,141, 25, 95, 32, 16,124,118,228,200, 17, 27,177, 88, 92, 38,174, 56,142, 3, 69, 81,120,244,232, 17,214,175, 95,143, + 9, 19, 38, 32, 41, 41, 9, 10,133, 2,115,230,204,145,175, 89,179,230, 51,154,166,205,177,133,163,244,122,125, 91,153, 76, 6, +137, 68, 2,147,208, 2,128,176,103, 46, 15, 18, 18, 18, 90,213,175,111,233,234,213,252,254,201,238, 93, 90,183,113,112,176,237, + 24,159,152,127,162, 54,233,159,100, 48,236, 80,170,213,139, 70,253,242,139,243,245,147, 39,217, 7, 39, 79,166, 8, 24,230, 71, +115,255, 47, 47,170,143,194, 88, 1, 2, 3, 3,113,237,218,117, 12, 30, 60, 24,140, 72, 4, 86, 44, 6, 43, 22,131, 19,137, 0, +177, 24,132, 88, 12,206,194,194,172, 44, 73, 81, 20,210,210,210, 94,216, 55,117,234,212,196,113,227,198, 57, 3, 28,148,202, 84, +238,243,207,102,165,102,101,101,113, 46, 46, 46,188, 45,193,227, 47,213, 81,213,104, 17, 39,130, 32, 78,151,123,247, 12, 54,109, +207,155, 55,111, 65, 80, 80, 80, 52, 65, 16,167,203,239, 55,157, 87,106, 72,156,174,108,187,244,191, 14,243,231,207,111,185,102, +205,154,213, 29, 59,118,220,127,251,246,237,120, 0,175, 77, 96, 17,165, 17, 51,107,253,186,202, 10,233,154, 4,150, 9,225,225, +225, 6, 55, 55,183,159, 30,133,198,247,106,218,182, 49,100,150,146, 62, 0, 54, 75, 36,146,207,199,143, 31,143,187,119,239,226, +193,131, 7, 63,163, 22, 51,115,211, 70, 54,121,214,167,239,131, 54,178,201, 38,135,106,206,156, 57,162,155, 55,111,210, 85, 57, + 88, 85,113,101,100,100, 44, 9, 14, 14, 70,117,157,220,223,125,247,221,242,133, 81, 89, 39,247, 42,115, 12,203,129,166, 13, 80, +171, 53, 37,194,170,180,240,102, 24, 6,106,181, 26,163, 71,143, 46, 19, 93, 44,203, 34, 35, 35,163, 78,137, 73,146,100,109,156, +171,202, 57, 40,170, 95,235, 54,126,194,203,183,163, 94, 40, 92,135,127,180, 18, 98, 81,137,184,146, 73, 69,144, 73,132, 72, 86, +166,163,153, 79, 11,209,181, 11,167,251, 85, 41,176,140, 12, 54,239,189, 0, 16, 4, 14,159,190,140,182, 94, 22, 88,182,104, 46, + 70,141, 26, 5,177, 88,138, 35, 71, 14, 97,221,214,221,152,230,233, 9, 14, 64,251,182,190, 88,187,125, 63, 86, 44, 95, 78, 30, + 58,120,184, 75, 77,225, 21, 10,133,160, 40,170,172,208,174,248, 77, 81,148, 89, 19,195,113, 44, 7,218, 96, 64,177, 90, 3,134, +101,193,178, 28, 56,150, 5, 56, 14,238,171, 86,193,125,213, 42,132,144, 37, 3,248,154,171,213,208,104, 52, 64,247,214,181, 22, + 87,122,189, 30, 74,165,146,142,138,138,170,172,164, 74,215,235,245,213,134,119,193,130, 5,177,171, 87,175,246,177,183,183,143, +137,138,138, 52,180,110,221, 70, 88,177, 15, 86,147,198, 77,242,151, 46, 95,118,248,253, 15,134,140,220,190,104,140,241,227, 37, +191, 10, 76, 29,221, 15,159, 93, 90,243,243, 68,211, 9,189,123,247, 54,171,219,141, 70,163, 73,171,234,152,169, 67,123,147, 38, + 77, 36, 61,123,246,196,245,235,215,177,106,213, 42,214,104, 52,102, 1, 64,167, 78,157,156, 86,172, 88, 65, 60,124,248, 16,182, +182,182,200,200,200,216,237,239,239,191,162,186,142,239, 98,177,184,123, 64, 64, 0,169,211,233,254, 55,215, 12, 73,226,209,163, + 71, 88,179,102, 13,198,142, 29,139, 38, 77,154,148, 61, 91, 61,122,244, 16,110,218,180,169,187, 57, 2,139, 36,201, 79,123,245, +234,245, 45, 74, 70, 17,150,127,201,197, 0,248, 18, 0,146,146,178,211,194,194, 98,163,123, 5,250,181,109,232,229,174, 8, 14, +123, 94, 45,167,179,179,243,124,146, 36,223, 5, 64, 1, 72,206, 35,201, 70, 78, 78, 78, 46,221, 6, 15, 70, 17, 65, 80, 63,158, + 61, 75, 8,100, 50, 57,146,147,205,106,106,204, 22, 62,131,194, 79, 6,145, 80,132, 9, 95, 13,197,233,211,167, 49, 99,233,184, + 82, 39,171,196,193, 18, 10, 69, 16, 9,197, 16, 59,213,109, 96, 98,233,187,137,176,182,182, 1, 0,216,216,216,152,222,155, 4, + 0,142, 36, 73,190, 75, 22,143,191, 10, 53,106, 17,147, 64,170, 40,180,130,130,130, 6, 87,220, 87, 94, 76, 85,246,187,252,127, +215,172, 89,179,186, 28,119,241,235,136,140,224,117,221, 21,131,161,250, 53,154,123,244,232, 49,211,202,202,234,123,211,246,243, + 91,169,120,126, 43, 21, 62, 77, 91,116,246,107,211, 54,111,236,216,177,112,112,112,192,151, 95,126,201, 1,248,165, 54,215,254, +241,184,177,107,249,237,200,200,200,182,145,145,145,117,138, 71,110,110,110, 97,105,103,245,207, 95,163,181, 9, 3,109,128,186, + 88, 11,154,166, 97, 48, 48, 48, 26, 25,248, 55,183,194,175, 63,206,133, 94, 79,195,192,148,236, 43,113,202, 24, 72, 68, 58,116, +107,239, 97, 0, 65,106,174,223, 77,178,174,142,191, 69, 88, 18, 40,138, 66, 84, 27,247, 74,157,171, 62, 74,218,108,161,197,177, + 76, 83, 23, 23,103, 36,157,189, 87, 82, 99,182,144,226,220,158, 21,176,180, 40,169,201, 15,152,176,160, 68,100, 73, 68,160,105, + 61,156, 93,222,130,145, 49, 52,173,138,207,104,160,245,173, 27,187,195,214, 74,134,200,144, 59,248,252,147,201,152, 52,233, 67, +136,164, 86,184,118,237, 10,146,148, 25,120,150,146,139, 79,150,252, 0,131,129, 1,109,100, 96, 48,178,216,184,235, 52,104,166, +102,101, 36, 18,137, 48,103,206, 28, 89, 85,199,247,239,223,175, 49, 75, 96,113,165, 34,184, 88, 3,157, 86, 7, 61, 93,146, 22, + 76, 3, 33, 86, 46, 26, 7,131,193, 0,205,152,142,160, 13, 6, 48,159,142, 0, 77,211, 72,182, 16,144,157,253, 21, 6, 16,164, +230, 86,104,170,181,185, 2,171,170,240,112, 28, 87,105,211, 97, 85, 34,171,117,235, 54, 49, 19, 70,183, 13,186,117, 59, 36,243, +214,237,144,151,206,107,208,164,109,220,199, 43,247,207, 55,103, 20,225, 11, 54, 78,185,230,194, 87,204,247, 95, 95,189,122,213, + 69, 46,151, 35, 54, 54, 22, 20, 69,129, 32,136,236,240,240,112, 23, 0, 24, 52,104, 80,150, 80, 40,116,160, 40, 10,159,125,246, + 25, 40,138,114,154, 49, 99,198, 98, 0, 85, 10, 44,163,209,232, 99,101,101,133,194,194,194,178,251, 40, 22,139, 49,111,222, 60, +188,255,254,251,101,226, 74, 44, 22, 99,247,238,221,240,247,247,135, 94,175,247, 49, 39,188,169,169,169, 33, 0,186,154, 33, 64, + 74,250,229,177,108,141, 25,139, 36,201,137,145,211,166, 53,210, 6, 7, 99, 58,203, 54,111,218,180, 41,180,218,255, 53,221, 53, +108,216,176,126, 74, 74, 74,154, 66,161,216, 11,224, 7,149, 74, 21, 81,173,131,165,174, 7,109,130, 24,140, 72,132,253, 39, 78, +224,253,247,223,135, 88, 44, 41,115,174, 32, 18,129, 16,139, 65,138, 68, 96, 40, 73,173,211,140,101, 89, 20, 20, 20, 80,187,119, +239,110,208,162, 69, 11,130, 3,208,172, 89,115,226,244, 31,127,212,151,203,229,241,246,246,246, 52,120,240,248, 39, 21, 88, 57, +129,244, 58,184,230,205,155,183, 0, 0, 55,111,222,188, 5,166,237,160,160, 32, 13, 0,229,191, 70, 96,213,228, 96,109,216,176, +161,202,169, 22, 76,133,203,166, 77,155,240,235,175,191,110, 0, 16, 87,155,107, 79, 29, 38,184,103, 33, 19, 41,138, 53,180,106, +199, 9, 99,251,214,173, 91,135,118,236,216,177, 65,104,104,104,149, 14, 86, 85,115, 99,253, 21,211, 52,112, 28, 7, 61,109, 64, +113,177, 6, 90,189, 30,179,231,110, 53, 43,237,105,125,161, 96, 80,255,110,178,154,156, 68,115,250, 96,213,212, 52,248,162, 88, + 54,194,164, 1,138,138,181,232, 49,118, 30, 66, 78,150,104, 99,147,184,146, 73,132,144,138,133, 32, 9,128,168,198,248, 52,104, + 10,134,126, 53,115,242,141,109, 63,255,234, 49,188,219, 20,204,154, 53, 11, 2,177, 5,236, 28,156, 96,100, 56,212,119,115,198, +179,148, 92, 28,217, 50,183,212, 27,230,208,237,189,165,216,176,104, 10,214, 45,173,185, 6, 78, 81, 20,182,108,217,162,169,232, + 90,149,119,178,204, 21,193, 38,151, 81,163,211,227,139,249, 63,152,159, 70,253,186,202,204,189,183,149, 13,156, 48, 87,128, 85, + 20, 89,165,174, 72,149,141,126, 18, 7,192,167,243,192, 69,255,228,203,144,101, 89,252,241,199, 31, 47,185,171, 21,211,208, 92, +183,149,101, 89, 36, 38, 38,226,193,131, 7,232,216,177, 35,242,243,243, 33, 0, 48,231,254,125, 52, 31, 63, 30,186,210,174, 11, + 98,177, 24, 83,167, 78,253,171,234,216, 37, 2,139,168, 62,161, 92, 93, 93,215, 55,107,214,172, 81, 92,110, 46,194, 34, 35,209, +174, 52, 60, 55,111,222, 44,239, 0,226,189,247,222, 19,199,199,199,127,248,232,209,163, 15, 57,142,219,144,150,150, 54,167, 42, + 78,181, 69, 10, 92, 90, 74,240,203,154, 99,152,185,124, 2,156,154, 73,177,126,254,142,178,227,235,126, 90, 90,218, 15, 75, 12, +169,188,246, 81, 43, 40, 40, 16,124,187,126,125,235,246,237, 58,200,222,159, 48,137,212, 27, 89,172,252,230,123,234,224,190, 61, + 14,123,246,252, 38,147, 74,165, 49,124, 17,207,227,159,196,235, 18, 87, 21, 29,172,160,160,160,232,160,160,160,151,220,176,191, + 84, 96, 81, 20,133,242, 67,150, 43, 43,228,205,233,131, 53,123,246,108, 88, 89, 89, 85,122,140,166,105, 46, 42, 42,234,161, 74, +165,218, 89, 93,237,181, 42,136,133,164,203,134,111,119,121,204,250,244,125, 22, 40, 25,173,181,117,235, 86, 91, 83, 31,172,242, +253,176,106,234,131,229,236,236,188,108,237,218,181,179, 6, 12, 24, 64,146, 36,249, 66,225,103,154,150,161,252,199, 96, 48,224, +212,169, 83,179,130,130,130,170,156,166,129,227, 74,154,159,212,197, 26,104,117, 37, 5,236,179, 7,135,205,205, 1, 53, 59, 14, +165,206, 85,135,216,156, 74,157,171,179, 46, 37, 5,215,192,204,154,185, 8,146,138, 77, 72, 76,110,231,234,104,139,220,252, 34, + 72, 74,155, 5, 77, 48,137, 43,153, 68, 4, 59, 27, 57,114,178, 51, 32, 20, 10,171,115, 71, 18, 51, 84,137, 93, 71,143, 24,120, +158,164, 4,210,242, 7,132, 50,107,139, 11,183,238,219,165,231, 22,131, 45, 23, 79,150,227, 48,115,133,121, 38,166, 80, 40,196, +140, 25, 51,170, 20, 56, 39, 78,156,208,212, 94, 96,233,106,151, 70,181,112, 50,107,114,176,204, 21, 88, 21, 97, 26, 93, 40, 18, +137,124, 74,197,151,217,104,221,186,245,159, 22, 22, 22, 94,230,158,111,238,164,163, 4, 65, 44,239,217,179,231, 42, 15, 15, 15, +231,143, 63,254,152, 16, 8, 4,104,219,182,173, 99,239,222,189,243, 1,160,105,211,166, 86,166,119,204,198,141, 27, 17, 19, 19, +147, 73, 16,196,138,106,159,117,177,248,145,141,141, 77,219,158, 61,123, 34, 63, 63, 31, 73, 73, 73,144,203,229,104,190,126, 61, +238, 79,159,142, 54,219,183,131,236,217,179, 68, 96, 74, 36,184,127,255, 62, 36, 18,201,163,242,174, 81,121,184,185,185,181,231, + 74, 58,153,119,198,255,154, 37, 56, 0,183, 8,130,248, 74,169, 84,222,123,217,150, 34,200,146,138, 90,245, 9, 69, 16,196,123, +243,231,207, 7, 41,147, 65,209,177, 35, 52,113,113,160,105, 26, 29, 58,116, 64, 64, 64, 64,201, 51,219,161, 3, 40,138, 66,163, + 70,141, 96,111,111,143,163, 71,143,190, 7,160, 74,129, 37,206,119,129, 46, 89,130,137, 19, 39, 66, 36, 18, 3, 98, 49,190,248, +226,139,114,239, 56, 49,168,210,254, 88, 44, 35, 54,167, 6,207, 85,168, 0, 16, 18,177, 88, 50,225,131, 15,201,175,190,248,156, + 53, 24,141,172, 64, 32, 36,231, 44, 92, 77, 62,121,252, 64,162, 86,171, 73,162, 54,181, 53, 30, 60,254, 2, 7,171,188,208, 42, +231, 66, 85,133,204,242,253,178,170, 18,104,229,251,100, 1,208,189,142,176, 10, 94,168,151,189,136, 39,145,145,145,141, 91,180, +104,129,164,164,164,170, 70,202,149, 12, 97,150,201,240,244,233, 83, 0,120, 82,213,133,174, 92,185,178, 25,192,102,211,182, 66, +161,232,216,125, 84,247, 91,109,122,250,225,240,119, 7,243, 85, 42, 85, 27,252,111, 78, 44,194,205,205,237,125,161, 88,240,110, +195,150,245, 3, 25,150, 93,123,229,212,173,101, 85,113, 87,236,131,101, 52, 26,235,220, 7,139, 32,136, 81, 3, 6, 12, 32, 31, + 62,124,136,209,163, 71,227,183,223,126,171,242,230,189,255,254,251,216,191,127, 63,250,245,235, 71,174, 89,179,166,202,105, 26, + 56, 14, 48,208, 70,168,139,181,208,106,117,127, 89,198,123, 85,231, 10, 0, 56,214,120,241,126, 68,152,111, 43,255,142,194,132, +228, 52, 72,197,194, 23, 4,150,133, 68, 4,169,164,100,159,171,147, 29,130,111, 95,163,141, 70, 67, 77,195,224, 19,105,109,209, + 75,147, 52,114, 4, 21,219,167,115, 43,187, 74, 29,207,249, 19,208,234,192, 6,179, 4,214,207, 63,255,172,169,202,189, 50,247, + 30,112, 28,202,154, 8,139, 53,175, 55,141,156,157,157,157,156,157,157,183,217,218,218, 74, 77,125,135, 42, 59,110, 99, 99, 35, +173,206,225,170, 73, 92,149,206,139, 21,179,122,245,234, 90,137, 44,177, 88,236,117,235,214,173,198,166,126,129,213,125,235,245, +122,188,251,238,187,102,217,130, 97, 97, 97,191,248,250,250, 62,115,114,114,186,208,169, 83, 39,201,195,135, 15,177,114,229, 74, + 66, 40, 20, 90,155,158,203,194,194, 66, 8, 4, 2,228,230,230,130, 32,136,137, 97, 97, 97,103,171,227,212,233,116, 87,175, 94, +189,234, 59,116,232, 80, 42, 38, 38, 6, 2,129, 0, 44,203, 66,215,161, 3,218,108,223,142, 7,159,127,142,110, 9, 9,208, 25, + 12,144, 74,165, 56,123,246, 44, 93, 92, 92,124,181,154,184,239,184,115,231, 78, 11,169, 84, 10,154,166,193,178, 44, 72,146, 36, + 40,138,234,210,162, 69,139, 77, 0, 2,202,159,255,214, 91, 78,206,109,219, 52,105,202,176, 44,147,170,204,204, 52,195, 17,194, +111,191,253,134, 14, 29, 58, 32, 48, 48, 16,169,169,169,136,139,139,195,192,129, 3,203,206,137,140,140, 68,120,120, 56, 26, 54, +108, 88,179, 3,106,149, 9, 39, 31, 73, 89,127, 43,145, 80, 4,145,160, 68, 88,153,156, 43,145, 80, 4,145, 72, 12,137,216,172, +110, 1, 92,197,252,104,234,123,101,105,105,193, 54,106,212,232,225,147,167,207,154, 3, 32,109,108,108,205,238,107,203,131,199, + 43,121,196,213, 8,165,242,143, 67,185,237, 76, 0, 68,233,118,102, 57, 33,149, 73, 16, 68, 8,199,113, 1, 21,206, 53, 29,215, + 87,248, 54, 29,143,124, 29, 17,169,238, 69, 57,112,242,228,201,219,251,246,237,219,107,206,156, 57,144,203,229, 80,169, 84,101, + 15,152, 88, 44, 70,189,122,245,160,209,104,112,253,250,117,228,229,229, 93, 6,240,145,185, 23, 86,169, 84,119,159, 70, 60,201, +238, 50,180,189,131, 79,251,166,182, 41,177, 41, 29, 84, 42,213,109, 0,132,187,187,251, 79, 99, 62, 31,240, 65,143,183,219, 65, + 36, 22, 34,249,105, 26,174,156,186, 85, 37, 87,197, 62, 88,175, 50, 55, 22, 73,146, 20, 65, 16,248, 63,246,174, 51, 44,138,171, +141,158,153,237,141,165,151, 5, 4, 21, 68,170, 32, 98,239,189, 97, 52, 81,163,209,196,146,104, 44,177,196,196,168,137,137, 88, + 34,182, 68, 99,236,189,196, 30, 53,198,174, 81,193,174, 20, 27, 40, 40,136,180,165,119,216, 62, 51,223, 15, 74,144, 80, 22, 52, +159, 38,153,243, 60,251,236,206,206,238,153, 59,119,238,204,156, 57,247,189,239, 29, 49, 98,132, 81,191, 31, 57,114, 36, 66, 66, + 66, 80, 91,119, 98,105, 23,161, 14, 37,197, 42,148,188, 70,129, 69, 16, 4, 40,138,170,112,174,202, 95,189, 83,117, 32, 73,178, + 66, 88,244,207,160,141,230, 84,151,148,172,188,122,241,183,137,238, 94,190,214,237,253,155, 35, 54, 62, 9, 43,191,254,179,171, +229,203,201, 35,177,235,192,239,176,183,179,132, 70, 85,132,115,167,127,207, 47, 40, 40, 88,217,208,125,216,117, 44, 4, 0,208, +121,212,203, 99, 4, 70,204, 92, 99, 92, 3,230,114, 49,126,252,248, 26, 29,172, 11, 23, 46,168, 42, 59,145,117, 29,163,226, 98, + 53, 74, 84,170,215,118,140, 20, 10,133, 95,235,214,173, 47,108,222,188,217,210,202,202, 10,169,169,169, 47, 9, 44,133, 66,225, + 23, 16, 16,112, 97,243,230,205,150,214,214,214, 72, 76, 76, 52, 58, 69, 72, 21,113,133,204,204, 76, 34, 55, 55,151, 54, 55, 55, +175,151,200, 34, 73, 18, 26,141, 6,209,209,209,198,158, 35, 70, 39, 29,109,210,164,201,222,159,126,250, 73,152,144,144, 0,189, + 94,143,168,168,168,191, 12, 66,224,112, 56,152, 59,119, 46,190,249,230,155,141, 0,156,107,227, 51, 24, 12,171, 63,250,232,163, + 79, 82, 82, 82,204,109,109,109,161, 84, 42,193,231,243,193, 48, 12,136,238,221,209, 57, 62, 30, 58,138,130, 88, 44,198,147, 39, + 79,176,117,235,214, 98,157, 78,183,186, 58, 46, 23, 23, 23, 1, 0, 55, 62,159,143,209,163, 71,191,180,110,247,238,221,104,239, +153, 27, 96,214,134, 95, 68, 49,124, 77, 17, 60,207,144, 36, 73, 4,248, 55,111,222,169,125, 11,159, 71, 81,207,159,165,102,228, + 92,175, 99,247,245, 90,173, 22, 30, 30, 30,184,123,247, 46, 46, 94,188,136, 30, 61,122,160, 75,151, 46,184,114,229, 10,194,194, +194, 16, 17, 17, 1,130, 32, 96,105,105, 89, 30,199, 90,107, 48, 43, 47,223, 18,186, 84, 33,192,231,255, 25,111, 85, 22,115,197, + 17, 8, 42, 70, 20, 50, 2, 1,104,129,113, 9,136, 43,139,166,178,178,104,214,172, 94, 41,148, 74,165, 20, 0,152,200,164,212, +161,221,235, 97,105, 97,161, 97, 26, 98,175,178, 96,241,122,238,119,119,223,196,127,255, 22,129, 21, 17, 17, 17, 15,160, 23,128, + 81,161,161,161, 63,206,154, 53,203,186, 83,167, 78,200,201,201,129,179,179, 51, 20, 10, 5,194,194,194,112,239,222,189, 44,134, + 97,190, 8, 15, 15,175,206,234,241, 65, 45, 57,103, 82,227,148,135,117, 37, 37, 83,252, 58,185, 35,228,200,213, 96, 59, 59,187, + 79,185, 92,238,140, 49,243,222, 25,215,109, 72,107,196, 68, 60,199,173,243, 15,160, 76,204,170,149,211,152, 24,172,202,239,213, +196, 96, 85,112,210, 52, 77,105,181, 90, 28, 60,120,208, 40,145,181,127,255,126,168,213,106,208, 52, 77,213,180,239, 20, 77, 17, + 38,114,107, 56, 56,121, 66,167, 45, 6, 77, 27,255, 20,200,212, 81,159, 6,131, 1, 11, 23, 46,196,236,217,179,177,120,241,226, + 90,133,200,250,245,213,198,126,189,196,153,155,155, 91, 40, 20, 10, 63, 60,176,253,167, 35,163, 38, 76, 55,113,236,224,135, 29, +135, 78, 67,175,211, 67, 36,228,194, 92, 46, 67,179, 38, 14,208,170, 75,176,225,231, 31, 11,212,106,213,135,213,196,158,213,118, +220, 95,194,216,119,187, 98,249,214, 19,184,186,239, 79,131,178,243,168, 5,248,101,213, 52,248,251,239,172,149,147,162, 40,240, +120, 60,236,219,183, 79, 85,211,104, 66, 14,135,131, 90, 4,214, 75,199, 72, 46,183,134, 99, 99, 47,104,213, 69,175,237, 24, 89, + 90, 90,206,222,182,109,155,165, 74,165,194,227,199,143,241,248,241, 99, 16, 4, 17, 93,117,125,113,113, 49, 30, 62,124, 88, 46, +114,162,141,173,207,114,231, 42, 51, 51,147, 80, 42,149,144, 72, 36,228,253,251,247,213,190,190,190,209, 40,139,209,170,107,223, + 53, 26, 77, 66,207,158, 61,107,114,140, 28,132, 66,225, 75, 83, 54,149, 39, 29,173,166,171,240, 47,229, 76, 74, 74,138,252,233, +167,159,156,154, 55,111,142, 45, 91,182,104, 76, 76, 76, 4,179,102,205, 2,135,195, 33,214,172, 89,195,228,228,228,232,230,206, +157, 43,184,118,237, 26,138,139,139, 35,141,184,134, 20,170,213,234,137, 29, 58,116,216,115,230,204, 25,177,155,155, 91,197, 76, + 15,187,118,237,194,103,159,125, 6,177, 88,140,152,152, 24, 12, 30, 60,184,164,164,164,100, 34, 94,206,129, 85,193,105, 48, 24, + 8, 30,143,199,208, 52,141,249,243,231,191,148, 88, 84, 34,145, 64, 44,160,176,121,145,139,244,243,229,105,210,233, 83, 62,250, +168,180,157,208,212,163,168,231,207, 54,239, 56,113, 25, 47,103,137,255,203,190, 19, 4,241,205,210,165, 75, 55,118,236,216, 81, + 44,147,201,224,230,230,134,235,215,175,227,250,245,235,184,122,245,106,249,241,135,133,133, 5,242,242,242,144,148,148,164, 34, + 8,226,155,218, 56,105,211,124, 88,185,149, 58, 88,188,242,156, 87,124,225, 75,163, 7, 75,243, 96,149,230,197,170,171, 62,171, +134,119, 88, 88, 88, 24, 90,181,242,143, 82,169, 84,156,114, 45,101,101,101,245,176,236,183, 76,163, 70,141,180,127,109,242,198, +159,239,245, 0,203,249,223,228,252, 87,161, 78,171, 63, 50, 50,114,159,183,183,247,153,101,203,150, 45, 59,118,236,216,132,233, +211,167, 19,114,185, 28,135, 15, 31,102,114,114,114,118, 10, 4,130,217,183,110,221,106, 80,190, 8,134, 97,118, 93,251,253,214, +228, 15, 62, 31, 68, 76, 95, 53,182, 99,228,149,135,209,190, 29,221,208,162,131, 27,194, 46, 69, 97,253,215, 7,246, 26,244,134, +239,210,210,210, 18,107,227, 49, 38, 6,171,252,197,229,114,235,204,131,117,236,216,177,233, 3, 6, 12, 32,239,220,185,243,151, +152,171,202,113, 88, 23, 46, 92,128, 78,167,195,225,195,135,233,218,242, 96,209,192,111,171, 87,125, 55,102,251,238, 83, 2,146, +208,225,102,232,175,200,207, 77,171,181,110,248,124, 30,126,217,255,155,142,203,229, 60,169,165,172, 47,194,195,195, 45,151, 47, + 95,206, 33, 73, 18,235,215,175,127,201,185,170,138, 7, 15, 30,208,122,189,190,206, 99,165, 84, 42, 47,208, 52, 61,114,211,234, + 69,187,186,247,125,199,204,195,195,155,107, 99,227, 4, 46, 73, 34, 47, 39, 19,119,111, 93, 51,156, 61,117, 60, 79,171,213,142, + 85, 42,149, 23, 94,165, 1, 6,111, 62, 94,237,247, 67,167,255, 88,151,139, 98,208,235,245, 92,169, 84, 10,131,193, 80,173,184, +234,217,179,167,248,250,245,235, 42,157, 78, 7, 14,135, 83,171, 98, 42, 61, 70, 11,198,108,223,243,122,143, 17, 69, 81,158,185, +185,185, 40, 46, 46, 70, 88, 88, 24,179,126,253,250,204,188,188,188,175, 43,175,207,201,201, 65, 97, 97, 33,238,222,189,203,108, +217,178, 37,179,160,160,224,107, 99,235,175, 60, 47, 86,110,110, 46, 45,145, 72, 72,189, 94,175,247,245,245, 21,241,249,124, 79, + 99, 57,238,221,187,215,175,166,117, 29, 58,116,136,189,126,253,122,179,202,115, 19, 26, 12, 6,190, 70,163,113, 27, 60,120,112, +157,215, 15,177, 88,252,193,175,191,254,186, 79, 36, 18,181, 80,171,213,159,100,100,100,236, 2,224,196,225,112,240,244,233,211, + 44,131,193, 48,124,254,252,249,219,139,139,139, 31,200,100,178, 81, 70, 22,249,108, 76, 76,204, 40, 47, 47,175, 29, 65, 65, 65, +210,110,221,186,241,236,237,237,209,170, 85, 43,196,196,196,224,212,169, 83,186, 13, 27, 54,148,148,148,148,140, 7,112,161,150, +135, 14, 6, 0, 97, 48, 24, 94,154,195, 84, 32, 16,128,199,227,161, 68, 67, 98,194,252, 56, 21, 13,158,106,233,202,189,167, 24, + 6, 68,170, 50, 43, 43, 45, 61,239, 54, 87,175, 15,125,161, 44,202,175,201, 25, 83,171,213, 45, 25,134,225, 22, 20, 20,172,209, +104, 52, 99,103,205,154,165, 88,177, 98, 5,124,125,125,145,149,149, 5, 11, 11, 11, 40, 20, 10, 20, 21, 21, 33, 62, 62,158,210, +233,116,155, 40,138, 90,148,145,145, 81,107,183, 35,149, 37, 65, 99,185, 79,197, 3, 35, 65, 16, 32,105, 18,132,142, 0,135,226, +128,163,231,128,224,114, 75,221, 45,227,166,208, 98, 12, 6, 3, 2, 3, 3,113,242,228, 73, 12, 25, 50,132, 65, 45,241, 39, 39, + 79,158,132, 49,142, 48, 11, 22, 44,140, 28, 69,248,232,209,163, 60, 0,159, 18, 4,177,123,218,180,105, 39,105,154,230,209, 52, + 61,240,222,189,123, 87, 95,101,227,105,105,105,225, 55, 78,133,125,109,237, 96, 22,220,111, 84, 71,120,183,118, 6,101,160,112, +253,116, 36,118, 46, 61,126, 32, 57, 41,121, 28, 94,158,171,176, 90, 24, 19,131, 85,213,193,170,137, 43, 35, 35, 99,193,146, 37, + 75,240,253,247,223,215,123, 20, 97, 77,191,185, 25,150,250,105,187, 86,180,227,208,119, 58,246, 37, 9,130,209,212, 18,103, 67, + 16, 96,202,163, 34,184, 92,206,147,208,219,201,190,181,212, 95,207, 41, 83,166,252, 65,146,164,115,101,139,191,150,155,189, 50, + 59, 59,187,143, 49,199, 38, 61, 61,253,140,131,131, 67,243,144,179, 39,230, 93,187,120,166, 27, 69,233, 92, 9, 16,224,243,249, +207,244,148,225,138, 94,171, 13, 78, 73, 73,121,229, 68,108,243, 62, 29,130, 23,169, 89,224,114, 57,165,185,167,202, 18,154,254, +186,118, 22,252,253,127,169,241,127, 66,161,240,204,142, 29, 59, 2, 63,250,232, 35,130,203,229, 86,116,187,149,239, 63, 73,146, +184,117,235,150, 74,171,213, 98,231,206,157,140, 88, 44,174, 53,113,237,223,117,140,138,138,138,198, 15, 30, 60,120, 23, 0, 33, +128,167,249,249,249,147,148, 74,101,114,229,245, 67,134, 12,217, 5, 64, 72, 16,196, 95,214,215,133,242,148, 13,230,230,230,209, +101,206,149,168, 33,129,238,181,180,111, 78, 77,221,135,198,116, 21,150,205, 45,248, 94,249,114,171, 86,173, 22, 77,158, 60,185, +242,100,207,161, 0, 92, 26, 80,180, 11, 42,149,202,123,254,252,249, 51,196, 98,113,119,149, 74,229, 1, 0, 18,137,228,113, 73, + 73,201,101,157, 78,247, 19,128, 90,115, 75,197,197,197,105,155, 52,105, 18, 99, 48, 24,124,108,108,108, 42, 70, 31, 10, 4,165, +206,207,173,199, 22, 97,169,169,169,173, 75,199,105,222, 54,186, 96,167, 79,159,110,108,110,110,222,135, 32,136, 97, 12,195,184, + 23, 22, 22,106,190,251,238,187, 27, 33, 33, 33, 5,143, 31, 63,238,215,185,115,103,194,206,206, 14,207,159, 63,103,138,138,138, +142,144, 36,249,141, 82,169,172,115,228, 52,195, 48,201,181,185,212, 53,253,167,182,245, 90,173, 54,243,198,141, 27, 22, 23, 47, + 94,228, 80, 20,133,179,103,207, 86, 60, 72, 86,215, 27, 24, 23, 23, 7,173, 86,171,102,111,157, 44, 88,212,141,191,123, 52,136, + 81, 22,162, 66,161, 24, 33,146, 10,167, 56, 55, 87,248,166,198,103, 68, 21,230,149,252,162, 84, 42, 55,163, 52,101, 61,107,159, +254, 75, 57,249, 98,147,115, 4,135,239, 92,227,205,129,210,189,208,169, 10,251, 86,199,217,166, 77, 27, 7, 62,159,191, 82,163, +209,244,175, 45, 75, 59,135,195, 49,136,197,226, 51,106,181,122,118, 53,147, 61,255,227,234, 51, 40, 40,168, 90,251,192,216, 81, +132, 65, 65, 65,116,125,202,233,235,235,123, 89, 34,145, 40,170, 91, 87, 82, 82,146,120,255,254,253, 62,111, 73,125, 86, 30, 1, +104, 52,103,131, 70, 17,214,193,233,236,236, 44,212,233,116,254, 0,154, 3, 48, 3,144,163,215,235,207,102,101,101,165,219,218, +218, 6,144, 36,249,109,153,120, 93,156,158,158, 30,246, 38,207, 77, 7, 7, 7,145, 92, 46, 95, 73,146,164,194, 72,193,173,205, +200,200,152,149,157,157,157,198, 94,235, 88, 78,252, 7,187, 8,223,166, 48, 68, 31,150,147,229,100, 57, 89, 78,150,147,229,100, + 57, 89,206,127,139,192, 50,246,197,118,166,179, 96,193,130, 5, 11, 22, 44, 88,188,102, 16,181,168,208,250, 88,127, 13, 81,178, + 15, 89, 78,150,147,229,100, 57, 89, 78,150,147,229,252,207,113,214,197,253,214,118, 61,178, 93,132, 44, 39,203,201,114,178,156, + 44, 39,203,201,114,254,211, 56,223,122,176, 93,132, 44, 88,176, 96,193,130, 5, 11, 22,111, 16, 70, 11, 44,169,173,135,167,149, +179,239, 46,115,199, 22,247,205, 29, 91,220,183,114,246,221, 37,181,245,240,252, 47, 86,154, 66,161, 16,219,217,217,141,106,212, +168,209, 5, 63, 63,191, 2,123,123,251,207,217,166, 84,127,116, 5,184, 35,128,169, 31, 1,137, 31, 1,137, 35,128,169, 93, 95, +227, 4,228,111, 11, 22, 77,181,111, 23,122,102,212,153, 69, 83,237,171, 77,192, 22,244,133,194,242,218,217,225, 63,205,155,106, +111,241,154, 54,105, 98, 99, 99,179,197,214,214, 54,193,198,198,230,133,141,141,205, 14, 0,166,108,139, 99,193,130, 5,139,255, + 31,140,186,153,153, 59,249,124,226,218,212,117,246,162, 5,243, 8, 7, 59,107,137,222, 64,233,158, 39, 36,123, 45, 88,178,236, + 72,170,128,251, 99,110,226,195,109, 13,216, 54,225,232,232, 56,130,199,227, 5, 2, 40, 23,106,209,122,189,254,100,114,114,242, + 65, 24, 55,220, 26, 45, 90,180,184,198,225,112,156,234,179, 97,154,166, 19,238,223,191,223,165, 33, 21,102,111,111, 63,220,222, +222,126, 71,187,118,237, 36, 45, 91,182, 4,159,207,199,138, 21, 43,190, 72, 77, 77, 93,109,188,178,232,202,181,201,179,248,136, +195,229, 14, 2,224,203, 48, 0, 8,206,125, 90,175, 59,149, 97,158,189, 11, 33, 33, 70,165, 17,183,179,179,251,154, 32,136,177, +101,117,181, 77,169, 84,174,252, 59, 26,137, 66,161,104, 68, 16, 68,119,134, 97, 60, 72,146,124, 64,211,244,121,165, 82,153,253, +170,188,182,192,167, 29, 58,117,250,105,204, 23, 95,112, 84,161,161,248,105,199,142, 53, 40, 40, 0,128,245,245,109, 75,109,219, +182, 28,102, 98,130, 64, 2,240, 7, 1,130, 4, 19,153,147, 71,158,190,123, 55,226, 32,140,200,165, 86, 19,252,253,253, 79, 1, + 40,159, 56,238,116, 68, 68,196,192,250,114,228,198,209,223, 10,121, 30,157,115,159, 93,254, 22, 64,255,170,235, 13,106,209, 24, + 14,175, 81, 32,135,137, 72, 2,240,195, 43, 86,171,196,218,218,250,254,241,227,199, 29,219,182,109,203, 5,128,176,176,176,143, + 2, 3, 3,123,100,102,102,250, 0, 40,120, 19, 23,154,118,237,218,153, 27, 12,134,221, 28,130,104, 71,211,180, 25, 0,144, 36, +153, 71, 49,204, 45, 46,151, 59,166,161,201,138, 89,176, 96,193,226, 31, 43,176,164, 54,238, 94,110,174,205,190, 56,123,108,119, +163,188,156, 60,245,250,149,187, 34, 84, 92, 65, 73, 19, 47, 55,254,218, 31,151,155,125, 54,243,203,153, 58,141,254,118,113,198, +147, 40, 99, 55,106,103,103,231, 36, 20, 10,143,126,253,245,215, 62,157, 58,117,226,217,216,216, 32, 61, 61, 29, 79,158, 60,241, +185,126,253,250,144,227,199,143,127,161,209,104,222,171, 43,131, 59, 0, 72, 5,252,166, 7,151, 47,181, 19,152,153,131,161, 12, + 48,243,246, 3, 0, 48, 52, 13,229,149, 11,160,245,122, 48, 52, 5,199,126,239,148,126,207, 48,104,211,166, 13,191, 33,149,229, +224,224, 96,239,230,230,182,119,238,220,185,124,141, 70,131,200,200, 72,220,188,121,147,206,200,200, 88,102, 44,135,141,207, 16, + 47,178, 80,120,100,240,144,254,141, 7,246,182, 17, 56,219, 89,131,166, 69,120, 18,175,115,186,112, 53,162,223,233,179,231,103, + 83,158, 67,134,103, 70, 31,127, 80, 27,143,183,183,119,187,220,220,220,239, 83, 82, 82,202,133,223,138, 54,109,218,124, 87,249, + 55, 85,131,241,104,154, 6,151,203, 77, 47, 41, 41, 25,241,232,209,163,136,234,120,231,127, 2,189,193, 80,218, 46,184, 92, 80, +187,207, 59, 30,235,222,189,123,147,241,227,199,195,223,223, 31, 97, 97, 97,221, 15, 31, 62, 60,227,212,169, 83,119,245,122,253, +105,161, 80,120,229,197,139, 23, 13,154, 96,145, 15,124, 53,230,139, 47, 56,178,132, 4,200, 34, 35, 49,186,160,128,187, 28,248, +170, 62, 2,203,223,223,191,169,165, 57,142, 12,121,175,171,167,157,157, 23,159,199,179, 2,195, 48,208,235,115,154,103,102, 70, + 15, 51, 53,197,220,252,124,206,208,187,119,239, 62, 53,134, 47, 32, 32,192,150,166,233, 77, 12,195,240, 9,130,152, 6, 96,192, +217,179,103, 65, 81, 20, 6, 14, 28, 56,192,223,223,191, 41,195, 48, 63,203,100, 50, 70,165, 82,125, 28, 22, 22,150, 94,155,115, +149,247,140,254, 86,201,113,233,231, 30, 48, 22,105,220,115,253, 62,239,131, 51,102, 46,228,226,239,214,167,222, 2,128,126, 46, + 46, 38,249, 41,226, 57, 50,185,143, 69,126,202,133, 57,253, 92, 92,182,158,141,139, 43,108,232, 9,109,111,111,191,114,247,238, +221,141,218,181,107, 87,145, 36,183,101,203,150,156, 21, 43, 86, 56,204,154, 53,107, 77,110,110,238, 56, 35, 69,117,115, 75, 75, +203,115, 52, 77,107,162,162,162,154,151,127,111,237,251,110, 7, 75, 19,105,207,204,220,194,208,236,168,223, 66,140,225,106,213, +170,213,120,130,162,182,252, 56,255, 51,142,167,175, 47, 36, 86, 54,208,165,166,162,216,160,183,184,117,239,209,192,229,171,183, +100,182,106,213,106, 98,120,120,248, 14,246,146,204,130, 5,139,255,140,192, 18, 10, 5,115, 23,124, 51,135,200,205,206, 83,233, + 10, 11,116, 18, 70,107,144, 75, 68, 68, 65, 70,102,222,115,185,164,100,214,204,233,162, 57,115,191,153, 91, 12,140, 54, 86, 92, +121,120,120,220,217,186,117,171,141,133,133, 5,242,243,243,145,157,157,141, 59,119,238,128, 97, 24,244,239,223, 95,232,215,162, +133,255,143,171, 87,223, 4,208,190, 46,145,197,229,113, 9,158, 84,138, 95,187,250,131,228,243, 49,244,177,178, 84, 92,232,117, + 56, 59,114, 16, 0,128, 35, 16,224,253,216, 12, 0,128, 72, 36,106,112,101, 49, 12,211,190, 99,199,142,124, 0,248,226,139, 47, + 10,138,139,139,131, 9,130,216,167, 84, 42, 83,140,249,191,165,207, 32, 55, 43,107,235,144, 85, 75, 38, 88,248, 52,117,129, 86, +175, 71,114, 70, 10, 24, 8, 96,103, 35,197,232, 33,126,252,142, 1,252,102, 63,172,255,227, 10, 65,190,211, 37,227,209,137, 71, + 53, 10, 75,169,116,247,154, 53,107,112,232,208, 33, 0,192,229,203,151,225,230,230, 38,173,171, 12, 79,158, 60,113, 25, 59,118, +236, 1, 0,205,170, 91,111, 48,128, 27,252,253, 62, 0,192,238,173,163, 56, 49, 49, 49, 77,196, 98,113, 37,243,173, 43,186,118, +237, 74, 6, 7, 7,183,189,124,249,114,219, 3, 7, 14,232,244,122,253,154,212,212,212,195, 13,169, 83, 85,104, 40,100,145,145, + 64,104,104,189,255,235,231,231,231,228,233,105,121,243,135, 85,223, 89,255,126,242, 17, 86,173,218,129,103,207,158, 1, 0, 92, + 92, 92, 48,234,131,225,188,125,191,108,242,158, 59, 55,232, 6, 69,249,119,138,136,136,168, 51,187, 57, 77,211,155,130,131,131, +223,145,201,100,152, 59,119,110, 76,211,166, 77, 33,151,203,177,121,243,102,152,155,155, 67,175,215,199,172, 88,177,130,155,154, +154,138,181,107,215,110,175,228,110,253, 5, 93, 6,116,253, 86,200,243,232,236, 30, 48, 22, 50,185, 2, 91,247, 31,196,147,176, + 93,157, 53,250,199,223,206, 67,200,135, 28, 70, 56, 54, 35, 81, 58,183, 73, 64, 55,203,102,222,131,209,184, 85,164,149,134, 10, +141,159,223,187,233, 50,174, 72,189, 59,232,135,106, 92,194, 97,135, 57, 62, 5,119, 45, 30, 94,144,102, 3, 21, 73, 67,137,178, + 23,104, 6,131,186,118,237,202, 41, 23,216, 9, 9, 9,208,106,181,240,242,242, 34,181, 90,109,119, 99,197, 85,151, 46, 93,174, +237,221,187,215,178,115,231,206, 47, 77,221, 98,103,105,214, 55,228,232,154,233,223,255,244,139,199, 30,134,200,171,235, 65,160, + 85,171, 86,227, 91, 52,119,217,182,102,197, 2,130, 83,156, 12,174, 89, 54, 64,103, 67,121, 96, 59, 32,177,192,192, 73,179,208, +186,109, 91,206,244,153, 95,111, 35, 2, 2,152,176,176,176,157,236,101,153, 5, 11, 22,255, 9,129, 69, 51,180,175,181,181,133, +104,237,202, 93, 97, 10, 17, 73,216, 57,218, 19, 2,185, 25, 23, 50,169,144,228,240, 84, 46, 46,142,124,154,161,125,107,248,123, +213,161,150,132, 80, 40, 60,186,115,231, 78, 27, 30,143, 7,154,166, 97,109,109,141,248,248,120,228,230,230,162,168,168, 8,207, +162,163,209,184,145, 35,166, 79,156,160, 88,188,234,135,163, 0, 2,240,114,119,225, 75,156, 12,205,128, 54,188,220,163, 70, 16, + 68,181,253,139,181, 76, 35, 99,212,144, 80,154,166,159,167,166,166, 66, 34,145,192,211,211, 83,118,247,238,221,171,169,169,169, + 41, 70,113, 14, 27,198,225,191, 32, 78,172, 92, 50,194,130,224,196, 32, 38, 49, 15,174,142,109, 96,105,218, 8, 41,153, 69, 8, +143, 58,141,152,103,167,224,234,232,132,137,163, 92,205, 86,111,202, 60, 9,255,137,174,136,216,162,175,142,179,176,176, 80,230, +228,228, 4, 7, 7, 7,208, 52, 13,138,162,240,232,209,163,138,207,229,243, 37,150,127, 94,179,239, 58,204, 57, 89, 24,241,238, + 0,228,228,228,200,140,221,247,114,113,117,228, 7,123,111, 85,177,146, 15, 0, 98,169, 66, 55,116, 86,202,163,214,173, 91,195, +218,218,154,127,227,198,141, 89, 0, 14,215,183, 62,117,192,138,159,118,238, 92, 59, 58, 63,159, 4,128,109, 4, 65,235, 74,179, +106, 27,213,150,172,173,136, 99,171, 87,127,107, 77, 48, 81,176, 48, 93,142, 59,119, 94, 64,167, 43, 61,242,217,217, 25,152, 54, +181, 0, 92,174, 9,126,248, 97,129,229,251, 35, 38,255,138,210, 81, 47,116,109,229,100, 24,134,255,248,241, 99,120,123,123,227, +192,129, 3, 92, 14,135,131,219,183,111, 67, 44, 22, 99,236,216,177,240,241,241,225,138,197, 98, 92,189,122, 21, 5, 5, 5, 68, +109,229, 12, 61, 29,178, 56, 55,238,242,183,105,156,115,253,182,238, 63,136, 9, 31,140,128,157, 33,238,170,185, 43,185,184,255, +192, 14,223,113,120,141, 2,165, 38, 62,230,110, 62,131,193, 23,200,240,217, 87,139, 16,243,240,132,121, 73,225,131,169,148, 62, +169, 81,208, 15,135,103,252,165,156, 71,134, 83, 99,118,134,182,186,232, 20,225,252, 48,114,226,109,101,196,150,251,127,110,218, +147, 11, 82,101, 86, 46,174,158, 62,125,138,103,207,158,129,195,225, 64,165, 82,189, 52,169,111,101,206,150, 45, 91,126, 74, 81, +212,119, 0,160,213,106,119,137,197,226,241, 63,255,252,179, 37,135,243,231, 76, 81,229,206, 85,122, 70,118,238,141,187,143,158, +204,250,116, 88,183,208, 91, 15,147,116,188,193,137,249,247,127,203,175,174, 62,219,181,107,103, 78,210,244,150,159, 86, 45, 36, +168,184, 63, 32,244,236, 6,174,204, 13,148, 62, 5,234,220, 34,168,226,211,160,219,188, 14, 46,147,102, 98,229,138,239,137, 15, + 62,252,120,139,139,139,203,209,184,151, 29,188,191, 99,184, 54,203,201,114,178,156,111, 39,231,127, 75, 96, 17, 4, 89,160,211, +233,121,242, 70, 14,250,161,239,117,105, 17,113,251, 97,140,204,194,148,244,107,211,194,235, 97, 76,114, 56, 12,148,142, 32, 72, +163,226, 58, 28, 29, 29, 71, 44, 88,176,160,133, 92, 46, 7, 77,211, 48, 53, 53, 69,102,102, 38,116, 58, 29, 10, 10, 10,160, 41, + 42,132,174,176, 0,247, 18, 19,208,169, 91, 55,244,110,223,222,243,180, 94, 63, 34, 57, 57,249, 64, 77,156, 20,201, 97, 44,253, +219, 96,120, 92, 54,104,157, 22,135, 93, 44, 43, 92,171,145, 9,121, 32, 8, 2,148, 86,131,211,109,154, 65, 40,147,194,119,246, +130, 6, 87, 86, 90, 90, 90,196,197,139, 23,207,244,235,215,175,255,196,137, 19,201,180,180,180,179, 6,131,161, 99, 70, 70, 70, +157,221,163, 54,177,212,216, 49, 19,253, 93,172,204, 72,252,126,253, 28,218,121,188, 11,137,144,135,204, 92, 21, 72,130,192,179, +231, 23, 65, 81, 82,220,123,156,136,246, 62, 82,116,110,107,234, 88,244, 71,206,196,172,154,187,203,136,220,220, 92,100,100,100, + 64,175,215,195, 96, 48, 96,216,240,225,216,189,107, 23,138,139,139,161, 86,171,161,213,106, 65,211,165,122, 34, 45,179, 8,119, +238,157, 69, 64,139,230,229,142, 71,245, 13,130, 11,195,207,107, 70,113, 77, 36, 0, 95,104,173, 43, 44, 44,132, 84, 42,133,170, + 88,201, 31, 51,161,194,217,226, 95,190,124, 25,225,225,225,176,183,183, 55,170, 29, 85,135,103,192,150,231, 20, 53,191,255,177, + 99, 54,215,143, 29,163,111,253,254,123,178,176,176,112,179, 49,255,109,219,182,229,176,207, 62, 27,232, 41, 22,137,145,156,184, + 6, 30, 30,124,124,241,185, 37,130,151,103, 1, 0,166,127,230,136,128, 0, 75, 20,228, 29,129,149,205,215,248, 98,214, 16,215, +162, 34,230,163,155, 55, 35,119,213,222,222,137,105,191,252,242, 75, 76,159, 62,125,184, 17, 17, 17, 16, 10,133, 16,139,197, 16, +137, 68, 16,139,197, 72, 75, 75,131, 86,171,197,225,195,135, 13,101, 93,136, 53,162,172, 27,176,255,231,189,113,230, 73,216,174, +206, 14,100,252,189, 33,179, 58, 60,143,184,125,175,232,210, 31,215, 23, 27,212,162,164,188,228, 11,115,154,182,190,103, 53,117, +246, 66,172, 91,185, 0, 79,110,135,228,216, 58, 21,174,167, 8, 77,181,229,236,218, 53,136,235,232,104,167,159, 50,126,168,233, + 73,197,141, 9, 39,185,200, 74,207,121,176, 10,113,119, 84, 66, 55,239, 15,155, 55, 37,180,151, 46, 93, 18,119,233,210, 5, 42, +149,170,244, 92,224,112,240,203, 47,191,208, 6,131,225,114,117,156,122,189,254,187,240,240,112, 69, 73, 73, 9, 62,248,224,131, +233, 65, 65, 65, 82, 30,143, 87,122,126, 81,212, 75,206,213,146,213,123,206,205,252,110,253,229,115, 7,150,219, 47,153, 59,190, +219,232,207,190,191, 12,224,108,245,110,168, 97,247,234,229,243, 56, 66, 51, 29,136,214,125,160,203, 80,225,197,182,137,208,230, +171,208,124,241, 34, 0,124,104,117, 28,156, 28, 50, 28, 28, 11,123,124,210,165, 35,119,115,200,181,221, 0,134,176,151,102, 22, + 44, 88, 84,121,248,109, 13,192,186,108, 49,171,236, 62,102, 9,160,220,101,183, 6,160, 5, 32,168,244,183,170,203,149,127, 91, +117,185,242,231,172, 50, 99,199, 26,165, 83,246,221, 33, 8,162,222,113,162,229,163, 8, 43, 27, 62, 76, 21,215, 38,244, 89, 92, +130,170, 91,215, 0,197,229, 59,177, 17,253,222,237,221,166, 75,143,182,237,210,179, 11,226,236,172,229,210, 27,183,111, 9,105, +154, 54,170,127,135,199,227, 5,118,234,212,137,155,155,155, 11,137, 68,130,204,204, 76,164,164,164, 64,167,211, 65,149,159, 7, + 77, 94, 46, 84,185, 57,208, 23,230,225,217,221,219,112,119,114, 16,150, 5,193, 27,133,170, 14, 85,249,108,243, 4, 73, 66, 36, + 55,129, 88, 46, 7,135, 83,191,204, 20, 10,133, 98,176,187,187,251, 45,123,123,251,249,101, 79,248, 83,131,131,131,179, 24,134, +193,156, 57,115,228,114,185,252,176,179,179,179,176, 46, 30, 19, 11,106, 88,219, 22,205, 56, 49, 47, 30, 32,192,109, 40,154, 40, +186,224, 89, 74, 62, 50,243,213, 72,203, 41, 70,243,230,179, 97,109, 63, 1,166,118,147,240,224, 73, 18, 20,118, 77, 72, 14,143, +223,175, 14,193,247,210,242,254,125,251, 80, 82, 82,130,102,205,154, 97,228,200,145,248,234,171,175, 48, 98,196, 8,216,219,219, +163,115, 51, 46,198,127, 56, 12, 25, 25, 25,181,150,115,201, 54,240,150,237, 83, 68,140, 89,192, 68, 52,235,121,230,209,179,103, +207, 16, 19,243,215,158,181, 63,254,248, 3,249,249,249, 21, 55, 96, 99, 96, 99, 99, 51,207,206,206,238,190,157,157,221, 35, 59, + 59,187,211,233,246,246,143,245, 46, 46,182, 29,135, 12, 33,188,222,127,159,147, 36,149, 18,207, 27, 53,146, 25,195, 37,151, 99, + 96, 64, 64, 39, 65, 94,238,142, 10, 83,106,252, 56,107, 92, 11,241,198,245,171,173, 48,237, 51, 23,144,132, 8, 4,201, 71, 73, +241, 31,240,242,246,225,155,152, 48,181,182,165,178,128,246, 56,111,111,111,238,228,201,147, 33, 20, 10,177,123,247,110,108,220, +184, 17, 63,254,248, 35, 98, 98, 98,224,236,236, 12,133, 66, 1, 91, 91, 91, 46,128,184,178,255,212, 10, 51, 87,114,177, 70,255, +248,170,185,155, 52,142, 32,109, 58,104, 12,162,161, 65, 63, 40,179,151,108,136,255,225,249, 19,149,203,227,219, 33,217, 49, 15, +127,163,227,239, 94,206, 74,141, 45,114, 89,178, 33,254,135,224,245,169, 57,213,113,133,132, 44,160,142,159, 14,209, 21, 23,149, +112, 7,247,239,169,154, 52,110,100,115, 11,137,251, 47,112,232,211,178,113, 35,197,135, 11,150,174,213,126, 50,121,166,110,219, +246, 29, 76, 97, 97, 33, 10, 10, 10,240,211, 79, 63, 25,126,255,253,247, 20,138,162,102,214, 80, 68, 78,153, 32,194,240,225,195, +165, 98,177, 24, 73, 73, 73, 21, 46, 40, 0, 40, 51,179, 31, 92,191,251,240,241,172, 73,195,187, 22,107, 52,154,115, 87,194,162, +189,220,156, 29, 9,130,105, 92,211,126,115, 8,162,157,183,175, 47, 24, 38, 15, 36,215, 9,201,123, 86, 65,149,150,131,146,204, + 28,144, 60, 41,244, 16, 65,199, 8, 32,242,109,131, 23,225,145,176,149,201,193, 37,136,142,236,173,132, 5,139,255,174,142,170, + 73,139, 0,176, 38, 8,226, 36, 65, 16, 39,231,205,155,215, 29,128, 37, 65, 16, 39,203, 68,144,117,217,103, 65,249,111,106, 88, +182,174,204, 83,229,191,149, 63, 91,205,155, 55,175, 7, 65, 16, 39, 59,116,232,240, 97,153,144,171, 55,234, 84, 27, 28,181, 54, +120,222,252, 5,164, 92, 38, 48,241,242,108, 98,254,251,249,208,136,235,183, 34,163, 77, 36, 34, 97, 81,113,177,224,199,159, 55, + 58, 17, 37, 42, 99,131,188, 61,173,172,172,160,211,233,240,244,233, 83, 36, 39, 39, 67,167,211,193, 80, 82, 12, 77, 94, 30,212, +185,185,160, 75,138,192,167,104,168,178, 50, 97, 46, 18, 0,127,142, 48,172, 77,217, 86,136,169,234, 4, 23, 65, 16, 16,201, 77, + 32, 48,145,129,228,114,140,174, 28, 59, 59,187, 86, 45, 91,182, 60,116,233,210,165,182,157, 58,117, 90,236,236,236,108,154,158, +158,254, 34, 61, 61,189,231,202,149, 43, 53,214,214,214, 24, 61,122,180,187, 94,175, 31, 83, 23, 23, 95,164,105,225,108,235, 6, + 39,219,193,176,183,108,135,236, 2, 13, 50,243, 84, 72,203, 46,193,193, 95, 71,226,194,153,145,136,188,250, 33,158,222, 30,143, +236, 98, 57, 68, 22,221, 1, 48,181, 38,114,187,117,235, 22, 54,109,218, 84,241, 90,183,110, 29,114,114,114,224,237,237,141,164, +164, 36,156, 61,123, 22,105,105,105,176,182,182, 70,100,100, 36, 54,111,222,140,219,183,111,215,187,145,168,213,106,240, 4,150, +186,221, 91, 71, 97,247,214, 81,160, 24,169,174,114,221, 27,221,216, 72,114,172,114,200,144, 22, 74, 51, 51, 47, 95, 95,223,254, +239,191,255,190, 75,219,182,109, 43,214,187,186,186, 58,113,185,220, 52,133, 66,177, 77,161, 80,180,172,149,140,102,252,205, 45, + 60,161,213, 60, 46, 59,198, 92, 16,132, 16, 61,122, 71,163, 99,231,112,232,244, 2, 16,164, 16, 36, 33,130,193,144, 13,185,137, + 45, 24,134,168, 43, 49,222,128,179,103,207, 98,211,166, 77,136,143,143,175,232, 30, 13, 12, 12,156,246,193, 7, 31, 28,165, 40, + 10, 39, 79,158,196,241,227,199,209,180,105, 83,180,108,217, 18, 58,157,110, 64, 93,251,253,221,250,212, 91,251,126, 60, 51,146, +103, 48,107, 41, 16, 58, 55, 37, 11, 37,131,167,116,181,146, 2,192,217,184,184, 66, 91,167,194,101, 37,133, 15, 19,205, 29,139, +151,215, 29,224, 78, 48, 97, 49,143,110, 31,248,245,124,126,122, 86, 54,207,223,207, 71,245,253,194,217,252,198, 77,154,173, 88, + 48,103,138,109, 74,129, 40,191,247,244, 51,143,143,158,189, 83,244,209,248,137,134,143, 39,126,166, 62,119,254,143, 99, 52, 77, +251,162,134, 17,132, 52, 77, 67,169, 84,226,225,195,135,136,143,143, 71, 86, 86, 22, 50, 51, 51, 81, 88, 88, 88,209,173, 40, 41, + 44, 56,181,110,231,239,247,164, 98,177,164,109, 11, 55,167,219, 17, 81, 25, 82,177, 88,226,214,196,169, 57, 80,253, 4,212, 52, + 77,155,149,214, 33,129,194,135,161, 80,231, 20, 66,149, 87, 4, 85, 78, 17, 52, 58, 14,212, 26, 18,106, 29, 9,171,206,125, 80, + 84,172,130, 58, 39, 15, 52,195,152,179,247, 24, 22, 44, 88,212,114,191, 15, 92,182,108,217,210,218,214, 87,122,215, 86, 89, 6, + 65, 16, 39, 25,134, 9,100, 24, 38,176, 76, 76,149,235,132,147,149,121,150, 45, 91,182,148, 97,152,192, 27, 55,110,236, 7, 80, +210,144,178,214,217,181,147,157, 29, 91,100, 66,120,190, 55,115,206,119,167,127,217,186,214, 38, 39, 39, 55,134, 47, 18,171, 69, + 34,129,197, 87,115, 22,154, 21,151,228,191, 87,156,107,252,168,167,220,220,220,138,155, 23,159,207, 7, 85, 82, 12, 74, 85, 2, +117,110, 54, 8,157, 6,124,138,130,133, 68, 2, 39,123, 91, 52,182,181,171,147,143, 67, 83, 68,234,133,211, 56,247,225,187, 47, +117, 11,210, 58, 45,206,118,112,135, 64, 38,133,216,204, 28,157,142, 95, 45, 21, 58,124, 62,176, 96,121,157,188,182,182,182, 86, + 10,133,226,196,207, 63,255,204,207,202,202,194,163, 71,143,238,189,120,241, 34,223,220,220,220, 68,175,215,211,177,177,177, 23, +159, 60,121, 18,216,164, 73, 19, 48, 12,227, 90, 23, 95, 97,158, 84,167,211,211, 72,201,120,129,100,229, 67,152,202,156,192,144, +141,144,158, 83, 2, 2, 54,208,171,159, 84,196,146,105, 84,201, 40,214, 16, 70,213,167, 78,167,131, 94,175,135, 94,175,135, 86, +171,197, 71, 31,125,132, 27, 55,111, 98,223,241, 43, 72, 74, 74, 66, 83, 59, 9, 70,142, 24, 14, 63, 63, 63,132,133,133, 53,184, + 81,187,245, 58,247, 72, 44, 22, 99,227,198,141,144, 72, 36,168,175,192,178,179,179,251,193,195,195,163,217,147,226, 98, 68, 61, +126,140, 54,195,135, 3, 0,174, 93,187, 86,241, 27,149, 74,133, 81,163, 70, 9,226,227,227, 63,126,252,248,241,199, 12,195,252, +152,150,150,246, 69, 77,156,167, 78,221,196,164, 73, 81,200,204, 44,117,118, 15,238,247,170, 88,247, 60, 94,135,126, 3, 75,123, +174,204,204,204,240,195, 15,198, 37, 29,166, 40, 10,155, 55,111,134, 88, 44,174, 16, 88,124, 62,191,227,172, 89,179,222,171,238, +247, 94, 94, 94,117,114,126, 62,204, 65,116,237, 30, 51,213,180, 89, 19, 31, 83,107, 95,100, 25, 34, 91, 68,164,164, 77,251,124, +152,195,154,213, 71, 82,212, 20,161,217, 69,233,147, 26,113, 69,234,221,198,148, 49,238,236,207,218,156, 38, 19,119,167,101,228, +127,243,217,196,209,150,102,230,182, 69,219,126, 14, 54, 35, 73, 18,191,135,107,115,189, 93, 44,205, 7,183,251,169,104,210,231, +223, 70,104, 13, 47,166, 33,233,228, 19,212,146,246,132,166,105,164,164,164, 32, 43, 43, 11,137,137,137,200,204,204, 4, 65, 16, +200,204,204,172,151, 67, 89,157,163,172, 77, 78, 65,218,177,237,176, 27, 53, 26,205, 23, 45, 2, 77,243,160, 42, 49,224, 72,231, +158, 40,200, 87, 65, 75, 19, 48,107,213, 1,189, 79, 94, 5, 73, 27,128,155, 55,216, 59, 8, 11, 22, 44,106,187,174,156,156, 59, +119,238,215, 70,254,246, 34,195, 48, 70,165,214,169, 42,184,230,206,157,251,117,249,182,130,131,131, 85, 0, 82, 95,187,192, 2, +128,194,172,232,184,168, 40,174,178,168, 68, 37, 50,183, 48, 47, 49,145, 9,152,252,188,124,206,227,167, 49,234,226,180,103, 79, +234,177,189,232, 71,143, 30,249,164,164,164, 32,241,197, 11,232, 75,138, 65,104, 53,128, 90,133, 94,157, 59, 66, 4, 64, 68, 0, +124, 90, 7, 14, 71,128,162,162, 2, 0,136,174,139,148,214,235, 95,186,168, 87,116, 11,154,152, 64, 32,147, 66, 40, 55,121,201, +209, 50, 6, 98,177,120,223,230,205,155, 21, 10,133, 2,171, 87,175,134, 66,161,240,176,179,179, 43, 49, 49, 49, 17, 91, 89, 89, +161,121,243,230, 8, 8, 8,192,229,203,151, 65, 16,196,179,186,248, 12, 90, 65,120,116, 28,213,168,160, 40, 18,183,195,247, 66, +175,213,162,137,219, 60,104, 12, 86,144,218,124, 12,149,238, 4,116,121, 87, 0, 0, 2,121, 55,164,167,103, 1, 32, 30,214,229, +220, 85, 93,190,127,255, 62,118, 29,187, 6, 39,207,110, 72,203, 57,139,135, 15,195, 96,107,126, 30,110, 94,222,208,235,245,245, +121, 74, 48, 90,144, 24,217,208, 71,205,155, 55, 15,249, 98, 49, 48,112, 32,248,113,113,208,233,116,104,215,174, 29, 90,183,110, + 13, 0,104,215,174, 29, 56, 28, 14,154, 53,107, 6, 11, 11, 11, 28, 61,122,116, 20,128,106, 5, 22, 67, 16,145, 52,149,237,225, +226,226, 82, 33,176,118,239,201, 68, 68, 88, 47, 16, 16, 96,237,186, 63, 15,137,147,147, 19,210,210,226, 65, 16, 76, 93, 65,153, +167, 7, 14, 28, 56,192,220,220, 28,227,198,141,131, 88, 44,198,187,239,190, 11,149, 74,245,126,217, 19, 13,230,205,155, 7, 0, + 88,176, 96, 1,130,130,130, 80, 82, 82, 82, 99,138,138,141, 75, 90,216, 23,170,232,241,100,137,248,221,238, 86, 77,124,123,244, +237,133,166,110, 61,209,163,111, 18, 0, 44,181,226, 61, 31,190,252,107,179, 99,230,114, 98,231,141,227, 23,191,235,212,191,251, +252, 32,221,149,197, 65, 63,231,214,249,192,146,247,124, 75,225, 99,222,160, 53,107, 55, 25, 86, 47,248,122,150,240, 69,150, 46, + 39, 53,151, 46,146, 10,185, 38,174,182,144, 77,251,106,113,124,106,234,211, 47,145,116, 62,198,152, 99, 24, 31, 31, 15,141, 70, + 3,138,162,160,209,104, 80, 84, 84,132,228,228,228,138,227,171,146,202,251,125, 54,110,144, 95,177, 74, 85,114,251, 65,108,226, +252,233,163,219, 23,171, 84, 37,177,207, 19, 99,128,181,116, 13,199, 60,175,164,176,200, 66, 91,168, 71,222,189, 24, 88,245,112, +134,214, 64, 64, 99,224, 32, 39,171, 16, 58, 10,208,147, 60, 56, 14,251, 8, 6,130,139,130,204, 52,144, 13,136,115, 96,193,130, +197,127,203,193, 34, 8,226,100,112,112,112,224,223,197, 13, 0,193,193,193,143,130,131,131, 95,105, 91,229, 2,171, 91,165, 39, +220,110,213, 93, 43,157,204,242, 29,150,126,253,158,189, 94,175,245, 40, 42, 42,162,184, 92, 1,183,145,169, 42, 45, 39,209,248, +141,233,245,250,147, 87,175, 94, 29,210,185,115,103, 97,236,131,123,208,228,231, 67,147,159, 7, 62,109,128,133, 40, 0,164, 94, + 11, 66,171,129,131, 59, 13, 85,129, 8, 55,239, 62,209,235,245,250,147,181, 86, 8, 24,134, 54,148, 10, 7,146,228,188,212, 85, + 40, 52,145, 65, 32,147, 65, 40, 51,169,182, 11,177, 38,216,216,216, 72,186,116,233,210,211,223,223, 31, 12,195, 96,229,202,149, +208,106,181,130,114,167, 72,167,211,161,176,176, 16,191,254,250, 43,246,236,217,115,221,212,212,116,103,106,106,237,226,150, 54, +104,206, 92,190,126,111,192,135,239,246, 16, 92,184,178, 13,122,141, 1, 69, 26, 51, 20,171,181, 40, 84,241,160, 21,246, 5, 65, + 92, 5,201, 17,162, 67, 75, 87, 92,186, 22,171,166,244,186,179,245, 17, 67, 4, 65, 64,163,209, 32, 35, 35, 19, 57,133,151,129, +194, 20, 88,233, 10, 81,244,252, 25, 90,126, 52, 6, 90,173,182, 78,174,249,159, 64,111,109,166,228,238, 89, 68,130, 39,176,212, +185,245, 58, 87, 99,170, 8,153, 76, 86, 17,163, 99, 12, 10, 10, 10,176,119,239, 94,180,107,215, 14, 93,187,118, 69, 74, 74, 10, +226,226,226, 48, 96,192,159,189,108,247,238,221, 67, 68, 68, 4, 92, 93, 93,235,224, 98, 78,231,228, 60, 29, 62,120,240, 96,254, +173, 91,183,192, 48, 12,220,220, 76, 33, 55,145,129, 32,133,240,244,180, 6,240, 4, 4, 65,160, 91,183,110,208,233, 82, 13,197, +197, 56, 93, 27,103, 68, 68,196, 64,127,127,255,166,122,189, 62,198,199,199,135,155,150,150,134, 97,195,134,225,224,193,131,229, + 79, 52,152, 59,119,238, 75,255, 41, 42, 42, 82,215,196,231,215,166,249,151, 20, 99,217, 85, 32,116,110,106,106,237,139,166,110, + 61, 1, 0,189, 3,199,163,105,179, 70,200,207,188,223, 84,171,121,241, 46,135,200, 54,255,229, 86, 74, 84,103,137,207,184,172, +164, 43,177, 0,140, 73,220,203,168, 98,127, 79, 79,228,201, 15, 29,249,237,228,167,131, 6,189,195,213, 83,180,193,199,137,107, +122,240,232,169,140,148, 23,137, 63, 33,241,252,163,151, 78,149,154, 5, 22,149,151,151, 7,153, 76,134,184,184, 56,205,160, 65, +131,132, 42,149, 10,177,177,177, 21, 2,203,198,202,194,171, 99,107, 31,143, 37,171,247,156,147, 10,133,194,190,221, 2, 60,163, + 98, 95, 36, 51, 12,145, 80, 35, 47,195,220,138,141,142, 30,104,109,229, 4,229,149, 27,144,118,234, 15,141,134,128, 90, 71, 67, + 75, 1, 6, 14, 31,166,126,109, 32,118,241, 4,205, 0,209, 15,238,193,192, 48,215,217, 91, 8, 11, 22,255, 89,212,165, 69, 64, + 16,196,201,246,237,219, 31,168,236, 50,149,127, 6,160, 1, 80, 91, 76,116,102,101, 17, 85,222,109, 88,211,118,170,240, 54, 88, + 96,133,160,150,145,101, 86, 86, 86, 54,158,238,222, 46, 91,183,111,131, 78,147,143,184,168,157, 40, 46, 76,199,183, 75,111,186, + 58, 56, 56,116, 77, 73, 73, 9, 49,102, 99,201,201,201, 7,143, 30, 61,250,133,159,183,183,127, 99, 71, 71,220, 79,120, 14, 62, + 67,129, 79, 81, 32,117, 26,112, 41, 45, 28,189,104,144,164, 20,105,105,133,216,124,246,143,135,101, 89,221,107,126,250, 38, 56, +104, 52,104, 40, 62,232, 61, 16,140, 94,135,243,157,189, 32,146,201, 32, 52, 51, 67,135, 95,175,148,166,108, 48,232,145,176,108, + 54,248, 82, 25, 44,218,117,171,179,156, 25, 25, 25, 37,215,175, 95, 15,123,252,248,113,107,119,119,119, 44, 92,184, 16, 73, 73, + 73, 96, 24, 6, 25, 25, 25,234,204,204,204,148,236,236,236, 4,130, 32,142,165,166,166,110,133, 17,153,194, 51,220, 56,187, 46, + 92,252,227,203, 86, 45,189,154,247,234, 26,132,147, 39,191, 67, 94, 65, 1,138, 53, 92, 20,169,116, 40, 86, 51,176, 55,113, 69, + 91, 95,127,100,102,107, 17,251, 40, 60, 57,139,111,177,165,158,214, 41,238,221,187, 7,103, 11, 2, 81, 49, 17,176, 82,231,192, +221, 76, 6,255, 78,157, 17, 31, 31,111,148, 51,101, 48,128, 59,109,230,159,163, 5,205,204,204,144,159,159,255,210,255, 36, 18, + 9,236,237,237, 81, 80, 80,128, 35, 71,142,128, 49,238,166,168,215,106,181,240,240,240,192,221,187,119,113,241,226, 69,244,232, +209, 3, 93,186,116,193,149, 43, 87, 16, 22, 22,134,136,136, 8, 16, 4, 1, 75, 75,203,114,183,173, 70,203,237,206,157,123,135, +101, 50, 98,222,184,113,147,125, 70,143, 30,141, 95,127, 61,128,241,227,220, 65,144, 66, 16,132, 16,239, 12,242,192,162,197, 97, +104,219,182, 27,172,172,248,184,120,241, 81, 60,151,107,186,199, 8,177,250,243,138, 21, 43,184, 34,145, 8, 90,173, 22, 69, 69, + 69,200,206, 46, 77, 71, 85,157,131,165, 82,169,106, 76,172,246, 40,242,201, 15,185, 5, 76, 46, 89, 18,254,110,150, 62,210,183, + 71,223,100,244, 14, 28,135, 11, 39,119,226,210,185,139,176,226, 61,143,167,196, 69,103, 50,227,179, 10, 83,139,220, 54,123, 5, +124,194, 81, 22,159,219, 52,229,157, 24,142,163,130, 62, 60,111, 99, 65, 94, 93,229,205,137,218,123,226, 4,131,119, 58,181,107, +227,218,194,201, 94,144,147,157,129,163,191,157,121,164,123,254,235,201,178, 11,149, 49, 86,228,162,181,107,215,126, 7, 0, 52, + 77,239, 90,189,122,245, 39, 95,126,249,165,117, 74, 74, 74,133,192,202,200,202,185,212, 97,224, 52, 42, 59, 47, 95,187, 99,245, + 87,195,196, 34,161, 96,254,178, 29, 87,244, 28,220,170,241,226,194,229,142,249,122,195, 47,153, 71, 14,239,228, 88,139,248,184, + 54,103, 1,226,254,184, 12, 29,193, 71,223,243,183,161,213, 81, 40,200,200,198,165,113, 83, 96,174,176,192,233,236, 88, 42,191, +176, 96, 12,123,143, 97,193,226, 63,139,218,180, 72,102, 37, 65,148, 3, 32, 33, 56, 56, 56,171,146,187,148, 9,224, 30, 0,191, +178,223,101, 86,249, 95, 38, 65, 16,119, 25,134,105, 93,137, 39,179,146,208,170,252, 89, 91,229, 55,247, 94, 69, 96,213,138,172, +172,172,140, 59, 97, 15,113,253,194, 70, 24,244, 26,228,151,217, 86,169,233,106,200,229,242,155,229,217,196,171,129, 15, 94,206, +149,193,168,213,234,247, 86,175, 89,115,235,211, 49, 31,218,117,233,217, 19, 47, 30,220,135, 38, 39, 11, 28,138, 2,135,224,161, + 40, 75,132,244,180, 2, 4,159, 56,147,161, 82,171,223,171,230, 6, 81,149,179, 34,200,157, 33, 8,136, 76,229, 16, 74,165, 16, +154,202,255,116,172, 8, 2, 2,153, 9,120, 82, 25, 56,124,129, 49,229, 68, 73, 73,201,208,137, 19, 39,222, 63,125,250,180,249, + 7, 31,124,128,119,222,121, 39, 34, 47, 47,175,123,110,110,174,177,241,102, 47,115, 30, 57, 66, 25,124, 6, 13, 94,191,113,235, +141,177, 99,199, 90,188, 51,120, 61, 34,162, 30, 33,175,216, 6, 0, 96,111, 37, 69, 91,247,217,200,200,214,224,220,153,147,185, +180, 65, 61, 20,143, 14,234,107,226,100, 24,134,177,178,178,122,201,149,227,112, 56,184,114,229, 10,102,204,152, 1, 43,147, 43, + 40, 76,136, 67,139,206, 93,209,123,244, 24,140, 31, 63, 30, 28, 14, 7,150,150,150, 85,221,140,191,236,123,101,228,231,231,163, +113,227,198, 56,191,213,221, 91,171,206,224,251, 91, 0, 4, 76,117, 23, 46, 13,120, 20, 26, 26, 90, 4, 96,171,155,155,219,225, + 42, 35, 26,255,194, 73, 16,196, 55, 75,151, 46,221,216,177, 99, 71,177, 76, 38,131,155,155, 27,174, 95,191,142,235,215,175,227, +234,213,210,248, 56, 75, 75, 75, 88, 88, 88, 32, 47, 47, 15, 73, 73, 73, 42,130, 32,190,169,133,147, 46, 40,224, 12,185,112,225, +216,237, 65,131,222,179,234,215,175, 61,236,236, 10, 97, 48,100,129, 32,249, 16,138,108,176,117,235, 50,100,164,231,224,198,205, +155, 57, 69, 69,220,161,225,225,127,153,130,168,186,114,234,206,158, 61, 11,145, 72,132, 95,127,253,213, 96,107,107,203, 53, 51, + 51,171,209,193, 82,171,213,194,154, 56, 39,204,121,152, 2, 96,241,231,195, 28, 86,221,120,148, 62, 4,192,190,166,205, 28,113, +233,220, 69, 92,189,116, 99,110, 59, 31,122,237,192, 81,109, 22,137,122,188, 63,219,171,213, 39, 28,153, 92,129,221, 71,127,229, + 68,133,111,251, 94, 93,252,208, 5, 27,143,206,174,227, 24, 49, 0, 80,148,145, 62, 47,248,199,117,187,130, 23,126, 39, 94,249, +211,134, 84, 85, 86,218,215,101,162,159,169,197,189,170,224,140,143,143,223, 12, 96,115, 37,167,121,239,178,101,203, 66, 63,252, +240, 67,235,114,135, 50, 51,234,196,205, 76,224,166,119,183,241,223,118,104,237,237,254,253, 79,191,156, 75, 76, 74,255, 37, 63, +186, 34, 7,214, 95,202,121,235,214,173,220, 86,173, 90, 77,156, 61, 39,104,219,194, 69, 11, 8,143,153,115, 17,115,253, 46, 52, + 42, 29,116, 12, 7,122, 16, 8, 95,242, 35, 76,172,229,184,198,228, 48, 26, 14, 57, 33,238,175, 65,254,181,182,207, 6,130,229, +100, 57, 89,206,183,147,179, 54, 3,225,110, 53, 95, 87, 55,147,198,221,218,254, 87, 3,207,223, 2,163, 4,150,131,131, 67,151, +222, 61,219,161, 99,239,201,208,105,242, 16,247,104, 7,138, 10,211,225, 96, 39, 68, 92, 98, 65,251, 50,213,105, 20,202, 50,179, +183,251,126,205,218,163,125,219,180,246,116,115, 80, 8,205, 26, 59, 67,106, 99,139,172,204, 76,220, 14,143,209,111, 56,119,233, +161, 74,173, 54,106,170, 28,154,166, 25,134, 97,192,231,243,193,112, 56,240,154, 54, 7, 36, 73, 86, 25, 45, 72, 64, 30,208, 9, + 36,151, 7,189,145, 49, 67, 74,165, 50,153, 32,136,161,211,166, 77,251, 99,215,174, 93,100,183,110,221, 90,158, 56,113,130,126, +149,202,206,126,248,123, 44,199,103, 72,215,181, 63,111, 56,226, 31,208,206,185,113,147,198,194,142,141, 76,161,211, 83, 72,207, +200, 70,200,141, 40, 77,108,212,189, 36, 90,167, 29,158, 25, 93,115, 22,247,178,155, 96,162,189,189,189,109, 80, 80, 16, 12, 6, + 3, 40,138,130,193, 96, 64, 86, 86, 22, 34, 34, 34,208,170, 93,123,120,124,252, 9,114,114,114,176,125,251,118, 56, 58, 58, 98, +192,128, 1, 40, 44, 44, 68,104,104,104, 98,205,174, 3, 12,243,190, 25,197, 5, 0, 30, 15,134,175, 3, 3,175,120,123,123,119, +122,199, 47,131, 63,121, 90,169,179,181,124,217, 40,254,149, 43, 87, 14, 11,133,194,205,207,159, 63, 47,168, 69, 96,195,197,197, + 69,160, 86,171, 91, 50, 12,195, 45, 40, 40, 88,163,209,104,198,206,154, 53, 75,177, 98,197, 10,248,250,250, 34, 43, 43, 11, 22, + 22, 22, 80, 40, 20, 40, 42, 42, 66,124,124, 60,165,211,233, 54, 81, 20,181, 40, 35, 35, 35,179,182, 58, 8, 11, 11,123, 78, 81, + 45,219,167,167,109, 60, 58,121, 82, 31, 55,189, 62, 64, 32, 55,237, 12,134, 49, 32, 47, 55, 9, 4,115, 95,119,236,248, 31,207, +242,242, 56,239,133,135,135,199, 26,115,140, 72,146,156,244,251,239,191,163,124,170,156,212,212,212, 56,146, 36,107,116,176,140, +193,234, 35, 41,106, 0,251,135,245, 85,204,204,207,188,223,220,138,247, 60,190,157, 15,189,118,245,145, 20,181,141, 89,201,146, +148,204, 43, 49,169, 69,231, 54,239, 62,250, 43,103,204,187, 67, 41,133, 44,118,174, 85, 35, 24,147, 25,159,241,245,245,117, 34, +201,156, 38, 25,217, 79,194,198, 79,248,244,125, 83,190,234,180,175, 67, 86, 51,131,173,151, 40, 42, 42, 42,161, 30, 46, 86,229, +182, 31, 3,160,203, 15, 63,252,112,174,170, 53,158,145,149,115,169,125,224,103, 76, 94, 94,126,100,102,244,137, 7,117,113,149, + 79,127,243,209,135,227,183, 76,248,120, 34,199,103,250, 87, 72,190,252, 7, 96,208, 67,121, 53, 4, 18, 19, 10, 39,179, 18,168, + 18, 14, 57, 49, 60, 60,156,205,226,206,130, 5,139,127, 13,140,142,250,118,105,234,112,206,165,137, 67, 31,151, 38,246, 0,128, +184,231,169,136,123,158,114, 62, 46, 62,165,111, 3, 21,110,197,100,207, 68, 89, 42, 6,198,184,201,158, 95,226,244,246,246,142, + 32, 73,210,190, 62, 59, 77, 81, 84,114, 84, 84, 84,128, 49,229, 84, 40, 20, 31, 52,106,212,104, 89,106,106,234,209,228,228,228, +207, 95,139,186, 47,155,236,153,228,240, 3, 25,134,241, 5, 64, 16, 36,105,204,100,207, 21,156,246,246,246, 45,196, 98,241,102, + 46,151,235, 84,126, 28,203,187,241,116, 58, 29, 39, 63, 63, 95,164,213,106, 57, 0, 8, 62,159,111,144,201,100,106, 30,143,103, +160, 40, 42, 81,175,215,127,154,154,154,250,192,216,167, 16, 79, 79, 79,105, 96, 64,116, 81,249, 20, 58,243,190, 25,133,101,187, +106,109, 59, 21,156,177,177,177,205,205,205,205, 71, 16, 4, 49,140, 97, 24,247,194,194, 66,205,119,223,125, 23, 25, 18, 18, 82, +224,228,228,212,175,115,231,206,196,253,251,247,145,144,144,192, 20, 21, 21, 29, 33, 73,242,155,148,148,148,184,122,182, 37,178, + 67,135,150, 35, 77,100, 24, 72, 51,240, 3, 24,130, 32,136, 7, 69, 69,196,105,133,162,201, 47, 71,142, 28,161, 26,250, 4,230, +239,239,127,170,168,168,104, 64,108,108,108, 77, 79, 85, 85,207,163, 26, 57, 87,126,237,243, 77,251,174,157,134, 94, 15,185,122, +108,206,210, 71,139, 43,175,155, 58,196,124,252,168,169, 51, 86,236, 91,255,211, 87,235,143,231,238, 48,166,156,254,254,254, 77, + 1,140,100, 24,198,155, 32, 8, 55,154,134,136, 32,152, 28,130, 32,162,104,154,190, 71,211,244,239, 15, 30, 60, 72,125, 27,158, +104, 43, 79,246, 76, 80,148, 25, 69, 16,198, 78,246,204, 58, 4, 44, 39,203,201, 58, 88,111, 13,234,147,154,200,232, 12,220,113, +241, 41,125,227,226, 83,208,172, 89, 51,230,233,211,167,245, 18,103, 53,149,179, 44, 67,251,129, 87, 33,121,244,232,145,255,223, + 89,153, 74,165,114,191, 82,169,220,255, 90, 73, 67, 66, 12, 25,192, 14,148,190, 26,132, 50,129,212,214,152,223,150,148,148, 32, + 47, 47,175,193,197,141,142,142, 46, 30,210,238, 79,103,139,203,133,193,216,255,246,233,211,231,133, 78,167,187, 8, 32, 25,128, + 25,128, 28,189, 94,127, 54, 43, 43, 43,157,162,168,128, 23, 47, 94,124, 91,230, 68, 46, 78, 79, 79,111,104, 30, 9,250,198,141, +200,125, 0,246,253,117, 85,196, 43, 29,170,136,136,136,129, 10,133, 34,194,210,210,210, 85,173, 86, 11,212,106, 53,143, 97,152, +138,182, 47, 22,139, 51,203, 51,166,215, 5, 83, 57,118,115,136,108, 75,115, 57,241, 23,167,198,202, 1,191,170,138, 31, 54,183, +114,192,175,245, 40, 91,188,159,159,223, 94,146, 36,155,208, 52,109, 11, 64,206, 48,200, 98, 24, 38,139,162,168,228,135, 15, 31, +166,190, 45, 23,165, 50, 1, 21, 8, 22, 44, 88,176, 96,241,218, 20, 46,203,201,114,178,156, 44, 39,203,201,114,178,156, 44,231, + 63, 30, 12,195, 24,253, 34,193,130, 5, 11, 22, 44, 88,176, 96,193,226,181,130,168, 69,133,214,167,111,181, 33, 74,246, 33,203, +201,114,178,156, 44, 39,203,201,114,178,156,255, 57,206,186,184,223,218,216,174,250,196, 96,253,221, 96,237, 83,150,147,229,100, + 57, 89, 78,150,147,229,100, 57,255, 21, 96,187, 8, 89,176, 96,193,130, 5, 11, 22, 44,222, 32,106, 28, 69,216,180,169,163, 23, + 73,209, 29, 25,134,228, 48, 36,163, 39, 10, 84, 7,227,170, 36,217,108,212,168,145, 25,143,196, 32,130, 97,164, 4, 65, 83, 52, +135,188, 30, 31,159, 28,101,204,134, 61, 61, 61,249, 0,198,242,120,188, 78, 58,157, 78,193,227,241,148,106,181,250, 26,143,199, +219, 21, 29, 29,173,123,155, 42,169, 99,199,142, 35,143, 28, 57, 98, 22, 24, 24,168,209,233,116, 6, 62,159,207, 61,112,224,128, +112,220,184,113,121,215,175, 95,111,208, 40,200,150, 45, 91,118, 95,190,124,121,211,158, 61,123,162, 83,167, 78,197,253,251,247, +231, 7, 4, 4,240,231,204,153, 19, 31, 25, 25,121,185, 62, 92, 54, 54, 54, 94, 92, 46,119, 15, 65, 16, 28,134, 97, 62,170,148, +130,225,239,192, 7, 0,134, 3, 80, 0, 72, 3,112, 8, 64, 67, 71, 89,246, 3, 48, 8,128,111,217,242,125, 0,191, 3, 56,251, + 10,229,235, 7, 96, 16, 65, 16,126,101, 79, 27,247, 94, 35,167,111, 25,231,107, 43,231,171,238,187,191,191,255,119, 2,129, 96, + 2, 0,104,181,218, 29, 50,153, 44,184,186,223,133,132,132,104, 81, 67,234, 19,207, 38, 96,162,126,247, 0, 0,120, 13,122, 12, + 0,168,107, 57,250,121,195, 70, 17, 51, 81, 30, 76,117,188,132,215,227, 6,143, 74, 86, 40, 20, 83, 6, 12, 24, 48,231,236,217, +179,223,167,164,164,108, 1, 11, 22, 44, 88,188,173, 2,171,105, 83, 71,175, 97, 67,222, 91, 58,233,211,201, 4,135, 67, 34,250, +241, 99,238,212,233,159,247,241,176,181,117,144,170,213,158, 12, 64,171,196,226,135, 42, 85, 73,202,198,245, 63,155,184, 55,111, + 78, 81, 20,141, 77,155, 55,246, 63,114,252,232,215,117,137, 44,107,107,235,166, 60, 30,111,205,244,233,211,109,250,244,233, 67, +218,218,218, 34, 57, 57, 89,126,236,216,177,102,219,183,111, 15,180,182,182,158,153,153,153, 25,223,144, 29,178,179,179,235,172, + 48, 71, 63,177,144,233,142, 2, 2, 42, 3,113, 89,169,101,206,166,165,165, 93,109,104, 37,105,181,218,105, 37, 37, 37,237,188, +188,188,232,141, 27, 55, 18, 19, 39, 78,100, 8,130, 32, 85, 42,213, 78, 52, 48,205,132, 88, 44, 94,223,179,103, 79,183, 78,157, + 58,197, 93,191,126,125, 32,128, 83,195,135, 15,119, 17,139,197,177, 0,220,235,195,197,225,112,118, 70, 69, 69,249,169, 84, 42, + 4, 4, 4,108, 7,208,234,111,106, 47,219,205,205,205,245, 27, 54,108,216,220,178,101, 75,215,220,220,220,226, 79, 63,253,180, +215,131, 7, 15,122, 0,248,184, 30, 60, 82, 0,107, 37, 18, 9,103,230,204,153,103,222,125,247,221,123, 82,169, 84,246,228,201, + 19,222,140, 25, 51, 62, 74, 76, 76, 28, 6, 96, 58,128,226,250,114, 90, 90, 90,138,151, 44, 89, 18,222,161, 67,135, 12,145, 72, + 36,142,143,143, 39,102,206,156, 57,241,201,147, 39,175,194,201, 95,180,104,209,245,110,221,186,197, 9,133, 66, 73, 98, 98, 34, +231,203, 47,191, 28, 31, 30, 30,222, 96, 78, 51, 51, 51,193,119,223,125,119,179,107,215,174, 9, 34,145, 72, 26, 23, 23, 71,206, +154, 53,235,147,167, 79,159, 26,205,217,165, 75,151,145, 42,149,106, 97,104,104, 40, 0,160,125,251,246,223,105,181,218,249,127, + 17, 53, 12,131, 78,157, 58,169, 73,146,156, 16, 26, 26, 90,109,123,221, 21, 54,123, 36, 0,124,249,109,249,114,233,123,117,203, + 99, 3, 86, 30, 32,188, 30,215,171,225,120, 54, 41, 21,119, 27,175,126,246, 33, 0, 76,253,178,244,251,141, 87,203,215, 79, 97, +234, 35,218,236,237,237, 63,109,211,166,205,188,219,183,111,239, 14, 8, 8,152,177,101,203, 22, 94, 96, 96,224, 18,154,166, 93, +251,245,235, 55,236,230,205,155, 43,159, 60,121,178,158,189,196,179, 96,193,226,173, 18, 88, 36, 69,119,156,244,233,100, 98,196, + 7, 35,211,148,233, 25,180,204,196,244,131, 67,135, 15, 75,154, 55,111, 78,170,215,174,133, 33, 43, 11,212, 23, 95,116, 8, 9, + 9,209,127, 54,243, 11,149, 70, 93,178, 83, 97,107, 35, 57,184,255,128,221,209, 95,143,116, 4, 16, 85,155,115,197,227,241,214, +252,250,235,175,118, 77,155, 54,133, 86,171, 69,102,102, 38,116, 58, 29,222,125,247, 93, 78,187,118,237,236,198,143, 31,191,198, +202,202,234,189,250, 56, 89, 86, 86, 86,182,238, 78,188,211,163,134,247,109,222,189, 75,128,216,206,161, 9,144, 76, 35, 37, 46, +182,245, 31,183,194,167, 31,190,112, 37,230, 73,190,110, 64, 86, 86, 86,122,125, 43, 41, 59, 59,123,206,167,159,126,122,196,215, +215,215, 90, 40, 20,194,214,214,150,248,228,147, 79,210,149, 74,229,162,134, 86,124,121,118,112,146, 36,169, 42,239, 13,161,115, + 52, 53, 53,133, 92, 46, 7, 0,135, 87,105, 16,195,134, 13,227, 36, 38, 38, 78,160,105,218,179,242,247, 74,165,210,197, 96, 48, +100, 61,127,158,224,167,214,234,218, 78,249,114,225,146, 17,131,186,203,111,222,188, 73, 14, 28, 56,144,119,229,202,149, 15,234, +225,100,173,117,119,119,127,176, 98,197, 10,109,116,108,188,207,249, 43, 55, 73, 27, 11, 41,221,180,113, 99,217,163, 71,143,248, +193,193,193,153,193,193,193,107, 1,140,175, 71,209,215,246,238,221, 59,105,222,188,121,156,232,152,103, 46, 87,111, 70, 66, 46, + 19, 80, 78,142,246,162,155, 55,111,114, 55,110,220,136,175,191,254,186,222,156,221,187,119,143, 93,188,120, 49,147,150,145,211, + 44,254,185, 18, 38, 50,129,193,210,210, 82,124,229,202, 21, 98,215,174, 93,218, 25, 51,102,172,165,105,186, 94,156, 29, 58,116, +120,182, 96,193, 2,226,241,211,248,102,215,110, 70, 66, 38,229, 27, 26, 59, 57,138,238,220,185, 67,252,252,243,207,250,239,190, +251,206,168,114, 50, 12,179,105,229,202,149,248,237,183,223, 0, 0,251,247,239,135,139,139,203, 75, 13, 72,165, 86,131, 32, 8, + 36, 60,127, 46,153, 52,105,210,166,234, 30, 8,162,126,247,192,174, 48, 96,236,216,177,105, 70,237, 65,244,202,122,187, 86,229, +194,106,242,228,201,201, 53,252,236,195,245,171,140, 23, 89, 29, 59,118,156,115,240,224, 65,171,195,135, 15,127,121,236,216, 49, + 0,128, 68, 34,145,172, 91,183,110,202,224,193,131,241,241,199, 31,207, 97, 5, 22, 11, 22, 44,222, 58,129,197, 48, 36,135,195, + 33,145,145,158,165,239,221,171,207,248,117, 27, 54, 8, 5, 2, 1,180, 90, 45,138, 47, 93, 2,163,209,192, 84, 44,198,128, 1, + 3,120, 62, 62, 62,242,137,227,199,127,146,145,158,182,153,195, 33,237, 24,134,228,212,177,205,177,211,167, 79,183,105,218,180, +233, 75,209,248, 20, 69, 33, 61, 61, 29, 38, 38, 38,120,255,253,247,173,246,238,221, 59, 22,128, 81,118,191,141,141, 77, 99,183, + 38, 86, 55, 14,111,251,210,206,198,140, 0, 50,127, 5, 94,196, 2,251, 68,112,179,113,134, 91,143, 46,226, 65,109,125,252, 70, +174,216, 21, 73,146,100,135,140,140,140,132,250, 84, 82, 66, 66,194, 53,173, 86, 59, 65,173, 86, 31, 7, 64, 94,191,126,157, 73, + 76, 76,156,148,158,158,254,162,161, 21, 79, 81, 20,242,242,242, 64,211, 52, 7, 64,197, 59,101,228, 84, 62,127, 7,134, 13, 27, +198, 73, 74, 74,250,212,211,211,179,217,214,173, 91,145,145,145, 1,145, 72, 4,154,166,209,190,125,123,167, 94,189,122, 61,203, +204,201, 55, 55, 24, 40, 93,242,139,231, 1,203, 86, 70,102,250,121,185, 95, 59,124,248,112, 75, 43, 43,171,247,141, 20, 88,253, + 76, 76, 76,184,223,127,255,189,202,206,209,101,132,194,201,141,119,227,238,131, 24,190, 68,192,100,231, 23, 22, 70, 70, 70,198, + 44, 92,184,176,203,233,211,167, 51, 30, 62,124,216, 15,198,117,153,245,179,180,180, 20,207,157, 59,151, 48,181,180,239,221,169, +139, 19, 47,252,126,212, 51,129, 68, 64,119,234,212,105,208,141, 27, 55,182,207,154, 53,171,229,169, 83,167, 10,110,222,188,105, + 52,167,133,133, 5,111,209,162, 69,148,173,189,243, 96,167, 38,205,120, 14,118, 86, 94, 0,240, 36,230,233,182,244,244,244,103, +147, 38, 77,106,123,230,204,153,194,179,103,207, 26,205,105,106,106,202,255,238,187,239, 24, 79,159,150,227,189,125, 91,145,191, +159, 15,189, 41,150, 10,168,130, 98, 85, 81, 84, 84,212,179,175,190,250,170,205,169, 83,167, 10,239,222,189, 91, 39,103, 73, 73, +137,137,163,163, 35,236,236,236, 64,171, 84, 40, 40, 40,192,209,163, 71, 81, 88, 88, 8,138,162, 32, 22,139,241,211,217, 28,168, +159,254,142,205,107, 22, 65,165, 82,153,188,142,118, 82,222,189, 87, 31,113, 85,139,176, 66, 37,225,245,225,228,206,235,152,218, +186, 11,203,157,171,107,215,174, 37, 31, 62,124,216,198,213,213, 21,221,186,149, 78,224, 62,126,252,120,244,234,213, 11,191,253, +246, 27,206,159, 63,159, 56,100,200,144,248,240,240,240,149,201,201,201,155,216, 75, 61, 11, 22, 44,254,223,168,214, 46, 97, 8, +162,248, 81,116, 52, 79,102,102,246,225,186, 13, 27,132, 60, 30, 15, 9, 9, 9,136,138,138, 66,201,165, 75, 80,221,184,129,140, +140, 12, 20, 22, 22,194,218,218, 26,193, 43, 87, 74,249, 98,233,248,216,167, 79, 57, 12,201, 84,158,160,248, 47, 67, 45, 5, 2, + 65,167, 1, 3, 6,144, 53, 13,117, 76, 75, 75, 67,159, 62,125,184, 92, 46,183, 83, 13,101,174,202, 73,216, 91, 19,191, 31,218, + 50,211,206,134,251, 0,120, 58, 3,200,187, 10, 24,242, 0, 85, 17,240,252, 1,112,236, 7, 56,230, 60, 37,246, 77, 31,110,235, + 32,230,255,142,191,102,161,175,117, 72,168,131,131,131,139,171,171,235,214,161, 67,135,146, 0,208,169, 83, 39,194,213,213,117, +179,131,131,131, 75, 45,127,171,149, 83,173, 86,223,202,205,205, 37, 6, 14, 28,104,217,161, 67,135, 11, 3, 7, 14,180, 4, 64, +168,213,234, 91, 13,229, 44,131,101,247,238,221,179,155, 54,109,186,223,217,217, 89,104,196,239, 43, 56, 19, 19, 19, 39,120,120, +120, 52,219,186,117, 43,135,195,225, 96,203,150, 45, 56,116,232, 16, 66, 67, 67,145,153,153, 41,153, 53,107,150,217,137, 75, 17, + 23, 47, 92,189,119,114,230,228, 79,233,222,173, 90, 42,132, 89,105,217,150,150,150,253, 1,216, 25, 89,206, 65,211,166, 77, 59, + 29, 17,245,220,142,224, 8,133,124, 62, 95,100,103,107,101,163,176,177,109,172,176,177,109,110, 34,145,152, 23, 23, 23, 39, 30, + 63,126,156, 65,105,140,146, 81,156, 11, 23, 46,188, 19, 21,155,104,195,144,124, 1,159,207,227, 91,153,155, 89, 12,123,167,207, + 32, 0,144, 8,133,146,226,226, 98,229,222,189,123,235,197,185, 96,193,130,171, 41,233,121,118, 92, 30, 95, 40, 18, 10, 43,102, + 9,183, 48, 55,117,144, 73,165, 18,173, 86,155,180,117,235, 86, 67,125, 56,231,207,159,127, 61,250,105,162, 45, 73,114, 56, 36, + 73,112,173, 45,205,173, 44, 45, 45, 21,150,230, 22, 14, 98,129, 64, 90, 84, 84,148,188,127,255,126,202, 88,206,244,244,116, 60, +126,252, 24,141, 90,183,198,197,139, 23,209,168, 81, 35, 12, 31, 62, 28, 35, 70,140,128, 88, 44, 70, 27,179,103,120,183, 95, 7, + 60,123,246,172,198,227,110,140, 96,178,183,183, 15,169, 79, 91, 2, 74,187, 5,107, 19, 87, 85, 57,107,248,221,195,170,206,213, +209,163, 71,173, 86,175, 94,221,242,243,207, 63,143, 59,122,244, 40,124,125,125, 17, 29, 29, 13, 7, 7, 7, 28, 56,112, 0,159, +125,246, 89, 92, 80, 80, 80,203, 67,135, 14,217,250,248,248,204,109,224,121, 84, 95,176,156, 44, 39,203,201,162,110,129,165,167, +241,251,180, 25,179, 74,118,239,222, 45, 17, 8, 4,120,241,226, 5,210,210,210,112,236,215, 95,169, 81, 45, 90, 20,126,212,178, +101,193,177, 95,127,101,116, 58, 29, 24,134, 65,179,102,205, 48, 96,192, 0,241, 39, 19, 39,103, 16, 5,170,131,181, 62,209, 50, +140,141,181,181,117,197,164,185, 47, 89, 91, 99,199,194, 96, 48,192,196,196, 4, 4, 65,216, 24,179, 3, 10,133, 98,248,248, 47, +123, 54,146, 59,203,211,153,180,157, 57, 0, 9,112, 77, 0,174, 28,144,200, 1,177, 9, 32,148, 66, 19,118, 35,135, 33, 58, 37, +244,245,127,223, 65,161, 80, 12,175, 79, 37, 89, 89, 89,205, 63,124,248,176,245,131, 7, 15,152,194,194, 66,100,100,100, 48, 95, +125,245,149,181,149,149,213,252,134, 86,124,106,106,234,146,241,227,199,167, 13, 29, 58,212,108,247,238,221, 78, 67,135, 14, 53, + 27, 63,126,124, 90,106,106,234,146, 87, 57,160, 60, 30,143,115,233,210, 37,139, 47,191,252,114,164, 94,175, 15,235,209,163, 71, +118,203,150, 45,195,108,109,109,157,235,250, 47, 77,211,158,229,226, 10, 0, 56, 28, 14, 4, 2, 1, 68, 34, 17, 76, 77, 77,243, +226,227,227, 13,141, 45,249, 92,170, 56,183,196,217, 84, 32,234,228,231,101,111,227,232,244, 94,113,113,113, 56, 0,165,145, 69, +244,237,215,175, 31, 87, 7, 33,166,124,220,171,249,164, 49,157,154,109, 94,245,113,247,181,223,127,212,254,199,133, 31,118, 93, + 50,111,212, 72,130, 54,232,157,157,157, 93,202, 3,213,235, 2, 65, 16,126,157, 59,119, 22, 27, 56, 66,242,118,100,108,220,147, +167, 73, 25,131,250,118,106, 87,177, 65,127,255, 17,150,150,150, 3,154, 54,109,218,141, 32,136,190,198,150,179, 91,183,110, 66, +158, 88, 74, 58,217, 91,185, 91,152,201, 92,203, 87, 88, 91, 91,247,181,181,179,251,152, 96,168, 98,133, 66,225, 40, 20, 10,253, +140,229,236,209,163,135,208,192, 17,146,118,214,102, 54, 54,150,102,150, 67,250,117,233,212,163, 83,235, 14, 29,218,183,233,237, +223,186,245, 88, 80,250, 18,103,103,103, 7, 99,247,253,248,241,227,248,249,231,159,209,209,203, 11,206,206,206,176,182,182,198, +165, 75,151,112,233,210, 37, 72,165, 82,228,229,229, 97,211,166, 77, 56,123,246,236, 43, 95, 44,202, 5, 81,121, 96,250,235, 64, + 85,145, 85,151,216,187,118,237,218,209,195,135, 15,195,213,213, 21,227,198,141,115,217,185,115,103, 92, 92, 92, 28,100, 50, 25, +238,221,187,135,217,179,103,199, 5, 5, 5,185,140, 29, 59, 22,187,118,237,194,189,123,247,118,179,151,121, 22, 44, 88,188, 9, +148,119, 17, 50,101,174, 14, 3,128, 72, 74, 74,202,243,240,240,112,112,117,117, 37,181, 90, 45,242,243,243,113,238,204, 25,234, +192,161, 67,167,180, 90,237,116,146, 36,249,187,246,236,217,100, 99,107,219,125,216,240,225,132, 94,175, 71,207,158, 61, 5,151, + 46, 93,178,124,144,148, 84, 88,219, 6, 57, 28, 78,133,123, 52,101,202, 20,172, 89,179, 6, 0, 48,102,204,152, 63, 5,158, 94, + 95, 62,137,110,157,144,152, 82,129, 93,123,121,155, 36, 73,127, 54, 81,119, 40, 40,108, 26,227,112, 67, 86, 40,109, 3,174,136, + 11,137, 12,180, 1,134,216,162,118,225,113, 47,154,120,138, 78,103, 52,233,232,222, 6,135,110, 30, 11, 68,233,232, 55,163, 32, + 22,139,219, 72,165, 82, 68, 71, 71,231, 4, 4, 4,228,201,229,114, 83, 55, 55, 55, 43,177, 88,220,166,161, 21,159,145,145,241, +156,203,229,118,125,239,189,247,166,146, 36,217,139,166,233,139,217,217,217,235, 51, 50, 50,158, 27,121, 99,154,204, 48,204, 2, + 0, 71,202,191,211,233,116, 32, 73, 18, 12,195, 96,208,160, 65, 88,182,108,153,215,197,139, 23, 17, 26, 26,106, 49,106,212,168, + 91, 10,133, 34,143, 32,136,143, 83, 83, 83,107,116,201,178,179,179,177,113,227, 70,112, 56, 28,152,153,153,193,196,196, 4, 34, +145, 8,221,186,117, 75, 95,177, 98,133,219,225,195,135,245,217,205, 50, 24, 65, 81,126,177,165,216,205,158,180,178,110, 58,117, +226,167,183, 1, 28, 54,118,223,101, 50,153,137, 9, 71, 85,196, 97,212,156,213,107, 55,115, 37, 92, 18, 82, 30, 31, 34,178,136, +152,247,221, 98, 70, 68,112, 36,168,199, 60,153, 0,192,231,243, 37,166, 2,104,249, 18, 30, 37,147, 8,136,215,113,114,136,197, + 98,169,140, 15,109, 77,235, 5, 36, 87, 0, 64, 68, 16, 68,137,177,156, 34,145, 72, 38, 23, 48,154,154,214,155,240,248,124,130, + 32, 68,168, 33,200,125, 88, 79, 48,135,215,148, 10,156, 86,127,158, 50,160, 40, 10,173, 91,183,198,161,223, 46,226,220,213, 71, +200, 73,142,194,135,195,251,163,113,227,198,160,105,186,214, 50,149,199, 96, 25,241, 80, 0,123,123,251,144,212, 11,166,117,254, +214,216,174,193,202,156, 94,131, 30,215, 58, 58,209,193,193, 97,162,175,175,239,152, 99,199,142,161,123,247,238, 8, 12, 12,132, +187,187,187,203,168, 81,163, 0, 0, 93,186,116, 65,112,112,176,203,200,145, 35,113,252,248,113,156, 62,125, 26, 1, 1, 1, 51, +194,194,194, 50,148, 74,229, 6,246,114,207,130,197, 91,143,151,180,200,191, 69, 96,253, 5, 66,157,206, 93,189,113, 35, 74, 46, + 94,132,224,194, 5,156,242,243, 43, 50, 24, 12, 95, 40,149,202, 36, 0,176,177,177,153,121,248,200,145,235,125, 46, 95,150,107, +163,163,209,232,225, 67,112,155, 55,111,105,236,134,131,131,131, 43, 68, 1, 0,236,222,189, 27, 5, 5, 5,200,207,207,135,193, + 96,244, 92,194,224,241,136,142, 54, 86, 78, 80, 34, 22, 52,151,107,242,220, 75,219, 65,170,146,167, 52,122,110, 85,148,207,243, + 35, 98, 50,252, 76,212,133,250,182, 36, 95, 11,109,158, 26,246,150, 14,224,146,220,142,245,169,164,114, 71, 71, 44, 22,231,132, +135,135,191,211,185,115,231, 19, 0,172,202,191,127, 5, 23,235,105,106,106,234,140, 6, 89,143, 36,185,224,202,149, 43, 54,135, + 15, 31,254,108,221,186,117, 12, 0,104,181,218,138, 32,121,173, 86, 11, 46,151, 11,154,166, 33,149, 74,193,229,114,109,143, 29, + 59,102, 59,120,240,224,245, 0,106, 60, 78, 18,137, 4,182,182,182,224,241,120, 48, 53, 53, 69,113, 65,174,116,227,210,249,221, + 36,230,182, 22, 51,102,124, 65,142, 29, 59,246,209,186,117,235, 28,237, 93,155,121, 63,126,252, 56,241,131,113,227,175, 31, 56, +112,160, 8,198, 7,184,223,143,139,139, 19,120,123, 54, 19,157, 58, 82, 68, 75,184, 12, 36, 89,223, 67, 34, 86, 64, 32,112,132, + 68, 40, 4, 95, 32,176, 82,166,165,165, 51, 12,243,204,168, 51,146, 97,238,197,199,199,115,154, 56,217, 9, 10, 75, 12,133, 18, + 14,101,242, 52,226,126, 76, 51,127,223,230, 0,160,142,190,127, 69,216,196, 85,160,204,205, 23,218,219,219, 71,213,163,156,124, + 91, 91, 91,193,163,232,167, 91,173, 44,228, 78,182,182, 54,189, 1, 64,175, 42,121, 68,104,213,169, 28, 46, 87,145,147,155,155, +169, 86,171,159, 26,203, 25, 19, 19,195,117,109,236, 40, 60,122,242,194, 14, 27,185,172,145,149, 88,104, 43,151,242,101, 2,138, + 42, 22,208, 84, 42, 95, 40,180, 75, 77, 75,203, 98, 24, 38,166, 38,146,242,128,113, 96,251,222,178,253, 47,119,119,112, 35,142, +129,185,181, 61,178,147,158,224,210,239,199, 49,102,202,103, 70,157, 79,171, 22,143, 59,176,106,241,184, 26,211, 51, 84, 17, 68, +175,126,229,137,246, 12,169,202,169, 84,214,126, 65,237,215,175,223, 55, 91,182,108,145, 84, 80, 68, 71,163, 83,167,210, 72,130, +133, 11, 23,162,111,223,190,112,115,115, 67, 84, 84, 20,156,157,157,113,244,232, 81,112, 56, 28,222,196,137, 19,231,108,221,186, +149, 21, 88, 44, 88,176,248,191,162,198, 33,107, 52,195,208, 84,110, 46, 24,173,182,220, 33, 96, 24,134,145,252, 41,108,120, 18, + 51, 51, 51,130,231,224, 0, 66, 36, 42,253,146, 32, 94, 57, 66,155,203,229,214, 75, 96, 81, 20, 56, 32,244, 96,192, 0, 32, 65, +128, 68,137, 88,128, 32,219, 64, 98,158, 98, 14, 39, 83, 98, 78, 16, 28, 18, 4, 73, 0, 4,192,232,105, 80, 12, 85, 95,101,196, + 20, 21, 21, 65,163,209,152,187,186,186,158, 82,171,213,230,101, 55,182, 55,150, 51,159,162,168, 56,146, 36,241,209, 71, 31,161, + 92,233,107,181, 90,196,196,196, 64,173, 86, 67,171,213, 34, 42, 42, 10, 5, 5, 5,208,106,181, 8, 11, 11,131,179,179, 51,184, + 92,174,162, 54, 94,131,193, 0,107,107,107, 40, 20, 10,104,138, 11,164,191,110, 89, 51,112,197,194,121, 86, 31,184, 50,228,246, +181, 63,208,205,155, 55,207,243,246,246,182, 18,139,197,185,190,190,190,217, 7, 14, 28, 56,134,250,165,104,248,125,222,188,121, +109,187,117,235,230,102,102, 34,214, 75, 69,128,132, 83, 12, 1,163, 2,207,144, 14,183,166,205,104, 66, 34,113, 31, 57,114,164, + 6,165,121,161,140,226,156, 53,107,150,171,143,143,143,194, 92, 46, 44, 22,243,137, 52, 17,135, 82,230, 69,221,191, 5, 0, 66, + 51, 11, 21,132, 98,159, 49, 99,198,168,234,195,249,213, 87, 95,121, 54,105,210,196,142,207,101, 74, 8,202,144, 90,177, 70,163, + 78,231,240,248, 37,224,243,253,103,204,152,161,171, 15,231,151, 95,126,233,225,231,231,103,107,109, 42, 42, 22,243,144, 42,230, + 80,169, 60,173, 38,137,111,208,166,139,204,205, 75, 32,150,180,252,240,195, 15,181, 53,113,150,187, 87, 85,157, 33, 46,151,139, +212,212, 84,228, 60,191,129,156,231, 15,208,156, 44, 68, 91, 91,107,200,100,178, 58,207, 39,194,235, 49, 17,253, 28, 68,244,115, + 16,132,215, 99,162,186,229,170, 34, 75,161, 80,212,218,246,107,237,234,139,246, 12,105, 8,231,233,211,167,151, 15, 30, 60, 88, + 63, 98,196, 8, 92,184,112, 1, 4, 65,224,218,181,107, 72, 73, 73, 65,223,190,125,193, 48, 12, 34, 35, 35,161,211,233, 16, 29, + 29,141, 97,195,134, 33, 48, 48,176,228,236,217,179,223,179,151,122, 22, 44, 88,188, 41,129,213,173,204,146,235, 86,190, 66, 47, + 20, 62,162,167, 77,131,233,111,191,129, 23, 27,139, 97,239,189, 39, 23, 10,133,107,237,236,236, 90, 41, 20,138,142, 98,177,120, +253,172, 89,179, 76, 44,131,131, 97, 31, 26, 10,229,133, 11,208,243,120,119,235,179,113,149, 74, 85,238,198, 64, 91, 38,228,204, +204,204, 64,211,180,209,243,253, 48, 20,110, 42, 51, 99, 33, 64, 99, 48, 64,225,153,194, 30, 55, 63,136, 91,100,123,177,176,121, +243,216, 2,158,235, 10,155,182, 86, 91,155,116,184,171, 34,120, 69,124,185, 0,169,169,169, 96, 64,223,172, 79, 57,213,106,117, +126,113,113, 49,225,234,234,106, 21, 30, 30,238,218,172, 89, 51, 75, 0,132, 70,163,185,243, 42,149,175, 80, 40,218,183,108,217, +242,144,191,191,127,124,203,150, 45, 15, 41, 20,138,246,245,248,251,246,136,136, 8,112, 56, 28, 76,156, 56, 17,133,133,133,208, +106,181, 72, 74, 74, 66, 98, 98, 34,180, 90, 45, 30, 61,122,132,199,143, 31, 67,171,213, 34, 50, 50, 18, 26,141,198, 24,225, 6, + 19, 19, 19,228,101,103, 72, 15,110,252, 97,224,247, 11,191, 21,231, 63, 13, 71,114,106, 58,104, 74,149,250,237,183,223,198,185, +186,186, 94,211,106,181, 30, 20, 69, 13, 0,112,176,158,237, 45,210,221,221,189,219,170, 85,171, 58, 46, 90,190, 71, 96, 42, 43, +128,208,204, 2, 2,115, 9, 4,206, 1, 24, 51,251, 71,238,230,205, 27,238, 95,187,118, 45, 19,198,141,204, 35, 1, 68,182,110, +221,186, 99, 90, 90, 90, 87,127,127,255, 0,135, 38, 77,164, 82, 59, 69,174,208,206, 62,139,214,168,111,193,206,161,203,238,221, +187,239, 92,190,124, 89, 89, 31, 78,103,103,231, 46, 27, 54,108,104,219,184,113,227,182, 18,185, 92,166, 46, 44,220,107, 40, 41, + 57,204,145,201, 4, 16, 75,251,156, 61,123,246,218,129, 3, 7,210,234,195,233,233,233,217, 57, 56, 56,184,117,171, 86,173,218, + 58,186,184,200,196, 54,118,217, 82,123,199, 12,177,155, 23, 31,118,142,189,118,239,222,125,227,202,149, 43,198,150, 19, 36, 73, +130,203,229, 66, 38,147, 33, 36, 36, 4,129,157,221,161, 32,115,224,219, 88,129,254,227, 62,198,249,243,231,193,227,241,240,170, +110,107, 53,238,107,157,130,168,190,226,171, 46, 78,165, 82,185, 33, 44, 44,236,167,247,223,127, 31,189,122,245,194,189,123,247, +240,213, 87, 95,197, 93,185,114, 5, 0,112,239,222, 61, 44, 89,178, 36,238,230,205,155, 24, 55,110, 28, 58,117,234,132,200,200, +200,221,108,242, 81, 22, 44,254, 49,248,139, 22,249, 39,163,188,139, 48,164,242,187,139,185,185,137, 90, 93,146, 28, 18, 18,162, + 27, 48, 96, 0, 95, 44, 22, 99,248,136, 17,100, 35, 39,167,206, 33,187,119, 95,146, 74, 36,196,136,121,243,100, 62, 62, 62, 21, + 23,249, 19, 39, 78,168,242,243,243,178, 27, 53,106,100,150,148,148,148,103,204,198,179,178,178, 96,103,103, 7, 14,135,131,226, +226, 98,112, 56, 28,200,100, 50,148,148,148, 24, 29,131, 85, 92, 64, 94,184, 22,242,168, 87,247,225, 83, 10,251,196,233,164, 6, +198,178,189, 9,201,128,130, 30,234, 18, 6, 6,154,225,222,102,204, 90, 95,114, 11,204, 93,210, 44,235, 73,242,197, 13,214, 42, + 70,123,161, 62,149,148,155,155, 59,127,202,148, 41, 7,189,189,189,173, 76, 76, 76, 96,107,107, 75, 78,152, 48, 33, 51, 41, 41, +105,113, 67, 43,222,211,211,115,164,135,135,199,218,195,135, 15, 91,196,199,199, 3, 64,147,121,243,230,117,127,252,248,241,244, +232,232,104, 99,146,151, 30, 90,181,106,213,218, 30, 61,122, 72,219,181,107, 87, 33,176,116, 58, 93,197,123,213,207,229,221,177, +181,129,166,105,136, 68, 34, 28,222,182,166,207,247, 11,191, 21,103, 71,223,196,253,107, 23,112,246,185,166,100,229,142, 93,183, + 68,229,110,101,125,247,215, 90,210,194,196,204,228, 80,247,222,253,236,135,140,153, 66, 46, 92,184,144,249,227,220, 97,102,199, +186,105,112,241,248, 9, 4, 65,226,241,147,123,152, 60,162, 11,243,232,193,163,214, 0, 28,235,203,185,124,249,242,226,199,143, + 31,231, 31, 58,116, 72,212,168, 81, 35, 87,146, 36,133,105,233,233,217, 35, 71,142,188,119,253,250,245, 28,154,166,167, 53,168, +156,127,252, 81,188,123,247,110,137,181,181,181, 7, 73,146,194,252,252,252,172, 41, 83,166, 68, 28, 62,124,184,144,166,233,233, + 13,225,236,212,169, 83,209,193,131, 7, 37, 78, 78, 78,238, 36, 73, 10, 83,211,210,178, 70,140, 24, 17,121,243,230,205, 2,148, + 38, 26,173, 22,195,103, 62, 70,183,119, 75, 63,139,197,226,108, 79, 79, 79,203, 1, 3, 6,128,162, 40,196,199,199,227,193,131, + 7,232, 55,106, 52, 44, 44, 44,112,249,225, 67, 40,149, 74,124,253,245,215, 80,169, 84,120,250,244,169,242,117, 94, 60,202,186, +246, 24,165, 82,249,151,147, 53,234,119,143,138, 36,162, 47,137,171,166, 68, 72,109,113, 86,181,113, 2, 64,159, 62,125,198, 13, + 30, 60, 24,191,253,246, 27,190,250,234,171,184,160,160, 32,151, 17, 35, 70, 32, 42, 42, 10, 45, 91,182,196, 23, 95,124,225,178, +106,213,170, 56,134, 97, 92, 58,116,232, 0, 71, 71,199,119,148, 74,229,108,246,190,197,130,197, 63, 2, 33, 85,222,255, 21, 2, + 11,168, 20, 80,198,200,197, 35,182,108, 88,111,250,217,204, 47,138,189,188,188,204,109,109,109, 65,146, 36,250,245,239, 79,180, + 63,119,206,132,167, 80,192,178, 69, 11, 48, 12, 3,154,166,113, 53, 52, 20,151, 46, 93, 42,222,187, 99,187,195,248, 79, 62, 25, + 4,160,198,145, 59,229,221,106, 4, 65, 32, 51, 51,179, 66, 96,137, 68, 34,164,166,166,194,206,206, 14,124, 62, 31, 28, 14,135, + 11,128, 3,160,214,110, 71, 59, 59,187, 61,193, 75,162,230, 38,249,126,217,180,147,132, 36,206, 20,167,129, 4, 1, 3, 67,131, + 84, 49,160,105, 6, 26, 61,224,237,192, 49,191,168,129,217,157, 71, 23,226,237,236,236,246, 40,149,198,223,107,226,227,227, 47, +171, 84,170, 73,197,197,197, 71, 0,144,183,110,221,162,159, 63,127, 62,213,216,128,244,234, 32, 22,139,103, 31, 62,124,216, 98, +241,226,197,185,151, 46, 93,202,239,209,163,135,105,112,112,176,229,200,145, 35,103,195,136,236,240, 74,165, 82, 5, 96,119,122, +122,250,212,214,173, 91, 35, 39, 39, 7, 90,173, 22, 17, 17, 17,104,214,172, 25,194,194,194,224,238,238,142, 59,119,238,192,195, +195, 3, 20, 69, 65,173, 86,131, 50, 34,209, 86,106,210, 11,153, 68,147, 43, 79,189,125, 26, 79,238,135,225,116,156,166,100,229, +142,131,167, 91,180, 12, 40, 54, 86,248, 86, 70,115, 27,137,183,173,149,229,185, 31, 87, 45, 51, 73,185,125, 6,135, 54,255,200, +252,113,242,100, 43,161, 28, 31,181,239,253,217,112,189, 14,141,104, 6,252, 78,157, 58, 96, 80,171, 71, 4, 79,131,220, 75,225, +181,103, 50,175,142,243,200,158,253,254,106,192,187,105,211,166,131, 56, 28,142, 53, 0, 29, 69, 81, 81, 48,114, 10,154,154,202, +169, 6,188, 21, 10,197, 32,145, 72,228, 64, 16,132, 74,165, 82,197,190, 14, 78, 23, 23,151, 65, 28, 14,199, 30, 64, 9, 69, 81, + 49,168,231, 84, 57,189,122,245, 90,185,125,251,246, 89, 26,141,198,178,146,219, 74,156, 57,115, 6, 90,173, 22, 2,129,128,145, + 74,165, 72, 74, 74, 98, 0, 40, 25,134,153,244,186, 46, 28, 67,135, 14,197,173, 91,183, 22, 2, 88, 80,219,239,114,114,114,184, + 22, 22, 22,134,202,194,171,166, 44,240,198,112,222,190,125,123,249,132, 9, 19,102,159, 61,123, 54, 57, 40, 40,168,229,216,177, + 99,113,252,248,113, 56, 57, 57,225,201,147, 39,152, 53,107, 22, 8,130,112, 89,181,106, 85,228,129, 3, 7, 20,105,105,105, 63, +176,247, 44, 22, 44,254, 81, 32,254, 45, 59, 82,109, 12, 22, 65, 19, 60,183,102,205, 40,109, 73,209,206, 79,198,141, 43,121,244, +232, 17, 40,138,130,193, 96,128,250,206, 29, 20,159, 59, 7,131,193, 0,134, 97,112,251,214, 45, 76,159, 54,173, 72, 93, 82,180, +173, 73,147,198, 12,193, 48,210, 74, 84,127,153,109, 91, 91,222, 23,136,210, 46, 66,149, 74, 5, 30,143, 7,153, 76,134,204,204, + 76, 8, 4, 2,136,197, 98,248,249,249,145,142,142,142,129,213, 20,239, 37,206,136,136, 8, 61, 10, 52,195,126, 27, 51, 35,205, +177,196,192, 76, 52,107,130, 70, 60,113,105,188, 21, 0,107, 19, 18,189,188,184,176,224,102, 49, 15,118,125,160, 36, 12,249,195, + 34, 34, 34,244,181,113, 86,133, 66,161,104,238,237,237,189,190, 60, 15, 86,231,206,157, 73, 31, 31,159,159, 21, 10, 69,243, 90, +254, 86, 43,167, 72, 36, 18, 2,192,133, 11, 23,114, 66, 67, 67,251, 95,184,112, 33, 7, 0, 83,254,189, 49,156, 36, 73,110,217, +188,121, 51, 36, 18, 9, 12, 6, 3,180, 90, 45, 52, 26, 13,180, 90,237, 95, 94, 86, 86, 86,184,120,241, 34,104,154, 62, 85, 87, + 57, 61,125,124,139,242,185,102,233,187, 78,252,129, 51, 9,186,162, 6,136,171, 10, 78, 47, 59,169,187,131,117,169,192,200,142, +190,137,167, 15,194,112,250,212,239,145,106, 32, 37,175, 0, 75,243, 10,224, 91,172,134,121, 27, 79,100,157, 59, 50,151,248, 98, + 52, 8, 16,213,206,153,103, 20,103,153, 64,153, 76, 81, 84, 27,138,162,218, 0,152, 92,139,104,169, 23,167, 90,173,110,171, 82, +169, 94, 43,103,125,203, 89, 30,131, 5, 0,223,126,251,237,157,208,208,208,247,239,220,185,211,163,252,245,240,225,195,238,241, +241,241,221, 83, 82, 82,186,199,255, 46,228, 60,124,248,144, 27, 22, 22,198, 11, 11, 11,115, 10, 15, 15, 63,107,108,251,172, 9, +149, 3,220,149, 74,101, 80, 21,167,169,130,147,240,122, 76,172, 95, 53,101,239,225,195,135,237, 94, 23, 39, 0, 60,121,242,100, +253,246,237,219,157,253,252,252, 28,203, 83, 49,108,219,182, 13, 64,105, 38,251, 31,127,252, 17,237,219,183,135,163,163,163, 77, +120,120,120,211,212,212,212,205,245, 61, 55, 27, 8,150,147,229,100, 57, 89, 24, 33,176, 8,154,162, 40, 26, 54,182, 54, 38,153, + 25, 25,235,166, 76,153,156,189,104,209, 34,117, 72, 72, 8,180,143, 31, 67, 29, 17,129,139, 23, 47, 98,198,140, 25, 37,159, 78, +154,164, 84,151, 20,173,177,179,181,177,162, 40, 26, 4, 65,215,234,144,144, 36, 25, 23, 27, 27, 11, 0,208,104, 52,248,249,231, +159,245, 58,157, 14,114,185, 28, 12,195, 96,235,214,173, 52, 0,244,236,217, 83,202,227,241,140,154,130, 36, 53, 53,245,126, 65, + 82,106,159, 95, 71, 78,142,139, 62,240,123, 65,139,108, 45,222, 23, 41, 48,164, 5,131,166,162, 23, 72,188,185, 35,255,230,166, +247,226, 74,114,147,250,166,166,166,222,175,111, 37,217,217,217,125,183,111,223, 62,155,240,240,112, 70,163,209, 32, 37, 37,133, +153, 61,123,182,141,157,157,221,119,175,162,210,243,242,242, 64,146, 36, 93, 86, 47,116,125,213,123, 74, 74,202,195, 35, 71,142, +252,118,249,242,101, 56, 58, 58,130,162,168, 10,129, 85,249,157,203,229,130, 32, 8,108,218,180, 41,143, 32,136,121,117,241, 10, + 4, 2,108, 62,116,250,204,151, 27,143, 30, 58,116,241,206,209,134, 58, 87, 0, 32, 49,145, 47,254, 97,229, 50,211,242,174,198, +125,225,169, 5, 4,197, 84,223, 85,167, 75, 41,109, 35,213, 11,172,134,113,254, 29,229,124,131,156,111, 18,165, 35,253,148,132, +189,189, 61,126,253,245,215,122,199, 96,121, 53, 37,254, 18,220,222, 80,206,135, 15, 31, 46,123,255,253,247,211,131,130,130, 54, +168,213,234,226,178,135, 55,221, 15, 63,252,176,234,179,207, 62, 75, 79, 73, 73, 97,157, 43, 22, 44, 88,188, 81, 84,155,166,129, +230,144,215, 55,109,222,216,255,224,254, 3,118, 28, 14,105, 23, 31,255,252,238, 71, 31,127,156, 18, 26, 26,106,193,107,214,172, + 13, 73,146,180,118,238,220,155, 69, 5,249, 57,123,118,238,112,110,210,164,177, 95,217,100,207, 12,205, 33,175,215,182,193,156, +156,156, 93, 51,103,206,108,179,123,247,110,254,202,149, 43,139, 83, 82, 82,206,223,190,125,187,255,134, 13, 27, 68, 91,183,110, + 45,201,207,207, 63,113,250,244,233,193,221,187,119, 55,104,181, 90,163,243, 11,101,100,100, 68, 33, 35,195,131,252,113,235,168, +152,205,123,251, 48, 28,178, 3,212,124, 16, 12,117,131, 52, 20,157,207, 72, 77,221, 7,192,208,144, 74, 18,137, 68,126, 98,177, + 24, 79,159, 62,205,109,211,166,141, 86, 32, 16,240, 26, 55,110,108, 41, 18,137,252, 26, 90,241, 12,195, 48,185,185,185, 96, 24, +134, 11,128,160, 40,138, 11, 0,116, 93, 73,139,170,128,207,231,143, 28, 63,126,252,111, 27, 54,108,232,211,179,103, 79,184,184, +184, 64,175,215,195,221,221, 29, 90,173, 22,110,110,110, 80,171,213,248,233,167,159, 80, 84, 84, 52, 43, 53, 53, 53,183, 54, 62, +154,166, 33, 20, 10, 33, 16, 8,224,238,233, 83, 34, 18,137,208, 80,113, 5, 0, 82, 1,154, 38,221, 58,133,167, 15,194,113, 48, + 66,153, 87,172,163,251,197,100,150, 60,170,250,187, 18, 45,138,187,247,155, 92, 42,188,245, 40,122, 29,156,127, 71, 57,223, 52, +103,229, 24, 44, 99,126,251,186, 80, 83, 76, 84,109,136,126, 14, 98,114,231,117, 12,162,215, 85,155,227,170, 33,156,229, 72, 78, + 78,222, 84, 62, 5, 14, 73,146,207,166, 79,159, 62, 59, 37, 37,101,181, 82,169,220,160, 84, 42, 23,176,151,118, 22, 44, 88,188, +149, 2, 43, 62, 62, 57,234,200,241,163, 95, 31,253,245, 72, 71,134, 33, 57, 12, 65, 20, 3,228,239, 81, 81, 81, 47, 5,175,187, +152,155,155,140,159, 48,126, 4, 65, 19, 60,130,160, 41,154, 67, 94,143,143, 79,142,170,195,109,122,208,163, 71,143,117,221,187, +119,255,152,162,168, 21, 79,159, 62, 61, 79,146,100,100,191,126,253,190, 52, 24, 12,171,226,226,226,206,187,187,187, 95, 56,120, +240,224, 87, 20, 69,213,215, 33, 50,164,166,166,238, 70, 45, 49, 96, 13,196, 34, 0,166, 66,161, 48, 63, 60, 60,252, 64,199,142, + 29, 71, 18, 4, 97, 10, 32,191,161,132, 26,141,102,122, 97, 97,161,213,136, 17, 35,244, 0,220,223,125,247,221,121,177,177,177, +188,226,226,226,184,250,240,188,120,241, 66,227,236,236, 60,120,202,148, 41,219,248,124,126, 79,252,153,164,173, 92,200,129, 97, + 24, 80, 20,117,162,172,110,106, 4,143,199, 43, 26, 56,112,160,204, 8,135,171,200,216,242,165,101, 21, 78, 95,178,235,116,176, + 70, 79,211, 6,154,153, 20,147, 81, 82,237, 93,255,110, 20,188, 95, 55,103,125,240, 79,225, 4,128,201,157,215,237, 69,244,186, + 10, 1, 85,222,109, 88,117,249,239, 66,153,227,196, 0, 88, 88,215,111,107,155, 87,176,161,156, 85,145,146,146,178,133, 29, 41, +200,130, 5,139,255, 26,216,254,105,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255, 21, 40, 55, 45,140,121,145,172, 6,100, +193,130, 5, 11, 22, 44, 88,176,120,189, 32,106, 81,161,245,153, 41,187, 33, 74,246, 33,203,201,114,178,156, 44, 39,203,201,114, +178,156,255, 57,206,186,184, 31,226, 45,197, 27,156,192,229,181, 28, 24,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255,123, +156,111, 61,216, 46, 66, 22, 44, 88,176, 96,193,130, 5,139, 55, 8, 86, 96, 53, 12, 31,161, 52, 41,228, 67, 0,231,202,150, 27, + 10, 49,128,185,149,248,206, 0,248, 10,128,144,173,230,183, 26, 28,182, 10, 88, 52, 20, 10,133,162,185,167,167,103,120, 29,201, +138, 89,176, 96,241, 15, 6,183,166, 21, 46, 46, 46, 55, 72,146,108, 74,146,165, 26,172,114, 46,164,242,207, 85,223, 25,134,137, +143,142,142,238, 80, 19,103,147, 38, 77, 42, 56, 73,146, 4, 65, 16, 32, 73, 18,122,189,222,132,195,225, 20, 86,199, 73, 81, 84, +114, 76, 76, 76,192, 91, 84,103,123,205,205,205,245, 27, 54,108, 88,239,239,239,223, 44, 39, 39,167,120,226,196,137,125, 31, 62, +124,216, 11,192,135,245,228,242, 33, 8, 98, 79,235,214,173,143,126,246,217,103,135,189,188,188, 76,138,139,139,133, 7, 15, 30, +180,219,180,105,211, 85,138,162,198, 3,136, 98,155,233,219, 3, 59, 59, 59,127,130, 32,214,201,100,178,128,162,162,162,187, 0, +166, 42,149,202,123,108,205,252, 95,241,137, 64, 32,232,231,230,230,214, 70,163,209,228,198,199,199,223, 41, 75,233,146,246,154, +248, 77, 1,124, 39, 20, 10,219,186,186,186, 54,138,141,141, 77,210,233,116,183, 81,154,174, 37,255,117,136,171,182,109,219, 94, + 91,186,116,169,229,188,121,243,174,221,185,115,167,147, 82,169,140, 97, 15, 43,139, 55,129, 70,141, 26,153, 21, 23, 23,111, 35, + 73,210, 95, 36, 18,217,153,152,152, 64, 38,147,165, 9,133,194, 72,137, 68,242,241,233,211,167,243,216, 90,122,205, 2,139,195, +225, 56,222,185,115,199,198,196,196, 4, 20, 69,129,166,105,208, 52, 93, 49,255, 96,229, 64,175,178, 60, 75,232,222,189,123,173, +179, 9,115,185,220, 70,225,225,225, 54, 50,217,159,169,150,116, 58, 29,124,125,125,233,136,136, 8,155,170, 19, 9,107,181, 90, +180,106,213,138,121,139,234,107,180,165,165,165,246,197,139,196,246,106,141,174,195,148,217,139,191, 27,241, 78, 87,211,155, 55, +111,146,131, 6, 13,226, 93,190,124,249, 35, 0,123,140,228, 18, 19, 4,177,125,254,252,249,203,184,124,137,205,145,211, 55,184, + 63,111,222,151,228,227,217,132,152, 57,109,138,100,250,244,233,119, 60, 60, 60,118, 80, 20,213, 25,128,134,109,170,111,199,249, +194,227,241,126, 11, 14, 14,118, 72, 83, 42,241,227,234,213,237, 0,108, 0,208,142,173,154,255, 27,230, 46, 92,184, 48,120,212, +168, 81, 48, 24, 12, 80,169, 84,246,207,158, 61,243,158, 63,127,254,187,207,158, 61,107, 3, 32,238, 21,249,173,221,220,220, 30, +207,156, 57,211,162, 77,155, 54, 32, 73, 18,121,121,121,246,215,174, 93,107,183,125,251,246,143, 18, 19, 19, 61, 0,100,190,202, + 6,204,205,205,127, 89,181,106,149,165, 80, 40,196,206,157, 59, 45,223,127,255,253,171, 0, 58,191,130,200, 34, 45, 45, 45,167, + 3,232, 78,211,180, 16,192,237,220,220,220, 37, 0,116,108,115, 97, 81, 27, 44, 45, 45, 63, 73, 79, 79, 95, 47,145, 72,248,102, +102,102, 16,139,197,224,243,249, 16, 8, 4, 78,230,230,230, 78, 50,153,108,192,200,145, 35,167, 30, 56,112, 96, 27, 91, 91,175, + 81, 96,145, 36, 9,177, 88,140,131, 7, 15,130,195,225,128,207,231,131,199,227,129,199,227,189,244,185,124,185, 81,163, 70,117, +110,172,220,149, 58,113,226, 4, 76, 77, 77, 33,151,203,225,233,233, 9,130, 32, 32, 20, 10,113,241,226,197,151,120, 3, 2, 2, + 94, 41,139,120, 67, 48,172,103,105,146,206,234,146, 55, 6, 78, 77,198,160, 81, 75,135,150,104,244, 93, 24,134, 80,165,229,234, +115, 22,173, 92, 31,213,210,219,147, 56,116,232, 80, 43, 43, 43,171, 15,234, 33,176,102,180,105,211,230,132, 1, 2,219,241, 99, +199,141, 29, 71, 18,134,247,198,125,177,240, 90,196,179,220,109, 94,254,251, 50, 51,147, 39,253,252,243,207, 49, 83,166, 76,153, + 14, 96,133,177,229, 15, 8, 8, 72,164,105,186, 81,153, 72,206, 18,139,197,138,144,144, 16,195, 91,208,214,236, 1,172, 4,160, + 7,176, 28, 64,229,164,155,205,249,124,254, 10,157, 78,151,131,210,137,126,147,222,198,147,197,193,193,193,227,195, 15, 63,180, +202,206,204,196,143,171, 87, 87, 84, 57,140,152,148,252,117,195,223,223,191,169, 72, 36, 90, 9,192, 95,163,209, 56, 0,128, 88, + 44, 78, 97, 24,230,152, 74,165,250, 38, 34, 34, 66,213,208, 7, 90, 0,222,168,121,202, 38,102,197,138, 21, 49, 95,125,245, 85, +252, 27,224,108,108,107,107,187,116,248,240,225, 56,117,234, 20, 78,159, 62,173, 23,137, 68,220,177, 99,199, 18, 83,167, 78, 53, +159, 57,115,230, 0, 0, 63,189, 98,213, 14, 88,184,112,161,133,167,167, 39,142, 28, 57,130,123,247,238,169,154, 55,111, 46,238, +218,181, 43, 56, 28,142,197, 55,223,124,211, 31,192,174, 87,217, 64,110,110,238,146,197,139, 23,239, 94,183,110,157, 73, 92, 92, + 28, 22, 46, 92,104,245,217,103,159,133, 0,232, 90, 15,145, 37, 4, 48, 29, 64,119, 14,135,211,121,236,216,177,134,105,211,166, +241, 72,146,212,175, 89,179,198,122,219,182,109, 35,120, 60,158,127,118,118,118, 17, 88,160,150,251,156,142,166,105, 30, 0, 17, + 0, 77, 93,203,255,166,125,183,176,176,152,156,147,147,179,193,222,222, 30,214,214,214, 21,247, 90,154,166, 81, 92, 92, 12,149, + 74,133,166, 77,155,242, 61, 61, 61,183, 78,157, 58,149,183,126,253,250,141,108,139,169,191,192,234, 10, 32,164,210,119, 93, 1, +132, 16, 4, 1,154,166,193,227,241,192,225,112,192,229,114, 43,132, 79,229,207,229,175, 26,132,208,195, 42,141,153, 40, 44, 44, +172, 16, 87,166,166,166, 21, 78,152, 94,175,255, 11, 39, 69, 81, 32, 73,146,169,141,243, 53,161,130,243,240, 26, 15,236, 10,155, + 61,114, 87, 88,233,114,255, 81,165,239,187,194,128,139,183, 39,173, 92,177,177, 99,163, 25, 75,118, 6,103,103,231,101,120, 57, + 90, 27, 62, 24,213,213, 89,144,149,158,101,217,164, 73, 32,128,140,122,148,179,211,164, 73,147,142, 28,185,252, 84, 42, 20, 10, + 4, 28, 18,156,230, 46, 77,121, 14,242,102, 22,214,125,219, 8, 18,226,226,174,126,244,209, 71,147,166, 76,153, 98, 89, 73, 96, +213,185,239, 12,195, 40,206,159, 63, 15, 46,151,139, 94,189,122,153,151, 29, 99,131, 49,251,254,119,212,103, 37,204, 79, 79, 79, + 31,169, 86,171, 17, 16, 16,240, 78,118,118,118,119, 0,145, 0, 90, 12, 30, 60,248,234,225,195,135, 77, 34, 34, 34,208,174, 93, + 59, 49,128,247,223, 96, 57,255, 2,133, 66,113, 30, 64,111,130, 32,160, 85,171,181, 43,127,120,105,154,187,176, 42,226,234,111, + 47,167,159,159,159,135, 72, 36,186,241,195, 15, 63,200,189,188,188, 8, 30,143, 7,131,193,128,216,216,216, 70,123,247,238,253, +244,238,221,187,253,253,253,253,189,170,153,212,220,152,125,247,190,122,245,106,177,139,139, 75,181,130,177,164,164,132,227,226, +226,210,173, 6, 49,244,119,115, 38,167,167,167, 15,233,221,187,247,164,180,180,180,199, 6,131, 97, 14, 0, 31, 43, 43,171,136, +161, 67,135, 66, 44, 22,119, 87,169, 84, 63,189,202,113,183,177,177, 25,220,161, 67, 7,172, 91,183, 14,203,151, 47,239, 5,224, +143,147, 39, 79,246, 44, 40, 40,184,248,206, 59,239,192,204,204,108, 72, 94, 94,222,174, 87,104, 75,205,219,180,105,179,117,214, +172, 89, 38, 39, 79,158,132,155,155, 27, 10, 10, 10, 48,126,252,120,155,181,107,215, 94, 1,208,173,146,200,170,137,211, 75, 40, + 20,238,218,191,127,191,204,197,197,197,133,207,231,147, 46, 46, 46,200,201,201,129, 90,173, 22, 46, 89,178,164,133, 72, 36,186, +247,211, 79, 63,237, 2,240,222, 27, 62,143,242, 1,200, 1,152,161,126,221,171, 15,107,225,171,136, 79,229,241,120, 16, 10,133, + 16,137, 68, 16,137, 68,136,143,143,255,149,195,225,140, 35, 8, 66,111, 12, 39,241,231,141,203, 15,192,157,186,150, 1,208,111, +193,117,201,145, 32,136, 53, 0,186,163, 52,142, 58,196,198,198,102, 70,122,122,250, 11, 99, 57, 21, 10,133,101,118,118,246, 79, +246,246,246,176,177,177, 65,217, 3, 57, 2, 2, 2,160, 86,171,241,232,209, 35,208, 52,141,103,207,158, 65, 46,151,163, 69,139, + 22, 63, 5, 5, 5, 29, 9, 10, 10,202,254, 27,247,189, 90, 45,242, 79, 23, 88, 87,202,158, 44,203,119,166,124, 25, 20, 69, 85, + 8,172,170,226,167,170,224, 34, 8, 2, 12,195, 16,117, 56, 88,164, 86,171,173, 16, 87,114,185,188, 66,156, 25, 12,134,106, 5, + 86, 67, 97,102,102,118, 46, 47, 47,111, 53,128,243, 13,249,255,216,177, 99,255, 18,207, 49,119,238,220,164,204,204, 76,106,112, +167,230,194, 61,123, 78,101,127, 20,216,205,206,203,213,209, 93,106,105,227, 87, 82, 82,114, 23, 0,175, 62,134,136,151,151,151, +201,198,253, 33, 25,163,166,175, 92,228,104, 43,163, 90,187,217,202, 93, 45,164, 2, 75, 17,215, 96,198, 24,242, 36, 18,137, 55, +128,236,250,150,221,212,212, 20, 39, 78,156,120,219,218,154,185, 74,165, 66,110,110, 46, 54,109,218, 36,159, 52,105,210,229,236, +236,236, 25,131, 7, 15, 94,119,228,200, 17,105, 94, 94, 30,116, 58, 29, 0,168,222,194,243,100,177,185,185,121,151,238,221,187, + 11, 14, 28, 58, 36, 96, 24,166, 24,165,211, 17, 21, 49, 12,243,217,255,187, 48, 34,145,232,203, 37, 75,150,200,189,188,188,136, +172,172,172,210,225,192, 36, 9, 43, 43, 43,204,158, 61, 91,244,205, 55,223, 56,196,196,196,124,141, 6, 76, 59, 3,128,168, 73, + 8, 1,128, 68, 34,161, 80,255,193, 49,213,114, 26, 12, 6,162, 99,199,142,179,179,178,178, 90,168, 84,170,239,141,224, 49, 0, + 56,145,156,156, 92,185,113,223,123,252,248,177,138,203,229,138,155, 52,105,210, 54, 42,234,213, 66, 22,155, 55,111,222,158,199, +227,225,246,237,219,154, 74, 23,247,144,251,247,239,107,222,123,239, 61, 97,163, 70,141,218,231,229, 25, 23,146,162, 80, 40,154, +187,186,186, 94,176,178,178, 18,151, 15,219,182,180,180,228,173, 88,177,194, 36, 57, 57, 25, 6,131, 1,243,230,205, 67, 96, 96, + 32,204,205,205, 49,110,220, 56,219,173, 91,183,254, 2,160, 85,109,206,149, 80, 40,220,245,244,233, 83,119,133, 66, 33,190,117, +235, 22,124,125,125,145,149,149,133,180,180, 52, 20, 21, 21, 33, 45, 45, 13, 31,127,252,177,205,143, 63,254,168,120,139,206,161, + 60, 46,151, 11,169, 84,106,150,159,159,159,255, 10, 60, 66, 0, 2, 0,224,114,185, 21,226, 74, 40, 20, 66, 40,252, 79,140, 11, +114, 32, 8, 34,138,199,227, 9,165, 82, 41,159, 36, 73, 72,165,210,190,142,142,142,143,122,245,234,229,179,119,239,222, 4, 99, + 72,212,106,245, 30,177, 88,204,179,182,182, 6, 0,244,233,211, 7, 99,199,142, 69,102,102, 38,157,154,154, 10,119,119,119, 50, + 36, 36, 4,233,233,233,184,119,239, 30, 90,183,110,205,179,176,176,216, 3,160,255,223,184,111, 53,106,145,127,178,192,170,186, +115, 21,160,105,250, 37,113, 85,157,115, 85,217,193,170,171, 59,143, 32, 8, 80, 20, 5, 59, 59, 59, 72, 36, 18, 72, 36,146,138, +117,229, 98,174,242,139, 97,152, 6,119, 17, 54,107,214,172,135, 68, 34,233,124,249,242,229,119, 0, 92, 52,246,127,195,103, 62, +174,112,173,170,194,207,207,239,198,188,121,243,250, 93,186,116, 41,183,189,111, 83, 90,152,154,148, 45, 49,183,242, 37,172,109, +122, 77,153, 48,241, 38,128,253,245, 40, 98,170, 90,173, 22, 54,182, 35, 85,169,249, 5,218,166,114, 83,179,166,166, 50, 73, 99, + 43, 83, 75,115,145,128,148,218,218,216,235,245,250, 60, 0,169,117, 17, 85,238, 22, 20, 10,133, 90,130, 32,184,102,102,102, 48, + 53, 53,213,229,230,230,170,253,253,253, 33, 16, 8,178,248,124,190,209,221,133,173, 91,183, 78,167, 40,202,166,182,223,240,249, +252,140, 91,183,110,217, 26,185,191,223,248,249,249,117,221,176, 97,131,181,155,155, 27, 54,109,218, 36, 63,114,228,200,174, 95, +126,249, 5,121,121,121,120,254,252, 57,198,143, 31, 95,128,210,110,196,183,205, 74,191, 54,108,216, 48,108,219,182,141, 41,123, +136,144, 18, 4,225,107,106,106,250, 36, 58, 58,250,255, 30,231, 66,146,100, 95,119,119,119, 34, 63, 63, 31, 12,195,128,195,225, +188,244,154, 61,123,182,248,227,143, 63,158,223,174, 93,187,217, 60, 30,175,192, 96, 48, 28, 40, 42, 42,250,254,209,163, 71,111, + 85,176,106,231,206,157, 63, 79, 74, 74, 10,116,118,118,254,253, 21,104, 24,131,193,160,101, 24, 70,204,225,112,120,175, 90, 38, +130, 32, 56,101,215, 35,117, 37,231,215, 80,182, 44, 68, 61, 70,143, 90, 88, 88,252,178,119,239, 94, 71, 71, 71, 71,232,245,122, +232,245,122, 20, 23, 23, 35, 36, 36, 4, 26,141,166, 98, 82,246,101,203,150,169,167, 78,157, 42, 58,116,232, 80,134, 74,165, 26, + 93, 7,237,244,195,135, 15,155, 40, 20, 10,177, 74,165, 66, 92, 92, 28, 90,181,106,133,194,194, 66, 20, 23, 23,163,164,164, 4, + 58,157, 14,249,249,249,102, 20, 69,105,223,150, 99,205,225,112, 32, 20, 10,193,227,241,242, 26, 53,106, 4,146, 36, 69, 47, 94, +188,104, 72,151,155, 28, 64, 1,151,203, 21, 84, 22, 86, 34,145, 8, 15, 31, 62, 60, 88,139,123, 85,125,227,169,146, 53,178,174, +229, 55, 13,130, 32,214,240,120, 60,161,165,165, 37,191,252, 59,157, 78,199, 55, 55, 55,135,179,179,243, 58, 0, 3,140,228,105, +105,105,105, 9,130, 32,192,231,243, 49, 97,194, 4,220,185,115,231, 88,114,114,242, 71, 25, 25, 25, 40, 42, 42,218, 35,151,203, +223,205,200,200, 0, 69, 81, 72, 72, 72,128,159,159, 95,203,255,211,110,254,227,133, 85, 85,129,213,181,202,123,185, 35, 85,167, +115, 85, 71, 23,225, 75,208,233,116,178,192,192, 64,186, 92,140,149,143, 34, 4, 64, 80, 20, 5, 62,159,255, 18,103,153,192,106, + 80, 3, 23, 10,133, 24, 48, 96,128, 72, 34,145, 28, 63,121,242,228, 59, 0, 46, 53,180,146, 78, 28,217,103,187, 98,193,188, 5, + 22,246, 77, 92,191,254,250,107,110,255,254,253, 47, 30, 56,112,160,181, 85,167, 30,253, 66,255, 56,104,187,105,206,137,223, 15, + 30, 60, 88, 8,227,227,175, 0,224,250,177, 99,199, 20, 95, 78,155,194,239,218,181,235,175, 99, 90,204,226, 42, 4,180,137,133, +144,207,145,112,184,164,176, 81,227,126,127,132,132, 42, 1,132, 26,113,145, 80, 92,188,120, 17,102,102,102, 0, 32,208,106,181, + 48, 51, 51,195,166, 77,155, 68,114,185, 28,114,185, 28, 29, 58,116, 48,231,243,249,117,117, 23, 86, 22,188, 54, 87,174, 92,129, + 76, 38, 67,113,113, 49, 52, 26, 13, 12, 6, 3, 24,134,169,120,114,236,214,173,155, 77, 61,246, 55,174,160,160,160,203,148, 41, + 83, 66, 55,108,216, 96,237,234,234,138, 69,139, 22, 33, 59, 59, 27,137,137,137, 24, 61,122,116, 65,124,124,124,119,188, 28,155, +245,198,225,227,227,195, 92,187,118, 13,103,206,156,193,160, 65,131,136, 19, 39, 78,232, 40,138,226,167,166,166, 62, 72, 77, 77, +125, 35,101, 50, 24, 12, 38, 2,129, 0,122,189, 30, 92, 46,183,162, 11,191, 92, 96, 57, 56, 56,224,194,133, 11,220,146,146, 18, +110,118,118,182,100,251,246,237,211,194,194,194, 20, 0, 62,120,147,117,185,113,227, 70,231, 9, 19, 38, 36,114,185, 92,166, 95, +191,126, 31,190,120,241, 98,136, 66,161,248,227,242,229,203, 63, 0,168,119,186, 2,111,111,239, 48, 14,135,227,168,215,235,249, +199,143, 31,215, 83, 20,197,247,241,241, 73,175,156,232,175,172,190,146, 99, 99, 99, 3,140,225, 83,169, 84,252, 45, 91,182,232, +213,106, 53,191, 69,139, 22, 21, 92, 58,157,142,255,219,111,191,233,245,122, 61,191,121,243,230, 97,198,140,108,206,201,201, 25, + 61,115,230,204,171, 7, 15, 30,180,226,112, 56,120,241,226, 5,114,114,114, 96,102,102,134,189,123,247,162,113,227,198,184,120, +241, 98, 14, 69, 81,159,108,219,182,109,190, 74,165, 26,109, 68, 12, 86,183,182,109,219, 58,231,229,229,193,212,212, 20, 69, 69, + 69, 8, 11, 11,131,151,151, 23, 82, 83, 83, 65,146, 36,204,204,204,176,113,227,198, 18,130, 32,114,222,134,115,136, 36,201, 10, + 33, 84, 73, 16,169,219,182,109,139,235,215,175,239,171,167, 40,210,150, 95,127, 42,119, 13, 10,133, 66,112, 56,156,122,119,121, +208, 52,205, 7,208,178,252,134, 94,215,242, 91,128,174, 82,169,148, 95,245,203,220,220, 92,190,187,187,123,231,122,220, 31, 45, +197, 98,113, 41, 97,215,174,200,200,200,160, 92, 92, 92, 70,140, 24, 49, 66, 15, 0, 19, 39, 78, 28,145,153,153,169,214,235,245, + 28, 46,151,139,204,204, 76, 52,109,218,212,242,255,177,127, 85,181,200, 63, 93, 96, 17, 40,237,238,168,252, 94,225, 96,213,229, + 92,149,175, 43, 23, 74,117,156,104,121,225,225,225, 82,169, 84, 90,241,157, 94,175, 71,203,150, 45,105,154,166,137,170,219,122, + 21, 7, 75, 40, 20,194,204,204, 12, 31,124,240,129, 36, 37, 37,101,215,189,123,247, 28,141,249, 95,105, 12,214,203,226,106,243, +242, 69,235,126, 94,177,196,242,217,153,157,216,182,118, 21, 37,149,202, 34,252,252,252,186,228,231,231,107,204,164, 26,164,101, +227, 8,128, 95,234,115,205, 1,112,240,230,205,155,145,125,250,244,185,249,252,249,115,243, 23, 79,159, 94,147,107,139,138,100, +141,154, 24,248, 54,182,131, 85, 58, 61,119,216,176, 97,182, 0,214, 26,241, 52, 2,154,166,113,234,212, 41,152,152,152, 64, 46, +151,195,204,204, 12,229,226,170,161,136,143,143, 71,114,114, 50,164, 82, 41,164, 82, 41,100, 50, 25,100, 50, 25, 4, 2,193, 75, +238, 99, 61, 16, 83, 80, 80, 48,227,232,209,163, 7,130,131,131,145,155,155,139,226,226, 98, 44, 88,176, 0,113,113,113, 51, 81, + 26,147,245,214,160, 69,139, 22,204,141, 27, 55,112,237,218, 53, 20, 23, 23, 99,221,186,117, 80, 40, 20, 61, 0,124,251, 38,203, + 69,211, 52,191, 60,213, 9, 73,146,127,113,176,202,197,150, 88, 44,134,149,149, 21,230,205,155,199, 31, 60,120,112,224,155, 44, +243,138, 21, 43,154,173, 89,179,102,251,238,221,187,207,140, 30, 61,250,208,195,135, 15,199,153,154,154, 62,184,116,233,210, 18, +161, 80, 72, 55,232,226,197,229, 58, 70, 70, 70, 86, 22,249, 60,138,162, 36, 20, 69,193, 96, 48, 64,175,215,163,164,164, 4,189, +122,245, 50,154,239,206,157, 59, 18, 0,248,246,219,111,121, 0, 36, 52, 77,163, 50,159, 74,165,226,245,236,217,211,168,107,137, + 82,169,140,185,125,251,118,231, 17, 35, 70,220, 56,112,224,128,185,179,179, 51,146,147,147,145,154,154, 10, 87, 87, 87,172, 93, +187,182,152, 97,152,142,101,162,234, 55, 35,119,219,222,220,220,156,151,152,152, 8,131,193, 0,127,127,127,108,220,184, 17,239, +191,255, 62,188,189,189, 81, 88, 88,136,168,168, 40,236,218,181,203,156,207,231, 15,125, 27,196, 85,185, 8,170,238,213,192, 7, + 12,185, 72, 36, 42, 16,137, 68,130,114,161,117,247,238,221,122,187, 87,149, 16, 89,207,229, 55,134,242,107,176, 94,255,242,110, + 74,165, 82,184,185,185, 25,205, 35,149, 74,137,242,123,172, 94,175,135, 82,169,164, 30, 62,124, 88, 33, 80, 21, 10, 5,117,235, +214, 45, 74,163,209,112, 76, 76, 76, 0, 0,102,102,102,127,183,200,172, 81,139,252,211, 29,172,208, 42,239, 21, 14, 86,185,224, +169, 45,200,157,203,229, 26, 43,176,192,225,112,112,246,236, 89,200,100, 50,152,152,152,192,195,195,163,220,133,169,214, 21,107, +168,192, 18, 8, 4, 48, 53, 53,197,249,243,231,213,247,238,221,155,208, 80,231,106,243,242, 69,235,150,125,191,208, 50, 59,250, + 38,146, 83,149,200, 78,215,133, 93,127,152,112, 14,165, 9, 70,129,104,207, 16,194,235,177,209,226,202,195, 74,236, 39, 55,151, +255,214,189,119, 63,135, 33, 99,166,144, 83,167, 78,109, 63,118,236,216,156, 15, 63,252,112,186, 88, 44,246, 54, 24, 12,185, 23, + 67, 66, 18,134, 15, 31,110,153,159,159, 63, 22, 70,196, 36,113, 56, 28,101,159, 62,125, 26, 1,128,137,137,137,118,199,142, 29, + 2, 51, 51, 51,140, 26, 53, 74,157,150,150, 38, 42,171,143, 92, 99,221,171,178,155, 77,198, 39,159,124, 98, 83, 71, 29,103,212, +179, 74, 91, 6, 6, 6,110, 61,120,240, 32,178,179,179, 81, 92, 92, 12, 62,159,143,149, 43, 87, 34, 49, 49,241,167,152,152,152, +135,111,203,197,204,215,215,151,185,117,235, 22, 30, 60,120, 0,141, 70,131, 9, 19, 38, 0, 0,161, 84, 42, 1,160,207,155,238, + 41, 72, 73, 73,193,222,189,123, 65, 81, 20, 70,143, 30,141,198,141, 27, 87, 8,172,180,180, 52,236,216,177, 3, 20, 69,225,147, + 79, 62,129,147,147, 19,244,122,189,168,107,215,174,220, 55, 53,162,116,214,172, 89,207,142, 29, 59,118, 38, 41, 41,169,255,242, +229,203,187, 18, 4, 65,207,158, 61,123,153, 92, 46,127,165,209,151,185,249,133,120,242,244, 5, 12, 6, 67,181, 47,107, 43,139, +122,243,197,198, 37,194, 96,160, 42, 56, 40,234, 79, 62, 75,139,250,241, 41,149,202,146,236,236,236,226, 79, 62,249,196,108,235, +214,173,132,155,155, 27,158, 63,127, 14, 30,143, 7, 19, 19,147,146, 39, 79,158,212, 55, 53, 67, 74, 78, 78,142, 27,135,195,225, + 63,125,250, 20,206,206,206,104,211,166, 13,150, 46, 93,138,204,204, 76, 24, 12, 6,216,216,216,208,122,189, 62, 66,167,211,133, +190,233,243,168,170,115, 85,254, 42,115,174, 72, 0,191,227,175,129,227,117,186, 88,149, 29,172,134,186, 87,127,163,168,252,219, + 70, 38,186,185,185,133,200,229,242,192,199,143, 31,191,228, 98,125,240,193, 7, 58, 87, 87,215,171,198,242,200,229,242, 92,129, + 64, 96,169, 86,171,113,243,230, 77,120,120,120,240,243,243,243,131, 81,154,244, 26,191,253,246, 91,112,122,122, 58,223,193,193, + 1, 0,224,238,238,142,252,252,252,220,255, 67,245,253, 69,139,252, 27, 4, 86,181,182, 92,213, 46,194,218, 68, 86,121, 66,210, +186,156, 22,149, 74, 85,225,136, 72,165, 82,208, 52,253, 82,119,100, 85,129, 85,205, 40, 66,163, 79,236,203,151, 47,171, 55,111, +222, 60,172, 66, 12, 25,129,202, 49, 88, 91,126, 92,178,162, 92, 92,221,191,118, 1,191, 61,206,207,154,189,244,199, 53, 13,173, +108, 79, 43,137,175,173,173,229,149, 31, 87, 46,147,167,220, 62,131, 67,155,127,100,238,223,185,211,122,242,157, 59, 67, 39, 79, +158,108,129,210,120,171, 20, 0,215, 80, 58,220,220,168,128,239,219,183,111, 59,149,127,110,221,186,181, 94, 46,151, 67, 38,147, + 33, 51, 51,147, 47,147,201, 68, 33, 33, 33,245,142,117,184,115,231,142,237,107,110,107,205, 7, 13, 26, 20,250,235,175,191, 74, +243,242,242,144,144,144,128,175,190,250, 10,235,215,175,135, 92, 46,199,169, 83,167, 76, 2, 3, 3,175, 60,121,242,164, 3,222, +112,114, 85, 63, 63, 63,230,206,157, 59, 72, 72, 72,128,193, 96,192,144, 33, 67,234,124,120,248, 63, 59, 88,204,204,153, 51,177, +117,235, 86,144, 36,137, 49, 99,198,160,160,160,160, 98,189,133,133, 69,117,235, 56,168,123, 68,233,223,119,161,225,114,153,144, +144,144,229, 93,187,118, 69, 82, 82, 82,255, 86,173, 90,253, 60,110,220,184,148, 87,229, 53, 55, 53,129,159,151, 11, 52, 26, 13, + 52, 26, 13,236,237,237, 81, 88, 88,136,103,207,158, 65,163,209,192,214,198,172,222,124, 45,189,155, 65,171,213, 66,163,209,192, +198,198, 6,197,197,197,120,254,252, 57, 52, 26, 13,172,173,205,235, 67,215,168,111,223,190,151,247,237,219,103,249,203, 47,191, +104,223,123,239, 61,193,162, 69,139, 8,185, 92,142,244,244,244,134, 78, 26, 27,114,237,218, 53,231, 94,189,122,185, 71, 69, 69, + 33, 52, 52, 20, 90,173, 22, 45, 91,182, 68,108,108, 44,218,183,111,143,130,130,130,219,119,239,222,125, 43, 70,185, 84, 21, 86, + 97, 97, 97, 7,249,124, 62, 3,160,161,110, 19, 0, 32, 57, 57, 89,232,227,227,163, 17, 10,133,130, 27, 55,110,236,123, 5,247, +234,245, 63,253,188,250,200,196, 26,209,172, 89,179,153,142,142,142,189,252,253,253, 17, 21, 21,197, 23, 10,133,248,240,195, 15, +117, 3, 6, 12,208,113,185, 92,163, 7,220,136, 68,162,104, 19, 19,147, 46, 26,141, 6, 90,173, 22, 23, 47, 94,132,133,133,197, + 87,129,129,129, 51,148, 74, 37, 82, 83, 83, 5, 66,161,176,194, 37,239,222,189, 59,114,114,114,162,255, 15,213, 87,173, 22,249, +167, 11,172,106,197, 80,101, 7,171,182,238, 65, 99, 5, 22, 73,146,208,106,181,144, 72, 36, 21, 2,171,114,166,248,134,112,214, +232,249, 70, 70,222,136,139,139,251, 1,192,233,134,252,255,240, 47,187, 21,166,116, 73,163,212,219,167,241,228,126, 24,142, 69, +229,101,205, 94,250,227,180,119,134,141, 74,175, 42,200,140,122,242,176,150,248,216,218,148,138,171,236,232,155,120,250, 32, 12, +167,111, 39,135,107,129, 88, 0,223,191,206,131, 90,222,183,254, 54, 65, 40, 20,206, 44, 31, 45, 24, 23, 23,135,209,163, 71,231, + 37, 36, 36, 76, 25, 50,100,200,250,115,231,206,153,155,155,155,227,252,249,243, 38,141, 26, 53, 10, 6,240, 38,187,179,152,240, +240,112,100,103,151, 14,222,236,216,177,227, 91, 37,174, 0, 32, 60, 60,156, 31, 24, 24,248, 7,128, 30,209,209,209,160,105,250, + 70, 68, 68, 68,199,242,245,181,173, 51, 70,191, 21, 22, 22,242, 76, 76, 76,170,189, 89,241,249,124,126, 3, 28,135, 10,206,235, +215,175, 47,251,225,135, 31,142,125,241,197, 23, 79, 95,145,179, 90, 7, 43, 48, 48, 16,106,141, 30,201,233,249, 48, 24, 12, 40, +209,166,191,146,131, 21, 24, 24, 8,149, 90,139, 68,101, 14, 12, 6, 3,138,212, 70, 27, 37,146,222,189,123,159, 59,112,224,128, +221,141, 27, 55,160,213,106,233,176,176,176,231, 19, 39, 78,148,127,252,241,199,150,165,187,220, 32,172,253,224,131, 15,134, 93, +191,126, 61,199,221,221,221,226,238,221,187,200,200,200,128, 94,175, 71,143, 30, 61, 32, 20, 10, 95, 4, 7, 7,243, 97, 68,104, +193,255, 83, 96, 69, 71, 71,151, 11,171, 49,175, 75, 8,149, 59, 88,255, 37,236,219,183, 47,101,199,142, 29, 94, 10,133, 98,205, +135, 31,126,216,221,222,222,158, 20, 8, 4, 33, 92, 46,119, 6, 65, 16, 47,234, 81,119,227,204,205,205,159,113, 56, 28, 78, 74, + 74, 10,158, 62,125, 10, 14,135, 3,134, 97, 4, 42,149, 10,182,182,182,224,112, 56,229,238, 24, 28, 29, 29,169,216,216,216,113, + 96,241,122, 4, 86, 57, 22, 47, 94,140,205,155, 55,227,211, 79, 63,173,245,119,101,105, 1,170,222,136,124, 80, 41, 87, 70,249, + 40,194,160,160,160,151,254, 87,222, 21, 56,101,202,148,151,254,124,252,248,241,234,186, 8, 95,226,172, 9,113,113,113,245, 81, +192, 21,156,229, 49, 88,195, 71,143, 81,174, 91,182,224,193,174, 19,127,180, 80,170, 24,229,236,165, 63,206,170, 42,174,140,229, +244,176,149,122, 42,172, 44, 66,126, 88,185,204,180,220, 13, 59, 16,145,150, 15, 3,243,105, 61,143, 87,157,251,206,227,241,148, + 29, 58,116,104, 4, 24,221, 45,104, 84,125,190,106, 57, 53, 26, 13,110,221,186, 5, 0, 24, 63,126,124, 94, 66, 66, 66, 23, 0, +143, 18, 18, 18,162,251,245,235, 23,114,246,236, 89,243,178, 39,250,236, 55, 89, 78,160,116, 68, 43,151,203, 45,143,105, 32, 94, +247, 49,122, 29,229, 84, 42,149,159, 78,154, 52,105,179, 70,163,225, 22, 23, 23,127,106,236,186,186,202,121,248,240,225,167,110, +110,110, 93, 81,115, 42, 6, 26,192,205, 87,225, 92,179,102, 13, 0,184,191, 10,103, 77, 14,214,193,131, 7, 65, 81, 20, 28,109, + 77,161,209,104, 80, 57,222,211, 24,206,170, 14,214,161, 67,135, 64,211, 52,156, 20, 22,208,104, 52,181,197, 30,190,196,105,105, +105,249,227,238,221,187, 29,163,163,163,145,146,146,130,213,171, 87,191,200,204,204, 28,192,229,114,133, 63,255,252,243,149,129, + 3, 7,218, 26, 12, 6, 77, 3,218,146, 70,167,211,141,235,208,161,195,158, 37, 75,150,196,123,120,120, 52,234,208,161,131,121, + 78, 78, 78, 70,100,100,100,194,230,205,155,101, 6,131, 97, 28,106,238,122,250,191,157, 71, 0,144,154,154,122, 2,165,233,107, +234, 43,172,234, 44,231,157, 59,119, 14,149,113,159, 54,146,251,255,178,239,175, 97,100, 98,173,229, 28, 63,126,124, 50,254,154, +223,172, 94,229,188,112,225, 66,194,136, 17, 35, 22,251,248,248, 4,201,100, 50,196,196,196, 84,164, 69, 42,127, 64, 39, 8, 2, +195,135, 15,199,228,201,147,113,254,252,249,197,195,135, 15, 79,248, 63,212,231,127, 67, 96, 81, 20,149,148,144,144,160,216,189, +123, 55,135, 32, 8,236,221,187, 23, 85, 3,107,203,223, 1,224,214,173, 91, 6,134, 97,158,213,182, 49,138,162,146,194,194,194, +108,119,238,220,201, 19,139,197, 16, 10,133, 72, 77, 77, 5, 77,211,116,122,122, 58,185,111,223,190,151,130,117,111,222,188,105, +208,233,116,137,111,170,114,174, 70,189,152,113,246,212, 49,171,246,237,186,228,201, 45, 44,170, 21, 42,135,215,120,128,240,170, +221,197,146,154,200,151,253,176,114,153, 89,185,184, 58, 24,145,150,167,214, 80,221, 31,103,169,238,191,238, 50,223,184,113,195, +233, 45,109,107, 11,186,118,237, 74, 3,176, 2, 48, 31,165,206, 29, 0, 60,122,254,252,121, 59, 55, 55,183, 47, 80, 58,241,245, +130, 55,233, 94,209, 52, 93,217, 57,125,107,131, 44, 35, 34, 34,226, 1,244,172,239,186,186, 48,124,248,240, 56,188,250,116, 51, +127, 59,103, 57,114,242, 10,240,236,121, 74,217, 84, 94, 20,168, 23,105,149,226,167,244,200, 41,168, 95, 26,185,220,252, 66, 60, +123,158, 12,154,102, 74,249,168,148,138, 32,119,131,193,128,172,188,186,123,237,185, 92,110,167,160,160,160, 1, 36, 73,146,183, +110,221,210,172, 92,185, 50, 41, 51, 51,115, 48,128,196,178, 24,190,110,199,143, 31,255,197,136,148, 12,149, 57, 9,131,193, 80, +126, 99,142,210,235,245,237,231,204,153, 51, 29, 64, 39, 0, 78, 0, 18, 81, 26, 90,176, 22,111, 81,198,113,130, 32,198,252, 19, +185, 95, 5,255,148,145,137, 7, 15, 30, 92, 56,121,242,100,110,219,182,109,191,110,221,186, 53,249,252,249,115,100,100,100, 84, + 60, 92,246,237,219, 23,206,206,206,244,233,211,167,151,190,247,222,123, 11,193,226,245, 9,172,172,172,172,190, 99,198,140,185, + 64,146,100,147,154, 38,119,174,236, 46,209, 52,157,144,158,158, 94,107, 18,178,172,172,172,190, 11, 22, 44,184,192,229,114,155, + 84,154,204, 89,147,157,157, 61,101,248,240,225, 27,120, 60,158,176,178,219, 69,211,244, 11,165, 82,249,127, 13, 40,174,154, 7, +171,223,192,119,179, 94,149, 83, 42,128, 75,210,173, 83,120,250, 32, 28, 7, 35,210,114, 11,181, 84,183,216,172,146,255,154,242, +207, 0, 48,165,134,117, 79, 1,124,250, 22,148,145, 40,139,249, 35,216, 75,195,219, 15,131,193,144,220,171, 71, 55, 84, 77,203, + 80,117,153,162,168,100, 99,249,122,118,239, 90, 35, 79,249,231,186,248, 56, 28,206, 23,109,219,182,229,124,241,197, 23,233,103, +206,156,249, 35, 55, 55,119, 22,128,146, 74, 14, 99, 12,106, 79, 38, 90, 29,167,149,193, 96,168, 60, 7,162, 6,165, 51, 60,172, + 96, 91,194, 91,137,127,196,200,196,141, 27, 55,126, 59,123,246,236, 93,246,246,246,123, 59,117,234,228,238,234,234, 42, 55, 49, + 49, 65, 65, 65, 65, 97, 78, 78,206,147, 83,167, 78,141, 30, 59,118,108, 60,123, 56,223, 78,248,252,211, 56,135,245, 4,195, 68, +121, 48, 76,148, 7, 51,172, 39, 24, 99,150,235,226,108,110, 43,237,218,198, 73, 30,222,194,222,228,174,187,141,212,235,191, 84, +159, 44, 39,203,249, 31,228,116, 18, 8, 4,191,113,185,220, 78,175,145,211, 74, 32, 16, 88,179,199,136,229,252, 59, 57,135, 13, + 27,198, 25, 54,108, 24,231, 13,150,179, 70, 48, 12,211,154, 97,152,129,101,239,229,159,123,149,127,247,127, 44,135,209, 47, 46, + 88,188,132, 35,127,128,168,218,229, 87,215,114, 93,136, 73, 47, 14,169,239, 19, 43, 11, 22, 44,254,177, 72,212,106,181,131, 95, + 51,103,150, 86,171,101,107,150,197,223,123,255, 59,114,132,122,139,139,103, 77, 16,196, 73,134, 97, 2, 1,160,252,115,229,239, +222, 54,144,108,147, 98,193,130, 5, 11, 22, 44, 88,176,120,189, 32, 80,179,205, 87,159, 24,161,134, 88,133, 15, 89, 78,150,147, +229,100, 57, 89, 78,150,147,229,252,207,113,214,197,253,151,255, 51, 12, 51,176, 54, 7,139, 32,136, 83,255, 15,209,244, 54, 77, + 79,201,246,121,179,156, 44, 39,203,201,114,178,156, 44, 39,203,249,170,194,102, 96,233, 27, 51,176,242,231, 74,239,255,175,114, +176, 49, 88, 44, 88,176, 96,193,130, 5,139,127, 13, 84,115,231,206,253,154, 32,136,147, 0, 48,119,238,220,175,223,246, 2,179, + 2,139, 5, 11, 22, 44, 42, 65,161, 80, 12, 2,176, 16,165, 33, 20,193, 74,165,242, 16, 91, 43, 44,254, 77,176,178,178,146, 90, + 90, 90,254, 65,146,164, 51,240,114,202,165,234,230,255,165,105, 90,153,147,147,211, 39, 61, 61, 61,235,255,201, 89, 5, 55,130, +131,131, 75,130,131,131,203, 3,218, 51, 1, 16,101, 93,134,153,255, 10,129, 53,167,119,227,206,246, 14, 14,251,242,178,179, 35, + 52, 37,133, 31, 7, 95, 74,205,105,224,182, 45, 5, 2,193, 8,169, 84,218,139, 97, 24, 23, 14,135,243, 56, 63, 63,255,162, 94, +175, 63, 0,160,136, 61, 5, 88,188,105,248,249,249,181, 16, 8, 4, 95, 17, 4,209,206, 96, 48, 56,242,120,188, 84, 0,183, 53, + 26,205,202,200,200,200, 8,182,134,254, 53, 32, 21, 10,197, 79,102,102,102,109,243,242,242, 70, 3,248, 58, 38, 38,198,151, 36, + 73,120,121,121,125,173, 80, 40,158,153,152,152,108, 43, 44, 44,188,161, 84, 42,103,160,129,211,250,176,120,187,224,226,226, 18, + 70,146,164, 99,229,233,218,170, 10,130,170,239, 12,195,196, 71, 71, 71,119,168,137,211,193,193,193, 69, 46,151,111, 0,208,186, + 58, 81, 81, 25,101,177, 60,119, 11, 10, 10,166,164,164,164, 84,155,136,215,220,220,220,196,198,198,102, 33, 65, 16,195, 73,146, +172, 51,125, 2, 77,211, 20,195, 48,135, 51, 50, 50, 22,228,230,230, 22,214,120,243,181,180,188, 24, 26, 26,218,218,202,202,170, +206,156,127, 6,131, 1,201,201,201,214,129,129,129,161,233,233,233, 30,255, 79,206,202, 32, 8, 66,139,210,185, 27,255, 49,168, +183,192, 34, 40,124,248,241,132, 49, 14,121, 73, 49, 14,187, 15,156,109,254,117, 31,110,183,165,231, 19,211,234,195, 33, 18,137, + 70,184,186,186,174, 93,187,118,173,101,147, 38, 77, 8,177, 88, 12,165, 82,233,113,239,222,189,119,131,130,130, 22, 36, 39, 39, +143, 51, 24, 12, 23, 94,113,223,204, 44,100,220,175,114,138, 12,243,216, 75, 9,139,250, 96,216,176, 97,156,164,164,164, 32,185, + 92,254,229,156, 57,115,132, 77,155, 54,133, 76, 38, 67, 70, 70,134, 83,108,108,108,163, 13, 27, 54, 12,106,223,190,253,207,124, + 62,255,155,144,144, 16, 3, 91, 99,255,108, 40, 20,138,159, 66, 67, 67, 63,179,183,183, 71,199,142, 29,111,180,108,217, 82, 46, +145, 72,112,230,204, 25,184,184,184,120,155,154,154,222,222,180,105, 19,111,225,194,133,126, 71,143, 30,133, 82,169,156,198,214, +218,191, 64, 85,147,164, 99, 68, 68,132,141, 68, 34, 1, 69, 81,101,179, 1,208, 96, 24,166,226,189,178, 24,162, 40, 10,221,187, +119,215,213,113,111, 91,255,224,193,131, 94,229, 51,156, 84, 18, 82,213, 34, 53, 53,181, 87,247,238,221,215, 3,168, 54,161,182, +141,141,205,194,247,223,127,127,166,183,183,119,197, 84,115, 52, 77, 87,188,103,101,101, 97,234,212,169, 21,219,160,105, 26,161, +161,161,211, 63,255,252,115,228,230,230,126, 94,203,190, 59, 91, 89, 89, 17,117, 77,129, 23, 20, 20,132,160,160, 32,172, 93,187, +150,224,114,185,102,117,212,231,107,231,252,167,163,254, 2, 11,204,233,211, 71, 14,125, 28,216,213,157, 24, 59,216,223,237,151, + 19, 97, 55,231,244,108,210,101,249, 31,207,147,140, 20, 87,211, 39, 77,154,180,108,209,162, 69,162, 39, 79,158, 32, 42, 42, 10, + 6,131, 1, 50,153, 12, 45, 90,180, 32, 79,159, 62,173,152, 62,125,250,145,171, 87,175,142,215,233,116, 71, 27,186, 99,118,230, +156,149, 82, 49,103, 84,145,138,185,173,163,168, 19,111, 99,229,183,105,211,230,188, 94,175, 95, 30, 25, 25,121,249,159,210, 96, +252,253,253, 59,242,249,252, 5, 2,129,160,223,191, 85, 92,188,120,241, 98, 65,231,206,157,191, 12, 10, 10, 18, 62,127,254, 28, + 49, 49, 49, 80, 42,149,104,210,164, 9,154, 52,105, 66,172, 93,187, 86,244,243,207, 63, 79,187,119,239, 30, 9, 96,118,125,174, +233,118,118,118,159,244,236,217,115,168,149,149,149,105, 74, 74, 74,254,245,235,215,127, 83, 42,149, 91, 80,247,156,145, 53,114, + 90, 89, 89,141, 13, 12, 12, 28,106, 97, 97, 97,161, 84, 42,115,254,248,227,143,223, 50, 50, 50,182,189,162,211,162, 0,224, 11, +192,178,108, 89,217,184,113,227, 71, 9, 9, 9, 25,175,145, 51,181,113,227,198, 81, 13,225,180,178,178,146,114,185,220, 67, 4, + 65,216,215,226, 16,164, 26, 12,134,247,179,178,178,138,107,227,146,203,229,237, 20, 10, 5,110,223,190,141,249,243,231, 91,116, +239,222, 29,177,177,177, 32, 73, 18, 95,126,249, 37,225,229,229,197, 75, 75, 75, 67, 64, 64, 0, 46, 94,188,216,161,108,186, 27, + 22,198,225, 48, 0, 51, 0, 31, 0,168,220, 21,100, 5,224, 56, 74,103,120,120,239, 77, 21, 78, 44, 22, 99,255,254,253,224,241, +120,224,243,249,200,205,205,133,131,131, 3,248,124, 62,120, 60, 94,197,139,207,231,163, 81,163, 70,117,242,209, 52,221,134,195, +225,160,168,168, 8, 20, 69, 85, 76,179,148,159,159, 15,134, 97, 32, 16, 8, 42,190, 47, 95, 71,211,116,155, 90, 92,155,225,246, +246,246, 56,112,224, 0,170,203,131, 38,151,203,241,240,225,159, 3,238, 56, 28, 14,252,252,252, 72,130, 32,134, 3,248,188, 22, + 94, 6, 0, 38, 76,152,240,210,244,116, 85, 95,229,115, 7, 51, 12, 83,121, 10,177,255, 27,231,191, 90, 96,205,237,209,100,138, +183,191,223, 74,129,128, 39,166, 41, 61,104,131, 30,180, 94, 11,154, 54, 32,254,133, 18, 46, 54, 2,140,239,239,234,188,231,124, +236,195,121,189,155,181, 13,190,240, 52,166, 10, 69,213,161,150,141,189,189,189, 23, 46, 89,178, 68,244,199, 31,127,224,201,147, + 39, 88,186,116, 41, 0, 64, 42,149,226,204,153, 51,160, 40, 10, 63,254,248,163, 73,191,126,253, 54,164,166,166,134, 0,200,169, +131,179, 58, 56, 55,107,170, 24,124,116, 85, 23,161,247,187, 71,214,164,229, 80,167, 0,212,150, 64,237,239,152,182,166, 78, 78, +131,193,208,155,199,227,117,104,217,178,229, 32, 35, 69,214, 27, 41,103,101,113,197,227,241,206,234,116, 58,137, 64, 32,224,214, + 34, 10,222,104, 57, 95,133,211,207,207,175,133, 92, 46,255,114,193,130, 5,194, 91,183,110, 33, 55, 55, 23, 25, 25, 25,152, 49, + 99, 6, 54,110,220, 8,111,111,111, 72,165, 82, 76,155, 54, 77, 52,117,234,212, 41, 1, 1, 1,135,195,194,194,194,140, 40, 39, +217,181,107,215,253,123,247,238,109, 98, 48, 24, 72, 0,208,235,245,230, 47, 94,188, 24, 51,111,222,188,174, 17, 17, 17, 31, 52, +160, 62,201, 14, 29, 58,236,253,229,151, 95, 92, 5, 2, 1, 89,118,177,182,254,232,163,143, 62,254,230,155,111,186,135,135,135, +143,170,165,221,215, 86,159, 45, 37, 18,137,231,148, 41, 83,178, 6, 15, 30,156, 2, 0,225,225,225, 68,100,100,100,199, 49, 99, +198, 36, 4, 5, 5, 69, 54,128,179,149, 68, 34,113,255,236,179,207, 50, 7, 12, 24,144,202,231,243,233, 91,183,110,113, 30, 62, +124,216,233,147, 79, 62,137,251,230,155,111,238,215,135,147,199,227, 29, 60,122,244,104, 87, 7, 7, 7, 10, 40,157, 77,129, 32, + 8,134, 32, 8,134, 36, 73,134, 36, 73,196,197,197, 53, 30, 54,108,216, 62, 0,239,212,198,153,151,151, 55,166, 83,167, 78,161, +243,231,207,183, 0,128,208,208, 80,112,185,220,138, 27,194,147, 39, 79,160,209,104,176,118,237, 90, 93, 97, 97,225, 39,255,182, + 54,255, 55,115, 54, 2,208, 6,192, 37, 0, 61,202, 68,150, 21,128,203, 0,188, 0, 92,127, 83,229, 36, 73, 18, 20, 69, 85,136, +168, 11, 23, 46, 96,227,198,141, 56,112,224, 0, 28, 28, 28, 94, 18, 88, 60, 30, 15, 53,116,249, 61,172, 34, 50,202,175,237,160, + 40, 10,119,238,220,193,182,109,219, 96, 99, 99, 3, 43, 75, 75, 88, 89, 91,163,109,219,182, 40,119,205, 40,138,170,142,247, 37, +206,172,172, 44,208,180,113,207, 74, 12,195,160,160,160,192,232,250,172, 77, 8, 85,126,213,231, 24,189, 34,231,127, 71, 96, 41, +236,172,190, 25, 54,180,183, 24,148, 1,208, 21, 3,186, 18, 48,186, 18, 48,218, 98, 16, 2, 49, 24,189, 26, 82, 78, 54, 62,237, +105, 43, 63,114, 51, 61,122, 78,119,167,129,203, 47, 39,158,173,229, 73,241,219,205,155, 55,155, 62,120,240, 0, 49, 49, 49, 88, +189,122, 53, 22, 45, 90, 84,241,228,240,206, 59,239,224,198,141, 27,208,106,181,152, 63,127,190,197,156, 57,115, 62, 43, 44, 44, +172,247, 36,147,118,150,220,141,135,246,172,181,176, 16,103, 97,252,224,187,150,235, 15, 37, 76,201, 47,214,255,252, 54, 30,128, + 57,115,230, 72, 86,172, 88,241,123, 61, 68,214, 27,115,174,132, 66,225,217,111,191,253, 86,250,237,183,223, 82,175,137,211,155, +203,229, 30,212,235,245, 95, 68, 70, 70,158,107, 0,133, 83,235,214,173,151,198,196,196,156, 45, 44, 44,252,165,234, 74, 62,159, +255, 78,171, 86,173, 70,223,188,121,243,107, 0,207,140, 33, 20, 10,133,211,191,252,242, 75, 81,114,114, 50,242,242,242, 32, 20, + 10, 95,186,184, 9,133, 66,144, 36, 9,129, 64,128,143, 62,250, 72,180,125,251,246, 89, 0, 70,214,217, 38,237,236, 62,217,179, +103, 79, 19,157, 78, 71, 22, 23, 23,131,207,231,131,207,231,163, 69,139, 22,156,217,179,103, 55,154, 57,115,230,164,244,244,244, +117,245,217,121,115,115,243, 49,123,247,238,117, 21, 8, 4,164, 82,169, 68,199,142, 29,113,251,246,109,180,109,219,150, 51,123, +246,108,167,105,211,166, 77,204,204,204,220, 88, 95,151, 73, 34,145,120,135,134,134, 38,217,219,255,105, 14, 53,105,210,132,233, +223,191,127, 78, 76, 76,140,123,120,120,120,118,171, 86,173,146,234,193,233, 32,145, 72, 60,206,157, 59,167, 92,180,104, 81,207, +141, 27, 55, 14, 46,115,112, 79, 44, 93,186,244,143,236,236,108,175,219,183,111,103,183,109,219, 54,165, 30,156,150,118,118,118, +134, 41, 83,166,152, 84, 93,177, 96,193, 2, 44, 92,184, 16,187,118,237,202, 6, 96, 83,235,206,150, 5,180,123,123,123,203,123, +244,232,129,208,208, 80, 76,155, 54, 77,163,215,235, 99, 1,160, 87,175, 94,205,131,130,130, 4, 17, 17, 17, 48, 55, 55,231, 41, +149,202, 29, 10,133,130, 13,124, 55, 30,131, 1, 92, 1,224, 93, 38,178,222, 7,112, 4,128, 39,128, 24, 0,195,222,100,225,202, + 5, 86, 74, 74, 10,182,111,223,142,165, 75,151,194,205,205, 13, 58,157, 14, 92, 46,183, 66, 92,113,185, 92, 16, 4, 1,134, 97, + 8, 99,121,239,222,189,139, 61,123,246, 96,254, 55,223,192,196,164,180,153,234,116, 58,228,228,230, 66, 36, 18, 85,136,176, 58, + 4,211,225,167, 79,159,206,116,112,112,168,232,166,172,220, 69, 8, 0, 50,153, 12, 52, 77,195, 96, 48, 64,163,209, 96,235,214, +173, 6,134, 97, 14,215,225, 54, 85,136,161,207, 63,255, 28, 26,205,159,243,131,251,250,250,150,186, 33,141, 27,195,207,207,175, + 98,185,220,161, 50,134,115, 91,199, 22, 80, 85,250,181,123,208, 42, 0,128,163,163, 35,220,221,221,161, 80, 40,140,226,252,183, + 8,172,242, 9,110, 95,154,232, 54, 45, 45, 99,249,174, 77, 59, 86, 9,120, 36,175, 87, 7,119,152, 11, 13, 32, 36, 22,224,119, +157, 11,194,204,185,244,143, 57,113,208,158,155,139,247,253,178,200, 61, 26,206,241,160,126, 46,214, 65,103,227,170, 13,174, 35, + 73,178,157,147,147, 19, 66, 67, 67,209,164, 73, 19,124,251,237,183,240,240,240,128, 68, 34, 65,122,122, 58,138,139,139, 33,149, + 74, 65, 81, 20,252,253,253, 57, 38, 38, 38,221, 27, 32,176,252, 7,244,104,213,134, 43,247, 64,199,126,237,113,126, 67, 87,233, +174,147,169,243,242,139,245, 59, 80,105,194,213,183, 5, 67,134, 12, 65,122,122,186,100,239,222,189, 13, 22, 89,109,218,180, 57, +111, 48, 24,122, 27, 97,135, 95,190,118,237, 90,143,134,138,171,237,219,183, 75,205,204,204, 80, 87,240,102, 61,196,213,181, 49, + 99,198,200,247,238,221,123,172,101,203,150,239,214, 83,100, 57,189,255,254,251,167,182,109,219,230, 49,112,224, 64, 89,104,104, +232, 95, 4,150,183,183,247,144,243,231,207,191, 59,121,242,100,239, 95,126,249,101, 16, 74, 39,149,174,203,230,238,208,180,105, + 83, 36, 38, 38, 34, 61, 61, 29, 26,141, 6,233,233,233, 0,128,228,228,100, 56, 58, 58,194,220,220, 28,142,142,142,104,222,188, + 57, 65,146,100, 91, 99, 10,219,189,123,247,193, 0,200,184,184, 56,100,102,102,194,212,212, 20, 82,169, 20, 14, 14, 14,232,209, +163, 7,215,213,213,117, 64,125, 5, 86,255,254,253,135, 74, 36, 18,242,197,139, 23, 72, 72, 72,128, 70,163, 65,108,108, 44, 76, + 77, 77,209,171, 87, 47,158,171,171,107, 96, 3, 4,150,207,196,137, 19, 51, 42,139,171,114, 72,165, 82,194,221,221, 61,199,204, +204, 44, 0, 64,125, 4,150,207,180,105,211,210,131,131,131,187, 92,188,120,113, 78,249,151, 23, 47, 94,252, 10, 0,214,173, 91, + 23,106, 97, 97, 17, 0,160, 62, 2, 11, 12,195,208, 31,127,252,241, 83,129, 64,128,242, 87,185,112, 93,181,106, 21, 72,146, 52, + 53,130,230,235,152,152, 24, 95,153, 76,134,152,152, 24,112, 56, 28, 16, 4,241, 84,169, 84,250, 2,128,141,141,205, 51,181, 90, +237,162, 86,171, 49,108,216, 48, 98,224,192,129, 45, 86,175, 94,253, 13,128,183, 69, 96,181, 6,240, 35, 0, 45,128,111, 0,220, +126,203, 46,113,233, 0,186, 85, 18, 89,145, 0,132,101,226,170, 91,217,250, 55, 2,130, 32, 64,211, 52,184, 92, 46, 86,173, 90, + 5,157, 78,135, 95,126,249, 5, 71,142, 28, 1, 73,146, 32, 8, 2, 4, 65, 64, 46,151,227,167,159,126,170, 88, 54, 6, 6,131, + 1, 59,119,238,196,220, 57,115, 42,196, 85,217, 67, 31,236,108,109, 97,105,101,133,184,184,184, 58, 5, 86, 70, 70,198,130, 59, +119,238,160,182, 32,247,247,222,251,179,135,181,114,144,187, 49,229,228,112, 56,208,104, 52,232,221,251,207,219,199,103,159,125, + 86,241, 57, 55, 55,183,252,156, 0, 97,228,206,115, 56, 28,168, 24, 96,136,232,207,239, 6,124,241,197, 75,142, 92, 45,156,213, +106,145,127,165,131, 37,232,244, 98,221,243, 27,164,223,240,192,246, 99, 45,228, 98,208,133,169,224,247, 12,194,131, 28, 9,214, +108, 42,189, 23,206, 28,230, 15,159,222, 75,160,217,209, 7, 61, 26,107, 5, 59, 34,196,179, 1,124, 91, 29,159,149,149,149,149, +193, 96, 0, 73,146,144, 74,165,176,176,176,128, 88, 44, 70, 86, 86, 22,166, 79,159,142,179,103,207, 66,171,213,130,207,231,163, +105,211,166,208,233,116, 46,245,118,175,204,185,219, 86,175, 90,106,150, 29,183, 15,225, 79,242, 32, 49,117,196, 55, 19, 3,204, +131, 54,132, 45,200,204, 45,249,234,109, 60, 8, 94, 94, 94,152, 49, 99,134,228,231,159,127,110,144,200, 50, 24, 12,139,185, 92, +110,199, 47,190,248, 66, 60,108,216, 95, 31, 8,163,162,162, 48,105,210, 36, 85, 73, 73,201,247, 13, 17, 87, 2,129,224,236,182, +109,219,164,166,166,166, 72, 76, 76,124,109,226,106,237,218,181,114, 23, 23, 23,240,120, 60,209,206,157, 59,235, 35,178,154,191, +247,222,123,167,183,109,219,230, 60,113,226,196,228,208,208,208, 4,148, 14,171,127, 9, 17, 17, 17,185, 99,199,142,125,177,107, +215, 46, 87,154,166,207,237,223,191, 63, 16, 64,116, 29,117,233, 36,145, 72,144,149,149,133,153, 51,103,190, 20,160, 90,222,157, + 13, 0, 49, 49, 49,112,116,116,132, 90,173,118, 48,102,159, 45, 44, 44,204, 25,134,193,132, 9, 19,144,148,244,167, 54,113,112, +112, 64, 82, 82, 18, 12, 6,131, 69,125,235,209,220,220,220, 66,175,215,163,107,215,174, 80,171,213, 0,128,247,223,127, 31, 60, + 30, 15, 25, 25, 25,208,233,116,150, 13, 56, 60, 86, 3, 7, 14, 76,173,105,165, 84, 42,213,155,155,155, 55,174, 39,167,101, 96, + 96, 96,202,230,205,155,171,118,213,225,206,157, 59,239,152,154,154, 94,180,176,176,112,111, 64, 89,105,161, 80, 8,161, 80, 8, + 30,143, 7,129, 64, 0,161, 80, 8,129, 64, 0, 30,143, 7, 14,135, 99, 84,191, 10, 77,211, 56,117,234, 20, 72,146,124,169,235, + 98,254,252,249,159, 74, 36, 18,219,144,144,144,138, 7,192,162,162, 34, 52,107,214,172,105,211,166, 77,239,165,165,165, 37, 68, + 71, 71,191,251,134, 47, 31, 43, 1,148,143,106,219, 8,192,239, 45,188,196,165, 3, 24, 14, 32,172, 76, 92,105, 1, 12,125,147, +226,170,242,177,231,114,185, 21,231,185, 72, 36,130,191,191,127,133,152, 34, 8, 2, 37, 37, 37, 21, 93,132,198, 58, 88,249,249, +249, 80, 40, 20, 48, 49, 49, 65, 51, 55, 55, 60,141,141, 5,128,138,207, 2,129,160, 66,136,213,134,220,220,220,194,178, 96,245, +207, 95,179,184,100, 0,128,203,173, 61, 12, 91,161, 80,128,166,233,114, 97,201,188, 14, 78, 43, 43, 43, 20, 21, 21, 25,197,249, +111, 17, 88,127, 81,140, 65, 65, 32, 53, 55,154,108, 31, 62,160,205, 88, 79, 71, 41, 52, 89,113, 16,200, 44, 65,152, 53,198,154, + 77,231, 16,157, 80, 26, 26,181,230, 72, 4,118,205,235, 11, 66, 98, 1,133,234, 9, 76, 68,194,119,107, 18, 88,217,217,217, 69, + 58,157,206, 66, 44, 22,131,203,229,130,207,231, 35, 43, 43, 11,223,125,247, 29, 14, 29, 58,132,198,141, 27,195, 96, 48, 64, 32, + 16, 32, 51, 51, 19,124, 62,191, 94,163, 19, 57, 28, 12,156, 50,182,119, 19,169,165, 27,178, 35, 22,149,126, 41,247,199,196,247, + 57,130, 31,246, 60, 26,147,153, 91,242, 3, 74,131, 42,223, 42,200,100, 50,248,249,249, 97,212,168, 81,146, 95,126,249,101, 55, + 0,199,250,252, 63, 34, 34,226,186,191,191,127,159, 31,127,252,241,188, 82,169, 20,183,108,217, 18, 50,153, 12, 50,153, 12,113, +113,113, 88,180,104,145, 90,163,209, 4, 54,196, 29,227,114,185, 59, 63,254,248, 99,169, 92, 46, 71, 92, 92, 28, 44, 44, 44, 94, +105, 95,253,253,253,189,121, 60,222,181,181,107,215,202, 93, 93, 93,241,248,241, 99,180,106,213, 10,118,118,118,162,224,224, 96, + 99, 69,214,250,125,251,246, 53, 22, 8, 4,196,254,253,251,157,246,239,223, 63,189,174,237,238,217,179,167,241,254,253,251,215, + 2,232,133, 90,130,191,249,124,126,114,102,102,166,107,163, 70,141,176,125,251,118,144, 36,137,212,212, 84,124,243,205, 55, 8, + 14, 14, 70,219,182,109, 97, 98, 98,130, 70,141, 26,225,233,211,167, 16,137, 68, 70, 69, 60,167,164,164,228, 0,176, 57,123,246, + 44, 50, 51,255, 76,217,226,236,236,140,156,156, 28,104, 52,154,236,250,214,101, 74, 74, 74, 54, 0,219,123,247,238, 33, 33, 33, + 1,253,250,245,195,241,227,199, 17, 16, 16, 0,138,162,160,215,235,179, 27,112,136, 40, 14,135,195,212,114, 17, 37, 0,152,215, +147,211, 80, 27,103,217,117,167,190,156, 96, 24,134,169, 73, 92, 9, 4, 2,212,177,205, 10,221,236,225,225,177,176,105,211,166, +158,223,124,243, 13,143,203,229,162, 83,167, 78,205,135, 14, 29,250,130, 36, 73,203,185,115,231, 74,170, 51,131, 1,248,122,122, +122, 74,223,130,203, 71,101,151,238,109, 29,116, 98, 83,230,248, 9, 0,232,202,222, 15,224,207,152,172, 55,234, 96,241,249,124, + 4, 5, 5, 97,242,228,201,176,181,181,197,156, 57,115,192,229,114, 43, 94,229,174, 76,185,171,101,100,219,132,173,141, 77,237, + 39, 90, 89,144,123, 29, 15, 81,127, 75,154,134,114, 49,100, 76, 44, 84, 37,183,201, 40,209,246,138,156,255, 26,247,170,178,192, +122,201,150,171, 16, 87,253, 90,141,245,112, 20, 35, 50,226, 33,124,236,244, 96,120,188, 90, 90,139, 30, 4, 95, 10, 51, 49,215, +177,150, 3, 16,145,144,144,224,108,102,102, 6,157, 78, 7,129, 64, 0, 31, 31, 31,220,188,121, 19, 26,141, 6, 90,173, 22, 66, +161, 16,124, 62, 31,143, 30, 61,130, 78,167, 11,173,143,190,178,146,115,214,126,245,245, 34, 19,164,108,135,153,137, 0,221,219, +185, 2, 82, 79,112,138,159,224,199,249,129, 22,159,126,115,124, 77,122, 86,193,200,183,237, 32,200,100, 50,188,120,241, 2,251, +247,239, 47,209,104, 52, 99, 26,194, 81, 46,178, 14, 29, 58,116,222,204,204, 76,220,182,109, 91,196,198,198,226,251,239,191, 87, +107, 52,154,129, 13,141,239, 50, 24, 12,227,182,110,221,122,214, 96, 48, 72,203,197,197,171, 58, 87,211,167, 79, 55,105,214,172, + 25,158, 61,123, 6, 83, 83, 83,152,152,152,160, 73,147, 38, 80, 40, 20,162,233,211,167, 27, 35,178,166,142, 26, 53,234,244,174, + 93,187,156, 39, 78,156,152,124,224,192,129, 19, 0,242,171,171,218,247,222,123,239,157, 93,187,118, 57,127,250,233,167,137, 0, +166,163,142,145,117, 52, 77,223,120,246,236,153,139,135,135, 7,209,188,121,115, 8, 4, 2, 56, 56,148,154, 84,190,190,190,240, +240,240, 0,159,207, 7, 0, 60,123,246, 12, 48, 50, 47,203,213,171, 87,127,139,137,137,249, 36, 32, 32,128, 99,103,103,247,210, +232,164,224,224, 96,221,139, 23, 47,234, 61,143,214,165, 75,151,142, 63,124,248,112, 66,167, 78,157,184,230,230,230, 16, 10,133, +240,241,241,129, 66,161,192,247,223,127,175,123,254,252,121, 67,230,230, 74,188,119,239,158,200,205,205,141,170,161,173,154, 52, +192,121, 72, 14, 15, 15,231,183,107,215,238,196,153, 51,103,188, 43,175,104,211,166,205, 9,153, 76,102, 10,160, 33, 67,243,232, +202, 93,131,149,187, 10, 5, 2, 1,184, 92,110,157, 14,150, 82,169,252,221,214,214, 54,222,214,214,246,122,135, 14, 29, 76,195, +194,194,240,237,183,223,242, 53, 26,141,211,197,139, 23, 43,110,196,213,221, 64,139,139,139, 69,111,193,229, 99, 38,128,213, 0, + 36, 0,230,188,133,247, 24, 91,148, 6,180,187,163,180, 91,240,253, 50,177, 85, 30,147,245, 70, 69, 22, 77,211,224,241,120,112, +119,119,199,231,159,127,142,229,203,151, 99,202,148, 41,104,214,172, 89,197,177, 47,143,193, 42, 27,241,102,212,141,159,207,231, +195,214,206, 14,122,189,190,194,189, 2,128,167,177,177,224,114,185,160,105, 26, 26,141,166,206, 46, 66, 27, 27,155,133, 43, 86, +172,152,222,191,127,127,178,242,136,187,242,169, 88,202, 83, 75,148,191,244,122, 61,126,255,253,247,233,193,193,193,181,166,105, +168, 44,116,124,125,125, 95,234, 22, 92,183,110, 93,229,107, 54,122,245,234, 85,175,209,126, 28, 14, 7,238, 65,171, 94,234, 22, + 60,109,253,103,181, 53,250,104, 34,154,125,191,182, 38,206,127, 85, 23, 97,181,123,168,187,233,188,100, 88, 95,191,177, 30, 14, + 66,220,139,120,132,147,119,148, 79,178,178,242, 64,167, 63, 4,157,249, 24, 51,135,249,195,179,177, 5, 60, 27, 91, 96,230, 48, +127,208, 25,143,192,228,198,129, 17,153, 35,163,152,168,177,123, 33, 39, 39,103,229,226,197,139,115,205,205,205, 33, 18,137, 32, + 16, 8,144,156,156, 12, 47, 47,175,138,229,178, 39, 79,124,251,237,183,153,153,153,153,155,140,221, 17,169,152,156,184,252,155, +145,182,124,161, 9,144, 19, 10,185, 92,134,237,155, 86, 1,154, 84,128, 20, 96, 80, 47, 63,142,194,214,172, 7,128,230,111,219, + 65, 72, 76, 76, 68, 80, 80, 80,137, 74,165,122,165, 64,247,136,136,136,235, 58,157,174,207,166, 77,155, 84, 39, 79,158,124,101, +113, 85,206,169,215,235,251,237,222,189,187, 56, 49, 49, 17, 50,153,172,193,251,201,231,243,231, 26, 12, 6,249,234,213,171,233, +222,189,123, 83, 83,167, 78,165,198,141, 27, 71,189,247,222,123, 84,175, 94,189,168, 73,147, 38, 81, 26,141, 70, 40,145, 72, 86, +212, 65, 21,115,244,232,209,238,159,124,242,201,227, 45, 91,182, 56,118,233,210,165, 49,128, 5, 85, 95,254,254,254,230,187,118, +237,114,158, 60,121,242,179,253,251,247,247, 69, 29,221,131, 0,160,209,104,214,109,220,184, 81, 77,146, 36,100, 50, 25, 4, 2, + 1,172,173,173, 43,132,112,249,141, 92,167,211, 97,195,134, 13, 42,149, 74,181,198,152,125,207,206,206,222, 62,123,246,236,231, +231,207,159,215,151,143,242, 73, 77, 77,197,247,223,127,175,219,180,105, 83, 74, 94, 94,222,150,250,214,103, 65, 65,193,206,175, +190,250, 42,225,212,169, 83,122,146, 36,145,155,155, 11, 51, 51, 51,124,255,253,247,186, 45, 91,182,164, 20, 22, 22,214,155,179, +125,251,246,207, 82, 82, 82, 76, 52, 26,205, 95,220, 31, 30,143, 71,136, 68,162,242, 17, 97, 70, 35, 32, 32,224, 89, 66, 66,130, +124,201,146, 37, 33,189,122,245, 90,110, 98, 98, 18,107, 98, 98, 18,219,171, 87,175, 21, 27, 54,108,184, 92,198,121,177,222, 23, + 47,146,172, 16, 88,229, 93,133,229, 46, 86,153,147,101, 84, 23,161,135,135,199,190, 61,123,246,152,198,198,198,162,160,160, 0, +145,145,145,136,136,136,168,232,202,173,110,142, 49, 0, 40, 41, 41, 17,191, 5,151,143, 43, 40, 77,125,225, 90, 38,100,222, 54, + 28,169, 36,174,186,161,116,228, 89,183,178,101,111, 0,191,189, 73, 7,139, 97,152,138,135,157,145, 35, 71,226,226,197,139,104, +214,172, 89,133,168,170, 60,138,176, 62, 34,131,162, 40,248,248,248, 64,163,213,190, 36,208,185, 92, 46,172,173,173,241,236,217, + 51, 24, 12,134, 58, 29, 44,130, 32,134,247,239,223,159,140,138,138,130,135,135, 7, 34, 34, 34, 16, 17, 17,129,200,200, 72,220, +187,119, 15, 15, 30, 60,192,163, 71,143, 16, 29, 29,141, 86,173, 90,225,197,139, 23,232,219,183,111,121,154,134, 90, 77,182,250, +184, 77, 70,186,119,127, 7,231,191,194,193, 34, 42,191,219,154, 75,199,121, 42,184,184,119, 47, 26, 39,194,115,118, 17, 4,121, + 52,226,185,230,100,223,166,133,208, 29,250, 0, 62,195,247, 98,215,188,190,165, 79, 0, 25,143,160, 59,252, 33, 8,137, 21,158, + 22, 72,161,210,230,213,246,212,124, 39, 44, 44,236,224,158, 61,123, 62, 30, 59,118,172,128,166,105,136,197, 98,204,154, 53,171, + 34, 71, 8,135,195,193,148, 41, 83,138, 50, 50, 50, 86,195,200,145, 95, 0,196,166, 82,222,252,209, 19,190, 21, 33,105, 51, 64, +242,145,133,150,240,237,242, 49, 50, 18,110, 2,197,209, 0,193,199,166,101,159, 88,189, 51,238,135, 45,105,153,121,157,223,150, + 3,240,248,241, 99, 44, 88,176,224,149,197, 85, 85, 39,235,196,137, 19,187, 53, 26,205,132,215,200,217,111,249,242,229,103,109, +108,108, 26,220, 45,226,224,224,240, 81, 86, 86,214,199,198, 24,103,198,232,210, 67,135, 14, 13, 76, 72, 72, 88, 26, 19, 19, 83, +237,200,213, 71,143, 30, 29,239,211,167,143,164, 62,163, 8, 35, 35, 35, 35,218,182,109,187,113,245,234,213, 83,102,204,152, 33, + 18,139,197,144,203,229,136,137,137,129,147,147, 19, 0, 64,165, 82, 97,222,188,121, 42,189, 94,191, 43, 44, 44,236,166,177, 15, +203, 15, 31, 62, 28, 61,105,210,164, 79,154, 55,111,254, 14, 77,211,150, 90,173, 54,251,197,139, 23,167,202,132, 80, 67,186,119, +232,168,168,168, 81,147, 39, 79, 30,235,230,230, 54, 84,167,211, 89, 26, 12,134,236,164,164,164, 19, 5, 5, 5,219, 27,194,121, +243,230,205,204,113,227,198,197,165,165,165,121, 41, 20,138,124, 83, 83, 83,173, 86,171,229,200,100, 50, 19,129, 64,208, 10,192, + 77,130, 32,162,235,195, 25, 22, 22,150, 62,126,252,248, 4,141, 70,211,124,235,214,173,161, 82,169,244, 15,130, 32, 8, 62,159, +111, 46,149, 74,187, 3, 8, 33, 8,226,105,125,203, 74,146, 36, 93, 89, 80, 85,118,177,248,124, 62, 8,130, 48, 74, 96, 61,123, +246,236,250,226,197,139, 91, 52,109,218, 20,155, 54,109,202,145,201,100, 38, 67,135, 14,229,230,231,231, 19,181, 57, 88, 42,149, + 74, 4, 22,117, 62, 91,148,185,188,131, 43, 57,159,229,129,239, 71, 0,228,189,201,194, 49, 12,243,146,144,114,114,114,122, 73, + 84, 85, 94, 87, 31,129,101, 48, 24,192,231,243,193,229,114, 97,167, 80, 84,136, 57,134, 97, 16,251,244, 41,114,115,115, 43,210, + 52,212,209,198, 57, 4, 65, 96,196,136, 17, 70,109,119,228,200,145, 8, 9, 9, 65, 93,221,137,149, 71,252, 53,110,220,184, 78, + 49, 84, 86, 22,163, 71, 17, 58, 58, 58, 54,148,147,168,242,254,175, 16, 88, 47, 33, 53,167,100,201,182, 99,145,243, 82, 11, 12, + 71,133, 29, 94,124, 30, 20, 4,102, 94,207,198,231, 29,165,130, 62,158,100, 10, 52, 91, 58,129,144,151,222,108,152,162, 84, 16, + 82, 59,228,242,156,240,123, 68, 90, 26,201,227,212,234, 62,228,229,229,205,252,233,167,159, 56,103,207,158, 29,190,116,233, 82, + 51,119,119,119,140, 30, 61, 26, 90,173, 22, 15, 30, 60,192,164, 73,147,114, 50, 51, 51, 55,231,229,229, 45, 55,118, 39,172,228, +220,239,214,124,221,199,146,164,139,128,130,112,128,107, 10, 43, 11, 19,220, 15, 11, 5,242,195, 0,146, 15,144, 2, 4,180,244, +128,175,183,171, 71,218,165,187,157, 0, 92,123, 27, 14,192,167,159,126,250,218,196, 85,101, 65, 4,160,233,235, 44,103,185,200, +250,226,139, 47,206,210, 52, 45,105,208,163,236,145, 35, 20,106,207, 71, 86,111,243,239,238,221,187,163,106, 90,169,211,233, 78, +220,188,121,179,222, 73,102,245,122,253,188,168,168, 40,124,246,217,103,147, 63,252,240, 67,177,187,187, 59,156,157,157, 17, 27, + 27,139,152,152, 24,108,220,184, 81, 77,211,244,246,188,188,188, 47,235, 73, 77, 21, 20, 20,108,190,115,231,206,230,215, 88, 7, +116,126,126,254,142, 59,119,238,236,120, 93,132, 19, 38, 76,120, 24, 27, 27,155,227,224,224,208,150,195,225,180, 64,105,162, 72, + 37,128, 29, 13, 17, 66, 0, 48,121,242,228,123,207,158, 61,203,178,179,179,107,203,231,243, 93,203, 56, 83, 0,108,111, 32,103, +246,253,251,247, 93,219,180,105, 67,115, 56, 28,134,199,227, 49,101, 55, 67,134,203,229, 50, 4, 65, 48,231,206,157, 19,193,136, +152,203,228,228,228,233,187,118,237, 98,100, 50, 89,219,162,162,162,209, 0,118,171, 84,170, 54,121,121,121, 21, 55,225,234,160, + 86,171,133,172,126,170, 19, 67,106,248, 62, 29, 64,167,183,161,128,139, 23, 47,198,230,205,155, 81, 87, 6,242, 19, 39, 78,212, +121,227, 47,111, 43,229,241, 85, 90,173, 22, 81, 81, 81, 32, 8,162, 98,185,114,146, 81,138,162,106,205,244, 78,211, 52,165,213, +106,113,240,224, 65,163, 68,214,254,253,251,161, 86,171, 65,211,180, 81,215,217,178,196,164,200,205,205,173, 72,157,224,239,239, + 95,249, 26, 90,239,250,228,112, 56,112,119,119, 71, 86, 86, 22,172,172,172, 0,148,118, 11, 86,136,207,226,226,255, 76,227, 55, + 90, 37, 6,117,117, 54, 85,115,201, 99,126, 14,116,183, 0,103, 33,172,204, 68,224,240,132, 40, 80, 19,136, 74, 85,227, 90,116, + 65, 18,101, 96, 2,151, 94, 74, 48, 54, 65, 92, 59,133, 66,241, 53, 69, 81,222, 36, 73, 74, 24,134, 41,226,112, 56,145,169,169, +169, 11, 1, 60,170,207, 78,152,202,200,167,230, 82,142, 41, 79, 32, 96, 40, 3, 13,128, 4, 72, 18, 32, 72, 0,156,178,247,210, +101,149, 74,199,167,104,226,104, 70, 86,246, 39,111,186,242, 59,119,238,124,190,184,184,248, 31,151,201, 93, 44, 22, 47,224,112, + 56,253,254,237,211,196, 4, 4, 4, 4,136,197,226,175,105,154,110,173, 86,171,237,196, 98,113, 58, 65, 16, 97,133,133,133,203, +238,221,187,119,139,189,119,190, 57,188,206, 76,238, 85, 81,158, 27,203,202,202,202,237,254,253,251,162,202, 14, 86,229,155, 97, +217,247, 4,123, 52,254,153,240,240,240,184,189,111,223,190, 0, 39, 39, 39,178, 60,224,154, 36,201,138, 87,121, 55, 86,185,219, +114,235,214, 45,195,212,169, 83,111,222,191,127,191, 75, 77,156,174,174,174,231, 47, 94,188,216,187,178, 67, 85, 46,164,170,126, +166, 40, 10, 37, 37, 37, 88,176, 96,193,133,103,207,158, 85, 59, 85,142,187,187,251,234,249,243,231, 79, 31, 48, 96, 0, 73,146, +228, 95, 98,174,170,198, 97,233,116, 58, 28, 61,122,148,222,185,115,231,218, 39, 79,158,212, 24,131,229,231,231,151, 20, 25, 25, +233, 88,158, 50,161,234,171,234,136, 90, 0,104,215,174,157,242,206,157, 59,246,255, 79,206,183, 17,181, 9,226, 6, 11,172,242, +223,207,233,225,252, 62, 1,114, 56, 73,208, 62, 32, 8, 1,205, 32,134, 0,206, 11, 68,218, 13, 65, 39,149,170, 42,191,247,193, +235,207,200,203,114,178,156,111,130,147,132,113, 83,207,176,245,249, 47,225,116,117,117,125,250,244,233, 83,215, 26, 47,134, 47, + 11, 44,182, 62,255, 97,156, 86, 86, 86, 82,107,107,235, 63, 72,146,116,174,105,114,231,202,226,154,166,233,132,244,244,244,158, + 25, 25, 25, 37, 53,113, 58, 56, 56,184,136, 68,162,245, 52, 77,183, 49,102,178,103,146, 36,239,168,213,234,169, 85, 38,123,174, +224,124,141,163, 8, 95, 42,167,151,151,215,179, 59,119,238,184,136,197,226,151,226, 10,171,238,115, 57,158, 63,127,142,161, 67, +135,190,184,127,255,126,227,191,153,243, 95, 37,176,234, 59, 23, 33,179,252,210,139,131, 0, 14,178,207, 63, 44,254, 99,160,217, + 42,248,111, 65,165, 82,229, 90, 91, 91, 23,169,213,106,158, 70,163,225, 25, 12,134,151,110,112, 98,177, 56, 83,165, 82,177, 21, +245, 15, 69, 86, 86, 86,113, 86, 86, 86,219,215,201, 89, 38,148,250,188, 46,190,191, 43, 15, 86,110,110,110, 96,235,214,173,207, +113,185, 92, 97, 85,241, 83,157, 24,162, 40, 74,157,157,157,221,239,255,205,249, 79, 7,151, 61,205, 88,176, 96,193,226,175, 72, + 77, 77,109, 91,135, 0, 99, 43,137,197, 63, 18, 74,165, 50, 70,169, 84, 58,191,237,156,255,116,144,108, 21,176, 96,193,130, 5, + 11, 22, 44, 88,176, 2,139, 5, 11, 22, 44, 88,176, 96,193,130, 21, 88, 44, 88,176, 96,193,130, 5, 11, 22,172,192, 98,193,130, + 5, 11, 22, 44, 88,176, 96,209, 96,252,111, 0, 9,119,137,124,120, 43,217,227, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index b43b50dcfd7..4e2608c98d9 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -235,7 +235,7 @@ DEF_ICON(ICON_RENDER_RESULT) DEF_ICON(ICON_SURFACE_DATA) DEF_ICON(ICON_EMPTY_DATA) DEF_ICON(ICON_SETTINGS) -DEF_ICON(ICON_BLANK080D) +DEF_ICON(ICON_RENDER_ANIMATION) DEF_ICON(ICON_BLANK080E) DEF_ICON(ICON_BLANK080F) DEF_ICON(ICON_BLANK080) From 1b26fe50c35afe5c83a0bf3a69fce55db00374d3 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 30 Jul 2009 13:56:39 +0000 Subject: [PATCH 478/512] * More lamp tweaks, meant to commit this last night --- release/ui/buttons_data_lamp.py | 59 ++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index a522a66c871..6fb021802f0 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -54,7 +54,8 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "energy") if lamp.type in ('POINT', 'SPOT'): - sub.itemR(lamp, "falloff_type", text="Falloff") + sub.itemL(text="Falloff:") + sub.itemR(lamp, "falloff_type", text="") sub.itemR(lamp, "distance") if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED': @@ -68,14 +69,7 @@ class DATA_PT_lamp(DataButtonsPanel): if lamp.type == 'AREA': col.itemR(lamp, "distance") col.itemR(lamp, "gamma") - col.itemR(lamp, "shape") - - sub = col.column(align=True) - if (lamp.shape == 'SQUARE'): - sub.itemR(lamp, "size") - elif (lamp.shape == 'RECTANGLE'): - sub.itemR(lamp, "size", text="Size X") - sub.itemR(lamp, "size_y", text="Size Y") + col = split.column() col.itemR(lamp, "negative") @@ -180,13 +174,13 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.type in ('POINT', 'SUN', 'SPOT'): split = layout.split() - col = split.column(align=True) + col = split.column() col.itemR(lamp, "shadow_soft_size", text="Soft Size") - col = split.column(align=True) col.itemR(lamp, "shadow_ray_samples", text="Samples") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") + col = split.column() elif lamp.type == 'AREA': split = layout.split() @@ -194,18 +188,18 @@ class DATA_PT_shadow(DataButtonsPanel): col = split.column() sub = split.column(align=True) if lamp.shape == 'SQUARE': - sub.itemR(lamp, "shadow_ray_samples_x", text="Samples") + col.itemR(lamp, "shadow_ray_samples_x", text="Samples") elif lamp.shape == 'RECTANGLE': - sub.itemR(lamp, "shadow_ray_samples_x", text="Samples X") - sub.itemR(lamp, "shadow_ray_samples_y", text="Samples Y") + col.itemR(lamp, "shadow_ray_samples_x", text="Samples X") + col.itemR(lamp, "shadow_ray_samples_y", text="Samples Y") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': - sub.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") + col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") elif lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': - col.itemR(lamp, "umbra") - col.itemR(lamp, "dither") - col.itemR(lamp, "jitter") + sub.itemR(lamp, "umbra") + sub.itemR(lamp, "dither") + sub.itemR(lamp, "jitter") if lamp.shadow_method == 'BUFFER_SHADOW': col = layout.column() @@ -244,8 +238,34 @@ class DATA_PT_shadow(DataButtonsPanel): sub.active = not lamp.auto_clip_end sub.itemR(lamp, "shadow_buffer_clip_end", text=" Clip End") +class DATA_PT_area(DataButtonsPanel): + __label__ = "Area Shape" + + def poll(self, context): + lamp = context.lamp + return (lamp and lamp.type == 'AREA') + + def draw(self, context): + layout = self.layout + + lamp = context.lamp + + split = layout.split() + + col = split.column() + col.itemR(lamp, "shape", text="") + + sub = col.column(align=True) + if (lamp.shape == 'SQUARE'): + sub.itemR(lamp, "size") + elif (lamp.shape == 'RECTANGLE'): + sub.itemR(lamp, "size", text="Size X") + sub.itemR(lamp, "size_y", text="Size Y") + + col = split.column() + class DATA_PT_spot(DataButtonsPanel): - __label__ = "Spot" + __label__ = "Spot Shape" def poll(self, context): lamp = context.lamp @@ -296,6 +316,7 @@ bpy.types.register(DATA_PT_context_lamp) bpy.types.register(DATA_PT_preview) bpy.types.register(DATA_PT_lamp) bpy.types.register(DATA_PT_falloff_curve) +bpy.types.register(DATA_PT_area) bpy.types.register(DATA_PT_spot) bpy.types.register(DATA_PT_shadow) bpy.types.register(DATA_PT_sunsky) \ No newline at end of file From 58c88bcf7636abce291168af189284181f2f7033 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 15:00:26 +0000 Subject: [PATCH 479/512] BF2.5: First commit of smoke code. Not working: a) rendering (since volumterics branch is not merged yet) b) moving collision objects of any kind c) saving of collision objects (because that's what I am working on) d) pointcache e) A bunch of other things I already know of So please do not report any bugs on this one yet :-) --- intern/CMakeLists.txt | 1 + intern/SConscript | 3 +- intern/smoke/SConscript | 15 + intern/smoke/extern/smoke_API.h | 62 + intern/smoke/intern/EIGENVALUE_HELPER.h | 47 + intern/smoke/intern/FFT_NOISE.h | 178 +++ intern/smoke/intern/FLUID_3D.cpp | 670 ++++++++ intern/smoke/intern/FLUID_3D.h | 176 +++ intern/smoke/intern/FLUID_3D_SOLVERS.cpp | 318 ++++ intern/smoke/intern/FLUID_3D_STATIC.cpp | 650 ++++++++ intern/smoke/intern/IMAGE.h | 270 ++++ intern/smoke/intern/INTERPOLATE.h | 227 +++ intern/smoke/intern/LICENSE.txt | 674 +++++++++ intern/smoke/intern/LU_HELPER.h | 56 + intern/smoke/intern/MERSENNETWISTER.h | 429 ++++++ intern/smoke/intern/Makefile.FFT | 22 + intern/smoke/intern/Makefile.cygwin | 23 + intern/smoke/intern/Makefile.linux | 23 + intern/smoke/intern/Makefile.mac | 35 + intern/smoke/intern/OBSTACLE.h | 41 + intern/smoke/intern/SPHERE.cpp | 50 + intern/smoke/intern/SPHERE.h | 41 + intern/smoke/intern/VEC3.h | 981 ++++++++++++ intern/smoke/intern/WAVELET_NOISE.h | 456 ++++++ intern/smoke/intern/WTURBULENCE.cpp | 962 ++++++++++++ intern/smoke/intern/WTURBULENCE.h | 147 ++ intern/smoke/intern/smoke_API.cpp | 125 ++ intern/smoke/intern/tnt/jama_eig.h | 1050 +++++++++++++ intern/smoke/intern/tnt/jama_lu.h | 319 ++++ intern/smoke/intern/tnt/tnt.h | 64 + intern/smoke/intern/tnt/tnt_array1d.h | 278 ++++ intern/smoke/intern/tnt/tnt_array1d_utils.h | 230 +++ intern/smoke/intern/tnt/tnt_array2d.h | 315 ++++ intern/smoke/intern/tnt/tnt_array2d_utils.h | 287 ++++ intern/smoke/intern/tnt/tnt_array3d.h | 296 ++++ intern/smoke/intern/tnt/tnt_array3d_utils.h | 236 +++ intern/smoke/intern/tnt/tnt_cmat.h | 580 +++++++ intern/smoke/intern/tnt/tnt_fortran_array1d.h | 267 ++++ .../intern/tnt/tnt_fortran_array1d_utils.h | 242 +++ intern/smoke/intern/tnt/tnt_fortran_array2d.h | 225 +++ .../intern/tnt/tnt_fortran_array2d_utils.h | 236 +++ intern/smoke/intern/tnt/tnt_fortran_array3d.h | 223 +++ .../intern/tnt/tnt_fortran_array3d_utils.h | 249 +++ intern/smoke/intern/tnt/tnt_i_refvec.h | 243 +++ intern/smoke/intern/tnt/tnt_math_utils.h | 34 + .../smoke/intern/tnt/tnt_sparse_matrix_csr.h | 103 ++ intern/smoke/intern/tnt/tnt_stopwatch.h | 95 ++ intern/smoke/intern/tnt/tnt_subscript.h | 54 + intern/smoke/intern/tnt/tnt_vec.h | 404 +++++ intern/smoke/intern/tnt/tnt_version.h | 39 + release/ui/buttons_data_modifier.py | 27 + source/blender/blenkernel/BKE_smoke.h | 55 + source/blender/blenkernel/CMakeLists.txt | 2 +- source/blender/blenkernel/SConscript | 1 + source/blender/blenkernel/intern/modifier.c | 106 ++ source/blender/blenkernel/intern/smoke.c | 1342 +++++++++++++++++ source/blender/blenlib/BLI_kdopbvh.h | 2 + source/blender/blenlib/intern/BLI_kdopbvh.c | 183 ++- source/blender/blenloader/intern/readfile.c | 65 +- source/blender/blenloader/intern/writefile.c | 13 + source/blender/editors/CMakeLists.txt | 2 +- .../blender/editors/space_view3d/SConscript | 1 + .../blender/editors/space_view3d/drawobject.c | 331 ++++ source/blender/makesdna/DNA_modifier_types.h | 18 + source/blender/makesdna/DNA_smoke_types.h | 112 ++ source/blender/makesdna/intern/makesdna.c | 2 + source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/makesrna.c | 1 + source/blender/makesrna/intern/rna_internal.h | 1 + source/blender/makesrna/intern/rna_modifier.c | 53 +- source/blender/makesrna/intern/rna_smoke.c | 263 ++++ source/creator/CMakeLists.txt | 1 + 72 files changed, 15252 insertions(+), 81 deletions(-) create mode 100644 intern/smoke/SConscript create mode 100644 intern/smoke/extern/smoke_API.h create mode 100644 intern/smoke/intern/EIGENVALUE_HELPER.h create mode 100644 intern/smoke/intern/FFT_NOISE.h create mode 100644 intern/smoke/intern/FLUID_3D.cpp create mode 100644 intern/smoke/intern/FLUID_3D.h create mode 100644 intern/smoke/intern/FLUID_3D_SOLVERS.cpp create mode 100644 intern/smoke/intern/FLUID_3D_STATIC.cpp create mode 100644 intern/smoke/intern/IMAGE.h create mode 100644 intern/smoke/intern/INTERPOLATE.h create mode 100644 intern/smoke/intern/LICENSE.txt create mode 100644 intern/smoke/intern/LU_HELPER.h create mode 100644 intern/smoke/intern/MERSENNETWISTER.h create mode 100644 intern/smoke/intern/Makefile.FFT create mode 100644 intern/smoke/intern/Makefile.cygwin create mode 100644 intern/smoke/intern/Makefile.linux create mode 100644 intern/smoke/intern/Makefile.mac create mode 100644 intern/smoke/intern/OBSTACLE.h create mode 100644 intern/smoke/intern/SPHERE.cpp create mode 100644 intern/smoke/intern/SPHERE.h create mode 100644 intern/smoke/intern/VEC3.h create mode 100644 intern/smoke/intern/WAVELET_NOISE.h create mode 100644 intern/smoke/intern/WTURBULENCE.cpp create mode 100644 intern/smoke/intern/WTURBULENCE.h create mode 100644 intern/smoke/intern/smoke_API.cpp create mode 100644 intern/smoke/intern/tnt/jama_eig.h create mode 100644 intern/smoke/intern/tnt/jama_lu.h create mode 100644 intern/smoke/intern/tnt/tnt.h create mode 100644 intern/smoke/intern/tnt/tnt_array1d.h create mode 100644 intern/smoke/intern/tnt/tnt_array1d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_array2d.h create mode 100644 intern/smoke/intern/tnt/tnt_array2d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_array3d.h create mode 100644 intern/smoke/intern/tnt/tnt_array3d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_cmat.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array1d.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array1d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array2d.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array2d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array3d.h create mode 100644 intern/smoke/intern/tnt/tnt_fortran_array3d_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_i_refvec.h create mode 100644 intern/smoke/intern/tnt/tnt_math_utils.h create mode 100644 intern/smoke/intern/tnt/tnt_sparse_matrix_csr.h create mode 100644 intern/smoke/intern/tnt/tnt_stopwatch.h create mode 100644 intern/smoke/intern/tnt/tnt_subscript.h create mode 100644 intern/smoke/intern/tnt/tnt_vec.h create mode 100644 intern/smoke/intern/tnt/tnt_version.h create mode 100644 source/blender/blenkernel/BKE_smoke.h create mode 100644 source/blender/blenkernel/intern/smoke.c create mode 100644 source/blender/makesdna/DNA_smoke_types.h create mode 100644 source/blender/makesrna/intern/rna_smoke.c diff --git a/intern/CMakeLists.txt b/intern/CMakeLists.txt index 697d0b6b575..71bd00f71ee 100644 --- a/intern/CMakeLists.txt +++ b/intern/CMakeLists.txt @@ -35,6 +35,7 @@ ADD_SUBDIRECTORY(decimation) ADD_SUBDIRECTORY(iksolver) ADD_SUBDIRECTORY(boolop) ADD_SUBDIRECTORY(opennl) +ADD_SUBDIRECTORY(smoke) IF(WITH_ELBEEM) ADD_SUBDIRECTORY(elbeem) diff --git a/intern/SConscript b/intern/SConscript index bb8525d5ce5..bdbdc7fd6e9 100644 --- a/intern/SConscript +++ b/intern/SConscript @@ -11,7 +11,8 @@ SConscript(['SoundSystem/SConscript', 'decimation/SConscript', 'iksolver/SConscript', 'boolop/SConscript', - 'opennl/SConscript']) + 'opennl/SConscript', + 'smoke/SConscript']) # NEW_CSG was intended for intern/csg, but # getting it to compile is difficult diff --git a/intern/smoke/SConscript b/intern/smoke/SConscript new file mode 100644 index 00000000000..fe592b8afb2 --- /dev/null +++ b/intern/smoke/SConscript @@ -0,0 +1,15 @@ +#!/usr/bin/python +Import ('env') + +sources = env.Glob('intern/*.cpp') + +defs = '' + +if env['WITH_BF_OPENMP']: + defs += ' PARALLEL=1' + +incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC'] +incs += ' intern ../../extern/bullet2/src ../memutil ../guardealloc ' +incs += env['BF_FFTW3_INC'] + +env.BlenderLib ('bf_smoke', sources, Split(incs), Split(defs), libtype=['intern'], priority=[40] ) diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h new file mode 100644 index 00000000000..491e065d3ac --- /dev/null +++ b/intern/smoke/extern/smoke_API.h @@ -0,0 +1,62 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Daniel Genrich + * All rights reserved. + * + * Contributor(s): None + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef SMOKE_API_H_ +#define SMOKE_API_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt); +void smoke_free(struct FLUID_3D *fluid); + +void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta); + +void smoke_step(struct FLUID_3D *fluid); + +float *smoke_get_density(struct FLUID_3D *fluid); +float *smoke_get_bigdensity(struct FLUID_3D *fluid); +float *smoke_get_heat(struct FLUID_3D *fluid); +float *smoke_get_velocity_x(struct FLUID_3D *fluid); +float *smoke_get_velocity_y(struct FLUID_3D *fluid); +float *smoke_get_velocity_z(struct FLUID_3D *fluid); + +unsigned char *smoke_get_obstacle(struct FLUID_3D *fluid); + +size_t smoke_get_index(int x, int max_x, int y, int max_y, int z, int max_z); +size_t smoke_get_index2d(int x, int max_x, int y, int max_y, int z, int max_z); + +void smoke_set_noise(struct FLUID_3D *fluid, int type); + +void smoke_get_bigres(struct FLUID_3D *fluid, int *res); + +#ifdef __cplusplus +} +#endif + +#endif /* SMOKE_API_H_ */ diff --git a/intern/smoke/intern/EIGENVALUE_HELPER.h b/intern/smoke/intern/EIGENVALUE_HELPER.h new file mode 100644 index 00000000000..6ff61c5ca8e --- /dev/null +++ b/intern/smoke/intern/EIGENVALUE_HELPER.h @@ -0,0 +1,47 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +////////////////////////////////////////////////////////////////////// +// Helper function, compute eigenvalues of 3x3 matrix +////////////////////////////////////////////////////////////////////// + +#include "tnt/jama_eig.h" + +////////////////////////////////////////////////////////////////////// +// eigenvalues of 3x3 non-symmetric matrix +////////////////////////////////////////////////////////////////////// +int inline computeEigenvalues3x3( + float dout[3], + float a[3][3]) +{ + TNT::Array2D A = TNT::Array2D(3,3, &a[0][0]); + TNT::Array1D eig = TNT::Array1D(3); + TNT::Array1D eigImag = TNT::Array1D(3); + JAMA::Eigenvalue jeig = JAMA::Eigenvalue(A); + jeig.getRealEigenvalues(eig); + + // complex ones + jeig.getImagEigenvalues(eigImag); + dout[0] = sqrt(eig[0]*eig[0] + eigImag[0]*eigImag[0]); + dout[1] = sqrt(eig[1]*eig[1] + eigImag[1]*eigImag[1]); + dout[2] = sqrt(eig[2]*eig[2] + eigImag[2]*eigImag[2]); + return 0; +} + +#undef rfabs +#undef ROT diff --git a/intern/smoke/intern/FFT_NOISE.h b/intern/smoke/intern/FFT_NOISE.h new file mode 100644 index 00000000000..9ae9682e2a0 --- /dev/null +++ b/intern/smoke/intern/FFT_NOISE.h @@ -0,0 +1,178 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +///////////////////////////////////////////////////////////////////////// +// + +#ifndef FFT_NOISE_H_ +#define FFT_NOISE_H_ + +#if 0 +#include +#include +#include + +#include "WAVELET_NOISE.h" + +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +///////////////////////////////////////////////////////////////////////// +// shift spectrum to the format that FFTW expects +///////////////////////////////////////////////////////////////////////// +static void shift3D(float*& field, int xRes, int yRes, int zRes) +{ + int xHalf = xRes / 2; + int yHalf = yRes / 2; + int zHalf = zRes / 2; + int slabSize = xRes * yRes; + for (int z = 0; z < zHalf; z++) + for (int y = 0; y < yHalf; y++) + for (int x = 0; x < xHalf; x++) + { + int index = x + y * xRes + z * xRes * yRes; + float temp; + int xSwap = xHalf; + int ySwap = yHalf * xRes; + int zSwap = zHalf * xRes * yRes; + + // [0,0,0] to [1,1,1] + temp = field[index]; + field[index] = field[index + xSwap + ySwap + zSwap]; + field[index + xSwap + ySwap + zSwap] = temp; + + // [1,0,0] to [0,1,1] + temp = field[index + xSwap]; + field[index + xSwap] = field[index + ySwap + zSwap]; + field[index + ySwap + zSwap] = temp; + + // [0,1,0] to [1,0,1] + temp = field[index + ySwap]; + field[index + ySwap] = field[index + xSwap + zSwap]; + field[index + xSwap + zSwap] = temp; + + // [0,0,1] to [1,1,0] + temp = field[index + zSwap]; + field[index + zSwap] = field[index + xSwap + ySwap]; + field[index + xSwap + ySwap] = temp; + } +} + +static void generatTile_FFT(float* const noiseTileData, std::string filename) +{ + if (loadTile(noiseTileData, filename)) return; + + int res = NOISE_TILE_SIZE; + int xRes = res; + int yRes = res; + int zRes = res; + int totalCells = xRes * yRes * zRes; + + // create and shift the filter + float* filter = new float[totalCells]; + for (int z = 0; z < zRes; z++) + for (int y = 0; y < yRes; y++) + for (int x = 0; x < xRes; x++) + { + int index = x + y * xRes + z * xRes * yRes; + float diff[] = {abs(x - xRes/2), + abs(y - yRes/2), + abs(z - zRes/2)}; + float radius = sqrtf(diff[0] * diff[0] + + diff[1] * diff[1] + + diff[2] * diff[2]) / (xRes / 2); + radius *= M_PI; + float H = cos((M_PI / 2.0f) * log(4.0f * radius / M_PI) / log(2.0f)); + H = H * H; + float filtered = H; + + // clamp everything outside the wanted band + if (radius >= M_PI / 2.0f) + filtered = 0.0f; + + // make sure to capture all low frequencies + if (radius <= M_PI / 4.0f) + filtered = 1.0f; + + filter[index] = filtered; + } + shift3D(filter, xRes, yRes, zRes); + + // create the noise + float* noise = new float[totalCells]; + int index = 0; + MTRand twister; + for (int z = 0; z < zRes; z++) + for (int y = 0; y < yRes; y++) + for (int x = 0; x < xRes; x++, index++) + noise[index] = twister.randNorm(); + + // create padded field + fftw_complex* forward = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * totalCells); + + // init padded field + index = 0; + for (int z = 0; z < zRes; z++) + for (int y = 0; y < yRes; y++) + for (int x = 0; x < xRes; x++, index++) + { + forward[index][0] = noise[index]; + forward[index][1] = 0.0f; + } + + // forward FFT + fftw_complex* backward = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * totalCells); + fftw_plan forwardPlan = fftw_plan_dft_3d(xRes, yRes, zRes, forward, backward, FFTW_FORWARD, FFTW_ESTIMATE); + fftw_execute(forwardPlan); + fftw_destroy_plan(forwardPlan); + + // apply filter + index = 0; + for (int z = 0; z < zRes; z++) + for (int y = 0; y < yRes; y++) + for (int x = 0; x < xRes; x++, index++) + { + backward[index][0] *= filter[index]; + backward[index][1] *= filter[index]; + } + + // backward FFT + fftw_plan backwardPlan = fftw_plan_dft_3d(xRes, yRes, zRes, backward, forward, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(backwardPlan); + fftw_destroy_plan(backwardPlan); + + // subtract out the low frequency components + index = 0; + for (int z = 0; z < zRes; z++) + for (int y = 0; y < yRes; y++) + for (int x = 0; x < xRes; x++, index++) + noise[index] -= forward[index][0] / totalCells; + + // save out the noise tile + saveTile(noise, filename); + + fftw_free(forward); + fftw_free(backward); + delete[] filter; + delete[] noise; +} + +#endif + +#endif /* FFT_NOISE_H_ */ diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp new file mode 100644 index 00000000000..3427b32e888 --- /dev/null +++ b/intern/smoke/intern/FLUID_3D.cpp @@ -0,0 +1,670 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// FLUID_3D.cpp: implementation of the FLUID_3D class. +// +////////////////////////////////////////////////////////////////////// + +#include "FLUID_3D.h" +#include "IMAGE.h" +#include +#include "SPHERE.h" +#include + +// boundary conditions of the fluid domain +#define DOMAIN_BC_FRONT 1 +#define DOMAIN_BC_TOP 0 +#define DOMAIN_BC_LEFT 1 +#define DOMAIN_BC_BACK DOMAIN_BC_FRONT +#define DOMAIN_BC_BOTTOM DOMAIN_BC_TOP +#define DOMAIN_BC_RIGHT DOMAIN_BC_LEFT + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +FLUID_3D::FLUID_3D(int *res, int amplify, float *p0, float *p1, float dt) : + _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.), _dt(dt) +{ + // set simulation consts + // _dt = dt; // 0.10 + + // start point of array + _p0[0] = p0[0]; + _p0[1] = p0[1]; + _p0[2] = p0[2]; + + _iterations = 100; + _tempAmb = 0; + _heatDiffusion = 1e-3; + _vorticityEps = 2.0; + _totalTime = 0.0f; + _totalSteps = 0; + _res = Vec3Int(_xRes,_yRes,_zRes); + _maxRes = MAX3(_xRes, _yRes, _zRes); + + // initialize wavelet turbulence + _wTurbulence = new WTURBULENCE(_res[0],_res[1],_res[2], amplify); + + // scale the constants according to the refinement of the grid + _dx = 1.0f / (float)_maxRes; + float scaling = 64.0f / _maxRes; + scaling = (scaling < 1.0f) ? 1.0f : scaling; + _vorticityEps /= scaling; + + // allocate arrays + _totalCells = _xRes * _yRes * _zRes; + _slabSize = _xRes * _yRes; + _divergence = new float[_totalCells]; + _pressure = new float[_totalCells]; + _xVelocity = new float[_totalCells]; + _yVelocity = new float[_totalCells]; + _zVelocity = new float[_totalCells]; + _xVelocityOld = new float[_totalCells]; + _yVelocityOld = new float[_totalCells]; + _zVelocityOld = new float[_totalCells]; + _xForce = new float[_totalCells]; + _yForce = new float[_totalCells]; + _zForce = new float[_totalCells]; + _vorticity = new float[_totalCells]; + _density = new float[_totalCells]; + _densityOld = new float[_totalCells]; + _heat = new float[_totalCells]; + _heatOld = new float[_totalCells]; + _residual = new float[_totalCells]; + _direction = new float[_totalCells]; + _q = new float[_totalCells]; + _obstacles = new unsigned char[_totalCells]; + _xVorticity = new float[_totalCells]; + _yVorticity = new float[_totalCells]; + _zVorticity = new float[_totalCells]; + + for (int x = 0; x < _totalCells; x++) + { + _density[x] = 0.0f; + _densityOld[x] = 0.0f; + _heat[x] = 0.0f; + _heatOld[x] = 0.0f; + _divergence[x] = 0.0f; + _pressure[x] = 0.0f; + _xVelocity[x] = 0.0f; + _yVelocity[x] = 0.0f; + _zVelocity[x] = 0.0f; + _xVelocityOld[x] = 0.0f; + _yVelocityOld[x] = 0.0f; + _zVelocityOld[x] = 0.0f; + _xForce[x] = 0.0f; + _yForce[x] = 0.0f; + _zForce[x] = 0.0f; + _xVorticity[x] = 0.0f; + _yVorticity[x] = 0.0f; + _zVorticity[x] = 0.0f; + _residual[x] = 0.0f; + _obstacles[x] = false; + } + + // set side obstacles + int index; + for (int y = 0; y < _yRes; y++) + for (int x = 0; x < _xRes; x++) + { + // front slab + index = x + y * _xRes; + if(DOMAIN_BC_FRONT==1) _obstacles[index] = 1; + + // back slab + index += _totalCells - _slabSize; + if(DOMAIN_BC_BACK==1) _obstacles[index] = 1; + } + for (int z = 0; z < _zRes; z++) + for (int x = 0; x < _xRes; x++) + { + // bottom slab + index = x + z * _slabSize; + if(DOMAIN_BC_BOTTOM==1) _obstacles[index] = 1; + + // top slab + index += _slabSize - _xRes; + if(DOMAIN_BC_TOP==1) _obstacles[index] = 1; + } + for (int z = 0; z < _zRes; z++) + for (int y = 0; y < _yRes; y++) + { + // left slab + index = y * _xRes + z * _slabSize; + if(DOMAIN_BC_LEFT==1) _obstacles[index] = 1; + + // right slab + index += _xRes - 1; + if(DOMAIN_BC_RIGHT==1) _obstacles[index] = 1; + } + + /* + SPHERE *obsSphere = NULL; + obsSphere = new SPHERE(0.375,0.5,0.375, 0.1); // for 4 to 3 domain + addObstacle(obsSphere); + delete obsSphere; + */ +} + +FLUID_3D::~FLUID_3D() +{ + if (_divergence) delete[] _divergence; + if (_pressure) delete[] _pressure; + if (_xVelocity) delete[] _xVelocity; + if (_yVelocity) delete[] _yVelocity; + if (_zVelocity) delete[] _zVelocity; + if (_xVelocityOld) delete[] _xVelocityOld; + if (_yVelocityOld) delete[] _yVelocityOld; + if (_zVelocityOld) delete[] _zVelocityOld; + if (_xForce) delete[] _xForce; + if (_yForce) delete[] _yForce; + if (_zForce) delete[] _zForce; + if (_residual) delete[] _residual; + if (_direction) delete[] _direction; + if (_q) delete[] _q; + if (_density) delete[] _density; + if (_densityOld) delete[] _densityOld; + if (_heat) delete[] _heat; + if (_heatOld) delete[] _heatOld; + if (_xVorticity) delete[] _xVorticity; + if (_yVorticity) delete[] _yVorticity; + if (_zVorticity) delete[] _zVorticity; + if (_vorticity) delete[] _vorticity; + if (_obstacles) delete[] _obstacles; + if (_wTurbulence) delete _wTurbulence; + + printf("deleted fluid\n"); +} + +// init direct access functions from blender +void FLUID_3D::initBlenderRNA(float *alpha, float *beta) +{ + _alpha = alpha; + _beta = beta; + + // XXX TODO DEBUG + // *_alpha = 0; + // *_beta = 0; +} + +////////////////////////////////////////////////////////////////////// +// step simulation once +////////////////////////////////////////////////////////////////////// +void FLUID_3D::step() +{ + // wipe forces + for (int i = 0; i < _totalCells; i++) + _xForce[i] = _yForce[i] = _zForce[i] = 0.0f; + + wipeBoundaries(); + + // run the solvers + addVorticity(); + addBuoyancy(_heat, _density); + addForce(); + project(); + diffuseHeat(); + + // advect everything + advectMacCormack(); + + if(_wTurbulence) { + _wTurbulence->stepTurbulenceFull(_dt/_dx, + _xVelocity, _yVelocity, _zVelocity, _obstacles); + // _wTurbulence->stepTurbulenceReadable(_dt/_dx, + // _xVelocity, _yVelocity, _zVelocity, _obstacles); + } +/* + // no file output + float *src = _density; + string prefix = string("./original.preview/density_fullxy_"); + writeImageSliceXY(src,_res, _res[2]/2, prefix, _totalSteps); +*/ + // artificial damping -- this is necessary because we use a + // collated grid, and at very coarse grid resolutions, banding + // artifacts can occur + artificialDamping(_xVelocity); + artificialDamping(_yVelocity); + artificialDamping(_zVelocity); +/* +// no file output + string pbrtPrefix = string("./pbrt/density_small_"); + IMAGE::dumpPBRT(_totalSteps, pbrtPrefix, _density, _res[0],_res[1],_res[2]); + */ + _totalTime += _dt; + _totalSteps++; +} + +////////////////////////////////////////////////////////////////////// +// helper function to dampen co-located grid artifacts of given arrays in intervals +// (only needed for velocity, strength (w) depends on testcase... +////////////////////////////////////////////////////////////////////// +void FLUID_3D::artificialDamping(float* field) { + const float w = 0.9; + if(_totalSteps % 4 == 1) { + for (int z = 1; z < _res[2]-1; z++) + for (int y = 1; y < _res[1]-1; y++) + for (int x = 1+(y+z)%2; x < _res[0]-1; x+=2) { + const int index = x + y*_res[0] + z * _slabSize; + field[index] = (1-w)*field[index] + 1./6. * w*( + field[index+1] + field[index-1] + + field[index+_res[0]] + field[index-_res[0]] + + field[index+_slabSize] + field[index-_slabSize] ); + } + } + if(_totalSteps % 4 == 3) { + for (int z = 1; z < _res[2]-1; z++) + for (int y = 1; y < _res[1]-1; y++) + for (int x = 1+(y+z+1)%2; x < _res[0]-1; x+=2) { + const int index = x + y*_res[0] + z * _slabSize; + field[index] = (1-w)*field[index] + 1./6. * w*( + field[index+1] + field[index-1] + + field[index+_res[0]] + field[index-_res[0]] + + field[index+_slabSize] + field[index-_slabSize] ); + } + } +} + +////////////////////////////////////////////////////////////////////// +// copy out the boundary in all directions +////////////////////////////////////////////////////////////////////// +void FLUID_3D::copyBorderAll(float* field) +{ + int index; + for (int y = 0; y < _yRes; y++) + for (int x = 0; x < _xRes; x++) + { + // front slab + index = x + y * _xRes; + field[index] = field[index + _slabSize]; + + // back slab + index += _totalCells - _slabSize; + field[index] = field[index - _slabSize]; + } + + for (int z = 0; z < _zRes; z++) + for (int x = 0; x < _xRes; x++) + { + // bottom slab + index = x + z * _slabSize; + field[index] = field[index + _xRes]; + + // top slab + index += _slabSize - _xRes; + field[index] = field[index - _xRes]; + } + + for (int z = 0; z < _zRes; z++) + for (int y = 0; y < _yRes; y++) + { + // left slab + index = y * _xRes + z * _slabSize; + field[index] = field[index + 1]; + + // right slab + index += _xRes - 1; + field[index] = field[index - 1]; + } +} + +////////////////////////////////////////////////////////////////////// +// wipe boundaries of velocity and density +////////////////////////////////////////////////////////////////////// +void FLUID_3D::wipeBoundaries() +{ + setZeroBorder(_xVelocity, _res); + setZeroBorder(_yVelocity, _res); + setZeroBorder(_zVelocity, _res); + setZeroBorder(_density, _res); +} + +////////////////////////////////////////////////////////////////////// +// add forces to velocity field +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addForce() +{ + for (int i = 0; i < _totalCells; i++) + { + _xVelocity[i] += _dt * _xForce[i]; + _yVelocity[i] += _dt * _yForce[i]; + _zVelocity[i] += _dt * _zForce[i]; + } +} + +////////////////////////////////////////////////////////////////////// +// project into divergence free field +////////////////////////////////////////////////////////////////////// +void FLUID_3D::project() +{ + int index, x, y, z; + setObstacleBoundaries(); + + // copy out the boundaries + if(DOMAIN_BC_LEFT == 0) setNeumannX(_xVelocity, _res); + else setZeroX(_xVelocity, _res); + + if(DOMAIN_BC_TOP == 0) setNeumannY(_yVelocity, _res); + else setZeroY(_yVelocity, _res); + + if(DOMAIN_BC_FRONT == 0) setNeumannZ(_zVelocity, _res); + else setZeroZ(_zVelocity, _res); + + // calculate divergence + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + float xright = _xVelocity[index + 1]; + float xleft = _xVelocity[index - 1]; + float yup = _yVelocity[index + _xRes]; + float ydown = _yVelocity[index - _xRes]; + float ztop = _zVelocity[index + _slabSize]; + float zbottom = _zVelocity[index - _slabSize]; + + if(_obstacles[index+1]) xright = - _xVelocity[index]; + if(_obstacles[index-1]) xleft = - _xVelocity[index]; + if(_obstacles[index+_xRes]) yup = - _yVelocity[index]; + if(_obstacles[index-_xRes]) ydown = - _yVelocity[index]; + if(_obstacles[index+_slabSize]) ztop = - _zVelocity[index]; + if(_obstacles[index-_slabSize]) zbottom = - _zVelocity[index]; + + _divergence[index] = -_dx * 0.5f * ( + xright - xleft + + yup - ydown + + ztop - zbottom ); + _pressure[index] = 0.0f; + } + copyBorderAll(_pressure); + + // solve Poisson equation + solvePressure(_pressure, _divergence, _obstacles); + + // project out solution + float invDx = 1.0f / _dx; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + _xVelocity[index] -= 0.5f * (_pressure[index + 1] - _pressure[index - 1]) * invDx; + _yVelocity[index] -= 0.5f * (_pressure[index + _xRes] - _pressure[index - _xRes]) * invDx; + _zVelocity[index] -= 0.5f * (_pressure[index + _slabSize] - _pressure[index - _slabSize]) * invDx; + } +} + +////////////////////////////////////////////////////////////////////// +// diffuse heat +////////////////////////////////////////////////////////////////////// +void FLUID_3D::diffuseHeat() +{ + SWAP_POINTERS(_heat, _heatOld); + + copyBorderAll(_heatOld); + solveHeat(_heat, _heatOld, _obstacles); + + // zero out inside obstacles + for (int x = 0; x < _totalCells; x++) + if (_obstacles[x]) + _heat[x] = 0.0f; +} + +////////////////////////////////////////////////////////////////////// +// stamp an obstacle in the _obstacles field +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addObstacle(OBSTACLE* obstacle) +{ + int index = 0; + for (int z = 0; z < _zRes; z++) + for (int y = 0; y < _yRes; y++) + for (int x = 0; x < _xRes; x++, index++) + if (obstacle->inside(x * _dx, y * _dx, z * _dx)) { + _obstacles[index] = true; + } +} + +////////////////////////////////////////////////////////////////////// +// calculate the obstacle directional types +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setObstacleBoundaries() +{ + // cull degenerate obstacles , move to addObstacle? + for (int z = 1, index = _slabSize + _xRes + 1; + z < _zRes - 1; z++, index += 2 * _xRes) + for (int y = 1; y < _yRes - 1; y++, index += 2) + for (int x = 1; x < _xRes - 1; x++, index++) + if (_obstacles[index] != EMPTY) + { + const int top = _obstacles[index + _slabSize]; + const int bottom= _obstacles[index - _slabSize]; + const int up = _obstacles[index + _xRes]; + const int down = _obstacles[index - _xRes]; + const int left = _obstacles[index - 1]; + const int right = _obstacles[index + 1]; + + int counter = 0; + if (up) counter++; + if (down) counter++; + if (left) counter++; + if (right) counter++; + if (top) counter++; + if (bottom) counter++; + + if (counter < 3) + _obstacles[index] = EMPTY; + } + + // tag remaining obstacle blocks + for (int z = 1, index = _slabSize + _xRes + 1; + z < _zRes - 1; z++, index += 2 * _xRes) + for (int y = 1; y < _yRes - 1; y++, index += 2) + for (int x = 1; x < _xRes - 1; x++, index++) + { + // could do cascade of ifs, but they are a pain + if (_obstacles[index] != EMPTY) + { + const int top = _obstacles[index + _slabSize]; + const int bottom= _obstacles[index - _slabSize]; + const int up = _obstacles[index + _xRes]; + const int down = _obstacles[index - _xRes]; + const int left = _obstacles[index - 1]; + const int right = _obstacles[index + 1]; + const bool fullz = (top && bottom); + const bool fully = (up && down); + const bool fullx = (left && right); + + _xVelocity[index] = + _yVelocity[index] = + _zVelocity[index] = 0.0f; + _pressure[index] = 0.0f; + + // average pressure neighbors + float pcnt = 0.; + if (left && !right) { + _pressure[index] += _pressure[index + 1]; + pcnt += 1.; + } + if (!left && right) { + _pressure[index] += _pressure[index - 1]; + pcnt += 1.; + } + if (up && !down) { + _pressure[index] += _pressure[index - _xRes]; + pcnt += 1.; + } + if (!up && down) { + _pressure[index] += _pressure[index + _xRes]; + pcnt += 1.; + } + if (top && !bottom) { + _pressure[index] += _pressure[index - _xRes]; + pcnt += 1.; + } + if (!top && bottom) { + _pressure[index] += _pressure[index + _xRes]; + pcnt += 1.; + } + _pressure[index] /= pcnt; + + // TODO? set correct velocity bc's + // velocities are only set to zero right now + // this means it's not a full no-slip boundary condition + // but a "half-slip" - still looks ok right now + } + } +} + +////////////////////////////////////////////////////////////////////// +// add buoyancy forces +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addBuoyancy(float *heat, float *density) +{ + int index = 0; + + for (int z = 0; z < _zRes; z++) + for (int y = 0; y < _yRes; y++) + for (int x = 0; x < _xRes; x++, index++) + { + _zForce[index] += *_alpha * density[index] + (*_beta * (heat[index] - _tempAmb)); // DG: was _yForce, changed for Blender + } +} + +////////////////////////////////////////////////////////////////////// +// add vorticity to the force field +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addVorticity() +{ + int x,y,z,index; + if(_vorticityEps<=0.) return; + + // calculate vorticity + float gridSize = 0.5f / _dx; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + int up = _obstacles[index + _xRes] ? index : index + _xRes; + int down = _obstacles[index - _xRes] ? index : index - _xRes; + float dy = (up == index || down == index) ? 1.0f / _dx : gridSize; + int out = _obstacles[index + _slabSize] ? index : index + _slabSize; + int in = _obstacles[index - _slabSize] ? index : index - _slabSize; + float dz = (out == index || in == index) ? 1.0f / _dx : gridSize; + int right = _obstacles[index + 1] ? index : index + 1; + int left = _obstacles[index - 1] ? index : index - 1; + float dx = (right == index || right == index) ? 1.0f / _dx : gridSize; + + _xVorticity[index] = (_zVelocity[up] - _zVelocity[down]) * dy + (-_yVelocity[out] + _yVelocity[in]) * dz; + _yVorticity[index] = (_xVelocity[out] - _xVelocity[in]) * dz + (-_zVelocity[right] + _zVelocity[left]) * dx; + _zVorticity[index] = (_yVelocity[right] - _yVelocity[left]) * dx + (-_xVelocity[up] + _xVelocity[down])* dy; + + _vorticity[index] = sqrtf(_xVorticity[index] * _xVorticity[index] + + _yVorticity[index] * _yVorticity[index] + + _zVorticity[index] * _zVorticity[index]); + } + + // calculate normalized vorticity vectors + float eps = _vorticityEps; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + if (!_obstacles[index]) + { + float N[3]; + + int up = _obstacles[index + _xRes] ? index : index + _xRes; + int down = _obstacles[index - _xRes] ? index : index - _xRes; + float dy = (up == index || down == index) ? 1.0f / _dx : gridSize; + int out = _obstacles[index + _slabSize] ? index : index + _slabSize; + int in = _obstacles[index - _slabSize] ? index : index - _slabSize; + float dz = (out == index || in == index) ? 1.0f / _dx : gridSize; + int right = _obstacles[index + 1] ? index : index + 1; + int left = _obstacles[index - 1] ? index : index - 1; + float dx = (right == index || right == index) ? 1.0f / _dx : gridSize; + N[0] = (_vorticity[right] - _vorticity[left]) * dx; + N[1] = (_vorticity[up] - _vorticity[down]) * dy; + N[2] = (_vorticity[out] - _vorticity[in]) * dz; + + float magnitude = sqrtf(N[0] * N[0] + N[1] * N[1] + N[2] * N[2]); + if (magnitude > 0.0f) + { + magnitude = 1.0f / magnitude; + N[0] *= magnitude; + N[1] *= magnitude; + N[2] *= magnitude; + + _xForce[index] += (N[1] * _zVorticity[index] - N[2] * _yVorticity[index]) * _dx * eps; + _yForce[index] -= (N[0] * _zVorticity[index] - N[2] * _xVorticity[index]) * _dx * eps; + _zForce[index] += (N[0] * _yVorticity[index] - N[1] * _xVorticity[index]) * _dx * eps; + } + } +} + +////////////////////////////////////////////////////////////////////// +// Advect using the MacCormack method from the Selle paper +////////////////////////////////////////////////////////////////////// +void FLUID_3D::advectMacCormack() +{ + Vec3Int res = Vec3Int(_xRes,_yRes,_zRes); + + if(DOMAIN_BC_LEFT == 0) copyBorderX(_xVelocity, res); + else setZeroX(_xVelocity, res); + + if(DOMAIN_BC_TOP == 0) copyBorderY(_yVelocity, res); + else setZeroY(_yVelocity, res); + + if(DOMAIN_BC_FRONT == 0) copyBorderZ(_zVelocity, res); + else setZeroZ(_zVelocity, res); + + SWAP_POINTERS(_xVelocity, _xVelocityOld); + SWAP_POINTERS(_yVelocity, _yVelocityOld); + SWAP_POINTERS(_zVelocity, _zVelocityOld); + SWAP_POINTERS(_density, _densityOld); + SWAP_POINTERS(_heat, _heatOld); + + const float dt0 = _dt / _dx; + // use force arrays as temp arrays + for (int x = 0; x < _totalCells; x++) + _xForce[x] = _yForce[x] = 0.0; + float* t1 = _xForce; + float* t2 = _yForce; + + advectFieldMacCormack(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _densityOld, _density, t1,t2, res, NULL); + advectFieldMacCormack(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _heatOld, _heat, t1,t2, res, NULL); + advectFieldMacCormack(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _xVelocityOld, _xVelocity, t1,t2, res, NULL); + advectFieldMacCormack(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _yVelocityOld, _yVelocity, t1,t2, res, NULL); + advectFieldMacCormack(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _zVelocityOld, _zVelocity, t1,t2, res, NULL); + + if(DOMAIN_BC_LEFT == 0) copyBorderX(_xVelocity, res); + else setZeroX(_xVelocity, res); + + if(DOMAIN_BC_TOP == 0) copyBorderY(_yVelocity, res); + else setZeroY(_yVelocity, res); + + if(DOMAIN_BC_FRONT == 0) copyBorderZ(_zVelocity, res); + else setZeroZ(_zVelocity, res); + + setZeroBorder(_density, res); + setZeroBorder(_heat, res); + + for (int x = 0; x < _totalCells; x++) + t1[x] = t2[x] = 0.0; +} diff --git a/intern/smoke/intern/FLUID_3D.h b/intern/smoke/intern/FLUID_3D.h new file mode 100644 index 00000000000..c26ed14406a --- /dev/null +++ b/intern/smoke/intern/FLUID_3D.h @@ -0,0 +1,176 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// FLUID_3D.h: interface for the FLUID_3D class. +// +////////////////////////////////////////////////////////////////////// + +#ifndef FLUID_3D_H +#define FLUID_3D_H + +#include +#include +#include +#include "OBSTACLE.h" +#include "WTURBULENCE.h" +#include "VEC3.h" + +using namespace std; +using namespace BasicVector; +class WTURBULENCE; + +class FLUID_3D +{ + public: + FLUID_3D(int *res, int amplify, float *p0, float *p1, float dt); + FLUID_3D() {}; + virtual ~FLUID_3D(); + + void initBlenderRNA(float *alpha, float *beta); + + // create & allocate vector noise advection + void initVectorNoise(int amplify); + + void addSmokeColumn(); + static void addSmokeTestCase(float* field, Vec3Int res, float value); + + void step(); + void addObstacle(OBSTACLE* obstacle); + + const float* xVelocity() { return _xVelocity; }; + const float* yVelocity() { return _yVelocity; }; + const float* zVelocity() { return _zVelocity; }; + + int xRes() const { return _xRes; }; + int yRes() const { return _yRes; }; + int zRes() const { return _zRes; }; + + public: + // dimensions + int _xRes, _yRes, _zRes, _maxRes; + Vec3Int _res; + int _totalCells; + int _slabSize; + float _dx; + float _p0[3]; + float _p1[3]; + float _totalTime; + int _totalSteps; + int _totalImgDumps; + int _totalVelDumps; + + void artificialDamping(float* field); + + // fields + float* _density; + float* _densityOld; + float* _heat; + float* _heatOld; + float* _pressure; + float* _xVelocity; + float* _yVelocity; + float* _zVelocity; + float* _xVelocityOld; + float* _yVelocityOld; + float* _zVelocityOld; + float* _xForce; + float* _yForce; + float* _zForce; + float* _divergence; + float* _xVorticity; + float* _yVorticity; + float* _zVorticity; + float* _vorticity; + unsigned char* _obstacles; + + // CG fields + float* _residual; + float* _direction; + float* _q; + int _iterations; + + // simulation constants + float _dt; + float _vorticityEps; + float _heatDiffusion; + float *_alpha; // for the buoyancy density term <-- as pointer to get blender RNA in here + float *_beta; // was _buoyancy <-- as pointer to get blender RNA in here + float _tempAmb; /* ambient temperature */ + + // WTURBULENCE object, if active + WTURBULENCE* _wTurbulence; + + // boundary setting functions + void copyBorderAll(float* field); + + // timestepping functions + void wipeBoundaries(); + void addForce(); + void addVorticity(); + void addBuoyancy(float *heat, float *density); + + // solver stuff + void project(); + void diffuseHeat(); + void solvePressure(float* field, float* b, unsigned char* skip); + void solveHeat(float* field, float* b, unsigned char* skip); + + // handle obstacle boundaries + void setObstacleBoundaries(); + + public: + // advection, accessed e.g. by WTURBULENCE class + void advectMacCormack(); + + // boundary setting functions + static void copyBorderX(float* field, Vec3Int res); + static void copyBorderY(float* field, Vec3Int res); + static void copyBorderZ(float* field, Vec3Int res); + static void setNeumannX(float* field, Vec3Int res); + static void setNeumannY(float* field, Vec3Int res); + static void setNeumannZ(float* field, Vec3Int res); + static void setZeroX(float* field, Vec3Int res); + static void setZeroY(float* field, Vec3Int res); + static void setZeroZ(float* field, Vec3Int res); + static void setZeroBorder(float* field, Vec3Int res) { + setZeroX(field, res); + setZeroY(field, res); + setZeroZ(field, res); + }; + + // static advection functions, also used by WTURBULENCE + static void advectFieldSemiLagrange(const float dt, const float* velx, const float* vely, const float* velz, + float* oldField, float* newField, Vec3Int res); + static void advectFieldMacCormack(const float dt, const float* xVelocity, const float* yVelocity, const float* zVelocity, + float* oldField, float* newField, float* temp1, float* temp2, Vec3Int res, const float* obstacles); + + // maccormack helper functions + static void clampExtrema(const float dt, const float* xVelocity, const float* yVelocity, const float* zVelocity, + float* oldField, float* newField, Vec3Int res); + static void clampOutsideRays(const float dt, const float* xVelocity, const float* yVelocity, const float* zVelocity, + float* oldField, float* newField, Vec3Int res, const float* obstacles, const float *oldAdvection); + + // output helper functions + static void writeImageSliceXY(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + static void writeImageSliceYZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + static void writeImageSliceXZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + static void writeProjectedIntern(const float *field, Vec3Int res, int dir1, int dir2, string prefix, int picCnt, float scale=1.); +}; + +#endif + diff --git a/intern/smoke/intern/FLUID_3D_SOLVERS.cpp b/intern/smoke/intern/FLUID_3D_SOLVERS.cpp new file mode 100644 index 00000000000..b628d48b943 --- /dev/null +++ b/intern/smoke/intern/FLUID_3D_SOLVERS.cpp @@ -0,0 +1,318 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// FLUID_3D.cpp: implementation of the FLUID_3D class. +// +////////////////////////////////////////////////////////////////////// + +#include "FLUID_3D.h" +#define SOLVER_ACCURACY 1e-06 + +////////////////////////////////////////////////////////////////////// +// solve the poisson equation with CG +////////////////////////////////////////////////////////////////////// +void FLUID_3D::solvePressure(float* field, float* b, unsigned char* skip) +{ + int x, y, z, index; + + // i = 0 + int i = 0; + + // r = b - Ax + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + // if the cell is a variable + float Acenter = 0.0f; + if (!skip[index]) + { + // set the matrix to the Poisson stencil in order + if (!skip[index + 1]) Acenter += 1.; + if (!skip[index - 1]) Acenter += 1.; + if (!skip[index + _xRes]) Acenter += 1.; + if (!skip[index - _xRes]) Acenter += 1.; + if (!skip[index + _slabSize]) Acenter += 1.; + if (!skip[index - _slabSize]) Acenter += 1.; + } + + _residual[index] = b[index] - (Acenter * field[index] + + field[index - 1] * (skip[index - 1] ? 0.0 : -1.0f)+ + field[index + 1] * (skip[index + 1] ? 0.0 : -1.0f)+ + field[index - _xRes] * (skip[index - _xRes] ? 0.0 : -1.0f)+ + field[index + _xRes] * (skip[index + _xRes] ? 0.0 : -1.0f)+ + field[index - _slabSize] * (skip[index - _slabSize] ? 0.0 : -1.0f)+ + field[index + _slabSize] * (skip[index + _slabSize] ? 0.0 : -1.0f) ); + _residual[index] = (skip[index]) ? 0.0f : _residual[index]; + } + + // d = r + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + _direction[index] = _residual[index]; + + // deltaNew = transpose(r) * r + float deltaNew = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + deltaNew += _residual[index] * _residual[index]; + + // delta0 = deltaNew + float delta0 = deltaNew; + + // While deltaNew > (eps^2) * delta0 + const float eps = SOLVER_ACCURACY; + float maxR = 2.0f * eps; + while ((i < _iterations) && (maxR > eps)) + { + // q = Ad + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + // if the cell is a variable + float Acenter = 0.0f; + if (!skip[index]) + { + // set the matrix to the Poisson stencil in order + if (!skip[index + 1]) Acenter += 1.; + if (!skip[index - 1]) Acenter += 1.; + if (!skip[index + _xRes]) Acenter += 1.; + if (!skip[index - _xRes]) Acenter += 1.; + if (!skip[index + _slabSize]) Acenter += 1.; + if (!skip[index - _slabSize]) Acenter += 1.; + } + + _q[index] = Acenter * _direction[index] + + _direction[index - 1] * (skip[index - 1] ? 0.0 : -1.0f) + + _direction[index + 1] * (skip[index + 1] ? 0.0 : -1.0f) + + _direction[index - _xRes] * (skip[index - _xRes] ? 0.0 : -1.0f) + + _direction[index + _xRes] * (skip[index + _xRes] ? 0.0 : -1.0f)+ + _direction[index - _slabSize] * (skip[index - _slabSize] ? 0.0 : -1.0f) + + _direction[index + _slabSize] * (skip[index + _slabSize] ? 0.0 : -1.0f); + _q[index] = (skip[index]) ? 0.0f : _q[index]; + } + + // alpha = deltaNew / (transpose(d) * q) + float alpha = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + alpha += _direction[index] * _q[index]; + if (fabs(alpha) > 0.0f) + alpha = deltaNew / alpha; + + // x = x + alpha * d + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + field[index] += alpha * _direction[index]; + + // r = r - alpha * q + maxR = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + _residual[index] -= alpha * _q[index]; + maxR = (_residual[index] > maxR) ? _residual[index] : maxR; + } + + // deltaOld = deltaNew + float deltaOld = deltaNew; + + // deltaNew = transpose(r) * r + deltaNew = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + deltaNew += _residual[index] * _residual[index]; + + // beta = deltaNew / deltaOld + float beta = deltaNew / deltaOld; + + // d = r + beta * d + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + _direction[index] = _residual[index] + beta * _direction[index]; + + // i = i + 1 + i++; + } + cout << i << " iterations converged to " << maxR << endl; +} + +////////////////////////////////////////////////////////////////////// +// solve the heat equation with CG +////////////////////////////////////////////////////////////////////// +void FLUID_3D::solveHeat(float* field, float* b, unsigned char* skip) +{ + int x, y, z, index; + const float heatConst = _dt * _heatDiffusion / (_dx * _dx); + + // i = 0 + int i = 0; + + // r = b - Ax + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + // if the cell is a variable + float Acenter = 1.0f; + if (!skip[index]) + { + // set the matrix to the Poisson stencil in order + if (!skip[index + 1]) Acenter += heatConst; + if (!skip[index - 1]) Acenter += heatConst; + if (!skip[index + _xRes]) Acenter += heatConst; + if (!skip[index - _xRes]) Acenter += heatConst; + if (!skip[index + _slabSize]) Acenter += heatConst; + if (!skip[index - _slabSize]) Acenter += heatConst; + } + + _residual[index] = b[index] - (Acenter * field[index] + + field[index - 1] * (skip[index - 1] ? 0.0 : -heatConst) + + field[index + 1] * (skip[index + 1] ? 0.0 : -heatConst) + + field[index - _xRes] * (skip[index - _xRes] ? 0.0 : -heatConst) + + field[index + _xRes] * (skip[index + _xRes] ? 0.0 : -heatConst) + + field[index - _slabSize] * (skip[index - _slabSize] ? 0.0 : -heatConst) + + field[index + _slabSize] * (skip[index + _slabSize] ? 0.0 : -heatConst)); + _residual[index] = (skip[index]) ? 0.0f : _residual[index]; + } + + // d = r + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + _direction[index] = _residual[index]; + + // deltaNew = transpose(r) * r + float deltaNew = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + deltaNew += _residual[index] * _residual[index]; + + // delta0 = deltaNew + float delta0 = deltaNew; + + // While deltaNew > (eps^2) * delta0 + const float eps = SOLVER_ACCURACY; + float maxR = 2.0f * eps; + while ((i < _iterations) && (maxR > eps)) + { + // q = Ad + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + // if the cell is a variable + float Acenter = 1.0f; + if (!skip[index]) + { + // set the matrix to the Poisson stencil in order + if (!skip[index + 1]) Acenter += heatConst; + if (!skip[index - 1]) Acenter += heatConst; + if (!skip[index + _xRes]) Acenter += heatConst; + if (!skip[index - _xRes]) Acenter += heatConst; + if (!skip[index + _slabSize]) Acenter += heatConst; + if (!skip[index - _slabSize]) Acenter += heatConst; + } + + _q[index] = (Acenter * _direction[index] + + _direction[index - 1] * (skip[index - 1] ? 0.0 : -heatConst) + + _direction[index + 1] * (skip[index + 1] ? 0.0 : -heatConst) + + _direction[index - _xRes] * (skip[index - _xRes] ? 0.0 : -heatConst) + + _direction[index + _xRes] * (skip[index + _xRes] ? 0.0 : -heatConst) + + _direction[index - _slabSize] * (skip[index - _slabSize] ? 0.0 : -heatConst) + + _direction[index + _slabSize] * (skip[index + _slabSize] ? 0.0 : -heatConst)); + + _q[index] = (skip[index]) ? 0.0f : _q[index]; + } + + // alpha = deltaNew / (transpose(d) * q) + float alpha = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + alpha += _direction[index] * _q[index]; + if (fabs(alpha) > 0.0f) + alpha = deltaNew / alpha; + + // x = x + alpha * d + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + field[index] += alpha * _direction[index]; + + // r = r - alpha * q + maxR = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + { + _residual[index] -= alpha * _q[index]; + maxR = (_residual[index] > maxR) ? _residual[index] : maxR; + } + + // deltaOld = deltaNew + float deltaOld = deltaNew; + + // deltaNew = transpose(r) * r + deltaNew = 0.0f; + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + deltaNew += _residual[index] * _residual[index]; + + // beta = deltaNew / deltaOld + float beta = deltaNew / deltaOld; + + // d = r + beta * d + index = _slabSize + _xRes + 1; + for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) + for (y = 1; y < _yRes - 1; y++, index += 2) + for (x = 1; x < _xRes - 1; x++, index++) + _direction[index] = _residual[index] + beta * _direction[index]; + + // i = i + 1 + i++; + } + cout << i << " iterations converged to " << maxR << endl; +} diff --git a/intern/smoke/intern/FLUID_3D_STATIC.cpp b/intern/smoke/intern/FLUID_3D_STATIC.cpp new file mode 100644 index 00000000000..7ebe987aaa2 --- /dev/null +++ b/intern/smoke/intern/FLUID_3D_STATIC.cpp @@ -0,0 +1,650 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// FLUID_3D.cpp: implementation of the static functions of the FLUID_3D class. +// +////////////////////////////////////////////////////////////////////// + +#include +#include "FLUID_3D.h" +#include "IMAGE.h" +#include "WTURBULENCE.h" +#include "INTERPOLATE.h" + +////////////////////////////////////////////////////////////////////// +// add a test cube of density to the center +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addSmokeColumn() { + addSmokeTestCase(_density, _res, 1.0); + // addSmokeTestCase(_zVelocity, _res, 1.0); + addSmokeTestCase(_heat, _res, 1.0); + if (_wTurbulence) { + addSmokeTestCase(_wTurbulence->getDensityBig(), _wTurbulence->getResBig(), 1.0); + } +} + +////////////////////////////////////////////////////////////////////// +// generic static version, so that it can be applied to the +// WTURBULENCE grid as well +////////////////////////////////////////////////////////////////////// +void FLUID_3D::addSmokeTestCase(float* field, Vec3Int res, float value) +{ + const int slabSize = res[0]*res[1]; int maxRes = (int)MAX3V(res); + float dx = 1.0f / (float)maxRes; + + float xTotal = dx * res[0]; + float yTotal = dx * res[1]; + float zTotal = dx * res[2]; + + float heighMin = 0.05; + float heighMax = 0.10; + + for (int y = 0; y < res[1]; y++) + for (int z = (int)(heighMin*res[2]); z <= (int)(heighMax * res[1]); z++) + for (int x = 0; x < res[0]; x++) + { + float xLength = x * dx - xTotal * 0.4f; + float yLength = y * dx - zTotal * 0.5f; + float radius = sqrtf(xLength * xLength + yLength * yLength); + + if (radius < 0.075f * xTotal) + { + int index = x + y * res[0] + z * slabSize; + field[index] = value; + } + } +} + +////////////////////////////////////////////////////////////////////// +// set x direction to Neumann boundary conditions +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setNeumannX(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + int index; + for (int z = 0; z < res[2]; z++) + for (int y = 0; y < res[1]; y++) + { + // left slab + index = y * res[0] + z * slabSize; + field[index] = field[index + 2]; + + // right slab + index += res[0] - 1; + field[index] = field[index - 2]; + } + } + +////////////////////////////////////////////////////////////////////// +// set y direction to Neumann boundary conditions +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setNeumannY(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + int index; + for (int z = 0; z < res[2]; z++) + for (int x = 0; x < res[0]; x++) + { + // bottom slab + index = x + z * slabSize; + field[index] = field[index + 2 * res[0]]; + + // top slab + index += slabSize - res[0]; + field[index] = field[index - 2 * res[0]]; + } + + // fix, force top slab to only allow outwards flux + for (int z = 0; z < res[2]; z++) + for (int x = 0; x < res[0]; x++) + { + // top slab + int index = x + z * slabSize; + index += slabSize - res[0]; + if(field[index]<0.) field[index] = 0.; + index -= res[0]; + if(field[index]<0.) field[index] = 0.; + } +} + +////////////////////////////////////////////////////////////////////// +// set z direction to Neumann boundary conditions +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setNeumannZ(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + const int totalCells = res[0] * res[1] * res[2]; + int index; + for (int y = 0; y < res[1]; y++) + for (int x = 0; x < res[0]; x++) + { + // front slab + index = x + y * res[0]; + field[index] = field[index + 2 * slabSize]; + + // back slab + index += totalCells - slabSize; + field[index] = field[index - 2 * slabSize]; + } +} + +////////////////////////////////////////////////////////////////////// +// set x direction to zero +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setZeroX(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + int index; + for (int z = 0; z < res[2]; z++) + for (int y = 0; y < res[1]; y++) + { + // left slab + index = y * res[0] + z * slabSize; + field[index] = 0.0f; + + // right slab + index += res[0] - 1; + field[index] = 0.0f; + } +} + +////////////////////////////////////////////////////////////////////// +// set y direction to zero +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setZeroY(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + int index; + for (int z = 0; z < res[2]; z++) + for (int x = 0; x < res[0]; x++) + { + // bottom slab + index = x + z * slabSize; + field[index] = 0.0f; + + // top slab + index += slabSize - res[0]; + field[index] = 0.0f; + } +} + +////////////////////////////////////////////////////////////////////// +// set z direction to zero +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setZeroZ(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + const int totalCells = res[0] * res[1] * res[2]; + int index; + for (int y = 0; y < res[1]; y++) + for (int x = 0; x < res[0]; x++) + { + // front slab + index = x + y * res[0]; + field[index] = 0.0f; + + // back slab + index += totalCells - slabSize; + field[index] = 0.0f; + } + } + +////////////////////////////////////////////////////////////////////// +// copy grid boundary +////////////////////////////////////////////////////////////////////// +void FLUID_3D::copyBorderX(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + int index; + for (int z = 0; z < res[2]; z++) + for (int y = 0; y < res[1]; y++) + { + // left slab + index = y * res[0] + z * slabSize; + field[index] = field[index + 1]; + + // right slab + index += res[0] - 1; + field[index] = field[index - 1]; + } +} +void FLUID_3D::copyBorderY(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + const int totalCells = res[0] * res[1] * res[2]; + int index; + for (int z = 0; z < res[2]; z++) + for (int x = 0; x < res[0]; x++) + { + // bottom slab + index = x + z * slabSize; + field[index] = field[index + res[0]]; + // top slab + index += slabSize - res[0]; + field[index] = field[index - res[0]]; + } +} +void FLUID_3D::copyBorderZ(float* field, Vec3Int res) +{ + const int slabSize = res[0] * res[1]; + const int totalCells = res[0] * res[1] * res[2]; + int index; + for (int y = 0; y < res[1]; y++) + for (int x = 0; x < res[0]; x++) + { + // front slab + index = x + y * res[0]; + field[index] = field[index + slabSize]; + // back slab + index += totalCells - slabSize; + field[index] = field[index - slabSize]; + } +} + +///////////////////////////////////////////////////////////////////// +// advect field with the semi lagrangian method +////////////////////////////////////////////////////////////////////// +void FLUID_3D::advectFieldSemiLagrange(const float dt, const float* velx, const float* vely, const float* velz, + float* oldField, float* newField, Vec3Int res) +{ + const int xres = res[0]; + const int yres = res[1]; + const int zres = res[2]; + static int hits = 0; + static int total = 0; + const int slabSize = res[0] * res[1]; + + // scale dt up to grid resolution +#if PARALLEL==1 +#pragma omp parallel for schedule(static) +#endif + for (int z = 0; z < zres; z++) + for (int y = 0; y < yres; y++) + for (int x = 0; x < xres; x++) + { + const int index = x + y * xres + z * xres*yres; + + // backtrace + float xTrace = x - dt * velx[index]; + float yTrace = y - dt * vely[index]; + float zTrace = z - dt * velz[index]; + + // clamp backtrace to grid boundaries + if (xTrace < 0.5) xTrace = 0.5; + if (xTrace > xres - 1.5) xTrace = xres - 1.5; + if (yTrace < 0.5) yTrace = 0.5; + if (yTrace > yres - 1.5) yTrace = yres - 1.5; + if (zTrace < 0.5) zTrace = 0.5; + if (zTrace > zres - 1.5) zTrace = zres - 1.5; + + // locate neighbors to interpolate + const int x0 = (int)xTrace; + const int x1 = x0 + 1; + const int y0 = (int)yTrace; + const int y1 = y0 + 1; + const int z0 = (int)zTrace; + const int z1 = z0 + 1; + + // get interpolation weights + const float s1 = xTrace - x0; + const float s0 = 1.0f - s1; + const float t1 = yTrace - y0; + const float t0 = 1.0f - t1; + const float u1 = zTrace - z0; + const float u0 = 1.0f - u1; + + const int i000 = x0 + y0 * xres + z0 * slabSize; + const int i010 = x0 + y1 * xres + z0 * slabSize; + const int i100 = x1 + y0 * xres + z0 * slabSize; + const int i110 = x1 + y1 * xres + z0 * slabSize; + const int i001 = x0 + y0 * xres + z1 * slabSize; + const int i011 = x0 + y1 * xres + z1 * slabSize; + const int i101 = x1 + y0 * xres + z1 * slabSize; + const int i111 = x1 + y1 * xres + z1 * slabSize; + + // interpolate + // (indices could be computed once) + newField[index] = u0 * (s0 * (t0 * oldField[i000] + + t1 * oldField[i010]) + + s1 * (t0 * oldField[i100] + + t1 * oldField[i110])) + + u1 * (s0 * (t0 * oldField[i001] + + t1 * oldField[i011]) + + s1 * (t0 * oldField[i101] + + t1 * oldField[i111])); + } +} + +///////////////////////////////////////////////////////////////////// +// advect field with the maccormack method +// +// comments are the pseudocode from selle's paper +////////////////////////////////////////////////////////////////////// +void FLUID_3D::advectFieldMacCormack(const float dt, const float* xVelocity, const float* yVelocity, const float* zVelocity, + float* oldField, float* newField, float* temp1, float* temp2, Vec3Int res, const float* obstacles) +{ + float* phiHatN = temp1; + float* phiHatN1 = temp2; + const int sx= res[0]; + const int sy= res[1]; + const int sz= res[2]; + + for (int x = 0; x < sx * sy * sz; x++) + phiHatN[x] = phiHatN1[x] = oldField[x]; + + float*& phiN = oldField; + float*& phiN1 = newField; + + // phiHatN1 = A(phiN) + advectFieldSemiLagrange( dt, xVelocity, yVelocity, zVelocity, phiN, phiHatN1, res); + + // phiHatN = A^R(phiHatN1) + advectFieldSemiLagrange( -1.0*dt, xVelocity, yVelocity, zVelocity, phiHatN1, phiHatN, res); + + // phiN1 = phiHatN1 + (phiN - phiHatN) / 2 + const int border = 0; + for (int z = border; z < sz-border; z++) + for (int y = border; y < sy-border; y++) + for (int x = border; x < sx-border; x++) { + int index = x + y * sx + z * sx*sy; + phiN1[index] = phiHatN1[index] + (phiN[index] - phiHatN[index]) * 0.50f; + //phiN1[index] = phiHatN1[index]; // debug, correction off + } + copyBorderX(phiN1, res); + copyBorderY(phiN1, res); + copyBorderZ(phiN1, res); + + // clamp any newly created extrema + clampExtrema(dt, xVelocity, yVelocity, zVelocity, oldField, newField, res); + + // if the error estimate was bad, revert to first order + clampOutsideRays(dt, xVelocity, yVelocity, zVelocity, oldField, newField, res, obstacles, phiHatN1); +} + + +////////////////////////////////////////////////////////////////////// +// Clamp the extrema generated by the BFECC error correction +////////////////////////////////////////////////////////////////////// +void FLUID_3D::clampExtrema(const float dt, const float* velx, const float* vely, const float* velz, + float* oldField, float* newField, Vec3Int res) +{ + const int xres= res[0]; + const int yres= res[1]; + const int zres= res[2]; + const int slabSize = res[0] * res[1]; + for (int z = 1; z < zres-1; z++) + for (int y = 1; y < yres-1; y++) + for (int x = 1; x < xres-1; x++) + { + const int index = x + y * xres+ z * xres*yres; + // backtrace + float xTrace = x - dt * velx[index]; + float yTrace = y - dt * vely[index]; + float zTrace = z - dt * velz[index]; + + // clamp backtrace to grid boundaries + if (xTrace < 0.5) xTrace = 0.5; + if (xTrace > xres - 1.5) xTrace = xres - 1.5; + if (yTrace < 0.5) yTrace = 0.5; + if (yTrace > yres - 1.5) yTrace = yres - 1.5; + if (zTrace < 0.5) zTrace = 0.5; + if (zTrace > zres - 1.5) zTrace = zres - 1.5; + + // locate neighbors to interpolate + const int x0 = (int)xTrace; + const int x1 = x0 + 1; + const int y0 = (int)yTrace; + const int y1 = y0 + 1; + const int z0 = (int)zTrace; + const int z1 = z0 + 1; + + const int i000 = x0 + y0 * xres + z0 * slabSize; + const int i010 = x0 + y1 * xres + z0 * slabSize; + const int i100 = x1 + y0 * xres + z0 * slabSize; + const int i110 = x1 + y1 * xres + z0 * slabSize; + const int i001 = x0 + y0 * xres + z1 * slabSize; + const int i011 = x0 + y1 * xres + z1 * slabSize; + const int i101 = x1 + y0 * xres + z1 * slabSize; + const int i111 = x1 + y1 * xres + z1 * slabSize; + + float minField = oldField[i000]; + float maxField = oldField[i000]; + + minField = (oldField[i010] < minField) ? oldField[i010] : minField; + maxField = (oldField[i010] > maxField) ? oldField[i010] : maxField; + + minField = (oldField[i100] < minField) ? oldField[i100] : minField; + maxField = (oldField[i100] > maxField) ? oldField[i100] : maxField; + + minField = (oldField[i110] < minField) ? oldField[i110] : minField; + maxField = (oldField[i110] > maxField) ? oldField[i110] : maxField; + + minField = (oldField[i001] < minField) ? oldField[i001] : minField; + maxField = (oldField[i001] > maxField) ? oldField[i001] : maxField; + + minField = (oldField[i011] < minField) ? oldField[i011] : minField; + maxField = (oldField[i011] > maxField) ? oldField[i011] : maxField; + + minField = (oldField[i101] < minField) ? oldField[i101] : minField; + maxField = (oldField[i101] > maxField) ? oldField[i101] : maxField; + + minField = (oldField[i111] < minField) ? oldField[i111] : minField; + maxField = (oldField[i111] > maxField) ? oldField[i111] : maxField; + + newField[index] = (newField[index] > maxField) ? maxField : newField[index]; + newField[index] = (newField[index] < minField) ? minField : newField[index]; + } +} + +////////////////////////////////////////////////////////////////////// +// Reverts any backtraces that go into boundaries back to first +// order -- in this case the error correction term was totally +// incorrect +////////////////////////////////////////////////////////////////////// +void FLUID_3D::clampOutsideRays(const float dt, const float* velx, const float* vely, const float* velz, + float* oldField, float* newField, Vec3Int res, const float* obstacles, const float *oldAdvection) +{ + const int sx= res[0]; + const int sy= res[1]; + const int sz= res[2]; + const int slabSize = res[0] * res[1]; + for (int z = 1; z < sz-1; z++) + for (int y = 1; y < sy-1; y++) + for (int x = 1; x < sx-1; x++) + { + const int index = x + y * sx+ z * slabSize; + // backtrace + float xBackward = x + dt * velx[index]; + float yBackward = y + dt * vely[index]; + float zBackward = z + dt * velz[index]; + float xTrace = x - dt * velx[index]; + float yTrace = y - dt * vely[index]; + float zTrace = z - dt * velz[index]; + + // see if it goes outside the boundaries + bool hasObstacle = + (zTrace < 1.0f) || (zTrace > sz - 2.0f) || + (yTrace < 1.0f) || (yTrace > sy - 2.0f) || + (xTrace < 1.0f) || (xTrace > sx - 2.0f) || + (zBackward < 1.0f) || (zBackward > sz - 2.0f) || + (yBackward < 1.0f) || (yBackward > sy - 2.0f) || + (xBackward < 1.0f) || (xBackward > sx - 2.0f); + // reuse old advection instead of doing another one... + if(hasObstacle) { newField[index] = oldAdvection[index]; continue; } + + // clamp to prevent an out of bounds access when looking into + // the _obstacles array + zTrace = (zTrace < 0.5f) ? 0.5f : zTrace; + zTrace = (zTrace > sz - 1.5f) ? sz - 1.5f : zTrace; + yTrace = (yTrace < 0.5f) ? 0.5f : yTrace; + yTrace = (yTrace > sy - 1.5f) ? sy - 1.5f : yTrace; + xTrace = (xTrace < 0.5f) ? 0.5f : xTrace; + xTrace = (xTrace > sx - 1.5f) ? sx - 1.5f : xTrace; + + // locate neighbors to interpolate, + // do backward first since we will use the forward indices if a + // reversion is actually necessary + zBackward = (zBackward < 0.5f) ? 0.5f : zBackward; + zBackward = (zBackward > sz - 1.5f) ? sz - 1.5f : zBackward; + yBackward = (yBackward < 0.5f) ? 0.5f : yBackward; + yBackward = (yBackward > sy - 1.5f) ? sy - 1.5f : yBackward; + xBackward = (xBackward < 0.5f) ? 0.5f : xBackward; + xBackward = (xBackward > sx - 1.5f) ? sx - 1.5f : xBackward; + + int x0 = (int)xBackward; + int x1 = x0 + 1; + int y0 = (int)yBackward; + int y1 = y0 + 1; + int z0 = (int)zBackward; + int z1 = z0 + 1; + if(obstacles && !hasObstacle) { + hasObstacle = hasObstacle || + obstacles[x0 + y0 * sx + z0*slabSize] || + obstacles[x0 + y1 * sx + z0*slabSize] || + obstacles[x1 + y0 * sx + z0*slabSize] || + obstacles[x1 + y1 * sx + z0*slabSize] || + obstacles[x0 + y0 * sx + z1*slabSize] || + obstacles[x0 + y1 * sx + z1*slabSize] || + obstacles[x1 + y0 * sx + z1*slabSize] || + obstacles[x1 + y1 * sx + z1*slabSize] ; + } + // reuse old advection instead of doing another one... + if(hasObstacle) { newField[index] = oldAdvection[index]; continue; } + + x0 = (int)xTrace; + x1 = x0 + 1; + y0 = (int)yTrace; + y1 = y0 + 1; + z0 = (int)zTrace; + z1 = z0 + 1; + if(obstacles && !hasObstacle) { + hasObstacle = hasObstacle || + obstacles[x0 + y0 * sx + z0*slabSize] || + obstacles[x0 + y1 * sx + z0*slabSize] || + obstacles[x1 + y0 * sx + z0*slabSize] || + obstacles[x1 + y1 * sx + z0*slabSize] || + obstacles[x0 + y0 * sx + z1*slabSize] || + obstacles[x0 + y1 * sx + z1*slabSize] || + obstacles[x1 + y0 * sx + z1*slabSize] || + obstacles[x1 + y1 * sx + z1*slabSize] ; + } // obstacle array + // reuse old advection instead of doing another one... + if(hasObstacle) { newField[index] = oldAdvection[index]; continue; } + + // see if either the forward or backward ray went into + // a boundary + if (hasObstacle) { + // get interpolation weights + float s1 = xTrace - x0; + float s0 = 1.0f - s1; + float t1 = yTrace - y0; + float t0 = 1.0f - t1; + float u1 = zTrace - z0; + float u0 = 1.0f - u1; + + const int i000 = x0 + y0 * sx + z0 * slabSize; + const int i010 = x0 + y1 * sx + z0 * slabSize; + const int i100 = x1 + y0 * sx + z0 * slabSize; + const int i110 = x1 + y1 * sx + z0 * slabSize; + const int i001 = x0 + y0 * sx + z1 * slabSize; + const int i011 = x0 + y1 * sx + z1 * slabSize; + const int i101 = x1 + y0 * sx + z1 * slabSize; + const int i111 = x1 + y1 * sx + z1 * slabSize; + + // interpolate, (indices could be computed once) + newField[index] = u0 * (s0 * ( + t0 * oldField[i000] + + t1 * oldField[i010]) + + s1 * (t0 * oldField[i100] + + t1 * oldField[i110])) + + u1 * (s0 * (t0 * oldField[i001] + + t1 * oldField[i011]) + + s1 * (t0 * oldField[i101] + + t1 * oldField[i111])); + } + } // xyz +} + +////////////////////////////////////////////////////////////////////// +// image output +////////////////////////////////////////////////////////////////////// +/* +void FLUID_3D::writeImageSliceXY(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale) { + writeProjectedIntern(field, res, 0,1, prefix, picCnt, scale); +} +void FLUID_3D::writeImageSliceYZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale) { + writeProjectedIntern(field, res, 1,2, prefix, picCnt, scale); +} +void FLUID_3D::writeImageSliceXZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale) { + writeProjectedIntern(field, res, 0,2, prefix, picCnt, scale); +} +*/ + +////////////////////////////////////////////////////////////////////// +// Helper function for projecting densities along a dimension +////////////////////////////////////////////////////////////////////// +static int getOtherDir(int dir1, int dir2) { + switch(dir1) { + case 0: + switch(dir2) { + case 1: return 2; + case 2: return 1; } + break; + case 1: + switch(dir2) { + case 0: return 2; + case 2: return 0; } + break; + case 2: + switch(dir2) { + case 0: return 1; + case 1: return 0; } + break; + } +} + +////////////////////////////////////////////////////////////////////// +// average densities along third spatial direction +////////////////////////////////////////////////////////////////////// +void FLUID_3D::writeProjectedIntern(const float *field, Vec3Int res, + int dir1, int dir2, string prefix, int picCnt, float scale) { + const int nitems = res[dir1]*res[dir2]; + const int otherDir = getOtherDir(dir1,dir2); + float *buf = new float[nitems]; + Vec3Int min = Vec3Int(0); + Vec3Int max = res; + + min[otherDir] = 0; + max[otherDir] = res[otherDir]; + float div = 1./(float)MIN3V(res); // normalize for shorter sides, old: res[otherDir]; + div *= 4.; //slightly increase contrast + for(int i=0; i. +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +////////////////////////////////////////////////////////////////////// +// +#ifndef IMAGE_H +#define IMAGE_H + +#include +#include +#include +#include +#include + +////////////////////////////////////////////////////////////////////// +// NT helper functions +////////////////////////////////////////////////////////////////////// +template < class T > inline T ABS( T a ) { + return (0 < a) ? a : -a ; +} + +template < class T > inline void SWAP_POINTERS( T &a, T &b ) { + T temp = a; + a = b; + b = temp; +} + +template < class T > inline void CLAMP( T &a, T b=0., T c=1.) { + if(ac) { a=c; return; } +} + +template < class T > inline T MIN( T a, T b) { + return (a < b) ? a : b; +} + +template < class T > inline T MAX( T a, T b) { + return (a > b) ? a : b; +} + +template < class T > inline T MAX3( T a, T b, T c) { + T max = (a > b) ? a : b; + max = (max > c) ? max : c; + return max; +} + +template < class T > inline float MAX3V( T vec) { + float max = (vec[0] > vec[1]) ? vec[0] : vec[1]; + max = (max > vec[2]) ? max : vec[2]; + return max; +} + +template < class T > inline float MIN3V( T vec) { + float min = (vec[0] < vec[1]) ? vec[0] : vec[1]; + min = (min < vec[2]) ? min : vec[2]; + return min; +} + +////////////////////////////////////////////////////////////////////// +// PNG, POV-Ray, and PBRT output functions +////////////////////////////////////////////////////////////////////// +#include + +namespace IMAGE { + static int writePng(const char *fileName, unsigned char **rowsp, int w, int h, bool normalize) + { + // defaults + const int colortype = PNG_COLOR_TYPE_RGBA; + const int bitdepth = 8; + png_structp png_ptr = NULL; + png_infop info_ptr = NULL; + png_bytep *rows = rowsp; + + FILE *fp = NULL; + std::string doing = "open for writing"; + if (!(fp = fopen(fileName, "wb"))) goto fail; + + if(!png_ptr) { + doing = "create png write struct"; + if (!(png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL))) goto fail; + } + if(!info_ptr) { + doing = "create png info struct"; + if (!(info_ptr = png_create_info_struct(png_ptr))) goto fail; + } + + if (setjmp(png_jmpbuf(png_ptr))) goto fail; + doing = "init IO"; + png_init_io(png_ptr, fp); + doing = "write header"; + png_set_IHDR(png_ptr, info_ptr, w, h, bitdepth, colortype, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + doing = "write info"; + png_write_info(png_ptr, info_ptr); + doing = "write image"; + png_write_image(png_ptr, rows); + doing = "write end"; + png_write_end(png_ptr, NULL); + doing = "write destroy structs"; + png_destroy_write_struct(&png_ptr, &info_ptr); + + fclose( fp ); + return 0; + + fail: + std::cerr << "writePng: could not "<1.) val=1.; + if(val<0.) val=0.; + pngbuf[(j*xRes+i)*4+0] = (unsigned char)(val*255.); + pngbuf[(j*xRes+i)*4+1] = (unsigned char)(val*255.); + pngbuf[(j*xRes+i)*4+2] = (unsigned char)(val*255.); + pfield++; + pngbuf[(j*xRes+i)*4+3] = 255; + } + rows[j] = &pngbuf[(yRes-j-1)*xRes*4]; + } + std::string filenamePNG = prefix + number + std::string(".png"); + writePng(filenamePNG.c_str(), rows, xRes, yRes, false); + printf("Writing %s\n", filenamePNG.c_str()); + */ + } + + ///////////////////////////////////////////////////////////////////////////////// + // export pbrt volumegrid geometry object + ///////////////////////////////////////////////////////////////////////////////// + static void dumpPBRT(int counter, std::string prefix, float* fieldOrg, int xRes, int yRes, int zRes) + { + char buffer[256]; + sprintf(buffer,"%04i", counter); + std::string number = std::string(buffer); + + std::string filenamePbrt = prefix + number + std::string(".pbrt.gz"); + printf("Writing PBRT %s\n", filenamePbrt.c_str()); + + float *field = new float[xRes*yRes*zRes]; + // normalize values + float maxDensVal = ABS(fieldOrg[0]); + float targetNorm = 0.5; + for (int i = 0; i < xRes * yRes * zRes; i++) { + if(ABS(fieldOrg[i])>maxDensVal) maxDensVal = ABS(fieldOrg[i]); + field[i] = 0.; + } + if(maxDensVal>0.) { + for (int i = 0; i < xRes * yRes * zRes; i++) { + field[i] = ABS(fieldOrg[i]) / maxDensVal * targetNorm; + } + } + + std::fstream fout; + fout.open(filenamePbrt.c_str(), std::ios::out); + + int maxRes = (xRes > yRes) ? xRes : yRes; + maxRes = (maxRes > zRes) ? maxRes : zRes; + + const float xSize = 1.0 / (float)maxRes * (float)xRes; + const float ySize = 1.0 / (float)maxRes * (float)yRes; + const float zSize = 1.0 / (float)maxRes * (float)zRes; + + gzFile file; + file = gzopen(filenamePbrt.c_str(), "wb1"); + if (file == NULL) { + std::cerr << " Couldn't write file " << filenamePbrt << "!!!" << std::endl; + return; + } + + // dimensions + gzprintf(file, "Volume \"volumegrid\" \n"); + gzprintf(file, " \"integer nx\" %i\n", xRes); + gzprintf(file, " \"integer ny\" %i\n", yRes); + gzprintf(file, " \"integer nz\" %i\n", zRes); + gzprintf(file, " \"point p0\" [ 0.0 0.0 0.0 ] \"point p1\" [%f %f %f ] \n", xSize, ySize, zSize); + gzprintf(file, " \"float density\" [ \n"); + for (int i = 0; i < xRes * yRes * zRes; i++) + gzprintf(file, "%f ", field[i]); + gzprintf(file, "] \n \n"); + + gzclose(file); + delete[] field; + } + + ///////////////////////////////////////////////////////////////////////////////// + // 3D df3 export + ///////////////////////////////////////////////////////////////////////////////// + static void dumpDF3(int counter, std::string prefix, float* fieldOrg, int xRes, int yRes, int zRes) + { + char buffer[256]; + + // do deferred copying to final directory, better for network directories + sprintf(buffer,"%04i", counter); + std::string number = std::string(buffer); + std::string filenameDf3 = prefix + number + std::string(".df3.gz"); + printf("Writing DF3 %s\n", filenameDf3.c_str()); + + gzFile file; + file = gzopen(filenameDf3.c_str(), "wb1"); + if (file == NULL) { + std::cerr << " Couldn't write file " << filenameDf3 << "!!!" << std::endl; + return; + } + + // dimensions + const int byteSize = 2; + const unsigned short int onx=xRes,ony=yRes,onz=zRes; + unsigned short int nx,ny,nz; + nx = onx >> 8; + ny = ony >> 8; + nz = onz >> 8; + nx += (onx << 8); + ny += (ony << 8); + nz += (onz << 8); + gzwrite(file, (void*)&nx, sizeof(short)); + gzwrite(file, (void*)&ny, sizeof(short)); + gzwrite(file, (void*)&nz, sizeof(short)); + const int nitems = onx*ony*onz; + const float mul = (float)( (1<<(8*byteSize))-1); + + unsigned short int *buf = new unsigned short int[nitems]; + for (int k = 0; k < onz; k++) + for (int j = 0; j < ony; j++) + for (int i = 0; i < onx; i++) { + float val = fieldOrg[k*(onx*ony)+j*onx+i] ; + CLAMP(val); + buf[k*(onx*ony)+j*onx+i] = (short int)(val*mul); + } + gzwrite(file, (void*)buf, sizeof(unsigned short int)* nitems); + + gzclose(file); + delete[] buf; + } + +}; + + +#endif diff --git a/intern/smoke/intern/INTERPOLATE.h b/intern/smoke/intern/INTERPOLATE.h new file mode 100644 index 00000000000..6800c3b84b0 --- /dev/null +++ b/intern/smoke/intern/INTERPOLATE.h @@ -0,0 +1,227 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +////////////////////////////////////////////////////////////////////// +#ifndef INTERPOLATE_H +#define INTERPOLATE_H + +#include +#include + +namespace INTERPOLATE { + +////////////////////////////////////////////////////////////////////// +// linear interpolators +////////////////////////////////////////////////////////////////////// +static inline float lerp(float t, float a, float b) { + return ( a + t * (b - a) ); +} + +static inline float lerp(float* field, float x, float y, int res) { + // clamp backtrace to grid boundaries + if (x < 0.5f) x = 0.5f; + if (x > res - 1.5f) x = res - 1.5f; + if (y < 0.5f) y = 0.5f; + if (y > res - 1.5f) y = res - 1.5f; + + const int x0 = (int)x; + const int y0 = (int)y; + x -= x0; + y -= y0; + float d00, d10, d01, d11; + + // lerp the velocities + d00 = field[x0 + y0 * res]; + d10 = field[(x0 + 1) + y0 * res]; + d01 = field[x0 + (y0 + 1) * res]; + d11 = field[(x0 + 1) + (y0 + 1) * res]; + return lerp(y, lerp(x, d00, d10), + lerp(x, d01, d11)); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// 3d linear interpolation +////////////////////////////////////////////////////////////////////////////////////////// +static inline float lerp3d(float* field, float x, float y, float z, int xres, int yres, int zres) { + // clamp pos to grid boundaries + if (x < 0.5) x = 0.5; + if (x > xres - 1.5) x = xres - 1.5; + if (y < 0.5) y = 0.5; + if (y > yres - 1.5) y = yres - 1.5; + if (z < 0.5) z = 0.5; + if (z > zres - 1.5) z = zres - 1.5; + + // locate neighbors to interpolate + const int x0 = (int)x; + const int x1 = x0 + 1; + const int y0 = (int)y; + const int y1 = y0 + 1; + const int z0 = (int)z; + const int z1 = z0 + 1; + + // get interpolation weights + const float s1 = x - (float)x0; + const float s0 = 1.0f - s1; + const float t1 = y - (float)y0; + const float t0 = 1.0f - t1; + const float u1 = z - (float)z0; + const float u0 = 1.0f - u1; + + const int slabSize = xres*yres; + const int i000 = x0 + y0 * xres + z0 * slabSize; + const int i010 = x0 + y1 * xres + z0 * slabSize; + const int i100 = x1 + y0 * xres + z0 * slabSize; + const int i110 = x1 + y1 * xres + z0 * slabSize; + const int i001 = x0 + y0 * xres + z1 * slabSize; + const int i011 = x0 + y1 * xres + z1 * slabSize; + const int i101 = x1 + y0 * xres + z1 * slabSize; + const int i111 = x1 + y1 * xres + z1 * slabSize; + + // interpolate (indices could be computed once) + return ( u0 * (s0 * (t0 * field[i000] + + t1 * field[i010]) + + s1 * (t0 * field[i100] + + t1 * field[i110])) + + u1 * (s0 * (t0 * field[i001] + + t1 * field[i011]) + + s1 * (t0 * field[i101] + + t1 * field[i111])) ); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// convert field entries of type T to floats, then interpolate +////////////////////////////////////////////////////////////////////////////////////////// +template +static inline float lerp3dToFloat(T* field1, + float x, float y, float z, int xres, int yres, int zres) { + // clamp pos to grid boundaries + if (x < 0.5) x = 0.5; + if (x > xres - 1.5) x = xres - 1.5; + if (y < 0.5) y = 0.5; + if (y > yres - 1.5) y = yres - 1.5; + if (z < 0.5) z = 0.5; + if (z > zres - 1.5) z = zres - 1.5; + + // locate neighbors to interpolate + const int x0 = (int)x; + const int x1 = x0 + 1; + const int y0 = (int)y; + const int y1 = y0 + 1; + const int z0 = (int)z; + const int z1 = z0 + 1; + + // get interpolation weights + const float s1 = x - (float)x0; + const float s0 = 1.0f - s1; + const float t1 = y - (float)y0; + const float t0 = 1.0f - t1; + const float u1 = z - (float)z0; + const float u0 = 1.0f - u1; + + const int slabSize = xres*yres; + const int i000 = x0 + y0 * xres + z0 * slabSize; + const int i010 = x0 + y1 * xres + z0 * slabSize; + const int i100 = x1 + y0 * xres + z0 * slabSize; + const int i110 = x1 + y1 * xres + z0 * slabSize; + const int i001 = x0 + y0 * xres + z1 * slabSize; + const int i011 = x0 + y1 * xres + z1 * slabSize; + const int i101 = x1 + y0 * xres + z1 * slabSize; + const int i111 = x1 + y1 * xres + z1 * slabSize; + + // interpolate (indices could be computed once) + return (float)( + ( u0 * (s0 * (t0 * (float)field1[i000] + + t1 * (float)field1[i010]) + + s1 * (t0 * (float)field1[i100] + + t1 * (float)field1[i110])) + + u1 * (s0 * (t0 * (float)field1[i001] + + t1 * (float)field1[i011]) + + s1 * (t0 * (float)field1[i101] + + t1 * (float)field1[i111])) ) ); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// interpolate a vector from 3 fields +////////////////////////////////////////////////////////////////////////////////////////// +static inline Vec3 lerp3dVec(float* field1, float* field2, float* field3, + float x, float y, float z, int xres, int yres, int zres) { + // clamp pos to grid boundaries + if (x < 0.5) x = 0.5; + if (x > xres - 1.5) x = xres - 1.5; + if (y < 0.5) y = 0.5; + if (y > yres - 1.5) y = yres - 1.5; + if (z < 0.5) z = 0.5; + if (z > zres - 1.5) z = zres - 1.5; + + // locate neighbors to interpolate + const int x0 = (int)x; + const int x1 = x0 + 1; + const int y0 = (int)y; + const int y1 = y0 + 1; + const int z0 = (int)z; + const int z1 = z0 + 1; + + // get interpolation weights + const float s1 = x - (float)x0; + const float s0 = 1.0f - s1; + const float t1 = y - (float)y0; + const float t0 = 1.0f - t1; + const float u1 = z - (float)z0; + const float u0 = 1.0f - u1; + + const int slabSize = xres*yres; + const int i000 = x0 + y0 * xres + z0 * slabSize; + const int i010 = x0 + y1 * xres + z0 * slabSize; + const int i100 = x1 + y0 * xres + z0 * slabSize; + const int i110 = x1 + y1 * xres + z0 * slabSize; + const int i001 = x0 + y0 * xres + z1 * slabSize; + const int i011 = x0 + y1 * xres + z1 * slabSize; + const int i101 = x1 + y0 * xres + z1 * slabSize; + const int i111 = x1 + y1 * xres + z1 * slabSize; + + // interpolate (indices could be computed once) + return Vec3( + ( u0 * (s0 * (t0 * field1[i000] + + t1 * field1[i010]) + + s1 * (t0 * field1[i100] + + t1 * field1[i110])) + + u1 * (s0 * (t0 * field1[i001] + + t1 * field1[i011]) + + s1 * (t0 * field1[i101] + + t1 * field1[i111])) ) , + ( u0 * (s0 * (t0 * field2[i000] + + t1 * field2[i010]) + + s1 * (t0 * field2[i100] + + t1 * field2[i110])) + + u1 * (s0 * (t0 * field2[i001] + + t1 * field2[i011]) + + s1 * (t0 * field2[i101] + + t1 * field2[i111])) ) , + ( u0 * (s0 * (t0 * field3[i000] + + t1 * field3[i010]) + + s1 * (t0 * field3[i100] + + t1 * field3[i110])) + + u1 * (s0 * (t0 * field3[i001] + + t1 * field3[i011]) + + s1 * (t0 * field3[i101] + + t1 * field3[i111])) ) + ); +} + +}; +#endif diff --git a/intern/smoke/intern/LICENSE.txt b/intern/smoke/intern/LICENSE.txt new file mode 100644 index 00000000000..94a9ed024d3 --- /dev/null +++ b/intern/smoke/intern/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/intern/smoke/intern/LU_HELPER.h b/intern/smoke/intern/LU_HELPER.h new file mode 100644 index 00000000000..b3f3c5a1cb4 --- /dev/null +++ b/intern/smoke/intern/LU_HELPER.h @@ -0,0 +1,56 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +////////////////////////////////////////////////////////////////////// + +#ifndef LU_HELPER_H +#define LU_HELPER_H + +////////////////////////////////////////////////////////////////////// +// Helper function, compute eigenvalues of 3x3 matrix +////////////////////////////////////////////////////////////////////// + +#include "tnt/jama_lu.h" + +////////////////////////////////////////////////////////////////////// +// LU decomposition of 3x3 non-symmetric matrix +////////////////////////////////////////////////////////////////////// +JAMA::LU inline computeLU3x3( + float a[3][3]) +{ + TNT::Array2D A = TNT::Array2D(3,3, &a[0][0]); + JAMA::LU jLU= JAMA::LU(A); + return jLU; +} + +////////////////////////////////////////////////////////////////////// +// LU decomposition of 3x3 non-symmetric matrix +////////////////////////////////////////////////////////////////////// +void inline solveLU3x3( + JAMA::LU& A, + float x[3], + float b[3]) +{ + TNT::Array1D jamaB = TNT::Array1D(3, &b[0]); + TNT::Array1D jamaX = A.solve(jamaB); + + x[0] = jamaX[0]; + x[1] = jamaX[1]; + x[2] = jamaX[2]; +} +#endif diff --git a/intern/smoke/intern/MERSENNETWISTER.h b/intern/smoke/intern/MERSENNETWISTER.h new file mode 100644 index 00000000000..8ad00d8b9c2 --- /dev/null +++ b/intern/smoke/intern/MERSENNETWISTER.h @@ -0,0 +1,429 @@ +// MersenneTwister.h +// Mersenne Twister random number generator -- a C++ class MTRand +// Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus +// Richard J. Wagner v1.0 15 May 2003 rjwagner@writeme.com + +// The Mersenne Twister is an algorithm for generating random numbers. It +// was designed with consideration of the flaws in various other generators. +// The period, 2^19937-1, and the order of equidistribution, 623 dimensions, +// are far greater. The generator is also fast; it avoids multiplication and +// division, and it benefits from caches and pipelines. For more information +// see the inventors' web page at http://www.math.keio.ac.jp/~matumoto/emt.html + +// Reference +// M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-Dimensionally +// Equidistributed Uniform Pseudo-Random Number Generator", ACM Transactions on +// Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30. + +// Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, +// Copyright (C) 2000 - 2003, Richard J. Wagner +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The names of its contributors may not be used to endorse or promote +// products derived from this software without specific prior written +// permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The original code included the following notice: +// +// When you use this, send an email to: matumoto@math.keio.ac.jp +// with an appropriate reference to your work. +// +// It would be nice to CC: rjwagner@writeme.com and Cokus@math.washington.edu +// when you write. + +#ifndef MERSENNETWISTER_H +#define MERSENNETWISTER_H + +// Not thread safe (unless auto-initialization is avoided and each thread has +// its own MTRand object) + +#include +#include +#include +#include +#include + +class MTRand { +// Data +public: + typedef unsigned long uint32; // unsigned integer type, at least 32 bits + + enum { N = 624 }; // length of state vector + enum { SAVE = N + 1 }; // length of array for save() + +protected: + enum { M = 397 }; // period parameter + + uint32 state[N]; // internal state + uint32 *pNext; // next value to get from state + int left; // number of values left before reload needed + + +//Methods +public: + MTRand( const uint32& oneSeed ); // initialize with a simple uint32 + MTRand( uint32 *const bigSeed, uint32 const seedLength = N ); // or an array + MTRand(); // auto-initialize with /dev/urandom or time() and clock() + + // Do NOT use for CRYPTOGRAPHY without securely hashing several returned + // values together, otherwise the generator state can be learned after + // reading 624 consecutive values. + + // Access to 32-bit random numbers + double rand(); // real number in [0,1] + double rand( const double& n ); // real number in [0,n] + double randExc(); // real number in [0,1) + double randExc( const double& n ); // real number in [0,n) + double randDblExc(); // real number in (0,1) + double randDblExc( const double& n ); // real number in (0,n) + uint32 randInt(); // integer in [0,2^32-1] + uint32 randInt( const uint32& n ); // integer in [0,n] for n < 2^32 + double operator()() { return rand(); } // same as rand() + + // Access to 53-bit random numbers (capacity of IEEE double precision) + double rand53(); // real number in [0,1) + + // Access to nonuniform random number distributions + double randNorm( const double& mean = 0.0, const double& variance = 1.0 ); + + // Re-seeding functions with same behavior as initializers + void seed( const uint32 oneSeed ); + void seed( uint32 *const bigSeed, const uint32 seedLength = N ); + void seed(); + + // Saving and loading generator state + void save( uint32* saveArray ) const; // to array of size SAVE + void load( uint32 *const loadArray ); // from such array + friend std::ostream& operator<<( std::ostream& os, const MTRand& mtrand ); + friend std::istream& operator>>( std::istream& is, MTRand& mtrand ); + +protected: + void initialize( const uint32 oneSeed ); + void reload(); + uint32 hiBit( const uint32& u ) const { return u & 0x80000000UL; } + uint32 loBit( const uint32& u ) const { return u & 0x00000001UL; } + uint32 loBits( const uint32& u ) const { return u & 0x7fffffffUL; } + uint32 mixBits( const uint32& u, const uint32& v ) const + { return hiBit(u) | loBits(v); } + uint32 twist( const uint32& m, const uint32& s0, const uint32& s1 ) const + { return m ^ (mixBits(s0,s1)>>1) ^ (-loBit(s1) & 0x9908b0dfUL); } + static uint32 hash( time_t t, clock_t c ); +}; + + +inline MTRand::MTRand( const uint32& oneSeed ) + { seed(oneSeed); } + +inline MTRand::MTRand( uint32 *const bigSeed, const uint32 seedLength ) + { seed(bigSeed,seedLength); } + +inline MTRand::MTRand() + { seed(); } + +inline double MTRand::rand() + { return double(randInt()) * (1.0/4294967295.0); } + +inline double MTRand::rand( const double& n ) + { return rand() * n; } + +inline double MTRand::randExc() + { return double(randInt()) * (1.0/4294967296.0); } + +inline double MTRand::randExc( const double& n ) + { return randExc() * n; } + +inline double MTRand::randDblExc() + { return ( double(randInt()) + 0.5 ) * (1.0/4294967296.0); } + +inline double MTRand::randDblExc( const double& n ) + { return randDblExc() * n; } + +inline double MTRand::rand53() +{ + uint32 a = randInt() >> 5, b = randInt() >> 6; + return ( a * 67108864.0 + b ) * (1.0/9007199254740992.0); // by Isaku Wada +} + +inline double MTRand::randNorm( const double& mean, const double& variance ) +{ + // Return a real number from a normal (Gaussian) distribution with given + // mean and variance by Box-Muller method + double r = sqrt( -2.0 * log( 1.0-randDblExc()) ) * variance; + double phi = 2.0 * 3.14159265358979323846264338328 * randExc(); + return mean + r * cos(phi); +} + +inline MTRand::uint32 MTRand::randInt() +{ + // Pull a 32-bit integer from the generator state + // Every other access function simply transforms the numbers extracted here + + if( left == 0 ) reload(); + --left; + + register uint32 s1; + s1 = *pNext++; + s1 ^= (s1 >> 11); + s1 ^= (s1 << 7) & 0x9d2c5680UL; + s1 ^= (s1 << 15) & 0xefc60000UL; + return ( s1 ^ (s1 >> 18) ); +} + +inline MTRand::uint32 MTRand::randInt( const uint32& n ) +{ + // Find which bits are used in n + // Optimized by Magnus Jonsson (magnus@smartelectronix.com) + uint32 used = n; + used |= used >> 1; + used |= used >> 2; + used |= used >> 4; + used |= used >> 8; + used |= used >> 16; + + // Draw numbers until one is found in [0,n] + uint32 i; + do + i = randInt() & used; // toss unused bits to shorten search + while( i > n ); + return i; +} + + +inline void MTRand::seed( const uint32 oneSeed ) +{ + // Seed the generator with a simple uint32 + initialize(oneSeed); + reload(); +} + + +inline void MTRand::seed( uint32 *const bigSeed, const uint32 seedLength ) +{ + // Seed the generator with an array of uint32's + // There are 2^19937-1 possible initial states. This function allows + // all of those to be accessed by providing at least 19937 bits (with a + // default seed length of N = 624 uint32's). Any bits above the lower 32 + // in each element are discarded. + // Just call seed() if you want to get array from /dev/urandom + initialize(19650218UL); + register int i = 1; + register uint32 j = 0; + register int k = ( N > seedLength ? N : seedLength ); + for( ; k; --k ) + { + state[i] = + state[i] ^ ( (state[i-1] ^ (state[i-1] >> 30)) * 1664525UL ); + state[i] += ( bigSeed[j] & 0xffffffffUL ) + j; + state[i] &= 0xffffffffUL; + ++i; ++j; + if( i >= N ) { state[0] = state[N-1]; i = 1; } + if( j >= seedLength ) j = 0; + } + for( k = N - 1; k; --k ) + { + state[i] = + state[i] ^ ( (state[i-1] ^ (state[i-1] >> 30)) * 1566083941UL ); + state[i] -= i; + state[i] &= 0xffffffffUL; + ++i; + if( i >= N ) { state[0] = state[N-1]; i = 1; } + } + state[0] = 0x80000000UL; // MSB is 1, assuring non-zero initial array + reload(); +} + + +inline void MTRand::seed() +{ + // seed deterministically to produce reproducible runs + seed(123456); + + /* + // Seed the generator with an array from /dev/urandom if available + // Otherwise use a hash of time() and clock() values + + // First try getting an array from /dev/urandom + FILE* urandom = fopen( "/dev/urandom", "rb" ); + if( urandom ) + { + uint32 bigSeed[N]; + register uint32 *s = bigSeed; + register int i = N; + register bool success = true; + while( success && i-- ) + success = fread( s++, sizeof(uint32), 1, urandom ); + fclose(urandom); + if( success ) { seed( bigSeed, N ); return; } + } + + // Was not successful, so use time() and clock() instead + seed( hash( time(NULL), clock() ) ); + */ +} + + +inline void MTRand::initialize( const uint32 seed ) +{ + // Initialize generator state with seed + // See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier. + // In previous versions, most significant bits (MSBs) of the seed affect + // only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. + register uint32 *s = state; + register uint32 *r = state; + register int i = 1; + *s++ = seed & 0xffffffffUL; + for( ; i < N; ++i ) + { + *s++ = ( 1812433253UL * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffUL; + r++; + } +} + + +inline void MTRand::reload() +{ + // Generate N new values in state + // Made clearer and faster by Matthew Bellew (matthew.bellew@home.com) + register uint32 *p = state; + register int i; + for( i = N - M; i--; ++p ) + *p = twist( p[M], p[0], p[1] ); + for( i = M; --i; ++p ) + *p = twist( p[M-N], p[0], p[1] ); + *p = twist( p[M-N], p[0], state[0] ); + + left = N, pNext = state; +} + + +inline MTRand::uint32 MTRand::hash( time_t t, clock_t c ) +{ + // Get a uint32 from t and c + // Better than uint32(x) in case x is floating point in [0,1] + // Based on code by Lawrence Kirby (fred@genesis.demon.co.uk) + + static uint32 differ = 0; // guarantee time-based seeds will change + + uint32 h1 = 0; + unsigned char *p = (unsigned char *) &t; + for( size_t i = 0; i < sizeof(t); ++i ) + { + h1 *= UCHAR_MAX + 2U; + h1 += p[i]; + } + uint32 h2 = 0; + p = (unsigned char *) &c; + for( size_t j = 0; j < sizeof(c); ++j ) + { + h2 *= UCHAR_MAX + 2U; + h2 += p[j]; + } + return ( h1 + differ++ ) ^ h2; +} + + +inline void MTRand::save( uint32* saveArray ) const +{ + register uint32 *sa = saveArray; + register const uint32 *s = state; + register int i = N; + for( ; i--; *sa++ = *s++ ) {} + *sa = left; +} + + +inline void MTRand::load( uint32 *const loadArray ) +{ + register uint32 *s = state; + register uint32 *la = loadArray; + register int i = N; + for( ; i--; *s++ = *la++ ) {} + left = *la; + pNext = &state[N-left]; +} + + +inline std::ostream& operator<<( std::ostream& os, const MTRand& mtrand ) +{ + register const MTRand::uint32 *s = mtrand.state; + register int i = mtrand.N; + for( ; i--; os << *s++ << "\t" ) {} + return os << mtrand.left; +} + + +inline std::istream& operator>>( std::istream& is, MTRand& mtrand ) +{ + register MTRand::uint32 *s = mtrand.state; + register int i = mtrand.N; + for( ; i--; is >> *s++ ) {} + is >> mtrand.left; + mtrand.pNext = &mtrand.state[mtrand.N-mtrand.left]; + return is; +} + +#endif // MERSENNETWISTER_H + +// Change log: +// +// v0.1 - First release on 15 May 2000 +// - Based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus +// - Translated from C to C++ +// - Made completely ANSI compliant +// - Designed convenient interface for initialization, seeding, and +// obtaining numbers in default or user-defined ranges +// - Added automatic seeding from /dev/urandom or time() and clock() +// - Provided functions for saving and loading generator state +// +// v0.2 - Fixed bug which reloaded generator one step too late +// +// v0.3 - Switched to clearer, faster reload() code from Matthew Bellew +// +// v0.4 - Removed trailing newline in saved generator format to be consistent +// with output format of built-in types +// +// v0.5 - Improved portability by replacing static const int's with enum's and +// clarifying return values in seed(); suggested by Eric Heimburg +// - Removed MAXINT constant; use 0xffffffffUL instead +// +// v0.6 - Eliminated seed overflow when uint32 is larger than 32 bits +// - Changed integer [0,n] generator to give better uniformity +// +// v0.7 - Fixed operator precedence ambiguity in reload() +// - Added access for real numbers in (0,1) and (0,n) +// +// v0.8 - Included time.h header to properly support time_t and clock_t +// +// v1.0 - Revised seeding to match 26 Jan 2002 update of Nishimura and Matsumoto +// - Allowed for seeding with arrays of any length +// - Added access for real numbers in [0,1) with 53-bit resolution +// - Added access for real numbers from normal (Gaussian) distributions +// - Increased overall speed by optimizing twist() +// - Doubled speed of integer [0,n] generation +// - Fixed out-of-range number generation on 64-bit machines +// - Improved portability by substituting literal constants for long enum's +// - Changed license from GNU LGPL to BSD + diff --git a/intern/smoke/intern/Makefile.FFT b/intern/smoke/intern/Makefile.FFT new file mode 100644 index 00000000000..e45af1df29b --- /dev/null +++ b/intern/smoke/intern/Makefile.FFT @@ -0,0 +1,22 @@ +# common stuff +LDFLAGS_COMMON = -lfftw3 #-lglut -lglu32 -lopengl32 -lz -lpng +CFLAGS_COMMON = -c -Wall -I./ #-I/cygdrive/c/lib/glvu/include -D_WIN32 + +CC = g++ +CFLAGS = ${CFLAGS_COMMON} -O3 -Wno-unused +LDFLAGS = ${LDFLAGS_COMMON} +EXECUTABLE = noiseFFT + +SOURCES = noiseFFT.cpp +OBJECTS = $(SOURCES:.cpp=.o) + +all: $(SOURCES) $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + +.cpp.o: + $(CC) $(CFLAGS) $< -o $@ + +clean: + rm -f *.o $(EXECUTABLE_LOADER) $(EXECUTABLE) diff --git a/intern/smoke/intern/Makefile.cygwin b/intern/smoke/intern/Makefile.cygwin new file mode 100644 index 00000000000..c93753a67fe --- /dev/null +++ b/intern/smoke/intern/Makefile.cygwin @@ -0,0 +1,23 @@ +CC = g++ +LDFLAGS = -lz -lpng +CFLAGS = -O3 -Wno-unused -c -Wall -I./ -D_WIN32 +EXECUTABLE = FLUID_3D + +SOURCES = main.cpp FLUID_3D.cpp FLUID_3D_SOLVERS.cpp FLUID_3D_STATIC.cpp SPHERE.cpp WTURBULENCE.cpp +OBJECTS = $(SOURCES:.cpp=.o) + +all: $(SOURCES) $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + +.cpp.o: + $(CC) $(CFLAGS) $< -o $@ + +SPHERE.o: SPHERE.h +FLUID_3D.o: FLUID_3D.h FLUID_3D.cpp +FLUID_3D_SOLVERS.o: FLUID_3D.h FLUID_3D_SOLVERS.cpp +main.o: FLUID_3D.h FLUID_3D.cpp FLUID_3D_SOLVERS.cpp + +clean: + rm -f *.o $(EXECUTABLE_LOADER) $(EXECUTABLE) diff --git a/intern/smoke/intern/Makefile.linux b/intern/smoke/intern/Makefile.linux new file mode 100644 index 00000000000..8e71af465dd --- /dev/null +++ b/intern/smoke/intern/Makefile.linux @@ -0,0 +1,23 @@ +CC = g++ +LDFLAGS = -lz -lpng -fopenmp -lgomp +CFLAGS = -c -Wall -I./ -fopenmp -DPARALLEL=1 -O3 -Wno-unused +EXECUTABLE = FLUID_3D + +SOURCES = main.cpp FLUID_3D.cpp FLUID_3D_SOLVERS.cpp FLUID_3D_STATIC.cpp SPHERE.cpp WTURBULENCE.cpp +OBJECTS = $(SOURCES:.cpp=.o) + +all: $(SOURCES) $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + +.cpp.o: + $(CC) $(CFLAGS) $< -o $@ + +SPHERE.o: SPHERE.h +FLUID_3D.o: FLUID_3D.h FLUID_3D.cpp +FLUID_3D_SOLVERS.o: FLUID_3D.h FLUID_3D_SOLVERS.cpp +main.o: FLUID_3D.h FLUID_3D.cpp FLUID_3D_SOLVERS.cpp + +clean: + rm -f *.o $(EXECUTABLE_LOADER) $(EXECUTABLE) diff --git a/intern/smoke/intern/Makefile.mac b/intern/smoke/intern/Makefile.mac new file mode 100644 index 00000000000..227aaa10a16 --- /dev/null +++ b/intern/smoke/intern/Makefile.mac @@ -0,0 +1,35 @@ +CC = g++ + +# uncomment the other two OPENMP_... lines, if your gcc supports OpenMP +#OPENMP_FLAGS = -fopenmp -DPARALLEL=1 -I/opt/gcc-4.3/usr/local/include +#OPENMPLD_FLAGS = -fopenmp -lgomp -I/opt/gcc-4.3/usr/local/lib +OPENMP_FLAGS = +OPENMPLD_FLAGS = + +# assumes MacPorts libpng installation +PNG_INCLUDE = -I/opt/local/include +PNG_LIBS = -I/opt/local/lib + +LDFLAGS = $(PNG_LIBS)-lz -lpng $(OPENMPLD_FLAGS) +CFLAGS = -c -Wall -I./ $(PNG_INCLUDE) $(OPENMP_FLAGS) -O3 -Wno-unused +EXECUTABLE = FLUID_3D + +SOURCES = main.cpp FLUID_3D.cpp FLUID_3D_SOLVERS.cpp FLUID_3D_STATIC.cpp SPHERE.cpp WTURBULENCE.cpp +OBJECTS = $(SOURCES:.cpp=.o) + +all: $(SOURCES) $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + +.cpp.o: + $(CC) $(CFLAGS) $< -o $@ + +SPHERE.o: SPHERE.h +FLUID_3D.o: FLUID_3D.h FLUID_3D.cpp +FLUID_3D_SOLVERS.o: FLUID_3D.h FLUID_3D_SOLVERS.cpp +main.o: FLUID_3D.h FLUID_3D.cpp FLUID_3D_SOLVERS.cpp + +clean: + rm -f *.o $(EXECUTABLE_LOADER) $(EXECUTABLE) + diff --git a/intern/smoke/intern/OBSTACLE.h b/intern/smoke/intern/OBSTACLE.h new file mode 100644 index 00000000000..54e824d275d --- /dev/null +++ b/intern/smoke/intern/OBSTACLE.h @@ -0,0 +1,41 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// OBSTACLE.h: interface for the OBSTACLE class. +// +////////////////////////////////////////////////////////////////////// + +#ifndef OBSTACLE_H +#define OBSTACLE_H + +enum OBSTACLE_FLAGS { + EMPTY = 0, + MARCHED = 2, + RETIRED = 4 +}; + +class OBSTACLE +{ +public: + OBSTACLE() {}; + virtual ~OBSTACLE() {}; + + virtual bool inside(float x, float y, float z) = 0; +}; + +#endif diff --git a/intern/smoke/intern/SPHERE.cpp b/intern/smoke/intern/SPHERE.cpp new file mode 100644 index 00000000000..4bb18fb81c0 --- /dev/null +++ b/intern/smoke/intern/SPHERE.cpp @@ -0,0 +1,50 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// SPHERE.cpp: implementation of the SPHERE class. +// +////////////////////////////////////////////////////////////////////// + +#include "SPHERE.h" + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +SPHERE::SPHERE(float x, float y, float z, float radius) : + _radius(radius) +{ + _center[0] = x; + _center[1] = y; + _center[2] = z; +} + +SPHERE::~SPHERE() +{ + +} + +bool SPHERE::inside(float x, float y, float z) +{ + float translate[] = {x - _center[0], y - _center[1], z - _center[2]}; + float magnitude = translate[0] * translate[0] + + translate[1] * translate[1] + + translate[2] * translate[2]; + + return (magnitude < _radius * _radius) ? true : false; +} diff --git a/intern/smoke/intern/SPHERE.h b/intern/smoke/intern/SPHERE.h new file mode 100644 index 00000000000..13bd6e9493c --- /dev/null +++ b/intern/smoke/intern/SPHERE.h @@ -0,0 +1,41 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// SPHERE.h: interface for the SPHERE class. +// +////////////////////////////////////////////////////////////////////// + +#ifndef SPHERE_H +#define SPHERE_H + +#include "OBSTACLE.h" + +class SPHERE : public OBSTACLE +{ +public: + SPHERE(float x, float y, float z, float radius); + virtual ~SPHERE(); + + bool inside(float x, float y, float z); + +private: + float _center[3]; + float _radius; +}; + +#endif diff --git a/intern/smoke/intern/VEC3.h b/intern/smoke/intern/VEC3.h new file mode 100644 index 00000000000..ae159e11b4b --- /dev/null +++ b/intern/smoke/intern/VEC3.h @@ -0,0 +1,981 @@ +/****************************************************************************** + * Copyright 2007 Nils Thuerey + * Basic vector class + *****************************************************************************/ +#ifndef BASICVECTOR_H +#define BASICVECTOR_H + +#include +#include +#include +#include + +// use which fp-precision? 1=float, 2=double +#ifndef FLOATINGPOINT_PRECISION +#if DDF_DEBUG==1 +#define FLOATINGPOINT_PRECISION 2 +#else // DDF_DEBUG==1 +#define FLOATINGPOINT_PRECISION 1 +#endif // DDF_DEBUG==1 +#endif + +// VECTOR_EPSILON is the minimal vector length +// In order to be able to discriminate floating point values near zero, and +// to be sure not to fail a comparison because of roundoff errors, use this +// value as a threshold. + +#if FLOATINGPOINT_PRECISION==1 +typedef float Real; +#define FP_REAL_MAX __FLT_MAX__ +#define VECTOR_EPSILON (1e-5f) +#else +typedef double Real; +#define FP_REAL_MAX __DBL_MAX__ +#define VECTOR_EPSILON (1e-10) +#endif + + +// hardcoded limits for now... +// for e.g. MSVC compiler... +// some of these defines can be needed +// for linux systems as well (e.g. FLT_MAX) +#ifndef __FLT_MAX__ +# ifdef FLT_MAX // try to use it instead +# define __FLT_MAX__ FLT_MAX +# else // FLT_MAX +# define __FLT_MAX__ 3.402823466e+38f +# endif // FLT_MAX +#endif // __FLT_MAX__ +#ifndef __DBL_MAX__ +# ifdef DBL_MAX // try to use it instead +# define __DBL_MAX__ DBL_MAX +# else // DBL_MAX +# define __DBL_MAX__ 1.7976931348623158e+308 +# endif // DBL_MAX +#endif // __DBL_MAX__ + +#ifndef FLT_MAX +#define FLT_MAX __FLT_MAX__ +#endif + +#ifndef DBL_MAX +#define DBL_MAX __DBL_MAX__ +#endif + +#ifndef M_PI +# define M_PI 3.1415926536 +# define M_E 2.7182818284 +#endif + + + +namespace BasicVector { + + +// basic inlined vector class +template +class Vector3Dim +{ +public: + // Constructor + inline Vector3Dim(); + // Copy-Constructor + inline Vector3Dim(const Vector3Dim &v ); + inline Vector3Dim(const float *); + inline Vector3Dim(const double *); + // construct a vector from one Scalar + inline Vector3Dim(Scalar); + // construct a vector from three Scalars + inline Vector3Dim(Scalar, Scalar, Scalar); + + // get address of array for OpenGL + Scalar *getAddress() { return value; } + + // Assignment operator + inline const Vector3Dim& operator= (const Vector3Dim& v); + // Assignment operator + inline const Vector3Dim& operator= (Scalar s); + // Assign and add operator + inline const Vector3Dim& operator+= (const Vector3Dim& v); + // Assign and add operator + inline const Vector3Dim& operator+= (Scalar s); + // Assign and sub operator + inline const Vector3Dim& operator-= (const Vector3Dim& v); + // Assign and sub operator + inline const Vector3Dim& operator-= (Scalar s); + // Assign and mult operator + inline const Vector3Dim& operator*= (const Vector3Dim& v); + // Assign and mult operator + inline const Vector3Dim& operator*= (Scalar s); + // Assign and div operator + inline const Vector3Dim& operator/= (const Vector3Dim& v); + // Assign and div operator + inline const Vector3Dim& operator/= (Scalar s); + + + // unary operator + inline Vector3Dim operator- () const; + + // binary operator add + inline Vector3Dim operator+ (const Vector3Dim&) const; + // binary operator add + inline Vector3Dim operator+ (Scalar) const; + // binary operator sub + inline Vector3Dim operator- (const Vector3Dim&) const; + // binary operator sub + inline Vector3Dim operator- (Scalar) const; + // binary operator mult + inline Vector3Dim operator* (const Vector3Dim&) const; + // binary operator mult + inline Vector3Dim operator* (Scalar) const; + // binary operator div + inline Vector3Dim operator/ (const Vector3Dim&) const; + // binary operator div + inline Vector3Dim operator/ (Scalar) const; + + // Projection normal to a vector + inline Vector3Dim getOrthogonalntlVector3Dim() const; + // Project into a plane + inline const Vector3Dim& projectNormalTo(const Vector3Dim &v); + + // minimize + inline const Vector3Dim &minimize(const Vector3Dim &); + // maximize + inline const Vector3Dim &maximize(const Vector3Dim &); + + // access operator + inline Scalar& operator[](unsigned int i); + // access operator + inline const Scalar& operator[](unsigned int i) const; + + //! actual values + union { + struct { + Scalar value[3]; + }; + struct { + Scalar x; + Scalar y; + Scalar z; + }; + struct { + Scalar X; + Scalar Y; + Scalar Z; + }; + }; +protected: + +}; + + + + + +//------------------------------------------------------------------------------ +// VECTOR inline FUNCTIONS +//------------------------------------------------------------------------------ + + + +/************************************************************************* + Constructor. + */ +template +inline Vector3Dim::Vector3Dim( void ) +{ + value[0] = value[1] = value[2] = 0; +} + + + +/************************************************************************* + Copy-Constructor. + */ +template +inline Vector3Dim::Vector3Dim( const Vector3Dim &v ) +{ + value[0] = v.value[0]; + value[1] = v.value[1]; + value[2] = v.value[2]; +} +template +inline Vector3Dim::Vector3Dim( const float *fvalue) +{ + value[0] = (Scalar)fvalue[0]; + value[1] = (Scalar)fvalue[1]; + value[2] = (Scalar)fvalue[2]; +} +template +inline Vector3Dim::Vector3Dim( const double *fvalue) +{ + value[0] = (Scalar)fvalue[0]; + value[1] = (Scalar)fvalue[1]; + value[2] = (Scalar)fvalue[2]; +} + + + +/************************************************************************* + Constructor for a vector from a single Scalar. All components of + the vector get the same value. + \param s The value to set + \return The new vector + */ +template +inline Vector3Dim::Vector3Dim(Scalar s ) +{ + value[0]= s; + value[1]= s; + value[2]= s; +} + + +/************************************************************************* + Constructor for a vector from three Scalars. + \param s1 The value for the first vector component + \param s2 The value for the second vector component + \param s3 The value for the third vector component + \return The new vector + */ +template +inline Vector3Dim::Vector3Dim(Scalar s1, Scalar s2, Scalar s3) +{ + value[0]= s1; + value[1]= s2; + value[2]= s3; +} + + + +/************************************************************************* + Copy a Vector3Dim componentwise. + \param v vector with values to be copied + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator=( const Vector3Dim &v ) +{ + value[0] = v.value[0]; + value[1] = v.value[1]; + value[2] = v.value[2]; + return *this; +} + + +/************************************************************************* + Copy a Scalar to each component. + \param s The value to copy + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator=(Scalar s) +{ + value[0] = s; + value[1] = s; + value[2] = s; + return *this; +} + + +/************************************************************************* + Add another Vector3Dim componentwise. + \param v vector with values to be added + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator+=( const Vector3Dim &v ) +{ + value[0] += v.value[0]; + value[1] += v.value[1]; + value[2] += v.value[2]; + return *this; +} + + +/************************************************************************* + Add a Scalar value to each component. + \param s Value to add + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator+=(Scalar s) +{ + value[0] += s; + value[1] += s; + value[2] += s; + return *this; +} + + +/************************************************************************* + Subtract another vector componentwise. + \param v vector of values to subtract + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator-=( const Vector3Dim &v ) +{ + value[0] -= v.value[0]; + value[1] -= v.value[1]; + value[2] -= v.value[2]; + return *this; +} + + +/************************************************************************* + Subtract a Scalar value from each component. + \param s Value to subtract + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator-=(Scalar s) +{ + value[0]-= s; + value[1]-= s; + value[2]-= s; + return *this; +} + + +/************************************************************************* + Multiply with another vector componentwise. + \param v vector of values to multiply with + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator*=( const Vector3Dim &v ) +{ + value[0] *= v.value[0]; + value[1] *= v.value[1]; + value[2] *= v.value[2]; + return *this; +} + + +/************************************************************************* + Multiply each component with a Scalar value. + \param s Value to multiply with + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator*=(Scalar s) +{ + value[0] *= s; + value[1] *= s; + value[2] *= s; + return *this; +} + + +/************************************************************************* + Divide by another Vector3Dim componentwise. + \param v vector of values to divide by + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator/=( const Vector3Dim &v ) +{ + value[0] /= v.value[0]; + value[1] /= v.value[1]; + value[2] /= v.value[2]; + return *this; +} + + +/************************************************************************* + Divide each component by a Scalar value. + \param s Value to divide by + \return Reference to self + */ +template +inline const Vector3Dim& +Vector3Dim::operator/=(Scalar s) +{ + value[0] /= s; + value[1] /= s; + value[2] /= s; + return *this; +} + + +//------------------------------------------------------------------------------ +// unary operators +//------------------------------------------------------------------------------ + + +/************************************************************************* + Build componentwise the negative this vector. + \return The new (negative) vector + */ +template +inline Vector3Dim +Vector3Dim::operator-() const +{ + return Vector3Dim(-value[0], -value[1], -value[2]); +} + + + +//------------------------------------------------------------------------------ +// binary operators +//------------------------------------------------------------------------------ + + +/************************************************************************* + Build a vector with another vector added componentwise. + \param v The second vector to add + \return The sum vector + */ +template +inline Vector3Dim +Vector3Dim::operator+( const Vector3Dim &v ) const +{ + return Vector3Dim(value[0]+v.value[0], + value[1]+v.value[1], + value[2]+v.value[2]); +} + + +/************************************************************************* + Build a vector with a Scalar value added to each component. + \param s The Scalar value to add + \return The sum vector + */ +template +inline Vector3Dim +Vector3Dim::operator+(Scalar s) const +{ + return Vector3Dim(value[0]+s, + value[1]+s, + value[2]+s); +} + + +/************************************************************************* + Build a vector with another vector subtracted componentwise. + \param v The second vector to subtract + \return The difference vector + */ +template +inline Vector3Dim +Vector3Dim::operator-( const Vector3Dim &v ) const +{ + return Vector3Dim(value[0]-v.value[0], + value[1]-v.value[1], + value[2]-v.value[2]); +} + + +/************************************************************************* + Build a vector with a Scalar value subtracted componentwise. + \param s The Scalar value to subtract + \return The difference vector + */ +template +inline Vector3Dim +Vector3Dim::operator-(Scalar s ) const +{ + return Vector3Dim(value[0]-s, + value[1]-s, + value[2]-s); +} + + + +/************************************************************************* + Build a vector with another vector multiplied by componentwise. + \param v The second vector to muliply with + \return The product vector + */ +template +inline Vector3Dim +Vector3Dim::operator*( const Vector3Dim& v) const +{ + return Vector3Dim(value[0]*v.value[0], + value[1]*v.value[1], + value[2]*v.value[2]); +} + + +/************************************************************************* + Build a Vector3Dim with a Scalar value multiplied to each component. + \param s The Scalar value to multiply with + \return The product vector + */ +template +inline Vector3Dim +Vector3Dim::operator*(Scalar s) const +{ + return Vector3Dim(value[0]*s, value[1]*s, value[2]*s); +} + + +/************************************************************************* + Build a vector divided componentwise by another vector. + \param v The second vector to divide by + \return The ratio vector + */ +template +inline Vector3Dim +Vector3Dim::operator/(const Vector3Dim& v) const +{ + return Vector3Dim(value[0]/v.value[0], + value[1]/v.value[1], + value[2]/v.value[2]); +} + + + +/************************************************************************* + Build a vector divided componentwise by a Scalar value. + \param s The Scalar value to divide by + \return The ratio vector + */ +template +inline Vector3Dim +Vector3Dim::operator/(Scalar s) const +{ + return Vector3Dim(value[0]/s, + value[1]/s, + value[2]/s); +} + + + + + +/************************************************************************* + Get a particular component of the vector. + \param i Number of Scalar to get + \return Reference to the component + */ +template +inline Scalar& +Vector3Dim::operator[]( unsigned int i ) +{ + return value[i]; +} + + +/************************************************************************* + Get a particular component of a constant vector. + \param i Number of Scalar to get + \return Reference to the component + */ +template +inline const Scalar& +Vector3Dim::operator[]( unsigned int i ) const +{ + return value[i]; +} + + + +//------------------------------------------------------------------------------ +// BLITZ compatibility functions +//------------------------------------------------------------------------------ + + + +/************************************************************************* + Compute the scalar product with another vector. + \param v The second vector to work with + \return The value of the scalar product + */ +template +inline Scalar dot(const Vector3Dim &t, const Vector3Dim &v ) +{ + //return t.value[0]*v.value[0] + t.value[1]*v.value[1] + t.value[2]*v.value[2]; + return ((t[0]*v[0]) + (t[1]*v[1]) + (t[2]*v[2])); +} + + +/************************************************************************* + Calculate the cross product of this and another vector + */ +template +inline Vector3Dim cross(const Vector3Dim &t, const Vector3Dim &v) +{ + Vector3Dim cp( + ((t[1]*v[2]) - (t[2]*v[1])), + ((t[2]*v[0]) - (t[0]*v[2])), + ((t[0]*v[1]) - (t[1]*v[0])) ); + return cp; +} + + + + +/************************************************************************* + Compute a vector that is orthonormal to self. Nothing else can be assumed + for the direction of the new vector. + \return The orthonormal vector + */ +template +Vector3Dim +Vector3Dim::getOrthogonalntlVector3Dim() const +{ + // Determine the component with max. absolute value + int max= (fabs(value[0]) > fabs(value[1])) ? 0 : 1; + max= (fabs(value[max]) > fabs(value[2])) ? max : 2; + + /************************************************************************* + Choose another axis than the one with max. component and project + orthogonal to self + */ + Vector3Dim vec(0.0); + vec[(max+1)%3]= 1; + vec.normalize(); + vec.projectNormalTo(this->getNormalized()); + return vec; +} + + +/************************************************************************* + Projects the vector into a plane normal to the given vector, which must + have unit length. Self is modified. + \param v The plane normal + \return The projected vector + */ +template +inline const Vector3Dim& +Vector3Dim::projectNormalTo(const Vector3Dim &v) +{ + Scalar sprod = dot(*this,v); + value[0]= value[0] - v.value[0] * sprod; + value[1]= value[1] - v.value[1] * sprod; + value[2]= value[2] - v.value[2] * sprod; + return *this; +} + + + +//------------------------------------------------------------------------------ +// Other helper functions +//------------------------------------------------------------------------------ + + + +/************************************************************************* + Minimize the vector, i.e. set each entry of the vector to the minimum + of both values. + \param pnt The second vector to compare with + \return Reference to the modified self + */ +template +inline const Vector3Dim & +Vector3Dim::minimize(const Vector3Dim &pnt) +{ + for (unsigned int i = 0; i < 3; i++) + value[i] = MIN(value[i],pnt[i]); + return *this; +} + + + +/************************************************************************* + Maximize the vector, i.e. set each entry of the vector to the maximum + of both values. + \param pnt The second vector to compare with + \return Reference to the modified self + */ +template +inline const Vector3Dim & +Vector3Dim::maximize(const Vector3Dim &pnt) +{ + for (unsigned int i = 0; i < 3; i++) + value[i] = MAX(value[i],pnt[i]); + return *this; +} + + + + + + +/************************************************************************/ +// HELPER FUNCTIONS, independent of implementation +/************************************************************************/ + +#define VECTOR_TYPE Vector3Dim + + +/************************************************************************* + Compute the length (norm) of the vector. + \return The value of the norm + */ +template +inline Scalar norm( const VECTOR_TYPE &v) +{ + Scalar l = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; + return (fabs(l-1.) < VECTOR_EPSILON*VECTOR_EPSILON) ? 1. : sqrt(l); +} + +// for e.g. min max operator +inline Real normHelper(const Vector3Dim &v) { + return norm(v); +} +inline Real normHelper(const Real &v) { + return (0. < v) ? v : -v ; +} +inline Real normHelper(const int &v) { + return (0 < v) ? (Real)(v) : (Real)(-v) ; +} + + +/************************************************************************* + Same as getNorm but doesnt sqrt + */ +template +inline Scalar normNoSqrt( const VECTOR_TYPE &v) +{ + return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; +} + + +/************************************************************************* + Compute a normalized vector based on this vector. + \return The new normalized vector + */ +template +inline VECTOR_TYPE getNormalized( const VECTOR_TYPE &v) +{ + Scalar l = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; + if (fabs(l-1.) < VECTOR_EPSILON*VECTOR_EPSILON) + return v; /* normalized "enough"... */ + else if (l > VECTOR_EPSILON*VECTOR_EPSILON) + { + Scalar fac = 1./sqrt(l); + return VECTOR_TYPE(v[0]*fac, v[1]*fac, v[2]*fac); + } + else + return VECTOR_TYPE((Scalar)0); +} + + +/************************************************************************* + Compute the norm of the vector and normalize it. + \return The value of the norm + */ +template +inline Scalar normalize( VECTOR_TYPE &v) +{ + Scalar norm; + Scalar l = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; + if (fabs(l-1.) < VECTOR_EPSILON*VECTOR_EPSILON) { + norm = 1.; + } else if (l > VECTOR_EPSILON*VECTOR_EPSILON) { + norm = sqrt(l); + Scalar fac = 1./norm; + v[0] *= fac; + v[1] *= fac; + v[2] *= fac; + } else { + v[0]= v[1]= v[2]= 0; + norm = 0.; + } + return (Scalar)norm; +} + + +/************************************************************************* + Compute a vector, that is self (as an incoming + vector) reflected at a surface with a distinct normal vector. Note + that the normal is reversed, if the scalar product with it is positive. + \param n The surface normal + \return The new reflected vector + */ +template +inline VECTOR_TYPE reflectVector(const VECTOR_TYPE &t, const VECTOR_TYPE &n) +{ + VECTOR_TYPE nn= (dot(t, n) > 0.0) ? (n*-1.0) : n; + return ( t - nn * (2.0 * dot(nn, t)) ); +} + + + +/************************************************************************* + * My own refraction calculation + * Taken from Glassner's book, section 5.2 (Heckberts method) + */ +template +inline VECTOR_TYPE refractVector(const VECTOR_TYPE &t, const VECTOR_TYPE &normal, Scalar nt, Scalar nair, int &refRefl) +{ + Scalar eta = nair / nt; + Scalar n = -dot(t, normal); + Scalar tt = 1.0 + eta*eta* (n*n-1.0); + if(tt<0.0) { + // we have total reflection! + refRefl = 1; + } else { + // normal reflection + tt = eta*n - sqrt(tt); + return( t*eta + normal*tt ); + } + return t; +} + + +/************************************************************************* + Test two ntlVector3Dims for equality based on the equality of their + values within a small threshold. + \param c The second vector to compare + \return TRUE if both are equal + \sa getEpsilon() + */ +template +inline bool equal(const VECTOR_TYPE &v, const VECTOR_TYPE &c) +{ + return (ABS(v[0]-c[0]) + + ABS(v[1]-c[1]) + + ABS(v[2]-c[2]) < VECTOR_EPSILON); +} + + +/************************************************************************* + * Assume this vector is an RGB color, and convert it to HSV + */ +template +inline void rgbToHsv( VECTOR_TYPE &V ) +{ + Scalar h=0,s=0,v=0; + Scalar maxrgb, minrgb, delta; + // convert to hsv... + maxrgb = V[0]; + int maxindex = 1; + if(V[2] > maxrgb){ maxrgb = V[2]; maxindex = 2; } + if(V[1] > maxrgb){ maxrgb = V[1]; maxindex = 3; } + minrgb = V[0]; + if(V[2] < minrgb) minrgb = V[2]; + if(V[1] < minrgb) minrgb = V[1]; + + v = maxrgb; + delta = maxrgb-minrgb; + + if(maxrgb > 0) s = delta/maxrgb; + else s = 0; + + h = 0; + if(s > 0) { + if(maxindex == 1) { + h = ((V[1]-V[2])/delta) + 0.0; } + if(maxindex == 2) { + h = ((V[2]-V[0])/delta) + 2.0; } + if(maxindex == 3) { + h = ((V[0]-V[1])/delta) + 4.0; } + h *= 60.0; + if(h < 0.0) h += 360.0; + } + + V[0] = h; + V[1] = s; + V[2] = v; +} + +/************************************************************************* + * Assume this vector is HSV and convert to RGB + */ +template +inline void hsvToRgb( VECTOR_TYPE &V ) +{ + Scalar h = V[0], s = V[1], v = V[2]; + Scalar r=0,g=0,b=0; + Scalar p,q,t, fracth; + int floorh; + // ...and back to rgb + if(s == 0) { + r = g = b = v; } + else { + h /= 60.0; + floorh = (int)h; + fracth = h - floorh; + p = v * (1.0 - s); + q = v * (1.0 - (s * fracth)); + t = v * (1.0 - (s * (1.0 - fracth))); + switch (floorh) { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } + } + + V[0] = r; + V[1] = g; + V[2] = b; +} + +//------------------------------------------------------------------------------ +// STREAM FUNCTIONS +//------------------------------------------------------------------------------ + + + +//! global string for formatting vector output in utilities.cpp +//extern const char *globVecFormatStr; +static const char *globVecFormatStr = "[%6.4f,%6.4f,%6.4f]"; + +/************************************************************************* + Outputs the object in human readable form using the format + [x,y,z] + */ +template +std::ostream& +operator<<( std::ostream& os, const BasicVector::Vector3Dim& i ) +{ + char buf[256]; +#if _WIN32 + sprintf(buf,globVecFormatStr, (double)i[0],(double)i[1],(double)i[2]); +#else + snprintf(buf,256,globVecFormatStr, (double)i[0],(double)i[1],(double)i[2]); +#endif + os << std::string(buf); + return os; +} + + +/************************************************************************* + Reads the contents of the object from a stream using the same format + as the output operator. + */ +template +std::istream& +operator>>( std::istream& is, BasicVector::Vector3Dim& i ) +{ + char c; + char dummy[3]; + is >> c >> i[0] >> dummy >> i[1] >> dummy >> i[2] >> c; + return is; +} + + +/**************************************************************************/ +// typedefs! +/**************************************************************************/ + +/* get minimal vector length value that can be discriminated. */ +inline Real getVecEpsilon() { return (Real)VECTOR_EPSILON; } + +// a 3D integer vector +typedef Vector3Dim Vec3Int; + +// a 3D vector +typedef Vector3Dim Vec3; + + +}; // namespace + + +#endif /* BASICVECTOR_H */ diff --git a/intern/smoke/intern/WAVELET_NOISE.h b/intern/smoke/intern/WAVELET_NOISE.h new file mode 100644 index 00000000000..72469c2b231 --- /dev/null +++ b/intern/smoke/intern/WAVELET_NOISE.h @@ -0,0 +1,456 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +////////////////////////////////////////////////////////////////////////////////////////// +// Wavelet noise functions +// +// This code is based on the C code provided in the appendices of: +// +// @article{1073264, +// author = {Robert L. Cook and Tony DeRose}, +// title = {Wavelet noise}, +// journal = {ACM Trans. Graph.}, +// volume = {24}, +// number = {3}, +// year = {2005}, +// issn = {0730-0301}, +// pages = {803--811}, +// doi = {http://doi.acm.org/10.1145/1073204.1073264}, +// publisher = {ACM}, +// address = {New York, NY, USA}, +// } +// +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef WAVELET_NOISE_H +#define WAVELET_NOISE_H + +#include + +#define NOISE_TILE_SIZE 128 +static const int noiseTileSize = NOISE_TILE_SIZE; + +// warning - noiseTileSize has to be 128^3! +#define modFast128(x) ((x) & 127) +#define modFast64(x) ((x) & 63) +#define DOWNCOEFFS 0.000334f,-0.001528f, 0.000410f, 0.003545f,-0.000938f,-0.008233f, 0.002172f, 0.019120f, \ + -0.005040f,-0.044412f, 0.011655f, 0.103311f,-0.025936f,-0.243780f, 0.033979f, 0.655340f, \ + 0.655340f, 0.033979f,-0.243780f,-0.025936f, 0.103311f, 0.011655f,-0.044412f,-0.005040f, \ + 0.019120f, 0.002172f,-0.008233f,-0.000938f, 0.003546f, 0.000410f,-0.001528f, 0.000334f + +////////////////////////////////////////////////////////////////////////////////////////// +// Wavelet downsampling -- periodic boundary conditions +////////////////////////////////////////////////////////////////////////////////////////// +static void downsampleX(float *from, float *to, int n){ + // if these values are not local incorrect results are generated + float downCoeffs[32] = { DOWNCOEFFS }; + const float *a = &downCoeffs[16]; + for (int i = 0; i < n / 2; i++) { + to[i] = 0; + for (int k = 2 * i - 16; k <= 2 * i + 16; k++) + to[i] += a[k - 2 * i] * from[modFast128(k)]; + } +} +static void downsampleY(float *from, float *to, int n){ + // if these values are not local incorrect results are generated + float downCoeffs[32] = { DOWNCOEFFS }; + const float *a = &downCoeffs[16]; + for (int i = 0; i < n / 2; i++) { + to[i * n] = 0; + for (int k = 2 * i - 16; k <= 2 * i + 16; k++) + to[i * n] += a[k - 2 * i] * from[modFast128(k) * n]; + } +} +static void downsampleZ(float *from, float *to, int n){ + // if these values are not local incorrect results are generated + float downCoeffs[32] = { DOWNCOEFFS }; + const float *a = &downCoeffs[16]; + for (int i = 0; i < n / 2; i++) { + to[i * n * n] = 0; + for (int k = 2 * i - 16; k <= 2 * i + 16; k++) + to[i * n * n] += a[k - 2 * i] * from[modFast128(k) * n * n]; + } +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Wavelet downsampling -- Neumann boundary conditions +////////////////////////////////////////////////////////////////////////////////////////// +static void downsampleNeumann(const float *from, float *to, int n, int stride) +{ + // if these values are not local incorrect results are generated + float downCoeffs[32] = { DOWNCOEFFS }; + static const float *const aCoCenter= &downCoeffs[16]; + for (int i = 0; i < n / 2; i++) { + to[i * stride] = 0; + for (int k = 2 * i - 16; k < 2 * i + 16; k++) { + // handle boundary + float fromval; + if (k < 0) { + fromval = from[0]; + } else if(k > n - 1) { + fromval = from[(n - 1) * stride]; + } else { + fromval = from[k * stride]; + } + to[i * stride] += aCoCenter[k - 2 * i] * fromval; + } + } +} +static void downsampleXNeumann(float* to, const float* from, int sx,int sy, int sz) { + for (int iy = 0; iy < sy; iy++) + for (int iz = 0; iz < sz; iz++) { + const int i = iy * sx + iz*sx*sy; + downsampleNeumann(&from[i], &to[i], sx, 1); + } +} +static void downsampleYNeumann(float* to, const float* from, int sx,int sy, int sz) { + for (int ix = 0; ix < sx; ix++) + for (int iz = 0; iz < sz; iz++) { + const int i = ix + iz*sx*sy; + downsampleNeumann(&from[i], &to[i], sy, sx); + } +} +static void downsampleZNeumann(float* to, const float* from, int sx,int sy, int sz) { + for (int ix = 0; ix < sx; ix++) + for (int iy = 0; iy < sy; iy++) { + const int i = ix + iy*sx; + downsampleNeumann(&from[i], &to[i], sz, sx*sy); + } +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Wavelet upsampling - periodic boundary conditions +////////////////////////////////////////////////////////////////////////////////////////// +static float _upCoeffs[4] = {0.25f, 0.75f, 0.75f, 0.25f}; +static void upsampleX(float *from, float *to, int n) { + const float *p = &_upCoeffs[2]; + + for (int i = 0; i < n; i++) { + to[i] = 0; + for (int k = i / 2; k <= i / 2 + 1; k++) + to[i] += p[i - 2 * k] * from[modFast64(k)]; + } +} +static void upsampleY(float *from, float *to, int n) { + const float *p = &_upCoeffs[2]; + + for (int i = 0; i < n; i++) { + to[i * n] = 0; + for (int k = i / 2; k <= i / 2 + 1; k++) + to[i * n] += p[i - 2 * k] * from[modFast64(k) * n]; + } +} +static void upsampleZ(float *from, float *to, int n) { + const float *p = &_upCoeffs[2]; + + for (int i = 0; i < n; i++) { + to[i * n * n] = 0; + for (int k = i / 2; k <= i / 2 + 1; k++) + to[i * n * n] += p[i - 2 * k] * from[modFast64(k) * n * n]; + } +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Wavelet upsampling - Neumann boundary conditions +////////////////////////////////////////////////////////////////////////////////////////// +static void upsampleNeumann(const float *from, float *to, int n, int stride) { + static const float *const pCoCenter = &_upCoeffs[2]; + for (int i = 0; i < n; i++) { + to[i * stride] = 0; + for (int k = i / 2; k <= i / 2 + 1; k++) { + float fromval; + if(k>n/2) { + fromval = from[(n/2) * stride]; + } else { + fromval = from[k * stride]; + } + to[i * stride] += pCoCenter[i - 2 * k] * fromval; + } + } +} +static void upsampleXNeumann(float* to, const float* from, int sx, int sy, int sz) { + for (int iy = 0; iy < sy; iy++) + for (int iz = 0; iz < sz; iz++) { + const int i = iy * sx + iz*sx*sy; + upsampleNeumann(&from[i], &to[i], sx, 1); + } +} +static void upsampleYNeumann(float* to, const float* from, int sx, int sy, int sz) { + for (int ix = 0; ix < sx; ix++) + for (int iz = 0; iz < sz; iz++) { + const int i = ix + iz*sx*sy; + upsampleNeumann(&from[i], &to[i], sy, sx); + } +} +static void upsampleZNeumann(float* to, const float* from, int sx, int sy, int sz) { + for (int ix = 0; ix < sx; ix++) + for (int iy = 0; iy < sy; iy++) { + const int i = ix + iy*sx; + upsampleNeumann(&from[i], &to[i], sz, sx*sy); + } +} + + +////////////////////////////////////////////////////////////////////////////////////////// +// load in an existing noise tile +////////////////////////////////////////////////////////////////////////////////////////// +static bool loadTile(float* const noiseTileData, std::string filename) +{ + FILE* file; + file = fopen(filename.c_str(), "rb"); + + if (file == NULL) { + printf("loadTile: No noise tile '%s' found.\n", filename.c_str()); + return false; + } + + // dimensions + int gridSize = noiseTileSize * noiseTileSize * noiseTileSize; + + // noiseTileData memory is managed by caller + int bread = fread((void*)noiseTileData, sizeof(float), gridSize, file); + fclose(file); + printf("Noise tile file '%s' loaded.\n", filename.c_str()); + + if (bread != gridSize) { + printf("loadTile: Noise tile '%s' is wrong size %d.\n", filename.c_str(), bread); + return false; + } + return true; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// write out an existing noise tile +////////////////////////////////////////////////////////////////////////////////////////// +static void saveTile(float* const noiseTileData, std::string filename) +{ + FILE* file; + file = fopen(filename.c_str(), "wb"); + + if (file == NULL) { + printf("saveTile: Noise tile '%s' could not be saved.\n", filename.c_str()); + return; + } + + fwrite((void*)noiseTileData, sizeof(float), noiseTileSize * noiseTileSize * noiseTileSize, file); + fclose(file); + + printf("saveTile: Noise tile file '%s' saved.\n", filename.c_str()); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// create a new noise tile if necessary +////////////////////////////////////////////////////////////////////////////////////////// +static void generateTile_WAVELET(float* const noiseTileData, std::string filename) { + // if a tile already exists, just use that + if (loadTile(noiseTileData, filename)) return; + + const int n = noiseTileSize; + const int n3 = n*n*n; + std::cout <<"Generating new 3d noise tile size="<. +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// WTURBULENCE handling +/////////////////////////////////////////////////////////////////////////////////// + +#include "WTURBULENCE.h" +#include "INTERPOLATE.h" +#include "IMAGE.h" +#include +#include "WAVELET_NOISE.h" +#include "FFT_NOISE.h" +#include "EIGENVALUE_HELPER.h" +#include "LU_HELPER.h" +#include "SPHERE.h" +#include + +// needed to access static advection functions +#include "FLUID_3D.h" + +#if PARALLEL==1 +#include +#endif // PARALLEL + +// 2^ {-5/6} +static const float persistence = 0.56123f; + +////////////////////////////////////////////////////////////////////// +// constructor +////////////////////////////////////////////////////////////////////// +WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify) +{ + // if noise magnitude is below this threshold, its contribution + // is negilgible, so stop evaluating new octaves + _cullingThreshold = 1e-3; + + // factor by which to increase the simulation resolution + _amplify = amplify; + + // manually adjust the overall amount of turbulence + _strength = 2.; + + // add the corresponding octaves of noise + _octaves = log((float)_amplify) / log(2.0f); + + // noise resolution + _xResBig = _amplify * xResSm; + _yResBig = _amplify * yResSm; + _zResBig = _amplify * zResSm; + _resBig = Vec3Int(_xResBig, _yResBig, _zResBig); + _invResBig = Vec3(1./(float)_resBig[0], 1./(float)_resBig[1], 1./(float)_resBig[2]); + _slabSizeBig = _xResBig*_yResBig; + _totalCellsBig = _slabSizeBig * _zResBig; + + // original / small resolution + _xResSm = xResSm; + _yResSm = yResSm; + _zResSm = zResSm; + _resSm = Vec3Int(xResSm, yResSm, zResSm); + _invResSm = Vec3(1./(float)_resSm[0], 1./(float)_resSm[1], 1./(float)_resSm[2] ); + _slabSizeSm = _xResSm*_yResSm; + _totalCellsSm = _slabSizeSm * _zResSm; + + // allocate high resolution density field + _totalStepsBig = 0; + _densityBig = new float[_totalCellsBig]; + _densityBigOld = new float[_totalCellsBig]; + + // allocate high resolution velocity field. Note that this is only + // necessary because we use MacCormack advection. For semi-Lagrangian + // advection, these arrays are not necessary. + _tempBig1 = _tempBig2 = + _bigUx = _bigUy = _bigUz = NULL; + _tempBig1 = new float[_totalCellsBig]; + _tempBig2 = new float[_totalCellsBig]; + _bigUx = new float[_totalCellsBig]; + _bigUy = new float[_totalCellsBig]; + _bigUz = new float[_totalCellsBig]; + + for(int i = 0; i < _totalCellsBig; i++) { + _densityBig[i] = + _densityBigOld[i] = + _bigUx[i] = + _bigUy[i] = + _bigUz[i] = + _tempBig1[i] = + _tempBig2[i] = 0.; + } + + // allocate & init texture coordinates + _tcU = new float[_totalCellsSm]; + _tcV = new float[_totalCellsSm]; + _tcW = new float[_totalCellsSm]; + _tcTemp = new float[_totalCellsSm]; + + // allocate & init energy terms + _energy = new float[_totalCellsSm]; + _highFreqEnergy = new float[_totalCellsSm]; + + // map all + const float dx = 1./(float)(_resSm[0]); + const float dy = 1./(float)(_resSm[1]); + const float dz = 1./(float)(_resSm[2]); + int index = 0; + for (int z = 0; z < _zResSm; z++) + for (int y = 0; y < _yResSm; y++) + for (int x = 0; x < _xResSm; x++, index++) + { + _tcU[index] = x*dx; + _tcV[index] = y*dy; + _tcW[index] = z*dz; + _tcTemp[index] = 0.; + _energy[index] = 0.; + } + + // allocate eigenvalue arrays + _eigMin = new float[_totalCellsSm]; + _eigMax = new float[_totalCellsSm]; + for(int i=0; i < _totalCellsSm; i++) + _eigMin[i] = _eigMax[i] = 0.; + + // noise tiles + _noiseTile = new float[noiseTileSize * noiseTileSize * noiseTileSize]; + std::string noiseTileFilename = std::string("noise.wavelets"); + generateTile_WAVELET(_noiseTile, noiseTileFilename); + /* + std::string noiseTileFilename = std::string("noise.fft"); + generatTile_FFT(_noiseTile, noiseTileFilename); + */ +} + +////////////////////////////////////////////////////////////////////// +// destructor +////////////////////////////////////////////////////////////////////// +WTURBULENCE::~WTURBULENCE() { + delete[] _densityBig; + delete[] _densityBigOld; + + delete[] _bigUx; + delete[] _bigUy; + delete[] _bigUz; + delete[] _tempBig1; + delete[] _tempBig2; + + delete[] _tcU; + delete[] _tcV; + delete[] _tcW; + delete[] _tcTemp; + + delete[] _eigMin; + delete[] _eigMax; + delete[] _noiseTile; + + delete[] _energy; + delete[] _highFreqEnergy; +} + +////////////////////////////////////////////////////////////////////// +// Change noise type +// +// type (1<<1) = wavelet / 2 +// type (1<<2) = FFT / 4 +// type (1<<3) = curl / 8 +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::setNoise(int type) +{ + if(type == 4) // FFT + { + std::string noiseTileFilename = std::string("noise.fft"); + generatTile_FFT(_noiseTile, noiseTileFilename); + } + else if(type == 8) // curl + { + // TODO: not supported yet + } + else // standard - wavelet + { + std::string noiseTileFilename = std::string("noise.wavelets"); + generateTile_WAVELET(_noiseTile, noiseTileFilename); + } +} + +////////////////////////////////////////////////////////////////////// +// Get the smallest valid x derivative +// +// Takes the one-sided finite difference in both directions and +// selects the smaller of the two +////////////////////////////////////////////////////////////////////// +static float minDx(int x, int y, int z, float* input, Vec3Int res) +{ + const int index = x + y * res[0] + z * res[0] * res[1]; + const int maxx = res[0]-2; + + // get grid values + float center = input[index]; + float left = (x <= 1) ? FLT_MAX : input[index - 1]; + float right = (x >= maxx) ? FLT_MAX : input[index + 1]; + + const float dx = res[0]; + + // get all the derivative estimates + float dLeft = (x <= 1) ? FLT_MAX : (center - left) * dx; + float dRight = (x >= maxx) ? FLT_MAX : (right - center) * dx; + float dCenter = (x <= 1 || x >= maxx) ? FLT_MAX : (right - left) * dx * 0.5f; + + // if it's on a boundary, only one estimate is valid + if (x <= 1) return dRight; + if (x >= maxx) return dLeft; + + // if it's not on a boundary, get the smallest one + float finalD; + finalD = (fabs(dCenter) < fabs(dRight)) ? dCenter : dRight; + finalD = (fabs(finalD) < fabs(dLeft)) ? finalD : dLeft; + + return finalD; +} + +////////////////////////////////////////////////////////////////////// +// get the smallest valid y derivative +// +// Takes the one-sided finite difference in both directions and +// selects the smaller of the two +////////////////////////////////////////////////////////////////////// +static float minDy(int x, int y, int z, float* input, Vec3Int res) +{ + const int index = x + y * res[0] + z * res[0] * res[1]; + const int maxy = res[1]-2; + + // get grid values + float center = input[index]; + float down = (y <= 1) ? FLT_MAX : input[index - res[0]]; + float up = (y >= maxy) ? FLT_MAX : input[index + res[0]]; + + const float dx = res[1]; // only for square domains + + // get all the derivative estimates + float dDown = (y <= 1) ? FLT_MAX : (center - down) * dx; + float dUp = (y >= maxy) ? FLT_MAX : (up - center) * dx; + float dCenter = (y <= 1 || y >= maxy) ? FLT_MAX : (up - down) * dx * 0.5f; + + // if it's on a boundary, only one estimate is valid + if (y <= 1) return dUp; + if (y >= maxy) return dDown; + + // if it's not on a boundary, get the smallest one + float finalD = (fabs(dCenter) < fabs(dUp)) ? dCenter : dUp; + finalD = (fabs(finalD) < fabs(dDown)) ? finalD : dDown; + + return finalD; +} + +////////////////////////////////////////////////////////////////////// +// get the smallest valid z derivative +// +// Takes the one-sided finite difference in both directions and +// selects the smaller of the two +////////////////////////////////////////////////////////////////////// +static float minDz(int x, int y, int z, float* input, Vec3Int res) +{ + const int slab = res[0]*res[1]; + const int index = x + y * res[0] + z * slab; + const int maxz = res[2]-2; + + // get grid values + float center = input[index]; + float front = (z <= 1) ? FLT_MAX : input[index - slab]; + float back = (z >= maxz) ? FLT_MAX : input[index + slab]; + + const float dx = res[2]; // only for square domains + + // get all the derivative estimates + float dfront = (z <= 1) ? FLT_MAX : (center - front) * dx; + float dback = (z >= maxz) ? FLT_MAX : (back - center) * dx; + float dCenter = (z <= 1 || z >= maxz) ? FLT_MAX : (back - front) * dx * 0.5f; + + // if it's on a boundary, only one estimate is valid + if (z <= 1) return dback; + if (z >= maxz) return dfront; + + // if it's not on a boundary, get the smallest one + float finalD = (fabs(dCenter) < fabs(dback)) ? dCenter : dback; + finalD = (fabs(finalD) < fabs(dfront)) ? finalD : dfront; + + return finalD; +} + +////////////////////////////////////////////////////////////////////// +// handle texture coordinates (advection, reset, eigenvalues), +// Beware -- uses big density maccormack as temporary arrays +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::advectTextureCoordinates (float dtOrg, float* xvel, float* yvel, float* zvel) { + // advection + SWAP_POINTERS(_tcTemp, _tcU); + FLUID_3D::copyBorderX(_tcTemp, _resSm); + FLUID_3D::copyBorderY(_tcTemp, _resSm); + FLUID_3D::copyBorderZ(_tcTemp, _resSm); + FLUID_3D::advectFieldMacCormack(dtOrg, xvel, yvel, zvel, + _tcTemp, _tcU, _tempBig1, _tempBig2, _resSm, NULL); + + SWAP_POINTERS(_tcTemp, _tcV); + FLUID_3D::copyBorderX(_tcTemp, _resSm); + FLUID_3D::copyBorderY(_tcTemp, _resSm); + FLUID_3D::copyBorderZ(_tcTemp, _resSm); + FLUID_3D::advectFieldMacCormack(dtOrg, xvel, yvel, zvel, + _tcTemp, _tcV, _tempBig1, _tempBig2, _resSm, NULL); + + SWAP_POINTERS(_tcTemp, _tcW); + FLUID_3D::copyBorderX(_tcTemp, _resSm); + FLUID_3D::copyBorderY(_tcTemp, _resSm); + FLUID_3D::copyBorderZ(_tcTemp, _resSm); + FLUID_3D::advectFieldMacCormack(dtOrg, xvel, yvel, zvel, + _tcTemp, _tcW, _tempBig1, _tempBig2, _resSm, NULL); +} + +////////////////////////////////////////////////////////////////////// +// Compute the eigenvalues of the advected texture +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::computeEigenvalues() { + // stats + float maxeig = -1.; + float mineig = 10.; + + // texture coordinate eigenvalues + for (int z = 1; z < _zResSm-1; z++) { + for (int y = 1; y < _yResSm-1; y++) + for (int x = 1; x < _xResSm-1; x++) + { + const int index = x+ y *_resSm[0] + z*_slabSizeSm; + + // compute jacobian + float jacobian[3][3] = { + { minDx(x, y, z, _tcU, _resSm), minDx(x, y, z, _tcV, _resSm), minDx(x, y, z, _tcW, _resSm) } , + { minDy(x, y, z, _tcU, _resSm), minDy(x, y, z, _tcV, _resSm), minDy(x, y, z, _tcW, _resSm) } , + { minDz(x, y, z, _tcU, _resSm), minDz(x, y, z, _tcV, _resSm), minDz(x, y, z, _tcW, _resSm) } + }; + + // ONLY compute the eigenvalues after checking that the matrix + // is nonsingular + JAMA::LU LU = computeLU3x3(jacobian); + + if (LU.isNonsingular()) + { + // get the analytic eigenvalues, quite slow right now... + Vec3 eigenvalues = Vec3(1.); + computeEigenvalues3x3( &eigenvalues[0], jacobian); + _eigMax[index] = MAX3V(eigenvalues); + _eigMin[index] = MIN3V(eigenvalues); + maxeig = MAX(_eigMax[index],maxeig); + mineig = MIN(_eigMin[index],mineig); + } + else + { + _eigMax[index] = 10.0f; + _eigMin[index] = 0.1; + } + } + } +} + +////////////////////////////////////////////////////////////////////// +// advect & reset texture coordinates based on eigenvalues +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::resetTextureCoordinates() +{ + // allowed deformation of the textures + const float limit = 2.f; + const float limitInv = 1./limit; + + // standard reset + int resets = 0; + const float dx = 1./(float)(_resSm[0]); + const float dy = 1./(float)(_resSm[1]); + const float dz = 1./(float)(_resSm[2]); + + for (int z = 1; z < _zResSm-1; z++) + for (int y = 1; y < _yResSm-1; y++) + for (int x = 1; x < _xResSm-1; x++) + { + const int index = x+ y *_resSm[0] + z*_slabSizeSm; + if (_eigMax[index] > limit || _eigMin[index] < limitInv) + { + _tcU[index] = (float)x * dx; + _tcV[index] = (float)y * dy; + _tcW[index] = (float)z * dz; + resets++; + } + } +} + +////////////////////////////////////////////////////////////////////// +// Compute the highest frequency component of the wavelet +// decomposition +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::decomposeEnergy() +{ + // do the decomposition -- the goal here is to have + // the energy with the high frequency component stomped out + // stored in _tcTemp when it is done. _highFreqEnergy is only used + // as an additional temp array + + // downsample input + downsampleXNeumann(_highFreqEnergy, _energy, _xResSm, _yResSm, _zResSm); + downsampleYNeumann(_tcTemp, _highFreqEnergy, _xResSm, _yResSm, _zResSm); + downsampleZNeumann(_highFreqEnergy, _tcTemp, _xResSm, _yResSm, _zResSm); + + // upsample input + upsampleZNeumann(_tcTemp, _highFreqEnergy, _xResSm, _yResSm, _zResSm); + upsampleYNeumann(_highFreqEnergy, _tcTemp, _xResSm, _yResSm, _zResSm); + upsampleXNeumann(_tcTemp, _highFreqEnergy, _xResSm, _yResSm, _zResSm); + + // subtract the down and upsampled field from the original field -- + // what should be left over is solely the high frequency component + int index = 0; + for (int z = 0; z < _zResSm; z++) + for (int y = 0; y < _yResSm; y++) { + for (int x = 0; x < _xResSm; x++, index++) { + // brute force reset of boundaries + if(z >= _zResSm - 1 || x >= _xResSm - 1 || y >= _yResSm - 1 || z <= 0 || y <= 0 || x <= 0) + _highFreqEnergy[index] = 0.; + else + _highFreqEnergy[index] = _energy[index] - _tcTemp[index]; + } + } +} + +////////////////////////////////////////////////////////////////////// +// compute velocity from energies and march into obstacles +// for wavelet decomposition +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::computeEnergy(float* xvel, float* yvel, float* zvel, unsigned char *obstacles) +{ + // compute everywhere + for (int x = 0; x < _totalCellsSm; x++) + _energy[x] = 0.5f * (xvel[x] * xvel[x] + yvel[x] * yvel[x] + zvel[x] * zvel[x]); + + FLUID_3D::copyBorderX(_energy, _resSm); + FLUID_3D::copyBorderY(_energy, _resSm); + FLUID_3D::copyBorderZ(_energy, _resSm); + + // pseudo-march the values into the obstacles + // the wavelet upsampler only uses a 3x3 support neighborhood, so + // propagating the values in by 4 should be sufficient + int index; + + // iterate + for (int iter = 0; iter < 4; iter++) + { + index = _slabSizeSm + _xResSm + 1; + for (int z = 1; z < _zResSm - 1; z++, index += 2 * _xResSm) + for (int y = 1; y < _yResSm - 1; y++, index += 2) + for (int x = 1; x < _xResSm - 1; x++, index++) + if (obstacles[index] && obstacles[index] != RETIRED) + { + float sum = 0.0f; + int valid = 0; + + if (!obstacles[index + 1] || obstacles[index + 1] == RETIRED) + { + sum += _energy[index + 1]; + valid++; + } + if (!obstacles[index - 1] || obstacles[index - 1] == RETIRED) + { + sum += _energy[index - 1]; + valid++; + } + if (!obstacles[index + _xResSm] || obstacles[index + _xResSm] == RETIRED) + { + sum += _energy[index + _xResSm]; + valid++; + } + if (!obstacles[index - _xResSm] || obstacles[index - _xResSm] == RETIRED) + { + sum += _energy[index - _xResSm]; + valid++; + } + if (!obstacles[index + _slabSizeSm] || obstacles[index + _slabSizeSm] == RETIRED) + { + sum += _energy[index + _slabSizeSm]; + valid++; + } + if (!obstacles[index - _slabSizeSm] || obstacles[index - _slabSizeSm] == RETIRED) + { + sum += _energy[index - _slabSizeSm]; + valid++; + } + if (valid > 0) + { + _energy[index] = sum / valid; + obstacles[index] = MARCHED; + } + } + index = _slabSizeSm + _xResSm + 1; + for (int z = 1; z < _zResSm - 1; z++, index += 2 * _xResSm) + for (int y = 1; y < _yResSm - 1; y++, index += 2) + for (int x = 1; x < _xResSm - 1; x++, index++) + if (obstacles[index] == MARCHED) + obstacles[index] = RETIRED; + } + index = _slabSizeSm + _xResSm + 1; + for (int z = 1; z < _zResSm - 1; z++, index += 2 * _xResSm) + for (int y = 1; y < _yResSm - 1; y++, index += 2) + for (int x = 1; x < _xResSm - 1; x++, index++) + if (obstacles[index]) + obstacles[index] = 1; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Evaluate derivatives +////////////////////////////////////////////////////////////////////////////////////////// +Vec3 WTURBULENCE::WVelocity(Vec3 orgPos) +{ + // arbitrarily offset evaluation points + const Vec3 p1 = orgPos + Vec3(NOISE_TILE_SIZE/2,0,0); + const Vec3 p2 = orgPos + Vec3(0,NOISE_TILE_SIZE/2,0); + const Vec3 p3 = orgPos + Vec3(0,0,NOISE_TILE_SIZE/2); + + const float f1y = WNoiseDy(p1, _noiseTile); + const float f1z = WNoiseDz(p1, _noiseTile); + + const float f2x = WNoiseDx(p2, _noiseTile); + const float f2z = WNoiseDz(p2, _noiseTile); + + const float f3x = WNoiseDx(p3, _noiseTile); + const float f3y = WNoiseDy(p3, _noiseTile); + + Vec3 ret = Vec3( + f3y - f2z, + f1z - f3x, + f2x - f1y ); + return ret; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Evaluate derivatives with Jacobian +////////////////////////////////////////////////////////////////////////////////////////// +Vec3 WTURBULENCE::WVelocityWithJacobian(Vec3 orgPos, float* xUnwarped, float* yUnwarped, float* zUnwarped) +{ + // arbitrarily offset evaluation points + const Vec3 p1 = orgPos + Vec3(NOISE_TILE_SIZE/2,0,0); + const Vec3 p2 = orgPos + Vec3(0,NOISE_TILE_SIZE/2,0); + const Vec3 p3 = orgPos + Vec3(0,0,NOISE_TILE_SIZE/2); + + Vec3 final; + final[0] = WNoiseDx(p1, _noiseTile); + final[1] = WNoiseDy(p1, _noiseTile); + final[2] = WNoiseDz(p1, _noiseTile); + const float f1x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; + const float f1y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; + const float f1z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; + + final[0] = WNoiseDx(p2, _noiseTile); + final[1] = WNoiseDy(p2, _noiseTile); + final[2] = WNoiseDz(p2, _noiseTile); + const float f2x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; + const float f2y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; + const float f2z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; + + final[0] = WNoiseDx(p3, _noiseTile); + final[1] = WNoiseDy(p3, _noiseTile); + final[2] = WNoiseDz(p3, _noiseTile); + const float f3x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; + const float f3y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; + const float f3z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; + + Vec3 ret = Vec3( + f3y - f2z, + f1z - f3x, + f2x - f1y ); + return ret; +} + +////////////////////////////////////////////////////////////////////// +// perform an actual noise advection step +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::stepTurbulenceReadable(float dtOrg, float* xvel, float* yvel, float* zvel, unsigned char *obstacles) +{ + // enlarge timestep to match grid + const float dt = dtOrg * _amplify; + const float invAmp = 1.0f / _amplify; + + // prepare textures + advectTextureCoordinates(dtOrg, xvel,yvel,zvel); + + // compute eigenvalues of the texture coordinates + computeEigenvalues(); + + // do wavelet decomposition of energy + computeEnergy(xvel, yvel, zvel, obstacles); + decomposeEnergy(); + + // zero out coefficients inside of the obstacle + for (int x = 0; x < _totalCellsSm; x++) + if (obstacles[x]) _energy[x] = 0.f; + + float maxVelocity = 0.; + for (int z = 1; z < _zResBig - 1; z++) + for (int y = 1; y < _yResBig - 1; y++) + for (int x = 1; x < _xResBig - 1; x++) + { + // get unit position for both fine and coarse grid + const Vec3 pos = Vec3(x,y,z); + const Vec3 posSm = pos * invAmp; + + // get grid index for both fine and coarse grid + const int index = x + y *_xResBig + z *_slabSizeBig; + const int indexSmall = (int)posSm[0] + (int)posSm[1] * _xResSm + (int)posSm[2] * _slabSizeSm; + + // get a linearly interpolated velocity and texcoords + // from the coarse grid + Vec3 vel = INTERPOLATE::lerp3dVec( xvel,yvel,zvel, + posSm[0], posSm[1], posSm[2], _xResSm,_yResSm,_zResSm); + Vec3 uvw = INTERPOLATE::lerp3dVec( _tcU,_tcV,_tcW, + posSm[0], posSm[1], posSm[2], _xResSm,_yResSm,_zResSm); + + // multiply the texture coordinate by _resSm so that turbulence + // synthesis begins at the first octave that the coarse grid + // cannot capture + Vec3 texCoord = Vec3(uvw[0] * _resSm[0], + uvw[1] * _resSm[1], + uvw[2] * _resSm[2]); + + // retrieve wavelet energy at highest frequency + float energy = INTERPOLATE::lerp3d( + _highFreqEnergy, posSm[0],posSm[1],posSm[2], _xResSm, _yResSm, _zResSm); + + // base amplitude for octave 0 + float coefficient = sqrtf(2.0f * fabs(energy)); + const float amplitude = _strength * fabs(0.5 * coefficient) * persistence; + + // add noise to velocity, but only if the turbulence is + // sufficiently undeformed, and the energy is large enough + // to make a difference + const bool addNoise = _eigMax[indexSmall] < 2. && + _eigMin[indexSmall] > 0.5; + if (addNoise && amplitude > _cullingThreshold) { + // base amplitude for octave 0 + float amplitudeScaled = amplitude; + + for (int octave = 0; octave < _octaves; octave++) + { + // multiply the vector noise times the maximum allowed + // noise amplitude at this octave, and add it to the total + vel += WVelocity(texCoord) * amplitudeScaled; + + // scale coefficient for next octave + amplitudeScaled *= persistence; + texCoord *= 2.0f; + } + } + + // Store velocity + turbulence in big grid for maccormack step + // + // If you wanted to save memory, you would instead perform a + // semi-Lagrangian backtrace for the current grid cell here. Then + // you could just throw the velocity away. + _bigUx[index] = vel[0]; + _bigUy[index] = vel[1]; + _bigUz[index] = vel[2]; + + // compute the velocity magnitude for substepping later + const float velMag = _bigUx[index] * _bigUx[index] + + _bigUy[index] * _bigUy[index] + + _bigUz[index] * _bigUz[index]; + if (velMag > maxVelocity) maxVelocity = velMag; + + // zero out velocity inside obstacles + float obsCheck = INTERPOLATE::lerp3dToFloat( + obstacles, posSm[0], posSm[1], posSm[2], _xResSm, _yResSm, _zResSm); + if (obsCheck > 0.95) + _bigUx[index] = _bigUy[index] = _bigUz[index] = 0.; + } + + // prepare density for an advection + SWAP_POINTERS(_densityBig, _densityBigOld); + + // based on the maximum velocity present, see if we need to substep, + // but cap the maximum number of substeps to 5 + const int maxSubSteps = 25; + const int maxVel = 5; + maxVelocity = sqrt(maxVelocity) * dt; + int totalSubsteps = (int)(maxVelocity / (float)maxVel); + totalSubsteps = (totalSubsteps < 1) ? 1 : totalSubsteps; + totalSubsteps = (totalSubsteps > maxSubSteps) ? maxSubSteps : totalSubsteps; + const float dtSubdiv = dt / (float)totalSubsteps; + + // set boundaries of big velocity grid + FLUID_3D::setZeroX(_bigUx, _resBig); + FLUID_3D::setZeroY(_bigUy, _resBig); + FLUID_3D::setZeroZ(_bigUz, _resBig); + + // do the MacCormack advection, with substepping if necessary + for(int substep = 0; substep < totalSubsteps; substep++) + { + FLUID_3D::advectFieldMacCormack(dtSubdiv, _bigUx, _bigUy, _bigUz, + _densityBigOld, _densityBig, _tempBig1, _tempBig2, _resBig, NULL); + + if (substep < totalSubsteps - 1) + SWAP_POINTERS(_densityBig, _densityBigOld); + } // substep + + // wipe the density borders + FLUID_3D::setZeroBorder(_densityBig, _resBig); + + // reset texture coordinates now in preparation for next timestep + // Shouldn't do this before generating the noise because then the + // eigenvalues stored do not reflect the underlying texture coordinates + resetTextureCoordinates(); + + // output files + /* + string prefix = string("./amplified.preview/density_bigxy_"); + FLUID_3D::writeImageSliceXY(_densityBig, _resBig, _resBig[2]/2, prefix, _totalStepsBig, 1.0f); + //string df3Prefix = string("./df3/density_big_"); + //IMAGE::dumpDF3(_totalStepsBig, df3Prefix, _densityBig, _resBig[0],_resBig[1],_resBig[2]); + string pbrtPrefix = string("./pbrt/density_big_"); + IMAGE::dumpPBRT(_totalStepsBig, pbrtPrefix, _densityBig, _resBig[0],_resBig[1],_resBig[2]); + */ + _totalStepsBig++; +} + +////////////////////////////////////////////////////////////////////// +// perform the full turbulence algorithm, including OpenMP +// if available +////////////////////////////////////////////////////////////////////// +void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, float* zvel, unsigned char *obstacles) +{ + // enlarge timestep to match grid + const float dt = dtOrg * _amplify; + const float invAmp = 1.0f / _amplify; + + // prepare textures + advectTextureCoordinates(dtOrg, xvel,yvel,zvel); + + // do wavelet decomposition of energy + computeEnergy(xvel, yvel, zvel, obstacles); + decomposeEnergy(); + + // zero out coefficients inside of the obstacle + for (int x = 0; x < _totalCellsSm; x++) + if (obstacles[x]) _energy[x] = 0.f; + + // parallel region setup + float maxVelMagThreads[8] = { -1., -1., -1., -1., -1., -1., -1., -1. }; +#if PARALLEL==1 +#pragma omp parallel +#endif + { float maxVelMag1 = 0.; +#if PARALLEL==1 + const int id = omp_get_thread_num(), num = omp_get_num_threads(); +#else + const int id = 0; +#endif + + // vector noise main loop +#if PARALLEL==1 +#pragma omp for schedule(static) +#endif + for (int zSmall = 0; zSmall < _zResSm; zSmall++) + for (int ySmall = 0; ySmall < _yResSm; ySmall++) + for (int xSmall = 0; xSmall < _xResSm; xSmall++) + { + const int indexSmall = xSmall + ySmall * _xResSm + zSmall * _slabSizeSm; + + // compute jacobian + float jacobian[3][3] = { + { minDx(xSmall, ySmall, zSmall, _tcU, _resSm), minDx(xSmall, ySmall, zSmall, _tcV, _resSm), minDx(xSmall, ySmall, zSmall, _tcW, _resSm) } , + { minDy(xSmall, ySmall, zSmall, _tcU, _resSm), minDy(xSmall, ySmall, zSmall, _tcV, _resSm), minDy(xSmall, ySmall, zSmall, _tcW, _resSm) } , + { minDz(xSmall, ySmall, zSmall, _tcU, _resSm), minDz(xSmall, ySmall, zSmall, _tcV, _resSm), minDz(xSmall, ySmall, zSmall, _tcW, _resSm) } + }; + + // get LU factorization of texture jacobian and apply + // it to unit vectors + JAMA::LU LU = computeLU3x3(jacobian); + float xUnwarped[] = {1.0f, 0.0f, 0.0f}; + float yUnwarped[] = {0.0f, 1.0f, 0.0f}; + float zUnwarped[] = {0.0f, 0.0f, 1.0f}; + float xWarped[] = {1.0f, 0.0f, 0.0f}; + float yWarped[] = {0.0f, 1.0f, 0.0f}; + float zWarped[] = {0.0f, 0.0f, 1.0f}; + bool nonSingular = LU.isNonsingular(); + float eigMax = 10.0f; + float eigMin = 0.1f; + if (nonSingular) + { + solveLU3x3(LU, xUnwarped, xWarped); + solveLU3x3(LU, yUnwarped, yWarped); + solveLU3x3(LU, zUnwarped, zWarped); + + // compute the eigenvalues while we have the Jacobian available + Vec3 eigenvalues = Vec3(1.); + computeEigenvalues3x3( &eigenvalues[0], jacobian); + _eigMax[indexSmall] = MAX3V(eigenvalues); + _eigMin[indexSmall] = MIN3V(eigenvalues); + } + + // make sure to skip one on the beginning and end + int xStart = (xSmall == 0) ? 1 : 0; + int xEnd = (xSmall == _xResSm - 1) ? _amplify - 1 : _amplify; + int yStart = (ySmall == 0) ? 1 : 0; + int yEnd = (ySmall == _yResSm - 1) ? _amplify - 1 : _amplify; + int zStart = (zSmall == 0) ? 1 : 0; + int zEnd = (zSmall == _zResSm - 1) ? _amplify - 1 : _amplify; + + for (int zBig = zStart; zBig < zEnd; zBig++) + for (int yBig = yStart; yBig < yEnd; yBig++) + for (int xBig = xStart; xBig < xEnd; xBig++) + { + const int x = xSmall * _amplify + xBig; + const int y = ySmall * _amplify + yBig; + const int z = zSmall * _amplify + zBig; + + // get unit position for both fine and coarse grid + const Vec3 pos = Vec3(x,y,z); + const Vec3 posSm = pos * invAmp; + + // get grid index for both fine and coarse grid + const int index = x + y *_xResBig + z *_slabSizeBig; + + // get a linearly interpolated velocity and texcoords + // from the coarse grid + Vec3 vel = INTERPOLATE::lerp3dVec( xvel,yvel,zvel, + posSm[0], posSm[1], posSm[2], _xResSm,_yResSm,_zResSm); + Vec3 uvw = INTERPOLATE::lerp3dVec( _tcU,_tcV,_tcW, + posSm[0], posSm[1], posSm[2], _xResSm,_yResSm,_zResSm); + + // multiply the texture coordinate by _resSm so that turbulence + // synthesis begins at the first octave that the coarse grid + // cannot capture + Vec3 texCoord = Vec3(uvw[0] * _resSm[0], + uvw[1] * _resSm[1], + uvw[2] * _resSm[2]); + + // retrieve wavelet energy at highest frequency + float energy = INTERPOLATE::lerp3d( + _highFreqEnergy, posSm[0],posSm[1],posSm[2], _xResSm, _yResSm, _zResSm); + + // base amplitude for octave 0 + float coefficient = sqrtf(2.0f * fabs(energy)); + const float amplitude = _strength * fabs(0.5 * coefficient) * persistence; + + // add noise to velocity, but only if the turbulence is + // sufficiently undeformed, and the energy is large enough + // to make a difference + const bool addNoise = _eigMax[indexSmall] < 2. && + _eigMin[indexSmall] > 0.5; + if (addNoise && amplitude > _cullingThreshold) { + // base amplitude for octave 0 + float amplitudeScaled = amplitude; + + for (int octave = 0; octave < _octaves; octave++) + { + // multiply the vector noise times the maximum allowed + // noise amplitude at this octave, and add it to the total + vel += WVelocityWithJacobian(texCoord, &xUnwarped[0], &yUnwarped[0], &zUnwarped[0]) * amplitudeScaled; + + // scale coefficient for next octave + amplitudeScaled *= persistence; + texCoord *= 2.0f; + } + } + + // Store velocity + turbulence in big grid for maccormack step + // + // If you wanted to save memory, you would instead perform a + // semi-Lagrangian backtrace for the current grid cell here. Then + // you could just throw the velocity away. + _bigUx[index] = vel[0]; + _bigUy[index] = vel[1]; + _bigUz[index] = vel[2]; + + // compute the velocity magnitude for substepping later + const float velMag = _bigUx[index] * _bigUx[index] + + _bigUy[index] * _bigUy[index] + + _bigUz[index] * _bigUz[index]; + if (velMag > maxVelMag1) maxVelMag1 = velMag; + + // zero out velocity inside obstacles + float obsCheck = INTERPOLATE::lerp3dToFloat( + obstacles, posSm[0], posSm[1], posSm[2], _xResSm, _yResSm, _zResSm); + if (obsCheck > 0.95) + _bigUx[index] = _bigUy[index] = _bigUz[index] = 0.; + } // xyz + +#if PARALLEL==1 + maxVelMagThreads[id] = maxVelMag1; +#else + maxVelMagThreads[0] = maxVelMag1; +#endif + } + } // omp + + // compute maximum over threads + float maxVelMag = maxVelMagThreads[0]; +#if PARALLEL==1 + for (int i = 1; i < 8; i++) + if (maxVelMag < maxVelMagThreads[i]) + maxVelMag = maxVelMagThreads[i]; +#endif + + // prepare density for an advection + SWAP_POINTERS(_densityBig, _densityBigOld); + + // based on the maximum velocity present, see if we need to substep, + // but cap the maximum number of substeps to 5 + const int maxSubSteps = 25; + const int maxVel = 5; + maxVelMag = sqrt(maxVelMag) * dt; + int totalSubsteps = (int)(maxVelMag / (float)maxVel); + totalSubsteps = (totalSubsteps < 1) ? 1 : totalSubsteps; + + totalSubsteps = (totalSubsteps > maxSubSteps) ? maxSubSteps : totalSubsteps; + const float dtSubdiv = dt / (float)totalSubsteps; + + // set boundaries of big velocity grid + FLUID_3D::setZeroX(_bigUx, _resBig); + FLUID_3D::setZeroY(_bigUy, _resBig); + FLUID_3D::setZeroZ(_bigUz, _resBig); + + // do the MacCormack advection, with substepping if necessary + for(int substep = 0; substep < totalSubsteps; substep++) + { + FLUID_3D::advectFieldMacCormack(dtSubdiv, _bigUx, _bigUy, _bigUz, + _densityBigOld, _densityBig, _tempBig1, _tempBig2, _resBig, NULL); + + if (substep < totalSubsteps - 1) + SWAP_POINTERS(_densityBig, _densityBigOld); + } // substep + + // wipe the density borders + FLUID_3D::setZeroBorder(_densityBig, _resBig); + + // reset texture coordinates now in preparation for next timestep + // Shouldn't do this before generating the noise because then the + // eigenvalues stored do not reflect the underlying texture coordinates + resetTextureCoordinates(); + + // output files + // string prefix = string("./amplified.preview/density_bigxy_"); + // FLUID_3D::writeImageSliceXY(_densityBig, _resBig, _resBig[2]/2, prefix, _totalStepsBig, 1.0f); + //string df3prefix = string("./df3/density_big_"); + //IMAGE::dumpDF3(_totalStepsBig, df3prefix, _densityBig, _resBig[0],_resBig[1],_resBig[2]); + // string pbrtPrefix = string("./pbrt/density_big_"); + // IMAGE::dumpPBRT(_totalStepsBig, pbrtPrefix, _densityBig, _resBig[0],_resBig[1],_resBig[2]); + + _totalStepsBig++; +} diff --git a/intern/smoke/intern/WTURBULENCE.h b/intern/smoke/intern/WTURBULENCE.h new file mode 100644 index 00000000000..858a47b7dd1 --- /dev/null +++ b/intern/smoke/intern/WTURBULENCE.h @@ -0,0 +1,147 @@ +////////////////////////////////////////////////////////////////////// +// This file is part of Wavelet Turbulence. +// +// Wavelet Turbulence 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 3 of the License, or +// (at your option) any later version. +// +// Wavelet Turbulence 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 Wavelet Turbulence. If not, see . +// +// Copyright 2008 Theodore Kim and Nils Thuerey +// +// WTURBULENCE handling +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef WTURBULENCE_H +#define WTURBULENCE_H + +#include "VEC3.h" +using namespace BasicVector; +class SIMPLE_PARSER; + +/////////////////////////////////////////////////////////////////////////////// +/// Main WTURBULENCE class, stores large density array etc. +/////////////////////////////////////////////////////////////////////////////// +class WTURBULENCE +{ + public: + // both config files can be NULL, altCfg might override values from noiseCfg + WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify); + + /// destructor + virtual ~WTURBULENCE(); + + void setNoise(int type); + + // step more readable version -- no rotation correction + void stepTurbulenceReadable(float dt, float* xvel, float* yvel, float* zvel, unsigned char *obstacles); + + // step more complete version -- include rotation correction + // and use OpenMP if available + void stepTurbulenceFull(float dt, float* xvel, float* yvel, float* zvel, unsigned char *obstacles); + + // texcoord functions + void advectTextureCoordinates(float dtOrg, float* xvel, float* yvel, float* zvel); + void resetTextureCoordinates(); + + void computeEnergy(float* xvel, float* yvel, float* zvel, unsigned char *obstacles); + + // evaluate wavelet noise function + Vec3 WVelocity(Vec3 p); + Vec3 WVelocityWithJacobian(Vec3 p, float* xUnwarped, float* yUnwarped, float* zUnwarped); + + // access functions + inline float* getDensityBig() { return _densityBig; } + inline float* getArrayTcU() { return _tcU; } + inline float* getArrayTcV() { return _tcV; } + inline float* getArrayTcW() { return _tcW; } + inline float* getArrayEigMin() { return _eigMin; } + inline float* getArrayEigMax() { return _eigMax; } + + inline Vec3Int getResSm() { return _resSm; } // small resolution + inline Vec3Int getResBig() { return _resBig; } + inline int getOctaves() { return _octaves; } + + protected: + // enlargement factor from original velocity field / simulation + // _Big = _amplify * _Sm + int _amplify; + int _octaves; + float _strength; + + // noise settings + float _cullingThreshold; + float _noiseStrength; + float _noiseSizeScale; + bool _uvwAdvection; + bool _uvwReset; + float _noiseTimeanimSpeed; + int _dumpInterval; + int _noiseControlType; + // debug, scale density for projections output images + float _outputScale; + + // noise resolution + int _xResBig; + int _yResBig; + int _zResBig; + Vec3Int _resBig; + Vec3 _invResBig; + int _totalCellsBig; + int _slabSizeBig; + // original / small resolution + int _xResSm; + int _yResSm; + int _zResSm; + Vec3Int _resSm; + Vec3 _invResSm; + int _totalCellsSm; + int _slabSizeSm; + + float* _densityBig; + float* _densityBigOld; + + // big velocity macCormack fields + float* _bigUx; + float* _bigUy; + float* _bigUz; + // temp arrays for BFECC and MacCormack - they have more convenient + // names in the actual implementations + float* _tempBig1; + float* _tempBig2; + + // texture coordinates for noise + float* _tcU; + float* _tcV; + float* _tcW; + float* _tcTemp; + + float* _eigMin; + float* _eigMax; + + // wavelet decomposition of velocity energies + float* _energy; + + // noise data + float* _noiseTile; + //float* _noiseTileExt; + + // step counter + int _totalStepsBig; + + // highest frequency component of wavelet decomposition + float* _highFreqEnergy; + + void computeEigenvalues(); + void decomposeEnergy(); +}; + +#endif // WTURBULENCE_H + diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp new file mode 100644 index 00000000000..c81d6fb8c50 --- /dev/null +++ b/intern/smoke/intern/smoke_API.cpp @@ -0,0 +1,125 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Daniel Genrich + * All rights reserved. + * + * Contributor(s): None + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include "FLUID_3D.h" + +#include +#include + +// y in smoke is z in blender +extern "C" FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt) +{ + // smoke lib uses y as top-bottom/vertical axis where blender uses z + FLUID_3D *fluid = new FLUID_3D(res, amplify, p0, p1, dt); + + // printf("xres: %d, yres: %d, zres: %d\n", res[0], res[1], res[2]); + + return fluid; +} + +extern "C" void smoke_free(FLUID_3D *fluid) +{ + delete fluid; + fluid = NULL; +} + +extern "C" void smoke_step(FLUID_3D *fluid, float dx) +{ + // fluid->addSmokeColumn(); + fluid->step(); +} + +extern "C" void smoke_initBlenderRNA(FLUID_3D *fluid, float *alpha, float *beta) +{ + fluid->initBlenderRNA(alpha, beta); +} + +template < class T > inline T ABS( T a ) { + return (0 < a) ? a : -a ; +} + +extern "C" float *smoke_get_density(FLUID_3D *fluid) +{ + return fluid->_density; +} + +extern "C" float *smoke_get_heat(FLUID_3D *fluid) +{ + return fluid->_heat; +} + +extern "C" float *smoke_get_velocity_x(FLUID_3D *fluid) +{ + return fluid->_xVorticity; +} + +extern "C" float *smoke_get_velocity_y(FLUID_3D *fluid) +{ + return fluid->_yVorticity; +} + +extern "C" float *smoke_get_velocity_z(FLUID_3D *fluid) +{ + return fluid->_zVorticity; +} + +extern "C" float *smoke_get_bigdensity(FLUID_3D *fluid) +{ + return fluid->_wTurbulence->getDensityBig(); +} + +extern "C" void smoke_get_bigres(FLUID_3D *fluid, int *res) +{ + Vec3Int r = fluid->_wTurbulence->getResBig(); + res[0] = r[0]; + res[1] = r[1]; + res[2] = r[2]; +} + +extern "C" unsigned char *smoke_get_obstacle(FLUID_3D *fluid) +{ + return fluid->_obstacles; +} + +extern "C" size_t smoke_get_index(int x, int max_x, int y, int max_y, int z, int max_z) +{ + // // const int index = x + y * smd->res[0] + z * smd->res[0]*smd->res[1]; + return x + y * max_x + z * max_x*max_y; +} + +extern "C" size_t smoke_get_index2d(int x, int max_x, int y, int max_y, int z, int max_z) +{ + return x + y * max_x; +} + +extern "C" void smoke_set_noise(FLUID_3D *fluid, int type) +{ + fluid->_wTurbulence->setNoise(type); +} + + + diff --git a/intern/smoke/intern/tnt/jama_eig.h b/intern/smoke/intern/tnt/jama_eig.h new file mode 100644 index 00000000000..0d833be56de --- /dev/null +++ b/intern/smoke/intern/tnt/jama_eig.h @@ -0,0 +1,1050 @@ +#ifndef JAMA_EIG_H +#define JAMA_EIG_H + + +#include "tnt_array1d.h" +#include "tnt_array2d.h" +#include "tnt_math_utils.h" + +#include +// for min(), max() below + +#include +// for fabs() below + +using namespace TNT; +using namespace std; + +// NT debugging +//static int gEigenDebug=0; +//if(gEigenDebug) std::cerr<<"n="< + If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is + diagonal and the eigenvector matrix V is orthogonal. That is, + the diagonal values of D are the eigenvalues, and + V*V' = I, where I is the identity matrix. The columns of V + represent the eigenvectors in the sense that A*V = V*D. + +

+ If A is not symmetric, then the eigenvalue matrix D is block diagonal + with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, + a + i*b, in 2-by-2 blocks, [a, b; -b, a]. That is, if the complex + eigenvalues look like +

+
+          u + iv     .        .          .      .    .
+            .      u - iv     .          .      .    .
+            .        .      a + ib       .      .    .
+            .        .        .        a - ib   .    .
+            .        .        .          .      x    .
+            .        .        .          .      .    y
+
+ then D looks like +
+
+            u        v        .          .      .    .
+           -v        u        .          .      .    . 
+            .        .        a          b      .    .
+            .        .       -b          a      .    .
+            .        .        .          .      x    .
+            .        .        .          .      .    y
+
+ This keeps V a real matrix in both symmetric and non-symmetric + cases, and A*V = V*D. + + + +

+ The matrix V may be badly + conditioned, or even singular, so the validity of the equation + A = V*D*inverse(V) depends upon the condition number of V. + +

+ (Adapted from JAMA, a Java Matrix Library, developed by jointly + by the Mathworks and NIST; see http://math.nist.gov/javanumerics/jama). +**/ + +template +class Eigenvalue +{ + + + /** Row and column dimension (square matrix). */ + int n; + + int issymmetric; /* boolean*/ + + /** Arrays for internal storage of eigenvalues. */ + + TNT::Array1D d; /* real part */ + TNT::Array1D e; /* img part */ + + /** Array for internal storage of eigenvectors. */ + TNT::Array2D V; + + /** Array for internal storage of nonsymmetric Hessenberg form. + @serial internal storage of nonsymmetric Hessenberg form. + */ + TNT::Array2D H; + + + /** Working storage for nonsymmetric algorithm. + @serial working storage for nonsymmetric algorithm. + */ + TNT::Array1D ort; + + + // Symmetric Householder reduction to tridiagonal form. + + void tred2() { + + // This is derived from the Algol procedures tred2 by + // Bowdler, Martin, Reinsch, and Wilkinson, Handbook for + // Auto. Comp., Vol.ii-Linear Algebra, and the corresponding + // Fortran subroutine in EISPACK. + + for (int j = 0; j < n; j++) { + d[j] = V[n-1][j]; + } + + // Householder reduction to tridiagonal form. + + for (int i = n-1; i > 0; i--) { + + // Scale to avoid under/overflow. + + Real scale = 0.0; + Real h = 0.0; + for (int k = 0; k < i; k++) { + scale = scale + fabs(d[k]); + } + if (scale == 0.0) { + e[i] = d[i-1]; + for (int j = 0; j < i; j++) { + d[j] = V[i-1][j]; + V[i][j] = 0.0; + V[j][i] = 0.0; + } + } else { + + // Generate Householder vector. + + for (int k = 0; k < i; k++) { + d[k] /= scale; + h += d[k] * d[k]; + } + Real f = d[i-1]; + Real g = sqrt(h); + if (f > 0) { + g = -g; + } + e[i] = scale * g; + h = h - f * g; + d[i-1] = f - g; + for (int j = 0; j < i; j++) { + e[j] = 0.0; + } + + // Apply similarity transformation to remaining columns. + + for (int j = 0; j < i; j++) { + f = d[j]; + V[j][i] = f; + g = e[j] + V[j][j] * f; + for (int k = j+1; k <= i-1; k++) { + g += V[k][j] * d[k]; + e[k] += V[k][j] * f; + } + e[j] = g; + } + f = 0.0; + for (int j = 0; j < i; j++) { + e[j] /= h; + f += e[j] * d[j]; + } + Real hh = f / (h + h); + for (int j = 0; j < i; j++) { + e[j] -= hh * d[j]; + } + for (int j = 0; j < i; j++) { + f = d[j]; + g = e[j]; + for (int k = j; k <= i-1; k++) { + V[k][j] -= (f * e[k] + g * d[k]); + } + d[j] = V[i-1][j]; + V[i][j] = 0.0; + } + } + d[i] = h; + } + + // Accumulate transformations. + + for (int i = 0; i < n-1; i++) { + V[n-1][i] = V[i][i]; + V[i][i] = 1.0; + Real h = d[i+1]; + if (h != 0.0) { + for (int k = 0; k <= i; k++) { + d[k] = V[k][i+1] / h; + } + for (int j = 0; j <= i; j++) { + Real g = 0.0; + for (int k = 0; k <= i; k++) { + g += V[k][i+1] * V[k][j]; + } + for (int k = 0; k <= i; k++) { + V[k][j] -= g * d[k]; + } + } + } + for (int k = 0; k <= i; k++) { + V[k][i+1] = 0.0; + } + } + for (int j = 0; j < n; j++) { + d[j] = V[n-1][j]; + V[n-1][j] = 0.0; + } + V[n-1][n-1] = 1.0; + e[0] = 0.0; + } + + // Symmetric tridiagonal QL algorithm. + + void tql2 () { + + // This is derived from the Algol procedures tql2, by + // Bowdler, Martin, Reinsch, and Wilkinson, Handbook for + // Auto. Comp., Vol.ii-Linear Algebra, and the corresponding + // Fortran subroutine in EISPACK. + + for (int i = 1; i < n; i++) { + e[i-1] = e[i]; + } + e[n-1] = 0.0; + + Real f = 0.0; + Real tst1 = 0.0; + Real eps = pow(2.0,-52.0); + for (int l = 0; l < n; l++) { + + // Find small subdiagonal element + + tst1 = max(tst1,fabs(d[l]) + fabs(e[l])); + int m = l; + + // Original while-loop from Java code + while (m < n) { + if (fabs(e[m]) <= eps*tst1) { + break; + } + m++; + } + + + // If m == l, d[l] is an eigenvalue, + // otherwise, iterate. + + if (m > l) { + int iter = 0; + do { + iter = iter + 1; // (Could check iteration count here.) + + // Compute implicit shift + + Real g = d[l]; + Real p = (d[l+1] - g) / (2.0 * e[l]); + Real r = hypot(p,1.0); + if (p < 0) { + r = -r; + } + d[l] = e[l] / (p + r); + d[l+1] = e[l] * (p + r); + Real dl1 = d[l+1]; + Real h = g - d[l]; + for (int i = l+2; i < n; i++) { + d[i] -= h; + } + f = f + h; + + // Implicit QL transformation. + + p = d[m]; + Real c = 1.0; + Real c2 = c; + Real c3 = c; + Real el1 = e[l+1]; + Real s = 0.0; + Real s2 = 0.0; + for (int i = m-1; i >= l; i--) { + c3 = c2; + c2 = c; + s2 = s; + g = c * e[i]; + h = c * p; + r = hypot(p,e[i]); + e[i+1] = s * r; + s = e[i] / r; + c = p / r; + p = c * d[i] - s * g; + d[i+1] = h + s * (c * g + s * d[i]); + + // Accumulate transformation. + + for (int k = 0; k < n; k++) { + h = V[k][i+1]; + V[k][i+1] = s * V[k][i] + c * h; + V[k][i] = c * V[k][i] - s * h; + } + } + p = -s * s2 * c3 * el1 * e[l] / dl1; + e[l] = s * p; + d[l] = c * p; + + // Check for convergence. + + } while (fabs(e[l]) > eps*tst1); + } + d[l] = d[l] + f; + e[l] = 0.0; + } + + // Sort eigenvalues and corresponding vectors. + + for (int i = 0; i < n-1; i++) { + int k = i; + Real p = d[i]; + for (int j = i+1; j < n; j++) { + if (d[j] < p) { + k = j; + p = d[j]; + } + } + if (k != i) { + d[k] = d[i]; + d[i] = p; + for (int j = 0; j < n; j++) { + p = V[j][i]; + V[j][i] = V[j][k]; + V[j][k] = p; + } + } + } + } + + // Nonsymmetric reduction to Hessenberg form. + + void orthes () { + + // This is derived from the Algol procedures orthes and ortran, + // by Martin and Wilkinson, Handbook for Auto. Comp., + // Vol.ii-Linear Algebra, and the corresponding + // Fortran subroutines in EISPACK. + + int low = 0; + int high = n-1; + + for (int m = low+1; m <= high-1; m++) { + + // Scale column. + + Real scale = 0.0; + for (int i = m; i <= high; i++) { + scale = scale + fabs(H[i][m-1]); + } + if (scale != 0.0) { + + // Compute Householder transformation. + + Real h = 0.0; + for (int i = high; i >= m; i--) { + ort[i] = H[i][m-1]/scale; + h += ort[i] * ort[i]; + } + Real g = sqrt(h); + if (ort[m] > 0) { + g = -g; + } + h = h - ort[m] * g; + ort[m] = ort[m] - g; + + // Apply Householder similarity transformation + // H = (I-u*u'/h)*H*(I-u*u')/h) + + for (int j = m; j < n; j++) { + Real f = 0.0; + for (int i = high; i >= m; i--) { + f += ort[i]*H[i][j]; + } + f = f/h; + for (int i = m; i <= high; i++) { + H[i][j] -= f*ort[i]; + } + } + + for (int i = 0; i <= high; i++) { + Real f = 0.0; + for (int j = high; j >= m; j--) { + f += ort[j]*H[i][j]; + } + f = f/h; + for (int j = m; j <= high; j++) { + H[i][j] -= f*ort[j]; + } + } + ort[m] = scale*ort[m]; + H[m][m-1] = scale*g; + } + } + + // Accumulate transformations (Algol's ortran). + + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + V[i][j] = (i == j ? 1.0 : 0.0); + } + } + + for (int m = high-1; m >= low+1; m--) { + if (H[m][m-1] != 0.0) { + for (int i = m+1; i <= high; i++) { + ort[i] = H[i][m-1]; + } + for (int j = m; j <= high; j++) { + Real g = 0.0; + for (int i = m; i <= high; i++) { + g += ort[i] * V[i][j]; + } + // Double division avoids possible underflow + g = (g / ort[m]) / H[m][m-1]; + for (int i = m; i <= high; i++) { + V[i][j] += g * ort[i]; + } + } + } + } + } + + + // Complex scalar division. + + Real cdivr, cdivi; + void cdiv(Real xr, Real xi, Real yr, Real yi) { + Real r,d; + if (fabs(yr) > fabs(yi)) { + r = yi/yr; + d = yr + r*yi; + cdivr = (xr + r*xi)/d; + cdivi = (xi - r*xr)/d; + } else { + r = yr/yi; + d = yi + r*yr; + cdivr = (r*xr + xi)/d; + cdivi = (r*xi - xr)/d; + } + } + + + // Nonsymmetric reduction from Hessenberg to real Schur form. + + void hqr2 () { + + // This is derived from the Algol procedure hqr2, + // by Martin and Wilkinson, Handbook for Auto. Comp., + // Vol.ii-Linear Algebra, and the corresponding + // Fortran subroutine in EISPACK. + + // Initialize + + int nn = this->n; + int n = nn-1; + int low = 0; + int high = nn-1; + Real eps = pow(2.0,-52.0); + Real exshift = 0.0; + Real p=0,q=0,r=0,s=0,z=0,t,w,x,y; + + // Store roots isolated by balanc and compute matrix norm + + Real norm = 0.0; + for (int i = 0; i < nn; i++) { + if ((i < low) || (i > high)) { + d[i] = H[i][i]; + e[i] = 0.0; + } + for (int j = max(i-1,0); j < nn; j++) { + norm = norm + fabs(H[i][j]); + } + } + + // Outer loop over eigenvalue index + + int iter = 0; + int totIter = 0; + while (n >= low) { + + // NT limit no. of iterations + totIter++; + if(totIter>100) { + //if(totIter>15) std::cout<<"!!!!iter ABORT !!!!!!! "< low) { + s = fabs(H[l-1][l-1]) + fabs(H[l][l]); + if (s == 0.0) { + s = norm; + } + if (fabs(H[l][l-1]) < eps * s) { + break; + } + l--; + } + + // Check for convergence + // One root found + + if (l == n) { + H[n][n] = H[n][n] + exshift; + d[n] = H[n][n]; + e[n] = 0.0; + n--; + iter = 0; + + // Two roots found + + } else if (l == n-1) { + w = H[n][n-1] * H[n-1][n]; + p = (H[n-1][n-1] - H[n][n]) / 2.0; + q = p * p + w; + z = sqrt(fabs(q)); + H[n][n] = H[n][n] + exshift; + H[n-1][n-1] = H[n-1][n-1] + exshift; + x = H[n][n]; + + // Real pair + + if (q >= 0) { + if (p >= 0) { + z = p + z; + } else { + z = p - z; + } + d[n-1] = x + z; + d[n] = d[n-1]; + if (z != 0.0) { + d[n] = x - w / z; + } + e[n-1] = 0.0; + e[n] = 0.0; + x = H[n][n-1]; + s = fabs(x) + fabs(z); + p = x / s; + q = z / s; + r = sqrt(p * p+q * q); + p = p / r; + q = q / r; + + // Row modification + + for (int j = n-1; j < nn; j++) { + z = H[n-1][j]; + H[n-1][j] = q * z + p * H[n][j]; + H[n][j] = q * H[n][j] - p * z; + } + + // Column modification + + for (int i = 0; i <= n; i++) { + z = H[i][n-1]; + H[i][n-1] = q * z + p * H[i][n]; + H[i][n] = q * H[i][n] - p * z; + } + + // Accumulate transformations + + for (int i = low; i <= high; i++) { + z = V[i][n-1]; + V[i][n-1] = q * z + p * V[i][n]; + V[i][n] = q * V[i][n] - p * z; + } + + // Complex pair + + } else { + d[n-1] = x + p; + d[n] = x + p; + e[n-1] = z; + e[n] = -z; + } + n = n - 2; + iter = 0; + + // No convergence yet + + } else { + + // Form shift + + x = H[n][n]; + y = 0.0; + w = 0.0; + if (l < n) { + y = H[n-1][n-1]; + w = H[n][n-1] * H[n-1][n]; + } + + // Wilkinson's original ad hoc shift + + if (iter == 10) { + exshift += x; + for (int i = low; i <= n; i++) { + H[i][i] -= x; + } + s = fabs(H[n][n-1]) + fabs(H[n-1][n-2]); + x = y = 0.75 * s; + w = -0.4375 * s * s; + } + + // MATLAB's new ad hoc shift + + if (iter == 30) { + s = (y - x) / 2.0; + s = s * s + w; + if (s > 0) { + s = sqrt(s); + if (y < x) { + s = -s; + } + s = x - w / ((y - x) / 2.0 + s); + for (int i = low; i <= n; i++) { + H[i][i] -= s; + } + exshift += s; + x = y = w = 0.964; + } + } + + iter = iter + 1; // (Could check iteration count here.) + + // Look for two consecutive small sub-diagonal elements + + int m = n-2; + while (m >= l) { + z = H[m][m]; + r = x - z; + s = y - z; + p = (r * s - w) / H[m+1][m] + H[m][m+1]; + q = H[m+1][m+1] - z - r - s; + r = H[m+2][m+1]; + s = fabs(p) + fabs(q) + fabs(r); + p = p / s; + q = q / s; + r = r / s; + if (m == l) { + break; + } + if (fabs(H[m][m-1]) * (fabs(q) + fabs(r)) < + eps * (fabs(p) * (fabs(H[m-1][m-1]) + fabs(z) + + fabs(H[m+1][m+1])))) { + break; + } + m--; + } + + for (int i = m+2; i <= n; i++) { + H[i][i-2] = 0.0; + if (i > m+2) { + H[i][i-3] = 0.0; + } + } + + // Double QR step involving rows l:n and columns m:n + + for (int k = m; k <= n-1; k++) { + int notlast = (k != n-1); + if (k != m) { + p = H[k][k-1]; + q = H[k+1][k-1]; + r = (notlast ? H[k+2][k-1] : 0.0); + x = fabs(p) + fabs(q) + fabs(r); + if (x != 0.0) { + p = p / x; + q = q / x; + r = r / x; + } + } + if (x == 0.0) { + break; + } + s = sqrt(p * p + q * q + r * r); + if (p < 0) { + s = -s; + } + if (s != 0) { + if (k != m) { + H[k][k-1] = -s * x; + } else if (l != m) { + H[k][k-1] = -H[k][k-1]; + } + p = p + s; + x = p / s; + y = q / s; + z = r / s; + q = q / p; + r = r / p; + + // Row modification + + for (int j = k; j < nn; j++) { + p = H[k][j] + q * H[k+1][j]; + if (notlast) { + p = p + r * H[k+2][j]; + H[k+2][j] = H[k+2][j] - p * z; + } + H[k][j] = H[k][j] - p * x; + H[k+1][j] = H[k+1][j] - p * y; + } + + // Column modification + + for (int i = 0; i <= min(n,k+3); i++) { + p = x * H[i][k] + y * H[i][k+1]; + if (notlast) { + p = p + z * H[i][k+2]; + H[i][k+2] = H[i][k+2] - p * r; + } + H[i][k] = H[i][k] - p; + H[i][k+1] = H[i][k+1] - p * q; + } + + // Accumulate transformations + + for (int i = low; i <= high; i++) { + p = x * V[i][k] + y * V[i][k+1]; + if (notlast) { + p = p + z * V[i][k+2]; + V[i][k+2] = V[i][k+2] - p * r; + } + V[i][k] = V[i][k] - p; + V[i][k+1] = V[i][k+1] - p * q; + } + } // (s != 0) + } // k loop + } // check convergence + } // while (n >= low) + //if(totIter>15) std::cout<<"!!!!iter "<= 0; n--) { + p = d[n]; + q = e[n]; + + // Real vector + + if (q == 0) { + int l = n; + H[n][n] = 1.0; + for (int i = n-1; i >= 0; i--) { + w = H[i][i] - p; + r = 0.0; + for (int j = l; j <= n; j++) { + r = r + H[i][j] * H[j][n]; + } + if (e[i] < 0.0) { + z = w; + s = r; + } else { + l = i; + if (e[i] == 0.0) { + if (w != 0.0) { + H[i][n] = -r / w; + } else { + H[i][n] = -r / (eps * norm); + } + + // Solve real equations + + } else { + x = H[i][i+1]; + y = H[i+1][i]; + q = (d[i] - p) * (d[i] - p) + e[i] * e[i]; + t = (x * s - z * r) / q; + H[i][n] = t; + if (fabs(x) > fabs(z)) { + H[i+1][n] = (-r - w * t) / x; + } else { + H[i+1][n] = (-s - y * t) / z; + } + } + + // Overflow control + + t = fabs(H[i][n]); + if ((eps * t) * t > 1) { + for (int j = i; j <= n; j++) { + H[j][n] = H[j][n] / t; + } + } + } + } + + // Complex vector + + } else if (q < 0) { + int l = n-1; + + // Last vector component imaginary so matrix is triangular + + if (fabs(H[n][n-1]) > fabs(H[n-1][n])) { + H[n-1][n-1] = q / H[n][n-1]; + H[n-1][n] = -(H[n][n] - p) / H[n][n-1]; + } else { + cdiv(0.0,-H[n-1][n],H[n-1][n-1]-p,q); + H[n-1][n-1] = cdivr; + H[n-1][n] = cdivi; + } + H[n][n-1] = 0.0; + H[n][n] = 1.0; + for (int i = n-2; i >= 0; i--) { + Real ra,sa,vr,vi; + ra = 0.0; + sa = 0.0; + for (int j = l; j <= n; j++) { + ra = ra + H[i][j] * H[j][n-1]; + sa = sa + H[i][j] * H[j][n]; + } + w = H[i][i] - p; + + if (e[i] < 0.0) { + z = w; + r = ra; + s = sa; + } else { + l = i; + if (e[i] == 0) { + cdiv(-ra,-sa,w,q); + H[i][n-1] = cdivr; + H[i][n] = cdivi; + } else { + + // Solve complex equations + + x = H[i][i+1]; + y = H[i+1][i]; + vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q; + vi = (d[i] - p) * 2.0 * q; + if ((vr == 0.0) && (vi == 0.0)) { + vr = eps * norm * (fabs(w) + fabs(q) + + fabs(x) + fabs(y) + fabs(z)); + } + cdiv(x*r-z*ra+q*sa,x*s-z*sa-q*ra,vr,vi); + H[i][n-1] = cdivr; + H[i][n] = cdivi; + if (fabs(x) > (fabs(z) + fabs(q))) { + H[i+1][n-1] = (-ra - w * H[i][n-1] + q * H[i][n]) / x; + H[i+1][n] = (-sa - w * H[i][n] - q * H[i][n-1]) / x; + } else { + cdiv(-r-y*H[i][n-1],-s-y*H[i][n],z,q); + H[i+1][n-1] = cdivr; + H[i+1][n] = cdivi; + } + } + + // Overflow control + + t = max(fabs(H[i][n-1]),fabs(H[i][n])); + if ((eps * t) * t > 1) { + for (int j = i; j <= n; j++) { + H[j][n-1] = H[j][n-1] / t; + H[j][n] = H[j][n] / t; + } + } + } + } + } + } + + // Vectors of isolated roots + + for (int i = 0; i < nn; i++) { + if (i < low || i > high) { + for (int j = i; j < nn; j++) { + V[i][j] = H[i][j]; + } + } + } + + // Back transformation to get eigenvectors of original matrix + + for (int j = nn-1; j >= low; j--) { + for (int i = low; i <= high; i++) { + z = 0.0; + for (int k = low; k <= min(j,high); k++) { + z = z + V[i][k] * H[k][j]; + } + V[i][j] = z; + } + } + } + +public: + + + /** Check for symmetry, then construct the eigenvalue decomposition + @param A Square real (non-complex) matrix + */ + + Eigenvalue(const TNT::Array2D &A) { + n = A.dim2(); + V = Array2D(n,n); + d = Array1D(n); + e = Array1D(n); + + issymmetric = 1; + for (int j = 0; (j < n) && issymmetric; j++) { + for (int i = 0; (i < n) && issymmetric; i++) { + issymmetric = (A[i][j] == A[j][i]); + } + } + + if (issymmetric) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + V[i][j] = A[i][j]; + } + } + + // Tridiagonalize. + tred2(); + + // Diagonalize. + tql2(); + + } else { + H = TNT::Array2D(n,n); + ort = TNT::Array1D(n); + + for (int j = 0; j < n; j++) { + for (int i = 0; i < n; i++) { + H[i][j] = A[i][j]; + } + } + + // Reduce to Hessenberg form. + orthes(); + + // Reduce Hessenberg to real Schur form. + hqr2(); + } + } + + + /** Return the eigenvector matrix + @return V + */ + + void getV (TNT::Array2D &V_) { + V_ = V; + return; + } + + /** Return the real parts of the eigenvalues + @return real(diag(D)) + */ + + void getRealEigenvalues (TNT::Array1D &d_) { + d_ = d; + return ; + } + + /** Return the imaginary parts of the eigenvalues + in parameter e_. + + @pararm e_: new matrix with imaginary parts of the eigenvalues. + */ + void getImagEigenvalues (TNT::Array1D &e_) { + e_ = e; + return; + } + + +/** + Computes the block diagonal eigenvalue matrix. + If the original matrix A is not symmetric, then the eigenvalue + matrix D is block diagonal with the real eigenvalues in 1-by-1 + blocks and any complex eigenvalues, + a + i*b, in 2-by-2 blocks, [a, b; -b, a]. That is, if the complex + eigenvalues look like +

+
+          u + iv     .        .          .      .    .
+            .      u - iv     .          .      .    .
+            .        .      a + ib       .      .    .
+            .        .        .        a - ib   .    .
+            .        .        .          .      x    .
+            .        .        .          .      .    y
+
+ then D looks like +
+
+            u        v        .          .      .    .
+           -v        u        .          .      .    . 
+            .        .        a          b      .    .
+            .        .       -b          a      .    .
+            .        .        .          .      x    .
+            .        .        .          .      .    y
+
+ This keeps V a real matrix in both symmetric and non-symmetric + cases, and A*V = V*D. + + @param D: upon return, the matrix is filled with the block diagonal + eigenvalue matrix. + +*/ + void getD (TNT::Array2D &D) { + D = Array2D(n,n); + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + D[i][j] = 0.0; + } + D[i][i] = d[i]; + if (e[i] > 0) { + D[i][i+1] = e[i]; + } else if (e[i] < 0) { + D[i][i-1] = e[i]; + } + } + } +}; + +} //namespace JAMA + + +#endif +// JAMA_EIG_H diff --git a/intern/smoke/intern/tnt/jama_lu.h b/intern/smoke/intern/tnt/jama_lu.h new file mode 100644 index 00000000000..a4f96b11502 --- /dev/null +++ b/intern/smoke/intern/tnt/jama_lu.h @@ -0,0 +1,319 @@ +#ifndef JAMA_LU_H +#define JAMA_LU_H + +#include "tnt.h" +#include +//for min(), max() below + +using namespace TNT; +using namespace std; + +namespace JAMA +{ + + /** LU Decomposition. +

+ For an m-by-n matrix A with m >= n, the LU decomposition is an m-by-n + unit lower triangular matrix L, an n-by-n upper triangular matrix U, + and a permutation vector piv of length m so that A(piv,:) = L*U. + If m < n, then L is m-by-m and U is m-by-n. +

+ The LU decompostion with pivoting always exists, even if the matrix is + singular, so the constructor will never fail. The primary use of the + LU decomposition is in the solution of square systems of simultaneous + linear equations. This will fail if isNonsingular() returns false. + */ +template +class LU +{ + + + + /* Array for internal storage of decomposition. */ + Array2D LU_; + int m, n, pivsign; + Array1D piv; + + + Array2D permute_copy(const Array2D &A, + const Array1D &piv, int j0, int j1) + { + int piv_length = piv.dim(); + + Array2D X(piv_length, j1-j0+1); + + + for (int i = 0; i < piv_length; i++) + for (int j = j0; j <= j1; j++) + X[i][j-j0] = A[piv[i]][j]; + + return X; + } + + Array1D permute_copy(const Array1D &A, + const Array1D &piv) + { + int piv_length = piv.dim(); + if (piv_length != A.dim()) + return Array1D(); + + Array1D x(piv_length); + + + for (int i = 0; i < piv_length; i++) + x[i] = A[piv[i]]; + + return x; + } + + + public : + + /** LU Decomposition + @param A Rectangular matrix + @return LU Decomposition object to access L, U and piv. + */ + + LU (const Array2D &A) : LU_(A.copy()), m(A.dim1()), n(A.dim2()), + piv(A.dim1()) + + { + + // Use a "left-looking", dot-product, Crout/Doolittle algorithm. + + + for (int i = 0; i < m; i++) { + piv[i] = i; + } + pivsign = 1; + Real *LUrowi = 0;; + Array1D LUcolj(m); + + // Outer loop. + + for (int j = 0; j < n; j++) { + + // Make a copy of the j-th column to localize references. + + for (int i = 0; i < m; i++) { + LUcolj[i] = LU_[i][j]; + } + + // Apply previous transformations. + + for (int i = 0; i < m; i++) { + LUrowi = LU_[i]; + + // Most of the time is spent in the following dot product. + + int kmax = min(i,j); + double s = 0.0; + for (int k = 0; k < kmax; k++) { + s += LUrowi[k]*LUcolj[k]; + } + + LUrowi[j] = LUcolj[i] -= s; + } + + // Find pivot and exchange if necessary. + + int p = j; + for (int i = j+1; i < m; i++) { + if (abs(LUcolj[i]) > abs(LUcolj[p])) { + p = i; + } + } + if (p != j) { + int k=0; + for (k = 0; k < n; k++) { + double t = LU_[p][k]; + LU_[p][k] = LU_[j][k]; + LU_[j][k] = t; + } + k = piv[p]; + piv[p] = piv[j]; + piv[j] = k; + pivsign = -pivsign; + } + + // Compute multipliers. + + if ((j < m) && (LU_[j][j] != 0.0)) { + for (int i = j+1; i < m; i++) { + LU_[i][j] /= LU_[j][j]; + } + } + } + } + + + /** Is the matrix nonsingular? + @return 1 (true) if upper triangular factor U (and hence A) + is nonsingular, 0 otherwise. + */ + + int isNonsingular () { + for (int j = 0; j < n; j++) { + if (LU_[j][j] == 0) + return 0; + } + return 1; + } + + /** Return lower triangular factor + @return L + */ + + Array2D getL () { + Array2D L_(m,n); + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (i > j) { + L_[i][j] = LU_[i][j]; + } else if (i == j) { + L_[i][j] = 1.0; + } else { + L_[i][j] = 0.0; + } + } + } + return L_; + } + + /** Return upper triangular factor + @return U portion of LU factorization. + */ + + Array2D getU () { + Array2D U_(n,n); + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i <= j) { + U_[i][j] = LU_[i][j]; + } else { + U_[i][j] = 0.0; + } + } + } + return U_; + } + + /** Return pivot permutation vector + @return piv + */ + + Array1D getPivot () { + return piv; + } + + + /** Compute determinant using LU factors. + @return determinant of A, or 0 if A is not square. + */ + + Real det () { + if (m != n) { + return Real(0); + } + Real d = Real(pivsign); + for (int j = 0; j < n; j++) { + d *= LU_[j][j]; + } + return d; + } + + /** Solve A*X = B + @param B A Matrix with as many rows as A and any number of columns. + @return X so that L*U*X = B(piv,:), if B is nonconformant, returns + 0x0 (null) array. + */ + + Array2D solve (const Array2D &B) + { + + /* Dimensions: A is mxn, X is nxk, B is mxk */ + + if (B.dim1() != m) { + return Array2D(0,0); + } + if (!isNonsingular()) { + return Array2D(0,0); + } + + // Copy right hand side with pivoting + int nx = B.dim2(); + + + Array2D X = permute_copy(B, piv, 0, nx-1); + + // Solve L*Y = B(piv,:) + for (int k = 0; k < n; k++) { + for (int i = k+1; i < n; i++) { + for (int j = 0; j < nx; j++) { + X[i][j] -= X[k][j]*LU_[i][k]; + } + } + } + // Solve U*X = Y; + for (int k = n-1; k >= 0; k--) { + for (int j = 0; j < nx; j++) { + X[k][j] /= LU_[k][k]; + } + for (int i = 0; i < k; i++) { + for (int j = 0; j < nx; j++) { + X[i][j] -= X[k][j]*LU_[i][k]; + } + } + } + return X; + } + + + /** Solve A*x = b, where x and b are vectors of length equal + to the number of rows in A. + + @param b a vector (Array1D> of length equal to the first dimension + of A. + @return x a vector (Array1D> so that L*U*x = b(piv), if B is nonconformant, + returns 0x0 (null) array. + */ + + Array1D solve (const Array1D &b) + { + + /* Dimensions: A is mxn, X is nxk, B is mxk */ + + if (b.dim1() != m) { + return Array1D(); + } + if (!isNonsingular()) { + return Array1D(); + } + + + Array1D x = permute_copy(b, piv); + + // Solve L*Y = B(piv) + for (int k = 0; k < n; k++) { + for (int i = k+1; i < n; i++) { + x[i] -= x[k]*LU_[i][k]; + } + } + + // Solve U*X = Y; + for (int k = n-1; k >= 0; k--) { + x[k] /= LU_[k][k]; + for (int i = 0; i < k; i++) + x[i] -= x[k]*LU_[i][k]; + } + + + return x; + } + +}; /* class LU */ + +} /* namespace JAMA */ + +#endif +/* JAMA_LU_H */ diff --git a/intern/smoke/intern/tnt/tnt.h b/intern/smoke/intern/tnt/tnt.h new file mode 100644 index 00000000000..92463e08a06 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt.h @@ -0,0 +1,64 @@ +/* +* +* Template Numerical Toolkit (TNT): Linear Algebra Module +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + +#ifndef TNT_H +#define TNT_H + + + +//--------------------------------------------------------------------- +// Define this macro if you want TNT to track some of the out-of-bounds +// indexing. This can encur a small run-time overhead, but is recommended +// while developing code. It can be turned off for production runs. +// +// #define TNT_BOUNDS_CHECK +//--------------------------------------------------------------------- +// + +//#define TNT_BOUNDS_CHECK + + + +#include "tnt_version.h" +#include "tnt_math_utils.h" +#include "tnt_array1d.h" +#include "tnt_array2d.h" +#include "tnt_array3d.h" +#include "tnt_array1d_utils.h" +#include "tnt_array2d_utils.h" +#include "tnt_array3d_utils.h" + +#include "tnt_fortran_array1d.h" +#include "tnt_fortran_array2d.h" +#include "tnt_fortran_array3d.h" +#include "tnt_fortran_array1d_utils.h" +#include "tnt_fortran_array2d_utils.h" +#include "tnt_fortran_array3d_utils.h" + +#include "tnt_sparse_matrix_csr.h" + +#include "tnt_stopwatch.h" +#include "tnt_subscript.h" +#include "tnt_vec.h" +#include "tnt_cmat.h" + + +#endif +// TNT_H diff --git a/intern/smoke/intern/tnt/tnt_array1d.h b/intern/smoke/intern/tnt/tnt_array1d.h new file mode 100644 index 00000000000..858df579863 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_array1d.h @@ -0,0 +1,278 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_ARRAY1D_H +#define TNT_ARRAY1D_H + +//#include +#include + +#ifdef TNT_BOUNDS_CHECK +#include +#endif + + +#include "tnt_i_refvec.h" + +namespace TNT +{ + +template +class Array1D +{ + + private: + + /* ... */ + i_refvec v_; + int n_; + T* data_; /* this normally points to v_.begin(), but + * could also point to a portion (subvector) + * of v_. + */ + + void copy_(T* p, const T* q, int len) const; + void set_(T* begin, T* end, const T& val); + + + public: + + typedef T value_type; + + + Array1D(); + explicit Array1D(int n); + Array1D(int n, const T &a); + Array1D(int n, T *a); + inline Array1D(const Array1D &A); + inline operator T*(); + inline operator const T*(); + inline Array1D & operator=(const T &a); + inline Array1D & operator=(const Array1D &A); + inline Array1D & ref(const Array1D &A); + Array1D copy() const; + Array1D & inject(const Array1D & A); + inline T& operator[](int i); + inline const T& operator[](int i) const; + inline int dim1() const; + inline int dim() const; + ~Array1D(); + + + /* ... extended interface ... */ + + inline int ref_count() const; + inline Array1D subarray(int i0, int i1); + +}; + + + + +template +Array1D::Array1D() : v_(), n_(0), data_(0) {} + +template +Array1D::Array1D(const Array1D &A) : v_(A.v_), n_(A.n_), + data_(A.data_) +{ +#ifdef TNT_DEBUG + std::cout << "Created Array1D(const Array1D &A) \n"; +#endif + +} + + +template +Array1D::Array1D(int n) : v_(n), n_(n), data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Array1D(int n) \n"; +#endif +} + +template +Array1D::Array1D(int n, const T &val) : v_(n), n_(n), data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Array1D(int n, const T& val) \n"; +#endif + set_(data_, data_+ n, val); + +} + +template +Array1D::Array1D(int n, T *a) : v_(a), n_(n) , data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Array1D(int n, T* a) \n"; +#endif +} + +template +inline Array1D::operator T*() +{ + return &(v_[0]); +} + + +template +inline Array1D::operator const T*() +{ + return &(v_[0]); +} + + + +template +inline T& Array1D::operator[](int i) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i>= 0); + assert(i < n_); +#endif + return data_[i]; +} + +template +inline const T& Array1D::operator[](int i) const +{ +#ifdef TNT_BOUNDS_CHECK + assert(i>= 0); + assert(i < n_); +#endif + return data_[i]; +} + + + + +template +Array1D & Array1D::operator=(const T &a) +{ + set_(data_, data_+n_, a); + return *this; +} + +template +Array1D Array1D::copy() const +{ + Array1D A( n_); + copy_(A.data_, data_, n_); + + return A; +} + + +template +Array1D & Array1D::inject(const Array1D &A) +{ + if (A.n_ == n_) + copy_(data_, A.data_, n_); + + return *this; +} + + + + + +template +Array1D & Array1D::ref(const Array1D &A) +{ + if (this != &A) + { + v_ = A.v_; /* operator= handles the reference counting. */ + n_ = A.n_; + data_ = A.data_; + + } + return *this; +} + +template +Array1D & Array1D::operator=(const Array1D &A) +{ + return ref(A); +} + +template +inline int Array1D::dim1() const { return n_; } + +template +inline int Array1D::dim() const { return n_; } + +template +Array1D::~Array1D() {} + + +/* ............................ exented interface ......................*/ + +template +inline int Array1D::ref_count() const +{ + return v_.ref_count(); +} + +template +inline Array1D Array1D::subarray(int i0, int i1) +{ + if ((i0 > 0) && (i1 < n_) || (i0 <= i1)) + { + Array1D X(*this); /* create a new instance of this array. */ + X.n_ = i1-i0+1; + X.data_ += i0; + + return X; + } + else + { + return Array1D(); + } +} + + +/* private internal functions */ + + +template +void Array1D::set_(T* begin, T* end, const T& a) +{ + for (T* p=begin; p +void Array1D::copy_(T* p, const T* q, int len) const +{ + T *end = p + len; + while (p +#include + +namespace TNT +{ + + +template +std::ostream& operator<<(std::ostream &s, const Array1D &A) +{ + int N=A.dim1(); + +#ifdef TNT_DEBUG + s << "addr: " << (void *) &A[0] << "\n"; +#endif + s << N << "\n"; + for (int j=0; j +std::istream& operator>>(std::istream &s, Array1D &A) +{ + int N; + s >> N; + + Array1D B(N); + for (int i=0; i> B[i]; + A = B; + return s; +} + + + +template +Array1D operator+(const Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Array1D(); + + else + { + Array1D C(n); + + for (int i=0; i +Array1D operator-(const Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Array1D(); + + else + { + Array1D C(n); + + for (int i=0; i +Array1D operator*(const Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Array1D(); + + else + { + Array1D C(n); + + for (int i=0; i +Array1D operator/(const Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Array1D(); + + else + { + Array1D C(n); + + for (int i=0; i +Array1D& operator+=(Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=0; i +Array1D& operator-=(Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=0; i +Array1D& operator*=(Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=0; i +Array1D& operator/=(Array1D &A, const Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=0; i +#include +#ifdef TNT_BOUNDS_CHECK +#include +#endif + +#include "tnt_array1d.h" + +namespace TNT +{ + +template +class Array2D +{ + + + private: + + + + Array1D data_; + Array1D v_; + int m_; + int n_; + + public: + + typedef T value_type; + Array2D(); + Array2D(int m, int n); + Array2D(int m, int n, T *a); + Array2D(int m, int n, const T &a); + inline Array2D(const Array2D &A); + inline operator T**(); + inline operator const T**(); + inline Array2D & operator=(const T &a); + inline Array2D & operator=(const Array2D &A); + inline Array2D & ref(const Array2D &A); + Array2D copy() const; + Array2D & inject(const Array2D & A); + inline T* operator[](int i); + inline const T* operator[](int i) const; + inline int dim1() const; + inline int dim2() const; + ~Array2D(); + + /* extended interface (not part of the standard) */ + + + inline int ref_count(); + inline int ref_count_data(); + inline int ref_count_dim1(); + Array2D subarray(int i0, int i1, int j0, int j1); + +}; + + +template +Array2D::Array2D() : data_(), v_(), m_(0), n_(0) {} + +template +Array2D::Array2D(const Array2D &A) : data_(A.data_), v_(A.v_), + m_(A.m_), n_(A.n_) {} + + + + +template +Array2D::Array2D(int m, int n) : data_(m*n), v_(m), m_(m), n_(n) +{ + if (m>0 && n>0) + { + T* p = &(data_[0]); + for (int i=0; i +Array2D::Array2D(int m, int n, const T &val) : data_(m*n), v_(m), + m_(m), n_(n) +{ + if (m>0 && n>0) + { + data_ = val; + T* p = &(data_[0]); + for (int i=0; i +Array2D::Array2D(int m, int n, T *a) : data_(m*n, a), v_(m), m_(m), n_(n) +{ + if (m>0 && n>0) + { + T* p = &(data_[0]); + + for (int i=0; i +inline T* Array2D::operator[](int i) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 0); + assert(i < m_); +#endif + +return v_[i]; + +} + + +template +inline const T* Array2D::operator[](int i) const +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 0); + assert(i < m_); +#endif + +return v_[i]; + +} + +template +Array2D & Array2D::operator=(const T &a) +{ + /* non-optimzied, but will work with subarrays in future verions */ + + for (int i=0; i +Array2D Array2D::copy() const +{ + Array2D A(m_, n_); + + for (int i=0; i +Array2D & Array2D::inject(const Array2D &A) +{ + if (A.m_ == m_ && A.n_ == n_) + { + for (int i=0; i +Array2D & Array2D::ref(const Array2D &A) +{ + if (this != &A) + { + v_ = A.v_; + data_ = A.data_; + m_ = A.m_; + n_ = A.n_; + + } + return *this; +} + + + +template +Array2D & Array2D::operator=(const Array2D &A) +{ + return ref(A); +} + +template +inline int Array2D::dim1() const { return m_; } + +template +inline int Array2D::dim2() const { return n_; } + + +template +Array2D::~Array2D() {} + + + + +template +inline Array2D::operator T**() +{ + return &(v_[0]); +} +template +inline Array2D::operator const T**() +{ + return &(v_[0]); +} + +/* ............... extended interface ............... */ +/** + Create a new view to a subarray defined by the boundaries + [i0][i0] and [i1][j1]. The size of the subarray is + (i1-i0) by (j1-j0). If either of these lengths are zero + or negative, the subarray view is null. + +*/ +template +Array2D Array2D::subarray(int i0, int i1, int j0, int j1) +{ + Array2D A; + int m = i1-i0+1; + int n = j1-j0+1; + + /* if either length is zero or negative, this is an invalide + subarray. return a null view. + */ + if (m<1 || n<1) + return A; + + A.data_ = data_; + A.m_ = m; + A.n_ = n; + A.v_ = Array1D(m); + T* p = &(data_[0]) + i0 * n_ + j0; + for (int i=0; i +inline int Array2D::ref_count() +{ + return ref_count_data(); +} + + + +template +inline int Array2D::ref_count_data() +{ + return data_.ref_count(); +} + +template +inline int Array2D::ref_count_dim1() +{ + return v_.ref_count(); +} + + + + +} /* namespace TNT */ + +#endif +/* TNT_ARRAY2D_H */ + diff --git a/intern/smoke/intern/tnt/tnt_array2d_utils.h b/intern/smoke/intern/tnt/tnt_array2d_utils.h new file mode 100644 index 00000000000..7041ed37857 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_array2d_utils.h @@ -0,0 +1,287 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + +#ifndef TNT_ARRAY2D_UTILS_H +#define TNT_ARRAY2D_UTILS_H + +#include +#include + +namespace TNT +{ + + +template +std::ostream& operator<<(std::ostream &s, const Array2D &A) +{ + int M=A.dim1(); + int N=A.dim2(); + + s << M << " " << N << "\n"; + + for (int i=0; i +std::istream& operator>>(std::istream &s, Array2D &A) +{ + + int M, N; + + s >> M >> N; + + Array2D B(M,N); + + for (int i=0; i> B[i][j]; + } + + A = B; + return s; +} + + +template +Array2D operator+(const Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Array2D(); + + else + { + Array2D C(m,n); + + for (int i=0; i +Array2D operator-(const Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Array2D(); + + else + { + Array2D C(m,n); + + for (int i=0; i +Array2D operator*(const Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Array2D(); + + else + { + Array2D C(m,n); + + for (int i=0; i +Array2D operator/(const Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Array2D(); + + else + { + Array2D C(m,n); + + for (int i=0; i +Array2D& operator+=(Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=0; i +Array2D& operator-=(Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=0; i +Array2D& operator*=(Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=0; i +Array2D& operator/=(Array2D &A, const Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=0; i +Array2D matmult(const Array2D &A, const Array2D &B) +{ + if (A.dim2() != B.dim1()) + return Array2D(); + + int M = A.dim1(); + int N = A.dim2(); + int K = B.dim2(); + + Array2D C(M,K); + + for (int i=0; i +#include +#ifdef TNT_BOUNDS_CHECK +#include +#endif + +#include "tnt_array1d.h" +#include "tnt_array2d.h" + +namespace TNT +{ + +template +class Array3D +{ + + + private: + Array1D data_; + Array2D v_; + int m_; + int n_; + int g_; + + + public: + + typedef T value_type; + + Array3D(); + Array3D(int m, int n, int g); + Array3D(int m, int n, int g, T val); + Array3D(int m, int n, int g, T *a); + + inline operator T***(); + inline operator const T***(); + inline Array3D(const Array3D &A); + inline Array3D & operator=(const T &a); + inline Array3D & operator=(const Array3D &A); + inline Array3D & ref(const Array3D &A); + Array3D copy() const; + Array3D & inject(const Array3D & A); + + inline T** operator[](int i); + inline const T* const * operator[](int i) const; + inline int dim1() const; + inline int dim2() const; + inline int dim3() const; + ~Array3D(); + + /* extended interface */ + + inline int ref_count(){ return data_.ref_count(); } + Array3D subarray(int i0, int i1, int j0, int j1, + int k0, int k1); +}; + +template +Array3D::Array3D() : data_(), v_(), m_(0), n_(0) {} + +template +Array3D::Array3D(const Array3D &A) : data_(A.data_), + v_(A.v_), m_(A.m_), n_(A.n_), g_(A.g_) +{ +} + + + +template +Array3D::Array3D(int m, int n, int g) : data_(m*n*g), v_(m,n), + m_(m), n_(n), g_(g) +{ + + if (m>0 && n>0 && g>0) + { + T* p = & (data_[0]); + int ng = n_*g_; + + for (int i=0; i +Array3D::Array3D(int m, int n, int g, T val) : data_(m*n*g, val), + v_(m,n), m_(m), n_(n), g_(g) +{ + if (m>0 && n>0 && g>0) + { + + T* p = & (data_[0]); + int ng = n_*g_; + + for (int i=0; i +Array3D::Array3D(int m, int n, int g, T* a) : + data_(m*n*g, a), v_(m,n), m_(m), n_(n), g_(g) +{ + + if (m>0 && n>0 && g>0) + { + T* p = & (data_[0]); + int ng = n_*g_; + + for (int i=0; i +inline T** Array3D::operator[](int i) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 0); + assert(i < m_); +#endif + +return v_[i]; + +} + +template +inline const T* const * Array3D::operator[](int i) const +{ return v_[i]; } + +template +Array3D & Array3D::operator=(const T &a) +{ + for (int i=0; i +Array3D Array3D::copy() const +{ + Array3D A(m_, n_, g_); + for (int i=0; i +Array3D & Array3D::inject(const Array3D &A) +{ + if (A.m_ == m_ && A.n_ == n_ && A.g_ == g_) + + for (int i=0; i +Array3D & Array3D::ref(const Array3D &A) +{ + if (this != &A) + { + m_ = A.m_; + n_ = A.n_; + g_ = A.g_; + v_ = A.v_; + data_ = A.data_; + } + return *this; +} + +template +Array3D & Array3D::operator=(const Array3D &A) +{ + return ref(A); +} + + +template +inline int Array3D::dim1() const { return m_; } + +template +inline int Array3D::dim2() const { return n_; } + +template +inline int Array3D::dim3() const { return g_; } + + + +template +Array3D::~Array3D() {} + +template +inline Array3D::operator T***() +{ + return v_; +} + + +template +inline Array3D::operator const T***() +{ + return v_; +} + +/* extended interface */ +template +Array3D Array3D::subarray(int i0, int i1, int j0, + int j1, int k0, int k1) +{ + + /* check that ranges are valid. */ + if (!( 0 <= i0 && i0 <= i1 && i1 < m_ && + 0 <= j0 && j0 <= j1 && j1 < n_ && + 0 <= k0 && k0 <= k1 && k1 < g_)) + return Array3D(); /* null array */ + + + Array3D A; + A.data_ = data_; + A.m_ = i1-i0+1; + A.n_ = j1-j0+1; + A.g_ = k1-k0+1; + A.v_ = Array2D(A.m_,A.n_); + T* p = &(data_[0]) + i0*n_*g_ + j0*g_ + k0; + + for (int i=0; i +#include + +namespace TNT +{ + + +template +std::ostream& operator<<(std::ostream &s, const Array3D &A) +{ + int M=A.dim1(); + int N=A.dim2(); + int K=A.dim3(); + + s << M << " " << N << " " << K << "\n"; + + for (int i=0; i +std::istream& operator>>(std::istream &s, Array3D &A) +{ + + int M, N, K; + + s >> M >> N >> K; + + Array3D B(M,N,K); + + for (int i=0; i> B[i][j][k]; + + A = B; + return s; +} + + + +template +Array3D operator+(const Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Array3D(); + + else + { + Array3D C(m,n,p); + + for (int i=0; i +Array3D operator-(const Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Array3D(); + + else + { + Array3D C(m,n,p); + + for (int i=0; i +Array3D operator*(const Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Array3D(); + + else + { + Array3D C(m,n,p); + + for (int i=0; i +Array3D operator/(const Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Array3D(); + + else + { + Array3D C(m,n,p); + + for (int i=0; i +Array3D& operator+=(Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=0; i +Array3D& operator-=(Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=0; i +Array3D& operator*=(Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=0; i +Array3D& operator/=(Array3D &A, const Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=0; i +#include +#include +#include + +namespace TNT +{ + + +template +class Matrix +{ + + + public: + + typedef Subscript size_type; + typedef T value_type; + typedef T element_type; + typedef T* pointer; + typedef T* iterator; + typedef T& reference; + typedef const T* const_iterator; + typedef const T& const_reference; + + Subscript lbound() const { return 1;} + + protected: + Subscript m_; + Subscript n_; + Subscript mn_; // total size + T* v_; + T** row_; + T* vm1_ ; // these point to the same data, but are 1-based + T** rowm1_; + + // internal helper function to create the array + // of row pointers + + void initialize(Subscript M, Subscript N) + { + mn_ = M*N; + m_ = M; + n_ = N; + + v_ = new T[mn_]; + row_ = new T*[M]; + rowm1_ = new T*[M]; + + assert(v_ != NULL); + assert(row_ != NULL); + assert(rowm1_ != NULL); + + T* p = v_; + vm1_ = v_ - 1; + for (Subscript i=0; i &A) + { + initialize(A.m_, A.n_); + copy(A.v_); + } + + Matrix(Subscript M, Subscript N, const T& value = T()) + { + initialize(M,N); + set(value); + } + + Matrix(Subscript M, Subscript N, const T* v) + { + initialize(M,N); + copy(v); + } + + Matrix(Subscript M, Subscript N, const char *s) + { + initialize(M,N); + //std::istrstream ins(s); + std::istringstream ins(s); + + Subscript i, j; + + for (i=0; i> row_[i][j]; + } + + // destructor + // + ~Matrix() + { + destroy(); + } + + + // reallocating + // + Matrix& newsize(Subscript M, Subscript N) + { + if (num_rows() == M && num_cols() == N) + return *this; + + destroy(); + initialize(M,N); + + return *this; + } + + + + + // assignments + // + Matrix& operator=(const Matrix &A) + { + if (v_ == A.v_) + return *this; + + if (m_ == A.m_ && n_ == A.n_) // no need to re-alloc + copy(A.v_); + + else + { + destroy(); + initialize(A.m_, A.n_); + copy(A.v_); + } + + return *this; + } + + Matrix& operator=(const T& scalar) + { + set(scalar); + return *this; + } + + + Subscript dim(Subscript d) const + { +#ifdef TNT_BOUNDS_CHECK + assert( d >= 1); + assert( d <= 2); +#endif + return (d==1) ? m_ : ((d==2) ? n_ : 0); + } + + Subscript num_rows() const { return m_; } + Subscript num_cols() const { return n_; } + + + + + inline T* operator[](Subscript i) + { +#ifdef TNT_BOUNDS_CHECK + assert(0<=i); + assert(i < m_) ; +#endif + return row_[i]; + } + + inline const T* operator[](Subscript i) const + { +#ifdef TNT_BOUNDS_CHECK + assert(0<=i); + assert(i < m_) ; +#endif + return row_[i]; + } + + inline reference operator()(Subscript i) + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= mn_) ; +#endif + return vm1_[i]; + } + + inline const_reference operator()(Subscript i) const + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= mn_) ; +#endif + return vm1_[i]; + } + + + + inline reference operator()(Subscript i, Subscript j) + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= m_) ; + assert(1<=j); + assert(j <= n_); +#endif + return rowm1_[i][j]; + } + + + + inline const_reference operator() (Subscript i, Subscript j) const + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= m_) ; + assert(1<=j); + assert(j <= n_); +#endif + return rowm1_[i][j]; + } + + + + +}; + + +/* *************************** I/O ********************************/ + +template +std::ostream& operator<<(std::ostream &s, const Matrix &A) +{ + Subscript M=A.num_rows(); + Subscript N=A.num_cols(); + + s << M << " " << N << "\n"; + + for (Subscript i=0; i +std::istream& operator>>(std::istream &s, Matrix &A) +{ + + Subscript M, N; + + s >> M >> N; + + if ( !(M == A.num_rows() && N == A.num_cols() )) + { + A.newsize(M,N); + } + + + for (Subscript i=0; i> A[i][j]; + } + + + return s; +} + +// *******************[ basic matrix algorithms ]*************************** + + +template +Matrix operator+(const Matrix &A, + const Matrix &B) +{ + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + + assert(M==B.num_rows()); + assert(N==B.num_cols()); + + Matrix tmp(M,N); + Subscript i,j; + + for (i=0; i +Matrix operator-(const Matrix &A, + const Matrix &B) +{ + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + + assert(M==B.num_rows()); + assert(N==B.num_cols()); + + Matrix tmp(M,N); + Subscript i,j; + + for (i=0; i +Matrix mult_element(const Matrix &A, + const Matrix &B) +{ + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + + assert(M==B.num_rows()); + assert(N==B.num_cols()); + + Matrix tmp(M,N); + Subscript i,j; + + for (i=0; i +Matrix transpose(const Matrix &A) +{ + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + + Matrix S(N,M); + Subscript i, j; + + for (i=0; i +inline Matrix matmult(const Matrix &A, + const Matrix &B) +{ + +#ifdef TNT_BOUNDS_CHECK + assert(A.num_cols() == B.num_rows()); +#endif + + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + Subscript K = B.num_cols(); + + Matrix tmp(M,K); + T sum; + + for (Subscript i=0; i +inline Matrix operator*(const Matrix &A, + const Matrix &B) +{ + return matmult(A,B); +} + +template +inline int matmult(Matrix& C, const Matrix &A, + const Matrix &B) +{ + + assert(A.num_cols() == B.num_rows()); + + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + Subscript K = B.num_cols(); + + C.newsize(M,K); + + T sum; + + const T* row_i; + const T* col_k; + + for (Subscript i=0; i +Vector matmult(const Matrix &A, const Vector &x) +{ + +#ifdef TNT_BOUNDS_CHECK + assert(A.num_cols() == x.dim()); +#endif + + Subscript M = A.num_rows(); + Subscript N = A.num_cols(); + + Vector tmp(M); + T sum; + + for (Subscript i=0; i +inline Vector operator*(const Matrix &A, const Vector &x) +{ + return matmult(A,x); +} + +} // namespace TNT + +#endif +// CMAT_H diff --git a/intern/smoke/intern/tnt/tnt_fortran_array1d.h b/intern/smoke/intern/tnt/tnt_fortran_array1d.h new file mode 100644 index 00000000000..ad3bba0c0a7 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_fortran_array1d.h @@ -0,0 +1,267 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_FORTRAN_ARRAY1D_H +#define TNT_FORTRAN_ARRAY1D_H + +#include +#include + +#ifdef TNT_BOUNDS_CHECK +#include +#endif + + +#include "tnt_i_refvec.h" + +namespace TNT +{ + +template +class Fortran_Array1D +{ + + private: + + i_refvec v_; + int n_; + T* data_; /* this normally points to v_.begin(), but + * could also point to a portion (subvector) + * of v_. + */ + + void initialize_(int n); + void copy_(T* p, const T* q, int len) const; + void set_(T* begin, T* end, const T& val); + + + public: + + typedef T value_type; + + + Fortran_Array1D(); + explicit Fortran_Array1D(int n); + Fortran_Array1D(int n, const T &a); + Fortran_Array1D(int n, T *a); + inline Fortran_Array1D(const Fortran_Array1D &A); + inline Fortran_Array1D & operator=(const T &a); + inline Fortran_Array1D & operator=(const Fortran_Array1D &A); + inline Fortran_Array1D & ref(const Fortran_Array1D &A); + Fortran_Array1D copy() const; + Fortran_Array1D & inject(const Fortran_Array1D & A); + inline T& operator()(int i); + inline const T& operator()(int i) const; + inline int dim1() const; + inline int dim() const; + ~Fortran_Array1D(); + + + /* ... extended interface ... */ + + inline int ref_count() const; + inline Fortran_Array1D subarray(int i0, int i1); + +}; + + + + +template +Fortran_Array1D::Fortran_Array1D() : v_(), n_(0), data_(0) {} + +template +Fortran_Array1D::Fortran_Array1D(const Fortran_Array1D &A) : v_(A.v_), n_(A.n_), + data_(A.data_) +{ +#ifdef TNT_DEBUG + std::cout << "Created Fortran_Array1D(const Fortran_Array1D &A) \n"; +#endif + +} + + +template +Fortran_Array1D::Fortran_Array1D(int n) : v_(n), n_(n), data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Fortran_Array1D(int n) \n"; +#endif +} + +template +Fortran_Array1D::Fortran_Array1D(int n, const T &val) : v_(n), n_(n), data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Fortran_Array1D(int n, const T& val) \n"; +#endif + set_(data_, data_+ n, val); + +} + +template +Fortran_Array1D::Fortran_Array1D(int n, T *a) : v_(a), n_(n) , data_(v_.begin()) +{ +#ifdef TNT_DEBUG + std::cout << "Created Fortran_Array1D(int n, T* a) \n"; +#endif +} + +template +inline T& Fortran_Array1D::operator()(int i) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i>= 1); + assert(i <= n_); +#endif + return data_[i-1]; +} + +template +inline const T& Fortran_Array1D::operator()(int i) const +{ +#ifdef TNT_BOUNDS_CHECK + assert(i>= 1); + assert(i <= n_); +#endif + return data_[i-1]; +} + + + + +template +Fortran_Array1D & Fortran_Array1D::operator=(const T &a) +{ + set_(data_, data_+n_, a); + return *this; +} + +template +Fortran_Array1D Fortran_Array1D::copy() const +{ + Fortran_Array1D A( n_); + copy_(A.data_, data_, n_); + + return A; +} + + +template +Fortran_Array1D & Fortran_Array1D::inject(const Fortran_Array1D &A) +{ + if (A.n_ == n_) + copy_(data_, A.data_, n_); + + return *this; +} + + + + + +template +Fortran_Array1D & Fortran_Array1D::ref(const Fortran_Array1D &A) +{ + if (this != &A) + { + v_ = A.v_; /* operator= handles the reference counting. */ + n_ = A.n_; + data_ = A.data_; + + } + return *this; +} + +template +Fortran_Array1D & Fortran_Array1D::operator=(const Fortran_Array1D &A) +{ + return ref(A); +} + +template +inline int Fortran_Array1D::dim1() const { return n_; } + +template +inline int Fortran_Array1D::dim() const { return n_; } + +template +Fortran_Array1D::~Fortran_Array1D() {} + + +/* ............................ exented interface ......................*/ + +template +inline int Fortran_Array1D::ref_count() const +{ + return v_.ref_count(); +} + +template +inline Fortran_Array1D Fortran_Array1D::subarray(int i0, int i1) +{ +#ifdef TNT_DEBUG + std::cout << "entered subarray. \n"; +#endif + if ((i0 > 0) && (i1 < n_) || (i0 <= i1)) + { + Fortran_Array1D X(*this); /* create a new instance of this array. */ + X.n_ = i1-i0+1; + X.data_ += i0; + + return X; + } + else + { +#ifdef TNT_DEBUG + std::cout << "subarray: null return.\n"; +#endif + return Fortran_Array1D(); + } +} + + +/* private internal functions */ + + +template +void Fortran_Array1D::set_(T* begin, T* end, const T& a) +{ + for (T* p=begin; p +void Fortran_Array1D::copy_(T* p, const T* q, int len) const +{ + T *end = p + len; + while (p + +namespace TNT +{ + + +/** + Write an array to a character outstream. Output format is one that can + be read back in via the in-stream operator: one integer + denoting the array dimension (n), followed by n elements, + one per line. + +*/ +template +std::ostream& operator<<(std::ostream &s, const Fortran_Array1D &A) +{ + int N=A.dim1(); + + s << N << "\n"; + for (int j=1; j<=N; j++) + { + s << A(j) << "\n"; + } + s << "\n"; + + return s; +} + +/** + Read an array from a character stream. Input format + is one integer, denoting the dimension (n), followed + by n whitespace-separated elments. Newlines are ignored + +

+ Note: the array being read into references new memory + storage. If the intent is to fill an existing conformant + array, use cin >> B; A.inject(B) ); + instead or read the elements in one-a-time by hand. + + @param s the charater to read from (typically std::in) + @param A the array to read into. +*/ +template +std::istream& operator>>(std::istream &s, Fortran_Array1D &A) +{ + int N; + s >> N; + + Fortran_Array1D B(N); + for (int i=1; i<=N; i++) + s >> B(i); + A = B; + return s; +} + + +template +Fortran_Array1D operator+(const Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Fortran_Array1D(); + + else + { + Fortran_Array1D C(n); + + for (int i=1; i<=n; i++) + { + C(i) = A(i) + B(i); + } + return C; + } +} + + + +template +Fortran_Array1D operator-(const Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Fortran_Array1D(); + + else + { + Fortran_Array1D C(n); + + for (int i=1; i<=n; i++) + { + C(i) = A(i) - B(i); + } + return C; + } +} + + +template +Fortran_Array1D operator*(const Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Fortran_Array1D(); + + else + { + Fortran_Array1D C(n); + + for (int i=1; i<=n; i++) + { + C(i) = A(i) * B(i); + } + return C; + } +} + + +template +Fortran_Array1D operator/(const Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() != n ) + return Fortran_Array1D(); + + else + { + Fortran_Array1D C(n); + + for (int i=1; i<=n; i++) + { + C(i) = A(i) / B(i); + } + return C; + } +} + + + + + + + + + +template +Fortran_Array1D& operator+=(Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=1; i<=n; i++) + { + A(i) += B(i); + } + } + return A; +} + + + + +template +Fortran_Array1D& operator-=(Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=1; i<=n; i++) + { + A(i) -= B(i); + } + } + return A; +} + + + +template +Fortran_Array1D& operator*=(Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=1; i<=n; i++) + { + A(i) *= B(i); + } + } + return A; +} + + + + +template +Fortran_Array1D& operator/=(Fortran_Array1D &A, const Fortran_Array1D &B) +{ + int n = A.dim1(); + + if (B.dim1() == n) + { + for (int i=1; i<=n; i++) + { + A(i) /= B(i); + } + } + return A; +} + + +} // namespace TNT + +#endif diff --git a/intern/smoke/intern/tnt/tnt_fortran_array2d.h b/intern/smoke/intern/tnt/tnt_fortran_array2d.h new file mode 100644 index 00000000000..f3075366d37 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_fortran_array2d.h @@ -0,0 +1,225 @@ +/* +* +* Template Numerical Toolkit (TNT): Two-dimensional Fortran numerical array +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_FORTRAN_ARRAY2D_H +#define TNT_FORTRAN_ARRAY2D_H + +#include +#include + +#ifdef TNT_BOUNDS_CHECK +#include +#endif + +#include "tnt_i_refvec.h" + +namespace TNT +{ + +template +class Fortran_Array2D +{ + + + private: + i_refvec v_; + int m_; + int n_; + T* data_; + + + void initialize_(int n); + void copy_(T* p, const T* q, int len); + void set_(T* begin, T* end, const T& val); + + public: + + typedef T value_type; + + Fortran_Array2D(); + Fortran_Array2D(int m, int n); + Fortran_Array2D(int m, int n, T *a); + Fortran_Array2D(int m, int n, const T &a); + inline Fortran_Array2D(const Fortran_Array2D &A); + inline Fortran_Array2D & operator=(const T &a); + inline Fortran_Array2D & operator=(const Fortran_Array2D &A); + inline Fortran_Array2D & ref(const Fortran_Array2D &A); + Fortran_Array2D copy() const; + Fortran_Array2D & inject(const Fortran_Array2D & A); + inline T& operator()(int i, int j); + inline const T& operator()(int i, int j) const ; + inline int dim1() const; + inline int dim2() const; + ~Fortran_Array2D(); + + /* extended interface */ + + inline int ref_count() const; + +}; + +template +Fortran_Array2D::Fortran_Array2D() : v_(), m_(0), n_(0), data_(0) {} + + +template +Fortran_Array2D::Fortran_Array2D(const Fortran_Array2D &A) : v_(A.v_), + m_(A.m_), n_(A.n_), data_(A.data_) {} + + + +template +Fortran_Array2D::Fortran_Array2D(int m, int n) : v_(m*n), m_(m), n_(n), + data_(v_.begin()) {} + +template +Fortran_Array2D::Fortran_Array2D(int m, int n, const T &val) : + v_(m*n), m_(m), n_(n), data_(v_.begin()) +{ + set_(data_, data_+m*n, val); +} + + +template +Fortran_Array2D::Fortran_Array2D(int m, int n, T *a) : v_(a), + m_(m), n_(n), data_(v_.begin()) {} + + + + +template +inline T& Fortran_Array2D::operator()(int i, int j) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 1); + assert(i <= m_); + assert(j >= 1); + assert(j <= n_); +#endif + + return v_[ (j-1)*m_ + (i-1) ]; + +} + +template +inline const T& Fortran_Array2D::operator()(int i, int j) const +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 1); + assert(i <= m_); + assert(j >= 1); + assert(j <= n_); +#endif + + return v_[ (j-1)*m_ + (i-1) ]; + +} + + +template +Fortran_Array2D & Fortran_Array2D::operator=(const T &a) +{ + set_(data_, data_+m_*n_, a); + return *this; +} + +template +Fortran_Array2D Fortran_Array2D::copy() const +{ + + Fortran_Array2D B(m_,n_); + + B.inject(*this); + return B; +} + + +template +Fortran_Array2D & Fortran_Array2D::inject(const Fortran_Array2D &A) +{ + if (m_ == A.m_ && n_ == A.n_) + copy_(data_, A.data_, m_*n_); + + return *this; +} + + + +template +Fortran_Array2D & Fortran_Array2D::ref(const Fortran_Array2D &A) +{ + if (this != &A) + { + v_ = A.v_; + m_ = A.m_; + n_ = A.n_; + data_ = A.data_; + } + return *this; +} + +template +Fortran_Array2D & Fortran_Array2D::operator=(const Fortran_Array2D &A) +{ + return ref(A); +} + +template +inline int Fortran_Array2D::dim1() const { return m_; } + +template +inline int Fortran_Array2D::dim2() const { return n_; } + + +template +Fortran_Array2D::~Fortran_Array2D() +{ +} + +template +inline int Fortran_Array2D::ref_count() const { return v_.ref_count(); } + + + + +template +void Fortran_Array2D::set_(T* begin, T* end, const T& a) +{ + for (T* p=begin; p +void Fortran_Array2D::copy_(T* p, const T* q, int len) +{ + T *end = p + len; + while (p + +namespace TNT +{ + + +template +std::ostream& operator<<(std::ostream &s, const Fortran_Array2D &A) +{ + int M=A.dim1(); + int N=A.dim2(); + + s << M << " " << N << "\n"; + + for (int i=1; i<=M; i++) + { + for (int j=1; j<=N; j++) + { + s << A(i,j) << " "; + } + s << "\n"; + } + + + return s; +} + +template +std::istream& operator>>(std::istream &s, Fortran_Array2D &A) +{ + + int M, N; + + s >> M >> N; + + Fortran_Array2D B(M,N); + + for (int i=1; i<=M; i++) + for (int j=1; j<=N; j++) + { + s >> B(i,j); + } + + A = B; + return s; +} + + + + +template +Fortran_Array2D operator+(const Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Fortran_Array2D(); + + else + { + Fortran_Array2D C(m,n); + + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + C(i,j) = A(i,j) + B(i,j); + } + return C; + } +} + +template +Fortran_Array2D operator-(const Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Fortran_Array2D(); + + else + { + Fortran_Array2D C(m,n); + + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + C(i,j) = A(i,j) - B(i,j); + } + return C; + } +} + + +template +Fortran_Array2D operator*(const Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Fortran_Array2D(); + + else + { + Fortran_Array2D C(m,n); + + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + C(i,j) = A(i,j) * B(i,j); + } + return C; + } +} + + +template +Fortran_Array2D operator/(const Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() != m || B.dim2() != n ) + return Fortran_Array2D(); + + else + { + Fortran_Array2D C(m,n); + + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + C(i,j) = A(i,j) / B(i,j); + } + return C; + } +} + + + +template +Fortran_Array2D& operator+=(Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + A(i,j) += B(i,j); + } + } + return A; +} + +template +Fortran_Array2D& operator-=(Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + A(i,j) -= B(i,j); + } + } + return A; +} + +template +Fortran_Array2D& operator*=(Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + A(i,j) *= B(i,j); + } + } + return A; +} + +template +Fortran_Array2D& operator/=(Fortran_Array2D &A, const Fortran_Array2D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + + if (B.dim1() == m || B.dim2() == n ) + { + for (int i=1; i<=m; i++) + { + for (int j=1; j<=n; j++) + A(i,j) /= B(i,j); + } + } + return A; +} + +} // namespace TNT + +#endif diff --git a/intern/smoke/intern/tnt/tnt_fortran_array3d.h b/intern/smoke/intern/tnt/tnt_fortran_array3d.h new file mode 100644 index 00000000000..e51affba4ea --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_fortran_array3d.h @@ -0,0 +1,223 @@ +/* +* +* Template Numerical Toolkit (TNT): Three-dimensional Fortran numerical array +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_FORTRAN_ARRAY3D_H +#define TNT_FORTRAN_ARRAY3D_H + +#include +#include +#ifdef TNT_BOUNDS_CHECK +#include +#endif +#include "tnt_i_refvec.h" + +namespace TNT +{ + +template +class Fortran_Array3D +{ + + + private: + + + i_refvec v_; + int m_; + int n_; + int k_; + T* data_; + + public: + + typedef T value_type; + + Fortran_Array3D(); + Fortran_Array3D(int m, int n, int k); + Fortran_Array3D(int m, int n, int k, T *a); + Fortran_Array3D(int m, int n, int k, const T &a); + inline Fortran_Array3D(const Fortran_Array3D &A); + inline Fortran_Array3D & operator=(const T &a); + inline Fortran_Array3D & operator=(const Fortran_Array3D &A); + inline Fortran_Array3D & ref(const Fortran_Array3D &A); + Fortran_Array3D copy() const; + Fortran_Array3D & inject(const Fortran_Array3D & A); + inline T& operator()(int i, int j, int k); + inline const T& operator()(int i, int j, int k) const ; + inline int dim1() const; + inline int dim2() const; + inline int dim3() const; + inline int ref_count() const; + ~Fortran_Array3D(); + + +}; + +template +Fortran_Array3D::Fortran_Array3D() : v_(), m_(0), n_(0), k_(0), data_(0) {} + + +template +Fortran_Array3D::Fortran_Array3D(const Fortran_Array3D &A) : + v_(A.v_), m_(A.m_), n_(A.n_), k_(A.k_), data_(A.data_) {} + + + +template +Fortran_Array3D::Fortran_Array3D(int m, int n, int k) : + v_(m*n*k), m_(m), n_(n), k_(k), data_(v_.begin()) {} + + + +template +Fortran_Array3D::Fortran_Array3D(int m, int n, int k, const T &val) : + v_(m*n*k), m_(m), n_(n), k_(k), data_(v_.begin()) +{ + for (T* p = data_; p < data_ + m*n*k; p++) + *p = val; +} + +template +Fortran_Array3D::Fortran_Array3D(int m, int n, int k, T *a) : + v_(a), m_(m), n_(n), k_(k), data_(v_.begin()) {} + + + + +template +inline T& Fortran_Array3D::operator()(int i, int j, int k) +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 1); + assert(i <= m_); + assert(j >= 1); + assert(j <= n_); + assert(k >= 1); + assert(k <= k_); +#endif + + return data_[(k-1)*m_*n_ + (j-1) * m_ + i-1]; + +} + +template +inline const T& Fortran_Array3D::operator()(int i, int j, int k) const +{ +#ifdef TNT_BOUNDS_CHECK + assert(i >= 1); + assert(i <= m_); + assert(j >= 1); + assert(j <= n_); + assert(k >= 1); + assert(k <= k_); +#endif + + return data_[(k-1)*m_*n_ + (j-1) * m_ + i-1]; +} + + +template +Fortran_Array3D & Fortran_Array3D::operator=(const T &a) +{ + + T *end = data_ + m_*n_*k_; + + for (T *p=data_; p != end; *p++ = a); + + return *this; +} + +template +Fortran_Array3D Fortran_Array3D::copy() const +{ + + Fortran_Array3D B(m_, n_, k_); + B.inject(*this); + return B; + +} + + +template +Fortran_Array3D & Fortran_Array3D::inject(const Fortran_Array3D &A) +{ + + if (m_ == A.m_ && n_ == A.n_ && k_ == A.k_) + { + T *p = data_; + T *end = data_ + m_*n_*k_; + const T* q = A.data_; + for (; p < end; *p++ = *q++); + } + return *this; +} + + + + +template +Fortran_Array3D & Fortran_Array3D::ref(const Fortran_Array3D &A) +{ + + if (this != &A) + { + v_ = A.v_; + m_ = A.m_; + n_ = A.n_; + k_ = A.k_; + data_ = A.data_; + } + return *this; +} + +template +Fortran_Array3D & Fortran_Array3D::operator=(const Fortran_Array3D &A) +{ + return ref(A); +} + +template +inline int Fortran_Array3D::dim1() const { return m_; } + +template +inline int Fortran_Array3D::dim2() const { return n_; } + +template +inline int Fortran_Array3D::dim3() const { return k_; } + + +template +inline int Fortran_Array3D::ref_count() const +{ + return v_.ref_count(); +} + +template +Fortran_Array3D::~Fortran_Array3D() +{ +} + + +} /* namespace TNT */ + +#endif +/* TNT_FORTRAN_ARRAY3D_H */ + diff --git a/intern/smoke/intern/tnt/tnt_fortran_array3d_utils.h b/intern/smoke/intern/tnt/tnt_fortran_array3d_utils.h new file mode 100644 index 00000000000..a13a275dc0d --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_fortran_array3d_utils.h @@ -0,0 +1,249 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + +#ifndef TNT_FORTRAN_ARRAY3D_UTILS_H +#define TNT_FORTRAN_ARRAY3D_UTILS_H + +#include +#include + +namespace TNT +{ + + +template +std::ostream& operator<<(std::ostream &s, const Fortran_Array3D &A) +{ + int M=A.dim1(); + int N=A.dim2(); + int K=A.dim3(); + + s << M << " " << N << " " << K << "\n"; + + for (int i=1; i<=M; i++) + { + for (int j=1; j<=N; j++) + { + for (int k=1; k<=K; k++) + s << A(i,j,k) << " "; + s << "\n"; + } + s << "\n"; + } + + + return s; +} + +template +std::istream& operator>>(std::istream &s, Fortran_Array3D &A) +{ + + int M, N, K; + + s >> M >> N >> K; + + Fortran_Array3D B(M,N,K); + + for (int i=1; i<=M; i++) + for (int j=1; j<=N; j++) + for (int k=1; k<=K; k++) + s >> B(i,j,k); + + A = B; + return s; +} + + +template +Fortran_Array3D operator+(const Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Fortran_Array3D(); + + else + { + Fortran_Array3D C(m,n,p); + + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + C(i,j,k) = A(i,j,k)+ B(i,j,k); + + return C; + } +} + + +template +Fortran_Array3D operator-(const Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Fortran_Array3D(); + + else + { + Fortran_Array3D C(m,n,p); + + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + C(i,j,k) = A(i,j,k)- B(i,j,k); + + return C; + } +} + + +template +Fortran_Array3D operator*(const Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Fortran_Array3D(); + + else + { + Fortran_Array3D C(m,n,p); + + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + C(i,j,k) = A(i,j,k)* B(i,j,k); + + return C; + } +} + + +template +Fortran_Array3D operator/(const Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() != m || B.dim2() != n || B.dim3() != p ) + return Fortran_Array3D(); + + else + { + Fortran_Array3D C(m,n,p); + + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + C(i,j,k) = A(i,j,k)/ B(i,j,k); + + return C; + } +} + + +template +Fortran_Array3D& operator+=(Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + A(i,j,k) += B(i,j,k); + } + + return A; +} + + +template +Fortran_Array3D& operator-=(Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + A(i,j,k) -= B(i,j,k); + } + + return A; +} + + +template +Fortran_Array3D& operator*=(Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + A(i,j,k) *= B(i,j,k); + } + + return A; +} + + +template +Fortran_Array3D& operator/=(Fortran_Array3D &A, const Fortran_Array3D &B) +{ + int m = A.dim1(); + int n = A.dim2(); + int p = A.dim3(); + + if (B.dim1() == m && B.dim2() == n && B.dim3() == p ) + { + for (int i=1; i<=m; i++) + for (int j=1; j<=n; j++) + for (int k=1; k<=p; k++) + A(i,j,k) /= B(i,j,k); + } + + return A; +} + + +} // namespace TNT + +#endif diff --git a/intern/smoke/intern/tnt/tnt_i_refvec.h b/intern/smoke/intern/tnt/tnt_i_refvec.h new file mode 100644 index 00000000000..5a67eb57896 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_i_refvec.h @@ -0,0 +1,243 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_I_REFVEC_H +#define TNT_I_REFVEC_H + +#include +#include + +#ifdef TNT_BOUNDS_CHECK +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +namespace TNT +{ +/* + Internal representation of ref-counted array. The TNT + arrays all use this building block. + +

+ If an array block is created by TNT, then every time + an assignment is made, the left-hand-side reference + is decreased by one, and the right-hand-side refernce + count is increased by one. If the array block was + external to TNT, the refernce count is a NULL pointer + regardless of how many references are made, since the + memory is not freed by TNT. + + + +*/ +template +class i_refvec +{ + + + private: + T* data_; + int *ref_count_; + + + public: + + i_refvec(); + explicit i_refvec(int n); + inline i_refvec(T* data); + inline i_refvec(const i_refvec &v); + inline T* begin(); + inline const T* begin() const; + inline T& operator[](int i); + inline const T& operator[](int i) const; + inline i_refvec & operator=(const i_refvec &V); + void copy_(T* p, const T* q, const T* e); + void set_(T* p, const T* b, const T* e); + inline int ref_count() const; + inline int is_null() const; + inline void destroy(); + ~i_refvec(); + +}; + +template +void i_refvec::copy_(T* p, const T* q, const T* e) +{ + for (T* t=p; q +i_refvec::i_refvec() : data_(NULL), ref_count_(NULL) {} + +/** + In case n is 0 or negative, it does NOT call new. +*/ +template +i_refvec::i_refvec(int n) : data_(NULL), ref_count_(NULL) +{ + if (n >= 1) + { +#ifdef TNT_DEBUG + std::cout << "new data storage.\n"; +#endif + data_ = new T[n]; + ref_count_ = new int; + *ref_count_ = 1; + } +} + +template +inline i_refvec::i_refvec(const i_refvec &V): data_(V.data_), + ref_count_(V.ref_count_) +{ + if (V.ref_count_ != NULL) + (*(V.ref_count_))++; +} + + +template +i_refvec::i_refvec(T* data) : data_(data), ref_count_(NULL) {} + +template +inline T* i_refvec::begin() +{ + return data_; +} + +template +inline const T& i_refvec::operator[](int i) const +{ + return data_[i]; +} + +template +inline T& i_refvec::operator[](int i) +{ + return data_[i]; +} + + +template +inline const T* i_refvec::begin() const +{ + return data_; +} + + + +template +i_refvec & i_refvec::operator=(const i_refvec &V) +{ + if (this == &V) + return *this; + + + if (ref_count_ != NULL) + { + (*ref_count_) --; + if ((*ref_count_) == 0) + destroy(); + } + + data_ = V.data_; + ref_count_ = V.ref_count_; + + if (V.ref_count_ != NULL) + (*(V.ref_count_))++; + + return *this; +} + +template +void i_refvec::destroy() +{ + if (ref_count_ != NULL) + { +#ifdef TNT_DEBUG + std::cout << "destorying data... \n"; +#endif + delete ref_count_; + +#ifdef TNT_DEBUG + std::cout << "deleted ref_count_ ...\n"; +#endif + if (data_ != NULL) + delete []data_; +#ifdef TNT_DEBUG + std::cout << "deleted data_[] ...\n"; +#endif + data_ = NULL; + } +} + +/* +* return 1 is vector is empty, 0 otherwise +* +* if is_null() is false and ref_count() is 0, then +* +*/ +template +int i_refvec::is_null() const +{ + return (data_ == NULL ? 1 : 0); +} + +/* +* returns -1 if data is external, +* returns 0 if a is NULL array, +* otherwise returns the positive number of vectors sharing +* this data space. +*/ +template +int i_refvec::ref_count() const +{ + if (data_ == NULL) + return 0; + else + return (ref_count_ != NULL ? *ref_count_ : -1) ; +} + +template +i_refvec::~i_refvec() +{ + if (ref_count_ != NULL) + { + (*ref_count_)--; + + if (*ref_count_ == 0) + destroy(); + } +} + + +} /* namespace TNT */ + + + + + +#endif +/* TNT_I_REFVEC_H */ + diff --git a/intern/smoke/intern/tnt/tnt_math_utils.h b/intern/smoke/intern/tnt/tnt_math_utils.h new file mode 100644 index 00000000000..6e14a1d9b90 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_math_utils.h @@ -0,0 +1,34 @@ +#ifndef MATH_UTILS_H +#define MATH_UTILS_H + +/* needed for fabs, sqrt() below */ +#include + + + +namespace TNT +{ +/** + @returns hypotenuse of real (non-complex) scalars a and b by + avoiding underflow/overflow + using (a * sqrt( 1 + (b/a) * (b/a))), rather than + sqrt(a*a + b*b). +*/ +template +Real hypot(const Real &a, const Real &b) +{ + + if (a== 0) + return fabs(b); + else + { + Real c = b/a; + return fabs(a) * sqrt(1 + c*c); + } +} +} /* TNT namespace */ + + + +#endif +/* MATH_UTILS_H */ diff --git a/intern/smoke/intern/tnt/tnt_sparse_matrix_csr.h b/intern/smoke/intern/tnt/tnt_sparse_matrix_csr.h new file mode 100644 index 00000000000..0d4fde1c207 --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_sparse_matrix_csr.h @@ -0,0 +1,103 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + +#ifndef TNT_SPARSE_MATRIX_CSR_H +#define TNT_SPARSE_MATRIX_CSR_H + +#include "tnt_array1d.h" + +namespace TNT +{ + + +/** + Read-only view of a sparse matrix in compressed-row storage + format. Neither array elements (nonzeros) nor sparsity + structure can be modified. If modifications are required, + create a new view. + +

+ Index values begin at 0. + +

+ Storage requirements: An (m x n) matrix with + nz nonzeros requires no more than ((T+I)*nz + M*I) + bytes, where T is the size of data elements and + I is the size of integers. + + +*/ +template +class Sparse_Matrix_CompRow { + +private: + Array1D val_; // data values (nz_ elements) + Array1D rowptr_; // row_ptr (dim_[0]+1 elements) + Array1D colind_; // col_ind (nz_ elements) + + int dim1_; // number of rows + int dim2_; // number of cols + +public: + + Sparse_Matrix_CompRow(const Sparse_Matrix_CompRow &S); + Sparse_Matrix_CompRow(int M, int N, int nz, const T *val, + const int *r, const int *c); + + + + inline const T& val(int i) const { return val_[i]; } + inline const int& row_ptr(int i) const { return rowptr_[i]; } + inline const int& col_ind(int i) const { return colind_[i];} + + inline int dim1() const {return dim1_;} + inline int dim2() const {return dim2_;} + int NumNonzeros() const {return val_.dim1();} + + + Sparse_Matrix_CompRow& operator=( + const Sparse_Matrix_CompRow &R); + + + +}; + +/** + Construct a read-only view of existing sparse matrix in + compressed-row storage format. + + @param M the number of rows of sparse matrix + @param N the number of columns of sparse matrix + @param nz the number of nonzeros + @param val a contiguous list of nonzero values + @param r row-pointers: r[i] denotes the begining position of row i + (i.e. the ith row begins at val[row[i]]). + @param c column-indices: c[i] denotes the column location of val[i] +*/ +template +Sparse_Matrix_CompRow::Sparse_Matrix_CompRow(int M, int N, int nz, + const T *val, const int *r, const int *c) : val_(nz,val), + rowptr_(M, r), colind_(nz, c), dim1_(M), dim2_(N) {} + + +} +// namespace TNT + +#endif diff --git a/intern/smoke/intern/tnt/tnt_stopwatch.h b/intern/smoke/intern/tnt/tnt_stopwatch.h new file mode 100644 index 00000000000..8dc5d23ac1e --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_stopwatch.h @@ -0,0 +1,95 @@ +/* +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef STOPWATCH_H +#define STOPWATCH_H + +// for clock() and CLOCKS_PER_SEC +#include + + +namespace TNT +{ + +inline static double seconds(void) +{ + const double secs_per_tick = 1.0 / CLOCKS_PER_SEC; + return ( (double) clock() ) * secs_per_tick; +} + +class Stopwatch { + private: + int running_; + double start_time_; + double total_; + + public: + inline Stopwatch(); + inline void start(); + inline double stop(); + inline double read(); + inline void resume(); + inline int running(); +}; + +inline Stopwatch::Stopwatch() : running_(0), start_time_(0.0), total_(0.0) {} + +void Stopwatch::start() +{ + running_ = 1; + total_ = 0.0; + start_time_ = seconds(); +} + +double Stopwatch::stop() +{ + if (running_) + { + total_ += (seconds() - start_time_); + running_ = 0; + } + return total_; +} + +inline void Stopwatch::resume() +{ + if (!running_) + { + start_time_ = seconds(); + running_ = 1; + } +} + + +inline double Stopwatch::read() +{ + if (running_) + { + stop(); + resume(); + } + return total_; +} + + +} /* TNT namespace */ +#endif + + + diff --git a/intern/smoke/intern/tnt/tnt_subscript.h b/intern/smoke/intern/tnt/tnt_subscript.h new file mode 100644 index 00000000000..d8fe1200eeb --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_subscript.h @@ -0,0 +1,54 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + +#ifndef TNT_SUBSCRPT_H +#define TNT_SUBSCRPT_H + + +//--------------------------------------------------------------------- +// This definition describes the default TNT data type used for +// indexing into TNT matrices and vectors. The data type should +// be wide enough to index into large arrays. It defaults to an +// "int", but can be overriden at compile time redefining TNT_SUBSCRIPT_TYPE, +// e.g. +// +// c++ -DTNT_SUBSCRIPT_TYPE='unsigned int' ... +// +//--------------------------------------------------------------------- +// + +#ifndef TNT_SUBSCRIPT_TYPE +#define TNT_SUBSCRIPT_TYPE int +#endif + +namespace TNT +{ + typedef TNT_SUBSCRIPT_TYPE Subscript; +} /* namespace TNT */ + + +// () indexing in TNT means 1-offset, i.e. x(1) and A(1,1) are the +// first elements. This offset is left as a macro for future +// purposes, but should not be changed in the current release. +// +// +#define TNT_BASE_OFFSET (1) + +#endif diff --git a/intern/smoke/intern/tnt/tnt_vec.h b/intern/smoke/intern/tnt/tnt_vec.h new file mode 100644 index 00000000000..a0f614b5cbd --- /dev/null +++ b/intern/smoke/intern/tnt/tnt_vec.h @@ -0,0 +1,404 @@ +/* +* +* Template Numerical Toolkit (TNT) +* +* Mathematical and Computational Sciences Division +* National Institute of Technology, +* Gaithersburg, MD USA +* +* +* This software was developed at the National Institute of Standards and +* Technology (NIST) by employees of the Federal Government in the course +* of their official duties. Pursuant to title 17 Section 105 of the +* United States Code, this software is not subject to copyright protection +* and is in the public domain. NIST assumes no responsibility whatsoever for +* its use by other parties, and makes no guarantees, expressed or implied, +* about its quality, reliability, or any other characteristic. +* +*/ + + + +#ifndef TNT_VEC_H +#define TNT_VEC_H + +#include "tnt_subscript.h" +#include +#include +#include +#include + +namespace TNT +{ + +/** + [Deprecatred] Value-based vector class from pre-1.0 + TNT version. Kept here for backward compatiblity, but should + use the newer TNT::Array1D classes instead. + +*/ + +template +class Vector +{ + + + public: + + typedef Subscript size_type; + typedef T value_type; + typedef T element_type; + typedef T* pointer; + typedef T* iterator; + typedef T& reference; + typedef const T* const_iterator; + typedef const T& const_reference; + + Subscript lbound() const { return 1;} + + protected: + T* v_; + T* vm1_; // pointer adjustment for optimzied 1-offset indexing + Subscript n_; + + // internal helper function to create the array + // of row pointers + + void initialize(Subscript N) + { + // adjust pointers so that they are 1-offset: + // v_[] is the internal contiguous array, it is still 0-offset + // + assert(v_ == NULL); + v_ = new T[N]; + assert(v_ != NULL); + vm1_ = v_-1; + n_ = N; + } + + void copy(const T* v) + { + Subscript N = n_; + Subscript i; + +#ifdef TNT_UNROLL_LOOPS + Subscript Nmod4 = N & 3; + Subscript N4 = N - Nmod4; + + for (i=0; i &A) : v_(0), vm1_(0), n_(0) + { + initialize(A.n_); + copy(A.v_); + } + + Vector(Subscript N, const T& value = T()) : v_(0), vm1_(0), n_(0) + { + initialize(N); + set(value); + } + + Vector(Subscript N, const T* v) : v_(0), vm1_(0), n_(0) + { + initialize(N); + copy(v); + } + + Vector(Subscript N, char *s) : v_(0), vm1_(0), n_(0) + { + initialize(N); + std::istringstream ins(s); + + Subscript i; + + for (i=0; i> v_[i]; + } + + + // methods + // + Vector& newsize(Subscript N) + { + if (n_ == N) return *this; + + destroy(); + initialize(N); + + return *this; + } + + + // assignments + // + Vector& operator=(const Vector &A) + { + if (v_ == A.v_) + return *this; + + if (n_ == A.n_) // no need to re-alloc + copy(A.v_); + + else + { + destroy(); + initialize(A.n_); + copy(A.v_); + } + + return *this; + } + + Vector& operator=(const T& scalar) + { + set(scalar); + return *this; + } + + inline Subscript dim() const + { + return n_; + } + + inline Subscript size() const + { + return n_; + } + + + inline reference operator()(Subscript i) + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= n_) ; +#endif + return vm1_[i]; + } + + inline const_reference operator() (Subscript i) const + { +#ifdef TNT_BOUNDS_CHECK + assert(1<=i); + assert(i <= n_) ; +#endif + return vm1_[i]; + } + + inline reference operator[](Subscript i) + { +#ifdef TNT_BOUNDS_CHECK + assert(0<=i); + assert(i < n_) ; +#endif + return v_[i]; + } + + inline const_reference operator[](Subscript i) const + { +#ifdef TNT_BOUNDS_CHECK + assert(0<=i); + + + + + + + assert(i < n_) ; +#endif + return v_[i]; + } + + + +}; + + +/* *************************** I/O ********************************/ + +template +std::ostream& operator<<(std::ostream &s, const Vector &A) +{ + Subscript N=A.dim(); + + s << N << "\n"; + + for (Subscript i=0; i +std::istream & operator>>(std::istream &s, Vector &A) +{ + + Subscript N; + + s >> N; + + if ( !(N == A.size() )) + { + A.newsize(N); + } + + + for (Subscript i=0; i> A[i]; + + + return s; +} + +// *******************[ basic matrix algorithms ]*************************** + + +template +Vector operator+(const Vector &A, + const Vector &B) +{ + Subscript N = A.dim(); + + assert(N==B.dim()); + + Vector tmp(N); + Subscript i; + + for (i=0; i +Vector operator-(const Vector &A, + const Vector &B) +{ + Subscript N = A.dim(); + + assert(N==B.dim()); + + Vector tmp(N); + Subscript i; + + for (i=0; i +Vector operator*(const Vector &A, + const Vector &B) +{ + Subscript N = A.dim(); + + assert(N==B.dim()); + + Vector tmp(N); + Subscript i; + + for (i=0; i +T dot_prod(const Vector &A, const Vector &B) +{ + Subscript N = A.dim(); + assert(N == B.dim()); + + Subscript i; + T sum = 0; + + for (i=0; idomain = NULL; + smd->flow = NULL; + smd->coll = NULL; + smd->type = 0; + smd->time = -1; + + /* + smd->fluid = NULL; + smd->maxres = 48; + smd->amplify = 4; + smd->omega = 0.5; + smd->time = 0; + smd->flags = 0; + smd->noise = MOD_SMOKE_NOISEWAVE; + smd->visibility = 1; + + // init 3dview buffer + smd->tvox = NULL; + smd->tray = NULL; + smd->tvoxbig = NULL; + smd->traybig = NULL; + smd->viewsettings = 0; + smd->bind = NULL; + smd->max_textures = 0; + */ +} + +static void smokeModifier_freeData(ModifierData *md) +{ + SmokeModifierData *smd = (SmokeModifierData*) md; + + smokeModifier_free (smd); +} + +static void smokeModifier_deformVerts( + ModifierData *md, Object *ob, DerivedMesh *derivedData, + float (*vertexCos)[3], int numVerts) +{ + SmokeModifierData *smd = (SmokeModifierData*) md; + DerivedMesh *dm = NULL; + + if(derivedData) dm = derivedData; + else if(ob->type == OB_MESH) dm = CDDM_from_mesh(ob->data, ob); + else return; + + CDDM_apply_vert_coords(dm, vertexCos); + CDDM_calc_normals(dm); + + smokeModifier_do(smd, md->scene, ob, dm); + + if(dm != derivedData) dm->release(dm); +} + +static int smokeModifier_dependsOnTime(ModifierData *md) +{ + return 1; +} + +static void smokeModifier_updateDepgraph( + ModifierData *md, DagForest *forest, Scene *scene, Object *ob, + DagNode *obNode) +{ + SmokeModifierData *smd = (SmokeModifierData *) md; + /* + if(smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) + { + if(smd->domain->fluid_group) + { + GroupObject *go = NULL; + + for(go = smd->domain->fluid_group->gobject.first; go; go = go->next) + { + if(go->ob) + { + SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(go->ob, eModifierType_Smoke); + + // check for initialized smoke object + if(smd2 && (smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) + { + DagNode *curNode = dag_get_node(forest, go->ob); + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow"); + } + } + } + } + } + */ +} /* Cloth */ @@ -8477,6 +8574,15 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) | eModifierTypeFlag_Single; mti->deformVerts = softbodyModifier_deformVerts; mti->dependsOnTime = softbodyModifier_dependsOnTime; + + mti = INIT_TYPE(Smoke); + mti->type = eModifierTypeType_OnlyDeform; + mti->initData = smokeModifier_initData; + mti->freeData = smokeModifier_freeData; + mti->flags = eModifierTypeFlag_AcceptsMesh; + mti->deformVerts = smokeModifier_deformVerts; + mti->dependsOnTime = smokeModifier_dependsOnTime; + mti->updateDepgraph = smokeModifier_updateDepgraph; mti = INIT_TYPE(Cloth); mti->type = eModifierTypeType_Nonconstructive; diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c new file mode 100644 index 00000000000..941381f04f3 --- /dev/null +++ b/source/blender/blenkernel/intern/smoke.c @@ -0,0 +1,1342 @@ +/** + * BKE_cloth.h + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Daniel Genrich + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include + +#include "MEM_guardedalloc.h" + +#include +#include +#include "stdio.h" + +#include "BLI_linklist.h" +#include "BLI_rand.h" +#include "BLI_jitter.h" +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_edgehash.h" +#include "BLI_kdtree.h" +#include "BLI_kdopbvh.h" + +#include "BKE_cdderivedmesh.h" +#include "BKE_customdata.h" +#include "BKE_DerivedMesh.h" +#include "BKE_modifier.h" +#include "BKE_particle.h" +#include "BKE_utildefines.h" + +#include "DNA_customdata_types.h" +#include "DNA_group_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_modifier_types.h" +#include "DNA_object_types.h" +#include "DNA_particle_types.h" +#include "DNA_scene_types.h" +#include "DNA_smoke_types.h" + +#include "smoke_API.h" + +#include "BKE_smoke.h" + +#ifdef _WIN32 +#include +#include +#include +#include + +static LARGE_INTEGER liFrequency; +static LARGE_INTEGER liStartTime; +static LARGE_INTEGER liCurrentTime; + +static void tstart ( void ) +{ + QueryPerformanceFrequency ( &liFrequency ); + QueryPerformanceCounter ( &liStartTime ); +} +static void tend ( void ) +{ + QueryPerformanceCounter ( &liCurrentTime ); +} +static double tval() +{ + return ((double)( (liCurrentTime.QuadPart - liStartTime.QuadPart)* (double)1000.0/(double)liFrequency.QuadPart )); +} +#else +#include +static struct timeval _tstart, _tend; +static struct timezone tz; +static void tstart ( void ) +{ + gettimeofday ( &_tstart, &tz ); +} +static void tend ( void ) +{ + gettimeofday ( &_tend,&tz ); +} +static double tval() +{ + double t1, t2; + t1 = ( double ) _tstart.tv_sec*1000 + ( double ) _tstart.tv_usec/ ( 1000 ); + t2 = ( double ) _tend.tv_sec*1000 + ( double ) _tend.tv_usec/ ( 1000 ); + return t2-t1; +} +#endif + +struct Object; +struct Scene; +struct DerivedMesh; +struct SmokeModifierData; + +// forward declerations +static void get_cell(struct SmokeModifierData *smd, float *pos, int *cell, int correct); +static void get_bigcell(struct SmokeModifierData *smd, float *pos, int *cell, int correct); +void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *tris, int numfaces, int numtris, int **tridivs, float cell_len); + +#define TRI_UVOFFSET (1./4.) + +int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm) +{ + if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid) + { + size_t i; + float min[3] = {FLT_MAX, FLT_MAX, FLT_MAX}, max[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX}; + float size[3]; + MVert *verts = dm->getVertArray(dm); + float scale = 0.0; + int res = smd->domain->maxres; + + // get BB of domain + for(i = 0; i < dm->getNumVerts(dm); i++) + { + float tmp[3]; + + VECCOPY(tmp, verts[i].co); + Mat4MulVecfl(ob->obmat, tmp); + + // min BB + min[0] = MIN2(min[0], tmp[0]); + min[1] = MIN2(min[1], tmp[1]); + min[2] = MIN2(min[2], tmp[2]); + + // max BB + max[0] = MAX2(max[0], tmp[0]); + max[1] = MAX2(max[1], tmp[1]); + max[2] = MAX2(max[2], tmp[2]); + } + + VECCOPY(smd->domain->p0, min); + VECCOPY(smd->domain->p1, max); + + // calc other res with max_res provided + VECSUB(size, max, min); + if(size[0] > size[1]) + { + if(size[0] > size[1]) + { + scale = res / size[0]; + smd->domain->dx = size[0] / res; + smd->domain->res[0] = res; + smd->domain->res[1] = (int)(size[1] * scale + 0.5); + smd->domain->res[2] = (int)(size[2] * scale + 0.5); + } + else + { + scale = res / size[1]; + smd->domain->dx = size[1] / res; + smd->domain->res[1] = res; + smd->domain->res[0] = (int)(size[0] * scale + 0.5); + smd->domain->res[2] = (int)(size[2] * scale + 0.5); + } + } + else + { + if(size[1] > size[2]) + { + scale = res / size[1]; + smd->domain->dx = size[1] / res; + smd->domain->res[1] = res; + smd->domain->res[0] = (int)(size[0] * scale + 0.5); + smd->domain->res[2] = (int)(size[2] * scale + 0.5); + } + else + { + scale = res / size[2]; + smd->domain->dx = size[2] / res; + smd->domain->res[2] = res; + smd->domain->res[0] = (int)(size[0] * scale + 0.5); + smd->domain->res[1] = (int)(size[1] * scale + 0.5); + } + } + + printf("res[0]: %d, res[1]: %d, res[2]: %d\n", smd->domain->res[0], smd->domain->res[1], smd->domain->res[2]); + + // dt max is 0.1 + smd->domain->fluid = smoke_init(smd->domain->res, smd->domain->amplify, smd->domain->p0, smd->domain->p1, 2.5 / FPS); + smd->time = scene->r.cfra; + smd->domain->firstframe = smd->time; + + smoke_initBlenderRNA(smd->domain->fluid, &(smd->domain->alpha), &(smd->domain->beta)); + + return 1; + } + else if((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) + { + // handle flow object here + // XXX TODO + + smd->time = scene->r.cfra; + + // update particle lifetime to be one frame + // smd->flow->psys->part->lifetime = scene->r.efra + 1; + + return 1; + } + else if((smd->type & MOD_SMOKE_TYPE_COLL) && smd->coll) + { + smd->time = scene->r.cfra; + + if(!smd->coll->points) + { + // init collision points + SmokeCollSettings *scs = smd->coll; + MVert *mvert = dm->getVertArray(dm); + MFace *mface = dm->getFaceArray(dm); + size_t i = 0, divs = 0; + int *tridivs = NULL; + float cell_len = 1.0 / 50.0; // for res = 50 + size_t newdivs = 0; + size_t max_points = 0; + size_t quads = 0, facecounter = 0; + + // count quads + for(i = 0; i < dm->getNumFaces(dm); i++) + { + if(mface[i].v4) + quads++; + } + + calcTriangleDivs(ob, mvert, dm->getNumVerts(dm), mface, dm->getNumFaces(dm), dm->getNumFaces(dm) + quads, &tridivs, cell_len); + + // count triangle divisions + for(i = 0; i < dm->getNumFaces(dm) + quads; i++) + { + divs += (tridivs[3 * i] + 1) * (tridivs[3 * i + 1] + 1) * (tridivs[3 * i + 2] + 1); + } + + // printf("divs: %d\n", divs); + + scs->points = MEM_callocN(sizeof(float) * (dm->getNumVerts(dm) + divs) * 3, "SmokeCollPoints"); + + for(i = 0; i < dm->getNumVerts(dm); i++) + { + float tmpvec[3]; + VECCOPY(tmpvec, mvert[i].co); + Mat4MulVecfl (ob->obmat, tmpvec); + VECCOPY(&scs->points[i * 3], tmpvec); + } + + for(i = 0, facecounter = 0; i < dm->getNumFaces(dm); i++) + { + int again = 0; + do + { + size_t j, k; + int divs1 = tridivs[3 * facecounter + 0]; + int divs2 = tridivs[3 * facecounter + 1]; + int divs3 = tridivs[3 * facecounter + 2]; + float side1[3], side2[3], trinormorg[3], trinorm[3]; + + if(again == 1 && mface[i].v4) + { + VECSUB(side1, mvert[ mface[i].v3 ].co, mvert[ mface[i].v1 ].co); + VECSUB(side2, mvert[ mface[i].v4 ].co, mvert[ mface[i].v1 ].co); + } + else + { + VECSUB(side1, mvert[ mface[i].v2 ].co, mvert[ mface[i].v1 ].co); + VECSUB(side2, mvert[ mface[i].v3 ].co, mvert[ mface[i].v1 ].co); + } + + Crossf(trinormorg, side1, side2); + Normalize(trinormorg); + VECCOPY(trinorm, trinormorg); + VecMulf(trinorm, 0.25 * cell_len); + + for(j = 0; j <= divs1; j++) + { + for(k = 0; k <= divs2; k++) + { + float p1[3], p2[3], p3[3], p[3]={0,0,0}; + const float uf = (float)(j + TRI_UVOFFSET) / (float)(divs1 + 0.0); + const float vf = (float)(k + TRI_UVOFFSET) / (float)(divs2 + 0.0); + float tmpvec[3]; + + if(uf+vf > 1.0) + { + // printf("bigger - divs1: %d, divs2: %d\n", divs1, divs2); + continue; + } + + VECCOPY(p1, mvert[ mface[i].v1 ].co); + if(again == 1 && mface[i].v4) + { + VECCOPY(p2, mvert[ mface[i].v3 ].co); + VECCOPY(p3, mvert[ mface[i].v4 ].co); + } + else + { + VECCOPY(p2, mvert[ mface[i].v2 ].co); + VECCOPY(p3, mvert[ mface[i].v3 ].co); + } + + VecMulf(p1, (1.0-uf-vf)); + VecMulf(p2, uf); + VecMulf(p3, vf); + + VECADD(p, p1, p2); + VECADD(p, p, p3); + + if(newdivs > divs) + printf("mem problem\n"); + + // mMovPoints.push_back(p + trinorm); + VECCOPY(tmpvec, p); + VECADD(tmpvec, tmpvec, trinorm); + Mat4MulVecfl (ob->obmat, tmpvec); + VECCOPY(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); + newdivs++; + + if(newdivs > divs) + printf("mem problem\n"); + + // mMovPoints.push_back(p - trinorm); + VECCOPY(tmpvec, p); + VECSUB(tmpvec, tmpvec, trinorm); + Mat4MulVecfl (ob->obmat, tmpvec); + VECCOPY(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); + newdivs++; + } + } + + if(again == 0 && mface[i].v4) + again++; + else + again = 0; + + facecounter++; + + } while(again!=0); + } + + scs->numpoints = dm->getNumVerts(dm) + newdivs; + + MEM_freeN(tridivs); + } + + } + + return 0; +} + +/*! init triangle divisions */ +void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *faces, int numfaces, int numtris, int **tridivs, float cell_len) +{ + // mTriangleDivs1.resize( faces.size() ); + // mTriangleDivs2.resize( faces.size() ); + // mTriangleDivs3.resize( faces.size() ); + + size_t i = 0, facecounter = 0; + float maxscale[3] = {1,1,1}; // = channelFindMaxVf(mcScale); + float maxpart = ABS(maxscale[0]); + float scaleFac = 0; + float fsTri = 0; + if(ABS(maxscale[1])>maxpart) maxpart = ABS(maxscale[1]); + if(ABS(maxscale[2])>maxpart) maxpart = ABS(maxscale[2]); + scaleFac = 1.0 / maxpart; + // featureSize = mLevel[mMaxRefine].nodeSize + fsTri = cell_len * 0.5 * scaleFac; + + if(*tridivs) + MEM_freeN(*tridivs); + + *tridivs = MEM_callocN(sizeof(int) * numtris * 3, "Smoke_Tridivs"); + + for(i = 0, facecounter = 0; i < numfaces; i++) + { + float p0[3], p1[3], p2[3]; + float side1[3]; + float side2[3]; + float side3[3]; + int divs1=0, divs2=0, divs3=0; + + VECCOPY(p0, verts[faces[i].v1].co); + Mat4MulVecfl (ob->obmat, p0); + VECCOPY(p1, verts[faces[i].v2].co); + Mat4MulVecfl (ob->obmat, p1); + VECCOPY(p2, verts[faces[i].v3].co); + Mat4MulVecfl (ob->obmat, p2); + + VECSUB(side1, p1, p0); + VECSUB(side2, p2, p0); + VECSUB(side3, p1, p2); + + if(INPR(side1, side1) > fsTri*fsTri) + { + float tmp = Normalize(side1); + divs1 = (int)(tmp/fsTri); + } + if(INPR(side2, side2) > fsTri*fsTri) + { + float tmp = Normalize(side2); + divs2 = (int)(tmp/fsTri); + + /* + // debug + if(i==0) + printf("b tmp: %f, fsTri: %f, divs2: %d\n", tmp, fsTri, divs2); + */ + } + + (*tridivs)[3 * facecounter + 0] = divs1; + (*tridivs)[3 * facecounter + 1] = divs2; + (*tridivs)[3 * facecounter + 2] = divs3; + + // TODO quad case + if(faces[i].v4) + { + divs1=0, divs2=0, divs3=0; + + facecounter++; + + VECCOPY(p1, verts[faces[i].v3].co); + Mat4MulVecfl (ob->obmat, p1); + VECCOPY(p2, verts[faces[i].v4].co); + Mat4MulVecfl (ob->obmat, p2); + + VECSUB(side1, p1, p0); + VECSUB(side2, p2, p0); + VECSUB(side3, p1, p2); + + if(INPR(side1, side1) > fsTri*fsTri) + { + float tmp = Normalize(side1); + divs1 = (int)(tmp/fsTri); + } + if(INPR(side2, side2) > fsTri*fsTri) + { + float tmp = Normalize(side2); + divs2 = (int)(tmp/fsTri); + } + + (*tridivs)[3 * facecounter + 0] = divs1; + (*tridivs)[3 * facecounter + 1] = divs2; + (*tridivs)[3 * facecounter + 2] = divs3; + } + facecounter++; + } +} + +void smokeModifier_freeDomain(SmokeModifierData *smd) +{ + if(smd->domain) + { + // free visualisation buffers + if(smd->domain->bind) + { + glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + MEM_freeN(smd->domain->bind); + } + smd->domain->max_textures = 0; // unnecessary but let's be sure + + if(smd->domain->tray) + MEM_freeN(smd->domain->tray); + if(smd->domain->tvox) + MEM_freeN(smd->domain->tvox); + if(smd->domain->traybig) + MEM_freeN(smd->domain->traybig); + if(smd->domain->tvoxbig) + MEM_freeN(smd->domain->tvoxbig); + + if(smd->domain->fluid) + { + smoke_free(smd->domain->fluid); + } + MEM_freeN(smd->domain); + smd->domain = NULL; + } +} + +void smokeModifier_freeFlow(SmokeModifierData *smd) +{ + if(smd->flow) + { + MEM_freeN(smd->flow); + smd->flow = NULL; + } +} + +void smokeModifier_freeCollision(SmokeModifierData *smd) +{ + if(smd->coll) + { + if(smd->coll->points) + { + MEM_freeN(smd->coll->points); + smd->coll->points = NULL; + } + + MEM_freeN(smd->coll); + smd->coll = NULL; + } +} + +void smokeModifier_reset(struct SmokeModifierData *smd) +{ + if(smd) + { + if(smd->domain) + { + // free visualisation buffers + if(smd->domain->bind) + { + glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + MEM_freeN(smd->domain->bind); + smd->domain->bind = NULL; + } + smd->domain->max_textures = 0; + smd->domain->viewsettings = 0; // reset view for new frame + + if(smd->domain->tray) + MEM_freeN(smd->domain->tray); + if(smd->domain->tvox) + MEM_freeN(smd->domain->tvox); + if(smd->domain->traybig) + MEM_freeN(smd->domain->traybig); + if(smd->domain->tvoxbig) + MEM_freeN(smd->domain->tvoxbig); + + smd->domain->tvox = NULL; + smd->domain->tray = NULL; + smd->domain->tvoxbig = NULL; + smd->domain->traybig = NULL; + + if(smd->domain->fluid) + { + smoke_free(smd->domain->fluid); + smd->domain->fluid = NULL; + } + } + else if(smd->flow) + { + + } + else if(smd->coll) + { + if(smd->coll->points) + { + MEM_freeN(smd->coll->points); + smd->coll->points = NULL; + } + } + } +} + +void smokeModifier_free (SmokeModifierData *smd) +{ + if(smd) + { + smokeModifier_freeDomain(smd); + smokeModifier_freeFlow(smd); + smokeModifier_freeCollision(smd); + } +} + +void smokeModifier_createType(struct SmokeModifierData *smd) +{ + if(smd) + { + if(smd->type & MOD_SMOKE_TYPE_DOMAIN) + { + if(smd->domain) + smokeModifier_freeDomain(smd); + + smd->domain = MEM_callocN(sizeof(SmokeDomainSettings), "SmokeDomain"); + + smd->domain->smd = smd; + + /* set some standard values */ + smd->domain->fluid = NULL; + smd->domain->eff_group = NULL; + smd->domain->fluid_group = NULL; + smd->domain->coll_group = NULL; + smd->domain->maxres = 48; + smd->domain->amplify = 4; + smd->domain->omega = 0.5; + smd->domain->alpha = -0.001; + smd->domain->beta = 0.1; + smd->domain->flags = 0; + smd->domain->noise = MOD_SMOKE_NOISEWAVE; + smd->domain->visibility = 1; + + // init 3dview buffer + smd->domain->tvox = NULL; + smd->domain->tray = NULL; + smd->domain->tvoxbig = NULL; + smd->domain->traybig = NULL; + smd->domain->viewsettings = 0; + smd->domain->bind = NULL; + smd->domain->max_textures = 0; + } + else if(smd->type & MOD_SMOKE_TYPE_FLOW) + { + if(smd->flow) + smokeModifier_freeFlow(smd); + + smd->flow = MEM_callocN(sizeof(SmokeFlowSettings), "SmokeFlow"); + + smd->flow->smd = smd; + + /* set some standard values */ + smd->flow->density = 1.0; + smd->flow->temp = 1.0; + + smd->flow->psys = NULL; + + } + else if(smd->type & MOD_SMOKE_TYPE_COLL) + { + if(smd->coll) + smokeModifier_freeCollision(smd); + + smd->coll = MEM_callocN(sizeof(SmokeCollSettings), "SmokeColl"); + + smd->coll->smd = smd; + smd->coll->points = NULL; + smd->coll->numpoints = 0; + } + } +} + +// forward declaration +void smoke_calc_transparency(struct SmokeModifierData *smd, float *light, int big); + +void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm) +{ + int new = 0; + + if(scene->r.cfra >= smd->time) + smokeModifier_init(smd, ob, scene, dm); + + if((smd->type & MOD_SMOKE_TYPE_FLOW)) + { + if(scene->r.cfra > smd->time) + { + // XXX TODO + } + else if(scene->r.cfra < smd->time) + { + smd->time = scene->r.cfra; + smokeModifier_reset(smd); + } + } + else if((smd->type & MOD_SMOKE_TYPE_DOMAIN)) + { + SmokeDomainSettings *sds = smd->domain; + + if(scene->r.cfra > smd->time) + { + GroupObject *go = NULL; + Base *base = NULL; + int cnt_domain = 0; + + tstart(); + + sds->viewsettings = 0; // reset view for new frame + + // check for 2nd domain, if not there -> no groups are necessary + for(base = scene->base.first; base; base= base->next) + { + Object *ob1= base->object; + + if(ob1 && ob1 != ob) + { + ModifierData *tmd = modifiers_findByType(ob1, eModifierType_Smoke); + + if(tmd && tmd->mode & (eModifierMode_Realtime | eModifierMode_Render)) + { + SmokeModifierData *tsmd = (SmokeModifierData *)tmd; + + if((tsmd->type & MOD_SMOKE_TYPE_DOMAIN)) + { + cnt_domain++; + } + } + } + } + + // do flows and fluids + if(sds->fluid_group || !cnt_domain) + { + Object *otherobj = NULL; + ModifierData *md = NULL; + + if(cnt_domain && !sds->fluid_group) // we use groups since we have 2 domains + go = sds->fluid_group->gobject.first; + else + base = scene->base.first; + + while(base || go) + { + otherobj = NULL; + + if(cnt_domain && !sds->fluid_group) + { + if(go->ob) + otherobj = go->ob; + } + else + otherobj = base->object; + + if(!otherobj) + { + if(cnt_domain && !sds->fluid_group) + go = go->next; + else + base= base->next; + + continue; + } + + md = modifiers_findByType(otherobj, eModifierType_Smoke); + + // check for active smoke modifier + if(md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) + { + SmokeModifierData *smd2 = (SmokeModifierData *)md; + + // check for initialized smoke object + if((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) + { + // we got nice flow object + SmokeFlowSettings *sfs = smd2->flow; + + if(sfs->psys && sfs->psys->part && sfs->psys->part->type==PART_EMITTER) // is particle system selected + { + ParticleSystem *psys = sfs->psys; + ParticleSettings *part=psys->part; + ParticleData *pa = NULL; + int p = 0; + float *density = smoke_get_density(sds->fluid); + float *bigdensity = smoke_get_bigdensity(sds->fluid); + float *heat = smoke_get_heat(sds->fluid); + float *velocity_x = smoke_get_velocity_x(sds->fluid); + float *velocity_y = smoke_get_velocity_y(sds->fluid); + float *velocity_z = smoke_get_velocity_z(sds->fluid); + int bigres[3]; + + smoke_get_bigres(smd->domain->fluid, bigres); + + // mostly copied from particle code + for(p=0, pa=psys->particles; ptotpart; p++, pa++) + { + int cell[3]; + int valid = 1; + size_t i = 0; + size_t index = 0; + + if(pa->alive == PARS_KILLED) continue; + else if(pa->alive == PARS_UNBORN && (part->flag & PART_UNBORN)==0) continue; + else if(pa->alive == PARS_DEAD && (part->flag & PART_DIED)==0) continue; + else if(pa->flag & (PARS_UNEXIST+PARS_NO_DISP)) continue; + + // VECCOPY(pos, pa->state.co); + // Mat4MulVecfl (ob->imat, pos); + + // 1. get corresponding cell + get_cell(smd, pa->state.co, cell, 0); + + // check if cell is valid (in the domain boundary) + for(i = 0; i < 3; i++) + if((cell[i] > sds->res[i] - 1) || (cell[i] < 0)) + valid = 0; + + if(!valid) + continue; + + // 2. set cell values (heat, density and velocity) + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2], sds->res[2]); + + heat[index] = sfs->temp; + density[index] = sfs->density; + velocity_x[index] = pa->state.vel[0]; + velocity_y[index] = pa->state.vel[1]; + velocity_z[index] = pa->state.vel[2]; + + // we need different handling for the high-res feature + if(bigdensity) + { + // init all surrounding cells according to amplification, too + int i, j, k; + for(i = 0; i < smd->domain->amplify; i++) + for(j = 0; j < smd->domain->amplify; j++) + for(k = 0; k < smd->domain->amplify; k++) + { + index = smoke_get_index(smd->domain->amplify * cell[0] + i, bigres[0], smd->domain->amplify * cell[1] + j, bigres[1], smd->domain->amplify * cell[2] + k, bigres[2]); + bigdensity[index] = sfs->density; + } + } + } + } + } + } + + if(cnt_domain && !sds->fluid_group) + go = go->next; + else + base= base->next; + } + } + + // do effectors + /* + if(sds->eff_group) + { + for(go = sds->eff_group->gobject.first; go; go = go->next) + { + if(go->ob) + { + if(ob->pd) + { + + } + } + } + } + */ + + // do collisions + if(sds->coll_group || !cnt_domain) + { + Object *otherobj = NULL; + ModifierData *md = NULL; + + if(cnt_domain && !sds->coll_group) // we use groups since we have 2 domains + go = sds->coll_group->gobject.first; + else + base = scene->base.first; + + while(base || go) + { + otherobj = NULL; + + if(cnt_domain && !sds->coll_group) + { + if(go->ob) + otherobj = go->ob; + } + else + otherobj = base->object; + + if(!otherobj) + { + if(cnt_domain && !sds->coll_group) + go = go->next; + else + base= base->next; + + continue; + } + + md = modifiers_findByType(otherobj, eModifierType_Smoke); + + // check for active smoke modifier + if(md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) + { + SmokeModifierData *smd2 = (SmokeModifierData *)md; + + if((smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll) + { + // we got nice collision object + SmokeCollSettings *scs = smd2->coll; + int cell[3]; + int valid = 1; + size_t index = 0; + size_t i, j; + unsigned char *obstacles = smoke_get_obstacle(smd->domain->fluid); + + for(i = 0; i < scs->numpoints; i++) + { + // 1. get corresponding cell + get_cell(smd, &scs->points[3 * i], cell, 0); + + // check if cell is valid (in the domain boundary) + for(j = 0; j < 3; j++) + if((cell[j] > sds->res[j] - 1) || (cell[j] < 0)) + valid = 0; + + if(!valid) + continue; + + // 2. set cell values (heat, density and velocity) + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2], sds->res[2]); + + obstacles[index] = 1; + + /* + const LbmFloat maxVelVal = 0.1666; + const LbmFloat maxusqr = maxVelVal*maxVelVal*3. *1.5; + + LbmVec objvel = vec2L((mMOIVertices[n]-mMOIVerticesOld[n]) /dvec); { + const LbmFloat usqr = (objvel[0]*objvel[0]+objvel[1]*objvel[1]+objvel[2]*objvel[2])*1.5; + USQRMAXCHECK(usqr, objvel[0],objvel[1],objvel[2], mMaxVlen, mMxvx,mMxvy,mMxvz); + if(usqr>maxusqr) { + // cutoff at maxVelVal + for(int jj=0; jj<3; jj++) { + if(objvel[jj]>0.) objvel[jj] = maxVelVal; + if(objvel[jj]<0.) objvel[jj] = -maxVelVal; + } + } } + + const LbmFloat dp=dot(objvel, vec2L((*pNormals)[n]) ); + const LbmVec oldov=objvel; // debug + objvel = vec2L((*pNormals)[n]) *dp; + */ + } + } + } + + if(cnt_domain && !sds->coll_group) + go = go->next; + else + base= base->next; + } + } + + // set new time + smd->time = scene->r.cfra; + + // simulate the actual smoke (c++ code in intern/smoke) + smoke_step(sds->fluid); + + tend(); + printf ( "Frame: %d, Time: %f\n", (int)smd->time, ( float ) tval() ); + } + else if(scene->r.cfra < smd->time) + { + // we got back in time, reset smoke in this case (TODO: use cache later) + smd->time = scene->r.cfra; + smokeModifier_reset(smd); + } + } +} + +// update necessary information for 3dview +void smoke_prepare_View(SmokeModifierData *smd, float *light) +{ + float *density = NULL; + size_t i = 0; + int x, y, z; + + if(!smd->domain->tray) + { + // TRay is for self shadowing + smd->domain->tray = MEM_callocN(sizeof(float)*smd->domain->res[0]*smd->domain->res[1]*smd->domain->res[2], "Smoke_tRay"); + } + if(!smd->domain->tvox) + { + // TVox is for tranaparency + smd->domain->tvox = MEM_callocN(sizeof(float)*smd->domain->res[0]*smd->domain->res[1]*smd->domain->res[2], "Smoke_tVox"); + } + + // update 3dview + density = smoke_get_density(smd->domain->fluid); + for(x = 0; x < smd->domain->res[0]; x++) + for(y = 0; y < smd->domain->res[1]; y++) + for(z = 0; z < smd->domain->res[2]; z++) + { + size_t index; + + index = smoke_get_index(x, smd->domain->res[0], y, smd->domain->res[1], z, smd->domain->res[2]); + // Transparency computation + // formula taken from "Visual Simulation of Smoke" / Fedkiw et al. pg. 4 + // T_vox = exp(-C_ext * h) + // C_ext/sigma_t = density * C_ext + smoke_set_tvox(smd, index, exp(-density[index] * smd->domain->dx)); + } + smoke_calc_transparency(smd, light, 0); +} + +// update necessary information for 3dview ("high res" option) +void smoke_prepare_bigView(SmokeModifierData *smd, float *light) +{ + float *density = NULL; + size_t i = 0; + int bigres[3]; + + smoke_get_bigres(smd->domain->fluid, bigres); + + if(!smd->domain->traybig) + { + // TRay is for self shadowing + smd->domain->traybig = MEM_callocN(sizeof(float)*bigres[0]*bigres[1]*bigres[2], "Smoke_tRayBig"); + } + if(!smd->domain->tvoxbig) + { + // TVox is for tranaparency + smd->domain->tvoxbig = MEM_callocN(sizeof(float)*bigres[0]*bigres[1]*bigres[2], "Smoke_tVoxBig"); + } + + density = smoke_get_bigdensity(smd->domain->fluid); + for (i = 0; i < bigres[0] * bigres[1] * bigres[2]; i++) + { + // Transparency computation + // formula taken from "Visual Simulation of Smoke" / Fedkiw et al. pg. 4 + // T_vox = exp(-C_ext * h) + // C_ext/sigma_t = density * C_ext + smoke_set_bigtvox(smd, i, exp(-density[i] * smd->domain->dx / smd->domain->amplify) ); + } + smoke_calc_transparency(smd, light, 1); +} + + +float smoke_get_tvox(SmokeModifierData *smd, size_t index) +{ + return smd->domain->tvox[index]; +} + +void smoke_set_tvox(SmokeModifierData *smd, size_t index, float tvox) +{ + smd->domain->tvox[index] = tvox; +} + +float smoke_get_tray(SmokeModifierData *smd, size_t index) +{ + return smd->domain->tray[index]; +} + +void smoke_set_tray(SmokeModifierData *smd, size_t index, float transparency) +{ + smd->domain->tray[index] = transparency; +} + +float smoke_get_bigtvox(SmokeModifierData *smd, size_t index) +{ + return smd->domain->tvoxbig[index]; +} + +void smoke_set_bigtvox(SmokeModifierData *smd, size_t index, float tvox) +{ + smd->domain->tvoxbig[index] = tvox; +} + +float smoke_get_bigtray(SmokeModifierData *smd, size_t index) +{ + return smd->domain->traybig[index]; +} + +void smoke_set_bigtray(SmokeModifierData *smd, size_t index, float transparency) +{ + smd->domain->traybig[index] = transparency; +} + +long long smoke_get_mem_req(int xres, int yres, int zres, int amplify) +{ + int totalCells = xres * yres * zres; + int amplifiedCells = totalCells * amplify * amplify * amplify; + + // print out memory requirements + long long int coarseSize = sizeof(float) * totalCells * 22 + + sizeof(unsigned char) * totalCells; + + long long int fineSize = sizeof(float) * amplifiedCells * 7 + // big grids + sizeof(float) * totalCells * 8 + // small grids + sizeof(float) * 128 * 128 * 128; // noise tile + + long long int totalMB = (coarseSize + fineSize) / (1024 * 1024); + + return totalMB; +} + + +static void calc_voxel_transp(SmokeModifierData *smd, int *pixel, float *tRay) +{ + // printf("Pixel(%d, %d, %d)\n", pixel[0], pixel[1], pixel[2]); + const size_t index = smoke_get_index(pixel[0], smd->domain->res[0], pixel[1], smd->domain->res[1], pixel[2], smd->domain->res[2]); + + // T_ray *= T_vox + *tRay *= smoke_get_tvox(smd, index); +} + +static void calc_voxel_transp_big(SmokeModifierData *smd, int *pixel, float *tRay) +{ + int bigres[3]; + size_t index; + + smoke_get_bigres(smd->domain->fluid, bigres); + index = smoke_get_index(pixel[0], bigres[0], pixel[1], bigres[1], pixel[2], bigres[2]); + + /* + if(index > bigres[0]*bigres[1]*bigres[2]) + printf("pixel[0]: %d, [1]: %d, [2]: %d\n", pixel[0], pixel[1], pixel[2]); + */ + + // T_ray *= T_vox + *tRay *= smoke_get_bigtvox(smd, index); +} + +static void bresenham_linie_3D(SmokeModifierData *smd, int x1, int y1, int z1, int x2, int y2, int z2, float *tRay, int big) +{ + int dx, dy, dz, i, l, m, n, x_inc, y_inc, z_inc, err_1, err_2, dx2, dy2, dz2; + int pixel[3]; + + pixel[0] = x1; + pixel[1] = y1; + pixel[2] = z1; + + dx = x2 - x1; + dy = y2 - y1; + dz = z2 - z1; + + x_inc = (dx < 0) ? -1 : 1; + l = abs(dx); + y_inc = (dy < 0) ? -1 : 1; + m = abs(dy); + z_inc = (dz < 0) ? -1 : 1; + n = abs(dz); + dx2 = l << 1; + dy2 = m << 1; + dz2 = n << 1; + + if ((l >= m) && (l >= n)) { + err_1 = dy2 - l; + err_2 = dz2 - l; + for (i = 0; i < l; i++) { + if(!big) + calc_voxel_transp(smd, pixel, tRay); + else + calc_voxel_transp_big(smd, pixel, tRay); + if(tRay < 0) + return; + if (err_1 > 0) { + pixel[1] += y_inc; + err_1 -= dx2; + } + if (err_2 > 0) { + pixel[2] += z_inc; + err_2 -= dx2; + } + err_1 += dy2; + err_2 += dz2; + pixel[0] += x_inc; + } + } else if ((m >= l) && (m >= n)) { + err_1 = dx2 - m; + err_2 = dz2 - m; + for (i = 0; i < m; i++) { + if(!big) + calc_voxel_transp(smd, pixel, tRay); + else + calc_voxel_transp_big(smd, pixel, tRay); + if(tRay < 0) + return; + if (err_1 > 0) { + pixel[0] += x_inc; + err_1 -= dy2; + } + if (err_2 > 0) { + pixel[2] += z_inc; + err_2 -= dy2; + } + err_1 += dx2; + err_2 += dz2; + pixel[1] += y_inc; + } + } else { + err_1 = dy2 - n; + err_2 = dx2 - n; + for (i = 0; i < n; i++) { + if(!big) + calc_voxel_transp(smd, pixel, tRay); + else + calc_voxel_transp_big(smd, pixel, tRay); + if(tRay < 0) + return; + if (err_1 > 0) { + pixel[1] += y_inc; + err_1 -= dz2; + } + if (err_2 > 0) { + pixel[0] += x_inc; + err_2 -= dz2; + } + err_1 += dy2; + err_2 += dx2; + pixel[2] += z_inc; + } + } + if(!big) + calc_voxel_transp(smd, pixel, tRay); + else + calc_voxel_transp_big(smd, pixel, tRay); +} + +static void get_cell(struct SmokeModifierData *smd, float *pos, int *cell, int correct) +{ + float tmp[3]; + + VECSUB(tmp, pos, smd->domain->p0); + VecMulf(tmp, 1.0 / smd->domain->dx); + + if(correct) + { + cell[0] = MIN2(smd->domain->res[0] - 1, MAX2(0, (int)(tmp[0] + 0.5))); + cell[1] = MIN2(smd->domain->res[1] - 1, MAX2(0, (int)(tmp[1] + 0.5))); + cell[2] = MIN2(smd->domain->res[2] - 1, MAX2(0, (int)(tmp[2] + 0.5))); + } + else + { + cell[0] = (int)(tmp[0] + 0.5); + cell[1] = (int)(tmp[1] + 0.5); + cell[2] = (int)(tmp[2] + 0.5); + } +} +static void get_bigcell(struct SmokeModifierData *smd, float *pos, int *cell, int correct) +{ + float tmp[3]; + int res[3]; + smoke_get_bigres(smd->domain->fluid, res); + + VECSUB(tmp, pos, smd->domain->p0); + + VecMulf(tmp, smd->domain->amplify / smd->domain->dx ); + + if(correct) + { + cell[0] = MIN2(res[0] - 1, MAX2(0, (int)(tmp[0] + 0.5))); + cell[1] = MIN2(res[1] - 1, MAX2(0, (int)(tmp[1] + 0.5))); + cell[2] = MIN2(res[2] - 1, MAX2(0, (int)(tmp[2] + 0.5))); + } + else + { + cell[0] = (int)(tmp[0] + 0.5); + cell[1] = (int)(tmp[1] + 0.5); + cell[2] = (int)(tmp[2] + 0.5); + } +} + + +void smoke_calc_transparency(struct SmokeModifierData *smd, float *light, int big) +{ + int x, y, z; + float bv[6]; + int res[3]; + float bigfactor = 1.0; + + // x + bv[0] = smd->domain->p0[0]; + bv[1] = smd->domain->p1[0]; + // y + bv[2] = smd->domain->p0[1]; + bv[3] = smd->domain->p1[1]; + // z + bv[4] = smd->domain->p0[2]; + bv[5] = smd->domain->p1[2]; +/* + printf("bv[0]: %f, [1]: %f, [2]: %f, [3]: %f, [4]: %f, [5]: %f\n", bv[0], bv[1], bv[2], bv[3], bv[4], bv[5]); + + printf("p0[0]: %f, p0[1]: %f, p0[2]: %f\n", smd->domain->p0[0], smd->domain->p0[1], smd->domain->p0[2]); + printf("p1[0]: %f, p1[1]: %f, p1[2]: %f\n", smd->domain->p1[0], smd->domain->p1[1], smd->domain->p1[2]); + printf("dx: %f, amp: %d\n", smd->domain->dx, smd->domain->amplify); +*/ + if(!big) + { + res[0] = smd->domain->res[0]; + res[1] = smd->domain->res[1]; + res[2] = smd->domain->res[2]; + } + else + { + smoke_get_bigres(smd->domain->fluid, res); + bigfactor = 1.0 / smd->domain->amplify; + } + +#pragma omp parallel for schedule(static) private(y, z) shared(big, smd, light, res, bigfactor) + for(x = 0; x < res[0]; x++) + for(y = 0; y < res[1]; y++) + for(z = 0; z < res[2]; z++) + { + float voxelCenter[3]; + size_t index; + float pos[3]; + int cell[3]; + float tRay = 1.0; + + index = smoke_get_index(x, res[0], y, res[1], z, res[2]); + + // voxelCenter = m_voxelarray[i].GetCenter(); + voxelCenter[0] = smd->domain->p0[0] + smd->domain->dx * bigfactor * x + smd->domain->dx * bigfactor * 0.5; + voxelCenter[1] = smd->domain->p0[1] + smd->domain->dx * bigfactor * y + smd->domain->dx * bigfactor * 0.5; + voxelCenter[2] = smd->domain->p0[2] + smd->domain->dx * bigfactor * z + smd->domain->dx * bigfactor * 0.5; + + // printf("vc[0]: %f, vc[1]: %f, vc[2]: %f\n", voxelCenter[0], voxelCenter[1], voxelCenter[2]); + // printf("light[0]: %f, light[1]: %f, light[2]: %f\n", light[0], light[1], light[2]); + + // get starting position (in voxel coords) + if(BLI_bvhtree_bb_raycast(bv, light, voxelCenter, pos) > FLT_EPSILON) + { + // we're ouside + // printf("out: pos[0]: %f, pos[1]: %f, pos[2]: %f\n", pos[0], pos[1], pos[2]); + if(!big) + get_cell(smd, pos, cell, 1); + else + get_bigcell(smd, pos, cell, 1); + } + else + { + // printf("in: pos[0]: %f, pos[1]: %f, pos[2]: %f\n", light[0], light[1], light[2]); + // we're inside + if(!big) + get_cell(smd, light, cell, 1); + else + get_bigcell(smd, light, cell, 1); + } + + // printf("cell - [0]: %d, [1]: %d, [2]: %d\n", cell[0], cell[1], cell[2]); + bresenham_linie_3D(smd, cell[0], cell[1], cell[2], x, y, z, &tRay, big); + + if(!big) + smoke_set_tray(smd, index, tRay); + else + smoke_set_bigtray(smd, index, tRay); + } +} + diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h index e3591a84e98..50462d531ef 100644 --- a/source/blender/blenlib/BLI_kdopbvh.h +++ b/source/blender/blenlib/BLI_kdopbvh.h @@ -93,5 +93,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float *co, BVHTreeNearest *nea int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata); +float BLI_bvhtree_bb_raycast(float *bv, float *light_start, float *light_end, float *pos); + #endif // BLI_KDOPBVH_H diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index 0f8194362c9..84de9f9d862 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -72,10 +72,10 @@ struct BVHTree char start_axis, stop_axis; // KDOP_AXES array indices according to axis }; -typedef struct BVHOverlapData -{ - BVHTree *tree1, *tree2; - BVHTreeOverlap *overlap; +typedef struct BVHOverlapData +{ + BVHTree *tree1, *tree2; + BVHTreeOverlap *overlap; int i, max_overlap; /* i is number of overlaps */ int start_axis, stop_axis; } BVHOverlapData; @@ -109,7 +109,7 @@ typedef struct BVHRayCastData //////////////////////////////////////////////////////////////////////// // Bounding Volume Hierarchy Definition -// +// // Notes: From OBB until 26-DOP --> all bounding volumes possible, just choose type below // Notes: You have to choose the type at compile time ITM // Notes: You can choose the tree type --> binary, quad, octree, choose below @@ -188,10 +188,10 @@ int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, int *max_ ////////////////////////////////////////////////////////////////////////////////////////////////////// -// Introsort +// Introsort // with permission deriven from the following Java code: // http://ralphunden.net/content/tutorials/a-guide-to-introsort/ -// and he derived it from the SUN STL +// and he derived it from the SUN STL ////////////////////////////////////////////////////////////////////////////////////////////////////// static int size_threshold = 16; /* @@ -362,7 +362,7 @@ static void create_kdop_hull(BVHTree *tree, BVHNode *node, float *co, int numpoi float newminmax; float *bv = node->bv; int i, k; - + // don't init boudings for the moving case if(!moving) { @@ -372,7 +372,7 @@ static void create_kdop_hull(BVHTree *tree, BVHNode *node, float *co, int numpoi bv[2*i + 1] = -FLT_MAX; } } - + for(k = 0; k < numpoints; k++) { // for all Axes. @@ -394,7 +394,7 @@ static void refit_kdop_hull(BVHTree *tree, BVHNode *node, int start, int end) int i, j; float *bv = node->bv; - + for (i = tree->start_axis; i < tree->stop_axis; i++) { bv[2*i] = FLT_MAX; @@ -406,10 +406,10 @@ static void refit_kdop_hull(BVHTree *tree, BVHNode *node, int start, int end) // for all Axes. for (i = tree->start_axis; i < tree->stop_axis; i++) { - newmin = tree->nodes[j]->bv[(2 * i)]; + newmin = tree->nodes[j]->bv[(2 * i)]; if ((newmin < bv[(2 * i)])) bv[(2 * i)] = newmin; - + newmax = tree->nodes[j]->bv[(2 * i) + 1]; if ((newmax > bv[(2 * i) + 1])) bv[(2 * i) + 1] = newmax; @@ -427,14 +427,14 @@ static char get_largest_axis(float *bv) middle_point[0] = (bv[1]) - (bv[0]); // x axis middle_point[1] = (bv[3]) - (bv[2]); // y axis middle_point[2] = (bv[5]) - (bv[4]); // z axis - if (middle_point[0] > middle_point[1]) + if (middle_point[0] > middle_point[1]) { if (middle_point[0] > middle_point[2]) return 1; // max x axis else return 5; // max z axis } - else + else { if (middle_point[1] > middle_point[2]) return 3; // max y axis @@ -448,24 +448,24 @@ static char get_largest_axis(float *bv) static void node_join(BVHTree *tree, BVHNode *node) { int i, j; - + for (i = tree->start_axis; i < tree->stop_axis; i++) { node->bv[2*i] = FLT_MAX; node->bv[2*i + 1] = -FLT_MAX; } - + for (i = 0; i < tree->tree_type; i++) { - if (node->children[i]) + if (node->children[i]) { for (j = tree->start_axis; j < tree->stop_axis; j++) { - // update minimum - if (node->children[i]->bv[(2 * j)] < node->bv[(2 * j)]) + // update minimum + if (node->children[i]->bv[(2 * j)] < node->bv[(2 * j)]) node->bv[(2 * j)] = node->children[i]->bv[(2 * j)]; - - // update maximum + + // update maximum if (node->children[i]->bv[(2 * j) + 1] > node->bv[(2 * j) + 1]) node->bv[(2 * j) + 1] = node->children[i]->bv[(2 * j) + 1]; } @@ -518,7 +518,7 @@ static void bvhtree_info(BVHTree *tree) static void verify_tree(BVHTree *tree) { int i, j, check = 0; - + // check the pointer list for(i = 0; i < tree->totleaf; i++) { @@ -538,7 +538,7 @@ static void verify_tree(BVHTree *tree) check = 0; } } - + // check the leaf list for(i = 0; i < tree->totleaf; i++) { @@ -558,7 +558,7 @@ static void verify_tree(BVHTree *tree) check = 0; } } - + printf("branches: %d, leafs: %d, total: %d\n", tree->totbranch, tree->totleaf, tree->totbranch + tree->totleaf); } #endif @@ -703,7 +703,7 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array, BVHBuildHelper data; int depth; - + // set parent from root node to NULL BVHNode *tmp = branches_array+0; tmp->parent = NULL; @@ -722,7 +722,7 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array, } branches_array--; //Implicit trees use 1-based indexs - + build_implicit_tree_helper(tree, &data); //Loop tree levels (log N) loops @@ -806,11 +806,11 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) { BVHTree *tree; int numnodes, i; - + // theres not support for trees below binary-trees :P if(tree_type < 2) return NULL; - + if(tree_type > MAX_TREETYPE) return NULL; @@ -820,13 +820,13 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) //so that tangent rays can still hit a bounding volume.. //this bug would show up when casting a ray aligned with a kdop-axis and with an edge of 2 faces epsilon = MAX2(FLT_EPSILON, epsilon); - + if(tree) { tree->epsilon = epsilon; - tree->tree_type = tree_type; + tree->tree_type = tree_type; tree->axis = axis; - + if(axis == 26) { tree->start_axis = 0; @@ -863,13 +863,13 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) numnodes = maxsize + implicit_needed_branches(tree_type, maxsize) + tree_type; tree->nodes = (BVHNode **)MEM_callocN(sizeof(BVHNode *)*numnodes, "BVHNodes"); - + if(!tree->nodes) { MEM_freeN(tree); return NULL; } - + tree->nodebv = (float*)MEM_callocN(sizeof(float)* axis * numnodes, "BVHNodeBV"); if(!tree->nodebv) { @@ -886,7 +886,7 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) } tree->nodearray = (BVHNode *)MEM_callocN(sizeof(BVHNode)* numnodes, "BVHNodeArray"); - + if(!tree->nodearray) { MEM_freeN(tree->nodechild); @@ -902,14 +902,14 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) tree->nodearray[i].bv = tree->nodebv + i * axis; tree->nodearray[i].children = tree->nodechild + i * tree_type; } - + } return tree; } void BLI_bvhtree_free(BVHTree *tree) -{ +{ if(tree) { MEM_freeN(tree->nodes); @@ -946,27 +946,27 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, float *co, int numpoints) { int i; BVHNode *node = NULL; - + // insert should only possible as long as tree->totbranch is 0 if(tree->totbranch > 0) return 0; - + if(tree->totleaf+1 >= MEM_allocN_len(tree->nodes)/sizeof(*(tree->nodes))) return 0; - + // TODO check if have enough nodes in array - + node = tree->nodes[tree->totleaf] = &(tree->nodearray[tree->totleaf]); tree->totleaf++; - + create_kdop_hull(tree, node, co, numpoints, 0); node->index= index; - + // inflate the bv with some epsilon for (i = tree->start_axis; i < tree->stop_axis; i++) { - node->bv[(2 * i)] -= tree->epsilon; // minimum - node->bv[(2 * i) + 1] += tree->epsilon; // maximum + node->bv[(2 * i)] -= tree->epsilon; // minimum + node->bv[(2 * i) + 1] += tree->epsilon; // maximum } return 1; @@ -978,23 +978,23 @@ int BLI_bvhtree_update_node(BVHTree *tree, int index, float *co, float *co_movin { int i; BVHNode *node= NULL; - + // check if index exists if(index > tree->totleaf) return 0; - + node = tree->nodearray + index; - + create_kdop_hull(tree, node, co, numpoints, 0); - + if(co_moving) create_kdop_hull(tree, node, co_moving, numpoints, 1); - + // inflate the bv with some epsilon for (i = tree->start_axis; i < tree->stop_axis; i++) { - node->bv[(2 * i)] -= tree->epsilon; // minimum - node->bv[(2 * i) + 1] += tree->epsilon; // maximum + node->bv[(2 * i)] -= tree->epsilon; // minimum + node->bv[(2 * i) + 1] += tree->epsilon; // maximum } return 1; @@ -1030,24 +1030,24 @@ static int tree_overlap(BVHNode *node1, BVHNode *node2, int start_axis, int stop float *bv2 = node2->bv; float *bv1_end = bv1 + (stop_axis<<1); - + bv1 += start_axis<<1; bv2 += start_axis<<1; - + // test all axis if min + max overlap for (; bv1 != bv1_end; bv1+=2, bv2+=2) { - if ((*(bv1) > *(bv2 + 1)) || (*(bv2) > *(bv1 + 1))) + if ((*(bv1) > *(bv2 + 1)) || (*(bv2) > *(bv1 + 1))) return 0; } - + return 1; } static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) { int j; - + if(tree_overlap(node1, node2, data->start_axis, data->stop_axis)) { // check if node1 is a leaf @@ -1056,17 +1056,17 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) // check if node2 is a leaf if(!node2->totnode) { - + if(node1 == node2) { return; } - + if(data->i >= data->max_overlap) - { + { // try to make alloc'ed memory bigger data->overlap = realloc(data->overlap, sizeof(BVHTreeOverlap)*data->max_overlap*2); - + if(!data->overlap) { printf("Out of Memory in traverse\n"); @@ -1074,7 +1074,7 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) } data->max_overlap *= 2; } - + // both leafs, insert overlap! data->overlap[data->i].indexA = node1->index; data->overlap[data->i].indexB = node2->index; @@ -1092,7 +1092,7 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) } else { - + for(j = 0; j < data->tree2->tree_type; j++) { if(node1->children[j]) @@ -1108,21 +1108,21 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, int *result) int j, total = 0; BVHTreeOverlap *overlap = NULL, *to = NULL; BVHOverlapData **data; - + // check for compatibility of both trees (can't compare 14-DOP with 18-DOP) if((tree1->axis != tree2->axis) && (tree1->axis == 14 || tree2->axis == 14) && (tree1->axis == 18 || tree2->axis == 18)) return 0; - + // fast check root nodes for collision before doing big splitting + traversal if(!tree_overlap(tree1->nodes[tree1->totleaf], tree2->nodes[tree2->totleaf], MIN2(tree1->start_axis, tree2->start_axis), MIN2(tree1->stop_axis, tree2->stop_axis))) return 0; data = MEM_callocN(sizeof(BVHOverlapData *)* tree1->tree_type, "BVHOverlapData_star"); - + for(j = 0; j < tree1->tree_type; j++) { data[j] = (BVHOverlapData *)MEM_callocN(sizeof(BVHOverlapData), "BVHOverlapData"); - + // init BVHOverlapData data[j]->overlap = (BVHTreeOverlap *)malloc(sizeof(BVHTreeOverlap)*MAX2(tree1->totleaf, tree2->totleaf)); data[j]->tree1 = tree1; @@ -1138,25 +1138,25 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, int *result) { traverse(data[j], tree1->nodes[tree1->totleaf]->children[j], tree2->nodes[tree2->totleaf]); } - + for(j = 0; j < tree1->tree_type; j++) total += data[j]->i; - + to = overlap = (BVHTreeOverlap *)MEM_callocN(sizeof(BVHTreeOverlap)*total, "BVHTreeOverlap"); - + for(j = 0; j < tree1->tree_type; j++) { memcpy(to, data[j]->overlap, data[j]->i*sizeof(BVHTreeOverlap)); to+=data[j]->i; } - + for(j = 0; j < tree1->tree_type; j++) { free(data[j]->overlap); MEM_freeN(data[j]); } MEM_freeN(data); - + (*result) = total; return overlap; } @@ -1339,7 +1339,7 @@ static void bfs_find_nearest(BVHNearestData *data, BVHNode *node) push_heaps++; } } - + if(heap_size == 0) break; current = heap[0]; @@ -1405,10 +1405,9 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float *co, BVHTreeNearest *nea */ //Determines the distance that the ray must travel to hit the bounding volume of the given node -static float ray_nearest_hit(BVHRayCastData *data, BVHNode *node) +static float ray_nearest_hit(BVHRayCastData *data, float *bv) { int i; - const float *bv = node->bv; float low = 0, upper = data->hit.dist; @@ -1436,7 +1435,7 @@ static float ray_nearest_hit(BVHRayCastData *data, BVHNode *node) if(lu > low) low = lu; if(ll < upper) upper = ll; } - + if(low > upper) return FLT_MAX; } } @@ -1449,7 +1448,7 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node) //ray-bv is really fast.. and simple tests revealed its worth to test it //before calling the ray-primitive functions - float dist = ray_nearest_hit(data, node); + float dist = ray_nearest_hit(data, node->bv); if(dist >= data->hit.dist) return; if(node->totnode == 0) @@ -1527,3 +1526,35 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float return data.hit.index; } +float BLI_bvhtree_bb_raycast(float *bv, float *light_start, float *light_end, float *pos) +{ + BVHRayCastData data; + float dist = 0.0; + int i; + + data.hit.dist = FLT_MAX; + + // get light direction + data.ray.direction[0] = light_end[0] - light_start[0]; + data.ray.direction[1] = light_end[1] - light_start[1]; + data.ray.direction[2] = light_end[2] - light_start[2]; + + data.ray.radius = 0.0; + + data.ray.origin[0] = light_start[0]; + data.ray.origin[1] = light_start[1]; + data.ray.origin[2] = light_start[2]; + + Normalize(data.ray.direction); + VECCOPY(data.ray_dot_axis, data.ray.direction); + + dist = ray_nearest_hit(&data, bv); + + if(dist > 0.0) + { + VECADDFAC(pos, light_start, data.ray.direction, dist); + } + return dist; + +} + diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 3029e482312..8a376a0a170 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -94,6 +94,7 @@ #include "DNA_sdna_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" +#include "DNA_smoke_types.h" #include "DNA_sound_types.h" #include "DNA_space_types.h" #include "DNA_texture_types.h" @@ -3539,6 +3540,17 @@ static void lib_link_object(FileData *fd, Main *main) if(fluidmd && fluidmd->fss) fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, fluidmd->fss->ipo); } + + { + SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke); + + if(smd && smd->type == MOD_SMOKE_TYPE_DOMAIN && smd->domain) + { + smd->domain->coll_group = newlibadr_us(fd, ob->id.lib, smd->domain->coll_group); + smd->domain->eff_group = newlibadr_us(fd, ob->id.lib, smd->domain->eff_group); + smd->domain->fluid_group = newlibadr_us(fd, ob->id.lib, smd->domain->fluid_group); + } + } /* texture field */ if(ob->pd) @@ -3630,6 +3642,44 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) fluidmd->fss= newdataadr(fd, fluidmd->fss); fluidmd->fss->meshSurfNormals = 0; } + else if (md->type==eModifierType_Smoke) { + SmokeModifierData *smd = (SmokeModifierData*) md; + + if(smd->type==MOD_SMOKE_TYPE_DOMAIN) + { + smd->flow = NULL; + smd->coll = NULL; + if(smd->domain) + smd->domain = newdataadr(fd, smd->domain); + + smd->domain->fluid = NULL; + smd->domain->tvox = NULL; + smd->domain->tray = NULL; + smd->domain->tvoxbig = NULL; + smd->domain->traybig = NULL; + smd->domain->bind = NULL; + smd->domain->max_textures = 0; + smd->domain->viewsettings = 0; // reset view for new frame + } + else if(smd->type==MOD_SMOKE_TYPE_FLOW) + { + smd->domain = NULL; + smd->coll = NULL; + smd->flow = newdataadr(fd, smd->flow); + smd->flow->psys = newdataadr(fd, smd->flow->psys); + } + else if(smd->type==MOD_SMOKE_TYPE_COLL) + { + smd->flow = NULL; + smd->domain = NULL; + smd->coll = NULL; + /* + smd->coll = newdataadr(fd, smd->coll); + smd->coll->points = NULL; + smd->coll->numpoints = 0; + */ + } + } else if (md->type==eModifierType_Collision) { CollisionModifierData *collmd = (CollisionModifierData*) md; @@ -4846,7 +4896,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc) } else if(sl->spacetype==SPACE_LOGIC) { SpaceLogic *slogic= (SpaceLogic *)sl; - + if(slogic->gpd) { slogic->gpd= newdataadr(fd, slogic->gpd); direct_link_gpencil(fd, slogic->gpd); @@ -10130,6 +10180,19 @@ static void expand_modifier(FileData *fd, Main *mainvar, ModifierData *md) expand_doit(fd, mainvar, dmd->map_object); expand_doit(fd, mainvar, dmd->texture); } + else if (md->type==eModifierType_Smoke) { + SmokeModifierData *smd = (SmokeModifierData*) md; + + if(smd->type==MOD_SMOKE_TYPE_DOMAIN && smd->domain) + { + //if(smd->domain->coll_group) + expand_doit(fd, mainvar, smd->domain->coll_group); + //if(smd->domain->fluid_group) + expand_doit(fd, mainvar, smd->domain->fluid_group); + //if(smd->domain->eff_group) + expand_doit(fd, mainvar, smd->domain->eff_group); + } + } } static void expand_object(FileData *fd, Main *mainvar, Object *ob) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 0f693b6de31..da68132700d 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -130,6 +130,7 @@ Any case: direct data is ALWAYS after the lib block #include "DNA_sdna_types.h" #include "DNA_sequence_types.h" #include "DNA_sensor_types.h" +#include "DNA_smoke_types.h" #include "DNA_space_types.h" #include "DNA_screen_types.h" #include "DNA_sound_types.h" @@ -1116,6 +1117,18 @@ static void write_modifiers(WriteData *wd, ListBase *modbase, int write_undo) writestruct(wd, DATA, "ClothCollSettings", 1, clmd->coll_parms); write_pointcaches(wd, clmd->point_cache, PTCACHE_WRITE_CLOTH); } + else if(md->type==eModifierType_Smoke) { + SmokeModifierData *smd = (SmokeModifierData*) md; + + if(smd->type==MOD_SMOKE_TYPE_DOMAIN) + writestruct(wd, DATA, "SmokeDomainSettings", 1, smd->domain); + else if(smd->type==MOD_SMOKE_TYPE_FLOW) + writestruct(wd, DATA, "SmokeFlowSettings", 1, smd->flow); + /* + else if(smd->type==MOD_SMOKE_TYPE_COLL) + writestruct(wd, DATA, "SmokeCollSettings", 1, smd->coll); + */ + } else if(md->type==eModifierType_Fluidsim) { FluidsimModifierData *fluidmd = (FluidsimModifierData*) md; diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt index b7a868ad537..28cfcb3ff6e 100644 --- a/source/blender/editors/CMakeLists.txt +++ b/source/blender/editors/CMakeLists.txt @@ -35,7 +35,7 @@ SET(INC ../windowmanager ../../../intern/decimation/extern ../blenloader ../python ../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue ../quicktime ../../../intern/elbeem/extern - ../../../intern/ghost ../../../intern/opennl/extern ../../../extern/glew/include + ../../../intern/ghost ../../../intern/opennl/extern ../../../extern/glew/include ../../../intern/smoke/extern ../nodes ../gpu ../blenfont diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index 7d51d237ef0..4eb9f3f5ecb 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -8,6 +8,7 @@ incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../render/extern/include #/intern/guardedalloc' incs += ' ../../gpu ../../makesrna ../../blenfont' +incs += ' #/intern/smoke/extern' if env['WITH_BF_GAMEENGINE']: defs.append('GAMEBLENDER=1') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 53630b2bee0..d0bee9c18f8 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -59,6 +59,7 @@ #include "DNA_space_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" +#include "DNA_smoke_types.h" #include "DNA_userdef_types.h" #include "DNA_view3d_types.h" #include "DNA_world_types.h" @@ -88,7 +89,9 @@ #include "BKE_object.h" #include "BKE_particle.h" #include "BKE_property.h" +#include "BKE_smoke.h" #include "BKE_utildefines.h" +#include "smoke_API.h" #include "BIF_gl.h" #include "BIF_glutil.h" @@ -4898,6 +4901,7 @@ void drawRBpivot(bRigidBodyJointConstraint *data) void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) { static int warning_recursive= 0; + ModifierData *md = NULL; Object *ob; Curve *cu; RegionView3D *rv3d= ar->regiondata; @@ -5293,6 +5297,333 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(col) cpack(col); } + /* draw code for smoke */ + if(md = modifiers_findByType(ob, eModifierType_Smoke)) + { + SmokeModifierData *smd = (SmokeModifierData *)md; + + // draw collision objects + if((smd->type & MOD_SMOKE_TYPE_COLL) && smd->coll) + { + SmokeCollSettings *scs = smd->coll; + /* + if(scs->points) + { + size_t i; + + wmLoadMatrix(rv3d->viewmat); + + if(col || (ob->flag & SELECT)) cpack(0xFFFFFF); + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + + + // glPointSize(3.0); + bglBegin(GL_POINTS); + + for(i = 0; i < scs->numpoints; i++) + { + bglVertex3fv(&scs->points[3*i]); + } + + bglEnd(); + glPointSize(1.0); + + wmMultMatrix(ob->obmat); + glDisable(GL_BLEND); + glDepthMask(GL_TRUE); + if(col) cpack(col); + + } + */ + } + + // only draw domains + if(smd->domain && smd->domain->fluid) + { + int x, y, z, i; + float *density = NULL; + float viewnormal[3]; + int mainaxis[3] = {0,0,0}; + float align = 0; + int max_textures = 0, counter_textures = 0; + int counter=0; + float *buffer = NULL; + int res[3]; + float bigfactor = 1.0; + int big = smd->domain->flags & MOD_SMOKE_HIGHRES; + int new = 0; + + // GUI sent redraw event + if(smd->domain->flags & MOD_SMOKE_VIEW_REDRAWNICE) + { + new = 1; + smd->domain->flags &= ~MOD_SMOKE_VIEW_REDRAWNICE; + } + + if(!big) + { + res[0] = smd->domain->res[0]; + res[1] = smd->domain->res[1]; + res[2] = smd->domain->res[2]; + } + else + { + smoke_get_bigres(smd->domain->fluid, res); + bigfactor = 1.0 / smd->domain->amplify; + } + + wmLoadMatrix(rv3d->viewmat); + + if(col || (ob->flag & SELECT)) cpack(0xFFFFFF); /* for visibility, also while wpaint */ + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + + // get view vector + VECCOPY(viewnormal, rv3d->viewinv[2]); + Normalize(viewnormal); + for(i = 0; i < 3; i++) + { + if(ABS(viewnormal[i]) > align) + { + mainaxis[0] = i; + align = ABS(viewnormal[i]); + } + } + mainaxis[1] = (mainaxis[0] + 1) % 3; + mainaxis[2] = (mainaxis[0] + 2) % 3; + + if(!smd->domain->bind) + { + smd->domain->bind = MEM_callocN(sizeof(GLuint)*256, "Smoke_bind"); + if(big) + smd->domain->viewsettings |= MOD_SMOKE_VIEW_CHANGETOBIG; + new = 3; + } + + // check if view axis / mode has been changed + if(smd->domain->viewsettings) + { + if(big) + { + if(!(smd->domain->viewsettings & MOD_SMOKE_VIEW_BIG)) + new = 2; + else if(!(smd->domain->viewsettings & MOD_SMOKE_VIEW_CHANGETOBIG)) + new = 1; + + smd->domain->viewsettings |= MOD_SMOKE_VIEW_CHANGETOBIG; + } + else + { + if(!(smd->domain->viewsettings & MOD_SMOKE_VIEW_SMALL)) + new = 2; + else if(smd->domain->viewsettings & MOD_SMOKE_VIEW_CHANGETOBIG) + new = 1; + + smd->domain->viewsettings &= ~MOD_SMOKE_VIEW_CHANGETOBIG; + } + + if(!new) + { + if((mainaxis[0] == 0) && !(smd->domain->viewsettings & MOD_SMOKE_VIEW_X)) + new = 1; + else if((mainaxis[0] == 1) && !(smd->domain->viewsettings & MOD_SMOKE_VIEW_Y)) + new = 1; + else if((mainaxis[0] == 2) && !(smd->domain->viewsettings & MOD_SMOKE_VIEW_Z)) + new = 1; + + // printf("check axis\n"); + } + } + else + new = 3; + + if(new > 1) + { + float light[3] = {0.0,0.0,2.0}; + + if(!big && !(smd->domain->viewsettings & MOD_SMOKE_VIEW_SMALL)) + { + smoke_prepare_View(smd, light); + // printf("prepared View!\n"); + } + else if(big && !(smd->domain->viewsettings & MOD_SMOKE_VIEW_BIG)) + { + smoke_prepare_bigView(smd, light); + // printf("prepared bigView!\n"); + } + } + + // printf("big: %d, new: %d\n", big, new); + + // only create buffer if we need to create new textures + if(new) + buffer = MEM_mallocN(sizeof(float)*res[mainaxis[1]]*res[mainaxis[2]]*4, "SmokeDrawBuffer"); + + if(buffer || smd->domain->viewsettings) + { + int mod_texture = 0; + + // printf("if(buffer || smd->domain->viewsettings)\n"); + + max_textures = (res[mainaxis[0]] > 256) ? 256 : res[mainaxis[0]]; + + if(!smd->domain->viewsettings) // new frame or new start + { + smd->domain->max_textures = max_textures; + glGenTextures(smd->domain->max_textures, smd->domain->bind); + new = 1; + // printf("glGenTextures\n"); + } + else + { + if(new) + { + // printf("glDeleteTextures\n"); + glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + smd->domain->max_textures = max_textures; + glGenTextures(smd->domain->max_textures, smd->domain->bind); + } + } + + mod_texture = MAX3(1, smd->domain->visibility, (int)(res[mainaxis[0]] / smd->domain->max_textures )); + + for (z = res[mainaxis[0]]-1; z >= 0; z--) // 2 + { + float quad[4][3]; + + if(new) + { + for (y = 0; y < res[mainaxis[1]]; y++) // 1 + { + for (x = 0; x < res[mainaxis[2]]; x++) // 0 + { + size_t index; + size_t image_index; + float tray, tvox; + + if(mainaxis[0] == 0) + { + // mainaxis[1] == 1, mainaxis[2] == 2 + image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); + index = smoke_get_index(z, res[mainaxis[0]], y, res[mainaxis[1]], x, res[mainaxis[2]]); + } + else if(mainaxis[0] == 1) + { + // mainaxis[1] == 2, mainaxis[2] == 0 + image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); + index = smoke_get_index(x, res[mainaxis[2]], z, res[mainaxis[0]], y, res[mainaxis[1]]); + } + else // mainaxis[0] == 2 + { + // mainaxis[1] == 0, mainaxis[2] == 1 + image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); + index = smoke_get_index(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); + } + + if(!big) + { + tvox = smoke_get_tvox(smd, index); + tray = smoke_get_tray(smd, index); + } + else + { + tvox = smoke_get_bigtvox(smd, index); + tray = smoke_get_bigtray(smd, index); + } + + // fill buffer with luminance and alpha + // 1 - T_vox + buffer[image_index*4 + 3] = 1.0 - tvox; // 0 = transparent => d.h. tvox = 1 + + // L_vox = Omega * L_light * (1 - T_vox) * T_ray + buffer[image_index*4] = buffer[image_index*4 + 1] = buffer[image_index*4 + 2] = smd->domain->omega * 1.0 * tvox * tray; + } + } + } + glBindTexture(GL_TEXTURE_2D, smd->domain->bind[counter_textures]); + glEnable(GL_TEXTURE_2D); + + if(new) + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, res[mainaxis[1]], res[mainaxis[2]], 0, GL_RGBA, GL_FLOAT, buffer); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering + } + + if((z % mod_texture) == 0 ) + { + // botttom left + quad[3][mainaxis[0]] = smd->domain->p0[mainaxis[0]] + z * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[3][mainaxis[1]] = smd->domain->p0[mainaxis[1]] + smd->domain->dx * bigfactor * 0.5; + quad[3][mainaxis[2]] = smd->domain->p0[mainaxis[2]] + smd->domain->dx * bigfactor * 0.5; + + // top right + quad[1][mainaxis[0]] = smd->domain->p0[mainaxis[0]] + z * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[1][mainaxis[1]] = smd->domain->p0[mainaxis[1]] + (res[mainaxis[1]] - 1) * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[1][mainaxis[2]] = smd->domain->p0[mainaxis[2]] + (res[mainaxis[2]] - 1) * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + + // top left + quad[2][mainaxis[0]] = smd->domain->p0[mainaxis[0]] + z * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[2][mainaxis[1]] = smd->domain->p0[mainaxis[1]] + smd->domain->dx * bigfactor * 0.5; + quad[2][mainaxis[2]] = smd->domain->p0[mainaxis[2]] + (res[mainaxis[2]] - 1) * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + + // bottom right + quad[0][mainaxis[0]] = smd->domain->p0[mainaxis[0]] + z * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[0][mainaxis[1]] = smd->domain->p0[mainaxis[1]] + (res[mainaxis[1]] - 1) * smd->domain->dx * bigfactor + smd->domain->dx * bigfactor * 0.5; + quad[0][mainaxis[2]] = smd->domain->p0[mainaxis[2]] + smd->domain->dx * bigfactor * 0.5; + + glBegin(GL_QUADS); // Start Drawing Quads + + glTexCoord2f(1.0f, 0.0f); + glVertex3fv(quad[0]); // Left And Up 1 Unit (Top Left) + glTexCoord2f(1.0f, 1.0f); + glVertex3fv(quad[1]); // Right And Up 1 Unit (Top Right) + glTexCoord2f(0.0f, 1.0f); + glVertex3fv(quad[2]); // Right And Down One Unit (Bottom Right) + glTexCoord2f(0.0f, 0.0f); + glVertex3fv(quad[3]); // Left And Down One Unit (Bottom Left) + + glEnd(); + } + counter_textures++; + } + } + if(buffer) + { + MEM_freeN(buffer); + buffer = NULL; + } + + // set correct flag for viewsettings + if(1) + { + // do not clear BIG/SMALL flag + smd->domain->viewsettings &= ~MOD_SMOKE_VIEW_X; + smd->domain->viewsettings &= ~MOD_SMOKE_VIEW_Y; + smd->domain->viewsettings &= ~MOD_SMOKE_VIEW_Z; + + // set what caches we have + if(big) + smd->domain->viewsettings |= MOD_SMOKE_VIEW_BIG; + else + smd->domain->viewsettings |= MOD_SMOKE_VIEW_SMALL; + + if(mainaxis[0] == 0) + smd->domain->viewsettings |= MOD_SMOKE_VIEW_X; + else if(mainaxis[0] == 1) + smd->domain->viewsettings |= MOD_SMOKE_VIEW_Y; + else if(mainaxis[0] == 2) + smd->domain->viewsettings |= MOD_SMOKE_VIEW_Z; + } + + wmMultMatrix(ob->obmat); + glDisable(GL_BLEND); + glDepthMask(GL_TRUE); + if(col) cpack(col); + } + } + { bConstraint *con; for(con=ob->constraints.first; con; con= con->next) diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index ab053c136ea..3f504848d77 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -41,6 +41,7 @@ typedef enum ModifierType { eModifierType_SimpleDeform, eModifierType_Multires, eModifierType_Surface, + eModifierType_Smoke, NUM_MODIFIER_TYPES } ModifierType; @@ -237,6 +238,23 @@ typedef struct BMeshModifierData { int type; } BMeshModifierData; + +/* Smoke modifier flags */ +#define MOD_SMOKE_TYPE_DOMAIN (1 << 0) +#define MOD_SMOKE_TYPE_FLOW (1 << 1) +#define MOD_SMOKE_TYPE_COLL (1 << 2) + +typedef struct SmokeModifierData { + ModifierData modifier; + + struct SmokeDomainSettings *domain; + struct SmokeFlowSettings *flow; /* inflow, outflow, smoke objects */ + struct SmokeCollSettings *coll; /* collision objects */ + float time; + int type; /* domain, inflow, outflow, ... */ + struct PointCache *point_cache; /* definition is in DNA_object_force.h */ +} SmokeModifierData; + typedef struct DisplaceModifierData { ModifierData modifier; diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h new file mode 100644 index 00000000000..aac75309be2 --- /dev/null +++ b/source/blender/makesdna/DNA_smoke_types.h @@ -0,0 +1,112 @@ +/** +* $Id: DNA_cloth_types.h 19820 2009-04-20 15:06:46Z blendix $ +* +* ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* The Original Code is Copyright (C) 2006 by NaN Holding BV. +* All rights reserved. +* +* The Original Code is: all of this file. +* +* Contributor(s): Daniel Genrich (Genscher) +* +* ***** END GPL LICENSE BLOCK ***** +*/ +#ifndef DNA_SMOKE_TYPES_H +#define DNA_SMOKE_TYPES_H + +/* flags */ +#define MOD_SMOKE_HIGHRES (1<<1) +/* noise */ +#define MOD_SMOKE_NOISEWAVE (1<<0) +#define MOD_SMOKE_NOISEFFT (1<<1) +#define MOD_SMOKE_NOISECURL (1<<2) +/* viewsettings */ +#define MOD_SMOKE_VIEW_X (1<<0) +#define MOD_SMOKE_VIEW_Y (1<<1) +#define MOD_SMOKE_VIEW_Z (1<<2) +#define MOD_SMOKE_VIEW_SMALL (1<<3) +#define MOD_SMOKE_VIEW_BIG (1<<4) +#define MOD_SMOKE_VIEW_CHANGETOBIG (1<<5) +#define MOD_SMOKE_VIEW_REDRAWNICE (1<<6) +#define MOD_SMOKE_VIEW_REDRAWALL (1<<7) + +typedef struct SmokeDomainSettings { + struct SmokeModifierData *smd; /* for fast RNA access */ + struct FLUID_3D *fluid; + struct Group *fluid_group; + struct Group *eff_group; // effector group for e.g. wind force + struct Group *coll_group; // collision objects group + unsigned int *bind; + float *tvox; + float *tray; + float *tvoxbig; + float *traybig; + float p0[3]; /* start point of BB */ + float p1[3]; /* end point of BB */ + float dx; /* edge length of one cell */ + float firstframe; + float lastframe; + float omega; /* smoke color - from 0 to 1 */ + float temp; /* fluid temperature */ + float tempAmb; /* ambient temperature */ + float alpha; + float beta; + int res[3]; /* domain resolution */ + int amplify; /* wavelet amplification */ + int maxres; /* longest axis on the BB gets this resolution assigned */ + int flags; /* show up-res or low res, etc */ + int visibility; /* how many billboards to show (every 2nd, 3rd, 4th,..) */ + int viewsettings; + int max_textures; + short noise; /* noise type: wave, curl, anisotropic */ + short pad2; + int pad3; + int pad4; +} SmokeDomainSettings; + +/* inflow / outflow */ +typedef struct SmokeFlowSettings { + struct SmokeModifierData *smd; /* for fast RNA access */ + struct ParticleSystem *psys; + float density; + float temp; /* delta temperature (temp - ambient temp) */ + float velocity[3]; + float vgrp_heat_scale[2]; /* min and max scaling for vgroup_heat */ + short vgroup_flow; /* where inflow/outflow happens - red=1=action */ + short vgroup_density; + short vgroup_heat; + short type; /* inflow =0 or outflow = 1 */ + int pad; +} SmokeFlowSettings; + +/* collision objects (filled with smoke) */ +typedef struct SmokeCollSettings { + struct SmokeModifierData *smd; /* for fast RNA access */ + float *points; + float *points_old; + float *vel; + float mat[4][4]; + float mat_old[4][4]; + int numpoints; + int numverts; // check if mesh changed + short type; // static = 0, rigid = 1, dynamic = 2 + short pad; + int pad2; +} SmokeCollSettings; + +#endif diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index 207d6fdd94a..87ceef36dfb 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -132,6 +132,7 @@ char *includefiles[] = { "DNA_windowmanager_types.h", "DNA_anim_types.h", "DNA_boid_types.h", + "DNA_smoke_types.h", // empty string to indicate end of includefiles "" @@ -1154,4 +1155,5 @@ int main(int argc, char ** argv) #include "DNA_windowmanager_types.h" #include "DNA_anim_types.h" #include "DNA_boid_types.h" +#include "DNA_smoke_types.h" /* end of list */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 64a4887701b..1b3175d7f55 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -378,6 +378,7 @@ extern StructRNA RNA_ShapeKeyPoint; extern StructRNA RNA_ShrinkwrapConstraint; extern StructRNA RNA_ShrinkwrapModifier; extern StructRNA RNA_SimpleDeformModifier; +extern StructRNA RNA_SmokeModifier; extern StructRNA RNA_SmoothModifier; extern StructRNA RNA_SoftBodyModifier; extern StructRNA RNA_SoftBodySettings; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 0b7fa0e4634..b5fc4d2e463 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1941,6 +1941,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_sculpt_paint.c", NULL, RNA_def_sculpt_paint}, {"rna_sensor.c", NULL, RNA_def_sensor}, {"rna_sequence.c", NULL, RNA_def_sequence}, + {"rna_smoke.c", NULL, RNA_def_smoke}, {"rna_space.c", NULL, RNA_def_space}, {"rna_text.c", NULL, RNA_def_text}, {"rna_timeline.c", NULL, RNA_def_timeline_marker}, diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index ed0395ede23..99f527f8875 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -154,6 +154,7 @@ void RNA_def_screen(struct BlenderRNA *brna); void RNA_def_sculpt_paint(struct BlenderRNA *brna); void RNA_def_sensor(struct BlenderRNA *brna); void RNA_def_sequence(struct BlenderRNA *brna); +void RNA_def_smoke(struct BlenderRNA *brna); void RNA_def_space(struct BlenderRNA *brna); void RNA_def_text(struct BlenderRNA *brna); void RNA_def_texture(struct BlenderRNA *brna); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index c89cc4ad63e..022ef56b53b 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -71,6 +71,7 @@ EnumPropertyItem modifier_type_items[] ={ {eModifierType_Surface, "SURFACE", ICON_MOD_PHYSICS, "Surface", ""}, {eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""}, {eModifierType_Wave, "WAVE", ICON_MOD_WAVE, "Wave", ""}, + {eModifierType_Smoke, "SMOKE", 0, "Smoke", ""}, {0, NULL, 0, NULL, NULL}}; @@ -151,6 +152,8 @@ static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr) return &RNA_MultiresModifier; case eModifierType_Surface: return &RNA_SurfaceModifier; + case eModifierType_Smoke: + return &RNA_SmokeModifier; default: return &RNA_Modifier; } @@ -172,6 +175,19 @@ static void rna_Modifier_dependency_update(bContext *C, PointerRNA *ptr) DAG_scene_sort(CTX_data_scene(C)); } +static void rna_Smoke_set_type(bContext *C, PointerRNA *ptr) +{ + SmokeModifierData *smd= (SmokeModifierData *)ptr->data; + + smokeModifier_free(smd); // XXX TODO: completely free all 3 pointers + smokeModifier_createType(smd); // create regarding of selected type + // particle_system_slot_add_exec(C, NULL); + // particle_system_slot_remove_exec(C, NULL); + + // update dependancy since a domain - other type switch could have happened + rna_Modifier_dependency_update(C, ptr); +} + static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value) { ExplodeModifierData *emd= (ExplodeModifierData*)ptr->data; @@ -1466,6 +1482,41 @@ static void rna_def_modifier_cloth(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Point Cache", ""); } +static void rna_def_modifier_smoke(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem prop_smoke_type_items[] = { + {0, "NONE", 0, "None", ""}, + {MOD_SMOKE_TYPE_DOMAIN, "TYPE_DOMAIN", 0, "Domain", ""}, + {MOD_SMOKE_TYPE_FLOW, "TYPE_FLOW", 0, "Flow", "Inflow/Outflow"}, + {MOD_SMOKE_TYPE_COLL, "TYPE_COLL", 0, "Collision", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "SmokeModifier", "Modifier"); + RNA_def_struct_ui_text(srna, "Smoke Modifier", "Smoke simulation modifier."); + RNA_def_struct_sdna(srna, "SmokeModifierData"); + + prop= RNA_def_property(srna, "domain_settings", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "domain"); + RNA_def_property_ui_text(prop, "Domain Settings", ""); + + prop= RNA_def_property(srna, "flow_settings", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "flow"); + RNA_def_property_ui_text(prop, "Flow Settings", ""); + + prop= RNA_def_property(srna, "coll_settings", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "coll"); + RNA_def_property_ui_text(prop, "Collision Settings", ""); + + prop= RNA_def_property(srna, "fluid_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, prop_smoke_type_items); + RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_set_type"); +} + static void rna_def_modifier_collision(BlenderRNA *brna) { StructRNA *srna; @@ -1763,7 +1814,6 @@ static void rna_def_modifier_surface(BlenderRNA *brna) RNA_def_struct_sdna(srna, "SurfaceModifierData"); RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS); } - void RNA_def_modifier(BlenderRNA *brna) { StructRNA *srna; @@ -1847,6 +1897,7 @@ void RNA_def_modifier(BlenderRNA *brna) rna_def_modifier_simpledeform(brna); rna_def_modifier_multires(brna); rna_def_modifier_surface(brna); + rna_def_modifier_smoke(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c new file mode 100644 index 00000000000..a4e2c39ecd8 --- /dev/null +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -0,0 +1,263 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): Daniel Genrich + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "rna_internal.h" + +#include "BKE_modifier.h" +#include "BKE_smoke.h" + +#include "DNA_modifier_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" +#include "DNA_smoke_types.h" + +#include "WM_types.h" + + +#ifdef RNA_RUNTIME + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_particle.h" + +#include "ED_object.h" + +static void rna_Smoke_update(bContext *C, PointerRNA *ptr) +{ + DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_DATA); +} + +static void rna_Smoke_dependency_update(bContext *C, PointerRNA *ptr) +{ + rna_Smoke_update(C, ptr); + DAG_scene_sort(CTX_data_scene(C)); +} + +static void rna_Smoke_reset(bContext *C, PointerRNA *ptr) +{ + SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; + + smokeModifier_reset(settings->smd); + + rna_Smoke_update(C, ptr); +} + +static void rna_Smoke_reset_dependancy(bContext *C, PointerRNA *ptr) +{ + SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; + + smokeModifier_reset(settings->smd); + + rna_Smoke_dependency_update(C, ptr); +} + +static void rna_Smoke_redraw(bContext *C, PointerRNA *ptr) +{ + SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; + + settings->flags |= MOD_SMOKE_VIEW_REDRAWNICE; +} + +static char *rna_SmokeDomainSettings_path(PointerRNA *ptr) +{ + SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; + ModifierData *md= (ModifierData *)settings->smd; + + return BLI_sprintfN("modifiers[%s].domain_settings", md->name); +} + +static char *rna_SmokeFlowSettings_path(PointerRNA *ptr) +{ + SmokeFlowSettings *settings = (SmokeFlowSettings*)ptr->data; + ModifierData *md= (ModifierData *)settings->smd; + + return BLI_sprintfN("modifiers[%s].flow_settings", md->name); +} + +static char *rna_SmokeCollSettings_path(PointerRNA *ptr) +{ + SmokeCollSettings *settings = (SmokeCollSettings*)ptr->data; + ModifierData *md= (ModifierData *)settings->smd; + + return BLI_sprintfN("modifiers[%s].coll_settings", md->name); +} + +#else + +static void rna_def_smoke_domain_settings(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem prop_noise_type_items[] = { + {MOD_SMOKE_NOISEWAVE, "NOISEWAVE", 0, "Wavelet", ""}, + {MOD_SMOKE_NOISEFFT, "NOISEFFT", 0, "FFT", ""}, + {MOD_SMOKE_NOISECURL, "NOISECURL", 0, "Curl", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna = RNA_def_struct(brna, "SmokeDomainSettings", NULL); + RNA_def_struct_ui_text(srna, "Domain Settings", "Smoke domain settings."); + RNA_def_struct_sdna(srna, "SmokeDomainSettings"); + RNA_def_struct_path_func(srna, "rna_SmokeDomainSettings_path"); + + prop= RNA_def_property(srna, "maxres", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "maxres"); + RNA_def_property_range(prop, 32, 512); + RNA_def_property_ui_range(prop, 32, 512, 2, 0); + RNA_def_property_ui_text(prop, "Max Res", "Maximal resolution used in the fluid domain."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset"); + + prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "omega"); + RNA_def_property_range(prop, 0.02, 1.0); + RNA_def_property_ui_range(prop, 0.02, 1.0, 0.02, 2); + RNA_def_property_ui_text(prop, "Color", "Smoke color (0 = black, 1 = white)."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Smoke_redraw"); + + prop= RNA_def_property(srna, "amplify", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "amplify"); + RNA_def_property_range(prop, 1, 10); + RNA_def_property_ui_range(prop, 1, 10, 1, 0); + RNA_def_property_ui_text(prop, "Amplification", "Enhance the resolution of smoke by this factor using noise."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset"); + + prop= RNA_def_property(srna, "highres", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGHRES); + RNA_def_property_ui_text(prop, "High res", "Show high resolution (using amplification)."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); + + prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "noise"); + RNA_def_property_enum_items(prop, prop_noise_type_items); + RNA_def_property_ui_text(prop, "Noise Method", "Noise method which is used for creating the high resolution"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset"); + + prop= RNA_def_property(srna, "visibility", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "visibility"); + RNA_def_property_range(prop, 1, 15); + RNA_def_property_ui_range(prop, 1, 15, 1, 0); + RNA_def_property_ui_text(prop, "Display", "How much of the resolution should be shown during preview (every 2nd, 3rd, etc)."); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Smoke_redraw"); + + prop= RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "alpha"); + RNA_def_property_range(prop, -5.0, 5.0); + RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5); + RNA_def_property_ui_text(prop, "Gravity", "Higher value results in sinking smoke"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL); + + prop= RNA_def_property(srna, "beta", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "beta"); + RNA_def_property_range(prop, -5.0, 5.0); + RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5); + RNA_def_property_ui_text(prop, "Heat", "Higher value results in faster rising smoke."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL); + + prop= RNA_def_property(srna, "coll_group", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "coll_group"); + RNA_def_property_struct_type(prop, "Group"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Collision Group", "Limit collisions to this group."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy"); + + prop= RNA_def_property(srna, "fluid_group", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "fluid_group"); + RNA_def_property_struct_type(prop, "Group"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Fluid Group", "Limit fluid objects to this group."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy"); + + prop= RNA_def_property(srna, "eff_group", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "eff_group"); + RNA_def_property_struct_type(prop, "Group"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Effector Group", "Limit effectors to this group."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy"); +} + +static void rna_def_smoke_flow_settings(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "SmokeFlowSettings", NULL); + RNA_def_struct_ui_text(srna, "Flow Settings", "Smoke flow settings."); + RNA_def_struct_sdna(srna, "SmokeFlowSettings"); + RNA_def_struct_path_func(srna, "rna_SmokeFlowSettings_path"); + + prop= RNA_def_property(srna, "density", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "density"); + RNA_def_property_range(prop, 0.001, 1); + RNA_def_property_ui_range(prop, 0.001, 1.0, 1.0, 4); + RNA_def_property_ui_text(prop, "Density", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL); + + prop= RNA_def_property(srna, "temperature", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "temp"); + RNA_def_property_range(prop, -10, 10); + RNA_def_property_ui_range(prop, -10, 10, 1, 1); + RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambientt temperature."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL); + + prop= RNA_def_property(srna, "psys", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "psys"); + RNA_def_property_struct_type(prop, "ParticleSystem"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy"); + + prop= RNA_def_property(srna, "velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "velocity"); + RNA_def_property_range(prop, -10, 10); + RNA_def_property_ui_range(prop, -10, 10, 1, 1); + RNA_def_property_ui_text(prop, "Velocity", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL); + +} + +static void rna_def_smoke_coll_settings(BlenderRNA *brna) +{ + StructRNA *srna; + + srna = RNA_def_struct(brna, "SmokeCollSettings", NULL); + RNA_def_struct_ui_text(srna, "Collision Settings", "Smoke collision settings."); + RNA_def_struct_sdna(srna, "SmokeCollSettings"); + RNA_def_struct_path_func(srna, "rna_SmokeCollSettings_path"); +} + +void RNA_def_smoke(BlenderRNA *brna) +{ + rna_def_smoke_domain_settings(brna); + rna_def_smoke_flow_settings(brna); + rna_def_smoke_coll_settings(brna); +} + +#endif + diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 70a25d8662f..064681b37ea 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -256,6 +256,7 @@ IF(UNIX) bf_converter bf_dummy bf_bullet + bf_smoke bf_common bf_ketsji bf_logic From accc2ab744d1889294eb7a29ce5e642fbea991d5 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 15:03:00 +0000 Subject: [PATCH 480/512] smoke: forgot to disable fftw3 noise function --- intern/smoke/intern/WTURBULENCE.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp index 64cce9e39bc..05e29442383 100644 --- a/intern/smoke/intern/WTURBULENCE.cpp +++ b/intern/smoke/intern/WTURBULENCE.cpp @@ -181,8 +181,9 @@ void WTURBULENCE::setNoise(int type) { if(type == 4) // FFT { - std::string noiseTileFilename = std::string("noise.fft"); - generatTile_FFT(_noiseTile, noiseTileFilename); + // needs fft + // std::string noiseTileFilename = std::string("noise.fft"); + // generatTile_FFT(_noiseTile, noiseTileFilename); } else if(type == 8) // curl { From 98d45c3da0dc12671ee9af9cb571df3bec86feaa Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 15:07:44 +0000 Subject: [PATCH 481/512] smoke: another fftw3 error fixed --- intern/smoke/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/smoke/SConscript b/intern/smoke/SConscript index fe592b8afb2..c427764e19e 100644 --- a/intern/smoke/SConscript +++ b/intern/smoke/SConscript @@ -10,6 +10,6 @@ if env['WITH_BF_OPENMP']: incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC'] incs += ' intern ../../extern/bullet2/src ../memutil ../guardealloc ' -incs += env['BF_FFTW3_INC'] +# incs += env['BF_FFTW3_INC'] env.BlenderLib ('bf_smoke', sources, Split(incs), Split(defs), libtype=['intern'], priority=[40] ) From 8ddf8ff977b156e0b7ce9a105f0c7be8b7d5e46b Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 15:17:41 +0000 Subject: [PATCH 482/512] Blender Smoke credits: Wavelet Turbulence for Fluid Simulation Copyright 2008 Theodore Kim and Nils Thuerey Paper + Website: http://www.cs.cornell.edu/~tedkim/WTURB/ --- source/blender/blenkernel/intern/smoke.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 941381f04f3..416a208468b 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -911,6 +911,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM obstacles[index] = 1; + // for moving gobstacles /* const LbmFloat maxVelVal = 0.1666; const LbmFloat maxusqr = maxVelVal*maxVelVal*3. *1.5; From 20819ddcc9b1ef300d85a5fbbed6fafa86931a28 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 15:25:56 +0000 Subject: [PATCH 483/512] Smoke: forgot cmake file --- intern/smoke/CMakeLists.txt | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 intern/smoke/CMakeLists.txt diff --git a/intern/smoke/CMakeLists.txt b/intern/smoke/CMakeLists.txt new file mode 100644 index 00000000000..90768e58be0 --- /dev/null +++ b/intern/smoke/CMakeLists.txt @@ -0,0 +1,38 @@ +# $Id$ +# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2006, Blender Foundation +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): Daniel Genrich +# +# ***** END GPL LICENSE BLOCK ***** + +SET(INC ${PNG_INC} ${ZLIB_INC} intern ../../extern/bullet2/src ../memutil ../guardealloc) +# ${FFTW3_INC} + +FILE(GLOB SRC intern/*.cpp) + +IF(WITH_OPENMP) + ADD_DEFINITIONS(-DPARALLEL=1) +ENDIF(WITH_OPENMP) + + +BLENDERLIB(bf_smoke "${SRC}" "${INC}") +#, libtype='blender', priority = 0 ) From 2f79219c07c60bcfdac9787710ed573d034e4ea3 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 30 Jul 2009 16:38:00 +0000 Subject: [PATCH 484/512] 2.5 Smoke: * Put Smoke Modifier in the right alphabetical order in RNA and py file. * Some small naming changes. Commit approved by Genscher. :) --- release/ui/buttons_data_modifier.py | 55 ++++++++++--------- source/blender/makesrna/intern/rna_modifier.c | 4 +- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py index 64ffeae8fdb..ae824e73720 100644 --- a/release/ui/buttons_data_modifier.py +++ b/release/ui/buttons_data_modifier.py @@ -70,6 +70,8 @@ class DATA_PT_modifiers(DataButtonsPanel): self.shrinkwrap(box, ob, md) elif md.type == 'SIMPLE_DEFORM': self.simpledeform(box, ob, md) + elif md.type == 'SMOKE': + self.smoke(box, ob, md) elif md.type == 'SMOOTH': self.smooth(box, ob, md) elif md.type == 'SOFTBODY': @@ -82,8 +84,6 @@ class DATA_PT_modifiers(DataButtonsPanel): self.uvproject(box, ob, md) elif md.type == 'WAVE': self.wave(box, ob, md) - if md.type == 'SMOKE': - self.smoke(box, ob, md) def armature(self, layout, ob, md): layout.itemR(md, "object") @@ -357,6 +357,32 @@ class DATA_PT_modifiers(DataButtonsPanel): if md.mode in ('TAPER', 'STRETCH'): layout.itemR(md, "lock_x_axis") layout.itemR(md, "lock_y_axis") + + def smoke(self, layout, ob, md): + layout.itemR(md, "smoke_type") + + if md.smoke_type == 'TYPE_DOMAIN': + layout.itemS() + layout.itemR(md.domain_settings, "maxres") + layout.itemR(md.domain_settings, "color") + layout.itemR(md.domain_settings, "amplify") + layout.itemR(md.domain_settings, "highres") + layout.itemR(md.domain_settings, "noise_type") + layout.itemR(md.domain_settings, "visibility") + layout.itemR(md.domain_settings, "alpha") + layout.itemR(md.domain_settings, "beta") + layout.itemR(md.domain_settings, "fluid_group") + layout.itemR(md.domain_settings, "eff_group") + layout.itemR(md.domain_settings, "coll_group") + elif md.smoke_type == 'TYPE_FLOW': + layout.itemS() + layout.itemR(md.flow_settings, "density") + layout.itemR(md.flow_settings, "temperature") + layout.itemL(text="Velocity") + layout.row().itemR(md.flow_settings, "velocity", text="") + layout.item_pointerR(md.flow_settings, "psys", ob, "particle_systems") + elif md.smoke_type == 'TYPE_COLL': + layout.itemS() def smooth(self, layout, ob, md): split = layout.split() @@ -436,30 +462,5 @@ class DATA_PT_modifiers(DataButtonsPanel): flow.itemR(md, "height", slider=True) flow.itemR(md, "width", slider=True) flow.itemR(md, "narrowness", slider=True) - - def smoke(self, layout, ob, md): - layout.itemR(md, "fluid_type") - if md.fluid_type == 'TYPE_DOMAIN': - layout.itemS() - layout.itemR(md.domain_settings, "maxres") - layout.itemR(md.domain_settings, "color") - layout.itemR(md.domain_settings, "amplify") - layout.itemR(md.domain_settings, "highres") - layout.itemR(md.domain_settings, "noise_type") - layout.itemR(md.domain_settings, "visibility") - layout.itemR(md.domain_settings, "alpha") - layout.itemR(md.domain_settings, "beta") - layout.itemR(md.domain_settings, "fluid_group") - layout.itemR(md.domain_settings, "eff_group") - layout.itemR(md.domain_settings, "coll_group") - if md.fluid_type == 'TYPE_FLOW': - layout.itemS() - layout.itemR(md.flow_settings, "density") - layout.itemR(md.flow_settings, "temperature") - layout.itemL(text="Velocity") - layout.row().itemR(md.flow_settings, "velocity", text="") - layout.item_pointerR(md.flow_settings, "psys", ob, "particle_systems") - if md.fluid_type == 'TYPE_FLUID': - layout.itemS() bpy.types.register(DATA_PT_modifiers) diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 022ef56b53b..93e03808809 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -65,13 +65,13 @@ EnumPropertyItem modifier_type_items[] ={ {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", ICON_MOD_PARTICLES, "Particle System", ""}, {eModifierType_Shrinkwrap, "SHRINKWRAP", ICON_MOD_SHRINKWRAP, "Shrinkwrap", ""}, {eModifierType_SimpleDeform, "SIMPLE_DEFORM", ICON_MOD_SIMPLEDEFORM, "Simple Deform", ""}, + {eModifierType_Smoke, "SMOKE", 0, "Smoke", ""}, {eModifierType_Smooth, "SMOOTH", ICON_MOD_SMOOTH, "Smooth", ""}, {eModifierType_Softbody, "SOFTBODY", ICON_MOD_SOFT, "Soft Body", ""}, {eModifierType_Subsurf, "SUBSURF", ICON_MOD_SUBSURF, "Subsurf", ""}, {eModifierType_Surface, "SURFACE", ICON_MOD_PHYSICS, "Surface", ""}, {eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""}, {eModifierType_Wave, "WAVE", ICON_MOD_WAVE, "Wave", ""}, - {eModifierType_Smoke, "SMOKE", 0, "Smoke", ""}, {0, NULL, 0, NULL, NULL}}; @@ -1510,7 +1510,7 @@ static void rna_def_modifier_smoke(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "coll"); RNA_def_property_ui_text(prop, "Collision Settings", ""); - prop= RNA_def_property(srna, "fluid_type", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "smoke_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, prop_smoke_type_items); RNA_def_property_ui_text(prop, "Type", ""); From 1c6cb51e654b03dea0d33f5c35ae50c1e93c6437 Mon Sep 17 00:00:00 2001 From: Stefan Gartner Date: Thu, 30 Jul 2009 18:19:46 +0000 Subject: [PATCH 485/512] 2.5: first step at adding Makefiles for smoke NOTE: someone needs to add $(NAN_SMOKE)/lib/$(DEBUG_DIR)/libsmoke.a to source/Makefile to make it link --- intern/Makefile | 2 +- intern/smoke/Makefile | 54 ++++++++++++++++++++ intern/smoke/intern/Makefile | 52 +++++++++++++++++++ source/blender/editors/space_view3d/Makefile | 2 +- source/nan_definitions.mk | 1 + 5 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 intern/smoke/Makefile create mode 100644 intern/smoke/intern/Makefile diff --git a/intern/Makefile b/intern/Makefile index 995dc56c7d3..b559ce6978a 100644 --- a/intern/Makefile +++ b/intern/Makefile @@ -32,7 +32,7 @@ SOURCEDIR = intern # include nan_subdirs.mk ALLDIRS = string ghost guardedalloc moto container memutil -ALLDIRS += decimation iksolver bsp SoundSystem opennl elbeem boolop +ALLDIRS += decimation iksolver bsp SoundSystem opennl elbeem boolop smoke all:: @for i in $(ALLDIRS); do \ diff --git a/intern/smoke/Makefile b/intern/smoke/Makefile new file mode 100644 index 00000000000..a8bddd6f8e6 --- /dev/null +++ b/intern/smoke/Makefile @@ -0,0 +1,54 @@ +# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- +# vim: tabstop=8 +# +# $Id: Makefile 19330 2009-03-19 01:50:45Z hos $ +# +# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): Hans Lambermont, GSR +# +# ***** END GPL LICENSE BLOCK ***** +# smoke main makefile. +# + +include nan_definitions.mk + +unexport NAN_QUIET + +LIBNAME = smoke +SOURCEDIR = intern/$(LIBNAME) +DIR = $(OCGDIR)/$(SOURCEDIR) +DIRS = intern +#not ready yet TESTDIRS = test + +include nan_subdirs.mk + +install: $(ALL_OR_DEBUG) + @[ -d $(NAN_SMOKE) ] || mkdir $(NAN_SMOKE) + @[ -d $(NAN_SMOKE)/include ] || mkdir $(NAN_SMOKE)/include + @[ -d $(NAN_SMOKE)/lib/$(DEBUG_DIR) ] || mkdir $(NAN_SMOKE)/lib/$(DEBUG_DIR) + @../tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a $(NAN_SMOKE)/lib/$(DEBUG_DIR) +ifeq ($(OS),darwin) + ranlib $(NAN_SMOKE)/lib/$(DEBUG_DIR)lib$(LIBNAME).a +endif + @../tools/cpifdiff.sh extern/*.h $(NAN_SMOKE)/include/ + diff --git a/intern/smoke/intern/Makefile b/intern/smoke/intern/Makefile new file mode 100644 index 00000000000..64561588d54 --- /dev/null +++ b/intern/smoke/intern/Makefile @@ -0,0 +1,52 @@ +# +# $Id: Makefile 17433 2008-11-12 21:16:53Z blendix $ +# +# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): none yet. +# +# ***** END GPL LICENSE BLOCK ***** +# smoke intern Makefile +# + +LIBNAME = smoke +DIR = $(OCGDIR)/intern/$(LIBNAME) + +include nan_compile.mk + +unexport NAN_QUIET + +CCFLAGS += $(LEVEL_2_CPP_WARNINGS) + +ifeq ($(WITH_BF_OPENMP),true) + CPPFLAGS += -DPARALLEL +endif + +CPPFLAGS += -I. +CPPFLAGS += -I../extern +CPPFLAGS += -I$(NAN_PNG)/include +CPPFLAGS += -I$(NAN_PNG)/include/libpng + +# zlib +ifeq ($(OS),$(findstring $(OS), "solaris windows")) + CPPFLAGS += -I$(NAN_ZLIB)/include +endif diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile index 5e6f8a6c426..07102157854 100644 --- a/source/blender/editors/space_view3d/Makefile +++ b/source/blender/editors/space_view3d/Makefile @@ -52,7 +52,7 @@ CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../render/extern/include CPPFLAGS += -I../../blenfont CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include - +CPPFLAGS += -I$(NAN_SMOKE)/include # own include CPPFLAGS += -I../include diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk index fc0f3a7aa19..4724c740ffc 100644 --- a/source/nan_definitions.mk +++ b/source/nan_definitions.mk @@ -107,6 +107,7 @@ endif export NAN_TEST_VERBOSITY ?= 1 export NAN_OPENNL ?= $(LCGDIR)/opennl export NAN_ELBEEM ?= $(LCGDIR)/elbeem + export NAN_SMOKE ?= $(LCGDIR)/smoke export NAN_SUPERLU ?= $(LCGDIR)/superlu export NAN_GLEW ?= $(LCGDIR)/glew ifeq ($(FREE_WINDOWS), true) From a39192f243313c45de74d3208840d4fe29dc4e0d Mon Sep 17 00:00:00 2001 From: William Reynish Date: Thu, 30 Jul 2009 18:32:20 +0000 Subject: [PATCH 486/512] Separated metaball size values, and hid inapplicable values depending on metaball type. --- release/ui/buttons_data_metaball.py | 40 ++++++++++++++++++++--- source/blender/makesdna/DNA_meta_types.h | 4 ++- source/blender/makesrna/intern/rna_meta.c | 17 ++++++++-- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py index fa463d49c0d..74731473683 100644 --- a/release/ui/buttons_data_metaball.py +++ b/release/ui/buttons_data_metaball.py @@ -66,16 +66,46 @@ class DATA_PT_metaball_element(DataButtonsPanel): split.itemR(metaelem, "type", text="") split = layout.split() - - col = split.column() - col.itemL(text="Size:") - col.itemR(metaelem, "size", text="") - + col = split.column() col.itemL(text="Settings:") col.itemR(metaelem, "stiffness", text="Stiffness") col.itemR(metaelem, "negative", text="Negative") col.itemR(metaelem, "hide", text="Hide") + + if metaelem.type == 'BALL': + + col = split.column(align=True) + + elif metaelem.type == 'CUBE': + + col = split.column(align=True) + col.itemL(text="Size:") + col.itemR(metaelem, "sizex", text="X") + col.itemR(metaelem, "sizey", text="Y") + col.itemR(metaelem, "sizez", text="Z") + + elif metaelem.type == 'TUBE': + + col = split.column(align=True) + col.itemL(text="Size:") + col.itemR(metaelem, "sizex", text="X") + + elif metaelem.type == 'PLANE': + + col = split.column(align=True) + col.itemL(text="Size:") + col.itemR(metaelem, "sizex", text="X") + col.itemR(metaelem, "sizey", text="Y") + + elif metaelem.type == 'ELLIPSOID': + + col = split.column(align=True) + col.itemL(text="Size:") + col.itemR(metaelem, "sizex", text="X") + col.itemR(metaelem, "sizey", text="Y") + col.itemR(metaelem, "sizez", text="Z") + bpy.types.register(DATA_PT_context_metaball) bpy.types.register(DATA_PT_metaball) diff --git a/source/blender/makesdna/DNA_meta_types.h b/source/blender/makesdna/DNA_meta_types.h index 2da4e9ab5a6..897368fd5df 100644 --- a/source/blender/makesdna/DNA_meta_types.h +++ b/source/blender/makesdna/DNA_meta_types.h @@ -48,7 +48,9 @@ typedef struct MetaElem { short type, flag, selcol1, selcol2; float x, y, z; /* Position of center of MetaElem */ float quat[4]; /* Rotation of MetaElem */ - float expx, expy, expz; /* dimension parameters, used for some types like cubes */ + float expx; /* dimension parameters, used for some types like cubes */ + float expy; + float expz; float rad; /* radius of the meta element */ float rad2; /* temp field, used only while processing */ float s; /* stiffness, how much of the element to fill */ diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index 257b10d8408..df26e6b8121 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -99,11 +99,22 @@ void rna_def_metaelement(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Radius", ""); RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); - prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "sizex", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "expx"); RNA_def_property_range(prop, 0.0f, 20.0f); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Size", "Size of element, use of components depends on element type."); + RNA_def_property_ui_text(prop, "Size X", "Size of element, use of components depends on element type."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); + + prop= RNA_def_property(srna, "sizey", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "expy"); + RNA_def_property_range(prop, 0.0f, 20.0f); + RNA_def_property_ui_text(prop, "Size Y", "Size of element, use of components depends on element type."); + RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); + + prop= RNA_def_property(srna, "sizez", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "expz"); + RNA_def_property_range(prop, 0.0f, 20.0f); + RNA_def_property_ui_text(prop, "Size Z", "Size of element, use of components depends on element type."); RNA_def_property_update(prop, 0, "rna_MetaBall_update_data"); prop= RNA_def_property(srna, "stiffness", PROP_FLOAT, PROP_NONE); From d3fb4ec0b42f72b202a781a615d743860c57de52 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Thu, 30 Jul 2009 18:39:22 +0000 Subject: [PATCH 487/512] SVN maintenance. --- intern/smoke/Makefile | 2 +- intern/smoke/intern/Makefile | 2 +- source/blender/makesdna/DNA_smoke_types.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/intern/smoke/Makefile b/intern/smoke/Makefile index a8bddd6f8e6..e5144a9c3f8 100644 --- a/intern/smoke/Makefile +++ b/intern/smoke/Makefile @@ -1,7 +1,7 @@ # -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- # vim: tabstop=8 # -# $Id: Makefile 19330 2009-03-19 01:50:45Z hos $ +# $Id$ # # ***** BEGIN GPL LICENSE BLOCK ***** # diff --git a/intern/smoke/intern/Makefile b/intern/smoke/intern/Makefile index 64561588d54..2cdd7d3853e 100644 --- a/intern/smoke/intern/Makefile +++ b/intern/smoke/intern/Makefile @@ -1,5 +1,5 @@ # -# $Id: Makefile 17433 2008-11-12 21:16:53Z blendix $ +# $Id$ # # ***** BEGIN GPL LICENSE BLOCK ***** # diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h index aac75309be2..e0871e7038a 100644 --- a/source/blender/makesdna/DNA_smoke_types.h +++ b/source/blender/makesdna/DNA_smoke_types.h @@ -1,5 +1,5 @@ /** -* $Id: DNA_cloth_types.h 19820 2009-04-20 15:06:46Z blendix $ +* $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From 466435553fb396e34c7887c83aa512ae1d28ede6 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 30 Jul 2009 18:41:19 +0000 Subject: [PATCH 488/512] 2.5 Makefile fix to link smoke lib --- source/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/source/Makefile b/source/Makefile index 351db333aba..49036fddb8f 100644 --- a/source/Makefile +++ b/source/Makefile @@ -249,6 +249,7 @@ PULIB += $(OCGDIR)/blender/makesrna/$(DEBUG_DIR)librna.a PULIB += $(OCGDIR)/blender/blenlib/$(DEBUG_DIR)libblenlib.a PULIB += $(NAN_OPENNL)/lib/$(DEBUG_DIR)libopennl.a PULIB += $(NAN_ELBEEM)/lib/$(DEBUG_DIR)libelbeem.a +PULIB += $(NAN_SMOKE)/lib/$(DEBUG_DIR)/libsmoke.a ifeq ($(NAN_NO_KETSJI),true) PULIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a From 5eee72b092a0428405886de0d78a2908fde32587 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 30 Jul 2009 18:41:36 +0000 Subject: [PATCH 489/512] 2.5 Another Makefile fix for smoke --- source/blender/blenkernel/intern/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile index a6a5066b574..fe7187200aa 100644 --- a/source/blender/blenkernel/intern/Makefile +++ b/source/blender/blenkernel/intern/Makefile @@ -68,6 +68,7 @@ CPPFLAGS += -I$(NAN_DECIMATION)/include CPPFLAGS += -I$(NAN_ELBEEM)/include CPPFLAGS += -I$(NAN_OPENNL)/include CPPFLAGS += -I$(NAN_BSP)/include +CPPFLAGS += -I$(NAN_SMOKE)/include # path to zlib CPPFLAGS += -I$(NAN_ZLIB)/include From fc9204b746109416cf4f9000e68a29b975b88e22 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 30 Jul 2009 19:19:21 +0000 Subject: [PATCH 490/512] 2.5 Background Image: * Added notifier. --- source/blender/makesrna/intern/rna_space.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 4fb494256f7..c089591d149 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -477,24 +477,29 @@ static void rna_def_background_image(BlenderRNA *brna) prop= RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_pointer_sdna(prop, NULL, "iuser"); RNA_def_property_ui_text(prop, "Image User", "Parameters defining which layer, pass and frame of the image is displayed."); + RNA_def_property_update(prop, NC_OBJECT, NULL); prop= RNA_def_property(srna, "x_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "xof"); RNA_def_property_ui_text(prop, "X Offset", "Offsets image horizontally from the view center"); + RNA_def_property_update(prop, NC_OBJECT, NULL); prop= RNA_def_property(srna, "y_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "yof"); RNA_def_property_ui_text(prop, "Y Offset", "Offsets image vertically from the view center"); + RNA_def_property_update(prop, NC_OBJECT, NULL); prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "size"); RNA_def_property_ui_text(prop, "Size", "Scaling factor for the background image."); RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_update(prop, NC_OBJECT, NULL); prop= RNA_def_property(srna, "transparency", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "blend"); RNA_def_property_ui_text(prop, "Transparency", "Amount to blend the image against the background color."); RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_update(prop, NC_OBJECT, NULL); } From 1dbd47f4c3794585372f1de1551c790e678569c2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 20:11:59 +0000 Subject: [PATCH 491/512] wasnt building with gcc 4.4 --- intern/smoke/intern/VEC3.h | 1 + 1 file changed, 1 insertion(+) diff --git a/intern/smoke/intern/VEC3.h b/intern/smoke/intern/VEC3.h index ae159e11b4b..cc89b234e5a 100644 --- a/intern/smoke/intern/VEC3.h +++ b/intern/smoke/intern/VEC3.h @@ -7,6 +7,7 @@ #include #include +#include #include #include From dbba273371ff3e827f5b3cfc0aaf967222188611 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 20:12:40 +0000 Subject: [PATCH 492/512] Smoke: fixing some compile warning reported by Ton and one compile erro for gcc 4.4.1 reported by mrunion --- intern/elbeem/intern/solver_init.cpp | 2 +- intern/smoke/extern/smoke_API.h | 8 +++--- intern/smoke/intern/FLUID_3D.cpp | 12 +++++---- intern/smoke/intern/FLUID_3D.h | 11 ++++---- intern/smoke/intern/FLUID_3D_SOLVERS.cpp | 5 ++-- intern/smoke/intern/FLUID_3D_STATIC.cpp | 17 ++++++++---- intern/smoke/intern/IMAGE.h | 15 ++++++++--- intern/smoke/intern/WAVELET_NOISE.h | 27 ++++++++++--------- intern/smoke/intern/WTURBULENCE.cpp | 14 +++++----- intern/smoke/intern/smoke_API.cpp | 11 +++----- source/blender/blenkernel/intern/smoke.c | 23 ++++++++-------- .../blender/editors/space_view3d/drawobject.c | 19 ++++++------- 12 files changed, 88 insertions(+), 76 deletions(-) diff --git a/intern/elbeem/intern/solver_init.cpp b/intern/elbeem/intern/solver_init.cpp index ce54adb48ee..fee011a70ae 100644 --- a/intern/elbeem/intern/solver_init.cpp +++ b/intern/elbeem/intern/solver_init.cpp @@ -1464,7 +1464,7 @@ void LbmFsgrSolver::initMovingObstacles(bool staticInit) { obj->applyTransformation(targetTime, &mMOIVertices,NULL /* no old normals needed */, 0, mMOIVertices.size(), false ); } else { // only do transform update - obj->getMovingPoints(mMOIVertices,pNormals); + obj->getMovingPoints(mMOIVertices,pNormals); // mMOIVertices = mCachedMovPoints mMOIVerticesOld = mMOIVertices; // WARNING - assumes mSimulationTime is global!? obj->applyTransformation(targetTime, &mMOIVertices,pNormals, 0, mMOIVertices.size(), false ); diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h index 491e065d3ac..e5b2d3deab3 100644 --- a/intern/smoke/extern/smoke_API.h +++ b/intern/smoke/extern/smoke_API.h @@ -32,7 +32,7 @@ extern "C" { #endif -struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt); +struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float dt); void smoke_free(struct FLUID_3D *fluid); void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta); @@ -48,8 +48,8 @@ float *smoke_get_velocity_z(struct FLUID_3D *fluid); unsigned char *smoke_get_obstacle(struct FLUID_3D *fluid); -size_t smoke_get_index(int x, int max_x, int y, int max_y, int z, int max_z); -size_t smoke_get_index2d(int x, int max_x, int y, int max_y, int z, int max_z); +size_t smoke_get_index(int x, int max_x, int y, int max_y, int z); +size_t smoke_get_index2d(int x, int max_x, int y); void smoke_set_noise(struct FLUID_3D *fluid, int type); @@ -59,4 +59,4 @@ void smoke_get_bigres(struct FLUID_3D *fluid, int *res); } #endif -#endif /* SMOKE_API_H_ */ +#endif /* SMOKE_API_H_ */ \ No newline at end of file diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp index 3427b32e888..2822fca3607 100644 --- a/intern/smoke/intern/FLUID_3D.cpp +++ b/intern/smoke/intern/FLUID_3D.cpp @@ -38,8 +38,8 @@ // Construction/Destruction ////////////////////////////////////////////////////////////////////// -FLUID_3D::FLUID_3D(int *res, int amplify, float *p0, float *p1, float dt) : - _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.), _dt(dt) +FLUID_3D::FLUID_3D(int *res, int amplify, float *p0, float dt) : + _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f), _dt(dt) { // set simulation consts // _dt = dt; // 0.10 @@ -486,9 +486,11 @@ void FLUID_3D::setObstacleBoundaries() const int down = _obstacles[index - _xRes]; const int left = _obstacles[index - 1]; const int right = _obstacles[index + 1]; - const bool fullz = (top && bottom); - const bool fully = (up && down); - const bool fullx = (left && right); + + // unused + // const bool fullz = (top && bottom); + // const bool fully = (up && down); + //const bool fullx = (left && right); _xVelocity[index] = _yVelocity[index] = diff --git a/intern/smoke/intern/FLUID_3D.h b/intern/smoke/intern/FLUID_3D.h index c26ed14406a..2d212caa6d3 100644 --- a/intern/smoke/intern/FLUID_3D.h +++ b/intern/smoke/intern/FLUID_3D.h @@ -37,7 +37,7 @@ class WTURBULENCE; class FLUID_3D { public: - FLUID_3D(int *res, int amplify, float *p0, float *p1, float dt); + FLUID_3D(int *res, int amplify, float *p0, float dt); FLUID_3D() {}; virtual ~FLUID_3D(); @@ -166,11 +166,10 @@ class FLUID_3D float* oldField, float* newField, Vec3Int res, const float* obstacles, const float *oldAdvection); // output helper functions - static void writeImageSliceXY(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); - static void writeImageSliceYZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); - static void writeImageSliceXZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); - static void writeProjectedIntern(const float *field, Vec3Int res, int dir1, int dir2, string prefix, int picCnt, float scale=1.); + // static void writeImageSliceXY(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + // static void writeImageSliceYZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + // static void writeImageSliceXZ(const float *field, Vec3Int res, int slice, string prefix, int picCnt, float scale=1.); + // static void writeProjectedIntern(const float *field, Vec3Int res, int dir1, int dir2, string prefix, int picCnt, float scale=1.); }; #endif - diff --git a/intern/smoke/intern/FLUID_3D_SOLVERS.cpp b/intern/smoke/intern/FLUID_3D_SOLVERS.cpp index b628d48b943..5fd8f72d79d 100644 --- a/intern/smoke/intern/FLUID_3D_SOLVERS.cpp +++ b/intern/smoke/intern/FLUID_3D_SOLVERS.cpp @@ -78,7 +78,7 @@ void FLUID_3D::solvePressure(float* field, float* b, unsigned char* skip) deltaNew += _residual[index] * _residual[index]; // delta0 = deltaNew - float delta0 = deltaNew; + // float delta0 = deltaNew; // While deltaNew > (eps^2) * delta0 const float eps = SOLVER_ACCURACY; @@ -225,7 +225,7 @@ void FLUID_3D::solveHeat(float* field, float* b, unsigned char* skip) deltaNew += _residual[index] * _residual[index]; // delta0 = deltaNew - float delta0 = deltaNew; + // float delta0 = deltaNew; // While deltaNew > (eps^2) * delta0 const float eps = SOLVER_ACCURACY; @@ -316,3 +316,4 @@ void FLUID_3D::solveHeat(float* field, float* b, unsigned char* skip) } cout << i << " iterations converged to " << maxR << endl; } + diff --git a/intern/smoke/intern/FLUID_3D_STATIC.cpp b/intern/smoke/intern/FLUID_3D_STATIC.cpp index 7ebe987aaa2..a72009b9abf 100644 --- a/intern/smoke/intern/FLUID_3D_STATIC.cpp +++ b/intern/smoke/intern/FLUID_3D_STATIC.cpp @@ -29,6 +29,7 @@ ////////////////////////////////////////////////////////////////////// // add a test cube of density to the center ////////////////////////////////////////////////////////////////////// +/* void FLUID_3D::addSmokeColumn() { addSmokeTestCase(_density, _res, 1.0); // addSmokeTestCase(_zVelocity, _res, 1.0); @@ -37,11 +38,13 @@ void FLUID_3D::addSmokeColumn() { addSmokeTestCase(_wTurbulence->getDensityBig(), _wTurbulence->getResBig(), 1.0); } } +*/ ////////////////////////////////////////////////////////////////////// // generic static version, so that it can be applied to the // WTURBULENCE grid as well ////////////////////////////////////////////////////////////////////// +/* void FLUID_3D::addSmokeTestCase(float* field, Vec3Int res, float value) { const int slabSize = res[0]*res[1]; int maxRes = (int)MAX3V(res); @@ -69,6 +72,7 @@ void FLUID_3D::addSmokeTestCase(float* field, Vec3Int res, float value) } } } +*/ ////////////////////////////////////////////////////////////////////// // set x direction to Neumann boundary conditions @@ -114,7 +118,7 @@ void FLUID_3D::setNeumannY(float* field, Vec3Int res) for (int x = 0; x < res[0]; x++) { // top slab - int index = x + z * slabSize; + index = x + z * slabSize; index += slabSize - res[0]; if(field[index]<0.) field[index] = 0.; index -= res[0]; @@ -226,7 +230,6 @@ void FLUID_3D::copyBorderX(float* field, Vec3Int res) void FLUID_3D::copyBorderY(float* field, Vec3Int res) { const int slabSize = res[0] * res[1]; - const int totalCells = res[0] * res[1] * res[2]; int index; for (int z = 0; z < res[2]; z++) for (int x = 0; x < res[0]; x++) @@ -265,8 +268,6 @@ void FLUID_3D::advectFieldSemiLagrange(const float dt, const float* velx, const const int xres = res[0]; const int yres = res[1]; const int zres = res[2]; - static int hits = 0; - static int total = 0; const int slabSize = res[0] * res[1]; // scale dt up to grid resolution @@ -615,12 +616,16 @@ static int getOtherDir(int dir1, int dir2) { case 0: return 1; case 1: return 0; } break; + default: + return 0; } + return 0; } ////////////////////////////////////////////////////////////////////// // average densities along third spatial direction ////////////////////////////////////////////////////////////////////// +/* void FLUID_3D::writeProjectedIntern(const float *field, Vec3Int res, int dir1, int dir2, string prefix, int picCnt, float scale) { const int nitems = res[dir1]*res[dir2]; @@ -645,6 +650,8 @@ void FLUID_3D::writeProjectedIntern(const float *field, Vec3Int res, buf[bufindex] += field[index] * scale *div; } } - IMAGE::dumpNumberedPNG(picCnt, prefix, buf, res[dir1], res[dir2]); + // IMAGE::dumpNumberedPNG(picCnt, prefix, buf, res[dir1], res[dir2]); delete[] buf; } +*/ + diff --git a/intern/smoke/intern/IMAGE.h b/intern/smoke/intern/IMAGE.h index 772c0161c66..a57f164509e 100644 --- a/intern/smoke/intern/IMAGE.h +++ b/intern/smoke/intern/IMAGE.h @@ -77,7 +77,8 @@ template < class T > inline float MIN3V( T vec) { #include namespace IMAGE { - static int writePng(const char *fileName, unsigned char **rowsp, int w, int h, bool normalize) + /* + static int writePng(const char *fileName, unsigned char **rowsp, int w, int h) { // defaults const int colortype = PNG_COLOR_TYPE_RGBA; @@ -123,13 +124,14 @@ namespace IMAGE { if(png_ptr || info_ptr) png_destroy_write_struct(&png_ptr, &info_ptr); return -1; } + */ ///////////////////////////////////////////////////////////////////////////////// // write a numbered PNG file out, padded with zeros up to three zeros ///////////////////////////////////////////////////////////////////////////////// + /* static void dumpNumberedPNG(int counter, std::string prefix, float* field, int xRes, int yRes) { - /* char buffer[256]; sprintf(buffer,"%04i", counter); std::string number = std::string(buffer); @@ -153,12 +155,13 @@ namespace IMAGE { std::string filenamePNG = prefix + number + std::string(".png"); writePng(filenamePNG.c_str(), rows, xRes, yRes, false); printf("Writing %s\n", filenamePNG.c_str()); - */ + } - +*/ ///////////////////////////////////////////////////////////////////////////////// // export pbrt volumegrid geometry object ///////////////////////////////////////////////////////////////////////////////// + /* static void dumpPBRT(int counter, std::string prefix, float* fieldOrg, int xRes, int yRes, int zRes) { char buffer[256]; @@ -213,10 +216,12 @@ namespace IMAGE { gzclose(file); delete[] field; } + */ ///////////////////////////////////////////////////////////////////////////////// // 3D df3 export ///////////////////////////////////////////////////////////////////////////////// +/* static void dumpDF3(int counter, std::string prefix, float* fieldOrg, int xRes, int yRes, int zRes) { char buffer[256]; @@ -263,8 +268,10 @@ namespace IMAGE { gzclose(file); delete[] buf; } + */ }; #endif + diff --git a/intern/smoke/intern/WAVELET_NOISE.h b/intern/smoke/intern/WAVELET_NOISE.h index 72469c2b231..ccb540f6d4d 100644 --- a/intern/smoke/intern/WAVELET_NOISE.h +++ b/intern/smoke/intern/WAVELET_NOISE.h @@ -223,7 +223,7 @@ static bool loadTile(float* const noiseTileData, std::string filename) int gridSize = noiseTileSize * noiseTileSize * noiseTileSize; // noiseTileData memory is managed by caller - int bread = fread((void*)noiseTileData, sizeof(float), gridSize, file); + size_t bread = fread((void*)noiseTileData, sizeof(float), gridSize, file); fclose(file); printf("Noise tile file '%s' loaded.\n", filename.c_str()); @@ -330,22 +330,22 @@ static void generateTile_WAVELET(float* const noiseTileData, std::string filenam // x derivative of noise ////////////////////////////////////////////////////////////////////////////////////////// static inline float WNoiseDx(Vec3 p, float* data) { - int i, f[3], c[3], mid[3], n = noiseTileSize; + int c[3], mid[3], n = noiseTileSize; float w[3][3], t, result = 0; - mid[0] = ceil(p[0] - 0.5); + mid[0] = (int)ceil(p[0] - 0.5); t = mid[0] - (p[0] - 0.5); w[0][0] = -t; w[0][2] = (1.f - t); w[0][1] = 2.0f * t - 1.0f; - mid[1] = ceil(p[1] - 0.5); + mid[1] = (int)ceil(p[1] - 0.5); t = mid[1] - (p[1] - 0.5); w[1][0] = t * t / 2; w[1][2] = (1 - t) * (1 - t) / 2; w[1][1] = 1 - w[1][0] - w[1][2]; - mid[2] = ceil(p[2] - 0.5); + mid[2] = (int)ceil(p[2] - 0.5); t = mid[2] - (p[2] - 0.5); w[2][0] = t * t / 2; w[2][2] = (1 - t) * (1 - t)/2; @@ -372,22 +372,22 @@ static inline float WNoiseDx(Vec3 p, float* data) { // y derivative of noise ////////////////////////////////////////////////////////////////////////////////////////// static inline float WNoiseDy(Vec3 p, float* data) { - int i, f[3], c[3], mid[3], n=noiseTileSize; + int c[3], mid[3], n=noiseTileSize; float w[3][3], t, result =0; - mid[0] = ceil(p[0] - 0.5); + mid[0] = (int)ceil(p[0] - 0.5); t = mid[0]-(p[0] - 0.5); w[0][0] = t * t / 2; w[0][2] = (1 - t) * (1 - t) / 2; w[0][1] = 1 - w[0][0] - w[0][2]; - mid[1] = ceil(p[1] - 0.5); + mid[1] = (int)ceil(p[1] - 0.5); t = mid[1]-(p[1] - 0.5); w[1][0] = -t; w[1][2] = (1.f - t); w[1][1] = 2.0f * t - 1.0f; - mid[2] = ceil(p[2] - 0.5); + mid[2] = (int)ceil(p[2] - 0.5); t = mid[2] - (p[2] - 0.5); w[2][0] = t * t / 2; w[2][2] = (1 - t) * (1 - t)/2; @@ -415,22 +415,22 @@ static inline float WNoiseDy(Vec3 p, float* data) { // z derivative of noise ////////////////////////////////////////////////////////////////////////////////////////// static inline float WNoiseDz(Vec3 p, float* data) { - int i, f[3], c[3], mid[3], n=noiseTileSize; + int c[3], mid[3], n=noiseTileSize; float w[3][3], t, result =0; - mid[0] = ceil(p[0] - 0.5); + mid[0] = (int)ceil(p[0] - 0.5); t = mid[0]-(p[0] - 0.5); w[0][0] = t * t / 2; w[0][2] = (1 - t) * (1 - t) / 2; w[0][1] = 1 - w[0][0] - w[0][2]; - mid[1] = ceil(p[1] - 0.5); + mid[1] = (int)ceil(p[1] - 0.5); t = mid[1]-(p[1] - 0.5); w[1][0] = t * t / 2; w[1][2] = (1 - t) * (1 - t) / 2; w[1][1] = 1 - w[1][0] - w[1][2]; - mid[2] = ceil(p[2] - 0.5); + mid[2] = (int)ceil(p[2] - 0.5); t = mid[2] - (p[2] - 0.5); w[2][0] = -t; w[2][2] = (1.f - t); @@ -454,3 +454,4 @@ static inline float WNoiseDz(Vec3 p, float* data) { } #endif + diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp index 05e29442383..022c8f28252 100644 --- a/intern/smoke/intern/WTURBULENCE.cpp +++ b/intern/smoke/intern/WTURBULENCE.cpp @@ -56,7 +56,7 @@ WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify) _strength = 2.; // add the corresponding octaves of noise - _octaves = log((float)_amplify) / log(2.0f); + _octaves = (int)log((float)_amplify) / log(2.0f); // XXX DEBUG/ TODO: int casting correct? - dg // noise resolution _xResBig = _amplify * xResSm; @@ -561,7 +561,7 @@ Vec3 WTURBULENCE::WVelocityWithJacobian(Vec3 orgPos, float* xUnwarped, float* yU final[0] = WNoiseDx(p1, _noiseTile); final[1] = WNoiseDy(p1, _noiseTile); final[2] = WNoiseDz(p1, _noiseTile); - const float f1x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; + // UNUSED const float f1x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; const float f1y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; const float f1z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; @@ -569,7 +569,7 @@ Vec3 WTURBULENCE::WVelocityWithJacobian(Vec3 orgPos, float* xUnwarped, float* yU final[1] = WNoiseDy(p2, _noiseTile); final[2] = WNoiseDz(p2, _noiseTile); const float f2x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; - const float f2y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; + // UNUSED const float f2y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; const float f2z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; final[0] = WNoiseDx(p3, _noiseTile); @@ -577,7 +577,7 @@ Vec3 WTURBULENCE::WVelocityWithJacobian(Vec3 orgPos, float* xUnwarped, float* yU final[2] = WNoiseDz(p3, _noiseTile); const float f3x = xUnwarped[0] * final[0] + xUnwarped[1] * final[1] + xUnwarped[2] * final[2]; const float f3y = yUnwarped[0] * final[0] + yUnwarped[1] * final[1] + yUnwarped[2] * final[2]; - const float f3z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; + // UNUSED const float f3z = zUnwarped[0] * final[0] + zUnwarped[1] * final[1] + zUnwarped[2] * final[2]; Vec3 ret = Vec3( f3y - f2z, @@ -764,8 +764,6 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa { float maxVelMag1 = 0.; #if PARALLEL==1 const int id = omp_get_thread_num(), num = omp_get_num_threads(); -#else - const int id = 0; #endif // vector noise main loop @@ -795,8 +793,11 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa float yWarped[] = {0.0f, 1.0f, 0.0f}; float zWarped[] = {0.0f, 0.0f, 1.0f}; bool nonSingular = LU.isNonsingular(); +#if 0 + // UNUSED float eigMax = 10.0f; float eigMin = 0.1f; +#endif if (nonSingular) { solveLU3x3(LU, xUnwarped, xWarped); @@ -961,3 +962,4 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa _totalStepsBig++; } + diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp index c81d6fb8c50..cacd58fce13 100644 --- a/intern/smoke/intern/smoke_API.cpp +++ b/intern/smoke/intern/smoke_API.cpp @@ -34,7 +34,7 @@ extern "C" FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt) { // smoke lib uses y as top-bottom/vertical axis where blender uses z - FLUID_3D *fluid = new FLUID_3D(res, amplify, p0, p1, dt); + FLUID_3D *fluid = new FLUID_3D(res, amplify, p0, dt); // printf("xres: %d, yres: %d, zres: %d\n", res[0], res[1], res[2]); @@ -47,7 +47,7 @@ extern "C" void smoke_free(FLUID_3D *fluid) fluid = NULL; } -extern "C" void smoke_step(FLUID_3D *fluid, float dx) +extern "C" void smoke_step(FLUID_3D *fluid) { // fluid->addSmokeColumn(); fluid->step(); @@ -105,13 +105,13 @@ extern "C" unsigned char *smoke_get_obstacle(FLUID_3D *fluid) return fluid->_obstacles; } -extern "C" size_t smoke_get_index(int x, int max_x, int y, int max_y, int z, int max_z) +extern "C" size_t smoke_get_index(int x, int max_x, int y, int max_y, int z /*, int max_z */) { // // const int index = x + y * smd->res[0] + z * smd->res[0]*smd->res[1]; return x + y * max_x + z * max_x*max_y; } -extern "C" size_t smoke_get_index2d(int x, int max_x, int y, int max_y, int z, int max_z) +extern "C" size_t smoke_get_index2d(int x, int max_x, int y /*, int max_y, int z, int max_z */) { return x + y * max_x; } @@ -120,6 +120,3 @@ extern "C" void smoke_set_noise(FLUID_3D *fluid, int type) { fluid->_wTurbulence->setNoise(type); } - - - diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 416a208468b..fd9840f4b11 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -29,6 +29,8 @@ * ***** END GPL LICENSE BLOCK ***** */ +/* Part of the code copied from elbeem fluid library, copyright by Nils Thuerey */ + #include #include "MEM_guardedalloc.h" @@ -472,7 +474,7 @@ void smokeModifier_freeDomain(SmokeModifierData *smd) // free visualisation buffers if(smd->domain->bind) { - glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + glDeleteTextures(smd->domain->max_textures, (GLuint *)smd->domain->bind); MEM_freeN(smd->domain->bind); } smd->domain->max_textures = 0; // unnecessary but let's be sure @@ -528,7 +530,7 @@ void smokeModifier_reset(struct SmokeModifierData *smd) // free visualisation buffers if(smd->domain->bind) { - glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + glDeleteTextures(smd->domain->max_textures, (GLuint *)smd->domain->bind); MEM_freeN(smd->domain->bind); smd->domain->bind = NULL; } @@ -651,8 +653,6 @@ void smoke_calc_transparency(struct SmokeModifierData *smd, float *light, int bi void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm) { - int new = 0; - if(scene->r.cfra >= smd->time) smokeModifier_init(smd, ob, scene, dm); @@ -793,7 +793,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM continue; // 2. set cell values (heat, density and velocity) - index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2], sds->res[2]); + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); heat[index] = sfs->temp; density[index] = sfs->density; @@ -810,7 +810,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM for(j = 0; j < smd->domain->amplify; j++) for(k = 0; k < smd->domain->amplify; k++) { - index = smoke_get_index(smd->domain->amplify * cell[0] + i, bigres[0], smd->domain->amplify * cell[1] + j, bigres[1], smd->domain->amplify * cell[2] + k, bigres[2]); + index = smoke_get_index(smd->domain->amplify * cell[0] + i, bigres[0], smd->domain->amplify * cell[1] + j, bigres[1], smd->domain->amplify * cell[2] + k); bigdensity[index] = sfs->density; } } @@ -907,7 +907,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM continue; // 2. set cell values (heat, density and velocity) - index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2], sds->res[2]); + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); obstacles[index] = 1; @@ -964,7 +964,6 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM void smoke_prepare_View(SmokeModifierData *smd, float *light) { float *density = NULL; - size_t i = 0; int x, y, z; if(!smd->domain->tray) @@ -986,7 +985,7 @@ void smoke_prepare_View(SmokeModifierData *smd, float *light) { size_t index; - index = smoke_get_index(x, smd->domain->res[0], y, smd->domain->res[1], z, smd->domain->res[2]); + index = smoke_get_index(x, smd->domain->res[0], y, smd->domain->res[1], z); // Transparency computation // formula taken from "Visual Simulation of Smoke" / Fedkiw et al. pg. 4 // T_vox = exp(-C_ext * h) @@ -1091,7 +1090,7 @@ long long smoke_get_mem_req(int xres, int yres, int zres, int amplify) static void calc_voxel_transp(SmokeModifierData *smd, int *pixel, float *tRay) { // printf("Pixel(%d, %d, %d)\n", pixel[0], pixel[1], pixel[2]); - const size_t index = smoke_get_index(pixel[0], smd->domain->res[0], pixel[1], smd->domain->res[1], pixel[2], smd->domain->res[2]); + const size_t index = smoke_get_index(pixel[0], smd->domain->res[0], pixel[1], smd->domain->res[1], pixel[2]); // T_ray *= T_vox *tRay *= smoke_get_tvox(smd, index); @@ -1103,7 +1102,7 @@ static void calc_voxel_transp_big(SmokeModifierData *smd, int *pixel, float *tRa size_t index; smoke_get_bigres(smd->domain->fluid, bigres); - index = smoke_get_index(pixel[0], bigres[0], pixel[1], bigres[1], pixel[2], bigres[2]); + index = smoke_get_index(pixel[0], bigres[0], pixel[1], bigres[1], pixel[2]); /* if(index > bigres[0]*bigres[1]*bigres[2]) @@ -1301,7 +1300,7 @@ void smoke_calc_transparency(struct SmokeModifierData *smd, float *light, int bi int cell[3]; float tRay = 1.0; - index = smoke_get_index(x, res[0], y, res[1], z, res[2]); + index = smoke_get_index(x, res[0], y, res[1], z); // voxelCenter = m_voxelarray[i].GetCenter(); voxelCenter[0] = smd->domain->p0[0] + smd->domain->dx * bigfactor * x + smd->domain->dx * bigfactor * 0.5; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d0bee9c18f8..572759017df 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5342,12 +5342,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(smd->domain && smd->domain->fluid) { int x, y, z, i; - float *density = NULL; float viewnormal[3]; int mainaxis[3] = {0,0,0}; float align = 0; int max_textures = 0, counter_textures = 0; - int counter=0; float *buffer = NULL; int res[3]; float bigfactor = 1.0; @@ -5471,7 +5469,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(!smd->domain->viewsettings) // new frame or new start { smd->domain->max_textures = max_textures; - glGenTextures(smd->domain->max_textures, smd->domain->bind); + glGenTextures(smd->domain->max_textures, (GLuint *)smd->domain->bind); new = 1; // printf("glGenTextures\n"); } @@ -5480,9 +5478,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(new) { // printf("glDeleteTextures\n"); - glDeleteTextures(smd->domain->max_textures, smd->domain->bind); + glDeleteTextures(smd->domain->max_textures, (GLuint *)smd->domain->bind); smd->domain->max_textures = max_textures; - glGenTextures(smd->domain->max_textures, smd->domain->bind); + glGenTextures(smd->domain->max_textures, (GLuint *)smd->domain->bind); } } @@ -5501,24 +5499,23 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) size_t index; size_t image_index; float tray, tvox; + + image_index = smoke_get_index2d(y, res[mainaxis[1]], x); if(mainaxis[0] == 0) { // mainaxis[1] == 1, mainaxis[2] == 2 - image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); - index = smoke_get_index(z, res[mainaxis[0]], y, res[mainaxis[1]], x, res[mainaxis[2]]); + index = smoke_get_index(z, res[mainaxis[0]], y, res[mainaxis[1]], x); } else if(mainaxis[0] == 1) { // mainaxis[1] == 2, mainaxis[2] == 0 - image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); - index = smoke_get_index(x, res[mainaxis[2]], z, res[mainaxis[0]], y, res[mainaxis[1]]); + index = smoke_get_index(x, res[mainaxis[2]], z, res[mainaxis[0]], y); } else // mainaxis[0] == 2 { // mainaxis[1] == 0, mainaxis[2] == 1 - image_index = smoke_get_index2d(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); - index = smoke_get_index(y, res[mainaxis[1]], x, res[mainaxis[2]], z, res[mainaxis[0]]); + index = smoke_get_index(y, res[mainaxis[1]], x, res[mainaxis[2]], z); } if(!big) From 0d45058867d39355b551931c0870f69a21bae8ae Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 20:18:28 +0000 Subject: [PATCH 493/512] Smoke: compile error due to bad merged conflicts --- intern/smoke/extern/smoke_API.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h index e5b2d3deab3..b7819d06edc 100644 --- a/intern/smoke/extern/smoke_API.h +++ b/intern/smoke/extern/smoke_API.h @@ -32,7 +32,7 @@ extern "C" { #endif -struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float dt); +struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt); void smoke_free(struct FLUID_3D *fluid); void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta); From 9561d34dbb1adf3c1f6ef3d0f3811171e792a071 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 20:22:55 +0000 Subject: [PATCH 494/512] changes to defaults for sequencer strip adding --- release/ui/space_sequencer.py | 4 +--- source/blender/editors/space_sequencer/sequencer_add.c | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py index 4f60f5ccd61..4cba4d0af3a 100644 --- a/release/ui/space_sequencer.py +++ b/release/ui/space_sequencer.py @@ -149,10 +149,8 @@ class SEQUENCER_MT_add(bpy.types.Menu): layout.column() layout.itemO("sequencer.scene_strip_add", text="Scene") layout.itemO("sequencer.movie_strip_add", text="Movie") - layout.item_booleanO("sequencer.movie_strip_add", "sound", True, text="Movie & Sound") # FFMPEG ONLY layout.itemO("sequencer.image_strip_add", text="Image") - layout.itemO("sequencer.sound_strip_add", text="Sound (Ram)") - layout.item_booleanO("sequencer.sound_strip_add", "hd", True, text="Sound (Streaming)") # FFMPEG ONLY + layout.itemO("sequencer.sound_strip_add", text="Sound") layout.itemM("SEQUENCER_MT_add_effect") diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 4a300b7390d..99a13c8d9e0 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -310,7 +310,7 @@ void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot) WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE); sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); - RNA_def_boolean(ot->srna, "sound", FALSE, "Sound", "Load hd sound with the movie"); // XXX need to impliment this + RNA_def_boolean(ot->srna, "sound", TRUE, "Sound", "Load hd sound with the movie"); // XXX need to impliment this } @@ -416,7 +416,7 @@ void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot) WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE); sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); - RNA_def_boolean(ot->srna, "hd", FALSE, "HD Sound", "Load the sound as streaming audio"); // XXX need to impliment this + RNA_def_boolean(ot->srna, "cache", FALSE, "Cache", "Load the sound as streaming audio"); // XXX need to impliment this } /* add image operator */ From 7301f33b26ccae263d0bfdde5f82d98a70790fd5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 30 Jul 2009 21:42:29 +0000 Subject: [PATCH 495/512] remove some unused function args --- .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 2 -- .../Converter/BL_BlenderDataConversion.cpp | 19 +++++++------------ .../Converter/BL_BlenderDataConversion.h | 1 - .../Converter/BL_SkinMeshObject.cpp | 4 ++-- .../gameengine/Converter/BL_SkinMeshObject.h | 2 +- .../Converter/KX_BlenderSceneConverter.cpp | 6 ++---- .../Converter/KX_BlenderSceneConverter.h | 1 - source/gameengine/Ketsji/KX_ISceneConverter.h | 2 +- source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 3 +-- .../gameengine/Rasterizer/RAS_MeshObject.cpp | 5 ++--- source/gameengine/Rasterizer/RAS_MeshObject.h | 3 +-- 11 files changed, 17 insertions(+), 31 deletions(-) diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index ec751376d4a..d1b362557ad 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -383,7 +383,6 @@ extern "C" void StartKetsjiShell(struct ScrArea *area, { // convert and add scene sceneconverter->ConvertScene( - startscenename, startscene, dictionaryobject, keyboarddevice, @@ -682,7 +681,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area, { // convert and add scene sceneconverter->ConvertScene( - startscenename, startscene, dictionaryobject, keyboarddevice, diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index caa76263b25..7cae1ee8c28 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -326,7 +326,6 @@ bool ConvertMaterial( MFace* mface, MCol* mmcol, int lightlayer, - Object* blenderobj, MTF_localLayer *layers, bool glslmat) { @@ -752,11 +751,11 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* // Determine if we need to make a skinned mesh if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0) || BL_ModifierDeformer::HasCompatibleDeformer(blenderobj)) { - meshobj = new BL_SkinMeshObject(mesh, lightlayer); + meshobj = new BL_SkinMeshObject(mesh); skinMesh = true; } else - meshobj = new RAS_MeshObject(mesh, lightlayer); + meshobj = new RAS_MeshObject(mesh); // Extract avaiable layers MTF_localLayer *layers = new MTF_localLayer[MAX_MTFACE]; @@ -861,7 +860,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* if (!bl_mat) bl_mat = new BL_Material(); ConvertMaterial(bl_mat, ma, tface, tfaceName, mface, mcol, - lightlayer, blenderobj, layers, converter->GetGLSLMaterials()); + lightlayer, layers, converter->GetGLSLMaterials()); visible = ((bl_mat->ras_mode & POLY_VIS)!=0); collider = ((bl_mat->ras_mode & COLLIDER)!=0); @@ -1699,8 +1698,7 @@ static KX_GameObject *gameobject_from_blenderobject( Object *ob, KX_Scene *kxscene, RAS_IRenderTools *rendertools, - KX_BlenderSceneConverter *converter, - Scene *blenderscene) + KX_BlenderSceneConverter *converter) { KX_GameObject *gameobj = NULL; @@ -1912,7 +1910,6 @@ KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){ // convert blender objects into ketsji gameobjects void BL_ConvertBlenderObjects(struct Main* maggie, - const STR_String& scenename, KX_Scene* kxscene, KX_KetsjiEngine* ketsjiEngine, e_PhysicsEngine physics_engine, @@ -1925,7 +1922,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie, ) { - Scene *blenderscene = converter->GetBlenderSceneForName(scenename); + Scene *blenderscene = kxscene->GetBlenderScene(); // for SETLOOPER Scene *sce; Base *base; @@ -2021,8 +2018,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie, base->object, kxscene, rendertools, - converter, - blenderscene); + converter); bool isInActiveLayer = (blenderobject->lay & activeLayerBitInfo) !=0; bool addobj=true; @@ -2211,8 +2207,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie, blenderobject, kxscene, rendertools, - converter, - blenderscene); + converter); // this code is copied from above except that // object from groups are never in active layer diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.h b/source/gameengine/Converter/BL_BlenderDataConversion.h index 48f08fb357b..bf733b748e2 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.h +++ b/source/gameengine/Converter/BL_BlenderDataConversion.h @@ -37,7 +37,6 @@ class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class RAS_IRenderTools* rendertools,class KX_Scene* scene, class KX_BlenderSceneConverter *converter); void BL_ConvertBlenderObjects(struct Main* maggie, - const STR_String& scenename, class KX_Scene* kxscene, class KX_KetsjiEngine* ketsjiEngine, e_PhysicsEngine physics_engine, diff --git a/source/gameengine/Converter/BL_SkinMeshObject.cpp b/source/gameengine/Converter/BL_SkinMeshObject.cpp index 0a18296f261..4eb01df410b 100644 --- a/source/gameengine/Converter/BL_SkinMeshObject.cpp +++ b/source/gameengine/Converter/BL_SkinMeshObject.cpp @@ -46,8 +46,8 @@ #include "BL_SkinMeshObject.h" #include "BL_DeformableGameObject.h" -BL_SkinMeshObject::BL_SkinMeshObject(Mesh* mesh, int lightlayer) - : RAS_MeshObject (mesh, lightlayer) +BL_SkinMeshObject::BL_SkinMeshObject(Mesh* mesh) + : RAS_MeshObject (mesh) { m_bDeformed = true; diff --git a/source/gameengine/Converter/BL_SkinMeshObject.h b/source/gameengine/Converter/BL_SkinMeshObject.h index 8544a2b958c..e2d0e37664d 100644 --- a/source/gameengine/Converter/BL_SkinMeshObject.h +++ b/source/gameengine/Converter/BL_SkinMeshObject.h @@ -46,7 +46,7 @@ protected: vector m_cacheWeightIndex; public: - BL_SkinMeshObject(Mesh* mesh, int lightlayer); + BL_SkinMeshObject(Mesh* mesh); ~BL_SkinMeshObject(); void UpdateBuckets(void* clientobj, double* oglmatrix, diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 42b96d65622..4031b48847b 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -255,15 +255,14 @@ struct BlenderDebugDraw : public btIDebugDraw #endif -void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename, - class KX_Scene* destinationscene, +void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene, PyObject* dictobj, class SCA_IInputDevice* keyinputdev, class RAS_IRenderTools* rendertools, class RAS_ICanvas* canvas) { //find out which physics engine - Scene *blenderscene = GetBlenderSceneForName(scenename); + Scene *blenderscene = destinationscene->GetBlenderScene(); e_PhysicsEngine physics_engine = UseBullet; bool useDbvtCulling = false; @@ -357,7 +356,6 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename, } BL_ConvertBlenderObjects(m_maggie, - scenename, destinationscene, m_ketsjiEngine, physics_engine, diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index cf8dd5b339a..820f608509f 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -92,7 +92,6 @@ public: * dictobj: python dictionary (for pythoncontrollers) */ virtual void ConvertScene( - const STR_String& scenename, class KX_Scene* destinationscene, PyObject* dictobj, class SCA_IInputDevice* keyinputdev, diff --git a/source/gameengine/Ketsji/KX_ISceneConverter.h b/source/gameengine/Ketsji/KX_ISceneConverter.h index 3709fa8c784..5c2c0bc0ad2 100644 --- a/source/gameengine/Ketsji/KX_ISceneConverter.h +++ b/source/gameengine/Ketsji/KX_ISceneConverter.h @@ -47,7 +47,7 @@ public: destinationscene: pass an empty scene, everything goes into this dictobj: python dictionary (for pythoncontrollers) */ - virtual void ConvertScene(const STR_String& scenename, + virtual void ConvertScene( class KX_Scene* destinationscene, PyObject* dictobj, class SCA_IInputDevice* keyinputdev, diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index a43ea59220b..20600be81fc 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -1603,8 +1603,7 @@ KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename) scenename, scene); - m_sceneconverter->ConvertScene(scenename, - tmpscene, + m_sceneconverter->ConvertScene(tmpscene, m_pythondictionary, m_keyboarddevice, m_rendertools, diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp index 0ae6ad9d7ea..0995d5acdd5 100644 --- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp +++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp @@ -90,9 +90,8 @@ struct RAS_MeshObject::fronttoback STR_String RAS_MeshObject::s_emptyname = ""; -RAS_MeshObject::RAS_MeshObject(Mesh* mesh, int lightlayer) - : //m_lightlayer(lightlayer), - m_bModified(true), +RAS_MeshObject::RAS_MeshObject(Mesh* mesh) + : m_bModified(true), m_bMeshModified(true), m_mesh(mesh), m_bDeformed(false) diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h index bf9c0f7b682..f34546a8ff7 100644 --- a/source/gameengine/Rasterizer/RAS_MeshObject.h +++ b/source/gameengine/Rasterizer/RAS_MeshObject.h @@ -55,7 +55,6 @@ class RAS_MeshObject { private: unsigned int m_debugcolor; - //int m_lightlayer; bool m_bModified; bool m_bMeshModified; @@ -77,7 +76,7 @@ protected: public: // for now, meshes need to be in a certain layer (to avoid sorting on lights in realtime) - RAS_MeshObject(Mesh* mesh, int lightlayer); + RAS_MeshObject(Mesh* mesh); virtual ~RAS_MeshObject(); From da4ab9b14b24f8dca873441ba8a842acdbb60098 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Thu, 30 Jul 2009 22:11:28 +0000 Subject: [PATCH 496/512] Smoke: a) Crash fixed when loading files with smoke b) changed presets to be more low-cpu friendly c) smoke looks thicker Unsolved: a) 3dview of smoke changes weirdly when looking at front/back. Just move around a cube with smoke and you know what I mean - odd shading. If someone likes to take a look: draw_object.c -> search for "smoke" there --- intern/smoke/intern/VEC3.h | 2 ++ intern/smoke/intern/smoke_API.cpp | 1 - source/blender/blenkernel/intern/smoke.c | 6 +++--- source/blender/blenloader/intern/readfile.c | 16 ++++++++-------- source/blender/editors/space_view3d/drawobject.c | 2 +- source/blender/makesrna/intern/rna_modifier.c | 4 ++++ 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/intern/smoke/intern/VEC3.h b/intern/smoke/intern/VEC3.h index cc89b234e5a..607f68279a2 100644 --- a/intern/smoke/intern/VEC3.h +++ b/intern/smoke/intern/VEC3.h @@ -937,12 +937,14 @@ std::ostream& operator<<( std::ostream& os, const BasicVector::Vector3Dim& i ) { char buf[256]; +#if 0 #if _WIN32 sprintf(buf,globVecFormatStr, (double)i[0],(double)i[1],(double)i[2]); #else snprintf(buf,256,globVecFormatStr, (double)i[0],(double)i[1],(double)i[2]); #endif os << std::string(buf); +#endif return os; } diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp index cacd58fce13..9c835cf87ee 100644 --- a/intern/smoke/intern/smoke_API.cpp +++ b/intern/smoke/intern/smoke_API.cpp @@ -49,7 +49,6 @@ extern "C" void smoke_free(FLUID_3D *fluid) extern "C" void smoke_step(FLUID_3D *fluid) { - // fluid->addSmokeColumn(); fluid->step(); } diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index fd9840f4b11..7870e53963d 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -601,7 +601,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd) smd->domain->fluid_group = NULL; smd->domain->coll_group = NULL; smd->domain->maxres = 48; - smd->domain->amplify = 4; + smd->domain->amplify = 2; smd->domain->omega = 0.5; smd->domain->alpha = -0.001; smd->domain->beta = 0.1; @@ -990,7 +990,7 @@ void smoke_prepare_View(SmokeModifierData *smd, float *light) // formula taken from "Visual Simulation of Smoke" / Fedkiw et al. pg. 4 // T_vox = exp(-C_ext * h) // C_ext/sigma_t = density * C_ext - smoke_set_tvox(smd, index, exp(-density[index] * smd->domain->dx)); + smoke_set_tvox(smd, index, exp(-density[index] * 4.0 * smd->domain->dx)); } smoke_calc_transparency(smd, light, 0); } @@ -1022,7 +1022,7 @@ void smoke_prepare_bigView(SmokeModifierData *smd, float *light) // formula taken from "Visual Simulation of Smoke" / Fedkiw et al. pg. 4 // T_vox = exp(-C_ext * h) // C_ext/sigma_t = density * C_ext - smoke_set_bigtvox(smd, i, exp(-density[i] * smd->domain->dx / smd->domain->amplify) ); + smoke_set_bigtvox(smd, i, exp(-density[i] * 4.0 * smd->domain->dx / smd->domain->amplify) ); } smoke_calc_transparency(smd, light, 1); } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 8a376a0a170..3b976b7d658 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3645,12 +3645,14 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) else if (md->type==eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData*) md; + smd->point_cache = NULL; + if(smd->type==MOD_SMOKE_TYPE_DOMAIN) { smd->flow = NULL; smd->coll = NULL; - if(smd->domain) - smd->domain = newdataadr(fd, smd->domain); + smd->domain = newdataadr(fd, smd->domain); + smd->domain->smd = smd; smd->domain->fluid = NULL; smd->domain->tvox = NULL; @@ -3666,6 +3668,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) smd->domain = NULL; smd->coll = NULL; smd->flow = newdataadr(fd, smd->flow); + smd->flow->smd = smd; smd->flow->psys = newdataadr(fd, smd->flow->psys); } else if(smd->type==MOD_SMOKE_TYPE_COLL) @@ -10185,12 +10188,9 @@ static void expand_modifier(FileData *fd, Main *mainvar, ModifierData *md) if(smd->type==MOD_SMOKE_TYPE_DOMAIN && smd->domain) { - //if(smd->domain->coll_group) - expand_doit(fd, mainvar, smd->domain->coll_group); - //if(smd->domain->fluid_group) - expand_doit(fd, mainvar, smd->domain->fluid_group); - //if(smd->domain->eff_group) - expand_doit(fd, mainvar, smd->domain->eff_group); + expand_doit(fd, mainvar, smd->domain->coll_group); + expand_doit(fd, mainvar, smd->domain->fluid_group); + expand_doit(fd, mainvar, smd->domain->eff_group); } } } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 572759017df..fc700d8a8ad 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5486,7 +5486,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) mod_texture = MAX3(1, smd->domain->visibility, (int)(res[mainaxis[0]] / smd->domain->max_textures )); - for (z = res[mainaxis[0]]-1; z >= 0; z--) // 2 + for (z = 0; z < res[mainaxis[0]]; z++) // 2 { float quad[4][3]; diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 93e03808809..e9a46cc7d7f 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -178,11 +178,15 @@ static void rna_Modifier_dependency_update(bContext *C, PointerRNA *ptr) static void rna_Smoke_set_type(bContext *C, PointerRNA *ptr) { SmokeModifierData *smd= (SmokeModifierData *)ptr->data; + Object *ob= (Object*)ptr->id.data; smokeModifier_free(smd); // XXX TODO: completely free all 3 pointers smokeModifier_createType(smd); // create regarding of selected type // particle_system_slot_add_exec(C, NULL); // particle_system_slot_remove_exec(C, NULL); + + if(smd->type == MOD_SMOKE_TYPE_DOMAIN) + ob->dt = OB_WIRE; // update dependancy since a domain - other type switch could have happened rna_Modifier_dependency_update(C, ptr); From b55e996874c8b9a12b4a2a50f9d1993b5f921c57 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Thu, 30 Jul 2009 22:24:05 +0000 Subject: [PATCH 497/512] Sculpt/2.5: * Fix for bug reported by Brian Staub, sculpt on transformed objects wasn't working. --- source/blender/editors/space_view3d/view3d_select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 54e556b58ed..c1fbb676179 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -127,7 +127,7 @@ void view3d_get_transformation(ViewContext *vc, Object *ob, bglMats *mats) float cpy[4][4]; int i, j; - Mat4MulMat4(cpy, vc->rv3d->viewmat, ob->obmat); + Mat4MulMat4(cpy, ob->obmat, vc->rv3d->viewmat); for(i = 0; i < 4; ++i) { for(j = 0; j < 4; ++j) { From 2a727083c9cf6bb10b7506e8ed365831c458babc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 31 Jul 2009 01:40:15 +0000 Subject: [PATCH 498/512] fix for warnings and implicit declarations also fixed smoke comparing a float's mem-location rather then its value. --- source/blender/blenfont/BLF_api.h | 3 +++ source/blender/blenkernel/BKE_modifier.h | 1 + source/blender/blenkernel/intern/exotic.c | 6 +++--- source/blender/blenkernel/intern/modifier.c | 2 +- source/blender/blenkernel/intern/sequence.c | 2 +- source/blender/blenkernel/intern/smoke.c | 6 +++--- source/blender/editors/armature/editarmature.c | 2 +- .../blender/editors/armature/editarmature_retarget.c | 4 ++-- source/blender/editors/armature/meshlaplacian.c | 2 +- source/blender/editors/include/ED_previewrender.h | 2 +- source/blender/editors/mesh/editmesh_mods.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 2 +- source/blender/editors/mesh/meshtools.c | 2 +- source/blender/editors/object/object_edit.c | 8 ++++---- source/blender/editors/physics/ed_fluidsim.c | 2 +- source/blender/editors/preview/previewrender.c | 6 +++--- source/blender/editors/screen/screendump.c | 2 +- source/blender/editors/space_file/writeimage.c | 2 +- .../blender/editors/space_sequencer/sequencer_edit.c | 2 +- source/blender/editors/space_text/text_python.c | 4 ++-- source/blender/makesrna/intern/rna_modifier.c | 1 + source/blender/python/generic/bpy_internal_import.c | 10 +++++----- source/blender/render/intern/source/pipeline.c | 2 +- 23 files changed, 40 insertions(+), 35 deletions(-) diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index b77f4a8fcd1..c1b14a14f8c 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -140,6 +140,9 @@ char **BLF_dir_get(int *ndir); /* Free the data return by BLF_dir_get. */ void BLF_dir_free(char **dirs, int count); +/* Set the current draw mode. */ +void BLF_mode(int mode); + /* font->flags. */ #define BLF_ROTATION (1<<0) #define BLF_CLIPPING (1<<1) diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index 144ed3bc624..b65d77751e2 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -33,6 +33,7 @@ #include "DNA_modifier_types.h" /* needed for all enum typdefs */ #include "BKE_customdata.h" +struct ID; struct EditMesh; struct DerivedMesh; struct DagForest; diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index bc9a0ee99c1..8827897a509 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -334,7 +334,7 @@ static void read_stl_mesh_ascii(Scene *scene, char *str) */ numtenthousand = 1; vertdata = malloc(numtenthousand*3*30000*sizeof(float)); // uses realloc! - if (!vertdata); STLALLOCERROR; + if (!vertdata) { STLALLOCERROR; } linenum = 1; /* Get rid of the first line */ @@ -357,7 +357,7 @@ static void read_stl_mesh_ascii(Scene *scene, char *str) ++numtenthousand; vertdata = realloc(vertdata, numtenthousand*3*30000*sizeof(float)); - if (!vertdata); STLALLOCERROR; + if (!vertdata) { STLALLOCERROR; } } /* Don't read normal, but check line for proper syntax anyway @@ -1687,7 +1687,7 @@ static void displist_to_objects(Scene *scene, ListBase *lbase) if(totvert==0) { - if(ivsurf==0) ; //XXX error("Found no data"); + if(ivsurf==0) {}; //XXX error("Found no data"); if(lbase->first) BLI_freelistN(lbase); return; diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 8935d33b3bf..d86d563aaa2 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -5832,7 +5832,7 @@ static void smokeModifier_freeData(ModifierData *md) static void smokeModifier_deformVerts( ModifierData *md, Object *ob, DerivedMesh *derivedData, - float (*vertexCos)[3], int numVerts) + float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc) { SmokeModifierData *smd = (SmokeModifierData*) md; DerivedMesh *dm = NULL; diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c index 3eeecd94a85..4832086ac88 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequence.c @@ -58,7 +58,7 @@ /* **** XXX ******** */ static int seqrectx= 0; /* bad bad global! */ static int seqrecty= 0; -static void waitcursor() {} +static void waitcursor(int val) {} static int blender_test_break() {return 0;} /* **** XXX ******** */ diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 7870e53963d..fbf6beb835f 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -1144,7 +1144,7 @@ static void bresenham_linie_3D(SmokeModifierData *smd, int x1, int y1, int z1, i calc_voxel_transp(smd, pixel, tRay); else calc_voxel_transp_big(smd, pixel, tRay); - if(tRay < 0) + if(*tRay < 0.0f) return; if (err_1 > 0) { pixel[1] += y_inc; @@ -1166,7 +1166,7 @@ static void bresenham_linie_3D(SmokeModifierData *smd, int x1, int y1, int z1, i calc_voxel_transp(smd, pixel, tRay); else calc_voxel_transp_big(smd, pixel, tRay); - if(tRay < 0) + if(*tRay < 0.0f) return; if (err_1 > 0) { pixel[0] += x_inc; @@ -1188,7 +1188,7 @@ static void bresenham_linie_3D(SmokeModifierData *smd, int x1, int y1, int z1, i calc_voxel_transp(smd, pixel, tRay); else calc_voxel_transp_big(smd, pixel, tRay); - if(tRay < 0) + if(*tRay < 0.0f) return; if (err_1 > 0) { pixel[1] += y_inc; diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index a5028973e4b..c1b24375b3d 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -99,7 +99,7 @@ /* ************* XXX *************** */ static int okee() {return 0;} -static void BIF_undo_push() {} +static void BIF_undo_push(const char *msg) {} /* ************* XXX *************** */ /* **************** tools on Editmode Armature **************** */ diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index a1ce256a1af..1d87ca8a6df 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -466,12 +466,12 @@ static void renameTemplateBone(char *name, char *template_name, ListBase *editbo { if (template_name[i+1] == 'S' || template_name[i+1] == 's') { - j += sprintf(name + j, side_string); + j += sprintf(name + j, "%s", side_string); i++; } else if (template_name[i+1] == 'N' || template_name[i+1] == 'n') { - j += sprintf(name + j, num_string); + j += sprintf(name + j, "%s", num_string); i++; } else diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c index 8807b21e653..1b167518a5a 100644 --- a/source/blender/editors/armature/meshlaplacian.c +++ b/source/blender/editors/armature/meshlaplacian.c @@ -65,7 +65,7 @@ /* ************* XXX *************** */ -static void waitcursor() {} +static void waitcursor(int val) {} static void progress_bar() {} static void start_progress_bar() {} static void end_progress_bar() {} diff --git a/source/blender/editors/include/ED_previewrender.h b/source/blender/editors/include/ED_previewrender.h index 0e50ea896d6..41cbecb5353 100644 --- a/source/blender/editors/include/ED_previewrender.h +++ b/source/blender/editors/include/ED_previewrender.h @@ -71,7 +71,7 @@ void ED_preview_init_dbase(void); void ED_preview_free_dbase(void); void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, int sizex, int sizey); -void ED_preview_iconrender(struct Scene *scene, struct ID *id, int *rect, int sizex, int sizey); +void ED_preview_iconrender(struct Scene *scene, struct ID *id, unsigned int *rect, int sizex, int sizey); void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, rcti *rect); diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index 5fc2ce46792..86910706540 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -92,7 +92,7 @@ editmesh_mods.c, UI level access, no geometry changes #include "BLO_sys_types.h" // for intptr_t support /* XXX */ -static void waitcursor() {} +static void waitcursor(int val) {} static int pupmenu() {return 0;} /* ****************************** MIRROR **************** */ diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 93e91732b2b..d29a4e21913 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -94,7 +94,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise /* XXX */ static int extern_qread() {return 0;} -static void waitcursor() {} +static void waitcursor(int val) {} static int pupmenu() {return 0;} static int qtest() {return 0;} #define add_numbut(a, b, c, d, e, f, g) {} diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index c10fdbcfd8f..5d4be254593 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -96,7 +96,7 @@ #include "mesh_intern.h" /* XXX */ -static void waitcursor() {} +static void waitcursor(int val) {} static void error() {} static int pupmenu() {return 0;} /* XXX */ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 5fd5f4ff0ad..e470689f28c 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -138,10 +138,10 @@ /* ************* XXX **************** */ static void error() {} -static void waitcursor() {} -static int pupmenu() {return 0;} -static int pupmenu_col() {return 0;} -static int okee() {return 0;} +static void waitcursor(int val) {} +static int pupmenu(const char *msg) {return 0;} +static int pupmenu_col(const char *msg, int val) {return 0;} +static int okee(const char *msg) {return 0;} /* port over here */ static bContext *C; diff --git a/source/blender/editors/physics/ed_fluidsim.c b/source/blender/editors/physics/ed_fluidsim.c index a8862eb17de..907d3f99f77 100644 --- a/source/blender/editors/physics/ed_fluidsim.c +++ b/source/blender/editors/physics/ed_fluidsim.c @@ -100,7 +100,7 @@ /* from header info.c */ static int start_progress_bar(void) {return 0;}; static void end_progress_bar(void) {}; -static void waitcursor() {}; +static void waitcursor(int val) {}; static int progress_bar(float done, char *busy_info) {return 0;} static int pupmenu() {return 0;} /* XXX */ diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c index b542b362ae0..c5a741b11ed 100644 --- a/source/blender/editors/preview/previewrender.c +++ b/source/blender/editors/preview/previewrender.c @@ -892,7 +892,7 @@ static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int firs /* handle results */ if(sp->pr_method==PR_ICON_RENDER) { if(sp->pr_rect) - RE_ResultGet32(re, sp->pr_rect); + RE_ResultGet32(re, (unsigned int *)sp->pr_rect); } else { /* validate owner */ @@ -963,7 +963,7 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, i } /* rect should be allocated, sizex/sizy pixels, 32 bits */ -void ED_preview_iconrender(Scene *scene, ID *id, int *rect, int sizex, int sizey) +void ED_preview_iconrender(Scene *scene, ID *id, unsigned int *rect, int sizex, int sizey) { ShaderPreview *sp; short stop=0, do_update=0; @@ -975,7 +975,7 @@ void ED_preview_iconrender(Scene *scene, ID *id, int *rect, int sizex, int sizey sp->sizex= sizex; sp->sizey= sizey; sp->pr_method= PR_ICON_RENDER; - sp->pr_rect= rect; + sp->pr_rect= (int *)rect; /* shouldnt pr_rect be unsigned int also? - Campbell */ sp->id = id; shader_preview_startjob(sp, &stop, &do_update); diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c index d69c6dfcdba..2ae2712d02d 100644 --- a/source/blender/editors/screen/screendump.c +++ b/source/blender/editors/screen/screendump.c @@ -242,7 +242,7 @@ static void screenshot_startjob(void *sjv, short *stop, short *do_update) if(sj->dumprect) { if(mh) { - mh->append_movie(&rd, cfra, sj->dumprect, sj->dumpsx, sj->dumpsy); + mh->append_movie(&rd, cfra, (int *)sj->dumprect, sj->dumpsx, sj->dumpsy); printf("Append frame %d\n", cfra); } else { diff --git a/source/blender/editors/space_file/writeimage.c b/source/blender/editors/space_file/writeimage.c index ac15ed93ad0..994f38320f2 100644 --- a/source/blender/editors/space_file/writeimage.c +++ b/source/blender/editors/space_file/writeimage.c @@ -53,7 +53,7 @@ /* XXX */ static void error() {} -static void waitcursor() {} +static void waitcursor(int val) {} static void activate_fileselect() {} static int saveover() {return 0;} /* XXX */ diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 868897b76ac..5c82ff08094 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -95,7 +95,7 @@ //static int _last_seq_init=0; /* XXX */ static void error() {} -static void waitcursor() {} +static void waitcursor(int val) {} static void activate_fileselect() {} static int pupmenu() {return 0;} static int okee() {return 0;} diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c index b606f8cb141..4400747a731 100644 --- a/source/blender/editors/space_text/text_python.c +++ b/source/blender/editors/space_text/text_python.c @@ -353,7 +353,7 @@ short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) } if(draw) - ; // XXX redraw_alltext(); + {}; // XXX redraw_alltext(); return swallow; } @@ -536,7 +536,7 @@ short do_textmarkers(SpaceText *st, char ascii, unsigned short evnt, short val) } if(draw) - ; // XXX redraw_alltext(); + {}; // XXX redraw_alltext(); return swallow; } diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index e9a46cc7d7f..5192e2df611 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -37,6 +37,7 @@ #include "DNA_scene_types.h" #include "BKE_bmesh.h" /* For BevelModifierData */ +#include "BKE_smoke.h" /* For smokeModifier_free & smokeModifier_createType */ #include "WM_types.h" diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index 733576146b7..073cb58f1c8 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -111,8 +111,8 @@ PyObject *bpy_text_import( char *name, int *found ) PyObject *bpy_text_reimport( PyObject *module, int *found ) { Text *text; - char *txtname; - char *name; + const char *txtname; + const char *name; char *buf = NULL; //XXX Main *maggie= bpy_import_main ? bpy_import_main:G.main; Main *maggie= bpy_import_main; @@ -166,7 +166,7 @@ PyObject *bpy_text_reimport( PyObject *module, int *found ) } /* make into a module */ - return PyImport_ExecCodeModule( name, text->compiled ); + return PyImport_ExecCodeModule( (char *)name, text->compiled ); } @@ -273,8 +273,8 @@ static PyObject *blender_reload( PyObject * self, PyObject * args ) return newmodule; } -PyMethodDef bpy_import_meth[] = { {"bpy_import_meth", blender_import, METH_VARARGS | METH_KEYWORDS, "blenders import"} }; -PyMethodDef bpy_reload_meth[] = { {"bpy_reload_meth", blender_reload, METH_VARARGS, "blenders reload"} }; +PyMethodDef bpy_import_meth[] = { {"bpy_import_meth", (PyCFunction)blender_import, METH_VARARGS | METH_KEYWORDS, "blenders import"} }; +PyMethodDef bpy_reload_meth[] = { {"bpy_reload_meth", (PyCFunction)blender_reload, METH_VARARGS, "blenders reload"} }; /* Clear user modules. diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 4a84b1e78b6..83b55559a9a 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2316,7 +2316,7 @@ static void do_render_all_options(Render *re) if((re->r.scemode & R_DOSEQ) && re->scene->ed && re->scene->ed->seqbase.first) { /* note: do_render_seq() frees rect32 when sequencer returns float images */ if(!re->test_break(re->tbh)) - ; //XXX do_render_seq(re->result, re->r.cfra); + {}; //XXX do_render_seq(re->result, re->r.cfra); re->stats_draw(re->sdh, &re->i); re->display_draw(re->ddh, re->result, NULL); From 6aed229cc0d6ae4725151512b38878ec811dcbc2 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Fri, 31 Jul 2009 02:16:07 +0000 Subject: [PATCH 499/512] * Updated icon sheet, thanks jendryzch! --- release/datafiles/blenderbuttons | Bin 177476 -> 179274 bytes .../editors/datafiles/blenderbuttons.c | 11152 ++++++++-------- source/blender/editors/include/UI_icons.h | 12 +- .../editors/interface/interface_templates.c | 2 +- 4 files changed, 5611 insertions(+), 5555 deletions(-) diff --git a/release/datafiles/blenderbuttons b/release/datafiles/blenderbuttons index ec879651eb2b0be5d379a86f7d95fc71c5233f95..98c321cd954437b619c43da2298b1b581381b6c7 100644 GIT binary patch literal 179274 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%0AMufzZN02??n9V27ejDwK)2vs>o%=m-i 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 literal 177476 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 */ -int datatoc_blenderbuttons_size= 177476; +int datatoc_blenderbuttons_size= 179274; char datatoc_blenderbuttons[]= { -137, 80, 78, 71, - 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6,158, 0, 0, 0, - 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 10, 79,105, 67, 67, 80, 80,104,111,116,111,115, -104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75, -136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, - 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225,123,163,107,214, -188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199, -196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1, -120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64, -122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0, -128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, - 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, - 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, - 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, - 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, - 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37,238, 4,104, 94, - 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229,228,228,216, 74, -196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93,129, 71, 4,248, -224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, - 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, - 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128,104,131,225,207, -119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42, -176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, - 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, - 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, - 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59, -200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100,116, 49,154,143, - 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196,108, 48, 46,198, -195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, 18,129, 69,192, - 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34, -147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, - 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201,218,100,107,178, - 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83,226, 40, 82,202, -106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81, -135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17,221,149, 30, 78, -151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175, -152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, - 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212, -150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, - 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205,217,124,118, 42, -187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156,116, 78, 9,231, - 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72,171, 81,171, 71, -235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, 83,217, 83,221, -167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, 76,111,167,222, -121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, - 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15,140,105,198, 92, -227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, 76,199,205,204, -205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184,101, 73,178,228, - 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17,167,185, 78,147, - 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23,103,183,197,174, -195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58,222,154,206,156, -238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, 23,103,185,115, -131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245,157,155,179,155, -194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229,209, 63, 11,159, -149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97,239, 23, 62,246, - 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67,127, 35,255,100, -255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101,246,178,217,237, - 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, 14,133, 80,126, -232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119,209,220, 67,115, -223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63,198, 46,102, 89, -204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, 23,152, 47,200, - 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19, -119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236,145,188, 53,121, - 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, 49,131,146,145, -144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7,201,107,179,144, -172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, 43,205,237,204, -179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57,178, 60,113,121, -219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77,107,129, 94,193, -202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, 27, 62, 21,137, -138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207,102,210,102,233, -230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151,205, 40,219,187, -131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, 97,215,248,110, -209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73,251,179,247, 63, -174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29,210, 61, 84, 82, -143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233,247, 9,223,247, - 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, 98, 91,186, 79, -204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103,242,207,140,157, -149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139,231, 59,188, 59, -206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187,156,187,154,174, -185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61,221,189,243,122, -111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65,217, 67,221,135, -213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, 5,143,153,143, -203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203,174, 23, 22, 47, -126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, 30,190,201,120, - 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83,208,167,251,147, - 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,122, 37, 0, 0,128,131, 0, 0,249, -255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95,197, 70, 0, 2,170,111, 73, 68, 65, - 84,120,218,236,157,119,120, 20,197, 31,198,223, 45,215,239,210, 73, 15,132, 94, 67, 75,232,189, 55, 17, 4, 81, 1,193,142, 96, -193, 31,162, 2, 22, 4, 84,192, 10, 34, 2,138, 5, 5, 1, 69,165, 9, 82,165, 55, 9, 82, 67,232,129,116,146,144,126,125,119, -231,247, 71,114,231,229,114,185,187, 64, 66,115, 62,207,115,207,149,221,125,111,102,119,118,246,221,239,148,101, 8, 33,160, 80, - 40, 20, 10,133, 66,161, 84, 29, 44,221, 5, 20, 10,133, 66,161, 80, 40,247, 22,205,169, 38,213,164,154, 84,147,106, 82, 77,170, - 73, 53,255, 75, 16, 66,110, 42,130, 85, 29,109,138,164,244,213,253, 30,208,172,174,188, 87,165,118,247, 82,189, 25,247, 72, 58, -187,223,197,154,164, 26,116, 73, 53,148, 41, 82, 13,229,190,186, 53, 81, 77,121, 39,213,112,220,103,220, 35,233,236,126, 23,106, - 58,151,159,170,208,117, 85, 38, 73, 21,167,147, 84, 67, 58,171, 75, 19,213,148,119, 82, 77,199,190, 42,175, 77,119, 45,252, 93, - 96, 48, 0,128,113,208,103,238, 98, 77, 84,147,102, 85,167,111, 87, 53,104, 50,213, 80, 6,102,148,234,238,174, 66, 67,100,203, -123, 85, 28, 35, 82, 13,186,213,105,174,170,178,220, 87,183, 38,170, 73,147,169,226,253,185,171, 26, 52,171,234, 92, 34,213,112, - 46, 85, 71,153,119, 46, 63, 85,161,235,172, 89, 21,231,146,179,102, 85,148,251,219,161,137,106,210,100,170, 97,159, 86,199,181, -233,174,133,189,201,157, 85, 29, 16, 0, 61,238,114, 35, 84, 93, 38,179,170,163, 56,213,169, 89,149,199,104, 70, 53,220,205,244, -168,194, 99,196,184, 72,111, 85,106, 50,213,148,206,170, 56, 78, 76, 53,156, 75, 76, 53,156, 75, 76, 53,148,251,219,165, 89,149, -199,168,170,206, 37,166,154,206, 37,231,252,206,168, 98, 77,166,154,210, 89, 21,199,201,149, 38, 83, 13,154,213,145,247,238,119, -177,238, 93, 15,127,151,164,163, 58,140, 16,170, 48,146, 81,157, 81,156,234,138,180, 49,213,180, 95,119, 87,161,214,174,106, 72, -231,238, 42,188,163,117,101, 8,223,189,203,207,105,122, 46,209,115,233,110, 59,151, 72, 5, 55, 43,239,222,101,229,188, 42, 35, - 66,238, 52,110,245, 56,145, 10,110,212, 72, 21,166,179, 42,163,214,204,109, 58,159,238, 58,238,166, 81,132, 85,221,191,135,160, -122,162, 98,213,149,239,170, 76,103,143,123, 36,239,213,145,206, 25,213,148,247,123,101,159,210,115,137,158, 75,119,227,185,228, - 88, 38,171, 42,173, 85, 93,206, 93,105, 86,101, 63,164,170, 44,163,213,157,119,114,151, 31,251,123,130,155,137, 96, 85,215,221, -241,189,160, 89, 29,218,213,145,206,221,247,200, 62,173,142,116,206, 64,213, 54, 57, 50,213,144,214,234,108, 38,172,142,178, 89, -157,229,157,185,203,211,121,175, 28,247,234, 72,103, 85,157, 75, 76, 53,156,247, 76, 53,212, 79,213, 89, 54,171, 83,179, 42,180, -171, 35,157,213,117,236, 41, 20, 10,133, 66,161, 80, 40,255, 69, 8, 33, 21, 71,176, 90,183,110,189, 81,165, 82,213,175,104,185, - 94,175, 79, 63,113,226, 68, 79,186, 27, 41, 20,138, 23,176,248,183, 75,130,132,234,105,226,160, 80, 40,148,187,134, 10, 13,150, - 92, 46,175,187,103,207,158,134,146, 36, 65, 16, 4,136,162, 8, 81, 20, 33, 8, 2,204,102, 51, 30,126,248,225, 74, 55, 47,182, -108,217,114, 15,203,178,181, 43,179,141, 40,138,215, 78,158, 60,217,165,162,229, 33, 33, 33, 7, 0,212,101,152,127,163,142, 12, -195,192,246,221,241,119,150,181,119, 57, 75, 75, 73, 73,137,117,167,201, 48, 76, 93, 71, 61,103, 45, 23,186,110, 53, 27, 53,106, -116,148,231,249, 40, 87,219, 87,164, 45, 73,210,229,211,167, 79,119,162,197,244,246,208,178,101,203, 61, 28,199, 85,186,124,158, - 56,113,162,194,242, 25, 19, 19,243, 15,203,178, 17,174,142,113, 5,229,137, 19, 69,241, 92,169,166, 75, 3, 18, 22, 22,118,128, - 16, 82,215,203,114,105, 35, 37, 37, 37,165,141,167,243,200, 93, 58, 93,104,187,213,116, 52, 87,145,145,145,115,131,131,131, 39, -232,245,122, 35, 0,194,178, 44,177,105,219,116, 69, 81,204, 74, 76, 76,164,147, 23, 82, 40,148,251,219, 96, 73,146,196,154, 76, - 38,156, 63,127, 30,174,158, 87,200,178,172, 88,217, 63, 35,132, 52,220,177,114,121,136, 58, 56, 20,162,197, 12,101,141, 16,187, -118, 94,194, 41,136, 22, 11, 36,171, 5, 53,218,116,176,165, 1, 61,122,244,224, 60,200, 70, 77,154, 52, 41,196,199,199, 7, 70, -163, 17, 70,163, 17, 38,147, 9, 38,147, 9,102,179, 25,102,179, 25, 22,139, 5, 22,139, 5, 86,171, 21, 38,147, 9,167, 78,157, -114,155,118,134, 97,162, 38, 78,156,104,215, 52,153, 76, 48, 26,141,118, 45,147,201,100,215, 52,155,205, 48,153, 76, 56,115,230, -140, 91, 77,158,231,163,142, 29, 59, 22, 34,151,203, 65, 8,129, 36, 73, 32,132,148,121, 57,237, 43,116,238,220,217, 66,139,232, -109,165,225,218, 15, 63, 8, 81, 6,213,128,100,181, 34,168, 85,156,253, 88,164,238,248, 19,146,213, 10,201,106, 69,244,131,195, -237,191,119,239,222,221, 83,249,140,254,117,250, 52,127,185,143, 15, 4,163, 17,117, 6, 15,179, 47, 56,189,120, 30,136,213, 10, - 34, 88,208,226,213,183, 1, 0,217,217,217,134, 38, 77,154,164,193,253,232,173,168, 43, 87,174,132,216,210,224,108,212, 89,150, - 45,243,218,183,111, 31,198,140, 25,227, 41,239, 81,111,189,245, 86,136,237, 28,113, 44,235, 86,171,213,126,254, 8,130, 0,171, -213, 10,179,217,140,127,254,249,199,171,200, 85,120,120,248,135, 93,187,118,125,122,197,138, 21,218,223,127,255, 93, 91,167, 78, - 29,200,229,114,112, 28, 7,142,227,192,178, 44, 56,142,195,208,161, 67,105,223, 12, 10,133,114,255, 27, 44,139,197,114,165, 95, -191,126, 4, 0,204,102,115,164, 66,161,144, 59, 25,176,136, 78,157, 58,157,115,222,206, 83,211,161, 58, 56, 20,223,213, 9, 4, - 0, 60,114, 41,199,126, 81, 88,211,173,181,125,157, 81, 87,243, 75,214, 85,171,193,178, 44,227,193, 12, 65,167,211,161, 95,191, -126, 80, 40, 20,136,139,139,131, 92, 46,135, 76, 38,171,240,229, 13, 90,173, 22, 51,103,206,180,153, 35,104, 85, 74,188,208,181, - 3, 84, 12,193,119, 39, 18, 97, 18, 37,240, 60, 15,158,231, 33,147,201,202, 69,164, 92, 33,151,203,113,234,212, 41,112, 28, 7, -158,231,203,188,115, 28,135, 13, 27, 54, 96,196,136, 17,224, 56, 14, 26,141, 6,160,157, 1,111, 59,202,160, 26,248,181,123, 73, - 32,242,241,228, 66,251,239,127,142,124,208,254,121,108,106, 49, 24,134,129, 92, 46,247,238,184,251,248, 96,211,136,129, 0,128, -225,231,175,219,203,204,201,121, 31, 64,166, 80,128,151,201,209,124,210, 91,200,206,206, 54, 12, 31, 62,124,159, 74,165,218,226, -197,205, 10,174, 93,187,102,215,146,201,100,229,202, 61,203,178,248,254,251,239,113,245,234, 85,175,242,110, 48, 24, 48,123,246, -108,123,222, 92,233, 58,126,246, 34,239,108, 88, 88,216,251, 93,187,118, 29,179, 98,197,138, 0,134, 97,176,104,209, 34,240, 60, -143, 7, 30,120, 0, 65, 65, 65,216,186,117, 43,228,114, 57, 94,127,253,117, 90,248, 40, 20,202,127,195, 96,157, 56,113, 98,160, -237,115,251,246,237,207,238,219,183,175,177, 67, 40, 31,130, 32,200, 5, 65,104,104,107, 54, 20, 4, 1, 38,147, 9,163, 70,141, -114,123, 71, 47, 90,204,229, 12, 82, 69,198,201, 91,204,102, 51, 30,121,228, 17,187,137,113,103,174,188,185, 48, 48, 12, 3,147, -201, 4,158,231, 81,175, 86, 48,222,126,164, 13, 58,115, 4,134, 28, 0,217,197,120, 50,156,199,241,168,134,248,226, 90, 14,174, - 22, 20,129,231,189,107, 45,149, 36,169,140,161,114,254,188,100,201, 18,140, 28, 57, 18, 28,199,149,107, 66,162,220, 30, 36,171, -213, 99, 57,172,236,177, 17,140, 70, 0, 0,231, 96,200,101, 50, 25, 20, 42, 21, 56,153, 12,188, 66,142,236,236,108, 67,223,190, -125, 15,169,213,234, 31,194,194,194, 82, 83, 82, 82,220,150, 79, 66, 8,100, 50, 25,120,158,175,176,204,127,255,253,247, 88,190, -124, 57,218,181,107,231, 85,153, 55,155,205,144,203,229,248,224,131, 15,202, 45, 95,188,120,113, 57,131,229, 1, 6, 0, 27, 26, - 26,250,194,202,149, 43,125,109,255, 31, 20, 20, 4,153, 76,134,152,152, 24,248,248,248, 96,223,190,125, 16, 69,209,107,179, 74, -161, 80,254,155, 16, 66,100, 0, 90, 1, 8, 6, 32, 2, 40, 4,224,239,176, 74, 86,233,123,176,237, 59,195, 48,127,187,208,105, - 91,186, 78, 22,195, 48,127, 59,124, 55, 3, 80,184,248, 61, 7,128,186,244,101, 2,112, 0, 64,140,195,255,216,182,131,243,255, -218,156, 65,119,148, 76, 84,215, 3, 46, 38,191,179, 53, 23, 38, 38, 38,186,108, 46,116, 74,188,219, 90, 82, 89, 35,196, 30,185, -250,165, 94,144,253,247,145, 73,121,246, 10,118, 83,187, 6, 80,234,180,104, 51,227, 99,143, 59,221,118, 97,184,126,253,122,185, - 59,239,155, 53, 88, 0, 96,181, 90,161, 86, 43,241,215, 87,221,144,126, 89,192, 7, 27,147,177,238,200, 21,240, 60,143,193,141, - 27,224, 97, 1,152, 27,168,194,243,130, 8,139, 68,188,186,128, 17, 66,202,153, 43, 71,147,197, 48,140,253, 55,122,177,185, 51, - 4,181,138,179, 71,174, 86,212,244, 41, 23,181, 2,128,117,173,107, 67,229,163, 67,204, 43, 83,189, 42,159,117, 6, 15,179, 71, -174,254,136,171, 11, 94, 46,135, 76,169,192,195, 39,146, 1,148, 52, 11,246,106,209,116,119, 30,167, 88,246,196, 19, 79, 92,222, -177, 99,135,198,155,180,202,229,242, 50,134,205,149,185,226,121, 30, 86, 39,211,232,238,166,162, 34,227,100, 59,175, 42, 25,193, -130, 94,175, 55,175, 91,183, 14, 95,124,241, 5,130,130,130,208,175, 95, 63,132,133,133, 97,205,154, 53, 32,132,224,165,151, 94, -130, 90,173,134, 90,173,166,101,158, 66,161,184,243, 34,221,166, 77,155,214,102,238,220,185,179, 59,118,236,184,234,192,129, 3, - 43, 25,134,217,232,224, 61, 6,151,214,101, 27,109,223, 9, 33,109, 29, 77, 86,169, 73, 11,102, 24,102,163,109,125,199,239,182, -119, 66, 72, 31, 0, 10,219,247,105,211,166,197,204,157, 59,119,246,212,169, 83,223,156, 51,103,142,124,218,180,105, 45,230,206, -157, 59,219,246, 63,174,210,225,104,176,220,206, 2,108,177, 88,174,244,233,211,199,171, 17, 63, 6,131, 33,195,131, 1,115, 25, - 25,112,140, 10, 40,125,116, 80,251,248,128, 97,189,171,112,173, 86, 43,120,158, 7,203,178,216,182,109, 27,212,106, 53, 6, 13, - 26,116,211, 77,132, 54,211,166, 80,200,193,251,179,120,226,179,163,200,202,213,219,155, 4,183, 39, 37,227,136, 90,141,183,155, -182,128,174, 40, 9, 5, 38,243, 45, 69,176, 70,142, 28, 9,163,209, 8,150,101,237,191,177, 44,235,209,172, 82,170,143,138, 6, - 33, 48, 12, 3,149,175, 15, 84, 58, 29, 56,158,243, 74,139, 16,242,175, 17, 82, 40, 32, 83, 42,192,203,229,118,115,213,183,111, -223, 67,121,156, 98, 89,106,106,234, 33, 0, 42,111, 13,150, 45,130,229,206, 92,241, 60, 15,139,197,226,149,121, 49,153, 76,144, -203,255,237, 9,112,237,218, 53,183, 6,203, 83,182, 1, 72, 12,195, 72,117,235,214,181,111, 19, 26, 26, 10,127,127,127, 72,146, - 4, 73,146,160, 82,169,160, 86,171,203,252, 47,133, 66,249,207,226,206,139, 40,231,206,157, 59,219,209,192, 56, 27, 26, 71,227, -228,100,162, 28, 77, 90,140,135,186,127,163,179,105,178,253, 47,195, 48, 27,231,204,153, 51,216, 67, 58,178,156, 13,150,173, 66, -116,137, 99,115, 97, 85, 93,188,220, 93,192,212,126,190, 80,104,181, 40,237,126, 69, 60,105, 89, 44, 22,123,159,147, 9, 19, 38, - 84,120, 87,239,216, 55,197, 19,102,179, 25, 28,203, 1,202, 58,144,112,216,126,177,178,191,228,114, 36,213,106, 9, 38, 35, 21, - 60,239, 93,127,127, 91, 4,203,102,162, 94,122,233, 37, 44, 93,186,212,222, 49, 25, 0, 56,142, 67,163, 70,141,112,233,210, 37, -122,170,221, 1, 8, 33, 30,155,173, 85,190, 62, 80,234,116,224,188,136, 52,218,150,219,251, 48,169,148,224,228,114,240,242,146, -102,193, 33, 67,134,236,206,203,203, 91,214,172, 89,179, 11, 40,153,198,128,241,246,252,113, 85,206,151, 45, 91, 86,198, 92, 85, - 38,130,101, 59,143, 28,113,213, 92, 56,124,248,112,111, 35, 88,132, 97, 24, 34,147,201,208,167, 79, 31,180,104,209, 2,235,214, -173,131, 36, 73,120,241,197, 23,161, 86,171, 49,127,254,124, 8,130,128,185,115,231,210, 8, 22,133, 66,113,119,205, 55, 76,157, - 58,245, 77,134, 97, 54,150, 70,146, 78,187, 49, 82,174,234,246,182, 78, 38, 45,171,130,245, 6,187, 50, 89,142,159,109, 76,155, - 54, 45,198, 57, 29,142, 17, 51, 71,131, 85, 93,207,111, 43, 67, 94,194, 41,123,135,118, 91,179, 32,195, 48,248,179, 83, 99, 40, -116, 90,168,116, 58,116, 89,187,215,126,215,140,247, 63,245, 42,130,101, 51, 78, 57, 57, 57, 30,155, 8,189,141,138,113,114, 25, - 14,233,100, 32, 50,174,204, 5, 75, 38,147,129,229,101, 72, 10,110, 8,134,223, 10, 94, 20,188,186, 56,216, 34, 25,142,163,167, -158,120,226, 9,176, 44,107, 55, 89,173, 91,183,134,211, 49,161,220, 70,210,118,110,193,230,199, 74,206, 85,199,102,193,141,237, -234, 67,233,163,131, 82,171, 69,247, 13, 7,236,205,185,152,255,181, 71,205,196,111,191,196,233,207,231,128,151,201, 48,236, 88, -146, 61,114,213,185,113,131, 67,102,173,239,178,107,215,174, 29, 2,192, 62,246,216, 99,254,177,177,177, 94,133,197, 24,134, 41, -211,241,156,231,121,151,230,138,231,121, 8,130,224, 85,222, 45, 22,139, 87,145, 36, 91, 20,203,155,138,210,182,159,252,252,252, -224,227,227, 99, 31, 65,107,139, 92,217,250,111,122,123, 94, 82, 40,148,251,158,138,188,136,105,206,156, 57,167,231,204,153, 99, -143, 36, 57, 71,176, 42,184,238, 62, 80,106,166,130,109,230, 12,128,201, 85,255, 44, 87, 81, 49,103,227,229,248,219,220,185,115, -103, 59,167,195,177, 89,210,101,239,236,150, 45, 91,110,214,104, 52,117,188,221, 27,149,153,116, 84,180, 88,202,221,137, 51, 12, - 3,149, 78, 7,133,143, 14, 74,157,174,194, 40, 87, 69, 23, 26, 91, 19, 33,199,113,246,139,206, 15, 63,252, 0,157, 78,135,167, -158,122,234,166, 58,185,151, 24, 44, 14,235,229,231, 1, 57, 95,238,162,197,201,100,184,230, 87, 19,172, 76, 6, 94,244, 46, 66, -144,159,159, 15,142,227,240,238,187,239, 98,238,220,185,246, 97,244,142, 67,235, 29,163, 30,148,219,143, 99, 39,247, 50, 81, 85, - 31, 31,123,249,116,252,221, 83,159, 68,134, 97, 0, 81, 40, 25, 45,168, 84,216,205,213,144, 33, 67,118,155,181,190,203, 26, 55, -110,108,139, 92,177, 26,141,198,227,168, 89,199,115,195,102,116,156,205,149, 45, 74,106,251,108,181, 90,189, 42,243, 54,131,181, -116,233, 82,183, 55, 35,182,255,245,182,156,178, 44,139, 61,123,246,224,216,177, 99,152, 48, 97, 2,212,106, 53, 22, 44, 88, 0, - 65, 16, 48,107,214, 44,168,213,106, 40, 20, 10, 90,248, 40, 20,138, 59, 2,108, 6,167,212, 36,149,137, 44,149,246,157, 26,236, -248,221, 85,132,171, 52,226,180,199, 67,125,248, 71,169, 49,115,137, 45,146,230,180,205, 70,103,115,198, 59, 69, 74, 24, 0, 80, - 40, 20,117,246,239,223,223, 80,146, 36,136,162, 8,119,239,102,179, 25,143, 62,250,168,215,147,142, 74,214, 18,131,197, 58,141, -148, 83,250,250, 64,161,251,247, 2,230,112, 17,243, 88,139,219, 34, 88,142, 6,235,221,119,223, 5,207,243, 88,186,116, 41, 0, -224,181,215, 94,171,116, 4,139, 72,192, 1,113, 23, 34, 22,181, 4, 89,166, 66,230,158,179,144,201,100, 8,107,215, 23, 82,155, -135,145,163,240,133,182,180, 95,149, 55,205,142, 57, 57, 57,184,122,245, 42, 24,134,193,171,175,190,234,214, 92,109,219,182,141, -246,193,186,131, 6,139,229,184, 50,199,195,177,124, 58,153, 47,207,237,100,130, 0,153, 82, 89,102,180, 96, 94, 94,222,178,107, -215,174, 29, 6,192,140, 25, 51,198, 95,163,209,224,219,111,191,213, 3,144,175, 93,187, 86,237, 73,211,177, 31,159,115,228,202, -217, 96,137,162,231, 38,108,219, 77,133, 55,209,222,202, 24, 44, 91,249,102, 24, 6,162, 40,218, 35, 87, 86,171,213,254, 93,169, - 84,210,130, 71,161, 80,202,121, 17, 39,178,156,250, 57, 49, 78,145,166, 44, 87,198,202,177, 57,208,246,153, 97, 24,171, 11, 93, -179, 83,211,161,243,239,182,247,156, 57,115,230,252,101,139, 92, 57,252, 94, 38, 29, 21, 70,176, 88,150,133,201,100, 66, 66, 66, -130,183,119,168, 94, 79, 58, 26, 20,215, 30,163,174,230,131, 97, 24,108,237,218, 12, 42,157, 14,114,157, 22,157,126,221,101,175, -176,147,230,190, 14,185, 86,135,160, 46,125,189,170,192, 69, 81, 44,103,176,242,242,242, 32,147,201,240,254,251,239,131,101, 89, -124,248,225,135,136,140,140, 68,122,122, 58,186,119,239,238,213,197,134,149, 88,168,158, 12,132,234,121, 31,176, 19,234, 35,230, -193,231,145, 95, 88, 27, 39,205, 90, 52, 41, 62,143,128,157, 51, 96,145, 4,175,166,105, 96, 24, 6,130, 32,224,175,191,254,130, - 76, 38,131, 32, 8,246,139, 15, 33,196, 62, 75,190,109, 82,199, 15, 63,252,144,158,106,119,128,154, 15, 60,132, 39,210,244, 0, -128,205,157, 26, 67,169,213, 66,225,163, 67,151,223,247,216,203,231,229,217,147, 33,215,234,224,223,182,171, 87,154, 77, 95,124, - 13, 77, 94,152,140,236,236,108, 67,159,214, 49,123,242, 57,229,247,205,155, 55,183,247,185,210,104, 52, 80,169, 84, 12,202, 62, - 78,198,163,105, 97, 89,214,163,185,178,125,246,246,166,194,121, 20,174, 59,131,229, 45, 44,203,226,169,167,158, 66,120,120, 56, -190,248,226,139, 50,145,171, 55,223,124, 19, 86,171, 21,243,231,207,167,133,143, 66,161,184,171,247,254,246,118, 93, 66, 72, 91, - 7, 51,245,247,205,232, 86,230,255, 42,194,101,205,107, 50,153,146,122,247,238,141, 10,150, 69, 42,149,202, 50,181,171,109,210, - 81, 23, 77,133,205, 1,156,114,202,248,191,205,130,165,157,133, 21, 78,205, 46, 10,157, 15,100, 90, 29, 88,215,149,120, 57, 77, - 87, 17, 44, 91,211, 73,126,126, 62,100, 50, 25,190,248,226, 11,248,250,250,194,100, 50,185,186,243,118,169,201,113, 28,244, 87, -245,184,242,206, 73, 40,181, 23,209,168,175, 15,124,100,151,208, 96,239, 90, 8,130, 25,112,104, 50,244, 70,179, 81,163, 70,120, -247,221,119,203, 77,207, 80, 17,113,113,113, 30, 53,171, 0,170, 89,129,137, 81,250,232,160,242,241,169,176,124,242,174,231,110, - 42,163,105, 91,110,139, 92, 21,201, 53,223, 95,187,114,229, 48, 0,118,204,152, 49,126, 26,141, 6, 75,150, 44,209, 3, 96,223, -123,239, 61, 77,116,116, 52,231, 77, 58, 89,150,197, 15, 63,252, 80,174,207, 85, 69, 6,203,155,116, 10,130, 80,206, 96, 61,242, -200, 35,229, 38, 26,117, 19,193, 42,151, 78, 91, 31,172, 26, 53,106, 64,163,209,216, 31,187,165, 82,169,160, 82,169,236,179,195, -187,105,106,165,229,147,106, 82,205,255,142,230,109, 55, 99,213,137, 75,131,117,252,248,241, 1, 21,109,208,169, 83,167,243,251, -247,239,111,224,248,108, 66, 65, 16,228, 38,147,169,225,208,161, 67, 61,222, 42, 75,146, 4,165, 82, 9, 66, 8, 90,189, 61,183, -228, 22,158,253,183, 73,144, 16, 2,255,206,125,192,112, 28, 68, 81,130,213,106,245, 56,138,208,104, 52,150,233,128,238,106,248, -122, 81, 81,145,219,121,126,156, 53, 13, 6, 67,153,126, 93,140, 72,112,121,251,154,242,163, 9, 75,255,199, 91, 84, 42, 85,153, -102, 19, 47,195,165,148,219,132,109, 2, 79, 66, 8, 98, 38, 78, 45,137, 20,113,108,153,229,126,109,187,130,225,101,144, 74,250, - 45,121, 26, 24,194,100,101,101, 25,134, 12, 25,178,155, 16,242,221,208,161, 67,207,161,100,178, 58,162,211,233,148, 50,153, 76, - 2,112, 3, 0,201,205,205,245, 75, 77, 77,149,140, 70, 99, 45, 79,233,220,179,103, 15, 46, 94,188,136,216,216, 88,123,228,211, -246,178, 53,223,223, 76, 4,203,213,140,240, 21,205,228, 94,153, 8,150,159,159, 31, 20, 10, 5,222,127,255,125,200,229,114,168, -213, 37,173,160,243,231,207,183,239,115, 10,133, 66,185,159,168,244, 3,155, 37, 73,226, 42,106, 62,244,212, 84, 40,138, 98, 74, -251,246,237, 43,251,127,153, 30, 46,136, 41,123,247,238,149, 59, 63,144,214,213, 3,112, 29,126,243,168,249,247,223,127,203,221, -108,239,234,115,102,101,242,238, 77,255, 21, 65, 16, 82,105, 17,189,125, 8,130,144,210,174, 93, 59,215, 11,223,253,176,162,227, -154,233,193,180, 92,104,216,176, 97,154, 78,167,251, 35, 52, 52, 52,103,255,254,253, 65,109,219,182, 13,114, 92,167,109,219,182, -225, 78,155,153,225,102, 68, 47,195, 48, 41, 79, 60,241,132,220, 67,121,116,254,156,226,225,166, 34,229,244,233,211,114, 87,229, -189,162,119, 66, 72,138, 23,187,245,234,192,129, 3, 89, 87,231,144,139,125,153, 69, 75, 33,133, 66,249,207, 26, 44,163,209,152, -220,187,119,111,151,227,190,245,122,253, 53,119,219,158, 57,115,166, 77, 85,103, 32, 53, 53,181,211,189,160, 89, 29,121,167,220, -253,199,232,204,153, 51,237, 0, 32, 63, 63, 31,238, 30,127, 83, 25,146,147,147,171,188,124, 86,135, 38, 0, 36, 36, 36,116,164, - 37,139, 66,161, 80,131,229, 5,222, 78,199, 64,161, 80, 40, 20, 10,133,242, 95,133,165,187,128, 66,161, 80, 40, 20, 10,165,106, - 97, 80, 50, 18,192, 21,149, 25, 29,208,252, 38,254,251, 20,213,164,154, 84,147,106, 82, 77,170, 73, 53,255,115,154,158,180,239, -202,209,137,149,193,211, 36,212, 85, 65,115,170, 73, 53,169, 38,213,164,154, 84,147,106, 82,205,255, 18,132, 16,218, 68, 72,161, - 80, 40, 20, 10,133, 82,213,240,116, 23,220, 49, 56, 0, 98, 85,137, 17, 66,252, 1, 84,244, 64, 55, 51,195, 48,121, 55,169,171, - 0, 32, 43,125, 1,128, 21,128,149, 97, 24, 51, 61,132, 20,202,253, 69, 92, 92,220,211,132,144, 15, 80,242, 20,168,247,227,227, -227, 23,210,189, 66,161, 84,177,193,170, 87,175,222, 81,150,101,163, 92, 61,128,184,162,121,113, 68, 81, 76, 73, 76, 76,244,118, -168, 59, 31, 30, 30,254,136, 86,171,237,201,113, 92,231,210,237,247, 23, 23, 23,255,149,158,158,254, 11, 0,225,102, 50, 84,167, - 78, 29, 95,163,209,248, 40,195, 48,163, 75, 13,194, 79, 42,149,234,231, 43, 87,174, 20,220,228, 62,170, 31, 22, 22,246,147, 76, - 38,227,146,147,147,123, 2, 64,205,154, 53,255, 50,155,205,226,245,235,215, 71, 3,184, 88, 73, 61, 86, 46,151,207,109,223,190, -125,151,189,123,247,254, 8, 96,113, 21, 29, 75, 37,203,178, 87, 93, 45,144, 36, 41,250, 38,140,149, 28,128,223,252,249,243, 3, -151, 47, 95,222, 58, 61, 61,189, 5, 0,132,135,135,159, 28, 51,102,204, 63,132,144, 27, 0,242, 25,134,177,208,211,232,222,166, - 65,131, 6, 71, 89,150,141,170,204, 92,114,165,143,168, 74, 73, 72, 72,104, 83,145, 38,199,113, 81, 30,230,163, 43,247, 89,146, -164,203,103,206,156,113, 57,101, 68,195,134, 13, 15,114, 28, 87,199, 83,218, 92,165,179,162, 41, 56, 26, 54,108,120,148,227,184, -168,202,106, 74,146,116,249,244,233,211,157,170, 82,243,118,167, 19, 0,186,119,239,174, 44, 46, 46,254, 73,167,211,181, 44, 46, - 46,126, 90,146,164,233,187,118,237, 10,101, 89, 22,125,250,244,153, 30, 23, 23,119, 69,169, 84, 46, 50, 26,141,255,232,116,186, - 81,187,119,239, 54,209, 51,134, 66,185,245, 74, 55,179,168,168,136,216,144, 36,137, 88,173, 86, 98, 50,153,136,193, 96, 32,197, -197,197,164,176,176,144, 20, 20, 20,144,252,252,124,146,147,147, 67, 98, 98, 98,156, 39, 93,116,217, 70, 27, 25, 25,217,188, 81, -163, 70,231, 23, 46, 92,104, 74, 78, 78, 38, 22,139,133, 88,173, 86,146,156,156, 76,190,252,242, 75, 83,163, 70,141,206, 71, 70, - 70, 86,212,190,235,234,119, 54, 60, 60,188,111,120,120,248,202,254,253,251,155,119,236,216, 65, 76, 38, 19,209,235,245,100,195, -134, 13,164, 71,143, 30,230,240,240,240,149,225,225,225,125,225,122,228,100, 69,255,213,186, 78,157, 58, 23, 83, 82, 82,196,189, -123,247, 90,130,130,130,214, 7, 5, 5,173, 79, 78, 78, 22,175, 93,187, 38, 69, 69, 69, 93, 4,208,186, 18,233, 4,128, 97,147, - 39, 79, 78,186,114,229,138,190,123,247,238, 7, 29,126,103,224,121,230,246,230,174, 34, 87,132,144, 80, 66, 72, 24, 74, 38,167, - 44,247, 34,132,132,149,174,227,239,165,166,246,210,165, 75, 81,161,161,161,115, 75, 35, 85,101,244, 24,134, 49,135,134,134,206, -189,116,233, 82, 20, 33, 68, 91,137,188,223, 10, 84,179,154, 52, 27, 55,110,156, 81, 92, 92, 76, 8, 33, 68, 20, 69, 98,177, 88, -136,209,104, 36,122,189,158, 20, 21, 21,149, 57,207,109,175,188,188, 60,210,188,121,243, 76, 55,154,153,122,189,190, 76,221, 97, - 54,155,137,209,104, 36, 6,131,129,232,245,122, 82, 92, 92, 92,230, 85, 84, 84, 68, 90,183,110,157,236, 70, 51,221,150, 78, 73, -146,136, 32, 8,196, 98,177, 16,179,217, 76, 76, 38, 19, 49, 26,141,101, 94,182,223,218,181,107, 87, 97, 58,155, 52,105,146,105, - 48, 24,188,214,180,189, 98, 99, 99,211,170, 74,211,246, 91,171, 86,173, 50,220,105, 26,141,198,155, 73,103,178,187,178, 20, 23, - 23,247,219,149, 43, 87,136,193, 96, 32,125,251,246, 53,189,250,234,171, 68, 20, 69,178,113,227, 70,242,200, 35,143,144,231,158, -123,142,228,228,228,144,105,211,166,145,216,216,216,223,233,121, 68, 53,171, 89,243,190,129, 16, 82,113, 4,139,101, 89,104,181, - 90,172, 90,181,202,229,227,103,156, 63, 71, 71,123, 23, 36, 9, 13, 13,109, 19, 21, 21,181,123,237,218,181,234,144,144, 16,251, -239, 22,139, 5,190,190,190,120,234,169,167, 20,125,250,244,105,240,248,227,143, 31, 18, 4,161,123,102,102,230, 81,119,122, 97, - 97, 97,195,131,130,130, 22, 78,154, 52, 41,116,200,144, 33, 8, 8, 8, 40,179,124,240,224,193, 24, 52,104,144,252,242,229,203, - 35,127,249,229,151,145, 63,254,248, 99, 70, 81, 81,209,203, 25, 25, 25,191,185,211,213,104, 52,125, 26, 52,104,240,237,142, 29, - 59,162,252,253,253, 17, 17, 17,193,190,243,206, 59,205,235,213,171,167, 14, 15, 15,103,211,210,210,240,219,111,191,213, 27, 51, -102,204,186,107,215,174, 61,109, 50,153,118,120,145,125, 69, 96, 96,224,235,207, 63,255,124, 80, 97, 97,161,112,236,216, 49, 91, -244, 75,161, 84, 42,167,119,232,208, 33,118,215,174, 93,171, 1, 44,187,153,200, 21, 33,164, 0,255, 54,229,217,176,218,150,123, - 19,201, 34,132, 40,142, 29, 59, 22,208,185,115,231,223, 77, 38, 83,236,179,207, 62,155,250,241,199, 31, 43,124,125,125,125, 1, - 48,121,121,121,185, 51,103,206, 20, 23, 44, 88, 48,165, 89,179,102,189,247,239,223, 63,140, 16, 66,155, 12,239,113, 52, 26, 13, - 54,108,216,224,242, 49, 83,174,206,121,127,127,127,143, 79, 35, 80,171,213,216,182,109,155,125, 59,199, 71, 75,185,250,236,239, -239, 15, 66,136, 91, 81,149, 74,133,125,251,246,217, 31, 3, 84, 81,189,100,123,215,104, 52, 96, 24,134,245,164,185,123,247,110, -143, 90,182,119,157, 78, 7,148, 52,241,123, 76,167,167, 60,219, 62,107,181, 90,143,251, 83,169, 84,218, 53, 29, 53, 42,250,174, -213,106,225,233,166, 77,173, 86,183, 12, 13, 13,197,225,195,135, 49, 99,198, 12, 69, 76, 76, 12,206,159, 63, 15,150,101,241,244, -211, 79,163, 89,179,102,200,200,200, 64,179,102,205,176,111,223,190,214,244, 76,161, 80,188,199, 99, 31,172,138, 42, 88,231,207, -128,203,199, 96,148, 25,106, 25, 29, 29,173,148,201,100,191,110,216,176, 65, 29, 20,244,239,211, 66,204,102, 51, 10, 11, 11, 81, - 84, 84,132,194,194, 66,104,181, 90, 44, 90,180, 72, 61,122,244,232, 95,149, 74,101,195,171, 87,175,154, 42,210,100, 24,102,222, -241,227,199, 67, 5, 65,128, 66,161,168,208, 44,214,175, 95, 31, 47,191,252, 50,186,116,233, 18, 54,114,228,200,121, 0,126,171, - 72, 19, 0,194,195,195,191,220,191,127,127,148, 66,161,192,249,243,231,145,146,146,130,241,227,199, 71, 75,146,132,228,228,100, -156, 63,127, 30,105,105,105,248,250,235,175,163, 70,143, 30,189, 40, 53, 53,181,129,187,188,151,242,220,171,175,190,218, 32, 32, - 32,128,253,248,227,143,243,139,138,138,190, 46,253,125,218,252,249,243, 71,117,239,222, 61,248,217,103,159, 37,251,247,239, 95, -133,146,199,165, 84,184, 63, 29,251, 92,149, 54,231, 1,128, 72, 8, 57,235,180, 77, 19,135,229, 32,132,132, 2, 48, 49, 12,147, -239, 66,147, 1,224, 59, 96,192,128,201, 38,147, 41,118,239,222,189, 23,187,116,233, 18, 13, 32,157, 16,146, 5, 0, 1, 1, 1, -218,207, 63,255, 60,116,240,224,193,231,250,244,233, 19, 59, 96,192,128,201, 89, 89, 89, 31, 16, 66,178, 25,134, 33,110,242,126, -171, 80,205,106,210, 44,109, 74, 2,207,243, 24, 56,112, 32, 24,134,113,249,188,205,131, 7, 15,162,119,239,222,144,201,100,120, -230,153,103,188,214,236,223,191, 63, 4, 65, 40,167,231,108, 64,108,207,232,116,151,119, 66, 72,153,103,132,186, 50, 23,142, 47, - 23,122,229, 52, 37, 73,114,169, 85,145,201,178, 61,172,222,155,188,123,107, 46, 61,165,211, 81, 83, 38,147,161, 83,167, 78, 56, -118,236,152, 91,179,229, 41,157, 0, 80, 92, 92,252,228,208,161, 67,183,142, 31, 63, 94, 5, 0,217,217,217,101, 30, 68,159,152, -152, 8,147,201,132, 21, 43, 86,192,100, 50, 77,160,231, 17,213,172,102, 77,119, 55,255, 50, 0,173, 0, 4,163,164,255,114, 33, - 0,255,210,107,165, 2, 64, 14, 0,117,233,203, 4,160, 8, 64,141,210,205,179, 75,111, 54, 28, 31, 83,150,229,248, 80,104, 66, - 72,219, 82,109,219, 35,187,130, 29,214,181,253,135,243,119,231,119,187, 54,128,191,109,103,181,173,249,167,187,227, 9,109,123, - 8,171, 39,115,101,171, 28,189,216, 65, 47, 77,155, 54, 45,212,209, 92,153, 76, 38, 20, 20, 20,160,176,176,208,254,126,254,252, -121, 40, 20, 10, 60,242,200, 35,161,132,144,151, 60,200,202, 57,142,195,177, 99,199,176,118,237, 90, 92,185,114,165,220, 10,151, - 46, 93,194,231,159,127,142, 79, 63,253, 20, 5, 5, 5, 0, 32,175, 72,172,101,203,150, 51, 70,141, 26,117,168, 71,143, 30, 74, -158,231,113,252,248,113, 52,108,216, 16, 7, 14, 28,192,181,107,215,144,155,155,139,196,196, 68, 52,111,222, 28, 23, 47, 94, 68, - 65, 65, 1, 98, 98, 98,148,177,177,177,123,163,163,163,103,184, 75,103,100,100,228,155,207, 63,255,188, 50, 61, 61, 93,250,225, -135, 31,246, 3, 56, 0, 96,252, 91,111,189, 53,182,127,255,254,193,103,207,158, 45,248,251,239,191,143, 86, 96,174, 92, 69,174, -174,177, 44,123,149, 16, 82, 64, 8, 49,160,164, 3,122,153,139,145, 32, 8, 38,131,193,144,159,147,147,147,205,178,236, 85,150, -101,207, 3, 80, 86,164, 57,102,204,152,122,217,217,217, 47,254,239,127,255,187,210,165, 75,151,104, 66, 72, 34, 33, 36,167,180, -192,154, 4, 65,200,201,203,203, 59,215,185,115,231,240, 81,163, 70, 93,204,206,206,126,113,204,152, 49,245,220,104, 82,238,129, -104,182, 40,138,144,201,100,216,181,107, 23,246,237,219,135,125,251,246, 97,255,254,253, 56,112,224, 0, 14, 30, 60,136,131, 7, - 15,130,231,121, 28, 56,112, 0, 7, 14, 28,192,203, 47,191,236,241,156, 23, 69, 17, 60,207, 99,247,238,221, 56,114,228,136,253, -245,247,223,127,227,200,145, 35, 80,171,213,222,152, 33,199,155, 41,187,166,171,215,151, 95,126,105, 55,135,182,186,137,101, 89, -183, 81, 49,103,227,226,108, 88,162,107,215, 46,183,204, 83, 58,109,166,141,231,121,124,243,205, 55, 72, 77, 77,197, 23, 95,124, -129, 75,151, 46,225,163,143, 62,194,233,211,167, 49,107,214, 44,252,253,247,223,152, 54,109, 26,246,238,221,107,123,248, 59,241, -164,105, 51, 87, 22,139,197,158,158,196,196, 68,204,158, 61, 27,199,143, 31,199,244,233,211,113,240,224, 65,188,254,250,235,224, - 56,183, 65, 54,196,197,197, 61,205, 48,204, 47,141, 26, 53, 82,246,234,213, 11, 60,207, 99,246,236,217,210,244,233,211,175,191, -245,214, 91,215, 55,110,220, 72,234,213,171, 7,179,217, 12, 31, 31, 31, 16, 66,150,197,197,197,189, 68, 79, 23, 74,117,214, 69, -206, 94,196,129,110,211,166, 77,235,197, 48,204,198, 78,157, 58,141, 1,224,207, 48,204, 70, 0,138,210,247,160,105,211,166,181, - 99, 24,102,227,180,105,211,218, 0,168,193, 48,204,198,210,239, 61, 1, 4,217,190,151,174, 31,236,100,222,130, 29,126, 15,118, - 90, 87,225,234,187,243,187,179,182, 99, 4,139, 41,205, 24,227, 88, 65, 86,198, 96,121,170,112,117, 58,221,160, 1, 3, 6,200, - 29,205,149, 99,228,202,246, 94, 88, 88,136,115,231,206,161,121,243,230,114,157, 78, 55, 8,192, 39, 30, 67,113, 60,143,136,136, - 8,100,103,103,227,212,169, 83,136,142,142,134,213,106,197,150, 45, 91,144,151,151, 7,185, 92, 14,185, 92, 14,179,217,189,119, -105,210,164,201,192,229,203,151,183,249,241,199, 31,115,121,158, 71, 98, 98, 34,126,250,233, 39, 16, 66, 80,163, 70, 13,232,245, -122, 92,191,126, 29,243,230,205,131,197, 98,129, 78,167, 67,100,100,164,234,165,151, 94,234, 50,115,230, 76,217,213,171, 87, 43, - 50, 89,237,135, 15, 31,238,235,227,227,131, 87, 94,121, 69,178, 88, 44,159, 2,232, 48,124,248,240, 55, 95,126,249,229,192,164, -164, 36,243,115,207, 61,119,212, 98,177,204,179, 5, 15,157, 13,147, 11,195, 90, 97,228, 74, 16, 4,219, 62,189, 82, 88, 88,136, -144,144,144, 90,132, 16,185,135, 99, 36, 63,112,224, 64, 39, 0,220,123,239,189,167, 34,132,100, 58,166,193, 98,177,216, 52,133, -252,252,252,235,175,191,254,186,176,114,229, 74,174,116,155, 4, 0, 70, 90, 63,220,123,216,140,139, 76, 38,195,192,129, 3,203, - 24,138, 61,123,246, 96,192,128, 1,246,243, 93, 46,151,219,215,243,164,233, 24, 21,179, 69,158,108,186,127,253,245, 87,185,200, -139,151, 55,105,246, 8,139, 43,227,227,108,186,108, 55,138,222,152, 33, 87, 38,203, 86,183, 56, 71,134,188, 73,167, 76, 38,195, -203, 47,191, 12,158,231,241,250,235,175, 67, 38,147,161, 85,171, 86,224,121, 30, 29, 59,118, 4,207,243,232,217,179,167,215, 55, -168,182,116, 30, 60,120, 16,113,113,113,246,244,180,106,213, 10,109,219,182, 5,207,243,232,218,181, 43,120,158, 71,191,126,253, - 60,106, 18, 66,166,239,218,181, 43, 84,167,211,225,220,185,115,224, 56, 14, 12,195,228, 28, 59,118, 44, 20, 0, 30,120,224,129, -108,163,209, 24,100, 52, 26,209,187,119,111,116,234,212, 41,120,229,202,149,239, 0,160, 35, 11, 41,213, 90, 37, 57,123, 17, 91, - 0, 96,238,220,185,179, 9, 33,131, 43,218,208,182,156, 97,152,141,115,230,204, 25, 92, 90,206,203,125,119,136, 50, 57,154,183, - 24,199, 8,148,109, 59,199,255,115,247,223, 78,235,103, 57, 27, 44, 2,160,135,171, 74,215, 85,168,220,249,179, 55, 21,132,209, -104,108,101,139, 94, 25,141,198, 50,134,170,168,168,168,140,209, 50,155,205,168, 91,183, 46,140, 70, 99,171,202, 94, 44,194,195, -195, 97,177, 88,176,116,233, 82,187,177,114, 52, 9,238, 56,115,230,204,149, 67,135, 14,197,198,197,197, 5,252,254,251,239, 89, -125,250,244, 9,238,223,191, 63, 84, 42, 21,140, 70, 35, 4, 65, 64,251,246,237,209,164, 73, 19, 92,191,126, 29,155, 55,111,206, -110,216,176, 97,141,195,135, 15, 75, 25, 25, 25, 87,221, 72,247,238,221,187, 55, 24,134,193,230,205,155,111, 0,136, 87,169, 84, -191,205,158, 61,219,223,100, 50, 73, 99,199,142, 77,190,113,227,198,235, 0,172, 10,133,226,147,110,221,186,181,223,177, 99,199, -106, 73,146, 42, 93,153,153, 76,166, 50,251,182,176,176, 16, 26,141,198,155, 41, 33,100,121,121,121, 45, 0, 64,163,209, 4,194, - 97,132,164,193, 96,176, 31,163,210,227, 99, 12, 12, 12,212, 2, 64,233, 54, 50, 90, 47,220,187,216, 46,222,187,118,237, 42,115, -126,219, 34, 80,206,231,188, 66,161,192,134, 13, 27,188,210,116, 52, 83, 94, 52,231,185,141, 54,217, 12, 22,207,243,248,250,235, -146, 22,246, 87, 94,121,197,190,189,243,127,120, 83, 95,216,204, 16,207,243,104,242,174, 4,192,130,148,207, 84,144,201, 74,138, -180,115,154, 75, 43, 83,175,162, 98, 95,124,241, 5, 6, 15, 30,140,141, 27, 55,186,125, 31, 52,104,144, 87,233,228,121, 30, 74, -165,178,140,241, 59,126,252,184, 75,221, 37, 75,150,120,236,211, 38, 73, 18,254,248,227, 15,176, 44, 91, 38,226,245,246,219,111, - 63,175,213,106,117,187,119,239, 70,102,102, 38,138,139,139, 81, 84, 84,132,128,128, 0,255,222,189,123, 31,207,200,200, 72, 74, - 72, 72, 24, 70,207, 28, 74, 53, 69,177,122,184,248,221, 48,117,234,212, 55, 25,134,217, 56,117,234,212, 55,231,204,153,115,186, -244,220,216,232,116,174,108,244,112, 46,109, 44, 53, 67,127,151,158,203,109,157,204, 91, 22,195, 48,127, 19, 66, 30,168,104, 91, - 0,102, 39, 67, 85,166,137,176,116,123,247, 17, 44,231,190, 9,238, 62,151,134,184, 61, 85,184, 60,195, 48,229, 12,128,171, 8, -150,213,106, 69, 78, 78, 14, 36, 73,170,210,185,186, 60, 25,172, 83,167, 78, 61,245,244,211, 79,167,249,249,249,181,204,201,201, - 73, 87, 42,149, 93,247,236,217, 83,211,106,181,194,215,215, 23,190,190,190,216,180,105, 19,252,252,252,240,191,255,253,239,154, -193, 96, 56,160,213,106, 67, 13, 6,195,137,140,140,140,183, 43,116, 46, 50, 89,239,174, 93,187, 34, 62, 62, 30,121,121,121, 59, - 1,180, 28, 61,122,116,191,154, 53,107, 50, 31,124,240,129,241,226,197,139, 11, 1,100,105,181,218,111,150, 47, 95,222, 61, 54, - 54, 86, 55,118,236, 88,236,222,189,251,219,202, 68,134,244,122,125, 25, 99,101,219,167, 62, 62, 62, 94,205,185, 85,186,191, 9, -195, 48,196,118,231,239,104,172, 28, 12, 48,225, 56, 78, 2, 64,170,250, 24, 81,110,127, 4,203,118,174, 63,248,224,131,229, 58, -183,203,229,114,108,221,186, 21, 15, 61,244,144,253,134, 37, 46, 46,206,235,104,211,144, 33, 67,236,134, 96,235,214,173, 21, 26, - 44, 79, 77, 90,206,209,166,137, 19, 39, 66, 38,147, 97,225,194,133,152, 52,105, 18, 56,142,195,103,159,125, 6,150,101,241,206, - 59,239, 84,218, 92,202,100, 50, 92,249,176,228, 61,234,213, 2,228, 44, 14, 5, 0,248,248,250,150,228, 71,146,188,191, 66,148, -230,221, 83,228,202,209, 88,121,106, 34,116,140, 2,158, 63,127,222,254,185, 99,199,142,101, 34, 87, 60,207,123, 52,108,165,255, - 55,171, 87,175, 94, 31, 68, 69, 69,133,140, 31, 63,158,225,121, 30,109,218,180,169,209,167, 79,159,124,158,231, 85,175,189,246, -154,171,174, 20, 50, 0, 45,155, 54,109,170,165,103, 14,229, 54, 71,176, 76,115,230,204, 57, 61,103,206, 28,151, 17, 42,231, 72, -146,187, 72,147,205, 88,149,154,172, 96,155,105, 67, 73,255,228,191, 61,109,139,210, 38, 65, 87, 81, 46, 71,156, 35, 88, 51,157, - 43, 30,111, 12,150, 55,253, 39, 74,163, 34, 39,179,179,179, 59, 42,149, 74, 20, 20, 20,148,187,104, 59,154, 2,142,227,112,253, -250,117,104, 52,154,147, 85,121,228, 60, 53, 17, 2, 48, 94,184,112, 97,178,195,247,182,143, 60,242,200,202,213,171, 87,215,221, -190,125, 59, 14, 31, 62,140, 26, 53,106, 96,246,236,217,151,147,146,146, 70, 1,248,251,250,245,235, 30,255,183, 94,189,122,205, -116, 58, 29,246,239,223, 15, 0,123, 1, 60,249,194, 11, 47, 48, 22,139, 5,139, 22, 45,210, 3,216,238,231,231,247,219,154, 53, -107, 90,182,108,217, 82,185,125,251,246,194,195,135, 15,239,242,210, 92,137,132, 16,151,198,170,176,176, 16,197,197,197,208,233, -116,222, 24, 44,193,215,215,247, 84, 97, 97,225,163, 6,131,161, 64,169, 84,250, 20, 20, 20,152, 28, 35,140, 69, 69, 69, 40, 46, - 46, 6,207,243,178,243,231,207,167, 1,168,231,235,235,123, 10, 55, 57,111, 25,229,206,195,178, 44,177,153,140,237,219,183,187, - 60,215,101, 50, 25,182,108,217, 82,230,124,223,188,121,179, 71,211,198,243,188,125, 36,161,167, 8,150, 67,229,234, 62,204, 42, -147,129,227, 56, 44, 94,188,184,228,113, 20,165,145, 43,150,101, 49,117,234, 84, 40,149, 74,188,255,254,251,152, 58,117,170, 87, - 81, 44,199,168, 88,157, 41,134,127, 43,199,210,109, 45,102,115, 73,148,158,101, 29, 77,150, 87,145, 54, 79, 29,220, 43, 99,130, - 29, 35,109, 74,165,178,194,206,237, 46, 46, 86, 46,137,143,143,255,174,117,235,214, 23,131,131,131,183,117,234,212, 73,121,244, -232, 81,188,252,242,203,140,201,100,242,221,190,125,187,253,127, 93,237,175,226,226, 98, 21, 61,115, 40,213, 24,193,154,233,226, -247, 0,155,113, 42, 53, 67,222,158, 59, 27, 29,215,183,105, 56,155,162,210,136,216, 30, 79, 90,174,182,173, 8,190,162,147,208, -185,146,240,100,180,188,185,251, 52, 24, 12, 59,118,237,218,213,246,161,135, 30,226,221, 53, 15, 22, 21, 21, 33, 52, 52, 20,151, - 46, 93, 18, 12, 6,131,199,233, 15, 68,209,251, 9,209, 61, 69,176, 92,240,119,118,118,182, 96,177, 88,208,160, 65, 3, 68, 70, - 70,194, 96, 48,224,243,207, 63, 23, 0,252,237,165,134, 92,171,213,114, 0,144,159,159, 15,148,140,118,104,216,176, 97, 67,196, -199,199, 35, 55, 55,119, 29,128,222, 51,103,206,108,221,161, 67, 7,249,234,213,171,245, 19, 38, 76, 88,103,181, 90, 63,240,242, - 14,220, 44, 8, 66, 29,150,101, 45,121,121,121,169,142,198, 42, 52, 52, 52, 64,167,211,177,215,175, 95,183,122,179,123, 90,180, -104,113, 36, 37, 37, 5,239,189,247, 94,214,236,217,179, 27, 22, 22, 22,230,230,231,231, 11, 54, 99, 85, 80, 80, 0,131,193,192, - 6, 7, 7, 43,151, 44, 89,162, 1,128, 22, 45, 90, 28, 1, 64, 39, 28,189,151,107, 52,167, 1, 45,174,166,106,240,182, 51,186, -179,113, 25, 58,116,104,185,136,152,237,181,102,205,154, 50,253,154, 60, 53,189,217, 52,191,252,242, 75,188,242,202, 43, 80, 42, -149,152, 63,127,126,153, 62, 88, 21,220, 17, 87,168,105, 51,109,117,166, 24,144,177, 32, 16, 50,153, 12, 65, 19, 50,203, 52, 17, -186,200,155, 87, 70,112,246,236,217, 85,210, 68,232,104,250,108, 83,226, 44, 93,186, 20,143, 60,242, 8,246,238,221,123,211, 77, -132,117,234,212, 89,254,249,231,159, 43, 19, 18, 18, 80, 80, 80,128,172,172, 44, 24,141, 70, 36, 39, 39,219,143, 97, 5,145,114, - 53, 61,107, 40,213, 20,189,170,136, 44,167,254, 83,140, 99,115,157,155,119,231,245,225,240,155,163,110, 22,195, 48, 86, 23,255, -151,229,194, 84, 57,255,135,227, 58, 89,174, 34, 88,174, 46,220, 94, 79,211, 80,218, 65,210,147, 17,152,247,238,187,239,190,216, -165, 75,151, 64, 95, 95, 95,164,165,165,185,140, 96,249,250,250,194, 98,177, 96,215,174, 93, 5,146, 36,205,243,112, 64,172, 86, -171, 21, 33, 33, 33,200,206,206,134, 84, 65, 24,159,101, 89,168,213,106, 20, 21, 21, 1, 30, 58,143,187,186, 80, 88,173, 86, 88, - 44, 22, 88, 44, 22, 88,173,214,202, 22, 26,117,233,156, 52, 40, 46, 46, 6,128,226,136,136,136,122, 42,149,202, 54,234,241, 60, -128, 94,253,251,247,151,229,228,228,144,231,158,123,238, 32, 33,228,101, 15, 81, 33,243,174, 93,187,106, 3,128, 90,173, 62, 15, - 0,201,201,201,214,188,188, 60, 20, 21, 21,217, 35,132,106,181, 26,195,134, 13, 11, 35,132, 96,215,174, 93,181,229,114, 57,113, - 99,134, 76, 27, 55,110, 60,227,231,231,183,114,238,220,185,163, 30,120,224,129,211, 45, 90,180,168, 83, 84, 84,116, 93,175,215, - 27, 12, 6, 3,225,121, 94, 30, 20, 20,164,220,182,109,219,197,131, 7, 15,246,245,245,245, 93,185,113,227,198, 51, 40, 25,101, - 72,185, 23,107, 52,167,190, 77,174, 76, 85,101, 70,208, 57, 26, 23,158,231,177,101,203, 22,183, 81, 28,111, 53, 29, 77,198,228, -201,147,177, 96,193,130,114, 17,172, 15, 62, 40,185, 39,121,235,173,183, 42, 21, 33,226,121, 30, 25, 11, 2, 17, 54,241, 70,185, - 8, 22, 83,154,190,202, 52, 17,218,182,159, 53,107, 22,100, 50,153,189, 9,175,111,223,190,101,154, 6,189, 53, 86,142,154,215, -175, 95, 7,207,243, 8, 12, 12,196,168, 81,163,208,175, 95,191,114,122,222,234, 38, 39, 39,255,243,233,167,159,214,138,140,140, -196,234,213,171,205, 90,173, 86,209,171, 87, 47,146,159,159,207,184,139, 96, 25, 12, 6, 26,193,162,220,238,122,234,239,219,169, - 91, 21,255,199,123,170,116,111,113,154,134,230,112,152, 43,227,234,213,171,249, 97, 97, 97,163, 71,142, 28,249,251,226,197,139, -213,245,234,213, 67, 98, 98, 34,114,115,115, 97,177, 88, 32,151,203, 17, 17, 17,129,162,162, 34,252,250,235,175,122,189, 94, 63, - 58, 35, 35, 35,223,157, 38,195, 48,111, 13, 28, 56,112,201,219,111,191,173,106,214,172, 25,114,115,115, 81, 84, 84,100,191,243, - 98, 24, 6,190,190,190,208,104, 52, 56,117,234, 20, 14, 30, 60,104, 96, 24,230, 45,119,154,174,140,166,205, 88,217,140,150,167, -145, 73, 78,154, 90,141, 70, 99,187,243, 3, 0,161, 86,173, 90,161, 0,108, 6,235,106,221,186,117,223,174, 95,191, 62,179,124, -249,114, 66, 8,217, 94,129,185,178,107, 50, 12,147, 75, 8,201, 3, 16,106, 54,155,229, 0, 80, 80, 80, 96, 9, 10, 10, 10, 81, - 42,149,146, 82,169,148, 84, 42,149,148,158,158, 46, 8,130, 32, 7,128,238,221,187,155, 1,100, 58,245,245,112,212,148, 8, 33, -133,139, 22, 45,154,241,228,147, 79,118,236,220,185,115,204,115,207, 61,151, 48, 97,194, 4, 68, 70, 70, 6, 20, 21, 21, 25,207, -159, 63,159,183,120,241, 98,227,145, 35, 71,250,202,100,178,171,139, 22, 45,154, 1,160,144, 97, 24,201,219,253,121,147, 80,205, -106,210,180,149, 7, 87,198,202,241,187, 23, 70,168, 76, 58,109,166,237,209, 71, 31,181,143, 62,116,142, 92, 85, 86, 19,128,125, - 4,225, 27,111,188, 81, 38,125,111,191,253,182,183,119,197,142,121,183, 71,155,120,158, 71,254,210,200, 50,230,175, 18,166,170, -156, 38,207,243,152, 62,125,186,215, 17, 44, 23,125,176, 42, 76,103,247,238,221, 81, 92, 92, 12,153, 76,134,173, 91,183, 86, 24, -193,242,180, 63,213,106,245,168,117,235,214,253,164, 84, 42, 91,152,205,230,103,178,179,179,127,208,235,245,181,242,242,242,220, - 70,176,140, 70,163,146,158, 71, 84, 19,183,121, 46,172,123, 13,183,183,120,130, 32,160,102,205,154,101,158,109,101,235,204,206, -113,156,125,228,137, 55, 35, 8,109,100,100,100,108, 5, 48,124,216,176, 97, 43,158,124,242, 73,159, 38, 77,154,200,162,163,163, - 97, 48, 24,144,148,148,132,164,164, 36, 97,231,206,157, 5,122,189,254,241,210,117,221,146,150,150,246,163, 32, 8, 91,198,140, - 25, 51,189,117,235,214,227, 39, 77,154,196,213,173, 91, 23,249,249,249, 8, 8, 8, 64,112,112, 48,146,146,146,240,235,175,191, -138,121,121,121, 75, 68, 81,156,117,253,250,245,172,202,236, 36, 65, 16, 56,171,213,138,145, 35, 71, 66,146, 36,204,159, 63, 31, -130, 32,112,149,144,176, 88, 44, 22, 2,128,201,206,206, 6, 0,189,205,112, 93,184,112, 1, 0,174,213,174, 93, 91, 7, 0, 59, -118,236, 96, 80, 50, 63,150, 55,206,155, 16, 66,236,145,172, 38, 77,154, 36, 57, 87,138,182,200,149, 45,234,229,169, 35, 45,195, - 48, 70, 66, 72,150,201,100,234,255,234,171,175, 78, 95,186,116,233,168,165, 75,151,150, 91,207,215,215,119,229,103,159,125, 54, -107,212,168, 81, 89, 12,195,208,233, 25,238,135,202,192, 41, 90, 85,217, 46, 0, 21,105,174, 95,191,190, 50,147,107,186,141,138, - 49, 12,227,114, 68,162,187, 58,200,139,155,161, 10, 39, 20,189,149,168, 32,207,243,248,248,227,143,237,145, 43,199,206,231, 55, - 19,193,178,105, 6, 6, 6,150,220,181,105,181,144, 36, 9,131, 6, 13,186,105,221,210,103, 11, 14,183,125,143,139,139,155,181, -106,213,170, 15, 8, 33, 65, 0,120,199,125,224,205,126,164, 80, 40, 94, 24, 44, 81, 20, 83,122,244,232, 1,199,187, 39, 79, 15, -107, 21, 4, 33,197, 75,147,181,165, 78,157, 58,117,151, 46, 93,250,138, 86,171,237, 99, 52, 26, 91, 0,128, 74,165, 58, 89, 92, - 92,188,157,101,217,207, 51, 50, 50,188,126, 56,115,169, 97,122,137,101,217,249, 99,198,140,249,160, 83,167, 78, 35,158,123,238, - 57,134,231,121,252,242,203, 47, 36, 53, 53,117, 13,203,178,111,165,167,167, 95,186,153,157,164,209,104,206,173, 89,179,166,222, -250,245,235, 97,181, 90,177,100,201, 18, 40,149,202,115,149,144,200,218,185,115,231,138,206,157, 59,143, 58,120,240,224, 74, 0, -167,246,238,221,251, 83,183,110,221, 70, 31, 56,112,224,103, 0, 9,187,118,237,250,169, 83,167, 78,163,143, 28, 57,242, 27,128, - 19,149,168,116,237,145, 44, 65,112,221,162, 88, 65,228,202,157,102, 1, 33,196,242,244,211, 79,191, 58, 98,196,136,165,241,241, -241,237,109,211, 55,248,251,251,159,140,139,139, 59,188,102,205,154,196,210,200, 21, 53, 87,247, 56,182, 14,233, 1, 1, 1, 96, - 89,214,254,178,205,230, 93, 89, 35,100,211, 36,132, 32, 32, 32,192,229,141,153, 27, 77,183,174,134, 16, 2,157, 78,103,215,244, -114,244,178,199, 48,148, 78,167, 43,147, 70, 47, 32,158,242,238,156, 78,111,246,153, 39, 77,173, 86, 11,139,197,226,181, 38,188, - 24, 52,224, 72,124,124,252,119, 0,190,171, 95,191,254, 5, 0,245,169,169,162, 80,170,193, 96, 37, 38, 38,182,169,206, 63,190, -114,229, 74, 1,128, 89,165,175, 42, 33, 53, 53,245, 18,128, 71,247,237,219,247,201,129, 3, 7,222, 41,173, 92,223,243,244, 60, - 67, 79,156, 56,113,226, 33,153, 76,182,104,217,178,101,157, 8, 33,240,243,243, 59,112,241,226,197, 23, 42,163, 33,138,226,248, -131, 7, 15, 78, 66,233,168, 64,179,217, 60,126,223,190,125,175, 1, 40,182, 45, 63,116,232,144,253,123, 37, 47,102,132, 16, 98, - 38,132,132, 87,176,138,217, 91,115,229, 20,201, 50,175, 89,179,166, 8,192,113,252, 59,207,149,181,244,101,114,106, 22,164,220, -163, 8,130,144,218,163, 71, 15,222,211, 13,148,139,237, 82,220,221,160,117,237,218, 21, 55,161,153,234, 38,169, 87, 59,117,234, -196,122,171,101,195,106,181, 94,119, 99,190, 82, 58,118,236,232, 50,157, 30,246,153,219,188,119,236,216,177, 82,105, 44, 77, 75, -106, 85,107,122,216,159, 21, 98, 48, 24,114,131,131,131,139,140, 70,163,204,100, 50,201,156, 35,246,106,181, 58,203, 96, 48,208, -147,135, 66,185,131,208, 39,141, 83, 77,170, 73, 53,169, 38,213,164,154, 84,243, 63, 5, 33, 4, 44,221, 13, 20, 10,133, 66,161, - 80, 40, 85, 11,227,198,133, 86,102,116,192,205, 56,217, 83, 84,147,106, 82, 77,170, 73, 53,169, 38,213,252,207,105,122,210,190, -231, 71, 39,222,142,254,139, 52,124, 74, 53,169, 38,213,164,154, 84,147,106, 82,205,255, 20,180,137,144, 66,161, 80, 40, 20, 10, -165, 26,160, 6,139, 66,161, 80, 40, 20, 10,133, 26, 44, 10,133, 66,161, 80, 40, 20,106,176, 40, 20, 10,133, 66,161,252,183, 96, - 34, 35, 35,187,135,135,135,119,252,175,238, 0,158,150, 1, 10,133, 66,161, 80, 40, 85, 65,205,154, 53,253, 69, 81,124, 18,192, - 11,245,234,213,171, 7, 0, 12,195,156, 34,132,124,174, 86,171,127,186,116,233,146,249, 63,227, 48,105,113,160, 80, 40, 20, 10, -133,114, 43,132,135,135,183, 6,240,130, 90,173,126,188,125,251,246,138, 94,189,122, 33, 32, 32, 0,130, 32, 32, 61, 61, 29, 59, -119,238,196,241,227,199,111, 88,173,214, 69, 86,171,117, 81,118,118,118,230,253,188, 63, 8, 33,101, 12,214,238,210,247,238,180, -168, 80, 40, 20, 10,133, 66,241,134,176,176,176, 79, 7, 12, 24,240,106, 64, 64, 0, 26, 52,104,128,176,176, 48,152, 76, 38, 24, - 12, 6, 16, 66,192,243, 60, 8, 33, 40, 44, 44,196,209,163, 71,113,248,240, 97,161,160,160, 96, 37,195, 48,159,167,167,167,255, -227, 36,119, 95,120, 17, 71,131, 69, 0,244,112,202, 28,133, 66,161, 80, 40, 20,138, 91,194,195,195, 51,119,236,216, 17, 34,138, - 34,178,179,179, 97, 50,153,160,215,235,237, 6,139,227, 56, 16, 66, 32, 8, 2, 0, 64,146, 36, 36, 36, 36,224,224,193,131, 72, - 78, 78,254, 44, 35, 35, 99,242,253,230, 69,156,231,193,218, 77,205, 21,133, 66,161, 80, 40,148,202, 98, 50,153,176,124,249,114, -100,103,103,163,102,205,154,136,140,140,132,159,159, 31, 84, 42, 21, 0,216,205, 21, 0,176, 44,139,152,152, 24,140, 30, 61, 26, - 12,195,140,118,146,186,111,188, 8,237,228, 78,161, 80, 40, 20, 10,229, 86,176, 90, 44, 22,180,105,211, 6, 87,174, 92, 65,124, -124, 60, 98, 99, 99,209,180,105, 83,100,103,103, 35, 45, 45,173,204,202, 71,142, 28,193,177, 99,199,208,173, 91,183,251,122,167, -216,154, 8,103,224,223,246,206,238,180,172, 80, 40, 20, 10,133, 66,241,134,136,136,136,177,193,193,193,139,199,140, 25,163,110, -213,170, 21, 82, 82, 82,144,154,154,138,220,220, 92,180,110,221, 26, 49, 49, 49,184,116,233, 18,182,108,217,130, 99,199,142, 65, -169, 84, 34, 42, 42, 10,186,149,171,240, 71, 68,120,106,122,122,122,212,253,230, 69,156, 59,185,219, 50,179,155, 22, 23, 10,133, - 66,161, 80, 40,222, 18, 30, 30, 30,196, 48,204, 91, 17, 17, 17, 47, 62,254,248,227,178,250,245,235, 35, 37, 37, 5,217,217,217, -200,205,205,197,161, 67,135, 0, 0,145,145,145,136,140,140, 68, 82, 82, 18, 78,157, 58,101, 48,153, 76, 19,210,210,210,126,188, -223,188,136,179,193,162, 80, 40, 20, 10,133, 66,185, 21,163, 85, 19,192,204,250,245,235,143,125,228,145, 71,216,136,136, 8,164, -166,166, 98,231,206,157,168, 87,175, 30,174, 95,191,142,163, 71,143,138, 5, 5, 5, 75, 68, 81,156,117,253,250,245,172,251,113, - 63, 16, 66,170,253, 63,232,147,198,169, 38,213,164,154, 84,147,106, 82,205,255,152,102,104,104,104,147,240,240,240,181,253,250, -245, 35,139, 23, 47, 38, 47,189,244, 18,137,141,141,149,194,195,195,127,137,140,140,172,119,191, 27, 77, 66, 8,237,228, 78,161, - 80, 40, 20, 10,165,106,201,204,204, 60, 11,224, 33,134, 97,218,159, 62,125,250, 77, 0,144, 36,233,189,204,204,204,163,255,149, -125, 64, 13, 22,133, 66,161, 80, 40,148,106, 33, 45, 45,237, 48,128, 7,255,139,121,167, 15,123,166, 80, 40, 20, 10,133, 66,161, - 6,139, 66,161, 80, 40, 20, 10,133, 26, 44, 10,133, 66,161, 80, 40,148,255, 20, 12, 42, 30, 9,112,170, 18, 58, 55, 51, 66,225, - 20,213,164,154, 84,147,106, 82, 77,170, 73, 53,255,115,154,158,180, 79,225, 30,167, 50,211, 52,220,236,124, 89,116, 8, 43,213, -164,154, 84,147,106,222, 59,154, 76, 21,105, 50,165, 47,182,244,197, 84, 82,251,118,165,243, 94,201,251,127, 69,243,190,193,155, -105, 26, 28,119,146, 84,250,170,138,217,179,108, 7,160,170,244, 40, 85,143,227,137, 65,232,113,162, 80,238,107,170,178,174,183, -213, 29,156,131,166, 88,250,194, 45,214, 37,213,113, 77,186,219,243,254, 95,214,188,167,225,221,237,168,224,224,224,173, 33, 33, - 33, 61,179,179,179, 37, 0, 96, 24, 6, 44,203,130,101, 89,240, 60,111, 72, 74, 74,242,173,236, 31,134,132,132,124, 27, 28, 28, -252,100, 78, 78,142,100,211, 98, 24, 6, 28,199,129,227, 56,195,165, 75,151,124,239,244, 78,137,141,141,205, 53,155,205, 58,231, -223, 21, 10,133,241,216,177, 99, 62,255,133,114,209,176, 97,195,199, 52, 26,141,186, 34,115,254,207, 63,255, 44,245, 86,172,118, -237,218, 71,212,106,181, 63,207,243,224, 56, 14, 60,207,163,184,184, 56,239,236,217,179,237, 74,151,239, 87,171,213, 65, 28,199, -217,202, 22,140, 70, 99, 78, 66, 66, 66,103,122,221, 43, 79,247,238,221,121, 84,126,138, 21, 97,247,238,221,194,109,188,123, 99, -205,241, 62,245, 25,193,208,146, 97,137, 31,145,152,124,194,171, 79, 40,226, 10, 47,122, 85, 83, 51,140,116,135,119,115, 45, 0, - 2,128,180, 74,231,221,197, 29, 59, 15, 12, 16,129,145,165, 95,141, 44,144,195, 0,231,131,128, 95, 51, 1,131, 83,229,123, 59, - 47, 68, 12, 0, 38, 42, 42,234,243,208,208,208,167, 10, 11, 11,245, 28,199,129, 97, 24,194, 48,140,237, 88, 56, 30, 23, 72,146, -148,114,230,204,153, 54, 30, 46,178,178, 90,181,106,125, 22, 28, 28,252,132, 94,175,215, 51, 12, 99,215,180,189, 28,181, 69, 81, - 76, 57,125,250,116,155,219,152,206, 59,146,119, 71, 45,219,119, 73,146,220,229,221,174, 25, 21, 21,245, 89,104,104,232, 19, 69, - 69, 69,250,210,235,230, 45,167,243, 46,215,188,111, 13, 22, 27, 18, 18,178,174, 93,187,118, 61,214,175, 95,207,158, 61,123,150, -109,210,164, 9, 68, 81,132, 36, 73, 32,132, 32, 46, 46, 78, 83,217, 63, 11, 13, 13,253,161, 77,155, 54, 35, 55,108,216,192,174, - 91,183,142,109,219,182, 45, 24,134,129, 40,138, 16, 69, 17,189,123,247, 86,223, 98,126,116, 60,207, 79, 82, 40, 20,221, 5, 65, -104, 10, 0, 50,153, 44,193,100, 50,237, 22, 4, 97, 30,128, 34,111, 68,172, 86,171,230,244,233,211,229,246, 77,187,118,237, 20, - 55,155,176, 6, 13, 26, 28, 96, 89,182,174, 99, 33,243,244, 78, 8,185,124,230,204,153, 78, 21,105, 54,106,212,200,163,166,243, -111,146, 36, 93, 62,125,250,116, 39,119,101,162, 65,131, 6, 35,155, 53,107,166,250,229,151, 95,144,156,156, 12,173, 86, 11, 73, -146, 32,138, 34,172, 86, 43, 30,122,232,161, 74,133,124,213,106,181,239,206,157, 59,235,135,132,132,224,250,245,235,200,206,206, -198,248,241,227,207, 59, 44, 15,250,235,175,191, 26, 6, 6, 6, 66,175,215, 35, 63, 63, 31,163, 71,143,190,231, 79,174,190, 93, -235,190,207, 0,129,182,239,162,132, 27, 59,246, 95,126,251, 86,117, 77, 38, 83,186, 40,138, 1, 78,134,196,237, 54, 28,199,229, - 2, 8,246,228,133, 1, 60,200,113, 92, 3,153, 76,214,152, 16, 82, 91, 16,132, 80, 0,144,203,229,153, 28,199, 37, 89,173,214, - 68,179,217,124, 1,192, 6, 0, 73, 21, 9,153,227,125,234,139, 38,253,136, 98,147, 52, 72, 34, 8, 99, 25,100,104,149,250, 77, -230,120,159, 53,222,154,172, 59, 72,157,136,136,136,143, 1, 32, 45, 45,237,117, 0, 87,110, 85, 80, 4, 70, 18, 66,252, 0, 32, - 63, 63,223, 47, 57, 57, 57,108,195,134, 13, 49,179,103,207,238,165, 48, 26, 63, 50, 3, 9,238,182,239,211,173,222, 81,158, 97, -162,236,110,153, 72, 41,219,247, 92,174,138, 11, 19, 27, 25, 25,249,249,192,129, 3,199, 44, 89,178, 68,115,248,240, 97, 77,139, - 22, 45, 74,111,124, 97,175,239, 9, 33,246, 50,214,161, 67, 71, 79,134,141,143,136,136,152, 63,112,224,192, 81,139, 22, 45,210, - 36, 38, 38,106,234,212,169, 99,215,116, 44,179,182, 27,236, 86,173, 90,223,238,116, 86,107,222,251,247,239, 63,106,201,146, 37, -154,147, 39, 79,106, 26, 54,108,104,215,116,238,151,195,178, 44,218,180,105,235,149,230,128, 1, 3, 70,125,245,213, 87,154,248, -248,120, 77,211,166, 77, 75, 77, 26,236,105,188,153,116,222,229,154,247,165,193, 98,131,131,131,151,183,105,211,166,255,250,245, -235, 57, 0,136,143,143, 71, 78, 78, 14, 34, 35, 35,161,211,233,160, 82,169, 96, 52, 26, 43,117,151, 21, 18, 18,242,109,219,182, -109, 71,174, 95,191, 94, 6, 0,191, 61,254, 16, 46,203,128,151,175,155, 33,151,203,113,241,226, 69,112, 28,119, 43,119,110,221, -124,124,124,126, 92,187,118,109, 64,108,108, 44,155,157,157,141, 58,117,234,224,198,141, 27,237,246,236,217, 19,247,204, 51,207, - 60, 83, 88, 88, 56, 22,192, 30,111, 5,255,248,227, 15,104,181, 90,251,203, 98,177,220,116, 91, 50,199,113, 81,135, 15, 31, 14, -209,233,116, 16, 69, 17,132,144, 50, 39,176,243,137, 39, 73, 18,186,118,237,106,113,123,240,120, 62,234,240,225,195, 33,106,181, -186,156,150, 40,138, 80, 40, 20, 96, 89,214,118,135, 8, 65, 16,208,169, 83, 39,119,154, 76,195,134, 13, 31,179,153, 43,150,101, -177,122,245,106,132,133,133, 33, 36, 36, 4, 90,173, 22,106,117,229, 61, 48,207,243, 8, 10, 10,194,139, 47,190,136,199, 30,123, - 12, 43, 86,172,128, 76, 38, 43,179, 60, 48, 48, 16,127,254,249, 39,124,125,125, 17, 29, 29, 93,102,249,189, 10, 3, 4,110,217, -243,111, 68,118,196,224, 86,124,239, 46,117, 22,217, 79,180,146,149,136, 84, 26,181,144, 68, 49,119,231,129,107,211,189,184, 1, -168,177,127,255,126, 40,149, 74,239, 46,238,162,136,118,237,218,213,240,176,218,160,230,205,155,255,246,226,139, 47,202,235,215, -175,207,200,100, 50,240, 60, 15,158,231,109,229, 49,154, 16, 18, 45, 73, 82,143,204,204, 76,242,197, 23, 95,124,180,107,215,174, - 97, 0, 54,185,204,187, 96,104, 89,108,146, 6, 17,130,176,208, 62,164,214,245,237, 12,138, 77,210, 32, 63,222,112, 17,192,221, -108,176,124,213,106,245, 59,191,252,242,139, 28, 0,250,244,233,243,142,193, 96,248, 31,128,130,170,250, 3, 63, 63, 63,248,249, -249,161,121,243,230, 24, 62,124,184,127,235,214,173, 95,171,109, 50,141, 79, 2,204, 21,158, 67, 44, 27,181,249,175,243, 33,182, -239,163, 30,138,149,247,235, 94, 47,147,148,134,204,156, 99,104,146, 72, 82,118,236,191,226,201,128,177, 97, 97, 97,159, 12, 24, - 48,224,209, 37, 75,150,248, 0,192,183,223,126,139, 65,131, 6, 33, 44, 44, 12,106,181, 26,114,185, 28,114,185, 28, 50,153,204, -254,238,225, 34,203,133,133,133,125,244,192, 3, 15,140, 88,180,104,145, 15, 0,252,240,195, 15, 24, 60,120, 48,130,130,130,224, -235,235, 11,165, 82, 9,133, 66, 81,170,197,192,139,190,192,229,210,249, 92,191, 94,168,171, 86,226,193, 15, 62,134,191,191, 63, -118, 78,126, 1, 50,150,197, 11,127,238,134,175,175,175, 55,245, 71, 57,205,248,248,120,100,102,102,186,204, 59,199,113,158,206, - 55,123,222, 7, 13, 26, 52,194,166,249,195, 15, 63,160,127,255,254, 8, 10, 10,130, 78,167,179,231,253, 95,109,214, 43,205,254, -253,251,143,248,234,171,175,236,154,189,123,247, 70, 96, 96, 32,124,124,124, 32,151,203,237,251,179, 50,199,232, 46,215,188, 47, - 13, 22, 83, 26,189,122,116,227,198,141,246, 35, 47,147,201,160, 84, 42,237,133,195,241,194,237,237,181, 38, 56, 56,248,201,245, -235,215,219, 55, 50, 59,157, 84, 42,149,170,178,154,101,110,240,122,246,236,185,106,227,198,141, 42,185, 92, 14,131,193,128,211, -167, 79,195,207,207, 15, 10,133, 2, 67,135, 14,229, 58,117,234, 20,212,179,103,207, 95,207,157, 59, 55, 10,192,118, 47,154, 56, -160,211,233,202, 24,172, 91,121,120, 35,195, 48, 80,171,213, 88,183,110, 29,120,158, 47, 83,200, 92, 85, 98,161,161,161, 30,163, - 18, 0,160, 84, 42,113,224,192, 1,176, 44, 11,153, 76,102,127,253,241,199, 31,152, 60,121, 50, 50, 51, 51,237,203,124,124, 60, -182,110, 50, 26,141, 70,109, 51, 87,182, 99,175, 86,171, 33,147,201, 24,158,231, 25,142,227,108, 85, 58, 3, 47,155, 50,120,158, - 71, 82, 82, 18, 30,127,252,113, 44, 91,182, 12,239,189,247, 30, 70,141, 26, 85,102,121, 65, 65, 1, 2, 2, 2,224,239,239, 15, -165, 82,121, 43,101,225,174, 65,114,218, 59,179,222,251, 72, 35, 1,144,136, 4, 72, 0, 1,177,127, 78, 79,191,136, 79, 63, 89, -192,121,171,173, 84, 42,177,127,255,126, 56, 54,187,178, 44, 11,185, 92, 94,230, 55,158,231, 17, 30, 30,238,141,222,204,181,107, -215, 42, 86,175, 94,141,223,127,255, 29,162, 40, 66, 38,147, 65,165, 82,193,215,215, 23,129,129,129,246, 87,116,116, 52,243,221, -119,223,201, 91,182,108, 57,179,160,160,192,181,193, 98,137,159, 84,106,174, 0, 32,164, 15,169,117,105, 61, 23,224,239, 83, 18, -197,185,139,235,195,105, 11, 23, 46, 12,138,139,139, 3, 0, 44, 92,184, 48,232,233,167,159,158, 6,224,109,148, 52, 25,222,220, - 13, 22,176,138, 97,152,145,165, 17, 91, 85,223,190,125, 21, 95,126,249, 37, 26, 55,110,140,137, 19, 39, 6,126,250,209, 71, 15, - 2, 88, 83,113, 89, 42, 91,152,230,124,188,192,223,241,134,234,223, 23,112, 35, 43, 9,239,188,243,190, 23,254, 31,108, 68, 68, -196, 51, 95,127,253,181,189, 59, 68, 96, 96,160,189, 14,114,174,163,108,239,110,234, 37,166, 52, 42,244,244,146, 37, 75,236,154, -193,193,193,101, 52,100, 50, 25,146, 18,254,193,230,111,231, 66, 27, 20,142,209,147,231, 84, 58,157,145, 74, 5,162,212, 10,180, -108,217, 18,106,181, 26,241,178,146, 75,153,205, 92,121,147, 78,103, 77,142,227,236,105, 36,132,192,104, 52,162,176,176, 16,162, - 40,194,108, 54, 35, 46, 46,206,171,188,127,245,213, 87,118,205, 26, 53,106,216,235,119,199,122,222,246,178,221,192,120, 72,231, -211,223,124,243,141, 93, 51, 40, 40,200,174,197,243, 60,228,114, 57,126,248,225, 7,120, 25,209,246, 90,179,178,199,221, 89,243, -202,149, 43,152, 61,123, 54,228,114,185,173, 11,144, 61, 98, 25, 25, 25,137, 47,190,248,194,171,107,220,253, 22,193, 98,178,179, -179,165,179,103,207,178, 71,143, 30,133, 92, 46, 71,112,112, 48,218,181,107, 7, 0,176, 88, 44,224,121, 30,106,181,154,105,208, -160, 65,166,109,167,217,222,157,218,210,109, 67, 45,217, 27, 55,110, 72, 91,183,110,101, 87, 12,239, 15, 51, 1, 90,191, 51, 7, -253, 7, 15,198,150, 72, 5, 56, 0,237,206,102, 67,161, 80,240, 97, 97, 97, 86,219, 65,176,233, 58,245,205,114, 30,190,233,163, -213,106,191,219,176, 97,131,138,101, 89, 20, 22, 22, 66,146, 36,116,238,220, 25, 12,195,224,228,201,147,120,251,237,183,241,219, -111,191, 97,237,218,181,234,216,216,216,239, 12, 6, 67, 83, 0,133, 14, 26,167, 92, 21, 78, 95, 95, 95,168,213,106,187,193, 82, -171,213, 76,163, 70,141, 50, 43,232, 71,144,122,230,204,153,184,138, 52,109,145,132, 97,195,134,217,251,156,217, 46,128,142, 39, -155,237,243,233,211,167, 93, 29,175,114,154,146, 36,161, 75,151, 46, 0, 0,173, 86, 11,157, 78,135,191,254,250,203,190, 60, 54, - 54, 22,102,179, 25, 53,106,212, 64, 66, 66,130, 87,154, 25, 25, 25, 88,190,124, 57,100, 50, 25,130,130,130, 32,147,201,228,219, -183,111,127, 79,171,213,250,113, 28, 7,127,127,127, 12, 30, 60,120,137, 67, 26,196, 77,155, 54,241, 21,105,114, 28, 7,149, 74, -133, 31,126,248, 1,179,103,207,198,155,111,190,233, 28,221,131,209,104, 68, 80, 80, 16, 2, 2, 2, 16, 16, 16,224, 85, 58,171, -128,106,213, 36, 32, 56,125,108, 11,206, 28,223, 14,145,136,144, 68, 9, 68, 34, 16, 37, 9,199,182, 29,105,152,126, 57, 45,146, -128,148,116,169, 5, 32, 22, 21, 11,221,131, 20,141, 1,172,219,157, 99,158,239, 41,157, 28,199,193, 98,177, 96,203,150, 45,184, -120,241, 34,182,110,221, 10,131,193,128, 26, 53,106,192,223,223, 31,157, 58,117,194,211, 79, 63, 93,145,193, 58,229, 84, 54,127, - 72, 77, 77,109,221,169, 83, 39, 38, 63, 63, 31,217,217,217, 40, 44, 44,132,197, 98,129,197, 98,177, 31, 67,173, 86,139,176,176, - 48, 24, 12, 6, 98, 50,153,126,168, 48,239, 18,147,207, 50,200,184,180,142,175, 81,111,168,160,206,252, 43,200,100, 48,203,133, -197,235, 52, 79,255, 49,165, 94, 63,150,176, 4, 40,201, 58,195,128, 72,162,152,189,125,239,229, 23,239,240,113, 31, 63,105,210, -164,166,142,205,211,163, 71,143,198,233,211,167,155,206,155, 55,111, 60,128,133,149,213, 84, 3,145, 40,113,102,127,162,228,133, -153, 6, 3,243,222,186,117,195, 0, 60,177,118,237, 90,140, 26, 53, 10,159,124,244, 81,115, 23, 6,235,148,227, 13, 95,210,249, - 61,184,114,126, 63, 36, 73, 42,125,145, 10, 63, 19,239,210,201, 20, 21, 21, 25, 15, 31, 62,172,251,254,251,239, 17, 24, 24,136, -218,181,107,195,199,199, 7, 74,165,178,156, 25,176,189, 60,229, 93,175,215, 27,207,158, 61,171, 91,181,106, 21,130,130,130, 16, - 29, 29, 13,173, 86, 11,149, 74,101,191, 65, 63,188,117, 45,198,143, 29,138,156,107,137, 88,240,191,199,188, 78,231,115,125,123, - 33, 74,173,192,208, 89,115,208,180,105, 83,172,121,108, 8, 88, 6,152,176,243, 16,100, 50, 25,190, 31,212, 13, 74,165, 2, 19, -118,254,237,181,230,223,127,255, 13, 66, 8,162,163,163, 97, 48, 24,236, 81, 54,185, 92,142,237,219,183, 99,200,144, 33, 88,177, - 98, 5, 58,116,232,224, 49,239, 69, 69, 69,198,147, 39, 79,234,126,250,233, 39, 4, 6, 6,162,102,205,154,208,104, 52,118, 61, - 71, 19, 83,183,110, 93,228,229,229,161, 94,189,122,110, 53,139,139,139,141,241,241,241,186, 21, 43, 86, 32, 48, 48, 16, 81, 81, - 81,208,104, 52,101, 34, 97, 51,103,206, 44, 35,208,178,101,203, 91,214,172,236,113,119,214, 28, 62,124, 56,234,213,171, 7, 95, - 95, 95,251, 62,112, 54,218,149,129, 16,210, 22,101,187, 57,152, 1, 40, 28,222,179, 24,134,249,219,197,122,182,223,101, 0, 90, -149, 46, 19, 75, 61,128,191, 11,189,138,116,178, 75,131, 10,193, 78,235,151,249, 31, 87, 6,203,118, 62,246, 0,176, 15, 0,154, - 52,105,130,156,156, 28, 40,149, 74,180,107,215, 14, 89, 89, 89,246, 48,159, 36, 73,120,228,145, 71,184, 41, 83,166,132,176, 44, - 11,171,213, 10, 66, 8, 56,142,131,237,206,207,217, 7,176, 44,139, 78,157, 58,225, 76,233, 62,237, 63,120, 48,162,162,162,236, -157, 56,148, 74, 37, 70,141, 26,197, 76,158, 60,153,183, 69, 47, 8, 33, 48, 24, 12,104,217,178,165,218, 77,116,228,127,191,254, -250,171,159, 66,161,176,155, 43, 91, 90,206,158, 61,139, 79, 63,253, 20, 79, 60,241, 4,174, 93,187,134,240,240,112,188,246,218, -107,186,185,115,231,254,207, 98,177,204,242,116, 64,117, 58, 93, 25,131, 53,118,236, 88,190, 83,167, 78, 33, 26,141,198, 30,221, - 42, 53,149,232,212,169, 19,227, 41,130, 37, 73, 18,254,252,243, 79,151,119,135,206,119, 12, 12,195,128, 16,226,149,230,225,195, -135,237,230,204, 22,189,176, 45, 63,125,250,180, 61,130, 85,106, 4,221,105, 18,155, 81,179,133,201,101, 50,153,252,240,225,195, - 31,132,135,135,235,198,142, 29,139,194,194, 66, 68, 68, 68,160, 95,191,126,144, 36, 9, 22,139, 5, 47,191,252,178,219,200,139, - 76, 38,195,145, 35, 71, 48,119,238, 92, 76,153, 50, 5, 75,150, 44, 65,159, 62,125,202, 68,176,108,119,186,190,190,119,124,140, - 67, 21,134,176, 0,139, 96,133, 94,111, 0, 33, 34, 68,137, 64, 18, 37,156,220,117,172,225,229,227, 23, 99, 54,174, 92, 46, 3, - 0,227,238,181,142, 91,133, 15, 95,244,115,163,238, 1,178,195,187,115,173,135, 61, 52, 59,227,133, 23, 94,192,244,233,211,241, -232,163,143, 98,219,182,109,120,235,173,183,240,204, 51,207,216,205,187,173, 44,120,209,236,248,245,232,209,163,159, 95,179,102, - 77,227, 87, 95,125,149,181,157,147, 26,141, 6, 12,195,192,104, 52,218, 95,103,207,158,149,198,141, 27,119,206,108, 54,127, 93, - 97, 65,226,213, 39,180, 74,253,166,244, 28,182, 65,198,206, 64,150,225,125, 45,193,209, 61,242, 31,104,216,135,244,121,172,118, - 0,145, 74, 34,124, 4, 4, 38, 99, 49,222,156,242, 58,119,135,143,214,160,190,125,251,246,251,224,131, 15,202, 45,248,224,131, - 15,144,144,144,208,111,219,182,109, 73, 21, 53,137, 86, 96,174,162,252,194,194,230, 1,128, 58, 35, 99,146, 1, 72, 1,128,247, -128,254, 34, 48,100,219,182,109, 0,128, 90,181,106, 65, 2,154, 49,192,143, 28,176, 10,192,102, 87, 17,117,139, 85,128,193, 96, -132, 68, 74,202,145, 68, 36, 72, 98, 73, 20,212,217,100,121,209,238, 70, 0, 72, 28,199,161,121,243,230,232,223,191, 63, 20, 10, - 5,116, 58,157,189,158,119,174,147,188,184, 40, 18, 0, 18,195, 48,168, 91,183, 46,250,245,235, 7,185, 92, 14,173, 86, 11, 95, - 95, 95,187,193,226, 56, 14,205, 59,245,194,170, 21, 31, 99, 76,255, 24,140,237, 22,138, 95, 79,102,123,149,206,104,141, 2,209, -106, 37,154, 52,105, 2, 31, 31, 31, 48, 12,192,113,172, 61,157, 90,141, 10,114,123,243,163,119,121,207,200,200, 64, 82, 82, 18, -146,146,146,192,178, 44, 58,119,238, 12,133, 66, 1,158,231,113,254,252,121,204,154, 53, 11,102,179,217, 43, 77,150,101,209,160, - 65, 3,244,234,213, 11, 10,133, 2,182,107,133, 99,211,160, 76, 38, 67, 97, 97, 33,234,215,175,143,117,235,214,161,107,215,174, - 30, 53,155, 54,109,138, 30, 61,122, 64, 46,151, 67,173, 86,219,187,234, 40, 28,242, 90, 84, 84,100,223, 15,173, 91,183,174,148, -230,214, 35,215,176,116,235, 95, 48,153, 37, 20,232,173,101, 54, 8,175,225,139,125, 63, 77,241, 42,239, 54,205,175,191,254, 26, -121,121,121,246,122,200, 54,160,205, 22, 60,137,138,138,194, 87, 95,125, 85,225, 53,168,212,139,236,118, 90, 22,204, 48,204, 70, -135,115, 98, 48,195, 48, 27, 29,223, 43, 90,175,244, 99,183,105,211,166,181,153, 59,119,238,236,142, 29, 59,174, 58,112,224,192, -202,138,244, 42,210,153, 54,109, 90,204,220,185,115,103, 59,174,239,226,127, 92, 70,176,108, 77, 62,172, 45, 50, 19, 25, 25,105, -111,119,214,233,116,144,203,229,246,149, 5, 65,192,119,223,125,135,144,144, 16,132,134,134,218,223, 43, 58, 0, 44,203,130, 16, -130,137, 89, 37, 93,128,254,140,144, 35, 9,192, 3, 89,196,174, 39,138, 34,214,172, 89, 3, 31, 31, 31,251,137,174,211,233,220, - 54, 23, 41, 20,138, 30,109,219,182,101, 77, 38,147, 61, 76,206,178, 44,206,158, 61,139,185,115,231, 98,212,168, 81,104,212,168, - 17, 68, 81, 68,113,113, 49,122,246,236, 41, 91,176, 96, 65, 15,111, 13,150, 70,163,177,247, 59, 50,153, 76,216,177, 99, 7,252, -253,253, 17, 16, 16,128,160,160, 32, 4, 6, 6, 66,169, 84,130, 97, 24,207, 53, 26, 33, 24, 54,108, 88,153,200,149, 99,212,202, -177, 66,179, 53,251,121,163,217,161, 67, 7,123,244, 74,167,211, 97,243,230,127,235,231,118,237,218,129, 16,130,224,224, 96, 28, - 60,120,208,155, 74, 23,146, 36, 33, 36, 36, 4, 50,153,140,217,190,125,251,123,165,230,138,145,201,100,248,231,159,127,112,250, -244,105, 4, 7, 7,219,239, 74, 61, 81, 92, 92,156,190, 96,193, 2,241,203, 47,191, 4, 0,244,238,221, 27,249,249,249,215, 29, -150,231,140, 25, 51,166, 76,126,115,115,115,115,238, 3,127, 5,193, 34, 64,111, 48,162,168,176, 24, 86, 73,132, 85, 16,113, 61, - 53,203,127,202,228, 73,178, 79, 94,126, 26, 0, 48,121,254, 66, 20,126,245,111, 5,246,251,228,145, 33,195, 62, 93, 61, 21,192, - 80,119,250,122,189, 30, 70,163, 17,181,106,213,194,223,127,255,141,194,194, 66,244,233,211,167, 76,244,215, 67, 19,132, 35,230, -212,212,212,206,131, 7, 15,254,251,179,207, 62,171,215,172, 89, 51,166,184,184, 24,197,197,197,208,235,245,176,125, 62,117,234, - 20, 89,185,114,229,101,189, 94,223, 9,110,250, 12, 41,226, 10, 47,154,227,125,214,236, 61, 33, 31,252,240,240, 33,126, 41,169, -201, 66,142, 65, 85,148,111, 56,103, 18, 73, 2,136, 72, 32, 18, 2, 34, 74, 16,137,116,167,199,111, 71, 53,108,216,112,220,138, - 21, 43, 92, 26, 82,142,227,176, 98,197, 10,116,233,210,101,220,249,243,231,207,194, 77,231,126, 27,181, 1,133, 32,147, 77,249, -249,231,159,229, 0,208,171, 87,175, 41,181,173,214,201, 73,128,185, 89,139, 22, 35, 14, 28, 56,224,167,209,148,140, 19,242,243, -243, 3, 33,132,211,235,245,126,157, 58,117, 26,113,242,228,201,242, 6, 75, 34,176, 90, 5, 24,140, 38,228,229, 23,193,106,182, - 66,144, 4,136,130, 4, 65, 42,137,142, 10,162, 8, 73, 16, 33, 72, 34, 56,158,243,233,222,190,102, 81, 73, 44,139,201,219,115, - 56,185,166,171, 34, 90, 50,194, 11, 8, 11, 11,179, 55, 9, 59,246,149,241, 34,138, 81, 46, 80, 95, 82, 23, 18,123,221,120, 98, -215, 70, 92, 79,216, 7, 57, 67, 32,137, 86, 72,130, 5,162,213, 2, 14, 18, 18, 46,165,162, 89,132,199, 58,196,158,206, 1,239, -188,143,118,237,218,225,215,145, 67,193, 48,192,132, 29, 7, 33,151,203,177,242,161, 62, 80,168, 20,120,118,235, 33,111,211, 89, - 38,239,241,241,241,152, 56,113, 34, 62,252,240, 67,168,213,106,251,205, 73, 98, 98, 34, 86,175, 94,141,190,125,251,122,157,119, -134, 41,105,106,181,237,195,105,211,166, 33, 45, 45, 13,243,230,205, 67,155, 54,109, 32,147,201,144,151,151,135, 78,157, 58, 33, - 51, 51,211, 43, 77, 66, 36, 4, 6, 6,218,187,235, 56,247, 17,179,221,200, 86,230, 24, 57,106, 62,245, 80, 56,214,239, 95, 9, - 6, 12, 14,253, 52,169,204,245,104,241,234,189,149,214,156, 62,125,122,153,116, 86, 50,122,101,243, 34, 76, 5,215,188,193, 94, - 70,188,108,235,217,118,178,114,238,220,185,179,157,183,247,164,231,184,220,105,123,179,147, 41,203,244,166,137,144,176, 44, 11, - 73,146,160,211,233,160, 80,148, 68,192,156, 47,164, 90,173,182,140, 35,247,212,158,204,113, 28, 8, 33,246, 29,203,185, 88,126, -240,224,193,114, 38,224,155,111,190,113,219, 78, 43, 8, 66, 83, 31, 31, 31, 20, 22, 22,218,251, 72, 41, 20, 10, 76,157, 58, 21, - 99,198,140,177,155, 43,133, 66,129,101,203,150, 33, 46, 46, 14,102,179,185,169,187, 29, 42,151,203,245, 45, 90,180, 96,109, 81, - 32,181, 90,205,140, 26, 53,138,179, 88, 44, 80,169, 84,101,162, 78,182,190,105,158,204,144, 45,218,180,101,203, 22,175, 34, 88, -222,246, 65, 34,132,224,216,177, 99,101,140, 90,233, 80, 99, 0,192,241,227,199,237, 23, 90,111,219,187, 69, 81,132, 90,173,102, -228,114, 57,163,213,106,253,198,142, 29,107,215,181, 29,115, 91,190,189,233,104,125,242,228,201,158,110,219,107, 78,157,186, 47, -167, 99,144, 36, 9, 22,171, 21, 6,131, 17,133,197,122,204,156, 83,218,162, 54, 19,135, 1, 28,238, 60,126, 34, 94,232,223,183, - 23, 60,143,238,115, 73, 96, 96, 32,126,251,237, 55,200,100, 50,172, 91,183, 14,190,190,190, 24, 50,100, 8,124,125,125, 49,101, -202, 20, 60,246,216, 99,149, 49, 88, 0,144,159,147,147,211,121,210,164, 73,127,127,244,209, 71,181,106,213,170, 5,139,197, 2, -179,217, 12,139,197,130, 75,151, 46, 97,229,202,149,201,122,189,190, 51,128,124, 79, 98,138,184,194,139, 27, 95,173,151,222,101, -248, 67,198,132,140,173,200,204,200,130, 32,166, 64, 16, 69, 8, 86,161,196, 16, 72, 18, 4,139, 0,142, 99,125,123,118,140,222, - 94,210,225,159, 49, 3, 24,120, 27, 15, 21, 57,127,254,124, 78,112,112,176,237, 14,210,215,108, 54, 51,165,117, 9,193,191, 29, -220,139, 1, 88,188, 17, 76, 6,198,127,242,225,135, 53,109,205,247, 31,126,248, 97,205,215, 94,125,117, 60,128,207, 19, 78,158, - 92,254,212, 83, 79, 77,250,229,151, 95,202,108,243,212, 83, 79, 33,225,228,201,229, 21,221,249, 88,173, 86, 24, 12, 38,100,103, -223,192,115, 19,222,113,184,221, 39,246,251,254,146, 78,239, 4, 0, 84, 0,144,157,121, 1, 47, 79,124, 77,233,238,134,170,244, -124,135, 76, 38, 43,215, 9,217,177,126,247,162,254, 32,206, 93, 44,228,114, 57, 46, 30,216,136, 73,227, 71, 0,162, 0, 88,138, - 1,139, 30,196,162, 7, 49, 23,131, 81,168, 65,172, 70,175,116, 69, 81,180,119,219,224, 57, 22, 74,197,191,245,166, 70,163,134, - 66,165,240, 54,157,229,242,126,245,234, 85,188,248,226,139, 48,155,205, 24, 62,124, 56,140, 70, 35, 76, 38, 19,140, 70, 35,234, -214,173, 11,131,193,224,117,222, 37, 73,178, 71, 1, 39, 77,154,132, 54,109,218, 96,214,172, 89,120,227,141, 55, 80,183,110, 93, -140, 31, 63, 30,171, 86,173, 66, 76, 76, 12,244,122,189, 71, 77, 91, 93,162,211,233,192,243,188,189, 14,118, 60, 86, 54,131,229, -237, 49,114,165,201, 48,255,246,187,117, 60,238,175,140,237, 93,105,205,217,179,103, 35, 59, 59,187, 92,228,202, 49,130,181,104, -209,162,155, 58, 89,157,162, 76, 30,215, 99, 24, 38,190,244, 39,195,212,169, 83,223,100, 24,102,227,212,169, 83,223,156, 51,103, -206,105,111,244, 92, 45,103, 24,230,143,210,235,239, 3, 14,191,197,123, 99,176, 96,139, 54,217,194,154,182, 29,103, 91, 6, 0, - 26,141, 6, 27, 55,110,196,154, 53,107,202, 92, 80, 42,194,102,218, 54, 5,151, 20,128, 65,165,145, 43,219,247,129,215, 37, 12, - 30, 60, 24,117,235,214, 45, 19,189, 82,171,213,110,205,134, 36, 73,184,122,245, 42, 78,157, 58,133,142, 29, 59, 34, 63, 63, 31, - 60,128,201, 39, 79,162,217,216,177, 48,149, 26, 63,133, 66,129,113,227,198,121,117, 0,143, 30, 61, 90,166, 19, 80,211,166, 77, - 83, 58,117,234, 20,121,240,224, 65,123, 68, 75,169, 84, 66,165, 82,217, 77,134, 55, 39, 53, 33, 4, 35, 70,140, 40, 99,134,156, - 13,150,237,228,249,243,207, 63,189,106, 34, 36,132,160,123,247,238,246,232,149,143,143, 15,126,255,253,119,251, 58,221,186,117, - 3,195, 48, 8, 9, 9,193,230,205,155, 61,106,218,246,169,237,216,115, 28,135,226,226, 98,196,199,199, 67,161, 80,216,251,103, -168,213,106,123,254, 41, 21, 29,112, 9,102,171, 21,122,131, 17,133,133, 37, 21,233,197, 83,191,150, 89,197, 98,186,249,193,105, -182, 72,104, 65, 65, 1,118,236,216,129,223,126,251, 13,109,218,180, 41,211, 60,232,109, 19,161, 99, 63,130, 27, 55,110,116,121, -227,141, 55, 14,189,247,222,123, 17, 65, 65, 65,176, 88, 44,184,122,245, 42,190,251,238,187, 52,189, 94,223, 5, 64,150,247,251, -128, 64,176, 10, 48,234, 13,200, 47, 44,198,140, 15,150, 85, 88, 69, 0,128,197, 92,136,193, 3,187, 43,110,243,145, 74, 5,240, -140,195,247,229, 0,252, 74, 63, 23, 0, 24, 83, 25, 49, 25,208, 99,248,136, 17,189, 38, 77,154,100,255,109,210,164, 73, 56,116, -232, 80, 47,217,154, 53,167,172,192, 46,110,205,154,230,243,230,205,179,175, 51,111,222, 60,252,182,102,205, 78, 17,216, 85,193, -109,123, 73, 4,203, 96, 68, 81,177, 1,190,254,225, 72,189,178,219, 99, 90,228,156, 9,196, 77,189,108,171, 67, 42,234,119, 83, - 9,115,101, 79,169,109, 93, 91,191,163,230,189, 70,224,179,207,191,129,146, 37, 24,214,171, 25,130,213, 18, 24, 77, 32,228,221, -167,130,241,143, 46,217,106, 70, 43,120, 83,215,237,126,107, 50, 46,105, 85, 24,183,109, 63,100, 50, 25,126, 27, 57, 8,114,133, - 28, 79,252,177,167,100,112,207,211,195, 32, 87, 42,208,111,241,106,111, 46,212,246,188, 95,188,120, 17,251,247,239, 71,147, 38, - 77,112,225,194, 5,123, 31, 91,219,117,203,203, 27, 94,123,222,109,245,120, 70, 70, 6, 6, 15, 30, 12,185, 92,142,101,203,150, - 97,247,238,221,120,227,141, 55,240,212, 83, 79,161,103,207,158, 21,245,139, 45,167,233,120,140, 42,234, 31, 85,217, 99,228,172, -105, 47,191,183,112,220,109,154,182,206,237,174,204,250,173,118,108,119,136, 22,133,186, 88,246,128,115,228,137, 16,210,182,180, -111,148,105,206,156, 57,167,231,204,153, 51,152, 97,152,141,115,230,204, 25, 92, 81, 4,203,149,142,139,229, 30,235, 65,222,201, -133,246,112, 52, 81, 10, 55,109,217, 90,173, 22,207, 60,243, 12,166, 76,153, 98,239,200,232, 14,155,115,117,199,198,141, 27,203, -253,182,110,221, 58, 79, 77,132,103,253,252,252,218,244,234,213, 11,249,249,249,184,118,237, 26,116, 58, 29,154,125,250, 41, 78, -190,240, 2, 90, 45, 89, 2,182, 87, 47,251, 9,127,242,228, 73, 40,149,202,179, 70,163,177, 82, 7, 85,167,211, 33, 32, 32, 0, - 42,149, 10, 62, 62, 62,240,241,241,129, 86,171,181, 27, 45, 79, 77,132,182,194,247,199, 31,127,184,141, 92, 57,134,124,189, 49, - 67,132, 16, 28, 60,120,176, 92, 4,203,246,159,182,101,182, 72,134, 55,154,165, 17, 75,162, 84, 42,193,113, 28, 52, 26,141, 61, -220,175, 82,169,236, 47,111, 35, 88,158, 38, 18,141,142,142, 46, 51, 17,169, 76, 38, 43, 51, 17,233,189,223, 68,104, 66,113, 81, -113,149,235,155,205,102,240, 60,143,223,126,251, 13,237,219,183,183,155, 43,155,177,114, 60,238,149, 36,229,198,141, 27, 61, 22, - 44, 88,112,248,179,207, 62, 11, 40, 42, 42,194,178,101,203,242,139,138,138,122,160,180, 31,145,215,149, 33, 0,171, 69,128,222, -100, 66, 81, 97,201, 62,184,116,250, 87,143,166,236, 94,166,105,139, 22, 99,190,255,254,251,114,191,127,255,253,247,184,112,225, -194, 24,156, 60,185,171, 38,176,100,202,148, 41,245,227,226,226,106, 2,192,148, 41, 83,146,107, 2, 75,220,157,231,182, 38,194, -162, 82,179,110, 44,206,174,178, 72,171,243, 13,223,173, 94, 16, 25,134,177,155,140,190,143, 62,131,180,203,137,104,162,201, 70, -136,191, 22, 82, 97, 26,228,189,103,224,228, 13, 13,230, 47,217, 82,169,116,106, 20,114,168,212,255, 54, 55,169,212, 42, 40, 75, - 91, 21, 24,134,129, 74,163,134, 76,161,168,116,222, 19, 19, 19,161,209,104, 32,138, 98,185,235, 77,101, 71, 52, 19, 66,236,215, -206,207, 62,251, 12,175,191,254, 58,150, 45, 91,134,147, 39, 79,162, 85,171, 86,232,211,167, 15,174, 95,191,142, 19, 39, 78,192, -100, 50,121,157, 78,199,235, 69, 66, 66, 2,182,111,223,142,115,231,206, 33, 57, 57,249,166,143,187,115, 51, 99,105, 11, 78,137, -121,221,254, 15, 30,238, 27,123, 83,154, 51,102,204,192,245,235,215,203, 69,174, 28,187, 31,185,137, 96,217,189,136,155,242, 21, -239,104,130,108,145, 38, 71, 67,228,252, 29, 64,128,237,183,169, 83,167,190,233,237,118,142,223,109, 17, 48,111,154, 22, 29, 13, - 22,227,220, 92,199, 48,140,125,167, 59, 70,166,108,159, 53, 26,141, 61,202, 20, 29, 29,237, 54,122,101, 59,225, 56,142, 67,215, -203,133, 80, 40, 20,246,230,188,129,215,165, 50, 33,242,186,117,235,150,233,131,229,120, 80, 92, 97, 50,153,118,237,218,181,171, -245,144, 33, 67,184,132,132, 4,240, 60, 15, 73,146, 96,234,208, 1,173,150, 44,193,169, 73,147,208,237,202, 21,152,172, 86,168, - 84, 42,252,249,231,159, 22,189, 94,191,171, 50,133,134,101, 89,198,102,176,148, 74, 37,124,124,124,224,235,235,107,143,230, 84, -166, 18,170,232, 14,209,241, 85,153, 19,218,214,161,223,241,194,106, 59,126, 6,131,161,140,225,242, 22,199, 38, 3,155, 41,242, -243,243, 43,211, 44,106,139,226,121, 99,176, 60, 77, 36,170, 84, 42,125,247,236,217, 83,223,215,215, 23,132, 16,100,103,103, 99, -228,200,145,231,239,249, 0, 22, 72, 73, 39,119,131, 17, 69, 6, 99,149,235,255,244,211, 79,184,120,241, 34, 44, 22, 11,230,204, -153, 83,206, 88,221,100, 4,203,198, 69,181, 90, 45, 13, 24, 48, 0, 7, 15, 30,132, 82,169,180,226, 38,230,175, 34,146, 4,139, - 85,128,209, 96, 66, 81,113, 49,254, 11,156, 57,121,114,141, 86,171, 29, 9, 64,151,151,151,199,249,249,249, 65,163,209,192, 96, - 48,228,115,165, 35, 5,147, 0,179,218,106,253,240,209, 71, 31,157, 7, 0,188,213,250,161,187,121,176,236, 6,171,138,247,163, -173,222,170, 40,122,117,179,230,138, 97,152,146,225,249, 44,139,101,115, 94, 71, 19, 77, 22, 98,235,104, 97,188,126, 17, 74,223, - 26, 96,252,107, 99,254,146, 45, 72, 72,186, 81,169,116,142, 90,254, 43,106,214,172,137,141, 79, 12,133, 82,169,196,200, 95,183, -151,116,210, 30,255, 24,228, 42, 37,122, 47,252,233,166,242,174,215,235, 43,140, 84, 85, 34,130,101,215,180, 25,192,216,216, 88, - 52,104,208, 0,187,118,237, 66,108,108, 44, 46, 92,184,128, 11, 23, 46, 32, 41, 41, 9, 39, 79,158, 68,110,110,110,165,143,209, -234,213,171,145,149,149, 5,185, 92,142,130,130, 2, 92,185,114,197, 93,255,103,175,143,187,141,198, 15,204, 0, 0, 68, 4,251, - 85,202, 96, 57,106,126,252,241,199,149,153,230,161,140,140,155,101,217, 78,125,157,108,223,205, 78,102,199,249,187,243,250, 0, -112, 29, 0,231, 97, 59,231,239,217,115,230,204,217,101,139,124,149,234,114, 21,245,191,114,142, 96, 57,154, 0, 67,227,198,141, -213,142,237,167, 44,203,194,199,199,135,121,237,181,215, 56,134, 97,160,211,233,224,231,231,135,134, 13, 27,194, 98,241,220, 45, - 65, 46,151, 27,218,181,107,167,118, 12,189, 50, 12, 3,173, 86,203,189,241,198, 27,204, 55,223,124,227,114,187,245,235,215,187, - 45,220,130, 32,204, 27, 59,118,236,179, 41, 41, 41, 1,161,161,161, 72, 79, 79,135, 92, 46, 47,153, 45,182,103, 79,116,189,124, - 25,150, 82,195,144,152,152,136,165, 75,151, 22, 91, 44,150,121,149,173, 52,116, 58, 29,130,130,130,160, 84, 42,203,140,138,113, - 8,173,122, 21,193,170, 74,115,101,211,116,188,176,218, 62,143, 31, 63,222,254,189, 50,149,164, 92, 46, 39, 15, 60,240,128,253, - 25,132,254,254,254,168, 81,163, 6, 50, 51, 51,255, 29,169, 83, 26,185,243,214, 96,121,154, 72, 84, 38,147,193, 98,177,216,155, - 51, 23, 46, 92,120, 43,198,224,238, 49, 88,130,196,232,116,193,136,136,104,132,224, 16, 35, 36, 73,172, 50,109, 65, 16, 48, 97, -194,132, 50,115, 94,217, 46,196,182, 73,108,109, 35,124, 29,195,255,149,189, 19,191,229,232, 8, 1,172, 66,105, 20, 79,111,190, -231,142, 97,116,116,180,239,213,171, 87, 93,245,139,114, 57,218, 15,248,119, 74, 6, 14,120,255,218,181,107,205,253,252,252,208, -175, 95, 63,108, 88,187,118,253, 59,128, 61,100, 99, 0, 82,212, 25, 25,255, 43,253,156,234, 41,168,103,107, 34, 44,214, 87,181, - 89,103,202, 69,175,110,181, 41,135,101, 75,110,204,126,255,234, 67, 52, 81,103,162, 85, 45, 37,246, 31, 58,129,246, 53, 9,136, - 73,126,211,233,212,233,116, 37,157,241, 53, 26, 40,149,255,246,185, 82,106,212,144, 43,148, 55,157,119,199, 72,213,173, 70,176, - 24,134, 45,179, 31,159,125,246, 89, 76,153, 50, 5,253,250,245,195,133, 11, 23,176,103,207, 30,156, 63,127, 30, 19, 39, 78, 68, - 76, 76, 12,250,247,239, 95,169, 99,244,251,239,191, 35, 63, 63, 31,132, 16,100,101,101,193,104, 52, 98,250,244,233,183,124,220, -109, 92,222, 54, 27, 0,240,235,182, 99, 55,173, 57,109,218, 52,251, 28,140,182,107,190,135,168,149, 55,215,187, 35,238,190, 87, -118,251,219,129, 75,131,117,254,252,121,151, 99,229,155, 52,105,146,217,187,119,239,144,115,231,206, 65,167,211,161, 97,195,134, - 48,153, 76,238,154, 33,154,163,116,174,140, 51,103,206,184,212,172, 91,183,174,165,111,223,190,178,176,176,176, 50,145, 43,219, - 8, 27, 71,103,236,172, 89, 74,161,209,104, 28,215,185,115,231, 31, 55,111,222,172,110,216,176, 33,242,243,243, 1, 0,203,150, - 45,195, 75, 47,189, 4,181, 90,141,115,231,206, 97,232,208,161,122,189, 94, 63, 14,101,231,192,114,165, 89,206,200,200,229,114, -123, 51,153,173,169, 76,225, 62, 20, 93, 78,147, 97, 24, 44, 88,176,192,229, 92, 80,206, 44, 89,178,196,149,155,119,153,206, 79, - 62,249,164,202, 52, 15, 31, 62, 92,230, 25,131,131, 7, 15,254,170,127,255,254, 72, 78, 78, 46,211, 44,232,193, 96,149,209,244, - 52,145, 40,199,113, 8, 13, 13,197,123,239,189,135, 26, 53,106, 32, 44, 44,204,149,193,114,123,140,110,146,106,213, 36, 44,137, -255,252,179, 25, 93,190,250,246, 87,153, 82,193,226,224,158, 95, 81,144,155, 81, 54, 2,107,249,119, 72,180, 34,182, 55,204,199, -118,120,149, 78,147,201,132,143, 62,250, 8, 51,102,204,192,140, 25, 51,220, 38,168,130,225,208, 30,243,238,104,176,188, 52, 91, -229, 52, 37, 73,100, 84,154, 0,104,180, 17,136,137, 9,128, 68, 60,207,213, 41,221,249,227,174, 79, 78, 78,246,171, 89,179, 38, -206,159, 63,207,224,223,254, 88,255, 30, 43,133, 98,164,147,193, 42,127,190, 3, 39, 87,174, 92,217,188, 69,139, 22, 88,184,112, - 33, 0, 60,241,209,214,173,143,205, 48,148,132, 51, 57, 96, 85,169, 25,243,152, 78,145,136,140, 74,227, 15,181,174,116, 63, 74, -222,207,121, 74,220,228,221,118,241,187,149, 27, 61, 87,154,182,237, 47, 29,252, 3, 15, 12,140,194,129,195, 39,177, 35, 69,139, -154,202, 52,132,235,179, 32,101,157,197,255, 70,196, 98,254,154,146,139,248,201,163,158, 53, 25,134,193,190,215,198, 65,167, 82, -226,225,149,155, 32,147,201,176,107,210,147,144,203,229,232,254, 89, 73,147,236,169,143,166,129, 87, 42,208,100,226, 12,175,210, -233,220, 82, 99,235,115,229,104,174, 60, 68,176, 42,204,123, 81, 81, 17,114,115,115,241,227,143, 63,226,233,167,159,198,245,235, -215,113,229,202, 21,156, 59,119, 14,171, 86,173, 42,115,141, 67, 37,142,209,212,169, 83, 49,121,242,100,176, 44,139,230,205,155, - 99,198,140, 25,232,216,177, 99,165,143,145,243,113,119,198,139,232, 85,133,154,159,127,254,121,165, 7,108,221,143, 84,170,131, -134, 45,146, 85,163, 70, 13,104,181, 90, 0, 40,115,129,245,212, 76, 88,145,166, 32, 8, 80,171,213, 80,171,213,101,166, 69, 24, - 50,100,136,199, 8, 86, 41,127,158, 59,119,110,116,179,102,205,190,155, 49, 99,134,182, 71,143, 30,178,136,136, 8,196,197,197, -225,220,185,115,248,227,143, 63, 44,139, 22, 45,210,235,245,250,167, 1,108,187, 25,243,108,235,248,237, 56,163,125,101, 16, 69, - 49,249,202,149, 43,225,159,124,242, 9,199, 48, 12,230,205,155, 87,102,130, 86,231, 60, 30, 58,116, 72, 32,132, 92,244, 16,197, - 72,190,114,229, 74,248,167,159,126, 90, 70,211,246,114, 54, 41,222,104, 86,132, 45,207,206,251,192,155,147,199,211, 68,162, 60, -207, 35, 49, 49, 17,239,190,251, 46, 24,134, 41, 51,112,226, 94,230,192,223,233,223,116,140, 67,192,200, 17,189, 90, 48, 96, 97, -118, 17,233,229,114,242,236,230,106,216,167,171,241,251,228,199,188, 57, 22, 87,118,239,222, 93,107,246,236,217, 28,199,113,248, -248,227,143,203,148, 37,231,227,190,115,231, 78, 81,173, 86, 95,187,217,124, 88, 44, 22,111, 70, 81, 85,116,130,239, 95,240,241, -187,253,190,250,126,131,140, 97,204, 56,184,251, 87,228,231,185, 30,154,174,144,241, 88,190,114,189,192,115,108,242, 29, 62,116, - 95,245,233,211,103,250,246,237,219,249,154, 53,107,222,180, 72, 20,176, 97,193,130, 5, 3,199,142, 29, 27,216,180,105, 83,219, -224, 19, 69,233, 11,165, 51,187,255,233,165, 73, 90, 55,255,147,119,159,248,250,251, 13, 10,150,177,224,224,158, 95,145,239,100, -214,203, 71,163,101, 88,177,114,157,133,231,185, 68, 79,117,240,205,140, 96,246,134,214, 15, 60,141, 47, 55, 45, 69, 72,139,129, -120,228,193, 46,216,183,240, 9, 60,218,212, 0,203,207,163,208,252,145,229, 88, 54,173, 36,122,211,234,151,105, 94, 93, 43,124, -117,255, 78, 88,201,178, 44,148, 42, 53,100,138,127,163, 47, 10,141, 6, 92, 37, 34,182,182,188,187,139, 84, 85,118,127,112, 28, -135,186,117,235,162, 94,189,122,232,220,185, 51, 90,183,110,141,158, 61,123,226,196,137, 19, 56,113,226, 4, 38, 78,156,232,206, - 92,121, 60, 70,253,250,245,195,128, 1, 3,110,249,216, 56, 31,247,170,192,155,178,244,194, 11, 47, 0,192, 45, 69,179,238,107, -131, 21, 28, 28, 12,133, 66,113, 83,134,202,149,166,217,108,182, 27, 43,181, 90,109,143, 88,173, 95,191,190, 50, 5,124,155,193, - 96,136,121,251,237,183, 95, 81,171,213, 61, 13, 6, 67, 19, 0,208,104, 52,103,245,122,253, 95, 22,139,229,115, 0,121,183,146, - 86, 71,131,225, 34,202,229,246, 22, 63, 43, 43,171,255,152, 49, 99,182,177, 44, 91,199,221,131,153, 29,204,106, 82,102,102,230, - 64, 79,154,143, 63,254,184, 75, 77, 87,186,222,104, 86, 96, 14,203,152, 42,199, 17,134, 94, 21, 50, 15, 19,137,202,100, 50,232, -116, 58,172, 93,187, 22, 65, 65, 65,247,213, 9,118, 48, 62,253, 35,119,203,187, 7, 41,118, 3, 8, 30,246,233,234,107,187,115, - 44,209,195, 62, 93,125,245,247,201,143,213,242, 96,120, 58,205,157, 59,119,159,213,106,141,246,178,220, 94, 53,153, 76, 93, 42, -155,118, 66, 8, 18, 19, 19,165,103,159,125, 54, 59, 43, 43,235,145,155,201,255,158,131, 87, 63,235,210, 46,162,198,136,161, 93, -218,130, 97, 96, 54, 87,208,169,151, 1, 33,132, 16,158, 99,147,119, 31, 74,126,246, 14, 63, 66,227,248,213,171, 87,103,213,175, - 95,255,121, 0, 21, 93, 9, 87,121, 18, 73, 2,204, 10,147,233,147, 54,109,218,188,241,230,155,111,250, 63,248,224,131,168, 89, -179, 38,252,252,252, 42,157,160,253, 71, 82,159,239, 16, 39, 70, 61, 60,164, 75,127,150, 97,136,201,236,190,115, 52, 99,219,159, - 60,151,184,231,112, 74, 75,119,209,121,155, 41,175,142,104, 67,239, 17, 79,161,247,136,167,236,229,105,199,154, 30,136, 79,221, -138, 56, 54, 21,166,175,187,128,241,181, 21,117,207,211,220,176, 44,139, 7,191, 95, 11,185, 92,110, 79,103,167,185,101,199, 5, - 52,124,209,251,103,169, 59,230,221, 49,130,229,162, 46,174, 84, 31, 44,142,227,144,157,157,141,115,231,206, 33, 51, 51, 19,122, -189, 30, 9, 9, 9, 48,155,205,200,205,205, 69,243,230,205, 43,119,119, 95, 13,199,232, 78,106,254, 23,140,213, 77, 25, 44, 66, - 72, 74,251,246,237, 61, 93,140, 43, 53,202,136,231,121, 99,151, 46, 93, 24, 87,163, 13,108,159,213,106,181,183,183,207,121, 22, -139,101,134,197, 98,153,129,210,166, 48,139,197,114,203, 29, 73, 68, 81, 76,107,215,174, 29,231,174,210,151, 36,201,237,140,113, -217,217,217,197,217,217,217, 85,250,232,240,234,208,116,113,210,136,207, 63,255,188, 91, 39,165,213,106,221,118, 46,242, 52,145, -168, 94,175, 79, 31, 51,102,140,232,216,212,236, 56, 17,233,125, 13, 67,174, 14, 26,249, 76,244,238, 28, 75, 52, 0,216, 76, 22, - 8,185, 90,209, 38, 71,143, 30,205, 4, 80,191,186,147,118,249,242,101,115,251,246,237, 87, 20, 22, 22,190, 0, 64,127,179, 58, -251,142,164, 77,187, 7,143,204,113, 0,227,111, 85,196, 12, 36,132, 26,141, 19,102,188,243,206,195,239,190,243, 78, 67, 9, 8, - 66,233, 28, 85,156, 23, 38,205,145, 67,241, 25, 85, 62, 55,152, 40,138, 41,157, 58,117,170,244, 54,158,150,187,153, 73, 28, 63, -161, 38,112,180,242,154,213,145, 78,155,102,139, 22, 45,208,170, 85, 43,251,187, 13,199,223, 91,183,110,237,149,102,108,108, 44, -154, 54,109, 90,225, 12,237,206,125,174,238,116,222,109,216,110,125, 91,183,222, 82,101,154,183,154, 78,138,123,154, 83, 77,170, - 73, 53,239, 89, 77,142,238, 79,170, 73, 53,169,230,109,212,188,111, 32,132,128,165,187,129, 66,161, 84,116,131, 73,119, 1,133, - 66,161,220, 28,140, 27, 23, 90,153,145, 59, 55,227,100, 79, 81, 77,170, 73, 53,169, 38,213,164,154, 84,243, 63,167,233, 73,187, -170, 71, 14,223,118,200,109,152, 48,153,134, 79,169, 38,213,164,154, 84,147,106, 82, 77,170,249,159,130, 54, 17, 82, 40, 20, 10, -133, 66,161, 84, 3, 60,221, 5, 20,202,127,155, 25,184,181, 27,173, 25,229,230, 6,253,111,167,147, 66,161, 80, 0,208, 8, 22, -133, 66,161, 80, 40, 20, 10, 53, 88, 20, 10,133, 66,161, 80, 40,212, 96, 81, 40, 20, 10,133, 66,161,252,183, 96,232, 46,160, 80, -254,219,204,160,125,176, 40, 20, 10,165, 74,161,163, 8, 41, 20, 10,133, 66,161, 80,170, 1,219, 40, 66,199, 25,177,104, 84,139, - 66,161, 80, 40, 20,202,237,230,190,242, 34, 60, 53, 86, 20, 10,133, 66,161, 80,238, 18,238, 27, 47,194, 86,224, 28, 41, 20, 10, -133, 66,161, 80,110, 55,247,141, 23, 97,239, 71,215, 72,161, 80, 40, 20, 10,229,158,228,190,141, 96,209, 40, 22,133, 66,161, 80, - 40,148, 59,197,125,227, 69,248,251,205, 49, 82, 40, 20, 10,133, 66,185, 39,185,175,188, 72,117, 79,211, 64,159, 52, 78, 53,169, - 38,213,164,154, 84,147,106, 82,205,255, 28,116, 30, 44, 10,133, 66,161, 80, 40, 20,106,176, 40, 20, 10,133, 66,161, 80,168,193, -162, 80, 40, 20, 10,133, 66,249, 79,193,211, 93, 64,161,252,183,153,113,143, 60,163,111, 6,125,150, 32,133, 66,185,135,160, 17, - 44, 10,133, 66,161, 80, 40,148, 42,134, 65,197, 35, 1, 78, 85, 66,231,102, 70, 19,156,162,154, 84,147,106, 82, 77,170, 73, 53, -169,230,127, 78,211,147,246, 41,220,227, 16, 82,253, 83,121,209, 33,172, 84,147,106, 82, 77,170, 73, 53,169, 38,213,252, 79, 65, - 8,161, 77,132,148,114,240,112,223, 55,207,211,242,219,165, 73,161, 80, 40, 20,202, 93,125, 49,165, 80,108,116, 4, 48,184,244, -243, 70, 0, 7, 43,185,252,118,105,222, 17, 98, 99, 99,213, 42,149,170,223,206,157, 59,229,137,137,137, 56,116,232, 16,249,233, -167,159,172, 70,163,113,235,177, 99,199, 12,180,248,220, 31,180,110,221,186, 63,195, 48, 83, 74,239, 66, 63,252,231,159,127,182, -220,130, 28, 83,191,126,253,137, 10,133, 98,144, 76, 38,139, 16, 69,145, 49,153, 76,105, 6,131, 97, 91,106,106,234,167,184,185, -142,251,109,107,212,168, 49, 62, 38, 38,166,225,229,203,151,147,175, 93,187,182, 28,192, 22, 0,253,107,213,170, 53,166,110,221, -186, 53, 79,159, 62,125, 62, 59, 59,123, 9,128,191,239, 96, 58, 41, 20,106,176,188,128, 13, 8, 8,232,171, 86,171, 95, 41, 42, - 42,138,245,245,245, 61, 45, 8,194,130,244,244,244,141,244,196,187,175,202,194, 96, 66,136, 12, 0, 56,142, 27,218,174, 93,187, -104,134, 97, 36,134, 97, 8, 33,132, 57,124,248,112,107, 81, 20, 89, 0, 96, 24,102,112,105,229, 45,220,172,166, 32, 8,204,209, -163, 71, 43,171, 89, 45, 52,107,214,108, 54, 33, 36,194,237, 14,226,249, 54, 59,118,236,104,188,110,221, 58, 97,249,242,229,121, -143, 61,246,152,238,201, 39,159,228,151, 45, 91,246, 37,128,255, 57,175,223,180,105,211,207, 88,150,173,225,205,255, 75,146,148, -157,144,144,240, 42, 45,134,119, 30,134, 97,166, 60, 51,119, 87, 55,137, 0,223, 77,237,206,150,154,151,155, 53,107, 63, 60,244, -208, 67, 35, 27, 53,106,196, 75,146, 4,171,213, 10,147,201,212,248,216,177, 99, 61,182,108,217,210, 38, 41, 41,233,145, 74, 74, - 14,158, 58,117,234,210, 89,179,102, 5,203,100, 50,198,106,181,118,248,249,231,159, 7,140, 31, 63,254,248,146, 37, 75, 90, 61, -250,232,163, 62,182,223,223,125,247,221,129,115,230,204,153, 4, 96,213, 29, 72, 39,133, 66, 47,170,238, 22,234,116,186, 6,193, -193,193,147, 11, 10, 10, 6,182,105,211, 38,127,220,184,113,151, 78,156, 56,145, 16, 19, 19, 83,244,253,247,223,127, 96,181, 90, - 23, 5, 4, 4,108, 45, 40, 40,248, 52, 51, 51, 51,161,146,255,221, 0,192, 56, 0, 3, 1, 68, 1, 72, 3,176, 25,192, 82, 0, -137, 55,147,153,136,136,136, 22, 90,173,246, 13,134, 97, 58, 20, 23, 23, 71,105,181,218, 52, 66,200,225,194,194,194,143, 51, 50, - 50,142,221,140,102,100,100,100, 61, 0, 47,243, 60,223, 85, 20,197, 58, 28,199, 93, 21, 69,113,175, 40,138, 11,211,211,211,207, -223,140,102,167, 40,221,131,146,206,247, 83, 43,167,174, 89,100, 20,228, 58, 37,111,149, 73,198,100,169, 56,111,234,145,228,226, - 95,239,134,130,161, 80, 40,216,229,203,151,183, 82, 40, 20, 0, 0,179,217,140,152,152,152, 91,122, 78,148, 76, 38, 99, 63,254, -248,227, 86,114,185, 28, 0, 96,177, 88,208,171, 87,175,187,226,217, 83, 12,195, 68,197,199,199,251,217,210,230,140, 40,138, 24, - 58,116,104,109,133, 66,129, 37, 75,150, 8,217,217,217,177,223,125,247, 93,252,151, 95,126, 89,227,135, 31,126, 24,225,202, 96, -177, 44, 91,163, 34, 77, 81, 20, 97,177, 88, 32, 8, 2,204,102, 51,122,246,236, 73,107,163,187, 4, 66, 72, 52, 1,176,249,132, - 17, 0,130,110, 69, 75,173, 86, 55, 25, 54,108, 24,159,149,149, 5,153, 76, 6,139,197,130,140,140, 12,212,171, 87,143, 51,155, -205,141, 42,171,215,184,113,227,241,115,230,204, 9,217,180,105,147,101,197,138, 21,166, 62,125,250,200,159,126,250,105,223,110, -221,186,117,141,138,138, 98,191,251,238, 59,211,246,237,219, 45,143, 63,254,184,114,246,236,217, 33,155, 55,111, 30,121,242,228, -201, 85,183, 59,157, 20, 10,197,141,193,210,233,116,187,117, 58, 93,253,231,158,123, 46,241,133, 23, 94,216,170,211,233, 68, 0, -200,200,200, 80, 14, 29, 58, 52,107,248,240,225,215,245,122, 61,183,104,209,162, 90, 95,124,241,197, 54,157, 78,151, 90, 84, 84, -212,206,155,107, 25,128, 87, 88,150,125,185, 95,191,126,187,173, 86,107,214,218,181,107,127, 25, 49, 98, 68, 23, 73,146,180, 59, -119,238,252, 67, 20,197,175, 0,124, 82,137,232, 24, 87,183,110,221, 25, 53,106,212,120,109,241,226,197,202, 58,117,234, 64,163, -209,160,176,176,176,214,249,243,231,107,190,242,202, 43, 67,212,106,245, 2, 63, 63,191,183,143, 29, 59,102,245,246,154, 27, 17, - 17,241, 63, 31, 31,159,247, 63,248,224, 3, 85,179,102,205, 24,141, 70,131,164,164,164,230, 7, 15, 30,140,249,246,219,111,159, -102, 89,118,102,106,106,170,215,233,236, 14,240,166,250,193, 91,124,106, 55,239,185,100,233,183, 76, 13,173, 6, 60,195,192,106, -177,200, 50,245,134,186, 47, 77,120,254,151, 14,202, 51,251, 11,101,153,189, 19, 18, 96,185,205,101, 65, 0,176,145,227,184,161, - 10,133,130, 29, 58,116, 40,182,111,223,206, 24,141, 70, 30, 0, 84, 42,149, 48,116,232, 80,168,213,106,152,205,102, 9, 37,205, -121, 2, 0,101,233,246, 38,119,154, 50,153,140,237,217,179,167,254,232,209,163, 57,122,189, 94,102,211,236,217,179,103,160, 82, -169,212, 88,173, 86,111, 53,171,211, 84,226,226,197,139,229,140,208,245,235,215,145,147,147, 3,147,201,196,228,230,230, 66, 20, - 69,152, 76,166, 44, 81, 20,193,178,172,173, 76,187, 68, 46,151,227,220,185,115,229,126,183, 88, 44, 48, 24, 12,176, 90,173, 40, - 40, 40, 80,171, 84,170,250, 93,186,116, 73, 1,176,174,168,168,232,211, 19, 39, 78, 92,165,213,211, 29,227,218, 31,255, 24,107, - 1,176, 0,184,124,139,198, 93, 2,128,189,123,247, 34, 51, 51, 19, 89, 89, 89,200,202,202, 66,205,154, 53, 65, 8,169,116,244, - 63, 49, 49,241,243,214,173, 91, 51,199,143, 31,223, 0, 96,233,234,213,171,135,221,184,113, 99,241,235,175,191, 30,248,241,199, - 31,223,120,227,141, 55, 38, 0,248,125,245,234,213, 79,181,104,209,226,193,147, 39, 79,206,191, 19,233,164, 80, 40,110,230,193, - 34,132, 68, 52,104,208,224,198,188,121,243, 26, 79,157, 58, 53,168,168,168,136, 43,141, 18, 25, 1, 64,175,215,115, 83,166, 76, - 9,158, 59,119,110, 99,165, 82,153, 43, 8, 66,176, 11, 25, 87, 67, 45, 95,246,245,245, 29,114,233,210,165,213,141, 27, 55, 14, -156, 51,103,206, 63, 90,173,150,204,159, 63,255, 88,189,122,245,194,175, 94,189,250,163,175,175,111, 47, 0,175, 85,144,180,114, -154,181,107,215,126,119,196,136, 17,175,237,223,191, 95,217,178,101, 75,248,248,248,128,227, 56,248,251,251,163,125,251,246,204, -158, 61,123,148,131, 6, 13,154,152,159,159,255,177,183,154,145,145,145,175, 13, 24, 48,224,131,163, 71,143,170,123,247,238,205, - 40, 20, 10,228,229,229, 65,161, 80,160, 99,199,142,204,226, 47, 23,170,155, 55,107,250,110, 84, 84,212, 44,111, 53, 77, 13,106, -108,123,236,133, 41,189, 54,110,222,194,132,134,134,226,210, 39,179,176,183, 91, 12, 46,188, 55, 21,225,225,225,216,176,233, 79, -102,240,216, 23,186,248, 90, 67,119,122,171, 89, 5, 56,106, 30,140,137,137,137, 79, 72, 72, 64,215,174, 93,241,203, 47,191,180, -124,253,245,215, 95,120,253,245,215, 95,248,229,151, 95, 90,118,237,218, 21, 9, 9, 9,136,137,137,137, 71, 73, 95,169, 23, 0, -220, 40,125,189,224, 78,115,247,238,221,232,213,171, 87,238,234,213,171,235, 77,159, 62,125,246,244,233,211,103,255,242,203, 47, -117,123,245,234,149,187,123,247,238,202,106, 86, 71,222,237,134,202,249, 69, 8,129, 36, 73, 8, 9, 9,185,190,105,211, 38, 50, -120,240, 96, 46, 44, 44, 44,109,232,208,161,202,195,135, 15, 19,134, 97, 54, 86, 38,157,132, 16, 24, 12, 6, 24, 12, 6, 92,190, -124, 89,189, 96,193,130, 46,175,189,246, 90,131,159,127,254, 57,114,226,196,137, 19,124,125,125,143,181,108,217, 50,250,118,231, -157,106,218, 35,143, 25,165,230,170,152,101,217,107, 55,171, 57,124,248,240,230,209,209,209,161, 63,159, 14, 64,174,188, 49, 68, -153, 31, 36,185, 63,196,160,182,184, 32, 31,128,136,136,136,208, 90,181,106,117,172,100, 58,183, 29, 63,126,124, 32,128, 37, 0, - 68, 0,107,222,120,227,141,103, 25,134,249,245,141, 55,222,120, 30,192,154,210,223,191, 57,121,242,228,131, 0,254,186, 67,233, -164,101,137,106, 86, 41,132,144,182,132,144, 7, 74, 95,237, 8, 33,237,157,190, 43,156,214,235, 83,193,251, 3, 78,223,219, 58, -109,215,182,170, 13, 22,113,120,217,238,104,172, 31,125,244,209,161,111,191,253,118,123,122,122,122,120,221,186,117, 31, 24, 54, -108, 88,116, 65, 65, 1, 59,124,248,240,218,225,225,225,131,255,250,235,175,176,225,195,135,239, 28, 49, 98,196, 65,134, 97,188, -233, 55, 83,143,227,184, 73,199,143, 31,223, 87,187,118,109, 75, 90, 90,154, 79,235,214,173, 11, 1,160, 97,195,134,250,156,156, - 28,181,143,143, 15, 54,109,218,116,132, 97,152,113, 0, 26,123, 18, 12, 15, 15,111, 93,163, 70,141,215,222,127,255,125, 37,199, -113, 46,215, 81, 42,149,120,255,253,247,149,190,190,190,207, 69, 68, 68,116,240,164, 25, 26, 26,218,196,199,199,103,198,130, 5, - 11, 84,102,179, 25, 22,139, 5,161,161,161,208,233,116, 72, 79, 79, 71,234,149, 43,184,158,148,132,137,207, 60,163,214,170,213, -147,194,195,195, 91,121,210,236, 18,173, 27,170,139,108,218,227,165,151, 95,193,153, 87,158,193,246, 72, 5,194, 94,158,130,150, -187, 78, 33,106,230,167,248,171,174, 47,226, 31,233,139, 73,147, 38, 67, 30, 82,183, 83,199, 40,237, 99,119, 36,164,201,243, 68, -169, 84,194,104, 52,242,123,247,238,237, 42, 8,130, 76, 16, 4,217,158, 61,123,122,108,221,186,117,224,156, 57,115,250,171,213, -234, 9, 29, 58,116,248,129, 97,152,207, 9, 33,106, 66,136, 26,192,199, 14,145,167,114,154, 50,153, 12, 6,131, 65,118,244,232, -209,231, 69, 81, 84,136,162,168, 56,122,244,232,139,127,253,245,215,152, 37, 75,150, 84, 90,243,118,193,113, 28,120,158,135, 76, - 38, 67,171, 86,173, 46,173, 92,185,210, 26, 17, 17,193,127,253,245,215, 1, 33, 33, 33,218, 31,126,248, 33, 47, 55, 55,247,163, -202,104,154,205,102,152, 76, 38, 24, 12, 6,236,221,187,183,206,115,207, 61,199,155,205,102,113,236,216,177, 55,172, 86,171,233, -197, 23, 95,244,213,233,116,147,233,253,223,157,129, 16, 34, 2, 40, 6, 80, 68, 8, 49, 1, 64,116,116,180, 50, 34, 34,162, 69, -116,116,180,215,229,177,168,168,232,171,207, 62,251, 44,138, 85,250, 99,159,121, 16, 86,147, 89,216,230,255, 37,178,106,191,142, -208,154, 13, 48, 96,192,128, 16,134, 97, 22, 86, 65,146,215, 1, 24, 1,224,183,155,217,184,186,211,217,166, 77,155,174,113,113, -113, 71, 99, 99, 99,211,227,226,226,142,182,105,211,166,235,173,102,120,230,243,232, 51,247, 37, 54,101,214,120,144,185, 47,177, - 41, 51,159, 71, 31, 90,114,239,143,211,207,217,139, 56, 16,204, 48,204, 70,134, 97, 54, 78,155, 54,173, 39,128, 32,167,239,157, - 28,215, 3,160,112,245,110,123, 57,252, 30, 76, 8,121,192, 97,187,224, 42,187,158, 58,124,118,217,204, 17, 28, 28,108,126,243, -205, 55,143, 27,141,198, 83, 63,252,240, 67,253, 23, 94,120,161,117,116,116,244,185,225,195,135,255,161,209,104, 4, 91, 31, 29, - 47,121,102,208,160, 65,155, 2, 3, 3,153,236,236,108,185,217,108,230, 51, 50, 50,228,162, 40, 50, 28,199, 17,189, 94,207, 95, -184,112, 65,102,177, 88,164, 14, 29, 58,172, 63,120,240,224, 56, 0,147,220, 9,106, 52,154, 23,191,254,250,107, 85, 69,230, 74, - 20, 69, 20, 21, 21, 65, 16, 4,204,156, 57, 83,245,218,107,175,189, 2,224,144, 59, 77,153, 76, 54,113,222,188,121, 42, 91, 19, -144, 36, 73, 56,118,236, 24,178,175, 95,135,169,176, 0,230,194, 2,152,243,115,193, 22,229, 99,204,192,254,170, 37,191,173,125, - 21,192, 24,183, 23, 85,165,110,238, 15, 75,191,133, 40,138, 72, 91,235,186, 75,196,141,253,187, 32, 10, 86,204,254,240, 99,102, -210, 51,143,206, 1,138, 87,223, 45,165, 94,161, 80,176,159,124,242, 73, 99,133, 66, 1,134, 97,136,217,108, 70,179,102,205,152, - 91,212,228, 62,255,252,243,214,114,185,156,177,105, 54,111,222,156,185,219,206,120,185, 92, 14,181, 90,141,218,181,107, 27, 30, -124,240,193,131,159,127,254,121, 45,142,227, 52, 60,207,255,153,159,159, 63,231,204,153, 51,149,106, 70, 50,153, 76, 48, 26,141, - 48, 26,141,184,118,237, 90, 88,253,250,245,153,255,253,239,127, 98,113,113,113,221,111,190,249,230,226,234,213,171, 53, 11, 23, - 46, 28, 14,224,101, 90,223,222, 94,234,213,171,167, 0,224, 87, 43,136, 47,150,113, 40, 78, 23,132,208,200,200,200, 41,130, 32, -180,105,216,176, 97,192,133, 11, 23,114, 35, 34, 34, 14,177, 44,187, 42, 37, 37, 37,221,131, 81, 99, 4, 65,192,243,237,242, 48, -161, 3, 11, 65, 16,144,151,151,135,107,215,174,225,244,233,211, 56,124,248,244, 77,165,177,118,237,218,207,168, 84,170,126, 10, -133,162,182, 40,138,172, 94,175,191,106, 50,153,182,167,165,165,125, 85,193,133, 9,119, 34,157, 14,250,159, 14, 27, 54, 44,194, -207,207, 15,255,252,243, 79,196,137, 19, 39, 62, 5,208,230,150,234, 14, 25,251,221,216,103, 23, 70, 6,250,251, 35, 41, 97, 67, -228,186,205, 63,127, 7, 72, 81,180, 4,223, 23, 84,116, 13,200, 34,132, 12, 46, 13, 0,109,156, 51,103,206,224,210,242, 53,216, -241,187, 23,229,177,220,122, 12,195,108,116,245,123, 85, 26, 44,226, 38, 99, 80,169, 84,226,248,241,227,207,173, 95,191,190,118, -155, 54,109,206, 86,212, 25,216, 3,157, 27, 55,110,124,245,200,145, 35, 36, 56, 56,216, 44, 73, 18,163,209,104, 68,181, 90, 45, -229,231,231,195,106,181,146,171, 87,175,242,215,174, 93,147,215,168, 81, 67, 14,192, 99,168, 78, 38,147,117,172, 83,167, 78,133, -145,130,162,162, 34, 20, 22, 22,194,100, 50, 33, 52, 52,148, 97, 89,182,189,199,176, 30,203,118,105,220,184, 49,147,155,155,139, -136,136, 8,236,219,183, 15, 69,249,121, 48, 21, 22,194,148,159, 7, 75, 65, 62,196,130, 60,228, 93, 79, 71,237,240, 40,134, 97, -152,142,158, 52, 5, 78, 29, 29,162,211,226,194,172, 41,104,123,236, 42, 24,153, 28, 71,154,135,131, 88, 75,186, 90,181, 59,153, - 6, 70,174,192,217,137, 79, 34,108,244,115,176,178,202,200, 59, 81,178, 5, 65, 96, 76, 38, 19, 84, 42,149,208,181,107,215,189, - 28,199,245, 80, 40, 20,236,132, 9, 19,144,145,145, 81,230, 4,152, 48, 97, 2,212,106, 53, 76, 38,147, 0,224,117, 84,208,103, - 74, 16, 4,198,106,181, 66,173, 86, 91,219,180,105,243, 21,199,113, 47, 42, 20, 10,174, 81,163, 70,153,115,231,206, 77,211,106, -181,218,107,215,174,221, 80, 40, 20, 41,181,107,215,110,167, 86,171,163, 61,105,222, 78,148, 74, 37,120,158, 7,203,178, 8, 10, - 10, 42,206,201,201, 57,124,249,242,229, 81, 55,163, 37,138, 34,204,102, 51,172, 86, 43,140, 70, 35, 36, 73,194,137, 19, 39,160, - 84, 42,101,162, 40,158, 22, 69, 81, 35,147,201,192,113, 28,157,163,238, 54, 19, 27, 27,219,163,182, 26,159, 78, 8, 55, 5,212, - 27,172, 45,210, 40,185,226,145,107,173,109,251,244,121,164,255,235,175, 79,209,213,168, 81, 67,113,229,202, 21,227,252,249,243, -235,252,254,251,239, 12, 74,250,137, 86, 72, 90, 90,218,175,115,231,206, 13,236,209,163, 71, 93,153, 76,198,228,229,229, 33, 43, - 43, 11,215,175, 95,199,181,107,215, 72, 82, 82,210, 37, 65, 16,126,169, 76, 26, 91,180,104,241,205,224,193,131,199, 54,107,214, - 76, 70, 8,129,213,106,133, 94,175,111,125,248,240,225, 33,251,246,237,235,122,229,202,149, 74,151,203,244,244,244, 95, 62,252, -240, 67,109,247,238,221, 27,203,100, 50,182, 42,210,233,116, 65,139,208,233,116,216,190,125, 59,124,125,125,225,105,180,174, 55, - 88, 4, 41, 50,208, 63, 8,198,243,159, 33,194, 55, 26, 22, 65,138,164, 37,248,190,138, 98, 49, 46, 76,208,223,132,144, 7,110, -213, 12, 85,151,153,186,169, 8,150,141,140,140, 12,101, 81, 81, 17, 47, 73, 18,107, 50,153,100,146, 36, 65, 38,147, 89, 43,249, -127,205,134, 13, 27,118,168,109,219,182,250,210, 8,134,224,231,231, 39,228,231,231,163,212, 96, 73, 60,207, 27,117, 58,157,177, -110,221,186,128, 23, 77,132, 6,131,161,150, 90,173, 46,247,187, 94,175, 71, 81, 81,145,221, 96,233,245,122,248,250,250,162,184, -184,216,227,201, 45,138, 98,109,141, 70,131,180,180, 52, 0, 64, 81, 94, 46,140, 5, 5,176, 20,230,195,146,151, 11,107,126, 30, -172,249,185, 96, 13, 6,248, 71,213,132, 32, 8, 53, 61,105, 22,155, 68, 5, 7,130,235, 27,127, 69,232,139,175, 87,184,222,141, -189,127, 65, 87,191, 17, 12, 6,203,157,152,163,172,227,233,211,167,227,154, 54,109,138,161, 67,135,226,145, 71, 30, 57,161, 86, -171, 67, 22, 46, 92,216, 44, 53, 53,181,220,202, 15, 61,244, 16, 94,126,249,101, 12, 27, 54,236,199,227,199,143, 47,114,167,217, -189,123,119,244,236,217, 51,240,145, 71, 30, 73,210,233,116,241, 75,151, 46,109, 55,115,230,204, 76,189, 94,159, 26, 31, 31,223, - 34, 37, 37, 69,211,176, 97,195, 93, 49, 49, 49,236,166, 77,155,162, 61,104,222,110,211, 9,171,213, 10,139,197, 2,147,201, 4, - 66,136,215, 81, 54,231,199, 37, 88,173, 86,251, 8, 66,163,209, 8,171,213,202,172, 91,183, 22, 27, 54,108, 96, 19, 18,206, 68, - 77,157, 58, 13,121,121,121, 16, 69,145, 86,179,183,137,184,184,184,129, 60,145,190,126, 52,204,170,122, 60, 84, 40,226, 89, 82, -116,254,219,183,139, 79,248,243, 38, 83, 49,227,243,214,219,111, 7, 92,188,120,209,242,225,135, 31,166, 15, 29, 58, 84,245,236, -179,207, 54,221,180,105, 83,215,154, 53,107,126,155,156,156,156, 87, 81,224,179, 67,135, 14,135, 2, 2, 2,234,173, 88,177, 34, - 51, 45, 45, 45,208,106,181,106,204,102,179,197,108, 54, 95,180, 88, 44,251,204,102,243,246,140,140,140,248,202,164, 85,167,211, -181,124,236,177,199,100,185,185,185,224,121, 30, 22,139, 5, 89, 89, 89,136,141,141,229,118,236,216,209,236,102,242,159,144,144, -240, 89, 94, 94,222,174, 13, 27, 54,244,211,106,181,113, 10,133, 34, 76, 20, 69,209,104, 52,102, 26,141,198,227, 55,147, 78,167, - 11, 90,218,177, 99,199, 34,124,124,124,144,154,154, 10,134, 97,210,110,245,152,201,101,108,114,210,217,245, 53, 35,124,235, 32, - 49,241, 16,228, 50, 54,153,206, 24,116,127, 71,176, 28,250, 74, 13,246, 96,146, 12, 83,167, 78,125,147, 97,152,141, 83,167, 78, -125,211, 77, 4, 75,116, 92,207, 97,253, 42,187,169,119,123, 17, 47, 44, 44,228,255,254,251,239,160,107,215,174,233,194,194,194, -244, 49, 49, 49,121, 12,195, 16, 81, 20,217, 27, 55,110,104, 83, 82, 82, 84, 1, 1, 1,166,154, 53,107,230,123,249,127,231, 95, -122,233,165,238,211,167, 79,143,239,219,183,111, 54, 0,228,230,230, 34, 43, 43,203, 54, 74, 11,105,105,105,236,209,163, 71, 3, -255,252,243,207,214,240, 98, 4,143, 90,173,190, 86, 88, 88,216,200,223,223,223,126, 65,179,153, 42,199,119,139,197,130,194,194, - 66,104,181, 90,143, 39, 55,203,178,169,169,169,169,245, 13, 6, 61,174, 94,184, 0, 83, 97, 62, 44, 5,249,176, 22,228,193,154, -151, 7, 49,239, 6,216,162, 66,232,212,106, 20,222,200, 1,199,113, 25,158, 52,181, 74,206,108, 21, 68, 69,240,128, 33, 0, 83, -241,245,217,191,125, 23,144, 38, 45,161, 86,255,102,189,205,133,154, 7, 48,216, 54, 39,149, 90,173,198, 7, 31,124,128,248,248, -120,201, 93, 51,176, 66,161, 0,203,178,162, 55,154, 74,165, 82, 61,125,250,116,245,241,227,199, 85, 10,133, 2, 58,157, 78,115, -252,248,241, 22, 7, 14, 28, 96,245,122, 61, 87,191,126,253, 97,145,145,145, 69, 30, 52,171,213, 72,185,250,173,168,168,200,222, -111,234,198,141, 27,188, 74,165,106,216,181,107,215,131,102,179,249, 23, 65, 16,190, 63,118,236, 88, 65,133,119,218,150,242,131, - 65, 37, 73,130, 32, 8, 16, 4, 1, 60,207, 75,235,214,173,199, 23,139, 62,199,154,213,191,145,238,221,187, 51,155, 54,109,130, - 36, 73, 41,180,158,189, 61, 72,146,244,233, 95, 83, 30, 86, 65, 20,139, 76,187, 86, 22,111,201,225,139,191, 61,245,215,209, 28, -171, 73,217,160, 65,221, 38,190, 62,126,236, 15,203,191,189,145,158,121,233,252, 23, 95,164,212,156, 61,123,182,127,221,186,117, -253,206,157, 59, 23, 9, 32,175, 2, 35, 84,251,201, 39,159,124,250,198,141, 27,178,165, 75,151, 46, 75, 77, 77,221, 3,224,146, -115,208, 12, 37,253, 12,101, 0, 66, 81, 50,130,118, 27,128, 31,221,152, 21,137, 97, 24,236,218,181,171,220,104, 63, 73,146,110, -218, 97,164,167,167,231,182,111,223,190,229,249,243,231,215,229,229,229,173,112, 81,207, 14,137,137,137, 25,121,228,200,145,119, - 0, 92,172,100, 4,107, 82, 66, 66,194, 71,146, 36, 69,179, 44,123,149, 16,242,198,173, 30, 51,179, 69,122,118,253,230,213, 75, -205, 86,177,150, 66,198, 93, 51, 91,164,231,104, 73,190,239,177,245,145,130,163,113,114, 97,140, 14,204,153, 51, 71, 61,119,238, - 92,204,153, 51,231,180,171, 8,150,205,104,205,153, 51,231,180,109, 61,135,245,247, 84,181,193, 98, 92, 92, 88,116,211,166, 77, -235,220,186,117,235,180, 30, 61,122,164,215,169, 83, 71,111, 91,166,209,104,204,254,254,254,102,147,201,164, 76, 75, 75, 11, 62, -123,246,108, 29, 73,146,212, 94,252,223, 78,127,127,255,192,163, 71,143, 6,173, 90,181,170,193,177, 99,199,162, 71,143, 30,221, -221,100, 50,193,108, 54,227,242,229,203,209, 95,127,253,181, 36,151,203,243, 24,134,249, 27, 37,163, 97,220, 98,181, 90, 15,158, - 63,127,190, 97,251,246,237, 25,171,213, 90,198, 84, 57,126, 86, 40, 20, 72, 77, 77, 37,146, 36, 29,246, 34,157,135,142, 30, 57, - 82,191,121,211,166, 48,229,231,194, 92,144, 7, 75,126, 30,132,252, 60, 72, 5,121, 96,139, 10, 17, 20, 40,131, 90,173,197,249, -180,116,148,166,213, 45, 50,193,144,148,154, 95,208,168,254,140, 79,240, 87, 93, 95, 16,171,197,222, 44, 8,192,222, 92,216,233, -108, 22,246, 30, 56, 8, 94, 52,165,222,201,146,108, 54,155,165,225,195,135, 31, 97, 89,182,202,158, 55,101,181, 90,165, 23, 94, -120,193,174,153,156,156,124, 35, 57, 57, 89,101, 48, 24, 88,157, 78, 87,116,167,207, 94,171,213,234,210, 32,153,205,102, 24, 12, - 6,164,167,167, 43,182,109,219,214,245,224,193,131,242, 51,103,206,224,224,193,131,173,214,173, 91, 55,173,113,227,198, 45, 19, - 19, 19, 51,188, 49,109,146, 36,193,118, 29, 36,132,128, 16,194, 1,192,250,223, 55, 98,192,128, 1, 76, 97, 97, 33, 54,108,216, - 80, 37,205, 40, 20,175, 41,134, 32,170,205,187, 87, 22, 79,190,160, 40, 56,173,231,223,143,143,143,223, 50,104,208,160,189, 17, -161,117,125, 1, 64, 41,215, 5,115,196, 71, 23, 28, 28,172, 4,128,136,136,136, 56,171,213,186, 40, 53, 53,181,139, 43,193,135, - 30,122,168, 83, 72, 72, 72,235,205,155, 55, 31, 79, 77, 77,221,235,194, 92,161, 81,163, 70, 51, 79,157, 58, 53, 80, 38,147, 49, - 14,149, 63,169,200, 96, 13, 31, 62,188,145, 66,161, 8,218,116,222, 15, 5,242,250,144,216, 60, 16, 78, 9,209,191, 37,174,202, -155, 33, 52,244,108,144, 70,163,105,117,233,210,165,227,149,204,127,173, 71, 31,125,244,143,111,190,249,166,201,128, 1, 3, 20, -251,247,239, 47,103,176,154, 52,105, 50,124,199,142, 29, 35, 38, 76,152,208,114,197,138, 21, 15, 2,184,224,173,248,177, 99,199, -246,163,228,137, 13, 85,198,187, 95, 97, 59, 32, 70,151, 6, 34,104, 9,190,207,163, 87,165,100, 57, 68,159,178, 0, 48, 78,223, -143,151,158, 67,102, 66,136,109,221, 44,135,168,149,217, 41,234,229,106, 89, 22,195, 48, 85, 22,220,224,221,220,121,111,187,124, -249,114,219, 71, 31,125, 52,203,209, 92, 57, 54,143,232,116, 58,147,175,175,111,209,145, 35, 71, 34, 68, 81,220,229,197,255, 45, -221,177, 99,199, 95, 11, 22, 44, 88, 25, 24, 24,104, 29, 51,102, 12, 59,101,202,148,189, 57, 57, 57, 36, 39, 39, 7, 11, 23, 46, -236,214,181,107,215,189, 87,175, 94, 21,227,227,227,159, 2, 48,192,147,160, 94,175,255,242,197, 23, 95, 28,185,119,239, 94,149, -217,108, 70, 94, 94, 94,185,232,149,213,106, 5,199,113, 88,180,104,145,169,184,184,248,115, 47, 34, 25, 95,125,249,229,151, 35, -190,254, 98,129,138,183, 90,160,207,203,133, 88,250,226,140,197,208,169, 88,212,111, 29,140,188, 52, 37,150,111,222,111, 16, 4, -225, 75,143, 6,203, 88,244,250,132,231,199,109,220,182,243, 47, 4,117,233,133,236,191,254, 44, 31, 13, 10, 14,133,217, 98,193, -251,179,102, 16,198,144, 55,229,118, 7,112, 0,108, 44,157, 77, 29, 0, 54, 30, 63,126,252, 96,171, 86,173, 6,154,205,102,119, - 70, 12,146, 36,113, 55,163,169, 84, 42, 83, 26, 53,106,180,179, 94,189,122,195, 0,160,105,211,166,191,179, 44,219,203,131,102, -181, 26,172,233,211,167, 99,238,220,185,152, 58,117,170,221, 32,217,110, 0, 76, 38, 83,157, 63,255,252, 83,177,127,255,126,178, -124,249,242,236,135, 31,126,216,127,244,232,209,254, 43, 86,172,248, 31,128, 41, 21,105,190,241,198, 27, 88,178,100, 9,198,143, - 31, 95,110, 57,199,113, 82,106,106, 10, 76,102, 19, 89,191,126,125, 26,207,243, 1,243,231,207, 87,191,246,218,107, 12,173,107, -111, 15,162, 40,190,213,229,179,117,175, 0,106,171, 32, 8,159,159, 60, 25,191,171, 52,106, 19,242,217,103,159, 41, 0,224,147, -143, 63,145, 17, 66,100,182,137, 97,223,123,239, 61,213,243,207, 63, 31, 82,145,230,175,191,254,154,251,222,123,239, 5, 61,251, -236,179, 3,254,250,235, 47,213,145, 35, 71,254, 68,201, 83, 10,178, 75, 29, 65,141,115,231,206,237, 15, 14, 14, 14, 95,189,122, -117,253,126,253,250,105, 61,186,192,226,226,111, 23, 47, 94, 92,251,211, 61, 62,216, 84, 60, 12,201,228, 17,144, 64,130, 64,121, - 33,154,234,174,161,123,120,114,196,138, 21, 43,150, 2,136,171, 68,246,155, 61,252,240,195,107,191,249,230,155, 58,227,198,141, - 75,217,191,127,127, 50,128,153,206, 43,197,199,199,231, 60,249,228,147, 87,151, 45, 91, 86, 95,146,164, 45, 43, 87,174, 28, 0, -224, 60, 45, 61,148,219,230,188,188, 8,100,220,204,186,213, 9,239,166,210,121, 38, 55, 55, 55,102,234,212,169, 31, 69, 68, 68, -212,154, 49, 99,198,149,166, 77,155, 22,219,150,231,228,228,232,118,239,222, 93,183,160,160,160, 80, 16,132,177, 0, 78,184,144, -105,142,178,115,101, 92,149, 36,233,163, 86,173, 90,141,252,249,231,159,119,251,248,248, 20, 28, 58,116,200,215,215,215, 55,255, -204,153, 51, 90,142,227,244,151, 46, 93,194,246,237,219,187, 1,248,162,130,187,164, 50,154,233,233,233,255, 40, 20,138, 79, 94, -123,237,181,215,222,121,231, 29,149, 36, 73, 48, 24, 12, 40, 44, 44,132,209,104,180,119, 78, 94,181,106,149,201,100, 50,125,157, -150,150,118,200, 11,205,131, 28,199, 45,249,124,254,231, 47, 60, 55,242, 81, 5,201,203, 65,126,186, 1,140,177, 24, 58,149, 2, -205,122, 69,162, 56,135,193, 55,187,143,154,111,152, 45,171,211,210,210,118,121,210,220,159, 92,244, 71,123,197,133,237,239,205, -154,209,103,218,247,191, 65,146, 36,156,125,113, 12,114,247,108,135,166,105, 11,116, 58,155, 5,179,217,140,169,111,188, 6, 78, -159,185,247,112,114,241, 26, 47,246,103, 85,224,168,121, 16,255, 62,187, 76, 0,240,194,137, 19, 39,198, 54,105,210, 4, 19, 38, - 76,192, 67, 15, 61, 84,102,195,181,107,215, 98,241,226,197, 48,153, 76, 99, 1, 28, 3,176,168, 50,154,117,234,212,105,215,172, - 89, 51, 46, 34, 34, 66, 95,106, 54,122,157, 62,125,186,109,147, 38, 77, 60,105, 86,121,222, 9, 33,185, 23, 46, 92,240,253,248, -227,143, 25,139,197,130,153, 51,103,194,102, 44,109, 17,167,183,222,122, 43,194,199,199, 7,159,126,250,169, 57, 59, 59,187,119, - 78, 78,206,142, 5, 11, 22,212, 88,181,106,213, 40, 7,131,229,168,121, 61, 33, 33,193,103,201,146, 37,172, 32, 8,248,236,179, -207,202, 69,180, 38, 77,154, 4,139,197, 10, 25, 47, 51,155,140,166,102,106,181,250, 98, 64, 64,128, 90,146, 36,114, 27,143,251, -127, 90,243,228,201,147,219, 80,210, 52,231, 18, 91, 63, 58,131,193,128,236,236,108,100,103,103,195,207,207,207,249,110,187,140, -166,193, 96, 56,254,198, 27,111,196,127,245,213, 87, 3, 14, 28, 56,240,232,158, 61,123, 6,109,223,190,221,120,245,234, 85,193, -106,181,146,240,240,112,190, 75,151, 46,170, 65,131, 6,105,149, 74, 37,251,214, 91,111,101,127,240,193, 7, 53, 0,228, 84,164, - 73, 8,225, 36, 73,194,171, 93, 11,240, 70, 79, 30, 38, 83,201, 13,101, 90, 90, 42, 78,159, 62,141,131, 7, 19,193, 48, 12, 91, -201,253,249,249,138, 21, 43,234, 42, 20, 10,102,229,202,149,181, 86,174, 92, 57,209,211,206,251,241,199, 31,107,175, 92,185,114, - 17,128, 62, 40,233,248, 68,203, 18,213,164, 84,198, 96,149,114, 90, 16,132, 1,215,174, 93,235, 50,110,220,184, 15,155, 52,105, - 98, 18, 4, 65,182,101,203,150,198,217,217,217, 10, 65, 16,222, 64,229,219, 43,151, 24,141, 70, 12, 29, 58,244,141,122,245,234, -237, 56,118,236, 88,203, 7, 30,120, 96,203,218,181,107,187, 8,130,112,233,212,169, 83, 99, 1,124, 94,106,176,188, 34, 41, 41, -105,230,246,237,219,153, 67,135, 14, 77,158, 58,117,170, 50, 56, 56,152,241,247,247,135,193, 96, 64,114,114, 50, 89,182,108,153, -201,100, 50,125,225,231,231,247,182,183,154,193,193,193, 83,246, 28, 61,170, 56,119,241,194, 83, 79, 13,236,171,170,213,176, 17, -116, 12, 80,116, 35, 7,187,119,167,227,251,195,199,141,217,102,203, 79, 28,199,121, 61,148, 62,234, 98,214,128,109,171,191,217, -188,107,231,206, 62,179,231,126,196, 68, 60,254, 28,180,209,117, 32,213,110,128,221,187,118,225,131,247,102, 18,174, 40,115,143, -245, 98,102,223, 59, 88, 38,108, 14, 64, 9,224, 99, 73,146,248,210,187,121,188,252,242,203,112,124,116,206,226,197,139, 97, 48, - 24, 0,128,103, 24,230, 99, 0,223,161,226, 25,221, 93,105,214,252,227,143, 63,106, 58,106, 54,105,210,196, 91,205, 42, 37, 51, - 51,243,237,103,158,121,102,174, 76, 38,243,147, 36,169, 92,231,116, 0,208,106,181, 40, 40, 40,128, 40,138, 66, 96, 96, 96,162, -213,106, 5,207,243, 21,158, 71,197,197,197,111,143, 31, 63,254,125,134, 97, 42,140,116,168,213,234,171,251,246,237,107, 48,122, -244,104,118,245,234,213,151, 71,141, 26,165, 60,112,224,128,136,155,156,211,136, 82,253, 16, 66, 80, 92, 92, 12,184,159, 18,225, -218,207, 63,255,252, 70,124,124,188,106,252,248,241,113,143, 63,254,184,111,207,158, 61,117,142, 43, 24, 12, 6,105,195,134, 13, -197, 75,150, 44,201,217,179,103,207,223, 79, 63,253,244, 48, 0, 21,134,139,211,210,210,254, 88,184,112,161, 95,247,238,221, 27, -138,162,136,236,236,108,123, 31,172,148,148, 20, 92,189,122,245,170, 36, 73,235, 43,153,157, 23, 71,143, 30,189,105,217,178,101, -209,227,198,141, 75, 89,181,106,213,122, 0,249, 46,214,211, 13, 31, 62,124,200,178,101,203,162,159,127,254,249,107, 0, 38,130, -246, 42,167, 80,170,148,161, 28,199, 29, 0, 48,180, 18, 14,183, 34,162, 1,188,143,146,118,211,252, 82, 39, 60, 27, 64,189,155, -213,140,136,136,104,209,176, 97,195,159, 26, 53,106,116, 37, 50, 50,210,218,168, 81,163,171, 13, 27, 54, 92, 29, 22, 22, 22,123, -179,154,225,225,225,157,107,214,172,185, 37, 42, 42, 42,187, 86,100, 4,137,138,138,186, 81,171, 86,173,237,145,145,145,221,111, - 86,179,125, 77,221,224,246,141, 34, 19,227, 98, 26,152, 26,214,171, 67, 98,155, 53, 48,117,104, 92,243, 92,187, 90,218,225,183, -176, 63,111,229, 46,196, 21, 74, 0,122, 82, 10,195, 48,214, 86,173, 90, 45,137,141,141, 93, 20, 27, 27,187,168,101,203,150, 95, - 51, 12, 99,181, 45, 7,160,199,191,147,130,222, 78,205,234,200,187, 75,186,116,233,242,227,202,149, 43,197,217,179,103,231,119, -232,208, 33,103,246,236,217,249, 43, 87,174, 20,187,116,233,242,227,205,106,182,108,217, 50,186,107,215,174, 55,126,252,241, 71, -225,252,249,243,228,199, 31,127, 20,186,118,237,122,195,105, 38,247, 59,158,247,255,162,230,136, 17, 35, 46, 16, 7,204,102, 51, -201,202,202, 34,231,206,157, 35,123,247,238, 37,125,251,246,189,224,133, 38, 15,160, 39,128,207,162,162,162,182,117,238,220,249, -124,215,174, 93, 47,214,171, 87,239,128, 92, 46, 95, 1,224, 73,148, 60,239, 48, 28, 37,211,146,132,186,211, 12, 15, 15,239,216, -164, 73,147,217,173, 91,183, 94,223,161, 67,135,253,113,113,113, 7, 27, 53,106,180,177, 78,157, 58,115,195,195,195, 59,221,100, -222,107, 61,250,232,163,167,139,138,138,196,110,221,186,109,112,181, 81,108,108,236,178,162,162, 34,241,241,199, 31, 63,135,146, -231,200,210,178, 68, 53,171, 67,243,190,186, 17,171,110,238,171,130, 82,153, 89,156,239,147,188,191, 80,106,114,244, 40,251,216, - 26, 79,203,111,183,230,109,217,159, 77,155, 54, 13,232,211,167,207,139,235,215,175,159,124,233,210,165,201,235,215,175,159,220, -175, 95,191, 23,155, 54,109, 26,112, 43,233,108,217,178,101,116,151, 46, 93,190,232,220,185,115, 74,151, 46, 93,190,112, 50, 87, -180, 18,191, 67,154, 15, 62,248,224,230, 71, 31,125,244,194, 99,143, 61,118,241,177,199, 30,187, 48, 98,196,136, 11,195,134, 13, -187,240,224,131, 15, 94, 24, 48, 96,192,133,158, 61,123,110,190,143,242, 94,171,109,219,182, 63,249,248,248, 60,238,106,161, 92, - 46, 31,210,177, 99,199, 53, 0,234,211,178, 68, 53,169,193,162, 6,139,106, 86,141,166, 18,238, 31, 87,227,106,249,157,208,164, -199,157,106, 82, 77,170, 73, 53,169,193,186,107, 12, 22, 79,119, 3,197, 3,166, 91, 92,126,187, 52, 41, 20, 10,133, 66,185,107, - 96,220,184,208,202,140, 14,184, 25, 39,123,138,106, 82, 77,170, 73, 53,169, 38,213,164,154,255, 57, 77,103,237,135,157,126,119, -158, 7,242,235,123,205, 92,209, 38, 66,170, 73, 53,169, 38,213,164,154, 84,147,106,222, 45,154,174, 24,135,123, 16, 66, 8,232, - 3,101, 41, 20, 10,133, 66,161, 80,170, 24,106,176, 40, 20, 10,133, 66,161, 80,170, 24,175, 58,185,203,229,242, 24, 66,200,211, - 12,195,132, 49, 12,147, 65, 8,249,206, 98,177,156,254,175,237, 44,185, 92, 30,195, 48,204,211,132,144, 48, 66, 72, 6,195, 48, -119,116, 63, 16,128,153, 57,163,100, 54,233,119,103,128, 48,238, 39, 62,164, 80, 40, 20, 10,133,114,167, 13, 86,116, 84,212,163, - 44,199, 44,176, 88,197, 0,171, 32,176, 11, 23, 46,100, 31,124,240, 65,108,216,176, 1, 19, 95,126,121, 34,203,177,146,156,231, -115,137, 36, 76,188,154,146,254,179, 55,127, 54,108,216,176, 76,171,213, 90,225,172,214, 28,199, 93, 95,183,110, 93,232,173,102, - 42, 34,246,145, 76,171,197, 82,225,255,240,188,236,122,250,241, 53, 94,253, 79, 84, 84,248,163, 28,195, 46,176,138, 82,128, 40, - 74,236, 23, 95,124, 97,223, 15, 47,189,244,210, 68, 25,207, 75,114, 25,151, 43,137,100,226,213,148,148,159,111,215,129,115, 52, - 87, 0, 48,115, 6, 24, 50, 3,160, 38,139, 66,161, 80, 40,148,187,216, 96, 49, 44, 22,173,252,234,227,128,156, 27,185, 88,181, -118, 11,154, 52,105,130, 51,103,206,160, 73,147, 38,232,210,174, 37,219,191, 99, 43,150, 99, 17, 60,253,139,229,139, 0,120,101, - 44,172, 86,107,200,239,191,255, 14,134, 97, 32,138, 34, 4, 65,128, 32, 8,176, 90,173, 40, 44, 44,196, 43,175,188, 18, 82, 21, -153,178, 90, 44, 33,151,254,254, 13, 50,142,129, 85, 36,176, 10, 4, 86, 65,130, 69, 36, 40,208, 11,232,245,192,104,175,255,135, - 5,187,232,187, 5, 31, 7,228,229,231,227,183, 77,219,202,236,135, 94,157,219,178,143, 12,234,193,106,212,242,224,113, 83, 62, -244,122, 63, 84, 5,142,230,170,204,111, 51,168,193,162, 80, 40, 20, 10,229,174, 53, 88,102,171, 24, 16, 26,232,135,239,191,251, - 14,111, 76,125, 15,141, 27, 55, 6, 33, 4, 12,195,224,205,119,102, 97,222,123, 83,241,216,192,110,176, 10, 82,128, 27,253,114, - 67, 53, 25,134,193,149, 43, 87, 96, 48, 24,202,188, 98, 98, 98,188, 77,179, 87,195, 63,101, 28,131, 63,142, 21,194, 98,149, 96, - 17, 74, 95, 86, 9, 61,155,251, 84, 74,211, 42, 74, 1,254,190, 58, 44,253,106, 49,222,152,245,113,153,253, 48,229,205,119,240, -229,220,183, 49,105,194, 19, 48, 91,197,128,155, 73,103, 37,161,154, 84,147,106, 82, 77,170, 73, 53,239, 87,205,251,210, 96,117, - 7,176,203,230,129,236,230,194,108, 68,179,154, 65, 88,252,233,251, 32, 96, 33, 17, 2, 16,128, 72, 86,212,169,161,129, 65,175, -175,244, 31, 74,146, 4,139,197, 2,171,213,138,175,191,254, 26, 69, 69, 69,144, 36, 9, 77,154, 52, 1, 0,196,198,198, 58, 70, - 96,174, 29, 59,118, 44,218,147,102,112,243,161, 87, 65, 80,203,241,183,119, 63,254, 22,251,143, 93, 2, 33,128, 82,173,193,136, -199,159,135, 40, 17, 88,172,149,127, 62,169, 81,175, 71,184, 78,134,121, 31,188, 3, 86, 38, 7, 11, 6, 44,203,128,101, 36, 52, -142, 10,128,169,228,225,196,183,149,119,103,128, 56, 71,177,222,157, 1, 50,131,150,105, 10,133, 66,161,220,155,184,244, 34,247, -186,193,218,229, 42, 51,102,163, 1, 81, 1,114,132,233,252, 32, 8, 34, 78, 91,194, 81,168, 55,194, 98,177,226,170,197,130,139, -255,164,163, 83,167, 78,176, 90,173,162,197, 98,129, 92, 46,207, 95,183,110, 93,160, 39,131,101,181, 90, 97,177, 88, 80, 92, 92, -140, 21, 43, 86,128,231,121, 72, 82,137,241,177, 77,206, 69, 8, 65,231,206,157,107,121,149, 11,130, 90, 23,143,252, 10, 31, 21, - 7, 65, 34, 16, 4, 2,171, 8,136, 18,129,222, 44, 97,248, 51,111, 67,144, 36, 8,146, 4,179, 23, 6,203,209,176, 9, 0,134, - 78, 91, 5, 64,103, 95,238,171, 36,120,163, 51, 11,185, 66, 9,133,156,131,201,160,191,237, 7,142, 1, 8,153,241,111, 83, 33, -237,228, 78,161, 80, 40,148,123,156, 93,247,131,177,114, 54, 88,142,238,113,247,191, 6, 75, 15,193, 42,194, 42,136, 16,172, 2, -242,139, 12,248,232,163,143,160, 84, 42,193, 48,140,221, 44, 73,146,196, 90,173, 86, 12, 26, 52, 40,192,211, 31,138,162, 8,139, -197, 2,139,197, 2, 66, 8, 56,142, 67,251,246,237,203,173,119,232,208,161, 74,101,196, 71,197,161, 78,159,105,229,126, 63,252, -235,251, 32,132, 64, 20, 75, 94,222, 24, 44, 79,134,173,117,247, 71, 96, 50, 91, 65, 8, 0, 82, 18,225,186, 19, 48, 0,177,245, -185,154, 65, 79, 76, 10,133, 66,161,220, 31,148,241, 34,247,139,193, 42,227, 30, 77, 6, 3,172, 86, 1,130, 32,194,106, 45, 49, - 70,106,181, 26,221,186,117, 43,241, 33, 14,209,166, 45, 91,182,192, 98,177,120,252, 67, 91,167,246, 82, 99, 6, 66, 8, 86,173, - 90, 5,153, 76,102,127,201,229,242, 74,103, 68, 16, 9,166, 77,121, 21,114,158,133,140,103,237,239, 34, 33, 32,164,196, 28,137, - 18,129,201,234, 93,144,199,157, 97, 3, 0,179,201, 2, 16, 2, 2, 2, 67,113, 49, 61, 29, 40, 20, 10,133, 66,169, 26,238,139, - 72,150,205, 96,245,128,139,230, 37,179,161,184, 52,122, 37,194, 42, 8,118, 3,245,233,167,159,130,231,121, 40, 20, 10,240, 60, -111, 55, 68,222, 24, 44,163,209,136,186,117,235,194,108, 54,163, 73,147, 38, 32,132, 96,228,200,145,229,214, 59,114,228, 72,165, - 50, 98, 21, 9,230,124,248, 89,185,223,247,253,242, 30, 90, 52,173,131,118, 13,180, 48, 90, 36, 20,232,133, 91, 54,108, 0, 74, - 34, 88, 0, 8, 1, 12,197,122,122, 58, 80, 40, 20, 10,133,114,107,184,244, 34,247,186,193,218,237,202, 45, 26,245,122, 8, 86, -193,110,178,204,102, 51, 36, 73,194,203, 47,191, 92, 78,104,199,142, 29, 48,155,205,238,255,140,231,175, 63,247,220,115,101,166, - 72, 32,132,224,215, 95,127,133, 82,169, 44, 19,197, 98,152,202,153, 87,171, 72, 48,227,173,215,160,144,113,101, 12,145, 36, 1, - 27,254,216,138, 13,127,108,181,175,203,113,178,235,183, 98,216, 0,192,108, 46,141, 96, 17,130,226,162, 66,122, 90, 80, 40, 20, - 10,133,114,107,184,244, 34,247,186,193,114,137,209, 80, 12,171, 67, 31, 44,139,197, 2, 65, 16,240,245,215, 95,151,105,206,147, -201,100, 96, 89,214, 99, 4,107,237,218,181,101, 38,247,140,141,141, 37,132, 16,140, 24, 49,194,222,220,248,212, 83, 79, 97,220, -184,113,149, 54, 88,130, 72, 48,115,246,167,118,157, 65,125,186, 98,232,192,238,144, 74,189,112,214,233,117,149, 18,116,103,216, - 0,192,108, 42,233,131, 69, 0,232, 11,105, 19, 33,133, 66,161, 80, 40, 20, 47, 12,150,140,103,243, 47, 94,205,240,171,161, 85, - 65,144, 76, 16,164,146,145,127,162, 40, 98,220,184,127, 31,110, 61,106,212, 40,140, 29, 59,182, 34,131,213, 28, 30,230,202,144, - 36, 9,251,246,237, 3,195, 48, 96, 89,214,254,114,131, 75,205, 98,147,132,253, 63,207,130, 68, 8, 36, 2, 72,164,196, 79,153, - 5,175,162,141,229, 52, 61, 25, 54,165,206, 31, 28, 75,192, 48,192,197,148, 76,240, 28,155, 95,217,188,223, 4, 84,147,106, 82, - 77,170, 73, 53,169,230,253,170,249,223, 48, 88, 68, 36, 19,151,108, 60,180,192, 42, 74,126,182,223,154, 53,107, 6,139,197,130, - 63,255,252,211,110, 60, 56,142,179, 55,233,121,211, 7,203,137,107,221,186,117,115, 55, 21,195, 53,175, 84, 24, 92,107,211,243, -209, 90,238,150, 87, 54, 97,158, 12,219, 55,123,254,125, 4, 33,207,178,249, 32,100, 34, 45, 78, 20, 10,133, 66,161, 80,220, 26, -172,228,180,180,229, 0,150, 59,254,214,170, 85,171,162, 33, 67,134,168, 5, 65,128,217,108,134,197, 98,129,217,108,182,191,148, - 74,101,165,102,220,244,102, 18, 81,111,200, 58,181, 46,186, 74,247,138, 23,134, 45, 61, 61, 61,154, 22, 31, 10,133, 66,161, 80, - 40,149, 50, 88,174,208,235,245,254, 12,195,240,105,105,105,229,150,101,100,100, 0, 37,243,114,222,243, 84,185, 97,163, 80, 40, - 20, 10,133, 66, 13, 86, 69,236,222,189, 91,184, 95, 76, 20,133, 66,161, 80, 40, 20, 74,117,193,210, 93, 64,161, 80, 40, 20, 10, -133, 82,181, 48, 40, 25, 9,224,138,202,140, 14,104,126, 19,255,125,138,106, 82, 77,170, 73, 53,169, 38,213,164,154,255, 57, 77, - 79,218,142,219,143, 3,240,245,189,102,174,108, 3, 1,171,147,230, 84,147,106, 82, 77,170, 73, 53,169, 38,213,164,154, 55,201, - 56,220,131, 16, 66,104, 19, 97,165,136, 29, 39,163, 59,129, 66,161, 80, 40, 20,138, 39,248,219,245, 71, 51,102,204, 96,111,113, -123,233,142,237,165,200,225,245, 57, 30, 31,181,172, 21, 57,240,159,156, 97,155,136,200, 76, 65,234,111, 23,105,241,185, 57, 90, -105, 81,195,202,200, 6, 7,232, 84, 67,107,249,240, 29, 46,100,235, 15,232, 45,210, 6,194, 88,215, 37, 20, 34,151,238, 33, 10, -133,226,178, 42,142,140, 12,216,191,127,127,173,206,157, 59, 95, 75, 77, 77,205,245,118, 89, 69,132,214,141, 27,235,163,211,188, -104, 52,153,234,248,249,250, 94,191,145,147,179, 36,253,242, 63, 11,109,203,235,212,169,227,187,114,229,202,136, 81,163, 70,165, - 93,185,114,165,128, 30, 1,202,109, 53, 88,109,218,180,169, 35, 73,210, 19, 0, 30, 39,132, 28,255,231,159,127, 30,190, 25,157, - 29, 59,118, 68, 90,173,214,182,130, 32,196, 2,136, 85,107,116,173, 76, 38,227,117, 6,228,201,129, 3, 7,254, 83, 89,189,216, -216,216, 63, 0, 12,114,181,140, 97,152,153,241,241,241, 51,188,213,226,120,124,180,117,221, 55, 67,211,245,106,236,142,191,250, -208,119,159, 76, 5,128, 97,119,227, 1, 13, 15, 15, 87, 3,120,146,101,217,222, 74,165,178,161,209,104, 76, 2,112,146, 97,152, - 69,169,169,169,105, 55, 41,203,198,232,100,207,104,212,154, 1,225, 62,138,216,212,220,130, 84,163, 69,218, 43, 49,150,143, 43, -107,136,234, 1,138,144, 64,255,221,147,135,119,105,210,178, 89, 3, 72, 87,143,195,152,151, 53, 36, 62, 85, 63,228,171,195,215, - 95, 53, 23,234, 99, 47, 1,102,111,180,162,162,162,194, 69, 81,228,211,211,211,147,109,149,161,201,100,106, 3,160, 9,128,179, - 74,165,242,232,173, 86,138,247,138,102,100,100,100,132, 36, 73,207,134,134,134, 62,144,153,153,249, 7,203,178,223,220,194,241, -166,252, 71,136,110, 63,230, 51,134,101,106, 84,102, 27, 34,145,236,171,135,151,191,122, 59,211, 73, 72,201, 76,207,145,145,145, - 79,213,170, 85,171, 1, 33,228, 28, 33,100,190,211, 57, 80,110, 25,195, 48, 21,118,132,137,110,214,113,237,115, 79,140,234,245, -202,132,167,116, 26,141, 26,122,131, 49,104,209,210, 31, 62, 89,180,116,197,160,164, 51,251, 7, 2, 64, 68, 68,196,176,154, 53, -107,214, 54,155,205, 87, 8, 33, 63,120,210,164, 80,110,217, 96, 53,109,218, 84,171, 80, 40, 70,176, 44,251,100,139,216, 14, 93, -134, 60,242, 36, 99,101, 52,248,224,181, 81,149,158,194,225,216,177, 99,202,244,244,244,247,234, 52,142,251, 95,143,126, 67,217, -166, 77, 26,163, 70, 80, 0, 36, 86,129,101,127,158, 15,218,245,213, 83, 11, 1,116,188,137,100, 14,250,121,211, 97,164,231,137, - 96, 24,128, 97, 0,150, 1,138,140, 18,222,124,186,203,187, 0,188, 51, 88,177,227,100, 77,194, 66, 6,158,191,161,194,159,167, -172, 0, 34,160, 9, 8, 29,168, 15, 30, 39,195,177,175,173,119,211,193, 12, 11, 11,139, 13, 12, 12,252,242,169,167,158, 10,104, -216,176, 97,184, 66,161,208, 24,141,198, 6, 87,175, 94,173, 51,111,222,188,190, 97, 97, 97,115, 51, 50, 50,126,171,140,102, 99, - 63,101,173,218, 97,161, 63, 79,153,240, 68,187,134,117,107,130, 55, 23,131,152,138,106, 94,189,114,169,227,236,111,126,123,142, - 97,140, 35,207, 20, 8,219,189,213, 83,249,200,223,122,115,220,200, 38,245,125, 8,204,103,246,129,231, 8, 84, 62, 1,104, 87, -139, 3, 3,210,116,198,206,180, 55, 81,104,121,215, 11, 35, 57, 75, 20,197, 55, 1, 48, 97, 97, 97, 63,203,100,178, 35,109,218, -180,105,252,216, 99,143, 49, 45, 90,180,192, 63,255,252,211,116,195,134, 13, 15, 11,130,144,104, 54,155, 15, 7, 5, 5, 29, 79, - 72, 72,176,120, 89,190,229, 57, 57, 57,173, 20, 10, 69,251,187, 89, 51, 60, 60, 92,109, 54,155,159,136,138,138, 26,215,169, 83, -167, 22, 15, 62,248, 32,211,168, 81, 35, 36, 38, 38,198,109,222,188,249,221,189,123,247,158, 76, 73, 73,249, 90,161, 80,252,144, -158,158,238,213, 36,192, 35,122, 35,113,205, 14, 52,190,217,229, 78,248, 3, 80, 1, 72,247, 38,152, 0, 64, 3,224,242, 29,208, -172,142, 72, 75, 2,195, 48,129,165, 23,100,219,141, 93,153,207,142,239,162, 40, 22, 95,187,118,173,158, 59,205,154, 53,107, 54, -149, 36,137,115,252, 77, 38,171,184,215,130, 32, 8, 82, 74, 74,202, 25,119,154, 12,203,212,248,250,203,207,252,120, 22, 16, 73, -233,203, 74, 32, 18, 2, 73, 2, 68, 9, 16, 37, 9,130, 72, 32, 17, 9, 86,129, 96,230,187,111,222,201,106,238, 1, 0,221, 0, -236, 1,240,185,155,101,243,221,137, 4,215,107, 53,230,137,145, 35,122,190,249,218,139, 58, 66, 8, 8, 33, 80,171,148,120,253, -149,241, 10,163,209,220, 57,188, 65,155,113,233, 23,142, 46,101, 24,166, 39,128, 54, 0,142, 2,248,129, 90, 6, 74,117, 25, 44, - 38, 46, 46,174, 27, 33,228,201,176,136,168, 17,195, 71, 63,175,174,221,160, 57,138, 36, 95, 92,201,150,112,236,175,149, 0,176, -186, 50,127,190,101,203,150, 54,132,224,251, 9, 83, 63,107,220,178,117, 91,156, 74, 21,176, 63, 89, 68,241, 69, 17, 60,103,128, - 36, 1,132, 16,211,205,102, 46, 37, 87,192,222, 68, 51, 56, 22, 96, 89,128, 99, 25,112,149,125, 78,247,177,175,173,103,106, 13, -219,180,245, 72,234, 67, 80,133, 66,159,155, 10,125,110,230,102,164,172,189,171,204, 85, 68, 68, 68,175,218,181,107,207,127,229, -149, 87,194,210,211,211, 3, 15, 31, 62, 12,165, 82,137,128,128, 0,190, 70,141, 26,141,167, 78,157,154, 63,123,246,236,215, 67, - 66, 66,254,185,126,253,122,146, 87,166, 64, 43,111,210,181, 69,147, 3,211,103,205,240, 51,197,111, 70,222,154, 53,224, 88, 9, -114,173, 14,225,106, 13, 62,127,160,118,224,212, 45,201,191,177, 22,115,147, 83, 70, 99,170, 55,154, 53, 67, 2,251,213,111,216, - 8,121, 27, 23,225, 66,158, 9, 7, 51, 77, 24,210,189, 13,234, 7,168,209, 90, 16, 17,164,226,123,121, 50, 88,145,145,145, 1, -146, 36, 77, 73, 74, 74, 98,229,114, 57, 83,167, 78,157,145, 95,127,253, 53,105,218,180,169,253,169,219, 29, 59,118, 68,199,142, - 29,153,162,162,162, 38,251,247,239,111,178,118,237, 90,107,126,126,126,124, 90, 90,218,178,138, 35, 75,117,175,153, 76,198,154, - 70,147,217, 56,111,222,188,159, 58,116,232, 32, 41, 20, 10,220,138,102,169,241, 93,161,209,104, 52,211,167, 79,207,110,219,182, - 45,169, 10,205,218,181,107,111,109,215,174, 93,207,126,253,250,241,157, 59,119, 70, 68, 68,132,125, 89,141, 26, 53,208,181,107, - 87, 38, 57, 57,185,229,222,189,123, 23,109,221,186,117,193, 63,255,252,243, 87, 82, 82, 82, 63, 47, 14, 81,163, 91, 92, 94, 38, -248, 11, 96, 14,128,165, 0,246,187,187,141, 1, 48, 10,192, 71,119, 72,211,253, 77,129, 74,149,105, 52, 26, 67, 74, 63, 95, 55, - 26,141,161, 30, 43, 75,134,209,205,155, 55, 47, 68, 46,151,131,101, 89,136,162, 8, 81, 20, 33, 73, 18, 8, 33,246,119,219, 72, -163, 89,179,102,137,158, 52, 37, 73, 98, 63,251,236, 51,153, 90,173, 6, 0, 88,173,214, 50,239, 54,108,223,103,205,154,229, 85, - 29,165, 86,112,120,231,181,113,237, 88,209,172,114,251,255,156,194,248,204,235,243,143,220, 1,179, 26, 16, 25, 25,249, 4,128, - 7, 1,216,206,241, 22,145,145,145, 59,157, 86,109, 81,250, 94, 28, 25, 25,249, 23,128, 63, 34, 35, 35,191,119,213, 92,232,167, -245, 25, 63,249,229,103,125, 8, 33,152,185, 38, 27, 51,127,205,198, 59,195, 2,241,250, 32, 13,158,126,252, 97,237,247,203,127, -121,190,180,140,217, 56,135,146, 81,247, 52,122, 69,169,122,131,213,186,117,235, 77, 3,135,141, 29,208,161, 91, 63, 8,242, 16, - 36, 94,103,144,124,133,128,231, 4,176,144,112,249,239,117,132,101, 89,103,135, 95,225, 80,205, 77,155, 54,189, 90,171,126,171, -185,111,206,152,195,157,202, 84,224,251,189, 6,136,166,124, 24,178, 47,162,248,250,121, 20,102, 36, 32, 47,245,212, 73,150,101, -103,120,171, 89, 62,172, 12, 72,132,128, 33, 12, 32,161,228,220, 96, 93, 58, 44,183,154, 68,100,166,196,111,253,254,161,214, 67, -167,225,252,222,229, 0, 97,167,120,241,247,213,241, 16,204, 83, 21, 68, 50,250, 70, 71, 71,127,252,252,243,207, 71,157, 56,113, -194, 87,175,215, 23, 31, 57,114,100,119,122,122,122,104,141, 26, 53,146, 31,123,236,177, 78, 33, 33, 33, 33,221,186,117,211,108, -217,178,229, 45, 0,207,122,210,140,209,200, 99, 58,183,109,126,240,253,143, 63,213,102,255,182, 0,230, 43, 39,112, 48,211,136, - 19, 89, 6, 18,233,155,207, 60,218, 60, 0, 90, 5,143,113,237, 67,116,255,219,144,244, 33,140, 24,237, 77,222,235, 68,134,214, -179, 26, 12, 48, 26, 44,216,116, 62,223,112, 48, 55, 63,132,245, 73,201,122,253,161, 54, 42, 46, 59, 13, 97, 62,178, 6,184, 94, -185,253,201, 48, 12, 52, 26,141,203,101,126,126,126,232,216,177, 35,234,213,171, 39, 27, 53,106, 84, 7, 0,203, 42,210,180, 88, - 44,225,169,169,105,104,216,168,161,178,119,239,222, 12,199,113, 48,155,205,183,164, 9, 0, 90,173,246,193,216,216, 88,254,199, - 31,127,204, 75, 74, 74, 58, 61,124,248,240, 84,141, 70, 83,230,130,170,209,104, 80,171, 86, 45,188,240,194, 11,178,231,158,123, -206,163,102,104,104,104,223,229,203,151,131, 97, 24,251,197,219,153,232,232,104,132,133,133, 97,208,160, 65,252,195, 15, 63,220, - 55, 41, 41,169,194,253, 57,162, 55, 18,109,230,105, 68,111,247, 23,145,210,229,231, 92, 68,178,156,211,153, 3, 96, 9,128,223, - 1,140,168,192, 16,117, 6,176, 6,192, 64,192,229,145,175, 80, 83, 46,151,203, 45, 22, 75,128, 11,227, 83, 89, 77,251,169, 30, - 31, 31,143,184,184, 56, 56,191,219,140, 16,195, 48, 33,222,158,155, 28,199, 97,241,226,197, 96, 89, 22,114,185, 28, 50,153, 12, -114,185,188,220,171,117,235,214, 94,159,239, 50,153, 12,139, 23, 47,134, 40,138,108, 82, 82,210,147,162, 40, 14, 53, 26,141, 33, -106,181, 58, 75, 46,151,111,236,222,189,251,119, 74,165, 82,168,140, 38,203, 1,172,104, 86,109,223,178, 94, 91,209, 70, 38,147, - 9,131,135, 62, 10,150, 97,111,123, 93,183,127,255,254, 90,181,106,213,106, 84, 26,157, 2,128, 61,169,169,169,221, 28,190, 59, -178, 39, 53, 53,213,214, 53,228,194,181,107,215,106, 69, 71, 71,231, 58,107,154,205,150, 58, 58,157, 22,132, 16,204,252, 53, 27, -198, 31,235, 66, 53,246, 50,158,110,111,130,143,143, 15, 4, 65,104, 28, 25, 25,249, 3,128,134,165,209,171, 33,145,145,145,141, - 8, 33,127,213,169, 83,231,119,135, 38,253,219, 86,207,255, 71, 52,221, 92,207, 73, 91, 0,193, 14, 63,153, 1,216,238, 86,179, - 75, 13,112,144,211,239,142,235,217,222,179,108,129,204,210,237,136,131,110, 22,195, 48,127, 87,181,193, 34, 14,238,188,162, 24, -143,111,138,193, 31, 69, 87,106,128,103, 37,240, 28, 3,158, 3, 0, 6, 57, 41, 9, 48, 23,231,236,139,143,143,191,226,205,159, -254,249,231,159, 29,107, 55,109,247,225,140,247, 63, 97,191,219, 99, 64,190,222,136,236, 51,235,145,126,228,219,116, 73,176,172, -103, 89,246, 40,203,178,199, 98, 91,182, 72, 12, 15, 15, 23,111, 54,115, 18, 41, 9,113,219,141,149, 4, 48, 55,115, 3,146,250, -219, 69,212,125,171,236,247,187,132,200,200,200,129,117,235,214,157,243,252,243,207, 71, 31, 59,118,204,167,176,176, 48,107,251, -246,237,137, 22,139,229, 31,150,101, 63, 79, 75, 75,235,190,124,249,114,205, 27,111,188,209,175, 81,163, 70,141,182,110,221,170, -247, 24,185,210,200, 90, 62, 62,230,209,131, 67,199, 77, 84,157,254,117, 33,148,137,199,240,245,153, 92,241,104,166,225, 45, 99, -145, 48, 95,173,225, 59,231, 25,133,109,147,187,134,179,225, 62, 50,212,244,147,247, 56, 81,232,221,131,190, 21, 50, 37, 79,120, - 21,204, 38, 1,197,102,201,156,144,141,226,190,130,104, 33,218, 26, 42, 0,224, 57,214,163,233, 79, 77, 77,205, 13, 15, 15,255, -176,118,237,218,111, 51, 12, 67,186,117,235,118, 38, 46, 46,174, 88,146, 36, 24, 12, 6, 88, 44, 22,200,100, 50, 24, 12, 6, 92, -189,122, 21,135, 15, 31,134,159,159, 95,165,246,107, 94, 94, 30,106,215,174, 13,141, 70,115,203,154,146, 36, 49,139, 22, 45, 82, -157, 62,125, 90,245,251,239,191, 7,190,250,234,171,249,173, 91,183, 78,120,232,161,135,146, 3, 3, 3, 45,199,143, 31,199,193, -131, 7,145,155,155,139,118,237,218,121,165,105,177, 88,192,243, 60, 12, 6, 3,148, 74, 37,120,158,135, 32, 8,144, 36,201,110, -186,138,138,138,112,227,198, 13,200,100, 50,143, 15, 98,183,153,165, 17,189, 65,126, 89,115,224,122, 73,219, 80,129, 21,150,124, - 43,132,124, 43,172,249, 86, 88,243,172,143,188,242,105,203, 53, 59, 80,153, 56,240,161, 82,115,181,198,133,201,234,236,240,251, -241,202,106, 90, 44,150,125, 54,227,163, 82,169, 66,108,209, 5,165, 82,105, 53,153, 76, 61, 43,169,137,248,248,120,196,198,198, -114,165,154,132, 16, 98,235,111, 83,233, 74,131, 97, 24,112, 28, 7,153, 76, 6,142,227, 16, 27, 27,139, 7, 31,124, 16,141, 26, - 53, 66, 74, 74, 10,118,237,218,133,243,231,207, 67, 46,151,151,105, 58,244,132, 76, 38, 3,203,178,236,185,115,231,190,235,221, -187,119,253,137, 19, 39, 42,106,213,170,133,196,196,196,176, 69,139, 22,141,221,177, 99, 71,247, 97,195,134,141, 5, 32,184,107, - 62, 44, 99, 4, 75, 77,147,201,100, 66, 66, 66,130,251,117, 43,221, 4,112,235,116,238,220,249, 26, 33,228, 2, 74,154,254, 90, -164,166,166,118,139,140,140,220, 4,192,217, 16, 22,167,166,166, 14,138,140,140,204, 7,112, 18,192, 57,134, 97,174,185,210,244, -247,243,205, 42, 42, 42, 14,213,106, 53,120,107,168, 63, 84, 99, 47,227,229,158, 28,172, 86, 43, 46, 93,186,130, 58,181,163,152, -213,223,175,179, 53, 13,182, 57,122,244, 40, 80,210, 84,152,148,156,156, 28,209,190,125,123,218,225,189,154,124,148, 27, 47, 18, -204, 48,204, 70, 7,195, 53,216,246,125,234,212,169,111,206,153, 51,231, 52,195, 48, 27, 29,127,119, 92,207,241,189,244, 28,221, - 72, 8, 25, 60,109,218,180,152,185,115,231,206,182,173,123, 71, 34, 88, 28,199, 13, 63,245,231,252, 67, 13, 44, 36, 58, 52,230, -129, 50,251,225,234,241, 63, 33, 73,210, 50,111,116, 14, 30, 60,168, 18, 36,124,247,198,155,179,216,175,254, 50, 32, 51, 35, 13, -105,187, 63,130,225,122,194,247,106,181,122,114,239, 1,131,111,185,224,198,198,198,198,248, 7,133,193,100, 33,165, 6,171,172, -201,186, 95, 8, 15, 15,127,176,110,221,186,179,214,175, 95, 31,109, 48, 24,124,246,239,223,159,183,109,219,182, 11, 22,139,229, -155,140,140,140, 21,165,171,173,231,121,254, 61, 66, 8,116, 58, 29,207,113,156,218, 93,168, 59,198, 87, 22,251,196,227,143,239, -123,245,243,165,170, 11,167,142, 99,193,234, 77, 80, 18,139,120, 38,199,252,208,233, 34,161,164,208,234,133,157,145,217,134, 84, - 66, 80, 83,198, 50, 8,212,200,194, 58, 0,170, 67,128,209, 83,154,107,212,140,102,133,200,186,216,171, 55, 65,231, 43, 87, 0, - 64,100,195,102,220,241, 2, 1,251,143,156,133, 74, 21, 32,247, 38,239,233,233,233,211, 35, 34, 34,106,111,219,182,141,213,235, -245,197, 39, 78,156, 64, 80, 80, 16, 66, 66, 66,224,235,235,139,196,196, 68,108,223,190, 29,231,206,157, 3, 33,196, 93,148,192, - 37,153,153,153, 40, 40, 40,168, 18, 77, 65, 16, 24, 0,136,137,137, 65, 76, 76,140, 34, 53, 53, 53,100,227,198,141, 1,179,103, -207,206, 8, 15, 15,223, 98, 48,252,219, 61,202,185,185,199, 93, 68, 1, 0,140, 70, 35, 76, 38, 19,228,114, 57, 84, 42, 21,228, -114, 57, 10, 10, 10,144,153,153,137,194,194,194,146,139,137,191,191,125,125,175, 16, 37,224, 80,151,163,229,221,252,147, 33, 55, - 89, 84,247,151,154,168,157, 0,108,199, 55,211, 22, 16,131,251,166, 62,119,154,101,246,135, 67,148, 73,118, 51,154,182, 72, 21, -195, 48,101,106, 9,149, 74,117,221, 22,185, 42,141,148,121,212,178, 53, 11, 42, 20, 10,196,196,196, 96,242,228,201, 72, 76, 76, -196,190,125,251, 16, 18, 18,130,254,253,251,131,231,121, 36, 39, 39,131,101, 89,175, 12,150, 92, 46,135,213,106,197,133, 11, 23, -158,236,213,171, 87,221, 5, 11, 22, 40,146,146,146,144,152,152, 8, 95, 95, 95,188,247,222,123,202, 41, 83,166, 68,109,217,178, -229,185, 86,173, 90, 45,246,186,110,103, 74,154,255, 6, 15,125,212,133, 17,209,202,126, 92,246,173,194,102,188,216, 59, 48,177, - 79,106,106,106, 46, 33,228, 51, 0,243, 74,155, 5,187, 1,208,166,166,166,246,116,184, 8,147,210,102, 65, 0, 56,153,154,154, -218, 11, 0,169,168, 67,122,250,245,244, 37, 31,125,254,213,188,153,111, 78, 82,188, 62, 72,131,167,219,155, 32,138, 34, 56,142, -195,130, 37,223, 91,207, 39,156, 58,209,166, 77,155,141, 0,134, 28, 61,122, 20,109,218,180, 41, 4,112, 30,192, 21,133, 66, 65, - 7,143,220, 73, 7,230,100,130,108,198,105,206,156, 57,131, 93,153, 42, 23, 55, 63,101,126,159, 59,119,238,108,135,239, 85, 58, -138,157,119,114,142,238,238,194,195,253,131, 35, 3,159, 31,221, 31,107, 79,216, 30, 72, 72, 96, 49,233,145,145,248,151,222,108, - 54,175,241,230, 15,115,114,114,222,123,122,242,167,245,143, 94,227,145,158,171, 71,218,142, 89,196,146,151, 52,226,193, 7, 31, - 92, 91, 21, 25,138,141,141,141, 9,168, 17,177,235,237, 15,151, 98,231, 5, 51, 36, 2, 48, 4,255, 26,171,251,100,230,175,136, -136,136, 6,254,254,254,159,172, 91,183, 46, 68,161, 80,248,156, 60,121, 82,220,189,123,119,154,213,106, 93,148,145,145,177,202, - 97,189,199,155, 55,111,110,213,106,181, 72, 79, 79, 55, 90,173,214,162,138,142,117, 51,149, 42, 42,182, 69,147, 61,175,126,190, - 84,101, 52,155,145,111, 48, 33, 56, 60, 92,220,119, 50,225,161,132, 34,209,126, 71,208, 84,199,119,106,211, 48, 50,146, 85,251, - 0,250, 2,164, 22,152,211,188, 49, 87, 0,160,245,241,103,163,218,244, 64,155, 87,190,192,153, 25,111, 17, 32, 7,254,161, 17, -108,207, 23, 62,128, 46,238, 65, 44,158,248,164,244,111, 4,215, 35,134,134, 13, 27,226,159,127,254,177,149, 45,228,228,228,160, -110,221,186, 88,176, 96, 65,153, 21,189,185, 40, 86, 80, 94,111, 89, 83,146, 36,198, 41,234,136, 9, 19, 38,200, 54,111,222,172, -117, 52, 87,149,209, 52,155,205,118, 67, 65, 8,129,217,108,134,217,108,134, 86,171,197,133, 11, 23,202,250, 37, 81,116,217,212, - 89,113,130,243, 93,135,187,172, 57,183,210,239,112, 63, 0,185,131, 9, 10, 5,208,229, 38,205, 85, 57,227, 83, 21,196,199,199, -187,172, 7,109, 77,143,241,241,241, 36, 46, 46, 46,212, 91, 61, 66, 8, 20, 10, 5,134, 12, 25,130,179,103,207, 34, 45, 45, 13, - 62, 62, 62, 48,153, 76, 48,153, 76,136,141,141, 69,102,102,166,215,209, 43, 7,221,129, 47,191,252,178,234,202,149, 43,184,113, -227, 6, 84, 42, 21, 4, 65,128, 40,138,120,238,185,231, 84, 47,188,240,194, 0, 0,222, 27, 44,142, 65,159, 39, 63,116,217,183, -106,231,183,255,235,174, 84, 42,237,205, 45, 28,123, 87, 85,160,142, 55,138,149,218,137, 89, 87, 78, 45, 94,190,234,247,190,130, -197,210,243,153, 39, 30,245,209,105, 53,184,116, 57, 9,139,191,249,209,186,115,239,145,157,153, 41, 23, 6, 2, 96, 34, 35, 35, - 27,149, 70,174,206,167,166,166, 62,225,206,180, 81,170, 52,138,229,204, 56,148, 14,108,169,200, 56, 85,198,160, 57, 70,184,108, - 76,155, 54, 45,102,206,156, 57, 85,218,199,144,175,160,176, 58,155,150,214,254, 53, 34,255,154, 54,123,169,238,247, 19, 28,114, -211,207,193,120,253, 28,106,198, 14, 69,230,185,253, 32,162,245,183,132,132,132, 98, 79,127,182,101,203,150,134, 53, 27,181,121, -165, 85, 92,123,124,244, 71, 17,138,206,172,130, 57,247,202,226,193,131, 7, 87,157,185, 10, 10,223,245,230,220,165,129, 27, 78, -203,144,147,118, 14,137,235,166, 64,180,148,107, 21,219, 84, 25,221,238, 0, 47, 4, 88,208,183, 41,131,235, 7,244, 72,239, 14, - 30,187,239,236, 67,175,211,210,210, 46,248,251,251,255,176,116,233,210,241, 45, 91,182,212,188,242,202, 43,231, 11, 10, 10,222, - 79, 79, 79,255,217,193, 92,245,170, 91,183,238,107,179,102,205,170,127,245,234, 85,236,217,179,231, 2,199,113, 21,182, 47,159, - 49, 26, 83,216,147,103, 22,237,251,233,155,215,217, 90, 13,177,122,214, 27,194,129, 83, 9, 67, 18,138,196,205,118,115,165,149, - 55,233, 24, 83,111,227,139, 19,159,103,255,207,222,121,135, 69,113,181, 81,252,204,204,246, 70,239,136,136, 10, 8,136, 5, 1, -123,141,198, 18, 91,140,137, 53, 49, 26,235, 23,141, 81, 99,143,189,197,216, 53, 49, 38,246,222, 98,239, 21,123, 69, 20, 81, 68, - 65,122,239,176,189,204,253,254, 0, 12, 26,202,130,166,207,239,121,246,217,221,217,153,179,247,206,220,153,123,230,189,101, 76, - 97,167, 17, 25,151,142,148, 66,195, 5,179,239, 70, 11, 84, 6,190, 72, 2,185, 83, 45,196,169, 89,129,139,139,203,237,196, 92, -181,128,102,120,160,121, 2,196,228,104,171, 84,137,179,236,239, 67,146,111,154, 22, 0,149, 54,145, 85,234,228,222, 66,179, 36, -130,245, 59,191, 98, 48, 80,213,213, 44,109,176,222, 52, 83,101,237,163, 42, 25, 44,125,126,217,199, 64,151,245, 46, 6,118,148, - 36, 68,248, 54,230,170,196,248,148,116, 64, 23,137, 68,175,140,138,185, 81,166,242, 34, 88, 21,253,110,118,205, 79, 81, 96, 89, - 22,124, 62, 31,158,158,158,184,121,243, 38, 44, 44, 44, 32,151,203, 33,149, 74, 33, 18,137, 96, 97, 97, 1,161, 80, 8,154,166, - 65,155,105, 92, 12, 6, 3,116, 58,157, 83,141, 26, 53,240,252,249,115,136,197,226, 87, 47,161, 80, 8,111,111,111, 20, 22, 22, - 86,201,116, 86,197, 52, 49,255,162,169,169,227,158,220,248,208,201, 43,248,211,189,191, 30, 31,163,213,234,252,235,121,215,197, -211,240,208,135,105,137, 47,186,114, 30,231,111, 99,156, 75,248, 25, 69,163, 68,223, 73, 51, 94, 89, 38,107,201,146, 37,139, 74, - 71,193,222,181,193, 66, 69,230,106,202,194,159, 45,246,135,210,200, 77,137, 68,220,233,233, 5, 38,189, 42,135,101, 13,238, 57, -209,215,128,215, 59,228, 86, 84, 25, 6,181,232,208,139,190,252, 84, 7,125, 65, 50,242, 31,239,141, 21,137, 68, 83,223,165,185, -154,186,248, 23,155, 67, 15,121,200, 78,126,134,232,147,211,242, 76,122, 85,135,208,208,208, 42,207,163, 53, 2,224,255, 12, 24, -122,218,219,247,182, 16,209, 75,135,246, 81,160, 77, 71, 9, 44, 4, 22,152,247, 61,253, 84,217,130,157,148,126, 3,199, 16, 0, - 62, 66,241,151,140, 40,140,136,136, 88,248,203, 47,191,208, 70,163,113,168, 94,175,159,147,146,146,242, 42,138,232,236,236,220, -169,102,205,154, 75,231,207,159, 95, 35, 54, 54, 86,120,235,214,173,236, 7, 15, 30,176, 38,147,105, 73, 69,154,225,249,186,201, - 95,126, 57,150,169,235,230, 50,246, 69, 98, 98,207,199, 5,166,211, 37,191,213,151, 10,234,183,104,228,115,125,254,220,105, 10, -253,173,131, 80,166, 38, 98,221,173,212,124,214,100,152,102,102,212,205,230,218,197, 11,152, 54,124, 8, 91, 80, 80, 0,169, 80, -192, 38, 70, 70, 51,159,118,108, 99,250,110,202, 68, 58, 53, 53, 21, 42,165,146,113,113,113,177, 73, 78, 78,206, 54, 71,179, 44, - 67, 81, 86,229, 90, 37,131, 81,118,101, 94,109,205, 55, 35, 88, 21, 25, 44,115, 53, 75, 55,137, 85,182, 63, 76, 38, 83,213,154, - 8,141,229, 24, 44,125,134,254, 45,139,108, 60, 69, 81, 53, 75, 62,191,139,115, 64,163,209, 56,148,138,138, 1, 0, 85,221,104, -101,113, 4,171,194,223,171, 98,178, 74, 34, 88, 47, 94,188,128,189,189, 61,140, 70, 35,100, 50, 25, 36, 18, 9, 36, 18, 9,212, -106, 53,132, 66, 33, 24,134,169, 82, 58, 69, 34, 81,106,100,100,164,187,181,181, 53, 76, 38,211,107, 38,235,229,203,151,176,180, -180, 76, 55,183,255, 85, 81, 4, 11, 56,191,117, 74,153,163, 8,173, 44,101,175, 9, 49, 20,133,191, 17,165,251,233, 84, 43,170, -148, 26,117,103, 7,128, 29,174,174,174,219,118,109, 60, 17, 24, 24, 24,120,226,109, 53, 57,254, 96,247, 85,108,140, 74,247,165, -154, 58,117,106,181,231, 14,153, 58,117,234,244,178, 34, 90,239,210, 96, 81,111,188,255,102,174,108, 93, 46, 77,154,191,193, 98, -215, 61, 26,121, 41, 79,145,124,126,102, 30,171, 87,117,160,105, 58, 37,225,198,207, 7, 0,168, 66, 67, 67, 67,204,172, 12, 3, -234,121,121, 97,255, 99, 35, 52,169, 15, 65, 83,100,107,199,142, 29, 85,111,155,137, 18,115, 53,121,209,207, 54,251, 31,240,144, - 83,100, 2,243,216,106,152,171, 1, 66, 97, 93, 62, 77, 47,117,107,228,243, 65,191,152,248,194,246,117,196, 86,221,234,138,192, -220, 58,140, 99, 46,233,200,182,187,136,209, 43, 93,235,222, 56,146,127, 52, 84,164,204,110,212,192,223,226,158, 44,252,132,129, -152, 38,103, 94,197,159,222,249,253,197,139, 23,243, 29, 29, 29, 15,165,165,165,189,234,157,234,234,234,218,181,102,205,154,139, -230,205,155, 87, 43, 33, 33, 65, 17, 22, 22,150,127,224,192,129,151, 52, 77,207, 75, 77, 77, 77,175, 76,243,113,161, 97, 34,137, - 79,217, 24,161, 52, 69,190,138, 92, 73,249, 13, 63,253,180,223,205,142,253, 63, 23,199, 92,222, 6,155,196, 8,172,186,147,110, - 74,204,211, 12,136, 84, 35,213, 28,115, 37, 20, 10,247,175, 57,120,240,185,191,191, 63,165, 82,169, 96, 48, 24,144,145,145,129, -239,119,238,127,204,178, 44,172,173,173,113,225,194, 5,246,171,175,190,218,239,226,226,242,177, 57, 38,139,101,217, 87,149, 85, -121, 81, 32,137, 68, 82, 53,131, 81,188, 77,105, 3,243, 54,154,229, 25,172, 55, 35, 91, 85,212, 44, 58,129,139, 59,183,151, 23, -209, 99, 24, 6, 44,203,150, 25,233, 43, 63, 76,146, 91,142,193, 74,127,219, 27, 9,119, 84, 60,144,230, 47, 67, 44, 22,167, 21, -155, 39,182,188,169, 24,170, 26,193, 2, 0,161, 80,136, 27, 55,110,160, 75,151, 46, 96, 89, 22, 34,145, 8, 18,137, 4, 98,177, - 24,119,238,220,129, 64, 32, 0,195, 48, 85,106, 38,228,243,249,167,214,173, 91, 55,100,201,146, 37, 18,150,101, 33, 20, 10, 33, -145, 72, 32, 18,137,176, 98,197, 10,181, 80, 40, 60, 93, 37,131,133,202, 71, 17,150, 54, 99,127, 54,111, 76,211,240,230, 84, 12, -165,121,115, 10,135,114,167,105,112,113,113,177,169, 81,163,198, 23,132, 16,191,226, 69,175,141, 22, 44,181,106,201,133,197,203, -213,213,117, 91, 25,163, 8, 57,222,125,244, 10,229, 92, 35, 50,222,136, 94,233, 74,125,207, 0, 64, 21,127,207, 40,101,192, 74, -127,214,149,177, 44,107,241,226,197,151, 74, 69,174, 50,222,101,102,202,141, 96, 53,106,212,200,199,202,214,229,210,132,249, 27, - 44,182,221,102,144,151,242, 4,153,151,190,205, 35, 70,117,105,211,210,170,138,255,215,216,193,193, 22,153, 55, 52, 48,228, 60, - 7, 69, 81,161,111,155,129,160,160, 32, 79,133,165,253,229, 73, 11,126,182,217,125,159,135,220,228,223, 76, 96,117, 34, 87, 60, -154,254,126,249,153,189, 61, 69,169, 79,161,126,120,217,138,159,157,136,199,233,122,236,191,145, 90,112,249,250, 47,215,104, 95, -210,186,195, 0, 43,121,135, 1, 54, 88, 53,250,180, 77,154, 38, 2,183,163,142,247, 90, 52,237, 56,193, 95, 52,187,123,105,115, -229,236,236,220,195,197,197,101,238,137, 19, 39,220,141, 70,163,226,202,149, 43, 5, 7, 14, 28,136, 54, 26,141,107, 82, 83, 83, - 79,152, 29, 29, 83,234, 95,153,171,250, 22,252,128,161,159,125,118,237,171,149, 63,137, 35,238,223,197,210,109, 39,160,224, 27, - 76,247,147, 53, 31, 71, 40,127,107, 62,172,112,191,242,120,243,118,239,222, 45,243,245,245,165,178,178,178, 94, 85,248,122,189, - 30,249,249,249,200,203,203,131, 78,167,131,191,191, 63, 61,123,246,108,217,172, 89,179,230, 1,248, 95, 37, 17,130,244,185,115, -231, 58,140, 24, 49, 2, 22, 22, 22,200,202,202,130,193, 96,120, 21,109, 18,137, 68,176,178,178, 66,110,110, 46,206,159, 63, 15, - 66, 72,133,230, 82, 32, 16,164,184,186,186,184, 73,164, 50,157, 84, 42, 37,114,185,252,173, 53,139, 43,219,212,110,221,186, 57, -205,157, 59, 87, 88,186,146,214,235,245, 84,117, 53, 9, 33,170,247,223,127, 95,186,102,205, 26,184,187,187, 67,167,211,129,101, -217, 87, 17,172,146,169, 1,226,227,227,177,112,225, 66, 16, 66,204,191,145, 49,228, 24, 80,227, 51,123,232,179, 12,208,103, 25, -160,203, 52, 64,159,110,128, 81,245,183, 27, 34, 82,157, 14,232,102, 68,194, 28,222, 54,130, 69, 81, 20, 8, 33, 16, 8, 4, 72, - 72, 72,192,133, 11, 23, 16, 28, 28, 12,133, 66, 1,165, 82,137,155, 55,111, 34, 53, 53,181, 90, 17,172, 14, 29, 58,108, 61,123, -246,108,235, 47,191,252,210, 99,212,168, 81, 18, 31, 31, 31,196,198,198, 98,229,202,149,154, 39, 79,158, 36,141, 27, 55,238,151, -170,232,209,197, 83,215,152, 53,138,144,254,243,189,113, 57,211, 52,116, 43,103,245,210, 83, 56,188, 57, 77,195, 43, 14, 31, 62, -236,225,234,234,234,131,162,254, 85,192,239, 71, 11,150,230,222,189,123,247, 2,193,141, 34,252,171, 35, 87,119,255,105,105,230, -149,127,210,209, 95, 55,253,104,134,197,214, 91, 60,228, 36, 61, 70,222,213,217,111,154, 43,115,240, 71,169,185, 50,248, 98,133, -191,145, 8, 0,104, 96,204,141,134, 80, 40,124, 80,141, 52,191,166,201,178,236,196,102, 31,205,176,217,126,151,135,188,228, 39, -200,184, 60,171, 58,230,202, 31, 64,248, 8,128,239,214,216,239, 3, 81,218, 51,104, 46,239, 1, 5, 96,227, 3, 37,110, 38,234, - 86,232,117,186, 5, 79,242,117,185,174, 18, 88,239, 89,148, 62,171,235,135, 13,190,242,238,119, 30,183, 51,214, 3, 82,192,218, -158,215, 53, 61,192, 88,186,185,240,181,116,190, 35, 42,212,116,113,113,241,148,203,229,223,159, 58,117,202, 94, 40, 20, 90, 68, - 68, 68,152, 14, 30, 60,152, 96, 50,153,150,151,238,248, 94, 21, 77, 63,177,184,134,111,109,183,144,113,203,127, 20, 23, 20, 42, -161,212,233,225, 82,211,213, 20,114,255,233, 71, 17, 74,253, 17,115, 52, 29, 28, 28,218,247,233,211,167, 97,147, 38, 77,232,242, -204, 85,126,126, 62, 10, 11, 11,145,152,152,136,214,173, 91,211, 62, 62, 62,254, 90,173,182,125,122,122,250,165,242,210,153,146, -146, 50,103,207,158, 61, 45,247,237,219,215,125,248,240,225,138, 62,125,250, 64, 34,145, 64,169, 84,194,205,205, 13, 44,203,226, -234,213,171,136,138,138, 42, 0,112, 60, 37, 37,229,122, 69,233,124,249, 50,166, 38, 0,186, 70,141, 26, 45,187,116,233,242, 78, - 52, 1, 32, 35, 35,163,110, 72, 72,200,148, 94,189,122,141,239,220,185,179, 98,250,244,233, 2, 15, 15, 15,152, 76, 38,170,186, -154, 57, 57, 57,150,161,161,161,203, 90,181,106,245,191, 46, 93,186,240, 22, 45, 90, 4, 75, 75, 75,152, 76, 38, 72, 36, 18,228, -231,231, 99,222,188,121,184,118,237,154,145, 16,242, 67, 94, 94,222,164,138, 52, 75,207,131,245,241,184, 21,141, 42, 42,132, 21, -204,131,245,167,151,249,226, 72, 19, 65,213,154, 6, 43, 77,103,113,135,246,223,205,135,101,174,102,201,212, 11, 66,161, 16, 60, - 30, 15, 25, 25, 25, 56,123,246,236,107,243, 95, 9,133,194, 87,211, 56,148, 19,193, 42, 51,157, 10,133,130,237,219,183,239,208, - 83,167, 78, 13,153, 56,113, 98,175,130,130, 2, 7, 11, 11,139, 12,153, 76,118,124,220,184,113,155,173,172,172, 42,154,162,225, -119,154, 12, 77,149, 59,138,240,181,168, 41, 35,212,148,211, 93,235, 15, 61,238,111, 76,211,240,230, 84, 12,165,121,115, 10,135, - 55,167,105,120,165,217,187,119,239,151, 40,154, 60,148, 46,126,127,115,180, 96, 9, 94,247,238,221, 11, 12, 12, 12,188, 2, 64, -130,223,143, 34,252,211,203,252,191, 92,243, 95, 69, 69,125,176,196,215,239, 71,129, 22,165,163,224,246,247,213, 49, 87,191,195, -168, 85,190,152,191, 55,166,177, 73,167,134, 49, 63,238, 89,151, 15,186,165,191,109, 6, 8, 33,178,107,161, 47,192, 19,103, 33, -247,214,119,185,148, 73,219, 33, 52, 52, 52,172, 58, 90, 63, 3,134,129, 15,159, 94,142,190,118,225, 61, 23, 0,113,217, 58,132, - 69,102,159, 61,172, 86, 79, 44, 89, 39,233, 22,114, 0,140, 63,195, 11,175,103,227,149,215,201,210, 5, 72,143, 55, 32, 39,195, -120,234,175,234,139, 85, 66,114,114,242,115, 63, 63,191,109,155, 54,109, 26, 29, 16, 16, 32, 31, 59,118,108, 84, 94, 94,222,107, - 29,223,171, 74,132, 70,147,136, 23,177,235, 47,111, 92,249,141,216, 39, 24, 7, 23, 77, 51, 93,185, 31,217,251,113,161,222,236, - 54,107,145, 72,212,110,244,232,209, 2,149, 74, 85,174,185,202,207,207, 71, 65, 65, 1,242,243,243, 17, 22, 22,134, 62,125,250, -136,158, 62,125,218, 14,192,165,138,174,249,137,137,137, 87,235,212,169,115,103,253,250,245, 29,183,111,223,222,105,216,176, 97, -194,118,237,218, 33, 34, 34, 2,119,238,220,209,233,245,250,115, 98,177,248,124,116,116,180,185,157,176,254, 8, 77,163, 90,173, - 94, 40,145, 72,214, 28, 56,112, 96,193,197,139, 23, 7, 15, 25, 50, 68,102, 52, 26,169,183,209,204,203,203, 27,111,103,103, 55, -243,228,201,147, 91,207,158, 61,219,123,240,224,193,244,184,113,227,176,118,237, 90, 28, 60,120,144, 53,153, 76, 71,248,124,254, -103,153,153,153,149, 14, 64, 41, 61, 15, 86, 69,243, 92, 85,246,187, 25,252, 17,119,161,111,173,249,102, 36,172,100,180, 96,137, -169,170, 74,243, 96,105, 26, 54,108,248,218, 60, 87, 37, 29,218, 75, 94, 12,195,128,199,227, 85,169,137,176,126,253,250,224,243, -249,108,227,198,141, 55, 3,216, 12,188,254,200, 28, 62,159,255,106, 82, 83,115,208, 26, 89,108,220,180,237,142,145, 37, 48,177, - 4,132, 5, 12, 4, 96, 77, 44, 76, 44,129,137,101,139,166, 69, 35,128, 90, 99,250,211,175,107,165,166,105, 88, 81,198, 84, 12, -175, 40, 99, 10,135,114,159, 27,152,156,156,156, 77, 8, 41,233,143, 90,214,104,193, 18,205,109,197,203, 37, 73, 73, 73,159, 86, -164,201,193, 81, 21,131, 53,189,240,254,106, 3, 0, 91,138,162,166,133,134,134, 70,188,237,159, 49, 12, 61, 45,253,216,231,107, - 8,144,195, 80,152,246, 46, 50, 96, 50,153,102, 40, 67,215,176,132, 16, 43,138,162,166,222,191,127,255,173,210, 73,140,198, 49, -223,255,114,117,133,189,165,176, 83,102,174,246, 36, 40,170,204, 89,219,141, 32, 95,238,248, 46,254, 59,107,123, 94,215,156, 12, -227, 41,150,198,148,191,195, 1,141,136,136, 88,244,203, 47,191, 48, 63,253,244,211, 80,157, 78,247, 90,199,247,106,107, 22,234, - 39,127, 61,121, 38, 83,207,163,198,216,200,216,248, 94,143, 11,205,107, 22, 44,133,208,213,213,245,177, 74,165, 2, 69, 81,208, -106,181,175, 25,170,210, 6, 75,175,215, 35, 61, 61, 29, 30, 30, 30,160, 40,202,172, 26,162,216,148,156,176,181,181,189,178,122, -245,234, 15,214,174, 93,219,130,101,217, 27,122,189,254, 68, 86, 86, 86, 97,117,242,252, 71,104, 22,111,247,149,209,104, 92,178, -118,237,218,101, 98,177, 56, 48, 61, 61, 61,228,109, 52,139,205,211, 71, 54, 54, 54, 46,219,182,109,219,191,105,211,166,102, 60, - 30,239, 22, 69, 81, 31,231,229,229, 85,103,190,158,103,111,249,123,101, 28,252, 3,138,253, 91,107,150,238,115, 85,221,102,198, -215,174, 15, 70, 99,225,180,105,211,210,223,124,230, 96,233, 57,175, 74,191,235,116, 58,141, 25,154,236,183,223,126, 91,225, 77, - 92,105,163,165,209,104, 42,109,210, 37, 44,201,236,246,201,152,170, 93, 35, 89,146,249, 23, 94,226,142, 1,120, 94,252, 34, 21, -252, 86,165, 44,161,104,142,182, 88, 66, 72,236, 27,186,165,151,115,112,188, 27,131, 21, 26, 26,154, 0,224,243,119,249,103, 93, -186,116,185, 0,192,231, 93,106, 62,124,248, 48, 14,192,224,119,165,183, 91,167,123, 1,160,251,136,116, 29,127, 39,202,143, 72, - 21,119,104,255,240,141,102,193,191, 5,101,117,124,127, 91, 30, 23, 26, 38,146,152,164,215, 58,190, 87,161,178, 57, 35, 18,137, -168,252,252,124,232,245,122, 20, 20, 20,188, 50, 87,165, 77,150,209,104, 4, 69, 81, 40, 40, 40,128, 92, 46,135,193, 96,168,210, -157, 98,177, 73,217,211,182,109,219, 3, 33, 33, 33,239,100, 26,141, 63, 66, 83,173, 86,167,170,213,234,129,109,219,182,229,189, - 43,205,236,236,236,100, 0, 45,234,212,169, 35,172, 66, 20,172,220, 72, 86,117,127, 55,131,159,254,128, 34,191,243,239,118, 97, -141,139,139,243,125,215,154, 9, 9, 9, 79,222,121, 58,111,239,152,240, 79,168,168, 74,162, 70,174,174,174,219,226,227,227,107, - 82, 20, 21,255,102, 36,169,162,223, 42,210, 4, 0, 15, 15,143,195, 9, 9, 9, 46, 34,145, 40,217,156,229, 28, 28,127, 7,252, - 57, 77, 78,147,211,228, 52, 57, 77, 78,147,211,228, 52,171,201,136,127,162,249, 33,132,224, 95, 52,109, 28, 7, 7, 7, 7, 7, - 7, 7,199,223, 3,170, 2, 23, 90,149,209, 1,213,113,178,225,156, 38,167,201,105,114,154,156, 38,167,201,105,254,231, 52, 43, -211, 46,189,253, 8, 20,205,228,254,143,162,162,167, 66,188, 43,184,240, 41,167,201,105,114,154,156, 38,167,201,105,114,154,213, -133,107, 34,228,224,224,224,224,224,224,224,224, 40,130,199,237, 2, 14,115,112,117,117, 93,220,180,105,211, 49,119,239,222, 93, -158,144,144, 48,175,154, 26, 46,182,182,182, 11, 1,180, 32,132,136, 24,134,121,146,153,153,185, 40, 49, 49,241,106,117,211,229, -236,236,236,102,111,111,191, 16, 64, 51,150,101, 5,124, 62,255,113, 90, 90,218,130,228,228,228, 91,213,213,180,179,179,147, 57, - 59, 59, 7, 18, 66, 28, 8, 33, 52,159,207,207, 73, 74, 74, 10,203,200,200, 72,231, 74, 2, 7, 7, 7, 7,199, 91, 27,172, 57, - 95,194, 25,122,240,230,252,140,132,226, 69, 22, 40,154,116,205, 7,192, 83, 20, 61, 94,224,109, 31, 25,240, 79,209,252,187, 67, - 91, 89, 89,189, 47,149, 74,191, 42, 44, 44,108,108, 97, 97,241,216,104, 52,174, 73, 73, 73, 57, 14,224,173, 30,113, 98,111,111, -239,208,187,119,239,169,171, 87,175,198,208,161, 67,103,158, 56,113, 98,101, 85,231,109,242,241,241,233,169, 80, 40, 54,204,159, -191,192, 62, 56, 56,152, 18,139,197,120,241,226,133,235,140, 25,211, 3,236,236,236,246, 63,120,240,224,127, 85, 77,151,159,159, -223,199, 10,133, 98,205,162, 69,139,236, 3, 3, 3, 41, 30,143,135, 71,143, 30,213,152, 59,119,110,176,189,189,253,182,176,176, -176,137, 85,213,172, 95,191,190,135, 92, 46,111,177, 96,193, 2,113,112,112, 48, 68, 34, 17,158, 60,121, 34,155, 62,125,186,125, - 74, 74,202,243, 7, 15, 30,220,174,138, 94,192,136,251,124,129, 84,207, 3, 0,189, 74, 96, 12,253,185,137,193,220,101,220,229, -137,131,131,131,227, 95,104,176,230,142,194, 60,202,136,233,160, 65,125,213, 31,251,214,238,163,239,116,232,208,161,222,176, 97, -195,168,226, 71, 71,248,238,217,179,231,163,227,199,143, 71,178, 44,123, 27, 64, 24, 0,189,153,255, 43, 0,208,136,166,233,166, -127,115,205,191, 61,114,185,220,211,222,222,126, 98,126,126,126,215,192,192,192,252, 81,163, 70,197,222,186,117, 43, 38, 40, 40, - 72,179,105,211,166, 69, 6,131,225, 71, 43, 43,171,115, 5, 5, 5,203,170, 59, 47, 22,159,207,247,161, 40, 10, 73, 73, 73,224, -243,249,124,161, 80,232, 11,192,108,163, 81,163, 70, 13,103,133, 66,241,211,190,195,103, 28,242,181, 52,158,103,176, 0, 84, 48, -209,118,152,191,116,173,237,178,133, 51, 7, 40,149,202,107,207,159, 63,223,107,174,166,179,179,179,155, 66,161, 88,115,241,226, - 69, 7,145, 72, 4,150,101, 81, 80, 80, 0, 7, 7, 7, 44, 94,188,216,102,254,252,249,195,242,242,242,174,196,198,198, 30, 51, - 87,211,206,206, 78, 38,151,203, 91, 92,186,116, 73, 44, 20, 10, 41,131,193, 64,105,181, 90, 56, 57, 57,145, 21, 43, 86,136,102, -204,152,225,157,155,155,155, 26, 27, 27, 27,111,150,185,218,112,159,159,127,230, 82,115,146,160,158, 9, 0,148, 88,178,160,237, -156,216, 59, 73,143, 14, 4, 87,182, 44, 96,195,253,155,161, 35, 57,147,197,241,231,226,236,236,220,210,195,195,227,112,124,124, -252, 13,134, 97,250,197,197,197,105,223,129,108, 13, 0, 30, 0,172, 81, 52,176, 42, 27, 64, 44,240,234,198,189,202,216,214,105, -215, 3, 34,233,231, 32,164, 17, 13, 0, 52, 29,198,234,149, 91,178,162, 46, 31,123, 43, 77,177,108, 40, 88,182, 17, 13,194,130, -102, 30, 18,163,242,151,204,200,203,167,184,146,193,241,206, 12,214,156, 97,176,166,128, 41,211, 70,141,160,121, 12, 67, 45,218, -240,115,255,187, 55,142, 17,231,154,141, 94, 61,114,163,117,235,214,104,221,186, 53,181,116,233, 82,159,139, 23, 47,250,236,218, -181,203,112,227,198,141,251, 0,182,150,247,103,139,198, 74,226,141, 6,181, 27,104,137,166, 86,179, 31,119,181,104,209,154, 21, -137, 68,120, 27, 77, 0, 24,211,151,119, 78, 75,185, 81,237,186,207,138,123, 87,154,255, 16,115, 21,162, 80, 40,234,142, 28, 57, -242,249,232,209,163,175,200,100, 50, 2, 0,233,233,233,178, 15, 62,248, 32,167,119,239,222, 89, 42,149, 10,235,215,175,119, 91, -179,102,205, 57,133, 66,145, 84, 80, 80, 16, 92,149,242,225,236,236,188,164, 99,199,142, 19, 6, 14, 28, 8,133, 66,129, 33, 67, -134, 64,171,213,222,184,120,241,226,210,148,148,148,153, 0, 42,125,118,134,181,181,245,236,185,115,231, 58, 20,234, 24,204,220, -254, 2,217,133, 69,190, 65, 42,164,241,191,247, 68,248,244,211,207, 44, 31, 60,120,176, 20,128,217, 6,203,222,222,126,225,162, - 69,139,236, 75,142,117, 97, 97, 33, 10, 11, 11, 81, 80, 80,128,194,194, 66, 12, 28, 56,208,226,249,243,231,171, 80, 52,187,179, -185,149, 75,224,130, 5, 11,196, 66,161, 16,199,142, 29,107,168,209,104,120, 6,131, 1,132, 16, 99,189,122,245,194, 62,251,236, - 51, 65, 84, 84, 84,115, 0,102, 25, 44,231, 84,240,243,212,234, 31,214,125,247,141, 61, 0,124, 57,229,251, 31, 0,117, 83, 98, -198, 50,231, 84, 4,133, 2,156,193,170, 24, 6,192,135,124, 62,191, 79,221,186,117, 3,159, 63,127,254,192,104, 52,254, 10,224, - 87,188,253,190,123,207,197,197,101, 97,114,114,242, 58, 0, 59,254, 43, 59,180, 78,157, 58,135,118,237,218,101,123,242,228,201, -158,243,231,207,255, 4,192,182,183,144,227, 3,104, 94,108,170,158, 22, 27, 43, 20, 27,173,122, 0,234, 0,184, 94,149, 27, 94, - 91,175, 22,114,240, 44,246, 52,111,217,182,213,199, 31,245, 86,216,219, 88, 66,169, 53, 33, 42, 54,181,230,217,147,135,218, 62, - 19, 72,110, 24,245,121,253,179,162,110, 20, 86, 85,179,125,135, 78,173, 58,188,215, 81, 97,105,105,133,172, 2, 3,162, 99, 19, -221, 67,206, 29,105, 77,243, 36, 87, 64, 25, 6,167,135,159, 83,113,167, 28, 71, 85, 48,171,147, 59, 69, 81,144,201,101,101,254, -102,105,105,137,118,237,218, 97,209,162, 69,124, 0,205,222,248,249,181,161,154, 38,147,206,121,230,255,198, 66,200, 35,162, 15, -186,118,166, 44, 44, 44,222, 90, 19, 0, 28,109,140, 29,155,122,171,219,166,133,141, 27, 20, 22,178,208, 95,167,201,253,221,147, - 78,165, 82, 41, 60, 61, 61, 49, 99,198, 12,179, 52,223, 1,127,184, 38, 33,196,197,215,215,183, 96,229,202,149,222,179,102,205, -178,214,104, 52, 50, 0, 53,124, 27,183,116,161,105,218, 77,167,211, 41,230,204,153, 99,247,221,119,223,121,219,219,219,231, 18, - 66,236,171,146, 78,103,103,231,149,139, 22, 45,154,184,101,203, 22, 42, 40, 40, 8, 10,133, 2,205,155, 55,199,246,237,219,233, -217,179,103, 79,117,118,118, 94, 98,102,222, 91, 7, 7, 7, 83, 44,128,156, 66, 35, 46, 45,110,130,235,223, 7, 65,165, 99,145, - 87, 80, 8,181, 90, 13,177, 88, 44,177,181,181,149, 87, 97,127, 54, 11, 12, 12,164, 0,188, 50, 85, 5, 5, 69,175,194, 66, 37, -116, 58, 61,104,154,182,112,119,119, 23, 85, 97,127, 58, 4, 7, 23,249, 79,141, 70,195,235,217,179, 39,186,119,239,142,130,130, - 2, 94,126,126, 62,116, 58, 29,104,154, 22, 20, 87,236,149,106,234,164,124,138, 37,172,163, 76, 42,177,147, 73, 37,118, 44, 97, - 29, 1,192,156,101, 58, 41,159,250,139,203,167, 61, 77,211,155,235,212,169,243,132,166,233,109, 0,156,222, 82, 51, 8,192, 34, -137, 68,114,222,199,199, 39, 65, 42,149, 94, 4,176,164,184, 2,174,142,166, 80, 42,149, 94, 92,180,104,209,254, 7, 15, 30,124, -114,225,194, 5,143, 71,143, 30,125,180,116,233,210, 61,114,185,188,228,193,188,213, 62, 55, 61, 60, 60, 54,221,190,125, 59,168, - 69,139, 22, 27, 1,136,222,209,249,206, 0,104, 92,108, 56,254, 22,215,144,210,184,186,186,214,109,220,184,177, 29,195, 48,104, -221,186, 53, 8, 33,173,223, 82,179, 5,128, 84, 0, 33, 0, 50,138,111,198, 76, 0, 50, 1, 92, 45,190, 81,105, 93, 37, 77,158, -197,158,175,190,158,220,101,210,216, 47, 20,161,113, 38,252,114, 54, 5,251,174,101, 32,169, 64,132, 78,189,134, 90,182,237, 54, -176, 51, 79, 96,185,167,170,154, 83,167, 78,239,242,197,144, 65,138,240,100, 26,251,175,103,226,218,211,124,168, 40,107,180,235, - 53,194,218, 55,184,235, 7, 20, 4, 91,255, 14,199,232, 63,160,249, 31,136, 96,109, 66,206,220, 81,248,110,209,250,159,103,210, - 20, 69,106,120,117,142,240,240,108,166,100, 89, 22,106,181, 26,122,189, 30,124, 62, 31,106,181, 26,113,113,113,184,125,251, 54, - 44, 45, 45,171,244,199,185,121,121,112,173,225, 1,169, 84,250, 78, 52,135,247,237,205,139, 79, 73,225,221, 8,189,212,100,239, -234, 93, 77,220,234,116,122,218,168,221,228,112,185,101, 77,117, 88, 88, 24,110,222,188,137,156,156, 28,148, 84,160,255, 6, 40, -138, 50, 44, 91,182, 44, 52, 57, 57, 25, 87,175, 94,109, 60,119,213,206, 90,225,249,117,120, 25,133,132,111, 47, 79,115,247,145, - 60, 51,229,100,103,199, 76,156, 56,241,162,179,179,179,110,236,216,177,109,205,209,117,117,117, 21, 83, 20,213,164,115,231,206, -255,251,236,179,207, 16, 27, 27,139, 73,147, 38,233,194,194,194,114,155, 52,105, 98,189,108,217, 50,193,136, 17, 35,112,227,198, -141,137,151, 46, 93, 58, 0,224,113, 82, 82, 82, 69,207, 82, 19,138,197, 98, 32,175,232, 70, 85,111, 36, 40,233, 22, 86, 88, 88, - 8,154,228, 66, 32, 16,208, 52, 77,219, 3, 48,235,206,147,101, 89,129, 80, 40,132, 82,169, 68, 97, 97, 33,146, 50, 10, 17,151, -166, 68,129, 82, 11,181,218, 0,173,134, 64,164,112,164, 13, 25, 25,182, 0,146,204,209, 36,132,208, 37,205,141, 58,157, 14,106, -181, 26, 58,157, 14, 58,157,238,213,227,124, 24,134, 81,184,186,186, 90, 36, 37, 37,229, 84, 90,155, 10, 37, 70,134, 22, 44,154, -190,224,135, 57, 0,192,208,130, 69,114,104, 88,115,150, 49, 66,137,241, 47, 44, 90, 34,123,123,251, 75,251,247,239,247,245,244, -244,196,203,151, 47,125, 62,254,248,227,166, 41, 41, 41,141, 1, 84,245, 46, 94, 74,211,244,119,159,125,246,217,152, 1, 3, 6, - 80, 94, 94, 94,224,241,120, 48, 26,141, 53, 94,188,120,209,126,223,190,125, 83, 54,109,218,244,139,201,100,154,104,238,177, 7, - 64, 11,133,194,189, 27, 54,108,104,211,180,105, 83,108,219,182, 13,119,238,220, 97,131,130,130,232, 79, 63,253, 20,238,238,238, -205, 62,253,244,211,131, 90,173,182,187, 57, 17,214, 50,112,111,222,188,185, 27,195, 48,104,209,162,133,224,198,141, 27, 1, 0, -110,188,109,192,185, 70,141, 26, 33,237,218,181,107,124,254,252,249,208,212,212,212,118, 85,200, 47,156,157,157,123, 57, 58, 58, - 46, 85, 40, 20,214,230,110, 83, 88, 88,168, 74, 75, 75,155,148,156,156,124,192,204,242,223,162, 65,131, 6, 48, 26,141,176,180, -180,132,147,147, 83, 43,138,162, 38, 90, 90, 90,126,152,159,159, 63, 33, 41, 41,233, 78, 21,242,235, 90,124, 3, 95,242, 92,192, - 90,197, 81, 43,160,232,121,150, 47, 1,196, 0,112, 1,224, 6, 51,154, 11,109,235,180,235,209,162,117,251, 86,173,155,250,211, -139, 15,196,194,196,178,224,193, 4, 30,195, 34,211,196, 7, 69, 81,112,247, 14, 98, 28,195,239, 53, 51,234,245, 61,178,162,206, - 31, 51, 71,179, 75,231,206,173,235,121,123,209,203, 15,199, 35, 55, 41,220,148,246,244, 98, 38, 69,211,168,221,168,147,157,187, -119, 99,166,110,227,247,248,105,177,225,237,245,117,219,116,204,121,113,229, 60,103, 27, 56,170, 99,176, 72,233, 59,171,217, 63, - 97,150,173, 21,106, 69,132, 63,164, 19, 82,117,202,135, 15, 31,194,214,214, 22, 14, 14, 14,176,176,176, 64,100,100, 36,206,159, - 63,143,103,207,158,129, 16,130,198,141, 27, 87,233,143,211, 82, 83,145,149, 93,240, 78, 53,107, 58, 59,163,166,179, 51, 47, 51, - 39, 23, 55, 31, 62,242, 61,246, 75,199,122,105,244,200, 45,106,181,250,213, 58, 6,195,191,175,213,197,193,193,193,244,229,151, - 99,179,134,255, 16, 83,167,127, 7, 87,166, 87,115, 39, 28,190,145,194,236,185,204,144,153,195, 26,102,190,120, 17,101,118,166, -107,214,172,185,176, 77,155, 54,223,240,120, 60,254,136, 17, 69,211,143,140, 27, 55, 78,251,232,209, 35,191,196,196,196, 24,173, - 86, 91,111,194,132, 9,143, 14, 30, 60,200,255,226,139, 47, 40,141, 70,115,135,207,231,147,144,144,144,121, 41, 41, 41,115,202, - 52, 26, 12,243, 32, 34, 34,162,150, 81,236, 2, 59, 5,141,206, 51, 67,139,106, 28, 17, 65,102, 90, 18, 30,191,184, 11,123,123, -123, 75, 59, 59,187,167,233,233,233,218,180,180,180,175, 98, 98, 98,182, 86,148, 78, 62,159,255,248,209,163, 71, 53, 28, 29, 29, - 81, 88, 88,136,132,116, 37, 54,223,164,160,210, 74, 0, 72,192, 64, 1,133,157,155,162, 54, 81,133, 89, 91, 91,235,117, 58,221, -212,231,207,159,239,168, 68, 51,231,201,147, 39, 50, 87, 87, 87, 48, 12,163,223,183,111,159, 64,167,211,129, 16, 98, 60,121,242, -100,191,220,220,220, 22,117,234,212,161,221,221,221,151,213,172, 89, 83,157,146,146, 50, 60, 54, 54,182,220, 7, 13,159, 30, 87, - 87,223,118,206,229, 31,115, 95, 38,236, 3, 0,215,166,190,217,199,231, 4,232,218,206, 41,172,116,217,233,113,117,255,202,126, -130,159, 79,159, 62,221,215,198,198, 6,163, 70,141,194,220,185,115, 49,107,214, 44,207, 81,163, 70,141, 0,176,178, 10, 58, 18, - 39, 39,167,187,171, 87,175,246,105,217,178, 37, 78,158, 60,137,221,187,119, 35, 38, 38,198,232,225,225,193,107,218,180, 41,102, -207,158,141,206,157, 59, 15, 31, 59,118,108,219,228,228,228, 0, 51, 77,199,208,217,179,103,247,106,213,170, 21,134, 12, 25,162, -189,124,249,242, 39, 0,206,158, 59,119,174, 67, 72, 72,200,129,157, 59,119, 74, 22, 45, 90,212,101,194,132, 9,163, 1,172,171, - 70,254,123,183,105,211, 6, 0,208,170, 85, 43, 44, 93,186,180,243, 91, 26, 44,161,173,173,237,137,109,219,182, 53,246,246,246, -198,224,193,131, 3, 62,249,228,147, 19, 57, 57, 57,157, 0,152,245,220, 72,103,103,231,239, 54,108,216, 80, 87, 34,145,152,253, -167, 58,157,206,102,228,200,145, 75,170, 98,176,252,253,253,113,249,242,101,116,236,216, 17,245,235,215,175, 59,114,228,200,101, -157, 59,119,198,215, 95,127,125,205,104, 52,186,164,165,165,153,251,160,103,119, 0, 37,207, 45,173, 9,192, 19, 69,205,129, 0, -208,180,248,253,101,177,217,170,103,142,193,130, 88,246,121,207,238,221, 21,191,222, 72,135,137,101,225,227, 42,134,111, 77, 11, -196,166,107, 16,155,148, 5, 62,165,135, 66, 34, 66,131, 22, 31, 88,103,167,197,126, 14,115,186, 7,136,164,159,247,238,217, 93, -126,232,102, 58,114,147, 30,147,184,187,251, 46, 26, 52,202,225, 0, 16,113,101,199, 79,142,214,226, 78, 94,141,154, 48,170,214, -189,172, 67, 14,175,255, 60, 7,224, 12,214, 31, 15,169, 66,148,247,159, 23,193, 42, 33, 43, 23,106, 91, 39, 95, 36,164, 62, 40, -250,158,149,133,172,172, 44,212,174, 93, 27,107,214,172,121,109,221,234, 62,129,254,143,208,180,179,182, 66,207,246,109,153,240, -200,245,140,154, 85,191, 19,205,191,109, 73, 36,132, 80, 20, 69,197,101, 26,172, 50,243, 13,130,126,237,221, 8,159,161,209,191, -125, 77,106,221,177, 56, 65,166, 90,106,197, 48, 12, 77, 8,169,244, 78, 62, 32, 32,128,239,239,239,255,205,166, 77,155,248, 41, - 41, 41,176,178,178,130,193, 96,192,131, 7, 15,146, 83, 82, 82, 98, 0, 32, 53, 53, 53,242,206,157, 59,105, 38,147,169,134,143, -143, 15, 70,142, 28,137,122,245,234, 81, 19, 39, 78,156,178,119,239,222,121, 40, 99,196, 98, 90, 90,218,162, 25, 51,102,180, 89, -184,116,141,237,160,166, 20,148, 42, 29, 10, 11, 11, 17, 27,245, 24,164, 80,135,229,203, 87, 64, 34,145, 80, 0, 4, 25, 25, 25, -130, 57,115,102,111,180,178,178,234,126,255,254,253, 62,229, 26,244,180,180, 5,179,103,207, 14, 94,190,124,185, 77, 97, 97, 33, -212, 26, 13, 10,212, 66,220, 94, 81, 20,161,108, 58,225, 14,214,125,191,140,246,119,151,217, 22, 22, 22,226,155,111,190, 89, 45, -149, 74,155,133,133,133,141, 41, 79, 51, 41, 41, 41,108,250,244,233,246,107,215,174, 21,213,171, 87,239, 81,126,126, 62,114,114, -114,232,131, 7, 15,206,119,119,119,183, 89,189,122, 13, 37,149, 74, 1, 0, 9, 9, 9,130,153, 51,103,236,149,203,229, 59,195, -195,195,135,148,119,120, 66,230,180,211, 2, 36,197,197,165,118, 93,213, 77,122,142,139,139,230, 90,200,156,228,237, 0, 73, 41, -142, 67, 18, 39, 39,167, 65,241,219, 68,173,180, 90,118, 85,106,106,220, 51,224,175,125,168,172,157,157,221,216, 94,189,122, 97, -201,146, 37, 56,118,236,216, 4, 27, 27,155, 21,115,231,206,133,139,139,203,151,201,201,201,171,138, 47,128,230,240,253,202,149, - 43,125,124,124,124,240,217,103,159,233,206,159, 63, 63, 29,192, 97, 0,113, 87,175, 94,173,185,117,235,214, 30,123,247,238, 93, -178,122,245,106,241,218,181,107,235,126,244,209, 71,171, 88,150, 29, 86,153,168,163,163,227,215, 3, 6, 12,192,178,101,203,112, -249,242,229,143, 0,156, 44,254,233,212,245,235,215,123, 44, 90,180,232,194,204,153, 51,177,114,229,202,241,137,137,137, 85, 53, - 88,114, 95, 95,223,111,187,116,233,130,171, 87,175,162,117,235,214,104,222,188,249,132,155, 55,111,174, 65, 81,211, 86, 85,161, -229,114,249,222, 45, 91,182,180,174, 85,171, 22, 22, 44, 88,128,111,190,249, 6,155, 54,109,106, 61,120,240,224,189, 74,165,178, - 15,204, 24,229, 43,151,203,229, 18,137, 4, 75,150, 44, 33,241,241,241,149, 70, 79,157,157,157,173,191,253,246, 91,202,210,188, -102, 0,198,197,197,197,210,209,209,177,141,147,147, 19, 86,175, 94, 13, 7, 7, 7, 76,152, 48, 1,182,182,182, 80, 42,149,232, -211,167, 15,255,214,173, 91,253, 1,172, 49, 51,223,182, 0, 74, 34, 94,190,197,230,170,160,248,251, 45, 0,173,138, 13, 86, 54, - 0, 27,179,118, 36, 33,254,214, 86, 22, 72,126,148, 6, 30,140,240,169,169,192,189, 23, 74,232, 77, 4, 82,153, 28,202,130, 92, - 52,170,107,143,124, 85, 13, 0,172, 89,147, 96, 10, 24,186,137, 80, 36, 65,122,126, 30, 82,159, 92,200,210,155,180, 35,243, 94, - 94, 79, 0, 0,235,218,173, 71, 62,190,125,250, 94,159,174,173, 29, 50,114,106,130, 16, 54, 24, 28, 28, 85, 57,249, 43, 91,129, -101,127,127,238,151,142, 8,149,160,215,191,221, 13,247, 31,161, 89, 22,127,132,230,223,193,103,185, 90,243,242,100, 98,218,120, -238, 94,186,201, 96, 52,225,204,189, 84,147, 84, 68, 25,173, 69,186,124,150,101,205,170, 16, 67, 67, 67, 13, 87,175, 94,221, 54, -109,218, 52,172, 92,185, 18,209,209,209,224,243,249,240,246,246,118,172, 81,163,134,115,241,133,219,173,126,253,250,118, 12,195, -224,197,139, 23,216,189,123, 55,230,204,153, 67,238,223,191,191,169,188,138, 34, 37, 37,229, 65, 90, 90,218,134,197,243,166,231, -242,181,201,144,154, 50, 96,202,141, 6,223,148,135,177, 19,166,225,101,166, 9, 15, 94, 22,224,193,203, 2,164,170,197,248,118, -193,114,198,211,211,179,135,171,171,107,231,242,210,154,156,156,124, 43, 37, 37,101,251,172, 89,179,242, 50, 51, 51, 95,149, 31, -189,145,133,222,200,190, 89, 57, 97,241,226,197, 86,206,206,206,253, 92, 92, 92,218,149,167,153,145,145,145,158,156,156,252, 98, -218,180,105,250,140,140, 12,228,231,231,227,244,233,211, 31,213,174, 93,219,102,226,180,121,212,203, 76,242, 42,157,121,172, 21, -150,173,249,133,169, 83,167,206, 64,103,103,231, 10,251, 17,185,184,184,214,245,245,173,179,255,214,173, 91, 67,234,214,173, 59, -166,196, 88,149, 24, 41, 15, 15,143, 81,247,239,223, 31,218,184,177,223,126, 71, 71,167,122,127,113, 89,106,223,175, 95,191,122, - 44,203, 98,255,254,253,143, 0,172, 60,116,232,208, 93,173, 86,139,254,253,251,123, 0,232, 98,166, 78,208,192,129, 3,199,180, -110,221, 26,227,199,143,215,159, 63,127,190, 9,128, 21, 40, 26, 61, 70, 0,196, 1, 88, 19, 18, 18,210,104,236,216,177,218,224, -224, 96, 12, 25, 50,100, 40,202,239,147, 83, 66,139, 1, 3, 6,248,176, 44,139, 61,123,246, 60, 44,101,174, 74,184,120,224,192, -129, 91, 58,157, 14,131, 6, 13,170, 13,160, 67, 21,242, 46, 16,137, 68,251,231,207,159,111,149,148,148,132, 79, 63,253, 84, 27, - 25, 25,137, 57,115,230, 72, 44, 45, 45, 79, 2,144, 87,117,103,138, 68,162,159,215,175, 95,223,171, 65,131, 6, 24, 61,122,180, -238,199, 31,127, 28, 55,102,204, 24, 93,147, 38, 77,240,195, 15, 63,244, 18, 10,133, 85,122, 4, 72, 90, 90, 90,110, 72, 72,136, -109,101,175,212,212,212, 52,115,244,220,220,220,172,234,215,175,255, 40, 40, 40, 40,179, 97,195,134,117, 0,224,241,227,199, 25, -251,247,239, 39,182,182,182, 56,125,250, 52,126,254,249,103,180,108,217, 18, 10,133,162,127, 21,163, 16,164,212,231,178,126,127, -115,189,138,161, 40,146,167, 50,130, 71,211,224, 51, 4,113,105, 26,232, 77, 4, 2, 62, 13, 62, 3,240,104, 2, 91, 5, 31,124, - 62, 3,115,111, 82,104,138, 66,142,210, 0, 30, 67,129, 47, 20, 80,180,209,244, 42, 68, 72,243, 76, 18,145, 88, 68, 57, 88, 10, - 32,224, 81,160, 40,112,112,188,187, 8, 22, 0,152, 76,191, 15,124,148, 21, 5,210,233,116,111,149,144, 63, 66,179, 44,254, 8, -205,191,146,252,252,124, 94, 72, 72,136, 37,159,207,151,117,111,208, 50,235,187,125, 81,118,115,119, 61,131,144, 1,213,163, 33, -157,114,249,210,121, 42, 39, 39,199,218,211,211, 51,199, 28,189,152,152,152,225,219,183,111, 95, 64,211,116,176,201,100,218,183, -114,229, 74,172, 91,183, 78, 58,106,212,168, 72,147,201,148,228,229,229,229,182,106,213, 42, 17, 0,108,223,190, 29,103,206,156, -233,205,231,243,239,196,199,199,167, 86,164,251,240,225,195,153,185,185,185, 55, 98, 98, 98,214, 80, 20,101,165, 80, 40,172, 15, - 29, 58, 68,165,228,234, 48,115,123,244,171,145,133, 50, 17,131,105, 31,218,163,111,223,143,121,207,159, 63,255, 62, 41, 41,233, - 76,121,154, 15, 30, 60,152,144,155,155, 27, 18, 21, 21,181, 82, 96,235,109, 43,246, 31,161,232, 48,173,168,249,209,217, 70, 4, -186,248,130,152,151,151,135,204,204, 76, 12, 29, 58,212,106,225,194,133, 83,146,147,147, 47,151,167, 25, 22, 22,118, 43, 47, 47, - 47, 37, 42, 42,170, 25, 33, 68,104,105,105,217,114,229,202,149, 84, 92,182, 14, 83,183,190, 64,129,166, 40,157, 10, 49, 31,243, - 6,212,192,144, 33, 67,120, 47, 95,190,252, 46, 37, 37,165, 85,217,230,202,197,211,215,215,119,255,174, 93,187,124, 87,173, 90, -149,253,252,249,115,165,179,179,243,220,210,235,196,198,198,106, 23, 47, 94,156,181,125,251,118,239, 79, 63,253,116,127,104,104, -232, 39,213,157, 82,227,109,177,176,176, 88, 50,114,228, 72,236,221,187, 23, 57, 57, 57,171,138,203,216,202, 93,187,118,237, 25, - 62,124, 56,182,111,223,190, 36, 35, 35,227,180, 25,149, 98,215,254,253,251,227,212,169, 83,184,112,225,194,183, 0, 34,202, 89, - 47,234,234,213,171, 83,142, 28, 57,178,122,192,128, 1,216,188,121,115, 23, 20,117,128, 46,143, 78,157, 59,119,198,201,147, 39, -145,149,149,245, 67, 89, 43,228,230,230,254,120,244,232,209,102,157, 59,119,198,226,197,139, 59, 1,184,104, 70,214,125, 44, 45, - 45,183,172, 94,189, 58,168, 65,131, 6, 24, 56,112,160, 70,175,215,119,249,230,155,111,142,237,222,189, 91,177,109,219,182,192, - 17, 35, 70,220, 78, 79, 79,255,162, 56, 2, 83,121,229, 77,211,139,150, 47, 95, 62,172, 93,187,118,152, 48, 97,130,241,204,153, - 51, 61, 1,156, 61,125,250,244,139,201,147, 39,159, 88,190,124, 57,179,108,217,178, 97, 95,125,245, 85, 6,203,178,211,255,138, -227, 77, 81,212,178,229,203,151,251,250,249,249, 65,163,209, 32, 58, 58, 26,105,105,105,187, 78,159, 62,125, 54, 60, 60,124,105, -106,106,234, 65, 71, 71,199,225, 19, 38, 76,168, 17, 20, 20, 20,164, 84, 42,173,205,233,127, 88, 42, 50,149, 14,224, 9,138, 6, - 22,149,236,183,166, 40,106, 26, 4,138, 70, 20,230,152,153,216, 71, 81, 47,147,106, 91,203, 45,144,195, 10,241, 50, 41, 19, 18, -153, 12, 52,161, 97, 84,231,192,211,221, 1, 44, 1,242, 51,147, 64,211,212, 35,115, 36, 13, 38,246,126,108, 66,154,171,149, 76, - 12,207, 38,221,108, 31, 94,220,188,195,162,118,203, 17, 60,134, 98,248, 66,249,134,129, 3, 62,179, 51,152, 8, 10,115, 82, 64, - 49,244, 29,112,112,188,235, 8,214,155,237,254,111, 70,129, 36, 18, 9,180,218,170, 77,151,242, 71,104,154,243,159,239, 90,243, -175,196, 96, 48, 40,198,140, 25,211, 42, 49, 49,209,194,219,219,251, 69,183, 32,251,155,155,198,213,190,217,212, 34, 66, 53,227, - 3,234,166,155, 56,237,174, 72, 36,138,207,201,201, 17,110,223,190, 61,192, 96, 48, 72,205,209, 77, 77, 77,141, 79, 78, 78,222, -127,224,192,129, 29,199,143, 31, 71,189,122,245,112,229,202, 21, 69, 84, 84,148,207,165, 75,151,100,158,158,158, 56,120,240, 32, -142, 30, 61,250, 75, 74, 74,202,145,202,204, 85, 9,241,241,241,167,195,194,194,234,102,101,101,213,181,178,178, 50, 88, 89, 89, -225,205,145,133, 74,173, 9,185,249, 5,176,178,178,130, 84, 42,245,168, 76, 51, 54, 54,246,216,195,135, 15,107,195,198,167, 53, - 19,179, 43,239,199, 47,235,225,199, 47,235, 97,254,224, 58,112,178, 22, 34, 55, 55, 23, 25, 25, 25,200,200,200, 0, 33, 4, 38, -147,201,215, 12,205,248,176,176,176,189, 73, 73, 73,231,237,237,237, 41,185, 92, 14, 2, 32,167, 80,143,235, 75,131,112,125,105, - 16,114, 10,245, 40, 40, 84,194,213,213, 21, 10,133,162,204,230, 8,107,107,107, 5, 33,100,235,198,141, 27,125, 20, 10, 5, 51, -124,248,112,171,155, 55,111,182,186,121,243,230,212, 55, 94,173,190,252,242, 75,107,169, 84,202,108,222,188,217,139, 97,152, 45, -238,238,238,150,127,114,113, 98, 0,252,111,248,240,225,129, 98,177, 24,235,214,173,139, 1,176,179,248,183,253, 63,254,248, 99, - 36, 0,140, 27, 55,174, 62,128, 9,168,120, 36, 37, 4, 2, 65, 19, 95, 95, 95,220,188,121, 19, 0, 14, 85,242,223, 7,110,220, -184, 1, 79, 79, 79,136,197,226,160, 74,214,245,112,115,115, 67,100,100, 36, 0, 60, 40,207,123, 71, 70, 70,194,205,205, 13, 20, - 69,121,152,145,247, 94,239,191,255,254,163, 75,151, 46, 5,181,104,209, 2,195,134, 13,211,221,190,125,187, 27,128, 43, 15, 30, - 60,104, 63,104,208, 32,165,151,151, 23, 66, 66, 66,124, 6, 13, 26,116,131,166,233, 5,102,104, 14,157, 55,111,222,180,222,189, -123, 99,222,188,121,100,223,190,125, 3, 1,156, 45,254,237,204,158, 61,123, 62, 93,184,112, 33,233,211,167, 15,230,206,157, 59, - 13,192,232,138,196, 84, 42, 85,158,201,100,130, 74,165, 50,235, 14,209,220,245,107,215,174,221,213,207,207, 15, 71,142, 28,129, - 80, 40,196,185,115,231, 64,211,244,137,212,212,212,179,247,239,223,111,144,156,156, 60, 63, 37, 37,229,192,139, 23, 47,208,186, -117,107,218,100, 50,245, 49,179, 60,189, 4,208,160,248,115, 2,138,250, 99,181, 0,208, 18, 64, 84,113, 36, 19, 40,122,158,221, - 75,115, 4, 89, 93,225,182, 11, 39, 15,228, 89,203, 5,176,179,150,193,209,206, 2,140, 65, 9,232,114, 81,215,221, 17,193,190, - 78,120,153,174,195,141,243,251,115, 85,133, 42,179,166,151, 48,233,149, 91, 46,156, 62,146,103, 35, 23,160, 86, 93, 63,244, 24, - 56,190,177, 79,131,166,231,252, 3, 90,157,153, 57,123, 81,195,247, 91,249, 82, 17, 9, 26,220,186,112, 56, 71, 85,144,191,133, -179, 12, 28,213,141, 96,149, 21, 0, 77,159, 48, 97,130,195,196,137, 19, 97, 97, 97,129,172,172, 44, 24, 12,134, 87,209, 38,145, - 72, 4, 43, 43, 43,100,101,101, 97,207,158, 61, 40,190, 91, 41,255, 10,206, 8, 83, 22,252,176,214,141, 98,100, 58,145, 68, 74, -108,164,111,175, 9, 0, 58, 3, 47,125,253,158,131, 54, 93,219, 52,231,213,116,118,254,221,239,213,209,252,135, 24,172,115,169, -169,169,129,245,234,213, 75,117,119,119, 87,107, 52, 26, 16,181,186,224,228,158, 85,117,220, 44, 71, 71,211, 52, 77, 36, 18, 9, -107,101,101,165,140,142,142,166,140, 70,227,165,170,232, 19, 66, 70,141, 26, 53,138,190,122,245,234,192,193,131, 7,163, 86,173, - 90,120,240,224, 1,182,111,223,142, 3, 7, 14,108, 21, 8, 4,227,170,147,238,132,132,132, 66, 95, 95,223,215, 34, 32,111,142, - 44, 52,104, 51,192,178,172,217,157,243,115, 66,183, 63, 99,236,236, 12,245,107,254, 54,157, 72, 78, 78, 14, 50, 50, 51,145,145, -145,129,204,226,119, 66,136,217, 33, 76,138,162, 10,116, 58,221, 27,233,252,173,249, 81,169, 84, 66,175, 77,135,201,100, 42, 83, - 51, 39, 39,167,192,217,217,121,237,154, 53,107,150,207,159, 63,223, 97,229,202,149,217, 79,159, 62,205,167,105, 90,243,198, 77, -140,184,110,221,186,138,101,203,150, 57,174, 89,179, 38,155,101,217,181,113,113,113,121,127, 98, 81,234,221,160, 65,131,173, 93, -187,118, 85,140, 25, 51, 6,107,214,172, 65, 74, 74,202, 84, 0, 37, 35, 25,217,204,204,204,201, 63,252,240,195,241, 41, 83,166, - 64,175,215, 47, 59,121,242,228,220,208,208,208, 81,165, 76,216,107,216,219,219,215,224,241,120, 8, 13, 13,205, 7, 16, 93,153, -167, 15, 13, 13, 77,163, 40,202,209,217,217,185, 78, 76, 76, 76,185, 43,218,216,216,212, 85, 40, 20, 72, 74, 74, 66, 5, 21,115, -108,114,114, 50, 17, 10,133,148,139,139,139,103,241,186,229, 98,109,109, 61,121,227,198,141,188, 75,151, 46, 97,246,236,217,137, -113,113,113,131, 74, 69,209, 66,239,223,191,223,186,125,251,246,187,167, 76,153,226,253,221,119,223, 81,145,145,145,163, 67, 67, - 67,103, 86,164,233,238,238, 62,106,232,208,161, 88,187,118, 45, 54,108,216, 48, 26,192,254, 55, 86,217,253,195, 15, 63, 88,219, -218,218,174, 29, 57,114, 36,182,108,217, 50,232,229,203,151,235,203,211, 75, 74, 74,154,210,175, 95,191, 89,217,217,217,139,204, - 57,160,230,172,239,236,236,220, 51, 48, 48,208,145, 16,130, 53,107,214,164,174, 93,187, 86,149,159,159,191, 51, 37, 37,229,210, - 27,145,184,131,167, 79,159,158, 48,102,204, 24, 92,186,116,105, 93, 72, 72, 8, 73, 73, 73,217, 88, 73, 18, 82, 80, 52,207,149, -111,113, 4, 43, 1,191,239,200,238, 93,252,158,104, 78,158,178,162, 46, 31, 99,248,226,235, 97,119, 46,191,239, 81,191, 53,223, -193, 90, 1, 87, 79, 59,216,200, 5, 32, 0,194,227,212,184,117,229,172, 33, 61, 37,254,134, 57, 35, 8, 75, 52,159, 11, 36, 55, -164,118,238,239,215,246,107,197,243,240,244, 66,167,150, 13,173,109, 45,248,208, 25, 8,206,133,229,225,102,200, 41, 67,122, 90, -194, 37,110, 4,225,159, 23, 88,253, 47, 69,184, 90,243,120,188,239, 39, 79,158,188,225,201,147, 39, 27,162,162,162, 54,132,134, -134,110, 88,176, 96,193,134, 57,115,230,108, 8, 12, 12,220, 64,211,244,247, 40,234, 59,241,102, 68,204,255,207,208,108,219, 22, -188,129, 93,176, 96,222, 40,158,106,251, 2, 55, 67,198,149, 79, 8,121, 60,154,204, 27, 5,242, 22,233,124, 91,254, 44,205,250, - 60, 30,239,180,187,187,251,173,109,219,182,237, 13, 13, 13,221,108, 99, 99,147,188, 96,193,130,141,227,198,141,219,227,228,228, -116,135,207,231,159, 7,208,176,186,233,116,116,116,252,104,240,224,193,228,212,169, 83,164,111,223,190,196,197,197,165,219,219, -230,189, 89,179,102,169,225,225,225,228, 73,130,146,124,180, 48,140,180,156,116,151,180,156,116,151,116,153,121,135,252,180,251, - 44,153, 61,123, 14,241,247,247, 63, 95, 21,205, 70,141, 26, 69,165,167,167, 19, 66, 8,201,206,206, 38,145,145,145,228,234,213, -171,228,224,193,131,100,195,134, 13,100,209,162, 69,108,195,134, 13,183, 86, 69,179,121,243,230,217,207,159, 63, 39, 17,241, 74, -210,123,254,195,226,116,222, 33,221,103,223, 39,123, 78,220, 34,243,230,205, 35,126,126,126,251, 42,210,116,118,118,238, 63,105, -210,164,148,236,236,108, 67, 80, 80, 80,200,155,191, 7, 4, 4, 28,206,204,204, 52,204,152, 49, 35,205,197,197,229,179, 63,187, - 44,217,218,218, 94, 79, 76, 76, 36, 49, 49, 49,228,155,111,190, 33, 12,195,148, 89,121,210, 52,189,110,252,248,241, 36, 58, 58, -154, 36, 39, 39, 19,103,103,231, 7, 21,164,179,187,131,131,195, 61, 0,189,205, 76, 79,119, 7, 7,135, 59, 0,250, 84,148,247, -154, 53,107, 70, 36, 38, 38, 18, 63, 63,191,236,138,196, 60, 61, 61, 19, 18, 19, 19,137,151,151, 87,146, 25,251,243, 3, 71, 71, -199,251, 0, 22, 2, 16, 87,112, 51,250,181,147,147,211,117, 0,255, 51, 67,179,151,183,183,119, 40,128,177,149,228,123,132,135, -135, 71, 24,128, 15,254,236,227, 94,191,126,253,155, 73, 73, 73,228,151, 95,126, 33,206,206,206, 83, 42,218,168, 86,173, 90, 71, -142, 29, 59, 70, 82, 82, 82, 72,227,198,141, 67,205, 76, 39, 15, 64, 91, 20,245,131,115, 66,209,196,163,124, 0,142, 0,218, 1, -104,143,162, 39,112,152,125, 13,177,245,106, 33,119,244,239,122,220,239,253,177,217, 67, 22, 95, 34, 83,182,190, 32,223,238,140, - 33,227,215, 92, 35, 65,221,199,103,187, 52,252,224,184,173, 87, 11,121, 85, 53,157, 27,116, 59,209,176,219,215,217,159, 47,190, - 64,166,111,139, 38,115,118,199,144,175, 86,133,144,224,158,227,179,106, 52,236,113,200,193,191,147,244, 47,190,206,255, 87, 52, -203, 60, 71,254,137,230,137, 16,243,199, 42, 9, 1,124,160, 80, 40,214,204,158, 61,123,195,237,219,183, 55,116,239,222,125,131, - 80, 40, 92, 83,124, 97, 16, 86,227, 0,188,115,205, 46,193, 80, 12,237, 73,111,158, 63,154,167, 63,188,178,158, 97,222, 40,144, -119,144,206,127, 74,129,110,197,231,243,111, 54,104,208,224,146, 66,161,200,168, 85,171,214, 85, 62,159,127, 7, 64,155,183, 77, -167,163,163,163,221,176, 97,195,216,151, 47, 95,146,207, 62,251,140,152,209,124, 85,169,166,155,155, 91,135, 62,125,250, 24, 18, - 82,115,201,213,176, 4,114,252, 74, 4,217,117,252, 38,217,176,251, 44, 89,181,126, 43,233,212,169,147,214,209,209,209,189, 42, -154, 53,107,214,236,210,179,103,207,220,204,204, 76, 18, 25, 25, 73,174, 92,185,242,202, 92,173, 95,191,158, 52,108,216, 48,203, -213,213,213,165, 42,154,238,238,238,189, 6, 13, 26,100, 72,201, 82,146,219, 17,169,228,220,237, 23,228,240,197,135,100,247,241, -155,100,235,238, 67,164,109,219,182, 26, 59, 59, 59,199,202, 52,157,157,157,251,125,242,201, 39,207,189,189,189,127, 42,195, 12, -252,240,201, 39,159,196,185,184,184,124,250, 23,149,165, 46,174,174,174,145, 2,129,224, 4,128, 79, 43,217,174, 63,143,199, 59, -230,228,228,116, 23,192,135,127, 65,153,239,238,224,224,112, 11, 64, 79, 51, 12,219,173,114, 12, 30, 87, 41, 22,149,201,238,141, - 26, 53, 10,115,114,114, 90,142, 74,154,124, 93, 93, 93,197,206,206,206,223, 55,110,220,248,166,147,147, 83,159, 42,166,179, 70, -241,141,109,175,226, 87,107, 20,205,125, 85,237,188,219,122,117,236,225,218,184,231, 97,151,134, 31,196,185, 52,236, 30, 87, 35, -160,215, 97, 91,175,142, 61,222, 86,179, 70, 64,175, 35, 46,141,186,199,215,104,212, 35,182,102, 64,175,195,118,245, 58,118,229, -204, 16,103,176,254,104,131, 85,130, 28, 64,127,154,166,215, 1,232,143,202, 71,213,248,255, 21,154, 93,218,194,117, 76, 95,230, -228,212, 33,252,140,119,152,206,127, 74,129,238,197,227,241,110, 20, 95,200,222, 89, 58, 61, 61, 61, 55,142, 28, 57,210, 84,179, -102,205,181,239, 74,211,215,215,119,121,143, 30, 61,244, 63,255,252, 51, 57,122,244, 40,217,184,113, 35,249,230,155,111, 72,187, -118,237,180,222,222,222, 67,170,163,217,160, 65,131,249, 29, 58,116,200,220,179,103, 15,217,187,119, 47, 89,183,110, 29, 89,180, -104, 17,219,184,113,227,116,111,111,239,238,213,209,244,247,247,255,185, 87,175, 94,250,109,219,182,145,139, 23, 47,146,189,123, -247,146,153, 51,103,146,182,109,219,106,188,188,188, 62, 50, 87,179, 78,157, 58,229, 25,124, 4, 4, 4,240,185, 11, 46,167,201, -105,114,154,156,193,250,239, 26,172, 18,120,127,192, 1,248,167,104,254,103, 79, 18,103,103,103,201,187,214,116,113,113,105, 88, -191,126,253, 11, 77,155, 54,205, 9, 10, 10, 74,247,247,247, 63,232,236,236,236,246,150,233,108, 28, 16, 16,176,191,113,227,198, -207, 3, 2, 2, 30, 55,104,208,224,167,146,105, 38,222, 34,157, 77, 27, 52,104,112, 57, 56, 56, 56, 55, 40, 40, 40,205,207,207, -111,207, 27,145, 43,174, 44,113,154,156, 38,167,201,105,114, 6,235,149,193,226, 85,115,219, 63,226, 49, 30,255, 20,205,255, 44, - 41, 41, 41,234,119,173,153,156,156,252, 48, 57, 57,249,189,119,156,206, 7, 41, 41, 41, 31,191,227,116,222, 78, 78, 78,110,199, -149, 2, 14, 14, 14, 14, 14,115,160,185, 93,192,193,193,193,193,193,193,193,241,110,161, 80,126,152,175, 42, 79,202,174, 78,168, - 48,156,211,228, 52, 57, 77, 78,147,211,228, 52, 57,205,255,156,230,155,218,111,246,101,125,115,244,239,207,248,135,241, 54,125, -176,254, 72,227,197,105,114,154,156, 38,167,201,105,114,154,156,230,127, 79,243, 95, 3, 33,132,107, 34,228,224,224,224,224,224, -224,224,120,215,112, 6,139,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, 28, 28, 28,156,193,226,224,224,224,224, -224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,199,223,130,178, 70, 17, 18,110,183, -112,112,112,112,112,112,112,252,149,254,228,223,144, 9,174,137,144,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, - 28, 28, 28,255, 12,131,197, 53, 13,114,112,112,112,112,112,112,252,149,252, 43,189, 72,219,226,140,181,229,142, 47, 7, 7, 7, - 7, 7, 7, 7,231, 69,222,194, 41, 18, 46,110,197,193,193,193,193,193,193,193,241,206, 13, 22,215, 7,139,131,131,131,131,131, -131,131,227, 29,243, 71, 27, 44,238, 73,227,156, 38,167,201,105,114,154,156, 38,167,201,105,114, 6,139,131,131,131,131,131,131, -131,131,131, 51, 88, 28, 28, 28, 28, 28, 28, 28, 28,156,193,226,224,224,224,224,224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, - 7, 7, 7,103,176, 56, 56, 56, 56, 56, 56, 56, 56,254, 42, 40,148, 63, 18, 32,188, 10, 58,213, 25, 77, 16,206,105,114,154,156, - 38,167,201,105,114,154,156,230,127, 78,179, 50,237,112,252,195,249, 51, 38, 26,229,134,176,114,154,156, 38,167,201,105,114,154, -156, 38,167,249,159,130, 16, 2, 30,183, 27, 56, 56,254,225, 39,242,126, 48,112,168,231, 1,150,184,128, 39, 76,193,197, 71,209, -212, 28,176,111,173,233,226,231, 14,157,193, 17, 18,113, 6,206, 60,140,121, 91, 77, 14, 14, 14,142,255, 18,156,193,226,224,248, -167,227,236,227, 13, 19, 22,131,129, 51,136,254, 5, 90,250, 45, 6, 34,222, 46,196,110,235,227, 13, 3,187, 0, 60,186, 6,116, -250,103,104, 83,111, 9, 16, 25,193,237,108, 14, 14, 14, 14,243,248, 75, 58,185, 7, 6, 6,222, 15, 12, 12,156,223,182,109, 91, - 17,119, 8, 56,254, 40,218,182,109, 43, 10, 12, 12,156, 31, 24, 24,120,255,223,154, 71,242,200, 95, 10,163,169,171,206,192,186, -158,190,145,235,160,210,152,188, 33, 48,118, 35,215,189,228,111,165,201,167,222,215, 24,216,154, 59,206,169, 28,149, 26,163, 47, -104,188,149,102, 9,245,235,215,183, 10, 10, 10, 58,221,168, 81, 35, 59,174,132,114,112,112,112, 6,235, 29,195,178,108,128,131, -131,195, 4,181, 90, 29,215,164, 73,147,158,255,165, 29,222,180,105,211, 27,205,154, 53, 75,107,222,188,121, 90,243,230,205, 67, - 43, 91,254,111,196,217,217,217,219,223,223, 63,206,207,207,239, 89,233,229,246, 13, 63,108,225,211,250,211,217,182,126,189,218, -190,237,127, 52,105,210,164,167, 90,173,142,115,112,112,152,192,178,108,192,191,118,103, 42, 89, 71,208, 76,251,136, 88,149, 52, - 53,215,224,120, 63, 82,165, 0, 97,218, 65, 15,231,183,210,100, 73,135,176, 23,106,217,205,104,123,199,171,225, 90, 11, 16,186, - 61, 8,229,244,182,201, 21, 10,133,163, 9, 33,157,248,124,254,120,238,242,251,159,199, 31, 64, 79, 0, 65,239, 80,243,187,122, -245,234, 37, 1,248,138,219,189, 28,255, 24,131,213,215, 3, 45, 7,212, 70,200, 39, 30, 40,232, 87, 27,133,131,106,227,218, 71, -117, 80,237,138,240,224,193,131,146,237,219,183, 59,248,249,249,237, 9, 14, 14,190,214,164, 73, 19,175,234,232, 4, 6, 6,158, - 14, 12, 12,252,248,205,101, 77,154, 52,233, 87,122, 89, 80, 80,208,227,160,160,160,188,192,192,192,104,115,116, 3, 2, 2,158, - 7, 4, 4, 40, 3, 3, 3,159,191, 81,113,247, 11, 10, 10, 58,253,198,255,125,252,230,178,114,119, 56, 77,215, 56,118,236,152, -195,137, 19, 39, 28,120, 60,158,227,155,203,143, 31, 63,254,218,242,106,236,143,225,129,129,129, 55,222,200,203, 23,111, 46,171, -196,156,220, 8, 8, 8,248,226, 13,221, 27,129,129,129,195,223,133,185,106,211,166,205,181, 7, 15, 30,212, 84, 40, 20, 86,165, -127,115,178,181,234,124,227,248, 15, 19,134,124,252,254,104,123,223,222, 13,170,105,172,188,130,131,131,175,249,249,249,237,217, -190,125,187,195,193,131, 7, 37,255,214,147,151, 60,241, 21,192,200,182, 97, 89, 98, 31, 17,173,177,239,246, 65, 95, 94,216,115, -181,189,193,104,178, 1,197,180, 35,151,221, 69,213,210, 52, 24, 90,179,132, 56, 94, 8, 19,216,183,235,241, 37,115,233, 17,207, -222, 96, 50,217,194,128,182,213,209, 44, 85, 14,249, 12,195, 76, 24, 57,114, 36, 77, 81,212,151,117,234,212, 17,254,151, 46,182, -193,254,112,237,208,132,185, 19,224,139,150,239, 80,182,190, 84, 42,189, 7,192,251, 31,182, 59, 2, 0, 72, 1, 28, 5,224,136, -119,211, 93,101,229,188,121,243, 38,135,135,135,187,212,174, 93,123, 46, 0,134,171,226, 57,254,246, 6,171,159, 7,230, 56, 58, -185,158,157,177,114, 87,155,141, 33, 49,242, 31,143,133,202, 38, 76, 89,212,210,201,218,254,228,160, 58, 88, 82,193,166,225, 21, -220,201, 34, 58, 58, 26,107,214,172, 17,207,153, 51,167,133,165,165,229,195,224,224,224, 85,190,190,190,178, 74,146,243,154, 38, - 33,164, 37,159,207,223, 24, 28, 28,188,165,228,130, 77, 81, 84, 75,145, 72,244,115,112,112,240,142,146,102,200, 38, 77,154,212, -190,115,231,142, 5, 69, 81,142,230,164, 51, 56, 56,216,249,254,253,251, 82,160, 40, 18,208,182,109, 91, 81, 80, 80,208,118, 87, - 87,215, 13, 64,209, 5,178, 78,157, 58,194,224,224,224, 45,110,110,110,191, 80, 20,213,210,156,188,211, 52, 13, 43, 43, 43,236, -218,181, 11, 12,243,219,249, 79, 81, 20,172,172,172,176,115,231, 78, 80, 20, 85,229,253,233,235,235, 43, 11, 12, 12, 60,232,236, -236,188,138,101,217,230, 0,224,239,239, 47, 13, 10, 10, 58,224,234,234,186,186,100,153, 57,154,132,144,230, 2,129, 96, 85, 80, - 80,208, 1,127,127,127, 41, 0,176, 44,219,156,199,227,173, 12, 12, 12, 60, 88,149, 99,212,184,113,227,145, 13, 26, 52, 72,110, -208,160, 65,178,183,183,247, 66, 71, 71,199,203,107,215,174,181, 45,157,247,146,200, 85, 90,122, 86,206,141,187,143, 35, 39,140, -236,219,174,166,155,227, 32,203,134,189, 44,205,201,123, 73,254,131,131,131, 87, 89, 90, 90, 62,156, 51,103, 78,139, 53,107,214, -136,163,163,163, 33, 20, 10, 81,157,242,249, 22,252,121,154, 89,148, 3, 40,210, 49, 50, 78, 45,174,229, 25, 40,115,240,233, 11, -123, 43,158,232,230, 19,165, 2, 12,222, 3, 95,106, 95, 61, 77,222,123,143, 99,212, 18,235,218, 93,165, 65,205,218,128,146,121, -137, 46, 63, 80, 90,128, 71, 87, 79,179,212,125, 90,243,230,205,133, 29, 59,118,132,139,139, 11, 99,105,105, 57,232,111,181, 63, -255, 64,205, 96,127,184, 42,196,194,219,203,231,125, 29,232, 98, 43, 61, 98,166,201,170, 44,157,245, 29, 28, 28, 46,253,240,195, - 15, 77, 20, 10,197, 21, 51, 77,214,223, 97,127, 6, 0, 16, 0,184, 85,252, 61, 2, 64,235,183,212, 92, 57,103,206,156,241,211, -166, 77, 67, 65, 65, 1,134, 12, 25, 98, 1, 96,185,185,154,114,185,220,179, 65,131, 6, 59,252,252,252,226, 27, 53,106,164,243, -241,241,209,120,123,123,199,214,175, 95,127,171, 72, 36,242,248,183,151,207,191,145,102,249, 55,127,132, 8, 9, 33,237, 9, 33, - 31, 16, 66,222, 35,132, 4, 23,127, 14, 42,126,125, 64, 8,233,248,198,123, 80,241,182, 37,191, 55, 45, 71,227,131, 55,183, 43, -181,205,155,223, 95,251,108,142,193, 34,111,188,191,226,227,218,104, 97,235,228, 58,249,187,195,119, 37,108, 84, 24,238, 15,235, -128,200,175,122, 67,242, 60, 12, 83,199, 78,149, 40, 20,214, 99,251,214, 70,251,234,236,176,103,207,158, 97,207,158, 61,176,179, -179,163, 54,109,218, 36,250,248,227,143, 71, 91, 88, 88, 36, 4, 6, 6, 14, 50, 87,131, 97, 24,211,150, 45, 91,228,189,122,245, -234,111, 99, 99,243, 56, 32, 32,160, 54, 77,211,166,109,219,182,201,251,245,235,247,177, 78,167,123,210,164, 73, 19,175,208,208, - 80,211,221,187,119, 65,211,230, 5,237,238,223,191,111, 60,117,234,212,171,168, 8, 33,228,201,146, 37, 75,250, 31, 58,116, 72, - 97,105,105,201, 6, 4, 4,212,118,115,115,123,252,221,119,223, 13, 58,112,224,128,194,194,194,194,172, 17, 86, 20, 69, 65,163, -209, 64, 44, 22,191,102,164, 40,138,130, 90,173,134, 72, 36, 50, 59,141,165, 34, 3,245,109,109,109,159, 46, 94,188,184,215,225, -195,135, 37, 10,133, 2,129,129,129,190, 86, 86, 86,145, 75,151, 46,237,125,228,200, 17,137, 66,161, 48, 91, 79, 32, 16, 96,231, -206,157,210,129, 3, 7,246, 20,137, 68, 79, 3, 3, 3,125, 5, 2, 1,118,239,222, 45, 29, 52,104, 80,119,169, 84,250, 36, 32, - 32,160,190, 57, 90, 6,131, 97,214,221,187,119,157, 47, 95,190,236,236,238,238, 62,238,199, 31,127,116,228,243,249, 0, 0,147, -201,244, 90,228,106, 80,159, 78, 77,199,207,250,225,146, 90,163,213, 45,152, 58,180, 29,223,132,102,102, 70,237, 6, 89, 88, 88, - 36,124,252,241,199,163, 55,109,218, 36,178,179,179,163,246,236,217,131,103,207,158,253,107,239,140,200,126, 48, 96, 77, 1, 0, -234,134, 62, 83,219, 53,106, 51,136,135,244,163, 8,246,149,243, 66, 66, 11, 29, 8, 33,238, 48,146, 96,114,185, 45,175, 74,154, - 12,105, 4,138,245, 58,251,128,178,107,209,113, 16, 47, 46, 46, 14, 30,190,237,152,227,119,225, 72, 8,241, 0,139,192,170,104, -150,134,207,231,207,254,228,147, 79,100,177,177,177,104,209,162,133, 84, 40, 20,206,122, 23, 81, 60,114,203,219,157,132,120,181, - 35,215,189,156,171,155,182, 63, 58,114,101, 33, 22,222,218,189, 99,175, 75,131,214,195,169, 13, 95,187,219,216, 43,248, 71,222, - 50,146, 85,223,193,193,225,226,237,219,183,109,223,127,255,125,204,153, 51,199,222,194,194,194, 92,147,245, 87, 71,174, 74,204, -149, 4, 69,205,131, 73, 0,106,188,133,230,234, 57,115,230,140,159, 62,125, 58,110,221,186,133,165, 75,151,162,107,215,174,176, -182,182,174,244,250, 49,120,240, 96,105,139, 22, 45,238,247,236,217, 51,108,252,248,241,131,142, 31, 63,238,182,101,203, 22,193, -231,159,127, 46,250,228,147, 79,220,191,254,250,235,207,186,117,235, 22, 30, 28, 28,124,187,111,223,190,226,106, 26, 3,138, 16, - 66,113,241, 28,243,118, 87,121, 94, 4, 64,195,105,211,166, 5, 83, 20,117,124,218,180,105,129, 0,236, 40,138, 58, 14,192, 30, -128,125,241,103,225, 27,239,246,132,144,142,165,126,183, 45, 75,163,228, 85,122,187,146,109,202,248,143, 55, 63,155, 21,193,106, - 11,224,202,155, 43,240, 8,230,141,156, 48, 95,252,114,235, 10,164,236, 88, 9, 58, 51, 9, 76,110, 42,180, 87,142,194,112,245, - 24, 62,109,222, 92, 34,161,168, 5,213,217,147, 10,133, 2, 2,129, 0, 81, 81, 81,120,242,228, 9,186,117,235, 38, 88,179,102, -141, 85,253,250,245,127,110,209,162, 69, 88, 96, 96, 96, 67,115, 12,139,167,167, 39,250,247,239, 47,252,234,171,175,234,136,197, -226, 80, 66, 8,223,195,195, 3,253,250,245, 19, 76,153, 50,165,150, 88, 44,190,203,178,172, 64, 42,149, 86, 20, 29,250,157,174, - 68, 34, 1, 0,190,151,151,215,189, 61,123,246,120,180,108,217,146,119,246,236, 89,228,231,231,243,188,189,189,195,118,239,222, - 93,183, 69,139, 22,188,107,215,174, 65,169, 84, 18,115,117,149, 74, 37, 36, 18,201,239, 12,150, 82,169,252,157,241, 50,195, 92, - 12,175, 91,183,238,221, 61,123,246,212,104,221,186, 53,115,233,210, 37, 20, 20, 20,192,221,221,253,222,158, 61,123,106,180,108, -217,146,185,113,227, 6, 10, 10, 10,204,214, 20, 10,133,240,240,240,192, 39,159,124,194,159, 52,105, 82, 13, 62,159,127, 87, 40, - 20,194,221,221, 29,159,124,242,137, 96,226,196,137, 53,132, 66,225,109, 51,155, 12, 25, 0, 48, 26,141,248,248,227,143,101, 18, -137, 4, 9, 9, 9, 96, 89, 22, 44, 91,228, 73, 83, 50,178, 30, 93,191, 27,254,116,194,168,143,219, 42,181, 90,237,153,203,247, -158,248,121,185,215,160, 40, 82,171,146,188, 55,108,209,162, 69, 88,253,250,245,127, 94,179,102,141, 85,183,110,221, 4, 79,158, - 60, 65, 84, 84, 20, 4, 2, 1,170, 98, 42,255,113, 88,251,217,130, 65,167,184,100,157, 72, 40,171,161,144,219,213, 3,178,175, -160,182,139, 8, 32,148,248,238, 83,149, 12, 52,233, 4,100,218, 86, 73,211,196,118,138, 73,210,137,244, 18,127,185,139,107, 77, -100,101,101,193,205,195, 7, 90,216, 11,111,132, 43,229, 32, 85,212, 44,166, 81,163, 70,173,221,220,220,156,106,213,170,133,204, -204, 76,120,122,122, 66, 46,151, 91, 7, 4, 4,116,170,246,149,248,178,187, 8,121,104, 9, 61,181, 28, 20, 61, 23,132,183, 24, -188,140, 0,114, 63,128,255,183, 51, 87, 59,247,186,218, 58,251, 0,225,195,224,104, 35,196,166,105,141,108,236, 21,162,234,154, -172,250,142,142,142, 23,111,223,190,109, 39, 22,139,113,255,254,125,248,249,249, 97,197,138, 21,246,214,214,214,127,103,147, 85, -218, 92,217, 0, 80, 3, 96, 1, 12,168,102, 52,132, 2,176,110,254,252,249,227,166, 79,159,142,155, 55,111,194,213,213, 21,233, -233,233,104,221,186,117, 92, 78, 78, 78,133,245,146,159,159, 95,141,168,168,168,164,175,191,254, 58, 96,251,246,237, 18,153, 76, -134,220,220, 92,252,242,203, 47,152, 54,109, 26, 40,138, 2, 33, 4,155, 55,111,150, 14, 29, 58, 52,248,197,139, 23, 73,238,238, -238,102,117,223, 40, 54, 85, 66, 66,136, 20,128, 12,128,148, 16, 34, 30, 59,118,172, 16,128,168,216, 92,138, 1,240,193,241, 38, -101,122, 17, 0,118, 75,150, 44, 89, 68, 8,233,190,100,201,146, 69,165,234,206,227, 21,212,183,165, 77, 19, 0,224, 77, 13, 66, - 72,247,210,239,165,183, 37,132,116, 39,132,116, 47,189,125, 69,255, 87,145,193,186, 92,156,177, 55,237,100, 67,167,218,245,144, -123,110, 63, 36, 12,245,218,139,142,121, 4, 55, 49, 15, 6, 66,234, 87,103, 47,202,229,242, 87, 47,154,166,145,146,146, 2,134, - 97, 48,107,214, 44,241,216,177, 99, 27, 8, 4,130,155,173, 91,183, 94, 92,153, 97, 1,128, 59,119,238,192,211,211,147,154, 62, -125,186, 69,219,182, 69,119,177, 15, 31, 62, 68,221,186,117,169,133, 11, 23, 42,122,244,232, 65, 73,165, 82,179,163, 67, 52, 77, - 67, 34,145,160, 93,187,118,212,150, 45, 91,228, 34,145, 8, 39, 78,156, 64,102,102, 38,222,127,255,125,222,150, 45, 91,228, 98, -177, 24, 33, 33, 33,200,203,203, 51, 91,151,162, 40,104,181,218, 50, 13, 86, 89,145,173,138,104,222,188,249, 38, 39, 39,167, 85, -219,183,111, 23, 73, 36, 18, 92,186,116, 9,121,121,121,232,223,191,191,113,231,206,157, 98, 11, 11, 11,220,184,113, 3,121,121, -121,213, 42,229,119,238,220, 65,221,186,117,169, 25, 51,102, 72,154, 55,111,110, 0,128, 7, 15, 30,192,203,203,139,154, 49, 99, -134,196,194,194, 98,101,203,150, 45, 55, 85,164,193,178, 44, 82, 82, 82, 16, 30, 30,142,152,152, 24,100,102,102, 34, 35, 35, 3, - 5, 5, 5, 48, 26,141, 0, 0,105, 65,254,137,117, 91,142,133,201, 36, 18,105,211, 6, 94, 53,111,135, 70,164,203, 36, 18,169, -151, 71, 77,111, 96, 78,153, 59,182,117,235,214,139, 5, 2,193,205,177, 99,199, 54,152, 53,107,150,152, 97, 24,164,164,164,128, -166,233,215,202,213,191,244, 22,143, 2, 95,231, 5, 66, 5,220,138, 40,180,105,221,121,128, 0, 25,167, 0, 98, 0, 40, 30,218, - 55,173,193, 59,114, 77,233, 8, 22, 13, 33,128, 15, 33,160,204,210,228,233, 61, 1, 42,240,236,125,163,109,171,206,163, 5,137, -137,137, 16, 8, 4, 16,137, 68,104,220,242, 35,222,238, 75, 6, 39, 0,141,192, 71, 61,115, 52, 75, 35, 18,137,190, 29, 58,116, -168, 44, 41, 41,233,149,102,215,174, 93,101, 82,169,116,118,181,205, 21, 45,109, 14, 35, 25,255, 56, 70,237,190,112,107,138, 79, -116,130,218, 7, 4, 19, 97, 48, 52,126, 91,147, 85,179,102,205,118, 94, 94, 94, 49,181,106,213,106,245,150,230,234,230,158,157, -123, 93,109,156,138,204, 21, 76, 42,128,145,192,201,193, 26,155,102,183,179,177,183,144, 84,213,100,213,119,116,116,188,112,235, -214, 45, 59,177, 88,140,123,247,238, 65, 40, 20, 66, 44, 22,163, 65,131, 6,216,176, 97,131,189,141,141,205,223,197,100, 89, 3, -232, 12,160, 47,128,143, 74,153, 43, 15, 0, 29, 0,116, 2,224, 4, 32, 4, 64,152,153,154,173, 24,134, 57,209,176, 97,195,100, - 30,143, 23,177,104,209,162,255, 77,153, 50, 5,171, 87,175, 70,187,118,237,162,167, 78,157,138,200,200, 72,163, 74,165,234, 9, -160,194,138,176,176,176,240,232,140, 25, 51, 44, 63,252,240,195,146,239,184,118,237, 26,182,109,219, 6,153, 76, 86,218, 44,161, - 71,143, 30, 24, 62,124,184,181, 78,167, 59, 88,145,166,131,131,195,123,151, 46, 93,242, 2, 32, 44, 54, 80, 37, 6, 75,118,254, -252,121, 43,177, 88,108, 19, 28, 28,108, 81,188, 92,250,225,135, 31,218,242,120,188, 86,224, 64,101, 94,164, 60,131,243,166, 1, - 42,235,183,178,204, 83,181,175,191, 21,252, 95, 69, 6,171, 93,113, 65,255, 29,250,236, 52,136, 96,130,148,161, 32,225, 81, 69, -239, 12, 5, 9,197,130,151,147, 6,170,154,193, 79,185, 92, 14,133, 66,241, 59,163,165, 86,171, 81, 88, 88,104,150,209, 40,233, -203, 99,109,109,253,170,210, 46,169, 88,109,108,108,160,213,106, 65, 81, 20,100, 50, 25,100, 50, 89,149, 34, 88, 98,113, 81, 68, -248,198,141, 27,184,126,253, 58,120, 60, 30,108,108,108, 0, 0,247,238,221,195,163, 71,143, 32, 20, 10, 97,107,107, 91, 37, 93, -189, 94, 95,102, 19,161, 78,167,171, 82, 19, 33, 77,211,208,104, 52,228,222,189,123, 8, 15, 15,135, 72, 36,130,189,189, 61,132, - 66, 33, 18, 18, 18,240,244,233, 83, 8,133, 66,216,219,219, 87,235,248, 88, 88, 88, 32, 55, 55, 23, 44,203,150, 68,243, 96, 97, - 97,129,194,194, 66,208, 52,109, 86, 58, 89,150, 69, 82, 82, 18, 50, 51, 51, 17, 31, 31,143,140,140,140, 87, 38,171,164,137,176, -186, 80, 20,133,194,194, 66,168,213,234,223, 25,171,146,114,245,175,228, 90,125, 75, 80,252,247, 51,114, 13,162,140, 66,161,165, - 99,221,142, 64,230, 41,128, 98, 0,190, 53,154, 5,212, 70, 92,170, 73, 22, 25,175, 19,195,128,206,184,232,109,109,150, 38,195, -239,148,158,103, 16,197,230,218, 91,248,250, 55, 65,122,122, 58, 68, 34, 17, 68, 34, 17, 2,155,189,135,152,100, 86, 26,241, 82, - 45, 5,193,251,102,105, 22,211,184,113,227, 58, 18,137,164,121, 64, 64, 0,149,150,150, 6,145, 72, 4,177, 88,140,230,205,155, -131,166,233, 6,141, 26, 53,242,169,210, 5,238, 69, 29, 33,248,210,102, 0, 25,255,244,165,202,229,200, 13,181,119,143,222, 31, -217,172,220,151,238,243,244,165,198, 3, 58,227, 36, 40,245, 77,170,107,178,220,221,221,219,202,229,242,227,223,126,251,173,135, - 72, 36, 58, 85,171, 86,173,214,213,186,190,137,152,159,190, 29, 63,192,213,186,196, 92, 25,149, 0, 35, 1, 24,105,145,201,114, -180,195,130,175, 58,218, 72, 5,252, 95,205,213,148, 72, 36,187,215,173, 91,103, 95, 98,174, 4, 2, 1,196, 98,241,171, 87, 64, - 64, 0,102,205,154,101,111, 99, 99,179,235, 47, 46,165, 54, 40,234, 87,245, 16,192, 65, 0, 23, 74,153, 43, 79, 0,191, 22, 71, -173, 66, 1,196,153,169,217,162, 75,151, 46,151,162,163,163,187,133,133,133, 57,167,166,166,250, 76,156, 56, 17,171, 86,173,194, -148, 41, 83,118, 17, 66,188,247,239,223,223,248,206,157, 59, 13,204,137,136,165,166,166, 14,156, 58,117,106,102,102,102, 38, 0, -192,223,223, 31,185,185,185,152, 52,105, 18,198,143, 31, 95, 82,118, 1, 0,233,233,233, 88,182,108, 89, 90,106,106,234,144,138, - 52, 77, 38, 83,194,161, 67,135,154,235,116,186,154,197,134, 82, 4, 64, 26, 23, 23,103,169, 84, 42, 45, 24,134, 81,200,100, 50, - 11,145, 72, 36, 27, 58,116,168, 32, 34, 34,194,215,104, 52, 38,113,158,234, 53,202,245, 34,101, 69,154,202, 91, 86,221,245,205, - 53, 89, 85, 53, 88, 33, 0,218,252,206,192, 80,120, 24,127, 55, 4, 54,126, 1,175, 71,176,120, 20,164, 10, 11,196, 36, 37, 64, - 0,234,113, 53, 18,248,187,202, 80, 46,151, 35, 37, 37, 5, 83,167, 78, 85,237,216,177,227,145, 78,167,107,126,245,234,213,105, -230, 68,176, 28, 28, 28, 16, 31, 31, 79,190,255,254,251,252, 83,167, 78, 25, 75,150, 37, 36, 36,144,153, 51,103, 22,236,221,187, -151, 84,165,137,176, 36,130, 21, 18, 18, 66,102,207,158,157,151,156,156, 76,108,108,108, 96,107,107,139,243,231,207, 27,167, 77, -155,150,247,226,197, 11, 98, 99, 99, 3, 27, 27,155, 42, 25, 44,163,209, 8,137, 68,242,154, 65,161, 40, 10, 6,131,225,119,145, -173,138,184,126,253,250,176,188,188,188,175, 39, 77,154,164,126,242,228, 9,177,183,183,135,189,189, 61,182,110,221,202,251,236, -179,207,212, 15, 31, 62,124,181,172, 58,216,217,217,225,217,179,103,100,209,162, 69,234, 11, 23, 46,240, 1,192,222,222, 30,145, -145,145,100,222,188,121,234,220,220,220,175,175, 95,191, 62,172,146, 11, 14, 98, 98, 98,144,159,159, 15,147,201, 4,173, 86,139, -140,140, 12, 36, 38, 38,190, 50, 88,106,153, 69,151, 47, 63,239,209, 72,169, 86,171,110, 63,138,138,111, 26,224,231,160, 84,171, - 85, 81, 47,227,159, 1,115,202,236,219,118,245,234,213,105, 58,157,174,249,142, 29, 59, 30, 77,157, 58, 85,149,146,146, 82,102, -121,250, 51,158, 7,245,231,135,176, 88, 39, 16,210,234,218,163, 66,171, 78, 31,244, 19, 82,249,119, 0, 67, 33,192,183, 6,248, - 86,224,137,109,209,245,189,198,204,150, 51,249, 78,160,216, 22, 16,139, 42,239,223,194, 18, 71,176,108,235,243,247, 52,214,173, -186,141, 21,102,103,103,131,166,233, 87, 6, 75, 42,147,225,189,238,131,233,205,103,180, 78, 96, 73, 75, 48,140,217,125,102, 4, - 2,193,228,207, 63,255, 92,144,147,147,243,154,166, 68, 34, 65,239,222,189, 69, 10,133, 98,166,217, 89,127,226, 43, 64,154,168, - 25, 88, 50, 62, 50, 86,237,114,232,186,218,123,226,172,205,146,250, 13,155, 98, 84, 47, 7,201,194,237,233,126, 97, 47, 84, 30, -160, 77, 19,160,210, 5,146, 13, 85, 51, 89,181,106,213,106, 45,147,201, 78, 28, 62,124, 88,218,190,125,123, 76,156, 56, 81, 38, - 18,137, 78,185,187,187,183,169,234, 97, 82, 22,152,190,156,183,114,123,218,195,125,157, 1, 99, 65,177,185,250,237,149,158,199, - 98,214,186, 75,121, 6, 19, 25, 96,174,166, 90,173,254,236,139, 47,190,200, 58,120,240,224,239,204,149, 88, 44,198,203,151, 47, -177,112,225,194,236,236,236,236, 33,127,113, 41,109, 12,224, 1, 0, 77,113, 52, 66,138,162,145,130,205, 1,156, 7, 96, 2,144, - 6, 32,197, 92, 65,134, 97,166,252,248,227,143, 60,181, 90,141,225,195,135, 35, 33, 33, 1,201,201,201,152, 49, 99,198, 75,150, -101, 63, 43,214, 12, 3,240,212, 28, 61,189, 94, 31,153,147,147,211,189, 75,151, 46,185, 57, 57, 57,104,216,176, 33,186,119,239, - 14, 39, 39, 39,184,184,184,160,103,207,158,240,242,242, 66, 86, 86, 22, 6, 12, 24,144,157,145,145,209, 25, 64,133,163,208,179, -178,178, 94,236,219,183,239,197,255,254,247,191,160,132,132, 4,127, 0,206, 6,131,193, 70,173, 86, 43,140, 70,163,220,194,194, -194,182, 73,147, 38,246,163, 70,141,178,186,123,247,174, 95, 98, 98, 98, 97, 21, 12,230,127,133, 50,189,200, 91,220,136,159,120, -155, 72, 85, 89, 17, 48,115, 41,169,225,169, 55,222,127, 43,132,192,172,109, 7,182,105,132,238, 94,176,244,105, 4,169, 88, 12, -137, 72, 8,137,149, 13, 52, 44,139,141, 47, 83, 85, 74, 66,102, 86, 35,241,175, 69, 28, 88,150,197,134, 13, 27, 52, 11, 22, 44, -200, 77, 77, 77, 29,117,245,234,213, 70,247,238,221,123,104,142, 17,202,207,207,199,254,253,251,213, 91,182,108,137, 86,171,213, - 1, 2,129,192,160,211,233,176,107,215, 46,205,170, 85,171, 98, 85, 42, 85, 16,159,207,215, 87,165,249,173,164, 15, 22,159,207, - 55,104, 52,154,128, 61,123,246,188, 56,113,226,132,218,194,194, 2,124, 62,223,160, 82,169, 26,108,223,190, 61,114,207,158, 61, -106, 11, 11,139, 42, 25, 55,150,101,203,140, 96,153, 76, 38,136, 68,162, 42,245,193,186,119,239,222, 47,122,189,190,233,174, 93, -187, 18, 55,111,222,172,177,176,176, 0, 0, 24, 12,134,160,109,219,182, 37,254,244,211, 79,218,170,246, 69,210,233,116, 48,153, - 76,216,190,125,187,118,247,238,221,137, 70,163, 49,168,100,217,230,205,155, 53,219,183,111, 79,212,235,245, 77,239,221,187,247, - 75,101, 90, 38,147,201,148,155,155, 11, 30,143,135,232,232,104,173, 72, 36, 2,195, 48,136,138,138,122,101,176, 28,236,108,252, - 90, 6,249,251,172,248,105,127,136, 76, 36, 18,117,110, 23,232, 27, 17, 21,151, 72, 8, 21, 91, 73,222, 31, 94,189,122,181, 81, -106,106,234,168, 5, 11, 22,228,110,216,176, 65,195,178,236,107,229,234, 95,105,176,244,144,130,130, 36, 42, 65,171, 16,243, 13, - 20, 82,127, 5, 4,214,197, 6,171,232,229,226, 90, 3,119,159,170, 20,160, 32,132,206,224, 80,169,166,129,200, 64, 65, 26, 30, - 7, 5, 79, 32,161, 82, 83, 83, 95, 69,154, 74, 12,145, 71, 93, 95,132, 70, 21,202, 65, 17, 17,138,134,214,155,125,161,146,203, -229,188,148,148,148, 87, 90,175, 52, 61, 60, 24,131,193,208,217,236,188,103,152,156,193,178, 95, 62,139,215,184, 28,190,174,246, -154, 48,107,179, 68,194,228, 0,177,171, 81,223,203, 9, 19,135, 52, 18,206,216,152, 81,255,110,132,170, 14, 40, 50, 10,245, 11, -205,190,187,168, 85,171, 86, 43,169, 84,122,234,240,225,195, 82,153, 76,134,232,232,104, 52,108,216, 16,243,231,207,151, 74,165, -210,147, 53,107,214,108, 87,149,195,116,251, 25,226, 10, 11, 76,205, 39,111, 72, 72,125,248,210, 84,100,172,232, 34,115,149,145, - 71,240,197,183,199,114,115,242, 53, 31,221, 10, 55, 94,172,130,236,131,188,188,188,247,191,253,246,219,172,204,204,204,215,204, - 85, 92, 92, 92,137, 17,104, 7,224,241, 95, 92, 74,101, 40,234,188, 94, 15, 64, 93, 0,141, 0, 24, 1, 20, 20, 27,161, 42,227, -231,231, 23,224,238,238,142,245,235,215, 99,227,198,141, 57, 43, 86,172, 0, 33, 4, 94, 94, 94, 22,213,213, 76, 79, 79,191, 19, - 25, 25,217,185, 81,163, 70, 79,214,174, 93,155,232,236,236,204, 14, 31, 62, 28,195,134, 13,131,189,189,189,105,245,234,213,241, -173, 91,183, 14,127,241,226, 69, 71,149, 74,245,200,156,226,158,153,153,121, 99,211,166, 77,119,222,123,239, 61,197,231,159,127, -238,184,113,227, 70,167,167, 79,159,214, 84,169, 84,174,233,233,233,178, 43, 87,174,136,182,109,219,230, 20, 17, 17,241, 82,163, -209,220, 65,217, 29,186,255,171,148,235, 69, 0,100, 20, 27, 29,221, 27,239, 25,149,252,102,238,182,101,126, 54, 99,189,114,169, -116,196,205,254, 24,220, 24, 84, 39,119,233,252,205, 27,190, 25,220,192, 71, 82,203,195, 23,166,194, 92, 60, 74, 77,197,182,148, - 60,149,129,144,117, 7, 98,112,169,186, 6,139, 97, 24,156, 57,115,198,180,107,215, 46, 61, 33,228,231,252,252,252,153, 79,158, - 60, 81,154,171,195,178, 44, 51,116,232,208,194,156,156,156, 95, 83, 82, 82, 70, 69, 71, 71,235, 90,181,106,197, 12, 28, 56,176, - 48, 59, 59,251, 40, 69, 81,195,239,223,191,175,109,217,178,101,149, 42, 91,138,162, 32, 16, 8, 64, 81, 20,238,221,187,247,210, -215,215,183,254,173, 91,183,126,120,246,236,217, 39,132, 16, 38, 52, 52, 52, 33, 32, 32,160,225,141, 27, 55,214, 62,125,250,116, - 0,203,178,140,185,186, 37,209,177,210, 70,138,166,233, 87,166,142,170, 98,155,107,104,104,232, 99, 95, 95, 95,223, 59,119,238, -108, 29, 49, 98, 68,103, 0,210,123,247,238, 61,241,247,247,247,185,117,235,214,214,207, 62,251,172, 75,241, 29,164,121,245,183, - 94,143,222,189,123,171,242,242,242, 78, 23, 20, 20, 12, 9, 15, 15, 87, 5, 4, 4,148, 44, 59,147,155,155, 59,164, 10,199,104, -222,154, 53,107,102, 21, 31,171,173, 43, 87,174,252, 98,210,164, 73,246, 73, 73, 73,175, 12, 86,122,102,246,197, 22, 31,140, 53, -101,229,230,233, 54,175,156,220, 87, 34, 22, 9,103, 46,217,124,217,192,188, 26,198, 93,153,201,220,233,235,235,123,228,206,157, - 59, 11,238,222,189, 59, 98,224,192,129,130,206,157, 59, 51, 66,161,240,223,105,176,132,166,124, 16, 58,185,111, 7,107,209,234, -117,155, 4,159,247,172, 35,246,247,113, 47, 50, 87, 2,107,220,141,200,197,172,239,247,179,223,141,182,143, 1,139, 4,152, 16, - 89,169,166,156,151, 15,141, 33,253,139,206, 2,209,226,159,199,215,110,217,253, 27,145,175,127,240, 43, 35,244,244,241, 61,172, - 92, 56,150,253,110,148, 77, 12, 88, 42, 25, 70,243,162, 4, 0, 96, 52, 26,251, 46, 89,178,228,244,231,159,127, 46,171, 95,191, -254, 43,205,151, 47, 95,226,187,239,190, 83,107,181,218,143,204,187,102,128,194, 85, 94, 99,147,201,228,176,243,108,150,231,215, -227, 70, 73, 37,116, 54, 16,179,172,200,188,240, 45,209,216,223, 14,179,198, 57,241, 39, 46, 62,230,119,237,135,218,133, 48, 8, -124, 1, 36,155,163,207,227,241, 78, 44, 90,180, 72, 42,145, 72, 16, 21, 21, 5,137, 68, 2,177, 88,140, 38, 77,154, 96,213,170, - 85,210,255,253,239,127,167,218,182,109, 43, 15, 9, 9, 49, 86,197,100, 53,245, 54, 53,159,252,227,139,155, 75,191,178,114,106, - 88,207, 14,153, 5,192, 23,179,143,231,100,231,171, 63,174,162,185,122,101,178,114,115,115,223, 31, 63,126,252,217, 45, 91,182, -216,250,250,250, 34, 33, 33, 1,253,251,247,207,202,200,200,104,255, 55, 48, 87, 0,160, 4,224, 10,224, 25,138,250, 34, 61, 71, - 81,191,164,106,143,242,140,136,136, 8,141,139,139,115, 30, 54,108, 24,242,243,243,173,251,245,235,135,232,232,104, 60,123,246, -236,193,219, 36, 84,163,209,220, 77, 76, 76,108,240,245,215, 95, 15,158, 60,121,114, 75,133, 66,225, 65, 8, 33,249,249,249, 49, - 38,147,233, 26,128, 93, 64,149,158,195, 73, 0, 60,127,241,226, 69,204,139, 23, 47, 28,183,110,221,106, 85,188, 15,128,162,142, -253,121,197,209, 59, 19, 56,170, 82, 39,223,253, 43,182,253, 83,232,235,129,150,159,215,161, 66, 6,214, 70,193,128,218, 40,252, -188, 46,101,206, 68,163,101, 62,109, 59, 32, 32,128, 24,141, 70,114,246,236, 89,210,181,107, 87,101,171, 86,173,170, 50,209,232, -107,154,237,218,181,251,221, 68,163,237,218,181, 59, 29, 28, 28,252,218, 68,163,109,219,182,125,220,182,109,219,188, 54,109,218, - 68,155,147,206, 54,109,218, 60,109,217,178,165,178, 77,155, 54,175, 85, 36, 65, 65, 65,189, 58,116,232,240, 90,200, 49, 56, 56, -184,231,155,203,202,203,123,199,142, 29, 19,158, 61,123, 70,226,227,227, 73,183,110,221, 94, 93,248,223,123,239,189,132,176,176, - 48,242,236,217, 51,210,165, 75,151,228,170,236,207,210, 4, 6, 6, 14,111,221,186,245,141, 55,210,252,197,155,203, 42,210,108, -221,186,245,141,160,160,160, 47,222, 92, 86,133,137, 70,203, 77,167,179,179,179,119,227,198,141,211, 87,174, 92, 73,106,215,174, -157, 94,250,183,250,237,134,126,155,155, 95,152, 63,105,222,250,125,101, 76, 52,106,214,147,219,155, 52,105,226,213,170, 85,171, -107, 93,187,118, 85,158, 61,123,150, 24,141, 70, 18, 16, 16, 64,170,187, 63,171,193, 31,174, 73,158,248, 10,200,117,223,150,228, -138,239,137,167,219,221,159, 12,121, 95,166,189,191,171, 11, 33, 79,191, 33,183,246, 15, 35,205,125,133,166,235, 63,184, 61, 35, - 87,124, 78,145,171,222,109,200,169, 50, 39,244,252,189,230,149,186,173,201, 21,159, 83, 17, 91,221,159,244,110, 99,175,219,181, -125, 3,121,254,252, 57, 57,122,104, 23,105,230, 43, 45,214,244, 61, 75,174,248,182, 55, 71,243,141,115,190,101,243,230,205, 11, -247,237,219, 71,162,162,162,200,185,115,231, 72,139, 22, 45, 84,141, 27, 55,110,111,110,222, 9, 1, 69, 66,252,122, 27, 47,213, -187, 54,173,191, 60,247,139,206, 98,109,255,246, 66, 93,175,230, 2,253,251, 1, 2, 99, 75, 95,158,169, 97,109,154,245,117, 3, -121,191,137, 68, 75,174,212,187, 74,174,249,118, 54, 55,157, 94, 94, 94,241,181,106,213, 34,229,189,188,189,189, 51, 74, 6,208, - 84,245,184, 55,245,134,123,199, 32, 81,202,133,159,219,147, 30,109, 20, 89,205,252,121, 29,222, 65, 89,106,108,103,103,151,185, -101,203, 22,226,232,232,152, 1,160,254,223,161,124, 22, 99, 3,160, 23,126, 27,198, 46, 7,208, 30, 64,237,183,208,108,241,254, -251,239, 27, 66, 67, 67, 73,116,116, 52, 57,125,250, 52,105,217,178,165, 17, 69,125,118,240, 55,202, 59,167,201, 1, 82,213,145, - 64,213, 60, 0,225,101, 25,172,206,157, 59,171, 67, 66, 66, 10,117, 58,221,200,251,247,239, 31,125, 91,205, 63, 34,157,127,132, -102,251,246,237,111,208, 52, 93,187,120, 8,112,242,133, 11, 23, 2,138, 77,225, 13,134, 97,106, 23, 31,152,228,139, 23, 47, 6, -252,219,242, 94,218,100,209, 52,125, 6,128, 54, 41, 41,233,213,104, 39,123,191,158,205,109,172, 45,219,231,230,230, 61, 72,123, -124,244,212,219,164,179, 73,147, 38, 61,133, 66,225,134,182,109,219,202,207,156, 57, 35, 9, 13, 13,165,254, 77,251,147,156,170, - 35,132, 66, 24, 8, 19,166,134, 71,171, 60,102,110,202,172,211,253,253, 22,252,173,251,175,176, 75,199, 56,188,104,225, 39,123, - 9,138,253, 14, 38,237, 29,170, 93,156,214,108, 77, 41, 21, 12,240,167,134,189, 80,185, 79,250, 49,199,179, 99,143, 47,152, 99, - 7, 54,176,223,143,177,125,209,194, 79, 30, 15,224, 59,176,170,155,230,106,190,105,178, 68, 34,209,169, 1, 3, 6,200,119,239, -222,173,214,104, 52,221, 31, 60,120,112,169, 42,121, 39, 55,234,213,132,145, 90, 8, 16,183,202,119, 27,253, 28, 70,118, 62,213, - 33, 50,254,239,112,220,155,122,195, 93,166, 16, 29, 87,105,141,227,205,140, 92,153,147,206,198,214,214,214, 59,114,114,114,250, -153, 25,185,250, 51,243,110,143,162,121,174,120, 40,106,242,121,140, 74,250, 48,153,161,217,138, 97,152, 41,117,234,212,105, 24, - 29, 29, 29,110, 50,153,190, 71,209,168,179,127,125,221,241, 31,209,228, 12,214,219, 30,128, 86,173, 90,221, 55,153, 76,167, 5, - 2,193,194,144,144, 16, 45, 87,248, 56,205, 63, 66,179,109,219,182, 34,189, 94, 63,131, 97,152, 46,215,174, 93,107,242,111,203, -123,105,147,117,255,153,178,246,226,157,217,238, 19,250, 89,199,155, 97,174, 42,214, 44, 54, 89,119, 34, 85,181,190,219, 85,224, - 62,177,159, 60,222, 12,115,101, 86,222, 3, 2, 2, 90,138,197,226,109,106,181,122,184, 25,230,234,247, 6,235,137,175, 0, 57, - 6, 87, 24, 25,127,208, 40,127,154,126,150,168,192,103,194,145,130, 52,234,227, 39,122,238, 60,226, 52, 57, 77,206, 96,253,217, - 6,235, 47,153,245,184,156,202,142,131,227,157, 82,108,222,191, 45,126,253,235,160,186, 70,235,200,169, 58,247,160, 16, 46,105, -226, 45, 25,251,235, 66,137, 10, 44,149, 8,138, 93, 85,137,185,170, 76,243, 14,164,134, 37,193,222,146,241,135, 22, 74, 84, 0, - 82, 65,176,178, 18,115,101, 22,161,161,161,215, 97,126, 51,209,239,211,231,251, 68, 15,224, 37, 33,136,197,220, 10,110, 16,103, -131, 80, 20,215,121,152,131,131,227,175,131,199,237, 2, 14,142,127,184,201,122,226,123, 23, 89,204, 36,152, 80, 27, 34, 99, 28, -114,141,169, 84,215, 56,221, 91,106,222, 70, 22,245, 21, 88,120, 67,104,124,129, 92,221, 91,105,190,243,124, 23,153,167,242, 13, -212, 28,174,108,112,112,112,112, 6,139,131,131,227,109,204, 70, 81, 84, 39,177,248,245,183,213,228,224,224,224,248, 79, 93,155, - 81,254, 72,128,170,180,173, 86,103, 52, 65, 56,167,201,105,114,154,156, 38,167,201,105,114,154,255, 57,205,202,180,255,241,125, -187,254,140, 41,130,184, 33,172,156, 38,167,201,105,114,154,156, 38,167,201,105,254,167, 32,132,128,230,118, 3, 7, 7, 7, 7, - 7, 7, 7,199,187,229, 47,237,131, 37,177,245,114, 6,143,110, 72,177,196, 7, 0, 8, 77, 61,133,145,125,168,206,138, 74,121, -107,113, 7,127,169,156,207,236, 42, 52,152, 6, 34, 61, 92,245,142,146,220, 10,128, 59,138,158, 29,117,141, 43, 62, 28, 28, 28, - 28, 28, 28, 28, 85, 50, 88, 94,205,123, 95,149, 73,100,158, 0,192, 18, 2, 19, 11,228,231,164,223,140,127,116,254, 67, 0,112, -246,235,112, 72, 40,179,107,206,178, 4, 44, 33, 48,178, 4, 70,173,250,121,230,147,147,102, 61,121, 94,102,239,253, 97,135,142, -239,245,233,222,253,131,122, 13,252, 27,212, 5,128, 71,225,143, 94, 28, 63,126, 34,242,226,121,234, 87,101,198,179, 67,111,147, - 49, 57,159,255,109, 80,112,211,206,119,239,222,158, 81, 8, 76,127, 71,251, 75, 64,174,117,219, 78,181, 58,249, 30, 87,116, 56, - 56, 56, 56, 56, 56, 56,170,108,176,100, 18,153,231,197, 35,155, 28, 14, 93, 77, 0, 0,116,108,226,132,185,203,183,244,222,248, -232,124, 36, 0, 52,111,211,213,123,230,215, 67,112,227,113, 6, 8, 33,104,236,105,131,222,131,254,103,214,159,138, 29,125,131, -250,246,253,104,224,164, 73, 19,123, 62,127,254, 60,118,247,238,221, 87, 1,160,117,155, 54,158,139, 22, 45,250,100,153,181,141, -104,239,129,131, 73,154,180, 39,213,122,126,144,204,177,142,157, 79, 61,207, 47,118,253,242, 61,175, 67,183,254,195,226, 13,249, - 43,149,105,209,153,213,209, 18,214,240,171,109,201, 23,204,165,104,154,167, 45,204,118, 0, 0,107,183,198,199, 69, 10, 7,147, - 88, 44,121,164, 84,171,183,165, 63, 57,189, 17,220, 3, 59, 57, 56, 56, 56, 56, 56, 56, 42, 51, 88, 0, 32, 23,243, 16,249,178, -168,181,206, 74, 10,140,248,236, 35,164,165,165,122,235,141, 44, 6,247,251, 16,161,145, 41,120,246, 50, 3,132, 0,222, 53,204, -126,150, 48, 24,176,129, 67,135, 13,109,123,230,236,217, 59,223,206,252,118, 59, 69,225, 38, 0,108,248,249,151,230,179,102,207, - 26, 62,248,179,193,157, 14, 28, 56,240, 24, 64,181, 12, 22, 45,176, 90,249,221,194,185,242,164, 76,141,102,220,196,111,152, 73, - 95,127,181, 12,192,103,213, 49, 87,190,110, 53, 22, 94, 61,123, 64, 42,149, 74,177,113,227, 70, 17,112, 4,115, 38, 13, 21,127, -208,189, 59, 76, 96, 90,124,255,195,238,134,103,133,194, 97, 42,149,234,195,172,168,243, 41, 92,145,226,224,224,224,224,224,224, -168,208, 96,153, 88,130,167, 49,169, 69,166,133,225,225,131,150,150, 88,182, 96, 10,212, 90, 19,194, 98,242,112,248,122, 2,180, -202, 92, 16, 2,180,244,119, 40, 43,134,243,218, 80,203,101,227, 36, 1,140,144,223,239,230, 51, 89, 45, 27,107,107,235,168, 59, -219,149,179, 6,165,249,242,140,250,251, 11,142, 5,197,200, 20,194, 22,251, 15, 28,240,235,209,189,187,208,194,194,114,178,192, -170, 83, 13, 86,163,159,152, 23, 23,146, 87,158,230,155,200, 28,253,218,246,248,160,219, 7, 78, 78,142,166, 1,139,110, 62, 93, - 55,182, 73, 77, 47,111,159,118,207, 12,170,182,202,180,103, 33,229,108, 22, 94,150,185,170,235,236,184, 48,228,244, 1,169, 70, -163, 65, 76, 76, 12,178,178,178,138,126,164, 40,208, 52, 3, 87,103,103,172, 93, 60, 81,186,251, 80,131, 38,223, 46, 94,127, 4, - 64, 48,126,219, 11,127,196, 48, 83, 78,147,211,228, 52, 57, 77, 78,147,211,252,183,106,254,171, 40, 25, 69, 88,102,243,214,139, -132, 44, 68,198,164, 32,192,199, 21,117,107, 57,225, 78, 84, 14,118, 93, 76,192,230,179,177,184,248, 48, 3, 44, 95,129,212, 2, - 10,207,227,210,240, 44, 54,179,210, 54, 50, 70,200,239, 55,126,105,222, 36,191,218,249,205, 46,239, 27, 11, 23,121,148,223,148, -229,185, 99, 25, 33,191,159,131,147,213,238, 73, 95,141, 26,164,144, 74,132, 58,173, 14, 30,181,220,196,163,135, 15,253, 92, 32, -151,237, 54, 55, 51,118,118,190, 50,161, 68,182,125,225,172,137,226, 21,135,162,226,149, 58,162, 60,112, 35, 57,122,210,212, 89, -249, 12, 95,242,179,157,157,175,204, 28, 29, 97, 13,191,218,238,182,182, 11,175,157, 57, 32,213,235,181, 72, 78, 78,134, 78,167, -131,209,104,124,181, 14, 1, 80,160, 54, 34, 38, 69,141,182,109, 90, 50, 1,141,235,251,216,251,116, 29,201, 21, 41, 14, 14, 14, - 14, 14,142,106,241,175,234,106, 83,238, 52, 13, 74,181,242,249,167, 35, 39,165,123, 42, 82,116, 31,182,247, 5, 8,144,145, 18, -139,136, 59,103, 16,117,255, 44, 10, 50,226, 65, 8, 80,171, 86, 77, 8,212, 49,186, 13, 63,253,152,206, 26, 53,207,203,211,235, -217,201,185,198,243, 36, 25,189,116, 82,205,155, 81,207, 82,236,198, 76,218,130,168,103, 41,118, 75, 39,213,188,249, 60, 73, 70, - 75, 5,166, 22,159,245,239, 69,245,234,222, 5, 83,166, 76, 66,175,238, 93, 48,105,212, 39,148, 88,200,111,102,110,102, 52, 66, -241,146,169,223,206, 83,164,230,234,117,183,159,229,107,229, 82,169,232,250, 83,165, 74, 75, 36,250,158,253, 70,100,104, 5,188, -121,230,152, 43,103, 11,139,133, 55,206, 31,148, 18, 66,144,152,152, 8,189, 94, 15,131,193, 0,131,193,240,106,189,220, 66, 3, -226, 51,212,136, 75, 87, 33, 60, 54, 31, 93,187,116,145,242,248,194, 65,220,249,193,193,193,193,193,193,193, 81,174,193,138,186, -121,184,117,232,133, 29,142,153,105,105,121, 50, 17, 15, 60,154, 70,122, 98, 52,182, 45,255, 10, 7,214, 77, 68,110,202,115, 16, - 2, 72, 4, 12,180,133, 89,121,169, 97, 7, 28,179, 42, 24, 65, 72,193,208,233,135, 29, 47, 61, 98, 83,136,229,174,211,133,124, - 0,216,117,186,144, 31,155, 66, 44,127,216,241,210, 67, 72, 50,192,154, 76,232,222,235, 35,108,223,186, 17,205, 59,244,194,129, - 43,241, 80,169,245,102, 61,255, 76,228,224, 85,203,193,201,233,163,241,131,223, 83, 4,123, 91,203,189,220,172, 24,134, 47, 48, - 10,249, 34,246,216,189,188,164,206,221, 63,164,165, 50,139, 46, 34, 7,175, 90, 21,233, 88,242, 5,115,175,159, 61, 40,101, 24, - 6,241,241,241,208,235,245,208,233,116,208,106,181,175, 34, 88,249, 42, 3,146,178,212, 72,200, 80, 33, 62, 67,133, 39,241,249, - 16,202,172, 97, 48, 24,184,137,215, 56, 56, 56, 56, 56, 56, 56,204,155,104, 52, 57, 61, 27, 54, 10, 6,246, 46, 30, 24,248,213, - 50, 0,128,137, 53,130,160,104,122, 6,115, 98,122, 4,252,115, 95, 14,246,136,169,229, 76,229, 13,234, 42, 85, 3,192,160,174, - 82,117, 45,103, 42,239,203,193, 30, 49, 42,147,181,222,100, 50,225,218,227,116, 44,221,251, 4,223,110,121,136, 51,247,204,239, - 51,206,227, 75,198,127,183,120,145,148,199, 80,212,227,184,130,194,148,108, 99,161, 64,192,215,243,133, 60, 67,161,142, 82,199, -102,152,178,186,124, 60,230, 37,195,240,199, 84,154, 86,194,130, 16, 2,173, 86, 11,157, 78,247,234, 85, 18,193,202, 46,212, 35, - 57, 75,131,248, 12, 53, 18,138, 95,105, 57,234, 63,101,106,124, 14, 14, 14, 14, 14, 14,142,127,150,193, 42,243,233,244, 44,128, -168,216, 12,136,120, 44,106,212,172,251,219, 26, 4, 32, 4, 48, 24, 89,179,254,232,232,185,148,196,218,174, 74, 50,121, 89,124, -115,127, 31,219,135,163, 7,184, 61,245,247,177,125, 56,121, 89,124,243,218,174, 74, 98, 96,133, 38, 66, 8, 8, 75, 64, 8, 1, - 33, 0,203,154,111, 88, 40,138,105,214,216,199,157, 55,119,247,243,184, 49, 63, 62,123, 74,241,120, 6,161, 80,104,116,180,148, - 80, 53,236, 36,188, 2, 45, 52,245,252, 3, 12, 20, 16, 80,145, 78,158, 65, 63,187,101,231,143, 85,122,189, 17,110,110,110,208, -233,116,175,154, 8, 75, 34, 88,185,133,122, 36,101,107,144,144,161, 70,124,134, 26,106,141, 9,143,158,198,130,162, 25,174,211, - 31, 7, 7, 7, 7, 7, 71,245, 41,211,139,252,147, 13, 22, 85,234,245, 59,220,221, 28,113, 59, 60, 14, 53, 29, 69,176,176, 84, -224,233,139, 68,208, 12, 15, 12, 77,193,104, 50,127, 63, 16,157, 97,239,138,201,150,203,226, 83, 76,183,126,220, 17,253, 60, 62, -197,116,107,197,100,203,101, 68,103,216, 11, 20, 25, 54,150, 16,176,165,222,205,214, 38,172,131,157,165,136,119,247, 69, 97, 54, -197,240,180, 2, 62, 79,235,108, 43,162,156,237, 36, 60, 55, 91,137, 80, 38,230,211,206,142,142, 44, 8,113,172, 72, 71,151, 24, - 17,147,154,159, 63,163,245,251, 31,169,248,124, 62,106,215,174,253, 42,130, 85, 98,176,138, 34, 88,106,196,103,168,144,154,173, -129, 68, 68, 35,236,230, 5,149,201,100,216,198,157, 27, 28, 28, 28, 28, 28, 28,213,162, 66, 47,242, 79,163,242, 71,229, 16, 2, -153, 84, 2,150, 22,227,218,189, 23,240,241,109,136, 45, 71,239,160,174,127, 83,164, 20, 24, 81,149,199, 25, 78, 90,163, 14, 5, - 16,218,179,147,180,198,135, 93, 93, 59, 17,240,207,253,184, 39, 63, 17, 0,234, 53, 67,177,177, 42,138, 92,177,164,104,154,136, - 42, 28,149,228,248,116,165,220,195, 73,134, 39, 9, 58,173, 66, 42, 54, 90, 73, 5, 60,123, 75, 33, 99, 33,225,241,120, 2,154, -206,205,205, 40, 0,168,228,202,180,116,137, 17, 49,241,240,155,209,166,107,255,133, 87, 79,239,147,214,169, 83, 7, 97, 97, 97, -175,154, 8, 85, 26, 35,168, 2, 61,248, 18, 2, 47, 87, 57,158,134, 94, 53,101,165, 39, 69,228, 60, 59,189,145, 59, 63, 56, 56, - 56, 56, 56, 56, 56,204,114, 71, 44, 75, 96,111,103, 13,145,220, 18, 49, 25, 58, 20,194, 30,121,106, 10,172, 9, 48, 25, 43, 52, - 65,101,118,250, 62,122, 46, 37,241,200,185,204, 77, 71,207,165, 36,190,238,229,126,107, 30, 36,132,148,215, 68,232, 95,182, 15, - 52,157, 58,126,238, 90,118,239,102, 14, 86, 52,159,175, 22,138, 24,189, 68,204, 55, 72, 69, 60, 56, 88, 10,132, 53,172, 5,162, -203, 39,246,208, 20, 75, 46,154,163,169, 75,140,136,121,153,158, 62,163, 67,247, 1, 42, 71, 39, 39, 12, 30, 60, 24, 53,107,214, - 4, 0,216,200,104,184, 91,211,224,105, 83, 17,114,116,147,242,233,253, 75,247, 97,210,126,136,215,195,154,220, 83,214, 57, 77, - 78,147,211,228, 52, 57, 77, 78,243, 63,138, 89, 15,123,174,227, 44,131,167,171, 12, 26,157, 35,212, 58, 19,148, 90, 35, 10, 84, - 6,228,169, 12,136, 77, 85,225,217,229,183, 79, 8, 41, 54, 88, 32, 20, 88, 66, 0,170,168,153,144,152, 25, 40, 84,242,243,151, -125,183,104,110,255,125,251, 15,145,113,221,156,107,220,126,174, 78, 16, 49,124,157, 84, 68,243, 44, 36,180,233,101,204,203,228, -179,199,247,212, 87,137, 85, 67,204, 77,147, 46, 49, 34, 38, 10,152, 81, 47,160,195, 92, 16,240,116,234, 60,217,212,150,126, 56, -115,250,132, 90,120,237,190,129,226, 9,195, 89,147,126, 71,113,228,138,235,225,206,193,193,193,193,193,193, 97,158,193, 82,169, - 85,207, 59,245,249,162,248,129,207, 4, 38, 83, 81,100,201, 84,210,148,199, 18,152,244,234,231,111,155, 16, 19,203,222, 89,191, -101,111,183, 70,141,155, 50,126,238, 10,228,231,102,226,222,237,155, 70,194,178, 55,205, 18,136,139,211, 26, 29,196,159,124,252, - 81,239, 61,195, 70,141, 43,108,221,182,189,212,214,214,194,152,153,158,149,191,109,227,190,156, 67,251,118,214,167, 88,246, 83, -196,197,105,171,146, 46, 93, 98, 68,140, 14, 40,153,223,170, 3,224,215, 86,153,252,176,135, 18,184,200, 21, 31, 14, 14, 14, 14, - 14, 14,142,106, 25,172,231,183, 14,183,254, 51, 18,146,157,157, 54,120,199,158, 95, 23,236,220,119,180,165, 86,175,119,101,193, - 36,152, 12,134, 16, 81, 65,214, 44,115, 53,148,233,145, 17,112,119, 15,252,101,221,178,175,127,254, 97,197,123, 96, 77,117, 65, - 81, 47, 41,150, 92, 44, 20,171,134, 33,185,106,230,170, 12, 50,169, 86, 39,223, 7,144,201, 21, 29, 14, 14, 14, 14, 14, 14,142, -106, 27,172, 63,139,156,232, 59, 5, 57,192,184,183, 22,138,139,211, 22, 2,139, 81,244,122,215,132,131,123,254, 18, 7, 7, 7, - 7, 7, 7, 71, 37,208,220, 46,224,224,224,224,224,224,224,224,120,183, 80, 40,127, 36, 64, 85, 34, 53,213, 25, 77, 16,206,105, -114,154,156, 38,167,201,105,114,154,156,230,127, 78,179, 50,237,127,124, 75,209,159,241,100, 23,110, 8, 43,167,201,105,114,154, -156, 38,167,201,105,114,154,255, 41, 8, 33, 92, 19, 33, 7, 7, 7, 7,199,127, 15, 91,175, 30,114, 91,175, 30,114,115,215,183, -243,237,235,104,231,219,215,145,219,115, 28,230,194,227,118,193, 59, 65,132,162,199, 54,234,255,170, 4, 88, 89,121, 88, 24, 21, -118,135,104, 86,251, 93,126,226,163,115,239, 58,127,126,126,126,141, 1, 32, 34, 34,226, 1,128,183, 29,141, 9,169,131,247, 0, -107, 11,171,145,122, 86,103, 82, 41, 85,235,149,105, 81, 7,222,101,130,237,236,124,101, 58,145,100, 41, 40,210, 21, 4, 52,161, -169, 11, 76,190, 97, 66, 94,222,195,188,138,182,115,235,185,200,103, 88,223, 15,102,110, 58,112, 98, 65,194,209,233, 79,223,252, -221,186,203, 26,197,184,193,239, 77, 94,183,247,248,119, 89,199,166, 20,114, 69,191,234,184,181, 28, 96,101,228, 57, 49, 41, 33, -203,179,170,178,157,171,119,179,199,124, 62,223, 94,175,215,167, 39, 71,221, 54,235,238,185, 70,189,230,161, 12, 67,187,152,140, -108, 98,226,179,155,129,220,222,175, 28,137,115,189,198,148,201, 52,133,176, 38, 62, 11,102,165, 54,243,249,181,183,209,115,118, -118,150, 88, 90, 90,182,177,176,176,112,147, 74,165,226,156,156, 28,117, 78, 78, 78,124, 92, 92,220, 69, 0,198,191, 34,143,118, -126,189,166, 49, 52,102, 23,127,158,155, 25,113,100,113,197,235,247, 92, 64, 81,134,105,197,159, 23,103, 70, 28,157,249,119, 56, - 86, 14,254, 31, 54, 5, 97,191,166,105,166,133,137, 24, 23,101,132, 31,253,177, 42,219, 55,107,214,172,183,193, 96, 16,149,124, -231,243,249,218, 91,183,110, 29,230,206,130,191,200, 96,185,250,246,181, 54,240,200, 28, 30, 67,127,196, 18,162, 72, 13, 59, 32, -251, 59,103,176,102,240,224,123, 52, 77,215, 40,189,140,101,217,196,248, 59, 59,222,213,197,182,198,242,241, 77,166,164,101,169, -243,191,223,249,116,126,121,230,195,161, 81,255, 27, 20, 77,213,166, 40, 10, 52, 5, 48, 52, 5, 0,201, 9,119,118,150,245,240, -105,103, 11, 25,207, 59, 95,105, 12, 7, 80,105, 37, 36,182,241,116,225, 89, 59,134,180,251,112,172,199,189, 51, 91,124, 77,122, -253,123,202,244,200,136,119,144, 55,251,186,117,235, 6, 49, 12, 99, 59,118,236, 88, 1, 0,172, 92,185,210,211,100, 50,101,189, -120,241,226, 46,128,140,106,153, 43,251,122,131, 87,127, 63,119,123,215,174, 93,145,156,161,196,210,149, 63,182, 59,125,124,223, -199,239,204,100, 57, 7, 72,140, 66, 38,252,127, 95,207,170,209,173,125, 16, 47,183,208,128,147, 23,111, 13, 62,176,121,105, 7, - 75, 52,108, 80,145,201, 98, 85,185, 51, 29, 21,164, 11,171,202, 5,128, 1,191, 43,255,114, 67, 71, 27, 41,186, 58,139,120, 97, - 89,192,175,149, 38, 37,240,211, 51,124,129,192,157,162,232,162,227,206, 80,160,139,203,128,209,160,139,123,113,109, 75,231,191, -197,133, 58, 96, 80, 42, 5,202,150, 46, 78, 31, 69, 1, 52, 77,131, 71, 1, 32, 36, 63,230,230, 86,219,119,240, 55,150,254,158, - 86,245, 91,122, 42, 55,133,196,100,203,121,109,198,159,160, 8,253, 99,252,213, 21, 97,230,108, 44, 22,139,173,143, 29, 59,102, -223,165, 75, 23, 75,135,250,189, 66,204,217, 70,200, 20,250, 29, 63,126, 84,208,165, 75,231, 42,148, 79,239, 78,160,233, 29, 20, -192,103, 89,178,146, 97,201,190,194,172,103, 47, 80,197,201,132,237,235,247,154, 7, 10,190,102,111, 64,240, 36,227,241,145, 89, -213,220,183,140,196,161,222, 16,137, 88, 60,201,211,219,199, 59,246,101,244,179,252,252,188, 21,234,244,103,155,138,111,254,204, -134, 50,154,198,159,189,120,163, 47,143,207,167, 58,183, 15,146,105,129,206, 85,213, 40,141,163,163, 99,239,181,107,215,214,105, -222,188, 57, 0,192,104, 52, 90,236,223,191,223,105,254,252,249,178,103,207,158,253, 90, 29, 77, 23, 23, 23, 87, 75, 75,203,154, - 18,137,196, 21, 0,212,106,117, 82, 94, 94, 94,124,114,114,114, 82,165,233,105,212,215,142,152, 12,243, 78,255,250, 51, 15, 0, - 58,247, 25,185,160, 86,219, 73,214, 20,195, 87,151,181,190,201,168,147,105,115, 94,126,125,225,216, 22, 10, 0,222,235,249,249, - 84, 59,223,190,235, 50,159, 28, 72,251, 75, 78,214,190,125, 25,187, 40,125,111,138, 80, 19, 2,154, 52,105,214,167, 87, 87,248, -213,117, 65,239,254,163, 39, 1,168,146,193, 50, 24, 12,162, 3, 7, 14,212,160,105,154,209,235,245,154,254,253,251,167,191, 77, -210, 60, 91,126,122, 3, 20,229,166, 55, 26,127,137,187, 85,119, 1, 48,135,125, 51,237,206, 47,121, 51, 64,209,195, 9,203, 38, -164, 62,216,211,130, 51, 88,197,216,122,245,144, 27,120, 36,188, 93,235,102,182,211, 70,127, 40,252,105,223, 85, 28, 5,149,148, - 18,182,223,245,239,154, 65,154,166,107, 28,217,181,214, 65, 34, 98, 0, 0,133,106, 19,250, 12, 30, 91,249, 9, 28, 56,240, 50, - 40,212, 43,105, 67, 53,153,140, 98, 30,143,175,161, 0,128, 42, 26, 29, 32,145, 8,111, 77,108, 22,153,247,121,143,218,159, 78, - 89, 23,186, 21,128, 21,128,212, 50, 47, 90, 52, 93, 99,207,230,149, 14,174,182, 98,240, 24, 10,133,106, 35, 62,252,116,130,169, - 44,195,182,105, 70,243,121,131,187,214,234,231,208,229, 96,159,220, 2,221,169,138,210, 41,115,244,245,145, 90,218,159,235, 51, - 98,158,139, 26, 22,152,185, 96,133,195,141,179, 7,174,166, 36,197,233,227, 19, 19, 85, 70,189, 33, 50, 43, 59,101, 98, 97, 74, - 84,148,185, 23,106,185, 92, 94, 71, 46,151, 55,106,216,176,161,120,210,164, 73,252,118,237,218,189,250,113,196,136, 17,130,203, -151, 47, 59, 47, 91,182,172,219,195,135, 15, 53,133,133,133, 97,133,133,133,209, 0, 76,230, 30, 19, 39, 39,251, 47, 63,234,221, - 3, 29, 62,250, 31, 76, 44,133,225, 99,198,227,204,169, 95, 71, 1,120, 39, 6, 75,206,208,115,135,143,157, 94,163,109,243, 38, -188, 37,251,159,195, 82, 42, 64,231,166,129, 60, 17, 51,217,121,207,230,101, 43,144,135,161,101, 69,174, 88, 85,238, 76,127, 59, -125,255,158, 45,106,227,232, 30,125,127,188,247, 13,104,169,213,171, 72, 86,157, 46, 99, 21, 34, 83,250, 90, 87, 43,198, 65,100, - 74, 95, 91,167,203,216,243,209,167,215, 22, 84,148, 22,190, 64,224,190,105,221, 66, 47, 27,185, 0, 12, 67,129, 71,211, 96, 24, - 10, 90,157, 9,131, 71, 79,123, 87,197,156,145, 56,120,117,163,129,207, 81, 84, 19,110, 81,167, 71,157,172,202, 49,161,104,198, -118,255,230,101, 60, 7, 75, 33, 24,134, 2, 67, 23,189, 94,166,170, 49,238,155, 57,150,111,107,212,187,182,116, 8,250,166, 95, -189,206,205,252,109, 26,238,189, 73, 89, 53,235,218,207, 54, 83, 35, 25,178,231,200,229,254,164,245,215,183, 9, 97,191, 79,188, -182,250,108, 69, 34, 90,173, 54,173,115,151,174, 22, 20, 79, 38, 61,127,104,107,155,146,135,205, 27, 76,236,111, 15,135, 39, 64, -201, 77, 12, 75,128, 17, 95, 12, 67,231, 46, 93, 85,172,145, 77,172,194, 69, 99,199,233,243,215,236, 53, 6,130,229,107, 55,206, - 83,230,101,206,139,121,106, 27, 91,152,151,249,181, 58, 61,234,168,249, 78, 5,190,207,110,236,255,112,215,241,155,240,247,243, -133,137, 45,122,190,170,119, 13, 25,118,159,184, 5,159,122, 62, 69,147, 55,179, 4,245,220,228,104,251,193,167,213,220,189,109, -121, 50,199,140,221,189,251,125,222,247,195,143,250,195,202, 66, 14,157, 94,235,125,241,236,169,159,215,175, 93,218,178, 48, 53, -114, 72, 85,204, 33,203,154,132,191,125, 54,136, 1,240, 1,232,170,123,240, 93, 92, 92,236,131,130,130, 94,125, 55, 26,141,240, -240,240, 64, 82, 82, 82,189, 42,223, 8, 56, 56, 72, 93, 92, 92, 62,152, 56,113,162, 67,251,246,237,249,246,246,246, 0,128,140, -140, 12,215, 75,151, 46, 5, 44, 95,190, 60, 61, 57, 57,249, 68,122,122,186,170, 92, 83,193,106, 4, 12,225, 49, 34,145,164,216, -215,130,158, 52,118, 96, 67,123,123,251, 50,111,142,179,178,178,133,179,103,207,162,120, 60,126,209,250,132,208,132, 53,149,251, -140,145,230,205,155,247,212,235,245,226,178,126,203, 52,218,119,211,176,194,126, 40,126,152, 49,143, 97,114, 82,194, 14,218,155, -125, 34, 53,232,249, 62, 47,154,172,239,209,171, 87,173,222,221,218,193,217,222, 18, 23,111, 69,226,171, 25,203, 97, 48,154, 86, - 85,235,226,193, 48,188,244,244,244, 88,107,107,107,167,119, 80,223,214, 62,178,107,141,195,165,171,247,166,174, 19,237, 25,173, - 51, 12, 49,148, 60,254,206,196, 18, 72,179, 4,252, 54,189, 58, 41,108, 93,189, 37, 27,215, 45,225,115, 17,172,210, 7, 66,200, -204,111,213, 34,200,118,218,248, 97,194,249, 27, 67,112,243,236, 9,117, 74,216,129,119, 98,174,228,246,222,205, 41,134, 55,146, - 98, 24, 25, 69, 83, 66,214,196, 38, 24,117,186, 5,234,172,168,148,183,213, 54,177,192,193,235, 85, 52,230,132,120,254,252,195, -114, 7, 71, 43, 17,212, 58, 35,134,126,249, 45, 54,172,154,167,176,183, 20, 66,171, 55, 97,203,145,187,153, 13,149, 43,200,231, -221,106,127,186,112,211,227, 95,191,223,241,244,215,138, 46, 98, 52, 69,195,193, 82,132, 5,187, 35, 97, 33,229,195, 70, 46, 4, - 77,151,109,174, 62,239, 81,164,153, 91,160, 51, 2, 16,150,119,113,147, 57,213,111,173,176,115, 57,240,225, 23,243,236,163, 50, - 40, 16,162, 67,180,165, 8,125, 6,143,182,170,235, 36,129, 76,204, 32, 54, 33,197,227,155,201,147, 3,195, 9, 29,164, 77,141, -140,175, 44,219,181,106,213,234,211,189,123,119,233,196,137, 19,249,110,110,110,216,177,255,140,123,167,190,227,122, 36,165,102, -185,177, 4,112,116,176, 73, 24,214,175,219,177,147, 39, 79,198, 37, 36, 36,240,151, 46, 93,218,244,208,161, 67,126,169,169,169, -102,223,137,154, 8,129, 90,103,130,201,196,194,196, 82,200,200,173, 86,139, 35, 93,254, 93, 53,233,245,126,187, 96,222,202,195, -209, 40, 80, 25, 32, 17, 48,120,158,162, 68,243,230, 65,188,125, 91,168,246,101,109, 49,172,239, 7, 51, 29, 21,164, 75,207, 22, -181,225, 96, 45,197,230,117, 11,113,244, 70, 76,151,180, 2, 10,107, 9, 51,210, 89,196,235, 36, 99, 83,214,182, 11,244,116,122, -175,137, 59,238, 5,122, 58, 93,185,255,244,153,228,227,229, 99,147, 10,249,231,115, 78,143, 43, 40,239,184,219,200, 5,216,120, - 38, 22, 50, 17, 31, 50, 49,175,232, 37,226,129,166,223,238,129,241, 98,103, 95, 55,134, 53, 13, 99, 24,222,176,254,159,124,236, - 50,160,127, 95, 66,209, 12,246,255,122,172,215,206,157, 59, 82, 12,122,221, 70, 19,205,108,210,164, 60, 73,168,212, 11, 80,128, -131,165, 16,223,252, 18, 14,133,148, 15, 11, 41, 31, 10, 9, 31,239, 53,178,127,155,116, 90,143,234, 85,167,219,168, 15,107,181, -175, 87, 83,238, 21,246, 34, 47, 98,216,130,123,171, 46,231,182, 31,191,118,165,159,173, 48, 71,203,251,118,210, 23,188,164,228, -148,246,251,143,133,116, 48,233,134, 70, 26,245,202,233, 25, 15,247, 31, 41, 75, 44, 49,242,102,128,107,179,190, 98,125,161,225, - 81,216,179,196,186,217, 26, 33, 34,226,242,139,247, 41, 31,242,146,125, 91,188,127, 83, 18, 99,145,173, 98,174, 37,217,210,237, - 17,114,179, 74, 77, 81,106, 61,139,176,152, 66,212,242, 14,128,147,179, 11,116,221, 6,214,186,115,241,224,145, 59, 33, 71, 22, -171, 82,159, 78, 55, 87,103,215,241,155,152,191,120, 85, 20, 40, 60, 41,174,205,125, 39, 78, 24,235,181,124,197,218,215,150,141, -254,223, 24,175,234,154,107,169, 99,250,206,142, 61,135,244,109,216,180, 19,162, 94, 68, 35,234,241, 61,188,215,177, 51,186,118, -255, 16, 58,173,230,211, 77, 63,175,189,171, 76,139,252,225,119,215, 92, 39,159, 86, 13,252,125,119,186, 56,187,184, 17, 82,252, -104, 50, 66,160,213,106, 48,249,235,225, 80, 21, 22,160, 94, 61,255,150, 86,173,223,215,130, 98,192,178, 4, 89, 89,153,202,200, -167, 17, 29, 53,233,145,183,205, 77,160, 74,165, 50,100,100,100,224,193,131, 7,120,246,236, 25, 30, 63,126,140,172,172, 44, 88, - 90, 90, 22, 42,149, 74,179, 51,106,101,101,101,209,160, 65,131,129,251,246,237, 19, 91, 90,254,230,249,117, 58, 29,164, 82, 41, -122,247,238,205,111,213,170,149,235,231,159,127,254,153, 94,175,223,149,155,155,155, 95,150, 78,246,163, 19,201,142,254,189,126, -234,214,119,196,104, 0, 16,136,228, 49,171,127,249,245,113, 69,255, 45, 16, 91,184,119,236, 61,180, 46, 8, 1, 69, 81,171,179, - 34, 15,165,150,183,174, 94,175,151,236,221,187,215,149,162,168,215,234,215,121,107,246,182,120, 20,149,210,113,253,156, 41, 60, -133, 76,132,204, 60, 29, 70,142, 30,107,103,182,185,242,239, 57, 38,168,113,192, 15,223, 78, 26, 14,153, 84,130,179,183,162,241, -245,180,197,198,236,204,244,237,160,168,149,153, 17,135,223,182,213,226,157, 12,123,243,114,149, 67,209,185,185,120,248, 39,237, -196, 58,131, 9, 57,133, 6,104,245, 38,176,132, 32, 79,105, 64, 68, 92, 1,236, 44, 5,216,136,127, 63, 85, 50, 88, 60,190,176, -251,184, 33,221,132,203,118,221,198,205,179,187,212, 41, 15, 14, 72, 95, 57,131, 38,253, 98, 18,239,239,173,253,198, 38,225,230, - 84, 18, 60,138, 89,209,162, 89,224,251, 35, 70,142, 38, 13,235,185, 11, 0, 26, 79,162, 94, 26, 54,111,218, 56,228,210, 53,225, -170,252,196,240,153,165, 42,211, 42, 13,223,100, 89, 54,241,205,136, 21,203,254,238,110, 54,188,172, 10,199, 74,198,199, 79, 39, - 98,138,238,140, 65, 96, 41,229, 99,247,165, 68,228,103, 39,101, 54, 84,175,184, 62,172,155, 67,207, 5,155, 34,142,252,120, 44, -237, 62,128,199, 0,210,202,211,164,104,128,199, 80,176,148, 9, 96, 41,229,195, 82,206, 7, 77, 81,229,154,171,111,127,126,184, - 21, 64,228, 27,230,234,149,166,212,193,187,190,194,214,245,240, 71,163, 22, 89, 63,138,215,131,166,129,218, 78, 50, 88,203,133, -208, 25,128,216, 12,125,113, 94, 45, 48,102,226, 28,251,169, 19, 70,157, 76, 75,109,219, 16, 8, 49, 86,148,119,149, 74, 37, 28, - 60,120, 48,223, 96, 48,232, 63,255,106,193,251, 41,105,153,189, 86, 45,250, 70,100,103,103, 11,165,198,136, 7, 79, 98,125, 23, -127,191,174,246,169,203,119, 14, 77, 29,213,235,104,151, 46, 93, 44,247,238,221,203, 86,229,184,103,164,101,174,219,178,227,192, -246,149,203, 22,227,105,108, 54, 54,255,252, 35,136,201,248, 83, 37,135,242, 53,205, 13, 27, 54, 56,108,221,186,149,190,117,235, - 86,214,155, 6,148,162, 32,203,206,211,194, 74, 38,128, 84,196,131,147,149, 8,182, 10, 1, 68, 2, 26, 52,253,218, 69,228,149, -230,166, 3, 39, 22,176,170, 92, 28,221,163,239,191,121,221, 66, 12,253,114, 6,194, 51, 5,167,105,169,213,130, 47,251,245,154, - 98, 35, 69, 87, 87, 43,218,225,189, 38,181, 32, 19, 11, 48,109,220, 96, 4,221,143,117, 72,204,101,103,100,171,208,104,206,105, -204, 44, 43,157, 52, 67,129,199,208, 80, 72,248,184,124, 98,119,186,170, 32, 47,143, 98,138, 34, 44, 6,157, 62,206,204, 98,252, -187,253, 41,117,240,158,218,184, 65,253,133,163, 71, 12,163, 91, 54, 15, 38, 52,205, 67,102,190,158, 34, 32, 24,255,229, 40,140, - 25, 53,220, 41, 49, 41,109,214, 15, 63,110,152,121,241, 28,153,175,204,120, 58,167, 34, 77,134,162, 65,211, 20,100, 18, 62,228, -226,223, 94, 26, 29, 11,138, 2,227, 26,208, 47, 15, 20, 64, 81, 84,114,226,189, 61,190,230,164,211,165, 65,215, 11, 33,233, 2, - 31,213, 73,205,205,231, 81,161, 11,238, 60,140,191, 3, 32,219,173,141,213,103, 6, 3, 65,161,198,136,151,105, 42, 24,117,132, - 26,218,197, 29, 30,125,169,122,139, 54,135,110, 63,245, 16, 22,165, 46,246,175,105, 38,221, 58,160,177,245,255,176,223,202, 53, - 27,238, 46, 91, 56,131,201,202,215,193, 68, 0,137,144,129,184,248, 37, 17, 48,208, 40,243,240,195, 79,191,164, 26, 65,245, 65, - 72,197,101,254,247, 23, 13, 50,168, 79,183, 54,123, 40, 64, 72,209,130, 68, 23,247, 90,238, 29,186, 15, 17,191,215,227, 83,152, -140,250,169,247,175,146, 75,170,244,200, 11,230,104,250,251,249, 2, 20,158,100,132, 31,233, 83, 84, 73,246,250,213,167,158,143, -215,155,203, 60, 61,189,189,204, 57,238, 37,197, 74, 98,239, 53,194,211,167,193,228,102,173, 58,212, 74,206,210,194,218,213, 19, - 15, 66,239,227,204,254, 31, 66,213, 5, 57,203,206, 28, 63, 52,121,254,146, 85,141,186,247,254, 4, 71, 14,239,155,168, 76,139, -252,177,120,159,190,210, 36, 44, 59,104,235,198, 13,110,124,129, 8, 6, 19,129,193,200,194, 96, 98, 97, 48, 18,164,164, 36,163, -160,176, 16, 98,137, 2, 50, 11, 27, 24,140, 69,145, 66,173,214, 32, 27,245,105,247, 49, 26,224,118, 89,233,172, 21, 60,232, 30, -104,170, 70,209, 61,106,241, 49,211,106, 84,206,206,206,219, 1, 64, 36, 18, 65, 36, 18,193,104, 52,226, 81, 50,198, 59, 59,181, -153, 6, 82,124,176, 89, 54, 49,245,193,158,192,242,242,238,230,230,214,163, 44,115, 85, 88, 88,136,235,119, 31, 90,110,217,123, -182, 75,108, 66,106, 29,214,228,160,149, 56, 53,234,156,155,123,169, 71,121,251, 51, 45,252,200, 24,183,182, 95,209, 19, 71, 15, -246, 92,253,203,129, 59,207,207, 44,168, 48,156,236,241,222, 20,221,228, 49, 3, 2,191, 91,189, 57, 42,233,202,234,175, 43, 59, - 70, 2,129,128,159,145,145,241,234,252,158,183,246, 96,215,248,180,252,142,223, 47,156, 33,120, 16, 93,136,135, 47, 83, 48,164, -147,187,217,231,187,147, 95,239,122, 53,106,186,174, 90, 53,255, 43, 60, 75, 86, 99,237,193, 59, 8, 57,177,253,190, 94, 83,240, - 65, 70,196,177,244,234, 92, 67,222,129,193,250,157,102, 73, 69,112,233, 97, 38, 10,212, 69,198,202, 96, 98, 81,160, 54, 34, 61, - 87,139, 60,165, 1,133, 26, 3,134,116,116,175,186,251, 35, 36, 8,128, 61,128, 12,138,162,238,150,254, 94,226, 65, 75,170,152, - 55,190,103, 22, 71, 12,109,139,235, 10, 97, 41, 89, 93,169, 32, 70, 89,203, 75,182,143, 0,224, 91,172,105, 2,112,135,162,168, - 28,115, 12, 22, 41, 9, 87,150,218,201,101,222,178,154,140,134, 26, 46,206,206, 96, 73,226,107,171,184, 7,247, 83,141, 27,246, -177,100,153,201,168, 76, 9, 59,104,118,159, 44,185,189, 87, 11,129, 64,120, 98,241,146,165,164, 95,143,182,194,212, 60,131, 58, - 34, 73,147, 81,168, 37, 70, 39,251,186,162, 37,223,125, 39, 95,180,100,217,255, 14,253,202,230, 22,166, 69,124, 95,150,134,115, - 96,255,123, 20, 69,215,160,127, 11,203,131,176, 36, 49,233,222,238, 64, 0,120,155,190, 86, 74,141, 17, 12, 67,129, 95,220, 39, - 69,165, 51, 65,149,155,154,213, 80,181,234,250,176, 46, 69,230,234,118,146, 83, 52,195,100,232, 1, 84,216, 4, 65, 83, 20,242, - 85, 6, 88, 72,248,176,148, 9, 96, 37, 21,148,142, 96,149,101,174, 30, 87,164, 41,208,235, 19, 76, 6,173,134,152, 76,232, 22, -100, 15, 7, 75, 33,156,173, 69, 16, 11,121, 48,152, 0,181,142,133, 90,103, 66, 92,186, 10, 5, 42, 17, 26,180,237,239,105,231, -124, 91,149,250, 50,112,107, 86,220,189,145, 21, 70,152, 76, 38,236, 60,112,198, 51, 41, 37,189,215,145, 29, 43, 68,233,121, 6, - 60,140, 45, 68,122,142, 14,132,178,196,180,153, 51, 69,223,126, 59,251,195,125,135, 47,188,108, 17,232,157, 88,213,253,170,202, -136,220,177,255,224,129,117, 31,244,232,173,136,184,115, 10, 81, 15, 46,124,171, 76,175, 90,255, 43,119,119,119,211, 15, 63,252, - 96,245,211, 79, 63,121, 30, 57,114, 36, 33, 35, 35, 35,166,228,164,178, 85, 8,146,207, 93,188, 98,219,182,101, 27, 94, 66,166, - 6,118, 10, 1,220, 29,165,184,127,227,146,142,166,168,211,101,233, 21, 55, 3, 14,192,123,223,224,232,141,152, 46,143,179, 68, -151,191, 24, 62, 52,246,220,137, 59, 89,107,118, 92, 88,234, 42, 55,132,137,217,244,181,247, 3, 61,157,166,142, 29,140,197,107, -118, 32,228,254,211,116, 37,237,178, 48, 69,107, 44,119, 80, 1, 67, 3,124, 30, 5,133,132, 15,149, 50, 47,239,241,133,245,222, -239,232,230,232,179, 51,135,119,208,217, 5, 6, 36,102,170,169,228,172, 2, 24, 89, 22, 86, 50, 33,140, 44,144,155,157, 73,237, -220,185, 3,119,239,222,164,193,208, 95, 0,152, 83, 89, 4,139,161, 41,200,197, 60,200, 37, 69, 81, 32,185,132, 7,189,145,133, - 87,109, 55,172,154, 55,206,194,222,193, 17,239,247, 25,105,118, 2, 37, 50,235, 70,219,214,207,199,229,155, 97,237, 46, 61,223, - 29,228,224,223,104, 13,223,196, 95, 6, 66,212, 90,131, 9,249,121, 57,208,104, 19, 16,236,154, 9, 27,153, 9,177,249,206, 8, - 79,141,146, 87,118,161,207, 10, 63,244,128, 34,189,103,238, 63,118,113,113,231, 78,237,240,248,101,126,145,185, 18, 20,153, 43, - 30,197, 98,197, 79, 27, 12, 57,121, 5,221,179, 30, 31,201,172, 70,249, 60, 95,124, 49, 46, 50, 8,166, 66,251,157,107,103,110, - 27, 62,121,105,231,206, 31,126, 70,133,223,189, 52, 93, 5, 92, 48, 55,122,254,251,101,196,172,101,229, 93, 74, 28,234, 6,238, -218,178,117,119, 63, 63, 47, 55,164,229, 26,144,156,163,199,213,251,207,113,104,195,244,220,220,180,232, 65,208, 23, 22,178,148, - 49,239,236,153, 99,167,255, 55,110, 50,234,215,111, 84, 43, 63, 49,223,226,205,190,135, 44, 67,109,248,116,216,168,126,142, 14, -142, 10,182, 56,130,197, 18,130,122,245,252,208,173, 71, 31, 92,190,114, 3, 17,143, 31, 22, 45,103,139,134,157,231,230,100,165, - 26, 13,186,173,229,150, 35,134,170,177,229,167, 21, 14, 52, 5,232,141, 44,116, 6, 22, 83,167,125,171,251,106,214,218, 86,157, - 91, 54,124,204,128,205,143, 79,201,181,186, 27,153,210,128,226, 91, 56, 15, 28, 49, 69,160,214,155,144,175, 50,224,194,254,213, -229,102,218,185,118,195,230,242,154, 45,135,141,152,241,147, 72,196,208,250,250,222,110, 49,109,155,213, 79,168,233, 98, 87,176, -104,245,206,224, 27,247, 35,187,245,249,232, 67,113,191, 58,126,148,139,173, 88, 49,106,204,216,134, 38,207,150,159,166, 61,191, -190,189,220,202,143, 39,202,117,171,225,246,170, 41,209,190,126,175,135, 0,222,172,249,227, 50, 30, 31,105, 8, 0, 14,142, 78, - 26,138, 47, 42,168,130, 33, 32, 0, 48,119,205,129,110,137, 25,133,125,191, 95, 56, 67,240, 32, 70,137, 7,209,121, 16, 10, 24, -104,245,230,119,107, 51, 81,100,252,148,177, 67,249,217, 74, 35, 46, 61,204, 64,248,189,139,196,168,207, 31, 66, 40,222,231,118, -245,123,125, 74, 1, 30, 4,120, 73, 83,248, 89, 71, 99,107,222,195, 35,121,213,141, 96,217,251,126,216,130, 98,208,141,225, 9, -130, 0,214,199,104, 48, 56,208, 12,147,153,246,240,160, 99, 21,242, 14, 85,122, 20,150, 46,154,133, 85, 27, 15,225,206,179,108, - 88, 26, 19,112,100,243, 66, 76, 92,188, 19, 42,157,169,162, 52,148,231, 71,236, 41,138, 58, 78, 8,233, 78, 8,233, 8, 64, 88, -242,189,232, 26, 70, 29, 47,254,239,215,190, 79,157, 58,117,250,226,197,139, 31,151,172, 91,178,188,100,221,138,150,151,218,222, -118,218,180,105,254, 75,150, 44, 89,212,188,121,243, 61, 55,110,220,136, 1, 96,150,193, 42,157,137,114,207,114, 7,255,158,193, -132,176,140,147,173, 28,158,181,221, 32,251,248,115,201, 73,138, 82, 50, 12, 77,111, 89, 57, 77,156,165,230,129,199, 48,102,199, -123,197, 14,245,154, 74,228,178,147,123,247, 29, 36, 94,181,156,132, 7,111,229,198,223,143, 81,189, 10,233,230,103,196, 9, 61, -109,180, 76,191, 79,250,200, 78,159, 61, 55,190, 16,248,190,236,138,129,174,177,102,197,119, 14, 10, 9, 31, 52, 5,228,171,141, - 24, 63, 97,202, 91,215, 94, 4,132, 25, 51, 97, 54,104,170,168,242, 41,204,203,198,194,149, 91, 10,251,212,184,120,109, 88, 23, -187,158, 11, 54, 69, 28, 57,251, 68,242,252,195, 15, 59,228,197,198,198,230, 36, 39, 39, 87,220, 4, 67, 76,137,125, 63,251, 74, - 64,211, 69,205, 70, 20, 69, 1, 48,165, 85,199, 92, 1, 64,110,238,203,124,177, 80,254,225,142, 21, 99, 55,214,172,225,106,163, -144,138, 33,151,137, 40,159,122,117,197,205,154, 54,151,184,215,173, 47,184,242,164, 16,241, 25,106, 68, 39,229, 67,100,239,207, -239,215,174, 19,118,172,158,210, 45, 43,238, 94,165,249,191,120, 51,188,199,143,203,102,136,210,114,244,120,146, 80,128,212,108, - 45, 82,115, 52, 72,205,209, 66, 46,230,161,217,123,125, 68, 71, 47, 28,232,221, 34,208,123, 77,117,246,111,244,139,152, 67,113, - 73, 41, 67, 26, 54, 14,198,206,109, 91,154,193,213, 85,140,164, 36,141,185,219,111,220,184, 49, 59, 32, 32,192,238,251,239,191, - 87,214,171, 87,175,209,134, 13, 27,106, 63,123,246,236,114,157, 58,117,122,172, 95, 61,255,242, 87, 51,150,185,243, 96,180,108, -214,178, 37, 35, 21, 82,184,117,229,172,118,235,198,159,146,245,185,133,147, 43,172,189,164, 86, 11,210, 10, 40,216,187,184,133, -203,248,134,247,249, 82,253,179,156, 29,227,118,228, 0,191,214,233, 50,246,252,165,123,145,207,154,220,143,117,184,120,255, 89, -122,182,202,224, 29,125,122, 98,133, 23, 92,134, 42,142, 96, 73,127,139, 88, 58, 52,236,251,156, 80,148,125,137,177,161, 80, 20, -209,162,138, 78,194,228,164,208,125,102,116,140,166, 8,203, 2,207, 18, 11, 81,160, 54, 66, 99, 48,194,205, 78,134,140,180, 68, -172, 95,179, 21,161,247,238,226,253,174, 61,241,195, 47, 59, 49,252,211,143, 53,149,157,152, 52, 77,129,166,169,226,200, 85,145, -185,146,139,121, 0, 5,228, 42, 13,248,245, 90, 2,234,214,166, 65, 85,161,181, 80, 33,151, 32,175, 64, 3,154, 47,199,211,171, -219,165,167, 46,222,153, 54,103,217,166,111,242, 11,211,226, 95, 68,220, 68, 61,235, 44,212,118,209,225,113,154, 37,238,101,215, - 66,189,186,117, 64, 11,238,154,165,157,249,184,193,210,163,244,193,238, 65,141,253,154,215,116,176,132, 90,103, 42,142, 98,241, -176,117,203, 22,196,190, 76, 28,150, 21,113, 36,244, 93, 56, 89,101,122, 76,134,200,193,243,127,143,110, 93,136,233, 61,104, 12, -156, 92,107, 54,202,141,127, 96,102,247, 4,243,204, 20,107,158,193,162,109,106, 53,222,182,109,199,254,126,181,107, 58,225,220, -157,151, 8,125,145, 3, 11,133, 21, 24,153, 51,188,219,126,110,245,232,244,234,143,212,153,133,219,248, 2,233, 23,193,205, 90, -130, 16,130,200,167,143,179,243,242, 44,127, 87, 4,212, 41,145, 15,110,166, 68, 90,188,102,138,237,124, 26, 41, 44,109, 30,104, -244, 38, 36, 37, 37,226,250,141,203, 1,234,148,200, 7, 85,217, 95, 34, 1,141,179,247,211,161, 55,178,208, 27, 88, 4, 52,240, -209,240, 5,146,214,223,109, 60,209, 44, 53, 45,157,150,202, 45, 89, 75,187, 58, 2, 43, 67,170, 54, 44, 38, 79,160, 55,178,168, -227, 92,241,125,185,212,166,206,162,175, 39,124,229,203, 19, 74,144,175,212,234, 82, 18,147,156,126,222,125,169,240, 73,100,132, -171, 71,173,154, 22,243,231,207, 17,228,107, 8,210,115,181,200, 44,208, 83,159, 12, 24,230,178,125,243, 15,131, 0,108,175, 66, -210, 27,236,217,254,147,193, 70, 46,160, 10, 84, 6,146,145,175, 49,141,249,223,248, 6,111, 83,118, 94, 51, 87,209, 74, 60,136, -201,133, 72,192, 64, 36, 96, 96, 48,154,215, 69,210,206,183,175,204,206, 86, 54,168,105, 99, 79,156,185,159, 1, 30, 67, 65,173, -204,215,137, 69,242,112, 31, 31, 47,186,113, 35,127,180,107,213, 2, 47, 98, 98,235,157, 57,119,113,229,157,187,161, 11,249,245, -123, 79,206,124,124,248,135,170,164, 53, 46, 41, 67,150,102,116,235,239,224,100,231,223,179,103, 15, 81, 77, 87, 71,202,206,214, - 10, 38, 8, 48,122,204,151, 14,102,183, 26, 17, 2, 2, 96,201,188,105,208,234,116,112,176, 18,130, 16, 96,243,218,185,208,233, -116,112,177, 21, 35, 79,105,168,204,232,149,235, 71,202, 50, 68,111, 26,173,146,207, 37,235, 45, 94,188,184,251, 27, 6,176,123, - 57,198,240,119,235,149,108,191,100,201,146, 69,165,126, 87, 85,165,137,144,170, 40, 83,118, 13,122,183, 20, 9, 37,103,127, 88, - 60,158,206, 85,234, 33, 18,208,168, 83,219, 3, 99,199,125, 37,125,175,177, 3,212,176,192,193,221, 91,243,141, 38,195,113,179, -238,108, 29, 61, 3,101, 18,233,233,205,219,118,179, 78, 14,118,212,207,231, 51, 98, 50,242,141,175,166, 56,120,118,251, 40,123, -239,204,207,206, 4,212,105,169, 88,226,169,213,105,173,203,189,226, 20, 31,208,205,103, 99,193,208, 52,152,119, 52,179, 23, 77, -211,166, 95,214,204,135,157, 69, 81,159,171,185,171,118, 20,244,176, 63,125,177,180,185,106,220,184,113, 94,163, 70,141,114,105, -186,242, 63, 77,184,187,171,172,209, 18,213, 50, 87, 37,104,210, 30,221,213, 0,254,121,177,191, 45, 59,133, 0,190,157,199,254, -137,253, 7, 14,154,230, 88,191,135,226,101, 74, 30,132,180, 1, 65,190,206,184,124,230, 87, 54, 33,230,201, 40,115,180,211,179, -242,220,236,108,109, 17, 26, 93,136,228, 44, 13, 82,178,139,204, 85,106,182, 6,249,106, 35, 26,123, 56, 32, 55,175,208,173,218, - 6,150, 34,135,207,156, 62, 51,164,107,175,126, 24,251,205,156,174, 27,127, 92,254,176,208, 65,241,169, 38,253,233, 29,115,182, - 63,112,224,128,233,222,189,123, 49,153,153,153, 65,147, 39, 79, 46,240,240,240,112,154, 63,127,254,136, 58,117,234,184,188,215, -190,125,222,221, 75,205,182,125,245,205,156,246,211,191,218, 88,155,166,233, 52,194,146,163,201, 74,195,108,100, 62, 81, 87,120, -156,142, 78,127, 58, 59, 90, 63,228,189,214,182, 71,109, 37,180, 31,159,210, 14,128,239,156,125,120, 50, 71, 31,125,122,109,129, -228,227,229, 99,147,114,217, 25, 26,218,105, 97,101,230,170, 40,130, 69, 65,167,103, 97, 33,225,151,140, 28, 5, 8,156,127, 92, -187, 92,106,111, 41, 2,143,161,192,103,104,228,169, 12,200,202,215,225,155,201,147,205,221,131,172,137,101,161,210,154,160,214, - 25, 65,129, 66, 65,126, 38,166,125,243, 53,186,246,232,131, 97,163, 38, 32, 87, 13,220,139, 41,128,222, 96,168,212, 22, 49, 20, -160,210, 26, 49,172,179, 59,178, 10,244, 80,106,140,208,233, 89, 72,197, 60,240,120, 52,100, 34, 30, 20, 18, 62, 40,138, 8,156, -156,156, 70, 0, 0,159,207,215, 36, 36, 36,236, 40,191,121,158,160,150,155, 35,212,122, 26,193,253,150,161, 99,115,111, 60, 56, -183,137,119,229,246,163,218,223,204, 89,137, 49, 3,154,227, 64,100, 93,216, 56,212,130, 92, 42,134,129,208, 0,136,153, 29,242, -230,176,180,254,195, 1, 63,253,178, 57,114,222,183, 83,196, 57, 74, 10, 34, 1, 15, 23, 47,158,199,205,219,247, 86,103, 70, 28, -217,241, 46,251, 82,240, 9,237,104, 97,105, 1,177,144,129, 94,175, 53,187,195,183,137, 37, 0,129,175,189,127,175, 95,139,143, -189, 47, 91,198, 50, 51, 34, 88,148,165,139,255,150,159, 54,238, 28,228,236,228,128, 67, 23, 30, 98,219,198,117,112,245,239,138, -231,247,127,130, 91,147,222,144,215,238, 0,161, 98,255, 8,154,225, 53, 24,243,213,180, 62, 77, 2,155,227,198,213, 75, 72, 79, - 77,249, 9,136, 52,171, 15, 26,195,167,198,181,239,216, 29, 90,189, 9,173, 59,116,199,233, 99,135,198,162,120,240, 68,117, 97, - 24,154,253,114,120,127,126,122,174,142,159,158,167, 69, 82,166, 26, 49,169, 74, 28,217,187,201,236,176, 29,197,208, 65,109, 27, -213,224,143, 88,122, 49,193,173,134,179,150,175, 85, 75,158,189,120,225,243,197,144, 65,124, 15,207,122,116, 70,174, 22, 25,121, - 58,100,228,233,160,212, 24, 80,215,165, 38,173, 53,242,154, 87, 53,173, 14,150, 98,254, 15,199, 99, 96, 33,229,161,133,175,109, -181, 59, 97,179, 44,251,155,185, 90, 80, 20,185, 10,139,201,131, 88,192, 64,200,103, 32, 18,208, 48,152,136,153,117,145,177,255, -200, 33,159, 72,116, 6,130,204,124, 29, 24,154,130,147,157,173,200,205,217, 27,155,151,125, 9, 0, 24, 62,229, 71,124, 49,116, - 48,234,121,123, 34, 47,175, 64,242,197,232,175, 86, 0, 48,203, 96, 17, 66,200,206, 35, 87,252,238,133,199, 77,252,108,200,167, -252,126, 61,219,208,161,209,249, 72,201,214, 34,250,185, 10, 58, 67,213,102,163, 49,154,138,218,124,183,236, 59, 14,169,128, 65, - 70, 94,209,233,178, 96,237, 62,200, 37, 60,164,230,232,192,178, 21, 70,239, 42,244, 35,229, 69,157,170, 66,105, 19, 86,209,114, -138,162,142, 79,157, 58,117, 58, 0, 50,117,234,212,233, 37,223, 23, 47, 94,172, 6,144,108,174,193, 66,121,205,130,118, 13,122, -183,148, 8,197,103,183,175,157, 46,185,240,140, 96,245,217,251,232,214,204, 25, 2, 30, 5,177,220, 9, 15, 98,114,113,225,194, -145,130,171, 55,111,107, 40,218, 80,233,176, 40,137,147,119,128, 84, 36, 59,191,110,195, 54,163,163,147, 19,118, 95,203, 73,206, - 42, 52, 26,126,107,158, 50, 80,247,206,252, 92,219,200, 26,186,104,210,158,223,173,236,206,155, 37, 68,176,120,253,209,162,105, -233, 89, 19, 88,176, 96, 4, 34, 89,205,224, 65,105,160, 0,147,137, 21,243, 24, 90,243,170, 29,164,168,106, 74,140,191,179, 59, -176,178, 35,108, 33,229, 99,111, 72, 34,242,178,147, 51,123,216,159,190, 94, 98,174, 78, 63, 22, 61,111,210,164,113, 94,211,166, - 77,115, 69, 34, 17, 24,134,169,206, 49,126, 43,115, 85, 62,161,134,204,151, 88,114,240,160,184,103, 87,153,127, 83, 33,197, 71, - 19, 31,103, 92, 62,123,136,189,121,106,211,135,234,244,168, 19,230,134,120, 11, 53, 70, 36,103,171,145,148,169, 70, 74, 78,113, - 4, 43, 91, 11,138, 2, 52,186,183,155,190, 70,157, 30,117,108,199,142, 77, 63,105, 13, 24,213,250,253,222,152, 56,103,157,231, -142,159,150, 94,141, 37,198, 32, 85,198,243, 71,102,221,113,197,197,105,119,238,220, 25, 90, 80, 80,208,105,197,138, 21,133,190, -190,190, 66,137, 68,146, 5, 64, 28, 21, 25, 41,184,120,114,255,203,140,228,228,145, 6,131,225,174,185,233,114,111, 59, 68, 36, -209,135,142,112,151,182,232, 92,199, 73, 10,119,169,178,179,143, 60,236,251,172, 14, 95, 45,202,184,184, 58, 61, 69,107, 60,151, -173, 66,163,164, 66,254,121,179, 46, 54,122, 93,220,192,145, 83,193,208, 20,244, 90, 93,220,171,230, 8, 75, 17,230,236,120, 2, -133,132, 15,185,132, 15,133,132,135,150,190,182,168, 66,128,136, 24,140, 4,106,157, 17,106,173, 9,106,173, 17,118, 53,173,240, -203,246, 3,136,207, 80,227,232,221, 76, 60,141,205,135,183,155, 12,132, 84, 30,119, 98,137, 73,249,201,136, 25, 10,134,166,193, - 80,160,125, 60,107, 33,187, 80, 7, 1,143,134, 80, 40,132, 84,204,131,133,148, 15, 62,143,143, 59, 15, 31, 66,171,213,162,105, -211,166,226,202, 26, 28, 20,114, 9,188,106,187, 64,111, 48,226,228,149, 8, 44, 24,255, 33, 58,181, 9,196, 55,140, 16, 79,181, -141,161,176, 81,128,165, 24,232,141, 44,180, 6, 19, 0,170, 34, 3,220,162,184, 95,132, 6,192,173,212,200, 67,241, 38,166,215, -136, 83,103, 47,238,232,209,237,125,132,134, 61,198,193, 67, 71,175,102,218,230, 77, 42, 29,149,192,111,163,224, 30, 87,179,184, - 82,132,166,199, 55,111,217, 14,133, 57,233, 72, 75,120,105,246, 69,221,175,166, 2, 95,143, 31,235, 85,175, 94, 61, 47, 19, 75, -192,178, 4,126,238, 10,140, 28, 61,218,171,174,167,183, 23, 91, 60,138,208,199, 77, 81,161,142,204,177,222,152,133, 43,214,127, -234,230,230,134,211,215,158, 96,241,140, 81,161, 82,169,220, 35,208, 70, 97,197,214,107,132,152,240,115,176,169,149, 11, 11, 71, -175, 26, 61, 59, 13,169,209,245,131,222,120, 20,118, 31,171,190,159,127, 83,201, 72, 22,153,147, 86,153, 67,109,251, 70, 1,193, - 3, 45,108, 28,145,147, 87, 8,185,181, 3,124, 27, 6, 14,140, 8,211, 78, 81,166,199,100, 84,247, 92,103, 9,129, 86,207, 34, -187, 80,143,196, 12, 53, 94,166,169,240, 50, 85, 5,150,253,237, 89, 34,149,149, 80, 10, 20, 37, 19,241,120, 54,134,231, 53, 31, -158,191, 72,220,221, 28,169,165,243, 39, 51,122, 34, 66,122,158, 14, 25,249, 58,100,228,105,145,145, 95,100,176,172,229, 60,176, -132,173,242,232,140,236, 66, 61, 20, 18, 30, 44,101, 2,152, 76,213,239,243, 61,103,229,238, 22,137, 25,133,239,125,191, 96,134, -224,193, 75, 37, 30,198,228, 65, 36,160,139,162, 87,197, 6,203,220,102, 97,134, 71,143,253,160, 99, 83, 36,100,104,192, 99,104, -240, 24, 26,158,245, 3, 96, 39,101,241, 94,191,169, 0,128, 30,221,138,166, 33,137, 73, 81,226,216,173, 20, 0, 16,152,155,214, -244,204,124,241,161,115,161, 95,237,254,101,169, 80, 99,226, 99,253,137, 88,104,116, 38,136, 4,197,205,238,194,170,213,111, 70, - 83, 81, 4, 43, 33, 67, 15,165,214,132,124,149, 30,132, 0,119,158, 23, 64,165, 53, 33, 79,165, 71,179,122, 54,149,158,115,149, -212, 79,221,223,170,133,170,104,251, 12,252,214, 79,171,210, 8,214,226,197,139, 31, 47, 94,188,184,204,136,152, 57, 6,171,108, -115, 37, 16,159,221,182,102,186,228,124, 36,193,229,135, 89,232,219,186, 6,178,210, 19,177,241,199,213, 44, 33,128, 72, 44, 76, - 53, 25,217, 83, 26,214, 56, 57,239,225,241, 10,219,125,165,118,190, 13,197, 66,209,197,197,171,126,210, 59, 57,215, 96,127,189, -149,155,158,167, 50,189, 22, 43, 52,105,181, 52, 97,137, 64,147,246,220,172, 74,145,166, 41,253,156,177, 31,130, 37, 4,179, 87, -239,195,226,137,253, 33, 23,243,164, 20, 69, 73,149, 26, 35,198,207,223,132, 21, 51,135, 42,164, 34, 94,177, 49, 48, 97,212,216, -111,204, 51, 1, 90, 19,148, 57,169, 89, 13, 10, 87,190, 97,174,154,228, 5, 5, 5,229, 90, 91, 91, 67, 38,147, 85,199, 96,253, -206, 92, 57, 57, 57,185, 72,165, 82,155,146,104, 24,195, 48, 48,153, 76,202,231,207,159, 87,107,210,183,252,220,204,195,201, 47, -195,155,182,108,247, 1, 66,206, 30,102,111,158,220,248, 97, 85,134,152, 91, 89, 90, 36,220,143,136,243, 5,228, 72,202,210, 32, - 53, 71,131,148,108, 45,244, 70, 22,238,142, 82, 36, 38,196,195,202, 82,158, 96,174,158,196,209,179, 11, 77,152,145, 44,133, 95, -212,105,145, 39, 1, 64,153, 28, 49,122,223,142,159, 30, 61,126, 28,182,170,123,255,177,194, 78, 31,141, 22,108, 88,242,191,169, - 0,250,155,125,113, 72, 79, 87, 29, 61,122,244,166,139,139, 75,247,217,179,103,107, 1, 8,181, 90,173,116,232,208,161,210,184, -184,184,175, 1,152,149,198, 86,159,111,182,163,196,164,139,128,104, 6,184, 75,149,239,119,104,211, 28, 45,252,221,144,216,166, - 57, 0,140,139, 83,201,189,181,117,126,217,107, 48,225,212,250,173, 39, 23, 15,239,215,225,235, 29,188, 57, 43, 82,142,207,169, - 48, 34,246,236,234,230,206,101, 93, 58,248,197, 29,223, 75, 27, 44,163,137, 84,165, 9,142, 24, 76, 44, 84, 90, 35, 84, 90, 35, - 10, 53, 6, 92,120,144,142,180, 92, 29,114,148,122,104,180, 38, 16, 0,122, 3, 41,153, 85,164, 98,179,122,115,155, 85,201,103, -215,128,126,121,171,231,141,181, 56,120, 45, 17, 50, 81, 81,127, 44, 75,153, 16, 22, 82, 62, 0,130,203,151, 47,163,100,120,124, -101,119,241, 7, 79,223,193,138,173, 23,113,122,211,100,136,133, 12, 26,245,158,135, 33,189,155,130,101, 9, 94, 68,134,167,121, -249, 54,118,164,229, 82,208, 52, 74,250,164, 84,180, 63,109, 1, 28, 5,208, 29,192, 7, 0, 72, 70,196,145,156,195,166, 44,229, -197, 19,187,101, 74,181,214,152, 19,247,100, 29,148,153,109, 75,146, 80,124, 7,124, 25, 64,155,234, 6,179, 37, 14,222,171,191, - 24, 61,190,111,221,186,117,176,111,215,102, 16, 66, 29, 52,119,227, 29,199,110, 98,229,170,215, 71, 12,142, 28, 61,218,107,195, -250,245,175, 45,251,116,232,136,138, 70, 17, 82, 86,246,206,147,235,249,248,225,214,227, 68, 44,253,118, 76,168, 38, 61,102,128, - 78,110, 59, 82,175, 76,153,224,231,223, 24, 78,142,182, 72, 77, 73, 67,251, 94,157,208,181,115,103, 60, 10,187,143, 5,179,190, -185, 9,149,238,253,202,162,182,191, 25, 33,254,168,118,157,123,243, 85, 90, 61,214, 46,157,133,145,147, 22,162, 89,251, 30,252, -240, 7,183, 71, 1,152,103,110,158,117, 6, 22,237, 27,218, 67,103, 48, 65,111, 96,113, 52,134,225,253, 62, 82, 0,240, 24,154, -110, 92,167,168,121, 55, 95,109,168,248, 32,240,168,212,156,252,130, 90,235, 22,126,197, 40,181, 38,100,228,105,145,158,171, 67, - 70,190, 22,153,121,218, 34,115,149,167, 67,102,158, 22, 60,134, 66, 84, 76, 18, 24,134,170,114,255,187, 92,165, 30,193,222,214, - 0, 40,208,213,108, 14,201, 52,218,119, 13,123,150,248,222,210,249, 51, 4, 15, 98, 10,241,240,101,126,177,177,162, 33, 44,101, -176, 88, 51,186, 96,217,251,246,104, 49,160, 79,183,250, 22, 50, 49,146, 34, 11,192,163, 41,240, 24, 10, 22,246,110,176, 20,107, - 48,118,204, 72,216,218, 88, 34, 62, 83,131,213,135,158,225, 97,196,115,176,234,170,101,251,199,157,167, 63,252,116, 80, 63, 17, -205, 23, 99,199,217, 24, 8, 5, 12,120,208, 33,226,246, 21,109, 90,226, 75,125, 65,126,174,140,199,227,155, 37, 74, 1,196,104, - 98, 65, 8,193,162,185,211,176,103,235,143, 56,125, 47, 13, 4, 69, 83, 53, 92,255,117, 57,198, 79, 93,128,140,124, 29, 0,170, -218, 14,150,162,168, 19,132,144, 15,222, 52, 66,111,154,164, 82, 17,168,178, 52,238,150,214, 40, 89,191, 60, 3, 87,186, 79, 22, -204,156,108,155, 87,134, 83,164, 74,204,149, 88, 40, 60,187,117,245, 52,201,133,103,120,101,174,212,133,153,216,190,105, 67, 33, - 1,219, 49,253,241,209, 59,230,238, 16,169,189,151,191, 72, 42, 10,153,177, 96,181,214,165, 70,109,227,201, 7,249, 89, 5, 26, -211,239,194, 32, 2,169,204, 36,179,180,215,240,132,162, 21,124,181,110, 86,102,230, 19,101,101,135,148, 37, 4,199,110,167, 2, -108,209, 65,220,119, 37,169,104, 30, 31,134,130,137, 45,106,231, 62, 23,154,254,106,153,121, 7, 16,216,123, 54, 52,179, 60,115, -101,101,101, 5, 43, 43, 43,200,229,242,170,150,141, 50, 35, 87, 82,169,212,230,204,153, 51, 98, 11, 11, 11, 48, 12, 3,173, 86, -139, 78,157, 58, 85,171,240, 73, 29,188,251, 55,235,240,225,226, 86,237, 63,192,165, 51,191,178, 55, 79,110,233,163,206,168,194, -252, 61, 0,186,182,105,120,108,233,242,181,181, 39, 77,157, 33,146,137,121,200, 41,212,131,161, 41,184, 59, 72, 96, 43,103,112, -243,226,113,205,128, 46,141,205, 54,127,110, 53,106,109, 95,190,250, 39,219, 21,223,205,125,255,193, 85,157, 99,110,238,203,124, - 0, 80,103, 68,253,244, 44,156,138,172, 81,243,108, 72,163, 54, 31,194,193,213,179,219,203,180,200, 42,229, 55, 35, 35, 35,253, -215, 95,127,125,226,231,231, 23,216,167, 79, 31,178,104,209, 34,235,196,196,196,253,230,154, 43, 0,232,208,185,197,120, 25,223, -208,220, 86, 66,251,213,113,146,162,133,127, 81,235,103,191, 15, 90,161,134, 91, 77, 68,167,170, 26,103,169, 89,129,210,192,175, -179,254,167,205,119,221,109,120,195,141,133,234, 8, 0, 71,170,124,113, 64,241, 69, 82, 90,108,174,196, 60,200, 37,124,176,164, -232, 55,243, 35, 88, 44,116,122, 22, 42,157, 17, 42,173,169,200,108,233, 76, 96,217,162,206,202, 20, 69, 65,111, 48, 85,122, 55, - 88,214, 85,210,194,218, 14,181,107, 21,165,241,213, 75,194, 7, 69, 1,246,246,246,176,181,173,124,222, 81,150,101,161,211, 27, -139, 43, 93,211,171, 65, 29, 58,189, 17,132, 16, 60,123, 22, 53, 57, 54, 38,182,151,167, 87,221, 54,126, 13, 27,219, 72,132, 52, -138,163, 83, 21,221,213, 14, 0, 96, 64,169, 57,211,248, 12, 52,135,126, 61, 40,235,222,163, 71,142, 94,153, 89,122,176, 4, 3, -160, 75,177, 25, 83, 87,245, 48,201,236,189,123, 91,219,218, 44, 28,252,249, 72,239,246, 29, 59,227,242,133,115, 56,250,235,238, -109,170,140,103,103,205, 21,169, 87,175,222,239, 70, 17,214,245,244,254,221, 40,194, 90,181,189,202, 53, 88,150,150, 13, 45, 26, - 6,181,115,139,203,212,227,212,169,147, 80,230,165,126,171,211, 21,170,192, 39, 27,207,255,250,243,176, 1,163,102, 91, 52, 11, - 10,132,149, 66, 10, 59,107, 57,238,223,187,137,239,230,205,184, 9,149,238,253,202,175,159,197,248,250, 10, 92, 37,110, 95,185, -215,169,143,251,183,175,225,197,179,240,199, 15,238,222,172,239,233,223, 20,246, 46,238, 95,197,217, 49, 75,240,228, 73,165, 79, -170, 32, 38,146,248,217,136, 9,197,149, 94,209,178,102,141,106, 11,127, 95, 8, 41, 24, 13,122,211,142, 13,223,165,151, 30, 69, - 88,158,174,166, 32,247,192,213,219,143,190,233,217,185, 53, 85,210, 20, 88, 98,170,222,252,238,233, 42,195,139, 71, 79, 89,131, - 50,239, 96,213, 14, 57, 73, 27, 61,102,156,164, 40,237, 44, 72,209,196,106, 85, 45, 55,208,152, 4, 3,215,207,157, 78,133,197, - 42,241,232,101,126, 81,179, 96,177,193, 18, 9, 24, 8,139,223,205,122, 24, 48, 77, 47,253,244,227,206,200,204,211,129, 37,164, -120, 46, 61, 10, 60, 30, 31,113,249, 64, 66,126, 33, 50,114,211, 16,243, 50, 22,121,169, 49,160,105, 6,182,174,158, 80,197,155, -151,214, 2,147,220,219,192,162,238,199,221, 91, 51,135,111,164, 64, 34,226,161, 32, 51, 1,215,206,236, 83, 19,147,233, 39,157, - 65,183,199,129, 8,195,159,132, 31,208,155,121,233,200,200, 87,234, 28, 69, 2, 6,251,182,172,195, 39, 67, 70,191,138,102, 3, -192, 55, 51,230,131,162, 40,228,228, 21, 2,160, 50,204,136, 92,149,254,158, 81, 42,242,244,187,239,165, 76, 81, 89,223,169,226, -239,186,114, 52,116,111,152, 42,221, 27,203,117,111,232,153, 53, 57,114,185, 17, 44, 62,205,156,219,178,106,186,248,113,186, 8, -119,158,166,162,111,235, 26, 80,229,103, 98,195, 15, 43, 11, 53, 6,125,215,204,112,243,205, 85,113, 65,233,252,201,208,137,143, -235,120,250,234, 46,132, 23,196,228, 42, 13,229,246, 99,104,218,119,250,227,208, 19,235,186,229, 25, 98,198,200,156,253, 76,172, -209,184, 84,157,241,108,110,217, 23,113, 34,156,189,122, 95,145,185, 98, 89, 76,249,110, 59, 8,107, 42,158,192,207, 4, 98, 98, -241,229,183, 63,194, 88,252,217,196,154, 64, 25, 76,210,202,146, 43, 23, 11,206, 54, 40, 92,105,249,166,185, 10, 8, 8,200,181, -178,178,130,173,173, 45,172,173,173, 81, 98,136,222,182, 89,144,166,105,200,229,114, 92,190,124, 25,114,185, 28, 50, 89,245, 38, -200,151, 57,212,251, 36,184, 67,239,157,237,123, 12,165,207, 31,218, 96,186,125,249,120, 95, 77, 70,164,217, 38,192,100, 50, 81, - 6,131, 1,157,219, 53,137,123, 16, 25,127,122,254,220,185, 93,130, 58,124, 36,106, 81,207, 1,106,157, 17,137, 9, 9,184,121, -233,168,198,179,166,221,233, 22,129,222,137, 6,131, 1, 38,147,169,210, 10, 92,171,213,101,209,124,177,109,191,254, 3, 69,119, -239,220,217, 41,117,240,222, 77, 51,108, 24, 49, 49, 13, 65,216, 79, 26, 54,240,133,222,200, 66,173,202,207,174, 78,190, 31, 63, -126,124,119,249,242,229,245,248,124,126,141, 3, 7, 14,100,230,228,228, 84,233,113, 65,231, 78,220, 89,205,147, 27,162, 74, 34, - 88, 9,173,155,163,127,247, 86,216,115,226, 26, 46, 93,185,137, 56,149,252,129, 82,199, 28, 78, 76, 76,214,250, 89,231,253,218, -187,165, 7,115,112,123,254,193,199,237, 38,127, 76,136,228, 92,102,200, 28,179, 7,120, 80, 20,144,175, 54,148,138, 96, 21,245, -111,162,105,202,236, 8, 22, 5,196, 92,185,113,223,191,137,183, 47, 30, 68,231, 35, 35, 71, 11,149,174,168,220, 19, 16,216, 90, - 8, 32, 18, 48,136,123, 25, 3,150,232, 95, 86,173,158, 65, 70,215,190, 35,121,197,183, 47, 60, 62,159,247,170, 67,132, 68, 44, - 44,116,112,112, 48,203, 96, 25, 76, 38,244,233,220, 20,205,130, 26,162,215,168,229, 0,128, 11,219,166,192, 90, 46,192,129, 3, - 7,144,112,125,213,142,218,205, 71,157, 13,127, 20,241,209,227,208, 27, 3,187, 54,145, 52,118,226,165, 8, 42,112,197, 71,138, -155, 8,219, 3,232, 84, 28,153, 50,152,140,108,124,151, 46,157, 89,147,137, 45,221, 39,194, 26, 64,115, 0,217, 0,238, 23,155, -178, 10,110, 0,235,117, 4,141,221,160, 40,177, 92, 34,141,243,240,168,227, 18,212,172,169,101,239, 62, 31, 67, 40, 16,226,252, -185, 51, 88,179,114,201,190,194,148, 39, 67,171,212, 60,102,102,135,246,138,154,139,242,242, 44,149,207, 34, 30,228,196,164,233, -172,121, 86, 94,224,139, 20, 35, 41, 75,151,213,140, 72, 62,219,181,217, 16,139, 11,215,238,224,241,131, 27,112,177,147, 32,230, -197,115, 85,120, 88,232,143, 42,138, 63, 23,153, 79, 84,230,166, 83,154,101,250,168,217,224, 46,214, 26,189, 9, 87, 47,158,208, -176, 70,182,203,173,144,147, 47,220,188,131,196,254, 65,239, 89,103, 30,217,216, 71, 5,236,169, 76, 39,246,206,206,223,117,189, - 96,200,199,201, 39,207, 93,145,187,212,244,100, 64,209,208,170,149,200,136, 11, 55,106,242,211, 84,233,225, 71, 92,204,234, 14, - 96, 76,250,118,214,146,159,198, 52,105, 84, 95, 70,136,240,181,136, 85,201,231,172, 2, 93, 81,159, 89,101, 46,162, 31, 93,211, -100, 60,207,155, 86,241,181,206, 32,205,202,202,126, 53, 52, 95, 82,104, 85, 43,207, 50, 79,244,170, 90,103, 0,203, 60,171, 87, -145,138,172,172,108,161,201,100,144,154,115,122, 90, 41,196,120,244, 50,249, 85,135,118,145,128, 46,238,123,245, 91, 36,203,204, -243,188, 9, 79, 40, 67, 82,150, 6, 52, 33, 96, 89, 35,140, 6, 29, 10,243,243,145,156,148,138,180,180,116, 20, 22,228, 65, 34, -183,130,127,227, 64, 40, 20, 10, 60,185,119, 9, 0,117,204, 44, 51,200, 10,188,130, 2, 3,249,143, 99, 11,160, 55,176,224, 67, -143,171,167,247,106,140, 6, 93,143,244,240, 35, 23, 1, 51, 30, 37, 82,186,121,144, 37,231,195, 35,227,234,187,217, 57, 83,161, -209,185,216,254,243,218,162,209,164,198,162,104,230,227,120, 37,146,179,148, 72, 74,136, 35, 96, 77,231,171,114, 46, 81, 20,117, -183,162,239,213,140,132,189,181, 70,181, 12,150,209,104, 20,215,116,175,133,254, 35, 7,227,199, 31,215,227, 89,116, 28,126,254, - 97, 85,145,185,122,116,248,186,153,250,254, 40,158, 43, 67,149, 22,185, 84, 99, 29,156,120, 44, 44,135, 86,235,136,177,226,139, -157, 7, 90, 15, 93,113, 70, 93,144, 45, 52,105, 85,188, 99, 59,134,238, 46, 75, 19, 0, 24,154,210, 21, 55, 11,130,162, 40,148, - 52, 11,254, 56,111, 56,164, 34, 6, 20, 69, 65,165, 53,226,211,175, 87, 96,219,138,162, 59,171, 47,198, 76, 84,149,151,206, 18, - 35,244,117,243, 40,234,243, 46,181,123, 46,216, 20,113,228, 90,172,109,244, 7, 31,180,205,107,220,184,113,174, 68, 34,129, 76, - 38,131,133,133, 5, 44, 44, 44, 96,101,101, 85,105,222,139,113,172,172,207, 21, 77,211,176,176,176,128, 68, 34, 41,207,184,189, -169,249,186,185,114,244,250, 56,184, 93,175,221, 29,122, 14,163,207, 31,250,153,189,119,249,216,199,154,140,103,135,205, 61, 70, -197, 81,135,176, 62,125,250, 52, 24, 57,114,164, 96,250,152, 62,103,206, 92,190,255,236,215,115, 7,123,100,231, 22,184, 17, 66, - 96,101, 41, 79,232,219,169,193,177,214, 65,245,226, 46, 92,184,192,238,222,189, 91, 75, 81,212,163,202,210,153,153,153,190,229, -194,133,139,223,181,105,219, 14, 63,111,221,253, 65, 68,196,147, 15, 94, 60,143,130,155,123, 29,120,212,241,130,138,178,194,133, -144,171, 40,200, 78,219, 98,230,254,252,237, 7,127,127, 87,134, 97,106,228,230,230,106,190,253,246,219,122, 38,147,233,168,191, -191,127, 32,203,178, 41, 17, 17, 17,137,230,228,253,230,142, 79, 51, 0,108,119,111, 59,100,127,178, 62,247, 43, 0, 75,220,106, -214,196,165, 43, 55,113,235,250,237,245,153,210,154,115, 63, 31,248,217,240, 90,182,252,225,189, 90,212, 98, 28,172,165,216,245, -243,114,230,200,141,216,149,177, 89,134, 95,190, 11,153,179,192,156, 99, 84, 66,118,129, 30, 45,253,108, 97, 52, 18,152, 8, 1, - 77, 81, 80, 72,120,229, 25,172,223,105,242,116,162,161,163, 71,141,124,225,223,176,241,248,129, 67, 70, 10, 26,215,173,137, 59, - 81, 57, 0, 40,216, 90, 72,145,156,156,130,171, 71,127, 49,230, 36, 61, 93,207, 48,236,188,170,236,207,164,208,189,158, 37,159, -157,156,156, 70, 60, 8, 15,199,229,203,151, 97,107,107,139, 18,115, 85, 78, 19,225,107,154, 57, 57, 5,215,231, 47,255,165,229, -240, 65,189,208,189, 93,125,132,220,125, 1,157,129,133,222,200,190,234,228, 26,115,243, 39,225, 87,253,234,232,198,244,241,206, - 87, 25,132,177,179, 99,243, 67,240,250, 36,178,111,166, 83, 7,224, 12,128,166, 0,122, 1, 56,251,198, 51, 6, 41, 20,245,187, -170, 15,224, 38,128, 24,179,242, 78, 99,215,253,187,247,108,245, 70, 22, 87,111,135,249,118,104,217, 24,132, 37,184,123,247, 30, - 54,110,222,168,121,244,240,193, 50,101,154,211, 60,148,255,200,152, 50,247,167,185,163, 8,203, 49, 88,197,154, 33,198,212,216, -122,235,111, 92, 11,153, 33,114, 9,132, 79,183,233, 61,147,194,142,246,116,242,235, 12,187,186, 45,145, 28,118, 24,161,215,119, -157,188,103, 52, 78, 21,179,116,156, 42, 51, 82,105,238,249, 94,130, 72, 44, 29, 91, 63,160, 45, 18,226, 99,241, 50, 42,124,155, - 38,251,121,114,220, 11,102, 91, 82, 98,220, 40, 15,191,150,184,118,102,207,184, 10, 12, 86,133,101,222, 78,152,183,254,242,181, - 27,255,103,239,172,195,163,184,214, 48,254,206,172,103,227,110, 36, 33, 36, 33, 2, 65,130,187, 23, 41, 94, 40,180,104,105,145, - 22,218, 34, 45, 80, 92, 90,104,129, 34, 21, 90,138,187, 67,113, 9, 16, 92, 67, 66,156,184,187,110,214,119,228,254, 65,146, 11, - 52,178, 1,122,111,229,252,158,103,159, 36,155,153,119,206, 57,115,102,230,157,239,216,232,204,195,191, 59, 42,202,213, 38, 66, - 33,173,146, 10,144, 43, 86, 37, 28, 52, 58,157,209,209,250, 18, 47,139,225,239, 79, 89,120,102,253,183,139, 68, 14, 86, 82,228, - 20,107, 80,166, 50,160, 76,109,128,128, 2,124, 92,204,160, 86,150,225,238,217,221, 6, 94, 95, 52, 28, 8, 53,212,164,105,215, -100,240, 74, 77, 97,210,244,133, 11,231, 67, 32,177,112,241,236, 57, 95,255,204,149,191, 52,153,185, 13,224,217,104, 62,180,101, -217,131, 22, 46,156,239,199,243,124, 47,187, 38,131, 21,207,173, 69, 88,109,222, 11, 21,122,140,233,225, 6,157,225,217,252, 97, - 44,251,172,175, 29, 87, 49,171, 57,106,143, 43, 87,105,242,128,248,208,153, 59,200,204, 45,134, 90,107,128, 78,207, 64,199,176, -160,105, 1,172,173,173,225,211, 40, 8, 86,150, 22,200, 43, 40,196,131, 59, 55,113, 55,238,113, 18, 15,172, 44,176, 41,221,107, -204, 57,162,132,166, 62,142, 14,118, 84,174, 66, 7,153, 84,128,187,215, 66, 12, 0,118, 84,154,171,250, 60, 59, 0,160, 84, 85, -242,253,188, 21, 27,223,251,121,221, 18,167,230,158, 22, 72, 47,208, 32, 35, 95, 13,133,134, 1,192,131, 97,121,232, 52,165,136, -125,112, 62,135,129,234,123,252,195,169, 57,130, 37, 18,105, 31,132,199, 73,231, 45, 93,131,232,248, 36,108,221,252,131, 82, 91, - 63,115,245, 7,118,124,210,232,192,159,145,137,234,154, 5, 57,158,199,169,187, 57, 85,203,126, 84, 54, 21, 62,138, 47,169, 75, - 78,180,102, 70,203, 47, 43,141,208,166,227,153,119,165,210, 2, 46, 45, 45,173,120,239,222,189, 85,166, 71, 32, 16,160,178,191, -148, 78,167,171,115, 84,145,181,133,164,233,216,254, 13, 71,213,100,174, 4, 2, 1, 56,142,171,138, 94,213,183,233, 81,110,239, -219,167, 77,247,161, 7,122, 14,249,144, 14, 62,241, 27,247,240,218,239, 35,148,249,113,199,235, 91,150, 37, 37, 37,145, 0,158, -174, 93,187,182,229,214,173, 91, 27,205,153, 51, 39,241,183, 85, 83, 55, 61,123,131,123,246, 46, 19, 26, 26,202, 79,155, 54, 77, -171,209,104,146,138,139,139, 31,193,136, 69,174, 85,185,177,107,119,252,252,157, 95,122,102,246, 4,239,166,237, 96,231,217, 22, - 78,222,237, 80, 84,174,199,189,248, 76, 36, 70, 5, 35,250,246,145,131,234,124,199,111,128, 56,163,211,219,162, 69, 11,119,154, -166, 7,241, 60,239,107,106,106,234,201,243,188, 68, 40, 20,142,164, 40,234, 41,195, 48, 81, 1, 1, 1,193,209,209,209, 70,175, - 25,150, 26,178, 83,235,209,109,194,198, 84,149,105,247,196, 28, 85, 80,170,202, 52, 84, 37,181,156,149,127,101,163,118,167,192, -117, 61, 12,133,145, 71,118,149, 30,219,183,101,157, 96,204,228,217,108, 68,145,197,103, 66, 51,147,122, 69,203,104,138,202,158, - 51,231,139,255, 78,211, 64, 61,107, 24,172,152,178, 33,203, 24,141,138, 57,141,230,134, 71,137,126,140,248,124,234,138,102,109, - 58,141,237,214,111, 20,109, 38, 54,197,165,227,191,240, 73,225, 87, 15, 11,121,118,129, 58, 63, 49,233,117,175, 47,157, 78,247, -130,177, 50, 38,122, 5, 0,249,182,165,221,207, 92,188, 54,225,244,249,144, 85,253,251,116,182,253,105,209,187,248,238,215,147, - 48,147, 75,193,115, 44,222,237,225, 54, 98,241,135,254,131,220, 28,101,174, 71,175,102, 92,159,190, 62, 98,174, 74,165,143, 67, -221,235,222,241, 0,238, 2,240, 1, 48,168, 98,123, 83, 0, 74, 0,229, 21,255, 63, 81,241,183,209,232, 25, 14,201,185, 26,156, - 60,118, 4, 97,247,130, 17, 29, 29,171,136,142,138,254,129, 18,242,235,149,185, 79,139,128,167,245, 46, 59,182,218, 17,131,168, -126,100, 97, 45, 40, 5, 38,223,132,158, 94,211,189,113,207, 79, 59,216,122,119,130,181,199, 51, 79, 89,154, 17,129,244, 7, 71, - 78, 42,178,196, 35,129, 72,131,242, 21,207,177,139, 91,163,198,156, 64,130,219,215,206,130,231,184,205, 0,192,115,220,230,199, - 55,207, 78,109,215,127, 18,108, 28, 60, 90,148,164,133,214, 58,149, 79, 77,152, 8,153,210, 51, 59,191, 57,156,156,156,140,152, -152, 24,196,199,199,163,168,168, 8,251,246,221, 40,173, 87, 87,128,196, 59,151, 40,129,176,239,123, 19, 63, 63, 53,236,157, 97, - 50,119, 79,111,218,175,129, 5,108,205,133,136, 77,200, 68, 66,196, 83, 46, 62,252,186,134, 87,231, 13,205, 79,184, 93, 99,116, -196, 46, 96,132, 35, 77, 27,230, 5,255,254,108,109,193,222, 67, 62,240,251,114,250,156,246, 54,182,214,213,222,199,139, 10,139, - 37, 75,151, 46,246,171,220,190,174,181, 8,105,129, 64, 49,121,234, 12, 83,154,162,171,154, 1,249,202, 98,171,252,193,243, 0, - 5,136, 69,194, 58, 79,217,132, 97,157,193,112, 28,202,213,122,148,171,244, 40, 41,215, 32,167,160, 4,145, 81, 9,184,127,227, - 28,146, 19,226, 21, 12,195, 92, 5,143, 99,249,182,165, 7,171,153, 88,183,230, 8, 43, 4,238, 54,214,230, 72, 46,214,192, 68, - 44, 68, 86, 90, 60,163,103, 52,175, 60,201,122, 97,216,169,108, 65,211,193,111, 77,252,248,171,243, 93,187,118,177,104, 30,212, -218,212,206,194, 28, 98, 33,133,132,180, 92, 60, 9,125,160, 76,141,123, 92,198, 26,212,253, 10, 35, 79,189,246, 42, 45,127, 91, -131,165,103,153,222,179,191, 90,125,145,101, 89, 19,161, 64,160, 54,240, 92,191,215, 49, 87,127, 22, 60,207,101,124,252,217, 23, - 47,188, 16, 24, 88,206,228,195,143,231,168,159,127, 65,160, 12,172,188, 50,114,197,243,124,109, 81, 13, 65,126,137, 86, 49,255, -231,176, 93,223,238,138, 58,130,103, 51,184,102,188,110, 58,139,203,116, 97,182,125, 14, 13, 81,168, 24, 10, 64,116, 53,154,202, -158, 61,123, 86,153,173,138,230, 58,163,239,151, 18,153,124,106,143, 65, 31,208,193, 39,183,114, 15,174,158, 28,249, 42,230,234, -249,211,175,209,104,238,105, 52,154,136, 5, 11, 22,180,113,116,116,116, 92,188,120,177,172,172,172, 76,244,211, 79, 63,105, 10, - 10, 10,114,202,202,202,238,160,126,253, 90,184,226,140, 39, 19,207, 28, 53,252, 66, 29,217,246,150,181,131,107, 95, 43, 59, 55, -223,226,252,140,132,178,194,140,243, 20,135, 75,229,249,113,119,234,155,208,176,176,176,180,192,192,192, 19, 2,129,160, 1,203, -178,118, 20, 69,153,241, 60, 95,204, 48, 76, 49,199,113,217,245, 49, 87,207,155, 44, 55,255,206,251, 11,213,156, 68, 79,201,246, -167,134,236,212, 2, 64,222,165, 47, 84, 0,126, 71,247, 47,135,157,188,157,252, 67,100,177,197,140,252,144,239, 78,213, 87, 63, -235,241, 33,159, 55, 85,255, 53,217, 81, 25, 0, 38, 60,121,136,117, 17,161,119,150, 80, 60, 68, 44,152,149,234,188,248,135,111, - 66, 95, 36, 18,105, 90,183,110, 93,237,104, 65,169, 84, 90,251,188,101, 33, 33, 76, 30,176, 21,221,186,237, 60, 31,124, 99,194, -185, 75, 55, 87,181,239,208,217, 86, 38,117,129,135,181, 30, 59,191,104,245,105,112,104,254,253,193, 95, 92,255, 57, 49, 75, 19, -142,218,251, 95, 85, 71, 60,128,210,138, 72,214, 22, 0,147, 43,174,173,136,122, 27, 1, 14,239,119,232,208,118, 31, 69, 81, 66, -158,225,190,187, 35, 18,236,215,100, 71,103,224, 53,151, 15,105,238,105,129,201, 83,167, 54,246,242,254,239, 40,194,166, 13,205, - 49,102,194, 71,141, 61, 26, 53,174,250,206,207,173,142, 23,170,236, 80,117,185, 67, 96,159,216,139,107, 23,217, 38,220,250,216, -196,166,129,153,178, 32,165,168, 56,229,225, 90, 85,158,227,218,106, 86,104,168, 23,201,241,145,235,183,173,155, 59, 39, 59, 51, - 97,171, 42,255,233,179, 86,135,252,167, 17,209,143,176,168, 32, 39, 99, 78, 97, 94,226,218, 87, 45, 11,165, 82,153,181,119,239, - 94,171, 78,157, 58,209,142,142,142,200,207,207,199,213,171, 87, 57,142,227, 50,235,171,149,247,244,198, 85,120,121,217,236,223, - 89,250,157,208,196,124, 0,195,194,133,231,121, 8,105, 42, 91,175, 45, 61,159,111,165,254, 2, 79,238,214, 90,143,120,142,165, -120,154,167, 43,215, 22,228, 56,142, 90,243,227,238, 20,129, 72, 82,109,147, 42,107,208,201, 57,142, 51,122, 45,194, 92, 65,170, -109,160,193,191,238, 81,124, 60, 16, 65,197,212,241,114,202, 95,232,216,127, 92, 95,134, 97, 13, 21,215, 71,229, 39,143,231,169, - 43,160,216,139, 5, 54,138, 59,245, 49, 85, 47,220,232,245,122, 43,208, 98,152,203, 13,160, 65,161,172,180, 84,106,207, 74,162, - 11, 94,163, 46,229, 69,254, 30,153,215,173,155,135,238,242,149,241, 33, 55,110,141,228, 57,206,147,229, 1,240, 84,178, 78,175, - 57,156,103, 81,176,235, 85,211,251,119,131,250,147,245,141,106, 46,249, 11,106,138, 1,216,225,217,148,248,185,111, 56,157, 53, -174, 45,248, 58,121, 55,115,242,239, 44,149,201,191, 80,169, 20, 91,213,121, 79, 79,189,225,242,180,148, 74,165, 65,102,102,102, -162,130,130,130,123, 21, 15,181,127,226,121,175,162,243,196,237,118, 61,251,118,252,252,210,153,251, 27, 43,154, 15,171,112, 29, -241,189,108,204,128,174,179,118, 31, 59,189,190,154, 81,132,127,251,188,255,105,154,221,186, 9, 29,138, 45, 38,176, 44,183,178, -103, 99,133, 42, 39, 41,118,218,141, 39,249,247, 0, 40, 94, 51,157,239, 61, 23,193,218,255, 87,201,187,125,211, 33,203, 65, 33, -192,104, 5, 30,209,249,145, 39, 23,215,153,206,128, 0,177, 60, 31,214,170, 2,187,194, 87, 48, 86,255,143,186, 36,104,214,172, - 89, 23,177, 88,236,206,178,172, 92,167,211,169,212,106,117,114, 74, 74,202,109,212,188, 32,249,159,154, 78,135,192, 33,235, 69, - 34,209,103, 0, 96, 48, 24, 54,230, 69,156,156, 89,219,142,181,108,255,231,151,231,136, 17, 2, 28, 57,194,254, 25,231,200,165, -229, 59, 37, 6, 3, 99, 89,245,224, 19, 9, 75, 51, 31, 31,181,250, 63,214,165,127, 12, 70, 13, 98,120, 3, 39,149,104, 18, 77, -162, 73, 52, 95,134, 38,229, 73, 52,255,159,154,206, 1, 3,221,156, 3, 6, 26, 61, 89,114, 13,219,147,242, 36,212,104,176,132, -164, 24, 8, 4,194,255, 1,142, 20, 1,225,255, 73,118,244,233,244, 63,115,123, 2,129,170,197,133,214, 39,244,247, 42, 78, 54, -130,104, 18, 77,162, 73, 52,137, 38,209, 36,154,255, 58,205,186,180,255,246, 77,143,164,137,144,104, 18, 77,162, 73, 52,137, 38, -209, 36,154,127, 21,205,127, 12, 60,207,131, 38,197, 64, 32, 16, 8, 4, 2,129,240,102, 33, 6,139, 64, 32, 16, 8, 4, 2,129, - 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2, -129, 64, 32, 16,254, 18,144, 81,132, 4, 2,129, 64, 32, 16, 8,127, 2,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, - 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, - 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,235,213, 32, 43,141, 19, 77,162, 73, 52,137, 38,209, 36,154, 68,147, 24, 44, 2, -129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, - 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,225,255, 5,133,154, 71, 2, 68,212, 67,231, 85, 70, 19, 68, 16, 77,162, 73, 52, -137, 38,209, 36,154, 68,243, 95,167, 89,151,118, 4,254,230,240, 60,255,167, 31,131, 12, 97, 37,154, 68,147,104, 18, 77,162, 73, - 52,137,230,191, 10,158,231, 73, 19, 33,129, 64, 32, 16, 8, 4,194,155,134, 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, - 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,129, 64, -248, 75, 64, 70, 17, 18, 8, 4, 2,129, 64, 32,252, 9, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, - 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, - 64, 32, 16, 8, 4, 2,129, 24,172, 87,131,172, 52, 78, 52,137, 38,209, 36,154, 68,147,104, 18, 77, 98,176, 8, 4, 2,129, 64, - 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2,129, - 24, 44, 2,129, 64, 32, 16, 8,132,255, 23, 20,106, 30, 9, 16, 81, 15,157, 87, 25, 77, 16, 65, 52,137, 38,209, 36,154, 68,147, -104, 18,205,127,157,102, 93,218, 17,248,155,195,243,252,159,126, 12, 50,132,149,104, 18, 77,162, 73, 52,137, 38,209, 36,154,255, - 42,120,158, 39, 77,132, 4, 2,129, 64, 32, 16, 8,111, 26, 98,176, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, - 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,225, 47, 1, 25, - 69, 72, 32, 16, 8, 4, 2,129,240, 39, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, - 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, - 16, 8, 4, 98,176, 94, 13,178,210, 56,209, 36,154, 68,147,104, 18, 77,162, 73, 52,137,193, 34, 16, 8, 4, 2,129, 64, 32, 16, -131, 69, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, - 2,129, 64, 32, 16,254, 95, 80,168,121, 36, 64, 68, 61,116, 94,101, 52, 65, 4,209, 36,154, 68,147,104, 18, 77,162, 73, 52,255, -117,154,117,105, 71,224,111, 14,207,243,127,250, 49,200, 16, 86,162, 73, 52,137, 38,209, 36,154, 68,147,104,254,171,224,121,158, - 52, 17, 18, 8, 4, 2,129, 64, 32,188,105,136,193, 34, 16, 8, 4, 2,129, 64, 32, 6,139, 64, 32, 16, 8, 4, 2,129, 24, 44, - 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16, 8, 4, 2,129, 64, 32, 16, 8,132,191, 4,100, 20, 33,129, 64, - 32, 16, 8, 4,194,159, 0, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,131, 69, 32, 16, 8, 4, - 2,129, 64, 12, 22,129, 64, 32, 16, 8, 4, 2,129, 24, 44, 2,129, 64, 32, 16, 8, 4, 98,176, 8, 4, 2,129, 64, 32, 16,136, -193,122, 53,200, 74,227, 68,147,104, 18, 77,162, 73, 52,137, 38,209, 36, 6,139, 64, 32, 16, 8, 4, 2,129, 64, 12, 22,129, 64, - 32, 16, 8, 4, 2, 49, 88, 4, 2,129, 64, 32, 16, 8,196, 96, 17, 8, 4, 2,129, 64, 32, 16,136,193, 34, 16, 8, 4, 2,129, - 64,248,127, 65,161,230,145, 0, 17,245,208,121,149,209, 4, 17, 68,147,104, 18, 77,162, 73, 52,137, 38,209,252,215,105,214,165, - 29,129,191, 57, 60,207,255,233,199, 32, 67, 88,137, 38,209, 36,154, 68,147,104, 18, 77,162,249,175,130,231,121, 8, 73, 49, 16, - 8, 4, 2,129, 64, 32, 24,103,156,140,165, 90,131, 37,108,187, 50,151, 97, 24, 7, 0, 16, 10,133,121,134,251, 11,157,106, 19, -113,115,118,238,205, 2,191, 1,128, 0,248, 40, 35, 59,251, 82, 53,154,151, 24,134,177,174,208, 44, 54,220, 95,248, 86,109,154, -162,182, 43, 47, 62,191, 61,115,127, 97,159, 63,100, 20,160, 69,109, 87,102,191,148, 86,103, 99, 51, 79, 1,220,255, 34,157,127, - 23,205,127, 51,162,118, 43,115, 13,134,103,245, 72, 36, 18,230,233,239,213, 94,143,196,237, 86,102, 63,191,189,225,222, 66,199, -151,183,145,116,248, 38,205, 96, 96,156, 1, 64, 42,145,228,251,120, 56,110,168, 77, 51, 49, 61,239,115,181, 70,107, 95,161,153, -173,187,243,149,251,223,245,218, 52, 22, 71, 71,199,214, 52, 77, 47,164, 40,202,226,185,175,195,179,178,178, 62, 39,181,146, 64, - 32,252,157,169,214, 96, 49, 12,227,240,232,248, 18, 40,181, 64,175,113, 43, 29, 26, 13,221,178,239,229,109, 12,154, 98,137,234, -233,201, 38, 2, 67,137,181,149, 9,111,253,244,233, 83, 26, 0, 92, 92, 92,126, 3,224, 94,141,166,245,163,227, 75,160,210, 1, - 93, 71, 47,179,110,225,225, 97, 81, 70, 81,179, 77, 76, 76,122,106, 52,154,166, 0, 32,147,201, 34,213,106,245, 21, 11,158, 95, -247,242,246, 53,101,224,249,180,246, 28,187,210,193,119,216,111,159,178, 44, 43,209, 38, 30,234,198, 41, 82,133, 2, 86,247, 99, -191,236,236,115,191, 2,172, 49, 5,242,252,113,187,141,250,202,214,205,217,185,183,137, 92,222, 90,110,102,214,133,101,217, 0, -142,227,192,113, 92,180, 90,169,188,193, 24, 12, 15, 89,131,202,246,209,137,111,184,218,210,249,114, 94, 90, 1,194, 60, 39,167, -145, 38,102,102,221, 5, 2, 65, 39, 0, 96, 89,246,150,186,188,252,154, 67, 78,206, 97, 99,242,110,108,249,188,234,246,255, 54, - 12, 6,198, 33,233,194, 18,104, 13, 64,208, 59,171, 28,154,191,191,107, 63, 0,232,242,194, 28,203,159,254,222, 14, 0, 76,189, - 7,222,147, 58, 5,229, 2,128, 48, 53,219, 33,238,244, 2,104, 13, 64,192,192,101, 14,213,105,234,116,122,183,248,179,139,160, - 53, 0, 31, 46, 61,226,252,197,212, 17,114, 0,184,122,226, 87,239,139, 71, 54,190, 13, 0,111,141,248,236, 76,143,161, 83, 18, - 0, 96,205, 47, 71,156,247,126, 61, 2, 90, 3, 16, 56,100,133,219,171, 94,155,140,182, 84, 92, 18,119,218,199, 80,150,101,237, -102, 42,116,170,239,181,105, 9, 88,150, 3,211, 41,129,160,179,143,143, 79, 43, 0, 72, 72, 72,120,196, 49,204, 77, 51,224,199, - 55, 89,151, 4, 2,193,167,153,153,153,131,158,255,206,213,213,149, 84, 72, 2,129,240,207, 52, 88, 0,160,212, 2, 33,241, 64, -183,246,205, 49,121,204,219,102,207,255,239,196,142,213,110,153,145, 23, 3,214, 28,216, 32,240,245,245,197,211,167, 79,141, 58, -152, 74, 7, 92,123, 10, 72, 53,201,230, 42,145, 40,113,233,194,133, 22,157, 59,119, 22,186,184,184, 0, 0,242,242,242,218,223, -184,113,163,245,178,101,203,166, 73, 53,201,197, 42, 29, 20,215,140,144,174, 76,107, 83,223,134, 88, 48, 99,180, 37, 0,108,152, -125,184,245,217,219, 97, 54,201,201,201,189,190,249,230,155, 66,215, 59,119, 54,155,113,220,246,216,220,220,116, 99,210,121,240, - 92,168,137,143,254, 82,163, 17, 31,124,112,204,221,221, 93,222,160, 65, 3, 74, 38,147, 65, 32, 16,160,188,188,220, 37, 54, 54, -182,247,227,199,143,213,215,239,156, 20,133,133, 14, 79,202, 18, 5,169,141,201,187,152, 41,144, 41, 27, 55,142, 26,209,191,127, -131,129, 3, 7,202, 60, 61, 61, 1, 0,201,201,201,141,207,156, 57,243,222,217,179,103, 23,139,153, 2, 70,165,131,166,174,188, - 87,106, 2,128, 8,232,104,227,224, 48, 70, 36, 18, 5, 50, 12,227, 90, 17, 93,200, 52, 24, 12, 17, 69,121,121,123, 95,222,158, -240, 71,180, 6, 32, 58, 27,232,221, 37, 8, 99,135,247, 54, 5,128,185,163,190,110,159,154, 28, 47,214,233,116,240,245, 11,232, -180, 98,213,247, 23, 64,211,216,115,236,114,213,246,181, 26, 91,158,198,211, 60, 32, 60, 38, 9, 75,190,222,196,231,132, 31,105, -195, 20, 71,245, 41, 44, 40, 16, 2,128,173,157,221,200,131,251,247, 94,114,106, 62,226, 65, 66,174,178,106,123, 99,234,123,117, -215,230,217, 3,155, 92, 50, 35,174, 52,249,249,194, 86,145,187,187, 59, 34, 34, 34,234,117,109,162, 52,214, 92,238,236, 28,189, -244,139, 47,156,186,118,237, 10, 83, 83, 83,136, 68, 34, 24, 12,134,222,183,110,221,234,189,100,201,146,105,101,165,177, 74, 99, -175, 77, 35, 98,135,235, 28,125,187,245, 24, 54,120,128,115,207,110,237, 49,188, 95, 39, 82, 17, 9, 4,194, 63,215, 96, 9,133, -194,188, 62,227,191,113,232,210, 46, 16, 15,194,226, 74,147,211,114,202, 43,255, 87, 18,115,188,241,212, 97, 45, 2,183,156, 61, - 13,189, 94,143,219,183,111,227,225,195,135,184,125,251, 54,191,110,221, 58,181, 0,248,168, 6,205,226,174,163,151, 89, 75,181, -233,102,173,108,211, 61, 15,238,191, 38, 80,171,213, 8, 9, 9, 65,113,113, 49,164, 82, 41, 92, 93, 93,209,165, 75, 23,225,213, -171, 87,109, 70,189, 55,198,242,173,161,147,146,180, 82,183,114,161, 80, 88,204,212,148, 1,161, 48,175,215,184,149, 14, 77, 26, - 55, 68, 66, 74, 86,233,130, 85, 91,203, 57,150, 23,106, 82, 51,244,215,175, 95, 71,203,150, 45,113,240,224, 65,219,226,226,226, - 69, 59,119,238, 92,232,248,195,142,141,185, 25,177,179, 81,179, 94,113,215,209,203,172,125,217, 96,247,195,251,182,139,195,194, -194,196,155, 55,111, 70, 81, 81, 17, 36, 18, 9, 44, 45, 45,225,228,228, 4, 95, 95, 95,106,218,180,105,242, 30, 61,158, 98,193, -236, 15,220,115,172,135,197,214,148,206, 74, 77,177, 46, 91,222, 88,240,208,251,183, 93,187,232,182,109,219, 82,207,111,227,238, -238,142,238,221,187,203,134, 13, 27,230, 61,237,147, 25, 92,239, 97, 83, 18,244, 18,103, 85, 93,154, 80,166,155,216,170,238,184, -244, 30, 61,250,212,210,165, 75,173,156,157,157, 33,151,203, 1, 0,165,165,165, 13, 82, 82, 82,218, 47, 89,178,100,196,189,240, -131,194,174, 3,211,179, 96,234,166,174,173, 60,255,173,136, 68,194,188,202, 72,148,185,169, 73,113,122, 70,174,242, 89, 20, 74, - 7,157, 78, 7,173, 86,139,143,167, 77, 17,124,244, 78, 91, 31,143, 46,159, 62, 78,206,204, 45, 10,184,124,215,166,114, 95, 67, -245,154, 5, 77, 6,175,176, 6, 0,186, 44, 73, 89,156,114,241,195,121, 51,103,186, 58, 57, 77,133, 88, 44, 6, 0,236,216,190, - 93, 88, 88, 88,216,127,197,138, 21,129,188,105,175,178, 38,131, 87,152, 86,236, 91,108,168,231,181, 89, 28,119,186,209,215,211, -251,182,248,109,213,105,176, 44,139,187,119,239,226,250,245,235,248,254,251,239,249,115,231,206,149, 90,152,154,214,122,109,162, - 52,214,188,179,115,142,215,183,223, 30,165, 36, 18, 9, 78,158, 60,137,152,152, 24,208, 52,141,230,205,155, 99,236,216,177,232, -221,187,183,211,228,201, 83,248,174,253, 70, 37,194,210, 79,241,122,117,105, 41,205, 88, 63,249,116,250,228,247,157,223, 25,210, - 23,155,126,248,153, 24, 44, 2,129,240,207,134, 7, 40,207,161, 91,246, 31,126,196,159,246, 28,186,101, 63, 15, 80, 60, 64, 73, - 1,247,158, 61,123,234,202,203,203,249,176,176, 48,126,228,200,145,197,115,191,248, 98,219,174, 29, 59,150,106, 85,170,143, 91, -181,104, 49,150,127, 54,245, 67,245,154, 86, 86, 22, 94, 94, 94,249,233,233,233,252,185,115,231,248,101,203,150,241,251,246,237, -227,207,159, 63,207, 7, 7, 7,243,231,207,159,231, 15, 29, 58,196,135,133,133,241,241,241,241,188,183,183,119,190,167,149,149, - 69, 45,154, 52, 15,208, 62,195,126,157,125,228, 33,187,180,241,176,223, 62,231, 1,218,219,201,201,175, 79,159, 62,236,209,163, - 71,249,189,123,247,242,187,118,237,226,195,195,195,249,130,130, 2,222,213,195, 43,191,114,191,154,210,201, 3, 84, 80, 80, 80, -126, 73, 73, 9,239,238,238,206,139,197, 98,222,193,193,129,247,245,245,229,219,183,111,207,247,235,215,143,127,239,189,247,248, - 69,139, 22,241, 37, 37, 37,188,135,135, 71,110,229,126, 53,105,182,119,117,149,121,123,123,167, 61,121,242,132,175, 9,141, 70, -195, 23, 20, 20,240, 87,174, 92,225,189,189,189,211,218,187,186,202,106,211, 20, 1, 65,129,129,129,249, 5, 5, 5, 60,199,113, -188, 74,165,226, 11, 11, 11,249,194,194, 66,190,184,184,152,215,233,116, 60,199,113, 60,199,113,124,108,108, 44,239,229,229,149, - 39, 2,130,106,210,252,151,215,121,186,186,143,171,163, 99, 63, 39, 39, 39,245,209,163, 71,249,204,204, 76,126,231,206,157, 60, - 13,124,253,242,118,213,105,142, 8, 24, 33, 14, 10,154,108, 34, 16,152,188,221,177, 99, 71,246,246,237,219,252,163, 71,143,248, -121,243,230,241,131, 6, 13,226, 7, 15, 30,204, 47, 93,186,148, 79, 75, 75,227,211,211,211,249,183,222,122,139, 21, 8, 76,222, - 14, 10,154,108, 50, 34, 96,132,184, 62,215,166, 12,112, 27, 56,112,160, 90,175,215,243,137,137,137,124,211,166, 77, 51, 4,192, - 24, 49, 16,224, 5, 72,234,170,159, 22,128,149,179,179,115,246,157, 59,119,248,163, 71,143,242, 30, 30, 30,249, 2, 96,162, 20, -240,148, 2,158, 2, 96, 98,163, 70,141,242,239,220,185,195, 23, 20, 20,240,238,238,238,217, 22,128,213,171,215,165,165,180, 67, -211,161,219, 87,252,112,148,143,205, 80,242, 43,126, 56,202, 59,250,118, 79,227,121,158,119,118,118,190, 68,106, 36,129, 64,248, - 75, 62, 43,120,222,232, 79,189, 70, 17,210, 38, 38, 75, 86,173, 90, 37, 86,171,213, 88,190,124,121,254,199, 83,167,174,180,115, -112,208,139, 68, 34,136,164,210,186, 5, 44, 44, 62,159, 63,127,190,149, 78,167, 67,104,104, 40, 90,181,106, 5,153, 76, 6,145, - 72, 4,177, 88, 12,161, 80, 8, 39, 39, 39, 20, 20, 20,192,209,209, 17,211,166, 77,179,252,113,211,166,207, 81, 82,178,188, 54, - 89,142,229,133, 0,192,178,172,196,205,197,101,114,211,102,205,214, 77,155, 54,141, 54, 53, 53,133, 86,171,133, 86,171, 69,108, -108, 44,108,109,109, 33, 55, 49, 49, 42,207, 52, 77,211,102,102,102, 8, 9, 9,193,246,237,219,145,148,148,132,172,172, 44, 88, - 88, 88,160,101,203,150, 8, 8, 8, 64,167, 78,157, 16, 31, 31, 15,138,162,234,124,200,228, 10, 4,211,199,142, 30,237, 16, 24, - 88,253,200, 86,173, 86,139,146,146, 18,148,148,148,192,209,209, 17,253,251,247,119, 56,117,242,228,116, 0,107,171,219, 94, 14, - 56,121, 54,110,124,234,254,253,251,118, 52, 77, 35, 36, 36, 4, 42,149, 10, 26,141, 6, 12,195,128,162, 40,200,100, 50,116,232, -208, 1,182,182,182,104,220,184, 49,142, 31, 63,110,223,167, 79,159, 51,242,220,220, 32, 0,217,228, 82,169,155,140,220,220,139, -173, 0,219,247,223,127,255, 92,120,120,120,215, 49, 99,198, 32, 55, 55,247, 43,193,188,121,197, 44,176,190,182,125, 15, 71, 31, - 97, 26, 0,166, 54,246,246,191,174, 94,189,154,206,201,201,193,172, 89,179, 10,179,210,211,231,203,128, 59, 0,112,230,247,223, - 59,236,222,189,123,213,222,189,123,109,119,237,218, 69,183,106,213,106, 75, 94,232,150, 38,143,128,210,250, 56, 23, 13,240,233, -134, 13, 27,100, 26,141, 6,125,250,244, 73, 84, 37, 39, 55,103, 0,181,177,251,151, 3,211,151,126,241,133,147, 84, 42,197,156, - 57,115, 10, 10, 82, 83,155, 50, 64,254,115,155,164,152, 38, 37,157, 27, 55,110, 92,100,120,120,184,221,250,245,235,157,222, 25, - 54,108, 58,128,149,198, 30,227,191, 29,218,105, 11,214, 44,164,241,208,126,253, 29,253, 26, 57,224,232,201, 11,248,113,203,190, - 29, 40, 73,248,213,213,213,117, 58, 77,211,107, 72,205, 35, 16, 8,127,119,234,101,176,172,173,173, 91,123,123,123, 35, 56, 56, - 24,254,254,254,199, 29, 42,205,149, 72, 4,150,173,187, 15,185,137,169,105,175,174, 93,187, 10,111,223,190, 13, 79, 79, 79,152, -152,152, 84, 25,171, 74,147, 37, 18,137,224,228,228,132,210,210, 82,116,238,220, 89,180,125,251,246, 94, 0,150,215,165,157,157, - 18,107,134,196,237,239, 47, 91,177,194,171,117,235,214,208,235,245,207,140,136, 92, 14,173, 86, 11,145, 72, 4,189, 94, 15,141, -142, 47, 51, 38,175, 44,203,178, 2,129, 0,238,238,238, 88,188,120, 49, 52, 26, 77, 85,179, 78, 89, 89, 25, 74, 74, 74, 16, 26, - 26,138,228,228,100,112, 28, 87,231,184, 77,185,153, 89,255,193,131, 7, 75,170,251,159, 78,167,171, 50, 87,165,165,165,208,104, - 52,104,209,162,133,228,202,149, 43,253,107, 50, 88,148, 76, 54, 98,215,174, 93, 14, 18,137, 4, 26,141, 6, 79,159, 62, 69, 66, - 66, 2, 98, 99, 99,181, 69, 69, 69,140,153,153, 25,229,236,236, 44, 40, 45, 45,149,140, 27, 55,142, 82, 40, 20, 0,128, 97,195, -134,217,238,216,182,237, 93,232,116,235, 73,245, 55,142, 71,128,214, 91,167, 27,212,182,109,219, 43, 15, 30, 60,104,245,217,103, -159, 33, 60, 60,252, 59,249,193,131,215, 85,192,227, 90,235, 37, 48,109,205,220,185,206,166,166,166, 24, 59,118,108,145, 42, 61, -189, 57, 3,228, 60,183, 73,156,109,114,242,249,241,227,199, 71,132,135,135, 91,175, 95,191,222,233,221, 17, 35,166, 1, 88, 85, -159, 52, 90, 90, 90,182,117,114,114,194,249,243,231,145,150,156, 60,183, 62,230, 10, 0, 40,129,160,115,183,110,221,112,226,196, - 9,100,164,166,206,125,201, 92, 1, 0,148, 64,190, 48, 49,113,238,142, 29, 59,182,127,240,193, 7,160,133,194,206, 96,140,111, - 32,172,174, 67,251,199,115,215,224,248,249,187, 59,242, 34,155,125, 8,156,224, 0,220, 39, 53,142, 64, 32,252, 19,168,215, 82, - 57,141, 26, 53,106, 36,149, 74,145,146,146,130,118,237,218, 37,139, 36, 18, 72, 37, 18, 72, 77, 76,140,123,203,214,104,154, 57, - 57, 57,161,172,172, 12,118,118,118, 16,139,197, 16,139,197,144, 72, 36,144, 72, 36, 85,127,155,155,155,131,166,105,184,186,186, - 66,163,209, 52,171, 75,151, 41,125,234,112, 97,231,220, 79,206, 30,223,237, 53,108,216, 48,184,184, 56,195,213,213, 5,166,166, -166, 16, 10,133,112,119,119,135,183,183, 55,182,109,219, 6,202,162,241, 61, 99,210,250,188,105, 18, 8, 4, 96, 89, 22,185,185, -185,136,141,141, 69,120,120, 56,238,220,185,131,208,208, 80,148,151,151, 27,149,119,149, 74,213,178,186, 64,215,203,230,170,164, -164, 4,249,249,249, 72, 72, 72,128, 66,161, 8,170,209,236,218,218, 14, 15, 12, 12, 20, 0,128, 76, 38, 67,163, 70,141,240,203, - 47,191, 48,151,206,159,127,215,228,193, 3, 43,246,202, 21,203,253,123,246,188, 59,105,210, 36,246,222,189,123, 40, 43, 43, 67, - 92, 92, 28,236,237,237,133, 82, 19,147,119, 73,213,175, 31, 9,128,210, 84,161,232,215,177, 99,199,164,210,210, 82,172, 89,179, -134, 22,154,155,255, 58, 5, 16,212,122,129, 9, 4, 93,122,244,232,129,147, 39, 79, 34, 35, 53,117, 94,225,139,230, 10, 0, 80, - 8,228, 36, 39, 36,204,221,177, 99, 7,250,247,239, 15,161, 80,216,165,190,233,107,223,190,125, 32,207,243,120,242,228, 9, 36, -192,221,250,238,239,227,227,211,202,204,204, 12, 49, 49, 49, 16, 1,215,107,218, 78, 4, 92, 15, 13, 13,133,137,137, 9,154, 52, -105,210,186,126, 71, 17,173,115,244,237,150,253,241,220, 53, 56,118,254, 22, 0,224,196,169,115,185,207,204,213, 82,142,212, 50, - 2,129,240,175, 53, 88,192,179,246, 71,129, 64, 0,177, 80, 8, 19,169, 20, 18,169, 20, 18,145,200,248, 55,101,138,130, 84, 42, -253,131,169,170, 52, 90,149, 63, 77, 77, 77,141,214, 52,100,223,236, 58, 97,252, 56,137,153,153, 25, 88,150,129, 80, 40,132, 92, - 46,135,147,147, 35,252,252,252, 80, 84, 84,132, 65,131,135,106, 82,139,132,167, 68, 13,122,133,191, 74, 65, 49, 12, 3,165, 82, -137,226,226, 98, 20, 21, 21,161,172,172, 12, 26,141, 6, 70,180, 14, 86,249,180,180,180, 52, 28, 56,112, 0,133,133,133, 53,154, -171,196,196, 68,236,222,189, 27,201,201,201, 16, 8, 4, 70,159,159, 94,189,122,225,244,233,211,130,238,189,122,109, 77,245,240, -200, 78,245,240,200,238,222,171,215,214,223,127,255, 93,224,234,234,138,180,180, 52,132,134,134,162,168,168, 8, 28,199,145, 62, - 88,175, 64, 22, 80,172, 42, 42,250,224,171,175,190,226,205,204,204,176,118,237,218,150,219,128,247,106,219,199,203,219,187,149, -153,153, 25,162,163,163, 33,175,197,184,200,129,235,143, 30, 61,130,137,137, 9,252, 2, 2, 90,191,202,117,201,113, 28, 88,150, -173,118,126, 55, 99,174, 75,145, 72, 4,154,254,179,150, 39, 93, 74, 51,214, 45, 62,157, 62,125,134,243,167, 51, 62,198,149,144, -103, 30, 80, 80,158,248,148,152, 43, 2,129,240, 79,164, 94, 77,132, 9, 9, 9,201, 26,141, 38,192,211,211, 19,145,145,145,158, - 77,155, 53, 11, 23,137, 68,144,138, 68,181,191,198, 87, 32,147,201,158,228,230,230,118,106,208,160, 1, 12, 6, 67, 85,147, 96, -101, 51, 97,229,223, 0, 32,149, 74, 17, 29, 29, 13,153, 76,246,164,206, 76,176,229, 30,141, 26, 53, 66, 78, 78, 46,164, 82, 41, -172,173,173, 96, 98, 98, 2,169, 84,134, 85,171, 86,113, 91,183,108,249, 73,218,116,122,201,204, 73,115,249,251, 43,127,251,191, - 20,180, 92, 46,127,226,233,233,217,193,212,212, 20,199,143, 31, 71,114,114, 50, 74, 74, 74,170,250, 77,169,213,106,104,181, 90, -200,100, 50, 52,105,210, 4, 54, 54, 54,136,140,140,172, 49,239,197,133,133,199, 34, 34, 34, 58,180,105,211,166,170,232,187,119, -239, 78,117,239,222,221,238,185,168, 25, 10, 11, 11, 17, 22, 22,134,144,144, 16, 48, 12,131,168,168, 40, 86,171, 86, 31, 36, 85, -255,213,208, 0,183, 4, 59,118,108,159, 58,117,234,164, 78,157, 58,129, 7, 6, 0,216, 83,227, 27, 12, 77, 83, 66,161, 16, 20, - 69,213,106,124, 40,128,171,156, 33,152,170,135,107,175,228,206,157, 59, 17, 44,203,118,242,245,245,133, 22,104, 11,224,116,125, -246,143,143,143,127,100, 48, 24,122,183,104,209, 2,199, 14, 31,238, 10, 32,165,218,151, 25,160,107, 80, 80, 16,212,106, 53,162, -162,162, 30, 26,107,174, 28,154, 62,217, 58,125,242,251, 19,223, 25,210, 23, 71, 79, 94,192,137, 83,231,211,127,254,246, 11, 55, -158,231,244,164, 86, 17, 8,132,127,125, 4,171,180,180,244, 65, 76, 76, 12,218,183,111,143,248,196,196, 97, 90,181, 90, 92, 25, -197,162, 5,117, 91, 44,181, 82, 25,124,243,230, 77,166,101,203,150, 40, 47, 47,175, 50, 85,207, 71,175, 42, 13,151,169,169, 41, -206,157, 59,167, 87, 43,149,193,117,233,178, 12,203,209, 52, 13,138,162,160,213,106,145,157,157, 3,141, 70,139,223,126,251, 13, -219,182,108,121, 47, 35, 59,251,115, 72,173,213,127, 70, 1, 26,251, 44, 84,171,213,193,193,193,193, 6, 79, 79, 79, 76,152, 48, - 1, 51,103,206,196,204,153, 51, 49,101,202, 20, 76,156, 56, 17, 99,198,140,193,240,225,195,209,174, 93, 59,216,219,219, 35, 41, - 41,201,160, 86,171,107,204, 59,175,209, 28, 25, 63,126,124,158, 70,163, 1,203,178,208,106,181, 80,171,213, 85, 81,182,208,208, - 80, 28, 59,118, 12, 91,182,108,193,153, 51,103,160, 84, 42, 81, 86, 86,134, 71,143, 30,149, 8, 12,134, 67,164,234,191,214, 69, -115,244,230,205,155,176,182,182,134, 75,131, 6,221,106,125, 41,137,143,127,204,178, 44,154, 55,111, 14, 37, 80,227,182, 74,160, - 91,203,150, 45,161,209,104, 16, 29, 21, 21, 90,223, 52, 41, 20,138,251, 73, 73, 73,232,222,189, 59,156, 27, 52, 88,231, 8,152, -212,103,127,142, 97,110,222,186,117, 11,227,198,141,131, 71,163, 70,223,154, 2,246, 47,111, 99, 10,216,123,122,123,127, 59,113, -226, 68, 92,188,120, 17, 28,195,220,172, 73,207,209,209,177,181,179,179,243,239, 46, 46, 46, 33,142,222,151, 82,134,245,107, 63, -241,249, 14,237,124, 73,194, 72, 87, 87,215,189, 52, 77,207, 33, 53,138, 64, 32,252,235, 13, 22,167, 86, 47,155, 63,127,190, 78, - 32, 16,224,147, 79, 62,177,255,241,231,159,151, 29, 58,116,168, 77,216,147, 39, 78, 58,173,182,110,135, 85, 86,182, 97,197,138, - 21, 37,122,189, 30,254,254,254, 40, 42, 42, 2,203,178, 16, 8, 4, 16, 10,133, 16, 8, 4,160,105, 26,114,185, 28, 17, 17, 17, - 56,120,240, 96, 25,202,202, 54,212,153, 46,142,123,114,252,248,113, 8,133, 66, 94, 38,147, 85,153,158, 77,155, 54,229, 77,202, -206, 62, 6, 0, 2,129, 64, 7, 0,180,128, 50,170, 87, 46, 77,211,117,118, 92,151, 72, 36,149,157,251,235,238,228,206, 48, 27, -126,249,229, 23,197,211,167, 79,161, 82,169,170,154, 6,203,203,203,161, 80, 40,170,254,174, 52,137,215,175, 95, 87,200, 25,166, -198,188,171,128,156,228,167, 79, 7,181,105,211,166, 48, 37, 37, 5,229,229,229,136,143,143,199,157, 59,119,112,250,244,105, 92, -189,122, 21, 9, 9, 9,208,233,116,176,178,178, 66, 89, 89, 25,126,255,253,247, 50,109,121,121, 95, 85, 53,253,128, 8,255,197, -205,217,185,151,163,131, 67,186,189,157, 93,166,155,179,115,175,106,140, 70, 92, 92, 92, 28, 88,150,133,151,151,151, 77,109,253, -176, 88,134,185,121,231,206, 29,140, 25, 51, 6, 78,174,174,171,236,171, 49, 46,246,128,189,115,131, 6,171, 38, 76,152,128,224, -224, 96,176,181, 24,151,154,144, 1,155,190,248,226, 11,181, 88, 44,198,193,131, 7,189, 44,124,124, 98,133,192,251, 18,192,223, - 27, 16,215,181,191, 25,240,227,162, 69,139,114, 0, 96,239,222,189,118,206,222,222,145, 66, 96,130, 12,104, 40, 3, 26, 10,129, - 9,206,222,222,145, 7, 15, 30,180, 99, 24, 6, 51,103,206,204, 49, 3,126,172, 73, 79, 32, 16,124,154,149,149, 53, 40, 51, 51, -179,107, 78,252,109,183,159,191,253, 2, 87, 66,238,226,199, 45,251,118,228, 69, 54,251, 48, 47, 47,243,126, 86, 86,214,216,204, -204,204, 8, 82,227, 8, 4,194, 63,145,106,195, 47,194,182, 43,115, 1,222,161, 91,251,230,120, 16, 22, 91,106,107,109,121,190, -242,127, 37, 49,199, 27,191,219,221,163,229,178,101,203, 64, 81, 20, 98, 98, 98, 16, 30, 30, 14, 0, 88,179,102,141,138,230,249, - 97,207,173,119, 22, 8, 32,162, 66,243, 18,195, 48,214, 82,109,186, 89,144,117, 82,163, 61,187,118, 8,204,205,205, 81, 94, 94, - 14,129, 64, 0,153, 76, 6, 83, 83, 83, 72,165, 82,132,135,135, 99,220,132, 15,216, 4,166,197,127, 39, 26,253,239,122,103, 85, -154,149,243, 15,117,178,181,149,167,137,197,179,237, 29, 29,191,152, 49, 99,134, 73,215,174, 93, 33,145, 72,208,186, 93,151, 28, -147,150, 95,108,164, 5, 20,147, 85, 80,186,208,187,161,139,101,212,211, 20, 0, 84,158,225,254, 66,231,231,154,108,254,144,206, -102,178,112,175, 61, 63, 47,183,104,218,180, 41,120,158, 71,105,105, 41,114,115,115,145,151,151,135,146,146, 18,168,213,106,112, - 28,135,203,151, 47,227,242,189,196,178, 92,243,183, 18,107, 74,231,127,243,158, 98, 30, 96, 18,231,185,113,253, 58,129,181,181, - 53,114,115,115, 81, 80, 80, 80,213, 84,200,178, 44, 20, 10, 5, 78,158, 58,195, 38,178,205,146,181,210,134,138,186, 52,161, 76, - 55,177, 41,191,229,218, 58,208,147,159, 50,101,138,185,133,133, 5, 56,142, 67, 81, 81, 17,146,147,147, 17, 23, 23,135, 27, 55, -110,168,242,202, 12,188,218,174, 79, 70,213, 68,163,213,104,190, 65,254,118,154,207,207,101,229,226,236,156,157,154,154,234,192, -178, 44, 92, 93, 93,153,146,162,162,213, 18,224,162, 24,200,162, 0, 94, 1, 44, 90,191,113,227, 7, 67,134, 12, 65,219,182,109, -211,115,114,115, 27, 86, 87,151,120,128,118, 1,172,197, 30, 30,209,119,239,222,181,143,139,139,195,248,241,227,243,179,210,211, -103, 91, 0, 33, 0, 80, 6,116,115,113,115, 91,183,127,255,126,251,192,192, 64, 52,111,222, 60, 95,155,156, 28,144, 5, 20,215, - 80, 63,107,188, 54,139,227, 78, 55,250,100, 88, 96,155,143, 63,254, 24, 12,195, 32, 36, 36, 4,247,238,221, 67, 90, 90, 26,110, -221,186, 85, 98, 97,106, 58,170,182,107, 19,165,177,230,253, 27, 43,189,246,238,221, 67,137,197, 98,236,216,177, 3,161,161,207, -130,105, 65, 65, 65,152, 56,113, 34, 24,134,193,152, 49, 99,249, 51,177, 38,255,157,104,180,154,186,228,234,234, 26,200,113,220, - 90,138,162,196,172,196,161, 77, 78, 82,168,204,217,183,115, 86,206,211, 94,110,245,236,115, 69,234, 39,209, 36,154,255, 30,205, -191, 60,175,189,216,243,243,235,157,173,220, 12,203, 23,151,227,248, 40,251,228,142,213,194, 1,111, 15, 10, 88,184, 96,190,160, - 89,179,102,224, 56, 14,109,219,182,197,248,241,227,229, 1, 1, 1,117,173,119, 86,254,214,208, 73, 73,111,189,245,150,213, 39, -159,124, 98,217,173, 91, 55, 81,229, 82, 57, 79,158, 60,193,217,179,103,245, 7, 14, 28, 40,203,148,116, 41,185,117,110, 91,185, - 49,235,157,221, 42, 44, 84, 1, 88,238,171,215,111, 89,180, 96,193,210,166,205,154, 77,250,252,243,207,105, 51, 83,185,104,229, -194,143,100, 0,240,245, 15, 7, 44,135,140,120, 31, 27,124,128,110,239, 85,191,118,220,243,233,204,200,206, 75,125,255,131,145, - 62,147,198, 12,227,134, 14, 29, 42,183,180,180,132,155,155, 27,172,172,172,144,148,148,132, 39, 79,158,240, 23, 47, 94, 44, 15, -139, 73, 19,237, 62,116, 49, 85, 98,230, 96,204,186,129,138,183,134,140, 79,158, 48, 97,130,245,176, 97,195,204,155, 54,109, 42, - 18,137, 68,144, 74,165, 40, 40, 40, 64, 70, 70,134,254,234,213,171,229,153,226, 14,197,183,206,239, 84, 24,185, 22,161,186,235, -232,101,241,193, 23,150,126, 30, 22, 22, 54, 22, 64, 11,189, 94,223,128,101, 89,138,166,233,108,150,101,195, 53,229,229,219,153, -160,165, 27,200, 90,132,198,193,178,172,152,101, 89,148,148,148,224,210,165, 75,194,132,132,132,133, 97, 97, 97, 11,179,178,178, -160,215,235, 49, 98,196, 8, 4, 5, 5,225,218,181,107,200,207,205, 61, 85,155, 86, 22, 80, 44, 76, 77,253, 96,218,180,105,167, -119,238,220, 73, 61,121,242,196,126,251,246,237,123, 30, 61,122, 4, 0,104,213,170, 21, 62,248,224, 3, 8,133, 66,140, 31, 63, -158, 79, 75, 78,254,128, 1,138,107,169,159,181, 93,155,249,103, 15,108, 10, 27, 58,124, 68,147, 37,139, 22,136, 58,117,234, 4, -123,123,123,116,233,210, 5,122,189,222,202,136,107, 83,209,181,223,168,196, 22, 45, 90,152,174, 95,191,222,233,131, 15, 62,192, -244,233,211, 1, 0,106,181, 26, 23, 47, 94,196,204,153, 51,115,210,132,237,148,143,174, 30,172,181,126, 86, 68,166,250, 0,128, -139, 11, 66, 0,116,165,149, 41,137,164, 67, 59,129, 64,248,183, 80,231, 90,132, 55,238, 69,224,249,229, 56,158, 97, 19,109,176, - 25,150,248,193,204,213, 77, 4,134, 18,107, 19,161,206, 58, 60, 44,140, 78, 74, 74,170,245, 96,149,235,157,105,165,110,229,108, -118, 97,155, 77, 27, 54,124,190,117,235,214, 94,149, 83, 49,200,100,178, 39,106,165, 50, 24,101,101, 27,180,158,110, 87,234,187, -118, 94, 92, 97, 97, 46,128,169,222, 28,183,113,194,164, 41,107, 40, 51, 55,225,252,149,191,105, 4, 2,129, 46, 49, 51, 23, 27, -124, 0, 83, 35,230, 67, 85,233,128, 39,133, 14, 76, 36,223, 45,118,237,234,213,179, 54,255,248, 99, 59, 19, 51,179,174,122,189, - 62,128,227, 56, 0,136,214,168, 84,215, 25,189,254, 94,166,203,228,239, 37,102, 14,188,177,235, 6,106,101,158, 10, 83,245,141, - 54, 71, 15, 31,254,236,220,185,115,127,200,187, 57,176, 81,107,225, 25,108, 76,222,159,223,198, 0,220, 70, 94,222,237,218, 66, -149,100, 45, 66,227,160,121,254, 35,107,107,235, 61,189,122,245,146,245,238,221, 27, 3, 6, 12, 64,199,142, 29,193,113, 28,120, -158,135, 66,161,192,161, 67,135,240,221,119,223, 61,117, 4,150,213,165,199, 0,231,133, 39, 79, 14,110,213,170,213,246,245,235, -215,219, 78,157, 58, 21, 38, 21, 83,155,168,213,106, 92,189,122, 21, 51,103,206, 44, 76, 73, 76,252,128, 1,206,215,165, 87,251, -181, 41,139, 99,172,134, 36,143,154,190,218,199, 80,150,101,109, 43,103,156, 34, 35,158, 24,125,109,194,210, 79, 81, 26,122,168, -237, 59,195,134, 77,167,133,194,206,149, 83, 49, 68, 69, 69, 61,172, 92,236, 25, 65, 19, 47,215,167, 46,241,252,179,185,231,120, -158, 39, 29,218, 9, 4,194,191,219, 96, 9,133,194,188,202, 40,143, 80, 40,204, 75, 58, 49,249,253,218, 68,220,156,157,123, 87, -188, 29,163,174,181, 8, 43,127, 79, 42, 41, 81, 84,204,208, 94,237, 36,162,162,151,182,175,207,122,103, 9,185,185,177, 0,222, - 6, 82,129,216, 27,207,244,218,174,156,247,124,158,106, 44,144, 23,142, 43, 46,202,200,205,189, 1,224, 6,128,239,170, 77,167, -187,184,168,174,116,190,156,247,176,212,212,178,138,124, 87,159,119,135,186,243,254,178,102,157, 39,250, 53,202,243,223, 70,118, -126,254, 9, 0,166,118,167, 79, 59,158, 61,125,250,221, 89,179,102,189,227,226,226,226, 99,103,103,103,109,110,110, 78,223,189, -123, 55, 73,167,209,108,244, 6,118,198, 1, 42, 99, 52, 25,224,172, 83, 98,162,255,224,129, 3, 63,167,133,194,206, 1, 1, 1, - 65, 0, 16, 29, 29, 29,202, 49,204, 77,123, 96, 3, 3, 20, 25,113, 30,235,119,109, 74,235,127,109,150, 2,165, 0, 86,130, 97, -128,138,230,255,215,185, 54, 57,142, 91,233,234,234,170, 32, 51,180, 19, 8, 4,194,155, 35,144,104, 18,205,127,144,166, 0,128, - 5, 41, 79,162, 73, 52,137, 38,209,252, 83, 52,255,242,212,103, 45, 66, 26, 4, 2,193, 88, 88, 0,101,164, 24, 8, 4, 2,129, - 80, 23, 84, 45, 46,180, 62,163, 3, 94,197,201, 70, 16, 77,162, 73, 52,137, 38,209, 36,154, 68,243, 95,167, 89,151,246, 95,118, -116, 98,125, 70, 17,254,217,144,240, 41,209, 36,154, 68,147,104, 18, 77,162, 73, 52,255, 17,144, 38, 66, 2,129, 64,120, 5,150, - 46, 5,205,243,160,120,126, 41,205,243,135, 5, 60, 63, 66,192,243,120,173,181, 59, 71,140,168,126, 34,218, 25,239,195,156,148, - 56,129,240,207, 69, 72,138,224,255,135,147,147,147,187,163,163,227,175, 60,207, 83,121,121,121,147,115,114,114,210, 72,169,252, -245,176,177,177,233, 5, 0, 69, 69, 69,193,255,212, 60, 54,241,196, 48,158,130,255,243,223, 81, 28,210,162, 82, 94, 92,103,177, - 73, 67,140,229,233, 23,231,210,162,120,196, 68, 37,227,120, 61, 14, 71, 15,237,101,191, 22, 0, 78, 4,231,207,193, 43, 44, 78, - 93, 23,206,206,206,190,182,182,182, 23, 4, 2,129,144,101,217,105, 17, 17, 17,181,173,205, 72, 3,192,199,195, 49,159,201,177, -155,191,104, 42, 37,210,105,215,148,104, 53,154, 82,154,166,147,197, 98,241,141, 25, 99,248,243, 63,236, 53, 68,214,176,127,141, -233,111,234,137,254,180,182,201,160, 32,255,164,196,181, 35,219,110,232, 54,201, 78,148,244,240,177,217,230,227,105,191, 90, 90, - 57, 14,250,116, 84,206,105,169, 9, 59,246,187,237, 40, 39, 87,154,113,124, 3,216,232,129,102, 98,169,180, 1,203, 48,142, 0, - 32, 16, 10,115, 13, 90,109,186, 24, 8,159, 15,148,252, 69, 52,237, 12, 66, 97,160, 88, 34,105,192, 26, 12,142, 20,192, 67, 36, -202,227,116,186,116,150, 97, 34,150, 2,133,175,154, 78,145, 84,234,198, 50,140, 35, 5,240,111, 42,239,111, 82,147, 80,135,193, -242,242,242,122, 72,211,116, 3,154,126, 22,228,122,126,205,189,202,223, 95,254,201,178,108, 70,108,108,108,107, 99, 15,238,233, -233,105,161,209,104,222,165, 40,234,125, 0,224,121,126,159, 76, 38, 59,148,156,156,252, 74, 29,137, 61, 61, 61, 45,120,158,159, - 99, 98, 98,210, 83,163,209, 52, 5, 0,153, 76, 22,169, 86,171,175, 80, 20,181,246, 21,117,133,206,206,206, 35, 77, 77, 77,123, - 48, 12,211,131,231,121, 74, 40, 20, 94, 85,169, 84, 87,178,179,179, 15, 3,168,247,140, 7,206,206,206, 38,182,182,182, 95, 91, - 89, 89,189,247,201, 39,159, 20,218,216,216,248, 45, 91,182,236,129,173,173,237,254,162,162,162, 5,217,217,217,234,191, 72,253, -240,118,114,114,218, 39, 18,137, 4,233,233,233, 61, 0,192,205,205,237,170, 78,167, 99,243,242,242,222, 7,144, 80, 31, 49, 59, - 59, 59, 83,145, 72,212,222,212,212,180,181,169,169,105, 87,150,101, 3, 56,142, 3,199,113,209, 74,165,242,186,193, 96,120,104, - 48, 24,238, 22, 20, 20, 40,255, 66,215,136,185, 88, 44,222,195, 48, 12, 0, 52, 6,160,248, 39,222, 8,120, 10,254, 81,145,209, -126, 47,152,169,166, 1,127,220,142,134,123, 13,219, 25,109,176, 6,116,182,234, 55,168,127, 11, 26, 0,244,186, 7,253,206,222, - 44, 57,251,166,205,213,128, 1, 3,110,111,220,184,209, 90,171,213,226,139, 47,190,216,167,213,106,127,138,143,143,159, 95,219, -126, 22, 22,150,179,150,127,243,163,188,226,126,230,192,113,156, 67,118, 86,122,227,216,152, 39,253, 98, 99, 34, 86,205, 24, 17, -115, 71,205,176, 83,182,157, 64,140, 49,233, 8,104,136,129,131,134, 15,123,123,249,226,165,120,239,189,247, 26, 70, 22,105, 76, - 92, 35,195, 36, 74,222,204,219,206,161,193,224,185, 11,190,165,238,222,190, 54,248,240,129,173, 87,190,252,192,208,147,152,172, - 58,161, 86, 10,133,237, 45,125,124,186,142, 58,113, 2,102,110,110, 66,161, 84, 74, 3, 0,163,213,186,149,167,167, 59, 31, 28, - 60,184,221,210,184,184,107, 75,129,123,255, 79,205,229, 66, 97, 39, 75, 31,159, 78,239,157, 61, 11, 51,103,103, 33, 45, 22,211, - 0,192,233,245, 13,202,178,178,156, 15,190,253,118,219,165,241,241,215,151, 50,204, 93, 24,177,212,218,223, 40,239, 4, 99, 12, - 22, 77,211, 13, 66, 67, 67, 29, 76, 77, 77, 81, 97,126,192,178, 44, 88,150, 69,197, 67,177,106,226, 69,158,231,193, 48, 12,186, -119,239,110,212,219,171,179,179,115, 79, 0, 19,124,124,124,222,153, 51,103,142,184, 83,167, 78, 96, 89, 22, 87,174, 92,233,178, -126,253,250, 31,180, 90,237, 49, 0, 59,179,179,179,131,141,125,187,117,114,114,234, 43, 16, 8,246, 46, 92,184,208,162,115,231, -206,194,202,217,225,243,242,242,218,223,184,113,163,245,178,101,203,166, 57, 57, 57,141,201,201,201,185, 96,108,225,184,186,186, - 6,202,229,242, 35,253,251,247,111,208,186,117,107,153,175,175, 47,120,158,199,227,199,143, 63,136,141,141, 29,125,246,236,217, - 37, 42,149,106, 68, 61,214, 83,163,188,189,189,199,155,155,155,127, 61,107,214, 44,155,161, 67,135, 74, 34, 34, 34,138,189,188, -188,168, 99,199,142,217,159, 58,117,106,218, 79, 63,253, 52, 82, 46,151, 47, 72, 72, 72,216,101,204,133,231,227,227,243,144,166, -233, 6,198, 24,224,122,154,224,150,158,158,158,135,174, 95,191,238,153,146,146,194, 14, 27, 54,108, 55, 0,220,186,117,171, 57, -207,243, 84,167, 78,157,206,101,100,100,188, 11,224,177, 49, 25,119,113,113,105,110,105,105,121,114,232,208,161, 54,238,238,238, -242, 6, 13, 26, 80, 50,153, 12, 2,129, 0,229,229,229, 46,177,177,177,189, 31, 63,126,172,190,117,235, 86,145, 88, 44, 30,156, -149,149, 21, 94,143,122,220,209,193,193, 97,172, 72, 36, 10,100, 24,198, 21, 0,132, 66, 97,166,193, 96,136,200,203,203,219, 3, -224,246,171, 94, 32,142,142,142, 63,172, 95,191,222, 46, 55, 55,151, 95,186,116,233, 15,165,165,165,227,255,201, 55,132,136,199, -119,113,227,214,117,252,178,101, 79, 41,207, 35,245, 15, 6,139, 67,124,211,166, 1,246, 83, 62, 26,107,211,165, 83, 87, 4,182, -108, 95,167,230,144,158,182,203, 37, 98,161,173, 74,171,189, 87,144, 65,159,148,155,138,135,141, 25,222, 58, 17, 0,206, 95,126, - 50,172,173,151,245, 77,187, 6,220, 16,185, 84,218, 78,167,103, 10, 79, 94, 41, 92, 92, 31, 51,229,228,228,116,193,204,204, 76, - 94, 82, 82,146, 83, 88, 88,184,185,127,255,254, 43,215,175, 95,111,157,152,152,136,244,244,116, 76,152, 48,193, 44, 51, 51,243, - 19,173, 86,123, 39, 61, 61,189,198, 72, 86,153,162,116,195,215, 75,103, 45, 49,183,180, 22,200, 77, 76, 97,102,110, 1,207, 70, -141,209,166, 93, 23,244,126,107, 48, 18, 19, 98, 59, 28,218,187,245,241,180,225, 25,171, 98,139,176, 34, 36,164,230,123, 83, 19, - 15,116, 27,252,206, 51,115,181,120,249, 82,196,197,198, 40, 82,210,232, 25,103, 30,209,242,254, 61,155, 72,117,218,242,148,187, -183,175,121,182,239,216, 29, 0, 90, 31, 62,176,245,202,210,247, 13,189,150,238,251,103, 26,248, 55, 97,174,150,139, 68,227,251, -174, 95,239, 16, 52,109,154,184, 60, 57, 89,159,248,203, 47,170,220,235,215, 89,161, 84,202,187,245,235, 71,217,247,232, 33,155, - 22, 29, 45,190,181,122,117, 87,209,178,101, 94, 11,244,250,189,255, 47,205, 1,155, 54,217,183,156, 60, 89, 92,150,152,168,143, -251,225, 7,117,206,229,203,140, 88, 38,227, 26, 12, 24, 32,112,236,211, 71, 58, 45, 50, 82,124,103,205,154, 78,194, 69,139, 26, - 45, 52, 24,246,252, 67,242, 78,168,135,193,130,169,169, 41, 14, 28, 56, 0,145, 72, 4,145, 72, 4,161, 80, 88,227,239, 30, 30, - 30,198,152,160,225,182,182,182, 63,206,154, 53,203,113,208,160, 65,176,182,126,113,149,141,129, 3, 7, 98,192,128, 1,226,164, -164,164,209,135, 15, 31, 30,189,123,247,238,156,242,242,242, 25, 57, 57, 57,199,234,120,120,247,240,244,244, 60,118,224,192, 1, - 19,181, 90,141,144,144, 16, 20, 23, 23, 67, 42,149,194,213,213, 21, 93,186,116, 17, 94,189,122,213,102,244,232,209,199,104,154, - 30,152,149,149,117,213,136, 7,107,107,107,107,235,144, 45, 91,182,200,252,253,253,169,248,248,120,180,104,209, 2, 0, 80, 88, - 88,136,129, 3, 7,202,134, 14, 29,234,253,201, 39,159,220, 97, 24,166,123,110,110,238,195, 58,242,222,202,209,209,113, 87,191, -126,253, 92,230,205,155,103, 97,102,102,134,148,148,148,108, 39, 39,167,198,149, 38,104,200,144, 33,146, 62,125,250, 56,111,222, -188,121,227,217,179,103,191,200,207,207, 31,159,147,147,243,168, 86,183, 74,211, 13, 30, 61,122,228, 32,151,203,145,155,155,139, -189,123,247,226,147, 79, 62,129, 80, 40, 68, 94, 94, 30, 14, 29, 58,132, 25, 51,102,128,166,105,148,149,149, 25,101,130,229,114, -121,111, 31, 31,159,109,193,193,193, 13,172,172,172,224,226,226, 66, 47, 90,180, 40,208,203,203,203,196,217,217,153,206,202,202, -194,177, 99,199,188,198,142, 29,123, 50, 45, 45,237, 3,173, 86, 91,103,211,153,173,173,237,246,221,187,119,187,135,133,133, 97, -243,230,205, 40, 42, 42,130, 68, 34,129,165,165, 37,156,156,156,224,235,235, 75, 77,155, 54, 77,222,163, 71, 15,249,210,165, 75, -183, 3,104,105, 68,253,109,225,224,224,240,107,143, 30, 61,188,150, 46, 93,106,229,236,236, 12,185, 92, 14, 0, 40, 45, 45,109, -144,146,146,210,126,201,146, 37, 35, 30, 62,124,152,148,151,151, 55, 5, 64, 88, 61,175,143,150, 77,154, 52, 25, 56,116,232, 80, - 65, 78, 78, 14,182,110,221, 58,176,180,180,180,165,177,166,242,239,200,141, 91,215,209,163,223,104,168, 25, 19,209,169,227,123, -121,197,133,239,109,205,172,172,132, 0, 80, 94, 82,194, 12,120,127, 54, 55,112,240, 24,125,207,126, 67, 84, 87,206,239,147, 27, - 99,176, 36, 98,161,237,193,109, 83,211,175,223,125, 26,112,225, 74, 74,239,161,131,123,211, 66, 83, 63,111, 0,152,253,249, 71, -146, 19,191, 95,254,169,111,207,134,217, 93,219, 55, 78, 31, 53,233, 23,183,250,152, 43, 47, 47,175,107, 23, 46, 92,112,148, 72, - 36, 40, 46, 46,182,221,177, 99,199,247,237,219,183,167, 19, 18, 18, 16, 19, 19,131,228,228,100,148,148,148,160,109,219,182,102, - 81, 81, 81,155, 1,212,104,176,126, 62,138,175, 87,207,117,220,100,239,108,239,105,208,105,237, 25,109,110,211,224, 11, 97,205, -143, 30, 82,181,114,112,106,208,120,244,152,201,152,187,232, 91,209,241, 35,187, 22,227,234, 69,132,212, 54,139, 63,133,142, 95, -205,155,143, 50,149, 22, 99,222,255, 8, 99,199,124,100,203,115, 58,103,158,211,152,234, 52,197, 86,150,226,216,211,187,118, 28, - 26, 6,160,193,115, 38, 43,152,152,172,234, 89, 46, 20,182,123,107,221, 58,135, 22,211,166, 73,195,150, 45, 83, 22, 92,191,174, -110, 52, 96, 64,113,208,212,169, 90, 0, 80, 36, 39,139,227,150, 44,145,219,119,237,106,210,233,203, 47,173, 12, 42,149,211,242, -111,190,105,187, 24,184, 95, 95, 77,207,247,222, 99,215, 30, 59,214,230,238,234,213,221,177, 98,133,160, 71, 80,208,227, 69,191, -252,146, 97,140,230, 74,161,176,125,255,159,126,114,104, 54,113,162,244,225,252,249,202,146,251,247,213,222,195,134, 21,181,153, - 57, 83, 7,129, 0,170,140, 12, 81,194,178,101,166,150,237,218,153,116,152, 61,219,138,213,233, 28,151, 46, 89,210,174,182, 8, -209,114,161,176, 93,191, 13, 27,236, 91, 76,157, 42, 13, 91,185, 82,153,117,229,138,182, 44, 32, 0, 45,223,121,167,208,213,214, - 86,251,170,121,127, 94,179,224,234,213,215, 46, 79, 66,117,183,129, 26,240,245,245,205,141,141,141,117, 56,122,244,168, 81, 6, -203,197,197, 5, 93,186,116,201,139,136,136,112,172,229,134,152,158,158,158,222,128, 97, 24, 72, 36,146, 90, 19,166, 80, 40, 16, - 30, 30,142,209,163, 71,103,100,103,103,215,120,211,181,182,182, 54,183,182,182, 78,188,122,245,170, 93, 84, 84, 20, 30, 62,124, - 8, 47, 47, 47, 88, 91, 91, 67, 36, 18,193, 96, 48, 64,161, 80,192,199,199, 7,114,185, 28, 3, 6, 12, 40, 40, 42, 42,242, 42, - 46, 46,174,241, 38,230,225,225, 33, 21,137, 68, 79,143, 30, 61,234, 22, 24, 24,136,251,247,239,195,205,205, 13, 78, 78, 78, 0, -128,228,228,100,220,186,117, 11,253,251,247, 71, 68, 68, 4,166, 78,157,154,110, 48, 24, 26,167,166,166,106,107,108, 46, 8, 8, -200, 62,124,248,112,134,191,191,191, 70,169, 84,210,185,185,185,162,235,215,175, 51,229,229,229,102, 37, 37, 37,162,210,210, 82, - 97,105,105,169, 72,169, 84,138,104,154, 22,107,181, 90,209,221,187,119, 5, 69, 69, 69,181, 78,108,233,231,231,151, 27, 19, 19, -227,240,251,239,191,163, 89,179,102, 56,122,244, 40,230,204,153,131, 91,183,110,161, 65,131, 6, 56,114,228, 8,230,204,153,131, -152,152, 24,216,219,219,163,103,207,158,181,158, 35, 0,240,246,246,142, 15, 15, 15,247,150, 72, 36, 72, 72, 72, 64, 70, 70, 6, -186,118,237, 10,142,227,144,147,147,131,167, 79,159, 34, 43, 43, 11,222,222,222,120,255,253,247, 19, 50, 51, 51,125,234,170,104, - 65, 65, 65,249,193,193,193,118,205,155, 55, 71, 78, 78, 14,172,172,172,170, 62,150,150,150,176,178,178, 66,163, 70,141, 48,107, -214, 44,180,104,209, 34, 47, 53, 53,213,177, 46,243, 19, 24, 24,120,225,202,149, 43,118, 54, 54, 54,208,104, 52,208,104, 52, 85, - 47, 7,114,185, 28, 34,145, 8, 0,240,244,233, 83, 12, 28, 56, 48, 63, 49, 49,177, 95, 61,204, 17,237,232,232, 24, 19, 22, 22, -214,216,220,220, 28,233,233,233,136,136,136,192,164, 73,147,158, 42,149, 74,127,252, 9,253,134,254,159, 4, 52,194,194,168,200, -104,191, 38, 77, 2, 74,199,125, 48, 69, 52,100,208, 16,101,232,189,139, 6,145,246, 90,249, 91, 93, 44,179, 0, 32,248,174,194, - 65, 43,234, 34,110,221,182, 47,117,242,228, 73,217,174,157,191, 10, 35, 35,163,157,154, 52, 13,136,141, 78,194,202,154,180,223, -238,110, 57,110,206,244,126, 1, 93, 59,117, 21,150, 41,121,167,109,219,127,107,155,154,146,232, 8, 0, 30, 13,189,114, 39,125, -240,209,125, 11, 83, 42,231,250,173,235,204,218, 31,207, 71,159,185, 86,186,219,136,232,178,151,155,155,219,157, 29, 59,118,216, -217,217,217,193,210,210, 18, 42,149, 10,122,189, 30, 81, 81, 81,154,131, 7, 15, 26, 44, 44, 44,204,115,114,114, 80, 92, 92, 12, -161, 80,136,187,119,239,166,229,230,230, 86,247, 38, 88, 53,216,231,240,225,165,194,110,173,221,173,197, 52,111, 34, 97, 99, 93, -132, 2, 94, 66,193,202, 49, 56,228,110,139,107, 33,215,199, 12, 24, 52,202,190, 67,167, 30,248,118,229, 92, 67,114,122,122,203, -138,230,194, 63,212, 5,127, 79,244, 28, 58,124,216,200,229,139,151, 98,233,242,101, 56,125,234, 68,169,153, 9,173,181, 48, 23, - 89,118,237,220, 73, 51,107,198,187,233, 42, 69,137,219,247,235,215,190,215,167,223,176, 6,237, 59,118,199,221,219,215,112,248, -192,214,135, 98, 41,105, 46,124,158,165,128,181,149,151,215,148,233, 79,159,138,159, 44, 93, 90,206,100,101, 21,183,158, 57,179, -160,186,109, 51, 46, 93, 50,149,184,184, 88,216, 14, 30,108,189,222,195, 3,134,188,188, 95,171,235, 67, 84,157,230,125,103,103, -171,227, 87,175,246,226,132,194,110,159, 76,159,110,210,187,119,111,148,149,149,225,244,233,211,216,191,111,159,214,201,201, 41, -220,234,254,253,199, 94,217,217, 11,171,211,252, 6,176, 49,247,245,157,252, 73,116,180, 56,116,225,194,114, 20, 21, 21, 5,205, -152, 81,200,178, 44, 53,121,229,202, 1,137,217,217,221,114, 11, 10, 60, 0,192,193,202, 42,221,223,217, 57,116,211,238,221, 81, - 63,250,249,241,229, 89, 89,191, 46,173,102, 13,210,151,211,121,240,214, 45,199,115,249,249, 31, 90, 91, 91,155, 20, 20, 22, 10, -196, 34, 81, 81,171,198,141, 15,126, 59, 99, 70,136,250,225, 67,201,171,230,189,245,204,153, 5,165, 42,149,112,193,166, 77,157, -178, 10, 11, 27, 42,117, 58,159,210,242,114, 39, 70,175,167,205, 77, 76, 10, 27,122,123,231,150, 93,185,146,227, 81, 94,254,217, - 70,149, 42,239,223, 92, 31, 95,123,177,231,202,136, 10,207,243, 70,153, 43,145, 72,244, 66, 51, 84, 45,136, 5, 2, 1,238,223, -191,143,188,188, 60, 52,107,214, 12,158,158,158, 47,108,144,152,152,136,179,103,207,162,184,184, 24,173, 90,181, 2, 0,113,109, -130,230,230,230,159,207,159, 63,223, 74,167,211, 33, 52, 52, 20,173, 90,181,130, 76, 38,131, 72, 36,130, 88, 44,134, 80, 40,132, -147,147, 19, 10, 10, 10,224,232,232,136,105,211,166, 89,110,218,180,233,243,226,226,226,229,181, 20,224,244,209,163, 71, 59, 4, - 6, 62, 27,133,154,158,158, 94,153, 22, 0,128,131,131, 3, 30, 63,126,140, 86,173, 90,193,209,209, 17,253,251,247,119, 56,121, -242,228,116, 0,107,107,204,184, 88, 76,251,251,251,183, 1, 0, 83, 83, 83,208, 52, 29,103, 97, 97, 97,239,232,232,104,106, 97, - 97,241,135, 60,238,216,177,163, 68, 34,145, 24,140, 41,212,156,156, 28, 4, 6, 6,162,164,228,217,181,164, 84, 42,225,227,227, -131,210,210, 82, 0,128, 86,171,133,139,139, 75,149, 1,169,137,230,205,155, 47,245,247,247,127,203,212,212, 84, 42, 20, 10, 17, - 22, 22,134,160,160, 32, 28, 60,120, 16, 30, 30, 30,144,203,229,136,141,141, 69,243,230,205, 17, 18, 18, 2,123,123,123, 52,109, -218, 84,234,224,224,112,163,168,168,232,106,106,106,234,210, 90, 34,109,180,153,153, 25, 66, 66, 66,176,125,251,118, 36, 37, 37, - 33, 43, 43, 11, 22, 22, 22,104,217,178, 37, 2, 2, 2,208,169, 83, 39,196,199,199,131,170,187, 50, 57, 53,110,220,248,244,253, -251,247,237,104,154, 70, 72, 72, 8, 84, 42, 21, 52, 26, 13, 24,134, 1, 69, 81,144,201,100,232,208,161, 3,108,109,109,209,184, -113, 99, 28, 63,126,220,190, 79,159, 62,103,115,115,115, 91, 2,200,169,171, 76,173,173,173, 63, 91,188,120,177,155,163,163, 35, - 20, 10, 5, 84, 42, 21, 92, 92, 92,208,167, 79, 31,215,179,103,207,126,166,211,233,214,255,163,222,180, 56,164, 53,105, 26, 0, -158, 71,234,169,227,123,249, 6,246,178,192,238,173, 56,135,184, 40, 97,135,187,119, 35,154, 2,128,181,169,103, 88,227, 0,125, - 92,200,131, 75, 25,167,127,223, 31,198,178,160, 3,154, 4,248,209, 60, 50,107,211, 46,200,160, 79, 94,184,146,210,187,121,243, - 46,130, 77,223, 47, 25, 50,249,131,190, 82, 27,235, 46, 84, 89,198, 33,220,122,244,196, 99,209,162,121, 14, 43, 86,172, 62,117, -225, 74, 10, 91,144, 65,127,109, 76,122,189, 27,218,252,112,116,157,200, 78,161,216,135,176,120, 51, 80, 38,205,225,217,200, 27, -101,101,101,144, 74,165,178,247,222,123,143,157, 63,127,190,202,220,220, 92, 94, 81,151,243,104,154,238, 91,167,112, 76, 52,152, -102, 62,140,200, 92,199,113,188,153, 26,154, 82,241,147,248, 68,116,233,209, 63,183,109,171,150, 43, 87,175, 93,191,208,203,199, -207,254,189,113, 83, 68,235,190, 93,248, 11,192,119,169, 86, 38, 25, 87,168,163,199, 77, 0,188,189,124,241, 82, 36, 38, 62,181, -158, 60,188,100,153, 80, 96,226,226,223,172,155,249, 47, 59, 46,245,243,241,245,107, 56,121,218,103,103,182,108,222,248,246,243, -145,172, 3,251,182,156, 4,216, 94, 48,174,111,206,191,129,230, 99, 79,159,134, 42, 45,205, 80,116,227,134,166,215,143, 63, 22, -180, 26, 55,110,189,222, 96,176,163, 40,234,133,174, 16, 20, 69, 1, 28, 71, 9,215,174,165,121, 23, 23, 24,172,172, 38, 32, 46, -206,183, 46,205,213, 6,195,240,161, 45, 91,190,189,109,239, 94,120,120,120, 84,105, 90, 90, 90, 98,250,244,233,152, 54,109,154, - 52, 60, 60,188,221,217,179,103,219,237,254,233, 39, 71,228,231, 15,127, 89, 80, 15, 52,123,239,247,223, 81,158,156,172, 47,186, -127, 95,211,115,227,198,194,107, 15, 30,216,204,251,233,167, 69,205,130,130, 92,127, 94,186, 84,234,238,254,108,124, 72, 90, 90, -154,207,198, 13, 27,220,123,244,233,211,105,238,236,217, 59, 30,207,154,213, 4,207,150,100,171, 49,157, 57,215,175,235,206, 21, - 21,125,120,248,200, 17, 43, 63, 63, 63,240, 60,143,248,248,120,135,237,219,183, 79,233, 54,109,218,216,217,163, 71, 47,234,147, -148, 84,204, 22, 22, 74, 6,254,240,131,232,192,200,145, 77,235,210,172, 44, 79, 0,120,103,206,156,207,219,118,236,216,164,255, -123,239,217,184,184,184, 80, 38, 38, 38,208,235,245,200,201,201,177,142,141,141,245, 14, 46, 45, 45,187,248,248,241, 30,168, 84, -125, 72,149,124, 77,131, 5, 0, 44,203,214,203, 96, 25,105,178,170, 34, 94, 5, 5, 5,136,136,136,128,135,135, 7, 12, 6, 3, - 46, 92,184,128,146,146, 18,136,197, 98,136,197, 98,232,116,186, 58,181, 76, 77, 77,123,119,237,218, 85,120,251,246,109,120,122, -122,194,196,196,164,202, 88, 85,154, 44,145, 72, 4, 39, 39, 39,148,150,150,162,115,231,206,162,237,219,183,247, 70, 13,235, 0, - 2,128,153,153,217,128,193,131, 7, 87,133,216,148, 74, 37, 4,130,103, 35,173,117, 58, 29, 20, 10, 5, 10, 11, 11, 81, 90, 90, - 10,141, 70,131, 22, 45, 90, 72,174, 92,185, 50,160, 54,131,245, 60, 42,149,170, 60, 47, 47,207,170, 75,151, 46,214, 59,119,238, -140,237,208,161,195, 11,157,134,175, 93,187,166,209,106,181, 66,137, 68, 98, 84,103,247,189,123,247, 86,149,125, 86, 86, 22,126, -253,245, 87,112, 28, 7,138,162,240,244,233, 83,108,218,180,169,170,175, 92,109,231,200,223,223,191,255,158, 61,123, 90,239,222, -189,187, 88, 40, 20, 34, 54, 54, 22,251,246,237, 3,207,243,176,179,179,131, 74,165, 66, 94, 94, 30,214,175, 95, 15,189, 94, 15, - 51, 51, 51,184,186,186,202,166, 79,159,222,121,217,178,101,162,218, 12, 22,203,178,172, 64, 32,128,187,187, 59, 22, 47, 94, 12, -141, 70, 3,177,248,153,175, 44, 43, 43, 67, 73, 73, 9, 66, 67, 67,145,156,156, 12,142,227,106,125,176,200,100,178, 17,187,118, -237,114,144, 72, 36,208,104, 52,120,250,244, 41, 18, 18, 18, 16, 27, 27,171, 45, 42, 42, 98,204,204,204, 40,103,103,103, 65,105, -105,169,100,220,184,113,148, 66,161, 0,207,243, 24, 54,108,152,237,182,109,219,222,213,233,116, 27,234, 40, 82,123, 39, 39,167, -175, 38, 79,158, 44,171, 44, 55,142,227,144,159,159,143,145, 35, 71,202,175, 94,189, 58, 95,167,211,237, 3,144,255, 79,185, 17, - 60, 63, 90, 80,113,225,123,219,139, 23,127,110, 24, 23, 37,236, 32, 64, 97,187,160,110,159, 9, 1, 32,230,225,142, 78,241,209, -247, 89, 51,142, 74, 60,179,111,237, 29,243,198, 83, 10, 1,156,172, 45, 10, 56,160,179, 85, 63,185,169,120,216,208,193,189,233, -109,219,127,107, 59,249,131,190, 82,135, 22,191, 81, 0, 96, 45,109,128,142,134,217,180, 70,167,148,109,219,254, 91,219,161,131, - 7,220, 75, 78, 73, 93,111,235,100,117,252,236,205,146,243,181, 69, 9,157,237,132,174,214, 38, 5,176,118,235, 13,143, 0,107, -132,134,134,226,228,177,219,240,241,107, 3,157, 78, 7,131,193, 96, 58,112,224, 64,213,145, 35, 71, 52,133,133,133, 10,189, 94, -223, 45, 59, 59, 59,174, 78,127,133, 2,174, 5,205,233, 37,172,136, 81, 43, 37,202, 25,139,142,189,219,182, 99,255, 86, 54,238, -174, 34, 91, 25,115,170,123,183,174,123,247,239,254,117,214,236,185, 43,208, 34,168, 67,199, 25,226, 7, 77,127,216,107,120, 82, -157, 86,116, 10, 78,211,199,143, 51,137,113,241,111,167,166,167,100,248,186, 57,233, 18,210,120,195,103,243,127,233,211,165,247, -136,230,222,126,237, 37,145, 49,183,169, 89, 51,103,237,255,254,251, 53,239, 85,154,172,235, 33, 23,186, 45,157,144, 34, 89,186, - 19, 90,242,136, 2,196, 82,105, 3, 51, 15, 15, 97,242,206,157,106,175, 65,131,138, 1,192,192, 48,118,119,239,221,179,148,203, -229,224,121, 30, 6,131,225,133, 62,194,149,253,130,123,119,239,238,104,140,102,250,207, 63, 55,255,228,147, 79,144,147,147, 3, -134, 97,170,162,223,207,221,179, 81, 86, 86,134,225,195,135, 99,199,230,205,213,182,139,139,164, 82, 55, 51, 55, 55, 97,242,206, -157,106,239,183,223, 46, 2,203, 82,115,127,250,105,241,236, 47,190,240, 28,249,238,187, 47,188, 55, 6, 4, 4,224,231,205,155, - 37,251,246,237,115, 93,189,121,243, 7,253,165,210, 68,104,181,181,166, 83,209,180, 41,172, 35, 34, 76,252,252,252,170, 12,101, -227,198,141,241,237,183,223, 74,199,140, 25, 35, 25, 63,118,236,186, 72, 63,191,141, 75,147,147,227,109,125,125, 45,132, 82,105, -131,186, 52, 43,203, 19, 0,202,117,186,192,165, 43, 86, 88,223,187,119, 15, 89, 89, 89, 85,145, 26,138,162,208,188,121,115,234, -221,119,223,181,108,223,186,117, 91, 82, 35,223,128,193,162, 40,170, 90,131, 85,147,209, 50,214, 92,189,124, 12,103,103,103,232, -245,122,252,246,219,111, 85,198,170,234,141, 64,175,175, 83, 67,163,209, 52,115,114,114, 66, 89, 89, 25,124,125,125,171, 52, 42, -211, 85,249,145,201,100,208,104, 52,112,117,117,133, 70,163,105, 86,135, 1,106,105,105,105, 89, 21, 14,212, 86, 84, 82,157, 78, -135,146,146, 18,148,148,148, 64,167,211,161,184,184, 24,229,229,229, 40, 41, 41,129, 66,161, 8, 50, 38,207, 28,199, 33, 34, 34, - 34,193,207,207,175,165, 64, 32,128,153,153,153,169, 82,169, 68,229, 96,130,162,162, 34,236,218,181, 75, 57,110,220, 56,187,187, -119,239,170,141, 41,195, 25, 51,102, 64, 42,149, 66,165, 82, 97,243,230,205,152, 49, 99, 6,196, 98, 49, 20, 10, 5, 54,111,222, -140, 89,179,102, 65, 40, 20, 66,171,213,226,224,193,131, 53, 63,100,163,162,146,239,222,189, 27,212,170, 85, 43,235,227,199,143, -231,247,238,221,219,190,111,223,190, 85,101,199, 48, 12,218,181,107, 7,127,127,127,228,229,229,225,220,185,115, 5,141, 27, 55, -182,187,119,239, 30,151,147,147,147, 90, 71,190,171, 76,147, 64, 32, 0,203,178,200,205,205, 69, 73, 73, 9,242,243,243,145,149, -149,133,140,140, 12, 8,133,117,207, 28, 98,107,107,251, 78, 96, 96,160,160,194,108,161, 81,163, 70,152, 61,123, 54,163, 86,171, - 71, 2, 56, 87,177, 89,255,253,251,247, 31,247,241,241, 17,186,184,184,224,233,211,167,176,183,183, 23,154,152,152,140,170,203, - 96, 57, 57, 57,237, 56,117,234,148, 77,229, 8,218, 74,212,106, 53, 24,134,193,232,209,163,109,182,109,219,182, 67,175,215, 15, -248, 39,222, 20,204,172,172,132,111,117,177,204,186,123, 55,162,105, 80,183,207,132, 54,190, 75,158, 25,112, 64, 24,122,125, 99, - 80,151,118,129,251, 42,251,101,213,198,208, 94,246,107, 7,245,111, 65,143, 25,222, 58, 81,104,234,231,189,119,215, 70, 71, 27, -235, 46,255,189, 81, 8,109, 96, 42, 3,252, 61, 88,250,206,233, 68,199, 89,179,252,116,251,126,249, 48,113,239,177,135,189,197, -146,176,158, 39,130,243,103,213,164, 29,153,104,248,189, 84, 99, 19, 96, 89,122,140,130,237, 71, 8, 10, 10,130,189,189, 11,126, -222,178, 7,174, 13, 91, 65,167,211,193,194,194, 66,254,236, 54,162,223,107,140,185, 2,128,165, 75, 67,184,174, 93,187,233,133, -246,118,204,244,233,223, 15,239,219,127,120, 64,183,238,189,248, 75,151,206,235, 59, 6,232,179,122,117,107,159,115, 45, 36,228, -105, 78, 78,102, 99,255,128,230,136,141,124,216,151,231, 17, 65, 81,213, 71,155, 34,147,112, 94, 67, 69, 93, 61,248,197,100, 78, -173, 11, 53, 89,249,211,147,254,111, 15, 25, 31,216,181,115, 23,238,210,229,139, 58, 9, 74,162,205, 58,119,204, 28, 63,118,212, -241,131,135,142,190,117,245,242,105,159,210,146,220,211,107,247, 16,115, 85,245,114,198, 48,142, 66,169,148,206,189,122,149,105, - 49,105, 82, 85,185,200,229,114,156, 60,121, 18, 18,137, 4, 98,177, 24, 18,137,164,234, 35, 22,139,225,228,228, 4,138,231,233, -250,104,102,103,103, 35, 39, 39, 7,150,150,150,176,183,183, 71, 78, 78, 14,110,221,186,133,167, 79,159, 66, 40, 20,162,127,255, -254,160,107,120,110,190,164,169,251,112,249,242,126, 77,155, 55,119,121,217, 92, 85, 62,219,138,138,138,208,173, 91, 55,234,210, -165, 75,246,215, 19, 19,135, 64,171,221, 83,155,102,179,193,131, 11,243,130,131,171, 61,118,147, 38, 77,168,227, 39, 79, 74,223, - 27, 61,122,230,183, 91,182,108, 88,180,110, 93, 14, 24,198,169, 62,121,167, 40,138,166, 40, 10,110,110,110, 40, 42, 42, 66,121, -121,121,101,192, 1,214,214,214, 48, 24, 12,224, 56, 78, 68,106,164,241,208,117,153,129,151,141, 84, 77, 31,154,166, 95,201,100, -213,134, 49, 6,171,210,100, 72,165,210, 23, 46,174,202,207,243, 23, 95,165,137, 49, 2, 65, 89, 89, 25,142, 29, 59,134,162,162, - 34, 40, 20,138, 23,204, 85,101,228, 42, 41, 41, 9,251,247,239, 71,102,102, 38, 4, 2,129, 81,147,182, 38, 37, 37, 61,244,244, -244,108, 89, 25, 17,235,209,163, 71,131, 27, 55,110,100, 85,154,185,133, 11, 23, 22,180,111,223,222,238,229,135,123,173,137, 21, - 8,112,235,214, 45,168, 84, 42,240, 60, 15,177, 88,140,216,216, 88, 48, 12, 3,158,231, 33, 20, 10,145,159,159, 95,103, 4, 43, - 34, 34, 98,226, 7, 31,124,176, 97,210,164, 73, 87,231,206,157,123,169,103,207,158,233, 20, 69,193, 96, 48,192,194,194, 2, 78, - 78, 78,136,139,139,131, 90,173,198,231,159,127,158,182,123,247,238,203,155, 55,111,190,186,117,235,214, 13, 25, 25, 25, 31,212, -231,220, 50, 12, 3,165, 82,137,226,226, 98, 20, 21, 21,161,172,172, 12, 26,141,230,149,234, 80,175, 94,189,112,250,244,105, 65, -175, 94,189,182,121,120,120,228,120,120,120,228,244,234,213,107,219,239,191,255, 46,112,117,117, 69,122,122, 58, 66, 67, 67, 81, - 84, 84, 4,142,227,168, 58,162,171, 61,198,142, 29,219,217,221,221,157,210,235,245,208,106,181,208,233,116,208,235,245, 96, 89, - 22,105,105,105,104,210,164, 9,237,238,238,222, 1, 64, 15,114, 11,169, 31,101, 25,135,192,231,253, 8,190,232, 0,184,188,159, -160,212,188,154, 78,113,113,241,215, 31,127, 83,154,199,150, 94, 69,212,163, 99, 80,168,133,104,224,211, 3, 83, 38,141,198,131, -123, 87, 81, 88, 88,136,232,232,104,116,237,218, 85, 76, 81, 84,189,234,230,129, 3,167,217,247, 70,127,249,110,175,190,195, 91, -247,234, 61,128,189,116, 41, 88,123,255,206,249,135, 62,158, 22,121, 60, 83,146,107,105, 33,127, 20, 31, 23,141,198,126, 77, 96, - 96,184,174,192,210, 90,235, 84, 98, 34,116,103,114,156,217,119,103, 68,140,237, 59,104, 66,139, 94,189,251, 26, 46,156, 63,197, -222,184,120, 36,180,111,143,134, 33,171,214,236,115, 43, 50,248, 54,149, 89, 56,157,237,208, 82,222,101,234, 80,247,201,164,166, - 84, 19,117,146,201, 56, 84,220, 55, 41,138, 2,199,113, 47,152,170,151, 63,198, 60,147,158,215,172,132,231,121,148,148,148,224, -233,211,167, 88,179,102, 13, 30, 63,126, 12,150,101,171, 34, 89, 53, 62,135, 42,154,116,197, 50, 25, 7, 0,137,217,217,221, 62, -249,228, 19,105,117,230,170,176,176, 16, 5, 5, 5,200,204,204, 68,255,254,253,197,101, 54, 54, 45,235, 74,167,171,131,131, 86, - 46,147,229,198,197,197,253, 33,189, 10,133, 2, 82,169, 20, 63,254,244,147,248,116, 68,196,140, 27,183,110, 89,213,167, 60, 43, -117, 40,138,130,131,131, 3,188,189,189, 17, 20, 20,132,102,205,154, 65, 38,147, 33, 50, 50, 18,191,254,250, 43, 4, 20,197,144, -154,248, 6, 34, 88, 53, 25,172,234,126, 23, 10,133,168,143, 33, 48, 22, 99,154, 8,101, 50,217,147,220,220,220, 78, 13, 26, 52, -128,193, 96,168,138, 94, 85, 54, 19, 86,254, 13, 0, 82,169, 20,209,209,209,144,201,100, 79,106,211,148,203,229, 79, 4, 2, 65, -135, 54,109,218,224,248,241,227,184,122,245, 42,146,146,146,160, 86,171,161,209,104,160, 86,171, 17, 25, 25, 9,142,227, 16, 24, - 24, 8, 75, 75, 75,200,229,242, 39,117,165, 85,169, 84,102, 11,133, 66, 63, 19, 19,147,255, 54,117, 56, 59,163,160,160,128, 51, - 24, 12,216,181,107, 87,153,147,147,147,169,137,137,137,209,229, 73, 81, 20,242,242,242,224,230,230,134,178,178,103,211,124, 41, - 20, 10, 56, 56, 56, 64,175,215,131,227, 56,104,181, 90,152,153,153, 25,211, 57, 79, 19, 31, 31, 63,251,185,191,219,140, 28, 57, -114,255,193,131, 7, 27, 93,190,124, 25,247,238,221,131,157,157, 29,190,249,230,155,164,148,148,148,247, 0, 60,200,203,251,223, -247,119, 44, 44, 44, 60, 26, 17, 17,209,161, 77,155, 54, 85,119,135,238,221,187, 83,221,187,119,183,123, 62,164, 95, 88, 88,136, -176,176, 48,132,132,132,192, 96, 48, 32, 58, 58,154, 85,171,213, 7,106,187,231,184,186,186,238, 92,180,104,145, 25,195, 48, 16, - 8, 4, 16,137, 68, 96, 24, 6, 82,169,180, 42, 82,155,150,150,134, 97,195,134, 89,110,220,184,113,135, 86,171,245, 6,160,255, - 39,221, 20,202, 75, 74,152,224,187, 10, 7,107, 83,207,176,152,135, 59, 58,249, 87,220, 39, 98, 30,110,103,100,166,110,247,238, -133,169,205,219,201, 74,234,188,209,158, 8,206,159,163,215, 61,232,119,254,242,147, 97,179, 63,255, 72,226,209,208, 43,247,214, -163, 39, 30, 29, 13,179,105, 83, 25,160,212, 0, 69,165, 64, 76,170,128,243,104,232,149,251,224, 81,172,100,221,134,173, 94, 42, -165,174,178,137,176, 70, 50, 51, 51, 53, 55,120,126,232,236,239,229, 33,163,199, 8, 36, 18,153, 13, 20, 69,241,240,240,112,197, -187, 67, 59,225,199,223, 46,194,210,202, 26,142,142,142,160, 40,202,180, 30,217,167,238, 4,135, 78, 26,247,193,148,246,125,222, - 26,192, 94,184,120, 22,193, 23,142,221,219,185, 97,254, 49,189, 80, 97, 74,179,229, 38,110, 13,156,194,147,147,226,222,239,218, -253, 45,200, 76,228,222,128,127,181, 79,241,128,134, 24, 7, 26,238,224,144,118,108,207, 82,217,184, 15, 38,119,236,219,127, 48, -115,225,220, 9, 92, 56,181,251,238,146, 25, 13,207, 38,133,237, 19,223,185,159, 33, 27, 58, 98, 90,241,233,224,104,221, 59,203, - 61,227, 92, 26,183, 84, 3, 73,228,233, 84,249, 2, 41, 20,230, 50, 90,173, 91,131,190,125, 5,170,212, 84,145,153,163, 35, 83, -249,146,246,252, 75,245,203, 17, 44,154,166, 1,154,230,140,209, 52, 54, 45,106,181, 26, 92, 13,115, 31, 82,149,154,253,251, 11, - 84, 25, 25,162,188,194,194,134, 13, 27, 54,124, 97, 27,131,193,128,194,194,194,170, 79, 73, 73, 9,100, 50, 25,138, 12, 6, 71, - 99,210,217,181,121,243, 93,223,175, 91, 55,103,203,111,191, 85, 53,245, 40, 20, 10,148,149,149,161,180,180, 20, 52, 77,227,203, -185,115,165,115,151, 47,255,100,160, 80, 56, 19, 12, 99,116,121, 86,190,172,211, 52, 13,161, 80,136,212,212,212,170, 79, 90, 90, - 26,100, 50, 25,120,138,226, 72,141,124, 3, 6,171,178,147,123, 93,230,170,242,119,129, 64, 96, 92,184,183,226, 77,224, 77, 69, -176,148, 74,229,229,155, 55,111,182,235,219,183,175,240,206,157, 59,112,118,118,254, 67, 51,161, 80, 40, 4, 69, 81,144,203,229, - 56,119,238,156, 94,169, 84, 94,174,227, 34, 10, 14, 14, 14,110, 61,107,214, 44,209,132, 9, 19, 16, 25, 25,137,169, 83,167,162, -184,184, 24,101,101,101, 40, 44, 44,132, 90,173, 70,187,118,237, 32,147,201, 16, 31, 31,111, 80,171,213,117, 77, 85,192,231,229, -229,149,219,219,219, 59,191,252,143, 17, 35, 70, 56,254,252,243,207,170,152,152, 24, 67,167, 78,157, 44, 0,212,203,176,238,223, -191,191,234,156,197,198,198, 98,243,230,205, 85,253, 16, 30, 61,122,132,181,107,215,130,101,217, 87, 89,164,242, 65, 65, 65, 1, -163,215,235,225,227,227, 3, 87, 87, 87,168,213,106,108,220,184,145, 1,240,224,207,168,144,198, 68,176, 52, 26,205,145,241,227, -199,207,125,252,248,177,179, 88, 44,174, 12, 93,131,227, 56,232,245,122,164,164,164, 32, 58, 58, 26,241,241,241, 40, 40, 40, 0, -207,243,208,233,116,120,244,232, 81,137,193, 96, 56, 84,147,174,189,189,253,194,109,219,182, 57,153,152,152,252, 97, 98,221,202, -155, 78,101,211,171,131,131, 3,186,119,239,238,112,229,202,149,133,122,189,126,241,223,253, 70, 80, 57, 67, 59,207, 33,126,192, -251,179,185,105, 83, 39,137, 27, 7,232,227,226,163,239,179,161,215, 55, 6, 1,128,204,212,237, 94, 99,191, 86, 81, 55, 34,204, -184,183,199,125,217,210,191, 17, 4, 20, 15, 63,138, 71,193,203, 51,190, 87,190,163,157,189, 89,114,182,173,151,245,205, 19,191, - 95,254,105,222,236,143,238, 47, 90, 52,207, 65,163, 83,202,252, 61, 88, 26,120,102,174,238, 68,154,106, 86,172,248,232,254,234, -117,187,184,180, 4,253,204,251,137, 37, 53,142,240,125,222,180,208,116,150,204,201,107,102,150,103,227,158, 13,195,239,254, 74, -217, 89, 8, 96, 30, 48, 16,253,251,189,133, 75,193, 55,145,154,173, 70,197, 11, 64,173,211, 30, 4,120, 96,108,165, 38, 69, 67, - 54,118,226,228,174,253,251, 15,230,207,158,249,157, 57,113,120,247,205,253, 7,214, 30,162,197, 98,161,158,179,208, 81, 2, 77, - 9, 43,176,138, 84,150, 22, 1, 0, 68, 66,177, 69, 45,237, 3,238, 81,145, 49,126, 77,154,248, 59,141,157, 56,197,114, 64,255, - 33,252,217,179, 39,184, 67,123,119, 93, 61,180,169,217, 94,206, 80, 38,206, 78, 81, 73, 75, 21,134, 82, 94, 32,177, 42, 87,112, -170, 92,141,183,198,229,238, 8, 61,112,132, 60,157, 42,159, 3, 90,109, 70,121,122,186,179, 77,183,110,210,248,165, 75,229,142, -237,218,105, 40,138,170,211, 96, 9, 4, 2,240, 53,244,227,123, 89,179, 62, 6,139,167,168,106, 7, 31,177, 90,109,122,121,106, -170,179, 93,183,110,178,132,197,139,229,213, 69,237, 11, 11, 11, 81, 84, 84,244,130,193,170,184,215, 24,149,206, 53,159,127,126, -183,205,132, 9, 69,119,238,220,113,236,208,161, 3, 85, 86, 86, 86,101,174, 42,127,183,183,183,167,220, 27, 54, 52,191,156,153, -233, 85, 93, 31,172,234,202,211,152,188,211, 52, 93, 99,121, 18, 94, 35,130,101,172,193, 50,226,225,104, 48, 24, 12,112,112,112, - 64, 65, 65, 1, 56,142,171,241, 68,154,152,152, 84,182, 1,215, 58,146, 78,161, 80,108, 88,177, 98,197,244, 30, 61,122,216,249, -251,251, 35, 63, 63, 31, 14, 14, 14, 16, 8, 4, 85,233,170,212,139,136,136,192,193,131, 7,203, 20, 10,197,134, 58,242,189,254, -151, 95,126,249,100,192,128, 1, 54,246,246,246,176,182,182, 70,120,120, 56,172,172,172,160, 80, 40, 16, 27, 27, 11,115,115,115, - 80, 20, 5,173, 86,139,235,215,175, 43, 56,142, 91, 95,199,133,201,223,186,117, 75, 47,151,203,195, 11, 11, 11, 5, 5, 5, 5, -130,138,233, 25, 68,165,165,165,162,243,231,207,219, 89, 90, 90,170,174, 92,185,146,239,238,238, 46, 72, 78, 78, 22,232,116,186, - 58, 93, 22, 69, 81,248,252,243,207, 33, 22,139,161,213,106,177, 97,195, 6,204,158, 61, 27, 66,161, 16, 58,157, 14,223,125,247, - 29, 22, 44, 88, 80,101,152, 79,157, 58, 85,175, 10, 82,217,129, 84,175,215, 67,175,215,195, 96, 48,252,169, 21,210,200, 38,194, -156,167, 79,159, 14,108,211,166,205,197, 19, 39, 78,216, 90, 88, 88, 32, 43, 43, 11,249,249,249,200,205,205, 69, 94, 94, 30, 20, - 10, 5,180, 90, 45,172,172,172,144,154,154,138,139, 23, 47,150,149,151,151,191,133, 90, 70, 16, 10, 4,130,241, 93,187,118, 21, -190,156, 6,154,166,171,234,147, 72, 36,130, 68, 34, 65,102,102, 38,186,118,237, 42, 9, 9, 9, 25, 15,224,111,111,176, 42,103, -104,111,218, 52,192,126,224,224, 49,250,214,109,251,150,135, 60,184,148, 97,198, 81,137, 93,218, 5,238, 3,128,123, 97,106,243, - 27, 17,102, 92,139, 86,189,169,183, 7,170, 91,238,220,190, 69, 18, 21, 25,229,217, 36,176, 73,173, 51,250,219, 53,224,134,244, -237,217, 48,219,194,148, 18,174, 88,177,250,212,182,237,191,181,189,115,250,191,211, 52,172, 88,241,108,154,134,190, 61, 27, 50, - 81,177,113, 67,144,136,221,198,154,150,129, 3,251,134,110,219,113, 16,153,241,167, 92,214,207, 49,145,160, 48, 15,144,183, 66, -215,214,182,120,184, 53, 26, 97, 97, 97, 57, 28,199,213,222,148, 75,195, 61, 34, 34,202,175,105, 96, 19,167,113, 19, 39, 91, 14, - 24, 48, 4,103,207,158,196,158, 29, 91, 66, 58, 88, 5,109, 75,125, 80, 32,112,245,179, 22,203,173, 36, 98,161, 88, 38, 20, 11, -197, 5,122,195,179,232,186, 80, 44,178, 0, 70,214,250,208,153, 58,101,140,101,207, 62, 67,112,166, 66,115, 81,203, 17, 91, 61, -133, 1, 84,187, 57,107,166,121,122,120,122, 40, 85,185,101, 52, 45,209,107,180,156,249,154,173, 41,223, 39, 38,140, 79, 4,176, - 14,100, 20, 97, 37,225,123, 6, 12,104,251,105, 66,130,216,190,115,103,147,172,171, 87,229, 47, 55, 17, 86,103,176,132, 66, 33, - 64,211,140, 49,154,212,165, 75, 52, 0,136,197,226, 26, 95,236,197, 98, 49, 84, 42, 21, 24,138,170,118, 3, 49, 16,190,103,224, -192,118,159, 38, 36,136,108,122,244,144,219, 63,126,156,150,156,156,236, 27, 20, 20, 4,150,101, 95,136, 92, 85,126, 52, 26, 13, -116, 58, 29,100, 82,105,132, 49,233,204,189,126, 93,179, 96,226,196,197,159,124,252,241,166,131,135, 14,201, 44, 44, 44, 80, 86, - 86, 6,133, 66, 81,245,209,106,181,104,221,166,141,104,119,108,236, 88, 20, 23, 47, 49,166, 60, 29,123,244, 80,213,117, 79,174, - 48,172,164,137,176, 30,208,117, 69,176, 94,115,154,134,192,151, 52, 23,244,239,223, 95,147,148,148, 4, 55, 55,183, 42,147,242, -252, 49, 45, 44, 44, 96,101,101,133,168,168, 40,108,219,182, 77, 77, 81,212,130,218, 52,139,139,139, 21, 26,141,102,212,232,209, -163,213, 34,145, 8,126,126,126, 85,205, 58, 60,207, 87,245,189,138,136,136,192,248,241,227, 85, 26,141,102, 84, 53,115, 96,189, -160,153,154,154, 90,170, 84, 42,223, 31, 51,102,140, 42, 38, 38, 6, 93,186,116,193,227,199,143,161, 84, 42, 81, 94, 94,142,228, -228,100, 52,105,210, 4,122,189, 30, 71,142, 28, 81, 41,149,202,247, 83, 83, 83, 75,107,211, 84, 40, 20,131,190,253,246, 91,193, -217,179,103, 61, 93, 92, 92,154,182,105,211,198,191,103,207,158,222,195,134, 13,243, 24, 48, 96,128,115,227,198,141, 53,125,251, -246,181,239,223,191,191,189, 64, 32, 16, 37, 36, 36,100,243, 60,223,191, 54,205,231, 13, 64, 92, 92, 28,244,122,253, 31,250, 92, - 85,142, 38,100, 89,214,168,115, 84,157,201,174, 52, 86,149, 70,203,136, 72, 88, 96, 53,105,172,115, 39,137, 68, 82, 25,225,228, -141,208,124, 28, 29, 29,221,167, 99,199,142,161,227,199,143, 87,164,165,165, 65, 44, 22,195,213,213, 21, 30, 30, 30, 48, 53, 53, - 69, 81, 81, 17,142, 28, 57,162, 58,119,238, 92, 68, 89, 89, 89,119,252,113, 14,172,192,151,210,152, 92,221,205, 85, 32, 16,252, -193, 96, 85,174, 20, 64,211,116,114,125,202,243, 21,249,159,105, 78,249,104,172,205,219,131,134,152,159, 60,121, 82,182,121,243, -214,168, 46, 93, 38,239, 50,115,254,228,188,153,243, 39,231,219,117,248,112,223, 15,191,236,120,122,252,247,223, 77,222,126,123, -152,229,180,201, 99, 93, 64, 81,194,186, 52,229, 82,105,187,174,237, 27,151, 92,191,117,157, 89,189,110, 23,219,169,203,128,123, -155,126,248,229,208,166, 31,126, 57,212,169,203,128,123,171,215,237, 98,175,223,186,206,116,109,223,184, 68, 46,149,182, 51, 38, -157, 83,167,140,177,124,123,192, 16,156, 62,125,156,217,191,107,195,119, 39,175,233,186,141,152,171,201, 77,125, 26,204, 35,231, -107, 56, 72,110, 34, 45, 45,173,148, 97,152, 30,213,116,112,175, 86,115,218,228, 49,207,155,171,235, 81,201,248,109, 75,104, 40, -251,243,196,165,134,125, 23,142,171, 79,135,132,150,133, 60, 76, 43,206,127, 90,154,168, 84,148,233, 56,142, 3,207,177,130,101, -203, 64,213,118,142, 58,117,234,142, 43,151,246, 97,215,246, 95, 75, 57, 14,154,145, 71,142,176, 35,127, 94,202,123,120, 52,244, -216,187,119, 31, 53,112,208, 80, 75,158, 7, 55,104,232, 16,171,253,123,247, 83,141, 26, 53,106,232,229, 5,241,223,189, 46,189, - 41,205,165, 64,113, 89,106,106,200,131,141, 27,117,142,163, 70,217, 72, 28, 29, 45,192,113, 84, 93,125,176,170,137, 96,213,168, -233,104, 99,147,121,225,194, 5,248,249,249,193,213,213,245,133, 22, 25,145, 72, 4,119,119,119,216,219,219,227,226,197,139,224, -129,135,213,105,206, 7, 74, 74, 18, 19,175,221, 91,179, 70,235, 56, 98,132,117,203, 70,141, 30,110,218,184, 81,199,178,108, 85, -212,234,249,159,197,197,197, 96, 89, 22, 87,175, 92,209,149,171,213,219,106, 75,231,163, 31,127,212, 86,230,189,157, 70,163, 28, -218,186,245,170,177, 99,199,234,147,147,147,193,178, 44,158,143,100,229,229,229,193,220,220, 28,106,141,166,129,131,131,131,220, - 24,205,188,179,103,205, 80,199,125, 93, 32, 16,188,220, 68,248,103,156,247,127, 79, 4,139, 97, 24,184,185,185,189, 48,207, 72, -101,199,193,202,200,144,145,145, 43, 0, 64, 86, 86,214,110,134, 97, 46,140, 29, 59,118,113,203,150, 45,167,206,156, 57, 83,208, -168, 81, 35,148,150,150,194,218,218, 26,246,246,246, 72, 73, 73,193,209,163, 71,217,146,146,146, 95, 88,150, 93,158,151,151,151, -111,132,238, 85, 0, 3,223,122,235,173,131,159,124,242,137,101,183,110,221, 68,149, 15,192, 39, 79,158,224,236,217,179,250, 3, - 7, 14,148,105, 52,154, 81,198,204,226, 14, 0, 57, 57, 57, 23, 1,188, 51, 97,194,132,189,195,134, 13, 51,215,104, 52,162,164, -164, 36,232,116, 58, 48, 12,131,162,162, 34,253,181,107,215,202, 85, 42,213,152,138,109,235,210,123,148,147,147,211, 68,175,215, -143, 15, 13, 13,253,250,157,119,222,177,237,216,177,163,152, 97, 24,220,188,121, 51, 63, 40, 40,200,161,172,172, 76,127,235,214, -173, 66,141, 70,179, 32, 43, 43,203,168,165,114, 40,138, 66, 89, 89, 25,236,236,236,160,209,104,192,113, 28,116, 58, 29,204,205, -205,171,150, 55,226,121,254,217,197, 81,255, 38, 66, 48, 12, 35, 48, 24, 12, 24, 61,122, 52, 56,142,195,134, 13, 27,192, 48,140, -160,190, 58,102,102,102, 15, 35, 35, 35, 7, 54,109,218,180, 42, 61, 52, 77,131,166,105, 72,165, 82,216,217,217,193,214,214, 22, -151, 47, 95, 6, 77,211, 15,141,148, 13, 43, 40, 40,104,117,225,194,133,142, 97, 97, 97,227, 0,180,208,235,245, 13, 88,150,165, -104,154,206,102, 89, 54,188,188,188,124, 27,140, 92, 42, 39, 47, 47,239,235,241,227,199, 7,237,223,191,223, 76, 40, 20, 86,149, - 23, 77,211, 16,139,197,176,179,179,131, 76, 38,131,183,183, 55,212,106, 53, 22, 46, 92, 88,166, 82,169,190,254, 39,221, 16,186, -116,234,138, 43,231,247,201,119,237,220,163, 96, 89,208, 21, 83, 49, 84,225,223, 8,130,157,219,183, 72,100, 66,141,117,151, 78, - 93,141,106, 90,209,233,153,194, 81,147,126,113,171, 88, 42,231,235,228,148,212,245,251,126,249, 48, 17, 0,214,109,216,234,149, -150,160,159, 25, 21, 27, 55,100,243,214,107,237,116,122,198,168, 5,112,255,107, 90,246,150,130,135, 38, 43, 43,235, 30, 69,185, -122,118,249, 64,191,192,175, 33, 53, 56,183,144,203,164, 40,106, 70, 86, 86, 86,162,177,121,239,216,177, 27,174, 93,218,143, 93, - 59,246,150, 82, 28, 52,149,215,223, 17,128, 63,178, 52,132, 7, 66, 42, 55, 85, 78,123, 7,203, 22,124, 57,117,118,153,162,244, -251,205, 63,215,222,108,210,188, 69,123, 52,111,209, 30,211,103,124,101,217,164,169,191, 59, 0, 28, 57, 2,182,169,103,212,169, -197,203,151, 14, 94,190,120, 41,202, 84, 90, 84, 46,171, 19, 27, 19,117, 38, 49, 9, 58,242,120,250, 47,139, 25,230, 30,190,248, -162,177,166,180,212,190,243,220,185,118,194, 53,107,232,202, 23,232,151, 35, 88, 85,209,171,122,104,158, 15, 14, 62,243,197,156, - 57,153,107,215,172,233,187,250,219,111, 77, 2, 2, 2,144,147,147, 3,127,127,127,184,186,186,226,230,205,155,184,120,238,156, -178, 92,173, 94,224,228,228,180, 57, 59, 59,187, 90,205,165,192, 61,225,130, 5,222, 58,165,210,113,237,246,237, 79,123,246,238, -157,187,109,219,182, 6,253,250,245,163, 85, 42, 21, 74, 75, 75, 81, 90, 90, 10,173, 86, 11,177, 88,140,172,204, 76, 46, 35, 51, - 51, 60, 45, 45,109, 91,173,233,156, 53,171,177,170,168,200,190,243,220,185,118,134,194, 66,217,236,148,148, 12,122,231,206,111, -167, 78,153, 50,103,230,172, 89,210, 6, 13, 26, 80, 90,173,182,202,104, 25, 12, 6,152,152,152, 24, 24,134,177, 5,160, 50, 70, - 83,118,230, 12, 83, 88, 88, 8, 27, 27,155,170,105,151,104,154,134, 76, 38,131,181,181, 53,202,203,203,193,243, 60,153, 0,183, - 62, 45, 50, 53,253,195,207,207,239,161, 80, 40,108,240,124,136,176,186,181,237,158,255,157, 97,152,140,200,200,200,214, 47, 57, -220,106, 67,159,174,174,174, 94, 28,199,125,211,177, 99,199,119, 62,250,232, 35, 42, 36, 36, 4,193,193,193,124,102,102,230, 17, -154,166, 23,100,102,102, 38,214,242,102, 83,173,166,181,181,181,185,185,185,249,231,166,166,166,189, 43,167, 98,144,201,100, 79, -148, 74,229,101,133, 66,177,161,150,217,219,107,212,244,244,244,180,224, 56,238, 51, 83, 83,211, 62, 5, 5, 5, 45, 1,192,206, -206,238,177, 82,169,188, 68,211,244,198, 90, 22,144,174, 81,211,217,217,217,196,204,204,236,107, 27, 27,155,247, 63,250,232, 35, -219,144,144,144,236,199,143, 31,139,203,202,202,246, 49, 12, 83,219, 98,207,127,208, 12, 8, 8,120, 97, 45,194, 55,121,142, 0, -160,121,243,230,167, 7, 13, 26,244,246,251,239,191, 15,131,193,128, 95,126,249, 5, 23, 47, 94, 60,147,144,144, 48,176,142,183, -207, 23, 52, 29, 29, 29,237, 92, 93, 93,175,141, 25, 51,198, 99,232,208,161,114, 75, 75, 75, 8, 4, 2, 40,149, 74, 36, 38, 38, -226,201,147, 39,252,197,139, 23,203,163,162,162, 50,212,106,117,247,220,220,220, 2, 99,203,243, 53,223,146, 95,208, 20, 10,133, -221,220,220,220, 14, 44, 89,178,196,188, 79,159, 62, 38,182,182,182, 16, 10,133, 96, 24, 6,185,185,185,136,136,136,192,217,179, -103,149,135, 15, 31, 86, 22, 22, 22,142,198,115, 79,221,255,101, 58,223,180,102,229, 76,238, 47,212,173, 38, 1, 81, 49,201, 88, -245,194,119,158,152, 21, 21, 25,213,236,249,200,213,115, 51,185, 27,149,206, 1,157,173, 6,188, 51,180, 77,111, 0, 56,122,226, -193,229, 58, 22,123,126, 57,157,139,162, 34, 99, 94, 90,108,218, 63, 54, 58, 9, 43, 94, 57,239,158, 88, 28, 17, 17,245,130,102, - 96, 96,147,216,232,228,154,103,167,127, 57,208, 91,237,181, 89,217, 95,236,197, 45,211,162, 83,254,219, 4, 26,208, 16, 3,135, -188, 51,236,237,175,230,205,199, 55,171, 87,225,228,209,227,103,162, 83,170,150,243,249, 91,214,165, 63, 81,147, 90, 41, 20,182, -151, 59, 59,119,221,111,103, 55,255,194,165, 75,102,149,253,107, 43,251, 72,190, 60,224, 42, 40, 40, 40, 47, 44, 44,204,209, 24, -205,129, 63,252,160,215,152,155, 75, 87,255,242, 75, 55,149, 78,215,109,246,236,217,194,135, 15, 31,226,192,190,125,140, 58, 61, -125,111, 14,203,126, 86, 67,235,199, 31,242,190, 82, 36,106, 39,179,181,237,222,120,254,124,233,234,131, 7, 39,184, 54,104,224, - 56,112,208, 32,177, 80, 40,132, 82,169, 68, 86, 86, 22,110,221,188,169, 73, 77, 75,139,208,104, 52,195, 50, 50, 50,178,141,205, -251,192, 31,126,208, 91,121,121,193,204,209,145,187,113,235,150,213,220, 37, 75,166, 58, 58, 59, 91,118,238,210, 69, 36,151,203, - 81, 92, 92,140,180,180, 52,220,184,113, 35, 47, 49, 49,209, 5, 0,107,140,230,239, 79,158, 52,191,114,239,222,136, 47,190,248, - 66,226,239,239, 15,115,115,115,148,149,149, 33, 58, 58, 26,183,110,221,210, 30, 60,120,176, 84,169, 84, 78,205,200,200,248,253, - 79, 60,239,127,121,234, 19,168,160,254,228,180,212,121, 2, 28, 29, 29, 91,211, 52,189,168,162, 57,106, 69, 93,107,250,253,147, -110, 58, 78, 78, 78,238,214,214,214, 91,212,106, 53,175,213,106,167,228,228,228,164,253, 5,211, 41,108,221,186,245,207,121,121, -121, 29,121,158,135,165,165,229,237,200,200,200,143, 81,123, 91,124, 77,154, 2, 39, 39,167,142,166,166,166,237, 76, 77, 77,187, -233,245,250,128,138,126,120,209, 42,149, 42,196, 96, 48,220,203,201,201,185, 93,113, 67,248,127,230, 93, 0,160,143,139,139,203, -135, 28,199,249,208, 52,109, 85,209, 84, 90,194,243,124,124,113,113,241, 86, 0,151,254, 2,233,124, 99,154, 77, 60, 49,140,167, -224,255,194,205,129, 67,218,203,157,215, 43, 59,195,191,176, 29,143,152,168,100, 28,175, 71, 58,233,161,189,236,215, 2,207, 70, - 26,162,246,142,179, 47,154, 33, 35, 76, 75,189, 13,150, 7,198, 87,171,153,138, 61, 70,234,113,175,115,142,154,120,160, 27, 40, -116,228, 40,220,139, 73,198,149,127,226,189,238, 77,106,126, 3,216, 28,246,245,189, 77, 11,133, 78, 20, 69,209, 0, 64,209, 52, -199, 1, 44,104,154,121,190, 89,240,165, 23,202, 90, 53,245, 64, 51,177, 84,218,128,101, 24,199, 66,177,216,252,150,169,105, 43, - 45, 80,238,196,178,139,130,139,138, 98,235,155,206,165,128, 53,128, 38, 66,169,212,253,150, 92, 62,168,200,218,186, 85, 49,195, - 56, 2,224,164, 82,105,100,185, 74,181, 45, 61, 61,125,107, 53, 45, 21,117,166, 83, 36,149,186,177, 12,227, 72, 1, 60, 45, 20, -230, 93,144, 74,221,242,237,237,199,169,212,106, 15,169, 84,106, 0, 80,166,215,235,199,164,167,167, 7,215, 71, 51, 77, 32,104, - 18,110,110,222,133,181,176,176,213, 3,166,122,142,211,235, 13,134,116,173, 86,251, 68, 32, 16,124,159,153,153,153,240, 39,159, -247,127,148,193,250,179, 33,125, 8,136, 38,209, 36,154, 68,147,104, 18,205,255,129,166,131,131,131,220,201,201,201,189,226, 37, -241,239,152,247,191,133,193, 50,246, 35, 4,129, 64, 32, 16, 8,132,191, 61,121,121,121, 42, 84,211,231,138,240,255,161,182,209, - 47,245, 9,253,189,138,147,141, 32,154, 68,147,104, 18, 77,162, 73, 52,137,230,191, 78,179, 46,237,191,108,211, 35,105, 34, 36, -154, 68,147,104, 18, 77,162, 73, 52,137,230,223, 77,243, 47, 79,125,154, 8,105, 16,106,194,177,226,243,166,183, 37,252,179,235, -194,203,184, 86,124,234,179,189, 51, 41,114, 2,129, 64,248,123,243,255,232,131, 85,249,160,202,125, 67,219,189,233,125, 1, 96, - 21, 69,225,203,103,110, 21,223, 1,152,255, 58,219,242, 53,172,232,254, 50, 77,155, 54,181,163, 40,170,151,165,165,101, 51,133, - 66, 17,193,243,252,165, 39, 79,158, 20, 82, 70,174,255,228,230,230,230, 41,147,201, 38, 80, 20, 21, 80,113,220,104,141, 70,179, - 51, 61, 61, 61,249, 13,156, 55, 10,192,100,169, 84,250,174,149,149,149, 79,113,113,113,188, 78,167, 59, 12,224, 87,188,194,140, -211,206,206,206,190, 0,198,115, 28, 39,164,105,122,127,118,118,118,152,177,251, 58, 52, 29,114,136, 7, 26, 3,160, 57,138, 27, - 65,243,244, 17, 0, 28, 5, 60,205,139, 60,249,238, 27,174,175,245,169, 11, 47, 64,211,244,106,158,231,190, 0, 0,138,162,215, -176, 44,251, 85,109,219, 11, 4,130,117, 60,199,125, 6, 10, 60, 69,209,107, 56,142,155, 71,110, 81, 4, 2,129,240, 47,192,213, -213,181,191,179,179,243, 94,103,103,231,189,174,174,174,253,141,216, 37,176,154,135, 21, 75, 81, 96,129, 23,231,215,169,199,118, -117,133, 37,159,223,119,173,145, 89,123, 94,211,145,162,192,242, 21, 80, 20, 56, 7, 7,135, 45, 46, 46, 46, 27, 94,254, 56, 56, - 56,108,161, 40,112,207,109,203, 62,103,238, 2,159, 55, 88,117,125,130,130,130,108, 63,248,224,131,141,153,153,153,191,234,245, -250, 45,105,105,105,191,142, 28, 57,114,163,159,159,159,147, 49,121,111,212,168,209,208, 33, 67,223,185,118,253,206,195,216,184, -248,212,172,168,216,196,148, 11,151,111,220,235,219,127,192,229, 70,141, 26, 13,173,199, 57,162, 0, 76, 17, 10,133, 87,205,204, -204, 50,132, 66,225, 85, 0,211, 4, 2,193,239,171, 86,173, 74,137,140,140,204,189,121,243,102,201,181,107,215, 50, 39, 77,154, - 20, 79, 81,212, 41,252,113, 69,128,192,186,162, 56,206,206,206,203,211,211,211, 31,102,103,103, 63,106,208,160,193, 79, 47,105, - 84, 23,245,169,210,180,111, 58, 36, 60,175, 84,207,231,149,234,121,251,166, 67,248,231,126, 15,175,103,149,174,171, 46,253,161, - 46,152,154,154,250,189,100,228, 29,107,208,252,195,190, 54, 54, 54, 46, 60,207,211,222,222,222,109, 93, 93, 93,127,116,117,117, -253,209,219,219,187, 45,207,243,180,141,141,141,139, 76, 42,173,179, 46,189, 65,136, 38,209, 36,154, 68,243,175,166,249,151,231, - 79, 27, 69,200,243,252,184,248,248,120, 57,199,113,240,243,243, 27, 11,224, 92,125,162, 74, 20,133, 47, 57,238, 89, 52,135,166, -169,185, 61,122,244, 12, 50, 49, 49,121, 97,198, 98,181, 90, 45,185,122,245, 74, 47,142,227,169,138,237,190,228,121,108, 52, 50, - 26,229, 72, 81,248, 82,167,211,210, 34,145, 4, 2, 1, 61, 59, 48,176, 89,235,130,130,130, 96,150,101,127,169,102,242,202,186, -195, 54, 20,133,109,219,182, 5, 56, 58, 58,254, 97, 13,149,220,220, 92,241,160, 65, 3,235,165, 55,174, 89, 51,153, 38, 49,177, - 11, 45, 18,185,235, 13, 6, 59, 0, 16,137, 68,133, 50, 51, 51,183,133, 11, 22,200, 77, 77, 77,185,194,194, 66,148,149,149, 81, -211,167, 79,151, 77,159, 62,189, 15,128, 93,181,105, 54,104,208,160, 81, 96,243,150,159,238,220,177,163, 93,105, 81,145,102,235, -247,155, 67,181, 66,169,202, 35,192, 87,188,104,201, 74,203,229,139,231, 79,209,235,245, 17, 25, 25, 25, 73,117, 5, 93, 0, 28, -255,252,243,207,155, 14, 28, 56, 80,162, 80, 40,100, 42,149,170,225,222,189,123, 23,182,105,211,198, 44, 40, 40, 72,114,224,192, - 1,170,164,164, 4, 60,207,203,253,253,253,249,145, 35, 71,106, 14, 29, 58, 52, 29,192,166,250, 68,128, 88,150, 21, 85,118, 22, -100, 24, 70,130,103,209, 84,189, 49, 17, 35, 10,120,218,180,243, 72,128,130, 79,228,205,195,178,166, 93, 70,106,192, 35,158, 2, -158, 86,188, 8,124,196,113,156,103, 13, 81,165,228,204,204,204,223, 94,229,194,122,251,237,129, 0,176,229,209,163, 71,215,243, -243,243, 27,112, 28, 59,198,216,200, 22, 69, 81,148, 80, 40, 28, 15, 96,181, 90,173,158, 20, 28, 28,220, 18, 0,122,245,234, 37, - 6,240,144,231,249,142,248,243,231,165, 35, 16, 8, 4,194,255,136,250, 26, 44, 49, 0, 92,191,126, 29, 60,207, 75, 94,225,120, -212,243,198,229,179,207, 62,131,179,243,139,221, 77,178,179,179,113,237,218,213,215,201,211, 11, 15,169,175,191,254,218,178,176, -176,112,240,182,109,219,250, 2, 88,152,155,155,123,173,142,253,115,121, 30,223,209, 52, 53,151,162, 40, 72, 36,210,228, 41, 83, -166, 60,172,200,191,215,169, 83,167,228,131, 6, 13, 82, 81, 20,149, 8, 0, 18,137,212, 65, 32,160, 61,159, 57, 86,124, 87,155, - 17,124,199,204,204,143,231,249, 65, 83,215,173, 99, 91, 13, 24, 32,180,112,112, 16,128,166,145,159,150,102,187,229,167,159, 58, -198, 94,188, 40,117,242,247, 79,211, 73, 36, 37,113,113,113,112,118,118,134, 88, 44,174,243, 45, 65, 46,151, 79,250,124,230, 28, -251,210,162, 98,181, 65,161,208,155,113, 44, 99, 33, 19, 81,101,249,133, 37,201,233, 22,170, 73,211, 62, 21, 46,158, 55,107, 18, -128,175,234,144,154, 62,115,230,204,128,182,109,219,186, 30, 60,120,144, 42, 45, 45,133, 80, 40, 52,107,217,178, 37, 90,183,110, -205, 6, 7, 7, 83,141, 26, 53, 66, 96, 96, 32,110,222,188,137, 91,183,110, 81, 65, 65, 65,242,227,199,143,143, 53, 24, 12,155, -234, 50,213, 2, 1, 61,111,196,136,145,253,229,114,185, 65,173, 86,227,163,143, 62,130, 82,169, 68, 64, 64, 64,243,238,221,187, -223,209,106,181,162,147, 39, 79, 4,178, 44,135,218,204,117,101, 51, 96, 69,196,170, 25,120,196,231, 71,158,108, 94,249,127,142, -227, 60, 99, 99, 99,155,148,148,148,128,227,184,170, 53, 25, 1,160,107,215,174,245,169, 75,185, 60,143,239, 6, 13, 26, 56, 23, -160,208,179,103,207,194, 79, 63,253,148,141,142,142,238, 62,124,248,176,246, 79,159,198,215,246, 18,144, 75, 81,244, 26,154,166, -190,164, 40,138,154, 48, 97, 98,174,153,153,217, 48, 55, 55,183, 88,138,162,132, 98,177,184,242, 58, 16, 4, 4, 4,216, 7, 6, - 6, 78,179,182,182,206, 19,208,180, 3, 15,158,167, 40,122, 13,207,115,185,228, 22, 69, 32, 16, 8,255, 2,131, 69, 81, 84,193, -227,199,143,157, 53, 26, 13, 40,138, 50, 38, 26, 20,241,210, 3,231,103,154,166, 62,166, 40, 10,129,129,205,146, 54,108,216, 80, -221,122, 91,186,192,192,102, 73, 2, 1,221,136,231,121, 80, 20,189,249,165, 7, 77, 68, 93, 15, 68,137, 68,250, 37, 0, 56, 59, -187,228,158, 62,125,218, 48, 98,196, 8,172, 89,179, 70, 50,111,222,188,149, 52, 77,143,202,206,206,206,168, 37,157, 0, 48,223, -222,222,193,102,219,182,109, 1, 83,166, 76,121,152,149,149,245, 57, 0,184,184,184,108, 0,208,140,162,168,196,231,190,195,175, -191,254,218,122,210,164, 73,209,121,121,121,243,107,210,124,199,220,220,199,214,197,101,232,218,155, 55,121, 33,195, 80,165, 15, - 31,150,100,228,228,232,117, 44, 75,159, 75, 74,106, 55,106,226, 68,177,163,179, 51,127,242,215, 95, 61, 84, 34, 17,207,202,100, -165,145,145,145,188, 94,175,127, 82, 87,222, 41,138,242,183,182,178, 54,221,186,110,243, 67,123,169,128,178,115,115,161,196, 22, - 86, 66,218,204, 92,202, 11, 4,106, 15, 55, 23,115,138,162,252,235, 58, 71, 98,177,120,108,223,190,125,229, 7, 14, 28,160, 2, - 3, 3, 97,101,101,133,235,215,175,227,241,227,199, 40, 46, 46,166, 25,134, 65,155, 54,109,240,221,119,223,193,205,205, 13,165, -165,165, 72, 73, 73,177, 19,139,197,246, 6,131,161,166,242,124,193,240,126,249,229,151,112,112,112, 0,203,178,200,206,206, 70, -121,121, 57, 76, 77, 77, 97,105,105,137,172,172, 44,156, 60,121,194,152,186,100, 20, 29, 58,116, 80, 1, 72,121, 57,130, 85, 31, - 77, 87, 87,215,139,121,121,249, 93,122,244,232,129,146,146, 18,253,146, 37, 75,208,178,101, 75, 52,110,236, 91,103, 58, 89,150, -253,202,206,206,110,187,173,173,237,186, 79, 63,253,212,201,214,214, 22, 90,173,118, 65, 97, 97, 33,190,252,242, 75, 0, 64,235, -214,173,155,241, 60,127,102,210,164, 73,240,244,244,204, 44, 42, 42, 74,139,141,141,157,146,151,151, 23,241,220, 18, 71,127,198, -144,101,162, 73, 52,137, 38,209,252,171,105,254, 35, 13, 22,255,220,131,144, 71, 13, 77, 21, 60,207, 23,187,186,186, 58,155,152, -152,128,231,249,226,250, 30,140,227,184,233,182,182,182,121,243,231,207,239,236,235,235,171,155, 62,125,122, 68, 74, 74,202,130, -231,183,105,216,176,225,215, 63,254,248, 35,226,226,226, 82, 86,173, 90,117,179,176,176,112, 69, 61, 15, 51,143,231,177, 1, 0, -178,178,178, 10, 78,157, 58,213, 54, 36, 36,100,222,134, 13, 27,156,167, 79,159, 46,249,244,211, 79,167, 25, 17,201,129, 80, 40, - 84, 87,215, 44, 88, 29,142,142,142,122,161, 80, 88,211,250,129,152,210,170,149,148,231,184,161,223, 94,191,206,113, 25, 25,154, -179, 59,118, 96,205,173, 91, 83, 45,237,236,220,237,237,237,121,207, 6, 13,242, 77, 24, 38,183, 44, 63,159, 14,234,219, 87,116, - 97,215, 46, 15,169,167,103,212,145, 35, 71,202, 57,142,187,104, 68, 18,202,117, 6,131,214,212,205,197, 48,104, 72,223,102, 79, -238, 63,142, 51,177,177,161,155,181,105,217, 36, 38, 62,229, 17, 5,232,128,186, 23,143,181,180,180,244, 45, 40, 40, 64, 89, 89, - 25,236,237,237,177,113,227, 70, 56, 58, 58, 66,165, 82, 33, 50, 50,146,111,208,160, 1,117,227,198, 13,184,184,184, 32, 63, 63, - 31, 58,157, 14, 42,149, 42, 79,167,211,213,148,247, 92,154, 22,108,165,105,234, 35,138,162,224,227,211, 56,119,211,166, 77, 6, -158,231,225,239,239,143, 97,195,134,225,250,245,235,136,140,140,172,140, 50, 25, 60, 61, 27,229,210, 52,229,240,172,186,213, 30, - 17,172,163,174, 1, 64, 74,118,118,246,252, 87,217,223,213,213, 85,198,178,236, 84, 31, 31,159,129,239,189,247,158, 94, 44, 22, - 67,165, 82, 85,150,133,190, 95,191,126,133,131, 6, 13,180, 61,115,230, 76,173,233, 44, 40, 40, 72, 12, 8, 8,248,104,206,156, - 57,123, 54,111,222,108,245,213, 87, 95, 85, 45,194,205,178, 44, 56,142,171,138,178, 29, 63,126, 28,201,201,201,223,228,229,229, -145, 27, 23,129, 64,248, 55, 98,148, 23,249, 59, 70,176,254, 39,153, 17, 8, 4,191, 94,188,120,177,101,215,174, 93,133,189,122, -245, 10, 60,127,254,124, 96,102,102,102, 68,197, 67, 45,176, 87,175, 94,129, 14, 14, 14,216,184,113,163, 74, 32, 16,252,250,138, -135,169,122,216,101,103,103,223,161, 40,106,209,177, 99,199,182, 77,153, 50, 5,142,142,142, 45,179,178,178,254,167,133, 92, 28, - 23,215,105,194,242,229,156, 12, 16,156,217,179,135, 95,121,243,230,183,135, 14, 31, 22,123,121,121,129,231,121,164,164,164, 88, -252,178,109,155,205,168, 62,125, 34,115,148, 74, 42, 33, 39,135,141, 58,125,154, 46,164,233, 31, 18, 19, 19, 11,158, 95,172,185, - 58,244,122,253,131,180,212, 84,223, 78, 93, 58, 57, 95,127, 24, 21, 58,124,232,192, 30,180,144,166,147, 83,179, 31,216,219,218, -152,222,186,125,179, 76,175,215, 63,168, 43,157, 74,165, 50,153, 97, 24, 27,158,231,237,175, 93,187, 6, 59, 59, 59, 20, 23, 23, -195, 96, 48, 64,175,215,235, 84, 42,149, 44, 38, 38, 6, 90,173, 22, 90,173, 22, 22, 22, 22,120,242,228, 73, 46,195, 48, 87,106, -210,100, 89,118, 50,128,229, 60,207, 35, 46, 46, 46,179,162,233,179,177,149,149,213, 62,134, 97,144,149,149,133,107,215,174,141, -201,206,206,142,123,222,223, 84,252,204,124,229,171,244, 53, 38,131,179,183,183, 15, 20,139,197,243,103,204,152,225,216,180,105, - 83,104, 52, 26, 0,128,153,153, 25, 84, 42, 21, 44, 44, 44,208,177, 99,199,232, 21, 43, 86,232,121, 30, 19, 0,228,212,166, 23, - 29, 29,157,239,235,235, 59, 99,202,148, 41,203,124,125,125, 27,241, 60, 15, 31, 31, 31,244,237,219, 23,103,207,158,197,211,167, - 79,161, 84, 42,217,251,247,239, 31, 72, 79, 79, 63, 77,238,177, 4, 2,129,152,172,127, 78, 4, 11, 21, 25,250,211,167, 40,205, -203,203,203,143,137,137, 57,255,232,209,163,129,239,190,251, 46,174, 93,187, 54, 1,192, 44, 0,144, 74,165, 19,222,125,247, 93, - 60,122,244, 8, 49, 49, 49,231,243,242,242,242,223,196, 49, 41,138, 82,233,116,207, 2, 56, 50,153,204,164,158, 15,106,175,138, -166, 65,240, 60,239, 85,211,119,117, 68,195,220, 59, 12, 27, 70,151, 63,126, 92,178,252,194,133,207,247, 31, 59, 38,118,115,115, -131, 66,161,128, 64, 32,128,133,133, 5,213,119,192, 0,235,173,251,247, 59,185,153,155,223,154, 54,113, 98,236, 55,151, 46,169, -110,149,150, 26, 53,189,130, 70,163,217,246,245,138, 69, 61,246,236, 61,228,239,231,239, 99,125,246,226,213, 80, 91, 91, 11, 19, - 79, 79, 47,105,105, 73,137,246,199, 13,107,132, 74,165,114,123, 93, 58,106,181,250,120,112,112,240, 80, 55, 55, 55,251,136,136, - 8,232,116, 58,176, 44,139,222,189,123,131,231,121, 41, 0, 78, 40, 20, 34, 58, 58, 26,122,189, 62,239,233,211,167,153, 9, 9, - 9, 82, 0,171,235,144,126,193, 40,209, 52, 61,106,224,192,129, 96, 24, 6,125,251,246,197,137, 19, 39,222, 5,176,172,166,237, - 95, 35,130,213,208,217,217,121, 85,197, 49,141,234,220,238,228,228,212,217,219,219,123,217,218,181,223, 81,142,142,206, 96, 89, - 6, 6,131, 30,249,249,133, 80, 40, 20,104,210,164, 9,220,221,221,177,122,245,106, 0, 56, 81,151,185,170, 36, 46, 46, 46, 30, -192,232,137, 19, 39,138,175, 95,191,222, 90,163,209,172,239,211,167, 15, 66, 67, 67, 17, 22, 22,246,190,131,131, 67,158,155,155, - 27,227,234,234,250, 17, 69, 81, 22, 50,153,108,255,155, 40, 7, 2,129, 64,248,155,241, 63,241, 34,255,107,131, 85,107,198, 28, - 28, 28,228,197,133,121,159,121,122,122,202, 0, 64, 42, 22,244,180,181,181,253,166,176,176,176,188,190, 7, 85,169, 84,135,246, -238,221,251,214,247,223,127, 47, 30, 48, 96,128,247,177, 99,199,218, 2,192,128, 1, 3,188,205,205,205,177,119,239, 94,189, 74, -165, 58,244,166, 50,201,113, 92,223, 54,109,218,160,168,168, 8, 41, 41, 41, 15,235,179,239,169, 83,167,228, 0,154,213,245, 93, -109,232, 12, 6,123, 11,103,103, 97,238,245,235,122, 53,195,184,251,250,250, 66,161, 80, 64, 34,145, 64,171,213, 34, 57, 57, 25, - 98,177,152,122,154,148,100, 55,111,214,172, 27, 38,190,190,102,149, 35, 12,141, 33, 59, 59, 91, 13,224,211,149, 95,175,220,183, -118,205, 26,135,162,194,226, 56,177,196, 68, 35, 55,145,218,204,157,179,130,207,205,205,157, 93,177, 70, 85, 93,172,222,183,111, - 95,191,183,222,122, 43,220,205,205,205,161,160,160,192,169,172,172,140, 47, 42, 42,162, 42,234, 6, 5, 0,225,225,225, 72, 77, - 77,101, 88,150,189, 1, 96, 57,140,104,126,172, 10, 77,185,186, 90,183,109,219,182,159,173,173,109, 85, 83,100, 80, 80, 80, 63, - 0, 63,100,102,102, 22,191,201,202,125,241,226, 69, 57,199,113, 77, 0,160, 95,191,126,198,154,241,113,163, 70,141,162, 76, 76, - 76,193, 48, 12,164, 82, 49,164, 82, 41,204,204, 44, 96, 99, 99,131,212,212, 84,244,236,217,147, 75, 74, 74, 58, 41,151,203,119, -212, 55, 77, 87,175, 94, 29,220,182,109,219, 89,211,166, 77,131,193, 96,192,208,161, 67,145,153,153,185, 54, 57, 57,249,160,147, -147,211,152, 5, 11, 22,216,217,218,218,226,203, 47,191, 52, 1,176,148,220,107, 9, 4, 2, 49, 89,255, 12,131, 85,211, 67,177, -141,181,181,245,244,188,188, 60, 89,101,211, 11, 69, 81,178, 22,222,222,191,138,197,226,159,179,179,179,111,213,231,160, 37, 37, - 37,101, 73, 73, 73, 39,239,220,185, 51,114,248,240,225,184,116,233,210,120, 0, 24, 62,124, 56,238,220,185,131,164,164,164,147, - 37, 37, 37,101,111, 34,131, 46, 46, 46,239,116,239,222,125,124,219,182,109,113,234,212, 41,176, 44,123,165, 62,251, 63, 63, 98, -176,186, 81,132,149,223, 25,163, 37,121, 54,207, 17, 88,150,133, 64, 32,128, 70,163, 65,118,118, 54, 98, 99, 99, 97, 97, 97,129, -226,162, 34,202,194,198, 70,175,213,106,217,250,230, 51, 59, 59, 59,227,241,195,187, 9,106,141, 70,100,109,107,163, 50, 55,149, -240,101, 10, 5, 29, 30, 30,154,157,151,151,151, 98,172, 23,228,121,190,219,133, 11, 23, 22, 11, 4,130,119, 93, 93, 93, 49,114, -228, 72,170, 87,175, 94,144, 72, 36, 80,171,213, 40, 41, 41,169, 44,199, 70, 0, 96,103,103,231, 40,151,203,143,210, 52,157,155, -156,156, 60,169,174, 3,176, 44, 59,124,200,144, 33, 66,131,193,128, 21, 43, 86, 96,233,210,165,232,223,191,191,240,193,131, 7, -195, 1,252,246,166, 42, 54,207,243,120,235,173,183,170, 58,185,191,212,185,189, 90,186,117,235, 38, 76, 74, 74,242,114,117,117, - 69, 74, 74, 10,228,114, 57, 28, 29, 29, 97,101,101, 5, 59, 59, 59,124,255,253,247, 88,191,126,125,152, 64, 32,216,156,157,157, -157, 80,223, 52,185,187,187,127, 52,118,236,216,143, 70,142, 28, 9,133, 66,129, 59,119,238,160, 83,167, 78, 88,181,106,149,211, -205,155, 55,103,182,105,211, 6, 66,161, 16, 33, 33, 33, 96, 89, 54,157,220, 99, 9, 4, 2,225,239,111,176,168,151,156, 35, 0, -192,202,202,202, 66, 38,147, 77, 25, 48, 96, 64,231,161, 67,135,162,111,223,190, 47,236,188,113,227, 70,179,107,215,174,205,221, -180,105, 83, 55, 0,155,179,178,178,138,234, 17, 85, 58,190,111,223,190, 1, 29, 58,116,144,247,232,209,195, 11, 0,164, 82,169, -110,223,190,125, 42,142,227,142,191, 66, 94, 94,152,189,221,213,213,181,141, 64, 32,152,208,191,127,255, 54, 31,124,240, 1, 34, - 35, 35,177,119,239,222,104, 95, 95,223, 75,185,185,198,247,155,126,105,196,224, 6,252,113, 20,225,134,186,162, 89, 18,145, 40, -191, 44, 59,219, 86,232,236, 44, 49,149, 72,210, 31, 60,120,224,229,237,237, 77, 37, 37, 37, 33, 46, 46, 14,122,189, 30,143, 31, - 63,230,105, 32, 67, 96, 97, 65,167,134,135, 83, 98,145,168,222,115,118,153,136,185, 86, 11,191,156,236,163,209,168,155,148,150, -150, 50, 66,161, 80, 40, 21,177, 73,245,148,209,186,185,185, 13, 97, 89,214, 78,167,211, 25, 28, 29, 29, 69,151, 47, 95,134, 68, - 34,193,179,209,159,129,144, 72, 36, 58, 87, 87, 87, 5, 0,152,153,153,209,171, 86,173, 18,205,156, 57, 51,178, 46,225,160,160, - 32,145, 68, 34, 25,229,235,235,139,219,183,111, 35, 42, 42, 42,241,246,237,219, 94,173, 90,181,130,155,155,219, 40,103,103,231, -157,161,161,161,134, 55,101,176, 80,207, 78,238, 33, 33, 33,156,139,139, 11, 40,138,130, 64, 32,128, 74,165, 66, 82, 82, 18, 58, -118,236,136,237,219,183, 99,195,134, 13,187,115,114,114,118,188, 74,122, 38, 78,156, 40,110,222,188,249,184,145, 35, 71, 34, 49, - 49, 17,171, 87,175, 46,204,201,201,185,122,225,194,133,225,211,166, 77, 19,116,234,212, 9, 5, 5, 5,216,185,115, 39, 19, 26, - 26,186, 99,192,128, 1,123,182,108,217, 66,238, 80, 4, 2,225,223, 22,185,170,238,247,127, 86, 4,203,197,197,229,109,153, 76, -246,225,168, 81,163, 4,126,126,126,200,205,205,133,185,169, 84, 71, 81,148, 4, 0,204, 77,101, 58,131,193,128,105,211,166,161, -101,203,150,109,231,206,157,219,134,101,217,221,185,185,185, 71,141, 57,112, 94, 94,158,138,166,233, 35, 31,127,252,241,234,199, -143, 67, 27, 1,192,253,251,247,147,178,178,178,230, 25,217,156,245, 60,149,147, 83, 82, 50,153, 73,184,143,143, 79, 97,235,214, -173,173,135, 13, 27, 6, 59, 59, 59,132,134,134, 98,213,170, 85,145, 26,141,102,122, 72, 72, 8,243,191, 46,100,134, 97,210,238, -157, 62,109,253,214,152, 49,214, 43, 70,141,250,241,131,137, 19,191,251,102,213, 42,177,171,171, 43,101, 97, 97,129,176,176, 48, -126,235,111,191,233, 15,174, 89,243,163,192,196, 68,124,253,196, 9, 9,107, 48,196,215,231, 24,174,174,174,221,218,180,107, 27, -184,246,251, 77, 80,171,202,113,255,206,105, 20, 23, 21,224,215,223,142, 53,115,117,117,237,150,153,153, 25, 82,143,244,122, 29, - 57,114,228,153, 57,148, 72,176,124,249,114,184,184,184,192,194,194, 2,229,229,229,152, 60,121,178,228,179,207, 62, 3, 0, 68, - 69, 69,193,204,204,204,216, 40, 91,143, 41, 83,166, 88, 24, 12, 6,156, 59,119, 78,203,178,236,167,151, 46, 93, 58,222,162, 69, - 11,105,215,174, 93, 45,246,236,217,211, 19,192,133,255,227,245,192,241, 60,159,118,241,226, 69,247,145, 35, 71, 66, 44, 22,163, -184,184, 24,230,230,230, 88,187,118, 45,175,215,235,143,190,170,112,102,102,166,196,206,206, 78,194,178, 44,142, 28, 57,130,178, -178,178, 73, 25, 25, 25, 57,222,222,222,199,231,206,157, 59,219,199,199,199, 51, 62, 62, 62,149,101,217, 53,153,153,153,201, 0, - 64, 12, 22,129, 64, 32,252, 3, 13, 22,128,247,207,159, 63, 47,224, 56, 14, 91,182,108,193,163, 71,143,120, 51, 11,155,207,205, - 45,169, 93, 22, 22, 22,108, 73, 73,201,251,223,125,247,221,208,197,139, 23, 83, 93,186,116,193,157, 59,119,168, 70,141, 26, 13, - 7,240,252, 67, 40, 16,181,204,149, 81, 90, 90,250, 32, 55, 55,167,209,115,179,182, 55,146, 74,101,117,141,118,123, 89,243,229, -201, 44, 91,124,253,245,215, 17, 14, 14, 14,134,136,136, 8,108,222,188,153,123,244,232,209, 25, 0,107,243,242,242,212, 70,106, -190, 9,170, 52,173,125,125,111,109,159, 63, 63,168,195,224,193,124,207,119,223,229,214, 73, 36,115, 22, 45, 89,242,105, 81, 89, -153, 27,199,113,176,181,180, 76,219,253,245,215,223,119,234,210, 69,253,228,238, 93,211,155,191,255,110,226,216,176,225,141,250, -164, 51, 51, 51, 51,228,218,181, 27,216,249,219,247,208,235,181,200,206, 76, 5, 0, 20, 20,150,162, 14,115,245, 7, 77,154,166, - 75, 38, 76,152, 32,215,233,116,212,168, 81,163, 68,121,121,121,240,246,246, 6, 0,148,149,149,225,204,153, 51,240,247,127, 54, -173,214,147, 39, 79,170,126,175, 43,157,114,185,252,221,206,157, 59, 35, 37, 37, 5,145,145,145,103,243,242,242,242,163,162,162, -206,166,166,166, 14,111,221,186, 53,142, 31, 63, 62,178, 22,131, 85,175,115, 84, 57,177,104, 61,235, 18, 24,134,153,123,252,248, -241, 41,119,238,220,233, 54,107,214, 44,170, 87,175, 94, 0, 0,165, 82,201, 26,217,223,176,198,116, 86, 54, 15,115, 28, 7, 55, - 55, 55, 37, 0, 36, 36, 36, 36, 3,248,228, 85, 53,223, 68,253, 36,154, 68,147,104, 18,205,191,136,230,191,198, 96, 49, 28,199, -225,218,181,107, 56,118,236, 24,171,211,233,230,231,228,228,196, 86, 60,204, 1, 96,199,227,199,143,111, 12, 31, 62,124, 93, 92, - 92,156, 32, 42, 42, 10, 60,207,215,171,239,144, 70,163, 49,188, 60, 3,129, 70,163,121,237, 38,162,237,219,183, 35, 39, 39, 71, -151,154,154,250,187, 94,175,223, 91, 88, 88,152,253,170, 90,111, 98, 20,225,175,143, 30,105,223, 49, 55, 63, 49,175, 71,143,225, - 43,206,159,151,245,159, 56, 81,215,189, 95,191,111,160,211,233, 68, 34, 17, 7, 19, 19,129,192,196, 68, 28,117,247,174,233,218, -169, 83,109, 41,154, 62,249, 83, 84,148,186,190, 17,172,238,221,187, 96,194,135, 51,161, 86,151,227,238,237,211, 40, 41, 42,192, -157, 7,113,208,234, 81,175, 8,150, 80, 40,116, 55, 24, 12, 82,134, 97, 50,121,158,199,184,113,227,192,178, 44, 52, 26, 13, 20, - 10, 5,138,138,138, 52, 51,102,204,160, 43, 76, 19,222,122,235, 45,163,102,245,247,242,242,114, 23, 10,133,184,112,225, 2, 4, - 2,193,209,103,134, 88,112, 52, 56, 56,120,248,168, 81,163,224,234,234,234,155,152,152, 88,103,231,198,170,197,158, 41,248, 0, - 0, 40,248,216, 55, 29, 18, 94,185,216, 51, 77,211,201, 45, 91,182, 52,170,223,213,203,228,231,231,231,225, 89,199,253,195, 95, -126,249,229,180,182,109,219, 6, 46, 91,182, 12, 0, 4,175, 29, 30,227, 56, 48, 12,243, 90, 83, 72, 16, 8, 4, 2,225,111,110, -176, 40,138, 58,208,163, 71,143,209, 60,207, 11,104,154,222, 91,105,174,158, 39, 35, 35, 35,201,213,213,117,139,167,167,231,123, - 21,145,143,253,245, 60,126, 46,207,227, 91,154,166,158, 95,123, 46,247, 21, 52,190,171,208,160,132, 66,209,222,123,247,238,125, -149,149,149,149, 3,128,125,221, 2,122, 19,163, 8, 1,224,168, 66, 17,255,142,153,217,201,105, 45, 90, 12, 26,250,233,167,124, -235, 62,125, 44,157, 26, 54,100, 24,131,129, 77, 12, 15,167,110, 30, 63, 46,190,249,251,239, 38, 2,138, 58,117, 84,169,140,173, -111, 58, 51, 51, 51, 67,174, 92, 13,185, 56, 98,248,128,183,188, 60, 93, 0, 0,137,201, 89, 40, 40, 42,189, 88, 31,115, 5, 0, -169,169,169, 90, 0, 90, 39, 39,167,225,135, 14, 29, 58, 66, 81, 20,245,252,114, 51, 0,180, 66,161,176, 49, 0, 40, 20, 10,143, -227,199,143,239, 19, 10,133, 25,117,233, 70, 69, 69, 29, 88,178,100,201,152,164,164,164,223, 51, 51, 51, 19, 42,210,157,112,227, -198,141,205, 89, 89, 89, 99, 82, 83, 83,247,192,136,145, 35, 60,208, 56,242,230,225,102, 0,208,180,243, 72, 68,222, 60, 44, 3, -208,172,105,231,145,149,101,241,218,157,229, 43,230,229,250,236,254,253,251, 29,250,246,237, 59,129,231,249,188,215,209,147,201, -100, 6,173, 86,203,176, 44, 43,212,235,245,188, 76, 38, 51,144,219, 15,129, 64, 32,252,115,249,179, 59,145, 25, 27, 66,124,161, -131,250, 43,106,214, 71,163, 78, 77,103,103,231,233, 20, 69,121, 25, 43,192,243,124, 98,118,118,246,143,213,105,242,252,179,230, - 75,160,230,197,158,121,131, 33, 85,230,229,117, 99,247,147, 39,154,106,204, 46, 87,159,242,244,241,241,225,227,227,227,141, 61, -191,181,106,186,186,186,202,132, 66,225,203, 17, 42,109,133, 9,123,190, 30, 9, 0, 48,245, 60,239,175,116,142,170, 34, 88, 0, -205, 81,220, 8,154,167,143, 0,224, 42, 35, 88,127, 66,253,124,165,116, 62,127,222, 1,192,203,203,235, 99,127,127,255, 49,225, -225,225,135,210,211,211, 55,214,121,113,214,243,188,255, 73,215, 38,209, 36,154, 68,147,104,254,175, 52,235,122,206,182, 1, 96, - 95,241,103,229, 60,153,246, 47,253,174, 3,240,252, 51,171,242,239,124,138,162, 30, 60,167, 81,245,189, 17,251, 2, 64, 1,128, -112,212, 99, 90,162, 63,155, 64,162, 73, 52,137,230,127,233,214,173,155,144,148, 39,209, 36,154, 68,147,104,214,223, 92,241, 60, -255, 54,158,181,114,240, 60,207,191, 93,249,247,203,191, 87,110,243,252,223, 21, 63,241,242,118,198,236, 11,128,159, 55,111,222, -124,158,231,123,240, 60, 15, 99, 63, 52, 8, 4,194,255,140,255,199, 40, 86, 2,129, 64,248, 7, 96, 79, 81,212,105,158,231, 7, -242, 60, 63,144,162,168,211,181,152,177,129,207,255,172,141,234,116, 42,143,241,252,223,171, 87,175,254, 6, 64,189, 86,130, 17, -214,226, 66,235, 19,250, 11,124,133,255, 69, 16, 77,162, 73, 52,137, 38,209, 36,154, 68,243, 95,167,249,166,246,127,109,170, 51, -107,149, 70,238,249,191,231,205,155,247, 21,254, 66,205,131,117,157, 24,162, 73, 52,137, 38,209, 36,154, 68,147,104, 18, 77, 99, -140, 80,141, 77,122,181, 53, 23,190,252,187, 49, 77,132,117,108,107,116, 19,161, 16, 4, 2,129, 64, 32, 16, 8,127,109,242,159, -143, 54, 85, 68,152,216,121,243,230,125, 85,249, 93, 69,148, 73, 11, 64,250,242,206, 47,237, 87, 43,245,217,182, 54,136,193,170, -129, 22,222,244, 10,119,119,135,214, 21,133, 12,190, 98,138, 2,174, 98, 22, 1,190,114, 50, 35,158, 3,207,241,200,202, 46,121, -244, 36, 9,139,106,112,222,117,246,117,235,210,197,201, 70,160, 46, 95,207,114,108, 39, 0,160, 64, 95, 23,137,172,102, 5,223, -207, 44,121,110, 52, 89,173,248,123, 33, 64, 38,196, 23, 28,135,230, 20, 5, 80, 20,194, 53, 12,214,196, 36, 34,250, 13, 20, 9, -213,180, 17, 38, 75,164,242, 81,150, 86,214, 62,197,133, 5, 79,245,122,237,225,168,100,252,138, 87, 88,148,211,207, 11, 45,193, - 98, 46,203, 65, 36,164,177, 62, 38, 5, 55, 73,173, 35, 16, 8,255,163,104,200,107,245, 63,174,238,158,204,243, 60,245,154,154, -100,130,188,218,203,231, 65, 69, 71,247, 74,211,147, 15,224,201,170, 85,171,138, 87,173, 90,245,252,119, 97, 0, 90, 84,108,151, - 95,141, 81,210, 85,252,173,171,102, 27,157, 49,219,254, 41, 6,171, 73, 3, 76, 3,143,165,160,192, 3, 88, 22,149,129,205,245, -218,223, 27,189,101, 66,193, 86,240, 16,104, 12,236,108,158,197,245,106, 11, 82,128,174, 50,145, 96, 29, 40,112, 26,134,157, 20, -149,128,203,198, 30,163,169, 15,250, 9, 41,122, 15,199,241, 34,150,227,119,129,195,105, 51, 3,110,221,205,132,166, 62,105,117, -119,119,104,125,226,114,246, 91, 87, 15,124,138,118, 45,125,192,115, 6,128,103, 32,247,255, 2,193,187,199,161, 93, 51,247,103, -223,113, 6,152, 5,173, 67,255,206,150,252,147,164, 87, 91,159,186, 75, 23, 39, 27, 19,142, 11,223,188,109,143,147,187, 79, 7, -138,231,180,136,127,124,238,253,207,190, 92,208,163, 87, 91,215,230, 0,234, 92,227,177,185, 15, 62,116,119,247,251, 98,230,130, -239,105, 23,151, 6,102, 28,163, 99,178,211,163, 90,253,240,253,146,163, 98, 58,117, 93,120, 60,182, 26, 91,143,155,120, 98,138, - 80, 36, 25,105, 34, 55,245, 81,169, 20,241,172,193,112,152, 22, 8,251,173,249,110, 67,203,110, 61,250,155,113,218, 28,218,192, - 80, 77, 14, 30,218,239,241,227,207,155, 7, 68, 36,178,131, 1,112,245,202, 52,139,207,159,156,156, 60, 66, 36, 20, 80,254,111, -255,102, 10, 48,125,235,173, 1,160,169, 39,154,242,117,207,132, 14, 10,248, 41, 50, 25,145,175,114,126,252, 61,177,141, 2,124, - 1, 28,161,120, 28,136, 74, 65, 30,185,221, 17, 8,255, 44, 92, 93, 93,175,102,102,102,246,120,195,154,237, 50, 51, 51,239,145, -210,125,115, 38,171,154,175,239, 87,243,221,131, 63, 43, 13,245,153, 40,186,190, 17,172,149,145,241,233,214,224,244,104,234,235, -181, 2,168,159,193,146, 9, 5,187, 30,132,231, 58,129,215,227,183,239, 63, 62,168, 51, 0, 12,163, 7,203, 24,192, 50,134,103, -191,179, 6,112,140, 6, 75,214, 95, 3, 24, 5, 90,183,108,188, 11, 96,157,141, 61,134, 8,244,158, 71,183, 46,218, 80, 76, 41, - 14,238, 92, 53, 35, 53,171,124,198,229,251, 89, 5, 77, 68,234,249, 81, 41,216, 81,159,135,248,213, 3,159, 97,239,209,179, 25, - 27,127, 59, 20,195,129,135,181,153,212,111,236,240, 72,183,221, 71,175,166,111,216,174,137,225, 57, 30, 86,230, 82,191,241,131, -227,221, 95,231,132, 9,212,229,235,127,254,109,135,147,187,135, 7,101, 72, 94, 9, 24,180,112,115, 31, 32, 88, 48,243, 67,231, -101,223,253,244, 61,128,241,181, 70,131, 26,161, 73, 67,175,128,217,187, 14,222,118, 87,150,231,233,174,156,249, 42,129,226,121, -131,157,157,191,120,249,202,181, 38, 11,231,207,156,165, 99, 51,238,197, 38, 33,170,142,164,208, 1,158, 56,249,205, 55,107,154, -247,234, 51,200,140,213,229, 11, 52,229, 10,223,173, 59,182, 45,245,111,218, 86,222, 57,168,129, 56,255,214, 84, 74,165, 40,130, -158, 55,145,246,108,221,203, 66, 53,246, 93,195,182,221,251,167, 71, 37, 97, 83,189,252, 21,243,223,185, 70,244, 12,100, 0, 68, -120,133, 14,132, 60,240,201,227, 59, 87,167, 48,197, 15, 0, 78, 95, 97,122,245, 0,103, 0,255,220,207,246,239,237, 0,128,169, -175,114,126,104, 10,111, 93,190,252,192, 57, 55, 55,187,205,250,245,223,204,231,169, 7,231, 64, 97, 79,116, 18, 66, 94,197, 20, - 18, 8,132,191, 38, 46, 46, 46,108, 86, 86,150,224, 77,106,186,186,186, 14,200,204,204, 60,251, 58, 26,206,206,206, 95, 0,248, -176,226,207,173,217,217,217,107, 94, 55, 93,173, 91,183,110,192,243,188, 83,133,113,201,121,248,240, 97, 6,169, 1,111,150,250, - 26, 44, 25,120, 14,184, 53, 20,160,234, 55, 92,177,226, 97, 40, 3, 37, 0, 12,229, 24, 50,176, 55,236,108,157, 1, 86, 9,176, -106,128, 81, 1,236,179, 79, 65,126, 42,192, 40,129,252,115, 96,120, 94, 90,239, 92, 25, 74,129,188,195,120,171,131, 59,172,204, -101,248,108,116, 19,187, 45, 39,226,182,110, 61, 17,219, 59, 42, 9,163,140,117,169,237,130,124,176,241, 55,101,204,169,107,249, -125, 1, 96, 64, 55,219,243,237,154,121,184,109,216,174,137, 57,123,189,184, 31, 0,244,235,100,113,174,109,160,147, 59,247, 26, -203,159,176, 28,219,217,221, 59,136, 98,210,190, 3, 77, 23,163,188,188, 0,233,137, 59, 97,231,216,151,102, 56,174,107, 93,251, -155, 8, 49,239,179, 47, 86, 11,149,229,185, 58,158,201,227, 28,205, 10,196, 34, 80, 2, 78,121, 67,167,206, 41, 41,255,252,147, -177,204,236,121,223,204, 3, 48,166, 54,157, 38,141, 48,125,221,119, 27,154,117,106,235,231,144,115,243, 51,170,188, 52, 23, 6, -222, 68, 58,184, 91, 39, 88,123, 52,225,114, 31,175,163,164,206,189, 97,237,233,133,140, 39,123,145, 26,126,140,234,210,118,184, -116,215, 62,241, 88, 64, 95,173,193,242,113, 66,231,190,111,181, 61,232,229,225,226,204,243, 28, 56,142, 3,207,115,208,232, 88, -204,255, 49, 1, 74, 53,131,129,189,219,119,178,181, 20,104,105, 0, 60,207, 33, 61,171, 80,117,229,118, 76,175,196, 44,212,249, -230, 71, 1, 63,181,232,208,163,115,248,253, 59,254,250,172,211,104, 51,108, 85, 12,133,255, 54, 55,242, 64,231,208,224, 29,254, -192,142, 87,126,105,226,121,176,105,119, 87,163, 65,208,100,193,175, 59,206,219,151, 22,102,142, 63,118,232,231, 17, 63,111,249, -117,111, 76,210,171,153, 54, 2,129,240,215, 35, 43, 43,235,141,155,172,219,183,111,103,189,142,201,106,221,186,117,215,172,172, -172,239,178,178,178, 42, 77,224,119,109,219,182, 93, 92, 67, 52,165,148,231,249, 49, 15, 31, 62,188, 94,155,230,204,153, 51, 93, -110,221,186,229,249,240,225, 67, 0, 64,155, 54,109, 60, 91,183,110,237, 89,221,182,114,185,156,109,209,162, 69,202,250,245,235, -179, 72, 13,249,115, 13, 86, 76,206,141,207,131,116, 69, 42, 0,136, 49, 98,251, 23,134, 90,106, 12,236,234,157, 27,198,175,110, -234,107,141, 50,133, 14,151,110,164, 84, 68,176, 24,176,172,161,234,103,223, 14,118,232,200, 76,197,166, 3,177, 96, 88,110, 85, -109,154, 47,163,231,184,247, 90,118,125,247, 16,199,243, 18,185,156, 46,245,118,179,117,152, 61,182, 5,253,217,232,166, 80,107, -152,119,247,157, 75,184, 18,157,130,223,140,210,228,152,106,140, 87, 53,223,113,108,157,121,175,137, 22,126, 38,237,134,245,239, - 98, 1, 67, 17, 88,101, 50,116, 44,135,236,108, 37,146,178,196,176,228,114,141,210,228, 56, 52,119,114,114,150,223,190, 56, 55, -217,193,188, 88,108,107,194,138,197, 20,199,211, 6, 94,160,211,197,104,172, 93,122,139, 56, 14,205,235, 58, 71, 38, 38,230,227, -186,244,120,219, 50, 45,248, 67,202,196,173, 63, 28, 26, 53, 64,242,163,157,200,139, 56,141,194,188, 84,202,146, 47,134,188,177, - 23,250, 15, 31,141,239,166,183, 70, 89, 89, 57,168,252, 68, 75,137, 68,106, 5,232,171,213,228,105,140, 89,247,237,215,206, 66, - 33,253,172, 60,121, 6,224, 13, 0,111,128,162, 92, 11,157, 78, 7,153,152,135,169,140, 7, 42,154, 97, 89, 86, 39,111,222,107, -222,199, 0,123,175,174,188, 71, 38, 35,178,137, 39,110,130,103,252,121, 86, 13, 10,184, 25,149,252, 95,211,211,212, 19, 77, 91, -245,154,248, 9, 5,252,244, 42,231, 40,176, 33, 6,182,246, 55, 51, 53, 97, 98,144,113,109, 6, 18, 88, 25,239,216,236, 67,140, - 30, 51, 93,254,235,214, 45,131, 0,126, 26, 94,236,131,246,103, 12, 47, 38,154, 68,243,111,169,105, 97, 97,209,168, 97,195,134, -139, 13, 6, 67, 87,177, 88,236,168,215,235,193,113, 92,142, 68, 34,185,145,146,146,178,188,172,172, 44,233,175,150,247,115,231, -206,213,199,100,213,169, 41, 18,137,112,246,236,217,248,122,152,172, 23, 52,105,154,222,115,228,200, 17, 28, 58,116, 8, 0,112, -245,234, 85, 52,110,220,216,180,186, 29,211,211,211, 77,223,121,231,157, 61, 0,220,106,211,124,250,244,105,163,175,191,254, 26, - 71,142, 28, 1, 0,236,222,189, 27,190,190,190,213, 38, 38, 44, 44, 76,176,112,225,194, 70, 0,178,254, 7,231,232, 31,107,176, -120,212,189,180, 74,162,147,185, 40, 8, 6, 3, 0, 36,214,247, 96,209,137,248,118,227,182,243,253,130,143,253,212, 85, 38,161, -177,116,253,236,244,252,124, 69,123,161,224, 89, 51, 11,195,130,182,182,146,220, 89, 53,163,133,123,113,169, 6,191,135,100, 94, -143, 74, 66,189, 66,161, 81,137,184, 4,112, 86, 21,177, 33, 40,203,242,124,199, 47,184,116,224,192,183,253,154,207, 28,211, 28, - 39,175,165,204, 4,152, 58,215,170,227, 57, 14, 60,207, 84,117,106,175,248,178,162,201,233,191,223,113, 60, 15,240, 6,240,245, -236,231,189,108,217, 72,225,201, 3,199,251,153, 74,133, 63, 76,253,104,138,133,161, 48, 10,165, 37, 44,114, 10,148, 72,205,183, - 2,107,226,141,184,200,123,172,128,166,235,236,127, 70,209, 40,227, 13, 74,115,107, 19, 19,186, 73,219,143,157, 75, 35,190, 42, -147, 10, 12, 2,171,150, 95,155,231, 62, 89,151,198,104,243,202, 41,250, 69, 7, 84,237,205,208,210,178,177, 86,145, 34, 40, 45, - 41,132, 85,179, 38,232, 63,120, 16,150, 78, 10,128, 66,161, 68,126,225,109,222,199,195,146,210,132,238,195,130,113,254, 40, 44, -200,134,206, 0,208,101,154, 34,141, 78, 83, 94,115, 36, 16,191,126, 62,251,203,247, 60, 26,216,155, 86, 14, 22,224, 57, 22, 45, - 2,189,208,167, 71, 59, 92,186,115, 27, 15, 66,227,192,241, 92,197, 96, 2, 22, 25,121, 37,185, 26, 61,187,179, 94,209, 81,142, -121, 22, 9,173,198,128,225, 21,154, 6, 3, 3, 33,103,149, 88,212, 38,192,124,210,220,113, 30,230,230, 18, 10, 26, 19, 22, 26, -141, 1,138,152, 31, 97,219,160, 25,228, 50, 25, 21, 20,164, 22,134,134,130,172, 43, 72, 32, 60,199,136, 17, 35,100,185,185,185, -215,220,220,220,154,244,238,221, 91,222,181,107, 87, 40,149, 74, 92,184,112, 1, 42,149,202,195,205,205,205,227,226,197,139,195, - 83, 83, 83,163,220,220,220,186, 31, 57,114, 68, 83,223, 99, 84,118, 42,127,211,157,195, 37, 18, 9,238,220,185,243, 70, 35, 89, - 18,137, 4,247,239,223,143,127,149, 72,150, 82,169, 20, 59, 57, 57,193,214,214, 22, 44,203, 66,169, 84,226,196,137, 19, 40, 43, - 43, 3,199,113, 48, 49, 49,193,186,115,165,208,196, 30,193,214, 31,190, 70,105,105,169,184, 46,205,130,130, 2,202,207,207, 15, - 90,173, 22, 12,195, 64,163,209,224,242,229,203, 85,127, 11,133, 66,172, 56,146, 11,109,220, 1,236,250,117, 29, 10, 10, 10,168, -255, 97,245, 49,198,139,252,173, 12, 86,101,134,254,244,140,177, 44, 51,127,203,206, 3,119,230,207, 24,133,233,227,122,185, 45, -223,116,188,119,116, 18,118, 1, 64, 64, 35,140, 31, 59,192,199,221,202, 84,132,101,191, 60, 4,192,207,127,221,227, 69,166, 34, -174,137, 23, 55,243,248,181,212,107, 95, 77, 10,130,151,155, 69,227, 98,125,145, 36, 49,209,136,254, 62,156, 1,214,102, 82,191, - 1,221,108,207,131,231, 96,101, 38,245, 7,207,194,202, 92,234,215,175,147,197, 57,142,231, 97,101, 42,246,231, 57,227, 39,231, -110, 27, 40,253,200, 68, 68,127,100,106,110,229,254,249,212,177, 38,111,191,253,142,137,169,132, 71, 97,212, 89,148,241, 77,161, - 51, 53, 5,175, 42, 65,210,211, 8,246, 92,200,195, 76,169,173,243, 28, 32,185,246,100,178,184,158,149, 30, 61,172,161, 79,111, -171,252,135, 11,242, 26,245,218,231, 73,131,165,149,119,134,231,153,154, 55, 17,223, 12,139, 96, 56, 22,183,235, 74,155,162,172, - 44,197,160,135,179,198, 32, 50, 79,184,191, 3,243,198, 54, 69, 73,113, 62, 52, 90, 6, 37, 74, 70,239,108,167,151,106,138,159, - 64,171, 99,160,213,243, 16,201, 93,112,241, 78, 68, 1,199, 24,206,213,232,200,179,241, 56,113,239, 99,179,231,191,243,114, 70, -139,185,214, 38,143,193,170,145,154,150,133, 93, 71,239, 4, 37,102,227,241,235, 93,146, 12,120,230,191,247,232,202,206,239,175, -210,185,221,223, 3,109,197,140,232,135,101,243,222,110,210,189, 41, 43,165, 52,217,160, 0,200,101, 66,104,101, 44, 44,101, 94, -224,245, 10, 94,165,209,148, 68, 70,128,204,204, 78, 32, 60,135,159,159,159, 83,102,102,102,228,236,217,179,109,134, 13, 27, 86, -101, 6,118,238,220,137, 13, 27, 54, 96,233,210,165, 48, 24, 12,216,178,101,139,252,232,209,163,109,127,250,233,167, 12,119,119, -247,166,105,105,105, 57, 70,154, 42,113,197,179,235, 89,175, 2,158,103,151, 45, 91,198, 47, 93,186, 20,149,223, 1, 96,129,186, - 95, 42,107, 50, 67, 18,137, 4, 49, 49, 49,111,196,100,137, 68, 34,136,197, 98, 72, 36, 18,196,198,198,214,219,100, 49, 12, 35, -200,200,200, 64, 89, 89, 25,250, 12, 26,132, 13,171, 87,163,107,215,174,232,221,187, 55,120,158, 71,112,112, 48, 58, 90,199,193, -102, 80, 55, 68, 71, 71,195, 96, 48, 24,213, 50,149,145,145,129,194,194, 66,244, 27, 52, 8,191,253,252, 51, 90,181,106, 5, 63, - 63, 63, 0,192,181,107,215,208,203, 53, 5,102,126,189, 17, 23, 23,247,191,172, 62,255, 51, 47,242,191,142, 96,253, 79,136, 76, -196, 93,238,120,200,233,209,111,183, 25, 56,168,103, 19,252,118,224,202,215,144,150, 29, 0, 0, 91,169,116,229,184,183,189, 16, -149, 88,140,224,251, 89,167,163,147,113,247, 77, 28,147, 99, 97,103,107, 37, 7,104, 9, 84, 58,150,177,176,168,187, 99, 50, 7, - 30,242,128,121, 24, 59, 44,218,173, 93, 51, 55, 55,158,103, 42, 70, 12,126,143,241,131,227,221,219, 52,117,116,127,214,228,101, -128, 69,199,125, 0,103, 90,103, 58,186,180,148, 93,156,243,233,140, 14,111, 15, 26,109, 34,150,219,130, 83,167,195, 80, 20,142, -194,164,171,208,154,180, 68,126, 70, 50, 14,156,252,189, 52, 38, 41,183, 76, 32,160, 47, 9, 45, 29,191,188,124, 57,169,156,162, -106,175,103, 26, 1, 86, 45, 93, 60,255,237, 3,123,247, 91,154,184,116,193,211,147, 3, 74, 36, 2,131,212,193,213, 23,106,198, -156, 93,187,253,180,149, 18, 88, 93, 87,250, 84,202,178, 99,151,131,207,143,242,113,238,108,158, 28,113, 26, 42,149, 14, 90, 3, - 16,216,170, 7, 88,142,151, 80, 52,197, 89, 8, 4, 84,110,110, 17, 40, 3,151,123, 35, 52, 57,251,230,131, 68,129,150,174, 91, -251,133, 74, 39, 22,124, 58,168,119, 11,128, 85, 99,112,159, 64,172,223, 30, 60, 3, 96, 39,190,222,101,105, 0,207,170,193, 3, -157,155,120,226, 23, 14,232,252,232,220,122,255,214,253,103,162, 62, 17,172,166,158,232,223,196,215,101,199,250,175,231,219,216, - 56,184, 9,192,170, 65, 49,101, 60, 87,116, 23, 66,229, 83, 88, 52,120, 27,172,101, 39,252,250,243,218,114,142,227, 15,224, 21, -166,168, 32, 16,254,201,104, 52,154, 99,171, 87,175,182, 25, 56,240,217,104,247,242,242,114,220,190,125, 27, 91,183,110,133,169, -169,233,243,102, 9, 3, 6, 12, 0,207,243, 54, 75,150, 44, 57, 6,160, 67, 77,154, 29, 59,118, 28,244,253,247,223,167, 1,120, -138,103,115, 28,137,241,108,129,121,254,242,229,203, 52, 0,180,109,219,150,189,127,255, 62, 7,128, 31, 51,102,140,232,228,201, -147,141,149, 74,101,200,171, 26, 44,137, 68,130,204,204,204,215, 54, 89, 34,145,168, 74, 79, 44, 22, 35, 51, 51,179, 94, 38,139, - 97, 24,225,153, 51,103, 16, 26, 26,138,101, 65, 65,248,204,217, 25,182,182,182, 8, 9, 9, 1,207,243, 48, 53, 53, 69, 81, 81, - 17, 14, 28, 56,128, 30, 61,122,128, 97, 24,177, 49,186, 39, 78,156,192,163, 71,143,176,162,117,107,204, 48, 53,133,149,149, 21, -174, 93,187, 6, 0,144, 74,165,200,204,204,196,229,203,151,209,189,123,119, 82,169,255,108,131,213, 13, 16, 22, 81,112, 50,232, -213,224, 25, 30,160,224, 18, 16, 0,113,116,116,253,223, 18,104, 96,193,198,237,167,223, 94, 63,127, 48, 53,121, 68,144,203,242, -159,174, 78, 3,128, 73,239,250,186,202,165, 66,108, 60, 16,197,211,192,130, 55,145,193,128, 0,136, 41, 45,166,245,233,228,135, -172, 2, 29, 18,211, 74,175, 68, 39, 27,215,164, 19,188,107, 44,118, 31,187,150,190, 97,199,139, 35, 6,119,156,120,148,182,110, -151, 38,134, 7, 15, 43, 19,145,255,196,193, 29,235, 28, 69,216, 54, 80,250,209,220,153, 51, 59, 12,121,255, 75, 19, 67,198,113, -104, 83,206, 0,172, 10, 42, 37,133, 50,198, 7,217,105, 25, 88,182,126,127,186,214, 64,191,247, 48, 74, 83, 47, 99,249,244, 41, -202,133,141,202,134,173,254,118,241,165,111,150, 45, 49,147,102, 6,151,137,132, 80,210,182, 93, 69, 43, 23,111, 22, 42, 74,117, -239, 36,166, 65, 81,151,142,150,198,234,111,215,109,122,251,195,177,195, 98,124,221,186,219,178, 57,137,182,170,210,210,188,125, -231, 30, 57, 85,188, 77, 80, 0,144,144, 92,136,252, 34, 37,195, 50,134, 16,115, 61,150, 71,101, 26, 63,250,175,145, 3,236, 7, -246,108,250,190,189,149, 4,106,101, 49, 28,172,197,232,219,217,251,125,131, 38,110,110, 82, 94,253,230, 24,121,193, 95, 85, 52, - 17,222,217,218,211, 31,156,222,159,231, 12,208,165,238,121,149,215,167,153, 51, 71,121, 88,218,152,234,104,138, 85, 2, 34,107, - 64, 98, 79,209, 38,158, 16,152,184, 35, 37,254, 33, 51,243,227, 81,133, 41, 41, 57,219,236,120,172, 33,183, 16, 2,225, 69, 82, - 83, 83,199,125,245,213, 87, 55,219,181,107,231,104,103,103,135,192,192, 64,156, 58,117, 10,115,230,204,169,218,166,101,203,150, - 0,128,194,194, 66,124,251,237,183, 57, 89, 89, 89,227,106,125, 49,143,140,140,217,179,103, 79,231,230,205,155,235,196, 98,113, -113,165,201, 74, 77, 77, 21, 42,149, 74, 74,167,211,241,166,166,166,156, 84, 42, 53,140, 28, 57, 82,127,255,254,253,198, 74,165, - 50,245,117, 34, 88,173, 91,183,126, 82, 82, 82, 82, 74, 81,212,107, 79,225, 80,105,174,252,253,253,237,117, 58, 29, 11,160,232, - 85,166,112, 96, 24, 6,173, 91,183,198,229,235, 15,113,238,250, 19,148,231, 39, 98,204, 59,125,225,239,239,143, 11, 23, 46,188, -242, 57,107,221,186, 53, 46, 95,190,137,107, 15, 99,145,155, 26,133,177,163,135,194,207,207, 15,151, 47, 95, 38, 21,250, 13, 24, -172, 90, 67,114,254,238,104, 65, 91, 72,118, 47, 24,236,221, 68, 24,184, 20,148,208, 4,199,119,156,234, 52,255,155, 95, 98, 4, -165,105, 99, 34,140, 24,237,245,194,197,146,140, 72, 30,177,251,195,162,252,223, 31,220,213, 13,191, 29,150, 47, 2,128,119,251, - 52,194,253,168,124,220,139,200,219, 31,245,138,115, 22, 61, 79,160, 3,228,172, 22,251,191,253,114, 72,119,143, 6, 78,216,122, -232, 38, 40, 30,199,140,122,208,242, 60,223,174,185, 59, 54,236,120,121,196,160,179,251,186, 93,154,152,139,183, 21,253, 1,160, - 79,123,249,185, 54, 1, 54,238,124, 29,147, 99,200, 68,244,228,254,131,199,153, 48,185, 23,192, 21, 29,134, 72, 34,134, 90,201, - 34, 59, 79, 11,181,220, 4, 87,110,132,168,203, 85,204,204,240,120,230,149,162,118,209, 73, 72, 20, 11, 67,211,148,106,181,179, -153,141,183,146,166,192,151,235, 68,252,163,168, 76,101, 84, 26, 98,141,209, 72, 76,132,174,189, 43,211,229,215, 93,135, 23,139, - 68,146,119, 5, 2, 80, 14, 86,166,246,191,108, 92, 1,115,115, 51,240,140, 2,188,182, 0,195, 38,125,147, 31, 17,111,104, 4, - 0,141, 27,195,172, 75,115,209, 46, 33, 77,101, 92,125,172, 95, 88,215, 49, 40, 1,166,142, 25,220, 66,196, 25,148,248,116,201, - 65,252,186,114, 48,198, 14, 10, 16,157,185, 18, 55, 21,192,242, 87, 15, 83, 62,107, 34,236, 48,249,122, 12, 5,220,228,129,206, - 15, 79,175,244, 71, 61, 90, 30,131,130, 32, 98,203,169,128, 0, 87,157,136,205, 56, 0, 74,230,202, 11,236,186, 3,166,141, 41, -222, 44, 16, 63,110, 92, 92,254,219,214,173, 23, 57, 10,203, 98, 83,234,156,242,130, 64,248,183,146,152,149,149,213,111,192,128, - 1,193, 23, 46, 92,176, 9, 12,124,182,162,202,163, 71,143, 0,160,170, 41, 42, 55, 55, 23,239,189,247, 94, 65,118,118,118, 63, -212,209,167, 87,161, 80, 36, 29, 63,126,220, 81,173, 86,183, 89,184,112, 97,110,195,134, 13, 21, 6,131,129, 87, 40, 20, 96, 24, -134,183,183,183, 23,181,106,213,138,106,218,180,169, 58, 56, 56,216, 54, 61, 61, 93, 1, 32,229, 85, 18,255,225,135, 31,226,232, -209,163, 0,128, 55, 49, 47,150, 88, 44,198,128, 1, 3, 92,111,223,190,157, 89,161,249,202,243, 98,241, 60,143,240,240,112,220, -136,103, 33, 49,181, 70, 74, 76, 25, 46,255,126, 18, 99, 38, 79, 1,195,188,122,111,133,176,176, 48, 28,184, 28, 6, 71, 87,111, -148,106,195,113,226,196, 9, 76,155, 54,237,181, 52, 95,145,127, 76,243,224,203, 17,172, 63,100,200,203, 11, 18,169, 14, 75,250, -180,117,253,114,100, 47,111, 1,163,202, 2,199,113, 16, 0,176, 51,167,177,253,183, 95, 27, 29, 62,126,246,206, 15,155,126,218, - 4, 29,183, 32, 34, 15,170,122,132,177,150,124,191,243,214,187,123, 86,116, 19, 78, 27,225,111, 3, 0, 98, 17,141,141,251, 35, - 25,208, 88,242, 58,153,106,239, 10, 89,185, 24,147, 29, 28, 44, 23,205,255,248,109,155,238,237,124, 17,114, 39, 2,155,246,222, -185, 46,177,198,110, 99, 47, 59,158, 99, 94,232,208,254,236,187,106,130, 95,124,221,149,144,229,120, 39,137,220, 14,154,148,179, - 16, 74,164, 96, 24, 61,242,115, 85, 72,206,225, 32,115, 17,225,126,120,170,122,232,251,195,206,188, 78,197, 52,149,203, 92,150, -172, 92,219, 64,173, 86, 48,101, 37, 5,140, 80,124, 71, 40, 55,145,230, 60, 91, 57,192, 56,238,102, 66,211,181,133,168, 21,120, - 78, 32, 21,240,170,249, 51, 39,152,102,198, 93,128,143,125, 22, 40,240, 48,113,121, 27,230,166, 2,113,231,230,162, 52, 0, 48, -149,203, 37,223, 46,159, 99,249,249,220,101, 55,140,137, 38,250, 58, 56,125, 30,232, 99,131,144,123,209,184,254, 32, 53,242,250, -221,184,166, 61,218,186,192,183,145,213,103, 18,171,146,213,175, 18, 17,125,118, 14,158, 53, 17, 86,142, 34,108,234,137,166,109, - 6, 46,172,105,244, 96,181,120,134,130,139,107,196,131,162, 4,224, 65, 1,154, 76, 48,233,123, 32,104, 52,131, 63,118,114,165, -122,235,111, 91, 87, 68,167,144,168, 21,129, 80, 23,165,165,165,225, 49, 49, 49,125, 91,180,104,177,243,211, 79, 63, 53,127,255, -253,247, 93, 62,252,240, 67, 26, 0,114,115,115,185, 13, 27, 54,100,253,240,195, 15,165, 5, 5, 5, 19, 13, 6,195, 19, 99,174, -240,236,236,236,219,219,183,111,207,191,121,243,102,211,246,237,219,203,219,180,105,195, 57, 56, 56,136, 85, 42, 21,155,158,158, -174,190,115,231, 14, 27, 31, 31,111, 89, 82, 82, 18, 15, 32, 1,175,208,124,239,226,226, 2,154,166,151,187,185,185, 45,206,204, -204,108,246, 38,250, 96,249,248,248,184, 0,136,119,117,117,245,169,111,243,224, 31, 30,216, 66, 33,138,139,139,161,200, 72,128, -170,176, 0,126, 2, 21, 90,218,216,193,220,220,252,181,204, 80,105,105, 41,132,218, 92, 36,134,167,162, 36, 39, 5, 77, 60, 90, -195,212,212, 20, 90,173,246,255, 81,125,168,127,202,117, 80, 99, 19, 97,147, 6,152,102, 2,108,152, 48,178,145,184,145, 71, 3, -232,242, 31,225,113, 66, 57, 22,110,107, 27, 37, 16,155,107,167,143,239,211,170, 71,111,123,116,235,222,150,106,232, 97,245,217, -234,213,155, 63,105, 34, 41,152, 19,149,142,141,198, 28, 56, 42, 17, 73, 28,151,183,245,234,131,204,169, 13,236,213,224,193,227, -234,195,108, 60, 73, 40,222, 26,147,140,164,250,100,162,137, 55,122, 11, 41,250, 32,207,242, 50, 75,115, 83, 69, 19,255, 6,118, -189, 59, 55,167,251,245,104, 3,177, 16,184,121, 47, 12, 51, 87, 30,187,203, 73,248,183,141, 30,241,197,115,127, 48, 78,207, 70, - 12, 50, 47,140, 24,228,121,158, 7,199,128,231,107,239,214, 37,160,169, 28,101,238, 67, 39,137,121, 19,232, 11,175, 32, 55,183, - 28,145,137,122,148,195, 13,197, 25, 25,224,121, 54,109,201,146,195,175,124,133,216,217,217, 57, 52,106,236,235,253,195,111, 71, -160,215,150, 34, 49,106, 7,202,203,114,176,114,213,239,222,174,174,182,221, 50, 51, 51, 67,140,175,221,148,111,240,149,253, 14, -224, 1,129, 80,138, 51, 91, 14,161, 64,104, 2, 59, 75, 49, 56, 77, 30, 38,127, 52,198,114,192,219, 99, 44, 1, 32, 45, 33, 12, -238, 54,198,249,106,125, 9,134,191, 59,209,207, 10,172, 10,187, 79,132,105,104, 10,253,118,255, 30,153,208,163,149,149,236,221, - 62, 30,214,203,127, 45,121, 7,192,254, 87,242, 87, 28,251,194, 40,194, 87, 25, 61,120, 4, 96,253,121, 36,236,191,156,111, 54, -114, 64,144,137, 88, 72, 81,188, 38, 19, 28, 37,166, 54,254,180, 93, 33,161,176,133, 60, 58, 9, 4,227, 80,171,213,143,212,106, -117,179, 47,190,248,226,189,175,190,250,170,171,169,169,105, 35, 0, 80, 42,149, 73, 6,131,225,122,197,181,206,214,231, 50, 7, - 16,159,144,144,144,148,144,144,224,184,123,247,110, 43, 0,178,138,255,105, 0,148, 0,200,173,167,230, 11, 84,154, 41, 23, 23, -151,197,111,170, 28, 42,205,148,171,171,171,207,171,236, 47, 16, 8, 88,154,126,182,178,143, 84, 42,197,141, 27, 55,208,191,115, - 23,132, 93, 78,133,191,163, 27,122,140,153,128, 19, 87,175, 66, 32, 16, 84,110, 95,175,231,136, 80, 40,196,205,155, 55, 49, 98, - 96,119,156, 56,113, 2, 94,173, 91, 96,198,140, 25, 56,127,254, 60,132, 66,178,154,222,159, 98,176,192, 99,249,165,131,223,136, -193, 25,112,100,223,119,184,244, 64,165,139,205,196, 2,191, 12,108, 56, 2, 5,151, 87,112,116,234,153,107,137,107, 62,152, 56, - 80,222,179, 91, 31,244,236,218, 67,216,180, 69,183, 69,192, 11, 6, 43, 16,181,204,149,193, 26,176, 98,203,209,152, 41, 7,207, -198, 81, 96, 20, 24, 53,184, 13,207, 26,176,162,142, 52,255, 65,211, 82,110,118,240,230,141, 59,214, 96,203,145,147,124, 85,230, -228,216, 8,224, 13,120,250, 52, 14, 63,110, 63,193, 93,187, 19,187, 71, 39,192,167,137,209, 80, 26,171,249,204, 81, 49,176, 52, -147,252, 97,196,160,149,137,200,191, 79,123,249, 57,158,231,121,115,185,200,159,175, 62,130,245,130,166,198,192,109,217,179,235, -183,181,147, 38,125,104, 90,168,205, 68, 92,122, 36, 52, 2, 87, 8,228,222,136,124,120, 65,173, 54,112,191, 25,113,190,106, 44, -207,130,130,130,188, 71,255, 97,239,186,163,162,184, 30,238,157,153,237,176,244,186,128, 18,196,138, 21, 16,187, 98,239, 53,209, -168, 49,106,140,154,168,209, 36,154,196, 30,187, 24,141,198, 88,162,209, 36,106, 98,236,221, 24,123,175,116, 20, 81, 84, 64,218, - 46,189, 47, 91,102,119,102,190, 63, 96,249, 33, 82, 22, 52,205,111,238, 57,123,118,167,236,157,247,230,189,153,119,223,125, 45, - 52, 7, 7,118, 7,193, 96,208, 33, 67, 85,162, 81, 85,233, 5,176,182,118,191,147,154,154,106, 54, 39,109,100,243,223, 30, 49, - 85, 36,147, 66, 54,238,221, 65,226,103, 74, 29,252,154, 90,149,100, 11, 58, 11,143,174,222, 64, 15,231,146,206,144,207, 30, 81, -168,223,193,205,172,112, 90, 89,137,102, 13,232,234,142,248,196, 52,220, 8, 75,221, 19,175,132,146,225, 84,123,158, 37,229,125, - 60,172, 71,125,124,247,219,195,153,128, 97, 95,109,226,222,194, 11, 45, 88,160, 11, 56, 3, 56,163, 22, 28,208,165,133, 23, 90, -152, 57,114,240, 37, 78, 1,137,247, 54, 28,120,190,232,240,213,204, 97, 95, 77,238,106,221,185,227, 0, 49, 88, 3, 87, 88,172, - 51,196, 36,160,224, 85,210,232, 21,192,115,242,156,255, 85, 78, 6,192,111, 6,131,225,183,188,188,188,215,201,169,196,203,243, - 50,189, 82,220,203, 55, 7, 42,149, 74,202,205,205,141, 49,163,147,123, 77,156,247,202, 11,173, 82,247,170, 38, 23,171, 34,167, -178,125,251,246,246, 67,134, 12,129,209,104,196,211,167, 79,145,152,152,136, 33,147, 62,128,157,157, 29,238, 61,124,136,167, 79, -159,226,235,175,191,134,209,104, 68,112,112,112, 74, 77,156, 66,161,144,110,211,166,141,104,248,240,225, 48, 26,141,136,139,139, -195,243,231,207, 49,115,230, 76,216,216,216,224,225,195,135,136,139,139,195,215, 95,127, 13,157, 78,135,248,248,120,250,111,202, - 75,255, 79, 4, 22, 1, 6,172, 1,249, 33, 75,176,253, 52,104,218,136,102, 15, 83,144, 96,234,120,242, 48, 5,219, 40, 46,234, - 84, 84,244,163,248,176,123, 61,197, 40,184,143,218,214, 28,158,164, 64,101,101, 81, 88, 8, 99,161, 53, 50,255, 68, 66,106, 97, -209,147, 20,168,234,224, 94, 16, 96,138,129,252, 80, 28, 63,125, 21, 18,105, 4, 66,194, 31, 49,183,195, 98, 15,144, 28, 86,196, - 60,199,147,218,115,114,144,251,111,196,196,161,207, 74, 70, 12,114, 6,112,172, 17, 54,157,247,225,131,161,157,234, 7, 52,179, -173, 15,214, 0,142, 51,192,174,215, 21, 96,145,180, 90,190,224, 7,186,157, 93,125,165,239, 20, 22,100,181,239,211,163,187,165, - 83,147,119,145,255,228, 33,162,195, 47,104, 66,239,199,222, 9,126,160,219,249, 42, 9,233,238,238,222,173, 87,175,166, 24, 61, -113, 62,104, 93, 30,226,162,127, 65, 97, 65, 26,110,220,146,227, 81, 82, 65, 71, 0,102, 59, 88,119,162,141, 45,128, 92,116,110, - 41, 76,178, 22,235, 93,199,143, 28, 12,137, 64, 11,214, 80, 8,130,206,194,179, 28, 58,255,157, 37, 41, 12, 0, 88, 72, 9,129, -165, 32,223,218, 44,167,209,219,161,177,133,200,128, 95, 79, 68,131, 37, 74,150, 89, 98, 9,108,251,245,212,179,143, 87,124,226, -135,230,222,118,109, 34,158,102,152,218,224,205,173,210,206, 8, 61,185,172,153, 54,122, 49, 56,214,128,155,235,236,154,117,253, - 50,119, 6,234,184, 44,206,131, 56,164, 2,248, 24, 76,241,143,159,174, 58,187,184,109,203,135, 93,230,124, 60,204, 26, 4,191, - 48, 58, 15, 30, 60,254,126, 20, 23, 23,127, 52,119,238,220, 31, 41,138,114, 2, 64,112, 28, 7,157, 78, 39,248,233,167,159,132, - 70,163,145,164, 40,138,145, 74,165,198,176,176, 48, 3,203,178,153, 52, 77,127, 84, 19,167, 94,175,127,182,101,203,150,134, 6, -131,161,108,196,161, 78,167,195,111,191,253, 6,157, 78, 7,137, 68, 2,185, 92,142,184,184, 56, 16, 4, 65, 51, 12,243,140, 79, -137,215, 41,176,128,101,157,223, 94,178, 4, 28, 8, 16, 88,250, 48,229,229,201,152,238,167, 66,217,220,131,254,188,133,111,224, -146, 82, 81,182,172,182, 1,208, 50,204,200, 0,255, 38,251, 1, 64,199, 50,239,215, 37, 18, 5, 90,205,187,190,237, 58, 30, 96, - 57, 78, 96,100,184,159, 72, 18, 71,180, 64, 76, 92, 66,205, 35,231,170,130, 82,149, 23, 54,160,139, 13,103, 90, 2,167,172, 89, -176,116, 58, 6,142,227,184,178,102,193, 69, 82,100,101,235,106,236, 77,125, 35, 66,219,183, 93, 75,201,148,115,215,194,167, 50, - 44,231, 74,145, 68,154,214,192,238,120, 85,113, 85, 90, 59,186,118,241, 98,234,249,168, 46, 46,125, 29, 75,167, 89,205,202, 3, -178,242,113, 62, 53,181,232, 90, 93, 56,115, 53,134, 97, 11,214,157, 56, 41, 22, 80, 2,128, 3,203,150,196, 87, 75, 51, 57, 37, - 34, 12,104,213, 8,110, 95,254,100,220, 79, 81, 68, 98, 77,124,247,238,171,190, 27,253,229,197, 47,162,159,230,254,244, 60,181, -164,230,243, 60, 21, 15, 14,158, 75, 88,252, 44,185,240,139, 7, 79,115,191, 69, 45,251, 77, 16,192,214,128,161, 75, 94,218,247, -170,247,243, 81, 18, 34, 1,140, 0,151,210,103,244,180,205,115, 8, 2,252, 50, 17, 60,120,252, 63,130,201,197, 34, 73,114,249, -235,226, 52,185, 88, 0,158,214, 34, 28,247, 0,180,122,157,113, 11, 15, 15,207, 6,144,205,167,242,127, 27, 45,121, 78,128,227, - 56,242, 85, 62,181, 13,103,163, 70,141,184, 90, 8, 21, 62,141,120, 78,158,147,231,228,223,201,175,248, 78,230, 56,142,120,149, - 15,159, 70,255, 13,112, 28,103,246,135,111,246,248, 27, 64, 16, 4,251,119, 94,239,233,211,167, 4,127,215,121,240,224,193,227, -239,123, 39,191,238, 37,123,120,252,247, 65,242,183,128, 7, 15, 30, 60,120,240,224,193,227, 53,139,110, 84,109,243,213,102,116, - 64, 93,172,194, 7, 60, 39,207,201,115,242,156, 60, 39,207,201,115,254,191,227,172,137,251, 95, 59, 58,177,134, 57,197,255, 86, -240,237,253, 60, 39,207,201,115,242,156, 60, 39,207,201,115,190, 17,168, 77, 31, 44,190,137,144, 7, 15, 30, 60,120,240,224,193, -227, 53,131, 23, 88, 60,120,240,224,193,131, 7, 15, 30,188,192,226,193,131, 7, 15, 30, 60,120,240,224, 5, 22, 15, 30, 60,120, -240,224,193,131, 7, 47,176,120,240,224,193,131, 7, 15, 30, 60,120,212, 29,252,132,148, 60,120,240,224,193,131, 7, 15, 30,102, -160, 54,211, 52,152, 28, 44,211,210, 42,129,252,237,227,193,131, 7, 15, 30, 60,120,252, 19,250,229, 77,210, 34,229,151,202, 33, - 74, 35,198,187, 90, 60,120,240,224,193,131, 7,143,127, 2,111,140, 22, 33, 43, 40,199,238,124,218,242,224,193,131, 7, 15, 30, - 60,254, 33,188, 49, 90,164,162,131,197,131, 7, 15, 30, 60,120,240,224,241, 79,225,141,209, 34,252, 40, 66, 30, 60,120,240,224, -193,131, 7,143,191, 72, 96,241,238, 21, 15, 30, 60,120,240,224,193,227,159,196, 27,165, 69,120, 7,139, 7, 15, 30, 60,120,240, -224,193,227, 63, 38,176,248,149,198,121, 78,158,147,231,228, 57,121, 78,158,147,231,228, 5, 22, 15, 30, 60,120,240,224,193,131, - 7, 15, 94, 96,241,224,193,131, 7, 15, 30, 60,120,240, 2,139, 7, 15, 30, 60,120,240,224,193,131, 23, 88, 60,120,240,224,193, -131, 7, 15, 30, 60,120,129,197,131, 7, 15, 30, 60,120,240,224,241, 79,129, 64,213, 35, 1, 30,212,130,167, 46,163, 9, 30,240, -156, 60, 39,207,201,115,242,156, 60, 39,207,249,255,142,179, 38,238, 7,248,151,130,227,184,127, 77, 88,248, 33,172, 60, 39,207, -201,115,242,156, 60, 39,207,201,115,190, 17,224, 56,206,236, 15,223, 68,200,131, 7, 15, 30, 60,120,240,224,241,154, 33,248, 7, -175, 77,226,127,125,192, 88,148,172,160,205,253, 11, 57,121,252, 63,128,171,171,235, 57,169, 84,234,201,178, 44,140, 70, 14, 70, -150, 1,195,114, 96, 24, 22, 6,134, 3,173,215, 38,234,139, 11,250,241,119,170,238,232,218, 6,115,197, 34,225, 36, 45,109,248, -230, 86, 36,126, 9,244,131,131,145,197, 26,169, 72,208, 85,167, 55,174,189, 25,133,159,106, 73, 89,113, 89, 13,254, 89,127, 69, -244,233,211,103, 42,128, 37, 28,199,113, 44,203, 46,188,124,249,242,158,215,241,174,119,117,117, 29, 3,192, 2, 0, 72,146,204, - 87, 42,149,135,204,249, 99, 96, 96,160,160,168,168,232, 57, 0,247,210, 93, 79,194,195,195,155,212,116,140, 71,237, 17, 18, 18, -194,121,122,122,162, 85,171, 86,143,211,210,210, 54, 3,216,198,223,149,127,145,192,106,226, 36,237,240, 86, 61,167, 65,103,195, -146, 22,214,244,192,185,187,187,175,113,114,114,154, 86, 92, 92,172, 5,192,145, 36,201, 17, 4, 1,211, 7, 0, 24,134,201,124, -252,248,177,185, 54,228,107,227,108,220,184,113, 40, 73,146, 30,166,255, 0, 64, 77,191, 89,150, 77,137,137,137,105,107, 70, 65, -222,143, 36,201,121, 53,157,199,178,236,154,180,180,180,115,213,157,211,178,101,203,112, 75, 75, 75, 23,146, 36,171, 92,191,169, -124,123,177,209,104,228,138,139,139,211, 31, 62,124,232, 87,219,180,117,115,115, 91,200,113,156, 31,128,221, 42,149,234, 12, 0, -230, 85,242,138,155,155,219, 59, 28,199, 45, 42,189,135, 43,149, 74,229,145,218,252,191, 81,163, 70,161, 34,145,200,131,162, 40, -162, 98,154, 84,182,205,178, 44,167,215,235, 83, 98, 99, 99, 43, 77, 35,137, 68,226, 25, 22, 30,222,248,225,227,120,180,247,122, -132,109, 7,114,113, 36,103, 16, 6, 40,162,208,198,199, 11, 67, 7,246,225,223, 22,175,128,142,109,208,161,161,151,226,235, 79, -222,235,129, 47,214, 28,248,164,115, 75, 99,150, 72, 44,218,246, 78,151,134,182,205,189,109,177,252,199, 59,179, 0,182, 54, 2, -139,168, 87,175,158,175,139,139,139,151, 70,163, 49,229, 69,142,162,168, 23, 78,162,105,154,126,252,248,241, 25, 62, 5,204, 44, - 16, 4,130,175, 79,157, 58,165, 96, 89, 22, 3, 7, 14, 92, 10,224,117, 8, 44, 66, 34,145,200, 18, 18, 18, 96, 48, 24, 72, 79, - 79, 79,121, 45,203, 40,199,176,176, 48,208, 52,173,239,216,177,163,103,249, 99, 98,177,216,241,246,237,219, 0,160,247,247,247, -247,172,107, 0,125,124,124, 44, 45,101,178,217, 20, 65,244,102, 56,174, 25, 0, 80, 4,241,136,225,184,139,106,141,102, 67, 76, - 76,140,250, 77, 79,251, 11, 23, 46, 96,234,212,169,184,127,255,126,211, 51,103,206,252,176,112,225,194, 25, 42,149,170, 7,128, - 76,254,201,248,135, 5, 86, 67, 87,203,166, 78,118,182,167,191, 89,181, 12,103,251, 78,172, 78, 96,145, 10,133,226,155,174, 93, -187, 78,218,187,119,175,229,177, 99,199, 44,189,188,188, 32, 18,137, 64, 81, 20, 40,138, 2, 73,146,160, 40, 10,195,134, 13, 51, -119,225,199, 23, 56, 47, 93,186,100,217,164, 73,147,178, 66,150,227,184, 50,145, 53,112,224,192, 26, 57, 73,146,244, 8, 15, 15, -119,150, 74,165,101,255,103, 89,246,133, 79,249,118, 86,134, 97,208,181,107, 87,243, 2, 74,146,243, 98, 98, 98,186,169,213,234, -151,218,107,203,243,118,235,214, 13, 0,206,213,192,229,118,235,198, 37,103,130,142, 7,140, 57,224, 40,123, 64,220, 0, 32, 37, -149,158,159,147,147,131, 30, 61,122, 80,117, 73, 95, 39, 39,167,241, 87,175, 94,109,148,144,144, 48,124,245,234,213,217,119,238, -220,249, 1,192,207, 42,149, 42,185, 46,124, 28,199,173,140,143,143,111,204,113, 28,188,189,189, 87, 0,168,149,192,162, 40,202, -227,194,133, 11,206, 98,177,184, 44,157,171,250,102, 24, 6, 52, 77,163,127,255,254,198,170,248, 12, 12,139,200,232,167,184,112, - 51, 28,148,168, 27,206, 95,248, 18,240, 27,132, 95, 79,222, 66, 74, 70, 62,255,166,120,213, 23, 13,129, 21,163,135,246,129,198, - 64,194, 96, 48, 58, 41,156,172,126,155, 53, 62, 80, 8, 78,143, 61, 39,195, 97, 48,178,191,212, 86, 92, 13, 24, 48,192,115,219, -182,109,130,152,152, 24,129,143,143, 15, 24,134, 41,251,176, 44, 91,171,231,146, 71,153,192, 34, 72,146, 68,106,106, 42,228,114, -185, 77,247,238,221,149, 12,195, 44,184,113,227,198,158,191,224,114, 47, 56, 91, 4, 65,168, 85, 42,213,190,191, 59,206,109,218, -180,233, 42, 21, 10, 15, 44, 91,242,185,115,179, 22, 45, 73, 7, 39, 7, 60,123,150, 2,177,128,235,252,236,241,147,246, 43,130, -190,255,184, 77,155, 54,163, 35, 35, 35,111,188,105,233, 93,127,196,206, 31, 88, 35, 61, 13, 0,126, 12, 1,128, 29, 40, 44, 44, -196,228,201,147,113,226,196, 9,159, 14, 29, 58,172, 97, 24,102, 18,255,100,252,131, 2,203,219, 77,234, 46, 23, 73,207,255,184, -125, 51, 97, 40, 76,183,171,225,129, 90,217,181,107,215,247,247,238,221,107, 71, 16, 4, 46,205,252, 16,182,180, 22,110, 95,175, -133,157,163, 19,244,243,166,194,138, 49,162,213,229,200,218, 60,164, 47,112, 62,126,252, 24, 57, 57, 57,112,114,114,130,133,133, - 5, 36, 18, 9, 68, 34, 17,196, 98,177,121,111,111,130,128, 84, 42,197,133, 11, 23, 32, 16, 8,202, 62, 20, 69, 85,186,237,226, -226, 98,246,189, 98, 89,118, 77,179,102,205, 90,199,198,198, 90,231,230,230,162, 99,199,142, 5, 4, 65, 68,149, 19, 30,173,163, -162,162,172,205, 46,105,232,120, 20, 37,109, 7,151,123, 4,176,125, 27,140,245,104,104,209,224,133, 66,198, 36, 10, 25,166,238, -166, 83,102,102, 38,125,253,250,117,248,250,250,226,192,129, 3, 14,185,185,185, 95,239,222,189,123,209,198,141, 27, 23,170, 84, -170, 53,117,160,180, 7,128,199,143, 31, 3,128, 93, 93,194, 36, 22,139,113,247,238,221,146,206,132,165,162,156, 36, 73,144, 36, -137, 83, 79, 29,161,214,147, 40, 78,127,128, 89, 67, 60,225,229,229,245,146,171, 85, 30, 70, 35, 3,159, 38, 13,176,251,248,117, -172,250,225, 48,178,165, 45, 80, 24,186, 5, 0,208,187, 99,115,252,188,158,127, 89,212, 21, 93, 90, 99,160,127,235,150, 29, 60, -235,213,199,213,219,193, 16,137,133,182,211, 39, 12,134,149, 92,128,117, 63,255,193, 38,165,228,124,114, 51,202,108,167,132, 80, - 40, 20,173,251,246,237, 91,111,219,182,109, 34, 0,120,240,224, 1, 84, 42, 21,156,157,157, 33,149, 74, 33, 20, 10, 65, 81, 20, - 68, 34, 17,127,243,107, 1, 63, 63,191, 22, 45, 90,180,176,100, 24, 6,197,197,197,216,190,125,187,141, 84, 42,181, 25, 60,120, -176,217, 78, 86, 21,205,118,205,116, 58,157, 70,161, 80, 88, 0, 96, 73,146, 44,170,232,108, 1,128, 66,161,176,172,236,209, 4, -144,229,239,239,239, 14, 64, 12,224, 73,249, 99,122,189,190,170, 99,230,198,185,179, 95,235,166,103, 86,172, 92, 98,153,150,254, - 4, 54,214,105, 96, 13, 25,248,225,135, 31, 32,147, 89, 99,233,210, 5,130,227,109,253, 93, 63,251,124,254,105,129, 64,208, 63, - 52, 52,244,206,155,148,230,172,145,158,214,166,109,167,178,237, 61, 23, 54, 65,103,227,135,212,165, 75,177,113,227, 70, 52,110, -220,184,221,163, 71,143,248,135,227,159, 18, 88, 45,234, 89,219,114, 44,119,254,167,109, 27,196,160,213,118,143, 67,110,149, 63, - 92,126,168, 37, 1,128,116,113,113,153,190,111,223, 62,107, 83, 97,215,132, 96, 96, 11, 26,111, 53,111, 14, 11, 27, 91,164, 27, -105,112, 6, 26, 98,145,168,170, 2,177, 70, 78,146, 36, 33, 20, 10, 95,248,136,197, 98,148,119, 59,170,225, 44, 95,155, 3, 69, - 81,184,112,225, 2, 12, 6, 3, 70,142, 28, 89,169,216,170, 2,149,114,166,165,165,157,115,115,115,139,226, 56,174, 27,203,178, - 32, 8, 34, 74,169, 84, 6,154,142,187,186,186,246,107,211,166,205, 60,150,101,215,212,196,201,113, 28, 96,204, 6,151,179, 15, - 86, 29,179, 80,112,199, 17,132,101,111, 48,240,196,131,167,105,184, 20,250, 28, 89, 57, 69,240,111,226,140,190, 29,189,193,178, -172,217,225, 44, 15,133, 66,209,216,199,199,167,153,193, 96,192,245,235,215,193, 48, 12, 90,181,106,133, 15, 62,248,128,220,180, -105,211, 7, 0,214,212,150, 19, 64,100, 88, 88, 88,239,180,180, 52, 0,184,111,198,249, 15, 42, 19,194,191,254,250, 43,180, 90, -237, 75, 39,219, 5,174,198, 23,111,123,226,131,153,123,176, 54,246, 16,182,110,221, 90,217,240,218, 50, 78,131,145,197,225,179, -119,160,202, 46,194,159,179, 35, 65,184,142,194,154, 3, 28,118,253,240, 45,166,127,112, 20,118,114,153,171,204,169, 65,108,121, - 14, 43, 43, 43, 74,171,213, 94,127,242,228,201,228, 90,198,189,182,248,111,115, 18,248, 96,212,136,225,160, 68,150,120,252, 44, - 5,129, 29,252,224,236,236,140,168,152,103, 72, 74,205, 73, 39, 8, 76,236,215, 73,188, 70,163,209, 47,186, 17,137,159,107,226, - 84, 40, 20, 13,118,236,216, 33, 44,191, 79, 36, 18,149,185,224,229,221,240,138, 77,134,124, 26, 85,206,233,231,231,215,162, 79, -159, 62, 55,150, 44, 89, 98,149,148,148,132, 91,183,110,193,211,211, 19, 26,141,198,156, 97,233,229, 57, 43,107,182, 99,211,210, -210,126,175, 75, 56,175, 93,187,102, 4,224, 81,217, 9,213, 29, 51, 39,238, 45, 91,182,180, 16, 9, 4, 7,151,175, 88,108, 25, - 22,118, 6,157, 58,247,135,204,170, 17,140,116, 10,178,115,138,144,251, 84,137,160,160, 13, 88,180,104, 62, 86,175, 90, 97, 53, -102,220, 7, 7, 58,116,232,208,248,238,221,187,218, 55, 37,221, 73,129,104, 91,100,232,237,105, 0, 80, 16,115, 20,159,142,237, -132,194,194,167,248,248,227,197, 72, 77, 77,197,147, 39, 79,194,254,230,112,190,177, 2,139,195,203,157, 70,171,133,187, 59,164, -140,193,112,250,135,239,214,216, 88,201, 45,156, 66,207, 31, 71, 98, 98, 90,181,255, 41, 46, 46,214,159, 56,113, 2,231,103, 76, - 66, 99,194, 8,187,175,215,193,217,205, 13,249,147,134,161,200, 64,163,225,159,193,144,200,229, 16, 91,202,171,117, 28, 42,114, - 94,185,114, 5,209,209,209, 16, 8, 4,144,203,229,176,180,180,132, 68, 34, 41, 19, 86,166, 23,176,185,156, 28,199, 65, 32, 16, -224,193,131, 7, 72, 76, 76,132,173,173, 45,110,221,186,133,222,189,123,191, 32,174, 40,138,122,161,143,151,185, 48, 53, 45, 86, - 38,192, 80, 67,211,224, 11, 16, 58, 2,246,239,163,240,174, 27, 96, 55, 14, 6,206, 6, 44,199, 34,226,105, 54, 62, 26, 55, 8, - 0, 48,125,209,118,244,110,239, 85,214, 4, 89, 27,184,185,185,125,212,170, 85,171, 13,211,166, 77, 35, 45, 45, 45,161,211,233, -160,211,233,240,248,241, 99, 56, 56, 56,192,194,194,162, 78, 54, 1,199,113, 9,110,110,110,144, 74,165,224, 56, 46,161, 46, 28, - 4, 65,224,224,193,131,149, 30,155,184,225, 33, 4, 37,221,179,176,109,219, 54, 24,141, 70,112, 28, 87,101, 34, 25, 24, 22, 3, -187,251,227,135,253, 87, 64,184,142,194,182, 3,185,200, 74, 78, 67, 76, 84,176,201, 41,179,106,239,249,192, 10, 86,254,216,120, -227, 45,248,136, 99, 96, 97, 33,195,254,125,123,189,116,180, 1, 73,207, 19, 38,243,175,147,170, 18, 27,238, 46,174, 30, 32, 57, - 3,148,233, 89, 24, 54,176, 47, 4, 34, 57,158,167,100,161, 77,115,111,197,123, 67, 58, 43, 40,194,136,175,190,217, 55, 29, 96, -127, 54,227,121,103, 98, 98, 98,132,145,145,145,160, 40, 10,214,214,214,176,176,176,128, 72, 36,130, 68, 34, 41, 19, 86,188,131, - 85, 61,250,246,237,251, 9,203,178, 11, 88,150,205, 13, 8, 8,112, 91,182,108,153, 77, 74, 74, 10, 30, 60,120,128,125,251,246, -101,113, 28,103, 44,237,236,190,244, 85,175,101,134,179, 5,130, 32,106,221,207,201,199,199, 71,100,164,243, 62,181,145, 49, 67, - 5,164,181,167,177,160, 40,161,192, 64,158,136, 77, 81,110, 42,117,191,170,132, 68, 40,252,100,227,186, 5, 46,142, 14, 52,250, -245, 27,138,184,132, 92,204,159, 63, 18, 5, 5, 90,236,253,117, 61, 0, 49,104, 35, 5,191,118,253,161, 80,212, 67,151, 78, 93, - 20,215,111, 94,159, 14,224,141,241,179,147,142, 77,153, 14, 96, 69,253,250,245,175,109, 15, 10,106,212,171, 87, 47, 0,192,165, - 75,151,240,203,216,177, 88, 10,140,183, 2, 84,159, 2,243,255,214, 55, 70, 45,181,200,191, 93, 96,153, 34, 84,155,136, 17, 82, -163,213,161,101, 11, 62,241,170,223,192,219,245,222, 31, 7, 17, 31,159,138,244,244,220,234,110, 26, 75, 16, 4,219,160, 65, 3, - 88, 27,180,176,225,244,112, 86,184,193,202,222, 1,185,134, 82,231,202,210, 18, 98, 75,185,185, 47,199, 50,206,230,205,155, 35, - 61, 61, 29, 34,145, 8,114,185, 28, 86, 86, 86,101, 2,203, 36,174,204,125,225, 18, 4, 1,150,101, 33, 16, 8, 16, 21, 21,133, - 46, 93,186,160, 94,189,122, 56,112,224, 0,250,245,235,247,146,139, 85, 91,113,101, 18, 88,229, 29, 37, 83,231,119,115, 58,183, -191, 0,113, 67, 24,173,222, 5,105,209, 11, 52,103, 13, 29,167, 40,109, 18,228,240, 71,112, 58, 98, 19,179, 94,104, 46, 52, 95, - 60,187,187, 73,165,210, 61,243,231,207,239,217,182,109, 91,208, 52, 13, 0,176,176,176,128, 78,167,131, 80, 40, 4, 77,211,208, -104, 52,169,255, 68,198, 53,221,243,243,231,207,131, 32,136, 50,161,107,106, 42, 84,171,146,241,193,172,189, 16, 11,128,168,168, - 40, 52,107,214,172, 90, 62,131,145,193,230,189, 23, 0,130, 64,207,153, 15,208,214,203, 2,203, 22,205,197,168, 81,163, 32, 22, - 75,113,228,200, 33,172,219,250, 12,211, 38,250,224,202, 15, 35,113,210,111, 19, 58, 91, 92,198,138,229,203,201, 67, 7, 15,119, -225,139,235,170, 33,147, 74, 29,196, 82, 27,176, 70, 45, 4, 66, 33,234,215,123, 11, 44,163, 67,110, 65, 49, 38,190, 59, 4,225, -247, 31,226,204,149,123, 70,131,129,221,100, 46,103,147, 38, 77,144,145,145, 1,138,162, 96,101,101, 5, 75, 75, 75, 52,109,218, - 20,201,201,201, 47,184, 88, 60,170, 6, 73,146, 11,207,156, 57,227, 66, 81,148,171,209,104, 68,114,114, 50,162,162,162,176,121, -243,230,116,181, 90,221, 61, 60, 60, 60,182, 14,180, 85, 53,219, 85,214, 89,189, 46,206, 86,249,202, 95, 35,107,137,254,226,186, -111,102,120,180,106, 19, 64, 72, 41,121,126,241,179,140, 46,193,247,238,116, 94,244,243,225, 79, 18,243,138,123,101,100,100, 84, - 89,121,163, 72,178,119,211, 22, 45, 73,150, 77, 1, 37,106,134,239, 54,124,129,156, 92, 53,138, 10, 53, 0,196,208, 27, 4,208, -233, 8,244,232,217, 11, 7, 14,158, 64, 64,219, 0,138, 34,201,190,111,146,192, 2, 0,138,162,214, 28, 63,126,188,145, 84, 42, -197,170, 85,171, 96,101,101,133,187, 43, 86,224, 23,145, 8, 50, 0,219,104,122, 30,254, 62,129, 85, 23, 45,242,159,112,176,106, - 5, 15, 15,143,245, 29, 58,183,239,214,160,121,128,244,222,217,163,120,250, 36, 17, 89, 89,249,224, 0, 77,117, 55,143, 32, 8, - 78, 40, 20,194,249,171,229,168,223,170, 21,138,167,190,131, 92, 3, 13,239, 63,238, 66, 34,151,227, 81, 31, 63,112,122, 61,186, -198,164,155, 43, 92, 56,130, 32, 56, 0,112,116,116,132, 72, 36,130, 84, 42,133, 84, 42, 45,235,123, 85,254, 99,174, 24, 98, 89, - 22, 5, 5, 5, 72, 72, 72,192,212,169, 83, 97, 97, 97, 1,130, 32,144,158,158, 14, 79, 79, 79, 80, 20,133,212,212, 84, 92,190, -124, 25, 13, 26, 52,128, 88, 44,174, 85,102, 40,215,169,189,181,155,155,219, 53,142,227, 90,135,134,134, 90,183,109,219, 22,181, -114,176, 8, 17,116,240, 4, 3, 15,176,220,255,250, 90, 25,140, 47, 86,222, 76, 34,203, 28,184,184,184,248, 52,107,214,236,206, -230,205,155,172,156,157, 93,192,178, 12, 12, 6, 3,242,243, 11, 80, 92, 92,140,250,245,235,195,210,210,146, 91,183,110, 29,193, - 48,204, 63, 54,148,215, 36,168, 76, 14,162,169,255, 21, 73,146,152, 53,180, 62,114,115,173, 64, 81, 37,219, 53,197,221,104,160, -245,173, 27,187,195,214, 74,134,200,144, 59,248,252,147,201,152, 52,233, 67,136,164, 86,184,118,237, 10,146,148, 25,120,150,146, -139, 79,150,252, 0, 27,239,174,144,229, 28,196,163, 12, 22, 27,119,157, 6,205,112,252,244, 0,213,192,210,210,202, 94, 32,178, - 4, 75, 10, 96, 99, 99, 7,129,216, 18,172, 81, 0,134, 5,172,108, 28,113, 59,252, 49,238,220, 47,252, 40, 35, 27,230, 12,221, -231, 4, 2, 1, 71, 81, 20,156,157,157,203,196,148, 80, 40, 52,229, 93, 20, 20, 20,128,162,168,178,125, 60,170,175, 72, 62,127, -254, 28,106,181, 26,119,239,222,197,193,131, 7, 51, 43,138,171, 62,125,250, 76,179,176,176, 88,164,213,106, 87,157, 59,119,238, -135,234, 56,235,208,108, 87, 23,231,171,137,159,159,159, 80,200,229,158,249,243,232, 6, 15,107, 38,156,192,243, 41, 64,108, 65, -140, 60,216,185, 83,175,118,131,137,230,203, 63,243, 28,182,120,195,159, 25, 25,240, 65, 21, 35,158, 57,160,165, 84, 38, 5, 56, - 2,183,110,158, 45,105, 22,204, 41, 68,145, 90, 11, 29, 77, 65,167, 39,160,165, 9,244,234,221, 31, 59,126,222, 15, 85, 70, 46, - 56,160,213,155,150, 15, 26, 55,110,236,239,238,238,142,207, 62,251, 12,218,125,251, 80, 4, 96, 48,128,227,165,149,106, 43, 96, - 14,255,180,252,141, 2,203,221,221,253,147,214,173, 91, 79,222,185,123,175,252,155,197, 95, 21,228,198,220,167,244, 26,218, 82, -103, 48,232,159,169,178, 55,213, 32,134, 74,106,157,182,118,176,176,182,129,174,130,115,197,233,245, 96,105, 61, 68,230,191, 28, - 57,130, 32,192,113, 28,100, 50, 25,196, 98,113,165,206, 85,109, 28, 44, 0,200,203,203,195,193,131, 7,209,174, 93, 59, 88, 88, - 88,128,162, 40,180,110,221, 26, 49, 49, 49,240,246,246, 6, 0, 28, 63,126, 28,111,191,253, 54,158, 62,125, 10, 31, 31, 31,121, - 72, 72, 72,173, 4, 22,195, 48, 56,127,254,188, 53,199,113,221, 56,142, 67,102,102,221, 70,195, 50, 12, 3,181, 90,141,243,231, -207, 67,169, 84,194,213,213, 21,249,249, 86,176,118, 99,203,196,162,233, 99,230,139,247,171, 15, 63,252,208, 74, 46,151,131, 97, -140, 16, 10,133,101,194, 85, 40, 20,225,241,227,199, 24, 59,118,108,254,243,231,207,191,172,227,168, 31, 66, 32, 32, 92,242,243, -115, 81, 88,144, 7,138, 66, 61, 0, 20,234, 48,245, 3, 73,146,101,223,166, 15, 65, 16, 16, 9, 41,184,186, 56,149,117,124, 47, -117,239,170,110, 34,212, 20, 12,253,106,230,228, 27,219,126,254,213, 99,120,183, 41,152, 53,107, 22, 4, 98, 11,216, 57, 56,193, -200,112,168,239,230,140,103, 41,185, 56,255,229,125, 16,174,163, 80, 32, 26,138,110,239, 45,197,134, 69, 83,176,110,169,145,127, -147, 84,162,171, 0,140, 6,240,126,110,161, 94,144, 83,168, 1,140,122, 36, 60, 79, 64,158,154, 6,103, 52, 32, 41, 69, 5,181, -142, 69,118, 78, 33,218,248,247,219,124,229,202,149,133, 52, 77, 47, 0,112,218,156, 60, 31, 18, 18,130,235,215,175,227,230,205, -155, 48,117,148, 6, 0,107,107,107, 92,184,112, 1, 61,122,244,224, 83,161, 26,208, 52,189,170,111,223,190, 11, 92, 93, 93,165, -235,215,175,183,169, 95,191, 62, 8,130, 40,168,232, 92,181,109,219,118,225,188,121,243, 20, 35, 71,142,156, 5,224,135, 58, 94, -174,186,206,234,213,150, 81,149, 77,197,144,145,145, 54,237,199, 61, 31, 56, 89, 10, 19,148,120,254, 93,169,248,162,128,226, 2, -224,202, 94,136,186, 45,127, 62,174,231,116,103,101,225,166, 15, 83,211, 82,119, 84,241,162, 99, 31,199, 38, 98,235,214,141, 88, -180,104, 58,246,237,221, 8,150, 19,161, 80,109,128,139,155, 47,244, 6, 22, 4, 41, 68,199, 78, 93,113,243,246, 61,128,161, 49, -107,234,157, 55,174, 50,245,228,201,147,224,196,196,196,102,139, 23, 47,198, 46,119,119, 88, 89, 89, 97,246,146, 37,119, 24,134, -233,196, 63, 37,175, 71, 96,153,109,201,185,187,187,143, 80, 40, 20,223,236,221,187, 87,166, 84, 42,225,214,184,133,245,169,195, - 7,117,206,114,145, 70,149,147, 59, 33, 82,169,174,113,184, 61, 73,146, 48,174,152,141,108,163, 30, 94,167,110, 67, 34,151, 35, -182, 95, 91,112,122, 61, 58,133, 61,135, 68, 46,135, 64, 42,171,117,100, 42,115,172,202,127, 76,133,113, 77,208,235,245,182,189, -123,247, 70,175, 94,189,240,206, 59,239,148, 53, 5,250,250,250, 98,255,254,253, 24, 49, 98, 4, 34, 35, 35,225,230,230,134,166, - 77,155,162,105,211,166,184,114,229, 74,237,124,208, 82, 7,171, 95,191,126, 5, 4, 65, 68,113, 28,215, 58, 56, 56,216,186,182, - 28, 38, 1,117,254,252,121, 12, 26, 52, 8,222,222,222, 8, 15, 15,199,133,229,235, 32,144, 59, 2,164, 51, 56,150, 43,115,182, -204,233,131, 37, 18,137,186, 52,104,208, 0,105,105,233,144, 72, 36,176,179,179,133, 76, 38,131, 68, 34, 69, 80, 80, 16,187, 99, -199,142, 45, 4, 65, 44, 87,169, 84, 57,117, 16,231, 13, 29, 29, 29,127,157, 48,126, 92,123, 7, 7, 71,184,184, 40, 48,111,238, -252,254,251,246, 31,136, 78, 74, 74, 26,163, 84, 42,239,155,203, 69, 16, 4,244,122, 61, 40,138,194,241, 88, 39,168,245, 4, 10, - 82,194,240,233, 80,207, 50,177,101,106,234, 53, 77,127, 81, 13, 18, 51, 84,137, 93, 71,143, 24,120,158,164, 4,210,242, 7,132, - 50,107,139, 11,183,238,219,165,231, 22,151,245,207, 58,146,147, 5,150,227, 48,115,197, 47,252, 91,164, 18, 80, 20,181,107,246, -236,217,221, 71,141, 26, 69,136, 72,131,254,194,185, 61, 2,134, 49, 18, 95, 44,248,137,185,122,227, 26,201, 48, 70,226,157,177, -115,216, 51,151,239,147, 31,205, 90,199,248,118, 24,132, 7, 15, 30,184, 14, 30, 60,120,165,193, 96, 48, 75, 96,153,210,184,138, -235,243, 77,132, 53,224,210,165, 75, 91, 0,108,233,211,167, 79,154,133,133, 5,138,138,138, 94,234,167,232,227,227, 99, 25, 31, - 31, 47, 18,139,197,240,247,247,119, 98, 89, 54,150, 32,136,245,231,207,159,223, 89,155,107, 85,225,108,213,121,154, 6, 43,123, -102, 72,171,128,166, 86,143, 45, 23, 91,201,132,218,136,183, 98,165,214, 4,128,124,141,107,220,173,148, 49, 69,100, 6,213,166, - 85,207,230,176, 18, 90, 12, 5, 80,169,192, 34,128, 40,117, 97, 97,223, 98,141, 17,215,174, 70, 98,228,200,250,208,210, 36, 52, - 90, 18,180,129, 3, 73,137, 64, 80, 34, 76,152, 52, 25,122, 35,139, 60,149, 10, 4, 16,249,166,229, 3,134, 97,230, 13, 27, 54, - 44, 96,213,170, 85, 62,179,103,207, 6, 0,184,185,185,117, 92,184,112,225,195,127, 96, 30,172, 55,166,121,176,162,131, 85,109, -196, 2, 3, 3,119, 26, 12,134,225, 57, 57, 57,118,147, 39, 79,166,179,178,178,112,236,216, 49,252,242,203, 47,197,106, 3, 21, -154,151,109, 28, 31,175, 82,167,152, 83, 40,146, 36, 9,145,193, 0,206,248, 63,231,138,213,233,202,156, 44,161,204,162,214, 86, - 55,199,113,149,138, 42,147,147, 85,155,151,173, 68, 34,201,187,121,243,166,115, 74, 74,202, 11, 29,218,189,188,188, 0, 0,193, -193,193,184,123,247, 46,198,140, 25, 3,129, 64, 0,145, 72,132,168,168,168,194,218,132,217, 36,120, 76,163, 8, 93, 93, 93,251, -181,111,223,190,170,209,131, 53,114, 37, 37, 37,193,219,219, 27, 58,157, 14,182,182,182,200, 86, 37, 32, 41, 33, 30,197,186, 88, - 52,112,149, 34, 35, 35, 3, 18,137,196,220, 7,142, 49, 21, 92, 58,157, 14, 42, 85, 26,220,220,220,240,219,111,123,177,115,231, -206, 49, 42,149,234, 80, 93,242,154, 66,161,152, 51,112,224,192,149,195,135, 15, 23, 20,171,139,192,177, 37,130, 71, 36, 22,225, -251,239,191,111,122,249,242,229,136,205,155, 55,175,150, 74,165, 43,227,226,226,244, 53,165, 57, 0,236,218,181, 11, 0, 96,209, - 97, 9,230,141,122, 11,239, 79,223,131,245,235,143,190, 16, 87,138,162,176,108,217, 50,115,194,152, 72,107,139, 26,191,108,145, - 82,177,125, 58,183,178, 3,128,124,225, 80,156,191, 48, 6,240, 43, 25, 64,176, 97,254, 4,180, 58,176,129, 47,173, 43,160, 67, -135, 14,190, 11, 22, 44, 16,154,250,196,185,213, 95,101,164,105,154, 5,128,102,173,187,253,207,169,236, 7, 60,125,250, 20,235, -215,175,135, 90,173,134, 64, 32, 16, 25, 12, 6,179,174,209,187,119,111,244,235,215,175,172,153,208,209,209, 17, 52, 77,195,104, - 52,242,226,170,150, 78,214,160, 65,131, 22,176, 44,203,177, 44,187,216,180,223,207,207, 79,230,236,236,124,107,227,198,141, 14, - 70,163, 17,115,230,204,177,205,202,202,178,157, 49, 99,198,124, 0, 59,171, 40, 39,106, 51,187,186, 89,211, 52, 84,214,167,139, - 32,136, 6,150,150, 54,200, 68, 26,242, 28, 13,190,121, 14,198,156,243,170,143,162,234, 37,183,105, 38, 99, 12,222,100,129, 30, - 54, 50,107,128,229, 26, 87,249,158, 99,217,243, 49,209, 15,123,121,184,123, 83, 39, 78, 93,197,160, 33, 35,160,213, 19,208,210, - 36, 8, 74, 8,130, 18, 33,160,125, 39,120,121, 55, 1,203, 2, 15, 35,195,104, 3,203,254,249, 38,165,125,249,121,176,230,124, -127, 9, 11, 87,124,135,113,239,244,195, 7, 31,124,240, 79,206,131,245,198,246,193,170, 74, 92, 77,180,179,179, 27, 59,105,210, - 36, 89,112,112, 48, 86,172, 88, 33,184,112,225, 2, 29, 18, 18, 98,100, 24,102,142, 82,169,252,177, 54, 23, 37, 73, 18, 13,246, -254, 1, 55, 87, 87, 60,233, 31,240,130,115,117,173,181, 7, 88,157, 14,125,226,243,107, 29, 25, 83, 83,150, 73, 88,153,196, 85, - 53, 83, 41, 84, 87, 3,175,116,222,171,143, 63,254, 24, 59,119,238, 68,167, 78,157,208,168, 81, 35, 8, 4,130,178,102,169,186, - 56, 88, 38,212,122,244, 96,133,218,124,253,250,245,113,255,254,125,216,216,216,224,215, 95,127, 69, 61, 15,119,140,239,235, 5, -189, 94, 15,131,193, 0,181, 90,109,114,176,106, 12, 40,203,178,209,199,142, 29,243, 30, 53,106, 20, 39, 16, 8, 8,157, 78, 7, - 0,216,180,105, 83, 70,109,103, 92, 47,173, 13,189, 35,145, 72,126, 30, 51,102,140, 85,211,166, 77,145,158,158,142,123,247,238, - 96,254,252,121,247,132, 66,129,182,255,128,129,221,125,124, 90, 96,250,244,233,164,175,175,239,162,249,243,231,207,241,240,240, -248, 32, 37, 37,229, 96, 77, 34,107,255,254,253, 0,128, 15,191,127, 4,189,190,164, 96,222,182,109, 27, 92, 93, 93, 95, 56,247, -217,179,103,102,197,189, 42,236, 62,118, 13, 0,208,245,189, 37, 0, 26, 1,165,115,100,141,254,108, 35, 95, 66, 87, 86, 42, 26, -141, 28, 73,146, 68,114,114, 50,109, 97, 97, 65,216,219,219, 11, 36, 18, 9,116, 58, 93,153,208,122,250,244, 41, 78,159, 62,141, -148,148, 20,216,219,219,147, 54, 54, 54, 48, 26,141,185,230,230,249,242,163, 5, 77,130,138, 23, 87,181,199,181,107,215,182, 0, -216, 98,218,238,213,171,215, 84,130, 32,230, 26, 12, 6,235,157, 59,119,218, 90, 91, 91, 19,167, 79,159,214,111,223,190,189,136, -162,168, 92, 0,235,170, 43, 83, 94,215,236,234,213, 56, 95, 96,140,120,146, 91, 20,239, 41,148, 43,216, 72, 45,113,251,179,228, -121,205,114,201,198, 46, 68,139, 22,198,145, 25,209,183,198, 27,226, 58,101,166,103, 16, 12,199, 85, 57,137, 83,110,126,254, 15, - 63,239, 62,240,233,177, 35,123,234, 75,173, 45, 48,238,253, 79,112,254,226, 13,136, 37, 22,184, 23, 26, 1, 61,205,224,121, 82, - 42,198,188, 55, 14, 10,103, 7, 80,197, 74,149, 78,175,255,241, 77, 74,251, 23,230,193,106,219, 9,183,142,174,195,254,216,250, - 72, 93,177,226,159,158, 7,235,141,115,176, 42, 69,187,118,237,172,242,242,242,190,255,252,243,207,101,106,181, 26, 89, 89, 89, -200,206,206,198,189,123,247, 46, 24, 12,134, 79,171, 27,165,129,146,213,182, 31, 84, 44, 20, 41,138,130,189,147, 51, 36,114, 43, -112,122,125,153,115, 37,178,176, 4,171,211,129,165,245, 64,213,205, 57,149,114, 18, 4,241,146,107, 85, 11,113,245, 2,167,201, - 17,171,108, 82,209,122,245,234, 97,245,234,213, 47, 77,211, 96, 78, 56,129,146,209,130, 28,199,181, 54, 57, 79, 28,199,181,118, -117,117,237,103,230,200,193, 74, 57, 89,150, 69, 96, 96, 32, 46, 92,184,128,251,247,239,131, 36, 73, 12, 24, 48, 0, 4, 65,192, -198,198, 6, 2,129,160, 76,204,153, 6, 4, 84,199,201, 48,204,251,191,252,242,203, 23,127,254,249,231, 87, 51,103,206,148,117, -235,214,205,212,207, 43, 19, 37,107, 60,214, 42,156, 44,203, 46,141,138,138,178, 50, 26,141, 88,181,106, 21, 66, 67, 67,213,207, -158, 61,251, 92,165, 82,253, 12,128,203,205, 43, 28, 23, 23,151,176,245,235,175,191,182,234,217,179, 39,130,131,131,165,245,234, -213,251, 26,192,193,154,226,126,239,222, 61, 80, 20, 5, 99, 78, 34,166,207, 59, 0,185,133, 16,143, 31, 63, 70,118,118,118, 89, - 94,171,166, 41,169, 82,206,202, 48,113, 68, 32,190,217,121, 18,247,131,226, 64,184,142, 66,190,112, 40,186,190,183, 4,123,191, -157, 9, 63,191, 93,117,226,172, 5,254,115,156, 33, 33, 33,135,183,108,217,242,241,132, 9, 19, 68, 28,199, 49,137,137,137, 6, - 0,132,171,171, 43, 21, 18, 18,194,158, 60,121, 18, 26,141, 6, 30, 30, 30,164,187,187, 59,113,225,194, 5, 54, 38, 38,230, 30, -199,113, 11,204, 13,103,121,113, 37, 20, 10,161,209,104,204, 21, 87,124, 26, 85,143, 37, 71,143, 30, 85,104,181, 90,136,197, 98, - 28, 58,116,136,222,179,103,207,195,130,130,130,174,225,225,225,154,186,112,214, 97,154,134,106, 57, 11,115,201,211, 23,206, 63, -108,109,232,241, 19, 49, 51, 45,187,203,255,220,102,194,241,144, 75, 75, 71,105,187, 54,169,242,235,223,146, 69, 92,241,201,170, - 56,227,226,226,244, 86,190,190,111,207,254, 98,241,149, 21, 75,151, 88,173, 89,251, 13, 30, 12, 26,137,188,252, 98,232,244, 12, -104, 35,139,165, 75,151,195,217,222, 22,118, 34,186, 40, 79, 67,188, 29, 19, 19, 67,191, 73,233,254,138,243, 96,253, 21,225,124, -163, 80,163,250, 40, 46, 46, 94,209,164, 73, 19,113, 76, 76, 12,158, 61,123,134,216,216, 88, 48, 12,243, 52, 53, 53,117,112, 93, - 47, 74,146, 36,108,108,108, 32, 22,139,209,241,126, 42,196, 34, 17,196,150, 37,203, 83,245,137,207, 7, 56, 14,164, 88, 82,107, -206,138,115, 94,189,202, 40, 34,134, 97,202,102,104, 47,191,158, 97,197,209,106,181,117,174, 72,146,156,119,231,206, 29,235,196, -196, 68,112, 28,135,163, 71,143, 90,191,243,206, 59,243,234,226, 94,113, 28,135,236,236,108,176, 44, 11,161, 80,136,158, 61,123, -194,207,207, 15, 69, 69, 69, 96, 24,166,172,249, 82, 36, 18,213,106, 20, 97, 70, 70, 70, 49,128,101, 6,131,225,199, 69,139, 22, - 45,107,217,178,229,228,207, 62,251,140, 68, 29, 7, 69, 16, 4, 97, 52, 26,141, 56,116,232, 16,142, 28, 57, 82,200,113, 92, 19, -149, 74,149, 86,206,189,219,123,247,238,221, 11, 35, 70,140,120, 26, 23, 23,103,157,159,159, 15,212, 48,135, 77,105,222, 68,163, - 70,141,192, 48, 12,190,153,238,129,194,194, 86, 96, 24, 6, 70,163, 17, 22, 22, 22, 47, 44, 65, 84,151,169, 52,202, 35,232,199, -227, 37,113, 41,215, 7, 11, 0,222,153,197, 55, 15, 86,225,130,206, 95,184,112,225,217,213,171, 87,207,155, 53,107, 86,251, 9, - 19, 38, 8, 69, 34, 17,155,154,154,106,220,183,111, 31,209,184,113, 99, 82, 40, 20, 18,231,207,159,103,131,131,131,239, 26,141, -198,111, 0,212,106, 41,146,242,226,138,239,115,245, 90,113,112,212,168, 81, 19, 70,142, 28, 41,243,245,245,149,252,242,203, 47, -121,106,181,186, 42,113,245,146,121, 89,213, 52, 13,175,105, 2, 82, 0,128, 74,165,250,113,249,146,235,211,199, 53, 26,219,120, -178,195, 91,184,168,206, 64,174,144, 34,173,109, 73,248,122, 82, 40,206,139,115,190, 24,124, 52, 86,165, 82,237,170,142, 39, 34, - 34, 34,156, 36,201,192,247, 39,126,120,108,210,132, 73,110, 95,125,246,169,240,244,133, 43, 96, 12, 58,220,184,116, 9,142,114, -146,161,213,233,202,124, 3, 57, 44, 60, 60,252,141,235,127, 85, 58, 15,214,116, 0, 99,150, 44, 89,178,111,250,244,233, 96, 89, - 22, 87,175, 94,197,214,185,115,177,148, 97,198, 91, 1,197,159,150,156,195,227,117, 9,172,128,128,128,183,212,106,245,175,122, -189,222,151,101, 89,241,181,107,215,160,213,106, 17, 19, 19,163, 97, 89,246,240, 43, 92, 51,113,192,128, 1,100,197,245,226,170, - 16, 57,230,118,174, 75,236,221,187,247,107,227,100, 89, 54,165,252, 26,102, 85,241,150,223, 54, 26,141, 41,230, 4,148,101,217, - 53, 29, 59,118,124,105, 95, 29, 11,177,248, 94,189,122,209, 21, 69, 87,101,191,203,197, 63,197, 92,254,172,172,172,116, 0, 31, -177, 44,187,241,131, 15, 62, 88, 2,224,105, 29, 5,214, 74, 31, 31,159, 69, 37, 63,137, 21, 74,165, 50,173, 18, 81,151,233,230, -230, 54,185, 94,189,122,101, 11, 64,215, 20,247, 62,125,250,208, 53, 45,242, 92,222,185, 98, 89, 54,165,174,153,118,254, 71,195, -145,168,204,130, 90, 58, 2,231, 47,140, 42,235,131,117,100,211,108,248,249,237,229,223, 36,149,227, 70,113,113,241,141,160,160, -160,174, 91,183,110,157,255,241,199, 31,183, 27, 61,122,180, 32, 48, 48, 16,103,206,156, 97,174, 94,189,122, 79,163,209,172,169, -173,176, 34, 8,162,168,226, 51, 84, 77, 37, 68,203, 39, 67,237,112,233,210,165,217,157, 58,117, 90,114,240,224,193,231,158,158, -158, 18,130, 32,140,102,138,171,215, 62, 77, 67,117, 66,142, 42,210, 14,217, 59,246,227,211,190, 51, 63,244,236,215,201, 95,234, -209, 80,225,250, 56, 49, 27,201, 81, 23, 52,113,215,182, 38,112,218,236, 33, 48,195,113, 15, 11, 11,139,244,246,246,110,242,227, - 47, 59, 63, 20, 81, 84, 31,150,227,252,190,156, 49, 30, 36, 65,132,211, 12,115,161,160,176,240,231,154,250,132,254,215, 33, 17, -137,198,207,152, 49, 3,191,253,246, 27,142,109,220,136,126, 41, 41,216, 47, 18, 65, 38, 18, 97, 27, 77, 79, 3, 47,176,234,132, - 42,149, 72,147, 38, 77,246,231,228,228,140, 44, 40, 40, 48, 26,141, 70,134, 32, 8, 35, 65, 16, 26,150,101,151,179, 44,187, 29, - 37,157,208,234,100, 75,190, 34,120, 78,158,243,111,229, 20,201,172,206, 17,148,200,179,202, 66,156,161, 19,105, 77, 97, 63,254, -126,214,200,217,213,218,218,250, 51,150,101, 81, 84, 84,180,209, 76, 97,197,223,207,127,136,179, 71,143, 30, 27, 72,146,108,207, - 48,204,238,171, 87,175,238,120, 21,206, 90,118,126,175, 77, 56, 5,174,174,174,147, 56, 59,249, 96, 24, 4,141, 56,154,122, 76, -209, 57,167, 75,157, 43,150, 79,119,243, 56, 31, 63,126,204,217,219,219, 35, 39, 39, 7, 71,154, 54,125,225,152, 21,176,173, 10, - 7,235,111,109, 34,228, 56, 46, 0,128,147,169,254, 15,224, 49, 0,127, 0, 50, 0, 58, 0, 69, 0, 28,203,253, 37,187,244,152, -233,248,117,130, 32, 12,175, 33, 28,255, 26, 1,215,146,231,228, 57,121, 78,158,147,231,228, 57,121, 78,158,243, 21,133,205, 32, -148, 24, 59,220,188,121,243,230,115, 28,215,127,222,188,121,243,203,109,151, 29, 47, 57,157, 27, 84,225,120,192,107, 10,135,217, - 31, 94, 96,241,156, 60, 39,207,201,115,242,156, 60, 39,207,249,159, 16, 88,213,125, 87,245,187,220,247,223, 42,176,136,106,110, -210,131,191,248, 70, 63,224, 57,121, 78,158,147,231,228, 57,121, 78,158,243,255, 29,103, 77,220, 15, 42, 19, 88, 4, 65,156,230, - 56,110,112,249,239,114,199, 7, 3,128,233,152,233,119,249,227, 4, 65,252,241, 58, 4,214,191, 5,188,186,231, 57,121, 78,158, -147,231,228, 57,121, 78,158,243, 85,133,205,127,206,193,170,114, 20, 33,119,232, 16,149,234, 3,107,177,204, 66, 4, 0,122, 77, - 49,237, 30,131, 2, 98,212, 40, 6, 60,120,240,224,193,131, 7, 15, 30,127, 51, 8,130, 56, 61,111,222,188, 5,255,133,176, 10, -170, 18, 87, 89,109, 45, 28, 5,186,220, 38,140,145,110, 6, 0, 2,146,123,148,213,214, 46,150, 59,116, 40,235,117,139,172,254, -253,251, 47,224, 56,206, 69, 40, 20,254,225,234,234,122,117,199,142, 29, 6, 62, 27,253,253,224, 56,174,198,197, 26,253,253,253, -237,116, 58,221, 58,150,101,123,150,174,243,119, 85, 36, 18,125, 17, 17, 17,145, 67, 16, 68,149, 67,162,235,215,175,191,207,219, -219,187, 9, 87, 2, 0,120, 97, 94, 46,211, 62,211,241,164,164,164, 39, 41, 41, 41,239,153, 27,246,122,245,234,121, 73,165,210, -137, 4, 65,248,148,242,196,104,181,218,221,201,201,201, 9,255,223,210, 81,161, 80,200, 56,142, 27, 46, 20, 10, 39,216,219,219, -183,203,204,204, 92,170, 84, 42,191,123,133,119,196, 28, 91, 91,219, 49,182,182,182, 13,114,114,114,226, 10, 10, 10, 14, 2, 88, - 15,160,198,231,116,249, 12,183, 14,221, 6, 6, 46,190,126,230,218,138,175,183, 42,239, 86, 60,190,116,142,194,161,103,175,206, -139,255,252,227,246,242,160,173,202,218,174,109, 73,150,126,128,146, 17, 99,166, 14,174,255,214,116,241, 5, 48,151, 97, 24, 33, - 73,146,223,165,165,165,221,252,183,231,165,166, 77,155,126, 37, 22,139,167,145, 36, 25,151,158,158, 62, 73,165, 82,165,188, 38, -106,210,211,211,211, 42, 49, 49,177, 16,230, 77, 94,204, 3, 64,135, 14, 29,210,105,154,118,174,238, 28,145, 72,148,113,247,238, - 93,151, 55, 48,250, 89,166,166, 63, 0, 25, 0,168,210,109,125,233,119,122,185,125,233, 85, 28,255,231, 5, 86,170, 15,172, 5, -186,220, 38,217,233, 15, 71,103,170, 34,222, 5, 0, 39,133,239, 65, 7,151,230, 7, 82,125,196,180,107,211, 17,114,161,133,224, - 7,138, 18,250,106,245, 58, 71,161, 64,152, 69, 27, 13, 17,164,158,155,158,246,248, 88,146, 57, 23, 30, 60,120,112, 19, 0, 54, -126,126,126, 33, 55,110,220,104,247,221,119,223, 41,142, 28, 57,210, 58, 44, 44,108,236,144, 33, 67, 78,113, 28,119,238,244,233, -211,154, 90,197, 38, 48, 80,224,156,103, 63,158, 18, 8,134, 0,104,205,113, 0, 8, 42,138, 53,208,127,100,216,101,239, 70,201, - 28, 45,117,203,216,126,246, 77, 8,150,254, 82, 72,113, 93, 13, 12,113,131, 35, 69,235,238,134,231,196,154, 47, 0, 20,189,197, - 2,226, 39, 0,208, 27,185,201,201,201,170,139,175,114, 94, 21, 47,240, 62, 0,246, 18, 4, 33, 4,176,141, 97,152,227,233,233, -233,145, 48, 99,210, 78,115,208,188,121,115, 39,130, 32,162, 54,108,216,224,208,190,125,123,138,101, 89, 92,190,124,249,189, 69, -139, 22,245,107,209,162, 69,203,210, 76, 95, 41,188,189,189,155, 92,186,116,169,205,217,179,103,209,169, 83, 39,176, 44, 11,150, -101, 97,107,107,139,147, 39, 79,162,125,251,246,101,251, 92, 92, 92, 16, 24, 24,136,148, 20,243,222,229, 13, 26, 52, 24,222,162, -101,155, 89,159,127, 57,215,197,217,193,209,202,200, 24,233,212, 84,149,219,198,239,190,233, 32, 20, 10,127,136,143,143, 63, 94, -151,138,146,135,135,199,104,161, 80, 56, 24,128, 79,233,190, 24,131,193,112, 58, 37, 37,229,128,185, 5,121,235,214,173,175,147, - 36,249, 86,109, 46,204, 48, 76,210,253,251,247,187,212, 37,141,220,220,220, 70,185,185,185,253,210,161, 67, 7, 11, 95, 95, 95, -136, 68, 34,172, 93,187,118,142, 25, 2, 75, 0, 96,142,133,133,197,104, 75, 75, 75,239,162,162,162,103, 26,141,230,136, 88, 44, -238,253,253,247,223,215,235,220,185,179, 85,122,122, 58, 65, 81,148,203,169, 83,167,198,111,222,188,185,159,209,104,236, 85, 83, -222,202,141, 99, 23, 75,132,205,186,230, 62,187,178, 24,192,128,138,199,141, 90,233, 4, 74, 88,111, 48,197,133, 39,151,138, 54, -179, 11,104, 15, 15,143,239, 93, 92, 92, 62,208,104, 52, 90,130, 32,184,210,143,169,150, 11, 0,208,235,245,185,177,177,177, 77, -171, 35,122,171,131, 93, 40, 69, 82, 85,206,221,196,176, 76,202,243,187,185,109, 95, 67, 5,230,179,200,200,200,145, 2,129,128, -104,211,166,141, 37,128,126,230,138, 11,133, 66,209,132, 32,136,133, 28,199,133,168, 84,170, 31, 0, 48,110,110,110, 61, 56,142, -251,170, 52,190,107,149, 74,229,149,210, 60,240, 67,163, 70,141,134, 62,125,250,116,155, 82,169, 92, 89,215,240, 54,106,212,104, -250, 39,159,124,178,100,218,180,105,178,236,236,108,207,190,125,251,254,174, 82,169,186,190,202, 61,240,243,243, 19,166,165,165, -205,113,114,114,154, 25, 16, 16,160,120,248,240, 97, 90, 98, 98,226, 38, 87, 87,215,245,225,225,225, 53, 10,246, 86,173, 90,185, - 9, 4,130, 15, 0,140, 47, 45, 64,247, 3,216, 29, 17, 17, 17,247,255, 65, 96,209, 52,237,124,113,229, 98, 16, 20, 5,105,215, -222, 96, 89, 22, 89,235,150,192,152,147, 5,199,149,155, 96, 52, 26,209,187,119,111,231, 55,212,185, 10,254,175,133,185, 82,129, - 37,150, 89,136, 24, 35,221, 44, 83, 21,241,110,187,254,155,108, 0, 32,248,236,172,119, 29,220, 91, 60, 16, 11, 44, 98, 37,214, -210,163,111, 15,233,237, 59,114,112, 32,225,161,112, 70,138, 42,195,229,231,253,231,250,159, 62,119,229, 40, 74,230,165,168, 17, - 5, 5, 5,171, 60, 61, 61,157, 46, 93,186,244, 92, 44, 22,203,164, 82, 41, 49,106,212, 40,217,216,177, 99,155, 95,190,124,217, -251,236,217,179, 35,135, 14, 29,122, 86, 36, 18,253,113,248,240,225, 26,215, 39,115,110, 57,188, 57, 89, 40, 57, 60,108,248,128, -183, 6,245,113, 22,123,186, 58,129,101,165,120, 28, 79,215,191,112, 35,188,255,153,179,231,191,100,124,134,143,202,140, 57,126, -223,220,155,211,162,133,181,173,140,228,102,203,196,220,152,238,157, 26,121, 13, 25,208,137,104,208,176, 1, 98, 99, 98,189,175, - 92, 11,249, 64, 66, 61, 76,208,232,137,253, 26,150,216, 16, 29, 93,144, 87, 29,151, 88, 64,236,138,138,126,234,198, 48, 12,214, -126,179,250, 2,203,145,101,179,171,155, 62,166, 89,200,191,253,246, 91,232,116, 58, 4,248,182,216,133,255,205, 27, 99, 14,126, -127,248,240,161, 67,113,113, 49,206,158, 61, 59, 95,165, 82,205, 63,119,238,156, 42, 57, 57,249, 75,149, 74,181,255, 53,212,238, -183,108,219,182,205,161, 93,187,118, 20, 77,151,204,111,218,185,115,103,106,193,130, 5,246, 65, 65, 65, 27, 1,140,169,166,112, -225,206,158, 61,139, 95,127,253, 53,235,155,111,190, 73, 1, 0, 71, 71, 71,247,247,222,123,207,105,239,222,189,153, 27, 54,108, - 72,225, 56, 14, 14, 14, 14, 30,163, 71,143,118, 50,183, 35,161,135,135, 71,131,150,173,125,103,237,222,181,171,125,126, 78,142, -246,167, 13,219,194,117, 2, 73,177,167, 79, 19,209,226, 37, 43,109,150,127, 61,255, 35,154,166, 31,164,164,164,196,155, 27, 73, - 87, 87,215,250, 18,137,228,232,130, 5, 11, 90,118,233,210, 69,232,236,236,140,244,244,116, 60,126,252,184,229,173, 91,183,134, - 31, 63,126,124,142, 78,167,123, 59, 45, 45,173,198,202, 4,199,113,141, 79,172, 93,237, 44,113,112, 4,107, 48,192,174,149,111, -217, 49,229,229,115, 96, 13, 6,176, 6, 3,234, 13, 26, 94,230,228,245,232,209,163, 78, 83,146,187,187,187,187, 53,110,220,248, -183,121,243,230,137,116, 58, 29, 34, 34, 34,112,231,206, 29, 54, 35, 35,163,166,137,108, 5, 4, 65,156, 95,178,100,137, 71,151, - 46, 93,172,178,178,178,192, 48,140,227,241,227,199,167,251,249,249, 89,123,120,120,136,247,236,217, 99, 90, 33,192,222,219,219, -219,126,236,216,177,250, 95,127,253,117, 14,128,111,170,114,174,242,158,177,139, 85,148,119,255,166,109, 39, 34, 77,112,174,255, -231,125,241,167,173, 55, 89,230,100,245,247,246,182,202, 79,149,205,149, 91,183,180,207, 79,189, 48,183,191,183,247,206,179,113, -113,230, 44,154, 78,186,187,187,127, 63,112,224,192,247,182,109,219,102, 17, 19, 19, 99,225,227,227, 3,150,101, 97, 52, 26,193, - 48,140,105,221, 77,148,159, 48,184, 42, 80, 36,229,113,235,104,180,179, 76, 38, 43,123, 14, 77,223,106,181, 26,253, 38,116,120, - 45, 47, 91,150,101,197,166,124,109, 52, 26,165, 0,132, 0,204,157,192,114,217,237,219,183, 71,253,249,231,159,227, 86,174, 92, -217, 88,165, 82,125,194,178,236,226,152,152,152, 64, 0,240,241,241, 17, 3,184,162, 80, 40, 38,125,252,241,199,211,102,204,152, -129, 9, 19, 38, 44, 86, 42,149,171,234,250,220,139,197,226,175, 63,254,248, 99,153,193, 96,128, 76, 38, 3, 77,211, 13, 95, 37, -254, 62, 62, 62,162,156,156,156, 35,203,150, 45, 27, 60,108,216, 48,211, 18, 94,174,215,175, 95, 15,250,226,139, 47, 58,249,249, -249,141,168, 74,100,249,249,249,249, 2, 88,238,229,229,213,111,194,132, 9, 84,231,206,157, 81, 84, 84,132,243,231,207, 47, 60, -122,244,232, 66, 63, 63,191,219, 0, 22,135,135,135, 95,125,211, 69, 22, 37,183,194,227,183,123,192, 59, 38, 27, 0,144,246, 67, -201,210,144,214, 95,127,203, 91,124,255, 5,129, 85, 19,138,139,139,253,230,207, 26, 15,146, 44,169, 37, 54,106, 80, 31, 65, 11, -166, 18, 39, 78,159,243,171,193,222,220,192, 48, 76, 99,123,123,251, 47,179,179,179,165, 27, 55,110,148,166,166,166, 54, 59,114, -228, 8, 23, 25, 25, 9,145, 72, 4, 27, 27, 27,244,236,217, 83,210,191,127,255,134,183,111,223,174,127,244,232,209, 97, 3, 7, - 14,220,125,230,204,153, 83, 85,241, 58,180, 28,210,216,209,201,233,218,183, 43,167,216,183,108,224, 13,189,193,128,148,140, 84, -112, 16,195,213,217, 18,227,134,183, 17,117,110, 43,106,180,126,235,165,171, 4, 57,180, 91, 70,244,201,232,154,226,216,197,207, - 34,184, 71,199,183,252,135,246,235, 68, 54,242,105, 14,145,196,226,127,181, 40, 63, 63,180,242,243, 35,166, 78, 45,108, 16, 25, - 30,185,232,236,165,123, 11,108, 68,198,176,155,225,197,237,170, 46,105, 33, 49,173,157,246,246, 59,239,162, 73,147, 38, 47,188, -204, 77,191,159, 63,127, 14,130, 32,144,149,149, 5,150,131,184, 14,105,131,187,119,239,162, 77,155, 54,232,219,183, 47,198,140, - 25,163, 56,126,252,248,239, 91,182,108, 9, 76, 77, 77,157,250, 42,153,133, 97,152,206,126,126,126, 20, 77,211,160, 40, 10,217, -217,217,136,143,143,135,183,183, 55,197, 48, 76,247, 26,132, 6, 58,117,234,132,111,190,249, 38,229,250,245,235,126, 0,208,181, -107,215,240,246,237,219, 59,109,216,176, 33,229,230,205,155,254, 0,208,169, 83,167,176,182,109,219, 58,153, 27, 38, 11, 11,139, - 15, 63,251,252, 11,167,252,156, 92,141,161,176,144,150,179,140,209, 90, 42, 36, 10, 50,179,243, 18,146,173,139, 63,156, 54, 75, -240,245,188,217, 31, 2, 48,171,205,222,213,213,181,126,179,102,205,130,119,238,220,233,236,224,224,128,188,188, 60,100,103,103, - 35, 56, 56, 24, 44,203,162,127,255,254, 18,191,214,173,253,214,111,216,112, 7, 64, 71,115, 68,150,196,193, 17, 71, 2, 75, 30, -141, 81,113,217,101, 14,203,217, 49, 67,202,206, 25,155,152, 15, 0,144, 74,165,117, 94,214,135,227,184,142,157, 59,119, 22, 1, -192,156, 57,115, 10,212,106,117, 16, 65, 16,191,171, 84,170,212, 26,254, 58,103,209,162, 69,238, 13, 26, 52,240,252,253,247,223, - 81, 84, 84, 4, 0,206, 13, 26, 52, 64,227,198,141,153,107,215,174,161, 73,147, 38,176,178,178,194,181,107,215,112,247,238, 93, -248,250,250, 90,137, 68,162,119,105,154,174, 84, 96,117, 27, 24,184, 88, 34,108,214,181,105,219,137,144, 91, 43,176,115,223, 1, - 60, 14,221,221, 85,103,120,180,120, 62,174,189, 79,113,146,137, 25, 73,150,243,188,218,118,119,104,212, 98, 24,222,242,143,112, -212, 49,215,227, 23,245,105,176, 70, 32,213,238, 89,186, 94,149, 93,149,184,114,117,117, 93, 55, 96,192,128, 81,219,182,109,179, - 5,128,251,247,239, 35, 45, 45, 13, 78, 78, 78,144, 74,165, 16, 10,133, 16, 8, 4,181, 90, 42, 75, 38,147, 65,165, 82,193, 84, -113, 96, 24, 6,133,133,133,101,139,134, 47, 93, 10,114,233, 82,243,220, 38, 87, 87,215, 46,126,126,126,123, 61, 60, 60,234,149, -223,175,211,233, 48,117,234, 84,168,213,106,248,250,250,118,118,113,113,209, 17, 4, 1,150,101,145,158,158, 94,116,255,254,253, - 62, 74,165,242, 94, 21,181,119, 77, 90, 90, 26,166, 77,155,134,164,164,164, 25,191,253,246, 91, 34, 65, 16, 82,177, 88,108, 58, - 46, 86, 40, 20, 77,154, 52,105,242,253,148, 41, 83,240,252,249,115,196,198,198, 6,191, 74,165, 74, 34,145,168, 25,134,113, 54, - 26,141,208,104, 52,232,223,191,191,148,101,217,116,161, 80,248, 40, 47, 47,111, 92, 74, 74,138,202,220,114, 70,161, 80,184,170, -213,234,109,179,102,205, 26, 24, 24, 24,136, 71,143, 30,225,236,217,179, 24, 58,116, 40,186,119,239,142,133, 11, 23, 14, 90,188, -120,241, 28, 0, 85, 85, 6, 14, 31, 57,114,196,203,195,195,163,108, 73, 36,107,107,107,124,248,225,135, 24, 63,126, 60,206,156, - 57,211,105,245,234,213, 71, 2, 3, 3,157,175,189, 66, 75,197,127, 1,146,182,157,224, 29,147,141, 56, 31,135,146,214,129, 82, -161,101,218,134,187, 31,175,108,254,205, 2, 75,175, 41,166, 5, 36,247,200, 73,225,123, 48,248,236,172,178, 38, 66, 24,185, 71, -122,186,152, 46,177,205, 57, 20, 20, 27, 33,147,144,120,174, 42,196,131,184,172,202,168, 30, 84, 40,252, 63,223,180,105, 19,214, -174, 93, 59, 64,163,209, 20,197,199,199,171,138,138,138,212,227,198,141, 35,132, 66, 33,110,221,186,133,132,132, 4,180,106,213, - 10,182,182,182,232,210,165,139,168,111,223,190,245, 38, 77,154,244, 62,128, 83,149,113, 98,228, 72, 74,148, 72,156, 92,183,114, -180, 61, 65,197, 34, 54, 41, 15, 13, 61,218,193,193,166, 30, 82, 51,139, 16,246,240, 12, 98,159,253,129,134, 30,245, 49,245,189, -134,182,223,109,207, 60, 13,191,169, 13, 17,254, 66, 63,175,151,134,132, 74, 69, 76,192,210, 77,145, 96,212,207,192, 25,146,192, -209,105, 47, 23,238,182,245,208,172,141, 11, 44,196, 78,228,253,152,239, 2,170,139,187,206,200,125,181,106,197,178,159, 91,251, -250, 35, 63, 63, 31,155, 55,111, 46, 19, 86, 28,199,149,213,184, 59,116,232, 0,131,193,128,159,127,254, 25, 6,182,196,254,175, - 46,156, 21, 48,182,125,251,246, 7, 56,142, 19,203,100,178,180, 54,109,218,120,126,242,201, 39,130,209,163, 71, 67,163,209, 76, -217,185,115,231,185,180,180,180, 99,181,228, 44,105, 70,121,235,173, 46,221,187,119,151, 81, 20, 5,154,166,145,159,159,143,148, -148, 20,196,199,199,195,209,209, 17,248, 95, 95,152, 42, 57, 43,174,133,200,113, 28,103,138,127,121, 33,102,186, 47,230,132,147, - 32,136,102,118,182,118,150, 63,173,223, 22,234, 36,161, 8,199,122,110,132,200,218, 86, 64,202,173, 36, 28, 69,105, 60,235,185, - 89, 17, 4,209,172,138,104, 85,228, 36, 36, 18,201,209, 93,187,118, 57, 11,133, 66, 48, 12, 3, 39, 39, 39,196,199,199, 35, 47, - 47, 15,133,133,133,136,127, 20, 3, 47, 15, 15,124, 58,117,178, 98,217,183, 27,142, 2,104, 91,161, 16,123,121, 49,110,131,161, - 98,152,171,178,192, 97,102, 56,171,114, 72, 18,148, 74, 37, 44, 44, 44,224,227,227, 35, 15, 9, 9,185,161, 84, 42, 83,107,226, -148, 74,165,239,118,238,220,217,106,223,190,125,240,247,247,135,141,141, 13,174, 92,185,130,251,247,239,131,166,105,178,176,176, - 16,114,185, 28,107,214,172, 65,253,250,245,145,159,159,143,196,196, 68, 7,161, 80,232,104, 18, 36, 21, 57,175,159,185,182, 34, - 55,238,202,226, 52,234, 92,255,157,251, 14, 96,202,216,209,112, 53,198,221,176,107, 72,174, 24, 48,168,211,215,148,176,222, 96, - 75,171,150,118,141, 91, 14,131, 72, 44,199, 39, 95, 45, 71,236,131,147,118,197,133,247,103, 48,134,228,122, 75,215, 31,250,180, -146,184, 19, 0, 72, 55, 55,183,201, 63,254,248,163, 85,153,226, 34, 73, 8,133,194, 23,132,149,105, 49,246, 42,238,233,131, 74, - 42, 15,160,105, 26, 52, 77,131,101, 89,100,102,102,162,176,176, 16,118,118,118, 37, 39, 44, 1,176, 4, 4,136, 42, 5,203,131, -114,225, 25,119,224,192,129,122, 22, 22, 22, 47,157,148,156,156,140,252,252,124, 88, 90, 90,194,214,214, 22, 6,131, 1, 70,163, - 17, 58,157, 78,222,189,123,247,233, 0,238, 85,198, 73, 81,212,236,105,211,166,117, 62,125,250,180,247,202,149, 43, 65,211,244, -186,204,204, 76, 76,153, 50, 5, 44,203,162, 75,151, 46, 29, 56,142,123, 60,107,214,172, 18,187,107,217, 50, 67, 81, 81,209,199, -117,205, 75,206,206,206,205, 91,183,110,109,119,241,226, 69,116,233,210, 5, 58,157, 14,211,167, 79,183,158, 60,121,178,245,237, -219,183,157, 54,110,220,184, 39, 37, 37,165,119,117,156,126,126,126,194,244,244,244,185,221,187,119,159,211,187,119,111,155,172, -172, 44, 72, 36, 18, 28, 60,120, 16, 63,253,244,211,159, 52, 77, 47, 58,114,228,200,170, 29, 59,118,244, 31, 54,108, 24,118,236, -216, 49, 75,165, 82,173, 69, 73,179,105, 69, 78,183,122,245,234, 33, 42, 42, 10,118,118,118,112,116,116, 68,126,126, 62,238,222, -189,139,224,224, 96, 52,107,214, 12, 4, 65,216,149,150,105,198, 87,121,142,106,137,191,157,179,108,141,213,114,121, 23, 0,152, -234,213,180, 89,179,226,187,185,185, 13,179,181,181,157,193,113,156, 32, 55, 55,247, 71, 11, 11,139,195,213, 44, 19,196, 47,244, -108,166,192, 50,165, 75,119, 0,215,220, 99, 80,144,213,214, 46,214,193,165,249, 1, 7,247, 22, 37, 55,209,200, 61,162, 36,118, -177, 46,161,197, 5, 0, 64, 27, 56,220,126,148,139,168,167,233,136,122,146, 6,185,180,230, 90,183,131,131, 3, 58,117,234,132, - 19, 39, 78, 32, 57, 57, 89,190,102,205,154,198, 52, 77,211, 67,134, 12, 81,190,245,214, 91,185, 93,186,116,129, 80, 40,196,189, -123,247, 80, 80, 80, 0,138,162, 32, 22,139,193,178,108,149, 78,155,243, 19,102,226,132,169,126,222,142,182, 36, 78,221, 58,135, - 14,205, 70,192, 66, 34, 68,102,174, 6, 36, 65,224, 89,194, 69, 48,140, 37, 34, 31, 37,161, 99, 75, 75,116,109,111,227, 81,116, - 41,103,106, 22,176,213,156, 27, 68,167, 94,133,248,173,183, 1,105, 11,112,250,103, 96,245,169,224,132,206, 80, 23, 75,145,245, - 60, 17,143,238, 30, 6,103, 44,174,145, 39, 37, 69,245,203,207,187,246,116,185, 58,126,226, 68,150,101,241,205, 55,223, 92,125, -250,244,105,143,242,231,120,123,123, 95, 89,184,112, 97,247,220,220, 92,156, 59,119,110,119, 77, 11,149, 86,132, 74,165,186, 8, -192,190,156,160,173, 31, 30, 30,190,239,183,223,126,235,248,254,251,239,227,208,161, 67, 95, 86, 34,176,170,197,172, 89,179,132, - 39, 78,156,232, 39,147,201, 54, 47, 94,188, 88,174,215,235,161, 82,169,144,150,150, 86,230,182, 69, 71, 71, 51, 2,129,224,118, - 13,133,127,165,139, 77, 87, 20, 88,229,246,153, 91,243, 46,210, 27, 12, 58,203,122,110,134, 33,195,250,181,186, 31, 28, 17, 43, -179,183, 39, 91, 5,248, 54,127,244,244,121, 24, 81,210, 4, 99, 86, 51,140,135,135,199,232, 37, 75,150,180,178,182,182, 6,203, -178,176,177,177, 65,102,102,102,153,160,212, 23, 22,128, 46,200, 71, 84, 98, 60,186,116,239,137,190, 29, 59,248,252, 97, 48,140, - 78, 73, 73,217, 95, 29,175,125,107,191, 50,231,234,144,183, 67,217,254, 49,207,243,202, 4,192,153,118,141, 32,145, 91,162,229, -103,243,235,252, 48,167,165,165,133, 95,188,120,241, 76,255,254,253, 7, 78,157, 58,149, 76, 75, 75, 59,107, 52, 26, 59,103,100, -100, 60,172,238,127,114,185,188, 97, 86, 86, 22, 10, 11, 11, 97, 99, 99,131,141, 27, 55,194,217,217, 25,197,197,197, 8, 9, 9, -225, 60, 60, 60,136, 43, 87,174,192,221,221, 29,217,217,217,160,105, 26,197,197,197,105,122,189,190,202, 62,146,165,205,128, 3, - 62,239,131, 63, 31,135,238,238,234,142,248,144,145, 95,118,125, 18, 25, 28,155,124,249,210,173, 21, 70,173, 52, 57, 47,229,194, -220, 6, 1,145,142, 51,190, 92,134, 45,235,150,224,241,189,107, 57, 46,245, 11,183, 50,132,110,119, 13, 46,173, 54, 38, 38,198, - 42, 50, 50, 18, 36, 73,194,218,218, 26,150,150,150,101, 11,155,155,196,149, 64, 96,190, 65,111,170,224,152,196, 85,102,102, 38, -158, 37,198,226,200,229, 61, 48, 24, 13,142,187,218, 91,167,121,139, 68, 81,249, 45,178, 22,100, 71, 35,188,134, 2,240,199, 49, - 99,198,140,118,119,119,183, 42,191,191, 77,155, 54,120,239,189,247,112,246,236, 89,132,134,134,190, 80,193,202,204,204, 84, 49, - 12, 83,101,188,147,147,147,243, 88,150,237, 63,121,242,228,176, 99,199,142, 89,127,251,237,183,101, 93, 10, 76,205,162,166,239, -125,251,246, 33, 44, 44,108,113,122,122,250,163,186,228, 35, 23, 23,151,102,131, 7, 15,190,190,117,235, 86,219,244,244,116,100, -101,101, 65,173, 86, 67, 40, 20,194,104, 52,162, 81,163, 70, 4,195, 48, 94, 53, 53, 7,210, 52,125,242,242,229,203,253, 26, 55, -110, 12, 0, 48, 24, 12,184,117,235, 22,166, 78,157,154,109, 97, 97,241,110, 98, 98,162, 90,161, 80, 44, 60,125,250,116,255, 54, -109,218,160, 85,171, 86,174, 25, 25, 25, 86,137,137,165,118,110, 37,239, 10,134, 97,202,210,231,231,159,127, 46, 59,166,213,150, - 44, 57,169,215,235,137,182,109,219,122,133,134,134,190,177,131, 91, 18,127,219,137,231, 11,102,194,243,198, 99, 0, 64, 88,243, -146, 46, 87,158,215, 98, 74, 78, 24, 63,190, 86,124, 10,133,194,129,227,184, 41,205,155, 55,255,172,127,255,254, 78, 10,133, 2, - 14, 14, 14,184,127,255,126,231,115,231,206,109,214,233,116,219, 25,134,217,110,142, 91,255, 26,240,130, 22,121,147, 28, 44,162, - 52,114, 4, 49,106, 20,195, 29, 58,148,149,234, 35,166,197, 2,139, 88, 0,208,211,197,180, 75,104,113, 1, 49,106, 20,227,212, - 98, 24, 56,112, 96,216, 82,183,129,227,192,152, 57, 14, 68,251,232, 29,176,121, 39,225,108, 55, 12, 59,118, 28, 67, 70, 70,134, -104,227,198,141,111, 29, 59,118,204, 99,220,184,113, 73,141, 26, 53,202,239,217,179, 39,246,236,217, 3, 87, 87, 87,232,245,122, -176, 44, 91,165,122,179,178,103, 70,182,111,213,136,138, 77,188,143,182,141,223,129,151,162, 11,158,165,230, 35,183, 80,135,236, -124, 13,154, 52,249, 18,233, 57,197, 40, 80,107,113,255,241,239,240, 80, 52, 32, 41,225,179,254, 48, 83, 96,233,158,237,133, 46, -254, 0, 68,138, 30, 16, 55, 24, 13,161, 99, 71, 36, 63,190,138,136,139, 27,144,242,228, 38, 56,150,129, 75,189,102,230, 54,225, - 44,221,180,105,211,184,160,160, 32,193,204,153, 51,187,175, 89,179,166,187, 82,169,188, 10, 0,110,110,110,221, 39, 78,156,216, -221,202,202, 10,171, 86,173, 50,112, 28,183,244, 85, 19, 55, 45, 45, 45,201,205,205,109,198,197,139, 23, 35, 39, 77,154,132,102, -205,154,249,197,198,198,146, 48,163, 99,109,163, 70,141,166,138,197,226, 15,140, 70, 99,227,177, 99,199,146, 83,166, 76,145, 59, - 59, 59,227,249,243,231,208,233,116, 32, 73, 18, 34,145, 8,209,209,209,236,201,147, 39,243, 69, 34,209, 44, 51, 28, 22, 56, 58, - 58,186,119,233,210, 37, 12, 0,236,237,237, 61, 88,150,133,131,131,131, 71,199,142, 29,195, 0,192,206,206,206,189, 50, 33, 86, -165, 0,166,233,144,164,196,196, 38,157,187,118, 86, 92, 15,125, 24,254,246,240,193, 61, 72, 1, 73, 38, 36,170, 66,156, 28,236, - 45,111,221,190, 89, 64,211,116,136, 57, 92, 66,161,112,112,151, 46, 93, 4,185,185,185,112,115,115, 67,102,102, 38, 82, 83, 83, - 97, 48, 24,160,205,207, 5, 93, 80, 0, 58, 63, 15, 92,113, 17,226, 66,238,193,167,158,187,228,124, 73, 39,248,253, 53,213, 56, - 43,115,168, 8,130, 40,219, 39,177,146, 67,102,101, 85,214,252, 81,139,151,227, 48,107,107,235,185,133,133,133,103,148, 74,229, - 74,189, 94,255, 73, 80, 80, 80,192,242,229,203, 29,231,206,157,107, 61,119,238,220, 67, 82,169,212, 55, 49, 49, 81, 87,165, 66, - 45, 42,122,102, 48, 24, 28, 0,184, 92,186,116, 9, 78, 78, 78, 40, 40, 40,128,193, 96,128, 70,163,209,219,217,217, 73,179,179, -179,161,213,106,161,215,235, 97,109,109,141,176,176,176, 28,163,209,120,170,166,240,217, 54, 36, 87,232, 12,143, 22,219, 55,183, - 76,101, 56,135,192, 66, 13,155,187,116,189,106, 5,128,245,253,189,189,119,234,217,107,241,177, 15, 78,216,197,135, 92,201, 81, - 62, 41,246,254,233, 76,124, 97, 13, 47, 95,150, 32, 8,174,105,211,166,200,204,204, 4, 69, 81,176,180,180,132, 92, 46, 71,179, -102,205,144,156,156, 92,103,129, 85, 94, 92, 93,188,115, 26, 89, 69, 42,236, 92,183, 15,238,174,245, 72, 0, 78,169,105,201,125, - 38,205, 25,213, 62,201, 58, 33, 40,225, 86,222,154,106, 42, 58, 17, 42,149,202,250, 5,251,197,205,173,135,157,157,221,101,154, -166,241,252,249,115,156, 63,127,190,123,106,106,106,173, 10,144,212,212,212, 56,142,227,250, 15, 31, 62,124, 79,171, 86,173, 26, -114, 28,135,102,205,154, 97,216,176, 97, 56,114,228, 8, 30, 62,124,136,130,130, 2,246,198,141, 27,187, 84, 42, 85,157, 58,228, -184,186,186, 54, 29, 56,112,224,205, 45, 91,182,216,101,101,101, 65,171,213,162,168,168, 8,135, 15, 31, 70,231,206,157, 33,149, - 74,177,105,211,166, 2,163,209,184,165, 58,113,197,113,220,137, 99,199,142,245,243,246,246,198,163, 71,143,112,227,198, 13, 56, - 57, 57, 65, 38,147, 97,200,144, 33, 14, 7, 14, 28,248,196,199,199,103,131, 90,173, 94, 49,112,224, 64, 48, 12,131,208,208, 80, - 85,233,168,194, 42,211,168,202,114, 69,171, 5,199,113, 48, 24, 12, 27, 73,146,124,215,207,207,175,111,120,120,120, 48,222, 16, -184,187,187,183, 16, 10,133,159, 2, 64,102,102, 38,242, 88, 64,158, 83, 50,232, 54,191,244,117,153,147,147, 83,246,174,105,212, -168,209, 31, 26,141,102, 65,106,106,106,149, 46,147,155,155, 91,107, 11, 11,139,207,122,244,232, 49,110,208,160, 65, 20, 77,211, - 56,125,250, 52,182,108,217,130,254,253,251,163, 81,163, 70,248,242,203, 47,109,116, 58,221,188,179,103,207,206,189,126,253,250, -217,194,194,194,249,213,113,190, 38,148,105,145, 55, 73, 96,113,165,170,177, 36,134, 37, 83, 49,228,150,214,104, 28,237,237,237, -183, 48, 12,211,163, 73,147, 38, 48,114,233,120,254,236, 9, 10,115, 89, 24,244, 58,176, 44, 7,142, 53,239, 94,176,121, 39, 97, -221,141, 67,193,117, 2, 52, 77,195,217,217, 25,107,214,172, 65,126,126,190, 96,210,164, 73, 94,203,150, 45,139,208,106,181, 80, -171,213,208,104, 52,208,104, 52,213, 10, 44,145, 84,215,202,211,165, 49, 10, 53,237, 96, 33, 22, 35,187, 64,135,220, 66, 29,178, -242,180, 56,122, 98, 44,116,154, 98, 24,245,122, 48,180, 17,114,151, 17,104,100,223, 3,192, 83,179, 38, 72, 43, 51, 81, 88, 35, -232,212, 11,160, 83, 47,192,162,205, 66,156,216,244,254, 11,231, 25,141,230, 53,249,167,165,165, 37, 29, 63,126,252,135, 15, 62, -248, 96,214,240,225,195,177,125,251,246,181, 74,165,178,109,169,139,176,118,196,136, 17,136,142,142,198,245,235,215,183,189,174, -218, 2,199,113, 14,246,246,246, 32, 73, 18,197,197,197,186,154,196,213,225,195,135,137,101,203,150,157, 29, 50,100, 72,199, 79, - 62,249,196,194,213,213, 21, 28,199, 65,175,215, 35, 37, 37, 5, 36, 73, 34, 47, 47, 15, 63,255,252,179, 58, 52, 52,148, 19,139, -197,183,133, 66,225, 71,209,209,209,202,154,250, 14,217,217,217, 97,236,216,177, 78,237,218,181,115, 42, 63, 98,240,221,119,223, -117,106,219,182,109,217, 62, 15, 15, 15,179,227,167,213,106,127, 94,181, 98,113,143,223,246, 30,108,214,180, 89, 35,187, 51,231, -175,132, 59, 56, 88,203,188,188,188, 37,249,121,121,186, 45, 27,215, 9,212,106,245, 47,102,210,249, 56, 58, 58, 34, 45, 45, 13, - 79,159, 62,133, 78,167, 43,105,194, 41, 46,130, 62, 47, 15,116,126, 46,160,213, 64,204, 48,208,101,165,195,203,219, 11,248,223, - 8,195,234,223, 24,229,196, 84,197, 38, 65,130, 32, 32,179,177,134,216,210, 18,148, 80, 96,118, 31, 44, 87, 87, 87,127, 95, 95, -223,131, 59,118,236, 16,205,158, 61,187,253,189,123,247,182, 36, 38, 38, 38, 10, 4,130, 94,235,214,173, 11, 94,185,114,165,100, -220,184,113, 77,127,252,241,199, 9, 0,126,172,230, 30, 30, 60,115,230,204,123,245,235,215,119,121,240,224, 1,180, 90, 45, 88, -150,197,128, 1, 3, 0, 64,106, 58,239,241,227,199, 26,141, 70,147, 30, 29, 29, 93,152,152,152, 72,195,140, 81,127, 95,111, 85, -222,253, 60,243,250,219, 10,133,219, 29,177,196,179, 1, 89, 28, 54,226,243,145,238,223,126,119, 56, 85,123, 54, 46,174,112, 81, -159, 6,107,138, 11, 31,204,176,243, 80,111,253,225,116,188, 57, 29,220,203, 70, 11, 58, 58, 58,150, 53, 9,138, 68, 34,147,251, -130,252,252,252,154,154, 8, 43, 45,188,243,243,243,145,159,159,143, 39, 9,143,144, 89,168,194,133,253,119,192, 48, 76,153, 59, -226,230,226,129,139,251,131,173,186,143, 12, 88, 80,208, 42,239, 74,206,125,132,152,155, 79, 73,146,252,236,157,119,222, 1, 77, -211, 24, 54,108, 24,246,237,219,247, 89, 93,106,232, 74,165,242,174, 82,169,108,252,244,233, 83,107,131,193, 48,116,200,144, 33, -187, 7, 14, 28,136, 59,119,238,224,210,165, 75,221,245,122,125, 44,195, 48, 26,133, 66, 17,196,113,156, 51, 65, 16, 65, 42,149, -170,218,209,206,141, 27, 55, 30,103,101,101,181, 74, 38,147, 21, 54,108,216,208,205,228, 92,169,213,106, 24,141, 70,164,164,164, -224,207, 63,255, 84,157, 57,115, 70,197,113,156, 69, 81, 81,209,146,228,228,228,195, 85, 53, 11, 22, 21, 21, 29, 63,121,242,100, -127,111,111,111, 92,187,118, 13,223,124,243, 13, 26, 54,108,136, 93,187,118,161, 83,167, 78,240,242,242,130,189,189,253,167, 5, - 5, 5, 29,191,249,230,155,129,126,126,126, 56,118,236, 24, 50, 50, 50, 54, 87,247,126,170,238, 61,171,209,104,192,113, 28,122, -246,236, 57,117,246,236,217, 24, 50,100,200,121,127,127,255,118, 97, 97, 97, 79,254,235,133,180, 66,161, 88,211,179,103,207,185, -173, 91,183,198,222,189,123,161,107,219, 5,150,187, 78,225,193,224,206,224, 0,184,237, 58, 81,210, 94, 55,180,100, 64,135, 87, -175,145,152, 59,119,238,192, 17, 35, 70,212, 7,208,162, 10,206,111,199,141, 27, 55,231,253,247,223, 71,120,120, 56,126,252,241, - 71, 68, 68, 68,148,149,121, 6,131, 1, 49, 49, 49,136,137,137,129, 66,161,192,224,193,131,137,143, 62,250,104,192,128, 1, 3, -156, 80,210, 45,226,175,118,177,186,191, 73, 77,132, 85,170, 70, 23, 23, 23, 71, 59, 59,187,232, 45, 91,182, 56,180,111,223,158, - 50, 26,141,184,116,249, 50,190,152, 57, 9,253, 7,207,128, 86, 39,134, 81, 75,128, 17,201,205,187,162,245, 96, 20, 92, 39,192, -202, 7, 66,175,215, 99,234, 62, 17,108,137,116,108,156,232, 2, 0,132, 70,163,129, 78,167,131, 70,163,129, 90,173,134, 90,173, - 6,195, 48, 85,190, 37, 11,243, 44,105,218,192, 34, 53, 35, 17, 41,170, 7,176,145,215, 7, 71,214, 67,122, 78, 49, 8, 56,195, -160,125, 12,182,244,193,212,105, 82,160,214,189,154, 40,102, 10,227, 43,113,102,204,239, 83,201, 48,204,170,117,235,214, 77,221, -178,101,139,100,198,140, 25,254, 43, 87,174, 28, 10, 0, 83,166, 76,241,151, 74,165,216,186,117,171,142, 97,152, 85,175, 41,125, - 41,146, 36, 63,235,214,173, 27, 10, 10, 10, 16, 29, 29,125,186,166, 63, 44, 92,184,112,250, 59,239,188,211,113,217,178,101, 22, - 90,173, 22,197,197, 37,205,159,249,249,249, 80,171,213, 72, 79, 79,199,156, 57,115,114,105,154,158,150,144,144,112,164, 22, 66, - 15, 39, 79,158,196,111,191,253,246,194,136,193,119,223,125,215,105,223,190,125, 25,155, 54,109, 74,229, 56,142,179,183,183,247, - 24, 57,114,164,179,185, 45,132, 42,149, 74, 3, 96,214,202, 85, 43,127,255,118,221, 58,231,156,236,220, 88,145, 88,166,181,144, - 73,236,231,126,177,130, 75, 79, 79,159,147,145,145, 81,108,110, 56,115,115,115, 17, 31, 31, 15,153, 76, 6,145, 72, 4,166,184, - 8,172, 90, 13, 93,110, 54, 72,189, 14, 18,134,129,189,133, 4,245, 92, 92, 80,223,217,188,190,248,170, 43,231,241,231,232,193, - 47, 52, 11, 18, 4,129,179,157,154, 66, 44,183,132, 84, 46, 71,151,227, 55, 74, 42, 12, 34, 17,176,113,135, 57,205, 56,142, 10, -133,226,228,230,205,155, 69, 89, 89, 89,136,142,142,142, 76, 76, 76,204,183,179,179,179, 50, 24, 12,236,147, 39, 79, 46, 62,126, -252,120,176,151,151, 23, 56,142,171,105,244,215,250,163, 71,143,246,233,220,185,179,209,203,203,203, 50, 51, 51,179,126,110,110, - 46,161, 82,189,216,135, 57, 36, 36, 68,154,148,148, 84,204,178,236,177, 82,113, 85, 99,198,255,124,164,187,244,118, 56,102, 5, - 58,122,181,182,113,106,141, 44, 67, 68,235,187,145,105,179, 62, 31,233,190,233,187,195,169, 90,134,208,237,102, 12,201,245, 4, - 82,237,158,218, 52, 33,112, 28,135,144,144, 16,220,184,113, 3, 55,110,220,192,243,231,207,203, 78,176,177,177,193,133, 11, 23, -208,163, 71, 15,179, 31,148,226,226, 98, 40, 20, 10,216,218,218,226,216,213, 95,241,211,183,251,202, 58,186,155,144,149,149, 5, - 11, 11, 11,172,250, 98,131,124,210, 87, 35, 87,228, 32,171,175, 57,220, 30, 30, 30, 13, 58,119,238, 60,200,197,197, 5,185,185, -185,112,114,114, 66, 64, 64,192, 16,154,166,189, 50, 50, 50,234,212,148,165,215,235,167,247,232,209, 99,229,156, 57,115, 96, 48, - 24, 48,122,244,104,196,199,199, 31,140,139,139,219,232,233,233, 57,107,198,140, 25, 46,142,142,142,152, 62,125,186, 37,128,183, -171,226,105,218,180,233,231, 95,125,245,213,234,241,227,199, 75, 12, 6, 3, 46, 93,186, 84,230, 82, 27,141, 70, 36, 38, 38, 98, -201,146, 37,170,130,130,130,192,212,212,212,103,102, 84, 34,231, 28, 63,126,124, 64,147, 38, 77,112,246,236, 89, 76,155, 54,237, - 15,185, 92,222, 98,208,160, 65,245, 45, 45, 45, 17, 25, 25, 9,154,166,161, 80, 40, 92,230,205,155, 55,184, 95,191,126,184,120, -241, 34, 86,172, 88,113,218,213,213,117,125,197, 60, 87, 81, 4, 11, 4, 2, 24, 42,244,105,164, 40, 10, 17, 17, 17,232,217,179, - 39,230,206,157, 11, 0,184,120,241,162,117,223,190,125, 31, 4, 6, 6, 90, 95,187,118, 77,247, 95, 46,164, 45, 45, 45, 63,216, -181,107, 23,158, 62,125,138,155, 55,111, 34, 59, 59, 27,122,189, 30,249,108,201,195, 32, 41,117,174, 56,119, 79,116,154,179, 0, - 99, 6,191, 13,149, 74, 5,146, 36, 29,171,169,240,141, 91,176, 96, 1,254,252,243, 79,172, 89,179, 6, 5, 5, 5,149,158, 39, -147,201, 16, 16, 16, 0, 95, 95, 95,196,199,199, 3,128,227,223, 16,229, 55,210,193,170,202,117,216,248,195, 15, 63, 56,116,238, -220,153, 82,171,213, 96, 89, 22, 29, 59,116,192,132,137, 19,112,238,216, 97, 40, 26,244, 0,165,149,193,104,101, 97,158,192,168, -183, 27, 57, 57, 57,144, 72, 36,144,150,118, 40,141, 74, 41,179,119,161,213,106,203,196,149,233,187, 58, 24,245,226,176,152, 56, -166, 94, 65, 81, 4,238,133,253, 6,131, 94, 15,175,198,243,161, 51, 58,194,210,249, 67,104,232,147,160,243, 74, 70,238,138,173, -187, 35, 61, 61, 11, 0, 97,150,197, 89, 89, 33,207,106, 94,238,236,206, 50,230, 11,172,140,140,140,204, 27, 55,110,172,143,136, -136, 88, 56, 96,192, 0,252,244,211, 79,107, 56,142,195,192,129, 3, 17, 18, 18,130,200,200,200,245, 25, 25, 25,153,175, 35,109, - 93, 93, 93,127,222,186,117,235, 64, 23, 23, 23, 28, 61,122, 20, 28,199,213, 40,136,196, 98,241,148, 89,179,102, 89,152, 92, 12, -177, 88, 12,141, 70,131,180,180, 52,208, 52,141, 99,199,142,233,244,122,253,236,231,207,159, 31,169, 77, 96, 56,142,227,218,181, -107,135, 13, 27, 54,164,220,186,117,203, 31, 0, 58,118,236, 24,214,182,109, 91,167, 77,155, 54,165,222,187,119,207, 31, 0,218, -181,107, 23,234,235,235, 91,171,121, 92, 84, 42, 85, 74, 68,232,221,103, 26,173, 86,104,231, 96, 95,108,101, 41,230, 10, 10, 11, -201,168,168,112, 85, 70, 70,198,243, 90, 80,197, 68, 71, 71,183, 76, 77, 77, 69, 98, 98, 34,152,226, 34,144, 58, 29, 8,157, 6, -189, 58,118,128, 12, 28, 36, 96, 33, 98, 13, 16, 82, 2, 20, 22, 22, 1, 64, 76,141,174,109,185, 2,193, 36,174, 8,130,128, 84, - 46,135,216, 74, 14,137, 92,254,130,163,101,142,184,148,201,100,191,255,248,227,143, 10,133, 66,129,239,190,251, 14, 10,133,162, -153,171,171,107,177,149,149,149,204,209,209, 17, 77,154, 52, 65,219,182,109,113,229,202, 21, 16, 4, 81, 83,193,104,228, 56,174, -239,205,155, 55,231,220,190,125,123,148,155,155, 27, 49,126,252,120,244,239,223, 31, 18,137, 4, 26,141, 6,185,185,185,248,227, -143, 63, 8,150,101,253, 74, 5,158,167, 68, 34,217, 71, 16, 68,202,243,231,207,223,173, 72,184,109,101, 43,183, 66, 13, 59,137, - 84,203,222, 14,236,231,213,170,103,191,222,104,208,184, 23,122,246, 75, 6,128, 53,142,194,132,209,223, 44,176, 61,102,103, 77, -236,186,125,252,226,215, 93, 6,244, 88,180,148,190,186, 98,233,230,220, 26, 93, 44,130, 32,202, 10, 91,146, 36, 43,117,169, 40, -138, 2, 73,146,230,189,147, 88, 38,165,255,196,142,101,219, 6, 35,237,232,238, 90,143, 52, 57, 87, 0, 80, 80, 80,128,164,164, - 36, 24, 12, 6, 56, 56, 56,192, 96,160, 91,215,162, 82, 53,107,244,232,209,132, 86,171,197,156, 57,115,176,110,221, 58, 12, 27, - 54,140,184,119,239,222, 44, 0,159,213,246,193,118,115,115, 91, 55,125,250,244, 57, 31,124,240, 1,242,242,242,112,249,242,101, -244,232,209, 3, 63,252,240,131,211,229,203,151, 87,119,234,212, 9, 20, 69,225,194,133, 11,160,105,250,113, 13,207,251,204,241, -227,199, 75,146,147,147, 33, 18,137,208,182,109, 91,164,164,164, 64,173, 86, 35, 35, 35, 3,203,151, 47, 79,203,207,207,239,174, - 84, 42,159,153, 17, 52,210,219,219,251,211, 70,141, 26,225,210,165, 75,152, 62,125,250,159,150,150,150,111,231,230,230,126,164, -211,233, 54, 13, 30, 60, 24,157, 58,117,194,227,199,143, 49,100,200, 16, 4, 4, 4,224,242,229,203,152, 59,119,238, 31, 22, 22, - 22,239,212, 48, 15,214,147,171, 87,175,182,108,219,182, 45,212,106, 53, 10, 11, 11, 33, 20, 10, 97,107,107,139,152,152, 24, 52, -110,220, 24,115,231,206,197,134, 13, 27, 48,123,246,108,182,111,223,190, 70,154,166, 69,166, 81,150,255,101,168,213,106, 78,165, - 82,193,218,218, 26,135, 14, 29,194,253,139,231,112,102,230,135,144, 46, 90, 7,142,227,144,178,114, 30,122,126,181, 8, 29, 34, -227,160, 82,169,176,103,207, 30,144, 36,137, 10, 3, 80, 94, 42,219,242,243,243,225,235,235,139,144,144, 16,236,217,179, 7,223, -125,247, 93,153, 91, 43, 20, 10,209,189,123,119,244,233,211, 7, 79,158, 60,193,143, 63,254, 8,107,107,107,240,168,155,192, 34, - 42,124,151,115,103,216,158, 1, 1, 1, 84, 81, 81, 17,180, 90, 45,210,211,211,145,144,144, 0,153, 76,134,212,140, 36,180,107, - 88,132, 52, 66,143,232,136, 88,134,160,132, 17, 53,217,240, 52, 77, 67,175,215, 35, 42, 42,170,100,232,123,227,160,178,206,207, -165,125, 62,160,213,106,113,245,234, 85, 78, 38,147,193,210,210,146,168,174,237,157, 53,234,254,188,114, 43,114,224,251, 35,122, -138, 47, 92,253, 9, 6,157, 17, 69, 58, 91,168,181,122, 20,106,132,208, 75,250,129, 32,110,128,164, 36,232,228,219, 16,151,111, - 62,209, 50, 6,250,172,121,170,128, 1,101,223, 26, 76, 78, 84, 57,129,245, 98, 13, 75, 36,145,131, 49,214,110, 84,176, 84, 42, - 93,183,126,253,250,153, 63,255,252,179,213, 71, 31,125,212,196, 84, 88,108,221,186,181, 80, 42,149,174,123,213, 52, 85, 40, 20, -239,123,121,121, 45, 95,178,100,137,187,175,175, 47,194,194,194, 16, 20, 20,244, 71, 90, 90,218, 9, 51,106,198, 30, 14, 14, 14, - 40, 42, 42,130, 88, 44, 6,195, 48,200,200,200, 64, 82, 82, 18, 36, 18, 9,130,131,131,245,158,158,158, 71,235, 18, 48,115, 58, -180,151, 31, 81, 89, 27,200, 68,172,255,162,175,166, 54,210,106, 53,205, 11, 11, 11,141, 2,129, 64, 32, 17, 50,241,181,225, 48, - 24, 12,167,111,220,184, 49,188, 75,151, 46,146,216,168, 8,208,249,249, 48, 20,228, 65,196, 24, 97,239,239, 11, 82,175, 5,161, - 55,192,221,135,131, 38,207, 18,183,194,227, 12, 6,131,161, 70, 87,208, 36,176, 72,138,122,177,223,149,181, 21,196,242, 18,129, - 85,126, 63, 81, 67,187,150,179,179,179, 69,183,110,221,122,249,249,249,129,227, 56,172, 91,183, 14,122,189, 94,108, 48, 24, 96, - 48, 24, 64,211, 52, 10, 11, 11,113,228,200, 17,252,250,235,175,183,108,108,108,118, 41,149,202,154,130,105,116,119,119,255,132, -101, 89,103,163,209, 72, 59, 57, 57,137, 14, 30, 60, 8,169, 84, 10,146, 36,225,235,235, 11,169, 84,170, 83, 40, 20, 52, 0, 56, - 57, 57, 25,214,175, 95, 47,152, 60,121,178,168, 50,178, 54,237,154,124,193,112, 14,129, 98,137,167,151,141, 83,107, 52,104,220, - 11, 0,208,103,240, 36, 52,104, 84, 15,249,153, 81, 13,244,186,196, 17, 20,145,109,247,219,157,212,152,174, 22, 45, 63,200, 78, -185, 26, 11,224,103,115,243, 82,175, 94,189,208,183,111,223,178,230, 64,103,103,103,232,245,122, 24,141, 70,179,197, 21, 0,152, - 38, 17, 93,186, 20, 36,150, 0,187,218, 91,165, 1, 40,179, 39,243,243,243,145,156,156,140,196,196,196,178,247, 20,203,153, 87, -187, 86, 40, 20,178, 6, 13, 26, 76,108,209,162, 5, 46, 95,190,140,168,168,168,212,107,215,174,185,183,107,215, 14, 30, 30, 30, - 31,112, 28,183,160,212,133, 53, 11,142,142,142,150,237,219,183,159,249,193, 7, 31,224,241,227,199,152, 59,119,110,118, 90, 90, -218,177,211,167, 79, 79,254,252,243,207,201,192,192, 64,100,100,100, 96,251,246,237, 76,112,112,240,183,118,118,118,203,211,210, -210,170,187,143,241, 74,165,242, 45,173, 86,139,236,236,108,152,166,100, 56,123,246, 44,206,157, 59,151,158,151,151,215, 93,165, - 82, 61, 53, 39,108,158,158,158, 86,254,254,254, 46,177,177,177,216,191,127, 63,104,154, 94,148,152,152, 72, 91, 91, 91,239,221, -186,117,235, 18,111,111,111,251,110,221,186,161, 83,167, 78,224, 56, 14,167, 78,157,194,210,165, 75,255,144,201,100,111,199,196, -196,208, 53,208,143, 88,177, 98,197, 10, 71, 71,199,119,223,123,239, 61,210,223,223, 31,161,161,161, 96, 24, 6,189,122,245, 42, - 19, 87,103,207,158,253,253,236,217,179, 35, 1,136,228,114,185,244,191,238, 94,153,160,213,106, 17, 27, 27, 11, 23, 23, 23, 52, -106,215, 17,115, 31, 36,224,198,237, 59,224, 56, 14, 93,162, 19, 80, 84,164,198,174, 93,187, 16, 22, 22, 6,138,162,224,237,237, - 93, 35, 39, 77,211,120,250,244, 41, 50, 51, 51, 49,108,216, 48,140, 27, 55, 14,107,215,174, 5, 77,211, 88,184,112, 33,114,114, -114,176, 99,199, 14, 60,125,250, 20, 2,129, 0,114,185,252,239,136,106,149, 90,228,141,116,176,128,146,182,111,150,101,161, 84, - 42, 17, 18, 18,130,132,132, 4, 88, 90, 90, 66, 99,100,217,205,119, 35, 89,146, 16,166, 50, 28,110,114, 70,124, 85,147, 18, 55, - 24, 12,132, 64, 32,192,237,219,183,241,236,217, 51, 88, 55,226,202,220, 43,131,193, 0,157, 78,135,226,226, 98, 8,133,194,162, - 59,119,238, 60, 15, 13, 13,109, 32, 16, 8,170, 28, 5,150,209,152,218,125,225,226,165, 47,252,125,155, 55,233, 29,184, 20,167, - 79,127,141,188,130, 2,168,117, 2, 20,105,104,168,181, 28,220,172, 26,162,125,107, 63,100,102,235,241, 36, 58, 44, 37, 75,100, - 95, 99, 27,140,129, 33,243,127,223,242,145,205,208,145,211, 33,117,237, 6,125,194, 65,176,154,244, 50,129, 37,146, 90,193,218, -177, 62, 10,138, 52,184, 21, 19, 15, 3, 67,230,155,123,211, 19, 18, 18, 10,116, 58,221,170, 91,183,110,125, 99, 26,249,115,253, -250,117,196,197,197,173, 82,169, 84, 5,181, 73, 64,133, 66,209, 27,192, 62, 0, 82,103,103,231,244,128,128, 0, 69,223,190,125, -165,129,129,129,160, 40, 10,225,225,225,248,232,163,143,206,203,229,242,183, 97,198,156, 56, 98,177, 56, 61, 63, 63,223, 70, 34, -145,192, 96, 48, 32, 45, 45, 13,143, 31, 63,134, 70,163, 65,122,122, 58, 8,130, 80, 94,189,122, 85, 83,219,140,102, 26,161, 85, -177,144,172, 76, 60,215,114, 20, 33,220,221,221, 3, 3,218,183,107,249,237,134, 77,208, 20, 23, 33,248,206,105,228,230,100,225, -199,157, 71, 91,185,187,187, 7,154,219,153, 56, 37, 37,229,192,209,163, 71,231,180,105,209,194,207,187, 94, 61,220, 79, 76,128, -136,101, 32,102, 24, 80,122, 45, 72, 70, 7,143,150, 28, 72, 82,142,244,180, 66,108, 59,127,249, 65,233,172,238,213,135,111,192, - 80,140, 77,204, 7, 65, 16, 56,223,181, 57,164,114, 57, 68,114, 75,116, 58,114,181, 76, 84, 61, 95,243, 37, 68,150,114,216, 5, -212, 60, 49,102, 70, 70, 70,241,173, 91,183, 66, 31, 61,122, 20,208,180,105, 83, 44, 91,182, 12,201,201,201,224, 56, 14, 25, 25, - 25,218,204,204,204,212,236,236,236,231, 4, 65, 28, 83, 42,149, 59, 97,230,108,225, 44,203, 58,159, 58,117, 10, 0, 68, 0,112, -233,210, 37,184,185,185,193,198,198, 6, 5, 5, 5, 24, 63,126,188,100,241,226,197, 0,128,240,240,112,161, 84, 42,173,146, 43, - 58,226,241,250,220, 2, 46,151, 84,135,189,157,101,140,104,213,179, 95, 10,250, 12,254, 0, 23, 78,239,194,229,115, 23,225, 40, - 76,136,103,100, 69,127,102,198,103, 21,170,212,141,183, 55,111, 59,153, 82, 22,157,251,113,250,208, 88,129,135,130, 61, 52,127, - 91,245, 19,247,114, 28, 7,138,162, 94,234,208, 94, 91,113, 85, 30, 75,151,130,197, 18, 16, 13,132,130,136,212,180,228,126,110, - 46, 30,101,149,139,164,164, 36, 36, 39, 39,163, 81,163, 70, 72, 72,140,131, 88, 44,138, 48, 51,223,191, 55,120,240, 96, 43,189, - 94,143,227,199,143, 27, 9,130, 24,124,234,212,169,208, 54,109,218, 8,122,244,232, 97,181,107,215,174,247, 0,236,172, 77,139, -145, 92, 46, 23, 25, 12, 6,236,222,189, 27,169,169,169,129,233,233,233, 49, 28,199,109,255,248,227,143,127,240,241,241,105, 20, - 19, 19,243, 68,163,209, 76, 87,169, 84, 81,213, 53,185, 1, 64, 94, 94,222,132,254,253,251, 31, 98, 89,214,179,115,231,206,150, - 99,199,142,181,230, 56, 14, 62, 62, 62, 56,115,230,140, 82,165, 82,153,221,135, 41, 49, 49,177,240,198,141, 27,233,205,155, 55, -119, 81, 40, 20, 16,137, 68,107, 92, 93, 93, 87, 82, 20,245,237,144, 33, 67,236, 15, 30, 60,136,195,135, 15,195,210,210, 18,241, -241,241,202, 71,143, 30,109,116,117,117,253,222,156, 25,220,195,195,195,227, 1,140, 13, 8, 8, 88,250,221,119,223, 45, 34, 73, -242,253,243,231,207,151,205,117,102, 18, 87, 94, 94, 94, 19, 14, 31, 62, 60,238, 13, 51, 66, 12,122,189, 30, 14, 14, 14,200,204, -204, 68, 70, 70, 6,234,215,175,143,142, 29, 59,194, 96, 48,224,196,233, 63,112,227,198, 13,112, 28, 7, 71, 71, 71, 88, 91, 91, - 35, 50, 50, 18, 0,170, 27, 61,108,160,105, 26,246,246,246,200,203,203, 67,100,100, 36,156,157,157, 49,123,246,108,232,245,122, - 28, 60,120, 16, 17, 17, 17, 32, 73, 18, 78, 78, 78,176,178,178, 66, 68, 68, 68, 77,156, 60,106, 43,176, 40,138,186,114,229,202, -149,145,173, 91,183, 22, 60,121,242, 4, 79,158,148, 60,111, 26,141,198, 40,160,112, 56,227,254,137,177,213,252,189, 37,202,205, -149, 33, 22,139,183,141, 28, 57,114,250,164, 73,147, 48, 99,198, 12,144, 36,137,159,195,117, 72, 74, 98, 65,211, 52,210,211,211, -113,255,254,125, 46, 32, 32,128, 96, 89,150,238,222,189,251,148,176,176,176,118, 20, 69, 21, 84,197,137,195,135, 25, 99,203, 33, -195,182,110,219,121,123,226,196,137,246, 67,135,109, 69,248,195,104,228,169, 75, 90,153,220, 28, 45,209,190,233,151,200,200,214, -225,220,159,167,115, 89,163,246, 29, 68, 31, 48, 84, 23, 78, 0,200, 44,214, 56,111,223,115,116,221,254, 35,199,166, 76,157, 48, - 86,218,189,251, 4, 8, 11,239,131,201, 14,131, 91,227,206, 32, 40, 11,220,139, 12, 71,212,211,100,109,177,150,218, 89, 64,107, -190,172,137,243, 5, 47,157, 36, 55,239,216,182,105,245,217, 11, 87, 41,154,166, 49,176,127, 47,134, 36,201,205, 53, 36,199, 75, -156, 22, 22, 22,251, 35, 35, 35,237,117, 58, 29, 82, 82, 82, 26, 52,105,210, 4, 28,199, 33, 49, 49, 17, 27, 55,110, 52,158, 57, -115,102,171, 84, 42,157, 91, 77, 13,241, 5, 78,131,193,176,111,247,238,221,243, 63,249,228, 19,105, 70, 70, 6, 30, 61,122, 4, -181, 90, 13,154,166, 17, 22, 22,166, 53, 24, 12,251,205,200, 87, 47,133,211, 36,176,236,237,237,221,219,183,111,111, 26, 69,232, -206,178, 44,236,236,236, 60, 2, 2, 2, 66, 1,192,198,198,166,170, 81,132, 85,222,207,212,212,212,107, 87,175,222,192,238,157, - 27, 64,211, 58,168, 82, 75,156,134,172,236,124,212, 32,174, 42,114,114, 90,173,246,237,239, 54,110,188, 59,109,194,251,174, 93, -123,246, 66,114, 84, 36,244, 57,153, 32, 25, 35,132,156, 0,197, 25, 50,164,167, 23, 97,245,153,139, 25, 26,173,182, 50,209, 90, -105, 56,203,154, 5,173,173, 32,145,203, 33, 46,117,173, 76,199,196,114, 43, 8, 45,229,160, 68,162,202,154,188, 94,226, 44, 46, - 46,126,103,234,212,169, 81,103,206,156,177, 27, 59,118, 44,134, 14, 29, 26,158,151,151,215, 35, 55, 55,183,208,204,103,255, 37, - 78,146, 36, 51, 6, 14, 28,232,172,215,235,141,163, 71,143, 22,100,101,101,193, 52,196,190,176,176, 16,127,254,249, 39,154, 54, - 45, 89,117, 38, 58, 58, 26,205,155, 55,175,146,115,202,220, 7,169, 0, 86,124, 62,210,253,219,187,145,105,179, 0,172,105,208, -200, 3,151,207, 93,196,141,203,183,231,117,104,201,110, 26,244, 94,187,229,210,158,239,126,217,220,127, 50, 37,183, 86, 96,207, -209, 35,212,195,176,159, 86,105,213, 15,188,177,237,232,151, 85,133,147, 32,136,146,149,234,203,137, 43,129, 64,128,226,226, 98, -115,197, 85,213,207, 38, 1,174,160, 69,238,162,137,179, 71,117,188,180,255,158,149,165,165,101, 89,159,159,134, 13, 27, 66, 32, - 20,224,231, 99,155,213,121,121, 89,139,205,225,180,180,180,252,164, 71,143, 30,136,139,139, 67, 84, 84,212, 17,149, 74, 21,197, -113,220,145,248,248,248,209,237,218,181,195,129, 3, 7, 62,169, 70, 96, 85,202,105,154,177,190,212,237,205, 1, 0,149, 74, 21, - 9,160,195,179,103,207,106, 21,247,210,201, 66, 59,151,222,215,228, 17, 35, 70, 88, 27,141, 70,148,138,103,135, 90,230, 37, 86, -165, 82,125, 31, 28, 28, 28,228,235,235,139, 49, 99,198,244, 9, 13, 13,237,211,166, 77, 27,120,123,123, 35, 55, 55, 23, 87,175, - 94,253,141,101,217,143, 85, 42,149, 22, 0, 87,141, 0,172, 52,238, 33, 33, 33, 79, 1,140,247,243,243,123, 87, 32, 16,192,218, -218,154, 74, 77, 77,165,206,159, 63, 15, 0, 83, 15, 31, 62,204,212, 41,221,235,142,191,156,147, 32,136,133, 19, 38, 76,216,254, -209, 71, 31, 73,219,181,107,135,252,252,252, 50,209,127,230,204, 25,148,142,196,134,131,131, 3,158, 62,125,138, 99,199,142,233, -243,243,243, 55,138, 68,162, 53,213,113,142, 31, 63,254, 5, 78,147,120, 59,125,250, 52, 76,131, 72, 28, 28, 28,240,228,201, 19, - 28, 61,122, 84,155,159,159,191, 65,175,215,175,253,139,227,254,255, 75, 96,229,228,228,124, 58,127,254,252, 30, 31,126,248,161, -131, 70,163,161, 28, 29, 29,161, 84, 42,141,231,206,157,203, 41, 44, 44,252,180, 54, 23,187,115,231,206,140, 65,131, 6,109,252, -229,151, 95,118,236,216,177, 35,112,204,152, 49, 24, 63,112, 32,166,119,180,132, 78,167, 3, 65, 16, 56,119,238,220,227, 43, 87, -174, 52, 16,137, 68,186,165, 75,151,178, 0,238,214,196,155,253,224,212, 19,170,229,240,192, 77,155,127, 56,236,215,182,131,231, - 91, 94,111, 73, 58,215,179, 1,109, 96,144,158,145,141,107,183, 31,234,158, 60,140, 76,102,105,253,168,204,152,154,103,113, 7, -128,152, 24,208, 64,225,167, 62, 62, 86,203,214,110,251,125,219,175,135,142,140,152, 50,230,109,129,127,171, 30, 72, 72, 59,129, -235,161, 87,140,185,133,220,177, 66, 61, 53, 45, 38,166, 48,183,182, 55, 62, 53, 53, 85, 43, 21,114,249, 90,173,214, 62, 33, 33, - 1,233, 42,101, 65,106,170, 82, 91,151,102, 55,157, 78,135,184,184, 56, 92,188,120, 17,225,225,225,184,117,235, 22,125,254,252, -249, 95, 72,146, 92, 85,205, 68,147,149, 63,217, 45, 91,126,243,211, 79, 63,141,100, 24,198,187,123,247,238, 82,123,123,123,100, -101,101, 33, 56, 56, 88, 31, 17, 17, 17,215,178,101,203,181,117,205,108,174,174,174, 24, 53,106,148,179,191,191,191,179,105,196, - 96,189,122,245,240,206, 59,239, 56,183,105,211,166,108, 95,253,250,245, 81,155,169, 26,220,221,221, 3,187,119,239,138,137,147, - 63,135, 70, 83,132,187,183, 79, 35, 47, 39, 11,119, 66, 98,161,163, 17, 88,155,225,240,165,163, 55, 59,172,220,184,233,104,255, -246, 1, 62, 77,220, 92, 37, 14, 94,111,193,210,201, 21, 57,217,217,184, 27,249,204,176,229,194,181, 7, 26,173,246,109,115, 71, -122,178, 44, 91, 54,202,173,249,172,121, 32, 73,178,108, 21, 4,211,113,235,182, 93, 64, 10,132, 96, 56,128,166,233, 26,221, 59, -149, 74,149, 66, 16,196, 59, 51,103,206,188,180,123,247,110,178,123,247,238,190, 39, 79,158,124,165, 69,115, 83, 83, 83, 61, 74, - 93,209, 2,107,107,107,193, 7, 31,124, 0,131,193,128,226,226, 98, 20, 20, 20, 32, 59, 59, 91,247,217,103,159, 73, 0, 64, 36, - 18, 25,250,247,239, 95,227,251,227,187,195,169,218,207, 71,186,111,114, 20, 38,140,206,207,140,106,224, 40, 76,136,239,208,146, -221,244,221,225, 84,173,179,109,241,202,212,204,171,177,202,162,115, 63,238, 57,122,132,154, 48,226, 29, 70, 33,127, 50,207,177, - 30, 14,153,245,242,170, 32,176,234,234, 92,189,244, 62,137, 70,120,138,101, 92, 80,143, 81,237, 22,172,156,179, 94,238,232,228, - 8,163,209,136,248,164, 56,252,114,116,139,186, 80,151,187, 42, 39, 6,161,230,112, 53,104,208,192,139,162, 40,156, 56,113, 2, - 0, 76, 83, 27,108,249,243,207, 63, 71,191,247,222,123,168, 95,191,126,115,150,101, 37,213, 77,163, 81,153,123,103, 48, 24,106, -221,140, 94, 99,219, 12, 65,196, 69, 70, 70,186,187,187,187, 19,251,247,239, 47,162,105,122,105, 29,158,241,245,127,252,241, 71, - 87,142,227,250,251,249,249,193,211,211, 19, 0,240,240,225, 67,220,184,113, 99, 95,106,106,234, 68,188,158,197,157, 57,130, 32, - 80, 80, 80, 96,154,215,132,150,203,229,111,228,162,209, 74,165,242, 87,163,209,120,110,233,210,165, 95, 55,108,216,240,227,169, - 83,167, 82, 77,154, 52, 65,126,126, 62,172,173,173,161, 80, 40,144,154,154,138, 95,127,253,149,201,200,200,248,133, 36,201,101, - 42,149, 74, 89, 87, 78, 59, 59, 59, 40, 20, 10,164,164,164,152, 56,119, 24, 12,134,229, 89, 89, 89,233,224, 81,187,103,202,156, -147, 74,167,105,248,158, 97,152, 30, 38, 87, 43, 39, 39,231,211,244,146, 30,227,117, 82,247,131, 6, 13,106,152,149,149,181,131, -166,233,192,161, 67,135, 98,204,152, 49, 24, 50,100, 8,198,140, 25, 67,153, 92,171,147, 39, 79, 62,170, 85,141,161,116,177,103, -146, 18, 13,230, 56,174, 53, 0,130, 32, 73,115, 22,123,174, 81,137,251,250, 88,121,203, 36,236, 78,153,152,237,162,209,147, 55, - 53, 58,114, 74, 68, 76, 97,220,171,212,108, 74, 23,118,222, 11, 0, 58, 3,247,126, 74,138,234, 66,109,239,103,105, 19,225,126, -130, 32, 40,142,227, 54,115, 28,183, 95,161, 80,196,153, 99,187, 87,228,228, 56,142, 4, 74, 38, 23,189,120,241,226,215, 4, 65, -188,175,211,233,156, 36, 18, 73, 38,199,113,191,245,238,221,123,249,166, 77,155, 12,213,188,160,217,170,194,233,225,225,241,187, -155,155, 91,227,210,235,188,208,231,202,244,109,218, 95, 58, 31,209,179,212,212,212,247,204,189,159,222, 13,220,207,121,123,185, -247,245,246,114, 3, 0,196, 37, 40, 17,151,144,122, 62, 46, 62,181, 95, 29,211,168,108,177,103,162,116, 42, 6,206,188,197,158, - 95,224,108,222,188,121, 40, 69, 81, 30,181,121, 40, 89,150, 85, 70, 71, 71,251,153, 19, 78,133, 66, 49,182, 94,189,122,107,148, - 74,229,209,148,148,148,207, 95, 71,205, 91,161, 80,116, 34, 73,242, 12,203,178,178,138, 14,151, 73,132, 85,209,201,189, 74,206, -111, 22,180, 88,220, 57,176,235,136, 91,215,110, 28,155,187, 58,122, 69,249, 99, 51,134,219, 77,122,111,198,167,107,127,223,250, -253, 87, 91,143,231,254, 82, 83, 56, 91,181,106,117, 21, 64, 99,147,155, 85, 29, 24,134, 81, 70, 71, 71,183,173,139,235, 96,223, - 10, 1,182,150,142, 43,244, 52,221,134, 36,192, 9, 69,162,200,188,188,172,197, 85,136,171, 74, 57,221,221,221,215, 52,106,212, -232,211,103,207,158,237, 75, 73, 73,249,176,220, 61,254,246,173,183,222,154,145,156,156,188, 37, 37, 37,229, 75,115,211,200,203, -203,203,186, 77,155, 54,185,203,150, 45, 35,151, 44, 89,130,224,224, 96,251,212,212,212,220,215,145,238,245,235,215,119,149, 74, -165,123, 88,150,245,102, 24,102,107,124,124,252,250,186,112,250,248,248,136,242,242,242, 62,173, 87,175,222,108, 23, 23, 23,151, -244,244,244,196,164,164,164,160,180,180,180,159,106, 33,174,106, 76, 35, 63, 63, 63, 29, 80,178,156,152,153,253,173,254,147, 14, - 86,133,252,228,205,178,236,170, 54,109,218,140,156, 52,105, 18, 17, 19, 19,131, 11, 23, 46,224,249,243,231,199, 74,251,243, 61, -121, 29,156,231,206,157,227, 18, 19, 19, 15,145, 36,185, 40, 53, 53, 53,238,111,140,251,191, 30,175,187, 98,243,170, 25,165, 90, - 12, 26, 52,168, 97,187,118,237,174,182,106,213,138,109,213,170, 85,225,235,224,252, 43,194,249, 63, 13,231,104,249,186, 57,255, -138,112,214,133,147,227, 56,242, 85, 62,255,134,184, 55,106,212,136,131,249,235,175,253,231,210,232,191,202,185,109,101, 43,183, -123, 23,223,253,110,231, 55, 45, 95, 90,188,124,233, 76, 59,171, 75, 39,222, 94,187,116,166,157,213, 27,122, 63,201, 58, 86,112, - 91, 86, 94, 49,171,183,125,248,240,225, 76,189,122,245,118,252,203,227, 78,120,122,122, 74,248,231,232,245,115,186,184,184,180, - 85, 40, 20,167, 20, 10,197, 41,119,119,247,118,175,153,243,184,171,171,171,223, 63, 20,247,255,132,192, 50,247,243,143, 11, 44, - 19,134, 12, 25,226, 60,124,248,112,123,254,193,227, 57,121, 78,158,147,231,172,158, 83,161, 80,200,248,251,201,115,190,129,156, -111,148,192, 18,252, 91, 2,125,234,212,169, 12,240,224,193,131, 7,143, 26, 81,155,169, 29,120,240,224,241,207,128,168, 70,133, -214,166,109,181, 46, 74,246, 1,207,201,115,242,156, 60, 39,207,201,115,242,156,255,239, 56,107,226,254,215,246,237,250, 79,245, -193,226, 57,121, 78,158,147,231,228, 57,121, 78,158,147,231,252, 47,160, 54, 77,132, 36,120,240,248,139,177,105, 50,220, 55, 77, -134,251, 95,117, 62, 15, 30, 60,120,240,224,241,111,131,224, 77,139,144,191,191,127,115,142,227,222, 35, 8, 98,100,169,218, 60, - 76, 16,196,239, 97, 97, 97,102,205, 64, 43,149, 74,211,180, 90,173,115,233,239, 12,173, 86,171, 40,119,152, 40,247, 1, 74, 70, -171,149,255, 84, 10, 47, 47,175, 52,157, 78,103,206,250,122, 17, 4, 65,132,179, 44, 27, 38,151,203,111, 62,125,250, 52,214,220, -120,247,238,221,251, 99, 75, 75,203,197, 26,141,102,237,249,243,231,191,255, 27,110,117,251,122,110,174,187, 12, 70,154, 77,203, -200, 89, 8,224, 68,101, 39,109,157,132, 32,130,195,151,165,191,215,205,248, 5,243,171, 35,173,237,249,213,160,173, 80, 40,252, -196,197,197,101, 64, 74, 74, 74, 40,128,175,192,207, 66,204,131, 7, 15, 30, 60,254,141, 2,171,131,159,125, 19,130,165,191, 20, - 82, 92, 87, 3, 67,220,224, 72,209,186,187,225, 57,177,175, 18, 0,133, 66, 81,143, 32,136,238, 28,199,249,144, 36,121,159,101, -217,243, 42,149, 42,187, 54, 28,126,126,126,245, 0,140, 1, 48,182,125,251,246, 45,167, 77,155,134, 70,141, 26, 65,171,213, 34, - 56, 56,120,222,222,189,123,231,113, 28,247, 0, 37, 75,202,236, 15, 15, 15, 79,174,138, 75,171,213, 58,155,218, 88, 9,130,112, - 30, 57,114,100,112,185, 69,120, 9,211,226,178, 28,199,221, 5,112,135, 32,136,219, 7, 14, 28, 72,105,226, 36,237,240, 86, 61, -167, 65,103,195,146, 22, 86,228,212,233,116,206, 17,167,142,129, 51, 50, 40, 74, 77, 66,195,183,199,148, 29,187,240,118, 47,112, -234, 2, 8, 37,162,136, 30, 39,111,135, 3, 8, 75, 74, 74, 10,247,244,244,140,173,142,179, 34,124,125,125,151, 47, 93,186,212, -113,232,208,161,159, 0,168, 82, 96,213,134,179, 26, 72, 58,180,109,125,229,212,145,253, 82, 16, 36,134,143, 24,185,239, 86,216, -131,241, 0, 94, 88, 0,122,235, 68,184, 16, 4,190,156,246,217, 52, 10, 0,126,216,184,237,171,239,198, 97,211,231,123,145,230, -230,230,214,131,227,184,175, 74,239,243, 90,165, 82,121,101,235, 68,184, 0,152, 59,237,179,105, 4, 0,108,219,184,237,203,173, - 19,241,253,140,221,168,237, 4,119,211, 39, 78,156,184,105,213,170, 85, 84,233, 36,124,253,155, 55,111,222,164,160,160,160, 57, - 0,190,115, 48, 15, 30, 60,120,240,248,231, 5, 86,139, 22,214,182, 50,146,155, 45, 19,115, 99,186,119,106,228, 53,100, 64, 39, -162, 65,195, 6,136,141,137,245,190,114, 45,228, 3, 9,245, 48, 65,163, 39,246,107, 88, 98, 67,116,116,245,235,135, 45,154, 12, -131,209, 88,114, 77,129, 0,204,158,243, 30,199,122,244,232,225, 53,105,210, 36,248,249,249, 33, 52, 52,180,199,161, 67,135, 62, -253,227,143, 63, 66, 12, 6,195, 25,137, 68,114,181,166, 25,142,253,252,252,214,184,187,187,127, 53,103,206, 28,162,109,219,182, -144, 72,254, 55,237,138, 92, 46, 71,175, 94,189,208,171, 87, 47,164,165,165,181,188,122,245,106,203,223,127,255, 61,200,207,207, -111,109,120,120,248, 60,115,110,208,226,197,139,253, 43,217,125,142, 32,136,103, 36, 73,134,249,248,248,164, 52,116,181,108,234, -104,111,123,250,155, 85,203,112,182,239,196, 42,133,203,241,126,157, 0,224, 5,129, 69,103,165, 67,106, 37,143, 16,201,100,225, - 0,194, 0,132,123,122,122, 70,152,203, 9, 0,129,129,129,146,199,143, 31, 19, 28,199,161, 93,187,118,246, 4, 65,196,146, 36, -249,253,217,179,103,183,149, 63,175, 54,156, 53,185, 87, 75,191,156, 33,202,138,139,192,163,219,231, 49,204,223, 93, 26, 30,253, -120,165, 86,111, 56, 82,221,159, 8,130, 36,119,135, 58,206, 3, 50, 62,101, 89,118,113, 76, 76, 76, 32, 0,248,248,248,136, 1, - 92,217, 19,108, 55,112, 98,167,252, 87, 89,228, 83, 68, 81,212,214, 95,126,249,101,242,248,241,227,145,152,152,136,155, 55,111, - 66, 46,151, 99,249,242,229,111,205,153, 51, 39,200,104, 52,126,202, 63,246, 60,120,240,224,193,227, 31, 21, 88, 93,252, 44,130, -123,116,124,203,127,104,191, 78,100, 35,159,230, 16, 73, 44,202,142,181,242,243, 67, 43, 63, 63, 98,234,212,194, 6,145,225,145, -139,206, 94,186,183,192, 70,100, 12,187, 25, 94, 92,229,164,103, 70, 35, 4, 65,171,126, 7, 0,236,217,249, 30, 21, 27, 27,235, - 37,147,201,202, 11, 5, 4, 6, 6,146, 65, 65, 65,237,175, 92,185,210,126,255,254,253,180,193, 96,216,168, 84, 42,171, 91, 58, -227,171, 67,135, 14, 17, 20, 69,129,162,168, 42, 79,114,117,117, 69,159, 62,125,224,234,234, 74,124,249,229,151, 95, 1,168, 84, - 96, 73,165,210, 12,130, 32,156, 1,192,206,206,142, 89,186,116,105, 36, 87, 10, 0, 96, 89,246, 46, 69, 81,119, 8,130,184,123, -236,216,177, 84,111, 55,169,187, 92, 36, 57,191, 99,251,102, 24, 10,210,171,156,199,171, 88,153, 98, 82, 25, 47,236, 23, 91, 90, - 68,136, 45, 45,195,197,114,121, 24,128,112,130, 32, 34,204,229, 52,137, 43,153, 76,118,125,251,246,237,118, 0, 48,115,230, 76, -219,226,226, 98,219, 41, 83,166,204, 3, 80, 38,176,106,195, 89, 13,108,187,118,108,251,252,157, 33,253,173,253,218,119,193,221, -195, 63, 32, 47, 79, 13,117, 97, 49, 88,150,125,105,229,223, 25,187,145,190,117, 18,214,253,240,221,182,185, 4, 73, 18,109,250, -125,133,126,246,220,172,172,223,126,139, 6, 32, 20,139,197,165,183,132, 16,184,187,187,187, 89,185, 53, 89,215,168, 75, 83,108, -251,126, 43, 56,150,229, 0,172,171,133,123,229,108,101,101,117,226,252,249,243,237, 3, 2, 2,112,247,238, 93,196,197,197, 97, -198,140, 25,250, 25, 51,102,136, 38, 76,152, 64,204,158, 61,123,230,218,181,107, 15, 3,184,197, 63,250, 60,120,240,224,193,227, - 31, 19, 88, 82, 17, 19,176,116, 83, 36, 24,245, 51,112,134, 36,112,116,218, 75,231, 88,216,214, 67,179, 54, 46,176, 16, 59,145, -247, 99,190, 11,168,112,184,218,161,150, 38,113,117,120,189, 91, 11,141, 90, 37, 2, 0,153,165,130,126,103,118,106,116, 64, 64, - 0,156,156,156, 68,183,111,223,158, 13,188,176, 54, 89, 69, 78, 66, 31, 21,138, 71, 67, 58,163,225,163, 28, 88, 88, 88,192, 84, -112,155, 16, 27, 27,139,235,215,175, 35, 49, 49, 17,222,222,222,192,203, 51, 40,151,113,106,181, 90,215,126,253,250, 93, 93,187, -118,109,183, 53,107,214,220,223,183,111, 95,119, 0,197,149,186,123,245,172,109, 89, 35,119,126,231,182,239,132,208,171,237, 31, -135,220,170, 50,238, 94, 67,222,193,180,188,146,166,199,131,205,221, 32,181,150, 67, 34,183,138,232,115, 46,164,204,185, 34, 8, - 34,194, 92,206, 30, 61,122,124, 32, 16, 8, 22,210, 52,109,243,227,143, 63,218,218,218,218,146, 39, 78,156,160,183,111,223, 94, - 40, 18,137,244, 4, 65,172,174, 75, 56,171,131,144,162, 86,124,187,244, 75,107, 11,210,136,240, 51,191, 33, 37, 49, 9, 81, 79, - 83, 13, 7,110, 60,100,244, 6,102, 82,101,156, 51,126,193,252,217,195,197,187, 66, 85,222,167, 6, 47,153,209,120,229, 80, 23, -208, 52,189, 51, 51, 51, 19, 83,166, 76, 1,203,178,232,210,165, 75,103,142,227, 82,103,205,154, 5,111,111,111,236, 60,249,164, - 88, 80,112,175,251,239,151, 11, 67,205, 12,103, 75, 79, 79,207,243, 87,174, 92,113,113,119,119,199,213,171, 87,145,150,150, 6, -133, 66,129, 25, 51,102,136,215,172, 89,179,167,160,160, 96,212,170, 85,171,164, 15, 30, 60,216,127,238,220,185,122, 40,233, 51, -247, 87, 12, 5,230, 57,121, 78,158,147,231,228, 57, 95, 51, 56,142, 11, 0,224, 4, 32,147, 32,136,144,242,219,165,167, 56,149, -126, 87,220,206, 42, 45,243,203, 47, 94,158, 85, 90, 6, 56, 1, 96, 0, 4, 19, 4,145,251,186,195,108, 18, 88,129, 0,174, 2, - 88, 6, 96,105,197,147,232,212,171, 16,191,245, 54, 32,109, 1, 78,255, 12,172, 62, 21,156,208, 25,234, 98, 41,178,158, 39,226, -209,221,195,224,140,197, 53, 95, 76, 0,227,230,141,239, 9,172, 44, 0,145,196,137, 46, 44, 44,132,165,165, 37, 52,106,149,104, -194,148, 50,103, 75,116,229,202, 21,132,133,133,193,205,205,173, 70, 17, 8, 0,156,190,164, 21, 81,175,215, 67,175,215, 35,109, - 96, 59, 88,118,232,134,220,247,103,224,226,197,139,200,204,204,132, 72, 36,130, 72, 36,130,209,104,172, 49,156,100,233, 74,188, - 38,211,170,178,115,220,221, 33,101, 12,134,211,155, 55,172,182,182,150, 91,184,132,158, 63,142,196,196, 52,179,110,186,216,210, - 2, 98,153, 69,132,216, 82,246,130,184,170, 13, 39, 69, 81,203,143, 28, 57,226,174,211,233, 32, 18,137,112,248,240, 97,122,247, -238,221,209,106,181,186,107,120,120,184,230,117,132,179, 34, 28,156,156,254,120,123,220, 71, 51, 86,126,216, 7, 26,181, 22,199, -110, 60,196,165,251, 9, 67, 1,220, 4,160,174,234,127, 27,142,235,159,186,185,229,247,154, 50,101, 74,196,209,163, 71, 29,191, -253,246, 91, 48, 12, 3,163,209, 8,163,209, 88,246,155, 97, 24,236,219,183, 15, 55,239, 61,156,165, 82, 21,134,154, 25, 44, 55, - 47, 47,175,139,247,238,221,115,178,176,176,192,133, 11, 23,144,151,151,135,233,211,167,151, 57, 87,121,121,121, 99,182,109,219, -246,206,243,231,207,191,189,113,227, 70, 54, 0, 10,128, 17, 60,120,240,224,193,227,223,132,234,180,136, 19, 65, 16,167, 57,142, - 27,204,113, 92,111, 0, 98,211, 54, 0, 16, 4,113,186,180,220,126, 97,123,222,188,121, 11,130,130,130,162, 77,219,166,115,230, -207,159,223, 98,205,154, 53,171, 59,118,236,184,255,246,237,219,241, 0,254, 50,129,117, 21,213,172,139,165,123,182, 23,186,248, - 3, 16, 41,122, 64,220, 96, 52,132,142, 29,145,252,248, 42, 34, 46,110, 64,202,147,155,224, 88, 6, 46,245,154,213,120,177,149, - 63, 65,168, 80, 40,194,148, 74, 37,194,195,195,241,236,217, 51, 72,165, 47,181, 44,225,210,165, 75, 0, 0, 23, 23, 23,243, 4, - 75, 64,103,212,139, 84, 33,185, 77,201,128,191,122,145, 42, 0,192,234,249,243, 33, 22,139, 33, 18,137,202,206,101, 24,166, 70, - 62,162,180, 87,123,105,179, 96,101,163, 3, 9,169,209,234,208,146,121,159,120,122,121, 55,114,187,247,199, 65,196,199,167, 34, - 61,221,188,244,145,200, 45, 35, 36, 86,150,225, 98,217,255,154, 5,235,192,121,112,212,168, 81, 31,140, 24, 49, 66,214,161, 67, - 7,201,207, 63,255,156, 87, 81, 92,189,106, 56,203,195,213,213,181,223,160, 65,131,254,152, 58,117, 42,134,245,239,141,247,186, -248,112, 41, 25,249, 26, 0, 23, 74,107, 0,213, 66,169, 84,166, 2,232,243,246,219,111,239,109,209,162,133, 15,199,113,104,214, -172, 25,134, 13, 27,134, 35, 71,142,224,225,195,135, 40, 44, 44,164,111,220,184,177, 81,165, 82,253, 98,102,176, 44,236,236,236, -206, 94,190,124,217,201,194,194, 2,231,207,159, 71,113,113,241, 75,206,213,234,213,171,165, 9, 9, 9, 91,206,157, 59,247, 22, - 74,214,133,227,197, 21, 15, 30, 60,120,252,251, 80,173, 22, 49, 9, 39,142,227, 6,151, 23, 76, 21,133,150,233,183,233,188,160, -160,160,193,229,197, 23, 0,172, 89,179,102,117,185,237,226,191, 34, 50, 38,129,213,189, 84, 72,116, 7,112,173,130, 45, 87,242, -131, 53,130, 78,189, 0, 58,245, 2, 44,218, 44,196,137, 77,239,191, 64,100,142, 51, 84, 25,180, 90, 45,132, 98, 7,122,207,206, -247, 68, 0,192,112,150,244, 75,215,174,217, 58, 52,251,122,230,132,147, 32, 8,178, 28,239, 75,226,193,195,195, 99,125,199,206, -237,187, 52,106,213,206,226,222,217,163,120,250, 36, 17, 89, 89,249, 0, 7,109, 85,156, 23, 70, 15,128, 58, 46, 22, 50,107,235, -136,126,151, 35, 95,112,174,234,194,121,241,226,197, 47, 58,116,232,176,248,240,225,195, 74,111,111,111,137, 64, 32,160, 43,136, -171, 58,133,179, 60, 20, 10, 69,103,129, 64,112,158, 36, 73, 89,143, 30, 61, 48,107,214, 44,124,255,253,247, 70, 86, 40, 29,188, -237,108,232,168, 34, 29,189,208, 28,113, 85, 78,100, 69, 41,149,202,230,177,177,177, 18,163,209,216, 99,200,144, 33,103, 6, 14, - 28,136, 59,119,238,224,226,197,139,141,105,154, 86,149, 94,119, 57, 0, 23,146, 36,215, 86,179,146, 59, 41, 18,137,246, 95,188, -120,177,133,155,155, 27, 46, 92,184,128,226,226,226, 50,231,106,226,196,137, 47, 56, 87,183,111,223,206,230,197, 21, 15, 30, 60, -120,252,171, 81,165, 22, 41,239, 62, 85, 38,178,204, 65, 57,241,165,153, 55,111,222, 2,130, 32, 78,151, 58, 92, 26, 0,202,191, - 74, 96, 93, 43, 85,141, 28,106, 94,225, 29, 76, 97,252, 75,251, 88,182,238,229, 86,227,222,231,162,101, 50, 25,182,109,219, 6, - 11, 11,139, 90, 11, 39,245,153,163, 72,158, 49,174,204,185, 50, 57, 89,232, 55,161,174, 2,203,228, 96,221, 69,133, 38, 66,119, -119,247, 79, 90,181,106,245,225,142,221,123,173,214, 44,254, 42,191,224, 81,180, 64, 91,172,179,212, 25,140,244,179,244,172, 42, -167, 71, 48, 22,228, 65, 98,105, 25, 33,180,144,189, 36,174,234,202,121,247,238, 93,109,207,158, 61,119,173, 94,189,186, 3,203, -178,187, 95, 71, 56,203,139, 43, 7, 7,135,115, 91,182,108,145,201,100, 50,232,116, 58,172, 93,187, 22,151, 46, 93, 26,156,150, -150,118, 14,192,185,186,166, 55, 77,211,147,123,247,238,253,221, 23, 95,124, 1,131,193,128,209,163, 71,227,249,243,231,231,159, - 62,125,250,189,135,135,199, 23,211,167, 79,119,115,116,116,196,180,105,211, 68, 0, 38, 86, 65,243,205,239,191,255, 62,184, 77, -155, 54,184,118,237, 26,242,243,243,161, 80, 40,240,201, 39,159,136,131,130,130,246, 20, 22, 22,142, 10, 10, 10,226,157, 43, 30, - 60,120,240,248,239,192, 44, 45, 82,222,137,170, 13,202,253, 79, 24, 20, 20, 20, 29, 20, 20,244,130,195,245, 87, 9, 44,174,156, -122,172,209, 29, 98, 53, 47,247,225, 97, 25, 99,109, 34,105,214,121,230, 52,231, 1,255,235,131, 85,137, 80,122,105,187, 22,125, -176,206,113, 28,119,187,188,192,114,119,119, 31,238,234,234,250,205,239,191,255, 46, 83, 42,149,240,104,210,210,230,143, 35, 7, -116, 46,150, 18,109, 74, 78,206,132, 40,165,250,112, 85,156,172, 86, 29, 33,181,148,135, 75, 45,228, 21,197, 85,157, 57, 1,224, -242,229,203,115, 42,238,123, 85, 78,133, 66,209,217,209,209,241,220,150, 45, 91, 44,148, 74, 37, 68, 34, 17,228,114, 57, 46, 95, -190,140, 82,113, 85,103,184,187,187, 47,157, 49, 99,198,146,137, 19, 39, 34, 55, 55, 23, 23, 47, 94, 68,143, 30, 61,176,101,203, - 22,207,203,151, 47,127,215,169, 83, 39, 80, 20,133, 11, 23, 46,192, 96, 48, 60,169,130,102,196,212,169, 83,191,120,231,157,119, - 16, 28, 28, 12,149, 74,133,105,211,166,233, 63,249,228,147,178, 62, 87, 63,252,240,195, 59, 9, 9, 9,188,115,197,131, 7, 15, - 30,255, 29, 84,169, 69, 42,148,229,127,112, 28, 55,168,162,171, 85, 81,124,153, 28,170,242,219, 21,207, 47, 61,174,253, 43, 34, - 99, 18, 88, 85,187, 86, 28, 3,202,190, 53,152,156,168,114, 2, 75,245,194, 41, 34,137, 28,140, 25,194,101,209,100, 24,156,108, - 85,130, 95,151,147, 16,138, 29,232,198,189,207, 69, 87,117,174, 92, 46, 7,203,178,102,233, 48,209,192,119,168,134,253,134, 35, -174,149, 43, 56, 3, 93,230,100, 97,193,130, 23,196,149, 72, 36,130, 94,175, 7,106,110,214, 10, 38, 8,226, 57, 69, 81,119, 0, -112,129,129,129, 59, 13, 6,195,240,220,220, 92,187, 41, 83,166,208, 89, 89, 89, 56,118,236, 24,118,237,218,165, 41,162, 5,161, -185,217,134,247,227, 85,234,148,106,248, 34, 6, 93,139,126,193,185,122, 13,156, 47,225,117,112, 42, 20,138,206,206,206,206,101, -226, 74, 34,145, 64, 46,151, 35, 53, 53, 21, 2,129,224,149, 38,233,244,244,244,148,248,251,251,207,157, 48, 97, 2, 30, 61,122, -132,121,243,230,169,148, 74,229,209, 19, 39, 78, 76,155, 61,123,182, 32, 48, 48, 16, 25, 25, 25,216,190,125,187, 33, 56, 56,120, -117, 90, 90,218,186, 74, 51,173, 64, 48,121,197,138, 21,156, 82,169, 36,226,226,226, 94,112,174, 10, 10, 10, 70, 5, 5, 5, 73, -227,227,227,121,231,138, 7, 15, 30, 60,254, 91,168,174, 5, 45,171, 84, 60,165, 87,178, 77,149, 19, 86, 21,183, 51, 42,108, 3, -128,190,194,241,200,191, 82, 96, 85, 10, 3, 67,230,255,190,229, 35,155,161, 35,167, 67,234,218, 13,250,132,131, 96, 53,233,101, - 2, 75, 36,181,130,181, 99,125, 20, 20,105,112, 43, 38, 30, 6,134,204,175,142,207,104,132, 96,230,103,255, 27, 45,104,107,107, -139,252,252,252, 23, 28, 45, 11, 11, 11,184,185,185,161,160,160, 0,135, 15, 31, 6,199,113,183,106,112,195, 86, 76,152, 48,225, -235,233,211,167,147, 13,199, 78, 66,209,221, 27, 47,185, 86, 82,169, 20, 50,153, 12,169,169,169,120,252,248, 49,203,113,220,138, - 26,212,241, 61,146, 36, 35, 14, 28, 56,144, 18, 24, 24, 56,209,206,206,110,236,164, 73,147,100,193,193,193, 88,177, 98,133,224, -194,133, 11,116, 72, 72,136,145, 97,152, 57, 74,165,114,123,141, 57,134, 32, 42,138,171, 87,230,172, 68, 92,189, 50,167, 66,161, -232,228,230,230,118,238,251,239,191,183, 72, 75, 75,131, 68, 34,129,149,149, 21,146,146,146,176, 98,197, 10,181,209,104,236,255, -138,249, 77, 98,105,105, 41, 49, 24, 12,216,189,123, 55, 82, 83, 83, 59,166,165,165, 37,177, 44,187,253,227,143, 63,222,228,227, -227,211,236,241,227,199, 79,138,138,138,102,164,167,167, 63,170,138,196,214,214,182,163,147,147, 19,113,231,206, 29, 76,155, 54, - 77, 63,115,230,204,178, 62, 87,188,115,197,131, 7, 15, 30,111,160,242, 34,136,224,234,182,255,141,168,118,177,231,204, 98,141, -243,246, 61, 71, 55,141,126,183,151,246,220,229,203,128,231, 4, 8,221,251, 1,148, 20,110,141, 59,195,233,173, 14,136,124,154, -134, 99, 55,162,181,177,169,250, 77,153,197,154,138,235,237, 85,187,218,118,126,126, 62,222,122,235, 45, 60,187, 60,176, 69,200, -161,102,126,126,246,155,253,234, 97,125,139,203,151, 47, 99,253,250,245, 69,177,177,177, 27, 26, 55,110,252, 69,117,156, 17, 17, - 17,203,146,147,147,125,231,207,159,127,118, 97, 74, 1,114,151,111, 69,193,103, 19,144,214,171, 21, 44, 44, 44,224,232,232, 8, -181, 90,141,235,215,175, 35, 50, 50,242,172, 86,171,245,141,136,136, 88, 86, 29, 39,199,113,119,125,124,124,226,218,181,107,103, -149,159,159,255,253,132, 9, 19,100,106,181, 26, 89, 89, 89,200,206,206,198,189,123,247, 46,232,245,250, 22, 53,136,150, 50, 78, -150,101,203,196,213,235,226, 44,143,215,197,105,105,105,249,229,177, 99,199, 44, 72,146,132, 68, 34,129,141,141, 13,146,147,147, -177,124,249,114,181, 70,163,233,175, 82,169,204,157,160,179,202,116,103, 89, 22, 70,163, 17, 28,199, 65, 44, 22, 23, 0, 64,122, -122,250,163,248,248,248, 94,167, 78,157, 82, 60,123,246,172,123, 21,226,170,140, 51, 43, 43,235,234,243,231,207, 97,105,105,137, -153, 51,103,138, 87,175, 94,253,235,247,223,127,175, 13, 10, 10, 18,245,238,221,123,203,185,115,231,154,106, 52,154,110,102,136, -171,255,207,171,214,243,156, 60, 39,207,201,115,254,219, 56,223, 40, 84,235, 96,197,196,128, 6, 10, 63,245,241,177, 90,182,118, -219,239,219,126, 61,116,100,196,148, 49,111, 11,252, 91,245, 64, 66,218, 9, 92, 15,189, 98,204, 45,228,142, 21,234,169,105, 49, - 49,133, 53,142,253, 23, 8, 96,156,191,240, 61, 1, 0, 8,133, 48, 46, 24, 60,248,106,139, 22, 45,186, 12,109,147, 33,154, 54, -179,196,217,218,182,249, 61,209,213,171, 87, 15, 73, 36,146, 31, 19, 18, 18, 10, 82, 83, 83,107,140, 68,100,100,228,125, 0, 3, - 40,138,234,246,197, 23, 95,124, 51,208,203,163,221,136,142,221, 33, 20, 10, 17, 18, 18,130,156,156,156, 96,146, 36,231, 70, 68, - 68, 92, 55,231,166,156, 60,121, 50, 5, 0,138,139,139, 87, 52,110,220, 88, 28, 19, 19,131,103,207,158, 33, 54, 54, 22, 12,195, - 60, 77, 77, 77,173, 85,135, 56,169, 84,122,143, 32,136,232,215,201, 89, 30,175,139, 83,163,209,172, 94,185,114,101,223,101,203, -150, 73,172,172,172, 16, 17, 17,129,101,203,150,169,181, 90,109,109,196, 85,181,224, 56, 14, 6,131,161, 86, 35, 63, 43,193,220, - 54,109,218, 52, 93,185,114,101,227,210,190, 92,188,115,197,131, 7, 15, 30, 60,254, 59, 2,235,127, 66,171, 48, 23,192,187,190, - 62, 86,222,171,183,238,221, 41, 19,179, 93, 52,122,242,166, 70, 71, 78,137,136, 41,140, 51,247, 98, 43,127,130,240,197, 61, 42, -216,218,218, 90, 38,187,162,200,180, 39, 57, 29, 80,169, 84,107,235, 18,153,208,208,208,235, 0,218,115, 28, 55,226, 12, 65, 44, - 0,226,193,113,220,234,136,136,136, 99,181,225, 9, 8, 8,120, 75,173, 86,255,170,211,233,124, 89,150, 21, 95,187,118, 13, 90, -173, 22, 49, 49, 49, 26,150,101, 15,215, 54, 92, 9, 9, 9,209,175,155,243,175, 8,103,106,106,106,200,233,211,167,123, 19, 4, -113,113,238,220,185,146,229,203,151,191, 86,113,101,111,111, 95,156,150,150,150,173,213,106, 29,210,211,211,245,246,246,246,197, -137,137,137,117,161,122, 90, 80, 80,208,234,243,207, 63, 95,254,197, 23, 95,124,249,205, 55,223,136,248, 62, 87, 60,120,240,224, -193,227, 63,143,192, 64, 71, 75, 51, 79, 53,203, 66, 92, 52, 25,134,121, 19,193,205,155, 8,110,209,100, 24, 94, 7,103, 45,241, - 2,103,147, 38, 77,246, 59, 58, 58, 26, 69, 34,145,142, 36,201, 98,138,162, 10, 4, 2, 65, 26, 73,146,211, 96,198, 52, 22,255, -101, 78, 0,112,113,113,105,219,188,121,243,253, 10,133,162,211,235,184,159,229,225,234,234,218,215,195,195,227,160,155,155, 91, -247,215,196, 25,208,191,127,255,231, 50,153,236,182,185, 21,134,191, 51, 47,241,156, 60, 39,207,201,115,242,156,111, 14, 56,142, - 51,251,243, 87,131,207,124, 60,231,223,193, 73,212, 65, 92,241,247,147,231,228, 57,121, 78,158,147, 23, 88,127,153,192, 34,193, -131,199, 27,144,231,193, 55, 11,242,224,193,131, 7,143,127, 17,136,106, 84,104,109, 86,202,174,139,146,125,192,115,242,156, 60, - 39,207,201,115,242,156, 60,231,255, 59,206,154,184, 31,224, 95,138,191,163,233,239,175, 20, 94, 60, 39,207,201,115,242,156, 60, - 39,207,201,115,254,255,227,252,215,131,111, 34,228,193,131, 7, 15, 30, 60,120,240,248, 7, 81,235,142,193, 1, 1, 1,141, 0, - 32, 36, 36,228,233, 95, 24,174, 79, 20, 10,197,148,214,173, 91,251,136, 68, 34, 50, 63, 63,127,217,181,107,215,150, 85,118, 98, -235,214,173, 67,251,246,237,235,125,229,202, 21, 61,240,191,245, 7, 77,223, 12,195,164,132,133,133,181,229,147,250,159,129,171, -171,235, 57,169, 84,234, 89, 50,193, 40, 7, 35,203,128, 97, 57, 48, 12, 11, 3,195,129,214,107, 19,245,197, 5,253,234,196,221, -102, 68,125,134, 97,131, 56,112,219, 8,142,152,198, 17,220, 54,130, 35, 62,230, 72, 98, 27,193,114, 31, 65, 96,252, 22, 70,193, - 23, 2, 86,184, 80, 21,115, 56,249, 77,184,159, 75,151, 46, 37, 95,241,255,149,174, 63,229,235,235,123, 90, 42,149, 54,172,234, -127,197,197,197,170,168,168,168, 30,111,114, 94,117,113,113,233, 70,146,228,102, 0, 45, 42, 28,122, 4,224, 83,149, 74,117,233, - 85,175, 17, 32,147, 9, 28, 41,234, 35, 33, 65,124, 5, 0, 6,142, 91,155,197, 48, 63,134,104, 52,255,154, 62,132, 78, 78, 78, -215, 41,138,106,172, 46, 46, 86, 23, 21, 22,122,203,229,242, 56,153,133,165, 37, 99,100,158,100,103,103,118,227,223,106, 60,120, -188, 38,129,229,231,231,215, 4, 64, 32, 65, 16,129, 28,199,117,107,220,184,177, 75,113,113, 49, 24,134, 73, 39, 8,226, 58,199, -113,215, 0, 92, 11, 15, 15,143,125, 29, 1, 34, 73,114,221,119,223,125, 55,103,230,204,153,101, 34,233,193,131, 7,104,213,170, - 85,165,231, 83, 20,229,177,102,205, 26,155,164,164, 36,136, 68, 34,136,197,226,178, 15, 69, 81,232,208,161, 67,173,174,111,103, -103,103,229,236,236,188,140, 32,136, 81, 36, 73, 82, 53,157,207,178, 44,195,113,220,161,140,140,140, 37,185,185,185,133,181,185, - 86, 91,255, 86, 6,128,168,226, 26, 28, 19, 26,118, 95, 88,221,255,155, 52,105, 18, 42, 16, 8, 60,202, 11, 74, 19,202,111,151, -255,205, 48, 76,202,195,135, 15,219,154,123, 47,164, 22, 22, 95, 18,164,160, 55, 56,182, 89, 9, 25,249,136, 99,141, 23,181,197, -197,235,204,137,175, 68, 34,241, 12, 11, 15,111,252,240,113, 60,188, 27,212,135,158, 54, 66,167, 55,224,196,197, 16,180,241,241, -194,208,129,125,234,156, 87,140, 44,177,116,225, 39,239,247, 92,189,121, 95,192,130,153, 99,229,171, 55,239,107,187, 96,230, 88, -171,213, 91,246,181, 93, 56,235, 61,171,149,155,127,111,187,112,214,123, 54,171, 54,255,174, 7, 48,185, 46,215,152,212,178,190, -154,100,140,146, 74,211,158, 18,232,126,121,144,100,249, 79, 60,184,171, 87,175,110, 66,211,116,204,196,209,109, 87, 52,107,228, -156, 81,217, 57,249,249, 25,206,207, 30,133, 46,134, 80,228,227,211,110, 65,181,207,167, 72, 36,106,112,253,250,245,198,166,153, -246, 25,134, 1,195, 48, 48, 26,141,208,235,245,120,231,157,119, 4,175, 35,220,254,254,254,147, 56,142, 91, 85,146, 45,137,149, - 97, 97, 97, 91, 94,129, 78, 46, 16, 8, 62, 23,139,197,129, 70,163,209, 7, 0,132, 66, 97,140, 78,167,187,102, 52, 26,191, 3, -254, 55,191,158,153,239,158,141,193,193,193,205,173,172,172, 64,211,116,217,194,240, 20, 69, 53,107,223,190,253, 86, 0,141, 95, - 53,254,142, 20,245, 81,167, 46, 93,190,159,244,217,103, 84,110, 72, 8, 54,239,220,185, 17,185,185, 0,176,181,166,255,186,187, -187,135, 18, 4,225, 81,155,235,113, 28,151,146,154,154, 90,171, 10, 38, 69, 81,141,159, 39, 41,157,223,170,239,134,162,194, 66, - 88, 88, 88, 90,134, 60, 72,112,246,111,241, 22, 95, 98,242,224,241, 58, 4,150,159,159,223, 25, 0,129,205,154, 53,147,245,233, -211, 7,126,126,126,240,244,244,132, 84, 42, 5, 0,228,228,228,184, 60,124,248,240,221,136,136,136,119,239,220,185, 3, 0, 26, - 0, 55,195,195,195, 43,117, 35,122, 13,238, 50, 83, 42,151,124, 15, 0,153,169,217,170,148,184,140,205, 42,149,106, 29,128,242, - 53,106,239,241,227,199,207,158, 53,107, 22, 78,159, 62,141,125,251,246, 65,167,211, 33, 63, 63,191,202, 8, 48, 12,147, 50,126, -252,120, 65,108,108,172,177, 42, 7,171, 54, 55,196,217,217,121,217,232,209,163, 63,107,222,188,121,217,178, 46, 6,131,161,236, - 59, 55, 55, 23,179,103,207, 54,189,188,192,178, 44, 46, 95,190, 60,243,171,175,190, 66,110,110,238,231,149,113,246,238,230, 29, - 42, 32, 8, 15,246,127,162, 44,229,226,141,248,182, 0, 65,133,132, 70, 18, 21, 94,136, 0,128,118, 1,190, 53,138, 59,129, 64, -224, 17, 30, 30,238, 44, 18,137,204,138, 27,203,178,240,243,243, 51,235, 92, 55, 55,183, 30,148, 64,180,111,196,152, 15,237,124, -253,252,132, 30,110, 10, 24,140, 70,196, 39, 36,181,139,140, 8,243, 61,127,234,192, 20,169, 84, 58, 86,169, 84, 94,169,142,199, -192,176,136,140,126,138, 11, 55,195, 49, 68, 36, 69,177, 86,143,194, 98, 61,126, 61,121, 11, 41, 25,249,117,206,184,237,218,181, -115,207, 52,234,219,207,154, 60,220,242,219, 31,246, 88,206,154, 60, 28,235,183,253, 90,246, 61,243,195, 97, 88,247,195, 30,249, -172, 15,135, 97,243,246, 93, 29,189,218,181,115, 15, 14, 14,174,114, 89,128,170,210,136,100,140,146,157, 15, 83, 41, 0,200,220, -190, 29,116,122, 58,220,150, 44, 1, 0, 76,109,225, 33,169, 77,152, 91,180,104, 81, 38,136,171, 21,142, 70, 99, 74,116,116,116, -219,154,196,149,209,104,228, 4, 2,193,226, 27,127, 46, 59,220,169, 93,147, 23,110,102,236,147, 88,155,165, 95, 47, 25,121,240, -108, 33,247,110,127,171,152,152,224,213,213,138, 44,150,101, 73,157, 78,135, 39, 79,158, 84,218,137,147, 36, 73,166, 46,233, 20, - 24, 24, 40, 81,171,213,191,203,229,242,214,106,181,122, 18,203,178, 95, 95,189,122,213,133, 36, 73,244,238,221,251,107,127,127, -255, 4,137, 68,242,131, 86,171,141,144,203,229, 99,175, 93,187,166, 51,147,186,155,149,149,213,175,199,143, 31,183,243,243,243, - 35,179,178,178,224,229,229,133,156,156,156,118,215,175, 95,247,255,240,195, 15, 63, 44, 44, 44, 28, 15,224,122, 45,130,219,212, -210,210,146,155, 48, 97, 2,193, 48,255,139,238,207, 63,255, 12,255,134,233, 13,251,248, 74,139,181, 52,151,127, 35, 74,250, 49, - 71,114, 55, 19, 19,243,107,157,129,133, 4,241,213,164,207, 62,163, 68, 42, 21, 44, 99, 99, 49,152, 32, 4, 59, 74,220,172, 26, - 5, 22, 65, 16, 30,203,118,126,234, 44, 22,139, 97, 48, 24,202, 62, 28, 11,128, 3, 56, 22,224, 88, 14, 28, 7,128, 35,192, 50, - 44,214,207,223, 89,231,103,204,194,210,210,194,197,197, 53, 93,102, 97, 97,193,129, 7, 15, 30,175,211,193, 26,112,245,234, 85, - 24,141, 70, 88, 89, 89,129,162, 94, 44,239,237,237,237,209,173, 91, 55,180,111,223, 30,189,123,247,198,227,199,143,101,223,124, -243, 77,149,118,196,123,115, 6,163, 94, 99, 23,147,136, 80,220, 56, 29, 30,244,211,178, 35,142, 42,149,170,252, 90,131,147,166, - 78,157, 74,100,103,103, 99,212,168, 81,215,117, 58,221, 48, 0, 5,213, 69, 32, 42, 42,170,109, 84, 84,212,107,187, 33, 4, 65, -140, 82, 40, 20,216,191,127, 63,244,122,253, 75,199,173,173,173, 17, 29, 29, 93,190,182, 7, 95, 95, 95,138, 32,136, 81, 0, 42, - 21, 88, 36, 65,120,252,121,245,105,217, 58,141,163,135,250,138,250,116,243, 78, 47,210, 26, 56, 0,196,194,133, 11,203,196, 21, -199,113, 88,190,124,185,217,225, 21,137, 68,120,244,232, 17, 40,138, 66, 92,151, 38, 0,128,150,225,201,160, 40, 10,145,173,221, - 0, 0, 29,159,228, 66, 32, 16, 64, 46,151,155, 43,174,186,187, 40, 60,142,207, 95, 18,100,165, 53,112,248,227,114, 48,146,148, - 23,192,113, 28, 20,206,246,232,228,239, 39,244,105,213,218,249,151,173,235,142, 3, 24,166, 84, 42,175, 86, 45, 22, 24,248, 52, -105,128,221,199,175, 99,213, 15,135,145, 93,160, 69, 97,113,201,125,237,221,177, 57,126, 94, 95,183,116,162, 40,106, 93,179, 6, - 13,234,237, 62,120, 14,157, 58,180,195,238,131,103,209,177, 67, 59,236, 62, 84,178,189,231,208, 57,116,237,216, 30,123, 14,157, - 67, 75,159,198,245,179,159,231,175, 3, 48,166, 74,247,162, 98, 26, 13, 43, 73, 35, 65, 30, 67,152,210,230,249,180,105, 37,247, -167, 84, 96,213,250, 97, 43, 21,196,102,184,198, 53, 58, 87, 70,163, 17, 25, 25, 25, 68, 94, 94, 30,103,107,107, 59,178,188,200, - 50,137,171, 3,127, 22, 64, 19,187,153,216,187,247, 26, 59,110, 92, 96, 76, 76,240,106, 31,148, 52,119,189, 4,154,166, 19,250, -246,237,203, 1,128, 94,175,119, 23,139,197,162, 10, 2,204,173, 83,167, 78, 47, 9,180,154,154, 14,213,106,245,239,135, 14, 29, - 26,225,226,226,130, 97,195,134,157,111,222,188,185,216,194,194, 2,127,254,249, 39, 60, 60, 60, 28,173,173,173,207, 4, 5, 5, - 97,195,134, 13,245,207,159, 63,191, 15,192, 8, 51,110,101,239, 30, 61,122,236, 63,125,250,180, 84, 36, 18, 65,163,209, 32, 58, - 58, 26, 54, 54, 54, 16,139,197, 24, 54,108, 24,213,169, 83, 39,135, 30, 61,122, 28,137,141,141, 29, 11,224,162,185,105,164,209, -104,184,249,243,231,195,194,194, 2,150,150,150,101, 31,153,152, 33,182, 45,109, 32,251,108, 77,154,108,225, 87,227,214,236,248, -229,212, 21,150,229,190, 78, 78, 46,200,171,109, 62,200, 13, 9,129,101,108, 44,180,161,161,181,206, 67, 30, 84, 43,204,251, 98, -158, 73,244, 66, 44, 22,191,224,220,155,126,139, 68, 34,248,250,250,214,200,215,172, 89,179,237, 20, 69, 57,189, 16,190,220, 92, -106,241,162, 5,198,251,209,143, 45, 13, 70, 88,106,245, 6,172, 92,254,181,145, 34, 41,170, 69,139, 22,199, 56,142,203,124,248, -240,225,199,124,241,201,131, 71,221, 5, 22,228,114, 57, 66, 66, 66, 64, 16, 4,172,172,172, 96,109,109, 13, 27, 27, 27, 20, 20, - 20,224,225,195,135,120,244,232, 17, 18, 18, 18, 64,146, 36,188,189,189,129,151,103, 15, 47, 27,106,249,251,250,211,144,202, 37, - 32, 8, 32,160, 79,107,180,237,217, 6, 15,238,197,125, 26,114, 30, 59, 85, 42,213, 19, 0,130,150, 45, 91,126,216,161, 67, 7, -108,216,176, 1, 58,157,238,187, 42,196,213, 75,195, 55, 63, 26, 46,184, 33, 18,144,245,104, 35,155,252,227,113, 99,215, 54,109, -218,132,250,249,249,121,221,191,127,223, 96,114,179, 42, 54,147, 85,232,151,245, 2,103, 86, 86, 22, 88,150, 53,219, 21,202,203, -171,244, 29,251,160,162, 43,101,194,202,160, 13,182,133,249, 25, 88,177,246, 55, 24, 12, 6,204,153, 51, 7, 44,203,130,101, 89, - 48, 12,131,220,220,220,146,153,157,106,136,187, 41, 78, 20, 69,189, 32,128,107,218,174,142,211,209,209,209,146,164,132,251,190, - 88,184,194, 42, 42, 54, 5,167, 47, 7,131,227, 56,156,216,241, 53, 0, 96,216,212,229, 72, 85,101,162,147,127, 51, 76,252,232, -115,171,141, 65, 11,247, 57, 58, 58, 54,204,202,202, 82, 87,198,105, 48,178, 56,124,246, 14, 84,217, 69, 24, 63,162, 39,116,122, - 3, 50,210, 85,216,245,195,183,152,254,193, 81,216,201,101,174, 50,167, 6,177,229,239,145,149,149, 21,165,213,106,175, 63,121, -242,100,114, 85,225, 52, 24, 12, 3,230,127, 54, 5, 27,119, 30, 70, 11,111, 23,156,190,112, 23, 1, 45, 61,113,230,114, 48, 58, -182,242,194,217,107,161,232,212,198, 27, 87,238, 60,192,167, 31,143,195,151,159, 94, 31, 80,171, 52, 90,189,193,182,176, 32, 3, -127,172,222,131,140, 45, 91,144, 56,115, 38, 2, 74,243, 68, 8, 73, 66,228,238, 14, 88,215,124, 63, 43,195,163, 71,143,160,211, -189,108,212, 72, 36, 18, 52,107,214,172, 90, 78,147,115,149,158,158, 78,164,167,167,195,210,210,146,136,137,126,192,248,180,104, - 57,146,201, 57,184, 19, 0, 74,156,171, 2, 20, 63,222, 4,205,147,205, 16,229,221, 39,119, 44,255, 72, 63,245,235, 31, 99,202, - 61,163, 15, 42, 84, 84,202,238, 79,251,246,237, 31,221,188,121,179,105, 57, 23, 24, 70,163, 81,100, 52, 26, 27,155,154, 13,141, - 70, 35,116, 58, 29,198,142, 29, 75, 85, 23,119,153, 76,214,218,197,197, 5,247,238,221,195,210,165, 75,197, 45, 90,180,192,147, - 39, 79, 64,146, 36, 38, 77,154,132,230,205,155, 35, 51, 51, 19, 1, 1, 1,184,113,227,134,175, 25,247,211,202,210,210,242,151, - 83,167, 78, 73, 73,146, 68, 97, 97, 33, 88,150, 69,231,206,157, 65, 16, 4,238,223,191,143, 69,139, 22,225,232,209,163, 56,126, -252,184,204,223,223,255,151,226,226, 98, 31, 0,133,102,164, 17,167,211,233, 56,169, 84, 10,169, 84, 10,137, 68, 2,137, 68, 2, -145, 72, 4,141,158,194, 71, 75, 18,116, 66,137,156,109,221,202,187,225,244,169, 35,200, 21,107,118, 93, 6,112,194,220,116, 7, - 74,250, 92,109,249,233,167, 77,131, 74,150,116,194,161,194, 66,214,192,113,107,205,121, 54, 1, 64,201, 69,195,190, 5,129,243, -187, 66, 49,108, 90, 55,136,132, 98,136,132, 34,136, 69, 98, 8, 75,127,139,132, 34,136,133, 18, 80,142,218, 26, 57,133, 66,161, - 99,120,120,184,109,249,247,131,209,104,140,153, 57,115,166,247,136,161,131, 93, 14, 30, 61, 77,189, 63,122, 24,227,234,226,156, -149,156,156,248, 20,128,173,191,191, 63, 87,219, 60, 95, 7,240,156,255, 63, 57,171, 4,199,113, 1, 0,202, 87, 6,244, 0,196, -166, 98,187,244,221,230, 80, 97, 63, 0,100,150,126, 59, 85,177,157, 5,224, 33, 0,159,210,125, 12,128, 96,130, 32,114, 95, 53, -204, 38,129, 85,254,129, 33, 42,137, 24, 10, 10, 10, 80, 80, 80,128,228,228,100,108,219,182, 13, 66,161, 16, 2,129, 0, 2,129, - 0, 36, 73,150,245, 87,168, 10,151, 78,223,220, 12, 96,179,159,159,159,240,167, 59,135,207, 44,220,253,105,175,246,125,252,169, -208, 11,247, 71, 2, 88, 9, 96,192,132, 9, 19, 28, 1, 96,207,158, 61, 89, 0,254, 52,219,197, 17,144,245, 54,125,255, 91,253, - 89,159,190,111, 18, 20, 30, 59,119,238,180, 75, 73, 73,121,161, 70, 39, 18,137,106,236,151,197,113,220,161,167, 79,159,126,166, - 80, 40,202, 10,146,242,205,132, 70,163, 17, 82,169,180, 76, 12,233,116, 58,252,254,251,239, 70,142,227, 14, 85,195,137,216,232, - 75,120, 18,125, 5, 12,195,190, 32,166,180, 90, 45,150, 46, 93,250,194,212,250,211, 74,157, 18,115, 81,157,115, 69, 81, 20,110, -122,151, 40,129,129,153,220, 75,125,181, 42, 66, 40,150,206, 25,248,246, 56,123, 35, 71,149,137,171,146, 56,148,136, 11,177, 80, - 0,153, 68,136, 39,113,201,240,114,247, 71,175,254,195,237, 46,158, 57, 50, 7, 64,165,131, 16, 12, 12,139,129,221,253,241,195, -254, 43, 40, 40,210,162, 32, 47, 7, 89,201,143, 16, 19, 21, 12,177, 88,140,187,119,239, 90,217,216,216, 90, 53,104,224, 5,134, - 97,113,243,110, 40, 44, 44,100,216,191,111,175,151,142, 54, 32,233,121,194,228, 42,132,173,160, 83, 91, 31, 20,100, 37, 65, 32, - 16,160,147, 95, 67, 8, 4, 2,116,246,111, 12,138,162,208, 37,160, 41, 40,138, 66, 96,251,230,104,216,176, 33, 88,150, 21,212, -240,240, 34,246,193, 37,196, 62,188, 2,142,101,193,176, 37,205,191, 28, 0, 90,165,122, 57, 94,105,105,224,172,157,235,242,146, -192,220,185,115,243,148, 74, 37, 93,137,115, 40, 58,122,244,168,109,117,243,172,136, 68, 34, 31,129, 64, 16,147,147,147,195, 90, - 88, 88,144, 12, 99,100,125, 90,180,164,110,252,185,172,108,237,201,165,203,151, 29,126,183,191,245,200,223,118,157,226, 68, 78, -157, 9,130,146, 24,167,124,253,163, 24, 66,145, 15, 64,155, 83,105, 32,117, 58, 29, 30, 63,126, 92,227,156, 47, 28,199, 85,155, -161,212,106,245,196, 97,195,134,157,255,248,227,143,165,166,202,139, 64, 32, 40, 19,253,207,158, 61, 3, 73,146,216,177, 99, 7, -116, 58, 93,141, 25, 95, 32, 16,124,118,228,200, 17, 27,177, 88, 92, 38,174, 56,142, 3, 69, 81,120,244,232, 17,214,175, 95,143, - 9, 19, 38, 32, 41, 41, 9, 10,133, 2,115,230,204,145,175, 89,179,230, 51,154,166,205,177,133,163,244,122,125, 91,153, 76, 6, -137, 68, 2,147,208, 2,128,176,103, 46, 15, 18, 18, 18, 90,213,175,111,233,234,213,252,254,201,238, 93, 90,183,113,112,176,237, - 24,159,152,127,162, 54,233,159,100, 48,236, 80,170,213,139, 70,253,242,139,243,245,147, 39,217, 7, 39, 79,166, 8, 24,230, 71, -115,255, 47, 47,170,143,194, 88, 1, 2, 3, 3,113,237,218,117, 12, 30, 60, 24,140, 72, 4, 86, 44, 6, 43, 22,131, 19,137, 0, -177, 24,132, 88, 12,206,194,194,172, 44, 73, 81, 20,210,210,210, 94,216, 55,117,234,212,196,113,227,198, 57, 3, 28,148,202, 84, -238,243,207,102,165,102,101,101,113, 46, 46, 46,188, 45,193,227, 47,213, 81,213,104, 17, 39,130, 32, 78,151,123,247, 12, 54,109, -207,155, 55,111, 65, 80, 80, 80, 52, 65, 16,167,203,239, 55,157, 87,106, 72,156,174,108,187,244,191, 14,243,231,207,111,185,102, -205,154,213, 29, 59,118,220,127,251,246,237,120, 0,175, 77, 96, 17,165, 17, 51,107,253,186,202, 10,233,154, 4,150, 9,225,225, -225, 6, 55, 55,183,159, 30,133,198,247,106,218,182, 49,100,150,146, 62, 0, 54, 75, 36,146,207,199,143, 31,143,187,119,239,226, -193,131, 7, 63,163, 22, 51,115,211, 70, 54,121,214,167,239,131, 54,178,201, 38,135,106,206,156, 57,162,155, 55,111,210, 85, 57, - 88, 85,113,101,100,100, 44, 9, 14, 14, 70,117,157,220,223,125,247,221,242,133, 81, 89, 39,247, 42,115, 12,203,129,166, 13, 80, -171, 53, 37,194,170,180,240,102, 24, 6,106,181, 26,163, 71,143, 46, 19, 93, 44,203, 34, 35, 35,163, 78,137, 73,146,100,109,156, -171,202, 57, 40,170, 95,235, 54,126,194,203,183,163, 94, 40, 92,135,127,180, 18, 98, 81,137,184,146, 73, 69,144, 73,132, 72, 86, -166,163,153, 79, 11,209,181, 11,167,251, 85, 41,176,140, 12, 54,239,189, 0, 16, 4, 14,159,190,140,182, 94, 22, 88,182,104, 46, - 70,141, 26, 5,177, 88,138, 35, 71, 14, 97,221,214,221,152,230,233, 9, 14, 64,251,182,190, 88,187,125, 63, 86, 44, 95, 78, 30, - 58,120,184, 75, 77,225, 21, 10,133,160, 40,170,172,208,174,248, 77, 81,148, 89, 19,195,113, 44, 7,218, 96, 64,177, 90, 3,134, -101,193,178, 28, 56,150, 5, 56, 14,238,171, 86,193,125,213, 42,132,144, 37, 3,248,154,171,213,208,104, 52, 64,247,214,181, 22, - 87,122,189, 30, 74,165,146,142,138,138,170,172,164, 74,215,235,245,213,134,119,193,130, 5,177,171, 87,175,246,177,183,183,143, -137,138,138, 52,180,110,221, 70, 88,177, 15, 86,147,198, 77,242,151, 46, 95,118,248,253, 15,134,140,220,190,104,140,241,227, 37, -191, 10, 76, 29,221, 15,159, 93, 90,243,243, 68,211, 9,189,123,247, 54,171,219,141, 70,163, 73,171,234,152,169, 67,123,147, 38, - 77, 36, 61,123,246,196,245,235,215,177,106,213, 42,214,104, 52,102, 1, 64,167, 78,157,156, 86,172, 88, 65, 60,124,248, 16,182, -182,182,200,200,200,216,237,239,239,191,162,186,142,239, 98,177,184,123, 64, 64, 0,169,211,233,254, 55,215, 12, 73,226,209,163, - 71, 88,179,102, 13,198,142, 29,139, 38, 77,154,148, 61, 91, 61,122,244, 16,110,218,180,169,187, 57, 2,139, 36,201, 79,123,245, -234,245, 45, 74, 70, 17,150,127,201,197, 0,248, 18, 0,146,146,178,211,194,194, 98,163,123, 5,250,181,109,232,229,174, 8, 14, -123, 94, 45,167,179,179,243,124,146, 36,223, 5, 64, 1, 72,206, 35,201, 70, 78, 78, 78, 46,221, 6, 15, 70, 17, 65, 80, 63,158, - 61, 75, 8,100, 50, 57,146,147,205,106,106,204, 22, 62,131,194, 79, 6,145, 80,132, 9, 95, 13,197,233,211,167, 49, 99,233,184, - 82, 39,171,196,193, 18, 10, 69, 16, 9,197, 16, 59,213,109, 96, 98,233,187,137,176,182,182, 1, 0,216,216,216,152,222,155, 4, - 0,142, 36, 73,190, 75, 22,143,191, 10, 53,106, 17,147, 64,170, 40,180,130,130,130, 6, 87,220, 87, 94, 76, 85,246,187,252,127, -215,172, 89,179,186, 28,119,241,235,136,140,224,117,221, 21,131,161,250, 53,154,123,244,232, 49,211,202,202,234,123,211,246,243, - 91,169,120,126, 43, 21, 62, 77, 91,116,246,107,211, 54,111,236,216,177,112,112,112,192,151, 95,126,201, 1,248,165, 54,215,254, -241,184,177,107,249,237,200,200,200,182,145,145,145,117,138, 71,110,110,110, 97,105,103,245,207, 95,163,181, 9, 3,109,128,186, - 88, 11,154,166, 97, 48, 48, 48, 26, 25,248, 55,183,194,175, 63,206,133, 94, 79,195,192,148,236, 43,113,202, 24, 72, 68, 58,116, -107,239, 97, 0, 65,106,174,223, 77,178,174,142,191, 69, 88, 18, 40,138, 66, 84, 27,247, 74,157,171, 62, 74,218,108,161,197,177, - 76, 83, 23, 23,103, 36,157,189, 87, 82, 99,182,144,226,220,158, 21,176,180, 40,169,201, 15,152,176,160, 68,100, 73, 68,160,105, - 61,156, 93,222,130,145, 49, 52,173,138,207,104,160,245,173, 27,187,195,214, 74,134,200,144, 59,248,252,147,201,152, 52,233, 67, -136,164, 86,184,118,237, 10,146,148, 25,120,150,146,139, 79,150,252, 0,131,129, 1,109,100, 96, 48,178,216,184,235, 52,104,166, -102,101, 36, 18,137, 48,103,206, 28, 89, 85,199,247,239,223,175, 49, 75, 96,113,165, 34,184, 88, 3,157, 86, 7, 61, 93,146, 22, - 76, 3, 33, 86, 46, 26, 7,131,193, 0,205,152,142,160, 13, 6, 48,159,142, 0, 77,211, 72,182, 16,144,157,253, 21, 6, 16,164, -230, 86,104,170,181,185, 2,171,170,240,112, 28, 87,105,211, 97, 85, 34,171,117,235, 54, 49, 19, 70,183, 13,186,117, 59, 36,243, -214,237,144,151,206,107,208,164,109,220,199, 43,247,207, 55,103, 20,225, 11, 54, 78,185,230,194, 87,204,247, 95, 95,189,122,213, - 69, 46,151, 35, 54, 54, 22, 20, 69,129, 32,136,236,240,240,112, 23, 0, 24, 52,104, 80,150, 80, 40,116,160, 40, 10,159,125,246, - 25, 40,138,114,154, 49, 99,198, 98, 0, 85, 10, 44,163,209,232, 99,101,101,133,194,194,194,178,251, 40, 22,139, 49,111,222, 60, -188,255,254,251,101,226, 74, 44, 22, 99,247,238,221,240,247,247,135, 94,175,247, 49, 39,188,169,169,169, 33, 0,186,154, 33, 64, - 74,250,229,177,108,141, 25,139, 36,201,137,145,211,166, 53,210, 6, 7, 99, 58,203, 54,111,218,180, 41,180,218,255, 53,221, 53, -108,216,176,126, 74, 74, 74,154, 66,161,216, 11,224, 7,149, 74, 21, 81,173,131,165,174, 7,109,130, 24,140, 72,132,253, 39, 78, -224,253,247,223,135, 88, 44, 41,115,174, 32, 18,129, 16,139, 65,138, 68, 96, 40, 73,173,211,140,101, 89, 20, 20, 20, 80,187,119, -239,110,208,162, 69, 11,130, 3,208,172, 89,115,226,244, 31,127,212,151,203,229,241,246,246,246, 52,120,240,248, 39, 21, 88, 57, -129,244, 58,184,230,205,155,183, 0, 0, 55,111,222,188, 5,166,237,160,160, 32, 13, 0,229,191, 70, 96,213,228, 96,109,216,176, -161,202,169, 22, 76,133,203,166, 77,155,240,235,175,191,110, 0, 16, 87,155,107, 79, 29, 38,184,103, 33, 19, 41,138, 53,180,106, -199, 9, 99,251,214,173, 91,135,118,236,216,177, 65,104,104,104,149, 14, 86, 85,115, 99,253, 21,211, 52,112, 28, 7, 61,109, 64, -113,177, 6, 90,189, 30,179,231,110, 53, 43,237,105,125,161, 96, 80,255,110,178,154,156, 68,115,250, 96,213,212, 52,248,162, 88, - 54,194,164, 1,138,138,181,232, 49,118, 30, 66, 78,150,104, 99,147,184,146, 73,132,144,138,133, 32, 9,128,168,198,248, 52,104, - 10,134,126, 53,115,242,141,109, 63,255,234, 49,188,219, 20,204,154, 53, 11, 2,177, 5,236, 28,156, 96,100, 56,212,119,115,198, -179,148, 92, 28,217, 50,183,212, 27,230,208,237,189,165,216,176,104, 10,214, 45,173,185, 6, 78, 81, 20,182,108,217,162,169,232, - 90,149,119,178,204, 21,193, 38,151, 81,163,211,227,139,249, 63,152,159, 70,253,186,202,204,189,183,149, 13,156, 48, 87,128, 85, - 20, 89,165,174, 72,149,141,126, 18, 7,192,167,243,192, 69,255,228,203,144,101, 89,252,241,199, 31, 47,185,171, 21,211,208, 92, -183,149,101, 89, 36, 38, 38,226,193,131, 7,232,216,177, 35,242,243,243, 33, 0, 48,231,254,125, 52, 31, 63, 30,186,210,174, 11, - 98,177, 24, 83,167, 78,253,171,234,216, 37, 2,139,168, 62,161, 92, 93, 93,215, 55,107,214,172, 81, 92,110, 46,194, 34, 35,209, -174, 52, 60, 55,111,222, 44,239, 0,226,189,247,222, 19,199,199,199,127,248,232,209,163, 15, 57,142,219,144,150,150, 54,167, 42, - 78,181, 69, 10, 92, 90, 74,240,203,154, 99,152,185,124, 2,156,154, 73,177,126,254,142,178,227,235,126, 90, 90,218, 15, 75, 12, -169,188,246, 81, 43, 40, 40, 16,124,187,126,125,235,246,237, 58,200,222,159, 48,137,212, 27, 89,172,252,230,123,234,224,190, 61, - 14,123,246,252, 38,147, 74,165, 49,124, 17,207,227,159,196,235, 18, 87, 21, 29,172,160,160,160,232,160,160,160,151,220,176,191, - 84, 96, 81, 20,133,242, 67,150, 43, 43,228,205,233,131, 53,123,246,108, 88, 89, 89, 85,122,140,166,105, 46, 42, 42,234,161, 74, -165,218, 89, 93,237,181, 42,136,133,164,203,134,111,119,121,204,250,244,125, 22, 40, 25,173,181,117,235, 86, 91, 83, 31,172,242, -253,176,106,234,131,229,236,236,188,108,237,218,181,179, 6, 12, 24, 64,146, 36,249, 66,225,103,154,150,161,252,199, 96, 48,224, -212,169, 83,179,130,130,130,170,156,166,129,227, 74,154,159,212,197, 26,104,117, 37, 5,236,179, 7,135,205,205, 1, 53, 59, 14, -165,206, 85,135,216,156, 74,157,171,179, 46, 37, 5,215,192,204,154,185, 8,146,138, 77, 72, 76,110,231,234,104,139,220,252, 34, - 72, 74,155, 5, 77, 48,137, 43,153, 68, 4, 59, 27, 57,114,178, 51, 32, 20, 10,171,115, 71, 18, 51, 84,137, 93, 71,143, 24,120, -158,164, 4,210,242, 7,132, 50,107,139, 11,183,238,219,165,231, 22,131, 45, 23, 79,150,227, 48,115,133,121, 38,166, 80, 40,196, -140, 25, 51,170, 20, 56, 39, 78,156,208,212, 94, 96,233,106,151, 70,181,112, 50,107,114,176,204, 21, 88, 21, 97, 26, 93, 40, 18, -137,124, 74,197,151,217,104,221,186,245,159, 22, 22, 22, 94,230,158,111,238,164,163, 4, 65, 44,239,217,179,231, 42, 15, 15, 15, -231,143, 63,254,152, 16, 8, 4,104,219,182,173, 99,239,222,189,243, 1,160,105,211,166, 86,166,119,204,198,141, 27, 17, 19, 19, -147, 73, 16,196,138,106,159,117,177,248,145,141,141, 77,219,158, 61,123, 34, 63, 63, 31, 73, 73, 73,144,203,229,104,190,126, 61, -238, 79,159,142, 54,219,183,131,236,217,179, 68, 96, 74, 36,184,127,255, 62, 36, 18,201,163,242,174, 81,121,184,185,185,181,231, - 74, 58,153,119,198,255,154, 37, 56, 0,183, 8,130,248, 74,169, 84,222,123,217,150, 34,200,146,138, 90,245, 9, 69, 16,196,123, -243,231,207, 7, 41,147, 65,209,177, 35, 52,113,113,160,105, 26, 29, 58,116, 64, 64, 64, 64,201, 51,219,161, 3, 40,138, 66,163, - 70,141, 96,111,111,143,163, 71,143,190, 7,160, 74,129, 37,206,119,129, 46, 89,130,137, 19, 39, 66, 36, 18, 3, 98, 49,190,248, -226,139,114,239, 56, 49,168,210,254, 88, 44, 35, 54,167, 6,207, 85,168, 0, 16, 18,177, 88, 50,225,131, 15,201,175,190,248,156, - 53, 24,141,172, 64, 32, 36,231, 44, 92, 77, 62,121,252, 64,162, 86,171, 73,162, 54,181, 53, 30, 60,254, 2, 7,171,188,208, 42, -231, 66, 85,133,204,242,253,178,170, 18,104,229,251,100, 1,208,189,142,176, 10, 94,168,151,189,136, 39,145,145,145,141, 91,180, -104,129,164,164,164,170, 70,202,149, 12, 97,150,201,240,244,233, 83, 0,120, 82,213,133,174, 92,185,178, 25,192,102,211,182, 66, -161,232,216,125, 84,247, 91,109,122,250,225,240,119, 7,243, 85, 42, 85, 27,252,111, 78, 44,194,205,205,237,125,161, 88,240,110, -195,150,245, 3, 25,150, 93,123,229,212,173,101, 85,113, 87,236,131,101, 52, 26,235,220, 7,139, 32,136, 81, 3, 6, 12, 32, 31, - 62,124,136,209,163, 71,227,183,223,126,171,242,230,189,255,254,251,216,191,127, 63,250,245,235, 71,174, 89,179,166,202,105, 26, - 56, 14, 48,208, 70,168,139,181,208,106,117,127, 89,198,123, 85,231, 10, 0, 56,214,120,241,126, 68,152,111, 43,255,142,194,132, -228, 52, 72,197,194, 23, 4,150,133, 68, 4,169,164,100,159,171,147, 29,130,111, 95,163,141, 70, 67, 77,195,224, 19,105,109,209, - 75,147, 52,114, 4, 21,219,167,115, 43,187, 74, 29,207,249, 19,208,234,192, 6,179, 4,214,207, 63,255,172,169,202,189, 50,247, - 30,112, 28,202,154, 8,139, 53,175, 55,141,156,157,157,157,156,157,157,183,217,218,218, 74, 77,125,135, 42, 59,110, 99, 99, 35, -173,206,225,170, 73, 92,149,206,139, 21,179,122,245,234, 90,137, 44,177, 88,236,117,235,214,173,198,166,126,129,213,125,235,245, -122,188,251,238,187,102,217,130, 97, 97, 97,191,248,250,250, 62,115,114,114,186,208,169, 83, 39,201,195,135, 15,177,114,229, 74, - 66, 40, 20, 90,155,158,203,194,194, 66, 8, 4, 2,228,230,230,130, 32,136,137, 97, 97, 97,103,171,227,212,233,116, 87,175, 94, -189,234, 59,116,232, 80, 42, 38, 38, 6, 2,129, 0, 44,203, 66,215,161, 3,218,108,223,142, 7,159,127,142,110, 9, 9,208, 25, - 12,144, 74,165, 56,123,246, 44, 93, 92, 92,124,181,154,184,239,184,115,231, 78, 11,169, 84, 10,154,166,193,178, 44, 72,146, 36, - 40,138,234,210,162, 69,139, 77, 0, 2,202,159,255,214, 91, 78,206,109,219, 52,105,202,176, 44,147,170,204,204, 52,195, 17,194, -111,191,253,134, 14, 29, 58, 32, 48, 48, 16,169,169,169,136,139,139,195,192,129, 3,203,206,137,140,140, 68,120,120, 56, 26, 54, -108, 88,179, 3,106,149, 9, 39, 31, 73, 89,127, 43,145, 80, 4,145,160, 68, 88,153,156, 43,145, 80, 4,145, 72, 12,137,216,172, -110, 1, 92,197,252,104,234,123,101,105,105,193, 54,106,212,232,225,147,167,207,154, 3, 32,109,108,108,205,238,107,203,131,199, - 43,121,196,213, 8,165,242,143, 67,185,237, 76, 0, 68,233,118,102, 57, 33,149, 73, 16, 68, 8,199,113, 1, 21,206, 53, 29,215, - 87,248, 54, 29,143,124, 29, 17,169,238, 69, 57,112,242,228,201,219,251,246,237,219,107,206,156, 57,144,203,229, 80,169, 84,101, - 15,152, 88, 44, 70,189,122,245,160,209,104,112,253,250,117,228,229,229, 93, 6,240,145,185, 23, 86,169, 84,119,159, 70, 60,201, -238, 50,180,189,131, 79,251,166,182, 41,177, 41, 29, 84, 42,213,109, 0,132,187,187,251, 79, 99, 62, 31,240, 65,143,183,219, 65, - 36, 22, 34,249,105, 26,174,156,186, 85, 37, 87,197, 62, 88,175, 50, 55, 22, 73,146, 20, 65, 16,248, 63,246,174, 51, 44,138,171, -141,158,153,237,141,165,151, 5, 4, 21, 68,170, 32, 98,239,189, 97, 52, 81,163,209,196,146,104, 44,177,196,196,168,137,137, 88, - 34,182, 68, 99,236,189,196, 30, 53,198,174, 81,193,174, 20, 27, 40, 40,136,180,165,119,216, 62, 51,223, 15, 74,144, 80, 22, 52, -159, 38,153,243, 60,251,236,206,206,238,153, 59,119,238,204,156, 57,247,189,239, 29, 49, 98,132, 81,191, 31, 57,114, 36, 66, 66, - 66, 80, 91,119, 98,105, 23,161, 14, 37,197, 42,148,188, 70,129, 69, 16, 4, 40,138,170,112,174,202, 95,189, 83,117, 32, 73,178, - 66, 88,244,207,160,141,230, 84,151,148,172,188,122,241,183,137,238, 94,190,214,237,253,155, 35, 54, 62, 9, 43,191,254,179,171, -229,203,201, 35,177,235,192,239,176,183,179,132, 70, 85,132,115,167,127,207, 47, 40, 40, 88,217,208,125,216,117, 44, 4, 0,208, -121,212,203, 99, 4, 70,204, 92, 99, 92, 3,230,114, 49,126,252,248, 26, 29,172, 11, 23, 46,168, 42, 59,145,117, 29,163,226, 98, - 53, 74, 84,170,215,118,140, 20, 10,133, 95,235,214,173, 47,108,222,188,217,210,202,202, 10,169,169,169, 47, 9, 44,133, 66,225, - 23, 16, 16,112, 97,243,230,205,150,214,214,214, 72, 76, 76, 52, 58, 69, 72, 21,113,133,204,204, 76, 34, 55, 55,151, 54, 55, 55, -175,151,200, 34, 73, 18, 26,141, 6,209,209,209,198,158, 35, 70, 39, 29,109,210,164,201,222,159,126,250, 73,152,144,144, 0,189, - 94,143,168,168,168,191, 12, 66,224,112, 56,152, 59,119, 46,190,249,230,155,141, 0,156,107,227, 51, 24, 12,171, 63,250,232,163, - 79, 82, 82, 82,204,109,109,109,161, 84, 42,193,231,243,193, 48, 12,136,238,221,209, 57, 62, 30, 58,138,130, 88, 44,198,147, 39, - 79,176,117,235,214, 98,157, 78,183,186, 58, 46, 23, 23, 23, 1, 0, 55, 62,159,143,209,163, 71,191,180,110,247,238,221,104,239, -153, 27, 96,214,134, 95, 68, 49,124, 77, 17, 60,207,144, 36, 73, 4,248, 55,111,222,169,125, 11,159, 71, 81,207,159,165,102,228, - 92,175, 99,247,245, 90,173, 22, 30, 30, 30,184,123,247, 46, 46, 94,188,136, 30, 61,122,160, 75,151, 46,184,114,229, 10,194,194, -194, 16, 17, 17, 1,130, 32, 96,105,105, 89, 30,199, 90,107, 48, 43, 47,223, 18,186, 84, 33,192,231,255, 25,111, 85, 22,115,197, - 17, 8, 42, 70, 20, 50, 2, 1,104,129,113, 9,136, 43,139,166,178,178,104,214,172, 94, 41,148, 74,165, 20, 0,152,200,164,212, -161,221,235, 97,105, 97,161, 97, 26, 98,175,178, 96,241,122,238,119,119,223,196,127,255, 22,129, 21, 17, 17, 17, 15,160, 23,128, - 81,161,161,161, 63,206,154, 53,203,186, 83,167, 78,200,201,201,129,179,179, 51, 20, 10, 5,194,194,194,112,239,222,189, 44,134, - 97,190, 8, 15, 15,175,206,234,241, 65, 45, 57,103, 82,227,148,135,117, 37, 37, 83,252, 58,185, 35,228,200,213, 96, 59, 59,187, - 79,185, 92,238,140, 49,243,222, 25,215,109, 72,107,196, 68, 60,199,173,243, 15,160, 76,204,170,149,211,152, 24,172,202,239,213, -196, 96, 85,112,210, 52, 77,105,181, 90, 28, 60,120,208, 40,145,181,127,255,126,168,213,106,208, 52, 77,213,180,239, 20, 77, 17, - 38,114,107, 56, 56,121, 66,167, 45, 6, 77, 27,255, 20,200,212, 81,159, 6,131, 1, 11, 23, 46,196,236,217,179,177,120,241,226, - 90,133,200,250,245,213,198,126,189,196,153,155,155, 91, 40, 20, 10, 63, 60,176,253,167, 35,163, 38, 76, 55,113,236,224,135, 29, -135, 78, 67,175,211, 67, 36,228,194, 92, 46, 67,179, 38, 14,208,170, 75,176,225,231, 31, 11,212,106,213,135,213,196,158,213,118, -220, 95,194,216,119,187, 98,249,214, 19,184,186,239, 79,131,178,243,168, 5,248,101,213, 52,248,251,239,172,149,147,162, 40,240, -120, 60,236,219,183, 79, 85,211,104, 66, 14,135,131, 90, 4,214, 75,199, 72, 46,183,134, 99, 99, 47,104,213, 69,175,237, 24, 89, - 90, 90,206,222,182,109,155,165, 74,165,194,227,199,143,241,248,241, 99, 16, 4, 17, 93,117,125,113,113, 49, 30, 62,124, 88, 46, -114,162,141,173,207,114,231, 42, 51, 51,147, 80, 42,149,144, 72, 36,228,253,251,247,213,190,190,190,209, 40,139,209,170,107,223, - 53, 26, 77, 66,207,158, 61,107,114,140, 28,132, 66,225, 75, 83, 54,149, 39, 29,173,166,171,240, 47,229, 76, 74, 74,138,252,233, -167,159,156,154, 55,111,142, 45, 91,182,104, 76, 76, 76, 4,179,102,205, 2,135,195, 33,214,172, 89,195,228,228,228,232,230,206, -157, 43,184,118,237, 26,138,139,139, 35,141,184,134, 20,170,213,234,137, 29, 58,116,216,115,230,204, 25,177,155,155, 91,197, 76, - 15,187,118,237,194,103,159,125, 6,177, 88,140,152,152, 24, 12, 30, 60,184,164,164,164,100, 34, 94,206,129, 85,193,105, 48, 24, - 8, 30,143,199,208, 52,141,249,243,231,191,148, 88, 84, 34,145, 64, 44,160,176,121,145,139,244,243,229,105,210,233, 83, 62,250, -168,180,157,208,212,163,168,231,207, 54,239, 56,113, 25, 47,103,137,255,203,190, 19, 4,241,205,210,165, 75, 55,118,236,216, 81, - 44,147,201,224,230,230,134,235,215,175,227,250,245,235,184,122,245,106,249,241,135,133,133, 5,242,242,242,144,148,148,164, 34, - 8,226,155,218, 56,105,211,124, 88,185,149, 58, 88,188,242,156, 87,124,225, 75,163, 7, 75,243, 96,149,230,197,170,171, 62,171, -134,119, 88, 88, 88, 24, 90,181,242,143, 82,169, 84,156,114, 45,101,101,101,245,176,236,183, 76,163, 70,141,180,127,109,242,198, -159,239,245, 0,203,249,223,228,252, 87,161, 78,171, 63, 50, 50,114,159,183,183,247,153,101,203,150, 45, 59,118,236,216,132,233, -211,167, 19,114,185, 28,135, 15, 31,102,114,114,114,118, 10, 4,130,217,183,110,221,106, 80,190, 8,134, 97,118, 93,251,253,214, -228, 15, 62, 31, 68, 76, 95, 53,182, 99,228,149,135,209,190, 29,221,208,162,131, 27,194, 46, 69, 97,253,215, 7,246, 26,244,134, -239,210,210,210, 18,107,227, 49, 38, 6,171,252,197,229,114,235,204,131,117,236,216,177,233, 3, 6, 12, 32,239,220,185,243,151, -152,171,202,113, 88, 23, 46, 92,128, 78,167,195,225,195,135,233,218,242, 96,209,192,111,171, 87,125, 55,102,251,238, 83, 2,146, -208,225,102,232,175,200,207, 77,171,181,110,248,124, 30,126,217,255,155,142,203,229, 60,169,165,172, 47,194,195,195, 45,151, 47, - 95,206, 33, 73, 18,235,215,175,127,201,185,170,138, 7, 15, 30,208,122,189,190,206, 99,165, 84, 42, 47,208, 52, 61,114,211,234, - 69,187,186,247,125,199,204,195,195,155,107, 99,227, 4, 46, 73, 34, 47, 39, 19,119,111, 93, 51,156, 61,117, 60, 79,171,213,142, - 85, 42,149, 23, 94,165, 1, 6,111, 62, 94,237,247, 67,167,255, 88,151,139, 98,208,235,245, 92,169, 84, 10,131,193, 80,173,184, -234,217,179,167,248,250,245,235, 42,157, 78, 7, 14,135, 83,171, 98, 42, 61, 70, 11,198,108,223,243,122,143, 17, 69, 81,158,185, -185,185, 40, 46, 46, 70, 88, 88, 24,179,126,253,250,204,188,188,188,175, 43,175,207,201,201, 65, 97, 97, 33,238,222,189,203,108, -217,178, 37,179,160,160,224,107, 99,235,175, 60, 47, 86,110,110, 46, 45,145, 72, 72,189, 94,175,247,245,245, 21,241,249,124, 79, - 99, 57,238,221,187,215,175,166,117, 29, 58,116,136,189,126,253,122,179,202,115, 19, 26, 12, 6,190, 70,163,113, 27, 60,120,112, -157,215, 15,177, 88,252,193,175,191,254,186, 79, 36, 18,181, 80,171,213,159,100,100,100,236, 2,224,196,225,112,240,244,233,211, - 44,131,193, 48,124,254,252,249,219,139,139,139, 31,200,100,178, 81, 70, 22,249,108, 76, 76,204, 40, 47, 47,175, 29, 65, 65, 65, -210,110,221,186,241,236,237,237,209,170, 85, 43,196,196,196,224,212,169, 83,186, 13, 27, 54,148,148,148,148,140, 7,112,161,150, -135, 14, 6, 0, 97, 48, 24, 94,154,195, 84, 32, 16,128,199,227,161, 68, 67, 98,194,252, 56, 21, 13,158,106,233,202,189,167, 24, - 6, 68,170, 50, 43, 43, 45, 61,239, 54, 87,175, 15,125,161, 44,202,175,201, 25, 83,171,213, 45, 25,134,225, 22, 20, 20,172,209, -104, 52, 99,103,205,154,165, 88,177, 98, 5,124,125,125,145,149,149, 5, 11, 11, 11, 40, 20, 10, 20, 21, 21, 33, 62, 62,158,210, -233,116,155, 40,138, 90,148,145,145, 81,107,183, 35,149, 37, 65, 99,185, 79,197, 3, 35, 65, 16, 32,105, 18,132,142, 0,135,226, -128,163,231,128,224,114, 75,221, 45,227,166,208, 98, 12, 6, 3, 2, 3, 3,113,242,228, 73, 12, 25, 50,132, 65, 45,241, 39, 39, - 79,158,132, 49,142, 48, 11, 22, 44,140, 28, 69,248,232,209,163, 60, 0,159, 18, 4,177,123,218,180,105, 39,105,154,230,209, 52, - 61,240,222,189,123, 87, 95,101,227,105,105,105,225, 55, 78,133,125,109,237, 96, 22,220,111, 84, 71,120,183,118, 6,101,160,112, -253,116, 36,118, 46, 61,126, 32, 57, 41,121, 28, 94,158,171,176, 90, 24, 19,131, 85,213,193,170,137, 43, 35, 35, 99,193,146, 37, - 75,240,253,247,223,215,123, 20, 97, 77,191,185, 25,150,250,105,187, 86,180,227,208,119, 58,246, 37, 9,130,209,212, 18,103, 67, - 16, 96,202,163, 34,184, 92,206,147,208,219,201,190,181,212, 95,207, 41, 83,166,252, 65,146,164,115,101,139,191,150,155,189, 50, - 59, 59,187,143, 49,199, 38, 61, 61,253,140,131,131, 67,243,144,179, 39,230, 93,187,120,166, 27, 69,233, 92, 9, 16,224,243,249, -207,244,148,225,138, 94,171, 13, 78, 73, 73,121,229, 68,108,243, 62, 29,130, 23,169, 89,224,114, 57,165,185,167,202, 18,154,254, -186,118, 22,252,253,127,169,241,127, 66,161,240,204,142, 29, 59, 2, 63,250,232, 35,130,203,229, 86,116,187,149,239, 63, 73,146, -184,117,235,150, 74,171,213, 98,231,206,157,140, 88, 44,174, 53,113,237,223,117,140,138,138,138,198, 15, 30, 60,120, 23, 0, 33, -128,167,249,249,249,147,148, 74,101,114,229,245, 67,134, 12,217, 5, 64, 72, 16,196, 95,214,215,133,242,148, 13,230,230,230,209, -101,206,149,168, 33,129,238,181,180,111, 78, 77,221,135,198,116, 21,150,205, 45,248, 94,249,114,171, 86,173, 22, 77,158, 60,185, -242,100,207,161, 0, 92, 26, 80,180, 11, 42,149,202,123,254,252,249, 51,196, 98,113,119,149, 74,229, 1, 0, 18,137,228,113, 73, - 73,201,101,157, 78,247, 19,128, 90,115, 75,197,197,197,105,155, 52,105, 18, 99, 48, 24,124,108,108,108, 42, 70, 31, 10, 4,165, -206,207,173,199, 22, 97,169,169,169,173, 75,199,105,222, 54,186, 96,167, 79,159,110,108,110,110,222,135, 32,136, 97, 12,195,184, - 23, 22, 22,106,190,251,238,187, 27, 33, 33, 33, 5,143, 31, 63,238,215,185,115,103,194,206,206, 14,207,159, 63,103,138,138,138, -142,144, 36,249,141, 82,169,172,115,228, 52,195, 48,201,181,185,212, 53,253,167,182,245, 90,173, 54,243,198,141, 27, 22, 23, 47, - 94,228, 80, 20,133,179,103,207, 86, 60, 72, 86,215, 27, 24, 23, 23, 7,173, 86,171,102,111,157, 44, 88,212,141,191,123, 52,136, - 81, 22,162, 66,161, 24, 33,146, 10,167, 56, 55, 87,248,166,198,103, 68, 21,230,149,252,162, 84, 42, 55,163, 52,101, 61,107,159, -254, 75, 57,249, 98,147,115, 4,135,239, 92,227,205,129,210,189,208,169, 10,251, 86,199,217,166, 77, 27, 7, 62,159,191, 82,163, -209,244,175, 45, 75, 59,135,195, 49,136,197,226, 51,106,181,122,118, 53,147, 61,255,227,234, 51, 40, 40,168, 90,251,192,216, 81, -132, 65, 65, 65,116,125,202,233,235,235,123, 89, 34,145, 40,170, 91, 87, 82, 82,146,120,255,254,253, 62,111, 73,125, 86, 30, 1, -104, 52,103,131, 70, 17,214,193,233,236,236, 44,212,233,116,254, 0,154, 3, 48, 3,144,163,215,235,207,102,101,101,165,219,218, -218, 6,144, 36,249,109,153,120, 93,156,158,158, 30,246, 38,207, 77, 7, 7, 7,145, 92, 46, 95, 73,146,164,194, 72,193,173,205, -200,200,152,149,157,157,157,198, 94,235, 88, 78,252, 7,187, 8,223,166, 48, 68, 31,150,147,229,100, 57, 89, 78,150,147,229,100, - 57, 89,206,127,139,192, 50,246,197,118,166,179, 96,193,130, 5, 11, 22, 44, 88,188,102, 16,181,168,208,250, 88,127, 13, 81,178, - 15, 89, 78,150,147,229,100, 57, 89, 78,150,147,229,252,207,113,214,197,253,214,118, 61,178, 93,132, 44, 39,203,201,114,178,156, - 44, 39,203,201,114,254,211, 56,223,122,176, 93,132, 44, 88,176, 96,193,130, 5, 11, 22,111, 16, 70, 11, 44,169,173,135,167,149, -179,239, 46,115,199, 22,247,205, 29, 91,220,183,114,246,221, 37,181,245,240,252, 47, 86,154, 66,161, 16,219,217,217,141,106,212, -168,209, 5, 63, 63,191, 2,123,123,251,207,217,166, 84,127,116, 5,184, 35,128,169, 31, 1,137, 31, 1,137, 35,128,169, 93, 95, -227, 4,228,111, 11, 22, 77,181,111, 23,122,102,212,153, 69, 83,237,171, 77,192, 22,244,133,194,242,218,217,225, 63,205,155,106, -111,241,154, 54,105, 98, 99, 99,179,197,214,214, 54,193,198,198,230,133,141,141,205, 14, 0,166,108,139, 99,193,130, 5,139,255, - 31,140,186,153,153, 59,249,124,226,218,212,117,246,162, 5,243, 8, 7, 59,107,137,222, 64,233,158, 39, 36,123, 45, 88,178,236, - 72,170,128,251, 99,110,226,195,109, 13,216, 54,225,232,232, 56,130,199,227, 5, 2, 40, 23,106,209,122,189,254,100,114,114,242, - 65, 24, 55,220, 26, 45, 90,180,184,198,225,112,156,234,179, 97,154,166, 19,238,223,191,223,165, 33, 21,102,111,111, 63,220,222, -222,126, 71,187,118,237, 36, 45, 91,182, 4,159,207,199,138, 21, 43,190, 72, 77, 77, 93,109,188,178,232,202,181,201,179,248,136, -195,229, 14, 2,224,203, 48, 0, 8,206,125, 90,175, 59,149, 97,158,189, 11, 33, 33, 70,165, 17,183,179,179,251,154, 32,136,177, -101,117,181, 77,169, 84,174,252, 59, 26,137, 66,161,104, 68, 16, 68,119,134, 97, 60, 72,146,124, 64,211,244,121,165, 82,153,253, -170,188,182,192,167, 29, 58,117,250,105,204, 23, 95,112, 84,161,161,248,105,199,142, 53, 40, 40, 0,128,245,245,109, 75,109,219, -182, 28,102, 98,130, 64, 2,240, 7, 1,130, 4, 19,153,147, 71,158,190,123, 55,226, 32,140,200,165, 86, 19,252,253,253, 79, 1, - 40,159, 56,238,116, 68, 68,196,192,250,114,228,198,209,223, 10,121, 30,157,115,159, 93,254, 22, 64,255,170,235, 13,106,209, 24, - 14,175, 81, 32,135,137, 72, 2,240,195, 43, 86,171,196,218,218,250,254,241,227,199, 29,219,182,109,203, 5,128,176,176,176,143, - 2, 3, 3,123,100,102,102,250, 0, 40,120, 19, 23,154,118,237,218,153, 27, 12,134,221, 28,130,104, 71,211,180, 25, 0,144, 36, -153, 71, 49,204, 45, 46,151, 59,166,161,201,138, 89,176, 96,193,226, 31, 43,176,164, 54,238, 94,110,174,205,190, 56,123,108,119, -163,188,156, 60,245,250,149,187, 34, 84, 92, 65, 73, 19, 47, 55,254,218, 31,151,155,125, 54,243,203,153, 58,141,254,118,113,198, -147, 40, 99, 55,106,103,103,231, 36, 20, 10,143,126,253,245,215, 62,157, 58,117,226,217,216,216, 32, 61, 61, 29, 79,158, 60,241, -185,126,253,250,144,227,199,143,127,161,209,104,222,171, 43,131, 59, 0, 72, 5,252,166, 7,151, 47,181, 19,152,153,131,161, 12, - 48,243,246, 3, 0, 48, 52, 13,229,149, 11,160,245,122, 48, 52, 5,199,126,239,148,126,207, 48,104,211,166, 13,191, 33,149,229, -224,224, 96,239,230,230,182,119,238,220,185,124,141, 70,131,200,200, 72,220,188,121,147,206,200,200, 88,102, 44,135,141,207, 16, - 47,178, 80,120,100,240,144,254,141, 7,246,182, 17, 56,219, 89,131,166, 69,120, 18,175,115,186,112, 53,162,223,233,179,231,103, - 83,158, 67,134,103, 70, 31,127, 80, 27,143,183,183,119,187,220,220,220,239, 83, 82, 82,202,133,223,138, 54,109,218,124, 87,249, - 55, 85,131,241,104,154, 6,151,203, 77, 47, 41, 41, 25,241,232,209,163,136,234,120,231,127, 2,189,193, 80,218, 46,184, 92, 80, -187,207, 59, 30,235,222,189,123,147,241,227,199,195,223,223, 31, 97, 97, 97,221, 15, 31, 62, 60,227,212,169, 83,119,245,122,253, -105,161, 80,120,229,197,139, 23, 13,154, 96,145, 15,124, 53,230,139, 47, 56,178,132, 4,200, 34, 35, 49,186,160,128,187, 28,248, -170, 62, 2,203,223,223,191,169,165, 57,142, 12,121,175,171,167,157,157, 23,159,199,179, 2,195, 48,208,235,115,154,103,102, 70, - 15, 51, 53,197,220,252,124,206,208,187,119,239, 62, 53,134, 47, 32, 32,192,150,166,233, 77, 12,195,240, 9,130,152, 6, 96,192, -217,179,103, 65, 81, 20, 6, 14, 28, 56,192,223,223,191, 41,195, 48, 63,203,100, 50, 70,165, 82,125, 28, 22, 22,150, 94,155,115, -149,247,140,254, 86,201,113,233,231, 30, 48, 22,105,220,115,253, 62,239,131, 51,102, 46,228,226,239,214,167,222, 2,128,126, 46, - 46, 38,249, 41,226, 57, 50,185,143, 69,126,202,133, 57,253, 92, 92,182,158,141,139, 43,108,232, 9,109,111,111,191,114,247,238, -221,141,218,181,107, 87,145, 36,183,101,203,150,156, 21, 43, 86, 56,204,154, 53,107, 77,110,110,238, 56, 35, 69,117,115, 75, 75, -203,115, 52, 77,107,162,162,162,154,151,127,111,237,251,110, 7, 75, 19,105,207,204,220,194,208,236,168,223, 66,140,225,106,213, -170,213,120,130,162,182,252, 56,255, 51,142,167,175, 47, 36, 86, 54,208,165,166,162,216,160,183,184,117,239,209,192,229,171,183, -100,182,106,213,106, 98,120,120,248, 14,246,146,204,130, 5,139,255,140,192, 18, 10, 5,115, 23,124, 51,135,200,205,206, 83,233, - 10, 11,116, 18, 70,107,144, 75, 68, 68, 65, 70,102,222,115,185,164,100,214,204,233,162, 57,115,191,153, 91, 12,140, 54, 86, 92, -121,120,120,220,217,186,117,171,141,133,133, 5,242,243,243,145,157,157,141, 59,119,238,128, 97, 24,244,239,223, 95,232,215,162, -133,255,143,171, 87,223, 4,208,190, 46,145,197,229,113, 9,158, 84,138, 95,187,250,131,228,243, 49,244,177,178, 84, 92,232,117, - 56, 59,114, 16, 0,128, 35, 16,224,253,216, 12, 0,128, 72, 36,106,112,101, 49, 12,211,190, 99,199,142,124, 0,248,226,139, 47, - 10,138,139,139,131, 9,130,216,167, 84, 42, 83,140,249,191,165,207, 32, 55, 43,107,235,144, 85, 75, 38, 88,248, 52,117,129, 86, -175, 71,114, 70, 10, 24, 8, 96,103, 35,197,232, 33,126,252,142, 1,252,102, 63,172,255,227, 10, 65,190,211, 37,227,209,137, 71, - 53, 10, 75,169,116,247,154, 53,107,112,232,208, 33, 0,192,229,203,151,225,230,230, 38,173,171, 12, 79,158, 60,113, 25, 59,118, -236, 1, 0,205,170, 91,111, 48,128, 27,252,253, 62, 0,192,238,173,163, 56, 49, 49, 49, 77,196, 98,113, 37,243,173, 43,186,118, -237, 74, 6, 7, 7,183,189,124,249,114,219, 3, 7, 14,232,244,122,253,154,212,212,212,195, 13,169, 83, 85,104, 40,100,145,145, - 64,104,104,189,255,235,231,231,231,228,233,105,121,243,135, 85,223, 89,255,126,242, 17, 86,173,218,129,103,207,158, 1, 0, 92, - 92, 92, 48,234,131,225,188,125,191,108,242,158, 59, 55,232, 6, 69,249,119,138,136,136,168, 51,187, 57, 77,211,155,130,131,131, -223,145,201,100,152, 59,119,110, 76,211,166, 77, 33,151,203,177,121,243,102,152,155,155, 67,175,215,199,172, 88,177,130,155,154, -154,138,181,107,215,110,175,228,110,253, 5, 93, 6,116,253, 86,200,243,232,236, 30, 48, 22, 50,185, 2, 91,247, 31,196,147,176, - 93,157, 53,250,199,223,206, 67,200,135, 28, 70, 56, 54, 35, 81, 58,183, 73, 64, 55,203,102,222,131,209,184, 85,164,149,134, 10, -141,159,223,187,233, 50,174, 72,189, 59,232,135,106, 92,194, 97,135, 57, 62, 5,119, 45, 30, 94,144,102, 3, 21, 73, 67,137,178, - 23,104, 6,131,186,118,237,202, 41, 23,216, 9, 9, 9,208,106,181,240,242,242, 34,181, 90,109,119, 99,197, 85,151, 46, 93,174, -237,221,187,215,178,115,231,206, 47, 77,221, 98,103,105,214, 55,228,232,154,233,223,255,244,139,199, 30,134,200,171,235, 65,160, - 85,171, 86,227, 91, 52,119,217,182,102,197, 2,130, 83,156, 12,174, 89, 54, 64,103, 67,121, 96, 59, 32,177,192,192, 73,179,208, -186,109, 91,206,244,153, 95,111, 35, 2, 2,152,176,176,176,157,236,101,153, 5, 11, 22,255, 9,129, 69, 51,180,175,181,181,133, -104,237,202, 93, 97, 10, 17, 73,216, 57,218, 19, 2,185, 25, 23, 50,169,144,228,240, 84, 46, 46,142,124,154,161,125,107,248,123, -213,161,150,132, 80, 40, 60,186,115,231, 78, 27, 30,143, 7,154,166, 97,109,109,141,248,248,120,228,230,230,162,168,168, 8,207, -162,163,209,184,145, 35,166, 79,156,160, 88,188,234,135,163, 0, 2,240,114,119,225, 75,156, 12,205,128, 54,188,220,163, 70, 16, - 68,181,253,139,181, 76, 35, 99,212,144, 80,154,166,159,167,166,166, 66, 34,145,192,211,211, 83,118,247,238,221,171,169,169,169, - 41, 70,113, 14, 27,198,225,191, 32, 78,172, 92, 50,194,130,224,196, 32, 38, 49, 15,174,142,109, 96,105,218, 8, 41,153, 69, 8, -143, 58,141,152,103,167,224,234,232,132,137,163, 92,205, 86,111,202, 60, 9,255,137,174,136,216,162,175,142,179,176,176, 80,230, -228,228, 4, 7, 7, 7,208, 52, 13,138,162,240,232,209,163,138,207,229,243, 37,150,127, 94,179,239, 58,204, 57, 89, 24,241,238, - 0,228,228,228,200,140,221,247,114,113,117,228, 7,123,111, 85,177,146, 15, 0, 98,169, 66, 55,116, 86,202,163,214,173, 91,195, -218,218,154,127,227,198,141, 89, 0, 14,215,183, 62,117,192,138,159,118,238, 92, 59, 58, 63,159, 4,128,109, 4, 65,235, 74,179, -106, 27,213,150,172,173,136, 99,171, 87,127,107, 77, 48, 81,176, 48, 93,142, 59,119, 94, 64,167, 43, 61,242,217,217, 25,152, 54, -181, 0, 92,174, 9,126,248, 97,129,229,251, 35, 38,255,138,210, 81, 47,116,109,229,100, 24,134,255,248,241, 99,120,123,123,227, -192,129, 3, 92, 14,135,131,219,183,111, 67, 44, 22, 99,236,216,177,240,241,241,225,138,197, 98, 92,189,122, 21, 5, 5, 5, 68, -109,229, 12, 61, 29,178, 56, 55,238,242,183,105,156,115,253,182,238, 63,136, 9, 31,140,128,157, 33,238,170,185, 43,185,184,255, -192, 14,223,113,120,141, 2,165, 38, 62,230,110, 62,131,193, 23,200,240,217, 87,139, 16,243,240,132,121, 73,225,131,169,148, 62, -169, 81,208, 15,135,103,252,165,156, 71,134, 83, 99,118,134,182,186,232, 20,225,252, 48,114,226,109,101,196,150,251,127,110,218, -147, 11, 82,101, 86, 46,174,158, 62,125,138,103,207,158,129,195,225, 64,165, 82,189, 52,169,111,101,206,150, 45, 91,126, 74, 81, -212,119, 0,160,213,106,119,137,197,226,241, 63,255,252,179, 37,135,243,231, 76, 81,229,206, 85,122, 70,118,238,141,187,143,158, -204,250,116, 88,183,208, 91, 15,147,116,188,193,137,249,247,127,203,175,174, 62,219,181,107,103, 78,210,244,150,159, 86, 45, 36, -168,184, 63, 32,244,236, 6,174,204, 13,148, 62, 5,234,220, 34,168,226,211,160,219,188, 14, 46,147,102, 98,229,138,239,137, 15, - 62,252,120,139,139,139,203,209,184,151, 29,188,191, 99,184, 54,203,201,114,178,156,111, 39,231,127, 75, 96, 17, 4, 89,160,211, -233,121,242, 70, 14,250,161,239,117,105, 17,113,251, 97,140,204,194,148,244,107,211,194,235, 97, 76,114, 56, 12,148,142, 32, 72, -163,226, 58, 28, 29, 29, 71, 44, 88,176,160,133, 92, 46, 7, 77,211, 48, 53, 53, 69,102,102, 38,116, 58, 29, 10, 10, 10,160, 41, - 42,132,174,176, 0,247, 18, 19,208,169, 91, 55,244,110,223,222,243,180, 94, 63, 34, 57, 57,249, 64, 77,156, 20,201, 97, 44,253, -219, 96,120, 92, 54,104,157, 22,135, 93, 44, 43, 92,171,145, 9,121, 32, 8, 2,148, 86,131,211,109,154, 65, 40,147,194,119,246, -130, 6, 87, 86, 90, 90, 90,196,197,139, 23,207,244,235,215,175,255,196,137, 19,201,180,180,180,179, 6,131,161, 99, 70, 70, 70, -157,221,163, 54,177,212,216, 49, 19,253, 93,172,204, 72,252,126,253, 28,218,121,188, 11,137,144,135,204, 92, 21, 72,130,192,179, -231, 23, 65, 81, 82,220,123,156,136,246, 62, 82,116,110,107,234, 88,244, 71,206,196,172,154,187,203,136,220,220, 92,100,100,100, - 64,175,215,195, 96, 48, 96,216,240,225,216,189,107, 23,138,139,139,161, 86,171,161,213,106, 65,211,165,122, 34, 45,179, 8,119, -238,157, 69, 64,139,230,229,142, 71,245, 13,130, 11,195,207,107, 70,113, 77, 36, 0, 95,104,173, 43, 44, 44,132, 84, 42,133,170, - 88,201, 31, 51,161,194,217,226, 95,190,124, 25,225,225,225,176,183,183, 55,170, 29, 85,135,103,192,150,231, 20, 53,191,255,177, - 99, 54,215,143, 29,163,111,253,254,123,178,176,176,112,179, 49,255,109,219,182,229,176,207, 62, 27,232, 41, 22,137,145,156,184, - 6, 30, 30,124,124,241,185, 37,130,151,103, 1, 0,166,127,230,136,128, 0, 75, 20,228, 29,129,149,205,215,248, 98,214, 16,215, -162, 34,230,163,155, 55, 35,119,213,222,222,137,105,191,252,242, 75, 76,159, 62,125,184, 17, 17, 17, 16, 10,133, 16,139,197, 16, -137, 68, 16,139,197, 72, 75, 75,131, 86,171,197,225,195,135, 13,101, 93,136, 53,162,172, 27,176,255,231,189,113,230, 73,216,174, -206, 14,100,252,189, 33,179, 58, 60,143,184,125,175,232,210, 31,215, 23, 27,212,162,164,188,228, 11,115,154,182,190,103, 53,117, -246, 66,172, 91,185, 0, 79,110,135,228,216, 58, 21,174,167, 8, 77,181,229,236,218, 53,136,235,232,104,167,159, 50,126,168,233, - 73,197,141, 9, 39,185,200, 74,207,121,176, 10,113,119, 84, 66, 55,239, 15,155, 55, 37,180,151, 46, 93, 18,119,233,210, 5, 42, -149,170,244, 92,224,112,240,203, 47,191,208, 6,131,225,114,117,156,122,189,254,187,240,240,112, 69, 73, 73, 9, 62,248,224,131, -233, 65, 65, 65, 82, 30,143, 87,122,126, 81,212, 75,206,213,146,213,123,206,205,252,110,253,229,115, 7,150,219, 47,153, 59,190, -219,232,207,190,191, 12,224,108,245,110,168, 97,247,234,229,243, 56, 66, 51, 29,136,214,125,160,203, 80,225,197,182,137,208,230, -171,208,124,241, 34, 0,124,104,117, 28,156, 28, 50, 28, 28, 11,123,124,210,165, 35,119,115,200,181,221, 0,134,176,151,102, 22, - 44, 88, 84,121,248,109, 13,192,186,108, 49,171,236, 62,102, 9,160,220,101,183, 6,160, 5, 32,168,244,183,170,203,149,127, 91, -117,185,242,231,172, 50, 99,199, 26,165, 83,246,221, 33, 8,162,222,113,162,229,163, 8, 43, 27, 62, 76, 21,215, 38,244, 89, 92, -130,170, 91,215, 0,197,229, 59,177, 17,253,222,237,221,166, 75,143,182,237,210,179, 11,226,236,172,229,210, 27,183,111, 9,105, -154, 54,170,127,135,199,227, 5,118,234,212,137,155,155,155, 11,137, 68,130,204,204, 76,164,164,164, 64,167,211, 65,149,159, 7, - 77, 94, 46, 84,185, 57,208, 23,230,225,217,221,219,112,119,114, 16,150, 5,193, 27,133,170, 14, 85,249,108,243, 4, 73, 66, 36, - 55,129, 88, 46, 7,135, 83,191,204, 20, 10,133, 98,176,187,187,251, 45,123,123,251,249,101, 79,248, 83,131,131,131,179, 24,134, -193,156, 57,115,228,114,185,252,176,179,179,179,176, 46, 30, 19, 11,106, 88,219, 22,205, 56, 49, 47, 30, 32,192,109, 40,154, 40, -186,224, 89, 74, 62, 50,243,213, 72,203, 41, 70,243,230,179, 97,109, 63, 1,166,118,147,240,224, 73, 18, 20,118, 77, 72, 14,143, -223,175, 14,193,247,210,242,254,125,251, 80, 82, 82,130,102,205,154, 97,228,200,145,248,234,171,175, 48, 98,196, 8,216,219,219, -163,115, 51, 46,198,127, 56, 12, 25, 25, 25,181,150,115,201, 54,240,150,237, 83, 68,140, 89,192, 68, 52,235,121,230,209,179,103, -207, 16, 19,243,215,158,181, 63,254,248, 3,249,249,249, 21, 55, 96, 99, 96, 99, 99, 51,207,206,206,238,190,157,157,221, 35, 59, - 59,187,211,233,246,246,143,245, 46, 46,182, 29,135, 12, 33,188,222,127,159,147, 36,149, 18,207, 27, 53,146, 25,195, 37,151, 99, - 96, 64, 64, 39, 65, 94,238,142, 10, 83,106,252, 56,107, 92, 11,241,198,245,171,173, 48,237, 51, 23,144,132, 8, 4,201, 71, 73, -241, 31,240,242,246,225,155,152, 48,181,182,165,178,128,246, 56,111,111,111,238,228,201,147, 33, 20, 10,177,123,247,110,108,220, -184, 17, 63,254,248, 35, 98, 98, 98,224,236,236, 12,133, 66, 1, 91, 91, 91, 46,128,184,178,255,212, 10, 51, 87,114,177, 70,255, -248,170,185,155, 52,142, 32,109, 58,104, 12,162,161, 65, 63, 40,179,151,108,136,255,225,249, 19,149,203,227,219, 33,217, 49, 15, -127,163,227,239, 94,206, 74,141, 45,114, 89,178, 33,254,135,224,245,169, 57,213,113,133,132, 44,160,142,159, 14,209, 21, 23,149, -112, 7,247,239,169,154, 52,110,100,115, 11,137,251, 47,112,232,211,178,113, 35,197,135, 11,150,174,213,126, 50,121,166,110,219, -246, 29, 76, 97, 97, 33, 10, 10, 10,240,211, 79, 63, 25,126,255,253,247, 20,138,162,102,214, 80, 68, 78,153, 32,194,240,225,195, -165, 98,177, 24, 73, 73, 73, 21, 46, 40, 0, 40, 51,179, 31, 92,191,251,240,241,172, 73,195,187, 22,107, 52,154,115, 87,194,162, -189,220,156, 29, 9,130,105, 92,211,126,115, 8,162,157,183,175, 47, 24, 38, 15, 36,215, 9,201,123, 86, 65,149,150,131,146,204, - 28,144, 60, 41,244, 16, 65,199, 8, 32,242,109,131, 23,225,145,176,149,201,193, 37,136,142,236,173,132, 5,139,255,174,142,170, - 73,139, 0,176, 38, 8,226, 36, 65, 16, 39,231,205,155,215, 29,128, 37, 65, 16, 39,203, 68,144,117,217,103, 65,249,111,106, 88, -182,174,204, 83,229,191,149, 63, 91,205,155, 55,175, 7, 65, 16, 39, 59,116,232,240, 97,153,144,171, 55,234, 84, 27, 28,181, 54, -120,222,252, 5,164, 92, 38, 48,241,242,108, 98,254,251,249,208,136,235,183, 34,163, 77, 36, 34, 97, 81,113,177,224,199,159, 55, - 58, 17, 37, 42, 99,131,188, 61,173,172,172,160,211,233,240,244,233, 83, 36, 39, 39, 67,167,211,193, 80, 82, 12, 77, 94, 30,212, -185,185,160, 75,138,192,167,104,168,178, 50, 97, 46, 18, 0,127,142, 48,172, 77,217, 86,136,169,234, 4, 23, 65, 16, 16,201, 77, - 32, 48,145,129,228,114,140,174, 28, 59, 59,187, 86, 45, 91,182, 60,116,233,210,165,182,157, 58,117, 90,236,236,236,108,154,158, -158,254, 34, 61, 61,189,231,202,149, 43, 53,214,214,214, 24, 61,122,180,187, 94,175, 31, 83, 23, 23, 95,164,105,225,108,235, 6, - 39,219,193,176,183,108,135,236, 2, 13, 50,243, 84, 72,203, 46,193,193, 95, 71,226,194,153,145,136,188,250, 33,158,222, 30,143, -236, 98, 57, 68, 22,221, 1, 48,181, 38,114,187,117,235, 22, 54,109,218, 84,241, 90,183,110, 29,114,114,114,224,237,237,141,164, -164, 36,156, 61,123, 22,105,105,105,176,182,182, 70,100,100, 36, 54,111,222,140,219,183,111,215,187,145,168,213,106,240, 4,150, -186,221, 91, 71, 97,247,214, 81,160, 24,169,174,114,221, 27,221,216, 72,114,172,114,200,144, 22, 74, 51, 51, 47, 95, 95,223,254, -239,191,255,190, 75,219,182,109, 43,214,187,186,186, 58,113,185,220, 52,133, 66,177, 77,161, 80,180,172,149,140,102,252,205, 45, - 60,161,213, 60, 46, 59,198, 92, 16,132, 16, 61,122, 71,163, 99,231,112,232,244, 2, 16,164, 16, 36, 33,130,193,144, 13,185,137, - 45, 24,134,168, 43, 49,222,128,179,103,207, 98,211,166, 77,136,143,143,175,232, 30, 13, 12, 12,156,246,193, 7, 31, 28,165, 40, - 10, 39, 79,158,196,241,227,199,209,180,105, 83,180,108,217, 18, 58,157,110, 64, 93,251,253,221,250,212, 91,251,126, 60, 51,146, -103, 48,107, 41, 16, 58, 55, 37, 11, 37,131,167,116,181,146, 2,192,217,184,184, 66, 91,167,194,101, 37,133, 15, 19,205, 29,139, -151,215, 29,224, 78, 48, 97, 49,143,110, 31,248,245,124,126,122, 86, 54,207,223,207, 71,245,253,194,217,252,198, 77,154,173, 88, - 48,103,138,109, 74,129, 40,191,247,244, 51,143,143,158,189, 83,244,209,248,137,134,143, 39,126,166, 62,119,254,143, 99, 52, 77, -251,162,134, 17,132, 52, 77, 67,169, 84,226,225,195,135,136,143,143, 71, 86, 86, 22, 50, 51, 51, 81, 88, 88, 88,209,173, 40, 41, - 44, 56,181,110,231,239,247,164, 98,177,164,109, 11, 55,167,219, 17, 81, 25, 82,177, 88,226,214,196,169, 57, 80,253, 4,212, 52, - 77,155,149,214, 33,129,194,135,161, 80,231, 20, 66,149, 87, 4, 85, 78, 17, 52, 58, 14,212, 26, 18,106, 29, 9,171,206,125, 80, - 84,172,130, 58, 39, 15, 52,195,152,179,247, 24, 22, 44, 88,212,114,191, 15, 92,182,108,217,210,218,214, 87,122,215, 86, 89, 6, - 65, 16, 39, 25,134, 9,100, 24, 38,176, 76, 76,149,235,132,147,149,121,150, 45, 91,182,148, 97,152,192, 27, 55,110,236, 7, 80, -210,144,178,214,217,181,147,157, 29, 91,100, 66,120,190, 55,115,206,119,167,127,217,186,214, 38, 39, 39, 55,134, 47, 18,171, 69, - 34,129,197, 87,115, 22,154, 21,151,228,191, 87,156,107,252,168,167,220,220,220,138,155, 23,159,207, 7, 85, 82, 12, 74, 85, 2, -117,110, 54, 8,157, 6,124,138,130,133, 68, 2, 39,123, 91, 52,182,181,171,147,143, 67, 83, 68,234,133,211, 56,247,225,187, 47, -117, 11,210, 58, 45,206,118,112,135, 64, 38,133,216,204, 28,157,142, 95, 45, 21, 58,124, 62,176, 96,121,157,188,182,182,182, 86, - 10,133,226,196,207, 63,255,204,207,202,202,194,163, 71,143,238,189,120,241, 34,223,220,220,220, 68,175,215,211,177,177,177, 23, -159, 60,121, 18,216,164, 73, 19, 48, 12,227, 90, 23, 95, 97,158, 84,167,211,211, 72,201,120,129,100,229, 67,152,202,156,192,144, -141,144,158, 83, 2, 2, 54,208,171,159, 84,196,146,105, 84,201, 40,214, 16, 70,213,167, 78,167,131, 94,175,135, 94,175,135, 86, -171,197, 71, 31,125,132, 27, 55,111, 98,223,241, 43, 72, 74, 74, 66, 83, 59, 9, 70,142, 24, 14, 63, 63, 63,132,133,133, 53,184, - 81,187,245, 58,247, 72, 44, 22, 99,227,198,141,144, 72, 36,168,175,192,178,179,179,251,193,195,195,163,217,147,226, 98, 68, 61, -126,140, 54,195,135, 3, 0,174, 93,187, 86,241, 27,149, 74,133, 81,163, 70, 9,226,227,227, 63,126,252,248,241,199, 12,195,252, -152,150,150,246, 69, 77,156,167, 78,221,196,164, 73, 81,200,204, 44,117,118, 15,238,247,170, 88,247, 60, 94,135,126, 3, 75,123, -174,204,204,204,240,195, 15,198, 37, 29,166, 40, 10,155, 55,111,134, 88, 44,174, 16, 88,124, 62,191,227,172, 89,179,222,171,238, -247, 94, 94, 94,117,114,126, 62,204, 65,116,237, 30, 51,213,180, 89, 19, 31, 83,107, 95,100, 25, 34, 91, 68,164,164, 77,251,124, -152,195,154,213, 71, 82,212, 20,161,217, 69,233,147, 26,113, 69,234,221,198,148, 49,238,236,207,218,156, 38, 19,119,167,101,228, -127,243,217,196,209,150,102,230,182, 69,219,126, 14, 54, 35, 73, 18,191,135,107,115,189, 93, 44,205, 7,183,251,169,104,210,231, -223, 70,104, 13, 47,166, 33,233,228, 19,212,146,246,132,166,105,164,164,164, 32, 43, 43, 11,137,137,137,200,204,204, 4, 65, 16, -200,204,204,172,151, 67, 89,157,163,172, 77, 78, 65,218,177,237,176, 27, 53, 26,205, 23, 45, 2, 77,243,160, 42, 49,224, 72,231, -158, 40,200, 87, 65, 75, 19, 48,107,213, 1,189, 79, 94, 5, 73, 27,128,155, 55,216, 59, 8, 11, 22, 44,106,187,174,156,156, 59, -119,238,215, 70,254,246, 34,195, 48, 70,165,214,169, 42,184,230,206,157,251,117,249,182,130,131,131, 85, 0, 82, 95,187,192, 2, -128,194,172,232,184,168, 40,174,178,168, 68, 37, 50,183, 48, 47, 49,145, 9,152,252,188,124,206,227,167, 49,234,226,180,103, 79, -234,177,189,232, 71,143, 30,249,164,164,164, 32,241,197, 11,232, 75,138, 65,104, 53,128, 90,133, 94,157, 59, 66, 4, 64, 68, 0, -124, 90, 7, 14, 71,128,162,162, 2, 0,136,174,139,148,214,235, 95,186,168, 87,116, 11,154,152, 64, 32,147, 66, 40, 55,121,201, -209, 50, 6, 98,177,120,223,230,205,155, 21, 10,133, 2,171, 87,175,134, 66,161,240,176,179,179, 43, 49, 49, 49, 17, 91, 89, 89, -161,121,243,230, 8, 8, 8,192,229,203,151, 65, 16,196,179,186,248, 12, 90, 65,120,116, 28,213,168,160, 40, 18,183,195,247, 66, -175,213,162,137,219, 60,104, 12, 86,144,218,124, 12,149,238, 4,116,121, 87, 0, 0, 2,121, 55,164,167,103, 1, 32, 30,214,229, -220, 85, 93,190,127,255, 62,118, 29,187, 6, 39,207,110, 72,203, 57,139,135, 15,195, 96,107,126, 30,110, 94,222,208,235,245,245, -121, 74, 48, 90,144, 24,217,208, 71,205,155, 55, 15,249, 98, 49, 48,112, 32,248,113,113,208,233,116,104,215,174, 29, 90,183,110, - 13, 0,104,215,174, 29, 56, 28, 14,154, 53,107, 6, 11, 11, 11, 28, 61,122,116, 20,128,106, 5, 22, 67, 16,145, 52,149,237,225, -226,226, 82, 33,176,118,239,201, 68, 68, 88, 47, 16, 16, 96,237,186, 63, 15,137,147,147, 19,210,210,226, 65, 16, 76, 93, 65,153, -167, 7, 14, 28, 56,192,220,220, 28,227,198,141,131, 88, 44,198,187,239,190, 11,149, 74,245,126,217, 19, 13,230,205,155, 7, 0, - 88,176, 96, 1,130,130,130, 80, 82, 82, 82, 99,138,138,141, 75, 90,216, 23,170,232,241,100,137,248,221,238, 86, 77,124,123,244, -237,133,166,110, 61,209,163,111, 18, 0, 44,181,226, 61, 31,190,252,107,179, 99,230,114, 98,231,141,227, 23,191,235,212,191,251, -252, 32,221,149,197, 65, 63,231,214,249,192,146,247,124, 75,225, 99,222,160, 53,107, 55, 25, 86, 47,248,122,150,240, 69,150, 46, - 39, 53,151, 46,146, 10,185, 38,174,182,144, 77,251,106,113,124,106,234,211, 47,145,116, 62,198,152, 99, 24, 31, 31, 15,141, 70, - 3,138,162,160,209,104, 80, 84, 84,132,228,228,228,138,227,171,146,202,251,125, 54,110,144, 95,177, 74, 85,114,251, 65,108,226, -252,233,163,219, 23,171, 84, 37,177,207, 19, 99,128,181,116, 13,199, 60,175,164,176,200, 66, 91,168, 71,222,189, 24, 88,245,112, -134,214, 64, 64, 99,224, 32, 39,171, 16, 58, 10,208,147, 60, 56, 14,251, 8, 6,130,139,130,204, 52,144, 13,136,115, 96,193,130, -197,127,203,193, 34, 8,226,100,112,112,112,224,223,197, 13, 0,193,193,193,143,130,131,131, 95,105, 91,229, 2,171, 91,165, 39, -220,110,213, 93, 43,157,204,242, 29,150,126,253,158,189, 94,175,245, 40, 42, 42,162,184, 92, 1,183,145,169, 42, 45, 39,209,248, -141,233,245,250,147, 87,175, 94, 29,210,185,115,103, 97,236,131,123,208,228,231, 67,147,159, 7, 62,109,128,133, 40, 0,164, 94, - 11, 66,171,129,131, 59, 13, 85,129, 8, 55,239, 62,209,235,245,250,147,181, 86, 8, 24,134, 54,148, 10, 7,146,228,188,212, 85, - 40, 52,145, 65, 32,147, 65, 40, 51,169,182, 11,177, 38,216,216,216, 72,186,116,233,210,211,223,223, 31, 12,195, 96,229,202,149, -208,106,181,130,114,167, 72,167,211,161,176,176, 16,191,254,250, 43,246,236,217,115,221,212,212,116,103,106,106,237,226,150, 54, -104,206, 92,190,126,111,192,135,239,246, 16, 92,184,178, 13,122,141, 1, 69, 26, 51, 20,171,181, 40, 84,241,160, 21,246, 5, 65, - 92, 5,201, 17,162, 67, 75, 87, 92,186, 22,171,166,244,186,179,245, 17, 67, 4, 65, 64,163,209, 32, 35, 35, 19, 57,133,151,129, -194, 20, 88,233, 10, 81,244,252, 25, 90,126, 52, 6, 90,173,182, 78,174,249,159, 64,111,109,166,228,238, 89, 68,130, 39,176,212, -185,245, 58, 87, 99,170, 8,153, 76, 86, 17,163, 99, 12, 10, 10, 10,176,119,239, 94,180,107,215, 14, 93,187,118, 69, 74, 74, 10, -226,226,226, 48, 96,192,159,189,108,247,238,221, 67, 68, 68, 4, 92, 93, 93,235,224, 98, 78,231,228, 60, 29, 62,120,240, 96,254, -173, 91,183,192, 48, 12,220,220, 76, 33, 55,145,129, 32,133,240,244,180, 6,240, 4, 4, 65,160, 91,183,110,208,233, 82, 13,197, -197, 56, 93, 27,103, 68, 68,196, 64,127,127,255,166,122,189, 62,198,199,199,135,155,150,150,134, 97,195,134,225,224,193,131,229, - 79, 52,152, 59,119,238, 75,255, 41, 42, 42, 82,215,196,231,215,166,249,151, 20, 99,217, 85, 32,116,110,106,106,237,139,166,110, - 61, 1, 0,189, 3,199,163,105,179, 70,200,207,188,223, 84,171,121,241, 46,135,200, 54,255,229, 86, 74, 84,103,137,207,184,172, -164, 43,177, 0,140, 73,220,203,168, 98,127, 79, 79,228,201, 15, 29,249,237,228,167,131, 6,189,195,213, 83,180,193,199,137,107, -122,240,232,169,140,148, 23,137, 63, 33,241,252,163,151, 78,149,154, 5, 22,149,151,151, 7,153, 76,134,184,184, 56,205,160, 65, -131,132, 42,149, 10,177,177,177, 21, 2,203,198,202,194,171, 99,107, 31,143, 37,171,247,156,147, 10,133,194,190,221, 2, 60,163, - 98, 95, 36, 51, 12,145, 80, 35, 47,195,220,138,141,142, 30,104,109,229, 4,229,149, 27,144,118,234, 15,141,134,128, 90, 71, 67, - 75, 1, 6, 14, 31,166,126,109, 32,118,241, 4,205, 0,209, 15,238,193,192, 48,215,217, 91, 8, 11, 22,255, 89,212,165, 69, 64, - 16,196,201,246,237,219, 31,168,236, 50,149,127, 6,160, 1, 80, 91, 76,116,102,101, 17, 85,222,109, 88,211,118,170,240, 54, 88, - 96,133,160,150,145,101, 86, 86, 86, 54,158,238,222, 46, 91,183,111,131, 78,147,143,184,168,157, 40, 46, 76,199,183, 75,111,186, - 58, 56, 56,116, 77, 73, 73, 9, 49,102, 99,201,201,201, 7,143, 30, 61,250,133,159,183,183,127, 99, 71, 71,220, 79,120, 14, 62, - 67,129, 79, 81, 32,117, 26,112, 41, 45, 28,189,104,144,164, 20,105,105,133,216,124,246,143,135,101, 89,221,107,126,250, 38, 56, -104, 52,104, 40, 62,232, 61, 16,140, 94,135,243,157,189, 32,146,201, 32, 52, 51, 67,135, 95,175,148,166,108, 48,232,145,176,108, - 54,248, 82, 25, 44,218,117,171,179,156, 25, 25, 25, 37,215,175, 95, 15,123,252,248,113,107,119,119,119, 44, 92,184, 16, 73, 73, - 73, 96, 24, 6, 25, 25, 25,234,204,204,204,148,236,236,236, 4,130, 32,142,165,166,166,110,133, 17,153,194, 51,220, 56,187, 46, - 92,252,227,203, 86, 45,189,154,247,234, 26,132,147, 39,191, 67, 94, 65, 1,138, 53, 92, 20,169,116, 40, 86, 51,176, 55,113, 69, - 91, 95,127,100,102,107, 17,251, 40, 60, 57,139,111,177,165,158,214, 41,238,221,187, 7,103, 11, 2, 81, 49, 17,176, 82,231,192, -221, 76, 6,255, 78,157, 17, 31, 31,111,148, 51,101, 48,128, 59,109,230,159,163, 5,205,204,204,144,159,159,255,210,255, 36, 18, - 9,236,237,237, 81, 80, 80,128, 35, 71,142,128, 49,238,166,168,215,106,181,240,240,240,192,221,187,119,113,241,226, 69,244,232, -209, 3, 93,186,116,193,149, 43, 87, 16, 22, 22,134,136,136, 8, 16, 4, 1, 75, 75,203,114,183,173, 70,203,237,206,157,123,135, -101, 50, 98,222,184,113,147,125, 70,143, 30,141, 95,127, 61,128,241,227,220, 65,144, 66, 16,132, 16,239, 12,242,192,162,197, 97, -104,219,182, 27,172,172,248,184,120,241, 81, 60,151,107,186,199, 8,177,250,243,138, 21, 43,184, 34,145, 8, 90,173, 22, 69, 69, - 69,200,206, 46, 77, 71, 85,157,131,165, 82,169,106, 76,172,246, 40,242,201, 15,185, 5, 76, 46, 89, 18,254,110,150, 62,210,183, - 71,223,100,244, 14, 28,135, 11, 39,119,226,210,185,139,176,226, 61,143,167,196, 69,103, 50,227,179, 10, 83,139,220, 54,123, 5, -124,194, 81, 22,159,219, 52,229,157, 24,142,163,130, 62, 60,111, 99, 65, 94, 93,229,205,137,218,123,226, 4,131,119, 58,181,107, -227,218,194,201, 94,144,147,157,129,163,191,157,121,164,123,254,235,201,178, 11,149, 49, 86,228,162,181,107,215,126, 7, 0, 52, - 77,239, 90,189,122,245, 39, 95,126,249,165,117, 74, 74, 74,133,192,202,200,202,185,212, 97,224, 52, 42, 59, 47, 95,187, 99,245, - 87,195,196, 34,161, 96,254,178, 29, 87,244, 28,220,170,241,226,194,229,142,249,122,195, 47,153, 71, 14,239,228, 88,139,248,184, - 54,103, 1,226,254,184, 12, 29,193, 71,223,243,183,161,213, 81, 40,200,200,198,165,113, 83, 96,174,176,192,233,236, 88, 42,191, -176, 96, 12,123,143, 97,193,226, 63,139,218,180, 72,102, 37, 65,148, 3, 32, 33, 56, 56, 56,171,146,187,148, 9,224, 30, 0,191, -178,223,101, 86,249, 95, 38, 65, 16,119, 25,134,105, 93,137, 39,179,146,208,170,252, 89, 91,229, 55,247, 94, 69, 96,213,138,172, -172,172,140, 59, 97, 15,113,253,194, 70, 24,244, 26,228,151,217, 86,169,233,106,200,229,242,155,229,217,196,171,129, 15, 94,206, -149,193,168,213,234,247, 86,175, 89,115,235,211, 49, 31,218,117,233,217, 19, 47, 30,220,135, 38, 39, 11, 28,138, 2,135,224,161, - 40, 75,132,244,180, 2, 4,159, 56,147,161, 82,171,223,171,230, 6, 81,149,179, 34,200,157, 33, 8,136, 76,229, 16, 74,165, 16, -154,202,255,116,172, 8, 2, 2,153, 9,120, 82, 25, 56,124,129, 49,229, 68, 73, 73,201,208,137, 19, 39,222, 63,125,250,180,249, - 7, 31,124,128,119,222,121, 39, 34, 47, 47,175,123,110,110,174,177,241,102, 47,115, 30, 57, 66, 25,124, 6, 13, 94,191,113,235, -141,177, 99,199, 90,188, 51,120, 61, 34,162, 30, 33,175,216, 6, 0, 96,111, 37, 69, 91,247,217,200,200,214,224,220,153,147,185, -180, 65, 61, 20,143, 14,234,107,226,100, 24,134,177,178,178,122,201,149,227,112, 56,184,114,229, 10,102,204,152, 1, 43,147, 43, - 40, 76,136, 67,139,206, 93,209,123,244, 24,140, 31, 63, 30, 28, 14, 7,150,150,150, 85,221,140,191,236,123,101,228,231,231,163, -113,227,198, 56,191,213,221, 91,171,206,224,251, 91, 0, 4, 76,117, 23, 46, 13,120, 20, 26, 26, 90, 4, 96,171,155,155,219,225, - 42, 35, 26,255,194, 73, 16,196, 55, 75,151, 46,221,216,177, 99, 71,177, 76, 38,131,155,155, 27,174, 95,191,142,235,215,175,227, -234,213,210,248, 56, 75, 75, 75, 88, 88, 88, 32, 47, 47, 15, 73, 73, 73, 42,130, 32,190,169,133,147, 46, 40,224, 12,185,112,225, -216,237, 65,131,222,179,234,215,175, 61,236,236, 10, 97, 48,100,129, 32,249, 16,138,108,176,117,235, 50,100,164,231,224,198,205, -155, 57, 69, 69,220,161,225,225,127,153,130,168,186,114,234,206,158, 61, 11,145, 72,132, 95,127,253,213, 96,107,107,203, 53, 51, - 51,171,209,193, 82,171,213,194,154, 56, 39,204,121,152, 2, 96,241,231,195, 28, 86,221,120,148, 62, 4,192,190,166,205, 28,113, -233,220, 69, 92,189,116, 99,110, 59, 31,122,237,192, 81,109, 22,137,122,188, 63,219,171,213, 39, 28,153, 92,129,221, 71,127,229, - 68,133,111,251, 94, 93,252,208, 5, 27,143,206,174,227, 24, 49, 0, 80,148,145, 62, 47,248,199,117,187,130, 23,126, 39, 94,249, -211,134, 84, 85, 86,218,215,101,162,159,169,197,189,170,224,140,143,143,223, 12, 96,115, 37,167,121,239,178,101,203, 66, 63,252, -240, 67,235,114,135, 50, 51,234,196,205, 76,224,166,119,183,241,223,118,104,237,237,254,253, 79,191,156, 75, 76, 74,255, 37, 63, -186, 34, 7,214, 95,202,121,235,214,173,220, 86,173, 90, 77,156, 61, 39,104,219,194, 69, 11, 8,143,153,115, 17,115,253, 46, 52, - 42, 29,116, 12, 7,122, 16, 8, 95,242, 35, 76,172,229,184,198,228, 48, 26, 14, 57, 33,238,175, 65,254,181,182,207, 6,130,229, -100, 57, 89,206,183,147,179, 54, 3,225,110, 53, 95, 87, 55,147,198,221,218,254, 87, 3,207,223, 2,163, 4,150,131,131, 67,151, -222, 61,219,161, 99,239,201,208,105,242, 16,247,104, 7,138, 10,211,225, 96, 39, 68, 92, 98, 65,251, 50,213,105, 20,202, 50,179, -183,251,126,205,218,163,125,219,180,246,116,115, 80, 8,205, 26, 59, 67,106, 99,139,172,204, 76,220, 14,143,209,111, 56,119,233, -161, 74,173, 54,106,170, 28,154,166, 25,134, 97,192,231,243,193,112, 56,240,154, 54, 7, 36, 73, 86, 25, 45, 72, 64, 30,208, 9, - 36,151, 7,189,145, 49, 67, 74,165, 50,153, 32,136,161,211,166, 77,251, 99,215,174, 93,100,183,110,221, 90,158, 56,113,130,126, -149,202,206,126,248,123, 44,199,103, 72,215,181, 63,111, 56,226, 31,208,206,185,113,147,198,194,142,141, 76,161,211, 83, 72,207, -200, 70,200,141, 40, 77,108,212,189, 36, 90,167, 29,158, 25, 93,115, 22,247,178,155, 96,162,189,189,189,109, 80, 80, 16, 12, 6, - 3, 40,138,130,193, 96, 64, 86, 86, 22, 34, 34, 34,208,170, 93,123,120,124,252, 9,114,114,114,176,125,251,118, 56, 58, 58, 98, -192,128, 1, 40, 44, 44, 68,104,104,104, 98,205,174, 3, 12,243,190, 25,197, 5, 0, 30, 15,134,175, 3, 3,175,120,123,123,119, -122,199, 47,131, 63,121, 90,169,179,181,124,217, 40,254,149, 43, 87, 14, 11,133,194,205,207,159, 63, 47,168, 69, 96,195,197,197, - 69,160, 86,171, 91, 50, 12,195, 45, 40, 40, 88,163,209,104,198,206,154, 53, 75,177, 98,197, 10,248,250,250, 34, 43, 43, 11, 22, - 22, 22, 80, 40, 20, 40, 42, 42, 66,124,124, 60,165,211,233, 54, 81, 20,181, 40, 35, 35, 35,179,182, 58, 8, 11, 11,123, 78, 81, - 45,219,167,167,109, 60, 58,121, 82, 31, 55,189, 62, 64, 32, 55,237, 12,134, 49, 32, 47, 55, 9, 4,115, 95,119,236,248, 31,207, -242,242, 56,239,133,135,135,199, 26,115,140, 72,146,156,244,251,239,191,163,124,170,156,212,212,212, 56,146, 36,107,116,176,140, -193,234, 35, 41,106, 0,251,135,245, 85,204,204,207,188,223,220,138,247, 60,190,157, 15,189,118,245,145, 20,181,141, 89,201,146, -148,204, 43, 49,169, 69,231, 54,239, 62,250, 43,103,204,187, 67, 41,133, 44,118,174, 85, 35, 24,147, 25,159,241,245,245,117, 34, -201,156, 38, 25,217, 79,194,198, 79,248,244,125, 83,190,234,180,175, 67, 86, 51,131,173,151, 40, 42, 42, 42,161, 30, 46, 86,229, -182, 31, 3,160,203, 15, 63,252,112,174,170, 53,158,145,149,115,169,125,224,103, 76, 94, 94,126,100,102,244,137, 7,117,113,149, - 79,127,243,209,135,227,183, 76,248,120, 34,199,103,250, 87, 72,190,252, 7, 96,208, 67,121, 53, 4, 18, 19, 10, 39,179, 18,168, - 18, 14, 57, 49, 60, 60,156,205,226,206,130, 5,139,127, 13,140,142,250,118,105,234,112,206,165,137, 67, 31,151, 38,246, 0,128, -184,231,169,136,123,158,114, 62, 46, 62,165,111, 3, 21,110,197,100,207, 68, 89, 42, 6,198,184,201,158, 95,226,244,246,246,142, - 32, 73,210,190, 62, 59, 77, 81, 84,114, 84, 84, 84,128, 49,229, 84, 40, 20, 31, 52,106,212,104, 89,106,106,234,209,228,228,228, -207, 95,139,186, 47,155,236,153,228,240, 3, 25,134,241, 5, 64, 16, 36,105,204,100,207, 21,156,246,246,246, 45,196, 98,241,102, - 46,151,235, 84,126, 28,203,187,241,116, 58, 29, 39, 63, 63, 95,164,213,106, 57, 0, 8, 62,159,111,144,201,100,106, 30,143,103, -160, 40, 42, 81,175,215,127,154,154,154,250,192,216,167, 16, 79, 79, 79,105, 96, 64,116, 81,249, 20, 58,243,190, 25,133,101,187, -106,109, 59, 21,156,177,177,177,205,205,205,205, 71, 16, 4, 49,140, 97, 24,247,194,194, 66,205,119,223,125, 23, 25, 18, 18, 82, -224,228,228,212,175,115,231,206,196,253,251,247,145,144,144,192, 20, 21, 21, 29, 33, 73,242,155,148,148,148,184,122,182, 37,178, - 67,135,150, 35, 77,100, 24, 72, 51,240, 3, 24,130, 32,136, 7, 69, 69,196,105,133,162,201, 47, 71,142, 28,161, 26,250, 4,230, -239,239,127,170,168,168,104, 64,108,108,108, 77, 79, 85, 85,207,163, 26, 57, 87,126,237,243, 77,251,174,157,134, 94, 15,185,122, -108,206,210, 71,139, 43,175,155, 58,196,124,252,168,169, 51, 86,236, 91,255,211, 87,235,143,231,238, 48,166,156,254,254,254, 77, - 1,140,100, 24,198,155, 32, 8, 55,154,134,136, 32,152, 28,130, 32,162,104,154,190, 71,211,244,239, 15, 30, 60, 72,125, 27,158, -104, 43, 79,246, 76, 80,148, 25, 69, 16,198, 78,246,204, 58, 4, 44, 39,203,201, 58, 88,111, 13,234,147,154,200,232, 12,220,113, -241, 41,125,227,226, 83,208,172, 89, 51,230,233,211,167,245, 18,103, 53,149,179, 44, 67,251,129, 87, 33,121,244,232,145,255,223, - 89,153, 74,165,114,191, 82,169,220,255, 90, 73, 67, 66, 12, 25,192, 14,148,190, 26,132, 50,129,212,214,152,223,150,148,148, 32, - 47, 47,175,193,197,141,142,142, 46, 30,210,238, 79,103,139,203,133,193,216,255,246,233,211,231,133, 78,167,187, 8, 32, 25,128, - 25,128, 28,189, 94,127, 54, 43, 43, 43,157,162,168,128, 23, 47, 94,124, 91,230, 68, 46, 78, 79, 79,111,104, 30, 9,250,198,141, -200,125, 0,246,253,117, 85,196, 43, 29,170,136,136,136,129, 10,133, 34,194,210,210,210, 85,173, 86, 11,212,106, 53,143, 97,152, -138,182, 47, 22,139, 51,203, 51,166,215, 5, 83, 57,118,115,136,108, 75,115, 57,241, 23,167,198,202, 1,191,170,138, 31, 54,183, -114,192,175,245, 40, 91,188,159,159,223, 94,146, 36,155,208, 52,109, 11, 64,206, 48,200, 98, 24, 38,139,162,168,228,135, 15, 31, -166,190, 45, 23,165, 50, 1, 21, 8, 22, 44, 88,176, 96,241,218, 20, 46,203,201,114,178,156, 44, 39,203,201,114,178,156, 44,231, - 63, 30, 12,195, 24,253, 34,193,130, 5, 11, 22, 44, 88,176, 96,193,226,181,130,168, 69,133,214,167,111,181, 33, 74,246, 33,203, -201,114,178,156, 44, 39,203,201,114,178,156,255, 57,206,186,184,223,218,216,174,250,196, 96,253,221, 96,237, 83,150,147,229,100, - 57, 89, 78,150,147,229,100, 57,255, 21, 96,187, 8, 89,176, 96,193,130, 5, 11, 22, 44,222, 32,106, 28, 69,216,180,169,163, 23, - 73,209, 29, 25,134,228, 48, 36,163, 39, 10, 84, 7,227,170, 36,217,108,212,168,145, 25,143,196, 32,130, 97,164, 4, 65, 83, 52, -135,188, 30, 31,159, 28,101,204,134, 61, 61, 61,249, 0,198,242,120,188, 78, 58,157, 78,193,227,241,148,106,181,250, 26,143,199, -219, 21, 29, 29,173,123,155, 42,169, 99,199,142, 35,143, 28, 57, 98, 22, 24, 24,168,209,233,116, 6, 62,159,207, 61,112,224,128, -112,220,184,113,121,215,175, 95,111,208, 40,200,150, 45, 91,118, 95,190,124,121,211,158, 61,123,162, 83,167, 78,197,253,251,247, -231, 7, 4, 4,240,231,204,153, 19, 31, 25, 25,121,185, 62, 92, 54, 54, 54, 94, 92, 46,119, 15, 65, 16, 28,134, 97, 62,170,148, -130,225,239,192, 7, 0,134, 3, 80, 0, 72, 3,112, 8, 64, 67, 71, 89,246, 3, 48, 8,128,111,217,242,125, 0,191, 3, 56,251, - 10,229,235, 7, 96, 16, 65, 16,126,101, 79, 27,247, 94, 35,167,111, 25,231,107, 43,231,171,238,187,191,191,255,119, 2,129, 96, - 2, 0,104,181,218, 29, 50,153, 44,184,186,223,133,132,132,104, 81, 67,234, 19,207, 38, 96,162,126,247, 0, 0,120, 13,122, 12, - 0,168,107, 57,250,121,195, 70, 17, 51, 81, 30, 76,117,188,132,215,227, 6,143, 74, 86, 40, 20, 83, 6, 12, 24, 48,231,236,217, -179,223,167,164,164,108, 1, 11, 22, 44, 88,188,173, 2,171,105, 83, 71,175, 97, 67,222, 91, 58,233,211,201, 4,135, 67, 34,250, -241, 99,238,212,233,159,247,241,176,181,117,144,170,213,158, 12, 64,171,196,226,135, 42, 85, 73,202,198,245, 63,155,184, 55,111, - 78, 81, 20,141, 77,155, 55,246, 63,114,252,232,215,117,137, 44,107,107,235,166, 60, 30,111,205,244,233,211,109,250,244,233, 67, -218,218,218, 34, 57, 57, 89,126,236,216,177,102,219,183,111, 15,180,182,182,158,153,153,153, 25,223,144, 29,178,179,179,235,172, - 48, 71, 63,177,144,233,142, 2, 2, 42, 3,113, 89,169,101,206,166,165,165, 93,109,104, 37,105,181,218,105, 37, 37, 37,237,188, -188,188,232,141, 27, 55, 18, 19, 39, 78,100, 8,130, 32, 85, 42,213, 78, 52, 48,205,132, 88, 44, 94,223,179,103, 79,183, 78,157, - 58,197, 93,191,126,125, 32,128, 83,195,135, 15,119, 17,139,197,177, 0,220,235,195,197,225,112,118, 70, 69, 69,249,169, 84, 42, - 4, 4, 4,108, 7,208,234,111,106, 47,219,205,205,205,245, 27, 54,108,216,220,178,101, 75,215,220,220,220,226, 79, 63,253,180, -215,131, 7, 15,122, 0,248,184, 30, 60, 82, 0,107, 37, 18, 9,103,230,204,153,103,222,125,247,221,123, 82,169, 84,246,228,201, - 19,222,140, 25, 51, 62, 74, 76, 76, 28, 6, 96, 58,128,226,250,114, 90, 90, 90,138,151, 44, 89, 18,222,161, 67,135, 12,145, 72, - 36,142,143,143, 39,102,206,156, 57,241,201,147, 39,175,194,201, 95,180,104,209,245,110,221,186,197, 9,133, 66, 73, 98, 98, 34, -231,203, 47,191, 28, 31, 30, 30,222, 96, 78, 51, 51, 51,193,119,223,125,119,179,107,215,174, 9, 34,145, 72, 26, 23, 23, 71,206, -154, 53,235,147,167, 79,159, 26,205,217,165, 75,151,145, 42,149,106, 97,104,104, 40, 0,160,125,251,246,223,105,181,218,249,127, - 17, 53, 12,131, 78,157, 58,169, 73,146,156, 16, 26, 26, 90,109,123,221, 21, 54,123, 36, 0,124,249,109,249,114,233,123,117,203, - 99, 3, 86, 30, 32,188, 30,215,171,225,120, 54, 41, 21,119, 27,175,126,246, 33, 0, 76,253,178,244,251,141, 87,203,215, 79, 97, -234, 35,218,236,237,237, 63,109,211,166,205,188,219,183,111,239, 14, 8, 8,152,177,101,203, 22, 94, 96, 96,224, 18,154,166, 93, -251,245,235, 55,236,230,205,155, 43,159, 60,121,178,158,189,196,179, 96,193,226,173, 18, 88, 36, 69,119,156,244,233,100, 98,196, - 7, 35,211,148,233, 25,180,204,196,244,131, 67,135, 15, 75,154, 55,111, 78,170,215,174,133, 33, 43, 11,212, 23, 95,116, 8, 9, - 9,209,127, 54,243, 11,149, 70, 93,178, 83, 97,107, 35, 57,184,255,128,221,209, 95,143,116, 4, 16, 85,155,115,197,227,241,214, -252,250,235,175,118, 77,155, 54,133, 86,171, 69,102,102, 38,116, 58, 29,222,125,247, 93, 78,187,118,237,236,198,143, 31,191,198, -202,202,234,189,250, 56, 89, 86, 86, 86,182,238, 78,188,211,163,134,247,109,222,189, 75,128,216,206,161, 9,144, 76, 35, 37, 46, -182,245, 31,183,194,167, 31,190,112, 37,230, 73,190,110, 64, 86, 86, 86,122,125, 43, 41, 59, 59,123,206,167,159,126,122,196,215, -215,215, 90, 40, 20,194,214,214,150,248,228,147, 79,210,149, 74,229,162,134, 86,124,121,118,112,146, 36,169, 42,239, 13,161,115, - 52, 53, 53,133, 92, 46, 7, 0,135, 87,105, 16,195,134, 13,227, 36, 38, 38, 78,160,105,218,179,242,247, 74,165,210,197, 96, 48, -100, 61,127,158,224,167,214,234,218, 78,249,114,225,146, 17,131,186,203,111,222,188, 73, 14, 28, 56,144,119,229,202,149, 15,234, -225,100,173,117,119,119,127,176, 98,197, 10,109,116,108,188,207,249, 43, 55, 73, 27, 11, 41,221,180,113, 99,217,163, 71,143,248, -193,193,193,153,193,193,193,107, 1,140,175, 71,209,215,246,238,221, 59,105,222,188,121,156,232,152,103, 46, 87,111, 70, 66, 46, - 19, 80, 78,142,246,162,155, 55,111,114, 55,110,220,136,175,191,254,186,222,156,221,187,119,143, 93,188,120, 49,147,150,145,211, - 44,254,185, 18, 38, 50,129,193,210,210, 82,124,229,202, 21, 98,215,174, 93,218, 25, 51,102,172,165,105,186, 94,156, 29, 58,116, -120,182, 96,193, 2,226,241,211,248,102,215,110, 70, 66, 38,229, 27, 26, 59, 57,138,238,220,185, 67,252,252,243,207,250,239,190, -251,206,168,114, 50, 12,179,105,229,202,149,248,237,183,223, 0, 0,251,247,239,135,139,139,203, 75, 13, 72,165, 86,131, 32, 8, - 36, 60,127, 46,153, 52,105,210,166,234, 30, 8,162,126,247,192,174, 48, 96,236,216,177,105, 70,237, 65,244,202,122,187, 86,229, -194,106,242,228,201,201, 53,252,236,195,245,171,140, 23, 89, 29, 59,118,156,115,240,224, 65,171,195,135, 15,127,121,236,216, 49, - 0,128, 68, 34,145,172, 91,183,110,202,224,193,131,241,241,199, 31,207, 97, 5, 22, 11, 22, 44,222, 58,129,197, 48, 36,135,195, - 33,145,145,158,165,239,221,171,207,248,117, 27, 54, 8, 5, 2, 1,180, 90, 45,138, 47, 93, 2,163,209,192, 84, 44,198,128, 1, - 3,120, 62, 62, 62,242,137,227,199,127,146,145,158,182,153,195, 33,237, 24,134,228,212,177,205,177,211,167, 79,183,105,218,180, -233, 75,209,248, 20, 69, 33, 61, 61, 29, 38, 38, 38,120,255,253,247,173,246,238,221, 59, 22,128, 81,118,191,141,141, 77, 99,183, - 38, 86, 55, 14,111,251,210,206,198,140, 0, 50,127, 5, 94,196, 2,251, 68,112,179,113,134, 91,143, 46,226, 65,109,125,252, 70, -174,216, 21, 73,146,100,135,140,140,140,132,250, 84, 82, 66, 66,194, 53,173, 86, 59, 65,173, 86, 31, 7, 64, 94,191,126,157, 73, - 76, 76,156,148,158,158,254,162,161, 21, 79, 81, 20,242,242,242, 64,211, 52, 7, 64,197, 59,101,228, 84, 62,127, 7,134, 13, 27, -198, 73, 74, 74,250,212,211,211,179,217,214,173, 91,145,145,145, 1,145, 72, 4,154,166,209,190,125,123,167, 94,189,122, 61,203, -204,201, 55, 55, 24, 40, 93,242,139,231, 1,203, 86, 70,102,250,121,185, 95, 59,124,248,112, 75, 43, 43,171,247,141, 20, 88,253, - 76, 76, 76,184,223,127,255,189,202,206,209,101,132,194,201,141,119,227,238,131, 24,190, 68,192,100,231, 23, 22, 70, 70, 70,198, - 44, 92,184,176,203,233,211,167, 51, 30, 62,124,216, 15,198,117,153,245,179,180,180, 20,207,157, 59,151, 48,181,180,239,221,169, -139, 19, 47,252,126,212, 51,129, 68, 64,119,234,212,105,208,141, 27, 55,182,207,154, 53,171,229,169, 83,167, 10,110,222,188,105, - 52,167,133,133, 5,111,209,162, 69,148,173,189,243, 96,167, 38,205,120, 14,118, 86, 94, 0,240, 36,230,233,182,244,244,244,103, -147, 38, 77,106,123,230,204,153,194,179,103,207, 26,205,105,106,106,202,255,238,187,239, 24, 79,159,150,227,189,125, 91,145,191, -159, 15,189, 41,150, 10,168,130, 98, 85, 81, 84, 84,212,179,175,190,250,170,205,169, 83,167, 10,239,222,189, 91, 39,103, 73, 73, -137,137,163,163, 35,236,236,236, 64,171, 84, 40, 40, 40,192,209,163, 71, 81, 88, 88, 8,138,162, 32, 22,139,241,211,217, 28,168, -159,254,142,205,107, 22, 65,165, 82,153,188,142,118, 82,222,189, 87, 31,113, 85,139,176, 66, 37,225,245,225,228,206,235,152,218, -186, 11,203,157,171,107,215,174, 37, 31, 62,124,216,198,213,213, 21,221,186,149, 78,224, 62,126,252,120,244,234,213, 11,191,253, -246, 27,206,159, 63,159, 56,100,200,144,248,240,240,240,149,201,201,201,155,216, 75, 61, 11, 22, 44,254,223,168,214, 46, 97, 8, -162,248, 81,116, 52, 79,102,102,246,225,186, 13, 27,132, 60, 30, 15, 9, 9, 9,136,138,138, 66,201,165, 75, 80,221,184,129,140, -140, 12, 20, 22, 22,194,218,218, 26,193, 43, 87, 74,249, 98,233,248,216,167, 79, 57, 12,201, 84,158,160,248, 47, 67, 45, 5, 2, - 65,167, 1, 3, 6,144, 53, 13,117, 76, 75, 75, 67,159, 62,125,184, 92, 46,183, 83, 13,101,174,202, 73,216, 91, 19,191, 31,218, - 50,211,206,134,251, 0,120, 58, 3,200,187, 10, 24,242, 0, 85, 17,240,252, 1,112,236, 7, 56,230, 60, 37,246, 77, 31,110,235, - 32,230,255,142,191,102,161,175,117, 72,168,131,131,131,139,171,171,235,214,161, 67,135,146, 0,208,169, 83, 39,194,213,213,117, -179,131,131,131, 75, 45,127,171,149, 83,173, 86,223,202,205,205, 37, 6, 14, 28,104,217,161, 67,135, 11, 3, 7, 14,180, 4, 64, -168,213,234, 91, 13,229, 44,131,101,247,238,221,179,155, 54,109,186,223,217,217, 89,104,196,239, 43, 56, 19, 19, 19, 39,120,120, -120, 52,219,186,117, 43,135,195,225, 96,203,150, 45, 56,116,232, 16, 66, 67, 67,145,153,153, 41,153, 53,107,150,217,137, 75, 17, - 23, 47, 92,189,119,114,230,228, 79,233,222,173, 90, 42,132, 89,105,217,150,150,150,253, 1,216, 25, 89,206, 65,211,166, 77, 59, - 29, 17,245,220,142,224, 8,133,124, 62, 95,100,103,107,101,163,176,177,109,172,176,177,109,110, 34,145,152, 23, 23, 23, 39, 30, - 63,126,156, 65,105,140,146, 81,156, 11, 23, 46,188, 19, 21,155,104,195,144,124, 1,159,207,227, 91,153,155, 89, 12,123,167,207, - 32, 0,144, 8,133,146,226,226, 98,229,222,189,123,235,197,185, 96,193,130,171, 41,233,121,118, 92, 30, 95, 40, 18, 10, 43,102, - 9,183, 48, 55,117,144, 73,165, 18,173, 86,155,180,117,235, 86, 67,125, 56,231,207,159,127, 61,250,105,162, 45, 73,114, 56, 36, - 73,112,173, 45,205,173, 44, 45, 45, 21,150,230, 22, 14, 98,129, 64, 90, 84, 84,148,188,127,255,126,202, 88,206,244,244,116, 60, -126,252, 24,141, 90,183,198,197,139, 23,209,168, 81, 35, 12, 31, 62, 28, 35, 70,140,128, 88, 44, 70, 27,179,103,120,183, 95, 7, - 60,123,246,172,198,227,110,140, 96,178,183,183, 15,169, 79, 91, 2, 74,187, 5,107, 19, 87, 85, 57,107,248,221,195,170,206,213, -209,163, 71,173, 86,175, 94,221,242,243,207, 63,143, 59,122,244, 40,124,125,125, 17, 29, 29, 13, 7, 7, 7, 28, 56,112, 0,159, -125,246, 89, 92, 80, 80, 80,203, 67,135, 14,217,250,248,248,204,109,224,121, 84, 95,176,156, 44, 39,203,201,162,110,129,165,167, -241,251,180, 25,179, 74,118,239,222, 45, 17, 8, 4,120,241,226, 5,210,210,210,112,236,215, 95,169, 81, 45, 90, 20,126,212,178, -101,193,177, 95,127,101,116, 58, 29, 24,134, 65,179,102,205, 48, 96,192, 0,241, 39, 19, 39,103, 16, 5,170,131,181, 62,209, 50, -140,141,181,181,117,197,164,185, 47, 89, 91, 99,199,194, 96, 48,192,196,196, 4, 4, 65,216, 24,179, 3, 10,133, 98,248,248, 47, -123, 54,146, 59,203,211,153,180,157, 57, 0, 9,112, 77, 0,174, 28,144,200, 1,177, 9, 32,148, 66, 19,118, 35,135, 33, 58, 37, -244,245,127,223, 65,161, 80, 12,175, 79, 37, 89, 89, 89,205, 63,124,248,176,245,131, 7, 15,152,194,194, 66,100,100,100, 48, 95, -125,245,149,181,149,149,213,252,134, 86,124,106,106,234,146,241,227,199,167, 13, 29, 58,212,108,247,238,221, 78, 67,135, 14, 53, - 27, 63,126,124, 90,106,106,234,146, 87, 57,160, 60, 30,143,115,233,210, 37,139, 47,191,252,114,164, 94,175, 15,235,209,163, 71, -118,203,150, 45,195,108,109,109,157,235,250, 47, 77,211,158,229,226, 10, 0, 56, 28, 14, 4, 2, 1, 68, 34, 17, 76, 77, 77,243, -226,227,227, 13,141, 45,249, 92,170, 56,183,196,217, 84, 32,234,228,231,101,111,227,232,244, 94,113,113,113, 56, 0,165,145, 69, -244,237,215,175, 31, 87, 7, 33,166,124,220,171,249,164, 49,157,154,109, 94,245,113,247,181,223,127,212,254,199,133, 31,118, 93, - 50,111,212, 72,130, 54,232,157,157,157, 93,202, 3,213,235, 2, 65, 16,126,157, 59,119, 22, 27, 56, 66,242,118,100,108,220,147, -167, 73, 25,131,250,118,106, 87,177, 65,127,255, 17,150,150,150, 3,154, 54,109,218,141, 32,136,190,198,150,179, 91,183,110, 66, -158, 88, 74, 58,217, 91,185, 91,152,201, 92,203, 87, 88, 91, 91,247,181,181,179,251,152, 96,168, 98,133, 66,225, 40, 20, 10,253, -140,229,236,209,163,135,208,192, 17,146,118,214,102, 54, 54,150,102,150, 67,250,117,233,212,163, 83,235, 14, 29,218,183,233,237, -223,186,245, 88, 80,250, 18,103,103,103, 7, 99,247,253,248,241,227,248,249,231,159,209,209,203, 11,206,206,206,176,182,182,198, -165, 75,151,112,233,210, 37, 72,165, 82,228,229,229, 97,211,166, 77, 56,123,246,236, 43, 95, 44,202, 5, 81,121, 96,250,235, 64, - 85,145, 85,151,216,187,118,237,218,209,195,135, 15,195,213,213, 21,227,198,141,115,217,185,115,103, 92, 92, 92, 28,100, 50, 25, -238,221,187,135,217,179,103,199, 5, 5, 5,185,140, 29, 59, 22,187,118,237,194,189,123,247,118,179,151,121, 22, 44, 88,188, 9, -148,119, 17, 50,101,174, 14, 3,128, 72, 74, 74,202,243,240,240,112,112,117,117, 37,181, 90, 45,242,243,243,113,238,204, 25,234, -192,161, 67,167,180, 90,237,116,146, 36,249,187,246,236,217,100, 99,107,219,125,216,240,225,132, 94,175, 71,207,158, 61, 5,151, - 46, 93,178,124,144,148, 84, 88,219, 6, 57, 28, 78,133,123, 52,101,202, 20,172, 89,179, 6, 0, 48,102,204,152, 63, 5,158, 94, - 95, 62,137,110,157,144,152, 82,129, 93,123,121,155, 36, 73,127, 54, 81,119, 40, 40,108, 26,227,112, 67, 86, 40,109, 3,174,136, - 11,137, 12,180, 1,134,216,162,118,225,113, 47,154,120,138, 78,103, 52,233,232,222, 6,135,110, 30, 11, 68,233,232, 55,163, 32, - 22,139,219, 72,165, 82, 68, 71, 71,231, 4, 4, 4,228,201,229,114, 83, 55, 55, 55, 43,177, 88,220,166,161, 21,159,145,145,241, -156,203,229,118,125,239,189,247,166,146, 36,217,139,166,233,139,217,217,217,235, 51, 50, 50,158, 27,121, 99,154,204, 48,204, 2, - 0, 71,202,191,211,233,116, 32, 73, 18, 12,195, 96,208,160, 65, 88,182,108,153,215,197,139, 23, 17, 26, 26,106, 49,106,212,168, - 91, 10,133, 34,143, 32,136,143, 83, 83, 83,107,116,201,178,179,179,177,113,227, 70,112, 56, 28,152,153,153,193,196,196, 4, 34, -145, 8,221,186,117, 75, 95,177, 98,133,219,225,195,135,245,217,205, 50, 24, 65, 81,126,177,165,216,205,158,180,178,110, 58,117, -226,167,183, 1, 28, 54,118,223,101, 50,153,137, 9, 71, 85,196, 97,212,156,213,107, 55,115, 37, 92, 18, 82, 30, 31, 34,178,136, -152,247,221, 98, 70, 68,112, 36,168,199, 60,153, 0,192,231,243, 37,166, 2,104,249, 18, 30, 37,147, 8,136,215,113,114,136,197, - 98,169,140, 15,109, 77,235, 5, 36, 87, 0, 64, 68, 16, 68,137,177,156, 34,145, 72, 38, 23, 48,154,154,214,155,240,248,124,130, - 32, 68,168, 33,200,125, 88, 79, 48,135,215,148, 10,156, 86,127,158, 50,160, 40, 10,173, 91,183,198,161,223, 46,226,220,213, 71, -200, 73,142,194,135,195,251,163,113,227,198,160,105,186,214, 50,149,199, 96, 25,241, 80, 0,123,123,251,144,212, 11,166,117,254, -214,216,174,193,202,156, 94,131, 30,215, 58, 58,209,193,193, 97,162,175,175,239,152, 99,199,142,161,123,247,238, 8, 12, 12,132, -187,187,187,203,168, 81,163, 0, 0, 93,186,116, 65,112,112,176,203,200,145, 35,113,252,248,113,156, 62,125, 26, 1, 1, 1, 51, -194,194,194, 50,148, 74,229, 6,246,114,207,130,197, 91,143,151,180,200,191, 69, 96,253, 5, 66,157,206, 93,189,113, 35, 74, 46, - 94,132,224,194, 5,156,242,243, 43, 50, 24, 12, 95, 40,149,202, 36, 0,176,177,177,153,121,248,200,145,235,125, 46, 95,150,107, -163,163,209,232,225, 67,112,155, 55,111,105,236,134,131,131,131, 43, 68, 1, 0,236,222,189, 27, 5, 5, 5,200,207,207,135,193, - 96,244, 92,194,224,241,136,142, 54, 86, 78, 80, 34, 22, 52,151,107,242,220, 75,219, 65,170,146,167, 52,122,110, 85,148,207,243, - 35, 98, 50,252, 76,212,133,250,182, 36, 95, 11,109,158, 26,246,150, 14,224,146,220,142,245,169,164,114, 71, 71, 44, 22,231,132, -135,135,191,211,185,115,231, 19, 0,172,202,191,127, 5, 23,235,105,106,106,234,140, 6, 89,143, 36,185,224,202,149, 43, 54,135, - 15, 31,254,108,221,186,117, 12, 0,104,181,218,138, 32,121,173, 86, 11, 46,151, 11,154,166, 33,149, 74,193,229,114,109,143, 29, - 59,102, 59,120,240,224,245, 0,106, 60, 78, 18,137, 4,182,182,182,224,241,120, 48, 53, 53, 69,113, 65,174,116,227,210,249,221, - 36,230,182, 22, 51,102,124, 65,142, 29, 59,246,209,186,117,235, 28,237, 93,155,121, 63,126,252, 56,241,131,113,227,175, 31, 56, -112,160, 8,198, 7,184,223,143,139,139, 19,120,123, 54, 19,157, 58, 82, 68, 75,184, 12, 36, 89,223, 67, 34, 86, 64, 32,112,132, - 68, 40, 4, 95, 32,176, 82,166,165,165, 51, 12,243,204,168, 51,146, 97,238,197,199,199,115,154, 56,217, 9, 10, 75, 12,133, 18, - 14,101,242, 52,226,126, 76, 51,127,223,230, 0,160,142,190,127, 69,216,196, 85,160,204,205, 23,218,219,219, 71,213,163,156,124, - 91, 91, 91,193,163,232,167, 91,173, 44,228, 78,182,182, 54,189, 1, 64,175, 42,121, 68,104,213,169, 28, 46, 87,145,147,155,155, -169, 86,171,159, 26,203, 25, 19, 19,195,117,109,236, 40, 60,122,242,194, 14, 27,185,172,145,149, 88,104, 43,151,242,101, 2,138, - 42, 22,208, 84, 42, 95, 40,180, 75, 77, 75,203, 98, 24, 38,166, 38,146,242,128,113, 96,251,222,178,253, 47,119,119,112, 35,142, -129,185,181, 61,178,147,158,224,210,239,199, 49,102,202,103, 70,157, 79,171, 22,143, 59,176,106,241,184, 26,211, 51, 84, 17, 68, -175,126,229,137,246, 12,169,202,169, 84,214,126, 65,237,215,175,223, 55, 91,182,108,145, 84, 80, 68, 71,163, 83,167,210, 72,130, -133, 11, 23,162,111,223,190,112,115,115, 67, 84, 84, 20,156,157,157,113,244,232, 81,112, 56, 28,222,196,137, 19,231,108,221,186, -149, 21, 88, 44, 88,176,248,191,162,198, 33,107, 52,195,208, 84,110, 46, 24,173,182,220, 33, 96, 24,134,145,252, 41,108,120, 18, - 51, 51, 51,130,231,224, 0, 66, 36, 42,253,146, 32, 94, 57, 66,155,203,229,214, 75, 96, 81, 20, 56, 32,244, 96,192, 0, 32, 65, -128, 68,137, 88,128, 32,219, 64, 98,158, 98, 14, 39, 83, 98, 78, 16, 28, 18, 4, 73, 0, 4,192,232,105, 80, 12, 85, 95,101,196, - 20, 21, 21, 65,163,209,152,187,186,186,158, 82,171,213,230,101, 55,182, 55,150, 51,159,162,168, 56,146, 36,241,209, 71, 31,161, - 92,233,107,181, 90,196,196,196, 64,173, 86, 67,171,213, 34, 42, 42, 10, 5, 5, 5,208,106,181, 8, 11, 11,131,179,179, 51,184, - 92,174,162, 54, 94,131,193, 0,107,107,107, 40, 20, 10,104,138, 11,164,191,110, 89, 51,112,197,194,121, 86, 31,184, 50,228,246, -181, 63,208,205,155, 55,207,243,246,246,182, 18,139,197,185,190,190,190,217, 7, 14, 28, 56,134,250,165,104,248,125,222,188,121, -109,187,117,235,230,102,102, 34,214, 75, 69,128,132, 83, 12, 1,163, 2,207,144, 14,183,166,205,104, 66, 34,113, 31, 57,114,164, - 6,165,121,161,140,226,156, 53,107,150,171,143,143,143,194, 92, 46, 44, 22,243,137, 52, 17,135, 82,230, 69,221,191, 5, 0, 66, - 51, 11, 21,132, 98,159, 49, 99,198,168,234,195,249,213, 87, 95,121, 54,105,210,196,142,207,101, 74, 8,202,144, 90,177, 70,163, - 78,231,240,248, 37,224,243,253,103,204,152,161,171, 15,231,151, 95,126,233,225,231,231,103,107,109, 42, 42, 22,243,144, 42,230, - 80,169, 60,173, 38,137,111,208,166,139,204,205, 75, 32,150,180,252,240,195, 15,181, 53,113,150,187, 87, 85,157, 33, 46,151,139, -212,212, 84,228, 60,191,129,156,231, 15,208,156, 44, 68, 91, 91,107,200,100,178, 58,207, 39,194,235, 49, 17,253, 28, 68,244,115, - 16,132,215, 99,162,186,229,170, 34, 75,161, 80,212,218,246,107,237,234,139,246, 12,105, 8,231,233,211,167,151, 15, 30, 60, 88, - 63, 98,196, 8, 92,184,112, 1, 4, 65,224,218,181,107, 72, 73, 73, 65,223,190,125,193, 48, 12, 34, 35, 35,161,211,233, 16, 29, - 29,141, 97,195,134, 33, 48, 48,176,228,236,217,179,223,179,151,122, 22, 44, 88,188, 41,129,213,173,204,146,235, 86,190, 66, 47, - 20, 62,162,167, 77,131,233,111,191,129, 23, 27,139, 97,239,189, 39, 23, 10,133,107,237,236,236, 90, 41, 20,138,142, 98,177,120, -253,172, 89,179, 76, 44,131,131, 97, 31, 26, 10,229,133, 11,208,243,120,119,235,179,113,149, 74, 85,238,198, 64, 91, 38,228,204, -204,204, 64,211,180,209,243,253, 48, 20,110, 42, 51, 99, 33, 64, 99, 48, 64,225,153,194, 30, 55, 63,136, 91,100,123,177,176,121, -243,216, 2,158,235, 10,155,182, 86, 91,155,116,184,171, 34,120, 69,124,185, 0,169,169,169, 96, 64,223,172, 79, 57,213,106,117, -126,113,113, 49,225,234,234,106, 21, 30, 30,238,218,172, 89, 51, 75, 0,132, 70,163,185,243, 42,149,175, 80, 40,218,183,108,217, -242,144,191,191,127,124,203,150, 45, 15, 41, 20,138,246,245,248,251,246,136,136, 8,112, 56, 28, 76,156, 56, 17,133,133,133,208, -106,181, 72, 74, 74, 66, 98, 98, 34,180, 90, 45, 30, 61,122,132,199,143, 31, 67,171,213, 34, 50, 50, 18, 26,141,198, 24,225, 6, - 19, 19, 19,228,101,103, 72, 15,110,252, 97,224,247, 11,191, 21,231, 63, 13, 71,114,106, 58,104, 74,149,250,237,183,223,198,185, -186,186, 94,211,106,181, 30, 20, 69, 13, 0,112,176,158,237, 45,210,221,221,189,219,170, 85,171, 58, 46, 90,190, 71, 96, 42, 43, -128,208,204, 2, 2,115, 9, 4,206, 1, 24, 51,251, 71,238,230,205, 27,238, 95,187,118, 45, 19,198,141,204, 35, 1, 68,182,110, -221,186, 99, 90, 90, 90, 87,127,127,255, 0,135, 38, 77,164, 82, 59, 69,174,208,206, 62,139,214,168,111,193,206,161,203,238,221, -187,239, 92,190,124, 89, 89, 31, 78,103,103,231, 46, 27, 54,108,104,219,184,113,227,182, 18,185, 92,166, 46, 44,220,107, 40, 41, - 57,204,145,201, 4, 16, 75,251,156, 61,123,246,218,129, 3, 7,210,234,195,233,233,233,217, 57, 56, 56,184,117,171, 86,173,218, - 58,186,184,200,196, 54,118,217, 82,123,199, 12,177,155, 23, 31,118,142,189,118,239,222,125,227,202,149, 43,198,150, 19, 36, 73, -130,203,229, 66, 38,147, 33, 36, 36, 4,129,157,221,161, 32,115,224,219, 88,129,254,227, 62,198,249,243,231,193,227,241,240,170, -110,107, 53,238,107,157,130,168,190,226,171, 46, 78,165, 82,185, 33, 44, 44,236,167,247,223,127, 31,189,122,245,194,189,123,247, -240,213, 87, 95,197, 93,185,114, 5, 0,112,239,222, 61, 44, 89,178, 36,238,230,205,155, 24, 55,110, 28, 58,117,234,132,200,200, -200,221,108,242, 81, 22, 44,254, 49,248,139, 22,249, 39,163,188,139, 48,164,242,187,139,185,185,137, 90, 93,146, 28, 18, 18,162, - 27, 48, 96, 0, 95, 44, 22, 99,248,136, 17,100, 35, 39,167,206, 33,187,119, 95,146, 74, 36,196,136,121,243,100, 62, 62, 62, 21, - 23,249, 19, 39, 78,168,242,243,243,178, 27, 53,106,100,150,148,148,148,103,204,198,179,178,178, 96,103,103, 7, 14,135,131,226, -226, 98,112, 56, 28,200,100, 50,148,148,148, 24, 29,131, 85, 92, 64, 94,184, 22,242,168, 87,247,225, 83, 10,251,196,233,164, 6, -198,178,189, 9,201,128,130, 30,234, 18, 6, 6,154,225,222,102,204, 90, 95,114, 11,204, 93,210, 44,235, 73,242,197, 13,214, 42, - 70,123,161, 62,149,148,155,155, 59,127,202,148, 41, 7,189,189,189,173, 76, 76, 76, 96,107,107, 75, 78,152, 48, 33, 51, 41, 41, -105,113, 67, 43,222,211,211,115,164,135,135,199,218,195,135, 15, 91,196,199,199, 3, 64,147,121,243,230,117,127,252,248,241,244, -232,232,104, 99,146,151, 30, 90,181,106,213,218, 30, 61,122, 72,219,181,107, 87, 33,176,116, 58, 93,197,123,213,207,229,221,177, -181,129,166,105,136, 68, 34, 28,222,182,166,207,247, 11,191, 21,103, 71,223,196,253,107, 23,112,246,185,166,100,229,142, 93,183, - 68,229,110,101,125,247,215, 90,210,194,196,204,228, 80,247,222,253,236,135,140,153, 66, 46, 92,184,144,249,227,220, 97,102,199, -186,105,112,241,248, 9, 4, 65,226,241,147,123,152, 60,162, 11,243,232,193,163,214, 0, 28,235,203,185,124,249,242,226,199,143, - 31,231, 31, 58,116, 72,212,168, 81, 35, 87,146, 36,133,105,233,233,217, 35, 71,142,188,119,253,250,245, 28,154,166,167, 53,168, -156,127,252, 81,188,123,247,110,137,181,181,181, 7, 73,146,194,252,252,252,172, 41, 83,166, 68, 28, 62,124,184,144,166,233,233, - 13,225,236,212,169, 83,209,193,131, 7, 37, 78, 78, 78,238, 36, 73, 10, 83,211,210,178, 70,140, 24, 17,121,243,230,205, 2,148, - 38, 26,173, 22,195,103, 62, 70,183,119, 75, 63,139,197,226,108, 79, 79, 79,203, 1, 3, 6,128,162, 40,196,199,199,227,193,131, - 7,232, 55,106, 52, 44, 44, 44,112,249,225, 67, 40,149, 74,124,253,245,215, 80,169, 84,120,250,244,169,242,117, 94, 60,202,186, -246, 24,165, 82,249,151,147, 53,234,119,143,138, 36,162, 47,137,171,166, 68, 72,109,113, 86,181,113, 2, 64,159, 62,125,198, 13, - 30, 60, 24,191,253,246, 27,190,250,234,171,184,160,160, 32,151, 17, 35, 70, 32, 42, 42, 10, 45, 91,182,196, 23, 95,124,225,178, -106,213,170, 56,134, 97, 92, 58,116,232, 0, 71, 71,199,119,148, 74,229,108,246,190,197,130,197, 63, 2, 33, 85,222,255, 21, 2, - 11,168, 20, 80,198,200,197, 35,182,108, 88,111,250,217,204, 47,138,189,188,188,204,109,109,109, 65,146, 36,250,245,239, 79,180, - 63,119,206,132,167, 80,192,178, 69, 11, 48, 12, 3,154,166,113, 53, 52, 20,151, 46, 93, 42,222,187, 99,187,195,248, 79, 62, 25, - 4,160,198,145, 59,229,221,106, 4, 65, 32, 51, 51,179, 66, 96,137, 68, 34,164,166,166,194,206,206, 14,124, 62, 31, 28, 14,135, - 11,128, 3,160,214,110, 71, 59, 59,187, 61,193, 75,162,230, 38,249,126,217,180,147,132, 36,206, 20,167,129, 4, 1, 3, 67,131, - 84, 49,160,105, 6, 26, 61,224,237,192, 49,191,168,129,217,157, 71, 23,226,237,236,236,246, 40,149,198,223,107,226,227,227, 47, -171, 84,170, 73,197,197,197, 71, 0,144,183,110,221,162,159, 63,127, 62,213,216,128,244,234, 32, 22,139,103, 31, 62,124,216, 98, -241,226,197,185,151, 46, 93,202,239,209,163,135,105,112,112,176,229,200,145, 35,103,195,136,236,240, 74,165, 82, 5, 96,119,122, -122,250,212,214,173, 91, 35, 39, 39, 7, 90,173, 22, 17, 17, 17,104,214,172, 25,194,194,194,224,238,238,142, 59,119,238,192,195, -195, 3, 20, 69, 65,173, 86,131, 50, 34,209, 86,106,210, 11,153, 68,147, 43, 79,189,125, 26, 79,238,135,225,116,156,166,100,229, -142,131,167, 91,180, 12, 40, 54, 86,248, 86, 70,115, 27,137,183,173,149,229,185, 31, 87, 45, 51, 73,185,125, 6,135, 54,255,200, -252,113,242,100, 43,161, 28, 31,181,239,253,217,112,189, 14,141,104, 6,252, 78,157, 58, 96, 80,171, 71, 4, 79,131,220, 75,225, -181,103, 50,175,142,243,200,158,253,254,106,192,187,105,211,166,131, 56, 28,142, 53, 0, 29, 69, 81, 81, 48,114, 10,154,154,202, -169, 6,188, 21, 10,197, 32,145, 72,228, 64, 16,132, 74,165, 82,197,190, 14, 78, 23, 23,151, 65, 28, 14,199, 30, 64, 9, 69, 81, - 49,168,231, 84, 57,189,122,245, 90,185,125,251,246, 89, 26,141,198,178,146,219, 74,156, 57,115, 6, 90,173, 22, 2,129,128,145, - 74,165, 72, 74, 74, 98, 0, 40, 25,134,153,244,186, 46, 28, 67,135, 14,197,173, 91,183, 22, 2, 88, 80,219,239,114,114,114,184, - 22, 22, 22,134,202,194,171,166, 44,240,198,112,222,190,125,123,249,132, 9, 19,102,159, 61,123, 54, 57, 40, 40,168,229,216,177, - 99,113,252,248,113, 56, 57, 57,225,201,147, 39,152, 53,107, 22, 8,130,112, 89,181,106, 85,228,129, 3, 7, 20,105,105,105, 63, -176,247, 44, 22, 44,254, 81, 32,254, 45, 59, 82,109, 12, 22, 65, 19, 60,183,102,205, 40,109, 73,209,206, 79,198,141, 43,121,244, -232, 17, 40,138,130,193, 96,128,250,206, 29, 20,159, 59, 7,131,193, 0,134, 97,112,251,214, 45, 76,159, 54,173, 72, 93, 82,180, -173, 73,147,198, 12,193, 48,210, 74, 84,127,153,109, 91, 91,222, 23,136,210, 46, 66,149, 74, 5, 30,143, 7,153, 76,134,204,204, - 76, 8, 4, 2,136,197, 98,248,249,249,145,142,142,142,129,213, 20,239, 37,206,136,136, 8, 61, 10, 52,195,126, 27, 51, 35,205, -177,196,192, 76, 52,107,130, 70, 60,113,105,188, 21, 0,107, 19, 18,189,188,184,176,224,102, 49, 15,118,125,160, 36, 12,249,195, - 34, 34, 34,244,181,113, 86,133, 66,161,104,238,237,237,189,190, 60, 15, 86,231,206,157, 73, 31, 31,159,159, 21, 10, 69,243, 90, -254, 86, 43,167, 72, 36, 18, 2,192,133, 11, 23,114, 66, 67, 67,251, 95,184,112, 33, 7, 0, 83,254,189, 49,156, 36, 73,110,217, -188,121, 51, 36, 18, 9, 12, 6, 3,180, 90, 45, 52, 26, 13,180, 90,237, 95, 94, 86, 86, 86,184,120,241, 34,104,154, 62, 85, 87, - 57, 61,125,124,139,242,185,102,233,187, 78,252,129, 51, 9,186,162, 6,136,171, 10, 78, 47, 59,169,187,131,117,169,192,200,142, -190,137,167, 15,194,112,250,212,239,145,106, 32, 37,175, 0, 75,243, 10,224, 91,172,134,121, 27, 79,100,157, 59, 50,151,248, 98, - 52, 8, 16,213,206,153,103, 20,103,153, 64,153, 76, 81, 84, 27,138,162,218, 0,152, 92,139,104,169, 23,167, 90,173,110,171, 82, -169, 94, 43,103,125,203, 89, 30,131, 5, 0,223,126,251,237,157,208,208,208,247,239,220,185,211,163,252,245,240,225,195,238,241, -241,241,221, 83, 82, 82,186,199,255, 46,228, 60,124,248,144, 27, 22, 22,198, 11, 11, 11,115, 10, 15, 15, 63,107,108,251,172, 9, -149, 3,220,149, 74,101, 80, 21,167,169,130,147,240,122, 76,172, 95, 53,101,239,225,195,135,237, 94, 23, 39, 0, 60,121,242,100, -253,246,237,219,157,253,252,252, 28,203, 83, 49,108,219,182, 13, 64,105, 38,251, 31,127,252, 17,237,219,183,135,163,163,163, 77, -120,120,120,211,212,212,212,205,245, 61, 55, 27, 8,150,147,229,100, 57, 89, 24, 33,176, 8,154,162, 40, 26, 54,182, 54, 38,153, - 25, 25,235,166, 76,153,156,189,104,209, 34,117, 72, 72, 8,180,143, 31, 67, 29, 17,129,139, 23, 47, 98,198,140, 25, 37,159, 78, -154,164, 84,151, 20,173,177,179,181,177,162, 40, 26, 4, 65,215,234,144,144, 36, 25, 23, 27, 27, 11, 0,208,104, 52,248,249,231, -159,245, 58,157, 14,114,185, 28, 12,195, 96,235,214,173, 52, 0,244,236,217, 83,202,227,241,140,154,130, 36, 53, 53,245,126, 65, - 82,106,159, 95, 71, 78,142,139, 62,240,123, 65,139,108, 45,222, 23, 41, 48,164, 5,131,166,162, 23, 72,188,185, 35,255,230,166, -247,226, 74,114,147,250,166,166,166,222,175,111, 37,217,217,217,125,183,111,223, 62,155,240,240,112, 70,163,209, 32, 37, 37,133, -153, 61,123,182,141,157,157,221,119,175,162,210,243,242,242, 64,146, 36, 93, 86, 47,116,125,213,123, 74, 74,202,195, 35, 71,142, -252,118,249,242,101, 56, 58, 58,130,162,168, 10,129, 85,249,157,203,229,130, 32, 8,108,218,180, 41,143, 32,136,121,117,241, 10, - 4, 2,108, 62,116,250,204,151, 27,143, 30, 58,116,241,206,209,134, 58, 87, 0, 32, 49,145, 47,254, 97,229, 50,211,242,174,198, -125,225,169, 5, 4,197, 84,223, 85,167, 75, 41,109, 35,213, 11,172,134,113,254, 29,229,124,131,156,111, 18,165, 35,253,148,132, -189,189, 61,126,253,245,215,122,199, 96,121, 53, 37,254, 18,220,222, 80,206,135, 15, 31, 46,123,255,253,247,211,131,130,130, 54, -168,213,234,226,178,135, 55,221, 15, 63,252,176,234,179,207, 62, 75, 79, 73, 73, 97,157, 43, 22, 44, 88,188, 81, 84,155,166,129, -230,144,215, 55,109,222,216,255,224,254, 3,118, 28, 14,105, 23, 31,255,252,238, 71, 31,127,156, 18, 26, 26,106,193,107,214,172, - 13, 73,146,180,118,238,220,155, 69, 5,249, 57,123,118,238,112,110,210,164,177, 95,217,100,207, 12,205, 33,175,215,182,193,156, -156,156, 93, 51,103,206,108,179,123,247,110,254,202,149, 43,139, 83, 82, 82,206,223,190,125,187,255,134, 13, 27, 68, 91,183,110, - 45,201,207,207, 63,113,250,244,233,193,221,187,119, 55,104,181, 90,163,243, 11,101,100,100, 68, 33, 35,195,131,252,113,235,168, -152,205,123,251, 48, 28,178, 3,212,124, 16, 12,117,131, 52, 20,157,207, 72, 77,221, 7,192,208,144, 74, 18,137, 68,126, 98,177, - 24, 79,159, 62,205,109,211,166,141, 86, 32, 16,240, 26, 55,110,108, 41, 18,137,252, 26, 90,241, 12,195, 48,185,185,185, 96, 24, -134, 11,128,160, 40,138, 11, 0,116, 93, 73,139,170,128,207,231,143, 28, 63,126,252,111, 27, 54,108,232,211,179,103, 79,184,184, -184, 64,175,215,195,221,221, 29, 90,173, 22,110,110,110, 80,171,213,248,233,167,159, 80, 84, 84, 52, 43, 53, 53, 53,183, 54, 62, -154,166, 33, 20, 10, 33, 16, 8,224,238,233, 83, 34, 18,137,208, 80,113, 5, 0, 82, 1,154, 38,221, 58,133,167, 15,194,113, 48, - 66,153, 87,172,163,251,197,100,150, 60,170,250,187, 18, 45,138,187,247,155, 92, 42,188,245, 40,122, 29,156,127, 71, 57,223, 52, -103,229, 24, 44, 99,126,251,186, 80, 83, 76, 84,109,136,126, 14, 98,114,231,117, 12,162,215, 85,155,227,170, 33,156,229, 72, 78, - 78,222, 84, 62, 5, 14, 73,146,207,166, 79,159, 62, 59, 37, 37,101,181, 82,169,220,160, 84, 42, 23,176,151,118, 22, 44, 88,188, -149, 2, 43, 62, 62, 57,234,200,241,163, 95, 31,253,245, 72, 71,134, 33, 57, 12, 65, 20, 3,228,239, 81, 81, 81, 47, 5,175,187, -152,155,155,140,159, 48,126, 4, 65, 19, 60,130,160, 41,154, 67, 94,143,143, 79,142,170,195,109,122,208,163, 71,143,117,221,187, -119,255,152,162,168, 21, 79,159, 62, 61, 79,146,100,100,191,126,253,190, 52, 24, 12,171,226,226,226,206,187,187,187, 95, 56,120, -240,224, 87, 20, 69,213,215, 33, 50,164,166,166,238, 70, 45, 49, 96, 13,196, 34, 0,166, 66,161, 48, 63, 60, 60,252, 64,199,142, - 29, 71, 18, 4, 97, 10, 32,191,161,132, 26,141,102,122, 97, 97,161,213,136, 17, 35,244, 0,220,223,125,247,221,121,177,177,177, -188,226,226,226,184,250,240,188,120,241, 66,227,236,236, 60,120,202,148, 41,219,248,124,126, 79,252,153,164,173, 92,200,129, 97, - 24, 80, 20,117,162,172,110,106, 4,143,199, 43, 26, 56,112,160,204, 8,135,171,200,216,242,165,101, 21, 78, 95,178,235,116,176, - 70, 79,211, 6,154,153, 20,147, 81, 82,237, 93,255,110, 20,188, 95, 55,103,125,240, 79,225, 4,128,201,157,215,237, 69,244,186, - 10, 1, 85,222,109, 88,117,249,239, 66,153,227,196, 0, 88, 88,215,111,107,155, 87,176,161,156, 85,145,146,146,178,133, 29, 41, -200,130, 5,139,255, 26,216,254,105,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255, 21, 40, 55, 45,140,121,145,172, 6,100, -193,130, 5, 11, 22, 44, 88,176,120,189, 32,106, 81,161,245,153, 41,187, 33, 74,246, 33,203,201,114,178,156, 44, 39,203,201,114, -178,156,255, 57,206,186,184, 31,226, 45,197, 27,156,192,229,181, 28, 24,150,147,229,100, 57, 89, 78,150,147,229,100, 57,255,123, -156,111, 61,216, 46, 66, 22, 44, 88,176, 96,193,130, 5,139, 55, 8, 86, 96, 53, 12, 31,161, 52, 41,228, 67, 0,231,202,150, 27, - 10, 49,128,185,149,248,206, 0,248, 10,128,144,173,230,183, 26, 28,182, 10, 88, 52, 20, 10,133,162,185,167,167,103,120, 29,201, -138, 89,176, 96,241, 15, 6,183,166, 21, 46, 46, 46, 55, 72,146,108, 74,146,165, 26,172,114, 46,164,242,207, 85,223, 25,134,137, -143,142,142,238, 80, 19,103,147, 38, 77, 42, 56, 73,146, 4, 65, 16, 32, 73, 18,122,189,222,132,195,225, 20, 86,199, 73, 81, 84, -114, 76, 76, 76,192, 91, 84,103,123,205,205,205,245, 27, 54,108, 88,239,239,239,223, 44, 39, 39,167,120,226,196,137,125, 31, 62, -124,216, 11,192,135,245,228,242, 33, 8, 98, 79,235,214,173,143,126,246,217,103,135,189,188,188, 76,138,139,139,133, 7, 15, 30, -180,219,180,105,211, 85,138,162,198, 3,136, 98,155,233,219, 3, 59, 59, 59,127,130, 32,214,201,100,178,128,162,162,162,187, 0, -166, 42,149,202,123,108,205,252, 95,241,137, 64, 32,232,231,230,230,214, 70,163,209,228,198,199,199,223, 41, 75,233,146,246,154, -248, 77, 1,124, 39, 20, 10,219,186,186,186, 54,138,141,141, 77,210,233,116,183, 81,154,174, 37,255,117,136,171,182,109,219, 94, - 91,186,116,169,229,188,121,243,174,221,185,115,167,147, 82,169,140, 97, 15, 43,139, 55,129, 70,141, 26,153, 21, 23, 23,111, 35, - 73,210, 95, 36, 18,217,153,152,152, 64, 38,147,165, 9,133,194, 72,137, 68,242,241,233,211,167,243,216, 90,122,205, 2,139,195, -225, 56,222,185,115,199,198,196,196, 4, 20, 69,129,166,105,208, 52, 93, 49,255, 96,229, 64,175,178, 60, 75,232,222,189,123,173, -179, 9,115,185,220, 70,225,225,225, 54, 50,217,159,169,150,116, 58, 29,124,125,125,233,136,136, 8,155,170, 19, 9,107,181, 90, -180,106,213,138,121,139,234,107,180,165,165,165,246,197,139,196,246,106,141,174,195,148,217,139,191, 27,241, 78, 87,211,155, 55, -111,146,131, 6, 13,226, 93,190,124,249, 35, 0,123,140,228, 18, 19, 4,177,125,254,252,249,203,184,124,137,205,145,211, 55,184, - 63,111,222,151,228,227,217,132,152, 57,109,138,100,250,244,233,119, 60, 60, 60,118, 80, 20,213, 25,128,134,109,170,111,199,249, -194,227,241,126, 11, 14, 14,118, 72, 83, 42,241,227,234,213,237, 0,108, 0,208,142,173,154,255, 27,230, 46, 92,184, 48,120,212, -168, 81, 48, 24, 12, 80,169, 84,246,207,158, 61,243,158, 63,127,254,187,207,158, 61,107, 3, 32,238, 21,249,173,221,220,220, 30, -207,156, 57,211,162, 77,155, 54, 32, 73, 18,121,121,121,246,215,174, 93,107,183,125,251,246,143, 18, 19, 19, 61, 0,100,190,202, - 6,204,205,205,127, 89,181,106,149,165, 80, 40,196,206,157, 59, 45,223,127,255,253,171, 0, 58,191,130,200, 34, 45, 45, 45,167, - 3,232, 78,211,180, 16,192,237,220,220,220, 37, 0,116,108,115, 97, 81, 27, 44, 45, 45, 63, 73, 79, 79, 95, 47,145, 72,248,102, -102,102, 16,139,197,224,243,249, 16, 8, 4, 78,230,230,230, 78, 50,153,108,192,200,145, 35,167, 30, 56,112, 96, 27, 91, 91,175, - 81, 96,145, 36, 9,177, 88,140,131, 7, 15,130,195,225,128,207,231,131,199,227,129,199,227,189,244,185,124,185, 81,163, 70,117, -110,172,220,149, 58,113,226, 4, 76, 77, 77, 33,151,203,225,233,233, 9,130, 32, 32, 20, 10,113,241,226,197,151,120, 3, 2, 2, - 94, 41,139,120, 67, 48,172,103,105,146,206,234,146, 55, 6, 78, 77,198,160, 81, 75,135,150,104,244, 93, 24,134, 80,165,229,234, -115, 22,173, 92, 31,213,210,219,147, 56,116,232, 80, 43, 43, 43,171, 15,234, 33,176,102,180,105,211,230,132, 1, 2,219,241, 99, -199,141, 29, 71, 18,134,247,198,125,177,240, 90,196,179,220,109, 94,254,251, 50, 51,147, 39,253,252,243,207, 49, 83,166, 76,153, - 14, 96,133,177,229, 15, 8, 8, 72,164,105,186, 81,153, 72,206, 18,139,197,138,144,144, 16,195, 91,208,214,236, 1,172, 4,160, - 7,176, 28, 64,229,164,155,205,249,124,254, 10,157, 78,151,131,210,137,126,147,222,198,147,197,193,193,193,227,195, 15, 63,180, -202,206,204,196,143,171, 87, 87, 84, 57,140,152,148,252,117,195,223,223,191,169, 72, 36, 90, 9,192, 95,163,209, 56, 0,128, 88, - 44, 78, 97, 24,230,152, 74,165,250, 38, 34, 34, 66,213,208, 7, 90, 0,222,168,121,202, 38,102,197,138, 21, 49, 95,125,245, 85, -252, 27,224,108,108,107,107,187,116,248,240,225, 56,117,234, 20, 78,159, 62,173, 23,137, 68,220,177, 99,199, 18, 83,167, 78, 53, -159, 57,115,230, 0, 0, 63,189, 98,213, 14, 88,184,112,161,133,167,167, 39,142, 28, 57,130,123,247,238,169,154, 55,111, 46,238, -218,181, 43, 56, 28,142,197, 55,223,124,211, 31,192,174, 87,217, 64,110,110,238,146,197,139, 23,239, 94,183,110,157, 73, 92, 92, - 28, 22, 46, 92,104,245,217,103,159,133, 0,232, 90, 15,145, 37, 4, 48, 29, 64,119, 14,135,211,121,236,216,177,134,105,211,166, -241, 72,146,212,175, 89,179,198,122,219,182,109, 35,120, 60,158,127,118,118,118, 17, 88,160,150,251,156,142,166,105, 30, 0, 17, - 0, 77, 93,203,255,166,125,183,176,176,152,156,147,147,179,193,222,222, 30,214,214,214, 21,247, 90,154,166, 81, 92, 92, 12,149, - 74,133,166, 77,155,242, 61, 61, 61,183, 78,157, 58,149,183,126,253,250,141,108,139,169,191,192,234, 10, 32,164,210,119, 93, 1, -132, 16, 4, 1,154,166,193,227,241,192,225,112,192,229,114, 43,132, 79,229,207,229,175, 26,132,208,195, 42,141,153, 40, 44, 44, -172, 16, 87,166,166,166, 21, 78,152, 94,175,255, 11, 39, 69, 81, 32, 73,146,169,141,243, 53,161,130,243,240, 26, 15,236, 10,155, - 61,114, 87, 88,233,114,255, 81,165,239,187,194,128,139,183, 39,173, 92,177,177, 99,163, 25, 75,118, 6,103,103,231,101,120, 57, - 90, 27, 62, 24,213,213, 89,144,149,158,101,217,164, 73, 32,128,140,122,148,179,211,164, 73,147,142, 28,185,252, 84, 42, 20, 10, - 4, 28, 18,156,230, 46, 77,121, 14,242,102, 22,214,125,219, 8, 18,226,226,174,126,244,209, 71,147,166, 76,153, 98, 89, 73, 96, -213,185,239, 12,195, 40,206,159, 63, 15, 46,151,139, 94,189,122,153,151, 29, 99,131, 49,251,254,119,212,103, 37,204, 79, 79, 79, - 31,169, 86,171, 17, 16, 16,240, 78,118,118,118,119, 0,145, 0, 90, 12, 30, 60,248,234,225,195,135, 77, 34, 34, 34,208,174, 93, - 59, 49,128,247,223, 96, 57,255, 2,133, 66,113, 30, 64,111,130, 32,160, 85,171,181, 43,127,120,105,154,187,176, 42,226,234,111, - 47,167,159,159,159,135, 72, 36,186,241,195, 15, 63,200,189,188,188, 8, 30,143, 7,131,193,128,216,216,216, 70,123,247,238,253, -244,238,221,187,253,253,253,253,189,170,153,212,220,152,125,247,190,122,245,106,177,139,139, 75,181,130,177,164,164,132,227,226, -226,210,173, 6, 49,244,119,115, 38,167,167,167, 15,233,221,187,247,164,180,180,180,199, 6,131, 97, 14, 0, 31, 43, 43,171,136, -161, 67,135, 66, 44, 22,119, 87,169, 84, 63,189,202,113,183,177,177, 25,220,161, 67, 7,172, 91,183, 14,203,151, 47,239, 5,224, -143,147, 39, 79,246, 44, 40, 40,184,248,206, 59,239,192,204,204,108, 72, 94, 94,222,174, 87,104, 75,205,219,180,105,179,117,214, -172, 89, 38, 39, 79,158,132,155,155, 27, 10, 10, 10, 48,126,252,120,155,181,107,215, 94, 1,208,173,146,200,170,137,211, 75, 40, - 20,238,218,191,127,191,204,197,197,197,133,207,231,147, 46, 46, 46,200,201,201,129, 90,173, 22, 46, 89,178,164,133, 72, 36,186, -247,211, 79, 63,237, 2,240,222, 27, 62,143,242, 1,200, 1,152,161,126,221,171, 15,107,225,171,136, 79,229,241,120, 16, 10,133, - 16,137, 68, 16,137, 68,136,143,143,255,149,195,225,140, 35, 8, 66,111, 12, 39,241,231,141,203, 15,192,157,186,150, 1,208,111, -193,117,201,145, 32,136, 53, 0,186,163, 52,142, 58,196,198,198,102, 70,122,122,250, 11, 99, 57, 21, 10,133,101,118,118,246, 79, -246,246,246,176,177,177, 65,217, 3, 57, 2, 2, 2,160, 86,171,241,232,209, 35,208, 52,141,103,207,158, 65, 46,151,163, 69,139, - 22, 63, 5, 5, 5, 29, 9, 10, 10,202,254, 27,247,189, 90, 45,242, 79, 23, 88, 87,202,158, 44,203,119,166,124, 25, 20, 69, 85, - 8,172,170,226,167,170,224, 34, 8, 2, 12,195, 16,117, 56, 88,164, 86,171,173, 16, 87,114,185,188, 66,156, 25, 12,134,106, 5, - 86, 67, 97,102,102,118, 46, 47, 47,111, 53,128,243, 13,249,255,216,177, 99,255, 18,207, 49,119,238,220,164,204,204, 76,106,112, -167,230,194, 61,123, 78,101,127, 20,216,205,206,203,213,209, 93,106,105,227, 87, 82, 82,114, 23, 0,175, 62,134,136,151,151,151, -201,198,253, 33, 25,163,166,175, 92,228,104, 43,163, 90,187,217,202, 93, 45,164, 2, 75, 17,215, 96,198, 24,242, 36, 18,137, 55, -128,236,250,150,221,212,212, 20, 39, 78,156,120,219,218,154,185, 74,165, 66,110,110, 46, 54,109,218, 36,159, 52,105,210,229,236, -236,236, 25,131, 7, 15, 94,119,228,200, 17,105, 94, 94, 30,116, 58, 29, 0,168,222,194,243,100,177,185,185,121,151,238,221,187, - 11, 14, 28, 58, 36, 96, 24,166, 24,165,211, 17, 21, 49, 12,243,217,255,187, 48, 34,145,232,203, 37, 75,150,200,189,188,188,136, -172,172,172,210,225,192, 36, 9, 43, 43, 43,204,158, 61, 91,244,205, 55,223, 56,196,196,196,124,141, 6, 76, 59, 3,128,168, 73, - 8, 1,128, 68, 34,161, 80,255,193, 49,213,114, 26, 12, 6,162, 99,199,142,179,179,178,178, 90,168, 84,170,239,141,224, 49, 0, - 56,145,156,156, 92,185,113,223,123,252,248,177,138,203,229,138,155, 52,105,210, 54, 42,234,213, 66, 22,155, 55,111,222,158,199, -227,225,246,237,219,154, 74, 23,247,144,251,247,239,107,222,123,239, 61, 97,163, 70,141,218,231,229, 25, 23,146,162, 80, 40,154, -187,186,186, 94,176,178,178, 18,151, 15,219,182,180,180,228,173, 88,177,194, 36, 57, 57, 25, 6,131, 1,243,230,205, 67, 96, 96, - 32,204,205,205, 49,110,220, 56,219,173, 91,183,254, 2,160, 85,109,206,149, 80, 40,220,245,244,233, 83,119,133, 66, 33,190,117, -235, 22,124,125,125,145,149,149,133,180,180, 52, 20, 21, 21, 33, 45, 45, 13, 31,127,252,177,205,143, 63,254,168,120,139,206,161, - 60, 46,151, 11,169, 84,106,150,159,159,159,255, 10, 60, 66, 0, 2, 0,224,114,185, 21,226, 74, 40, 20, 66, 40,252, 79,140, 11, -114, 32, 8, 34,138,199,227, 9,165, 82, 41,159, 36, 73, 72,165,210,190,142,142,142,143,122,245,234,229,179,119,239,222, 4, 99, - 72,212,106,245, 30,177, 88,204,179,182,182, 6, 0,244,233,211, 7, 99,199,142, 69,102,102, 38,157,154,154, 10,119,119,119, 50, - 36, 36, 4,233,233,233,184,119,239, 30, 90,183,110,205,179,176,176,216, 3,160,255,223,184,111, 53,106,145,127,178,192,170,186, -115, 21,160,105,250, 37,113, 85,157,115, 85,217,193,170,171, 59,143, 32, 8, 80, 20, 5, 59, 59, 59, 72, 36, 18, 72, 36,146,138, -117,229, 98,174,242,139, 97,152, 6,119, 17, 54,107,214,172,135, 68, 34,233,124,249,242,229,119, 0, 92, 52,246,127,195,103, 62, -174,112,173,170,194,207,207,239,198,188,121,243,250, 93,186,116, 41,183,189,111, 83, 90,152,154,148, 45, 49,183,242, 37,172,109, -122, 77,153, 48,241, 38,128,253,245, 40, 98,170, 90,173, 22, 54,182, 35, 85,169,249, 5,218,166,114, 83,179,166,166, 50, 73, 99, - 43, 83, 75,115,145,128,148,218,218,216,235,245,250, 60, 0,169,117, 17, 85,238, 22, 20, 10,133, 90,130, 32,184,102,102,102, 48, - 53, 53,213,229,230,230,170,253,253,253, 33, 16, 8,178,248,124,190,209,221,133,173, 91,183, 78,167, 40,202,166,182,223,240,249, -252,140, 91,183,110,217, 26,185,191,223,248,249,249,117,221,176, 97,131,181,155,155, 27, 54,109,218, 36, 63,114,228,200,174, 95, -126,249, 5,121,121,121,120,254,252, 57,198,143, 31, 95,128,210,110,196,183,205, 74,191, 54,108,216, 48,108,219,182,141, 41,123, -136,144, 18, 4,225,107,106,106,250, 36, 58, 58,250,255, 30,231, 66,146,100, 95,119,119,119, 34, 63, 63, 31, 12,195,128,195,225, -188,244,154, 61,123,182,248,227,143, 63,158,223,174, 93,187,217, 60, 30,175,192, 96, 48, 28, 40, 42, 42,250,254,209,163, 71,111, - 85,176,106,231,206,157, 63, 79, 74, 74, 10,116,118,118,254,253, 21,104, 24,131,193,160,101, 24, 70,204,225,112,120,175, 90, 38, -130, 32, 56,101,215, 35,117, 37,231,215, 80,182, 44, 68, 61, 70,143, 90, 88, 88,252,178,119,239, 94, 71, 71, 71, 71,232,245,122, -232,245,122, 20, 23, 23, 35, 36, 36, 4, 26,141,166, 98, 82,246,101,203,150,169,167, 78,157, 42, 58,116,232, 80,134, 74,165, 26, - 93, 7,237,244,195,135, 15,155, 40, 20, 10,177, 74,165, 66, 92, 92, 28, 90,181,106,133,194,194, 66, 20, 23, 23,163,164,164, 4, - 58,157, 14,249,249,249,102, 20, 69,105,223,150, 99,205,225,112, 32, 20, 10,193,227,241,242, 26, 53,106, 4,146, 36, 69, 47, 94, -188,104, 72,151,155, 28, 64, 1,151,203, 21, 84, 22, 86, 34,145, 8, 15, 31, 62, 60, 88,139,123, 85,125,227,169,146, 53,178,174, -229, 55, 13,130, 32,214,240,120, 60,161,165,165, 37,191,252, 59,157, 78,199, 55, 55, 55,135,179,179,243, 58, 0, 3,140,228,105, -105,105,105, 9,130, 32,192,231,243, 49, 97,194, 4,220,185,115,231, 88,114,114,242, 71, 25, 25, 25, 40, 42, 42,218, 35,151,203, -223,205,200,200, 0, 69, 81, 72, 72, 72,128,159,159, 95,203,255,211,110,254,227,133, 85, 85,129,213,181,202,123,185, 35, 85,167, -115, 85, 71, 23,225, 75,208,233,116,178,192,192, 64,186, 92,140,149,143, 34, 4, 64, 80, 20, 5, 62,159,255, 18,103,153,192,106, - 80, 3, 23, 10,133, 24, 48, 96,128, 72, 34,145, 28, 63,121,242,228, 59, 0, 46, 53,180,146, 78, 28,217,103,187, 98,193,188, 5, - 22,246, 77, 92,191,254,250,107,110,255,254,253, 47, 30, 56,112,160,181, 85,167, 30,253, 66,255, 56,104,187,105,206,137,223, 15, - 30, 60, 88, 8,227,227,175, 0,224,250,177, 99,199, 20, 95, 78,155,194,239,218,181,235,175, 99, 90,204,226, 42, 4,180,137,133, -144,207,145,112,184,164,176, 81,227,126,127,132,132, 42, 1,132, 26,113,145, 80, 92,188,120, 17,102,102,102, 0, 32,208,106,181, - 48, 51, 51,195,166, 77,155, 68,114,185, 28,114,185, 28, 29, 58,116, 48,231,243,249,117,117, 23, 86, 22,188, 54, 87,174, 92,129, - 76, 38, 67,113,113, 49, 52, 26, 13, 12, 6, 3, 24,134,169,120,114,236,214,173,155, 77, 61,246, 55,174,160,160,160,203,148, 41, - 83, 66, 55,108,216, 96,237,234,234,138, 69,139, 22, 33, 59, 59, 27,137,137,137, 24, 61,122,116, 65,124,124,124,119,188, 28,155, -245,198,225,227,227,195, 92,187,118, 13,103,206,156,193,160, 65,131,136, 19, 39, 78,232, 40,138,226,167,166,166, 62, 72, 77, 77, -125, 35,101, 50, 24, 12, 38, 2,129, 0,122,189, 30, 92, 46,183,162, 11,191, 92, 96, 57, 56, 56,224,194,133, 11,220,146,146, 18, -110,118,118,182,100,251,246,237,211,194,194,194, 20, 0, 62,120,147,117,185,113,227, 70,231, 9, 19, 38, 36,114,185, 92,166, 95, -191,126, 31,190,120,241, 98,136, 66,161,248,227,242,229,203, 63, 0,168,119,186, 2,111,111,239, 48, 14,135,227,168,215,235,249, -199,143, 31,215, 83, 20,197,247,241,241, 73,175,156,232,175,172,190,146, 99, 99, 99, 3,140,225, 83,169, 84,252, 45, 91,182,232, -213,106, 53,191, 69,139, 22, 21, 92, 58,157,142,255,219,111,191,233,245,122, 61,191,121,243,230, 97,198,140,108,206,201,201, 25, - 61,115,230,204,171, 7, 15, 30,180,226,112, 56,120,241,226, 5,114,114,114, 96,102,102,134,189,123,247,162,113,227,198,184,120, -241, 98, 14, 69, 81,159,108,219,182,109,190, 74,165, 26,109, 68, 12, 86,183,182,109,219, 58,231,229,229,193,212,212, 20, 69, 69, - 69, 8, 11, 11,131,151,151, 23, 82, 83, 83, 65,146, 36,204,204,204,176,113,227,198, 18,130, 32,114,222,134,115,136, 36,201, 10, - 33, 84, 73, 16,169,219,182,109,139,235,215,175,239,171,167, 40,210,150, 95,127, 42,119, 13, 10,133, 66,112, 56,156,122,119,121, -208, 52,205, 7,208,178,252,134, 94,215,242, 91,128,174, 82,169,148, 95,245,203,220,220, 92,190,187,187,123,231,122,220, 31, 45, -197, 98,113, 41, 97,215,174,200,200,200,160, 92, 92, 92, 70,140, 24, 49, 66, 15, 0, 19, 39, 78, 28,145,153,153,169,214,235,245, - 28, 46,151,139,204,204, 76, 52,109,218,212,242,255,177,127, 85,181,200, 63, 93, 96, 17, 40,237,238,168,252, 94,225, 96,213,229, - 92,149,175, 43, 23, 74,117,156,104,121,225,225,225, 82,169, 84, 90,241,157, 94,175, 71,203,150, 45,105,154,166,137,170,219,122, - 21, 7, 75, 40, 20,194,204,204, 12, 31,124,240,129, 36, 37, 37,101,215,189,123,247, 28,141,249, 95,105, 12,214,203,226,106,243, -242, 69,235,126, 94,177,196,242,217,153,157,216,182,118, 21, 37,149,202, 34,252,252,252,186,228,231,231,107,204,164, 26,164,101, -227, 8,128, 95,234,115,205, 1,112,240,230,205,155,145,125,250,244,185,249,252,249,115,243, 23, 79,159, 94,147,107,139,138,100, -141,154, 24,248, 54,182,131, 85, 58, 61,119,216,176, 97,182, 0,214, 26,241, 52, 2,154,166,113,234,212, 41,152,152,152, 64, 46, -151,195,204,204, 12,229,226,170,161,136,143,143, 71,114,114, 50,164, 82, 41,164, 82, 41,100, 50, 25,100, 50, 25, 4, 2,193, 75, -238, 99, 61, 16, 83, 80, 80, 48,227,232,209,163, 7,130,131,131,145,155,155,139,226,226, 98, 44, 88,176, 0,113,113,113, 51, 81, - 26,147,245,214,160, 69,139, 22,204,141, 27, 55,112,237,218, 53, 20, 23, 23, 99,221,186,117, 80, 40, 20, 61, 0,124,251, 38,203, - 69,211, 52,191, 60,213, 9, 73,146,127,113,176,202,197,150, 88, 44,134,149,149, 21,230,205,155,199, 31, 60,120,112,224,155, 44, -243,138, 21, 43,154,173, 89,179,102,251,238,221,187,207,140, 30, 61,250,208,195,135, 15,199,153,154,154, 62,184,116,233,210, 18, -161, 80, 72, 55,232,226,197,229, 58, 70, 70, 70, 86, 22,249, 60,138,162, 36, 20, 69,193, 96, 48, 64,175,215,163,164,164, 4,189, -122,245, 50,154,239,206,157, 59, 18, 0,248,246,219,111,121, 0, 36, 52, 77,163, 50,159, 74,165,226,245,236,217,211,168,107,137, - 82,169,140,185,125,251,118,231, 17, 35, 70,220, 56,112,224,128,185,179,179, 51,146,147,147,145,154,154, 10, 87, 87, 87,172, 93, -187,182,152, 97,152,142,101,162,234, 55, 35,119,219,222,220,220,156,151,152,152, 8,131,193, 0,127,127,127,108,220,184, 17,239, -191,255, 62,188,189,189, 81, 88, 88,136,168,168, 40,236,218,181,203,156,207,231, 15,125, 27,196, 85,185, 8,170,238,213,192, 7, - 12,185, 72, 36, 42, 16,137, 68,130,114,161,117,247,238,221,122,187, 87,149, 16, 89,207,229, 55,134,242,107,176, 94,255,242,110, - 74,165, 82,184,185,185, 25,205, 35,149, 74,137,242,123,172, 94,175,135, 82,169,164, 30, 62,124, 88, 33, 80, 21, 10, 5,117,235, -214, 45, 74,163,209,112, 76, 76, 76, 0, 0,102,102,102,127,183,200,172, 81,139,252,211, 29,172,208, 42,239, 21, 14, 86,185,224, -169, 45,200,157,203,229, 26, 43,176,192,225,112,112,246,236, 89,200,100, 50,152,152,152,192,195,195,163,220,133,169,214, 21,107, -168,192, 18, 8, 4, 48, 53, 53,197,249,243,231,213,247,238,221,155,208, 80,231,106,243,242, 69,235,150,125,191,208, 50, 59,250, - 38,146, 83,149,200, 78,215,133, 93,127,152,112, 14,165, 9, 70,129,104,207, 16,194,235,177,209,226,202,195, 74,236, 39, 55,151, -255,214,189,119, 63,135, 33, 99,166,144, 83,167, 78,109, 63,118,236,216,156, 15, 63,252,112,186, 88, 44,246, 54, 24, 12,185, 23, - 67, 66, 18,134, 15, 31,110,153,159,159, 63, 22, 70,196, 36,113, 56, 28,101,159, 62,125, 26, 1,128,137,137,137,118,199,142, 29, - 2, 51, 51, 51,140, 26, 53, 74,157,150,150, 38, 42,171,143, 92, 99,221,171,178,155, 77,198, 39,159,124, 98, 83, 71, 29,103,212, -179, 74, 91, 6, 6, 6,110, 61,120,240, 32,178,179,179, 81, 92, 92, 12, 62,159,143,149, 43, 87, 34, 49, 49,241,167,152,152,152, -135,111,203,197,204,215,215,151,185,117,235, 22, 30, 60,120, 0,141, 70,131, 9, 19, 38, 0, 0,161, 84, 42, 1,160,207,155,238, - 41, 72, 73, 73,193,222,189,123, 65, 81, 20, 70,143, 30,141,198,141, 27, 87, 8,172,180,180, 52,236,216,177, 3, 20, 69,225,147, - 79, 62,129,147,147, 19,244,122,189,168,107,215,174,220, 55, 53,162,116,214,172, 89,207,142, 29, 59,118, 38, 41, 41,169,255,242, -229,203,187, 18, 4, 65,207,158, 61,123,153, 92, 46,127,165,209,151,185,249,133,120,242,244, 5, 12, 6, 67,181, 47,107, 43,139, -122,243,197,198, 37,194, 96,160, 42, 56, 40,234, 79, 62, 75,139,250,241, 41,149,202,146,236,236,236,226, 79, 62,249,196,108,235, -214,173,132,155,155, 27,158, 63,127, 14, 30,143, 7, 19, 19,147,146, 39, 79,158,212, 55, 53, 67, 74, 78, 78,142, 27,135,195,225, - 63,125,250, 20,206,206,206,104,211,166, 13,150, 46, 93,138,204,204, 76, 24, 12, 6,216,216,216,208,122,189, 62, 66,167,211,133, -190,233,243,168,170,115, 85,254, 42,115,174, 72, 0,191,227,175,129,227,117,186, 88,149, 29,172,134,186, 87,127,163,168,252,219, - 70, 38,186,185,185,133,200,229,242,192,199,143, 31,191,228, 98,125,240,193, 7, 58, 87, 87,215,171,198,242,200,229,242, 92,129, - 64, 96,169, 86,171,113,243,230, 77,120,120,120,240,243,243,243,131, 81,154,244, 26,191,253,246, 91,112,122,122, 58,223,193,193, - 1, 0,224,238,238,142,252,252,252,220,255, 67,245,253, 69,139,252, 27, 4, 86,181,182, 92,213, 46,194,218, 68, 86,121, 66,210, -186,156, 22,149, 74, 85,225,136, 72,165, 82,208, 52,253, 82,119,100, 85,129, 85,205, 40, 66,163, 79,236,203,151, 47,171, 55,111, -222, 60,172, 66, 12, 25,129,202, 49, 88, 91,126, 92,178,162, 92, 92,221,191,118, 1,191, 61,206,207,154,189,244,199, 53, 13,173, -108, 79, 43,137,175,173,173,229,149, 31, 87, 46,147,167,220, 62,131, 67,155,127,100,238,223,185,211,122,242,157, 59, 67, 39, 79, -158,108,129,210,120,171, 20, 0,215, 80, 58,220,220,168,128,239,219,183,111, 59,149,127,110,221,186,181, 94, 46,151, 67, 38,147, - 33, 51, 51,147, 47,147,201, 68, 33, 33, 33,245,142,117,184,115,231,142,237,107,110,107,205, 7, 13, 26, 20,250,235,175,191, 74, -243,242,242,144,144,144,128,175,190,250, 10,235,215,175,135, 92, 46,199,169, 83,167, 76, 2, 3, 3,175, 60,121,242,164, 3,222, -112,114, 85, 63, 63, 63,230,206,157, 59, 72, 72, 72,128,193, 96,192,144, 33, 67,234,124,120,248, 63, 59, 88,204,204,153, 51,177, -117,235, 86,144, 36,137, 49, 99,198,160,160,160,160, 98,189,133,133, 69,117,235, 56,168,123, 68,233,223,119,161,225,114,153,144, -144,144,229, 93,187,118, 69, 82, 82, 82,255, 86,173, 90,253, 60,110,220,184,148, 87,229, 53, 55, 53,129,159,151, 11, 52, 26, 13, - 52, 26, 13,236,237,237, 81, 88, 88,136,103,207,158, 65,163,209,192,214,198,172,222,124, 45,189,155, 65,171,213, 66,163,209,192, -198,198, 6,197,197,197,120,254,252, 57, 52, 26, 13,172,173,205,235, 67,215,168,111,223,190,151,247,237,219,103,249,203, 47,191, -104,223,123,239, 61,193,162, 69,139, 8,185, 92,142,244,244,244,134, 78, 26, 27,114,237,218, 53,231, 94,189,122,185, 71, 69, 69, - 33, 52, 52, 20, 90,173, 22, 45, 91,182, 68,108,108, 44,218,183,111,143,130,130,130,219,119,239,222,125, 43, 70,185, 84, 21, 86, - 97, 97, 97, 7,249,124, 62, 3,160,161,110, 19, 0, 32, 57, 57, 89,232,227,227,163, 17, 10,133,130, 27, 55,110,236,123, 5,247, -234,245, 63,253,188,250,200,196, 26,209,172, 89,179,153,142,142,142,189,252,253,253, 17, 21, 21,197, 23, 10,133,248,240,195, 15, -117, 3, 6, 12,208,113,185, 92,163, 7,220,136, 68,162,104, 19, 19,147, 46, 26,141, 6, 90,173, 22, 23, 47, 94,132,133,133,197, - 87,129,129,129, 51,148, 74, 37, 82, 83, 83, 5, 66,161,176,194, 37,239,222,189, 59,114,114,114,162,255, 15,213, 87,173, 22,249, -167, 11,172,106,197, 80,101, 7,171,182,238, 65, 99, 5, 22, 73,146,208,106,181,144, 72, 36, 21, 2,171,114,166,248,134,112,214, -232,249, 70, 70,222,136,139,139,251, 1,192,233,134,252,255,240, 47,187, 21,166,116, 73,163,212,219,167,241,228,126, 24,142, 69, -229,101,205, 94,250,227,180,119,134,141, 74,175, 42,200,140,122,242,176,150,248,216,218,148,138,171,236,232,155,120,250, 32, 12, -167,111, 39,135,107,129, 88, 0,223,191,206,131, 90,222,183,254, 54, 65, 40, 20,206, 44, 31, 45, 24, 23, 23,135,209,163, 71,231, - 37, 36, 36, 76, 25, 50,100,200,250,115,231,206,153,155,155,155,227,252,249,243, 38,141, 26, 53, 10, 6,240, 38,187,179,152,240, -240,112,100,103,151, 14,222,236,216,177,227, 91, 37,174, 0, 32, 60, 60,156, 31, 24, 24,248, 7,128, 30,209,209,209,160,105,250, - 70, 68, 68, 68,199,242,245,181,173, 51, 70,191, 21, 22, 22,242, 76, 76, 76,170,189, 89,241,249,124,126, 3, 28,135, 10,206,235, -215,175, 47,251,225,135, 31,142,125,241,197, 23, 79, 95,145,179, 90, 7, 43, 48, 48, 16,106,141, 30,201,233,249, 48, 24, 12, 40, -209,166,191,146,131, 21, 24, 24, 8,149, 90,139, 68,101, 14, 12, 6, 3,138,212, 70, 27, 37,146,222,189,123,159, 59,112,224,128, -221,141, 27, 55,160,213,106,233,176,176,176,231, 19, 39, 78,148,127,252,241,199,150,165,187,220, 32,172,253,224,131, 15,134, 93, -191,126, 61,199,221,221,221,226,238,221,187,200,200,200,128, 94,175, 71,143, 30, 61, 32, 20, 10, 95, 4, 7, 7,243, 97, 68,104, -193,255, 83, 96, 69, 71, 71,151, 11,171, 49,175, 75, 8,149, 59, 88,255, 37,236,219,183, 47,101,199,142, 29, 94, 10,133, 98,205, -135, 31,126,216,221,222,222,158, 20, 8, 4, 33, 92, 46,119, 6, 65, 16, 47,234, 81,119,227,204,205,205,159,113, 56, 28, 78, 74, - 74, 10,158, 62,125, 10, 14,135, 3,134, 97, 4, 42,149, 10,182,182,182,224,112, 56,229,238, 24, 28, 29, 29,169,216,216,216,113, - 96,241,122, 4, 86, 57, 22, 47, 94,140,205,155, 55,227,211, 79, 63,173,245,119,101,105, 1,170,222,136,124, 80, 41, 87, 70,249, - 40,194,160,160,160,151,254, 87,222, 21, 56,101,202,148,151,254,124,252,248,241,234,186, 8, 95,226,172, 9,113,113,113,245, 81, -192, 21,156,229, 49, 88,195, 71,143, 81,174, 91,182,224,193,174, 19,127,180, 80,170, 24,229,236,165, 63,206,170, 42,174,140,229, -244,176,149,122, 42,172, 44, 66,126, 88,185,204,180,220, 13, 59, 16,145,150, 15, 3,243,105, 61,143, 87,157,251,206,227,241,148, - 29, 58,116,104, 4, 24,221, 45,104, 84,125,190,106, 57, 53, 26, 13,110,221,186, 5, 0, 24, 63,126,124, 94, 66, 66, 66, 23, 0, -143, 18, 18, 18,162,251,245,235, 23,114,246,236, 89,243,178, 39,250,236, 55, 89, 78,160,116, 68, 43,151,203, 45,143,105, 32, 94, -247, 49,122, 29,229, 84, 42,149,159, 78,154, 52,105,179, 70,163,225, 22, 23, 23,127,106,236,186,186,202,121,248,240,225,167,110, -110,110, 93, 81,115, 42, 6, 26,192,205, 87,225, 92,179,102, 13, 0,184,191, 10,103, 77, 14,214,193,131, 7, 65, 81, 20, 28,109, - 77,161,209,104, 80, 57,222,211, 24,206,170, 14,214,161, 67,135, 64,211, 52,156, 20, 22,208,104, 52,181,197, 30,190,196,105,105, -105,249,227,238,221,187, 29,163,163,163,145,146,146,130,213,171, 87,191,200,204,204, 28,192,229,114,133, 63,255,252,243,149,129, - 3, 7,218, 26, 12, 6, 77, 3,218,146, 70,167,211,141,235,208,161,195,158, 37, 75,150,196,123,120,120, 52,234,208,161,131,121, - 78, 78, 78, 70,100,100,100,194,230,205,155,101, 6,131, 97, 28,106,238,122,250,191,157, 71, 0,144,154,154,122, 2,165,233,107, -234, 43,172,234, 44,231,157, 59,119, 14,149,113,159, 54,146,251,255,178,239,175, 97,100, 98,173,229, 28, 63,126,124, 50,254,154, -223,172, 94,229,188,112,225, 66,194,136, 17, 35, 22,251,248,248, 4,201,100, 50,196,196,196, 84,164, 69, 42,127, 64, 39, 8, 2, -195,135, 15,199,228,201,147,113,254,252,249,197,195,135, 15, 79,248, 63,212,231,127, 67, 96, 81, 20,149,148,144,144,160,216,189, -123, 55,135, 32, 8,236,221,187, 23, 85, 3,107,203,223, 1,224,214,173, 91, 6,134, 97,158,213,182, 49,138,162,146,194,194,194, -108,119,238,220,201, 19,139,197, 16, 10,133, 72, 77, 77, 5, 77,211,116,122,122, 58,185,111,223,190,151,130,117,111,222,188,105, -208,233,116,137,111,170,114,174, 70,189,152,113,246,212, 49,171,246,237,186,228,201, 45, 44,170, 21, 42,135,215,120,128,240,170, -221,197,146,154,200,151,253,176,114,153, 89,185,184, 58, 24,145,150,167,214, 80,221, 31,103,169,238,191,238, 50,223,184,113,195, -233, 45,109,107, 11,186,118,237, 74, 3,176, 2, 48, 31,165,206, 29, 0, 60,122,254,252,121, 59, 55, 55,183, 47, 80, 58,241,245, -130, 55,233, 94,209, 52, 93,217, 57,125,107,131, 44, 35, 34, 34,226, 1,244,172,239,186,186, 48,124,248,240, 56,188,250,116, 51, -127, 59,103, 57,114,242, 10,240,236,121, 74,217, 84, 94, 20,168, 23,105,149,226,167,244,200, 41,168, 95, 26,185,220,252, 66, 60, -123,158, 12,154,102, 74,249,168,148,138, 32,119,131,193,128,172,188,186,123,237,185, 92,110,167,160,160,160, 1, 36, 73,146,183, -110,221,210,172, 92,185, 50, 41, 51, 51,115, 48,128,196,178, 24,190,110,199,143, 31,255,197,136,148, 12,149, 57, 9,131,193, 80, -126, 99,142,210,235,245,237,231,204,153, 51, 29, 64, 39, 0, 78, 0, 18, 81, 26, 90,176, 22,111, 81,198,113,130, 32,198,252, 19, -185, 95, 5,255,148,145,137, 7, 15, 30, 92, 56,121,242,100,110,219,182,109,191,110,221,186, 53,249,252,249,115,100,100,100, 84, - 60, 92,246,237,219, 23,206,206,206,244,233,211,167,151,190,247,222,123, 11,193,226,245, 9,172,172,172,172,190, 99,198,140,185, - 64,146,100,147,154, 38,119,174,236, 46,209, 52,157,144,158,158, 94,107, 18,178,172,172,172,190, 11, 22, 44,184,192,229,114,155, - 84,154,204, 89,147,157,157, 61,101,248,240,225, 27,120, 60,158,176,178,219, 69,211,244, 11,165, 82,249,127, 13, 40,174,154, 7, -171,223,192,119,179, 94,149, 83, 42,128, 75,210,173, 83,120,250, 32, 28, 7, 35,210,114, 11,181, 84,183,216,172,146,255,154,242, -207, 0, 48,165,134,117, 79, 1,124,250, 22,148,145, 40,139,249, 35,216, 75,195,219, 15,131,193,144,220,171, 71, 55, 84, 77,203, - 80,117,153,162,168,100, 99,249,122,118,239, 90, 35, 79,249,231,186,248, 56, 28,206, 23,109,219,182,229,124,241,197, 23,233,103, -206,156,249, 35, 55, 55,119, 22,128,146, 74, 14, 99, 12,106, 79, 38, 90, 29,167,149,193, 96,168, 60, 7,162, 6,165, 51, 60,172, - 96, 91,194, 91,137,127,196,200,196,141, 27, 55,126, 59,123,246,236, 93,246,246,246,123, 59,117,234,228,238,234,234, 42, 55, 49, - 49, 65, 65, 65, 65, 97, 78, 78,206,147, 83,167, 78,141, 30, 59,118,108, 60,123, 56,223, 78,248,252,211, 56,135,245, 4,195, 68, -121, 48, 76,148, 7, 51,172, 39, 24, 99,150,235,226,108,110, 43,237,218,198, 73, 30,222,194,222,228,174,187,141,212,235,191, 84, -159, 44, 39,203,249, 31,228,116, 18, 8, 4,191,113,185,220, 78,175,145,211, 74, 32, 16, 88,179,199,136,229,252, 59, 57,135, 13, - 27,198, 25, 54,108, 24,231, 13,150,179, 70, 48, 12,211,154, 97,152,129,101,239,229,159,123,149,127,247,127, 44,135,209, 47, 46, - 88,188,132, 35,127,128,168,218,229, 87,215,114, 93,136, 73, 47, 14,169,239, 19, 43, 11, 22, 44,254,177, 72,212,106,181,131, 95, - 51,103,150, 86,171,101,107,150,197,223,123,255, 59,114,132,122,139,139,103, 77, 16,196, 73,134, 97, 2, 1,160,252,115,229,239, -222, 54,144,108,147, 98,193,130, 5, 11, 22, 44, 88,176,120,189, 32, 80,179,205, 87,159, 24,161,134, 88,133, 15, 89, 78,150,147, -229,100, 57, 89, 78,150,147,229,252,207,113,214,197,253,151,255, 51, 12, 51,176, 54, 7,139, 32,136, 83,255, 15,209,244, 54, 77, - 79,201,246,121,179,156, 44, 39,203,201,114,178,156, 44, 39,203,249,170,194,102, 96,233, 27, 51,176,242,231, 74,239,255,175,114, -176, 49, 88, 44, 88,176, 96,193,130, 5,139,127, 13, 84,115,231,206,253,154, 32,136,147, 0, 48,119,238,220,175,223,246, 2,179, - 2,139, 5, 11, 22, 44, 42, 65,161, 80, 12, 2,176, 16,165, 33, 20,193, 74,165,242, 16, 91, 43, 44,254, 77,176,178,178,146, 90, - 90, 90,254, 65,146,164, 51,240,114,202,165,234,230,255,165,105, 90,153,147,147,211, 39, 61, 61, 61,235,255,201, 89, 5, 55,130, -131,131, 75,130,131,131,203, 3,218, 51, 1, 16,101, 93,134,153,255, 10,129, 53,167,119,227,206,246, 14, 14,251,242,178,179, 35, - 52, 37,133, 31, 7, 95, 74,205,105,224,182, 45, 5, 2,193, 8,169, 84,218,139, 97, 24, 23, 14,135,243, 56, 63, 63,255,162, 94, -175, 63, 0,160,136, 61, 5, 88,188,105,248,249,249,181, 16, 8, 4, 95, 17, 4,209,206, 96, 48, 56,242,120,188, 84, 0,183, 53, - 26,205,202,200,200,200, 8,182,134,254, 53, 32, 21, 10,197, 79,102,102,102,109,243,242,242, 70, 3,248, 58, 38, 38,198,151, 36, - 73,120,121,121,125,173, 80, 40,158,153,152,152,108, 43, 44, 44,188,161, 84, 42,103,160,129,211,250,176,120,187,224,226,226, 18, - 70,146,164, 99,229,233,218,170, 10,130,170,239, 12,195,196, 71, 71, 71,119,168,137,211,193,193,193, 69, 46,151,111, 0,208,186, - 58, 81, 81, 25,101,177, 60,119, 11, 10, 10,166,164,164,164, 84,155,136,215,220,220,220,196,198,198,102, 33, 65, 16,195, 73,146, -172, 51,125, 2, 77,211, 20,195, 48,135, 51, 50, 50, 22,228,230,230, 22,214,120,243,181,180,188, 24, 26, 26,218,218,202,202,170, -206,156,127, 6,131, 1,201,201,201,214,129,129,129,161,233,233,233, 30,255, 79,206,202, 32, 8, 66,139,210,185, 27,255, 49,168, -183,192, 34, 40,124,248,241,132, 49, 14,121, 73, 49, 14,187, 15,156,109,254,117, 31,110,183,165,231, 19,211,234,195, 33, 18,137, - 70,184,186,186,174, 93,187,118,173,101,147, 38, 77, 8,177, 88, 12,165, 82,233,113,239,222,189,119,131,130,130, 22, 36, 39, 39, -143, 51, 24, 12, 23, 94,113,223,204, 44,100,220,175,114,138, 12,243,216, 75, 9,139,250, 96,216,176, 97,156,164,164,164, 32,185, - 92,254,229,156, 57,115,132, 77,155, 54,133, 76, 38, 67, 70, 70,134, 83,108,108,108,163, 13, 27, 54, 12,106,223,190,253,207,124, - 62,255,155,144,144, 16, 3, 91, 99,255,108, 40, 20,138,159, 66, 67, 67, 63,179,183,183, 71,199,142, 29,111,180,108,217, 82, 46, -145, 72,112,230,204, 25,184,184,184,120,155,154,154,222,222,180,105, 19,111,225,194,133,126, 71,143, 30,133, 82,169,156,198,214, -218,191, 64, 85,147,164, 99, 68, 68,132,141, 68, 34, 1, 69, 81,101,179, 1,208, 96, 24,166,226,189,178, 24,162, 40, 10,221,187, -119,215,213,113,111, 91,255,224,193,131, 94,229, 51,156, 84, 18, 82,213, 34, 53, 53,181, 87,247,238,221,215, 3,168, 54,161,182, -141,141,205,194,247,223,127,127,166,183,183,119,197, 84,115, 52, 77, 87,188,103,101,101, 97,234,212,169, 21,219,160,105, 26,161, -161,161,211, 63,255,252,115,228,230,230,126, 94,203,190, 59, 91, 89, 89, 17,117, 77,129, 23, 20, 20,132,160,160, 32,172, 93,187, -150,224,114,185,102,117,212,231,107,231,252,167,163,254, 2, 11,204,233,211, 71, 14,125, 28,216,213,157, 24, 59,216,223,237,151, - 19, 97, 55,231,244,108,210,101,249, 31,207,147,140, 20, 87,211, 39, 77,154,180,108,209,162, 69,162, 39, 79,158, 32, 42, 42, 10, - 6,131, 1, 50,153, 12, 45, 90,180, 32, 79,159, 62,173,152, 62,125,250,145,171, 87,175,142,215,233,116, 71, 27,186, 99,118,230, -156,149, 82, 49,103, 84,145,138,185,173,163,168, 19,111, 99,229,183,105,211,230,188, 94,175, 95, 30, 25, 25,121,249,159,210, 96, -252,253,253, 59,242,249,252, 5, 2,129,160,223,191, 85, 92,188,120,241, 98, 65,231,206,157,191, 12, 10, 10, 18, 62,127,254, 28, - 49, 49, 49, 80, 42,149,104,210,164, 9,154, 52,105, 66,172, 93,187, 86,244,243,207, 63, 79,187,119,239, 30, 9, 96,118,125,174, -233,118,118,118,159,244,236,217,115,168,149,149,149,105, 74, 74, 74,254,245,235,215,127, 83, 42,149, 91, 80,247,156,145, 53,114, - 90, 89, 89,141, 13, 12, 12, 28,106, 97, 97, 97,161, 84, 42,115,254,248,227,143,223, 50, 50, 50,182,189,162,211,162, 0,224, 11, -192,178,108, 89,217,184,113,227, 71, 9, 9, 9, 25,175,145, 51,181,113,227,198, 81, 13,225,180,178,178,146,114,185,220, 67, 4, - 65,216,215,226, 16,164, 26, 12,134,247,179,178,178,138,107,227,146,203,229,237, 20, 10, 5,110,223,190,141,249,243,231, 91,116, -239,222, 29,177,177,177, 32, 73, 18, 95,126,249, 37,225,229,229,197, 75, 75, 75, 67, 64, 64, 0, 46, 94,188,216,161,108,186, 27, - 22,198,225, 48, 0, 51, 0, 31, 0,168,220, 21,100, 5,224, 56, 74,103,120,120,239, 77, 21, 78, 44, 22, 99,255,254,253,224,241, -120,224,243,249,200,205,205,133,131,131, 3,248,124, 62,120, 60, 94,197,139,207,231,163, 81,163, 70,117,242,209, 52,221,134,195, -225,160,168,168, 8, 20, 69, 85, 76,179,148,159,159, 15,134, 97, 32, 16, 8, 42,190, 47, 95, 71,211,116,155, 90, 92,155,225,246, -246,246, 56,112,224, 0,170,203,131, 38,151,203,241,240,225,159, 3,238, 56, 28, 14,252,252,252, 72,130, 32,134, 3,248,188, 22, - 94, 6, 0, 38, 76,152,240,210,244,116, 85, 95,229,115, 7, 51, 12, 83,121, 10,177,255, 27,231,191, 90, 96,205,237,209,100,138, -183,191,223, 74,129,128, 39,166, 41, 61,104,131, 30,180, 94, 11,154, 54, 32,254,133, 18, 46, 54, 2,140,239,239,234,188,231,124, -236,195,121,189,155,181, 13,190,240, 52,166, 10, 69,213,161,150,141,189,189,189, 23, 46, 89,178, 68,244,199, 31,127,224,201,147, - 39, 88,186,116, 41, 0, 64, 42,149,226,204,153, 51,160, 40, 10, 63,254,248,163, 73,191,126,253, 54,164,166,166,134, 0,200,169, -131,179, 58, 56, 55,107,170, 24,124,116, 85, 23,161,247,187, 71,214,164,229, 80,167, 0,212,150, 64,237,239,152,182,166, 78, 78, -131,193,208,155,199,227,117,104,217,178,229, 32, 35, 69,214, 27, 41,103,101,113,197,227,241,206,234,116, 58,137, 64, 32,224,214, - 34, 10,222,104, 57, 95,133,211,207,207,175,133, 92, 46,255,114,193,130, 5,194, 91,183,110, 33, 55, 55, 23, 25, 25, 25,152, 49, - 99, 6, 54,110,220, 8,111,111,111, 72,165, 82, 76,155, 54, 77, 52,117,234,212, 41, 1, 1, 1,135,195,194,194,194,140, 40, 39, -217,181,107,215,253,123,247,238,109, 98, 48, 24, 72, 0,208,235,245,230, 47, 94,188, 24, 51,111,222,188,174, 17, 17, 17, 31, 52, -160, 62,201, 14, 29, 58,236,253,229,151, 95, 92, 5, 2, 1, 89,118,177,182,254,232,163,143, 62,254,230,155,111,186,135,135,135, -143,170,165,221,215, 86,159, 45, 37, 18,137,231,148, 41, 83,178, 6, 15, 30,156, 2, 0,225,225,225, 68,100,100,100,199, 49, 99, -198, 36, 4, 5, 5, 69, 54,128,179,149, 68, 34,113,255,236,179,207, 50, 7, 12, 24,144,202,231,243,233, 91,183,110,113, 30, 62, -124,216,233,147, 79, 62,137,251,230,155,111,238,215,135,147,199,227, 29, 60,122,244,104, 87, 7, 7, 7, 10, 40,157, 77,129, 32, - 8,134, 32, 8,134, 36, 73,134, 36, 73,196,197,197, 53, 30, 54,108,216, 62, 0,239,212,198,153,151,151, 55,166, 83,167, 78,161, -243,231,207,183, 0,128,208,208, 80,112,185,220,138, 27,194,147, 39, 79,160,209,104,176,118,237, 90, 93, 97, 97,225, 39,255,182, - 54,255, 55,115, 54, 2,208, 6,192, 37, 0, 61,202, 68,150, 21,128,203, 0,188, 0, 92,127, 83,229, 36, 73, 18, 20, 69, 85,136, -168, 11, 23, 46, 96,227,198,141, 56,112,224, 0, 28, 28, 28, 94, 18, 88, 60, 30, 15, 53,116,249, 61,172, 34, 50,202,175,237,160, - 40, 10,119,238,220,193,182,109,219, 96, 99, 99, 3, 43, 75, 75, 88, 89, 91,163,109,219,182, 40,119,205, 40,138,170,142,247, 37, -206,172,172, 44,208,180,113,207, 74, 12,195,160,160,160,192,232,250,172, 77, 8, 85,126,213,231, 24,189, 34,231,127, 71, 96, 41, -236,172,190, 25, 54,180,183, 24,148, 1,208, 21, 3,186, 18, 48,186, 18, 48,218, 98, 16, 2, 49, 24,189, 26, 82, 78, 54, 62,237, -105, 43, 63,114, 51, 61,122, 78,119,167,129,203, 47, 39,158,173,229, 73,241,219,205,155, 55,155, 62,120,240, 0, 49, 49, 49, 88, -189,122, 53, 22, 45, 90, 84,241,228,240,206, 59,239,224,198,141, 27,208,106,181,152, 63,127,190,197,156, 57,115, 62, 43, 44, 44, -172,247, 36,147,118,150,220,141,135,246,172,181,176, 16,103, 97,252,224,187,150,235, 15, 37, 76,201, 47,214,255,252, 54, 30,128, - 57,115,230, 72, 86,172, 88,241,123, 61, 68,214, 27,115,174,132, 66,225,217,111,191,253, 86,250,237,183,223, 82,175,137,211,155, -203,229, 30,212,235,245, 95, 68, 70, 70,158,107, 0,133, 83,235,214,173,151,198,196,196,156, 45, 44, 44,252,165,234, 74, 62,159, -255, 78,171, 86,173, 70,223,188,121,243,107, 0,207,140, 33, 20, 10,133,211,191,252,242, 75, 81,114,114, 50,242,242,242, 32, 20, - 10, 95,186,184, 9,133, 66,144, 36, 9,129, 64,128,143, 62,250, 72,180,125,251,246, 89, 0, 70,214,217, 38,237,236, 62,217,179, -103, 79, 19,157, 78, 71, 22, 23, 23,131,207,231,131,207,231,163, 69,139, 22,156,217,179,103, 55,154, 57,115,230,164,244,244,244, -117,245,217,121,115,115,243, 49,123,247,238,117, 21, 8, 4,164, 82,169, 68,199,142, 29,113,251,246,109,180,109,219,150, 51,123, -246,108,167,105,211,166, 77,204,204,204,220, 88, 95,151, 73, 34,145,120,135,134,134, 38,217,219,255,105, 14, 53,105,210,132,233, -223,191,127, 78, 76, 76,140,123,120,120,120,118,171, 86,173,146,234,193,233, 32,145, 72, 60,206,157, 59,167, 92,180,104, 81,207, -141, 27, 55, 14, 46,115,112, 79, 44, 93,186,244,143,236,236,108,175,219,183,111,103,183,109,219, 54,165, 30,156,150,118,118,118, -134, 41, 83,166,152, 84, 93,177, 96,193, 2, 44, 92,184, 16,187,118,237,202, 6, 96, 83,235,206,150, 5,180,123,123,123,203,123, -244,232,129,208,208, 80, 76,155, 54, 77,163,215,235, 99, 1,160, 87,175, 94,205,131,130,130, 4, 17, 17, 17, 48, 55, 55,231, 41, -149,202, 29, 10,133,130, 13,124, 55, 30,131, 1, 92, 1,224, 93, 38,178,222, 7,112, 4,128, 39,128, 24, 0,195,222,100,225,202, - 5, 86, 74, 74, 10,182,111,223,142,165, 75,151,194,205,205, 13, 58,157, 14, 92, 46,183, 66, 92,113,185, 92, 16, 4, 1,134, 97, - 8, 99,121,239,222,189,139, 61,123,246, 96,254, 55,223,192,196,164,180,153,234,116, 58,228,228,230, 66, 36, 18, 85,136,176, 58, - 4,211,225,167, 79,159,206,116,112,112,168,232,166,172,220, 69, 8, 0, 50,153, 12, 52, 77,195, 96, 48, 64,163,209, 96,235,214, -173, 6,134, 97, 14,215,225, 54, 85,136,161,207, 63,255, 28, 26,205,159,243,131,251,250,250,150,186, 33,141, 27,195,207,207,175, - 98,185,220,161, 50,134,115, 91,199, 22, 80, 85,250,181,123,208, 42, 0,128,163,163, 35,220,221,221,161, 80, 40,140,226,252,183, - 8,172,242, 9,110, 95,154,232, 54, 45, 45, 99,249,174, 77, 59, 86, 9,120, 36,175, 87, 7,119,152, 11, 13, 32, 36, 22,224,119, -157, 11,194,204,185,244,143, 57,113,208,158,155,139,247,253,178,200, 61, 26,206,241,160,126, 46,214, 65,103,227,170, 13,174, 35, - 73,178,157,147,147, 19, 66, 67, 67,209,164, 73, 19,124,251,237,183,240,240,240,128, 68, 34, 65,122,122, 58,138,139,139, 33,149, - 74, 65, 81, 20,252,253,253, 57, 38, 38, 38,221, 27, 32,176,252, 7,244,104,213,134, 43,247, 64,199,126,237,113,126, 67, 87,233, -174,147,169,243,242,139,245, 59, 80,105,194,213,183, 5, 67,134, 12, 65,122,122,186,100,239,222,189, 13, 22, 89,109,218,180, 57, -111, 48, 24,122, 27, 97,135, 95,190,118,237, 90,143,134,138,171,237,219,183, 75,205,204,204, 80, 87,240,102, 61,196,213,181, 49, - 99,198,200,247,238,221,123,172,101,203,150,239,214, 83,100, 57,189,255,254,251,167,182,109,219,230, 49,112,224, 64, 89,104,104, -232, 95, 4,150,183,183,247,144,243,231,207,191, 59,121,242,100,239, 95,126,249,101, 16, 74, 39,149,174,203,230,238,208,180,105, - 83, 36, 38, 38, 34, 61, 61, 29, 26,141, 6,233,233,233, 0,128,228,228,100, 56, 58, 58,194,220,220, 28,142,142,142,104,222,188, - 57, 65,146,100, 91, 99, 10,219,189,123,247,193, 0,200,184,184, 56,100,102,102,194,212,212, 20, 82,169, 20, 14, 14, 14,232,209, -163, 7,215,213,213,117, 64,125, 5, 86,255,254,253,135, 74, 36, 18,242,197,139, 23, 72, 72, 72,128, 70,163, 65,108,108, 44, 76, - 77, 77,209,171, 87, 47,158,171,171,107, 96, 3, 4,150,207,196,137, 19, 51, 42,139,171,114, 72,165, 82,194,221,221, 61,199,204, -204, 44, 0, 64,125, 4,150,207,180,105,211,210,131,131,131,187, 92,188,120,113, 78,249,151, 23, 47, 94,252, 10, 0,214,173, 91, - 23,106, 97, 97, 17, 0,160, 62, 2, 11, 12,195,208, 31,127,252,241, 83,129, 64,128,242, 87,185,112, 93,181,106, 21, 72,146, 52, - 53,130,230,235,152,152, 24, 95,153, 76,134,152,152, 24,112, 56, 28, 16, 4,241, 84,169, 84,250, 2,128,141,141,205, 51,181, 90, -237,162, 86,171, 49,108,216, 48, 98,224,192,129, 45, 86,175, 94,253, 13,128,183, 69, 96,181, 6,240, 35, 0, 45,128,111, 0,220, -126,203, 46,113,233, 0,186, 85, 18, 89,145, 0,132,101,226,170, 91,217,250, 55, 2,130, 32, 64,211, 52,184, 92, 46, 86,173, 90, - 5,157, 78,135, 95,126,249, 5, 71,142, 28, 1, 73,146, 32, 8, 2, 4, 65, 64, 46,151,227,167,159,126,170, 88, 54, 6, 6,131, - 1, 59,119,238,196,220, 57,115, 42,196, 85,217, 67, 31,236,108,109, 97,105,101,133,184,184,184, 58, 5, 86, 70, 70,198,130, 59, -119,238,160,182, 32,247,247,222,251,179,135,181,114,144,187, 49,229,228,112, 56,208,104, 52,232,221,251,207,219,199,103,159,125, - 86,241, 57, 55, 55,183,252,156, 0, 97,228,206,115, 56, 28,168, 24, 96,136,232,207,239, 6,124,241,197, 75,142, 92, 45,156,213, -106,145,127,165,131, 37,232,244, 98,221,243, 27,164,223,240,192,246, 99, 45,228, 98,208,133,169,224,247, 12,194,131, 28, 9,214, -108, 42,189, 23,206, 28,230, 15,159,222, 75,160,217,209, 7, 61, 26,107, 5, 59, 34,196,179, 1,124, 91, 29,159,149,149,149,149, -193, 96, 0, 73,146,144, 74,165,176,176,176,128, 88, 44, 70, 86, 86, 22,166, 79,159,142,179,103,207, 66,171,213,130,207,231,163, -105,211,166,208,233,116, 46,245,118,175,204,185,219, 86,175, 90,106,150, 29,183, 15,225, 79,242, 32, 49,117,196, 55, 19, 3,204, -131, 54,132, 45,200,204, 45,249,234,109, 60, 8, 94, 94, 94,152, 49, 99,134,228,231,159,127,110,144,200, 50, 24, 12,139,185, 92, -110,199, 47,190,248, 66, 60,108,216, 95, 31, 8,163,162,162, 48,105,210, 36, 85, 73, 73,201,247, 13, 17, 87, 2,129,224,236,182, -109,219,164,166,166,166, 72, 76, 76,124,109,226,106,237,218,181,114, 23, 23, 23,240,120, 60,209,206,157, 59,235, 35,178,154,191, -247,222,123,167,183,109,219,230, 60,113,226,196,228,208,208,208, 4,148, 14,171,127, 9, 17, 17, 17,185, 99,199,142,125,177,107, -215, 46, 87,154,166,207,237,223,191, 63, 16, 64,116, 29,117,233, 36,145, 72,144,149,149,133,153, 51,103,190, 20,160, 90,222,157, - 13, 0, 49, 49, 49,112,116,116,132, 90,173,118, 48,102,159, 45, 44, 44,204, 25,134,193,132, 9, 19,144,148,244,167, 54,113,112, -112, 64, 82, 82, 18, 12, 6,131, 69,125,235,209,220,220,220, 66,175,215,163,107,215,174, 80,171,213, 0,128,247,223,127, 31, 60, - 30, 15, 25, 25, 25,208,233,116,150, 13, 56, 60, 86, 3, 7, 14, 76,173,105,165, 84, 42,213,155,155,155, 55,174, 39,167,101, 96, - 96, 96,202,230,205,155,171,118,213,225,206,157, 59,239,152,154,154, 94,180,176,176,112,111, 64, 89,105,161, 80, 8,161, 80, 8, - 30,143, 7,129, 64, 0,161, 80, 8,129, 64, 0, 30,143, 7, 14,135, 99, 84,191, 10, 77,211, 56,117,234, 20, 72,146,124,169,235, - 98,254,252,249,159, 74, 36, 18,219,144,144,144,138, 7,192,162,162, 34, 52,107,214,172,105,211,166, 77,239,165,165,165, 37, 68, - 71, 71,191,251,134, 47, 31, 43, 1,148,143,106,219, 8,192,239, 45,188,196,165, 3, 24, 14, 32,172, 76, 92,105, 1, 12,125,147, -226,170,242,177,231,114,185, 21,231,185, 72, 36,130,191,191,127,133,152, 34, 8, 2, 37, 37, 37, 21, 93,132,198, 58, 88,249,249, -249, 80, 40, 20, 48, 49, 49, 65, 51, 55, 55, 60,141,141, 5,128,138,207, 2,129,160, 66,136,213,134,220,220,220,194,178, 96,245, -207, 95,179,184,100, 0,128,203,173, 61, 12, 91,161, 80,128,166,233,114, 97,201,188, 14, 78, 43, 43, 43, 20, 21, 21, 25,197,249, -111, 17, 88,127, 81,140, 65, 65, 32, 53, 55,154,108, 31, 62,160,205, 88, 79, 71, 41, 52, 89,113, 16,200, 44, 65,152, 53,198,154, - 77,231, 16,157, 80, 26, 26,181,230, 72, 4,118,205,235, 11, 66, 98, 1,133,234, 9, 76, 68,194,119,107, 18, 88,217,217,217, 69, - 58,157,206, 66, 44, 22,131,203,229,130,207,231, 35, 43, 43, 11,223,125,247, 29, 14, 29, 58,132,198,141, 27,195, 96, 48, 64, 32, - 16, 32, 51, 51, 19,124, 62,191, 94,163, 19, 57, 28, 12,156, 50,182,119, 19,169,165, 27,178, 35, 22,149,126, 41,247,199,196,247, - 57,130, 31,246, 60, 26,147,153, 91,242, 3, 74,131, 42,223, 42,200,100, 50,248,249,249, 97,212,168, 81,146, 95,126,249,101, 55, - 0,199,250,252, 63, 34, 34,226,186,191,191,127,159, 31,127,252,241,188, 82,169, 20,183,108,217, 18, 50,153, 12, 50,153, 12,113, -113,113, 88,180,104,145, 90,163,209, 4, 54,196, 29,227,114,185, 59, 63,254,248, 99,169, 92, 46, 71, 92, 92, 28, 44, 44, 44, 94, -105, 95,253,253,253,189,121, 60,222,181,181,107,215,202, 93, 93, 93,241,248,241, 99,180,106,213, 10,118,118,118,162,224,224, 96, - 99, 69,214,250,125,251,246, 53, 22, 8, 4,196,254,253,251,157,246,239,223, 63,189,174,237,238,217,179,167,241,254,253,251,215, - 2,232,133, 90,130,191,249,124,126,114,102,102,166,107,163, 70,141,176,125,251,118,144, 36,137,212,212, 84,124,243,205, 55, 8, - 14, 14, 70,219,182,109, 97, 98, 98,130, 70,141, 26,225,233,211,167, 16,137, 68, 70, 69, 60,167,164,164,228, 0,176, 57,123,246, - 44, 50, 51,255, 76,217,226,236,236,140,156,156, 28,104, 52,154,236,250,214,101, 74, 74, 74, 54, 0,219,123,247,238, 33, 33, 33, - 1,253,250,245,195,241,227,199, 17, 16, 16, 0,138,162,160,215,235,179, 27,112,136, 40, 14,135,195,212,114, 17, 37, 0,152,215, -147,211, 80, 27,103,217,117,167,190,156, 96, 24,134,169, 73, 92, 9, 4, 2,212,177,205, 10,221,236,225,225,177,176,105,211,166, -158,223,124,243, 13,143,203,229,162, 83,167, 78,205,135, 14, 29,250,130, 36, 73,203,185,115,231, 74,170, 51,131, 1,248,122,122, -122, 74,223,130,203, 71,101,151,238,109, 29,116, 98, 83,230,248, 9, 0,232,202,222, 15,224,207,152,172, 55,234, 96,241,249,124, - 4, 5, 5, 97,242,228,201,176,181,181,197,156, 57,115,192,229,114, 43, 94,229,174, 76,185,171,101,100,219,132,173,141, 77,237, - 39, 90, 89,144,123, 29, 15, 81,127, 75,154,134,114, 49,100, 76, 44, 84, 37,183,201, 40,209,246,138,156,255, 26,247,170,178,192, -122,201,150,171, 16, 87,253, 90,141,245,112, 20, 35, 50,226, 33,124,236,244, 96,120,188, 90, 90,139, 30, 4, 95, 10, 51, 49,215, -177,150, 3, 16,145,144,144,224,108,102,102, 6,157, 78, 7,129, 64, 0, 31, 31, 31,220,188,121, 19, 26,141, 6, 90,173, 22, 66, -161, 16,124, 62, 31,143, 30, 61,130, 78,167, 11,173,143,190,178,146,115,214,126,245,245, 34, 19,164,108,135,153,137, 0,221,219, -185, 2, 82, 79,112,138,159,224,199,249,129, 22,159,126,115,124, 77,122, 86,193,200,183,237, 32,200,100, 50,188,120,241, 2,251, -247,239, 47,209,104, 52, 99, 26,194, 81, 46,178, 14, 29, 58,116,222,204,204, 76,220,182,109, 91,196,198,198,226,251,239,191, 87, -107, 52,154,129, 13,141,239, 50, 24, 12,227,182,110,221,122,214, 96, 48, 72,203,197,197,171, 58, 87,211,167, 79, 55,105,214,172, - 25,158, 61,123, 6, 83, 83, 83,152,152,152,160, 73,147, 38, 80, 40, 20,162,233,211,167, 27, 35,178,166,142, 26, 53,234,244,174, - 93,187,156, 39, 78,156,152,124,224,192,129, 19, 0,242,171,171,218,247,222,123,239,157, 93,187,118, 57,127,250,233,167,137, 0, -166,163,142,145,117, 52, 77,223,120,246,236,153,139,135,135, 7,209,188,121,115, 8, 4, 2, 56, 56,148,154, 84,190,190,190,240, -240,240, 0,159,207, 7, 0, 60,123,246, 12, 48, 50, 47,203,213,171, 87,127,139,137,137,249, 36, 32, 32,128, 99,103,103,247,210, -232,164,224,224, 96,221,139, 23, 47,234, 61,143,214,165, 75,151,142, 63,124,248,112, 66,167, 78,157,184,230,230,230, 16, 10,133, -240,241,241,129, 66,161,192,247,223,127,175,123,254,252,121, 67,230,230, 74,188,119,239,158,200,205,205,141,170,161,173,154, 52, -192,121, 72, 14, 15, 15,231,183,107,215,238,196,153, 51,103,188, 43,175,104,211,166,205, 9,153, 76,102, 10,160, 33, 67,243,232, -202, 93,131,149,187, 10, 5, 2, 1,184, 92,110,157, 14,150, 82,169,252,221,214,214, 54,222,214,214,246,122,135, 14, 29, 76,195, -194,194,240,237,183,223,242, 53, 26,141,211,197,139, 23, 43,110,196,213,221, 64,139,139,139, 69,111,193,229, 99, 38,128,213, 0, - 36, 0,230,188,133,247, 24, 91,148, 6,180,187,163,180, 91,240,253, 50,177, 85, 30,147,245, 70, 69, 22, 77,211,224,241,120,112, -119,119,199,231,159,127,142,229,203,151, 99,202,148, 41,104,214,172, 89,197,177, 47,143,193, 42, 27,241,102,212,141,159,207,231, -195,214,206, 14,122,189,190,194,189, 2,128,167,177,177,224,114,185,160,105, 26, 26,141,166,206, 46, 66, 27, 27,155,133, 43, 86, -172,152,222,191,127,127,178,242,136,187,242,169, 88,202, 83, 75,148,191,244,122, 61,126,255,253,247,233,193,193,193,181,166,105, -168, 44,116,124,125,125, 95,234, 22, 92,183,110, 93,229,107, 54,122,245,234, 85,175,209,126, 28, 14, 7,238, 65,171, 94,234, 22, - 60,109,253,103,181, 53,250,104, 34,154,125,191,182, 38,206,127, 85, 23, 97,181,123,168,187,233,188,100, 88, 95,191,177, 30, 14, - 66,220,139,120,132,147,119,148, 79,178,178,242, 64,167, 63, 4,157,249, 24, 51,135,249,195,179,177, 5, 60, 27, 91, 96,230, 48, -127,208, 25,143,192,228,198,129, 17,153, 35,163,152,168,177,123, 33, 39, 39,103,229,226,197,139,115,205,205,205, 33, 18,137, 32, - 16, 8,144,156,156, 12, 47, 47,175,138,229,178, 39, 79,124,251,237,183,153,153,153,153,155,140,221, 17,169,152,156,184,252,155, -145,182,124,161, 9,144, 19, 10,185, 92,134,237,155, 86, 1,154, 84,128, 20, 96, 80, 47, 63,142,194,214,172, 7,128,230,111,219, - 65, 72, 76, 76, 68, 80, 80, 80,137, 74,165,122,165, 64,247,136,136,136,235, 58,157,174,207,166, 77,155, 84, 39, 79,158,124,101, -113, 85,206,169,215,235,251,237,222,189,187, 56, 49, 49, 17, 50,153,172,193,251,201,231,243,231, 26, 12, 6,249,234,213,171,233, -222,189,123, 83, 83,167, 78,165,198,141, 27, 71,189,247,222,123, 84,175, 94,189,168, 73,147, 38, 81, 26,141, 70, 40,145, 72, 86, -212, 65, 21,115,244,232,209,238,159,124,242,201,227, 45, 91,182, 56,118,233,210,165, 49,128, 5, 85, 95,254,254,254,230,187,118, -237,114,158, 60,121,242,179,253,251,247,247, 69, 29,221,131, 0,160,209,104,214,109,220,184, 81, 77,146, 36,100, 50, 25, 4, 2, - 1,172,173,173, 43,132,112,249,141, 92,167,211, 97,195,134, 13, 42,149, 74,181,198,152,125,207,206,206,222, 62,123,246,236,231, -231,207,159,215,151,143,242, 73, 77, 77,197,247,223,127,175,219,180,105, 83, 74, 94, 94,222,150,250,214,103, 65, 65,193,206,175, -190,250, 42,225,212,169, 83,122,146, 36,145,155,155, 11, 51, 51, 51,124,255,253,247,186, 45, 91,182,164, 20, 22, 22,214,155,179, -125,251,246,207, 82, 82, 82, 76, 52, 26,205, 95,220, 31, 30,143, 71,136, 68,162,242, 17, 97, 70, 35, 32, 32,224, 89, 66, 66,130, -124,201,146, 37, 33,189,122,245, 90,110, 98, 98, 18,107, 98, 98, 18,219,171, 87,175, 21, 27, 54,108,184, 92,198,121,177,222, 23, - 47,146,172, 16, 88,229, 93,133,229, 46, 86,153,147,101, 84, 23,161,135,135,199,190, 61,123,246,152,198,198,198,162,160,160, 0, -145,145,145,136,136,136,168,232,202,173,110,142, 49, 0, 40, 41, 41, 17,191, 5,151,143, 43, 40, 77,125,225, 90, 38,100,222, 54, - 28,169, 36,174,186,161,116,228, 89,183,178,101,111, 0,191,189, 73, 7,139, 97,152,138,135,157,145, 35, 71,226,226,197,139,104, -214,172, 89,133,168,170, 60,138,176, 62, 34,131,162, 40,248,248,248, 64,163,213,190, 36,208,185, 92, 46,172,173,173,241,236,217, - 51, 24, 12,134, 58, 29, 44,130, 32,134,247,239,223,159,140,138,138,130,135,135, 7, 34, 34, 34, 16, 17, 17,129,200,200, 72,220, -187,119, 15, 15, 30, 60,192,163, 71,143, 16, 29, 29,141, 86,173, 90,225,197,139, 23,232,219,183,111,121,154,134, 90, 77,182,250, -184, 77, 70,186,119,127, 7,231,191,194,193, 34, 42,191,219,154, 75,199,121, 42,184,184,119, 47, 26, 39,194,115,118, 17, 4,121, - 52,226,185,230,100,223,166,133,208, 29,250, 0, 62,195,247, 98,215,188,190,165, 79, 0, 25,143,160, 59,252, 33, 8,137, 21,158, - 22, 72,161,210,230,213,246,212,124, 39, 44, 44,236,224,158, 61,123, 62, 30, 59,118,172,128,166,105,136,197, 98,204,154, 53,171, - 34, 71, 8,135,195,193,148, 41, 83,138, 50, 50, 50, 86,195,200,145, 95, 0,196,166, 82,222,252,209, 19,190, 21, 33,105, 51, 64, -242,145,133,150,240,237,242, 49, 50, 18,110, 2,197,209, 0,193,199,166,101,159, 88,189, 51,238,135, 45,105,153,121,157,223,150, - 3,240,248,241, 99, 44, 88,176,224,149,197, 85, 85, 39,235,196,137, 19,187, 53, 26,205,132,215,200,217,111,249,242,229,103,109, -108,108, 26,220, 45,226,224,224,240, 81, 86, 86,214,199,198, 24,103,198,232,210, 67,135, 14, 13, 76, 72, 72, 88, 26, 19, 19, 83, -237,200,213, 71,143, 30, 29,239,211,167,143,164, 62,163, 8, 35, 35, 35, 35,218,182,109,187,113,245,234,213, 83,102,204,152, 33, - 18,139,197,144,203,229,136,137,137,129,147,147, 19, 0, 64,165, 82, 97,222,188,121, 42,189, 94,191, 43, 44, 44,236,166,177, 15, -203, 15, 31, 62, 28, 61,105,210,164, 79,154, 55,111,254, 14, 77,211,150, 90,173, 54,251,197,139, 23,167,202,132, 80, 67,186,119, -232,168,168,168, 81,147, 39, 79, 30,235,230,230, 54, 84,167,211, 89, 26, 12,134,236,164,164,164, 19, 5, 5, 5,219, 27,194,121, -243,230,205,204,113,227,198,197,165,165,165,121, 41, 20,138,124, 83, 83, 83,173, 86,171,229,200,100, 50, 19,129, 64,208, 10,192, - 77,130, 32,162,235,195, 25, 22, 22,150, 62,126,252,248, 4,141, 70,211,124,235,214,173,161, 82,169,244, 15,130, 32, 8, 62,159, -111, 46,149, 74,187, 3, 8, 33, 8,226,105,125,203, 74,146, 36, 93, 89, 80, 85,118,177,248,124, 62, 8,130, 48, 74, 96, 61,123, -246,236,250,226,197,139, 91, 52,109,218, 20,155, 54,109,202,145,201,100, 38, 67,135, 14,229,230,231,231, 19,181, 57, 88, 42,149, - 74, 4, 22,117, 62, 91,148,185,188,131, 43, 57,159,229,129,239, 71, 0,228,189,201,194, 49, 12,243,146,144,114,114,114,122, 73, - 84, 85, 94, 87, 31,129,101, 48, 24,192,231,243,193,229,114, 97,167, 80, 84,136, 57,134, 97, 16,251,244, 41,114,115,115, 43,210, - 52,212,209,198, 57, 4, 65, 96,196,136, 17, 70,109,119,228,200,145, 8, 9, 9, 65, 93,221,137,149, 71,252, 53,110,220,184, 78, - 49, 84, 86, 22,163, 71, 17, 58, 58, 58, 54,148,147,168,242,254,175, 16, 88, 47, 33, 53,167,100,201,182, 99,145,243, 82, 11, 12, - 71,133, 29, 94,124, 30, 20, 4,102, 94,207,198,231, 29,165,130, 62,158,100, 10, 52, 91, 58,129,144,151,222,108,152,162, 84, 16, - 82, 59,228,242,156,240,123, 68, 90, 26,201,227,212,234, 62,228,229,229,205,252,233,167,159, 56,103,207,158, 29,190,116,233, 82, - 51,119,119,119,140, 30, 61, 26, 90,173, 22, 15, 30, 60,192,164, 73,147,114, 50, 51, 51, 55,231,229,229, 45, 55,118, 39,172,228, -220,239,214,124,221,199,146,164,139,128,130,112,128,107, 10, 43, 11, 19,220, 15, 11, 5,242,195, 0,146, 15,144, 2, 4,180,244, -128,175,183,171, 71,218,165,187,157, 0, 92,123, 27, 14,192,167,159,126,250,218,196, 85,101, 65, 4,160,233,235, 44,103,185,200, -250,226,139, 47,206,210, 52, 45,105,208,163,236,145, 35, 20,106,207, 71, 86,111,243,239,238,221,187,163,106, 90,169,211,233, 78, -220,188,121,179,222, 73,102,245,122,253,188,168,168, 40,124,246,217,103,147, 63,252,240, 67,177,187,187, 59,156,157,157, 17, 27, - 27,139,152,152, 24,108,220,184, 81, 77,211,244,246,188,188,188, 47,235, 73, 77, 21, 20, 20,108,190,115,231,206,230,215, 88, 7, -116,126,126,254,142, 59,119,238,236,120, 93,132, 19, 38, 76,120, 24, 27, 27,155,227,224,224,208,150,195,225,180, 64,105,162, 72, - 37,128, 29, 13, 17, 66, 0, 48,121,242,228,123,207,158, 61,203,178,179,179,107,203,231,243, 93,203, 56, 83, 0,108,111, 32,103, -246,253,251,247, 93,219,180,105, 67,115, 56, 28,134,199,227, 49,101, 55, 67,134,203,229, 50, 4, 65, 48,231,206,157, 19,193,136, -152,203,228,228,228,233,187,118,237, 98,100, 50, 89,219,162,162,162,209, 0,118,171, 84,170, 54,121,121,121, 21, 55,225,234,160, - 86,171,133,172,126,170, 19, 67,106,248, 62, 29, 64,167,183,161,128,139, 23, 47,198,230,205,155, 81, 87, 6,242, 19, 39, 78,212, -121,227, 47,111, 43,229,241, 85, 90,173, 22, 81, 81, 81, 32, 8,162, 98,185,114,146, 81,138,162,106,205,244, 78,211, 52,165,213, -106,113,240,224, 65,163, 68,214,254,253,251,161, 86,171, 65,211,180, 81,215,217,178,196,164,200,205,205,173, 72,157,224,239,239, - 95,249, 26, 90,239,250,228,112, 56,112,119,119, 71, 86, 86, 22,172,172,172, 0,148,118, 11, 86,136,207,226,226,255, 76,227, 55, - 90, 37, 6,117,117, 54, 85,115,201, 99,126, 14,116,183, 0,103, 33,172,204, 68,224,240,132, 40, 80, 19,136, 74, 85,227, 90,116, - 65, 18,101, 96, 2,151, 94, 74, 48, 54, 65, 92, 59,133, 66,241, 53, 69, 81,222, 36, 73, 74, 24,134, 41,226,112, 56,145,169,169, -169, 11, 1, 60,170,207, 78,152,202,200,167,230, 82,142, 41, 79, 32, 96, 40, 3, 13,128, 4, 72, 18, 32, 72, 0,156,178,247,210, -101,149, 74,199,167,104,226,104, 70, 86,246, 39,111,186,242, 59,119,238,124,190,184,184,248, 31,151,201, 93, 44, 22, 47,224,112, - 56,253,254,237,211,196, 4, 4, 4, 4,136,197,226,175,105,154,110,173, 86,171,237,196, 98,113, 58, 65, 16, 97,133,133,133,203, -238,221,187,119,139,189,119,190, 57,188,206, 76,238, 85, 81,158, 27,203,202,202,202,237,254,253,251,162,202, 14, 86,229,155, 97, -217,247, 4,123, 52,254,153,240,240,240,184,189,111,223,190, 0, 39, 39, 39,178, 60,224,154, 36,201,138, 87,121, 55, 86,185,219, -114,235,214, 45,195,212,169, 83,111,222,191,127,191, 75, 77,156,174,174,174,231, 47, 94,188,216,187,178, 67, 85, 46,164,170,126, -166, 40, 10, 37, 37, 37, 88,176, 96,193,133,103,207,158, 85, 59, 85,142,187,187,251,234,249,243,231, 79, 31, 48, 96, 0, 73,146, -228, 95, 98,174,170,198, 97,233,116, 58, 28, 61,122,148,222,185,115,231,218, 39, 79,158,212, 24,131,229,231,231,151, 20, 25, 25, -233, 88,158, 50,161,234,171,234,136, 90, 0,104,215,174,157,242,206,157, 59,246,255, 79,206,183, 17,181, 9,226, 6, 11,172,242, -223,207,233,225,252, 62, 1,114, 56, 73,208, 62, 32, 8, 1,205, 32,134, 0,206, 11, 68,218, 13, 65, 39,149,170, 42,191,247,193, -235,207,200,203,114,178,156,111,130,147,132,113, 83,207,176,245,249, 47,225,116,117,117,125,250,244,233, 83,215, 26, 47,134, 47, - 11, 44,182, 62,255, 97,156, 86, 86, 86, 82,107,107,235, 63, 72,146,116,174,105,114,231,202,226,154,166,233,132,244,244,244,158, - 25, 25, 25, 37, 53,113, 58, 56, 56,184,136, 68,162,245, 52, 77,183, 49,102,178,103,146, 36,239,168,213,234,169, 85, 38,123,174, -224,124,141,163, 8, 95, 42,167,151,151,215,179, 59,119,238,184,136,197,226,151,226, 10,171,238,115, 57,158, 63,127,142,161, 67, -135,190,184,127,255,126,227,191,153,243, 95, 37,176,234, 59, 23, 33,179,252,210,139,131, 0, 14,178,207, 63, 44,254, 99,160,217, - 42,248,111, 65,165, 82,229, 90, 91, 91, 23,169,213,106,158, 70,163,225, 25, 12,134,151,110,112, 98,177, 56, 83,165, 82,177, 21, -245, 15, 69, 86, 86, 86,113, 86, 86, 86,219,215,201, 89, 38,148,250,188, 46,190,191, 43, 15, 86,110,110,110, 96,235,214,173,207, -113,185, 92, 97, 85,241, 83,157, 24,162, 40, 74,157,157,157,221,239,255,205,249, 79, 7,151, 61,205, 88,176, 96,193,226,175, 72, - 77, 77,109, 91,135, 0, 99, 43,137,197, 63, 18, 74,165, 50, 70,169, 84, 58,191,237,156,255,116,144,108, 21,176, 96,193,130, 5, - 11, 22, 44, 88,176, 2,139, 5, 11, 22, 44, 88,176, 96,193,130, 21, 88, 44, 88,176, 96,193,130, 5, 11, 22,172,192, 98,193,130, - 5, 11, 22, 44, 88,176, 96,209, 96,252,111, 0, 9,119,137,124,120, 43,217,227, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, + 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2,128, 8, 6, 0, 0, 0, 64, 11, 6,158, 0, 0, 0, 9,112, 72, 89,115, 0, + 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 10, 79,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, + 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, + 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142, +142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225,123,163,107,214,188,247,230,205,254,181, +215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64, +129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, + 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, + 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, + 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, + 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96, +200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, + 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, + 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207, +171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102, +178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87, +125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, + 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154, +140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, + 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71, +160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, + 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134, +205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188, +129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, + 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134, +188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, + 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9, +147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, + 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, + 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, + 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43, +200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, + 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, + 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, + 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, + 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84, +169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80, +235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95, +227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, + 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138, +222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167, +157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, + 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, + 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, + 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109, +198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53, +155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188, +110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195, +176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125, +186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150, +233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75, +130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, + 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, + 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, + 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167, +128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, + 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, + 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68, +222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73, +108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194, +244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, + 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229, +185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77, +147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, + 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156, +239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43, +134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107, +235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, + 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14, +150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, + 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, + 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150, +251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14, +199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140, +123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222, +122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249, +220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242, +178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122, +189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, + 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216, +239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, + 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206, +209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251, +237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3, +152,243,252, 99, 51, 45,219, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,142,124,251, 81,147, 0, 0, 0, 32, 99, 72, 82, 77, 0, + 0,122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, + 95,197, 70, 0, 2,177,101, 73, 68, 65, 84,120,218,236,157,119,120, 20,197, 31,198,223,217,221,235,119,233, 33, 29, 82,168,129, +208,123, 9,189,137, 52, 5,233, 42, 88, 0, 5, 20,165,217, 16, 68,176,162,128, 74, 87, 17, 16, 17,164, 42,210,165, 55, 9,189, +183, 0,105,164,215,235,101,231,247, 71,114,247,187,132, 36,119, 1, 68,132,249, 60,207, 62, 87,118,239,189,153,221,217,217,119, +191, 83,150, 80, 74,193, 96, 48, 24, 12, 6,131,193,120,112,112,108, 23, 48, 24, 12, 6,131,193, 96,252,135, 12, 22, 33,164, 51, +211,100,154, 76,147,105, 50, 77,166,201, 52,153, 38, 51, 88, 12, 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48, +152,193, 98, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, + 6,131,193, 96, 48, 24,143, 7,132, 77, 52,202, 96, 48, 24, 12, 6,131,241, 96, 17,202, 90,209,168, 81,163,223, 21, 10, 69,181, +178,214,235,116,186,148, 83,167, 78,117, 96,187,144,193, 96,184,188,147, 35,132,195,255, 35,230, 34, 0, 74,217,221, 29,131,193, +120, 18, 13,150, 84, 42,141,218,183,111, 95, 13, 81, 20, 97,179,217, 96,181, 90, 29,175, 38,147, 9,253,250,245, 19, 42,250,103, + 13, 26, 52,216,199,113, 92, 68, 69,126, 99,179,217,110,159, 62,125,186, 77, 89,235, 3, 3, 3, 15, 1,136, 34,132,216, 43,242, + 82, 95, 1,128,227, 28, 45,162,201, 9, 9, 9,141,202,211, 36,132, 68, 57, 93, 28,238,210,178,191,119, 87,179, 86,173, 90,199, + 5, 65, 8, 43,249,251,210, 62,219,223,139,162,120,227,236,217,179,173, 88, 49,125, 56, 52,104,208, 96, 31,207,243, 21, 46,159, +167, 78,157, 42,179,124,214,173, 91,247, 36,199,113, 33,165, 29,227,210,142, 57, 0,222,102,179, 93, 62,125,250,116,155,178, 12, + 72,112,112,240, 33, 0, 81,229,149,157, 18,101, 19, 0, 18, 19, 18, 18,154,184, 58,143,202, 59,135, 74, 41,243,229,106, 58,155, +171,208,208,208, 79, 43, 85,170, 52, 90,167,211, 25, 0, 80,158,231,105,237,218,181,139,237, 7,155,205,150,126,241,226,197,186, +172, 36, 50, 24,140,199,218, 96,137,162,200, 25,141, 70, 92,185,114, 5,165,213,243, 28,199,217, 42,250,103,148,210, 26,187, 86, +173, 8, 80, 86, 10,132,205, 98,134,220,175,146, 67, 59,231,226, 57,136,102, 51,108,102, 19,252,155,180,176, 87,184,232,208,161, + 3,239, 66, 54,236,173,183,222, 10,240,240,240,128,193, 96,128,193, 96,128,209,104,132,193, 96,128,201,100,130,201,100,130,217, +108,134,217,108,134,213,106,133,209,104,196,153, 51,103,108, 46, 46, 8, 97,227,198,141, 11,240,244,244,116,232,217, 23,187,166, + 93,215, 98,177,192, 96, 48,224,220,185,115,229,106, 10,130, 16,118,226,196,137, 0,169, 84, 10, 74, 41, 68, 81, 4,165,180,216, + 82,146, 86,173, 90,153, 89, 17,125,168,212,216,240,249,172, 0,185,175, 31, 68,139, 5,126, 13, 26,219,203, 45,146,119,111,131, +205,108,134,104,177, 32,188,215,179,142,239,219,181,107,231,170,124,134,255, 54,245, 29,111,169,135, 7,172, 6, 3, 34,123, 62, +227, 88,113,126,225, 28,136, 22, 51,168,197,140,122,111,189, 15, 0,200,200,200,208, 71, 71, 71, 39, 3, 32, 0,202,138,240,132, +221,184,113, 35,192,158,134,210, 76,191,243,114,240,224, 65, 12, 29, 58,212, 85,222,195,222,123,239,189, 0,251, 57, 82,178,156, + 91,173, 86,199,171,213,106,133,193, 96,192,201,147, 39,221,138, 92, 5, 7, 7,127, 22, 27, 27, 59, 98,229,202,149,234, 13, 27, + 54,168, 35, 34, 34, 32,149, 74,193,243, 60,120,158, 7,199,113, 16, 4, 1,189,123,247, 38,172, 8, 50, 24,140,199,222, 96,153, +205,230,248,174, 93,187, 82, 0, 48,153, 76,161, 50,153, 76, 90,194,128,133,180,110,221,250,114,201,223,185,106, 58, 84, 86, 10, +196, 15,145,190, 0,128,231,174,103, 58, 46, 12,107, 99, 27, 56,182, 25,124, 43,183,112, 91,165, 18, 28,199, 17, 23, 21, 56,212, +106, 53,186,116,233, 2,153, 76,134, 38, 77,154, 64, 34,145,148,186, 72,165, 82, 72, 36,146,187,162, 71,165,161,209,104, 48,125, +250,116,187, 57,130, 90, 33,199,216, 86, 77,160, 0,197,226,115, 87, 97, 18, 41, 4, 65,112, 44,238,104, 74,165, 82,156, 61,123, + 22,130, 32,128,231,121,199,171,253,253,166, 77,155,208,191,127,127, 8,130, 0,165, 82,137,162,139, 44,227, 33,162,240,243,199, +218,182, 13, 1, 0, 67, 19,242, 29,101,236,207,129, 61, 29,219, 60,159,164, 5, 33, 4, 82,169,212,189,227,238,225,129, 45,253, +159, 2, 0, 60,123, 37, 13, 18,137, 4,130, 32,224,204, 87, 31, 67, 34,147, 65,144, 74, 81,239,173,247,145,145,145,161,127,230, +153,103, 14, 40, 20,138,109,110,220,172, 32, 33, 33, 1,130, 32,148, 89,222, 57,142,195,178,101,203,112,235,214, 45,183,242,174, +215,235,241,201, 39,159,128, 16, 82,236,124, 41,235,189,171,188, 19, 66,184,160,160,160,143, 99, 99, 99,135,173, 92,185,210,135, + 16,130,111,191,253, 22, 82,169, 20, 61,122,244,128,159,159, 31,182,111,223, 14,169, 84,138, 73,147, 38,177,194,199, 96, 48,158, + 12,131,117,234,212,169,167,236,239, 91,180,104,113,241,192,129, 3,181,156, 66,249,176, 90,173, 82,171,213, 90,195,222,108,104, +191,243, 29, 60,120,112,185,119,244, 54,139,249, 46,131, 84, 90, 69,237,206,133,203,201, 12, 98,192,128, 1, 0, 80,230,197,198, +121,113,227,174, 27, 38,147, 9,130, 32,160,102,229, 74,248,160, 91, 67, 52,163, 22,104, 11, 8,172,185, 90,244,209, 88,112,177, +118, 35, 44,186,157,142, 91,121, 5, 16, 4,247, 90, 75, 69, 81, 44,211, 92,241, 60,143, 5, 11, 22, 96,208,160, 65,224,121,190, +204,253,194,248,103,177,153,205, 46,203, 97, 69,143,141,213, 96, 40,140, 44, 9,188,195, 92, 73, 36, 18, 72,228,114, 8, 82, 41, + 4,153, 20, 25, 25, 25,250,206,157, 59, 31,145,201,100, 63, 5, 6, 6, 38, 39, 38, 38,150, 91, 62, 41,165,197,181, 74,185,153, +248,241,199, 31,177,124,249,114, 52,111,222,220, 29, 51, 4,147,201, 4,169, 84,138,143, 63,254,248,174,245, 11, 23, 46,188,203, + 96,185,208, 35, 0,184,192,192,192,215, 86,173, 90,229,105,255,127,127,127,127, 72, 36, 18,212,173, 91, 23, 30, 30, 30, 56,112, +224, 0,108, 54,155,219, 55, 62, 12, 6,131,241,159, 55, 88, 37,140, 1,103, 52, 26,113,233,210, 37,184,234,151, 74, 41, 45,183, +150,148,251, 85,114, 68,174,214, 84,245,115,124, 63,232,102,142,227,194,181,165, 89, 53,200, 52,106, 52,249,240, 11,183,205, 80, + 90, 90,154,227,206,219,213,226, 78, 69,110, 50,153,160, 82, 42,176,115,124, 93, 36,100,202, 48,237,112, 22,254, 56,117, 13, 18, +137, 4,221,107,215,197, 83, 82, 15,188, 31, 46,195,248,171, 55, 97,161,212,173, 11, 24,165,180, 84, 99,101,127,111,111, 42,177, + 27, 44,198,195,199,175, 65, 99, 71,228,106,101,101,143,187,162, 86, 0,176,169, 81, 4,228, 30, 26,212,125, 99,138, 91,229, 51, +178,231, 51,142,200,213, 31,141, 35,193, 75, 36,144,200,100,120,238,108, 18,128,194,102,193, 14,117,163,247,230,240,178,101,195, +134, 13,139,255,235,175,191,148,238,164,181, 52,131,101, 55, 63, 63,254,248, 35, 86,172, 88, 1, 65, 16, 96, 54,155,221, 74,167, +209,104, 44,211, 56,221, 75, 4, 11, 0,116, 58,157,105,227,198,141,248,230,155,111,224,231,231,135,174, 93,187, 34, 56, 56, 24, +107,214,172, 1,165, 20, 99,198,140,129, 82,169,132, 82,169,100,101,158,193, 96, 60,121, 6,203,108, 54,199,119,238,220,217,173, + 17, 63,122,189,254,142, 11, 3, 86,106,100,192, 57, 42, 32,247,208, 64,174,209,128,115,115,150, 46,139,197,226, 48, 40, 59,118, +236,128, 82,169, 68,143, 30, 61,238, 43,130,101, 54,155, 33,147, 74,192,249, 7,226,133,175,255, 66,102,190,222,113, 65,219,115, + 35, 30, 39, 82,211, 48,190,101, 39,168,149,105, 40, 48,153,220,142, 96,149, 52, 87,130, 32, 96,192,128, 1, 48, 26,141, 32,132, + 20,235,151,226,202,172, 50,254, 57,202, 26,132, 64, 8,129,194,211, 3, 50,181, 26, 60,207,187,165,229, 28,109, 18,100, 50, 72, +228, 50, 8, 69,229,208, 30,185,202,225,101,203,146,146,146,142, 0, 80, 52,107,214, 76,233, 78,218,156, 13,150,179, 1,114, 54, + 87, 60,207,195, 98,177,184,101, 94,140, 70, 35,164,210,255,247, 4,184,125,251,118,185, 6,203, 69,158, 41, 33, 68, 36,132,136, + 81, 81, 81,142,223, 6, 5, 5,193,219,219, 27,162, 40, 66, 20, 69, 40, 20, 10, 40,149,202, 98,255,203, 96, 48, 24, 79,140,193, +114,110, 46,124, 80, 23,175,242, 46, 96, 74, 79, 79, 72,213,106,251,104, 37,234,142, 25,178,247, 57, 25, 61,122,116,185,253, 82, +236, 70,204, 13, 83, 9, 78,224,145, 18, 20, 9, 27,183,255,255, 23,200,162,133, 19, 36,184, 21, 84, 11,252,165,147,144,136,162, + 91, 23,176,146, 17,172, 49, 99,198, 96,201,146, 37,224, 56,206,177, 79, 4, 65, 64,245,234,213, 17, 31, 31,207, 74,231,191, 0, + 45, 39, 26,105,255, 94,225,225, 1,153, 70, 3,222,141,190,119, 37,205,144, 84, 46,135, 32,147, 66,144, 22, 54, 11,246,234,213, +107,111, 78, 78,206,178, 58,117,234, 92, 69,225, 52, 6,156,187,231,144, 32, 8,197,140, 79,105,230, 74, 16, 4, 88,173, 86,183, +111, 42, 74, 26,157,153, 51,103,222,181,109,191,126,253,220,141, 96, 81, 66, 8,149, 74,165,232,210,165, 11,234,213,171,135, 13, + 27, 54, 64, 20, 69,188,254,250,235, 80, 42,149,152, 51,103, 14,172, 86, 43, 62,251,236, 51, 22,193, 98, 48, 24, 79,158,193,122, +144,228, 92, 56,235,232, 68,236,220, 44,184,181, 85, 45,200, 53,106,200, 53, 26,180,222,176,223,113,215,140,143,103,187, 21,193, +178, 27,172,204,204,204,114,205,149, 59, 17, 44,135,193,146, 9, 88, 27,150, 13, 42,147, 64, 48, 89,138, 25, 44, 94,144, 32,193, + 47, 18,156, 68, 10,193,102,117, 75,147, 82,122, 87,147,224,139, 47,190, 8, 66,136, 99,196, 87,253,250,245,157, 47, 52,236,138, +243,144, 73,222,189,205,209,161,221,185, 89,240,247,102,213,160,240,208, 64,166, 86,163,237,230, 67,142,104, 35,230, 44,118,169, +121,249,251,239,112,118,206, 44, 72,100, 50, 60,123,242,150, 35,114,213,170,102,181, 35, 38,181,231,178,219,183,111, 31, 1,192, + 13, 28, 56,208,187,126,253,250,110,157,147,246, 78,246,101,153, 43,103,131,101,177, 88,220, 46,243,238,156, 31,246, 40,150, 27, +229,157, 70, 71, 71,131,227, 56,120,122,122, 66,163,209, 56, 70,208, 42, 20, 10,168, 84, 42, 71,255, 77,119,207, 75, 6,131,193, +248, 79, 27,172, 6, 13, 26,252,169, 82,169, 34,221, 21,169,200,164,163,206,157,136,237,230,138, 16, 2,133, 70, 3,153, 70, 13, +185,135,166,204, 40, 87, 89, 23, 26,123, 19, 33,207,243,142,139,205, 79, 63,253, 4,141, 70,131,225,195,135, 87,184, 15,150,253, +110,158,147,114,216, 46,223, 13, 94, 38, 20, 51, 87,130, 32,128,151, 72,112, 71, 19, 12, 78, 34,129, 96,117, 29, 21, 35,132, 32, + 55, 55, 23,130, 32,224,131, 15, 62,112,220,177, 59,155, 43,214,177,253,223, 71,116, 50, 35,197,162,170, 30, 30,142,242,233,252, +189,171, 62,137,132, 16, 80,171, 5, 18,185, 28,146,162,129,184,246,200,149, 73,237,185,172, 86,173, 90,142,200,149, 74,165,178, +143, 30,117,169,201,113, 92,177, 50,189,108,217,178, 98,230,170,100, 4,203,221, 50, 47,149, 74,177,100,201,146,114, 77,148, 84, + 42,117,123, 4, 37, 80, 56,109,196,222,189,123,113,226,196, 9,140, 30, 61, 26, 74,165, 18,243,230,205,131,213,106,197,140, 25, + 51,160, 84, 42, 33,147,201, 88,225, 99, 48, 24,143,191,193,146,201,100,145, 7, 15, 30,116, 76, 50, 90,222,171,201,100,194,128, + 1, 3,220,142,132,137, 69,163, 8,185, 18, 35,229,228,158, 26,200,139,154, 94,156,191, 39,110,212,226,246, 59, 96,103,131,245, +225,135, 31, 66, 16, 4, 44, 89,178, 4, 0, 48, 97,194, 4,183,251, 96,217, 53, 97, 35, 72,164,215,209,240,235,254, 48,173,180, + 32,245,224,105, 8,130,128,128, 22, 79, 65,108,214, 31, 58,165, 6,130,205,234,246, 40,194,172,172, 44,196,199,199,131,231,121, +188,245,214, 91,197,230, 42, 42,145,103,236,216,177,131,245,193,250, 23, 13, 22, 87,212,191,170,180,242, 89,194,124,185,110, 39, +179, 89, 11,251, 93, 73,255, 63, 90, 48, 39, 39,103,217,237,219,183,143, 2,224,134, 13, 27,230,173, 82,169,240,253,247,223,235, + 0,200,214,172, 89,227,210,101,217,203, 77, 89,230,234, 94,154, 8,237,145, 96,231,126, 93,247,107,176,236,102,144, 16, 2,155, +205, 6,165, 82, 89, 44,114,165, 80, 40, 32,151,203, 89,193, 99, 48, 24, 79,134,193,226, 56, 14, 70,163, 17, 23, 46, 92,112,247, + 14,213,237, 73, 71,253, 26, 55,199,224, 91,185, 32,132, 96,123,108, 29, 71,179, 75,171,223,246, 58, 42,236, 91,159, 76,128, 68, +173,129, 95,108,215, 10, 93, 24,156, 13, 86, 78, 78, 14, 36, 18, 9, 62,254,248, 99,112, 28,135,207, 62,251, 12,161,161,161, 72, + 73, 73, 65,187,118,237,220,186,155,231,109, 60,130,159,143,134,234, 69, 47,120, 62,223, 22, 62, 93, 62, 68,146, 73,192, 33,131, + 10,109, 13,231, 33,219, 62, 23, 38,209,230,150,193, 34,132,192,106,181, 98,239,222,189,197, 58,178, 3,133, 77,135,246,233, 46, + 44, 22, 11,204,102, 51, 62,251,236, 51, 86, 58,255, 5, 42, 63,221, 23, 47, 36,235, 0, 0,127, 58, 53, 91,183, 89,191,223, 81, + 62,227,103,190, 5,137, 90, 3,159,166,177,110,105,214,126,125, 34,106,191, 62, 17, 25, 25, 25,250, 78, 13,234,236, 43,144,170, +126,172, 91,183,110,177,200,149, 66,161, 32, 69,159,137, 59,101,137,227, 56,240, 60,239, 48, 87,118, 51, 85,154,193,114,247, 6, +192, 98,177, 64, 42,149,186,109,176,220,133,227, 56,188,244,210, 75, 8, 14, 14,118, 68,174, 62,250,232, 35, 40,149, 74,188,243, +206, 59,176, 88, 44,152, 59,119, 46, 43,124, 12, 6,227,241, 55, 88, 70,163,241,102,167, 78,157, 80,198,186, 80,185, 92, 94, 44, + 12,100,159,116,180,100, 83, 33, 33,164, 51,165,116,103,105, 23, 8,231,209, 88,242, 18, 81, 43,169,135, 39, 36,106, 13,184, 82, +162, 77, 37, 53,237,119,198, 37, 13,150,125,201,205,205,133, 68, 34,193, 55,223,124, 3, 79, 79, 79,199,104,189,242, 52,237, 17, + 44,158,231,161, 75,200,199,197, 89, 59, 33, 83, 28, 66,181,174,131, 16, 44, 81, 66,122, 96, 29,244, 54, 75,185, 19,141,150,166, + 89,163, 70, 13, 76,157, 58,245,174,233, 25,202,162, 81,163, 70, 46, 53,239, 23,166, 89,186,166, 59,229,147,151,203, 93, 30,119, +251,122,123,228,170, 64,170,250, 49, 62, 62,222, 30,185,242, 82,169, 84, 88,184,112,161, 14, 0, 55, 99,198, 12, 85,120,120, 56, +239, 78, 58,121,158,199, 79, 63,253,116, 87,135,246,210,204, 85,105,211,126,148,150, 78,171,213,122,151,193, 26, 48, 96,192, 93, +163, 7,203,138, 96,149,150, 78,123, 95, 53, 63, 63, 63, 71,228,202,102,179, 57, 70, 15, 90, 44, 22, 88,173,214, 50,155, 90, 89, +249,100,154, 76,243,201,209,124, 34, 12,214,201,147, 39,187,151,245,131,214,173, 91, 95, 57,120,240, 96,117,155,205,230,252,140, + 66,169,193, 96,168,209,167, 79, 31,151,183,202,162, 40, 66, 46,151,131, 82,138,134,239,127, 10, 66,238,238,111,229,221,170, 19, +136, 32,192,102,179,193, 98,177,184,156, 30, 66,175,215, 59, 46, 38,101,117,112, 47, 40, 40, 40,119,158,159,146, 23, 5,131,193, + 80,236, 66, 69,168,136, 91,187,126,189,107, 52, 97, 69, 34, 4, 0,160, 80, 40,138,245,187,114,149, 20, 86, 68, 31, 46,246, 41, + 21, 40,165,168, 51,118,114,225,113, 42,106, 46,180,155, 0,175, 38,177, 32, 18, 1, 34, 0,179,217,236,170,124, 18,123,159, 43, + 74,233, 15,125,250,244,185, 12,192, 8,128,106, 52, 26,185, 68, 34, 17, 1,100, 1,160,217,217,217, 94, 73, 73, 73,162,193, 96, +168,226, 42,157,123,247,238,197,181,107,215,208,184,113, 99,199, 35,155,236,205,110,118, 19,227,108,176,220,141, 96,149, 54,167, + 86, 89,179,185,187, 11,207,243,240,242,242,114, 76, 98, 42,149, 74,161, 82,169, 0, 0,115,231,206,117,236,115, 6,131,193,120, +236, 13,150, 11,131,196,151,213,124,232,170,169,208,102,179, 37, 54,107,214,172,162,255,151,234,226,130,152,184,111,223, 62,105, +121, 15,121, 46,229, 59,151,154, 71,143, 30,149,150,243,251,210,222,167,186,202,123,243,230,205, 75,253,125, 89, 88,173,214, 36, + 86, 68, 31, 30, 86,171,181,236,242,249,225,167,101, 29,215, 84, 23,166,229,106,245,234,213,147, 53, 26,205, 31,129,129,129,153, + 7, 15, 30,244,107,218,180,169,159,243, 54, 77,155, 54, 13, 46,241, 51, 19,202,153,158,132, 16,146,248,194, 11, 47, 72, 93,148, +241,146,159, 19, 93,220, 84, 36,158, 59,119, 78, 90,154, 86, 89,175,148,210, 68, 55,118,235,173,238,221,187,115,206,191, 45,171, +236, 91,173,214,116, 86, 10, 25, 12,198, 19,107,176, 12, 6, 67, 66,167, 78,157, 74,237, 53,171,211,233,110,151,247,219,115,231, +206, 53,121,208, 25, 72, 76, 76,108,245, 95,208,252, 39,242,206,120,244,143,209,185,115,231,154, 61,104,205,219,183,111,183,250, + 47,104, 2,192,249,243,231, 91,178,146,197, 96, 48,152,193,114, 3,119,167, 99, 96, 48, 24, 12, 6,131,193,120, 82,225,216, 46, + 96, 48, 24, 12, 6,131,193,120,176, 16, 0,157, 75, 91, 81,145,209, 1,132,144,206, 21,253, 99, 87,250, 76,147,105, 50, 77,166, +201, 52,153, 38,211,124,252, 52, 93,105, 63, 54,163, 19, 41,165,255,216, 2,160, 51,211,100,154, 76,147,105, 50, 77,166,201, 52, +153,230,147,182,176, 38, 66, 6,131,193, 96, 48, 24,140, 7,140,192,118,193,191, 3, 33,132,167,148,218, 30,160,164, 15,128,178, + 30,232,102, 2,144,125, 47,201, 4, 32, 45, 90,236, 19, 21, 89, 0,152,139, 22,234, 90, 98, 58,151,156,236, 19, 67,109,146,166, +148, 16,137, 40,226, 84,149, 42,149, 79, 2,221, 77, 0,160, 9,170, 93, 91,163, 86,118, 54,154, 77,145,114,137,236, 66,142,182, + 96,135, 33,245,242, 77, 86, 66, 24,140,135, 79,147, 38, 77, 70, 80, 74,103, 22, 86, 81,228,227,227,199,143,127,203,246, 10,131, +241,128, 13, 86,181,106,213,142,115, 28, 23,102,159, 12,179,188, 57,119,236,175, 54,155, 45,241,226,197,139,110, 13,117, 39,132, + 8,193,193,193,207,169,213,234, 14, 60,207,183, 46,250,253, 65,173, 86,251, 87, 74, 74,202, 26, 74,169,245, 94, 50, 20, 21, 21, +229,105, 48, 24, 6, 16, 66,134, 0, 0,165,244,103,133, 66,241,235,141, 27, 55,242,238,209, 8, 85, 11, 10, 10,250, 89, 34,145, +240, 9, 9, 9, 29, 0,160,114,229,202,127,153, 76, 38, 91, 90, 90,218, 16, 74,233,181, 10,234,113, 82,169,244,211,216,216,216, + 54,132,144,229,148,210, 5, 15,232, 88,202, 57,142, 43,213,152,136,162, 24,113, 15,122, 82, 0, 94,223,124,243,141,223,138, 21, + 43, 26, 38, 38, 38,214, 5,128,176,176,176,179,195,134, 13, 59, 57,118,236,216, 76, 0,185, 69, 70,171, 76,146,147,125, 98,210, +238,220, 24,157,154,118, 97, 0, 0, 4, 5,215,253,149,231, 57,105,104,232,137,195, 42,255, 33,254, 53,107, 85, 29,245,203,247, +223, 72, 35, 34, 43, 99,247,161, 19, 13,198,190,241,110,140, 34,176,230,108,102,178, 30, 30, 53,106,212, 56,206,113, 92, 88, 69, +230,146, 43,122,130, 66,226,249,243,231,155,148,165,201,243,124,152,171,185,186, 74,126, 39,138,226,141,115,231,206,149, 58,101, + 68,205,154, 53, 15,243, 60, 31,233,110,125,228,156,206,178,166,224,168, 89,179,230,113,158,231,195, 92,105,150,252, 78, 20,197, + 27,103,207,158,109,229,174,166,139, 57,244,238, 41,157,238,104,150,151, 78, 0,104,223,190,189, 92,171,213,254,172,209,104,234, +107,181,218, 17,148,210,169,123,246,236, 9,228, 56, 14,157, 59,119,158,218,164, 73,147,120,133, 66, 49, 95,175,215,159,212,104, + 52,131,247,236,217, 99,100,103, 12,131,113,159, 6,139,227,184,176, 19, 39, 78, 4,168,213,106, 20, 25, 21,216,103,111, 23, 69, + 17,162, 40,130, 82,234,120,181, 90,173,104,223,190,189, 91,127, 26, 22, 22, 86,183,102,205,154,107,199,140, 25, 83,165, 87,175, + 94,178,192,192, 64, 16, 66,112,231,206,157, 26,127,252,241,199,208,121,243,230,125, 24, 22, 22,214, 63, 49, 49,241,172,187,166, + 37, 56, 56,184, 19,128, 23,235,214,173,251,236,132, 9, 19,164,173, 91,183,134,205,102,195,238,221,187, 99,231,204,153,243, 77, + 72, 72,200, 58, 0,203, 82, 82, 82,118, 81, 74, 69, 55,117, 27, 70, 70, 70,254,186,127,255,254,200,155, 55,111,218,250,246,237, +187, 28, 0, 14, 29, 58, 84, 95, 20, 69,210,186,117,235, 63, 9, 33, 3, 40,165, 39, 43,176,207,251,140, 29, 59,182,255,152, 49, + 99, 42, 13, 31, 62,252,121, 0, 11,138,254,139, 20,237,103, 90,193, 99,232,136, 92, 81, 74,203,155, 94, 59,168, 2,145, 44,117, +124,124,188, 79,171, 86,173, 94, 75, 75, 75, 27,239,172,155,154,154,138,184,184, 56,243,172, 89,179,190, 62,116,232,208,252,200, +200,200,108, 0,218,178,132,168, 77,210, 52, 53,237,194,128,182, 45,191,241, 2,128, 53,155, 94, 27,116,236,100,186,199,239, 91, + 23, 13,149, 41,164,198, 21,139,191,150, 86,175, 22,129, 61,199,175,226,232,133, 44, 82,183, 77, 79, 33,247,247,229, 93, 0, 44, + 98,167,231,195,129,231,249,208,227,199,143, 7,168, 84,170, 82, 31,232, 94,162,223, 5, 8, 33,160,148, 34, 54, 54,182, 60,205, +176, 19, 39, 78, 4, 40, 20, 10, 71,221, 81,178,206,176,215, 43,142,178, 66, 41,218,182,109,107, 46,167, 78, 10,255,251,239,191, + 3, 84, 42,149, 67,167,180,244,149, 52, 26,109,219,182, 45, 55,157,113,113,113,142,116,186,163, 73, 41, 69,235,214,173,109,174, +242,110,127, 98,133,171,124,219, 53, 91,182,108, 73, 43,162,233,102, 58,203,189, 1,210,106,181, 63,175, 89,179,230,153,192,192, + 64,244,233,211,103,123,157, 58,117,100, 42,149, 10, 91,183,110, 69,229,202,149,253, 61, 60, 60,182,124,242,201, 39,152, 61,123, +118,149, 29, 59,118,172, 2,240, 12, 59, 99, 24,140,251, 55, 88, 80,171,213, 88,189,122,181,227,241, 48,246,199,100,148,246,190, + 74,149, 42,110,253, 97, 80, 80, 80,147,136,136,136,189, 27, 54,108, 80, 6, 4, 4, 56,190, 55,153, 76,240,244,244,196,139, 47, +190, 40,235,210,165, 75,245, 33, 67,134, 28, 9, 10, 10,106,119,231,206,157,227,229,233, 5, 7, 7, 63, 27, 19, 19,243,237,248, +241,227, 3,123,247,238, 13, 31, 31,159, 98,235,123,246,236,137, 30, 61,122, 72,111,220,184, 49,104,205,154, 53,131,150, 47, 95, +126, 39, 56, 56,120,108, 74, 74,202,186,114, 29,134, 90,221,185, 65,131, 6,223,239,222,189, 59,204,219,219, 27, 33, 33, 33,220, + 7, 31,124, 80,183,106,213,170,202,160,160, 32, 46, 37, 37, 5,235,214,173,171, 58,108,216,176,141, 10,133, 98,132,193, 96,216, +229,134, 97,147,249,250,250, 78, 28, 57,114,164, 95, 94, 94,158,245,196,137, 19, 87,237,223,203,229,242,169, 45, 90,180,104, 68, + 8, 89, 77, 41, 93,118, 47,145, 43, 74,105, 30,254,223,148,103,199, 98, 95,239,102, 36, 75,118,234,212, 41,223,150, 45, 91,174, + 51, 26,141,141, 70,143, 30,125,123,214,172, 89, 74, 79, 79, 79, 79, 0, 36, 47, 47, 47,123,250,244,233,166, 57,115,230, 76,174, + 93,187,118,167,195,135, 15, 63,219,160, 65, 3, 75,145,121,187,219, 96, 17,226, 72, 79, 66, 82, 58,246, 30, 18,101, 83,223,153, + 16,246,249,204,200, 91,127,159, 79, 16, 5,165, 39, 54,239, 59,135,212,204, 2,252,121,248, 60,130,252, 60,136, 84, 46,137,241, + 14,139,105,151,155,116,126,223, 61, 24, 78,198, 61,160, 82,169,176,121,243,230,187, 30, 49, 85,218,227,167, 4, 65,128,183,183, +119,185, 79, 35, 32,132, 64,161, 80, 96,199,142, 29,197, 30, 47, 85,218,123,251,171,151,151, 23, 40,165,229, 62,226, 64,161, 80, +224,224,193,131,224, 56,238,174,223,151, 76,179, 32, 8, 80,171,213, 32,132,112,174, 52,247,237,219,231, 82,203,254,170,209,104, + 0,160,220,231, 15,201,229,114, 28, 56,112,160,204, 60,151,124,175, 41,122,222,165, 43,205,131, 7, 15, 22,123, 68, 87,201, 71, +119, 57,127, 46,186, 57, 46, 87, 84,169, 84,214, 15, 12, 12,196,177, 99,199, 48,109,218, 52, 89, 76, 76, 12,174, 94,189, 10, 66, + 8,134, 15, 31,142, 58,117,234, 32, 37, 37, 5,117,234,212,193,129, 3, 7, 26,178, 51,133,193,120, 0, 6,203,142, 59,230,202, +254, 28,177,146, 21, 68,201,161,150, 17, 17, 17,114,141, 70,243,219,230,205,155,149,126,126,255,127, 90,136,209,104, 68,126,126, + 62, 10, 10, 10,144,159,159, 15, 15, 15, 15,204,159, 63, 95, 57,120,240,224,223, 34, 34, 34,106,220,188,121,211, 88,150, 38, 33, +228,235, 83,167, 78, 5, 90,173, 86,200,100,178, 50,205, 98,181,106,213, 48,118,236, 88,196,198,198, 6, 13, 28, 56,240,107, 0, +235,202,210, 44, 50,110,223, 29, 58,116, 40, 76, 42,149,226,202,149, 43, 72, 76, 76,196,168, 81,163,194, 69, 81, 68, 66, 66, 2, +174, 94,189,138,164,164, 36, 44, 89,178, 36,108,240,224,193,243, 1, 84, 47, 47,239, 69,188,242,214, 91,111,213,240,245,245,229, +190,248,226,139,220,130,130,130,197, 69,223,191, 51,119,238,220,193,109,219,182,173,244,242,203, 47,131, 16,242, 11,165,244, 46, +195, 82, 66,179,180,200,149, 13,192,197, 18, 63,139, 46, 17,217, 10, 66,225,179,240,114, 74,209, 36, 0,188,186,118,237,250,150, +209,104,108,116,224,192,129,107,173, 91,183, 14, 7,144, 2, 32, 29, 0,188,188,188,212, 95,127,253,117, 96,207,158, 61, 47,119, +236,216,177, 81,215,174, 93,223, 74, 79, 79,159, 85,180,158,150,212, 20, 69,156, 10, 10,174,251,235,190,195, 99, 7,236, 57,104, +146, 78,120,227,195,219, 85, 42, 71,228,158,186,146,101, 59,127, 35, 29,249,122, 43,158,233, 88, 15, 0,208,162,110, 21,124,187, +250, 0, 94,127,243, 61,201,186, 95,151,247,187, 70,161, 6,240, 71, 57,251,243,190, 96,154,255, 55, 67,162, 40, 66, 34,145,224, +169,167,158, 2, 33,228,174,103,109, 74, 36, 18, 28, 62,124, 24, 29, 59,118,132, 68, 34,193, 75, 47,189,228, 50,157,162, 40, 66, + 16, 4,116,237,218, 21, 86,171,245, 46,189,146,102,193,254,140,206,242, 52, 41,165, 16, 4, 1, 28,199,149,106,126, 74, 46,165, +153,150,210,242,238, 74,203,121, 93,105,143,251, 41,169,105, 79,167, 59,230,202,174,233,110, 58, 5, 65, 64,171, 86,173,112,242, +228,201,114,205, 22,199,113, 46,235,100,173, 86,251, 98,159, 62,125,182,143, 30, 61, 90, 1, 0,153,153,153,142, 7,209,243, 60, +143, 75,151, 46,193,100, 50, 97,229,202,149, 48, 26,141,163,217,121,196, 52,255, 73,205, 39,198, 96,217, 43, 9,119, 13,150, 59, +207,214,163,148,142,121,231,157,119, 2,203, 51, 87, 5, 5, 5, 72, 78, 78, 70,120,120, 56,158,123,238,185,192,229,203,151,143, + 1,240,101, 57,178, 82,158,231,113,236,216, 49,164,165,165,161, 94,189,122,136,140,140, 44,182,193,245,235,215,177,101,203, 22, +228,228,228,160,113,227,198, 64, 97,255,162, 82,105,208,160,193,180,232,232,232,174,237,219,183,151, 75, 36, 18,156, 58,117, 10, +141, 26, 53,194,234,213,171, 81,165, 74, 21,168, 84, 42, 92,190,124, 25,245,234,213,195,222,189,123, 81,169, 82, 37,196,196,196, +200, 27, 55,110,188, 63, 43, 43,235,175,155, 55,111, 78, 43, 99,127, 74, 67, 67, 67,223, 29, 57,114,164, 44, 57, 57, 89,252,233, +167,159, 14, 81, 74, 15, 17, 66, 70,189,247,222,123,207,119,235,214,173,210,137, 19, 39,242,254,254,251,239,191, 75, 51, 87,110, + 70,174,172, 37, 47, 70, 54,155,205,168,215,235, 77, 70,163,209,194,113,220, 77, 66,136,201,102,179,213, 40,235,102,254,197, 23, + 95,172,154,145,145,241,250,155,111,190, 25, 95,100,174, 46,161,176, 99, 59, 0,192,106,181, 26, 11, 10, 10,242, 90,182,108, 25, + 62,120,240,224,107,171, 86,173,122,253,197, 23, 95, 92,179,108,217,178, 2, 0,250,146,130, 85,170, 84, 62,201,243,156, 84,155, +239,123, 99,237,154,165,227,183,108, 26, 83, 57, 33, 33,169,186,159,127, 37,173, 84, 83, 41,121,205,207, 63, 30, 7, 96, 74, 78, +207,195,153,235,119, 32,145,240,184,144,144,139,182,221,159,147, 92,187, 50,179,141,221, 96, 49,254, 81,168,253,225,208,123,246, +236, 41, 55,130,117,248,240, 97, 72, 36, 18, 40,149, 74,172, 94,189,186, 92, 81,187, 33,176, 71,135, 92,153, 24, 87, 15, 63,183, +155, 12,251, 3,216, 75, 46,223,125,247, 29,222,124,243,205, 98,255, 81,164, 73,220, 73,103,105,233, 11,143,136, 64, 90,106,106, +177,239,220,120, 72, 59,108, 54, 27, 36, 18, 9,150, 44, 89,130,158, 61,123,226,247,223,127, 47,247,181,200,216, 82,119,210,217, +170, 85, 43,152,205,102, 71,154, 47, 93,186, 84,170,238,130, 5,229,119,239,108,210,164,201, 8, 66,200,204,154, 53,107,202, 59, +116,232,128,125,251,246, 97,230,204,153,162,213,106,205, 0,128, 86,173, 90, 85, 26, 63,126, 60,137,139,139,131, 70,163, 65,122, +122,250,178, 38, 77,154,204, 96, 29,223, 25,140, 7, 16,193,178, 87,186,174,204,149,253, 78,209,149,201,210,104, 52, 61,186,119, +239,238, 48, 55, 6,131,193, 97,172,236,230,202,254,249,242,229,203,136,137,137,145,106, 52,154, 30, 46, 12, 86, 97, 70, 4, 1, + 33, 33, 33,200,200,200,192,217,179,103, 17, 30, 30, 14,139,197,130,109,219,182, 33, 55, 55, 23, 18,137, 4, 82,169, 20,102,115, +185, 93, 18, 16, 29, 29,253,212,138, 21, 43,154, 44, 95,190, 60,219,126, 7,247,243,207, 63,131, 82,138, 74,149, 42, 65,167,211, + 33, 53, 53, 21,127,253,245, 23,172, 86, 43, 52, 26, 13, 66, 67, 67, 21, 99,198,140,105, 51,125,250,116, 9,128,105,101, 72, 55, +239,215,175,159,167,167,167, 39,222,120,227, 13,106, 54,155,191, 36,132,180,120,246,217,103,223, 29, 59,118,172,239,205,155, 55, + 77,175,188,242,202,113,179,217,252,117,209,197, 68, 66, 41,181,184, 48,172,101, 70,174, 44, 22,139,125,159,198, 23, 20, 20,192, +223,223, 63,220, 69, 31, 45, 0,144, 30, 60,120,176, 21, 0,126,198,140, 25, 10, 20, 62,192,218,145, 6,147,201,132,130,130, 2, +104,181, 90, 75,110,110,110,218,196,137, 19,173,171, 86,173,226,139,126,115,161, 52,131, 5,116, 55,213,169,163,150, 81,202,191, +183,104,209, 34, 77,183,110,221, 56,141, 70,131,252,252,124,207, 63,183,110,213,116,234,208, 38,106,214,167,159,111,247, 12,171, +151,122,240,212, 13, 36,221,201,133,201, 98, 65, 84,176, 87, 97,252,139,241,143, 83,212,193,218, 17,193,114, 54, 19,251,246,237, + 67,247,238,221, 29,231,186, 84, 42,117,108,231,142,166, 32, 8,232,222,189,251, 93, 17,157, 61,123,246,148, 26,109,114, 85,135, + 56,155,161,146,166,168, 52,227,197,113, 28, 92,181, 50,219,163,119,165,153, 44,231, 40,126, 9,211,230,234,102, 18,130, 32, 96, +236,216,177,144, 72, 36,152, 52,105, 18, 4, 65, 64,195,134, 13, 33, 8, 2, 90,182,108, 9,137, 68,130,142, 29, 59,150, 25,105, + 43,205, 92, 10,130,128, 35, 71,142,160, 81,163, 70,142, 52, 53,108,216, 16, 77,155, 54,133, 32, 8,136,141,141,133, 68, 34, 65, +215,174, 93, 93,106,218, 59,180,107, 52, 26, 92,190,124, 25, 60,207,131, 16,146, 25, 23, 23, 23, 8, 0,211,166, 77,203,208,235, +245,126, 6,131, 1,157, 58,117, 66,155, 54,109, 42,253,252,243,207, 31, 0, 96, 6,139,193,184,223, 8,150,189,210,117,215, 96, +185,194, 96, 48, 52,176, 71,175, 74, 51, 87,206,175, 38,147, 9, 85,171, 86,133,193, 96,104, 80,209,139, 69,112,112, 48,204,102, + 51,150, 46, 93, 10,169, 84, 10,169,244,255,190,194,100, 42, 63, 56,116,254,252,249,248, 35, 71,142, 52,106,220,184,177,207,250, +245,235,211,187,116,233, 82,169, 91,183,110, 80, 42,149,208,235,245,176, 88, 44,104,209,162, 5,162,163,163,145,150,150,134, 63, +255,252, 51,163, 70,141, 26,254, 71,143, 30, 21,239,220,185,115,171, 28,233, 78,157, 58,117, 2, 33, 4,127,254,249,103, 38,165, + 52, 78,169, 84,174,159, 53,107,150,183,201,100, 18,159,127,254,249,132,172,172,172,137, 0, 44,114,185,252,203,110,221,186, 53, +231,121,126,181,205,102,171,112,101, 86,114,223,106,181, 90, 40, 20, 10,119,166,132,144,100,101,101,213, 5, 0,181, 90,237, 11, +192, 49, 66, 82,175,215, 23, 51,193, 38,147,201,224,235,235,171, 6,128,162,223, 72,202, 56, 30,149, 84, 42,213,218, 91,183,110, +120, 56, 71, 46,189,189,189, 49,100,240, 96,174,117,171, 86,178,250, 13, 26,116,125,127,246,242,213, 33,126,158,166,168, 16, 63, + 88,108, 22,236,220,190, 77,164,162,101, 59, 59, 69, 31, 14,118,147, 81, 50,130, 37,145, 72,176,119,239,222,187,190,147, 74,165, +216,188,121,179, 91,102,200,110,166,202,106, 34, 43, 97,134,136, 59, 81,117,158,231,177,100,201, 18,136,162,136,241,227,199, 23, +107, 54,116,214,183,155, 29, 87,154,246,223, 68,127, 40, 2, 48, 33,241, 43,185,227,247, 37,211, 91,164, 73,220, 49, 67,223,124, +243,141, 91, 17,172,167,159,126,218, 45,211,230,156, 47,123,186, 78,158, 60, 89,170,238,162, 69,139, 92,246,105, 19, 69, 17,127, +252,241,135,195,156,218,249,224,131, 15, 70,122,122,122,106,246,237,219,135, 59,119,238, 64,171,213,162,160,160, 0, 62, 62, 62, +222,157, 59,119, 62,117,231,206,157,155,231,207,159,103, 29,222, 25,140,123,141, 96,217, 43, 93,119,154, 9, 75,107,239, 47, 69, + 79, 32,132,192, 96, 48,148,106,172,156, 77,129,217,108, 70,102,102, 38, 68, 81,188,231,185,186, 74,171, 88, 93, 25,172,179,103, +207, 14, 31, 49, 98, 68,178,151,151, 87,253,204,204,204, 20,185, 92, 30,187,111,223,190,202,102,179, 25,158,158,158,240,244,244, +196,150, 45, 91,224,237,237,141, 55,223,124,243,182, 94,175, 63,164, 86,171, 3,245,122,253,233, 59,119,238,188, 95,166,115,145, + 72, 58,181,109,219, 22,113,113,113,200,201,201,217, 77, 8,169,255,242,203, 47,119,169, 92,185, 50,153, 57,115,166,225,218,181, +107,223, 1, 72, 87,171,213, 75, 87,172, 88,209,174,113,227,198,154, 97,195,134,129, 16,242, 61,165,212,224,110,158,181, 90,109, + 49, 99,149,151,151,135,252,252,124,168,213,106,171,155,251, 76,130,194,190, 84,246,254, 84,142, 99, 83, 20,189,178, 31, 31, 42, + 8, 2, 45,220,132, 74,202,210, 83,171,213, 51,150, 47, 95, 94,172,207,157, 61, 58,154,154,154, 10, 79, 79, 79,124,240,254,251, +210,143,222,126,185, 17,175, 9, 60,204,113, 4, 38, 51,205,161,162,105,155, 54,117,224,126,118,138, 62,156, 8,150,221, 16,244, +238,221,251,174,102, 65,169, 84,138, 29, 59,118,160,111,223,190,142, 27,150,162,166,118,183, 12, 65,175, 94,189, 28,145,160,109, +219,182,149,218,188,103,143, 64,185, 99, 4,237,219,142, 27, 55, 14,130, 32,224,219,111,191,197, 91,111,189, 5,142,227,240,213, + 87, 95,129,227, 56, 76,157, 58,181, 66,245,132,189, 46,187,249,121,225,107,216, 91,121,200, 92, 16, 8, 0,240,240,244,180,111, + 88, 33, 77, 65, 16, 28,145,171, 6, 13, 26, 64, 34,145,160,101,203,150, 16, 4,193, 17,185,234,209,163,135,243,180, 10,212, 29, + 77, 65, 16,112,229,202, 21, 71,154, 91,182,108, 89, 44,114, 37, 8,130, 91,134,141, 16,242, 81,199,142, 29,103,134,133,133, 5, +140, 30, 61,154,240, 60,143, 38, 77,154,248, 79,157, 58, 53, 87, 34,145, 40, 39, 76,152, 80,218,121, 45, 1, 80,191,118,237,218, +106,118,230, 48, 24,247, 17,193,170,136,193,114,167,114, 84,169, 84,103, 50, 50, 50, 90,202,229,242, 98,230,170, 52,163,197,243, + 60,210,210,210,160, 82,169,206, 60,200, 12,187,106, 34, 44, 50, 51,111, 59,237,135,166,207, 61,247,220,170,213,171, 87, 71,237, +220,185, 19, 71,143, 30, 69,165, 74,149, 48,107,214,172, 27, 55,111,222, 28, 76, 41,253,219,157,255,173, 90,181,106, 29,181, 90, +141, 67,135, 14, 1,192,126, 0, 47,190,254,250,235,196,106,181, 98,254,252,249, 58, 0, 59,188,188,188,214,253,246,219,111, 13, +234,213,171, 39,219,185,115,103,254,209,163, 71,247,184,105,174,108,162, 40,222,101,172,156,247,169,135,135,135, 59, 17, 44,139, +151,151,215,217,188,188,188,231,244,122,125,158, 92, 46,247,200,203,203, 51, 58, 27, 43,187,190, 32, 8,146, 43, 87,174, 36, 3, +136,242,242,242, 58, 11,167,166,196, 98, 5, 76, 16, 58,117,234,212, 73, 40,121, 12, 82, 83, 83,113,231,206, 29,152,205,102, 52, +110,220,152,240,196,194,103,221, 62, 61,146,157,146, 15, 31,142,227,168,253, 92,183,143,250, 43,109,228,224,182,109,219, 28,159, + 57,142,195,159,127,254,233,150,105,219,177, 99, 71,185, 29,209, 75,116, 72,119, 25, 10,183,111, 63,127,254,252,194,199, 81, 20, + 69,174, 56,142,195,148, 41, 83, 32,151,203, 49,115,230, 76, 76,153, 50,165, 88, 84,198, 85, 4, 75, 16, 4, 68, 76,210, 57,223, + 20, 21,158, 20, 69,253,157, 8, 33,206, 38,203,173, 72,155,171, 14,238,238, 68,254, 75, 75,167, 66,161, 40,179,131,123, 9,205, + 50,255,224,248,241,227, 63, 52,106,212,232, 90,165, 74,149,118,180,108,217, 82,126,252,248,113,140, 25, 51,134, 24,141, 70,207, +157, 59,119, 58,254,183, 52,163,167,213,106,149,236,204, 97, 48,238, 35,130, 85,145, 78,238,238,244, 75,208,235,245,187,246,236, +217,211,180, 79,159, 62, 66,121,205,131, 90,173, 22,129,129,129,184,126,253,186, 85,175,215,187,156,254,192,102,115,127, 66,116, + 87, 6,171,148,125,240,119, 76, 76,140,213, 98,177,160,122,245,234, 8, 13, 13,133,193, 96,192,156, 57,115,172,238,154, 43, 66, +136,180, 73,147, 38, 60, 0,100,103,103, 3, 64, 38,128, 26, 53,106,212, 64, 92, 92, 28,178,179,179, 55, 2,232,252,209, 71, 31, + 53,108,222,188,185,116,245,234,213,186,209,163, 71,111,180, 88, 44, 51,221,209, 23, 69,209,100,181, 90, 35, 57,142, 51,231,228, +228, 36, 57,239,207,192,192, 64, 95,181, 90, 77, 82, 83, 83, 45,238, 24,172,250,245,235, 31,187,125,251, 54,102,204,152,145, 62, +107,214,172, 26,249,249,249,217,185,185,185, 86,103,147,101, 48, 24, 56,127,127,127,249,130, 5, 11,148, 0, 80,191,126,253, 99, +101, 25, 44,173, 86, 91, 89,165, 82, 57, 62, 27,141, 70,220,185,115, 7,119,238,220, 65,106,106, 42,242,243,243, 17, 21, 21, 5, +157, 78, 23,206, 78,199,127, 15,231,102, 50,231,243,219,249, 2, 94,145,115,221, 89,179,119,239,222,142,190, 91,246,136,152,125, + 89,187,118,109,177,142,227,174,154,222,236, 6,107,254,252,249, 24, 55,110, 28, 20, 10, 5,190,254,250,235, 98, 77,132,165,152, + 2,226, 78, 58, 35, 39,235,113,103,158, 47, 36, 18, 9,252, 70,167, 22,107,138, 43,101, 52,158, 91, 70,112,214,172, 89, 15,172, +137,208,174, 25, 30, 94,120,170, 44, 89,178, 4,207, 61,247, 28,246,239,223,127,207, 77,132,145,145,145, 43,230,206,157, 43, 63, +127,254, 60,242,242,242,144,158,158, 14,163,209,136,196,196, 68,199,190, 41, 13,157, 78,167, 96,103, 13,131,113, 31, 6,203,185, +243,167, 43,131, 85,212, 65,210,149, 17,248,250,195, 15, 63,124,189, 77,155, 54,190, 30, 30, 30, 72, 78, 78,190,203, 92, 21, 20, + 20, 64,163,209,192,100, 50, 97,207,158, 61,121,162, 40,126,237,202, 20, 88, 44, 22, 4, 4, 4, 32, 35, 35, 3, 98, 25,253,162, + 57,142,131, 82,169,132, 86,171, 69, 89,102,160,188, 10,216,108, 54,195, 98,177,192, 98,177, 84,216,164, 1, 80,218, 39,108, 45, +250,127,109, 72, 72, 72, 85,133, 66,129,248,248,120, 0,184, 2,160, 67,183,110,221, 36,153,153,153,244,149, 87, 94, 57, 76, 41, + 29,235, 98, 54,123,211,190,125,251, 34, 1, 64,169, 84, 94, 6,128,196,196, 68, 75, 78, 78, 78,177,200,160, 74,165,162,125,251, +246, 13,166,148, 98,223,190,125,145, 82,169,148,162,140, 57,171, 0, 24, 54,110,220,120,222,203,203,107,213,167,159,126, 58,184, +103,207,158,231,234,214,173, 27,169,213,106,211,244,122,189,222, 96, 48, 80,158,231,165, 62, 62, 62,138,237,219,183, 95, 59,124, +248,112,103, 79, 79,207, 85, 27, 55,110, 60, 15,160,212, 72,155, 90,173, 78,212,233,116, 17, 26,141, 6,122,189,190,152,185,186, +115,231, 14, 40,165,184,113,227, 6, 84, 42,213,109,118, 58,254, 59, 56, 71, 92, 74, 70, 90, 74,126,231,174,185,114, 54, 67,219, +183,111, 47,119, 14, 44,119, 53,157,205,208, 91,111,189,133,121,243,230,221, 21,193,154, 57,179,240,158,228,253,247,223,119, 25, +189,114, 70, 34,145,224,206, 60, 95, 4,141,203, 42,102,102, 0,128,216,211, 87,193, 41,217, 4, 65,192,140, 25, 51,238,234,124, +238,220,132,231,174,177,114, 78,103, 90, 90, 26, 4, 65,128,175,175, 47,134, 12, 25,130,174, 93,187, 58,154, 26, 43,170,155,144, +144,112,114,246,236,217, 85, 66, 67, 67,177,122,245,106,147, 90,173,150,117,236,216,145,230,228,228,144,242, 34, 88,204, 96, 49, + 24,174,225,220,169, 32,221,105, 38, 44,173,146, 36,132,116,118,254,124,243,230,205, 92,173, 86, 59,100,208,160, 65,122,163,209, +136,170, 85,171, 66, 46,151,195, 98,177,192,100, 50, 65, 42,149, 34, 56, 56, 24,148, 82,172, 91,183, 78,175,211,233,134,220,188, +121, 51,183, 60, 77, 66,200,123, 79, 61,245,148, 33, 62, 62, 30, 85,170, 84,129,135,135,199, 93,143,141,240,244,244,132,183,183, + 55, 46, 94,188,136,165, 75,151,234, 9, 33,239,149,167, 89,154,209,180, 27, 43,187,209,114, 53, 50,169,132,166,218, 30,197,209, +233,116, 0, 96,173, 82,165, 74, 32, 0,220,184,113, 3, 0,110, 69, 69, 69,181,171, 86,173, 26,217,191,127, 63, 40,165, 59, 75, + 51, 87, 37, 52,179, 98, 99, 99,111,197,198,198,154, 76, 38,147,212,100, 50, 73,115,115,115,205,254,254,254, 1,254,254,254,254, +129,129,129,190, 1, 1, 1,222,201,201,201, 86,171,213, 42,181,217,108,210,216,216, 88, 83,243,230,205,111,195,105, 54,247, 18, +154, 34,128,188, 69,139, 22, 77,151, 72, 36,183, 90,181,106, 21, 51,121,242,228,155, 22,139,197, 24, 26, 26,234, 19, 20, 20,164, +212,233,116,249,159,124,242, 73,218,188,121,243, 58, 75, 36,146, 91,139, 22, 45,154, 14, 32,175,232,183,119,105, 90,173,214, 93, + 59,119,238,180, 90, 44, 22, 36, 37, 37, 33, 57, 57, 25, 41, 41, 41,142, 87,111,111,111, 28, 59,118,204,102, 54,155,119, 86, 96, +127, 62, 40, 99,193, 52,241,255,190, 63,229, 25, 43,119,186, 1,148, 76,167,221, 12, 61,247,220,115, 24, 56,112, 32, 6, 13, 26, +132, 33, 67,134, 96,216,176, 97, 21,153,154,161,228,249,238,248,237,228,201,147,241,254,251,239,227,195, 15, 63,132, 92, 46,199, + 7, 31,124,128,105,211,166, 97,218,180,105, 37,205, 21, 41, 39,239,197,234,185,220, 37,161,208, 45,139,128,105,101,181,194, 38, + 66, 74,255,191,184,191, 63, 29,102,232,131, 15, 62,192,225,195,135, 49,113,226, 68,236,222,189, 27, 99,198,140,193,150, 45, 91, + 48,114,228, 72,252,241,199, 31,142,215,162,155, 64,234, 78, 58, 5, 65, 64,187,118,237,160,211,233, 28, 6,118,212,168, 81,197, +244, 70,142, 28,233,214,254, 84, 42,149,131, 55,110,220,184,126,233,210,165, 55,178,178,178,186,222,188,121,243,182, 86,171, 37, +185,185,185,142, 99, 88,114, 41,138, 68,203,217,121,196, 52,153,133,186,143, 8,150,213,106, 69,229,202,149,139, 61,219,138,227, +184, 98, 75, 69,250, 17, 0, 64, 74, 74,202,246,224,224,224,103,159,121,230,153,149, 47,190,248,162, 71,116,116,180, 36, 34, 34, + 2, 58,157, 14,183,110,221,194,205,155, 55,173,187,119,239,206,211,233,116, 67, 83, 82, 82, 92,142, 34, 75, 74, 74, 90, 30, 24, + 24,184,109,232,208,161, 83, 27, 54,108, 56,106,252,248,241,124, 84, 84, 20,114,115,115,225,227,227,131,128,128, 0,196,199,199, + 99,239,222,189,182,156,156,156,133, 54,155,237,163,212,212,212,244,138,236, 36,171,213,202,155,205,102, 12, 26, 52, 8,162, 40, + 98,206,156, 57,176, 90,173,124, 5, 36,204,102,179,153, 2, 32, 25, 25, 25, 0,160,179, 27,174,171, 87,175, 2,192,237,136,136, + 8, 13, 0,236,220,185,147, 0, 56,228,238, 13,189,115, 36, 43, 58, 58, 58,222, 94, 41, 58, 95,228,236,235,139, 34, 87,174,110, +195, 13, 3, 6, 12, 72,211,233,116,221,222,122,235,173,169,243,231,207, 31, 60,127,254,252,187, 54,242,244,244, 92,245,213, 87, + 95,125, 52, 96,192,128,180,178,162, 87, 69, 17,187,247, 95,120,225,133, 1,103,206,156,241, 80, 40, 20,208,106,181,200,204,204, +132,217,108, 70, 84, 84, 20,210,210,210,176,124,249,242,124,189, 94, 63,141,157,142,255, 46,101, 25, 43,119,251, 88,150, 21,197, +217,188,121,115,169,115, 76, 85, 84,179,164,201,112,119,110, 42, 55,110,134, 74,157,250,161, 34,245, 90, 89,154, 95,124,241,133, + 99,178,213,210, 34, 87, 21,137, 96,217, 53,125,125,125, 1, 20,206,190, 47,138, 34,158,126,250,233,123,214, 45,122,182,224,179, +246,207, 77,154, 52,249,104,245,234,213, 51, 41,165,126, 0, 4,231,125,192, 30,170,192, 96, 60, 32,131,101,179,217, 18,219,181, +107, 87,172, 98, 43,239,161,170, 69, 70, 36,209, 77,147,181, 45, 42, 42, 42,106,201,146, 37,111,168,213,234,206, 6,131,161, 30, + 0, 40, 20,138, 51, 90,173,118, 39,199,113,115, 83, 82, 82,220,126, 56,115,145, 97, 26, 19, 22, 22, 54,103,216,176, 97, 51, 91, +181,106,213,255,149, 87, 94, 33,130, 32, 96,205,154, 53, 52, 49, 49,113, 45,199,113,239, 37, 39, 39, 95,191,151,157,164, 82,169, + 46,175, 93,187,182,234,230,205,155, 97,177, 88,176, 96,193, 2, 40, 20,138,203,238,254,158, 82,154, 46, 8,194,202, 86,173, 90, + 13, 62,124,248,240, 42, 74,233, 89,185, 92,254,115,108,108,236,144, 67,135, 14,253, 74, 41,189, 32, 8,194,207, 45, 91,182, 28, +114,236,216,177,117,148,210,211, 21, 72, 94, 86,108,108,108, 54,128, 32,171,181,244, 22,197,216,216, 88, 19,128, 59,110,152, 43, + 59,121, 35, 70,140, 48,143, 24, 49,226,237, 1, 3, 6, 44,253,251,239,191,155,229,228,228,212, 3, 0,111,111,239, 51, 77,155, + 54, 61,246,235,175,191, 94, 42,138, 92, 25, 92,229,157, 16,210,183, 94,189,122,235, 62,254,248, 99,117, 76, 76,140, 80,189,122, +117,220,188,121, 19,103,207,158,181,254,240,195, 15, 5,122,189,190, 55,165, 52,155,157,142,255, 14,246, 38, 66,111,111,239, 98, + 55, 79,246,161,251, 21,105,194, 43, 77,179,228,141, 25,207,243,229,105,186,116, 53, 26,141,198, 49,106,217,157,174, 9,229, 61, +123,212,158, 78,187,166,125,113,195, 92, 81, 87,154, 69,143,233,169,136, 38,220,209,180, 88, 44, 14, 93, 55, 52, 43,244,167,199, +143, 31,255, 1,192, 15,213,171, 87,191, 10,160, 26, 51, 85, 12,198, 63, 96,176, 46, 94,188,216,228,159,252,227, 27, 55,110,228, + 1,248,168,104,121, 32, 36, 38, 38, 94, 7, 48, 32, 40, 40,232,203, 67,135, 14,125, 0, 0,162, 40,206,112,245, 60, 67, 87,156, + 62,125,186,175, 68, 34,153,191,108,217,178, 86,148, 82,120,121,121, 29,186,122,245,234,107, 21,140,130,141, 34,132,140,183,143, + 10, 52, 26,141,163, 8, 33, 19, 40,165, 90,167,245,142,207, 21,132, 2, 48, 82, 74, 67,202, 88,111,172,128,185,114, 68,178, 0, +152,126,253,245,215, 2, 0,167,240,255,121,174, 44, 69,139, 1, 78,205,130, 46, 46,112,127, 17, 66,170,127,240,193, 7,179,120, +158,239,164,213,106, 67,213,106,117,130,213,106,221,165,211,233,222,163,148,102,178, 83,241,223,195,106,181, 38,181,107,215, 78, + 40,237,198,169,188, 11,120,121, 55, 84, 54,155, 45, 49, 54, 54, 22,247,160,153, 84, 78, 82,111,181,108,217,146,115, 87,203,142, +197, 98, 73, 43, 47,157, 45, 91,182, 44,243,166,241, 94,243,222,178,101,203, 10,165,177,168,174, 74,122,208,154, 46,246,103,153, +232,245,250,236, 74,149, 42, 21, 24, 12, 6,137,209,104,148,148,140,216, 43,149,202,116,118,230, 48, 24,247,104,176,254,203, 20, + 25,170, 94, 15, 74,175,168, 63,212,171, 15, 64,199, 80,226,179,182,188,207, 21,228,159,136, 0,137, 0,116, 15,104, 31,102, 0, +120,133,157,114,143, 30,103,207,158,109,254,160, 53,207,159, 63,223,228, 31, 72,103,203, 7,173,121,238,220,185, 38, 79,170,102, +121, 36, 37, 37, 53,103,103, 6,131,113,127,112,108, 23, 48, 24, 12, 6,131,193, 96, 60, 88, 8,128, 82, 71, 2, 84,228, 73,217, +247, 50,154,192,149, 62,211,100,154, 76,147,105, 50, 77,166,201, 52, 31, 63, 77, 87,218, 21,241, 31,143, 52,165, 13,195,125, 80, + 11,128,206, 76,147,105, 50, 77,166,201, 52,153, 38,211,100,154, 79,218,194,154, 8, 25, 12, 6,131,193, 96, 48, 30, 48,204, 96, + 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24,140, 39, 8, 66, 8, 9, 11, 11, +107, 23, 18, 18,210,242, 73,221, 7, 2, 43, 6, 12, 6,131,193, 96, 48, 30, 4, 85,170, 84,241,182,217,108, 47,134,132,132,188, + 86,181,106,213,170, 0, 16, 26, 26,122,150, 82, 58, 87,169, 84,254,124,237,218, 53,211, 19, 99, 50,217,163, 16, 24, 12, 6,131, +193, 96,220, 15, 33, 33, 33, 13, 1,188,166, 84, 42,135, 54,111,222, 92,214,177, 99, 71,248,248,248,192,106,181, 34, 37, 37, 5, +127,253,245, 23, 78,158, 60,153,101,177, 88,230, 91, 44,150,249,233,233,233,169,204, 96, 49, 24, 12, 6,131,193, 96,148, 65,112, +112,240,236,238,221,187,191,229,227,227,131,234,213,171, 35, 40, 40, 8, 70,163, 17,122,189, 30,148, 82, 8,130, 0, 74, 41,242, +243,243,113,252,248,113, 28, 61,122,212,154,151,151,183,138, 16, 50, 55, 57, 57,249, 36, 51, 88, 12, 6,131,193, 96, 48, 24, 37, + 8, 9, 9, 73,221,189,123,119,128,213,106, 69, 70, 70, 6,140, 70, 35,116, 58,157,195, 96,241, 60, 15, 74, 41,172, 86, 43, 0, + 64, 20, 69, 92,184,112, 1,135, 15, 31, 70, 66, 66,194, 87, 41, 41, 41,111, 63,142,251,133,117,114,103, 48, 24, 12, 6,131,113, + 95, 24,141, 70,172, 88,177, 2, 25, 25, 25,168, 92,185, 50, 66, 67, 67,225,237,237, 13,165, 82, 9, 0, 14,115, 5, 0, 28,199, + 33, 38, 38, 6, 67,135, 14, 5, 33,100,200,227,186, 79, 88, 39,119, 6,131,193, 96, 48, 24,247,131,197,100, 50,161, 73,147, 38, +136,143,143, 71, 92, 92, 28, 26, 53,106,132,218,181,107, 35, 35, 35, 3,201,201,201,197, 54, 62,118,236, 24, 78,156, 56,129,182, +109,219, 62,214, 59,133, 53, 17, 50, 24, 12, 6,131,193,184,103, 66, 67, 67,159,175, 84,169,210,130, 97,195,134, 41, 27, 52,104, +128,196,196, 68, 36, 37, 37, 33, 59, 59, 27, 13, 27, 54, 68, 76, 76, 12,174, 95,191,142,109,219,182,225,196,137, 19,144,203,229, + 8, 11, 11,131,102,213, 47,248, 35, 36, 56, 41, 57, 57, 57,140, 25, 44, 6,131,193, 96, 48, 24,140, 18,132,132,132,248, 17, 66, +222, 11, 13, 13,125,125,200,144, 33,146,234,213,171, 35, 49, 49, 17,233,233,233,200,206,206,198,145, 35, 71,236,102, 12, 97, 97, + 97,184,121,243, 38,206,156, 57,163, 55, 26,141,163,147,146,146,150, 51,131,197, 96, 48, 24, 12, 6,131, 81,182,209,170, 12, 96, +122,181,106,213,158,127,238,185,231,184,144,144, 16, 36, 37, 37, 97,247,238,221,168, 86,173, 26, 82, 83, 83,113,252,248,113, 91, + 94, 94,222, 66,155,205,246, 81,106,106,106,250,227,186, 47,254,209, 78,238,132,144,206, 76,147,105, 50, 77,166,201, 52,153, 38, +211,124, 50, 52,147,147,147, 19,146,147,147,135, 95,185,114, 37,102,230,204,153, 27, 23, 44, 88, 0,158,231, 17, 26, 26,138,221, +187,119,211, 93,187,118,173, 45, 40, 40,168,153,156,156, 60,230,113, 54, 87, 0,235,228,206, 96, 48, 24, 12, 6,227, 1,115,231, +206,157,139, 0,250,134,134,134, 54, 63,119,238,220,187, 0, 32,138,226,140, 59,119,238, 28,127, 82,246, 1, 51, 88, 12, 6,131, +193, 96, 48,254, 17,146,146,146,142, 2,232,245, 36,230,157,205,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, + 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24, 79, 20, 4, 64,169, 35, 1, 40,165, 59,221, 22,185,135, 17, 10,174,244,153, 38,211, +100,154, 76,147,105, 50, 77,166,249,248,105,186,210,174,136,255,120,164,161,148,186, 92, 80, 52, 95, 86, 69, 23, 0,157,239,229, +119, 76,147,105, 50, 77,166,201, 52, 31,190,230,189,212,245,165,105, 22,221,188, 19, 20,182,146,112,246,207,143, 90, 58,255, 43, +121,127, 82, 52, 31,183, 69,112,225, 46, 29, 59,137, 16, 34, 2, 16,233, 3,152,153,148, 16, 98, 63, 0, 15, 68,143,241, 15,132, + 54, 11,143, 17,249,191, 15,103,199,137,193,120,140,207,247, 7, 86,215, 59,213, 29,188,211, 69,214, 6,192, 70, 8,193,253,212, + 37,255,196, 53,233, 81,207,251,147,172,249, 95, 71, 40,111, 71, 85,170, 84,105,123, 64, 64, 64,135,140,140, 12,177,232,123,132, +134,134,130,227, 56, 8,130,160,143,143,143,247,172,232, 31, 6, 6, 6,126, 31, 19, 19,243, 98,102,102,166,200,113, 28, 42, 87, +174, 12, 66, 8,120,158, 7,207,243,250,107,215,174,121,254,219, 59,165,113,227,198,217, 38,147, 73, 83,242,123,153, 76,102,136, +139,139,243,120, 18,204,149,191,191,255,179,129,129,129,222, 89, 89, 89, 20, 0,194,194,194,192,243,124, 97,161, 17, 4,235,245, +235,215,151,185,171, 23, 25, 25,121, 76,169, 84,122, 11,130, 0,158,231, 33, 8, 2,180, 90,109,206,133, 11, 23,154, 21,173, 63, +168, 84, 42,253,120,158,183,151, 45, 24, 12,134,204,243,231,207,183,102,151,190,255, 38,107,215,174,229,187,133,190, 84, 77,160, +250,250, 28, 71,189, 68,145,228, 90,137,242,244,182,164,239,175,185,243,251,254,253,251,219,254,229,115,160, 10, 0, 43,165, 52, +249, 30,126,204,149, 82,209,118,183, 1, 3,139, 62, 26, 56, 32,147, 0, 87,106, 2,235,206, 3,250, 18,205, 10,226,195,190,145, +170, 82,165,202,220, 74,149, 42, 13, 47, 40, 40,208,113, 28, 7, 66, 8,141,137,137,177,111, 83,236, 85, 20,197,196,115,231,206, + 53,113,113,145,149, 84,169, 82,229,171, 74,149, 42,189,160,211,233,116,132, 16, 16, 66, 40, 33, 4,245,234,213,187, 75,211,102, +179, 37,158, 61,123,182,201,195, 74,231,191,149,247,186,117,235,150,170, 89, 86,222, 75,211,116, 78, 39, 33, 4, 49, 49, 49,247, +157,206, 71, 81,243,177, 53, 88, 0,184,128,128,128,141,205,154, 53,107,191,105,211, 38,238,226,197,139, 92,116,116, 52,108, 54, + 27, 68,177,240,220,111,212,168,145,170,162,127, 22, 20, 20,244, 83,179,102,205, 6,109,218,180,137,219,184,113, 35,215,180,105, + 83, 16, 66, 96,179,217, 96,179,217,208,169, 83, 39,229,125, 86, 22, 26, 65, 16,198,203,100,178,118, 86,171,181, 54, 0, 72, 36, +146, 11, 70,163,113,175,213,106,253,154, 82, 90,224,142,142,197, 98, 81,157, 59,119,238,174,125,211,172, 89, 51,217,189,166,173, + 70,141, 26,135, 56,142,139, 42,237,164, 45,235,149, 82,122,227,220,185,115,173,202,210,172, 85,171,214, 33,142,227,162,236,219, +151,166, 81,242, 59, 81, 20,111,156, 61,123,182, 85,121,149, 78, 96, 96, 96,191, 86,173, 90,121,253,246,219,111, 36, 33, 33,129, + 40,149, 74,136,162, 8,155,205, 6,139,197,130,142, 29, 59, 86,104,254, 52,149, 74,229,185,107,215,174,106, 1, 1, 1, 72, 75, + 75, 67,102,102, 38, 70,142, 28,121,197,190, 94,169, 84,250,253,245,215, 95, 53,124,125,125,161,211,233,144,155,155,139, 33, 67, +134,252,231, 79,174,174,109,171,126, 76, 0, 95,251,103,155,136,172,157, 7,174,191,127,191,186,181,106,213, 58, 33,147,201, 2, +203, 58,230,165, 29,123,147,201,148,122,238,220,185, 70, 46,206,159, 8, 0,189,120,158,175, 46, 8, 66, 45, 0, 17, 86,171, 53, + 16, 0,164, 82,105, 42,207,243, 55, 45, 22,203, 37,147,201,116, 21,192,102, 74,233,205,178,180,186,133,190, 84,141, 88,117,253, +243,141, 98, 15, 85,213, 79,107,234,174, 79,185,172,146,235,182,116, 11,125,105,173,187, 38,235, 95, 52, 87,145, 33, 33, 33, 95, + 20,189,159, 72, 41,141,191, 95, 77, 27, 48,144, 82,234, 5, 0,185,185,185, 94, 9, 9, 9, 65,155, 55,111,142,153, 53,107, 86, + 71,153,193,240,185, 9,184, 88,222,239,187,180,171,118, 92,224, 72, 24,138, 98, 0, 86, 42, 38,238,216,123,253, 65, 92,152,184, +208,208,208,185,221,186,117, 27,182,112,225, 66,213,209,163, 71, 85,117,235,214, 5,207,243,246,250, 2, 37, 3, 15, 45, 90,180, + 40,119,247, 1, 16, 66, 66, 66,230, 60,245,212, 83,131,231,207,159,175,186,116,233,146, 42, 50, 50, 18, 69, 23,219, 98,101,211, +254, 93,195,134, 13, 31,118, 58,255,209,188,119,239,222,125,240,130, 5, 11, 84,103,206,156, 81, 85,175, 94, 29, 28,199,129,227, +184,187,244, 56,142, 67,147, 38, 77,220,210,236,218,181,235,224, 69,139, 22,169, 78,156, 56,161,170, 85,171,150, 99,223, 57, 53, +207, 85, 56,157,143,184,230,227,103,176, 8, 33, 92,165, 74,149, 86, 52,105,210,164,219,166, 77,155,120, 0, 56,113,226, 4,178, +178,178, 16, 26, 26, 10,141, 70, 3,185, 92, 14,131,193, 80,161,112, 95, 96, 96,224,247, 69,230, 74, 2, 0,235,134,246,197, 13, + 9, 48, 54,205, 4,169, 84,138,235,215,175,131,231,249,251, 9, 29,183,245,244,244, 92,190,126,253,122,159, 70,141, 26,113, 25, + 25, 25,136,140,140, 68, 86, 86, 86,179,125,251,246, 53,126,233,165,151, 94, 34,132, 60, 79, 41,221,231,174,230,150, 45, 91,160, + 86,171,161, 82,169,160, 86,171, 97, 54,155,201,189,166,143,231,249,176,163, 71,143, 6,104, 52, 26,136,162,232, 88, 74,180, 95, + 59, 16, 69, 17,109,219,182, 53,151,123,240, 4, 33,236,232,209,163, 1, 74,165, 18,148,210, 98,122, 54,155, 13,114,185,220,249, + 14, 17, 54,155, 13, 45, 91,182, 52,187,138, 92,217,205, 21, 0,172, 90,181, 10, 65, 65, 65, 8, 8, 8,128, 90,173,134, 82,169, +188,151,188,195,207,207, 15,175,191,254, 58, 6, 14, 28,136,149, 43, 87, 66, 34,145, 56,231, 3,190,190,190,216,186,117, 43, 60, + 61, 61, 17, 30, 30, 94,108,253,127, 54, 18, 8,248,110,219,119,221, 17,145,237,223,179,129,208, 57, 54,106,190,163,114, 45,220, +136,138,133,219, 82,209,102,203,222,117,240,214, 84,151, 87, 5,142, 11, 57,122,244,104,128, 92, 46,119,239,226,110,179,161, 81, +163, 70,188,139,243,167, 71, 76, 76,204,186,215, 94,123, 77, 90,189,122,117, 34,149, 74, 33, 8, 2, 4, 65,176,151,199,112, 74, +105,184, 40,138,237, 83, 83, 83,233, 55,223,124,243, 57, 33,228, 25, 74,233,150, 82,203, 38,213,215,207, 55,138, 61,246,159, 68, +179,254,157, 39, 99,235,154, 41,205, 98, 27,138,240, 80,233,175, 1,120,100, 13, 22, 33,196, 83,169, 84,126,176,102,205, 26, 41, + 0,116,238,220,249, 3, 66,200,155,148,210,188, 7,245, 31, 94, 94, 94,240,242,242, 66,221,186,117,241,236,179,207,122, 55,108, +216,112, 66,123,163,113,212, 30,160,204,115, 83,224,184,176, 63,255,186, 18, 96,255, 60,184,111, 99,105,183,246,213, 82, 11,111, +196, 74,110, 77, 33,218,104,226,206, 3, 55,154,184,200, 43, 23, 20, 20,244,101,247,238,221, 7, 44, 92,184,208, 3, 0,190,255, +254,123, 60,253,244,211, 8, 12, 12,132, 82,169,132, 76, 38,131, 68, 34,129, 84, 42,117,188,186,136, 8,241, 65, 65, 65,159, 63, +253,244,211,253,231,207,159,239, 1, 0, 63,253,244, 19,122,246,236, 9, 63, 63, 63,120,122,122, 66, 46,151, 67, 38,147, 65, 42, +149, 22, 51, 92, 21, 73,231,203, 93, 59,162,170, 82,142,158, 31,127, 14, 31, 31, 31,236,122,251, 53, 72, 56, 14, 99,182,237,131, +135,135, 71,185,233, 44, 75, 51, 46, 46, 14,105,105,105,165,230,157, 16, 82,110,221,231,156,247, 30, 61,122,244, 95,176, 96,129, + 35,239,221,186,117,131,159,159, 31, 60, 60, 60, 32,151,203, 33,149, 74,139, 45,101,237, 3,103,205,238,221,187,247, 95,180,104, +145, 7, 0, 44, 91,182, 12,157, 59,119,134,143,143, 15, 60, 60, 60, 28,251,178,162,199,232, 81,214,124, 44, 13,150,189,111, 84, + 64, 64,192,128,223,127,255,157,115,190, 0,202,229,114,199,137, 33,147,201,192,113, 92, 69, 42, 45, 18, 19, 19,243,226,166, 77, +155, 28, 63, 50,149,168, 20,228,114,121,133, 52, 75,232,119,238,208,161,195, 47,191,255,254,187, 66, 42,149, 66,175,215,227,220, +185,115,240,242,242,130, 76, 38, 67,159, 62,125,248,214,173, 91,251,181,111,223,254, 55, 66,200, 96,119, 70, 40, 80, 74,161,209, +104,138, 25,172,251,105, 66,182,159,160,155, 54,109, 2,207,243,197, 10,153,253,213,249,125, 64, 64,128, 91,186,114,185, 28,135, + 14, 29, 2,207,243,144, 72, 36, 16, 4, 1, 18,137, 4,127,252,241, 7,222,126,251,109,100,100,100,128, 16, 2,137, 68, 2, 15, + 15,151,173,155, 36, 48, 48,208,219,110,174,138, 34,128, 80, 42,149,144, 72, 36, 68, 16, 4, 98,111,198, 35,132, 16,119,219,212, + 5, 65,192,205,155, 55, 49,116,232, 80, 44, 91,182, 12, 51,102,204,192,224,193,131,139,173,207,203,203,131,143,143, 15,124,124, +124,160, 80, 40,238,185, 44, 60, 74,136, 37,246,206, 71, 51,191, 80, 65,164, 40,236,228, 33, 2, 34, 64, 65, 33, 82, 17,169, 73, +215, 48,251,203,121,188,187,101, 73, 46,151,227,224,193,131, 14, 19, 36, 8, 2, 8, 33,112, 54, 70,246, 37, 40, 40,200,165,166, + 84, 42,157,190, 97,195, 6,217,202,149, 43,177,122,245,106,199,127,168,213,106,120,123,123,195,207,207,207,177,132,133,133,145, + 31,126,248, 65, 90,191,126,253,233, 0,182,148,110, 2,169,151,170,234,167, 53,251,119,158, 92,104, 46, 39, 83,100, 95,153,217, +128,203,153,234,245, 8,155, 43, 1,192, 59,223,126,251,173, 95,227,198,141, 1, 0,223,126,251,173,223,136, 17, 35,222, 33,132, +188, 79, 41,181,222,243, 13, 22,176,154, 16, 50,176, 40, 98,171,232,210,165,139,236,187,239,190, 67,173, 90,181, 48,110,220, 56, +223,217,159,127,222, 11,192,111,101,151,165,226,133,233,211, 47,230,122, 83, 90, 88,126,168, 72,139,189,102,165,221,196, 7, 31, +124,236,178, 78, 6,192,133,132,132,188,180,120,241, 98, 71,119, 8, 31, 31,159, 82,235, 38,137, 68,226, 88,202, 49, 69,164, 40, + 42, 52, 98,225,194,133, 14, 77,127,127,127, 72,165,210, 98, 23,216, 91, 23, 79, 97,203,210, 79,160,246, 13,194,208,137,159, 85, + 56,157, 97,114, 25,194,148, 50, 52,104,208, 0, 42,149, 10,113,146,194, 75,153,135,135,135,203,116,150,165,233, 92, 47, 3,128, + 78,167,115, 68,237, 77, 38, 19,154, 52,105,226, 86,222, 23, 45, 90,228,208,244,243,243,115,228,221,158, 46,231,186,222,126, 3, + 83,158,102, 72, 72,200,136, 37, 75,150, 56, 52,125,125,125,139,105, 72, 36, 18, 44, 95,190,252,174, 58,226,126, 53, 43,122,220, + 75,106,222,188,121, 19,179,102,205,114,212, 73,246, 40,158,189,171,209,188,121,243,220, 50,216,143, 85, 4, 11, 0,201,200,200, + 16, 47, 94,188,200,197,197,197, 65, 34,145, 32, 32, 32, 0, 77,155, 54, 5, 0,152,205,102,251, 69,151,212,170, 85, 43,149,227, + 56,216, 47,186, 28,199,193,106,181, 58,218,147,157,140, 12,151,149,149, 37,238,216,177,131, 91,241, 76, 87,152, 40,208,240,131, + 79,208,173,103, 79,108, 11,149,129, 7,208,236, 98, 6,100, 50,153, 16, 28, 28,108,177, 31, 4,187,182,115,223,172,146,230,136, + 16,226,161, 86,171,127,216,188,121,179,130,227, 56,228,231,231, 67, 20, 69,180,110,221, 26, 28,199,225,236,217,179,120,239,189, +247,176,110,221, 58,108,216,176, 65,217,168, 81,163, 31, 8, 33,181, 41,165,249, 78,102,106,103,105,133,211,195,195, 3, 42,149, +202, 97,176,236,121, 46,106, 83, 47,217, 36,147,116,238,220,185,198,101,105,218, 35, 9,125,251,246,117,244, 57,179,155,161,146, +175, 82,169, 20,103,207,158, 45,205,244,221,165, 41,138, 34,218,180,105, 99,111,138,131, 70,163,193,158, 61,123, 28,235, 27, 54, +108, 8,147,201, 4,127,127,127, 92,184,112,193,165,102,122,122, 58, 77, 78, 78, 38, 43, 86,172,128, 68, 34,129,159,159, 31, 84, + 42, 21,249,237,183,223,222, 81, 40, 20, 97, 70,163, 81,180, 88, 44, 8, 11, 11,155, 23, 30, 30,110, 63, 70,218,107,215,174,249, +149,165,201,243, 60, 20, 10, 5,126,250,233, 39,204,154, 53, 11,239,190,251,110,177, 19,139,231,121, 24, 12, 6,248,251,251, 59, + 76, 86,201, 19,239,159, 24,182,251, 79,107, 82, 80,156, 59,177, 13,231,207,236,132,104, 19, 97, 19, 41, 40,181, 65,180, 2,113, + 59,142,212, 72,185,145, 28, 74, 65,129,162, 30, 55,150, 2,173,181,189,191,188, 22,128,141,123, 50,140,115, 92,165, 83, 16, 4, + 88, 44, 22,108,222,188, 25,215,174, 93,195,246,237,219,161,215,235, 29,251,177,101,203,150, 24, 49, 98, 4,130,130,130, 92,238, + 79, 74,233, 79, 9, 9, 9, 13,219,180,105, 67,114,114,114,144,147,147, 3,189, 94, 15,155,205, 6,171,213, 10, 65, 16,160, 80, + 40,160, 84, 42, 17, 24, 24, 8,131,193, 64,141, 70,227, 79,101,105,138, 34,201,213, 93,159,114,121,235,154, 41,205,250, 79,166, + 88,251, 25, 65,141, 8,185,110,239, 41,239, 17, 91,142,190,211,133, 80,142, 2,133, 89,231, 8,168,205,102,203,120,117,236,167, + 99, 30,246, 49, 42,193,168,241,227,199,215,118,110,158, 30, 50,100, 8,206,157, 59, 87,251,235,175,191, 30, 5,224,219,138,106, +250, 0,161, 0, 96, 5,182,162,112,193, 90,189,158, 12,218,184,177, 47,128, 23, 54,108,216,128,193,131, 7,227,203,207, 63,175, + 91,210, 96, 21, 43, 75,148,226,230,149,253,184,121,245, 0, 68,145, 58, 69,193, 75,127, 79,221, 75, 39, 41, 40, 40, 48, 28, 61, +122, 84,179,108,217, 50,120,123,123, 35, 42, 42,202,209, 74, 81,242, 2,107,255,236,170, 44,233,116, 58,195,197,139, 23, 53,191, +252,242, 11,124,125,125, 17, 30, 30, 14,149, 74,229,208,148,201,100, 56,178,109, 61, 70, 13,237,129,140,155,231, 49,247,205, 1, +110,167,243,229, 46, 29, 81, 89, 33, 67,223, 25,159, 34, 58, 58, 26,107, 7,246, 6, 71,128,209,187,143, 64, 42,149, 98, 89,143, +182,144,201,101, 24,189,251,111, 87,233,116,104, 30, 63,126, 28,162, 40, 34, 34, 34, 2, 58,157, 14,158,158,158, 80, 40, 20,144, + 72, 36,216,177, 99, 7,250,244,233,131,149, 43, 87,162,101,203,150, 46,243, 94, 80, 80, 96, 56,115,230,140,230,231,159,127,134, +175,175, 47, 42, 87,174, 12,149, 74,229, 8, 76,216,141, 22,207,243,136,138,138, 66,110,110, 46,170, 86,173, 90,174,166, 86,171, + 53,196,197,197,105,126,254,249,103,248,248,248, 32, 44, 44,204, 17, 97,179,155,162,105,211,166, 21,211,104,208,160,193,125,107, + 86,244,184,151,212,236,219,183, 47,170, 85,171, 6, 79, 79, 79,168,213,106,135,118,121,154,143,181,193,162,148,210,162, 81, 20, +136,142,142, 70, 86, 86, 22,228,114, 57,154, 54,109,138,140,140, 12,104, 52, 26, 72,165, 82, 80, 74, 49,112,224, 64,126,226,196, +137, 1, 69,166,202, 81,225,151,209,150, 46,114, 28,135, 86,173, 90,225, 92, 81,203, 79,183,158, 61, 17, 22, 22, 6,123, 39, 14, +133, 66,129,193,131, 7,147,183,223,126, 91,176, 71, 47, 40,165,208,235,245,168, 95,191,190,178,156,232,200,155,191,253,246,155, +151, 76, 38, 67,126,126,190,163,137,140,231,121, 92,188,120, 17, 95,126,249, 37, 94,120,225, 5,220,190,125, 27, 33, 33, 33,152, + 48, 97,130,230,211, 79, 63,125, 19,192, 71,174,118,142, 70,163,113,152, 43,149, 74,133, 97,195,134, 9,173, 91,183, 14,208,104, + 52,240,240,240,128,189,185,207,102,179,161, 85,171, 86,196, 85,212, 65, 20, 69,108,219,182, 13,130, 32,184,140, 96, 21,181, 89, +187,165,121,244,232, 81,135, 57,115,190, 43, 34,132,224,220,185,115, 14, 51, 87, 84,152,203,211,164, 60,207, 67,173, 86, 35, 40, + 40, 8, 74,165, 18, 42,149,138,108,218,180,233,253,136,136,136,224,215, 94,123,141,203,203,203,227,154, 52,105,130, 30, 61,122, + 8,162, 40,194,108, 54,163, 99,199,142,229,238, 71,137, 68,130, 99,199,142,225,211, 79, 63,197,228,201,147,177,104,209, 34,116, +238,220,185,152, 81, 32,132,160, 82,165, 74,240,244,244,124,124,206, 46, 17, 48, 91, 45,208, 21,232, 29, 77,184, 54,155, 13,103, +246,156,170,113,227,212,149,152,223,127, 89, 41, 1, 0,195,158,245,206,191, 10,126,118,254,175, 53,219,251, 74,143,238,201, 50, + 31,117,209, 84,136,113,227,198, 97,234,212,169, 24, 56,112, 32,118,236,216,129,247,222,123, 15, 47,189,244, 82,177, 8,150, 59, + 88, 44,150,197,207, 63,255,252,200,181,107,215,214,154, 60,121, 50,103,143, 96,169, 84, 42, 16, 66, 96, 48, 24, 96, 52, 26,161, +215,235,113,233,210, 37,241,149, 87, 94,185,108, 50,153, 22,151,165,103, 37,202,211, 42,185,110, 75,245, 42,124, 53,109,252, 23, + 30,109,154, 71,232,137,178,113,238,211,213, 59,211,206,131, 35,124, 64, 41,168, 88, 24,229, 51, 26,181,120,103,210, 4,254,223, + 60, 84,132,144, 30, 93,186,116,233, 58,115,230,204,187,214,205,156, 57, 19, 23, 46, 92,232, 74, 8,185, 89, 86,147,104,105,120, + 3, 97,138,160,160,175, 0,192,251,206,157,183,114,128, 68, 0, 24, 4,116,179, 1,189,119,236,216, 1, 0,168, 82,165, 10, 68, +160, 14, 1,126,226,129,213,214,210,162,130,148,194, 98,177, 66,175, 55,150,107,172,236,159, 93, 5,151,237,117, 61,207,243,168, + 91,183, 46,186,117,235, 6,169, 84, 10, 15, 15, 15, 71,115, 78,105, 81, 12, 23, 77,247, 20,128, 72, 8, 65, 84, 84, 20,186,118, +237, 10,169, 84, 10,181, 90,237, 48, 45, 50,153, 12, 60,207,163, 94,235, 78, 88,185,124, 38, 94,236,217, 8, 47,196, 6, 98,221, +153, 76,183,210, 25,161,148, 33, 92, 37, 71,116,116, 52, 60, 60, 60, 64, 8, 32,240,255,175, 79, 85, 42, 37,100,114, 89,185,233, + 44,169,153,154,154,138,248,248,120,196,199,199,131,227, 56,180,105,211,198, 17,117,185,122,245, 42, 62,250,232, 35, 24,141, 70, +183,242,206,113, 28,170, 87,175,142,142, 29, 59, 66, 38,147, 65,165, 82, 21,107, 26,180,239,211,252,252,124, 84,171, 86, 13, 27, + 55,110, 68,219,182,109, 93,106, 70, 71, 71,163, 93,187,118,144, 74,165,142, 27,105,165, 82,233,184,110, 20,153, 59,199,127, 52, +106,212,168, 66,154,219,143,221,198,210, 29,127,193,104, 18,145,167,179, 20,251, 65,176,191, 39, 14,252, 60,217,173,188,219, 53, +151, 44, 89,130,156,156, 28, 71, 29,100, 15,192,216,131, 39,149, 43, 87,198,130, 5, 11,158,172, 38, 66,251,101,193,238, 42, 67, + 67, 67, 97,239,231,161,209,104, 32,147,253,191,143,183,213,106,197,186,117,235, 16, 16, 16,224, 88,188,188,188,202, 44,208, 85, +170, 84, 1,165, 20,227,210, 11,187, 25,108, 13,145,226, 38,128,167,211,169, 35,186, 99,179,217,240,219,111,191,193,217,192,120, +120,120,148,219, 92, 36,147,201,218, 55,109,218,148, 51, 26,141,119,153,171, 79, 63,253, 20,131, 7, 15, 70,205,154, 53, 33,138, + 34, 10, 10, 10,208,161, 67, 7,201,188,121,243,218, 87,196, 96,169, 84,133,253,249, 77, 38, 19,246,236,217, 3, 31, 31, 31,248, +249,249,193,215,215, 23, 30, 30, 30, 80, 40, 20, 32,132,184,108, 46,163,148,162,111,223,190,142, 66,231, 28,181, 42,105,182, 14, + 29, 58,228, 86, 51, 25,165, 20,205,155, 55,135, 90,173,134, 70,163,129, 70,163,193,182,109,219, 28,235,155, 53,107, 6, 81, 20, + 17, 16, 16,128,195,135, 15,187,172,116,195,194,194, 28,219, 75, 36, 18,242,219,111,191,189, 19, 25, 25, 25, 60,122,244,104,142, +231,121,156, 56,113, 2,231,207,159, 71, 80, 80,144,163, 79,150,171,116,106,181,218,148,121,243,230,217,190,251,238, 59, 0, 64, +199,142, 29,145,155,155,155,230,180, 62,115,232,208,161,142, 81,138, 0,144,149,149,149,249, 24,248, 43, 88,205, 86,232, 12, 6, + 20,228,235, 28,209,160,180,228, 84,239,201,111,143,151,124, 57,102, 56, 0,224,237, 57,223, 34,127,209,255, 43,176,245,111, 15, + 10,120,102,246,234, 41, 0,250,148,167,175,211,233, 96, 52, 26, 17, 30, 30,142, 99,199,142, 33, 63, 63, 31,157, 59,119, 46, 22, + 33,117,222,167, 46,142,189,137, 16,210,186,103,207,158,127,127,253,245,215, 85,107,215,174, 77,180, 90, 45,116, 58, 29,156, 95, +207,156, 57, 67, 87,173, 90,117, 67,167,211,181,162,148,154,202,210,219,150,244,253,181,110,161, 47,173,221,119, 90,214,211, 63, +234,178,103, 82,118, 85,107,102,146, 92,155,167,191,100,176,209,243,160, 54,192, 6, 17,212, 42,194, 6,138,127,115,252, 54, 33, + 36,172, 70,141, 26,175,174, 92,185,178,212,253,197,243, 60, 86,174, 92,137, 54,109,218,188, 74, 8,185, 88, 94,231,126, 59, 45, + 1,153, 65, 34,153,188,249,215, 95, 11,251,114,117,236, 56,185,165,197,242,246, 97,192, 84,167, 94,189,126,135, 14, 29,242,178, +215, 43, 94, 94, 94,160,148,242, 58,157,206,171, 85,171, 86,253, 74,107,118,165, 34, 96,177, 88,160,215, 27,145,155,155, 15,147, +217, 82, 84,103,138,176,217,172, 69,175, 34,172, 69,245,168, 68,224, 61,218,183,172, 82, 80,104,180, 72,206,222, 35,183, 43,151, + 81,215, 83, 66, 8, 2, 3, 3, 33,149, 74,139, 69,153,220,137, 94,149,130,205, 94, 23,250,249,249, 65, 38,147,225,244,158,223, +145,118,225, 0,164,132, 66,180, 89, 32, 90,205,176, 89,205,224, 57, 30,151,174, 39, 35, 58,216,229,216, 33, 71, 58,187,125, 48, + 3, 45, 90,180,192,218,129,189, 65, 8,240,218,238, 35,144, 72, 36,248,185,111, 39,200,101, 82,188,178,227,136,187,233, 44,150, +247,227,199,143, 99,220,184,113,248,236,179,207,160, 84, 42,237, 45, 39,184,120,241, 34,126,253,245, 87,116,233,210,197,237,188, + 19, 66, 28,121, 23, 4, 1, 83,166, 76, 65,114,114, 50,230,204,153,131,198,141, 27, 67, 34,145, 32, 39, 39, 7,173, 90,181, 66, +106,106,170,219,251,211,222,140, 39,147,201,138, 69,155,236,198,239, 94,142,145, 93,115,120,223, 96,108, 58,184, 10, 4, 4, 71, +126, 30, 95,236, 90,180, 96,245,254, 10,107, 78,157, 58,181, 88, 58,159,196,232, 85,169, 6,139, 82, 74, 67, 67, 67, 33,138, 98, + 49, 83, 85,178, 67,173, 61,228,231, 28, 82, 44,183, 15, 2,207, 67, 20, 69, 71, 97,224, 75, 89,127,248,240,225,187, 76,192,210, +165, 75,203,189,128, 91,173,214,218, 30, 30, 30,197,162, 87, 82,169, 20, 83,166, 76,193,176, 97,195, 28,230, 74, 42,149, 98,217, +178,101,104,210,164, 9, 76, 38, 83,237,242,210, 42,149, 74,117,245,234,213,227,236, 81, 32,165, 82, 73, 6, 15, 30,204, 91,173, + 86,199, 62,177, 47,246,190,105,174, 76,134, 61,218,180,125,251,118,183, 34, 88,238,246, 65,162,148,226,212,169, 83,197, 76,155, +125, 20, 12, 0,156, 58,117,202,209, 63,203, 93, 77,155,205, 6,165, 82, 73,164, 82, 41, 81, 40, 20, 97,118,115,197,243,188,227, +120, 59,247,201,115,117,162,156, 62,125,186, 67,121,235,207,156, 57,243, 88, 78,199, 32, 66,132,217, 98,129, 94,103, 66,126,129, + 30,211, 63,249,177,112,197,116, 28, 5,112,180,245,168,113,120,173, 91,151,142, 0, 42, 85,208, 16,192,126, 1,251,237,183,223, + 32,145, 72,176,113,227, 70,120,122,122,162,119,239,222,240,244,244,196,228,201,147, 49,112,224, 64,183, 35, 88, 69,101, 41,151, + 16,210,250,205, 55,223,252,251,139, 47,190,168, 82,185,114,101,152, 76, 38,152,205,102,152, 76, 38, 92,187,118, 13,171, 86,173, + 74,208,233,116,173, 41,165,185,174,244,182, 37,125,127,237,247,195,239, 36,199, 62,251,172,254, 98,234, 86,220,185,147, 9,171, + 53, 9,162,205, 10,179,181,112, 68,178,205,106,133,213,106,131,192,115,158, 11,190,158,184,163,176,195, 63, 49,245,239,223,255, +169,135,120,168,232,149, 43, 87, 50, 43, 85,170,100,175,196, 60, 77, 38, 19, 41,186,129,163, 0,236, 29,220,181, 40,167, 35,186, + 51,199,128,145, 95,126,246, 89,152,189,249,254,147,207, 62, 11,155,240,214, 91, 35, 1,204,187,112,230,204,202,225,195,135,191, +185,102,205,154, 98,191, 25, 62,124, 56, 46,156, 57,179,178,244, 16, 65, 81, 4,203, 96, 64,122,102, 54, 94, 30,245,190, 35,116, + 0, 80, 56, 59, 84, 90,248, 89, 1, 0, 25,169,215, 48,118,220,219,242,178,110,168,234,212,169, 3, 81, 20,139, 69, 67,238,161, +239,149,115,100,200,177,157,167,167, 39,164, 82, 41,174, 29,250, 29,111,141, 26, 0,216,204,160, 22, 61, 96,214, 1,230, 2,136, + 38, 29,136, 84, 9, 88,244, 46,117,237,233,244,244,244, 44,236, 19, 42,240,144, 73,255,111,254,156, 35, 87,238, 92,184, 75,230, +253,230,205,155,120,237,181,215, 96, 54,155,209,183,111, 95,152, 76, 38, 24, 12, 6,232,245,122, 68, 69, 69, 65,167,211,185,157, +119,251,181, 83, 42,149, 98,252,248,241,104,210,164, 9, 62,250,232, 35, 76,154, 52, 9, 81, 81, 81, 24, 61,122, 52, 86,173, 90, +133,152,152,152,114,117,237,154,133, 77,238,133,154,246,252,150,108,202,179,183, 20,184,123,140, 74,211,180,207, 46, 82,242,184, +191,241,124,167, 10,107,126,250,233,167, 72, 79, 79,191, 43,114,101,127, 31, 26, 26,138,249,243,231, 63,145, 17, 44,199,112, 82, +251, 5,212,126, 33,119,174,220, 85, 42, 21,214,173, 91, 87,172,115, 93,121, 97,105,142,227, 32,138, 34,182, 84, 42,252,125,143, +162,200,149,243,231, 94,189,122, 33, 50, 50,178, 88,244, 74,169, 84,150, 91,104, 68, 81,196,173, 91,183,112,238,220, 57,180,104, +209, 2,185,185,185,144,112, 28,222, 62,115, 6,117,158,127, 30, 38,169, 20,162, 40, 66, 38,147, 97,228,200,145,110,117, 84,255, +251,239,191,125,156, 63,215,169, 83, 39, 49, 54, 54, 54,244,216,177, 99,142,142,239, 69,205,103, 14,163,225,230, 73,141,126,253, +250, 21,139, 90, 57,155, 43,231,101,235,214,173,110, 53, 17, 82, 74, 17, 27, 27,235,136, 94,121,120,120, 96,195,134, 13,142,245, +246,240,115, 96, 96,160, 91,154,246, 59,248,162,142,237, 48, 26,141, 98,126,126, 62, 23, 23, 23, 7,153, 76,230, 56, 38, 74,165, + 18, 10,133,226,190, 6, 39, 60,246,216, 68,152, 44, 22,232,245,122, 20, 20, 20,206, 16,114,237,108,241,126,204,102,227,189, 15, + 78,179, 71,169,242,243,243,177,107,215, 46,172, 95,191, 30,141, 27, 55,190,171,147,187,243,121,235, 70, 25, 77, 39,132,180,153, + 56,113,226,145,143, 63,254, 56,196,215,215, 23,102,179, 25,183,111,223,198, 15, 63,252,144,172,211,233,218, 80, 74,211, 43,224, +218, 96,177, 88, 97,208, 25,145,155,151,143,105, 51,151,149, 89, 69, 0, 64, 86,218, 37, 12, 30, 60, 68,246, 48, 15, 19,165, 52, + 9,192, 75, 78,231,213, 10, 0,246,112,124, 30,165,116, 88, 69,244, 36, 64,251,103,251,247,239, 56,126,252,120,199,119,227,199, +143,199,145, 35, 71, 58, 74,214,174, 61,103, 1,246,240,107,215,198,124,253,245,215,142,109,190,254,250,107,172, 91,187,118,183, + 13,216, 83, 86,221, 97,111, 34, 44, 40,208,195,211, 59, 24, 73,241,123, 93,166, 69,202, 27, 64, 69,209,229,141, 95,201,126, 55, + 37,235,167, 10,148, 31, 90,175, 94, 61,123,235, 2,164, 82, 41,234,118,236,143,217,115, 23, 67,206, 81, 60,219,185, 46, 42, 41, +108,128,210, 23,210,182,147, 65,188,195,139,110, 58, 26,186,117,131,186,239,253, 9,184,161, 86,224,149,237, 7, 32,149, 74,241, +219,192, 30,144,203,165,120,225,247,125,144, 74,165,248,125,196, 51,144,202,164,232,182,240, 87,183,110, 84,236,121,191,118,237, + 26, 14, 29, 58,132,232,232,104, 92,189,122, 21,206,253,108, 41,165,110,155,182,186,117,235, 58, 2, 18, 18,137, 4,119,238,220, + 65,207,158, 61, 29, 55,248,123,247,238,197,196,137, 19, 49, 98,196, 8,180,111,223,190,212,126,177, 37, 53, 99, 98, 98, 28,129, +131,146, 38,216,185,217,182, 34,199,168, 52, 77, 71,249,189,199,227,238,172,249,241,199, 31,151,106,214, 43,162,249, 88, 27, 44, +251, 9, 82, 86,187,179, 90,173,198,235,175,191,142,169, 83,167,194,223,223,223,101,223, 25,187,115, 45,143,205,155, 55,223,245, +221,198,141, 27, 93, 53, 17, 94,244,242,242,106,210,161, 67, 7,228,230,230, 34, 33, 33, 1,106,181, 26,117,102,207,198,153,215, + 94, 67,131,133, 11,193,117,236, 8, 66, 8,100, 50, 25,206,156, 57, 3,165, 82,121,177,162, 17, 3, 15, 15, 15,248,248,248, 56, +218,212,237, 70,203,201, 96, 81,119,204,208,150, 45, 91, 74, 29,161,115, 47,125,176,236, 21,239,145, 35, 71,138,245,191,114,110, +230, 56,114,228,136, 35,130, 85,180, 61,113,117,156,138,238,234,168, 93, 79,165, 82,193,215,215, 23,114,185,220, 97,172,236,230, +202, 29,115,233,106, 34,209,136,136,136, 98, 19,145, 74, 36,146, 98, 19,145,254,215,155, 8,245,122, 3, 10,242,245, 15,178, 73, +171,208,156, 21, 13, 56, 89,183,110, 29,154, 55,111,126,151,185,178, 71, 29,239,193,112, 36, 18, 66,218,207,157, 59,247,232, 87, + 95,125,229, 83, 80, 80,128, 31,127,252, 49,183,160,160,160, 61,165, 52,177, 66, 90, 0, 44,102, 51,116, 6, 35,180, 5,133,251, +224,250,185,223, 92,154,178,255, 50,181,235,213, 27,250,227,143, 63,222,245,253,143, 63,254,136,171, 87,175, 14,197,153, 51,123, +154, 1,139,222,153, 60,185,122,227,198,141,195, 0,224,157,201,147, 19,155, 1,139,202, 59,207,205, 69, 77,132, 5, 5,133, 81, + 15,131, 54,227,193,148,211, 34,147, 81, 86,159,171,123,185, 32,218,235, 91,169, 84,138,174, 3, 95, 70,242,141, 75,136, 86,103, +160,146,183, 10, 52, 47, 9,210,142, 31,226, 76,150, 10,115, 22,110,171, 80, 58,213,114, 25, 20, 10,185, 83,159, 43, 5,100, 10, +185, 35,157, 10,165, 18, 18,185,172,194,121,191,124,249, 50,148, 74, 37,108, 54,219, 93,215,155,138,230,223,217,184,124,253,245, +215,152, 56,113, 34,150, 45, 91,134, 51,103,206,160, 65,131, 6,232,220,185, 51,210,210,210,112,250,244,105, 24,141, 70,183,211, +233,220, 47,238,252,249,243,248,243,207, 63, 17, 31, 31,143,132,132,132,123, 62,238,206,154, 37, 13,214,186,157, 39,209,175, 75, +163,123,210,156, 54,109, 26,210,210,210,138, 69,174,156,163,155, 79,116, 4,203,222,196,228,116, 81,190, 43, 74,165, 86,171, 29, + 29, 34, 61, 61, 61, 93, 70,134,236, 6, 43,246, 70,126,177,190, 92,246, 72, 22, 0,140, 24, 49,226,174, 8, 86,201,201,233, 74, + 98, 52, 26,247,238,221,187,183, 97,175, 94,189,248,139, 23, 47, 58,154, 34, 77, 45, 91,162,193,194,133, 56, 59,126, 60,218,221, +188, 9,131,217, 12,133, 66,129,109,219,182,153,117, 58,221,222, 10, 86, 22,196,217, 96,169,213,106,120,121,121, 57, 12, 70, 69, + 92,121, 89,119,136,206,159, 43, 18, 17,178,247, 57,179, 47,246, 11, 43, 33, 4,122,189,222,209, 89,179, 34, 81, 17,155,205,230, + 56,241,236, 29, 20,189,189,189, 29,149,134,125, 52,153,187,205,163,174, 38, 18, 85, 40, 20,158,251,247,239,175,102,159, 70, 34, + 35, 35, 3, 3, 7, 14,188,242, 95, 63,185, 40, 40,204, 86, 27, 10,244, 6, 20,232,117, 15, 92,127,229,202,149,184,118,237, 26, +204,102, 51, 62,249,228,147,187,140, 85, 69, 58,185,151, 82,174,174, 53,106,212, 72,236,222,189, 59,142, 28, 57, 2,185, 92,110, +161,148, 86,120,254, 42, 42,138, 48, 91,173, 48,232,245, 40,208,106,159,136,187,214,243,103,206,252,166, 86,171, 7, 2,208,228, +228,228,240, 94, 94, 94, 80,169, 84,208,235,245,185,124,209, 72,193,195,128,201,219, 98,249,108,192,128, 1, 95, 1,128,194, 98, +249,236, 48, 96, 42,239, 60,183, 88,139,204,250, 3,220,143,246,122,171,172, 58,233, 94,162,211,246, 11,169, 84, 42,133,192,243, +248,113,214, 4, 68,171,211,209, 40,210, 3,198,212,171,144,121,248,131,120, 71, 96,206,194,109,184,112, 51,171, 66,233, 28,180, +124, 45, 42, 87,174,140, 77,207,247,134, 66,174,192,160,117,187, 32,145, 72,176,125,244, 64, 72,101, 50,116,254,238,231,123,202, +187, 86,171, 45, 51, 82,229,110, 4,171,100,222, 37, 18, 9, 26, 54,108,136, 26, 53,106, 96,207,158, 61,104,212,168, 17,174, 94, +189,138,171, 87,175,226,230,205,155, 56,115,230, 12,178,179,179, 43,124,140, 86,175, 94,141,172,172, 44,200,100, 50,100,100,100, + 32, 62, 62,222,173,169, 88, 92, 29,119, 59,181,158,158, 6, 0, 8,169,228, 85, 33,131,229,172,249,249,231,159,223,101,218,159, +196,150, 14,161, 12, 19,160,175, 85,171,150,210,185,253,148,227, 56,120,120,120,144,137, 19, 39,242, 69,239,225,229,229,133, 74, +149, 42,185,213,236, 38,145, 72,244,205,154, 53, 83,218, 11,160,221, 56,169,213,106,126,210,164, 73,100,233,210,165,101, 70,181, + 92,244,193,250,106,216,176, 97, 47, 37, 38, 38,250, 4, 4, 4, 32, 37, 37, 5, 50,153,172,240,164,232,208, 1,177, 55,110,192, + 92,216,167, 8,151, 47, 95,198,226,197,139,181, 70,163,241,171,138,238, 40,141, 70, 3, 63, 63, 63, 71,211,160, 61,130,227,100, + 22,233,189, 84,100, 37,151,138, 68, 28,236,154,206, 6,203,126, 97, 29, 53,106, 84, 49,179,229,118,129, 16, 4,107,187,118,237, + 4,123, 58, 44, 22, 11,234,213,171,135,180,180, 52, 72, 36, 18,200,100,178, 98,145, 59,119, 12,150,171,137, 68, 5, 65,128,201, +100, 66,219,182,109, 65, 8,193,183,223,126,123, 79,145,151, 71,206, 96, 89, 69,162,209,248, 33, 36,164, 38, 42, 5, 24, 32,138, + 15,238,233, 47, 86,171, 21,163, 71,143, 46, 22,177,178,143, 84,180, 55,241, 23, 54, 43, 89,238,121,210, 86,251,121,125, 63,243, +191,137, 20,142,166, 45,173,214,240,159, 59,134,225,225,225,158, 69, 77,134, 37,249,133, 82,250,103,169,199,166,104, 74, 6, 30, +152,113,251,246,237,186, 94, 94, 94,232,218,181, 43, 54,111,216,176,233, 23,192, 17,178,201, 1, 18,125,238,220, 25, 95,244, 62, +201, 85, 80,175,176, 15,150, 17, 90,173,254,129,231,243,126,111,244, 74,187,161,230,121, 30,235, 22,126,138,104, 85, 42, 26, 86, +145,227,208,145,147,104, 94, 25,128,233,222, 91,128,237,125,155, 84, 42, 37,164, 50,185, 35,157, 10,149, 10, 18,169,236,158,243, +238, 92,159,150,172, 47,239, 37,130,231,188, 63, 95,126,249,101, 76,158, 60, 25, 93,187,118,197,213,171, 87,177,111,223, 62, 92, +189,122, 21,227,198,141, 67, 76, 76, 12,186,117,235, 86, 33,205,181,107,215, 34, 55, 55, 23, 28,199, 33, 51, 51, 19,122,189, 30, + 83,167, 78,189,239,227,110, 39,126,231, 39, 0,128,223,118,156,184,103,205,247,222,123, 15,119,238,220, 41, 22,185,122, 82,162, + 86, 46, 13,214,229,203,151, 75,109,239,139,137,137, 73,237,210,165, 75, 64, 74, 74, 10, 52, 26,141, 75,115, 69, 8,233,108,159, + 43,227,220,185,115,165,106, 86,173, 90,213,220,165, 75, 23, 73,112,112,112,177,209,131,106,181,186,216,201, 90,154,102, 81,229, +159, 79, 8,121,181,117,235,214, 63,109,221,186, 85, 85,163, 70, 13,228,229,229,129, 82,138,101,203,150, 97,204,152, 49, 80, 40, + 20,184,124,249, 50,122,247,238,173,211,233,116,175, 58,207,129, 85,154,102,105, 70,134,227, 56,199,252, 48,165,152,171,114,243, +238,204,220,185,115, 29,115, 65,149,199,162, 69,139,128, 18, 83, 42,148,166, 73, 41,197,151, 95,126,249,192, 52, 47, 93,186,180, +204,121,125,100,100,228,183, 79, 61,245,148,144,144,144, 80,204, 84, 57, 47,165, 84, 72,197, 52, 93, 77, 36,202,243, 60, 2, 3, + 3,241,241,199, 31,195,207,207, 15, 65, 65, 65,119, 69, 94, 92, 29,163,123,188,123,255, 71, 53, 41, 71,227,230,126, 53,173,205, +162,239,215, 75,228, 50,224,240,190,223,144,151,125,167,120, 4,214,252,255, 33,209,178, 70,157, 96, 58,177,203,173,116, 26,141, + 70,124,254,249,231,152, 54,109,218, 93,115,224,148,113,220,239, 43,239,238,152,172,210, 52, 69, 81, 36, 42,181, 15, 20,234, 16, +212,137,241,129,232,198, 92,157,226,191,127,220,117, 9, 9, 9, 94,149, 43, 87,198,149, 43, 87, 8,254,223, 31,235,255,199, 74, + 38, 27, 4,224,207,242, 52, 9,112,102,213,170, 85,117,235,213,171,135,111,191,253, 22, 0, 94,120,113,251,246,129,207,233,245, + 6,160,112,242,209, 34, 51,230, 50,157, 54, 74,137, 82,229, 13,133, 58, 24,117,234,122, 67, 20,221,159,243,148,150,147,119,251, +197,175,100,244,170,130, 19, 73,223,165,105,191, 65,186,126,248, 15,244,236, 17,134,131, 71,207, 98, 87,130, 10, 97,178, 20,132, +232,210, 33,166, 95,196,155,253, 27, 97,206,218,194,139,248,217, 56,215,154,132, 16, 28,124,251, 21,168, 85, 10, 60,187,234, 79, + 72,165, 82,252,245,230,243,144, 74,229,104,247, 85, 97,147,236,153,207,166, 64, 34,151, 35,250,141,105,110,165,179,100, 75,141, +189, 43,135,243, 54,229, 69,176,202,203,123,126,126, 62,114,114,114,240,211, 79, 63, 97,248,240,225, 72, 75, 75,195,205,155, 55, +113,229,202, 21,252,242,203, 47,142,209,233, 21, 73,167,221,188,188,245,214, 91,160,148,162, 78,157, 58,152, 54,109, 26, 90,182, +108, 89,225, 99, 84,242,184,151,196, 85,244,170, 60,205, 57,115,230,220, 83, 89,122, 34, 12, 86,121,119, 37, 28,199,193,223,223, +223, 81, 56,156, 11,222,189,220,233,242, 60, 15,171,213,234,232, 56,109, 95, 0,160, 87,175, 94,216,188,121,179, 59, 35, 35,182, + 18, 66,134,214,174, 93,251,135,233,211,167,107,218,181,107, 39,132,132,132,160,105,211,166,184,124,249, 50,254,248,227, 15,203, +252,249,243,181, 58,157,110, 4,165,116,199,189,212,201,246, 71,207, 56, 47, 21,193,102,179, 37,196,199,199, 7,127,249,229,151, + 60,199,113,152, 51,103,142,243, 67,174,239, 42,132, 71,142, 28,177,186,106,146,177, 90,173, 9,241,241,241,193,179,103,207,230, + 9, 33, 14, 77,231,201, 95,157,247,157, 59,154,165,153, 75,251,128,135,210,150,210,210, 94,218, 49, 46,111, 34, 81, 65, 16,112, +249,242,101, 76,157, 58, 21,132, 16,252,246,219,111,143,197,201,117,240, 88,242,210, 86, 77, 66,124, 6,245,111, 95,143,128,131, +201,124,247, 0, 52, 62, 51,199, 97,174,158,153,189, 26,235,223, 30,232,142,217,185,118,236,216, 49,223,207, 63,255, 92,224,121, + 30, 95,127,253,117,177,201,126, 75, 30,247,163, 71,143, 90,239,169,121,175,232,124, 54,155,205,208,235,239, 45,106, 66, 57,114, +104,206,231, 31,118, 89,244,227,102, 9, 33, 38, 28,222,251, 27,114,115, 74, 31,154, 46,147, 8, 88,177,106,147, 85,224,185,132, +127,249,208, 45,234,220,185,243,212,157, 59,119, 10,149, 43, 87,190,103,145, 54,192,230,121,243,230, 61,245,252,243,207,251,214, +174, 93, 27,235,215,175, 7, 0, 89,209,130,162,153,221,183,186,103,146,196,141, 95,127,241,225, 11,139,127,220, 44,227,136, 25, +135,247,253,134,220, 18,102,189, 36, 82,169, 4, 43, 87,109, 52, 11, 2,127,201, 85,189,238, 28,189,186,223, 11,162,115,217,107, +212,243, 37,124,251,199, 98, 4,212,235,142, 1,189, 98,113,224,219,231, 49, 32,218, 0,243,154, 33,168,219,127, 57,150,189, 83, + 24,189,105,184,246, 93,183,174, 63, 30, 30,106, 71, 7,114,142,227, 32, 87,168, 32,145,255,191,255,144, 76,165,130, 80,129, 72, +150, 61,239,229, 69,170, 42, 26,193,226, 56, 14,145,145,145,168, 90,181, 42, 90,183,110,141, 70,141, 26,161, 67,135, 14, 56,125, +250, 52, 78,159, 62,141,113,227,198,149,105,174,220, 57, 70, 93,186,116,193,165, 75,151,238,187,144,151, 60,238, 15, 2,119,202, +210,107,175,189, 6, 0, 79,110, 31, 44, 87, 59,207, 94, 32,233, 3,232,140, 74, 8,129,201,100,114, 52,189, 57,207,171,100,239, +244,238,230,124, 80, 59, 8, 33, 49, 31,124,240,193,120,133, 66,209, 65,167,211,213, 4, 0,181, 90,125,217,104, 52,254,165,215, +235,191,166,148,230,220, 79, 90,157,167,101, 40, 37, 31,229,238,140,244,244,244,110,195,134, 13,219,193,113, 92,100,121, 15,231, +117,186,243,191,153,154,154,250,148, 43,205,161, 67,135,150,170, 89,154,174, 59,154,165, 29,115, 81, 20,203, 52, 87,238, 84, 64, +174, 38, 18,149, 72, 36, 80,171,213,216,176, 97, 3,252,253,253, 31,171, 19,236,208,241,228,207,203, 91,223,222, 95,190, 23, 64, +165,103,102,175,190,189, 39,195, 20,222,222, 95,118,107,253,219, 3,171,148,247,155,236,236,236,174,111,189,245,214,159,130, 32, + 68,150,119,188,157,140,120,124,122,122,122,133,167, 61,160,148,226,210,165, 75,226,203, 47,191,156,145,158,158,254,220,189,228, +127,236,248, 47,190,154,247,229,155,126,253,251,180,105, 10, 66, 96, 50,149,209,169,151,128, 82, 74,169,192,115, 9,175,191, 53, +251,149,127,243,152, 81, 74, 79, 17, 66, 62,170, 86,173,218, 72, 0,101, 93, 9,127,113,165,179, 7, 48,203,140,198, 47,155, 52, +105, 50,233,221,119,223,245,238,213,171, 23, 42, 87,174, 92,230,124,129,229,113,224,104,226,200,150, 77,130,195,250,245,110,211, +141, 35,132, 26, 77, 70, 23,245,106,209,254, 20,248, 75,123,143, 36,212,119, 21,157,231, 56,174,194, 93, 20,220,161, 83,255,225, +232,212,127,184,163, 60,237, 92,211, 30,113,201, 59,208,152, 75,132,113,113, 27, 16, 79,123, 81,231, 93, 94, 39, 56,142, 67,239, +101, 27,139,165,179,245,103,197,163,179, 53,199,124, 80,161,107,143,243,224,171, 7,213, 7,139,231,121,100,100,100,224,242,229, +203, 72, 77, 77,133, 78,167,195,133, 11, 23, 96, 54,155,145,157,157, 13,251, 72,195,123, 73,231,131, 58, 70,255,166,230,147,212, + 76, 88, 33,131,101,179,217, 18, 93, 61,245,220,106,181, 86,104,148,145, 32, 8,134, 54,109,218,144,210, 70, 27,216,223, 43,149, + 74,189,155, 21, 99, 14,128,169, 0,166, 22, 61,111, 10, 89, 89, 89,247,237, 2,109, 54, 91,114,179,102,205,248,242, 12,145,205, +102, 75,117, 97,134,180, 0, 90, 62,200,131,247, 79,104,150,114,124,180,237,218,181,187,107, 30, 19,231,227,163, 80, 40,202,237, +117,235,106, 34, 81,157, 78,151, 50,108,216, 48,155,115,179,160,243, 68,164,143, 53,132,222,234, 49,232,165,240, 61, 25,166,112, + 0,176,155, 44, 80,122,171,172,159, 36, 39, 39,235, 1,180,251,167,147,118,227,198, 13, 83,243,230,205, 87,230,231,231,191, 70, + 41,189,231, 94,250,227, 38,204,121,247,191,118, 88, 40,165,167, 0,140,186, 95, 29, 19,112,177,142,193,240,218,180, 15, 62,120, +246,195, 15, 62,168, 33, 2,126, 64,225, 28, 85, 60,176,186, 34, 90,135,143,167, 60,240,185,193,108, 54, 91, 98,171, 86,173, 42, + 20,169,113, 85,199, 91,173,214,114,175, 19,171, 80, 25, 56, 94, 49,205,127, 34,157,206,154, 13, 26, 52, 64,195,134, 13, 29,175, +118, 74,126,239,142,102,227,198,141, 81,167, 78,157, 50,103,104, 47,217,231,234,223,206,187, 93,211,110,251, 27, 54,220,254,192, + 52,239, 55,157, 79,148,193,178, 63, 99,240, 65,114,254,252,249,127,228,217, 40,148, 62,184,177,222,231,207,159,111,138, 39,148, + 75,151, 46,249,221,175,134,171,137, 68,207,156, 57,211,225, 73,221,191,123,210, 77, 47,222,245, 93,145,217,250,183,209,106,181, + 85, 40,165,247,212, 51,191,127,255,254,182, 39,245,152,130,210, 98, 19, 79,157, 47,156,160,244,167, 71, 49,169,231,206,157,123, +224,117,250, 63,113,157,248, 39,210,201,242,254,232,107,254,215, 97, 51, 68, 50, 24,140,178,110, 82,108,108, 47, 48, 24, 12,198, +189, 65, 0,116, 46,163,114,117,123,228, 14, 33,164,243, 61, 84,222, 59,153, 38,211,100,154, 76,147,105, 50, 77,166,249,100,105, +186,210,126,208, 35,135,255,205,187,212,127,108, 1,208,153,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,243, 73, 91, 88, 19, + 33,131,193, 96, 48, 24, 12,198, 3,134, 25, 44, 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, + 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,131,113,239,144, 7, 56, 31, 39,131,193, 96, 48, 24, 12, 6, 3, 44,130, +197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6, +131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,131, 25, 44, 6,131,193, 96, 48, 24, 12, +198,163, 96,176, 8, 33,157,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,153,193, 98, 48, 24, 12, 6,131,193, 96, 48,131, +197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6, +131,193, 96, 48,254, 37, 8,128, 82, 71, 2, 80, 74,119,186, 45,114, 15,163, 9, 92,233, 51, 77,166,201, 52,153, 38,211,100,154, + 76,243,241,211,116,165, 93, 17,255,241, 72, 67, 41,253,199, 22, 0,157,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,159, +180,133, 53, 17, 50, 92,221, 97, 8,132, 16,225, 94,215, 63, 44, 77, 6,131,193, 96, 48, 30, 37,216, 69,140, 81,158, 17,106, 9, +160,103,209,251,223, 41,165,135, 43,178,254, 97,105, 62, 44, 26, 55,110,172, 84, 40, 20, 93,119,239,222, 45,187,112,225, 2,254, +254,251,111,186,114,229, 74,179,193, 96,216, 30, 23, 23,167,103, 37,230,191, 79,163, 70,141,186, 1,152, 82,244,241,211, 19, 39, + 78,108,187,207,115,136, 84,171, 86,109,156, 76, 38,235, 33,149, 74, 67,172, 86, 43, 49, 26,141,201,122,189,126, 71, 82, 82,210, +108, 74,169,120, 15,154, 77,253,253,253, 71,197,196,196,212,184,113,227, 70,194,237,219,183, 87, 0,216, 6,160, 91,149, 42, 85, +134, 69, 69, 69, 85, 62,119,238,220,149,140,140,140,133,148,210,191,255,173,116, 50, 24,204, 96,185,119,242,113, 62, 62, 62, 93, +148, 74,229, 27, 5, 5, 5, 13, 61, 61, 61,207, 91,173,214,121, 41, 41, 41,191,179, 19,239,177, 53, 87, 2,128,158,148, 82, 9, + 0,240, 60,223,167,101,203,150,225,132, 16,145, 16, 66, 41,165,132,227,184,134, 54,155,141, 43,218,190, 39, 33,228,111, 74,169, +181, 34,154,205,155, 55,175, 44, 8, 2,165,148, 18, 74, 41,199,113, 92,253,138,104, 62, 40, 98, 98, 98,102, 81, 74, 67,202,219, + 70,173, 86, 55,217,189,123,119,173,141, 27, 55,218, 86,172, 88,145, 51,104,208, 32,205,240,225,195,133, 31,127,252,241, 59, 0, +111,148,220,190, 78,157, 58, 95,113, 28,231,239,206,255,139,162,152,113,254,252,249,183, 88,201,251,215,153,242,242,103,123,219, + 82, 10,124, 63,165, 29, 87,100, 92,238,153,134, 13, 27,254,212,183,111,223, 65, 53,107,214, 20, 68, 81,132,197, 98,129,201,100, +170,117,226,196,137,246,219,183,111,111, 2,224,185, 10,158,151, 61,167, 76,153,178,228,163,143, 62,170, 36,145, 72,136,197, 98, +105,241,235,175,191,118, 31, 53,106,212,169,133, 11, 23, 54, 24, 48, 96,128,135,253,251, 15, 63,252,240, 41, 66,200,120, 74,233, + 47, 15, 59,157, 12, 6,195,133,193,242,240,240,168, 94,169, 82,165,183,253,252,252,158,106,210,164, 73,238,171,175,190,122,253, +218,181,107,103, 35, 35, 35,117, 63,254,248,227, 76,139,197, 50,191,102,205,154,219,243,242,242,102,223,185,115,231, 66, 5, 43, +138,234, 0, 94, 5,240, 20,128, 48, 0,201, 0,254, 4,176,132, 82,122,233, 94, 50, 19, 26, 26, 90, 79,173, 86, 79, 34,132,180, +208,106,181, 97,106,181, 58,153, 82,122, 52, 63, 63,255,139,148,148,148, 19,247,162, 25, 22, 22, 86, 21,192, 88, 65, 16, 98,109, + 54, 91, 36,207,243,183,108, 54,219,126,155,205,246,109,114,114,242,149,123,209,108, 93,217,163,151,168,241,156,109,225,149,149, + 11, 12, 86,169, 70, 46, 88, 36,162, 33, 65,212,230, 76, 57,122,187,224,183, 71,177,160,200,100, 50,110,197,138, 21, 13,100, 50, + 25, 0,192,100, 50, 33, 38, 38,134,220,143,166, 68, 34,225,102,207,158,221, 72, 16, 4,152,205,102, 49, 63, 63,159, 62,251,236, +179,255, 74,179, 53, 33, 36, 44, 46, 46,206, 75, 42,149,150,186,222,102,179,161,119,239,222,145, 82,169, 20, 11, 22, 44,176,100, +102,102, 54, 92,186,116,233,137,249,243,231,251, 47, 91,182,172,127,105, 6,139,227, 56,255,178, 52,109, 54, 27,204,102, 51,172, + 86, 43, 76, 38, 19, 58,116,232,192,106,163, 71,131,112, 0,216,114,218, 0, 0,190,247, 43,166, 84, 42,163,159,121,230, 25, 33, + 61, 61, 29, 18,137, 4,102,179, 25,119,238,220, 65,181,106,213,248,141, 27, 55,214,172,168, 94,173, 90,181, 70,125,242,201, 39, + 1, 91,182,108, 49,175, 92,185,210,216,185,115,103,233,136, 17, 35, 60,219,182,109, 27, 27, 22, 22,198,253,240,195, 15,198,157, + 59,119,154,135, 14, 29, 42,159, 53,107, 86,192,159,127,254, 57, 8,192, 47, 15, 59,157, 12, 6,163, 28,131,229,225,225,177, 87, +163,209, 84,123,229,149, 87, 46,189,246,218,107,219, 53, 26,141, 13, 0,126,254,249,103,161, 79,159, 62,233,207, 62,251,108,154, + 78,167,227,231,207,159, 95,229,155,111,190,217,225,225,225,145,148,159,159,223,204,141, 11, 25, 1,240, 6,199,113, 99,187,118, +237,186,215, 98,177,164,111,218,180,105,205, 51,207, 60, 19, 75, 41, 85,239,222,189,251, 15, 66,200, 34, 0, 95,186, 27, 29, 35, +132,240, 81, 81, 81,211,194,194,194, 38, 44, 88,176, 64, 30, 21, 21, 5,165, 82,137,252,252,252, 42, 87,174, 92,169,252,198, 27, +111,244,174, 90,181,234, 60, 47, 47,175,247,227,226,226, 44,110,106,146,144,144,144, 55, 61, 61, 61, 63,158, 53,107,150,162,118, +237,218, 68,173, 86, 35, 62, 62,190,238,145, 35, 71, 98,150, 46, 93, 58, 34, 44, 44,108,122, 82, 82,146,219,233,108, 79,136, 96, +168, 90,105,187, 79,173,102,237, 23, 46,249,158,248,171, 85, 16, 8,129,197,108,150,164,234,244, 81, 99, 70,143, 92,211,178, 70, +208,193,124, 73,106,167,243,231,169,249, 95, 50, 26,114, 0,160,148, 26, 9, 33,191,243, 60,223, 71, 38,147,113,125,250,244,193, +206,157, 59,137,193, 96, 16, 0, 64,161, 80, 88,251,244,233, 3,165, 82, 9,147,201, 36, 2,248,189,172, 72, 83,105,154, 18,137, +132,235,208,161,131,238,216,177, 99, 89,118, 77,149, 74,101,233,208,161,131,159, 76, 38, 83, 90,173, 86, 90,158,230, 63,100, 34, +113,237,218,181, 98,223,229,231,231, 35, 61, 61, 29,153,153,153, 48,153, 76,200,201,201,129, 40,138,196,104, 52,166,139,162, 8, +142, 43, 12,182,149,165, 41,149, 74,113,249,242,229, 98,223, 89,173, 86,104,181, 90, 24,141, 70,152,205,102,232,245,122,165, 66, +161,168, 30, 27, 27,155, 8, 96, 99, 65, 65,193,236, 83,167, 78,221, 98,213,211,191,194,237,223, 79, 26,170, 0, 48, 1,136,127, + 0,231,147, 8, 0,251,247,239, 71,106,106, 42, 50, 50, 50,144,158,158,142,176,176, 48,220, 75,244,255,210,165, 75,115, 27, 54, +108, 72, 78,157, 58,181, 25,192,146,213,171, 87, 63,147,149,149,181, 96,226,196,137,190, 95,124,241, 69,214,164, 73,147, 70, 3, + 88,191,122,245,234,225,245,234,213,235,117,230,204,153, 57,255, 70, 58, 25, 12, 70, 57,243, 96, 81, 74, 67,170, 87,175,158,245, +245,215, 95,215,154, 50,101,138, 95, 65, 65, 1, 95, 20, 37, 50, 16, 66,168, 78,167,227, 39, 79,158, 92,233,211, 79, 63,173, 37, +151,203,179,173, 86,107,165, 82, 52, 74, 27,106, 57,214,211,211,179,119,124,124,252,234, 90,181,106,249,126,242,201, 39, 39,149, + 74, 37,157, 59,119,110, 92,213,170, 85,131,111,221,186,181,220,211,211,179, 35,128, 9,101,164,235, 46,205,200,200,200,143,251, +247,239, 63,225,224,193,131,242,250,245,235, 67,163,209,128,231,121,120,123,123,163,121,243,230,100,223,190,125,242, 30, 61,122, +140,203,205,205,253,194, 93,205,144,144,144,119,187,119,239, 62, 51, 46, 46, 78,217,169, 83, 39, 34,147,201,144,157,157, 13,185, + 92,142, 22, 45, 90,144,133,243,191, 83,214,173, 83,251,195,176,176,176,143,220,213, 52, 87,247,223, 49,232,245,201, 29,126,255, +115, 27, 9, 12, 12,196,245, 47, 63,194,254,182, 49,184, 58, 99, 10,130,131,131,177,121,203, 86,210,235,133,215,219,120, 90, 2, +119,187,171,121,191, 56,107, 18, 66, 94, 3,144, 5, 32,139, 16,242, 26,165,244,112, 76, 76, 76,220,133, 11, 23, 16, 27, 27,139, + 53,107,214,212,159, 56,113,226,107, 19, 39, 78,124,109,205,154, 53,245, 99, 99, 99,113,225,194, 5,196,196,196,196, 57,247,149, +114, 71,115,239,222,189,232,216,177, 99,246,154, 53,107,162,166, 78,157, 58,107,234,212,169,179, 86,175, 94, 93,181, 99,199,142, +217,115,230,204, 49,150,167,249, 79,228,221, 57,178,228,188,136,226,255,175, 45, 1, 1, 1,105,191,255,254, 59,122,245,234,197, + 5, 6, 6,166,244,233,211, 71,126,236,216, 49, 10,224,247,138,164,211, 96, 48, 64,175,215, 67,171,213,226,246,237,219,202,249, +243,231,183,153, 48, 97, 66,181, 53,107,214,132,142, 27, 55,110,180,167,167,231,137, 6, 13, 26,132, 63,236,188, 51, 77,128,227, +184, 59, 0,204, 0,180, 28,199,221,186, 31,205,126,253,250,213,141,136,136, 8,252,245,156, 15,178,165,181, 32, 74,189, 33, 74, +189, 97,243,107,138,107,178,167, 16, 26, 26, 26, 24, 30, 30,222,178, 34,154,148,210, 29, 39, 79,158,124,138, 82,186,144, 82,106, +163,148,174,157, 52,105,210,203,132,144,223, 38, 77,154, 52,146, 82,186,182,232,251,165,167, 79,159,238, 69, 41,253,235,223, 72, + 39, 43, 75, 76,147, 81,142,193, 34,132, 88, 62,255,252,243, 35,223,127,255,253,206,148,148,148,224,168,168,168,167,159,121,230, +153,240,220,220, 92,242,204, 51,207, 68, 6, 7, 7,247,220,187,119,111, 80,255,254,253,119,247,239,223,255, 48, 33,196,101,164, +129, 16, 82,149,231,249,241,167, 78,157, 58, 80,165, 74, 21,115,114,114,178, 71,195,134, 13,243, 1,160, 70,141, 26,186,204,204, + 76,165,151,151, 23,182,110,221,122,140, 16,242, 42, 33,164,150, 43,205,224,224,224, 70,126,126,126,111,124,252,241,199,114,158, +231, 75,221, 70, 46,151,227,227,143, 63,150,123,122,122,190, 18, 26, 26,218,194,149,102, 80, 80, 80,109, 15, 15,143,247,190,249, +230, 27,133,209,104,132,201,100, 66, 96, 96, 32, 52, 26, 13, 82,146,147,145,124, 51, 30,169,241, 55, 48,238,229,151,148,106,165, +114,124, 72, 72, 72, 3, 87,154,177, 17, 30,125,212, 97,117,218,143, 25,251, 6,206,141, 27,142,157,161, 50, 4,141,157,140,250, +123,206, 34,108,250,108,252, 21,229,137,184,231,186,224,205, 55,223,130, 52, 32,170, 85,171,202,154,129,255, 66,228,234, 11, 74, +169,146, 82,170, 36,132,204,109,213,170,213, 74,165, 82,249,218, 39,159,124,210,109,251,246,237,221,247,237,219,215,222,106,181, + 74,172, 86,171,100,255,254,253,177, 6,131, 65,144,203,229, 16, 4,129,186,171,217,178,101,203,159,148, 74,229,232, 5, 11, 22, +116,251,235,175,191,134, 29, 63,126,252,117,155,205, 38,179,217,108,178,227,199,143,143,212,235,245, 18, 74,169,173, 44,205,135, +141, 68, 34,129, 84, 42,133, 82,169, 68,195,134, 13,175,175, 90,181,202, 18, 28, 28, 44, 89,178,100,137, 79, 96, 96,160,122,217, +178,101, 57, 57, 57, 57,159,185,171,103, 54,155, 97, 52, 26,161,215,235, 97, 48, 24,112,232,208,161,200, 17, 35, 70, 8, 38,147, +201, 54,108,216,176, 44,139,197, 98, 28, 51,102,140,167, 70,163,121,155, 85, 79, 15,159,162,136,105, 1, 0, 45,165,212,104,255, + 62, 34, 34, 66, 30, 26, 26, 90, 47, 34, 34, 66,238,174, 86, 65, 65,193,162,175,190,250, 42,140,147,123,227,128,169, 7,126, 17, +167, 99,187,215,183, 72, 11,159,128,128,176,106,232,222,189,123, 0, 33,228,219, 7,144,230,141,148,210,254,148,210,117,247,242, +251,127, 58,157, 77,155, 54,141,109,210,164,201,241,198,141, 27,167, 52,105,210,228,120,211,166, 77, 99,239, 55,207,207,197,144, +206,195, 26,240,137,253,235, 16, 58,172, 1,159,248, 92, 76,197,231,106, 98, 48,254,105, 92,118,114,175, 84,169,146,233,221,119, +223, 61,101, 48, 24,206,254,244,211, 79,213,134, 14, 29,218, 48, 60, 60,252,242,179,207, 62,251,135, 70,163,177,218,251,228,184, +201, 75, 61,122,244,216,226,239,239,143,220,220, 92,193, 98,177,240, 90,173,150, 7, 0, 81, 20, 97, 48, 24,248, 27, 55,110, 8, + 70,163,145,182,104,209, 98,211,225,195,135, 95, 5, 48,190, 60, 65,181, 90,253,218,226,197,139, 21,101,153, 43,155,205,134,252, +252,124, 88,173, 86, 76,159, 62, 93, 49, 97,194,132, 55, 0, 28,113,113, 81, 29, 59,119,238, 92,185,213,106, 5,199,113,160,148, +226,196,137, 19,200, 76, 75,131, 33, 63, 15,198,188, 92,152,243,114,193,107,243, 49,236,169,110,138,133,235, 54,188, 5, 96, 88, +121,154, 38,185,230,211,159, 22, 47,133,205,102, 67,202,198, 95, 75,221, 38,235,224, 30,216,172, 22,124,242,217, 23,228,205,151, + 6,124, 2, 96,245,191, 85, 48,228,114,185,176, 98,197,138,193, 50,153, 12,148, 82, 98, 50,153,176,125,251,246,251,214, 92,190, +124,249, 48,187,166,217,108,166,117,235,214,189,171,121,205,104, 52,210, 71,229, 4,145,201,100, 80, 40, 20, 48,155,205,168, 82, +165,138,190,119,239,222,135,230,206,157, 91,133,231,121,181, 32, 8, 91,115,115,115,103,157, 59,119,238,134,187,122, 69,157,135, + 97, 50,153,160,215,235,113,251,246,237,160,208,208, 80,242,222,123,239,217,116, 58, 93,212,210,165, 75,175,253,250,235,175,170, +111,190,249,230, 89, 0, 99, 89, 21,245,240,168, 86,173,154,204,211,211,211,171,138,159,160,149,240, 40, 72,163,212, 35, 34, 34, + 34,220, 98,177, 60, 75, 8,105, 81,163, 70, 13,159,171, 87,175,102,135,134,134, 30,225, 56,238,151,132,132,132, 20, 23,198,135, + 88,173, 86,140,108,150,131,215, 90,242,176, 88,114,145,155,155,139, 91,183,110,225,252,249,243, 56,122,244,220, 61,165, 51, 50, + 50,242, 37,133, 66,209, 85, 38,147, 69,216,108, 54, 78,167,211,221, 50, 26,141, 59,147,147,147, 23,209,162, 9,138, 42,104,208, +254,145,116, 58,233,207,126,230,153,103, 66,188,188,188,112,242,228,201,144,211,167, 79,207, 6,208,228,190,206, 75,129,251, 97, +198,151,223,134, 6,251,123,227,220,193,205,161,115,150,252,250, 3, 10,251,242, 50, 24,255, 29,131,101, 71,161, 80,216, 70,141, + 26,117,121,211,166, 77, 17, 77,154, 52,185, 88, 86,103, 96, 23,180,142,142,142,190,117,232,208, 33,248,250,250,154, 45, 22, 11, +111, 48, 24, 56,169, 84, 74,179,178,178,136, 94,175,231, 78,159, 62,173, 72, 76, 76,148,250,248,248, 72, 0, 52,114, 35,194,208, + 50, 50, 50,178,116, 83, 99, 50,161,160,160, 0,249,249,249, 48, 26,141, 8, 12, 12, 36, 28,199, 53,119, 25,214,227,184, 54, 53, +107,214, 36,217,217,217, 8, 9, 9,193,193,131, 7, 81,144,147, 3, 67,126, 30, 76,121,185, 48,231,230,192,146,155,131,156,180, +100, 68, 4,135,145,162,169, 5,202,197,202, 43,195, 3, 52,106, 92,157, 49, 25, 77, 79,220, 2,145, 72,113,172,110, 48,168,165, +176,171, 85,179, 51,201, 32, 82, 25, 46,142,123, 17,129, 67, 95,129,133,147,135, 62,228, 59,119, 35, 33,100, 34,199,113,115,229, +114,185, 48,122,244,104,164,164,164, 20, 51, 63,163, 71,143,118,244,185,106,219,182,237,126,133, 66, 97, 77, 79, 79,135,209,104, +148,184,163, 25, 17, 17,113,235,253,247,223, 63,102, 50,153,194, 66, 66, 66,188,141, 70,163,190,102,205,154, 33, 74,165, 50,208, +100, 50,217,154, 52,105,178, 72,169, 84, 90, 10, 10, 10,168,213,106, 37,143,194, 9, 66, 8, 1, 33, 4, 86,171, 21, 86,171, 21, +222,222,222,218,204,204,204,163,215,175, 95, 31,124, 47,122, 22,139, 5, 22,139,197, 17,197, 18, 69, 17,103,206,156,129, 66,161, +144,136,162,120,206,102,179,169, 36, 18, 9,120,158,103,115,212, 61, 68, 26, 55,110,220,190,126,160,231, 87,163, 67,140,222, 85, +123,169,181, 42, 25,175,253, 34, 83, 25,241,199, 79,218,213, 61,123, 12,244,152, 48, 97, 66,184,175,175,175,226,198,141, 27,134, + 57,115,230, 68,174, 95,191,158, 0,248,178, 60,205,228,228,228,223, 62,253,244, 83,223,246,237,219, 71, 73, 36, 18,146,147,147, +131,244,244,116,164,165,165,225,246,237,219,244,230,205,155,215,173, 86,235,154,138,164,179,126,253,250, 75,135, 14, 29,250,124, +157, 58,117, 36,148, 82,152,205,102,232,116,186,134, 71,143, 30,237,125,224,192,129, 88, 0, 21, 46,151, 41, 41, 41,107, 62,251, +236, 51,117,187,118,237,106, 73, 36, 18,238, 65,164,179, 68, 61, 16,162,209,104,176,115,231, 78,120,123,123,195,213,104, 93,119, + 48, 90,196,208,160, 0, 63, 24, 14,126,133,234,190,225, 48, 90,196, 80, 86,138, 25,255, 89,131,149,158,158, 46,211,106,181,130, + 40,138,124,110,110,174, 74,165, 82, 89,101, 50,153,169,130,255, 87,167,119,239,222,199,154, 55,111, 94, 80, 20,209,176, 4, 4, + 4,152,115,115,115, 33,138, 34, 68, 81,180,122,122,122, 22, 88, 44, 22, 68, 69, 69,113, 0, 92, 54, 17,234,245,250, 42, 74,165, +242,174,239,117, 58,157,195, 92, 21, 20, 20, 64,167,211,193,203,203, 11, 90,173,214,229,201,109,179,217, 34, 84, 42, 21,146,147, +147, 1, 0,249,217, 89, 48,230,229,193,148,255,127,115,101,203,201,134,168,215,194, 59,172, 50,172, 86,107,101, 87,154, 90,163, + 77,198,131, 34,109,243,111, 8,124,109, 98,153,219,101, 31,216, 3,143,234,209,208,235,205, 15,125,142, 50, 74,233,252,134, 13, + 27, 54, 90,191,126,253,136,164,164,164,187,214,247,237,219, 23, 99,199,142,197,152, 49, 99, 46, 62,253,244,211,167, 55,111,222, +140,215, 95,127, 29,162, 40, 54, 32,132,228, 82, 74,255, 44, 79,115,202,148, 41,199, 19, 18, 18,246, 92,185,114,101,116, 64, 64, +128,188, 94,189,122, 87,235,213,171,199,175, 95,191, 62,240,149, 87, 94,137,235,222,189,251,205, 93,187,118,249,238,220,185, 83, + 33,138, 98, 99, 66, 72,210,191, 61, 15,150,189,137,216,100, 50,193, 96, 48,192,108, 54,195,102,179,145, 10,236,211, 98,159, 69, + 81,116,152, 53,163,209, 8,139,197, 66,118,236,216,142,205,155, 55,115, 23, 46,156, 15,155, 50,229, 29,228,230,230,194,102,179, +177,218,233, 33,208,164, 73,147,167, 4, 42, 46, 30, 26,100, 85, 12, 14,180,106,165,132, 22, 92, 89,252,126, 65,124,184, 70,235, +233,207,155, 60,253, 36, 33,147,167, 76, 14,190,126,237,186,241,243,207, 63,191,208,179,103,207,128, 87, 94,121,165,246,150, 45, + 91, 98,171, 84,169,242,253,237,219,183,115,202, 48,230,210, 17, 35, 70, 28,245,246,246,174,186,114,229,202,180,164,164, 36, 31, +139,197,162,178, 88, 44,102,131,193,112,205,108, 54, 31, 48,153, 76, 59, 83, 82, 82,226, 42,146, 94,141, 70, 83,127,192,128, 1, +146,156,156, 28, 20,141,190, 69, 90, 90, 26, 26, 53,106,196,239,218,181,171,206,189,236,131,243,231,207,127, 21, 18, 18,178,103, +211,166, 77, 93,213,106,117, 99,153, 76, 22, 36,138,162, 77,175,215,167, 26, 12,134, 83,247,146,206, 18,251, 34,249,196,137, 19, + 33,158,158,158, 72, 72, 72, 0, 33, 36,249,126,143,155, 66,202, 37, 92, 56,176,169,114,117,223, 72, 28, 61,114, 4, 10, 41,151, +192, 74, 51,227, 63,101,176,242,243,243,133, 19, 39, 78,248, 36, 36, 36,104,252,253,253, 13,181,107,215,206, 37,132,136, 28,199, +209,148,148, 20,223,248,248,120,133,159,159,159,182,106,213,170, 89,110,254,223,149,113,227,198,197, 78,157, 58, 53,174, 75,151, + 46, 25, 0,144,157,157,141,204,204, 76,164,167,167,195,108, 54, 35, 57, 57,153, 59,126,252,184,239,214,173, 91, 27, 2,112,217, +244,162, 84, 42,111,231,231,231,215,244,246,246,118, 92,208,236,166,202,217, 96,217,163, 89,106,181,218,229,201,205,113, 92, 82, + 82, 82, 82, 53,131, 94,143,219, 87,175,194,152, 95,216, 36,232, 48, 87,185, 89, 64, 65, 62,212, 10, 5,242,179, 50,193,243,252, + 29, 87,154,106, 57,111,178, 88,109,178, 74,221,123, 3,164,236,235,179, 87,179,214, 16,107,213,131, 82,185,214,242,111, 20, 8, +142,227,108,229, 53,251,202,100, 50, 4, 6, 6,138, 45, 90,180,192,235,175,191,110, 55, 2,132, 16,210,158, 16,114,128, 82, 90, + 80,150,166, 40,138,220,133, 11, 23,158,185,118,237, 26, 47,145, 72,184,230,205,155,199,180,105,211,198, 36,147,201, 32,149, 74, +133,130,130, 2,143,157, 59,119, 42, 44, 22, 11, 41,210,124,104,243, 96, 1,133,163,251, 74, 49,240,208,106,181,208,235,245, 40, + 40, 40, 64, 78, 78,142,160, 84, 42,107,182,109,219,246,136,209,104, 92, 99,179,217,126,136,139,139,203, 43, 75,211,108, 54, 23, + 51, 91,162, 40,130, 82, 10,155,205, 6,139,197, 2,137, 68, 34,110,218,180, 25,223,204,159,139,181,171,215,209,206,157, 59,147, +173, 91,183, 66, 20,197, 68, 86, 61,253,243,136,162, 56,251,175,201,253, 20,176,218,180,198,189,171, 10,182,101, 9,218,239,207, +253,117, 92, 47,112,121, 85,106,163, 94, 68,229,170,188,151,167, 23,183,108,249,226,204,173, 91,118, 95, 75, 76, 76,204,155, 49, + 99, 70,203,168,168, 40,175,203,151, 47,135, 2,200, 41,195, 8, 69, 12, 31, 62,124,120,118,118,182,116,201,146, 37,203,146,146, +146,246, 82, 74,175,151, 48, 30,141, 8, 33, 95, 0,144, 0, 8, 4, 96, 5,176,131, 82,186,188, 28,179, 34, 18, 66,240,215, 95, +127,221, 53,218, 79,116, 30,145, 81,241, 40, 86,118,243,230,205,235, 95,185,114,101, 99,118,118,246,202,146,235, 85, 42, 85,239, +152,152,152, 65,199,142, 29,251,128, 82,122,173,130, 55,110,227, 47, 92,184,240,185, 40,138,225, 28,199,221,162,148, 78,122, 0, + 17,172,151,231, 44, 89,189,196, 96,182, 85, 81, 72,249,219, 70,139,248, 10, 43,205,140,255,140,193,178, 90,173,154,247,223,127, +191,101,131, 6, 13, 82,218,182,109,123, 39, 50, 50, 82,103, 95,231,225,225,161,247,243,243,211, 27, 12, 6,229,173, 91,183,130, + 55,108,216, 80,195,102,179,169,220,248,191,221,222,222,222,190,199,143, 31,247,251,229,151, 95,170,159, 56,113, 34,124,200,144, + 33,237, 76, 38, 19,140, 70, 35,110,220,184, 17,190,120,241, 98, 81, 42,149,230, 16, 66,254, 6,224,242, 54,222, 98,177, 28,190, +114,229, 74,141,230,205,155, 19,139,197,226, 48, 84,206, 38,171,160,160, 0, 82,169, 20,201,201,201, 84, 20,197,163,110,164,243, +200,241, 99,199,170,213,173, 29, 13, 99,110,118,145,185,202,133, 53, 55, 27, 98,110, 22, 56,109, 1,252,124, 5,168, 20, 26, 92, + 78, 78, 65, 81, 90,203, 69, 98,213,223, 76,202,205,171, 89,109,218,151,248, 43,202, 19,212, 98,118, 52, 11, 2,112, 52, 23,182, +186,152,142,253,135, 14, 67,176, 25,147, 30,213, 66,115,250,244,233,180, 33, 67,134,196,137,162,216, 8,229, 76, 81, 80,206, 93, +120,126, 65, 65, 1, 50, 50, 50,108,153,153,153, 6, 0, 72, 75, 75,203,222,180,105,211, 5, 81, 20,155,221,139,230,131,192, 98, +177,220, 21,125,178,217,108,176, 90,173, 48,155,205, 72, 79, 79,151, 29, 56,112,160,237,145, 35, 71,164,231,207,159,199,145, 35, + 71, 26,108,216,176,225,157,232,232,232,122, 23, 47, 94,188,227,202,180,145,210,141, 53, 15, 0,155,214,255,142, 65,131, 6,145, +140,140, 12,108,216,176,225,129, 52,163, 48,220, 66, 11,171, 77,105,218,187,170,224,237,171,242,252,115, 58,126, 70, 92, 92,220, + 54, 74, 41,237,209,163,199,233,154,181,162,252, 1, 64, 46,211, 4,213,173, 91,183,157,143,143,143, 12, 0, 66, 66, 66, 26, 91, + 44,150,249, 0,218,148, 38,218,183,111,223, 86, 1, 1, 1, 13,255,252,243,207, 83, 73, 73, 73,251, 74,154, 43, 0,168, 89,179, +230,244,179,103,207, 62, 37,145, 72,136, 83, 25,161, 0, 74, 53, 88,253,250,245,171, 25, 22, 22,230,183,229,138, 23,242,164,213, + 64,249, 92, 64, 80,192,230, 93, 31,183,164,181, 17, 20,116,201,175, 90,181,106, 13,174, 93,187,118,170,130, 17,166, 42, 3, 6, + 12,248, 99,233,210,165,209,221,187,119,151, 1,184,203, 96, 69, 71, 71, 63,187,107,215,174,254,163, 71,143,174, 79, 8,233, 69, + 41,189,234,174,126, 92, 92,220, 65, 0, 45, 31,228, 65, 91,115,142,238, 68,209,156,101, 12,198,127,206, 96,153,205,230, 29, 87, +175, 94,109,218,175, 95,191, 12,103,115, 69, 41,117, 84, 6, 94, 94, 94,122,127,127,255,172, 83,167, 78, 85, 18, 69,113,175, 27, +255,183,100,215,174, 93,127,205,155, 55,111,149,175,175,175,101,216,176, 97,220,228,201,147,247,103,102,102,210,204,204, 76,124, +251,237,183,109, 99, 99, 99,247,223,186,117,203, 22, 23, 23, 55, 28, 64,119,151,181,163, 86, 59,255,245,215, 95, 31,180,127,255, +126,133,125,158,162,146,209, 43,139,197, 2, 65, 16, 48,127,254,124,163, 86,171,157,235, 70, 36, 99,209,119,223,125,215,127,241, + 55,243, 20,188,217, 12, 75, 78, 22,172,185, 57,176,229,100,129,211,105,225,161, 32,168,222,168, 18,178,147,228, 88,177,237,160, +222,106,181,126,231,210, 96, 25, 10, 38,142, 30,249,234,239, 59,118,255, 5,223, 54, 29,145,249,215,214,187,163, 67,149, 2, 97, + 50,155,241,241, 71,211, 40,209,231, 76,254,151,238,232,121,147,169,236,150, 95,147,201, 4, 81, 20, 19,207,159, 63,191,154, 16, +146, 79, 8,105, 95,180,106, 79,105,209, 43,103, 77,142,227,196,218,181,107,175, 15, 12, 12,124, 6,128,182,118,237,218,235,229, +114,121, 71,147,201,212, 92, 20,197,196,147, 39, 79,174, 35,132,220, 33,132,244, 44,250,233, 67,157, 7,203, 98,177, 96,234,212, +169,248,244,211, 79, 49,101,202, 20, 71,126,237,205,132,102,179, 57,114,251,246,237,210,131, 7, 15,210,159,126,250, 41,243,185, +231,158,243, 30, 50,100,136,247,138, 21, 43,198, 3,152, 84,150,230,164, 73,147,176,112,225, 66,140, 26, 53,234,110,119,197,243, + 98, 82, 82, 34, 76,102, 19, 93,190,124,121,178, 32, 8, 62, 95,127,253,181,114,194,132, 9,132, 85, 79,255, 60, 54,155,237,189, +214,179, 55,188, 73,136,210,108,181, 90,231,158, 62,125,114,143,211,141,128,114,246,151,179, 5, 0,248,242,139,217, 18, 74,169, +151,125, 98,216, 25, 51,102, 40, 70,142, 28, 25, 80,150,238,218,181,107,115,102,204,152,225,247,242,203, 47,119,223,179,103,143, +138, 16,178, 5,192,223, 0, 50,138,110, 28,253, 1, 28,172, 84,169, 82,240,234,213,171,171,117,237,218, 85,237, 70, 93,247,253, +130, 5, 11, 34,102,239,243,192, 22,237, 51, 72, 16,159, 3,245,166,240, 13,200, 71,109,205,109,116, 8, 77, 10, 89,185,114,229, + 18, 0,141, 43, 96,174,234,244,235,215,111,195,210,165, 75, 35, 95,125,245,213,196,131, 7, 15, 38, 16, 66,166,151,178,105,230, +139, 47,190,120,107,217,178,101,213, 68, 81,220, 70, 8,233, 78, 41,189,194, 74, 16,131,113,111, 17,172,151, 8, 33, 49, 83,166, + 76,249, 60, 36, 36,164,202,180,105,211,226,107,215,174,173,117,156,109,153,153,154,189,123,247, 70,229,229,229,229, 91,173,214, + 97,148,210,211,165,156,188,157,157,231,202,160,148,222, 34,132,124,222,160, 65,131, 65,191,254,250,235, 94, 15, 15,143,188, 35, + 71,142,120,122,122,122,230, 94,184,112, 65,205,243,188, 46, 62, 62, 30,219,183,111,111, 11,224,155,210,238,146, 74,106,166,164, +164,156,136,138,138,154, 59, 97,194,132, 55, 62,248,224, 3, 5,165, 20, 58,157, 14,121,121,121, 48, 26,141, 16, 4, 1,132, 16, +172, 90,181,202,104, 52, 26, 23, 39, 37, 37, 29,113,165,153,156,156,124,184,114,229,202, 63,204,157, 51,231,229, 87, 6, 13,148, + 33, 55, 19, 57, 41, 73, 32,186, 2,104,148,114,196,116, 10,131, 54,147, 96,233,222,191, 77, 89, 70,243,234,164,164,164, 61,174, + 52, 15,220,206,255,163,101,141,128, 93, 51,102, 76,235,244,206,143,235, 32,138, 34, 46,190,254, 60,178,247,237,128,170,118, 61, +180,186,152, 14,147,201,132, 41,147, 38,128,215,165,238, 63,114,187, 96,173, 43,205, 7,129,179, 38, 33,228, 53, 66,200,243,209, +209,209, 24, 61,122, 52,250,246,237, 91,108,219, 13, 27, 54, 96,193,130, 5, 48, 26,141,207, 19, 66, 78, 80, 74,231, 19, 66, 14, + 20, 29,219, 2, 87,154, 17, 17, 17, 77, 99, 98, 98, 16, 18, 18,162, 43, 50, 23, 93,206,159, 63,223, 56, 58, 58,186,164,230,223, + 69,154,214,135,149,119, 74,105,246,213,171, 87, 61,191,248,226, 11, 98, 54,155, 49,125,250,116,216,141,166,189,229,229,221,119, +223, 13,209,104, 52,248,242,203, 47, 77, 25, 25, 25, 29, 23, 44, 88,176,123,222,188,121,254,171, 86,173, 26,108, 55, 88, 37, 52, +211, 46, 92,184,224,177,112,225, 66,206,106,181,226,171,175,190,186,171, 25,114,252,248,241, 48,155, 45, 16,120,193,100,208, 27, +234, 40, 20,138,107, 62, 62, 62, 74, 81, 20,233,195,202,251,147,172,121,250,244,233, 29, 0,118,184,243, 59,131,193,128,244,244, +116,100,100,100,160,168, 75, 2, 41, 43,157, 6,131,225,228,164, 73,147,226, 22, 45, 90,212,253,224,193,131,253,247,237,219,215, +125,231,206,157,134, 91,183,110, 89, 45, 22, 11, 13, 14, 14, 22,218,180,105,163,232,209,163,135, 90, 46,151,115,239,189,247, 94, +198,204,153, 51,253, 1,100,150, 83,127,242,148, 82,188,221, 54, 31,147, 58,240, 48,153,204,200,201,201, 65, 82, 82, 34,206,159, + 63,143,195,135, 47,130, 82,202, 85,112,127,206, 93,185,114,101,148, 76, 38, 35,171, 86,173,170,178,106,213,170,113,174,246,195, +242,229,203, 35, 86,173, 90, 53,191, 72, 75,100,101,137,105, 50, 42,104,176,138, 78,232,115, 0,186, 19, 66,218,188,250,234,171, +159, 69, 71, 71, 27,173, 86,171,100,219,182,109,181, 50, 50, 50,100, 86,171,117, 18,165,116, 95, 69,254,144, 82,186,144, 16,130, + 62,125,250, 76,170, 90,181,234,174, 19, 39, 78,212,239,221,187,247,182,245,235,215,183,177, 90,173,215,207,158, 61,251, 60,128, +185, 0,190,113, 87, 51, 62, 62,254,253,157, 59,119, 90,143, 28, 57,242,246,228,201,147,229, 1, 1, 1,196,199,199, 7,201,201, +201, 72, 76, 76,164, 63,254,248,163,209,104, 52,126,227,229,229,245,190,187,154, 50,153,236,237,125,199,227,200,229,107,215,134, +191,244, 84, 87, 69,229, 26, 53,161, 33, 53,145,159,153,129,125,123, 82,177,236,239, 83,134, 84,131,233,103,158,231,221, 30, 74, + 31,122, 53,189,219,142, 95,150,254,185,103,215,238,206,179, 62,253,156,132, 12,125, 25,234,136, 72,136, 17,213,177,119,207, 30, +204,156, 49,157,242, 5,169,251, 44,215, 82,187, 60,236,130, 96,159,179, 74, 20, 69, 1, 0,148, 74, 37,198,142, 29, 11,231, 71, +227, 44, 88,176, 0,122,189, 30, 0, 4, 66,200, 23,132,144, 31,202,138, 90,149,161, 89,101,203,150, 45, 85,156, 53,163,163,163, + 75,211, 52, 62,236,252,167,166,166,190,255,226,139, 47,126, 34,145, 72,188,203,218, 70,173, 86, 35, 63, 63, 31, 54,155,205,230, +235,235,123,201, 30, 25, 45,235, 60,210,106,181,239,143, 26, 53,234, 99, 66, 72,153,145, 14,165, 82,121,235,192,129, 3,213,135, + 12, 25,194,173, 94,189,250,198,224,193,131,229, 7, 14, 28,176, 1, 88,199,170,167, 71, 11,231, 1, 11, 90,173, 22, 0,104, 57, +219,222, 38,132, 76,138,139,139, 83,140, 26, 53,170,241,208,161, 67, 61, 59,116,232,160,113,222, 70,175,215,139,155, 55,111,214, + 46, 92,184, 48,115,223,190,125,127,143, 24, 49,226, 25, 20,206, 32, 95, 42,201,201,201,127,124,243,205, 55, 94,237,219,183,175, + 97,179,217, 28,253,175,210,211,211,145,152,152,136,155, 55,111,222, 18, 69,113, 83, 5,179,245,250,144, 33, 67,182, 44, 91,182, + 44,252,213, 87, 95, 77,252,229,151, 95, 54, 1,200, 45,101, 59,205,179,207, 62,219,123,217,178,101,225, 35, 71,142,188, 13, 96, + 28,155,225,157,193,184, 15,131,229, 84, 89, 28, 0,208,146, 16,210,135,231,249,137, 5, 5, 5, 95, 81, 74, 55,222, 71, 69,181, +144, 16,178,237,234,213,171, 47, 3,104,242,213, 87, 95,189, 3, 32, 1,133, 33,244,174,165,245, 87,112,161,103, 3,240, 65,104, +104,232,111,211,167, 79,127, 32,207, 34,188,118,237,154, 9,192,235, 33, 33, 33,191,124,242,203,218,247, 41,165,141,120, 42,250, +217, 8,151,205,113,220, 73,155,205, 54, 51, 49, 49,113,111, 69, 52,215, 20,166,179,107,139, 42, 30, 61, 39,141, 28,242,185, 85, +162,140, 40, 48, 88,101,106,185, 96,146,218,140,183, 56,125,246,123, 71,110, 21, 60, 18, 23, 86,163,209,104,125,230,153,103,190, +231, 56, 78, 4, 0,155,205, 38, 24,141,198,225,168,192,200,211,210, 52,251,246,237,251, 35,207,243,214,162,200, 16,103, 52, 26, + 95,186, 31,205, 7, 69, 70, 70, 70, 1,128, 49,229,109, 19, 27, 27,187,226,207, 63,255, 28,210,165, 75, 23,219, 31,127,252,145, +246,244,211, 79, 11, 39, 78,156,160,132,144, 82,239,226,110,222,188,105, 68, 25, 79, 36,176,211,160, 65,131,240, 31,126,248,225, +196,203, 47,191,236, 57,127,254,124,223, 99,199,142,217,150, 46, 93,154, 87, 80, 80, 48,155, 85, 79,143, 22, 18,137, 4, 42,149, + 10, 38,147, 9,233,233,233,112,213,167,156, 82,122,141, 16,242,244,196,137, 19, 99, 39, 78,156,248,116, 88, 88, 88,157, 42, 85, +170, 84,225, 56,142, 75, 73, 73, 73, 79, 72, 72,184,105, 54,155,119, 1,248, 3,128,180,106,213,170, 39, 1,172, 40, 75,239,252, +249,243, 31,135,132,132,252,181,126,253,250,167,229,114,121,109,153, 76,230,107,181, 90,185,130,130,130, 44,179,217,124,193,104, + 52,254,158,156,156,124,168,130,117,231,101, 66, 72, 7, 65, 16,254, 88,186,116,105,116, 74, 74, 74,196,222,189,123,123,149,220, +174,113,227,198,203,150, 45, 91, 22, 62,122,244,232,107,171, 86,173,170, 80, 31, 44, 6,131, 25, 44,247, 78,198,141, 0, 54, 62, +136, 63,166,148,222, 2,240,126,209,242, 64, 72, 74, 74, 58, 3, 96,200,131,220, 65,201,201,201, 7, 1,116, 3, 10,103,115, 78, + 40,188,104,222, 23, 71,110,231,255, 14,167,199,171, 60, 34,119,231, 70, 66,200,196,162, 81, 77, 0, 48,241,228,201,147,243, 75, + 68,164, 78, 59,175,119, 21,105, 42, 77,243,212,169, 83, 37, 53,207, 86, 68,243,223, 36, 59, 59,251,141,101,203,150, 29,123,253, +245,215,229, 3, 6, 12,192,197,139, 23,241,221,119,223, 25,179,179,179, 87,221,171,230,169, 83,167,110, 53,104,208,160,209,146, + 37, 75,222, 94,188,120,113, 31, 66, 8,123, 22,225, 35,130,193, 96,184, 62,104,208, 32,112, 28, 71, 40,165,212,106,181, 58, 6, + 61, 20,205,103,118,221,141,243,202, 10,224,175,162,197, 21, 95,184, 81, 31, 29, 6,112,248, 1,159,251,183, 9, 33, 79,223,188, +121,115,214,229,203,151,183,150,182,205,185,115,231, 54,116,237,218, 85,117,248,240,225,119, 43, 58,138,144,193, 96, 6,139,225, +146,155, 15,192, 92, 61,202, 20,245,127,250,193,110,142, 42,186,254, 97,105,254, 91,156, 63,127, 62, 27,128,227,145, 33, 81, 81, + 81,232,217,179,231,125,235, 22,153,169,177, 96, 51,183, 63, 82,108,218,180,233,169, 39, 37,175,148,210,219,229,221,156,154, 76, +166, 77, 0, 54,177, 82,193, 96, 48,131,197,184,247,138,214,120, 63,235, 31,150, 38,131,193, 96, 48, 24,143, 50, 4, 64,231, 50, + 46,122,110,143, 14, 32,164,226, 15,218,116,165,207, 52,153, 38,211,100,154, 76,147,105, 50,205,199, 79,211,149,246, 99, 51, 58, +145, 82,250,143, 45, 0, 58, 51, 77,166,201, 52,153, 38,211,100,154, 76,147,105, 62,105, 11,123,160, 44,131,193, 96, 48, 24, 12, +198, 3,134,245,193, 98,252,231,120,238,185,231,248,138,108, 31,239,237,205,229, 38, 86,153,173, 81,201,123,233, 12,198,217, 87, +255,120,247,155,199, 97, 63, 4, 7, 7,215,242,244,244, 28, 6,160,142, 78,167, 11, 80,169, 84,105, 0,206,231,229,229,173, 72, + 73, 73,185,196, 74, 10,131,193, 96, 60,226, 6, 75, 38,147,197, 80, 74, 71, 16, 66,130, 8, 33,119, 40,165, 63,152, 76,166,115, + 79,218,206,146,201,100, 49,132,144, 17,148,210, 32, 74,233, 29, 66,200,191,188, 31, 8, 89,251, 92, 97, 20,178,255, 26,136, 0, +165,172, 72,151, 98,174,146,170, 44, 30,222,167,233,139,147, 71,116, 64,163, 1, 95, 77, 66, 5, 38,177,125, 20, 33,132,240, 81, + 81, 81,175,135,135,135, 15, 92,180,104,145, 52, 42, 42, 10, 10,133, 2,122,189, 62,248,250,245,235,193,163, 71,143,110, 87,181, +106,213,213, 55,110,220,248,174,104,142, 56, 6,131,193, 96, 60, 42, 6, 43,162,114,229, 1, 28, 79,230,153, 45, 54, 31,111,111, +111,238,219,111,191,229,122,245,234,133,223, 55,111,198,216,177, 99,199,133,134,134,136, 82, 65,200,166,162,117,220,205,132,228, + 95,221,249,179,103,159,125, 54,213, 98,177,148, 57,171, 53,207,243,105, 27, 54,108, 8,188,223, 76,133, 54, 30,144,106, 49,155, +203,252, 31, 65,144,164, 37,159, 92,227,214,255, 84,174, 28, 50,128, 39,220, 60,139, 77,244,241,241,241,225,190,249,230, 27,174, + 87,175, 94,216,188,121, 51,198,140, 25, 51, 46, 44, 52, 84,148, 74,248,108,209, 70,199,221, 76, 72,248,245,225, 29, 58, 66,214, +174, 5,135,254,133,159,214,174, 5,215,191, 63,121,162, 77, 86, 70, 70, 6, 1, 0,127,127,127, 90,204, 92,245,110,250,226,123, +175,118,194,204,197,187,160, 55,154, 86,254,215,243, 25, 21, 21,245,250,115,207, 61, 55,240,227,143, 63,150,114, 92, 97, 43,191, + 86,171,133, 94,175, 71,104,104, 40,246,236,217, 35,125,255,253,247, 7,110,216,176, 1, 0,230,177,106,142,193, 96, 48, 30, 33, +131, 69, 56,204, 95,181,232, 11,159,204,172,108,252,178, 97, 27,162,163,163,113,254,252,121,212,138,142, 70,108,179, 6, 92,215, + 86,245, 57,129,144, 74, 31,124,179,124, 62, 0,183,140,133,197, 98, 9, 88,191,126, 61, 8, 33,176,217,108,176,217,108,246, 9, +251, 80, 80, 80,128,113,227,198, 5, 60,136, 76, 89,204,230,128,235,127,175,131,132, 39,176,218, 40, 44, 54, 10,179, 85,132,217, + 74,145,167,179,162,227,211, 67,220,254, 31, 14,220,252, 31,191,249,210, 39, 59, 39, 7,235,255,220,233,216, 15,209,209,209,232, +216,186, 25,247,220,211,237, 56,181, 66, 94,233,149,201,159,184,189, 31, 30, 4,107,159,251,191,185,114,254,174,255, 26, 60, 81, + 17,139,139, 23, 47,242, 70,163,113,144,167,167,103, 11,137, 68, 18,168,242, 14, 22,115,164, 85, 51,181, 36,232,134, 89, 43,107, + 59,162,111,181,238,239,190,220, 30, 51, 23,239,194,143,155,254, 94,230, 21,154, 48,245,191,156,223,224,224,224, 90,225,225,225, +197,204,149,253,161,230,121,121,121,200,207,207, 7,199,113,152, 52,105,146,116,239,222,189, 3,131,131,131,119,178,230, 66, 6, +131,193,120,132, 12,150,201, 98,243, 9,242,243,198,143, 63,252,136, 73,239,204, 64,173, 90,181, 64, 41, 5, 33, 4,239, 76,157, +142,175, 63,154,130,129, 79,181,131,197, 42,250,148,165, 81,218, 80, 75, 66, 8,226,227,227, 97, 48, 24,160,215,235, 29, 75, 76, + 76,140, 91, 9,118,119,248,166,132, 39,248,227, 68,126,161,177,178,136, 48, 91, 69, 88,172, 34, 58,196,120, 84, 72,211, 98, 19, +125,188, 60,212, 88,188,112, 62, 38,125,244, 69,177,253, 48,249,221,247,241,221,103, 31, 96,252,168, 23, 96,178,216,124,238, 37, +157, 21,129,105, 22,231,208,161, 67,193, 42,149,234,171, 33, 67,134,132,140, 27, 55, 78, 70, 5,181,176,237,232, 45,175, 47,127, +216, 21, 98, 48,153,249,167,219, 84,197, 75,125,155, 96,230,146,191,138,204,213,237, 87, 35,115,114,196,255,114,222, 61, 61, 61, +135, 45, 90,180,232, 46,115,149,154,154,202, 21, 20, 20,192,108, 54,139, 69,207, 75,196,148, 41, 83, 36,239,191,255,254, 48, 66, +200, 71, 69, 58, 70, 86,150,152, 38,211,100,154,143,170,230, 19, 99,176, 0,192,108,212, 35,166,138, 47, 22,206,254, 24, 34,229, + 64, 65, 65, 69, 10, 74,109,136,244, 87,195,168,211, 86,248, 15, 69, 81,132,197, 98,129,217,108,198,162, 69,139, 80, 80, 80, 0, + 81, 20, 81,187,118,109, 0, 64,227,198,141,157,155,184,110,199,197,197,133,187,210, 12,168,215,247, 22, 40,170, 56,127,247,225, + 23,223,227,208,201,235, 16, 69, 64,174, 84,161,255,176,145,176,218, 40, 76,150,138, 63,159,212,168,215, 33, 68, 35,193,156, 89, + 83, 65, 4, 9,120, 66, 64, 8, 1, 71, 68,212, 10,245,134,201,160,123,232, 7,174,255, 26,136,107,215, 22, 31, 5, 90,216, 15, +235,201,137, 92,169, 84,170,175, 86,172, 88, 17,222,180,105, 83, 14, 0,142, 93,201,150,127,249,195,174,144,239,167, 61, 67, 26, +213, 10, 66,102,174, 30, 51,151,238,197,238, 19,201, 91, 75,154,171,255, 48,117,162,162,162,138,153,171, 47,191,252,210,127,254, +252,249,161, 0,208,175, 95,191,164, 78,157, 58,101, 92,190,124, 25,193,193,193, 36, 35, 35,227,105, 0,111, 20,221,220, 76,164, +148,206,103,213, 30,131,193, 96,252,203, 6,203,100,212, 35,204, 91,134, 32,141, 0,139,197,138,243,150, 16,228,235, 12, 48,155, + 45,184,109, 54,227,198,169, 59,104,221,186, 53,158,121,230, 25,155,217,108,134, 84, 42,205, 93,191,126,189,175, 43,131,101, 54, +155, 97, 54,155,161,213,106,177,114,229, 74, 8,130,224,120,112,170,243, 19,235, 91,181,106, 85,197, 61, 43,141, 42,215,142,253, + 6, 15, 5, 15,171, 72, 97,181, 82, 88, 69,192,106,163,208,155, 41,158, 25,241, 30,108, 54, 10,155, 72, 97,178,186,238,162, 84, +204,176,249, 54, 69,239, 41,191, 0,208, 56,214,123,202, 41, 38,181,230, 33,147, 73, 32,147, 9, 48,232,244,255,194,161,163,180, +127,127, 34, 62,169,157,220,141, 70,227,224, 33, 67,134,132,216,205, 21, 0,100,231, 25, 5,131,201,204, 55,170, 21,132, 46, 3, + 39, 96,199,234, 47,241,231,193, 43,240,209, 8,251,194, 30, 15,115, 5,157, 78, 23,160, 80, 40,160,213,106, 29,145,171,249,243, +231,135,154, 76, 38, 14, 0, 4, 65, 18,150, 46,134, 42,108, 34,224,229,153,130,236,236, 92, 63, 74, 41, 41, 50, 88, 95, 16, 66, +126, 96, 51,231, 51, 24, 12,198,191,108,176,204,122, 61, 44, 22, 43,172, 86, 27, 44, 86, 27,114, 11,244,248,236,179,207, 32,151, +203, 65, 8,129, 40,138, 40,122, 0, 42,103,177, 88,240,244,211, 79,251,184,250, 67,231,126, 87,148, 82,240, 60,143,230,205,155, +223,181,221,145, 35, 71, 42,148, 17, 15, 5,143,200,206,239,220,245,253,209,223, 62, 6,165,128, 77, 44, 50, 88,102, 55,174,179, + 46, 12, 91,131,182,253, 97, 50,153, 11, 35,122,148,222, 83, 36,239,129,153,172, 39,172,207,149, 29,153, 76,214,121,220,184,113, + 50,231,239,124, 60,229, 86,133, 76,106, 59,113, 49,133,236, 88,253, 37,119,252, 66,178, 40,147, 8, 84, 77,239, 68, 61, 46,249, + 86,169, 84,105, 58,157, 46, 88,175,215, 35, 47, 47, 15,121,121,121,197, 79,104,137,132,188, 58,106,140,191, 68, 42,131,197,108, +194,159, 43,102,178, 90,142,193, 96, 48, 30, 53,131,101, 52,232, 96,177,218, 96,181, 20, 62, 65,222,100, 50, 65,169, 84,162,109, +219,182, 69,151,119,234,120,221,190,125, 59, 76, 38,147,203, 63,180, 90,173,142, 8,150, 40,138,160,148,226,151, 95,126,129, 68, + 34,129, 84, 42,133, 68, 34,129, 68, 34, 1, 33,164, 66, 25,177,218, 40,222,157,252, 54, 36, 2, 7,169,192, 65, 34, 16, 72, 5, + 14, 54, 74, 65, 65, 97,181, 21, 46, 38,171,123,129,140,242, 12, 27, 0, 24, 77, 22,208, 66, 51, 6,157, 78,199, 74,210, 67, 36, + 35, 35,131,232,245,250, 8,111,111,111, 39,171, 73, 81, 73,101, 51, 14,239,213, 32,121,248,135,235, 66, 76, 22, 43,164, 2, 79, + 7,119,141, 78,222,181,126,143, 95,134, 49,135,216, 71, 23,254,199, 57,127,237,218,181,224,202,149, 43, 35, 47, 47, 15, 86,171, + 85,236,215,175, 95,146, 32, 72,194, 4,137,132,244, 28, 52, 70,188,115, 39,217,194,113, 60, 40,181,225,169,231, 70, 19,185, 66, + 41, 53,155, 76, 86, 0, 19, 89,244,138,193, 96, 48, 30, 5,131,165,215,195,106,177, 58, 76,150,217,108, 6, 0,204,158, 61,251, + 46, 67, 68, 41,117,172, 47, 87,211,104, 68, 84, 84, 20, 76, 38, 19,162,163,163, 65, 41,197,160, 65,131,238,218,238,216,177, 99, + 21,202,136,197, 70, 49,235,179,217,119,125,127, 96,205,199,168, 31, 29,137,230,213, 85, 48, 88, 68,228,106,173,247,109,216, 0, +192,100, 50, 3, 69,211,225,235,181, 90, 86,146,254, 69, 44, 22, 11,178,179,179, 97, 44,200,182,214, 12,162,185, 47,247,172,106, + 76,207,210, 9, 28, 53, 88,195, 60,116,198,130,172, 36, 94,165, 82, 61, 22,121,205,203,203, 91, 49,122,244,232,118,251,246,237, +147,114, 28,135,188,188, 60,116,232,208, 33, 35, 93, 12, 85,188, 58,106,140,127,114,114,146,213, 83, 41, 24,165, 82, 9,210,210, +210,196,118, 61,134,232, 7,141,120, 51,228,205,247, 62, 89,148,124,112, 62,235,127,197, 96, 48, 24,143,132,193,210,105, 97,177, +216,138,154, 8,173,142,168,211,216,177, 99,239,218,118,215,174, 93, 46, 13,150, 32, 8,105, 47,191,252,114,177, 41, 18, 40,165, + 88,183,110, 29,100, 50, 89, 49,211,118, 47, 17,172,105,239, 79,128, 76,194, 23, 25,162, 66, 99, 36, 82,138, 77,127,108,199,166, + 63,182, 59,182,229,121, 73,218,253, 24,182, 66,163,104, 1,165, 0, 5,160, 47, 96, 6,235, 97,226,239,239, 79,211,211,211,111, +230,228,228,212, 84,171,213,200,204,204, 68, 86, 86, 22,114,114,114,160,207,203,182,170,173, 57, 90,147, 53, 11,130, 32,224, 78, + 66, 42,108, 54,219,157,199, 36,122,133,148,148,148, 75, 85,171, 86, 93,253,238,187,239, 14,154, 50,101,138, 68, 20, 69, 92,190, +124, 25, 32,132, 74,164, 50,112, 28, 7,137, 68, 64,110,110,158,168,210,120,167,152, 41,175,146, 72,101,224,120, 41,155,112,148, +193, 96, 48, 30, 41,131,101,181,194,106, 41,236,131,101, 54,155, 97,181, 90,177,120,241,226, 98,102, 72, 42,149,130,227, 56,151, + 6,107,253,250,245,197, 38,247,108,220,184, 49,165,148,162, 95,191,126,142,230,198,225,195,135, 99,228,200,145,176, 15, 67,119, + 59,138, 97, 3,166,207,156,237,208,233,209, 37, 22,125,158,106, 7, 42, 22, 26,181,180,179, 27, 42,228,216,202, 51,108, 64, 81, + 4, 11, 20,160, 20, 5,249,249,172, 36, 61,100, 76, 38,211,206,121,243,230, 69,188,255,254,251,178,172,172, 44,100,100,100, 32, + 59, 59,219,177, 20, 20, 20, 32, 40, 40, 8, 91,183,110, 53,231,229,229, 29,121,156,242,126,227,198,141,239, 54,109,218,132,189, +123,247, 14,156, 50,101,138, 36, 40, 40,136,120,121,165, 18,139,217, 4,128,210,244,244,116, 81,165,241, 78,241, 15, 12,187,157, +124, 39, 45,218, 98, 54, 65,180,153,121, 86,106, 24, 12, 6,227, 17, 48, 88, 18,129,203,189,114, 43,197,171,146, 90, 9,171,104, +132,205, 84, 56,181,130,205,102,195,171,175,190,234,216,110,240,224,193,120,225,133, 23,192,113,220, 93,125,176, 8, 33,157, 93, +205,149, 33,138, 34, 14, 28, 56, 80, 56,237, 1,199, 57,150,178, 40, 75, 83,107,180,225,224,175, 31, 65,164,128, 88,232,123, 64, + 65,220, 26, 53, 88,154,166, 43,195,166,240,240, 1, 7, 10,240,192,245,164, 52, 8, 60,151, 91,209,188, 87, 20,166,249,127, 77, +185, 92,190,234,151, 95,126,233, 17, 27, 27, 27, 94,191,126,125, 46, 43, 43, 11, 5, 5, 5, 40, 40, 40, 0, 0,248,251,251,227, +194,133, 11,226,173, 91,183,146,228,114,249, 47,143, 83,222,139, 30,127, 51, 47, 56, 56,120,231,212,169, 83,135,101,100,100, 60, +157,157,157,227,247,251,143, 51,208,253,185,209,164, 93,143,193, 90, 19, 21, 20,137, 41,169,181,246,108,249,217,247,207,213,223, +193,108, 50,141, 36,100,193, 69,251, 52, 13,172, 44, 49, 77,166,201, 52, 31, 53,205, 39,198, 96, 81, 27, 29,183,240,247, 35,243, + 44, 54,209,203,254, 93,157, 58,117, 96, 54,155,177,117,235, 86,135,241, 16, 4, 1,130, 32,184, 21,193, 42,133,219,109,219,182, + 45,111, 42,134,219,238, 29,105,220,110,210, 97, 64,149,242,214, 87, 52, 97,174, 12,219,146, 61,103,255,191, 19, 57, 46, 23,148, +142, 99,197,233,225, 17, 29, 29,109, 59,116,232,208, 91,163, 71,143,254,170, 83,167, 78,161,125,250,244,145, 86,174, 92, 25,114, +185, 28,215,175, 95,199,254,253,251,205, 55,110,220, 72,210,233,116,111,213,175, 95,255,177,108, 30, 75, 73, 73,185, 84, 52,137, +232, 27,246,169, 24,228, 10,165,116,240,136, 55,195, 28,163, 8, 87,127, 7,163, 65, 15, 0, 2,155,166,129,193, 96, 48, 30, 1, +131,117, 59, 41,105, 5,128, 21,206,223, 61,253,244,211, 5,189,123,247, 86,218, 71, 20,218, 71, 3,154, 76, 38,152, 76, 38, 40, + 20,138, 10, 77, 8,229,206, 36,162,238,144,118,102, 67,248, 3,221, 43,110, 24,182,228,228,228,112, 86,124,254, 93, 90,181,106, +149,114,241,226,197, 33, 59,118,236, 24,188,111,223,190,206, 58,157, 46,130, 16, 2,165, 82,121,211,100, 50,237,148,203,229,171, + 30, 87,115, 85, 22,102,179,217, 58,101,250,151, 63,241,130,212, 42,138,102, 98, 54,155, 71,192,205,135,186, 51, 24, 12, 6,227, + 33, 24,172,210,208,233,116,222,132, 16, 33, 57, 57,249,174,117, 82,169, 20,183,110,221,178, 62, 14, 59,229,129, 27, 54,198, 63, + 70,116,116,180,173,232, 70, 96, 69,201,135, 61, 63, 9, 80, 74,141,132,144,137,132,144, 47,138,190,154,120,227,175,185,142,209, +130,132,204, 59,227,188,142, 69,175, 24, 12, 6,227, 17, 52, 88,123,246,236,177, 2,168,136,137, 74,251, 7,210,156,198, 14,219, +147,205,154, 53,107,216,136,184,226, 38,107, 62, 33,228, 7,187,225,114,119, 29,131,193, 96, 48, 30, 17,131,197, 96, 48, 30, 89, +147,101,188,151,117, 12, 6,131,193,248,103, 32, 0,234,150, 81, 41,159,117, 91,132,144,186,247,112, 65, 56,251, 8,105, 6,148, +163,185,211,133,102,231,123, 72, 39,211,100,154, 76,147,105, 50, 77,166,249, 68,106,186,210,126,108, 70, 39,210,162,217,200,255, +137, 5, 64,221,255,136,102,103,166,201, 52,153, 38,211,100,154, 76,147,105,254,123,154,143,219,194,129,193, 96, 48, 24, 12, 6, +131,241, 64, 41,181, 15, 86,165,152,190,224, 74,204,123, 46, 82, 32,253,220,134,123,218, 14, 0,166, 79,159,126, 95,102,238,195, + 15, 63,116,235, 41,205,149,234,246, 5,231,198, 24, 50,145, 0,233,103, 55,184,253,255, 36,188,239,251, 16,241,110,225, 7,124, + 78,111,111,152,198,138,207,189,209, 80, 67,252, 45, 68,210,211, 67, 33,233, 29,225, 33,105,121, 61,199,120, 72,103, 22, 55, 83, + 98,217,120, 62,143,102,179, 61,196, 96,252,243,248, 68,181, 30,226,231, 31, 52, 82,164, 84, 9, 0, 38,147,193,146,148,112,123, + 46,205, 62,191,186, 88,221,231, 91,187,127, 80, 72,216, 88,165, 66,173, 44,172,254,136, 41, 43,243,206,252,236, 27, 7,127,126, + 88,105, 37, 69,207, 78, 11, 13, 13,245, 62,120,240, 96,120,235,214,173,111, 37, 37, 37,229, 56,111, 83,218, 58,106,159,176,177, + 12,205,192,168, 70,207,123,104,212,175, 25,140,198, 72, 47, 79,207,180,172,204,204,133, 41, 55, 78,126,103,223, 38, 60, 60,220, +115,245,234,213,193,131, 7, 15, 78,142,143,143,207,119,165,201, 96,184, 52, 88, 28, 1,214,172, 89, 13, 74,105,209, 36,155, 20, +131, 7, 13, 46,117,187,202,242,228, 72, 81, 20, 95, 0, 48,148, 82,122, 42,217, 82,185,223,189, 36,100,215,174, 93,161, 22,139, +165,169,213,106,109, 4,160,145, 82,165,105, 96, 52, 26,210, 8,232,139, 79, 61,245,212, 73,119,117, 56, 10, 44,249,113, 57,166, +143,106,255, 7,128, 30,101,156, 88,211, 19,141,161, 21, 51, 72, 34,125,239,239,125,235,228,222, 42,130,106,141,159,157, 4,224, +145, 52, 88, 33, 33, 33, 74, 0, 47,114, 28,215, 73, 46,151,215, 48, 24, 12, 55, 1,156, 33,132,204, 79, 76, 76, 76,190,199,202, +141,139,209, 72, 94, 82, 41, 85,221,131,213,178, 70, 41, 57,121, 73, 58,139,184, 95, 36,230, 47, 42,106,136,170, 17, 34,171, 90, +217,123,239,219,125, 98,163,235, 71, 87,133,237,220, 62,152,204,230,222,199, 83,116,189, 23,157, 76,125,171, 26, 33,141,174, 81, +106,114, 51, 93,193, 0, 4, 74,105, 2, 0,132,133,133,249,136,162, 24, 11,160, 1,128, 83, 28,199,237, 79, 76, 76,188, 47,195, +246, 31,210, 12, 17, 69,241,229,192,192,192,167, 83, 83, 83,255,224, 56,110,233,189, 30,111,198,147,129,175, 95,208,107,223,254, +176, 86,102,255, 76, 69, 81, 50,168, 79,251, 97, 0,138, 25, 44,111,111,191, 23,127, 92,245,167,146,252,255, 9, 27,178, 49, 35, +250,143, 4,240, 80, 12, 22, 33,132, 80, 74, 49,125,250,116,178,100,201,146,225, 85,170, 84,169, 78, 41,189, 60,109,218,180,185, +206,219,149, 92,247,225,135, 31,210,162,223,210,210, 52,163, 98,218,108,124,233,133,129,237,199,141,126, 81,163, 82, 42,161,215, + 27,252, 22, 44, 89,254,229,119, 75, 87,244,124,161, 95,231,238, 0,176,120,241,226,190,149, 43, 87,142, 48,153, 76,241,211,166, + 77, 91, 94,158, 38,131,225,150,193, 42,114,233,184,122,241, 20,254,248,125, 11,142,157,186, 0,209,169, 56,213,169, 83, 71, 45, +147,201,250,135,201,184, 23,235, 53,106,217,166,247,115, 47, 18, 11, 81, 97,230,132,193, 21,158, 7,235,196,137, 19,242,148,148, +148, 25,145,181, 26,191,217,190,107, 31,174,118,116, 45,248,251,249, 64,228,100, 88,182,245,138,223,158, 69,195,191, 5,208,210, +109, 31, 68,128, 87,134, 63,143, 80, 25,122,252,186,229, 40, 82,114,108, 32, 4, 32,164,208, 16, 22, 24, 68,188, 59,162,205,135, + 21, 55, 72,132,243, 86, 17,140, 95,101, 0,128, 71,242,185,110,193,193,193,141,252,252,252,190, 27, 62,124,184, 79,141, 26, 53, +130,101, 50,153,202, 96, 48, 84,191,125,251,118,228, 87, 95,125,213, 37, 56, 56,248,211,148,148,148,117, 21,209,140,246, 86, 84, +121,170, 86,248,175,147, 71,189,216,172,102, 68,101, 8,198, 2,136, 70,109,229, 91, 55,174,181,156,245,227,186, 87, 98,188, 36, +131,206,229, 90,220,238,144,168,240,144,190,247,238, 75,131,163,171,169, 41, 76,103, 15, 66,194,243, 80,120,250,160, 57,207,131, + 35,180,246,135,251,147,222, 5,240,161, 27,149,238, 71, 0,222, 5, 64,164, 82,233,186,192,192,192,203,173, 90,181,170, 63,112, +224, 64, 82,183,110, 93,156, 58,117,170,225,239,191,255, 62,162,114,229,202,167, 45, 22,203, 95,106,181,250,200,181,107,215,220, + 50,110,213,170, 85,147,105,181,218, 22, 18,137,164,195,163,172, 25, 18, 18,162, 52,153, 76, 47,132,133,133,189,218,187,119,239, +122,189,122,245, 34, 53,107,214,196,165, 75,151, 26,255,249,231,159, 31, 54,104,208,224, 76, 98, 98,226, 98,153, 76,246, 83,114, +114,178, 91,147, 0, 15,172, 75, 46,173, 62, 75,107,221,235,250, 18,199,200, 27,128,146, 82,154,236,198,182,129, 0,212,148,210, +235, 15, 91,243, 31,186,209,185, 0,192,215,254,208,122,142,227, 28, 15,176,119,126,181,191,183,217,108,218,219,183,111, 87,117, +161, 89, 83, 20, 69,183, 91, 2, 8, 33, 52, 37, 37,229, 82,153,117, 60,168, 12, 0,102,125, 56, 1, 73, 9,183,160, 55,104,245, + 57, 57,153,203, 74,110,151,147,157,181,226,229,161, 61,223,144,201, 20,146,208,202,225,120,119,250,151,176, 71,189, 30, 22,211, +167, 79, 39, 31,126,248, 33, 22, 47, 94,220, 11, 64, 44,165,116,127,116,116,244,188, 18,215, 44,199,186, 15, 63,252,112,238,244, +233,211, 9,128, 82,141, 80,165,168, 6,195,134, 13,234,219,254,157,183, 95,211,216,191, 83, 42, 21,120,251,141,145, 50,189,209, +212,114,193,247,203, 95,157, 59,115,242, 18, 0, 29, 1, 52,161,148, 30, 7,176,188, 60, 77, 6,195,109,131, 37, 82,224,143,223, +183,224,237, 41, 31,224,135,101, 63,225,167,207, 70,146, 38, 77,154,180,165,148,190, 24, 17, 85,173,255,179, 67, 70, 42, 35,170, +215, 69,129,232,137,248, 12, 17, 39,254, 90,133,146,119, 62,174,216,182,109, 91, 19, 74,241,227,232, 41, 95,213,170,223,176, 41, +206, 38, 89,113, 48,193, 6,237, 53, 27, 4, 94, 15, 81,172,248, 16,115,123,179, 95,227,198,141,145,152,109,197,254, 75, 38,240, + 28,192,113, 0,207, 17,240,228, 30,247,148,104,186, 50,227,199, 19, 49, 25,169, 34, 32,154,174, 60,106, 7, 50, 52, 52,180, 99, + 84, 84,212,156, 55,222,120, 35, 40, 37, 37,197,247,216,177, 99,144,203,229,240,241,241, 17,252,252,252,106, 77,153, 50, 37,119, +214,172, 89, 19, 3, 3, 3, 79,166,166,166,222,116, 71,179,142, 70, 22,221,174, 81,204,161,169,211, 62,244, 50, 29,253, 19,217, +171,214,128,231, 40,164,106, 13, 66,148, 74,204,235, 26,225, 59,121,119,194,186,122, 74,101,244, 25,189, 62,201, 29,205,202, 1, +190, 93,171,215,172,133,236,245,223,226,106,158, 17,135,211,141,232,211,174, 25,170,249, 42,209,192,106,131,159, 66,232,232,202, + 96, 17, 66,124, 0, 76, 54,153, 76,156, 84, 42, 37, 10,133,162,255,178,101,203,118,215,172, 89,211, 96,223,166, 69,139, 22,104, +209,162, 5,209,106,181, 13, 14, 30, 60,216, 96,253,250,245,230,224,224,224, 3, 41, 41, 41,115,202,210, 85, 42, 85,183, 13, 6, +125,101,149, 90,109, 90,186,100,201,174, 22, 45, 90, 80,137, 68,130,251,209, 4,128,160,160,160,117, 17, 17, 17,254, 51,103,206, +204,111,214,172,217, 3,209,140,140,140,220, 30, 27, 27,219,161,107,215,174, 66,235,214,173, 17, 18, 18,226, 88,231,239,239,143, +216,216, 88,146,144,144, 80,127,255,254,253,243,183,111,223, 62, 47, 50, 50,242,175,248,248,248,174,174,142, 15, 5,106,222,207, +250, 18,240, 0,102, 17, 66,150, 80, 74, 15,150,115, 60, 27, 1, 24, 2,224,179,127, 73,179, 92,148, 74,101,170,193, 96, 8, 0, + 0,133, 66,145,166,215,235, 3,221, 48, 55,154,207, 63,255, 60, 64, 42,149,130,231,121,216,108, 54,199, 66, 41,133, 40,138,197, + 58,195,126,246,217,103,110,205,237,118,231,206, 29, 45, 10, 71,127, 83,167, 69, 44,237, 53, 34, 34,194,223, 29,205,164,132, 91, +240,176,196,103, 6,122, 40,195, 35, 61,188,103,180,110,221,122,134,243,250, 86,209, 94, 0,242,160,215,223,185,149,148, 0,191, +127,161,110,243, 94,178,100,201, 11,139, 23, 47,238, 67, 8,209, 22,237,223,122,111,190,249,230, 95, 37,246,121,189,162, 87,109, + 72, 72,200, 30, 66,200,230,208,208,208, 31, 1,220, 21, 29,246,210,120,140,124,107,204, 43, 26, 0,152,190, 54, 3,211,214,166, +227,131,103,124, 49,233,105, 53,134, 15,237,167,254, 97,249,175, 35, 1, 44,113,210,190, 20, 29, 29, 77, 46, 94,188,200,204, 21, +227,193, 68,176,142,157,186,128, 31,150,253,132,161, 67,135,225,220,206, 69, 91,158,122,230,249,238, 45,218,118,133, 85, 26,128, + 75,105, 4, 9,241, 20, 2,111, 5, 7, 17, 55,254,222, 72, 57,142,251,169,132, 70,153,211, 38,108,217,178,229,173, 42,213, 26, +124,250,238,180, 79,248,179,169, 50,252,184, 95, 15,155, 49, 23,250,140,107,208,166, 93, 65,254,157, 11,200, 73, 58,123,134,227, +184,105,238,106,222,157, 7, 64,164, 20,132,146,194, 42, 7, 20,119,117, 26,131,155, 67, 66,205,218,139, 81, 53, 99, 98,178,101, + 54,192,172,189,232,250,191, 31,252, 48,211,178, 52, 67, 66, 66,186, 68, 68, 68,124, 49,114,228,200,176, 51,103,206,120,234,116, + 58,237,209,163, 71,247,166,164,164, 4,250,251,251, 39, 12, 28, 56,176, 85, 96, 96, 96, 64,219,182,109, 85,219,182,109,123, 15, +192,203,174, 52,235,170,101, 49,177, 77,235, 30,254,248,243,217,234,140, 53,223,192,116,237, 52, 14,103,232,113, 38, 83, 79, 67, + 61,114,200,128,104, 95,168,100, 2, 70, 54, 14,212,188,177, 45,254,179,162,139,153,203,188, 71, 6, 7, 86,181,232,117, 48,232, + 45,216,114, 61, 87,127, 56, 47, 55,128, 59,125, 59,125, 82,175,166, 10, 62, 61, 25, 65, 26, 73,245,138,238, 79, 66, 8, 20, 10, + 69,169,235,188,189,189,209,178,101, 75, 68, 69, 69, 73, 7, 15, 30,220, 17,192,156,178, 52,205,102, 83,176, 40, 82,120,122,122, + 74, 59,117,234, 68, 8, 33,180,228, 3,204, 43,170, 9, 0,106,181,186, 91,131, 6, 13,248, 85,171, 86, 21,220,185,115,231,230, +211, 79, 63,157,161, 80, 40,196, 18,219, 32, 60, 60, 28,175,191,254,186,244,229,151, 95,118,169, 25, 24, 24,216,101,197,138, 21, + 32,132, 56, 46,220, 37, 9, 15, 15, 71, 80, 80, 16,122,244,232, 33,244,235,215,175, 75,121,251,115, 96, 93,114,201,110,158, 6, +212, 37,229, 94, 68, 6,212, 37,148, 0,151, 75, 70,178, 74,106, 82, 74, 51, 9, 33, 11, 1,172, 39,132,244, 47,205, 16, 17, 66, + 90, 3, 88, 11,224, 41, 74,105,154,171,227,238,172, 41,147,201,164,102,179,217,167,164,241,169,168,166,115,196, 39, 46, 46, 14, +141, 27, 55,134,243,171,193, 96,112, 60,123,149, 16, 18,224,110,249,228,121, 30, 95,125,245, 21,120,158,135, 84, 42,133, 76, 38, + 43,245,181,105,211,166, 21,173, 67, 18, 8, 33, 92,149, 42, 85, 38,243, 60,255,178,201,100, 10,147,203,229,201, 54,155,109,153, +175,175,239,204,184,184, 56, 11, 0,239,210,158, 13,235,172,169, 55,104,245, 84, 20,149, 38,147,193,162, 84, 43,195, 15, 30, 60, + 88,163,172, 99,110, 52, 26,209,169, 83, 39,164,230,107,211,237,191,121, 88,117,221,193,131, 7,195,171, 84,169, 82, 19, 64,108, +209, 87,251,146,146,146,218, 58,125,118,102, 95, 82, 82,210, 83, 69,239, 47,223,190,125, 59,220,110,176,156, 53, 77, 38,115,164, + 70,163, 6, 0, 76, 91,155, 14,227,138,170,144, 15,187,142, 17,205,141,240,240,240,128,205,102,173,249,230,155,111,254,132,194, +115,226,111, 74,105,223, 55,223,124,179, 22,128,221,225,225,225, 27, 0,228, 62,236,122,254, 73,208,124, 44, 13, 86, 81,147,178, +189,105,153,136, 20, 24, 60,104, 48, 68, 10,108,221,186, 21, 98, 97,221,237,153,168,247, 70, 65,188, 63, 4, 78,132,192, 19, 8, + 60, 0, 16,100, 38, 94,128, 73,155,121, 32,209, 20, 26, 47,186,225,239,183,110,221,218, 50,162,118,179,207,166,125,252, 37,247, +195, 62, 61,114,117, 6,100,156,223,132,148, 99,223,167,136, 86,243, 38,142,227,142,115, 28,119,162, 81,253,122,151,130,131,131, +239,121,214,110,145, 2, 54,103, 99, 37, 2,228, 49,139,238,134,133,133, 61, 85,173, 90,181, 79, 70,141, 26, 21, 30, 23, 23,231, +145,159,159,159,190,115,231,206, 75,102,179,249, 36,199,113,115,147,147,147,219,173, 88,177, 66, 53,105,210,164,174, 53,107,214, +172,185,125,251,118,157,203,200,149, 90, 90,255,249, 33, 3, 15,247, 25, 53, 78,113,254,215,239, 32,191, 16,135, 69, 87,178,109, +199,211,245,239, 25, 10,172,115,148, 42,161,117,182,209,186, 99, 66,243, 16, 46, 88, 45, 65,101, 79, 73,123,119,211, 43,147, 41, + 4, 42, 40, 96, 50, 89,161,181,136,166,243,233, 84,251, 86,187,122,102,170,246, 87, 0,128,192,113,130, 27, 39,118, 54, 33,228, + 51,153, 76,246, 62, 33,132,246,233,211,231,102,163, 70,141, 12, 0,160,215,235, 97, 52, 26, 33,145, 72, 96, 48, 24,112,227,198, + 13, 28, 57,114, 4, 62, 62, 62, 21,218,175,217,217,217, 8, 15, 15,135, 70,163,185,111, 77,155,205, 70,190,251,238, 59,217,185, +115,231,100,191,253,246,155,231,132, 9, 19,180,205,155, 55,191,245,244,211, 79,167,121,122,122, 90, 79,157, 58,133,195,135, 15, + 35, 39, 39, 7,205,154, 53,115, 75,211,100, 50, 65, 16, 4,232,245,122,200,229,114, 8,130, 0,171,213, 10, 81, 20, 29,166,171, +160,160, 0, 89, 89, 89,144, 74,165, 40,205, 40, 58, 99, 55, 75, 3,234, 18,250,235,150, 67,105,128, 72, 97,202,183,192,148,107, +129,209,190,100, 91, 6,140,159,221,224,215,179,148, 84,160, 18, 62, 66, 8,233, 15, 96,109, 73,147,229,100,132,250, 83, 74, 79, + 85, 84,211,108, 54, 31,176, 27, 31,133, 66, 17, 64, 72,161, 49,148,203,229, 22,163,209,216,161, 34,154, 0, 16, 23, 23,135, 70, +141, 26,241, 69,154,206,221,108,196,138,158,151,132, 16,240, 60, 15,185, 92, 14,142,227,208,188,121,115,244,235,215, 15,209,209, +209, 72, 72, 72,192,246,237,219,113,241,226, 69, 72,165,210, 98, 77,133,238,208,190,125,123, 62, 50, 50,242, 80,151, 46, 93, 98, +198,142, 29,171, 8, 15, 15,199,165, 75,151,170,204,255, 31,123,231, 29, 22,197,213,182,241,251,204,246,194,210,123, 17, 80, 64, +170,138,128,136, 21, 75,108,177,199, 26,163, 49,177, 39,118, 99, 73,140, 61,154, 24, 99,141, 45,177,247,104, 98,239,189, 87,176, +161,136,162,128,244,222,183,239,206,249,254, 0,124,213, 40, 44,232,251, 38, 95, 50,191,235,154, 11,157,157,185,231,204,204,153, + 51,247, 60,167,173, 90, 53,229,210,165, 75,221, 66, 66, 66, 66,163,162,162,170, 76,115, 70, 90,202,138,126,221, 34, 63, 45,200, +207,219, 90,203,207, 98,150, 70,163,193,195,135, 15, 77,222,231,127, 85,198, 53,109,218, 52,137, 82,250,132, 82,122,145, 16, 82, + 47, 53, 53,181,133,139,139,203, 81, 74,169,252,181,107, 94,154,154,154,218,209,197,197,165,136, 82,122,143, 16, 18, 71, 8, 73, + 74, 73, 73,249,243, 71,146,133,121,118, 73, 73,169,131,153,153, 28,223,116,179,132,248,147,167, 24,221,138, 7,189, 94,143,103, +207, 18,225,233,225, 70,118,110,216, 31, 10,224, 38,128,176,168,168, 40, 0, 8, 5,144,144,156,156,236, 84, 97,176, 56, 56,170, + 29,193,122,189, 23,160,125,189,238,168, 37,226,245,188,127,108,233, 53,111, 29,117,119, 8,252,176, 60, 18, 93, 22,169, 78,186, +115, 12, 44,203,110,202, 52,161, 87,222,213,171, 87, 37, 6, 22, 27, 38,127, 61,135, 89,123, 86,133,204,140, 52,164,157, 95, 8, + 85,214,195,141, 82,169,116, 98,155, 14,157,139,106,114, 34, 47,247,104,116, 17,166, 4, 90,218, 56, 66,163,163,229, 6,235, 85, +147,245, 79,193,217,217,185,139,151,151,215,156, 3, 7, 14,184,171, 84, 42,197,229,203,151, 11, 78,158, 60,249, 68,167,211,173, + 75, 79, 79,223, 86, 94,232, 28,224,243,249,115, 1, 64,161, 80,240,121, 60,158,180,178, 70,154, 65, 22,194,134,131, 63, 29,112, +105,194,178, 95, 37, 79,238,223,193,178, 61, 71, 32, 54,106,141, 15,242,181,221,239, 23,235, 15,149,111,118,166,147,179, 44,149, +130,186, 9, 24, 2,107,169,208, 49,130, 16,201, 85, 74,213, 85,165,217,214,205,157,209,215,242,196, 69,131, 26,102, 10,161, 8, + 0, 92,124,252,121,183, 85,122, 92,190,251, 16, 18,137,149,208,196,151,236, 12,123,123,251,198,231,207,159, 39, 37, 37, 37,234, +123,247,238,193,218,218, 26, 14, 14, 14,176,176,176,192,195,135, 15,113,250,244,105,196,197,197,129, 82,138,250,245,235, 87,235, +218,102,102,102,162,168,168, 8,221,187,247,104,157,150,150, 42,177,119,112,212,158, 57,125,234, 84, 77, 52, 89,150, 37, 0, 16, + 24, 24,136,192,192, 64, 65,106,106,170,229,161, 67,135,204, 22, 44, 88,224,108,103,103,119, 83,165, 82,189, 98,156, 76, 53, 88, + 0,160, 86,171,161,209,104, 32, 20, 10, 33,145, 72, 32, 20, 10, 81, 84, 84,132,204,204, 76, 20, 23, 23,191,136,184,153,170,251, +226,211,100, 75,179, 91,127,206, 28,159,218,215,240, 75,247,114,185,201, 58, 67, 8,169,184,191,153,229,127,123, 85, 86,213, 87, +133,230, 43, 17,150,151,162, 76,130,154,104,134,132,132, 84,104,188, 82, 74, 72, 36,146,172,138,200,149, 68, 34, 49,105,170, 46, + 66, 8, 88,150,133, 80, 40, 68,253,250,245,241,205, 55,223,224,193,131, 7, 56,123,246, 44,156,156,156,208,165, 75, 23, 8, 4, + 2, 36, 38, 38,190,210, 62,203,148,155,147,152,152, 56,165, 93,187,118,129,203,150, 45,147, 36, 37, 37, 33, 54, 54, 22,230,230, +230,152, 51,103,142,120,234,212,169, 94, 87,174, 92,153, 1,224,199, 42,175, 97,222,195, 61,229, 6, 23,193,193,193,159,182,105, +211,230,207,229,170,157,157,197,142, 29, 59,236, 43,140,215,203,251,252,175, 72, 77, 77, 45,152, 53,107,214, 18, 63, 63,191,165, +229,213,130,205, 41,165,242,180,180,180,200, 61,123,246, 16, 0,232,213,171, 23,117,118,118, 62, 87,158, 55,238, 45, 93,186,180, + 85,108,108, 44,157, 53,107,214, 27,203,185,244,172,244, 53, 63, 46, 95,187,100,214,180,241,162,175, 58,201,240, 89,184, 6, 44, +203,130,199,227, 97,217,234, 13,250,184, 7,247,238,134,134,134, 30,162,148,118, 47,143,102,150, 0,136, 35,132, 36,136, 68,162, +180,103,207,158,113,238,129,163, 74,152,151,195,227,111,219, 40,235,222, 62,176, 44,235,100,105,231, 98, 61,252,227,246, 96, 89, +192,192, 2, 6, 35,133, 74, 89,138,140, 71,103,149, 90,173,214,164,135, 46, 55, 55,119,238,224,113,223,123,221,122,206, 71,122, +190, 22, 41,167,231, 80, 77,206,163,143,186,116,233, 50,164, 77,155, 54, 69, 53, 62,145,242,158,143, 46,194,148, 64, 43, 91,231, +115,223, 46, 92,143,155,207,180, 96,233,127, 34, 89, 70, 22, 96,255, 33, 1, 44, 23, 23, 23,111, 43, 43,171, 69, 7, 14, 28,240, + 16,137, 68,138,248,248,120,227,185,115,231,210,244,122,253,170, 10,115, 85,110,194, 6, 4, 5, 5,233,101, 50, 25,148, 74,165, + 90,175,215,151,188,205, 92, 5, 74,165,174, 33, 65, 65, 23, 38, 44,251, 85,162,214,106, 81,168,210,192,206,201,209,120, 47, 95, +217,253, 94,177,230,208,139, 8,151, 66,208, 36,180,142,139, 11,145, 40, 64, 1,164, 22,107,211, 76, 49, 87, 0, 32, 87, 88, 48, +174,161,145, 8, 29,187, 2, 42,158, 5, 5, 0, 43,123,103,166,213,168,239,208, 97,217,121,104,248, 10,147, 45, 48,159,207,215, +120,123,123,171,203, 11, 85,228,230,230,226,193,131, 7,200,203,203,195,138, 21, 43,240,232,209,163, 23, 47,221,234, 25,140, 23, + 47,113,100,103,103,137, 41,165,200,202,204, 16,213, 84,179,194, 96,189,116,239, 48,114,228, 72,126,105,105,169,228,101,115, 85, + 93,131, 85,145, 14, 74, 41,180, 90, 45, 10, 11, 11,161,213,106,241,228,201,147, 23,230,170, 60,130, 86,189,243,215, 22,235,223, +184, 94,157,167,127,135,234,132,203, 0,132, 47, 13, 82,232, 80, 83,115,245,154,241,169, 86,244,167,170, 8, 22,222,208,128, 89, +165, 82, 57, 80, 74, 73, 84, 84, 20, 76,105,127,245,178,193, 18,137, 68,232,221,187, 55, 98, 98, 98,144,156,156, 12, 62,159, 15, +181, 90, 13,181, 90,141, 70,141, 26, 65, 36, 18, 85, 55,130, 69, 5, 2,193,128,209,163, 71, 75, 18, 18, 18,144,147,147, 3,134, + 97, 96, 48, 24, 96, 52, 26, 49,100,200, 16,169, 72, 36, 26,128,106, 54,196,190,125,251,118,251,203,151, 47,215,125,125,201,206, +206, 46, 20,139,197,127,203, 50,112,207,158, 61,164, 87,175, 94,180, 87,175, 94,180,194,104,153, 74,118,194,253, 53,219,118,238, + 59,249,205,172,133, 37, 57,185,121,144,203,229,200,206,201,197,183,115, 23,233,207, 94,186,113,110,228,144,143, 35,150, 44, 89, +242, 61,128,184,242, 93,226,150, 46, 93, 58,104,232,208,161, 91, 42,134,107,224,224, 48, 57,130, 85, 81, 69,248,150, 47,187, 96, + 75, 91,151,179,211,230,255,106,182,247, 46, 15,249,233,113, 80,103,197,193,173, 97, 55,100,198, 93, 6, 53,234,255,120,240,224, + 65,105, 85, 7, 59,126,252,184,143, 91,221,208,177, 13, 66,194,177,240,112, 9, 74, 30,236,132, 54, 63, 97,117,231,206,157,247, +189,235,137,176, 20,152, 48,160, 73,160,149,141,211,185,175,191,255,213,250, 96,140, 0,185,105,113,120,180,127, 10,140,186, 63, +213,138, 29,169,174,190,148,213,138, 74, 10, 50,161, 45, 54, 66,194, 40, 37,127,245,141, 75, 77, 77,125, 18, 24, 24,184,249,151, + 95,126, 25, 81,191,126,125,217,216,177, 99, 31, 23, 21, 21,205, 75, 75, 75,251,237,165, 23,121,235,218,181,107, 79,154, 51,103, +142,215,243,231,207,113,225,194,133, 39, 60, 30,239,230,219, 52, 99, 84,170,148,122, 22,226, 85,151,182,175,251,138,231, 94, 23, +187,102, 77, 54, 92,185,255,176,235,131, 98,195,209, 23,230,202, 76,228, 23, 17,232,125,232,203,209, 35, 24, 99,244, 49, 60, 74, +206, 66,122,169,254,180,201,233, 46, 86,234, 5, 98, 41,204, 28, 61,144,164,102,133,174,174,174, 55,134,246,232, 34,100,120,124, + 48,124, 33,158, 21,104, 76,126,137, 27, 12, 6,241,195,135, 15, 9,128, 87,204,157, 90,173,126,107,196,231,125, 98,170,230,155, +218, 71, 1,128, 94,175,175,177,230,203, 17,155,170,142,197,178, 44, 52,154,106,244, 21,209, 20,188,249, 30,168,114,244,239,227, +178,149,255, 21,189,139,185,170, 48, 62, 21, 13,208,197, 98,241, 11,147, 98,106,148,169,146, 8, 86,141,126,127,147, 65, 23, 10, +133,240,245,245,197,133, 11, 23, 96,105,105, 9, 51, 51, 51,200,229,114, 72, 36, 18, 88, 90, 90, 66, 36, 18,129, 97,170, 53, 68, + 32,213,233,116,181, 92, 93, 93,241,228,201, 19, 72, 36,146, 23,139, 88, 44,134,175,175, 47,148, 74,165, 11,254, 81,177,250,255, + 14,131,122,181,237,182,102,251,222,129,187,246, 30, 26,165, 81,171,131,124,235,122,211,216,251,209,119, 71, 14, 25,208,129,187, + 58, 28,239,213, 96, 85, 82,168, 4, 91,218,186,156,157,242,221, 47,230,187,163, 25, 20,164, 63, 66,210,177,175,139,141, 58,101, + 62,203,234,221,243,159, 94, 2,128, 77, 38,126,201,135, 53,105,221,141, 57, 23,171,133,174, 56, 13, 69, 49,187, 18,197, 98,241, +212,247,113, 34,110,162,148, 64, 43, 27,167,115, 83, 23,252,106,189,247, 46, 31,121,105,113,120,122,100, 90,161, 81,167,108, 29, + 21, 21,245, 98, 28, 45,135,192,238,248,108,202, 18,108,248, 97,188,201,218,159,136, 68,221,250,250, 91,118, 30,210, 60, 13, 70, + 98,196,128,135,177, 29,157,155,147,110,105, 23,233,254,191,242,230,197,196,196,124,231,237,237,205, 24, 12,134,207,116, 58,221, +172,180,180,180, 61, 47, 69,174, 62,112,119,119, 95, 56,119,238, 92,215,164,164, 36,209,213,171, 87,243,110,223,190,205, 26,141, +198,239, 43,211,188, 87,168,153, 28,164, 16,242,188,221,156, 71, 63, 73, 73,233,122,191,200,112,172,226,183, 32,185, 40,176,121, + 3,191,203,115,103,125,173,208, 94,218,131,210,244,100,172,136,202, 40, 98,141,250,105, 38, 70,221,172,221,133,148, 76, 27,250, + 41, 91, 92, 92, 12,153, 72,200, 38, 63,122,202, 27,216,182,133,241,135, 41, 19,153,140,140, 12, 40, 75, 75,249, 46, 46, 46,214, +169,169,169,121, 85, 68, 8,230, 0,104, 93,191,126,125,180,107,215, 46,113,246,236,217,177, 47,155,143,191,153,193,122,227,215, +181, 78,167, 35, 53,213,124, 57,130, 85,149,193,170,118, 4, 75, 83,244,102, 35,165,204,126, 87,131,245,156, 16, 82,171,226,223, +239,227, 30,168,213,106,251,151,170, 6, 65, 41,173,113, 56,171, 60,130, 85,227,223, 95,134, 97, 24, 80, 74, 33, 18,137, 16, 23, + 23, 7, 71, 71, 71, 24, 12, 6,200,229,114,200,100, 50,148, 71,148, 33, 18,137,192,231,243,171,147, 76, 86, 36, 18, 61,143,139, +139,171,107,101,101, 5,163,209,248,138,201, 74, 72, 72,128, 92, 46, 79,173,110, 4, 43, 56, 56,248,184, 84, 42,117,127,125,189, +157,157,157,197,223,245,229,245,114,228,170, 87,175, 94,116,220,184,113,213,214, 88,254,221, 87, 91, 1,108, 29, 55,110,220,230, +237,235,142,132,134,134,134, 30,246,243,243, 35, 0,192,245, 24,228,120, 47, 6,171,162, 80,170,248, 91,209,158,201, 69,152, 18, +108,105,227,124,118,210,220,181,230,219,111, 49, 40, 76,143, 69,218,169,233,133,172, 78,217,154, 97,152,244,228, 43,191,236, 1, +160,140,142,142, 62,111, 23,216, 29,132,148,245,220,123,211, 72,238,229, 5,125, 67, 95, 31, 31,236,142, 49, 64,157,113, 23, 12, +161,155,218,182,109,171,124,215,147, 8, 9, 9, 9,180,178,113, 58, 55,121,254, 47,214,187,111,243,145, 95,102, 2, 11, 89,157, +178,117,170,206,245,149, 65, 74, 89, 2,108,248, 97, 60, 88, 19,138,225, 33,132, 88,241,228,146, 85, 3,219,133,245,113,175,227, + 10,150,234,193, 10, 41,122, 78,182,229,199, 69, 43,247,213,106,199,251,141, 45, 97, 71,165, 92,253,235, 70, 31,127,242,228,201, + 92, 71, 71,199,189, 25, 25, 25, 47, 90,167,186,186,186,118,244,240,240,152, 63,103,206, 28,143,148,148, 20,197,237,219,183,139, +246,236,217,147,192, 48,204,156,244,244,244, 42,191,238,239, 23,235, 38, 6,154,137,214,197,148, 24, 94,140,161, 19, 32, 23,214, +255,116, 96,255,171,109,251,127, 42,121,122,106, 43,172, 19, 30, 98, 89,116,166, 49,181, 88,221, 63, 86, 73, 51, 76, 49, 87, 98, +177,120,207,138, 61,123,158,212,171, 87,143,148,150,150, 66,175,215, 35, 39, 39, 7, 63,110,219,253,128, 82, 10, 43, 43, 43,156, + 58,117,138, 29, 59,118,236, 30, 23, 23,151, 94,111, 51, 89, 47, 13,211, 0,161, 80, 72,164, 82,169,103, 98, 98, 98,162,135,135, +135,250, 77, 38, 69, 44, 22, 87,219, 96, 73,165, 82,176,236,219,131, 0,213,209, 52, 24, 12,196,148,245,213,209,172, 72, 91, 69, +227,246,215,215, 87,192,227,241,192,178,108,165,231,242,103,247,246,150, 8,150, 50,235,157, 12, 22,165,212,189,162, 35,205,223, +173, 32, 44,143,132, 1, 0,251,182,161, 24,170, 19,193, 42, 55,123, 16,137, 68,184,112,225, 2,186,116,233, 2, 74, 41,196, 98, + 49,100, 50, 25, 36, 18, 9, 46, 95,190, 12,145, 72, 4, 30,143, 87,157, 40, 22, 53, 24, 12,219,126,254,249,231,175, 23, 44, 88, + 32,173, 56, 70,133,193,250,233,167,159, 84, 26,141,102,155, 41, 6,139, 88, 5,244,181,180,178,254,164,160, 32,119, 83, 19, 95, +203, 74,123, 17,190,105,159,242,246, 88,255,117, 42,134,105,160,148,118,123,125, 40,134,138,109,198,141, 27,135,215,135,112,168, +108,152, 6,103,103,103,171,117,235,214, 13,101, 89, 54,160,124,213,235,189, 5, 43,238, 99,197,251,169,162, 87,225, 43,189, 8, + 57, 56,170, 29,193, 98, 8,224,196,127,238,103,105,227,122,118,194,220,181,230,155,175,243, 80,152,254, 16, 57,103,191, 45,164, + 6, 85,235,168,168,168,219,246,245,186, 35,188,105,235,102,109, 63,236, 5,135,131,187,113,243,202, 25,252,184, 98, 3,190, 26, +253,121,165, 31, 74,246,246, 54,200,185,162,134, 62,255, 9, 8, 33,209,239,122, 2,141, 26, 53,242,182,180,118, 60, 55,105,222, + 47,214, 59,162,248, 40, 72,251,143, 9,156,182,242,236,237, 47,134, 14,122,101,123, 83,167,199,249, 68, 36,234, 22,232,227,186, +190, 95,199,166, 86, 22,196, 0, 67, 82, 44,214,125,218, 7, 81, 93,116,104,218,215, 2,141, 58, 41,224, 21, 44,233,115,228,215, +188, 54,206,205,201,144,191, 50,154,245,178,185,114,118,118,238,226,234,234, 58,251,240,225,195,238, 6,131, 65,113,225,194,133, +226, 61,123,246, 60, 53, 24, 12,203,211,211,211, 15,155, 28, 29, 43,209,190, 48, 87, 65, 22,194,134, 67, 62, 27,116,105,236,210, + 53,146, 7, 81, 55,177,112,219, 65,152,243,244,198, 91, 25,234,222, 49, 37,255,169, 62,172, 52,163,241,249,115,119,236,216, 33, +247,247,247, 39,185,185,185, 47, 34, 45, 58,157, 14,133,133,133, 40, 46, 46,134, 70,163, 65, 80, 80, 16, 51,107,214, 44,249,183, +223,126, 59, 23,192, 40, 83,211,107,103,103, 7,161, 80, 8,157, 78,247,194,164,136, 68, 34, 88, 90, 90,162,176,176, 16, 39, 79, +158, 68, 85,131, 83, 10,133,162,116,134, 33,110,102, 10,133, 94, 46,151, 83,185, 92,254,167,109,170,171, 89,110,114,178, 59,118, +236,104, 55,103,206, 28, 65, 72, 72,200,139,245, 21, 85,132, 53,209,164,148, 42,219,181,107, 39, 91,190,124, 57,220,221,221,161, +213,106, 95, 49, 82, 12,195, 64, 40, 20, 34, 57, 57, 25,243,230,205, 3,165,212,244, 15, 25,117,190, 30, 65,131,236,161,202,213, + 67,149,171,135, 58, 71,135,210, 44, 61,244, 74,227,223,173, 0,171, 73, 3,116, 19, 34, 97,246,239, 26,193,170,168,174, 20,139, +197, 72, 76, 76,196,241,227,199, 17, 17, 17, 1,115,115,115,148,150,150,226,226,197,139, 72, 77, 77,133, 88, 44, 6,143,199,171, + 86, 35,247, 90,181,106,253,112,227,198,141, 46, 99,198,140, 9, 24, 54,108,152,212,207,207, 15, 9, 9, 9, 88,178,100,137,250, +222,189,123,241, 86, 86, 86,115,128,170,231,153,117,113,171, 53,118,221,182, 67,130,193,253, 59,142, 6, 74, 97, 74, 47,194, 87, +247,249,223, 52,118,127,203, 48, 13, 29,223,178,249,203, 67, 56,188, 50, 76,195,203,236,219,183,207,211,197,197,197, 15,101, 61, + 3,129, 63,247, 22,124,153,155, 81, 81, 81, 97,224,122, 17,114,188, 15,131, 85, 94, 64,143, 15,255,232, 27,243, 77,215,248,200, + 79,141, 65,225,197,153, 47,204, 21, 80,214,240,221,190, 94,119, 24, 89,138,214, 29, 62,170, 24, 20,244,245, 66, 38,232,229,113, +171, 4, 18, 69,144,129, 10, 1,168, 97, 40,120, 10,145, 72,116,187,186, 9,126, 93,147,101,217,137,141, 63,250,198,122,203, 77, + 62, 10,211, 30, 34,251,220,140, 66, 86,167,108,157,172,117,189,253,197,208, 65, 38, 53,106, 39,132,180,173, 24,211,227, 19,145, +232, 91, 1,143, 76,255,176, 69, 67, 97,179, 96, 31,200,179, 18,145,145,146,134, 93, 15,179,243,226,243, 53, 67, 46, 19, 29,146, +158,106,214,117, 26,106,109,109,229, 40, 64,231, 17, 54,214,215, 14, 22,237,115,105,205,232,168,142, 46, 72,187, 68,103,189,174, +249,190,168, 74,211,197,197,197, 91,161, 80,252,120,236,216, 49, 59,145, 72,100,254,224,193, 3,227,222,189,123,147,141, 70,227, + 79,233,233,233, 59,107,162, 25, 40,149,186, 6,212,245, 60, 63,118,241,106, 73, 73,169, 18,165, 90, 29,156,221, 92,140,231,163, + 99, 63,138, 41,209,238, 55, 69,211,193,193,161, 85,255,254,253,235,135,132,132, 48, 47,155, 43,173, 86,139,162,162, 34, 20, 23, + 23,163,168,168, 8, 69, 69, 69, 72, 77, 77, 69,211,166, 77, 25, 63, 63,191, 32, 7, 7,135, 86,153,153,153,103, 95,215,124,105, +152,134,175, 1, 48, 50,153, 44,238,202,149, 43,234,143, 62,250, 8, 82,169, 20,165,165,165,112,117,117, 5,203,178,184,120,241, + 34,226,226,226, 10, 0,236,200,200,200, 56, 85, 89, 58, 85, 42,101, 45, 66, 8,207, 92,161,104,219,190,125,251,254, 67,134, 12, +177,124,121,251,154,104, 2, 64,118,118,182,199,133, 11, 23,190,237,214,173,219,232, 14, 29, 58,200,166, 77,155, 38,240,244,244, +132,193, 96, 32, 53,213,204,207,207,183,136,142,142, 94,212,172, 89,179, 47, 58,116,232,192,159, 63,127, 62, 44, 44, 44, 96, 52, + 26, 33,149, 74, 81, 84, 84,132, 57,115,230,224,210,165, 75, 6, 74,233,202,194,194,194, 73,149,105,190, 50, 14,214,132,197, 13, + 42,203,135,111, 27, 7,235,175,200,243, 42,149,202,161,186, 81, 49, 83,210, 25, 29, 29, 77, 95, 31, 15,171,178, 8,214,155, 52, + 43,162, 75,124, 62, 31, 25, 25, 25, 56,116,232,208, 43, 99, 96, 85, 44,111,171, 34,124, 75, 58,233,185,115,231,140,132,144, 8, +131,193, 48,101,220,184,113, 67,148, 74,165,171, 92, 46, 79,211,233,116,155, 44, 45, 45, 43,198,193, 18, 86,165, 41, 18, 73, 4, +132, 97, 32,149,200,165, 42, 85,118,210,155,122, 17,190,118,173,147, 68, 34, 7,155,138,125,254, 87,247,253,181, 97, 26, 94, 25, +138,225,181,125, 94, 25,194,225,245, 97, 26, 94,214,236,222,189,123, 2,128, 71,148, 82,134, 16,242,232,245,222,130, 47,201,214, +141,138,138, 10, 11, 13, 13, 61, 79, 41,149,189,222,139,240,175,200,243,255,100,205,127,141,193, 2, 32,185, 28,245, 24,140, 56, + 11,197,215,127,124,197, 92,189,120,210, 89,224,230,149, 51, 96, 89,160, 69,187, 30, 85,154, 25,131,166, 52,126,238,174,103,193, + 70,173, 10,134,162,164,184, 14, 31,118,202,122,151,196,219, 5,245,128,155,144,202, 47, 69,199,131, 47,201, 69,193,181, 31, 10, +136, 81,211, 58, 42, 42,234, 78,141, 51, 13, 48,109,245,209, 61, 66, 98, 97,141,187,227, 6, 35,173,160, 20, 71,159,229,255, 70, +149,154, 81, 91,105, 89, 85,160,107, 4,185,184,254,155,140, 85,205,123, 90,244,177,117, 17, 96,241, 87,155, 32,153,106, 35,108, +212,166,197, 95, 58, 71, 97, 69,195,247,117,235,214,141, 12, 9, 9, 49,251,242,203, 47, 31, 23, 22, 22,190,210,240,189,186,196, +168, 84, 41,129, 10,209,234,179,191, 44,254, 74, 26, 24,142, 61,243,166, 25, 47, 68, 63,234,126,191, 88,123,200, 84, 13,177, 88, + 28, 57,106,212, 40, 97,105,105,233,159,204,213,235, 6,171,168,168, 8,119,239,222, 69,175, 94,189,196,177,177,177,145, 0,206, +190, 37,130, 51,163,124,192, 73,190,173,173,109,246,234,213,171,187,109,217,178,165,231,144, 33, 67,196,145,145,145,120,240,224, + 1,110,220,184,161,209,106,181,127, 8,133,194,253,137,137,137, 38,181,242,166,148, 26, 1, 28,247,240,240, 56,191,122,245,234, +110, 44,203,190,152,207,242, 29, 52,245, 0,102, 88, 91, 91, 47,218,179,103,207,194, 51,103,206,244, 31, 56,112,160, 68,175,215, +147,119,208, 52, 0, 24,103,103,103, 55,253,200,145, 35,155, 78,156, 56,209,253,147, 79, 62, 97,198,140, 25,131, 21, 43, 86,224, +247,223,127,103,141, 70,227,126,129, 64, 48, 40, 59, 59,187,202, 14, 40,175,140,131, 85,201, 56, 87, 85,253,110, 2,183,254, 11, + 89,255,157, 53, 95,143,132, 53,108,216,208,225,229, 94,154, 47,255, 53, 53,130, 69, 8, 65,104,104,232, 43,255,175, 24,146,129, +199,227,189,178, 84,167,138, 16,128, 37,165,148, 5,176, 18,192, 10,188, 58,138, 59, 15,255, 25,233,221, 36, 92,220,220,145,154, + 12,155,156, 82,117, 65,229,147, 61, 59,216,184,184,185,255, 21,229, 90,193,172, 89,179,150,204,156, 57,115,201,235, 67, 49,188, +188,221,235, 67, 56,204,158, 61, 27,111, 27,166, 33, 45, 45, 45,127,214,172, 89, 63, 0,128,159,159, 31, 41,175, 22, 12, 69,121, +111,193,151, 52, 55,163,108,170, 28,217,176, 97,195, 6, 2,120,171, 38, 7, 71,117, 12,214,215, 37, 81,203,244, 0,108, 8, 33, +211, 82,117,174, 15,254, 92,136, 0, 63,174,216,240,202,164,208,149,193,227, 49,211,178, 14, 14, 94, 78,129,124, 30,193,180,119, + 77,188,149,165, 57,140,197,198,111, 74,163,151,179,148, 82, 75, 66,200,212, 91,183,110, 61,120,103,103,110, 97,141,226, 57, 35, +241,123, 76, 26,205, 40,213,247,216,170,125, 53, 82, 83,222,230,170,175,115,115,178,203,202, 89,176,119, 92,107, 27,114, 56,111, +224,223,226,134,198,196,196,204,247,246,246,230,173, 89,179,230, 51,173, 86,251, 74,195,247, 26,107, 22,107, 39, 7, 41,132, 60, + 63, 79,183,209,177,137, 73,221,238, 23,155, 86, 45,248, 18, 34, 23, 23,151,251, 74,165, 18,132, 16,104, 52,154, 23,198,170,184, +184, 24,133,133,133, 47,254,175,211,233,144,157,157, 13, 79, 79, 79,188, 52,102,210,219, 76, 70,250,203, 30,193,202,202,234,216, +242,229,203,251, 47, 95,190,188, 13,128,211, 42,149,106, 71,126,126,126,141,134,254, 40, 55, 58,187,164, 82,217,143,132, 16, 23, +177, 68,170,189,116,233,210,209,119,209,204,203,203, 43, 6, 48, 66, 42,149,206,253,249,231,159,151, 75, 36,146,176,172,172,172, +119,210, 44, 55, 79, 31,217,216,216, 56,111,222,188,121,247,250,245,235, 27,243,249,252,107,132,144,222, 5, 5, 5,213,158,236, +153,188,250,245, 94,237,223, 77,224,247,255, 66,182,127,103, 77, 83,135, 95, 48, 21,131,193, 80, 50,115,230,204,172, 55,205, 59, + 88, 97,166, 94, 94,167,211,233, 76, 26,230,196,209,209,209,228,177,200, 42, 27,122, 7, 0, 24, 66, 84, 0,164, 95,207, 94, 84, +254,193,108,242,100,207, 32, 32,218,255,101,185, 54,115,230, 76, 58,123,246,108, 66, 8,217,143,178,241,168,158,188,222, 8,253, +229,223,102,207,158,141,153, 51,103,210, 89,179,102, 85,169, 25, 27, 27, 75, 9, 33,167, 1, 36, 0, 72,124, 89,247,229,245, 21, +251, 84,166,201,193, 81,165,193, 98, 41,144,170,115, 77, 6, 48,248,229,117,127,126,193,225, 79,109,174, 42,243, 88, 29, 58,116, + 56, 13,192,239,125, 37,190, 32,191, 16,196,186, 97, 82,126,126,238, 39, 89,247,247,191, 23, 77, 22,248,113, 72,163,200,175, 0, + 16, 10, 44,126,221, 92,189,242, 21,116,145,238,119,106, 74, 22, 52,106,211, 98,124,249,203,103,254,223,225,166,190,169,225,251, +187,242,166,134,239,213,120,217,156, 16,139,197,164,184,184, 24, 42,149,234,149,104, 85, 81, 81, 17,148, 74, 37, 74, 74, 74, 80, + 49,181, 71, 73, 73, 9,204,204,204,160,215,235,171,245,165, 88,110, 82, 86,135,132,132,172, 43,175, 38,121,103, 84, 42,165, 43, + 0,132,132,132, 8,222,159,166, 42, 13, 64,207,247,169,153,155,155,155, 6,160,137,151,151,151,200,212,201,162, 43,139,100,213, +244,119, 19, 88,243, 95,200,242, 91,241, 55, 35, 41, 41,201,255,125,107,166,165,165,197,189, 79,189,220,156,140,181, 95, 12,238, + 53,170, 98,210,103, 83, 38,123,174, 48,102,121,185, 25,107,255, 87,215,178, 98,154, 17, 0,212,197,197,101,243,243,231,207,221, + 9, 33, 73,175, 71,146, 94,255,109,214,172, 89,120,219,152,127, 47,107, 2,128,167,167,231,190,228,228,100,103,161, 80,152,254, +178,238,235,235, 43,211,228,224,120, 83, 70,251,175, 45, 0,130,254,159,104,182,229, 52, 57, 77, 78,147,211,228, 52, 57, 77, 78, +243,175,211,252,167, 45, 12,103, 49, 57, 56, 56, 56, 56, 56, 56, 56,222, 47, 4, 64,208, 91, 34, 91,247, 77, 22, 33, 36,168, 6, +145,179,251,127, 35, 77,251, 74, 52, 79, 85,161,217,182, 6,233,228, 52, 57, 77, 78,147,211,228, 52, 57,205,127,165,102, 85,218, +255,152,222,137, 92, 21, 33, 23,230,229, 52, 57, 77, 78,147,211,228, 52, 57, 77,174,138,144,171, 34,228,224,224,224,224,224,224, +224,248, 91,243,214, 97, 26,122,214, 43,235, 62,252,199, 61,174,195, 4, 7,192,227,241, 22,180,104,209, 98,212,165, 75,151,126, +210,235,245,115,106,162, 65, 8,113,118,112,112,248,142, 82,218,132, 16, 34,230,243,249, 15, 51, 51, 51,231,235,245,250,139, 53, + 77, 23, 33,196,205,209,209,241, 59,150,101, 27, 3, 16,242,249,252,152,180,180,180,121,148,210,107,239,160,105,238,232,232,216, +138,101, 89,215,178, 83,231,101,165,167,167, 95,164,148,166,114, 57,129,131,131,131,131,163,198, 6,235,163, 0, 2, 6, 64, 64, + 36,156,102, 15, 39,252,153,107,105,114,197,139, 7,101,131,177,249, 1,136, 5,112,139, 82, 90,244, 46, 9,248,255,162,249,119, +135, 16,194, 88, 90, 90,182,147,201,100, 99, 75, 74, 74,130,205,205,205, 99,202,167,199, 57, 84, 62, 40,225,187,104,219,247,239, +223,127,234,186,117,235,208,167, 79,159,233,132,144, 37,148,210,146,234,104,216,216,216,116,245,244,244, 92,187,124,249, 10,187, +102,205,154, 17,169, 84,138,216,216, 88,151, 81,163, 70,134, 58, 59, 59,239, 74, 75, 75,251,162,186,233,178,179,179,235, 93,167, + 78,157,229, 43, 87,174,180,107,210,164, 9, 17, 8, 4,136,138,138,114, 29, 59,118,108,184,147,147,211,166,244,244,244,137,213, +213,180,182,182,246,175, 93,187,118,135, 85,171, 86,201,154, 54,109, 10,177, 88,140,187,119,239, 42,134, 15, 31,238,226,236,236, +124, 55, 45, 45,237,100,117,244, 66,134, 71, 11,132, 50, 29, 31, 0,116, 74,161, 33,106,109, 67,189,169,235,184,226,137,131,131, +131,227, 31,100,176,122, 7, 16, 16, 0,129,205, 48,135, 24,240, 53, 24,144,113,253,201,111, 43,126, 99,110,180,109,219,214,247, +243,207, 63, 39,229, 83, 71,248,239,220,185,243, 35, 30,143,247,136,101,217,235, 0,238,184,184,184,232, 42,166, 37,120,157,246, +222,228,197, 24, 89, 39,159, 66, 8,160, 1,195, 48,225, 85,105,126, 80, 7, 58, 66,128,227, 79,222, 28, 73,107,231, 69, 0, 10, +156,124, 86, 61,205, 19,241,255,140,200,156, 66,161,240,182,179,179,155,104, 99, 99,211, 49, 52, 52,180,104,196,136, 17,137, 15, + 30, 60,120,236,235,235,171, 94,191,126,253,124,189, 94,191,202,199,199,231,100,113,113,241,162,119, 24, 23,203, 67,175,215,227, +209,163, 71, 96, 24, 70, 0,192, 19,192,189,106, 24, 52, 39, 15, 15,143, 53,103, 47, 71,219, 23,105,121,120,146, 77, 1, 40,193, + 10, 29,177,122,195, 46,171, 25, 83, 70,247, 55, 55, 55,191, 84, 84, 84,180,171, 26,154,110,117,234,212, 89,126,255,254,125,123, +137, 68, 2,150,101, 81, 92, 92, 12,103,103,103,172, 95,191,222,234,171,175,190,250, 76, 38,147, 93, 80, 42,149, 7,171, 99,204, +107,215,174,221,225,193,131, 7, 50,177, 88, 76, 12, 6, 3,209,104, 52,112,115,115,163,219,183,111,151,140, 25, 51,166,129, 88, + 44,126,174,209,104, 30,155,100,174,126,137, 22, 20,229,156,141,160,201,170,233, 0, 64, 36,210,121,145,179,173,111, 20,229,156, +109, 84,213,186,144, 95,112, 53,106, 24,103,178, 56,254,183, 56, 57, 57,133, 88, 89, 89,237, 41, 40, 40, 56,159,158,158, 62,164, +124,102,131,119,253,248,115,230,243,249,158,148, 82,203,242,255, 23, 24, 12,134, 4, 83,230,220,124, 27,182, 94,173,186, 64, 44, + 27, 12,202, 54, 96, 0, 16,134,185, 99,212, 41, 55,230,196,157, 61,248, 78,154, 34,233,103, 0,109,192, 0, 44, 97,152,187,172, + 65,249,107,118,236,217,163, 92,206,224,120,111, 17,172,128,112, 88, 17, 96,202,180, 17,195, 24, 62,143, 71,230,175,253,165,223, +205, 43, 7,169, 83,173, 6, 47,166,220,104,222,188, 57,154, 55,111, 78, 22, 46, 92,232,119,230,204, 25,191,237,219,183,235,175, + 92,185, 18, 5, 96,211,155, 52, 41, 5, 90,118,144, 62, 55,232, 85,110, 77, 63,144,170, 61, 26,175,218,222,164, 73,115, 86, 44, + 22,163, 50,205,147, 87,174, 68,125, 80,231,205,154,101,194, 64,157, 96,254, 73,151,134,110, 36,178,243,140, 36, 83, 53,223,150, +206,255,103,230,234,188, 66,161,240, 26, 62,124,248,147,145, 35, 71, 94,144,203,229, 20, 0,148, 74,165,184, 75,151, 46,249,221, +187,119,207, 85, 42,149, 88,189,122,181,219,242,229,203, 79,154,155,155,167, 22, 21, 21, 53,170, 78, 84, 12,192,204,174, 93,187, + 78,255,242,203, 47, 81,171, 86, 45,140, 25, 51, 6,122,189, 62,138, 16, 50, 3,192,247,166, 12,186,103,111,111, 63,115,233,210, +165,246,165,122, 1,190,221, 18,143,188,146,178, 1, 69,101, 34, 6, 95,180,149, 96,244,232, 49, 22, 55,110,220, 88,136,215, 70, +144,174, 12, 71, 71,199,239, 86,174, 92,105, 39,145, 72, 64, 41, 69, 73, 73, 9,138,139,139, 81, 82, 82,130,210,210, 82,140, 28, + 57,210, 34, 38, 38,102, 41,128,131,213,208,108,181,106,213, 42,153, 88, 44,198,201,147, 39,235,106, 52, 26,158, 86,171,133,209, +104, 52,214,169, 83,231,209,151, 95,126, 41,190,127,255,126,123, 0, 38, 25, 44,167, 12, 8, 10, 85,170,149, 63,255,240,149, 29, + 0,124, 57,229,199,149,128, 42,156,154,176,206, 41, 3, 97, 0, 56,131, 85,121,254,228, 1,232, 33, 16, 8,122,122,121,121,133, + 62,121,242,228,182,193, 96,248, 3,192, 31,229,211, 19,189,139,118, 27,103,103,231,239,210,210,210,126,166,148,110,253,183, 92, + 83,123,123,251, 63,246,238,221,235,182,101,203,150, 79,127,253,245,215, 35,120,135, 81,242, 9, 33, 2, 0, 17,141, 26, 53,178, +237,217,179,167,192,209,209, 17, 74,165, 18,241,241,241,178, 83,167, 78,217, 73, 36,146, 92,141, 70,115,181, 58,247,202,182,110, + 83, 51,240,205,119, 70,180,106,219,172,207, 71, 61, 20, 14, 54, 22, 80,105,141,120,146,148, 94,235,216,145, 3, 45,157,131, 62, +188,162,211, 21,246,203,137,187, 92, 82, 93,205, 86, 29, 58, 55,107,219,166,141,194,194,210, 2,133,165, 58, 60, 77, 76,117, 63, +123,242, 96,115,167,160, 15, 47,176, 68,255, 73,230,189, 19, 74,238,169,227,168, 14,127,106,228,190,251, 1,125,211,131, 2,185, +153,252,141, 2, 22, 22, 22,136,140,140,196,252,249,243, 5, 0, 26,191,106,170,254, 51,108, 2, 3,192,104,212, 58, 77,255, 98, + 52, 68,124, 42,254,176, 99,123, 98,110,110,110,146, 38,239, 45,154, 0, 64, 25, 33, 28,172, 13,109,195,235,170, 90,102,222, 25, + 51,224,206,249,239,130,180,234, 2,193,235,154, 50,153, 12,222,222,222,248,230,155,111,222,148,206,247,222, 37,244,127,161, 73, + 41,117,246,247,247, 47, 94,186,116,105,221, 89,179,102, 89,169,213,106, 57, 0, 55,175,128, 70,174, 12,195,184,169,213,106,243, +153, 51,103,218, 45, 92,184,176,174,157,157, 93, 1,165,212,174,154,233,156,187,114,229,202, 25,251,247,239,103,154, 55,111, 14, + 43, 43, 43,180,106,213, 10, 71,142, 28,225,255,244,211, 79,243, 1, 76, 55, 37,157, 12,195, 52,111,214,172, 25, 97, 89,138,252, + 18, 61,206, 46, 8,193,229, 31,195,160,212,178,200, 47, 40,130, 90,173,134, 76, 38,147, 18, 66,204, 76, 61,119,150,101, 27, 55, +105,210,132, 0,101, 35,191,151, 45,165, 40, 46, 46,251,171,213,234, 32, 16, 8, 20,132, 16,113, 53, 52, 93,155, 54,109, 10, 0, + 80,169, 84,252, 54,109,218,144,214,173, 91,147,226,226, 98,126,197, 52, 62, 2,129, 64, 68, 8,225,155,162,169,149, 9, 8, 75, + 89, 7,185, 76,106, 43,151, 73,109, 89,202, 58, 0,128, 41,235,180, 50, 1,249, 43,243, 39, 33,196,142,199,227,109,240,242,242, +122,200,227,241, 54, 19, 66, 28,223, 69,147, 16, 18, 70, 8,153, 47,147,201, 78,249,251,251, 39,203,229,242, 51,132,144,239, 9, + 33, 17, 53,209, 36,132,136,100, 50,217,153,249,243,231,239,190,125,251,118,159,211,167, 79,123,222,187,119,239,163,133, 11, 23, +238, 52, 51, 51,187, 72, 8,145,189,203,179,233,233,233,185,254,250,245,235, 97, 77,154, 52, 89, 87, 89, 30,170,142, 38, 33,132, + 71, 8, 9, 38, 21,243,227,252, 13,202,144,151,113,117,117,117, 14, 12, 12,116, 19,139,197,104,214,172, 25, 40,165,145,239,168, + 25, 49, 98,196, 8,199, 9, 19, 38, 8,238,220,185,131,117,235,214, 97,255,254,253,200,202,202, 66,231,206,157,133,173, 91,183, +118, 20,139,197, 17,213,210,228,155,239, 28, 59,110,124,135,175,198, 12, 85,220,125,174,195,198, 83,207,177,239,106, 58,178,148, + 34,116,249,104,144, 69,251,110,125,219,139,196, 22, 59,171,171, 57,117,202,148, 14,195, 62,251, 88,241, 32,157,197,129,107, 25, +184,246,168, 16, 6,129, 37, 58,125, 52,196,170, 65,211, 14, 31,242, 33,216,244,119,184, 71,255,116,205,127, 69, 4,107,230, 58, +154, 63,103, 36,249, 97,254,234, 95,166, 51,132, 80, 87,159,246, 15, 60,189, 27,151,178, 44, 11,149, 74, 85,241,162,129, 74,165, + 66, 82, 82, 18,174, 95,191, 14, 11, 11,139, 74, 15,116, 44,158, 98,222, 23,255, 57, 92, 65, 97, 33, 92, 92, 61, 33,147,201,170, +212, 60, 90, 73,117, 30,159,150, 69, 67,134,246,234,206,127,158,158,206,191, 18,125, 54,100,215,178,237, 33,110,117, 62,136,109, + 16, 57,249,190,153, 69, 45,213,157, 59,119,112,245,234, 85,228,231,231,163, 81,163, 70,255,152,155, 71, 8,209, 47, 90,180, 40, + 58, 45, 45,141, 92,186,116,169,193,156,165,219, 61,239, 21,213,230,101,151, 80,129,157,217,115, 79,127,217, 99, 99, 97, 97, 97, +194,196,137, 19,207, 58, 58, 58,106, 70,143, 30,221,210, 68, 93, 9, 0,223, 94,189,122, 77, 29, 53,106, 20,226,227,227, 49,116, +232, 80,213,141, 27, 55,114,155, 52,105, 98,243,235,175,191, 74, 39, 76,152,128,243,231,207,207, 36,132,236, 5,144, 64, 41,125, +235, 92,106, 44,203,138,164, 82, 41, 80, 84,246,161,170, 51, 84,204, 77, 11,148,150,150,130,143, 2,136, 68, 34, 6,128, 29, 0, + 83,191, 60,133, 98,177,248,133,185, 74,201, 42, 70, 82, 86, 9,138, 75, 52, 80,169,244,208,170, 1,177,185, 3, 15, 72,182, 1, + 96,106,227,116,158, 88, 44,134,193, 96,128, 78,167,131, 90,173,134, 90,173,134, 70,163, 65, 97, 97, 33,138,139,139,193,231,243, +101, 0,204, 1,228, 85, 41, 38,146, 26,120,140,112,254,215,243, 86,206, 2, 0, 30, 35,156,111, 6, 53,107,202, 58,158, 72,106, +248, 11,243,149,216,206,206,238,236,238,221,187,253,189,189,189,145,144,144,224,215,187,119,239,112, 66, 72, 48,165, 84, 89, 77, + 45, 25,195, 48, 63, 12, 30, 60,120, 84,255,254,253,137,143,143, 15,248,124, 62, 12, 6,131,107,124,124,124,171,223,126,251,109, + 10,159,207,255,213,104, 52, 78, 52,181, 93, 31, 33,132, 17,137, 68,187,214,174, 93,219, 34, 60, 60, 28,155, 55,111,198,141, 27, + 55,216,176,176, 48,102,224,192,129,112,119,119, 15, 31, 56,112,224, 62, 66, 72,167,154, 68,178, 8, 33,238, 3, 6, 12,112,227, +241,120,104,210,164,137,240,202,149, 43, 13, 1, 92,121,199,107,106,230,234,234,122, 62, 50, 50, 50,248,212,169, 83,209,132,144, +200,234,180, 99,116,118,118,238,230,224,224,176, 80,161, 80, 88,153,186, 79, 73, 73,137, 50, 51, 51,115, 82,106,106,170, 73,243, +145, 82, 74, 27, 7, 5, 5, 33, 53, 53, 21, 94, 94, 94, 16, 10,133, 17, 46, 46, 46,195, 41,165, 29, 88,150,253,166, 58, 77, 12, + 8, 33,206, 17, 17, 17,182,145,145,145,228,251,239,191, 7, 0, 8, 4, 2, 24,141, 70, 48, 12, 3,129, 64, 0, 63, 63, 63,242, +236,217, 51,107, 66,136,179, 41,213,133,182, 94,173,186, 52,105,211,161, 89,139,240,250,204, 79,123,158,192,200, 26,193, 35, 6, +240, 9, 11, 86, 47,134, 88,200,131, 79, 96, 40,239, 81,204,221,112,219,186, 31,116,201,137, 59,121,208, 20,205, 14, 93,186, 54, +247,247,245, 97,150,237,123,138,130,212,135,198,212,216, 11, 57, 12,143,129,127, 72,107, 91,159,128, 96, 94,112,120,164, 32, 45, + 33,166,149,181,119,203,182,121, 79,206,115,166,130,163,250, 6,139, 16, 66, 41,165, 47,190,172,102,172,166, 51,108,173,136,199, +131,251,119,153,228, 12,109,233,221,187,119, 97, 99, 99, 3,123,123,123,152,155,155,227,209,163, 71, 56,117,234, 20,226,226,226, + 64, 41, 69,112,112,112,181, 14,156,153,145,129,220,188,226,119,214, 60, 26, 79, 49,119,100, 89,178,107, 57, 57,161,150,147, 19, + 63, 39,191, 0, 87,239,222,243, 63,248,107, 91,223, 76,102,248, 70,149, 74,245, 98,123,189,254,159, 87,235,226,224,224, 96,248, +226,139, 47,243,134,173, 74,168,211,175,181, 51,175, 91,132, 35,246, 93, 73,231,237, 60,199,163, 51, 62,175,159,253,228,201, 99, +147, 79, 90, 36, 18,125,215,177, 99,199,175, 40,165,130,177, 99,199, 2, 0, 6, 13, 26, 84,116,237,218, 53, 31, 74,105, 22, 33, +196,249,243,207, 63,127,124,246,236, 89,217,248,241,227,121, 6,131,225, 1,159,207,167,132,144, 57,148,210, 89,111,204,100,124, +254,237, 59,119,238,120,192,204, 29,182, 10, 30,218, 79,143, 6, 0,152,137,129,236,140, 20, 92,191,119, 14, 54, 54, 54, 22,205, +155, 55,143,245,246,246,214,164,167,167,143, 45, 45, 45,221, 84,105,198,229,243, 99,162,162,162, 92, 93, 93, 93,203, 12, 86,142, + 10, 27,175, 50, 80,106,164, 0,164, 32,172, 28,230,246, 30, 10, 31, 93,209, 29, 59, 59, 59,157, 86,171,157, 90, 84, 84, 84,105, + 85, 15,143,199,203,186,127,255,190,194,205,205, 13, 0,244,251,246,237,227,107,181, 90, 80, 74,141,135, 15, 31,238,144,156,156, + 28,236,233,233,201,184,186,186, 78,245,246,246, 86,165,166,166, 14, 85,169, 84,111,173, 66, 57, 54,198, 75,215,114,214,185, 85, + 5, 9,201,191, 1,128, 75,184,127,222,161, 89, 13,181, 45,103,149, 84,185,238,216, 24, 47, 29, 70,255,101,237, 4, 7,127,253, +245,215,254,214,214,214, 24, 49, 98, 4,102,207,158,141, 25, 51,102,120,143, 24, 49, 98, 24,128, 37,213,120,201, 74, 29, 29, 29, +111, 46, 91,182,204,175,105,211,166, 56,114,228, 8,118,236,216,129,103,207,158, 25, 60, 61, 61,249,225,225,225,152, 57,115, 38, +218,183,111, 63,116,244,232,209, 45, 9, 33, 13, 77, 52, 29,159,205,156, 57,179, 91,179,102,205,240,233,167,159,106,206,157, 59, +215, 7,192,137,147, 39, 79,182, 62,127,254,252,158,109,219,182, 73,231,207,159,223,118,194,132, 9, 35, 0,172,168,193,249,119, +111,209,162, 5, 0,160, 89,179,102, 88,184,112, 97,251,119, 49, 88,132, 16,145,141,141,205,225,205,155, 55, 7,215,173, 91, 23, +159,124,242, 73,195, 62,125,250, 28, 38,132,124, 64, 41, 53,105,222, 72, 39, 39,167, 31,214,174, 93,235, 37,149, 74, 77, 62,174, + 86,171,181, 30, 62,124,248,247, 0, 76, 50, 88, 44,203, 54, 14, 10, 10,194,190,125,251, 48,124,248,112,248,251,251,215, 15, 14, + 14, 94, 51, 96,192, 0,140, 24, 49,162,141,157,157,157, 67,249,228,226, 85,191, 88,248,124,207,206,157, 59, 11,254,248,227, 15, + 0, 64,139, 22, 45,208,182,109, 91,220,191,127, 31,151, 46, 93, 2,143,199,131, 92, 46, 71,211,166, 77, 69,105,105,105,158, 0, +170, 52, 88,140, 88, 54,184, 91,231, 78,138, 3,215,210, 97,100, 13, 8,245, 50, 71,184,159, 61, 30,165, 20, 33,234, 97, 10,140, + 90, 33,204,173,109, 16,209,178,157,117, 70,234,179,193, 48,165,121,128, 88, 54,184,103,183, 15,205, 14, 92, 77, 67, 65, 90, 44, +125,114, 99,239, 25,189,186,116, 40, 0,220, 58,189,115,141,163,141,244, 3,159,144, 80, 94,228, 7, 93,173,254,216,145, 49, 24, + 0,103,176, 56,222, 45,130, 85, 65,110, 1, 84, 54,142,254, 72,206,184, 93,246,255,220, 92,228,230,230,162,118,237,218, 88,190, +124,249, 43,219,170,213,234, 26, 37,224,191,161,105,107,101,137,174,173, 90,242,238, 63, 90,205, 83,177,170,247,162,249,119,165, +124,210, 82, 38, 41, 71,111,153, 93,168, 19,246,109,229, 70, 5, 60, 6,253, 90,213, 34, 63, 31, 76, 18,102,149, 10, 44, 25,134, + 73, 98,217,170, 59, 18, 18, 66, 4,221,186,117,251,106,215,174, 93,130,216,216, 88,212,169, 83, 7, 58,157, 14,215,174, 93, 75, +161,148,102,149, 31, 47,141,199,227,165,177, 44,235,221,160, 65, 3, 44, 88,176, 0,126,126,126,164, 83,167, 78, 83,202, 77,214, +159, 14,148,150,150, 54,255,203, 47,191,108,241,203,198,157, 54,159, 52, 38, 40, 46,214, 64,169, 84,226,209,253,155, 40,205, 44, +197,154, 53,107, 33,147,201, 8, 0, 97, 70, 70,134,112,194,132,241,235, 92, 93, 93, 59,167,164,164,244,124, 91, 90,211,210,210, +230,141, 30, 61, 58,124,203,150, 45, 86,101,237,174, 84, 40, 86,137,113,125,113, 89,132, 50,124,194, 13,252,250,203, 58,166,158, +135,220,166,184,184, 24, 67,135, 14, 93,230,228,228,212, 52, 61, 61,125,248,219, 52,211,211,211, 47, 14, 29, 58,212,229,183,223, +126,147,120,123,123,199, 21, 22, 22, 34, 47, 47,143,217,182,109,219,104, 39, 39, 39,139,125,251,246, 19,185, 92, 14, 0,188,196, +196, 68,225,151, 95,126,177,203,209,209,113, 91, 70, 70,198,167,111,187, 55, 0, 52,132, 32,221,217,185,182,151,242, 42, 51,203, +217, 89,125,233,220,204,212, 45,132, 32,189,108, 27, 80,167,181, 78, 3,158,111, 22, 55,211,104,216,165, 25, 25, 73,113,148,130, + 98,230, 95,215, 9,195,214,214,118,116,183,110,221,240,253,247,223,227,224,193,131, 19,172,173,173, 23,207,158, 61, 27,206,206, +206, 95, 18, 66,150, 86, 99,178,219, 31,151, 44, 89,226,231,231,231,135, 65,131, 6,105, 79,157, 58,245, 53,128,125, 0,146, 46, + 94,188, 88,107,211,166, 77, 93,118,237,218,245,253,178,101,203, 36, 43, 86,172,240,250,232,163,143,150, 2,248,220,132, 15,138, +241,253,251,247,199,162, 69,139,112,238,220,185,143, 40,165, 71, 42,190,183, 8, 33, 93,230,207,159,127,122,250,244,233, 88,178, +100,201,216,234, 26, 44, 66,136,153,191,191,255,183, 29, 58,116,192,197,139, 23,209,188,121,115, 68, 68, 68, 76, 32,132, 44,167, +148,230,212,192, 92, 49,102,102,102,187, 54,110,220,216,220,195,195, 3,243,230,205,195, 87, 95,125,133,245,235,215, 55,255,228, +147, 79,118, 17, 66,122,154,210,203,215,204,204,204, 76, 42,149,226,251,239,191,167,207,159, 63,207, 55,193,144, 89,125,251,237, +183,196,162,170,170,133,255, 68,200,164, 98,177,184,137,175,175, 47,126,250,233, 39, 92,188,120, 17, 99,198,140,129,175,175, 47, + 82, 82, 82,208,181,107, 87,217,227,199,143,123, 1,216,104, 98,185,100, 97, 99, 99,131,172,172, 44, 8, 4, 2, 52,109,218, 20, +251,246,237,131, 70,163,129,189,189, 61, 10, 10, 10, 94,212, 38,240,249,124, 11, 19, 75,187, 32, 91,107, 11,100,197,164,130, 15, + 3, 66,124,108,113,246,126, 46,116,122, 22,246, 54,150,200,200,202, 68,227, 32, 87,104,181,181, 64, 41,107,210, 76, 32, 34, 30, + 19, 34,150, 72,145, 87,156,131,212,135,231,114,117, 70,205,240,130,103,151,146, 1,192,186, 78,139,225,183, 46,157,188,213,251, +195, 22,246, 37,165,110, 32,148,109, 4, 14,142,106, 80,229, 64,163,111,122, 49,191, 28, 17,170, 64,167,211,189, 83, 66,254, 27, +154,111,226,191,161,249, 55, 48, 89,172,139, 21,191, 80, 46, 97, 12, 39,163,178,140,122,131, 17,199,111,101, 24,101, 98, 98,176, + 18,107,139, 88,150,165,132, 16,106,130,142,254,248,241,227,155,199,140, 25,131,197,139, 23,227,241,227,199, 16, 10,133, 8, 10, + 10,114,170,104, 31, 69, 8,177, 8, 9, 9,177,103, 24, 6,143, 30, 61,194, 79, 63,253,132,207, 62,251,140, 94,185,114,101,253, +219, 94, 20,148,210,219,233,233,233,107, 39,141, 29, 94,192, 40,147, 33,167, 57,208,229, 61, 6,171,202,198,215, 51,231, 35, 33, +151, 69,244,179, 98, 68, 63, 43, 70,142, 86,142,159,126,222,192, 11, 12, 12,236, 34, 16, 8,218, 87,146,214,107,233,233,233,155, +199,143, 31, 95,144,149,149,245,194, 56,235, 12, 44,116,134, 87,147,161, 80, 40,176,102,205, 26, 75, 55, 55,183, 94, 2,129,160, + 85, 37,154,169,105,105,105,247, 70,141, 26,165, 73, 79, 79, 71, 97, 97, 33, 78,156, 56,241,129,171,171,171,197,172,249, 75, 72, + 66, 46,125,145,206, 18, 98,131, 13,219,254,224,249,248,248,124, 44, 16, 8, 34, 42,127,121,185,120,249,251,215,217,125,237,218, +181, 79,189,188,188, 70, 85, 24, 43, 74, 65, 1,192,211,211,115, 68, 84, 84,212,103,193,193, 1,187, 29, 28, 28,125,255,202,188, + 68, 8,105,213,183,111, 95, 95,150,101,177,123,247,238,123,148,210, 37,123,247,238,189,169,209,104,208,175, 95, 63, 79, 0, 29, + 76,212, 9,251,248,227,143, 71, 53,111,222, 28,227,198,141,211,157, 58,117, 42,132, 82,186,152, 82,154, 72,203, 72,162,148, 46, + 63,127,254,124,131,209,163, 71,107, 26, 53,106,132, 79, 63,253,244, 51, 66, 72,243, 42,116,155,244,239,223,223,143,101, 89,236, +220,185,243,238, 75,230,170,226, 30,158,217,179,103,207, 53,173, 86,139, 1, 3, 6,212, 38,132,180,174,198,185, 11,197, 98,241, +238,185,115,231, 90,166,166,166, 98,224,192,129,154, 71,143, 30, 97,214,172, 89, 82, 11, 11,139, 35,149,181, 17,124,107,128, 68, + 44,254,101,245,234,213,221,234,213,171,135,145, 35, 71,106, 87,173, 90, 53,102,212,168, 81,218,144,144, 16,172, 92,185,178,155, + 72, 36,250,165, 90,145,255,204,204,130,115,231,206,217, 84,181,100,100,100,100,154, 24,253,150,121,123,123, 95,245,241,241, 41, +242,247,247, 15, 53, 24, 12,120,252,248,241,211,223,127,255,157,245,245,245,197,166, 77,155,176,102,205, 26,180,105,211, 6, 12, +195,244,170, 78, 90, 75, 75, 75, 33,145, 72, 32, 20, 10, 17, 21, 21, 5,141, 70, 3,153, 76, 6,137, 68, 2, 30,143, 7, 75, 75, + 75, 40, 20, 10, 0,160,166,221, 31,208, 34,165, 30, 2, 1, 3, 62,195, 34, 54,169, 16, 58, 61, 11,137,144, 7, 1,159, 0,148, +133,165, 92, 0,137,136, 7,134, 16,214, 68, 77, 20,150,234, 32, 18, 50, 16, 8, 69,132, 49, 24, 95,132, 8, 25,190, 81, 42,149, +138,136,173,185, 24, 18, 33, 55, 38, 55,199,123,142, 96, 1,128,209,248,231, 94,186,111,138, 2,105,181,218,119, 74,200,127, 67, +243, 45, 97,243,127,212, 13, 44, 42, 42,226, 95,189,122, 85, 33, 20, 10,197,221,130,195,115, 22,254,246,216,110,246,182, 56,136, +249, 32, 29, 3,105,230,209, 35, 7, 69,197,197,197,182,190,190,190,185, 38,222,135,161,132,144,121, 0, 2,248,124,254,161,141, + 27, 55,146,173, 91,183, 90,245,239,223, 63,158, 16,146, 26, 24, 24,232,190,113,227, 70,115, 0, 88,190,124, 57,221,181,107, 87, +123, 0, 49,148,210,140,202,116,211,211,211,167,139,197,226, 43,143, 30, 61, 90, 46, 16, 8, 44,205,205,205,173,206,159, 63, 79, + 50, 11,117,248,118,203,179, 23, 61, 11,229, 98, 30,166,245,180,199,224,193,159,241, 31, 60,120,240, 35,128,227,111,211, 76, 77, + 77,157, 32,147,201,206,223,187,119,111,137,194,165,190,181,109,196, 4,243,214,211,202,170, 31, 29,173, 68, 96,202,203,196,130, +130, 2,228,228,228, 96,194,132, 9,150, 19, 39, 78,156, 12,224,108, 37,233, 60, 33, 22,139,147, 98, 98, 98,218,241,249,124,177, +153,153, 89,240,213,171, 87,201,243, 2, 61,166,109,122,138, 98,117, 89,109,171, 66, 34,192,236,254,174, 24, 61,122, 52, 63, 62, + 62,254, 7, 0,205,222,164,231,226,226,226,237,239,239,191,123,251,246,237,254, 75,151, 46,205,123,242,228, 73,169,179,179,243, +236,215, 54,211, 44, 88,176, 32,119,203,150, 45,117, 7, 14, 28,184,219,209,209,177,207, 59, 12,169,241, 78,152,155,155,127, 63, +124,248,112,236,218,181, 11,249,249,249, 75,203,243,216,146,237,219,183,239, 28, 58,116, 40,182,108,217,242, 61, 33,228,152, 9, + 81,172,142,253,250,245,195,209,163, 71,113,250,244,233,111, 41,165, 15,222, 98,106, 31, 19, 66,166,236,223,191,127, 89,255,254, +253,177, 97,195,134, 14, 0, 42, 27,120,246,131,246,237,219,227,200,145, 35,200,205,205, 93,249,166, 13, 10, 10, 10, 86, 29, 56, +112,160,113,251,246,237,177, 96,193,130, 15, 0,156, 49,193, 92,249, 89, 88, 88,108, 92,182,108, 89, 88,189,122,245,240,241,199, + 31,171,117, 58, 93,135,175,190,250,234,224,142, 29, 59, 20,155, 55,111, 14, 29, 54,108,216,117, 66,200, 16, 83, 7,177,229,241, +120,243, 87,172, 88,241,121,100,100, 36, 38, 76,152, 96, 56,126,252,120, 87, 74,233, 9, 66, 72,252,228,201,147, 15,255,244,211, + 79,188, 69,139, 22,125,206,227,241,178,141, 70,227,215,127,201, 23, 54,195,204,157, 51,103, 78,227, 22, 45, 90, 32, 41, 41, 9, +209,209,209, 48, 24, 12, 91,110,221,186,117,161, 69,139, 22,115,117, 58,221, 65,137, 68, 50,200,204,204, 44, 48, 48, 48,176,181, +131,131,131, 44, 51, 51, 83,105,194,245, 44,136,143,143,151,219,219,219, 67, 32, 16,224,238,221,187,176,183, 47,155,242, 53, 43, + 43, 11, 65, 65, 65,224,241,120, 40, 40, 40, 0,128, 66,211,204, 16,115, 47, 62, 49,173,182,181, 66, 14, 24, 37,184,253, 40, 5, +118,182, 86, 48, 18, 6, 25, 25,233, 8,246,117, 5, 33, 4, 5,185, 25, 32,132,152, 52,151,174,145,178, 81,207,211,178, 92,108, + 20, 98,212,107,220,206,230,234,177,236,173, 22,117,154, 13,227,243, 8, 79, 44, 49, 95,251,249,167,159,218,178, 44, 69, 65,110, + 38,248, 12,115,131,179, 12, 28,239,213, 96,177, 44, 11,169, 84,250, 74,132,233,245, 40,144, 84, 42,133, 70,163,169,214,129,165, + 82, 41,116, 6,188, 87, 77, 83,142,249,190, 53,255, 74, 12, 6,131, 98,226,196,137,225,225,225,225,169,109,218,180, 73,168, 91, +215, 58,185,115, 99,169,237,178,245,123,131, 59,181,172, 23, 93,144,151,149,243,204,220, 92,147,152,152,104,255,235,175,191,134, +235,245,122,153,137, 17,177,231, 0,158, 19, 66, 86,117,232,208,225,139,222,189,123,227,193,131, 7,246, 74,165,210, 94, 38, 43, +147,216,186,117, 43,118,237,218,181,152, 82,106,242,192,155, 26,141,230, 24, 0, 47, 66,136,101,173, 90,181, 50,173,173,173,133, +233, 37,165, 47,122, 22, 10,249, 12,154,126,117, 19,249, 5, 69,176,181,181,133, 66,161,240,172, 74,179,124,156,171,131,222, 31, + 76,174,175,186,183,246,220,166,141, 27, 45, 0,128,199, 16,216, 89, 8, 81, 80, 80,128,236,236,108,228,228,228,128, 97, 24, 24, + 12, 6,127, 19,210,249, 24,192, 99, 66,136,115,235,214,173,231, 42, 20, 10,176,121,165,200, 47,209,189, 82, 5, 89, 82,162,132, +135,135, 7, 20, 10,197, 27,171, 35,172,173,173, 21, 98,177,120,211,186,117,235,252, 20, 10, 5,111,232,208,161,150, 67,135, 14, +109,246, 54, 51, 38,147,201,120, 27, 54,108,240, 9, 14, 14,222,232,225,225,241, 65, 98, 98, 98,225,255, 42, 47,149, 15,121, 48, + 98,210,164, 73,161, 18,137, 4, 63,255,252,243, 51, 0,219,202,127,222,189,106,213,170, 25,253,251,247,247, 29, 51,102, 76,224, +244,233,211, 39,148, 87, 21,190,117,140, 36,161, 80, 24,226,239,239,143,189,123,247, 2,192,222, 42, 14,191,231,202,149, 43,203, + 58,119,238, 12,137, 68, 18, 86,197,182,158,110,110,110,216,191,127, 63, 0,220,126,203, 54,183, 31, 61,122,132,158, 61,123,130, + 16,226,105,194,185,119,107,215,174,221,158, 5, 11, 22,240, 21, 10, 5, 62,255,252,115,237,245,235,215, 59, 81, 74, 47, 16, 66, + 90, 13, 24, 48,224,252,182,109,219,228,231,207,159,247,251,238,187,239,174,240,120,188,249, 70,163,113,122, 21,154,159,205,155, + 55,111, 90,247,238,221, 49,123,246,108,250,219,111,191,125, 76, 41, 61, 81,254,124, 29, 39,132, 12,180,178,178,218,246,205, 55, +223,144,194,194,194,105,132,144, 20, 74,233,234, 74,242,121,161,209,104,116, 84, 42,149, 38,125, 33,154,186,189,141,141, 77,199, + 22, 45, 90,224,199, 31,127,196,152, 49, 99,176,105,211, 38, 10,224, 80,122,122,250, 93, 0, 45,202, 34,176,206,138,168,168,168, +192,230,205,155, 11,239,221,187,247, 33,128,223, 76, 40,155, 18,207,158, 61,107,223,169, 83, 39,161, 76, 38,131,209,104, 68,110, +110, 46,212,106, 53,130,130,130,208,184,113, 99,100,101,101,225,208,161, 67,186,130,130,130, 68,147,202, 59,109,233,230,147,135, +255,104,213,165,223,112, 11,169,144, 7,163, 94,132,204,204,108, 20, 27, 13, 8,241,119, 71,243,224, 90, 72,202, 84,225,248,161, + 63,242,139,139,149,155, 77,209,212,107,148, 27, 79, 29, 59,216,178,121,199, 1, 22,114,223, 64,120, 58,141, 9,190,117,229,212, + 73,137, 72, 64, 6,244,239, 99,217,180,161, 55,238, 62, 43,194,209, 67,123,243, 11,139,138, 54,130,131,163, 38, 6,235,229, 6, +238, 47,145, 53, 97,194, 4,251,137, 19, 39,194,220,220, 28,185,185,185,208,235,245, 47,162, 77, 98,177, 24,150,150,150,200,205, +205,197,206,157, 59, 1, 32,171,242, 47, 58, 81,250,188,149, 43,220, 8, 79,174, 21, 75,101,212, 90,246,238,154, 0,160,213,243, +179, 86,239,252,221,186, 99,139, 8,126, 45, 39,167, 55,133,233,171,173,249,255, 1,157, 78,119, 34, 33, 33, 33,172, 95,191,126, +217,110,110,110, 42,181, 90, 13,149, 74, 85,124,104,199,178, 58, 46,230, 35,159, 49, 12, 67, 21, 10, 5,107,111,111, 95,120,250, +244,105,123,131,193,112,174,154,135,152,208,167, 79, 31,230,212,169, 83, 35, 70,141, 26, 69,188,189,189, 17, 21, 21,133,159,127, +254,153,110,222,188,121, 25,128,169, 53, 76,122,137, 70,163,121, 37, 2,242,114,207,194,146,146, 18,104, 85,153,208, 87,163, 71, + 66,252,169, 31, 31,213,174, 93, 91, 31,232,254,159,225, 68,242,243,243,145,157,147,243,194, 96,101,103,103, 3, 64,117, 66,152, + 69,127, 78,231,127,106, 30, 74, 75, 75,161, 86,102,192,104, 52,190, 81, 51, 47, 47,175,216,217,217,121,197,242,229,203,127,154, + 59,119,174,253,146, 37, 75,242, 98, 99, 99,139, 24,134, 81,191,246, 17, 35,241,242,242, 82, 44, 90,180,200, 97,249,242,229,121, + 44,203,174,248, 31,155,171,238,245,234,213,219,212,177, 99, 71,197,168, 81,163,176,124,249,114,164,167,167, 79,165,148, 26,202, +203, 6,150, 16, 50,121,229,202,149,135,166, 76,153, 2,157, 78,183,232,200,145, 35,179, 9, 33, 35, 40,165,219,222,164,105,103, +103,231,202,231,243, 17, 29, 29, 93, 68, 41,125, 90,133,161,207,168, 91,183,110, 38, 33,196,193,201,201,169, 78,101,219, 90, 91, + 91,123, 41, 20, 10,164,166,166, 2, 64,194, 91, 54, 75, 76, 75, 75,163, 34,145,136, 56, 59, 59,123, 87,117,254, 86, 86, 86,147, +215,173, 91,199, 63,123,246, 44,102,206,156,153,146,148,148, 52,128, 82,122,177, 60,109,209,132,144,230,173, 90,181,218, 49,101, +202,148,186, 63,252,240, 3,121,244,232,209, 72,188,101,136,146, 10,220,221,221, 71,124,246,217,103, 88,177, 98, 5,214,174, 93, + 59,146, 82,186,251,181,115,222, 65, 8,177,178,177,177, 89, 49,124,248,112,108,220,184,113, 0,128,213,149, 68,107,167,244,237, +219,119, 70, 94, 94,222,124, 83,238,169, 41,219,187,184,184,180,106,221,186,181,151, 90,173,198,238,221,187,159,238,217,179, 39, +223,104, 52,238, 44, 55, 87, 47,231,143,125,199,142, 29,155, 49,121,242,100,156, 61,123,118,163,179,179, 51, 47, 45, 45,109, 71, + 21,247, 52, 77, 34,145,228,220,189,123,215,209,207,207,143,113,114,114, 66,163, 70,141, 96,105,105, 9, 30,143,135,172,172, 44, + 92,184,112,129,141,143,143,207, 49,117,192,209,156,184,179, 7, 29,235,117,186, 28,125,253, 66,187,192,134, 77, 5, 46,182,214, +136, 8,116,129,165,153, 16, 4, 64, 82,150, 10,103,206,156,212, 39, 36, 60,189,106, 74, 15,194, 10, 77,231,250, 31, 94,177,180, +175,213, 46, 32,184, 41,191,142,175, 15,218,181,104, 96,101, 37, 23,130,165, 20,119,159, 21,226,228,137, 99,250,180,148,228,179, + 92, 15, 66,142,247, 29,193,154,181,118,237,218,166,235,215,175,239, 60, 97,194, 4,197,160, 65,131, 32,149, 74, 81, 90, 90, 10, + 55, 55, 55, 24, 12, 6, 28, 57,114, 4,209,209,209,197, 44,203, 30, 2,112,249,181, 7, 51,232,229,113,171,166, 45, 87,214, 42, + 27,188,178,180,233,236,181,245,223,139, 38, 0, 92,121,102,112,113, 78,207,153,149,155,127,100,188,187,139,147,176,125,179,198, +124, 91,171,178,222,204, 38,106,182,125,223, 99,122,252, 47, 52, 13, 6,195,231,132,144,192,201,147, 39, 47,116,113,113,113,158, + 61,123,246,243,128,128, 0, 85, 81, 81, 17,213,106,181,108, 78, 78,142,108,247,238,221,158,185,185,185,197,122,189,126, 32,165, +244,110,117,210, 73, 41,213, 1, 24, 69, 8, 57, 80, 88, 88,120,252,171,175,190,194,119,223,125,135,131, 7, 15, 54,167,148, 94, +174,233,185, 83, 74, 13,158,158,158, 5,183,111,223,118, 16,217,248,192,193, 82,136, 14,223,150, 5, 35, 20, 98, 2, 85,105, 49, + 98,239,223, 69, 81, 81,209,173,106,104,106, 93, 92, 92, 10, 51, 51, 51,109, 29, 28, 28,202,204, 85,118,246, 11,115,149,151,151, +135,220,220, 92,250,242,189, 55, 65,179,212,203,203, 75, 25, 27, 27, 43,226,201,220,224,104, 37, 70, 89, 21, 36,133,157,130,143, +210,210, 98, 60,188,118, 21,133,133,133,231,222,166,153,150,150,182,211,217,217, 25, 0,126,154, 49, 99,134,109,135, 14, 29,158, +220,184,113,163,229,203,199, 9, 9, 9,217, 55,123,246,236, 15,191,251,238,187,156, 77,155, 54, 77, 73, 79, 79,223,250,191,204, + 75, 54, 54, 54, 19, 15, 31, 62,172,208,233,116, 88,190,124, 57, 22, 47, 94,188,158, 82,250,251,107,215,226, 48,143,199, 91,201, + 48,204, 23, 95,126,249, 37,134, 15, 31, 46, 11, 13, 13,157,240, 82,148,235, 21,205,212,212,212,233, 33, 33, 33, 51,178,178,178, + 76, 50, 4,143, 31, 63, 30, 22, 18, 18, 50, 61, 43, 43,107, 97,101,231, 46,151,203,229, 70,163, 17, 9, 9, 9,249,148,210,194, +183,220, 55,181,143,143, 79,170,209,104,116,149,201,100,214, 85,229,207,252,252,252,249,161,161,161,179, 50, 51, 51, 79, 0,152, +247,250,144, 35,148,210, 59,132,144,192,177, 99,199,142,254,254,251,239,123,102,100,100,236,172, 74, 51, 41, 41,105,126,171, 86, +173,190,141,139,139,219, 68, 41, 93,251,150,116,254, 76, 8,209,109,221,186,117,100, 66, 66,194,130,202, 52,211,210,210, 14, 1, + 56,100,234,253,125,219,246, 47,107, 50, 12, 51,121,218,180,105,204,182,109,219, 0, 96, 81, 74, 74,202,218,183,152,181,187, 46, + 46, 46,155, 67, 67, 67, 7,173, 94,189, 90,210,166, 77,155,225, 0,118, 84,149, 63, 53, 26,205,181, 43, 87,174, 52, 78, 76, 76, +180,109,213,170,149, 16, 0,138,138,138, 80, 80, 80,128, 67,135, 14,233,226,227,227,115, 74, 75, 75,175, 85,167, 12, 49,104,139, +250, 95, 57,179,127, 71,226,227,251, 17,145, 29,186, 89,105,117,174, 16,231,242, 80,144,155,129, 99,135,254,200, 79, 72,120,122, + 85,169, 44,232, 95, 29, 77,157,166,176,223,213,179, 7,118,166, 36,196, 54,110,209,170,147,149, 90,235, 14,177,144, 65,110,102, + 42,142, 29,222,159,151,144,240,236,162, 90,175,249,244,175, 42,231,255, 77,154,255, 56,104, 69,107,219, 74, 22, 0, 34, 0, 31, + 42, 20,138,229, 51,103,206, 92,123,253,250,245,181,157, 59,119, 94, 43, 18,137,150, 3,248, 16,128,232, 45,251, 5,253, 47, 53, + 59, 52,130,226,179,174,204,134,185, 35,249,186,125, 75,124,245,115, 70,128,154,168,217,214,148,235, 80,157,229,127,173, 9,160, +153, 64, 32,184, 90,175, 94,189,179, 10,133, 34,219,195,195,227,162, 64, 32,184, 1,160,197,187,166, 19,128,109,223,190,125,217, +226,226, 98,218,167, 79, 31, 10,192,226, 93, 53,197, 98,113,235,200,200, 72,253,243,244,124,122,241, 78, 50, 61,116,254, 1,221, +126,240, 42, 93,187,227, 56, 93,178,114, 3,173, 95,191,190, 22,128,123,117, 52, 69, 34, 81,135,200,200,200,130,156,156, 28,250, +232,209, 35,122,225,194, 5,186,103,207, 30,186,118,237, 90,186,106,213, 42,234,236,236,156, 11,192,185, 58,154, 82,169,180, 91, +135, 14, 29, 12,169,217, 37,244,218,131, 12,122,234,250, 83,186,239,244, 93,186,243,208, 85,186,126,235,239,212,207,207, 79, 13, +192,161, 42, 77, 39, 39,167,190,125,250,244,121, 82,183,110,221, 53,175,255,230,237,237,189,178, 79,159, 62, 73,206,206,206, 3, +255,138,188, 4,160,131,139,139,203, 35,161, 80,120, 24,192,192, 42,246,235,199,231,243, 15, 58, 58, 58,222, 4,208,227,127,157, +231, 1,116,182,183,183,191, 6,160,107, 21,251, 85,108,215,253,159,248,188,191, 15, 77,103,103,231,214,110,110,110, 23,156,157, +157,191,169,106, 63,127,127,127,161,163,163,227, 92, 23, 23,151, 35, 78, 78, 78,109,170,147, 78, 0,206,102,102,102,205,204,204, +204,186,152,153,153,117,177,180,180,108,246,242,115, 88,147,115,183,241,105,219,165, 86,195,174,251,220, 26,124,152, 84, 43,184, +115,146,103, 72,183,125, 54, 62,109,187,188,171,166,123, 72,183,253,181,130, 59, 63,175, 21,220, 37,177,118, 88,183,125,182,190, +109, 59,254,211,238,251,223, 89,243,159,182,152,188, 97,175,178,150, 43,102, 0,250, 49, 12,243, 51,128,126, 0,204,170,184, 1, + 65, 38,220,164,247,174,217,161, 37, 92, 70,245,226, 29,153,250,169, 32,219, 68,205,127, 76,134, 6,208,141,207,231, 95, 1,208, +237,125,166,211,220,220,124, 93,239,222,189,141, 2,129, 96,197,251,210,180,177,177,249, 41, 34, 34, 66,183,108,217, 50,186,119, +239, 94,186,118,237, 90, 58,122,244,104, 26, 20, 20,164,177,182,182,254,180, 38,154,142,142,142,243,234,213,171,151,183,117,235, + 86,186,115,231, 78,186, 98,197, 10, 58,107,214, 44,182, 86,173, 90,217,214,214,214, 93,107,162,105,111,111,255, 75,179,102,205, +116,191,252,242, 11, 61,121,242, 36,221,190,125, 59,157, 56,113, 34,245,247,247, 87,203,229,242,143, 76,213,172, 83,167,142,232, +109,191, 53,108,216, 80,192, 21,184,156, 38,167,201,105,114, 6,235,159,179,240, 77,141,116,237,126, 64,241, 81, 0, 41, 33,192, +206,223, 31,178,123,122,250,195,240,251,131,119, 31,171,167,118,237,218, 37,132,144,157, 79,159, 62,221,227,238,238,110, 72, 76, + 76,124,103,205,163,231,104,106, 59, 79,210,233,100,162,145, 15,192, 96,250,176, 61,255,136,136,228,126, 0,251,223,183,110, 97, + 97,225, 16, 66,200, 24, 74,169,234,125,105,230,228,228, 76, 36,132,108,125,250,244,233, 34,185, 92, 30,108, 52, 26,245,106,181, +250, 82,118,118,246, 4, 74,105,114, 77, 52,211,211,211,167, 19, 66,246, 78,157, 58,117, 42,128,250,132, 16,173, 94,175,191,146, +149,149, 53,135, 82,154, 94, 19,205,204,204,204, 97, 66,161,112, 67,124,124,252, 2,169, 84, 90,159,101, 89,173, 82,169, 60,151, +147,147, 51,158, 82,154,105,170, 78,124,124,252, 91,219,127, 69, 69, 69,113,243, 14,114,112,112,112,252,139,218, 96,189,194,239, + 15, 40,122,214, 35,232, 17, 4,195,239,247,222,143,105,121,250,244, 69,251,215,247, 58, 53,200,137, 4,250,222, 53,185,234,228, +247,103,174, 94,210,188, 11,160,205,123,214,188, 13,160,247,251,212,212,233,116,215, 1, 68,114,185,128,131,131,131,131,227,189, + 27, 44, 0,248,227, 30,229,174, 26, 7, 7, 7, 7, 7, 7, 7, 71, 37, 16, 0, 65,111,137, 2,220, 55, 89,132,144,160,234, 30, +184, 42,253,255,177,166,125, 37,154,167,170,208,108, 91,131,116,114,154,156, 38,167,201,105,114,154,156,230,191, 82,179, 42,237, +127, 76,239,196,255,106, 11,122, 19, 26,164,255, 77, 52,185,134,138,156, 38,167,201,105,114,154,156, 38,167,201, 53,114,127,111, + 11, 55,193, 18, 7, 7, 7, 7, 7, 7, 7,199,123,134, 51, 88, 28, 28, 28, 28, 28, 28, 28, 28,156,193,226,224,224,224,224,224, +224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, 7, 7,103,176,222, 35,246,255, 79, 52, 57, 56, 56, 56, 56, 56, 56, 56,222, 27,228, +223, 52,202, 57, 7, 7, 7, 7, 7, 7, 7,199,255, 2,174,138,144,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, + 28, 28, 28,156,193,226,224,224,224,224,224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7,103,176, 56, 56, 56, 56, 56, + 56, 56, 56, 56,131,197,193,193,193,193,193,193,193,193, 25, 44, 14, 14, 14, 14, 14, 14, 14, 14,142,191,222, 96, 17, 66,218,114, +154,156, 38,167,201,105,114,154,156, 38,167,201,105,114, 6,139,131,131,131,131,131,131,131,131,131, 51, 88, 28, 28, 28, 28, 28, + 28, 28, 28,156,193,226,224,224,224,224,224,224,224,224, 12, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7,103,176, 56, 56, 56, 56, 56, + 56, 56, 56,254, 34, 8,128, 55,246, 4,160,148,158, 50, 89,164, 6,189, 9,170,210,231, 52, 57, 77, 78,147,211,228, 52, 57, 77, + 78,243,159,167, 89,149,118,117,252,199,223, 26, 74,233,127,109, 1,208,150,211,228, 52, 57, 77, 78,147,211,228, 52, 57, 77, 78, +243,223,182,240,185, 32, 30, 7,199,255,115,246, 16, 30,242,125, 61, 65,169, 51,120,162,116,164,223,123,138,153,148,125,103,205, +204, 0,119, 72,245, 14, 48, 72,178,145,121,247,217, 59,107,114,112,112,112,252,139,224, 12, 22, 7,199,255,119,178,253,234,130, +143, 5, 96,224, 4,170,139,135, 93,192, 2, 0,247,223, 89, 83,200,206,131,145,113, 5,213,197,193,222,247,123, 0, 15,184,139, +205,193,193,193, 97, 26,127, 73, 35,247,176,176,176,168,176,176,176,185,145,145,145, 98,238, 22,112,252,183,136,140,140, 20,135, +133,133,205, 13, 15, 15,143,250,199,158,228,214,122, 50, 48,198,142, 90, 61,235,114,236, 94,129,189, 82, 99,172, 11,198,208, 9, + 27,234,154,189,147, 38,159,180, 83,235,216, 90,219,110, 40, 29, 74,181, 6,127, 80,188,155,102, 57, 65, 65, 65,150,141, 26, 53, + 58, 22, 28, 28,108,203,229, 80, 14, 14, 14,206, 96,189,103, 88,150,109,104,111,111, 63, 65,165, 82, 37,133,134,134,118,253, 55, + 93,240,198,141, 27, 95,137,136,136,200,108,210,164, 73,102,147, 38, 77,162,171, 90,255, 79,196,217,217,185,110,189,122,245,146, + 2, 3, 3,227, 94, 94,111,223,160,103, 19,255, 22,131,102,218, 6,118,111,249,174,199, 8, 13, 13,237,170, 86,171,147,106,213, +170, 53,222, 96, 48, 52,252,199, 94, 76, 53,235, 0,134,215, 42, 38, 93, 41, 75, 47,210, 59, 68, 37, 42, 21, 0, 47, 18, 90, 56, +213, 88,179,144,117, 0,104,235, 59, 41, 42,249,149, 60, 59,135,139, 79, 53,230, 96,152, 86, 80, 19,199,119, 77,174, 72, 36, 26, + 73, 41,253, 64, 32, 16,140,227,138,223,127, 55,132,144, 32, 66, 72, 87, 66, 72,216,123,212,252,193,207,207, 47,149, 16, 50,150, +187,194, 28,255,111, 12, 86,239,218,164,233,199,117,200,249,190,181, 73,113,191, 58,164,100, 96, 29,114,169, 87,109,210,186,166, + 7,254,253,247,223,165, 91,182,108,177, 15, 8, 8,216, 25, 30, 30,126, 41, 52, 52,212,167, 38, 58, 97, 97, 97,199,194,194,194, +122,191,190, 46, 52, 52,180,239,203,235, 26, 53,106, 20,211,168, 81,163,194,176,176,176,167,166,232,134,132,132, 60, 9, 13, 13, + 45, 13, 11, 11,123,242,218,139,187,111,163, 70,141,142,189,118,188,222,175,175,123, 27, 60, 30,207,245,224,193,131,246,135, 15, + 31,182,231,243,249, 14, 47,110, 4,195,188,113,125, 13,174,199,208,176,176,176, 43,175,157,203,144,215,215, 85, 97, 78,174,132, +132,132, 12,121, 77,247, 74, 88, 88,216,208,247, 97,174, 90,180,104,113,233,246,237,219,181, 20, 10,133,229,203,191, 57,218, 88, +182,191,114,104,229,132, 79,123,183, 27,105, 31,208,163, 94, 13,141,149, 79,227,198,141, 47,121,121,121,237, 92,176, 96,129,253, +204,153, 51,101,255,216,167,119, 79,128, 16,132,109,193, 82,106,247, 48, 85,109,247, 97,215,222,252,219,201, 42, 59,189,209,104, + 13,240, 34,177,201, 67, 92, 35, 77,190,190, 57, 75,169,195,233, 68,129, 93,171, 62,163,121,103, 18,249,118,122,163,209, 6, 12, + 90,214, 72,243, 63,249, 80,192,227,241, 38, 12, 31, 62,156, 33,132,124,233,229,229, 37,250, 55, 21,182,225, 46,196,165,141, 55, +255, 70,136, 51,105,250, 30, 13, 69,160, 92, 46,191, 69, 8,169,251,255,204, 92, 53, 4, 32,163,148, 30, 0,224, 64, 8,225,191, + 7,205, 37,115,230,204,153, 28, 19, 19,227, 92,187,118,237,217,132, 16, 30,247,138,231,248,219, 27,172,126,181,201, 44, 7, 71, +151, 19,223, 44,217,222, 98,221,249,103,102,171, 14,221,150,143,159, 50,191,169,163,141,221,193, 1,117,200, 15,111,219,175,178, +174,150, 34,145, 8,207,158, 61,195,242,229,203, 37,179,102,205,106, 98, 97, 97,113, 55, 60, 60,124,105, 64, 64,128,188,178,180, +188,174, 73, 41,109, 42, 16, 8,214,133,135,135,111,172, 40,176, 9, 33, 77,197, 98,241, 47,225,225,225, 91, 43,170, 33, 67, 66, + 66,106,223,184,113,195,156, 16,226, 96, 74, 58, 27, 53,106,228,116,235,214, 45, 25, 80, 22, 9,136,140,140, 20, 55,106,212,104, +139,139,139,203, 90, 0, 77, 1,192,203,203, 75, 20, 30, 30,190,209,205,205,237, 87, 66, 94, 45, 52,223,118,238,132, 16, 88, 90, + 90, 98,251,246,237,224,241,120,127, 90,191,117,235, 86, 16, 66,170,125, 61, 3, 2, 2,228, 97, 97, 97,191, 59, 57, 57, 45,101, + 89, 54, 2, 0,234,213,171, 39,107,212,168,209, 30, 87, 87,215,101, 21,235, 76,209,164,148, 70, 8,133,194,165,141, 26, 53,218, + 83,175, 94, 61, 25, 0,176, 44, 27,193,231,243,151,132,133,133,253, 94,157,123,212,176, 97,195,225,245,235,215, 79,171, 95,191, +126,154,175,175,239,119, 14, 14, 14,231, 86,172, 88, 97,243,242,185, 87, 68,174, 50,179,114,243,175,220,140,121, 52, 97,120,175, +200, 90,110, 14, 3, 44, 27,116,183, 48,229,220, 43,206, 63, 60, 60,124,169,133,133,197,221,105,211,166, 69,204,155, 55, 79,162, +211,233, 32, 20, 10, 81,147,252, 89, 83,254,167,154, 57,196, 30,148,182,125,148,161,146,120,248,135,202,237, 67, 63,130,189,185, + 64,124,245,105,169, 2, 4,109,160,147,217,213, 72,147,240,219,196,164,170,164, 86,129,157,100, 97, 17, 45,192,216,248,136,207, +197,149,154,131, 97,106,166,249, 31,122, 69, 68, 68,136,218,182,109, 11,103,103,103,158,133,133,197,128,191,213,245,252, 47,106, +134,187, 16, 23,133,153,232,250, 79, 51,199,135, 58, 91,203,246,155, 98,178, 76,232, 62, 31,104,111,111,127,118,229,202,149, 33, + 10,133,226,130, 41, 38,235,239,112, 61,203,205,149,144, 82,122,173,124,213, 3, 0,205,223, 81,115,201,172, 89,179,198, 77,155, + 54, 13, 69, 69, 69, 24, 60,120,176, 57,128,159, 76,213, 84, 40, 20,222,245,235,215,223, 26, 24, 24,248, 60, 56, 56, 88, 27, 16, + 16,160,246,245,245, 77, 12, 10, 10,218, 36,145, 72, 60,255,233,249,243,239,162,249,175, 51, 88,125,234,144, 38,182,142, 46,147, +127,216,119, 83,106,124,112, 11,183, 62,109,137,216, 47, 58, 65, 26, 23,133,105, 99,190,150,154,155, 91,125,217,187, 14,105, 85, +147,131,199,197,197, 97,215,174, 93,176,181,181, 37, 27, 54,108, 16,247,238,221,123,164,185,185,121,114, 88, 88,216, 0, 83, 53, +120, 60,158,113,227,198,141,102,221,186,117,235,103,109,109, 29, 19, 18, 18, 82,155, 97, 24,227,230,205,155,205,250,246,237,219, + 91,171,213, 62, 12, 13, 13,245,137,142,142, 54,222,188,121, 19, 12, 99, 90,208, 46, 42, 42,202,112,244,232,209, 23, 81, 17, 74, +233,195,239,191,255,190,223,222,189,123, 21, 22, 22, 22,108, 72, 72, 72,109, 55, 55,183,152, 31,126,248, 97,192,158, 61,123, 20, +230,230,230,172,137, 5, 1,212,106, 53,164, 82,233, 43, 70,138, 16, 2,149, 74, 5,137, 68,242,138,241, 50, 49, 50, 16,104, 99, + 99, 19,187, 96,193,130,110,251,246,237,147, 42, 20, 10,132,133,133,249, 91, 90, 90, 62, 90,184,112, 97,247,138,117,166, 34, 20, + 10,177,125,251,118,217,199, 31,127,220, 85, 44, 22,199,134,133,133,249, 11,133, 66,236,216,177, 67, 54, 96,192,128,206, 50,153, +236, 97, 72, 72, 72,160, 41, 90,122,189,126,198,205,155, 55,157,206,159, 63,239,228,238,238, 62,102,213,170, 85, 14, 2,129, 0, + 0, 96, 52, 26, 95,137, 92, 13,232,249, 65,248,184, 25, 43,207,170,212, 26,237,188,169,159, 69, 10,140,104,108, 98,212,110,128, +185,185,121,242,231,159,127, 62,106,251,246,237, 98, 71, 71, 71, 38, 42, 42, 10,197,197,197,213,190,150,255,127,162, 87,132, 7, +190,177, 33, 0,175,168, 68,149,109,131,182,159,240, 17,127, 16,141, 60,205,248,103,227,138,237, 41, 67,221, 1,218, 8,179, 35, +249,213,210, 20,208, 6, 96, 88,159, 19,241,196,182, 73,167, 1,252,164,164, 36,120, 54,136,228, 29,142,131, 3, 37,212, 19, 44, + 66,171,165,249, 18, 2,129, 96,102,159, 62,125,228, 73, 73, 73,104,218,180,169, 76, 36, 18,205,120, 47, 81,188, 53,190,238, 88, +231,219, 18, 27,234, 58,225,124,228,223,174,227, 78,184, 11,113, 49, 55, 19, 93,219,177, 99,151,115,189, 14,195,200,218, 65, 30, +214,118,230,130,253,239, 18,201, 42, 55, 87,103,174, 95,191,110,211,174, 93, 59,204,154, 53,203,206,220,220,252,194,223, 61,146, +245,178,185, 34,132, 72,203,171, 7, 83, 1,184,190,131,230,178, 89,179,102,141,251,230,155,111,112,237,218, 53, 44, 92,184, 16, + 29, 58,116,128,149,149, 85,149,229,199,192,129, 3,101, 77,155, 54,141,234,218,181,235,157,241,227,199, 15, 56,116,232,144,219, +198,141, 27,133,159,126,250,169,184, 79,159, 62,238,227,199,143, 31,212,169, 83,167,251,141, 27, 55,190,222,187,119,111, 73, 53, +147,198, 7, 32, 42, 95, 4,101, 73, 37,132, 16,194, 39,132, 8,184, 8, 27,103,176,192,167,152, 51,108,226, 92, 73,194,166,197, +200,220,245, 51,120, 5,153, 16, 20,231, 66,115,233, 48,244,151, 14, 96, 96, 68,132, 84, 74,200,188,154, 28,220,204,204, 12, 66, +161, 16, 79,158, 60,193,131, 7, 15,208,169, 83, 39,225,138, 21, 43, 44, 3, 3, 3,127,105,218,180,233,157,176,176,176,250,166, + 24, 22,111,111,111,244,235,215, 79, 52,118,236,216, 58, 18,137, 36,154, 82, 42,240,244,244, 68,223,190,125,133, 83,166, 76,241, +144, 72, 36, 55, 89,150, 21,202,100,178,183, 70,135,222,164, 43,149, 74, 1, 64,224,227,227,115,107,231,206,157,158, 77,155, 54, +229,159, 60,121, 18, 69, 69, 69,252,186,117,235,222,217,177, 99,135, 87,147, 38, 77,248,151, 47, 95, 70,105,105, 41, 53, 85, 87, +169, 84, 66, 34,145,252,201, 96, 41,149, 74,136,197, 98,147,211, 88,110, 46,134,122,121,121,221,220,185,115,167,107,243,230,205, +121,231,206,157, 67,113,113, 49,220,221,221,111,237,220,185,211,181,105,211,166,188,171, 87,175,162,184,184,216,100, 77,145, 72, + 4, 15, 15, 15,244,233,211, 71, 48,105,210, 36, 87,129, 64,112, 83, 36, 18,193,221,221, 29,125,250,244, 17, 78,156, 56,209, 85, + 36, 18, 93, 55,177,202,144, 87,110,180,208,167, 79, 31,185, 76, 38, 67,114,114, 50, 88,150, 5,203,150,121,210,244,236,220,123, +151,111,222,143,157, 48,162,119,203, 82,141, 70,115,252,220,173,135, 1, 62,238,174,132, 80,143, 42,206,189,126,120,120,248,157, +200,200,200, 95, 15, 28, 56, 96,249,193, 7, 31, 8,110,222,188,137,231,207,159, 67, 44, 22,195,204,204, 12,124,254, 63,180,163, +108, 81,128, 13, 88,124,144,148,173, 21,139, 45, 93, 21,102, 78,117,129,231, 23, 80,219, 78, 12, 30,195,147,220,124,166,148, 3, +244, 3,212,202,177,169,158, 38,251,193,179, 44,173, 88,111, 29,100,230,236, 90, 11,185,185,185,112,171,227, 7,181,200, 78,116, +229, 73,169, 25, 72, 53, 53,203, 9, 14, 14,110,238,230,230,230,232,225,225,129,156,156, 28,120,123,123,195,204,204,204, 42, 36, + 36,228,131, 26, 95,131, 77, 30, 98, 20,161, 41,192, 44,130,145,204,134,158,191, 0, 79,178, 27,226,151, 16,193,223,206, 92,237, +220,229, 98, 83,203, 31, 56,252, 25, 28, 44,197, 88, 63,178,161,181,157,133,184, 70, 38,139, 16, 18,232,224,224,112,230,250,245, +235,182, 18,137, 4,209,209,209, 8, 8, 8,192,226,197,139,237,172,172,172,254,182, 38,235, 53,115,101, 77, 41, 85, 1, 96, 1, +244, 71, 13,122,189,150,155,149,159,231,206,157, 59,230,235,175,191,198,149, 43, 87,224,234,234,138,236,236,108, 52,111,222, 60, + 41, 63, 63,191,210,247, 82, 96, 96,160,235,227,199,143, 83, 39, 76,152,208,112,235,214,173, 82,153, 76,134,130,130, 2,252,250, +235,175,152, 54,109, 26, 8, 33,160,148, 98,195,134, 13,178,193,131, 7, 55,138,143,143, 79,245,240,240, 48,165,249, 6, 1, 32, + 1, 32, 43, 95,228, 0,100, 59,118,236,176,232,214,173,155,121,249, 58, 41, 0, 41, 33,132,235,232,245,111, 54, 88, 20,168,239, +232,233,139,194,147,187, 33,229, 19, 72,121,229, 11,159,128,121,122, 15,110, 18, 1,244,148, 6,214,228,224,102,102,102, 47, 22, +134, 97,144,158,158, 14,134, 97, 48, 99,198, 12,201,152, 49, 99,234,137, 68,162,171, 45, 90,180, 88, 80,233, 9,148, 71,164,110, +222,188, 9, 31, 31, 31,242,205, 55,223,152, 71, 70,150,125,197,222,187,119, 15, 94, 94, 94,100,254,252,249,138, 46, 93,186, 16, +185, 92,110,114, 4,139, 97, 24, 72,165, 82,180,106,213,138,108,220,184,209, 76, 44, 22,227,240,225,195,200,206,206, 70,187,118, +237,248, 27, 55,110, 52,147, 72, 36,184,112,225, 2, 10, 11, 11, 77,214,173, 42,130, 85,110,234, 76,162, 73,147, 38,235, 29, 29, + 29,151,110,217,178, 69, 44,149, 74,113,238,220, 57, 20, 20, 20,160, 95,191,126,134,109,219,182, 73,204,205,205,113,245,234, 85, + 20, 20, 20,212, 40,115,220,188,121, 19,222,222,222,100,250,244,233,210,136,136, 8, 61, 0,220,190,125,187,226, 58, 75,205,205, +205,151, 52,107,214,108,125,101, 26, 44,203, 34, 61, 61, 29, 49, 49, 49,120,250,244, 41,178,179,179,145,147,147,131,226,226, 98, + 24, 12, 6, 0,128,172,184,232,240,207, 27, 15,222,145, 75,165,178,240,122, 62,181,174, 71, 63,200,146, 75,165, 50, 31,207, 90, +117, 9,153,253,198, 11, 27, 17, 17,177,128,199,227, 93,157, 55,111, 94,253,233,211,167,139, 31, 61,122,132,232,232,232, 63,229, +171,127,164,193, 34,132,128,104,125, 64, 72,195,107, 79, 75,173,155,119,238, 47,196,179, 99, 0,171, 7, 24, 62, 34,235,187,242, +247,223, 43,117, 0, 69,125,104,224, 7,152,224,216, 9, 33,128,206, 27, 32,161, 39, 30, 27,108,154,246, 24, 41, 76, 77, 77,133, + 80, 40,132, 88, 44, 70,195,214, 31,241,119,220,209, 59,130,160, 1,116,240, 53, 73,243, 37,196, 98,241,183,159,125,246,153,252, +101,205,142, 29, 59,202,101, 50,217,204, 26,155,171, 82, 89, 4, 12,116,108, 76,170,210,227,187,195, 25,254,241, 89, 42, 95, 80, + 58, 1,208, 7,191,171,201,114,119,119,143,172, 91,183,238, 51, 79, 79,207,102,239,100,174, 20,162,171, 59,119,238,114,177,118, + 43, 51, 87, 48,168, 1,129, 20,142,118,150, 88, 63,190,149,181,157,165,180, 90, 38,171,220, 92,157,190,118,237,154,173, 68, 34, + 65, 84, 84, 20,132, 66, 33, 36, 18, 9,234,213,171,135,181,107,215,218, 89, 91, 91,255, 45, 76, 22, 33,196,138, 16,210,158, 16, +210,139, 16,242,209, 75,230,202, 19, 64,107, 66,200, 7, 0, 28, 1,156,167,148,222, 49, 81,179, 25,159,207, 63,220,160, 65,131, + 52, 62,159,255, 96,254,252,249, 95, 76,153, 50, 5,203,150, 45, 67,100,100,228,211, 41, 83,166, 32, 54, 54,214,160, 84, 42,187, + 82, 74, 15, 85,166, 85, 82, 82,114, 96,250,244,233, 22, 61,122,244,168,248, 63, 46, 93,186,132,205,155, 55, 67, 46,127,181, 21, + 68,215,174, 93, 49,116,232, 80, 43,173, 86,251,123,101,154, 14, 14, 14,109,174, 93,187, 22, 0, 64, 8, 64, 92, 97,176,238,223, +191,111, 89, 84, 84,100,105,102,102,102,233,228,228,164,168, 48, 89, 61,122,244,176, 20, 8, 4,205,192,241,239, 52, 88, 0,160, +203,203,132, 24, 70, 72,121, 4, 50,222, 75, 38, 11, 44,248,133, 89,213, 44,106,223,108,176, 20, 10,197, 11,163,165, 82,169, 76, +142,184, 84, 24, 27, 43, 43, 43, 20, 23, 23, 67,175,215,191,120, 56,172,172,172,160,209,104, 0, 0,114,185, 28, 53,140, 96,225, +202,149, 43,184,124,249, 50,248,124, 62,172,173,173, 1, 0,183,110,221,194,189,123,247, 32, 20, 10, 97,109,109, 93, 45, 93,157, + 78,247,198, 8,150, 78,167,131, 88, 44,174,150, 9, 84,171,213,244,214,173, 91,184,127,255, 62,196, 98, 49,236,236,236, 32, 18, +137,144,156,156,140,216,216, 88,136, 68, 34,216,217,217,213,232,254,152,155,155, 35, 63, 63, 31, 70,163,241,197,181,176,176,176, + 64,105,105, 41, 24,134, 49, 41,157, 44,203, 34, 45, 45, 13,217,217,217, 72, 78, 78, 70, 78, 78,206, 11,147, 85, 81, 69, 88,163, +140,203, 48, 32,132, 32, 58, 58,154,158, 57,115, 6,197,197,197,127,202, 75, 21, 17,210,127, 28,171, 2, 45,160, 23,180,203, 41, +209,139,179,117, 66, 11,135,192,182,192,179,163, 0,195, 7, 36, 86,104, 28, 84, 27, 73,249, 70,249,163, 76,173, 4, 4,237,177, +178,174,149, 73,154, 70,193, 7,217,197,122,113,162,206,206,220,191,126, 8, 50, 51, 51, 33, 22,139, 33, 22,139, 17,218,180, 45, +158,229, 26,101, 15, 82, 85, 50, 80,180, 51, 73,179,156,134, 13, 27,214,145, 74,165, 17, 13, 27, 54, 36, 47,107, 70, 68, 68,128, + 97,152,122,193,193,193,126,213, 58,255, 21, 94, 34,232,100,141,193,167, 99, 31,164, 43,157,247,223, 87,215,237,210,253, 35,235, +101,167,178,252, 31,102,104, 60, 65,245, 19, 65,117, 33, 53, 53, 89, 30, 30, 30, 45,205,204,204, 14,125,251,237,183,158, 98,177, +248,168,167,167,103,243, 26,149,111, 82,222,154,111,191,232,239, 98, 85, 97,174,244, 74,128, 47, 5, 4, 82,128, 47,133,163,189, + 45,230, 13,253,192, 90, 38, 17,252, 97,170,166, 84, 42,221,177,114,229, 74,187,215,205, 85,197,210,176, 97, 67,204,152, 49,195, +206,218,218,122,251, 95,108,174,172, 81,214,174,234, 46,128,223, 1,156,126,201, 92,121, 3,248,163, 60,106, 21, 77, 41, 77, 50, + 81,179, 73,135, 14, 29,206, 62,125,250,180,211,157, 59,119,156, 50, 50, 50,252, 38, 78,156,136,101,203,150, 97,202,148, 41,219, + 41,165,117,119,239,222, 29,124,227,198,141,122,148,210, 42, 35, 98, 25, 25, 25, 31, 79,153, 50, 37, 39, 39, 39, 7, 0, 80,175, + 94, 61, 20, 20, 20, 96,210,164, 73, 24, 55,110, 92, 69,228, 21,148, 82,100,102,102, 98,209,162, 69,153, 25, 25, 25,159, 86,166, +105, 52, 26,147,119,239,222,221, 72,167,211,185,162,172, 90, 80, 92, 80, 80, 96,158,151,151,167,208,233,116,114,150,101,229,150, +150,150,102, 0,100, 3, 7, 14,228, 63,120,240,192,223, 96, 48,164,114, 86,228, 95,106,176,120, 4,119,159,223,186, 0,235,192, +144, 87,162, 87, 50, 30,129,212,220, 2,207,146,147, 32, 4,137,169,238,129, 41,165,175, 24,172,138, 23, 99,122,122, 58,166, 78, +157,170,220,186,117,235, 61,173, 86, 27,113,225,194,133,105, 85,126,120, 3,176,179,179, 67, 82, 82, 18,253,241,199, 31,139,142, + 30, 61,106, 0, 0,123,123,123, 36, 39, 39,211,233,211,167, 23,239,218,181,139, 86,199, 96, 49, 12, 3,137, 68,130,115,231,206, +209,153, 51,103, 22,166,167,167, 83, 27, 27, 27,216,216,216,224,212,169, 83,134,105,211,166, 21,198,199,199,191, 88, 87, 29,131, + 85, 97, 88, 94, 54, 40,111, 51, 94,149,113,233,210,165,207, 11, 11, 11,199, 79,154, 52, 73,245,240,225, 67,106,103,103, 7, 59, + 59, 59,108,218,180,137, 63,104,208, 32,213,221,187,119, 95,172,171, 9, 54, 54, 54,136,139,139,163,243,231,207, 87,157, 62,125, + 90, 0, 0,182,182,182,136,141,141,165,115,230,204, 81, 21, 20, 20,140,191,116,233,210,231, 85, 20, 56,120,250,244,233,139,136, +149, 90,173, 70, 78, 78, 14,146,147,147, 95, 24, 44,149,220,188,195,151,131,187, 52, 40, 85,169,148,215,239, 61,126, 30,222, 48, +192,190, 84,165, 82, 62, 78,120, 30, 71,233,204, 55,182,109,187,124,249,242, 52,131,193, 16,113,240,224,193,123,107,215,174, 85, +230,229,229,189,209,176,255, 35, 13, 22,195, 58,130,208,102, 23, 31,151, 88,126,208,165,175,136,100,220, 0,116, 37,128,216, 10, + 16, 91,129, 47,183, 65,199,230,193,188, 77,215,138, 28, 65,217, 38, 16,138,171,110,223, 34,160, 14, 0,219,252,100,156,218,170, + 89,175,209,162,188,188, 60,240,120,188, 23,102, 72, 38,151,163, 77,247,129,204,134, 27, 26, 71,128, 54, 5,225,153,220,102, 70, + 40, 20, 78, 30, 60,120,176, 48, 63, 63, 31, 12,195,188,208,148, 74,165,232,209,163,135, 88,161, 80, 76, 55,249,220,247, 4, 8, + 33, 16, 55, 6,232,184, 71, 25,106,231, 3,247, 84,190, 19,191, 95, 47, 13, 12,110,132,225,145,246,210,239, 15,103, 5,222, 73, + 86,213, 6,140,227, 97,208,134, 86,215,100,121,122,122, 54,151,203,229,135,247,239,223, 47,107,213,170, 21, 38, 77,154, 36,151, + 72, 36, 71, 61, 60, 60, 90, 84,247, 54,149,150, 24,191,156,179,124, 75,230,221, 37,237, 1, 93,105,153,177,122,105,201, 42, 97, + 49, 99,253,153, 66,189,158,246, 55, 85, 83,165, 82, 13, 26, 50,100, 72,238, 31,127,252,241, 39,115, 37,145, 72,144,144,144,128, +239,190,251, 46, 47, 47, 47,239,211,191, 56,151, 6, 3,184, 13, 64, 13,160, 37, 0, 89,121, 79,193, 8, 0,167, 40,165, 70, 74, +105, 38,165, 52,221, 84, 65, 30,143, 55,101,213,170, 85,124,149, 74,133,161, 67,135, 34, 57, 57, 25,105,105,105,248,250,235,175, + 19, 88,150, 29, 84,174,121,135, 82, 26,107,138,158, 86,171,125,148,159,159,223,185,125,251,246, 5,249,249,249,168, 95,191, 62, +186,116,233, 2, 71, 71, 71, 56, 59, 59,163, 91,183,110,168, 91,183, 46,114,115,115,209,191,127,255,188,236,236,236,246,148,210, + 74,123,161,231,230,230,198,111,223,190, 61,110,244,232,209, 13, 83, 82, 82,252, 1,216, 20, 23, 23,203,139,139,139,197, 90,173, + 86,106,101,101,101, 21, 28, 28,108, 59,108,216, 48,179,219,183,111,251,167,164,164,148, 0, 72, 2,199,191,211, 96,233,128, 25, +155,119,111, 82,139,106,121,195,194,183, 1,100, 18, 9,164, 34, 17,164, 86, 54,208,176, 44,214, 37,100, 40, 75, 41,157, 94,221, + 3, 83, 74, 95,137, 52, 24,141, 70,172, 89,179, 70, 61,111,222,188,130,140,140,140, 17, 23, 46, 92,104,112,243,230,205,187,166, + 24,161,162,162, 34,236,222,189, 91,181,113,227,198,167, 42,149,170,161, 80, 40,212,107,181, 90,108,223,190, 93,189,116,233,210, + 68,165, 82, 25, 38, 16, 8,116,213, 49, 47, 21, 17, 44,129, 64,160, 87,171,213, 13,119,236,216, 17,127,232,208, 33,149,185,185, + 57, 4, 2,129, 94,169, 84,214,219,178,101,203,163, 29, 59,118,168, 20, 10, 69,181,140, 27,203,178,111,172, 34,100, 89,182, 90, + 6, 11, 0,110,222,188,249,171, 78,167, 11,223,190,125,123,202,250,245,235,213,230,230,230, 0, 0,189, 94, 31,182,121,243,230, +148,213,171, 87,107,170,211,192,189,188,224,129,209,104,196,150, 45, 91, 52, 59,118,236, 72, 49, 24, 12, 97, 21,235, 54,108,216, +160,222,178,101, 75,138, 78,167, 11,191,121,243,230,175, 85,105, 25,141, 70, 99, 81, 81, 17,248,124, 62,158, 62,125,170,169,136, +208, 61,121,242,228,133,193,178,183,181, 14,104, 26, 22,228,183,120,205,238,243,114,177, 88,220, 62, 50,212,255,193,227,164, 20, + 74, 73, 98, 21,231,126,247,202,149, 43, 13,242,242,242, 70,172, 93,187,182, 96,219,182,109,106,163,209,248,138,201, 18,137, 68, +255,196,167, 86, 6, 2,233,227, 44,141, 66,194, 24, 8,226,246,149,153, 43,137, 37, 32,177, 2, 36, 86,112,113,113,197,141, 4, +165, 2, 12, 68, 48,234,237, 77,120, 32,229, 32,144,221,207,132, 66, 32,146,146,140,140,140, 23, 70,168, 98,241,244,246, 71,116, + 82,137, 25, 8, 21,131, 7,135,106, 60,235,157, 21, 10, 5, 63, 61, 61,253,207,154,158,158, 60,189, 94,223,222,228,115, 79, 51, + 58, 1,236, 23,113, 25,106,167,189,119, 74,125,199, 47,216, 32,149, 26, 11,128, 91,203, 17, 88,199, 25,227,123, 5,139,190, 57, +144, 29,120, 51, 81, 89, 7, 60, 58, 28,108,137,201, 95, 23,158,158,158,205,100, 50,217,209,125,251,246,201,100, 50, 25,158, 62, +125,138,122,245,234, 97,206,156, 57, 50,153, 76,118,196,221,221, 61,178, 58,183,233, 90, 6, 77, 42, 41, 54, 70, 76,222,253, 60, +227,110,186,225, 21,115,149, 93, 74, 49,228,135, 3, 5,249, 69,234,143,174, 62,215,159,169,198,181,188, 93, 80, 80,208,110,250, +244,233,185,217,217,217,175,152,171,164,164,164, 10, 35, 16, 73, 41,141,249,139,115,169, 28,101,141,215,125, 1,120, 1,104, 64, + 41, 53, 0, 40,166,148,214, 40,116, 29, 16, 16,208,208,221,221, 29,171, 87,175,198,186,117,235,242, 23, 47, 94, 12, 74, 41,124, +124,124,204,107,170,153,153,153,121,227,209,163, 71,237,235,215,175,255,112,197,138, 21, 41, 78, 78, 78,236,176, 97,195, 48,100, +200, 16,216,217,217, 25,151, 46, 93,250,188,121,243,230,247,227,227,227,219,150,150,150,222, 51,225,254,208,156,156,156, 43,191, +252,242,203,181,214,173, 91,203, 6, 13, 26,100,183,127,255,126, 27,165, 82,233, 44, 22,139,237,181, 90,173,232,225,195,135,188, + 61,123,246, 56, 62,120,240, 32, 65,165, 82,221,160,229, 19,251,113,252, 11, 13,214,111, 79,233,149,210,226,130,133,115, 54,172, + 85, 61, 51, 16, 24,106, 7, 64,109,227,130,155, 5, 42, 76,122,152,162, 52,176,116,229,238,167,244,108, 77, 35, 88, 50,153, 12, +167, 79,159, 54,126,241,197, 23,234, 27, 55,110,252, 82, 88, 88,232,118,243,230,205,109,166,234,176, 44,203,251,236,179,207, 74, + 46, 95,190,188, 59, 61, 61, 61, 48, 42, 42,234, 25,203,178,188, 1, 3, 6,148,156, 60,121,242, 15, 66,136,255,173, 91,183, 30, +215, 32,196, 13,161, 80, 8, 66, 8,110,222,188,153,144,151,151, 23,120,237,218,181, 29,211,166, 77, 43,161,148,242,162,162,162, +146, 75, 75, 75,235, 95,185,114,101,235,151, 95,126, 89, 66, 41,229,153,170, 91, 97,222, 94, 54, 82, 21,209,172,234, 26, 44, 0, +136,138,138,138, 41, 40, 40,240,191,113,227,198,209, 97,195,134, 41,203,205,199,195,226,226, 98,191,107,215,174, 29, 30, 52,104, +144,178, 58,122, 58,157, 14,221,187,119, 87, 94,189,122,245,112,113,113,177,223,205,155, 55, 31, 86,172,187,124,249,242,209,130, +130, 2,255,168,168, 40, 83, 11,240, 57, 75,151, 46, 77,159, 55,111, 94,122,118,118,246,226, 37, 75,150,100,219,217,217, 65,167, +211,189, 48, 88, 89, 57,121,103,154,124, 56,250,135,173,191,159,186,185,116,206, 23,173,164, 18,177,104,250,247, 27,206,233,121, +184,102,162,201,220, 86, 84, 84,228,118,231,206,157, 95,198,143, 31,175, 62,113,226,132, 81, 42,149,194,204,204, 12, 98,241, 63, +177, 13,169,177, 8, 44, 73,235, 29,106,149,186,116,213,175,154,251,207, 50, 95, 24, 43,136, 45,113, 51,190, 0,223,174,216,205, +126,215,213,238, 25, 40,146,193,224, 81,213,154,252, 34,176, 36,107, 72, 35, 97,202,111, 63,141,211, 60,123,116,239, 21, 35, 20, +123,247, 38,150,204, 28,205,206,239, 98,253, 12, 44, 73, 3, 65,172,169,169, 53, 24, 12,189, 22, 44, 88, 80, 26, 31, 31,255,138, +102, 98, 98, 34,190,255,254,123,149, 70,163,249,200,228,135, 82,204,111, 96,164,212,126,219,213, 92,159, 17,195, 6, 75,165,134, + 60,224,250,143,128, 64, 6,136, 45, 16,236, 87, 7, 51,134,126, 40,152,184, 39, 35, 16, 96,221,193, 8,253, 77, 77, 39,159,207, + 63,188, 96,193, 2,153, 84, 42,197,147, 39, 79, 32,145, 72, 32,149, 74, 17, 26, 26,138,101,203,150,201, 68, 34,209,209,138,246, +157,213, 54, 89, 59,158,100,220, 77, 86, 3, 2, 9,114, 74,129, 33, 63, 28,204,207, 43, 84,245,170,142,185,122,221,100,141, 27, + 55, 46, 55, 51, 51, 19, 18,137, 4,201,201,201,232,215,175, 95,238,223,196, 92, 1, 64, 41, 0, 23, 0,113, 0,226, 1,220, 33, +132,136,240, 14,211,179, 61,120,240, 32, 58, 41, 41, 9,159,127,254, 57, 62,249,228, 19,171,143, 63,254, 24,207,158, 61, 67, 92, + 92,220,237,119, 73,168, 74,165,186,153,146,146, 82,111,220,184,113, 51, 92, 93, 93, 55,218,216,216,156,179,182,182, 62,235,234, +234,186, 97,218,180,105,223,166,167,167, 55,208,233,116,119,170,113,127, 40,165,244, 73,124,124,252,129, 45, 91,182, 68,141, 27, + 55, 46,225,227,143, 63, 78, 25, 59,118,108,250, 47,191,252,146,118,251,246,237,199, 5, 5, 5,199,171,138,134,113,252, 3, 48, +117, 86,232, 94,158,104, 58,184, 14, 57,255,113,109, 20,247,175,141,146,207,188,200,165,143, 60,209,186, 38,179,109, 55,108,216, +144, 26, 12, 6,122,226,196, 9,218,177, 99,199,210,102,205,154, 93, 10, 9, 9,241,169,201, 12,222,145,145,145,199, 66, 67, 67, +123,191,190,174, 81,163, 70,125, 95, 94,215,178,101,203,152,150, 45, 91, 22,182,104,209,226,169, 41,233,108,209,162, 69,108,211, +166, 77, 75, 91,180,104, 17,251,242,250,176,176,176,110,173, 91,183, 62,252,242,186, 70,141, 26,117,125,125,221,219,206,189,109, +219,182,201,113,113,113,244,249,243,231,180, 83,167, 78,105, 21,235,219,180,105,147,124,239,222, 61,250,248,241, 99,218,161, 67, +135,180,154,206, 94, 30, 26, 26, 58,180,121,243,230, 87, 94, 75,243,144,215,215, 85,166,217,188,121,243, 43, 97, 97, 97, 67, 94, + 95, 23, 26, 26, 58,244, 93,103, 89,119,114,114,170, 27, 28, 28,156,181,116,233, 82, 90,187,118,237,172,151,127, 11,140,252,236, +219,130,162,146,162, 73,115, 86,255,102,231,223,189, 94, 77,102,110, 15, 9, 9,241,105,209,162,197,165, 15, 63,252,176,244,198, +141, 27,148, 82, 74, 27, 54,108, 72,255, 81,179,214,239,246, 23,210,181,254, 77,233, 26,255,195,177, 51,221, 31,126, 26, 46,215, + 68,253,212,137,210, 51,147,233,181,213, 67,104,132,167,200,120,121,146, 91, 28, 93,235,119,148,110,168,219,130, 46,175, 35, 50, + 73,115,157, 87,115,186,214,239,232,131, 25,238, 15,123,132,216,105,119,108, 90, 75,159, 60,121, 66, 15,236,217, 78, 27,215,150, +149,105,174,241, 63, 65, 87,251,183, 50, 73,243,213,103,190,105, 68, 68, 68,201,111,191,253, 70,159, 60,121, 66, 79,158, 60, 73, +155, 54,109,170, 12, 14, 14,110,101,242,185, 3,132,174, 14,232,110, 88,229,123,113, 90, 91,179,130, 33,225, 18, 77,255, 96,145, +182, 91,160, 80,215,206, 91,104,104,226,206, 55, 54,112, 98, 88,127, 59,208,118,190, 82, 13, 93,227,123,129,174,241,111,111,106, + 58,125,124,124,158,123,120,120,208,183, 45,117,235,214,205,110,217,178, 37,191, 38,247, 61,220, 1,238,109,235,138,211, 79,207, +105, 77,187,212, 87,228, 54,118,227,183,126,215,188, 4, 32,216,214,214, 54,103,227,198,141,212,193,193, 33, 27, 64,224,223, 34, +127,150,173,179, 6,208, 13,128, 93,249,255,205, 0,180, 2, 80,251, 29, 52,155,180,107,215, 78, 31, 29, 29, 77,159, 62,125, 74, +143, 29, 59, 70,155, 54,109,106, 0, 16,249,183,121, 54, 57, 77,110,121,105, 33,255,205,232, 36, 33,164,237,155, 6, 35, 11, 9, + 9,161,237,219,183, 87,157, 63,127,190, 68,171,213, 14,191,117,235,214,129,119,213,252,111,164,243,191,161,217,186,117,235, 43, + 12,195,212, 46,239, 2,156,118,234,212,169,134, 0,208,170, 85,171, 43, 60, 30,175,118,185,233, 77, 59,125,250,116,195,127,218, +185, 87,224,236,236, 92,151, 97,152,227, 0, 52, 41, 41, 41, 47,122, 59,217, 7,118,139,176,182,178,104, 85, 80, 80,120, 59,227, +254,254,163,239,146,206,208,208,208,174, 98,177,120,109, 68, 68,132,252,204,153, 51,178,168,168, 40,242,143,186,158, 43,188, 68, + 16,137, 66, 65, 49,245,126,170,210,243,219,131, 57,117, 62,108,211, 84,176,105,223,121,118, 97, 79,251,248, 38, 94,242, 4, 8, +216, 31, 64, 52, 55,240,105,162,198,100, 77, 41,105, 4,163, 96,234,157,100,165,251,164, 63,242,189,219,126, 52,132,119,112,231, + 90,246,199,238, 54,241, 77,234,152, 61, 7,197, 15, 16, 43,175,154,172,249,234,115,223, 84, 44, 22, 31,237,223,191,191,217,142, + 29, 59, 84,106,181,186,115,116,116,244,217,106,157,251,122,191, 90, 48,146,121,160,212,173,234,175, 71, 60,129, 17,243,240, 69, +236,243,191,195,125,111,236, 72,220,229, 22,226, 67, 74,149, 97,156, 41,145, 43, 83, 52, 9, 33,193, 86, 86, 86, 91,243,243,243, +251,154, 18,185,250, 95,158, 59, 33,196, 14, 64, 88,121,212,138, 0,136, 49, 53,106, 83,137,102, 51, 30,143, 55,165, 78,157, 58, +245,159, 62,125,122,223,104, 52,254, 72, 41, 61,247,111,120,119,252, 27, 52,255,105,252, 37,125,216,165, 82,105,244,185,115,231, +142, 9,133,194,239, 46, 95,190,172,249, 55, 93,240, 51,103,206, 52,121,211,250,179,103,207, 54,249,183, 92,131,180,180,180, 56, + 0,238,175,175,207,138,217,127, 21,192,213,247,113,140, 91,183,110, 29,136,140,140, 60,113,249,242,229,111,228,114,121,135,127, +220, 69, 28, 29,175,197, 10,175, 91, 16,137,190, 15,114,145, 77,253,182, 19, 37, 11,142, 95,113, 95,216,211,254,121, 85,230,170, + 10,205, 27,144,234,191,111,224, 38,155, 58,191, 27,200, 15, 71, 55,185,255,216,221,230,121, 85,230,202, 20,162,162,162, 46,135, +132,132,116,220,185,115,231,102,181, 90, 61,180, 42,115,245, 70, 20, 76, 6, 74,245, 51,161,231, 5,129, 66, 84, 73,104, 94, 9, +134,119, 31, 89,200,252,187,220,178,107, 25, 52, 9, 64,224,251,212,164,148,222, 6,224,255,119,204,162,148,210,108, 0,135,223, +179,230, 37, 0,151,184, 87, 55, 7,103,176,222,194,197,139, 23, 67,184, 75,207,241,223,230,220,185,115, 26, 0,223,150, 47,255, + 60, 94, 50, 89, 33,181,164,163,255, 24, 33, 85,130,146, 20, 8,216,165,213, 54, 87,111, 48, 89,141,220,165,227,246, 14,151, 42, + 65,145, 1,138, 37,239, 98,174, 94, 54, 89, 0,106,215, 88,160,215, 3, 29,128, 4, 16,146,136, 89,120,123, 99,197, 89,120, 81, +143,193,193,193,193,241,175, 49, 88, 28, 28, 28,239,209,100,237, 9,184,137, 28,222, 36, 48,168, 13, 24,146, 80,106,200,192,232, + 68,237, 59,106, 94, 71, 14, 25, 11, 30,234, 66,100,136, 71,137, 54, 3, 35,222, 65,243,125, 83,102,158,222,110,160,102,114, 89, +131,131,131,131, 51, 88, 28, 28, 28,239, 66, 89, 84, 39,165,124,249,251,106,114,112,112,112,252,139, 32, 0,218,190,229, 3,209, +228,198,107,132,144,182, 53,248, 0, 61,197,105,114,154,156, 38,167,201,105,114,154,156,230,191, 75,179, 42,237,127, 76,227,249, +255,102, 23, 69,112, 93, 88, 57, 77, 78,147,211,228, 52, 57, 77, 78,147,211,252, 23, 46, 12, 56, 56, 56, 56, 56, 56, 56, 56, 56, +222, 43,127,105, 27, 44,153,109, 93, 39,240,153,250,132,165,126, 0, 64, 25, 18, 11, 3,123, 87,153, 19,151,254,174,218,196,161, +158,204, 76,192,219, 94,162, 55,126, 76, 51,239, 41,223, 71,122, 9, 33,205, 80, 54,188, 64, 82,121,119, 97, 14, 14, 14, 14, 14, + 14, 14, 14,211, 13, 86,221, 38, 61, 46,154,201,228,222, 0, 96,100, 41,140, 44, 80,148,159,117, 53,233,238,201, 30, 0,224, 28, +216,102,175, 88,110, 27, 97,100, 41, 88, 74, 97,100, 41,244, 26,213,147,236, 7,135, 77,154,121,222,204,222,183, 71,219,118,109, +123,118,238,252,161,111,189,160,122, 94, 0,112,239,254,189,248, 67,135, 14, 63, 50,179,247,253,163, 36,235,209,222,119, 57, 49, + 51,129,224,219,176, 70,225,237,111,222,188,254, 13,128,175,223,211,245, 18,210, 75,157,182,144,102, 71,218,112, 89,135,131,131, +131,131,131,131,163,218, 6,203, 76, 38,247, 62,189,111,189,253,222, 75,201, 0,128,182, 13, 29, 49,251,167,141,221, 9, 33,143, + 0,224,163, 47,127,170,251,237,248,193,184, 18,147, 5, 74, 41,130,189,109,208,237,227, 81, 38, 29, 84,234, 24, 16,214,183, 79, +159,143, 39, 77,154,216,245,201,147, 39,137, 59,118,236,184, 8, 0,205, 91,180,240,158, 63,127,126,159, 69, 86,214, 98,169, 99, + 64,170, 42,227,193,205, 26,153, 43, 71, 47, 91,255,192,176, 33, 59,214,253,200,111,213,177,223,231,102,142, 94, 75, 74, 50,226, +115,106,162, 37,118, 11,172,109, 33, 16,206, 38, 12,195,183,176,247,176, 7, 0,115, 39,255, 35,246, 94,205,140,102,150,246,119, + 74, 85,170,205, 89, 15,143,173,227, 38,236,228,224,224,224,224,224,224,168,210, 96, 1,128,153,148,143, 71,207, 50, 0, 0,150, + 82, 96,216,160, 94,200,204,204,168,171, 51,178, 24,216,183, 7,162, 99,211,241, 40, 33, 27,148, 82,212,117,149,153,124, 80, 30, +216,208,207, 62,255,172,229,241, 19, 39,110,124, 59,253,219, 45,132,148,141,222,189,246,151, 95, 35,102,204,156, 49,244,147, 65, +159,124,176,103,207,158, 24, 0, 53, 50, 88,140,192,114,233, 15,243,103,153,165,100,171,213,227, 38, 78,230, 77, 24, 63,102, 17, +128, 65, 53, 49, 87,254,110,174,223, 93, 60,177, 71, 38,147,201,176,110,221, 58, 49,176, 31,253,187,182, 16,117,250,240, 67,248, +248, 5, 53,249,113,229,142,250, 39, 68,162,207,109,235,126,208, 35, 39,238,100, 58,151,165, 56, 56, 56, 56, 56, 56, 56, 42,109, +228,110, 52, 82, 60, 74, 72,199,163,132,116,220,136,205,134,142,229,225,167,121, 83,241,195,172,201,200, 85, 2,123,175, 36, 35, + 46, 33, 3,113, 9, 25,200,201, 47,249,211,254,175,119,181,252,233,123, 89,195,165, 75, 45,126,108,215, 66, 30,105,109,101,101, +245, 56,102, 75,233,140, 9,153,254,179,199, 37, 11, 5, 18,135, 20, 43,135, 90, 77,118,239,217, 19,224, 96,103, 47, 55, 55,183, +152,108,237,215,110,189,165, 71,164, 69,101,154,127, 50,133,142,129, 45,187,116,233,212,201,209,193,158, 29,177, 52, 42, 54,192, +207,199,224, 83,215, 47,210,204,209,183,229,219,246,121,147,166,216, 45,176,182,151,147,195,119,231,143,237,145,169,213,106,220, +191,127, 31,185,185,185,229,219, 3, 14, 14, 78,112,119,117,198,207, 11, 38,201,102, 77, 29, 21, 34,150,200,246, 19, 66,136,169, +233,172, 9,156, 38,167,201,105,114,154,156, 38,167,249, 79,213,252, 87, 25,172,248,228, 60, 60,122,150,129, 16, 63, 23,120,121, + 56,225, 70, 92, 62,182,157, 73,198,250,227, 73, 56,115, 39, 27, 44, 95,129,140, 34,224,113, 98, 38, 30, 39,229,160,170, 74, 50, +158, 88,208,119,220,184,194, 73,245, 2,138, 26,159, 59, 58, 26, 46,118,143, 3,166, 76, 41, 24,205, 19, 11,250,218, 59, 90,238, +152, 52,118,196, 0,133, 76, 42,210,106,180,240,244,112,147,140, 28,250,217, 96,161,153,124,135,169, 39, 99,103, 23, 32, 23, 75, +229, 91,190,251,118,162,100,201,222,199,207, 75,181, 40,253,227, 74,230,211, 73, 83,103, 20,241, 4,210, 95,236,236, 2,228,166, +232,136,221, 2,107,187,219,216,124,119,233,248, 30,153, 78,167, 65,122,122, 58,180, 90, 45, 12, 6, 67,217,239, 18, 9,196, 18, + 9,138, 84, 6, 60,203, 80,162,101,243, 38,188,134,193,129,126,118,126, 29,135,115, 89,138,131,131,131,131,131,131,227,173, 6, +171, 68, 89,250,100,208,136,137, 89, 94,102,233,218,110,145,254,160,160,200, 78, 79,194,131,155,199,240, 36,250, 56,138,114,158, + 3,160,240,240,116,135, 80,245, 76,187,102,245,170, 44,214,160,126,242, 54,189,110,221,156, 93,159,196,202,153, 31, 23,214,186, + 22,247, 40,221,118,212,240,141,136,123,148,110,251,227,194, 90,215,158,196,202, 25,153,216,216,100, 80,191,110,164, 91,231, 14, +152, 50,101, 18,186,117,238,128, 73, 35,250, 16,137, 72,208,216,212,147,209,138, 36,223, 79,253,118,142, 34,163, 64,167,187, 17, + 87,162,145,201,165,210,203,143, 75,212, 90,200,244, 93,251,142,200,214, 8,249,115, 76, 49, 87, 78,230,230,223, 93, 57,245,187, +140, 82,138,212,212, 84,104,181, 90,232,245,250, 23, 6,203,210,210, 18, 5,165, 58, 60,207, 82, 34, 49, 83,137,152,196, 34,116, +236,208, 81,198, 23,136, 6,112, 89,138,131,131,131,131,131,131,227,173, 6, 43,238,202,222,230,183, 78,110,113,200,201,204, 40, + 52,147,240,193,103, 8, 50, 83,226,177,121,209, 88,236, 94, 49, 17, 5,233,241,160, 20,144, 10,121,208,148,230, 21,166,223,222, +237,144, 83, 73, 15, 66, 66,244, 31,172, 92,155,224,153,144, 64,205,183,111, 47, 17, 0,192,246,237, 37,130,132, 4,106,190,114, +109,130,167,136,228,128, 26,141,232,220,237, 35,108,217,180, 14, 17,173,187,225,247, 11,207,161, 84,233, 76,154,255, 76,226, 80, +215,195,214,209,241,163,177,159,180, 81, 52,170,107, 37,247,113,183,224,137, 4, 2,131,128, 39, 52, 30,188, 89,152,214,190, 75, +119,190, 76,110,222, 65,226, 80,215,163, 50, 29, 11,129,112,246,229, 19,191,203,120, 60, 30,158, 63,127, 14,173, 86, 11,173, 86, + 11,141, 70, 3,189, 94, 15, 0, 40, 86,233,145,158,171, 65,114,182, 10,201,217, 42, 60,120, 94, 12,145,220, 18,122,189, 62,136, +203, 82, 28, 28, 28, 28, 28, 28, 28, 38, 13, 52,154,154,153, 7, 27, 51, 62,236,156, 61, 49, 96,236, 79, 0, 0,163, 81, 15, 74, + 1,131,145,133, 41,253,231, 40, 21,156,252, 98,164,103,130,135, 39, 41, 28,240,177, 76, 5, 0, 3, 62,150,169, 60, 60, 73,225, + 23, 35, 61, 19,148, 58, 43,157,193,104,196,229,152, 44,252,184,235, 33,102,108,186,135, 99,183, 76,111, 51,206, 23, 72,199,253, +176, 96,190,140,207, 35, 36, 38,169,164, 36, 37,215, 80,194, 19, 8,116, 50,153,136,106, 41, 95,147,152,109,204,237,208,123,100, + 34,143, 39, 24, 85,117, 90, 89, 80, 74,161,209,104,160,213,106,161,211,233, 94, 68,177, 0,160,176, 84,143,244, 60, 53,146,179, + 85,120,158,173, 66, 74,182, 10,153,249,106,112, 29, 9, 57, 56, 56, 56, 56, 56, 56, 76, 50, 88, 44,128,199, 73, 57, 16,241, 89, +184,122,120,129,190, 52,129, 61, 5, 96, 48, 86, 62,169,125, 5,251,247,167,165,212,241, 46,101, 39, 79,126, 30, 17, 84,207,230, +238,200, 17,110,177, 65,245,108,238, 78,158,252, 60,162,142,119, 41,171, 55,138,140,148, 82,176, 20,229, 11,173,150, 97, 33,132, +215, 56,216,207,157, 63,123,251,227,231,163, 86,197, 61, 18, 10,133,122, 87, 91, 25,113,119,144,241,106,217, 73, 69, 26, 61,163, +241,173,215, 72, 71,128,134,149,233, 20,234,117, 51,155,181,239,173,212,233, 12,112,115,115,123,197, 92, 85, 84, 17, 22, 42,117, + 72,207, 87,227,121,182, 18,201,217, 74, 40, 53, 6,220,143, 75, 0, 97,120,247,185, 44,197,193,193,193,193,193,193, 97, 82, 4, +203,221,213, 1,215,239, 39,193,221, 78, 2, 11,115, 5, 98,227, 83,192, 99, 4, 96, 8,160, 55,152,110,130,168, 78,191,107,241, + 98,139, 69, 73, 9,198,235,171, 86, 63,125,146,148, 96,188,190,120,177,197, 34,170,211,239, 2,202,122,231,149,153,172, 50,163, +101,100, 77, 63, 17, 74, 89,123, 59, 75, 9,255,214,211,210, 92,134,225,105,108, 44, 36,172,141,133,152,113,178, 20, 11, 92,109, +132, 66,145,136,129,163,157,173, 1,148, 58, 84,166,163, 73,142,121,150, 94, 84,244, 77,243,118, 31, 41, 5, 2, 1, 60, 61, 61, + 95, 84, 19, 86, 24,172,172,236,252, 23, 17,172,244, 60, 13,164, 34, 6,183, 47,159, 86, 26,141,250,205, 92,150,226,224,224,224, +224,224,224,168,218, 96, 81,192, 76, 38, 1,229, 73,112, 49, 42, 30,190, 1,245,177,233,192, 13,120,215,107, 12,150, 53,192,192, + 26, 77, 62,216,196,169,202,232, 9, 19, 10,191, 74,207,164, 75,123,244,112, 57,156,158, 73,151, 78,152, 80,248,213,196,169,202, +232,242, 67,129,101,105,153,209, 42, 31, 33,222, 84, 8,144,150,148, 89, 92,234,233, 40, 7, 79, 32,208,200,197, 66,131,149, 92, +196,218, 89,136, 4,118,230, 98,145,189,185,136,159,155,151,165, 2, 72, 90, 85, 90,154,228,152,103,207,243,243,191,105,209,177, +159,210,204, 76, 1, 47, 47, 47,104, 52,154, 23, 6,171,184,164, 20,121, 69, 42, 80, 10,212,117,149, 35, 54,250,146, 49, 55, 43, +245, 65,126,220,177,117, 92,150,226,224,224,224,224,224,224, 48, 41,130,101,100, 41,108,109,172, 33,145,155, 35, 33, 83,135, 98, + 98,143,124, 37,133,209, 88,121, 4,139, 16,210,246, 77,235,247,239, 79, 75,217,183, 47,123,253,254,253,105, 41, 47, 59, 57,246, + 69, 21, 97,249, 95,150,154,172, 73,169,241,232,193,147, 87,242,186,134,219, 89, 49, 60,158, 74, 40, 96, 52,124, 33, 79, 39,228, + 51,122, 33,159,209, 58,152, 11,120,103, 14,108, 99, 8,161,103, 76,209,212, 36,199, 60, 75,200,202,250,166,117,231,254, 74,123, + 7, 7,124,242,201, 39,112,115,115, 3, 0,152, 73, 8,108, 69, 74,240,212,105, 56,127, 96, 67,105,108,212,217, 40, 24, 53, 61, + 94, 30,205,253,109,233,124, 23, 56, 77, 78,147,211,228, 52, 57, 77, 78,243,159,170,249, 79,195,132,201,158, 41,234, 56,201,225, +237, 34,135, 90,103, 15,181,214,136, 82,181, 17, 69, 74, 29,138,148,122, 36,100, 40,241,248,236,187, 39,132, 2,160, 44, 64, 80, + 86, 85, 8, 82,102,236, 40, 49,109,255, 82, 65,209,162, 31,231,207,234,183,115,247, 31, 24,243,161,147,219,221, 4,109, 26, 33, +140,138,225,241,245,214, 10,190,224,105,252,163,244,243, 39,246,132,150,138,148, 67, 76, 77,147, 38, 57,230,153,216, 45,240, 27, +223,134,173,103,131,130,175, 85, 21,202,167, 54, 13,192,157, 59,119,213,177,241, 25, 6,158,196,242, 46,107,212,109,205,143,227, +166,202,225,224,224,224,224,224,224,168,134,193, 82,170,148, 79, 62,232, 57,228,197,132,206, 70, 35, 5,203, 82, 24,203, 35, 76, + 44,165, 48,232, 84, 79,222, 53, 33, 70,150,189,177,122,211,206, 78, 13,130, 27,243, 2,106,153,161, 40, 63, 27, 55,175, 95, 53, + 80,150,189,106,146, 65, 75, 76,212,152, 57,248,245,233,243, 81,143,157,159,143, 24, 83,212,162, 69, 43,177,141,173,185, 46, 51, + 59,171,104,219,186, 29,198, 67,127,236, 12, 5,203, 14,164,137,137,154,234,164, 75,147, 28,243, 12,192,128,114,199,222, 26, 8, +104,169,202,126,220, 89,153, 21,119,134,203, 62, 28, 28, 28, 28, 28, 28, 28, 53, 50, 88,143,175,238,109,254,191, 72, 72, 94, 94, +230, 39, 91,119,252, 49,111,219,174, 3, 77, 53, 58,157, 11, 11, 94,178, 81,175, 63, 47, 46,206,157, 97,170, 70, 73,102,236, 3, +226,225, 17,250,235,207,139,198,255,178,114,113, 27,176, 70, 95, 16,146, 64, 8, 61, 83, 34, 84, 14,171,174,185,122, 3, 57,164, +217,145,118, 0,114,184,172,195,193,193,193,193,193,193, 81, 99,131,245,191, 34, 47,254,122, 49,128, 49,239,170, 83,110,162, 22, +148, 47,239, 21, 74,233,125, 0,220, 80, 12, 28, 28, 28, 28, 28, 28, 28,149,194,112,151,128,131,131,131,131,131,131,131,227,253, + 66, 0,188,165, 87,158,233, 51,101,215,164, 55, 65, 85,250,156, 38,167,201,105,114,154,156, 38,167,201,105,254,243, 52,171,210, +174,142,255,248, 91, 67,203, 71, 76,255,111, 44, 0,218,114,154,156, 38,167,201,105,114,154,156, 38,167,201,105,254,219, 22,174, +138,144,131,131,131,131,227, 95,135,109,221,174,102,182,117,187,154,153,186,189, 93, 64,111, 7,187,128,222, 14,220,149,227, 48, + 21, 62,119, 9,222, 29, 66,136, 24, 0, 75, 41,213,253, 85,105,176,178,170,109,110, 80,216,238,101, 88,205, 15,133,201,119, 79, +190,239,243, 11, 8, 8, 8, 6,128, 7, 15, 30,220,166,148,190,107,111, 76,200, 29,124,251, 91,153, 91, 14,215,177, 90,163,178, + 84,185,186, 36, 35,110,207,251, 76,179,157, 93,128, 92, 43,150, 46, 4,161, 29, 65,193, 80, 66,206,240,138,245,227, 11, 10,238, + 20, 86,182, 95,173,110, 11,252, 62,239,243,225,244,245,191, 29,158,247,124,255,180,216,215,127,183,238,184, 66, 49,122, 96,187, + 41, 43,119,238,255, 62,231,192,228, 18, 46,247, 87,159, 90,205, 62,182, 52,240, 29,121,105,231, 22,229, 86,103, 63, 87,223,136, + 24,129, 64, 96,167,211,233,178, 82,227,174, 5,153,178,143,155, 95,147,104, 30,143,113, 54, 26,216,148,228, 71, 87, 66,185,171, + 95, 53, 82,251, 58, 17, 48, 24,190,166, 0, 1,225,255,164,206,125,250, 78, 35, 29, 58, 59, 59, 75, 45, 44, 44, 90,152,155,155, +187,201,100, 50, 73,126,126,190, 42, 63, 63,255,121, 82, 82,210, 25, 74,169,225,175, 56, 71,187,192,238,211,248, 34,102,102,249, +191,103,103,199,236, 91, 80,249,246,221,230, 17,134, 76, 43,255,247,130,236,152,253,211,255, 14,247,202,161, 94,207,112, 80,118, + 60,195,240,154, 24,169, 97,126,214,189,253,171,170,179,127, 68, 68, 68,119,189, 94, 47,174,248,191, 64, 32,208, 92,189,122,117, + 31,247, 20,252, 69, 6,203, 53,160,183,149,158, 79,103,241,121,204, 71, 44,165,138,244,219,187,229,127,231, 19,116, 15, 31,120, +139, 97, 24,215,151,215,177, 44,155,146,116,125,203,123, 41,108, 9, 33,174, 63,141, 11,153,146,153,171, 42, 34,132,204,125,155, +249,112, 8,238,127,133, 48,164, 54, 33, 4, 12, 67,192, 43, 27, 64, 53,237,249,245,173, 13,223,160,233,100, 46,231,215, 45, 42, + 53,220,167,148, 86,249, 18,146,218,248, 56,203,108, 92,206, 71,118, 31,237,121,235,196, 70,127, 51, 7,191, 54, 37,153,177, 15, +222,195,185,217,121,121,121,133,213,173, 91,215,102,244,232,209, 66, 0, 88,178,100,137,183,183,183,119,110,124,124,252, 77, 74, +105,118,141,204,149,189,223, 39,203, 22,205,217,210,177, 99, 39,164,229,148, 98,225,226,149,145,102,142,117,123,191, 47,147, 69, +156, 67,164,150,114,121,204,151,227,103,184,116,106, 21,198,207, 47,213,225,200,153, 27, 3,246,172,255,161,181,165,101,131,160, +202, 76, 22,171, 44,156,238, 96, 70, 59,176,202, 66, 0,232,255,250,239, 46,102,250,182,118, 82, 99, 7, 39, 49,255, 54,128, 63, +170,124,185,132, 13, 58, 46, 16, 10,221, 9, 97,192, 16,128,199, 35, 96, 8, 1, 67, 0,131, 94,155,244,228,226,134,246,127,139, +130, 58,228,147, 12, 66,136, 13,195,148,165,143, 16,128, 97, 24,240,203, 70,254, 45,122,122,101,163,205,123,200, 79, 22, 65,222, +150,129, 31, 54,109,182,225,252,179, 60,121,173,150,227, 15, 19,202,172, 74,186,240,211, 29, 83,246,151, 72, 36, 86, 7, 15, 30, +180,235,208,161,131,133, 67, 80,247,243,166,236, 99, 38,146, 4, 28, 58,116, 64,216,161, 67,251,106,228, 79,223, 15,192, 48, 91, + 9, 32, 96, 89,186,132,199,210,223, 74,114,227,226,171, 59,152,176,125, 80,247, 57, 32,240, 55,121, 7,138,135, 89,247,247,205, +168,225,181,229, 73,237,125, 63,149, 74, 36,147,124,124,253,235, 38, 60,139,143, 43, 42, 42, 92,172,202,138, 91, 79, 41,101,171, + 37,166, 55,124,117,234, 98, 84, 71,190, 64, 64, 58,180, 9,231, 1,120, 39,131,229,224,224,208,125,197,138, 21,117, 34, 34, 34, + 0, 0, 6,131,193,124,247,238,221,142,115,231,206,149,155,242, 12,189, 9, 23, 23, 23, 23, 11, 11,139, 90, 82,169,212, 5, 0, + 84, 42, 85,106, 97, 97,225,243,212,212,212,212,170,246,117, 12,238,109,203, 48,152,115,236,143, 95,248, 0,208,190,231,240,121, +158,145, 95, 89, 17,158, 64,245,166,237,141, 6,173,156, 33,100,252,233,131, 27, 9, 0,180,233, 58,120,170, 93, 64,239,159,179, + 31,236,206,252, 75, 62,232,123,247,230,217, 62,214,117, 39,148, 76, 8, 9, 13,107,252, 81,183,142,240,247,114, 70,247,126, 35, + 39, 1,168,150,193,210,235,245,226, 61,123,246,184, 50, 12,195, 51, 24, 12,234, 62,125,250,100,189, 75,218,124,154, 13,186, 2, + 66,220,116, 6,195,175, 73,215,188,230, 81, 58,147,125, 61,237, 78, 9,252,111, 64,152,161,148,101,147,211,163,119, 52,225, 12, + 86, 57,182,117,187,154,241,196,194,251,173,154, 55,182,153, 58,178,135,104,205,111, 23,225, 28,220, 39, 53,237,246,111, 46,127, +215, 19,100, 24,198,117,223,246, 21,246, 50, 17, 15, 0, 80,162, 54,160,231, 39, 85,143, 6,225, 18, 54,224, 28, 8,124, 43,234, + 80,141, 70,131,132,207, 23,168, 9, 0,144,178,222, 1, 82,169,232,218,250,111, 34, 10, 7,119,169, 61,112,202,207,209,155, 0, + 88, 2,200,120,227, 67,193, 48,174, 59, 55, 44,177,119,177,145,128,207, 35, 40, 81, 25,208, 99,224, 4,227,155, 12,219,250,111, + 34,230,124,210,209,163,175,125,135,223,123, 2, 56, 90,233, 11,196, 49,192, 79, 97,235,124,242,163,225,115,156,149, 48,199,183, +243,150,216, 95, 62,177,251, 98,219,238, 67,116,207, 83, 82,148, 6,157,254, 81,110, 94,250,196,226,180,184,199,166, 22,212,102, +102,102,117,204,204,204, 26,116,236,216, 81, 50,105,210, 36, 65,100,100,228,139,223,135, 13, 27, 38, 60,119,238,156,211,162, 69, +139, 58, 57, 59, 59,171, 75, 74, 74,238,148,148,148, 60,165,148,154, 60, 41,165,163,163,221,151, 31,245,232,130,214, 61,191,128, +145, 37, 24, 54,106, 60,142, 31,253, 99, 4,128,247, 98,176,204,120,204,236,161,163,191,118,105, 17,209,144,191, 96,247, 99, 88, +202,132,104, 23,222,144, 47, 17,124,229,184,227,215, 69,139, 1,124,246,166,200, 21,171, 44,156, 30,100,171,237,215, 53,162, 54, + 14,236,208,246,115,109, 59, 5,140,204,226, 69, 36,203,171,227, 24,133,149, 84,186,194,217,146,103, 47, 54,102,175,240,234, 56, +230, 84,252,209,229,197,149,165, 69, 32, 20,186,175, 95,241,157,143,149, 66, 8, 62, 67,192,227, 17,240,121, 12,212, 90, 35, 6, +142,156,246,190, 34,140, 60,169,189, 79, 39, 6, 24, 12, 0, 44,176, 81,149,245,248, 72,117,238, 9, 97,120, 54,187, 55, 44,226, +219, 91,136,193,227, 17,240, 24,128,199, 16, 36,102,170, 48,122,210, 44,139,119, 53,234, 29,155,218,135,157,251,185,101,251,198, + 65,214,245,119, 93, 37, 22,141, 59,246,181,201, 81,203, 62,221,185,255,108,191, 90, 45, 38, 92,167,148,253, 49,249,226,210, 19, +149,233,104, 52,154,204,246, 29, 58,154, 19,190, 92,118,106,223,166, 22,124,134, 64,111,164, 48, 24,203, 6, 65,102, 41, 69,217, +119, 75,217, 71, 12,101, 41,134, 14,253, 28,237, 59,116, 84,178, 6, 54,165, 26,133,198,214, 99,167, 46,219,105,244, 44, 22,173, + 88, 63,167,180, 48,123,206,179, 88,155, 68,153, 67,221,241,202,204,184, 3,166,159, 56,252,227,174,236,238,177,253,208, 53, 4, + 5,248,151, 13,212,204, 82,248,186,202,177,253,240, 53,248,249,250,149,165,155,165,168,235,102,134,150, 31, 14,172,225,245,141, +228,203, 29,252,118,116,237, 53,168, 87,207, 94,253, 97,109,101, 14,173, 78, 83,247,244,241, 35,191,172, 94,177,176, 41, 33,228, +211,106,153, 67,106,124,241, 94,160, 44,251,206,181, 28,206,206,206,118, 97, 97, 97, 47,254,111, 48, 24,224,233,233,137,212,212, + 84,223, 26,152, 53,153,179,179,243,135, 11, 23, 46,180,111,213,170,149,192,206,206, 14, 0,144,157,157,237,114,254,252,249,134, + 13, 27, 54,204, 74, 75, 75, 59,156,153,153,169,124,171,169, 96,213, 66, 30,229,243,196, 98,105,185,175, 5, 51,105,244,199,245, +237,236,236,222,248,113,156,155,155, 39,154, 57,115, 6,225,243, 5,101,219, 83,202, 80,214,248,214, 57, 70,154, 52,105,210, 85, +167,211, 73,222,244, 91,142,193,174,147,154, 21,245, 45,123,139, 0,124, 30, 47, 63,237,246, 30, 59,147, 77,123,253,110,237,156, + 24,193,234, 46,221,186,121,116,239, 20, 9, 39, 59, 11,156,185, 22,135,177,223,252, 4,189,193,184,180, 38,247,135,199,227,241, +179,178,178, 18,173,172,172, 28,223,195,251,182,246,254,237,203,237,207, 94,188, 53,245,103,241,206,145,117,154, 13,214,151,181, + 71, 42,155,153,197, 87, 98, 46,104,217,189,173,185,181,139,159,100,221,138, 5, 2, 46,130,245,242,141, 16,241,230, 54,107, 18, +102, 51,117,220,231,162,185,235,207,227,234,241,195,170,180,219,187,223,139,185, 82,216,251, 70, 16, 30,127, 56,225,241,228,132, + 33, 34,214,200, 38, 27,180,218,121,202,156,184,244,119,213,102, 89,138,223,175, 84,211,152, 83,234,253,203,207,139,236, 29, 44, +197, 80,235,140, 24,252,229,183, 88,187,116,142,194,206, 66, 4,141,206,136, 77, 7,110,229,212, 83, 46,161,131, 59,212, 30,248, +221,250,152, 63,126,220, 26,251, 71,217,179,250,214,140, 7,123, 11, 49,190,219, 25, 7,115,169, 0, 86, 10, 33, 24,230,205,230, +106,112,151, 50,205,130, 98,173,129, 16, 34,162,148,106,223,104, 36,156,130,154,155,219,185,238,233, 49,116,142, 93, 92, 38, 1, +133, 14,241,230, 18,124,244,201, 72,203, 58,142, 82,200, 37, 60, 36, 38,167,123,126, 53,121,114,168,196,201, 47, 76,157, 30,251, +188,170,211,246,240,240,232,217,185,115,103,217,196,137, 19, 5,110,110,110,216,186,251,184,251, 7,189,198,116, 73,205,200,117, + 99, 41,224, 96,111,157,252,121,223, 78, 7,143, 28, 57,146,148,156,156, 44, 88,184,112, 97,248,222,189,123, 3,170,243, 37,106, +164, 20,106,141, 17,198,242, 23, 99,118,161,166, 6, 47, 21,194,188,253,203,156,118,107, 31, 25,198, 95,178,239, 41,138,149, 6, +200, 68,124,196,167,151, 34, 34, 60,140,191,107, 29,105,245,166, 61, 62,239,243,225,116, 7, 51,218,161,107, 68,109,216, 91,201, +176,225,231,239,112,224,234,179, 14,153, 37, 4,182, 93, 23, 14,119, 18,243, 63,176,147, 9, 87, 68,134,122, 57,182, 14,113,199, +205, 80, 47,199, 11, 81,143,226,234,245, 89, 60, 58,181, 68,112, 42,239,232,232, 55, 26, 45,134, 48,176, 86, 8,177,254,120, 18, +100, 18, 62,228, 18, 62,228,226,178,191, 12, 67,222, 41, 95, 75,157, 3,220,120,172,241,115,115,231,128,207,251,245,233,237,252, +113,191,222, 20, 60, 6,187,127, 63,216,109,219,182,173,233,102,142,190,235,140, 12,111,189, 42,237, 65,114,213,215, 19,176,183, + 16,225,171,117,247, 97, 46, 21, 64, 33, 19,192, 92, 38, 64,235,250,118, 53, 78, 39, 33,196,106, 68,183, 58,157,238,110,105,219, +202,183,150,153,207,157,248,194, 7,159,207,187,181,244, 92, 65,171,113, 63, 47, 9,176, 41, 41,208,242,103, 76, 26,202, 79, 73, + 75,107,181,251,224,249,214,206,141, 62,127,100,208,149,126,157,117,231,183,253,111,210, 75,142,189,210,208, 53,162,183, 68, 87, +162,191,119,231, 81,138, 87,190, 70,140,152,196, 34,200, 37,124,152, 85, 92, 91, 9, 31,114,137, 0,102, 18, 62,210, 82, 18,144, + 87,202,187,148,106,195,180,162,231,174, 84,171, 42, 74,173, 51,226,246,179, 18,120,248, 6,195,201,201, 25,218, 78, 3, 60,174, +159,249,125,191,220,201,127, 65,105,250,195,175, 77,213,217,126,232, 26,230, 46, 88,242, 24, 4, 15,203,223,230,254, 19, 39,140, +246,249,105,241,138, 87,214,141,252, 98,148, 79, 77,205,181,204,193,119, 91,203, 15, 63,233, 85,175,113, 59, 60, 77, 72,192,209, +131,183,208,230,131,142,232,212,165, 39,180, 90,205,192,245,107,151,223, 4,176,242, 79,101,174,147,127,179,122, 65,254,219, 92, +156,157,221, 88,182,108, 14, 88, 74,129,102, 45, 91, 99,242,184,161, 96, 41, 69,131,134,141, 90,119,234, 55,154, 82, 90,102, 4, +115,114,115, 74, 31,197, 62,104,171,202,140,189,110,242,181, 84,171,245,217,217,217,184,125,251, 54,226,226,226, 16, 19, 19,131, +220,220, 92, 88, 88, 88, 84,171,138,221,202,202,202, 60, 52, 52,244,227,223,126,251, 77, 98, 97,241, 31,207,175,213,106, 33,147, +201,208,181,107, 87, 65,179,102,205, 92, 6, 13, 26, 52,200,202,202,106,123,126,126,126,209, 27, 13,211,221, 67,105,142,245,186, +175,233,212,107,216, 72, 0, 16,138,205,158, 45,251,245,143,152,202,142, 45,148,152,187,183,237,254,153, 23, 40, 5, 33,100, 89, + 78,236, 31, 25,111,219, 86,167,211, 73,119,237,218,229, 66, 8,121,229,253, 58,123,217,206,166,247,159,100,180, 89, 61,107, 10, +223,220, 76,130,236, 2, 13,134,143, 28,109,107,178,185,170,215,109, 84, 88,195,134, 43,191,157, 52, 20,114,153, 20, 39,174, 63, +197,248,105,223, 27,242,114, 50,183,128,144, 37,217, 49,123,223,181,214,226,189, 76,247,230,227, 98, 6, 69,251, 8,201,208, 62, +145, 18,173,222,136,130, 82, 61, 52, 58, 35,140, 44, 69, 97,169, 30, 15,158, 23,195,214, 92,132,117,248,231, 83, 45,131,197, 23, +136, 58,143,249,180,147,104,209,246,235,184,122,124,187, 42, 45,122,183,172,226, 55,183,208,126,207,146,111,237,172,253,170, 71, +169,186,171,165,212, 57,192,141, 79,120,139, 91, 70,182,104, 55,114,212, 40,248,214,113, 21, 26,141, 70,122, 63,238,153,126,211, +250, 13,159, 90,184,213, 91, 90,148,114,127,122,197,203,180,186,221, 55, 89,150, 77,121, 61, 98,197,178,175,126,205,190, 73,147, + 16,192,210, 76,132, 53, 71, 19, 64, 41, 64, 64, 97, 33, 23, 96,231,185, 20, 20,230,166,229,212, 87, 46,185,252,121, 7,219,174, +243,214, 63,216,191,234, 96,102, 20,128, 24, 74,105,230,219, 52, 9, 33,224,243, 8,204,101, 2, 88,200,132,176,148, 11,193, 16, +242, 86,115,245,237, 47,119, 55, 1,120,244,178,185,122, 89, 83,238,224, 27,104,110,235,190,175,231,136, 5, 86,119,159,235,192, +231, 17,212,118,148,194, 90, 33,132,214, 64,144,152,173, 43,223,199, 28, 95, 76,156,109, 55,101,194,200, 35,132, 68,214,167,244, +156,161,178,115, 87, 42,149,162, 79, 62,249, 68,160,215,235,117,131,199,206,107,151,145,149,219,109,233,252,201, 98, 59, 91, 27, +148,170,245,136,126,152,228,255,253,162,159,107, 31, 62,125,109,223,215, 95,244,216,223,161, 67, 7,139, 93,187,118,177,213,185, +239,217,153, 57, 63,111,216,182,103,203,146, 69,243,241, 40, 41, 31,235,215,174, 4, 53, 26,214, 84,238,119, 95,213, 92,177, 98, +133, 67,120,120, 56,115,227,198,141,156,215, 13, 40, 33,144,231, 22,105, 96, 41, 23, 66, 38,230,195,193, 74, 2, 27, 51, 17, 68, + 2, 6, 12,243,159, 66,228,101,205,245,191, 29,158,199, 42, 11,113, 96,135,182,223,134,159,191,195,103, 95,126,131,251, 57,162, + 99,140,204, 98,222, 23,253,122, 78,181,147, 26, 59, 56, 91, 50,246,173, 67, 60, 32,151, 8, 49,109,204, 39,104, 20,149,104,159, + 90,192,126,147,173,226, 5, 3,248,230, 77,233,100,202, 35, 86, 10,153, 0,231, 14,237,200, 42, 45, 46, 40, 36,188,178, 42, 66, +189, 86,151,100,154,215,255,243,245,148, 59,248, 78, 13, 9,174,255,221,200, 97,159, 51, 77, 35, 26, 81,134, 17, 32,167, 88, 75, + 40, 5,198,141, 30,129, 47, 70, 12,117, 76, 78,203,154,177,114,229,154,233,102,246,254,115, 75,178, 30,206,170, 76,147, 71, 24, + 48, 12,129,153,132, 15, 51,105,153, 97, 49,147,240,161,214, 26, 65, 8,120,174, 33,253, 10, 65, 0, 66, 72, 90,242,205, 29,254, +166,164,211,185, 94,199,211,231,179,132,126,202, 35,234,171, 79, 30, 71,207,187,113,247,249, 13, 74,105, 94,173,150, 19, 6,233, + 12, 20, 37,106, 3, 18, 50,149, 48,232, 40,249,172,163, 59, 60,123, 17,223,249, 27,162,183, 16, 66,204, 43, 34, 46,175,107,166, + 92,221,173,182,173,215,179,239,146,229,107,111, 46,250,238, 27, 94, 78,161, 22, 44,165,144,136,120,144,138,248,229, 11, 15,170, +210, 66,172, 92,253,107,134, 1,164, 39, 61, 87,121,158,255,115,161, 65, 7,244,232,212, 98, 39, 1, 68,132, 17,166, 56,187,123, +184,183,233,242,169,164, 77,215, 79, 96, 52,104,167,202, 29,252,206,150,102,198,158, 54, 69, 51, 40,192, 31, 32,120,152,117,111, + 95,207,178,151,100,247, 63,252,124,253,124, 94, 95,231,237,237,235, 99,202,125,175,248,184,144,218,249, 12,243,246,171, 55,121, +228,183,107, 61, 18,210,149,176,118,243, 65,204,189,219, 56,186,235,231,104, 85,113,254,162,163, 7,254,152, 60,247,135,101, 13, +186,116,239,131,253,123,119, 77, 36,132,172,162,101,156,122, 41, 58, 53, 96,211,186, 95,220, 4, 34, 49,244, 6, 22,122, 35, 45, +251,107, 48, 34, 47, 47, 31,122, 3, 11,137, 76, 1, 3, 75,160, 55,178,208, 27, 88,104,180, 6,249,136, 79, 62, 28, 5,224,250, +155,210,233, 25,254,201, 45, 48,196,181,108,125,217, 58, 17, 99,161,116,114,114,218, 2, 0, 98,177, 24, 98,177, 24, 44,203,226, + 94, 26, 25,231, 28, 54, 96, 26,104,249,155,157,101, 83,210,163,119,132,190,237,220,221,220,220,186,188,110,174,212,106, 53, 74, + 74, 74,112,249,230, 93,139,205,187, 79,117, 72, 76,206,168,195, 26,237, 53, 82,199, 6,237, 1,116,121,219,245,204,184,183,111, + 84,173,200,113,204,196,145,159,120, 47,251,117,207,141,199,199,230, 86, 26, 78,174,221,118,170,118,242,168,254,161, 63, 44,219, +240, 56,229,252,210,241, 85,221, 35,161, 80, 40,200,206,206,126,241,124,207, 89,241,123,199,231,153, 69,109, 22,125, 55, 93, 24, +253,172, 4,247, 18, 50, 48,168,109, 45,147,159,119,167,192, 30,190,238,158,110, 75,151,206, 29,139,184, 52, 21, 86,252,126, 3, +231, 15,111,137,210,169,139, 63,204,138, 57,144, 85,147, 50,228, 93, 13, 86,101,154,103,239,230,160, 68,109,128, 70,107,128,158, +165, 40, 82,234,145, 85,160, 69,145, 82,135, 18,149, 1,131, 62,168,133,127, 3,213, 50, 88, 70,131,222,213,217,217, 9, 44, 77, +169,136,112,150, 69, 61,194,251, 41,199, 15,235, 45,117, 14,238, 85,154,118,123,143,201,109,178, 20,246,117,155, 72,165,178,195, + 63,253,244, 19,250,117,105, 46,125,158,163, 47,185,251, 92,149, 89,170,133,193,222,174,174,104,222,252,239,205,190, 95,248,227, + 23,135, 14,176, 5, 0,126,124, 99,248, 57,172,255, 45, 30,121,169,141, 21, 33,160, 44,155,146,114,115,123, 40, 0,188, 75, 91, +171, 18,181, 30, 60,166,172,237, 12, 33,128, 82,109, 64,105,126, 70,238,203,230,234,122,170,227, 83, 30, 47, 91, 71, 41,173,180, + 10,130, 33, 64,145, 82, 15, 11,153, 0,150,102, 2, 88,200,255, 19,193,122,139,185,138,169, 76, 83,168,211, 37, 27, 13, 90, 53, + 53, 26,209, 57,204, 14,246,150, 34, 56, 89,137, 33, 22,241,161, 55, 0, 42, 45, 11,181,214,136,196, 44, 21,138, 85, 34,212,143, +236,235,157,230,116, 77,105,235, 17,182, 41, 39,241,230,240, 74,239,179,209,136,109,123,142,123,167,101,100,119,219,191,101,177, + 56,171, 72,135, 59,137, 37,200, 42,208, 0,196, 2, 83,191,153, 46,158, 49, 99,102,247,109,191,159, 72,106, 25,238,159, 84,221, +235, 90,154, 21,187,181,126,211, 15,127,238,220,185,187, 34,230,250, 17, 60,190,125,250,219,146,204,234,181,191,242,246,246, 54, +252,252,243,207,118,107,215,174,245,182,183,183,127,158,149,149,245,172,162, 58,202, 51, 32, 34,237,212,233,139, 54, 45,154, 54, +231,167,228,168, 97,163, 16,194,195, 65,142,168,171,103,181, 12, 33,199,222,164, 87, 94, 13,216,223,181,237, 20, 28,184,250,172, + 67, 76,174,228,220,208,207, 7, 37,157,184,240, 40,119,197,150, 19, 63,184,152,233,111, 75,216,236, 21,183, 66,189, 28,167,142, +254, 4, 11,150,111,197,249,168, 71, 89,165,140,211,119,233, 26,195,201, 89,125, 39,191, 57,234,203, 0,124, 30,129, 66, 42, 64, +105,105, 65,225,253, 83,171,234,190,167,103,119,208,137,125, 91,153,188, 98, 61,146,115,212, 36, 45,175, 24, 70,150,194, 82, 38, +132,129,165, 40,200,203, 33,219,182,110,193,205,155, 87, 25,240,152, 33, 0,102, 85, 17, 9, 1,143, 33, 48,147, 8,202, 34, 64, +210,178,191,122, 35, 11,159,218,110, 88, 54,103,140,185,173,189, 3,218,245, 28,110,122,132, 77,110,213, 96,243,234,121, 56,119, +245,118,228,217, 39, 59,194,236,131, 26, 44,119, 13,232,189,136,177,118, 81,107,116, 70, 20, 22,228, 67,164, 77, 70, 35,151,108, + 88,203,140, 72, 44,114,194,253,140,199,102, 85, 85,103,229,220,251,227,182, 93, 80,143,233,123, 14,158, 89,208,254,131, 72,220, + 79, 44,130, 84,196,135, 68,196,131, 68,196,131,128, 24,177,120,245, 26,125,126, 97,113,231,156,251,251,114,106,144, 63, 79, 1, +120,209,230,204,204,161,142,221,214,229,211, 55, 15,157,188,176,125,135, 30,159,146,251, 55,207,126, 13,224,180, 73,101, 38, 75, + 77, 90,199,178,166,189,219, 8, 33,140,189, 87,232,246,141,155,118,244, 13,240,113, 67,102,129, 30,105,249, 58, 92,140,142,199, +230,117,211, 11,242, 51,159, 14,128,174,164,132, 37,134,194,227,199, 14, 30,251,114,236,100, 4, 6, 53,240, 40, 74, 41, 50, 7, + 80,248,202, 49,121,100,237,192,207,135,247,117,112,112, 80,252, 39,130, 69, 81,215, 55, 0,157,186,126,132,227,251,247,226, 65, +204, 93,176,180,108, 56, 31,150,165, 40,200,207,205, 48,232,181,155,222,154, 62, 30,207,117,227,154, 69,246, 12, 67,160,211,179, +208, 26, 88, 76,157, 58, 93, 59,118,198,138,102,237,155,214,143,225,129, 45,122,158, 94, 96, 25,245, 40,163, 30, 17, 40,156, 6, +140,152, 34, 84,107,140, 40, 84,234,113,106,247,178,183, 87, 51,214,105, 16,225,233,223,236,243, 97,223,172, 17,139,121,140, 46, +176,174,219,179,150,141, 3,147,107, 57,219, 22,207, 95,182,173,209,149,232, 71,157,122,246,236, 41,233, 91,199,159, 56,219, 72, + 20, 35, 70,141,174,239,232,211,108, 96,198,227, 75, 91,222,250,242,227,139, 11,220, 92,221, 94, 84, 37,218, 7,117,191, 11,192, +253,181,205,146,178,238,239,171, 15, 0,246, 14,142,106, 34, 16, 23, 87,195,128, 80, 0,152,189,124, 79,167,148,236,146, 94, 21, +230,234,246,211, 66,136,133, 12,116,122,211,155,198, 25, 9, 29, 55,101,244,103,130,188, 82, 3,206,221,205, 70,204,173,179,212, +160, 43,250,148, 18,254, 96,187,160,238, 3, 9,224, 73,129, 4,134,224, 23, 45,131, 77, 5,119,246, 21, 86,191,166,167, 44, 61, +246, 1, 61,155, 16, 30, 58,241,248,194, 48,128,245, 51,232,245,246, 12,143,151,147,113,103, 79,149, 61, 40, 95, 62,163,210,204, + 56, 44,156, 63, 3,203,214,237, 69, 90,174, 26, 22,198,100,236, 95, 63, 15, 19, 23,108,135, 74, 99,196,191, 1,147, 13,150, 67, +189,110,141, 0,134,231,104,109, 6,239,218,110, 48,235, 61, 88,234, 26,210,183,148,199, 99,152, 77, 75,191,150,228,170,248,224, +243,120,165, 38, 23,190, 14,126,225, 10,133,226,200, 31,191,239, 69,157, 90,246,194,109, 23,243, 18,162,159,169, 94,132,116,139, +178,147, 68,158,230, 74,126,207, 30, 61,100,167,207,156, 29,247, 54,131,197, 35,140,235,178,197, 63,216, 43,164, 2, 16, 2, 20, +171, 12, 24, 59, 97,202, 59, 95, 24, 10,202,251,114,194, 76,144,114,115, 85, 92,152,135,239,150,109, 42,233,233,114,230, 82,133, +185, 58,241, 80,250,164, 71,143,214,133,137,137,137,249, 85, 22,140,212,152,210,107,208, 88, 33,195,148, 85, 27, 49,132,128,194, +152, 89, 19,115, 5, 0,249,249,207,138,164,142,245,123,108, 93, 50,122, 93, 45, 23, 23, 43,133, 76, 66,204,228, 98,226,239,235, + 37,105,220, 56, 66, 82,203, 43, 80,116,225, 65, 9,158,103,171,240, 44,173, 16, 34,219, 64, 65,223,150,109,177,117,217,148, 78, +166,156,255,153,171,247,187,172, 90, 52, 93,156, 81,160, 69,236,243, 18,100,228,171,145,158,175, 65, 70,158, 26,102, 82, 1, 34, +218,246, 20, 31, 61,185,187, 75,203,112,255,229, 53,185,190, 79,227,159,237, 77, 76, 77,255,180,126,195, 70,216,182,121, 99, 99, +226,234, 42,161, 41, 41,106, 83,247, 95,183,110, 93, 94, 88, 88,152,221,247,223,127, 95,234,235,235, 27,236,235,235, 91, 59, 46, + 46,238,156,183,183,119,215, 85,203,230,158, 31,251,205, 34,119, 30,209, 91, 52,105,218,140, 39, 17, 18, 92,189,112, 92,179,105, +221,154, 52, 93, 65,201,228, 74,141,176,204, 98, 94,102, 9,129,157,139, 75,140,153,200,248, 1,159, 41,136,203, 59, 58,122, 11, +128, 63,188, 58,142, 57,117,246,214,163,184,208,168, 68,251, 51, 81, 79,178,242,148,186,186,241, 71, 39, 84, 90,224,242, 8,129, +128,199, 64, 33,229,191,136, 88, 58, 52,232,253,132, 18, 98, 87, 17, 41, 37, 40,139,104,145,178,207,150,180,148,168, 93, 38, 52, +140, 38,148,165,192,163,148, 82,148,168,203, 66,240,174,182, 50,100,103,166, 96,213,242, 77,136,190,117, 19,237, 58,118,197,202, + 95,183, 97,232,192,222, 85, 94, 87,134, 65, 89, 4,235,165,232,149,153,148, 15,128,160,160, 84,143,223, 47, 37,195,171, 54, 3, + 82,141,218, 66,133,153, 20,133,197, 42, 48, 2, 51,196, 94,220, 34, 59,122,246,198,180, 89, 63,174,255,170,168, 36,227,121,252, +131,171,240,181,202, 69,109, 23, 29, 98, 50,204,113, 43,215, 19,190,222,117,192, 8,111,154,164,157, 19, 83,111,225,126,230,247, +206,161,193, 1, 17,238,246,150, 80,105,141,229, 81, 44, 30, 54,110,216,130,196,132,148,207,115, 98,246, 69,191,143, 66,178, 36, +243,105,182,196,193,231,139,123,215, 79, 63,235,241,241, 23,112,114,169,213,160, 58,205, 19, 76, 89,103, 52,193, 96, 17, 66, 24, +107,143,224,205,155,183,238,238, 91,187,150, 35, 78, 94, 79,192,141,184, 92,216,218,218,128, 39,115,132, 79,203,193,150,247,142, + 45,251, 72,149, 83,178, 89, 32,148, 13, 9,111,220, 20,148, 82, 60,122, 24,147, 87, 88,104,241,167,178, 89,153, 22,123, 27,128, +249,203,235,100,118,254, 13,204, 44,172,111,107,116, 70,164,166,166,224,242,149,115, 13,203,183, 51, 25,177,144,135, 19,209, 89, +208,233, 89,232, 12, 44,194, 67, 2,181, 2,145,180,249, 15,235, 14, 55,206,204,204,102,164,102,230,172,133,125, 29,161,181, 62, + 67,115,231,105,161, 80,167,103, 81,199,185,242,239,114,153,117,157,249, 19, 38,142,245,231, 9,165, 40, 46,213,104,211,211, 82, + 29,127,217,113,182,228,225,163, 7, 46,158, 30,181,204,231,205,157, 37, 44, 84, 1, 89,133, 26,228, 21,235, 72,159,143, 63,119, +222,178,126,229, 0, 0, 91,170,145,244,122,187,182,172,209, 91,153, 9, 73,177, 74, 79,179, 11, 53,198, 81, 95,140,173,247, 46, +121,167,194, 92,253,248,221, 55,194,232,103, 37,184,243,180, 16, 18, 33, 15, 34, 33, 3,173,137, 6,203, 46,160,183,220,206,206, +114, 64,120, 3, 31, 28,143,206, 6,143,199, 64, 89, 90,168,149,136,205,238,251,249,249, 48,193, 13,130, 16,217,172, 9,226,159, + 37,250, 30, 63,121,102,201,141,155,209,223,217, 5,245,152,156,125,127,239,202,234,164, 53, 57, 61, 87,150,105,112, 27,107,239, +104, 27,212,181, 91, 23,113, 45, 23, 7, 98,103,109, 9, 35, 17, 98,196,200, 47,237, 77,206,243,180, 44,122,249,253,220,105,208, +104,180,176,179, 20,129, 82, 96,195,242, 89,208,106,181,112,182, 17,163,176, 84,207, 25,172, 23, 55,184,126,143,166, 82,177,252, +196,202, 5,227,152,130, 82, 61, 36, 66, 30,234,212,169,141,209, 99,199,201,218, 52,176,131,138,152,227,247, 29,155,138, 12, 70, +253, 33, 83,244,100,142, 62,161, 10,185,249,241,205, 91,119,177,182, 54, 54,204,170, 19,217, 79,115,139, 13, 47,134, 56,136,187, +126,128,189,117,252, 23, 39, 10,114, 76, 34,145,120,107,181, 90,171,170,110,232,134, 19, 73,229,141,115,201,123,185, 48, 12,195, + 24,127, 89, 62, 23,182,230, 34,104,244, 44,230, 44,217, 82,220,217,238,216,153,151,205, 85, 72, 72, 72, 97,131, 6, 13, 10, 24, +166,234,225,196,158,223,216,214,228, 13, 5,102,141,204, 85, 5,170,140,187, 55, 1, 4,189,170, 25, 34,176,245,220, 61,177,223, +128,129,211, 28, 3, 63, 84, 36,164, 23, 66, 72,116, 8,243,119,194,185,227,127,176,201,207, 30,142, 48, 69, 59, 43,183,208,205, +214,214, 6,209, 79,139,145,154,171, 66, 70,185,185, 74,207,215,160, 88, 85,140, 6, 30,118, 40, 40, 44,113,171,177,129, 37,116, +223,241,227,199, 63,237,212,173, 47, 70,127, 53,187,227,186, 85,139,238, 74, 29,252, 7,170, 50, 31,222, 48,101,255,221,187,119, + 27, 61, 60, 60,158,102,103,103, 55,154, 52,105, 82, 81,157, 58,117, 28,231,206,157, 59,172, 78,157, 58,206,173, 91,181, 42,188, +113,182,241,230,177, 95,205,106, 53,117,204,186,218, 12,195,100, 82,150, 30, 72, 43,213,207,164,217, 15, 84,149,222,167,253,211, + 98, 73,192,236, 79, 63,104,110,119,192, 90,198, 4,138,169,182, 31, 9,152,189,139, 62,152,169,139, 63,186,188,184, 94,159,197, +163,211, 10,216,111,212,140,253,119, 85,153,171,178, 8, 22,129,214, 96,132, 66, 42,248, 79,222,164,112, 90,181, 98,177,204,206, + 66, 4, 1,143, 1,159, 71, 80,164,212, 35,167, 72,135,175, 38,127,101,234, 21,100, 13, 70, 10,149,214, 0,101,249,215, 96,113, + 81, 14,166,125, 53, 1, 29,187,244,192,144, 17, 19,144,175, 2,110, 61, 43,134, 78,175,175,242,161,224, 17, 2,165,198,128,207, +218,185, 35,175, 68,135, 82,149, 1, 90, 3, 11,153,136, 15, 62,159,129, 92,194,135,185, 76, 0, 66,168,208,201,201,105, 24, 0, + 8, 4, 2,245,243,231,207,183, 86,242, 5, 15, 79, 55, 7,168,244, 12, 26,245, 93,132,182, 17,117,113,231,212,122,254,249,107, +247,106,127, 53,107, 9, 70,245,143,192,158, 88, 47, 88,219,187,195, 76, 46,133,158, 50, 0, 76, 27, 2,132,210,153,172,147, 95, +207,254,107,126,221,240,104,206,140,169,146,130, 82, 2,177,144,135, 51,167, 79,225,234,245, 91,203,178, 99,246,109,125,159, 5, +165,128, 50, 14,230,230,230,144,136,120,208,234, 52, 90,147, 35, 15, 44, 5, 40,252,237,235,117,255,163,252,222,251, 27, 89,188, + 97, 29,173,202, 92, 17, 11,231,160,141,107,214,109, 27,224,236,104,143,189,167,239, 98,227,175, 43, 80, 59,184, 51, 46, 29,222, + 8, 11,207,198,144,215,106, 6,145, 98,247, 48,134,199,175,247,229,184,175,123,134,132, 69,224,242,197, 51,200,202, 72, 95, 67, +105,172, 73,109,208,120, 2, 50,166,245, 7, 93,160,214, 26,209,188, 77,103, 28, 59,184,119, 52,202, 59, 79,152,202,235, 38,156, +101, 97,248,114, 72, 63, 65, 86,129, 86,144, 93,164, 69, 74,182, 18, 9,153, 74,236,223,185,158,154,250,214,102,248,188,176, 22, +245, 93, 5,195, 22,158, 73,118,115,117,210, 8, 52, 42,105, 92,252, 83,191, 33,159, 14, 16,212,246,246, 99,178, 10, 53,200, 46, +212, 32,167, 80,131, 18,181, 1,222, 78,181, 24,141,129, 31, 81,221,251,108,103, 41, 17,172, 60,248, 12,230,114, 1,154,248,217, +212,184, 17, 54,203,178,175,152,171,219,207, 74,113,247, 89, 33,196, 66, 30,196, 66, 6, 98, 33, 15, 6, 35, 53,241, 93,100,232, + 55,124,112, 95,169, 86, 79,145, 91,168, 5,159, 71,224,104,107, 35,118,115,170,139, 13,139,190, 4, 0, 12,157,178, 10, 67, 62, +251, 4,190,117,189, 81, 88, 88, 44, 29, 50,114,236, 98,188,161,221,221,219,210,186,109,255,133,128, 91,247,147, 38,126, 58,120, +144,160, 79,151,230,204,237,167, 69, 72,207,211,224,105,188, 18, 58,125,245, 70,163, 49, 24, 89, 80, 80,108,218,117, 8, 82, 17, + 31,217,133, 58, 80, 74, 49,111,197,111, 80, 72, 5, 72,207, 47,171,214,231, 12, 86,133,185, 18, 73, 78,108, 89,241,181,244, 76, + 28,176,236,228, 45,124, 24,238, 4, 33,159,129,216,204, 17,119,158,229,227,212,233,253,197,151,174, 94, 87,131,209, 87,217, 45, + 74,230,228,219, 80, 46, 53, 63,181,242,151,205, 6, 91,123,123,108,189,152,151,146, 95,106,208,255,167,122, 74, 79,110, 29,255, +165,182,129,213,119, 80,101, 60,174,242,115,150,165, 84,184, 96,245,126, 0, 20, 44,203,130,178, 44,120, 66,177,220,189,241, 39, +153,101,122,172,132,207, 99,212, 47, 63,249,148, 53,166, 36, 93,223, 94,105,213, 33, 1, 96, 33, 19, 96,215,249, 84, 20,230,165, +229,116,182, 59,246,162, 90,240, 88,140,248, 73, 72, 72,112, 97, 88, 88, 88,129, 84, 42, 5,143,199,171,246,133,127, 87,115,245, +246, 23, 79,148, 30,192,247,206,126, 45,187,118,148, 5,134,139, 24, 62, 66,124,157,112,238,196, 94,246,234,209,245, 61,148,153, +113,135, 77, 12,111,163, 68,165, 71, 90,174, 26,169,185,106,100,228,171,145,145,167, 65, 70,190, 26,132, 16,168,181,239, 54,124, +141, 50, 51,238,160,153, 75,224, 26,141, 14, 35, 90,180,235,129,137,179, 86,122,111, 93,243,195, 69,185,189, 79, 88,105,214,227, +123,166,104, 36, 38, 38,106, 28, 28, 28,162, 10, 10, 10,218, 45, 89,178,164,196,223,223, 95,100,102,102,150, 11, 64,250, 36, 46, + 78,120,230,200,238,132,236,180,180,225, 58,157,238,166,169,233,242,136, 28, 44,246, 51,207, 27, 86, 75,222,164,125, 29, 71, 25, +106,201,139,219,251,153,221,249,209,190,205,184,249, 89,167,151,102,165,107, 12, 39,179, 85,188,224,212, 18,129, 73,109, 1, 13, + 58,109,210,199,195,167,129, 71, 8,116, 26,109, 82, 69,230,178,183, 16, 97,214,182, 88,152, 73, 4, 80, 72,249, 48,147, 10,208, + 44,192, 26,213,248, 60,160,122, 35, 11,165,198, 8,149,198, 0,181,214, 0, 91, 55, 43,252,186,117, 55,158,103,169,176,255,102, + 14, 30, 37, 21,195,199, 85, 14, 74,171,142, 59,177,212, 80,218,103,216, 55, 10, 30,195,128, 71,192,248,121,123, 32,175, 68, 11, + 33,159,129, 72, 36,130, 92,204,135,185, 84, 0, 1, 95,128, 27,119,239, 66,163,209, 32, 60, 60, 92, 82,185, 5, 44,139, 98,249, +212,118,134, 78,111,192,145, 11, 15,240,221,248,158,248,160, 69, 40,190,226,137, 16,171,105, 8,133,181, 2, 44,195, 64,103, 96, +161,213, 25, 1, 48,111,141,182,213,170, 85,171,181, 92, 46,151, 43,149,202,226,164,164,164,115,233,177,127, 60,183, 15,236, 62, +236,216,137, 51, 91, 59,119,252, 0,209,119, 99,176,103,239,129,139, 57, 54,133,147, 42,246, 9, 10, 10,106,108,107,107,107,150, +155,155, 91,116,239,222,189, 27, 53,201,171,132, 16, 34,119,240, 27, 23,209, 44, 18, 37, 5, 89,200, 76, 78, 56,100,234,190,254, +238, 10, 76, 24, 63,218,199,183,174,175,143,177,188, 39, 85, 64, 45, 5, 70,140, 28,229,227,229, 83,215,167,162,163,135,127,173, +202,199,187,148, 59,248,142,250,110,241,234,129,181,220,220,112,244,114, 44, 22,124, 51, 34, 90, 46, 83,120,186, 58, 88, 89, 10, + 3, 67,113,251,246, 21,216, 67, 4,115, 7, 31,215,126, 93,135,187,182,239,216, 21,247,238,220,194,210,133,115,175,150,242,164, +243, 77, 73,171,153, 67, 29,187,224,176, 22, 31, 43,172, 29, 80, 80, 88, 12,133,149, 61,252,235,135,125,108,230, 80,103, 74, 73, +230,211,236,154, 62,235, 44,165,208,232, 40,242, 75,116, 72,206, 86, 33, 49,163,204, 96,177,108, 53,218,252, 80, 16, 51, 9,159, +111,173,127, 82,235,222,169, 51,212,221,205,129, 44,156,251, 21, 79,135,178,198,226,217,133, 26,100, 23,105,145, 93,168, 69,137, + 90, 15,107, 57, 31, 44,101,171,253,181,157, 95,162,131,162,188,157,172,145,173,185, 9,152,181,100, 71,147,148,108,101,155, 31, +231,125, 35,188,147,240,146,185, 18,148, 69,175,196, 66, 30,140,172,105, 17, 44, 30,159, 25,253, 97,155, 70, 72,206, 81,149,245, + 66,102, 8,188, 3, 27,194, 86,202,162, 77,223,169, 0,128, 46,157,202,134, 33,121,150, 94,138,131,215,210, 1, 64,104,106, 90, +115,115,139,197,123, 79, 70,143,221,241,235,143, 34, 13, 43,192,218,163, 73, 80,106, 12,144, 8,121, 16, 11,121,144, 10,171,247, +126, 51, 24,203, 58, 75, 60,207,209, 67,169, 86,163, 72,165, 7, 5,112,227, 73, 9, 84, 90, 3, 10, 75,245,104,236,103,197, 25, +172, 10,115,181,121,249,215,210,211,113, 20,103,239,228,162, 87,115, 87,228,102,165,224,215, 85,203, 88, 74, 1,177, 68,148, 97, + 52,176, 71, 85,172, 97,114,193,157,131,133,149, 22, 18,118, 1,245,165, 50,217,153, 31,150,174,213,217, 59,184,176,127, 92, 43, +200, 42, 84, 26, 95,137, 21, 26, 53, 26,134,178, 84,104,138,185, 42,143, 52,233,102,142,238, 1,150, 82,204, 90,186, 27,243, 39, +245,133,153,148, 47, 35,132,200, 74,213, 6,140,159,189, 14, 63,125,251,185, 66, 38,230,131, 16, 64,173, 53, 98,196,104,211,162, + 4, 74,141, 17,165, 5, 25,185,245, 74, 22,191,102,174, 66, 10,195,195,195, 11,172,172,172, 80, 19,131,245, 38,115,229,232,232, +232, 44,147,201,172,125,124,202,218,186,242,120, 60, 24,141,198,210,199,143, 31,215,104,208,183,162,130,236,125,233, 9,247,194, +155, 68,126,136,243, 39,246,177, 87,143,172,235, 81,157, 46,230,150, 22,230,201,209, 15,146,252, 9,204,202, 34, 88,229,230, 74, +171,103,225,238, 32, 67, 74,242,115, 88, 90,152, 37,155,170, 39,115,244,233,192, 80,222,112,150,224, 87,101, 70,236, 17, 0, 40, + 73,141, 25, 41,179,175,123, 47, 38,230,206,210,206,253, 71,139,218,245, 26, 41, 92,179,224,139,169, 0,250,153,170,155,153,153, +169,180,179,179,187,234,228,228,212,121,246,236,217, 26, 0, 98,141, 70,195, 12, 30, 60, 88,150,148,148, 52,158, 82,106, 82, 26, +155,127,182,199,150,136,139, 59,122,249,132,245,119, 87, 20,127,208,170,121, 4, 34, 2,221,144,220, 60, 2, 0,198, 36,149,152, +249, 54, 27,185,126, 87,109, 59,215, 35,107, 54, 30,156, 63,180,111,219,241,206, 93,102, 47, 78, 59, 56,179,210,136,216,163, 11, +235,219,191,201,190,243,121, 12, 20, 82, 1,204,164,124, 40,164, 2, 40, 36, 2,232, 13,180, 58, 85,112, 84,111, 96,203, 34, 88, + 90, 3, 74, 84, 6,156,185,157,137,140, 66, 45, 10,138,117, 80,233,140,160,160,208,233,217,138, 81, 69, 42, 55,171, 87, 54, 89, + 86,252,219, 53,164, 95,225,178, 57,163,205,127,191,148,242,162,135,158,133, 76, 4,133, 76, 0,128,226,194,133, 11,176,177,169, +122, 88, 44,150,101,177,231,216, 13, 44,222,116, 6,199, 54, 76,134, 68,200, 67,253,110,179,241,105,247,112,176, 44, 69,252,163, +152, 76,159,128, 6, 14, 12, 35, 5, 67, 8, 52,122, 22, 0,125,235,245,212,106,181, 54,207,159, 63, 47,242,246,246,118,116,113, +113,233,197,227,241,168, 24,208,236,219,153,167, 60,125,104,187,172, 84,165, 49,202, 12,133, 27,188,211, 85, 31,250,248,248,128, + 16, 66,109,109,109,133,103,206,156, 41,169, 87,175,158, 93, 77,158, 35, 66, 8, 35,181,175,187,108,200,200,113,189,188,234,212, +193,238,237, 27, 64, 41,249,221,212,253,183, 29,188,138,197, 75, 94,237, 49, 56, 98,228, 40,159, 53,171, 87,189,178,110,224,231, +195,124, 42, 51,120,174, 65,173, 39,251,249, 5,224,106, 76, 10, 22, 78, 31, 25,173,206,122,214, 95,107,102, 51, 92, 87,146, 62, + 33,184, 97, 40, 28,109,204,145,150,167, 65,215, 1,221,209,180, 89,115,220,187,115, 11,115,191,253,234, 42,148,218,118, 85, 69, +109,255, 99,132, 4, 35, 90,181,239, 46, 80,105,116, 88,190,112, 6,134, 79,250, 14,141, 91,119, 17,220,191,125,109, 4,128, 57, +166,158,179, 70,103, 68,171,122,182,101,166, 89,207,226,192, 51, 30,255, 77, 57,144,207, 35, 76,112, 29, 75,168,180, 6, 20, 41, +245, 85, 68,176, 72, 70, 65,113,169,199,207,243,199,241, 74,213, 6,100, 23,106,145, 85,168, 65, 78,193,127,140, 85, 78,161, 6, +217,133, 90, 8,248, 4,113, 9,105,224,241, 72,181,219,223,229,151,232,209,168,174, 85,217, 51, 90,195,218,144, 28,131, 93,199, + 59,113,105,109, 22,206,157, 38,188,147, 88,138,187,207,138,202, 35, 87, 60,136, 5, 12, 68,229,255, 54,154,224,175,236, 3,186, + 54, 25,216,175, 91,160,185, 92,130,180,184, 98,240,121,101, 67,189, 88,216,187,193, 66,172,198,151, 35,135,193,214,198, 18,207, +115, 52, 88,182, 55, 14,119, 31, 60, 1,171,170,222,105,255,188,253, 88,143, 65,159,244, 21,243,132, 98,108, 57,148, 0,177,144, + 7, 62,213, 34,230,218, 5, 77,102, 74,130,174,184,168, 64,206,231, 11, 76, 18, 37, 0,173,136,204,205,159, 53, 21, 59, 55,173, +194,241,168,172, 23,205,231, 47,253,254, 19,198, 77,155,135,156, 34, 45, 0,242,143, 15, 99,241, 43, 51, 87, 18,145,232,196,166, +101,211,164,167,227,128,115,119,203,204,149,170, 36, 7, 91,214,175, 45,161, 96,219,102,222,223,111,242, 23,161,220,190,110,144, + 88, 46, 63, 63,125,222, 50,141,131,139,135,225,200,237,162,220, 98,181,241, 79, 97, 16,161, 76,110,148, 91,216,169, 45,221, 27, + 46, 22,168,180, 51,178,179, 31,148, 86, 21,105, 98, 41,197,161,235, 25,160,180,236,147,232,183, 11,169,224, 49,101,213,133, 70, +182,172,250,228,228,237, 44,240, 25, 98,114,151,115, 66,128,223, 78,220,206, 9,122,131,185, 10, 11, 11, 43, 48, 55, 55,135,165, +165, 37,204,204,204,170, 91, 96,191, 49,114, 37,147,201,172,143, 31, 63, 46, 49, 55, 55, 7,143,199,131, 70,163,193, 7, 31,124, + 80,163,155, 42,119,240,237,215,184, 77,207, 5, 77, 91,125,136,179,199,255, 96,175, 30,217,216, 83,153, 85,141,241,123, 0,116, +108, 81,255,224, 15, 63,173,168,253,213,212,233, 98,133,132,143,135, 37, 90, 48,132,192,221, 65, 6, 27, 51, 30,174,158, 57,164, +238,245, 65,189,131,166,234,213,114,245,216,178,104,249, 26,155,197,223,207,110,103,101, 85,219, 33, 63,255, 89, 17, 0, 40,179, +226,214,152, 57,250, 62,114,173,117,226,124,131,150, 61,224,224,226,221,169,186,231,155,157,157,157, 25, 24, 24,248, 48, 32, 32, + 32,180, 87,175, 94,116,193,130, 5, 86, 41, 41, 41,187, 77, 53, 87,192,255,177,119,214,225, 81, 92,251, 27,127,207,250,102,227, +196, 29, 72, 8, 9, 17,220, 10, 65,131, 59,148, 2, 69, 74,105,145,150, 10, 82,161,180, 72,169, 64, 75,129, 42,180,208,226,238, +165,184,187, 75,132, 4,136,187,103, 37,155,213,217, 57,191, 63, 32,185,129, 27,217, 0,253,221,123,233,249, 60,207, 60,217, 36, +179,239,156, 51,115,102,206, 59,223, 99, 64,207, 94,225, 51,236,164,150, 14, 13, 20,130,240, 64, 79, 5, 58,134, 63,108,253, 28, + 53,160, 51,252,252,253,145,156, 87,222,178,164,156, 23,151, 25,133,129, 63,255,122,231, 90, 35, 87,225,155,156,206, 24, 15, 96, + 95,189, 43,109,252,171,227,123, 69,244,202,222, 70, 12,254, 97,249,168,151,193, 50,152, 44,208, 25, 44,208, 25, 57,104,141, 22, +148, 27, 45,224,233,195,123,130, 16, 2, 19,199, 87, 28,178, 94, 9,116,104,224,138,192, 70, 15, 71,189,218,219, 60,156,178,225, + 97, 19, 33,224,226,226, 2,119,247,186, 27,119, 40,165, 48,154, 30,222,226, 70, 51, 95,217, 68,106, 52,113,160,148,226,222,189, +196, 15,211, 82, 82,134, 52, 9,110,210, 37,172,121,139, 6, 10,153, 0, 0,106, 52, 3,229,229,229, 22,123,123,123,247, 6, 13, + 26, 8,178,179,179, 43,251, 61, 54,105,217,157,219,179,123, 23,134, 15, 31, 86,118,247,234,237,202, 17, 85, 58,157,142,116,234, +212,201,193,207,207, 79, 96, 48, 24,212,245,142, 90,185, 53, 29,234, 23,250,210,151,227, 39, 78,105,218, 61,186, 47, 78,157, 56, +138,125,187,183,172,215, 22, 36, 30,181, 86, 39, 36, 36,244,223, 70, 17, 6, 5, 55,253,183, 81,132, 13, 27, 7,215,104,176, 28, + 29,155, 59, 52,111,219,205, 47,173,200,132, 67,135, 14, 66,171,202,251,204,104, 44, 43,135,152,174, 57,176,229,231, 73,111,188, +191,208,161, 91,215, 40, 56, 59, 40, 32, 18, 9,113,227,218, 37, 44,254,252,147, 75, 40, 55,246,174,235,249, 89,153,223,176, 48, + 73, 19,255,134,239,249, 7, 69,224,198,229,115, 72,186, 23, 27,119,251,218,165,240, 38,145, 29,224,230, 29,240, 30, 9, 11, 91, + 76,227,227,235, 92,169,130, 90, 44, 89, 19, 38,207,124,116,253, 31,254,173, 99,203,198, 82,242,228, 13, 0,192,204,153, 44, 27, + 86, 45, 46,168, 58,138,176, 38, 93,189, 70,185,243,236,229, 59,179, 7,245,142, 18, 20,169,141, 15, 35, 86, 42,227,163,205,128, +162,138,207,106, 3,130,189,237,144, 20,123,151, 55,107, 85,187,234,119,103,210,252,105,111,189, 99,243, 48,237, 60, 40, 79,107, + 53,252, 53,166,213, 34,121,117,213,231, 31,147, 59,105, 90,220, 73, 85, 63,108, 18, 20, 11, 31, 26, 43,177,160,210,108, 89,213, + 74, 38, 16,124, 51,126,100, 31, 20,169, 77,224,121, 64, 36, 20, 60,218, 36,200,208, 16,100,106,202, 81, 84, 90,136,148,180,116, + 40,243,146, 32, 16, 8,224,234,221, 20,229, 25,214,165, 85, 99,177,107,106,182, 32,104,228,128, 40,225,158, 75,121, 80,200, 68, + 80, 23,103,226,194,145,109, 58,158,179,172, 50,154,141, 91,221,169, 52, 54, 62,102,135,201,202, 71, 71,161, 90,107,240,144,137, +133,216,177,238, 39,140,124,109, 90, 69, 4, 18, 0,240,225,220, 69,128,128,160, 84,169, 5, 64,158, 58, 42,250, 63,111,176,196, + 2,225,177,181, 43, 62,145,199, 23,202,113, 53, 49, 23, 47, 71,249,162, 92, 83,132, 95,127,250,190, 76,111, 54,244, 43,140,217, + 87,191,112,187, 64,208,103,212,235,179,227, 2,155,134, 25, 78,197,150,165, 42,181,230, 26,251, 49,116,124,249,211,184,235,127, +253,216, 95,101, 78,126,203,206, 59,220,194,115,220, 55,229, 5,137, 11,171,127, 75,166,210,133,223,239,168,108, 30,252,104,241, +134,135,159, 45, 22, 88, 40, 15,202, 3,211, 63, 91, 9,142,183,128,183, 88,192, 91, 40,136,217,162,168, 51, 92, 46,151, 28,141, + 40, 91,230, 88,157,185,114,114,114,130,139,139, 11, 92, 92, 92, 80, 97,136,158,181, 89, 48, 56, 56, 24,118,118,118, 56,119,238, + 28,108,108,108, 96,107,251,116, 19,228,219,121,132,190,210,190,199,176, 77,221, 7,189, 46, 56,190,231, 87,203,149,211, 7, 94, +214, 21, 36, 88,109, 2, 44, 22, 11, 49,155,205,232,211,173,117,250,173,196,140,195,159, 47, 92,208,183,109,143, 17,178,151, 66, +220,161, 51,114,200,206,202,194,165,147,251,244, 77,252, 93,142,116,109,223, 44,221,108, 54,195, 98,177,212, 89,129,235, 13,198, + 98,161,216,198,101,212,232, 87,101,215,174, 94,221,100,235, 17,178, 69, 32,228,111, 83,139,176, 57, 64, 95,105,222,188, 25, 76, +102, 30,229,229,154,146,167,201,119,124,124,252,213,229,203,151, 55, 21,139,197,126,219,183,111, 47, 42, 45, 45,173,215,114, 65, + 71,207, 38,174, 16,145,210,251, 82,222, 52, 38,192, 94,211, 43,163,115, 71,140, 30,216, 25, 91,255, 58,143,211,231, 46, 33,189, +204,238, 86, 25, 39,218,155,153,158, 99, 8,111,160,222, 53,184, 99, 67,225,142,117,165,187,220,187,207,121,133, 82,217,209,194, +211,243,181,214, 87,222,128, 70,103,134,131,226,225,124, 77, 21,145, 44, 33, 33, 86, 59, 33, 2,164,156,187,116, 35,162, 77,112, + 24,110,166,168, 80,160, 52, 64,103,224,192,243, 20, 60, 40, 92,236,165,144, 75, 4,200, 72, 75, 1, 79, 77,169,245,171,103, 80, +216,111,196, 20,209,195,227,240, 34,177, 88, 4,250,168, 94,180,145, 75,203,220,221,221,173,138, 96,153, 56, 14,195,251,182, 71, +135,182,205, 49,100,202, 82, 0,192,137,245, 31,195,217, 78,140,157, 59,119, 34,227,252,242,141,129, 47, 77, 59, 26, 27, 19, 55, + 34,238,230,197, 87,251,181,182,105,233, 41,202,169,177,105,163,172,172,108, 23, 33, 68, 42,145, 72,250,118,233,210,165,193,174, + 93,187,148,174,174,174,188, 84, 34, 41, 28, 60,104, 32, 47,150, 72, 42,203,206,133, 11, 23,196, 83,166, 76,177, 47, 45, 45,205, +200,207,207,191, 68, 41, 53,215,254, 2, 24, 26, 13, 1,182,128, 16,185,157,141, 34,189, 99,244,104,239,182, 29,218, 59, 14, 29, + 62, 18, 50,169, 12,199,142, 30,198, 15,203, 23,111, 47,203,189,251,122,125, 78,229,243, 24, 69,168, 82, 57,106,239,199,223, 46, + 77, 45, 48, 58,139,157,130, 33,150,217, 79, 33,142,222,223, 11,101,118,243,221, 90, 12,117,216,185,255, 32, 98, 98, 99,209,192, +198,140,228,164,251,229,177,183,110,254, 82, 78,196, 11,105, 97,124,185,213, 17,230, 98,203,136,142,227,250, 58, 27, 76, 22,156, + 61,249,151,158,231,248,190,151,206, 28, 76,242,109,218, 86, 30,209,182,167,115,209,190, 53,195, 1,108,173, 75, 39,245,202,198, +127,235,122, 17,216,254,149,156,131, 71,207,216,121, 5, 52, 17, 18, 8,161,215,149,163, 48, 61,134,211,171,242,202,243, 99,246, +122, 91,147,190,116, 46,251,179,207,190, 94,249, 86,155, 22,225,182,148, 74, 30,139, 88, 85, 24,171, 34,181, 17,174,246, 82, 24, +180,165, 72,186,115, 78, 95, 40,206,255,164,246,103,157, 89, 81, 92, 92, 34,173,248,221,166,204,169,161,202, 81, 37,171, 52,129, + 66,192, 81,229,100,248, 87, 83, 90,137,212, 98, 49, 43,172,185, 61, 29,237,228,136, 73,205,173,236,208, 46, 19, 63,236,123, 37, + 21, 11, 43,251, 97, 89,121,159,183, 22, 73,237,144, 93,172, 7, 1, 5,111,225,192,153,141,208,168,213,200,206,201, 67,126, 94, + 62, 52, 26, 37, 20,118,206,136,104,217, 14,246,118,182, 72,184,113, 26, 0,177,234,229, 87,207, 75,130,219,182,105, 35,142, 75, + 47,131,201,204, 67, 12, 19,206, 31,218,170, 55,155,141,131,242, 99,246,158,172,239,115,152,227,233,241,216,196,244,112, 95, 55, + 47,114, 43, 73,133,141,171,127,132,241, 81, 36,211,108,182, 32, 54, 67,139,220,146,114,100,101,166, 83,240,150,227,120,193,169, +209, 96,113, 28, 39,247, 15,104,132,209, 83,198,226,151, 95, 86,226, 94,114, 6,126,251,249,145,185,186,179,231,130,149,134, 34, +186, 98,174, 12,109, 94,194, 55,175,255,146,154,181,255,102,137, 64,103,172,125,253, 41,185, 91, 0,162, 94,255,238,136, 78, 83, + 34,181, 24,202, 69,127,110,124,125, 75,117,154, 15,125, 27, 49,126, 57,107, 20,236,108, 68, 32,132,160,162, 89,240,231, 69,147, +161,144, 9, 65, 8,129,206,192, 97,236,140,101,216,184,108, 38, 40,128, 55,222,154, 85, 94, 83, 58,171, 24, 33, 50,177,111,227, +193, 95,252, 30,191,239,124,154, 75,242,128, 1, 93, 85,173, 91,183, 86,218,216,216,192,198,198, 6, 14, 14, 14,112,118,118,134, +147,147, 83,157,121,127,244,187, 71, 93,125,174, 4, 2, 1,108,109,109, 97,103,103, 7, 91, 91,219,127, 51,110, 79,106,254,155, +185,242,108, 58,178, 93,247, 97, 91,122, 12,158, 36, 56,190,231, 55,254,250,233, 63, 71,234, 10, 18,247, 90,123,141, 30, 53,235, +220, 30, 62,124,120,228,148, 41, 83, 36,159,188, 53,252,200,145,211, 55,238,237, 62,182,107, 80,137, 82,227, 71, 41,133,147,163, + 93,230,203,189, 34,255,140,106, 27,146,126,226,196, 9,126,203,150, 45, 6, 66, 72, 76, 93,233, 44, 42, 42, 88,123,226,248,201, + 37, 81, 93,187, 97,245,186, 45, 3,226,226,239, 14, 72, 74,186, 15,191,128, 64, 52,106, 28,140,114,226,140,147,103,206, 65, 83, +146,183,214,154,116, 86, 37, 50, 50,210,167, 69,139, 22,190, 74,165, 82, 63,111,222,188, 16, 74,233,222,136,136,136, 54,173, 91, +183,206,187,121,243,102, 86, 77,195,254,171,106, 94, 92, 57,180, 16,192,250,134,221, 38,110,207, 54, 41,223, 3,176,216, 63,192, + 31,167,207, 93,194,165,243, 87, 86, 22, 41,252, 23,190, 62,118,226,228,134,131,133,111, 12,238,216, 80,232,238,172,192,230,223, +190, 19,238,191,148,182, 44,173,216,178, 6,192, 34,107,174, 81,229,195, 90, 99, 66,167,102, 13, 96,182, 80,240,244,161,233,178, +151,139,171,109, 34,172, 78, 83,100,148,189, 62,117,202,148,164,136,230, 45,223, 31, 59,113,170,164,101,160, 31,174, 62, 80, 2, +132,160,129,167, 45,114,115,115,113,118,231,111, 92,105,118,194, 74,161,144,255,188, 62,231, 51,235,198,214, 38, 21,159,189,188, +188, 38,223,138,141,197,233,211,167, 81, 97,172,220,220,220,170, 53, 88, 79,106,150,150,106, 46, 44, 90,186,186,211,155,227,134, + 96, 96,183,112,156,185,150, 4,227,163,249,150, 42,134,132,167, 92, 90, 37,125,111, 84,160,241,173,225, 77,213, 58,179, 52,237, +179, 84,213,217,170,147,200, 62,169, 73, 41, 53, 18, 66,246, 39, 38, 38,118,110,209,162, 69,195,131, 7, 15,150,196, 93, 57,242, +216, 68,119,179,102,205,178,251,229,151, 95, 20,148,210, 11, 6,131, 33,217,170,188, 11,176,249,198,245,235, 46, 38, 51,143,115, + 87,110, 55,235,217,169, 37,120, 10, 92,187,118, 13,107,126, 95,163,143,185,115,107,169, 54,223,243,243,154, 38,183,173,233,124, + 90,158, 97, 20, 97,133, 38,165,167, 57, 59,143,208,149, 23,206,157,153, 43,243,110,131,208,254,159, 12,206,190,189,127,176,103, + 88, 31,184, 6,190,132,156, 59,251,113,225,200,166,131, 60,199,125, 44,231, 5,233,218,194, 4,173,181,247,123, 5, 50, 27,197, + 59, 97,173,187, 34, 35, 61, 13,169,247, 99,215,235,138,239,231,216,121,134,174,207,201, 74,159,218, 56,188, 19,206, 31,217,250, +110, 77, 6,171,174, 50,239, 46,215,172, 60,117,254,226,232,236, 29,251, 61, 52,101, 58, 27,145, 72, 80, 46, 19,145,124, 73,121, +210, 54,107,211, 73,227,227, 77,238, 65, 47, 13, 31, 51,229,211,191,150,125, 61, 87,236,225, 36, 67, 94,169, 30,106,157, 9,154, +114, 19, 4,132,160,137,183, 45,116, 90, 53, 46, 29,220, 96,182,232,139, 71,209, 7,143, 71,220,170,106,186,133, 15,249,130, 16, + 76,255,244,211, 57, 16, 74, 29,188, 27,247,252,196, 36,104,236, 9,103, 60, 49,153,121, 3,160,113,207, 79, 96,208,228, 15,250, +244,211, 57, 33,148,210,158,110,225, 67, 52, 21,107, 17,214,148,247, 98,141, 9,175,118,247,131,137,123, 56,127, 24,199, 3, 22, +254,225, 11, 63,165, 0,173,165,221,190,170, 38, 5, 36,219,254,186,128,156,124, 37,116, 70, 51, 12, 70, 14, 38,179, 5, 2,161, + 16, 78,206, 78, 8,110,212, 10, 78, 78,142, 40, 40, 42,194,181, 75,231,113, 57,241, 86, 10, 5,190, 40,106,160,218,100,205, 53, + 34, 34,219, 38, 30,238,174, 36, 95,109,132,141, 84,136,203, 55, 78,155, 41,176,214, 26,115, 85,157,166,170, 92,185,236,227, 69, +223,143,249,229,187,249,158,145,141, 29,144, 85,164, 67, 86,161, 30, 26,253,195,247, 27,206,194,195,168, 83, 33,241,218,161, 60, + 14,229,203,254,185, 17, 44,177,216,112,237, 78,162,236,227,133,223,226,238,131, 20,172, 89,249,163,214, 96, 54, 89,109,174,170, +227,143,183, 26,109,173,223, 55, 30,205, 91,250,121, 90, 29, 47,220, 79, 52, 11, 82, 30, 60,165,248,243, 74, 94,101,179, 32,255, +168, 71,229,205, 36,101, 93,133, 70,252,237, 59, 45, 63,172, 48, 66, 63,236,201,190, 44,147, 21,241, 25, 25, 25,165,155, 54,109, +170, 52, 61, 66,161, 16, 21,163, 7,141, 70, 99,157,163,138,156, 29,164,225,227,250, 53, 28, 85,147,185, 18, 10,133,224,121, 30, + 14, 14, 14,176,177,177,169,119,211,163,173,123, 72,175,118, 61,134,109,237, 49,228, 13,193,137,189,171,249,235,167,247,191, 92, + 86,144,184,167,190,215,168,180,180, 52,142, 16,114,127,233,210,165, 45,215,172, 89,211,120,246,236,217,201,171,191,158,250,195, +195, 55,184,135,203, 34,222,188,121,147, 78,155, 54,205,160,215,235, 83, 74, 75, 75,111, 88,179,200,117,121,126,226,210, 63,126, + 89, 18,146,153,157,251, 90, 96, 68, 59,184, 53,110, 7,207, 38,237, 81,170, 49,225,234,131, 28, 36,223, 61,129,248, 11, 59,183, +233, 10, 61,190,170, 79,122, 91,182,108,233, 47, 22,139, 7, 1, 8,177,177,177,105, 72, 8,145,138,197,226, 87, 8, 33,247, 9, + 33,119, 67, 66, 66, 78,160,134,229,139,170, 35,237,244, 90, 67,195,110, 19,191, 79,215,216,119, 79,206, 43,111,149,174,177,191, + 89, 46,115,156, 89,112, 98,133,193,163,247,210,101,212, 84, 20,183, 99,157,122,215,230,223,190, 19,142,157, 60,203, 18,171,114, +126, 79,100, 35, 61,246,245,107,214,143,230, 22, 16,146, 59,123,246, 7,255,154,166,225, 81,228,234,209,148, 13, 57,214,104, 60, + 90, 79,241, 35, 27,239,240,159, 98,223,155,178,168,121,219, 78,227,186,244, 27, 37,224, 36,118, 56,178,103, 21, 77,185,115,114, +135,136, 90,230,150, 23, 36,165, 60,235, 67,194,104, 52,214,105,174,170,109,186,117, 81,117,251,235,232,233,215, 14, 28, 62,243, +117,191, 94,157, 93,126,254,236, 21,124,251,235, 94,216,218,200, 64,121, 11, 70,245,240,127,249,238,150, 62,131,252, 60,228, 62, +187, 78,101,157,157,190, 60,246,163,242,114,211,189,186,214,206,123,100,152,207,217,219,219, 23,118,238,220,185,131, 76, 38, 35, + 69, 69, 69, 34,119,119,119,206,209,209,209,152,149,149, 85,110, 48, 24,118, 81, 74,181,245,201,167,201,204, 35, 53, 95,143,125, +187,119,225,246,149, 19,184,123, 55, 81,115, 55,254,238,143, 68, 68,151,151,229,221,123,170,200, 42, 95,237, 40, 66, 90,239, 81, +132, 90,161,205, 87, 55, 15,124,219, 45,184,199,187, 29, 93,130, 58,193, 57,224, 97,160, 72,149, 21,139,204,107, 59,246,105,114, + 36, 35, 41,141,125,234,177,239,222,190,141,131,169, 80,138,139,167,255, 2,229,249,149, 0, 64,121,126,229,205,243, 7,167,182, +239,255, 6, 26,184, 55,108, 65, 8, 33,245, 93,143, 17, 0,100, 2,147,234,175,117, 95,237, 72, 77, 77, 69, 66, 66, 2, 30, 60, +120,128,146,146, 18,108, 78, 61,171,170,143, 78, 65,210,197, 99, 30, 77,187,244, 25,243,250,140, 63,135,141, 24, 38,247,111,212, + 68, 16,226,235, 0, 87, 59, 17, 18, 83,178,145, 20,123,159,127,112,231,172,158,234, 10,134, 22, 61,184, 80,163,225,115, 11, 27, +233, 33, 16,146,143, 79,236,127,184,182, 96,244,144,215, 67, 62,156, 62,187, 67, 3, 23,231,106,159,227, 37,197,165,210, 5, 11, +230,133, 84,236, 95,215, 90,132, 2,161, 80, 51,121,234, 59,182, 2, 34, 64,197,233,162, 21,109,100,149, 63, 30,126,144,136, 69, +117,150,209,137,195,162,192,241, 60,180, 58, 51, 52, 58, 35, 84, 26, 3,114,139,148,136,187,251, 0, 87,206, 29, 70,106,210,125, + 13,199,113,167, 64,177,187,208, 69,181,237,201,137,117,107, 45,159, 16,250, 55,112,118, 64,154, 82, 15,185, 84,132,156,140, 36, +206,196,233,159,122,146,245,162, 91,251,115, 61, 34,134,244,158,248,214, 39,135,187,116,137,114,108,222,170,141,194,213,193, 1, + 18, 17,144,148, 81,128, 59, 55,174,106,211,239,221, 82, 91,204,186,190, 69,177,251,159,121,149,150,255, 89,131,101,178,112,209, +179, 62, 89,124,212, 98,177,216,136,132, 66,157,153,242,125,159,197, 92,253, 93, 80,202,103,189,245,238, 7,149, 81, 93, 0, 48, + 91,120,155, 55,222,154,173,171,250,134, 64,204, 22, 69, 69,228,170,142,145,122,194, 66,165, 65, 51,231,151,219,235,151,172,143, +223, 9, 32,254, 89, 71,246, 1, 64,169,218,120,219,165,215,246, 33,154,114,142, 0,184, 91,141,166,182, 71,143, 30,149,102,235, + 81,115,157,213, 21,132, 84,174,152,218,125,208,235,130, 19,251,214,240,215, 78,237, 27,249, 52,230,170, 74, 5,102, 2,112,133, + 16, 18, 59,119,238,220,182, 30, 30, 30, 30,243,230,205,147,171,213,106,241,207, 63,255,172, 47, 42, 42,202, 83,171,213,151, 40, +181,190,127,194,163, 74,115,162,141, 71,179, 85,100,231,154,222,206,238, 62,125,156, 92,253,154,150, 22,102, 37,169,139,179, 14, + 19, 30,199, 52, 5,137,151,234,155,214, 91,183,110,101, 68, 70, 70,238, 21, 10,133, 55, 0,184, 2,176,167,148,150,112, 28, 87, + 42, 22,139,243, 18, 19, 19,235,189, 32,107,218,233,181,134, 46,111,253,190,165,164,156,151, 24, 5,146, 45,105,167,215, 26, 0, + 32,255,232,236,114, 0,251, 60,186,127, 60,124,255,165,180, 31,226, 74, 29,223, 45, 56,245,213,254,250,234,103,223,220,214,228, +121,149,127, 93, 78, 92, 22,128,215,108, 61, 66,190,139,185,121,105, 62,161, 16, 91,192,125, 81,158,127,255,250,243,208, 23,139, +197,250, 54,109,218, 84, 59, 90, 80, 38,147,213, 58,191,214,163, 7,253, 26,210,173,219,186,195, 39,206,189,118,232,216,249,175, + 59,116,236,236, 34,247,245, 65,128,179, 9,235, 62,104,253,238,137,155,133, 87, 7,127,112,246,151,228, 28,253, 29, 74,169,190, + 62,105,211,104, 52,247, 8, 33,165,101,101,101, 67, 40,165,153,132, 16,191,210,210,210, 91,102,179, 57,166,222, 70,128,199,171, + 29, 59,182,219, 76, 8, 17, 81,142,255,230,146, 88,184, 69,159,123, 55,235,105, 12,197, 99,209,213, 70, 14,152, 60,117, 90,112, + 80,147,166,193, 21,107, 17,134, 55,180,199,216,137,111, 6, 55,108, 28, 28,252,175,245, 9,107,127,161,162, 57, 55,116,196, 35, +178, 87,226,209,165,159,185, 36, 93,120,203,166,129,175,157,182, 40,173,164, 52,237,250,210,242, 2,143,165, 79,174,208, 80, 95, + 82, 31,196, 45, 95,179,244,163,217,185,217, 41,107,180, 5,247, 98, 1, 64, 91,112, 47, 86,225,209,244,179,162,188,172,217,197, + 5,201, 75,159,246, 92,104,181,218,156, 77,155, 54, 57,117,234,212, 73,224,225,225,129,194,194, 66,156, 58,117,138,231,121, 62, +187,190, 90,249,247,206,158, 34, 65, 65, 13,182,172, 83,125, 35,178,177,239,207, 89,224, 77, 41, 32, 18, 32,215,100, 80, 29, 46, +116,210,125, 64,239, 92,170,189, 92,242, 22, 66, 5, 84, 80,177,182, 32,207,243,228,219,159, 54,164, 9,197,210,106,155, 84, 45, +102,163,130,231,121,171,215, 34,204, 23,166,187, 68,152, 67,173, 26,197, 23, 75, 18,234,120, 57,165, 71, 94,234, 55,190, 15,199, + 89,204, 0,244, 85,182, 2, 74,201, 73, 16,203,209,162, 6,154, 75,245, 49, 85,143,213,243, 38,147, 19,132, 18,216,219,152, 65, + 64,160, 86, 41,101,110, 22,233,221,103, 41, 75,249,177,251,226, 72,183,110, 1,198,227, 39, 39,156, 57,119,113, 36,229, 45,141, + 44, 20, 0, 37,169, 70,147,126, 71,129, 67,209,250,167, 77,239,255, 26,132,254,141,243, 81, 88,219, 92,242,223,166, 73, 8,145, + 60,170,172, 45, 85,151,191,121, 30,233,172,109,109,193,103,201,187,189, 87,179,206, 50,185,226,131,242,114,205,154,242,252,123, +127, 62,207,243, 73, 8,113,148,201,100,173,236,236,236,196, 69, 69, 69, 87, 40,165,170, 23,241,186, 87, 37,234,245,157,174, 61, +123,133,207, 56,122, 54,113,197,163,230,195, 74,124, 71, 46,151,143,235,223,125,214,250,221,251,254,109, 20,225,139,144,247,191, + 75,147,116,235, 38,114, 47,117,120,205, 98,225,191,232, 17,172, 41,207, 75, 73,156,118, 46,166,240, 10,165, 84,243, 44,233,148, + 74,165, 99, 77, 38,147,141, 68, 34,209, 25,141,198, 77,255, 45,121,119,143, 24,250, 57, 8,154, 89, 45, 66,113,183, 32,118,239, +188, 58,159, 33, 97, 97, 18, 69, 33,156,203,139, 92,139,235,107,172,254, 35,215,157, 16, 97,100,100,100,148, 68, 34,241,183, 88, + 44, 10,163,209, 88,174,211,233, 82,211,210,210, 46,214,180, 32,249,223,157, 78,143,200,161,203,197, 98,241,123, 0, 96, 54,155, +191,207,143,217, 59,163,182,239,214,180,255,255, 75,125, 52,114,164,144,238,216, 97,249, 59,174,145, 79,171,151,149,102, 51,231, + 88,241,187, 68, 44, 82,101,221,220,233,244,159, 42, 75, 47, 28,244,209,242, 8,127,199, 6, 32,154,105, 50, 77,166,201, 52,171, +217, 87,192,206, 39,211,252, 79,106,122, 53, 27,232,231,213,108,160,159,181,223,175,110,127,118, 62, 41,216, 86,243, 38, 98, 22, +147,193, 96,252, 7, 94,236,120,118, 22, 24,255, 73,114,226,255,204,252, 59,247,103, 48, 8,128,232, 26, 30,128, 86,135,254, 8, + 33,209, 79,241,128, 61,206, 52,153, 38,211,100,154, 76,147,105, 50,205,127,150,102, 93,218, 47, 76,211, 35,107, 34,100,154, 76, +147,105, 50, 77,166,201, 52,153, 38,107, 34,124,190,155, 0, 12, 6,131,193, 96, 48, 24,140,231, 10, 51, 88, 12, 6,131,193, 96, + 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6,227,233, +249, 91,103,114,103, 48, 24, 12, 6,131,193,248, 39,194, 34, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, + 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6,131, 25, 44, 6,131,193, 96, 48, 24, 12,102,176, 24, + 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96,252,231, 13, 22, 33, 36,154,105, 50, 77,166,201, 52,153, 38,211, +100,154, 76,147, 25, 44, 6,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, + 48,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,227, 63, 4, 1, 80,237, 72, 0, 74,233,113,171, 69, +158, 98, 52, 65, 93,250, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,241, 52,235,210,174,143,255,248,175,134, 82,250,183,109, + 0,162,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,255,105, 27,107, 34,100, 48, 24, 12, 6,131,193,120,206, 48,131,197, + 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131, +193, 96, 48,158, 30,242,104, 52, 0,131,193, 96, 48, 24, 12, 6,227, 57,193, 34, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, + 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6,131, 25, 44, 6,131,193, 96, 48, + 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96,252,231, 13, 22, 33, 36,154,105, 50, 77,166, +201, 52,153, 38,211,100,154, 76,147, 25, 44, 6,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, + 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,227, 63, 4, 1, 80,237, 72, 0, + 74,233,113,171, 69,158, 98, 52, 65, 93,250, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,241, 52,235,210,174,143,255,248,175, +134, 82,250,183,109, 0,162,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,255,105, 27,107, 34,100, 48, 24, 12, 6,131,193, +120,206, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, + 49, 24, 12, 6,131,193, 96, 48,158, 30,242,104, 52, 0,131,193, 96, 48, 24, 12, 6,227, 57,193, 34, 88, 12, 6,131,193, 96, 48, + 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6,131, 25, 44, + 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96,252,231, 13, 22, 33, 36, +154,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,147, 25, 44, 6,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, + 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,227, 63, 4, + 1, 80,237, 72, 0, 74,233,113,171, 69,158, 98, 52, 65, 93,250, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,241, 52,235,210, +174,143,255,248,175,134, 82,250,183,109, 0,162,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,255,105, 27,107, 34,100, 48, + 24, 12, 6,131,193,120,206, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, + 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,158, 30,242,104, 52, 0,131,193, 96, 48, 24, 12, 6,227, 57,193, 34, 88, 12, + 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, + 12, 6,131, 25, 44, 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96,252, +231, 13, 22, 33, 36,154,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,147, 25, 44, 6,131,193, 96, 48, 24, 12, 6, 51, 88, 12, + 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, + 12, 6,227, 63, 4, 1, 80,237, 72, 0, 74,233,113,171, 69,158, 98, 52, 65, 93,250, 76,147,105, 50, 77,166,201, 52,153, 38,211, +124,241, 52,235,210,174,143,255,248,175,134, 82,250,183,109, 0,162,153, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,255,105, + 27,107, 34,100, 48, 24, 12, 6,131,193,120,206,136,170,251,163,184,253,151,249, 28,199,185, 3,128, 72, 36, 42, 48, 95,253,212, +171, 54, 17, 63, 47,175,158, 22, 96, 53, 0, 8,129, 55, 51,115,114,142, 85,163,121,140,227, 56,231, 71,154,165,230,171,159,246, +169, 77, 83,220,238,139, 35,143,237,127,101,110,175,106,226,139, 66,113,187, 47,114,158, 72,171,119, 61,194,119,150,255,143,116, +254,175,104,254,147,145,116,248, 50,223,108,126, 88,142,196, 98, 81,129,233, 74,237,229, 72,210,254,139,156,199,246,191, 60,215, +163, 54, 77,133,141,172, 56,200,199,109, 89,109,154,201, 57, 69, 51,181,229,122,151,218, 52,255,103,238, 77, 43,241,244,244,108, + 35, 16, 8, 62, 37,132, 56, 84,249,243,157,236,236,236,247, 89,169,100, 48, 24, 47,156,193,226, 56,206,253,198,158,249,208, 26, +128,158,227,191,112, 15, 28,250,235,230,127,219, 71, 95, 42,213,221,223, 27, 41,133,214,217, 70,204, 57,220,191,127,159, 0,128, +183,183,247,106, 0,254,213,104, 58,223,216, 51, 31,229, 70,160,203,232,133,206,157,253,252, 28,242,132,194, 89, 50, 27,155,238, +122,189, 62, 28, 0,228,114,121,156, 65,167, 59,229,105,177,124,247,228,254, 53,101,160,106, 90,123,140,251,194, 61,116,232,175, +239, 90,120, 94,170, 75,222,209,133,215,164,139, 36, 22,227,207,175,229,230, 30,154, 15, 88,172, 57, 33, 85,143,219,117,212, 39, + 46,254, 94, 94, 61,164,114,121, 11,123, 7,135, 40,158,210,102, 60,207, 19, 11,199,197,107,203,202,206,241, 28,119,219, 98, 46, +119,185,177,247, 43,190,182,116, 62,153,151,145,128,232,178,167,231,203, 10, 91,219,238, 2,145,232, 37, 0,224, 57,238, 98,185, + 86,123,170, 67, 94,222, 78,107,242,110,237,249,121,218,253,255,105,152,205,156,123,202,145,249, 48,152,129, 86, 35,190,118,111, +254,234,250,205, 0, 96, 44,184,237, 81,118,127,127,123, 0,176, 13, 26,120, 69,230,217, 42, 31, 0, 68,233,185,238,247, 14,204, +133,193, 12, 52, 27,184,208,189, 46,205,137,243,182,187,124, 56,121,184, 12, 0,142,238,250,169,233,201,221, 43,251, 1, 64,143, +225,211, 14,245, 30, 49,253, 30, 0,124,243,219,110,151,173, 95,191, 82,171,166,117,247,166, 74,162,186,127,160,137, 81,157,235, +228,103, 43,242,188,127,255,190,160, 62,247,166, 47,224,152, 11,188, 45, 16, 10,163,130,154, 52,105, 5,128, 38, 39, 37,221,180, +112,220,121, 47,224,231,231, 89,150,132, 66,225,187,217,217,217,131,170,254,205,199,199,135, 21, 72, 6,131,241, 98, 26, 44, 0, +208, 26,128, 51, 15,128,174, 29,154, 99,242,171,253,237,170,254,111,247,239,139,252,179, 98,143,133,126,181,246, 27, 65,120,120, + 56,146,147,147,173, 58, 88,185, 17, 56,125, 31,144,233, 83,237, 11,164,210,164,121,159,126,234, 16, 21, 21, 37,242,242,122,248, + 18, 94, 80, 80,208,225,252,249,243,109, 22, 44, 88, 48, 85,166, 79, 45, 45, 55, 66,115,250,126,221,186, 21,105, 13,111,218, 16, +159, 78,127,197, 17, 0,150,207,222,217,230,224,197,219, 13, 82, 83, 83,123,126,245,213, 87,197, 62,151, 46,173,108, 96,177,172, +141, 41, 40,200,180, 38,157,219,142,220,146, 7, 25,143, 5,190, 60,113,226,174,128,128, 0, 59,111,111,111,162, 80, 40, 32, 20, + 10,161, 86,171,253, 19, 19, 19,251,221,190,125, 91,123,238,242, 62,105,204,237, 17,201, 89,194,150,122,107,242, 46,225,138,228, +177,193,193,113, 47,247,235,231, 59,112,224, 64,121,163, 70,141, 0, 0,169,169,169,193,127,253,245,215,232,131, 7, 15,206,147, +112, 69, 92,185, 17,250,186,242, 94,161, 9, 0,114,224, 37, 39,119,247,177, 66,177, 56,156,227, 56,159, 71,209,133,108,139,217, + 28,167, 44, 40,216,244,228,254,140,127,199, 96, 6,238,230, 2,209, 81,173, 48,110,120,180, 45, 0,124, 52,234,203, 14,233,169, + 15, 36, 70,163, 17, 77, 67,154,117, 90,244,245,178, 35, 16, 8,176,113,247,241,202,253,173,209,188,115, 55, 5,243, 23, 45, 71, + 78,204,206, 14, 22,213,131,238, 26,181, 74, 8, 0, 14,142,142,195,119,110,219,114,202, 59,242,229,203, 15,138, 76, 86,105,214, +118,111, 30,222,246,163, 87, 86,236,169,176, 95,142,254, 33,246,247,247, 71, 76, 76, 76,189,238, 77,168, 18,237,121, 47,175,248, +239, 62,248,192,179, 75,151, 46,176,179,179,131, 72, 36, 2,199,113,209,231,207,159,143,158, 63,127,254, 52,168, 18,181,214,222, +155, 86,240,157,183,183,119,247, 33, 35,198,122,117,239, 51, 16,195,251,118, 98, 5,145,193, 96,188,184, 6, 75, 36, 18, 21,244, +154,240,149,123, 84,251, 8, 92,187,125, 79,149,150,145, 91, 86,241, 63,229,221,221, 77, 71, 71, 7,133,173, 58,248, 23, 12, 6, + 3, 46, 92,184,128,219,183,111, 35, 53, 53, 21,115,231,206, 53, 8,129, 55,107,208, 44,237, 50,122,161,179,204,144,105,215,218, + 37,179,209,214,205,167,132, 58,157, 14,167, 79,159, 70,105,105, 41,164, 82, 41,124,125,125,209,185,115,103,209,233,211,167, 27, +140, 26, 51,214,177,247,208, 73, 41, 6,153, 95,153, 72, 36, 42,173, 49, 3, 34, 81, 65,207,241, 95,184,135, 5, 55, 68, 82, 90, +142,234,211,175,127, 47,227,121, 42, 42, 79,207, 50,157, 57,115, 6,173, 90,181,194,182,109,219, 92, 74, 75, 75, 63, 91,183,110, +221,167, 94, 63,174,253, 62, 55, 43,113,118, 45,122,165, 93, 70, 47,116,110,106, 57, 25,176,115,203, 31,146,219,183,111, 75, 86, +173, 90,133,226,226, 98, 72,165, 82, 56, 57, 57,193,211,211, 19, 77,155, 54, 37,111,191,253,182, 93,247,238,137,248,108,230,164, +128, 92,167, 33,137, 53,165,179, 66, 83, 98,204, 85, 4, 11,175, 7,173, 94,191, 94,208,174, 93, 59, 82,117, 31,127,127,127,116, +235,214, 77, 62,108,216,176,160,105,111,191,195, 71, 15,155,146,100,146,122,149,215,165, 9,109,166,141, 75,249, 37,239,232,209, +163,247, 47, 92,184,208,201,211,211, 19,182,182,182, 0, 0,149, 74,229,155,150,150,214, 97,222,188,121, 35,174,220,217, 38,234, + 50, 48, 51, 7,182,126,186,218,206,231, 63, 21,177, 88, 84, 80, 17, 53,178,183,181, 41,205,204,202,215, 2,128,209,104,132,209, +104,132,193, 96,192, 91,211,166, 8,223, 28,209,174, 73, 64,212,187,183, 82,179,243, 75,154, 29,191,220,160,226,187,117,105,138, +202, 83,149,202,140, 19,111,206,255,224, 3, 79, 15,143,127,181,252,109,220,176, 65, 88, 82, 82, 18, 61,127,254,252, 48,170,232, +166,108, 54,112,161, 83,109,154,181,222,155,247,254,106,180,104,122,159, 22,191,126,125, 0, 22,139, 5,151, 46, 93,194,217,179, +103,177,108,217, 50,122,232,208, 33,149,131,173,109,173,247, 38, 84,137,246,157,189,242, 2,151, 44,217, 69,100, 50, 25,246,237, +219,135,132,132, 4, 8, 4, 2, 52,111,222, 28,227,198,141, 67,116,116,180,231,228,201, 83,104,151,190,163,146,225, 24,162,121, +150,178, 68, 8, 17,120,121,121,189,251,214,251,159,120, 13, 31,253, 26,126,252,246,115,102,176, 24, 12,198,139, 67,181,189,223, + 1, 65,227,161,191,110,221,113,157,255,171,241,208, 95,183, 82, 64, 64, 1,129, 3,208, 48, 42, 42,202,172, 84, 42,233,213,171, + 87,233, 91,111,189,165,253,254,251,239, 79,253,245,215, 95, 59, 57,147,105, 77,171, 22, 45,150, 82, 64, 80,147,102,115, 71, 71, +199,192,192,192,194,204,204, 76,122,240,224, 65,186, 96,193, 2,186,105,211, 38,122,232,208, 33,122,252,248,113,122,232,208, 33, +186,117,235, 86,122,231,206, 29,250,224,193, 3, 26, 20, 20, 84,216,220,209,209,177, 22, 77, 33, 5,132, 77,135,174,154,189,235, +154,121, 97,200,208, 95,103, 80, 64,216,204,195, 35,180, 87,175, 94,150,157, 59,119,210,141, 27, 55,210,245,235,215,211, 59,119, +238,208,162,162, 34,234, 19, 16, 88, 88,241,189,154,210, 73, 1, 65,171, 86,173, 10,149, 74, 37,245,243,243,163, 82,169,148,122, +120,120,208,166, 77,155,210, 14, 29, 58,208,126,253,250,209, 87, 95,125,149,126,246,217,103, 84,169, 84,210,128,128,128,252,138, +239,213,164, 57,208,203,203, 38, 40, 40, 40, 35, 38, 38,134,214,132, 78,167,163, 69, 69, 69,244,228,201,147, 52, 40, 40, 40, 99, +160,151,151, 77,109,154, 54, 64,235,200,200,200,194,162,162, 34,106, 50,153,104, 70, 70, 6,141,141,141,165, 9, 9, 9, 52, 35, + 35,131,234,116,186, 74,237,123,247,238,209,192,192,192, 66, 27,160,117,141,154,255,228,173,162, 76, 60,177,249,123,120,244,243, +244,244,212,237,218,181,139,102,103,103,211,117,235,214, 81, 1,240,229,191,237, 91,139,166, 20,232,221,185,115,103,203,165, 75, +151,232,173, 91,183,232,199, 31,127, 76,251,244,233, 67,251,246,237, 75,231,207,159, 79,179,178,178,104, 86, 86, 22,237,215,175, +159, 69, 10,244,174,171,124, 86,119,111, 58, 2,254, 3, 7, 14,212,153, 76, 38,154,156,156, 76,195,195,195,179,132,192, 88, 91, + 32,172, 43, 32,171,171,124,250, 0,206, 94, 94, 94,185,151, 46, 93,162,187,119,239,166, 1, 1, 1,133, 66, 96,162, 3,208,216, + 1,104, 44, 4, 38, 54,110,220,184,240,210,165, 75,180,184,184,152,250,251,251,231,250, 0,206, 79, 91,150, 0, 8,188,188,188, +254,248,226,155,159,104, 98,150,150,126,241,205, 79,212,203,203, 43,131, 82, 74,189,188,188,142,177, 50,201, 54,182,177,237,127, +125, 19,213,203,140,217,218,126,181,104,209, 34,145, 94,175,199,239,191,255,174, 25, 51,106,212,110, 39, 39, 39, 78, 44, 22,131, + 8,234, 30,144,168,113,116,124,111,238,156, 57, 78, 6,131, 1,215,175, 95, 71,155, 54,109, 32,147,201, 32,145, 72, 32, 22,139, + 33, 22,139,225,229,229,133,130,130, 2,132,135,135, 99,234,212,169,142, 63,255,248,227,123, 80,169, 22,213,166,203,243, 84, 4, + 0, 22,158,151, 54,244,246,158, 28, 26, 25,185,116,218,180,105, 2, 91, 91, 91,232,245,122, 24, 12, 6, 36, 36, 36,192,197,197, + 5, 10, 27, 27,171,242, 44, 16, 8, 4,118,118,118, 56,121,242, 36,126,251,237, 55,164,166,166, 34, 55, 55, 23,246,246,246, 8, + 15, 15, 71,179,102,205,208,181,107, 87, 36, 39, 39,131, 16, 66,234,210,139, 23,139,223, 30, 55,122,180,123, 68, 68, 68,181,255, +215,235,245, 80, 42,149, 80,169, 84,240,240,240, 64,191,126,253,220,255,220,183,239,109, 0,223, 85,183,191, 11,224,233, 27, 28, +188,255,234,213,171,174,148, 82,108,220,184, 17,101,101,101, 48, 26,141, 16, 8, 4,144,203,229,112,118,118, 70,143, 30, 61,224, +230,230,134,224,224, 96,108,223,190,221,181, 95,191,126, 7, 92, 10, 10, 90, 23, 3, 57,236,245,162,110,210,243,243,143,246, 6, + 92,199,190,250,234,161,219,119,238, 68,141, 29, 59, 22,249,249,249,159,136, 63,254, 88,105, 6,150,215,245,253, 16,192,177,129, +151,215,218, 37, 75,150, 8,242,242,242, 48,107,214,172,162,156,244,244,143, 29,129,115, 0,112,226,240,225,168, 77,155, 54, 45, +222,184,113,163,235,134, 13, 27, 4,173, 90,181, 90, 27,146,145, 17,158, 8,168,234,147, 78, 13,240,238,138, 21, 43,228,122,189, + 30,189,122,245, 74,150,167,166,182,224, 0,157,181,223,207, 5,222, 94,246,225,135,158, 50,153, 12,179,102,205, 42, 42, 79, 79, +143,224,128,194, 42,187,164,185,165,164, 28, 30, 63,126,124,236,157, 59,119, 92,151, 47, 95,238, 57, 98,216,176,183, 1,124,105, +237, 49,170,118,104,247,242,242, 10, 30, 50, 98,172, 71,211,176, 72,236,222,186, 14,191,172,248,106,173,197, 98,249,213,199,199, +103,186, 64, 32,248,150,149, 60, 6,131,241, 66, 54, 17,214,132,139,155, 91,155,208,208, 80,156, 57,115, 6,145,145,145, 87,157, +156,156, 56,137, 76, 6,177, 88, 12,202,243,117,126,223,198,214,182,103,151, 46, 93, 68, 23, 47, 94, 68, 96, 96, 32,108,108,108, + 42,141, 85,197, 38,145, 72,224,229,229, 5,181, 90,141,168,168, 40,241,218,181,107,123, 2, 88, 84,151,118, 78, 90,162, 29, 82, +214,190,186,248,187,165,141,219,181,107, 7,149, 74, 13,158,231,161, 80, 40, 96, 52, 26, 33, 18,137, 96, 52, 26,161, 55, 82,181, + 53,121,181, 88, 44, 22,161, 80,136,192,192, 64,124,245,213, 87,208,235,245,144, 72, 36, 0, 0,181, 90, 13,165, 82,137,216,216, + 88,164,165,165,129, 62,122, 37,175, 13, 91, 59,187,254,131, 7, 15,150, 86,247, 63,131,193, 0,149, 74, 5,149, 74, 5,165, 82, + 9,189, 94,143,230,205,155, 75, 79,157, 60,217,191, 38,131,101,144,203, 71,108,216,176,193, 93, 42,149, 66,167,211, 65,163,209, + 32, 51, 51, 19,233,233,233,250,130,130, 2,206,222,222, 94, 16, 16, 16, 32,144,201,100,178,161, 67,135, 18,181, 90, 13, 66, 8, + 6, 14, 28,232,178,121,227,198, 87, 0, 44, 99,197,223, 58,142, 2,134,214, 70,227,160,246,237,218,157,188,122,237, 90,171,247, +222,123, 15,119,238,220, 89,162,216,182,237, 76, 57,112,187,182,239, 38, 3,111, 47,173, 98, 92,104,122,122,164,233, 9,227, 18, +240,208,184,196, 84, 24,151,145,245, 52, 46, 0, 96,239,232,216,214,203,203, 11,135, 14, 29, 66, 70,106,234, 71,245, 49, 87, 0, + 32, 16, 10, 59,119,233,210, 5,251,246,237, 67, 86,122,250, 71, 79,152, 43, 0, 64, 33, 80, 40, 74, 78,254,104,237,218,181,127, +188,254,250,235, 16,138, 68,157,193,113, 86, 31,163,186, 14,237,111,191,247, 17,246,237,218,180, 54, 55, 55,247, 13, 74, 41, 15, +224, 42, 43,113, 12, 6,227, 69,160, 94,243, 96,121,122,122,250,216,218,218, 34, 39, 39, 7,205, 66, 67, 11,100, 50, 25,164, 98, + 49,228, 82,169, 85,223,215,235,245,145,158,158,158, 80,169, 84,112,117,117,133, 68, 34,169,220,164, 82,105,229,103,123,123,123, + 8, 4, 2,248,248,248, 64,175,215, 71,214,165,203, 41,239,187, 31, 94,247,241, 91,127,238,218,208,184, 95,191,254,112,118,110, + 0, 63, 63, 95,184,187,187,195,198,198, 6,126,126,126,104,210,164, 9, 93,189,122, 53, 4, 14, 77,172,122,128, 87, 53, 77, 34, +145, 8, 22,139, 5,249,249,249, 72, 76, 76,196,157, 59,119,112,233,210, 37,220,186,117, 11, 26,141, 6, 86,248, 43,104,203,203, + 91, 84, 23,232, 50, 24, 12, 80, 42,149,149,209, 43,165, 82,137,194,194, 66, 36, 39, 39, 67,173,209,180,172, 73,207,217,197,101, +120, 68, 68,132, 16, 0,108,108,108,208,178,101, 75,252,250,235,175,220,159,123,247,142, 10,187,116,169,129,223,145, 35, 78,171, + 87,173, 26,245,242,203, 47, 91, 46, 95,190, 12,181, 90,141,187,119,239,194,205,205, 77, 36,149,203, 95, 97, 69,191,126,220, 0, +180,174, 26, 77,223,151, 94,122, 41, 69,165, 82,225,219,111,191, 21,136,237,237,127, 91, 8, 8,235,112, 21,157,186,116,233,130, +253,251,247, 35, 39, 61,253,227,244,106,140, 75, 58, 80,152,145,156,252,241,218,181,107,209,187,119,111, 16,145,168,222, 29,145, + 58,116,232, 16,193,243, 60, 98, 98, 98,224, 4, 92,169,239,247,131,154, 52,105,101,103,103,135,132,132, 4,216, 62,138,174, 85, +251,162, 0,156,187,121,243, 38,108,108,108,208, 44, 44,172,117, 61, 15,243,157,183,183,119,238,219,239,125,132,221,135, 47, 0, + 0,246,237,218,148, 95,197, 92, 49, 24, 12,198, 63,211, 96, 85, 32, 22,139, 33,149,201, 32,149, 74, 31, 26, 35,153,204,234,239, + 18, 66, 32,151,203, 43, 13, 85, 85, 99, 85,245,179, 66,161,176,202,184, 0,128, 57,239, 66,212, 43, 35, 95,150, 74, 36, 18, 24, +141, 6, 80, 74, 33,147,201,225,228,228,132,192,192, 64,148,151,107, 49,120,200,112, 67,166, 82,114, 64,226,219,243,206,211,228, +153,227, 56,104,181, 90,148,150,150,162,164,164, 4,106,181, 26, 58,157, 14, 86,180, 14, 86, 86,181, 25, 25, 25,216,178,101, 11, +138,139,139, 1, 60,236, 64, 93, 97,170, 42,126,166,164,164, 96,227,198,141, 72, 77, 77,133, 80, 40,180,250,250, 68, 69, 69,225, +192,129, 3,194,110, 61,123,174, 57, 22, 16,144,115, 44, 32, 32,167, 91,207,158,107,246,239,223, 47,244,241,241, 65, 90, 90, 26, +174, 95,191,142,210,210, 82, 80, 74, 9, 43,250,245, 39, 9, 40, 45, 47, 41,121,253,147, 79, 62,161,118,118,118,248,118,233,210, + 22, 95, 2, 99,172, 53, 46,142,181, 24, 23,199,103, 51, 46,160,148,130,231,121, 88, 44,150,167,202, 27, 33,132,136,197,226,250, +148,103,224,225, 82, 91,214,234, 11, 40,165,239,190,245,254, 39, 94,239,124, 48, 15,167,142, 28,168,248,251,125,102,174, 24, 12, +198,139, 72,189,154, 8,115,114,114,178,181, 90,109,227,128,128, 0,100,101,101,185,251,251,251,167, 75,197, 98, 72,164, 82,171, +250, 96,201,229,242,152,252,252,252, 78, 62, 62, 62,224, 56,174,210, 76, 61,217, 68, 88, 17,149,185,123,247, 46,228,114,121,157, +227,204, 5,150,178,134,225,225,225,149,145, 32, 39, 39, 39, 56, 57, 57, 66, 38,147, 99,241,226,197,252,154,223,126,251, 89, 30, +254,182,234,253, 73, 31,210, 27, 95,174,121,174, 39,208,218, 10, 73,161, 80,196, 52,106,212,168,163, 66,161,192,238,221,187,145, +150,150,134,210,210, 82,148,151,151,195, 96, 48,160,188,188, 28, 70,163, 17,114,185, 28, 97, 97, 97,104,208,160, 1,226,226,226, +106,204,123,105,113,241,238,152,152,152,142,237,218,181,171,140,160,116,239,222,157,116,239,222,221,181,226,247,242,242,114, 20, + 21, 21,225,234,213,171, 56,126,252, 56, 8, 33,184,127,255,190,197,160,211,109,101, 69,255,233,208, 3, 23,133,107,215,254, 49, +117,234,212, 73,157, 58,117,130, 5,232, 7, 96,227,127,202,184, 84,112,233,210,165, 88,139,197,210,169,105,211,166, 80, 2,237, + 1,236,171,151,121,124,240,224, 38,199,113, 61, 91,180,104,129,221, 59,118, 68, 1, 72,171,110, 63, 45, 16,213,170, 85, 43,232, +116, 58,220,141,143,191, 97,173,185,242,242,242, 90,243,214,251,159, 76, 28, 62,250, 53,236,222,186, 14,251,118,109,202,252,249, +251, 37,126,148, 82, 19, 43, 85, 12, 6,227, 31,111,176, 74,139,139,111,196,198,198, 54,110,221,186, 53,214,172, 89,211,238,165, +142, 29,179, 37, 82, 41, 39,149, 72, 32,176,162, 2,209,105,181, 39,206,159, 63,223,190,119,239,222,162,203,151, 47,195,211,211, +179,210, 96, 85,252, 20,137, 68,160,148, 66,161, 80,224,208,161, 67, 38,157, 86,123,162, 46, 93, 11,103,177, 8, 30, 25, 60, 74, + 41,148, 74, 37, 36, 18, 9, 86,175, 94,131,117,191,253,246,106, 86,110,238,206,224, 54,206, 31, 0,144,255,199, 42,230,242,242, +147, 39, 78,156,104, 51,115,230, 76,177,175,175, 47,148, 74, 37, 74, 75, 75, 81, 92, 92, 12,181, 90, 13,181, 90,141,210,210, 82, + 40,149, 74,200,229,114, 60,120,240,192,172, 47, 47, 63, 89,147,158, 76,175,223, 53, 97,194,132, 15,111,222,188,233, 37, 18,137, + 96, 54,155,193,243, 60,120,158,135,201,100,194,131, 7, 15, 16, 23, 23,135,132,132, 4,148,148,148, 64, 44, 22, 67, 40, 20,226, +214,173, 91,165,182,102,243, 14, 86,244,159, 30, 49,176,251,252,249,243,147,198,141, 27, 7,111, 95,223,174,200,202,178,202,184, +236,173,197,184,168,158,194,184, 60,102,124, 52,154,107, 41, 41, 41,157,186,117,235, 6, 47, 95,223, 37, 97, 89, 89,199,226,235, +209, 15,203,194,113,231,206,159, 63,223,115,252,248,241, 88,179,102,205, 18,183,148,148,195,133, 79, 52,103,186, 1,110,141,130, +130,150, 76,156, 56, 17, 71,143, 30,133,133,227,106,140,200, 61,209,161,189,225,144, 17, 99,253, 88,135,118, 6,131,241, 79,162, + 94, 77,132, 68,171,157, 51,119,238, 92,179, 80, 40,196,240,225,195,237,247,237,223,255,242,173,219,183, 3, 11, 10, 10,156, 44, + 22, 75,157, 90,246, 42,213,247,139, 22, 45, 82,154,205,102,132,132,132,160,164,164, 4, 22,139, 5, 34,145, 8, 34,145, 8,132, + 16, 8, 4, 2,216,217,217, 33, 46, 46, 14,219,182,109, 83,219,171, 84,223,215,165,203,243,124,204,158, 61,123, 32, 18,137,168, + 92, 46, 7, 33, 4, 34,145, 8,171, 87,175, 46,152,147,155,187, 27, 0,132, 2,129, 17, 0, 4, 2, 98, 85,175, 92, 66, 72,157, +237,147, 82,169, 20,252,195,206,253,117,238,235,102, 54,175, 88,181,106,149,230,254,253,251,208,106,181,149,209,182,178,178,178, +202, 78,243, 74,165, 18,132, 16,232,245,122,156, 61,123, 86,227,102, 54,175,168, 73,175, 24,200,203,186,127,127,112,187,118,237, +138, 83, 82, 82,160, 82,169, 16, 19, 19,131,227,199,143, 99,251,246,237, 56,122,244, 40, 30, 60,120, 0,142,227,224,227,227, 3, + 74, 41,246,238,221,171,226, 52,154,126,197, 64, 30, 43,250, 53,211,208,211,179,167,135,187,123,134,155,171,107, 86, 67, 79,207, +158, 79,254,223, 17,184,119,239,222, 61,112, 28,135,192,192,192, 6,181,245,195,162, 28,119,254,252,249,243, 24, 63,126, 60,252, + 26, 55, 94, 28, 0,184, 61,185, 79, 0,224, 22, 16, 20,180,184,194,184, 80,142, 59, 95,223, 52,219, 3, 63,124,240,193, 7, 58, +137, 68,130,109,219,182, 5,154,155, 52, 73, 16, 1, 99,236,128,208,110,128,164,174,239,123, 1, 63,127,246,217,103,121,132, 16, +108,218,180,201,213, 49, 40, 40, 86, 4, 76,112, 4, 26, 58, 2, 13, 69,192, 4,199,160,160,216,109,219,182,185,114, 28,135, 25, + 51,102,228,121, 1, 63,215,164, 39, 20, 10,223,205,201,201, 25,148,157,157,221, 37, 39, 39,199,239,231,239,151,224,212,145, 3, +248,101,197, 87,107,115,115,115,223,200,207,207,191,154,157,157, 61, 46, 43, 43, 43,150,149, 56, 6,131,241, 34, 66,170,235,231, + 36,110,255,101, 62, 64,221,187,118,104,142,107,183, 19, 85,174,206, 14, 71, 42,254,167,188,187,187,233,192, 14,158,205,191,253, +246, 91,136, 68, 34,100,102,102, 34, 62, 62, 30, 14, 14, 14,120,239,189,247, 12,102,131, 97,112,197,122,103,132,144,104, 74,233, +241, 71,154,199, 56,142,115,150, 25, 50,237, 90, 57,167, 52,222,184,126,173,208,222,222, 30,101,101,101,149,211, 10, 40, 20, 10, +216,216,216,224,206,157, 59, 24,255,218,235,150, 36,174, 69,229, 68,163, 21,235,157, 85,213, 4, 33, 66, 0,232,231,236,172,184, + 43,147,205,114,241,240,152,253,206, 59,239,216,116,237,218, 21, 18,137, 4,109,218, 71,229,217,182,156,253,131, 64, 64,184,172, + 98,245,220,160,134,222,142,241,247,211, 0,144,135,107, 22, 62, 90,139,176,186,116, 70,202,239, 4,110,252,229,115,135,240,240, +240,135,249, 86, 42,145,159,159,143,130,130, 2, 40,149, 74,104,181, 90, 0,192,241,227,199,113,242,106,138, 58,215,174, 87,114, + 77,233,252, 87,222,211,236,155,217,220,107,244,195,138,101, 66, 39, 39, 39,228,231,231,163,176,176, 16, 74,165, 18, 58,157, 14, + 22,139, 5,106,181, 26,251, 15, 28,180, 36, 91, 34, 83, 13,178,134,154,186, 52,161,205,180,105, 80,118,193,167, 85, 88, 0,157, + 52,105,146,189,131,131, 3,120,158, 71,105,105, 41, 50, 50, 50,144,146,146,130,179,103,207,106, 11,148, 70,104, 93,123,101, 85, + 76, 52, 90,237,249,124, 94,133,234,127, 81,243, 81, 89, 2, 0,111, 47,175,156,244,244,116,119,139,197, 2, 31, 31, 31, 78, 89, + 82,178, 88, 10, 28,181, 7,114, 1,208, 34,224,211, 21, 63,252,240,250,144, 33, 67,208,182,109,219,204,188,252,252, 70,213,149, + 37, 16, 34, 12, 1, 28,203,125,125,227,174, 94,189,234,153,145,145,129,241,227,199, 23,165, 39, 37, 85, 78,211,160, 2,162, 2, +130,130, 22,111,219,182,205,181,113,227,198,136,140,140,204,147, 87, 76,211, 80,125,249,172,249,222,188,247, 87,163,105,195, 34, +218,190,245,214, 91,224, 56, 14,103,207,158,197,149, 43, 87,144,158,158,142, 11, 23, 46, 40, 29,108,109, 71,213,118,111, 66,149, +104,223, 47, 88, 27,184,105,211, 70, 34,145, 72,176,118,237, 90,220,188,121, 19, 0,208,170, 85, 43, 76,156, 56, 17, 28,199, 97, +236,216,113,244,175, 68,155,202,137, 70,171, 43, 75,190,190,190, 17, 60,207, 47, 37,132, 72, 40,165,109,115,114,114,228, 62, 62, + 62, 57, 57, 57, 57,126,245,233,115,197,202, 39,211,100,154,255, 28,205, 23,141, 58,215, 34,252, 98, 37, 28, 31, 95,142,227,205, +156, 61,191,127, 41,234,211,183, 95,232,220, 79,230, 8, 90,181,106, 5, 63, 63, 63,180,106,213, 10, 55,111,222,148, 53,107,214, +172,174,245,206,202,122, 15,157,148,210,187,119,111,167,183,223,126,219,177,107,215,174, 98,111,239,135,235,234,198,197,197,225, +208,161, 67,166, 45, 91,182,168,179,165, 81,202, 11,135,126, 47,179,102,189,179, 67,165,165,229, 0, 62,111,110, 52,254,246,217, +220,185,243,195, 35, 35, 39,189,255,254,251, 2, 59, 91,133,248,203,185,111,200, 1,224,139,159,182, 59, 14,121,249, 85,172,104, + 2,116, 29, 83,253, 58,111, 85,211,153,149, 91,144, 62,102,226,203, 77,222,126, 99,140,101,208,160, 65,182,118,118,118,240,243, +243,131,179,179, 51, 82, 83, 83, 17, 19, 19, 67,143, 29, 59, 86,118, 35, 46, 85,188,110,251,209,116,169,157,187, 53,235, 6,106, +122, 15,153,144, 58, 97,194, 4,231, 97,195,134,217,135,135,135,139,197, 98, 49,228,114, 57,138,139,139,145,153,153,105, 58,125, +250,116, 89,182,164, 99,233,133,195,235, 52, 86,174, 69,168,235, 50,122,225,131,115,199, 22,204,136,139,137, 25,199, 3, 45, 76, + 38,147,143,197, 98, 33, 2,129, 32,151,231,249, 24,147, 70,243,135,161,213,130,229,108, 45, 66,235,176, 88, 44, 18,139,197, 2, +165, 82,137, 99,199,142,137,146,146,146, 62,189,125,251,246,167, 57, 57, 57, 48,155,205, 24, 49, 98, 4, 90,181,106,133, 83,167, + 78,161, 48, 63,255,207,218,180, 18, 1,149, 44, 43,107,226,155,111,190,121,104,227,198,141,130,219,183,111,187,174, 93,187,246, +247,234,140,203,184,113,227,248,252,140,140,137,134, 90,230,192,170,227,222, 44, 58,188,237,199,219, 67,135,191, 28,182, 96,222, +167,226,151, 94,122, 9,174,174,174,136,138,138,130,201,100,114,178,226,222,212,116,233, 59, 42,185, 69,139, 22,182,203,151, 47, +247,124,253,245,215, 49,125,250,116, 0,128, 78,167,195,209,163, 71, 49, 99,198,140,188, 12, 81,123,237,141, 83,219,106, 45,159, +143, 34, 83,189, 0,192,199,199,231, 12,128, 46, 0,146, 89,135,118, 6,131,241,143, 54, 88,192,191,214, 59, 59,119, 37, 22, 85, +151,227,120,136, 91, 60,231, 58, 34,105,234,236, 37,145, 82,104,157,197,196,224,112,235,230, 77,146,146,146, 82,235,193, 42,214, + 59, 51,200,252,202, 20, 57, 69,237,126, 88,177,226,189, 53,107,214,244,172,152,138, 65, 46,151,199,232,180,218, 19,246, 42,213, +247,134,198,126, 39,234,187,118,222,157,146,146,124, 0,211, 66, 45,150, 31, 94,155, 52,229, 27,129,157,175,248,147, 47,215,232, +133, 2,129,241, 65, 78, 33, 86, 52, 1,108,173, 24,240, 88,110, 4, 98,138,221,185,120,116, 75, 92,178,112,225,172, 21,223,125, +215, 78, 97,103,215,213,204,113,193, 60,207,131, 90, 44,247,117, 58,221, 25,152, 76, 87,179,188, 39,127, 39,181,115,167,214,174, + 27,104,144, 55,210,120,104,207,180,219,181, 99,199,187,135, 14, 29,250,183,188,123,241,252, 15,201, 14,141,142, 91,147,247,170, +251,232,129,139, 40, 40,184, 88,227,219, 6,216, 90,132, 86,223, 20, 60, 63,217,217,217,121, 67,207,158, 61,229,209,209,209, 24, + 48, 96, 0, 94,122,233, 37,240, 60, 15, 74, 41, 52, 26, 13,182,111,223,142,111,190,249,230,126, 35,224,243,186,244, 12,192, 9, +217,193,131,253, 90,180,104,177,182, 54,227,242,200, 92,213,217,231,176,246,123, 83,118,159,115, 28,156, 54,250,237,175,154, 24, +213,185, 78, 46, 10,206, 51, 46, 54, 70, 96,237,189, 9,199, 16,141,229,230,246,246, 35,134, 13,123, 91, 40, 18, 69, 61, 26,209, + 72,239,198,199,223,168, 88,236, 25,173, 38, 30,171, 79, 89,162,244,225,220,115,172, 67, 59,131,193,248,199, 27, 44,145, 72, 84, + 80, 17,229, 17,137, 68, 5,201,123,167,188, 90,155,136,159,151, 87,207, 71,111,199,168,107, 45,194,138,207,183, 85, 42,205,163, + 25,218,171,157, 68, 84,252,196,254,245,201, 84, 66, 65, 65, 34,128,129, 64, 58,144,248,176, 59,139,184,221, 23, 31, 85,205, 83, +141, 39,228,177,227, 74, 74,210,242,243,207,225, 97,115, 78,181,157,113,197,254,146,146,186,210,249,100,222,207,103,102,170, 31, +229,187,250,188,123,214,157,119, 81, 61,207,143,232, 25,206,231, 63,141,236,162,162,189, 0,236,124, 15, 28,240, 56,124,224,192, + 43,179,102,206, 28,225,229,237, 29,228,234,234,234,108,111,111, 47,184,124,249,114, 10,167,215,255,208, 18, 88,119, 5, 40,183, + 70,211, 0,156, 8,201,200, 8, 31, 57,108,216,219, 68, 36,234, 92,213,184, 80,142,187, 16, 8,252,108,176, 98,246,246,122,223, +155,178,250,223,155, 89, 15,211,241, 37, 56,238, 75,220,185,243,204,247, 38,207,243, 95,248,248,248,104, 88,135,118, 6,131,241, +143,226,239, 92,135, 7, 64, 52,211,100,154, 47,138,230, 67,143, 2, 7,118, 62,153, 38,211,100,154, 76,243,249,107,254,163,215, + 34,100, 48,254,225, 47, 35, 22, 0,106,118, 38, 24, 12, 6,131, 81, 23, 4, 64,116, 13,149,137,213,163, 3, 8, 33,209, 79, 81, + 89, 29,103,154, 76,147,105, 50, 77,166,201, 52,153,230, 63, 75,179, 46,237, 23,102,116, 34,107, 34,100,154, 76,147,105, 50, 77, +166,201, 52,153, 38,107, 34,124,190,155, 0, 12, 6,131,193,192,194,133, 68, 0, 16, 2, 44, 20, 0, 59,133,192, 72,225,195,223, +159,158,145, 35, 73,181,147,208,190,251, 46,177,103,103,156,193,120,177, 97,125,176,254,131,120,121,121,249,123,120,120,252, 74, + 41, 37, 5, 5, 5,147,115,115,115, 51,216, 89,249,239,195,197,197,165, 39,199,113, 80,169, 84, 39, 94,196,252,133, 55, 33,195, +168, 0,205,254, 21,214, 70, 70,252,125,186,161,186,125,195,130,201,120,144,127,205,165, 69,120,220,141,123, 64,247, 88,123, 44, + 66,136, 96,104, 63,183,165, 0,176,247, 80,225,236,191, 99, 94, 44,111,111,239,166, 46, 46, 46, 71,132, 66,161,200, 98,177, 76, +139,137,137, 57, 80,179, 1, 26, 41, 4, 0, 55,155,221,115,156, 26,184,126,252,217, 44, 34, 54, 26,190, 85, 26,244,122,149, 64, + 36, 74,149, 74, 20,231, 57,129,237,161,172,252,126,241,213,125,127,199,142, 29, 53,174,174, 29, 17, 76,250,133,134,133, 13,106, + 29,105,147,188,244,251,118, 43,186, 6,186,138, 83, 50,111,217,173,220,144,241,171,155,179,207,160,247,222, 16, 29,144, 81,203, +184, 37,191,211, 50,118,151, 89,207,215,132, 52, 48, 1,145, 98,153,204,207,194,113, 30, 4,160, 66,145, 40,223,108, 48,100, 74, +128, 59, 31, 83,170,124,209, 53, 37, 50,153,175,133,227, 60, 0,224,191, 49,157,140, 58, 12, 86, 80, 80,208,117,129, 64,224, 91, +177,198, 95,213,197,106, 43, 62, 63,249,211, 98,177,100, 37, 36, 36,180,177,246,224,141, 27, 55,118,208,235,245,175, 16, 66, 94, + 5, 0, 74,233,102,185, 92,190, 61, 37, 37,229,169, 58, 18, 55,110,220,216,129, 82, 58,219,198,198,166,135, 94,175, 15, 7, 0, +185, 92, 30,167,211,233, 78, 18, 66,150, 62,141, 46, 33, 68,228,229,229, 53,210,214,214,182, 59,199,113,221, 41,165, 68, 36, 18, +157, 42, 47, 47, 63,153,155,155,187,131, 82,202,213, 87,211,219,219,219,198,197,197,229,203, 38, 77,154,140,121,251,237,183,139, + 27, 52,104, 16,178,112,225,194,107, 17, 17, 17, 91, 74, 74, 74,230,230,228,228,232,254, 27, 10, 7, 33, 36,200,211,211,115,179, + 88, 44, 22,102,102,102,118, 7, 0, 63, 63,191, 83, 70,163,209, 82, 80, 80,240, 42,165, 52,169, 62,122,110,110,110,182, 98,177, +184,131,173,173,109, 27, 91, 91,219, 46, 22,139,165,217,163,245, 19,239,106,181,218,179,102,179,249,186,217,108,190, 92, 88, 88, +168,253,111,185, 65, 8, 33,246,238,238,238, 27, 9, 33, 32,132, 4, 83, 74, 53, 47,218, 67,128, 10,208, 44, 62, 46, 33,164,210, + 68,133,135,214,114, 66,224, 95,205,190, 86, 27,172,254, 61,157,250, 14, 26,212, 66, 0, 0, 38,211,181,190, 0, 14, 62,111,115, +213,191,127,255,139, 63,252,240,131,179, 94,175,199, 7, 31,124,176, 57, 56, 56,248,231,251,247,239,207,169,237,123,246,246,246, + 51, 62, 95,244,147,226,209,179,204,157,231,121,247,220,220,204,224,196,132,152,190,137,137,177, 95,153,180,123, 46,155,168,112, +138,178,124,112,130, 53,233, 8, 11, 34, 3,135,140, 28, 54,224,243,207, 23, 96,204,168, 49, 13,227,226,244, 54, 62, 14,201, 82, +181,201,182,137,171,171,239,224,143, 62, 89, 66, 46, 95, 58, 61,120,199,246, 53, 39, 63,154, 68,122, 48,147,101,213,189, 72,190, + 16,137, 58, 56,135,134,118, 25,181,119, 47,236,252,252, 68, 34,153, 76, 0, 0,156,193,224, 87,150,153,233,181,109,240,224,246, + 11, 9, 57, 61,159,210, 43, 76,243,255, 95,147, 97,165,193, 18, 8, 4,190, 55,111,222,116,183,181,181,197, 35,243, 3,139,197, + 2,139,197, 82,185,168, 48,165,180,242, 39,199,113,232,214,173,155, 85,111,176, 94, 94, 94, 61, 0,188, 22, 17, 17, 49, 98,246, +236,217,146, 78,157, 58,193, 98,177,224,228,201,147, 81, 43, 86,172,248,209,219,219,123, 55,128,117,185,185,185, 39,172,125,195, +245,242,242,234, 99,107,107,187,233,211, 79, 63,117,136,138,138, 18,121,121,121, 1, 0, 10, 10, 10, 58,156, 63,127,190,205,130, + 5, 11,166,121,121,121,141,205,205,205, 61, 98,237,201,241,245,245,141, 8, 14, 14,222,217,175, 95, 63,223, 54,109,218,200,155, + 54,109, 10, 74, 41,110,221,186,245,122, 98, 98,226,232,131, 7, 15,206,247,245,245,125,217,218,245,212, 8, 33, 36, 40, 40,104, +130,167,167,231,151, 51,103,206,108, 48,116,232, 80,105,108,108,108,105, 96, 96, 32,217,189,123,183,219,159,127,254, 57,237,151, + 95,126, 25,217,164, 73,147,185, 73, 73, 73,235,105,117,235, 24, 61, 65,112,112,240,117,129, 64,224,107,141, 1, 38,132,128,227, + 56,171, 76, 48, 33,164,101,163, 70,141,182,159, 59,119,174, 81, 90, 90,154,101,232,208,161, 27, 0,224,228,201,147,145,102,179, +153,244,238,221,251, 16, 33,228, 21, 74,233, 45,107,242,238,227,227,211,220,205,205,109,223,208,161, 67, 27,248,251,251, 43,124, +125,125,137, 92, 46,135, 80, 40, 68, 89, 89,153,119, 98, 98, 98,244,173, 91,183,116, 23, 46, 92, 40,241,241,241, 25,156,157,157, +125,167, 30, 15,222,151,220,221,221,199,137,197,226, 8,142,227,124, 0, 64, 36, 18,101,155,205,230,216,130,130,130,141,148,210, +139, 79,123,131,120,120,120,252,248,229,151, 95,186, 22, 20, 20,208,197,139, 23,255, 8, 96,194,139,250, 48,216,188,101, 7,174, + 95,187, 2, 0, 18, 66, 8,121,178,252, 17, 66, 72,179, 96, 72,222,127,127, 38,218,180,109,143, 87,199,140,172, 83,115,232, 0, +215,207,165, 66,145, 75,185,209,112,165, 72, 37,216,231,239, 46, 29, 54,118,100,155,100, 0, 56,124, 40,102, 88,251,246, 13,206, +187, 58,242, 67, 20, 82, 89,123,163,133, 43,222,251, 87,209,188,250,152, 41, 79, 79,207, 35,246,246,246,138,210,210,210,188,226, +226,226,149,253,251,247,255, 98,249,242,229,206,201,201,201,200,204,204,196,107,175,189,102,151,157,157,253,182,191,191,255,165, +140,140,140, 26, 35, 89, 26,141,230,251, 47, 23,205,156,103,239,224, 44, 84,216,216,194,206,222, 1,141, 26, 5,163,109,187, 40, + 68,247, 26,140,228,228,196, 14,219,183,174,185, 41,204,221,249,181, 69,218,234, 11,165,178, 81,141,207,165,240, 16,210,181,194, + 92,205,155,183, 0,247, 18, 18, 52,105,169,130,119,254,218, 43, 82,244,235, 25, 42, 51,154,202,210, 46, 95, 58,221,168, 67,199, +110, 0,208,102,199,246, 53, 39, 23,142, 37, 61,231,111,122,241,204,251,243, 52, 87,159,139,197, 19,250, 44, 95,238,222,106,218, + 52, 73, 89,106,170, 41,121,213,170,242,252,179,103, 45, 34,153,140,250,245,237, 75,220,186,119,151, 79,187,123, 87,114, 97,241, +226, 46, 95, 73,165,129,159, 24,141,155,152,230,255,159, 38,163,126, 6, 11,182,182,182,216,182,109, 27,196, 98, 49, 68, 34, 17, +196, 98,113,141,159,253,253,253,173, 49, 65,195,195,195,195,127,154, 57,115,166,199,160, 65,131,224,236,252,248, 42, 27, 3, 7, + 14, 68,255,254,253, 37, 41, 41, 41,163,119,236,216, 49,122,195,134, 13,121, 94, 94, 94,239,228, 62, 90,176,185,150,202,187,123, + 96, 96,224,238, 45, 91,182,216,232,116, 58,156, 62,125, 26,165,165,165,144, 74,165,240,245,245, 69,231,206,157, 69,167, 79,159, +110, 48,122,244,232,221, 62, 62, 62, 3,179,179,179, 79,213,149, 86, 79, 79,207, 54,110,110,110,103,126,251,237, 55,121,104,104, + 40,121,240,224, 1, 90,180,104, 1, 0, 40, 46, 46,198,192,129, 3,229,195,134, 13, 11,122,235,173,183, 46,123,122,122,118,205, +203,203,187, 94, 71,222, 91,183,104,209, 98,125,223,190,125,189, 63,254,248, 99, 7, 59, 59, 59,164,165,165,229,122,122,122, 6, + 87,152,159, 33, 67,134, 72,123,245,234,229,181,114,229,202,239, 15, 30, 60,248,129,151,151,215,132,220,220,220, 27,181,233, 10, + 4, 2,223, 27, 55,110,184, 43, 20, 10,228,231,231, 99,243,230,205,120,251,237,183, 33, 20, 10, 81, 80, 80,128,237,219,183,227, +157,119,222,129, 80, 40,132, 74,165,178,202, 4,219,218,218, 70,183,104,209,226,247,147, 39, 79,250, 58, 57, 57,193,219,219, 91, +240,217,103,159, 69, 4, 6, 6,218, 52,108,216, 80,152,155,155,139,221,187,119, 7,142, 27, 55,110,159, 92, 46,127, 93,175,215, +215,217,116,230,226,226,242,199,250,245,235,253,111,223,190,141, 85,171, 86,161,164,164, 4, 82,169, 20, 78, 78, 78,240,244,244, + 68,112,112, 48,153, 54,109,154,162, 71,143, 30,138, 5, 11, 22,252, 1,160,165, 21, 15,221, 22,238,238,238,191,142, 30, 61, 58, +112,225,194,133, 78,158,158,158,168,120, 33, 80,169, 84,190,105,105,105, 29,230,205,155,247,178,135,135, 71, 74, 65, 65,193, 20, + 74,233,237,122, 62,212, 91,246,236,217,115,224,208,161, 67,133,185,185,185,216,184,113,227, 64, 66, 72, 75,107, 77,229,255, 26, +215,175, 93,193,228,183,222, 43,243,246,243,147,252,185,127,235,144,178,178,223,206,219, 9,156, 68, 0, 80,198, 43,185, 78, 29, +236, 58, 15, 26, 60, 90,210,127,192,208,178,223,126,249,222,206, 26,131, 37, 21,138, 92,182,109,154,154,121,246,194,253,102, 71, +142,167, 69, 15, 29, 28, 45, 16, 73, 66,130, 0, 96,214,204, 55,165,123,247, 31,255,185, 79,116,195,220, 46,157,130, 51, 71,141, + 93,229, 87, 31,115, 21, 24, 24,120,250,200,145, 35, 30, 82,169, 20,165,165,165, 46,107,215,174, 93,214,190,125,123, 65, 82, 82, + 18, 18, 18, 18,144,154,154, 10,149, 74,133,118,237,218,217,197,199,199,175, 4, 80,163,193, 42,212, 13,255, 50,208,189,232, 7, + 31, 23,231, 70,122,147,202,221,194, 21,135,157, 60,126,187,249,174, 29,229,173,220, 61,125,131, 71,143,158,140,143,230, 44, 17, +239,217,181,126,222,153,179, 71, 1, 52,170,121, 6,127,138,151, 62,153, 59, 7,106,141, 1, 99,199,188,137,113, 99,222,116,161, + 48,122, 81,139,222,214,168, 43,117,114,148,196, 29, 88,191,117,199, 48, 0,190, 85, 76,214, 9,102,178,106,230,115,145,168,253, +192,159,126,114,139,120,227, 13,217,237,133, 11,181, 69,103,207,234,154,244,239, 95,218,106,234, 84, 3, 0,104, 82, 83, 37,247, +230,207, 87,184,117,233, 98,211,113,246,108,103,139,209,232,185,136,144,118,159, 81,122,181,190,154,141,198,140,177, 44,221,189, +187,237,229,197,139,187, 97,209, 34, 97,247, 86,173,110,205,253,229,151,236,103,209,124,158,233,204, 57,115,198,160,109,214, 12, +145, 35, 70, 20,251,184,184, 24,158,103,222,159, 37,157,140,106,234,144,154,130, 36, 33, 33, 33,249,137,137,137,238,187,119,239, +174,211, 92,137,197, 98,120,121,121, 33, 42, 42,170, 32, 38, 38,198,163,150,135, 98,102,102,102,166, 47,199,113,144, 74,165,181, + 38, 76,163,209, 32, 38, 38, 6,163, 70,141,202,202,201,201,169,241,193,219,160, 65, 3,123,103,103,231,228, 83,167, 78,185,198, +197,197,225,250,245,235, 8, 12, 12,132,179,179, 51,196, 98, 49,204,102, 51,212,106, 53, 66, 66, 66, 96, 99, 99,131,254,253,251, + 23,149,148,148, 4,150,148,148,212,248, 32,107,216,176,161, 76, 44, 22,223,223,181,107,151, 95, 68, 68, 4,174, 94,189, 10, 63, + 63, 63,120,122,122, 2, 0, 82, 83, 83,113,254,252,121,244,239,223, 31,177,177,177,152, 58,117,106,166,217,108, 14, 78, 75, 75, + 51,212,216,100, 16, 22,150,187, 99,199,142,172,208,208, 80,189, 86,171, 21,228,231,231,139,207,158, 61,203,105, 52, 26, 59,149, + 74, 37, 86, 42,149, 98,181, 90, 45,210,106,181, 98,129, 64, 32, 49, 24, 12,226,203,151, 47, 11,139,139,139, 29,106, 59, 79,161, +161,161,249, 9, 9, 9,238,251,247,239, 71,100,100, 36,118,239,222,141, 89,179,102,225,194,133, 11,240,243,243,195,142, 29, 59, + 48,123,246,108, 36, 38, 38,194,213,213, 21, 61,122,244,168,245, 26, 1, 64,147, 38, 77, 30,196,196,196, 4, 73, 36, 18, 36, 39, + 39, 35, 43, 43,171, 98, 61, 59, 20, 22, 22, 34, 41, 41, 9,217,217,217,104,210,164, 9,198,140, 25,147,148,149,149,213,164,174, +130,214,186,117,235,194, 19, 39, 78,184, 54,111,222, 28,249,249,249,112,114,114,130,163,163, 35,156,156,156, 42, 63, 7, 6, 6, + 98,230,204,153,104,222,188,121, 65, 90, 90,154, 71, 93,230, 39, 50, 50,242,200,137, 19, 39, 92, 29, 28, 28,144,151,151, 7,181, + 90, 13,145, 72, 4,133, 66, 1, 87, 87, 87,200,229,114, 0,192,253,251,247, 49, 96,192,128,162,228,228,228, 62,214,154, 35, 66, +136,192,195,195, 35,225,206,157, 59,193,148, 82,100,100,100, 32, 49, 49, 17,111,189,245,214,125,189, 94, 31,250, 34,173,169, 87, +165, 95,149,100,194,196,201,146,161,131,135,148,223,186,126,152,183,193, 25,180,107,105,163, 4,128,171,183,116, 78, 58,116, 69, +203, 54,125, 5,123,247,239, 83,172, 95,247,155, 24, 60, 60, 64,144, 24,127,143, 46,170, 73,123, 96, 31,167,241,179,223,235,219, +172, 75,167, 46, 34,181,154,122,254,190, 97,117,187,244,148,100, 15, 0, 8,104, 28,152, 63,105,252,155, 87, 29, 28, 72,222,217, + 11,103,185,165,223, 31,190,123,224,136,114,131, 21,145,229, 64,127,127,255, 75,127,252,241,135,171,155,155, 27, 28, 29, 29,161, +213,106, 97, 50,153, 16, 31, 31,175,223,182,109,155,217,193,193,193, 62, 47, 47, 15, 74,165, 18, 34,145, 8,151, 46, 93,202,200, +203,203, 11,120, 82,171,162, 15, 22, 0,188,213,175,153, 56,172, 71,176,179, 68,198,217,216,136,239,121,129, 88,100,132,218,121, +156, 60,121,169,249,169, 51,231, 94,237, 63,112,148, 91,199,142,221,177,228,171,143,204, 25,121,249,173,148,229,131, 19,170,235, +131,213, 44,152,244, 24, 58, 98,216,200,207, 63, 95,128, 5,243, 22,226,192,254,189, 42, 59, 91,129,193,193, 73,236,216,165, 67, + 39,253,204,183,135,100,150,151,101,249, 45,251,121,245,152, 94,125, 70,250,118,232,216, 13,151, 47,157,198,142,237,107,174, 75, + 44,102,214, 92,248, 4, 11, 9,113,118, 10, 12,156,242,238,253,251,146,219, 11, 22,148,113, 57, 57,165,109,102,204, 40,170,110, +223,172, 99,199,108,165,222,222, 14,206,131, 7, 55,248, 62, 32,128,154, 11, 10,126,173,174, 15, 81,117,154, 87,189,188,156,246, +156, 58,213,147, 23,137,186,190, 61,125,186, 77,116,116, 52,212,106, 53, 14, 28, 56,128, 45,155, 55, 27, 60, 61, 60, 98,156,174, + 93,187, 25,152,155,251,169,181,154,109,102,204, 40,178, 88, 44,100,234, 87, 95,245,186,151,153,217,163,160,184,184, 33, 0,184, + 59, 58,102, 70,248,250, 94, 95,190,105, 83,226,143,141, 26,241,214,166,115,219,133, 11, 30,135, 10, 11,223,112,114,114,178, 41, + 44, 42, 18,201,164,210,226, 86, 77,154,236,248,122,250,244,211,198,155, 55, 37,114, 95, 95, 7,199,129, 3,235,157,247, 54, 51, +102, 20,169,202,203, 69,115,127,248,161, 83, 78,113,113, 67,173,209,216, 68, 85, 86,230,201,153, 76, 2,123, 27,155,226,128, 38, + 77, 10, 52, 39, 78,228, 6,148,149,189,183, 66,171, 45, 96,165,242, 25, 35, 88,132, 16, 80, 74,173,138, 94,137,197,226,199,250, +104,213,130, 68, 40, 20,226,234,213,171, 40, 40, 40, 64,100,100, 36, 26, 53,106,244,216, 14,201,201,201, 56,120,240, 32,148, 74, + 37, 90,183,110, 13, 0,146,218, 4,237,237,237,223,159, 51,103,142,147,193, 96,192,245,235,215,209,166, 77, 27,200,100, 50, 72, + 36,146,199,204, 95, 65, 65, 1,194,195,195, 49,117,234, 84,199, 31,127,252,241,125,212,178,134, 28,165,116,250,232,209,163,221, + 35, 34, 34, 0, 0,153,153,153, 21,105, 1, 0,184,185,185,225,214,173, 91,104,211,166, 13, 60, 60, 60,208,175, 95, 63,247,125, +251,246, 77, 7,176,180,198,140, 75, 36,130,208,208,208,182,143, 34, 68, 16, 8, 4,247, 28, 28, 28,220, 60, 60, 60,108, 29, 28, + 28,254, 45,143,107,215,174, 85, 74,165, 82,179, 53, 39, 53, 47, 47, 15, 17, 17, 17, 80,169, 84, 0, 0,173, 86,139, 38, 77,154, + 64,173,126,216,229,204, 96, 48,192,219,219, 27, 58, 93,237, 93,187, 90,180,104,177, 32, 52, 52,180,119,183,110,221,100, 98,177, + 24,183,111,223, 70,171, 86,173,176,109,219, 54,248,251,251, 67,161, 80,224,254,253,251,136,140,140,196,153, 51,103,224,230,230, +134,240,240,112, 89,235,214,173,207,149,148,148,156, 74, 75, 75, 91, 80, 75,164, 77, 96,103,103,135, 51,103,206,224,143, 63,254, + 64,106,106, 42,114,114,114, 96,111,111,143,150, 45, 91, 34, 44, 44, 12, 47,189,244, 18,238,223,191, 15, 82, 71, 97, 34,132,120, + 6, 7, 7, 31,184,122,245,170, 43,165, 20, 27, 55,110, 68, 89, 89, 25,140, 70, 35, 4, 2, 1,228,114, 57,156,157,157,209,163, + 71, 15,184,185,185, 33, 56, 56, 24,219,183,111,119,237,215,175,223,193, 71, 17,168,188,186,206,169,179,179,243,123,243,231,207, +247,115,119,119, 71, 90, 90, 26, 84, 42, 21, 60, 60, 60,208,173, 91, 55,159,227,199,143,191, 7, 96,249,139,242, 16,168,232,208, + 78, 8, 33,127,238,223, 58,196,223, 75,218,172, 93, 43, 77, 64,204, 13, 81,208,193,227, 15,154, 63, 60, 31, 1,119,218,181,214, + 36, 93,189,126, 56,253,207,253, 91,175,220,189,135,125,214, 52, 97, 23,169, 4,251,142, 28, 79,139,110, 30, 30, 37,252,225,231, +249, 67, 38, 79,234, 35,107,224, 28, 69,212, 5,219,113,225, 74, 76,192,103, 11, 62,118, 95,180, 96,241,159, 71,142,167, 89,138, + 84,130, 47,173, 73,111, 80, 96,131, 31,119,173, 22,185,106,140, 63,227,214, 21, 71, 64,220, 17,141, 3,155, 66,173, 86, 67, 46, +151,203,199,140, 25, 99,153, 51,103, 78,185,131,131,131, 66, 36, 18,225,214,173, 91, 5, 2,129,160, 79, 93,186,122,119,103,106, + 49,153, 57, 42, 21,242,148,216,235,136,165, 68, 26, 27,159,130,174, 93,251,229,183,109,211,234,171,197,223, 46,255, 36, 48, 48, +196,109,204,216, 41,226,165, 75, 63, 93, 5, 32,170, 58,157,187,247,233,201,176, 32, 98, 3, 96,192,231,139, 22, 32, 57,249,190, +243,228,215,148, 11, 69, 50, 27,239,208,128, 78,246,171,254, 56,213,183, 73,147, 70, 13, 39, 79,124,253,175,223,214,254, 49,160, +106, 36,107,235,150,223,246, 17, 66,122, 90,115,110,255, 65, 52, 31,119,224, 0,202, 50, 50,204, 37,231,206,233,123,254,244, 83, + 81,235,241,227,151,155, 57,206,181,162,174,170,248, 73, 8, 1,120,158,136,150, 46, 21, 80,111,111,152,157,156, 94,251, 24,104, + 90,151,230, 98,179,121,248,208,150, 45, 7,252,190,105, 19, 2, 2, 2, 42, 53, 29, 29, 29, 49,125,250,116, 76,155, 54, 77,118, +231,206,157,118, 7, 15, 30,108,183,225,231,159, 61, 62, 6,134, 91,147,206,179,183,111, 59,127,248,253,247,115,155, 69, 68,248, +175,248,233, 39, 89, 69,125,151,150,150, 22,252,211,143, 63, 6,244,136,142,206,255,232,195, 15,215,221,156, 53, 43, 28, 15,151, +100,171, 81, 51,239,236, 89,227,161,146,146, 55,118,236,220,233, 20, 18,242,176, 27,100, 82, 82,146,251,239,191,255,254,102,143, +183,223, 30, 59,107,244,232, 79,123, 60,120,160,116, 40, 44,148, 13,252,241, 71,209,214,145, 35,235,212,172, 72, 39, 0,140,152, + 61,251,253,246,157, 58,133,245, 27, 51,166,129,183,183, 55,177,177,177,129,201,100, 66,126,126,190,115, 98, 98, 98,208,113,165, + 82,125,244,214,173,141,120,180,136, 59,227, 25, 12, 22, 0, 88, 44, 22,171,204,149, 72, 36,250, 87,225,182,230,160, 34, 17,188, +189,189, 81, 84, 84,132,216,216, 88, 4, 4, 4,192,108, 54,227,200,145, 35, 80,169, 84, 16,139,197,144, 72, 36, 48,153,234, 94, + 27,214,214,214, 54,186, 75,151, 46,162,139, 23, 47, 34, 48, 48, 16, 54, 54, 54,149,233,170,216, 36, 18, 9,188,188,188,160, 86, +171, 17, 21, 21, 37, 94,187,118,109,116,109, 6,203,206,206,174,255,144, 33, 67, 42, 67,108,101,101,101, 16, 10,133,149,102,165, +172,172, 12, 37, 37, 37, 80, 42,149,208,235,245,104,222,188,185,244,228,201,147,253,107, 51, 88, 85, 41, 47, 47, 47, 43, 40, 40, +112,138,138,138,114, 94,183,110, 93, 98,199,142, 29, 67,170,254,255,244,233,211,122,189, 94, 47,150, 74,165,117,174,115, 71, 8, +193,166, 77,155, 42,207,125,118,118, 54, 86,173, 90, 85,249,255,251,247,239,227,135, 31,126,168,156,151,163,182,107, 20, 26, 26, +218,111,227,198,141,109, 54,108,216, 80, 42, 20, 10,145,152,152,136,205,155, 55,131, 82, 10, 55, 55, 55,148,151,151, 35, 63, 63, + 31,167, 78,157, 2,199,113,176,179,179,131,143,143,143,124,250,244,233,157, 23, 46, 92, 40, 6,176,160,150,178,100, 17, 10,133, + 8, 8, 8,192,188,121,243,160,215,235, 33,145, 60,244,149,106,181, 26, 74,165, 18, 55,111,222, 68, 90, 90, 26,234,170, 92,228, +114,249,203, 27, 54,108,112,151, 74,165,208,233,116,208,104, 52,200,204,204, 68,122,122,186,190,160,160,128,179,183,183, 23, 4, + 4, 4, 8,100, 50,153,108,232,208,161,164,194,104, 14, 28, 56,208,101,227,198,141,163,234, 50, 71,132, 16,183,102,205,154,125, +242,230,155,111,202,171,152,110,228,229,229, 97,248,240,225,138,139, 23, 47,206, 33,132,108,166,148, 22,190, 72, 15, 3, 74, 41, + 45, 43,251,237,252,217,125, 63, 53,139,185, 33, 10, 50, 26, 75, 59,246,234,255,158, 8, 0, 46,158, 89,219, 49,230, 70, 44,108, + 8,151,126,232,232,210,243,118,118,147,105, 93, 17,192,254, 61,157,250,250,187, 75,135, 13, 29, 28, 45,248,125,195,234,118,147, + 39,245,145,185, 55, 94, 77, 0,192, 89,226,139,151, 44,179, 4,122,131, 86,254,251,134,213,237,134, 14,238,127, 37, 53, 37,125, +249,128,104,231, 61, 7, 79, 40, 15,215, 22, 33,244,114, 23,249, 56,219, 23,193,217,190, 21, 2, 2,237,113,243,214, 29,236,219, +125, 14,193,161,157, 97, 48, 24,192,113,156,237,160, 65,131,202,119,236,216,161, 47, 46, 46,214,152, 76,166,174, 57, 57, 57,247, +234,202,127, 86, 86, 60, 31,226,217,193, 36,177,145,113, 26,149,164,252,227, 79,119,142,108,221,190,119, 27,103, 47, 31,177,155, + 45,255,103,247,174, 81,155,183,108,250,117,198,172, 15, 22,161,101,203,142, 29,239, 62, 56, 20, 6, 32,166, 90,211,154, 68, 15, + 68, 4, 19, 46,249,193,131, 1,233,105,105, 89, 77, 61, 60,141, 73, 74,106,126,239,227,213,189,162,186,190,220, 60,168, 89, 23, +105, 92,252, 25, 50,243,237, 55,183, 44,251,121,245,152, 10,147,117,246,236,145,174, 11, 22,164, 73, 1, 24, 88,245,244,232,229, + 84, 38,243,181, 11, 8, 16,165,174, 91,167, 11, 28, 52,168, 20, 0,204, 28,231,122,233,242,101, 71,133, 66, 1, 74, 41,204,102, +243, 99,125,132, 43,250, 5, 71,119,235,230, 97,141,102,230, 47,191, 52,127,251,237,183,145,151,151, 7,142,227, 32, 22,139,159, +124,102, 67,163,209, 96,196,136, 17, 88,187,114,101, 7,107, 52, 45, 22, 11,249,240,251,239,231, 78,127,239,189,160,177, 99,199, + 10,170, 62,123,157,156,156,240,219,234,213,210,117,235,214,249, 46,249,227,143,215,122,201,100,201,117,105,106,194,195,225, 20, + 19, 99, 83, 97,174, 0, 32, 40, 40, 8,139, 23, 47,150,141, 30, 61, 90, 58, 97,194,132,239,226, 66, 66,190, 95,144,158,254,192, +165,105, 83, 7,169, 76,230,107,237,249, 4,128, 50,163, 49, 98,254,231,159, 59, 95,185,114, 5, 57, 57, 57, 21,115, 93,129, 16, +130,200,200, 72, 50,114,228, 72,199, 14,109,218,180, 99, 37,242, 57, 69,176, 44, 22,203, 99, 70,165, 46,131, 85,239,246, 73, 66, +224,229,229, 5,147,201,132, 53,107,214, 64, 34,145, 84, 86,186, 0, 96, 52, 26,235,212,208,235,245,145,158,158,158, 80,169, 84, +104,218,180,233, 99,145, 43,137, 68, 2,145, 72, 4,137, 68, 2,153, 76, 6,131,193, 0, 31, 31, 31,232,245,250,200, 58, 12, 80, + 75, 7, 7,135,202,138,213, 96, 48, 84,154, 43,165, 82, 9,165, 82, 9,163,209,136,210,210, 82,148,149,149, 65,169, 84, 66,163, +209,180,178, 38,207, 60,207, 35, 54, 54, 54, 41, 36, 36,164,165, 80, 40,132,157,157,157,173, 86,171,173,236, 59, 84, 82, 82,130, +245,235,215,107,199,143, 31,239,122,229,202, 21,171, 22, 18,126,231,157,119, 32,147,201, 80, 94, 94,142,149, 43, 87,226,221,119, +223,133, 68, 34,129, 70,163,193,170, 85,171, 48,115,230, 76,136, 68, 34, 24,141, 70,108,219,182,173,230, 72, 70,124,124,234,229, +203,151, 91,181,110,221,218,121,207,158, 61,133,189,122,245,114,235,211,167, 15,108,108,108,160,211,233, 96, 54,155,209,161, 67, + 7,132,134,134,162,160,160, 0,135, 14, 29, 42, 10, 14, 14,118,189,114,229, 10,159,151,151,151, 94, 87,229, 93,213, 96, 91, 44, + 22,228,231,231, 67,169, 84,162,176,176, 16, 57, 57, 57,200,202,202,130, 72, 36, 66, 93, 47,239, 46, 46, 46, 35, 34, 34, 34,132, + 0, 96, 99, 99,131,150, 45, 91, 98,238,220,185,156, 78,167,123, 5,192,161, 71,187,245, 91,189,122,245,158,243,231,207,139,188, +189,189,145,144,144, 0, 55, 55, 55,145, 92, 46,175,211, 96,121,122,122,174,253,243,207, 63, 27, 84,152,234,138,178, 90, 94,254, +240,114, 12, 31, 62,188,193,134, 13, 27,214, 2,232,255,162, 61, 16,236, 4, 78,162,118, 45,109,148, 7,143, 63,104,222,171,255, +123, 34,175,160,249, 0,128,151, 0,209,177,131,223, 55,239, 31,221,100, 71, 69,191,172,218, 24,218,207,109,233,160, 65, 45, 4, + 99, 71,182, 73, 22, 73, 66,130, 54,109,248,222,163,129,115,212,191, 30, 18,194, 6,176,181, 1, 66,131, 44,130, 75, 91,147, 61, +102,190, 23, 98,220,188,238,141,228, 77, 59,174, 71, 75, 36,183,123, 0,152, 89,147,118, 92,162,121,191, 74,219,160,153,163,228, + 52,129,124, 48, 90,181, 12,134,155,155, 18, 43,127,219, 0, 31,255, 78, 48, 24, 12,112,112,112, 80, 0, 48,153, 76,166, 77,214, +152, 43, 0, 56,113, 66,201,135,135, 43,141, 66, 13,207,189,253,238,210, 97,189,250, 13, 14,235,209, 35,154, 63,122,236,168,169, + 83, 43, 83,110,143, 30, 29,243, 79,157, 62,123, 63, 47, 47, 59, 56, 52,180, 57,238, 37,222,234, 11,144, 88,160,250, 2, 27,123, +159, 30, 14, 10, 34,167,182,109,155,204,235,248,155, 54, 95,124, 25,211,111,192,128, 9, 17, 93,162,186,240,199,142,159, 52, 74, + 81,116,215,174,243, 75,217, 19, 70,191,178,103,219,238, 61,189, 79,157, 60,208, 68,165,206, 63,240,237,207,148,153,171,170, 47, +103, 28,231, 33,146,201, 4,133,167, 78,113,145,147, 38, 85,158, 27,133, 66,129,125,251,246, 65, 42,149, 86,110, 18,137,164,242, +179,135,135, 7, 8,165,130,250,104,230,230,230, 34, 47, 47, 15,142,142,142,112,115,115, 67, 94, 94, 30, 46, 94,188,136,123,247, +238, 65, 44, 22,163,111,223,190, 16,212, 80,111, 62,169, 57,245,171,175,122, 53,109,214,204,255, 73,115,133,135, 5, 19, 37, 37, + 37,136,142,142, 22,156, 56,113,194,243,210,131, 7,131, 1,108,170, 85,115,240,224,226,194, 19, 39,170, 61,118, 68, 68, 4,217, +183,111,159,108,204,232,209, 51, 22,254,248,227,207, 95,254,244, 83,166,133,227, 60,235,147,119, 66,136,128, 16, 2, 63, 63, 63, +148,148,148,160,172,172,172, 34,224, 0,103,103,103,152,205,102,240, 60, 47,102, 37,210,122, 4,117,153, 1,107,204,149, 88, 44, +134, 64, 32,120, 42,147, 85, 53, 66,240, 36,214, 24,172,138,202, 79, 46,151, 63,118,131, 85,152,181,170,159, 43,222,118,172, 64, +168, 86,171,177,107,215,174,202,130,102, 52, 26,161, 82,169,160, 84, 42,161, 82,169,160,215,235,145,154,154,138,173, 91,183, 34, + 39, 39, 7, 66,161,208,170, 73, 91,147,147,147,175, 55,106,212,168,101, 69,229,221,189,123,119,223,179,103,207,230, 84,156,131, + 79, 63,253,180,168, 67,135, 14,174, 85, 43,247, 58, 19, 43, 20,226,226,197,139,208,233,116,160,148, 66, 34,145, 32, 49, 49, 17, + 28,199,129,231,121,136, 68, 34, 20, 22, 22,214, 25,193,138,141,141,157,248,250,235,175,175,152, 52,105,210,169, 15, 63,252,240, + 88,247,238,221, 51, 9, 33, 48,153, 76,112,112,112,128,167,167, 39, 18, 19, 19,161,215,235,241,254,251,239,103,108,216,176,225, +248,202,149, 43, 79,173, 89,179,102, 69, 86, 86,214,235,245,185,222, 28,199, 65,171,213,162,180,180, 20, 37, 37, 37, 80,171,213, +208,235,245, 79, 85,134,162,162,162,112,224,192, 1, 97,207,158, 61,127, 15, 8, 8,200, 11, 8, 8,200,235,217,179,231,239,251, +247,239, 23,250,248,248, 32, 45, 45, 13,215,175, 95, 71,105,105, 41, 40,165,181, 30, 64, 44, 22,119, 31, 63,126,124,103,127,127, +127, 98, 50,153, 96, 48, 24, 96, 48, 24, 96, 50,153,192,243, 60,210,210,210,208,172, 89, 51, 65, 64, 64, 64, 71, 66, 72,119,246, + 8,177, 30,117,193,118,208,242,159, 64, 13, 91,193,171,127,134,246, 41, 39, 35, 41, 45, 45,253,242,173,143, 85, 5, 22,195, 45, +196,199,156,134,166,220, 7,190,141, 39,226,205,215,187,227,234,229,163, 40, 41, 41, 65,124,124, 60,186,118,237, 42, 33,132,212, +171, 92, 30, 59,118,217,242,202,184,119, 95,238,222,123,112,155,232,232,254,220,145, 35,199,141, 55,174, 29,185,222, 36,200,185, +128,242,101,249, 78, 78,138,155, 15, 30,220, 69,112,211, 48,152,204,230, 40, 96, 65,173,229, 41, 41,137, 26,255,250,203,203,242, +202,164,216,113,125,250,190,214,162,103,207, 62,230, 35,199,254,180,156, 59,181,243,102,159, 62, 65,103,190,254,126,187, 95,137, + 49, 52, 92,238,224,121,176, 99,103, 69,212,212, 87,253, 39,179,146, 82, 67, 52, 64, 46,231,241,232,185, 88,209,133,165,170,185, +122,114,179,166, 78,170,170, 89,181, 46, 82, 42,149,184,127,255, 62,190,253,246, 91,220,186,117, 11, 22,203,195,174,118,117,117, +179,168,170,153,152,145,209,227,221,119,223,149, 85,103,174,138,139,139, 81, 84, 84,132,236,236,108, 12, 28, 56, 80, 82,226,236, +220,186, 46, 77, 31,119,119,131, 66, 46,207,191,119,239,222,191,165, 87,173, 86, 67, 42,149,226,199,159,126,146, 28, 73, 72,120, +235,200,201,147,174,245, 57,159, 85,235, 82,119,119,119, 4, 5, 5,161, 85,171, 86,136,140,140,132, 92, 46, 71, 92, 92, 28,126, +253,245, 87, 8, 9,225, 88, 73,124, 78, 17,172,250, 24,172,250, 24, 2,107,177,166,137, 80, 46,151,199,228,231,231,119,242,241, +241, 1,199,113,149,102,234,201, 38,194,138,104,199,221,187,119, 33,151,203, 99,106,211, 84, 40, 20, 49, 66,161,176, 99,187,118, +237,176,123,247,110,156, 58,117, 10, 41, 41, 41, 40, 47, 47,135,193, 96,128, 78,167, 67, 92, 92, 28,120,158, 71, 68, 68, 4, 28, + 29, 29,161, 80, 40, 98,234, 74,171, 86,171,205, 21,139,197, 33, 54, 54, 54,255,106,238,240,242, 66,113,113, 49,111, 54,155,177, +126,253,122,181,167,167,167,173,141,141, 13, 42,230, 31,179,198, 92, 22, 20, 20,192,215,215,183,178, 15,150, 70,163,129,187,187, + 59, 76, 38, 83,101, 4,206,222,222,190, 78,115, 73, 41,213, 3,152, 85, 69,187,237,200,145, 35,183,108,219,182,173,241,241,227, +199,113,229,202, 21,184,185,185,225,171,175,190, 74, 73, 75, 75, 27, 67, 41,189,246,188,175,185, 53, 6,171,184,184,120, 87, 76, + 76, 76,199,118,237,218, 85, 22,186,238,221,187,147,238,221,187,187, 86, 13,233, 23, 22, 22,226,234,213,171, 56,126,252, 56, 8, + 33,184,127,255,190, 69,167,211,109,169,229,216,146,128,128,128,117,115,231,206,181,227, 56,174,178,108,219,216,216, 64, 46,151, + 67, 34,145, 64, 40, 20, 34, 45, 45, 13, 67,134, 12,113,252,233,167,159,214, 18, 66,130, 40,165,166, 23,229,129, 80,198, 43,185, +171,183,116, 78,206,206, 1,119, 46,158, 89,219,241,165, 71,207,136,139,103,214,114,206,206, 1,119,174,222,210, 57,117,241, 83, +114,118,117,232,236, 61, 84, 56,219,100,186,214,247,240,161,152, 97,179,102,190, 41, 13,104, 28,152,127,225, 74, 76,192, 75,150, + 89, 2, 91, 27, 64,171, 3, 74,148, 64, 66,146,144, 15,104, 28,152,127,237, 70,162,244,187,101,107, 2,203,117,198, 61, 7, 79, + 40, 15,215,166,157,149,149,165,247,241,241, 25, 58,107,161,226,204,232, 49,238, 82,137,220, 15,154,210, 27,104, 24,224,130, 87, + 70,132,224,231,223,110,192,193,161,193,195, 8, 6, 33,182,214,230,189,168,168,136,236,218,122,110,210,248,215,222,236,208,167, +247, 0,238,240,145,191, 68,167,142,238,191,184,246,183, 79,246, 80,161, 86, 65,168,198,198,207,223,247, 78,106,202,189, 49, 93, +186,244,134,141, 84,209, 4, 8,173,182,192, 86, 14, 28,160,200, 16, 8, 32, 31,255,218,228,151,250,244, 25,204, 29, 57,178, 23, + 71, 14,110,184, 60,127,126,195,131, 41,217,155, 37,151,174,101,201,135,190, 60,173,244,192,161,187,198, 17,131, 26,221,243,182, +109,169, 99,213,210, 19, 47,144, 34, 81, 62,103, 48,248,249,246,233, 35, 44, 79, 79, 23,219,121,120,112, 0, 96, 54,155,255,205, + 84, 85,141, 96, 9, 4, 2, 64, 32,224,173,209,180, 54, 45,229,229,229,224, 1,206, 26,205,194,146,146,134, 79,246, 49, 54,155, +205, 40, 46, 46,174,220,148, 74, 37,228,114, 57, 74, 31, 77, 26, 90,151,102,151,230,205,215, 47,251,238,187,217,191,173, 94, 45, +169,106,174, 42, 54,129, 64,128, 57,159,124, 34,153,247,245,215,211,134,139, 68,239,213,231,124, 86,188,172, 11,133, 66,136, 68, + 34,164,167,167, 35, 35, 35, 3,233,233,233, 72, 79, 79,135,141,141, 13, 40, 33, 60, 43,145,207,193, 96, 85, 92, 60,107, 59,185, + 91,107, 8, 42,222, 4,158,151,193,210,106,181,199,207,159, 63,223,190,119,239,222,162,203,151, 47,195,211,211,179,210, 96, 85, +252,172,104,118, 82, 40, 20, 56,116,232,144, 73,171,213,214,186,144,164, 78,167, 59,113,226,196,137, 54, 51,103,206, 20, 79,156, + 56, 17,241,241,241,152, 50,101, 10,148, 74, 37,212,106, 53,138,139,139, 81, 94, 94,142,246,237,219, 67, 46,151,227,193,131, 7, +102,157, 78, 87,215, 84, 5,180,160,160,160,204,205,205,205,235,201,127,188,252,242,203, 30,191,252,242, 75,121, 66, 66,130,185, + 83,167, 78, 14,214, 26,141, 10,182,110,221, 90,105,158,238,221,187,135, 95,126,249,165,178,207,213,141, 27, 55,176,116,233,210, +202,185,203,234, 25, 85,188, 22, 30, 30,206,153,205,102, 52,105,210,164,162,121, 21, 43, 86,172,224,254, 14,115,101, 45,122,189, +126,231,132, 9, 19, 62,186,121,243,166,151, 72, 36,170, 8, 93,131,231,121,152, 76, 38, 60,120,240, 0,113,113,113, 72, 72, 72, + 64, 73, 73, 73,229, 11,192,173, 91,183, 74,205,102,243,246,154,116,221,220,220, 62,253,227,143, 63, 60, 21, 10,197, 99,229, 89, + 32, 16, 84, 62,116, 36, 18, 9, 10, 11, 11,225,228,228,132,158, 61,123,186,159, 56,113,226, 83, 0,243, 94,132,135, 1, 33,132, +116,234, 96,215,249,157,105,175,161, 93,107, 77, 82,204,141, 88, 28, 59,248,125,115,224, 97, 39,247,200,214, 17, 73, 87,111,218, +163, 95,239,217,157, 47, 92,158, 82,107, 39,247, 71,125,168, 14,182,111,223,224,252,222,253,199,127,254,120,230,155, 87, 63, 91, +240,177,187,222,160,149,135, 6, 89, 4,192, 67,115,117,233,166,173,126,209,130, 55,175, 46, 94,182,158,207, 40, 48,205,184,114, +165,180,198,209,189, 85, 77,139,179, 29,228,158,126, 51,114, 26, 6,246,104, 20,115, 99, 13, 92, 29, 75, 97,223,164, 19,250,245, +105,143,227, 39, 98,144,158,173, 71, 65, 65, 1, 0,212, 58,237, 65,194,157, 61,227, 40,161,254,132,146, 12, 34,160,242,113, 19, +222,136, 26, 48, 96, 48, 61,112, 96, 63,183,119,207,166,243,219, 55,254,176, 83, 32, 17,139,116, 70, 71, 35, 33,122, 21, 47,176, +143,215,106,139, 31, 62, 60, 37,146,154,151,187,121, 52, 33,107, 88,120,168,231,184, 9, 83, 28,251,247, 27, 66, 15, 30,220,203, +111,223,182,254,212,246, 53,145,155,120,129, 90,146,155, 89, 46, 83,169,205, 42, 74,164, 78,101,106,190, 60, 63, 57, 72,239, 61, +224,101, 19,171,150,158,168, 7, 12,134,172,178,204, 76,175, 6, 93,187,202, 30, 44, 88,160,240,104,223, 94, 95,209,133,165, 54, +131, 37, 20, 10, 65, 1,222, 26, 77,107,211,162,211,233, 64, 9, 49, 63,141, 38,199,113,143,153,171, 10,131,245,232, 89,111, 85, + 58,191,125,255,253,203,109, 95,123,173,228,210,165, 75, 30, 29, 59,118, 36, 26,141, 6, 26,141,230, 49,147,229,230,230, 70, 26, + 7, 6, 42,142,228,230, 6,206,179,242,124, 90,147,119,129, 64, 80,227,249,100, 60,133,193,170,136, 96, 89, 99,176,132, 66,161, + 53,166,192,108, 54,155,225,238,238,142,162,162,162, 26, 43,124,129, 64, 0, 27, 27, 27,104,181, 90, 0,168,117, 36,157, 70,163, + 89,177,104,209,162,233,221,187,119,119, 13, 9, 9, 65, 97, 97, 33, 60, 60, 60, 32,151,203, 43,251,134, 85,232,197,198,198, 98, +219,182,109,106,141, 70,179,162,142,124, 47, 95,181,106,213,219,253,251,247,111,224,234,234, 10,103,103,103,220,185,115, 7,206, +206,206, 80,171,213, 72, 76, 76,132,189,189, 61, 8, 33,208,235,245, 56,123,246,172,134,231,249,229,117,220,152,244,194,133, 11, + 38,133, 66,113,167,176,176, 80, 88, 82, 82, 34, 42, 45, 45, 21,169,213,106,177, 74,165, 18, 31, 62,124,216,213,209,209,177,252, +228,201,147,133,254,254,254,194,212,212, 84,161,209,104, 20, 88, 81, 41,226,189,247,222,131, 68, 34,129,193, 96,192,138, 21, 43, + 48,123,246,236,202, 62, 87,223,124,243, 13,230,206,157, 91, 25, 82,255,243,207, 63,235,107,178, 96, 50,153, 96, 54,155, 97, 54, +155,173, 50,189,207,130, 53, 70,157, 82,154, 71, 8, 25,216,174, 93,187,163, 59,118,236,112,177,183,183, 71, 90, 90, 26,242,243, +243,145,159,159,143,194,194, 66,148,149,149,129,227, 56,248,248,248, 32, 63, 63, 31,123,247,238, 85,105, 52,154, 62,181,141, 32, + 20, 10,133, 19,162,162,162, 68, 79,166,161,226,173,174,194,180,203,100, 50,228,228,228,160,123,247,238,210,211,167, 79, 79,248, + 95, 55, 88, 21,198,165, 89, 48, 36,131, 6,143,150,180,108,211,183,252,234,245,195,233, 54,132, 75,239, 31,221,100, 7,240,112, +154,134,171, 55,237,209,178, 77, 95,193,160, 92, 99,123,101,233,111, 45,195,154, 18, 83,109,203,234, 0,128,171, 35, 63,164, 79, +116,195, 92, 7, 7, 34, 90,180, 96,241,159,191,111, 88,221,238,210,214,127, 77,211,176,104,193,195,105, 26,250, 68, 55,228,226, + 19,238, 13, 1,176,193, 90,211, 50,112, 96,159,155,127,172,221,134,236,212, 63,189,151,127,110, 35,133,190, 20, 16,135, 32,170, +131, 3,174,253,156,133,236,236,236, 60,158,231,107,109,198,165,132,250,199,197,199, 54,141, 12, 15,243, 28, 55, 97,178,195,192, +129, 67,112,224,192, 62,108, 92,191,230,236,136,209,195,127,207, 46, 85, 11,221,197, 10,137,130,242, 82,161,196, 81, 36, 87, 40, + 10, 76, 57, 57, 15, 31,158, 34,177, 3, 48,146, 7,106,142, 12, 79,157, 60,214,177, 71,244, 16,252,117,112, 31, 54,174,255,237, +204,103,225, 47,175,105,212,170, 25,105,223,250,219,105,141, 26, 55, 10,208,150,229,171, 5, 68,106,210,235,121,251,111,215,167, + 45, 75,158, 59, 33,249,102,236,200,239,216, 40,194,199,184,179,177,127,255,118,239, 38, 37, 73,220, 58,119,182,201, 57,117, 74, + 97,141,193, 18,137, 68,128, 64,192, 89,163, 73,142, 29, 19, 0,168,117,112,149, 68, 34, 65,121,121, 57, 56, 66, 76,214,104,186, +223,186,149,153,150,150, 22,236,228,228,244,152,185, 42, 41, 41,169,252,172,215,235, 97, 52, 26, 97, 35,151,199, 89,163,153,127, +246,172,126,238,196,137,243,222,126,235,173, 31,182,110,219, 38,119,116,116,132, 74,165,122,204, 96, 25,141, 70,180,107,223, 94, +178, 54, 33, 97, 28,128,249,214,156, 79,143,238,221,235,236,239,251,200,176,178, 38,194,250,212,103,117, 53,213, 88, 59,138,176, +186,138,145, 16, 18,253,196,239,115,251,245,235,167, 79, 73, 73,129,191,191,127,165, 73,169,122, 76, 7, 7, 7, 56, 57, 57, 33, + 33, 33, 1,107,214,172,209, 17, 66,230,214,166, 89, 82, 82,162,209,235,245,163, 70,143, 30,173,147, 72, 36, 8, 13, 13,173,156, +255,138,231,121, 72,165, 82,216,218,218, 34, 54, 54, 22, 19, 38, 76, 40,215,235,245,163,158,156, 3,235, 73,205,180,180, 52,149, + 86,171,125,245,213, 87, 95, 45,191,119,239, 30,162,162,162,112,251,246,109,148,149,149,161,172,172, 12,169,169,169, 8, 11, 11, +131,209,104,196,206,157, 59,117, 90,173,246,213,180,180, 52, 85,109,154, 26,141,102,208,146, 37, 75,132, 7, 15, 30,108,228,235, +235, 27,222,182,109,219,144,158, 61,123, 6, 13, 27, 54, 44,160,127,255,254, 94,193,193,193,250, 62,125,250,184,245,235,215,207, + 77, 40, 20,138,147,146,146,114, 41,165,253,106,211,172,106, 74,238,221,187, 87,217, 36, 40, 18,137, 80, 84, 84, 84, 57,211,126, +197,195,168, 58, 3, 92,147,102, 85,147, 93, 97,172, 42,140, 86, 93,207,254,234, 52, 9, 33,117, 86, 24, 82,169,180, 34,194, 73, +235,210,164,148,222,186,123,247,110,175,174, 93,187,222,154, 52,105,146, 38, 47, 47, 15,246,246,246, 8, 12, 12, 68,211,166, 77, +225,234,234, 10,147,201,132, 61,123,246,104,247,238,221, 27,163, 82,169,186, 63, 57, 7,214,147,154, 2,129, 32,181,186,135,107, + 69,244,170,194, 96,201,229,114,248,248,248, 84,156,219,212,250,156,207,167,140, 44,253,189,154,143,140, 75,207, 30,125, 26,247, + 31, 48,212,113,239,254,125,138, 31, 87,174,187,219,101,200,244, 85,174, 1,179,118,187, 6,204,218,221,101,200,244, 85, 63,174, + 92,119,119,239,254,125,138,254, 3,134, 58,246,236,209,167,113,124, 92, 66,200, 99,235, 18, 86,147, 78,133, 84,214,190, 75,167, + 96,229,217, 11,103,185,197,203,214, 91, 58,189,212,255,202, 15, 63,172,218,254,195, 15,171,182,119,122,169,255,149,197,203,214, + 91,206, 94, 56,203,117,233, 20,172, 84, 72,101,237,173,201,251,212,201, 99, 29, 7,244, 31,130, 3, 7,246,112, 91, 54,174,248, +102,223, 17, 99,215,151, 39,235,243,211, 83,111, 80,148,175,131,155, 67, 12, 50, 50, 50, 84, 28,199,117,175,174,131,123,117,154, + 83,222, 28, 91,213, 92,157,115,241,140, 90,125,247, 46, 44,199,142,253,105, 62,113,226,166,238,220,173, 2,213,245,248,162,146, + 98,181, 62, 69,171, 81, 27,121,158, 7,229, 45,194,133, 11, 65,106,187, 70,157, 58,117,195,201,227,155,177,126,221,175, 42,158, +135,254,229, 29, 59, 44, 35, 71, 46,160, 1, 13, 27, 6,108,218,186,153, 12, 28, 60,212,145, 2,252,160,225, 67,156,182,108,219, + 66, 26, 55,105,220, 48, 48,240,225,212, 52,255,147,101,233,111,208,156, 79,105,169, 58, 61,253,204,141,159,126, 50,120,140, 26, +213, 64,234,225,225, 0,158, 39, 21,207,247,154, 54,145, 72,244, 88,196,165, 54, 77,143, 6, 13,178,143, 28, 57,130,144,144, 16, +248,248,248, 60,214,229,165, 98, 34,109, 87, 87, 87, 28, 59,118, 12, 20,184,110,141,102,152,183,247,141,159,127,250,201,200,243, + 60, 74, 75, 75,255, 45,122, 85, 90, 90, 10,158,231,113,246,204, 25,163,170,172,108,189,181,121,111,111, 52,150, 13,109,211,230, +235,241,227,199,155, 82, 83, 83,193,243, 60,170, 70,178, 10, 10, 10,160, 80, 40, 80,174,211,249,121,120,120, 40,172,209, 44, 56, +124,216, 22,117, 60,215, 5, 2,193, 99, 77,132,127,199,117,255, 71, 69,176, 56,142,131,159,159,223, 99,243,140, 8, 4,130,199, +182,250,140, 32,204,206,206,222,224,225,225,113,100,220,184,113,243, 90,182,108, 57,117,198,140, 25,194,198,141, 27, 67,165, 82, +193,217,217, 25,238,238,238, 72, 77, 77,197,153, 51,103, 44, 74,165,114,149,197, 98,249, 60, 63, 63,191,208, 10,221, 83, 62, 62, + 62, 3,123,247,238,189,237,237,183,223,118,236,218,181,171,216,219,219, 27, 0, 16, 23, 23,135, 67,135, 14,153,182,108,217,162, +214,235,245,163,172,153,197, 29, 0,114,115,115,143,122,121,121,141,152, 48, 97,194,166, 97,195,134,217,235,245,122,113,106,106, + 42,140, 70, 35, 56,142, 67, 73, 73,137,233,204,153, 51,101,229,229,229, 99,115,115,115,143, 90,161,119,131, 16, 18,102, 50,153, + 38,220,188,121,243,203, 17, 35, 70,184,188,244,210, 75, 18,142,227,112,254,252,249,194, 86,173, 90,185,171,213,106,211,133, 11, + 23,138,245,122,253,220,156,156, 28,171,150,202, 33,132, 64,173, 86,195,213,213, 21, 6,131, 1, 60,207,195,104, 52,194,206,206, +174,114,121, 35, 74,233, 83,247,145,227, 56, 78,104, 50,153, 48,122,244,104,240, 60,143, 21, 43, 86,128,227,184,122,139,217,217, +217, 93,143,139,139, 27, 24, 30, 30, 94,105, 90, 42,202,144, 76, 38,131,171,171, 43, 92, 92, 92,112,252,248,113, 8,133,194,235, + 86, 70,215,110, 3,104, 69, 8,121, 41, 38, 38,102, 60,128,150, 38,147,201,199, 98,177, 16,129, 64,144, 75, 41,189,163, 86,171, +127,183,118,169,156,130,130,130, 47, 95,123,237,181, 86,155, 55,111,182, 19,137,254,117,107,136, 68, 34,200,100, 50,184,187,187, +195,209,209, 17,148, 82, 24,141, 70,124,250,233,167,106,173, 86,251,229,139,242, 48,104,211,182, 61,126,251,229,123,187, 19, 39, +143, 20,222,189,143,125, 85,167, 98,176, 3,112,225,242,148,125,202,210,223, 90,230,100,102,218,181,105,219,222, 42, 77,163,133, + 43, 30, 53,118,149,223,163,165,114,190, 76, 77, 73, 95,190,121,221, 27,201, 0,240,221,178, 53,129, 25, 5,166, 25,241, 9,247, +134,172, 92,117,186,189,209,194, 21, 91,163,249, 47,211,178, 73, 5, 10,125,118,118,246, 21, 95, 95,223, 70, 81, 67, 76,115, 67, +130,200,224,252, 34, 62,155, 16,242, 78,118,118,118,178,181,121,239,220,169, 43, 78, 30,221,130,141,235, 55,169, 41, 47,212,187, +186,186, 82, 0,184,123,215,149,222,189,171,164, 64,197,124,141, 78, 90, 55, 69,225,231,115,231, 76,157,169,209,104,150,255,252, +109,237, 19,206, 54,111,209, 1,205, 91,116,192,244,119, 62,113, 12, 11, 15,245, 7,128, 29, 59,168, 37, 34,152,252, 57,239,179, + 5,131, 63,255,124, 1,212, 26, 3, 62,255,252,225,178, 58,137,177,241,127, 37, 37, 81, 35,171,154, 30,103, 30,199, 93,193,204, +153,193,229, 37, 37,110,157, 63,250,200, 85,244,237,183,130,234, 58,185, 87, 68,176,170,222,191,214,104, 30, 62,113,226,175, 15, +102,206,204, 94,250,237,183,125, 22, 47, 89, 98,211,172, 89, 51,228,229,229, 33, 52, 52, 20, 62, 62, 62,184,112,225, 2,142, 28, + 60,168, 45,211,233,230,122,122,122,174,180, 70,243,199, 45, 91, 18,187,244,232, 81,180, 97,195, 6,239, 30, 61,122, 16,173, 86, + 11,149, 74, 5,149, 74, 5,131,193, 0,137, 68,130,236,236,108,154,145,153,121, 55, 43, 43,107,149,181,121,183, 20, 22,202,103, +101,100,100,137,214,173, 91, 50,101,242,228,217, 51,103,205,146,249,250,250, 18,131,193, 80, 25,197, 50,153, 76, 80, 40, 20, 38, +141, 70,227, 2,160,220, 26, 77,217,159,127,114,197,197,197,112,113,113,169,156,118,169,234,188,130, 90,173, 22,148,178, 73,112, +235,245,162, 80, 83, 29, 30, 26, 26,122, 93, 36, 18,249, 86,141,102,213,244,179, 74,101,156, 21, 27, 27,219,166,170,195,165,148, + 86,219,223,201,215,215, 55,144,231,249,175, 94,122,233,165, 17,111,190,249, 38, 57,115,230, 12, 78,158, 60, 73,179,178,178,118, + 10, 4,130,185, 89, 89, 89,201, 53,189,217,212,164,217,160, 65, 3,123,123,123,251,247,109,109,109,163, 43,166, 98,144,203,229, + 49, 90,173,246,184, 70,163, 89, 81,211,236,237,181,105, 54,110,220,216,129,231,249,247,108,109,109,123, 21, 21, 21,181, 4, 0, + 87, 87,215, 91, 90,173,246,152, 64, 32,248,190,166, 5,164,107,211,244,246,246,182,177,179,179,251,178, 65,131, 6,175,190,249, +230,155, 46,103,206,156,201,189,117,235,150, 68,173, 86,111,230, 56,174,198,197,158,171,211, 12, 11, 11,123,108, 45,194,231,121, +141, 0,160, 69,139, 22, 7, 6, 13, 26, 52, 96,236,216,177, 48,155,205, 88,185,114, 37,142, 29, 59,246,215,253,251,247, 7,214, +246,246,249,164,166,167,167,167,171,143,143,207,233,113,227,198, 5, 12, 29, 58, 84,225,224,224, 0,161, 80, 8,173, 86,139,148, +148, 20,220,185,115,135, 30, 59,118,172, 44, 46, 46, 46, 75,167,211,117,203,203,203, 43,178,246,124, 62,203, 91,242,147,154, 98, +177,184,171,159,159,223,214,249,243,231,219,247,234,213,203,198,197,197, 5, 66,161, 16,102,179, 25,185,185,185,136,141,141,197, +145, 35, 71,180, 59,119,238,212, 22, 23, 23,143,166,148,158,249, 79,164,243,121,106,134, 53, 37,159, 61,177,128,115,141,179,179, +215,182,175, 53,233, 28, 16,237,220,127,196,136,182,209, 0,176,107,215,181,227,127, 29, 47, 61,248,180,233,172, 43,173,214,104, + 54, 11, 22,206,143,139,143,125,108, 34,202,240,176,136,123,205, 34,135,127, 97,141, 86,197, 76,238, 79,230,189,202,236,248, 85, +222, 8, 30,111, 78,173, 88, 16,250,147,185,115,240,213,151, 95, 99,223,142, 61,127,197, 39,209, 3,255,203,101,233,239,212,172, + 88,156, 88,225,229,213,101,139,171,235,156,163,199,143,219, 85,125, 81,171,136, 52, 87,125,153,108,217,178,101,193,173, 91,183, + 60,172,209, 28,248,227,143, 38,189,189,189,108,241,170, 85, 93,203,141,198,174,179,102,205, 18,221,184,113, 3, 91, 54,109,226, +116,153,153,155,242, 44,150,247,170,107,253,168, 77, 51,232,131, 15,228, 95,109,222, 60,177, 97,227,198,238, 67,134, 12, 17, 11, +133, 66,104, 52, 26,228,228,228,224,226,133, 11,198,148,212,212,248,242,242,242,193, 89, 89, 89, 57,214,106, 14,252,241, 71,147, + 83, 96, 32, 20,110,110,244,194,165, 75,142, 31,206,159, 63,213,211,203,203,177,115, 84,148, 88,161, 80,160,180,180, 20, 25, 25, + 25, 56,119,238, 92, 65,114,114,178, 55,165,212, 98,141,230,254,152,152,230, 39,175, 92,121,249,195, 15, 63,148,134,132,132,192, +222,222, 30, 26,141, 6,241,241,241,184,120,241,162, 97,235,214,173, 42,173, 86, 59, 53, 51, 51,115,255,223,117,221,255, 49, 6, +235,255,235,198,243,244,244,108, 35, 16, 8, 62,123,212, 28,181,168,174, 53,253, 94,164,135,142,151,151,151,191,179,179,243,111, + 58,157,142, 26, 12,134, 41,185,185,185, 25,255,109,233, 36,132,136,218,180,105,243, 75, 65, 65,193, 75,148, 82, 56, 58, 58, 94, +140,139,139,123,139, 82,202,213, 87,147, 16, 34,244,244,244,124,201,214,214,182,189,173,173,109, 87,147,201,212,236, 81, 63,188, +187,229,229,229,103,204,102,243,149,188,188,188,139,148, 82,203,127, 50,239,132, 16, 33,128, 94,222,222,222,111,240, 60,223,132, + 16,226,100,177, 88, 96, 54,155,149, 60,207, 63, 80,169, 84,107, 0, 28,251, 79,167,243,121,105,134, 55, 33,195,168, 0,205,106, + 50, 2,143, 25,154, 39,140, 3,225,113, 55,238, 1,221, 99,109, 58, 9, 33,130,161,253,220,150, 2, 15, 71, 26,214,181,228,208, + 99, 6,203, 10,211, 82,111,115,217, 68,244, 26, 37,212,255,241,135, 34,201, 8,109, 62,108,227,179, 24, 44,107, 9, 15, 33, 93, + 65,241, 18, 79,113,229,238,125,122,242, 69,125,214, 61, 79,205,175, 9,105,176,163,105,211,139, 2,145,200,147, 16, 34, 0, 0, + 34, 16,240, 60, 96,129, 64,192, 85,109, 22,172,250, 66, 89,151,166, 9,136, 20,203,100,126, 22,142,243, 40,145, 72,236, 46,216, +218,182, 54, 0,101,158, 22,203,103,199,139,139, 19,159, 38,157, 38, 32, 82, 40,147,249, 95,176,183, 31,162,116,118,110, 94,106, + 50,185, 1,160, 54, 54, 54,119,203,202,203,215,167,165,165,253, 92,205,162,234,117,106, 74,100, 50, 95,203,163,145,135, 2,145, +168,224,136, 76,230, 87,232,230, 54,190, 92,167, 11,144,203,229,102, 74,169,218,100, 50,141,205,200,200, 56, 81,159,188,103, 8, +133, 97,119,236,237,163, 44, 14, 14, 46,102, 66,108,141, 22,139,201,100, 54,103, 26, 12,134, 24,161, 80,184, 44, 43, 43, 43,233, +239,188,238, 47, 28, 21,163,205,254,142, 13, 64, 52,211,100,154, 76,147,105, 50, 77,166,201, 52,255,126, 77,119,119,119,133,167, +167,167, 63, 0,225,255, 98,222, 95,180, 77,196, 44, 38,131,193, 96, 48, 24,255,251,228,231,231,151,163,154, 62, 87,140,255, 80, + 19, 33,128,232, 26, 34, 91, 86,135,254,158,102, 52,129, 21, 77, 9, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,193, 52,235, +210,126, 97,154, 30, 89, 19, 33,211,100,154, 76,147,105, 50, 77,166,201, 52, 89, 19,225,243,221, 4, 96,212,228,172, 61, 8, 33, + 30,207,123, 95,198,139, 93, 22,170,249,174, 15, 33,196,167,158,251,123,177,179,206, 96, 48, 24,255,219,252,191,247,193,170,168, +168, 40,165,249,207, 99,191,231,253,221, 71,223,255,154, 16,124,248,232,243, 55,148,210, 57,207, 99,223,186,240,246,246,246,107, +208,160,193,107,174,174,174,157,138,139,139,207,230,230,230,174, 45, 42, 42,202,173,199,247,131,229,114,249, 91, 2,129, 32, 2, + 0,120,158,143,213,235,245,191,228,228,228,220,127, 14,215,141, 0,152, 44,147,201, 94,113,118,118,110, 82, 82, 82,242,192,104, + 52,238, 0,240,235,211,204, 58,237,229,229,213,218, 98,177,188,139,135, 35, 89,127, 45, 44, 44,188, 96,237,119, 61, 34,134,110, +167, 64, 48, 0, 1, 79,248,151, 5, 84,176, 19, 0, 79,128,251,249,177,123, 95,121,206,229,245,169,175,111,125,191, 75, 8, 89, + 70,128,247, 65, 64,159,181, 44, 49, 24, 12, 6,227,127,200, 96,249,248,248, 76, 0, 48, 27, 15,103,218,254, 46, 59, 59,123,253, +223, 81, 89, 61,199, 74,109, 5,165,116, 86,253,163, 21,248,144,231,169, 0, 0, 4, 2,242,145,135,135, 71,132, 72, 36, 50, 60, +185, 47,199,113, 50, 66,208,151,231, 41,121,180,239,135,132,144,239,159,198,216,185,184,184,120,143, 25, 51,102,211,231,159,127, +110,163, 80, 40,144,145,145, 49,116,206,156, 57,209,222,222,222,227,115,114,114, 50,235,250,126,227,198,141,199, 68, 54,111, 57, +115,206, 39,159,217,185,185,187,219,114,156,197,148,153,157,165,248,246,235, 69,237, 27, 55,110,252,125, 74, 74,202,150,250, 24, + 41,145, 72,244,138, 92, 46, 15,210,235,245, 73, 28,199,237, 20, 10,133,125,190,252,242,203,136,254,253,251,203,213,106,181,148, +227,184, 38, 27, 55,110,156,249,199, 31,127,244, 35,132, 12,169,109,184,125, 69, 4,135, 82,154, 93,229,220,189,117,227,198,141, + 30, 98,177,152, 60, 90,180,249, 66,109,251, 87,133, 2,193,113,231,119, 68, 2, 64,120,231,145,247,226,206,239,192,163,207,207, +253,101,224,201,178,224,236,236,188,185,180,180, 52,190, 46, 35, 95,221,119, 9, 33, 63, 80, 74,243,188,189,189, 59, 1,120,235, +209,174,191,228,228,228, 92, 32,132,120,202,101,178,247,117,122, 61, 1, 64,158,165, 44, 49, 24, 12, 6,227,127, 47,130, 53,231, +222,189,123,246,148, 82,132,132,132,124, 12,192,106,131,245,100,133, 35, 20, 10, 62,238,213,171,215, 68,153, 76,246, 88,197,108, + 48, 24, 4, 2, 1,113,183, 88, 30,254,185, 62, 21, 77,197, 49,140, 70,131, 64, 44,150, 66, 40, 20,204,108,217,178,101,191,252, +252,252, 67, 50,153,236,155,212,212,212,130,167,137,220,172, 95,191,190,149,139,139,203,191, 25,136,226,226, 98, 65,191,126,125, + 73,125,244, 38, 18, 34, 51,200,100,237, 37,132,120, 89, 56,206, 9, 0, 68, 34, 81,105, 19, 15,143,174,159,206,153, 99,243, 72, + 23,101,101,101,120,237,181,215, 20, 15, 30, 60, 24, 11,224,171, 58, 34, 87, 77, 91,180,106, 51, 99,203,230, 77,205,212, 37,165, +250,213,203,127,189,161, 19, 73,202, 27,133,133, 74, 22,125,189,204,249,211,143,102,190,227,237,237,125,171,186,101, 67,158,200, +171, 0,192,158,247,223,127, 63,124,224,192,129, 82,141, 70, 35,215,233,116, 13, 55,109,218,244,105,155, 54,109,236, 90,182,108, + 41,221,186,117, 43, 81,169, 84,160,148, 42, 66, 67, 67,233, 43,175,188,162,223,182,109,219,116, 0, 63,212,199, 44,243, 60, 47, +172,174, 28, 90, 99,174, 9,112, 63,188,243, 72,128,160, 73,220,249, 29,242,240,168,145,122, 80, 60, 32,192,253, 71, 47, 2,159, + 3, 85,230,117,122,156,187,217,217,217, 79,181,118,224,128, 1, 3, 9,165,116,143,183,183,247,137,162,162, 34,123, 66, 48,186, + 30,209, 41,226,230,230,246, 14,128, 79, 40,165,239,159, 58,117,170, 35, 0,116,239,222, 93, 2,224,130,163,163, 99, 79,163,193, + 64,216, 35,137,193, 96, 48,254,129, 6,139, 82, 42, 3,128,115,231,206,129, 82, 42,127,154,160, 64,213, 95,102,205,154, 5, 23, + 23,151, 39, 77, 11, 78,158, 60, 81,227,119,234,123,140,175,191,254,218,169,160,160, 96,244,239,191,255, 62,212,211,211,243,237, +188,188,188,195,117,228, 49,159, 16,242,205,163,136, 3,145,203,109, 74, 39, 77,154,116,241,209,255,154,253,249,231,159,246,131, + 6, 13,210, 16, 66,238, 2,128, 92,110,211, 85, 40, 20, 56, 83, 74, 41,165,248,166, 54, 35, 56,146,144, 64,169, 84,218, 99,202, +143, 63,114,173, 7, 13, 18,217,186,185, 17, 0, 72, 79, 72,112,253,225,167,159,186, 40, 51, 51,101, 34,123,251,178,252,210, 82, +227,189,123,247, 32,151,203,137, 64, 32,232, 84, 87,134, 21, 10,197,187,179,102,127,108,171, 46, 81,234,244,106,141, 81,200,153, + 13,246, 54, 10, 75,126, 94, 65,177,157,141,109,249,228,183,223,149,206,255,100,246,187, 85,162, 38, 53, 49,125,230,204,153,205, +218,181,107,231,179,125,251,118,162, 82,169, 32, 18,137,236, 90,182,108,137, 54,109,218, 88, 78,158, 60, 73, 26, 53,106,132,136, +136, 8,156, 63,127, 30, 23, 47, 94, 36,173, 90,181, 82,236,222,189,123, 92,117, 6,171, 58, 83, 61,102,204,152,137, 82,169,148, +239,218,181, 43,222,120,227, 13, 80, 74,209,170, 85,171, 78,227,198,141,203,213,233,116, 86,153,235,138,102, 64,247,136,161,119, + 0, 68,130,226, 65, 65,236,222,230, 85,118,105,150,152,152,216,161,180,180,180,178,179, 97,197,194,226, 93,186,116,169, 79,121, +207, 39,132,124, 51,104,208,192,143, 1,130,232,232,232,178,233,211,167,211,196,196,196,222, 67,135, 14,105,116,255,254,131, 26, +211,249,100, 57,154, 58,117,154, 86, 44, 22,191,230,237,237, 29, 79, 8, 17,139,197,226,138,115, 36,106,216,176,161, 71,100,100, +228, 28, 47, 47,175,114,161, 64,160,160,168,187, 44, 49, 24, 12, 6,227, 5, 50, 88,132,144,156,219,183,111, 55, 44, 47, 47, 7, + 33, 36,199,138, 10,234,120,213, 10, 71, 36, 18,253, 38, 20, 10,166, 0, 64,219,182,237,180, 75,150, 44,169,174, 89,137,111,219, +182,157, 86, 40, 20,216, 62,172,188,132,191,114, 28,151, 95,157,102, 13, 21,226,183, 82,169,236, 3, 0,196,215,215,175,108,223, +190,125,252,136, 17, 35,240,237,183,223,202, 62,254,248,227,159, 27, 54,108,216, 61, 45, 45, 45,189,166,116, 62,250,125,142,135, +135, 71,196,250,245,235, 91, 77,154, 52,233, 98,118,118,246,240, 71,145,145,221, 0, 58, 16, 66,238, 86,253,219,238,221,187, 95, +154, 48, 97,194,205,252,252,252, 57, 53,105,142, 32, 36, 40, 32, 52,180,199,231,103,207, 82,129,193, 64,138,206,157, 83,151, 20, + 22,154,146,138,138,108, 55,199,196,140,254,112,225, 66,137,167,143, 15, 46, 28, 61,106,159,167, 84,106,148,229,229,198,212,212, + 84,222, 98,177,156,176, 34,239,225,110,174,174,138, 95,151,173,188,102, 47, 22,242,238,190, 62, 68,220,160,129, 72,160,112,144, + 10, 69, 2, 67,163,134,129, 82, 0,225,117, 93, 35,137, 68, 50,174,119,239,222,138,109,219,182,145,136,136, 8, 56, 57, 57,225, +220,185,115,184,117,235, 22, 74, 75, 75, 5,102,179, 25,109,219,182,197,146, 37, 75,224,239,239, 15,165, 82,137,140,140, 12, 87, +169, 84,234, 86,203,249, 36, 85,202, 15, 62,250,232, 35,184,185,185,193,108, 54,163,164,164, 4, 22,139, 5,182,182,182, 0,128, +188,188, 60,236,219,183,183,206,178,100,165, 57, 66,199,142, 29, 43,141,112,213, 8, 86,125, 52,125,124,124,206, 21, 22, 22,141, +236,209,163, 7, 74, 74, 74,184, 5, 11, 22,160, 69,139, 22,104,218,180,169, 53,101,126,142, 76, 38,251, 35, 32, 32, 96,221,212, +169, 83, 27, 58, 59, 59,195, 96, 48, 44, 45, 46, 46,198,135, 31,126, 8, 0,104,215,174, 93, 91, 74,233,173, 73,147, 38,161, 97, +195,134,154,188,188,188,162, 59,119,238, 12, 85, 42,149,119,158, 54,239, 86,158, 31,166,201, 52,153, 38,211,252,175,210,252, 71, + 27, 44, 0,249, 62, 62, 62, 13,109,108,108, 0,160,222,111,215, 28,199, 77,117,119,119, 23,124,250,233,167,131, 26, 55,110,204, + 79,159, 62,253, 66,106,106,234, 99, 29,103, 26, 53,106,180,227,167,159,126,234,148,146,146, 82,254,197, 23, 95,252, 89, 80, 80, + 48,173,158, 23,253, 35, 66,200,114, 0,200,204,204, 44,222,187,119,111,212,217,179,103,191, 94,190,124,185,239,244,233,211,101, +211,167, 79,255, 8, 64,157,154, 34,145,200, 80, 93,179, 96,117,184,184,184,240,213,245,209,170, 96, 16, 33, 54, 14, 82,105,247, +207,207,158,165,198,180,180,242,109, 63,255,108,179,234,218,181,121,102, 74,189, 60, 60, 60,132, 93, 59,119, 54,216, 75,165,154, +252,156, 28,222,217,215,151,164, 36, 37,217,153,133, 66,211,225,195,135,203, 10, 11, 11, 55, 89,145, 4, 53, 79,169,209,206,215, +223,252,242,208, 94, 17,215,174,220, 74,176,119,119, 21,180,106, 25,209, 60,225, 94,218, 13,240, 22, 19, 0,117, 93, 34,142,142, +142, 77,139,139,139,161, 86,171,225,230,230,134, 21, 43, 86,192,211,211, 19,229,229,229,136,139,139,163,190,190,190,228,236,217, +179,240,245,245, 69, 97, 97, 33,140, 70, 35, 52, 26, 77,129,193, 96,208,213,100,120, 69, 34,209, 31, 2, 1,153, 68, 8, 65, 72, + 72,168,118,249,242,229, 60,165, 20,205,154, 53,195,240,225,195,177,107,215, 46,196,197,197, 85, 68,154,248,160,160, 38, 90,129, +128,216, 2,224,159, 37,138,195,243, 60,170, 26,225,250,226,237,237,109, 3,224,195,224,224,224, 81,175,190,250, 42, 39,145, 72, +160,213,106,161,211,233, 16, 27, 27,203, 13, 24, 48,176,108,208,160,129,118,127,253,245, 87,173,233, 52, 24, 12, 73, 1, 1, 1, + 35,102,204,152,113,244,215, 95,127,117,153, 59,119, 46,120,158,175,220, 56,142,171, 92,148,123,239,222,189,120,240,224,193,156, +170,230,138,193, 96, 48, 24,255, 12,131,245,204,136,197,226,207,255,250,235,175,222, 95,125,245,149,184,103,207,158,157,188,189, +189, 95,202,201,201,185,248,168, 82,123,169,127,255,254,157,220,221,221,241,253,247,223, 27,197, 98,241,231, 79,233,172,171, 86, +118,167, 60, 61, 61,167,239,222,189,123,255,148, 41, 83,224,229,229,213,254,255, 59,207, 14, 50, 89,171, 73, 43, 86,112, 98,179, + 89,176,245,215, 95,101, 95,157, 56,177, 98,219,246,237,226,118,109,219,130, 2,136,143,139,147,125,243,227,143,178,145, 3, 7, + 22,196, 61,120,128,195,199,143, 27,149, 37, 37, 57,133,106,245,236,252,252,252, 66, 43,140,235,165,148,212, 20,239,168,174, 29, +125,206, 92,141,189,245,242,208,254, 61,196, 34, 1,121,144,150,117,221,203,211,213,241,226,249,243, 58,142,227, 46,213,165,163, +213,106, 83, 57,142,107, 64, 41,117, 59,125,250, 52,220,220,220, 80, 90, 90, 10,179,217, 12,163,209,104, 44, 47, 47,151, 23, 23, + 23, 67,175,215,195, 96, 48,192,193,193, 1, 49, 49, 49,249, 28,199,157,172, 37,109,111, 16, 66, 22, 80, 74, 17, 31, 31,159, 13, + 0,126,126,126, 97, 78, 78, 78,199, 42, 22, 80, 62,123,246,108,239,172,172,172,184, 42,145,174, 90, 59,185, 91, 27,193,122, 90, +188,188,188, 90,203,229,242,111, 62,254,248, 35,239, 22, 45, 90,160,176,176, 8, 60,207,195,206,206, 14, 58,157, 14,246,246,246, +232,212,169, 83,222,130, 5, 11, 82, 40, 69, 63, 74,105, 94,109,122,233,233,233,121,254,254,254,163,167, 76,153,242, 99,112,112, +112, 83, 74, 41,130,131,131,209,187,119,111, 28, 58,116, 8,247,238,221, 67, 89, 89, 25,119,245,234,213,213, 57, 57, 57,219,216, + 99,137,193, 96, 48,152,193,170, 55,217,217,217,217, 62, 62, 62, 27,110,222,188, 57,233,149, 87, 94,193,169, 83,167,230, 2,232, + 7, 0,114,185,124,238, 43,175,188,130,155, 55,111,226,238,221,187, 27,178,179,179,179,159,199, 49,165, 82,169,214,104, 52,226, +209, 49, 20,245,172,168,155, 61,106, 26, 4,165,180, 89, 77,127,171, 13,129, 72,228, 21,217,183,175,168,244,214, 45,245,242,243, +231, 23,109,217,186, 85,220,190, 93, 59,152,204,102,240, 22, 11,252,252,253,209, 35, 58, 90,182, 97,251,118, 91, 78,171,189,240, +217,123,239, 29, 90,249,218,107,101,151,203,202, 30, 88,147, 70,173, 86,251,195,103,159,124, 20,189,109,251, 46,159,176,208,160, + 6,135,143,158,186,233,226,226,168,104,218,164,137,173, 82,169,178, 44, 91,250,149,168,172,172,236,199,186,116,116, 58,221,158, +227,199,143, 15,245,243,243,115,139,141,141,133,209,104,132,197, 98, 65,207,158, 61, 43,250,223,241, 34,145, 8, 9, 9, 9, 48, +153, 76, 5,247,239,223,207,121,240,224,129, 12,192,226, 58,206,225,147,215,113,210,128, 1, 3, 96, 54,155,209,187,119,111,236, +221,187,247,117, 0, 51,106,217,255,169, 12, 86,213,235, 4, 43, 59,183,123,123,123,247,106,210,164,201,247, 75,150, 44, 17,248, +250,250,130,231,121, 56, 59, 59,163,188,188, 28, 69, 69,197, 8, 11, 11,131,159,159, 31, 22, 47, 94, 12, 0, 91,235, 50, 87, 21, +100,100,100,220, 5,208, 61, 40, 40, 72,170,215,235, 59, 69, 71, 71,111,236,217,179, 39,110,222,188,137,139, 23, 47,246, 32,132, +228,233,245,122,179,143,143,207, 44, 0, 78,148,210,223,172, 25, 61,202, 96, 48, 24,140,255,113,131, 21, 20, 20,100, 47, 22,139, +186, 77,155, 54,213,206, 98,225, 33, 22,139,186, 55,108,216,208, 49, 45, 45, 77,245, 20,149,223,247,155, 54,109,122,117,217,178, +101,178, 1, 3, 6, 52,247,242,242,234, 13, 0, 35, 71,142,108,238,224,224,128, 77,155, 54, 25, 40,165,223, 63,175, 76,114, 28, + 55,180, 77,155, 54, 40, 41, 41, 65, 90, 90,218,197,250,124,247,207, 63,255,180, 7,208,161,174,191,213,122,124,163,209,217,201, +199, 71,144,125,234,148,169, 68,173,246,174, 48, 87, 2,129, 0, 37, 37, 37, 72, 79, 75,131,131,189, 61,226, 19, 19,101, 43,223, +125,119, 91, 64, 68,132,216, 98, 52,186, 88,171, 95, 88, 88,168,245,244,244,156, 56,239,179, 79,247,252,248,211, 79,110, 74,181, + 58,201,198, 70, 97,144,201, 36,158,243,230,205,181,168, 84,170, 9, 69, 69, 69,101, 86, 72, 45,222,188,121,115,223,190,125,251, +222,241,247,247,119, 47, 44, 44,244, 84,169, 84,180,164,164,132,224, 97, 95, 42, 2, 0,119,238,220, 65, 90, 90, 26,103,177, 88, +206, 2,248,156, 82,106,180, 54,173,222,222,222, 46, 29, 59,118, 28,230,238,238, 94,217, 20,217,178,101,203, 97,222,222,222, 95, +230,228,228, 20, 63,207,194,125,236,216, 49,123, 74,105, 7, 74, 41,250,246,237,107,237,215,222, 26, 56,112,160,128, 16, 2,157, + 78, 7,153, 76, 6, 91, 91, 59,216,219, 59,160,105,211, 16,100,103,103,163,119,239,222,150,164,164,164, 45, 18,137,228,135,250, +166, 73,167,211,141,233,212,169,211,194,105,211,166,129,231,121, 12, 25, 50, 4,153,153,153,235, 82, 82, 82,214,248,250,250, 78, +155, 52,105,146,135,139,139, 11,102,205,154,165,168,106, 58, 25, 12, 6,131,241, 2, 26, 44,111,111,239,104,103,103,231,165, 78, + 78, 30,118, 71,142, 28, 21, 1, 64,215,174, 93,108,205,102,238,146,183,183,247,199, 57, 57, 57,127,214,231,160, 57, 57, 57,197, +222,222,222,191, 94,188,120,241,189,225,195,135,227,216,177, 99,159, 0,192,240,225,195,113,241,226, 69,164,164,164,252,250,188, + 42, 91, 31, 31,159, 9, 93,187,118,125,187, 93,187,118, 56,112,224, 0, 44, 22,203,193,250,124,191,234,136,193,234, 70, 17, 86, +252,205, 42, 49,161, 16,132, 16, 88, 44, 22, 80,158, 71, 81,113, 49, 18, 18, 19, 81, 90, 90, 10,139,197, 2, 93,121,185, 57,184, +113, 99,173,202,104,116, 32, 15,231, 26,179,154,188,188,188,244,160,160,160,140,114,189,206,221,197,185,129, 78,161,144, 65,163, + 41,147,196,220,185, 85,150,149,149,149,100,165,241, 53, 18, 66,186, 30, 58,116,104,158, 80, 40,124,197,199,199, 7, 35, 71,142, + 36, 61,123,246,132, 84, 42,133, 94,175, 71,105,105, 41,254,252,243, 79,112, 28,215, 24, 0,220,220,220, 60, 26, 54,108,184, 75, + 32, 16,228,167,164,164, 76,170,235, 24,132,144,241,131, 6, 13, 18, 27,141, 70, 44, 90,180, 8,243,231,207, 71,191,126,253,196, + 55,110,220, 24, 15, 96,217,243, 42,216, 60,207,163, 87,175, 94, 85, 59,185,223,173,235, 59,221,186,117, 19, 9,133,194,144,160, +160, 32, 20, 22, 22,162,176,176, 16,110,110,110,240,246,246,134,187,187, 59,150, 45, 91,134, 21, 43, 86, 92,165,148, 46,206,203, +203, 75,168,111,154,252,252,252,102,189,246,218,107,179, 70,141, 26, 5,141, 70,131,139, 23, 47,162, 83,167, 78, 88,178,100,137, +239,185,115,231, 22,182,105,211, 6, 18,137, 4,167, 79,159, 6,199,113,169,236,241,196, 96, 48, 24, 47,168,193,242,241,241,105, +192,243,252,151, 3, 7, 14, 28, 52,108,216, 48, 44, 89,178,184,138, 87, 16, 97,237,218,117,142,187,119,239, 94,229,231,231, 55, + 76, 40, 20,126,156,150,150,102,117,135,100, 27, 27,155,149,155, 55,111,158,216,177, 99, 71,251,232,232,232, 96, 0,144,201,100, +252,230,205,155, 53, 54, 54, 54, 43,235,155,145, 39, 39,125,244,242,242,234, 44,149, 74,167, 15, 26, 52,168,243,196,137, 19, 17, + 23, 23,135,141, 27, 55,222,246,246,246,222, 95, 79,221,187,117,141, 34,172, 43,154, 37,148, 74,139,149,121,121, 78,118,254,254, + 98, 23, 71,199,156, 83,167, 78, 5,180,111,223, 30,233, 25, 25, 80,150,150, 66,167,211, 33, 46, 46,142, 74, 68,162, 20,145,179, + 51, 73,191,116,137, 8,165,210,122, 27, 76, 91, 57, 9,254,236,195,201, 13,245,122,125,184, 74,165,226,196, 18,137,216, 70, 74, +235,213,204, 68, 41, 53,248,251,251, 15,177, 88, 44,174, 70,163,209,236,225,225, 33, 62,126,252, 56,164, 82, 41, 8, 33,136,140, +140,132, 84, 42, 53,250,250,250,106, 0,192,197,197, 69,176,120,241, 98,241,251,239,191, 31, 87,151,118,235,214,173,197, 1, 1, + 1,147, 66, 66, 66,112,241,226, 69,196,199,199, 39, 94,190,124, 57,164, 85,171, 86,240,241,241,153,212,186,117,235, 31,111,220, +184, 97,126, 30, 5,155, 82, 90,239, 78,238,103,206,156,161,222,222,222, 16, 8, 4, 16, 8, 4,224,121, 30,133,133,133,104,220, +184, 49, 86,174, 92,137, 21, 43, 86,252,146,155,155,251, 84,145,213,160,160, 32,105,139, 22, 45,222, 30, 53,106, 20,146,146,146, +240,213, 87, 95, 21,228,231,231, 31, 60,122,244,232,248,105,211,166,137, 58,117,234,132,226,226, 98,172, 93,187,214,124,243,230, +205, 31,114,115,115, 87,178,199, 19,131,193, 96,188,128, 6,203,207,207,111,162, 92, 46, 95, 56,106,212, 40, 81, 72, 72, 8,242, +243,243,161,209,148, 89, 34, 35, 35, 44, 0,161,118,118,182, 68,161, 80, 96,202,148, 41,104,222,188,121,175,143, 62,250,168,167, +183,183,247,215, 57, 57, 57, 63, 91,115,224,164,164, 36,141,183,183,247, 15, 51,103,206, 92,114,233,210, 69, 91, 0,184,117,235, +150, 54, 39, 39,231,139,156,156, 28, 77, 61, 77, 80,197,228,148,196,214,214,246,126,147, 38, 77,204, 3, 6, 12,112, 25, 54,108, + 24, 92, 93, 93,113,243,230, 77, 44, 94,188,248,166, 86,171, 29,147,150,150,102,254,255, 62,201,156,193,144,119,125,239, 94,251, +110,175,190,234,240,225,208,161, 95,189,249,230,155, 63,207, 95,176, 64, 28, 20, 24, 8,163,201,132,248,248,120,186,117,203, 22, +211,150, 37, 75,190,131,173,173,248,210,174, 93, 82,163,209,152, 94,159, 99,248,250,250,118,237,223,183,107,200,210,101, 63, 64, +175, 43,195,149,139,127,161,180,180, 16,191,254,182, 59,196,215,215,183,107, 86, 86,214, 25,171,211,203,113,129, 59,119,238, 4, + 0, 72,165, 82,124,254,249,231,240,246,246,134,131,131, 3, 52, 26, 13, 38, 79,158, 44,125,255,253,247, 1, 0,113,113,113,176, +179,179,179, 54,202,214,127,242,228,201, 78,102,179, 25,135, 14, 29,210, 75, 36,146, 87,143, 30, 61,122,177,121,243,230,242, 46, + 93,186, 56,109,220,184,113, 0,128,189,207,203, 96, 61,197,119, 44, 62, 62, 62, 41, 71,143, 30,109, 60,114,228, 72, 72, 36, 18, +148,150,150,194,193,193, 1, 63,253,244, 19,175, 80, 40,214, 62, 67,146,164, 10,133, 66,102,177, 88,176,125,251,118,228,231,231, + 15,172,232,143, 56,123,246,236, 47, 66, 67, 67,131, 18, 18, 18,146,245,122,253,220,236,236,236, 7,236,209,196, 96, 48, 24, 47, +168,193,226,121,254,195, 35, 71,142,136, 44, 22, 11, 86,175, 94,141,107,215,174,209,252,252,252,239, 76, 38,211,215, 10,133,130, + 43, 41, 41,153,253,230,155,111, 78,157, 63,127,190, 32, 42, 42, 10,151, 46, 93, 18, 52,110,220,120, 58,128,159,171, 24,159,232, +218,230,202, 40, 45, 45, 61,152,151,151,251, 51,207, 63,172, 12, 5, 2, 98, 43,149,202, 14,214, 97,166, 30,211,172,102, 50,203, +166, 95,127,253,117,129,139,139, 11, 31, 23, 23,135,149, 43, 87, 90,174, 95,191,190,139,231,249, 79,139,138,138,202,173,209,124, + 30, 84,213,148,114,220,141,141,179,103, 55,107, 61,100, 8, 63,252,141, 55, 12, 2,145,232,173,175,150, 47,255,164, 84,169,244, + 6, 33,212,213,217, 57,125,205,151, 95, 46,122,169,123,119,125,220,153, 51,242, 91,199,142,137,221,204,230,219,245, 73,103, 86, + 86,214,153,224, 32,127,172, 91,189, 12, 38,147, 1,185,217, 15,253, 89, 81,177, 10,181,153,171,234, 52, 5, 2,129,242,181,215, + 94, 83, 24,141, 70, 50,122,244,104,113, 65, 65, 1,130,130,130, 0, 0,106,181, 26,127,253,245, 23, 66, 67, 67, 1, 0, 49, 49, + 49,149,159,235, 74,167,141,141,205,164, 78,157, 58, 33, 61, 61, 29,241,241,241, 59,115,114,114,242,189,189,189,119,166,167,167, +143,111,219,182, 45,118,237,218,245,122, 77, 6,171,190,215,200, 26,131, 85, 67,222,223,216,189,123,247, 7,151, 46, 93,234, 59, +107,214, 44,210,189,123,119, 0, 64, 89, 89, 25,159,155,155,171,121, 26,205,170,105,226, 56, 14, 0, 32,151,203, 53, 0,240,200, + 76,141,124, 90,205,231, 81, 62,153, 38,211,100,154, 76,243,191, 65,243, 31, 99,176, 0,152, 44, 22, 11,206,156, 57,131,221,187, +119,115,122,189,126,120, 94, 94,222,245, 42,255,255,194,215,215,119,255,136, 17, 35, 14, 38, 38, 38,138,226,227,227, 1,128,171, +207,193, 13, 6,131,145, 16, 80,252,107, 50, 74,106, 48, 24,140, 79,115,173,171,254,242,251,239,191, 35, 55, 55,215,144,158,158, +190,149, 82,186, 42, 55, 55, 55,235, 25, 34, 33,207, 60,138,112, 45,165,134, 87, 9, 57, 62,191,115,231, 94,243,142, 29,147,189, + 50, 99,134,105,248,168, 81,179, 45, 70,163, 89, 40,145,240, 82, 91, 91,129, 69, 38, 19,199,157, 57, 35,255,126,218,180, 6, 58, +131,225,240,198,122,116, 28,175, 18,193,194,107,111,204,128,174, 74, 4,235,210,181,123,168,111, 4, 75, 36, 18,249,155,205,102, + 25,199,113,217, 60,207, 99,252,248,241,224,121, 30, 58,157, 14, 26,141, 6, 37, 37, 37,250,119,222,121, 71, 0, 0, 10,133, 2, +189,123,247,150, 90,163, 27, 24, 24,216, 72, 44, 22,227,240,225,195, 16,139,197,235, 1, 64, 44, 22,175, 63,118,236,216,248, 49, + 99,198,192,223,223, 63,140, 16, 66,234, 90, 60,186,114,177,103,130, 38,143,174,126, 19,247,136,161,119,170, 44,246,124,183, 85, +171, 86,128, 21,253,174,158, 36, 51, 51, 51, 23,192, 12, 95, 95,223,181, 31,124,240,193,135,237,219,183,111,179, 96,193, 2, 16, + 66,132,207,122,179,241, 60, 15,179,217,252, 76, 83, 72, 48, 24, 12, 6,227,127,223, 96, 45,235,222,189,251, 76, 74,169,136, 16, +242,237, 19,230,170, 34,106, 18,231,227,227,243, 89,227,198,141, 43, 23,128,174,167,121,201, 39,132, 44, 17, 8,200,135, 15,127, +175,255,196,146, 85, 52, 62,122,104, 14,196,219,174, 95,191,254, 73,122,122,122, 54,165,148,123,214, 19,244, 60, 70, 17, 2,192, +102, 74, 83, 71, 19,114,100, 86, 68, 68,116,223,105,211,208,188,111, 95, 7,239,128, 0,139,206,100,226, 99,206,159, 39, 23,119, +238,148,220, 58,118, 76,172, 51, 24, 14,239,166, 52,163,190,233,204,202,202, 58, 19, 20,232,123,244,229,225,253,123, 7, 54,242, + 6, 0, 36,167,230,160,168, 68,117,180, 62,230, 10, 0,210,210,210, 12, 0, 12, 94, 94, 94,195,183,111,223,190,243,145,233,169, + 92,118, 6,128, 65, 36, 18, 5, 3,128, 70,163, 9,216,179,103,207,102,145, 72, 84,167,137,189,123,247,238,154,249,243,231, 79, + 73, 78, 78,222,154,149,149,149, 8, 0,233,233,233,137, 62, 62, 62,223,228,230,230, 78,205,204,204, 92, 73,173,112, 31, 79, 44, +246,140,184,243, 59,228, 0, 34, 43, 22,123,126,218,181, 6,159, 56,159,177, 0,198,250,248,248,116,239,211,167,207,116, 0,121, +207,162,103, 48, 24,204, 6,131,193,204,243,188,216,100, 50, 81,131,193, 96,102,143, 31, 6,131,193,248, 7, 26,172,236,236,236, +245,176, 98, 49,103,107,247,171,197, 32,205, 33,132,124, 95, 97,150,158, 85,195,100, 50, 61,175,245,219,238, 14, 30, 60,184, 94, +251,215,181,195, 86, 74,211,223, 37,100,195,129, 31,127,108,121,120,213, 42, 31, 11,199,185, 16,128, 10,165,210, 98,163,209,152, +230,102, 54,223,174,111,228,170, 42, 73,201, 89,125, 0, 32, 56, 56,152, 62,120,240, 0,148,210,103, 90, 60, 56, 55, 55,247,168, +175,175,175,187, 72, 36,146, 18,242,152,148,225,145, 9, 3,128, 59,132,144, 48, 0,117, 70,120, 50, 51, 51,151, 3, 88, 94, 77, + 25, 90, 1, 96,133,181,233,170, 92,236, 25, 16,240,132,127, 57,188,243,200,157, 0,248,138,197,158,159, 39,217,217,217,167, 0, +156,122, 14,134, 77,223,176, 97,195, 85, 75,150, 44,153,122,251,246,237,223,179,178,178,244,236,241,195, 96, 48, 24,255, 64,131, +245,255,201,243, 88,212,246,121, 47,140,251, 60,162, 32,213,241,195, 67, 3,117,249,239, 60,159,247,239,223, 39,207, 75,235,145, + 17,208,215,113,238, 41,234,217, 60,252, 44, 84, 44,246, 92,133,136,255,133,155, 45, 45, 45,237,235,214,173, 91, 47,205,202,202, + 98,209, 43, 6,131,193,120,193, 17,176, 83,192, 96,252,255,241,188,166,161, 96, 48, 24, 12,198,127, 55, 4, 64,116,117,255,168, +207,232, 0, 66, 72,116,125, 15, 92,151, 62,211,100,154, 76,147,105, 50, 77,166,201, 52, 95, 60,205,186,180, 95,152,209,137, 85, + 59, 47, 63,239, 13, 64, 52,211,100,154, 76,147,105, 50, 77,166,201, 52,153,230, 63,109, 99, 77,132, 12, 6,131,193, 96, 48, 24, +207, 25, 17, 59, 5,213,211,210, 75,184,200,223,215,189, 77,101,148,143,231, 1, 0,252,163, 89, 4, 42,167, 19,224,121, 80, 74, +145, 83,160,188,113, 39,159,126,246,180,199, 11,241, 33, 13,220,229,242, 21, 60,165,157, 31,253,233,140,170,216, 48, 35, 86, 69, +149,214,106, 52,243, 36,205,228, 2,124,192, 83, 52, 7, 0, 1,193, 29, 61,143,111,239,230,209,187,207,122, 62, 8, 33, 36,220, + 13,147,165, 54,138, 81,142, 78,206, 77, 74, 75,139,238,155,244,134, 29,241,133,248,149, 62,197,196, 78, 65, 13, 72, 7,158,226, + 19, 0, 2,177, 0,223,221, 43,166,167, 88,169, 99, 48, 24,255, 79, 60,235,188,118,150,234, 30,147,207,168,201, 38,200,251, 39, + 27,172,112,119, 50, 13, 4, 11, 0, 80, 80, 44,140, 43,160,245, 90, 47, 45,220,155, 68,203,133,194, 53, 0,132,122,147,101, 22, +229,113,182,218,202, 92,128, 46,114,137,240, 59, 0,188,222, 98,153, 20,151, 99,125,123,108,132, 47,233, 43,226, 5, 27,121, 74, +197, 22,158,174, 7,197, 1, 59, 9, 46, 92,202,162,245, 26, 22,239,239,235,222,102,239,213,220,222,167, 86,190,135,246,205,131, + 64, 45, 28,192,155,161,136,250, 0, 39,150,143, 71,251,102,254,160,188, 25,224, 57,216,245, 91,138,126, 17,142, 79,125,115,132, +248,144, 6, 1,174,238,177,171, 87,175,241,244, 14, 12, 35, 60,103, 66,226,213,163, 99,223,255,112, 94,143, 8, 71, 18, 97,141, +201,106,225, 77,222, 8,106, 28,242,193,140, 5,203,132, 94,222,126,182,188,217,192,229,165,222,109,245,195, 55,243,118,181,240, + 38,223,221,206,161,107,172, 53, 82, 97,110,152, 34,146, 73, 71,218,200,109,155,148,151,107, 30, 88, 76,230, 29, 17,222,162,190, +223, 46, 93,209,178, 91,175,254,118, 22, 77,158,192,204, 35,108,251,182,173, 1, 63,254,252, 75,127, 66,200, 96, 74, 41, 95,159, + 60,243, 20, 31,222,219, 48,185,191, 88, 36, 36,205, 94, 95, 45,196, 83, 78,133, 16,230, 65,198, 16,138,168, 58,159, 92, 4,231, +226,243,233,150,167, 57, 70, 51, 15,242, 59,161,104, 10,130,157,132, 98,107, 92, 1, 45, 96,143, 14, 6,227,197,194,215,215,247, + 84, 86, 86, 86,247,231,169,233,237,237,221, 33, 39, 39,231, 50, 59,187,204, 96, 89, 81,251,226,139,184,164, 76,103, 88, 76, 8, +111, 26,184, 8, 64,189, 12,150, 92, 40, 92,127,237,126,190, 39, 56, 19, 86,127,249,214, 54,163, 25,224,204, 38, 88, 56, 51, 44, +156, 25, 28,103,130,197,108, 6, 53, 27, 48,239,143, 83,128, 81,131, 54, 17,193,235, 1,120, 89,123, 12, 49, 21,108,188,113,254, +104, 3, 98, 84, 97,203,202,175,223,201, 44, 44,123,231,248,157,156,162,112, 15, 50, 39,190, 0,107,235, 99, 4, 78,173,122, 15, +155,246,252,149,245,253,239,218, 4,158, 82, 52,112,176, 9, 25, 59, 48,206,111,195,190, 83,153, 43,214,235, 19, 0,192,209, 86, + 26, 50,225,206,125,255,103,185, 8,238,114,249,138, 95,127,249,209,211,203,197,134,112, 23, 23,131,179, 88,224, 23, 48, 64, 56, +103,250, 88,175, 47,150,175, 89, 14,224,181,218,190, 31,234, 65,194,154, 6, 53,155,181,254,175,139,254, 90,117,129,241,232,230, + 79,146, 96,128,217,211,167,153,120,209,215,203,132,115, 63,122,111,102,168, 7,185,146,144, 79,227,235, 48, 87,130,102,238,216, +247,245,226,165,205,123,244, 27,104,199,151, 21, 10,245,218,178,166,171,255, 88,179, 32,180,121, 59, 69, 84,132,175,164, 96,199, + 84,162,211,148,192, 36,144,203,122,132, 71, 59,232,198,141, 54,175, 94,183,105, 58,128, 31,234,245,250, 71,255, 85,246,120,254, +233,223, 38, 9, 69,212,173,203,167,166, 88,114,174,129, 90,204,128,197, 84,249, 19, 22, 51, 40,255,240,103,251,169,127, 0,192, + 83, 25, 44, 1, 69,239,227,231,175,121,229,231,229,182, 93,190,244,171, 57, 97,238,228, 16, 44,216,120,183, 4,103,234,107, 44, + 25, 12,198,127, 47,222,222,222, 92, 78, 78,206,115,109,217,241,241,241,233,159,157,157,125,240, 25,211,245, 1,128, 55, 30,253, +186, 38, 39, 39,231,219,103, 77, 87,219,182,109,125, 41,165,158,143,158,253,121,215,174, 93,203, 98, 37,224, 63,105,176, 0, 57, + 40, 15,236, 28, 10, 0, 54,245, 61, 24, 5,228, 32, 66,192,172,197,144,126,189,224,234,238, 9,152,203, 1, 83, 57, 96,214, 1, +102, 45, 96,214,161, 40, 55, 29, 48,105,129,228, 67,224, 40,149,213, 59, 87, 6, 21,112,111, 7,122,182,242,135,155,163, 28,239, + 13, 9,115,253,237,240,189, 53,107,142, 38, 70, 3, 24,101, 85, 90, 41, 69,251,200, 38,248,126,141, 54, 97,255,141,130, 62, 0, + 48,160,165,235,225,246, 97, 1,126, 43,214,235, 19,254,186, 83,210, 23, 0,250, 69, 56, 30,106, 23,226,229,207, 63, 67,116,151, +167, 52,202,187, 97, 19, 98,185,245, 43,120,117, 22,212,106, 29,178, 82, 55,192,217,167,181,192,194,163,107, 93,223,183, 17,226, +227,119,231, 46, 17,151,171,243,141,188,169,208,226, 38, 44, 21,138,164, 60, 65,246, 25, 67, 25,175,180,204,152, 60,158,155,245, +217,151, 31, 3, 24, 91,107, 52,200, 29,211,191,251,110, 69,100,167, 54,161,238,121,187,222, 35,101,165,249,224,132, 10,217,144, +142,157,224, 20, 28,198,231,159,254,142, 72, 3,163,225,228, 18,136,236,139,155,145,118,121, 55,233,220,106,184,108,237, 22,201, +184,154, 12, 86,176, 27,233,220,167, 75,187,109,129,254,222, 94,148,242,224,121, 10,202, 91,240,250,203,189, 49,103,123, 50, 44, + 22, 11, 70,244,233,220,115,201,148, 30,148,231,121, 80,202, 35, 51,175,184,252,228,149,132,158, 73, 37,244,138, 53,145,169, 22, + 29,186,119,190,115,227,114,168,249,222,159,104, 51,246,235, 4, 2,156,175, 82,230, 58,223, 60,178, 54, 20,248,227,233, 12, 28, + 33,164,153, 59, 44,105,135, 23,195,191,203,100,225,175, 91, 14,187,169, 10,179, 39,236,218,240,203,203, 43,127,253,117, 19,128, +169,236, 49,194, 96,188, 24,228,228,228, 60,119,147,117,241,226,197,156,103, 49, 89,109,219,182,237, 2,224,155,156,156,156, 10, +179,245, 77,251,246,237,231, 85,173,171,170,160,162,148,142,189,118,237,218,217,218, 52,103,206,156,233, 13,160,209,245,235,215, + 43,142,209,168,109,219,182,141,170,219, 87,161, 80, 88, 90,180,104,145,182,108,217,178, 28, 86, 66,254, 94,131,149,144,177,227, +189, 86,134,220, 50, 0, 72,176,194,164, 60,214,180,167, 55, 91, 22,175, 91, 48,126,113,120,195, 6,208,104,141, 56,122, 61, 13, + 22,139, 25, 22,142,123, 20,201,226, 96,225,204,232,211,194, 21, 47,233,167,226,135, 3,137,224, 44,252,215,181,105, 62,137,137, +242, 99, 90, 70,191,178,157,231,169, 84, 38, 22,168,154,250,185,184,207, 26,209, 66,240,222,144,112,232, 76,220, 43, 97, 30,228, +100,124, 62, 93,109,149, 38,255,239,115,103,210,234,254,102,225,234,204,123, 45,209,167,246,163, 7,246,114,160, 6, 21,204, 69, +201,208,148,155,145, 92,108, 70,158, 94, 9, 25,201,181, 74,147,167,104,238,235,227,165,184,176,237,163, 84, 23,161, 90,228, 46, +228, 36, 82, 1, 7, 11, 79,133, 84, 25,111,104, 16,218, 75, 92,209, 47,171,182,116,218, 40,236,199,119,233, 61,192, 49, 99,243, +100, 98,211,180, 15,220, 91,249, 33,245,236, 58, 20, 92, 63,128,226,156, 52,226,160, 87,194,195, 37, 8,253,198,142,194,183,163, +218, 66,163,214, 64,152,155,228, 40, 21,203,156,106,210,164, 22,140,253,110,201,151, 94, 34,161,224,225,249,172,216, 44,102,232, + 12, 6,192,194, 65, 46,226, 65,104,197,255,204,176,152, 77,138,230,195, 63,122, 11,192,149,186,242, 30,159, 79,183,132,187,147, + 40,240,230, 80,106,214,129, 0,231,227, 10,104,165,233, 9,243, 32, 99, 90,247,153, 24, 69, 9,206, 61,205, 53,138,112,193,192, + 54,141,236,108,109,213, 9,200,218,249, 14,146, 32,167, 30,157,222,192,152,215,167, 43,126,251,237,183, 65,132,144,105, 85,251, +160,253, 29,195,139,153, 38,211,252, 95,213,116,116,116,108,220,176, 97,195,121,102,179,185,139, 68, 34,241, 48,153, 76,224,121, + 62, 79, 42,149,158, 75, 75, 75,251, 92,165, 82,165,252,183,229,253,208,161, 67, 86,155, 44,107, 52,197, 98, 49, 78,156, 56,241, +192, 90,147, 85,205, 2,244, 27,119,238,220,137,237,219,183, 3, 0, 78,157, 58,133,224,224, 96,219,234,190,155,153,153,105, 59, + 98,196,136,141, 0,252,106,211,188,127,255,126,227, 47,191,252, 18, 59,119,238, 4, 0,108,216,176, 1, 77,155, 54,173, 54, 61, +183,111,223, 22,126,250,233,167,141, 1,228,252,221,215,232,159,110,176,146,253,157,165,173,160,183, 0, 64,114,125, 15, 22,159, + 71,151,180,240, 18,247, 61,177,243,231, 46,114,137, 0,243, 87,207,202, 44, 44,209,116, 16, 17,240, 0,192, 81, 8,156,237,164, +151,190,158,208,194,191,180, 76,143,253, 87,179,207,198,229,211,122,133, 66,227,114,232, 49, 0, 78,255,170, 32, 73,211, 9,223, + 30,219,186,245,227,190,205,103, 12,105,142,125, 23,211,102, 0, 88, 93,103, 33,231,121, 80,158,171,236,212,254,208,201,240, 0, +207, 61,246,198,192,131, 62,252, 27, 95,191, 8, 86, 55, 66, 68,165,238,232,215, 64, 33,253,105,202,148, 55, 29,204,133,247, 81, + 98,148, 32,179, 84,143, 60,157, 24,101, 34,119,100, 39,196, 88, 4, 4,199,234,142,178, 64, 77, 57,189,147,179,212, 78, 16,209, +235, 45, 31,245,225, 79, 74,165,132, 19, 58, 12,251,194,169,232,196,178, 52, 78, 91,168, 37, 4,117, 78,112,233,232,232, 20,172, + 47, 78, 19,170, 74,139,224,228, 25,142,190,175, 12,196,194, 1, 97,208,168,181, 40, 44,185, 68,155,120, 57,144,244,115,155, 48, +183, 95, 51, 20,231,231,194, 96, 6,136,214, 80,162, 55,234,203,106, 60,143, 2,252,250,254,236, 15,199, 4,120,185,217, 86, 12, + 22,160,188, 5, 45,154, 5,162, 87,151,246, 56,118,254, 2,174,197,220, 3,255,104,176, 0,229,121,100, 21,148,230,235, 77,150, +117,245, 58,161, 22, 14,212,172,175,214,128,225, 41,154, 6, 35, 61,136,194, 2,124,214,161,137,253,164,143, 7, 6,216,219,202, + 8,244,102, 11,244, 70, 51, 52, 23,126,130, 75,195, 72, 40,228,114,210, 10, 58, 17, 0, 54,121, 40,131, 81,133,145, 35, 71,202, +243,243,243, 79, 15, 24, 48, 32,172, 87,175, 94,138,168,168, 40,104,181, 90, 28, 61,122, 20, 90,173, 54,192,207,207, 47,224,232, +209,163,195, 59,116,232, 16,239,235,235,219,109,199,142, 29,245,233, 35, 43,194,191, 58,169,243, 0,184, 71, 75,121, 9,241,176, +163, 57, 79, 41,181, 60,109,218,165, 82, 41, 46, 93,186,244,220, 35, 89, 87,175, 94,125,240, 52,145, 44,173, 86, 43,241,242,242, +130,139,139, 11, 44, 22, 11,180, 90, 45,246,238,221, 11,149, 74, 5,158,231, 97, 99, 99,131, 47,190, 91,141,132,155,167,113,229, +202, 21,168, 84, 42, 73, 93,154, 69, 69, 69, 36, 36, 36, 4, 6,131, 1, 28,199, 65,175,215,227,248,241,227,149,191,139, 68, 34, +124,184,104, 57,238, 93, 63,141, 91,183,110,161,168,168,136,176, 82,253,247, 27,172,103,198, 98,225,230,252,182,126,235,165, 57, + 83, 71, 97,250,232,104,191,207,127,222, 29, 29, 95, 72,215, 3, 64,152, 27,153, 48,174,123, 19,127, 39,133, 24, 11, 55, 95, 7, + 40,157,243,172,199,139, 45,166,247,194, 61,201,140, 61, 87,210, 79,127, 50,170, 21, 2,189, 28,130,131,130,136, 52, 41,201,138, + 53,255,120, 14,206,118,178,144, 1, 45, 93, 15,131,231,225,100, 47, 11,133,133,131,147,157, 44,164, 95,132,227, 33, 0,112, 82, + 72, 66,171,139,116,213, 24,238,245,151, 76, 86,200, 68,147,109, 91,123,249,191, 54,168,151, 77,255, 65,195,109,236,196, 28,138, +175, 28,133, 90,236, 11,115,131, 0, 24,204, 37,200, 74, 73,178,156,184,124, 55,187, 72, 99,152, 85,103, 50, 41,206,102,167, 36, +186, 53,110,222,203,185,232,192,220,130,198, 19, 55, 55, 18,128, 23,104, 54, 13,203,183,117,111,103,115, 53, 57,165,140,167,255, + 30,193,121, 18,181, 74,149,102,182,192, 75,103, 17,217, 39,157, 90,139,143,251, 69,162,180,164, 0,122, 19, 7,149,142, 51,121, + 58,201,101,134,148, 88, 24, 76, 28,140,102, 30, 98, 39, 31, 28,189, 20, 83,196,155,205,135,106,210, 76, 42,162,183, 0,216, 85, +253, 91,144, 27,105,241,145,131,205, 45,152,117, 72,207,202,193,250,191, 46,181,122,180,223,211,191,157,242,220,195,102,230, 42, +145, 43, 66, 17,245, 52,157,219,155,121,144,118, 54,114,201,143,223,204,120, 53,172, 99,211, 6, 50, 62,235, 18, 8,111,130,173, + 69, 4,157,212, 2, 71,191, 64,240, 70, 13, 45,215,235,149,113,255,143, 75, 4, 49, 24,255, 11,132,134,134,122, 58, 58, 58,198, +205,158, 61,187,193,176, 97,195,176,103,207, 30,168,213,106,172, 91,183, 14, 43, 86,172,192,130, 5, 11, 96, 54,155,241,219,111, +191, 41,118,237,218,213,238,151, 95,126,201, 10, 8, 8, 8, 79, 79, 79,175,107, 65,117, 2, 64, 6, 64,252,168,238, 34, 0,248, +131, 7, 15,162,127,255,254, 56,120,240, 32,255,232,111, 22, 66,136,153, 82,106,120, 90,131, 37,149, 74,145,144,144,240, 92, 76, +150, 88, 44,134,157,157, 29,164, 82, 41, 18, 19, 19,235,109,178, 56,142, 19,102,101,101, 65,165, 82,161,215,160, 65, 88,254,245, +215,232,222,189, 59,122,245,234, 5, 74, 41,142, 31, 63,142,232, 78, 17, 24, 53,184, 27,238,222,189, 11,179,217,108, 85,122,243, +242,242,144,159,159,143,190,131, 6, 97,245, 47,191,160,125,251,246, 8, 9, 9, 1,199,113, 56,125,250, 52, 94,238,211, 9,242, +161,209,184,119,239, 30, 43,212,255, 43, 6, 43,182,128, 94, 14,115, 35, 7, 70,247,105, 55,112, 80,231, 48,172,222,118,226,203, +176, 48,178, 21, 0, 92,236,101, 95,140,239, 30,136,248,140, 82,156,184,149,115, 32,190,144, 62,151,209, 23,188, 5,174, 46, 14, + 10, 64, 40,133,206,196,115, 14,201,168,179, 99, 50, 79, 41, 20, 93, 62,194,184, 65,241,126,237,195,252,252, 42, 70, 17,218,245, + 95,134, 9, 49, 15,252,219,134,120,250,195, 98, 6, 44,102, 56,140,218, 12, 44,178,173, 51, 29,157, 27,203,142,125, 52,107,198, + 75,253,134,190, 98, 35, 85, 56,194,162,206,132, 57, 47, 6,197,247,207, 66,171, 8, 70, 94,122, 50,182, 31,185,162,186,159, 85, +172, 22, 8,112, 52, 95,101,248, 32,169,132,150,213,165,171, 55,227,235,121,115,103, 13,216,190,117,155,189, 44,176, 51, 73,250, +169,191, 74, 42,226,100,110,141, 90, 11,202,229,174,244,171,117,219, 28,180, 70, 44,174, 75,167, 92,171,222,125,252,232,225, 81, + 77, 26,119,182, 79,189,246, 23,116,122, 3, 12,102, 32,188, 93, 55, 88, 44, 84, 74, 4,132,119, 16, 10, 73, 65,113, 41,136,217, +146,127,238,118,106,238,249,219,201, 66,131,125,221,218,143, 21, 58, 34,124,119, 80,183,150,128, 89,135,193, 93, 34,177,124,211, +137,119, 0, 76,124,182,139,252, 48,130, 69,129,206,225,238,100, 21,128,206,215,247,174, 8,109, 51,244,125,212, 39,130, 21,225, + 70,250, 69, 4,121,175, 93,254,197, 71, 13, 92,124,131,133,132, 55,131,122, 54, 7,212, 89,148,100, 93,130,163, 79,123, 88,188, + 59,225,183, 31,150,150,241, 60,221,250, 52, 83, 84, 48, 24, 47, 50,122,189,126,247,146, 37, 75, 26, 12, 28, 56, 16, 0, 80, 86, + 86,134, 75,151, 46, 97,205,154, 53,176,181,125,252, 57,217,191,127,127, 80, 74, 27,204,159, 63,127, 55,128,142, 53,105,118,234, +212,105,208, 15, 63,252,144,211,178,101,203,228, 71, 38, 75, 2, 64, 16, 27, 27, 43,200,204,204, 36,206,206,206,212,219,219,219, +156,147,147,195, 3,176,188,254,250,235, 66, 59, 59,187, 38,101,101,101,103,158,214, 96, 73,165,210,231,210, 39, 75, 44, 22,131, + 16, 2,169, 84, 10,137, 68,130,236,236,236,122,153, 44,142,227, 68, 7, 15, 30,196,245,235,215,177,160,101, 75,204,240,241, 65, +131, 6, 13,112,250,244,105, 80, 74, 97,107,107,139,146,146, 18,108,221,186, 21, 61,122,244, 0,199,113, 18,107,116,119,238,220, +137, 27, 55,110, 96, 81,155, 54,152,225,232, 8, 59, 59, 59, 28, 63,254,176,213, 79, 38,147, 33, 61, 61, 29,199,143, 31, 71,183, +110,221, 88,161,254,187, 13, 86, 55, 66, 68,196, 3,158, 38,163, 14,148,163, 0,129,119, 88, 24,145,196,199, 83, 83,125, 15, 42, + 16, 96,238, 15,235, 15, 12, 88,246,254, 32, 50,121, 72, 43,239,207,215,158,154, 6, 0,147, 70, 52,245, 81,200, 68,248,126, 95, + 60, 21, 8, 48,247,121,100, 48, 44,140, 72, 4, 2, 76,235,213, 62, 4, 57, 74, 35,146,114,148, 39,227, 41,181,170, 73,231,196, +178,113,216,176,255,116,230,138, 13,250, 4, 74, 41,156,236,100, 33, 19,238, 36,249,175, 61,120, 35,227,187,237,250, 4,202, 83, + 56, 41,196,161, 19,239,118,170,115, 20, 97, 91,127,201,228, 57, 31,125,208,105,200,196,217,114, 46, 97, 7,140, 73, 71,192,155, +116, 80,155, 36, 80, 10, 61,145,149,145,129,175,126, 59,144,169,214, 26, 71,197, 22,212,207, 88,222, 43,162,101, 97,110,100,216, + 87, 11, 63, 57,246,245, 23,243,237,116,201,167,203,132,132,211, 9, 27,118, 21,125,177, 96, 25,209, 24,140,175, 36,149, 80, 77, + 93, 58, 6,123, 44, 94,242,221, 15, 3,222, 28, 59, 60,161,105,112, 87, 23, 75, 78,138,139, 94,173, 46,216,124,248,134,231,163, + 55, 67, 2, 0, 73, 89,197, 40, 84,105, 57, 11,103, 62, 99, 47,198,231,113,214, 68, 3, 31, 17,232, 65,220,134, 69, 53,127,213, +205, 94, 2, 93,153, 18,238,246, 98,244,105, 31,244,106,160, 7,249, 40, 57,159, 22, 62,189,193, 50,131,154,117,184,188,184, 71, + 40,181,152, 67, 97, 49,195,116,103, 99,253, 35, 97, 4, 51,166,119,177,115,112, 54,166, 10,160,181, 5,108, 92, 65, 28, 2, 0, +199, 70, 68,220,236, 21,228, 36,199,113,239,188, 58,182, 56, 37, 45,235,119, 87, 27,124,203, 30, 33, 12,198,227,164,167,167,143, +159, 51,103,206,249,246,237,219,123,184,186,186, 34, 50, 50, 18,251,247,239,199,236,217,179, 43,247,105,217,178, 37, 40,165, 40, + 41, 41,193,146, 37, 75,242,114,114,114,198,215,166, 25, 23, 23,151,176, 97,195,134, 46, 97, 97, 97, 38,137, 68,162, 4, 32, 83, + 42,149,242,146,146, 18,162,215,235,193,243, 60,239,232,232,104,201,201,201, 49,143, 26, 53,202,112,241,226,197, 32,173, 86,155, +254, 44, 17,172,182,109,219,198, 42,149, 74,149, 64, 32,120,230, 41, 28, 42,204, 85, 68, 68,132,155, 86,171,229, 1,148, 62,205, + 20, 14, 28,199,161, 77,155, 54, 56,114,246, 38, 14,158,184, 8,117, 78, 34,166,189, 57, 30,145,145,145, 56,114,228,200, 83, 95, +179, 22, 45, 90,224,240,241,243, 56,127,253, 54,210,239,221,193, 59,211,222, 68,120,120, 56, 14, 31, 62,204, 10,244,223,109,176, +154,185,145, 22,222, 77,164, 27,231,247, 11,106, 38,238, 53, 31, 68,108,131, 29,193,135, 59,205,253,234,167,132, 72, 15, 50, 54, + 38,191,238,209, 94,143, 69,177,242,105, 92,184, 59,217,114,251,110,232,171,131,219,251, 97,245,126,197,103, 0,240, 74, 84, 99, + 92,189, 95,136, 43,247, 10,182,196, 21,208,184,103,205, 92,164, 7, 81,128, 98,203,146,119,135,116, 11,240,245,196,154, 61,231, + 65, 8,118, 91, 85,209, 82, 74,219,135, 5, 96,197,134, 39, 71, 12,122,250,127,183, 93,159,112, 36, 86,221, 15, 0,122, 55,179, + 61,212, 54,200,217,191,174, 72,134,141, 84, 52,165,223,240,113,114,238,222,126, 32,237, 56, 8,103,128,206,196, 35,183, 72,131, +114, 71, 63,156,190,116, 91,167,210, 27,223,143, 43,120,186,168, 93,124, 33, 77,110,233, 69, 50,202,180, 58, 47,133, 91,144, 94, + 40,224,249, 50, 3,197,213,248, 52,117, 92, 46, 77,180, 70, 35, 41,137, 26, 59,250,146,168, 85,235,183,207, 19, 75,164,175, 8, + 9,136,187,147,173,219,170,101,139, 96,111,111, 7,222, 88,246,127,236,157,117,120, 84, 71,219,198,239, 57,235,217,221,184,111, + 18,136,224, 1, 2, 73,112, 40,161, 4, 45,148, 66,161, 20,104,145,182,120,129, 66,145, 82, 40, 82,156, 22, 43, 69,107, 80,220, +139,123,112, 77, 32, 33, 9,132, 32,113,119, 91, 61,123,230,251, 35,242, 6,136,108, 2,253,222,190,244,252,174,107,175,100,237, +222, 57,115,100,238,243,204,204, 51, 64, 97, 58,250, 79, 88,146, 30,150,168,247, 4,128,134,118, 68,249,142,151,120,155,144, 33, + 9, 23,162,117,115,170,251, 13, 98,192,216, 97, 61, 90,138, 56, 93, 33, 38, 45,223,131,205, 51,251,225,147,174, 77, 68,199,175, + 69,141, 5,176,176,182,251,154, 26, 89, 80,131, 26,237,102, 95,126, 72,128,171, 20,232,120,119,239,162,198, 64,136,201, 26,126, +132,136,132,206,164,137, 79, 29,133,152, 75,184, 6, 46,225, 26, 21,184,117, 0,169,243, 14, 33, 78,254,244,167, 21,243, 11,183, +110,253,229, 12,199, 96, 65,117, 41, 47,120,120,254,173, 80, 74,159, 90, 89, 89,245,236,221,187,247,249,211,167, 79,219, 52,107, +214, 12, 0, 80, 58, 99,205,223,223, 31, 13, 27, 54, 68,106,106, 42, 62,254,248,227,140,228,228,228,158,148,210, 42,199,244,230, +231,231, 63,219,191,127,191, 99, 97, 97, 97,203, 57,115,230,164,213,173, 91, 55, 79,163,209,144,156,156, 28,142,101, 89, 88, 91, + 91, 75, 90,182,108,137,246,237,219, 23,220,184,113,195, 61, 62, 62, 62, 31, 64, 76,109,202,255,249,231,159,227,224,193,226,102, +226, 77,228,197, 18,139,197, 8, 12, 12,116,185,126,253,122, 34, 0,212, 38, 47, 86,249,230,229,254,253,251,184, 20,146, 0,161, + 78, 13, 73,122, 18,110, 30,218,143,190, 99,198,131,101,107, 63, 90,225,254,253,251, 56,124,238, 38, 20, 82, 33, 30, 61, 10,199, +254,253,251, 49,110,220,184,215,210,228,169,198, 96,213,171, 71, 36,210, 2,204,235,225,239, 50,227,163,142,245, 4,134,188, 36, +112, 70, 14, 2, 17,224, 96,103,129, 63,255,220,229,185,107,207,158, 27, 45, 92, 68,235, 56,150,253, 54, 44,149, 22,213,224,183, +231,173,218,115,245,163, 63,167, 5, 8,199,245,106,108, 3, 0, 98, 33,131,181,127,133,179, 0,230,189,206, 70,181,115, 37,178, + 2, 3, 70, 59,217, 90,206,253,230,243,247,108, 2,252, 27,226,210,173, 7, 88,183,255,198,101, 73, 26,182,155,124, 80,115,134, +151,167,192, 86, 56,139, 16, 92,245,227, 41,141, 70,234, 36, 86, 88, 67, 31,115, 17,208,107,160,209,234, 17,159,105, 68,124,150, + 6, 66,185, 24,119,163, 18,212,182, 41, 56, 86,219,109, 38,132,144,142, 94, 50,213,119,139,127,116,213,168, 11,216,188,236, 12, + 86, 44,185, 41,146,155, 73,147,107,162,115, 35,129,106, 58,123,138,253, 0, 78, 32,145,209,162,217, 83, 71, 40, 18, 35, 78,163, + 62,147, 4, 66, 41,204,154,188, 7,115, 51,129,184,147,135, 56, 14, 0, 60,156, 44, 37,203, 23,124,109, 57,101,230,130,106,199, +120,121, 19, 34,110,222,202,105, 74,179,186,214,184, 28,252, 16,151,195, 98,195, 47,223,125,212,180, 75,115, 21, 26,186, 90, 77, +246, 38,100, 89, 4,173,121, 68,180,120,199,176,128, 65, 83, 54,139,208,219,145, 12,105,245,209,156, 10,103, 15, 86,134, 7,192, + 69, 25, 41,136, 64, 0, 16,166,120, 70, 99,252, 53, 8,173,188,232,174,189,135,139,126,249,101,251,247, 17,233,148,143, 90,241, +240, 84, 67, 78, 78, 78,168, 92, 46,239,225,227,227,243,199,164, 73,147,204,135, 13, 27,166,250,226,139, 47, 24, 0, 72, 77, 77, +229,214,172, 89,147,244,211, 79, 63,229,102,100,100,140,212,235,245, 97,166,220,240, 18, 66,174,255,250,235,175,233, 87,174, 92, +105,218,186,117,107,169,159,159, 31,103,109,109, 45,148, 74,165, 70,157, 78,167,137,138,138, 50, 62,125,250,212, 57, 39, 39, 39, + 26,192,147,218,116,223,171, 84, 42, 48, 12,179,208,213,213,245,187,164,164,164,102,111, 98, 12, 86,253,250,245, 85, 0,162, 93, + 92, 92,234,215,180,123,240,149, 6, 91, 40, 68,118,118, 54,138, 82,194, 33, 75,120, 12, 31, 5, 3,111,107, 37, 44, 44, 44, 94, +203, 12,229,230,230, 2,133,137,184,122,245, 62,192,178,176,180,180,132,165,165, 37,111,176,254, 46,131,213,212,129,140,179,150, + 96,205,152,247,234,137, 61,234,184, 66,155,112, 23,247,227, 11,240,109,219,214, 17, 2,169,185,102,204,167,253,252, 7, 12,116, + 71, 64,251, 86,196,195,217,114,242,178, 85, 27, 39, 52,117, 36, 95,135,167,210,181,166,252,112,120, 26,125,214,196,129,252,114, + 49, 52, 97,172,171, 92, 13,142,163,184, 24,150,140,176,152,236, 95, 34,211,232,179,154,108, 68, 83, 21, 9, 20,130,217, 67, 41, +149, 89, 42, 20,249, 45, 91, 52,182, 11,108,215,130,233,217,217, 31, 98, 1,112,245,246,125,124,181,234,224, 77,142,163,239, 5, +155,216, 61, 88, 60, 99,240, 69,227, 84, 60, 99,208,240,194,140, 65, 74, 41, 45,158, 69, 88,245,176, 46,129,128,164, 20,197,222, +113, 18,217, 54,128,250,201, 69,196,100,115,136, 77,203, 71,158,208, 9,218,196, 68,128,114,113, 65,148,214,250,104,182,179,179, +115,240,244,110, 88,111,253,182,253,208, 23,229,226, 89,208, 31, 40,200, 78,198,162, 77,127,213,115,117,117,237,156,144,144,112, +169, 6,102,173,225,249, 99,187, 28, 64, 1,129, 72,138,227, 27,246, 34,195,214, 12,118,114, 49, 56,117, 58,198, 76, 25,102,217, +171,219, 48, 75, 0,136,125,116, 15,117,229,106,147,116,245,182, 24,240, 81,151, 70, 86, 48,168,177,237,212, 61, 13, 3,244,220, +126, 38,252, 73,151,198, 86,178,143, 58,214,181, 94,152,148,243, 33,106,153, 12,180, 52,130, 85, 22,209,171,197,236,193,125,148, + 26,155,216,147, 39,123,174,167, 41, 6,118,243,147,139,133,132,208,130, 68, 80, 51, 59,108,220,182,175, 64, 98,192, 22,254,146, +193,195, 99, 26, 69, 69, 69,193,132,144,230,211,167, 79, 31, 50,123,246,236,119, 20, 10,133, 39, 0, 20, 22, 22, 62, 51, 24, 12, +151, 1,236,170,201,108,191, 18,195, 20, 77, 8,121,246,228,201, 19,199, 29, 59,118, 88, 1,144,149,188,173, 1,144, 3, 32,245, +117,102, 16,150,154, 41,149, 74,245,221,155,170,135, 82, 51,229,226,226, 82,191, 54,223, 23, 8, 4, 70, 66, 8, 8, 33,144, 74, +165,184,114,229, 10, 6,189,215, 13,145,199,115,208,204, 74,137,214, 35,199, 96,207,217,179, 16, 8, 4, 32,132, 64, 32, 16,212, +168, 29, 17, 10,133,184,122,245, 42, 62,249,120, 32,164, 66,192,210,210, 18,211,167, 79,199,145, 35, 71, 32, 20,242,171,233,253, + 61, 17, 44,130,133,103,255, 88, 34,134,209,128,163,127,252,128, 99, 15, 10,116,143,210,241,109,163,116,172,217,143,124, 46,125, +213,246,177,103,175, 62, 88, 57,106,112, 31,249,187, 93,186,225,221,128, 46,194,166,173, 58,207, 5,176,182, 92, 67, 29, 88, 85, +174, 12, 35,135,239,183,156,122, 56,102, 79, 80, 20,129, 62, 31,131,187,183,162, 70, 14,223, 87,211,248,191,162,105,105,166,220, +115,245,198, 13,107,232, 11, 16,115,239,130,204,221,179, 30, 96,212, 35, 58,250, 49,126,218,118,136, 11,186,253,232, 79, 29,139, + 73, 79,178,104,161,169,154,197,142,138,133,165, 66,210,168, 87, 51,203,147, 28, 40,172,228,226,198,148, 51,194, 74, 46,106,220, +189,137,226, 36,165,148,154,155,137, 26, 83,163,161, 90, 77,181,142,221,188,237,183, 95,126,252,236,179,207, 20, 25, 9, 41, 72, +202,123,128, 2,137, 11, 12,114, 55, 60,185,119, 89, 93,164,101,171,109,188,171,170,207,140,140,140,180,224, 91, 89,216,179,105, + 41, 12, 58, 45,210, 18,138, 61,106, 82, 70, 30, 44,236, 92,110,212, 68, 83,207,114,185, 3,134,141, 22,155,153,195,236,147, 1, +125, 36, 79, 50,181,240, 85,153, 23, 95,228, 10,210, 17,121,238, 42, 2, 10,139,253,218,211,120, 6,117, 91,168, 76, 42,167,185, + 76, 60,169,151,159, 11,158,197, 37,227, 74,120,226,182,167,153, 52,201,203,150,108,123,146,148, 51,182, 95,219, 58, 88,125, 36, +226,203,202, 76, 81,101,154,222,142,100, 8,128,142,197,131,220,213,160, 64, 71,111, 71, 50,196,148,153,131, 21,105, 10,197, 24, +250,227,201,216, 57,251,238,100,244,155, 49,180,147, 69,251,246,189, 37, 96,117,200, 87,107, 13, 17,217, 52,239,117,246,209,107, + 68, 39,121, 77, 94,243,127, 82,179,196,236,252, 89,242,120,147,154, 73,120, 41, 47,211,235,110,123,249,238,192,164,164, 36, 97, + 73,244,170,202, 65,238,213,105,150,239, 14, 76, 76, 76, 60, 81, 18,189,170, 50,138, 85,129,102, 82,155, 54,109,108,250,246,237, + 11,163,209,136,199,143, 31, 35, 54, 62, 30,129, 99,191,132,149,149, 21, 46,135,134,226,209,163, 71,248,238,187,239,192,113, 28, +110,222,188,153, 80,157,166, 72, 36,210,183,104,209, 66,252,193, 7, 31,128,101, 89, 60,125,250, 20,137,137,137,248,234,171,175, + 96,105,105,137,224,224,224, 50, 77,173, 86,139,103,207,158,233,255, 63,142,165,127,143,193, 2,140, 48, 26,144,123,118, 30,214, + 94,129, 94,111, 64,227,240, 52,250,188,220,251, 27,125,108,201,209,208, 7, 15,159, 5, 95,123, 87,130,180,176,226,239,212,128, +168, 12,154,220,202, 77,152, 15,125,190, 5,158,158,196,243,212,252,130,168, 12,154, 92,211,141,160,156,145, 64, 95, 4, 36,223, +197,245,203,151, 16,116,243, 62,238,132, 61, 52, 94, 15,142,218,195,112,248, 62, 34,131, 62,174,177, 38,165, 80,190,183, 26, 35, +194,162,235,180,106,232, 88, 7, 70, 22,148, 51,192,114,240, 46,140,140,104, 95,167,149,151, 85,157,226,200,149, 1,214,159, 95, + 0,126,148, 85,169,119, 39, 78,191,165,163,167,244,195,252,156,204,182, 93, 59,183, 83, 88, 54,233,133,140,232, 40, 60,190,127, + 85, 29,252,224,201,245, 59,113,250,215,138,142,184,184,184,188,211,181,115, 35, 12, 30,243, 13,244, 69,185,120, 26,244, 27, 10, +178, 82,112,229,134, 18, 15,243,242,218, 1, 48, 57,130,117, 61,214,208, 20, 0, 58,122,136,227,204,161,117,250,180, 79, 95, 72, +137, 6,156, 54, 15,164, 40, 3, 79, 18,117,185, 31,110,138, 55, 2,128, 92, 74,132, 10,154,107, 97,138,174,119, 93,219, 6,114, +129, 1,219,207,134,131,227,138,151, 89,226, 56,108,220,126,225,201,216,239, 63,241,133,119, 29,235, 22,132, 16, 82,147,208, 62, +161,232,116,103,207,130,198,154,243,115, 1, 78,143,171,147,109, 26,119, 90,155,213,169,182,145,176,176, 68,154, 8, 96,108, 19, + 21,217, 60,121,237,169,185,254,103, 35, 58, 78,251,188,159, 5, 40,191, 48, 58, 15, 15,207,127, 37, 18, 56,102,230,204,153,155, + 5, 2,129, 61, 0, 66, 41,133, 86,171, 21,110,218,180, 73,196,178, 44, 35, 16, 8,140, 50,153,140, 13, 14, 14, 54,112, 28,151, +174,215,235,199, 84,167,169,211,233,158,172, 95,191,190,158,193, 96, 40,155,113,168,213,106,241,219,111,191, 65,171,213, 66, 42, +149, 66,169, 84,226,233,211,167, 32,132,232,141, 70,227, 19,126, 79,188, 73,131, 69,177,160,195, 39,243,230, 1, 32,160,152,255, +146,185, 2, 0,132,102,210,164,166, 14,228,171,166,173, 58,207, 43,253, 78, 77, 11,160, 49, 26, 7,182,106,222,112, 55, 0,104, +169,241,147,218,108, 68,158, 86,253, 81,203, 86,237,246,112,148, 10, 89, 74,127, 97, 56, 28,208,176,136, 52,101,230, 92,165,119, + 30,105, 57,193,165, 11, 56,115,160,255,233, 22, 44, 73,199, 64, 41,165,101,221,130, 63,200,144,145,171,173, 54,143,211,213,103, +218,110,173,234,136, 71,159,185,118,111,140,209, 72,157, 4, 2,146,162,214,177,155, 95,215, 92,149,220,125, 93,242,118, 32,103, + 66, 91, 56,118,183,147,151, 68,181,138,128,140, 34,156, 73, 72,203,191, 84, 27,205,236, 66, 67,191,217,107,142,252, 37, 17, 9, +132,160,180, 56, 17, 40,165,208,232,141, 89,165, 38,204,199,150,168,166, 31,102,119, 11, 4, 36,182, 58,189, 91,143,146, 87, 15, + 94,118,238,235,240,152,236, 95,158,103,211, 7, 0,240, 60,155, 62,168,111, 75,230, 62, 73,201,255,250, 65,108,246, 15, 53, 29, + 55, 65, 9,174,180, 26, 60,239,149,215, 94,183, 62, 35,147,232,125, 0,253,155, 58,144,110,131,167,253, 52,141, 16,240,203, 68, +240,240,252,139, 40,141, 98, 49, 12,179,240, 77,105,150, 70,177, 0, 68,215,224, 59,183, 0, 52,127,147,219, 22, 28, 28,156, 9, + 32,147,223,203,255, 37,131, 21,158, 70, 55,194,132,197,156, 77,253, 92,165,223, 79,162,231, 0,216,190,206, 70,148,104,216,188, +201,138, 9, 77,165,115,255,142, 10, 47, 49, 83,127,203, 88,158,136, 52,218, 3, 0, 26, 52,104, 64,163,163,163, 65, 41,125,173, +236,187,145,233,244, 62, 94, 90,114,161, 34,147, 13,160,147, 41,122, 81, 25,244,123,224,213, 46,224,232, 76,186, 8,192,162, 90, +109,115, 45, 51,181,155,124,108,165,209,179, 64,245,217,244,121,120,120,222, 78,147,245,166, 53, 95,119,225,103,158,183,192, 96, +241,252,239,242,248,241, 99,126, 89, 3, 30, 30, 30,158,202, 49,254, 13,154,124,210, 97,158, 23, 96,248, 42,224,225,225,225,225, +225,225,225,121,179, 16, 0,129, 21, 90,241, 26,204, 14, 32,132, 4,214,216,234, 87,163,207,107,242,154,188, 38,175,201,107,242, +154,188,230,219,167, 89,157,246, 91, 51, 59,145,150, 27,188,252,166, 31, 0, 2,121, 77, 94,147,215,228, 53,121, 77, 94,147,215, +228, 53,255,109, 15,190,139,144,135,135,135,135,135,135,135,231, 13,195, 27, 44, 30, 30, 30, 30, 30, 30, 30, 30,222, 96,241,240, +240,240,240,240,240,240,240, 6,139,135,135,135,135,135,135,135,135, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 60,181,135,212,112, +101, 18, 30, 30, 30, 30, 30, 30, 30, 30,158,106,224, 35, 88, 60, 60, 60, 60, 60, 60, 60, 60,188,193,226,225,225,225,225,225,225, +225,225, 13, 22, 15, 15, 15, 15, 15, 15, 15, 15,111,176,120,120,120,120,120,120,120,120,120,120,131,197,195,195,195,195,195,195, +195,195, 27, 44, 30, 30, 30, 30, 30, 30, 30, 30,222, 96,241,240,240,240,240,240,240,240,240,252,247, 13, 22, 33, 36,144,215,228, + 53,121, 77, 94,147,215,228, 53,121, 77, 94,147, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 60,188,193,226,225,225,225,225,225,225, +225,225, 13, 22, 15, 15, 15, 15, 15, 15, 15, 15,111,176,120,120,120,120,120,120,120,120,120,120,131,197,195,195,195,195,195,195, +195,243, 95,130, 0,168,112, 38, 0,165,244,156,201, 34,181,152, 77, 80,157, 62,175,201,107,242,154,188, 38,175,201,107,242,154, +111,159,102,117,218, 53,241, 31,255,104, 40,165,127,219, 3, 64, 32,175,201,107,242,154,188, 38,175,201,107,242,154,188,230,191, +237,193,119, 17,242,152, 26,165,116, 36,132, 56,242, 53,193,195,195,195,195,195, 83, 61,194, 55, 41,214,152,144, 54, 43,223,169, + 51,175,247,165,216,158, 38, 52,216, 12,254, 51, 6,140, 43, 14,166, 21,219,226,215, 48, 1,111, 92,147, 7, 32,132, 44, 37, 4, + 51, 74,254, 95, 65, 41,253,230,109,220,206, 25, 51,102, 12,244,245,109, 5,107, 89, 42, 90,121, 61, 6,178,119, 1,214, 31, 97, +206,233, 46,104,229,219, 1,151, 67,226,113,249,102, 56,110,108,232,139,207,167,204,131, 70,163, 71, 70, 70, 18,238, 95, 61,181, +255, 45,218,215,109, 69, 34,209, 71,214,214,214,230,105,105,105,231, 1,252, 5,224,125, 7, 7,135,174,217,217,217,249, 6,131, + 97, 47,165,244,102,109,180,223,105, 73,102, 74,196,162, 81, 26,189, 97,249,213,123,244,183, 0, 63, 98,203,114, 88, 38, 19, 11, + 59,105,117,236,138, 43,247,233, 47, 53, 44, 43,121, 41, 26,207,159,235,175,201,187,239,190, 59, 66, 32, 16, 44, 6, 0,163,209, +248,237,133, 11, 23,254,120, 19,186, 42,149,106, 8,165, 84, 81,178,223, 10,147,146,146,118,153,250, 93, 63, 63,191, 88, 0,117, + 74,158,198, 5, 7, 7,215, 53,229, 61,158,154,113,247,238, 93, 90,183,110, 93, 52,111,222,252, 81, 74, 74,202, 79,148,210,141, +124,173,252, 67, 12, 86, 35, 66,234,143,237,221,254,108,247, 15,123, 40, 76, 49, 66, 46, 46, 46,203,236,237,237,199, 21, 21, 21, +105, 0, 80,129, 64, 64,155, 52,105, 2, 66, 8, 74,175,155, 70,163, 49,253,225,195,135,205, 76, 53, 87,111, 74,179, 97,195,134, +119, 25,134,113, 45,127,253,174,238,127,142,227, 18, 34, 34, 34,252,171, 43,167,179,179,115, 15,134, 97,102, 85,247, 57,142,227, +150, 37, 39, 39,159,174,234, 51,205,155, 55, 15, 81, 40, 20,142, 12,195,144,202, 62, 83,190,205, 97, 89,150, 22, 21, 21,165,134, +135,135,251,214,160, 17,115, 36, 4, 51, 56,142, 50, 0,192, 48,100,166,181,181,245,206,236,236,236,136,210,247, 75,126, 39,181, + 38,199,139,139,139,203,112, 0, 95, 3,160, 0,126, 76, 76, 76,220, 86,147,239, 55,104,208,224,174, 88, 44,118, 21, 8, 4,228, +229,125, 82,209,115,142,227,168, 78,167, 75,120,244,232, 81,165,251, 40, 40,232,210,190, 21, 43, 86,132,108,249,245, 23,223, 22, + 45, 7,130,145,119,129,158, 90, 32, 36, 70,139, 86, 45, 8, 40,199, 65,147,151, 6,142,227, 80,164,209,226,252,161,223, 66,234, +120,212,243, 69,241, 88,198,183,193, 92,245, 28, 62,124,248,146,229,203,151,219, 73, 36, 18,102,239,222,189,237,190,250,234,171, + 81,171, 87,175,118,249,232,163,143,204,117, 58, 29, 55,115,230,204,119, 8, 33, 11, 40,165, 71,106,162,221,190, 37,105,219,200, +195,249,187,137,195,222,197,215, 75,119, 79,236,216,156,100,152, 41,196, 27, 63,236, 84,207,170,169,167, 53, 22,108,190, 62, 9, +192, 47, 53, 40, 43,113,115,115,107,233,232,232,232,161, 86,171,141, 0,208,180,105, 83, 42, 16, 8, 94,248,156, 94,175,215, 63, +124,248,240, 4,127,169, 55, 13,129, 64,176,248,212,169, 83,206,148, 82,244,232,209, 99, 49,128, 55, 98,176, 40,165,138,228,228, +228,210,107,160,162,134, 95,175, 19, 28, 28, 92,106,168,234,212,224, 61,147,105,215,174,157,140,213,235,199, 11, 24,166, 59, 5, +154,163,248,164, 14, 51, 2,103,133, 66,225,207, 55,110,220,208,188,237,251,254,236,217,179, 24, 61,122, 52,194,194,194, 26,157, + 56,113, 98,131, 74,165,154,144,156,156,220,133, 82,154,206,159, 25,255, 69,131,213,148, 16,135, 62,126,141,174,140,255,100,160, +156,219,191,134, 96,196,156, 42,141,144,179,179,243,242, 78,157, 58,141,218,177, 99,135,226,240,225,195, 10,119,119,119,136,197, + 98, 8, 4, 2, 8, 4, 2, 48, 12, 3,161, 80,136,247,223,127,223,164,134,235,101,205,243,231,207, 43, 26, 54,108,248, 74, 35, +203, 48, 12,122,245,234, 85,173, 38,195, 48,174, 33, 33, 33, 14, 50,153,172,204,164,112, 28,247,194,163, 92, 63, 52, 88,150, 69, +167, 78,157, 76,170, 43,134, 97,102, 69, 70, 70,190, 83, 88, 88, 88,101,223,109,137,222,233,106,180, 84,215,174,156,119, 32,250, +103, 0,155, 5, 42,176, 1, 36,158, 0, 35,173,240,243, 89, 89, 89,232,210,165,139,224,117,246,245,123,239,245, 33,148,210, 67, + 42,149,234,124, 70, 70,134, 57, 33,248,184,150,145,173,111,162,162,162,204, 41,165,104,212,168,209, 44, 0, 53, 50, 88, 2,129, +192,245,204,153, 51, 14, 82,169,180,108, 63, 87,246,215,104, 52, 66,175,215,163,103,207,158,108, 53,166, 22, 63,111,254,205, 87, +163, 53, 64, 67,221, 17, 30, 89,136,147, 39, 15,193,163,208,128, 39, 15, 52,224, 56, 21, 52,249,105,160,148, 66,173,209,161, 69, +192,135,190, 28,247,246, 4, 77, 44, 45, 45, 7,174, 94,189,218,254,151, 95,126,201,123,244,232,145,126,211,166, 77,246, 99,198, +140,105,172,215,235, 49,118,236,216,244, 70,141, 26,137, 87,175, 94,109,127,232,208,161, 30, 0,106,100,176,132, 4,223,127,220, +175, 59, 52, 6, 6, 6, 3,107,239,108,111,254,231,228,225, 1, 34, 74,117,216,126, 36, 24, 6,150,251,173,166,230,170, 87,175, + 94,117, 55,110,220, 40,140,140,140, 20, 54,105,210, 4, 70,163,177,236,193,113, 28,140, 70,163,201,231, 37,207, 11,231, 22,226, +227,227, 97,105,105,105, 22, 16, 16,144, 76, 8,153,127,241,226,197, 45,127,199,111,189, 78,100,235, 77,225,231,231,215, 90,200, + 48, 7,230,206,158,232,228,211,178,165,192,193,209, 30, 81,143,227, 32, 22,112,129,209, 15,163, 2,150,252,176,113,178,159,159, +223,135,193,193,193,183,223,182,125, 93,119,192, 47, 27, 56, 86, 63,174,248,153, 21,128, 45,200,207,207,199,231,159,127,142, 35, + 71,142, 52,105,219,182,237, 50, 0,163,248,179,226,191,100,176,188, 9, 81,180,112,119, 10,250,254,235, 49,214,244,228,239, 76, + 81,102, 26,196, 85, 24, 33, 39, 39,167, 69,157, 58,117,250,100,199,142, 29,214,132, 16,156,157, 56, 10,214,122, 13, 84,223,173, +128,181,157, 61,116,179, 70,195,220,200,194,231, 98,168,169, 23,219, 87, 52, 31, 61,122,132,236,236,108,216,217,217, 65, 46,151, + 67, 38,147, 65, 44, 22, 67, 34,145,152,170, 9,153, 76,134,115,231,206, 65, 40, 20, 66, 32, 16, 64, 40, 20,150, 61,202, 63, 23, + 8, 4,112,116, 52,125,104, 18,199,113,203, 26, 55,110,236, 19, 21, 21,101,145,147,147,131,182,109,219,230, 17, 66, 66,203,221, +233,249,132,134,134, 90,152,220,216,232,159,161, 32,110, 19,104,246, 1,192,106, 0,140, 22,131,161,129,103, 89, 3, 83,254, 47, +199,113,181,185,243, 76, 37,132,172,232,219,183,207, 44,128, 32, 48, 48,176, 96,226,196,137,244,209,163, 71,221, 63,248,160,159, +199,227,199,209, 37,102,143,204, 32,132,172, 53, 53,146, 69, 41,149, 2,192,149, 43, 87, 64, 41,149,213,230,216,147, 74,165,184, +113,227, 70, 89,132,146, 97, 24, 48, 12, 3,129, 64,128,163,209,118, 40,212, 49, 40, 74,125,128, 47,251,212,129,167,167,231, 43, +134,251,149,125, 67, 41, 38,140, 25, 21,178,112,249, 26, 95,163,209,136,147, 39, 79, 98,213,170, 85,208,106,181, 8,232,218, 29, +207,105, 11, 52,243,180, 3,199,113, 80,107,116, 8,189,116, 32, 68, 85,199,211,247,109,185, 24,228,230,230,254,217,176, 97, 67, + 65,122,122,250, 5, 0,207, 12, 6,195,250, 63,255,252,211,225,179,207, 62, 75,219,177, 99,199, 68, 0,110, 43, 87,174,236, 81, + 80, 80,176,167, 38,186,157, 90,144,222,254, 45,155,181,173,227,230,134, 75,215,111, 67, 44, 17, 89,141, 31,209, 7, 74,165, 16, + 63,252,114,156,139, 77,200,154,120,229, 62,221,102,226,185, 73,156,157,157,125,186,119,239,238,182,113,227, 70, 49, 0, 60,120, +240, 0,105,105,105,176,181,181,133, 76, 38,131, 72, 36, 42,187, 97,227,169,145,209,104,216,165, 75, 23,153,209,104, 68, 97, 97, + 33, 54,110,220,104,105,102,102,102,217,171, 87,175,121, 0, 76, 54, 88,237,219,183, 79,213,233,116, 14, 0, 32,145, 72,210,174, + 95,191,238, 8,160,200,195,195,195,172,228, 35,234, 26, 70,182,226,202, 69,167,226,106,240, 94,181,248,251,251,183,106,210,208, +227,220,210,165,243,149, 57,121, 41,176,180, 76, 5,131, 28,108,217,242, 51,204,204, 44, 48,111,222,108,161,127,155, 54, 46,147, +191,154,125,206,207,207, 47,240,109, 51, 89, 28,171, 31,215,194,191,125,217,243,109,103,215, 65,107,233,139,196,249,243,177,102, +205, 26, 52,104,208,160, 53,127,102,252,151, 12, 86, 0, 33, 66, 87, 27,229,209, 13,243, 38,123, 48, 55,142,137,212,113,209, 72, +210, 24, 97,245,159,147,231, 92,249, 11, 35, 0,198,209,209,113,252,174, 93,187, 44, 74, 27,187, 70,196, 8, 43,232,225,209,180, + 41,228,150, 86, 72, 97,245,160, 6, 61,196, 34, 81,133, 13,162, 41,154,165, 17, 48,177, 88, 12,177, 88, 92,118,193, 21,139,197, +213,106,190, 80, 57, 66, 33, 24,134,193,217,179,103,193,178, 44, 6, 14, 28,248,138,185, 18, 10,133, 47,116, 65, 86,167,153,156, +156,124,218,197,197, 37,148, 82,250,142,209,104, 4, 33, 36, 52, 49, 49,177,115,233,251,206,206,206, 61, 90,180,104, 49,139,227, +184,101, 38,149,147,205, 4,205,218, 5,243,118, 25,200,187, 97, 7,162, 8, 4, 71,220, 17,246, 56, 25, 23,238,196, 32, 61,187, + 16,126, 13,237,209,163,125, 61, 24,141, 70,147,183,189, 60, 46, 46, 46, 87,210,211, 51, 6,189,251,238,187,200,202,202, 98,231, +207,159,143, 22, 45, 90,160, 97,195,134,149,153,167,106, 53, 9, 33, 73,161,161,161,238,106,181, 26,132,144, 36, 19, 12,217,185, +138,140,240,159,127,254, 9,141,230,213,232,189,117,231, 37,248,122, 64, 93,140,252,114, 27, 86, 60,218,139, 13, 27, 54,224,229, + 33, 58, 47,107,114, 28,135,133,203,214,248,170,181,186,178,186,210,106,181,184,113,227, 6,180, 69,249,184,184,227,139,178,232, +165, 90,163,131,171, 79, 55,223,234, 52,223, 4,255, 95,154,148,210, 32, 0, 65,229,234,119,206,142, 29, 59, 6, 1, 56, 72, 41, +189, 14,224, 58,128,221, 53, 46, 39,193,200,143, 6,124, 0,161,216, 28, 15,163, 19,208,185,157, 47, 28, 29, 28, 16, 26,249, 4, +177,137, 89,169,132, 96, 68,207, 14,210,101,106,181,110,206,229,123,244,215,234, 52,157,157,157, 61,183,108,217, 34, 42, 31,113, + 17, 8, 4, 47,156,235,165,175, 85,100,178,254,151,247,209,223,165,233,231,231,215, 48, 32, 32,224,250,162, 69,139,172,226,227, +227,113,237,218, 53,184,187,187,163,168,168, 8,213, 13,109,123, 89, 83,167,211, 57,148,235,182,115, 0,128,148,148,148,221,248, + 79, 87, 58,173, 73, 57,171, 26, 87, 85,147, 49, 87, 47,151,179, 94,189,122, 18, 59,107,235,125,203,150, 47, 84, 70, 68, 94, 70, +203, 22,109,161,180,244, 6,103, 76, 65,102, 86, 1,178,163,147,176,104,209, 10,204,155,255, 45, 86, 44, 95,164, 28, 60,100,228, +129,118,237,218,213, 47,223, 93,248,191,190,223, 25,161,120,227,253,187,215,199, 1, 64, 94,228, 65, 76, 30,210, 30,249,249,209, + 24, 59,118, 46, 18, 19, 19,241,248,241,227,224,255,207,114,242, 6,171,156,185,241,151,138,118,238,158, 55,177,181, 52, 38, 76, +162,125,112, 3, 73, 90,142,254, 17,207, 38,254, 80,197,247,138,138,138,116, 71,142, 28,193,153, 9,163, 80,159,176,176,249,110, + 37, 28, 93, 92,144, 51,242,125,228, 27,244,168,119,242, 54,164, 74, 37, 36, 10,101,181, 17,135,242,154, 23, 47, 94, 68,120,120, + 56,132, 66, 33,148, 74, 37,148, 74, 37,164, 82, 41, 36, 18, 73,153,185,170,204, 96, 85,114,240, 64, 32, 16,224,193,131, 7,136, +141,141,133,149,149, 21,174, 93,187,134,174, 93,187,190, 18,197,170,229, 1, 95, 97, 68,169,100,220,213,105, 83, 53, 32,178, 3, +108, 62, 65,254, 77, 21, 96, 61, 12, 6, 88,193,104, 52,226, 94,116, 38, 70,127,242, 30, 0, 96,252,156, 77, 8,108,227, 81,102, + 14, 76, 69,165, 82,153, 1,152,209,160, 65,131,193, 67,135, 14,101,197, 98, 49, 10, 11, 11,161, 86,171,241,224,193, 3,246,189, +247,250, 20,244,237,219, 71,121,252,248,113,142, 82,172,168,225, 56,172, 84,149, 74,229, 94,210, 13,155, 90,139,227, 15,132, 16, +236,221,187,183,194,247, 71,172,138,128,176,120,120, 22, 54,110,220, 8,163,209, 8, 74, 41,169,174, 62,191,155, 53, 37,100,242, +204,133,190, 28,199,161,107,215,174,152, 54,109, 26,158, 62,125,138, 65,131, 6,149, 69, 3, 41,165, 80,107,181, 72, 12, 59, 23, +226,236,230,225,251,182, 94, 28, 40,165, 39, 0,188,254,248, 37, 10, 23, 7, 39, 55, 48,212,128,164,180, 76,124,240, 94,119, 8, +196, 74, 60,143,207, 64, 11,111, 47,231,161,239,119,112, 22, 16, 22, 51,150,237, 26, 15,224, 87, 19,206,119, 99,100,100,164,232, +254,253,251, 16, 8, 4,176,176,176,128, 92, 46, 47, 59,199,203, 27, 46,158,202,233,214,173,219, 24, 0,243, 40,165, 57, 1, 1, + 1,142,139, 23, 47,182, 78, 76, 76, 68, 68, 68, 4,246,238,221,155,206,178, 44, 11,128, 80, 74, 23,188,129, 99,137, 43, 31,217, +106,223,190,125,218,245,235,215, 29, 9, 33,133,165,145, 43, 66, 72, 97, 45,162,110,162,188,156,228, 47,173, 21,180,159,144, 49, +247, 96,243, 10,158,103,179,204, 17, 11,123,199,159,130,131,131, 13, 85,125,215,210,210,242,243,197, 11,167,170,236,236, 56, 4, +116,126, 23,201,169,122, 44,153, 58, 28,153,153,249,248,117,235, 82, 0, 18,232, 89, 1,222, 9,248, 16, 14, 14, 46,232,212,177, +147,211,165,171, 87, 38, 0,248,225,109, 57, 6, 98, 15,126, 62,158, 16,242,125,157, 58,117, 46,109, 90,186,180,126,215,174, 93, + 1, 0,231,207,159,199,111, 67,134, 96, 62,240,233, 58, 66,146, 39,189,165, 19,155,254,177, 6,203, 67,170,188,180,229,171, 65, +109,109,141, 69, 34,221,213,163, 72,212,114,236, 15,209,250,162, 59, 57,116,200, 15, 21,159, 96,148, 16,194, 17, 66, 56, 79, 79, + 79, 88, 24, 52,176,162, 58, 56,170, 84, 48,183,177, 69,150,161, 56,114, 37, 81, 40, 32, 81, 40, 77,186, 56,150,215,244,246,246, + 70,106,106, 42, 36, 18, 9,148, 74, 37,204,205,205, 95, 49, 87,166, 94,112, 9, 33,224, 56, 14, 66,161, 16,161,161,161,232,216, +177, 35,220,220,220,176,119,239, 94,244,232,209,227,149, 46, 67, 83, 77,219,203,141,121,249,136, 82,233,224,119, 83, 6,183,191, +128,164, 30, 88,243,143,192,200,187,194, 0, 75,104, 56,167,226,238, 64, 74,113,226,118, 42, 30,197,102,130, 51,114, 53,238, 34, +116,118,118,246,147,201,100, 43,102,205,154,169,106,209,162, 5,210,211, 51,192,113, 28,148, 74, 37,212,106, 53,204,205,205,209, +161, 67,135,148,249,243,231, 63,163, 20,189, 40,165, 41,255,141, 3,248,204,153, 51, 47,116, 15,150, 62, 10,147, 19, 48,114,210, + 14, 72,132, 64,104,104, 40, 26, 55,110, 92,125,184,156,163,152, 52,115,129,175, 70,171,131, 68, 34, 65,251,246,237,209,182,109, +219,178,113,113,165, 6, 85,175,215,195,104,228,224,228,253,174, 47,121, 11, 47, 10,132,144, 86, 0, 62,179,180,180,116, 47, 42, + 42, 74, 49, 24, 12,123, 75, 76,127, 15,145, 72,244,145, 92, 46,119,202,205,205,141, 1,240, 43,165,244, 78,117,122,102, 50,153, +173, 84,102, 1,142,213, 66, 40, 20,194,205,205, 3,212,168, 67,118,158, 26, 35, 6,247, 69, 72,104, 36, 78, 93,188,201, 26, 12, +220, 58, 83,203,216,176, 97, 67,100,102,102, 66, 32, 16, 64, 46,151, 67,161, 80,160, 81,163, 70,136,143,143, 47, 51, 87,124, 23, + 97,181, 44, 56,121,242,164,131, 80, 40,116, 50, 26,141,136,139,139, 67,120,120, 56,214,174, 93,155,154,159,159, 31, 16, 28, 28, + 28, 85, 27, 81,137, 68,146, 86, 26,185,146, 72, 36,105, 85, 69,182, 94,103,204,149,171,171,171,151,139,131,244,236, 31,107, 39, +214,241,105,217,154, 49, 19, 40,179, 11,159,166,118,188,125,243,102,251, 57,191,238,159,224,234,234,218, 61, 33, 33,225,105,165, +141, 31,195,244,106,225,219, 82, 8,154, 2,161,164, 35, 86, 44, 31,140,244,140, 60,100,103,229, 67, 44, 86, 64,103, 16,192,200, + 17,180,239,216, 9,191,111,219,131,166, 77,155, 9, 4, 64,183,183,201, 96,149, 68,128,151, 29, 62,124,184,190, 76, 38,195,226, +197,139, 97,110,110,142,155,223,127,143,223,196, 98,152, 1,216,168,215,207, 2,192, 27,172,255, 47,131,165,112,108, 52,100,247, + 39,221, 58,120,123,186, 48,134,189,107,145, 80,196,106,230, 61,210,107, 30,230,211,247, 35, 40,189, 86,149,175, 32,132, 80,177, + 88, 12,199,153,223,163,110,179,230, 40, 28, 61, 0, 89, 6, 61,188,142,223,132, 84,169,196,195,110,190,160, 58, 29,222,121,152, +102,170,113,161,132, 16, 10, 0,246,246,246, 16,139,197,144,201,100,144, 74,165,144, 74,165,101,198, 74, 34,145, 64, 34,145,152, +108,134, 56,142, 67,126,126, 62,158, 63,127,142,209,163, 71, 67, 46,151,163, 36,212,141,186,117,235, 66, 40, 20, 34, 49, 49, 17, + 23, 46, 92,128,167,167, 39, 36, 18, 73,141,218,218,114, 13,182,143,139,139,203, 37, 66,136,207,221,187,119, 45,252,253,253, 97, +106, 4,171,184, 53, 20, 67,139,186,224,136,219, 11, 99,173, 12, 6,246,133,109, 41,141,190,152, 24,185,234, 86,191,126,253,181, +203,151, 47,103, 92, 93, 93,193,113, 28,172,173,173, 81, 84, 84,132,140,140, 76,120,123,123,195,205,205, 13,203,151, 47, 7,128, +221,255, 45,115, 5, 20,119, 7,151, 26,172,242, 70,107,210,251,117,144,149,165,132, 64,192,148, 25,230,106,247, 57,165, 88,183, +124, 94,200,208,209,211,124,167,204, 89, 1,141, 86, 15,181, 86, 7,141, 86, 7,141, 86, 95,242, 87,135,210,129,237, 41, 17, 23, +222,186, 8, 22, 33,164, 79, 96, 96,224,250, 85,171, 86, 57, 57, 57, 57,137,210,211,211,217,159,127,254,185,199,207, 63,255, 28, + 49, 97,194, 4,239, 9, 19, 38, 88,219,219,219, 11, 83, 82, 82, 12, 83,167, 78,237, 65, 8,153, 69, 41,221, 93,229,245, 66, 97, +110, 35, 16, 43, 64,136, 16, 86,150,214, 16, 74, 20,224, 88, 33,140, 28, 96, 97,105,143,235, 33,251,113, 45, 44,127, 76, 90, 38, +246,153,114, 83,213,172, 89, 51, 42, 16, 8, 96,107,107,251, 66,215, 32, 0, 56, 58, 58, 34, 47, 47, 15, 2,129,160,236, 53,158, +202,175, 65,148, 82, 60,123,246, 12, 69, 69, 69,184,126,253, 58, 14, 28, 56,144,254,178,185, 10, 12, 12,252, 66,169, 84,206, 87, +171,213, 43, 78,159, 62,189,182, 58,221,146, 49, 87,111,140,138, 82, 49,248,249,249,137,156,108, 5,167,207, 28, 92, 93,215,156, +187, 71, 16,243, 57,240, 56, 47, 92,121,203,225,157,174,173,222, 99,154,127, 63,217,189,215,236, 31, 79,251,249,249, 53,170, 44, +146, 69, 41,245, 53, 83, 40, 1,164, 34,248,110, 80,153,185,202,204,202,133, 86, 47,128, 86, 71,160,209, 51,120, 55,176, 39,214, +111,250, 19,137,169,153, 40,157, 97,248, 54,209,160, 65, 3, 63, 23, 23, 23, 76,153, 50, 5,154, 93,187, 80, 0,160, 15,128,195, +122, 61, 0,192, 28,152,198,159, 45,255, 79, 6,203,202,169, 81,231, 57, 51, 39,175,233,248, 97, 79, 38,245,139,118,200, 41,208, +106,103, 68,176, 92, 66, 81,181,230, 10,148, 82,218,184,113, 99, 48, 12, 3,165,165, 21,204, 44, 44,160, 41, 23,185,146, 42,205, + 65,117, 58,112,122, 29,196, 38, 94, 28, 75, 53, 41,165, 48, 51, 51,131, 88, 44,126,161,107,176,212, 88,213, 36,130, 5, 0, 57, + 57, 57,216,183,111, 31, 90,183,110, 13,185, 92, 14,161, 80, 8, 31, 31, 31, 68, 70, 70,194,203,203, 11,132, 16, 28, 62,124, 24, +253,251,247,199,211,167, 79,225,237,237,173,172,141,193, 58,123,246,172, 5,165,244, 29, 74, 41, 50, 50, 50,106,181, 19, 57,142, + 67, 65, 65, 1,206,156, 57,131,228,228,100, 56, 58, 58, 34, 59, 71, 14, 75, 85,147,226,223, 42,103,178, 76,100,124,159, 62,125, + 24, 66, 8,212,106, 53,164, 82, 41, 20, 10, 37,204,205, 45,208,176, 97, 35, 36, 38, 38,162,123,247,238,198, 39, 79,158,236, 18, +139,197,235,106, 90,222,122,245,234,153,231,228,228,188,231,225,225, 33, 6, 0, 51, 51,179, 62,238,238,238,150, 49, 49, 49,185, + 53, 52, 3,101,198,138, 16, 82, 54, 3,149, 97, 24, 8, 25, 6,206, 78, 14,101,207, 75,182,157, 84, 87,143, 67,190,152,230,203, + 25,117,216,190,234, 83, 16, 54, 19, 44, 44,161,133, 11, 88,163,160,204,192, 42, 20, 10, 52,237,252,209, 91, 25,193, 18,139,197, +195,183,110,221,234,242,199, 31,127,228, 28, 57,114, 36,183, 77,155, 54,138, 53,107,214, 56,172, 95,191,190,139, 78,167,195,148, + 41, 83,210,110,221,186, 85,216,175, 95, 63,203, 45, 91,182,184,212,175, 95,255,125, 84, 48, 46,139, 16,162, 0, 48, 24,192, 39, + 1,173, 45,133, 57,249,106,112,172, 14,207, 98,158, 35,183, 64, 7,206,168, 71, 92, 66, 18, 10, 52, 70,100,102,229,195,199,183, +251, 79, 65, 65, 65,223, 18, 66,102, 83, 74,143, 85, 87, 78,163,209,136,155, 55,111,226,218,181,107,184,124,249, 50, 98, 99, 99, +203,222,179,176,176,192,217,179,103,209,165, 75, 23,254, 10, 95,245, 53,104, 94,247,238,221,231,217,218,218,202,214,173, 91,103, + 89,183,110, 93,176, 44,171,123, 57,114,229,239,239, 63,103,206,156, 57,206, 31,124,240,193, 68, 0,107,107,251,123,149, 69,182, + 76,224,149, 84, 12,233,233, 41, 95,252,180,117,184,157, 66, 28,155,132,199, 63,186,148,196, 98,128,162, 60, 32,104, 39, 72,135, +185,207, 71, 4,142,183, 94,126,100,253, 23, 0, 54, 84, 38,252,228,105, 60, 54,110, 92,143,175,166,140,192,239,191,174, 0,199, + 9,161, 53, 8, 80,199,163, 45,180,122, 14,132, 17,162,133,175, 63, 46, 6, 93,129,136, 1, 38,143,185,245,214, 29, 7,143, 31, + 63,190, 29, 27, 27,219,120,238,220,185,248,221,197, 5,230,230,230,152, 58,111,222, 13,150,101,219,243,103,201,255,147,193,242, +107,232,245,189,165,141,245,168,246,173,154,216, 78,157,248,133,232,105,138, 6, 23, 58,126,147,179,127,249, 76,101, 60, 85, 78, +136,165, 57,215,106, 18,117, 96, 23, 78, 69,166, 81, 7,143,163,215, 33, 85, 42, 17,213,195, 31, 84,167, 67,135,144, 88, 72,149, + 74, 8,101,102,181, 57,129, 95,232, 14,124,249, 57,195,152,150,184, 94,175,215, 91,117,235,214, 13, 93,187,118,197,135, 31,126, + 88, 54,230,170,101,203,150,216,189,123, 55, 6, 12, 24,128,123,247,238,193,217,217, 25,141, 27, 55, 70,227,198,141,113,225,194, +133, 26,223, 61, 26,141, 70,244,232,209, 35,143, 16, 18, 74, 41,245,185,125,251,182, 69, 77, 53, 74, 27,155, 51,103,206,224,189, +247,222,131,151,151, 23,130,131,131,113,102,193, 15,144,219,212, 1, 96, 5,206,104,132, 78,167, 3,195, 48,213,142,193, 10, 8, + 8, 16, 10, 4,130, 70,245,234,213, 67,122,122, 58,210,211,211, 97,111,111, 15,149, 74, 5, 7, 7, 7,172, 90,181, 10,107,214, +172,185, 77, 41, 93,150,146,146,242,176,166,251, 72,165, 82, 5, 90, 91, 91,255,160, 86,171,197,165,101, 33,132,136,156,157,157, +111,168, 84,170, 89, 73, 73, 73, 71,107, 98,176,244,122, 61, 8, 33, 56,254, 76,133, 66, 29, 65, 94, 66, 48, 38,191, 95,247, 5, +195, 37, 18,137, 94, 72,171, 81,185,193,162,216,181,245,199,144, 89,223,124,230,139,172, 29, 96, 51,119,128, 88, 15,193,129,240, +158,248,243,150, 45, 0,160,161, 19,131, 31, 71, 41,223,218, 8,150, 94,175,223,210,160, 65, 3,232,116,186,243, 0,182,134,134, +134,246, 79, 78, 78, 94,253,215, 95,127,169, 6, 13, 26,148,116,244,232,209,175, 0, 28, 10, 13, 13, 29,185,120,241,226,174, 6, +131,161,194,217,101, 2,129,224,247,169, 83,167, 6, 12, 26, 52,136,136, 25,131,238,204,233,109, 66,150, 53,144,233,179,127, 49, + 6, 93,189,196,176,172,129,124,248,241, 84,238,196,133, 48,102,204,164,149,198,150,109,223,195,131, 7, 15,156,250,244,233,179, + 8,128, 73, 6, 75, 36, 18,149, 25,232, 10,126,159,239, 34,172,134,243,231,207,111, 6,176, 57, 32, 32, 32, 85,161, 80,160,160, +160,224,149,115,164, 93,187,118, 50,149, 74, 37, 19,137, 68,104,221,186,181, 77,143, 30, 61,162, 24,134, 89,123,242,228,201, 26, + 39,161,172, 40,178, 85,219, 52, 13,230,214, 92,159,150,109,155,154, 63, 50,159,111, 46, 19,106,238,185, 71,201, 44, 8,128, 92, +173,227,179,235,177,131,243, 72,154,180,101,179, 64,119,200, 25, 89,159,202, 12, 22, 33, 36, 36, 47, 39,183, 87, 94,190, 14, 87, +175, 61,192,199,131,235, 67,171, 39,224, 56, 6, 5,133, 90, 64, 32, 2, 3, 96,200,208,225,160, 68,136,236,140, 20, 16, 32,236, +109, 59, 14,140, 70,227,172,126,253,250,181, 90,188,120,113,147,169, 83,167,150,238,151,118, 42,149, 42,130,207,131,245,255, 96, +176, 26,120,185,246,236,220,202,127,210,183,179,191, 53,127,124,251, 50,190, 93,244, 19, 87,223,191, 71,238,178, 93,135,243,115, +149,117,186, 22, 37, 61,188, 87,211,168,131,136, 53,128,178,122, 72,149,202, 23, 34, 87, 18,133, 2, 34, 51,121,141, 54,130, 16, + 2, 74,233, 43,221,129,229,205, 85, 77, 46,182, 18,137, 36,231,202,149, 43, 14, 9, 9, 9, 47, 12,104,247,240,240, 0, 33, 4, +183,110,221,194,205,155, 55,241,241,199, 31, 67, 40, 20, 66, 36, 18, 33, 52, 52, 52,191, 54, 17,172,210, 89,132,206,206,206, 61, +218,180,105, 83,225,236, 65, 83, 34, 88,113,113,113,240,242,242,130, 86,171,133,181,181, 53,178, 82,158,225,233,227,135, 40,210, + 26,224,238, 32, 65, 70, 70, 6, 74,243,122, 85,197,165, 75,151,168, 74,165,122, 33,242,147,158,158, 14, 79, 79, 79,108,220,184, + 17,107,214,172,217,144,156,156, 92,227,187, 88, 23, 23, 23, 27,142,227, 22,247,233,211,167,111,255,254,253,209,163, 71,143, 23, +222,223,177, 99,135,229,193,131, 7, 55,185,185,185,245, 23, 8, 4,179, 98, 98, 98, 82,171,219,231, 0,240,219,111,197,233,147, +228,109,231, 97,214, 32,119,124, 50,126, 27,126,252,241, 32,164, 82,233, 11,141,237,194,133, 11,171,175, 71, 74,209,237,195,207, +125,187,248,232, 96,204, 60, 12,139,246,217,200,187,110,141,220,124, 95,220, 90,213, 27, 0,208,252,179, 99,160,212, 29, 0,222, +202, 8, 22,165,244, 44,128,179,229, 94,218, 79, 8, 49, 16, 66,134, 2,216, 67, 41, 61, 88,242,250, 47,168, 34, 49,104,219,182, +109, 91,206,158, 61, 91, 84,154, 54, 67, 85,103, 49,171,215,235, 57, 0,104,228,243,206, 11,125,213,209,209,209,248,241,199, 31, + 81, 88, 88, 8,113, 13,194,204,129,129,129,101, 99, 34,197, 98, 49,236,236,236,160,215,235,193,178, 44,111,174,106,198,188,222, +189,123,207,163,148, 82,142,227,230,150,187,217,146, 90, 91, 91, 95,249,233,167,159,108, 89,150,197,180,105,211,172, 50, 51, 51, +173,198,142, 29, 59, 11, 64,165, 6,171,146, 52, 13,149, 29,111,181, 74,211,192,113,104,168, 84, 90, 32, 19, 9,208,218, 25, 90, +230,216,178, 89,103,147,191,184,167,138,245,245, 86, 24, 13,158, 76,158, 14,150, 50,115, 80, 74, 27, 86,246,219, 44,199,157,124, + 24, 17,209,189,142, 91,125,193, 95,199, 46,163, 95,255, 65,208,106, 25,104, 12, 4, 68, 32, 2, 17,136,209,220,199, 23,141,155, +250,128, 2,136, 10, 15,101,141, 47,158, 27,255,243,212, 29,240,203, 6,215,190, 63,143, 3,128,105,107,207,227,219,239, 87, 99, +216,135, 61, 48,114,228, 72, 62, 15,214,255,135,193,170, 83,167,142,149,131, 82,254,219,132,207, 70,153,199,222,191,129,132,208, + 27,184,118, 53, 42,123,231,129, 35,137,121,185,233,159,213,196, 92,149,143, 96,121,237, 56, 14, 23,103,231,178,200, 85,251,224, + 24, 72,149, 74, 4, 53,119, 1,167,213,162,251,243,188, 26,111, 76, 69, 81, 43,177, 88, 92,171,153,126,165,166,234,229, 1,237, + 99,198,140,193,214,173, 91,209,161, 67, 7, 52,104,208,160,214,119,202, 47,143,137,170,201,236,193,138,180,234,212,169,131,176, +176, 48, 88, 90, 90, 98,251,246,237,112,117,117,193,200,158, 94, 16, 8,138,187,182, 24,134, 49,105, 12, 22,165,212,232,226,226, +242,236,204,153, 51,158,131, 6, 13,130, 88, 44, 70,118,118, 54, 44, 44, 44,176,126,253,122, 78, 46,151,255, 94,211,242,185,185, +185,141,148,201,100, 11, 6, 15, 30, 44,108,212,168, 17, 82, 83, 83, 97,105,105,201,149, 44,109, 4, 27, 27,107, 78, 46,151, 99, +204,152, 49,240,241,241,233, 54,115,230,204,174, 42,149,106,105, 82, 82,210,207,213,153,172,221,187,139,123,167, 62, 91,251, 16, + 58, 93,241, 80,139, 13, 27, 54,192,217,217,249,133,207, 62,121,242,164,250, 89,132, 28,135,179, 7,126, 9, 25, 63,113,176, 47, +177, 30,130,188,235,214,160,150, 31, 35,181,192, 28, 59, 46,165,225, 82, 72,108, 89,162,209,183, 45,130, 69, 8,233,135,226,161, + 23, 39, 40,165,135, 8, 33, 3, 1,244, 40,125,142, 26, 38, 22,101, 89,150, 50, 12, 67,226,227,227,245,114,185,156,216,216,216, + 8,165, 82, 41,180, 90,109,153,209,138,142,142,198,177, 99,199,144,144,144, 0, 27, 27, 27,198,210,210, 18,122,189, 62,219,196, +187,238, 87,210, 51,148,252, 46,111,174,106, 72, 80, 80,208,102, 0,155, 75,159,191,251,238,187, 35,133, 66,225,183, 0, 44,183, +108,217, 98,101,101,101, 69,142, 30, 61,106,216,178,101, 75,142, 64, 32,200, 6,176,186, 42,189,138, 6,179,191, 14, 21,165, 98, +160, 20, 17, 89,185,207,234,138,172, 84,220,125, 13,189, 62, 37,126, 86,227,108, 81,125,123,210,180, 25,250,167, 69, 94, 29,201, + 62,105,159,158,146,198, 80,208,136,202,116,115,115,115,127,249,125,219,190,233,123,247,252, 86, 71,170,148, 98,204,216,217, 56, +126,234, 34, 8, 35,194,149,235,183,160,211, 27,145,145,149,139,193, 67,134,193,213,217, 14, 40, 72, 76, 23, 73, 36, 63,191, 77, +251,254,133, 60, 88,254,237,113,237,224, 74,236,142,170,131,196,239,191,231,243, 96,253,157, 6,203,221,221, 93,170, 16, 97,180, +141,153,120,198,132,161, 31,216,167, 61, 9, 71, 66,100, 8, 0, 64,171, 85, 27,146,163, 46,181, 48,225,162, 29,248,114,174,140, +210,174, 27, 27,123,135,178,200, 85,249,217,131,156, 86, 11, 78,175, 3, 42,233,206,169, 76,147, 97,152, 87,140, 85,249, 11,111, + 77,202, 89, 26, 29,169, 40,193,168,155,155, 27,150, 46, 93,250, 74, 30, 44, 83,202, 89,114,151,214,131, 16,226, 83,106,140, 40, +165, 62,206,206,206, 61, 76,153, 57, 88,153,102,105,198,234,147, 39, 79, 34, 34, 34, 2,148, 82,244,233,211, 7, 34,145, 8,230, +230,230,101, 38,171,162, 49, 88, 21,105, 50, 12,243,249,193,131, 7,167,223,184,113,163,231,180,105,211, 72,233, 88,150,130,130, + 2, 46, 57, 57, 57,191,166,229,228, 56,110,198,233,211,167,133, 70,163, 17, 91,183,110,197,157, 59,119,168, 92, 46, 95, 38, 18, +137,150,202,229,114,214, 96, 48,124,253,197, 23, 95,140,157, 63,127, 62,211,169, 83, 39,220,184,113,131,241,244,244,156, 8,224, +231,234,182,253,214,173, 91,197, 93,206, 89,113, 24, 63,107, 15, 20,102, 66, 60,124,248, 16, 89, 89, 89,175, 36, 31,173,190,156, + 20,190, 93, 6,249,114, 84, 15,189,114, 16, 24,179,119,139,151,202,121,174, 69, 43,159,226,168,163, 58, 47,189,172, 30, 43,138, + 96, 85, 86,206,215, 52, 63,127,171, 38, 33,164,111,147, 38, 77,190,137,136,136,112,109,222,188,185, 55, 33, 36,160, 89,179,102, +173,194,194,194, 74,159,139, 40,165,123,107,162,121,231,206,157,253,235,215,175, 31, 59, 98,196, 8, 49,199,113,198,216,216, 88, + 3, 0,226,228,228, 36,184,115,231, 14,247,215, 95,127, 65,173, 86,195,213,213,149,113,113,113, 33,103,207,158,229, 34, 35, 35, +111, 81, 74,103,155,186,237,165,145,105,145, 72, 4,129, 64, 0,181, 90,109,146,185,250, 95,220, 71,255,159,154, 2,129, 96,225, +129, 3, 7, 92,180, 90, 45,196, 98, 49,246,237,219,167,223,182,109, 91, 68,110,110,110,199,224,224, 96,117,109,203, 89,147, 4, +164,213,105, 22,228, 8,142,159, 58,253,160,149,160,231, 47, 24,159,148,222,177,204,120, 17, 98,115,208,209,187,163,188,117,243, + 68,243,203, 43,153, 34,104,142, 87,166,249,228,201, 19,157,191,191,255,160,153, 51,230,157, 95,176,104,129,114,238,188,121,184, +118, 43, 12,153, 57, 5,224,168, 0, 28, 33,248,246,219,185,112,178,179,129,141,196, 80,148, 89, 72,250,191,188,100,206,255,250, +126,127,157, 60, 88,127, 71, 57,255, 53, 6,203, 92,136, 7, 29,189,189, 92, 58,249, 54,149, 9,141,106, 36, 68, 62, 65, 86,161, + 6,103,195, 99,115, 24,202,252,254, 58, 63, 42, 16, 8, 96,105,105, 9,177, 88,140,118, 97,137,144,136,197,144, 42,205, 1,160, + 56,114, 69, 41, 24,137,180,166, 7, 80,133, 6,171,182, 24,141, 70, 56, 58, 58,190,176,236, 74,249, 6,187,212, 40,214, 52, 69, + 3,195, 48,179,110,220,184, 97, 17, 23, 23, 7, 74, 41, 14, 29, 58,100, 49, 96,192,128, 89,181,137, 94, 81, 74,145,153,153, 9, +142,227, 32,149, 74,209,179,103, 79,116,234,212, 9,250,146,217, 31,165, 13, 80, 77, 51,185,199,199,199, 39, 3,248,202,213,213, +245,247,233,211,167,207,104,211,166,141,255,252,249,243, 65, 8,169,109,104, 64,111, 52, 26,113,233,210, 37, 28, 60,120,144,213, +104, 52, 3, 82, 82, 82,238,150,123,127,145,171,171,235, 95, 3, 6, 12, 56,241,232,209, 35, 97, 68, 68, 4, 0,176,213,137,170, +213,106, 52,104,208, 0, 44,203, 98,249,120, 55,228,231, 55, 7,203,178, 48, 26,141, 80, 40, 20, 47,228,253, 50,101, 63,113,148, + 67,200,197,125, 33,117, 91,246,240,173,110,169,156,183, 44,130,213, 51, 34, 34,194,117,232,208,161,105, 97, 97, 97,174,199,142, + 29,179,234,211,167,143, 98,200,144, 33,105, 97, 97, 97,174,132,144,119, 0,236,173,225,249,243, 13, 33,228,212,146, 37, 75,102, + 77,154, 52,169,205,136, 17, 35, 68, 34,145,136, 75, 76, 76,100,119,237,218, 69, 26, 52,104,192,136,197, 98,114,250,244,105,238, +246,237,219, 55, 89,150, 93, 78, 41,189, 82,211,235, 72,169,185,226,199, 92,189, 81,246, 14, 26, 52,104,228,128, 1, 3,204, 90, +183,110, 45,253,229,151, 95,114,139,138,138, 42, 52, 87, 21, 81,147, 52, 13, 53, 77, 64, 90, 74, 82, 82,210,175, 75, 23, 94,158, +242, 73,227, 33, 94,159,219,185,227, 92, 97, 26,178,133, 2,198,194,138,129,111, 93, 1,212, 57,207,237,207,223, 58,240, 60, 57, + 41,169,202,188,106,119,239,222,189,227,231,231, 23,248,201, 39, 35, 15,140,249,236, 11,135,185,223,204, 20,237,255,235, 4,192, +234,113,251,202, 21, 88,201, 9,101, 11,147, 83, 51,117,228,131,183,113,169,156,216,131,159,143, 7, 48,158, 16,242,241,188,121, +243,118,141, 31, 63, 30, 28,199, 33, 40, 40, 8, 63,207,156,137,249, 70,227,167,235, 8, 41,154, 68,233,120,254,180,120,131, 6, + 11, 12,201,191,249, 56,182,224,214,227,216, 2,112,148,114,148,106, 25, 6,241,133,122,253,146,168,167, 9,167, 95,103,159,246, +236,217,147,121,217,184, 84, 4,203,178,166, 14,174,139, 13, 12, 12,124, 99,154, 28,199, 37,116,236,216,241,149,134,185,178,255, + 75,116, 19, 76, 10,201,114,220,178,118,237,218,189,242, 90,173,194,187, 28,247,172,107,215,174,250,151, 77, 87, 85,207,141, 70, + 99,130,169,250, 9, 9, 9, 15, 0, 12,115,113,113,233,210,163, 71,143,137, 0,106,155,142, 97, 85,151, 46, 93,166, 82, 74,133, +132,144,149, 47,153,171,210,223, 10,119,113,113,153,235,233,233, 89,182, 0,116,117,219, 30, 24, 24,168,175,110,145,231,242, 3, +160, 57,142, 75,168, 90,147,162, 78,139,238,190,122, 67,177, 73,171,106,169,156,202, 34, 88,255,163,236, 33,132,136, 0,100, 71, + 68, 68,188, 83, 18,185, 74,120,240,224,193,185,221,187,119, 59, 2,213,167, 79,168,228, 6,224, 10,128, 43,132,144, 78, 27, 54, +108,248,102,204,152, 49,173, 63,254,248, 99, 97, 64, 64, 0,142, 31, 63,110, 12, 10, 10,186,165, 86,171,151,213,212, 88, 17, 66, + 10, 94, 62,135,170, 40,195, 91,191, 72,239,155,230,236,217,179, 95,183,107,215,110,238,190,125,251,146,188,188,188,164, 34,145, + 72,103,170,185, 2,106,150,166,129, 82,202,213,242,216, 98, 29, 29, 29,123,239, 24, 58,254, 72,139, 9, 35, 60,122,118,240,151, +187,184, 59,184, 60,122,158,129,132,176,115,133, 79,131,214,199, 24, 53, 89,253, 40,165,213,222,168, 5, 7, 7,223,110,215,174, + 93,253, 13, 91, 54,141, 23, 48, 76,119,214,104,244,153, 58,126, 24, 37, 64, 24, 7,156, 21, 75, 37,111,253, 98,207, 82,177,248, +211, 9, 19, 38,224,207, 63,255,196,161, 53,107,208, 35, 33, 1,187,197, 98,152,137,197,216,168,215,143, 3,192, 27,172, 55,105, +176,194, 30, 63,247,251, 59,126, 48, 34, 34,162,221, 63, 93, 51, 34, 34,194,255,239,170,240,215, 25,107, 85, 65, 57,255, 95,166, +209, 38, 38, 38, 94, 4,112,241, 53,190,191, 13, 38, 44,230,108,234,231, 0,224,225,195,135,111,124,219,169,212,114, 80,220,253, + 51, 57, 78, 77,222,181, 98, 89, 22,132, 16,104, 52, 26,220,188,121, 19,218,162,124, 4,237, 28, 93,150,201, 29, 20, 72,137,188, +144,227,228,209,204,234,127,253, 34, 64, 41,189, 12,224,114,137,121,233, 79, 8,233, 13,224, 52,165,116,255, 27,210, 47, 51, 90, + 91,182,108,153, 66, 41, 69, 94, 94,222,154,154, 26,171,178,107, 83, 88,216, 5,240,252,173,220,184,113, 67,211,181,107,215,223, + 23, 47, 94,220,150,227,184, 63,222,132,230,107,164,105,168,144,212,212,212,231,132,144, 22,220,247,107, 71, 5, 91,153,191, 71, + 13, 76, 35, 98, 16, 30, 37,186,204,227, 41, 41, 41,191, 81, 74,141, 53,217,222,146,155,186, 31,255,141,251,251,126, 88, 88, 15, + 0,232,213,171, 23,212,211,138,211, 94,109,251, 79, 30,172,141,252, 25,241,166, 35, 88, 60, 60,255, 50, 18,163,130,247, 3, 64, + 74,100,113,251,253,211, 79, 63, 1, 0,122,244,232,241,202,172,199,210,207,164, 60,127,240, 86,213, 65,201,128,246, 67,127,147, +246, 21, 0, 87,248, 35,237,127,131,243,231,207,191,209, 4,147,111, 58, 1,105,201, 49,101, 4,176,181,228,193, 83, 75, 26, 54, +108, 72, 0,192,206,206, 14,115,106,176,156, 26, 79,213, 48,124, 21,240,240,240,240,240,240,240,240,188, 89, 8,128,192, 74,238, + 12, 76,158, 29, 64, 8, 9,172,197,157,199, 57, 94,147,215,228, 53,121, 77, 94,147,215,228, 53,255, 93,154,213,105,191, 53,179, + 19, 75, 51, 92,255, 29, 15, 0,129,188, 38,175,201,107,242,154,188, 38,175,201,107,242,154,255,182, 71, 21, 99,176,246, 11, 18, + 19, 97, 33,145,200,197, 0,160,211, 21,233, 93, 92,144, 7, 12, 52,130,135,167, 38, 97, 82, 66, 28, 75,204,124,234,155,252, 44, + 15, 15, 15, 15, 15,207, 63, 21, 97,101,230, 42, 35, 67,110, 39, 20,102, 55, 52, 26, 53,141, 1, 64, 40,100, 30,102,100, 88, 71, +217,217,237,207,120,211, 38,171, 87,175, 94,179, 41,165,142, 34,145,232,184,147,147, 83,208,230,205,155, 13,255,102,163,241, 58, + 38,227,255,195,160,216,218,218,170, 28, 29, 29,135, 90, 89, 89, 5,228,230,230, 94, 73, 73, 73,217,158,153,153,153, 84, 73,121, +150, 18,130, 25, 37,255,175,160,148,126, 83, 69,217, 77,254,236,203,168, 84,170, 6, 50,153,108, 60,195, 48,205, 0,128,227,184, + 7, 26,141,102, 67, 82, 82,210,227,127,219, 73,173, 82,169,204, 40,165, 31,136, 68,162,225, 54, 54, 54,173,211,211,211,231, 39, + 38, 38,174,174,229, 49, 43, 4, 48,205,202,202,234, 99, 43, 43, 43,207,172,172,172,167,121,121,121,123, 1,252, 72, 41,173,246, + 60, 93, 48, 89,213, 46,160, 71,192,156,160,211, 65,139,230,173, 77,186,241,202,251, 95,171,108,187,119,235, 48, 55,232,232,245, +133,223,172, 79,204,170, 97,217, 24,252,103, 28, 41, 87,124,216,255,115, 71,232, 58, 56, 56,180, 45, 73,164,202, 48, 12,243, 99, +106,106,234,197,127,242,113,100,111,111,175,112,114,114, 90, 78, 8,233, 43, 16, 8, 34, 82, 83, 83, 71, 39, 37, 37, 37,188,161, +107, 33, 83,183,110, 93,243,216,216,216,252,218,166,106,248, 55,210,174, 93,187, 84,189, 94, 95,101,118,124,177, 88,156,118,227, +198, 13, 71,190,182,254,161, 6, 43, 49, 17, 22, 66, 97,118,195,180,148,176,193, 73,201,161, 31, 1,128,202,217,103,175,131, 83, +243, 61,137,137, 18,125,171,110, 3,148, 34,185,112,131, 64, 32,106,169,209,105,237, 68, 66, 81,134,158, 53,220, 99,116,116,124, +242,195,131,113,166,252,112,223,190,125, 27, 2,176,244,245,245,189,163,211,233, 90,175, 94,189,218,249,192,129, 3, 62,193,193, +193, 67,222,127,255,253,163,148,210,211, 71,143, 30, 85,215,232,164, 13, 8, 16, 58,228,216,124, 42, 16, 10,251, 2,240,161, 20, + 0, 17,132,114,122,221,137, 52,177,205, 31, 52,184,246,198,173, 93, 3,219,134,132,234,167,139, 8,237,100,160,228, 10, 37,226, +149, 55, 30,103, 70,213,224,130, 98,146,121,120, 29,147,241,210,119,215, 80, 74,167,189,233, 3,198,201,201,201,110,224,192,129, + 59, 22, 45, 90,164, 48, 55, 55, 39, 49, 49, 49,253,191,249,230,155, 30, 42,149,234,147,164,164,164,248,151,205, 30, 33,152,193, +113,148, 1, 0,134, 33, 51, 29, 29, 29,155, 9,133, 66,237,203,186, 44,203, 74, 9, 65, 79,142, 43, 94,206,134, 97,200, 12, 66, +200, 90, 83,140,162,167,167,231,144,230, 62, 45,167,126, 51,123,174,210,222,193, 65,193,178, 70,125,124, 98,130,124,229,210,239, +219,120,122,122,174,125,246,236,217,174,154,110, 39, 33,132,184,186,186, 14, 22,137, 68,125, 0, 52, 41,121, 57,210, 96, 48, 28, + 75, 72, 72,216, 99,106, 67,222,162, 69,139,203, 12,195,184,215,228,183,141, 70, 99, 92,104,104,104,199,218,236, 31, 23, 23,151, + 65, 46, 46, 46,191,181,109,219, 86,222,178,101, 75,136,197, 98,172, 88,177, 98, 26,170, 89,222,164,212, 72,201,229,242,193, 10, +133,194,171,160,160,224,137, 90,173, 62, 32,145, 72, 2,215,174, 93,235,214,161, 67, 7,243,212,212, 84, 34, 16, 8, 28,143, 29, + 59,246,233,186,117,235,122, 16, 66,186, 86,151,103, 40,247, 9,157, 35,237,219,164, 83,238,147,139,115, 0,244,122,101,191,107, +100,195,169,192,173,143,154,134,196,163, 6, 83,228, 9, 33,140,171,171,235, 90, 71, 71,199,145,106,181, 90, 67, 8,161,132, 16, +218,188,121,243,210,247, 1, 0, 58,157, 46,251,209,163, 71,141,170,210,242,104,103,115, 87,192, 8, 92, 43,221, 31,156, 49,225, +249,141,172,215, 78,221, 98, 52, 26,103, 68, 68, 68,244, 22,137, 68,164, 69,139, 22, 2,212, 32,245,137, 74,165,106, 72, 8,249, +150, 82,122, 39, 57, 57,121, 67,201,146, 86, 93, 40,165,101,215,138,146,116, 42,112,113,113,217, 80,191,126,253,247,163,163,163, + 55, 38, 38, 38, 46,122, 13,163,190,121,201,146, 37, 31,245,232,209, 67,144,153,153,233,210,189,123,247,157, 0, 58,189, 78, 29, +248,249,249,137, 82, 82, 82,166,181,104,209,226,203, 86,173, 90, 57,135,135,135,167,168, 84,170,117, 78, 78, 78, 63, 6, 7, 7, + 87,123,125,246,241,241, 81, 9,133,194,145, 0, 62, 5, 32,160,148,238, 6,240, 71, 72, 72,200,211,127, 67,131,173,215,235, 29, +206, 45,154, 11, 34, 20, 66,214,177, 43, 56,142, 67,198,202,121, 96,179, 50, 96,183,104, 29, 88,150, 69, 96, 96,160, 3,120,254, +185, 6, 75, 34,145,139,141, 70, 77,227,164,228,208,143,222,233,252,147, 37, 0, 92,190,244,229, 71, 14, 78, 77, 31, 72, 36,242, + 40,169,133,236,224,128,190,129, 45, 7,246,233, 76, 92,157, 29,144,144,156,230,248,235,238,211, 61,143,157,190,120, 16,128, 73, +249,179,242,242,242, 22,215,173, 91,215,254,252,249,243, 49, 18,137,196, 76, 38,147,145, 65,131, 6,153, 13, 25, 50,196,251,194, +133, 11, 94,167, 78,157, 26,216,175, 95,191, 83, 98,177,248,248,190,125,251,170, 93,159,204,177,121,127,111, 39,161,211,254,126, + 31,244,114,127,175,155,131,164,174,147, 61, 40, 39,195,195,103,250, 58,103,175,132,244, 60,126,242,244, 12, 7,239,254, 31,166, + 69, 28, 50,121, 53,244,102,205, 44,173,204,212,116,170,153,152,126,220,179,141,183, 71,223,110,237,137,167,167, 39,162, 30, 69, +121, 93,188,118,103,100,151,198,230,207,213,122,178, 91,109, 70, 86, 61,120,144,155, 83, 85, 84,169,188,209, 16, 8,152, 89,221, +186,117, 27, 41,149, 74, 95,184,115,211,106,181, 12,195, 16, 7,163,177,248,229,154,152,140,210,223,208,233,180,140, 72, 36,129, + 64,192, 76,109,217,178,101,175,212,212,212,147, 82,169,116,197,243,231,207,107,148,119,102, 18, 33,146,108,161,208,143,145, 74, +157,141, 58,157, 45, 0, 16,137, 36,187,142,173,109,219,239,190,251, 78, 41, 16, 8,144,153,153, 9,141, 70, 67, 62,255,252,115, +179, 39, 79,158,140, 0,176,176, 58,211,178,109,219, 54, 95, 91, 91,219, 87,238, 88, 51, 51, 51,153, 94,189,122,214, 56,111,167, + 74,165,106,216,194,215,255,171, 93, 59,119, 52,201,203,202,214,108, 93,189, 57,216, 32,147,107, 61,155, 52, 18,125,191,116,149, +229,156,153, 83,191, 84,169, 84,247,146,146,146, 76, 54,195,206,206,206,117,220,221,221, 15,206,158, 61,187, 89,199,142, 29, 69, + 14, 14, 14, 72, 77, 77,197,163, 71,143,154, 93,187,118,237,131,195,135, 15, 79,115,118,118, 30,144,156,156, 92,237,205, 4,165, +180,193,145,149, 75, 29,164, 54,182,224, 12, 6,216,248,248,150, 37,127, 77,190,120, 6, 70,189, 30,156,193, 0,183,247, 62, 64, + 73,228, 13,239,190,251,110,173, 82,146,187,186,186,170, 26, 54,108,248,231,172, 89,179,196, 58,157, 14, 33, 33, 33,184,113,227, + 6,151,150,150,182,172, 58,115, 69, 8, 57, 51,111,222, 60,215,142, 29, 59,154,103,100,100,192,104, 52,218, 29, 62,124,120,188, +175,175,175,133,155,155,155,100,251,246,237, 40, 40, 40, 0,203,178, 54, 94, 94, 94, 54, 67,134, 12,209,109,223,190,125, 26,128, +229,149, 69,174,242,158,208, 57, 41,196,171,103, 35,191,225, 72, 33,167,122, 78,237,229,124,210,162, 30, 41,139,100,245,170, 87, +207,220,171,177, 98,166,210,162,185, 77, 94,226,185,153,189,234,213,219,122,242,201, 19, 83,150, 98, 98, 92, 92, 92,214,246,238, +221,123,232,198,141, 27,229,145,145,145,242, 38, 77,154,128,227,184,178, 76,254,165, 43, 23,116,234, 84,189, 31, 16, 48, 2,215, +107, 7,195, 29,204,204,204,202,214, 8, 45,253, 91, 88, 88,136, 30,195,219,254, 29,215,219,154,238,227, 5,215,175, 95, 31,116, +242,228,201, 97,139, 22, 45,106, 0, 96, 34,199,113,115, 35, 35, 35, 59, 3, 64,147, 38, 77, 36, 0, 46,170, 84,170, 81,227,198, +141, 27, 55,113,226, 68,124,250,233,167,115, 9, 33,139,107, 19,213, 35,132, 8,154, 54,109,218,187, 71,143, 30, 2,131,193, 0, + 51, 51, 51,232,245,250,122,175,179,241,222,222,222,226,162,162,162, 3, 11, 23, 46,236,211,175, 95, 63, 8,133, 66,112, 28,231, +116,249,242,229,165,211,166, 77,107,239,231,231,215,191, 50,147,229,231,231,215, 18,192,194,250,245,235,247, 24, 62,124,184,160, + 67,135, 14, 40, 40, 40,192,153, 51,103,190, 61,120,240,224,183,126,126,126,215, 1,204, 13, 14, 14, 14,122,219, 27,109,129,210, + 28,143, 6,116,129, 87,100, 38, 0, 32,101,195, 74, 0,128,197,119, 63,240,142,230,127,193, 96, 85, 71, 81, 81,145,239, 55,147, + 62, 5,195, 20,183,135,245, 61,235, 96,233,236,209,228,200,177,211,190,213,132, 55, 87, 25,141,198, 6, 54, 54, 54,211, 53, 26, +141,108,205,154, 53,178,164,164,164,198,251,247,239,167,247,239,223,135, 88, 44,134,165,165, 37,186,118,237, 42,237,217,179,103, +189,235,215,175,215, 57,120,240, 96,191,247,222,123,239,143,227,199,143, 31,173,202, 92,217,217,219, 95,250, 97,209, 23, 54,205, + 60,189,160, 55, 24, 16,159,150, 8, 74, 36,112,118, 80,224,147,254, 45,197, 29,253, 37, 94, 63,252,124, 46,200,177, 89,191,119, + 82, 31, 28, 9,175,110, 27, 59,213, 87,220,238,239, 87,207,175,111, 96,123,166, 65, 35,111,136,101,242,178,247,154,183,244, 69, +243,150,190,100,244,200,124,207,251,247,239,207, 57,117,233,214,236, 78,245, 21,193, 87,162, 11,171, 90, 24,243, 5,243, 48,109, +218, 52,216,218,218,190,108, 50,112,225,194,249, 74,191, 99,202,117,177,252,147,165, 75,151, 90,165,165,165,125,252,235,175,191, +126,224,228,228, 52, 33, 37, 37,229,148, 41, 34,159, 18,226, 14,169,180,235,200, 31,127,228, 90,190,255,190,192,202,201,137,225, +140, 70,146,240,228,137,221,143,107,214, 4,230,199,199,203,213,230,230, 5,233,185,185,186,168,168, 40,152,153,153, 17,129, 64, +208,161, 2,115,145, 74, 8, 89,193, 48,100, 38, 33,132,200,100,102,217,159,125,246,217,245,146,247,154, 28, 61,122,212,188,111, +223,190,249,132,144, 72, 0,144,201,204, 58, 11, 4,140, 53, 45,238,232, 89, 97,138,177,148,203,229,147,166,125, 61, 75,145,151, +149,163,214, 23, 22, 26,236, 45,148,132, 40,205, 5,121,185,249,249,137,201,233,218,113, 95, 78, 17,204,153, 53,117, 18, 76,204, + 68,236,236,236, 92,167,113,227,198,183,183,110,221,234, 96,107,107,139,156,156, 28,100,102,102,226,246,237,219,224, 56, 14,189, +122,245,146,250,250,248,248,254,184,106,213, 13,103,103,231,118,166,152, 44,153,173, 29,246,191,211, 18, 0, 48,232,105,102, 89, +132,229,228,224, 62,101,159, 25, 18,155, 91,252, 89,153,172,198,203, 47,149,171,239,118, 29, 58,116, 16, 3,192,212,169, 83,243, + 10, 11, 11,151, 18, 66,118, 38, 37, 37, 37, 86,243,213,105,115,230,204,113,241,244,244,172,187,115,231, 78, 20, 20, 20, 0,128, +131,167,167, 39, 26, 53,106,100, 12, 10, 10, 66,195,134, 13, 97,110,110,142,203,151, 47,227,230,205,155,240,243,243, 51, 23,139, +197, 31, 85,102,176, 2,122, 4,204,145,246,109,210,169,145,223,112, 40, 45,156,177,117,215, 30, 60, 10,222,214, 73,171,143,156, +179,116,162,203, 39,106, 42, 29,225,218,192,124,150,187,127,103,219,250, 77,223, 71, 93,191, 16, 59,141,241,202,179,185, 19,188, +150, 9,101,154,109,243,126, 72,202,172,204, 92, 57, 57, 57,173,236,213,171,215,160,141, 27, 55, 90, 1, 64, 88, 88, 24, 82, 83, + 83, 97,111,111, 15,153, 76, 6,145, 72, 84,182,126,168,169,152,153,153, 33, 57, 57,185,108,153, 41,163,209,136,252,252,124, 56, + 57, 57, 21,187,155, 5,132,153, 55,207,180,174, 44,103,103,231,142,190,190,190, 59, 92, 93, 93,221,202,191,222,163, 71, 15,140, + 30, 61, 26,148, 82,116,232,208,161,235,232,209,163, 41,165, 20, 28,199, 33, 53, 53,181, 32, 44, 44,172, 91, 98, 98,226,173, 74, +182, 91,157,146,146,130,113,227,198, 33, 46, 46,110,130, 74,165,138,101, 24, 70, 86,186, 28, 24, 33, 68,162, 82,169, 26, 54,108, +216,112,237,232,209,163, 17, 19, 19,131,168,168,168,219,181,237, 50,165,148, 26,219,182,109, 27,109, 48, 24,252, 89,150,133, 90, +173, 70,207,158, 61,101,141, 27, 55, 78, 21,137, 68, 15,115,114,114,134,149, 44,169,101,138, 89, 19, 58, 59, 59, 59,137, 68,162, +141, 95,124,241, 69,239,246,237,219,227,225,195,135, 56,121,242, 36,250,245,235,135,128,128, 0,204,153, 51,231,189, 57,115,230, + 76, 3, 80,217,205,192,254, 3, 7, 14,120,184,186,186,150, 45,137,100, 97, 97,129,207, 62,251, 12,159,126,250, 41, 78,156, 56, +209,126,201,146, 37, 7, 2, 2, 2, 28,130,130,130,216,183,185,209,150,250,183,135, 87,100, 38,158, 54, 41,110, 63, 74,141, 86, +233,115,184,248,130,231, 31,108,176,116,186, 34,189, 80,200, 60, 84, 57,251,236,189,124,233,203,178, 46, 66,128,121,168,211, 21, +233,139,195,230, 20,121, 69, 44,204,164, 12, 98, 82,242, 17,254, 52,163,162,147,244,220, 75,198,236,171,117,235,214, 97,197,138, + 21,189,212,106,117,193,179,103,207,146, 11, 10, 10, 10, 63,249,228, 19, 34, 20, 10,113,237,218, 53, 60,127,254, 28,205,155, 55, +135,181,181, 53, 58,118,236, 40,238,222,189,187,219,168, 81,163, 62, 1,112,180, 34, 77, 18, 16, 32,116,150,218, 31, 92,185,104, +176, 13,152, 40, 68,197,229,160,158,107,107,216, 89,185, 33, 49,189, 0,119, 34, 78,224,241,147,227,168,231, 82, 23,163,135,214, +183, 90,189,249,218, 49,226, 55,166, 94,249,238,194,138,166,132,202, 4,198, 86,243,119,221,135, 49,235, 9,104,110, 28,104,225, +171,171,196,200,237,220,208,184,157, 35,228, 86,246, 76,216,195,213,173, 42,219,118, 74,105,170, 80, 40,220, 34, 16, 48, 99, 0, +160, 85,171,214,133,203,151, 47,175,232, 98,205,181,106,213,186, 80, 32, 96, 20,197, 17, 44,193,102,150,101, 83,171, 42,231, 75, +102,102,165, 68, 34,157, 14,128,184,186,186, 21, 28, 57,114,132,251,240,195, 15,177,114,229, 74,233,172, 89,179,126,118,119,119, +239, 18, 19, 19, 19, 91,213, 62, 26, 64, 72, 29,151,122,245,186, 47,190,118,141,138, 12, 6,146,117,251,118, 94,126,106,170, 33, + 49, 63, 95,246, 71, 72,200,192, 9, 51,102,200,156,188,188,112,253,220, 57,243,148,236,236,252,156,162, 34,221,179,103,207,168, +209,104,188, 82,201,182,127,227,232,232,216,108,219,182,109,190,159,125,246,217,245,196,196,196, 1, 37,221, 24, 7, 1,180, 37, +132, 68,150,127,237,224,193,131,237,135, 15, 31, 30,146,154,154,250, 77, 85,229, 44, 71, 83,123, 59, 59,249,174,205,219, 67,109, +204,205, 24,123, 87, 21, 35,178,178, 18,178, 18, 51, 49, 7,168,235,184,121, 40, 0, 52,173,164,206, 94, 94, 52,156,184,187,187, + 31,252,253,247,223, 29, 68, 34, 17,140, 70, 35,236,237,237,241,252,249,115,228,228,228, 32, 63, 63, 31,207, 30, 70,194,195,205, + 13,147, 71,127,238,188,224,135, 85, 7, 9, 33,254,229, 27,177, 10, 23,227,214,235, 95,110,112, 42, 91, 32, 28,166,148,179, 50, + 56,142,123,158,148,148, 4,185, 92,142, 38, 77,154, 40,239,220,185,115, 37, 49, 49, 49,177, 58, 77,153, 76,246, 81,135, 14, 29, +204,119,237,218, 5, 63, 63, 63, 88, 90, 90, 34, 40, 40, 8, 97, 97, 97,208,235,245, 76, 65, 65, 1,204,205,205,177,108,217, 50, +212,173, 91, 23,121,121,121,136,139,139,179, 21,137, 68,118,149,105, 6,157, 14, 90,148,251,228,226,156, 20,114,170,231,214, 93, +123,240,197,144,193,112,162, 79,175, 88,214, 35,139,186,247,237,240, 29, 21,184,245, 81,152,251, 88, 55,104,214, 23, 98,137, 18, + 19,103, 44, 68,212,131,163,214, 69,249,161, 19,136, 49,222, 13,192,228,151, 53, 73,113, 5, 49, 42,149,234,243,205,155, 55,155, +151,221,209,151,172, 73, 88,222, 88,149, 62, 42,170,211,202, 22, 76,215,235,245,208,235,245, 48, 26,141,200,200,200, 64,126,126, + 62,172,172, 74, 18,245,207, 3, 8, 8,161,149,172, 66, 95, 94,147, 97,152, 97,123,246,236,113,147,203,229, 47,127, 6, 37,209, + 65,200,229,114,112, 28, 7,189, 94, 15,150,101,161,213,106,149, 1, 1, 1,227, 1,220,170, 72, 83, 32, 16, 76, 29, 55,110, 92, +135, 99,199,142,121, 45, 90,180, 8,122,189,126,101,122,122, 58, 70,143, 30, 13,142,227,208,177, 99,199,182,148,210, 71,147, 39, + 79, 6, 0,204,159, 63,223, 80, 80, 80, 48,182,182,199,146,163,163,163,119,223,190,125,189,206,159, 63,143, 78,157, 58, 65,171, +213,226,187,239,190,179, 88,177, 98,133,197,222,189,123,237,151, 46, 93,250, 27,128, 30, 85,105,250,249,249,137, 82, 83, 83,103, + 14, 27, 54,108, 90, 96, 96,160,101, 92, 92, 28,204,204,204,112,228,200, 17,108,222,188,249,164, 94,175,159,115,224,192,129,197, + 91,182,108,233,217,175, 95, 63,108,222,188,121, 82,201,176, 8,174, 2, 77,149,155,155, 27, 66, 67, 67, 97,109,109, 13, 59, 59, + 59,228,230,230,226,230,205,155,184,125,251, 54, 26, 55,110, 12, 66,136,117, 73,155,198,190,206,121, 84, 67, 35,250,255,174, 89, + 58, 67,141, 43,119,236, 82, 74,139, 55,154,214,190,156,132, 16,161, 74,165,234,103,101,101, 53,129, 82, 42,204,206,206,222, 44, +151,203,247, 63,121,242, 68,247,255,181,237,255, 10,131,229,226,130,188,140, 12,235, 40, 7,167,230,123, 28,156,154,150,164,170, +102, 30, 10, 4,214, 81,142,142, 69,121, 0,160,103, 41,174, 63,204, 65,104,116, 10,194,162, 83,160,144, 86,127,215,109,107,107, +139,246,237,219,227,200,145, 35,136,143,143, 87, 46, 91,182,172,129, 94,175,215,247,237,219, 55,201,221,221, 61,187, 99,199,142, + 16,137, 68,184,115,231, 14,242,242,242,192, 48, 12,164, 82, 41, 56,142,171,244, 86,212, 33,219,122,248,240,209,205, 61,237,172, + 24, 28,189,122, 10,109, 27,247,135, 92, 42, 66,122,142, 26, 4, 4, 79,159,159, 3,199, 42,113, 63, 50, 6,237,125,228,120,167, +181,149,107,193,249,172,209, 0,126, 54,165,130,244,207,130, 32,241, 30, 0,112, 77, 65,179,159,128,203, 75, 4,149, 59,160,144, + 51, 67, 70, 82, 44, 30, 94,217, 7,170,175,126,168, 24,203,178, 99, 29, 28, 28,152, 57,115,230,244,245,244,244,228, 38, 78,156, +120,237,249,243,231,131,202,127,198,195,195, 99,223,250,245,235, 59, 60,123,246,172,104,209,162, 69, 71,211,210,210,198,213,240, +196,156, 73, 8, 89, 13, 0,241,241,241,153,135, 15, 31,238,116,249,242,229,165,171, 87,175,118,157, 56,113,162,116,226,196,137, + 51, 1,140,171,170, 91, 80, 33,149, 6, 46,190,124,153,178, 9, 9,218, 67,155, 55, 11,214,220,184, 49, 75,207,113,117,236, 29, + 28,132, 1,157, 58,105,236,172,172, 10, 83, 83, 82, 56, 43,149,138, 60,127,242, 68,201,137, 68,250, 83,167, 78,229,103,101,101, + 85,186,196,141, 80, 40,212, 86,212, 45, 88,201, 49,194, 85, 52, 70,171, 10,242, 56, 74,245, 86,158,158,180,123,215,118,245,163, + 31, 61,125, 42,179,178, 18, 52,168,239,209, 40,252,225,243,219,212,200,106, 0,228,153,216,197, 54,120,222,188,121,205, 45, 44, + 44,192,113, 28, 44, 45, 45,145,158,158, 14,157, 78,135,188,188, 60,232,242,115,161,203,205, 69, 88,236,115,116, 8, 8, 64,247, +118,109,155, 28, 55, 24, 6, 3,216, 93,149,174,141,143,111, 89,228,106,159,215,127,162,150, 31,199,228,148,153,173, 19,173,235, + 65,162, 84,160,249,148,111,106,125, 50, 39, 39, 39,135,212,173, 91,247, 68,175, 94,189,122,143, 25, 51,134, 73, 73, 73, 57,229, +232,232,216, 33, 53, 53, 53,162,170,239, 41,149,202,122,165,134,194,210,210, 18,107,214,172,129,163,163, 35,138,138,138,112,231, +206, 29,234,234,234, 74, 46, 94,188, 8, 87, 87, 87,100,100,100, 64,175,215,163,176,176, 48, 69,167,211, 85,122,224,151,116, 3, +246,154,218,203,249,228,163,224,109,157, 92,200,179, 59, 31, 77,235, 28,253, 40,236, 97,220,153,179,215,190,103, 53,178,248,156, +132,115, 51, 61, 91,133,216, 77,152,190, 0,235, 87,206,195,163, 91,151,179, 28,235,228,253,108, 70,180,127,180,233, 86,101, 4, + 93,243,240,225, 67,243,251,247,239,131, 16, 2, 75, 75, 75,200,229,242, 10, 77,150,169, 24,141,198,178,191, 25, 25, 25, 72, 79, + 79,199,147,216, 40, 28,184,176, 13, 6,214, 96,247,123, 27,139, 20, 47,177, 56,212, 46,151,204,206,120, 64, 67,170, 57, 15, 55, +127,252,241,199,131, 93, 92, 92,204,203,191,222,162, 69, 11, 12, 27, 54, 12,219,183,111,199,221,187,119,203,186, 49, 41,165, 72, + 79, 79, 79, 54, 26,141,127, 84,166, 25, 23, 23,151,227,234,234,218,243,243,207, 63, 15, 62,116,232,144,197, 15, 63,252, 0,163, +209, 8,150,101,203,186, 69, 75,255,238,220,185, 19,193,193,193,115, 83, 82, 82, 30,214,230, 56,114,114,114,106,220,183,111,223, +203, 63,255,252,179, 85, 90, 90, 26, 50, 50, 50, 80, 80, 80,128,194,194, 66, 24,141, 70,120,120,120, 16,150,101, 27, 85,215, 29, +200, 48,204,145, 11, 23, 46,244,108,208,160, 1, 0,192, 96, 48,224,250,245,235, 24, 61,122,116,166, 92, 46,255, 40, 38, 38,166, + 80,165, 82,125,123,252,248,241,158, 45, 91,182,132,143,143,143, 83, 90, 90,154, 57,128,220, 74,110, 32, 96, 52, 26,145,158,158, +142,244,244,116,252,250,235,127,214,113,214,106,181, 37,193, 1, 29,105,213,170,149,199,157, 59,119,158,191,173,141,118,204,159, + 91, 17, 51,251, 75,184, 95,121, 4, 0, 8,246, 46, 30,114, 85,247, 82,100,241,240,131,225,195,107,164,167, 82,169,108, 41,165, + 95, 4, 6, 6, 78,233,217,179,167,189, 74,165,130,141,141, 13,194,194,194, 58,156, 62,125,250, 39, 87, 87,215, 77, 70,163,113, +147, 41,209,122, 30,147,186, 8, 7, 26,237,236,246,103, 36, 38, 74,244, 18,137, 60,170, 52,170, 85,108,174, 6, 26,129, 93, 96, +245,134,146, 11, 4, 45,121,152,214,173,161, 73,254, 16,156,250, 47, 56,200,251, 97,203,150, 67, 72, 75, 75, 19,175, 89,179,198, +253,208,161, 67,174,195,134, 13,139,171, 95,191,126,110, 64, 64, 0,182,109,219, 6, 39, 39, 39,104,181, 90,112, 85,136,155,219, + 24, 7,182,109, 94, 95,240, 56,246, 1,252, 27, 14,132,135,170, 35,158, 38,230, 34, 43, 95,139,204, 92, 53, 26, 53,156,142,212, +204, 34,228, 22,106, 16,246,104, 39, 92,156, 60, 25,129,232, 73, 79, 83, 13,150,230,254, 14,104,195,246, 64,236,213, 5,146,166, +131, 33,114,109,135,248,176, 32,220, 59,241, 35, 18,194,175,130,114, 70, 56,186, 55, 49,105,219, 69, 34,209,194,227,199,143,119, + 95,178,100,137,168,107,215,174, 29, 84, 42, 85,251,164,164,164,235, 37, 7,121,251,222,189,123,119,112,112,112,192,218,181,107, +117, 34,145,104, 97, 45,239,126,202,119,171, 93,116,114,114,154,120,240,224,193,191,198,140, 25, 3,103,103,231, 54, 85,125, 55, + 93, 36,106, 49, 98,201, 18, 42, 18, 8,232,241,223,126, 35,179, 79,156, 88,183,253,207, 63, 37, 29, 58,116, 0, 1, 16, 26, 22, + 38, 91,182,102,141,217,224,126,253,210,162,158, 63,199,153, 11, 23,180,105, 41, 41, 25,233,133,133, 51,222,212,236,162,154,194, +178,236,141,184,248, 56, 23,255, 54, 45,237, 67, 34,159,133,247,120,183,125,123,134, 97,152, 71, 79, 99,175,219,219, 91,200,175, + 92,185,172,103, 89,246,134,137,251,167, 79,199,142, 29,133,217,217,217, 80,169, 84, 72, 79, 79, 71, 98, 98, 34, 12, 6, 3, 52, +185,217,208,231,230,194,144,151, 3, 99, 97, 1,158,221,185, 13,111, 55, 23,233,153,226, 65,240,187,171,187,227,172, 40, 66, 85, + 62,146, 37, 53, 87, 66,170, 84,190,176, 56,181,137, 23,199,126, 22, 22, 22, 51,243,243,243, 79, 36, 38, 38, 46,210,233,116, 19, +151, 44, 89,210,106,225,194,133,118,179,102,205,178,152, 49, 99,198, 62,119,119,247,150, 49, 49, 49,149,154,214,130,130,130, 39, + 44,203,218, 1,112, 56,127,254, 60, 28, 28, 28,144,155,155, 91,188,221, 26,141,174,168,168, 72,150,153,153, 9,173, 86, 11,157, + 78, 7, 11, 11, 11,220,189,123, 55,155,101,217,191,170, 43,159, 69, 61,178, 72,171,143,156, 99,219, 68,145,164,103,173, 59,167, +101,113,217,243,126, 72, 90, 8,224,199, 94,245,234,109,213,115,151,159, 61,126,112,212,250,249,157,160,172,164,199,133, 94, 91, +143, 63,205,175,162, 30, 41, 33,132, 35,132,208,134, 13, 27, 34, 61, 61, 29, 2,129, 0,114,185, 28, 74,165, 18,141, 27, 55, 70, +124,124,124,173, 13, 22,203,178,101,230,234,236,141, 99,200, 44, 72,198,214,149,187,224,226,228,198, 0,176, 79, 76,137,239, 54, +106,218,160, 54,158, 29,173,151, 62,187,154, 93,233,184,182,164,164,164,123, 0, 44, 94,188,105,117,233, 98, 99, 99,115, 65,167, +211, 33, 38, 38, 6,103,206,156, 9, 72, 72, 72,184, 84,147,125,157,144,144,240,212,197,197,165,231, 7, 31,124,176,173,121,243, +230,245, 40,165,104,220,184, 49,250,245,235,135, 3, 7, 14, 32, 34, 34, 2,121,121,121,220,149, 43, 87,126, 79, 78, 78,174,209, +128, 28, 66, 8,161,148, 82,103,103,231, 70,125,250,244,185,186,126,253,122,235,140,140, 12,168,213,106, 20, 22, 22, 98,255,254, +253,232,212,169, 19,108,108,108,112,248,240, 97,182,180, 71,161, 50,115, 69, 41, 61,114,232,208,161,158, 94, 94, 94,120,248,240, + 33,206,158, 61, 11, 79, 79, 79,136, 68, 34,244,233,211,199,118,207,158, 61, 19,189,189,189, 87,137, 68,162,239,123,247,238, 13, +163,209,136,187,119,239, 38,199,198,198,230, 87,103,130, 43, 66,173, 86,131, 82, 10,131,193,176,134, 97,152,143,252,252,252,186, + 7, 7, 7,223,126, 91, 26,106, 87, 87,215,166, 34,145,104,178,181,181, 53, 50, 51, 50,144,203, 1, 89, 89, 89,160,148, 34,151, + 43, 14, 92, 41, 50,255,211,171,222,160, 65,131,227,106,181,122,118, 66, 66, 66,165,107,121,185,184,184,248,200,229,242, 41,125, +251,246, 29,246,222,123,239, 9, 12, 6, 3,142, 30, 61,138,245,235,215,163,103,207,158,168, 95,191, 62,102,204,152, 97,169,209, +104,102,157, 58,117,106,102,147, 38, 77, 78,229,231,231,127, 83,149, 38,143, 73, 6,171,216,100,185,184, 32,187,228,142,198,206, +198,198,102,189,209,104,236, 2,124, 7,115,161, 37, 30,134,220, 65, 86,166, 0, 90,181, 17, 28, 45, 54, 89, 38,117, 99,168,255, +130, 69, 67,138,188, 40, 2,131,193, 0, 71, 71, 71, 44, 91,182, 12,185,185,185,194, 81,163, 70,121, 44, 88,176,224,158, 78,167, + 67, 97, 97, 33,212,106, 53,212,106, 53,140, 70, 99,165, 6, 75, 44,213, 54,175,227,216, 0,249,234,214,144, 75, 37,200,202,211, + 22,155,171, 28, 13, 14,252,245, 49,180, 69,106, 24,245,122,176, 58, 3,148,142,253, 81,207,187, 11,128,232,102, 38,154,149,226, +191, 28, 11, 93,244, 89,232,162,207, 66,209,101, 14,142, 44, 25,246,210,137,111,218,228,196,196,196,196, 68, 23, 23,151,237, 33, + 33, 33,159,125,244,209, 71,184,120,241,226,183, 40,153, 89, 37,147,201,190,253,232,163,143, 16, 18, 18,130,200,200,200,237,149, +117,237,212, 20,137, 68, 82,168,211,233, 74,187,130,228,213,124,214,165,213,128, 1, 76,110, 72, 72,222,146, 11, 23,230,253,241, +199, 31,146,119, 58,117,130,193, 80,108,166, 61, 60, 60,208,189, 71, 15,233,142,189,123,149,234,156,156, 59,179, 39, 78,252,107, +195,240,225,121,183, 11, 10, 30,152, 88,159, 77, 74,186, 6, 65, 41,109, 82,217,107, 53,161,176,176,112,221,236, 89,211, 2,247, + 31, 56,226, 86,199,205,197,226,244,217, 75,247,165,102, 18,198,203,163,158, 32, 63, 63, 71,184,126,205,143,102, 5, 5, 5, 63, +153, 40,215,196,206,206, 14, 41, 41, 41,136,142,142,134, 86,171, 45,222,246,162, 66,232,178,115,160,203,205, 2,209,168, 33, 53, + 26,161,201, 72,133,187,151, 39,240,159, 25,134,213, 53, 96, 21, 26,172,210,191,102, 22, 22, 16, 43, 20, 16,136, 68, 38,143,193, +114,118,118,246,243,245,245,221,187,101,203, 22,241,212,169, 83,219,184,187,187,175, 79, 73, 73,137,117,117,117,237,186,114,229, +202,219,139, 23, 47,150, 14, 27, 54,172,209,230,205,155,135, 3,216, 92,233, 77,132, 70,179,247,248,241,227, 67,235,214,173,235, + 16, 22, 22, 6,141, 70, 83, 58,222, 12, 0,100,165,159,123,244,232,145, 90,163,209,164, 61,120,240, 32, 47, 54, 54, 86, 7, 19, +102,253,205, 91,155,116, 99,234, 32,215, 1,142, 78, 46, 55,101,102,238, 30,180, 32,164,255,212, 65,174, 43, 87,237, 75,208,156, +124,242, 36,127,238, 4,175,101,133,249,161, 19,172, 92, 11,126, 62,121,244,105,190, 41,135, 81,201,140, 65,216,218,218, 66, 40, + 20, 66, 36, 18,161,116, 44,146,163,163, 35,114,115,115,171,236, 34,172,172,241,206,203,203, 67,110,110, 46, 30, 63,127,136,204, +130,100,156,217,117, 3, 70,163, 17, 26,141,166,216,204, 58,186,226,220,238,219,230, 1, 3, 91,205,182,245, 33, 23, 51, 67,233, + 29, 83,143, 83,134, 97,166, 12, 24, 48, 0,122,189, 30,253,250,245,195,174, 93,187,166, 0,184, 84,211,227, 61, 49, 49,241, 38, + 33,164, 65,116,116,180,133,193, 96,120,191,111,223,190,127,244,238,221, 27, 55,110,220,192,249,243,231, 3,116, 58, 93,148,209, +104, 84, 59, 59, 59, 47,117,118,118,118, 32,132, 44,173,106,130, 71, 73, 42,134, 13, 77,155, 54,125,191, 75,151, 46,247,123,247, +238,221,108,253,250,245, 86,105,105,105,165,147, 26,144,144,144,128, 19, 39, 78, 36, 31, 61,122, 52,143,227, 56, 91,134, 97,142, +103,100,100,124, 83, 89,183,160, 94,175, 63,116,244,232,209,158, 94, 94, 94,184,116,233, 18,150, 44, 89,130,230,205,155,227,248, +241,227,112,119,119, 71,227,198,141, 97, 99, 99, 51, 57, 47, 47,175,221,138, 21, 43,122,251,250,250,226,208,161, 67, 72, 77, 77, +253,169,170,148, 13, 44,203, 86,107,176,222,125,247,221,209, 83,167, 78, 69,223,190,125,207,248,251,251,183,190,123,247,238,255, +124,154, 22,149, 74,181, 44, 48, 48,112,102,139, 22, 45,240,231,159,127, 66,227,215, 1,138,223,143,226, 65,159, 14,160, 0, 84, +191, 31, 1,165, 20,225,253,222, 1, 5,224,209,117, 32,102,206,156,217,187,127,255,254,117, 80,201,240, 8,149, 74,245,195, 39, +159,124, 50,237,211, 79, 63, 69,112,112, 48, 54,111,222,140,123,247,238,149,181,121, 6,131, 1,145,145,145,136,140,140,132,179, +179, 51,250,244,233, 67,198,140, 25,211,171, 87,175, 94,246, 0,252,193,243,186, 6,171, 44, 92,108,103,109,109, 29,254,243,207, + 63,219,182,110,221, 90,192,178, 44, 46, 6, 5, 97,254,119,211,208,171,199,103,208,115,150, 96,117, 98,112, 98,153,105,191, 40, +237,131,188, 40, 2, 78,220, 27, 58,157, 14, 95,236, 20,193,138,164, 97,205, 8, 71, 0, 32, 26,141,166,204, 88,149,222, 61, 85, + 21,193,202,207, 85,232, 13, 6,138,164,180, 88, 36, 36,135,195, 66,233, 6, 42,112, 67, 90, 86, 17, 8, 28,193,106,163, 96, 52, + 20, 27, 32,173, 58, 1, 69, 58,242, 90, 21,102,204,122,117, 54,176,145, 53,125, 76, 37,165,116,237,142, 29, 59,134,174, 90,181, + 74,250,222,123,239,249, 56, 59, 59,119, 7,128, 65,131, 6,249, 88, 88, 88, 96,199,142, 29, 90, 74,233,218, 55, 24,225,249,192, +223,223, 31, 89, 89, 89,136,137,137,185, 94,229,182,233,116,182, 74, 7, 7, 65,218,197,139,134,172,252,252, 58,157, 74,204, 21, +195, 48,200,206,206,198,243,231,207,161, 84, 40,240, 32, 34, 66,250,227,184,113, 59, 26,251,248, 48,165, 51, 12, 77,225,232,209, +163,230, 0,218, 86,247, 90, 77, 72, 79, 79, 47,116,114,114, 26,249,237,236,217,135,126,250,233, 39,203,212,180,212, 40,169, 68, +194, 42,149, 50,213,228,201,227,133,121,121,121, 67, 51, 50, 50, 10, 76,213,203,206,206,198,179,103,207, 96,102,102, 6,177, 72, + 4, 78, 93, 4, 99, 97, 1, 52, 89,233, 16,232,117,144, 24,141,176,145, 75,225,230,232,136, 58,246,118,166,117,221, 93, 60, 83, + 54,160,189,124,183,224,169,246,141, 32, 85, 42, 32, 85, 42,209,225,112,241, 16, 54,177, 88, 12,172,217, 98, 74, 55,142,157, 74, +165,250,107,253,250,245,226,204,204, 76,132,135,135,223,143,137,137,201,181,177,177, 49, 23,137, 68,220,227,199,143,207, 61,124, +248,176,143,167,167, 39, 40,165,213,205,254,250,241,224,193,131,221, 58,118,236,200,122,120,120, 40,210,210,210,234,228,230,230, +146,228,228, 23,199, 48,223,185,115, 71, 22, 23, 23, 87,200,113,220, 33, 20,231,193,170,246,192,159, 58,200, 85,118, 61, 4,147, + 58,247,112,111,110, 97,231,131, 44, 54,164,249,205,251,201,147,166, 14,114, 93,183,106, 95,130,198,140,104,255, 32,198,120, 55, +161, 76,179,205,196,243,135,122,123,123,131, 82,138,219,183,111,227,234,213,171,184,124,249, 50, 98, 99, 99,203, 62, 99,105,105, +137,179,103,207,162, 75,151, 46, 38, 31, 71, 69, 69, 69,112,118,118,134,181,181, 53, 14, 94,220,142,173, 43,119,149, 13,116, 47, + 37, 35, 35, 3,114,185, 28,139,191, 94,165, 28, 53, 99,224,247, 0,186,155,162,237,230,230,230,217,161, 67,135,247, 28, 29, 29, +145,157,157, 13, 7, 7, 7,180,106,213,170,175,163,163,163, 71,106,106,106,173,186,178,116, 58,221,248, 46, 93,186, 44,250,250, +235,175,193,178, 44, 62,254,248, 99, 60,123,246,108,239,211,167, 79,215,212,173, 91,119,210,132, 9, 19, 28,237,236,236, 48,126, +252,120, 5,128, 1, 85, 24,172,165, 43, 86,172, 24, 26, 24, 24,200, 24, 12,134,119,206,159, 63,143,152,152, 24,232,116, 58,176, + 44,139,152,152, 24,204,155, 55, 47, 57, 47, 47,175,115, 66, 66,194,147,234,202,149,146,146, 50,237,240,225,195,189, 27, 54,108, +136,211,167, 79, 99,236,216,177,199, 45, 44, 44,154,250,248,248,212,169, 83,167, 14,254,250,235, 47,152,153,153,193,217,217,217, +113,214,172, 89,125,122,244,232,129,115,231,206, 97,225,194,133,199,156,156,156,126,172,206, 4, 11,133, 66, 24, 12, 47,222,208, + 10, 4, 2,220,187,119, 15,239,190,251, 46,102,206,156, 9, 0, 56,119,238,156, 69,247,238,221, 31, 4, 4, 4, 88, 4, 5, 5, +105,241, 63,140, 66,161, 24,249,251,239,191, 35, 58, 58, 26, 87,174, 92, 65, 70, 70, 6,116, 58, 29,114, 74,172,168,180, 36,146, + 69, 93,234,162,253,180,217, 24,210,103, 0,146,147,147,193, 48,140, 93, 21, 55,124,195,102,207,158,141,147, 39, 79, 98,249,242, +229,200,205,205,173,240,115,102,102,102,104,213,170, 21, 90,182,108,137,103,207,158, 1,128, 29,120,222,156,193,178,182,182, 94, +179, 97,195, 6,219, 14, 29, 58, 8, 74,204, 14, 90,183,106,133,225, 35, 71,226,236,193, 99,112,104,216, 19, 68,167, 4, 43,151, +152, 22,193,178,216,134, 76, 67, 38,100, 98, 25,164, 58, 29, 56,206, 12,161, 9,154, 50,215,172, 86,171, 81,106,178, 10, 11, 11, +161, 80, 40,170, 54, 16, 58, 73,112,228, 51,214, 45, 55,255, 30,110,134,108,135, 65,103, 64,189,134,179,161, 54,216, 66, 97,255, + 25, 52,186,191, 96,204, 41,158,185, 43,177, 8, 64, 74, 74, 6, 0, 98,106,196,229,213,147, 60,255,213,193,238,156,209,244,188, +171, 73, 73, 73,153, 42,149,106,243,245,235,215, 39, 15, 24, 48, 0,103,207,158,157, 13, 0, 3, 6, 12,192,245,235,215,241,236, +217,179,205, 73, 73, 21,207,160,170, 41, 46, 46, 46,195, 59,119,238, 60,161,117,235,214, 56,118,236, 24,140, 70,227, 9, 83,190, + 39, 16,137, 40, 33, 4,165, 51,156,178,178,179,241,232,209, 35,100,101,102,194,104, 52,162, 72,173,102,155, 54,106,148, 71, 57, +206,188, 38,229, 41, 63, 99,176,162, 89,132,165,175,213,116, 59, 83, 82, 82, 98,235,213,171, 23, 87, 84, 84,104,111,109,101,157, + 47,145, 72,140,121,249,249,185,209, 81, 15,117,166, 52, 10,229,136,140,136,136,104,150,144,144,128,184,184, 56,176,133,249, 16, +104,117, 96,180, 69,232,218,190, 29,204, 64, 33, 3, 7, 17,103,128, 72, 32, 66,126,241,108,187,200,106,143,249,114, 13, 66,169, +185, 34,132, 64,166, 84, 66,162, 84, 64,106,174,124, 33,162,101,202,196, 47, 51, 51,179,157,155, 55,111,118,118,114,114,194,170, + 85,171,224,236,236,220, 56, 48, 48,176,168,115,231,206,102,118,118,118,104,216,176, 33,252,253,253,113,241,226, 69, 16, 66,158, + 84,115,156,179,132,144,238, 87,174, 92,153,118,237,218,181, 65, 42,149,138,124,250,233,167,232,217,179, 39,100, 50, 25,138,138, +138,144,157,157,141,227,199,143, 19,163,209,232, 91, 98,240,234,186,187,187,239, 34,132, 36, 60,127,254,252,163,151, 53,183,175, +246, 81,165,101,113,159, 57, 58,185,244,239,220,195,189,249,187, 61, 2,225,217,224, 93,188,219, 35, 14, 0,150,217, 8, 99, 62, + 94, 57,167,217, 33, 59, 55,155,223,206,156, 58, 59,175, 99,231,119,191,157, 53,198,122,209,178,205,217,213,142,151, 35,132,148, + 53,182, 12,195, 84, 24,165, 18, 10,133,101,179,205,170,189,105,226,140, 9, 61, 71,180, 43,123,110, 96, 13,118, 46, 78,110, 76, +105,228, 10, 0,114,115,115, 17, 31, 31, 15,131,193, 0, 91, 91, 91, 24, 12,122,159, 26,116, 63, 78, 26, 60,120, 48,209,104, 52, +152, 54,109, 26,126,248,225, 7,244,235,215,143,220,186,117,107, 18,128, 41,181,136,104,172,156, 48, 97,194,180,145, 35, 71, 34, + 39, 39, 7, 23, 46, 92, 64,151, 46, 93,176,113,227, 70,251, 11, 23, 46, 44,105,223,190, 61, 4, 2, 1,206,158, 61, 11,189, 94, +255,168,202, 6, 64, 40,124, 63, 48, 48,144,137,143,143,135, 88, 44,134,191,191, 63, 18, 18, 18, 80, 84, 84,132,180,180, 52, 44, + 88,176, 32, 37, 55, 55, 55, 32, 49, 49,241,137, 9,251,133,233,208,161,195,228,250,245,235,227,194,133, 11, 24, 55,110,220, 73, +133, 66, 49, 32, 51, 51,115,140, 70,163, 89, 55,120,240, 96, 52,110,220, 24, 81, 81, 81,120,239,189,247,208,170, 85, 43, 92,184, +112, 1, 51,102,204, 56, 46,151,203, 63,172, 38, 15,214,227,160,160,160,102,254,254,254, 40, 42, 42, 66, 94, 94, 30, 68, 34, 17, +172,172,172, 16, 25, 25,137, 6, 13, 26, 96,230,204,153, 88,181,106, 21,166, 78,157,202,117,239,222,157,213,235,245, 98,137, 68, +242, 63,223, 72, 23, 22, 22,210,228,228,100, 88, 88, 88, 96,223,190,125, 8, 59,119, 26, 39,190,252, 12,178, 57, 43, 65, 41, 69, +252,162, 89,232, 58, 99, 14,218,222,127,138,228,228,100,108,219,182, 13, 12,195,148,205,136,173,172,109,203,205,205, 69,203,150, + 45,113,251,246,109,108,219,182, 13,171, 87,175, 46,139,214,138, 68, 34, 4, 4, 4,160, 91,183,110,120,252,248, 49, 54,111,222, + 12, 11, 11, 11,222, 49,189,105,131,197,113,220,187,173, 90,181, 18, 20, 20, 20, 64,163,209, 32, 37, 37, 5, 49, 49, 49, 48,147, +155, 33, 62, 35, 17, 45,124,245, 72,225,242, 16,121, 63,220, 72, 4,162,123,213,221,129,232,116, 58,232,116, 58,132,134,134, 22, + 79,125,111,176,180,108,160,167,193, 96,128, 86,171,133, 90,173,198,133, 11, 23,168, 84, 42,133, 66,161, 32, 85,245,189,115,172, +246,228,133,171,247,123, 15,235,223, 69,114, 54,104, 43, 12, 58, 14,121, 26, 11, 20,168,181, 40,208,136,160,149,246, 0, 33, 87, +192, 8,164,104,223,178, 62, 46, 92,141,210, 24, 13,122,147,210, 21,128, 51, 66,232,236, 3, 54, 57,244, 63, 47,189, 52,155, 80, + 44, 87,130, 51,214,108, 86,176,153,153,217,198,157, 59,119,142,108,215,174,157,121, 96, 96, 96, 3, 0,144, 74,165,220,206,157, + 59,243,205,204,204, 54,214,116, 39,190,156,189,221,217,217,185,163, 68, 34,153,216,183,111,223,142, 35, 71,142, 68,120,120, 56, +254,252,243,207,251, 42,149,170,202, 49, 51, 2,137, 36,179, 32, 45,205, 74,233,225, 33,180, 50, 55, 79, 58,125,250,180,251, 59, +157, 59, 35, 54, 38, 6, 89, 89, 89, 80,171,213,136,136,140,164, 98,134,137, 35, 22, 22,204,163,144, 16, 70, 32,145,100,214,160, +156,145,213,205, 34,172,109, 52, 75, 97, 70,234,205,153, 57,198, 83,163,209, 52,203,203,203, 99, 69, 34,145, 72, 46,161,177, 53, +209, 48, 24, 12,199,174, 92,185,242, 65,135, 14, 29,164, 81,161,247,192,230,230, 66,151,155, 13, 49,103,132,141,111, 11, 8,244, + 90, 64,103,128, 75, 19, 10, 77,142, 28,215,238, 61, 53, 24, 12,134, 99,166, 26, 44, 70, 32,120,113,220,149,133, 18, 82,115,115, + 72,148,202, 23, 94, 39,213,244,107, 57, 58, 58,202,123,245,234,213,213,215,183, 56,167,214,202,149, 43,161,215,235, 37, 6,131, +161,108, 38, 92, 65, 65, 1,246,239,223,143,237,219,183, 95,179,180,180,252,221,132,155, 9,214,213,213,117, 34,199,113, 14, 44, +203,234,237,237,237,197,123,247,238,133, 76, 38, 3,195, 48,104,217,178, 37,100, 50,153, 86,165, 82,233, 75,202, 96, 88,181,106, +149,240,179,207, 62, 19, 87,164,215,168,121,227,233,158,172,117,103,153,153,187,135,133,157, 15, 60, 27,188, 11, 0,232,214,103, + 20, 60,235,215, 65, 94, 70,168,135, 70, 29,211, 95, 44,204,182, 14, 95,151, 24, 97,246, 94,179,145,133,105, 65,143, 1,252, 98, +210,169,201,113, 8, 12, 12, 68,143, 30, 61,202,186, 3, 29, 28, 28,160,211,233, 96, 52, 26,107, 52,150,173, 52,137,232,130, 5, +132,193, 60,224,247, 54, 22, 41, 0,236,203,155,171,184,184, 56,196,197,197,149,221, 8,114,212,180, 20, 42, 42,149,202,204,211, +211,115, 68,179,102,205,112,254,252,121,132,134,134, 38, 6, 5, 5,185,180,110,221, 26,174,174,174, 35, 85, 42,213,236,164,164, + 36,147, 19, 42,219,219,219, 43, 58,117,234,244,229,200,145, 35,241,240,225, 67,204,154, 53, 43, 51, 57, 57,249,208,209,163, 71, + 63,255,234,171,175,152,206,157, 59, 35, 45, 45, 13, 27, 55,110, 52,222,190,125,251, 7,107,107,235,133,213,236,247,135, 73, 73, + 73,174, 26,141, 6, 89, 89, 89, 96, 89, 22, 69, 69, 69, 56,117,234, 20, 78,159, 62,157,154,147,147, 19,144,148,148, 20,109, 74, +217,234,214,173,107,238,239,239,239,248,248,241, 99,236,218,181, 11,122,189,126, 78, 76, 76,140,222,210,210,114,199,146, 37, 75, +230, 89, 90, 90,218, 4, 6, 6,162,244,184,253,235,175,191, 48,127,254,252,227,102,102,102, 3, 34, 34, 34,244,213,200,247,255, +254,251,239,191,183,179,179,251,104,232,208,161,140,191,191, 63,238,222,189, 11,163,209,136,174, 93,187,150,153,171, 83,167, 78, +237, 60,117,234,212, 64, 0, 98,165, 82, 41,251, 95,143, 94,149,162,209,104, 16, 21, 21, 5, 71, 71, 71,212,111,221, 14, 51, 31, + 60,199,149,235, 55, 64, 41, 69,199,240,231, 40, 40, 40,196,239,191,255,142,224,224, 96, 8, 4, 2,120,121,121, 85,171,169,215, +235, 17, 29, 29,141,244,244,116,244,235,215, 15,195,134, 13,195,138, 21, 43,160,215,235,241,237,183,223, 34, 43, 43, 11, 91,182, +108, 65,116,116, 52,132, 66, 33,148, 74, 37,239,152,222,180,193, 42,233,102, 2,199,113, 72, 76, 76,196,221,187,119,241,252,249, +115, 40, 20, 10,168, 89, 35,183,241,220, 85,142, 16,113, 2, 71,233, 53,202, 22,103, 17,175,202,137, 27, 12, 6, 34, 20, 10,113, +253,250,117, 60,125,250, 20,230,245,105,153,185, 42,141, 96, 21, 21, 21, 65, 36, 18, 21,220,184,113, 35, 38, 56, 56,216, 83, 40, + 20,234, 42,211, 76,179,206,222,118,246,252,185,233,126, 45,189, 27,116,235, 60, 31,199,142,205, 67,118,110, 30,138,116, 34,228, +171,245, 40, 84, 83,184, 88, 52, 64,107, 31, 31,164,103,233,240, 56, 60, 56, 33, 67,108, 83,109, 31,140,129, 50,185, 59,151,141, +181,124,127,216, 56,152,185,191, 3,109,248, 62,112,249, 41,224,242,139,187, 77, 36, 10, 11,152,219,185,161,160, 72,131,171, 15, +158,194, 64,153, 92, 83, 43,253,201,147, 39,249, 42,149,106,221,212,169, 83,151,223,184,113, 93, 1, 0,247,238,221, 43, 76, 74, + 74, 90,148,148,148,148, 95,147, 29, 88, 46,123, 59, 81, 40, 20,143,235,215,175,111,120,239,189,247,108,251,247,239, 15, 59, 59, + 59,132,132,132, 96,217,178,101, 33,133,133,133, 67, 98, 98, 98, 12,213,116, 59, 36, 6, 31, 62,108, 17,240,233,167, 86,179,250, +245, 91, 54,126,252,248,159, 22, 46, 92, 40,174, 87,191, 62, 56,163, 17, 17, 17, 17,116,199,142, 29,236, 47,115,231,174,148, 40, + 20,194,219, 71,142,136, 88,173, 54,241,191,125, 16,187,186,186,118,238,221,179,115,147, 31, 86,173,131, 70, 93,128, 91,215,143, + 35, 59, 59, 29,155,183, 28,108,226,234,234,218,217,212,193,196, 9, 9, 9,123, 14, 28, 56, 48,205,199,187,137,175,151,155, 27, +194, 98,159, 67,194, 25, 33,102, 89, 8,244, 90, 48,172, 6,110,205, 40, 8, 99,142,148,148,124,108, 60,125,225, 65, 66, 66,194, +158,106, 35,137,189,222,199,144,216, 92, 16, 66,112,166,147, 55,100,230, 74, 72, 20, 10,180, 63,112,169,204, 84,197, 46,253, 26, + 34,133, 18,214,173,223,169,182,156,169,169,169, 69,245,235,215,191,251,240,225,195, 86,141, 26, 53,194,130, 5, 11, 16, 31, 31, + 15, 74, 41,210,210,210, 52,233,233,233,137,153,153,153, 49,132,144, 67, 73, 73, 73, 91, 77, 93,138,132,227, 56,135,163, 71,143, + 2,128, 24, 0,206,159, 63, 15,149, 74, 5, 75, 75, 75,228,229,229,225,211, 79, 63,149,126,247,221,119, 0,128,187,119,239,138, +204,204,204, 42,213, 10, 11,142,252, 33, 39,159,102,211,130,144,254, 89,108, 72,243,119,123,196,163, 91,159,145, 56,123,236,119, + 92, 56,125, 14, 54,194,152,231, 80,228,159,204,120,158,145,151, 80,216, 96, 83, 19,191,207, 5,201,133,167, 55, 77,234,103, 45, +112,118,230,246,205,218, 80,121,226,222,210, 59,112,129, 64, 80, 54, 6,171,116, 64,123, 77,205, 85,121,230,205,163, 28, 1, 33, + 94, 98,113,104, 98, 74,124, 55,149,163, 43, 82, 83, 83, 17, 31, 31,143,184,184, 56,196,199,199,163,126,253,250,120, 30,251, 20, + 18,137,248,158,137, 81,240,161,125,251,246, 53,215,233,116, 56,124,248, 48, 75, 8,233,115,244,232,209,187, 45, 90,180, 16,118, +233,210,197,252,247,223,127, 31, 10, 96,107, 77,238, 37,148, 74,165, 88,175,215,227,143, 63,254, 64, 66, 66, 66,231,148,148,148, + 72,149, 74,181,105,236,216,177, 27,154, 52,105, 82, 63, 50, 50,242,177, 90,173, 30,159,148,148, 20, 90,157, 88, 78, 78,206,168, +158, 61,123,238,227, 56,174,110,199,142, 29, 21,243,230,205,179,120,244,232, 17,220,221,221, 65, 41, 13,171,201, 82, 83,177,177, +177,249, 87,175, 94, 77,109,218,180,169,163,179,179, 51,196, 98,241, 50,103,103,231, 69, 74,165,242,135, 46, 93,186,216,236,216, +177, 3,167, 79,159,134, 72, 36,194,211,167, 79,147, 30, 62,124,184,198,201,201,105,173, 41, 25,220,131,131,131,159, 1, 24,210, +186,117,235,249,171, 87,175,158,195, 48,204, 39,103,206,156,129, 72, 36, 2,128, 50,115,229,225,225, 49,124,223,190,125,195,222, +178,118,218,160,211,233, 96,107,107,139,244,244,116,164,165,165,161, 78,157, 58,104,215,174, 29, 12, 6, 3,142, 28, 59,142, 43, + 87,174,128, 82, 10, 59, 59, 59, 88, 90, 90,226,254,253,251, 0, 80,213,236, 97,131, 94,175,135,141,141, 13,114,114,114,112,255, +254,125, 56, 56, 56, 96,234,212,169,208,233,116,216,187,119, 47,238,221,187, 7,134, 97,224,224,224, 0,115,115,115, 83, 52,121, +106,106,176, 4, 2,193,197,139, 23, 47, 14,244,241,241, 17, 70, 71, 71, 35, 58,186,248,102, 70,173, 86,179, 66, 1,246,167,134, + 30, 30, 82, 69,227, 31, 88, 62, 87,134, 68, 34,217, 56,112,224,192,241,163, 70,141,194,196,137, 19, 65, 8,193,111,247,116,136, +139,227, 96, 48, 24,144,154,154,138,176,176, 48,218,170, 85, 43,194,113,156, 62, 32, 32,224,139,224,224,224,214, 2,129, 32,175, + 50, 77, 26, 20,196, 58, 54,239,255,225,207, 27,183, 94, 26, 49, 98,132, 77,223,126, 63,227, 94,100, 4,114,139,236, 1, 74,225, + 98,175, 68,235,134, 95, 35, 45, 83,131,211, 39,143,101,115,172,230, 67,250, 96,183,161,170,114, 2, 64,186, 80,237,176,105,251, +129,149,187,247, 29,252, 98,244,200,161,178,128,192, 79, 33,206, 8, 3,155, 20, 12, 23,239,142,160, 66, 51,220, 14, 14, 65,104, +116,188,166, 72, 47,216,154, 39, 86, 79,175, 78,179, 60,217,217,217, 39, 82, 82,146,127, 46,157, 28,192, 48, 68, 33,145, 72, 79, + 84, 99,166, 2, 95,202, 11,244,114,134,248,134, 75,151, 46, 77,179,181,181,229,194,195,195,177,113,227, 70,227,221,187,119, 15, +112, 28, 55, 39, 35, 35,163,168, 58, 77,123,131,225,254,206, 89,179,188, 91, 15, 24, 64,251,127,241,133,134,145,201,198, 47, 91, +181,106,118,102,110,174, 11, 0,216, 88, 89,197,111,158, 63,127, 97,175,222,189,243,195,175, 94, 53,187,126,248,176,153,132,101, +131,171, 43,231,155,160, 42,205,132,132,132, 75, 13,234,213,193, 31, 91, 87, 65,175,215, 34, 57,177, 56,112,149,145,153,139,170, +204,213, 43,199, 82,241, 44,170, 1,171,215,172,189, 57,238,211, 79,156,222,233, 26,136,184,251,247,160,207, 74, 7, 49,176, 16, + 17, 33, 10,211,228, 72, 75, 45,192,210, 19,231,210,212, 26,205,128,151, 19, 57, 86, 86,206,178,110, 65, 11,115, 72, 20,197,227, +174,202, 71,173,196,230, 22, 16, 41,148, 16,136,197, 21, 13,134, 15,172, 32,167,220,135,163, 71,143, 14, 61,113,226,132,245,144, + 33, 67,240,254,251,239,135,228,228,228,116,201,202,202,202,175,109,125, 50, 12,147,214,187,119,111, 7,157, 78,199, 14, 30, 60, + 88,152,145,145,129,210, 41,246, 5, 5, 5, 56,121,242, 36, 26, 53, 42,158,157, 31, 30, 30,142,166, 77,155, 86,170,249,249,140, +176, 68, 0, 11,167, 14,114, 93,121,243,126,242, 36, 0,203, 60,235,187,225,194,233,115,184,114,225,250,172,182,205,184,117,189, +135,181,250, 94,222,229,163,233, 77,252, 62, 23, 40, 45,156,177,237,224, 1, 65,100,240, 47,139,139,138,194,234, 1,248,186,178, +114,150,118, 95,191,156,146, 65,173, 86,155,100,174,170, 58,150, 40, 40,181,203, 37,179, 71, 77, 27,212,230,236,174, 91,230, 74, +165, 18,122,189, 30,148, 82,212,171, 87, 15, 66,145, 16,191, 30,250,169, 48, 39, 39, 99,174, 41,154, 10,133, 98, 98, 64, 64, 0, +158, 60,121,130,208,208,208, 3, 73, 73, 73,161, 42,149,234,192,179,103,207, 6,183,105,211, 6,123,246,236,153, 88,153,193,170, + 76,179, 52, 99, 61,165, 20, 70,163, 49, 11, 0,146,146,146,238,155, 18,253,125, 89,179, 36, 89,104, 7, 0,104,210,164, 73,188, +163,163,163,197,253,251,247,225,236,236, 12,189, 94,223,166, 38,199, 18,165,148, 83,169, 84,107,111,223,190,189,180,101,203,150, +248,248,227,143,187,221,189,123,183, 91,139, 22, 45,224,229,229,133,107,215,174,225,204,153, 51,127,114, 28, 55, 54, 57, 57, 89, + 83, 85, 18,212,202,182,253,246,237,219,209, 0, 62,245,243,243,251, 72, 40, 20,194,194,194, 66,144,152,152, 40, 56,115,230, 12, + 0,140,222,183,111,159,177, 54,251,253,239,184, 46,189, 41, 77, 66,200,183,195,135, 15,223, 52,102,204, 24, 89,155, 54,109, 94, +136,168,158, 56,113, 2, 28,199,193,214,214, 22,182,182,182,136,142,142,198,161, 67,135,116,185,185,185,107,196, 98,241,178,170, + 52, 63,253,244,211, 77, 99,198,140,145,181,110,221, 26,185,185,185,101,230,237,216,177, 99, 32,132,192,206,206, 14,182,182,182, +120,252,248, 49, 14, 29, 58,164,201,206,206, 94,165,211,233, 86,252,157,219,254,175, 51, 88, 89, 89, 89,147,191,249,230,155, 46, + 95,124,241,133,109, 97, 97,161,192,214,214, 22, 41, 41, 41,236,169, 83,167,178,242,243,243, 39,215,228,199,174, 95,191, 62,161, + 79,159, 62,107,126,251,237,183, 45, 91,183,110,237, 60,120,240, 96,124,250,222,123, 24,215, 86, 14,173, 86, 11, 66, 8, 78,159, + 62,253,232,226,197,139,158, 98,177, 88, 59,111,222, 60, 14,192,205,106,239,232,195, 14, 69, 56, 54,239,223,121,221, 79, 27,246, +251,250,183,173,235,238,225, 46,109,239,106, 9,189,193,136,212,180, 76, 92,186, 30,174,141,138,184,151, 72,245,250, 15,211, 34, +170,207,226, 14, 0, 17, 17, 84, 15, 96,178,183,183,197,130, 21,155,118,108,220,190,107,127,255,209,195, 6, 8,125, 91,116,197, +179,235,135,112,249,230, 5, 54, 91, 67, 15,229,139, 4,227, 34,162,243,178,107, 90,241, 90,173, 86, 71, 8, 40,254,147,125,157, +106,181, 90, 93,109,206,199,242, 79,126,253,245, 87, 36, 39, 39,107, 99, 99, 99,119, 83, 74, 55, 37, 39, 39,155,156, 62, 97, 29, +165,186, 1,132,156,155,211,177, 99,207, 57,167, 79,203, 6,125,249,165,174,255,135, 31, 78,135, 86,171,135, 68, 66,133, 10, 5, + 3,169, 84, 20,126,245,170,217,218,113,227,108,136, 78,119,246,119, 74, 77, 14,193,255, 29,179, 8,203, 69,176, 48,226,243,175, +160, 46, 23,193,186,113, 39, 10, 53,137, 96, 1, 64,114,114,114,156,179,179,115,219, 69,107,215, 29,236,213,182,117,147, 6, 42, +103,169,173,135, 59,148, 78, 78,200,202,200,192,173,123, 79, 12, 63,157,187,244, 64,173,209, 12, 48, 53, 47, 12,199,113,101,179, +220,188,191,156, 9, 70, 32, 40, 51, 2,165, 73, 3, 45,252, 59,130, 8,133, 48, 82, 10,189, 94, 95,237, 32,172,164,164,164, 4, + 23, 23,151, 15,191,252,242,203,243,127,252,241, 7, 19, 16, 16,208,242,175,191,254,122,173, 69,115, 19, 18, 18, 92, 75,186,181, +242, 44, 44, 44,132, 35, 71,142,132,193, 96, 64, 81, 81, 17,114,115,115,145,153,153,169,157, 50,101,138, 20, 0,196, 98,177,161, +103,207,158,213, 94, 63, 86,237, 75,208, 76, 29,228,186,206, 70, 24,243,113, 94, 70,168,135,141, 48,230,121,219,102,220,186, 85, +251, 18, 52, 11,190,178, 90,148, 17,115, 41, 42,185,240,244,166,109, 7, 15, 8,134,247,255,208,232,170,124, 60, 75,230, 64,247, +191,219,183,218, 70,232,149,164,162,181,141, 92,189, 76,198, 3, 26,226,217,209,122,105,151, 65,173,103, 47,154,182, 74,233,224, + 96, 15,214,200,226,121,220, 51,252,118,112,125, 97,190, 54,123,113,102, 4,189,107,138,150,167,167,167,135, 64, 32,192,145, 35, + 71, 0, 96,125,201,203,235, 79,157, 58, 53,120,200,144, 33,168, 91,183,174,183,187,187,187,180,170, 52, 26, 21, 69,239, 12, 6, + 3,222,244,186,214,132,144,167, 27, 55,110,116,177,177,177, 33, 87,174, 92, 97, 25,134, 57, 90, 83, 13, 39, 39,167, 31,143, 31, + 63,222,137, 82,218,211,215,215, 23,117,235,214, 45,185,158, 70,224,202,149, 43,187, 18, 19, 19, 71,188,161,197,157, 41, 33, 4, +121,121,121,165, 3,237,244, 74,165,242,173, 92, 52, 58, 49, 49,113,187,163,163,227,233,249,243,231,127, 87,175, 94,189,177,163, + 71,143, 22, 52,108,216, 16,185,185,185,176,176,176,128, 74,165, 66, 98, 98, 34,182,111,223,110, 76, 75, 75,251,141, 97,152, 5, + 73, 73, 73, 73,181,213,180,182,182,134,179,179, 51, 18, 18, 18, 74, 53,183, 24, 12,134,133,233,233,233,169,224,121,179, 6, 43, + 37, 37, 37,195,201,201,169,233,175,191,254,186,182, 56, 77, 67,113, 84, 43, 63, 63,127,114, 74,241,136,241, 26,113,236,216,177, + 39, 0, 2,250,244,233, 83,111,255,254,253, 91,118,238,220,217,185, 95,191,126, 24, 60,120, 48, 88,150, 69,175, 94,189, 70,188, + 28,181, 50,133,212,176, 67, 17, 36, 32,160,233,221, 91,151, 63, 13,185,123,179, 15,165,212, 7, 0, 33, 12,243,159,197,158, 35, +106,190,216,115, 68, 68, 94, 54,128,143,124, 93, 45,188, 22,175,223,177,213, 76,200,117, 84,179,204, 85,181,150,249, 34, 36, 33, +175,214, 11,140,150,100, 94, 95,206, 48,100, 70,241,115,211,150,134,169, 68, 99, 38, 0, 8,133,162, 61,119,239,222,157, 29, 27, + 27,155,104,202, 12,175,138, 56, 72,105,220,167,132,156,153,238,227,211,181,207,148, 41, 34,191,238,221,205,109,220,220, 56, 74, +169,241,249,173, 91,228,198,145, 35,162, 27, 71,142,200, 12, 90,237,249,125,148,214,104, 6,212,223, 49,139,176, 52,130, 85,207, +203,245,204,192, 1,189,187,123,121,168, 0, 0, 79,159, 39, 33, 35, 43,247, 76, 77,115, 13,149,154, 44, 66,136,255, 95, 44, 59, + 88, 36, 18,245, 33, 37,169, 24,104, 45, 22,123, 54, 26,141, 9,109,219, 86,178,121,243,150, 85,102,200, 82, 77,188,240, 6,169, + 84,170, 79,218,183,111,191, 44, 41, 41,233, 96,122,122,122,225, 27,186, 46,244,218,185,115,231, 9,142,227,204, 94,138,112,229, + 37, 37, 37,153,151, 52,164,117, 79,157, 58,181,139, 16, 82,173,129, 95,181, 47, 65,179,114, 78,179, 67, 26,117, 76,127,162, 44, + 58,180,106,109,241,172,150,121,171,115,114, 1,252, 50,169,191, 13, 23, 25,252,203, 10, 23,139,199, 51,214, 30,202,250,173, 58, + 61,134, 97, 30,183,105,211,166,204,104, 85, 83,255, 73,181,169,128,103, 87,179,151,217,250,144,139,159,205, 28,248,189, 78,175, +111,193, 16, 80,145, 88,124, 63, 39, 39, 99,174,169,230,170,196, 88,252, 60,109,218,180,201, 79,158, 60,217, 85,154,243, 46, 41, + 41,233,186, 74,165,250, 49, 46, 46,110, 66,124,124,252,250,248,248,120,147,205,149, 82,169,212,168,213,106,142,101, 89, 70,171, +213, 66, 34,145,232,223, 84, 99, 80, 88, 88, 56,116,195,134, 13,191, 26, 12,134, 38,132,144,163, 57, 57, 57, 53,206,122, 27, 28, + 28,108,240,246,246,238,119,252,248,241,201, 15, 30, 60,152,234,232,232,232,152,154,154, 26, 27, 23, 23,183, 52, 37, 37,229,151, + 55,100,174, 16, 28, 28, 44,245,243,243,211,150,171, 23,139,183,101,188, 85,133,237, 91,106,106, 58,128,137,174,174,174,107,166, + 79,159,190,184, 69,139, 22, 3, 71,141, 26, 69,228,114, 57,246,238,221,139,152,152,152, 67,148,210,217, 53,233,210,173, 76,211, +204,204, 12,123,247,238,165, 49, 49, 49,251, 24,134,153,147,148,148,244,175, 88, 72,251,239,128,188,233,187,160,154,134, 79,251, +244,233, 83, 47, 35, 35, 99,139, 86,171,125, 7, 64, 97,104,104,168,249,127, 59, 36, 91, 21, 1,222,246,138,160,136,234, 27, 50, + 83, 53, 95, 30,160, 94, 27,205,154,104,152,170, 89,217, 98,207,156, 86,155,100,203,178,119,215, 81,170, 51, 85,211,197,197,101, + 33, 76,204, 23, 85, 66,100, 98, 98,226,119,181,169,207, 6, 13, 26,208,232,232,104, 80, 74,201,155,220,239,127,199,177,244,111, +210,220,190,218, 71,213,168,121,227,233, 97,193,145, 63,148,116, 31,150,177, 96,146,141,121,199,119, 3,230, 94,189, 16,244,253, +188,117, 47,118,113,190, 13,219, 78, 8, 97, 42, 50, 22,165,201, 61,107,170, 89,167, 78,157, 77,190,190,190, 95,132,132,132,252, + 26, 23, 23, 55,250,159,186,237,132, 16, 82,183,110, 93, 73, 77,162,115,252,121,100,154,166,147,147,147, 63,195, 48,115, 75,110, + 56, 22, 39, 36, 36,220,126,131,154, 70, 74,233,162,228,228,228,144,255,239,109,255,215, 69,176,254,110, 74, 35, 90,239,191,255, +190,131, 64, 32,248,199, 47,210,105,138,185,170,105, 20,234,159,160,241, 50, 37, 6,234,250,155,208,122,217, 44,253,157, 60,126, +252,152,240,167,245, 63,143, 79,191, 10, 77, 2, 48,197,191,130,212, 84, 37,166,106,122,151,247,223,206,109,175, 44,106, 83,219, +133,152,227,226,226,198,170, 84,170,169, 53,153,125,248, 95,218,110, 10, 64,203, 31,253,111,158,148,148,148,187, 0,250,254,211, + 53,121,131,245, 15,225,175,191,254, 74,227,119, 7, 15, 15, 15, 79,245,252,211,205, 21, 15, 15, 79,241, 0,233,192, 74,238, 62, + 76, 14,253, 17, 66, 2,107,113,119,115,142,215,228, 53,121, 77, 94,147,215,228, 53,121,205,127,151,230,191,134,210, 89, 76,127, +199, 3, 64, 32,175,201,107,242,154,188, 38,175,201,107,242,154,188,230,191,237,193,240, 22,147,231,239,230,167, 1,196,229,167, + 1,196,229,239,250, 60, 15, 15, 15, 15, 15,207, 63, 13,225,219,182, 65,254,254,254,222,148,210,161,132,144,129, 37, 17,186,253, +132,144,157,119,239,222, 53, 41, 3,173,153,153, 89,170, 70,163,113, 0, 0,153, 76,150,166,209,104,156,202, 71, 75,129, 87,150, +200,160,197, 63, 83,249,128, 85, 79, 79,207, 84,173, 86,235, 96, 66, 52,241, 18, 33,228, 50,195, 48,151,106,147, 94,224,221,119, +223, 29, 33, 16, 8, 22, 3,128,209,104,252,246,194,133, 11,127,252, 93,245, 76, 8,105,227,166,114,250, 93,111,208,179,169,233, + 89,115, 41,165, 71, 42,250,220,134,190,100,169,144, 96,122,201,255, 43,199, 31,165, 85, 78,253,174,233,231,171, 40,159,191, 72, + 36,154,232,232,232,216, 43, 33, 33,225, 46,128, 25,148,210,106,143, 1, 43, 23,239, 79, 69, 34,209, 48,131,209,232, 37, 18, 8, +158, 26, 12,134, 29, 57,137, 17,219,249, 75, 5, 15, 15, 15, 15,207,223,102,176,218, 53,176,109, 72,168,126,186,136,208, 78, 6, + 74,174, 80, 34, 94,121,227,113,102,212,235, 20, 64,165, 82,185, 17, 66, 2, 40,165, 77, 24,134, 9,227, 56,238, 76, 77, 23, 59, +246,243,243,115, 3,240, 49,128, 33,109,219,182,109, 54,110,220, 56,212,175, 95, 31, 26,141, 6,183,111,223,158,181, 99,199,142, + 89,126,126,126, 15, 0,236, 2,176, 59, 56, 56, 56,190, 50, 45,141, 70,227, 80,234,149, 8, 33, 14, 3, 7, 14,188, 93,222, 84, +149, 44, 46, 75, 40,165, 55, 8, 33,215,141, 70,227,205,125,251,246,197, 55, 38,164,205, 24, 15,241,254,201,207,116,174, 47,107, +106,181, 90,135, 99, 83, 39,128, 82, 14,154,204, 12,116, 88,182,182,236,189,147, 61,219,130, 49, 26, 32,145,138, 47, 5, 28,189, +113, 25,192,165,146, 71,141, 17, 8, 4,139, 79,157, 58,229, 76, 41, 69,143, 30, 61, 22, 3,248, 91, 12, 22, 33, 68,218,214,191, +197,197,163, 7,118,201, 10,178, 82,209,179,223,224, 29,132,144, 17,148,210, 3, 47,152,165,222,196,145, 8, 49,125,220,146,157, + 2, 0,216, 48,123,232,140, 53, 61,200,186, 41,167,105,138,139,139, 75, 23, 74,233,140, 18,189, 21,137,137,137, 23, 55,244, 38, +142, 16, 96,230,184, 37, 59, 9, 0,108,156, 61,116,250,134,222,100,237,248, 19, 53,155, 37, 73, 8, 25, 63, 98,196,136,117,139, + 23, 47, 22, 56, 59, 59, 35, 49, 49,177,167,183,183,119, 67, 66,136, 55,165,180,210,193,193, 54,117,124,246,244,236,217,203,243, +227, 65, 3,228,246,118,214, 72, 72,206,176,248,115,199,206, 49, 54,117,124,122,101,197,133, 14,230, 47, 23, 60, 60, 60, 60, 60, +111,204, 96, 53,107,102,105,101,166,166, 83,205,196,244,227,158,109,188, 61,250,118,107, 79, 60, 61, 61, 17,245, 40,202,235,226, +181, 59, 35,187, 52, 54,127,174,214,147,221,106, 51,178,234,193,131,170,215, 15, 27,225, 75, 12, 6, 99,241,111,138,133, 48, 94, + 72,119, 61, 20, 24, 24,232, 49,106,212, 40,248,250,250,226,238,221,187, 93,246,237,219, 55,217,205,205,237,142,193, 96, 56, 33, +149, 74,131,170,203,161,226,231,231,183,204,197,197,101,198,180,105,211,136,191,191, 63,164, 82,105,217,123, 74,165, 18, 93,187, +118, 69,215,174, 93,145,154,154,218,236,226,197,139,205,118,238,220,185,212,207,207,111, 69,112,112,240, 44, 83, 42,104,238,220, +185,254, 21,188,124,138, 16,242,132,101,217,123, 62, 62, 62,241,141, 8,169, 63,182,119,251,179,227, 59, 52, 80, 84, 17,157,194, +157,197,197,171,107,148, 55, 88,180, 40, 31, 34, 11,243, 75, 34,165,242, 21,115,213,132,144, 22,109,173,153,223,127,201, 50,250, +212,192,100, 33, 62, 62, 30,150,150,150,102, 1, 1, 1,201,132,144,249, 23, 47, 94,220,242,134,143,155, 54,243,167,143, 23,103, +199,132, 34,229,225, 13, 76, 29,212, 81, 62,229,167,191,190, 7,112,160,106,227,195, 48,127, 60,181,155, 53, 5,152,204,113,220, +220,200,200,200,206, 0,208,164, 73, 19, 9,128,139,219,162,173,123,143,104,146, 91,235, 52, 11,132, 16,177, 64, 32,248,121,219, +182,109,159,127,250,233,167,136,141,141,197,213,171, 87,161, 84, 42,177,112,225, 66,247,105,211,166, 45, 5, 48,185,178,200, 85, +143,158,189, 61, 55,254, 48,199, 59, 63, 43, 87,187,249,231,189,119, 84,205, 26, 49, 83, 38, 77, 48,215,177,122, 39, 43, 23,239, + 79,249, 72, 22, 15, 15, 15, 15,207, 27, 49, 88,157,234, 43,110,247,247,171,231,215, 55,176, 61,211,160,145, 55,196, 50,121,217, +123,205, 91,250,162,121, 75, 95, 50,122,100,190,231,253,251,247,231,156,186,116,107,118,167,250,138,224, 43,209,133,173, 43,211, + 51, 24, 33,220,185,115, 39, 0,224,199,175,135, 10,126,190, 18,229, 81,126,193,216,206,157, 59,163,115,231,206,204,210,165, 75, +219, 92,188,120,177,205,238,221,187,245, 46, 46, 46,107, 18, 19, 19,247, 85, 81,204, 25,251,246,237, 35, 2,129, 0, 2,129,160, +210, 15, 57, 58, 58,162, 91,183,110,112,118,118, 38, 95,127,253,245, 12, 0, 21, 26, 44,153, 76,150, 70, 8,113, 0, 0, 27, 27, + 27,227,252,249,243,239, 81, 90,214, 3, 72, 41,165, 55, 24,134,185,201,113,220,173, 35, 71,142, 36, 52, 37,196,161,143, 95,163, + 43,227, 63, 25, 40,167,251,215, 84,106, 14,180, 57, 89, 21,190, 46, 81,200, 47, 73, 20,138,203, 82, 51,179, 23,204, 85, 83, 66, + 92,219, 54,242, 56,179,225,171,161,230, 38, 70,241, 26,118,233,210, 69,102, 52, 26, 81, 88, 88,136,141, 27, 55, 90,154,153,153, + 89,246,234,213,107, 30,128, 50,131,229, 77, 72,243, 15, 85,130,209,243, 19,217, 9,181, 48, 48, 86,157,218,249,199,252,180,108, +158,133,127,219, 78,120,124,241, 79,100,101,229, 35, 55,167, 0, 47,103,253, 6,128,241, 39,104,234,134,190,100,229,134,111,134, +206, 36, 12, 67, 90,244,159,129, 30, 13,233, 36,149, 74, 21, 78, 8, 17,149, 46, 31, 67, 8, 17,186,186,186,170, 26, 54,108,185, +178, 65,143,198,216,248,237, 39,160,197,139, 52,174, 52, 53,122, 69, 8,113, 48, 55, 55, 63,114,230,204,153, 54,173, 90,181,194, +205,155, 55,241,236,217, 51,140, 31, 63, 94, 55, 97,194, 4,241,240,225,195,201,212,169, 83,191, 36,132,236,167,148, 94,123,249, +251, 34,145,104,216, 71, 3, 62,144, 20,228,228,105,116, 90,189,206,198,206,138,211, 22,106,138, 50,178,243, 52,159, 12, 29,166, +187,119, 55,120, 24,128, 87, 12,214,235,212, 39, 15, 15, 15, 15,207,191,212, 96,201, 4,198, 86,243,119,221,135, 49,235, 9,104, +110, 28,104, 97,202, 43,159,145,219,185,161,113, 59, 71,200,173,236,153,176,135,171, 91,189, 20,181,169,114,170,102,169,185,218, + 60, 84,213,180, 48, 59, 89, 12, 0, 10,107,103,253,232, 29,137,225,173, 90,181,130,189,189,189,248,250,245,235, 83, 1,236,171, + 66,147,232,194,130,241,176, 79,123,212,123,152, 5,185, 92, 14,137, 68,242,194, 7,162,162,162,112,249,242,101,196,197,197,193, +203,203, 11,120,105, 28, 85,121, 77,181, 90,237,216,179,103,207,160, 21, 43, 86,116,254,241,199, 31, 31,108,219,182,173,115,101, +221, 74,222,132, 40, 90,184, 59, 5,125,255,245, 24,107,122,242,119,166, 40, 51, 13,226, 74,202,217,126,241, 42,180, 95,188, 10, + 0,176,215,219, 25, 50, 11,115,200,148,202, 75,129,167,239,190, 18,185,242, 35,196,194,203,217,246,194,250,249,147, 21,184,176, + 71,130, 47, 22, 86, 89,159,126,126,126, 13, 3, 2, 2,174, 47, 90,180,200, 42, 62, 62, 30,215,174, 93,131,187,187, 59,138,138, +138, 94, 88,175,204,155, 16,199,214,141,234,158,153, 61,109,164, 37,128, 9,166,236,163, 23, 76,136, 64,240,253, 15,243,103, 88, + 88, 74, 41,158, 92, 59,132,103, 79,158,227,118,196,115,195,246,179,161, 70,157,193, 56,170,162,250, 28,127,148,126, 51,173,171, +244,247,187,249, 94, 71,251,116,153,208, 96,209, 16, 71,232,245,250,173,233,233,233, 24, 61,122, 52, 56,142, 67,199,142, 29, 59, + 80, 74, 19, 39, 77,154, 4, 47, 47, 47,108, 57, 29, 85, 36,204,186, 21,176,227,122,222, 93, 83,142, 37, 66, 72,179,186,117,235, +158,185,120,241,162,163,139,139, 11,130,130,130,144,146,146, 2, 39, 39, 39, 76,152, 48, 65,178,108,217,178,109,121,121,121,131, + 22, 47, 94, 44,123,240,224,193,110, 66,136, 91,137,105, 46,211, 52,114, 70,149,167,187, 74,121, 96,247,233,251,214,230,114,212, +241,114, 19, 11,148, 22, 70, 10, 82, 84,199,217, 94,108,228,140,170, 10,246,255,107,213,167,169,240,154,188, 38,175,201,107,254, + 27, 52,255, 85, 6,171, 20,253,179, 32, 72,188, 7, 0, 92, 83,208,236, 39,224,242, 18, 65,229, 14, 40,228,204,144,145, 20,139, +135, 87,246,129,234,171,207,123, 39, 18,128,157, 51, 97,168,208, 74, 6, 72,204,237,245,249,249,249, 80, 40, 20, 40,204, 78, 22, + 79,251,161, 44,178, 37,190,120,241, 34,130,131,131,161, 82,169, 76, 42, 35,213, 21,247, 34,234,116, 58,232,116, 58,164,244,110, + 13, 69,219,119,144,253,201, 4,156, 63,127, 30,105,105,105, 16,139,197,144, 72, 36, 96,217,234,147,197, 51, 37,171,198,150, 70, +173, 42,250, 76, 0, 33, 66, 87, 27,229,209, 13,243, 38,123, 48, 55,142,137,212,113,209, 72,210, 24, 97,101, 66,125, 74,149, 10, + 72,228,102,151, 36, 74, 69, 69,230, 74,164, 80,202,142,254,190,104,170,147, 32,228,188, 76, 29, 29, 90,102,218,202,211,173, 91, +183, 49, 0,230, 81, 74,115, 2, 2, 2, 28, 23, 47, 94,108,157,152,152,136,136,136, 8,236,221,187, 55,157, 45,222, 80, 66, 41, + 93, 0, 0,237, 8,145,213,177,183, 58,189,254,187,201,230,184,184, 71,130,207,106,158, 92,221,178, 73,223,227, 31, 14, 31, 55, + 97,221,228,190, 40,204, 87, 99,231,217, 16,156, 10,126,242, 62,128,171,148,210, 74, 51,220,255,120, 94, 27,237,226,226,210,245, +139, 47,190,184,119,240,224, 65,187, 31,126,248, 1, 70,163, 17, 44,203,130,101,217,178,255,141, 70, 35,118,237,218,133,171,119, + 35, 38, 37, 37,229,153,180,222, 27, 33, 68,229,225,225,113,238,214,173, 91,246,114,185, 28,103,207,158, 69, 78, 78, 78, 89,228, +106,196,136, 17, 36, 39, 39,231,227,141, 27, 55,126, 24, 19, 19,243,195,149, 43, 87, 50, 1, 8, 0,176, 47,238,115,225, 19,150, + 53, 52,118,110, 82, 95, 56,168,111,167, 78, 5,153,161, 80,218,250,224,198,253, 39, 71,179,179,115,212, 12, 35,124, 82,254,243, +111,162, 62,121,120,120,120,120,254,229, 6, 75,115,127, 7,180, 97,123, 32,246,234, 2, 73,211,193, 16,185,182, 67,124, 88, 16, +238,157,248, 17, 9,225, 87, 65, 57, 35, 28,221,171, 95,106,238,143, 16, 42, 82,169, 84,193, 73, 73, 73, 8, 9, 9,193,147, 39, + 79, 32,147,201, 94,249,220,249,243,231, 1, 0, 78, 78, 78, 38,109,132,196,191, 61,220,238, 39, 35,190,133, 51, 0,192,237,126, + 50, 0, 96,233,236,217, 16,139,197, 16,139,197,101,139,194,154, 98,176, 72,201,135,185,226,110, 42, 90,209,251,254, 82,209,206, +221,243, 38,182,150,198,132, 73,180, 15,110, 32, 73,203,209,163,169,198,227,222,166, 24, 44,185,252,146, 68,169,188, 44, 86, 40, + 94, 48, 87, 0, 64, 69,162,237,127, 46,152,232,163, 72,125,170,208,220, 57,143,100, 13,167,183,168, 88,102,193,201,147, 39, 29, +132, 66,161,147,209,104, 68, 92, 92, 28,194,195,195,177,118,237,218,212,252,252,252,128,224,224,224,168,114,229,101, 90,153, 73, +246,110, 95, 56,217, 83, 24,122, 73,166,125,242,160, 66,211, 86, 21,246,205,251,247,120, 63,160,197,241, 49,159,124,139, 15,122, +119,199,240, 0,111,250, 60, 41, 75, 3,224, 44,165,212, 88,221,247, 19, 19, 19, 19, 93, 92, 92,186, 13, 24, 48, 96, 71,211,166, + 77,155, 80, 74,209,184,113, 99,244,235,215, 15, 7, 14, 28, 64, 68, 68, 4,242,243,243,245, 87,174, 92, 89,147,148,148,244,155, + 41,101, 34,132,200,173,173,173, 79, 93,184,112,193, 94, 46,151,227,204,153, 51, 80,171,213,112,118,118,126, 33,114,181,116,233, + 82,217,243,231,207,215,159, 62,125,218, 29, 0, 83,209, 66,216,122, 86,187,229,183,109,187,215, 77,253,242, 11,151, 11, 55, 35, +206,107, 11,242, 45,235,214,141,207,179,183, 86,154, 47, 94,186,188,142,158,213,141,169,184, 62,131,106, 85,159, 60, 60, 60, 60, + 60,255,114,131, 85,218,197, 68, 57, 22,186,232,179,208, 69,159,133,162,203, 28, 28, 89, 50,236,133,207, 25,141,134, 90, 21, 64, +163,209, 64,172,180,213,255,248,245, 80, 49, 0,112, 34, 69,217,234,240, 28,103,218,194,235, 53, 89,210,171, 38, 6,171, 68,247, + 21,243,224, 33, 85, 94,218,242,213,160,182,182,198, 34,145,238,234, 81, 36,106, 57,246,135,104,125,209,157, 28,186, 98,118, 37, +154,199,186,181,134, 33, 59, 3, 50,115,197,165,158, 23, 31, 84, 56, 91,208, 67,102,113,126,239,212, 33, 29,157,196, 16,235,142, +239, 67,146,150,211,110,138, 49,252,182,182,146,109,166,148,226,217,179,103, 40, 42, 42,194,245,235,215,113,224,192,129,244,151, +205, 85, 73,121,131,126,157, 49,172,141, 69,126,138, 88,119,231, 28,146,180,156,182,161, 41,166,202,167,127, 7, 49, 67,206, 16, + 70, 96,214,187,147, 55,166,124,209, 31,171,127,253,139,213, 57,116,234,179,238,200,137,143, 10,180,250,217,166,152,171,114, 38, + 43, 20,128,183,187,187,187,148,101,217, 46,125,251,246, 61,209,187,119,111,220,184,113, 3,231,206,157,107,160,215,235,147, 1, + 64,165, 82, 45, 4,224,200, 48,204,138,132,132,132,167,149,236, 35, 70, 44, 22,239, 62,119,238, 92, 83,149, 74,133,115,231,206, + 65,173, 86, 99,220,184,113,186,137, 19, 39,138, 71,140, 24, 65,114,115,115,203, 34, 87,215,175, 95,207,172,204, 92, 1, 64, 94, +194,195,147,214,110, 77,219,119,233,220,174,127,131, 6,245, 45,158,230,231,165,201,229, 50,179,139,151,174,136,111,221,188,181, + 62, 47, 33,242,118,197,245,121,222,228,250,228,225,225,225,225,225, 13, 86,149, 24,179, 94,109,243,140,108,237,215,105,110, 55, +243,116,184,153,153, 25, 54,110,220, 8,185, 92, 94, 99,227, 84,116,242, 16,226,199, 15, 45,139, 92,149, 70,178,208,115,196,107, + 25, 44,142,227,174, 3,120,193,229, 41, 28, 27, 13,217,253, 73,183, 14,222,158, 46,140, 97,239, 90, 36, 20,177,154,121,143,244, +154,135,249,244,253,136, 10, 6, 79,151, 97,208, 65,166, 40,142, 92, 85,100,174,148, 78, 13, 63,220, 54,164, 75, 64,139, 70,245, + 24,118,207, 42, 36, 22, 25, 10,102, 69,234,245, 79, 11,233,193, 74, 76,229,188,238,221,187,207,179,181,181,149,173, 91,183,206, +178,110,221,186, 96, 89, 86,247,178,185, 82, 56, 54, 26,178,103, 68,207, 14, 13,157,172, 25,195,254,159, 16,175, 54, 22,173,125, +106,216,182,201, 4,115,101,103,169, 60,189,105,201,120, 51,185, 84, 4,141, 70,131,101, 27,246,227,204,181, 7,125,210,195, 14, +157, 6,112,186,182,251, 91,175,215,127, 30, 24, 24,184,122,250,244,233, 96, 89, 22, 31,127,252, 49, 98, 98, 98,206, 68, 71, 71, +175,117,117,117,253,122,252,248,241, 42,123,123,123,140, 29, 59, 86, 12, 96, 68, 37, 50,203,119,238,220,217,167, 69,139, 22,184, +116,233, 18,114,114,114,224,236,236,140,137, 19, 39, 74,150, 46, 93,186, 45, 47, 47,111,208,146, 37, 75,100,207,158, 61,171, 50, +114, 85,158, 28,154,187,232,151,213, 99,191,110,221,182, 3, 19, 29, 29,197,198,181,238,204,156, 63,119,226,114,182,131,116,219, + 11,245, 57,178, 87,141,235,147,135,135,135,135,135, 55, 88,213, 70,135,140,249,175, 14,118,231,140, 38, 7, 50, 76, 54, 78, 70, + 19, 53, 57,173,166, 58,195, 84, 35,131, 85, 50, 6,235, 20,165,244, 5,131,101,229,212,168,243,156,153,147,215,116,252,176, 39, +147,250, 69, 59,228, 20,104,181, 51, 34, 88, 46,161,168, 26,115, 5,128, 49,234, 47,137, 44, 44, 46,139, 95,154, 45, 8, 0,102, +142,245, 91,207,250,234,203, 13,239, 14,233, 75,210,199,117, 68,118,142, 90,251,117, 56, 75, 18,213,116, 80, 4,165, 23, 43,210, + 59,127,254,252,102, 0,155, 3, 2, 2, 82, 21, 10, 5, 10, 10, 10, 94,169,215,210,242,118,248,176, 39,147,250,121, 27,100, 21, +234,181, 51,194, 89, 36,169,185,221,213,153, 43,123, 43,243,211,155, 22,143,151, 39, 37,196, 64, 44, 22, 67,169, 84,226,236,213, + 48,164, 63, 56,124,250,117, 14, 56, 87, 87,215,249,147, 38, 77,154, 55, 98,196, 8,100,103,103,227,236,217,179,120,247,221,119, +241,243,207, 63,215,189,112,225,194,234,246,237,219, 67, 32, 16,224,236,217,179, 48, 24, 12,143, 43,217,159,253, 71,143, 30,253, +245,135, 31,126,136,219,183,111, 35, 57, 57,249,133,200, 85, 78, 78,206,199, 27, 54,108,248,240,249,243,231,213, 70,174,202,227, + 2,180,246,172,215, 82,252,205,220, 31,161, 45, 74, 19,166, 39,222,188,116,254, 44,189, 81, 55, 43, 75, 14, 32,183,182,245,201, +195,195,195,195,195, 27,172, 10,220,139, 17, 66,103, 31,176,201,161,255,121,233,165,217,132, 98,185, 18,156,177,122,227, 50,194, +151, 24, 70,214,131,112, 85, 47, 6, 98,165,173,190,221,204,211,225,149,125, 86,169, 84,154,218, 69,104, 20,247,254, 80, 80,175, +199, 7,120,218,220, 9,212,160, 47,139,100, 97,246,236, 23, 76,150, 88, 44,134, 78,167, 3, 42,232,246,123,137, 91,132,144, 24, + 0, 55, 40,165,212,175,161,215,247, 50,133, 98,164,191, 79, 61,187, 41,227, 63, 23, 61, 79,211,226, 66,199,111,114,246, 47,159, +169,140,167,202, 9,177, 52,231, 90, 53,134,242, 82,239, 43, 15, 95,137, 92,249, 54,244,250, 86, 38,151,125,209,182, 89, 67,167, + 89, 83,199,139,158,167,106,201,133,214, 51,242, 14,172,152, 33,127, 6,243,175,227,105,246, 69, 19,182,127, 94,239,222,189,231, + 81, 74, 41,199,113,115, 1,160,124,121,167, 78,252, 66,244, 52, 69,131,243, 29,191,205, 62,176,124,166,121, 60,170, 46,175,189, + 79,255, 14,142,214, 22,167, 55, 45,153, 32, 79, 78,140,133, 84, 42,133,185,185, 57,226, 83,115, 33, 18, 10,212,175,115,176,185, +187,187, 75,219,180,105, 51,115,248,240,225,136,140,140,196,172, 89,179,146,147,146,146, 14, 30, 57,114,100,220,212,169, 83,133, +157, 59,119, 70, 90, 90, 26, 54,110,220,104,184,125,251,246,146,148,148,148,149, 21, 30,180, 66,225,231,223,127,255, 61, 77, 74, + 74, 34,207,158, 61,131,179,179, 51,190,252,242, 75,201,146, 37, 75,202,198, 92,213, 36,114, 85, 74, 66, 66,194,165, 6,245,234, +224,253,147,107,192, 26,180,151,114, 50,227, 46, 63,124,154,125,201, 70, 34,153,214,209,207,167, 86,245,201,195,195,195,195,195, + 27,172, 87, 48, 80, 38,119,231,178,177,150,239, 15, 27, 7, 51,247,119,160, 13,223, 7, 46, 63, 5, 92,126,177,129,145, 40, 44, + 96,110,231,134,130, 34, 13,174, 62,120, 10, 3,101,114,171,212, 51, 66,184,232,231,255,204, 22,180,178,178, 66,110,110,238, 11, +145, 23,185, 92, 14,149, 74,133,188,188, 60,236,223,191, 31,180,154,200, 16,165,244,251,225,195,135,127, 55,126,252,120,166,222, +144, 81, 40,184,121,229,229,104, 20,204,204,204, 32,147,201,144,144,144,128, 71,143, 30,113,148,210,239,171,137,120,221, 98, 89, +246,254,238,221,187, 19, 26,120,185,246, 12,104,213,122,210,236,111,102,153, 71, 92, 57,131,185, 75,214,115,245,253,123,228, 46, +219,117, 56, 63, 87, 89,167,107, 81,210,195,123,213, 85, 50, 33,228,213, 36,162,158,117,222,109,231,219,114,250,220,185,223, 90, +132, 95, 57,139,239, 86,108,162, 13, 90, 4,230,174, 56,112, 36, 47, 67,238,222, 93,157,250,159, 49, 63, 85, 17, 20, 20,180, 25, +192,230,210,231, 47,151,119,214,194,181, 92,195, 86, 61,179,151,237, 58, 80,152,103, 94, 39,176,170,242, 58,120, 15,104,239,230, +108,115,250,167, 69, 99,229, 41,137,113,144, 74,165, 80, 42,149,136, 75,206,193,188, 53,123, 11,245, 28,215,243, 53,143, 55,169, + 66,161,144,234,245,122,252,241,199, 31, 72, 76, 76,108,151,156,156, 28,231,228,228,180,105,236,216,177,235,154, 52,105,210,248, +209,163, 71,143, 11, 10, 10, 38,164,164,164, 60,172, 76,196,202,202,170,157,189,189, 61,185,113,227, 6,198,142, 29,171,251,242, +203, 47,197,195,135, 15, 39,217,217,217,181,138, 92,149,139,174,117,238,247, 94,123,116,232, 54,238,146, 78,147,115,249,249,195, +109,151, 24,122, 77,230,215,210,167, 86,245,201,195,195,195,195,195, 27,172, 10, 73, 23,170, 29, 54,109, 63,176,114,247,190,131, + 95,140, 30, 57, 84, 22, 16,248, 41,196, 25, 97, 96,147,130,225,226,221, 17, 84,104,134,219,119, 67, 16,250, 36, 94, 83,164, 23, +108,205, 19,171,167,191,100, 44, 2,171,202,149,145,155,155, 11,119,119,119,236, 26,215,168,169, 54, 47, 77, 92, 7, 0,147,104, +169,191, 16,213, 59,252,242,229,203, 5, 0,182, 54,104,208, 96, 95, 85,154, 33, 33, 33, 11, 90,182,108,121,228,155,111,190, 89, +218,160, 65,131,158,163, 23,254, 12,241,148,225, 80, 71,132, 66, 30, 48, 8, 54, 54, 54,200,204,204,196,237,219,183,145,159,159, +127,138, 82,250,205,189,123,247,194,170,210,164,148,222,244,241,241, 73,168, 83,167,142,149,131,210,236,183,113,159, 13, 55,143, + 13,189,137,212,168,251,184,118, 53, 42,123,231,129, 35,137,121,185,233,159, 85,213,184,150,215,100, 24,230, 5,115,213,176,161, +157, 82, 33,181,222, 62, 97,244, 40,139,184,176,219, 72,139,186,135, 43,215, 30,103,239,218,125, 40, 61, 51, 51,117,100,101,230, +170,186,250,172,168,188, 55,175, 60,202,222,189,239, 80, 66,126, 97,246,231, 21,149,183,188,166, 82, 33,154,126,228,143, 69,242, +164,132,216, 50,115, 21,155,156,141,239,214,236, 46, 84,235, 12, 61,211, 67, 15,153, 20,169,169,170,156, 28,199,129,101, 89, 80, + 74, 33,145, 72,242, 0,160,196, 76,117, 53, 85, 51, 35, 35, 35, 40, 38, 38,166,159, 82,169, 44,139, 92,229,230,230, 14, 90,182, +108, 89,141, 34, 87, 47,151, 51, 33, 33,225, 82, 61, 79,215,229,201,131, 7,105,157,157,237, 47, 29, 61,121, 39,204, 65,105,246, +176,182,245,249,166,224, 53,121, 77, 94,147,215,252, 55,104,254,171, 12, 86, 68, 4,213, 3,152,236,237,109,177, 96,197,166, 29, + 27,183,239,218,223,127,244,176, 1, 66,223, 22, 93,241,236,250, 33, 92,190,121,129,205,214,208, 67,249, 34,193,184,136,232,188, +236,234,126, 76, 36, 0, 59,116,232, 80, 33, 0, 72,132, 96, 87,245,233, 19,212,180,105,211,142,109, 13,105,226,121,235,138, 35, + 91, 11, 38, 13, 21, 7,221, 14,218, 39,149, 74, 55, 63,123,246, 44,207,148,141, 40, 49, 76,189, 90,181,106,245,206,215, 95,127, +189,188,183,135,107,235,254,237,187, 64, 36, 18,225,246,237,219,200,204,204,188,205, 48,204,204,144,144,144,203,166,232,133,133, +133,101, 52,173,239, 62,217,198, 76, 60,125,194,208,254,246,233, 79, 34,144, 16, 25, 2, 0,208,106,213,134,228,168, 75, 45,106, + 82,201,165, 11, 55,123,123,123,139,141,218,130, 17, 50,161,197,220,113, 31,247,115,200,124,254, 16,241,225,197,233,158,180,154, + 34,125,124,212,133,198,181,217,137,238,238,238, 82,133, 8, 99, 42, 44,175, 78, 99, 72,121, 28,217,210, 20,157, 34,173,110,201, +130,213,219,187, 47,154, 62, 82,106, 97, 97,129,224, 7,209,152,187,106, 87,141,204, 85,117, 80, 74, 97, 48, 24,106, 52,243,179, + 2,102,182,104,209,162,209,226,197,139, 27,148,140,229,122,173,200, 85,121,158, 60, 75,152, 21, 16, 16,224, 29,253, 40,184,139, +141,153,120,199,235,212, 39, 15, 15, 15, 15, 15,111,176, 80,181,209,202,203, 6,240,145,175,171,133,215,226,245, 59,182,154, 9, +185,142,106,150,185,170,214, 50, 95,132, 36,228, 61, 53,245,199,254, 8,161,162,151, 95,243,246,246, 86, 68, 11, 81, 80,250, 60, + 58, 11, 72, 74, 74, 90, 81,155,141,185,115,231,206,101, 0,109,124,125,125,251,159, 32,100, 54,240, 20,148,210, 37, 33, 33, 33, +135,106,162, 99, 46,196,131,142,222, 94, 46,157,124,155,202, 4, 70, 53, 18, 34,159, 32,171, 80,131,179,225,177, 57, 12,101,126, +175,109,101, 51,250,162,251,157,188,235,213,121,199,175,169, 92, 68,116, 72,136, 8, 70,174, 90,135, 51,225,177,185, 32,164,214, + 3,165,223, 84,121, 83, 66, 15,223,177,247,233, 31, 72, 8, 57, 55,123,226, 16,233,188, 85,187,223,168,185,178,177,177, 41, 74, + 73, 73,201,212,104, 52,182,169,169,169, 58, 27, 27,155,162, 90,154,180,104, 66, 72,243, 41, 83,166, 44,252,250,235,175,167, 47, + 95,190, 92, 92,155, 49, 87,149,145,157, 24,123,232,157,166,111,126,255,243,240,240,240,240,240, 6,171, 66, 74,204, 84, 64,128, +183,189,226,234,163,244,194, 55, 81,128,136,136,136,194, 17,190,164, 44,178, 37, 18,128,125, 93,205, 18, 67,117,168,214, 2, 12, +201,191,249, 56,182,224,214,227,216, 2,112,148,114,148,106, 25, 6,241,133,122,253,146,168,167, 9,181,159, 69, 71,136,241, 78, +116,156,250,238,147,120, 13,229, 56,202, 81,170, 35, 4, 41, 6, 3,183,228,193,211,152, 35,255,132,242,166,135, 30,186,230,228, + 61,160,211,181, 91, 15,166, 22, 22,234,215,167, 71, 28,186,254,166, 14,182,224,224, 96,131,179,179,243,176,190,125,251,142,226, + 56,110, 83, 98, 98,162,161,182, 90,148, 82, 29,128,153,132,144,131, 97, 97, 97,123,175, 95,191,158,252, 38,204,213,223,186,255, +121,120,120,120,120,120,131, 85, 21, 65, 17,111,198, 92,149, 82, 81,100,235,191, 73,216,227,231,126,127,135,238,131,199,207,155, +253, 47,148, 55, 37,226,224, 93, 0, 31,255, 29,101, 77, 78, 78, 62, 3,224,204,155,210,163,148,222, 33,132,120, 0, 16,188, 17, +115,245, 55,238,127, 30, 30, 30, 30, 30,222, 96,241,240,252,207, 64,139, 7,116,177,124, 77,240,240,240,240,240,252, 83, 32, 0, + 2, 43,105,180, 76,158, 29, 64, 8, 9,172, 69,163,120,142,215,228, 53,121, 77, 94,243, 45,209, 76,171, 66,243, 65, 53,154,149, + 69,182, 29,254,135,234,179,101, 37,154,203,171,209,156, 89,197,219,247,248,227,243,237,212,252, 55,221,253,255,109, 15, 0,129, +188, 38,175,201,107,242,154,255, 2,205,102,124,125,190, 81,205,153,124,125,254,251, 52,223,182, 7,195, 91, 76, 30, 30, 30, 30, +158,191,173,155,132, 16, 41, 33, 68, 90,219,247,121,120,254, 87,169,241, 24,172,214,173, 91,215, 7,128,219,183,111, 71,255,141, + 39,228, 68,103,103,231,209, 62, 62, 62, 77,196, 98, 49,147,159,159,191,224,194,133, 11,243, 95,254,220, 59, 77, 69,119, 5, 12, + 92,203,125, 19, 32, 2,128, 97, 96,164, 72,184,124,191,200,159,223,197,255, 93,156,157,157, 79,203,100,178,186, 28,199,129,229, + 40,140,172,177,248,175,145,131,193, 72,161,215,105, 98,181,133,185, 61,106,165,221,114, 64, 29,214, 72,151, 1,220, 6, 2,102, + 28, 5,183,145, 80,102, 28,101,176,129,112, 24, 11,161, 97, 37, 88,209,215, 66,177,240,219,164,224,125,241,111, 67,125,238,223, +191, 95,240, 58,223, 31, 56,112, 96,133,203, 68,249,250,250, 30,147,201,100,245, 42,251, 94, 81, 81, 81,242,253,251,247,187,188, +205,199,170,147,147,211, 59, 12,195,252, 4,160,233, 75,111, 61, 4, 48, 57, 41, 41,233,252,235,254, 70,107,185, 92,104, 39, 16, +140, 17, 17, 50, 3, 0, 12,148,174,200, 48, 26, 55,223, 46, 42,250,199,140, 33,116,112,112,184, 44, 16, 8, 27, 20, 22, 21, 22, +230,231,229,121,153,155, 91, 60, 53,147,203, 21, 70,214,248, 56, 35, 35,237,157, 26, 94,203,199, 3, 88, 89,242,255,116, 74,233, +134,154,188,207,195,243, 86, 27, 44, 63, 63,191,134, 0, 58, 19, 66, 58, 83, 74,223,105,220,184,177, 99, 81, 81, 17,252,252,252, + 82, 9, 33,151, 41,165,151, 0, 92, 10, 14, 14,142,122, 19, 5, 18, 8, 4, 63,172, 93,187,118,218,151, 95,126, 89,182, 72,115, +104,104,104,197,159,101,224,122,241,232, 57,135, 59, 97, 81,104, 21, 56,176,196, 96, 49, 64, 97, 50,186,116,107, 93,171,223,183, +177,177, 49,119,112,112, 88, 64, 8, 25,196, 48, 76,181,141, 25,199,113, 70, 74,233,190,180,180,180,121, 89, 89, 89,249, 53,249, +173, 86,254, 62,134, 98, 71, 88, 17,212,120,231,110,104,149,179, 43, 27, 55,110,124, 87, 32, 16,184,150, 92,156, 94,190,176, 85, +248,191,209,104, 76, 8, 15, 15,247, 55,181, 46,100,114,249,116,194, 8, 3, 65,185,226, 36,168,132,121, 72, 57,246,156,166,168, +104,165, 41,219, 43,149, 74,235, 6,135,220,107, 16, 17,245, 20, 94, 30,117,160,211,179,208,233, 89, 28, 57,119, 27, 45, 26,123, +160,111,239,110,181, 62, 86,140,148, 44,152, 59,121, 88,151,197,107,119,182,250,118,242, 80,197,226,181, 59, 91,125, 59,101,168, +114,241,186,157,254,223, 78, 25,166, 92,180,110,135,255,156, 41,195, 44, 22,175,219,169, 7,240, 89,109,126,227,179,230,117, 11, + 25, 35, 91,225,221, 53, 39, 16,106,127, 13,139, 85,252, 55, 78,220, 81,163, 70, 53, 44, 44, 44,140, 24,213,167,245,247, 77,220, + 29, 43, 28,255,147,147,153,234,240,248,193,237,185, 66,153,194,251,131,233,191, 85,121,126,138,197, 98,207,203,151, 47, 55,224, + 56, 14, 70,163, 17, 44,203,150,253,213,233,116,248,240,195, 15,223,200,132, 24,127,127,255, 81,148,210,197,197,135, 37, 89,116, +247,238,221,245,175,113, 35,166, 20, 10,133, 95, 73, 36,146,206, 44,203, 54, 1, 0,145, 72, 20,169,213,106, 47,177, 44,187,154, + 82, 90, 80, 19, 61,134, 97,214,220,185,115,199, 91,169, 84, 66,175,215,151, 45, 12, 47, 16, 8, 26,183,105,211,230,103, 0, 13, + 94,119,251,237, 4,130, 49,237, 59,118, 92, 59,106,202, 20, 65,246,157, 59,248,105,235,214, 53,200,206, 6,128,159,171,251,174, +171,171,235, 93, 66,136,107, 77,126,143, 82,154,144,144,144,224, 95,179,107,176,176, 65,108,124,146, 67, 93, 55, 21, 0, 64, 46, +151, 43,238, 60,120,238,224,215,212,163,198,145, 43, 0, 43, 41,165,102, 37,245,187,182,125,251,246,237, 8, 33, 44, 0,202,113, + 28, 67, 8, 25,194,113,156,176,228,243, 43, 9, 33,191, 81, 74,181,124,211,204,243, 86, 27, 44, 63, 63,191, 19, 0, 58, 55,110, +220,216,172, 91,183,110,240,245,245, 69,221,186,117, 33,147,201, 0, 0, 89, 89, 89,142, 17, 17, 17, 31,221,187,119,239,163, 27, + 55,110,192,207,207, 79, 13,224,106,112,112,112,133,209,136,192,190,157,190,148, 41,165,235, 0, 32, 61, 33, 51, 57,225, 89,218, +186,228,228,228,149,148, 82,174,220, 9,233, 53,124,248,240,169,147, 38, 77,194,177, 99,199,176,107,215, 46,104,181, 90,228,231, +231,227,194,133, 11,149,220, 90,167, 33,251,194, 50, 64,241, 28,136,187, 4,200, 29, 0,133,227,235,220,189, 45, 24, 60,120,240, + 20,111,111,239,178,172,227, 6,131, 1, 44,203,194, 96, 48, 32, 59, 59, 27, 83,167, 78, 45,189,120,129,227, 56, 92,184,112,225, +203, 25, 51,102, 0,192, 87, 21,105,118,235, 92,239,174,144, 16, 87,238, 63,166, 44,225,236,229,167,254, 0, 17,220,185,123,159, + 84,108,190, 90, 8,170,191, 16, 10, 92, 67, 66, 66, 28,196, 98,177, 73,219,198,113, 28,124,125,125, 77,250,172,139,139, 75, 23, +133,210, 98,215,128, 33,159, 91,183,244,109, 41,114,113,118,134,129,101,241,236,121, 92,235,251,247,130, 91,158, 57,186,231, 11, + 23, 23,151, 33,137,137,137, 85, 46, 72,109, 52,114,184, 31,241, 24,231,174,222, 67, 95,145, 12,133, 26, 29, 10,213, 58,108,255, +235, 58, 18,210,114,107,189,159,218,180,105,227, 34, 23,216,183,254,114,212, 7,138, 21, 63,109, 83,124, 57,234, 3,172, 92,191, +189,228,239, 54,197,151,163,250, 97,229,250, 63,148, 95,142,234,135,181, 27,126,107,219,166, 77, 27,151, 91,183,110, 37, 86,166, + 87,217, 62, 98,140,172,116,107, 68,162, 0, 0,210, 55,109,130, 33, 45, 13,170,121,243, 0, 0, 95,120,187,152,220,173,209,172, + 89,179,187, 66,161,176,218,198,145,101,217,132, 7, 15, 30,248,155, 98,174, 88,150,165, 66,161,112,238,213, 29,223,239,239,208, +178,225, 11,149, 25, 21, 21,101,249,221,119,115, 7,238, 13,206,167, 31,249,153, 71, 28, 94, 57,170, 74,147,197,113, 28,163,213, +106,241,248,241,227, 10,179,236, 51, 12, 99,172,205,126, 10, 8, 8,144, 22, 22, 22,238, 84, 42,149, 62,133,133,133,163, 40,165, +223, 5, 5, 5, 57, 50, 12,131,192,192,192,239,252,253,253,159,203,100,178, 13,106,181,250,158, 82,169, 28, 18, 20, 20,100, 82, +227, 74, 8,121,199,194,194, 98,251,161, 67,135,172,125,125,125,153,140,140, 12,120,120,120, 32, 43, 43,171,245,229,203,151,253, + 62,251,236,179,207, 8, 33,159, 82, 74, 47,215,160,184,141,228,114, 57, 29, 62,124, 56, 49, 26,255,179,185,191,254,250, 43,252, +156, 83,235,141,237,169, 40,210,232,104,238,249,199,150, 99,197, 98,241,213,152,152,152, 26, 31,192, 34, 66,102,140,154, 50, 69, + 32, 78, 78,134, 34, 42, 10,125, 8, 17,110, 41,142,102,253,108,194, 54,187,174, 90,183,210, 65, 34,145,128,101,217, 50, 19, 88, +122,141, 50, 24, 12,208,235,245, 48, 24, 12, 48, 26,141, 48,232, 13,216,186,233,183, 90,159, 99,114,133, 92,238,228,236,156,106, + 38, 87,200,223, 68, 99, 35,149, 74,133,219,182,109, 27, 34,145, 72, 0, 0, 58,157, 14,205,154, 53, 35,124, 51,204,243,111,140, + 96,245, 10, 10, 10, 2,203,178, 48, 55, 55,135, 64, 32,120, 57,186,129,119,222,121, 7,109,218,180, 65, 96, 96, 32, 30, 61,122, +100,182,124,249,242, 74,195, 17, 67,167,245,129, 91,131, 98,227, 99, 48,112,206,215,142,223, 91,246,235,247,251,237, 1, 76, 43, + 31, 48, 24, 51,102, 12,201,204,204,196,160, 65,131, 46,107,181,218,247, 41,165,149, 46,151, 99,228,144,208,229,227, 97,224, 40, + 49, 91,125,107, 43,209,105,212,148, 97, 24,117,105, 23, 97, 45,239,138, 7,169, 84, 42,236,222,189, 27, 58,157,238,149,247, 45, + 44, 44, 16, 30, 30, 94,222,228,160,101,203,150, 2, 66,200,160,202, 12, 22, 67,136,235,201,160,232,178, 25, 65,131,223,111, 41, +238,222,185, 94,170,144,145, 80, 0,228,219,111,191, 45, 51,108, 0,176, 96,193, 2,147,203, 43, 22,139,241,232,209, 35, 8, 4, + 2, 60,233, 80,124,131,221, 44, 36, 30, 2,129, 0,247,125,138,239, 64,219, 71,231, 64, 32, 16, 64,169, 84,154,106,174, 2, 28, +157, 93, 15,127, 51,111,169,185,198, 64,113,252,194,109,196, 37,157, 5,165, 20,206, 14, 54,104,239,231, 43,106,218,188,133,195, +175, 63,175, 56,236,226,226,210, 47, 49, 49, 49,168, 50, 45, 3,107, 68,147, 6,158,216,118,232, 50, 22,109, 56,128,204, 60, 53, +242,139,138,235,181,107, 91,111,252, 82,251, 72,231,202, 70,238,238,110,191,239, 61,133,118,109, 91,225,143,189,167,209,174, 77, + 43, 20, 63,111,131, 63,246,158, 66,251,118,197,127,155, 54,169, 87, 39, 43, 38,119, 37,170,200,237,245,202, 62,234, 87,188,143, + 60, 4,226,178, 6, 32,102,220, 56, 0, 40, 51, 88, 53, 58,209,132, 66,215,123,247,238, 57, 84,247,185,150, 45, 91,154, 20,185, + 98, 89, 22,105,105,105, 36, 39, 39,135, 90, 89, 89, 13, 44,111,178, 74,205,213,158,187,121, 80,223, 92, 79,118,252,117,137, 27, +246,126,231,136,195, 43, 71,121, 15, 28, 56, 48,178, 34, 93,189, 94,255,188,123,247,238,180,164,225,115,145, 72, 36,226,151, 12, +152,170, 67,135, 14,175, 24,180,234,186, 14, 11, 11, 11,119,110,217,178,165,127,189,122,245, 48, 96,192,128, 51,222,222,222, 18, +185, 92,142, 83,167, 78,193,205,205,205,206,220,220,252,196,210,165, 75,177,106,213,170, 58,103,206,156,217, 5,160,191, 9,231, +104, 96,151, 46, 93,118, 31, 59,118, 76, 38, 22,139,161, 86,171, 17, 30, 30, 14, 75, 75, 75, 72, 36, 18,244,235,215, 79,208,161, + 67, 7,219,128,128,128, 3,132,144, 33, 53,153,209,164,209,104,232,236,217,179, 33,151,203, 33,151,203,161, 80, 40,160, 80, 40, + 96, 38,230,200,166,201, 30,102,147,182,228,152,125, 53,111,211,178,237, 27,230, 95,172, 83,167,206,119,113,113,113, 57, 53, 61, + 22,178,239,220,129, 34, 42, 10,154,187,119,107,124, 28, 89, 42,108, 48,107,214,172,234,142, 53,136,197, 98,180,111,223,190, 90, +189, 38, 77,154,108, 18, 8, 4,246, 47,154,105, 34,152,251,237, 55,236,131,240, 40,133,222, 72, 21, 26, 45,139, 69, 11,231,178, + 2,134, 17, 52,107,214,236, 16,165, 52, 61, 60, 60,124,172, 9,209, 51, 45, 33,100, 58,195, 48,107,165, 82,169,208,221,221, 61, +118,238,220,185, 55,138,187, 26, 0, 74, 41,227,238,238,222,218,204,204,172,174, 86,171,101, 1, 76,231,163, 87, 60,255, 22,131, + 5,165, 82,137, 59,119,238,128, 16, 2,115,115,115, 88, 88, 88,192,210,210, 18,121,121,121,136,136,136,192,195,135, 15, 17, 19, + 19, 3, 66, 8,188,188,188, 80,122,226,148, 59,193,202, 46,108, 59,127, 60, 6,153, 82, 10, 66, 0,223,119,125,224,243, 78, 51, +180,186,253,116,178, 74,165,218,146,148,148,244,152, 16, 34,108,214,172,217,103,109,219,182,197,170, 85,171,160,213,106, 87, 85, +100,174,202,107, 94, 14, 55,248, 3,128, 74,165,250,250,207, 83, 79,228,159,244,172, 87,148,148,148,244, 67, 77, 43,225,229, 11, +112, 70, 70, 6, 56,142, 51, 57, 42,148,147,147, 83,165,230,203, 17,129, 69,203, 86, 91,229,231,166,226,251,229,127,194, 96, 48, + 96,218,180,105,224, 56,174,236, 81,145, 94, 69,229, 44,237,250, 19, 8, 4, 47, 24,224,234,158, 87,165,105,111,111,175,144,202, +228,187,190,254,246,123,243,208,168, 4, 28,187,112, 27,148, 82, 28,217,242, 29, 0,160,223,232,133, 72, 76,201, 64, 7,191,198, + 24, 49,118,170,249,234, 37,179,119,217,219,219,215, 75, 79,255, 79,242,217,242,154, 6,150,195,129, 83, 55,144,148, 89,128,225, + 3,186, 66,163,213, 35, 61, 45, 5,191,253,188, 2,227, 71, 28,128,181,210,204,201,203,203, 43,170,124, 29, 81, 74,137, 88, 44, +190, 26, 21, 21,245,121,101,229, 52, 24, 12,189,190,153,250, 5,214,110, 61,128,102,245,157,112,244,236,117,248, 55,173,139,147, + 23,110,163,109,115, 15,156,190, 20,140,182, 62,158,184,116, 51, 28, 83,198,126,138,233,147,175,246,170,201, 62, 90,188,116,181, + 85,126, 94, 42,142, 45,222,134,180,159,127, 70,236,196,137,104, 93,242,153,219,132, 64,236,234, 10,152, 87, 95,159, 47, 19, 25, + 25, 9,173, 86, 91,209,221, 61,154, 52,105, 82,237, 62, 42,141, 92,165,166,166,146,212,212, 84, 40, 20, 10, 18, 25,254,192,216, +164,105,179,129,244,225,254,173, 0, 80, 28,185,202, 67,209,245,117, 80,223,248, 9, 98,143, 80,102,235,194,177,186, 47,190,219, + 20, 81,174,113,123,161,156,247,239,223, 47,171,159,182,109,219, 62,188,122,245,106,163,210,227,171,164,171, 80,204,178,108,131, +210,110, 67,150,101,161,213,106, 49,100,200, 16, 65, 85,219,110,102,102,230,227,229,229,133,224,224, 96,140, 29, 59, 86,210,165, + 75, 23, 68, 71, 71,131, 16,130,145, 35, 71,194,219,219, 27,233,233,233,104,213,170, 21,174, 92,185,210,210,132, 99,222, 92,161, + 80,252,118,244,232, 81, 25,195, 48,200,207,207, 7,199,113,232,208,161, 3, 24,134,193,131, 7, 15,240,237,183,223,226,224,193, +131, 56,124,248,176,153,159,159,223,111,132,144, 38,148,210,124, 19,246, 17,213,104, 52, 84, 42,149, 66, 42,149, 66, 38,147, 65, + 38,147, 65, 34,145, 64,173,103, 48,122,117,172, 86, 32,179,227,154,182,236, 88,111,228,164, 37,204, 15,115, 71, 93, 0,112,164, + 68,243,129, 41,215, 11, 3,165, 43,214,255,242,203,186,247, 80, 60,193,104, 95,126, 62,103,160,116,133, 41,231, 38, 0, 20,104, +114, 81,215,203, 21, 7,246, 28,198,135,131, 63,168,208, 92,137, 68, 98,136, 69, 34, 88,216, 40,170,213, 20,137, 68,118, 33, 33, + 33, 86,229,175, 15, 44,203, 70,126,249,229,151, 94, 31,244,123,207,113,239,193, 99,130, 79, 6,247, 51, 58, 57,218,103,196,199, +199, 70, 3,176,242,243,243,163,166, 30,243,148,210, 13, 45, 91,182,244, 61,116,232,208,168, 89,179,102,221,253,250,235,175,191, + 47,255,254,202,149, 43, 23,158, 56,113,162,110,255,254,253,183,223,187,119,111, 67,185,239, 45,127,211,141,221,223,145, 58,128, +215,228,169,181,193, 42,223,248,228,229,229, 33, 47, 47, 15,241,241,241,216,180,105, 83,201,137, 44,130, 80, 40,132, 80, 40, 44, + 27,175, 80, 25,231,142, 94,249, 9,192, 79,126,126,126,162,176, 27,251, 78,206,216, 50,169,171,127,160,175, 32,248,124,216, 64, + 0,139, 0,244, 26, 62,124,184, 29, 0,108,219,182, 45, 3,192,201,255, 70,133, 80, 74,247, 61,126,252,120,138,179,179,115,217, + 24,148,242,221,132, 44,203, 66, 38,147,161,116,172,138, 86,171,197,206,157, 59, 89, 74,233,190,170,234, 47, 42,252, 2, 30,135, + 95, 44,254, 30,199,129, 51, 22,127, 95,163,209, 96,254,252,249,229,167,190, 98,220,184,113, 64, 13,214, 66,174, 44,114,213,238, +113, 54,132, 66, 33,174,120, 22, 59,129,222,233,244,149,177, 90,175,116, 97, 72,100,211,122, 15, 24,102,195, 82, 65,153,185, 42, +222,134, 98,195, 41, 17, 11, 97, 38, 21, 35,234,105, 28,220, 93,252,208,181,247, 7,214,231,142, 29,152, 6,160,194,176,155,222, +200,161, 87,128, 31,126,222, 19,132,188, 2, 53,114,179,179,144, 30, 23,137,200,208, 59, 16, 10,133,184,123,247,174,185,133,133, +165,185,167,167, 7,140, 28,135,107, 55,238,130,130,224,232, 95,135,188,234,122,120,226,255,216,187,234,240, 40,174,246,123,238, +204,250,110,220,179, 9, 16, 72,136, 2, 81, 8,238,197, 41,238, 20,183,162,133, 34, 69,138,182,184,148,226, 80,164,180,184,187, + 20,119,146,160, 33, 36, 36, 1, 34, 27,247,108,214,119,230,247, 71,164,129, 70, 54, 41,223, 87,190, 95,247, 60,207, 60,187, 59, + 51,123,230,206,189,119,238,156,251,222,247,190,247,253,219,216,209,229, 8, 91, 78,179, 32, 31,228,103, 36,128,166,105, 52,245, +119, 3, 77,211,104, 17,228, 1,154,166,209,188,161, 39, 56, 28, 14, 90, 55,246, 65,221,186,117, 81,236,231, 81,113, 25,253,129, +168,151, 55, 74,137, 93, 22, 44, 0, 77, 82,210, 95, 95,148, 73, 73, 96, 77,237,170, 90,183, 48,123,246,236,236,164,164, 36,205, +199,130, 78, 42,149,242,142, 31, 63,110, 81,217, 34,216, 18,137,196,135,195,225,132,103,102,102, 50, 98,177,152, 98, 24, 61,227, + 93,175, 62,125,231,183,165, 71,139,207, 89,178,100,233,209,254,129,102,125,247, 31, 57,203,242, 92,154, 19,194, 21,232,198,124, +191,141,207, 17, 74,124, 12,236, 52, 80, 42,149, 10,175, 95,191,174,116, 81,110,150,101, 43,172, 80,114,185,124,120,159, 62,125, + 46, 79,152, 48, 65, 72, 8,193,237,219,183, 75, 4, 63, 77,211,136,137,137, 1, 69, 81,216,177, 99, 7, 84, 42,213, 4, 3, 44, +129,211,142, 29, 59,102,206,231,243,145,151,151, 87,242,220,208, 52,141,136,136, 8,172, 89,179, 6,195,134, 13, 67, 92, 92, 28, +164, 82, 41,102,204,152, 97,178, 98,197,138,105, 0,150, 24,112,235,207,212,106,117,144, 88, 44,134, 80, 40, 68,177,208, 2,128, +208, 36,251, 23,177,177,177, 13,108,108,108, 28,108,111,158, 61,221,180,205,151,126,214,182,142, 77,138, 5,150,161,136,211,106, +119,200,228,242,249,253,118,239,182,187,117,250, 52,243,226,244,233, 4,142, 94,191,221,224, 58,164,165,240, 62, 38, 1,129,129, +129, 8, 13, 13, 69, 96, 96,224, 7,214,108, 62,159, 15, 30,143, 7, 30,143, 7, 27, 75,131, 92, 37, 88,154,166,145,156,156,252, +193,190,177, 99,199,190, 31, 50,100,136, 29, 0, 36,201, 18,216,111,166, 77, 78, 76, 79, 79,103,237,237, 43,230,244,243,243,187, + 69, 81,148,203, 71,162,216,114,220,184,113,200,206,206,238, 50, 97,194,132,230,133, 86, 50, 42,113,243,230,205, 67, 1,128,207, +231, 87,123, 8,218, 8, 35,254,231, 5,150, 33,168, 76, 96, 21, 35, 52, 52, 84,235,228,228,180, 51,234,201,187,118,110,190,174, + 16, 73, 4, 29, 8, 33, 63, 11, 4,130,233, 95,125,245, 21, 30, 60,120,128, 23, 47, 94,252,242,119,151, 61,105,208,160,193, 37, +129, 64, 80,171,172, 99, 42,149,234,253,243,231,207,203,244, 21, 75, 77, 77, 93,248,232,209, 35, 84,228,228,222,191,127,255,210, + 47,163, 18, 39,247,114, 91, 48,134,133, 86,163,133,188, 64,241,231,203,187, 72, 96,201,229,114, 12, 24, 48,224, 3, 11, 86,106, +106,106,181,238,185, 42,150,171,242, 64,209,116, 71, 95,191, 0,238,181,123,207, 62,120,185,246, 28,183, 12, 2, 30, 7, 98, 1, + 15, 66, 1, 23, 34, 1, 15,241,137, 41,240,242,170,207,187,121,233,108,199,242, 4,150, 86,199, 96,213, 47,231, 0, 0, 71,206, + 92, 67, 80,109, 49, 22,207,159,141,126,253,250,129,207, 23,226,216,177, 35, 88,179,121, 31,198,215, 42, 44,170, 70, 13,253,177, +122,235, 65, 44, 93,178,152, 58,114,248, 72,115, 3, 94,184,224,112, 56,160,105,250, 47,159,197,223, 13,177, 70,178, 12, 11,205, +199,101,196,176, 0,203,194,249,135, 31,224,252,195, 15,120, 84, 36, 78,125,228,114, 40, 20, 10,160,181,111,149,196,149, 90,173, +134, 76, 38,211, 60,125,250,212,190,140, 23, 83,138, 90,173,174, 84,208,236,222,189, 59,114,228,200,145, 62, 86, 86, 86,225,207, +158, 62,213,250,250,249,113, 63,246,193,242,240,240,200, 89,178,100,233,209,161,253,186,245,221,246,221, 64,221,248, 37,191,114, + 12,113,116, 47, 17,197, 26,205,219,246,237,219, 27, 36,241, 21, 10, 69,114,121,199,130,130,130, 70, 18, 66,126,240,240,240, 16, +180,105,211, 6,183,110,221,194, 15, 63,252,192,232,116,186,116, 0,104,218,180,169,237,210,165, 75, 73,120,120, 56, 44, 44, 44, +144,154,154,186, 55, 40, 40,104,105, 69,142,239,124, 62,191,117,195,134, 13, 41,149, 74,245, 23,113,181, 98,197, 10, 12, 26, 52, + 8, 30, 30, 30, 96, 24, 6,249,249,249,104,211,166, 13,119,227,198,141,173, 13, 17, 88, 20, 69, 77,109,215,174,221, 26, 20,206, + 34, 44, 45, 28, 95, 1,152, 89,100,221, 78,238,214,103,216,203, 22,237,123, 7,185,212,173,239, 88, 25,167,189,189,253,119, 20, + 69,245, 7, 64, 3,136,167,172,172,234,218,218,218,218,183,236,214, 13,249,132,208,219, 47, 94, 36, 28,145,200, 4,128, 65, 67, +141, 74,173, 28,181, 92, 11, 93,249,250, 12,232,137,208,208, 80,244, 29,216, 11, 60, 30, 15, 28, 14, 23, 60, 46, 23, 92, 94,161, + 5,203,194,198,172, 90,237, 72, 81,231,145,152,155,155, 3, 44, 96,102,110, 94,108,201, 36, 0, 88,138,162,216, 10,234,185,251, +254, 73, 99,237,120,102,230, 96,116, 90,212,252,178,111, 73,157,142,218,189, 69, 4,134, 17,229,199,189,197,212,235,143,184, 48, +194, 8,163,192, 50, 12,165,157, 66,203, 66,219,182,109, 39,155,154,154,110, 44,106,120, 17,255, 32, 17,241, 15, 18,225,237, 89, +175, 89,128, 95, 80,206,160, 65,131, 96,109,109,141,111,191,253,150, 5,240, 75, 85,175, 31, 19,249,210, 4, 0, 43,149, 74,191, + 45,178, 8,248, 61,122,244,200,246,241,227,199,104,216,176, 97,233,151, 7,154, 55, 47,255,189, 93, 52, 51,238, 27,148,227, 79, + 85, 77,171, 24, 52, 26, 13, 10, 10, 20, 80,171, 53,208,105, 25,232,116, 58, 4,214, 51,197,175, 59,230, 20,238,211, 21, 91,203, + 10,173,100, 2,158, 10,173, 26,215,208,130, 80,138,155,247,223, 87,216, 82,150,101,185,162,105, 26,119, 92, 11,255,214, 33, 73, +107,176,208, 98, 25,189,167,131,189, 61,226, 46, 62, 4, 0,152,136,133,184,180,111, 41, 36,226,194,201, 13, 93,134,205,133, 72, +192,131, 72,192,133, 70,163,129,189, 93,109,232,244, 90,207,114,133,183, 86,173,174,101,111, 14,199, 46,141,241,244,241,125,124, + 51,121, 12, 70,142, 28, 5,158,208, 20, 55,111, 94, 71,156, 44, 21,111, 18,178, 48,121,225, 22,104,117, 12, 52, 58, 61, 52, 90, + 61, 54,236, 61, 7,141,158,173,244, 37,207,227,241, 48, 99,198, 12, 81,121,199, 15, 30, 60,168, 48,188,140,180,144,203, 21, 80, +169, 84,208,168,117,208,104,117,208,215,225, 97,233,252,193,208,105,116, 40, 24,216, 4, 26,173, 14,204,180, 94,208,168,181,136, + 23,115,168,230, 13,165, 90,128, 82,220,121,156, 96, 86, 25,127,177, 40,168, 72,128, 25,130, 98,145,229,235,231, 23, 62,188,107, +163, 21,119,239, 63, 78,187,123,255,241, 95,206,115,173,215, 40,118,252,242,131,115,170, 34,174,128, 15,135, 11,255,102,189,255, +254,198,141, 27,246, 38, 38, 38,136,140,140, 4, 77,211, 32,132,100,132,134,134,218, 3,192,162, 69,139,210,185, 92,174, 53, 77, +211,152, 54,109, 26, 56, 28,142,237,215, 95,127,189, 0,192,166, 10, 58,114,222,166,166,166, 31, 88,175,120, 60, 30,230,204,153, +131,161, 67,135,150,136, 43, 30,143,135,189,123,247, 34, 40, 40, 8,106,181,218,219,144,244, 38, 36, 36, 60, 6,208,194, 0, 1, + 66,138, 68,121,165,245,147,162,168,225, 79, 39, 76,168,171,124,244, 8, 95, 51,140,143,167,167, 39,148, 74,101,201,113, 55, 55, +183,154, 9, 9, 9,201, 82,169,244, 55, 0, 91,100, 50,217,147,138,248,180, 74, 6,239, 99, 18,138, 59,171,104,212,168, 81,137, +197,170,180,245,138,199,227, 65,196, 55,169,114,153, 49, 12,131,220,220, 92,122,239,222,189,117,124,124,234, 17, 0,240,246,174, + 71,206,157, 59, 95,211,196,196, 36,214,202,202, 74, 83,233, 51,105,102,142,171,163, 6, 0, 0,250,181,237, 84,108,197, 66,200, +210,185,224,112,185,240,155, 62, 23,192,163,146,243,213,106, 53, 24,134,161, 97,132, 17, 70,129, 85,206,131,175,213, 86,120,124, +221,186,117,104,208,160, 65,133, 47,160,141, 27, 55, 98,255,254,253,235, 88,150,141,169,234,245,187,181, 11,168,135,245, 39, 94, +186,122, 20, 54, 10, 75,166,117,167,228,114, 57,238,222,189, 11,115,115,115,188,121, 99, 88,216,174,255, 68,152, 6,150, 5, 52, + 90, 29,228, 5, 74,168,213,106, 76,155,101,208,204,116,162, 81,231,113,186,118,106, 89,174,120, 40, 30,238,163, 40,170, 82, 31, +172,202,134, 6, 63,176, 96,104,181, 40,126,117,228, 23, 40,209,118,240,119,120,116,106, 3, 0, 20,138, 43, 33, 23, 34, 62, 15, + 34, 62, 7, 20, 1, 8,202,231,214, 42,114,191, 92,191,116,214,237,173,191,252,234,220,179,229, 24, 76,158, 52, 25, 28,190, 24, +150,214,182,208, 49, 44,106, 74,237, 16,157,152,133, 99, 63,207, 42, 26, 21,101,209,114,200, 34,172,155, 63, 6,171, 23, 86,110, +196,228,112, 56,216,180,105,147,226, 99,171, 85,233, 79,182,242,247,224,159, 2,171, 64, 1,133, 82,133,111,191,219, 98,120, 25, +117,108, 33, 50,228,228,138, 4, 84,101, 2,172, 44,145,101,200,243,235,215, 19,243,255,201, 6,134, 97, 24,156, 59,119,174,164, + 60,202, 43, 67, 67,173,173, 12,195,224,253,251,247,120,249,242, 37, 26, 55,110,140,156,156, 28,112, 41, 10, 51,158, 63,135,207, + 87, 95, 65,205,227,129, 97, 24,240,249,124,140, 27, 55,206,224,252,172,162,114, 44,242, 99,211, 87, 72,238,232,232,184,214,203, +203,171,110, 76, 86, 22, 66,159, 62, 69,163,177, 99, 1, 0,119,238,220, 41,109, 1,196,224,193,131,249,177,177,177,163, 34, 34, + 34, 70, 57, 58, 58,174, 75, 74, 74,154, 81,238,243,196,170, 74,124,176,250, 15,238,131,186, 94,117,176,127,207,129,146,227,211, +103, 78, 5,151,203, 3,151,199,133,133,185, 69,149,111, 45, 55, 55,151,179,118,237, 58,223,224,224,198,162, 33, 95,141,160, 52, + 58, 22, 75, 87,110,160, 15, 31,248,213,122,223,175,251, 69, 66,161,240, 85,165,101,164,213,252,165,157, 34,132,128,195,229,130, +195,231, 1, 12, 3,150,101, 37,171, 87,175, 94,242,242,229,203,134, 94, 94, 94, 80,169, 84, 95, 17, 66,194,140,113,176,140,248, + 87, 9, 44,154,166, 43,181, 78, 81, 20, 85,233, 16,225,244,233,211, 97,106,106, 90,222,139,135,125,254,252,121,120, 82, 82,210, + 14,150,101,171, 21, 23,231,236, 31, 97, 47, 23,127,211, 43, 15,128, 2, 0, 44, 44, 44,210,219,182,109,155, 15, 64,115,248,240, +225, 15,206, 85,169, 84,239,203,227,177,179,179, 91,188,106,213,170, 41,157, 59,119,166, 40,138,250, 75,227,254,241,166,213,106, +113,230,204,153, 41,203,151, 47, 71,121, 86,175,226,151,119,129, 92, 1, 69,145,131,115,244,139,163,134, 54,230,149,158,242,204, +207,169, 76,203,213, 23, 50, 13,104,154,198, 5,187,194,251,232,146, 86, 57, 23,161,232,200,183,239,227, 27, 57,216, 88, 32, 43, + 39, 31, 2, 62, 23, 34,193,159,214,124,145,176,208,122, 37, 18,112, 97,105, 97,138,140,140, 20,112,185,220,200, 10,132,195,123, + 66, 72,139, 1,189,186, 92,166,104,142,176,244, 49,174,200, 76,124,229,238,115,203,148, 76, 57, 74, 27, 3, 24,134,197,148,165, +123, 12,171,192, 28, 14, 38, 78,156, 88,174,192, 57,125,250,116,149, 45, 88, 10,101, 21,203,200, 64,254,138,134, 0, 43, 59, 94, + 25,138,103, 23, 74, 36, 18,159, 34,241,101, 48,252,252,252, 46,136,197, 98,131,131, 28, 25, 26,116,148, 16,178,164,109,219,182, + 63, 56, 59, 59,219, 77,152, 48,129,208, 52,141,160,160, 32,155,239,191,255, 62,167,208, 50,226,109, 90,220,198,172, 95,191, 30, +175, 94,189, 74, 35,132, 44,173,136,147,207,231, 71,152,155,155, 7,181,105,211, 6, 57, 57, 57,136,143,143,135, 68, 34,129,207, +218,181,120,254,245,215,240,219,182, 13, 84,219,182, 32,132,128,207,231,227,249,243,231, 16,137, 68, 17,229,241, 57, 57, 57, 5, +179,133, 78,230,205,240,231,176, 32, 11,224, 46, 33,100, 86, 98, 98,226,195, 50,218, 59, 10, 0,244, 12,195, 86,114,255,131,191, +251,238, 59, 80, 34, 17, 28,155, 52,129, 34, 38, 6, 26,141, 6,141, 27, 55, 46,177,170, 55,110,220, 24, 52, 77,163,110,221,186, +176,178,178,194,241,227,199, 7,227,195,153,213, 31, 64,153,175,193,251,152, 4, 52,105,210,164,196, 82,213,181,107,215, 18, 11, + 22,151,203, 45,177,100, 17,125,229,130,149, 16,194,126,212, 22, 19, 62,159, 39, 24, 54, 98, 20, 53,235,219,111, 24,173, 78,203, +208, 52,151,250,118,254,114,234,205,235, 23, 2,185, 92, 78,145, 74,122,107, 53,123,244, 67,191,118,133, 70,208, 99,117,109, 65, + 23, 9,171, 30, 47, 18, 74,202,197,236,236, 31,252, 21, 43, 86,244,245,242,242, 42, 28,110, 7, 56,198, 56, 88, 70,252,155, 4, + 86,212,211,167, 79,221,235,213,171,135,184,184,184,191,204,108, 43,126,198, 36, 18, 9, 68, 34, 81,177,133, 40,170, 60,178,107, +215,174,253, 12,224,231,226,223, 82,169,180, 73,155,254,173,239, 53,234,212, 16,191, 47, 63,144,147,148,148,228, 91, 28, 19,139, + 16, 66,164, 82,233, 80, 46,159, 51,192,181,126,205, 86, 96,152, 85, 87, 79,223, 89, 84,209,141,184,122,212,203, 7,160, 40, 53, +139,112, 77,117, 50,132, 16,210,175,115,231,206, 84,120,120, 56, 6, 12, 24,128,253,251,247,151,123,238,208,161, 67,113,240,224, + 65,116,236,216,145, 90,177, 98, 69,191,202, 4, 86,161,117, 68,253, 31, 43,204,178, 44, 87, 31,139,196, 74,133, 0,163,187,250, +252, 73,168,191,111, 80, 83,238,187,132, 20, 8,249, 28, 8, 5,127,206,216, 23, 21,249, 95,137, 4, 92, 56,216, 90,226,209,189, + 27, 26,157, 78,123,181, 18,113,241, 30,101, 4,105, 20,152,218, 68,126,209,172,129,101, 89,255, 89,251,221, 87,104,112,104,109, +165,233,229,114,185,216,189,123,183,162, 60,235,149,161,121, 80,104,101,212,162,160, 64,129, 2,133,242,147,149,137,189,189,189, +173,157,157,221, 86, 11, 11, 11, 97, 89, 2,234,227,227,127, 71, 92, 21,197,197, 10, 31, 57,114,100,149, 68, 22,159,207,175,125, +247,238,221,146, 32,163, 21,125,170,213,106,244,239,223,223, 32,203,119, 72, 72,200,238,128,128,128,104, 91, 91,219, 43, 62, 62, + 62,130,232,232,104, 44, 91,182,140,112,185, 92,179,226,246, 35, 47, 47, 15, 52, 77, 35, 43, 43, 11,132,144,225, 33, 33, 33, 23, + 43,226, 84,169, 84, 55,111,222,188,233,223,189,123,119, 58, 34, 34, 2, 52, 77, 23,166,171, 73, 19,248,109,219,134, 23,223,124, +131, 86,239,222, 65,169,209, 64, 40, 20,226,210,165, 75,154,130,130,130,155, 21,220,251,142,251,247,239,215, 19, 10,133,208,104, + 52, 96, 24, 6, 20, 69, 17, 14,135,211,220,199,199,103, 35,128,134, 31,117,192,236,198, 77, 95,233,169,215,233,244, 73,113,209, +105, 6, 88,132,176,127,255,126, 52,110,220, 24,173, 90,181, 66, 98, 98, 34, 98, 98, 98,208,165, 75,151,146,115,158, 62,125,138, +176,176, 48,184,185,185, 85,110,193,163,180,112,243,172, 13, 30,143, 7, 46,151, 11, 30,183,240,179,112, 43,180, 92,241,184, 60, +112, 57, 92, 8, 69, 66, 3,181,255,135,117,210,188,200,242, 37, 22,139,152,186,117,235,134,191,137,142,241, 1, 11,202,204,204, +220, 32, 95,219, 98, 62, 66, 72,137,184,226,242,121, 37,150, 44, 0,200,201,201, 81,246,236,217,243, 55,149, 74, 53, 2,159,112, + 36,197, 8, 35,254, 87, 4, 86,151,209,163, 71,111,235,208,161, 67,187, 25, 51,102,192,196,196, 4, 73, 73, 73, 37, 15, 24,159, +207, 71,141, 26, 53, 80, 80, 80,128, 91,183,110, 33, 59, 59,251, 26,128,113,134, 94, 56, 41, 41,233,193,155, 39, 81, 25,109,250, + 54,181,174,215,212,211, 34, 62, 42,161, 49,128,123, 69,226,234,151, 65,211,187,140,104,211,187, 17,120,124, 46,226,223, 36,255, +215, 50,132,162, 40,154, 16,130, 1, 3, 6, 24,116,254,192,129, 3,113,243,230, 77, 84, 52,156, 88, 98,193, 42, 80, 66,174,248, +116,157, 51, 66, 8,244,122, 61, 26, 71,102,126, 48, 51,171,216,114, 85, 44, 44, 12,177, 92,149,244,144, 11, 10, 86,223,190,122, +106,172, 87,125, 63,219,198,254,238,120, 19,155,128, 85,115,199,148, 28,255,118,252, 32,236, 61,116, 26, 78, 14, 54, 80, 22,228, +225,226,249, 51, 57,185,185,185,171,171,123, 15,251, 78, 22,198,129,108, 49,248,195, 57, 2, 3,190,249,201,160,255,115,185, 92, +140, 24, 49,162, 92, 11,214,149, 43, 87, 20,134, 12,143,178, 44, 11,141, 90,139,124,185, 2,138,130, 79, 35,176,164, 82,169, 95, +227,198,141,175,108,223,190,221,218,198,198, 6, 50,153,236, 3,129, 37,149, 74,253,130,131,131,175,108,223,190,221,218,214,214, + 22,241,241,241, 6,135, 7, 41, 67, 92, 33, 45, 45,141,100,101,101, 49,150,150,150, 85, 18, 89, 20, 69, 65,165, 82,225,213,171, + 87,134, 62, 35, 6,207,248, 50, 49, 49,217,179,124,249,114, 65,106,106, 42,104,154,198,171, 87,175, 62,168,171,197,219,119,223, +125,135,185,115,231,110, 5, 80,171, 34, 62,157, 78,183,110,232,208,161,163, 18, 19, 19, 45,237,236,236,144,148,148, 4, 62,159, + 15,150,101, 65,218,180, 65,139,216, 88,104,244,122,136, 68, 34, 68, 70, 70, 98,199,142, 29,114,149, 74,181,174, 44, 46, 55, 55, + 55, 62, 69, 81,238, 60, 30, 15, 67,134, 12,249,176, 94,238,219,135, 38,181,178,130,198,126, 33,200,215, 65,168, 74, 17,117,190, + 64,211, 52, 25,247,237, 42,143,224,150, 93,235,191,126,241, 48, 58, 45, 37,225,110, 37,183,175, 85,171,213,240,242,242,194,227, +199,143,113,245,234, 85,180,109,219, 22, 45, 91,182,196,141, 27, 55, 16, 18, 18,130,176,176, 48, 16, 66, 96,109,109, 93,236,102, + 81,161,175,133,186, 64,135, 84, 89,198, 95,172, 85, 31,255,230,241,120, 80, 41, 52, 6,149, 81,105,209, 68, 8,129,149,149,149, +106,195,250,213, 2, 19, 19, 19, 61, 0,152, 72,196,250,195,251, 54,195,198,218, 74,197, 26,104, 98, 45, 25, 22, 44, 18, 87, 52, +151,251,129,155, 2,203,178,121,207,158, 61, 27, 75, 8,121, 70, 8, 41,110, 63,140,113,176,140,248,119, 8,172,208,208,208, 88, + 0,237, 3, 2, 2, 6,223,186,117,107,221,244,233,211,109,155, 55,111,142,204,204, 76,212,170, 85, 11, 82,169, 20,143, 31, 63, +198,211,167, 79,211, 89,150,157, 17, 18, 18,178,191,140,135,172,125,121,177, 50, 88,150,101,165, 82,233, 17, 85,126,254,215,129, +173,188,113,237,240,237,229,142,142,142,227,156,156,156,166, 13,159,219, 99, 68,235,158, 13, 17, 25,246, 22, 15, 46, 63, 71, 74, + 92, 58,134,183,152, 85, 33,231,199, 78,238, 22, 22, 22,163,196, 98, 49, 31,128,166,140, 94,240, 7,179, 8, 75,115, 50, 12,163, + 87,171,213, 56,116,232,144, 65, 34,235,192,129, 3, 80, 42,149, 96, 24, 70, 95,222,189,235, 25,134,112,184, 2, 72,107,120, 65, +163,145,131, 97, 12,159, 32,201, 86,146,159, 58,157, 14,139, 23, 47,198,204,153, 51,177,116,105,249,163, 43, 28, 14, 7,155, 55, +111, 70,101,101,148,153,153,153, 39,149, 74,135, 30,220,245,211,209, 33, 99,166,152, 58, 55,245,197,158,195, 23,160,213,104, 32, + 16,112, 97,105, 38, 65,221,218,206, 80, 43,229,216,182,105,125,174, 82,161, 24,250,177,239, 89, 69,229,254, 49,134,245,108,137, + 21, 59, 78,225,246,239,127, 78, 66,108, 49,120, 33,126, 91, 61, 9, 1, 1,187, 43,228,212,235,245,224,112, 56, 56,120,240,160, +162,172,217,131, 52, 77,131,203,229,150,107,193,250,176,140,244,132,203, 19,162, 70, 45, 31,168, 85,249,159,164,140,172,173,173, +103,238,218,181,203, 90,169, 84,226,245,235,215,120,245,234, 21, 8, 33, 37, 42,166,248,120, 65, 65, 1, 94,188,120, 81, 44,112, + 94, 85,229, 57, 42,182, 92,165,165,165,145,164,164, 36,136,197, 98,234,217,179,103, 74, 95, 95,223,240,138,158,239,210,156, 42, +149,234, 93,187,118,237,202,179, 24, 57, 9, 4,130, 15,102,124, 21, 7, 29,253,120,168,176,172,116, 22, 20, 20, 60, 95,183,110, + 93,157,134, 13, 27, 98,251,246,237,106, 83, 83, 83,254,244,233,211, 89,154,166,201,134, 13, 27,144,149,149,165,158, 51,103, 14, +255,246,237,219,144,203,229, 79, 42,187,119,150,101,243, 8, 33, 99,155, 54,109,186,239,226,197,139, 98,119,119,119,228,230,230, +130,101, 89,236,221,187, 23,147, 38, 77,130, 80, 40, 68,100,100, 36,190,252,242,203,130,130,130,130,177,165, 99, 96,149,230,212, +233,116,132,203,229,178, 12,195, 96,193,130, 5, 37, 65, 69,139,131,140,138,120,122,236,152,238, 42,153,186, 51, 71, 50,248,251, +157, 95, 1,128, 94,167,211,191,126,241, 48,122,239,166,239,175,243,120,188, 91,165, 56,235,127, 28, 11,139, 16, 50,239,199, 31, +127,220,218,172, 89, 51,145,137,137, 9,220,221,221,113,247,238, 93,220,189,123, 23,183,111,223, 46,174, 3,176,178,178, 66,118, +118, 54,226,227,227, 21,132,144,121, 21,229, 39, 95,204,133,171, 71,237,194,217,130, 69, 22, 43,110,169,217,131,165,173, 89, 60, + 46,183,210,231,253, 99,247, 14, 43, 43, 43, 93, 96, 96, 64,184, 66,161,160,139,181,148,141,141,205,139,162,115,217, 26, 53,106, +168, 63,170,242,127,225,140,218,181, 25, 33,203,230, 21, 14, 11, 62,143, 47, 17, 91,215,191, 8, 0,135,199, 67,141,110,125, 74, +191, 7,182, 16, 66,118, 23,125, 87,149,226,156,253,169, 99, 97, 85,165, 93, 50,114,254, 51,156,255, 38, 11, 22, 0, 32, 44, 44, +236,247,250,245,235, 95, 88,177, 98,197,138, 19, 39, 78,140,153, 50,101, 10, 49, 51, 51,195,145, 35, 71,216,140,140,140, 61,124, + 62,127,230,253,251,247,179,170,115,113,150,101,247,220, 56,126,111,194,176, 57, 61,201,244, 13,195,155,135,252,241, 34,162, 65, + 83,119, 52,104,234,142,144,107,225,216, 52,247,192,126,189, 86,191, 32, 41, 41, 41,174, 18, 42, 85,251,102,158, 31, 59,185, 91, +223,188,254,135,117, 85,103, 17,178, 44,123,228,196,137, 19, 83,186,116,233, 66, 61,122,244,232, 47, 62, 87,197,203,227, 48, 12, +131, 43, 87,174, 64,163,209,224,200,145, 35, 76, 69,113,176, 24,176,167,182,109, 89, 61,108,219,174,227,124, 62,143,224,254,173, + 99,200,201,170,216, 42,199,227,113,241,219,129, 83, 26, 14,135,126, 93, 65, 90,223,135,133,133, 89,175, 90,181,138, 38,132, 96, +203,150, 45,160, 40,170, 92,135,246, 23, 47, 94, 48, 90,173,182,210,178,146,201,100, 87, 28, 28, 28, 6,110, 89,183,120,111,155, +142, 61, 44,188,189,124, 56,118,118, 53,193,161, 9,178, 50,210, 17,242,224,182,238,226,185, 83,217, 42,149,106,184, 76, 38,187, +242,119, 42,224,242,237, 39,203,220,223,103,202,186,202,172, 40, 58,173, 86,203,145, 72, 36,208,233,116,101,134,106,104,219,182, +173,232,238,221,187, 10,141, 70, 3,154,166, 43, 84, 76, 12,240,201,203, 72,175,215,123,103,101,101, 65, 46,151, 35, 52, 52,148, +221,180,105, 83, 90,118,118,246,220,210,199, 51, 51, 51,145,151,151,135,144,144, 16,118,251,246,237,105,185,185,185,115,171,146, +127,197,113,177,178,178,178, 24,177, 88, 76,105,181, 90,173,175,175,175, 80, 34, 49, 44,230, 21, 0, 60,121,242,164, 83,121,199, +154, 53,107, 22,117,247,238,221,186,122,189,190,244, 26,133, 60,165, 82,233,222,163, 71, 15,142, 1,233, 27,124,249,242,229,223, +111,223,190,221, 64,165, 82,141, 74, 77, 77,221, 7,160, 38,135,195,193,155, 55,111,210,212,106,117,159,121,243,230,237,145,203, +229,207, 77, 76, 76, 6, 27,216,110, 92, 36,132, 12,241,246,246,222,189,120,241, 98,147, 86,173, 90,113,164, 82, 41, 26, 54,108, +136,200,200, 72,156, 59,119, 78,187,101,203, 22,121, 65, 65,193, 72,150,101,175, 84,208,233, 96, 1, 16,157, 78, 7, 62,159, 95, +178, 9, 4, 2,240,120, 60, 20,168, 41,140, 94, 27,163,208, 65,164, 88,183,104,236, 57, 22, 32,201,241, 49,233,169,201,241, 15, + 9, 33,183,100, 50, 89, 78,121,150, 49,165, 82,233,207,178, 44, 39, 55, 55,119,131, 74,165, 26, 62,125,250,116,199, 85,171, 86, +193,215,215, 23,233,233,233,176,178,178,130,163,163, 35,242,243,243, 17, 27, 27,171,215,104, 52,219,244,122,253,146,148,148,148, + 10,135, 29,179,211,115,225,236, 80,243, 3, 75, 39,203,178, 96,245,128, 86,165,135, 94,195, 66, 77,180,224,114,181, 48,112, 9, + 45, 86,167,211,161, 91,183,110, 56,123,246, 44,122,246,236,201, 2, 40,215,138,116,246,236,217,202,135,220, 25, 6, 92, 1, 31, + 28,222,159,195,130,133,214,172,194,125, 20,249, 75,121, 26,173, 86, 70,252, 59, 5, 86,209,139, 57, 27,192,184,134, 13, 27,238, +155, 60,121,242, 89,134, 97,184, 12,195,116,125,242,228,201,237,191,115,241,164,164,164, 80,169, 84,250,157,189,179,229,138,206, + 67,155,195,211,191, 22,244, 58, 61,238,158,127,130, 61, 63,158, 60,152, 24,159, 56,188,244, 90,133,229, 63,207,204,245,102, 65, +158, 20, 0, 94,169,225, 23,166, 58,179, 8, 83, 83, 83, 23, 46, 91,182, 12, 63,252,240, 67,149,103, 17,150,119,206,189,199,137, +227,154, 4, 57, 58, 15,236,211,182, 35, 69, 40, 86,165, 86, 85,208, 43, 0, 91,236, 21,193,225,208,175,111, 62,136,247, 45,239, +220,228,228,228,118, 19, 38, 76,248,131,162,168, 90,165, 77,243,229, 65,175,215, 39,101,100,100,116, 48, 36, 31,146,147,147, 47, + 56, 59, 59,123,220,188,120,234,187, 59, 87,207,183,214,235, 53,110, 4, 4, 60, 30, 47, 90,171,215,221,208,170,213,203, 19, 18, + 18,178,254,110, 5,252,110, 92, 79,188,151,165,131,195,161, 11, 3,123, 22, 21,247,177,141,211, 17, 16,240, 91,185,255, 19, 8, + 4, 23,118,239,222,221,109,216,176, 97,164,216,239,140,101,217, 15, 26,244,135, 15, 31, 42,212,106, 53,246,236,217,195,138, 68, +162, 10, 3,215,126, 88, 70,132, 85, 85,224, 15,101,104, 25,229,231,231,143,236,209,163,199, 94, 0, 2, 0,111,114,114,114,198, +203,100,178,132,210,199,123,246,236,185, 23,128,128, 16,242,151,227,134,160, 56,100,131,165,165,101,120,145,229, 74, 88, 29, 71, +247, 10,234, 55, 93,222,240,161, 33, 67,133, 69,107, 11,246, 46,254, 29, 20, 20,180,100,194,132, 9, 37,139, 61,135,133,133,221, + 1,224, 90,141,206,217, 21, 66, 72,189, 5, 11, 22,124, 35, 20, 10,219, 20, 20, 20,120, 20, 9,186, 72,149, 74,117, 93,161, 80, +172,103, 89,182,194,216, 82,209,209,209,234, 58,117,234, 68,234,116,186,250,182,182,182,224,112, 56, 37, 34, 11, 0, 30,196, 89, +133, 36, 38, 38, 54,172,106,218,206,159, 63,239, 98,105,105,217,129, 16,210,151,101, 89,207,188,188, 60,213,247,223,127,127,239, +230,205,155,185, 17, 17, 17,157, 90,180,104, 65, 28, 28, 28,240,246,237, 91, 54, 63, 63,255, 40, 69, 81,243,100, 50, 89,140, 1, +247,156,176,103,207,158,170,230, 83,133,245, 73,173, 86,167,221,191,127,223,234,234,213,171,180, 94,175,199,197,139, 23, 75, 58, +146,101,141, 6,198,196,196, 64,173, 86, 87, 56,134,174,201,201,130,239,212,217, 96,139,102,115, 22,163,102,215, 62, 32, 96,193, +170,141,122,202,136,127, 7,200,127,100, 26,115, 21, 77,136, 82,169,116,128, 80, 34,152, 88,203,195,209, 87, 22,147, 26,158,151, + 83,176, 63, 41, 41,105, 59,203,178,250,234,114, 86, 37,208,168,209,204,251,207,112,242,197,102,151, 8,205,171, 85,238,203, 65, +175,121,175, 46,200,237, 88, 22,103,112,112,176, 19,143,199, 91,173, 82,169, 58, 87, 20,165,157,166,105,157, 72, 36,186,160, 84, + 42,103,126,188,216,243,255, 98,126, 30, 61,122,180, 76,209,111,232, 44,194,190,125,251,234,171,146, 78, 63, 63,191,235, 98,177, +184,204,128,154, 5, 5, 5,113, 79,159, 62,237,240, 57,228,103,241,204, 54, 67,124,132, 74,115, 86,103, 22, 97, 57,156, 37, 67, +132, 46, 46, 46, 2,141, 70, 19, 0,192, 3,128, 5,128, 76,173, 86,123, 49, 45, 45, 45,197,193,193, 33,136,162,168, 5, 69,226, +117,105,114,114,114,200, 63,249,108, 58, 59, 59, 11,205,204,204, 86, 83, 20,229,104,200,255, 25,134, 81,167,166,166, 78, 79, 79, + 79, 79, 46,139,179, 94,189,122, 33, 52, 77, 87,186,168,185, 94,175, 79,120,249,242,101, 80, 5,233, 52, 14, 17,254, 11, 57,255, +149, 22,172,255, 52,100, 50,217, 33, 0,135, 62, 37,103,121,145,218,141,248,124, 80, 44,158,170,131, 34,177, 52,240,223,150,103, +197, 2,169,140,253,175, 0,144, 79,125, 61, 67,194, 49,124, 14, 96,171,217, 83, 44, 18, 80, 45, 62,101, 90,222,189,123,167, 2, +112,175,104,251, 0, 69,130,170,251,231,146,111, 9, 9, 9, 74, 0,147, 62, 21, 95, 69,162,201, 8, 35,254,109,160,140, 89, 96, +132, 17, 70, 24, 97,132, 17, 70, 24,241,105, 65, 0,180, 47,167, 71,104,176,233,143, 16,210,190, 26, 61,206,171, 70, 78, 35,167, +145,211,200,249,255,132, 51,181, 2,206, 23,149,112,214, 47,231,144,221,255, 80,126,250,151,195,185,178, 18,206,217, 21, 28,126, + 98,172,159,255, 63, 57,255, 53, 40,118,102,252, 79,108, 0,218, 27, 57,141,156, 70, 78, 35,167,145,211,200,105,228, 52,114,254, +219, 54,227, 16,161, 17, 70, 24, 97,132, 17, 70, 24, 97,196, 39,134,193, 2,203,196,193,219,219,214,197,111,175, 85, 13,223,103, + 86, 53,124,159,217,186,248,237, 53,113,240,246,254, 55,102,154, 84, 42, 21, 57, 58, 58, 14,174, 89,179,230, 21,127,127,255, 92, + 39, 39,167,111,140, 85,169,234,104, 77, 8,103, 32, 33, 19,135, 17, 18, 55,140,144,184,129,132, 76,108, 77,200,255,187,101, 51, + 22, 79,149, 54,185,125,113,200,133,197, 83,165, 77,202, 60,254,173,212,250,225,149,254, 63, 45,159,228,100,245, 41,174, 71, 8, + 49,181,183,183,223,225,224,224,240,206,222,222,254,189,189,189,253,110, 66,136,185,177,198, 25, 97,132, 17, 70,252,247, 96,208, +203,204,170, 86,131,209,222, 94,158, 51,151, 45,154, 75, 28,236,108,196, 58, 61,163,121,251, 46,222,103,225,178, 21, 71,173,106, + 53, 88,151,249,254,249,174,106,188, 4,136,179,179,243, 0, 46,151,219, 13, 64,177, 80,123,165,213,106,207, 38, 36, 36, 28, 50, +116, 86,144,175,175,239, 29,154,166,107, 86,229,218, 12,195,188,123,250,244,105,203,234,100,152,147,147, 83, 63, 39, 39,167,221, +141, 27, 55, 22,251,251,251,131,199,227, 97,213,170, 85, 51, 0,172, 55,248,222, 91,183,230,216,101, 91,125, 69,115, 56,221, 1, +248,178, 44, 0, 66, 63, 99, 52,234,243,169, 60,171,189,108,232,118,173, 33, 60,142,142,142,115, 9, 33,195, 81, 56,173,124,151, + 76, 38, 91,253,159,168, 36, 82,169,180, 6, 33,164, 13,203,178, 94, 20, 69, 61,103, 24,230,178, 76, 38,203,248,187,188,246,192, +184,166,205,155,255, 52,108,198, 12, 90,113,235, 22,126,218,189,123, 3,114,115, 1, 96,115, 85,235, 82,112,176,127, 95, 83, 83, +116, 35, 64, 0, 8, 8, 5,246, 73,102, 54,117,254,241,227,176, 67,134,196, 82, 43, 15,129,129,129,231, 0, 20, 47, 28,119, 62, + 52, 52,180,107, 85, 57,114,162,217,249,130,238,222, 45,114,162,175,207, 7,208,249,227,227, 58,165,112, 24, 75,215,232,166, 96, +195,226, 1,172,253, 59,121, 74, 8, 17,219,218,218, 62, 59,117,234,148,115,163, 70,141, 56, 0, 16, 18, 18,242, 85,183,110,221, +218, 22,133, 18,200,253, 39, 26,154, 38, 77,154, 88,234,116,186,125, 52, 33,141, 25,134,177, 0, 0,138,162,178,245, 44,251,128, +195,225, 12,171,110,176, 98, 35,140, 48,194,136,255, 89,129,101, 98,239,229, 83,175,158,247,140,139, 39,246,213,200,206,204, 86, +254,188,102, 95,168,156,195, 47,112,247,113,231,253,188,126,181,229,196,169,211,167,153,216,123, 61,204, 79,137, 8, 55,244,162, +142,142,142, 53, 93, 92, 92,142,207,157, 59,183,126,243,230,205,185,118,118,118, 72, 73, 73,193,235,215,175,235,223,189,123,183, +231,201,147, 39,103, 56, 58, 58,246, 54, 32,130, 59, 36,124, 94,157, 67,171,150, 59,240,205, 45,192,234,117,176,172,239, 95, 56, +254,201, 48, 72,190,121, 21,122,141, 6, 44,163,135,115,167, 47,139,197, 21,130,131,131,121,213,201, 44,103,103,103,169,135,135, +199,254, 57,115,230,240,212,106, 53,194,194,194,112,255,254,125, 38, 53, 53,117,133,193,162,162, 65, 47, 31, 7,142,195,209, 30, + 61, 59,187,116,253,194,142, 95,203,193, 22, 44, 35, 68, 68,172,166,230,149,219, 97,157,206, 93,184, 52,203,206,167, 87,159,212, +240, 19,207, 43,226,169, 95,191,126, 99,138,162,126, 72, 76, 76, 44, 22, 65,171,130,131,131,191, 47,125,206,199, 26,149, 97, 24, +112, 56,156,148,130,130,130, 1, 47, 94,188, 8, 43,139,119,120, 0,209,106,245,133,245,130,199,129,254, 90,154,243,137,246,237, +219,215, 30, 57,114, 36, 2, 2, 2, 16, 18, 18,210,230,200,145, 35, 83,107,212,168,241, 88,171,213,158, 23, 8, 4, 55,138,166, +165, 87, 25, 60, 96,214,176, 25, 51,104,147,119,239, 96,242,244, 41,134,228,230,114, 86, 2,179,170, 34,176, 2, 3, 3,235,116, +104, 31,112,180,103,239, 86,222, 14, 14, 62, 60, 46,215, 6, 44,203, 66,171,205,244, 72, 75,123,213,215,220, 28,115, 26, 53,106, +212,231,209,163, 71, 6, 69,154,109,216,176,161, 61,195, 48,219, 88,150,229, 17, 66, 38, 3,232,114,241,226, 69,232,245,122,116, +237,218,181, 75, 96, 96, 96, 29,150,101,127, 54, 49, 49, 97, 21, 10,197,168,199,143, 31,167, 84,100,185,202,141,102,231, 39, 19, +215, 78,158,129,195,144, 76, 46,118,154,222,217,241,130,153, 27, 89,182,240, 39,217,125, 0,232,236,230,102,234,234, 37,153,109, + 98,214,192, 42, 55,241,234,236,206,110,110, 59, 47, 68, 71,231, 85,167,195, 82, 84, 15, 86,255,250,235,175, 53,130,131,131, 75, +226,101,249,251,251,211,171, 87,175,118,250,230,155,111, 54, 0, 24, 97,160,168,246,176,182,182,190,196, 48,140,234,229,203,151, + 30,197,251,237,252,122, 55,181, 54,149,180, 75,203,202,187,149,254,242,228, 77, 67,184,130,130,130, 70,242, 40,106,199,250, 5, +147,104,175, 6,126, 16,219,218, 66,147, 32,131, 92,175,181,122,240,244,101,215,149,235,119,164, 5, 5, 5,141, 13, 9, 9,217, +109,108,146,141, 48,194,136,127,141,192, 18, 8,248,115, 22,206,155, 77,178, 51,178, 21,202,220, 60,181, 86,169, 84, 82, 60, 86, +249, 60, 60, 54,149,226,208,217,223, 76,157, 98, 58,231,187,121,115, 0, 12, 49, 84, 92,121,121,121, 61,218,185,115,167,157,149, +149, 21,114,114,114,144,145,145,129, 71,143, 30,129,101, 89,116,238,220, 89,224,215,160,126,192,186,245, 27,238, 59, 58, 58, 54, +169, 76,100,113,184, 28,194, 21,139,113,172, 85, 0, 40, 30, 15,125, 34,146, 10,197,133, 86,131, 11, 3,186, 1, 0,104, 62, 31, +253,163, 10, 39,249, 8,133,194,106,103, 22,203,178, 77,154, 53,107,198, 3,128,233,211,167,231,202,229,242,229,132,144,223,101, + 50, 89,162,161,226,202,198,214,246,230,154,101, 99,172,234,215,113,133, 70,171, 69,124,106, 34, 88,194,135,163,157, 4, 67,123, +249,243,154, 7,241, 93,215,108,190,122,195,190,126,143,150, 41, 47, 78,189, 44, 87, 88, 74, 36,251, 54,108,216,128,195,135, 15, + 3, 0,174, 95,191, 14,119,119,119, 73,101,105,120,253,250,181,235,240,225,195, 15, 2,168, 91,214,113,173, 30,156,223,127,255, + 29, 0,176,246,219,193,244,230,219,145,181, 69,162, 63,215, 82,110,213,170, 21, 90,181,106, 69, 45, 95,190, 60,248,250,245,235, +193, 7, 15, 30,212, 56, 57, 57,109, 72, 76, 76, 60, 82,157, 60, 85,220,186, 5,147,167, 79,129,155, 55,171,252,223,192,192,192, + 58, 94, 94,214, 15,214,173,253,222,230,204,217,151, 88,179,102, 55,162,163,163, 1, 0,174,174,174, 24, 60,168, 31,247,247,223, +182,213,155, 51,103,209,189,192,192,192,230,161,161,161,149, 70, 55,103, 24,102,219,183,223,126,251,165,147,147, 19,230,207,159, + 31, 89,167, 78, 29,152,153,153, 97,251,246,237,176,180,180,132, 86,171,141, 92,181,106, 21, 71, 38,147, 97,227,198,141,191,148, +178,110,253, 5,173, 59,182,158, 47,232,238,221,194, 51,112, 24, 76,204, 28,177,243,192, 33,188, 14,221,215, 66,165,121, 53,127, +249, 36,167,161, 10, 86, 48,220,217,221,116,142, 75, 80, 43,235,186,245,190, 68,173,192, 48, 27,165,254,118,236,130,137,174, 43, + 56, 66,229,190,133,107,254,106, 37, 36,253,142,210,245,115, 35,172, 94, 92, 65, 6,203, 46,100,138,132, 85, 73,252, 43, 61,139, + 47, 91,182,108, 89, 34,174,222,189,123, 7,149, 74, 5,111,111,111, 74,173, 86, 27, 20,211, 74, 42,149,122,180,108,217,242,206, +254,253,251,173, 91,180,104,241,193,210, 45, 14,214, 22, 29,111, 30,223, 48,229,135,159,126,243,178,243,233,149, 93, 89, 71, 32, + 40, 40,104,100, 3, 79,183, 93, 27, 86,125, 79,232,188,120,112, 44,210, 0,125, 58,146, 14,253, 2, 34,182, 66,215,241,211,209, + 48, 56,152,158,242,205,220, 93, 13, 27, 54,100, 31, 63,126,188,199,216, 44, 27, 97,132, 17,255, 10,129,197,176,140,175,189,157, +181,104,195,154,189,143,105,141, 90, 45,177, 48, 87,115,205,205, 24, 98,106, 78,107,212,218,252, 90,174,181,248, 12,203,248,150, + 35, 72,174,126,220,203,118,113,113, 57,190,103,207, 30, 59, 46,151, 11,134, 97, 96,107,107,139,183,111,223, 34, 59, 59, 27,121, +121,121,136,126,245, 10,181,107,214,192,148,177, 99, 28,151,174, 89,123,156, 16, 18, 84,122,184,240, 99, 78,150, 97,193,232,116, + 31,247,230,129, 50,150,140, 41,111, 25, 25, 67,167,148, 50, 12,243, 86, 38,147, 65, 44, 22,195,219,219,219,228,241,227,199,183, + 19,139, 77, 72,149,221,123,235,214, 28, 71,129,237,241,213,203, 6, 88,129,138, 68,100, 92, 54,220,156, 27,193,198,162, 6, 18, +211,242,241, 56,252, 60,162,162,207,193,205,169, 22,198, 14,174,107,177,126,251,221,179, 36,112,156, 91,233,225,194,210,156,121, +121,121, 38,181,106,213,130,147,147, 19, 24,134,129, 94,175, 71,120,120, 56,244,122,125,201,239,210,159,123,143, 93,131, 46,247, + 61,134,125,245, 21, 50, 51, 51, 77, 12,189,247, 98,113,181,125,176,180,158, 60, 43,137, 7, 0, 18, 75, 71,205,216,223, 18, 95, + 54,108,216, 16,182,182,182,188,123,247,238, 77, 7,112,164,170,249,169, 1, 86,253,180,103,207,198, 33, 57, 57, 20, 0,236, 34, +132,209, 20, 70,213, 54,168, 46,181,111,239,119,108,195,134, 5, 54,132, 13,135,149,249, 74, 60,122,244, 30, 26, 77, 97, 85,201, +200, 72,197,228,137,185,224,112, 76,177,118,221, 34,235,254,253,199, 31, 43, 26, 34, 99, 42, 74, 39,203,178,188,107,215,174, 97, +208,160, 65, 56,120,240, 32,135,166,105, 60,124,248, 16, 34,145, 8, 35, 70,140, 64,189,122,245, 56, 34,145, 8,119,238,220, 65, +110,110, 46,169, 40,157, 55, 46,221, 88,150, 19,125,125,126, 50,185,216,105,231,129, 67, 24, 51,104, 0, 28,216,152,219,230,110, +100, 89,135,238,205,190,103,233, 26,221, 36,166,190,150,238,245,187,131,199, 55,193,164, 89, 75, 16,249,226,140,101, 65,222,179, +137, 68, 31, 95, 3,192,212,143, 57,217, 35,125,245, 27, 15,220, 11,188, 82,243,113, 45,105,224,184,135, 0,158,253, 41,176, 92, + 57,132,210,155, 23, 91, 47,223,188,121,131,232,232,104,112, 56, 28, 40, 20,138, 15, 22,245, 45,205, 25, 16, 16, 48, 78,175,215, +127, 15, 0,106,181,122,175,189,189,253,200,159,127,254,217,186,120, 9,162,210,150,171,204,236,220,172,123,143, 95,190,158, 62, +174,111,235, 91, 15, 94,196, 91,248,245,140,203,126,122, 50,167,172,252,108,210,164,137, 37,159,166,119,252,180,122, 33,209,199, + 92,131,192,187, 53, 56, 38,238,208,107, 19,161,204,146, 67, 25,155, 4,245,246, 77,112,157,240, 13, 86,175,252,129, 12, 26, 58, +106,135,155,155,219,241,232, 82, 22,188,255,196,116,111, 35,167,145,211,200,249,121,114,254,235, 4, 22, 33, 84,174, 94,207, 8, +120,182,118,202, 81,253,219, 53,184,124, 53,228,137,216,198,140,211,177,117, 64,171, 71,207, 99,239, 19,138,104, 9,161, 12,242, +235,112,118,118, 30,176,112,225,194, 6,102,102,102, 96, 24, 6,230,230,230, 72, 75, 75,131, 90,173, 70, 78, 78, 14, 84,121,185, +208,228,229,226,105,252, 59, 52,107,213, 26,237,155, 52,246,190,160,213, 14, 0,112,176, 60, 78, 61, 69,179,214, 1,141,208, 47, + 38, 3,140, 70,141, 35,174,214, 37, 86,171,129,239,178, 65, 8, 1,163, 81,227, 66,112, 93,240, 77, 36,240,155,185,176,218,153, +149,148,148, 20, 86,171, 86,173, 11,157, 59,119,238, 60,110,220, 56, 42, 57, 57,249,162,189,189,125,179,148,148,148, 74,135, 71, +237,178, 44,135, 13, 27,219,160,142,141, 5,133, 51,119, 46,162,177, 87, 47,136, 5, 92,164,101, 43, 64, 64, 16,243,246, 42, 24, +157, 9,158,190,122,135,166,190, 98,180,108,100,225,156,255, 71,230, 88,148, 63, 92, 70,178,178,178,144,154,154, 10,173, 86, 11, +173, 86,139,190,253,250,225,215,125,251, 32,151,203,161, 80, 40,160, 86,171,161,215,235, 65, 81, 20,174,156, 61,130,248,216, 87, +104,218,164, 9, 80, 65,196,111, 46, 13,221,218,111, 7,115, 0,128,111,106,171,201,203,203,131, 68, 34,129, 60, 43,137, 55, 99, + 77,137,101,139,119,253,250,117,132,134,134, 66, 42,149, 26, 84,143,202, 66, 52,176,227,173, 94, 63,191,243,137, 19,118,119, 79, +156, 96, 30,156, 57,147, 32,200,203,219,110,200,127,131,131,253,251, 78,153,220,213, 83, 36, 20, 33, 33,110, 3,188,188,120,152, +241,141, 53,150,175, 76, 7, 0, 76,153,236,140,134, 65, 54,200,205, 62, 10, 27, 59, 55,204,152,222,211, 45, 63,159,253, 10,192, +222,138,235, 59,153,252,236,217,179, 72,123,123,123, 78, 88, 88, 24,248,124, 62, 68, 34, 17, 68, 34, 17,132, 66, 33,146,147,147, +161, 86,171,113,248,240, 97, 93,209, 16, 98,185, 40, 26, 6,236, 60,189,179,227,133,215,161,251, 90, 56,209,177, 79,251, 76,106, +254,238,217,131,176,188,203, 87,238, 46,213, 41,133,241,217, 9, 87,103,215,105, 24,102, 51,113,230, 98,108, 90,189, 16,175, 31, +222,202,180,175,153,187, 89, 68, 84,123,131,191, 40,195, 42,214,122, 49,103,226,130,254,186,113,195,251, 88,156,177,191, 55,238, + 60,135,164, 37,167,135,174,193,219, 48,133,160,110,192, 80, 15, 87, 74,125,237,218, 53, 81,203,150, 45,161, 84, 22, 46, 25, 71, +211, 52,246,239,223,207,232,116,186,235,101, 90, 45,181,218,239, 67, 67, 67, 29, 21, 10, 5, 6, 14, 28, 56,101,209,162, 69, 18, + 46,151, 91,248,124,233,245, 31, 88,174,150,173,255,245,210,180,239, 55, 95,191,116,112,165,116,217,156,145,173,135, 76,250,225, + 58,128,139,101,241,234,116,186,125, 27, 86,126, 71, 11, 44,180, 32, 13, 59, 64,147,162,192,251,157, 99,160,206, 85,194, 99,233, + 98, 0,124,168,181, 20,206,245,232, 11,202, 74,138,209, 45,154,113,182,223,186,179, 15, 64, 79, 99,211,108,132, 17, 70,252,255, +183, 96, 49,204,173, 55,177,239,186,116,104, 31,236,124,246,230,243,199,227, 70,116,237, 72, 81, 20,121, 18,254,254,166, 91, 45, + 7,155,235, 55,110,177, 12,195,220, 50,228, 98, 92, 46,183, 91,243,230,205, 57, 89, 89, 89,144, 74,165, 72, 75, 75, 67, 98, 98, + 34,180, 90, 45,148, 57,217, 80,231,229, 66,157,155, 3,189, 60, 15,209, 33,143,224, 85,211, 89,112,181,208, 9,254,160, 33,252, + 31, 91,168,138, 23,253, 5, 33, 16,152,154, 64, 96, 98, 82,249, 74,240, 31, 65, 42,149,246, 48, 51, 51,155,157,151,151,119, 62, + 49, 49,113,153, 90,173,158,248,227,143, 63, 62, 94,178,100,137,205,156, 57,115,204,102,205,154,117,196,197,197,197,191, 50, 63, + 36, 83, 43,125,223,198, 13,234,210, 81,239, 95, 32,200,163, 47,106, 75,155, 35, 38, 49, 7,153,121, 42,100,228, 40,224,233, 49, + 19, 41, 25, 5,200,145, 43,241,252,245,239,112,114,168, 67,209,220,232, 78, 21, 8, 44,164,164,164,124,112,207, 7, 15, 28, 64, + 65, 78, 14,220,220,220,224,237,237, 13, 91, 91, 91,188,127,255, 30,119,238,220,193,144,254, 95,130,203,237,131,212,212,212, 10, +239,119,111, 24,203,149, 74,165,161, 50,153, 12, 97, 97, 97,136,142,142, 46,115, 88,245,143, 63,254, 40,124,241, 58, 56, 24,156, +151,246,246,246,223, 81, 20,213, 31, 0, 13, 32,158,146, 74,235,218,218,218,218, 55,235,217, 19, 57, 92, 46,253,243,245,235,132, + 99,110,110, 2, 32,187, 50, 46, 51, 51,116, 13, 10,106,206,207,206,218, 13,160,208, 40, 53,114,132, 45, 58,119,178, 7,161, 4, +144, 58,154,130, 80, 2, 16,194, 71,129,252, 26,124,234,249,242, 76, 77,143,119,171, 72, 96, 21, 59,180,215,171, 87, 15,227,199, +143,199,201,147, 39,177,119,239,159,167,247,233,211, 7,189,123,247, 70,126,126, 62,236,237,237, 57, 50,153, 44, 38, 48, 48,176, + 82,199,119, 51, 55,178, 76,165,121, 53,223,194, 93,146,166,135, 77,211,124,173, 32, 99,225,154,152,133, 0,214,118,118,115,219, +169, 97,110,197, 70,189, 56, 99,249,246,241,141, 76, 89,148,220,117,231,185,152,114,125,176,110,222, 4, 99,239,123, 83,243,101, +167, 86,156,158,221,219, 20, 56, 57,219,123,252,188, 89,189, 63,211,201,122,153, 75, 77,231, 33, 11,127,156,173, 25,218,171,133, +102,246,140,201,220,122, 62,222, 36, 55, 55, 23,135, 14, 29,210, 93,184,112, 33,137, 97,152,105,229,208,210, 69, 66, 11,253,251, +247,151,136,197, 98,196,199,199,195,203,203, 11, 12, 83,152,183, 73,105, 25,207,239, 62,126, 17, 49,125,124,191, 86,191,159,190, +254,234,210,141,144, 87, 61, 59, 53,243, 35,132,117, 41, 47,173, 52, 33,141,125,124,125,193,178,137,160,185, 30, 72,216, 63, 18, +202,140, 60,168,228, 74, 80, 92, 9,212, 90, 26, 26,134, 64,224,219, 8,111, 78,158, 70,221,193,245,192, 33,164,153,177, 89, 54, +194, 8, 35,254, 63,160, 82,181, 65, 43,213,203,191,157, 61, 31,150,230, 34,243, 70, 1,238, 14,167, 46,222, 12,185,117, 47,228, +149, 75, 13, 27, 91, 86,171,182, 92,181,110,147, 51, 41, 80, 24,234,228,237,109, 99, 99, 3,141, 70,131, 55,111,222, 32, 33, 33, + 1, 26,141, 6, 58,185, 28,170,236,108, 40,179,178,160,151,231,129,167,215, 67,145,150, 10, 75, 33, 31,248,115,134, 97, 69,166, +202, 63,197, 84, 25,130,139, 16, 2,145,153, 25, 4,166,166,160, 56,180,193,153,227,232,232, 24,232,239,239,127,248,218,181,107, +193,205,155, 55, 95,234,226,226, 98,158,156,156,252, 62, 37, 37,165,221,234,213,171, 85,182,182,182, 24, 50,100,136,167, 86,171, + 29, 86, 25, 23, 79,160,106, 80,211,222, 29, 53,236,191,132,212,166, 49, 50,115, 85, 72,205, 86, 32, 37,163, 0,135,142, 15,192, +229,243, 3,241,228,206, 87,120,243,112, 36,210,243,205, 32,180,106, 3,128,173, 95, 17,231,189,123,247,176,109,219, 54,108,219, +182, 13, 91,183,110,197,166, 77,155,144,149,149,133,250,245,235, 35, 46, 46, 14, 23, 46, 92, 64, 82, 82, 18,108,108,108,240,228, +201, 19,108,223,190, 29,143, 30, 61,170,114, 37, 81, 42,149,224,153, 88,107,214,126, 59, 24,107,191, 29, 12,134, 43,209,148, 18, +224,134, 87, 54,138, 26,158,212,179,103,131, 36, 11, 11, 31, 95, 95,223,206,253,251,247,119, 13, 14, 14, 46, 57,238,230,230, 86, +147,195,225, 36, 75,165,210, 93, 82,169,212,191, 98,229,207, 6, 88, 90,121, 67,173,138, 40, 42, 99, 46, 8, 17,162,237, 23,175, +208,172, 69, 8, 52, 90, 30, 40, 34, 0, 69, 9,161,211,101,192,204,212, 30, 44, 75,234, 87,146,196, 46, 23, 47, 94,196,182,109, +219,240,246,237,219, 18, 97,217,173, 91,183,201,131, 6, 13, 58,174,215,235,113,246,236, 89,156, 60,121, 18,181,107,215,134,159, +159, 31, 52, 26, 77,151,202,238,123,225, 79,178,251,191,175,187, 48,144,171,181,244, 23,138, 92,106, 67,110,210, 99, 98,107, 91, + 9, 0, 92,136,142,206,179,171,153,187, 66,158,247, 44,206,194, 57,127,101,101, 14,238, 44,187,144, 9,141,138,120,240,251,137, +139, 57,169, 41, 89,220,128, 6,245, 20,203,151,204,228,185,212,174,187,106,225,236,241, 14,137,185,194,236, 47,166, 92,136, 56, +126,241, 81,254,208, 17, 99,116,163,198, 78, 82, 94,184,120,229, 4,195, 48, 13,202,155, 65,200, 48, 12,146,146,146,240,242,229, + 75,196,196,196, 32, 45, 45, 13,233,233,233,200,203,203, 43, 25, 86, 20,231,229,158,219,180,231,204, 83,137, 72, 36, 14,110,224, + 94,243, 97, 88,120,170, 68, 36, 18,187,215,174,233, 65,200, 98,170, 28, 94, 11,161, 72, 8,128, 32,239,197, 45, 40, 51,243,161, +200,206,135, 50, 43, 31, 42, 13, 13,165,138,130, 66, 77,193,166, 69, 7,228,203,149, 80,102,100,129, 97, 89, 75, 99,179,108,132, + 17, 70,252, 43, 44, 88,233,233,145,249,102,182, 62,189,191,153,245,253,133, 3,191,252,108,167, 82, 21,196, 89, 91,154,232, 77, +196,124,155, 81,227,126, 64, 94,126, 86,175,252, 76,195,103, 61,101,101,101, 33, 54, 54, 22, 34,145, 8, 60, 46, 23,122,133, 2, +122,133, 28,138,172, 12, 80, 26, 21,120,122, 61,172,196, 34,212,146, 58,192,197,190,114,235, 8,205,232,137,236,202,121, 92, 26, +218,235, 47,195,130, 23,155,122, 66, 96, 34,129,208,194, 18,205, 78,222, 46, 20, 58, 60, 30,176,176,242, 69,218, 29, 28, 28,108, +164, 82,233,233, 77,155, 54,241, 50, 50, 50,240,242,229,203,167,239,222,189,203,177,178,178, 50,229,114,185, 76, 84, 84,212,213, +136,136,136,110,117,234,212, 1,203,178,110,149,241,229,229, 72, 52, 90, 45, 11, 89,234,123, 36, 36,189,132,153, 73, 13,176,116, + 13,164,102, 22,128,192, 30, 58, 85, 36,244,218, 66,119, 43,149, 34, 1, 5,106,195,214,237,213,104, 52,208,104, 52,208,106,181, + 80,169, 84, 24, 58,116, 40,238,222,187,135,131, 39,255, 64,108,116, 36, 60,107, 59,224,171,175,134,194,223,223, 31,143, 31, 63, +174,118, 69,105, 50,251,210, 75,145, 72,132,173, 91,183, 66, 44, 22,127, 32,110, 13, 20,171,107,219,181,107, 87, 55, 82, 46,199, +203,136, 8, 52,234,215, 15, 0,112,231,206,157,146,115, 20, 10, 5, 6, 15, 30,204,143,141,141, 29, 21, 17, 17, 49,202,209,209, +113, 93, 82, 82,210,140,242, 56,207,157,187,143,241,227,195,145,150, 86,232,135,125,232, 64,189,146, 99,111, 99, 53,232,212,181, +112,228,202,194,194, 2,235,214,213, 55, 40,157,122,189, 30, 59,118,236, 40, 25, 22, 4, 0, 14,135,211,108,250,244,233,189,203, + 58,223,199,199,167, 82,206,233,253,156,133, 79,222,139, 38,154,215,117,169,103,102,227,139, 12,109, 88,253,176,196,164,201,211, +251, 57,111, 88,119, 36, 65, 41, 34,170,189, 68, 31, 95,131, 35, 84,238, 51, 36,141,209, 23, 54,170, 45, 92, 70,236, 75, 78,203, +157, 55,105,204, 96,107, 51, 11, 59,249,174, 77,203, 45, 41,154, 98, 79,135,104,178,235,185, 90, 91,244,104,252, 83,254,248,111, + 22,132,169,117,241,147, 16,127, 58,178,162, 80, 21, 12,195, 64, 38,147, 33, 45, 45, 13,113,113,113, 72, 79, 79, 47,122,246,211, + 75,134, 8,171, 3, 66, 8,212,113,113, 72, 57,185, 11, 14, 67,134,194, 99,201, 18,232, 25, 14,148, 5,122, 28,109,217, 14,185, +217, 10,168, 25, 2,139,192,166,232,112,246, 54, 8,163, 7, 30,220, 51,182,202, 70, 24, 97,196,191, 67, 96, 1, 64,110, 90,120, +140,117, 45, 95,153, 92, 33, 23,219,219,217,170,196, 66, 1,147,147,155, 71,135, 61,127,170,201, 79,122,243,186, 10,215,123, 21, + 30, 30, 94, 63, 33, 33, 1,113,239,223, 67,167,144,131, 82,169,193, 42, 11,208,190,121, 83, 8, 1, 8, 41, 2, 30,163, 1,135, +230, 35, 47, 63, 23, 0, 94, 85, 70,202,104,181, 31, 52,234,132, 16, 16,138,130,208,196, 4,124, 83, 9, 4,102,166, 31, 88,180, + 12,129, 72, 36,250,125,251,246,237,142, 14, 14, 14, 88,183,110, 29, 28, 29, 29,189,218,183,111, 95,208,170, 85, 43,145,141,141, + 13, 60, 60, 60, 16, 20, 20,132,235,215,175,131, 16, 18, 93, 25,159, 78,205, 15,125, 21,171,171,145,147,247, 4, 15,194,126,133, + 86,173,133,155,199, 92, 40,180,214,144,216,142,130, 82,125, 26,250,236, 27, 0, 0,190, 89,107, 36, 39,167, 3, 32, 47,170, 82, +152, 44,203,226,217,179,103, 56,112,234, 38, 28,107,121, 35, 46, 42, 2, 17,215,175,226,174,173, 53, 92,124,234, 65,171,213, 26, + 44,136, 12, 61,207,208, 23, 48, 33,100,240,152, 49, 99,144,205,225, 0, 93,187,130, 23, 19, 3,141, 70,131,198,141, 27,163, 97, +195,134, 0,128,198,141, 27,131,166,105,212,173, 91, 23,214,214,214, 56,118,236,216, 96, 0,101, 10, 44,150,144, 39,140, 62,195, +203,213,213,181, 68, 96,237,251, 53, 13, 97, 33, 95,128,128,143,141,155,254,140,202, 80,179,102, 77, 36, 39,199,130, 16,182,178, +252, 60,223,181,107,215, 46,150,150,150, 24, 57,114, 36,132, 66, 33,122,245,234, 5,165, 82,217, 31, 0, 86,172, 88,129,239,190, +251,174,208, 42,181,112, 33, 22, 45, 90,132,130,130,130,114,135,134,127, 93,239, 43, 77,205,100, 70,217, 59, 56,245,106, 99,227, +210,160,109,199,246,168,227,222, 22,109, 59,198, 1,192,143, 86,156,119,253, 87,207,175,127,194,166,134,213,238,203, 23,175, 44, +108,222,170,237,188, 57,227, 44,151,173,216,158, 85,169, 79, 99,206,251,189,121,175,249, 3,214,255,188,237,215,245,223,127, 55, + 85, 24,151,166,206, 74,204, 98,243, 77, 4, 28, 19, 55,123, 98, 50,121,214,210, 88,153, 44,102, 6,226, 47, 70, 26, 82,134, 49, + 49, 49, 37, 62,123, 74,165, 18,114,185, 28,241,241,241, 37,229,171,144,152,117,154, 52,162,187,159, 92,161, 40,120,248, 60, 42, +110,254,148, 33, 77,228, 10, 69, 65,212,219,184, 72,150,253,137, 41,167,204,179, 11,228, 5, 86,170, 28, 37,114,158,190,134,117, +219, 90,208,232, 8, 84,122, 61,178,210,243,160,214, 1, 90,154, 11,231,190, 95, 65, 11, 14,114,211,146, 65, 17, 98,140,135,101, +132, 17, 70,252,123, 4, 22, 33,132,248, 53,168, 37, 93,189,112,136, 51,163,211,121,166,166,167,232, 56, 28, 1,183,134,185, 34, +169, 42, 23,211,106,181,103,111,223,190,221,179,121,243,230,130,168,231, 79,161,206,201,129, 58, 39, 27, 92, 70, 7, 43, 81, 16, + 40,141, 10, 68,173,134,147, 23, 3,101,158, 8,247, 30,189,214,106,181,218,179, 21, 10, 1,176, 44,163, 43, 20, 88,132,162, 62, + 24, 42, 20,152,155, 66, 96, 98, 2,129,169,105,153, 67,136,229,193,222,222, 94,220,185,115,231,118, 1, 1, 1, 96, 89, 22,171, + 87,175,134, 70,163,225,107,181,218, 18,139, 81,126,126, 62,142, 30, 61,138, 95,127,253,245,174,185,185,121,165, 83,203, 25,157, +234,194,181, 59, 79,187, 12,233,213,134,127,229,198, 78,104,213, 12,114,149,102,200, 87,168,144,175,228, 66, 37,232, 8, 66,110, +131,162, 5,104,234, 95, 23,215,238, 68, 42,245, 90,205,197,170, 10, 33,165, 82,137,248,184,119, 72,136,142,132, 73,110, 50,108, +205,196, 40,136,137,132,255, 87,195,160, 86,171, 43,189,247,225, 1, 68, 59,189, 62, 56,235, 58, 83,224,153, 88,107,154,204,190, + 84,110,168, 8, 19, 19,147, 42, 13, 17,166,167,167,227,204,153, 51,104,220,184, 49, 90,181,106,133,196,196, 68,196,196,196,160, + 75,151, 63, 71,217,158, 62,125,138,176,176, 48,184,185, 85,108, 20,204,205,101,207,103,102,190,233,215,163, 71, 15,222,131, 7, + 15,192,178, 44,220,221,205, 96,102, 42, 1,161, 4,240,246,182, 3, 80,168,253, 91,183,110, 13,181, 58, 81, 39,151,227,124, 69, +156,161,161,161, 93, 3, 3, 3,235,104,181,218,200, 86,173, 90,113,222,188,121,131,190,125,251,226,208,161, 67, 0,128, 57,115, +230, 96,206,156, 57, 31,252, 39, 63, 63, 95, 89, 30,159,103, 3,175,153,117,116,150,173,132, 34,151,218,102, 54,190,168,227,222, + 22, 0,240, 69,183,145,168, 83,183, 38,114,211,159,213, 86, 42,222,245,226,113,178, 44,159,109, 76, 12, 23,117,173, 63, 66,153, +122, 35, 10,128, 33,129,123, 89, 69,212,161,148, 56,238,208,195, 39, 79, 95, 24,215,165,219,151, 92,173, 94,167,171, 95,139,107, +113,228,196,185,212,196,247,113, 63, 33,238,226,139,146,199,164, 98,129,165,207,205,205,133, 68, 34, 65, 76, 76,140,170,123,247, +238, 2,133, 66,129, 55,111,222,148, 8, 44, 59, 27, 43,159,102, 13,235,123, 45, 91,255,235, 37,137, 64, 32,232,216, 58,200, 59, + 60,234,125, 2,203,146,119,229,242,178,236,131, 55,175, 94,119,181,115,172, 11,217,205, 7, 16, 55,239, 2,149,138,130, 82,205, + 64,165, 3,116, 52, 15,230,126,193, 16,185,122,131, 5,240,234,249, 83,232, 88,246,174,177, 89, 54,194, 8, 35,254, 53, 2,203, +198,198,198, 46, 32, 32,200,109,231, 47,135,193,178, 44, 94,135,173, 65, 86,106, 4, 22,252,120,223,205,217,217,185, 85, 66, 66, +194, 77, 67,120, 18, 18, 18, 14, 29, 59,118,108,134,175,143, 79, 64,109,103,103, 60,125,247, 22, 60, 86, 15,158, 94, 15, 74,163, + 2, 71,175,134,115,125, 61, 40, 98,130,164,164, 92,108,191,120,245, 69, 66, 66,194,161, 10, 95, 14,132, 70,141,238,125, 48,232, +139,174, 96,181, 26, 92,110,225, 3,161,169, 9, 4, 22, 22,104,122,244, 6, 8, 33, 96,117, 90,188, 95,254, 45,184, 18, 19, 88, + 53,169, 60, 20, 80, 74, 74, 74, 65,221,186,117, 67, 34, 34, 34, 26,122,122,122, 98,241,226,197,136,143,143, 7,203,178, 72, 77, + 77, 85,166,165,165, 37,102,100,100,188, 35,132,156,144,201,100, 59, 13,137, 20,158,106,153,181,239,202, 31, 87,103, 6,250,251, +184,127,209,106, 17,206,158, 93,136,172,156, 92, 20,168,185,200, 83,104, 32, 87,176,112, 50,115, 71, 35, 95, 95,164,101,170, 17, +245, 50, 52, 33,157,103,181,163, 42,214, 43,138,162,240,244,233, 83,184, 74, 77, 17,121,251, 38,108,196, 92,248, 73, 29, 32,109, +214, 28, 49, 49, 49,134,137, 96, 61, 56,165,103, 11, 90, 88, 88, 32, 39, 39,231, 3, 33, 39, 22,139, 33,149, 74,145,155,155,139, +163, 71,143,130, 53,236,165,168, 85,171,213,240,242,242,194,227,199,143,113,245,234, 85,180,109,219, 22,173, 90,181,194,179,103, +207,112,249,242,101,132,133,133,129, 16, 2,107,107,235, 98,223,159,114, 35,218, 63,122,244,244,136,137, 9,153, 59, 98,196,132, +122, 67,134, 12,193,177, 99, 7, 49,114,132,103,145, 99,187, 0, 95,118,247,196,146,165,143, 17, 28,220, 26,182, 54, 60, 92,185, +250, 50,150,195, 49,255,213,128,124,252,249,231,159,127,230, 40, 20, 10,228,231,231,195,196,196, 4, 25, 25,133,225,168,202,177, + 96,149, 27, 88,237,121,232,171, 53,217,121,108, 22,155, 31,214, 43, 83, 23,214,160,109,199,120,124,209,109, 4,174,156,221,131, +107,151,174,194,138,243,238, 45, 36,121, 23,210,223,166,231, 38,201,221,183,121, 7,142,166, 19,228,151,182, 77,233, 97, 73, 59, + 58, 50, 71,230,108,201,201,174, 32,157, 44, 33,132,100,134,239, 63,125,130,197,151, 77,155, 4,215,173, 95,211,145,159,149,158, +202, 30, 61,117,225,133,230,237,177, 51,197,194,202,128, 85, 17,150,108,216,176,225,123, 0, 96, 24,102,239,250,245,235, 71,207, +156, 57,211, 86, 38,147,149, 8,172,212,244,204,107, 77,187, 78,214,103,100,231,168,119,175,159,213, 87, 36, 20,240,231,175,216, +125, 67, 75,227, 65,185,141, 11,135, 51,108,238,214,223,210,142, 29,217, 67,219, 8,121,184, 59,103, 33,162,175, 94,135,134,226, +161,227,229,135, 80,107,244,200, 77,203,192,245, 81, 19, 97,225, 96,137,243,233, 81,250,156,188,220, 97,198,102,217, 8, 35,140, +248,255, 0,131,166,212,165,167,167,167,222,186,245, 16, 55,206, 46,195,205,179,203,240, 50,236, 41,100,137,106, 36,166, 40, 97, +102,102,118,191, 2,203, 87,251,143, 95, 10, 74,165,178,247,250, 13, 27,146,197, 18, 9, 90,182,107, 7, 7, 91, 59,136,121, 92, +208, 58, 6, 52,225, 34, 63,205, 2, 81,207, 21, 88,126,226,108,170, 66,169,236,253,241,203,225, 99,206, 82,251, 1, 66, 32, 50, + 51, 5,223,196, 4,194,210, 86, 43, 66,192, 51, 53, 3,207,212, 12, 52,143, 95,105, 58, 1,160,160,160,160,207,216,177, 99,179, +242,242,242, 48,104,208, 32, 60,120,240, 32,236,226,197,139,102, 87,175, 94, 21, 61,127,254,188,174, 76, 38,235,144,152,152,184, +189, 60,113,245,151,123,191,113, 67,199,234, 52,125, 54,111,221,153,169,208,218,163,123,143,205, 48,227,103, 64,171,211, 3, 44, + 11, 39, 91, 19, 52,106,246, 45, 82, 85, 77,113,246,204,217, 44, 70,167,236,243,241,146, 57,165, 57, 89,150,101,173,173,173, 63, +176,202, 81, 20,133, 27, 55,110,160, 95,223, 62,232,216,171, 39,108,107,187,194,174,125, 23,116, 28, 61, 30,219,183,111, 7, 69, + 81,176,178,178,250,192,162, 81, 94,126, 22, 35, 39, 39, 7, 46, 46, 46,120,184,186, 75,189, 11,211,189, 2,106, 70,255, 28, 32, +126,178,182,222,181,107,215,176,118,237,218,252,200,200,200,117,238,238,238,223, 86,150,159,132,144,121, 63,254,248,163,226,253, +251,247, 48, 49, 49,129, 78,167,195,221,187,119,177,101,203, 22,172, 93,187, 22, 97, 97, 97,176,182,182, 70,221,186,117, 65, 81, + 20,226,226,226, 20,132,144,121, 21,212, 37, 38, 47,143,211,231,242,229, 19, 25,221,187,183,196,238,221,155,224,224,208, 20, 92, +142, 3, 56, 92, 91, 72, 76,188,176,107,231, 74,116,237, 18,136, 87, 17, 79, 50,243,243, 57,125,110,220,184,161, 51, 32,157,154, +231,207,159,227,248,241,227, 88,178,100,137,110,241,226,197,200,201,201, 41,177, 96, 21,175,146,190,104,209, 34, 0,128, 74,165, + 18,148,199, 57,122,214,243,196,153,203, 94, 44, 73, 73, 78,108,124,243,250,253,193,215, 46, 93, 69,108,212, 53, 92,187,116, 21, +183,175,221,155,147,146,156,216, 56,160,145, 7,175,247,232, 73, 51,247, 29, 63, 70,155,152, 57, 98,223,241, 99,244,160,201,211, +126, 8,234,216,118,158, 1,101,196, 2, 96,243, 83, 83,190,251,113,205,207,249, 58,141,146, 90,253,211,102,153, 34, 45,105, 30, +138,167, 86,150, 99,189, 42,205, 25, 19, 19,179,253,237,219,183,210,183,111,223, 74,223,191,127, 63, 47, 49, 49,177,229,242,229, +203,211,138, 4, 87,161,192,122,121,234,254,171,219,123,126,180,179,177, 20, 53,109, 88,207,115,221,246,163, 55,226,226, 83,126, + 43,142,129, 85, 86, 58,239,223,191,159,165,210,234,198,126, 59,107, 17,155,157,173,134,231,212, 57,208, 9, 76,160,210, 1, 26, +134,134, 6, 28,132, 45, 91, 7, 83,107, 83,220,101,179, 88, 21, 77,141,137,254,200,201,191,178,250, 89, 29, 24, 57,141,156, 70, +206,207,147,243, 95,105,193,114,114,114,106,217,227,203,246,104,221,109, 62, 88,150, 69, 68,232, 42,100,165,189,134,147,131, 0, + 49,113,185, 77, 0,220, 52,244,130, 73, 73, 73,113,142,142,142,141,151,109,216,120,188, 99,112, 35,111,119, 39, 71,129,133, 75, + 45, 72,236,236,144,158,158,134, 7, 33,145,218,173,151,175,189, 80, 40,149, 6, 45,149,195, 48, 12,203, 48, 12,120, 60, 30, 88, +154,134,207,148, 57, 32, 20, 5,138,203, 41,177,236,128, 16,152, 5, 54, 3,225,114,161, 53,208,103, 72, 38,147, 37, 56, 57, 57, +245,153, 60,121,242, 31,123,247,238,165, 90,183,110,237,127,250,244,105,230,239,100,118,202,243, 19,225,246, 13,122,181,218,248, +243,150,163, 1, 65,141,107,185,212,118, 17, 52,117, 54,135, 70,171, 71, 74,106, 6,110,222,123,169,138, 12,127,146,200,106, 52, +125, 82,195,203,143,226, 14, 0, 90,173, 54,206,217,217,217,126,241,226,197,208,233,116,208,233,116,208,235,245, 72, 79, 79,199, +253,251,247,209,160, 97, 48,188, 71,140, 66, 90, 90, 26, 54,110,220, 8,103,103,103,252,248,227,143,200,203,203,195,173, 91,183, +202,205, 87, 46, 13,221,224,193, 69,113,176, 56,208,173,235,214,237, 70,189,122,245,154, 55,214,166,242, 22,110, 44,180,108, 77, + 29, 51,152,119, 35,238,198, 17,129, 64,176, 61, 54, 54,182, 66,127, 33, 55, 55, 55,190, 82,169,244,103, 89,150,206,205,205,221, +160, 84, 42,135, 79,159, 62,221,113,197,138, 21,112,119,119, 71,122,122, 58, 36, 18, 9,220,221,221,145,151,151,135,216,216, 88, +189, 70,163,217,166,215,235,151,164,164,164,164, 85,196,253,232,209,163, 55, 1, 1, 1,141, 83, 83,182, 30,159, 48,190,163,187, + 86, 23,196, 55, 51,107, 1,150,213, 34, 59, 43, 1,192, 51,205,137,147, 87,163,179,179,233,222, 33, 33, 33, 81, 6,245, 56, 40, +106,252,250,245,235, 81,188, 84, 78, 98, 98, 98,137,233,175, 44, 11,150, 33, 88,119, 36, 65, 9,224,192,234,111,154,126,147,155, +254,204,221,138,243,238,109,227,250,204,198,117, 71, 18,148,139,191,177, 88,150,254,238,102,100,146,252,210,182,125,199,143,209, +195,122,245,209, 59,155, 68,205, 17,218,177, 71,219,118,175,212,218,198,250,251,251,215, 32, 36,179, 78,106,198,235,144,145,163, +199,245, 55,231, 41,206,251, 57,103,184, 81, 53, 3,132, 97, 97, 97,111, 13, 93,211,243,163,186, 31, 41,149, 74, 91,174, 89,179, +230, 18,128, 15,124,204, 82,211, 51,175, 53,233, 54,137,205,206,206,121,146, 26,126,234,121,101, 92, 33, 33, 33,187,131,130,130, +240,213,208,145, 59,198,140, 26, 67,215,159, 50, 19,137, 55,174, 1,122, 45,146,111,223,132,200, 68,143,179,233,239,244, 5, 52, + 53, 54, 36, 36,196, 24,197,221, 8, 35,140,248,119, 9,172,132,132,132,155,110,174,206,151, 35, 35, 91,118,168,233,108, 91,216, +235,125, 43, 67, 98,138,234,178,161,195,131, 31,139, 44, 66, 72,208, 57,157,110,192,101, 46,183, 27, 41, 10,197,192, 86, 99,177, +231,130,130,130,148,198,141, 27,151, 19,123,225,199, 50,247,234,245,250, 4, 67,184, 19, 19, 19,111, 72,165,210,161, 77,155, 54, + 93, 33,147,201,142,167,165,165,201,255,110,134,167, 60, 63, 17, 78, 90,183,174, 23,242,240,214, 87, 97, 33, 15,186,177, 44,235, + 11,128, 16,138,250,115,177,231,240,202, 23,123, 86, 40, 20,227,230,207,159,191,157,195,225,212, 68, 81,224,208,226, 44,211,104, + 52,244,238,221,187,133,106,181,154, 6, 64,120, 60,158,206,196,196, 68,121,247,238, 93,157, 94,175,143,211,106,181,227,202,227, +221, 27,198,114, 63,222,231,227,227, 35,121,195, 65,126,241,239, 12, 5, 32,147,201, 86, 25,114,191,231,207,159,119,177,180,180, +236, 64, 8,233,203,178,172, 87, 94, 94,158,234,251,239,191,191,119,253,250,245,220,215,175, 95,119,106,209,162, 5,113,112,112, + 64,108,108, 44,155,159,159,127,148,162,168,121, 50,153, 44,198,208,252, 12, 11, 11,139, 33,132,248,201, 11,216,129,166, 38, 23, +187, 50, 44,252, 0,150, 16, 66,158,231,231,147,243,142,142,174,191, 93,185,114,196,224,169,112, 69,107, 11,246, 40,254, 29, 24, + 24,120,254,245,235,215, 93,138, 45, 88, 31,251, 96, 85, 9,226,252,211, 74,197,187, 62,196,164,224,196,186,159, 18,148, 0,176, +112,125,118, 14,128, 93, 83,122, 89, 49,175, 66,119,173,114, 50,139,154,245,211,137, 76,131,214,228, 11, 8, 8,112,165, 40,106, + 0,128,250,118,130,236,186,182,252, 28, 61, 33,108, 27, 66, 40, 27, 0,207,124,124,124,206, 2, 72,168, 78, 82,101, 50, 89, 36, +128, 90, 31,239, 79,125,121,234, 62,128,251, 85,225, 10, 9, 9,217,221,164, 73,147, 83,155,119,108,219, 71, 19,210,152,232,245, + 22,250,241,131,254, 92,236, 89,192, 31, 22, 98, 92,236,217, 8, 35,140,248, 55, 10, 44, 0,136,142, 73,232, 8, 0,238,238,238, +236,155, 55,111,192,178, 44,249, 59, 23, 46, 18, 80, 7, 97, 96, 16,209,242,240,226,197,139,128,255,100, 6,201,100,178, 3, 0, + 14,124, 74, 78,182,112,168,106,119,209, 86, 45, 36, 38, 38, 62, 7, 16,252,223,168, 36,225,225,225,242,225, 1,164,196,178,197, +165,161, 51,244,191, 29, 58,116,120,175,209,104,174, 2,136, 39,132, 88, 0,200,212,104, 52,151,210,210,210, 82, 28, 28, 28,130, +222,191,127,191,160,200, 18,185, 52, 57, 57, 57,164,154,117,137, 1,240,123,209,246, 73, 17, 26, 26,218, 85, 42,149,134, 89, 91, + 91,187, 41,149, 74,190, 82,169,228,149,214,254, 34,145, 40,205, 80, 46, 11, 83,178,151,199,201,178,182, 48, 37,127, 41,119, 43, + 39, 28, 83,200, 95,120, 90, 57,225, 88, 85,196,165,191,191,255,126,138,162,106,179, 44,107, 15,176,230, 44,139, 52,150,101,211, + 57, 28, 78, 98,120,120,120,226,231,210,208,220, 47, 20, 80,221,140, 77,174, 17, 70, 24, 97, 20, 88,229, 32, 42, 42,138, 24,179, +237,223,135,178, 44, 91,134,160, 40,194,253,189,162,237, 3, 20, 9,170,238,159,251,189,203,100,178, 79, 34,226, 71,207,122,158, + 8, 96, 90, 80, 25,243, 44, 22,110,204,204, 3, 48,179,205,151, 85,227,124,242,228, 73, 28,128, 56, 99, 13, 53,194, 8, 35,140, +248,188, 64, 25,179,192, 8, 35,140, 48,194, 8, 35,140, 48,226,211,130, 0, 40,115, 38, 64, 85, 86,202,174,206,108,130,202,248, +141,156, 70, 78, 35,167,145,211,200,105,228, 52,114,254,255,227,252,215,160,120,218,249,127, 98, 3,208,222,200,105,228, 52,114, + 26, 57,141,156, 70, 78, 35,167,145,243,223,182, 25,135, 8,141, 48,194, 8, 35,140, 48,194, 8, 35, 62, 49,202,117,114,119,117, +173,225, 67,233,153,102, 44, 75,209, 44,197,106, 73,174,226, 80,116,102,230, 7, 65, 0,107,214,172,105,193,165,208,157,176,172, +132, 16, 70,207,208,212,221,152,152,248,112, 67, 46,236,227,227,195, 3, 48,156,203,229, 54,215,106,181,142, 28, 14, 39, 73,169, + 84,222,225,114,185,123,195,195,195, 53,159, 83, 38, 53,111,222,124,208,209,163, 71, 45,186,117,235,166,210,104, 52, 58,129, 64, +192,249,253,247,223, 5, 35, 70,140,200,190,115,231, 78,181,102, 24,250,251,251,183, 93,189,122,117,157,182,109,219,162,121,243, +230,242, 46, 93,186,240,130,130,130,120, 51,103,206,140,125,242,228,201,181,170,112,217,219,219,251,112, 56,156, 95, 9, 33, 52, +203,178, 95, 21,205, 48,252,143,128, 16, 50, 8, 64, 63, 0,142, 0,146, 1, 28,102, 89,246, 64, 53,185, 58,161,208,201,221,183, +104,215, 51, 0,103, 88,150,189,248, 55,210,215, 9, 64,119,154,166,253, 1, 64,175,215, 63,249, 84,156, 92, 46,215, 15, 0,180, + 90,237,211, 79,197, 73, 8,241, 43,178, 36, 87,139, 51, 48, 48,240,123, 62,159, 63, 6, 0,212,106,245,110, 19, 19,147,229,101, +157,119,243,230, 77,117,121,161, 79,124,234, 16, 54,124,150, 87,225,247, 85, 17, 0,128, 74,127,199, 86,115, 22,241,118,111,182, + 44, 94,140,123, 85,237,201, 51, 82,169,244,235, 46, 93,186,204,190,120,241,226, 15, 9, 9, 9, 59, 96,132, 17, 70, 24,241,185, + 10, 44, 87,215, 26, 62,125,123,246,254,113,252,184, 9,132,166, 41,188,138,136,224, 76,156,242, 77, 7,111,111,111, 39,137, 82, +233,205, 2,140, 66, 36,122, 65,211, 84,226,214,205, 63,155,122,122,120,232,245,122, 6,219,182,111,237,236,234, 90, 99,110,101, + 34,203,206,206,174,142,163,163,227,134, 41, 83,166,216,117,232,208,129,178,183,183, 71, 66, 66,130,217,137, 19, 39,234,254,242, +203, 47,221,236,236,236,166,165,166,166,198, 86,231,134, 28, 29, 29, 91,216, 89,160,131,137,144,109,135, 92,130,124, 61,254, 72, + 85,225,114, 82, 82,210,237,234,102,146, 90,173,158, 92, 80, 80, 16,236,237,237,205,110,219,182,141,140, 25, 51,134, 37,132, 16, +133, 66,177, 23,213, 12,225, 32, 22,139, 55,183,109,219,214,189, 89,179,102, 49,247,238,221,235,194,178,236,249,190,125,251,186, +138,197,226, 40, 0, 30, 85,225,162,105,122, 79,120,120,184,159, 82,169, 68, 96, 96,224, 47, 0, 2,255, 67,226,234, 23,107,107, +107,102,235,214,173,219, 27, 52,104,224, 38,151,203, 11, 70,143, 30,221,145, 16,210,150,101,217, 81, 85,224,145, 0,216,104,110, +110,206, 91,182,108,217,131,214,173, 91,199,241,249,124,113,100,100, 36, 59,101,202,148,145,132,144,190, 0,166,176, 44, 43,175, + 42,167, 84, 42, 53, 91,185,114,229,235,128,128,128,123,124, 62,159,247,246,237, 91, 76,157, 58,117,252,223,225,244,242,242, 18, +175, 92,185,242,169,183,183,119,134, 80, 40,228,189,127,255, 30,211,167, 79, 31, 77,211,116, 95,134, 97,170,197,105,103,103, 39, + 89,190,124,249,243,160,160,160,108,161, 80,200,139,142,142,102,191,249,230,155, 49, 85, 73,103,171, 86,173, 6, 82, 20,181,248, +214,173, 91, 0,128, 38, 77,154,124,175, 86,171,231,127,124, 30,203,178,104,222,188,185,178, 85,171, 86, 99,110,222,188, 89,102, + 88,148,125,130, 89,131, 0, 96,230,247, 69,191,139,246,151,245,123,152,106, 85,149,235,188, 79, 29,194, 2,192,196,111,183, 12, + 45,252, 44,220,191,181, 40,116,239,230, 58,132,173,138,104,115,114,114, 26,215,168, 81,163,239, 30, 62,124,184, 47, 40, 40,104, +234,142, 29, 59,184,221,186,117, 91, 38,149, 74,221, 58,117,234,212,247,254,253,251,171, 35, 34, 34, 54, 27,155,120, 35,140, 48, +226,179, 18, 88,148,158,105, 54,126,220, 4, 50, 96,208,192,228,164,148, 84,198,196,212,124,208,225, 35, 71,196, 30, 30, 30,148, +242,231,159,161, 75, 75,131,126,198,140,166, 55,111,222,212, 78,154, 54, 67,161, 82, 22,236,113,180,183, 19, 31, 58,112,208,225, +248,177,163,205, 0,132, 87,100,185,114,116,116,220,112,236,216, 49,135, 58,117,234, 64,173, 86, 35, 35, 35, 3, 90,173, 22,189, +122,245,162, 27, 55,110,236, 48,114,228,200, 13, 62, 62, 62,189,171, 98,201,178,181,181,181,119,175,201, 61,187,112, 90,103,143, +182,173, 2, 37, 14, 78,181,129, 4, 6,137,177,111, 26, 94,125, 24, 58,165,185,155,115,100, 84,174,186, 91, 90, 90, 90, 74, 85, + 51, 41, 35, 35, 99,214,184,113,227,142,249,250,250,218, 10, 4, 2, 56, 56, 56,144,209,163, 71,167, 38, 37, 37, 45,254, 27, 98, +165, 48,175, 41, 74, 95,250,211,208, 5,169, 63,130,179,185,185, 57,204,205,205, 1,192,233,239, 84,136,126,253,250,209,113,113, +113, 99, 24,134,241, 46,189, 63, 41, 41,201,213,214,214, 54,229,237,219,119,126, 10,181, 38,104,194,164,185,139, 6,244,109,111, +113,239,222, 61,116,237,218,149, 34,132, 12,170,130, 37,107, 99,112,112,112,212,138, 21, 43,120, 81, 49,111,235, 61,120,252, 4, + 18, 33, 79,239,236,236, 36,120,246,236, 25,127,229,202,149, 41, 63,252,240,195, 70, 0, 35,171,144,244,141,253,250,245,203,154, + 54,109, 90, 65,100,244,219,218, 15,195,158,179, 38, 2,158,214,222,222,150,190,119,239, 30,119,243,230,205,100,222,188,121, 85, +230, 28, 61,122,116,210,180,105,211, 56,105, 25,217,117,147, 83,210, 89, 62,143,214, 88, 88, 88,112,174, 92,185, 66,237,217,179, + 71, 51,101,202,148, 42,115,118,237,218, 53,101,206,156, 57,220,136,168, 24,215, 7,161,207, 97, 34,224,106, 29, 28,236,232, 7, + 15, 30,208, 27, 55,110,212, 45, 92,184,208, 32, 78,150,101,183,173, 89,179, 6,167, 78,157, 2, 0, 28, 56,112, 0,174,174,174, + 31, 12,251, 43,148, 42, 80, 4,120,251,246,173,120,252,248,241,219, 80, 70,220,185,240, 89, 94,216, 7, 96,216,176, 97,201,134, + 89,161, 86, 85,173, 82,109,247,102,139,133,213,132, 9, 19,202,139,205, 53,212,167, 10, 34,171, 89,179,102,179, 15, 29, 58,100, +115,228,200,145,111, 79,156, 56, 81,220,105, 17,111,218,180,233,235, 30, 61,122, 96,212,168, 81,179, 1, 24, 5,150, 17, 70, 24, +241,121, 9, 44,150,165,104,154,166,144,154,146,174,253,162,125,135,145,155,182,108, 17,240,249,124,168,213,106,200,175, 93, 3, +171, 84,194, 66, 44, 70,151, 46, 93,184,245,235,215, 55, 27, 55,122,244,232,148,100,217,118,154,166, 28, 88,150,162, 43,185,230, +240, 41, 83,166,216,213,169, 83,231,131,157,122,189, 30,153,153,153, 48, 53, 53, 69,255,254,253,109,246,239,223, 63, 28,128, 65, +230,126,123,123,123, 23, 15, 87,251,187, 71,119,205,112,180,179,160,128,180,163,192,251, 55,192,239, 66,184,219,213,132,123,155, +214,146, 30,141, 26, 4,244, 95,189, 59,204,222,222,190, 89, 74, 74,202,187,170,100,210,219,183,111,239, 72,165,210,209, 10,133, +226, 20, 0,234,238,221,187,108, 92, 92,220,184,228,228,228,247,213,205,120,134, 97,144,157,157, 13,134, 97,232,162,223,197,159, +255, 88,101,232,215,175, 31, 29, 31, 31, 63,206,219,219,187,238,206,157, 59,145,154,154, 10,145, 72, 4,189, 94,143,166, 77,155, +214,108,215,174, 93,116, 90, 70,182,165, 86,167, 85, 39, 37, 68, 55, 58,184,227, 93,129,159,187,251,189,195,135, 15, 55,176,182, +182,238,111,136, 53,143, 16,210,201,212,212,148,243,227,143, 63, 82,166, 22, 14, 93, 27, 5, 75,185,207,195, 95,191,227, 9, 56, + 76, 78, 78,110,198,211,167, 79, 35, 22, 46, 92,216,226,244,233,211,201,132,144, 78,134, 12,153, 17, 66, 58, 57, 56, 56,152, 78, +157, 58, 85, 46, 50,181,105,222, 48,216,142,243, 34,252, 77, 34,151, 71,105,155, 53,107,214,230,254,253,251,123,102,204,152,225, +123,238,220,185,156,170,112,214,173, 91, 87, 52,109,218, 52,218,220,194,166,189,173,131,148,182,181,178,112, 3,128,152,152,152, +253, 41, 41, 41, 81, 19, 38, 76,104,120,238,220,185,188,170,112,218,216,216,136,231,204,153,195,169,237,234,217,199,213,221,147, +186,122,227,225,115, 62,159,210, 42, 20,138,204, 87,175, 94,189,153, 61,123,118,208,185,115,231,114, 13,225, 44, 40, 40, 48,117, +114,114,130,189,189, 61, 24,133, 2, 57, 57, 57, 56,126,252, 56,242,242,242,160,215,235, 33, 18,137,240,195,186,237,136,126,241, + 0,183,111,223,134, 66,161, 48,253, 20,245,196,103, 85, 4,194,199, 25, 46,174,182, 50,147,134, 86, 32,172, 80, 74,120, 13,197, +118,111,182,162,225,194, 82,150,171,132, 35, 71,142,216,185,185,185,161,117,235,214, 0,128,145, 35, 71,162,125,251,246, 56,117, +234, 20, 46, 95,190, 28,215,164, 73,147, 55,241,241,241,107, 19, 19, 19,183, 27,155,122, 35,140, 48,226,191,141, 50,157,220, 89, + 66,228, 47, 95,189,226,154, 88, 88, 12,221,180,101,139,128,203,229,226,253,251,247, 8, 15, 15, 71,193, 31,127, 64,113,239, 30, + 82, 82, 82,144,159,159, 15, 91, 91, 91, 44, 95,181, 74,194, 19, 73, 70, 70,189,121, 67,179, 20,171, 45,213,195,254,203, 84, 77, + 62,159,223,188, 75,151, 46,229, 58,215, 39, 39, 39,163, 67,135, 14, 28, 14,135,211,188,156, 94,251,213,143, 94, 90, 68,106, 75, +206, 28,217, 49,213,209,142,243, 28,120, 51, 29,200, 11, 3, 88, 21,160, 83, 3,113, 17,192,201,117,112,202,136, 34, 7, 38,247, +119,112, 18,241,206,144,143,204, 68,149, 77, 41,117,118,118,118,117,117,117,221,213,183,111, 95, 10, 0,154, 55,111, 78, 92, 93, + 93,119, 56, 59, 59,187, 86, 96, 93,168,144, 83,169, 84, 62,200,202,202, 66,183,110,221,172,155, 54,109,122,181, 91,183,110,214, +197,251,171,203, 89, 4,235,182,109,219,102,184,186,186, 30,112,113,113, 17, 24, 96, 5, 41,225,140,139,139, 27,227,229,229, 85, +119,231,206,157, 52, 77,211,216,185,115, 39, 14, 29, 58,132, 59,119,238, 32, 53, 53, 85, 60,125,250,116,139,179, 87, 31, 92,188, +123,231,209,233, 53,243,191,181,238,213,174,181,171,101, 78, 90,174,149,149, 85, 23, 0, 14, 6,166,179,251,252,249,243,111, 62, +121, 21, 99, 71,113,184, 60, 1,143, 43,178,181,177,168,229, 96,107, 89,215,201,218,178,174, 41,159,107,145,155,155, 27,123,242, +228, 73, 29, 74, 5, 33,173,140,115,245,234,213,175, 34, 98,226,173, 41,154,195,229,210, 92,190,133,185,137,245,151,221, 58,180, + 1, 0, 17, 77, 4,185,185,185,241,251,247,239,175, 18,231,138, 21, 43, 66,147,210,178,236,184, 60, 62, 71,192,227, 10,139, 15, + 88,154,153,216, 75, 4, 2, 81, 65, 65,193,251, 93,187,118,169,171,200,249,244,101,212,123, 27, 66,129,166, 64,184,150,150,166, +118,182, 22,166, 14,118,102, 38, 14, 66, 10,194,220,220,220,119, 7, 14, 28,208, 24,202,153,154,154,138,136,136, 8,212,104,216, + 16, 87,175, 94, 69,205,154, 53,209,191,127,127, 12, 28, 56, 16, 34,145, 8,109,155, 52,192,220,185,115, 17, 29, 29, 93,110,185, + 23,251, 67, 85, 4,169, 84,122,163, 42,117, 9, 40, 28, 22,172, 72, 92,125,204, 89,214,121, 31,115, 54,107,214,108,246,241,227, +199,109,214,175, 95,239,255,205, 55,223,196, 28, 63,126, 28,190,190,190,120,245,234, 21,156,156,156,112,240,224, 65, 76,154, 52, + 41,102,209,162, 69,254, 87,174, 92,145, 74,165,210, 89,213,124,142,170, 4, 35,167,145,211,200,105,132, 65, 22, 44, 45,131, 51, +147,167, 78,239,126,236,248,113, 49,159,207,199,219,183,111,145,154,154,138,115,103,206,232,207, 55,104, 80, 64,211, 52,219,251, +216, 49,211,254, 3, 7, 18, 46,151,139,186,117,235,162, 75,151, 46,162,209, 99, 39,164,114,228,138, 67,149, 20,138,157,173,173, + 45,190,251,238, 59, 44, 95,254,161, 63,238,240,225,195,177, 97,195, 6,152,154,154,130, 16, 98,103,200, 13, 56, 58, 58,246, 27, + 57,179,141,179, 89, 45,179, 20, 54,108, 31,151,208, 98, 43,208, 98,128,226, 1, 34, 17,160, 85, 3,106, 10,170,199,119, 50,217, + 54,155,115, 59, 6,228, 57, 37,171, 15,246, 3,112,216,208, 76,178,177,177, 89,112,244,232, 81,219,153, 51,103,178,121,121,121, + 36, 37, 37,133,157, 61,123,182,237,252,249,243, 23, 0, 24, 86,157,140,151,201,100, 75, 71,142, 28,217,113,247,238,221,246,125, +250,244, 49, 47,234,129,167,200,100,178,165,127,167, 64,185, 92, 46,125,237,218, 53,171,109,219,182, 13, 92,182,108, 89,189,118, +237,218, 57,100,103,103,191, 75, 74, 74,234, 91,153,197,141, 97, 24,239,157, 59,119,130,166, 11,141,144, 20, 69,129,207,231,131, +207,231,195,220,220, 60, 59, 38, 38, 70,239, 98, 47,226,203, 83,146,114, 44, 57,150, 92,226,232, 96,109,225,224,216, 90, 46,151, +223, 1, 32, 49, 48,137,190,173, 91,183, 14,191,118,255,133,126,194,240,182,117,197, 60,138,107, 42, 18,210, 34, 62,151, 16,150, +213,107,180,234, 38,155,247, 93,223, 93,187,118,237, 96, 0, 6, 13, 17, 19, 66,252,124,125,125,111,221, 15,139,196,211,151, 49, + 9,182, 86, 98,235, 78,109,155,121,150, 92,176, 81,227,129,165, 78, 55,104,105, 27, 14,135,227,215,160, 65,131,228,184,164, 76, +216,217,152,127, 32,164, 45,109,236,218, 3,128, 60, 39,103,179,163,163,163, 71,209,122,144, 6,165, 51, 40, 40, 40,237, 78, 72, + 36, 28,108,173,172,138,118,155,149, 62, 39, 61, 41,105,155,139,139,139, 7, 33,196,217, 16,206,147, 39, 79, 34, 52, 52, 20, 75, +235,213,195, 76, 23, 23,216,218,218,226,143, 63,254, 0,203,178, 48, 49, 49, 65,118,118, 54, 14, 31, 62,140,118,237,218,253,237, +198, 66, 42,149,222,144,201,100,173, 75, 28,211, 63, 1,138, 57, 13,181,142,221,185,115,231,248,145, 35, 71,190,118,115,115,195, +136, 17, 35, 92,247,236,217, 19,227,233,233,233,218,188,121,115,220,185,115, 7,179,102,205,138, 89,180,104,145,235,240,225,195, +177,119,239, 94, 36, 38, 38,254,102,108,230,141, 48,194,136,207, 70, 96,197,197,197,101,123,123,123, 59,185,185,185, 81,106,181, + 26, 57, 57, 57,184,116,225,130,254,224,225,195,231,212,106,245, 20,138,162,120,123,127,253,117,155,131,163, 99,155,222,125,250, + 16,173, 86,139,246,237,219,243,175, 93,187,102,253, 44, 46, 46,175,162, 11,210, 52, 93, 98, 61,250,250,235,175,177,126,253,122, + 0,192, 87, 95,125,245,167,192,211,106, 13,246, 69, 18,153, 48, 93, 90,181,175,111, 22, 47,249,217, 76,211, 84,155,239, 18,109, +250, 64,146, 47, 10, 2,197,231, 64, 36, 4,163, 22,234,162,178,219,135, 68,191,173,237, 35, 82,166,214,110,230, 25,140, 67, 15, + 78,116,169,138,192, 18,137, 68,141,196, 98, 49, 34, 34, 34, 50, 3, 3, 3,179,205,204,204,204,221,221,221,109, 68, 34, 81,163, +234,102,124, 74, 74,202, 91, 39, 39,167,150,189,123,247,158, 68, 81, 84,123,134, 97,174,102,100,100,108, 74, 73, 73,121,107,200, +255,157,156,156, 38,176, 44,187, 16,192,209,226,125,106,181, 26, 20, 69,129,101, 89,116,239,222, 29, 43, 86,172,240,185,122,245, + 42,110,221,186,101, 53,120,240,224, 7, 82,169, 52,155, 16, 50, 42, 49, 49,177, 92, 43, 89, 70, 70, 6,182,109,219, 6, 14,135, + 3, 11, 11, 11,152,154,154, 66, 40, 20,162,117,235,214, 41,107,214,172,113, 63,112,224,128, 54, 59, 53,149,136,242,114, 84,196, +218, 90, 8,105,205, 78, 67,251, 15,120, 0,224,136,161,247,110, 98, 98, 34,226, 67,149, 71,233,149,212,234, 69,155, 57, 98, 30, +143, 8,121, 28, 8,152, 2,122,238,138,101,172,144,176,220,226, 33, 83, 67, 33, 20, 10,249, 18, 62,171,226, 10, 40,173,152, 98, + 63,201, 56, 43,135,195, 17, 8,184, 80,148,119,156, 71, 17,154, 16, 34, 2,160,170, 74, 58, 77,248,250,114,207, 23, 82,160, 41, +138, 18,150,199,217,175, 30, 97,143, 76, 42, 22, 56, 37, 70, 53,232,116, 58, 52,106,212, 8, 7, 79, 93,199,249, 63,238, 33,253, +253, 51, 76,153, 48, 18,238,238,238,184,116,233, 82,133,105, 42,246,193, 50,160, 83, 80, 40,136,190, 55,175,252,228, 34,191,171, +202,134, 6, 75,115,250,172,138,168,112,118,162,179,179,243, 88,127,127,255, 97, 39, 78,156, 64,155, 54,109,208,173, 91, 55,120, +122,122,186, 14, 30, 60, 24, 0,208,178,101, 75, 44, 88,176,192,117,224,192,129, 56,121,242, 36,206,159, 63,143,160,160,160,169, + 82,169, 52, 85, 38,147,109, 49, 54,247, 70, 24, 97,196, 63, 46,176, 0, 64,160,209,120,170,182,109,131,252,234, 85,240, 47, 95, +198, 89, 63,191,124,157, 78, 55, 67, 38,147,197, 3,128,189,189,253,180,195, 71,142,220,109,255,199, 31,102,234,136, 8, 56, 63, +127, 14,142,135,135,191,161, 23, 46,182, 94,169,213,106, 0,192,175,191,254,138,156,156, 28,228,228,228, 64,167, 51,120, 45, 97, +112,249,104,110,103, 93, 19, 73,136, 2,195,161, 76,222,121, 22, 52, 54, 81,154,202,156,226,236,229, 57, 60, 15, 68, 36,212,147, + 40,178, 85,141, 9,173,134, 50,189, 0,206,205,221,193, 65,217,195,143,229,129,162,168,226,151, 99,102,104,104,104,247,230,205, +155,159, 1, 96, 83,188,191,186, 72, 76, 76,124, 3, 96, 74,117,254, 75,211,244,194,219,183,111,219, 29, 62,124,120,210, 79, 63, +253,196,150, 22, 88,197,223, 57, 28, 14, 88,150,133, 68, 34, 1,135,195,177, 63,121,242,164,253,151, 95,126,185, 25, 64,185,229, + 36, 22,139, 97,103,103, 7, 62,159, 15, 83, 83, 83,200,115,179, 36, 91,127,156,223, 90,108,105,111, 53,101,234, 12,106,236,216, +177,225, 27, 54,108,168,225,224,233,233,253,226,197,139,183,189, 6, 12,188,119,234,212, 41, 69, 21, 28,220,159, 69, 68, 68,208, +238,110, 46, 60, 70,171, 96, 36, 60, 64,248,244, 39,134,111,234, 0, 33, 77,131, 67,192,138,196, 18,187,248,164,164, 56, 0, 73, +134, 16,178, 44,251,244,221,187,119,196, 89,106,207,201,147, 43,179, 37, 28,134, 31,251,248,209,171, 58, 13, 27,121, 3,128,242, +241,189, 19, 2,207,122,166,178,220, 60,145,147,147, 83,140, 33,156, 58,157,238,105, 66, 66, 2,177,178,178,226, 70, 69,189,249, +205,218,204, 84,106,101,111,223, 26, 0,212,153,105,183,136, 66, 41,227,114,185, 78,105, 25, 25, 73, 58,157, 46,206,208,116,198, +198,198, 18,103,169, 61,231,204,185,243, 7, 29, 36, 98, 71, 11,145,192, 92, 72,129, 8, 89, 38,135,175,211, 37,139,196, 18,105, + 66, 98, 98, 10,203,178,229,250, 9,110,101, 38, 13, 45,252,246,203,254,143,172, 59,184, 30, 18, 11,115, 90, 15,174, 86,142, 7, +199, 15,163,247,228,111, 12,122,158, 86, 47, 25,126, 96,245,146,225,229,134,103,248, 72, 16, 65, 54,238,111,182, 60,219,189,111, +252,133, 83, 86,177,131,123,167, 78,157,230,237,216,177, 67, 92,252,251,213,171, 87,104,222,188,240, 81, 94,188,120, 49, 58,118, +236, 8, 63, 63, 63,188,122,245, 10,181,106,213,194,241,227,199, 65,211, 52,119,236,216,177,179, 1, 24, 5,150, 17, 70, 24,241, + 95, 69,185, 10,129, 97, 89, 70,151,153, 9, 86, 85,216,145,230,241,120, 44,203,178, 37,141, 27,151,203, 21,155,155,155, 19,174, +179, 51,136,160,200,213,135, 16,253, 39,176, 26, 64,175, 55,156, 70,175, 7, 13,162, 1,139, 63, 67,252,200,133, 4, 63,216,180, +195, 20,201, 55, 72,230,155,151,126,195,129,213, 49,208,163,106,214, 17, 66, 8, 43,151,203,161, 82,169, 44,221,220,220,206, 41, +149, 74,203,162, 23, 38,251, 79, 21,156, 78,167,139,225,112, 56, 24, 62,124, 56, 80,184,228, 17,212,106, 53,158, 60,121, 2,149, + 74, 5,181, 90,141,187,119,239, 34, 39, 39, 7,106,181, 26, 87,174, 92, 65,173, 90,181,192,225,112, 28, 43,226,101, 24, 6,182, +182,182,176,183,183,135, 74,158, 43, 57,182, 99, 67,215, 85,139,190,179, 25,228,198, 82,191,108, 92,203,184,185,185,101,213,175, + 95,223, 74, 36, 18,101, 5, 6, 6,102,159, 60,121,242,116, 85, 66, 52, 0, 56, 51,103,206, 28,223,224,224, 96, 23, 11, 19,137, + 70,192,167, 33,208,201, 89,129, 42,131,229, 40,210,217, 90,206, 46, 26, 72, 76, 26,245,233,211, 71, 15,224,140,161,156, 83,166, + 76,169,233,237,237,109, 99, 97, 38,201,229, 80, 72,228,233,245,137, 89, 33,247,174, 0, 0,207,198, 78, 1,137, 73,163,193,131, + 7,107,171,194, 57, 99,198, 12, 55, 39, 39, 39,107,138, 34,217, 58,141,230,125, 73,125, 80, 42, 82,104,129, 80, 14,129,176,197, +168, 81,163,116, 85, 76,167,171,175,175,175,181,165,185, 89, 54,151, 34,113, 60,189, 46, 94,196,234, 19,248, 90, 77,154,192,206, + 62, 31, 18,147,102,131, 6, 13, 42, 55,157,197,214,171,143, 45, 67, 28, 14, 7,137,137,137, 40,144, 61, 3, 47, 49, 2,126, 38, + 92, 52,118,176,129, 68, 34,169, 92, 96,141,123, 69,194, 99, 89, 18, 30,203, 18,140,123, 69,202,250, 93,134,200,170,176,238, 87, +232,215,181,221,251, 70,117, 56,207,159, 63,191,178, 71,143, 30,218, 1, 3, 6,224,202,149, 43, 32,132,224,206,157, 59, 72, 76, + 76, 68,199,142, 29,193,178, 44,158, 60,121, 82, 34,190,250,246,237,139,110,221,186, 21, 92,188,120,241, 7, 99, 83,111,132, 17, + 70,124, 54, 2, 75, 43, 16,188,100, 38, 79,134,197,233,211,224, 70, 69,161,111,239,222,102, 2,129, 96,163,163,163, 99,160, 84, + 42,109, 38, 18,137, 54,207,152, 62,221,212,102,249,114, 72,111,221, 66,242,213,171,208,114,185,143,171,114,113,133, 66, 81, 44, + 96,160, 42, 18,114, 22, 22, 22, 85, 18, 88,140, 14,247,147,210,162,192,135, 11, 24,176,249, 23,115, 91, 62, 28, 20, 51,223,238, +108,110, 29,247, 55,114,158,251, 18,219,198,118, 27,107, 53,127, 40, 39,156,124,190,133, 16,178, 68, 25,244, 96,238, 87, 37,157, + 74,165, 50, 71, 46,151,163,110,221,186,214,161,161,161,110,238,238,238, 86, 69,130,230,209,223,201,124,169, 84,218, 36, 32, 32, +224, 72, 96, 96,224,219,128,128,128, 35, 82,169,180, 73, 21,254,254,203,227,199,143, 65,211, 52,198,142, 29,139,188,188, 60,104, + 52, 26,100,100,100, 32, 46, 46, 14,106,181, 26, 9, 9, 9,120,253,250, 53,212,106, 53,222,189,123, 87,146,199, 21, 65,171,213, +194,212,212, 20,217, 25,169,146, 67, 91,215,118, 93,182,104,158, 40, 39, 58, 20, 9,178, 20, 48,122,133,108,193,130, 5, 49,110, +110,110,119, 84, 42,149,151, 78,167,235,194,178,236,161, 42, 8, 85, 10,192, 19,119,119,247, 14,107,214,172,105,190, 96,197, 46, +129, 41,157,199,242, 77, 5, 12,223,148,207,242,189, 26, 99,244,194, 77,194,117,235, 86,223, 15, 9, 9,201, 49,112,102, 30, 5, +224, 73, 96, 96, 96,147,228,228,228,230,126,126,126,254, 14,117, 61,132, 2, 39,105, 58, 95, 90, 43,131, 85, 20, 92,165,106,214, +238,190,103,207,158,219,183,110,221, 74,169, 10,167,189,189,125,243,109,219,182, 5,212,172, 89,179,161,208,220, 92,148,159,157, +189, 67,149,157,185,139,107,227, 32,162,172,109,250, 29, 59,118,236,143,115,231,206,101, 84,133,211,211,211,179,217,242,229,203, +253, 2, 2, 2, 2, 29, 61, 60,133, 34, 39,231, 52,158, 83,173, 84,145,111,144,144,170,229,218,119,215,174, 93,215,239,222,189, +155,110,104,192, 81,138,162,192,229,114, 33,145, 72,112,243,230, 77, 12,234,221, 9, 14,118,102,240,240,244, 68,235,113,147,113, +238,220, 57,240,249,124,252, 93,107,235,199, 48, 68, 16, 85, 85,124, 85,198, 41,147,201,182,132,132,132,252,212,191,127,127,180, +111,223, 30, 79,159, 62,197,172, 89,179, 98,206,157, 59, 7, 0,120,250,244, 41,150, 45, 91, 22,115,255,254,125,140, 24, 49, 2, +205,155, 55,199,147, 39, 79,246, 25,131,143, 26, 97,132, 17,159,141,192,114,179,178, 50, 85, 42, 11, 18,110,221,186,165,161, 40, + 10, 98,177, 24,253, 6, 12,160,126,252,241,199, 22, 61,253,252,174, 13,110,210,228,194,225, 67,135, 2,252, 3, 2, 10,215,219, +161, 40,156, 58,117, 74,145,147,147,157, 81,179,102, 77, 11, 67, 47,158,150,150, 86,210,251, 86, 40, 20, 96, 89, 22,166,166,166, + 85, 18, 88,138,124,234,234,237,155,225, 89,172,254,235,184, 46,111,214,107, 86, 36,247, 12,206,102,244,156, 28,189, 22, 57, 10, + 22,121, 74,112, 30, 82, 86,193,195,221,123,105, 98,219, 7,191,126,248, 54, 44, 67,205,170,171, 52,251, 33, 43, 43,107,222,132, + 9, 19, 50,236,237,237,137,169,169, 41,236,237,237,169,209,163, 71,167,199,199,199, 47,169,110,198,251,248,248, 12,108,210,164, +201,153,176,176,176,190,135, 15, 31,118, 57,114,228, 72,223, 38, 77,154,156,241,241,241, 25,104, 32,197,225,149, 43, 87,202,249, +124, 62, 26, 55,110,140,188,188, 60,168,213,234, 74,183, 74, 5, 43,195, 64, 40, 20,226,200,174, 13, 29,150, 45,154, 39,202,140, +120,136,103,119,174,224,226, 91, 85,193,194, 21, 63, 61, 16, 10,133,213,186, 95,119, 59, 73,131, 6, 82,211, 87,223,140, 28, 32, +155, 51,123,182,249,243,231,207,197,211,191,153,198,202,210,178, 89, 97,215,117, 52,213,122, 1,245, 82,105, 67,122,116,107,139, + 31, 22,207,234, 0, 3,134, 78,125,236, 36, 13,234, 75, 77,195,191, 29, 59, 40,102,202,148, 41,226,149, 43, 87, 22, 52,111,222, + 60, 59, 39, 39, 71,100,110,239, 24, 32,176,179, 15,150,101,101, 75,154, 54,107,246,100,228,200,145,242,170,114, 46, 88,176, 64, +114,251,246,109, 65,167, 78,157,242,114,115,115, 37, 66, 19,147, 96,158,153, 69,203,180,156, 28,179,206,157, 59,135,245,239,223, + 95, 91, 29,206,215,175, 95, 11,154, 54,109,154,151,147,147, 35, 49,179,119,108, 36,180,115,104,145,152,153,101,218,184, 73,147, +176, 49, 99,198,168, 43,226,236,183,233, 79,113, 34, 22,139, 51,189,189,189, 49,127,254,124, 44, 94,188, 24,253,250,245, 67,236, +219, 88,180, 26, 49, 22,117,134,143,199,153,251, 15,145,152,152,136,185,115,231,194,221,221, 29, 20, 69, 37,125,202,198,163, 34, + 65, 84,158, 35,188, 79, 29,114,163, 34, 63,171,202, 68, 86,135, 14, 29, 70,244,232,209, 3,167, 78,157, 42,113,104, 31, 50,100, + 8, 0,192,223,223, 31, 51,102,204,112, 93,179,102, 77,204,186,117,235,208,164, 73, 19, 56, 59, 59,127,105,108,230,141, 48,194, +136,127, 2,101,199,193, 50, 19, 13,216,177,101,179,249,164,105, 51,228,222,222,222,150, 14, 14, 14, 32,132,160, 83,167, 78,164, +201,197,139,166, 92,169, 20,214, 13, 26,148, 44,104,120,251,214, 45, 92,187,118, 77,190,127,247, 47, 78, 35, 71,143,238, 14,148, +239, 51, 91,122, 88, 45, 35, 35, 3, 14, 14, 14, 37,179,213,100, 50, 25, 28, 28, 28,192,227,241, 64,211, 52,167,104,233,151, 10, +213,150,131,131,195,175, 43,150,189,156,147,224, 59,163, 78,176,152, 34, 23,228,201,208,179, 44,184, 68, 15, 40, 88,104,245,128, + 74,203, 34,168, 54,109,245,135, 26,150, 15, 95, 94,142,117,112,112,248,181, 42,153, 20, 19, 19,115,221,209,209,113, 92, 65, 65, +193, 81, 0,212,131, 7, 15,152,183,111,223, 78, 52,212, 33,189, 44,136, 68,162, 89, 71,143, 30,181, 90,178,100, 73,214,181,107, +215,114,218,182,109,107,190, 98,197, 10,171,129, 3, 7,206, 66, 25,193, 32,203,120, 17, 41,164, 82,233,190,164,164,164,137, 13, + 27, 54, 68,102,102, 38, 52, 26, 13, 66, 67, 67,225,238,238,142,144,144, 16,120,120,120,224,241,227,199,240,244,244,132, 94,175, +135, 82,169,132,222, 0,245, 42,139,127,111, 34, 86,101,153,201, 30, 94, 64,228,243, 80,156,143, 81, 21,172,222,125,232,124, 3, +255, 32,121,241, 12,195,170,192,211, 94, 82,207,201,206,250,242,138,197,223,219,189,187,126, 8,199,119,111, 98,174,159, 63, 95, + 95,100,134, 97,205, 6, 76, 29,168,209,194, 5, 4,130,150,205,154,162,187, 85,164,158, 87, 3, 41,127,188,172, 56,146,185,167, +189,164,158,212,214,250,210,234,229, 75, 76,163, 47,238,197,225,237,235,216,163,191, 30, 8, 80, 2,245,220,220,220,186,211, 52, +109, 15, 64,161,215,235,163, 97,224, 18, 52,101,113,254,113,246,108,160, 18,168,231,236,236,220,157,203,229,214, 0,160,210,106, +181,239, 63, 5,103,221,186,117,187, 19, 66,156, 0, 40,139,124,174,170,180, 84, 78,251,246,237, 87,239,218,181,107,186, 74,165, +178, 42,101,109, 37,167, 78,157,130, 70,163, 33, 60, 30,143,145, 72, 36,136,139,139, 99, 1, 36,177, 44, 59,254, 83, 53, 28,125, +250,244,193,131, 7, 15, 22, 3, 88, 88,209,121,153,153,153, 28, 43, 43, 43, 93,101,194,203, 80,206,135, 15, 31,174, 28, 51,102, +204,204,139, 23, 47, 38, 44, 90,180,200,127,248,240,225, 56,121,242, 36,106,214,172,137,215,175, 95, 99,250,244,233, 32,132,184, +174, 89,179,230,201,193,131, 7, 29,147,147,147,215, 26,155,121, 35,140, 48,226,179,177, 96, 17,134,112,221,235,214,213,171, 11, +242,247,140, 30, 49,162,224,229,203,151,208,235,245,208,233,116, 80, 62,122, 4,249,197,139,208,235,245, 96, 89, 22, 15, 31, 60, +192,148,201,147,243,149, 5,249,187,106,215,118, 97, 9,203,150, 76,215, 39,132,180,255,152, 91, 93,202,140,162, 80, 40,160, 80, + 40,192,225,112, 96,106,106,138,212,212, 84,240,249,124,136, 68, 34,248,249,249, 81,206,206,206,221,254,146,182,143, 56, 67, 67, + 67,181,200, 85,245, 61, 53,124,106,146,115,129,142, 29,103, 81, 27,181,120,162,146, 89,136, 14,102, 4, 95,250,113, 97,207, 75, +103,159,237, 29, 36, 35,186,156,190,161,161,161,218,138, 56, 63,134, 84, 42,245,240,241,241,217,210,167, 79, 31, 10, 0, 90,180, +104, 65,213,171, 87,239,103,169, 84, 90,238,146, 54,149,113, 10,133, 66, 1, 0, 92,189,122, 53,243,246,237,219,157,174, 94,189, +154, 89,122,191, 33,156, 20, 69,237,216,186,117, 43,196, 98, 49,116, 58, 29,212,106,117,137,255, 85,233, 79,141, 70, 3, 27, 27, + 27,252,241,199, 31, 96, 24,230, 92,101,233,244,174,239,155,159,195,177, 72,217,119,230, 26, 46,188,211,228, 87, 85, 92,149,230, +172,235,104,226,233, 96, 99,125,101,245,143, 75,109,179,222,132, 34, 33, 33,129,189,116,241,220,125, 5,203, 38,102,228,176, 63, +100,230,177, 62,249, 74, 86, 28, 84, 27,241,231,126,158,206,126,219, 4, 58, 16,176, 21,113,214,115, 52,241,116,178,181,190,180, +118,245,143,166,217,111, 66,145,148,156,140,243,231,206, 60, 81,176,108, 34,203,178, 23, 89,150,157,160,211,233, 26,233,116,186, + 70, 44,203, 78, 40, 79,180, 84,149, 83,163,209, 4,107, 52,154,224, 79,201,201, 48, 76, 48,195, 48, 6,115,254, 57,131, 16,152, + 63,127,254,163, 91,183,110,245,127,244,232, 81,187,226,237,197,139, 23,109, 99, 99, 99,219, 38, 36, 36,180,137,157, 37,160,159, + 63,127,206,121,252,248, 49,247,241,227,199, 53, 67, 66, 66, 46, 26, 90, 63, 43,120, 22, 74,139,252, 69, 50,153,140,148,201, 57, +238, 21,217,188,230,235,253, 71,142, 28,177,255,100,156, 0, 34, 34, 34, 54,239,218,181,171,150,147,147,147,227,192,129, 3,177, +119,239, 94,236,218,181, 11, 64, 97, 36,251, 82,150, 43,187,144,144,144, 58,101, 5, 25,173,238,189, 27, 90,231,141,156, 70, 78, + 35,167, 17,229, 11, 44,194,232,245,122, 6,118,246,118,166,105,169,169,155, 38, 76, 24,159,177,100,201, 18,229,205,155, 55,161, +142,136,128, 50, 44, 12, 87,174, 92,193,212,169, 83, 11,198,142, 27,151,164, 44,200,223,224, 96,111,103,163,215, 51, 32,132,169, +208, 66, 66, 81, 84, 76, 84, 84, 84,113,111, 27,155, 54,109,210,105, 52, 26,152,154, 22, 6,153,222,185,115, 39,195,178, 44,218, +181,107, 39,225,114,185, 6, 45, 65,146,152,152,248, 44, 55, 78,214,241,216,128,241,209,175, 14,157,206,242,205,208, 96,136, 72, +138, 1,129,128,143,105, 28, 18, 31,254,146,117,111, 75,207,232,130,204,248, 78,137,137,137,207,170,154, 73,246,246,246, 11,127, +255,253,119,187,208,208, 80, 86,165, 82, 33, 49, 49,145,157, 53,107,150,157,189,189,253,194,234,102, 60,203,178, 36, 59, 59, 27, +132, 16,166,168,178, 50,197,251, 13,229, 72, 72, 72,120,113,228,200,145, 83,215,175, 95,135,179,179,115,137,200,250, 88, 96,113, + 56, 28, 16, 66,176,117,235,214,108, 66,200,119,149,241, 10, 4, 2,236, 60,122,241,194,183, 91,143, 31, 62,124,245,209,241,234, + 90,174, 0,128, 79, 81,139, 86, 46,253,222, 46,253,213, 3,242,226,254, 53,230,208,211,164, 20,157,158,157, 84,230,201,121, 50, +182,168, 82, 86,236,219, 67,209,139, 86,254,184,196,188,120,248,242,247, 80, 89, 46,209,179,147,255,222,147,240, 63,194,249, 15, +162,112,166,159,140, 72,165, 82, 28, 59,118,172,202, 62, 88, 62,117,200, 95,156,219,171,203, 41,147,201, 86,125,241,197, 23,178, + 69,139, 22,109, 81, 42,149,242,162,206,155,102,237,218,181,107, 38, 77,154,148,146,152,152,104,180, 92, 25, 97,132, 17,255, 40, +202, 28, 34,100,104,234,238,182,237, 91, 59, 31, 58,112,208,129,166, 41,135,216,216,183,143,191, 26, 53, 42,241,214,173, 91, 86, +220,186,117, 27, 81, 20,197,168,231,204,185,159,159,155,147,249,235,158,221,181,106,215,118,241, 43, 90,236,153,101,104,234,110, + 69, 23,204,204,204,220, 59,109,218,180, 70,251,246,237,227,173, 90,181, 74,158,152,152,120,249,193,131, 7,157,183,108,217, 34, +220,185,115,103, 65, 94, 94,222,233,243,231,207,247,104,211,166,141, 78,173, 86, 23, 24,122, 35, 41, 41, 41,225,132, 16,111,106, +237,174,193,175,183,254,254, 5, 75,147,102, 80,241, 64, 88,221, 93, 74, 39,191,146, 34,147,253,206,178,172,174, 58,153, 36, 18, +137,252, 68, 34, 17,222,188,121,147,213,168, 81, 35, 53,159,207,231,185,184,184, 88,139, 68, 34,191,191, 33,176,216,172,172, 44, +176, 44,203, 1, 64, 24,134,225, 20,237,175, 82, 12, 39, 30,143, 55,112,228,200,145,167,182,108,217,210,161,125,251,246,112,117, +117,133, 86,171,133,135,135, 7,212,106, 53,220,221,221,161, 82,169,176, 97,195, 6,228,231,231, 79, 79, 76, 76,204,170,140, 83, + 40, 20,130,207,231,195,211,187,126,129, 80, 40, 68,117,197, 21, 0, 72,184,148,235,235,179,187,145,154,145,206, 28,126,154,146, + 82,160,209,119,140, 74,149,191,252,248,188, 2, 61,228,109, 70, 76, 73, 4, 0, 21,131,252, 10, 57,249,112,141, 60,183, 19, 41, +169,233, 56, 20,150,148, 45,215, 48,157, 94,151,193, 89,165,116,254,143,112,246,219, 20,129,214, 95, 27,126,238,145,113,159,166, +161, 40,109, 85, 50, 20,225,177, 44,193,118,111, 22,219, 55,149, 25,227,170, 58,156,165, 58, 85,219, 1,108, 7, 0,103,103,231, +232, 41, 83,166,204, 76, 76, 76, 92, 95, 20,239,106,161,177,105, 55,194, 8, 35, 62, 75,129, 21, 19, 19, 31,238,234, 90, 99,238, +241, 99, 71,155,177, 44, 69,179,132,200, 1,234,204,203,151, 47,179, 75,159,231,102,101,101, 58,114,204,200, 1,132, 33, 92, 66, + 24, 61, 67, 83,119, 99, 98,226,195, 43,105, 24,159, 15, 27, 54,108, 83,155, 54,109, 70,233,245,250, 85, 81, 81, 81,151, 61, 61, + 61,159,116,234,212,233, 91,157, 78,183, 38, 58, 58,250,178,151,151,215,149, 67,135, 14,205,210,235,245,223, 87, 81,180,232, 80, +232,255,181,239, 83,102, 18, 69, 81, 75, 88,150, 53, 23,137, 68, 57, 33, 33, 33, 7, 90,182,108, 57,136,101, 89,115,138,162,114, +170,203,169, 86,171, 39,231,229,229,217, 12, 28, 56, 80, 75, 8,241,236,213,171,215,156,168,168, 40,174, 92, 46,143,169, 10,207, +187,119,239, 84, 46, 46, 46, 61,190,254,250,235, 93, 60, 30,175, 29, 10, 67, 54,176,165,242, 4, 44,203, 66,175,215,159,150,201, +100, 21,230, 11,151,203,205,239,220,185,179, 73,165, 86, 41, 62, 63,223,208,244,229,169,245,211,182, 94,123,185, 92,169,101, 89, + 29,195,142,123,157, 34, 47,115, 10,217,163,215,108, 61,131, 57,149,204,180,141,151,194,151,171,180, 12,163, 99,216,241,229,113, + 86, 5,255, 43,156, 0, 48,129,218,180, 31,219, 55,149, 56,188, 23, 15, 27,126,252,251, 63,133, 34,139, 19, 11,160,242,197,206, +139, 44, 86,149,173, 93, 88, 37,206,143, 80, 52, 75,208, 56, 83,208, 8, 35,140,248,188, 80,252, 2,254, 79,108, 0,218, 27, 57, +141,156, 70, 78, 35,167,145,211,200,105,228, 52,114,254,219, 54,202, 40, 49,141, 48,194, 8, 35,140, 48,194, 8, 35, 62, 45, 8, +128,246,229, 88,182, 12,142, 21, 85,157,217, 4,149,241, 27, 57,141,156, 70, 78, 35,167,145,211,200,105,228,252,255,199,249,175, +129,113,136,208,200,105,228, 52,114, 26, 57,141,156, 70, 78, 35,167,113,136,208, 56, 68,104,132, 17, 70, 24, 97,132, 17, 70, 24, +241, 89,195, 40,176,170, 1, 66,200, 87,132,144,139,132,144, 23,132,144, 75,132,144,175,254, 6,151,136, 16, 50,167, 20,223, 5, + 66,200, 44, 66,136,192,152,211,159,117, 29,160,141,185, 96, 68,117, 81, 20,188, 56,180,162, 96,197, 70, 24, 97,196,255, 54, 56, +229, 29,112,115,115,187, 71, 81, 84,157,226, 69, 98,139, 35,163, 23,127,255,248, 55, 0,176, 44, 27, 27, 30, 30,222,180, 60,206, + 58,117,234,148,112, 22,111,132, 16,104,181, 90, 83,154,166,243,202,226,212,235,245, 9,175, 95,191, 14,250,140, 94,172,251,173, +172,172,152,109,219,182,109,246,245,245,173,155,151,151, 87, 48,102,204,152, 46,132,144,246, 44,203, 14,173, 34, 87,125, 66,200, +175, 13, 27, 54, 60, 62,105,210,164, 35, 62, 62, 62,102, 10,133,130,127,224,192, 1,135,109,219,182,221, 38,132,140,100, 89, 54, +220, 88, 77, 63, 31, 56, 58, 58, 6, 16, 66, 54,185,187,187, 7, 73,165,210,199, 0, 38,202,100,178,167,198,156,249,175, 62,131, +163,249,124,126, 39,119,119,247, 70, 42,149, 42, 43, 54, 54,246,145, 94,175,255,158,101,217,228, 79,196,111, 14,224,123,129, 64, + 16,236,230,230, 86, 35, 42, 42, 42, 94,163,209, 60, 4,176,132,101,217,156, 79, 33,174,130,131,131,239,252,248,227,143,214,223, +125,247,221, 29,169, 84,218, 92, 38,147, 69, 26, 75,214,136,127, 2, 53,107,214,180,144,203,229,187, 56, 28, 78,128, 64, 32,112, + 48, 49, 49,129,137,137, 73,178, 64, 32,120, 34, 22,139, 71,157, 59,119, 46,219,152, 75,159, 88, 96,209, 52,237,252,232,209, 35, +187,226,197,151, 25,134, 1,195, 48, 96, 89,182,228,179, 24, 69,113,150,208,166, 77, 27, 77,133, 23,227,112,106,132,134,134,218, +153,152,252, 25,106, 73,163,209,192,215,215,151, 9, 11, 11,179,251,120, 33, 97,181, 90,141,192,192, 64,246,115,201, 44, 66,200, + 16,107,107,107,249,251,247,113, 45,149, 42, 77,240,152,201,223,205, 29,210,247, 11,203,187,119,239,162,123,247,238, 52, 33,228, + 43,150,101,127, 53,144, 75, 68, 8,249,101,238,220,185, 43,185,124,177,221,177,115,119,232, 13, 59,246,191,247,247,168, 77,166, + 76,153,104, 50,105,210,164,199, 62, 62, 62,187, 9, 33, 45, 88,150, 85, 25,171,234,103, 81,254,156, 26, 53,106,156, 90,190,124, +185, 83,114, 82, 18,214,173, 95,223, 24,192, 22, 0,141,141,185,243, 95, 43,131, 57,139, 23, 47, 94, 62,120,240, 96,232,245,122, + 40, 20, 10,233,155, 55,111,234,205,159, 63,191, 23, 33,164, 17,203,178, 49,127,147,223,214,221,221, 61, 98,218,180,105, 86,141, + 26, 53, 2, 69, 81,200,201,201,145,222,190,125,187,241, 47,191,252,242, 21, 33,196,139,101,217,180,191,115, 13, 75, 75,203,223, +214,172, 89, 99, 45, 16, 8,176,103,207, 30,235,254,253,251,223,150, 74,165, 45,170, 43,178, 8, 33,148,181,181,245, 20, 0,109, + 25,134,225, 3,120,152,149,149,181,140,101, 89,141,177,198, 24, 81, 17,108,108,108, 70,231,229,229,109, 22,139,197, 60, 51, 51, + 51,136,197, 98,112,185, 92,240,249,252,154,150,150,150, 53, 77, 76, 76,186, 12, 26, 52,104,226,129, 3, 7,118, 25,115,235, 19, + 10, 44,138,162, 32, 18,137,112,248,240, 97,208, 52, 13, 46,151, 11, 46,151, 11, 30,143, 87,230,247,154, 53,107, 26,210, 16, 0, + 0,206,156, 57, 3, 51, 51, 51,152,155,155,195,203,203, 11,132, 16, 8, 4, 2,252,241,199, 31,224,114,185,224,112, 56,224,114, +185, 8, 10, 10,250,192, 82,246,223, 64,191,122,132, 5,202, 14,222,216,181,158, 9,186, 79,254,177, 79,129, 82,211, 14,128, 60, + 59, 43, 43,235,241,241,227, 50,127, 15, 15,222,225,195,135,253,172,172,172, 6, 1, 48,116, 33,233,169,141, 27, 55, 62,205,242, + 36,246,195,134,143, 24, 54,138, 67,105,190, 26,247,237, 15,241, 73,233,242,177, 99,199, 30, 63,125,250,244,176,141, 27, 55, 70, + 77,156, 56,113, 10,128, 85,134,166,223,197,197,229, 30, 77,211,197,150, 71,217,155, 55,111, 2, 62,147, 23,163, 20,192,106, 0, + 90, 0, 43, 89,150,141, 40,117,204,131,199,227,173,210,104, 52,153, 0, 22,178, 44, 27,255, 57, 62, 44, 78, 78, 78, 94, 67,135, + 14,181,201, 76, 79,199,186,245,235,139,119, 7, 25,178, 40,249,167, 70, 96, 96, 96, 29,161, 80,184, 26, 64,128, 74,165,114, 2, + 0,145, 72,148,200,178,236, 9,133, 66, 49, 47, 52, 52, 84, 81,205,114,170, 1,160, 30, 10,103, 24,151, 5,118,249,242,229, 81, +115,230,204,137,249,111,115, 18, 66, 92,236,237,237,127,236,215,175, 31,206,157, 59,135,243,231,207,107, 69, 34, 17,103,248,240, +225,100,226,196,137,150,211,166, 77,235, 2,224,167,191,153,181, 93, 22, 47, 94,108,229,237,237,141,163, 71,143,226,217,179,103, + 10,119,119,119, 81,235,214,173,193,225,112,172,230,206,157,219, 25,192,222,191,115,129,172,172,172,101, 75,151, 46,221,183,105, +211, 38,211,216,216, 88, 44, 89,178,196,102,210,164, 73, 55,165, 82,105, 43, 67, 69, 86,145, 11,193, 20, 0,109,104,154,110, 49, +124,248,112,221,228,201,147,185, 20, 69,105,215,175, 95,111,251,203, 47,191, 12,176,177,177, 9, 72, 79, 79,207,135, 17,168,192, +144,160, 97, 24,134, 11, 64,200,178,172,170,178,223,255,159,238,221,218,218,122, 66, 86, 86,214, 22,169, 84, 10, 91, 91,219,146, +119, 45,195, 48,144,203,229, 80, 40, 20,168, 83,167, 14,207,219,219,123,231,164, 73,147,184,155, 54,109,218,106,172, 49,159, 72, + 96, 17, 66,192, 48, 12,184, 92,238, 7, 2,171, 88,252,124,252,189,204, 86,243,163,169,154, 20, 69,145,252,252,252, 18,113,101, +102,102, 86, 98, 9,211,106,181,127,225,213,235,245,160, 40,138,173,136,179,156,180, 79, 0,240, 7,203,178,209,134,100, 66,105, +206, 35,147,188,176, 79, 48,107, 80,113,200,243, 46,223, 22,126,238, 3,112,245,205,184, 85,171,154, 53,171, 49,101,193,198, 69, +138, 12, 89,250,220,161,221, 93,220, 29,172, 69,146,236,212, 28, 75, 79,207,238, 0, 82,170,144,206,230, 99,199,142, 61,122,252, +234, 75,161, 80,200,227,113,104,154,219,188,129,135,117, 13,115,218,220, 20, 48,143,143,137,186,247,213, 87, 95,141,153, 56,113, +162, 85,177,192, 50,228,222,185, 92,174,243,195,135, 15,237, 56, 28, 14,154, 53,107,166,175,202,189,127, 42,148,195, 57, 63, 37, + 37,101,160, 82,169, 68, 80, 80,208,151,132,144, 54, 44,203, 62, 33,132, 52,232,209,163,199,237, 35, 71,142,152,134,133,133,161, +113,227,198, 34, 0,253,255,193,116,254, 5, 82,169,244, 50,128, 47,104,154,134, 90,169, 84,175, 94,251,193, 50,119, 33,165,197, +213,127, 35,157,254,254,254, 94, 98,177,248,222,218,181,107,205,124,124,124, 8,151,203,133, 78,167, 67, 84, 84, 84,141,253,251, +247,143,123,252,248,113,231,192,192, 64,159,143, 23, 53, 55,240,222,235,221,190,125, 91,238,234,234, 90,102,221,201,205,205,229, +120,120,120,180, 2, 16,243, 15,112, 38,164,164,164,244,252,226,139, 47,198, 39, 39, 39, 71,232,116,186,217, 0,234,219,216,216, +132,245,238,221, 27, 34,145,168,141, 33, 2,171,162, 50,178,179,179,235,209,180,105, 83,108,218,180, 9, 43, 87,174,108,207,178, +236, 31,132,144,118,185,185,185, 87,191,252,242, 75, 88, 88, 88,244, 44, 75, 96, 85,161, 46,121, 52,106,212,104,231,244,233,211, + 77,207,157, 59, 7,119,119,119,228,228,228, 96,196,136, 17,118, 27, 55,110,188, 33,149, 74, 91, 23,139,172,242, 56, 9, 33, 62, + 2,129, 96,239,129, 3, 7, 76, 92, 93, 93, 93,121, 60, 30,229,234,234,138,204,204, 76, 40,149, 74,193, 15, 63,252,208, 64, 36, + 18, 61,253,233,167,159,246, 2,232,253, 79, 62, 71,132,144, 28, 0,102, 0, 44,170, 50,188, 90,193,189,231, 0, 16,148,106,239, + 32, 20, 10, 33, 20, 10, 33, 16, 8, 16, 27, 27,123,140,166,233, 17, 69, 29,185, 74, 57,201,159, 61,120, 63, 66,200, 35,154,166, + 43,252,253,241, 82,102,255, 68,187, 68, 8,113, 38,132,108, 0,208, 6,133,126,212, 55,237,236,236,166, 38, 39, 39,191, 55,148, + 83, 42,149, 90,231,231,231,255, 36,149, 74, 97,103,103, 87, 44, 54, 17, 20, 20, 4,165, 82,137,151, 47, 95,130, 97, 24, 68, 71, + 71,195,204,204, 12, 13, 26, 52,248,105,241,226,197, 71, 23, 46, 92,152,241,159,188,247,127,141,192, 42, 86,178, 28, 14,231, 3, +129,245,241, 86, 44,134, 8, 33,149, 46, 84, 76, 8,161,212,106,117,137,184, 50, 55, 55, 47,249,175, 78,167, 43, 83, 96, 85, 83, +153,251, 50, 12, 83,135, 16,178,221, 80,145,245, 49,134, 13, 27,246, 23,127,142, 57,115,230, 36,164,167,167, 51,125, 58,250, 73, + 34, 46,200,146,220, 44, 77, 68,182,166,166,181,133,150, 86, 22,249,249,249,183, 0,152, 84,225, 18, 78,222,222,222,230,155,247, + 93,144,141,249,102,249,210, 32, 87,107, 51, 95,103, 27, 75, 7,115, 17,223,132, 34,114,161, 78,155, 32,145, 72,124, 0,100, 84, + 37,221, 20, 69,193,204,204, 12,167, 79,159, 70,177,255,220,103, 2, 75,133, 66,129,172,172, 44,108,219,182,205,108,252,248,241, +215, 9, 33, 83,123,246,236,185,233,200,145, 35,146,236,236,108,104, 52, 26, 0, 80,124,134,207,201, 82, 75, 75,203,150,109,218, +180,225, 31, 60,124,152,207,178,172, 28,133,203, 17,229,179,108, 57, 11, 87,255, 7, 33, 20, 10,191, 93,182,108,153,153,143,143, + 15,201,200,200, 0,195, 48,160, 40, 10, 54, 54, 54,152, 57,115,166,112,254,252,249, 78,175, 95,191,158,139,106, 44, 59, 3,128, +148, 39,132, 0,192,204,204, 76,135,170, 79,142, 41,147, 83,167,211,145,102,205,154,205, 76, 79, 79,111,160, 80, 40,126, 48,224, +197,163, 3,112,186,104, 43,110, 83,158, 70, 68, 68, 40,250,247,239, 47,170, 93,187,118,240,223,205, 91, 15, 15,143, 38, 92, 46, + 23, 15, 31, 62, 84, 1,184, 89,180,251,230,179,103,207, 84,189,123,247, 22,212,168, 81,163,137,161, 92, 82,169,212,195,205,205, +237,138,141,141,141,168,120,218,118,215,174, 93,185,171, 87,175, 54, 77, 72, 72,128, 70,163,193,156, 57,115,208,173, 91, 55, 88, + 90, 90, 98,228,200,145,246, 59,118,236,248, 13, 64, 96, 5,109,168,144,207,231,255,250,230,205, 27,119, 71, 71, 71,209,131, 7, + 15,224,235,235,139,244,244,116, 36, 39, 39, 35, 63, 63, 31,201,201,201, 24, 53,106,148,221,186,117,235,164,159,209, 51,148,205, +227,241, 32, 22,139, 45,178,179,179,115,254, 6,143, 0, 0,191,180,184, 18, 8, 4, 16, 8, 4,248,216,197,228,255, 35, 8, 33, + 78,132,144,112, 30,143, 39, 16,139,197, 60,138,162, 32,145, 72, 58,214,168, 81,227,229, 87, 95,125, 85,255,215, 95,127,125,103, + 8,143, 82,169,252, 85, 36, 18,113,109,109,109, 1, 0, 29, 58,116,192,240,225,195,145,150,150,198,200,100, 50,120,121,121, 81, + 55,110,220, 64, 74, 74, 10,158, 62,125,138, 70,141, 26,113,173,172,172,126, 5,208,217, 40,155, 62,161, 5,139,195,225,148,108, +101, 89,174,138,183,143, 29,223,203,227,212,235,245,176,183,183,135, 88, 44,134, 88, 44, 46,237,204,254, 23,126,150,101,171, 53, + 68, 40,145, 72, 48,120,240, 96,118,235,214,173,227,139, 68,214, 27, 67,255,219,111, 83, 68,137,213,234, 99,248,250,250,222,157, + 55,111, 94,167, 75,151, 46,101, 5,185,214,230, 72,100,239,243,133,102, 22, 22,112,174,217,245,171,126, 3,238, 1, 56, 80,133, +100,202, 84, 42, 21,207,205, 89,172,166, 40, 37,169, 41,224,152, 58, 74,120, 2, 7, 75, 75, 39,158, 90,149,106,102,105,201, 47, + 26, 50,147, 85, 70, 84, 60,121,128, 16, 2, 11, 11, 11,110,209, 39,236,236,236, 4,245,235,215, 79,161, 40, 10, 44,203,202,158, + 63,127,110,240,112,161,171,171,107, 8, 69, 81,206,132,144, 15, 38, 36,148,222, 24,134, 73,120,249,242,165,161, 19, 16,230,249, +249,249,181,218,178,101,139,173,187,187, 59,182,109,219,102,118,244,232,209,189,191,253,246, 27,178,179,179,241,238,221, 59,140, + 26, 53, 42, 23,133,195,136,159, 21,172,172,172,238,244,235,215, 15, 59,119,238,100,139, 58, 17, 18, 66,136,175,185,185,249,235, +240,240,240,255,186,159, 11, 69, 81, 29,189,188,188, 72, 78, 78, 14, 24,134, 1, 77,211, 37, 29, 33,154,166,241,237,183,223,138, + 70,141, 26, 53,191, 73,147, 38, 51,185, 92,110,174, 78,167, 59,152,159,159,255,195,139, 23, 47, 62, 43,103,213, 22, 45, 90,124, + 19, 31, 31,223,173, 86,173, 90,103,254, 70,111,159,109,216,176,161, 26,128,136,166,105,238, 39,120,129,209, 69,237,145,178,120, +113,120,150,101,117,129,129,129,202,162,151, 59, 93,133,122,243,219,254,253,251,157,157,157,157,161,213,106,161,211,233,144,159, +159,143, 27, 55,110, 64,165, 82, 65,167,211,193,203,203, 11, 43, 87,174, 84, 78,156, 56, 81,120,232,208,161, 84,133, 66, 49,164, + 18,218,169, 71,143, 30,149, 56, 58, 58,138, 20, 10, 5, 98, 98, 98, 16, 24, 24,136,188,188, 60,200,229,114, 20, 20, 20, 64,163, +209, 32, 55, 55,215, 66,175,215,171, 63,155, 23, 13,135, 3,129, 64, 0, 30,143,151, 93,171, 86, 45, 16, 66,132,239,222,189,171, +206,144,155, 25,128, 92, 46,151,203, 47, 45,172, 4, 2, 1,158, 63,127,126,168, 60,235, 85, 69,245,167, 42,191, 63, 3,129,181, +129,199,227, 9,172,172,172,120,197,251, 52, 26, 13,207,210,210, 18,181,107,215,222, 4,160,139,129,109,136,191,165,165, 37, 8, + 33,224,241,120, 24, 51,102, 12, 30, 61,122,116, 34, 33, 33,225,171,212,212, 84, 20, 20, 20,252,106,110,110,222, 43, 53, 53, 21, +122,189, 30,111,223,190,133,191,191,191,191, 81, 50,125, 98, 11, 86,121,130,234, 99,193,101,136,181, 68,163,209,152,116,237,218, +149, 41,253,146, 46,250, 31,169, 64, 96, 85,171,130,115,185, 92,211, 9, 19, 38,228,109,221,186,117, 28, 33,100, 7,203,178, 81, +213,205,164, 51,199, 14,216,175,252,126,206,247, 86,210,218,110,179,103,207,230,244,238,221,251,218,158, 61,123, 26, 90,121,123, +127,113,253,242,126,251, 77,179,231,158, 60,117,234, 84,129,161, 14,238, 69,184,123,226,196, 9,199,233, 83, 38,242,190,255,118, +234, 69, 51,119, 27,190, 9,177,146, 8, 85,242, 52, 19,176, 10, 65, 93,175,110,103, 47, 93,138, 7,112,199,128,198,203,249,225, +195,135,118, 22, 22, 22, 0, 10, 39, 7, 88, 88, 88, 96,235,214,173,150,197,150, 66, 67,134, 11, 63,122, 0,157,195,194,194,236, + 76, 76, 76, 32,151,203, 75, 94, 8, 44,203,150, 52,150, 45, 91,182,172,202,139, 48,134, 16,210,242,235,175,191,190,181,101,203, + 22, 91, 55, 55, 55, 44, 93,186, 20, 25, 25, 25,136,139,139,195,144, 33, 67,114, 99, 98, 98,218,148,246,205,250, 28,208,160, 65, + 3,246,238,221,187,184,120,241, 34,190,252,242, 75,114,234,212, 41,141, 94,175,231, 37, 38, 38, 62,255,167,210,164,211,233, 76, +121, 60, 94,201,176,122,177,176, 42,222,156,157,157,113,245,234, 85, 78, 65, 65, 1, 39, 61, 61, 93,252,203, 47,191, 76, 14, 9, + 9,113, 4, 48,232,159,204,203,173, 91,183,214, 26, 51,102, 76, 28,135,195, 97, 59,117,234, 52,244,253,251,247, 61, 29, 29, 29, +255,184,126,253,250, 90, 0, 85, 14, 87, 80,191,126,253, 16, 14,135,227,204,178, 44,239,228,201,147, 90,189, 94,207,107,208,160, + 65,202, 71,193, 16,161,211,233, 18, 34, 35, 35,131, 12,225, 19, 10,133,188, 29, 59,118,104,149, 74, 37,207,215,215, 55,165, 20, + 15,239,212,169, 83, 90,173, 86,203,243,244,244, 12, 49,100,102,115,102,102,230,144,105,211,166,221, 62,124,248,176, 13, 77,211, +120,255,254, 61, 50, 50, 50, 96, 97, 97,129, 95,127,253, 21,181,107,215,198,149, 43, 87, 50,117, 58,221,232,157, 59,119,206, 87, + 40, 20, 67, 12,240,193,106, 25, 28, 28, 92, 43, 59, 59, 27, 22, 22, 22,144,203,229, 8, 9, 9,129,143,143, 15,100, 50, 25, 40, +138,130,133,133, 5,182,108,217, 82, 64, 8,201,252, 28,158, 33,154,166, 75,172, 76,165, 68,145,178, 73,147, 38,184,115,231,206, +239, 85, 17, 69, 44,203,170,185, 92,238, 7,194,170,248, 59, 77,211, 85, 30,242,208,235,245, 60, 66,136, 63,138,252, 3, 43,251, +253, 25,160,149, 88, 44,230,149, 81,215,120, 30, 30, 30, 45, 12, 37,225,243,249,214, 34,145,168,144,176, 85, 43,164,166,166,234, + 93, 93, 93, 7,244,239,223, 95, 11, 0,227,198,141, 27,144,154,154,170,212,233,116, 52, 77,211, 72, 75, 75, 67,237,218,181,173, +141,146,233, 63, 96,193,170,200,114, 85,218,130, 85, 89, 37,164, 40, 42, 59, 52, 52, 84, 34,145, 72, 74,246,105,181, 90,248,251, +251, 51, 12,195,144,143,175, 83,156,142,234,130,203,229,154,126,247,221,119,217, 91,182,108,249, 10,192, 60, 67,254,115,100,146, + 23,246,125, 36,174,182,173, 92,178,233,231,149,203,172,162, 47,238,193,174,141,107,244, 92,190, 73,136,191,191,127,203,156,156, + 28,149,133, 68,133,228, 12,156, 96, 89,246,183, 42,244, 66, 40, 0,135,238,223,191,255,164, 67,135, 14, 15,118, 31, 58,110, 37, +139,137,185, 47,200, 77, 79, 50,171,235,206,225, 57,213,234, 37, 87,171,185,189,122,245, 50, 1,176,209, 0, 62,196,197,197,225, +222,189,123, 48, 51, 51,131,153,153, 25, 44, 44, 44, 74,190, 87, 39, 15,139,135,109,207,158, 61, 11,137, 68,130,162,169,187,144, + 72, 36,224,243,249, 40, 93,134, 85, 16, 89,145,132,144,169,199,143, 31, 63,184,124,249,114,100,102,102, 66, 46,151, 99,225,194, +133,136,137,137,153,198,178,236,147,207,233,225,240,245,245,101,239,223,191,143,187,119,239, 66, 46,151,227,231,159,127,134,163, +163, 99, 91, 0, 11,254,201,116, 49, 12,195, 43,182, 40,150, 22, 86,165,173, 88, 52, 77, 67, 40, 20,194,198,198, 6,115,231,206, +229,125,249,229,151,221,254,201, 52,175, 90,181,170,238,134, 13, 27,126,217,183,111,223,133, 33, 67,134, 28,126,241,226,197, 8, +115,115,243,231,215,174, 93, 91, 38, 16, 8,152,106, 90, 69,156,159, 60,121, 98, 87,250,145,103, 24, 70,172,211,233,160,211,233, +160,213,106, 81, 80, 80,128,246,237,219, 27,204,247,232,209, 35, 49, 0, 44, 88,176,128, 11, 64,204, 48, 12,244,122, 61,138, 57, + 11, 10, 10,184,237,218,181,115, 54,200, 68, 45,147, 69, 74,165,210, 22,253,251,247,191,119,240,224, 65,203, 90,181,106, 33, 49, + 49, 17,137,137,137,168, 91,183, 46, 54,110,220, 40,103, 89,182, 89,145,168, 58,101,224,109, 75, 45, 45, 45,185,113,113,113,208, +233,116,240,247,247,199,150, 45, 91, 48, 96,192, 0,212,175, 95, 31,185,185,185, 8, 15, 15,199,222,189,123, 45,121, 60, 94,159, +127,250, 25,162, 40,234, 47,226,170,244, 86,205, 14,134,153, 80, 40,204, 21, 8, 4,252, 98,255,171, 71,143, 30, 85,217,122, 85, +170, 93,122, 82,149,223,255, 36, 76, 77, 77, 97, 98, 98, 2,173,246,195,219,148, 72, 36,168, 91,183,174,193, 60, 38, 38, 38,164, +216,136,161,213,106,145,148,148,164,127,241,226,133, 62, 32,160,112,144,195,209,209, 81,255,240,225, 67,189, 82,169,164, 77, 77, + 77, 81, 52, 42, 66, 96,196,167,179, 96, 21, 91, 43, 42,178, 92, 21,127, 47,182, 68, 85,246,176,209, 52,141,139, 23, 47,150, 84, + 20, 47, 47,175,146,107,125,106,129,101,109,109, 45, 15, 14, 14, 54,139,143,143, 63, 80,157,255, 23,139,171,229, 75, 23, 90,101, +190,122,128, 4, 89, 18, 50, 83,181,161,119,158,191,189, 12,224, 50, 0, 96,187,247, 13,140,123,101,176,184,242,182, 21,251, 53, +144,154,158,248,162, 75,183, 26,253,199,126, 67, 77,156, 56,177,241,136, 17, 35, 50,134, 12, 25, 50, 81, 36, 18,121,235,116,186, +140,179,151, 46, 69,247,234,213,203, 65,167,211, 13,103, 89,214, 16,159,164,132,193,131, 7,243, 8, 33,176,179,179,227,238,219, +183,207,210,204,204, 12, 35, 70,140,200,122,251,246,173,182,168, 39,150, 82,197,219, 79,104,214,172,217, 95,134, 5,139, 95,236, +197,150,129, 42,138, 54,255,110,221,186,237, 60,124,248, 48,210,211,211, 33,151,203,193,229,114,177,122,245,106,196,197,197,253, + 68, 8,121,241,185, 52,102,126,126,126,236,195,135, 15,241,252,249,115,168, 84, 42,140, 30, 61,186,180,143, 97,135,127,122,164, + 32, 49, 49, 17,251,247,239, 7,195, 48, 24, 50,100, 8,106,213,170, 85, 34,172,146,147,147,177,123,247,110,232,245,122,140, 25, + 51, 6, 53,107,214,132, 86,171, 21,182,110,221,154,115,227,198, 13,221, 63,145,224,233,211,167, 71,159, 56,113,226, 66,124,124, +124,231,149, 43, 87,182, 34,132, 48, 51,103,206, 92, 97,102,102,246,183,102, 95,102,229,228,225,245,155,247, 37, 2,232,227,205, +214,198,170,202,124, 81, 49,241, 37,255,215,235, 75,243,233, 97,109,101, 89, 37,190,164,164,164,130,140,140, 12,249,232,209,163, + 45,118,238,220, 73,234,214,173,139,216,216, 88,112,185, 92,152,154,154, 22, 68, 68, 68, 84, 53, 52, 67, 98,102,102,166, 59, 77, +211,188, 55,111,222,192,197,197, 5,193,193,193,248,225,135, 31,144,158,158, 14,157, 78, 7, 59, 59, 59, 70,171,213,134,169,213, +234, 91,255,244,115, 84,218,202, 84,122,187,123,247,238,239, 52, 77, 83, 0,206, 0,168,146,192,102, 89, 86, 93,179,102,205, 15, +184,171, 99,189,250, 15, 90,236,254, 99, 51, 19, 61, 60, 60,110, 74, 36,146,110,175, 95,191,254,192,138, 53,120,240, 96,141,155, +155,219,109, 67,121,204,204,204,178,120, 60,158,181, 82,169,196,253,251,247,225,237,237,205,203,201,201, 89, 78, 8,153, 83,212, +185, 92,158,146,146,194,147, 74, 11,221,248, 60, 61, 61,145,151,151,151,101,148, 76,159, 88, 96,149,101,185, 42, 75,100,209,116, +229,174, 9,132, 16, 40, 20, 10, 72, 36,146,146,173,216,207,170, 44,129, 85,228,251, 83,173, 33,194, 34,113, 37, 58,120,240,224, +239, 27, 55,110,188,107,232,255, 74,251, 96,109, 95,187,116,101,177,184,122,118,247, 10, 78, 69,228,164,207, 90,190,126, 67,117, + 51,219,199, 86,226,235, 96,111,115, 99,245,143, 75,204,162, 47,238,197,225,237,235,216,103,143, 30, 53, 28,255,232, 81,159,241, +227,199, 91, 1, 72, 2,144, 8,224, 62,128,159, 12, 20, 87,136,140,140, 44, 9,238, 26, 16, 16, 16,111,105,105,105, 41, 18,137, + 32,147,201, 84, 79,158, 60,169,150,163,107, 84, 84,212, 39, 13,238, 74, 8,241,232,222,189,251,173, 99,199,142, 73,178,179,179, +241,254,253,123,204,156, 57, 19,155, 55,111,134,153,153, 25,206,157, 59,103,218,173, 91,183, 27,132,144,166,255,116,112, 85,127, +127,127,246,241,227,199,120,247,238, 29,116, 58, 29,122,244,232, 81,233, 4,142,255,178, 5,139,157, 54,109, 26,118,238,220, 9, +154,166,241,213, 87, 95, 33, 55, 55,183,228,184,149,149, 85, 89,199,232,162,231,253, 31, 17, 88, 28, 14,135,189,121,243,230,202, + 86,173, 90, 33, 62, 62,190,115, 96, 96,224,207, 35, 70,140, 72,252,187,188,150,230,166,240,243,113,133, 74,165,130, 74,165,130, + 84, 42, 69, 94, 94, 30,162,163,163,161, 82,169, 96,111,103, 81,101,190,128,250,117, 75,248,236,236,236, 32,151,203,241,246,237, + 91,168,213,106,216,216, 88, 86,165,206,215,232,216,177,227,245,223,127,255,221,250,247,223,127, 87,247,238,221,155,191,100,201, + 18, 98,102,102,134,212,212, 84, 84,211,189,231,230,157, 59,119,106,181,111,223,222,243,213,171, 87,184,121,243, 38,212,106, 53, + 2, 2, 2, 16, 21, 21,133, 38, 77,154, 32, 63, 63,255,225,227,199,143, 79,127, 14,117,181,120,248,174,120, 11, 9, 9, 57,196, +227,241, 88, 0,213,178, 54, 21, 35, 46, 46, 78,224,235,235,171, 18, 10,133,252, 34,177,246,183,248, 62,113, 91,247,183,102, 38, + 86, 4, 87, 87,215,105,206,206,206,237, 3, 2, 2,240,234,213, 43,158, 64, 32,192,208,161, 67, 53, 93,186,116,209,112, 56, 28, +131, 39,220,136, 68,162, 87, 38, 38, 38, 45, 85, 42, 21,212,106, 53,174, 92,185, 2,107,107,235, 89,221,187,119,159,154,148,148, + 4,153, 76,198,231,243,249, 37,254,183,173, 91,183, 70, 70, 70,198, 43,163,100,250, 68, 2,171,184,142, 24, 50, 60,104,168, 15, + 22, 69, 81, 80,171,213,144, 72, 36, 16,139,197,144, 72, 36, 37,215, 33,132,148, 41,176,170,131, 26, 53,106, 32, 56, 56, 88,116, +248,240,225,223,214,172, 89,115,175, 58, 28, 71,127,223,239,104,206, 20,212,144, 61, 60,143,200,231,161, 56, 17,158,157, 62,107, +249,250, 41,221,251, 12, 74,249, 88,144, 29, 25,103, 64,207,195, 78, 82,223,201,222,250,198,218, 85,203,205, 50, 95, 61, 64, 82, +114, 50,206, 63,124, 28,170, 42,244, 13,251,225, 19, 62,220, 40, 30, 91,255,156, 32, 16, 8,166, 29, 61,122, 84,146,157,157,141, +152,152, 24, 12, 25, 50, 36,251,221,187,119, 95,247,236,217,115,243,229,203,151, 45, 45, 44, 44,112,249,242,101,211, 26, 53,106, + 44, 7,208,237, 31,108, 28, 89,189, 94,143,204,204, 66,247,149,102,205,154,125, 86,226, 10, 0, 66, 66, 66,120,221,187,119,255, + 3, 64,219, 87,175, 94,129, 97,152,123,161,161,161,205,138,143, 87,116,204, 16,253,150,151,151,199, 53, 53, 53, 45,243,101,197, +227,241,120, 85,181, 56,148,230,188,123,247,238,138,181,107,215,158,152, 49, 99,198,155,191,201, 89,166, 5,171, 91,183,110, 80, +168, 52, 72, 72,201,129, 94,175,131, 66,147,250,183, 44, 88,221,186,117, 67,129, 82,141,184,164, 76,232,116,122,228, 41,116,134, +214, 35,241, 23, 95,124,113,233,224,193,131, 14,247,239,223,135, 74,165, 98, 66, 66, 66,222,142, 29, 59,214,108,212,168, 81,214, +229,133,182, 49, 0, 27, 7, 13, 26,212,247,238,221,187,153,158,158,158, 86, 15, 31, 62, 68,106,106, 42,116, 58, 29,218,182,109, + 11, 62,159, 31,183,124,249,114, 30, 12,112, 45,248,111, 9, 44,129, 64,128,240,240,240, 98, 97, 53,236, 83, 9, 33, 62,159, 95, +237, 97,198,255, 85,252,246,219,111,137,123,246,236,241,113,114,114,218, 48,108,216,176, 54, 82,169,148, 18, 8, 4, 55, 57, 28, +206, 84, 0,239, 13,229,225,241,120, 35, 44, 44, 44,162, 41,138,162, 19, 19, 19,241,230,205, 27,196,198,198, 2, 0,191,160,160, + 0,118,118,118, 37, 70,147, 65,131, 6,161, 70,141, 26,250,168,168,168, 17, 70,201,244,137, 45, 88, 75,150, 44,193,246,237,219, + 49,110, 92,197, 42,226,204,153, 51,192, 71, 67,132, 69,203,199, 92, 45,253,242,215,235,245, 88,184,112,225, 7,255, 43, 30,126, +250,250,235,175, 63,224, 60,121,242,228, 95,134, 8, 63,230, 44, 11,169,169,169,175,142, 28, 57,242,120,213,170, 85, 15, 13,108, + 12, 75, 56,139,125,176,250, 14, 30,154,180,105,197,247, 47,246,157,185, 86, 63, 73,193, 38,205, 90,190,126,198,199,226,202, 80, + 78,111, 7, 19,111,103, 59,235,155,107, 86, 45, 55, 47,182,134, 29, 12, 75,206,129,142, 29, 87,149,194, 50,228,222,117, 58, 93, +130,191,191, 63, 15, 48,108, 88,208, 16,206,106,136,148,191,112,170, 84, 42, 60,120,240, 0, 0, 48,114,228,200,236,119,239,222, +181,100, 89,246, 37, 33,228, 85,199,142, 29,111, 94,186,116,201,146, 97, 24,160,156,176, 20,255,173,116, 22,229, 27, 56, 28, 14, +220,221,221,171, 44,174,254, 91,233, 76, 74, 74, 26, 55,126,252,248,237, 42,149,138, 35,151,203,199, 25,122,172,178,116, 30, 57, +114,228,141,187,187,123, 43,148, 31,138,129, 41,178,176, 86,155,115,195,134, 13, 0,224,249,119, 56,203,179, 96, 29, 58,116, 8, + 12,195,160,134,131, 5, 84, 42, 21,196, 98,113,149, 56, 63,182, 96, 29, 62,124, 24, 12,195,160,166,163, 21,212,106,117,185,157, +151,143, 57,173,173,173,215,237,219,183,207, 57, 34, 34, 2, 9, 9, 9, 88,191,126,253,251,180,180,180, 46, 28, 14, 71,240,243, +207, 63,223,232,218,181,171,189, 78,167, 83, 85,181,220, 89,150, 85, 17, 66, 70, 52,109,218,244,215,101,203,150,197,122,121,121, +213,108,214,172,153, 69, 70, 70, 70,218,147, 39, 79,222,110,223,190,221, 68,167,211,141, 40,111,232,233,191,249, 28, 1, 64, 98, + 98,226,105, 0,220,170, 10, 43, 67,210,249,232,209,163,195, 69,220,231, 13,225,254,111,221,251,223,157,153, 88, 89, 58, 71,140, + 24,145,128,143,226,155, 85, 53,157,151, 47, 95,126, 55,120,240,224,165,245,235,215, 95,100, 98, 98,130,200,200,200,146,176, 72, +197,117,156, 16,130,126,253,250,225,235,175,191,198,165, 75,151,150,246,237,219,247,221,127, 58, 63,255, 53, 2, 75,175,215,199, +191,123,247,206,113,223,190,125, 52, 33, 4,191,253,246, 27, 74, 79,217,167,105, 26, 20, 69,129,195, 41,164,120,240,224,129,174, +178,152, 83,122,189, 62, 62, 36, 36,196,126,239,222,189,220, 98,147,113, 98, 98, 34, 24,134, 97, 82, 82, 82,168,223,127,255,189, +196, 26,198,225,112,240,224,193, 3,157, 70,163,137,171,234, 77, 69, 70, 70,126,146,222,219,173,151,239,166, 94, 58,127,210,166, +113,112,139,108, 51, 43,171, 50,187,174,197, 17,223, 43,172,220, 28,234,135,149, 63, 46,177, 40, 22, 87,135,194,146,179,149, 42, +125,155, 87,105, 5,207, 62,117,129, 62,123,246,172,233,103, 90,215, 22,182,106,213,138, 1, 96, 3, 96,126,241,172,206, 34,145, +213,184,110,221,186, 51, 0,136, 0, 44,252, 39,173, 87,165, 67,131,124,110,150,171,210, 8, 13, 13,141, 5,208,174,170,199, 42, + 67,223,190,125, 99, 80, 70,192,207,191,131,255, 4,103, 49, 50,179,115, 17,243, 46, 17,133,206,232, 12,244,239, 83, 74,252,166, +180, 90, 29, 50,115,171, 20, 70, 14, 89, 57,121,136,126,155, 88,180, 52,152, 30,122,189,172,136,175,208,209,157,205, 42,168,148, +131,203,229, 54,223,176, 97, 67, 23,138,162,168, 7, 15, 30,168, 86,173, 90, 21,159,150,150,214,131,101,217, 56, 0,144, 74,165, +173, 79,158, 60,249,155, 1, 33, 25,202,235,248,134, 19, 66,154,204,158, 61,123, 10,128,230, 0,106, 2,136, 67,225,140,227,141, +159, 89,196,241, 97,255,163,220,213,198,255,202,204,196,223,127,255,125,241,215, 95,127,205, 9, 14, 14,158,219,176, 97, 67,234, +237,219,183, 72, 77, 77, 5,135,195,129,135,135, 7, 58,116,232, 0, 23, 23, 23,230,220,185,115, 63,246,234,213,107, 49,140,248, +116, 2, 43, 61, 61,189,227,176, 97,195,174, 80, 20, 85,187,244, 48, 94, 89,159, 0,192, 48,204,187,148,148,148, 10,131,144,165, +167,167,119, 92,184,112,225, 21, 14,135, 83,187, 84,252, 43, 85, 70, 70,198,215,253,250,245,219,194,229,114, 5,165,173, 93, 12, +195,188, 79, 74, 74,250,175, 58, 20,127, 28, 7,171, 99,151,158,233,127,151,211,132, 71,185, 69,158,219,137,148,212,116, 28, 10, + 75,206,202, 83,235, 91, 71,166,201, 95,252,155, 42, 26,203,178,169, 0,190, 46,231,216, 27, 0,227, 62,131, 52,146, 34,145,101, +156, 45,243, 63, 0,157, 78,151,208,190,109,107,124, 28,150,225,227,223,122,189, 62,193, 80,190,118,109, 90,149,203, 83,252,189, + 50, 62,154,166,103, 4, 7, 7,211, 51,102,204, 72,185,112,225,194, 31, 89, 89, 89,211, 89,150, 45, 81,102, 69,179, 6, 3,255, +102, 93, 85,161,112,133,135, 85,198,154,240, 89,182,119,255, 19, 51, 19,183,108,217,178, 96,214,172, 89,123,157,157,157,247, 55, +111,222,220,211,205,205,205,204,212,212, 20,185,185,185,121, 89, 89, 89,175,207,158, 61, 59,100,216,176, 97,177,198, 18,253,196, + 2, 43, 45, 45, 77, 14,160,201,167,188, 88, 37,156,181, 62,155, 46,151,106,213, 1,108, 95,245,193, 58,132,197,226,171,204,223, +149, 72,131, 28,133,110,226,198, 75, 47,215,168,116, 44,163,209, 49, 35, 35, 83,229,225,198,170,247,217, 54,140, 70,113,245, 63, +130, 23, 47, 94, 4,125,142,124,106,181,122,106,211,166, 77,127,210,235,245,107,181, 90,237, 29, 99, 73, 25,241, 57, 99,213,170, + 85,177,197,239,229,126,253,250,209, 0,112,228,200, 17,189, 49,103,254,131, 2,235,223,138, 35, 47,255,124,193,126, 44,156, 42, +251, 93, 30, 94, 39,231,223,252,187, 61, 86, 35,140, 48,226,127, 70,164,199, 1,232, 97,204, 9, 35,254,231,222,127, 70, 97,245, + 73, 65, 25,179,192, 8, 35,140, 48,194, 8, 35,140, 48,226,211,130, 0,104, 95, 78, 47,204,224,217, 1,132,144,246, 85,189,176, + 1, 43,134, 27, 57,141,156, 70, 78, 35,167,145,211,200,105,228,252,127,198,249,175, 65,105, 71,206, 79,189, 1,104,111,228, 52, +114, 26, 57,141,156, 70, 78, 35,167,145,211,200,249,111,219,140, 67,132, 70, 24, 97,132, 17, 70, 24, 97,132, 17,159, 24, 70, 39, +119, 35,140, 48,194,136, 82,144, 74,165,221, 1, 44, 70,161, 11,197,114,153, 76,118,216,152, 43, 70,252,127,130,173,173,173,196, +218,218,250, 15,138,162,106, 1, 31,134, 92, 42, 35,184, 55,244,122,125, 82,102,102,102,135,228,228,228,244,255, 38,231,191, 78, + 96,181,173,107,209,194,181,142,203,239,105,169,233, 97,249,202,220, 81,127,188,206,203,172,206,133, 9, 33,214,124, 62,127,128, + 68, 34,105,207,178,172, 43, 77,211, 17, 57, 57, 57, 87,181, 90,237, 65,150,101,243,141,143,128, 17,255, 52,252,253,253, 27,240, +249,252, 89,132,144,198, 58,157,206,153,203,229,202, 0, 60, 84,169, 84,171,195,194,194,194,140, 57,244,255, 3,132, 16,202,209, +209,241, 39, 11, 11,139,224,236,236,236, 33, 0,230, 70, 70, 70,250, 82, 20, 5, 31, 31,159,185, 82,169, 52,218,204,204,108, 87, +110,110,238,189,164,164,164,169, 85, 89, 59,206,136,207, 23,110,110,110, 33, 20, 69, 57, 23, 47,201,246,177, 32, 40, 75, 32,176, + 44, 27, 27, 30, 30, 94,110, 48,103,103,103,103, 87, 51, 51,179, 45, 0, 26,126, 44, 42, 62, 70,209, 48,219,227,220,220,220,175, + 19, 18, 18,202, 12,196,107,101,101,101,106,103,103,183,152, 16,210,143,162,168, 74, 23,252,101, 24, 70,207,178,236,145,212,212, +212,133,153,153,153,121,229,157,103,109,109,125,245,214,173, 91, 13,109,108,108, 42, 13, 75,163,211,233,144,152,152,104,219,181, +107,215, 91, 0,188,254,155,156,255, 58,129, 5,150, 26,186,122,222, 24,167,180,248,104,167,185, 27,142,123,180,240,178,105,125, + 59, 34, 61,185, 42, 20, 34,145,104,128,175,175,239,198,159,126,250,201,218,197,197,133,136,197, 98, 36, 37, 37,121, 61,121,242, +164,215,162, 69,139, 22,114,185,220, 17, 90,173,246,202,223,108, 52, 45,172,196,156, 89, 25,114,237,119,198,166,196,136,170,160, + 95,191,126,116,124,124,252, 34, 27, 27,155,111,231,204,153, 35,168, 93,187, 54, 76, 76, 76,144,154,154, 90,243,205,155, 55, 53, + 54,111,222,220,189,105,211,166, 63,171,213,234,249,161,161,161, 90, 99,142,253,111,195,209,209,241,167, 83,167, 78, 77,242,244, +244, 68,203,150, 45,239,249,251,251,155,137,197, 98, 92,188,120, 17,110,110,110,245,204,204,204, 30,110,219,182,141,187,120,241, + 98,191,227,199,143, 3,192,100, 99,174,253,239,131,162, 40,231,176,176, 48, 59,177, 88, 12,189, 94, 95, 20,189,159, 1,203,178, + 37,159,165,197,144, 94,175, 71,155, 54,109, 52, 21,113, 10,133,194,205,207,159, 63,111, 95,188,142, 95, 41, 33, 85, 38,100, 50, + 89,251, 54,109,218,108, 6, 80,102, 64,109, 59, 59,187,197,253,251,247,159, 86,191,126,125, 0, 40, 73,103,241,103,122,122, 58, + 38, 78,156, 88,114, 13,134, 97,112,235,214,173, 41,223,124,243, 13, 0,124, 83,193,189,215,178,177,177, 33,149, 45,129,183,104, +209, 34, 44, 90,180, 8, 27, 55,110, 36, 28, 14,199,162,146,252,252,228,156,255, 58,129, 69, 40,114,126,211,182,189,163,166,247, +111, 76, 86,141,109,225, 62,111,215,141,251,237,235, 88,182,188, 26,155, 21,111,160,184,154, 50,126,252,248, 21, 75,150, 44, 17, +190,126,253, 26,225,225,225,208,233,116, 48, 53, 53,133,175,175, 47,117,254,252,121,199,169, 83,167, 30,229,243,249, 35,213,106, +245,241,234,222,152,131, 25,119,181, 68, 64, 13,230,115, 56, 15,213, 58,221,233,207, 49,243, 93, 92, 92, 46,107,181,218,149,137, +137,137,215,255, 87, 42,140, 84, 42,109,198,231,243, 23,190,123,247,174, 19,203,178,186,255,143, 15, 69, 92, 92,220,146,230,205, +155, 79, 95,180,104,145,224,237,219,183,136,138,138,130, 76, 38, 67,237,218,181,225,226,226, 66, 54,110,220, 40,252,249,231,159, + 39, 63,125,250,148, 11, 96,122, 85, 44, 37, 14, 14, 14,163,219,181,107,215,199,198,198,198, 60, 49, 49, 49,231,238,221,187,167, +146,146,146,118, 84, 55, 47, 9, 33,148,141,141,205,240,110,221,186,245,177,178,178,178, 74, 78, 78,206,186,122,245,234,201,212, +212,212, 93,127,199,210, 66, 8,113, 4,224, 11,192,186,104, 87,146,139,139,203,203,183,111,223,166,126, 66, 78,153,139,139, 75, +120,117, 56,109,109,109, 37, 28, 14,231, 48, 33, 68, 90,129,133, 64,166,211,233,250, 23, 5, 56, 46, 23,102,102,102,141,221,221, +221, 17, 26, 26,138,249,243,231, 91,181,105,211, 6,111,222,188, 1, 33, 4, 51,102,204, 32, 62, 62, 62,220,164,164, 36, 4, 5, + 5,225,234,213,171, 77, 97, 68, 85,202,252, 8, 0, 11, 0,131, 88,150, 77, 47,181,223, 6,192, 73, 0,169, 44,203,246,254,167, +210, 39, 18,137,112,240,224, 65,112,185, 92,112,185, 92,100,101,101,193,217,217,185,228, 55,143,199, 43,249, 94,179,102,205, 74, +249, 24,134,105, 68,211, 52,242,243,243,161,215,235, 75,182,236,236,108,176, 44, 11,129, 64, 0,189,190,112,217,165,226, 99, 12, +195, 52,170, 32,255,250, 73,165, 82, 28, 56,112, 0,106,181,186,172,186,139, 23, 47,254, 92, 20,132,166,105,248,249,249, 81,132, +144,126, 21, 9, 44, 66, 8, 11, 0, 99,199,142, 5, 77,211, 37, 75,223, 21,127, 47,222,244,122, 61, 22, 45, 90, 84,232,176, 77, + 81,149,149,245, 39,231,252,159,175,255, 21,169,235, 54,110,150, 95,183,110,209,120,181, 80,192, 17, 49, 58, 45,244, 58, 45, 24, +157, 26, 52, 97,208,194,219, 14, 1, 53,133,200,204,202,195,252,253, 79,115,101, 25,202,224,203, 81, 25,145,149, 20,128, 75,112, +112,112,216,181,107,215, 44,254,248,227, 15, 68, 70, 70,226,135, 31,126, 0, 0, 72, 36, 18, 92,188,120, 17, 52, 77,131, 97, 24, +116,234,212, 41, 77, 38,147,121,177, 44,155, 89,141,135,186, 86,203,250,206,161,199,191,107,105, 85,111,194,209,247,201, 57,106, + 87,150,101, 63,187, 0,106, 82,169,148,229,114,185, 5, 58,157,174,251,255,130,200,146, 74,165,205,184, 92,238, 69,157, 78, 39, +230,114,185,162,119,239,222,169,254,191, 61, 16,254,254,254, 13,172,172,172, 30,156, 56,113, 66,248,232,209, 35,100,101,101, 33, + 53, 53, 21, 83,166, 76,193,214,173, 91, 81,175, 94, 61, 72, 36, 18,240,249,124, 76,156, 56, 81,145,151,151,215, 58, 36, 36,228, +177, 1,117,146,110,217,178,229,129,223,126,251,205, 69,167,211, 81, 0,160, 86,171, 17, 31, 31,175,159, 55,111, 94, 92, 72, 72, +200,160,170,138, 44, 66, 8,213,180,105,211,253,191,253,246,155, 27,159,207,167, 24,134,129, 86,171,197,155, 55,111,244,243,230, +205,123, 23, 26, 26, 58,184, 58,245,158, 16,226, 47, 22,139,125,190,254,250,235,180, 30, 61,122,104, 0,224,241,227,199,212,179, +103,207,204,234,212,169,243,126,193,130, 5, 97,213,224, 12, 52, 53, 53,245, 28, 55,110, 92,122,183,110,221,180, 60, 30,143,185, +123,247, 46, 39, 50, 50,210,204,197,197, 37,102,238,220,185,207,170, 88, 23,207,157, 56,113,162,181, 84, 42,213, 3, 96,139, 27, +120,138,162,216,162, 79,196,196,196,112,250,246,237,123, 67, 38,147,125, 89, 97,103,204,193,193,219,209,209,241,214,130, 5, 11, +172,138, 95, 82,165,183,226,178, 90,180,104,145, 38, 41, 41,169,177, 76, 38,123, 2, 35, 12, 45,247,135, 0, 26, 1,120, 9,160, + 45,203,178,233, 69,226,234, 58, 0, 31, 0,119, 89,150,109,254, 79,164,205,211,211, 51,229,197,139, 23,118,167, 78,157, 2,151, +203,197,149, 43, 87,176,117,235, 86, 28, 60,120,176, 76,145,229,232,232,136, 22, 45, 90, 36, 60,121,242,164, 70,121,156,110,110, +110, 57,209,209,209,102, 57, 57, 57,208,235,245,120,248,240, 33,118,237,218, 5, 59, 59, 59,216,216,216,192,214,214, 22,141, 26, + 53,130, 68, 34, 41, 17, 89,253,250,245,203,141,142,142, 54, 47,139,207,219,219, 91, 54,100,200, 16,199,208,208, 80,104,181,218, + 50, 5,214,180,105,211, 74, 91,145, 32,145, 72,208,163, 71,143,164, 87,175, 94,149,219,249,168, 87,175, 94,210,203,151, 47, 29, +158, 61,123,246, 65, 93, 47, 75, 16,209, 52, 13, 83, 83, 83, 52,105,210, 36,229,201,147, 39, 14,255, 77,206,255,215, 22, 44,247, + 90, 14,243,190, 27,223, 83, 4,189, 6,172, 86, 1,104, 10, 0, 77, 62, 24,117, 1, 8, 79, 4,104, 21,176,226,103, 98,227,176, + 58,102,203, 79,189,123,213,214,213,182,235,181,152,180,139,229,241, 89, 88, 88, 44,218,182,109,155,197,139, 23, 47, 16, 25, 25, +137,117,235,214, 97,233,210,165,224,241,120,200,204,204, 68,247,238,221,113,239,222, 61,104, 52, 26,204,159, 63,223,106,246,236, +217,147, 80,232,108, 90, 69,235, 21,103,235,225,221, 27,173,172,232, 12,140,108, 27, 98,189,249,242,219,175, 1,252,252, 57, 22, +192,234,213,171,197,179,102,205, 58,227,228,228,244, 89,139, 44,169, 84,218, 76, 36, 18, 93,156, 54,109,154,100,197,138, 21,159, + 68,172, 58, 59, 59,215,227,112, 56,135,212,106,245,140,164,164,164, 75,213,104,188,107, 7, 7, 7,175, 8, 15, 15, 63,150,159, +159,127,164,172,115, 76, 76, 76,250,121,122,122,246, 12, 9, 9,153,199,178,236,219,202, 56, 5, 2,193,148,153, 51,103, 10, 19, + 19, 19,145,157,157, 13, 62,159, 95,178,202, 60, 33, 4, 2,129, 0, 20, 69,129,207,231,227,171,175,190, 18,254,242,203, 47,223, + 0, 24, 88,105,157,116,112, 24,181,127,255,126, 23,141, 70, 67,201,229,114,240,120, 60,240,120, 60, 52,104,208,128,158, 57,115, +102,141, 41, 83,166,140, 7,176,169, 42,247,111,105,105, 57,108,255,254,253,110,124, 62,159, 74, 74, 74, 66,179,102,205,240,240, +225, 67, 4, 7, 7,211,179,102,205,170, 57,105,210,164,177, 0,182, 86,213,202, 36, 22,139,235, 95,191,126, 61,190, 70,141, 26, + 37,189,175,218,181,107,235,187,118,237,154, 25, 17, 17,225,121,255,254,253,140, 38, 77,154,196, 85,129,211, 73, 44, 22,123,157, + 63,127, 62,105,201,146, 37,237,182,111,223,222, 3, 0, 26, 53,106,116,122,233,210,165,215, 50, 51, 51,235,221,190,125, 59,179, + 69,139, 22, 9, 85, 72,170,181,189,189,189,238,235,175,191, 54, 45,239,132,189,123,247,102, 0,176,171,164, 94,119,167, 40,106, +113,189,122,245,204,218,180,105,131, 91,183,110, 97,242,228,201, 42,173, 86, 27, 5, 0,237,219,183,247, 88,180,104, 17, 63, 52, + 52, 20, 22, 22, 22,220,164,164,164,221, 82,169,212,232,248,110, 56,122, 0,184, 1,160, 30,128,107,132,144,254, 0,142, 2,240, + 6, 16, 9,160,239, 63,153, 56,189, 94, 15, 14,135,131,132,132, 4,252,242,203, 47,248,241,199, 31,225,238,238, 14,173, 86, 91, + 34,176, 56, 28, 14,184, 92, 46, 8, 33, 6, 47,165,165,211,233,240,248,241, 99,236,255,245, 87,204,159, 55, 15,166,166,133,213, + 84,163,209, 32, 51, 43, 11, 66,161,176,196,130, 85, 17, 88,150, 61,242,230,205,155,105,206,206,206, 31, 12, 13, 22,127, 22,181, +113, 96, 24, 6, 58,157, 14, 42,149, 10, 59,119,238,212,177, 44,123,164,146,103,178,196,226, 53,109,218, 52,168, 84,127,246,149, +125,125,125, 1, 0, 46, 46, 46,240,243,243, 43,249, 93,108,161, 50,132,115,103,211,250, 80,148, 58,219,115,209,154,226, 54, 31, +158,158,158,112,116,116, 52,136,243,255,181,192,138,138, 75, 93, 57,107,241, 79,107, 36,124,154, 59,162,179, 55,164,102, 92, 64, +100, 5, 94,203,217, 32, 22,181, 10, 43, 64,102, 44,112,121, 54,230,119,200,160,230, 40, 52, 39, 59,187, 89,217, 94,136, 46,215, +185,174, 81,141, 26, 53,112,251,246,109,212,169, 83, 7, 11, 22, 44,128,151,151, 23, 36, 18, 9, 82, 82, 82, 32,151,203, 33,145, + 72,144,155,155,139,128,128, 0,218,212,212,180, 77, 85, 5, 22, 33, 36, 96,116,247,224, 70, 28,123,111, 52,107,215, 24,151, 23, +182,150,236,189,153,248, 29, 33,100,119,233, 5, 87, 63, 23,244,237,219, 23,201,201,201,226, 13, 27, 54, 84, 91,100,185,184,184, + 92,214,104, 52, 95, 24, 96, 14,191, 30, 29, 29,221,182,186,226,234,204,153, 51, 18, 83, 83, 83,172, 88,177,226, 83,137,171, 59, + 29, 59,118, 52,187,116,233,210, 9, 71, 71,199, 94, 85, 17, 89,132,144,218,253,250,245, 59,187,107,215, 46,143,182,109,219,234, + 1,148,217,160,248,248,248,244,185,124,249,114,239,209,163, 71,215, 39,132,116,171, 76,100, 17, 66,154,214,174, 93, 27,241,241, +241, 72, 73, 73,129, 82,169, 68, 74, 74, 10, 0, 32, 33, 33, 1,206,206,206,176,176,176,128,179,179, 51, 60, 60, 60, 8, 69, 81, +193,134,164,183, 77,155, 54, 61, 0, 80, 49, 49, 49, 72, 75, 75,131,185,185, 57, 36, 18, 9,156,157,157,209,186,117,107,142,155, +155, 91,151,170, 10,172,206,157, 59,247, 17,139,197, 84,124,124, 60,222,190,125, 11,149, 74,133,168,168, 40,152,155,155,163, 93, +187,118, 92, 55, 55,183,110, 85, 21, 88, 0,234,143, 29, 59, 54,165,180,184, 42,134, 68, 34, 33, 30, 30, 30,153,214,214,214,129, + 0,226,170,194, 57,105,210,164,212,229,203,151,183,188,122,245,234,236,226,157, 87,175, 94,157, 5, 0, 63,253,244,211,109, 91, + 91,219, 64, 0, 85, 17, 88, 96, 89,150, 25, 61,122,244, 27, 30,143, 7, 62,159, 95,178, 9, 4, 2,112,185, 92,208, 52,109,110, + 0,205,220,200,200, 72, 95, 19, 19, 19, 68, 70, 70,130,166,105, 16, 66,222,200,100, 50, 95, 0,152, 61,123,118,180, 66,161,112, + 85, 42,149,232,219,183, 47,233,222,189,123,131,117,235,214,205, 3,240, 89, 8, 44, 66, 72, 67, 0,235, 0,168, 1,204, 99, 89, +246,225,231,212,190,177, 44,155, 66, 8,105, 93, 74,100, 61, 1, 32, 40, 18, 87,173, 89,150, 77,249, 7,243, 14, 12,195,128,203, +229, 98,205,154, 53,208,104, 52,248,237,183,223,112,244,232, 81, 80, 20, 85,226,232,110,102,102,134,141, 27, 55,254,197,241,189, + 50,225,182,119,239, 94,204,158, 53,171, 68, 92, 1, 0,143,199,131,131,189, 61,172,109,108, 16, 19, 19, 83,169,192, 74, 77, 77, + 93,248,232,209, 35, 84,228,228,222,187,247,159, 35,172,165,157,220, 13, 73, 39, 77,211, 80,169, 84,248,226,139, 63, 95, 31,147, + 38, 77, 42,249,158,153,153, 89,252, 76,128, 24,120,243, 52, 77, 67,193, 2, 61,133,127,238,235, 50, 99, 70,201,247,244,244,244, + 42,115,254,191, 20, 88, 45,163, 51, 55,221, 35,240,155, 53,178,221,112,169,141, 25,216,252, 20,240,218, 46,196,243, 76, 49, 54, +108, 43,124, 23, 78,235, 27,128,250,237,151, 65,189,167, 3, 70,249,235,249,223, 36, 97, 38,128, 5,101,241,217,216,216, 88,235, +116, 58, 16, 66, 32,145, 72,224,237,237, 13,161, 80,136,180,180, 52, 76,158, 60, 25, 23, 47, 94,132, 70,163, 1,143,199, 67,157, + 58,117,160,209,104, 92,171, 97,189,218,181,126,245,143, 22, 25, 97, 7, 16, 26,155, 13,177,117, 13,204, 27,212,200,114,209,111, +143, 22, 2,152,245, 57, 22,130,159,159, 31,150, 44, 89, 34, 94,184,112, 97,181, 68,150, 70,163, 89,202,229,114,155,253,248,227, +143,162, 65,131, 6,253,229,248,211,167, 79,209,183,111, 95,133, 82,169,252,161,186,226,234,244,233,211, 18, 43, 43, 43,196,199, +199,227,239, 62, 19,197,226,234,247,223,127, 55,171, 85,171, 22,234,213,171, 39, 92,187,118,173,193, 34,139, 16,226,219,187,119, +239,227,187,118,237,170, 53, 98,196,136,247, 33, 33, 33, 41,132,144,242,132,184,108,228,200,145,239,247,236,217,227, 65, 8, 57, + 91,153,200,210,233,116, 53,197, 98, 49,210,210,210, 48,117,234,212, 15, 28, 84,139,135,179, 1, 32, 50, 50, 18,206,206,206, 80, + 42,149, 78,134,220,179,149,149,149, 37, 0,140, 25, 51, 6,241,241,127,186, 43, 58, 57, 57, 33, 62, 62, 30, 58,157,206,170,170, +249,104,101,101,101,165,213,106,209,162, 69, 11, 40,149, 74, 0, 64,255,254,253,193,229,114,145,154,154, 10,141, 70, 99, 93,141, +226,177,233,218,181,171,172,188,131,102,102,102, 26, 75, 75, 75,239, 42,114, 90,119,239,222, 61,113,199,142, 29,127, 25,170,123, +244,232,209,151, 86, 86, 86, 87,173,172,172, 60,170,145, 86,166,180,160, 42,254,206,231,243,139, 45, 14, 6,245,142, 25,134,193, +185,115,231, 64,211, 52, 56,156, 63,155,196, 5, 11, 22,140,179,176,176,176,191,117,235, 22,146,147,147, 33,151,203,145,159,159, +143,186,117,235,214,105,223,190,253,211,228,228,228,119,225,225,225,189,254,105, 35, 56,128, 98,191,176,173, 0,252, 62,183,246, +173, 72,100,245, 3, 16, 82, 36,174,212, 0,250,252,147,226,170,116,217,115, 56,156,146,231, 92, 40, 20, 34, 32, 32,160, 68, 76, + 17, 66, 80, 80, 80, 0, 14,135, 83,236, 47,100, 80,227,151,157,157, 13, 71, 7, 7,152,154,154,162,174,187, 59,222, 68, 69, 1, + 64,201,119,129, 64, 0, 66, 8,116,186,138,189, 2,138,102, 2,126,131, 10,252,169,170, 41, 46,217, 98, 49, 84, 73,251, 15,134, + 97,138,219,124,246, 83,112,218,216,216, 32, 63, 63,223, 32,206,255,183, 2,107, 49, 33,212,189,186, 86,191,204, 26,222,122,120, + 11, 15, 75, 40,211,222, 66, 96,106, 3, 98,225,130, 13,219, 46,225,213,187, 66,215,168, 13, 71,195,176,247,187,142,128,200, 10, +174, 38,145,176,145,136,123,149, 39,176, 50, 51, 51,229, 90,173,214, 74, 36, 18,129,195,225,128,207,231, 35, 35, 35, 3, 11, 22, + 44,192,225,195,135,225,226,226, 2,189, 94, 15,129, 64,128,212,212, 84,240,120,188, 42,205, 78,228,112, 72,215, 69, 99, 58,215, +150, 56,184, 35,227,202,210,194,157,246,254, 24,219,157,226,175, 61,254,124, 24, 33,100, 45,203,178,169,159, 91, 33,152,152,152, +160, 81,163, 70,152, 48, 97,130,120,219,182,109,251, 0, 56, 87,229,255, 50,153,236,174, 84, 42,237, 48,111,222,188,203,137,137, +137,162,198,141, 27,195,196,196, 4, 38, 38, 38,136,136,136,192,255,177,119,237, 81, 81, 92,121,250,171,170,126, 3,205, 75,161, + 21, 80, 48, 1,154,230, 49,108, 0, 17,118,112,243, 24, 53,146, 77,102,141,102, 98, 98,226,104, 52,179,192,100, 93,204, 26, 95, +135,205,104,194, 14,171, 39,103,116, 18, 71,196,179, 74,102,207, 1, 93, 38,232,134, 56,113, 9,230,140,154,241, 57,193, 30, 26, + 21,232,238,129, 70, 4,177, 5, 58, 60,187,171,155,174,187,127,208,221,211,102,120,116, 35,137,168,245,157,115, 79, 83,221,156, +175,234,222,170,186,247,171,239,254,238,175,242,243,243,205, 44,203, 62, 63, 25,119, 76, 40, 20,150,102,103,103,251, 74, 36, 18, +232,116, 58, 4, 7, 7,223, 83, 93,157,226,234,200,145, 35,254, 74,165, 18, 13, 13, 13,200,204,204,196,236,217,179,165,155, 54, +109,154, 80,100, 57,158,120,126,125,244,232,209, 40,129, 64, 64,125,242,201, 39,243, 0,228,123,178,239,178,178,178,184,138,138, +138, 95, 81, 20,181,140,140, 17,124, 40, 18,137,218,140, 70, 99,244,156, 57,115,112,232,208, 33,208, 52,141,142,142, 14,108,223, +190, 29, 69, 69, 69, 88,176, 96, 1,228,114, 57,230,204,153, 3,157, 78, 7,169, 84,218,225,201,190,111,222,188,217,205,113, 92, +232,201,147, 39, 97, 52, 26, 93,223, 71, 70, 70,162,167,167, 7, 22,139,165,203,219,182,108,107,107,235, 2,160, 80,171,213,104, +105,105,193,210,165, 75,113,252,248,113,164,165,165,193, 17,143,213, 53,137, 83,100,103, 24,134, 76,208,254, 65, 83,201,233, 24, +180,188,229, 4, 33,132,184, 11, 42,231,223,206, 34, 16, 8, 60, 9,242,255,165, 74,165,218,249,216, 99,143,197, 23, 20, 20, 8, + 25,134, 65, 86, 86,150,242,157,119,222, 49, 72,165,210, 25, 91,183,110,245, 25,205, 12, 6,144, 28, 31, 31,239, 59, 13,186, 15, +119,151,110, 90, 46, 58,161, 40, 42,212,225,248,137, 1, 88, 29,159, 71, 40,138,122,198, 61,240,253,126, 58, 88, 59,119,238, 68, + 78, 78, 14, 20, 10, 5,182,108,217, 2,129, 64,224, 42, 20, 69,185, 28, 45,111, 16,170, 80,140,251,187, 51, 6,107,130,135,168, +239, 36, 77,131,167, 98,104,100, 92, 21,120,228,222,125, 23,156, 15,165,192,114,138,171, 45, 63, 93,184, 38, 75,233,143,154, 51, +127,194,211,143,211, 0, 43, 30,167, 11,181,129, 18,249, 66, 33,167, 35,198,177, 14,213, 6,131, 97,110, 96, 96, 32,172, 86, 43, +196, 98, 49, 18, 19, 19,113,254,252,121,176, 44, 11,139,197,226,234, 28,175, 94,189, 10,171,213,122,198,139,155,133, 81,200,133, + 31,110, 46,120, 95, 14,205, 97, 4,250,138,241,116,106, 52, 48, 67, 5,166,187, 17,191,218,248, 66,240, 63,239, 58,182, 23, 30, +196,203,220, 15,129,165,213,106, 81, 82, 82, 50,104,177, 88,126, 58, 25, 14,167,200, 42, 46, 46,174, 14, 12, 12,148, 61,249,228, +147,208,104, 52,216,180,105,147,153,101,217,127,156,108,124,151,205,102, 91,251,217,103,159,157,140,142,142,246, 93,184,112,225, + 93,118,247,100,196, 21,195, 48, 95,173, 91,183, 78, 30, 21, 21, 5,189, 94,143,128,128, 0,248,249,249, 97,222,188,121, 40, 47, + 47,151,174, 90,181,106, 92,145, 69, 8, 33, 20, 69,229,173, 92,185,178,170,180,180, 52,114,237,218,181,134,202,202,202, 42, 0, + 99,117, 38,242,229,203,151,191, 80, 90, 90, 26,185,126,253,250, 70, 0,111,147,113, 86,118,112, 28,119, 78,167,211, 61,174, 82, +169, 40,165, 82, 9,177, 88,140,240,240, 17,147, 42, 57, 57, 25,241,241,241, 16, 10,133, 0, 0,173, 86, 11, 0,151, 60,169,251, +217,179,103, 63,109,106,106, 90,151,150,150,198,204,154, 53,203, 21, 60, 43, 18,137, 80, 88, 88,104, 53, 24, 12, 39,188,109,207, + 47,191,252,242,184, 70,163,121, 51, 43, 43, 75, 16, 20, 20, 4,137, 68,130,164,164, 36,132,133,133,161,176,176,208,218,220,220, +124, 98, 18,167,169, 85,163,209, 72, 99, 99, 99, 71,237,249,101, 50,153, 63, 0,111,157,135, 27,151, 47, 95, 22,103,100,100,124, +250,249,231,159, 39,186,255,144,158,158,254,169,159,159, 95, 0,128,142, 73, 28, 43,231, 46,168,156,197, 57,101,232,137,192,106, +111,111,175,154, 53,107,214, 95, 20, 10,197, 31, 19, 18, 18, 2, 52, 26, 13, 10, 10, 10, 68, 22,139,101,110, 77, 77,141,107, 32, + 30,229, 58,196,192,192,128,108, 26,116, 31,249, 0,246, 0,240, 1,176,101, 26,138, 43, 5, 70, 2,218,227, 48, 50, 45,248,178, + 67,108, 57, 99,178,238,171,200, 34,132, 64, 40, 20, 34, 46, 46, 14, 27, 55,110,196,174, 93,187,144,151,151,135,216,216, 88,215, +185,119, 6,185,123,227, 96,137, 68, 34, 40, 20,138,145, 69, 39, 14,247, 10, 0,180, 77, 77, 16, 8, 4,224, 56, 14, 44,203, 78, +232, 96,133,134,134,238,220,189,123,247,134,236,236,108,250,219, 43,238,156,105, 37,220,139,205,102, 67, 85, 85,213,134,162,162, + 34,120,226,122, 49, 12,131,228,228,228,187,166, 5,247,237,251,107,164, 66, 74, 74, 10, 22, 47, 94,236,145,104,114,231,140,219, +241,193, 93,211,130,191, 15,249,107,179,205, 89,253, 51,196,254,242, 35,175, 56, 31, 84,140,186, 70,242, 92, 76, 96,225,150,215, +126,184, 38, 43, 70,142, 47,206, 92,193,222,223, 55, 55, 24, 58,186,192,117,106,192, 25,175, 35,255,165, 20,196, 71, 5, 35, 62, + 42, 24,249, 47,165,128,187, 93, 15,210,163, 7,145, 4,226,134, 9,237,227,216,166,187,222,127,255,125, 83,112,112, 48,100, 50, + 25,196, 98, 49,218,218,218,144,144,144, 0,137, 68,226,122, 2,165,105, 26, 5, 5, 5, 70,163,209,120,192,211,138,248,138,233, +159,237,250,183,151, 21, 34,169, 31,112,227, 12,252,229,126, 56,244,155, 15,128,254,118,128, 17,225,133, 39,255,142,153, 61, 51, +240, 25,138,162,148,211,237, 36,232,245,122,108,216,176, 97,208,108, 54,223, 83,160,123,123,123,251, 31,173, 86,235,146,162,162, +162,161,178,178,178,123, 22, 87, 78, 78,150,101,151,238,217,179,103, 64,167,211,221,147,192, 18, 8, 4, 91,109, 54,155,127, 73, + 73, 9,151,154,154,106, 95,182,108,153,125,201,146, 37,246,204,204, 76,123, 66, 66,130,125,197,138, 21,118,179,217, 44,241,241, +241,217, 61, 65,167,120,173,178,178,114,209,250,245,235, 27, 75, 75, 75, 35, 23, 44, 88, 16, 70, 8,249,197,104, 37, 45, 45, 77, +225, 20, 87, 21, 21, 21, 19,198, 96, 89, 44,150,125,197,197,197,102,231, 42, 23,177, 88,140,144,144, 16,151, 16, 22,137, 68,144, + 72, 36,176, 90,173,216,191,127,255,208,208,208,208, 94, 79,234,222,213,213,117,120,243,230,205,173,213,213,213,182,222,222, 94, + 80, 20,133,155, 55,111,162,176,176,208,122,240,224,193,155, 38,147,233,160,183,237,217,219,219, 91,186,121,243,230,150, 19, 39, + 78,216,104,154, 70, 79, 79, 15,252,253,253, 93,156,125,125,125, 94,115,102,102,102,234, 12, 6,131,255,224,224,224,104,110, 38, +229,235,235, 59, 31,192,151,222,112,166,164,164,232, 91, 91, 91,229,133,133,133,167, 23, 45, 90,180, 75, 46,151, 55,201,229,242, +166, 69,139, 22,237,254,232,163,143,254, 32,149, 74,211, 1,120,253,114, 88,154,166, 57,247,126,195, 61, 6, 75, 34,145, 64, 36, + 18,121,148,166, 34, 32, 32,224,227,226,226,226,128,142,142, 14, 88, 44, 22,168,213,106,168,213,106,180,181,181,185, 6,225, 81, +222,195,134,193,193, 65,233,253,238, 59, 8, 33,127, 32,132, 36, 19, 66,162, 9, 33,211,113,145,204,239,220,196,213, 83,132, 16, + 13,128,167, 28,219,137, 0,254,247,126, 58, 88, 78,129, 37, 16, 8,240,234,171,175,226,212,169, 83,136,137,137,113, 5,182,187, + 7,185,123, 35, 8,134,135,135,145,148,148, 4, 11,203,222, 37,208, 5, 2, 1, 66, 66, 67,161,211,233, 60,114,176, 40,138,250, + 73,118,118, 54,125,245,234, 85,168, 84, 42,212,214,214,186,138, 90,173, 70, 93, 93, 29,234,235,235,113,237,218, 53,164,166,166, +194, 96, 48,224,217,103,159,117,166,105, 24,247,210,241,212,109,114,174, 4,244,192,109,250, 46, 56, 31, 62, 7, 43, 34,196,103, +237, 15,231, 81,248,226,236, 21,124, 88,221,254, 49, 33,164,242,164,166,247,179,156,212, 97, 88, 43, 86, 33,233,165,255, 30,153, + 22, 4,192,221,174,135,181,226,117, 80, 62, 51,113,169, 83,140, 94,179,109,204,167,102,171,213,122, 49, 40, 40,232,200,225,195, +135,215,189,241,198, 27, 98, 0,240,241,241,193,219,111,191, 13, 66, 8,196, 98, 49, 24,134, 65,110,110,110,255,237,219,183,247, + 16, 66,116, 30,222, 40,178,240, 32,113,193,107, 63,255,119, 41,212, 7, 1, 90,132, 59,126, 41, 72,126,118, 29,110, 55,158, 7, +186,174, 3,140, 8, 7,118,188, 57,243,199,111,125,112, 16,192,194,233,114, 2,234,235,235,241,214, 91,111,221,179,184,250,182, +147, 85, 94, 94,254, 91,150,101,223,156, 66,206,165, 91,182,108, 57,169, 80, 40, 38, 61, 45, 98, 48, 24, 86, 71, 70, 70,174,155, +232,198,211,235,245, 19, 78,117, 16, 66,154, 41,138,122,190,165,165,229, 63, 26, 26, 26,142,143,245,127, 13, 13, 13,199, 23, 47, + 94,204, 92,188,120,113,171, 39,171, 8,107,107,107,107, 51, 50, 50,138,247,238,221,155,155,159,159, 47,147, 72, 36,240,247,247, + 71, 99, 99,163, 43, 15, 14,203,178,216,182,109,219,144,205,102,251,248,242,229,203,231, 61, 28, 8,135, 41,138,122, 37, 39, 39, +103,189, 82,169,252, 49,199,113, 51, 88,150,237, 50, 24, 12, 39,250,250,250, 38,149, 7,139, 16,194, 81, 20,181, 42, 55, 55,119, + 77,108,108,236, 10,171,213, 58,195,110,183,119,181,182,182,126,218,219,219,123,104, 50,156,231,206,157, 51,238,223,191,255, 47, + 70,163, 81, 21, 17, 17,241,141,159,159, 31,203,178, 44, 35,147,201,252,125,125,125, 83, 0,156, 7,112,205, 27,206,175,191,254, +250,214,129, 3, 7, 90, 44, 22, 75,220,129, 3, 7,206,250,251,251,159,162, 40,138, 18,137, 68, 65, 50,153,236,105, 0,167, 1, +104,189, 61, 86,134, 97,198,117,176,224, 97,124, 71, 95, 95,223,197, 29, 59,118,164, 62,241,196, 19, 40, 46, 46,238,246,243,243, +147,175, 88,177, 66, 96, 50,153,168,241, 28,172,233, 32,176, 30, 0,116, 57, 92,222,127,114,198, 92,185, 5,190,255, 14,128,233, + 62, 11,212,187,132,212,220,185,115, 93,219,238,197, 45, 6,203, 35,216,237,118,136, 68, 34, 8, 4, 2,204, 14, 11,115,137, 57, + 66, 8,116, 58, 29,186,187,187, 61, 18, 88, 52, 77, 51, 20, 69, 97,229,202,149, 30,237,247,149, 87, 94,193,233,211,167, 49,209, +116,162,251,138,191,168,168,168, 9,197,144,227, 88, 60, 94, 69, 24, 17, 17, 49, 37,156, 15,165,192,106, 53,154, 11, 55, 30,188, +188, 77,127,219, 82,249,247,218,158,141, 59, 0, 2, 4, 85,171,130,169, 37, 11,233, 54, 88, 14,102,129,242, 31, 25,108, 72,127, + 7, 40, 95, 5, 58, 16,129, 95, 87,235,111,217,136,117, 92,247,193,100, 50,229,239,219,183,143,169,174,174,126,185,168,168, 40, + 64,165, 82,225,245,215, 95, 7,203,178,168,171,171, 67, 78, 78, 78,183,209,104, 44, 49,153, 76,187, 60,173,196, 76, 63,193,187, +123,255,101,201, 12,218,214, 15,220,170, 5, 36, 1,152, 25,228,135, 63, 95, 58, 3,220,250, 26, 96, 68, 0, 35, 70,218, 15, 84, + 72,142,143, 86, 81, 20,149, 69, 8,249,106, 58,156,128, 23, 95,124,113,202,196,149,187, 32, 2,240,216, 84, 30,167, 83,100,173, + 89,179,230, 36,199,113, 62,147,177,119, 29, 57,153,236, 83,216, 57, 54, 99,130, 41, 95, 71,250,134, 10,111,120,109, 54,219, 54, +141, 70,131,220,220,220,220,213,171, 87,203,148, 74, 37,162,162,162,208,212,212,132,198,198, 70,148,148,148, 12, 13, 15, 15, 31, + 50,153, 76,155, 38, 81,255, 18, 71,153,170, 54,224, 0, 28,118,148, 41, 65, 94, 94,222,159,245,122,125, 87, 72, 72,200, 2,145, + 72,244, 3,140,196,249,220,114,236, 67, 59, 25,206,156,156, 28,181, 94,175,191, 19, 30, 30,158,225,224, 12, 4,112, 19,192,127, + 77,146,179, 75,173, 86, 71,167,167,167,115, 2,129,128, 56, 28, 6, 34, 20, 10,137, 80, 40, 36, 0, 80, 93, 93, 45, 1, 48, 97, +204,101, 71, 71,199,191, 30, 59,118, 12, 53, 53, 53, 11,250,251,251, 95, 3,240,219,193,193,193,244,111,190,249,198, 53, 8,143, +225,118, 74,120,253, 52,225,245,185,108,140,239, 59, 1,100, 77,131,227,195,123,239,189,135,146,146, 18, 76,148,129,188,170,170, + 10,152, 96,138,208,121,173, 56,197,147,213,106, 69,125,125,189,243,221,123,174,105, 65,103,138,134,225,225,225,113, 51,189,115, + 28,103,103, 89, 22, 71,143, 30,245, 72,100,149,151,151,195,108, 54,131,227, 56,143,250, 89, 71, 98, 82,116,119,119, 35, 44, 44, +204,233, 56,187,155, 34, 94,183, 41,195, 48,136,139,139,195,157, 59,119, 48,115,230, 76, 0, 35,211,130, 46,119,111, 96,224,145, +185,254,199, 77, 52,234,142,167,162, 2, 3,104, 17,117,236, 71, 49,162,167,158, 79,146, 99, 78,136, 31, 4, 98, 9,110,247,218, +241,149,190, 31,255,115,222,120,131,181,219,159, 63,213,216,163,241,208,117,202,152, 61,123,246,118,187,221,158, 72,211,180, 15, + 33,164,159, 97,152, 43,237,237,237, 59, 9, 33,245,222, 84, 34, 80,198,104,131,124,153, 0,161, 80, 76,236, 28, 7,128, 6, 40, +103, 97, 70, 62,233,145,237, 33,179, 85,100, 39, 84,101,167,241,206,250,251,221,248, 74,165,178,122, 96, 96,224,129,203,228,238, +235,235,251, 11,173, 86,251,208,102,114,119, 98,254,252,249,105, 50,153,108, 59,199,113,243,205,102,243, 44,153, 76,214, 73, 81, +212,159,250,250,250,254,243,202,149, 43, 23,248,225,243,254, 97, 42, 51,185,143,114,141,191, 0, 96,231,140, 25, 51,148,117,117, +117, 18,119, 7,203,189,191,244, 38, 47, 18,143,233,135,248,248,248,139,101,101,101,105,115,231,206,165,221, 3,217,105,154,118, + 37,199,164,105,218,181,178,244,194,133, 11,195,121,121,121,231,213,106,245, 63,140,197, 25, 19, 19, 83, 93, 83, 83,179,216,100, + 50,253,141,144,114,207,236,238,220, 30, 26, 26,194,187,239,190,251,133, 86,171, 29,245, 85, 57, 42,149,106, 79, 65, 65,193,134, +231,158,123,142,166,105,250,111, 98,174,156,175,245,113, 22,171,213,138,202,202, 74,174,180,180,244,195,235,215,175,143, 25,131, +149,146,146,114,163,182,182, 54,194,153, 50, 97,172,226,142,140,140,140,142, 11, 23, 46,132,125,159,156,143,140,192,114,116, 40, +212, 51, 49,129, 47, 19, 66,253,132, 2,149, 68, 83, 68, 60, 76,208, 72, 1,213, 62,131,146,253, 85,237,237, 67,252,109,203,227, +161,188, 81, 40,138,230, 95,242,251,104, 33, 38, 38, 70,171,213,106,163,199,185, 38,120,129,245,128,139,244,144,144,144, 83, 52, + 77, 71, 58, 69,244, 88,159, 14, 55,169,165,179,179,243, 71,157,157,157, 99,230, 83,140,136,136,120, 92, 42,149,254,134,227,184, +116, 79, 94,246, 76,211,244, 37,179,217,252,243,239,251,101,207,137,137,137,186, 75,151, 46, 61, 46,147,201,238,138, 43,116,214, +249,219,199,222,220,220,140,229,203,151, 27,212,106,117,212,247,201,249, 72, 9, 44, 30, 60,120,240,120, 84, 16, 30, 30,126,209, +106,181,170,204,102,179,208, 98,177, 8,135,135,135,239, 26,224,100, 50,153,113,112,112, 48,148,111, 41, 30, 15, 26,194,194,194, +148,129,129,129,255, 39, 20, 10, 37,163, 61, 56,124, 27,118,187,221,220,213,213,181,180,189,189,189,241,251,228,124,224, 49,218, + 10,153,169, 42, 0, 22,241,156, 60, 39,207,201,115,242,156, 60, 39,207,201,115, 62,106,133,230,181, 60, 15, 30, 60,120,240,224, +193,131,199,212,130, 23, 88, 60,120,240,224,193,131, 7, 15, 30,188,192,226,193,131, 7, 15, 30, 60,120,240,224, 5, 22, 15, 30, + 60,120,240,224,193,131,199, 35,133,255, 31, 0, 6,160,247, 56,137, 5,159,139, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 4e2608c98d9..010101a1a80 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -161,7 +161,7 @@ DEF_ICON(ICON_NODE) DEF_ICON(ICON_LOGIC) DEF_ICON(ICON_CONSOLE) DEF_ICON(ICON_PREFERENCES) -DEF_ICON(ICON_BLANK056) +DEF_ICON(ICON_ASSET_MANAGER) DEF_ICON(ICON_BLANK057) DEF_ICON(ICON_BLANK058) DEF_ICON(ICON_BLANK059) @@ -179,7 +179,7 @@ DEF_ICON(ICON_WPAINT_HLT) DEF_ICON(ICON_SCULPTMODE_HLT) DEF_ICON(ICON_POSE_HLT) DEF_ICON(ICON_PARTICLEMODE) -DEF_ICON(ICON_BLANK062) +DEF_ICON(ICON_LIGHTPAINT) DEF_ICON(ICON_BLANK063) DEF_ICON(ICON_BLANK064) DEF_ICON(ICON_BLANK065) @@ -238,7 +238,7 @@ DEF_ICON(ICON_SETTINGS) DEF_ICON(ICON_RENDER_ANIMATION) DEF_ICON(ICON_BLANK080E) DEF_ICON(ICON_BLANK080F) -DEF_ICON(ICON_BLANK080) +DEF_ICON(ICON_BOIDS) DEF_ICON(ICON_STRANDS) DEF_ICON(ICON_LIBRARY_DATA_INDIRECT) DEF_ICON(ICON_BLANK082) @@ -819,9 +819,9 @@ DEF_ICON(ICON_MATSPHERE) DEF_ICON(ICON_MATCUBE) DEF_ICON(ICON_MONKEY) DEF_ICON(ICON_HAIR) -DEF_ICON(ICON_RING) -DEF_ICON(ICON_BLANK317) -DEF_ICON(ICON_BLANK318) +DEF_ICON(ICON_ALIASED) +DEF_ICON(ICON_ANTIALIASED) +DEF_ICON(ICON_MAT_SPHERE_SKY) DEF_ICON(ICON_BLANK319) DEF_ICON(ICON_BLANK320) DEF_ICON(ICON_BLANK321) diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 4383ba8858b..55c4cbd5117 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1227,7 +1227,7 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) uiDefIconButC(block, ROW, B_MATPRV, ICON_MATCUBE, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_CUBE, 0, 0, "Preview type: Cube"); uiDefIconButC(block, ROW, B_MATPRV, ICON_MONKEY, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_MONKEY, 0, 0, "Preview type: Monkey"); uiDefIconButC(block, ROW, B_MATPRV, ICON_HAIR, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_HAIR, 0, 0, "Preview type: Hair strands"); - uiDefIconButC(block, ROW, B_MATPRV, ICON_MATSPHERE, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_SPHERE_A, 0, 0, "Preview type: Large sphere with sky"); + uiDefIconButC(block, ROW, B_MATPRV, ICON_MAT_SPHERE_SKY, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_SPHERE_A, 0, 0, "Preview type: Large sphere with sky"); } if(pr_texture) { From 6f847863a131cc61addbe6485abf2f24ae150ff1 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Fri, 31 Jul 2009 02:35:56 +0000 Subject: [PATCH 500/512] setting WITH_BF_PLAYER = False as default to scons (temporary solution to avoid linking problem reports over and over and over and over ... again) I obviously couldn't test this in all OS. If there is any problem with this commit please fell free to fix/let me know. --- config/darwin-config.py | 2 +- config/irix6-config.py | 1 + config/linux2-config.py | 2 +- config/linuxcross-config.py | 1 + config/openbsd3-config.py | 1 + config/sunos5-config.py | 1 + config/win32-mingw-config.py | 1 + config/win32-vc-config.py | 2 +- 8 files changed, 8 insertions(+), 3 deletions(-) diff --git a/config/darwin-config.py b/config/darwin-config.py index 14e6eb955ff..decf1a206d5 100644 --- a/config/darwin-config.py +++ b/config/darwin-config.py @@ -151,7 +151,7 @@ BF_GETTEXT_LIB = 'intl' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE=True -WITH_BF_PLAYER=True +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/irix6-config.py b/config/irix6-config.py index 87af6b29eb1..93d6506ccc7 100644 --- a/config/irix6-config.py +++ b/config/irix6-config.py @@ -73,6 +73,7 @@ BF_GETTEXT_LIB = 'gettextpo intl' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE='false' +WITH_BF_PLAYER = 'false' WITH_BF_BULLET = 'true' BF_BULLET = '#extern/bullet2/src' diff --git a/config/linux2-config.py b/config/linux2-config.py index b6a1eeb2c44..6b6373bb001 100644 --- a/config/linux2-config.py +++ b/config/linux2-config.py @@ -67,7 +67,7 @@ BF_GETTEXT_LIB = 'gettextlib' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = True -WITH_BF_PLAYER = True +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/linuxcross-config.py b/config/linuxcross-config.py index 5e5c44ecd69..88ad0ddd14e 100644 --- a/config/linuxcross-config.py +++ b/config/linuxcross-config.py @@ -73,6 +73,7 @@ BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = False +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/openbsd3-config.py b/config/openbsd3-config.py index 2b0621e2ed3..92f044394d6 100644 --- a/config/openbsd3-config.py +++ b/config/openbsd3-config.py @@ -60,6 +60,7 @@ BF_GETTEXT_LIB = 'intl iconv' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE=False +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/sunos5-config.py b/config/sunos5-config.py index dc067b6f568..6e970b9cab2 100644 --- a/config/sunos5-config.py +++ b/config/sunos5-config.py @@ -68,6 +68,7 @@ BF_GETTEXT_LIB = 'gettextlib' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE=False +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index d9585d7cfda..51cd120dc72 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -81,6 +81,7 @@ BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = False +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py index 8b152be437e..4df15c691c2 100644 --- a/config/win32-vc-config.py +++ b/config/win32-vc-config.py @@ -88,7 +88,7 @@ BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = True -WITH_BF_PLAYER = True +WITH_BF_PLAYER = False WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' From a1eef5bb4d1ac64cfde0a5055a889116ee855b7f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 31 Jul 2009 07:43:47 +0000 Subject: [PATCH 501/512] Animato - NLA + Realtime Animating Goodies * When doing realtime recording of animation (i.e. transforming objects + bones while animation playback is running, and auto-keying is enabled), animation will be added to a new NLA Track+Strip combo everytime a single 'loop' of the frame range has finished. This will allow 'passes' over the animation to be less destructive. * Made the evaluation of the active action (when NLA data is present), be handled as part of the normal NLA system evaluation code (as if it were just another strip in a track at the end). The immediate benefit is that there are now some settings (available in the "Animation Data" panel in the NLA Editor with a strip selected) which allow for the way the active action is combined with the NLA stack results. For instance, the way that the action extrapolates is used in the recording tweaks above. --- source/blender/blenkernel/intern/anim_sys.c | 47 +++++++++--- source/blender/editors/animation/keyframing.c | 11 ++- .../blender/editors/include/ED_screen_types.h | 11 ++- .../editors/interface/interface_anim.c | 2 +- source/blender/editors/screen/screen_edit.c | 2 +- source/blender/editors/screen/screen_ops.c | 29 ++++--- .../blender/editors/space_nla/nla_buttons.c | 75 ++++++++++++++++--- .../editors/transform/transform_generics.c | 40 ++++++++++ source/blender/makesdna/DNA_anim_types.h | 9 ++- source/blender/makesrna/RNA_enum_types.h | 3 + .../blender/makesrna/intern/rna_animation.c | 27 ++++++- source/blender/makesrna/intern/rna_nla.c | 28 +++---- 12 files changed, 233 insertions(+), 51 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index e4882d8f555..2b4a2c135eb 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -120,8 +120,15 @@ AnimData *BKE_id_add_animdata (ID *id) IdAdtTemplate *iat= (IdAdtTemplate *)id; /* check if there's already AnimData, in which case, don't add */ - if (iat->adt == NULL) - iat->adt= MEM_callocN(sizeof(AnimData), "AnimData"); + if (iat->adt == NULL) { + AnimData *adt; + + /* add animdata */ + adt= iat->adt= MEM_callocN(sizeof(AnimData), "AnimData"); + + /* set default settings */ + adt->act_influence= 1.0f; + } return iat->adt; } @@ -1190,6 +1197,9 @@ void nladata_flush_channels (ListBase *channels) */ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) { + ListBase dummy_trackslist = {NULL, NULL}; + NlaStrip dummy_strip; + NlaTrack *nlt; short track_index=0; @@ -1218,6 +1228,29 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) if (nes) nes->track= nlt; } + /* add 'active' Action (may be tweaking track) as last strip to evaluate in NLA stack + * - only do this if we're not exclusively evaluating the 'solo' NLA-track + */ + if ((adt->action) && !(adt->flag & ADT_NLA_SOLO_TRACK)) { + /* make dummy NLA strip, and add that to the stack */ + memset(&dummy_strip, 0, sizeof(NlaStrip)); + dummy_trackslist.first= dummy_trackslist.last= &dummy_strip; + + dummy_strip.act= adt->action; + dummy_strip.remap= adt->remap; + + calc_action_range(dummy_strip.act, &dummy_strip.actstart, &dummy_strip.actend, 1); + dummy_strip.start = dummy_strip.actstart; + dummy_strip.end = (IS_EQ(dummy_strip.actstart, dummy_strip.actend)) ? (dummy_strip.actstart + 1.0f): (dummy_strip.actend); + + dummy_strip.blendmode= adt->act_blendmode; + dummy_strip.extendmode= adt->act_extendmode; + dummy_strip.influence= adt->act_influence; + + /* add this to our list of evaluation strips */ + nlastrips_ctime_get_strip(&estrips, &dummy_trackslist, -1, ctime); + } + /* only continue if there are strips to evaluate */ if (estrips.first == NULL) return; @@ -1316,14 +1349,10 @@ void BKE_animsys_evaluate_animdata (ID *id, AnimData *adt, float ctime, short re /* evaluate NLA data */ if ((adt->nla_tracks.first) && !(adt->flag & ADT_NLA_EVAL_OFF)) { - /* evaluate NLA-stack */ - animsys_evaluate_nla(&id_ptr, adt, ctime); - - /* evaluate 'active' Action (may be tweaking track) on top of results of NLA-evaluation - * - only do this if we're not exclusively evaluating the 'solo' NLA-track + /* evaluate NLA-stack + * - active action is evaluated as part of the NLA stack as the last item */ - if ((adt->action) && !(adt->flag & ADT_NLA_SOLO_TRACK)) - animsys_evaluate_action(&id_ptr, adt->action, adt->remap, ctime); + animsys_evaluate_nla(&id_ptr, adt, ctime); } /* evaluate Active Action only */ else if (adt->action) diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 7bee57708ec..2da082a9b7c 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1438,10 +1438,17 @@ int autokeyframe_cfra_can_key(Scene *scene, ID *id) /* only filter if auto-key mode requires this */ if (IS_AUTOKEY_ON(scene) == 0) return 0; - else if (IS_AUTOKEY_MODE(scene, NORMAL)) + + if (IS_AUTOKEY_MODE(scene, NORMAL)) { + /* can insert anytime we like... */ return 1; - else + } + else /* REPLACE */ { + /* for whole block - only key if there's a keyframe on that frame already + * this is a valid assumption when we're blocking + tweaking + */ return id_frame_has_keyframe(id, cfra, ANIMFILTER_KEYS_LOCAL); + } } /* ******************************************* */ diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h index 3ea5dfba65c..76a2a55c29e 100644 --- a/source/blender/editors/include/ED_screen_types.h +++ b/source/blender/editors/include/ED_screen_types.h @@ -33,9 +33,18 @@ typedef struct ScreenAnimData { ARegion *ar; /* do not read from this, only for comparing if region exists */ int redraws; - int reverse; + int flag; /* flags for playback */ } ScreenAnimData; +/* for animplayer */ +enum { + /* user-setting - frame range is played backwards */ + ANIMPLAY_FLAG_REVERSE = (1<<0), + /* temporary - playback just jumped to the start/end */ + ANIMPLAY_FLAG_JUMPED = (1<<1), +}; + + typedef struct AZone { struct AZone *next, *prev; diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index d2e9236fcff..2993a1aba15 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -144,7 +144,7 @@ void ui_but_anim_autokey(uiBut *but, Scene *scene, float cfra) if(fcu && !driven) { id= but->rnapoin.id.data; - + if(autokeyframe_cfra_can_key(scene, id)) { short flag = 0; diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 817959aef13..926768c98ab 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1477,7 +1477,7 @@ void ED_screen_animation_timer(bContext *C, int redraws, int enable) screen->animtimer= WM_event_add_window_timer(win, TIMER0, (1.0/FPS)); sad->ar= CTX_wm_region(C); sad->redraws= redraws; - sad->reverse= (enable < 0); + sad->flag= (enable < 0) ? ANIMPLAY_FLAG_REVERSE : 0; screen->animtimer->customdata= sad; } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 07454088604..c9e30b8c879 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2197,39 +2197,50 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) if(scene->audio.flag & AUDIO_SYNC) { int step = floor(wt->duration * FPS); - if (sad->reverse) // XXX does this option work with audio? + if (sad->flag & ANIMPLAY_FLAG_REVERSE) // XXX does this option work with audio? scene->r.cfra -= step; else scene->r.cfra += step; wt->duration -= ((float)step)/FPS; } else { - if (sad->reverse) + if (sad->flag & ANIMPLAY_FLAG_REVERSE) scene->r.cfra--; else scene->r.cfra++; } - if (sad->reverse) { - /* jump back to end */ + /* reset 'jumped' flag before checking if we need to jump... */ + sad->flag &= ~ANIMPLAY_FLAG_JUMPED; + + if (sad->flag & ANIMPLAY_FLAG_REVERSE) { + /* jump back to end? */ if (scene->r.psfra) { - if(scene->r.cfra < scene->r.psfra) + if (scene->r.cfra < scene->r.psfra) { scene->r.cfra= scene->r.pefra; + sad->flag |= ANIMPLAY_FLAG_JUMPED; + } } else { - if(scene->r.cfra < scene->r.sfra) + if (scene->r.cfra < scene->r.sfra) { scene->r.cfra= scene->r.efra; + sad->flag |= ANIMPLAY_FLAG_JUMPED; + } } } else { - /* jump back to start */ + /* jump back to start? */ if (scene->r.psfra) { - if(scene->r.cfra > scene->r.pefra) + if (scene->r.cfra > scene->r.pefra) { scene->r.cfra= scene->r.psfra; + sad->flag |= ANIMPLAY_FLAG_JUMPED; + } } else { - if(scene->r.cfra > scene->r.efra) + if (scene->r.cfra > scene->r.efra) { scene->r.cfra= scene->r.sfra; + sad->flag |= ANIMPLAY_FLAG_JUMPED; + } } } diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index a74037d1ace..a87ab36714c 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -100,7 +100,7 @@ static void do_nla_region_buttons(bContext *C, void *arg, int event) WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_TRANSFORM, NULL); } -static int nla_panel_context(const bContext *C, PointerRNA *nlt_ptr, PointerRNA *strip_ptr) +static int nla_panel_context(const bContext *C, PointerRNA *adt_ptr, PointerRNA *nlt_ptr, PointerRNA *strip_ptr) { bAnimContext ac; bAnimListElem *ale= NULL; @@ -121,8 +121,13 @@ static int nla_panel_context(const bContext *C, PointerRNA *nlt_ptr, PointerRNA for (ale= anim_data.first; ale; ale= ale->next) { if (ale->type == ANIMTYPE_NLATRACK) { NlaTrack *nlt= (NlaTrack *)ale->data; + AnimData *adt= ale->adt; /* found it, now set the pointers */ + if (adt_ptr) { + /* AnimData pointer */ + RNA_pointer_create(ale->id, &RNA_AnimData, adt, adt_ptr); + } if (nlt_ptr) { /* NLA-Track pointer */ RNA_pointer_create(ale->id, &RNA_NlaTrack, nlt, nlt_ptr); @@ -151,16 +156,22 @@ static int nla_panel_poll(const bContext *C, PanelType *pt) } #endif +static int nla_animdata_panel_poll(const bContext *C, PanelType *pt) +{ + PointerRNA ptr; + return (nla_panel_context(C, &ptr, NULL, NULL) && (ptr.data != NULL)); +} + static int nla_track_panel_poll(const bContext *C, PanelType *pt) { PointerRNA ptr; - return (nla_panel_context(C, &ptr, NULL) && (ptr.data != NULL)); + return (nla_panel_context(C, NULL, &ptr, NULL) && (ptr.data != NULL)); } static int nla_strip_panel_poll(const bContext *C, PanelType *pt) { PointerRNA ptr; - return (nla_panel_context(C, NULL, &ptr) && (ptr.data != NULL)); + return (nla_panel_context(C, NULL, NULL, &ptr) && (ptr.data != NULL)); } static int nla_strip_actclip_panel_poll(const bContext *C, PanelType *pt) @@ -168,7 +179,7 @@ static int nla_strip_actclip_panel_poll(const bContext *C, PanelType *pt) PointerRNA ptr; NlaStrip *strip; - if (!nla_panel_context(C, NULL, &ptr)) + if (!nla_panel_context(C, NULL, NULL, &ptr)) return 0; if (ptr.data == NULL) return 0; @@ -179,6 +190,42 @@ static int nla_strip_actclip_panel_poll(const bContext *C, PanelType *pt) /* -------------- */ +/* active AnimData */ +static void nla_panel_animdata (const bContext *C, Panel *pa) +{ + PointerRNA adt_ptr; + AnimData *adt; + uiLayout *layout= pa->layout; + uiLayout *row; + uiBlock *block; + + /* check context and also validity of pointer */ + if (!nla_panel_context(C, &adt_ptr, NULL, NULL)) + return; + adt= adt_ptr.data; + + block= uiLayoutGetBlock(layout); + uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); + + /* Active Action Properties ------------------------------------- */ + /* action */ + row= uiLayoutRow(layout, 1); + uiLayoutSetEnabled(row, (adt->flag & ADT_NLA_EDIT_ON)==0); + uiItemR(row, NULL, 0, &adt_ptr, "action", 0, 0, 0); + + /* extrapolation */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &adt_ptr, "action_extrapolation", 0, 0, 0); + + /* blending */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &adt_ptr, "action_blending", 0, 0, 0); + + /* influence */ + row= uiLayoutRow(layout, 1); + uiItemR(row, NULL, 0, &adt_ptr, "action_influence", 0, 0, 0); +} + /* active NLA-Track */ static void nla_panel_track (const bContext *C, Panel *pa) { @@ -188,9 +235,9 @@ static void nla_panel_track (const bContext *C, Panel *pa) uiBlock *block; /* check context and also validity of pointer */ - if (!nla_panel_context(C, &nlt_ptr, NULL)) + if (!nla_panel_context(C, NULL, &nlt_ptr, NULL)) return; - + block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL); @@ -207,7 +254,7 @@ static void nla_panel_properties(const bContext *C, Panel *pa) uiLayout *column, *row, *subcol; uiBlock *block; - if (!nla_panel_context(C, NULL, &strip_ptr)) + if (!nla_panel_context(C, NULL, NULL, &strip_ptr)) return; block= uiLayoutGetBlock(layout); @@ -263,7 +310,7 @@ static void nla_panel_actclip(const bContext *C, Panel *pa) uiBlock *block; /* check context and also validity of pointer */ - if (!nla_panel_context(C, NULL, &strip_ptr)) + if (!nla_panel_context(C, NULL, NULL, &strip_ptr)) return; block= uiLayoutGetBlock(layout); @@ -298,7 +345,7 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa) uiBlock *block; /* check context and also validity of pointer */ - if (!nla_panel_context(C, NULL, &strip_ptr)) + if (!nla_panel_context(C, NULL, NULL, &strip_ptr)) return; block= uiLayoutGetBlock(layout); @@ -330,7 +377,7 @@ static void nla_panel_modifiers(const bContext *C, Panel *pa) uiBlock *block; /* check context and also validity of pointer */ - if (!nla_panel_context(C, NULL, &strip_ptr)) + if (!nla_panel_context(C, NULL, NULL, &strip_ptr)) return; strip= strip_ptr.data; @@ -362,6 +409,14 @@ void nla_buttons_register(ARegionType *art) { PanelType *pt; + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel animdata"); + strcpy(pt->idname, "NLA_PT_animdata"); + strcpy(pt->label, "Animation Data"); + pt->draw= nla_panel_animdata; + pt->poll= nla_animdata_panel_poll; + pt->flag= PNL_DEFAULT_CLOSED; + BLI_addtail(&art->paneltypes, pt); + pt= MEM_callocN(sizeof(PanelType), "spacetype nla panel track"); strcpy(pt->idname, "NLA_PT_track"); strcpy(pt->label, "Active Track"); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 62b68589d98..8a7bc51c19e 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -92,6 +92,7 @@ #include "ED_markers.h" #include "ED_mesh.h" #include "ED_retopo.h" +#include "ED_screen_types.h" #include "ED_space_api.h" #include "ED_uvedit.h" #include "ED_view3d.h" @@ -288,6 +289,42 @@ static void animedit_refresh_id_tags (ID *id) } } +/* for the realtime animation recording feature, handle overlapping data */ +static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) +{ + ScreenAnimData *sad= animtimer->customdata; + + /* if animtimer is running and we're not interested in only keying for available channels, + * check if there's a keyframe on the current frame + */ + if (IS_AUTOKEY_FLAG(INSERTAVAIL)==0) { + /* if playback has just looped around, we need to add a new NLA track+strip to allow a clean pass to occur */ + if (sad->flag & ANIMPLAY_FLAG_JUMPED) { + AnimData *adt= BKE_animdata_from_id(id); + + /* perform push-down manually with some differences + * NOTE: BKE_nla_action_pushdown() sync warning... + */ + if ((adt->action) && !(adt->flag & ADT_NLA_EDIT_ON)) { + 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; + + /* 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); + + /* also, adjust the AnimData's action extend mode to be on + * 'nothing' so that previous result still play + */ + adt->act_extendmode= NLASTRIP_EXTEND_NOTHING; + } + } + } +} + /* called for updating while transform acts, once per redraw */ void recalcData(TransInfo *t) { @@ -716,6 +753,8 @@ void recalcData(TransInfo *t) // TODO: maybe the ob->adt check isn't really needed? makes it too difficult to use... if (/*(ob->adt) && */(t->animtimer) && IS_AUTOKEY_ON(t->scene)) { short 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->scene, (View3D *)t->view, ob, t->mode, targetless_ik); } @@ -745,6 +784,7 @@ void recalcData(TransInfo *t) // TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes? // TODO: maybe the ob->adt check isn't really needed? makes it too difficult to use... if (/*(ob->adt) && */(t->animtimer) && IS_AUTOKEY_ON(t->scene)) { + animrecord_check_state(t->scene, &ob->id, t->animtimer); autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); } } diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 35381e4612a..0f5129a6c25 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -734,8 +734,13 @@ typedef struct AnimData { ListBase overrides; /* temp storage (AnimOverride) of values for settings that are animated (but the value hasn't been keyframed) */ /* settings for animation evaluation */ - int flag; /* user-defined settings */ - int recalc; /* depsgraph recalculation flags */ + int flag; /* user-defined settings */ + int recalc; /* depsgraph recalculation flags */ + + /* settings for active action evaluation (based on NLA strip settings) */ + short act_blendmode; /* accumulation mode for active action */ + short act_extendmode; /* extrapolation mode for active action */ + float act_influence; /* influence for active action */ } AnimData; /* Animation Data settings (mostly for NLA) */ diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index 2592a1340ec..78e65e8fc06 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -41,6 +41,9 @@ extern EnumPropertyItem beztriple_interpolation_mode_items[]; extern EnumPropertyItem fmodifier_type_items[]; +extern EnumPropertyItem nla_mode_extend_items[]; +extern EnumPropertyItem nla_mode_blend_items[]; + extern EnumPropertyItem event_value_items[]; extern EnumPropertyItem event_type_items[]; diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c index 3469d716853..76ed62f6438 100644 --- a/source/blender/makesrna/intern/rna_animation.c +++ b/source/blender/makesrna/intern/rna_animation.c @@ -26,6 +26,7 @@ #include "RNA_define.h" #include "RNA_types.h" +#include "RNA_enum_types.h" #include "rna_internal.h" @@ -187,9 +188,26 @@ void rna_def_animdata(BlenderRNA *brna) RNA_def_property_struct_type(prop, "NlaTrack"); RNA_def_property_ui_text(prop, "NLA Tracks", "NLA Tracks (i.e. Animation Layers)."); - /* Action */ + /* Active Action */ prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE); - RNA_def_property_ui_text(prop, "Action", "Active Action for this datablock."); + RNA_def_property_ui_text(prop, "Action", "Active Action for this datablock."); + + /* Active Action Settings */ + prop= RNA_def_property(srna, "action_extrapolation", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "act_extendmode"); + RNA_def_property_enum_items(prop, nla_mode_extend_items); + RNA_def_property_ui_text(prop, "Action Extrapolation", "Action to take for gaps past the Active Action's range (when evaluating with NLA)."); + + prop= RNA_def_property(srna, "action_blending", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "act_blendmode"); + RNA_def_property_enum_items(prop, nla_mode_blend_items); + RNA_def_property_ui_text(prop, "Action Blending", "Method used for combining Active Action's result with result of NLA stack."); + + prop= RNA_def_property(srna, "action_influence", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "act_influence"); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Action Influence", "Amount the Active Action contributes to the result of the NLA stack."); /* Drivers */ prop= RNA_def_property(srna, "drivers", PROP_COLLECTION, PROP_NONE); @@ -197,7 +215,10 @@ void rna_def_animdata(BlenderRNA *brna) RNA_def_property_struct_type(prop, "FCurve"); RNA_def_property_ui_text(prop, "Drivers", "The Drivers/Expressions for this datablock."); - /* Settings */ + /* General Settings */ + prop= RNA_def_property(srna, "nla_enabled", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ADT_NLA_EVAL_OFF); + RNA_def_property_ui_text(prop, "NLA Evaluation Enabled", "NLA stack is evaluated when evaluating this block."); } /* --- */ diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index bc636af6849..3b55da046b8 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -243,6 +243,19 @@ static void rna_NlaStrip_animated_time_set(PointerRNA *ptr, int value) #else +/* enum defines exported for rna_animation.c */ +EnumPropertyItem nla_mode_blend_items[] = { + {NLASTRIP_MODE_REPLACE, "REPLACE", 0, "Replace", "Result strip replaces the accumulated results by amount specified by influence."}, + {NLASTRIP_MODE_ADD, "ADD", 0, "Add", "Weighted result of strip is added to the accumlated results."}, + {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", 0, "Subtract", "Weighted result of strip is removed from the accumlated results."}, + {NLASTRIP_MODE_MULTIPLY, "MULITPLY", 0, "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, + {0, NULL, 0, NULL, NULL}}; +EnumPropertyItem nla_mode_extend_items[] = { + {NLASTRIP_EXTEND_NOTHING, "NOTHING", 0, "Nothing", "Strip has no influence past its extents."}, + {NLASTRIP_EXTEND_HOLD, "HOLD", 0, "Hold", "Hold the first frame if no previous strips in track, and always hold last frame."}, + {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame."}, + {0, NULL, 0, NULL, NULL}}; + void rna_def_nlastrip(BlenderRNA *brna) { StructRNA *srna; @@ -254,17 +267,6 @@ void rna_def_nlastrip(BlenderRNA *brna) {NLASTRIP_TYPE_TRANSITION, "TRANSITION", 0, "Transition", "NLA Strip 'transitions' between adjacent strips."}, {NLASTRIP_TYPE_META, "META", 0, "Meta", "NLA Strip acts as a container for adjacent strips."}, {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem prop_mode_blend_items[] = { - {NLASTRIP_MODE_REPLACE, "REPLACE", 0, "Replace", "Result strip replaces the accumulated results by amount specified by influence."}, - {NLASTRIP_MODE_ADD, "ADD", 0, "Add", "Weighted result of strip is added to the accumlated results."}, - {NLASTRIP_MODE_SUBTRACT, "SUBTRACT", 0, "Subtract", "Weighted result of strip is removed from the accumlated results."}, - {NLASTRIP_MODE_MULTIPLY, "MULITPLY", 0, "Multiply", "Weighted result of strip is multiplied with the accumlated results."}, - {0, NULL, 0, NULL, NULL}}; - static EnumPropertyItem prop_mode_extend_items[] = { - {NLASTRIP_EXTEND_NOTHING, "NOTHING", 0, "Nothing", "Strip has no influence past its extents."}, - {NLASTRIP_EXTEND_HOLD, "HOLD", 0, "Hold", "Hold the first frame if no previous strips in track, and always hold last frame."}, - {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame."}, - {0, NULL, 0, NULL, NULL}}; /* struct definition */ srna= RNA_def_struct(brna, "NlaStrip", NULL); @@ -286,12 +288,12 @@ void rna_def_nlastrip(BlenderRNA *brna) prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "extendmode"); - RNA_def_property_enum_items(prop, prop_mode_extend_items); + RNA_def_property_enum_items(prop, nla_mode_extend_items); RNA_def_property_ui_text(prop, "Extrapolation", "Action to take for gaps past the strip extents."); prop= RNA_def_property(srna, "blending", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "blendmode"); - RNA_def_property_enum_items(prop, prop_mode_blend_items); + RNA_def_property_enum_items(prop, nla_mode_blend_items); RNA_def_property_ui_text(prop, "Blending", "Method used for combining strip's result with accumulated result."); /* Strip extents */ From 65cb64665ac3932b392012b9d12e4310bd50ebe4 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 31 Jul 2009 08:07:41 +0000 Subject: [PATCH 502/512] 2.5 Check for old py in UI scripts. Temp fix that'll go when the move to Py 3.1 is definite! :) --- release/ui/buttons_material.py | 6 ++++++ release/ui/buttons_scene.py | 6 ++++++ release/ui/buttons_world.py | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 8c977567324..c04fbd7e1da 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -1,6 +1,12 @@ import bpy +# If python version is less than 2.4, try to get set stuff from module +try: + set +except: + from sets import Set as set + class MaterialButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index d34307d0291..f9ca02d2b4b 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -1,6 +1,12 @@ import bpy +# If python version is less than 2.4, try to get set stuff from module +try: + set +except: + from sets import Set as set + class RenderButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 62c720d09d1..e44d7102511 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -1,6 +1,12 @@ import bpy +# If python version is less than 2.4, try to get set stuff from module +try: + set +except: + from sets import Set as set + class WorldButtonsPanel(bpy.types.Panel): __space_type__ = "BUTTONS_WINDOW" __region_type__ = "WINDOW" From 3eb8000eb429a97d20fb9d403eea43bffe04175f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 31 Jul 2009 09:05:13 +0000 Subject: [PATCH 503/512] remove more unneeded args, also allow ipo to animate the ref value for KX_BlenderMaterial's --- .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 2 - .../Converter/BL_BlenderDataConversion.cpp | 37 ++++++++----------- .../Converter/BL_BlenderDataConversion.h | 3 +- .../Converter/KX_BlenderSceneConverter.cpp | 2 - .../Converter/KX_BlenderSceneConverter.h | 4 +- .../Converter/KX_ConvertActuators.cpp | 1 - .../Converter/KX_ConvertSensors.cpp | 10 ++--- .../gameengine/Converter/KX_ConvertSensors.h | 1 - source/gameengine/Expressions/Value.cpp | 7 ---- .../GamePlayer/ghost/GPG_Application.cpp | 1 - .../gameengine/Ketsji/KX_BlenderMaterial.cpp | 7 ++-- source/gameengine/Ketsji/KX_BlenderMaterial.h | 3 +- source/gameengine/Ketsji/KX_ISceneConverter.h | 1 - source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 1 - source/gameengine/Ketsji/KX_NearSensor.cpp | 2 - source/gameengine/Ketsji/KX_NearSensor.h | 3 +- .../gameengine/Ketsji/KX_PolygonMaterial.cpp | 3 +- source/gameengine/Ketsji/KX_PythonInit.cpp | 3 ++ source/gameengine/Ketsji/KX_RadarSensor.cpp | 2 - source/gameengine/Ketsji/KX_RadarSensor.h | 1 - .../Rasterizer/RAS_IPolygonMaterial.cpp | 14 +------ .../Rasterizer/RAS_IPolygonMaterial.h | 7 +--- 22 files changed, 36 insertions(+), 79 deletions(-) diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index d1b362557ad..0ed8682c092 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -385,7 +385,6 @@ extern "C" void StartKetsjiShell(struct ScrArea *area, sceneconverter->ConvertScene( startscene, dictionaryobject, - keyboarddevice, rendertools, canvas); ketsjiengine->AddScene(startscene); @@ -683,7 +682,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area, sceneconverter->ConvertScene( startscene, dictionaryobject, - keyboarddevice, rendertools, canvas); ketsjiengine->AddScene(startscene); diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 7cae1ee8c28..7a902a72795 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -324,8 +324,7 @@ bool ConvertMaterial( MTFace* tface, const char *tfaceName, MFace* mface, - MCol* mmcol, - int lightlayer, + MCol* mmcol, MTF_localLayer *layers, bool glslmat) { @@ -721,12 +720,12 @@ bool ConvertMaterial( return true; } - -RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* rendertools, KX_Scene* scene, KX_BlenderSceneConverter *converter) +/* blenderobj can be NULL, make sure its checked for */ +RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, KX_Scene* scene, KX_BlenderSceneConverter *converter) { RAS_MeshObject *meshobj; bool skinMesh = false; - int lightlayer = blenderobj->lay; + int lightlayer = blenderobj ? blenderobj->lay:(1<<20)-1; // all layers if no object. if ((meshobj = converter->FindGameMesh(mesh/*, ob->lay*/)) != NULL) return meshobj; @@ -749,7 +748,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* } // Determine if we need to make a skinned mesh - if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0) || BL_ModifierDeformer::HasCompatibleDeformer(blenderobj)) + if (blenderobj && (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0) || BL_ModifierDeformer::HasCompatibleDeformer(blenderobj))) { meshobj = new BL_SkinMeshObject(mesh); skinMesh = true; @@ -844,9 +843,8 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* tan3 = tangent[f*4 + 3]; } - /* get material */ - ma = give_current_material(blenderobj, mface->mat_nr+1); - + ma = give_current_material(blenderobj, mface->mat_nr+1); + { bool visible = true; bool twoside = false; @@ -860,7 +858,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* if (!bl_mat) bl_mat = new BL_Material(); ConvertMaterial(bl_mat, ma, tface, tfaceName, mface, mcol, - lightlayer, layers, converter->GetGLSLMaterials()); + layers, converter->GetGLSLMaterials()); visible = ((bl_mat->ras_mode & POLY_VIS)!=0); collider = ((bl_mat->ras_mode & COLLIDER)!=0); @@ -883,7 +881,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* if (kx_blmat == NULL) kx_blmat = new KX_BlenderMaterial(); - kx_blmat->Initialize(scene, bl_mat, skinMesh, lightlayer); + kx_blmat->Initialize(scene, bl_mat, skinMesh); polymat = static_cast(kx_blmat); } else { @@ -1067,8 +1065,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools* -static PHY_MaterialProps *CreateMaterialFromBlenderObject(struct Object* blenderobject, - KX_Scene *kxscene) +static PHY_MaterialProps *CreateMaterialFromBlenderObject(struct Object* blenderobject) { PHY_MaterialProps *materialProps = new PHY_MaterialProps; @@ -1101,8 +1098,7 @@ static PHY_MaterialProps *CreateMaterialFromBlenderObject(struct Object* blender return materialProps; } -static PHY_ShapeProps *CreateShapePropsFromBlenderObject(struct Object* blenderobject, - KX_Scene *kxscene) +static PHY_ShapeProps *CreateShapePropsFromBlenderObject(struct Object* blenderobject) { PHY_ShapeProps *shapeProps = new PHY_ShapeProps; @@ -1397,12 +1393,11 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj, PHY_ShapeProps* shapeprops = - CreateShapePropsFromBlenderObject(blenderobject, - kxscene); + CreateShapePropsFromBlenderObject(blenderobject); PHY_MaterialProps* smmaterial = - CreateMaterialFromBlenderObject(blenderobject, kxscene); + CreateMaterialFromBlenderObject(blenderobject); KX_ObjectProperties objprop; objprop.m_lockXaxis = (blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_X_AXIS) !=0; @@ -1732,7 +1727,7 @@ static KX_GameObject *gameobject_from_blenderobject( Mesh* mesh = static_cast(ob->data); float center[3], extents[3]; float radius = my_boundbox_mesh((Mesh*) ob->data, center, extents); - RAS_MeshObject* meshobj = BL_ConvertMesh(mesh,ob,rendertools,kxscene,converter); + RAS_MeshObject* meshobj = BL_ConvertMesh(mesh,ob,kxscene,converter); // needed for python scripting kxscene->GetLogicManager()->RegisterMeshName(meshobj->GetName(),meshobj); @@ -1914,7 +1909,6 @@ void BL_ConvertBlenderObjects(struct Main* maggie, KX_KetsjiEngine* ketsjiEngine, e_PhysicsEngine physics_engine, PyObject* pythondictionary, - SCA_IInputDevice* keydev, RAS_IRenderTools* rendertools, RAS_ICanvas* canvas, KX_BlenderSceneConverter* converter, @@ -2687,7 +2681,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie, struct Object* blenderobj = converter->FindBlenderObject(gameobj); int layerMask = (groupobj.find(blenderobj) == groupobj.end()) ? activeLayerBitInfo : 0; bool isInActiveLayer = (blenderobj->lay & layerMask)!=0; - BL_ConvertSensors(blenderobj,gameobj,logicmgr,kxscene,ketsjiEngine,keydev,layerMask,isInActiveLayer,canvas,converter); + BL_ConvertSensors(blenderobj,gameobj,logicmgr,kxscene,ketsjiEngine,layerMask,isInActiveLayer,canvas,converter); // set the init state to all objects gameobj->SetInitState((blenderobj->init_state)?blenderobj->init_state:blenderobj->state); } @@ -2725,4 +2719,3 @@ void BL_ConvertBlenderObjects(struct Main* maggie, RAS_BucketManager *bucketmanager = kxscene->GetBucketManager(); bucketmanager->OptimizeBuckets(distance); } - diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.h b/source/gameengine/Converter/BL_BlenderDataConversion.h index bf733b748e2..b8f9d1ec4e6 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.h +++ b/source/gameengine/Converter/BL_BlenderDataConversion.h @@ -34,14 +34,13 @@ #include "KX_Python.h" #include "KX_PhysicsEngineEnums.h" -class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class RAS_IRenderTools* rendertools,class KX_Scene* scene, class KX_BlenderSceneConverter *converter); +class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class KX_Scene* scene, class KX_BlenderSceneConverter *converter); void BL_ConvertBlenderObjects(struct Main* maggie, class KX_Scene* kxscene, class KX_KetsjiEngine* ketsjiEngine, e_PhysicsEngine physics_engine, PyObject* pythondictionary, - class SCA_IInputDevice* keydev, class RAS_IRenderTools* rendertools, class RAS_ICanvas* canvas, class KX_BlenderSceneConverter* sceneconverter, diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 4031b48847b..d817999393c 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -257,7 +257,6 @@ struct BlenderDebugDraw : public btIDebugDraw void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene, PyObject* dictobj, - class SCA_IInputDevice* keyinputdev, class RAS_IRenderTools* rendertools, class RAS_ICanvas* canvas) { @@ -360,7 +359,6 @@ void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene, m_ketsjiEngine, physics_engine, dictobj, - keyinputdev, rendertools, canvas, this, diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index 820f608509f..cc93a953533 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -94,7 +94,6 @@ public: virtual void ConvertScene( class KX_Scene* destinationscene, PyObject* dictobj, - class SCA_IInputDevice* keyinputdev, class RAS_IRenderTools* rendertools, class RAS_ICanvas* canvas ); @@ -149,6 +148,9 @@ public: virtual bool GetGLSLMaterials(); struct Scene* GetBlenderSceneForName(const STR_String& name); + + struct Main* GetMain() { return m_maggie; }; + }; #endif //__KX_BLENDERSCENECONVERTER_H diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp index b6fc7f1dbba..c18e4fce8a5 100644 --- a/source/gameengine/Converter/KX_ConvertActuators.cpp +++ b/source/gameengine/Converter/KX_ConvertActuators.cpp @@ -629,7 +629,6 @@ void BL_ConvertActuators(char* maggiename, tmpmesh = BL_ConvertMesh( editobact->me, blenderobject, - rendertools, scene, converter ); diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp index 37631a0523d..31a3cfbd1ac 100644 --- a/source/gameengine/Converter/KX_ConvertSensors.cpp +++ b/source/gameengine/Converter/KX_ConvertSensors.cpp @@ -28,6 +28,7 @@ * Conversion of Blender data blocks to KX sensor system */ + #ifdef HAVE_CONFIG_H #include #endif @@ -93,7 +94,6 @@ void BL_ConvertSensors(struct Object* blenderobject, SCA_LogicManager* logicmgr, KX_Scene* kxscene, KX_KetsjiEngine* kxengine, - SCA_IInputDevice* keydev, int activeLayerBitInfo, bool isInActiveLayer, RAS_ICanvas* canvas, @@ -430,9 +430,8 @@ void BL_ConvertSensors(struct Object* blenderobject, blendernearsensor->dist, blendernearsensor->resetdist, bFindMaterial, - nearpropertyname,kxscene, - physCtrl - ); + nearpropertyname, + physCtrl); } break; @@ -634,8 +633,7 @@ void BL_ConvertSensors(struct Object* blenderobject, smallmargin, largemargin, bFindMaterial, - radarpropertyname, - kxscene); + radarpropertyname); } diff --git a/source/gameengine/Converter/KX_ConvertSensors.h b/source/gameengine/Converter/KX_ConvertSensors.h index 9162a866768..630323f30b4 100644 --- a/source/gameengine/Converter/KX_ConvertSensors.h +++ b/source/gameengine/Converter/KX_ConvertSensors.h @@ -34,7 +34,6 @@ void BL_ConvertSensors(struct Object* blenderobject, class SCA_LogicManager* logicmgr, class KX_Scene* kxscene, class KX_KetsjiEngine* kxengine, - class SCA_IInputDevice* keydev, int activeLayerBitInfo, bool isInActiveLayer, class RAS_ICanvas* canvas, diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 61dabff510b..dc911e42acc 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -541,13 +541,6 @@ CValue* CValue::FindIdentifier(const STR_String& identifiername) #ifndef NO_EXP_PYTHON_EMBEDDING - -static PyMethodDef CValueMethods[] = -{ - //{ "new", CValue::PyMake , METH_VARARGS}, - { NULL,NULL} // Sentinel -}; - PyAttributeDef CValue::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("name", CValue, pyattr_get_name), { NULL } //Sentinel diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index bd332e8bbd7..f1b05c1292d 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -711,7 +711,6 @@ bool GPG_Application::startEngine(void) startscenename, startscene, dictionaryobject, - m_keyboard, m_rendertools, m_canvas); m_ketsjiengine->AddScene(startscene); diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index 30057fc039d..875f6ede452 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -61,8 +61,7 @@ KX_BlenderMaterial::KX_BlenderMaterial( void KX_BlenderMaterial::Initialize( KX_Scene *scene, BL_Material *data, - bool skin, - int lightlayer) + bool skin) { RAS_IPolyMaterial::Initialize( data->texname[0], @@ -74,8 +73,7 @@ void KX_BlenderMaterial::Initialize( data->mode, data->transp, ((data->ras_mode &ALPHA)!=0), - ((data->ras_mode &ZSORT)!=0), - lightlayer + ((data->ras_mode &ZSORT)!=0) ); mMaterial = data; mShader = 0; @@ -778,6 +776,7 @@ void KX_BlenderMaterial::UpdateIPO( mMaterial->hard = (float)(hard); mMaterial->emit = (float)(emit); mMaterial->spec_f = (float)(spec); + mMaterial->ref = (float)(ref); } diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index b29f2df98db..9ca49c992eb 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -29,8 +29,7 @@ public: void Initialize( class KX_Scene* scene, BL_Material* mat, - bool skin, - int lightlayer + bool skin ); virtual ~KX_BlenderMaterial(); diff --git a/source/gameengine/Ketsji/KX_ISceneConverter.h b/source/gameengine/Ketsji/KX_ISceneConverter.h index 5c2c0bc0ad2..45b3276e98c 100644 --- a/source/gameengine/Ketsji/KX_ISceneConverter.h +++ b/source/gameengine/Ketsji/KX_ISceneConverter.h @@ -50,7 +50,6 @@ public: virtual void ConvertScene( class KX_Scene* destinationscene, PyObject* dictobj, - class SCA_IInputDevice* keyinputdev, class RAS_IRenderTools* rendertools, class RAS_ICanvas* canvas)=0; diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index 20600be81fc..f485e2589f5 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -1605,7 +1605,6 @@ KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename) m_sceneconverter->ConvertScene(tmpscene, m_pythondictionary, - m_keyboarddevice, m_rendertools, m_canvas); diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 44842b7f5b3..b71215645b4 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -47,7 +47,6 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr, float resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* scene, PHY_IPhysicsController* ctrl, PyTypeObject* T) :KX_TouchSensor(eventmgr, @@ -55,7 +54,6 @@ KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr, bFindMaterial, false, touchedpropname, - /* scene, */ T), m_Margin(margin), m_ResetMargin(resetmargin) diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h index 63099e181a0..88292242a5d 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.h +++ b/source/gameengine/Ketsji/KX_NearSensor.h @@ -44,7 +44,7 @@ class KX_NearSensor : public KX_TouchSensor protected: float m_Margin; float m_ResetMargin; - KX_Scene* m_scene; + KX_ClientObjectInfo* m_client_info; public: KX_NearSensor(class SCA_EventManager* eventmgr, @@ -53,7 +53,6 @@ public: float resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* scene, PHY_IPhysicsController* ctrl, PyTypeObject* T=&Type); /* diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp index 506c167a905..63c1b17abc1 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp @@ -88,8 +88,7 @@ void KX_PolygonMaterial::Initialize( mode, transp, alpha, - zsort, - lightlayer); + zsort); m_tface = tface; m_mcol = mcol; m_material = ma; diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 75b29481e54..fcada7bfce4 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -2139,3 +2139,6 @@ void resetGamePythonPath() { gp_GamePythonPathOrig[0] = '\0'; } + + + diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp index 064dc9126ac..76ecc235150 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.cpp +++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp @@ -49,7 +49,6 @@ KX_RadarSensor::KX_RadarSensor(SCA_EventManager* eventmgr, double resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* kxscene, PyTypeObject* T) : KX_NearSensor( @@ -60,7 +59,6 @@ KX_RadarSensor::KX_RadarSensor(SCA_EventManager* eventmgr, resetmargin, bFindMaterial, touchedpropname, - kxscene, physCtrl, T), m_coneradius(coneradius), diff --git a/source/gameengine/Ketsji/KX_RadarSensor.h b/source/gameengine/Ketsji/KX_RadarSensor.h index 2e5a0e68bed..5eb57bdc3e0 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.h +++ b/source/gameengine/Ketsji/KX_RadarSensor.h @@ -70,7 +70,6 @@ public: double resetmargin, bool bFindMaterial, const STR_String& touchedpropname, - class KX_Scene* kxscene, PyTypeObject* T = &Type); KX_RadarSensor(); virtual ~KX_RadarSensor(); diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp index 6af00d63c2d..cb5c5a12397 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp @@ -46,8 +46,7 @@ void RAS_IPolyMaterial::Initialize( int mode, int transp, bool alpha, - bool zsort, - int lightlayer) + bool zsort) { m_texturename = texname; m_materialname = matname; @@ -59,7 +58,6 @@ void RAS_IPolyMaterial::Initialize( m_transp = transp; m_alpha = alpha; m_zsort = zsort; - //m_lightlayer = lightlayer; m_polymatid = m_newpolymatid++; m_flag = 0; m_multimode = 0; @@ -80,7 +78,6 @@ RAS_IPolyMaterial::RAS_IPolyMaterial() m_transp(0), m_alpha(false), m_zsort(false), - //m_lightlayer(0), m_polymatid(0), m_flag(0), m_multimode(0) @@ -100,8 +97,7 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname, int mode, int transp, bool alpha, - bool zsort, - int lightlayer) + bool zsort) : m_texturename(texname), m_materialname(matname), m_materialindex(materialindex), @@ -112,7 +108,6 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname, m_transp(transp), m_alpha(alpha), m_zsort(zsort), - //m_lightlayer(lightlayer), m_polymatid(m_newpolymatid++), m_flag(0), m_multimode(0) @@ -172,11 +167,6 @@ bool RAS_IPolyMaterial::Less(const RAS_IPolyMaterial& rhs) const return m_polymatid < rhs.m_polymatid; } -//int RAS_IPolyMaterial::GetLightLayer() const -//{ -// return m_lightlayer; -//} - bool RAS_IPolyMaterial::IsAlpha() const { return m_alpha || m_zsort; diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h index e19db35ccb5..a01196ef307 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h @@ -73,7 +73,6 @@ protected: int m_transp; bool m_alpha; bool m_zsort; - //int m_lightlayer; int m_materialindex; unsigned int m_polymatid; @@ -110,8 +109,7 @@ public: int mode, int transp, bool alpha, - bool zsort, - int lightlayer); + bool zsort); void Initialize(const STR_String& texname, const STR_String& matname, int materialindex, @@ -121,8 +119,7 @@ public: int mode, int transp, bool alpha, - bool zsort, - int lightlayer); + bool zsort); virtual ~RAS_IPolyMaterial() {}; /** From b7d11a5eefc76e82585b6a0f469f51a26d92f17a Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 31 Jul 2009 10:21:29 +0000 Subject: [PATCH 504/512] Tiny tweaks to modifier template. Added more logical icons for enabling modifiers in edit mode etc. --- .../editors/interface/interface_templates.c | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 55c4cbd5117..edf01f4da2c 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -432,31 +432,21 @@ static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, i /* Softbody not allowed in this situation, enforce! */ if(((md->type!=eModifierType_Softbody && md->type!=eModifierType_Collision) || !(ob->pd && ob->pd->deflect)) && (md->type!=eModifierType_Surface)) { uiItemR(row, "", ICON_SCENE, &ptr, "render", 0, 0, 0); - uiItemR(row, "", ICON_VIEW3D, &ptr, "realtime", 0, 0, 0); + uiItemR(row, "", ICON_RESTRICT_VIEW_OFF, &ptr, "realtime", 0, 0, 0); if(mti->flags & eModifierTypeFlag_SupportsEditmode) - uiItemR(row, "", ICON_VIEW3D, &ptr, "editmode", 0, 0, 0); + uiItemR(row, "", ICON_EDITMODE_HLT, &ptr, "editmode", 0, 0, 0); } - uiBlockEndAlign(block); + /* XXX uiBlockSetEmboss(block, UI_EMBOSSR); */ if(ob->type==OB_MESH && modifier_couldBeCage(md) && index<=lastCageIndex) { - int icon; //, color; - if(index==cageIndex) { - // XXX color = TH_BUT_SETTING; - icon = VICON_EDITMODE_HLT; - } else if(index Date: Fri, 31 Jul 2009 12:51:18 +0000 Subject: [PATCH 505/512] Bug fix in low value setting. Originally checked against the wrong channel (chroma) instead of the luminence channel. Changed default value for high value to 1.0 from 0.0. --- source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c b/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c index 973d74d71ff..9aebd999b29 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c @@ -53,7 +53,7 @@ static void do_luma_matte(bNode *node, float *out, float *in) if(in[0]>c->t1) { alpha=1.0; } - else if(in[1]t2){ + else if(in[0]t2){ alpha=0.0; } else {/*blend */ @@ -99,7 +99,7 @@ static void node_composit_init_luma_matte(bNode *node) { NodeChroma *c= MEM_callocN(sizeof(NodeChroma), "node chroma"); node->storage=c; - c->t1= 0.0f; + c->t1= 1.0f; c->t2= 0.0f; }; From 50ea547176c4769856050cff2af0fac809342ce0 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Fri, 31 Jul 2009 14:38:42 +0000 Subject: [PATCH 506/512] Fields UI: Several attempts to follow UI guide and other things leaded to a really confusing UI (on the left): http://666kb.com/i/bb49zl2t6ojvk7tax.png We tried now to connect top-down with left-right, having top-down for the big picture (like already used in textures panel). Other fields still missing. Approved by William, another small fix ("type" in one row) suggested by DingTo (not visible in the screenshot). --- release/ui/buttons_physics_field.py | 109 ++++++++++++++-------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index b9c81042a13..9a24fb7cd21 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -22,51 +22,55 @@ class PHYSICS_PT_field(PhysicButtonsPanel): #layout.active = field.enabled - split = layout.split(percentage=0.3) - - split.itemL(text="Type:") - split.itemR(field, "type", text="") - split = layout.split() col = split.column() - - if field.type == "GUIDE": + col.itemR(field, "type", text="") + + col = split.column() + split = layout.split(percentage=0.5) + + if field.type == 'NONE': + col = split.column() + + elif field.type == 'GUIDE': + col = split.column() col.itemR(field, "guide_path_add") - elif field.type == "WIND": + elif field.type == 'WIND': col.itemR(field, "strength") col = split.column() col.itemR(field, "noise") col.itemR(field, "seed") - elif field.type == "VORTEX": + elif field.type == 'VORTEX': col.itemR(field, "strength") col = split.column() - col.itemL(text="") - elif field.type in ("SPHERICAL", "CHARGE", "LENNARDJ"): + elif field.type in ('SPHERICAL', 'CHARGE', 'LENNARDJ'): + col = split.column() col.itemR(field, "strength") col = split.column() col.itemR(field, "planar") + col = split.column() col.itemR(field, "surface") - elif field.type == "BOID": + elif field.type == 'BOID': col.itemR(field, "strength") col = split.column() col.itemR(field, "surface") - elif field.type == "MAGNET": + elif field.type == 'MAGNET': col.itemR(field, "strength") col = split.column() col.itemR(field, "planar") - elif field.type == "HARMONIC": + elif field.type == 'HARMONIC': col.itemR(field, "strength") col.itemR(field, "harmonic_damping", text="Damping") @@ -74,81 +78,80 @@ class PHYSICS_PT_field(PhysicButtonsPanel): col.itemR(field, "surface") col.itemR(field, "planar") - elif field.type == "TEXTURE": + elif field.type == 'TEXTURE': col.itemR(field, "strength") col.itemR(field, "texture", text="") - col.itemR(field, "texture_mode") - col.itemR(field, "texture_nabla") - - col = split.column() - col.itemR(field, "use_coordinates") - col.itemR(field, "root_coordinates") col.itemR(field, "force_2d") - if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET", "BOID"): - layout.itemS() + col = split.column() + col.itemR(field, "texture_mode", text="") + col.itemR(field, "texture_nabla") + col.itemR(field, "use_coordinates") + col.itemR(field, "root_coordinates") + + if field.type in ('HARMONIC', 'SPHERICAL', 'CHARGE', 'WIND', 'VORTEX', 'TEXTURE', 'MAGNET', 'BOID'): + layout.itemL(text="Falloff:") layout.itemR(field, "falloff_type", expand=True) - - row = layout.row() - row.itemR(field, "falloff_power", text="Power") - row.itemR(field, "positive_z", text="Positive Z") - - layout.itemS() - split = layout.split() + + split = layout.split(percentage=0.35) col = split.column() - col.itemR(field, "use_min_distance", text="Minimum") + col.itemR(field, "positive_z", text="Positive Z") + col.itemR(field, "use_min_distance", text="Use Minimum") + col.itemR(field, "use_max_distance", text="Use Maximum") + + col = split.column() + col.itemR(field, "falloff_power", text="Power") + sub = col.column() sub.active = field.use_min_distance sub.itemR(field, "minimum_distance", text="Distance") - col = split.column() - col.itemR(field, "use_max_distance", text="Maximum") sub = col.column() sub.active = field.use_max_distance sub.itemR(field, "maximum_distance", text="Distance") - if field.falloff_type == "CONE": - layout.itemS() - layout.itemL(text="Angular:") + if field.falloff_type == 'CONE': - row = layout.row() - row.itemR(field, "radial_falloff", text="Power") - row.itemL() + layout.itemS() - split = layout.split() + split = layout.split(percentage=0.35) col = split.column() - col.itemR(field, "use_radial_min", text="Minimum") + col.itemL(text="Angular:") + col.itemR(field, "use_radial_min", text="Use Minimum") + col.itemR(field, "use_radial_max", text="Use Maximum") + + col = split.column() + col.itemR(field, "radial_falloff", text="Power") + sub = col.column() sub.active = field.use_radial_min sub.itemR(field, "radial_minimum", text="Angle") - col = split.column() - col.itemR(field, "use_radial_max", text="Maximum") sub = col.column() sub.active = field.use_radial_max sub.itemR(field, "radial_maximum", text="Angle") - elif field.falloff_type == "TUBE": - layout.itemS() - layout.itemL(text="Radial:") + elif field.falloff_type == 'TUBE': - row = layout.row() - row.itemR(field, "radial_falloff", text="Power") - row.itemL() + layout.itemS() - split = layout.split() + split = layout.split(percentage=0.35) + + col = split.column() + col.itemL(text="Radial:") + col.itemR(field, "use_radial_min", text="Use Minimum") + col.itemR(field, "use_radial_max", text="Use Maximum") col = split.column() - col.itemR(field, "use_radial_min", text="Minimum") + col.itemR(field, "radial_falloff", text="Power") + sub = col.column() sub.active = field.use_radial_min sub.itemR(field, "radial_minimum", text="Distance") - col = split.column() - col.itemR(field, "use_radial_max", text="Maximum") sub = col.column() sub.active = field.use_radial_max sub.itemR(field, "radial_maximum", text="Distance") From fb52042375e799127c01257cbf25bdf2ba1266d8 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 31 Jul 2009 15:36:14 +0000 Subject: [PATCH 507/512] 2.5 Field Panels: * Attempt to make it a bit more consistent. ;-) --- release/ui/buttons_physics_field.py | 52 ++++++++++++----------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 9a24fb7cd21..3b054f7d557 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -22,72 +22,62 @@ class PHYSICS_PT_field(PhysicButtonsPanel): #layout.active = field.enabled + split = layout.split(percentage=0.2) + + split.itemL(text="Type:") + split.itemR(field, "type",text="") + split = layout.split() - col = split.column() - col.itemR(field, "type", text="") - - col = split.column() - split = layout.split(percentage=0.5) - - if field.type == 'NONE': - col = split.column() - - elif field.type == 'GUIDE': - col = split.column() - col.itemR(field, "guide_path_add") + if field.type == 'GUIDE': + layout.itemR(field, "guide_path_add") elif field.type == 'WIND': - col.itemR(field, "strength") + split.itemR(field, "strength") col = split.column() col.itemR(field, "noise") col.itemR(field, "seed") elif field.type == 'VORTEX': - col.itemR(field, "strength") + split.itemR(field, "strength") + split.itemL() - col = split.column() - elif field.type in ('SPHERICAL', 'CHARGE', 'LENNARDJ'): - col = split.column() - col.itemR(field, "strength") + split.itemR(field, "strength") col = split.column() col.itemR(field, "planar") - col = split.column() col.itemR(field, "surface") elif field.type == 'BOID': - col.itemR(field, "strength") - - col = split.column() - col.itemR(field, "surface") + split.itemR(field, "strength") + split.itemR(field, "surface") elif field.type == 'MAGNET': - col.itemR(field, "strength") - - col = split.column() - col.itemR(field, "planar") + split.itemR(field, "strength") + split.itemR(field, "planar") elif field.type == 'HARMONIC': + col = split.column() col.itemR(field, "strength") col.itemR(field, "harmonic_damping", text="Damping") col = split.column() - col.itemR(field, "surface") col.itemR(field, "planar") + col.itemR(field, "surface") elif field.type == 'TEXTURE': + col = split.column() col.itemR(field, "strength") col.itemR(field, "texture", text="") - col.itemR(field, "force_2d") - - col = split.column() col.itemR(field, "texture_mode", text="") col.itemR(field, "texture_nabla") + + col = split.column() col.itemR(field, "use_coordinates") col.itemR(field, "root_coordinates") + col.itemR(field, "force_2d") if field.type in ('HARMONIC', 'SPHERICAL', 'CHARGE', 'WIND', 'VORTEX', 'TEXTURE', 'MAGNET', 'BOID'): From fe850bd1637b9d0efd28cfcc648903172d7b9303 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Fri, 31 Jul 2009 16:19:26 +0000 Subject: [PATCH 508/512] Changed texture layers list to display as a proper list. This makes the order clearer, and you can see names. The list always displays its full length though, because texture layers are pre-populated with all 18 texture layers. Would be nice if this was eventually more dynamic, resembling the way you add/remove material indices. --- release/ui/buttons_texture.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index d638d1356f9..5b1269c982c 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -62,8 +62,8 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): if id: row = layout.row() - row.template_list(id, "textures", id, "active_texture_index", type="ICONS") - + row.template_list(id, "textures", id, "active_texture_index", rows=2) + split = layout.split(percentage=0.65) if id: From 0949d48d25efdb703e7b411b4403f3cdf0eb5308 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 31 Jul 2009 23:15:00 +0000 Subject: [PATCH 509/512] missed this line in last commit --- source/gameengine/GamePlayer/ghost/GPG_Application.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index f1b05c1292d..983bd5d1327 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -708,7 +708,6 @@ bool GPG_Application::startEngine(void) loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length); m_sceneconverter->ConvertScene( - startscenename, startscene, dictionaryobject, m_rendertools, From c1438a57db01dfd69c48672451cc6b81d518015f Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Sat, 1 Aug 2009 01:39:10 +0000 Subject: [PATCH 510/512] tweaks for linking openEXR on osx/ppc - previous switch per cpu architecture was unnecessary and broke compilation --- CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fc6a3d3ade8..d2595bd0138 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -382,11 +382,7 @@ IF(APPLE) SET(OPENEXR ${LIBDIR}/openexr) SET(OPENEXR_INC ${OPENEXR}/include/OpenEXR ${OPENEXR}/include) - IF(CMAKE_OSX_ARCHITECTURES MATCHES i386) - SET(OPENEXR_LIB Iex Half IlmImf Imath IlmThread) - ELSE(CMAKE_OSX_ARCHITECTURES MATCHES i386) - SET(OPENEXR_LIB Iex Half IlmImf Imath) - ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES i386) + SET(OPENEXR_LIB Iex Half IlmImf Imath IlmThread) SET(OPENEXR_LIBPATH ${OPENEXR}/lib) SET(LLIBS stdc++ SystemStubs) From dc90e758b4c91a0c7e6406498301e82ccecf2fdb Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 1 Aug 2009 05:10:57 +0000 Subject: [PATCH 511/512] 2.5 - More tweaks to realtime record * New NLA Tracks/Strips are now only created if the 'layered' button (visible in the timeline header when autokeying is on, and the playback is running) is enabled. This multiple bones to be able to be animated in the same action, but done in multiple passes. * Made Alt-A work in timeline header too. --- .../blender/editors/space_time/space_time.c | 2 +- .../blender/editors/space_time/time_header.c | 15 +++++-- .../editors/transform/transform_generics.c | 40 +++++++++++-------- source/blender/makesdna/DNA_scene_types.h | 2 +- source/blender/makesdna/DNA_userdef_types.h | 3 ++ 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 61488db0007..8445f1b47e7 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -422,7 +422,7 @@ void ED_spacetype_time(void) art= MEM_callocN(sizeof(ARegionType), "spacetype time region"); art->regionid = RGN_TYPE_HEADER; art->minsizey= HEADERY; - art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES; art->init= time_header_area_init; art->draw= time_header_area_draw; diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index 436a841deb8..fb8c28fd751 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -447,6 +447,7 @@ void time_header_buttons(const bContext *C, ARegion *ar) ScrArea *sa= CTX_wm_area(C); SpaceTime *stime= CTX_wm_space_time(C); Scene *scene= CTX_data_scene(C); + wmTimer *animtimer= CTX_wm_screen(C)->animtimer; uiBlock *block; uiBut *but; int xco, yco= 3; @@ -536,7 +537,7 @@ void time_header_buttons(const bContext *C, ARegion *ar) RNA_boolean_set(uiButGetOperatorPtrRNA(but), "next", 0); xco+= XIC; - if(CTX_wm_screen(C)->animtimer) { + if (animtimer) { /* pause button 2*size to keep buttons in place */ uiDefIconBut(block, BUT, B_TL_STOP, ICON_PAUSE, xco, yco, XIC*2, YIC, 0, 0, 0, 0, 0, "Stop Playing Timeline"); @@ -568,13 +569,21 @@ void time_header_buttons(const bContext *C, ARegion *ar) uiDefIconButBitS(block, TOG, AUTOKEY_ON, B_REDRAWALL, ICON_REC, xco, yco, XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones"); xco+= XIC; - - if(IS_AUTOKEY_ON(scene)) { + + if (IS_AUTOKEY_ON(scene)) { uiDefButS(block, MENU, B_REDRAWALL, "Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5", xco, yco, (int)5.5*XIC, YIC, &(scene->toolsettings->autokey_mode), 0, 1, 0, 0, "Mode of automatic keyframe insertion for Objects and Bones"); xco+= (5.5*XIC); + + if (animtimer) { + uiDefButBitS(block, TOG, ANIMRECORD_FLAG_WITHNLA, B_REDRAWALL, "Layered", + xco,yco, XIC*2.5, YIC, + &(scene->toolsettings->autokey_flag),0, 1, 0, 0, + "Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking."); + xco+= (3*XIC); + } } else xco+= 6; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 8a7bc51c19e..2279bf4dff5 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -294,10 +294,12 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) { ScreenAnimData *sad= animtimer->customdata; - /* if animtimer is running and we're not interested in only keying for available channels, - * check if there's a keyframe on the current frame + /* check if we need a new strip if: + * - 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(INSERTAVAIL)==0) { + if (IS_AUTOKEY_FLAG(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->flag & ANIMPLAY_FLAG_JUMPED) { AnimData *adt= BKE_animdata_from_id(id); @@ -306,20 +308,26 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) * NOTE: BKE_nla_action_pushdown() sync warning... */ if ((adt->action) && !(adt->flag & ADT_NLA_EDIT_ON)) { - NlaStrip *strip= add_nlastrip_to_stack(adt, adt->action); + float astart, aend; - /* clear reference to action now that we've pushed it onto the stack */ - adt->action->id.us--; - 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); - - /* also, adjust the AnimData's action extend mode to be on - * 'nothing' so that previous result still play - */ - adt->act_extendmode= NLASTRIP_EXTEND_NOTHING; + /* 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); + + /* clear reference to action now that we've pushed it onto the stack */ + adt->action->id.us--; + 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); + + /* also, adjust the AnimData's action extend mode to be on + * 'nothing' so that previous result still play + */ + adt->act_extendmode= NLASTRIP_EXTEND_NOTHING; + } } } } diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 28da3ba1316..752f756401c 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -570,7 +570,7 @@ typedef struct ToolSettings { float clean_thresh; /* Auto-Keying Mode */ - short autokey_mode, pad2; /* defines in DNA_userdef_types.h */ + short autokey_mode, autokey_flag; /* defines in DNA_userdef_types.h */ /* Retopo */ char retopo_mode; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index bda4355d30b..f61b4b2904d 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -404,9 +404,12 @@ extern UserDef U; /* from blenkernel blender.c */ #define AUTOKEY_MODE_EDITKEYS 5 /* Auto-Keying flag */ + /* U.autokey_flag */ #define AUTOKEY_FLAG_INSERTAVAIL (1<<0) #define AUTOKEY_FLAG_INSERTNEEDED (1<<1) #define AUTOKEY_FLAG_AUTOMATKEY (1<<2) + /* toolsettings->autokey_flag */ +#define ANIMRECORD_FLAG_WITHNLA (1<<10) /* transopts */ From 78bbe5c479f80a331528d730486770c4f46e74fc Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 1 Aug 2009 06:03:08 +0000 Subject: [PATCH 512/512] 2.5 - Giving shapekeys UI a bit of attention * Separated value and range sliders for the value into two separate rows. Value comes before the range settings since it's used more often, and is drawn as a slider instead. * Tweaked ranges for the sliders so that they will work sanely. --- release/ui/buttons_data_mesh.py | 6 +++++- source/blender/editors/object/editkey.c | 6 ++++++ source/blender/editors/transform/transform.c | 5 +++++ .../editors/transform/transform_generics.c | 6 ++---- source/blender/makesrna/intern/rna_key.c | 17 +++++++++++++++++ 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 87c4a596b4d..882a4ad639e 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -125,7 +125,11 @@ class DATA_PT_shape_keys(DataButtonsPanel): if ob.active_shape_key_index != 0: if not ob.shape_key_lock: row = layout.row(align=True) - row.itemR(kb, "value", text="") + row.itemL(text="Value:") + row.itemR(kb, "value", text="", slider=True) + + row = layout.row(align=True); + row.itemL(text="Range:") row.itemR(kb, "slider_min", text="Min") row.itemR(kb, "slider_max", text="Max") diff --git a/source/blender/editors/object/editkey.c b/source/blender/editors/object/editkey.c index f38c03fb284..82194a4c3b4 100644 --- a/source/blender/editors/object/editkey.c +++ b/source/blender/editors/object/editkey.c @@ -164,14 +164,20 @@ static KeyBlock *add_keyblock(Scene *scene, Key *key) kb= MEM_callocN(sizeof(KeyBlock), "Keyblock"); BLI_addtail(&key->block, kb); kb->type= KEY_CARDINAL; + tot= BLI_countlist(&key->block); if(tot==1) strcpy(kb->name, "Basis"); else sprintf(kb->name, "Key %d", tot-1); + + // XXX this is old anim system stuff? (i.e. the 'index' of the shapekey) kb->adrcode= tot-1; key->totkey++; if(key->totkey==1) key->refkey= kb; + kb->slidermin= 0.0f; + kb->slidermax= 1.0f; + // XXX kb->pos is the confusing old horizontal-line RVK crap in old IPO Editor... if(key->type == KEY_RELATIVE) kb->pos= curpos+0.1; diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index e3e4822b383..510193fdade 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -93,6 +93,7 @@ //#include "BSE_view.h" #include "ED_image.h" +#include "ED_keyframing.h" #include "ED_screen.h" #include "ED_space_api.h" #include "ED_markers.h" @@ -298,6 +299,10 @@ static void viewRedrawForce(bContext *C, TransInfo *t) { /* Do we need more refined tags? */ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + + /* for realtime animation record - send notifiers recognised by animation editors */ + if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) + WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL); } else if (t->spacetype == SPACE_ACTION) { //SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 2279bf4dff5..6622d82545d 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -758,8 +758,7 @@ void recalcData(TransInfo *t) * (i.e. uneditable animation values) */ // TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes? - // TODO: maybe the ob->adt check isn't really needed? makes it too difficult to use... - if (/*(ob->adt) && */(t->animtimer) && IS_AUTOKEY_ON(t->scene)) { + if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) { short 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); @@ -790,8 +789,7 @@ void recalcData(TransInfo *t) * (i.e. uneditable animation values) */ // TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes? - // TODO: maybe the ob->adt check isn't really needed? makes it too difficult to use... - if (/*(ob->adt) && */(t->animtimer) && IS_AUTOKEY_ON(t->scene)) { + if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) { animrecord_check_state(t->scene, &ob->id, t->animtimer); autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); } diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 7297ee8cb97..216a1d05079 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -47,6 +47,21 @@ #include "WM_api.h" #include "WM_types.h" +static void rna_ShapeKey_value_set(PointerRNA *ptr, float value) +{ + KeyBlock *data= (KeyBlock*)ptr->data; + CLAMP(value, data->slidermin, data->slidermax); + data->curval= value; +} + +static void rna_ShapeKey_value_range(PointerRNA *ptr, float *min, float *max) +{ + KeyBlock *data= (KeyBlock*)ptr->data; + + *min= data->slidermin; + *max= data->slidermax; +} + static Key *rna_ShapeKey_find_key(ID *id) { switch(GS(id->name)) { @@ -345,6 +360,7 @@ static void rna_def_keyblock(BlenderRNA *brna) /* for now, this is editable directly, as users can set this even if they're not animating them (to test results) */ prop= RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "curval"); + RNA_def_property_float_funcs(prop, NULL, "rna_ShapeKey_value_set", "rna_ShapeKey_value_range"); RNA_def_property_ui_text(prop, "Value", "Value of shape key at the current frame."); RNA_def_property_update(prop, 0, "rna_Key_update_data"); @@ -380,6 +396,7 @@ static void rna_def_keyblock(BlenderRNA *brna) prop= RNA_def_property(srna, "slider_max", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "slidermax"); RNA_def_property_range(prop, -10.0f, 10.0f); + RNA_def_property_float_default(prop, 1.0f); RNA_def_property_ui_text(prop, "Slider Max", "Maximum for slider."); prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);

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 la->g= la->b= la->k= 1.0f; la->haint= la->energy= 1.0f; - la->dist= 20.0f; + la->dist= 25.0f; la->spotsize= 45.0f; la->spotblend= 0.15f; la->att2= 1.0f; @@ -734,7 +734,7 @@ void *add_lamp(char *name) la->ray_samp_method = LA_SAMP_HALTON; la->adapt_thresh = 0.001f; la->preview=NULL; - la->falloff_type = LA_FALLOFF_INVLINEAR; + la->falloff_type = LA_FALLOFF_INVSQUARE; la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f); la->sun_effect_type = 0; la->horizon_brightness = 1.0; diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 598336886c2..2ab67ed6151 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -223,6 +223,7 @@ Scene *add_scene(char *name) sce->r.frs_sec= 25; sce->r.frs_sec_base= 1; sce->r.ocres = 128; + sce->r.color_mgt_flag |= R_COLOR_MANAGEMENT; sce->r.bake_mode= 1; /* prevent to include render stuff here */ sce->r.bake_filter= 8; diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h index 787579250ed..a4f49779ca1 100644 --- a/source/blender/blenlib/BLI_arithb.h +++ b/source/blender/blenlib/BLI_arithb.h @@ -339,7 +339,6 @@ void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr); void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv); void xyz_to_rgb(float x, float y, float z, float *r, float *g, float *b, int colorspace); int constrain_rgb(float *r, float *g, float *b); -void gamma_correct_rgb(float *r, float *g, float *b); unsigned int hsv_to_cpack(float h, float s, float v); unsigned int rgb_to_cpack(float r, float g, float b); void cpack_to_rgb(unsigned int col, float *r, float *g, float *b); diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c index f111e94a141..03be10dd0b1 100644 --- a/source/blender/blenlib/intern/arithb.c +++ b/source/blender/blenlib/intern/arithb.c @@ -3542,33 +3542,10 @@ int constrain_rgb(float *r, float *g, float *b) if (w > 0) { *r += w; *g += w; *b += w; - return 1; /* Colour modified to fit RGB gamut */ + return 1; /* Color modified to fit RGB gamut */ } - return 0; /* Colour within RGB gamut */ -} - -/*Transform linear RGB values to nonlinear RGB values. Rec. - 709 is ITU-R Recommendation BT. 709 (1990) ``Basic - Parameter Values for the HDTV Standard for the Studio and - for International Programme Exchange'', formerly CCIR Rec. - 709.*/ -static void gamma_correct(float *c) -{ - /* Rec. 709 gamma correction. */ - float cc = 0.018f; - - if (*c < cc) - *c *= ((1.099f * (float)pow(cc, 0.45)) - 0.099f) / cc; - else - *c = (1.099f * (float)pow(*c, 0.45)) - 0.099f; -} - -void gamma_correct_rgb(float *r, float *g, float *b) -{ - gamma_correct(r); - gamma_correct(g); - gamma_correct(b); + return 0; /* Color within RGB gamut */ } diff --git a/source/blender/editors/datafiles/B.blend.c b/source/blender/editors/datafiles/B.blend.c index 03d1d00cccf..1a77d99ef2f 100644 --- a/source/blender/editors/datafiles/B.blend.c +++ b/source/blender/editors/datafiles/B.blend.c @@ -1,525 +1,613 @@ /* DataToC output of file */ -int datatoc_B_blend_size= 106004; +int datatoc_B_blend_size= 106008; char datatoc_B_blend[]= { - 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0, -128, 13,156,230,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, 71, 76, 79, 66, 40, 0, 0, 0,112, 13,156,230,255,127, 0, 0, -184, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 48, 0, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, 48, 3,160, 2, 0, 0, 0, 0, - 32,116,160, 2, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 87, 77, 0, 0,208, 0, 0, 0, 0, 1,160, 2, 0, 0, 0, 0, - 72, 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, - 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, - 16, 2,160, 2, 0, 0, 0, 0, 16, 2,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 64,203,233, 2, 0, 0, 0, 0, -224,220,232, 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, 80,142,166, 2, 0, 0, 0, 0,224, 48,170, 2, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, - 16, 2,160, 2, 0, 0, 0, 0, 73, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,218,132, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48, 3,160, 2, 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, - 5, 0, 30, 0,118, 7, 97, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0,192,141,166, 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,128,246,196, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,206,238, 2, 0, 0, 0, 0, 16,206,238, 2, 0, 0, 0, 0, - 0,143,166, 2, 0, 0, 0, 0,112,144,166, 2, 0, 0, 0, 0,160,239,169, 2, 0, 0, 0, 0,192, 54,170, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 48, 3,160, 2, 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, + 66, 76, 69, 78, 68, 69, 82, 95,118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0, 64,245, 34, 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, 71, 76, 79, 66, 32, 0, 0, 0,208,244, 34, 0,186, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 48, + 0, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,144,247, 75, 1, 8,120, 76, 1, 0, 16, 0, 0,128, 32, 4, 0, 87, 77, 0, 0, +140, 0, 0, 0, 8,246, 75, 1, 76, 1, 0, 0, 1, 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, 1, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,246, 75, 1,200,246, 75, 1,200,246, 75, 1,200,246, 75, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 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,184,144, 73, 1, 0,116, 74, 1, 68, 65, 84, 65, +148, 0, 0, 0,200,246, 75, 1, 77, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,243, 75, 1, 1, 0, 0, 0, + 0, 0, 0, 0,144,247, 75, 1, 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,252,255, 23, 0,128, 7,157, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, + 0, 0, 0, 0, 48,201, 73, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,176,159, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 74,156, 3,208, 73,156, 3,208,171, 73, 1, 40,117, 73, 1,224, 89, 74, 1, 96,120, 74, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0,144,247, 75, 1,178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,101,101,110, 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, 64, 4,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, -128, 9,160, 2, 0, 0, 0, 0,240, 16,160, 2, 0, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,116,160, 2, 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, 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236,101,152, 0, 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, - 64, 4,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,160, 4,160, 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, 68, 65, 84, 65, 32, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, -177, 0, 0, 0, 1, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, - 96, 5,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, - 0, 5,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -192, 5,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, -177, 0, 0, 0, 1, 0, 0, 0,128, 6,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128, 6,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, -224, 6,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,224, 6,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, -128, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 64, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 64, 7,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0,224, 6,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, -177, 0, 0, 0, 1, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 5, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, - 96, 8,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, - 0, 8,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 80, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -192, 8,160, 2, 0, 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 72, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, -177, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, 7, 72, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 9,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -240, 9,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 9,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 96, 10,160, 2, 0, 0, 0, 0,128, 9,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 10,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -208, 10,160, 2, 0, 0, 0, 0,240, 9,160, 2, 0, 0, 0, 0, 0, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208, 10,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 64, 11,160, 2, 0, 0, 0, 0, 96, 10,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 11,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -176, 11,160, 2, 0, 0, 0, 0,208, 10,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176, 11,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 32, 12,160, 2, 0, 0, 0, 0, 64, 11,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 12,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -144, 12,160, 2, 0, 0, 0, 0,176, 11,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 12,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 0, 13,160, 2, 0, 0, 0, 0, 32, 12,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -112, 13,160, 2, 0, 0, 0, 0,144, 12,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -224, 13,160, 2, 0, 0, 0, 0, 0, 13,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 13,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 80, 14,160, 2, 0, 0, 0, 0,112, 13,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80, 14,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -192, 14,160, 2, 0, 0, 0, 0,224, 13,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 14,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 48, 15,160, 2, 0, 0, 0, 0, 80, 14,160, 2, 0, 0, 0, 0, 0, 8,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48, 15,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -160, 15,160, 2, 0, 0, 0, 0,192, 14,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 15,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 16, 16,160, 2, 0, 0, 0, 0, 48, 15,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -128, 16,160, 2, 0, 0, 0, 0,160, 15,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, -240, 16,160, 2, 0, 0, 0, 0, 16, 16,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 16,160, 2, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 16,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,184, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0, - 32, 21,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 4,160, 2, 0, 0, 0, 0, - 0, 5,160, 2, 0, 0, 0, 0, 32, 6,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, - 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 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, 48,189,147, 2, 0, 0, 0, 0,144,115,160, 2, 0, 0, 0, 0, -144,115,160, 2, 0, 0, 0, 0, 96, 18,160, 2, 0, 0, 0, 0,192, 19,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,170,170, 2, 0, 0, 0, 0, 96, 66,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, - 96, 18,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,192, 19,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,103, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 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,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,191,147, 2, 0, 0, 0, 0,208, 35,170, 2, 0, 0, 0, 0,208, 35,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,173,188, 2, 0, 0, 0, 0,128, 11,170, 2, 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,192, 19,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 18,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,158, 68, 0, 0, 0, 0, 0, 0, 16, 65, - 0, 0, 0, 0, 12,235,226, 69,222, 81,184, 63, 0, 0, 16, 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, 1, 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, 4, 10, 0,129, 7, 2, 0,129, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 4, 0, 0, 97, 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, 1, 0, 0, 0, 0, 0, 0, 0, 32,190,147, 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,176, 13,170, 2, 0, 0, 0, 0, - 32, 15,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,184, 0, 0, 0, - 32, 21,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, 96, 17,160, 2, 0, 0, 0, 0, - 64, 7,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 96, 5,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 71, 3, 0, 0, 4, 4,142, 1, 72, 3, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,185,147, 2, 0, 0, 0, 0, 64, 59,160, 2, 0, 0, 0, 0,144, 66,160, 2, 0, 0, 0, 0, 32, 22,160, 2, 0, 0, 0, 0, -128, 23,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 71,189, 2, 0, 0, 0, 0, -128, 82,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 32, 22,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, -128, 23,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,248, 75, 1,248,251, 75, 1, 64,252, 75, 1, 8, 1, 76, 1, 80, 1, 76, 1, +248,105, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8,120, 76, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 80,248, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,152,248, 75, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,248, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, +224,248, 75, 1, 80,248, 75, 1, 0, 0, 0, 0, 0, 0,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,224,248, 75, 1, +179, 0, 0, 0, 1, 0, 0, 0, 40,249, 75, 1,152,248, 75, 1, 0, 0, 0, 0,128, 7,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0, 40,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,112,249, 75, 1,224,248, 75, 1, 0, 0, 0, 0,128, 7, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,184,249, 75, 1, 40,249, 75, 1, + 0, 0, 0, 0, 0, 0,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,184,249, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, + 0,250, 75, 1,112,249, 75, 1, 0, 0, 0, 0,128, 7,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 0,250, 75, 1, +179, 0, 0, 0, 1, 0, 0, 0, 72,250, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0, 72,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,144,250, 75, 1, 0,250, 75, 1, 0, 0, 0, 0,128, 7, 80, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,216,250, 75, 1, 72,250, 75, 1, + 0, 0, 0, 0, 20, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,216,250, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, + 32,251, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 20, 6,130, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 32,251, 75, 1, +179, 0, 0, 0, 1, 0, 0, 0,104,251, 75, 1,216,250, 75, 1, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0,104,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,176,251, 75, 1, 32,251, 75, 1, 0, 0, 0, 0, 20, 6,100, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0,248,251, 75, 1,104,251, 75, 1, + 0, 0, 0, 0, 20, 6,124, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,248,251, 75, 1,179, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,176,251, 75, 1, 0, 0, 0, 0,128, 7,124, 3, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 64,252, 75, 1, +180, 0, 0, 0, 1, 0, 0, 0,136,252, 75, 1, 0, 0, 0, 0,152,248, 75, 1,224,248, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0,136,252, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,208,252, 75, 1, 64,252, 75, 1,152,248, 75, 1, +112,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208,252, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, + 24,253, 75, 1,136,252, 75, 1,224,248, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, + 24,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 96,253, 75, 1,208,252, 75, 1,112,249, 75, 1,184,249, 75, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,168,253, 75, 1, 24,253, 75, 1, + 80,248, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,253, 75, 1,180, 0, 0, 0, + 1, 0, 0, 0,240,253, 75, 1, 96,253, 75, 1, 40,249, 75, 1,144,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0,240,253, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 56,254, 75, 1,168,253, 75, 1,112,249, 75, 1,216,250, 75, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56,254, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,128,254, 75, 1, +240,253, 75, 1,184,249, 75, 1,216,250, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128,254, 75, 1, +180, 0, 0, 0, 1, 0, 0, 0,200,254, 75, 1, 56,254, 75, 1, 80,248, 75, 1, 32,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0,200,254, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, 16,255, 75, 1,128,254, 75, 1,112,249, 75, 1, + 32,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0, + 88,255, 75, 1,200,254, 75, 1,216,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, + 88,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,160,255, 75, 1, 16,255, 75, 1,144,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160,255, 75, 1,180, 0, 0, 0, 1, 0, 0, 0,232,255, 75, 1, 88,255, 75, 1, + 32,251, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,232,255, 75, 1,180, 0, 0, 0, + 1, 0, 0, 0, 48, 0, 76, 1,160,255, 75, 1,144,250, 75, 1,176,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0, 48, 0, 76, 1,180, 0, 0, 0, 1, 0, 0, 0,120, 0, 76, 1,232,255, 75, 1,216,250, 75, 1,176,251, 75, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120, 0, 76, 1,180, 0, 0, 0, 1, 0, 0, 0,192, 0, 76, 1, + 48, 0, 76, 1,184,249, 75, 1,248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192, 0, 76, 1, +180, 0, 0, 0, 1, 0, 0, 0, 8, 1, 76, 1,120, 0, 76, 1, 40,249, 75, 1,248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0, 8, 1, 76, 1,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,192, 0, 76, 1,176,251, 75, 1, +248,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 80, 1, 76, 1,184, 0, 0, 0, 1, 0, 0, 0, + 48, 4, 76, 1, 0, 0, 0, 0,112,249, 75, 1,152,248, 75, 1,224,248, 75, 1,184,249, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,131, 4, 0, 0,157, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 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,248,193, 65, 1,168,119, 76, 1,168,119, 76, 1,240, 1, 76, 1, 16, 3, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0,152,171, 77, 1,216,170, 77, 1, 68, 65, 84, 65,236, 0, 0, 0,240, 1, 76, 1,185, 0, 0, 0, + 1, 0, 0, 0, 16, 3, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,103, 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,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,131, 4, 0, 0, +156, 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, 0, 0, 0, 0, 0, 0, 32,195, 65, 1,224, 91,165, 3,224, 91,165, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 72,189,163, 3,248, 92, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 16, 3, 76, 1,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,240, 1, 76, 1, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,110, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, + 6, 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,157, 4, 0, 0, +157, 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, 1, 0, 0, 0, 0, 0, 0, 0,144,194, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 48, 4, 76, 1,184, 0, 0, 0, + 1, 0, 0, 0,168, 80, 76, 1, 80, 1, 76, 1,144,250, 75, 1,176,251, 75, 1,248,251, 75, 1, 40,249, 75, 1, 0, 0, 0, 0, + 21, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,123, 3, 0, 0, 4, 4,108, 1,124, 3, 1, 0, 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,191, 65, 1, 40, 73, 76, 1,136, 79, 76, 1,208, 4, 76, 1, +240, 5, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,168,115, 73, 1,208, 93, 74, 1, 68, 65, 84, 65,236, 0, 0, 0,208, 4, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0,240, 5, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,182, 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,107, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 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,142, 1, 26, 0, 4, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,188,147, 2, 0, 0, 0, 0,128,218,232, 2, 0, 0, 0, 0, -128,218,232, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,189,195, 2, 0, 0, 0, 0, - 80, 20,170, 2, 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, -128, 23,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 22,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,163, 67, 0, 0,111,196, 0, 0, 0, 0, 0, 0, 0, 0,146,134,163, 67, 54, 57, 39,196, 0, 0, 0, 0, + 4, 0, 12, 4, 10, 0,108, 1, 26, 0,108, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0,128, 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,108, 1, 26, 0, 3, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,193, 65, 1, 80,195,156, 3, 80,195,156, 3, 0, 0, 0, 0, + 0, 0, 0, 0,128, 95, 74, 1,112, 96, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,240, 5, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 4, 76, 1, 0, 0, 0, 0, 0,128,142, 67, 0, 64,112,196, 0, 0, 0, 0, + 0, 0, 0, 0,210,113,151, 67,236, 12, 57,196,168, 20,236,181, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0, 97, 3, 0, 0, + 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0, 97, 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, 3, 0, + 2, 0, 0, 4, 6, 0,108, 1, 98, 3, 91, 1, 80, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0,128, 7, 0, 0, + 26, 0, 0, 0,123, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1, 98, 3, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,192, 65, 1,160, 57,155, 3,240, 44,164, 3, 16, 7, 76, 1, +192, 71, 76, 1, 56, 98, 74, 1, 40, 99, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 7, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,120, 8, 76, 1, 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,141, 1, 0, 0, 0, 0, 0, 0, 45, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,142, 1, 46, 3,142, 1, 46, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 26, 0, 0, 0, 71, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 46, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,186,147, 2, 0, 0, 0, 0, 48,200,238, 2, 0, 0, 0, 0, 32,157,232, 2, 0, 0, 0, 0,224, 24,160, 2, 0, 0, 0, 0, - 48,248,232, 2, 0, 0, 0, 0,112,129,194, 2, 0, 0, 0, 0,112, 25,170, 2, 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, 1, 0, 0,224, 24,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, -112, 26,160, 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, - 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, - 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 71, 1,176, 0, 0, 0, 0, 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, 56,255, 71, 1,176, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,112, 26,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0, 0, 28,160, 2, 0, 0, 0, 0,224, 24,160, 2, 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, + 68, 65, 84, 65, 56, 1, 0, 0,120, 8, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 9, 76, 1, 16, 7, 76, 1, 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, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 71, 1,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88,254, 71, 1,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, - 0, 28,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,144, 29,160, 2, 0, 0, 0, 0,112, 26,160, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0,224, 9, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, + 72, 11, 76, 1,120, 8, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 71, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 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, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, + 72, 11, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,176, 12, 76, 1,224, 9, 76, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 80, 1, 0, 0,144, 29,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32, 31,160, 2, 0, 0, 0, 0, - 0, 28,160, 2, 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,136,253, + 71, 1, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 68, 65, 84, 65, 56, 1, 0, 0,176, 12, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 24, 14, 76, 1, 72, 11, 76, 1, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,253, 71, 1, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 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,194,252, 71, 1,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 32, 31,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, -176, 32,160, 2, 0, 0, 0, 0,144, 29,160, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0, 24, 14, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0,128, 15, 76, 1,176, 12, 76, 1, 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, - 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,252, 71, 1,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,251, 71, 1,212, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 15, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,232, 16, 76, 1, 24, 14, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 76,101,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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0,176, 32,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0, 64, 34,160, 2, 0, 0, 0, 0, 32, 31,160, 2, 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, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,251, 71, 1,212, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 81,255, 74, 1,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 64, 34,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,208, 35,160, 2, 0, 0, 0, 0,176, 32,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,101,110,115, 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, 16, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 80, 18, 76, 1, +128, 15, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,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, 0, 0, 76,101,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,105,115,112,108, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,255, 74, 1,151, 0, 0, 0, 0, 0, 0, 0, 0, 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,141,254, 74, 1,107, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 80, 18, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,184, 19, 76, 1,232, 16, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,101,118,105,101,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, - 68, 65, 84, 65, 80, 1, 0, 0,208, 35,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 96, 37,160, 2, 0, 0, 0, 0, - 64, 34,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,112,108, 97,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, 68,105,115,112,108, 97,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, 80,114,101,118,105,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,254, 74, 1,107, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 96,255, 74, 1,136, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96, 37,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, -240, 38,160, 2, 0, 0, 0, 0,208, 35,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,114,101,118,105,101,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, + 68, 65, 84, 65, 56, 1, 0, 0,184, 19, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 32, 21, 76, 1, 80, 18, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 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, - 80,114,101,118,105,101,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1,136, 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,247,254, 74, 1, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0,240, 38,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,128, 40,160, 2, 0, 0, 0, 0, 96, 37,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254, 74, 1, 81, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -128, 40,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 16, 42,160, 2, 0, 0, 0, 0,240, 38,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,111, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 32, 21, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, +136, 22, 76, 1,184, 19, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,109, 98,105,101,110,116, 32, 79, 99, 99,108,117,115,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,254, 74, 1,180, 0, 20, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +136, 22, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,240, 23, 76, 1, 32, 21, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77,105,115,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, - 68, 65, 84, 65, 80, 1, 0, 0, 16, 42,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,160, 43,160, 2, 0, 0, 0, 0, -128, 40,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,105,115,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, 77,105,115,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, 77,105,115,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,253, 74, 1,107, 0, - 20, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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,253, + 74, 1,107, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160, 43,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, - 48, 45,160, 2, 0, 0, 0, 0, 16, 42,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,116, 97,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, 68, 65, 84, 65, 56, 1, 0, 0,240, 23, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 88, 25, 76, 1,136, 22, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,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, - 83,116, 97,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, 83,116, 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 74, 1, 60, 0, 20, 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, 84,253, 74, 1, 60, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48, 45,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,192, 46,160, 2, 0, 0, 0, 0,160, 43,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99,116,105,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, 68, 65, 84, 65, 56, 1, 0, 0, 88, 25, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0,192, 26, 76, 1,240, 23, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99, +116,105,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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114, 32, 67,111,114,114,101, 99, +116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,108,111,114, 32, 67,111,114,114,101, 99,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 74, 1, 36, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 56, 1, 0, 0,192, 26, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 40, 28, 76, 1, 88, 25, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253, 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 83,255, 74, 1,149, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -192, 46,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 80, 48,160, 2, 0, 0, 0, 0, 48, 45,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 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, 28, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,144, 29, 76, 1, +192, 26, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,111,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, 0, 0, 0, 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, 83,104, 97,100,111,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1,149, 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,136,254, 74, 1,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,144, 29, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,248, 30, 76, 1, 40, 28, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83,117,114,102, 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, - 68, 65, 84, 65, 80, 1, 0, 0, 80, 48,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,224, 49,160, 2, 0, 0, 0, 0, -192, 46,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,111,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, 83,104, 97,100,111,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, 83,117,114,102, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,254, 74, 1,179, 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,149,255, 74, 1, 83, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0,224, 49,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, -112, 51,160, 2, 0, 0, 0, 0, 80, 48,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83,117,114,102, 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, + 68, 65, 84, 65, 56, 1, 0, 0,248, 30, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 96, 32, 76, 1,144, 29, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, - 83,117,114,102, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1, 83, 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,196,255, 74, 1, 36, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0,112, 51,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0, 0, 53,160, 2, 0, 0, 0, 0,224, 49,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 74, 1, 36, 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, 68, 65, 84, 65, 80, 1, 0, 0, - 0, 53,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,144, 54,160, 2, 0, 0, 0, 0,112, 51,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 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, 96, 32, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, +200, 33, 76, 1,248, 30, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 74, 1, 96, 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, 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, 68, 65, 84, 65, 56, 1, 0, 0, +200, 33, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 48, 35, 76, 1, 96, 32, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,144, 54,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32, 56,160, 2, 0, 0, 0, 0, - 0, 53,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,255, + 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 56, 1, 0, 0, 48, 35, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,152, 36, 76, 1,200, 33, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 74, 1, 36, 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, 81,254, 74, 1, 36, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, 32, 56,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, -176, 57,160, 2, 0, 0, 0, 0,144, 54,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,152, 36, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0, 0, 38, 76, 1, 48, 35, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,117,112,108,105, 99, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81,254, 74, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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,167,253, 74, 1,146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 38, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,104, 39, 76, 1,152, 36, 76, 1,168,192, 65, 1, 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, 46, 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, 68, 65, 84, 65, 80, 1, 0, 0,176, 57,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,176, 77,231, 2, 0, 0, 0, 0, 32, 56,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65,110,105,109, 97,116,105,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, 68, 65, 84, 65, 56, 1, 0, 0,104, 39, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,208, 40, 76, 1, + 0, 38, 76, 1, 16,176,159, 3, 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, 65,110,105,109, 97,116,105,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, 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, 46, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 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,167,253, 74, 1,146, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, -176, 77,231, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,208, 74,231, 2, 0, 0, 0, 0,176, 57,160, 2, 0, 0, 0, 0, - 64,187,147, 2, 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, 71, 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, - 68, 65, 84, 65, 80, 1, 0, 0,208, 74,231, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,176,232,233, 2, 0, 0, 0, 0, -176, 77,231, 2, 0, 0, 0, 0,144,244,210, 2, 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, 56, 1, 0, 0,208, 40, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0, 56, 42, 76, 1,104, 39, 76, 1,120,158,159, 3, 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,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, 71, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 6, 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, + 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,189,254, 46, 1,178, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65, 80, 1, 0, 0,176,232,233, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, - 32,112,232, 2, 0, 0, 0, 0,208, 74,231, 2, 0, 0, 0, 0,144,246,210, 2, 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, + 68, 65, 84, 65, 56, 1, 0, 0, 56, 42, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,160, 43, 76, 1,208, 40, 76, 1, 32,160,159, 3, + 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, - 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, 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, - 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, 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,189,254, 71, 1,178, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,107,254, 46, 1, 58, 0, 24, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 32,112,232, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,144,155,232, 2, 0, 0, 0, 0,176,232,233, 2, 0, 0, 0, 0,144,248,210, 2, 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,107,254, 71, 1, 58, 0, 24, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 80, 1, 0, 0, -144,155,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 32,159,232, 2, 0, 0, 0, 0, 32,112,232, 2, 0, 0, 0, 0, -160,253,210, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0,160, 43, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, + 8, 45, 76, 1, 56, 42, 76, 1,200,161,159, 3, 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, 83,254, 71, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 83,254, 46, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, + 8, 45, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,112, 46, 76, 1,160, 43, 76, 1, 40, 18,156, 3, 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,213,253, + 46, 1,102, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 32,159,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,192,195,232, 2, 0, 0, 0, 0, -144,155,232, 2, 0, 0, 0, 0,176, 2,211, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0,112, 46, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,216, 47, 76, 1, 8, 45, 76, 1, +208, 19,156, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,253, 71, 1, 80, 0, - 0, 0, 0, 0, 0, 0, 6, 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,106,253, 46, 1, 83, 0, 0, 0, 0, 0, 4, 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, 68, 65, 84, 65, 80, 1, 0, 0,192,195,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, - 80,199,232, 2, 0, 0, 0, 0, 32,159,232, 2, 0, 0, 0, 0,176, 4,211, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0,216, 47, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0, 64, 49, 76, 1,112, 46, 76, 1,120, 21,156, 3, 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, - 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, 42,253, 46, 1,123, 0, 0, 0, 0, 0, + 4, 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, - 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, 68, 65, 84, 65, + 56, 1, 0, 0, 64, 49, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,168, 50, 76, 1,216, 47, 76, 1,184,224,159, 3, 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,128,253, 71, 1, 83, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 6, 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, 33,253, 46, 1,108, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 80, 1, 0, 0, 80,199,232, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,224,202,232, 2, 0, 0, 0, 0,192,195,232, 2, 0, 0, 0, 0,192, 9,211, 2, 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, 68, 65, 84, 65, 56, 1, 0, 0,168, 50, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 16, 52, 76, 1, + 64, 49, 76, 1, 8,228,159, 3, 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,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, 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, 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, 64,253, 71, 1,123, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,252, 46, 1,215, 0, 24, 0, 0, 0, 0, 0, 7, 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, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 52, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,120, 53, 76, 1,168, 50, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, + 99,111,110,116,101,120,116, 95,108, 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, 68, 65, 84, 65, 95, 80, 84, 95, + 99,111,110,116,101,120,116, 95,108, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -224,202,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 48,248,232, 2, 0, 0, 0, 0, 80,199,232, 2, 0, 0, 0, 0, -208, 14,211, 2, 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, 55,253, 71, 1,108, 0, 0, 0, 0, 0, 0, 0, 6, 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,184,255, 46, 1, 36, 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, - 68, 65, 84, 65, 80, 1, 0, 0, 48,248,232, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,202,232, 2, 0, 0, 0, 0,208, 18,211, 2, 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, + 68, 65, 84, 65, 56, 1, 0, 0,120, 53, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 54, 76, 1, 16, 52, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,112,114,101,118,105,101,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,252, 71, 1,215, 0, - 24, 0, 0, 0, 0, 0, 7, 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, 95, 80, 84, 95,112,114,101,118,105,101,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, 80,114,101,118,105,101,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, 24,255, 46, 1,136, 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, 68, 65, 84, 65, 8, 1, 0, 0, 64, 59,160, 2, 0, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0, -144, 66,160, 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, - 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, 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, 56, 1, 0, 0,224, 54, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, + 72, 56, 76, 1,120, 53, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 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,107,254, 46, 1,149, 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, 68, 65, 84, 65, 56, 1, 0, 0, + 72, 56, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,176, 57, 76, 1,224, 54, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 95, 80, 84, 95,115,104, 97,100,111,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, 68, 65, 84, 65, + 95, 80, 84, 95,115,104, 97,100,111,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, 83,104, 97,100, +111,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, 0,160,253, + 46, 1,179, 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, 68, 65, 84, 65, 56, 1, 0, 0,176, 57, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 24, 59, 76, 1, 72, 56, 76, 1, + 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, 46, 1, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 59, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0,128, 60, 76, 1,176, 57, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 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, 68, 65, 84, 65, 95, 80, 84, 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, 77,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, 66,255, 46, 1, 94, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 56, 1, 0, 0,128, 60, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,232, 61, 76, 1, 24, 59, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,109, 97,116,101,114,105, 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, + 68, 65, 84, 65, 95, 80, 84, 95,109, 97,116,101,114,105, 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, + 77, 97,116,101,114,105, 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, 0, 0, + 0, 0,172,254, 46, 1,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 61, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 80, 63, 76, 1, +128, 60, 76, 1, 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, 0, 0, 0, 0, 0, 0, 22,254, 46, 1,126, 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, 68, 65, 84, 65, 56, 1, 0, 0, 80, 63, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,184, 64, 76, 1,232, 61, 76, 1, 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, 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,128,253, 46, 1,126, 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, + 68, 65, 84, 65, 56, 1, 0, 0,184, 64, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 32, 66, 76, 1, 80, 63, 76, 1, 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, 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,234,252, 46, 1,126, 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, 68, 65, 84, 65, 56, 1, 0, 0, 32, 66, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, +136, 67, 76, 1,184, 64, 76, 1, 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, 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, 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, 84,252, 46, 1,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +136, 67, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,240, 68, 76, 1, 32, 66, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 95, 80, 84, 95, 99, 97,109,101,114, 97,100,105,115,112,108, 97,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, 68, 65, 84, 65, + 95, 80, 84, 95, 99, 97,109,101,114, 97,100,105,115,112,108, 97,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, 68,105,115,112, +108, 97,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,180,255, + 46, 1, 16, 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, 68, 65, 84, 65, 56, 1, 0, 0,240, 68, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 88, 70, 76, 1,136, 67, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95, 99, 97,109,101,114, 97, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 99, 97,109,101,114, 97, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 46, 1, 36, 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, 68, 65, 84, 65, 56, 1, 0, 0, 88, 70, 76, 1,181, 0, 0, 0, + 1, 0, 0, 0,192, 71, 76, 1,240, 68, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101, +114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 97,109,101, +114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,101,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, 0, 0, 0,178,254, 46, 1,198, 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, 68, 65, 84, 65, + 56, 1, 0, 0,192, 71, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88, 70, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101,114, 97, 95,100,105,115,112,108, 97,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, + 68, 65, 84, 65, 95, 80, 84, 95, 99, 97,109,101,114, 97, 95,100,105,115,112,108, 97,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, + 68,105,115,112,108, 97,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, 52,254, 46, 1,102, 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, 68, 65, 84, 65,232, 0, 0, 0, 40, 73, 76, 1,151, 0, 0, 0, 1, 0, 0, 0,136, 79, 76, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 0, 0, 0, 0,208, 63,214, 2, 0, 0, 0, 0,255, 20, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,144, 60,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, -240, 61,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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,150, 1, 0, 0, 0, 0, 0, 0, 40,164,155, 3,255, 20, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 64, 74, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 96, 75, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 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, -240, 61,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 60,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65,236, 0, 0, 0, 96, 75, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 74, 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, @@ -527,93 +615,80 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, +128, 76, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,128, 76, 76, 1,145, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, + 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, - 80, 63,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, 80, 63,160, 2, 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, 32,193, 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, 32, 65, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, -237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, - 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, 32,193, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -144, 66,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 59,160, 2, 0, 0, 0, 0, -144, 60,160, 2, 0, 0, 0, 0,240, 61,160, 2, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, 68, 65, 84, 65,184, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, -182, 0, 0, 0, 1, 0, 0, 0, 16, 80,160, 2, 0, 0, 0, 0, 32, 21,160, 2, 0, 0, 0, 0, 64, 4,160, 2, 0, 0, 0, 0, - 0, 8,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, 64, 7,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,231, 5, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 15, 15,232, 5, 80, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,123,147, 2, 0, 0, 0, 0, -176, 71,160, 2, 0, 0, 0, 0,176, 78,160, 2, 0, 0, 0, 0,240, 68,160, 2, 0, 0, 0, 0, 80, 70,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 87,189, 2, 0, 0, 0, 0,208, 98,189, 2, 0, 0, 0, 0, - 68, 65, 84, 65, 24, 1, 0, 0,240, 68,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 80, 70,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,118, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,189, 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,231, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 5, - 26, 0,232, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 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,232, 5, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,124,147, 2, 0, 0, 0, 0,208, 55,234, 2, 0, 0, 0, 0,208, 55,234, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,173,210, 2, 0, 0, 0, 0,224, 29,170, 2, 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, 80, 70,160, 2, 0, 0, 0, 0, -183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 68,160, 2, 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,231, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, - 18, 0, 0, 0, 53, 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,232, 5, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,231, 5, 0, 0, 26, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 5, 54, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,147, 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, - 16, 32,170, 2, 0, 0, 0, 0, 16, 35,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,184, 0, 0, 0,176, 71,160, 2, 0, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,176, 78,160, 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, 15, 0, 0, 0, 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,136, 79, 76, 1,146, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 40, 73, 76, 1, 64, 74, 76, 1, 96, 75, 76, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, 68, 65, 84, 65,112, 0, 0, 0,168, 80, 76, 1, +184, 0, 0, 0, 1, 0, 0, 0,200, 90, 76, 1, 48, 4, 76, 1, 80,248, 75, 1, 32,251, 75, 1,104,251, 75, 1,144,250, 75, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 20, 6,100, 0, 1, 0, 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,170, 65, 1,136, 83, 76, 1,168, 89, 76, 1, + 72, 81, 76, 1,104, 82, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,160, 99, 74, 1, 96,100, 74, 1, 68, 65, 84, 65,236, 0, 0, 0, + 72, 81, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,104, 82, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,118, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0,128,194, 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, 19, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 6, 26, 0, 20, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 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, 20, 6, 26, 0, + 5, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,171, 65, 1,248, 79,158, 3,248, 79,158, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 16,102, 74, 1,136,102, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +104, 82, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72, 81, 76, 1, 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, 19, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 18, 0, 0, 0, + 73, 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, 20, 6, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 6, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 74, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,171, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,104, 74, 1, 48,106, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, +136, 83, 76, 1,161, 0, 0, 0, 1, 0, 0, 0,168, 89, 76, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,176, 72,160, 2, 0, 0, 0, 0, -183, 0, 0, 0, 1, 0, 0, 0, 16, 74,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 96, 84, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0,128, 85, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65,236, 0, 0, 0,128, 85, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 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, - 88, 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, + 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 74,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 72,160, 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, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 75,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0,112, 75,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 86, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,160, 86, 76, 1, 145, 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, 87,213,108, 66, 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,128, 0, 0, 0,128, 226,215,163,188, 0, 0, 0,128, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, @@ -637,285 +712,247 @@ char datatoc_B_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, + 68, 65, 84, 65,240, 0, 0, 0,168, 89, 76, 1,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136, 83, 76, 1, 96, 84, 76, 1, +128, 85, 76, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, - 68, 65, 84, 65, 32, 1, 0, 0,176, 78,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 71,160, 2, 0, 0, 0, 0,176, 72,160, 2, 0, 0, 0, 0, 16, 74,160, 2, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, + 0, 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, 68, 65, 84, 65,112, 0, 0, 0,200, 90, 76, 1,184, 0, 0, 0, 1, 0, 0, 0,248,105, 76, 1,168, 80, 76, 1, + 32,251, 75, 1,112,249, 75, 1,216,250, 75, 1,104,251, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0,101, 0, 0, 0, +129, 4, 0, 0, 1, 1, 20, 6, 29, 4, 1, 0, 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,172, 65, 1,216,104, 76, 1,216,104, 76, 1,104, 91, 76, 1,176,100, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, +248,171, 77, 1,104,107, 74, 1, 68, 65, 84, 65,236, 0, 0, 0,104, 91, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,136, 92, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,194, 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, 19, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 6, 26, 0, 20, 6, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 26, 0, 7, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72,178, 65, 1,120, 81,158, 3,120, 81,158, 3, 0, 0, 0, 0, 0, 0, 0, 0,120,109, 74, 1,224,110, 74, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,136, 92, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,176,100, 76, 1, +104, 91, 76, 1, 0, 0, 0, 0, 0, 0, 92, 67, 0, 64, 55,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0, 41,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, 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, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 0, 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, 68, 65, 84, 65,184, 0, 0, 0, - 16, 80,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0,240, 67,160, 2, 0, 0, 0, 0, - 0, 8,160, 2, 0, 0, 0, 0,192, 5,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, 96, 8,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, 81, 0, 0, 0, 69, 4, 0, 0, 1, 1,232, 5,245, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0,163, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 0,164, 2,220, 0, +164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 19, 6, 0, 0,127, 0, 0, 0,129, 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, 1, 0, 0, 0, + 0, 0, 0, 0,152,173, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0,168, 93, 76, 1, 72, 99, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,168, 93, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 16, 95, 76, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,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, -224,125,147, 2, 0, 0, 0, 0, 64, 96,160, 2, 0, 0, 0, 0, 64, 96,160, 2, 0, 0, 0, 0, 16, 81,160, 2, 0, 0, 0, 0, -160, 91,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,104,189, 2, 0, 0, 0, 0, -224,111,189, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 16, 81,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, -112, 82,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,189, 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,231, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,232, 5, 26, 0,232, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0, - 81, 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 5, 26, 0, 8, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,165,147, 2, 0, 0, 0, 0,240, 61,239, 2, 0, 0, 0, 0, -240, 61,239, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,212, 2, 0, 0, 0, 0, -128, 41,170, 2, 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, -112, 82,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,160, 91,160, 2, 0, 0, 0, 0, 16, 81,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 67, 0, 64, 55,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0, 41,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0,163, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 6, 0,220, 0,164, 2,220, 0,164, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,231, 5, 0, 0,231, 5, 0, 0,107, 0, 0, 0, 69, 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, 1, 0, 0, 0, 0, 0, 0, 0, -192,127,147, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 83,160, 2, 0, 0, 0, 0, - 16, 90,160, 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, 68, 65, 84, 65, 80, 1, 0, 0,208, 83,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, - 96, 85,160, 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, - 84,114, 97,110,115,102,111,114,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, - 84,114, 97,110,115,102,111,114,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, 84,114, 97,110,115,102,111,114,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,220, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,220, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96, 85,160, 2, 0, 0, 0, 0, -179, 0, 0, 0, 1, 0, 0, 0,240, 86,160, 2, 0, 0, 0, 0,208, 83,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 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, 68, 65, 84, 65, 56, 1, 0, 0, 16, 95, 76, 1, +181, 0, 0, 0, 1, 0, 0, 0,120, 96, 76, 1,168, 93, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 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, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,253,220, 0, 29, 1, + 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, + 68, 65, 84, 65, 56, 1, 0, 0,120, 96, 76, 1,181, 0, 0, 0, 1, 0, 0, 0,224, 97, 76, 1, 16, 95, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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, 0, 0,229,253,220, 0, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0,169,253,220, 0, 36, 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, 68, 65, 84, 65, 80, 1, 0, 0, -240, 86,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0,128, 88,160, 2, 0, 0, 0, 0, 96, 85,160, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,101, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,224, 97, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, + 72, 99, 76, 1,120, 96, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, + 97,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, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, + 97,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,253,220, 0, 66, 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,169,253,220, 0, 36, 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, 56, 1, 0, 0, + 72, 99, 76, 1,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224, 97, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,115,116, + 32, 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, 76, 97,115,116, + 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,128, 88,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 16, 90,160, 2, 0, 0, 0, 0, -240, 86,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, -109, 32, 79,114,105,101,110,116, 97,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, 84,114, 97,110,115,102,111,114, -109, 32, 79,114,105,101,110,116, 97,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, 39,253, +220, 0, 16, 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, 79,253,220, 0, 66, 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, 68, 65, 84, 65, 80, 1, 0, 0, 16, 90,160, 2, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 88,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 97,115,116, 32, 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, - 76, 97,115,116, 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39,253,220, 0, 16, 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, 68, 65, 84, 65, 24, 1, 0, 0,160, 91,160, 2, 0, 0, 0, 0, -183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 82,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,176,100, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136, 92, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,231, 5, 0, 0,107, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 5,219, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,126,147, 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, -176, 43,170, 2, 0, 0, 0, 0,144, 49,170, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,160, 2, 0, 0, 0, 0, - 68, 65, 84, 65,248, 2, 0, 0, 0, 93,160, 2, 0, 0, 0, 0,145, 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,212,119,214, 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, 19, 6, 0, 0,127, 0, 0, 0,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 3, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,173, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,112, 74, 1,136,116, 74, 1, 0, 0, 0, 0, +208,101, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,208,101, 76, 1,145, 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,235, 28,212, 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,238, 4, 53, 63,186,103, 59,190, 247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, 217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,236, 4, 53, 63,244, 4, 53, 63, 0, 0, 24, 53, 0, 0, 0, 0,137,103, 59,190,118,103, 59, 62,227, 70,119, 63, 0, 0, 0, 0,238,217, 46, 63,221,217, 46,191, -213,131,132, 62, 0, 0, 0, 0,186,213, 60, 65,168,213, 60,193,221, 28,143, 64, 0, 0,128, 63,100,253, 69, 63,110, 0,157,190, -194,219, 46,191,247,217, 46,191,119,253, 69, 63, 60, 0,157, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50, 18, 41,207, 63, +213,131,132, 62, 0, 0, 0, 0,186,213, 60, 65,168,213, 60,193,221, 28,143, 64, 0, 0,128, 63,100,253, 69, 63, 17, 71,155,190, +194,219, 46,191,247,217, 46,191,119,253, 69, 63,224, 70,155, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50,180,226,204, 63, 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65, 20,129, 37, 63,162,128, 37, 63, - 0, 0,252, 53, 0, 0,160, 52,183,177,223,189,161,177,223, 61,201,148, 19, 63, 0, 0, 96, 51, 0,133, 19,196,242,132, 19, 68, - 28,154, 95,195, 81,253, 71,194,205, 90, 19, 68,191, 90, 19,196, 37, 90, 95, 67, 95,255, 71, 66,238, 4, 53, 63,186,103, 59,190, + 0, 0,252, 53, 0, 0,160, 52, 47, 45,226,189, 25, 45,226, 61, 74, 56, 21, 63, 0, 0,240, 51, 0,133, 19,196,242,132, 19, 68, + 27,154, 95,195, 81,253, 71,194,205, 90, 19, 68,191, 90, 19,196, 36, 90, 95, 67, 95,255, 71, 66,238, 4, 53, 63,186,103, 59,190, 247,217, 46, 63, 0, 0, 0, 0,255, 4, 53, 63,126,103, 59, 62,244,217, 46,191, 0, 0, 0, 0,228, 3, 52, 50,248, 70,119, 63, -217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,100,253, 69, 63,110, 0,157,190, -194,219, 46,191,247,217, 46,191,119,253, 69, 63, 60, 0,157, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50, 18, 41,207, 63, - 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65,148,157,200, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148,157,200, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -148,157,200, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,122,163, 59, 63,235,250, 15,191, -221,141,110,190,230,113,155,190,152, 60,138, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,131,158, 58, 0, 0, 0, 0, +217,131,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 60,138,193, 0, 0,128, 63,100,253, 69, 63, 17, 71,155,190, +194,219, 46,191,247,217, 46,191,119,253, 69, 63,224, 70,155, 62,191,219, 46, 63,244,217, 46, 63, 65,228, 68, 50,180,226,204, 63, + 53,133,132,190,217,131,132,190, 0, 0, 0, 0, 0, 0, 0, 0, 13, 21,138, 65,152, 60,138, 65, 79,241,194, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,241,194, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79,241,194, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,122,163, 59, 63,235,250, 15,191, +221,141,110,190,230,113,155,190,152, 60,138, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 8,154, 58, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 96,160, 2, 0, 0, 0, 0, -146, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 96,138,160, 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, - 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0,255,255, 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, 68, 65, 84, 65,184, 0, 0, 0,160, 97,160, 2, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 80,160, 2, 0, 0, 0, 0,192, 8,160, 2, 0, 0, 0, 0,160, 7,160, 2, 0, 0, 0, 0, - 32, 6,160, 2, 0, 0, 0, 0, 32, 9,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, - 73, 3, 0, 0, 69, 4, 0, 0, 3, 3,142, 1,253, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,120,147, 2, 0, 0, 0, 0, 96,101,160, 2, 0, 0, 0, 0, - 48,114,160, 2, 0, 0, 0, 0,160, 98,160, 2, 0, 0, 0, 0, 0,100,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,114,189, 2, 0, 0, 0, 0,176, 5,194, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, -160, 98,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0,100,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,190, 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, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 73, 3, 0, 0, 98, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32,122,147, 2, 0, 0, 0, 0,176, 3,235, 2, 0, 0, 0, 0,176, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,182,212, 2, 0, 0, 0, 0, 0, 54,170, 2, 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, 0,100,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 98,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,194,194, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,190, 67, 0, 0, 81,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,226, 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,226, 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, 0, 4, 6, 0,142, 1,227, 0,125, 1,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, - 99, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,227, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,121,147, 2, 0, 0, 0, 0,112, 31,236, 2, 0, 0, 0, 0, -112, 31,236, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,169,212, 2, 0, 0, 0, 0, -176, 57,170, 2, 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, - 96,101,160, 2, 0, 0, 0, 0,155, 0, 0, 0, 1, 0, 0, 0,224,106,160, 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, 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, 68, 65, 84, 65,240, 0, 0, 0,216,104, 76, 1,146, 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, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, + 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0,255,255, 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, 68, 65, 84, 65,112, 0, 0, 0,248,105, 76, 1, +184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,200, 90, 76, 1,176,251, 75, 1,216,250, 75, 1,184,249, 75, 1,248,251, 75, 1, + 0, 0, 0, 0, 21, 6, 0, 0,128, 7, 0, 0,125, 3, 0, 0,129, 4, 0, 0, 3, 3,108, 1, 5, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 65, 1, 8,214, 69, 1,136,118, 76, 1, +152,106, 76, 1,184,107, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 74, 1,192,117, 74, 1, 68, 65, 84, 65,236, 0, 0, 0, +152,106, 76, 1,185, 0, 0, 0, 1, 0, 0, 0,184,107, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,182, 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,107, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,108, 1, 26, 0,108, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0, +128, 7, 0, 0,125, 3, 0, 0,150, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1, 26, 0, + 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,170, 65, 1, 96,225,163, 3, 96,225,163, 3, + 0, 0, 0, 0, 0, 0, 0, 0,112,119, 74, 1,232,119, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +184,107, 76, 1,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,106, 76, 1, 0, 0, 0, 0, 0,128,131, 67, 0, 0,194,194, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 67, 0, 0, 89,195, 0, 0, 0, 0, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0, +234, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0, +234, 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, 0, 4, 6, 0,108, 1,235, 0, 91, 1,217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0, +128, 7, 0, 0,151, 3, 0, 0,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,235, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,169, 65, 1,200, 71,165, 3,200, 71,165, 3, + 0, 0, 0, 0, 0, 0, 0, 0,176,121, 74, 1,160,122, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, + 8,214, 69, 1,155, 0, 0, 0, 1, 0, 0, 0, 40,112, 76, 1, 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, 4,236, 2, 0, 0, 0, 0, 0, 4,236, 2, 0, 0, 0, 0, -192,102,160, 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,136,162,159, 3, +136,162,159, 3,216,108, 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, 68, 65, 84, 65, 16, 0, 0, 0,192,102,160, 2, 0, 0, 0, 0,206, 0, 0, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 13, 0, 0, 0, 16,103,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16,103,160, 2, 0, 0, 0, 0, -205, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 32,116,160, 2, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, - 32,116,160, 2, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 32,116,160, 2, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, - 32,116,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,130,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -224,142,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,144,158,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -128,152,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,157,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0,148,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,126,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 96,138,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,125,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, - 32,104,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,128,105,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 24, 1, 0, 0,128,105,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,104,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, + 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,216,108, 76, 1,208, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, + 24,109, 76, 1, 68, 65, 84, 65,156, 0, 0, 0, 24,109, 76, 1,207, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 8,120, 76, 1, 19, 0, 0, 0, 1, 0, 1, 0, 8,120, 76, 1, 20, 0, 0, 0, 1, 0, 1, 0, 8,120, 76, 1, 21, 0, 1, 0, + 1, 0, 1, 0, 8,120, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, 80,131, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,216,141, 76, 1, + 0, 0, 0, 0, 1, 0, 1, 0, 88,154, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,104,149, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, + 16,153, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,216,145, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0,200,127, 76, 1, 0, 0, 0, 0, + 1, 0, 1, 0, 72,138, 76, 1, 0, 0, 0, 0, 1, 0, 1, 0, 16,127, 76, 1, 68, 65, 84, 65,236, 0, 0, 0,232,109, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0, 8,111, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, + 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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,236, 0, 0, 0, 8,111, 76, 1, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,232,109, 76, 1, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -224,106,160, 2, 0, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0, 48,114,160, 2, 0, 0, 0, 0, 96,101,160, 2, 0, 0, 0, 0, - 32,104,160, 2, 0, 0, 0, 0,128,105,160, 2, 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, 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,232, 0, 0, 0, 40,112, 76, 1, +151, 0, 0, 0, 1, 0, 0, 0,136,118, 76, 1, 8,214, 69, 1,232,109, 76, 1, 8,111, 76, 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, 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,150, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 48,108,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0,144,109,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 68, 65, 84, 65,236, 0, 0, 0, 64,113, 76, 1,185, 0, 0, 0, + 1, 0, 0, 0, 96,114, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 1, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 24, 1, 0, 0,144,109,160, 2, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,108,160, 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, 68, 65, 84, 65,236, 0, 0, 0, 96,114, 76, 1,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 64,113, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, + 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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,128,115, 76, 1, 68, 65, 84, 65,216, 2, 0, 0,128,115, 76, 1,145, 0, 0, 0, + 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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, 32,193, + 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, 32, 65, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, +129,255, 71, 66, 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, 32,193, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 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,240,110,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,248, 2, 0, 0, -240,110,160, 2, 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,114,160, 2, 0, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,106,160, 2, 0, 0, 0, 0, 48,108,160, 2, 0, 0, 0, 0,144,109,160, 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, 68, 65, 84, 65, +240, 0, 0, 0,136,118, 76, 1,146, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40,112, 76, 1, 64,113, 76, 1, 96,114, 76, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 96,138,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,138, 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, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 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, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 0, 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, + 83, 67, 0, 0,220, 4, 0, 0, 8,120, 76, 1,143, 0, 0, 0, 1, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,138, 76, 1, 80,131, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0,184,245, 75, 1, +104,125, 76, 1,184,245, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,184,125, 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, - 83, 67, 0, 0, 96, 5, 0, 0, 32,116,160, 2, 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, 83, 67, 83, 99,101,110,101, 0, -116, 97,103,101, 0, 97,105,110, 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, 96,138,160, 2, 0, 0, 0, 0, 64,130,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,121,160, 2, 0, 0, 0, 0,160,122,160, 2, 0, 0, 0, 0,192,121,160, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 68,172, 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,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0, +141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, + 23, 0, 33, 0, 0, 0,128, 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, 0, 0, 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,123,160, 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,172, 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,100, 0, 0, 0, -100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, - 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0,128, 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, 0, 0, - 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,124,160, 2, 0, 0, 0, 0, -144,124,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, +104,217, 69, 1,104,217, 69, 1, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -925,7 +962,7 @@ char datatoc_B_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, 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, 47,116,109,112, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -938,100 +975,80 @@ char datatoc_B_blend[]= { 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, 6, 0, 0, 0, 16, 0, 0, 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, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,219,142, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0, - 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, 40, 0, 0, 0, -192,121,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0, 48,122,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,244, 2,237, 1,224,142,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48,122,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0,160,122,160, 2, 0, 0, 0, 0,192,121,160, 2, 0, 0, 0, 0, - 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,205, 3, 35, 3, 0,148,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160,122,160, 2, 0, 0, 0, 0,125, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,122,160, 2, 0, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 77, 3, 63, 3, 96,138,160, 2, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, - 16,123,160, 2, 0, 0, 0, 0,141, 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, 63, 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 1, 0, 1, 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, 2, 0, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, - 50, 0, 50, 0, 10, 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, - 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 88, 0, 0, 0,144,124,160, 2, 0, 0, 0, 0, -130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, - 76, 97,121,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,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 67, 65, 0, 0,176, 0, 0, 0, 48,125,160, 2, 0, 0, 0, 0, 30, 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, 0, 0, 0, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,151, 72, 1, 1, 0, 0, 0, 1, 0, 10, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,184,245, 75, 1,125, 0, 0, 0, + 1, 0, 0, 0, 24,125, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 10, 3, 1, 2,216,141, 76, 1, + 68, 65, 84, 65, 28, 0, 0, 0, 24,125, 76, 1,125, 0, 0, 0, 1, 0, 0, 0,104,125, 76, 1,184,245, 75, 1, 1, 0, 0, 0, + 2, 0, 0, 0, 0, 4, 0, 0,233, 3, 65, 3,216,145, 76, 1, 68, 65, 84, 65, 28, 0, 0, 0,104,125, 76, 1,125, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 24,125, 76, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,102, 3, 93, 3, 72,138, 76, 1, + 68, 65, 84, 65, 36, 1, 0, 0,184,125, 76, 1,141, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, + 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, + 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 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, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 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, +104,217, 69, 1,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,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,255,255, 15, 0, + 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,136, 0, 0, 0, 16,127, 76, 1, + 30, 0, 0, 0, 1, 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, 1, 0, 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,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66, -161, 14,234, 64, 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, + 0, 0, 4, 0, 0, 0, 0, 63,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,248, 1, 0, 0, 32,126,160, 2, 0, 0, 0, 0, 40, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,132, 1, 0, 0,200,127, 76, 1, 40, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 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, 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,128,129, 76, 1, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, + 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, 83,112,111,116, 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, 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, 96,128,160, 2, 0, 0, 0, 0, - 1, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,128,129, 76, 1, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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,184,130, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 96,128,160, 2, 0, 0, 0, 0, 53, 1, 0, 0, 1, 0, 0, 0, 1, 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,224,129,160, 2, 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,184,130, 76, 1, 53, 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, 32, 0, 0, 0, 0,131, 76, 1, 19, 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, 87, 79, 0, 0,112, 1, 0, 0, 80,131, 76, 1,124, 0, 0, 0, 1, 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, + 1, 0, 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,128, 62, + 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61,205,204,204, 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,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, 0, 0, + 0, 0, 0, 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, 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, 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, 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,224,129,160, 2, 0, 0, 0, 0, 51, 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, 87, 79, 0, 0,232, 1, 0, 0, - 64,130,160, 2, 0, 0, 0, 0,124, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 62, 0, 0,128, 62, 0, 0, 0, 0,205,204,204, 61,205,204,204, 61, -205,204,204, 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,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, 0, 0, 0, 0, 0, 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, 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, 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, - 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, 88, 0, 0,176, 0, 0, 0, -112,132,160, 2, 0, 0, 0, 0, 28, 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, 88, 84,101,120,116, 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, - 7, 0, 0, 0, 1, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, 96,133,160, 2, 0, 0, 0, 0, - 96,133,160, 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, - 32,134,160, 2, 0, 0, 0, 0,255,255,255,255, 0, 4, 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, 96,133,160, 2, 0, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,133,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, - 68, 65, 84, 65, 4, 0, 0, 0,208,133,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0, - 64, 4, 0, 0, 96,138,160, 2, 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0,224,142,160, 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, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101, -114, 97, 46, 48, 48, 49, 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, 84, 88, 0, 0,120, 0, 0, 0,240,132, 76, 1, 28, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, 0, 0, 0,152,133, 76, 1, +152,133, 76, 1,152,133, 76, 1,152,133, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,134, 76, 1, +255,255,255,255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,133, 76, 1, + 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,133, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, + 68, 65, 84, 65, 4, 0, 0, 0,224,133, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0, 92, 3, 0, 0, + 72,138, 76, 1,115, 0, 0, 0, 1, 0, 0, 0,216,141, 76, 1, 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, 1, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,125,160, 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, + 16,127, 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,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, 42,254,141, 63,192, 57, 49, 60, @@ -1039,9 +1056,9 @@ char datatoc_B_blend[]= { 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, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,125,103,133, 51,176,219,194,178, 0, 0, 0, 0, +190, 32, 66, 51, 1, 0,128, 63,168,200,153, 51, 0, 0, 0, 0, 32,206, 18,179,126,126,149, 50, 1, 0,128, 63, 0, 0, 0, 0, +241,251,133, 52,172,182, 27,180,174,236,252, 51, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128, 129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 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, @@ -1049,146 +1066,116 @@ char datatoc_B_blend[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 79, 66, 0, 0, 64, 4, 0, 0,224,142,160, 2, - 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0, 0,148,160, 2, 0, 0, 0, 0, 96,138,160, 2, 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, 1, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,179,235, 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,144,158,160, 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,176,147,160, 2, - 0, 0, 0, 0, 96,147,160, 2, 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, 0, 0, 0, 0, 0,128, 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,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,222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, - 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, - 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, -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, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,201,234, 2, - 0, 0, 0, 0,128,171,235, 2, 0, 0, 0, 0, 25, 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, 68, 65, 84, 65, 8, 0, 0, 0,176,147,160, 2, 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, 96,147,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 64, 4, 0, 0, 0,148,160, 2, 0, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,142,160, 2, 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, 1, 0, 0, 4, 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, 32,126,160, 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,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,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 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, 53,236,148,190, -222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, - 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 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, 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, 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, 79, 66, 0, 0, 92, 3, 0, 0,216,141, 76, 1,115, 0, 0, 0, 1, 0, 0, 0,216,145, 76, 1, + 72,138, 76, 1, 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, 1, 0, 0, 4, 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, 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, +128, 62,165, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,154, 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,104,145, 76, 1, +160,145, 76, 1, 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, 0, 0, 0, 0, 0,128, 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,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, +222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, 56, 53,101, 63, 0, 0, 0,128, + 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, + 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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,104,225,155, 3, 56,161,155, 3, + 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, +104,145, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,160,145, 76, 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,216,145, 76, 1,115, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +216,141, 76, 1, 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, 1, 0, 0, 4, 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,200,127, 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,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,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 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, 35,233,134, 49,251,110, 17,179, 0, 0, 0, 0, 49,158,141, 50, 1, 0,128, 63,126,214,237, 50, 0, 0, 0, 0, +155,248, 28,178,199,139, 96,177,254,255,127, 63, 0, 0, 0, 0, 80,136,159,178,192, 4,158,178,209,114,143,179, 0, 0,128, 63, + 53,236,148,190,222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128, +235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, + 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,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, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 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, 65, 0, 0,248, 2, 0, 0,128,152,160, 2, 0, 0, 0, 0, 42, 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, 65, 77, 97,116,101,114,105, - 97,108, 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, 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, 0, 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, 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, 0, 0, 3, 0, 1, 3, 3, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0,112, 2, 0, 0, +104,149, 76, 1, 42, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 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,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, 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, 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, 0, 0, 3, 0, 1, 3, 3, 0, 1, 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,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,192,155,160, 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,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,128, 63, 0, 0,128, 63, 8,152, 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,192,152, 76, 1, 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,205,204, 76, 63,205,204, 76, 63, +205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,156,160, 2, 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,205,204, 76, 63, -205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,155,160, 2, 0, 0, 0, 0, - 33, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157,160, 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, 68, 65, 84, 65, +136, 0, 0, 0, 8,152, 76, 1, 33, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,153, 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, 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, 16, 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, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144,156,160, 2, 0, 0, 0, 0, 19, 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, 84, 69, 0, 0, 80, 1, 0, 0, - 0,157,160, 2, 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, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +192,152, 76, 1, 19, 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, 84, 69, 0, 0, 24, 1, 0, 0, 16,153, 76, 1, 38, 0, 0, 0, 1, 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, 1, 0, 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, 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, 5, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 1, 0, 0, 0, 2, 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, 1, 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, 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, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 1, 0, 0, 0, + 2, 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, 77, 69, 0, 0, 24, 1, 0, 0, + 88,154, 76, 1, 52, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 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,155, 76, 1, 32,162, 76, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 96,157, 76, 1,216,159, 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,216,155, 76, 1, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,158, 76, 1, + 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,160, 76, 1, 1, 0, 0, 0, 5, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,160,155, 76, 1, 0, 0, 0, 0, 1, 0, 0, 0,104,149, 76, 1, 68, 65, 84, 65, + 84, 1, 0, 0,216,155, 76, 1, 58, 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, - 77, 69, 0, 0,144, 1, 0, 0,144,158,160, 2, 0, 0, 0, 0, 52, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 2, 0, 0, 0, 0, 64,167,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,162,160, 2, 0, 0, 0, 0,192,164,160, 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, 96,160,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,163,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,165,160, 2, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 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, 0,168,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -128,152,160, 2, 0, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 96,160,160, 2, 0, 0, 0, 0, 56, 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, - 16,162,160, 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, 96,157, 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, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1197,16 +1184,16 @@ char datatoc_B_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, 68, 65, 84, 65,192, 0, 0, 0, 16,162,160, 2, 0, 0, 0, 0, 58, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, - 0, 0,128,191,230, 73, 26,182, 26,182,255, 0, 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, - 26,182,255, 0, 3, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, - 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, - 0, 0,128, 63,230, 73, 26,182,230, 73,255, 0, 3, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182, -230, 73,255, 0, 3, 0, 0, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, - 68, 65, 84, 65,104, 1, 0, 0, 16,163,160, 2, 0, 0, 0, 0, 56, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 96,157, 76, 1, 58, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, + 26,182,255, 0, 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255, 0, 3, 0, 0, 0, +250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, + 0, 0,128, 63,230, 73,230, 73,230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182, +230, 73,255, 0, 3, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255, 0, 3, 0, 0, 0, +255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, + 80,158, 76, 1, 58, 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,192,164,160, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,159, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1215,16 +1202,14 @@ char datatoc_B_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, + 68, 65, 84, 65,144, 0, 0, 0,216,159, 76, 1, 55, 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, 84, 1, 0, 0,152,160, 76, 1, 58, 1, 0, 0, 5, 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,144, 0, 0, 0,192,164,160, 2, 0, 0, 0, 0, 55, 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,104, 1, 0, 0,144,165,160, 2, 0, 0, 0, 0, 56, 1, 0, 0, 5, 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, - 64,167,160, 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, 32,162, 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, @@ -1233,27 +1218,27 @@ char datatoc_B_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, 68, 65, 84, 65,120, 0, 0, 0, 64,167,160, 2, 0, 0, 0, 0, 54, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0, 32,162, 76, 1, 54, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82, 64, 11, 0, 0, - 96,184, 48, 2, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 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, 47, 47, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82, 40, 11, 0, 0, +112,152,230, 0,177, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 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, 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, 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, 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, @@ -1273,7 +1258,7 @@ char datatoc_B_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, 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, 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, @@ -1283,17 +1268,17 @@ char datatoc_B_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, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 48, 52, 6, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, - 0, 0, 64, 0, 5, 0, 2, 0,208,179,160, 2, 0, 0, 0, 0,176,200,160, 2, 0, 0, 0, 0,112, 58,170, 2, 0, 0, 0, 0, -112, 58,170, 2, 0, 0, 0, 0, 0,168,170, 2, 0, 0, 0, 0, 0,168,170, 2, 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, 0, 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, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, 2, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 48, 52, 6, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, + 5, 0, 2, 0, 32,174, 76, 1,232,194, 76, 1,192,184, 73, 1,192,184, 73, 1, 72,222, 73, 1, 72,222, 73, 1, 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, 0, 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, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, + 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, @@ -1303,350 +1288,183 @@ char datatoc_B_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, 2, 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,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, 68, 65, 84, 65,160, 20, 0, 0,208,179,160, 2, 0, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0,176,200,160, 2, 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, 25, 0,231,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,255,255,255,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,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 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,180,180,180,255, 0, 0, 0,255,255,255,255,255, 1, 0, 10, 0,236,255, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,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,145,145,145,245, 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,180,180,180,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,130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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,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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, - 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, - 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, - 3, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,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, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,145,145,145,245, 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,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, - 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255, -120,145,120,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,255,255,255,128, 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,145,145,145,245, 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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, -200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, 68, 65, 84, 65,160, 20, 0, 0,176,200,160, 2, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,179,160, 2, 0, 0, 0, 0, 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, - 32, 84,104,101,109,101, 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, + 2, 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,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, 68, 65, 84, 65,152, 20, 0, 0, 32,174, 76, 1, +175, 0, 0, 0, 1, 0, 0, 0,232,194, 76, 1, 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, 25, 0,231,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, 0, 0, 0, 0, 0, 0, 0, 0, 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,180,180,180,255,153,153,153,255, 90, 90, 90,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, 46,124,217,204,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 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,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, +255,255,255,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,255,255,255,255, +255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 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,180,180,180,255, + 0, 0, 0,255,255,255,255,255, 1, 0, 10, 0,236,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +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, 145,145,145,245, 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, -175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, +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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 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,255,255,255,128, + 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,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 90, 90, 90,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, 145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, +180,180,180,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,130,130,130,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 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, +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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 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, +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, 145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228,156,198,255,255,255,170,255, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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, -195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 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,255,255,255,128, + 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,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +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, +145,145,145,245, 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,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255, +124,137,150,255, 3, 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,255,255,255,128, + 0, 0, 0,255,255,133, 0,255, 3, 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,145,145,145,245, 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,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 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, 145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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, +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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 0, 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, +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, 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,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +110,110,110,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, +145,145,145,245, 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, +132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 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,255,255,255,128, 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, -153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 2, 0, 0, 0,100, 0, 0,255, 0, 0,200,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 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, 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,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 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, +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, 145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, +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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 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,255,255,255,128, + 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,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, + 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, + 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, 145,145,145,245, 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, - 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, - 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255, -255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, -255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +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,255,140, 25,255, 16, 64, 16,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, 18,255,133, 0, 60, +255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,255,255,255,128, 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, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,255,140, 25,255, + 16, 64, 16,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, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1660,1660 +1478,1842 @@ char datatoc_B_blend[]= { 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, - 68, 78, 65, 49,176,206, 0, 0, 48,121,237, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, - 49, 10, 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117, -115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, - 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116, -105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, - 91, 51, 50, 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, 42, 42,115, 99,114,105, -112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, 99,114,105,112,116, 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,112, - 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104, -105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117, -114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114, -111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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,109,101,110,117,110,114, 0, 42, -115, 99,101,110,101, 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,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, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, 51, - 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, - 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114, -112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, - 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, - 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,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,102, 97,108,108, -111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0, -112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, - 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, - 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117, -115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116, -121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, - 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95, -112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, - 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 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,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,118,101, 99, 91, 51, 93, 91, 51, 93, 0, - 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 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, -104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102, -102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, - 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,100, -114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0, -116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 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, 42,118,101, -114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, - 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 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, -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, 51, 50, 93, 0, 42,116,101,120,116,117,114,101, 0, -115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, - 97,112,112,105,110,103, 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, - 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112, -116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101, -101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 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,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,115,121,115, 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, 42, -117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115, -105,103,110, 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, - 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, - 91, 51, 93, 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,108, - 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110, -100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, - 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115, -111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116, -114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, - 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102, -105,101,108,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,102, 95,115,116,114, -101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0,109, 97,120,100, -105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95,112,111,119,101, -114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120, -105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,102,114, 97,109,101, 0,116,111,116,112,111,105, -110,116, 0, 42,120,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,120,100, 97,116, 97, 95,116,121,112,101, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, - 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 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, 42, -112, 97,114,116,105, 99,108,101,115, 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,110,111,100,101,109, 97,115,115, 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,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,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,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, -120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 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, 83,117,114,102, 97, 99,101, 0, 42,109, -101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, 83,117,114,102, 78,111,114,109, - 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111, -114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 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,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, 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,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,112, 97,100, 91, 51, 93, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, - 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,102,102, 99,111, -100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112, -101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, - 50, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 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,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,112,111,115,116,109,117,108, - 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, 71, 73,113,117, 97, -108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, - 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, - 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, - 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73, -112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111, -110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, - 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108, -105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114, -112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97, -121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104, -111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, 91, 51, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, - 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, 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,100, -114, 97,119, 95,116,105,109,101,100, 0,115,101,108,101, 99,116,109,111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97, -116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0,112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, - 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, - 91, 53, 93, 0,103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116, -102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95, -109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0, -101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105, -114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, 99, 97,109,101,114, 97, 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, 42,101,100, 0,102,114, 97,109,105,110,103, 0, 42,116, -111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, - 99,101,115, 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, -106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115,116,101,112, 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, 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115, -116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, - 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, - 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 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,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,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,108, 97,121, 95, -117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, - 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118, -105,101,119, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, - 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97, -114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0, -109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100, -101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, - 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, - 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, - 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117,114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,112,114, -101,118,105,101,119, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120, -110,114, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114,111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, - 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105,103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 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,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, - 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, - 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115, -101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112, -109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 95,116, -105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, - 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, - 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101, -110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 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,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, 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, 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42, -105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 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,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0, -118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0, -115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112, -114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116, -117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114, -103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,102,105, -108,101,110, 97,109,101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, - 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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, -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,118, -101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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, -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,104,112, 97,100, 91, 51, 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105, -109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0, -114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117, -103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116, -104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111, -114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,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,119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, - 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, - 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, - 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102, -117,108,108, 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,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,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, 99,117, -114,115,111,114, 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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, - 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, - 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112, -100, 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115, -116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115, -116,105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, - 97, 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, - 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, - 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105, -110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111, -117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117, -115,101,100,101,108,101,109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, - 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116, -105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120, -105,115,102,108, 97,103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98, -111,100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99, -111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98, -117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, 97, - 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101, -100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109, -112, 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, - 0, 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0, -112,105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, - 0,115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, - 91, 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118, -101,108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110, -100,115,103, 97,109,101,101,110,103,105,110,101, 0, 42, 97,114,101, 97, 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, 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,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, 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,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,114,111,112, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97, -103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99, -104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113, -117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0,114,111, -116,109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, - 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116, -101,109,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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, - 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, - 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99, -121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105, -110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0, -111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116, -104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110, -100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101, -108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42, -115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, - 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,105,116,101,114, 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,115, 97,116, - 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, - 0,114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95, -111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, - 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110, -110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, - 95,116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, - 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116, -105, 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, - 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105, -109,101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, - 97,108,105,118,101, 0,108,111,111,112, 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,114,116, 50, 91, 51, 93, 0,100,114, 97,119, - 95,115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111, -117,114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, - 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0, -103,114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116, -115,104, 97,112,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,100, 97, -109,112,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,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, - 99, 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105, -110,103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98, -111,105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105, -116, 41, 40, 41, 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,116, 97,114,103, -101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118, -101,110,116,115, 0,107,101,121,101,100, 95,116, 97,114,103,101,116,115, 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, - 51, 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 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,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,107,101,121,109, 97,112,115, 0, 42,103,104,111,115,116,119,105,110, - 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, 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,107,101,121,109, 97,112, 0,110, 97,109, -101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0, 42, 99,117,115,116,111,109, -100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109,118, 97,108, 91, 50, 93, 0,112,114,101,118,120, 0,112,114,101,118, -121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121,109, 97,112, 95,105,100,110, 97,109,101, 0, 99, -117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, 0, 42,101,100, 97,116, 97, 0,105,110,102,108, -117,101,110, 99,101, 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, 42,114,110, 97, 95,112, 97,116,104, 0, 97,114,114, 97,121, 95,105, -110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, - 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 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,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121,112,101, 0,116,101,109,112,108, 97,116,101,115, - 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, 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, 0, 84, 89, 80, 69,158, 1, 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,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,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51, -105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 83, 99,114,105,112,116, 76,105,110,107, 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117, -114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, - 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, 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, 77, 83,101,108,101, 99,116, 0, - 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, 80, 97,114, -116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101, -120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 77, 68,105,115,112,115, 0, 32, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, - 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, - 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, - 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, - 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, - 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, - 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, - 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, - 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, - 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, - 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, - 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, - 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, - 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, - 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, - 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, - 32, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, - 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109, -111,100,105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117, -115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, - 97, 59, 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100, -103,101, 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, - 32, 77,117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97, -114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, - 42,118,101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, - 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, - 47, 42, 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101, -120, 44, 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99, -101,115, 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, + 68, 65, 84, 65,152, 20, 0, 0,232,194, 76, 1,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,174, 76, 1, 82,111,117,110, +100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 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, 25, 0,231,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, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +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, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, + 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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, 0, 0, 0, 51, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, +217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, + 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 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,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,107,107,107,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, + 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,255,255,255,255, +255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255, +178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255, +135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204, +255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,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, 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,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, + 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 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,255,255,255,128, 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,195,195,195,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,153,153,153,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, + 2, 0, 0, 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, 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,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255, +142,138,145,255,120,145,120,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,100,100,100,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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, 0, 0, 0, 51, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, +217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, + 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 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, 68, 78, 65, 49,204,208, 0, 0, 0, 31,154, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 83, 68, 78, 65, 78, 65, 77, 69, 59, 10, 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105, +108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116, +115, 0,118,103,114,111,117,112, 91, 51, 50, 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, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, + 99,114,105,112,116, 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,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, + 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, + 0, 89, 70, 95, 98,107,104,114,111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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, +109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 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,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, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0, +100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115, +112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, + 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108, +111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117, +109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, + 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, + 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, + 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, + 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95, +100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, + 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0, +107, 50, 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,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,118,101, + 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 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,104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, + 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,109, + 97,112,115,105,122,101, 0,100,114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, + 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0, +109,105,100, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, + 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 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,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, 51, 50, 93, 0, 42, +116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101, +118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110, +100, 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,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,115,121,115, 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, 42,117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111, +116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, + 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102, +108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, + 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70, +108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, + 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99, +116, 0,102,111,114, 99,101,102,105,101,108,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,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, + 97,109,112, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97, +100, 0,102, 95,112,111,119,101,114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, + 0,107,105,110,107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,102,114, 97,109, +101, 0,116,111,116,112,111,105,110,116, 0, 42,120,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,120,100, 97,116, 97, 95,116,121,112,101, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101, +118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 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, 42,112, 97,114,116,105, 99,108,101,115, 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,110,111,100,101,109, 97,115,115, 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,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,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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, + 97,110,105,109, 69,110,100, 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, 83,117, +114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, + 83,117,114,102, 78,111,114,109, 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, + 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97, +109, 98,107, 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,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, 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,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, +112, 97,100, 91, 51, 93, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0, +112, 97,115,115, 95,120,111,114, 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,102,102, 99,111,100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0, +115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, + 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, + 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,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, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101, +116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70, +101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0, +121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120, +101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120, +112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112, +116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97, +100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, + 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, + 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115, +105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0, +112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, + 91, 51, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 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, 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,100,114, 97,119, 95,116,105,109,101,100, 0,115,101,108,101, 99,116,109, +111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0, +112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108, +101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, 91, 53, 93, 0,103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42, +119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116,102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, + 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112, +111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, 99, 97,109,101,114, 97, 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, 42,101,100, 0,102,114, 97,109,105,110,103, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116, +115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 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,106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115, +116,101,112, 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, + 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115,116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108, +111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, + 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, + 95,100, 97,116, 97, 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,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,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,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, + 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0, +100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118,105,101,119, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111, +117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105, +101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102, +108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97, +103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, + 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117, +102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117, +114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,112,114,101,118,105,101,119, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98, +111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,110,114, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114, +111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105, +103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 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,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, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, + 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114, +107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, + 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110, +101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116, +105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101, +119,108,105,110,101,115, 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,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, 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, + 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110, +116, 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,110,117,109,116,105, +108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107, +114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111, +108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117, +114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, + 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, + 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114,112, +116, 95,109, 97,115,107, 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, 56, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,115, +116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, + 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, + 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116, +105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, + 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, + 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, + 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0, +121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,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,119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100, +111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101, +109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112, +104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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,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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42, +105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, + 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116, +105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116, +105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, + 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99, +101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70, +105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, + 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117, +112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115, +101,100,101,108,101,109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, + 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105, +109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105, +115,102,108, 97,103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111, +100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99,111, +112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98,117, +116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, 97, 99, + 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, + 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, + 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, + 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112, +105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0, +115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91, + 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101, +108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100, +115,103, 97,109,101,101,110,103,105,110,101, 0, 42, 97,114,101, 97, 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, 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,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, 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,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,114,111,112, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, + 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104, +105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, + 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0,114,111,116, +109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, + 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, + 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101, +109,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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, + 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0, +105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, + 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110, +107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111, +117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104, +114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100, +101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108, +111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115, +100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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,105,116,101,114, 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,115, 97,116, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0, +114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111, +102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, + 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110,110, +101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, 95, +116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, + 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, + 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0, +114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109, +101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97, +108,105,118,101, 0,108,111,111,112, 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,114,116, 50, 91, 51, 93, 0,100,114, 97,119, 95, +115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,117, +114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103, +114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116,115, +104, 97,112,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,100, 97,109, +112,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, +102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, 99, + 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105,110, +103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98,111, +105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, + 41, 40, 41, 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,116, 97,114,103,101, +116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118,101, +110,116,115, 0,107,101,121,101,100, 95,116, 97,114,103,101,116,115, 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, 51, + 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 42,116,121,112,101,115,116,114, 0, 42,109,101,115,115, 97,103,101, 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,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,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,107,101,121,109, 97, +112,115, 0, 42,103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97, +109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, + 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,107,101,121,109, 97,112, 0,110, 97,109,101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105, +111,110,105,100, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109,118, 97,108, 91, 50, + 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121, +109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, + 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 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, 42,114,110, 97, 95, +112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, + 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, + 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,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121, +112,101, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121, +105,110,103,102,108, 97,103, 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, 0, 84, 89, 80, 69,161, 1, 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,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,105, 0,118,101, 99, 50, +102, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0, +118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 83, 99,114,105,112,116, 76,105,110,107, + 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112, +112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111, +114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67, +111,108, 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, 77, 68,105, +115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, + 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, + 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, + 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, + 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, + 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, + 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, + 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, + 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, + 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, + 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, + 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, + 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, 32,117,108,116,105,114,101,115, 76,101,118,101,108, 59, 13, 10, 13, 10,116,121, +112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 77,117,108,116,105,114,101,115, 32,123, 13, 10, 9, 76,105,115,116, 66, 97, +115,101, 32,108,101,118,101,108,115, 59, 13, 10, 9, 77, 86,101,114,116, 32, 42,118,101,114,116,115, 59, 13, 10, 13, 10, 9,117, +110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,108,101,118,101,108, 95, 99,111,117,110,116, 44, 32, 99,117,114,114,101,110, +116, 44, 32,110,101,119,108,118,108, 44, 32,101,100,103,101,108,118,108, 44, 32,112,105,110,108,118,108, 44, 32,114,101,110,100, +101,114,108,118,108, 59, 13, 10, 9,117,110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32, +102,108, 97,103, 59, 13, 10, 13, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, + 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111, +116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, + 97, 59, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 13, 10, 9,115,104,111,114,116, 32, 42, +101,100,103,101, 95,102,108, 97,103,115, 59, 13, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, + 59, 13, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 13, 10, 13, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114, +101,115, 32, 42, 42, 47, 13, 10, 13, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, + 86,105,115,105, 98,105,108,105,116,121, 32,123, 13, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114, +116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78, +101,119, 32, 73,110,100,101,120, 32, 42, 47, 13, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32, +101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, + 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 13, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, + 59, 13, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 13, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32, -112, 97,100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118, -101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, - 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32, -109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, - 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111, -114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, - 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, - 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, - 60, 60, 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, - 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, - 47, 10, 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32, -111,114,100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, - 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35, -100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, - 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, - 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, - 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, - 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, - 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, - 45, 62,116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, - 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, - 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, - 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114, -101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, - 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, - 76, 52, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110, -117,115,101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109, -116,102, 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, - 67, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, - 86, 69, 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, - 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, - 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105, -116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, - 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97,110,115,112, 44, 32,118, 97,108, -117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103,115, 32,105,110, 32,116,104,101, - 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114,107, 32,119, -105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, - 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97, -112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108,108, 32,111,114, 32,110,111,116,104, -105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, - 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, - 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, - 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, - 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, - 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, 10,105,110, 79, 67, 75, 33,116, 95, -102, 97, 99,101, 59, 32, 32, 32, 32, 32, 65, 69, 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,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, 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, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105, -111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 0, 80, 84, 67, 97, 99,104,101, 77, -101,109, 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, 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, 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, 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, 70,114, - 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105, -110,103,115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, - 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110, -116, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86, -105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86, -105,101,119, 68, 97,116, 97, 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, 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, - 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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, 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, 83,111,108,105,100, - 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 72,101, 97,100,101,114, 0, 72,101, - 97,100,101,114, 84,121,112,101, 0, 77,101,110,117, 0, 77,101,110,117, 84,121,112,101, 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, 84, 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,104,100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, - 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76,105,115, -116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97,110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78, -111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 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, 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, 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, 72, 97,105, -114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 75, -101,121,101,100, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, - 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 0, 80, 97, -114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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,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, 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,109, 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, 0,119,109, 79,112,101,114, - 97,116,111,114, 84,121,112,101, 0, 82,101,112,111,114,116, 76,105,115,116, 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, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 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, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, - 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0, 64, 4,112, 0, 36, 0, 56, 0, -112, 0,128, 0,168, 0, 88, 0, 24, 0, 40, 0, 48, 0,176, 0, 16, 0,176, 0, 40, 0, 96, 5,184, 1, 0, 0, 0, 0, 0, 0, -144, 0, 80, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0,232, 0,136, 0,248, 1, 56, 1, 80, 0,248, 2,104, 0, 88, 1, 0, 0, -128, 0,104, 0,192, 0, 80, 0, 8, 0, 16, 0,200, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, 12, 0, - 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, - 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, 80, 0, -128, 0, 80, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0,128, 0,208, 0, 72, 0,112, 0, 0, 0,136, 0, 32, 0,240, 0, -152, 0, 0, 0, 88, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, 8, 1,104, 0,176, 1, 96, 0, 88, 0, 88, 0, 88, 0,184, 1, -136, 0,128, 0,232, 0, 48, 0,144, 0, 72, 0,120, 0,136, 0,176, 0,224, 0, 0, 0, 40, 0, 16, 0, 0, 0, 0, 0, 0, 0, -232, 1, 40, 0,184, 0,152, 0, 56, 0, 16, 0, 88, 0,248, 3, 64, 0, 16, 0, 88, 0, 24, 0, 40, 1, 8, 0, 88, 0, 88, 0, - 40, 0, 0, 0, 48, 0, 64, 1, 32, 0, 48, 2, 0, 0, 0, 0, 64, 0,248, 2,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 1, 56, 0,136, 0, 72, 0,208, 0,224, 0, 32, 0, 8, 1,224, 0,128, 1, 96, 0, 0, 0,120, 0, 0, 0, 24, 1, 16, 0, - 16, 0,168, 0,208, 0,144, 2,120, 2, 64, 0,184, 0, 16, 1, 72, 0,192, 2, 24, 1, 32, 0,232, 0, 32, 0, 32, 0, 48, 2, - 16, 1, 16, 0,160, 20, 56, 0, 64, 11, 32, 0, 40, 0, 80, 1, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,184, 0, 0, 0, - 24, 1, 0, 0, 40, 0, 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 72, 1, 0, 0, 32, 0, 12, 0, - 24, 0, 48, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 80, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, - 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 32, 0, 20, 0, - 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 64, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 40, 0, - 0, 0, 88, 0,208, 0, 40, 0, 24, 1,160, 0,232, 1,120, 0,248, 0, 88, 0, 56, 0, 80, 0,128, 0, 80, 0,112, 0, 56, 0, - 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 28, 0, 28, 0, 28, 0, 56, 0, - 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0, 0, 1, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, - 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, 72, 0, 24, 0, 56, 0, - 72, 0, 40, 0, 8, 1, 40, 2, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0,208, 0,224, 0, 72, 0, 0, 0, 0, 0, -104, 0, 0, 0,104, 0, 0, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0,104, 0, 32, 1, - 16, 0,104, 0, 0, 1, 40, 0,192, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 83, 84, 82, 67,100, 1, 0, 0, 10, 0, 2, 0, - 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, - 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, - 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, - 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, - 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, - 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, - 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, - 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, - 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, - 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, - 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, - 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, - 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, - 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, - 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, - 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, - 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, - 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, - 40, 0, 5, 0, 27, 0, 84, 0, 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, 0, 41, 0, 6, 0, 41, 0, 0, 0, - 41, 0, 1, 0, 0, 0, 88, 0, 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, 0, 42, 0, 0, 0, 42, 0, 1, 0, - 4, 0, 91, 0, 4, 0, 92, 0, 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, - 43, 0, 15, 0, 27, 0, 31, 0, 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, 0, 41, 0,100, 0, 41, 0,101, 0, - 4, 0,102, 0, 4, 0,103, 0, 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0,108, 0, 8, 0,109, 0, - 44, 0, 3, 0, 4, 0,110, 0, 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, - 2, 0, 19, 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, 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0, 7, 0,125, 0, 36, 0, 80, 0, - 40, 0,126, 0, 32, 0,127, 0, 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0, - 2, 0,133, 0, 2, 0, 19, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 2, 0,138, 0, 47, 0,139, 0, - 48, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, 0, 51, 0,143, 0, 2, 0,134, 0, - 2, 0, 19, 0, 2, 0,144, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, - 2, 0,148, 0, 2, 0,149, 0, 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, 0, 44, 0,154, 0, 30, 0,155, 0, - 0, 0,156, 0, 7, 0,157, 0, 4, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 7, 0,163, 0, - 7, 0,164, 0, 52, 0, 31, 0, 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 2, 0,168, 0, 32, 0,169, 0, 53, 0,170, 0, - 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 0, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, - 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 2, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, - 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0, 57, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, - 7, 0,194, 0, 54, 0, 15, 0, 0, 0,195, 0, 9, 0,196, 0, 0, 0,197, 0, 0, 0,198, 0, 4, 0,199, 0, 4, 0,200, 0, - 9, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 4, 0,205, 0, 9, 0,206, 0, 9, 0,207, 0, 4, 0,208, 0, - 4, 0, 37, 0, 55, 0, 6, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,209, 0, 7, 0, 67, 0, 4, 0, 64, 0, - 56, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,210, 0, 55, 0,204, 0, 57, 0, 17, 0, 32, 0,169, 0, - 48, 0,211, 0, 58, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,114, 0, 7, 0,115, 0, - 7, 0,216, 0, 4, 0,217, 0, 2, 0,218, 0, 2, 0,219, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,220, 0, 2, 0,221, 0, - 53, 0, 57, 0, 27, 0, 31, 0, 39, 0, 75, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, - 7, 0,227, 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, - 7, 0,235, 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0,242, 0, - 2, 0,243, 0, 2, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0,248, 0, 2, 0, 19, 0, 2, 0, 17, 0, - 2, 0,215, 0, 7, 0,249, 0, 7, 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,132, 0, 4, 0, 23, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0, 0, 1, 7, 0, 1, 1, 7, 0,191, 0, - 46, 0, 2, 1, 59, 0, 3, 1, 36, 0, 80, 0, 48, 0,211, 0, 54, 0, 4, 1, 56, 0, 5, 1, 57, 0, 6, 1, 30, 0,155, 0, - 0, 0, 7, 1, 0, 0, 8, 1, 60, 0, 8, 0, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0,177, 0, 4, 0, 19, 0, 7, 0, 11, 1, - 7, 0, 12, 1, 7, 0, 13, 1, 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, - 4, 0, 14, 1, 2, 0,179, 0, 2, 0, 15, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 16, 1, - 7, 0, 17, 1, 7, 0, 18, 1, 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, 62, 0, 27, 1, 2, 0, 28, 1, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0, 29, 1, - 7, 0, 30, 1, 7, 0, 31, 1, 2, 0, 32, 1, 2, 0, 33, 1, 2, 0, 34, 1, 2, 0, 35, 1, 0, 0, 36, 1, 0, 0, 37, 1, - 2, 0, 38, 1, 2, 0, 39, 1, 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, - 7, 0, 46, 1, 2, 0, 47, 1, 2, 0, 43, 0, 2, 0, 48, 1, 2, 0, 49, 1, 2, 0, 50, 1, 2, 0, 51, 1, 7, 0, 52, 1, - 7, 0, 53, 1, 7, 0, 54, 1, 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, - 7, 0, 61, 1, 7, 0, 62, 1, 7, 0, 63, 1, 2, 0, 64, 1, 2, 0, 65, 1, 4, 0, 66, 1, 4, 0, 67, 1, 2, 0, 68, 1, - 2, 0, 69, 1, 2, 0, 70, 1, 2, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 2, 0, 76, 1, - 2, 0, 77, 1, 52, 0, 78, 1, 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, - 64, 0,130, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 79, 1, 2, 0, 19, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 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, 7, 0, 87, 1, - 7, 0, 88, 1, 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, 7, 0,100, 1, 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, 0, 0,110, 1, 0, 0,111, 1, - 7, 0,112, 1, 7, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, - 2, 0,120, 1, 2, 0,121, 1, 4, 0, 14, 1, 4, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, - 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, - 7, 0,135, 1, 7, 0,136, 1, 0, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 4, 0,141, 1, 0, 0,142, 1, - 0, 0, 48, 1, 0, 0,143, 1, 0, 0, 7, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0, 65, 1, 2, 0,146, 1, 2, 0,147, 1, - 2, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 2, 0,165, 0, 2, 0,166, 0, - 56, 0,154, 1, 56, 0,155, 1, 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, 0, 0,159, 1, 2, 0,160, 1, 2, 0,161, 1, - 7, 0,162, 1, 7, 0,163, 1, 52, 0, 78, 1, 59, 0, 3, 1, 36, 0, 80, 0, 65, 0,164, 1, 30, 0,155, 0, 7, 0,165, 1, - 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 2, 0,170, 1, 2, 0, 70, 0, 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, 2, 0,180, 1, - 2, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, - 4, 0,189, 1, 40, 0,126, 0, 12, 0,190, 1, 66, 0, 4, 0, 27, 0, 31, 0, 0, 0,191, 1, 67, 0, 2, 0, 44, 0,154, 0, - 68, 0, 26, 0, 68, 0, 0, 0, 68, 0, 1, 0, 69, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, 4, 0,195, 1, 4, 0,196, 1, - 4, 0,197, 1, 4, 0,198, 1, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,199, 1, 2, 0,200, 1, 7, 0, 5, 0, 7, 0, 6, 0, - 7, 0, 7, 0, 7, 0,201, 1, 7, 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, 23, 0, 7, 0,208, 1, 7, 0,209, 1, 70, 0, 16, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0,210, 1, 12, 0,211, 1, - 12, 0,212, 1, 36, 0, 80, 0, 64, 0,213, 1, 2, 0, 19, 0, 2, 0,214, 1, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, - 7, 0, 10, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, - 7, 0,221, 1, 2, 0, 55, 0, 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 0, 0,226, 1, 0, 0,227, 1, - 34, 0, 7, 0, 7, 0,228, 1, 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, 7, 0,221, 1, 7, 0, 37, 0, - 71, 0, 21, 0, 71, 0, 0, 0, 71, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, 2, 0, 19, 0, 2, 0,230, 1, - 2, 0,231, 1, 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, - 7, 0,239, 1, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, 72, 0, 5, 0, 2, 0,243, 1, - 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, - 7, 0,244, 1, 74, 0, 62, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 0,192, 1, 12, 0,245, 1, 12, 0,211, 1, 12, 0,246, 1, - 32, 0,247, 1, 32, 0,248, 1, 32, 0,249, 1, 36, 0, 80, 0, 75, 0,250, 1, 38, 0,251, 1, 64, 0,213, 1, 12, 0,252, 1, - 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 4, 0,178, 0, 2, 0,253, 1, 2, 0,214, 1, 2, 0, 19, 0, 2, 0,254, 1, - 7, 0,255, 1, 7, 0, 0, 2, 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, - 34, 0, 5, 2, 2, 0, 23, 0, 2, 0, 99, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 16, 2, 0, 0, 17, 2, - 76, 0, 18, 2, 77, 0, 19, 2, 0, 0, 20, 2, 66, 0, 21, 2, 66, 0, 22, 2, 66, 0, 23, 2, 66, 0, 24, 2, 4, 0, 25, 2, - 7, 0, 26, 2, 4, 0, 27, 2, 4, 0, 28, 2, 73, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, 72, 0, 32, 2, 72, 0, 33, 2, - 78, 0, 39, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, 64, 0,213, 1, 79, 0, 35, 2, - 80, 0, 36, 2, 81, 0, 37, 2, 82, 0, 38, 2, 83, 0, 39, 2, 84, 0, 40, 2, 85, 0, 41, 2, 86, 0, 42, 2, 78, 0, 43, 2, - 87, 0, 44, 2, 88, 0, 45, 2, 89, 0, 46, 2, 89, 0, 47, 2, 89, 0, 48, 2, 4, 0, 54, 0, 4, 0, 49, 2, 4, 0, 50, 2, - 4, 0, 51, 2, 4, 0, 52, 2, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0, 53, 2, 4, 0, 54, 2, - 2, 0, 55, 2, 2, 0, 19, 0, 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,214, 1, 2, 0, 58, 2, 90, 0, 59, 2, 91, 0, 60, 2, - 81, 0, 8, 0, 9, 0, 61, 2, 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, - 2, 0, 66, 2, 79, 0, 7, 0, 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, 2, 0,229, 1, 0, 0, 71, 2, - 0, 0, 19, 0, 83, 0, 5, 0, 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, 2, 0, 19, 0, 92, 0, 2, 0, - 4, 0, 74, 2, 7, 0,220, 1, 84, 0, 3, 0, 92, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, 82, 0, 6, 0, 7, 0, 77, 2, - 2, 0, 78, 2, 2, 0,229, 1, 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,184, 0, 85, 0, 4, 0, 0, 0,209, 0, 0, 0,185, 0, - 0, 0,186, 0, 0, 0,187, 0, 93, 0, 6, 0, 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, - 2, 0, 66, 2, 94, 0, 1, 0, 7, 0, 79, 2, 95, 0, 5, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, - 4, 0, 37, 0, 86, 0, 1, 0, 7, 0, 80, 2, 87, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, 80, 0, 7, 0, 7, 0, 62, 2, - 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 96, 0, 1, 0, 7, 0, 82, 2, - 97, 0, 1, 0, 4, 0, 83, 2, 98, 0, 1, 0, 0, 0, 84, 2, 99, 0, 1, 0, 7, 0, 62, 2,100, 0, 3, 0, 4, 0, 85, 2, - 0, 0, 96, 0, 7, 0, 86, 2,102, 0, 4, 0, 7, 0,209, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,103, 0, 1, 0, -102, 0, 63, 2,104, 0, 5, 0, 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, 0, 0,184, 0,105, 0, 2, 0, - 4, 0, 89, 2, 4, 0, 88, 2,106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 0, 90, 2,103, 0, 91, 2,105, 0, 92, 2, - 4, 0, 54, 0, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 37, 0, 82, 0, 93, 2, 90, 0, 14, 0, 12, 0, 94, 2, 82, 0, 93, 2, - 0, 0, 95, 2, 0, 0, 96, 2, 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, 0, 0,101, 2, 0, 0, 19, 0, - 89, 0, 46, 2, 89, 0, 48, 2, 2, 0,102, 2, 0, 0,103, 2, 91, 0, 8, 0, 4, 0,104, 2, 4, 0,105, 2, 79, 0,106, 2, - 83, 0,107, 2, 4, 0, 50, 2, 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, 0,107, 0, 0, 0,107, 0, 1, 0, - 4, 0, 17, 0, 4, 0, 14, 1, 0, 0, 20, 0, 47, 0,139, 0, 0, 0,108, 2,108, 0, 7, 0,107, 0,109, 2, 2, 0,110, 2, - 2, 0, 94, 2, 2, 0,111, 2, 2, 0, 94, 0, 9, 0,112, 2, 9, 0,113, 2,109, 0, 3, 0,107, 0,109, 2, 32, 0,169, 0, - 0, 0, 20, 0,110, 0, 5, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0, 2, 0,114, 2, 0, 0,115, 2,111, 0, 5, 0, -107, 0,109, 2, 7, 0, 92, 0, 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,112, 0, 5, 0,107, 0,109, 2, 32, 0,119, 2, - 0, 0, 72, 0, 4, 0, 14, 1, 4, 0, 19, 0,113, 0, 13, 0,107, 0,109, 2, 32, 0,120, 2, 32, 0,121, 2, 32, 0,122, 2, - 32, 0,123, 2, 7, 0,124, 2, 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 4, 0, 94, 0, - 4, 0,129, 2,114, 0, 5, 0,107, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, 32, 0,132, 2,115, 0, 3, 0, -107, 0,109, 2, 7, 0,133, 2, 4, 0, 94, 0,116, 0, 10, 0,107, 0,109, 2, 7, 0,134, 2, 4, 0,135, 2, 4, 0, 37, 0, - 2, 0, 94, 0, 2, 0,136, 2, 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2,117, 0, 3, 0,107, 0,109, 2, - 7, 0, 37, 0, 4, 0, 17, 0,118, 0, 11, 0,107, 0,109, 2, 53, 0,141, 2, 7, 0,142, 2, 4, 0,143, 2, 0, 0,140, 2, - 7, 0,144, 2, 4, 0,145, 2, 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 10, 0,107, 0,109, 2, - 32, 0,149, 2, 48, 0,150, 2, 4, 0, 94, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, 0, 0,147, 2, 4, 0,148, 2, - 4, 0, 37, 0,120, 0, 3, 0,107, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,121, 0, 5, 0,107, 0,109, 2, 7, 0,156, 2, - 0, 0,140, 2, 2, 0, 19, 0, 2, 0,157, 2,122, 0, 8, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,156, 2, 7, 0,221, 1, - 7, 0,110, 0, 0, 0,140, 2, 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 0,109, 2, 32, 0,158, 2, 0, 0,140, 2, - 53, 0,141, 2, 32, 0,146, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, - 7, 0,162, 2, 7, 0,163, 2, 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, 0, 0,147, 2, 7, 0,166, 2, - 7, 0,167, 2, 7, 0, 43, 0,124, 0, 7, 0,107, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, 4, 0, 70, 0, 32, 0,169, 0, - 7, 0,170, 2, 0, 0,140, 2,125, 0, 9, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,171, 2, 7, 0,172, 2, 7, 0,165, 2, - 4, 0,173, 2, 4, 0,174, 2, 7, 0,175, 2, 0, 0, 20, 0,126, 0, 1, 0,107, 0,109, 2,127, 0, 6, 0,107, 0,109, 2, - 47, 0,139, 0,128, 0,176, 2,129, 0,177, 2,130, 0,178, 2,131, 0,179, 2,132, 0, 14, 0,107, 0,109, 2, 82, 0,180, 2, - 82, 0,181, 2, 82, 0,182, 2, 82, 0,183, 2, 82, 0,184, 2, 82, 0,185, 2, 79, 0,186, 2, 4, 0,187, 2, 4, 0,188, 2, - 2, 0,189, 2, 2, 0, 37, 0, 7, 0,190, 2,133, 0,191, 2,134, 0, 3, 0,107, 0,109, 2,135, 0,192, 2,136, 0,191, 2, -137, 0, 4, 0,107, 0,109, 2, 32, 0,169, 0, 4, 0,193, 2, 4, 0, 37, 0,138, 0, 2, 0, 4, 0,194, 2, 7, 0,220, 1, -139, 0, 2, 0, 4, 0,130, 0, 4, 0,195, 2,140, 0, 20, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0,140, 2, 2, 0,196, 2, - 2, 0,197, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,198, 2, 7, 0,199, 2, 4, 0, 54, 0, 4, 0,200, 2,139, 0,201, 2, -138, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 4, 0,205, 2, 4, 0,195, 2, 7, 0,206, 2, 7, 0,207, 2, 7, 0,208, 2, -141, 0, 8, 0,107, 0,109, 2,142, 0,209, 2,135, 0,192, 2, 4, 0,210, 2, 4, 0,211, 2, 4, 0,212, 2, 2, 0, 19, 0, - 2, 0, 57, 0,143, 0, 8, 0,107, 0,109, 2, 32, 0, 45, 0, 2, 0,213, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, - 7, 0,214, 2, 7, 0,215, 2,144, 0, 5, 0,107, 0,109, 2, 4, 0,216, 2, 2, 0, 19, 0, 2, 0,217, 2, 7, 0,218, 2, -145, 0, 7, 0,107, 0,109, 2, 82, 0,219, 2, 4, 0,220, 2, 0, 0,221, 2, 0, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2, -146, 0, 3, 0,107, 0,109, 2,147, 0,225, 2,131, 0,179, 2,148, 0, 10, 0,107, 0,109, 2, 32, 0,226, 2, 32, 0,227, 2, - 0, 0,228, 2, 7, 0,229, 2, 2, 0,230, 2, 2, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 0, 0,115, 2,149, 0, 9, 0, -107, 0,109, 2, 32, 0,234, 2, 0, 0,228, 2, 7, 0,235, 2, 7, 0,236, 2, 0, 0, 14, 1, 0, 0,130, 2, 0, 0,237, 2, - 0, 0, 37, 0,150, 0, 27, 0, 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,238, 2, 2, 0, 19, 0, 2, 0,239, 2, - 2, 0,240, 2, 2, 0,241, 2, 2, 0, 70, 0, 0, 0,242, 2, 0, 0,243, 2, 0, 0,244, 2, 0, 0, 17, 0, 4, 0, 37, 0, - 7, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 34, 0,251, 2, 36, 0, 80, 0, - 38, 0,251, 1, 84, 0, 40, 2, 7, 0,252, 2, 7, 0,253, 2,150, 0,254, 2,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, - 0, 0, 20, 0, 69, 0, 3, 0, 7, 0,255, 2, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,112, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 2, 0, 17, 0, 2, 0, 0, 3, 4, 0, 1, 3, 4, 0, 2, 3, 4, 0, 3, 3, 0, 0, 4, 3, 32, 0, 38, 0, 32, 0, 5, 3, - 32, 0, 6, 3, 32, 0, 7, 3, 32, 0, 8, 3, 36, 0, 80, 0, 75, 0,250, 1, 69, 0,192, 1,152, 0, 9, 3,152, 0, 10, 3, -153, 0, 11, 3, 9, 0, 2, 0, 12, 0, 12, 3, 12, 0, 34, 2, 12, 0,211, 1, 12, 0, 13, 3, 12, 0, 14, 3, 64, 0,213, 1, - 0, 0, 15, 3, 4, 0,214, 1, 4, 0, 16, 3, 7, 0, 9, 1, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0,177, 0, 7, 0, 19, 3, - 7, 0, 10, 1, 7, 0, 20, 3, 7, 0, 21, 3, 7, 0,171, 2, 7, 0, 22, 3, 7, 0,213, 0, 4, 0, 23, 3, 2, 0, 19, 0, - 2, 0, 24, 3, 2, 0, 25, 3, 2, 0, 26, 3, 2, 0, 27, 3, 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, - 2, 0, 32, 3, 2, 0, 33, 3, 2, 0, 34, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 7, 0, 39, 3, - 7, 0, 26, 2, 7, 0, 40, 3, 7, 0, 41, 3, 7, 0, 42, 3, 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, - 7, 0, 47, 3, 7, 0, 48, 3, 7, 0, 49, 3, 0, 0, 50, 3, 0, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, - 7, 0, 55, 3, 40, 0,126, 0, 12, 0, 56, 3, 12, 0, 57, 3, 12, 0, 58, 3, 12, 0, 59, 3, 7, 0, 60, 3, 2, 0, 81, 2, - 2, 0, 61, 3, 7, 0, 63, 2, 4, 0, 62, 3, 4, 0, 63, 3,154, 0, 64, 3, 2, 0, 65, 3, 2, 0,220, 0, 7, 0, 66, 3, - 12, 0, 67, 3, 12, 0, 68, 3, 12, 0, 69, 3, 12, 0, 70, 3,155, 0, 71, 3,156, 0, 72, 3, 65, 0, 73, 3, 2, 0, 74, 3, - 2, 0, 75, 3, 2, 0, 76, 3, 2, 0, 77, 3, 7, 0, 55, 2, 2, 0, 78, 3, 2, 0, 79, 3,147, 0, 80, 3,135, 0, 81, 3, -135, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 4, 0, 85, 3, 4, 0, 70, 0, 12, 0, 86, 3,157, 0, 14, 0,157, 0, 0, 0, -157, 0, 1, 0, 32, 0, 38, 0, 7, 0,171, 2, 7, 0, 11, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, - 4, 0,174, 2, 4, 0, 87, 3, 2, 0, 17, 0, 2, 0, 88, 3, 7, 0,175, 2,155, 0, 36, 0, 2, 0, 89, 3, 2, 0, 90, 3, - 2, 0, 19, 0, 2, 0,165, 2, 7, 0, 91, 3, 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, - 7, 0, 97, 3, 7, 0, 98, 3, 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, - 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, - 7, 0,113, 3, 7, 0,114, 3, 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 53, 0,170, 0,158, 0,119, 3, - 7, 0,120, 3, 4, 0,118, 2,159, 0, 6, 0,159, 0, 0, 0,159, 0, 1, 0, 4, 0,121, 3, 4, 0,122, 3, 7, 0, 2, 0, - 9, 0,123, 3,131, 0, 12, 0, 4, 0, 19, 0, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, - 4, 0,129, 3, 4, 0,130, 3, 0, 0,131, 3, 0, 0,132, 3, 0, 0,133, 3, 12, 0,134, 3,160, 0, 1, 0, 7, 0,228, 1, -154, 0, 30, 0, 4, 0, 19, 0, 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3, 4, 0,138, 3, 4, 0,139, 3, 4, 0,140, 3, - 4, 0,141, 3, 7, 0,142, 3, 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, - 7, 0,149, 3, 7, 0,150, 3, 7, 0,151, 3, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, - 7, 0,157, 3, 7, 0,158, 3, 7, 0,159, 3, 4, 0,160, 3, 4, 0,161, 3, 7, 0,162, 3, 7, 0, 46, 3,156, 0, 44, 0, -142, 0,163, 3, 4, 0,122, 3, 4, 0,164, 3,161, 0,165, 3,162, 0,166, 3, 7, 0, 37, 0, 7, 0,167, 3, 7, 0,168, 3, - 7, 0,169, 3, 7, 0,170, 3, 7, 0,171, 3, 7, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, - 2, 0,177, 3, 2, 0,178, 3, 7, 0,179, 3, 7, 0,180, 3, 4, 0,131, 0, 4, 0,181, 3, 4, 0,182, 3, 2, 0,183, 3, - 2, 0,184, 3,160, 0,185, 3, 4, 0,186, 3, 4, 0, 82, 0, 7, 0,187, 3, 7, 0,188, 3, 7, 0,189, 3, 7, 0,190, 3, - 2, 0,191, 3, 2, 0,192, 3, 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3, 2, 0,197, 3, 2, 0,198, 3, -163, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3,131, 0,202, 3,147, 0, 48, 0, 2, 0, 17, 0, 2, 0,203, 3, 2, 0,204, 3, - 2, 0,205, 3, 7, 0,206, 3, 2, 0,207, 3, 2, 0,208, 3, 7, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 7, 0,212, 3, - 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 4, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, - 7, 0,221, 3, 78, 0,222, 3, 78, 0,223, 3, 78, 0,224, 3, 0, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 36, 0, 80, 0, - 2, 0,228, 3, 0, 0,229, 3, 0, 0,230, 3, 7, 0,231, 3, 4, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 4, 0,235, 3, - 4, 0, 19, 0, 7, 0,236, 3, 7, 0,237, 3, 7, 0,238, 3, 82, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, - 7, 0,243, 3, 7, 0,244, 3, 7, 0,245, 3, 7, 0,246, 3, 4, 0,247, 3,164, 0, 72, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 2, 0,179, 0, 2, 0, 15, 1, 2, 0, 48, 1, 2, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, - 7, 0,253, 3, 7, 0,254, 3, 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 86, 1, 7, 0, 88, 1, 7, 0, 87, 1, 7, 0, 1, 4, - 4, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, - 2, 0, 10, 4, 2, 0, 14, 1, 2, 0, 11, 4, 2, 0, 12, 4, 2, 0, 13, 4, 2, 0, 14, 4, 2, 0, 15, 4, 2, 0, 16, 4, - 7, 0, 17, 4, 7, 0, 18, 4, 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, - 7, 0, 25, 4, 7, 0, 26, 4, 7, 0, 27, 4, 7, 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, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 2, 0, 40, 4, - 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 19, 0, - 7, 0, 48, 4, 7, 0, 49, 4, 36, 0, 80, 0, 52, 0, 78, 1, 30, 0,155, 0, 40, 0,126, 0,165, 0, 8, 0,165, 0, 0, 0, -165, 0, 1, 0, 4, 0, 23, 3, 4, 0, 50, 4, 4, 0, 19, 0, 2, 0, 51, 4, 2, 0, 52, 4, 32, 0,169, 0,166, 0, 13, 0, - 9, 0, 53, 4, 9, 0, 54, 4, 4, 0, 55, 4, 4, 0, 56, 4, 4, 0, 57, 4, 4, 0, 58, 4, 4, 0, 59, 4, 4, 0, 60, 4, - 4, 0, 61, 4, 4, 0, 62, 4, 4, 0, 63, 4, 4, 0, 37, 0, 0, 0, 64, 4,167, 0, 5, 0, 9, 0, 65, 4, 9, 0, 66, 4, - 4, 0, 67, 4, 4, 0, 70, 0, 0, 0, 68, 4,168, 0, 13, 0, 4, 0, 17, 0, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, - 4, 0, 72, 4, 4, 0, 73, 4, 4, 0, 94, 0, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, - 26, 0, 30, 0,169, 0, 4, 0, 4, 0, 79, 4, 7, 0, 80, 4, 2, 0, 19, 0, 2, 0, 81, 4,170, 0, 11, 0,170, 0, 0, 0, -170, 0, 1, 0, 0, 0, 20, 0, 64, 0, 82, 4, 65, 0, 83, 4, 4, 0, 23, 3, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 37, 0, - 4, 0, 86, 4, 4, 0, 87, 4,171, 0,131, 0,166, 0, 88, 4,167, 0, 89, 4,168, 0, 90, 4,169, 0, 91, 4, 4, 0, 92, 4, - 4, 0,131, 0, 4, 0,181, 3, 4, 0, 93, 4, 4, 0, 94, 4, 4, 0, 95, 4, 4, 0, 96, 4, 2, 0, 19, 0, 2, 0, 97, 4, - 7, 0, 26, 2, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 2, 0,103, 4, 2, 0,104, 4, - 2, 0,105, 4, 2, 0,106, 4, 2, 0,219, 0, 2, 0,107, 4, 2, 0,108, 4, 2, 0,118, 3, 2, 0,109, 4, 2, 0,110, 4, - 2, 0, 35, 1, 2, 0,110, 0, 2, 0,111, 4, 2, 0,112, 4, 2, 0,113, 4, 2, 0,114, 4, 2, 0,115, 4, 2, 0,116, 4, - 2, 0,117, 4, 2, 0,118, 4, 2, 0,119, 4, 2, 0, 36, 1, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, - 4, 0,124, 4, 4, 0, 14, 1, 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, - 24, 0,131, 4, 24, 0,132, 4, 23, 0,133, 4, 12, 0,134, 4, 2, 0,135, 4, 2, 0, 37, 0, 7, 0,136, 4, 7, 0,137, 4, - 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 2, 0,145, 4, - 2, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, - 2, 0,154, 4, 2, 0,155, 4, 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, - 2, 0,162, 4, 2, 0,163, 4, 4, 0,164, 4, 4, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 7, 0,169, 4, - 4, 0,170, 4, 4, 0,171, 4, 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, - 7, 0,178, 4, 7, 0,179, 4, 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 0, 0,183, 4, 0, 0,184, 4, 4, 0,185, 4, - 2, 0,186, 4, 2, 0,161, 1, 0, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 7, 0,192, 4, - 7, 0,193, 4, 2, 0,194, 4, 2, 0,195, 4, 7, 0,196, 4, 2, 0,197, 4, 2, 0,198, 4, 4, 0,199, 4, 2, 0,200, 4, - 2, 0,201, 4, 2, 0,202, 4, 2, 0,203, 4, 7, 0,204, 4, 7, 0, 70, 0, 43, 0,205, 4,172, 0, 9, 0,172, 0, 0, 0, -172, 0, 1, 0, 0, 0, 20, 0, 2, 0,206, 4, 2, 0,207, 4, 2, 0,208, 4, 2, 0, 43, 0, 7, 0,209, 4, 7, 0, 70, 0, -173, 0, 5, 0, 7, 0,210, 4, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,161, 1,174, 0, 5, 0,174, 0, 0, 0, -174, 0, 1, 0, 4, 0,121, 3, 0, 0,131, 3, 4, 0, 19, 0,175, 0, 6, 0,176, 0,211, 4, 2, 0, 19, 0, 2, 0,212, 4, - 2, 0,213, 4, 2, 0,214, 4, 9, 0,215, 4,177, 0, 4, 0, 2, 0,110, 0, 2, 0,142, 2, 2, 0,124, 3, 2, 0,216, 4, -178, 0, 10, 0, 2, 0, 19, 0, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4,177, 0,220, 4, 9, 0,215, 4, 7, 0,221, 4, - 4, 0,222, 4, 4, 0,223, 4, 4, 0, 37, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 0,224, 4, 7, 0,225, 4, -180, 0, 8, 0,181, 0,226, 4,176, 0,211, 4, 7, 0,227, 4, 4, 0, 94, 0, 0, 0,228, 4, 0, 0,229, 4, 0, 0,230, 4, - 0, 0,231, 4,182, 0, 9, 0,176, 0,211, 4, 7, 0,232, 4, 7, 0,233, 4, 2, 0, 14, 1, 2, 0, 19, 0, 4, 0, 36, 0, - 4, 0,234, 4, 84, 0,235, 4, 9, 0,215, 4,183, 0, 72, 0,182, 0,236, 4,182, 0,237, 4,180, 0,238, 4, 7, 0,239, 4, - 2, 0,240, 4, 2, 0,241, 4, 7, 0,242, 4, 7, 0,243, 4, 2, 0,124, 3, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, - 7, 0,247, 4, 2, 0,248, 4, 2, 0,223, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, - 7, 0,254, 4, 7, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, - 2, 0, 6, 5,175, 0, 7, 5,178, 0, 8, 5, 7, 0, 9, 5, 7, 0, 10, 5, 7, 0, 11, 5, 2, 0, 12, 5, 2, 0, 70, 0, - 0, 0, 13, 5, 0, 0, 14, 5, 0, 0, 15, 5, 0, 0, 16, 5, 0, 0, 17, 5, 0, 0, 18, 5, 2, 0, 19, 5, 7, 0, 20, 5, - 7, 0, 21, 5, 7, 0, 22, 5, 7, 0, 23, 5, 7, 0, 24, 5, 7, 0, 25, 5, 7, 0, 26, 5, 7, 0, 27, 5, 7, 0, 28, 5, - 7, 0, 29, 5, 2, 0, 30, 5, 0, 0, 31, 5, 0, 0, 32, 5, 0, 0, 33, 5, 0, 0, 34, 5, 32, 0, 35, 5, 0, 0, 36, 5, - 0, 0, 37, 5, 0, 0, 38, 5, 0, 0, 39, 5, 0, 0, 40, 5, 0, 0, 41, 5, 0, 0, 42, 5, 0, 0, 43, 5, 2, 0, 44, 5, - 2, 0, 45, 5, 2, 0, 46, 5, 2, 0, 47, 5, 2, 0, 48, 5,184, 0, 8, 0, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, - 4, 0, 52, 5, 4, 0, 53, 5, 4, 0, 54, 5, 4, 0, 54, 0, 4, 0, 50, 2, 47, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 32, 0, 55, 5,164, 0, 56, 5, 47, 0, 57, 5, 48, 0,211, 0, 12, 0, 58, 5,165, 0, 59, 5, 32, 0, 60, 5, 7, 0, 61, 5, - 7, 0, 62, 5, 7, 0, 63, 5, 7, 0, 64, 5, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 7, 1, 59, 0, 3, 1,185, 0, 65, 5, -173, 0, 66, 5,183, 0, 67, 5,186, 0, 68, 5,171, 0,185, 0,169, 0, 91, 4, 40, 0,126, 0, 12, 0,104, 0, 12, 0, 69, 5, -187, 0, 70, 5, 2, 0, 71, 5, 2, 0, 72, 5, 2, 0,220, 0, 2, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 12, 0, 76, 5, -188, 0, 6, 0, 48, 0,211, 0, 46, 0, 2, 1, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,110, 0, 7, 0, 77, 5,189, 0, 35, 0, - 7, 0, 78, 5, 7, 0, 79, 5, 7, 0, 80, 5, 7, 0, 81, 5, 7, 0, 82, 5, 7, 0, 83, 5, 7, 0, 84, 5, 7, 0, 85, 5, - 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 87, 5, 7, 0, 88, 5, 7, 0, 89, 5, 7, 0, 90, 5, 7, 0,176, 0, 2, 0, 91, 5, - 2, 0, 92, 5, 4, 0, 93, 5, 2, 0, 94, 5, 2, 0, 95, 5, 2, 0, 96, 5, 2, 0, 97, 5, 7, 0, 98, 5, 69, 0, 99, 5, -190, 0,100, 5,189, 0,101, 5,191, 0,102, 5,192, 0,103, 5,193, 0,104, 5,194, 0,105, 5,195, 0,106, 5, 7, 0,107, 5, - 2, 0,108, 5, 2, 0,109, 5, 4, 0,161, 1,196, 0, 54, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, - 7, 0,112, 5, 2, 0,113, 5, 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 43, 0, 4, 0,114, 5, 2, 0, 96, 5, 2, 0, 97, 5, - 32, 0, 55, 5, 32, 0,115, 5,188, 0,116, 5,196, 0,101, 5, 0, 0,117, 5, 4, 0, 23, 3, 4, 0,118, 5, 2, 0,119, 5, - 2, 0,120, 5, 2, 0,121, 5, 2, 0,122, 5, 2, 0,161, 1, 2, 0, 19, 0, 2, 0,123, 5, 2, 0,124, 5, 7, 0,116, 0, - 7, 0,125, 5, 7, 0,126, 5, 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,176, 0, 7, 0, 61, 5, 2, 0,130, 5, - 2, 0, 65, 1, 2, 0,131, 5, 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, - 2, 0,138, 5, 4, 0,139, 5, 12, 0,140, 5, 2, 0,141, 5, 2, 0, 64, 2, 2, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, - 9, 0,145, 5,190, 0,100, 5,198, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,146, 5, 23, 0,147, 5, 23, 0,148, 5, - 7, 0,149, 5, 7, 0,150, 5, 7, 0,151, 5, 7, 0,152, 5, 2, 0,153, 5, 2, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, - 2, 0,157, 5, 2, 0, 19, 0, 2, 0,158, 5, 2, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 2, 0,162, 5, 2, 0,122, 5, - 7, 0,163, 5,197, 0, 6, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, -199, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,200, 0,164, 5, - 47, 0,139, 0,201, 0, 14, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, -198, 0,165, 5,202, 0,166, 5, 12, 0,167, 5, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5, -203, 0, 31, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,191, 0,102, 5, - 2, 0,171, 5, 2, 0,172, 5, 2, 0,158, 5, 2, 0,173, 5,198, 0,165, 5, 2, 0,174, 5, 2, 0,138, 0, 2, 0,169, 5, - 2, 0,175, 5, 9, 0,176, 5, 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0, 32, 3, - 2, 0,182, 5, 2, 0,183, 5, 0, 0, 19, 0, 0, 0, 48, 1, 9, 0,250, 1, 4, 0,184, 5, 4, 0,185, 5, 27, 0,186, 5, -204, 0, 16, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, - 7, 0, 14, 2, 7, 0, 15, 2, 2, 0,174, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 4, 0, 19, 0, 7, 0,190, 5, -190, 0,100, 5,205, 0, 15, 0, 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 19, 0, 2, 0,194, 5, 2, 0,195, 5, - 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, 4, 0,197, 5, 4, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, 0, 0,201, 5, - 0, 0,202, 5,206, 0, 12, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 4, 0, 37, 0,205, 0,203, 5, -207, 0,204, 5, 12, 0,205, 5, 12, 0,206, 5,208, 0,207, 5,195, 0,208, 5,209, 0,209, 5,210, 0, 17, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 12, 0,210, 5,211, 0,211, 5, - 0, 0,212, 5,212, 0,213, 5, 4, 0,214, 5, 4, 0,215, 5, 2, 0, 19, 0, 2, 0,216, 5, 2, 0,217, 5, 2, 0, 37, 0, -213, 0, 29, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 48, 0,150, 2, - 46, 0, 2, 1, 62, 0,218, 5, 2, 0,138, 0, 2, 0,219, 5, 2, 0, 70, 0, 2, 0,220, 5, 4, 0, 19, 0, 2, 0,221, 5, - 2, 0,170, 5, 2, 0,169, 5, 2, 0,161, 1, 0, 0,222, 5, 0, 0,223, 5, 0, 0,224, 5, 0, 0,122, 5, 7, 0, 14, 2, - 7, 0, 15, 2, 7, 0,190, 5, 7, 0, 65, 1, 7, 0,225, 5, 7, 0,226, 5,190, 0,100, 5,214, 0, 11, 0,197, 0, 0, 0, -197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0,168, 5, 2, 0, 19, 0, 4, 0, 37, 0, -202, 0,166, 5,198, 0,165, 5,215, 0, 27, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, - 2, 0,113, 5, 43, 0,227, 5, 4, 0,228, 5, 4, 0,229, 5, 2, 0, 94, 0, 2, 0,138, 0, 2, 0,230, 5, 0, 0,231, 5, - 0, 0,232, 5, 4, 0,233, 5, 4, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 2, 0,237, 5, 2, 0,238, 5, 7, 0,239, 5, - 23, 0,240, 5, 23, 0,241, 5, 4, 0,242, 5, 4, 0,243, 5, 0, 0,244, 5, 0, 0,245, 5,216, 0, 10, 0, 27, 0, 31, 0, - 9, 0,246, 5, 9, 0,247, 5, 9, 0,248, 5, 9, 0,249, 5, 9, 0,250, 5, 4, 0, 94, 0, 4, 0,251, 5, 0, 0,252, 5, - 0, 0,253, 5,217, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,216, 0,254, 5, - 2, 0, 94, 0, 2, 0,138, 0, 4, 0, 43, 0, 9, 0,255, 5,218, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, - 4, 0,111, 5, 7, 0,112, 5,198, 0,165, 5, 4, 0, 19, 0, 4, 0, 0, 6,219, 0, 23, 0,197, 0, 0, 0,197, 0, 1, 0, - 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 27, 0, 1, 6, 27, 0, 81, 0, 2, 0, 19, 0, - 2, 0,138, 0, 7, 0, 2, 6, 9, 0, 3, 6, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 4, 6, 7, 0, 5, 6, 59, 0, 3, 1, - 59, 0, 6, 6, 4, 0, 7, 6, 2, 0,178, 5, 2, 0, 37, 0,190, 0,100, 5,220, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, - 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0, 19, 0, 2, 0, 32, 3, 4, 0, 37, 0,190, 0,100, 5, -221, 0, 42, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, -207, 0,204, 5, 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 17, 0, 2, 0,200, 5, 2, 0, 19, 0, 2, 0,194, 5, - 9, 0, 3, 6, 4, 0,197, 5, 4, 0, 8, 6, 4, 0, 9, 6, 4, 0,198, 5, 23, 0, 10, 6, 23, 0, 11, 6, 7, 0, 12, 6, - 7, 0, 13, 6, 7, 0, 14, 6, 7, 0, 2, 6, 2, 0, 15, 6, 2, 0,210, 0, 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, - 2, 0, 43, 0, 2, 0, 16, 6, 2, 0, 17, 6, 9, 0, 18, 6, 9, 0, 19, 6, 9, 0, 20, 6, 9, 0, 21, 6, 9, 0, 22, 6, - 2, 0, 23, 6, 0, 0,202, 5, 58, 0, 24, 6,222, 0, 7, 0,222, 0, 0, 0,222, 0, 1, 0, 0, 0, 25, 6, 2, 0, 26, 6, - 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 37, 0,223, 0, 12, 0, 2, 0, 27, 6, 2, 0, 29, 6, 2, 0, 30, 6, 0, 0,115, 2, - 2, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 35, 6, 2, 0,158, 5, 7, 0, 36, 6, 7, 0, 37, 6, -224, 0, 18, 0,224, 0, 0, 0,224, 0, 1, 0, 0, 0,131, 3,223, 0, 38, 6,223, 0, 39, 6,223, 0, 40, 6,223, 0, 41, 6, - 7, 0, 42, 6, 2, 0, 43, 6, 2, 0, 44, 6, 2, 0, 45, 6, 2, 0, 46, 6, 2, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, - 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 52, 6,225, 0, 10, 0, 0, 0, 53, 6, 0, 0, 54, 6, 0, 0, 55, 6, 0, 0, 56, 6, - 0, 0, 57, 6, 0, 0, 58, 6, 2, 0, 59, 6, 2, 0, 60, 6, 2, 0, 61, 6, 2, 0, 37, 0,226, 0, 8, 0, 0, 0, 62, 6, - 0, 0, 63, 6, 0, 0, 64, 6, 0, 0, 65, 6, 0, 0, 66, 6, 0, 0, 67, 6, 7, 0, 77, 5, 7, 0, 37, 0,227, 0, 16, 0, -225, 0, 68, 6,225, 0, 69, 6,225, 0, 70, 6,225, 0, 71, 6,225, 0, 72, 6,225, 0, 73, 6,225, 0, 74, 6,225, 0, 75, 6, -225, 0, 76, 6,225, 0, 77, 6,225, 0, 78, 6,225, 0, 79, 6,225, 0, 80, 6,225, 0, 81, 6,226, 0, 82, 6, 0, 0, 83, 6, -228, 0, 71, 0, 0, 0, 84, 6, 0, 0, 85, 6, 0, 0, 57, 6, 0, 0, 86, 6, 0, 0, 87, 6, 0, 0, 88, 6, 0, 0, 89, 6, - 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 92, 6, 0, 0, 93, 6, 0, 0, 94, 6, 0, 0, 95, 6, 0, 0, 96, 6, 0, 0, 97, 6, - 0, 0, 98, 6, 0, 0, 99, 6, 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0,103, 6, 0, 0,104, 6, 0, 0,105, 6, - 0, 0,106, 6, 0, 0,107, 6, 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, - 0, 0,114, 6, 0, 0,115, 6, 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, - 0, 0,122, 6, 0, 0,123, 6, 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, - 0, 0,130, 6, 0, 0,131, 6, 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, - 0, 0,138, 6, 0, 0,139, 6, 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, - 0, 0,146, 6, 0, 0,147, 6, 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0, 96, 0, -229, 0, 5, 0, 0, 0,153, 6, 0, 0,108, 6, 0, 0,110, 6, 2, 0, 19, 0, 2, 0, 37, 0,230, 0, 21, 0,230, 0, 0, 0, -230, 0, 1, 0, 0, 0, 20, 0,227, 0,154, 6,228, 0,155, 6,228, 0,156, 6,228, 0,157, 6,228, 0,158, 6,228, 0,159, 6, -228, 0,160, 6,228, 0,161, 6,228, 0,162, 6,228, 0,163, 6,228, 0,164, 6,228, 0,165, 6,228, 0,166, 6,228, 0,167, 6, -228, 0,168, 6,228, 0,169, 6,228, 0,170, 6,229, 0,171, 6,231, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, - 7, 0,172, 6, 7, 0,228, 1,232, 0, 67, 0, 4, 0, 19, 0, 4, 0,173, 6, 4, 0,174, 6, 0, 0,175, 6, 0, 0,176, 6, - 0, 0,177, 6, 0, 0,178, 6, 0, 0,179, 6, 0, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, 0, 0,183, 6, 2, 0,184, 6, - 2, 0, 37, 0, 4, 0,185, 6, 4, 0,186, 6, 4, 0,187, 6, 4, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6, 4, 0,191, 6, - 4, 0, 43, 0, 4, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 12, 0,197, 6, 12, 0,198, 6, - 12, 0,199, 6, 2, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, 2, 0,203, 6, 2, 0,204, 6, 2, 0,205, 6, 2, 0,206, 6, - 2, 0,207, 6,231, 0,208, 6, 2, 0,209, 6, 2, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, - 2, 0,215, 6, 2, 0,216, 6, 4, 0,217, 6, 4, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, - 2, 0,223, 6, 2, 0,224, 6, 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, - 0, 0,231, 6, 0, 0,232, 6, 7, 0,233, 6, 2, 0, 12, 5, 2, 0,234, 6, 56, 0,235, 6,200, 0, 21, 0, 27, 0, 31, 0, - 12, 0,236, 6, 12, 0,237, 6, 12, 0,238, 6, 12, 0,110, 5, 47, 0,139, 0, 47, 0,239, 6, 2, 0,240, 6, 2, 0,241, 6, - 2, 0,242, 6, 2, 0,243, 6, 2, 0,244, 6, 2, 0,245, 6, 2, 0,246, 6, 2, 0, 37, 0, 2, 0,247, 6, 2, 0,248, 6, - 4, 0, 70, 0,195, 0,249, 6, 9, 0,250, 6, 2, 0,251, 6,233, 0, 5, 0,233, 0, 0, 0,233, 0, 1, 0,233, 0,252, 6, - 13, 0,253, 6, 4, 0, 19, 0,234, 0, 7, 0,234, 0, 0, 0,234, 0, 1, 0,233, 0,254, 6,233, 0,255, 6, 2, 0,132, 4, - 2, 0, 19, 0, 4, 0, 37, 0,235, 0, 23, 0,235, 0, 0, 0,235, 0, 1, 0,236, 0, 0, 7,237, 0,209, 5, 0, 0, 1, 7, - 0, 0, 2, 7, 0, 0, 3, 7, 2, 0, 4, 7, 2, 0, 5, 7, 2, 0, 6, 7, 2, 0, 7, 7, 2, 0, 8, 7, 2, 0, 37, 0, - 2, 0, 19, 0, 2, 0, 9, 7, 2, 0, 10, 7, 2, 0, 11, 7, 4, 0, 12, 7,235, 0, 13, 7, 9, 0, 14, 7, 4, 0, 15, 7, - 4, 0, 16, 7, 0, 0, 17, 7,238, 0, 2, 0,239, 0, 0, 7,237, 0,209, 5,240, 0, 2, 0,241, 0, 0, 7,237, 0,209, 5, -242, 0, 23, 0,242, 0, 0, 0,242, 0, 1, 0,233, 0,254, 6,233, 0,255, 6,233, 0, 18, 7,233, 0, 19, 7,200, 0, 20, 7, - 23, 0, 52, 0, 0, 0,111, 5, 0, 0, 21, 7, 2, 0,159, 5, 2, 0,160, 5, 2, 0, 22, 7, 2, 0, 37, 0, 2, 0,243, 6, - 2, 0, 23, 7, 2, 0, 19, 0, 40, 0,126, 0,243, 0, 0, 7, 12, 0, 24, 7, 12, 0,110, 5, 12, 0, 25, 7, 12, 0, 26, 7, -244, 0, 21, 0,244, 0, 0, 0,244, 0, 1, 0,198, 0,165, 5, 23, 0, 27, 7, 23, 0, 28, 7, 2, 0,159, 5, 2, 0,160, 5, - 2, 0, 29, 7, 2, 0, 30, 7, 2, 0, 31, 7, 2, 0, 19, 0, 7, 0, 10, 2, 2, 0,242, 6, 2, 0,246, 6, 4, 0, 43, 0, -245, 0, 0, 7, 12, 0, 32, 7, 12, 0, 33, 7, 12, 0, 25, 7, 0, 0, 34, 7, 9, 0, 35, 7,246, 0, 11, 0, 0, 0, 36, 7, - 2, 0, 37, 7, 2, 0, 38, 7, 2, 0, 39, 7, 2, 0, 40, 7, 2, 0,121, 4, 2, 0,116, 4,200, 0, 41, 7, 47, 0, 42, 7, - 4, 0, 43, 7, 4, 0, 44, 7,247, 0, 1, 0, 0, 0, 45, 7,248, 0, 8, 0, 58, 0, 46, 7, 58, 0, 47, 7,248, 0, 48, 7, -248, 0, 49, 7,248, 0, 50, 7, 2, 0,134, 0, 2, 0, 19, 0, 4, 0, 51, 7,249, 0, 4, 0, 4, 0,228, 5, 4, 0, 52, 7, - 4, 0,233, 5, 4, 0, 53, 7,250, 0, 2, 0, 4, 0, 54, 7, 4, 0, 55, 7,251, 0, 7, 0, 7, 0, 56, 7, 7, 0, 57, 7, - 7, 0, 58, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 3, 4, 7, 0, 59, 7,252, 0, 6, 0, 0, 0, 60, 7, 0, 0,193, 5, - 50, 0,142, 0, 2, 0,110, 0, 2, 0,120, 4, 4, 0, 37, 0,253, 0, 21, 0,253, 0, 0, 0,253, 0, 1, 0, 4, 0, 57, 0, - 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 61, 7, 4, 0, 62, 7, 4, 0, 63, 7,247, 0, 64, 7, 0, 0, 60, 7, 4, 0, 65, 7, - 4, 0, 66, 7,252, 0, 6, 3,249, 0, 67, 7,250, 0, 68, 7,251, 0, 69, 7,248, 0, 70, 7,248, 0, 71, 7,248, 0, 72, 7, - 58, 0, 73, 7, 58, 0, 74, 7,254, 0, 12, 0, 0, 0,191, 1, 9, 0,196, 0, 0, 0,197, 0, 4, 0,200, 0, 4, 0,208, 0, - 9, 0,201, 0, 7, 0,203, 0, 7, 0,204, 0, 9, 0, 75, 7, 9, 0, 76, 7, 9, 0,205, 0, 9, 0,207, 0,255, 0, 43, 0, -255, 0, 0, 0,255, 0, 1, 0, 9, 0, 77, 7, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, - 4, 0, 92, 0, 4, 0, 78, 7, 4, 0, 79, 7, 4, 0, 62, 7, 4, 0, 63, 7, 4, 0, 80, 7, 4, 0,219, 0, 4, 0, 81, 7, - 4, 0, 82, 7, 7, 0,233, 4, 7, 0, 83, 7, 4, 0,131, 0, 4, 0, 84, 7,253, 0, 85, 7, 36, 0, 80, 0, 47, 0,139, 0, - 50, 0,142, 0, 7, 0, 86, 7, 7, 0, 87, 7,254, 0, 4, 1,255, 0, 88, 7,255, 0, 89, 7,255, 0, 90, 7, 12, 0, 91, 7, - 0, 1, 92, 7, 1, 1, 93, 7, 7, 0, 94, 7, 7, 0, 95, 7, 4, 0, 96, 7, 7, 0, 97, 7, 9, 0, 98, 7, 4, 0, 99, 7, - 4, 0,100, 7, 4, 0,101, 7, 7, 0,102, 7, 2, 1, 4, 0, 2, 1, 0, 0, 2, 1, 1, 0, 12, 0,103, 7,255, 0,104, 7, -185, 0, 6, 0, 12, 0,105, 7, 12, 0, 91, 7, 12, 0,106, 7,255, 0,107, 7, 0, 0,108, 7, 0, 0,109, 7, 3, 1, 4, 0, - 7, 0,110, 7, 7, 0,113, 0, 2, 0,111, 7, 2, 0,112, 7, 4, 1, 6, 0, 7, 0,113, 7, 7, 0,114, 7, 7, 0,115, 7, - 7, 0,116, 7, 4, 0,117, 7, 4, 0,118, 7, 5, 1, 12, 0, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 7, 0,122, 7, - 7, 0,123, 7, 7, 0,124, 7, 7, 0,125, 7, 7, 0,126, 7, 7, 0,127, 7, 7, 0,128, 7, 4, 0,154, 2, 4, 0,129, 7, - 6, 1, 2, 0, 7, 0,210, 4, 7, 0, 37, 0, 7, 1, 5, 0, 7, 0,130, 7, 7, 0,131, 7, 4, 0, 94, 0, 4, 0,116, 2, - 4, 0,132, 7, 8, 1, 6, 0, 8, 1, 0, 0, 8, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0, 57, 0, - 9, 1, 8, 0, 9, 1, 0, 0, 9, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0, 57, 0, 7, 0, 23, 0, - 7, 0,131, 0, 10, 1, 45, 0, 10, 1, 0, 0, 10, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0,215, 0, - 2, 0,177, 3, 2, 0,134, 7, 7, 0,135, 7, 7, 0, 93, 0, 7, 0,167, 2, 4, 0,136, 7, 4, 0, 82, 0, 4, 0,118, 2, - 7, 0,137, 7, 7, 0,138, 7, 7, 0,139, 7, 7, 0,140, 7, 7, 0,141, 7, 7, 0,142, 7, 7, 0,164, 2, 7, 0, 1, 1, - 7, 0,143, 7, 7, 0,144, 7, 7, 0, 37, 0, 7, 0,145, 7, 7, 0,146, 7, 7, 0,147, 7, 2, 0,148, 7, 2, 0,149, 7, - 2, 0,150, 7, 2, 0,151, 7, 2, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,123, 5, 2, 0,156, 7, - 2, 0,211, 1, 2, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, 7, 0,213, 0, 11, 1,160, 7, 65, 0,164, 1, 12, 1, 16, 0, - 12, 1, 0, 0, 12, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,133, 7, 2, 0,215, 0, 7, 0,159, 2, 7, 0,160, 2, - 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, 7, 0,161, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2, -212, 0, 5, 0, 2, 0, 17, 0, 2, 0, 51, 7, 2, 0, 19, 0, 2, 0,162, 7, 27, 0, 1, 6,211, 0, 3, 0, 4, 0, 69, 0, - 4, 0,163, 7,212, 0, 2, 0, 13, 1, 11, 0, 13, 1, 0, 0, 13, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0,164, 7, - 4, 0, 22, 0, 4, 0,165, 7, 2, 0, 19, 0, 2, 0, 37, 0, 9, 0,166, 7, 9, 0,167, 7, 14, 1, 5, 0, 0, 0, 20, 0, - 7, 0, 21, 1, 7, 0,168, 7, 4, 0,169, 7, 4, 0, 37, 0, 15, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, - 2, 0, 70, 0, 16, 1, 4, 0, 0, 0, 20, 0, 64, 0,170, 7, 7, 0, 21, 1, 7, 0, 37, 0, 17, 1, 6, 0, 2, 0,171, 7, - 2, 0,172, 7, 2, 0, 17, 0, 2, 0,173, 7, 0, 0,174, 7, 0, 0,175, 7, 18, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, - 0, 0, 20, 0, 0, 0,176, 7, 0, 0,177, 7, 19, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 20, 1, 4, 0, - 2, 0,178, 7, 2, 0,179, 7, 2, 0, 19, 0, 2, 0, 37, 0, 21, 1, 6, 0, 0, 0, 20, 0, 0, 0,180, 7, 2, 0,181, 7, - 2, 0,164, 2, 2, 0, 14, 1, 2, 0, 70, 0, 22, 1, 5, 0, 0, 0, 20, 0, 7, 0,113, 0, 7, 0, 5, 4, 2, 0, 19, 0, - 2, 0,130, 2, 23, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, 4, 0,178, 7, 24, 1, 7, 0, 0, 0, 20, 0, 7, 0, 5, 4, - 0, 0,182, 7, 0, 0,183, 7, 2, 0, 14, 1, 2, 0, 43, 0, 4, 0,184, 7, 25, 1, 3, 0, 32, 0,185, 7, 0, 0,186, 7, - 0, 0,187, 7, 26, 1, 18, 0, 26, 1, 0, 0, 26, 1, 1, 0, 2, 0, 17, 0, 2, 0,164, 7, 2, 0, 19, 0, 2, 0,188, 7, - 2, 0,189, 7, 2, 0,190, 7, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, 27, 1,191, 7, 32, 0, 45, 0, - 2, 0,216, 4, 2, 0, 94, 7, 2, 0,192, 7, 2, 0, 37, 0, 28, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,193, 7, - 2, 0, 19, 0, 2, 0,130, 2, 2, 0,194, 7, 4, 0,195, 7, 4, 0,196, 7, 4, 0,197, 7, 4, 0,198, 7, 4, 0,199, 7, - 29, 1, 1, 0, 0, 0,200, 7, 30, 1, 4, 0, 43, 0,227, 5, 0, 0,201, 7, 4, 0, 14, 1, 4, 0, 19, 0, 27, 1, 18, 0, - 27, 1, 0, 0, 27, 1, 1, 0, 27, 1,202, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,203, 7, 2, 0,190, 7, 2, 0,164, 7, - 2, 0,204, 7, 2, 0, 70, 0, 2, 0,161, 1, 0, 0, 20, 0, 9, 0, 2, 0, 31, 1,191, 7, 26, 1,205, 7, 2, 0, 15, 0, - 2, 0,206, 7, 4, 0,207, 7, 32, 1, 3, 0, 4, 0,190, 2, 4, 0, 37, 0, 32, 0, 45, 0, 33, 1, 12, 0,152, 0,208, 7, - 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,135, 7, 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,209, 7, 2, 0,210, 7, 2, 0,211, 7, - 2, 0,212, 7, 2, 0,213, 7, 7, 0,214, 7, 34, 1, 10, 0, 2, 0, 19, 0, 2, 0,215, 7, 4, 0,135, 7, 4, 0, 93, 0, - 2, 0,216, 7, 0, 1, 92, 7, 2, 0, 17, 0, 2, 0,217, 7, 2, 0,218, 7, 2, 0,219, 7, 35, 1, 7, 0, 2, 0, 19, 0, - 2, 0,215, 7, 4, 0,135, 7, 4, 0, 93, 0, 2, 0, 17, 0, 2, 0,220, 7, 7, 0,137, 3, 36, 1, 11, 0, 4, 0,190, 2, - 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 0,221, 7, 0, 0, 20, 0, 7, 0,222, 7, 7, 0,223, 7, 7, 0, 40, 3, - 2, 0,224, 7, 2, 0,225, 7, 37, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 0, 55, 5, - 38, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0,176, 7, 32, 0, 45, 0, 39, 1, 13, 0, 2, 0, 19, 0, - 2, 0, 17, 0, 2, 0,164, 7, 2, 0, 41, 3, 7, 0,226, 7, 7, 0,227, 7, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0, 17, 3, - 7, 0, 20, 3, 7, 0,228, 7, 7, 0,229, 7, 32, 0,230, 7, 40, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,135, 7, - 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,209, 7, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,231, 7, 2, 0,232, 7, 41, 1, 8, 0, - 32, 0, 45, 0, 7, 0,161, 2, 7, 0,233, 7, 7, 0,234, 7, 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,235, 7, - 42, 1, 12, 0, 2, 0, 17, 0, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,164, 2, 2, 0,190, 2, 2, 0,236, 7, 4, 0, 37, 0, - 7, 0,237, 7, 7, 0,238, 7, 7, 0,239, 7, 7, 0,240, 7, 0, 0,241, 7, 43, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, - 4, 0,135, 7, 4, 0, 93, 0, 0, 0, 20, 0, 2, 0, 81, 4, 2, 0, 64, 0, 2, 0,231, 7, 2, 0,232, 7, 65, 0,164, 1, - 44, 1, 7, 0, 4, 0,118, 2, 4, 0,242, 7, 4, 0,243, 7, 4, 0,244, 7, 7, 0,245, 7, 7, 0,246, 7, 0, 0,182, 7, - 45, 1, 7, 0, 0, 0,247, 7, 32, 0,248, 7, 0, 0,186, 7, 2, 0,249, 7, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,187, 7, - 46, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,135, 7, 4, 0, 93, 0, 0, 0,250, 7, 0, 0,251, 7, 47, 1, 1, 0, - 4, 0, 19, 0, 48, 1, 6, 0, 0, 0, 96, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,252, 7, 7, 0,253, 7, 43, 0,227, 5, - 49, 1, 4, 0, 0, 0,184, 0, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 45, 0, 50, 1, 2, 0, 4, 0, 17, 0, 4, 0,148, 5, - 31, 1, 10, 0, 31, 1, 0, 0, 31, 1, 1, 0, 31, 1,202, 7, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,164, 7, 2, 0,254, 7, - 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 51, 1, 10, 0, 7, 0, 40, 3, 7, 0,255, 7, 7, 0, 0, 8, 7, 0, 1, 8, - 7, 0, 2, 8, 4, 0, 19, 0, 7, 0,236, 7, 7, 0, 3, 8, 7, 0, 4, 8, 7, 0, 37, 0, 0, 1, 20, 0, 27, 0, 31, 0, - 0, 0,195, 0, 52, 1, 5, 8, 9, 0, 6, 8, 44, 0,154, 0, 44, 0, 7, 8, 9, 0, 8, 8, 36, 0, 80, 0, 7, 0,137, 3, - 7, 0, 9, 8, 7, 0, 10, 8, 7, 0, 11, 8, 7, 0, 12, 8, 7, 0, 13, 8, 7, 0, 14, 8, 4, 0, 94, 0, 4, 0, 15, 8, - 0, 0, 16, 8, 0, 0, 17, 8, 0, 0, 18, 8, 53, 1, 6, 0, 27, 0, 31, 0, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 21, 8, - 2, 0, 22, 8, 2, 0, 23, 8, 54, 1, 15, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, -242, 0, 24, 8,198, 0,165, 5, 0, 1, 92, 7, 2, 0, 14, 1, 2, 0,215, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, - 2, 0,170, 5, 4, 0, 70, 0, 55, 1, 6, 0, 55, 1, 0, 0, 55, 1, 1, 0, 32, 0, 45, 0, 9, 0, 25, 8, 4, 0,220, 0, - 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, 0, 12, 0, 26, 8, 4, 0,136, 0, 7, 0, 27, 8, 56, 1, 25, 0, 56, 1, 0, 0, - 56, 1, 1, 0, 56, 1, 38, 0, 12, 0, 28, 8, 0, 0, 20, 0, 7, 0, 29, 8, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, - 4, 0, 19, 0, 7, 0, 33, 8, 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 21, 1, 7, 0,220, 1, 7, 0, 36, 8, 7, 0,116, 2, - 7, 0, 37, 8, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, 7, 0, 41, 8, 7, 0,177, 0, 2, 0,136, 0, 2, 0,249, 4, - 57, 1, 20, 0, 27, 0, 31, 0, 12, 0, 42, 8, 12, 0, 43, 8, 12, 0, 44, 8, 4, 0, 19, 0, 4, 0,119, 5, 2, 0,168, 2, - 2, 0,184, 5, 2, 0,136, 0, 2, 0, 45, 8, 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, 2, 0, 49, 8, 4, 0, 50, 8, - 4, 0, 51, 8, 4, 0, 52, 8, 4, 0, 53, 8, 4, 0, 54, 8, 4, 0, 55, 8, 58, 1, 38, 0, 58, 1, 0, 0, 58, 1, 1, 0, - 26, 0, 56, 8, 12, 0, 67, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0, 57, 8, 2, 0, 58, 8, 2, 0, 59, 8, 2, 0, 26, 3, - 2, 0, 60, 8, 4, 0,253, 1, 4, 0, 52, 8, 4, 0, 53, 8, 56, 1, 61, 8, 58, 1, 38, 0, 58, 1, 62, 8, 12, 0, 63, 8, - 9, 0, 64, 8, 9, 0, 65, 8, 9, 0, 66, 8, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 67, 8, 7, 0,201, 1, 2, 0, 68, 8, - 2, 0, 37, 0, 7, 0, 69, 8, 7, 0, 70, 8, 7, 0, 22, 3, 7, 0, 71, 8, 7, 0, 72, 8, 7, 0, 73, 8, 7, 0, 74, 8, - 7, 0, 75, 8, 7, 0, 76, 8, 7, 0,250, 1, 32, 0, 77, 8,153, 0, 9, 0, 12, 0, 78, 8, 2, 0, 19, 0, 2, 0, 79, 8, - 7, 0, 26, 2, 7, 0, 80, 8, 7, 0, 81, 8, 12, 0, 82, 8, 4, 0, 83, 8, 4, 0, 37, 0, 59, 1, 7, 0, 59, 1, 0, 0, - 59, 1, 1, 0, 12, 0, 16, 8, 4, 0, 19, 0, 4, 0, 84, 8, 0, 0,131, 3,229, 0, 85, 8,152, 0, 7, 0, 27, 0, 31, 0, - 12, 0, 86, 8, 12, 0, 78, 8, 12, 0, 87, 8, 12, 0,104, 0, 4, 0, 19, 0, 4, 0, 88, 8,202, 0, 4, 0, 27, 0, 89, 8, - 12, 0, 78, 8, 4, 0, 90, 8, 4, 0, 19, 0, 60, 1, 17, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, - 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,152, 0, 9, 3,202, 0, 91, 8, 0, 0, 14, 1, 0, 0,168, 5, 2, 0, 19, 0, - 2, 0, 92, 8, 2, 0,169, 5, 2, 0,170, 5, 2, 0, 93, 8, 7, 0, 94, 8, 61, 1, 8, 0, 61, 1, 0, 0, 61, 1, 1, 0, - 59, 1, 95, 8, 36, 0, 80, 0, 12, 0, 12, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 96, 8, 62, 1, 5, 0, 62, 1, 0, 0, - 62, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0, 97, 8, 63, 1, 12, 0, 63, 1, 0, 0, 63, 1, 1, 0, 9, 0, 2, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 98, 8, 0, 0, 99, 8, 0, 0, 97, 8, 7, 0,100, 8, 7, 0,101, 8, 4, 0, 37, 0, - 36, 0, 80, 0, 64, 1, 9, 0, 64, 1, 0, 0, 64, 1, 1, 0, 32, 0,102, 8, 0, 0,103, 8, 7, 0,104, 8, 2, 0,105, 8, - 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 65, 1, 7, 0, 43, 0,227, 5, 26, 0, 56, 8, 4, 0, 19, 0, 4, 0,106, 8, - 12, 0,107, 8, 32, 0,102, 8, 0, 0,103, 8, 66, 1, 12, 0, 32, 0,102, 8, 2, 0,108, 8, 2, 0, 19, 0, 2, 0,109, 8, - 2, 0,110, 8, 0, 0,103, 8, 32, 0,111, 8, 0, 0,112, 8, 7, 0,113, 8, 7, 0,220, 1, 7, 0,114, 8, 7, 0,115, 8, - 67, 1, 6, 0, 32, 0,102, 8, 4, 0,116, 8, 4, 0,117, 8, 4, 0, 94, 0, 4, 0, 37, 0, 0, 0,103, 8, 68, 1, 4, 0, - 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, 0, 0,103, 8, 69, 1, 4, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, - 0, 0,103, 8, 70, 1, 10, 0, 32, 0,102, 8, 4, 0,118, 8, 7, 0,130, 0, 4, 0, 19, 0, 2, 0,223, 5, 2, 0,119, 8, - 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,120, 8, 0, 0,103, 8, 71, 1, 4, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0,116, 8, - 0, 0,103, 8, 72, 1, 10, 0, 32, 0,102, 8, 2, 0, 17, 0, 2, 0,183, 3, 4, 0, 92, 0, 4, 0, 93, 0, 7, 0,233, 7, - 7, 0,234, 7, 4, 0, 37, 0,152, 0,208, 7, 0, 0,103, 8, 73, 1, 4, 0, 32, 0,102, 8, 4, 0, 27, 3, 4, 0,121, 8, - 0, 0,103, 8, 74, 1, 5, 0, 32, 0,102, 8, 7, 0,130, 0, 4, 0,122, 8, 4, 0, 27, 3, 4, 0, 28, 3, 75, 1, 6, 0, - 32, 0,102, 8, 4, 0,123, 8, 4, 0,124, 8, 7, 0,125, 8, 7, 0,126, 8, 0, 0,103, 8, 76, 1, 16, 0, 32, 0,102, 8, - 32, 0, 62, 8, 4, 0, 17, 0, 7, 0,127, 8, 7, 0,128, 8, 7, 0,129, 8, 7, 0,130, 8, 7, 0,131, 8, 7, 0,132, 8, - 7, 0,133, 8, 7, 0,134, 8, 7, 0,135, 8, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 77, 1, 3, 0, - 32, 0,102, 8, 4, 0, 19, 0, 4, 0,123, 5, 78, 1, 5, 0, 32, 0,102, 8, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,136, 8, - 0, 0,103, 8, 79, 1, 10, 0, 32, 0,102, 8, 0, 0,103, 8, 2, 0,137, 8, 2, 0,138, 8, 0, 0,139, 8, 0, 0,140, 8, - 7, 0,141, 8, 7, 0,142, 8, 7, 0,143, 8, 7, 0,144, 8, 80, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, - 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 81, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 82, 1, 8, 0, 7, 0, 9, 0, - 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,145, 8, 7, 0,146, 8, 2, 0, 19, 0, 2, 0,123, 5, 83, 1, 7, 0, - 32, 0,102, 8, 0, 0,103, 8, 7, 0, 21, 1, 7, 0, 31, 1, 2, 0, 19, 0, 2, 0, 14, 1, 4, 0, 37, 0, 84, 1, 5, 0, - 32, 0,226, 2, 7, 0, 21, 1, 2, 0,230, 2, 0, 0,232, 2, 0, 0,147, 8, 85, 1, 10, 0, 85, 1, 0, 0, 85, 1, 1, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,148, 8, 7, 0,222, 0, 7, 0,223, 0, 2, 0, 16, 8, 2, 0,149, 8, 32, 0, 45, 0, - 86, 1, 22, 0, 86, 1, 0, 0, 86, 1, 1, 0, 2, 0, 19, 0, 2, 0, 14, 1, 2, 0,150, 8, 2, 0,151, 8, 36, 0, 80, 0, -152, 0,208, 7, 32, 0,169, 0, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,152, 8, 7, 0,153, 8, 7, 0,154, 8, 7, 0,155, 8, - 7, 0,157, 2, 7, 0,156, 8, 7, 0,210, 7, 7, 0,157, 8, 0, 0,158, 8, 0, 0,159, 8, 12, 0, 14, 3, 87, 1, 8, 0, - 7, 0,228, 1, 7, 0,233, 7, 7, 0,234, 7, 9, 0, 2, 0, 2, 0,160, 8, 2, 0,161, 8, 2, 0,162, 8, 2, 0,163, 8, - 88, 1, 18, 0, 88, 1, 0, 0, 88, 1, 1, 0, 88, 1,164, 8, 0, 0, 20, 0, 87, 1,165, 8, 2, 0, 17, 0, 2, 0, 19, 0, - 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 2, 0,169, 8, 4, 0, 43, 0, 7, 0,170, 8, 7, 0,171, 8, 4, 0,172, 8, - 4, 0,173, 8, 88, 1,174, 8, 89, 1,175, 8, 90, 1, 33, 0, 90, 1, 0, 0, 90, 1, 1, 0, 90, 1,176, 8, 0, 0, 20, 0, - 0, 0,177, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 61, 7, 2, 0, 94, 7, 2, 0,178, 8, 2, 0,138, 0, 2, 0,167, 8, - 2, 0, 51, 7, 12, 0,203, 7, 12, 0,179, 8, 27, 0, 1, 6, 9, 0,180, 8, 7, 0,170, 8, 7, 0,171, 8, 7, 0,255, 1, - 7, 0,181, 8, 2, 0,182, 8, 2, 0,183, 8, 7, 0,184, 8, 7, 0,185, 8, 2, 0,186, 8, 2, 0,187, 8, 9, 0,188, 8, - 24, 0,189, 8, 24, 0,190, 8, 24, 0,191, 8, 91, 1,155, 0, 92, 1,192, 8, 89, 1, 8, 0, 89, 1, 0, 0, 89, 1, 1, 0, - 90, 1,193, 8, 90, 1,194, 8, 88, 1,195, 8, 88, 1,174, 8, 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 12, 0,196, 8, 12, 0,197, 8, 87, 1,198, 8, 12, 0,199, 8, 4, 0, 17, 0, 4, 0,200, 8, 4, 0,201, 8, - 4, 0,202, 8, 12, 0,203, 8, 92, 1,204, 8, 88, 1,205, 8, 88, 1,206, 8, 9, 0,207, 8, 9, 0,208, 8, 4, 0,209, 8, - 9, 0,210, 8, 9, 0,211, 8, 9, 0,212, 8, 93, 1, 6, 0, 4, 0,129, 0, 4, 0,131, 0, 4, 0, 51, 7, 0, 0,213, 8, - 0, 0,214, 8, 2, 0, 37, 0, 94, 1, 16, 0, 2, 0, 6, 7, 2, 0, 7, 7, 2, 0,215, 8, 2, 0, 0, 8, 2, 0,216, 8, - 2, 0, 68, 0, 7, 0,156, 2, 7, 0,217, 8, 7, 0,218, 8, 2, 0, 35, 1, 0, 0,219, 8, 0, 0,232, 4, 2, 0,220, 8, - 2, 0, 37, 0, 4, 0,221, 8, 4, 0,222, 8, 95, 1, 9, 0, 7, 0,223, 8, 7, 0,224, 8, 7, 0, 14, 8, 7, 0,113, 0, - 7, 0,225, 8, 7, 0,190, 5, 2, 0,226, 8, 0, 0,227, 8, 0, 0, 37, 0, 96, 1, 4, 0, 7, 0,228, 8, 7, 0,229, 8, - 2, 0,226, 8, 2, 0, 37, 0, 97, 1, 3, 0, 7, 0,230, 8, 7, 0,231, 8, 7, 0, 15, 0, 98, 1, 7, 0, 0, 0,191, 1, - 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0, 69, 4, 4, 0,131, 0, 4, 0,181, 3, 99, 1, 7, 0, 7, 0,232, 8, - 7, 0,233, 8, 7, 0,234, 8, 7, 0, 10, 2, 7, 0,235, 8, 7, 0,236, 8, 7, 0,237, 8,100, 1, 4, 0, 2, 0,238, 8, - 2, 0,239, 8, 2, 0,240, 8, 2, 0,241, 8,101, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,102, 1, 2, 0, 0, 0,171, 0, - 0, 0,242, 8,103, 1, 1, 0, 0, 0, 20, 0,104, 1, 10, 0, 0, 0,243, 8, 0, 0,244, 8, 0, 0,173, 5, 0, 0,245, 8, - 2, 0,215, 8, 2, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, 7, 0,156, 8,105, 1, 2, 0, 9, 0,250, 8, - 9, 0,251, 8,106, 1, 11, 0, 0, 0,120, 4, 0, 0, 17, 0, 0, 0,226, 8, 0, 0,113, 0, 0, 0,252, 8, 0, 0,110, 0, - 0, 0,184, 0, 7, 0,253, 8, 7, 0,254, 8, 7, 0,255, 8, 7, 0, 0, 9,107, 1, 8, 0, 7, 0,171, 7, 7, 0,130, 0, - 7, 0,232, 4, 7, 0, 82, 2, 7, 0, 1, 9, 7, 0,209, 0, 7, 0, 2, 9, 4, 0, 17, 0,108, 1, 4, 0, 2, 0, 3, 9, - 2, 0, 4, 9, 2, 0, 5, 9, 2, 0, 37, 0,109, 1, 1, 0, 0, 0, 20, 0,110, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, - 2, 0, 19, 0, 2, 0, 6, 9,111, 1, 10, 0, 2, 0,122, 3, 2, 0, 19, 0, 7, 0, 5, 4, 7, 0, 7, 9, 7, 0, 8, 9, - 7, 0, 9, 9, 7, 0, 10, 9,110, 1, 11, 9,110, 1, 12, 9,110, 1, 13, 9, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, - 24, 0, 14, 9, 24, 0, 15, 9,111, 1, 16, 9, 7, 0, 17, 9, 7, 0, 18, 9, 7, 0, 19, 9, 7, 0, 20, 9,112, 1, 4, 0, - 48, 0,150, 2, 7, 0, 21, 9, 7, 0, 94, 1, 7, 0, 37, 0,176, 0, 17, 0, 27, 0, 31, 0,112, 1, 22, 9, 62, 0, 11, 9, - 52, 0, 78, 1, 2, 0, 19, 0, 2, 0, 77, 5, 4, 0,110, 0, 7, 0, 23, 9, 7, 0, 7, 2, 7, 0, 24, 9, 7, 0, 25, 9, - 7, 0, 94, 1, 7, 0, 26, 9, 2, 0, 48, 1, 0, 0, 27, 9, 0, 0,115, 3, 0, 0, 96, 0,113, 1, 10, 0, 4, 0, 17, 0, - 4, 0,130, 0, 4, 0, 19, 0, 4, 0, 88, 3, 4, 0, 28, 9, 4, 0, 29, 9, 4, 0, 30, 9, 0, 0, 96, 0, 0, 0, 20, 0, - 9, 0, 2, 0, 89, 0, 6, 0,113, 1, 31, 9, 4, 0, 32, 9, 4, 0, 33, 9, 4, 0, 34, 9, 4, 0, 37, 0, 9, 0, 35, 9, -114, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, 2, 0, 36, 9, 2, 0, 37, 0,115, 1, 5, 0, 7, 0, 77, 2, - 7, 0, 37, 9, 7, 0, 38, 9, 7, 0, 39, 9, 7, 0,190, 2,116, 1, 7, 0, 4, 0, 40, 9, 4, 0, 41, 9, 4, 0, 42, 9, - 7, 0, 43, 9, 7, 0, 44, 9, 7, 0, 45, 9, 7, 0, 46, 9,117, 1, 8, 0,117, 1, 0, 0,117, 1, 1, 0, 32, 0, 45, 0, - 4, 0,213, 2, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0,190, 2, 7, 0,179, 7,118, 1, 26, 0, 32, 0, 47, 9,115, 1, 84, 3, -115, 1, 48, 9,114, 1, 49, 9,115, 1,160, 7, 7, 0, 50, 9, 7, 0, 51, 9, 7, 0, 52, 9, 7, 0, 53, 9, 7, 0, 44, 9, - 7, 0, 45, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 54, 9, 7, 0, 55, 9, 7, 0,110, 0, 7, 0, 56, 9, 4, 0, 40, 9, - 4, 0, 57, 9, 4, 0, 37, 0, 4, 0, 82, 0, 4, 0, 58, 9, 2, 0, 19, 0, 2, 0, 59, 9, 2, 0, 60, 9, 2, 0,118, 3, -119, 1,117, 0, 27, 0, 31, 0, 39, 0, 75, 0, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0,137, 8, 2, 0, 61, 9, 2, 0, 62, 9, - 2, 0, 68, 8, 2, 0, 63, 9, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 68, 9, 2, 0, 69, 9, - 2, 0, 70, 9, 2, 0, 71, 9, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0,211, 1, - 2, 0,153, 7, 2, 0,129, 7, 2, 0, 77, 9, 2, 0, 78, 9, 2, 0,116, 3, 2, 0,117, 3, 2, 0, 79, 9, 2, 0, 80, 9, - 2, 0, 81, 9, 2, 0, 82, 9, 2, 0, 83, 9, 2, 0, 84, 9, 7, 0, 85, 9, 7, 0, 86, 9, 7, 0, 87, 9, 2, 0, 88, 9, - 2, 0, 89, 9, 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 7, 0,135, 7, 7, 0, 93, 0, 7, 0,167, 2, 7, 0,141, 7, - 7, 0, 93, 9, 7, 0, 94, 9, 7, 0, 95, 9, 4, 0,136, 7, 4, 0,134, 7, 4, 0, 96, 9, 7, 0,137, 7, 7, 0,138, 7, - 7, 0,139, 7, 7, 0, 97, 9, 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, 40, 3, 7, 0,110, 0, 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, 4, 0,112, 9, 4, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 7, 0,117, 9, - 7, 0,118, 9, 7, 0, 57, 0, 7, 0,119, 9, 7, 0,120, 9, 7, 0,112, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,121, 9, - 7, 0,122, 9, 7, 0,123, 9, 7, 0,124, 9, 7, 0,125, 9, 7, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, - 7, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 4, 0,134, 9, 4, 0,135, 9, 7, 0, 47, 3, 7, 0,136, 9, - 7, 0,137, 9, 7, 0,138, 9, 7, 0,139, 9, 7, 0,140, 9, 7, 0,141, 9, 7, 0,142, 9, 0, 0,143, 9, 65, 0, 73, 3, - 65, 0,144, 9, 32, 0,145, 9, 32, 0,146, 9, 36, 0, 80, 0,155, 0, 71, 3,155, 0,147, 9,142, 0, 39, 0,142, 0, 0, 0, -142, 0, 1, 0,119, 1,148, 9,118, 1,163, 3,116, 1, 62, 8,120, 1,149, 9, 9, 0,150, 9,121, 1,151, 9,121, 1,152, 9, - 12, 0,153, 9, 12, 0,154, 9,156, 0, 72, 3, 32, 0,155, 9, 32, 0,156, 9, 32, 0, 38, 0, 12, 0,157, 9, 12, 0,158, 9, - 12, 0,159, 9, 7, 0,213, 0, 7, 0, 92, 4, 4, 0,118, 2, 4, 0, 19, 0, 4, 0,136, 7, 4, 0,160, 9, 4, 0,161, 9, - 4, 0,162, 9, 4, 0, 57, 0, 2, 0,220, 0, 2, 0,163, 9, 2, 0,164, 9, 2, 0, 65, 3, 2, 0,165, 9, 2, 0,118, 3, - 0, 0,166, 9, 2, 0,167, 9, 2, 0,168, 9, 2, 0,169, 9, 9, 0,170, 9,131, 0,202, 3,129, 0, 34, 0,122, 1,171, 9, - 7, 0,174, 3, 7, 0,172, 9, 7, 0,173, 9, 7, 0, 8, 4, 7, 0,174, 9, 7, 0, 50, 3, 7, 0, 40, 3, 7, 0,175, 9, - 7, 0, 9, 2, 7, 0,176, 9, 7, 0,177, 9, 7, 0,178, 9, 7, 0,179, 9, 7, 0,180, 9, 7, 0,181, 9, 7, 0,175, 3, - 7, 0,182, 9, 7, 0,183, 9, 7, 0,184, 9, 7, 0,176, 3, 7, 0,172, 3, 7, 0,173, 3, 4, 0,185, 9, 4, 0, 94, 0, - 4, 0,186, 9, 4, 0,187, 9, 2, 0,188, 9, 2, 0,189, 9, 2, 0,190, 9, 2, 0,191, 9, 2, 0,192, 9, 2, 0, 37, 0, - 4, 0, 70, 0,130, 0, 8, 0,122, 1,193, 9, 7, 0,194, 9, 7, 0,195, 9, 7, 0,165, 1, 7, 0,196, 9, 4, 0, 94, 0, - 2, 0,197, 9, 2, 0,198, 9,123, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,199, 9,124, 1, 6, 0, -124, 1, 0, 0,124, 1, 1, 0,123, 1,200, 9, 4, 0,201, 9, 2, 0,202, 9, 2, 0, 19, 0,125, 1, 5, 0,125, 1, 0, 0, -125, 1, 1, 0, 12, 0,203, 9, 4, 0,204, 9, 4, 0, 19, 0,126, 1, 9, 0,126, 1, 0, 0,126, 1, 1, 0, 12, 0,129, 0, -125, 1,205, 9, 4, 0, 19, 0, 2, 0,202, 9, 2, 0,206, 9, 7, 0, 95, 0, 0, 0,207, 9,190, 0, 6, 0, 27, 0, 31, 0, - 12, 0,134, 4, 4, 0, 19, 0, 2, 0,208, 9, 2, 0,209, 9, 9, 0,210, 9,127, 1, 13, 0, 27, 0, 31, 0,128, 1,211, 9, -128, 1,212, 9, 12, 0,213, 9, 4, 0,214, 9, 2, 0,215, 9, 2, 0, 37, 0, 12, 0,216, 9, 12, 0,217, 9, 12, 0,218, 9, - 12, 0,219, 9, 12, 0,220, 9, 12, 0,221, 9,128, 1, 30, 0,128, 1, 0, 0,128, 1, 1, 0, 9, 0,222, 9, 4, 0,241, 6, - 4, 0, 37, 0,200, 0,164, 5,200, 0,223, 9, 0, 0,224, 9, 2, 0,225, 9, 2, 0,226, 9, 2, 0, 6, 7, 2, 0, 7, 7, - 2, 0,227, 9, 2, 0,228, 9, 2, 0, 88, 3, 2, 0, 23, 7, 2, 0,229, 9, 2, 0,230, 9, 4, 0,161, 1,129, 1,231, 9, -130, 1,232, 9,131, 1,233, 9, 4, 0,234, 9, 4, 0,235, 9, 9, 0,236, 9, 12, 0,237, 9, 12, 0,217, 9, 12, 0, 25, 7, - 12, 0,238, 9, 12, 0,239, 9,132, 1, 12, 0,132, 1, 0, 0,132, 1, 1, 0, 0, 0,240, 9,133, 1,241, 9, 2, 0, 17, 0, - 2, 0, 15, 0, 2, 0,242, 9, 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9, 2, 0,246, 9, 2, 0, 37, 0,134, 1, 6, 0, -134, 1, 0, 0,134, 1, 1, 0, 12, 0,247, 9, 0, 0,248, 9, 4, 0,249, 9, 4, 0,250, 9,208, 0, 8, 0,208, 0, 0, 0, -208, 0, 1, 0, 0, 0,240, 9, 26, 0, 30, 0,135, 1, 0, 7, 9, 0,251, 9,133, 1,241, 9,136, 1,252, 9,129, 1, 23, 0, -129, 1, 0, 0,129, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0,253, 9, 2, 0,254, 9, - 2, 0,255, 9, 2, 0, 0, 10, 0, 0, 1, 10, 0, 0, 37, 0, 2, 0,242, 9, 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9, - 2, 0,246, 9, 2, 0, 43, 0, 0, 0, 2, 10, 2, 0, 3, 10, 2, 0, 4, 10, 4, 0, 70, 0, 9, 0,251, 9,137, 1, 8, 0, -137, 1, 0, 0,137, 1, 1, 0, 9, 0, 2, 0, 9, 0, 5, 10, 0, 0,131, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0, 6, 10, -138, 1, 5, 0, 7, 0, 7, 10, 4, 0, 8, 10, 4, 0, 9, 10, 4, 0, 14, 1, 4, 0, 19, 0,139, 1, 6, 0, 7, 0, 10, 10, - 7, 0, 11, 10, 7, 0, 12, 10, 7, 0, 13, 10, 4, 0, 17, 0, 4, 0, 19, 0,140, 1, 5, 0, 7, 0,233, 7, 7, 0,234, 7, - 7, 0,190, 2, 2, 0,224, 1, 2, 0,225, 1,141, 1, 5, 0,140, 1, 2, 0, 4, 0, 54, 0, 7, 0, 14, 10, 7, 0,233, 7, - 7, 0,234, 7,142, 1, 4, 0, 2, 0, 15, 10, 2, 0, 16, 10, 2, 0, 17, 10, 2, 0, 18, 10,143, 1, 2, 0, 43, 0,254, 5, - 26, 0, 56, 8,144, 1, 3, 0, 24, 0, 19, 10, 4, 0, 19, 0, 4, 0, 37, 0,145, 1, 6, 0, 7, 0,110, 0, 7, 0,142, 2, - 7, 0, 20, 10, 7, 0, 37, 0, 2, 0,219, 0, 2, 0, 21, 10,146, 1, 7, 0,146, 1, 0, 0,146, 1, 1, 0, 27, 0, 1, 6, - 0, 0, 22, 10, 4, 0, 23, 10, 4, 0, 94, 0, 0, 0,131, 3,147, 1, 6, 0, 12, 0,107, 8, 0, 0, 24, 10, 7, 0, 61, 0, - 7, 0, 6, 10, 4, 0, 17, 0, 4, 0, 19, 0,148, 1, 3, 0, 7, 0, 25, 10, 4, 0, 19, 0, 4, 0, 37, 0,149, 1, 15, 0, -149, 1, 0, 0,149, 1, 1, 0, 59, 1, 95, 8,147, 1, 62, 0, 12, 0, 14, 3, 35, 0, 50, 0,148, 1, 26, 10, 4, 0, 54, 0, - 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,255, 0, 4, 0, 23, 10, 0, 0, 22, 10, 4, 0, 27, 10, 7, 0, 28, 10,150, 1, 2, 0, - 0, 0, 29, 10, 0, 0, 30, 10,151, 1, 4, 0,151, 1, 0, 0,151, 1, 1, 0,152, 0,226, 2, 12, 0, 31, 10,152, 1, 22, 0, -152, 1, 0, 0,152, 1, 1, 0, 12, 0, 32, 10,152, 0,208, 7,151, 1, 33, 10, 12, 0, 34, 10, 12, 0, 14, 3, 0, 0,131, 3, - 7, 0, 6, 10, 7, 0, 35, 10, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,152, 8, 7, 0,153, 8, 7, 0,157, 2, 7, 0,156, 8, - 7, 0,210, 7, 7, 0,157, 8, 2, 0, 36, 10, 2, 0, 37, 10, 2, 0, 19, 0, 2, 0, 17, 0,153, 1, 6, 0,153, 1, 0, 0, -153, 1, 1, 0, 12, 0, 32, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,131, 3,154, 1, 10, 0,154, 1, 0, 0,154, 1, 1, 0, - 27, 0, 1, 6, 0, 0, 38, 10, 4, 0, 39, 10, 4, 0, 40, 10, 0, 0, 22, 10, 4, 0, 23, 10, 2, 0, 19, 0, 2, 0, 41, 10, -155, 1, 6, 0,155, 1, 0, 0,155, 1, 1, 0, 12, 0, 42, 10, 0, 0,131, 3, 4, 0, 19, 0, 4, 0, 43, 10,156, 1, 5, 0, -156, 1, 0, 0,156, 1, 1, 0, 0, 0, 22, 10, 4, 0, 23, 10, 7, 0,134, 2, 39, 0, 9, 0,152, 0, 9, 3,152, 0, 44, 10, -151, 1, 33, 10, 12, 0, 45, 10,152, 1, 46, 10, 12, 0, 47, 10, 12, 0, 48, 10, 4, 0, 19, 0, 4, 0,220, 0,157, 1, 2, 0, - 27, 0, 31, 0, 39, 0, 75, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112, 97,100, 59, 13, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 13, 10, 13, 10, 47, 42, + 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 13, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, + 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, + 54, 41, 13, 10, 13, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, + 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 13, + 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 13, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32, +114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 13, 10, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 13, 10, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 13, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 13, 10, 13, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114, +116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 47, 42, 32,114,101,110,100,101,114, 32, + 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, + 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 13, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, + 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, + 90, 9, 9, 54, 52, 13, 10, 13, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, + 50, 86, 51, 9, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 13, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, + 86, 49, 9, 9, 9, 56, 13, 10, 13, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, + 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 13, 10, 47, 42, + 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, + 69,108, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 13, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, + 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108, +100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97, +116,101,100, 33, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, + 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 13, 10, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97, +115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100, +101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 84, 69, 88, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 13, 10, 13, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, + 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 13, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, + 66, 76, 69, 9, 49, 48, 50, 52, 13, 10, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, + 52, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, + 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97, +110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103, +115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110, +116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 79, 76, 73, 68, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 13, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, + 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, + 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,115,117, 98, 32,105,115, + 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114, +102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, + 9, 51, 13, 10, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 13, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, + 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, + 68, 52, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 13, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, + 9, 32, 32, 32, 32, 9, 49, 50, 56, 13, 10, 13, 10, 35,101,110,100,105,102, 13, 10, 35, 79, 67, 75, 33,110,101, 32, 67,249, 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,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, 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, 76, 97,116,116,105, 99,101, + 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 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, 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, 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, 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, 70,114, 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114, +107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, + 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103, +115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, 97, + 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 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, + 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, + 73,109, 97, 83,101,108, 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, +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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 72,101, 97,100,101,114, 0, 72,101, 97,100,101,114, 84,121,112,101, 0, 77,101,110,117, 0, 77,101,110,117, 84,121, +112,101, 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, 84, 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,104, +100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, + 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112, +108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97, +110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111, +100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105, +109, 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, 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, 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, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105, +108,100, 80, 97,114,116,105, 99,108,101, 0, 75,101,121,101,100, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, + 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114, +116,105, 99,108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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, 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, 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,109, 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, 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, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, + 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 0, + 40, 2, 0, 0, 32, 0,140, 0, 92, 3, 92, 0, 36, 0, 56, 0, 84, 0,112, 0,124, 0, 48, 0, 16, 0, 24, 0, 40, 0,120, 0, + 12, 0,136, 0, 36, 0,220, 4,128, 1, 0, 0, 0, 0, 0, 0,136, 0, 24, 1, 84, 1, 24, 0, 8, 3,168, 0, 0, 0,140, 0, +132, 0,132, 1, 8, 1, 56, 0,112, 2, 76, 0, 60, 1, 0, 0,108, 0,104, 0,140, 0, 56, 0, 8, 0, 16, 0, 76, 1, 0, 0, + 0, 0, 0, 0, 24, 1, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 0, 0, 24, 0, 76, 0, 32, 0, + 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 12, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 40, 0, 56, 0, + 72, 0, 92, 0,100, 0, 72, 0,100, 0,120, 0, 68, 0, 64, 0,112, 0, 64, 0,152, 0,156, 0, 64, 0, 96, 0,108, 0,188, 0, +104, 0,184, 0, 56, 0, 76, 0, 0, 0,132, 0, 28, 0,232, 0,104, 0, 0, 0, 64, 0, 0, 0, 0, 0, 68, 0, 8, 0, 8, 0, +220, 0, 80, 0, 76, 1, 76, 0, 68, 0, 68, 0, 64, 0,164, 1,112, 0,108, 0,188, 0, 40, 0, 92, 0, 56, 0,120, 0,128, 0, +152, 0,208, 0, 0, 0, 24, 0, 16, 0, 0, 0, 0, 0, 0, 0,112, 1, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 0,224, 3, + 56, 0, 16, 0, 80, 0, 16, 0,196, 0, 8, 0, 84, 0, 80, 0, 32, 0, 0, 0, 32, 0, 36, 1, 32, 0, 24, 2, 0, 0, 0, 0, + 56, 0,216, 2, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 40, 0,136, 0, 48, 0,140, 0,196, 0, 20, 0,232, 0, +204, 0,124, 1, 52, 0, 0, 0, 92, 0, 0, 0,248, 0, 12, 0, 12, 0,136, 0,188, 0,124, 2, 80, 2, 40, 0,168, 0,232, 0, + 52, 0,136, 2, 28, 0, 80, 0, 16, 1, 32, 0,224, 0, 32, 0, 32, 0, 48, 2, 16, 1, 16, 0,152, 20, 56, 0, 40, 11, 20, 0, + 24, 0, 56, 1, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0,112, 0, 0, 0,236, 0, 0, 0, 32, 0, 80, 0, 28, 0, 16, 0, + 8, 0, 52, 0,252, 0,240, 0,168, 1,196, 0, 28, 1, 0, 0, 16, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 0, + 56, 1, 0, 0, 56, 0, 64, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, + 76, 0, 80, 0, 60, 0,128, 0, 76, 0, 60, 0, 12, 0, 92, 0, 28, 0, 20, 0, 80, 0, 16, 0, 76, 0,108, 0, 84, 0, 28, 0, + 96, 0, 60, 0, 56, 0,108, 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 40, 0, 0, 0, 68, 0,184, 0, 24, 0, 4, 1,120, 0, +172, 1,104, 0,216, 0, 64, 0, 44, 0, 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, + 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 32, 0, +208, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, + 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 44, 0, 20, 0, 68, 0, 24, 0, 56, 0, 72, 0, 28, 0,252, 0,244, 1, 0, 0, 0, 0, + 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 24, 0, 24, 0,140, 0,148, 0, 56, 0, 0, 0, 0, 0, 92, 0, 0, 0, 88, 0, 0, 0, + 88, 0, 20, 0, 24, 0, 16, 0, 20, 0, 8, 0, 8, 0, 24, 0, 20, 0, 88, 0, 24, 1, 16, 0, 68, 0, 0, 1, 20, 0,152, 0, + 88, 0, 96, 0, 88, 0, 20, 0, 56, 0, 0, 0, 83, 84, 82, 67,104, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, + 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, + 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, + 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, + 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, + 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, + 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, + 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, + 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, + 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, + 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, + 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, + 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, + 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, + 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, + 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, + 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, + 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, + 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 5, 0, 27, 0, 84, 0, + 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, 0, 41, 0, 6, 0, 41, 0, 0, 0, 41, 0, 1, 0, 0, 0, 88, 0, + 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, 0, 42, 0, 0, 0, 42, 0, 1, 0, 4, 0, 91, 0, 4, 0, 92, 0, + 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 43, 0, 15, 0, 27, 0, 31, 0, + 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, 0, 41, 0,100, 0, 41, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, + 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0,108, 0, 8, 0,109, 0, 44, 0, 3, 0, 4, 0,110, 0, + 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 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, + 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0, 7, 0,125, 0, 36, 0, 80, 0, 40, 0,126, 0, 32, 0,127, 0, + 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0, 19, 0, + 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 2, 0,138, 0, 47, 0,139, 0, 48, 0, 32, 0, 27, 0, 31, 0, + 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, 0, 51, 0,143, 0, 2, 0,134, 0, 2, 0, 19, 0, 2, 0,144, 0, + 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, + 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, 0, 44, 0,154, 0, 30, 0,155, 0, 0, 0,156, 0, 7, 0,157, 0, + 4, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 7, 0,163, 0, 7, 0,164, 0, 52, 0, 31, 0, + 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 2, 0,168, 0, 32, 0,169, 0, 53, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, + 0, 0,173, 0, 0, 0,174, 0, 0, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, + 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 2, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, + 7, 0,189, 0, 7, 0, 57, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 54, 0, 15, 0, + 0, 0,195, 0, 9, 0,196, 0, 0, 0,197, 0, 0, 0,198, 0, 4, 0,199, 0, 4, 0,200, 0, 9, 0,201, 0, 7, 0,202, 0, + 7, 0,203, 0, 7, 0,204, 0, 4, 0,205, 0, 9, 0,206, 0, 9, 0,207, 0, 4, 0,208, 0, 4, 0, 37, 0, 55, 0, 6, 0, + 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,209, 0, 7, 0, 67, 0, 4, 0, 64, 0, 56, 0, 5, 0, 2, 0, 19, 0, + 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,210, 0, 55, 0,204, 0, 57, 0, 17, 0, 32, 0,169, 0, 48, 0,211, 0, 58, 0,212, 0, + 7, 0,213, 0, 7, 0,214, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,216, 0, 4, 0,217, 0, + 2, 0,218, 0, 2, 0,219, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,220, 0, 2, 0,221, 0, 53, 0, 57, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, + 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, + 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0,244, 0, + 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0,248, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,249, 0, + 7, 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,132, 0, 4, 0, 23, 0, + 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0, 0, 1, 7, 0, 1, 1, 7, 0,191, 0, 46, 0, 2, 1, 59, 0, 3, 1, + 36, 0, 80, 0, 48, 0,211, 0, 54, 0, 4, 1, 56, 0, 5, 1, 57, 0, 6, 1, 30, 0,155, 0, 0, 0, 7, 1, 0, 0, 8, 1, + 60, 0, 8, 0, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0,177, 0, 4, 0, 19, 0, 7, 0, 11, 1, 7, 0, 12, 1, 7, 0, 13, 1, + 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 14, 1, 2, 0,179, 0, + 2, 0, 15, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 16, 1, 7, 0, 17, 1, 7, 0, 18, 1, + 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, + 62, 0, 27, 1, 2, 0, 28, 1, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, + 2, 0, 32, 1, 2, 0, 33, 1, 2, 0, 34, 1, 2, 0, 35, 1, 0, 0, 36, 1, 0, 0, 37, 1, 2, 0, 38, 1, 2, 0, 39, 1, + 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 2, 0, 47, 1, + 2, 0, 43, 0, 2, 0, 48, 1, 2, 0, 49, 1, 2, 0, 50, 1, 2, 0, 51, 1, 7, 0, 52, 1, 7, 0, 53, 1, 7, 0, 54, 1, + 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, + 7, 0, 63, 1, 2, 0, 64, 1, 2, 0, 65, 1, 4, 0, 66, 1, 4, 0, 67, 1, 2, 0, 68, 1, 2, 0, 69, 1, 2, 0, 70, 1, + 2, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 2, 0, 76, 1, 2, 0, 77, 1, 52, 0, 78, 1, + 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 64, 0,130, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 2, 0, 79, 1, 2, 0, 19, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 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, 7, 0, 87, 1, 7, 0, 88, 1, 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, 7, 0,100, 1, 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, 0, 0,110, 1, 0, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, + 2, 0,114, 1, 2, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 2, 0,120, 1, 2, 0,121, 1, + 4, 0, 14, 1, 4, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, + 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, + 0, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 4, 0,141, 1, 0, 0,142, 1, 0, 0, 48, 1, 0, 0,143, 1, + 0, 0, 7, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0, 65, 1, 2, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 7, 0,149, 1, + 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 2, 0,165, 0, 2, 0,166, 0, 56, 0,154, 1, 56, 0,155, 1, + 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, 0, 0,159, 1, 2, 0,160, 1, 2, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, + 52, 0, 78, 1, 59, 0, 3, 1, 36, 0, 80, 0, 65, 0,164, 1, 30, 0,155, 0, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, + 7, 0,168, 1, 7, 0,169, 1, 2, 0,170, 1, 2, 0, 70, 0, 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, 2, 0,180, 1, 2, 0,181, 1, 7, 0,182, 1, + 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, 4, 0,189, 1, 40, 0,126, 0, + 12, 0,190, 1, 66, 0, 4, 0, 27, 0, 31, 0, 0, 0,191, 1, 67, 0, 2, 0, 44, 0,154, 0, 68, 0, 26, 0, 68, 0, 0, 0, + 68, 0, 1, 0, 69, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, 4, 0,195, 1, 4, 0,196, 1, 4, 0,197, 1, 4, 0,198, 1, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,199, 1, 2, 0,200, 1, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,201, 1, + 7, 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, 23, 0, 7, 0,208, 1, + 7, 0,209, 1, 70, 0, 16, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0,210, 1, 12, 0,211, 1, 12, 0,212, 1, 36, 0, 80, 0, + 64, 0,213, 1, 2, 0, 19, 0, 2, 0,214, 1, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0,215, 1, + 7, 0,216, 1, 7, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 2, 0, 55, 0, + 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 0, 0,226, 1, 0, 0,227, 1, 34, 0, 7, 0, 7, 0,228, 1, + 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, 7, 0,221, 1, 7, 0, 37, 0, 71, 0, 21, 0, 71, 0, 0, 0, + 71, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, 2, 0, 19, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,232, 1, + 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 34, 0, 49, 0, + 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, 72, 0, 5, 0, 2, 0,243, 1, 2, 0,229, 1, 0, 0, 19, 0, + 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0,244, 1, 74, 0, 62, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 69, 0,192, 1, 12, 0,245, 1, 12, 0,211, 1, 12, 0,246, 1, 32, 0,247, 1, 32, 0,248, 1, + 32, 0,249, 1, 36, 0, 80, 0, 75, 0,250, 1, 38, 0,251, 1, 64, 0,213, 1, 12, 0,252, 1, 7, 0, 9, 1, 7, 0,177, 0, + 7, 0, 10, 1, 4, 0,178, 0, 2, 0,253, 1, 2, 0,214, 1, 2, 0, 19, 0, 2, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, + 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, 34, 0, 5, 2, 2, 0, 23, 0, + 2, 0, 99, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 16, 2, 0, 0, 17, 2, 76, 0, 18, 2, 77, 0, 19, 2, + 0, 0, 20, 2, 66, 0, 21, 2, 66, 0, 22, 2, 66, 0, 23, 2, 66, 0, 24, 2, 4, 0, 25, 2, 7, 0, 26, 2, 4, 0, 27, 2, + 4, 0, 28, 2, 73, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, 72, 0, 32, 2, 72, 0, 33, 2, 78, 0, 39, 0, 27, 0, 31, 0, + 69, 0,192, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, 64, 0,213, 1, 79, 0, 35, 2, 80, 0, 36, 2, 81, 0, 37, 2, + 82, 0, 38, 2, 83, 0, 39, 2, 84, 0, 40, 2, 85, 0, 41, 2, 86, 0, 42, 2, 78, 0, 43, 2, 87, 0, 44, 2, 88, 0, 45, 2, + 89, 0, 46, 2, 89, 0, 47, 2, 89, 0, 48, 2, 4, 0, 54, 0, 4, 0, 49, 2, 4, 0, 50, 2, 4, 0, 51, 2, 4, 0, 52, 2, + 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0, 53, 2, 4, 0, 54, 2, 2, 0, 55, 2, 2, 0, 19, 0, + 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,214, 1, 2, 0, 58, 2, 90, 0, 59, 2, 91, 0, 60, 2, 81, 0, 8, 0, 9, 0, 61, 2, + 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 79, 0, 7, 0, + 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, 2, 0,229, 1, 0, 0, 71, 2, 0, 0, 19, 0, 83, 0, 5, 0, + 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, 2, 0, 19, 0, 92, 0, 2, 0, 4, 0, 74, 2, 7, 0,220, 1, + 84, 0, 3, 0, 92, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, 82, 0, 6, 0, 7, 0, 77, 2, 2, 0, 78, 2, 2, 0,229, 1, + 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,184, 0, 85, 0, 4, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, + 93, 0, 6, 0, 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 94, 0, 1, 0, + 7, 0, 79, 2, 95, 0, 5, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, 4, 0, 37, 0, 86, 0, 1, 0, + 7, 0, 80, 2, 87, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, 80, 0, 7, 0, 7, 0, 62, 2, 48, 0, 61, 2, 0, 0, 19, 0, + 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 96, 0, 1, 0, 7, 0, 82, 2, 97, 0, 1, 0, 4, 0, 83, 2, + 98, 0, 1, 0, 0, 0, 84, 2, 99, 0, 1, 0, 7, 0, 62, 2,100, 0, 3, 0, 4, 0, 85, 2, 0, 0, 96, 0, 7, 0, 86, 2, +102, 0, 4, 0, 7, 0,209, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,103, 0, 1, 0,102, 0, 63, 2,104, 0, 5, 0, + 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, 0, 0,184, 0,105, 0, 2, 0, 4, 0, 89, 2, 4, 0, 88, 2, +106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 0, 90, 2,103, 0, 91, 2,105, 0, 92, 2, 4, 0, 54, 0, 4, 0, 50, 2, + 4, 0, 49, 2, 4, 0, 37, 0, 82, 0, 93, 2, 90, 0, 14, 0, 12, 0, 94, 2, 82, 0, 93, 2, 0, 0, 95, 2, 0, 0, 96, 2, + 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, 0, 0,101, 2, 0, 0, 19, 0, 89, 0, 46, 2, 89, 0, 48, 2, + 2, 0,102, 2, 0, 0,103, 2, 91, 0, 8, 0, 4, 0,104, 2, 4, 0,105, 2, 79, 0,106, 2, 83, 0,107, 2, 4, 0, 50, 2, + 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, 0,107, 0, 0, 0,107, 0, 1, 0, 4, 0, 17, 0, 4, 0, 14, 1, + 0, 0, 20, 0, 47, 0,139, 0, 0, 0,108, 2,108, 0, 7, 0,107, 0,109, 2, 2, 0,110, 2, 2, 0, 94, 2, 2, 0,111, 2, + 2, 0, 94, 0, 9, 0,112, 2, 9, 0,113, 2,109, 0, 3, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0,110, 0, 5, 0, +107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0, 2, 0,114, 2, 0, 0,115, 2,111, 0, 5, 0,107, 0,109, 2, 7, 0, 92, 0, + 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,112, 0, 5, 0,107, 0,109, 2, 32, 0,119, 2, 0, 0, 72, 0, 4, 0, 14, 1, + 4, 0, 19, 0,113, 0, 13, 0,107, 0,109, 2, 32, 0,120, 2, 32, 0,121, 2, 32, 0,122, 2, 32, 0,123, 2, 7, 0,124, 2, + 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 4, 0, 94, 0, 4, 0,129, 2,114, 0, 5, 0, +107, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, 32, 0,132, 2,115, 0, 3, 0,107, 0,109, 2, 7, 0,133, 2, + 4, 0, 94, 0,116, 0, 10, 0,107, 0,109, 2, 7, 0,134, 2, 4, 0,135, 2, 4, 0, 37, 0, 2, 0, 94, 0, 2, 0,136, 2, + 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2,117, 0, 3, 0,107, 0,109, 2, 7, 0, 37, 0, 4, 0, 17, 0, +118, 0, 11, 0,107, 0,109, 2, 53, 0,141, 2, 7, 0,142, 2, 4, 0,143, 2, 0, 0,140, 2, 7, 0,144, 2, 4, 0,145, 2, + 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 10, 0,107, 0,109, 2, 32, 0,149, 2, 48, 0,150, 2, + 4, 0, 94, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,120, 0, 3, 0, +107, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,121, 0, 5, 0,107, 0,109, 2, 7, 0,156, 2, 0, 0,140, 2, 2, 0, 19, 0, + 2, 0,157, 2,122, 0, 8, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,156, 2, 7, 0,221, 1, 7, 0,110, 0, 0, 0,140, 2, + 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 0,109, 2, 32, 0,158, 2, 0, 0,140, 2, 53, 0,141, 2, 32, 0,146, 2, + 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, + 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, 0, 0,147, 2, 7, 0,166, 2, 7, 0,167, 2, 7, 0, 43, 0, +124, 0, 7, 0,107, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, 4, 0, 70, 0, 32, 0,169, 0, 7, 0,170, 2, 0, 0,140, 2, +125, 0, 9, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,171, 2, 7, 0,172, 2, 7, 0,165, 2, 4, 0,173, 2, 4, 0,174, 2, + 7, 0,175, 2, 0, 0, 20, 0,126, 0, 1, 0,107, 0,109, 2,127, 0, 6, 0,107, 0,109, 2, 47, 0,139, 0,128, 0,176, 2, +129, 0,177, 2,130, 0,178, 2,131, 0,179, 2,132, 0, 14, 0,107, 0,109, 2, 82, 0,180, 2, 82, 0,181, 2, 82, 0,182, 2, + 82, 0,183, 2, 82, 0,184, 2, 82, 0,185, 2, 79, 0,186, 2, 4, 0,187, 2, 4, 0,188, 2, 2, 0,189, 2, 2, 0, 37, 0, + 7, 0,190, 2,133, 0,191, 2,134, 0, 3, 0,107, 0,109, 2,135, 0,192, 2,136, 0,191, 2,137, 0, 4, 0,107, 0,109, 2, + 32, 0,169, 0, 4, 0,193, 2, 4, 0, 37, 0,138, 0, 2, 0, 4, 0,194, 2, 7, 0,220, 1,139, 0, 2, 0, 4, 0,130, 0, + 4, 0,195, 2,140, 0, 20, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0,140, 2, 2, 0,196, 2, 2, 0,197, 2, 2, 0, 19, 0, + 2, 0, 37, 0, 7, 0,198, 2, 7, 0,199, 2, 4, 0, 54, 0, 4, 0,200, 2,139, 0,201, 2,138, 0,202, 2, 4, 0,203, 2, + 4, 0,204, 2, 4, 0,205, 2, 4, 0,195, 2, 7, 0,206, 2, 7, 0,207, 2, 7, 0,208, 2,141, 0, 8, 0,107, 0,109, 2, +142, 0,209, 2,135, 0,192, 2, 4, 0,210, 2, 4, 0,211, 2, 4, 0,212, 2, 2, 0, 19, 0, 2, 0, 57, 0,143, 0, 8, 0, +107, 0,109, 2, 32, 0, 45, 0, 2, 0,213, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, 7, 0,214, 2, 7, 0,215, 2, +144, 0, 5, 0,107, 0,109, 2, 4, 0,216, 2, 2, 0, 19, 0, 2, 0,217, 2, 7, 0,218, 2,145, 0, 7, 0,107, 0,109, 2, + 82, 0,219, 2, 4, 0,220, 2, 0, 0,221, 2, 0, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2,146, 0, 3, 0,107, 0,109, 2, +147, 0,225, 2,131, 0,179, 2,148, 0, 10, 0,107, 0,109, 2, 32, 0,226, 2, 32, 0,227, 2, 0, 0,228, 2, 7, 0,229, 2, + 2, 0,230, 2, 2, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 0, 0,115, 2,149, 0, 9, 0,107, 0,109, 2, 32, 0,234, 2, + 0, 0,228, 2, 7, 0,235, 2, 7, 0,236, 2, 0, 0, 14, 1, 0, 0,130, 2, 0, 0,237, 2, 0, 0, 37, 0,150, 0, 27, 0, + 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,238, 2, 2, 0, 19, 0, 2, 0,239, 2, 2, 0,240, 2, 2, 0,241, 2, + 2, 0, 70, 0, 0, 0,242, 2, 0, 0,243, 2, 0, 0,244, 2, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0,245, 2, 7, 0,246, 2, + 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 34, 0,251, 2, 36, 0, 80, 0, 38, 0,251, 1, 84, 0, 40, 2, + 7, 0,252, 2, 7, 0,253, 2,150, 0,254, 2,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, 0, 0, 20, 0, 69, 0, 3, 0, + 7, 0,255, 2, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,112, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 0, 3, + 4, 0, 1, 3, 4, 0, 2, 3, 4, 0, 3, 3, 0, 0, 4, 3, 32, 0, 38, 0, 32, 0, 5, 3, 32, 0, 6, 3, 32, 0, 7, 3, + 32, 0, 8, 3, 36, 0, 80, 0, 75, 0,250, 1, 69, 0,192, 1,152, 0, 9, 3,152, 0, 10, 3,153, 0, 11, 3, 9, 0, 2, 0, + 12, 0, 12, 3, 12, 0, 34, 2, 12, 0,211, 1, 12, 0, 13, 3, 12, 0, 14, 3, 64, 0,213, 1, 0, 0, 15, 3, 4, 0,214, 1, + 4, 0, 16, 3, 7, 0, 9, 1, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0,177, 0, 7, 0, 19, 3, 7, 0, 10, 1, 7, 0, 20, 3, + 7, 0, 21, 3, 7, 0,171, 2, 7, 0, 22, 3, 7, 0,213, 0, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 24, 3, 2, 0, 25, 3, + 2, 0, 26, 3, 2, 0, 27, 3, 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, 2, 0, 32, 3, 2, 0, 33, 3, + 2, 0, 34, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 7, 0, 39, 3, 7, 0, 26, 2, 7, 0, 40, 3, + 7, 0, 41, 3, 7, 0, 42, 3, 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3, 7, 0, 48, 3, + 7, 0, 49, 3, 0, 0, 50, 3, 0, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, 7, 0, 55, 3, 40, 0,126, 0, + 12, 0, 56, 3, 12, 0, 57, 3, 12, 0, 58, 3, 12, 0, 59, 3, 7, 0, 60, 3, 2, 0, 81, 2, 2, 0, 61, 3, 7, 0, 63, 2, + 4, 0, 62, 3, 4, 0, 63, 3,154, 0, 64, 3, 2, 0, 65, 3, 2, 0,220, 0, 7, 0, 66, 3, 12, 0, 67, 3, 12, 0, 68, 3, + 12, 0, 69, 3, 12, 0, 70, 3,155, 0, 71, 3,156, 0, 72, 3, 65, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, 2, 0, 76, 3, + 2, 0, 77, 3, 7, 0, 55, 2, 2, 0, 78, 3, 2, 0, 79, 3,147, 0, 80, 3,135, 0, 81, 3,135, 0, 82, 3, 4, 0, 83, 3, + 4, 0, 84, 3, 4, 0, 85, 3, 4, 0, 70, 0, 12, 0, 86, 3,157, 0, 14, 0,157, 0, 0, 0,157, 0, 1, 0, 32, 0, 38, 0, + 7, 0,171, 2, 7, 0, 11, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, 4, 0,174, 2, 4, 0, 87, 3, + 2, 0, 17, 0, 2, 0, 88, 3, 7, 0,175, 2,155, 0, 36, 0, 2, 0, 89, 3, 2, 0, 90, 3, 2, 0, 19, 0, 2, 0,165, 2, + 7, 0, 91, 3, 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, + 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, + 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, + 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 53, 0,170, 0,158, 0,119, 3, 7, 0,120, 3, 4, 0,118, 2, +159, 0, 6, 0,159, 0, 0, 0,159, 0, 1, 0, 4, 0,121, 3, 4, 0,122, 3, 7, 0, 2, 0, 9, 0,123, 3,131, 0, 12, 0, + 4, 0, 19, 0, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, 4, 0,129, 3, 4, 0,130, 3, + 0, 0,131, 3, 0, 0,132, 3, 0, 0,133, 3, 12, 0,134, 3,160, 0, 1, 0, 7, 0,228, 1,154, 0, 30, 0, 4, 0, 19, 0, + 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3, 4, 0,138, 3, 4, 0,139, 3, 4, 0,140, 3, 4, 0,141, 3, 7, 0,142, 3, + 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 7, 0,150, 3, + 7, 0,151, 3, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, 7, 0,157, 3, 7, 0,158, 3, + 7, 0,159, 3, 4, 0,160, 3, 4, 0,161, 3, 7, 0,162, 3, 7, 0, 46, 3,156, 0, 44, 0,142, 0,163, 3, 4, 0,122, 3, + 4, 0,164, 3,161, 0,165, 3,162, 0,166, 3, 7, 0, 37, 0, 7, 0,167, 3, 7, 0,168, 3, 7, 0,169, 3, 7, 0,170, 3, + 7, 0,171, 3, 7, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, 2, 0,177, 3, 2, 0,178, 3, + 7, 0,179, 3, 7, 0,180, 3, 4, 0,131, 0, 4, 0,181, 3, 4, 0,182, 3, 2, 0,183, 3, 2, 0,184, 3,160, 0,185, 3, + 4, 0,186, 3, 4, 0, 82, 0, 7, 0,187, 3, 7, 0,188, 3, 7, 0,189, 3, 7, 0,190, 3, 2, 0,191, 3, 2, 0,192, 3, + 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3, 2, 0,197, 3, 2, 0,198, 3,163, 0,199, 3, 7, 0,200, 3, + 7, 0,201, 3,131, 0,202, 3,147, 0, 48, 0, 2, 0, 17, 0, 2, 0,203, 3, 2, 0,204, 3, 2, 0,205, 3, 7, 0,206, 3, + 2, 0,207, 3, 2, 0,208, 3, 7, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, + 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 4, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, 78, 0,222, 3, + 78, 0,223, 3, 78, 0,224, 3, 0, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 36, 0, 80, 0, 2, 0,228, 3, 0, 0,229, 3, + 0, 0,230, 3, 7, 0,231, 3, 4, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 4, 0,235, 3, 4, 0, 19, 0, 7, 0,236, 3, + 7, 0,237, 3, 7, 0,238, 3, 82, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 7, 0,243, 3, 7, 0,244, 3, + 7, 0,245, 3, 7, 0,246, 3, 4, 0,247, 3,164, 0, 72, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,179, 0, 2, 0, 15, 1, + 2, 0, 48, 1, 2, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, + 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 86, 1, 7, 0, 88, 1, 7, 0, 87, 1, 7, 0, 1, 4, 4, 0, 2, 4, 7, 0, 3, 4, + 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, 2, 0, 10, 4, 2, 0, 14, 1, + 2, 0, 11, 4, 2, 0, 12, 4, 2, 0, 13, 4, 2, 0, 14, 4, 2, 0, 15, 4, 2, 0, 16, 4, 7, 0, 17, 4, 7, 0, 18, 4, + 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, + 7, 0, 27, 4, 7, 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, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 2, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, + 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 19, 0, 7, 0, 48, 4, 7, 0, 49, 4, + 36, 0, 80, 0, 52, 0, 78, 1, 30, 0,155, 0, 40, 0,126, 0,165, 0, 8, 0,165, 0, 0, 0,165, 0, 1, 0, 4, 0, 23, 3, + 4, 0, 50, 4, 4, 0, 19, 0, 2, 0, 51, 4, 2, 0, 52, 4, 32, 0,169, 0,166, 0, 13, 0, 9, 0, 53, 4, 9, 0, 54, 4, + 4, 0, 55, 4, 4, 0, 56, 4, 4, 0, 57, 4, 4, 0, 58, 4, 4, 0, 59, 4, 4, 0, 60, 4, 4, 0, 61, 4, 4, 0, 62, 4, + 4, 0, 63, 4, 4, 0, 37, 0, 0, 0, 64, 4,167, 0, 5, 0, 9, 0, 65, 4, 9, 0, 66, 4, 4, 0, 67, 4, 4, 0, 70, 0, + 0, 0, 68, 4,168, 0, 13, 0, 4, 0, 17, 0, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4, + 4, 0, 94, 0, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, 26, 0, 30, 0,169, 0, 4, 0, + 4, 0, 79, 4, 7, 0, 80, 4, 2, 0, 19, 0, 2, 0, 81, 4,170, 0, 11, 0,170, 0, 0, 0,170, 0, 1, 0, 0, 0, 20, 0, + 64, 0, 82, 4, 65, 0, 83, 4, 4, 0, 23, 3, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 37, 0, 4, 0, 86, 4, 4, 0, 87, 4, +171, 0,131, 0,166, 0, 88, 4,167, 0, 89, 4,168, 0, 90, 4,169, 0, 91, 4, 4, 0, 92, 4, 4, 0,131, 0, 4, 0,181, 3, + 4, 0, 93, 4, 4, 0, 94, 4, 4, 0, 95, 4, 4, 0, 96, 4, 2, 0, 19, 0, 2, 0, 97, 4, 7, 0, 26, 2, 7, 0, 98, 4, + 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 2, 0,103, 4, 2, 0,104, 4, 2, 0,105, 4, 2, 0,106, 4, + 2, 0,219, 0, 2, 0,107, 4, 2, 0,108, 4, 2, 0,118, 3, 2, 0,109, 4, 2, 0,110, 4, 2, 0, 35, 1, 2, 0,110, 0, + 2, 0,111, 4, 2, 0,112, 4, 2, 0,113, 4, 2, 0,114, 4, 2, 0,115, 4, 2, 0,116, 4, 2, 0,117, 4, 2, 0,118, 4, + 2, 0,119, 4, 2, 0, 36, 1, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, 4, 0,124, 4, 4, 0, 14, 1, + 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 24, 0,131, 4, 24, 0,132, 4, + 23, 0,133, 4, 12, 0,134, 4, 2, 0,135, 4, 2, 0, 37, 0, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, + 4, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, + 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, 2, 0,154, 4, 2, 0,155, 4, + 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, + 4, 0,164, 4, 4, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 7, 0,169, 4, 4, 0,170, 4, 4, 0,171, 4, + 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, + 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 0, 0,183, 4, 0, 0,184, 4, 4, 0,185, 4, 2, 0,186, 4, 2, 0,161, 1, + 0, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 7, 0,192, 4, 7, 0,193, 4, 2, 0,194, 4, + 2, 0,195, 4, 7, 0,196, 4, 2, 0,197, 4, 2, 0,198, 4, 4, 0,199, 4, 2, 0,200, 4, 2, 0,201, 4, 2, 0,202, 4, + 2, 0,203, 4, 7, 0,204, 4, 7, 0, 70, 0, 43, 0,205, 4,172, 0, 9, 0,172, 0, 0, 0,172, 0, 1, 0, 0, 0, 20, 0, + 2, 0,206, 4, 2, 0,207, 4, 2, 0,208, 4, 2, 0, 43, 0, 7, 0,209, 4, 7, 0, 70, 0,173, 0, 5, 0, 7, 0,210, 4, + 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,161, 1,174, 0, 5, 0,174, 0, 0, 0,174, 0, 1, 0, 4, 0,121, 3, + 0, 0,131, 3, 4, 0, 19, 0,175, 0, 6, 0,176, 0,211, 4, 2, 0, 19, 0, 2, 0,212, 4, 2, 0,213, 4, 2, 0,214, 4, + 9, 0,215, 4,177, 0, 4, 0, 2, 0,110, 0, 2, 0,142, 2, 2, 0,124, 3, 2, 0,216, 4,178, 0, 10, 0, 2, 0, 19, 0, + 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4,177, 0,220, 4, 9, 0,215, 4, 7, 0,221, 4, 4, 0,222, 4, 4, 0,223, 4, + 4, 0, 37, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 0,224, 4, 7, 0,225, 4,180, 0, 8, 0,181, 0,226, 4, +176, 0,211, 4, 7, 0,227, 4, 4, 0, 94, 0, 0, 0,228, 4, 0, 0,229, 4, 0, 0,230, 4, 0, 0,231, 4,182, 0, 9, 0, +176, 0,211, 4, 7, 0,232, 4, 7, 0,233, 4, 2, 0, 14, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,234, 4, 84, 0,235, 4, + 9, 0,215, 4,183, 0, 72, 0,182, 0,236, 4,182, 0,237, 4,180, 0,238, 4, 7, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, + 7, 0,242, 4, 7, 0,243, 4, 2, 0,124, 3, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, 2, 0,248, 4, + 2, 0,223, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, + 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5,175, 0, 7, 5, +178, 0, 8, 5, 7, 0, 9, 5, 7, 0, 10, 5, 7, 0, 11, 5, 2, 0, 12, 5, 2, 0, 70, 0, 0, 0, 13, 5, 0, 0, 14, 5, + 0, 0, 15, 5, 0, 0, 16, 5, 0, 0, 17, 5, 0, 0, 18, 5, 2, 0, 19, 5, 7, 0, 20, 5, 7, 0, 21, 5, 7, 0, 22, 5, + 7, 0, 23, 5, 7, 0, 24, 5, 7, 0, 25, 5, 7, 0, 26, 5, 7, 0, 27, 5, 7, 0, 28, 5, 7, 0, 29, 5, 2, 0, 30, 5, + 0, 0, 31, 5, 0, 0, 32, 5, 0, 0, 33, 5, 0, 0, 34, 5, 32, 0, 35, 5, 0, 0, 36, 5, 0, 0, 37, 5, 0, 0, 38, 5, + 0, 0, 39, 5, 0, 0, 40, 5, 0, 0, 41, 5, 0, 0, 42, 5, 0, 0, 43, 5, 2, 0, 44, 5, 2, 0, 45, 5, 2, 0, 46, 5, + 2, 0, 47, 5, 2, 0, 48, 5,184, 0, 8, 0, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 4, 0, 52, 5, 4, 0, 53, 5, + 4, 0, 54, 5, 4, 0, 54, 0, 4, 0, 50, 2, 47, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0, 55, 5,164, 0, 56, 5, + 47, 0, 57, 5, 48, 0,211, 0, 12, 0, 58, 5,165, 0, 59, 5, 32, 0, 60, 5, 7, 0, 61, 5, 7, 0, 62, 5, 7, 0, 63, 5, + 7, 0, 64, 5, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 7, 1, 59, 0, 3, 1,185, 0, 65, 5,173, 0, 66, 5,183, 0, 67, 5, +186, 0, 68, 5,171, 0,185, 0,169, 0, 91, 4, 40, 0,126, 0, 12, 0,104, 0, 12, 0, 69, 5,187, 0, 70, 5, 2, 0, 71, 5, + 2, 0, 72, 5, 2, 0,220, 0, 2, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 12, 0, 76, 5,188, 0, 6, 0, 48, 0,211, 0, + 46, 0, 2, 1, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,110, 0, 7, 0, 77, 5,189, 0, 35, 0, 7, 0, 78, 5, 7, 0, 79, 5, + 7, 0, 80, 5, 7, 0, 81, 5, 7, 0, 82, 5, 7, 0, 83, 5, 7, 0, 84, 5, 7, 0, 85, 5, 7, 0, 86, 5, 7, 0, 21, 1, + 7, 0, 87, 5, 7, 0, 88, 5, 7, 0, 89, 5, 7, 0, 90, 5, 7, 0,176, 0, 2, 0, 91, 5, 2, 0, 92, 5, 4, 0, 93, 5, + 2, 0, 94, 5, 2, 0, 95, 5, 2, 0, 96, 5, 2, 0, 97, 5, 7, 0, 98, 5, 69, 0, 99, 5,190, 0,100, 5,189, 0,101, 5, +191, 0,102, 5,192, 0,103, 5,193, 0,104, 5,194, 0,105, 5,195, 0,106, 5, 7, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, + 4, 0,161, 1,196, 0, 54, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, + 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 43, 0, 4, 0,114, 5, 2, 0, 96, 5, 2, 0, 97, 5, 32, 0, 55, 5, 32, 0,115, 5, +188, 0,116, 5,196, 0,101, 5, 0, 0,117, 5, 4, 0, 23, 3, 4, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 2, 0,121, 5, + 2, 0,122, 5, 2, 0,161, 1, 2, 0, 19, 0, 2, 0,123, 5, 2, 0,124, 5, 7, 0,116, 0, 7, 0,125, 5, 7, 0,126, 5, + 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,176, 0, 7, 0, 61, 5, 2, 0,130, 5, 2, 0, 65, 1, 2, 0,131, 5, + 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 4, 0,139, 5, + 12, 0,140, 5, 2, 0,141, 5, 2, 0, 64, 2, 2, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, 9, 0,145, 5,190, 0,100, 5, +198, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,146, 5, 23, 0,147, 5, 23, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, + 7, 0,151, 5, 7, 0,152, 5, 2, 0,153, 5, 2, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 2, 0,157, 5, 2, 0, 19, 0, + 2, 0,158, 5, 2, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 2, 0,162, 5, 2, 0,122, 5, 7, 0,163, 5,197, 0, 6, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,199, 0, 8, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,200, 0,164, 5, 47, 0,139, 0,201, 0, 14, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,202, 0,166, 5, + 12, 0,167, 5, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5,203, 0, 31, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,191, 0,102, 5, 2, 0,171, 5, 2, 0,172, 5, + 2, 0,158, 5, 2, 0,173, 5,198, 0,165, 5, 2, 0,174, 5, 2, 0,138, 0, 2, 0,169, 5, 2, 0,175, 5, 9, 0,176, 5, + 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0, 32, 3, 2, 0,182, 5, 2, 0,183, 5, + 0, 0, 19, 0, 0, 0, 48, 1, 9, 0,250, 1, 4, 0,184, 5, 4, 0,185, 5, 27, 0,186, 5,204, 0, 16, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 7, 0, 14, 2, 7, 0, 15, 2, + 2, 0,174, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 4, 0, 19, 0, 7, 0,190, 5,190, 0,100, 5,205, 0, 15, 0, + 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 19, 0, 2, 0,194, 5, 2, 0,195, 5, 2, 0,104, 1, 2, 0,196, 5, + 2, 0, 37, 0, 4, 0,197, 5, 4, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, 0, 0,201, 5, 0, 0,202, 5,206, 0, 12, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 4, 0, 37, 0,205, 0,203, 5,207, 0,204, 5, 12, 0,205, 5, + 12, 0,206, 5,208, 0,207, 5,195, 0,208, 5,209, 0,209, 5,210, 0, 17, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, + 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 12, 0,210, 5,211, 0,211, 5, 0, 0,212, 5,212, 0,213, 5, + 4, 0,214, 5, 4, 0,215, 5, 2, 0, 19, 0, 2, 0,216, 5, 2, 0,217, 5, 2, 0, 37, 0,213, 0, 29, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 48, 0,150, 2, 46, 0, 2, 1, 62, 0,218, 5, + 2, 0,138, 0, 2, 0,219, 5, 2, 0, 70, 0, 2, 0,220, 5, 4, 0, 19, 0, 2, 0,221, 5, 2, 0,170, 5, 2, 0,169, 5, + 2, 0,161, 1, 0, 0,222, 5, 0, 0,223, 5, 0, 0,224, 5, 0, 0,122, 5, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,190, 5, + 7, 0, 65, 1, 7, 0,225, 5, 7, 0,226, 5,190, 0,100, 5,214, 0, 11, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, + 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0,168, 5, 2, 0, 19, 0, 4, 0, 37, 0,202, 0,166, 5,198, 0,165, 5, +215, 0, 27, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 43, 0,227, 5, + 4, 0,228, 5, 4, 0,229, 5, 2, 0, 94, 0, 2, 0,138, 0, 2, 0,230, 5, 0, 0,231, 5, 0, 0,232, 5, 4, 0,233, 5, + 4, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 2, 0,237, 5, 2, 0,238, 5, 7, 0,239, 5, 23, 0,240, 5, 23, 0,241, 5, + 4, 0,242, 5, 4, 0,243, 5, 0, 0,244, 5, 0, 0,245, 5,216, 0, 10, 0, 27, 0, 31, 0, 9, 0,246, 5, 9, 0,247, 5, + 9, 0,248, 5, 9, 0,249, 5, 9, 0,250, 5, 4, 0, 94, 0, 4, 0,251, 5, 0, 0,252, 5, 0, 0,253, 5,217, 0, 10, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,216, 0,254, 5, 2, 0, 94, 0, 2, 0,138, 0, + 4, 0, 43, 0, 9, 0,255, 5,218, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, +198, 0,165, 5, 4, 0, 19, 0, 4, 0, 0, 6,219, 0, 23, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 27, 0, 1, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,138, 0, 7, 0, 2, 6, + 9, 0, 3, 6, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 4, 6, 7, 0, 5, 6, 59, 0, 3, 1, 59, 0, 6, 6, 4, 0, 7, 6, + 2, 0,178, 5, 2, 0, 37, 0,190, 0,100, 5,220, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5, 2, 0, 19, 0, 2, 0, 32, 3, 4, 0, 37, 0,190, 0,100, 5,221, 0, 42, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,207, 0,204, 5, 0, 0,191, 5, + 0, 0,192, 5, 0, 0,193, 5, 2, 0, 17, 0, 2, 0,200, 5, 2, 0, 19, 0, 2, 0,194, 5, 9, 0, 3, 6, 4, 0,197, 5, + 4, 0, 8, 6, 4, 0, 9, 6, 4, 0,198, 5, 23, 0, 10, 6, 23, 0, 11, 6, 7, 0, 12, 6, 7, 0, 13, 6, 7, 0, 14, 6, + 7, 0, 2, 6, 2, 0, 15, 6, 2, 0,210, 0, 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 16, 6, + 2, 0, 17, 6, 9, 0, 18, 6, 9, 0, 19, 6, 9, 0, 20, 6, 9, 0, 21, 6, 9, 0, 22, 6, 2, 0, 23, 6, 0, 0,202, 5, + 58, 0, 24, 6,222, 0, 7, 0,222, 0, 0, 0,222, 0, 1, 0, 4, 0, 25, 6, 4, 0, 23, 0, 0, 0, 88, 0, 4, 0, 26, 6, + 4, 0, 17, 0,223, 0, 13, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, + 4, 0, 17, 0, 4, 0, 27, 6, 4, 0, 19, 0, 4, 0,230, 5, 12, 0, 28, 6, 12, 0, 29, 6, 0, 0, 30, 6,224, 0, 7, 0, +224, 0, 0, 0,224, 0, 1, 0, 0, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 37, 0,225, 0, 12, 0, + 2, 0, 33, 6, 2, 0, 35, 6, 2, 0, 36, 6, 0, 0,115, 2, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6, 2, 0, 40, 6, + 2, 0, 41, 6, 2, 0,158, 5, 7, 0, 42, 6, 7, 0, 43, 6,226, 0, 18, 0,226, 0, 0, 0,226, 0, 1, 0, 0, 0,131, 3, +225, 0, 44, 6,225, 0, 45, 6,225, 0, 46, 6,225, 0, 47, 6, 7, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, + 2, 0, 52, 6, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 57, 6, 2, 0, 58, 6,227, 0, 10, 0, + 0, 0, 59, 6, 0, 0, 60, 6, 0, 0, 61, 6, 0, 0, 62, 6, 0, 0, 63, 6, 0, 0, 64, 6, 2, 0, 65, 6, 2, 0, 66, 6, + 2, 0, 67, 6, 2, 0, 37, 0,228, 0, 8, 0, 0, 0, 68, 6, 0, 0, 69, 6, 0, 0, 70, 6, 0, 0, 71, 6, 0, 0, 72, 6, + 0, 0, 73, 6, 7, 0, 77, 5, 7, 0, 37, 0,229, 0, 16, 0,227, 0, 74, 6,227, 0, 75, 6,227, 0, 76, 6,227, 0, 77, 6, +227, 0, 78, 6,227, 0, 79, 6,227, 0, 80, 6,227, 0, 81, 6,227, 0, 82, 6,227, 0, 83, 6,227, 0, 84, 6,227, 0, 85, 6, +227, 0, 86, 6,227, 0, 87, 6,228, 0, 88, 6, 0, 0, 89, 6,230, 0, 71, 0, 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 63, 6, + 0, 0, 92, 6, 0, 0, 93, 6, 0, 0, 94, 6, 0, 0, 95, 6, 0, 0, 96, 6, 0, 0, 97, 6, 0, 0, 98, 6, 0, 0, 99, 6, + 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0,103, 6, 0, 0,104, 6, 0, 0,105, 6, 0, 0,106, 6, 0, 0,107, 6, + 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, 0, 0,114, 6, 0, 0,115, 6, + 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, 0, 0,122, 6, 0, 0,123, 6, + 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, 0, 0,130, 6, 0, 0,131, 6, + 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6, + 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, 0, 0,146, 6, 0, 0,147, 6, + 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0,153, 6, 0, 0,154, 6, 0, 0,155, 6, + 0, 0,156, 6, 0, 0,157, 6, 0, 0,158, 6, 0, 0, 96, 0,231, 0, 5, 0, 0, 0,159, 6, 0, 0,114, 6, 0, 0,116, 6, + 2, 0, 19, 0, 2, 0, 37, 0,232, 0, 21, 0,232, 0, 0, 0,232, 0, 1, 0, 0, 0, 20, 0,229, 0,160, 6,230, 0,161, 6, +230, 0,162, 6,230, 0,163, 6,230, 0,164, 6,230, 0,165, 6,230, 0,166, 6,230, 0,167, 6,230, 0,168, 6,230, 0,169, 6, +230, 0,170, 6,230, 0,171, 6,230, 0,172, 6,230, 0,173, 6,230, 0,174, 6,230, 0,175, 6,230, 0,176, 6,231, 0,177, 6, +233, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, 7, 0,178, 6, 7, 0,228, 1,234, 0, 67, 0, 4, 0, 19, 0, + 4, 0,179, 6, 4, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, 0, 0,183, 6, 0, 0,184, 6, 0, 0,185, 6, 0, 0,186, 6, + 0, 0,187, 6, 0, 0,188, 6, 0, 0,189, 6, 2, 0,190, 6, 2, 0, 37, 0, 4, 0,191, 6, 4, 0,192, 6, 4, 0,193, 6, + 4, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 4, 0,197, 6, 4, 0, 43, 0, 4, 0,198, 6, 2, 0,199, 6, 2, 0,200, 6, + 2, 0,201, 6, 2, 0,202, 6, 12, 0,203, 6, 12, 0,204, 6, 12, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, + 2, 0,209, 6, 2, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6,233, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6, + 2, 0,217, 6, 2, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, 4, 0,223, 6, 4, 0,224, 6, + 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, 2, 0,231, 6, 2, 0,232, 6, + 2, 0,233, 6, 2, 0,234, 6, 2, 0,235, 6, 2, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 7, 0,239, 6, 2, 0, 12, 5, + 2, 0,240, 6, 56, 0,241, 6,200, 0, 21, 0, 27, 0, 31, 0, 12, 0,242, 6, 12, 0,243, 6, 12, 0,244, 6, 12, 0,110, 5, + 47, 0,139, 0, 47, 0,245, 6, 2, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6, 2, 0,249, 6, 2, 0,250, 6, 2, 0,251, 6, + 2, 0,252, 6, 2, 0, 37, 0, 2, 0,253, 6, 2, 0,254, 6, 4, 0, 70, 0,195, 0,255, 6, 9, 0, 0, 7, 2, 0, 1, 7, +235, 0, 5, 0,235, 0, 0, 0,235, 0, 1, 0,235, 0, 2, 7, 13, 0, 3, 7, 4, 0, 19, 0,236, 0, 7, 0,236, 0, 0, 0, +236, 0, 1, 0,235, 0, 4, 7,235, 0, 5, 7, 2, 0,132, 4, 2, 0, 19, 0, 4, 0, 37, 0,237, 0, 23, 0,237, 0, 0, 0, +237, 0, 1, 0,238, 0, 6, 7,239, 0,209, 5, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 2, 0, 10, 7, 2, 0, 11, 7, + 2, 0, 12, 7, 2, 0, 13, 7, 2, 0, 14, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0, 15, 7, 2, 0, 16, 7, 2, 0, 17, 7, + 4, 0, 18, 7,237, 0, 19, 7, 9, 0, 20, 7, 4, 0, 21, 7, 4, 0, 22, 7, 0, 0, 23, 7,240, 0, 2, 0,241, 0, 6, 7, +239, 0,209, 5,242, 0, 2, 0,243, 0, 6, 7,239, 0,209, 5,244, 0, 23, 0,244, 0, 0, 0,244, 0, 1, 0,235, 0, 4, 7, +235, 0, 5, 7,235, 0, 24, 7,235, 0, 25, 7,200, 0, 26, 7, 23, 0, 52, 0, 0, 0,111, 5, 0, 0, 27, 7, 2, 0,159, 5, + 2, 0,160, 5, 2, 0, 28, 7, 2, 0, 37, 0, 2, 0,249, 6, 2, 0, 26, 6, 2, 0, 19, 0, 40, 0,126, 0,245, 0, 6, 7, + 12, 0, 29, 7, 12, 0,110, 5, 12, 0, 30, 7, 12, 0, 31, 7,246, 0, 21, 0,246, 0, 0, 0,246, 0, 1, 0,198, 0,165, 5, + 23, 0, 32, 7, 23, 0, 33, 7, 2, 0,159, 5, 2, 0,160, 5, 2, 0, 34, 7, 2, 0, 35, 7, 2, 0, 36, 7, 2, 0, 19, 0, + 7, 0, 10, 2, 2, 0,248, 6, 2, 0,252, 6, 4, 0, 43, 0,247, 0, 6, 7, 12, 0, 37, 7, 12, 0, 38, 7, 12, 0, 30, 7, + 0, 0, 39, 7, 9, 0, 40, 7,248, 0, 11, 0, 0, 0, 41, 7, 2, 0, 42, 7, 2, 0, 43, 7, 2, 0, 44, 7, 2, 0, 45, 7, + 2, 0,121, 4, 2, 0,116, 4,200, 0, 46, 7, 47, 0, 47, 7, 4, 0, 48, 7, 4, 0, 49, 7,249, 0, 1, 0, 0, 0, 50, 7, +250, 0, 8, 0, 58, 0, 51, 7, 58, 0, 52, 7,250, 0, 53, 7,250, 0, 54, 7,250, 0, 55, 7, 2, 0,134, 0, 2, 0, 19, 0, + 4, 0, 56, 7,251, 0, 4, 0, 4, 0,228, 5, 4, 0, 57, 7, 4, 0,233, 5, 4, 0, 58, 7,252, 0, 2, 0, 4, 0, 59, 7, + 4, 0, 60, 7,253, 0, 7, 0, 7, 0, 61, 7, 7, 0, 62, 7, 7, 0, 63, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 3, 4, + 7, 0, 64, 7,254, 0, 6, 0, 0, 0, 65, 7, 0, 0,193, 5, 50, 0,142, 0, 2, 0,110, 0, 2, 0,120, 4, 4, 0, 37, 0, +255, 0, 21, 0,255, 0, 0, 0,255, 0, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 66, 7, 4, 0, 67, 7, + 4, 0, 68, 7,249, 0, 69, 7, 0, 0, 65, 7, 4, 0, 70, 7, 4, 0, 71, 7,254, 0, 6, 3,251, 0, 72, 7,252, 0, 73, 7, +253, 0, 74, 7,250, 0, 75, 7,250, 0, 76, 7,250, 0, 77, 7, 58, 0, 78, 7, 58, 0, 79, 7, 0, 1, 12, 0, 0, 0,191, 1, + 9, 0,196, 0, 0, 0,197, 0, 4, 0,200, 0, 4, 0,208, 0, 9, 0,201, 0, 7, 0,203, 0, 7, 0,204, 0, 9, 0, 80, 7, + 9, 0, 81, 7, 9, 0,205, 0, 9, 0,207, 0, 1, 1, 43, 0, 1, 1, 0, 0, 1, 1, 1, 0, 9, 0, 82, 7, 9, 0, 26, 0, + 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 92, 0, 4, 0, 83, 7, 4, 0, 84, 7, 4, 0, 67, 7, + 4, 0, 68, 7, 4, 0, 85, 7, 4, 0,219, 0, 4, 0, 86, 7, 4, 0, 87, 7, 7, 0,233, 4, 7, 0, 88, 7, 4, 0,131, 0, + 4, 0, 89, 7,255, 0, 90, 7, 36, 0, 80, 0, 47, 0,139, 0, 50, 0,142, 0, 7, 0, 91, 7, 7, 0, 92, 7, 0, 1, 4, 1, + 1, 1, 93, 7, 1, 1, 94, 7, 1, 1, 95, 7, 12, 0, 96, 7, 2, 1, 97, 7, 3, 1, 98, 7, 7, 0, 99, 7, 7, 0,100, 7, + 4, 0,101, 7, 7, 0,102, 7, 9, 0,103, 7, 4, 0,104, 7, 4, 0,105, 7, 4, 0,106, 7, 7, 0,107, 7, 4, 1, 4, 0, + 4, 1, 0, 0, 4, 1, 1, 0, 12, 0,108, 7, 1, 1,109, 7,185, 0, 6, 0, 12, 0,110, 7, 12, 0, 96, 7, 12, 0,111, 7, + 1, 1,112, 7, 0, 0,113, 7, 0, 0,114, 7, 5, 1, 4, 0, 7, 0,115, 7, 7, 0,113, 0, 2, 0,116, 7, 2, 0,117, 7, + 6, 1, 6, 0, 7, 0,118, 7, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 4, 0,122, 7, 4, 0,123, 7, 7, 1, 12, 0, + 7, 0,124, 7, 7, 0,125, 7, 7, 0,126, 7, 7, 0,127, 7, 7, 0,128, 7, 7, 0,129, 7, 7, 0,130, 7, 7, 0,131, 7, + 7, 0,132, 7, 7, 0,133, 7, 4, 0,154, 2, 4, 0,134, 7, 8, 1, 2, 0, 7, 0,210, 4, 7, 0, 37, 0, 9, 1, 5, 0, + 7, 0,135, 7, 7, 0,136, 7, 4, 0, 94, 0, 4, 0,116, 2, 4, 0,137, 7, 10, 1, 6, 0, 10, 1, 0, 0, 10, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 11, 1, 8, 0, 11, 1, 0, 0, 11, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,131, 0, 12, 1, 45, 0, 12, 1, 0, 0, 12, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0,215, 0, 2, 0,177, 3, 2, 0,139, 7, 7, 0,140, 7, 7, 0, 93, 0, + 7, 0,167, 2, 4, 0,141, 7, 4, 0, 82, 0, 4, 0,118, 2, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,145, 7, + 7, 0,146, 7, 7, 0,147, 7, 7, 0,164, 2, 7, 0, 1, 1, 7, 0,148, 7, 7, 0,149, 7, 7, 0, 37, 0, 7, 0,150, 7, + 7, 0,151, 7, 7, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7, 2, 0,158, 7, + 2, 0,159, 7, 2, 0,160, 7, 2, 0,123, 5, 2, 0,161, 7, 2, 0,211, 1, 2, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, + 7, 0,213, 0, 13, 1,165, 7, 65, 0,164, 1, 14, 1, 16, 0, 14, 1, 0, 0, 14, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0,138, 7, 2, 0,215, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, + 7, 0,166, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2,212, 0, 5, 0, 2, 0, 17, 0, 2, 0, 56, 7, 2, 0, 19, 0, + 2, 0,167, 7, 27, 0, 1, 6,211, 0, 3, 0, 4, 0, 69, 0, 4, 0,168, 7,212, 0, 2, 0, 15, 1, 11, 0, 15, 1, 0, 0, + 15, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0,169, 7, 4, 0, 22, 0, 4, 0,170, 7, 2, 0, 19, 0, 2, 0, 37, 0, + 9, 0,171, 7, 9, 0,172, 7, 16, 1, 5, 0, 0, 0, 20, 0, 7, 0, 21, 1, 7, 0,173, 7, 4, 0,174, 7, 4, 0, 37, 0, + 17, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 18, 1, 4, 0, 0, 0, 20, 0, 64, 0,175, 7, + 7, 0, 21, 1, 7, 0, 37, 0, 19, 1, 6, 0, 2, 0,176, 7, 2, 0,177, 7, 2, 0, 17, 0, 2, 0,178, 7, 0, 0,179, 7, + 0, 0,180, 7, 20, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0,181, 7, 0, 0,182, 7, 21, 1, 3, 0, + 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 22, 1, 4, 0, 2, 0,183, 7, 2, 0,184, 7, 2, 0, 19, 0, 2, 0, 37, 0, + 23, 1, 6, 0, 0, 0, 20, 0, 0, 0,185, 7, 2, 0,186, 7, 2, 0,164, 2, 2, 0, 14, 1, 2, 0, 70, 0, 24, 1, 5, 0, + 0, 0, 20, 0, 7, 0,113, 0, 7, 0, 5, 4, 2, 0, 19, 0, 2, 0,130, 2, 25, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, + 4, 0,183, 7, 26, 1, 7, 0, 0, 0, 20, 0, 7, 0, 5, 4, 0, 0,187, 7, 0, 0,188, 7, 2, 0, 14, 1, 2, 0, 43, 0, + 4, 0,189, 7, 27, 1, 3, 0, 32, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7, 28, 1, 18, 0, 28, 1, 0, 0, 28, 1, 1, 0, + 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 19, 0, 2, 0,193, 7, 2, 0,194, 7, 2, 0,195, 7, 2, 0, 43, 0, 2, 0, 70, 0, + 0, 0, 20, 0, 9, 0, 2, 0, 29, 1,196, 7, 32, 0, 45, 0, 2, 0,216, 4, 2, 0, 99, 7, 2, 0,197, 7, 2, 0, 37, 0, + 30, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,198, 7, 2, 0, 19, 0, 2, 0,130, 2, 2, 0,199, 7, 4, 0,200, 7, + 4, 0,201, 7, 4, 0,202, 7, 4, 0,203, 7, 4, 0,204, 7, 31, 1, 1, 0, 0, 0,205, 7, 32, 1, 4, 0, 43, 0,227, 5, + 0, 0,206, 7, 4, 0, 14, 1, 4, 0, 19, 0, 29, 1, 18, 0, 29, 1, 0, 0, 29, 1, 1, 0, 29, 1,207, 7, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,208, 7, 2, 0,195, 7, 2, 0,169, 7, 2, 0,209, 7, 2, 0, 70, 0, 2, 0,161, 1, 0, 0, 20, 0, + 9, 0, 2, 0, 33, 1,196, 7, 28, 1,210, 7, 2, 0, 15, 0, 2, 0,211, 7, 4, 0,212, 7, 34, 1, 3, 0, 4, 0,190, 2, + 4, 0, 37, 0, 32, 0, 45, 0, 35, 1, 12, 0,152, 0,213, 7, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,140, 7, 4, 0, 93, 0, + 0, 0, 20, 0, 0, 0,214, 7, 2, 0,215, 7, 2, 0,216, 7, 2, 0,217, 7, 2, 0,218, 7, 7, 0,219, 7, 36, 1, 10, 0, + 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0,221, 7, 2, 1, 97, 7, 2, 0, 17, 0, 2, 0,222, 7, + 2, 0,223, 7, 2, 0,224, 7, 37, 1, 7, 0, 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0, 17, 0, + 2, 0,225, 7, 7, 0,137, 3, 38, 1, 11, 0, 4, 0,190, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 0,226, 7, + 0, 0, 20, 0, 7, 0,227, 7, 7, 0,228, 7, 7, 0, 40, 3, 2, 0,229, 7, 2, 0,230, 7, 39, 1, 5, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 0, 55, 5, 40, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, + 0, 0,181, 7, 32, 0, 45, 0, 41, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 41, 3, 7, 0,231, 7, + 7, 0,232, 7, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0, 17, 3, 7, 0, 20, 3, 7, 0,233, 7, 7, 0,234, 7, 32, 0,235, 7, + 42, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,214, 7, 2, 0, 43, 0, + 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 43, 1, 8, 0, 32, 0, 45, 0, 7, 0,161, 2, 7, 0,238, 7, 7, 0,239, 7, + 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,240, 7, 44, 1, 12, 0, 2, 0, 17, 0, 2, 0, 14, 1, 2, 0, 19, 0, + 2, 0,164, 2, 2, 0,190, 2, 2, 0,241, 7, 4, 0, 37, 0, 7, 0,242, 7, 7, 0,243, 7, 7, 0,244, 7, 7, 0,245, 7, + 0, 0,246, 7, 45, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 2, 0, 81, 4, + 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 65, 0,164, 1, 46, 1, 7, 0, 4, 0,118, 2, 4, 0,247, 7, 4, 0,248, 7, + 4, 0,249, 7, 7, 0,250, 7, 7, 0,251, 7, 0, 0,187, 7, 47, 1, 7, 0, 0, 0,252, 7, 32, 0,253, 7, 0, 0,191, 7, + 2, 0,254, 7, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,192, 7, 48, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, + 4, 0, 93, 0, 0, 0,255, 7, 0, 0, 0, 8, 49, 1, 1, 0, 4, 0, 19, 0, 50, 1, 6, 0, 0, 0, 96, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 1, 8, 7, 0, 2, 8, 43, 0,227, 5, 51, 1, 4, 0, 0, 0,184, 0, 2, 0, 19, 0, 4, 0, 17, 0, + 32, 0, 45, 0, 52, 1, 2, 0, 4, 0, 17, 0, 4, 0,148, 5, 33, 1, 10, 0, 33, 1, 0, 0, 33, 1, 1, 0, 33, 1,207, 7, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,169, 7, 2, 0, 3, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 53, 1, 10, 0, + 7, 0, 40, 3, 7, 0, 4, 8, 7, 0, 5, 8, 7, 0, 6, 8, 7, 0, 7, 8, 4, 0, 19, 0, 7, 0,241, 7, 7, 0, 8, 8, + 7, 0, 9, 8, 7, 0, 37, 0, 2, 1, 20, 0, 27, 0, 31, 0, 0, 0,195, 0, 54, 1, 10, 8, 9, 0, 11, 8, 44, 0,154, 0, + 44, 0, 12, 8, 9, 0, 13, 8, 36, 0, 80, 0, 7, 0,137, 3, 7, 0, 14, 8, 7, 0, 15, 8, 7, 0, 16, 8, 7, 0, 17, 8, + 7, 0, 18, 8, 7, 0, 19, 8, 4, 0, 94, 0, 4, 0, 20, 8, 0, 0, 21, 8, 0, 0, 22, 8, 0, 0, 23, 8, 55, 1, 6, 0, + 27, 0, 31, 0, 7, 0, 24, 8, 7, 0, 25, 8, 7, 0, 26, 8, 2, 0, 27, 8, 2, 0, 28, 8, 56, 1, 15, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,244, 0, 29, 8,198, 0,165, 5, 2, 1, 97, 7, 2, 0, 14, 1, + 2, 0,220, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, 2, 0,170, 5, 4, 0, 70, 0, 57, 1, 6, 0, 57, 1, 0, 0, + 57, 1, 1, 0, 32, 0, 45, 0, 9, 0, 30, 8, 4, 0,220, 0, 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, 0, 12, 0, 31, 8, + 4, 0,136, 0, 7, 0, 32, 8, 58, 1, 25, 0, 58, 1, 0, 0, 58, 1, 1, 0, 58, 1, 38, 0, 12, 0, 33, 8, 0, 0, 20, 0, + 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, 4, 0, 19, 0, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, + 7, 0, 21, 1, 7, 0,220, 1, 7, 0, 41, 8, 7, 0,116, 2, 7, 0, 42, 8, 7, 0, 43, 8, 7, 0, 44, 8, 7, 0, 45, 8, + 7, 0, 46, 8, 7, 0,177, 0, 2, 0,136, 0, 2, 0,249, 4, 59, 1, 20, 0, 27, 0, 31, 0, 12, 0, 47, 8, 12, 0, 48, 8, + 12, 0, 49, 8, 4, 0, 19, 0, 4, 0,119, 5, 2, 0,168, 2, 2, 0,184, 5, 2, 0,136, 0, 2, 0, 50, 8, 2, 0, 51, 8, + 2, 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, 60, 8, 60, 1, 38, 0, 60, 1, 0, 0, 60, 1, 1, 0, 26, 0, 61, 8, 12, 0, 67, 3, 0, 0, 20, 0, 2, 0, 19, 0, + 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 2, 0, 26, 3, 2, 0, 65, 8, 4, 0,253, 1, 4, 0, 57, 8, 4, 0, 58, 8, + 58, 1, 66, 8, 60, 1, 38, 0, 60, 1, 67, 8, 12, 0, 68, 8, 9, 0, 69, 8, 9, 0, 70, 8, 9, 0, 71, 8, 7, 0, 9, 1, + 7, 0,177, 0, 7, 0, 72, 8, 7, 0,201, 1, 2, 0, 73, 8, 2, 0, 37, 0, 7, 0, 74, 8, 7, 0, 75, 8, 7, 0, 22, 3, + 7, 0, 76, 8, 7, 0, 77, 8, 7, 0, 78, 8, 7, 0, 79, 8, 7, 0, 80, 8, 7, 0, 81, 8, 7, 0,250, 1, 32, 0, 82, 8, +153, 0, 9, 0, 12, 0, 83, 8, 2, 0, 19, 0, 2, 0, 84, 8, 7, 0, 26, 2, 7, 0, 85, 8, 7, 0, 86, 8, 12, 0, 87, 8, + 4, 0, 88, 8, 4, 0, 37, 0, 61, 1, 7, 0, 61, 1, 0, 0, 61, 1, 1, 0, 12, 0, 21, 8, 4, 0, 19, 0, 4, 0, 89, 8, + 0, 0,131, 3,231, 0, 90, 8,152, 0, 7, 0, 27, 0, 31, 0, 12, 0, 91, 8, 12, 0, 83, 8, 12, 0, 92, 8, 12, 0,104, 0, + 4, 0, 19, 0, 4, 0, 93, 8,202, 0, 4, 0, 27, 0, 94, 8, 12, 0, 83, 8, 4, 0, 95, 8, 4, 0, 19, 0, 62, 1, 17, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,152, 0, 9, 3, +202, 0, 96, 8, 0, 0, 14, 1, 0, 0,168, 5, 2, 0, 19, 0, 2, 0, 97, 8, 2, 0,169, 5, 2, 0,170, 5, 2, 0, 98, 8, + 7, 0, 99, 8, 63, 1, 8, 0, 63, 1, 0, 0, 63, 1, 1, 0, 61, 1,100, 8, 36, 0, 80, 0, 12, 0, 12, 3, 4, 0, 19, 0, + 0, 0, 20, 0, 4, 0,101, 8, 64, 1, 5, 0, 64, 1, 0, 0, 64, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0,102, 8, + 65, 1, 12, 0, 65, 1, 0, 0, 65, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,103, 8, 0, 0,104, 8, + 0, 0,102, 8, 7, 0,105, 8, 7, 0,106, 8, 4, 0, 37, 0, 36, 0, 80, 0, 66, 1, 9, 0, 66, 1, 0, 0, 66, 1, 1, 0, + 32, 0,107, 8, 0, 0,108, 8, 7, 0,109, 8, 2, 0,110, 8, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 67, 1, 7, 0, + 43, 0,227, 5, 26, 0, 61, 8, 4, 0, 19, 0, 4, 0,111, 8, 12, 0,112, 8, 32, 0,107, 8, 0, 0,108, 8, 68, 1, 12, 0, + 32, 0,107, 8, 2, 0,113, 8, 2, 0, 19, 0, 2, 0,114, 8, 2, 0,115, 8, 0, 0,108, 8, 32, 0,116, 8, 0, 0,117, 8, + 7, 0,118, 8, 7, 0,220, 1, 7, 0,119, 8, 7, 0,120, 8, 69, 1, 6, 0, 32, 0,107, 8, 4, 0,121, 8, 4, 0,122, 8, + 4, 0, 94, 0, 4, 0, 37, 0, 0, 0,108, 8, 70, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, + 71, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 72, 1, 10, 0, 32, 0,107, 8, 4, 0,123, 8, + 7, 0,130, 0, 4, 0, 19, 0, 2, 0,223, 5, 2, 0,124, 8, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,125, 8, 0, 0,108, 8, + 73, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 74, 1, 10, 0, 32, 0,107, 8, 2, 0, 17, 0, + 2, 0,183, 3, 4, 0, 92, 0, 4, 0, 93, 0, 7, 0,238, 7, 7, 0,239, 7, 4, 0, 37, 0,152, 0,213, 7, 0, 0,108, 8, + 75, 1, 4, 0, 32, 0,107, 8, 4, 0, 27, 3, 4, 0,126, 8, 0, 0,108, 8, 76, 1, 5, 0, 32, 0,107, 8, 7, 0,130, 0, + 4, 0,127, 8, 4, 0, 27, 3, 4, 0, 28, 3, 77, 1, 6, 0, 32, 0,107, 8, 4, 0,128, 8, 4, 0,129, 8, 7, 0,130, 8, + 7, 0,131, 8, 0, 0,108, 8, 78, 1, 16, 0, 32, 0,107, 8, 32, 0, 67, 8, 4, 0, 17, 0, 7, 0,132, 8, 7, 0,133, 8, + 7, 0,134, 8, 7, 0,135, 8, 7, 0,136, 8, 7, 0,137, 8, 7, 0,138, 8, 7, 0,139, 8, 7, 0,140, 8, 2, 0, 19, 0, + 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 79, 1, 3, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,123, 5, 80, 1, 5, 0, + 32, 0,107, 8, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,141, 8, 0, 0,108, 8, 81, 1, 10, 0, 32, 0,107, 8, 0, 0,108, 8, + 2, 0,142, 8, 2, 0,143, 8, 0, 0,144, 8, 0, 0,145, 8, 7, 0,146, 8, 7, 0,147, 8, 7, 0,148, 8, 7, 0,149, 8, + 82, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, 2, 0, 19, 0, + 2, 0,123, 5, 83, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, + 2, 0, 19, 0, 2, 0,123, 5, 84, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, + 7, 0,151, 8, 2, 0, 19, 0, 2, 0,123, 5, 85, 1, 7, 0, 32, 0,107, 8, 0, 0,108, 8, 7, 0, 21, 1, 7, 0, 31, 1, + 2, 0, 19, 0, 2, 0, 14, 1, 4, 0, 37, 0, 86, 1, 5, 0, 32, 0,226, 2, 7, 0, 21, 1, 2, 0,230, 2, 0, 0,232, 2, + 0, 0,152, 8, 87, 1, 10, 0, 87, 1, 0, 0, 87, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,153, 8, 7, 0,222, 0, + 7, 0,223, 0, 2, 0, 21, 8, 2, 0,154, 8, 32, 0, 45, 0, 88, 1, 22, 0, 88, 1, 0, 0, 88, 1, 1, 0, 2, 0, 19, 0, + 2, 0, 14, 1, 2, 0,155, 8, 2, 0,156, 8, 36, 0, 80, 0,152, 0,213, 7, 32, 0,169, 0, 7, 0, 92, 0, 7, 0, 93, 0, + 7, 0,157, 8, 7, 0,158, 8, 7, 0,159, 8, 7, 0,160, 8, 7, 0,157, 2, 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, + 0, 0,163, 8, 0, 0,164, 8, 12, 0, 14, 3, 89, 1, 8, 0, 7, 0,228, 1, 7, 0,238, 7, 7, 0,239, 7, 9, 0, 2, 0, + 2, 0,165, 8, 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 90, 1, 18, 0, 90, 1, 0, 0, 90, 1, 1, 0, 90, 1,169, 8, + 0, 0, 20, 0, 89, 1,170, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,171, 8, 2, 0,172, 8, 2, 0,173, 8, 2, 0,174, 8, + 4, 0, 43, 0, 7, 0,175, 8, 7, 0,176, 8, 4, 0,177, 8, 4, 0,178, 8, 90, 1,179, 8, 91, 1,180, 8, 92, 1, 33, 0, + 92, 1, 0, 0, 92, 1, 1, 0, 92, 1,181, 8, 0, 0, 20, 0, 0, 0,182, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 66, 7, + 2, 0, 99, 7, 2, 0,183, 8, 2, 0,138, 0, 2, 0,172, 8, 2, 0, 56, 7, 12, 0,208, 7, 12, 0,184, 8, 27, 0, 1, 6, + 9, 0,185, 8, 7, 0,175, 8, 7, 0,176, 8, 7, 0,255, 1, 7, 0,186, 8, 2, 0,187, 8, 2, 0,188, 8, 7, 0,189, 8, + 7, 0,190, 8, 2, 0,191, 8, 2, 0,192, 8, 9, 0,193, 8, 24, 0,194, 8, 24, 0,195, 8, 24, 0,196, 8, 93, 1,155, 0, + 94, 1,197, 8, 91, 1, 8, 0, 91, 1, 0, 0, 91, 1, 1, 0, 92, 1,198, 8, 92, 1,199, 8, 90, 1,200, 8, 90, 1,179, 8, + 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,201, 8, 12, 0,202, 8, 89, 1,203, 8, + 12, 0,204, 8, 4, 0, 17, 0, 4, 0,205, 8, 4, 0,206, 8, 4, 0,207, 8, 12, 0,208, 8, 94, 1,209, 8, 90, 1,210, 8, + 90, 1,211, 8, 9, 0,212, 8, 9, 0,213, 8, 4, 0,214, 8, 9, 0,215, 8, 9, 0,216, 8, 9, 0,217, 8, 95, 1, 6, 0, + 4, 0,129, 0, 4, 0,131, 0, 4, 0, 56, 7, 0, 0,218, 8, 0, 0,219, 8, 2, 0, 37, 0, 96, 1, 16, 0, 2, 0, 12, 7, + 2, 0, 13, 7, 2, 0,220, 8, 2, 0, 5, 8, 2, 0,221, 8, 2, 0, 68, 0, 7, 0,156, 2, 7, 0,222, 8, 7, 0,223, 8, + 2, 0, 35, 1, 0, 0,224, 8, 0, 0,232, 4, 2, 0,225, 8, 2, 0, 37, 0, 4, 0,226, 8, 4, 0,227, 8, 97, 1, 9, 0, + 7, 0,228, 8, 7, 0,229, 8, 7, 0, 19, 8, 7, 0,113, 0, 7, 0,230, 8, 7, 0,190, 5, 2, 0,231, 8, 0, 0,232, 8, + 0, 0, 37, 0, 98, 1, 4, 0, 7, 0,233, 8, 7, 0,234, 8, 2, 0,231, 8, 2, 0, 37, 0, 99, 1, 3, 0, 7, 0,235, 8, + 7, 0,236, 8, 7, 0, 15, 0,100, 1, 7, 0, 0, 0,191, 1, 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0, 69, 4, + 4, 0,131, 0, 4, 0,181, 3,101, 1, 7, 0, 7, 0,237, 8, 7, 0,238, 8, 7, 0,239, 8, 7, 0, 10, 2, 7, 0,240, 8, + 7, 0,241, 8, 7, 0,242, 8,102, 1, 4, 0, 2, 0,243, 8, 2, 0,244, 8, 2, 0,245, 8, 2, 0,246, 8,103, 1, 2, 0, + 7, 0, 5, 0, 7, 0, 6, 0,104, 1, 2, 0, 0, 0,171, 0, 0, 0,247, 8,105, 1, 1, 0, 0, 0, 20, 0,106, 1, 10, 0, + 0, 0,248, 8, 0, 0,249, 8, 0, 0,173, 5, 0, 0,250, 8, 2, 0,220, 8, 2, 0,251, 8, 7, 0,252, 8, 7, 0,253, 8, + 7, 0,254, 8, 7, 0,161, 8,107, 1, 2, 0, 9, 0,255, 8, 9, 0, 0, 9,108, 1, 11, 0, 0, 0,120, 4, 0, 0, 17, 0, + 0, 0,231, 8, 0, 0,113, 0, 0, 0, 1, 9, 0, 0,110, 0, 0, 0,184, 0, 7, 0, 2, 9, 7, 0, 3, 9, 7, 0, 4, 9, + 7, 0, 5, 9,109, 1, 8, 0, 7, 0,176, 7, 7, 0,130, 0, 7, 0,232, 4, 7, 0, 82, 2, 7, 0, 6, 9, 7, 0,209, 0, + 7, 0, 7, 9, 4, 0, 17, 0,110, 1, 4, 0, 2, 0, 8, 9, 2, 0, 9, 9, 2, 0, 10, 9, 2, 0, 37, 0,111, 1, 1, 0, + 0, 0, 20, 0,112, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 0, 11, 9,113, 1, 10, 0, 2, 0,122, 3, + 2, 0, 19, 0, 7, 0, 5, 4, 7, 0, 12, 9, 7, 0, 13, 9, 7, 0, 14, 9, 7, 0, 15, 9,112, 1, 16, 9,112, 1, 17, 9, +112, 1, 18, 9, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, 24, 0, 19, 9, 24, 0, 20, 9,113, 1, 21, 9, 7, 0, 22, 9, + 7, 0, 23, 9, 7, 0, 24, 9, 7, 0, 25, 9,114, 1, 4, 0, 48, 0,150, 2, 7, 0, 26, 9, 7, 0, 94, 1, 7, 0, 37, 0, +176, 0, 17, 0, 27, 0, 31, 0,114, 1, 27, 9, 62, 0, 16, 9, 52, 0, 78, 1, 2, 0, 19, 0, 2, 0, 77, 5, 4, 0,110, 0, + 7, 0, 28, 9, 7, 0, 7, 2, 7, 0, 29, 9, 7, 0, 30, 9, 7, 0, 94, 1, 7, 0, 31, 9, 2, 0, 48, 1, 0, 0, 32, 9, + 0, 0,115, 3, 0, 0, 96, 0,115, 1, 10, 0, 4, 0, 17, 0, 4, 0,130, 0, 4, 0, 19, 0, 4, 0, 88, 3, 4, 0, 33, 9, + 4, 0, 34, 9, 4, 0, 35, 9, 0, 0, 96, 0, 0, 0, 20, 0, 9, 0, 2, 0, 89, 0, 6, 0,115, 1, 36, 9, 4, 0, 37, 9, + 4, 0, 38, 9, 4, 0, 39, 9, 4, 0, 37, 0, 9, 0, 40, 9,116, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, + 2, 0, 41, 9, 2, 0, 37, 0,117, 1, 5, 0, 7, 0, 77, 2, 7, 0, 42, 9, 7, 0, 43, 9, 7, 0, 44, 9, 7, 0,190, 2, +118, 1, 7, 0, 4, 0, 45, 9, 4, 0, 46, 9, 4, 0, 47, 9, 7, 0, 48, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0, 51, 9, +119, 1, 8, 0,119, 1, 0, 0,119, 1, 1, 0, 32, 0, 45, 0, 4, 0,213, 2, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0,190, 2, + 7, 0,184, 7,120, 1, 26, 0, 32, 0, 52, 9,117, 1, 84, 3,117, 1, 53, 9,116, 1, 54, 9,117, 1,165, 7, 7, 0, 55, 9, + 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 59, 9, + 7, 0, 60, 9, 7, 0,110, 0, 7, 0, 61, 9, 4, 0, 45, 9, 4, 0, 62, 9, 4, 0, 37, 0, 4, 0, 82, 0, 4, 0, 63, 9, + 2, 0, 19, 0, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0,118, 3,121, 1,117, 0, 27, 0, 31, 0, 39, 0, 75, 0, 4, 0, 19, 0, + 2, 0, 17, 0, 2, 0,142, 8, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 73, 8, 2, 0, 68, 9, 2, 0, 69, 9, 2, 0, 70, 9, + 2, 0, 71, 9, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0, 77, 9, 2, 0, 78, 9, + 2, 0, 79, 9, 2, 0, 80, 9, 2, 0, 81, 9, 2, 0,211, 1, 2, 0,158, 7, 2, 0,134, 7, 2, 0, 82, 9, 2, 0, 83, 9, + 2, 0,116, 3, 2, 0,117, 3, 2, 0, 84, 9, 2, 0, 85, 9, 2, 0, 86, 9, 2, 0, 87, 9, 2, 0, 88, 9, 2, 0, 89, 9, + 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 2, 0, 93, 9, 2, 0, 94, 9, 7, 0, 95, 9, 7, 0, 96, 9, 7, 0, 97, 9, + 7, 0,140, 7, 7, 0, 93, 0, 7, 0,167, 2, 7, 0,146, 7, 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 4, 0,141, 7, + 4, 0,139, 7, 4, 0,101, 9, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,102, 9, 7, 0,103, 9, 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, 40, 3, 7, 0,110, 0, 7, 0,110, 9, + 7, 0,111, 9, 7, 0,112, 9, 7, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 4, 0,117, 9, 4, 0,118, 9, + 7, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, 7, 0,122, 9, 7, 0,123, 9, 7, 0, 57, 0, 7, 0,124, 9, 7, 0,125, 9, + 7, 0,112, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, 7, 0,130, 9, + 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 7, 0,134, 9, 7, 0,135, 9, 7, 0,136, 9, 7, 0,137, 9, 7, 0,138, 9, + 4, 0,139, 9, 4, 0,140, 9, 7, 0, 47, 3, 7, 0,141, 9, 7, 0,142, 9, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, + 7, 0,146, 9, 7, 0,147, 9, 0, 0,148, 9, 65, 0, 73, 3, 65, 0,149, 9, 32, 0,150, 9, 32, 0,151, 9, 36, 0, 80, 0, +155, 0, 71, 3,155, 0,152, 9,142, 0, 39, 0,142, 0, 0, 0,142, 0, 1, 0,121, 1,153, 9,120, 1,163, 3,118, 1, 67, 8, +122, 1,154, 9, 9, 0,155, 9,123, 1,156, 9,123, 1,157, 9, 12, 0,158, 9, 12, 0,159, 9,156, 0, 72, 3, 32, 0,160, 9, + 32, 0,161, 9, 32, 0, 38, 0, 12, 0,162, 9, 12, 0,163, 9, 12, 0,164, 9, 7, 0,213, 0, 7, 0, 92, 4, 4, 0,118, 2, + 4, 0, 19, 0, 4, 0,141, 7, 4, 0,165, 9, 4, 0,166, 9, 4, 0,167, 9, 4, 0, 57, 0, 2, 0,220, 0, 2, 0,168, 9, + 2, 0,169, 9, 2, 0, 65, 3, 2, 0,170, 9, 2, 0,118, 3, 0, 0,171, 9, 2, 0,172, 9, 2, 0,173, 9, 2, 0,174, 9, + 9, 0,175, 9,131, 0,202, 3,129, 0, 34, 0,124, 1,176, 9, 7, 0,174, 3, 7, 0,177, 9, 7, 0,178, 9, 7, 0, 8, 4, + 7, 0,179, 9, 7, 0, 50, 3, 7, 0, 40, 3, 7, 0,180, 9, 7, 0, 9, 2, 7, 0,181, 9, 7, 0,182, 9, 7, 0,183, 9, + 7, 0,184, 9, 7, 0,185, 9, 7, 0,186, 9, 7, 0,175, 3, 7, 0,187, 9, 7, 0,188, 9, 7, 0,189, 9, 7, 0,176, 3, + 7, 0,172, 3, 7, 0,173, 3, 4, 0,190, 9, 4, 0, 94, 0, 4, 0,191, 9, 4, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9, + 2, 0,195, 9, 2, 0,196, 9, 2, 0,197, 9, 2, 0, 37, 0, 4, 0, 70, 0,130, 0, 8, 0,124, 1,198, 9, 7, 0,199, 9, + 7, 0,200, 9, 7, 0,165, 1, 7, 0,201, 9, 4, 0, 94, 0, 2, 0,202, 9, 2, 0,203, 9,125, 1, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,204, 9,126, 1, 6, 0,126, 1, 0, 0,126, 1, 1, 0,125, 1,205, 9, 4, 0,206, 9, + 2, 0,207, 9, 2, 0, 19, 0,127, 1, 5, 0,127, 1, 0, 0,127, 1, 1, 0, 12, 0,208, 9, 4, 0,209, 9, 4, 0, 19, 0, +128, 1, 9, 0,128, 1, 0, 0,128, 1, 1, 0, 12, 0,129, 0,127, 1,210, 9, 4, 0, 19, 0, 2, 0,207, 9, 2, 0,211, 9, + 7, 0, 95, 0, 0, 0,212, 9,190, 0, 6, 0, 27, 0, 31, 0, 12, 0,134, 4, 4, 0, 19, 0, 2, 0,213, 9, 2, 0,214, 9, + 9, 0,215, 9,129, 1, 6, 0,129, 1, 0, 0,129, 1, 1, 0, 4, 0, 17, 0, 4, 0, 23, 0, 0, 0,216, 9, 0, 0,217, 9, +130, 1, 5, 0, 12, 0,218, 9, 4, 0,219, 9, 4, 0,220, 9, 4, 0, 19, 0, 4, 0, 37, 0,131, 1, 13, 0, 27, 0, 31, 0, +132, 1,221, 9,132, 1,222, 9, 12, 0,223, 9, 4, 0,224, 9, 2, 0,225, 9, 2, 0, 37, 0, 12, 0,226, 9, 12, 0,227, 9, +130, 1,228, 9, 12, 0,229, 9, 12, 0,230, 9, 12, 0,231, 9,132, 1, 30, 0,132, 1, 0, 0,132, 1, 1, 0, 9, 0,232, 9, + 4, 0,247, 6, 4, 0, 37, 0,200, 0,164, 5,200, 0,233, 9, 0, 0,234, 9, 2, 0,235, 9, 2, 0,236, 9, 2, 0, 12, 7, + 2, 0, 13, 7, 2, 0,237, 9, 2, 0,238, 9, 2, 0, 88, 3, 2, 0, 26, 6, 2, 0,239, 9, 2, 0,240, 9, 4, 0,161, 1, +133, 1,241, 9,134, 1,242, 9,135, 1,243, 9, 4, 0,244, 9, 4, 0,245, 9, 9, 0,246, 9, 12, 0,247, 9, 12, 0,227, 9, + 12, 0, 30, 7, 12, 0,248, 9, 12, 0,249, 9,136, 1, 12, 0,136, 1, 0, 0,136, 1, 1, 0, 0, 0,250, 9,137, 1,251, 9, + 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 37, 0, +138, 1, 6, 0,138, 1, 0, 0,138, 1, 1, 0, 12, 0, 1, 10, 0, 0, 2, 10, 4, 0, 3, 10, 4, 0, 4, 10,208, 0, 8, 0, +208, 0, 0, 0,208, 0, 1, 0, 0, 0,250, 9, 26, 0, 30, 0,139, 1, 6, 7, 9, 0, 5, 10,137, 1,251, 9,130, 1, 6, 10, +133, 1, 23, 0,133, 1, 0, 0,133, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0, 7, 10, + 2, 0, 8, 10, 2, 0, 9, 10, 2, 0, 10, 10, 0, 0, 11, 10, 0, 0, 37, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, + 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 43, 0, 0, 0, 12, 10, 2, 0, 13, 10, 2, 0, 14, 10, 4, 0, 70, 0, 9, 0, 5, 10, +140, 1, 8, 0,140, 1, 0, 0,140, 1, 1, 0, 9, 0, 2, 0, 9, 0, 15, 10, 0, 0,131, 3, 2, 0, 17, 0, 2, 0, 19, 0, + 7, 0, 16, 10,141, 1, 5, 0, 7, 0, 17, 10, 4, 0, 18, 10, 4, 0, 19, 10, 4, 0, 14, 1, 4, 0, 19, 0,142, 1, 6, 0, + 7, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 4, 0, 17, 0, 4, 0, 19, 0,143, 1, 5, 0, 7, 0,238, 7, + 7, 0,239, 7, 7, 0,190, 2, 2, 0,224, 1, 2, 0,225, 1,144, 1, 5, 0,143, 1, 2, 0, 4, 0, 54, 0, 7, 0, 24, 10, + 7, 0,238, 7, 7, 0,239, 7,145, 1, 4, 0, 2, 0, 25, 10, 2, 0, 26, 10, 2, 0, 27, 10, 2, 0, 28, 10,146, 1, 2, 0, + 43, 0,254, 5, 26, 0, 61, 8,147, 1, 3, 0, 24, 0, 29, 10, 4, 0, 19, 0, 4, 0, 37, 0,148, 1, 6, 0, 7, 0,110, 0, + 7, 0,142, 2, 7, 0, 30, 10, 7, 0, 37, 0, 2, 0,219, 0, 2, 0, 31, 10,149, 1, 7, 0,149, 1, 0, 0,149, 1, 1, 0, + 27, 0, 1, 6, 0, 0, 32, 10, 4, 0, 33, 10, 4, 0, 94, 0, 0, 0,131, 3,150, 1, 6, 0, 12, 0,112, 8, 0, 0, 34, 10, + 7, 0, 61, 0, 7, 0, 16, 10, 4, 0, 17, 0, 4, 0, 19, 0,151, 1, 3, 0, 7, 0, 35, 10, 4, 0, 19, 0, 4, 0, 37, 0, +152, 1, 15, 0,152, 1, 0, 0,152, 1, 1, 0, 61, 1,100, 8,150, 1, 62, 0, 12, 0, 14, 3, 35, 0, 50, 0,151, 1, 36, 10, + 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,255, 0, 4, 0, 33, 10, 0, 0, 32, 10, 4, 0, 37, 10, 7, 0, 38, 10, +153, 1, 2, 0, 0, 0, 39, 10, 0, 0, 40, 10,154, 1, 4, 0,154, 1, 0, 0,154, 1, 1, 0,152, 0,226, 2, 12, 0, 41, 10, +155, 1, 22, 0,155, 1, 0, 0,155, 1, 1, 0, 12, 0, 42, 10,152, 0,213, 7,154, 1, 43, 10, 12, 0, 44, 10, 12, 0, 14, 3, + 0, 0,131, 3, 7, 0, 16, 10, 7, 0, 45, 10, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,157, 8, 7, 0,158, 8, 7, 0,157, 2, + 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, 2, 0, 46, 10, 2, 0, 47, 10, 2, 0, 19, 0, 2, 0, 17, 0,156, 1, 6, 0, +156, 1, 0, 0,156, 1, 1, 0, 12, 0, 42, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,131, 3,157, 1, 10, 0,157, 1, 0, 0, +157, 1, 1, 0, 27, 0, 1, 6, 0, 0, 48, 10, 4, 0, 49, 10, 4, 0, 50, 10, 0, 0, 32, 10, 4, 0, 33, 10, 2, 0, 19, 0, + 2, 0, 51, 10,158, 1, 6, 0,158, 1, 0, 0,158, 1, 1, 0, 12, 0, 52, 10, 0, 0,131, 3, 4, 0, 19, 0, 4, 0, 53, 10, +159, 1, 5, 0,159, 1, 0, 0,159, 1, 1, 0, 0, 0, 32, 10, 4, 0, 33, 10, 7, 0,134, 2, 39, 0, 9, 0,152, 0, 9, 3, +152, 0, 54, 10,154, 1, 43, 10, 12, 0, 55, 10,155, 1, 56, 10, 12, 0, 57, 10, 12, 0, 58, 10, 4, 0, 19, 0, 4, 0,220, 0, +160, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/source/blender/editors/datafiles/preview.blend.c b/source/blender/editors/datafiles/preview.blend.c index 670d49d6b81..3f2b5bd41c1 100644 --- a/source/blender/editors/datafiles/preview.blend.c +++ b/source/blender/editors/datafiles/preview.blend.c @@ -1,7670 +1,504 @@ /* DataToC output of file */ -int datatoc_preview_blend_size= 567892; +int datatoc_preview_blend_size= 586384; char datatoc_preview_blend[]= { - 66, 76, 69, 78, 68, 69, 82, 95, 86, 50, 52, 57, 82, 69, 78, 68, 0, 0, 0, 32, -191,255,241, 96, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 20,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 0, 0, 0, 32,191,255,241, 80, 0, 0, 0,170, 0, 0, 0, 1, - 32, 32, 32, 48, 0, 0, 0, 0, 0,245, 0, 15, 0, 1, 1, 0, 8,192,222, 48, 3,160,158, 32, 0, 0, 0, 0, 0, 0, 0, 64, - 0, 0, 83, 82, 0, 0, 0,120, 8,192,222, 48, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82,115, 99,114,101,101,110, 0, 45, 83, 99,114,105,112,116,105,110,103, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 78, 9, 80, 8,192,224,144, 8,192,224,208, 8,192,228, 16, 8,192,228, 80, 8,193,115,224, - 3,160,158, 32, 0, 0, 3,231, 1,143, 4,174, 3,232, 3, 32, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 2, 78, 9, 80, 0, 0, 0,166, 0, 0, 0, 1, - 2, 76,195, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 2, 76,195, 64, - 0, 0, 0,166, 0, 0, 0, 1, 8,192,222,208, 2, 78, 9, 80, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 20, 8,192,222,208, 0, 0, 0,166, 0, 0, 0, 1, 8,192,223, 16, 2, 76,195, 64, 0, 0, 0, 0, 3,232, 3, 32, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,223, 16, 0, 0, 0,166, 0, 0, 0, 1, 8,192,223, 80, 8,192,222,208, - 0, 0, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,223, 80, 0, 0, 0,166, 0, 0, 0, 1, - 8,192,223,144, 8,192,223, 16, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,223,144, - 0, 0, 0,166, 0, 0, 0, 1, 8,192,223,208, 8,192,223, 80, 0, 0, 0, 0, 3,232, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 20, 8,192,223,208, 0, 0, 0,166, 0, 0, 0, 1, 8,192,224, 16, 8,192,223,144, 0, 0, 0, 0, 3, 32, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,224, 16, 0, 0, 0,166, 0, 0, 0, 1, 8,192,224, 80, 8,192,223,208, - 0, 0, 0, 0, 3, 32, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,224, 80, 0, 0, 0,166, 0, 0, 0, 1, - 8,192,224,144, 8,192,224, 16, 0, 0, 0, 0, 1,236, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,192,224,144, - 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 0, 8,192,224, 80, 0, 0, 0, 0, 1,236, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 8,192,224,208, 0, 0, 0,167, 0, 0, 0, 1, 8,192,225, 16, 0, 0, 0, 0, 2, 76,195, 64, 8,192,222,208, - 0, 1, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,225, 16, 0, 0, 0,167, 0, 0, 0, 1, 8,192,225, 80, - 8,192,224,208, 2, 76,195, 64, 8,192,223, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,225, 80, - 0, 0, 0,167, 0, 0, 0, 1, 8,192,225,144, 8,192,225, 16, 8,192,222,208, 8,192,223,144, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 8,192,225,144, 0, 0, 0,167, 0, 0, 0, 1, 8,192,225,208, 8,192,225, 80, 8,192,223, 80, - 8,192,223,144, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,225,208, 0, 0, 0,167, 0, 0, 0, 1, - 8,192,226, 16, 8,192,225,144, 8,192,223, 16, 8,192,223,208, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,192,226, 16, 0, 0, 0,167, 0, 0, 0, 1, 8,192,226, 80, 8,192,225,208, 8,192,223,144, 8,192,224, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,226, 80, 0, 0, 0,167, 0, 0, 0, 1, 8,192,226,144, 8,192,226, 16, - 8,192,223,208, 8,192,224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,226,144, 0, 0, 0,167, - 0, 0, 0, 1, 8,192,226,208, 8,192,226, 80, 8,192,223, 16, 8,192,223,144, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 8,192,226,208, 0, 0, 0,167, 0, 0, 0, 1, 8,192,227, 16, 8,192,226,144, 2, 78, 9, 80, 8,192,223, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,227, 16, 0, 0, 0,167, 0, 0, 0, 1, 8,192,227, 80, - 8,192,226,208, 2, 78, 9, 80, 8,192,224, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,227, 80, - 0, 0, 0,167, 0, 0, 0, 1, 8,192,227,144, 8,192,227, 16, 8,192,223,208, 8,192,224, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 8,192,227,144, 0, 0, 0,167, 0, 0, 0, 1, 8,192,227,208, 8,192,227, 80, 8,192,223, 80, - 8,192,224,144, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,192,227,208, 0, 0, 0,167, 0, 0, 0, 1, - 8,192,228, 16, 8,192,227,144, 8,192,224, 16, 8,192,224,144, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,192,228, 16, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 0, 8,192,227,208, 8,192,224, 80, 8,192,224,144, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, 8,192,228, 80, 0, 0, 0,169, 0, 0, 0, 1, 8,193, 16,224, 0, 0, 0, 0, - 8,192,223, 80, 2, 76,195, 64, 8,192,222,208, 8,192,223,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,232, 0, 0, 3, 7, - 0, 0, 3, 32, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 3, 7, 0, 0, 3, 33, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 3, 32, - 0, 0, 3, 32, 0, 5, 0, 4, 0, 1, 7, 7, 3,233, 0, 1, 1, 0, 1, 0, 2,189, 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, 8,192, 8,144, 8,192, 8,144, 8,192,229, 80, - 8,193, 15,208, 68, 65, 84, 65, 0, 0, 0,228, 8,192,229, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,192,230, 96, 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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,230, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,192,231,112, 8,192,229, 80, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 70, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,231,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,232,128, 8,192,230, 96, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,232,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,233,144, 8,192,231,112, 70,111,114,109, 97,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,233,144, 0, 0, 0,168, 0, 0, 0, 1, 8,192,234,160, 8,192,232,128, - 80,114,101,118,105,101,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,234,160, 0, 0, 0,168, 0, 0, 0, 1, 8,192,235,176, 8,192,233,144, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 70, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,235,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,236,192, 8,192,234,160, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,236,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,237,208, 8,192,235,176, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,237,208, 0, 0, 0,168, 0, 0, 0, 1, 8,192,238,224, 8,192,236,192, - 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,236,192, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,238,224, 0, 0, 0,168, 0, 0, 0, 1, 8,192,239,240, 8,192,237,208, 80,114,101,118,105,101,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,239,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,241, 0, 8,192,238,224, 76,105,110,107,115, 32, 97,110,100, 32, 80,105,112,101,108,105, -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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,241, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,242, 16, 8,192,239,240, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,242, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,192,243, 32, 8,192,241, 0, - 82, 97,109,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,241, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,243, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,192,244, 48, 8,192,242, 16, 83,104, 97,100,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,210, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,244, 48, 68, 65, 84, 65, 0, 0, 0,228, 8,192,244, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,245, 64, 8,192,243, 32, 77,105,114,114,111,114, 32, 84,114, 97,110,115,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,245, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,246, 80, 8,192,244, 48, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,246, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,192,247, 96, 8,192,245, 64, - 77, 97,112, 32, 73,110,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,245, 64, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,247, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,192,248,112, 8,192,246, 80, 77, 97,112, 32, 84,111, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 24, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,245, 64, 68, 65, 84, 65, 0, 0, 0,228, 8,192,248,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,249,128, 8,192,247, 96, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,249,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,250,144, 8,192,248,112, 77,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,250,144, 0, 0, 0,168, 0, 0, 0, 1, 8,192,251,160, 8,192,249,128, - 77,111,100,105,102,105,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, - 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,251,160, 0, 0, 0,168, 0, 0, 0, 1, 8,192,252,176, 8,192,250,144, 83,104, 97,112,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,140, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,250,144, 68, 65, 84, 65, 0, 0, 0,228, 8,192,252,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,192,253,192, 8,192,251,160, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,253,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,192,254,208, 8,192,252,176, 77,101,115,104, 32, 84,111,111,108,115, 32, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,192,254,208, 0, 0, 0,168, 0, 0, 0, 1, 8,192,255,224, 8,192,253,192, - 80,114,101,118,105,101,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,192,255,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 0,240, 8,192,254,208, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 70, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 0,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 2, 0, 8,192,255,224, 77,105,115,116, 32, 47, 32, 83,116, 97,114,115, 32, 47, 32, 80, -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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 2, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 3, 16, 8,193, 0,240, 65,109, 98, 32, 79, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 0,240, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 3, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 4, 32, 8,193, 2, 0, - 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 4, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 5, 48, 8,193, 3, 16, 77, 97,112, 32, 84,111, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,210, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 3, 16, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 5, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 6, 64, 8,193, 4, 32, 80,114,101,118,105,101,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 6, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 7, 80, 8,193, 5, 48, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 7, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 8, 96, 8,193, 6, 64, - 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 6, 64, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 8, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 9,112, 8,193, 7, 80, 79, 98,106,101, 99,116, 32, 97, -110,100, 32, 76,105,110,107,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, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 9,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 10,128, 8,193, 8, 96, 65,110,105,109, 32,115,101,116,116,105,110,103,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, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 10,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 11,144, 8,193, 9,112, 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, 0, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 11,144, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 12,160, 8,193, 10,128, - 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, 0, 0, 0, 0, 0, - 79, 98,106,101, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 12,160, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 13,176, 8,193, 11,144, 67,108,111,117,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,140, 0, 0, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 13,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 14,192, 8,193, 12,160, 83,116,117, 99, 99,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 14,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 15,208, 8,193, 13,176, 87,111,111,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 15,208, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 0, 8,193, 14,192, - 82,101,110,100,101,114, 32, 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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,192,229, 80, 68, 65, 84, 65, - 0, 0, 0,204, 8,193, 16,224, 0, 0, 0,169, 0, 0, 0, 1, 8,193, 90,208, 8,192,228, 80, 8,192,223,208, 8,192,224, 16, - 8,192,223,144, 8,192,223, 16, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 45, 68,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,128, 0, 0, 0, -128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 0, 0, 3, 33, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 3, 33, - 0, 0, 3,232, 0, 0, 2,235, 0, 0, 3, 5, 0, 0, 3, 33, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 2,234, 0, 7, 0, 6, - 0, 2, 4, 4, 0,200, 2,235, 1, 0, 1, 0, 1,156, 0,103, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,193, 80,144, 8,193, 88,224, 2, 76,232, 48, 8,192, 31,208, 8,193, 17,224, 8,193, 79,128, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 17,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 18,240, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, -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, 73,112,111, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,167, 1, 62, 0,204, - 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 18,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 20, 0, 8,193, 17,224, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 1, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 8,193, 51,224, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 20, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 21, 16, 8,193, 18,240, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 21, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 22, 32, 8,193, 20, 0, - 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 22, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 23, 48, 8,193, 21, 16, 70,111,114,109, 97,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 72, 1, 62, 0,204, - 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 23, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 24, 64, 8,193, 22, 32, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 24, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 25, 80, 8,193, 23, 48, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 25, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 26, 96, 8,193, 24, 64, - 80,114,101,118,105,101,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 26, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 27,112, 8,193, 25, 80, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 24, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 27,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 28,128, 8,193, 26, 96, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 28, 1, 62, 0,224, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 77, 96, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 28,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 29,144, 8,193, 27,112, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 29,144, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 30,160, 8,193, 28,128, - 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 28,128, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 30,160, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 31,176, 8,193, 29,144, 77,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 24, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 31,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 32,192, 8,193, 30,160, 77,111,100,105,102,105,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 32,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 33,208, 8,193, 31,176, 83,104, 97,112,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 8,193, 31,176, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 33,208, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 34,224, 8,193, 32,192, - 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, - 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 94, 1, 62, 0,254, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 34,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 35,240, 8,193, 33,208, 77,101,115,104, 32, 84,111,111, -108,115, 32, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 96, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 35,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 37, 0, 8,193, 34,224, 84,101,120,116,117,114,101, 32,102, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 37, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 37, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 38, 16, 8,193, 35,240, 85, 86, 32, 67, 97,108, 99,117,108, 97,116,105,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, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 38, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 39, 32, 8,193, 37, 0, - 80, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 39, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 40, 48, 8,193, 38, 16, 67,117,114,118,101, 32, 97,110, -100, 32, 83,117,114,102, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 40, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 41, 64, 8,193, 39, 32, 67,117,114,118,101, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 41, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 42, 80, 8,193, 40, 48, 67,117,114,118,101, 32, 84,111,111,108,115, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 42, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 43, 96, 8,193, 41, 64, - 80,114,101,118,105,101,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 43, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 44,112, 8,193, 42, 80, 76,105,110,107,115, 32, 97,110, -100, 32, 80,105,112,101,108,105,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 24, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 44,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 45,128, 8,193, 43, 96, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 45,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 46,144, 8,193, 44,112, 82, 97,109,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 44,112, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 46,144, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 47,160, 8,193, 45,128, - 83,104, 97,100,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 52, 1, 62, 0,224, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 47,160, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 47,160, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 48,176, 8,193, 46,144, 77,105,114,114,111,114, 32, 84, -114, 97,110,115,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,248, 1, 62, 1, 28, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 48,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 49,192, 8,193, 47,160, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 49,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 50,208, 8,193, 48,176, 77, 97,112, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 48,176, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 50,208, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 51,224, 8,193, 49,192, - 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 48,176, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 51,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 52,240, 8,193, 50,208, 82,101,110,100,101,114, 32, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 52,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 54, 0, 8,193, 51,224, 80,114,101,118,105,101,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 54, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 55, 16, 8,193, 52,240, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 55, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 56, 32, 8,193, 54, 0, - 77,105,115,116, 32, 47, 32, 83,116, 97,114,115, 32, 47, 32, 80,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 56, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 57, 48, 8,193, 55, 16, 65,109, 98, 32, 79, 99, 99, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 55, 16, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 57, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 58, 64, 8,193, 56, 32, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 58, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 59, 80, 8,193, 57, 48, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 57, 48, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 59, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 60, 96, 8,193, 58, 64, - 77,117,108,116,105,114,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, - 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 60, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 61,112, 8,193, 59, 80, 79, 98,106,101, 99,116, 32, 97, -110,100, 32, 76,105,110,107,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, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 61,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 62,128, 8,193, 60, 96, 65,110,105,109, 32,115,101,116,116,105,110,103,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, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 62,128, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 63,144, 8,193, 61,112, 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, 0, 79, 98,106,101, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 63,144, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 64,160, 8,193, 62,128, - 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, 0, 0, 0, 0, 0, - 79, 98,106,101, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 64,160, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 65,176, 8,193, 63,144, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, - 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8,193, 21, 16, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 65,176, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 66,192, 8,193, 64,160, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 1, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 8,193, 22, 32, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 66,192, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 67,208, 8,193, 65,176, 80, 97,114,116,105, 99,108,101, 32, 83,121,115,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 97,114,116,105, 99,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 67,208, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 68,224, 8,193, 66,192, - 80,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 97,114,116,105, 99,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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 68,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 69,240, 8,193, 67,208, 86,105,115,117, 97,108,105,122, - 97,116,105,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, 0, - 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, 97,114,116,105, 99,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 69,240, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 71, 0, 8,193, 68,224, 69,120,116,114, 97,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, 80, 97,114,116,105, 99,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 71, 0, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 72, 16, 8,193, 69,240, 67,104,105,108,100,114,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, 80, 97,114,116,105, 99,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 69,240, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 72, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 73, 32, 8,193, 71, 0, - 80,114,101,118,105,101,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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 73, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 74, 48, 8,193, 72, 16, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 74, 48, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 75, 64, 8,193, 73, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 73, 32, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 75, 64, 0, 0, 0,168, 0, 0, 0, 1, - 8,193, 76, 80, 8,193, 74, 48, 87,111,111,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 76, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 77, 96, 8,193, 75, 64, - 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193, 47,160, 68, 65, 84, 65, - 0, 0, 0,228, 8,193, 77, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 78,112, 8,193, 76, 80, 83,107,121, 47, 65,116,109,111, -115,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 78,112, - 0, 0, 0,168, 0, 0, 0, 1, 8,193, 79,128, 8,193, 77, 96, 77,101,115,104, 32, 84,111,111,108,115, 32, 77,111,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,120, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 79,128, 0, 0, 0,168, 0, 0, 0, 1, - 0, 0, 0, 0, 8,193, 78,112, 84,101,120,116,117,114,101, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193, 59, 80, 68, 65, 84, 65, 0, 0, 0,220, 8,193, 80,144, 0, 0, 0,147, 0, 0, 0, 1, 3,160,146, 32, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 8,193, 16,224, 0, 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,193, 0, 0, 0, 67,163, 0, 0,196,180, 64, 0, 67,104, 0, 0,193, 0, 0, 0, 67,163, 0, 0, -196,133, 50,225, 67, 53,230,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, 67,128, 0, 0, 66, 40, 0, 0, - 69, 0, 0, 0, 67,225, 0, 0, 63, 0, 0, 0, 63,154,225, 72, 0, 0, 0, 1, 0, 1, 0, 1, 0,200, 2,235, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 3,160,158, 32,255,255, 0, 0, - 0, 0, 0, 0, 1,150, 0, 0, 1, 53, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 28, 3,160,146, 32, - 0, 0, 0,142, 0, 0, 0, 1, 8,193, 81,160, 8,193, 80,144, 0, 0, 0, 1, 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,127,198, 52,188,166, 29,146, 61, 22,153, 97, 0, 0, 0, 0, 61, 43,252, 13, - 62,247, 11, 89,191, 95,248, 90, 0, 0, 0, 0, 52, 67,176,196, 63, 96, 42,246, 62,247, 67, 44, 0, 0, 0, 0, 64, 78, 45, 74, - 62,172, 87,201,194, 41,171, 79, 63,128, 0, 0, 63,127,198, 53, 61, 43,251,248, 52, 80, 0, 0, 0, 0, 0, 0,188,166, 29,186, - 62,247, 11,119, 63, 96, 43, 16, 0, 0, 0, 0, 61, 22,153, 99,191, 95,248,117, 62,247, 67, 75, 0, 0, 0, 0,191,211,125,192, -194, 21,161,185, 65,161,133, 59, 63,128, 0, 0, 63,139,224,100,190, 96,221, 21,189, 22,154,236,189, 22,153, 97, 61, 60, 27,174, - 64,167, 52,239, 63, 95,250,166, 63, 95,248, 90, 52, 86, 9, 86, 65, 23,185, 41,190,247, 69,181,190,247, 67, 44, 64, 97,129,137, - 64,105, 75, 27, 66, 41,152,145, 66, 41,171, 79, 63,105,225, 95, 61, 39,247, 84,186,185, 46,176,184,146,196,144,186,245,126,178, - 61, 54,117, 48, 61,165,157, 23, 52,153,160, 0, 66,165, 56,225, 68,233,202,192,196,124, 94, 18,194, 71,254, 87,194,165, 77,102, -196,233,177, 39, 68,124, 65,193, 66, 72, 0,101, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 45, 68,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,128, 0, 0, 0, -128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 63,127,198, 52,188,166, 29,146, 61, 22,153, 97, 0, 0, 0, 0, 61, 43,252, 13, - 62,247, 11, 89,191, 95,248, 90, 0, 0, 0, 0, 52, 67,176,196, 63, 96, 42,246, 62,247, 67, 44, 0, 0, 0, 0, 64, 78, 45, 74, - 62,172, 87,201,194, 41,171, 79, 63,128, 0, 0, 63, 92, 99,141,191, 2, 35, 43,188, 46,238,188,188,148, 32, 94, 66, 25,240, 23, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3,160,170, 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, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,226, 0, 0, 66, 12, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 58,124, 56, 68, 60, 35,215, 10, 67,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 68, 77,201, - 64,111, 66,228,191,205, 97,230, 60,149,191,128,191, 77,109,116, 63,230,165,248, 0, 20, 0, 0, 0, 7, 0, 99, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0,255,255, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,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, 24, 24, 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, 68, 65, 84, 65, 0, 0, 1, 88, 8,193, 81,160, 0, 0, 0,146, 0, 0, 0, 1, 8,193, 83, 32, 3,160,146, 32, - 0, 0, 0, 2, 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, 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,122, 0, 0,189,204,204,205, 63,140,204,205, 63,128, 0, 0, 67,122, 0, 0,192,160, 0, 0, - 64,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, 0, 0, 2,235, 60, 35,215, 10, 60, 35,215, 10, 70,106, 96, 0, - 68,122, 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, 3,161, 14, 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, 29, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, 68, 65, 84, 65, 0, 0, 0,128, 8,193, 83, 32, 0, 0, 0,153, - 0, 0, 0, 1, 8,193, 83,208, 8,193, 81,160, 0, 0, 0, 9, 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,193,195,192, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 0, 0, 5, - 0, 0, 0, 17, 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,207, 0, 0, 2,227, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193, 83,208, 0, 0, 0,151, 0, 0, 0, 1, 8,193, 85, 0, 8,193, 83, 32, - 0, 0, 0, 6, 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67,128, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,190,120, 0, 0, 63,159, 0, 0,190,242, 0, 0, 63,188,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, 1,124, 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, - 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, - 63,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, - 68, 65, 84, 65, 0, 0, 1, 8, 8,193, 85, 0, 0, 0, 0,150, 0, 0, 0, 1, 8,193, 86, 48, 8,193, 83,208, 0, 0, 0, 3, - 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, -195,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,190, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, - 0, 0, 0, 0, 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 1, 0, 1, 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0, 0, 0, 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,142, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 76, 69, 78, 68, 69, 82, 95,118, 50, 53, 48, 82, 69, 78, 68, + 32, 0, 0, 0, 16,244, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0,112,114,101,118,105,101,119, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 32, 0, 0, 0,160,243, 34, 0,186, 0, 0, 0, + 1, 0, 0, 0, 32, 32, 32, 48, 0, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, 32, 95,178, 3,160, 63,179, 3, 0, 0, 0, 0, + 64, 0, 0, 0, 87, 77, 0, 0,140, 0, 0, 0,152, 93,178, 3, 76, 1, 0, 0, 1, 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, + 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 94,178, 3,240,207, 72, 1, 88, 94,178, 3, 88, 94,178, 3, 1, 0, 0, 0, + 0, 0, 0, 0, 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, + 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,248, 84, 72, 1, +216, 15,158, 3, 68, 65, 84, 65,148, 0, 0, 0, 88, 94,178, 3, 77, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 15, 75, 1, 1, 0, 0, 0, 0, 0, 0, 0, 32, 95,178, 3, 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, 27, 0,120, 7,149, 4, 0, 0, 0, 0, + 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0,200,110, 72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144,222,154, 3, 0, 0, 0, 0, 0, 0, 0, 0, 16, 79,156, 3,136, 37,159, 3,128, 85, 72, 1,248, 50, 72, 1,184,117, 74, 1, + 56, 20,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0, 32, 95,178, 3,178, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82,115, 99,114,101,101,110, 0, 45, 83, 99,114,105,112,116, +105,110,103, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,225,155, 3, 88,217,155, 3,120,225,154, 3, +224,239,157, 3,224,225,153, 3,112, 13,179, 3, 0, 0, 0, 0, 0, 0, 0, 0,160, 63,179, 3, 0, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 24,225,155, 3,179, 0, 0, 0, 1, 0, 0, 0, + 8, 2,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 8, 2,156, 3, +179, 0, 0, 0, 1, 0, 0, 0, 80, 16,156, 3, 24,225,155, 3, 0, 0, 0, 0, 0, 0,149, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0, 80, 16,156, 3,179, 0, 0, 0, 1, 0, 0, 0, 48,225,154, 3, 8, 2,156, 3, 0, 0, 0, 0,120, 7,149, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 48,225,154, 3,179, 0, 0, 0, 1, 0, 0, 0, 48, 11,156, 3, 80, 16,156, 3, + 0, 0, 0, 0,120, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 48, 11,156, 3,179, 0, 0, 0, 1, 0, 0, 0, +224,239,156, 3, 48,225,154, 3, 0, 0, 0, 0, 0, 0,120, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,224,239,156, 3, +179, 0, 0, 0, 1, 0, 0, 0,232,206,159, 3, 48, 11,156, 3, 0, 0, 0, 0,120, 7,120, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0,232,206,159, 3,179, 0, 0, 0, 1, 0, 0, 0,136, 3,156, 3,224,239,156, 3, 0, 0, 0, 0, 8, 6, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,136, 3,156, 3,179, 0, 0, 0, 1, 0, 0, 0, 0,219,155, 3,232,206,159, 3, + 0, 0, 0, 0, 8, 6,120, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 0,219,155, 3,179, 0, 0, 0, 1, 0, 0, 0, + 0,177,154, 3,136, 3,156, 3, 0, 0, 0, 0,192, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 0,177,154, 3, +179, 0, 0, 0, 1, 0, 0, 0,144, 72,160, 3, 0,219,155, 3, 0, 0, 0, 0,192, 3,120, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0,144, 72,160, 3,179, 0, 0, 0, 1, 0, 0, 0,216, 12,156, 3, 0,177,154, 3, 0, 0, 0, 0,192, 3, 44, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,216, 12,156, 3,179, 0, 0, 0, 1, 0, 0, 0, 40,175,163, 3,144, 72,160, 3, + 0, 0, 0, 0, 8, 6, 44, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 40,175,163, 3,179, 0, 0, 0, 1, 0, 0, 0, + 88,217,155, 3,216, 12,156, 3, 0, 0, 0, 0,192, 3,100, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88,217,155, 3, +179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40,175,163, 3, 0, 0, 0, 0, 8, 6,100, 3, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0,120,225,154, 3,180, 0, 0, 0, 1, 0, 0, 0,224, 7,156, 3, 0, 0, 0, 0, 8, 2,156, 3, 80, 16,156, 3, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224, 7,156, 3,180, 0, 0, 0, 1, 0, 0, 0,160, 31,160, 3, +120,225,154, 3, 8, 2,156, 3, 48, 11,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160, 31,160, 3, +180, 0, 0, 0, 1, 0, 0, 0, 8, 5,156, 3,224, 7,156, 3, 80, 16,156, 3,224,239,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0, 8, 5,156, 3,180, 0, 0, 0, 1, 0, 0, 0,224,112,155, 3,160, 31,160, 3, 48, 11,156, 3, +224,239,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,112,155, 3,180, 0, 0, 0, 1, 0, 0, 0, + 8, 64,158, 3, 8, 5,156, 3, 48,225,154, 3,232,206,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, + 8, 64,158, 3,180, 0, 0, 0, 1, 0, 0, 0,144,215,163, 3,224,112,155, 3,136, 3,156, 3,224,239,156, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,144,215,163, 3,180, 0, 0, 0, 1, 0, 0, 0, 16, 74,160, 3, 8, 64,158, 3, +136, 3,156, 3,232,206,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16, 74,160, 3,180, 0, 0, 0, + 1, 0, 0, 0,136, 9,156, 3,144,215,163, 3, 48,225,154, 3,224,239,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0,136, 9,156, 3,180, 0, 0, 0, 1, 0, 0, 0, 16, 71,160, 3, 16, 74,160, 3, 24,225,155, 3, 48, 11,156, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16, 71,160, 3,180, 0, 0, 0, 1, 0, 0, 0,184,240,159, 3, +136, 9,156, 3, 0,219,155, 3, 24,225,155, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,240,159, 3, +180, 0, 0, 0, 1, 0, 0, 0,136,128,154, 3, 16, 71,160, 3, 0,219,155, 3,232,206,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0,136,128,154, 3,180, 0, 0, 0, 1, 0, 0, 0,168,220,155, 3,184,240,159, 3, 0,177,154, 3, + 48, 11,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,220,155, 3,180, 0, 0, 0, 1, 0, 0, 0, +248, 17,156, 3,136,128,154, 3, 0,177,154, 3,136, 3,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, +248, 17,156, 3,180, 0, 0, 0, 1, 0, 0, 0,136, 46,155, 3,168,220,155, 3, 0,177,154, 3, 0,219,155, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,136, 46,155, 3,180, 0, 0, 0, 1, 0, 0, 0, 32,205,155, 3,248, 17,156, 3, + 0,219,155, 3,144, 72,160, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 32,205,155, 3,180, 0, 0, 0, + 1, 0, 0, 0,224, 95,178, 3,136, 46,155, 3,216, 12,156, 3,232,206,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0,224, 95,178, 3,180, 0, 0, 0, 1, 0, 0, 0,224,111,159, 3, 32,205,155, 3,216, 12,156, 3,144, 72,160, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,111,159, 3,180, 0, 0, 0, 1, 0, 0, 0,224,239,157, 3, +224, 95,178, 3, 0,177,154, 3,144, 72,160, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,239,157, 3, +180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224,111,159, 3,136, 3,156, 3,216, 12,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,112, 0, 0, 0,224,225,153, 3,184, 0, 0, 0, 1, 0, 0, 0, 16,102,155, 3, 0, 0, 0, 0, 48, 11,156, 3, + 8, 2,156, 3, 80, 16,156, 3,224,239,156, 3, 0, 0, 0, 0, 0, 0, 0, 0,120, 7, 0, 0,121, 4, 0, 0,149, 4, 0, 0, + 7, 7,121, 7, 29, 0, 1, 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, +248,193, 65, 1, 64, 63,179, 3, 64, 63,179, 3,216, 56,155, 3, 40, 96,178, 3, 0, 0, 0, 0, 0, 0, 0, 0,200, 89,154, 3, +128,144, 74, 1, 68, 65, 84, 65,236, 0, 0, 0,216, 56,155, 3,185, 0, 0, 0, 1, 0, 0, 0, 40, 96,178, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64,103, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,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,120, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,213, 68, 0, 0,200, 65, 0,192,213, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,121, 7, 26, 0,121, 7, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 7, 0, 0,121, 4, 0, 0,146, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,121, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,195, 65, 1, 8,235,154, 3, 8,235,154, 3, 0, 0, 0, 0, 0, 0, 0, 0, 88,204,163, 3, 8,153, 71, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 40, 96,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,216, 56,155, 3, + 0, 0, 0, 0, 0,240,107, 69, 0,128,206,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 69, 0, 0, 32,192, 0, 0, 0,191, +104, 7, 0, 0,121, 7, 0, 0, 18, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,103, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,103, 7, 0, 0, 18, 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, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,121, 7, 3, 0,104, 7, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 7, 0, 0,147, 4, 0, 0,149, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,121, 7, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144,194, 65, 1, 32,142, 78, 1,136,236,154, 3, 72, 97,178, 3, 24,100,178, 3,128,153, 71, 1,112,154, 71, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 72, 97,178, 3,181, 0, 0, 0, 1, 0, 0, 0,176, 98,178, 3, 0, 0, 0, 0, +128,118,159, 3, 0, 0, 0, 0, 73, 78, 70, 79, 95, 80, 84, 95,116, 97, 98,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, 73, 78, 70, 79, 95, 80, 84, 95,116, 97, 98,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 14, 36, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,176, 98,178, 3,181, 0, 0, 0, + 1, 0, 0, 0, 24,100,178, 3, 72, 97,178, 3,224,166,160, 3, 0, 0, 0, 0, 73, 78, 70, 79, 95, 80, 84, 95,118,105,101,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, 73, 78, 70, 79, 95, 80, 84, 95,118,105,101,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, 86,105,101,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, 0, 0, 0,122,254,208, 14, 98, 1, 0, 0, 0, 0, + 0, 0, 10, 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, 68, 65, 84, 65, - 0, 0, 0,176, 8,193, 86, 48, 0, 0, 0,235, 0, 0, 0, 1, 8,193, 87, 16, 8,193, 85, 0, 0, 0, 0, 11, 63, 51, 51, 51, - 8,193, 16,224,192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0, 67,127, 0, 0,192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, - 67,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, 1,124, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16, 0, 0, 1,124, 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, - 67,129,128, 0, 61,204,204,205, 65, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 1, 0, 0, 24,100,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 98,178, 3,176,159,155, 3, 0, 0, 0, 0, + 73, 78, 70, 79, 95, 80, 84, 95, 98,111,116,116,111,109, 98, 97,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, 0, 0, 0,180, 8,193, 87, 16, 0, 0, 0,152, 0, 0, 0, 1, 8,193, 87,240, 8,193, 86, 48, 0, 0, 0, 13, - 63, 51, 51, 51, 8,193, 16,224, 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,128, 0, 0, 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0,192,160, 0, 0, 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, - 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, - 61,204,204,205, 66, 72, 0, 0, 0, 10, 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, 68, 65, 84, 65, 0, 0, 0,192, 8,193, 87,240, 0, 0, 0,245, 0, 0, 0, 1, 8,193, 88,224, - 8,193, 87, 16, 0, 0, 0, 12, 63, 51, 51, 51, 8,193, 16,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, - 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14, 0, 0, 0, 0, 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, - 60, 35,215, 10, 66, 72, 0, 0, 0, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1,200, 8,193, 88,224, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0, 0, 8,193, 87,240, 0, 0, 0, 5, 63, 51, 51, 51, - 8,193, 16,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 83, 97,118,101, - 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68, -101,115,107,116,111,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, + 73, 78, 70, 79, 95, 80, 84, 95, 98,111,116,116,111,109, 98, 97,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, + 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, 86,254,208, 14, 36, 0, 0, 0, 0, 0, 0, 0, 11, 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, 68, 65, 84, 65,112, 0, 0, 0, 16,102,155, 3,184, 0, 0, 0, 1, 0, 0, 0,144,214, 76, 1, +224,225,153, 3,232,206,159, 3,136, 3,156, 3,224,239,156, 3, 48,225,154, 3, 0, 0, 0, 0, 9, 6, 0, 0,120, 7, 0, 0, + 0, 0, 0, 0,119, 4, 0, 0, 4, 4,112, 1,120, 4, 2, 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,128,191, 65, 1,232,232,160, 3, 56,186,178, 3,128,101,178, 3,160,102,178, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 50,155, 3, 72,155, 71, 1, 68, 65, 84, 65,236, 0, 0, 0,128,101,178, 3,185, 0, 0, 0, 1, 0, 0, 0, +160,102,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,184, 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,111, 1, 0, 0, 0, 0, 0, 0, 25, 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, 4, 10, 0,112, 1, + 26, 0,112, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,120, 7, 0, 0, 94, 4, 0, 0,119, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 1, 26, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,104,193, 65, 1,144,128,163, 3,144,128,163, 3, 0, 0, 0, 0, 0, 0, 0, 0,168,155, 71, 1, +152,156, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,160,102,178, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,128,101,178, 3, 0, 0, 0, 0, 0,128,177, 67, 0,160,143,196, 0, 0, 0, 0, 0, 0, 0, 0, 22, 12,186, 67, +116,195,145,196, 0, 0, 0, 0, 95, 1, 0, 0,112, 1, 0, 0, 18, 0, 0, 0, 93, 4, 0, 0, 0, 0, 0, 0, 94, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 94, 1, 0, 0, 18, 0, 0, 0, 93, 4, 0, 0, 0, 0,128, 67, 0, 0, 40, 66, + 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,112, 1, + 94, 4, 95, 1, 76, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0,120, 7, 0, 0, 0, 0, 0, 0, 93, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 1, 94, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24,192, 65, 1,240,146,203, 3,112, 73,163, 3,192,103,178, 3, 88,147,178, 3, 96,158, 71, 1, + 80,159, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,103,178, 3,181, 0, 0, 0, 1, 0, 0, 0, + 40,105,178, 3, 0, 0, 0, 0,168,192, 65, 1, 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,116, 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, 68, 65, 84, 65, 56, 1, 0, 0, + 40,105,178, 3,181, 0, 0, 0, 1, 0, 0, 0,144,106,178, 3,192,103,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,108, 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, 68, 65, 84, 65, + 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,108, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,112,114,101,118,105,101,119, 46, 98,108,101,110,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, 8, 0, 82, 0, 0, 0, 0, 1, 76, 0, 1, - 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, - 8,193, 90,208, 0, 0, 0,169, 0, 0, 0, 1, 8,193,115,224, 8,193, 16,224, 8,192,224, 80, 8,192,224,144, 8,192,224, 16, - 8,192,223,208, 0, 0, 0, 0, 63,238, 38, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188,163,215,225, 0, 0, 0, 0, 0, 0, 1,237, 0, 0, 3, 31, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 1,237, 0, 0, 3, 31, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 1,237, 0, 0, 3, 31, 0, 0, 0, 27, 0, 0, 3, 5, 0, 9, 0, 8, 0, 1, 6, 6, - 1, 51, 2,235, 1, 0, 1, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193,105,160, 8,193,113,240, 8,192, 64, 80, 8,192, 64, 80, 8,193, 91,208, 8,193,104,144, 68, 65, 84, 65, 0, 0, 0,228, - 8,193, 91,208, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 92,224, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,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, 73,112,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, +240, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,144,106,178, 3,181, 0, 0, 0, 1, 0, 0, 0,248,107,178, 3, 40,105,178, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,112,114,101,118,105,101,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, 0, 0, 0, 33, 0,167, 1, 62, 0,204, 0, 0, 0, 0, - 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 92,224, 0, 0, 0,168, - 0, 0, 0, 1, 8,193, 93,240, 8,193, 91,208, 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, 68, 65, 84, 65, 95, 80, 84, 95,112,114,101,118,105,101,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, 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, 80,114,101,118,105,101,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, 24,255,240, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,248,107,178, 3,181, 0, 0, 0, + 1, 0, 0, 0, 96,109,178, 3,144,106,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 93,240, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 95, 0, - 8,193, 92,224, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,228, 8,193, 95, 0, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 96, 16, 8,193, 93,240, 65,110,105,109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,128, 0, 0, - 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, - 8,193, 96, 16, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 97, 32, 8,193, 95, 0, 70,111,114,109, 97,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 97, 32, 0, 0, 0,168, - 0, 0, 0, 1, 8,193, 98, 48, 8,193, 96, 16, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193, 98, 48, 0, 0, 0,168, 0, 0, 0, 1, 8,193, 99, 64, - 8,193, 97, 32, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,228, 8,193, 99, 64, 0, 0, 0,168, 0, 0, 0, 1, 8,193,100, 80, 8,193, 98, 48, 80,114,101,118, -105,101,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, - 8,193,100, 80, 0, 0, 0,168, 0, 0, 0, 1, 8,193,101, 96, 8,193, 99, 64, 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, 68, 65, 84, 65, 95, 80, 84, 95,108, 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, 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,107,254,240, 0,149, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,101, 96, 0, 0, 0,168, - 0, 0, 0, 1, 8,193,102,112, 8,193,100, 80, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,102,112, 0, 0, 0,168, 0, 0, 0, 1, 8,193,103,128, - 8,193,101, 96, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,228, 8,193,103,128, 0, 0, 0,168, 0, 0, 0, 1, 8,193,104,144, 8,193,102,112, 77, 97,112, 32, - 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 72, - 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,102,112, 68, 65, 84, 65, 0, 0, 0,228, - 8,193,104,144, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 0, 8,193,103,128, 84,114, 97,110,115,102,111,114,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, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 62, 0,204, 0, 0, 0, 0, - 0,162, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,105,160, 0, 0, 0,151, - 0, 0, 0, 1, 3,160,150, 32, 0, 0, 0, 0, 0, 0, 0, 6, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,189,204, 0, 0, 63,140,192, 0, -191,117,128, 0, 63,250,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 51, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 68, 65, 84, 65, 0, 0, 3, 28, 3,160,150, 32, 0, 0, 0,142, 0, 0, 0, 1, - 8,193,106,208, 8,193,105,160, 0, 0, 0, 1, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 64, 75, 54, 62,191,102,119,191, 11, 73, 11, 0, 0, 0, 0,191, 40,254,108, 62,217,202, 94,191, 30,124,246, - 0, 0, 0, 0,180,186, 33,218, 63, 82,254,184, 63, 16,248,193, 0, 0, 0, 0, 62, 8,228, 73,192, 33,158, 72,193,210,148,125, - 63,128, 0, 0, 63, 64, 75, 68,191, 40,254,161, 54, 58,221,101, 0, 0, 0, 0, 62,191,103, 10, 62,217,202,178, 63, 82,255, 4, - 0, 0, 0, 0,191, 11, 73, 20,191, 30,125, 78, 63, 16,248,219, 0, 0, 0, 0,193, 87,166, 3,193,114, 36, 19, 65,135,230,213, - 63,128, 0, 0, 63,178,226,132, 62,209, 88, 18, 63, 11, 74,121, 63, 11, 73, 11,191,157, 53,169, 62,238, 53, 87, 63, 30,126,150, - 63, 30,124,246,181, 45, 39, 38, 63,102,198,153,191, 16,250, 62,191, 16,248,193, 62,126,177, 46,192, 48,197, 31, 65,210,109,176, - 65,210,148,125, 62,206,202,119,190,181,145,194,185, 84, 1, 62,183, 73, 79,188, 62,174,236, 32, 62,199, 10,100, 63, 64,245, 33, - 55, 52,160, 0, 68, 40, 79, 84, 68, 60,252,158,196, 84, 35, 68,194, 71,205,165,196, 40, 46, 68,196, 60,214,248, 68, 84, 1, 62, - 66, 71,207,188, 63,238, 38, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,163,215,225, - 0, 0, 0, 0, 63, 64, 75, 54, 62,191,102,119,191, 11, 73, 11, 0, 0, 0, 0,191, 40,254,108, 62,217,202, 94,191, 30,124,246, - 0, 0, 0, 0,180,186, 33,218, 63, 82,254,184, 63, 16,248,193, 0, 0, 0, 0, 62, 8,228, 73,192, 33,158, 72,193,210,148,125, - 63,128, 0, 0, 63, 83,252, 84,190,223, 25,104, 62, 40, 52,115, 62,159,211,119, 65,198,183, 96, 65,198,183, 96, 0, 0, 0, 0, - 0, 1, 0, 0, 3,160,170, 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, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,251, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 58,213,207,174, 60, 35,215, 10, 67,250, 0, 0,188,218, 18,228,188, 23,180, 37,189, 22,146,163,190,122, 51,174,192, 58,244, 29, - 54,224, 0, 0, 63, 88,146, 56, 64, 71, 37,198, 0, 20, 0, 0, 0, 7, 0,115, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,255,255, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 24, 24, 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, 68, 65, 84, 65, - 0, 0, 0,220, 8,193,106,208, 0, 0, 0,147, 0, 0, 0, 1, 8,193,107,224, 3,160,150, 32, 0, 0, 0, 4, 0, 0, 0, 0, - 8,193, 90,208, 0, 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, 4, - 0, 0, 0, 0, 68,160, 0, 0,196, 46, 0, 0, 67,100, 0, 0, 55,136,197,197, 68, 78,209,118,195,231,222, 40, 67, 25,158,172, + 56, 1, 0, 0, 96,109,178, 3,181, 0, 0, 0, 1, 0, 0, 0,200,110,178, 3,248,107,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,100,111,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, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 66, 40, 0, 0, 69, 0, 0, 0, 67,225, 0, 0, - 63, 0, 0, 0, 63,154,225, 72, 0, 0, 0, 1, 0, 1, 0, 1, 3,233, 2,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 1,150, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 88, 8,193,107,224, 0, 0, 0,146, 0, 0, 0, 1, - 8,193,109, 96, 8,193,106,208, 0, 0, 0, 2, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, 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,122, 0, 0,189,204,204,205, 63,140,204,205, 63,128, 0, 0, - 67,122, 0, 0,192,160, 0, 0, 64,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 16, - 0, 0, 3,168, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, 0, 0, 2,235, 60, 35,215, 10, - 60, 35,215, 10, 70,106, 96, 0, 68,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,100,111,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, 3,161, 14, 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, + 83,104, 97,100,111,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, 0, 47,254,240, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, 68, 65, 84, 65, 0, 0, 0,128, - 8,193,109, 96, 0, 0, 0,153, 0, 0, 0, 1, 8,193,110, 16, 8,193,107,224, 0, 0, 0, 9, 63, 51, 51, 51, 8,193, 90,208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,195,192, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61,204,204,205, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,207, - 0, 0, 2,227, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,110, 16, 0, 0, 0,150, 0, 0, 0, 1, - 8,193,111, 64, 8,193,109, 96, 0, 0, 0, 3, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,190, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0, 0, 0, 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,142, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,200,110,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 48,112,178, 3, + 96,109,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,112,111,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, 68, 65, 84, 65, 95, 80, 84, 95,115,112,111,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, 68, 65, 84, 65, 0, 0, 0,176, 8,193,111, 64, 0, 0, 0,235, 0, 0, 0, 1, 8,193,112, 32, - 8,193,110, 16, 0, 0, 0, 11, 63, 51, 51, 51, 8,193, 90,208,192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0, 67,127, 0, 0, -192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, 67,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, 1,124, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16, 0, 0, 1,124, - 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, 67,129,128, 0, 61,204,204,205, 65, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,112,111,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, 68, 65, 84, 65, 0, 0, 0,180, 8,193,112, 32, 0, 0, 0,152, 0, 0, 0, 1, - 8,193,113, 0, 8,193,111, 64, 0, 0, 0, 13, 63, 51, 51, 51, 8,193, 90,208, 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,128, 0, 0, 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0,192,160, 0, 0, - 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0,196, - 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, - 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, 61,204,204,205, 66, 72, 0, 0, 0, 10, 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, 68, 65, 84, 65, 0, 0, 0,192, 8,193,113, 0, - 0, 0, 0,245, 0, 0, 0, 1, 8,193,113,240, 8,193,112, 32, 0, 0, 0, 12, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, - 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0,128, - 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, 60, 35,215, 10, 66, 72, 0, 0, 0, 10, 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, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,200, 8,193,113,240, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0, 0, - 8,193,113, 0, 0, 0, 0, 5, 63, 51, 51, 51, 8,193, 90,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86, 83, 97,118,101, 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0,114, 47,114,101,108,101, 97,115,101, 47,100, 97, -116, 97,102,105,108,101,115, 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,112,114,101,118,105,101,119, 46, 98,108,101,110,100, 0, 0, 0, - 98,108,101,110,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, 8, 0, 46, 0, 0, 0, 0, 1, 85, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, 8,193,115,224, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 0, 8,193, 90,208, - 2, 78, 9, 80, 8,192,223, 80, 8,192,224,144, 8,192,224, 80, 0, 0, 0, 0, 63, 24, 70,104, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62,200,150, 82, 0, 0, 0, 0, 0, 0, 0, 0,188,182, 67, 15,187,253,148,153,191,132, 86,200, -191,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,192, 2, 43,100,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0, 0, - 0, 0, 3, 5, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0, 27, - 0, 0, 3, 5, 0, 11, 0, 10, 0, 1, 1, 1, 1,236, 2,235, 1, 0, 1, 0, 2, 86, 0, 88, 0, 7, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160,154, 32, 8,193,140, 16, 8,192, 68, 32, 8,192, 68, 32, 8,193,116,224, - 8,193,130,176, 68, 65, 84, 65, 0, 0, 0,228, 8,193,116,224, 0, 0, 0,168, 0, 0, 0, 1, 8,193,117,240, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,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, - 73,112,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0,167, 1, 62, 0,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193,117,240, 0, 0, 0,168, 0, 0, 0, 1, 8,193,119, 0, 8,193,116,224, 79,117,116,112,117,116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199,253, 62, 1, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 48,112,178, 3, +181, 0, 0, 0, 1, 0, 0, 0,152,113,178, 3,200,110,178, 3, 48,234,160, 3, 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,116, 1, 61, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,119, 0, - 0, 0, 0,168, 0, 0, 0, 1, 8,193,120, 16, 8,193,117,240, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0,152,113,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 0,115,178, 3, 48,112,178, 3,184,216,160, 3, + 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, 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, 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,189,254,116, 1,178, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,120, 16, 0, 0, 0,168, 0, 0, 0, 1, - 8,193,121, 32, 8,193,119, 0, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0, 0,115,178, 3,181, 0, 0, 0, 1, 0, 0, 0, +104,116,178, 3,152,113,178, 3, 96,218,160, 3, 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,107,254,116, 1, 58, 0, 24, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,178, 3,181, 0, 0, 0, 1, 0, 0, 0,208,117,178, 3, 0,115,178, 3, 8,220,160, 3, 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, 83,254, +116, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 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, 2,128, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,121, 32, 0, 0, 0,168, 0, 0, 0, 1, 8,193,122, 48, 8,193,120, 16, - 70,111,114,109, 97,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, - 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, 68, 65, 84, 65, 56, 1, 0, 0,208,117,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 56,119,178, 3,104,116,178, 3, +104,188,159, 3, 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, - 3,192, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193,122, 48, 0, 0, 0,168, 0, 0, 0, 1, 8,193,123, 64, 8,193,121, 32, 76,105,110,107, 32, 97,110,100, - 32, 77, 97,116,101,114,105, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,123, 64, - 0, 0, 0,168, 0, 0, 0, 1, 8,193,124, 80, 8,193,122, 48, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,124, 80, 0, 0, 0,168, 0, 0, 0, 1, - 8,193,125, 96, 8,193,123, 64, 80,114,101,118,105,101,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,125, 96, 0, 0, 0,168, 0, 0, 0, 1, 8,193,126,112, 8,193,124, 80, - 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, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193,126,112, 0, 0, 0,168, 0, 0, 0, 1, 8,193,127,128, 8,193,125, 96, 83,104, 97,100,111,119, 32, 97, -110,100, 32, 83,112,111,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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,127,128, - 0, 0, 0,168, 0, 0, 0, 1, 8,193,128,144, 8,193,126,112, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 8,193,128,144, 0, 0, 0,168, 0, 0, 0, 1, - 8,193,129,160, 8,193,127,128, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193,127,128, 68, 65, 84, 65, 0, 0, 0,228, 8,193,129,160, 0, 0, 0,168, 0, 0, 0, 1, 8,193,130,176, 8,193,128,144, - 84,114, 97,110,115,102,111,114,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, - 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,228, 1, 62, 0,204, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,228, 8,193,130,176, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 0, 8,193,129,160, 80,114,101,118,105,101,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, 86,105,101,119, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1,116, 1,152, 1, 76, - 0, 4, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 28, 3,160,154, 32, - 0, 0, 0,142, 0, 0, 0, 1, 8,193,131,192, 0, 0, 0, 0, 0, 0, 0, 1, 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51,160, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 51,162, 33,104, 0, 0, 0, 0, 60, 41,199, 78, -191,230,129,210,193, 30,230,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 0, 1, 51,160, 0, 0, 0, 0, 0, 0,188, 41,199, 79, -193, 30,230,226, 63,230,129,216, 63,128, 0, 0, 63, 24, 70,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,182, 67, 15, - 59,253,148,216, 63,132, 86,200, 63,128, 0, 0,176,230,220,112, 62,200,150, 82,179,167,160, 95,179,162, 33,104, 62,104,147, 88, -191, 32,239,249, 65, 3,190,250, 65, 30,230,225, 63,215, 48,137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 46,200, 82, -182,129,140,216, 64, 35, 92, 69, 52,132, 68, 58, 59,166,242,192, 64,156, 64,224,191, 98,170, 80,190,251,187,175,189, 46,200, 82, -192,129,140,216, 63,101, 74,199, 63, 2, 34, 29, 63, 24, 70,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,200,150, 82, 0, 0, 0, 0, 0, 0, 0, 0,188,182, 67, 15,187,253,148,153,191,132, 86,200,191,128, 0, 0,128, 0, 0, 0, -128, 0, 0, 0,192, 2, 43,100,128, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51,160, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 51,162, 33,104, 0, 0, 0, 0, 60, 41,199, 78, -191,230,129,210,193, 30,230,225, 63,128, 0, 0, 63, 53, 4,244,191, 53, 4,243, 0, 0, 0, 0, 0, 0, 0, 0, 66,160,240, 16, - 63,128, 0, 0, 0, 0, 13,255, 0, 2, 0, 0, 3,160,170, 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, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,231, 0, 0, 66, 12, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 59,223,239,235, 60, 35,215, 10, 67,250, 0, 0,188,218, 18,228,188, 23,180, 37,193, 36,172, 83, -192, 56,152, 79,192,204,230, 29,188, 41,199, 96,193, 30,230,225, 63,230,129,216, 0, 20, 0, 0, 0, 7, 0,207, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0,255,255, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,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, 24, 8, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 48,137,193,191, 13, 88,168, 62, 2,185, 28, 62,230,218,212, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,220, 8,193,131,192, 0, 0, 0,147, 0, 0, 0, 1, 8,193,132,208, 3,160,154, 32, - 0, 0, 0, 4, 0, 0, 0, 0, 8,193,115,224, 0, 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, 4, 0, 0, 0, 0, 68,160, 0, 0,196, 46, 0, 0, 67,100, 0, 0, 55,136,197,197, 68, 78,209,118, -195,231,222, 40, 67, 25,158,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,128, 0, 0, 66, 40, 0, 0, - 69, 0, 0, 0, 67,225, 0, 0, 63, 0, 0, 0, 63,154,225, 72, 0, 0, 0, 1, 0, 1, 0, 1, 3,233, 2,235, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0,255,255, 0, 0, - 0, 0, 0, 0, 1,150, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 88, 8,193,132,208, - 0, 0, 0,146, 0, 0, 0, 1, 8,193,134, 80, 8,193,131,192, 0, 0, 0, 2, 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, - 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,122, 0, 0,189,204,204,205, - 63,140,204,205, 63,128, 0, 0, 67,122, 0, 0,192,160, 0, 0, 64,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 2,235, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, - 0, 0, 2,235, 60, 35,215, 10, 60, 35,215, 10, 70,106, 96, 0, 68,122, 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, 3,161, 14, 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, 29, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, - 68, 65, 84, 65, 0, 0, 0,128, 8,193,134, 80, 0, 0, 0,153, 0, 0, 0, 1, 8,193,135, 0, 8,193,132,208, 0, 0, 0, 9, - 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,195,192, 0, 0, 0, 0, - 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, - 0, 0, 0, 17, 0, 0, 2,207, 0, 0, 2,227, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,135, 0, - 0, 0, 0,151, 0, 0, 0, 1, 8,193,136, 48, 8,193,134, 80, 0, 0, 0, 6, 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,190,120, 0, 0, - 63,159, 0, 0,190,242, 0, 0, 63,188,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, 1,124, 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 63,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, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,136, 48, 0, 0, 0,150, - 0, 0, 0, 1, 8,193,137, 96, 8,193,135, 0, 0, 0, 0, 3, 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, -195,190, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0, - 0, 0, 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,142, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,176, 8,193,137, 96, 0, 0, 0,235, 0, 0, 0, 1, - 8,193,138, 64, 8,193,136, 48, 0, 0, 0, 11, 63, 51, 51, 51, 8,193,115,224,192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0, - 67,127, 0, 0,192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, 67,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, 1,124, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16, - 0, 0, 1,124, 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, 67,129,128, 0, 61,204,204,205, 65, 32, 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, 68, 65, 84, 65, 0, 0, 0,180, 8,193,138, 64, 0, 0, 0,152, - 0, 0, 0, 1, 8,193,139, 32, 8,193,137, 96, 0, 0, 0, 13, 63, 51, 51, 51, 8,193,115,224, 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,128, 0, 0, 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, -192,160, 0, 0, 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124, - 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124, - 0, 0, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, 61,204,204,205, 66, 72, 0, 0, 0, 10, 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, 68, 65, 84, 65, 0, 0, 0,192, - 8,193,139, 32, 0, 0, 0,245, 0, 0, 0, 1, 8,193,140, 16, 8,193,138, 64, 0, 0, 0, 12, 63, 51, 51, 51, 8,193,115,224, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14, - 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, 60, 35,215, 10, 66, 72, 0, 0, 0, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,200, 8,193,140, 16, 0, 0, 0,149, 0, 0, 0, 1, - 0, 0, 0, 0, 8,193,139, 32, 0, 0, 0, 5, 63, 51, 51, 51, 8,193,115,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 83, 97,118,101, 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0,114, 47,114,101,108,101, 97,115, -101, 47,100, 97,116, 97,102,105,108,101,115, 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,112,114,101,118,105,101,119, 46, 98,108,101,110, -100, 0, 0, 0, 98,108,101,110,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, 8, 0, 46, 0, 0, 0, 0, 1, 85, 0, 1, 0, 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, 0, 0, 0, 0, 0, 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, 0, 0, 5,124, 3,160,158, 32, 0, 0, 0,140, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67,112,114,101,118,105,101,119, 0, 0, 99,101,110,101, 46, 48, 48, 49, 0, - 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160,170, 32, 8,193,193,208, 0, 0, 0, 0, 0, 0, 0, 0, - 8,193,142, 0, 8,193,155, 32, 8,193,152,160, 64, 88,103,200, 62,117,122, 54,193, 50,105,189, 66, 7,191,212,191,103,203,252, - 63,217, 88, 65, 65,193,235,187,191,103,204, 1,192, 73,182, 96, 66, 46,137,203,191,103,203,247, 64,209,135, 83, 0, 0, 0, 2, - 62,214,245, 65, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,155,112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,155,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,128, 1,224, 0, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 25, - 0,141, 2, 88, 2, 88, 0, 4, 0, 4, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 32, 0, 0, 0, 0, 0, 64, 0, 0, 0, 5, 0, 25, 0, 10, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,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, - 8,193,158,112, 8,193,158,112, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 63,128, 0, 0, 63,128, 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, 2, 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, 47, 47, 98, 97, 99,107, 98,117,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 0, 0, 0, 6, 0, 0, 0, 16, 63,128, 0, 0, 63,128, 0, 0, - 2,173, 0, 95, 63,217,153,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,172, 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, 10, 0, 0, 0, 0, 0, 3, 2, 70, 45, 16, - 0, 1, 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, 8,193,156,208, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,142, 0, 0, 0, 0,123, 0, 0, 0, 1, 8,193,142, 80, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, - 1,183, 0,208, 3,161, 2, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,142, 80, 0, 0, 0,123, 0, 0, 0, 1, 8,193,142,160, - 8,193,142, 0, 0, 0, 0, 33, 0, 0, 0, 2, 0, 0, 0, 0, 1,183, 0,208, 3,160,254, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,142,160, 0, 0, 0,123, 0, 0, 0, 1, 8,193,142,240, 8,193,142, 80, 0, 0, 0, 33, 0, 0, 0, 3, 0, 0, 0, 0, - 46,224, 1, 43, 3,160,250, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,142,240, 0, 0, 0,123, 0, 0, 0, 1, 8,193,143, 64, - 8,193,142,160, 0, 0, 0, 33, 0, 0, 0, 4, 0, 0, 0, 0, 46,224, 1, 43, 3,160,246, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,143, 64, 0, 0, 0,123, 0, 0, 0, 1, 8,193,143,144, 8,193,142,240, 0, 0, 0, 33, 0, 0, 0, 5, 0, 0, 0, 0, - 46,224, 2, 66, 3,160,242, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,143,144, 0, 0, 0,123, 0, 0, 0, 1, 8,193,143,224, - 8,193,143, 64, 0, 0, 0, 33, 0, 0, 0, 6, 0, 0, 0, 0, 46,224, 2, 66, 3,160,238, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,143,224, 0, 0, 0,123, 0, 0, 0, 1, 8,193,144, 48, 8,193,143,144, 0, 0, 0, 33, 0, 0, 0, 7, 0, 0, 0, 0, - 1,153, 1, 33, 3,160,234, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,144, 48, 0, 0, 0,123, 0, 0, 0, 1, 8,193,144,128, - 8,193,143,224, 0, 0, 0, 33, 0, 0, 0, 8, 0, 0, 0, 0, 1,153, 1, 33, 3,160,230, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,144,128, 0, 0, 0,123, 0, 0, 0, 1, 8,193,144,208, 8,193,144, 48, 0, 0, 0, 33, 0, 0, 0, 9, 0, 0, 0, 0, - 1, 36, 1, 92, 3,160,226, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,144,208, 0, 0, 0,123, 0, 0, 0, 1, 8,193,145, 32, - 8,193,144,128, 0, 0, 0, 33, 0, 0, 0, 10, 0, 0, 0, 0, 1, 36, 1, 92, 3,160,222, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,145, 32, 0, 0, 0,123, 0, 0, 0, 1, 8,193,145,112, 8,193,144,208, 0, 0, 0, 33, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 57, 1,210, 3,160,218, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,145,112, 0, 0, 0,123, 0, 0, 0, 1, 8,193,145,192, - 8,193,145, 32, 0, 0, 0, 33, 0, 0, 0, 12, 0, 0, 0, 0, 0, 57, 1,210, 3,160,214, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,145,192, 0, 0, 0,123, 0, 0, 0, 1, 8,193,146, 16, 8,193,145,112, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 0, - 1, 9, 2,117, 3,160,210, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,146, 16, 0, 0, 0,123, 0, 0, 0, 1, 8,193,146, 96, - 8,193,145,192, 0, 0, 4, 14, 0, 0, 0, 2, 0, 0, 0, 0, 1, 9, 2,117, 3,160,206, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,146, 96, 0, 0, 0,123, 0, 0, 0, 1, 8,193,146,176, 8,193,146, 16, 0, 0, 4, 14, 0, 0, 0, 3, 0, 0, 0, 0, - 1,100, 1,198, 3,160,202, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,146,176, 0, 0, 0,123, 0, 0, 0, 1, 8,193,147, 0, - 8,193,146, 96, 0, 0, 4, 14, 0, 0, 0, 4, 0, 0, 0, 0, 1,100, 1,198, 3,160,198, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,147, 0, 0, 0, 0,123, 0, 0, 0, 1, 8,193,147, 80, 8,193,146,176, 0, 0, 4, 14, 0, 0, 0, 5, 0, 0, 0, 0, - 0,154, 1,198, 3,160,194, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,147, 80, 0, 0, 0,123, 0, 0, 0, 1, 8,193,147,160, - 8,193,147, 0, 0, 0, 4, 14, 0, 0, 0, 6, 0, 0, 0, 0, 0,154, 1,198, 3,160,190, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,147,160, 0, 0, 0,123, 0, 0, 0, 1, 8,193,147,240, 8,193,147, 80, 0, 0, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 1, 15, 1, 76, 3,160,170, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,147,240, 0, 0, 0,123, 0, 0, 0, 1, 8,193,148, 64, - 8,193,147,160, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,188, 1, 90, 3,161, 78, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,148, 64, 0, 0, 0,123, 0, 0, 0, 1, 8,193,148,144, 8,193,147,240, 0, 0, 0, 33, 0, 0, 0, 13, 0, 0, 0, 0, - 0,174, 1,151, 3,160,186, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,148,144, 0, 0, 0,123, 0, 0, 0, 1, 8,193,148,224, - 8,193,148, 64, 0, 0, 4, 14, 0, 0, 0, 7, 0, 0, 0, 0, 0,254, 1,166, 3,160,182, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,148,224, 0, 0, 0,123, 0, 0, 0, 1, 8,193,149, 48, 8,193,148,144, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0,217, 0,233, 3,161, 74, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,149, 48, 0, 0, 0,123, 0, 0, 0, 1, 8,193,149,128, - 8,193,148,224, 0, 0, 0, 32, 0, 0, 0, 14, 0, 0, 16, 0, 0,116, 1, 27, 3,161, 38, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,149,128, 0, 0, 0,123, 0, 0, 0, 1, 8,193,149,208, 8,193,149, 48, 0, 0, 0, 33, 0, 0, 0, 15, 0, 0, 0, 0, - 0,174, 1,151, 3,161, 42, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,149,208, 0, 0, 0,123, 0, 0, 0, 1, 8,193,150, 32, - 8,193,149,128, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 20, 0, 46,224, 1, 67, 3,161, 34, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,150, 32, 0, 0, 0,123, 0, 0, 0, 1, 8,193,150,112, 8,193,149,208, 0, 0, 0, 2, 0, 0, 0, 9, 0, 0, 20, 0, - 46,224, 1, 96, 3,161, 30, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,150,112, 0, 0, 0,123, 0, 0, 0, 1, 8,193,150,192, - 8,193,150, 32, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 20, 0, 1,181, 1, 43, 3,161, 26, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,150,192, 0, 0, 0,123, 0, 0, 0, 1, 8,193,151, 16, 8,193,150,112, 0, 0, 0, 1, 0, 0, 0, 15, 0, 0, 20, 0, - 0, 12, 0,160, 3,161, 22, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,151, 16, 0, 0, 0,123, 0, 0, 0, 1, 8,193,151, 96, - 8,193,150,192, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 20, 0, 0,175, 0,161, 3,161, 18, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,151, 96, 0, 0, 0,123, 0, 0, 0, 1, 8,193,151,176, 8,193,151, 16, 0, 0, 0, 4, 0, 0, 0, 11, 0, 0, 0, 0, - 0,123, 1, 57, 3,161, 70, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,151,176, 0, 0, 0,123, 0, 0, 0, 1, 8,193,152, 0, - 8,193,151, 96, 0, 0, 4, 14, 0, 0, 0, 11, 0, 0, 0, 0, 0,254, 1,166, 3,160,178, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,152, 0, 0, 0, 0,123, 0, 0, 0, 1, 8,193,152, 80, 8,193,151,176, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 16, 0, - 0,238, 1,122, 3,161, 62, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,152, 80, 0, 0, 0,123, 0, 0, 0, 1, 8,193,152,160, - 8,193,152, 0, 0, 0, 0, 64, 0, 0, 0, 2, 0, 0, 0, 0, 0,237, 1,119, 3,161, 66, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,152,160, 0, 0, 0,123, 0, 0, 0, 1, 8,193,152,240, 8,193,152, 80, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 1, - 0,152, 1,114, 3,161, 82, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,152,240, 0, 0, 0,123, 0, 0, 0, 1, 8,193,153, 64, - 8,193,152,160, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0,123, 1, 65, 3,161, 58, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,153, 64, 0, 0, 0,123, 0, 0, 0, 1, 8,193,153,144, 8,193,152,240, 0, 0, 0, 1, 0, 0, 0, 17, 0, 0, 0, 0, - 0,123, 1, 26, 3,161, 46, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,153,144, 0, 0, 0,123, 0, 0, 0, 1, 8,193,153,224, - 8,193,153, 64, 0, 0, 4, 28, 0, 0, 0, 4, 0, 0, 20, 0, 1, 45, 1,117, 3,161, 6, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,153,224, 0, 0, 0,123, 0, 0, 0, 1, 8,193,154, 48, 8,193,153,144, 0, 0, 0, 2, 0, 0, 0, 12, 0, 0, 0, 0, - 0,251, 1,119, 3,161, 54, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,154, 48, 0, 0, 0,123, 0, 0, 0, 1, 8,193,154,128, - 8,193,153,224, 0, 0, 4, 28, 0, 0, 0, 5, 0, 0, 20, 0, 0,197, 1,129, 3,161, 14, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,154,128, 0, 0, 0,123, 0, 0, 0, 1, 8,193,154,208, 8,193,154, 48, 0, 0, 0, 8, 0, 0, 0, 21, 0, 0, 0, 0, - 0,100, 1, 54, 3,161, 50, 32, 68, 65, 84, 65, 0, 0, 0, 28, 8,193,154,208, 0, 0, 0,123, 0, 0, 0, 1, 8,193,155, 32, - 8,193,154,128, 0, 0, 4, 28, 0, 0, 0, 6, 0, 0, 20, 0, 1, 65, 1, 29, 3,161, 10, 32, 68, 65, 84, 65, 0, 0, 0, 28, - 8,193,155, 32, 0, 0, 0,123, 0, 0, 0, 1, 0, 0, 0, 0, 8,193,154,208, 0, 0, 13,223, 0, 0, 0, 18, 0, 0, 4, 0, - 46,224, 1, 76, 3,160,174, 32, 68, 65, 84, 65, 0, 0, 0, 40, 8,193,155,112, 0, 0, 0,122, 0, 0, 0, 1, 1, 44, 0, 0, - 0, 1, 0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 1,244, 0,200, 0,100, 0, 20, 0, 0, 39, 16, 61,204,204,205, 65,240, 0, 0, - 64, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,232, 8,193,155,192, 0, 0, 0,137, 0, 0, 0, 1, 0, 1, 0, 1, 63, 76,204,205, - 66,180, 0, 0, 0, 9, 0, 1, 63,128, 0, 0, 58,131, 18,111, 0, 32, 0, 32, 0, 32, 0, 1, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 7, 0, 5, - 0, 5,255,255, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, - 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0, 56,209,183, 23, 61,204,204,205, 0, 0, 0, 0, 0, 0, 0,250, 61,204,204,205, 61,204,204,205, 63,166,102,102, - 63,192, 0, 0, 65,240, 0, 0, 63,122,225, 72, 61,204,204,205, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 2, 67, 0, 3, - 2, 0, 1, 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, - 68, 65, 84, 65, 0, 0, 1, 8, 8,193,156,208, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 6, 0, 0, - 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191,127, 10, 78, 61,177, 44, 36,191,127, 10, 78, 61,177, 43,213, 8,193,158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 72, 8,193,158, 0, 0, 0, 1, 37, 0, 0, 0, 6, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 61,204,204,205, - 63,121,188, 86, 0, 0, 0, 0, 62,153,153,154, 63, 75, 60, 96, 0, 0, 0, 0, 63, 51, 51, 51, 62, 83, 14,128, 0, 0, 0, 0, - 63,102,102,102, 60,200,117, 79, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 72, - 8,193,158,112, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,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, 8,193,196,160, 0, 15,255,255, - 0, 0, 0, 0, 0, 0,127,255, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 73, 77, 0, 0, 1,128, 8,193,158,224, - 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 73,109, 97,103,101, 46, - 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 53, 0, 0, 0, 0, 85,110,116,105, -116,108,101,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, 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, 68,134,110,108, 0, 0, 1, 0, 1, 0, 0, 1, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0, 0,132, 8,193,160,144, 0, 0, 0, 30, 0, 0, 0, 1, 8,193,161, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 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, 9, 62, 76,204,205, 66, 96,148,117, 63,128, 0, 0, - 66,112, 0, 0, 65,240, 0, 0, 64,192, 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, 0, 0, 0, 0, 0, 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, 0, 0, 0,132, 8,193,161, 64, 0, 0, 0, 30, 0, 0, 0, 1, 0, 0, 0, 0, 8,193,160,144, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 65,116,109,111, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 62, 76,204,205, 66, 68,137,145, 63,128, 0, 0, 66,112, 69,210, 66, 12, 0, 0, - 64,234, 14,161, 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, 76, 65, 0, 0, 1,128, - 8,193,161,240, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,165, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97, -109,112, 46, 48, 48, 49, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 65,160, 0, 0, 66, 52, 0, 0, 62, 25,153,154, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 8,193,163,160, 0, 1, 0, 0, 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, 63,128, 0, 0, - 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 65, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,165, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,163,160, 0, 0, 1, 39, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242, -191, 53, 4,242, 63, 53, 4,243, 8,193,164,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,164,208, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 8,193,165, 16, - 0, 0, 0, 19, 0, 0, 0, 1, 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, 76, 65, 0, 0, 1,128, 8,193,165, 96, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,168,208, - 8,193,161,240, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 46, 48, 48, 50, 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, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 65,160, 0, 0, 66,143,152,182, 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 8,193,167, 16, 0, 1, 0, 0, - 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, - 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,193,168,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 8, 8,193,167, 16, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,168, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,193,168, 64, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 8,193,168,128, 0, 0, 0, 19, 0, 0, 0, 1, 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, 76, 65, 0, 0, 1,128, - 8,193,168,208, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,171,240, 8,193,165, 96, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112, -111,116, 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, 16, 8, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 12,204,205, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 8,193,170,128, 0, 4, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, - 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,170,128, 0, 0, 1, 39, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242, -191, 53, 4,242, 63, 53, 4,243, 8,193,171,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,171,176, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,128, 8,193,171,240, - 0, 0, 0, 40, 0, 0, 0, 1, 8,193,175, 16, 8,193,168,208, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, - 48, 49, 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, 16, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,102,102,102, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 8,193,173,160, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, - 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,173,160, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, - 63, 53, 4,243, 8,193,174,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,174,208, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,128, 8,193,175, 16, 0, 0, 0, 40, - 0, 0, 0, 1, 8,193,178, 48, 8,193,171,240, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 51, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 63, 27,182,200, 63,128, 0, 0, - 8,193,176,192, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, - 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,176,192, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, - 8,193,177,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 8,193,177,240, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,128, 8,193,178, 48, 0, 0, 0, 40, 0, 0, 0, 1, - 8,193,181, 80, 8,193,175, 16, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 52, 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, 16, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,204,204,205, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 63, 27,182,200, 63,128, 0, 0, 8,193,179,224, - 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, - 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 8, 8,193,179,224, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, - 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,181, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 8,193,181, 16, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,128, 8,193,181, 80, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,184,112, - 8,193,178, 48, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 53, 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, 16, 8, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 83, 78, 80, - 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 8,193,183, 0, 0, 4, 0, 0, - 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, - 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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,213,253,116, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 56,119,178, 3,181, 0, 0, 0, + 1, 0, 0, 0,160,120,178, 3,208,117,178, 3, 16,190,159, 3, 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,189,253,116, 1, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 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, 68, 65, 84, 65, - 0, 0, 1, 8, 8,193,183, 0, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,184, 48, 0, 0, 0, 0, + 56, 1, 0, 0,160,120,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 8,122,178, 3, 56,119,178, 3,184,191,159, 3, 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,165,253,116, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,193,184, 48, 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,128, 8,193,184,112, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,187,144, 8,193,181, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 54, 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, 2, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,179, 51, 51, 65,239,255,247, - 66, 72, 0, 0, 63, 8,156,171, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 8,193,186, 32, 0, 4, 0, 0, 65, 68,207, 78, - 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 68, 65, 84, 65, 56, 1, 0, 0, 8,122,178, 3,181, 0, 0, 0, 1, 0, 0, 0,112,123,178, 3, +160,120,178, 3, 24,174,159, 3, 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, 68, 65, 84, 65, 0, 0, 1, 8, - 8,193,186, 32, 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,187, 80, 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, 33,253,116, 1,108, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 56, 1, 0, 0,112,123,178, 3, +181, 0, 0, 0, 1, 0, 0, 0,216,124,178, 3, 8,122,178, 3,104,177,159, 3, 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, 9,253,116, 1, 0, 0, + 24, 0, 0, 0, 4, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,187, 80, - 0, 0, 1, 37, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 76, 65, 0, 0, 1,128, 8,193,187,144, 0, 0, 0, 40, 0, 0, 0, 1, 8,193,190,176, 8,193,184,112, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 55, 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, 16, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 65,239,255,247, 66,150, 0, 0, - 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 8,193,189, 64, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, - 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, + 68, 65, 84, 65, 56, 1, 0, 0,216,124,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 64,126,178, 3,112,123,178, 3, 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, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,189, 64, - 0, 0, 1, 39, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, -191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,190,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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,184,255,240, 0, 36, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,190,112, 0, 0, 1, 37, - 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, - 0, 0, 1,128, 8,193,190,176, 0, 0, 0, 40, 0, 0, 0, 1, 0, 0, 0, 0, 8,193,187,144, 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, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,192, 0, 0, 65,160, 0, 0, 66, 52, 0, 0, 62, 25,153,154, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 8,193,192, 96, 0, 1, 0, 0, 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, - 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 68, 65, 84, 65, 56, 1, 0, 0, 64,126,178, 3,181, 0, 0, 0, 1, 0, 0, 0, +168,127,178, 3,216,124,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 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, 68, 65, 84, 65, 95, 80, 84, 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, 77,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, 68, 65, 84, 65, 0, 0, 1, 8, 8,193,192, 96, 0, 0, 1, 39, - 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, - 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 8,193,193,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255,240, 0, 94, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,193,144, 0, 0, 1, 37, 0, 0, 0, 2, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0, 1,108, - 8,193,193,208, 0, 0, 0,121, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 79, 47,141, 62,209, 19, 64, 63, 14, 23, 73, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 28,204,205, 0, 0, 0, 0, 0, 1, 0, 32, 0,128, 0, 5, - 0, 60, 0, 5, 0, 1, 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, 64, 0, 0, 0, 0, 0, 0, 0, 65,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 32, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61, 76,204,205, 0, 0, 0, 5, 0, 0, 0, 0, 59,163,215, 10, 0, 0, 0, 0, - 62,128, 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, 8,193,195,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, - 8,193,195,112, 0, 0, 0, 19, 0, 0, 0, 1, 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, 84, 88, 0, 0, 0,120, 8,193,195,192, 0, 0, 0, 28, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, - 8,193,196, 96, 8,193,196, 96, 8,193,196, 96, 8,193,196, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3,160,164, 32,255,255,255,255, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,193,196, 96, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 77,244, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 82, 69, 69, 68, 65, 84, 65, 0, 0, 0, 4, 2, 77,244, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 71, 82, - 0, 0, 0, 76, 8,193,196,160, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71, 82, 79,118,101,114,114,105,100,101, 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, 8,193,197, 32, 8,193,199, 96, 0, 15,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 8,193,197, 32, 0, 0, 0,236, 0, 0, 0, 1, 8,193,197, 96, 0, 0, 0, 0, 3,161, 38, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,197, 96, 0, 0, 0,236, 0, 0, 0, 1, 8,193,197,160, - 8,193,197, 32, 3,161, 34, 32, 3,163,234, 32, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,197,160, - 0, 0, 0,236, 0, 0, 0, 1, 8,193,197,224, 8,193,197, 96, 3,161, 30, 32, 3,163,238, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 24, 8,193,197,224, 0, 0, 0,236, 0, 0, 0, 1, 8,193,198, 32, 8,193,197,160, 3,161, 26, 32, - 3,163,242, 32, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,198, 32, 0, 0, 0,236, 0, 0, 0, 1, - 8,193,198, 96, 8,193,197,224, 3,161, 22, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, - 8,193,198, 96, 0, 0, 0,236, 0, 0, 0, 1, 8,193,198,160, 8,193,198, 32, 3,161, 18, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,198,160, 0, 0, 0,236, 0, 0, 0, 1, 8,193,198,224, 8,193,198, 96, - 3,161, 62, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,198,224, 0, 0, 0,236, - 0, 0, 0, 1, 8,193,199, 32, 8,193,198,160, 3,161, 6, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 24, 8,193,199, 32, 0, 0, 0,236, 0, 0, 0, 1, 8,193,199, 96, 8,193,198,224, 3,161, 14, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 8,193,199, 96, 0, 0, 0,236, 0, 0, 0, 1, 0, 0, 0, 0, - 8,193,199, 32, 3,161, 10, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,170, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,160,174, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,160,144, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,201, 15,218,128, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 48,136, 90, 64, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, -128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 63,128, 0, 0, 40, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, -176,136, 90, 64, 63,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 63,128, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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, 64, 0, 0, 0, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, - 3,160,174, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,178, 32, 3,160,170, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97, -109,101,114, 97, 65,116,109,111, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 1, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,161, 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,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,244, 47,173, 37,113,155,162, 37,170, 80, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 37,170, 80, 40,165,113,155,162, 0, 0, 0, 0, 37,170, 80, 39,190,169, 64,157, 63,113,155,163, 0, 0, 0, 0, - 37,113,155,165,191,113,155,163,190,169, 64,157, 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0,154, 30,205,143, 25, 88, 25,122, 0, 0, 0, 0, 37,171, 76,175, 63,128, 0, 1, 51,124,134,212, 0, 0, 0, 0, - 45,255,255,135, 50, 31,154, 19, 63,128, 0, 0, 0, 0, 0, 0, 48,128, 0, 0, 53,128, 0, 1, 52,128, 0, 2, 63,128, 0, 0, - 63,128, 0, 0, 37,170, 80, 39, 37,113,155,166,128, 0, 0, 0,165,113,155,162, 63,113,155,164,190,169, 64,158,128, 0, 0, 0, -165,170, 80, 40, 62,169, 64,159, 63,113,155,162,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 63,128, 0, 0, - 0, 0, 13,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 63, 16,225,187, 63,128, 0, 0, - 62,204,204,205, 63, 80, 32,210, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,160,178, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,182, 32, 3,160,174, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 49, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 77,243, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,119,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 75,234,112, 61,122, 36,113,192,186, 24,157, 64, 71, 38, 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, 63,128, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 61,122, 36,113,192,186, 24,157, 64, 71, 38, 28, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173, -128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, - 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, - 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, - 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 71,141, 96, - 2, 71,150, 0, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 75,234,112, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, - 3,160,182, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,186, 32, 3,160,178, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104, -101, 99,107,101,114,115, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 76, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,113,208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 77,237,160, 61,122, 36,113,192,186, 24,157, 64, 71, 38, 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, 63,128, 0, 0, 63,128, 0, 0, 63,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, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 61,122, 36,113,192,186, 24,157, 64, 71, 38, 28, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173,128, 0, 0, 0, -189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, 63,128, 0, 0, - 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, - 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 71,127,224, 2, 71,134,160, - 0, 0, 0, 25, 0, 0, 0, 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, - 0, 0, 0, 4, 2, 77,237,160, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,186, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,160,190, 32, 3,160,182, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101, -114,115, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,125,176, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 77,235, 16, 60,102,131, 0, 64,164,112, 14, 63,229,211, 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, 65, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178, -180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0, 60,102,131, 0, 64,164,112, 14, 63,229,211, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, -165,143,118,252, 0, 0, 0, 0, 0, 0, 0, 0,165,168,193,176, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,155, 40,193,176, 53, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, - 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235, -189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, - 0, 0, 0, 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, 0, 0, 0, 4, - 2, 77,235, 16, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,190, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,160,194, 32, 3,160,186, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, - 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 70,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,154,144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 71, 42, 32,191,207, 84, 38,192,239,225, 0, 64, 70,169, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 0, 0, 0, 63,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,191,207, 84, 38,192,239,225, 0, 64, 70,169, 15, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 51,162, 33,105, - 0, 0, 0, 0, 0, 0, 0, 0,176,136, 90, 64, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,180, 0, 0, 0,181, 0, 0, 0, 52,128, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, - 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173,128, 0, 0, 0,189,243,183,205,189,243,183,207, - 50, 87,107, 24,128, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, - 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 71,114, 96, 2, 71,121, 32, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 71, 42, 32, - 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,194, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,160,198, 32, 3,160,190, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, - 2, 70,134,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,160,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, 2, 77, 39,144, -191,207, 84, 38,192,239,225, 0, 64, 70,169, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 63,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,191,207, 84, 38,192,239,225, 0, 64, 70,169, 15, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, - 0, 0, 0, 0,176,136, 90, 64, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,180, 0, 0, 0,181, 0, 0, 0, 52,128, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160, -128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173,128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24, -128, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, - 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 74, 90,192, 2, 74, 99, 96, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 77, 39,144, 0, 0, 0, 0, - 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,198, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,202, 32, - 3,160,194, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 4, 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, 2, 76, 61,240, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,166,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, 2, 76,223,192, 63,223, 0, 93, -192,239,220,205, 64, 70,170,222, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, -191,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,223, 0, 93,192,239,220,205, 64, 70,170,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,179,162, 33,105,167, 34, 33,105, 0, 0, 0, 0, - 48,136, 90, 64, 63,128, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0,181, 0, 0, 0, 53, 0, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, - 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173,128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0, -190,247,176,158,190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, - 0, 0, 0, 0, 79, 66, 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, -201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 2, 74, 73,128, 2, 74, 82, 32, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 76,223,192, 0, 0, 0, 0, 0, 0, 0, 1, - 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,202, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,206, 32, 3,160,198, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 4, 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, 2, 70,222,240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,194,172, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 70,145,240, 63,223, 0, 93,192,239,220,205, - 64, 70,170,222, 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,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,191,201, 15,218, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 51,162, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,223, 0, 93, -192,239,220,205, 64, 70,170,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,179,162, 33,105,167, 34, 33,105, 0, 0, 0, 0, 48,136, 90, 64, - 63,128, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, -181, 0, 0, 0, 53, 0, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, - 50, 26, 90, 31, 62, 44, 85,173,128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0,190,247,176,158, -190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, - 79, 66, 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,201,150,180, 56, - 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 2, 74, 60, 0, 2, 74, 66,192, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 70,145,240, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, - 0, 0, 79, 66, 0, 0, 3, 80, 3,160,206, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,210, 32, 3,160,202, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 76, 1,240, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,178, 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, 2, 77,218, 48, 61,122,115,185,193, 18,209, 28, 64, 71, 38, 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, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,192, 73, 15,218, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191,128, 0, 0,180, 34, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 52, 34, 33,105,191,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 61,122,115,185,193, 18,209, 28, - 64, 71, 38, 27, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,167,128, 0, 0, 0, 0, 0, 0, 47, 5,164, 0, 63,128, 0, 0, -151, 5,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 49,128, 0, 0, 0, 0, 0, 0, -153,128, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, - 62, 44, 85,173,128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0,190,247,176,158,190,246,108,212, -190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, - 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, - 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, - 2, 76, 7, 0, 2, 74, 53, 64, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 2, 77,218, 48, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, - 0, 0, 3, 80, 3,160,210, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,214, 32, 3,160,206, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 76, 31, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,184, 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, 8,193,199,160, 61,122,115,185,193, 18,209, 28, 64, 71, 38, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,192, 73, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191,128, 0, 0,180, 34, 33,105, 0, 0, 0, 0, 0, 0, 0, 0, 52, 34, 33,105,191,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 61,122,115,185,193, 18,209, 28, 64, 71, 38, 27, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,167,128, 0, 0, 0, 0, 0, 0, 47, 5,164, 0, 63,128, 0, 0,151, 5,164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 49,128, 0, 0, 0, 0, 0, 0,153,128, 0, 0, - 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160,128, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173, -128, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24,128, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, - 63,128, 0, 0, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, - 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, - 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 75,226, 80, - 2, 75,250,128, 0, 0, 0, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,199,160, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, - 3,160,214, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,218, 32, 3,160,210, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104, -101, 99,107,101,114,115, 46, 48, 49, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,190, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,199,208,193,129,252,227, 64,164,112, 14, 63,229,197, 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, 65, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,193,129,252,227, 64,164,112, 14, 63,229,197, 9, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0,178,216, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0,165,168,193,176, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 27, 40,193,176,181, 0, 0, 0, 52, 0, 0, 0, 63,128, 0, 0, - 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, - 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, - 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, - 0, 0, 0, 4, 8,193,199,208, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,218, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,160,222, 32, 3,160,214, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101, -114,115, 46, 48, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,200,224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,200, 0,193,129,252,227, 64,164,112, 14, 63,229,197, 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, 65, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178, -180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,193,129,252,227, 64,164,112, 14, 63,229,197, 9, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, -178,216, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0,165,168,193,176, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 27, 40,193,176,181, 0, 0, 0, 52, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, - 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235, -189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, - 0, 0, 0, 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, 0, 0, 0, 4, - 8,193,200, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,222, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,160,226, 32, 3,160,218, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, - 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,211,144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,200, 48, 65,130, 56, 8, 64,164,112, 14, 63,229,197, 35, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 34,159,177, 0, 0, 0, 0, 65,130, 56, 8, 64,164,112, 14, 63,229,197, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,178,216, 66, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 38,112,222,138, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 28,112,222,138, 53,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, - 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, - 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, - 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,200, 48, - 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,226, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,160,230, 32, 3,160,222, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 49, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,222, 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, 8,193,200, 96, - 65,130, 56, 8, 64,164,112, 14, 63,229,197, 35, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, - 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, - 0, 0, 0, 0, 65,130, 56, 8, 64,164,112, 14, 63,229,197, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,178,216, 66, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 38,112,222,138, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 28,112,222,138, 53,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240, -128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70, -128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, - 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,200, 96, 0, 0, 0, 0, - 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,230, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,234, 32, - 3,160,226, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 49, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 4, 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, 8,194,232,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,200,144, 66, 2, 38,176, - 64,164,112, 14, 63,229,149, 46, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, -178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0, - 66, 2, 38,176, 64,164,112, 14, 63,229,149, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,177,214,137,120,177,162,159,176, 0, 0, 0, 0, - 38,112,222,138, 63,128, 0, 0, 37, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 54,127,255,254, 52,255,255,255, 52,127,255,255, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0, -164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0, -187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, - 0, 0, 0, 0, 79, 66, 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, -201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,200,144, 0, 0, 0, 0, 0, 0, 0, 1, - 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,234, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,238, 32, 3,160,230, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 49, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 4, 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, 8,194,243,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, 0, 0, 0, 0, 0, 0, 0, 0, 8,193,200,192, 66, 2, 38,176, 64,164,112, 14, - 63,229,149, 46, 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, 34,159,178, - 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, - 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0, 66, 2, 38,176, - 64,164,112, 14, 63,229,149, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,177,214,137,120,177,162,159,176, 0, 0, 0, 0, 38,112,222,138, - 63,128, 0, 0, 37, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 54,127,255,254, - 52,255,255,255, 52,127,255,255, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, - 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18, -191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, - 79, 66, 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,201,150,180, 56, - 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,200,192, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, - 0, 0, 79, 66, 0, 0, 3, 80, 3,160,238, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,242, 32, 3,160,234, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 49, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,254, 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, 8,193,200,240,194, 2, 10,237, 64,164,112, 14, 63,229,147,184, - 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, 34,159,178, 65, 34,159,178, - 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,194, 2, 10,237, 64,164,112, 14, - 63,229,147,184, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254, 51, 7,206,130, 0, 0, 0, 0, 0, 0, 0, 0, 38,112,222,138, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 28,112,222,138, 53,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, - 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, - 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, - 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, - 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,200,240, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, - 0, 0, 3, 80, 3,160,242, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,246, 32, 3,160,238, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 49, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, - 8,195, 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, 8,193,201, 32,194, 2, 10,237, 64,164,112, 14, 63,229,147,184, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,194, 2, 10,237, 64,164,112, 14, 63,229,147,184, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,127,255,254, 51, 7,206,130, 0, 0, 0, 0, 0, 0, 0, 0, 38,112,222,138, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 28,112,222,138, 53,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232, -128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, - 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, - 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, - 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,201, 32, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, - 3,160,246, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,160,250, 32, 3,160,242, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104, -101, 99,107,101,114,115, 46, 48, 49, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 19,176, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,201, 80,194, 34,134, 13,192, 63, 92, 58, 63,229,147,184, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 63,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 77,252,144, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0,193, 34,159,178, 53, 77,252,144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,194, 34,134, 13,192, 63, 92, 58, 63,229,147,184, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 49,154,187, 34, 23,196,149,225, 0, 0, 0, 0, 39,194, 58, 16, 63,128, 0, 0, 37,162,159,177, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 61,201,126,231, 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, - 48,172, 66,235,189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, - 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, - 0, 0, 0, 4, 8,193,201, 80, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,250, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,160,254, 32, 3,160,246, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101, -114,115, 46, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 30, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,201,128,194, 34,134, 13,192, 63, 92, 58, 63,229,147,184, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 63,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 77,252,144, - 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0,193, 34,159,178, 53, 77,252,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0,194, 34,134, 13,192, 63, 92, 58, 63,229,147,184, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 49,154,187, 34, 23,196,149,225, 0, 0, 0, 0, 39,194, 58, 16, 63,128, 0, 0, 37,162,159,177, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, - 48,171,145,219, 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235, -189,201,126,231, 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, - 0, 0, 0, 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, 0, 0, 0, 4, - 8,193,201,128, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,160,254, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,161, 2, 32, 3,160,250, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, - 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 41, 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, - 8,193,201,176, 66, 34,160,176,192, 63, 67, 28, 63,229,149, 45, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 0, 0, 0,191,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 77,252,144,193, 34,159,178, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178, 53, 77,252,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 34,159,177, 0, 0, 0, 0, 66, 34,160,176,192, 63, 67, 28, 63,229,149, 45, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,177,154,187, 34, - 0, 0, 0, 0, 0, 0, 0, 0,167,194, 58, 16, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,156,194, 58, 16, 52,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, - 30,247,120,240,128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, - 49,251,201, 70,128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, - 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,201,176, - 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 2, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,161, 6, 32, 3,160,254, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 50, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 51,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,201,224, - 66, 34,160,176,192, 63, 67, 28, 63,229,149, 45, 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, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0,191,201, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 77,252,144,193, 34,159,178, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 34,159,178, 53, 77,252,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, - 0, 0, 0, 0, 66, 34,160,176,192, 63, 67, 28, 63,229,149, 45, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,177,154,187, 34, 0, 0, 0, 0, - 0, 0, 0, 0,167,194, 58, 16, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,156,194, 58, 16, 52,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240, -128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70, -128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, - 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,201,224, 0, 0, 0, 0, - 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 6, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 10, 32, - 3,161, 2, 32, 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, 1, 4, 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, 8,193,168,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 57, 42, - 64, 11,114,237, 64,121, 99,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, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, - 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0, -191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0, - 65,110, 57, 42, 64, 11,114,237, 64,121, 99,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,179, 43,249, 60, 51, 37,175,234, 0, 0, 0, 0, - 51, 84, 6,193, 63,128, 0, 0, 50, 73,103, 94, 0, 0, 0, 0, 51, 49,123,229, 49,185, 95,236, 63,128, 0, 0, 0, 0, 0, 0, -169, 5, 28,236,167,139, 7,241,181, 64, 0, 0, 63,128, 0, 0, 62,255,247,138,191, 44, 21,164, 63, 11,203,251,128, 0, 0, 0, - 62,182, 26,141, 63, 59,248,176, 63, 20, 7, 45,128, 0, 0, 0,191, 74, 39, 37,189,194, 67, 9, 63, 27, 45,217,128, 0, 0, 0, -193,142, 14,147, 64,234,125, 35,192, 0,119, 85, 63,128, 0, 0, 0, 0, 4, 28, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, - 0, 0, 0, 0, 79, 66, 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, -201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 10, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,161, 14, 32, 3,161, 6, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,171,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 76, 84,193, 71,162,178, 64,178,186,210, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85, -190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, - 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, - 0, 0, 0, 0,191,210, 76, 84,193, 71,162,178, 64,178,186,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1, 52,184, 23,192,179,213, 54,101, - 0, 0, 0, 0,178,225,250,166, 63,127,255,248, 52, 5,159,109, 0, 0, 0, 0, 50,117, 31,137,179,130, 0,234, 63,128, 0, 1, - 0, 0, 0, 0,180,255,255,253,182,191,255,250, 53,127,255,245, 63,128, 0, 0, 62,255,247,136,191, 44, 21,164, 63, 11,203,251, -128, 0, 0, 0, 62,182, 26,139, 63, 59,248,173, 63, 20, 7, 44,128, 0, 0, 0,191, 74, 39, 36,189,194, 67, 17, 63, 27, 45,217, -128, 0, 0, 0, 63,189,129,191,192,104,159,176,192, 53,194,132, 63,128, 0, 0, 0, 0, 4, 28, 20, 0, 0, 0, 0, 0, 0, 68, - 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 14, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,161, 18, 32, 3,161, 10, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,184,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,193, 16,188,238,193, 57,119,229, 65,141,218, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 15, 79,202,191, 12,100,179, 63,234, 92,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 96,197,171, 63, 83, 27,149, - 63, 5,118, 10, 0, 0, 0, 0,191, 99,218,142, 61, 75, 4,109,190,232, 3,179, 0, 0, 0, 0,190,204,142,233,191, 16, 64,104, - 63, 57, 28,174, 0, 0, 0, 0,193, 16,188,238,193, 57,119,229, 65,141,218, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,178,181,144,174, - 52, 21, 37,184, 0, 0, 0, 0,178,176,221,147, 63,128, 0, 0, 51,252, 33,177, 0, 0, 0, 0,179, 70,191,185, 49,245, 47, 3, - 63,128, 0, 1, 0, 0, 0, 0,181,127,255,255,182, 0, 0, 0, 53,255,255,255, 63,128, 0, 0,190, 96,197,175,191, 99,218,143, -190,204,142,235,128, 0, 0, 0, 63, 5,118, 11,190,232, 3,179, 63, 57, 28,172,128, 0, 0, 0,191, 83, 27,150,189, 75, 4,119, - 63, 16, 64,105,128, 0, 0, 0,193, 14,181,128,191, 61,177,214,193,128,133, 29, 63,128, 0, 0, 0, 0, 4, 28, 20, 0, 0, 0, - 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, - 0, 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, 3, 80, 3,161, 18, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,161, 22, 32, 3,161, 14, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, - 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,175, 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, 64,104,147,176,193, 23, 84, 42, 64,171, 77,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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, - 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251, -191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0, 64,104,147,176,193, 23, 84, 42, 64,171, 77,116, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, -180, 17,201,197, 50,102,220, 99, 0, 0, 0, 0, 50,191,165,123, 63,127,255,254, 50,140,194, 10, 0, 0, 0, 0,178,180,160, 41, - 50, 73,103, 91, 63,127,255,254, 0, 0, 0, 0, 52,127,255,254,181,127,255,254, 52,255,255,253, 63,128, 0, 0, 62,255,247,137, -191, 44, 21,165, 63, 11,203,251,128, 0, 0, 0, 62,182, 26,141, 63, 59,248,176, 63, 20, 7, 46,128, 0, 0, 0,191, 74, 39, 37, -189,194, 67, 20, 63, 27, 45,217,128, 0, 0, 0,192, 93, 99, 91,190, 80, 98,136,192,112,119,223, 63,128, 0, 0, 0, 0, 0, 1, - 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, - 3,161, 22, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 26, 32, 3,161, 18, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97, -109,112, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,178, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,251,147,249,193, 24, 0,206,192,104,131, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, - 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0,192,251,147,249,193, 24, 0,206,192,104,131, 67, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,127,255,254, 50,222,105, 55, 51, 17,168,186, 0, 0, 0, 0,178, 47,228,243, 63,128, 0, 0,178,155, 76, 81, 0, 0, 0, 0, - 50, 22,191,170, 51, 50, 89,214, 63,127,255,254, 0, 0, 0, 0,181,127,255,254,181,128, 0, 0,168,136, 5, 35, 63,128, 0, 0, - 62,255,247,137,191, 44, 21,165, 63, 11,203,251,128, 0, 0, 0, 62,182, 26,139, 63, 59,248,176, 63, 20, 7, 45,128, 0, 0, 0, -191, 74, 39, 36,189,194, 67, 19, 63, 27, 45,217,128, 0, 0, 0, 64,176,142,147,191,170, 22, 97, 64,246, 28, 27, 63,128, 0, 0, - 0, 0, 0, 1, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, - 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 26, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 30, 32, 3,161, 22, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66, 76, 97,109,112, 46, 48, 48, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, - 8,193,181, 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, 65, 54, 41,142,191,115,124, 24,192, 58,215,162, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, - 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0, 65, 54, 41,142,191,115,124, 24,192, 58,215,162, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0,178, 47,228,244, 51, 37,175,235, 0, 0, 0, 0, 51, 84, 6,195, 63,128, 0, 0, 50, 73,103, 94, - 0, 0, 0, 0, 51, 49,123,230, 49,185, 95,239, 63,128, 0, 0, 0, 0, 0, 0, 53,127,255,255, 51,127,255,252,181, 63,255,255, - 63,128, 0, 0, 62,255,247,136,191, 44, 21,164, 63, 11,203,251,128, 0, 0, 0, 62,182, 26,139, 63, 59,248,175, 63, 20, 7, 46, -128, 0, 0, 0,191, 74, 39, 36,189,194, 67, 25, 63, 27, 45,217,128, 0, 0, 0,193, 49,192,139, 65, 36, 99, 40, 63,249,156, 89, - 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, - 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 30, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 34, 32, 3,161, 26, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,184,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,193, 19,239,220,193, 54,239,215, 65, 60, 9, 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, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,103,251, 67,191, 24, 27,164, 64, 3,136, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,190,197,143, 31, 63, 59,184,209, 63, 15, 80,138, 0, 0, 0, 0,191, 64, 66, 57, 61,210,119,132, -191, 38,249,118, 0, 0, 0, 0,191, 9, 43, 37,191, 44, 15, 35, 63, 2,212,114, 0, 0, 0, 0,193, 19,239,220,193, 54,239,215, - 65, 60, 9, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,179,254, 23,172, 52, 71,224,218, 0, 0, 0, 0,178, 16, 68, 59, 63,128, 0, 0, -179, 18, 70,107, 0, 0, 0, 0,178,240,247,161,179,181, 50, 89, 63,128, 0, 1, 0, 0, 0, 0, 53,128, 0, 0,169,254, 23,172, - 42, 71,224,218, 63,128, 0, 0,190,197,143, 31,191, 64, 66, 56,191, 9, 43, 35,128, 0, 0, 0, 63, 15, 80,139,191, 38,249,117, - 63, 2,212,112,128, 0, 0, 0,191, 59,184,208,189,210,119,142, 63, 44, 15, 35,128, 0, 0, 0,193, 0,135,195,190,148,252,127, -193, 48,180, 8, 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, - 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 34, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 38, 32, 3,161, 30, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 4, 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, 8,193,187,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,164, 99,104,193, 51,244,239, - 64, 19,110,188, 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,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, - 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0,192,164, 99,104, -193, 51,244,239, 64, 19,110,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,178,142, 78, 41, 51,156,219,142, 0, 0, 0, 0,178, 47,228,245, - 63,128, 0, 0, 50, 73,103, 93, 0, 0, 0, 0,179, 90, 80, 22, 51,153, 44,237, 63,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,255,247,137,191, 44, 21,165, 63, 11,203,251,128, 0, 0, 0, 62,182, 26,139, - 63, 59,248,178, 63, 20, 7, 45,128, 0, 0, 0,191, 74, 39, 36,189,194, 67, 18, 63, 27, 45,217,128, 0, 0, 0, 64, 91, 24, 96, -192,108, 50,226, 63,219, 9,101, 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, - 79, 66, 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,201,150,180, 56, - 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 1, 0, 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, 3, 80, 3,161, 38, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 42, 32, - 3,161, 34, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 4, 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, 8,193,190,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,188, 75,145, -193,107,197, 44, 64, 81,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, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218, 37,128, 0, 0, - 37,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 37,127,255,255,165,128, 0, 0, 0, 0, 0, 0, - 37,127,255,255, 51,162, 33,105, 63,128, 0, 0, 0, 0, 0, 0, 37,128, 0, 0,191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, - 63,188, 75,145,193,107,197, 44, 64, 81,147, 5, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254, 53,107,197, 44,180, 81,147, 4, 0, 0, 0, 0, - 37,127,255,253, 63,128, 0, 0, 48,136, 90, 64, 0, 0, 0, 0,165,127,255,254,155,107,197, 44, 63,128, 0, 0, 0, 0, 0, 0, - 51,255,255,254,181,255,255,255, 52,127,255,254, 63,128, 0, 0, 63,128, 0, 0,178, 23, 25, 45,179, 75,199,107,128, 0, 0, 0, -165,128, 0, 1, 63,128, 0, 0, 40, 0, 0, 0,128, 0, 0, 0,177,108,127, 0, 50, 29, 9,206, 63,128, 0, 0,128, 0, 0, 0, -191,189,159, 32,191,188,164, 47,192,153,188,150, 63,128, 0, 0, 0, 0, 0, 32, 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, - 0, 0, 0, 0, 79, 66, 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, -201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 42, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,161, 46, 32, 3,161, 38, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 0, 0,108, 97,110,101, - 46, 48, 48, 51, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,136, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,202, 16, - 60,102,131, 0, 64,164,112, 14, 63,229,211, 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, 65, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, - 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, - 0, 0, 0, 0, 60,102,131, 0, 64,164,112, 14, 63,229,211, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,165,143,118,252, 0, 0, 0, 0, - 0, 0, 0, 0,165,168,193,176, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,155, 40,193,176, 53, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240, -128, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232,128, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70, -128, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, - 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,202, 16, 0, 0, 0, 0, - 0, 0, 0, 1, 3,161, 86, 32, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 46, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 50, 32, - 3,161, 42, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 68, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,202, 64,189, 7, 82,100, -191,103,204, 21, 63,230,165,241, 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,155, 39,153, 64,155, 39,153, 64,155, 39,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218, 37,192, 0, 0, - 36,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,155, 39,153, 38, 27, 39,152,166,232,187,102, 0, 0, 0, 0, - 38,232,187,102, 52,196,134,157, 64,155, 39,153, 0, 0, 0, 0, 38, 27, 39,154,192,155, 39,153, 52,196,134,157, 0, 0, 0, 0, -189, 7, 82,100,191,103,204, 21, 63,230,165,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,152,206, 48,236, 24, 41, 66, 9, 0, 0, 0, 0, -152, 60, 55,216, 63,128, 0, 0,166,105,133, 88, 0, 0, 0, 0,151, 91,159,226, 38, 93,218, 64, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 83, 50, 25, 36,158,101,147, 35,211, 50, 27,128, 0, 0, 0, -164,158,101,147, 62, 83, 50, 25, 38,189,119, 59,128, 0, 0, 0,173,204, 94, 0,175, 96, 79,158, 62, 83, 50, 25,128, 0, 0, 0, - 59,153, 62,135,185,110, 94,217, 63,238, 71,118, 63,128, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, - 0, 0, 0, 0, 79, 66, 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, -201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 4, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,202, 64, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 50, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 54, 32, 3,161, 46, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 50, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, - 0, 1, 4, 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, 8,194,107,224, 0, 0, 0, 0, 0, 0, 0, 0, 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,202,160, 8,193,202,160, 8,193,202,112,191,213,187,242, 63,134,145,194, - 64, 35,100,254, 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, 28, 0,243, - 65, 28, 0,246, 65, 28, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,135,110, 48, 62, 59,169,180,191, 1,115,138, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 6, 49,198,192,148,154,115,191,227,113, 3, 0, 0, 0, 0, 64,106,250,159, - 64, 91,207,189, 65, 5,170, 80, 0, 0, 0, 0,192, 86,151, 46,192,251, 94,125, 64,150,127,188, 0, 0, 0, 0,191,213,187,242, - 63,134,145,194, 64, 35,100,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1, 49,153,198,100,179,110, 73,125, 0, 0, 0, 0, 49,211, 40,194, - 63,128, 0, 0, 50,145,137, 64, 0, 0, 0, 0, 48, 35, 64,101, 51, 39,164,144, 63,128, 0, 0, 0, 0, 0, 0,166, 83, 40,194, -180, 0, 0, 0,167, 17,137, 64, 63,128, 0, 0, 61,180,174,143, 61, 30, 48,160,189, 16,118,223,128, 0, 0, 0,188,153, 29,162, - 61,179,248, 38, 61, 74,162,115,128, 0, 0, 0, 61, 72, 21, 15,189, 19,250,160, 61,169, 57, 88,128, 0, 0, 0, 63, 50,107, 4, -190,204, 46, 88, 63, 79,206,177, 63,128, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, - 79, 66, 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,201,150,180, 56, - 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,202,112, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 68, 8,193,202,160, 0, 0, 0, 78, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 31, 83,117, 98,115,117,114,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, 1, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, - 3,161, 54, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 58, 32, 3,161, 50, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114, -101,118,105,101,119, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 2, 71,170, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 62,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, 8,193,203, 16,187,203,194, 16, 63, 45, 89,155, 63,230,153,244, 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, 72,135, 56, 63, 72,135, 56, 63, 72,135, 56, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 72,135, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 72,135, 56, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 72,135, 56, 0, 0, 0, 0,187,203,194, 16, 63, 45, 89,155, 63,230,153,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47,200,135, 57,178,200,135, 57, 63,128, 0, 1, 0, 0, 0, 0,176,192, 0, 0, 51,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,163,104,144,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 34, 52, 33, 50, 51,206,250,252, 63,163,104,144,128, 0, 0, 0, -173,202,240, 60,191,163,104,144, 51,204, 63,183,128, 0, 0, 0,187,173, 93,105,193, 88,176,172,186,118, 52, 95, 63,128, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, - 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, - 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 2, 71,158,160, 2, 71,164, 96, - 0, 0, 0, 25, 0, 0, 0, 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, - 0, 0, 0, 4, 8,193,203, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 58, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,161, 62, 32, 3,161, 54, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101, -119, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 62,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, 8,193,203, 64, 58, 10, 31, 0, 63,236, 94, 59, 63,231, 84,236, 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,110,188, 91, 63,110,188, 91, 63,110,188, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,201, 15,218,128, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,110,188, 91, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,151, 50, 90, 63,110,188, 91, 0, 0, 0, 0, 0, 0, 0, 0, -191,110,188, 91, 51,151, 50, 90, 0, 0, 0, 0, 58, 10, 31, 0, 63,236, 94, 59, 63,231, 84,236, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,127,255,254,179, 25, 53,226, 0, 0, 0, 0, 0, 0, 0, 0, -167, 50,115, 84, 63,128, 0, 1, 0, 0, 0, 0,174,128, 0, 1,179,255,255,254, 39,153, 53,226, 63,128, 0, 0, 63,137, 65,160, -128, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,150,221,204,136, 63,137, 65,160, 40, 40,226,194,128, 0, 0, 0, 45, 14,127,248, -176,150,195,159, 63,137, 65,161,128, 0, 0, 0,188, 63, 80, 29,187,226, 95, 62, 65, 74, 19, 87, 63,128, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, - 0, 0, 0, 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, 0, 0, 0, 4, - 8,193,203, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 62, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,161, 66, 32, 3,161, 58, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, - 53, 0, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,193,165, 96, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,195,155,128, 64,188,145, 20, 65, 88,220, 94, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,134,180,221, 37,141,190, 48, 35, 57, 55,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 35, 57, 55,253, -165,141,190, 48, 0, 0, 0, 0, 37,112,128,219, 62,253,177, 52, 63, 94, 93, 94, 0, 0, 0, 0, 37, 22,133, 52,191, 94, 93, 94, - 62,253,177, 52, 0, 0, 0, 0,189,195,155,128, 64,188,145, 20, 65, 88,220, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 25, 31, 42,118, -153,131,108,242, 0, 0, 0, 0,176, 0, 0, 0, 63,128, 0, 0,178, 66, 21,210, 0, 0, 0, 0,176, 0, 0, 5, 50,158,245, 25, - 63,128, 0, 1, 0, 0, 0, 0, 50, 0, 0, 0, 11,159, 42,118,140, 3,108,242, 63,128, 0, 0, 63,128, 0, 0, 37,112,128,219, - 37, 22,133, 53,128, 0, 0, 0,174,231, 90, 80, 63, 94, 93, 94, 62,253,177, 52,128, 0, 0, 0,172,239, 68, 0,190,253,177, 50, - 63, 94, 93, 95,128, 0, 0, 0, 61,174, 98,150,193,144,101, 85, 64,253,124,196, 63,128, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, - 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, - 0, 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, 3, 80, 3,161, 66, 32, - 0, 0, 0,113, 0, 0, 0, 1, 3,161, 70, 32, 3,161, 62, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101, -119, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 87, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,203,112,190,252, 52, 94, 65,228,101,174, 65, 17,116,141, 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, 30,239,235, 66, 30,239,236, 66, 30,239,235, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 95,174,138, 37,123,132, 98,165, 87, 56, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 30,239,235, -168, 5,158,105,168, 28, 39,108, 0, 0, 0, 0, 40, 77,129,212, 65,204, 15, 66, 65,243,186,158, 0, 0, 0, 0,165, 13, 89, 55, -193,243,186,156, 65,204, 15, 65, 0, 0, 0, 0,190,252, 52, 94, 65,228,101,174, 65, 17,116,141, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 24,232,169,151, 25,157,190,151, 0, 0, 0, 0, 24,149, 24, 21, 63,128, 0, 0,178, 59,157,109, 0, 0, 0, 0,153, 64,231,191, -178,199,158, 1, 63,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,206, 43,101, - 35, 5, 74, 25,159,183, 90,141,128, 0, 0, 0,162,202,143, 41, 60,158, 20,101, 60,132, 89,193,128, 0, 0, 0, 34,173, 83,188, -188,132, 89,192, 60,158, 20,103,128, 0, 0, 0, 60, 70,215, 11,191, 67, 43, 61, 63, 31,241,185, 63,128, 0, 0, 0, 0, 0, 64, - 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, - 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, - 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, - 0, 0, 0, 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, 0, 0, 0, 4, - 8,193,203,112, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 70, 32, 0, 0, 0,113, - 0, 0, 0, 1, 3,161, 74, 32, 3,161, 66, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 99,117, 98, -101, 0,117, 98,101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 95, 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, - 8,193,203,160, 59, 88,253,128, 63,160,118,220, 64, 37, 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, 64, 68, 88, 84, 64, 68, 88, 84, 64, 68, 88, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,237,190, 1,190,217,230,108, 63, 52,151, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 38, 67, 63,231,228,191, - 63,162, 31,186, 0, 0, 0, 0,192, 13,118, 35, 63,220, 61, 2, 63,160, 44, 31, 0, 0, 0, 0, 60,234, 52,166,191,227,223,102, - 64, 31,229, 55, 0, 0, 0, 0, 59, 88,253,128, 63,160,118,220, 64, 37, 15, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,178,173,119, 22, - 48,207, 79,155, 0, 0, 0, 0,179, 33,101,225, 63,128, 0, 0,178,235,101,178, 0, 0, 0, 0, 50,194,156,191, 50,154, 60, 97, - 63,128, 0, 1, 0, 0, 0, 0, 51,149, 0, 0,180, 0, 0, 0,180,128, 0, 1, 63,128, 0, 0, 62,103,115, 10,190,112,122,201, - 59, 71, 17,255,128, 0, 0, 0, 62, 9,205,116, 62, 8, 36,205, 62,135,232,136,128, 0, 0, 0,190, 69, 27, 1,190, 59, 50,224, - 62, 65,176, 25,128, 0, 0, 0,192, 16,176,110,192, 9, 71,158, 63,244, 90,115, 63,128, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, - 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, - 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,203,160, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 80, 3,161, 74, 32, 0, 0, 0,113, 0, 0, 0, 1, - 3,161, 78, 32, 3,161, 70, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119,104, 97,105,114, 0,108, 97, -110,101, 0, 0, 0, 0, 0, 0, 0, 1, 4, 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, 8,194,147, 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, 8,194,100, 96, 8,194,100, 96, 8,193,203,208, - 63,200, 92, 86, 63,227,205, 7,189, 9,199,149, 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, 47,126,234, 64, 47,126,234, 64, 47,126,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2, 80,225, -191, 15,211, 5, 62, 18,219, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 18,254,224, 62,169,209, 23, 63,186,251, 27, - 0, 0, 0, 0,191,133,254, 71, 64, 17, 40,207, 63,144,194,229, 0, 0, 0, 0,191,137, 38, 78,191,192,162, 48, 64, 1,176,125, - 0, 0, 0, 0, 63,200, 92, 86, 63,227,205, 7,189, 9,199,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,179, 25,128,225,179, 88,103,157, - 0, 0, 0, 0, 50,132,162,249, 63,128, 0, 1, 51,139,156, 89, 0, 0, 0, 0,179,139,204,225,178,185, 96,160, 63,128, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 1,180, 0, 0, 1,180, 84, 0, 1, 63,128, 0, 0, 62,156,100,244,190, 14,143,135,190, 17,235, 52, -128, 0, 0, 0, 62, 70,239,175, 62, 26, 4,102, 62,137,251, 72,128, 0, 0, 0,189, 52,172,174,190,154,112,211, 62, 76,243, 67, -128, 0, 0, 0,191, 36, 56,149,192, 66, 98,139, 64, 68, 5,168, 63,128, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, - 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,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, 8,193,204,176, 8,193,204,176, 8,193,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,193,203,208, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,193,204, 0, 0, 0, 0,115, 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, 61,204,204,205, - 62, 76,204,205, 60,163,215, 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, 68, 65, 84, 65, 56, 1, 0, 0, +168,127,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 16,129,178, 3, 64,126,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 95, 80, 84, 95,109, 97,116,101,114,105, 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, 68, 65, 84, 65, - 0, 0, 1, 64, 8,193,204,176, 0, 0, 1, 49, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3,163,162, 32, 7,246,240, 32, + 95, 80, 84, 95,109, 97,116,101,114,105, 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, 77, 97,116,101, +114,105, 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, 0, 0, 0, 0,172,254, +240, 0,126, 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, - 62,156,100,244,190, 14,143,134,190, 17,235, 52, 0, 0, 0, 0, 61, 52,172,172, 62,154,112,211,190, 76,243, 69, 0, 0, 0, 0, - 62, 70,239,176, 62, 26, 4,102, 62,137,251, 73, 0, 0, 0, 0,191, 12,211,188,190,160,176,198, 63, 22,156, 56, 63,128, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16,129,178, 3,181, 0, 0, 0, 1, 0, 0, 0,120,130,178, 3,168,127,178, 3, + 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, 0, 0, 0, 0, 0, 0, 22,254,240, 0,126, 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, 8,194,100, 32, 68, 65, 84, 65, 0, 0,147,168, 7,246,240, 32, 0, 0, 1, 47, - 0, 0, 0,150, 0, 0, 0, 0,192, 17,135, 20,192, 97,121, 36, 63,141, 32,112,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,206, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 32, 96, 77, 62,160,201,185, 63, 6, 3,160,190,248, 34, 11, - 60,185, 53,206, 61,178,197,192, 63, 53,184,174,190,162,172,223, 62,224,136,109,191, 61,173,142, 60, 10, 96,180, 61,163,196,200, - 63, 99,182, 78, 60,180,242,165, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,150,112,248, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 7, 46,111,192, 60, 26,143, 63,207,147, 28,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 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,130,178, 3,181, 0, 0, 0, + 1, 0, 0, 0,224,131,178, 3, 16,129,178, 3, 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, 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, 8,193,207, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,229,121, 6,191, 41, 50,108,191, 7,152,136,190,146,100,156,191, 25,141,146, - 62,142, 92, 39, 63, 18,104,212,190,105,105,227, 62, 96,156,113,191, 69,226,137, 61, 17,247,147, 62, 44,172, 51, 63, 54,125, 17, - 61,169,195, 69, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,245, 63,144, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -189,174,103,224,192, 17, 88, 60, 64, 76, 35,230,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201, -190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62,155,160,101, 62,152, 87, 59,191, 84,199,118, 62,183, 89, 86, 62,231,103,118,189,177, 47,110, -191, 4, 8,155, 62,199, 60,100,189,177, 40,197, 62, 46, 14, 2, 62, 39, 96,102, 61,242,119,101, 62,146,168,189, 62,221, 9, 55, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61, 87, 36,135, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192,131,102, 75, - 63, 26,241,196, 64, 76,198,140,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,209, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 39, 80, 49,190,218, 26,171, 63, 16,118, 89,190,138, 72,130,190,122,255,169,191, 14,111,185, 63, 38,207, 21, - 61,211,252, 73,191, 80,177,198,189,203,154, 43, 61, 53,146,227, 63,115,180, 63, 59, 42,113,216, 58,144, 63,125, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,142, 95,175, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189,226, 43, 64,191,220, 85,253, - 64,101,104,225,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,210, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 45, 97,119,190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, 62, 73,195,242, 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, - 63, 88,232,230,190,204, 53,130, 62,128,120,250, 62, 20,194, 19, 62, 90, 15, 61, 62,200, 30, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,253,129, 53, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,129,159,108, 63, 6,210, 8, 64,152,221, 35, -191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,211, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,210,167, 41, - 62,139,172,194, 63, 35,220,250,191, 22,182, 30, 61,136, 3,122,190,176,164,109,190,147,153, 30,188, 10,248,255,190,160, 90,234, -190,205,241, 89, 63, 25,235,148, 62,146,172,206, 61, 52,195,137, 61,139,142, 99, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 77,227, 37, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,189,167,114,192,104, 59,217, 63,184,179,184,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,212, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,121, 45, 57, 63, 98,126,120, -189,135,171, 60,190,200,174,139, 63, 21,142,220,191, 40, 70, 77, 62,150, 70,118, 61, 92,245, 4,190,174,118,159, 63, 49,217,176, - 60,104,167,120, 60,235,104,166, 63, 73,251,218, 62, 44, 25, 13, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62,247, 2,217, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 30,112, 86,192, 82, 69,111, 64, 51,191, 59,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,213, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,137,227, 49,191, 71,195,206,190, 96, 31, 70, - 63, 5, 46,127,189,214, 51, 99,191, 67, 61,228, 62, 2, 90,134,190,146,214,120, 62, 33,111, 34,190,187,229,136, 60,241,112, 27, - 60,177,187, 0, 62,171,134, 4, 63, 29, 35,164, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 56,192,130, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,176,148,118, 63, 1,200, 88, 64,146, 48, 89,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,214, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 82,169, 42, 63, 57,214,102,191, 36,112, 55, 62, 9,205, 59, - 63, 5,139,184,190, 43, 32,105,191, 37, 62,120, 63, 15,215,220, 63, 8, 2,180, 62,163,170,198, 63, 8,178,160, 62,184,164,185, - 61, 63, 72, 68, 61,112,104, 16, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,192,249, 97, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191,168, 80,200,191,165,154, 8, 64, 80,248,229,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,215, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 5,145, 56, 62,126, 77, 83,191, 63,133, 14, 62,167, 5,190,190, 96,212,123, - 62,176,136,233,189, 80,193, 25, 62, 18, 49,147, 62, 25, 40,222,191, 10,204, 59, 62,104, 46,177, 62,150,106, 36, 62,138, 61, 2, - 62, 86,131, 4, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 19, 27, 39, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -189,246,190, 0,192, 90,129,233, 64, 20,155,224,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198, -190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,216, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 14, 77, 30, 62,154, 81,231,191, 22,220, 41,191, 0,189,104,190,160,167,214,190, 22, 60,140, - 63, 74, 85, 37,191, 8,253, 32, 61, 23,146, 96,190,177, 30,196, 60,187, 25, 79, 60,194,244,207, 62,253,234, 53, 62,234, 52,233, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 79, 21,218, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 67,231,176, -189, 11,105,144, 64,153,111,210,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,217, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62,205,110, 74,191, 27,226,146, 61,219, 95, 73, 63, 45, 3, 75,190,147,109,222, 63, 40,196,152,190,116,136, 36, -190,190, 21,181,190,213, 38,211, 62,183,230,114, 63, 24,217,206, 62, 25,222, 59, 61,134, 50, 0, 62, 63,161,139, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,127, 67,180, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,158,217, 58,192, 17,225,122, - 64,120,158,213,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,218, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 22, 95,176,190,210, 95,172,191, 46, 70,114, 62, 26, 71, 67, 61,234,164,188,191, 78,120,121,188,108,229,186,190, 72,225,144, -190, 42,218,197,191,114,104, 83, 62, 73,213, 34, 61, 49,230,217, 61,187,117,217, 63, 42,253,143, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 95,144,226, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,127,205, 29,191,142,116,231, 64,100, 64,116, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,219, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,132, 25,196, -191, 41,167, 67,190,174,145,249, 63, 41,227,171, 62, 94,208, 84, 63, 50, 21, 98,191, 46,162,138,191, 56, 53,136, 62,160, 44, 9, -190,188, 42, 15, 62,145,124,109, 62,135, 84, 47, 62, 95, 56, 95, 62,111, 38,104, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 87,116,183, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 67,106,143, 62,236, 1,239, 64,105,139,230,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,220, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 72, 62, 61, 62,176,226,147, -191, 48,185, 67,191, 26,215,255,187,254,158,242,190,201,238, 89, 63, 39,166, 99,191, 3,238,102, 62, 10,229,206, 62,230, 53,165, - 62,100,227, 37, 63, 54, 38,230, 61, 43, 4, 87, 60,190, 1,166, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 61,126, 26,213, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 58, 63,114,191,102, 44,242, 64,119,155,239,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,221, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,131,238,198,191, 58, 99, 49, 63, 26,180, 63, -190,162, 92,201, 62,209,254,113, 63, 12, 67,151, 62,197,138, 80,191, 72,116,197,190,182,129,117, 62, 76,137,180, 62,178,134,232, - 62,113,134, 23, 62, 46,242,235, 62,122,121, 45, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 62,169, 12,248, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 62,175,173,244, 61,141,194,136, 64,164,239, 0,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 28, 38,213, 60,166,248, 66,191, 67,199,227,190, 83,123,127, -190,224,119,122, 62,149, 46, 73, 62, 62, 43,135, 62,199,175, 30, 63, 2,224, 97, 62,250,198,180, 63, 48, 97,211, 61,130,134, 38, - 61, 8, 53,167, 62, 91, 40, 56, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,157,115, 93, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 36,188,127,192, 42,192, 83, 63,202, 24, 20,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,223, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 82,121, 10,190,216,142,233,191, 83,156, 94, 62,158, 73,222, 63, 3,207,170, -191, 39, 41, 63, 62,147,164, 2,191, 38,187, 36, 62,218, 1, 0,191, 32,119,145, 60,154,242,191, 62,130,165, 14, 63, 49,236,127, - 60,253, 44,163, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,130,194, 13, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 51,117,191,192, 44,247, 40, 64, 82, 59, 84,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 71,176, 89,191, 18, 55,214,190,223, 82, 67, 63, 50, 2,142, 61,202, 17,235, 62,199,118, 51, - 63, 72,125,129,191, 36,250, 86, 61, 90, 99, 70, 63, 25, 38,125, 61,227, 50,218, 61,110,152, 48, 62,104, 58,166, 63, 26,161,121, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 35, 69, 21, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 44,218, 23, -190,159,112,131, 64, 80,196, 68,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,225, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191, 39, 65, 62,190,203,203,175,191, 8, 58, 24,190,185,178,132, 63, 27,133, 48, 63, 35,150,166,189,174,164,195, -189,209, 20,146,191, 3, 43,124, 63, 54,188,219, 62, 53,126, 23, 63, 22,113, 93, 62, 42,104, 29, 61,140,168,166, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,222,122, 90, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 61,253,222,190, 43,216,212, - 64,140,239,219,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,226, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190,251, 62, 59, 62,132,207,154,191, 19,198,191,191, 25, 82,122,190,169,114,179,191, 46, 80,242,189,100, 92,161, 62,188,103,125, -191, 23,234, 0, 63, 22,140, 12, 62,252, 36, 24, 62,121,130,191, 61,198,245, 96, 62, 42,186, 98, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 89,205, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,212,168,192,192, 30,175, 47, 64, 12,228, 94, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,227, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,136,242, -191, 58,135,240, 61,233,198, 89, 63, 41,148, 57,190,189,188,151,190,189, 72,156, 63, 86, 14,184,190,165, 54,185, 62, 49,220,131, -189,189, 87, 60, 61,167,198,118, 62, 80,200, 92, 63, 10,210,157, 62, 48, 9,240, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,238,184,114,191,230,206,237, 64, 85,122,208,191, 55, 81,190, -191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,228, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 30,165,128,190,249, 50,161, -189, 86,213,180,191, 29, 10,178,191, 49,247,227,189, 7,139,215,189,154,249,222,191, 23, 77,153, 63, 14, 58,160, 61, 15, 47, 72, - 62, 94,132,138, 62, 48,190,167, 62,136, 41,203, 62,176, 52,157, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62,233,177, 38, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,104, 19, 67,191,254,122,179, 64,123, 37,115,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,229, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,181,231, 69, 63, 51, 19, 36,191, 6, 5,126, -190,170, 27,231,189, 35,253,128,189,151, 11,182, 62,178,171, 74, 63, 49,231,127, 62,128,146,204, 62, 17,100, 88, 62,124,245,197, - 61,130,108, 30, 61,229,152,201, 63, 19,193,242, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 79,156, 56, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 63,191,106,172,192, 42,225,110, 64,110,170, 2,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, - 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,230, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 27,227, 49, 63, 26, 83, 17,191, 2,229, 27, 61,135, 48, 83, - 62,134,244,199,190,151, 37, 55,189,237,195,210, 63, 17, 39,249, 61, 76, 1,154,191, 79,194, 75, 61,249, 99,240, 60,249, 88,190, - 61,183, 20,174, 63, 66, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,178, 40,150, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 12, 3,121,190,252, 11, 63, 64, 89,136,146,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,231, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 20, 59,104, 63, 17, 36, 30,190,252, 57,112, 62,162,101, 32, 62,160, 6,139, - 61, 80,160, 57, 61,245,243,109,190,224, 18, 41,188,227,154,182,190,139,196,238, 62,108, 28,173, 62,246,152,191, 62, 61, 50,199, - 61,210,254, 31, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 56,166, 20, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191,187,104,250,189,139, 86, 56, 64,131, 23,145,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198, -190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,232, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 19, 80,228,191, 16,138,118,191, 6,210,122, 62,138, 14,139, 62,189, 65, 73,189,244, 89, 19, - 62, 83, 5,205,190,107,159, 94, 62,255,199, 19,190, 48,124, 14, 62,208, 67, 15, 62,190, 57,184, 61,219,154,119, 61,234,114,111, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,223, 51,203, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,161, 56, 52, -191,207,221,255, 64,120,110,202,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,233, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 47,124,138, 63, 0,193, 12, 62,176, 39,124,190,204, 3, 68, 61, 43,180,132,189,104,184, 66,191, 54,173, 69, -189,116,239, 24,190, 53,183,191,190,198, 91,120, 62,150, 33,123, 61,226, 30, 68, 62, 27,121,224, 62,227,154, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 35, 22,117, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 41, 89, 63,192, 25,107,117, - 63,222,245,174,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,234, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,207,202, 66, 63, 47, 32,211,191, 0,219,139,190,172,212,197, 63, 65, 68,195,190,217,152,105,190,214,218,159,190, 84,113, 85, -190,158,108,194, 61,235,217,229, 60,202,179, 82, 62,157,106,197, 63, 33,197,211, 61, 18,243, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,102,162, 1, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,220,238, 94,191,150, 70, 91, 64, 72,192,203, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,235, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 22, 95,176, -190,210, 95,172,191, 46, 70,114, 62, 26, 71, 67, 61,234,164,188,191, 78,120,121,188,108,229,186,190, 72,225,144,190, 42,218,197, -191,114,104, 83, 62, 77,183, 13, 62,182,153,158, 62,143, 59, 65, 62, 38,159, 52, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 95,144,226, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192,116,234, 61,188,238,101,224, 64, 56, 20,165,191, 55, 81,190, -191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,236, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,136,242,191, 58,135,240, - 61,233,198, 89, 63, 41,148, 57,190,189,188,151,190,189, 72,156, 63, 86, 14,184,190,165, 54,185, 62, 49,220,131,189,189, 87, 60, - 60,242,255, 31, 63, 83,194,231, 62, 5, 56,189, 60, 85,188, 68, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189,240,209,128, 63, 95,183,178, 64,176, 67, 5,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,237, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 86,114,107,191, 2,141,137, 61,105,140,227, -190, 63,121, 70, 62,218,242,130,190,132,163,237, 60, 16,235,219, 62,248,203, 85,191, 80,244, 79, 62,148, 0,103, 63, 85,189,153, - 61,200,104,151, 60,142, 55,246, 61, 76, 57, 74, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 33,252, 31, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,192, 25, 54,206, 62,162,197,171, 64,121, 16, 6,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, - 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,238, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,244,100,219,191, 91, 69,182,189,144,137, 60, 62, 59,126,161, -190,200,228, 28, 62,170, 49, 60,189,250,139,225, 62,111,143,244,191,100,103,252, 62, 79, 32,148, 62,163,246,104, 63, 16,201, 91, - 61,136,104, 24, 61, 66,230,227, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63, 41, 88,182, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 61, 57, 29,191, 39, 53,236, 64, 55,221,173,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235, -190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 43,167, 61,225,210,242, 63, 30, 58,197, 63, 67, 8,229, 61,222,176,215, - 63, 12, 15, 70, 62,165,195, 80, 61,227, 72,218,191, 87, 66,188, 62,195,213,145, 61,212,218, 39, 63, 25, 20,242, 62,118, 70,122, - 61,107,226,159, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 64, 74,173, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191, 40, 62,249, 63, 26,113, 16, 64,160,179, 50,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,190,224, 29,190, 63, 4, 44,239, 63, 49,217,125,190,121, 25,107, 62,217,172,117,190,116, 98,242, - 63, 42,162,148,190,199,178,142,191, 13,105, 54,190,163,107, 83, 63, 45,186, 64, 62, 91,122,109, 61, 21,134, 32, 61,144,118, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 73,107,113, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,138, 51, 90, -192,110, 14,199, 63,203, 66, 18,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,241, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 39, 78, 36,190,251, 50,128,190,189,185,139, 62,226, 4,175,190,153, 23,118,190,120,228, 67,191, 42,226, 50, -191, 86,243,239,190,189, 42, 37,190,190, 1, 66, 59,153,223,235, 59,243,174, 21, 63, 60,160,231, 62,128,135,251, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,105,245,167, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,186, 75, 44,191,204,205,170, - 64, 61,169,132,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,242, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,155,223,118,191, 3,196,249,190,163, 12,115,191, 60, 73,212, 62, 85,208, 59, 62,155, 11, 65,189,173, 17, 28,190,254, 16, 20, - 63, 32,229,213,189, 28,221,216, 62, 52, 19, 79, 62,146, 52,229, 62,171,228,191, 62, 79,185,106, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 37,184, 45, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,219,119, 4,192, 28, 73,231, 64,128,117, 83, -191, 55, 81,188,191, 71,243,109, 63, 42,237,100, 62,214,163,233,190,183,206,202,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,243, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,254,109,168, - 63, 4,146,210, 63, 23,131,232, 62,187,212, 66,190,158,109, 9, 62,216, 12, 71, 59,153, 20, 64, 62, 7, 2, 11, 62, 91,134, 92, -191, 33,128, 43, 62, 51, 75,186, 60,144,251,206, 61, 19, 49,198, 63, 69,114, 22, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,115,100,221, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,194, 59,172,192, 13, 29, 35, 64, 30,208, 13,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,244, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,155,223,118,191, 3,196,249, -190,163, 12,115,191, 60, 73,212, 62, 85,208, 59, 62,155, 11, 65,189,173, 17, 28,190,254, 16, 20, 63, 32,229,213,189, 28,221,216, - 61,227, 31, 97, 62,104,207,168, 62,237, 89, 38, 62, 74,238, 93, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 37,184, 45, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 82,190,197, 62,174,148,251, 64, 91,189, 29,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,245, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 10,132,170, 62,237, 61, 82,190,223,191,127, - 63, 12,148, 11, 62, 92,142,236, 63, 32,199, 17,189,242,206,157, 63, 15,114,199,191, 33, 82, 91,190,167,247, 3, 62, 37, 10,210, - 63, 65,152,124, 61,106,110, 28, 60,207,189,179, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 62,140, 23, 40, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,190,163,157,120, 63, 33,219, 44, 64,167, 25,250,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, - 62,214,163,237,190,183,206,199,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,246, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,175,102,190, 50,200,160, 63, 77,214,248,190,110,194,226, - 61,198, 10,138, 62, 62,213,210, 61,253,163,141, 61,160,130,106,191,101,229,201, 62, 50,145,103, 63, 61,192, 52, 62, 23, 50, 16, - 61, 1, 56, 40, 61,162,254, 43, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 60,220, 81, 89, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 79, 63,131,191,203,225, 22, 64,133, 83,183,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,247, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,194,155, 70,191, 3, 93, 82,191, 19,133, 23,191, 2,146,179, 62,104,198,131, - 63, 93,189, 15,190,209,226, 77,191, 21,122,159,190,234,192,169, 63, 35,128, 16, 62,167,188, 9, 61,138,167,141, 61,185,163,186, - 63, 3,152,147, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 59,236,249, 25, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 62, 89,218, 20,192, 81, 21,169, 64, 38,226, 50,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198, -190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,248, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 52,169,139, 62,156,163, 97,190,184,132, 26, 63, 7, 25, 82, 62,151,117,127, 62,247,206,254, - 63, 76,144, 27, 62,204, 57,150,188,246,181,184, 63, 19,222,196, 61, 18,237,175, 61, 0, 0, 50, 62,208, 45,180, 63, 6,186, 72, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,186,195, 61, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,166, 91,192, - 62,151,138,203, 64,159, 4,232,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,249, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 7,240,212,191, 18, 2,213,191, 5, 90,228, 62,178, 92,221, 63, 16,236, 8, 62,151,216, 90, 62,128,193,155, -188,245, 60, 56,190,160,129,118,191,113,157, 47, 63, 40,117,114, 62, 37, 92,164, 61, 78,198, 72, 62, 5, 28, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,226, 96,137, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,191,137,104,190,208,156,143, - 64,116,245,234,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,250, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 49,218,173,191, 23,109,113, 62, 55, 16, 32,190,188,117, 54, 62,208, 20, 25,191, 46,245,118,186,236,158, 72,191, 97, 10, 55, - 62,183,128,140,190,146,230,177, 62,174,217,121, 62,188, 55, 45, 62, 25, 76, 41, 62, 16,146,138, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 48, 85, 96, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 78, 6,218,191, 2,247,240, 64,131,181, 2, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,251, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, - 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,190,103,198,244, 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145, -190, 63, 20,208, 62,211,209,237, 62,129,168, 1, 62, 7,237,108, 62, 77, 30,188, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,251,181,100, 63, 79, 67,160, 64,143,115, 83,191, 55, 81,190, -191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,252, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,237,243,122,190,169,234, 11, -191, 55,226,211,191, 25,175,184, 63, 39,201, 24,190, 71, 23,204, 62,218, 61, 87, 63, 39,211, 31,190,215,101,108,189,244,125, 35, - 62,250, 56, 31, 62,248,208,174, 60, 79, 43, 50, 60, 79,186,252, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 61,186,130, 83, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 16,143,166,192, 31, 40,219, 63,240,165,188,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,253, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 15,157,192,190,205, 51, 47,190,136, 40,152, - 63, 44,122,128, 63, 92,144,194,190, 99, 36,235,190,206, 22,244, 62,220, 32,143, 63, 19,244,169,189,238,205,160, 61, 69,255, 93, - 62,129,237,131, 63, 29,113,199, 61,169,188, 16, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61,151,139,249, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 16, 47, 62, 17,135,234, 64,101,174,196,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, - 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,254, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,162,110,186,190,105,104,145, 62,239,168,247, 63, 74,235, 3, -190,178, 77,140, 63, 72, 49, 80, 62,112, 45,164, 63, 44,101, 43, 62,173,162, 95,190,104,215,180, 62,112,185,132, 63, 31,198, 76, - 61,186,148, 82, 61, 75,140,149, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 61,120,174,161, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 34, 76,221,191,220, 63,195, 64, 19, 92,101,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,255, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 32, 89,101, 63, 82, 91,234, 60, 86, 78,243, 63, 12, 61, 22,190,178,120,249, -191, 37, 19,203, 63, 24, 65,128, 63, 52,226,196,191, 0,214,219,190,210,228,203, 61,144, 5,191, 62,203,251, 27, 62,232,217, 8, - 61,156,169,185, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,113,165, 7, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191,208,209, 0,192, 57, 98,175, 63,244, 39,214,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,136,242,191, 58,135,240, 61,233,198, 89, 63, 41,148, 57,190,189,188,151,190,189, 72,156, - 63, 86, 14,184,190,165, 54,185, 62, 49,220,131,189,189, 87, 60, 61,100,142, 40, 62, 18, 81,206, 63, 34,238, 52, 62, 40,209,214, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 19,146,156, - 63, 38,169,132, 64,133,240,119,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191,104,191,123,190,172, 12, 91, 62,112, 97,100, 61,150, 67,240, 61,241,234,237,190, 65, 15,121, 62, 61, 2,224, -190,233, 38,159,187,191, 62,118, 63, 29,119,107, 62,202, 98,177, 63, 14,134,157, 60,213,140,246, 60,179,116, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 69,173,159, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,211,209,100,192, 64, 57, 80, - 64,100, 52,239,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190,157, 46,129,191, 47,142,239, 60,219,129, 7, 63, 40,203,124,189,122,175, 5, 62,139, 33,180, 61, 63, 8,162,191, 26,191, 75, - 61,189,191, 52,190,100,188,125, 61,112,222,131, 60,161,149,150, 61,202,188,127, 63, 82,141,219, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 58, 78, 34, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,195, 40,204,192, 22, 66,169, 64, 88, 69, 56, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 3, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 25, 69,168, - 62,124,123, 76,191, 32,238,100, 62,220,140,234, 61,120,159, 84, 61,244,254,187, 63, 59,215,103,190, 71,235,244,191, 73,172, 9, -190,165,228, 94, 62, 39,198,237, 61,180,166,232, 62,106, 45, 33, 63, 4,238, 32, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,104,255,128, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,124, 41,179,192, 92, 52,215, 64, 56,194, 1,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 4, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,175,191,249, 63, 67,210, 72, -190,255, 44, 91, 62, 97,232, 36,191, 70, 89,183,190,246, 37, 58, 61,211,174,112,189,119,174,231,191,119, 2,237, 62, 35,205,180, - 59,158,119,225, 59, 89,185, 62, 62,150, 41, 58, 63, 50,212,186, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 32,102, 78, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 66,215, 78,189, 17,102, 16, 64, 82, 64,251,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 5, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,158, 15, 40,191, 27, 48, 97,191, 41,181, 48, -190,160, 19, 31,189,153, 23, 91,190,110,243,100,190,164,169,182,191,120,129, 97, 60, 90,101,145, 61,186, 53,193, 62, 31, 65, 94, - 63, 45, 57,152, 61,248,240,117, 61, 61,128, 59, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61,137, 79,196, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 63,243,234,243,192, 50,199, 12, 64,118,173,246,191, 55, 81,192,191, 71,243,107, 63, 42,237, 98, - 62,214,163,235,190,183,206,197,190, 61,137,205,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 6, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,136,137,130,191,106, 7,101,190,155,249,249, 60,155,218,146, -188,184,212,179,189,201,215, 68,191, 61,244, 40, 61, 70,234,114,191, 1,226,154, 63, 91,139,119, 61,207, 64,202, 60, 89,106, 46, - 61, 13, 53, 30, 63, 89,222,236, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63, 87, 40, 6, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191, 54,176,174,191,187,173, 99, 64, 93, 31,209,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 7, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71,176, 89,191, 18, 55,214,190,223, 82, 67, 63, 50, 2,142, 61,202, 17,235, - 62,199,118, 51, 63, 72,125,129,191, 36,250, 86, 61, 90, 99, 70, 63, 25, 38,125, 62,129,144,101, 62, 91, 1,185, 62,121, 67, 60, - 62,148, 77, 32, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 35, 69, 21, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -192,100,131,238,191, 81,185,222, 64, 27, 50, 40,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 8, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 43,167, 61,225,210,242, 63, 30, 58,197, 63, 67, 8,229, 61,222,176,215, 63, 12, 15, 70, - 62,165,195, 80, 61,227, 72,218,191, 87, 66,188, 62,195,213,145, 60, 70,146,197, 63, 44,125, 83, 62,156,124, 64, 60, 10,144,125, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 64, 74,173, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,248, 77,226, -190,103,109, 12, 64,143,231,230,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,199,190, 61,137,204, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 9, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190,251, 62, 59, 62,132,207,154,191, 19,198,191,191, 25, 82,122,190,169,114,179,191, 46, 80,242,189,100, 92,161, - 62,188,103,125,191, 23,234, 0, 63, 22,140, 12, 63, 3,173, 53, 62, 78,233,187, 61,187,225, 77, 62, 68,112,203, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 89,205, 62, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 10, 80,129,192, 74,130,253, - 64,109,179,124,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 10, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 59, 71,176, 89,191, 18, 55,214,190,223, 82, 67, 63, 50, 2,142, 61,202, 17,235, 62,199,118, 51, 63, 72,125,129,191, 36,250, 86, - 61, 90, 99, 70, 63, 25, 38,125, 60,202, 2,215, 59,181,116, 38, 60,204,167,240, 63,113,223,193, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 35, 69, 21, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 55, 37, 73,191,210, 44, 92, 64, 12, 20,134, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 11, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 15, 7, 34, -190, 46,194,135, 62,148, 82, 36,191, 66, 22,185, 63, 53,135,211,190,172, 29,111, 62,229, 68,200, 62,140,167,253,190, 99,223,181, -190,176,226, 35, 61, 50,158,144, 62,230,247, 53, 62,236, 25,253, 61, 52,215,226, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,214,199,202, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,152,163, 4,192, 16,189,233, 64, 39, 29,148,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 12, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, - 62,239,235,123, 63, 33,108, 59,190,103,198,244, 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145,190, 63, 20,208, - 61,250,136,113, 62, 71, 45,109, 62,222,240,248, 62,125,172,108, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,213,219, 83,192, 77,221,119, 64, 90,157, 98,191, 55, 81,192,191, 71,243,107, - 63, 42,237, 98, 62,214,163,235,190,183,206,197,190, 61,137,205,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 13, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,225, 56, 63, 35,172,239,191, 4, 44, 92, -190,112,166, 88,190,176,149,229, 63, 6,184,233,191, 44,120, 91, 63, 20, 36,208, 63, 79, 84,165, 61, 89,145,190, 60,192,154,154, - 60, 43,233,206, 62, 0, 13, 68, 63, 87, 72, 51, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 32,131, 34, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,106, 39,118, 63,114, 29,130, 64,164,123,156,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, - 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 14, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 45, 97,119,190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, - 62, 73,195,242, 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, 63, 88,232,230,190,204, 53,130, 63, 54, 27,149, 62,133, 38,243, - 60, 53, 55,232, 60,143,130, 91, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,253,129, 53, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192,102, 71, 4,190,194,109,241, 64, 47, 39,108,191, 55, 81,192,191, 71,243,107, 63, 42,237,100, 62,214,163,233, -190,183,206,198,190, 61,137,204,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 15, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,105,157,127, 62,184, 8,148,191, 7,109,181,191, 68,194,177,190,220, 77,163, - 63,101,120, 58, 61, 25,105,241, 62, 86,197, 69,190,236, 78,214, 63, 46,136,126, 61, 22,203,152, 63, 61,161,132, 62, 79,196, 67, - 60,160, 22, 79, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 93,148,112, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63,214,224, 12,192, 5,182,225, 64,136, 59,246,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 24, 46,192,191, 43, 20, 41, 62,183,184,186, 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, - 63, 8,195,188, 62,238,211,234, 61,152, 36, 69, 62,145,106,235, 62,131, 28,211, 60, 46,255, 24, 60,139,165, 11, 63, 55, 88,113, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 92,158, 95, -192, 67,243,117, 64, 70,154, 16,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 17, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191, 4,175,102,190, 50,200,160, 63, 77,214,248,190,110,194,226, 61,198, 10,138, 62, 62,213,210, 61,253,163,141, - 61,160,130,106,191,101,229,201, 62, 50,145,103, 61,104, 55,112, 61, 9, 23, 14, 62,129, 82,208, 63, 40, 65,176, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,220, 81, 89, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 31,234, 87,192, 65,234,204, - 63,172,200,110,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 18, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 99,180,162, 62,145,169,127, 62,174, 95,114,189,223,121,169, 63, 73,190,173,190, 51, 72,118,190,162, 48,116,189,139, 98, 59, - 62,191,245, 77, 61,253,124, 75, 60, 48,252,197, 62, 62,176,163, 63, 72, 93,216, 60,166, 65, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 12, 69, 81, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,189,122, 76,191,102,243,238, 64, 93,253,158, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 19, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,218,139, 33, -190,222, 81,160,190,151, 71, 75,191, 88, 33, 47,190,128,174,152,190,107,218, 43,190, 66, 96, 40,190,113, 29,219,190,184,240, 89, - 62,204, 92,153, 62,135,159,101, 62,174,216,253, 62, 96, 99,217, 62, 50,171,104, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,207, 27, 5, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 67, 75,227, 61, 78,124, 48, 64,171,150,200,191, 55, 81,190, -191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,190, 19, 92, 62,147,203,188, - 62, 2,242, 19, 63, 95,138,223, 60, 24, 50,144, 63, 64,174,148,191, 11,158,196, 63, 64, 22,220,190, 19, 35, 98, 62, 44, 93,217, - 63, 58,115,191, 60, 2,198,121, 59,167,102,254, 62,132,100,178, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62, 27,176,189, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,139, 37, 24, 63, 62,231, 4, 64,179,205,174,191, 55, 81,188,191, 71,243,107, - 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,206,191, 80, 38,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 21, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,239,220, 87,191, 46,204,168, 61, 84, 95, 78, -191, 58,105, 8, 63, 43,245,231, 62,151,254, 91, 61,206,143, 77, 63, 42,139,177,190,196,107, 26,190,139,211,150, 63, 92, 23, 50, - 61, 15, 27,169, 60, 83, 43, 8, 61,189, 83, 59, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 49,221,121, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,225,247, 32,192, 81,175, 37, 63,198,254,248,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 22, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,130,132, 59,190,120,166,131,191,109,191, 15, 61,238,164,170, -190, 78, 93, 20,189,231,164,245, 62, 16,254,254,190,234,189, 61,189,116,167,116, 63, 16,175, 67, 61, 2,132, 66, 61,189, 37,191, - 63, 64, 5,173, 62, 0,181, 91, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63, 2, 93,129, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 61,165,110,200, 62,239, 43,183, 64,169,243,129,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 23, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49,218,173,191, 23,109,113, 62, 55, 16, 32,190,188,117, 54, 62,208, 20, 25, -191, 46,245,118,186,236,158, 72,191, 97, 10, 55, 62,183,128,140,190,146,230,177, 63, 66,109, 62, 61,170,159,244, 60,243,150, 79, - 62, 2,136, 69, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 48, 85, 96, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191,243,158, 12,192,104,237,244, 63,155, 34,138,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 24, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 49, 22,155, 62,165,232,223,191, 6,208,133,190,190,253, 93,190,194,234,190,191, 29, 89,239, -191, 23,110,134,191, 30,217, 8,190,205,159,107,190,185, 94, 18, 60, 92,106,228, 61, 35, 25, 23, 63, 93,111,136, 61,167,105,211, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,132,153,252, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 8, 74,118, -192, 1,240, 0, 64,108,123, 28,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 25, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,104,155,217,190, 29,164,215,190,179, 60,175, 62, 43,201,201, 61, 67, 60,100,189, 90, 42,171,191, 4, 85, 68, - 62,130,249, 67,190,133,199,230, 63,107, 14,149, 62,101,242,233, 61,181,120,181, 62, 43,136,231, 63, 4,241,245, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,108,179,252, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,231, 24, 26,191, 21,105, 44, - 64, 98, 32,186,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 26, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 49, 52,126, 63, 43, 9,201,190, 96,234,166,190, 37,210,182, 61, 54, 58,206, 63, 63, 1,231,191, 34,173,133,190,170,154, 5, - 63, 51,112, 93,191, 23, 61, 18, 62,138,189, 66, 62,210,103,114, 62, 62,128,117, 62, 7, 54, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,126,132, 33, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 5, 52,141,192, 49,103, 10, 64, 37,154,230, -191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 27, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 32, 96, 77, - 62,160,201,185, 63, 6, 3,160,190,248, 34, 11, 60,185, 53,206, 61,178,197,192, 63, 53,184,174,190,162,172,223, 62,224,136,109, -191, 61,173,142, 61,184, 47,132, 61,207,157,244, 62,225, 0,168, 62,189, 11,249, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,150,112,248, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,177, 45,136, 63, 99,253, 22, 64,155, 58, 8,191, 55, 81,190, -191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 28, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 55,202, 47,190, 89,235,249, -190, 92, 18,127,191, 32,129,146,190, 8,212, 7,190,171, 50,167, 62,123,120, 97,189,249,152,232, 62,149, 18,140, 61, 13,111, 37, - 63, 28,253,147, 62,184,184,231, 60, 58, 48, 48, 60,111, 78, 59, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 18, 61,115, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 57,255, 42,192, 65, 4,235, 64, 19, 7, 77,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 29, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,133,218,208,189,176, 10,116, 63, 10,237,186, - 63, 85, 61, 14,190, 38,219,182, 62,206,175,174, 63, 10,240, 47,190,114,232, 31,190,207,162, 91,190,193, 85,173, 61,128,255,228, - 61,172, 32, 76, 63, 5,152,147, 62,169,134,205, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 60,212, 38, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,137, 68,184, 61,226,177,204, 64,141,247,196,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 30, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,146,138,133,187, 8, 75,133, 62, 68,235, 28, 63,122,141,122, - 63, 92,117,116,190,125,147, 7,190,147, 49, 87, 63, 41, 88, 9, 63, 2,255, 63, 61,126, 44, 71, 63, 0,166,107, 62,154, 29, 23, - 61,165,214, 34, 61,236,130, 42, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,103,170,241, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 82,103, 22,191,201, 75, 73, 64, 0,247, 1,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,168,120,231,191, 7,154,179, 63, 48,180, 41,190,187,232,239,191,104, 35, 9, - 62,114, 8,222,190,177,143, 76,191, 28, 29,107, 62,234,112,210,190, 92,249, 9, 59,118,109, 73, 63, 4,155,168, 62,243, 2, 73, - 59,108,198,186, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,184, 4, 74, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191,246,241,194, 62,236,130, 87, 64,135,209, 50,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62,223,197,124,190,189,243, 32,190,140,213,199,191, 69,149, 13,190,199,235,221, 62,240, 79,159, -190, 14,202,113,190, 60,168,186,190,220,145, 5, 62,148, 8, 42, 62,219, 99, 49, 62,242, 73, 85, 61, 79, 14,127, 61, 67,141, 68, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,192,236,157, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189,149,228,224, -190,221, 13,233, 64,145,251,210,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,199,190, 61,137,204, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 33, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190,190, 19, 92, 62,147,203,188, 62, 2,242, 19, 63, 95,138,223, 60, 24, 50,144, 63, 64,174,148,191, 11,158,196, - 63, 64, 22,220,190, 19, 35, 98, 62, 44, 93,217, 63, 4,141,198, 62, 19, 71, 3, 61,174,186, 60, 62,129,146, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 27,176,189, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 89,120, 0,190,120,169,164, - 64,155, 78, 26,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,190,183,206,197,190, 61,137,202,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 34, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 94,201,118, 62,213,189,192, 62, 67, 27,142,190, 55, 93,214,190,131,154, 6,190,178, 48,133,190,192, 11,139,189,147,123, 39, -191, 57,130, 29,190, 33,253, 46, 63, 24, 89,224, 61,198,174,189, 61,101,152, 2, 62,128,237,143, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,117,122, 59, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 26, 80, 92,189,239, 3,232, 64, 99,210,182, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 35, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,153, 16,148, -191, 33, 1,224, 62,168,253, 43, 63, 35, 36,254,191, 19,255,124,190,138, 97, 70, 62, 6,109,188,190,223, 58, 64,189,189,121,154, - 62,170,126, 9, 62,126,248,115, 63, 12, 41, 84, 62, 4, 55,153, 61,152, 85, 62, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,106,244, 74, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 70,245, 80,192, 37,148,136, 64, 57,107, 41,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 36, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,249,246, 44, 62,140,102,200, - 63, 10,199,154, 63, 32,102, 40,191, 19, 10, 78,190,250,238,224,190,111, 13, 0, 61,187,232,243, 62, 99, 10,106, 62,221, 96,163, - 61,239,237,208, 61,210, 34, 10, 62,181,101, 62, 62,218, 22,205, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 25,143, 35, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 25,172,253,191,249,234, 68, 64, 73,217, 59,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 37, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,230,109,205,190,189, 47, 67,189,155,119,205, -191, 79, 53,238,191, 88,144,223, 62,146,163, 88,190,208, 99, 63, 62,130,235,236,190, 17, 10, 72, 63, 15,223,124, 62, 64,172, 12, - 62, 51, 24,160, 62,156, 49,145, 62,169,236, 26, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 72,237,254, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,192, 60, 63, 77,191,245, 70,192, 63,248,177,246,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 38, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 16,162, 50,190,219,180, 33,190,177,166, 24,191, 29, 8,234, -190, 48, 26, 24,190,115, 70,240, 63, 54,197, 0, 62, 75,201, 69,189, 10,174, 28, 63, 78,128, 81, 60,175,109,172, 62,214,135, 7, - 63, 9, 12, 59, 60,198,154,150, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,138, 50, 34, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 63,162,125, 6,192, 64,233, 63, 64, 86,167,147,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 39, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 11,120,234,190,253, 35,200,190,233,152, 2,191, 0, 38, 0,191, 36, 3,214, -190, 45,239, 3,191, 9,175,135,190, 42,130, 18, 63, 38,197,156,190,238, 37,181, 61,119, 49, 4, 60,224,251,119, 62, 47, 5, 94, - 63, 61,195,188, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,191,162, 89, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -192, 27, 96,184,191,179, 23,251, 64, 38, 77,193,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 32,231,177, 62,239, 89,150,190,188,156,128,191, 0, 45,225, 62,210,133,247, 63, 40,169, 51, - 63, 26,184,146,190,223, 39,209,191, 15,238,182,190,146, 63, 75, 61,213,161,166, 62,218,242,217, 62,191, 18, 39, 61,194, 74, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,129,236, 81, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 21, 0,185, -192, 14,241,137, 64, 61, 27,206,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 41, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190,213, 79,214, 63, 10, 19, 95,191, 56, 25, 60, 62, 10,193,193,190, 10,232,127,190, 93,126,162, 63, 7,169, 25, -190,221,209, 38, 62,186,214, 52,191, 41, 63, 21, 62, 27, 36, 58, 62, 28,151,245, 62,179, 23, 82, 62,177, 10,148, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 41,241, 98, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189, 57, 80, 64,191,166, 80,193, - 64,123,172,242,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 42, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,232,174,160, 61,164, 99, 64, 63, 12,108, 41,191, 50,126,106, 62,124,117, 66, 63, 82, 54,134, 62,191, 55, 38,190,197,232,121, -189, 70,203,188,191, 51, 88, 26, 62,170,225,199, 62, 23, 67,114, 62, 33, 56,202, 62,184,224, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,138,213,216, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,219,106,202, 63,127,216, 17, 64,173,251,140, -191, 55, 81,190,191, 71,243,110, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 43, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,213, 79,214, - 63, 10, 19, 95,191, 56, 25, 60, 62, 10,193,193,190, 10,232,127,190, 93,126,162, 63, 7,169, 25,190,221,209, 38, 62,186,214, 52, -191, 41, 63, 21, 63, 79,203, 10, 62, 32, 14,104, 60, 44,238,252, 60,175,180, 55, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 41,241, 98, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 91, 39,111,191,150, 81, 64, 64, 15, 68, 89,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 44, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0,212,130,191, 38,161, 15, -190,123,203,131,191, 3, 48,207, 63, 64, 6,112,190, 34, 53,137,191, 6,202,175, 62, 19,241, 66,190, 85,105,119, 61,146,246,149, - 60, 25, 88, 25, 63, 25, 74, 85, 62,196,185,199, 59,249,179,210, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 90,223,198, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 40, 17,231,190,153, 44,141, 64,161,123, 68,191, 55, 81,190,191, 71,243,107, - 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 45, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 68,219, 69, 62, 74, 75,190, 62,229,129,250, -190,210, 78,198,188, 59, 63, 65, 62,214,173,173, 62, 85,159, 18,189,185,160, 25,191, 46,193,169,190, 77, 21,177, 63, 32,133,202, - 61, 36,163, 25, 60,225,136, 45, 62,156, 71,133, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61,141,208, 22, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 95, 50,191,249,101, 34, 64,132, 96,176,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 46, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59, -190,103,198,244, 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145,190, 63, 20,208, 62,138, 45, 62, 61, 30,142, 35, - 61,128, 78,173, 63, 32,246,170, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,109,210, 2, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 6,133,111,191,225,152,167, 64, 32, 16, 84,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 47, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,241, 57,184, 62,173,244,209, 61,188,195,202, 63, 79, 10,229,191, 34,223, 15, -190, 40, 65,171, 61, 38,228,158, 63, 12,225,187,189, 13,196,198,191, 14,253,185, 61,217,107,245, 62,174,147,253, 62,218,232,227, - 62, 0, 80, 70, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,183,168, 8, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -190,228, 99, 80,191, 51, 59, 44, 64,133, 75,221,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,190,183,206,197, -190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 48, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 23,191, 52, 62, 82,209,247, 62,204, 21, 34, 63, 43, 58, 21, 61,139, 3, 1, 61,135,159, 52, -189, 36,117, 30, 62,244,123,230, 62,185,104, 79, 63, 33, 73, 17, 62,213,208,117, 62, 76,118,118, 62, 5,254, 32, 62,128,245, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 4,246,179, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 74,101, 85, -191,105,185,166, 64, 36,141, 18,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 49, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 3,157,221, 62,215, 81, 67, 63, 5, 46,135,191, 9,108,121,190, 16, 83, 37,190,130,244, 37, 62,216, 18,191, - 63, 53, 44,221,189,162,136,153,190,252,138, 80, 61,102,214,221, 63, 25, 22, 50, 62,157, 42,139, 61, 30,113,164, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 26,208,145, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,218,234,122,191,232,177, 50, - 64, 42,174,108,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 50, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 59, 41, 98, 61,252, 70,236,191, 25, 96, 77,190,154,195, 33,190,242,119, 31,190,204, 79,125,190, 18, 53, 23,190,214, 31,102, -190,199,174,165,188,169,105, 48, 62, 8, 50,229, 62,148,251,227, 62,206, 65,133, 62, 49, 82, 75, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 5,230, 44, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,206,106,254, 62,150, 36,205, 64,137, 42, 96, -191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 51, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 23,191, 52, - 62, 82,209,247, 62,204, 21, 34, 63, 43, 58, 21, 61,139, 3, 1, 61,135,159, 52,189, 36,117, 30, 62,244,123,230, 62,185,104, 79, - 63, 33, 73, 17, 62,231, 15, 87, 62,207,237, 49, 61,141, 43,254, 61,150,225,226, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 4,246,179, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,167, 61,200,191,171, 5,119, 64,147,214, 86,191, 55, 81,190, -191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 52, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 70, 39,111,188,218,103, 91, - 63, 30, 24, 44, 62, 12, 81, 28, 63, 16,129, 26, 61,162,153,215,191, 31,203, 11, 63, 2,132,222,190,154, 4, 26, 62,100,112,202, - 62,214, 36,216, 60,122, 85,172, 60,142,247, 44, 63, 12,140,132, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,115, 61, 48, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,251, 14,194,190,105,213, 44, 64,109,188,165,191, 55, 81,190,191, 71,243,107, - 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 53, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 3, 49,173, 63, 9,133,178, 63, 16, 18,104, - 62,186, 16,159, 62,245,147,183, 62,111, 88,220, 63, 2, 25,220,191, 77, 44, 80, 62,152,136, 76, 61,176,242,126, 62,155, 13,239, - 62,234, 17, 40, 62, 13,128, 92, 61,208,130,226, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 62,208,147, 65, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 47,102, 63, 45,212, 64, 64,127, 35, 61,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 54, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 48,164, 8,191, 38,100, 32,190,157,157,163, 61,167, 78, 10, - 59, 54, 8, 4,190,147,155,139, 63, 50, 41, 11, 62,140,101, 27, 63,110,237,241, 59,179,188, 18, 62,165, 31, 74, 63, 37,208,207, - 60,141,227, 74, 60, 76, 28, 8, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62, 80, 24,129, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191, 83,203, 10,192, 29, 15,133, 64, 42, 82,237,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 55, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,232,194, 41, 63, 35,110,156,190, 75,200,233,191, 22,158,170,189,193,122, 83, -189,149, 58,217,191, 18, 15, 80,189,145, 37, 66,189,219,184, 98,191, 86,185, 70, 61,239,150, 21, 62, 24,193,130, 62,217, 71, 46, - 62,158,114,141, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 75,231,122, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63,102, 71, 47,191, 44, 13, 16, 64,156,187, 24,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197, -190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 56, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,190, 61, 40,120,191, 15,196,150,191, 54,219,159, 62,191,195,234,190,122, 96,104,191, 74, 71,193, -190, 56,230, 15, 61,203,156, 61, 61,177, 39,227,190,193,222, 25, 63, 13,206,178, 60,237,101,144, 60,198,227, 16, 62,201, 30, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,189,137, 74, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,252,210,140, -191, 44, 58,216, 64,149,217, 98,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,190,183,206,197,190, 61,137,202, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 57, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 38,152, 86,191, 17,225,169,189,140,217, 57,190,254,124, 67, 62, 17, 65, 13, 63, 15,204,229, 62,241,148,180, -191, 73,210,175, 63, 21,161,182,188,169,222,186, 63, 4,174,235, 61,156,216,125, 61,115,228,114, 62,176,239,124, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,165,104, 86, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 46,210,181,191,135, 4, 59, - 64, 44, 99,164,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 58, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 45, 97,119,190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, 62, 73,195,242, 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, - 63, 88,232,230,190,204, 53,130, 61,201, 69,154, 63, 3,143, 74, 62,162, 10,155, 61,146, 21,186, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,253,129, 53, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 64,235, 64, 63,147,210,203, 64,185, 32,205, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 59, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,136,137,130, -191,106, 7,101,190,155,249,249, 60,155,218,146,188,184,212,179,189,201,215, 68,191, 61,244, 40, 61, 70,234,114,191, 1,226,154, - 63, 91,139,119, 63,109,168,135, 61,112, 44, 87, 59,115, 72,106, 60, 24, 90,214, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 87, 40, 6, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,185,160,192, 38,235,197, 63,245,221,182,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 60, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,241, 54,241,190, 60, 75, 25, -190,166, 31,137, 63, 76,162, 26, 62,180, 23,214,191, 22, 28,134, 62,184,125,189, 63, 49,143,170, 62,208,100, 42, 63, 12,182,201, - 61,103,123, 85, 62, 90, 65,230, 63, 29,215, 33, 61,233, 5,124, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 78, 6,233, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,247,118,132,192, 8, 66, 87, 64, 20, 88, 93,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 61, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,157,149,183, 62,150,241,169, 63, 5, 72,210, -191, 61, 98,196,191,103, 43, 94, 62, 13,249,141,190, 28, 40,108,189, 89,143,180, 62,180,169,159, 63,102,210, 50, 61,186,245, 15, - 62,140,211,252, 62,252,184,237, 62, 15,107,164, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,126, 53,234, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,190, 2,252, 96,192, 63, 32,189, 64, 40,176,249,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, - 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 62, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,185,185,227,190,133, 55, 69, 62,246,101, 76,191, 65, 32,146, -190, 47,142, 11,191, 16,240,207, 60,250, 47,178, 62,135, 12,147,190,192,130,250, 63, 63,224,182, 61,141,251,109, 61,135, 15,209, - 62,212,122,152, 62,230, 66,150, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,201, 22,194, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192, 60, 37,186,192, 19, 36,209, 63,212,102,200,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 63, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,253,116,133, 63, 23,178,160,191, 32, 78,114, 61,221, 97, 57,189,236,244,191, - 62,214, 56,206,191, 40,142, 77, 61,161, 48, 31, 63, 7, 95, 82,190, 62, 70,244, 59,141,146,144, 62,182,189, 24, 63, 34, 24, 12, - 59,183, 33,242, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 90, 4, 51, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 63,155,165, 62,191,200,188, 35, 64,140,201,156,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 64, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62,205,198, 68, 63, 99, 21, 50,190, 86,246, 18,189,178, 24,237, 62, 74,177,229,190,174, 94,233, -189, 17,113, 14, 62,211,148,144,190, 80,182,157,191, 66,214, 18, 62,182,112, 54, 61, 2,202,156, 61, 40,146, 65, 63, 18, 18, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,124, 84,229, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 48,150, - 62,211, 14,133, 64,175,209,120,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 65, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 60,181, 0, 30, 63, 39, 21,183,191, 42, 28,174, 62,185,254,206, 61,180,101, 60, 62,162,164,224,191, 78, 22,169, -190,146,164, 15, 62,188, 47, 66,191, 63,255,233, 63, 76, 61, 26, 60,171,234,214, 60, 47,187,230, 62, 46,146,126, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 41,195,113, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 98,144,196,191,112,190, 62, - 64,138,224,153,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 66, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190,148, 80,255, 63, 5,138, 17, 62, 38, 16,171,191, 73, 50,107, 63, 32,126,214, 62,148, 14,143,191, 4, 31,183, 62,145,152, 70, -189, 89, 32, 21, 62,100,239, 63, 62,220,212, 51, 61,238, 96, 49, 61,205,246, 1, 62,180, 22, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76, 33,247, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 2,243, 80,191, 91, 84, 18, 64, 77, 0,110, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 67, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 69,146, 49, -190, 69,123,236,191, 26,188,179,189, 47,182,207,191,105, 14, 96,190, 31,120, 55, 62, 18, 41,138,189,183, 73,210,189, 57, 99,105, -190,137,155, 32, 62, 79,143,112, 62,220, 36, 13, 62,119,171,207, 62, 0,124,168, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,199,151,184, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 34, 81,228,192, 39, 55,178, 64, 68, 36, 87,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 68, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 3,148,230, 62,239, 68,224, - 62,241, 64, 72,191, 11, 35, 71,191, 31,202,248, 62,182, 98, 68,191, 48,127, 18,189, 26,108,158,190,173, 93,145,191, 16,155,161, - 61,244, 72,144, 61,173, 98,152, 62,154,243, 16, 62,252,162, 38, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62,245,111, 69, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,132,206,226,191,254,157,153, 64, 57, 78, 61,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 69, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,217, 64, 45,190,213, 24,151, 61,187,174, 94, - 63, 76,136,102, 63, 32, 1, 27,189,162, 95,236,191, 29, 18,124,190,155, 78, 75,191, 43,134,124,190,184,202,174, 62, 35,138, 49, - 62, 85,209,237, 62,186, 75,126, 62,137, 6,113, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 61, 76,100,111, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 62,237,163,228,192, 58, 20, 55, 64, 64,122, 9,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 70, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189, 55, 95, 82,190,181, 21, 43,191,101, 3,230, 62,137,248, 87, - 62, 75,208, 4, 59,115,115, 0,190, 95,196,100, 62, 83, 15,191,191, 81,222, 84, 62,169, 58, 36, 61,163,215,187, 61, 92,207, 90, - 62,152,248,188, 63, 17, 59,182, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,112,119,230, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191,148, 59,202,191, 56,242,188, 64,113,111,189,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 71, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,192, 21,202, 63, 8, 22,216, 63, 66, 84,188, 62,186, 70,158, 62, 98,211,240, - 62,155, 7,124, 62,246,134, 10,190, 79, 16,110,189,252,197,248, 63, 39,188, 81, 62,169,204, 42, 62,154,195,204, 62, 51,225,146, - 62, 66,254,125, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 81, 26,123, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -191,252,179, 34,191,184,102, 86, 64, 51,174,169,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 72, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,190,144, 50,232,191, 50, 31,207,191, 40,203,179,189, 45, 99,214,190, 34,153,109,191, 10, 94,239, -190,212,186,115,190, 19,234, 42,191, 97, 26, 72, 61, 99,105,122, 62, 21,210, 46, 62,186, 32,250, 62,178,126,195, 62, 16,238, 85, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,124,240,131, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 77,244, 1, -190,163, 52, 51, 64, 62,234, 30,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202, -191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 73, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,112, 41,126, 61,164,166, 56, 61,240, 4, 91, 62,161,172, 15,190,191,126,106, 63, 64, 33,117, 62,184,227,130, -190,244, 20, 92,189,180,168,210,191, 43, 25, 60, 61,198,246, 89, 63, 46,130, 30, 62, 54,241,223, 61, 46, 41,221, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,107,196,190, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,122, 27,255,191,133,229,179, - 64,149, 39, 66,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 74, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 24, 46,192,191, 43, 20, 41, 62,183,184,186, 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, 63, 8,195,188, 62,238,211,234, - 61,152, 36, 69, 62,145,106,235, 62,239, 4,216, 61, 21,100,235, 61, 20, 73,174, 62,235,197, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,151, 66, 20,192, 62,139,208, 64, 5,118, 98, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 75, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 32,160,159, -191, 52, 39,190,191, 9,138,142, 62,224, 13,138, 62,242,218,166, 63, 26, 71, 93, 62, 52, 22, 36, 62,124, 52,231,190,192, 91,165, -191, 86,111,148, 61,120,101,212, 61,221, 26, 72, 63, 22, 82,158, 62,122, 14,241, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 22, 96,195, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 46, 63,224,191,107,105,222, 64,132,191,198,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 76, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 55,202, 47,190, 89,235,249, -190, 92, 18,127,191, 32,129,146,190, 8,212, 7,190,171, 50,167, 62,123,120, 97,189,249,152,232, 62,149, 18,140, 61, 13,111, 37, - 62,204,238, 89, 62, 39, 90, 10, 62, 6,156,123, 62,156, 22, 98, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 18, 61,115, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,234,148,250,192, 97,179, 11, 64, 3,215, 16,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 77, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,248,227,177,190,192,134,160, 62,184,159,155, - 63, 51,157,105, 63, 54, 56, 2, 62,182,126, 88,187, 4,207,108, 62,198,216, 38,191, 73, 66,140, 61,248,126,139, 60,119, 26,251, - 60,150,207, 34, 63, 20,176,170, 62,197,120,225, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 62,216,234,208, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,135,177,202,192, 86,220,150, 63,239, 9,144,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 78, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 18,122,201,190,163, 68,155,191, 39, 36,236,190,194,182,221, -190, 98, 47,217,190,230, 46, 97, 62,134,236,197, 60,187, 40,216,189,179, 92,111, 63, 54, 17, 71, 61, 5,169, 87, 61, 92,116,120, - 63, 38,253,179, 62,133,192,225, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 60,154, 58,100, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,192,108,105,213, 62,223,145,125, 64, 82,182,192,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235, -190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 79, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 32,244,195,190,218,189,174, 62, 55, 11,163,191, 95, 75,157,190,243,155, 33, -191, 90, 86,180, 62, 86,237, 57,190,126,198,226, 61,101, 34, 30,190,180,239, 93, 61,204, 82,206, 63, 89,113, 44, 61, 23, 63, 63, - 60,100, 33,220, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 50, 63, 6, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 62,243, 23, 76,191,166,133, 46, 64,134,153, 78,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,190,183,206,197, -190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 80, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 49,218,173,191, 23,109,113, 62, 55, 16, 32,190,188,117, 54, 62,208, 20, 25,191, 46,245,118, -186,236,158, 72,191, 97, 10, 55, 62,183,128,140,190,146,230,177, 62,190, 2,159, 61,193,141, 29, 61,214, 93,214, 62,220, 2,164, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 48, 85, 96, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,214,192,130, -192, 73, 57,182, 64, 23, 83,175,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 81, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,191, 34,172,206, 62,187, 79, 64, 62, 11,197,140, 63, 42,135,199, 61,148, 91,100, 60, 25, 75,123,189,232,126, 54, -189,220,190,210, 62,186,158, 9,190,225, 62,182, 61, 84,103,211, 61,115,194, 92, 62,253,216,148, 62,201, 34, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,162,103, 38, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192,133, 4,122, 62,128,136,109, - 64, 58, 58,136,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 82, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62,137,206,147, 63, 11,207,234, 62,225,144,195, 63, 40,225,162,190,148, 69, 24, 61,190,238, 50,191, 86, 31, 13, 63, 71,106,217, - 62, 1, 60,247, 62,136,250,162, 58,156, 80, 70, 63,108,100,142, 61,153, 72, 15, 58, 17, 35,116, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60, 41,199,174, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 12, 40,132,192, 1, 32,102, 64, 95,178,222, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 83, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 95, 57,157, - 62,214,148,238, 62,109,249, 87,189,204,220,227,189,221,118,238,191, 19,162,121,191, 48, 50,203,190, 80,232, 58,191, 8,100,141, - 63, 19,142,229, 62, 88,196,223, 61,237, 94,134, 62, 97, 5,141, 62,231,195, 43, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 15, 11, 75, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 80,109,211,192, 20,210, 96, 64,103,253,246,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 84, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,133, 32, 88,190,189,201, 13, - 63, 66, 43, 55, 62,239,254, 76, 62,179,163,254,188,171,181, 15, 60,196, 8,130,191, 14, 27,214,190,128, 32, 86,190,208, 27,190, - 62, 53,196, 69, 61,135,184,136, 62, 35,250,240, 63, 24,153, 34, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62,234, 93,224, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,147,142,240,190,166, 7, 43, 64,130, 69, 61,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 85, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,249,246, 44, 62,140,102,200, 63, 10,199,154, - 63, 32,102, 40,191, 19, 10, 78,190,250,238,224,190,111, 13, 0, 61,187,232,243, 62, 99, 10,106, 62,221, 96,163, 62,206,243, 56, - 62,159,170,109, 62, 2,145,224, 62, 32, 50,211, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63, 25,143, 35, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191, 89,254, 2,192, 85,197,195, 63,254,197,176,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 86, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,204,125,122, 63, 46, 10, 37,190, 26, 71, 69, 63, 24,168,130, -190, 36,105,117, 63, 32,220,144, 62,231,167, 11, 62,179,145,151,190, 36, 72, 33,191, 50, 67, 42, 61, 11, 3,111, 61, 76, 2,241, - 63, 28,181,231, 62,155,179,103, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,188,186,244, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191,253, 46, 24, 61,214,126,200, 64,125, 1,248,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236, -190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 87, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,181,218,171, 63, 80,100,162,190,175, 18, 86,190,157, 51,142,191, 4, 35, 18, - 62,210,113,207, 63, 11,170, 0,190,165,126,134, 62, 59, 47,141,191, 62,163,104, 62,181,251, 18, 62,242,163,225, 61,191, 98, 90, - 61,158, 33,220, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,104, 76, 83, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -192, 94, 18,115, 61, 49, 61,112, 64, 71,153, 90,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197, -190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 88, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,112, 41,126, 61,164,166, 56, 61,240, 4, 91, 62,161,172, 15,190,191,126,106, 63, 64, 33,117, - 62,184,227,130,190,244, 20, 92,189,180,168,210,191, 43, 25, 60, 61,190,188,141, 63, 68,157,118, 61,224,119,105, 60,239,129,112, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,107,196,190, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,141, 34, 38, -192, 39,140,222, 64, 25, 55,182,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 89, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 85, 40,193,190,146, 79,120,190,203,249, 68, 62,131,217,207, 63, 22, 65,229, 63, 63,104,120,189,124,135,173, -190,190,179,131, 62,171, 81,208, 63, 69,132,211, 61,189, 6,122, 62, 23,195, 58, 62,254,114, 6, 62,134,106,189, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 20,102,179, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 63, 14,149,191,165,204, 64, - 64, 24, 96, 12,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 90, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 30, 81, 54, 62,223, 39,157, 63, 11, 30,214, 62,186, 51, 76, 62, 83,228,206, 61, 0,146,209, 63,121,106, 22,187, 6,124, 44, -187, 71,233,128, 62,173,190,218, 61, 83, 67, 14, 63, 4,186,192, 62,197,206, 39, 61, 50,159,178, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60, 52, 19,208, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 22,180,183,192, 4,173,126, 64, 8,189,240, -191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 91, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 20, 59,104, - 63, 17, 36, 30,190,252, 57,112, 62,162,101, 32, 62,160, 6,139, 61, 80,160, 57, 61,245,243,109,190,224, 18, 41,188,227,154,182, -190,139,196,238, 61,131, 49,133, 62,167, 33,130, 63, 5,225,160, 61,177, 59,124, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 56,166, 20, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 97,160, 35,191,163,220,129, 64,141,248,194,191, 55, 81,190, -191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 92, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,157,149,183, 62,150,241,169, - 63, 5, 72,210,191, 61, 98,196,191,103, 43, 94, 62, 13,249,141,190, 28, 40,108,189, 89,143,180, 62,180,169,159, 63,102,210, 50, - 62,206,174, 78, 61, 93,159, 68, 61,118, 84,160, 62,246,211, 54, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,126, 53,234, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 18,223, 4,191,140,169,155, 64, 57, 18,151,191, 55, 81,190,191, 71,243,109, - 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194, 93, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 44, 63,186, 62,136,104,134, 63, 32,117, 44, -190,147,227,178, 63, 90, 77,254,190,175,117, 0, 62,167, 69,119, 61,138, 73,238, 62,189,211, 58,191, 37, 28,210, 62, 21, 96,245, - 62,227,104, 35, 62,154, 62, 83, 61,222,164, 64, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 62,151, 27,130, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0,191,179,193,100,192, 78,111,251, 63,228, 64,166,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, - 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,194, 94, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,101,129, 63, 0, 90,237,190,239,125,104, 63, 3, 31,131, -190,212,160,200, 63, 27,217,115,190, 6,189, 55,190, 22,223,131,190,223,241, 4,190, 0, 70, 4, 61, 35,242, 37, 61,171,214,204, - 63, 46, 25,175, 62, 72,177, 82, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 62,202,249,184, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0,191,124, 90, 93,191,212, 48,113, 64, 74,208, 56,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234, -190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 95, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,190,103,198,244, - 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145,190, 63, 20,208, 62, 81,178,187, 62,108, 57,176, 62,153,177, 93, - 62,135, 88,108, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2, - 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -192, 33,231,251,191, 59, 2,132, 64, 66,162, 78,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200, -190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 96, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 24, 46,192,191, 43, 20, 41, 62,183,184,186, 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, - 63, 8,195,188, 62,238,211,234, 61,152, 36, 69, 62,145,106,235, 62, 30, 15,217, 63, 4,209,227, 62,117,148,178, 61,178, 39,218, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,138,185, 2, -192, 41,128,191, 64, 97,193,139,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199, -191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 97, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62,168,120,231,191, 7,154,179, 63, 48,180, 41,190,187,232,239,191,104, 35, 9, 62,114, 8,222,190,177,143, 76, -191, 28, 29,107, 62,234,112,210,190, 92,249, 9, 61,250,196, 0, 61, 62,120, 79, 62, 31, 12,195, 63, 44,252,202, 0, 0, 0, 0, - 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,184, 4, 74, 0, 0, 0, 0,255,255,255,255, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,243, 63,242,191,159,176, 86, - 64,111,150,245,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 98, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 58, 26,166, 62,159, 70, 1, 63, 2,111,113,190,173,187,235, 62,237, 51,116, 62,247, 53,130,190, 26,199,243,189,172, 88,235, - 62,244,115,118,191, 5,147, 34, 62,158, 77,217, 62, 72,131, 43, 62, 68,208,119, 62,155, 8, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,110,152,253, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 48,178,198, 62, 52, 39,138, 64,149,252, 39, -191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194, 99, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,210,167, 41, - 62,139,172,194, 63, 35,220,250,191, 22,182, 30, 61,136, 3,122,190,176,164,109,190,147,153, 30,188, 10,248,255,190,160, 90,234, -190,205,241, 89, 63, 19, 71, 62, 62,107,215,111, 61,138, 71, 63, 62, 1,231,243, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, - 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 77,227, 37, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,206, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, - 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 84,231, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 15, 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,207, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,219, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, - 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,208, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223, 63, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,168, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,251, - 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 59, 62, 65,155,142, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,209, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, - 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,255, 63, 2, 71,186, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,255, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,199, 61,124,224, 15, 63,127,101,123, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, - 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 15, 63,187,172,163, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 84,255, 62,124,224, 31, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,210, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,243, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, 61,124,223,251, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 5, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,180, 62, 14, 62, 8, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,142, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,211, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,135, - 61,124,224, 7, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107, 61,197,143, 11, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,104, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,137,251, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,231, - 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,212, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, - 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,213, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, - 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,251, 63,127,101,125, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 5, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 8, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,142, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,214, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15, 63, 2, 71,188, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 18, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,152, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 31, 62,124,224, 34, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,215, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,223, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,132, 61, 14, 62, 3, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,252, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,207, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,169, - 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 50, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,216, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,143, 62,131,146, 56, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,250, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 4, - 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 11, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 43, 62, 65,155,146, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 26, - 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,217, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 87, 7, - 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,199, 60,124,223,255, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 71, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, - 61,197,143, 11, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 11, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,218, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, - 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,239, 63,127,101,127, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,184, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,135, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,219, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 71, 59,124,223,239, 62,131,146, 58, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,120, 61, 14, 62, 2, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, - 61,124,224, 17, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,165, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 48, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, - 62,124,224, 28, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,220, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 21, 43, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, - 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,186, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,221, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, - 61, 14, 62, 3, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 17, 63,127,101,125, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 53, - 62, 65,155,148, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 10, 62,124,224, 29, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,222, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 71, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 15, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 27, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,223, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,219, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, - 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 27, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,224, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,247, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 59, 62, 65,155,138, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,225, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, - 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,188, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, - 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 11, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,226, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 71, 60,124,223,223, 63, 2, 71,189, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,247, - 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 7, 63,127,101,127, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 11, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,145, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,227, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, - 61,124,224, 7, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 11, 63,158, 2, 82, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, - 62,124,224, 25, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,228, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 84,135, 59,124,224, 63, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,224, 55, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 17, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 30, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,203, 61,197,143, 24, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 18, - 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 55, 62, 65,155,155, 63,216,177,183, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 36, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,229, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, - 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, - 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,230, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 39, 61,124,224, 15, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 15, - 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,163, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 31, 62,124,224, 31, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,231, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, - 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, - 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,232, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,191, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,247, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127, 72, 61, 14, 62, 0, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 14, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 27, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,251, 62,124,224, 27, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,233, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, - 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,223, 63, 2, 71,186, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,184, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 31, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,243, - 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,188, 62, 14, 62, 7, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 17, 62,124,224, 22, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,234, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,255, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,235, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 71, 59,124,223,255, 62,131,146, 58, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, - 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 19, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,170, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 56, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 13, - 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,236, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,224, 63, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,171, 61,197,143, 7, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 11, - 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 19, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,237, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, - 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85,103, 61,124,223,255, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, - 62, 65,155,143, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,143, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,238, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 27, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 19, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,155, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 31, 62,124,224, 35, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,239, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, - 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,255, 63, 65,123,219, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,187, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, - 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, 62, 65,155,143, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,240, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, - 63,127,101,128, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 75, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 29, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,241, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,231, 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, - 61,197,143, 19, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,149, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 33, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,242, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,215, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144, 61, 14, 62, 7, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,251, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,207, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,166, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 45, 62, 65,155,147, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 8, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,243, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, - 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,142,255, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,139, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, - 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,244, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 13, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,245, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,246, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,255, - 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 83,135, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,239, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 84,135, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20, 75, 61,197,142,255, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127, 88, 62, 14, 61,255, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,219, 62, 65,155,135, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 84,223, 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,247, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, - 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,137, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,248, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,127, 62,131,146, 56, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,251, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 3, - 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 8, 63,158, 2, 80, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 10, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 27, 62, 65,155,143, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 24, - 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,249, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, - 59,124,224,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 63, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 15, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 31, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, - 61,197,143, 27, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 23, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,157, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 37, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,193,250, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 87, 7, 59,124,224, 15, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85,135, 60,124,224, 19, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,232, 61, 14, 62, 12, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 28, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 25, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,200, 62, 14, 62, 19, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,155, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 35, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,251, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,224, 63, 62,131,146, 58, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 3, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, - 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, - 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,252, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,224, 33, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 29, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 11, 63, 65,123,221, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 24, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 21, 43, 61,197,143, 24, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 18, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,157, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 37, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,193,253, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,193,254, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 84,167, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, 61,197,143, 15, - 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,143, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 84,247, 62,124,224, 23, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,193,255, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,215, - 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,255, 63, 65,123,219, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,223, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,174, - 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 57, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 12, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 0, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, - 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 75, 62, 65,155,147, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 31, - 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 1, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, - 59,124,223,191, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15, 63, 2, 71,188, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, - 61,197,143, 17, 63,158, 2, 83, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 14, 63,187,172,165, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,146, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 26, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 2, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,139, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 19, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 3, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, - 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,251, 61,197,143, 3, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 6, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,140, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, - 62,124,224, 21, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 4, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 84, 7, 59,124,223,127, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,235, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 5, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 6, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,224,255, - 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 47, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 84,231, 61,124,224, 63, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 47, - 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,167, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 84,255, 62,124,224, 51, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 7, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,135, 59,124,224, 31, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, - 60,124,224, 31, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 16, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,215, 61,197,143, 22, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,172, - 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 53, 62, 65,155,151, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 32, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 8, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,136, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, 61,124,223,255, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 59, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 23, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 9, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,191, 63, 2, 71,186, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,231, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, - 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 7, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, 62, 65,155,145, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 84,255, 62,124,224, 26, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 10, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,143, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 11, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,191, 59,124,222,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,229, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,154, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, - 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,232, 61,197,143, 7, 63,158, 2, 82, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,182, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 65, 62, 65,155,139, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 16, - 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 12, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,224, 31, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 13, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,224,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84,135, 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, - 61, 14, 62, 47, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 47, 63,127,101,125, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, 61,197,143, 47, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, - 62, 65,155,167, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 49, 63,245, 17,139, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 14, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, - 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 84,167, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107, 61,197,143, 11, - 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,104, 62, 14, 62, 9, 63,187,172,163, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,251, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 84,239, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 15, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 15, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,171, 61,197,143, 31, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, - 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,159, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 39, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 16, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,255, - 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 67, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 19, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 17, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 7, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, - 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 5, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,138, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 18, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,168, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 19, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,224, 15, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, - 61,124,224, 19, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 17, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 14, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, - 62,124,224, 30, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 20, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 83, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 71, 60,124,223,191, - 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 40, 61, 14, 61,223, 63, 65,123,218, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,223,239, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,155, 61,197,142,255, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,128, 62, 14, 61,255, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,131, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,243, 62,124,224, 15, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 21, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84,135, 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, - 61, 14, 61,239, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,223,255, 63,127,101,124, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,120, 62, 14, 61,255, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,251, - 62, 65,155,131, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,239, 62,124,224, 11, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 22, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 39, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 23, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 39, 62,124,224, 27, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 23, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, - 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,239, 63, 65,123,221, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85,103, 61,124,223,255, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 21, 43, 61,197,142,255, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, - 62, 14, 62, 3, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,135, 63,216,177,186, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 19, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 24, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 91, 62, 65,155,151, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 27, - 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 25, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, - 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,191, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,231, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,215, 61,124,223,231, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, - 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 1, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,135, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 84,251, 62,124,224, 15, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 26, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 83, 7, 59,124,223,191, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,135, 60,124,223,239, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 62, 3, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,187, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,152, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, 62, 65,155,145, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 27, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,224, 63, 62,131,146, 56, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 47, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 15, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, - 61,124,224, 29, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 24, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,155, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, - 62,124,224, 35, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 28, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, - 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 21, 43, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 15, - 63,187,172,166, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,150, 63,216,177,186, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 30, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 29, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 15, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 62, 11, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 23, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 33, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 30, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,191, - 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15, 63, 2, 71,188, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 39, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 17, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 14, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 23, 62,124,224, 34, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 31, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,103, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,191, - 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144, 61, 14, 62, 15, 63, 65,123,219, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 3, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,223, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,174, - 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 32, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,191, 62,131,146, 59, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 3, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,128, 8, 61, 14, 62, 4, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 18, - 63,127,101,128, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 14, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 91, 62, 65,155,149, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 26, - 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 33, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,191, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,247, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, - 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,160, 62, 14, 62, 7, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 34, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 87, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 40, 61, 14, 62, 15, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 27, 61,197,143, 31, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,208, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,163, - 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 43, 63,245, 17,140, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 35, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, - 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, - 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 36, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,207, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,244, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,254, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 21, 11, 61,197,143, 5, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 9, - 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 25, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 37, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,241, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, - 61, 14, 61,253, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 11, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 12, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, - 62, 65,155,146, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 27, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 38, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,199, 59,124,222,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,247, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,160, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 11, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,231, 61,197,143, 15, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 61, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 14, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 39, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,203, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, - 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,137, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 40, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,215, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,140, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,251, 61,124,224, 15, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 61, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 41, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, - 59,124,224, 13, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,188, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 9, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 22, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, - 61,197,143, 16, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 14, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,148, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 30, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 42, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,199, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,231, 60,124,223,159, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144, 61, 14, 61,231, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,217, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,175, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 56, 62, 65,155,140, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 21, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 43, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,224,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 63, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,128, 72, 61, 14, 62, 31, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85,103, - 61,124,224, 47, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 39, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,248, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138,139, 62, 65,155,163, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 55, - 62,124,224, 43, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 44, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,219, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, - 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,139, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 45, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84, 71, 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, - 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255, 63,127,101,125, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,187, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, - 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 19, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 46, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 23, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,251, 61,197,143, 7, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 19, 62,124,224, 19, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 47, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,199, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 15, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 3, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,180, - 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,147, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 48, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 39, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,227, 61,197,143, 33, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 24, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 67, 62, 65,155,162, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 17, 62,124,224, 45, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 49, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, - 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, - 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 50, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,231, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 7, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 51, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,223, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,235, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,251, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,167, - 61,124,224, 9, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107, 61,197,143, 11, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,120, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,137,251, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,239, - 62,124,224, 28, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 52, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,222,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,191, - 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 21, 3, 61,197,143, 7, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,196, 62, 14, 62, 7, - 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 87, 62, 65,155,143, 63,216,177,183, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 29, 62,124,224, 23, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 53, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,191, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, - 61, 14, 61,251, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,224, 11, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,155, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 12, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 19, - 62, 65,155,144, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 24, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 54, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 31, 63, 2, 71,188, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 71, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 11, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 31, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 55, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,239, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 3, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,219, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, - 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,149, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 56, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,103, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,248, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 55, 61,124,224, 15, - 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 35, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,220, 62, 14, 62, 15, 63,187,172,162, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138,107, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 37, 62,124,224, 31, - 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 57, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86,135, - 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,103, 60,124,223,255, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,184, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, - 61,197,143, 31, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,180, 62, 14, 62, 23, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 71, 62, 65,155,159, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 18, 62,124,224, 43, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 58, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 39, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,243, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,184, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83, 62, 65,155,151, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 25, 62,124,224, 27, 63,245, 17,140, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 59, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 58, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,239, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, - 61,124,223,255, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 7, 63,158, 2, 82, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138,107, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, - 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 60, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 63, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,219, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 15, - 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 61, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, - 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 31, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 62, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,143, - 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,251, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 39, 61,124,224, 2, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 11, - 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,145, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 7, 62,124,224, 27, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 63, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,219, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, - 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 64, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,152, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, 61,124,223,255, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 75, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 23, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 65, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,191, 63, 2, 71,186, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,239, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,199, 61,124,223,239, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, - 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,120, 62, 14, 61,251, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,131, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 84,239, 62,124,224, 11, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 66, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 85, 39, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,176, 61, 14, 61,239, - 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 19, 61,124,223,239, 63,127,101,125, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,231, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,179, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 65, 62, 65,155,139, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 16, 62,124,224, 21, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 67, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,239, - 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 11, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, - 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 68, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,207, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,243, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,251, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 69, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, - 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, - 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 27, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 70, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 7, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 6, 63,187,172,164, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 23, 62,124,224, 22, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 71, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, - 60,124,224, 13, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 5, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 19, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,227, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, - 62, 14, 62, 14, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,149, 63,216,177,185, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 13, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 72, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,151, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,219, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,140, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,249, 61,124,224, 15, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,205, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 10, 62,124,224, 27, - 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 73, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, - 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, - 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 74, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,175, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,224, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,142, 61, 14, 61,239, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 1, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,207, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,164, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 42, 62, 65,155,135, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 4, 62,124,224, 15, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 75, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, - 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 82, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, - 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 76, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,223,127, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,223, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,176, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 19, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,231, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178, 62, 14, 62, 9, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 24, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 77, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, - 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, - 62, 65,155,151, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 31, 63,245, 17,143, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 78, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 23, 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 79, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, - 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 61,255, 63, 65,123,217, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,123, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, - 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, 63,216,177,182, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 27, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 80, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 71, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,144, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 31, - 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,223, 61,197,143, 31, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 23, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 63, 62, 65,155,161, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 14, 62,124,224, 43, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 81, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,224, 15, 63, 2, 71,188, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, - 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,150, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 30, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 82, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,135, 60,124,223,255, 63, 2, 71,185, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 61,255, - 63, 65,123,217, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255, 63,127,101,123, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,152, 62, 14, 62, 7, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,143, - 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 83, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 56, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, - 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, - 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 84, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 5, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 21, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 85, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,189, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, - 61, 14, 62, 1, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 16, 63,127,101,127, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, - 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 30, 63,245, 17,142, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 86, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 7, 61,124,224, 7, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 11, - 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 23, 62,124,224, 29, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 87, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 86, 7, 59,124,223,191, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, - 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 11, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 21, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, - 62, 14, 62, 17, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,153, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 33, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 88, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 86, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138,107, 62, 65,155,147, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 39, 62,124,224, 27, - 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 89, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, - 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, - 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 90, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, - 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,215, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,174, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 57, 62, 65,155,143, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 13, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 91, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, - 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 23, 63,158, 2, 82, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, - 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 92, 32, - 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, -186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,247, 60,124,223,191, - 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, - 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 11, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, -188,227, 20,227, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,180, 62, 14, 62, 7, - 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 73, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 20, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,216, 8,194, 93, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, - 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, - 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126, - 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, - 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 55, - 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 12, 62,124,224, 27, 63,245, 17,141, - 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 94, 32, 0, 0, 1, 44, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, - 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, - 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0, -188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 23, - 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, - 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, -189,145, 85, 23, 62,124,224, 35, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, - 8,194, 95, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0,186,145, 84,135, 59,124,224, 15, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, - 60,124,223,251, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 8, 63, 65,123,220, - 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 22, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0,188,227, 20,219, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,172, - 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148, 63,216,177,184, - 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 30, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 96, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, - 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, -188, 35,127,168, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, - 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, - 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, -189, 94,138, 67, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 27, - 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 97, 32, 0, 0, 1, 44, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, - 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, - 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, - 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, - 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 3, 63,187,172,164, - 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,137, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0,216, 8,194, 98, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,111, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0, -187,145, 84,173, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,116, 61, 14, 61,255, - 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,245, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,199, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0, -189, 35,127,163, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 47, 62, 65,155,147, - 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 6, 62,124,224, 28, 63,245, 17,142, 66,200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 8,194, 99, 32, 0, 0, 1, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,127, 62,131,146, 57, - 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, - 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,247, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, - 61,124,224, 7, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, 61,197,143, 7, 63,158, 2, 81, - 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, - 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,147, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, - 62,124,224, 28, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,194,100, 32, - 0, 0, 0,116, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 76, 8,194,100, 96, 0, 0, 0,104, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 23, - 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,193,204,176, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, - 0, 0, 3, 80, 3,161, 78, 32, 0, 0, 0,113, 0, 0, 0, 1, 3,161, 82, 32, 3,161, 74, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 66,112,114,101,118,105,101,119,108, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 97,109,112, 0, 1, 4, 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, - 8,193,161,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,211,197,192, 65, 59,229, 76, 64,184,106,208, 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,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 98,215,247, 63, 72, 11, 71, 63, 6,248,230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 29, 14,212, 62,182,225,149,191, 52, 76, 84, 0, 0, 0, 0,191, 74, 40, 22, 62,139, 74,201,191, 12,198,228, - 0, 0, 0, 0,187,157,213, 84, 63,100,190,151, 62,229,223,145, 0, 0, 0, 0,188,211,197,192, 65, 59,229, 76, 64,184,106,208, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 51, 25, 39,147,179, 63, 47, 43, 0, 0, 0, 0, 50,247,108, 9, 63,128, 0, 0,178,142, 92, 26, - 0, 0, 0, 0,179,114, 4, 43,178,141, 59, 32, 63,128, 0, 1, 0, 0, 0, 0,177,127,255,135, 40, 10,214,130,181, 0, 0, 1, - 63,128, 0, 0, 63, 29, 14,213,191, 74, 40, 23,187,157,211,254,128, 0, 0, 0,191, 52, 76, 83,191, 12,198,227, 62,229,223,148, -128, 0, 0, 0,190,182,225,149,190,139, 74,202,191,100,190,152,128, 0, 0, 0,192,158, 36,208,192,110,186,100,193,169, 43, 99, - 63,128, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, 60,208, 19,169, - 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 1, 0, 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, 3, 80, 3,161, 82, 32, 0, 0, 0,113, 0, 0, 0, 1, 0, 0, 0, 0, 3,161, 78, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66,116,101,120,116,117,114,101, 0,114,101,118,105,101,119, 46, 48, 48, 53, 0, 0, 0, 0, 0, 1, 4, 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, 8,195, 76, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194,100,224,188,183, 16, 61,191,103,204, 21, 63,228,234, 48, - 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,155, 39,153, 64,155, 39,153, - 64,155, 39,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218, 37,192, 0, 0, 36,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,155, 39,153, 38, 27, 39,152,166,232,187,102, 0, 0, 0, 0, 38,232,187,102, 52,196,134,157, - 64,155, 39,153, 0, 0, 0, 0, 38, 27, 39,154,192,155, 39,153, 52,196,134,157, 0, 0, 0, 0,188,183, 16, 61,191,103,204, 21, - 63,228,234, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,152,206, 48,236, 24, 41, 66, 9, 0, 0, 0, 0,152, 60, 55,216, 63,128, 0, 0, -166,105,133, 88, 0, 0, 0, 0,151, 91,159,226, 38, 93,218, 64, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 62, 83, 50, 25, 36,158,101,147, 35,211, 50, 27,128, 0, 0, 0,164,158,101,147, 62, 83, 50, 25, - 38,189,119, 59,128, 0, 0, 0,173, 44, 24, 0,175, 94,165,224, 62, 83, 50, 25,128, 0, 0, 0, 59, 33,251,236, 59, 40, 37,135, - 63,238, 71,118, 63,128, 0, 0, 0, 0, 0, 32, 0, 1, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 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,201,150,180, 56, 63,128, 0, 0, - 60,208, 19,169, 63,128, 0, 0, 62,204,204,205, 62, 56, 81,236, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 4, 4, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,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, - 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,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, 25, 0, 0, 0, 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, 0, 0, 0, 4, 8,194,100,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 77, 65, - 0, 0, 2,108, 3,161, 86, 32, 0, 0, 0, 42, 0, 0, 0, 1, 3,161, 90, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 65, 99,104,101, 99,107,101,114,100, 97,114,107, 0, 0, 0, 97,116,101,114,105, 97, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 61,221, 1,116, 61,220,251,200, 61,220,251,200, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 89,153,154, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 2, 0, 2, 0, 1, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 3, 1, 64, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, 63,128, 0, 0, - 8, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 8,194,101, 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, 8,194,101,192, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, - 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,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,128,253,240, 0,126, 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, 68, 65, 84, 65, - 0, 0, 0,136, 8,194,101, 16, 0, 0, 0, 33, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,106,160, + 56, 1, 0, 0,224,131,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 72,133,178, 3,120,130,178, 3, 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, - 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,192, 0, 1, 63,192, 0, 1, 63,192, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,209,183, 23, 56,209,177,184, 56,209,177,184, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, - 8,194,101,192, 0, 0, 0, 19, 0, 0, 0, 1, 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, 77, 65, 0, 0, 2,108, 3,161, 90, 32, 0, 0, 0, 42, 0, 0, 0, 1, - 3,161, 94, 32, 3,161, 86, 32, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,101, 99,107,101,114,108,105,103,104,116, 0, 0, - 0, 97,116,101,114,105, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 62,157, 65,188, 62,157, 61,178, - 62,157, 61,178, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 89,153,154, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, - 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 2, 0, 2, 0, 1, 0, 6, 63,128, 0, 0, 63,128, 0, 0, - 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 3, 1, 64, 0, 3, - 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, - 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 8, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 8,194,102, 16, 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, 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,234,252,240, 0,126, 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, - 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, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,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, 68, 65, 84, 65, 56, 1, 0, 0, 72,133,178, 3,181, 0, 0, 0, 1, 0, 0, 0,176,134,178, 3, +224,131,178, 3, 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, 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, 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, 68, 65, 84, 65, 0, 0, 0,136, 8,194,102, 16, 0, 0, 0, 33, 0, 0, 0, 1, - 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,106,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, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,209,183, 23, - 56,209,177,184, 56,209,177,184, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 62, 76,204,205, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,108, 3,161, 94, 32, 0, 0, 0, 42, 0, 0, 0, 1, 3,161,102, 32, - 3,161, 90, 32, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,112,114,101,118,105,101,119, 0, 0, 97,116,101,114,105, 97,108, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 54,232, 61, 63, 23,161,184, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 62, 68,248,188, 63,128, 0, 0, 63, 76,204,205, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,130,121,198, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, - 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 3, 3, 17, 0, 3, 0, 1, 0, 4, - 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,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, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, - 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 8, 16, 0, 1, 3,161, 98, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 8,194,102,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,252,240, 0,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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,194,103,112, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,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, 68, 65, 84, 65, 0, 0, 0,136, 8,194,102,192, 0, 0, 0, 33, 0, 0, 0, 1, 0, 16, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 8,194,105, 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, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 8, 3,161, 98, 32, 0, 0, 0, 36, 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, 62,220, 40,245, 0, 0, 0, 0, 63,125,112,164, 63,128, 0, 0, - 63, 24,214,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 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, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,176,134,178, 3, +181, 0, 0, 0, 1, 0, 0, 0, 24,136,178, 3, 72,133,178, 3,248,225,160, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, + 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109, 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, 77, 65, 84, 69, 82, 73, 65, 76, + 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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,255,116, 1,151, 0, + 0, 0, 0, 0, 0, 0, 6, 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, + 68, 65, 84, 65, 56, 1, 0, 0, 24,136,178, 3,181, 0, 0, 0, 1, 0, 0, 0,128,137,178, 3,176,134,178, 3, 0,210,160, 3, + 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,112,114,101,118,105,101,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, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,112,114,101,118,105,101,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, 80,114,101,118,105,101,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,165,254,116, 1,136, 0, 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0,128,137,178, 3,181, 0, 0, 0, 1, 0, 0, 0, +232,138,178, 3, 24,136,178, 3,168,211,160, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,109, 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, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,109, 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, 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, 55,254,116, 1, 86, 0, 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0, +232,138,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 80,140,178, 3,128,137,178, 3,176,181,159, 3, 0, 0, 0, 0, 77, 65, 84, 69, + 82, 73, 65, 76, 95, 80, 84, 95,100,105,102,102,117,115,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, 77, 65, 84, 69, + 82, 73, 65, 76, 95, 80, 84, 95,100,105,102,102,117,115,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, 68,105,102,102, +117,115,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,108,253, +116, 1,179, 0, 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0, 80,140,178, 3,181, 0, 0, 0, 1, 0, 0, 0,184,141,178, 3,232,138,178, 3, + 88,183,159, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,112,101, 99,117,108, 97,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, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,112,101, 99,117,108, 97,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, 83,112,101, 99,117,108, 97,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,229,252,116, 1,111, 0, 0, 0, 0, 0, 0, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0,184,141,178, 3,181, 0, 0, 0, + 1, 0, 0, 0, 32,143,178, 3, 80,140,178, 3, 96,167,159, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95, +114, 97,121,109,105,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, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95, +114, 97,121,109,105,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, 82, 97,121, 32, 77,105,114,114,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, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 32, 8,194,103,112, 0, 0, 0, 19, 0, 0, 0, 1, 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, 77, 65, 0, 0, 2,108, 3,161,102, 32, - 0, 0, 0, 42, 0, 0, 0, 1, 3,161,110, 32, 3,161, 94, 32, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,116,101,120,116,117,114, -101, 0,114,101,118,105,101,119, 46, 48, 48, 49, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 2, 0, 2, 0, 50, 0, 6, - 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 1, 0, 71, 3, 1, 0, 67, 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, - 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 8, 1, 0,129, 3,161,106, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 8,194,103,192, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,194,104,112, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, - 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,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, 68, 65, 84, 65, 0, 0, 0,136, 8,194,103,192, - 0, 0, 0, 33, 0, 0, 0, 1, 0, 1, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,105, 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, 1, 2, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 8, 3,161,106, 32, 0, 0, 0, 36, - 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, 62,220, 40,245, - 0, 0, 0, 0, 63,125,112,164, 63,128, 0, 0, 63, 24,214,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 8,194,104,112, 0, 0, 0, 19, 0, 0, 0, 1, - 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, 77, 65, 0, 0, 2,108, 3,161,110, 32, 0, 0, 0, 42, 0, 0, 0, 1, 0, 0, 0, 0, 3,161,102, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 46, 48, 48, 49, 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, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 3, 3, 1, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,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, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 2, - 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, - 63,128, 0, 0, 0, 0, 0, 0, 3,161,114, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,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, 8,194,104,192, 63, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, - 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,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, - 68, 65, 84, 65, 0, 0, 3, 8, 3,161,114, 32, 0, 0, 0, 36, 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, 62,220, 40,245, 0, 0, 0, 0, 63,125,112,164, 63,128, 0, 0, 63, 24,214,106, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,252,116, 1, 0, 0, 24, 0, 0, 0, + 4, 0, 6, 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, 68, 65, 84, 65, - 0, 0, 0, 32, 8,194,104,192, 0, 0, 0, 19, 0, 0, 0, 1, 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, 84, 69, 0, 0, 1, 16, 8,194,105, 16, 0, 0, 0, 38, - 0, 0, 0, 1, 8,194,106,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69,112,114,101,118,105,101,119, 0,101,120, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 64,160, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, - 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 60,204,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 2, 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, 8,194,106, 80, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 8,194,106, 80, - 0, 0, 0, 19, 0, 0, 0, 1, 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, 84, 69, 0, 0, 1, 16, 8,194,106,160, 0, 0, 0, 38, 0, 0, 0, 1, 0, 0, 0, 0, - 8,194,105, 16, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69,102, 97,107,101,115,104, 97,100,111,119, 0, 0, 76,101,110,100, 0,101, -120, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 64,160, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 40, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 60,204,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, + 56, 1, 0, 0, 32,143,178, 3,181, 0, 0, 0, 1, 0, 0, 0,136,144,178, 3,184,141,178, 3, 8,169,159, 3, 0, 0, 0, 0, + 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,114, 97,121,116,114, 97,110,115,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, 77, 69, 0, 0, 1, 24, 8,194,107,224, 0, 0, 0, 52, 0, 0, 0, 1, - 8,194,113,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 46, 48, 48, 49, 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, 8,194,109, 32, 3,161,214, 32, 7,247,144, 32, 0, 0, 0, 0, 3,161,118, 32, 3,161,166, 32, - 0, 0, 0, 0, 3,161,254, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,109, 80, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,110,208, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,112, 80, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,249, - 0, 0, 3,237, 0, 0, 1,244, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 61, 88,133,192,189, 85, 45,184,190, 24,181,196, - 63, 35, 71,185, 62,235, 31,153, 62,203,102,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,194,109, 32, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 94, 32, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,109, 80, 0, 0, 1, 42, - 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, + 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,114, 97,121,116,114, 97,110,115,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, 3,161,118, 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, + 82, 97,121, 32, 84,114, 97,110,115,112, 97,114,101,110, 99,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,181,252,116, 1, 0, 0, 24, 0, 0, 0, 4, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0,136,144,178, 3,181, 0, 0, 0, 1, 0, 0, 0,240,145,178, 3, + 32,143,178, 3, 40,208,156, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,115,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, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 95,115,115,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, 83,117, 98,115,117,114,102, 97, 99,101, 32, 83, 99, 97,116,116,101,114,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,157,252,116, 1, 0, 0, 24, 0, 0, 0, 4, 0, 6, 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, 68, 65, 84, 65, 56, 1, 0, 0,240,145,178, 3, +181, 0, 0, 0, 1, 0, 0, 0, 88,147,178, 3,136,144,178, 3, 64, 70,156, 3, 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, + 95, 80, 84, 95,115,116,114, 97,110,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, 77, 65, 84, 69, 82, 73, 65, 76, + 95, 80, 84, 95,115,116,114, 97,110,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, 83,116,114, 97,110,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, 68, 65, 84, 65, 0, 0, 47, 88, - 3,161,118, 32, 0, 0, 0, 58, 0, 0, 1,249, 62,131,144,140, 60,200,163,119, 62, 85, 9,156, 92,125,170, 70, 21,228, 0,255, - 0, 0, 0, 0,190, 26,222, 50, 60,200,163,119, 62, 85, 9,156,163,131,170, 70, 21,228, 0,255, 0, 0, 0, 0, 62,146,126, 61, -188, 8, 37,223, 62, 47,183, 99, 76,247,194,191, 81,228, 2,255, 0, 0, 0, 0,190, 56,185,147,188, 8, 37,223, 62, 47,183, 99, -179, 9,194,191, 81,228, 2,255, 0, 0, 0, 0, 62,157,176,129,188,217, 91,211, 61,246,238,244, 84, 31,181,226, 61,191, 2,255, - 0, 0, 0, 0,190, 79, 30, 28,188,217, 91,211, 61,246,238,244,171,225,181,226, 61,191, 2,255, 0, 0, 0, 0, 62, 94, 19,115, -189,128,251,103, 62, 14, 32,150, 9,241,144,155, 62, 64, 2,255, 0, 0, 0, 0,189,227,161, 26,189,128,251,103, 62, 14, 32,150, -246, 15,144,155, 62, 64, 2,255, 0, 0, 0, 0, 62, 94, 19,115,189, 25,118,251, 62, 62,165, 20, 14,184,163,144, 87, 76, 2,255, - 0, 0, 0, 0,189,227,161, 26,189, 25,118,251, 62, 62,165, 20,241, 72,163,144, 87, 76, 2,255, 0, 0, 0, 0, 62, 94, 19,115, - 60, 34,107,232, 62, 92,128,116, 3, 3,131,121, 29,110, 0,255, 0, 0, 0, 0,189,227,161, 26, 60, 34,107,232, 62, 92,128,116, -252,253,131,121, 29,110, 0,255, 0, 0, 0, 0, 62, 56,193, 58, 60,200,163,119, 62, 99,247, 77,171, 56,167,117, 36,206, 0,255, - 0, 0, 0, 0,189,152,252,168, 60,200,163,119, 62, 99,247, 77, 84,200,167,117, 36,206, 0,255, 0, 0, 0, 0, 62, 23, 42,109, -188, 8, 37,223, 62, 73,215, 88,217,152,203,122,110, 56, 0,255, 0, 0, 0, 0, 62, 0,197,229,188,217, 91,211, 62, 29, 14, 71, -184,179,175, 93, 69, 66, 2,255, 0, 0, 0, 0,188,164, 23,249,188,217, 91,211, 62, 29, 14, 71, 71, 77,175, 93, 69, 66, 2,255, - 0, 0, 0, 0, 61,182,231, 88, 61,121,154,159, 62, 32,201,179,151,181,255,104, 74, 51, 2,255, 0, 0, 0, 0, 60,134,121,207, - 61,121,154,159, 62, 32,201,179,104, 75,255,104, 74, 51, 2,255, 0, 0, 0, 0, 61,242,158, 25, 61,121,154,159, 62, 73,215, 88, -171, 78,255,150, 95,246, 2,255, 0, 0, 0, 0,188, 80,194,110, 61,121,154,159, 62, 73,215, 88, 84,178,255,150, 95,246, 2,255, - 0, 0, 0, 0, 62, 41,211,138, 61,121,154,159, 62, 99,247, 77,133,152,254,153, 37, 98, 0,255, 0, 0, 0, 0,189,118, 66,143, - 61,121,154,159, 62, 99,247, 77,122,104,254,153, 37, 98, 0,255, 0, 0, 0, 0, 62, 56,193, 58, 61,206,232,154, 62, 99,247, 77, -170, 24, 88, 13, 35, 89, 0,255, 0, 0, 0, 0,189,152,252,168, 61,206,232,154, 62, 99,247, 77, 85,232, 88, 13, 35, 89, 0,255, - 0, 0, 0, 0, 62, 23, 42,109, 62, 5, 79,173, 62, 73,215, 88,200,249, 65,221, 94,244, 2,255, 0, 0, 0, 0,189, 43,158, 31, - 62, 5, 79,173, 62, 73,215, 88, 55, 7, 65,221, 94,244, 2,255, 0, 0, 0, 0, 62, 0,197,229, 62, 27,180, 54, 62, 29, 14, 71, -186, 51, 78, 86, 73, 78, 2,255, 0, 0, 0, 0,188,164, 23,249, 62, 27,180, 54, 62, 29, 14, 71, 69,205, 78, 86, 73, 78, 2,255, - 0, 0, 0, 0, 62, 94, 19,115, 62, 65, 6,111, 62, 14, 32,150, 11, 2,107,152, 68,114, 2,255, 0, 0, 0, 0,189,227,161, 26, - 62, 65, 6,111, 62, 14, 32,150,244,254,107,152, 68,114, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 62, 35, 43, 14, 62, 62,165, 20, - 14,201, 91,180, 88, 14, 2,255, 0, 0, 0, 0,189,227,161, 26, 62, 35, 43, 14, 62, 62,165, 20,241, 55, 91,180, 88, 14, 2,255, - 0, 0, 0, 0, 62, 94, 19,115, 61,236,195,250, 62, 92,128,116, 2,134,125, 29, 26,228, 0,255, 0, 0, 0, 0,189,227,161, 26, - 61,236,195,250, 62, 92,128,116,253,122,125, 29, 26,228, 0,255, 0, 0, 0, 0, 62,131,144,140, 61,206,232,154, 62, 85, 9,156, - 93, 54, 85, 67, 20,154, 0,255, 0, 0, 0, 0,190, 26,222, 50, 61,206,232,154, 62, 85, 9,156,162,202, 85, 67, 20,154, 0,255, - 0, 0, 0, 0, 62,146,126, 61, 62, 5, 79,173, 62, 47,183, 99, 76,241, 60,161, 82, 97, 2,255, 0, 0, 0, 0,190, 56,185,147, - 62, 5, 79,173, 62, 47,183, 99,179, 15, 60,161, 82, 97, 2,255, 0, 0, 0, 0, 62,157,176,129, 62, 27,180, 54, 61,246,238,244, - 83,179, 71,157, 65, 45, 2,255, 0, 0, 0, 0,190, 79, 30, 28, 62, 27,180, 54, 61,246,238,244,172, 77, 71,157, 65, 45, 2,255, - 0, 0, 0, 0, 62,176, 89,157, 61,121,154,159, 61,232, 1, 67,111, 40,255,113, 63,117, 2,255, 0, 0, 0, 0,190,116,112, 84, - 61,121,154,159, 61,232, 1, 67,144,216,255,113, 63,117, 2,255, 0, 0, 0, 0, 62,161,107,237, 61,121,154,159, 62, 40, 64,139, -100, 48,255,154, 79,167, 2,255, 0, 0, 0, 0,190, 86,148,244, 61,121,154,159, 62, 40, 64,139,155,208,255,154, 79,167, 2,255, - 0, 0, 0, 0, 62,139, 7,100, 61,121,154,159, 62, 81, 78, 48,126,117,254,181, 19,185, 0,255, 0, 0, 0, 0,190, 41,203,227, - 61,121,154,159, 62, 81, 78, 48,129,139,254,181, 19,185, 0,255, 0, 0, 0, 0, 62,140,229, 26, 61,121,154,159, 62, 88,197, 8, -120,160,254,106, 42,198, 2,255, 0, 0, 0, 0,190, 45,135, 79, 61,121,154,159, 62, 88,197, 8,135, 96,254,106, 42,198, 2,255, - 0, 0, 0, 0, 62,133,110, 66, 61,214, 95,114, 62, 92,128,116, 93,173, 74,126, 45, 93, 2,255, 0, 0, 0, 0,190, 30,153,158, - 61,214, 95,114, 62, 92,128,116,162, 83, 74,126, 45, 93, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 61,251,177,170, 62,103,178,185, - 11, 9,115, 31, 54,216, 2,255, 0, 0, 0, 0,189,227,161, 26, 61,251,177,170, 62,103,178,185,244,247,115, 31, 54,216, 2,255, - 0, 0, 0, 0, 62, 53, 5,206, 61,214, 95,114, 62,111, 41,145,181, 9, 80,184, 65, 43, 2,255, 0, 0, 0, 0,189,145,133,208, - 61,214, 95,114, 62,111, 41,145, 74,247, 80,184, 65, 43, 2,255, 0, 0, 0, 0, 62, 34, 92,178, 61,121,154,159, 62,111, 41,145, -146,116,254, 57, 66, 43, 2,255, 0, 0, 0, 0,189, 88,103, 48, 61,121,154,159, 62,111, 41,145,109,140,254, 57, 66, 43, 2,255, - 0, 0, 0, 0, 62, 53, 5,206, 60,170,200, 22, 62,111, 41,145,182, 34,173,181, 64,115, 2,255, 0, 0, 0, 0,189,145,133,208, - 60,170,200, 22, 62,111, 41,145, 73,222,173,181, 64,115, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 61,121,154,159, 62,114,228,253, - 24, 74,255,139,125,171, 2,255, 0, 0, 0, 0,189,227,161, 26, 61,121,154,159, 62,114,228,253,231,182,255,139,125,171, 2,255, - 0, 0, 0, 0, 62, 94, 19,115, 59, 43,249,149, 62,103,178,185, 10,218,140,140, 54, 45, 2,255, 0, 0, 0, 0,189,227,161, 26, - 59, 43,249,149, 62,103,178,185,245, 38,140,140, 54, 45, 2,255, 0, 0, 0, 0, 62,133,110, 66, 60,170,200, 22, 62, 92,128,116, - 92,141,179,203, 44,210, 2,255, 0, 0, 0, 0,190, 30,153,158, 60,170,200, 22, 62, 92,128,116,163,115,179,203, 44,210, 2,255, - 0, 0, 0, 0, 61, 88,133,203, 62, 23,248,202, 62, 73,215, 88, 0, 0,124, 43, 31, 17, 0,255, 0, 0, 0, 0, 61, 88,133,203, - 61,229, 77, 34, 62,111, 41,145, 0, 0,249, 63,127,209, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,188,254,150, 62, 70, 27,236, - 0, 0,251,204,127,237, 0,255, 0, 0, 0, 0, 61, 88,133,203,190, 78, 79,191, 62, 92,128,116, 0, 0,150, 33, 71,238, 2,255, - 0, 0, 0, 0, 61, 88,133,203,190, 14,221,146, 62, 99,247, 77, 0, 0,100, 28, 79,192, 0,255, 0, 0, 0, 0, 61, 88,133,203, -190,211, 99, 30, 62, 62,165, 20, 0, 0,142,184, 59,147, 2,255, 0, 0, 0, 0, 61, 88,133,203, 62, 12,198,133, 62, 6,169,190, - 0, 0,103,143, 75, 57, 0,255, 0, 0, 0, 0, 61, 88,133,203, 62, 91, 38, 99, 61,239,120, 28, 0, 0, 78,115,101, 34, 0,255, - 0, 0, 0, 0, 61, 88,133,203, 62,187,243, 16,190,206,250,170, 0, 0,110,190,191,212, 2,255, 0, 0, 0, 0, 61, 88,133,203, - 62, 87,106,247,191, 11,224,178, 0, 0, 35,144,133, 12, 3,255, 0, 0, 0, 0, 61, 88,133,203,188,157,165, 18,191, 9, 20, 33, - 0, 0,214,194,134,213, 2,255, 0, 0, 0, 0, 61, 88,133,203,190,108, 43, 32,190,160, 83,227, 0, 0,134,154,215,113, 2,255, - 0, 0, 0, 0, 62, 23, 42,109,190, 14,221,146, 61,232, 1, 67,113,144,198,122, 13, 79, 0,255, 0, 0, 0, 0,189, 43,158, 31, -190, 14,221,146, 61,232, 1, 67,142,112,198,122, 13, 79, 0,255, 0, 0, 0, 0, 62, 75,106, 87,190,131, 37,138, 61,239,120, 28, -122,196, 31, 19, 18,152, 2,255, 0, 0, 0, 0,189,190, 78,225,190,131, 37,138, 61,239,120, 28,133, 60, 31, 19, 18,152, 2,255, - 0, 0, 0, 0, 62, 94, 19,115,190,192,186, 2, 61,239,120, 28,125,167, 12,146, 20,226, 0,255, 0, 0, 0, 0,189,227,161, 26, -190,192,186, 2, 61,239,120, 28,130, 89, 12,146, 20,226, 0,255, 0, 0, 0, 0, 62,101,138, 75,190,239, 96,200, 61,202, 37,227, -124,113,242,142, 26,196, 2,255, 0, 0, 0, 0,189,242,142,203,190,239, 96,200, 61,202, 37,227,131,143,242,142, 26,196, 2,255, - 0, 0, 0, 0, 62, 82,225, 47,190,252,112,195, 61,194,175, 10, 79,159,159, 44, 25,210, 2,255, 0, 0, 0, 0,189,205, 60,146, -190,252,112,195, 61,194,175, 10,176, 97,159, 44, 25,210, 2,255, 0, 0, 0, 0, 62, 11,248, 41,191, 1, 4,242, 61,224,138,107, - 19,143,131, 13, 19,178, 2,255, 0, 0, 0, 0,188,253,170, 27,191, 1, 4,242, 61,224,138,107,236,113,131, 13, 19,178, 2,255, - 0, 0, 0, 0, 61, 88,133,203,191, 2,226,168, 61,246,238,244, 0, 0,130, 75, 24, 21, 2,255, 0, 0, 0, 0, 62,131,144,140, -189,240,242, 18, 61,202, 37,227, 47,114,137,117, 8,232, 2,255, 0, 0, 0, 0,190, 26,222, 50,189,240,242, 18, 61,202, 37,227, -208,142,137,117, 8,232, 2,255, 0, 0, 0, 0, 62,178, 55, 83,189,143,233, 23, 61,209,156,187, 77, 25,154,198, 13,214, 2,255, - 0, 0, 0, 0,190,120, 43,193,189,143,233, 23, 61,209,156,187,178,231,154,198, 13,214, 2,255, 0, 0, 0, 0, 62,224,222, 26, - 60,140,236,182, 61,112, 21, 49,113,216,198,247, 12,255, 2,255, 0, 0, 0, 0,190,170,188,167, 60,140,236,182, 61,112, 21, 49, -142, 40,198,247, 12,255, 2,255, 0, 0, 0, 0, 62,232, 84,243, 62, 23,248,202, 62, 2,238, 82,113,104, 51, 31, 30, 32, 2,255, - 0, 0, 0, 0,190,178, 51,128, 62, 23,248,202, 62, 2,238, 82,142,152, 51, 31, 30, 32, 2,255, 0, 0, 0, 0, 62,196,224,112, - 62, 50, 24,190, 62, 17,220, 2, 64,216,106,225, 27,121, 0,255, 0, 0, 0, 0,190,142,190,253, 62, 50, 24,190, 62, 17,220, 2, -191, 40,106,225, 27,121, 0,255, 0, 0, 0, 0, 62,144,160,134, 62,106, 20, 20, 62, 47,183, 99, 75,137,101, 82, 20, 70, 0,255, - 0, 0, 0, 0,190, 52,254, 39, 62,106, 20, 20, 62, 47,183, 99,180,119,101, 82, 20, 70, 0,255, 0, 0, 0, 0, 62, 79, 37,195, - 62,154, 92, 67, 62, 70, 27,236, 38,241,119, 19, 26, 54, 2,255, 0, 0, 0, 0,189,197,197,186, 62,154, 92, 67, 62, 70, 27,236, -217, 15,119, 19, 26, 54, 2,255, 0, 0, 0, 0, 62, 0,197,229, 62,145, 7,181, 62, 81, 78, 48,175, 21, 96, 54, 24, 12, 2,255, - 0, 0, 0, 0,188,164, 23,249, 62,145, 7,181, 62, 81, 78, 48, 80,235, 96, 54, 24, 12, 2,255, 0, 0, 0, 0, 61,167,249,168, - 62, 53,212, 42, 62, 77,146,196,155,174, 76,128, 21,151, 0,255, 0, 0, 0, 0, 60,194, 48,144, 62, 53,212, 42, 62, 77,146,196, -100, 82, 76,128, 21,151, 0,255, 0, 0, 0, 0, 62, 4,129, 81, 62, 16,129,241, 62, 88,197, 8, 25, 0,237, 4,124, 22, 0,255, - 0, 0, 0, 0,188,193,243, 89, 62, 16,129,241, 62, 88,197, 8,231, 0,237, 4,124, 22, 0,255, 0, 0, 0, 0, 61,227,176,105, - 61,184,132, 17, 62, 85, 9,156,255,160,232,126,125,209, 0,255, 0, 0, 0, 0,187,178,169,214, 61,184,132, 17, 62, 85, 9,156, - 0, 96,232,126,125,209, 0,255, 0, 0, 0, 0,189, 43,158, 31,188, 8, 37,223, 62, 73,215, 88, 38,104,203,122,110, 56, 0,255, - 0, 0, 0, 0, 62,105, 69,184,189, 55, 82, 92, 62, 55, 46, 59, 34,106,200,119,110, 16, 0,255, 0, 0, 0, 0,189,250, 5,163, -189, 55, 82, 92, 62, 55, 46, 59,221,150,200,119,110, 16, 0,255, 0, 0, 0, 0, 62,144,160,134,188,187,128,115, 62, 40, 64,139, - 55,161,207, 60,104,115, 0,255, 0, 0, 0, 0,190, 52,254, 39,188,187,128,115, 62, 40, 64,139,200, 95,207, 60,104,115, 0,255, - 0, 0, 0, 0, 62,176, 89,157, 61, 17, 26,205, 62, 29, 14, 71, 58,181,226,123,109,214, 0,255, 0, 0, 0, 0,190,116,112, 84, - 61, 17, 26,205, 62, 29, 14, 71,197, 75,226,123,109,214, 0,255, 0, 0, 0, 0, 62,180, 21, 9, 61,177, 13, 57, 62, 29, 14, 71, - 49,157,230, 61,115, 36, 0,255, 0, 0, 0, 0,190,123,231, 45, 61,177, 13, 57, 62, 29, 14, 71,206, 99,230, 61,115, 36, 0,255, - 0, 0, 0, 0, 62,170,192,123, 61,251,177,170, 62, 36,133, 31, 39,206,234,175,119,196, 0,255, 0, 0, 0, 0,190,105, 62, 16, - 61,251,177,170, 62, 36,133, 31,216, 50,234,175,119,196, 0,255, 0, 0, 0, 0, 62,129,178,214, 62, 27,180, 54, 62, 62,165, 20, - 24, 62,255, 85,125,173, 0,255, 0, 0, 0, 0,190, 23, 34,198, 62, 27,180, 54, 62, 62,165, 20,231,194,255, 85,125,173, 0,255, - 0, 0, 0, 0, 62, 45,142,246, 62, 42,161,230, 62, 81, 78, 48, 31,251,247, 40,123,158, 0,255, 0, 0, 0, 0,189,130,152, 32, - 62, 42,161,230, 62, 81, 78, 48,224, 5,247, 40,123,158, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,209,133,104, 62, 70, 27,236, - 0, 0,210,148,119,170, 0,255, 0, 0, 0, 0, 61,212,194,185,190,198, 83, 36, 62, 70, 27,236, 19, 39,222, 65,121,248, 0,255, - 0, 0, 0, 0, 58,240,196,191,190,198, 83, 36, 62, 70, 27,236,236,217,222, 65,121,248, 0,255, 0, 0, 0, 0, 61,220, 57,145, -190,226, 80,207, 62, 58,233,167, 2,134,217,132,122, 12, 0,255, 0, 0, 0, 0,186,236,241, 77,190,226, 80,207, 62, 58,233,167, -253,122,217,132,122, 12, 0,255, 0, 0, 0, 0, 61,167,249,168,190,237,131, 19, 62, 51,114,207,252, 13,214,169,121, 18, 0,255, - 0, 0, 0, 0, 60,194, 48,144,190,237,131, 19, 62, 51,114,207, 3,243,214,169,121, 18, 0,255, 0, 0, 0, 0, 61, 88,133,203, -190,239, 96,200, 62, 47,183, 99, 0, 0,219,150,122,180, 0,255, 0, 0, 0, 0, 61, 88,133,203,190, 18,152,254, 62, 77,146,196, - 0, 0, 97, 46, 83, 76, 0,255, 0, 0, 0, 0, 61, 88,133,203,189,240,242, 18, 62, 73,215, 88, 0, 0,104,197, 73,134, 0,255, - 0, 0, 0, 0, 61,205, 75,225,189,248,104,235, 62, 73,215, 88, 36, 52, 53, 2,110,187, 0,255, 0, 0, 0, 0, 59,179,158,179, -189,248,104,235, 62, 73,215, 88,219,204, 53, 2,110,187, 0,255, 0, 0, 0, 0, 61,227,176,105,190, 33,134,174, 62, 77,146,196, - 95,187,212, 14, 72,182, 0,255, 0, 0, 0, 0,187,178,169,214,190, 33,134,174, 62, 77,146,196,160, 69,212, 14, 72,182, 0,255, - 0, 0, 0, 0, 61,190, 94, 48,190, 63, 98, 15, 62, 73,215, 88, 64,117,207,117, 99, 90, 0,255, 0, 0, 0, 0, 60, 81, 60,220, -190, 63, 98, 15, 62, 73,215, 88,191,139,207,117, 99, 90, 0,255, 0, 0, 0, 0, 62,116,119,252,189,151, 95,239, 62, 40, 64,139, - 49,103,196,157,102, 13, 0,255, 0, 0, 0, 0,190, 8, 53, 22,189,151, 95,239, 62, 40, 64,139,206,153,196,157,102, 13, 0,255, - 0, 0, 0, 0, 62,174,123,231,188,217, 91,211, 62, 17,220, 2, 59,142,204,107,100,223, 2,255, 0, 0, 0, 0,190,112,180,232, -188,217, 91,211, 62, 17,220, 2,196,114,204,107,100,223, 2,255, 0, 0, 0, 0, 62,200,155,220, 61, 46,246, 45, 62, 6,169,190, - 66,102,217, 11,102, 65, 0,255, 0, 0, 0, 0,190,146,122,105, 61, 46,246, 45, 62, 6,169,190,189,154,217, 11,102, 65, 0,255, - 0, 0, 0, 0, 62,204, 87, 72, 61,251,177,170, 62, 32,201,179, 54, 87,228,142,112,151, 0,255, 0, 0, 0, 0,190,150, 53,213, - 61,251,177,170, 62, 32,201,179,201,169,228,142,112,151, 0,255, 0, 0, 0, 0, 62,191, 71, 78, 62, 16,129,241, 62, 66, 96,128, - 42, 82,247, 97,120,125, 2,255, 0, 0, 0, 0,190,137, 37,219, 62, 16,129,241, 62, 66, 96,128,213,174,247, 97,120,125, 2,255, - 0, 0, 0, 0, 62,131,144,140, 62, 79,244, 31, 62, 99,247, 77, 41,192,254,216,120,253, 0,255, 0, 0, 0, 0,190, 26,222, 50, - 62, 79,244, 31, 62, 99,247, 77,214, 64,254,216,120,253, 0,255, 0, 0, 0, 0, 62, 75,106, 87, 62,124,189, 48, 62,118,160,105, - 28,217, 7, 53,124,126, 0,255, 0, 0, 0, 0,189,190, 78,225, 62,124,189, 48, 62,118,160,105,227, 39, 7, 53,124,126, 0,255, - 0, 0, 0, 0, 62, 23, 42,109, 62,113,138,236, 62,126, 23, 65,255,125, 5, 44,127,227, 0,255, 0, 0, 0, 0,189, 43,158, 31, - 62,113,138,236, 62,126, 23, 65, 0,131, 5, 44,127,227, 0,255, 0, 0, 0, 0, 61,205, 75,225, 62, 23,248,202, 62,122, 91,213, -238,130, 2, 89,126,197, 0,255, 0, 0, 0, 0, 59,179,158,179, 62, 23,248,202, 62,122, 91,213, 17,126, 2, 89,126,197, 0,255, - 0, 0, 0, 0, 61,227,176,105,189,203,159,217, 62,107,110, 37, 23,115,230, 27,123, 34, 0,255, 0, 0, 0, 0,187,178,169,214, -189,203,159,217, 62,107,110, 37,232,141,230, 27,123, 34, 0,255, 0, 0, 0, 0, 62, 26,229,218,190,133, 3, 64, 62, 58,233,167, - 74,212, 14, 28,102,225, 2,255, 0, 0, 0, 0,189, 58,139,207,190,133, 3, 64, 62, 58,233,167,181, 44, 14, 28,102,225, 2,255, - 0, 0, 0, 0, 62, 45,142,246,190,194,151,184, 62, 47,183, 99, 72,235,252, 17,105, 31, 2,255, 0, 0, 0, 0,189,130,152, 32, -190,194,151,184, 62, 47,183, 99,183, 21,252, 17,105, 31, 2,255, 0, 0, 0, 0, 62, 53, 5,206,190,222,149, 99, 62, 36,133, 31, - 66,179,225,197,104,249, 2,255, 0, 0, 0, 0,189,145,133,208,190,222,149, 99, 62, 36,133, 31,189, 77,225,197,104,249, 2,255, - 0, 0, 0, 0, 62, 38, 24, 30,190,244,249,234, 62, 21,151,111, 44, 62,183, 4, 95, 98, 2,255, 0, 0, 0, 0,189,103, 84,224, -190,244,249,234, 62, 21,151,111,211,194,183, 4, 95, 98, 2,255, 0, 0, 0, 0, 62, 4,129, 81,190,248,181, 86, 62, 21,151,111, - 19,155,158, 52, 80, 54, 2,255, 0, 0, 0, 0,188,193,243, 89,190,248,181, 86, 62, 21,151,111,236,101,158, 52, 80, 54, 2,255, - 0, 0, 0, 0, 61, 88,133,203,190,252,112,195, 62, 25, 82,219, 0, 0,154,201, 78, 88, 2,255, 0, 0, 0, 0, 61, 88,133,203, -188,247, 55, 52, 62, 66, 96,128, 0, 0,252, 2,127,239, 0,255, 0, 0, 0, 0, 61, 88,133,203, 61, 61,227,222, 62, 85, 9,156, - 0, 0,227,112,124,196, 0,255, 0, 0, 0, 0, 62, 82,225, 47, 62, 46, 93, 82, 62, 73,215, 88, 21, 58,254,234,126, 56, 0,255, - 0, 0, 0, 0,189,205, 60,146, 62, 46, 93, 82, 62, 73,215, 88,234,198,254,234,126, 56, 0,255, 0, 0, 0, 0, 62, 4,129, 81, - 60, 94, 34,170, 62, 77,146,196,214, 37,232,110,118,163, 0,255, 0, 0, 0, 0,188,193,243, 89, 60, 94, 34,170, 62, 77,146,196, - 41,219,232,110,118,163, 0,255, 0, 0, 0, 0, 61,235, 39, 65, 61, 61,227,222, 62, 81, 78, 48,232,150,230,127,123, 57, 0,255, - 0, 0, 0, 0,188, 21, 11,173, 61, 61,227,222, 62, 81, 78, 48, 23,106,230,127,123, 57, 0,255, 0, 0, 0, 0, 61,220, 57,145, -190,190,220, 76, 62, 70, 27,236, 20,117,248,197,126, 36, 0,255, 0, 0, 0, 0,186,236,241, 77,190,190,220, 76, 62, 70, 27,236, -235,139,248,197,126, 36, 0,255, 0, 0, 0, 0, 61,182,231, 88,190,133, 3, 64, 62, 77,146,196, 19, 43, 0,128,126,141, 2,255, - 0, 0, 0, 0, 60,134,121,207,190,133, 3, 64, 62, 77,146,196,236,213, 0,128,126,141, 2,255, 0, 0, 0, 0, 61, 88,133,203, -190,133, 3, 64, 62, 77,146,196, 0, 0,255,122,127,254, 0,255, 0, 0, 0, 0, 61, 88,133,203,190, 82, 11, 43, 62, 73,215, 88, - 0, 0,184,121,106, 36, 0,255, 0, 0, 0, 0, 61,197,213, 8,190, 55,235, 55, 62, 92,128,116, 66,167,160,139, 53, 45, 2,255, - 0, 0, 0, 0, 60, 21,134, 27,190, 55,235, 55, 62, 92,128,116,189, 89,160,139, 53, 45, 2,255, 0, 0, 0, 0, 61,235, 39, 65, -190, 33,134,174, 62, 99,247, 77,118,133,224,215, 36,239, 2,255, 0, 0, 0, 0,188, 21, 11,173,190, 33,134,174, 62, 99,247, 77, -137,123,224,215, 36,239, 2,255, 0, 0, 0, 0, 61,212,194,185,189,233,123, 57, 62, 92,128,116, 81,167, 95,141, 24, 49, 2,255, - 0, 0, 0, 0, 58,240,196,191,189,233,123, 57, 62, 92,128,116,174, 89, 95,141, 24, 49, 2,255, 0, 0, 0, 0, 61,145,149, 31, -189,226, 4, 97, 62, 92,128,116,200,189,108,160, 39, 26, 2,255, 0, 0, 0, 0, 61, 13,225, 89,189,226, 4, 97, 62, 92,128,116, - 55, 67,108,160, 39, 26, 2,255, 0, 0, 0, 0, 61, 88,133,203,190, 22, 84,106, 62,114,228,253, 0, 0, 23, 42,125,225, 0,255, - 0, 0, 0, 0, 61,153, 11,247,189,248,104,235, 62,107,110, 37,231,186, 78, 89, 98, 66, 2,255, 0, 0, 0, 0, 60,253,231, 82, -189,248,104,235, 62,107,110, 37, 24, 70, 78, 89, 98, 66, 2,255, 0, 0, 0, 0, 61,197,213, 8,189,255,223,195, 62,107,110, 37, - 43, 88, 62,134,102,237, 2,255, 0, 0, 0, 0, 60, 21,134, 27,189,255,223,195, 62,107,110, 37,212,168, 62,134,102,237, 2,255, - 0, 0, 0, 0, 61,212,194,185,190, 33,134,174, 62,114,228,253, 46,247,233, 89,116,228, 2,255, 0, 0, 0, 0, 58,240,196,191, -190, 33,134,174, 62,114,228,253,209, 9,233, 89,116,228, 2,255, 0, 0, 0, 0, 61,182,231, 88,190, 44,184,243, 62,103,178,185, - 31, 46,181,198, 99,128, 2,255, 0, 0, 0, 0, 60,134,121,207,190, 44,184,243, 62,103,178,185,224,210,181,198, 99,128, 2,255, - 0, 0, 0, 0, 61, 88,133,203,190, 63, 98, 15, 62,103,178,185, 0, 0,191,185,110,175, 2,255, 0, 0, 0, 0, 62, 49, 74, 98, -190, 74,148, 83, 61,224,138,107,120, 23, 41, 34, 16, 99, 0,255, 0, 0, 0, 0,189,138, 14,248,190, 74,148, 83, 61,224,138,107, -135,233, 41, 34, 16, 99, 0,255, 0, 0, 0, 0, 62, 4,129, 81,190, 40,253,134, 62, 58,233,167, 80,251,250, 26, 98,241, 0,255, - 0, 0, 0, 0,188,193,243, 89,190, 40,253,134, 62, 58,233,167,175, 5,250, 26, 98,241, 0,255, 0, 0, 0, 0, 62, 11,248, 41, -190, 74,148, 83, 62, 58,233,167, 83,215, 16,153, 95, 71, 0,255, 0, 0, 0, 0,188,253,170, 27,190, 74,148, 83, 62, 58,233,167, -172, 41, 16,153, 95, 71, 0,255, 0, 0, 0, 0, 62, 38, 24, 30,190, 44,184,243, 61,224,138,107,122, 24, 35, 67, 15, 64, 0,255, - 0, 0, 0, 0,189,103, 84,224,190, 44,184,243, 61,224,138,107,133,232, 35, 67, 15, 64, 0,255, 0, 0, 0, 0, 61, 88,133,203, -190,235,165, 93, 62, 47,183, 99, 0, 0, 86,139, 94, 77, 0,255, 0, 0, 0, 0, 61,153, 11,247,190,233,199,167, 62, 47,183, 99, -206,144, 70,200, 94,125, 0,255, 0, 0, 0, 0, 60,253,231, 82,190,233,199,167, 62, 47,183, 99, 49,112, 70,200, 94,125, 0,255, - 0, 0, 0, 0, 61,197,213, 8,190,222,149, 99, 62, 58,233,167,164,253, 17,109, 88, 75, 0,255, 0, 0, 0, 0, 60, 21,134, 27, -190,222,149, 99, 62, 58,233,167, 91, 3, 17,109, 88, 75, 0,255, 0, 0, 0, 0, 61,197,213, 8,190,203,236, 70, 62, 66, 96,128, -225,141,168, 87, 88, 39, 0,255, 0, 0, 0, 0, 60, 21,134, 27,190,203,236, 70, 62, 66, 96,128, 30,115,168, 87, 88, 39, 0,255, - 0, 0, 0, 0, 61, 88,133,203,190,213, 64,212, 62, 32,201,179, 0, 0,159, 20, 83,153, 0,255, 0, 0, 0, 0, 61,197,213, 8, -190,205,201,252, 62, 36,133, 31,230, 5,177,250, 98, 20, 0,255, 0, 0, 0, 0, 60, 21,134, 27,190,205,201,252, 62, 36,133, 31, - 25,251,177,250, 98, 20, 0,255, 0, 0, 0, 0, 61,197,213, 8,190,220,183,173, 62, 25, 82,219,152, 18, 24, 8, 70,188, 0,255, - 0, 0, 0, 0, 60, 21,134, 27,190,220,183,173, 62, 25, 82,219,103,238, 24, 8, 70,188, 0,255, 0, 0, 0, 0, 61,153, 11,247, -190,230, 12, 59, 62, 21,151,111,222, 26, 49,242,112,221, 0,255, 0, 0, 0, 0, 60,253,231, 82,190,230, 12, 59, 62, 21,151,111, - 33,230, 49,242,112,221, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,231,233,241, 62, 21,151,111, 0, 0, 60, 18,113, 5, 0,255, - 0, 0, 0, 0, 62, 8, 60,189, 61, 76,209,142, 62, 92,128,116, 30, 4,244, 93,123,225, 0,255, 0, 0, 0, 0,188,223,206,186, - 61, 76,209,142, 62, 92,128,116,225,252,244, 93,123,225, 0,255, 0, 0, 0, 0, 62, 15,179,149, 60,170,200, 22, 62, 88,197, 8, - 9, 71,251, 34,127,144, 0,255, 0, 0, 0, 0,189, 13,194,190, 60,170,200, 22, 62, 88,197, 8,246,185,251, 34,127,144, 0,255, - 0, 0, 0, 0, 62, 86,156,155, 62, 23,248,202, 62, 81, 78, 48, 17, 81, 2, 74,126,204, 0,255, 0, 0, 0, 0,189,212,179,106, - 62, 23,248,202, 62, 81, 78, 48,238,175, 2, 74,126,204, 0,255, 0, 0, 0, 0, 62, 56,193, 58, 62, 20, 61, 94, 62, 88,197, 8, - 25,218,253,177,125, 86, 2,255, 0, 0, 0, 0,189,152,252,168, 62, 20, 61, 94, 62, 88,197, 8,230, 38,253,177,125, 86, 2,255, - 0, 0, 0, 0, 62,127,170, 64, 62, 9, 11, 25, 62, 88,197, 8, 21,182,240,210,125, 57, 2,255, 0, 0, 0, 0,190, 19,103, 90, - 62, 9, 11, 25, 62, 88,197, 8,234, 74,240,210,125, 57, 2,255, 0, 0, 0, 0, 62,161,107,237, 61,229, 77, 34, 62, 51,114,207, - 28,143,237,249,123,117, 0,255, 0, 0, 0, 0,190, 86,148,244, 61,229, 77, 34, 62, 51,114,207,227,113,237,249,123,117, 0,255, - 0, 0, 0, 0, 62,167, 5, 15, 61,169,150, 97, 62, 47,183, 99, 15,209,246,217,126,175, 0,255, 0, 0, 0, 0,190, 97,199, 56, - 61,169,150, 97, 62, 47,183, 99,240, 47,246,217,126,175, 0,255, 0, 0, 0, 0, 62,165, 39, 89, 61, 32, 8,125, 62, 43,251,247, - 24,177,253,190,125,146, 0,255, 0, 0, 0, 0,190, 94, 11,204, 61, 32, 8,125, 62, 43,251,247,231, 79,253,190,125,146, 0,255, - 0, 0, 0, 0, 62,140,229, 26,187,152,222, 60, 62, 62,165, 20, 33, 20, 2, 75,123,160, 0,255, 0, 0, 0, 0,190, 45,135, 79, -187,152,222, 60, 62, 62,165, 20,222,236, 2, 75,123,160, 0,255, 0, 0, 0, 0, 62,105, 69,184,188,187,128,115, 62, 73,215, 88, - 26, 85,248,238,125, 14, 0,255, 0, 0, 0, 0,189,250, 5,163,188,187,128,115, 62, 73,215, 88,229,171,248,238,125, 14, 0,255, - 0, 0, 0, 0, 62, 34, 92,178,186,133,194,226, 62, 92,128,116, 7, 8,250,142,127,175, 0,255, 0, 0, 0, 0,189, 88,103, 48, -186,133,194,226, 62, 92,128,116,248,248,250,142,127,175, 0,255, 0, 0, 0, 0, 62, 11,248, 41, 61,177, 13, 57, 62, 92,128,116, - 34,169,240, 2,122, 43, 0,255, 0, 0, 0, 0,188,253,170, 27, 61,177, 13, 57, 62, 92,128,116,221, 87,240, 2,122, 43, 0,255, - 0, 0, 0, 0, 62, 26,229,218, 61,251,177,170, 62, 92,128,116, 27,126,239,108,123,231, 0,255, 0, 0, 0, 0,189, 58,139,207, - 61,251,177,170, 62, 92,128,116,228,130,239,108,123,231, 0,255, 0, 0, 0, 0, 62, 38, 24, 30, 61,236,195,250, 62, 81, 78, 48, - 64,226,207, 13, 98,224, 0,255, 0, 0, 0, 0,189,103, 84,224, 61,236,195,250, 62, 81, 78, 48,191, 30,207, 13, 98,224, 0,255, - 0, 0, 0, 0, 62, 19,111, 1, 61,177, 13, 57, 62, 81, 78, 48, 96, 29,229,169, 80, 81, 0,255, 0, 0, 0, 0,189, 28,176,110, - 61,177, 13, 57, 62, 81, 78, 48,159,227,229,169, 80, 81, 0,255, 0, 0, 0, 0, 62, 41,211,138, 59,205,106, 77, 62, 81, 78, 48, - 55, 36, 71,122, 90,188, 0,255, 0, 0, 0, 0,189,118, 66,143, 59,205,106, 77, 62, 81, 78, 48,200,220, 71,122, 90,188, 0,255, - 0, 0, 0, 0, 62,105, 69,184,188, 67,220,161, 62, 66, 96,128, 21, 76, 78, 90, 98,241, 0,255, 0, 0, 0, 0,189,250, 5,163, -188, 67,220,161, 62, 66, 96,128,234,180, 78, 90, 98,241, 0,255, 0, 0, 0, 0, 62,137, 41,174, 59, 43,249,149, 62, 55, 46, 59, -245, 85, 69, 69,107, 25, 0,255, 0, 0, 0, 0,190, 38, 16,118, 59, 43,249,149, 62, 55, 46, 59, 10,171, 69, 69,107, 25, 0,255, - 0, 0, 0, 0, 62,157,176,129, 61, 61,227,222, 62, 40, 64,139,223,232, 29,211,120, 67, 0,255, 0, 0, 0, 0,190, 79, 30, 28, - 61, 61,227,222, 62, 40, 64,139, 32, 24, 29,211,120, 67, 0,255, 0, 0, 0, 0, 62,159,142, 55, 61,162, 31,137, 62, 40, 64,139, -210,148,238,123,118, 95, 0,255, 0, 0, 0, 0,190, 82,217,136, 61,162, 31,137, 62, 40, 64,139, 45,108,238,123,118, 95, 0,255, - 0, 0, 0, 0, 62,153,245, 21, 61,214, 95,114, 62, 43,251,247,229,216,179,108, 99, 43, 0,255, 0, 0, 0, 0,190, 71,167, 67, - 61,214, 95,114, 62, 43,251,247, 26, 40,179,108, 99, 43, 0,255, 0, 0, 0, 0, 62,123,238,212, 62, 5, 79,173, 62, 77,146,196, -237,202,158,179, 81, 35, 2,255, 0, 0, 0, 0,190, 15,171,238, 62, 5, 79,173, 62, 77,146,196, 18, 54,158,179, 81, 35, 2,255, - 0, 0, 0, 0, 62, 60,124,166, 62, 9, 11, 25, 62, 85, 9,156, 39, 24,212,118,113,214, 2,255, 0, 0, 0, 0,189,160,115,129, - 62, 9, 11, 25, 62, 85, 9,156,216,232,212,118,113,214, 2,255, 0, 0, 0, 0, 62, 86,156,155, 62, 12,198,133, 62, 77,146,196, - 1,213,193,189,111,208, 0,255, 0, 0, 0, 0,189,212,179,106, 62, 12,198,133, 62, 77,146,196,254, 43,193,189,111,208, 0,255, - 0, 0, 0, 0, 62, 23, 42,109, 60,230,126,216, 62, 77,146,196, 84,226, 42,192, 85,187, 0,255, 0, 0, 0, 0,189, 43,158, 31, - 60,230,126,216, 62, 77,146,196,171, 30, 42,192, 85,187, 0,255, 0, 0, 0, 0, 62, 19,111, 1, 61, 91,191, 63, 62, 77,146,196, -102,235, 2,196, 76, 11, 0,255, 0, 0, 0, 0,189, 28,176,110, 61, 91,191, 63, 62, 77,146,196,153, 21, 2,196, 76, 11, 0,255, - 0, 0, 0, 0, 61,212,194,185, 62, 38,230,122, 62, 10,101, 42,182,183,104,118,246, 5, 0,255, 0, 0, 0, 0, 58,240,196,191, - 62, 38,230,122, 62, 10,101, 42, 73, 73,104,118,246, 5, 0,255, 0, 0, 0, 0, 62, 19,111, 1, 62,131,247,186, 62, 14, 32,150, -192,208, 66,221,167, 3, 2,255, 0, 0, 0, 0,189, 28,176,110, 62,131,247,186, 62, 14, 32,150, 63, 48, 66,221,167, 3, 2,255, - 0, 0, 0, 0, 62, 86,156,155, 62,137,144,220, 62, 2,238, 82, 9, 59, 90, 89,165,208, 2,255, 0, 0, 0, 0,189,212,179,106, - 62,137,144,220, 62, 2,238, 82,246,197, 90, 89,165,208, 2,255, 0, 0, 0, 0, 62,142,194,208, 62, 83,175,139, 61,224,138,107, - 37,165,114,104,212,176, 0,255, 0, 0, 0, 0,190, 49, 66,187, 62, 83,175,139, 61,224,138,107,218, 91,114,104,212,176, 0,255, - 0, 0, 0, 0, 62,189,105,152, 62, 35, 43, 14, 61,164,211,170, 45, 67,116, 40,227, 1, 0,255, 0, 0, 0, 0,190,135, 72, 37, - 62, 35, 43, 14, 61,164,211,170,210,189,116, 40,227, 1, 0,255, 0, 0, 0, 0, 62,217,103, 66, 62, 12,198,133, 61,134,248, 73, - 94,100, 79,237,223, 18, 0,255, 0, 0, 0, 0,190,163, 69,207, 62, 12,198,133, 61,134,248, 73,161,156, 79,237,223, 18, 0,255, - 0, 0, 0, 0, 62,211,206, 32, 60,200,163,119, 60,211,115,252,120,247,221,255,231,165, 0,255, 0, 0, 0, 0,190,157,172,173, - 60,200,163,119, 60,211,115,252,135, 9,221,255,231,165, 0,255, 0, 0, 0, 0, 62,170,192,123,189, 85, 45,188, 61, 52, 94,112, - 76,155,154,106,242, 19, 0,255, 0, 0, 0, 0,190,105, 62, 16,189, 85, 45,188, 61, 52, 94,112,179,101,154,106,242, 19, 0,255, - 0, 0, 0, 0, 62,131,144,140,189,196, 41, 0, 61,142,111, 33, 56,204,142, 26, 13,138, 0,255, 0, 0, 0, 0,190, 26,222, 50, -189,196, 41, 0, 61,142,111, 33,199, 52,142, 26, 13,138, 0,255, 0, 0, 0, 0, 61, 88,133,203, 62,187,243, 16,188,105,242, 89, - 0, 0,106,155, 70,214, 2,255, 0, 0, 0, 0, 61, 88,133,203, 62,208,121,226,190, 62, 7,254, 0, 0,127,243, 3, 82, 2,255, - 0, 0, 0, 0, 61, 88,133,203,190, 18,152,254,190,236,214, 11, 0, 0,164, 54,166,204, 3,255, 0, 0, 0, 0, 61, 88,133,203, -190,136,190,173,189,124,142,139, 0, 0,129,179,235, 65, 0,255, 0, 0, 0, 0, 61, 88,133,203,191, 1,243,205, 61,134,248, 73, - 0, 0,151,182,181,204, 2,255, 0, 0, 0, 0, 61, 88,133,203,190,218,217,247, 60, 56, 12,241, 0, 0,221,231,132,162, 2,255, - 0, 0, 0, 0, 61, 88,133,203,190,162,222,161, 57,157, 21,147, 0, 0,212, 16,135,201, 0,255, 0, 0, 0, 0, 61, 88,133,203, -190,142, 87,207,188,146,212,141, 0, 0,147,245,187, 97, 0,255, 0, 0, 0, 0, 62,230,119, 61, 61,106,172,239,189,253, 43,161, -125,164,235,181, 13,156, 0,255, 0, 0, 0, 0,190,176, 85,202, 61,106,172,239,189,253, 43,161,130, 92,235,181, 13,156, 0,255, - 0, 0, 0, 0, 62,232, 84,243, 61,199,113,194,190, 47, 26, 78,126,174,238, 23,252, 66, 0,255, 0, 0, 0, 0,190,178, 51,128, - 61,199,113,194,190, 47, 26, 78,129, 82,238, 23,252, 66, 0,255, 0, 0, 0, 0, 62,211,206, 32, 61,147, 49,216,190,180,218,181, - 81, 70, 13,148,158, 15, 1,255, 0, 0, 0, 0,190,157,172,173, 61,147, 49,216,190,180,218,181,174,186, 13,148,158, 15, 1,255, - 0, 0, 0, 0, 62,137, 41,174, 62, 27,180, 54,190,244, 76,226, 58,123, 21,228,144, 70, 3,255, 0, 0, 0, 0,190, 38, 16,118, - 62, 27,180, 54,190,244, 76,226,197,133, 21,228,144, 70, 3,255, 0, 0, 0, 0, 62,202,121,146,189,151, 95,239,189,238, 61,240, - 89, 76,164,139, 6,161, 2,255, 0, 0, 0, 0,190,148, 88, 31,189,151, 95,239,189,238, 61,240,166,180,164,139, 6,161, 2,255, - 0, 0, 0, 0, 62,168,226,197,189,226, 4, 97,190,103, 21,163, 38, 93,134, 34, 7,182, 0,255, 0, 0, 0, 0,190,101,130,164, -189,226, 4, 97,190,103, 21,163,217,163,134, 34, 7,182, 0,255, 0, 0, 0, 0, 62,180, 21, 9,189,100, 27,109,190,178,252,255, - 43,106,170,219,170,222, 1,255, 0, 0, 0, 0,190,123,231, 45,189,100, 27,109,190,178,252,255,212,150,170,219,170,222, 1,255, - 0, 0, 0, 0, 62, 86,156,155,188,217, 91,211,190,234,248, 85, 55,168,213,109,148,229, 2,255, 0, 0, 0, 0,189,212,179,106, -188,217, 91,211,190,234,248, 85,200, 88,213,109,148,229, 2,255, 0, 0, 0, 0, 62, 38, 24, 30,190, 93, 61,112, 61, 37,112,191, -120,197,255, 36,213,158, 0,255, 0, 0, 0, 0,189,103, 84,224,190, 93, 61,112, 61, 37,112,191,135, 59,255, 36,213,158, 0,255, - 0, 0, 0, 0, 62, 11,248, 41,190,123, 24,209,188,236,102,176, 84,188,181, 20,196, 24, 0,255, 0, 0, 0, 0,188,253,170, 27, -190,123, 24,209,188,236,102,176,171, 68,181, 20,196, 24, 0,255, 0, 0, 0, 0, 62, 64, 56, 19,190,196,117,110, 60,241, 79, 92, - 79,131,254, 86,155,183, 2,255, 0, 0, 0, 0,189,167,234, 89,190,196,117,110, 60,241, 79, 92,176,125,254, 86,155,183, 2,255, - 0, 0, 0, 0, 62, 45,142,246,190,146, 19, 59, 61, 7,149, 95, 99, 5, 1, 8,174,231, 0,255, 0, 0, 0, 0,189,130,152, 32, -190,146, 19, 59, 61, 7,149, 95,156,251, 1, 8,174,231, 0,255, 0, 0, 0, 0, 62, 82,225, 47,190,244,249,234, 61, 22,131, 15, - 62, 65,185,227,168,224, 2,255, 0, 0, 0, 0,189,205, 60,146,190,244,249,234, 61, 22,131, 15,193,191,185,227,168,224, 2,255, - 0, 0, 0, 0, 61,242,158, 25,190,207,167,178, 60,181,152,155, 16,133,232,208,131, 55, 0,255, 0, 0, 0, 0,188, 80,194,110, -190,207,167,178, 60,181,152,155,239,123,232,208,131, 55, 0,255, 0, 0, 0, 0, 61,227,176,105,190,155,103,201, 60,151,189, 58, - 48, 7,224,163,141,149, 0,255, 0, 0, 0, 0,187,178,169,214,190,155,103,201, 60,151,189, 58,207,249,224,163,141,149, 0,255, - 0, 0, 0, 0, 62, 4,129, 81,190,252,112,195, 61, 97, 39,129, 12, 68,158,218,173,147, 0,255, 0, 0, 0, 0,188,193,243, 89, -190,252,112,195, 61, 97, 39,129,243,188,158,218,173,147, 0,255, 0, 0, 0, 0, 62, 30,161, 70,190, 59,166,163, 61, 82, 57,208, -124,195,227,106,255,203, 0,255, 0, 0, 0, 0,189, 73,121,127,190, 59,166,163, 61, 82, 57,208,131, 61,227,106,255,203, 0,255, - 0, 0, 0, 0, 62, 26,229,218,190, 33,134,174, 61,142,111, 33,120, 29,231,105, 36,193, 0,255, 0, 0, 0, 0,189, 58,139,207, -190, 33,134,174, 61,142,111, 33,135,227,231,105, 36,193, 0,255, 0, 0, 0, 0, 62, 23, 42,109,190, 7,102,186, 61,172, 74,130, -101,160,182,164, 25,240, 0,255, 0, 0, 0, 0,189, 43,158, 31,190, 7,102,186, 61,172, 74,130,154, 96,182,164, 25,240, 0,255, - 0, 0, 0, 0, 62, 26,229,218,190,111,230,140,189,148,171,206, 84,120,159,221,253,198, 0,255, 0, 0, 0, 0,189, 58,139,207, -190,111,230,140,189,148,171,206,171,136,159,221,253,198, 0,255, 0, 0, 0, 0, 62, 67,243,127,190, 74,148, 83,190,139,205, 16, - 67,255,151, 42,228, 73, 2,255, 0, 0, 0, 0,189,175, 97, 49,190, 74,148, 83,190,139,205, 16,188, 1,151, 42,228, 73, 2,255, - 0, 0, 0, 0, 62, 90, 88, 7,189,248,104,235,190,205, 28,244, 63,201,176, 25,179, 0, 3,255, 0, 0, 0, 0,189,220, 42, 66, -189,248,104,235,190,205, 28,244,192, 55,176, 25,179, 0, 3,255, 0, 0, 0, 0, 62,135, 75,248, 62,180,124, 55,190,167,202,187, - 56, 34, 95,160,192, 17, 2,255, 0, 0, 0, 0,190, 34, 85, 10, 62,180,124, 55,190,167,202,187,199,222, 95,160,192, 17, 2,255, - 0, 0, 0, 0, 62,135, 75,248, 62,195,105,232,190, 58, 76,146, 55, 54,115,120, 0,239, 2,255, 0, 0, 0, 0,190, 34, 85, 10, - 62,195,105,232,190, 58, 76,146,200,202,115,120, 0,239, 2,255, 0, 0, 0, 0, 62,135, 75,248, 62,176,192,203,189, 34,252,105, - 63,239, 92,164, 60,238, 2,255, 0, 0, 0, 0,190, 34, 85, 10, 62,176,192,203,189, 34,252,105,192, 17, 92,164, 60,238, 2,255, - 0, 0, 0, 0, 62,137, 41,174, 62, 68,193,219, 61, 82, 57,208, 49,123,102,255, 57,170, 0,255, 0, 0, 0, 0,190, 38, 16,118, - 62, 68,193,219, 61, 82, 57,208,206,133,102,255, 57,170, 0,255, 0, 0, 0, 0, 62,200,155,220, 62, 12,198,133, 59,248,172, 95, - 98,142, 73,198, 35, 6, 0,255, 0, 0, 0, 0,190,146,122,105, 62, 12,198,133, 59,248,172, 95,157,114, 73,198, 35, 6, 0,255, - 0, 0, 0, 0, 62,178, 55, 83, 62, 35, 43, 14,188,146,212,141, 61,129,106,254, 33,241, 0,255, 0, 0, 0, 0,190,120, 43,193, - 62, 35, 43, 14,188,146,212,141,194,127,106,254, 33,241, 0,255, 0, 0, 0, 0, 62,180, 21, 9, 62,141, 76, 72,189,253, 43,161, - 76,234, 87,151, 52,221, 0,255, 0, 0, 0, 0,190,123,231, 45, 62,141, 76, 72,189,253, 43,161,179, 22, 87,151, 52,221, 0,255, - 0, 0, 0, 0, 62,217,103, 66, 62, 87,106,247,189,185,254, 7,101,187, 66, 28, 40,199, 2,255, 0, 0, 0, 0,190,163, 69,207, - 62, 87,106,247,189,185,254, 7,154, 69, 66, 28, 40,199, 2,255, 0, 0, 0, 0, 62,217,103, 66, 62,113,138,236,190, 80,177, 26, -113,183, 58, 68,248,119, 2,255, 0, 0, 0, 0,190,163, 69,207, 62,113,138,236,190, 80,177, 26,142, 73, 58, 68,248,119, 2,255, - 0, 0, 0, 0, 62,180, 21, 9, 62,152,126,141,190,118, 3, 83, 86,235, 93,238,253,205, 0,255, 0, 0, 0, 0,190,123,231, 45, - 62,152,126,141,190,118, 3, 83,169, 21, 93,238,253,205, 0,255, 0, 0, 0, 0, 62,180, 21, 9, 62,135,179, 38,190,182,184,107, - 85,232, 70,154,192,157, 2,255, 0, 0, 0, 0,190,123,231, 45, 62,135,179, 38,190,182,184,107,170, 24, 70,154,192,157, 2,255, - 0, 0, 0, 0, 62,217,103, 66, 62, 76, 56,179,190,162, 49,153,110,166, 42,177,207,222, 2,255, 0, 0, 0, 0,190,163, 69,207, - 62, 76, 56,179,190,162, 49,153,145, 90, 42,177,207,222, 2,255, 0, 0, 0, 0, 62,174,123,231, 61,206,232,154,190,216, 79, 56, - 75, 58, 1, 57,152,116, 3,255, 0, 0, 0, 0,190,112,180,232, 61,206,232,154,190,216, 79, 56,180,198, 1, 57,152,116, 3,255, - 0, 0, 0, 0, 62,142,194,208,189, 40,100,171,190,206,250,170, 70, 73,187,147,173,200, 1,255, 0, 0, 0, 0,190, 49, 66,187, -189, 40,100,171,190,206,250,170,185,183,187,147,173,200, 0,255, 0, 0, 0, 0, 62,223, 0,100, 61,206,232,154,190,121,190,191, -114,194, 41, 80, 38,207, 0,255, 0, 0, 0, 0,190,168,222,241, 61,206,232,154,190,121,190,191,141, 62, 41, 80, 38,207, 0,255, - 0, 0, 0, 0, 62,120, 51,104,190, 7,102,186,189,163,153,127, 74,232,154,153, 22, 28, 0,255, 0, 0, 0, 0,190, 11,240,130, -190, 7,102,186,189,163,153,127,181, 24,154,153, 22, 28, 0,255, 0, 0, 0, 0, 62,129,178,214,190, 18,152,254,190,125,122, 44, - 71, 89,151,115,237, 1, 0,255, 0, 0, 0, 0,190, 23, 34,198,190, 18,152,254,190,125,122, 44,184,167,151,115,237, 1, 0,255, - 0, 0, 0, 0, 62,239,203,202, 62, 12,198,133,190,132, 86, 56,220, 72, 93,207, 79,106, 2,255, 0, 0, 0, 0,190,185,170, 88, - 62, 12,198,133,190,132, 86, 56, 35,184, 93,207, 79,106, 2,255, 0, 0, 0, 0, 62,211,206, 32,189,240,242, 18,190, 84,108,135, - 15, 30,150, 34, 70, 84, 2,255, 0, 0, 0, 0,190,157,172,173,189,240,242, 18,190, 84,108,135,240,226,150, 34, 70, 84, 2,255, - 0, 0, 0, 0, 63, 9,160, 38,189,203,159,217,190,154,186,192, 67,164,166,138, 61,172, 0,255, 0, 0, 0, 0,190,221, 30,219, -189,203,159,217,190,154,186,192,188, 92,166,138, 61,172, 0,255, 0, 0, 0, 0, 63, 38,140,172,188,217, 91,211,190,178,252,255, - 83,179,206,223, 83,114, 0,255, 0, 0, 0, 0,191, 11,123,244,188,217, 91,211,190,178,252,255,172, 77,206,223, 83,114, 0,255, - 0, 0, 0, 0, 63, 46,242, 95, 61,199,113,194,190,177, 31, 73, 92, 54, 12,232, 87,210, 2,255, 0, 0, 0, 0,191, 19,225,167, - 61,199,113,194,190,177, 31, 73,163,202, 12,232, 87,210, 2,255, 0, 0, 0, 0, 63, 32,243,138, 62, 61, 75, 3,190,177, 31, 73, - 62,247, 83,221, 73, 97, 0,255, 0, 0, 0, 0,191, 5,226,209, 62, 61, 75, 3,190,177, 31, 73,193, 9, 83,221, 73, 97, 0,255, - 0, 0, 0, 0, 63, 7,194,112, 62, 46, 93, 82,190,150,255, 84, 5,181,111, 80, 62,236, 0,255, 0, 0, 0, 0,190,217, 99,111, - 62, 46, 93, 82,190,150,255, 84,250, 75,111, 80, 62,236, 0,255, 0, 0, 0, 0, 63, 6,211,149, 62, 16,129,241,190,145,102, 50, - 69,236,239,117,105,236, 0,255, 0, 0, 0, 0,190,215,133,185, 62, 16,129,241,190,145,102, 50,186, 20,239,117,105,236, 0,255, - 0, 0, 0, 0, 63, 27, 90,104, 62, 27,180, 54,190,169,168,113, 24, 34,231,205,123, 89, 0,255, 0, 0, 0, 0,191, 0, 73,175, - 62, 27,180, 54,190,169,168,113,231,222,231,205,123, 89, 0,255, 0, 0, 0, 0, 63, 36,174,246, 61,169,150, 97,190,173, 99,221, -223, 69,252, 16,123,173, 0,255, 0, 0, 0, 0,191, 9,158, 62, 61,169,150, 97,190,173, 99,221, 32,187,252, 16,123,173, 0,255, - 0, 0, 0, 0, 63, 30, 38,249,188,127,147, 98,190,173, 99,221,239,171, 39, 0,120,207, 0,255, 0, 0, 0, 0,191, 3, 22, 64, -188,127,147, 98,190,173, 99,221, 16, 85, 39, 0,120,207, 0,255, 0, 0, 0, 0, 63, 8,177, 75,189,143,233, 23,190,149, 33,158, - 51, 9, 45, 56,108, 82, 0,255, 0, 0, 0, 0,190,219, 65, 37,189,143,233, 23,190,149, 33,158,204,247, 45, 56,108, 82, 0,255, - 0, 0, 0, 0, 62,224,222, 26,189,173,196,120,190, 88, 39,243, 38,147, 62,224,104,153, 2,255, 0, 0, 0, 0,190,170,188,167, -189,173,196,120,190, 88, 39,243,217,109, 62,224,104,153, 2,255, 0, 0, 0, 0, 62,247, 66,162, 61,236,195,250,190,128,154,204, - 62,218,243,152,110,206, 2,255, 0, 0, 0, 0,190,193, 33, 48, 61,236,195,250,190,128,154,204,193, 38,243,152,110,206, 2,255, - 0, 0, 0, 0, 62,252,219,196, 61,184,132, 17,190,145,102, 50, 87, 10,182, 73, 58, 19, 0,255, 0, 0, 0, 0,190,198,186, 82, - 61,184,132, 17,190,145,102, 50,168,246,182, 73, 58, 19, 0,255, 0, 0, 0, 0, 62,237,238, 21,189,128,251,103,190,125,122, 44, - 15,232,121,106, 37, 64, 0,255, 0, 0, 0, 0,190,183,204,162,189,128,251,103,190,125,122, 44,240, 24,121,106, 37, 64, 0,255, - 0, 0, 0, 0, 63, 9,160, 38,189, 85, 45,188,190,164, 15, 79,239,157,122, 89, 33,212, 0,255, 0, 0, 0, 0,190,221, 30,219, -189, 85, 45,188,190,164, 15, 79, 16, 99,122, 89, 33,212, 0,255, 0, 0, 0, 0, 63, 27, 90,104,188, 8, 37,223,190,182,184,107, -158, 8, 81,202, 9,185, 0,255, 0, 0, 0, 0,191, 0, 73,175,188, 8, 37,223,190,182,184,107, 97,248, 81,202, 9,185, 0,255, - 0, 0, 0, 0, 63, 32,243,138, 61,132, 68, 40,190,182,184,107,131, 60,239,145, 23, 95, 0,255, 0, 0, 0, 0,191, 5,226,209, - 61,132, 68, 40,190,182,184,107,124,196,239,145, 23, 95, 0,255, 0, 0, 0, 0, 63, 25,124,178, 61,236,195,250,190,180,218,181, -228, 27,153, 22, 70,206, 0,255, 0, 0, 0, 0,190,252,215,242, 61,236,195,250,190,180,218,181, 27,229,153, 22, 70,206, 0,255, - 0, 0, 0, 0, 63, 7,194,112, 61,221,214, 74,190,162, 49,153, 68, 65,168,253, 64,113, 0,255, 0, 0, 0, 0,190,217, 99,111, - 61,221,214, 74,190,162, 49,153,187,191,168,253, 64,113, 0,255, 0, 0, 0, 0, 62,228,153,135, 61,169,150, 97,190,125,122, 44, - 86,113,222,190, 88, 87, 0,255, 0, 0, 0, 0,190,174,120, 20, 61,169,150, 97,190,125,122, 44,169,143,222,190, 88, 87, 0,255, - 0, 0, 0, 0, 62,226,187,209, 60,230,126,216,190,141,170,198, 95,196,182,107, 42,100, 0,255, 0, 0, 0, 0,190,172,154, 93, - 60,230,126,216,190,141,170,198,160, 60,182,107, 42,100, 0,255, 0, 0, 0, 0, 62,208, 18,180,188, 8, 37,223,190,141,170,198, -111, 42, 14, 21, 61,220, 0,255, 0, 0, 0, 0,190,153,241, 65,188, 8, 37,223,190,141,170,198,144,214, 14, 21, 61,220, 0,255, - 0, 0, 0, 0, 62,223, 0,100,188, 67,220,161,190,141,170,198, 79, 3, 91, 4, 43, 19, 2,255, 0, 0, 0, 0,190,168,222,241, -188, 67,220,161,190,141,170,198,176,253, 91, 4, 43, 19, 2,255, 0, 0, 0, 0, 62,228,153,135,189, 55, 82, 92,190,141,170,198, -107,207,254,198, 68,250, 2,255, 0, 0, 0, 0,190,174,120, 20,189, 55, 82, 92,190,141,170,198,148, 49,254,198, 68,250, 2,255, - 0, 0, 0, 0, 62,221, 34,174,189,115, 9, 29,190,141,170,198, 82, 7, 64,225, 73,200, 0,255, 0, 0, 0, 0,190,167, 1, 59, -189,115, 9, 29,190,141,170,198,173,249, 64,225, 73,200, 0,255, 0, 0, 0, 0, 62,200,155,220,189, 85, 45,188,190, 58, 76,146, -117, 38,207, 66,239, 47, 0,255, 0, 0, 0, 0,190,146,122,105,189, 85, 45,188,190, 58, 76,146,138,218,207, 66,239, 47, 0,255, - 0, 0, 0, 0, 62,198,190, 38,189,128,251,103,190,106,209, 15, 97,150, 18,139, 80,184, 0,255, 0, 0, 0, 0,190,144,156,179, -189,128,251,103,190,106,209, 15,158,106, 18,139, 80,184, 0,255, 0, 0, 0, 0, 62,198,190, 38,189, 10,137, 74,190,114, 71,231, -116, 17,240, 66, 51,154, 0,255, 0, 0, 0, 0,190,144,156,179,189, 10,137, 74,190,114, 71,231,139,239,240, 66, 51,154, 0,255, - 0, 0, 0, 0, 62,217,103, 66, 61, 46,246, 45,190,125,122, 44,113,112,204,245, 30, 39, 0,255, 0, 0, 0, 0,190,163, 69,207, - 61, 46,246, 45,190,125,122, 44,142,144,204,245, 30, 39, 0,255, 0, 0, 0, 0, 62,239,203,202, 61,121,154,159,190,139,205, 16, - 90,105,185, 61, 56,146, 0,255, 0, 0, 0, 0,190,185,170, 88, 61,121,154,159,190,139,205, 16,165,151,185, 61, 56,146, 0,255, - 0, 0, 0, 0, 62,239,203,202, 61,106,172,239,190,152,221, 10, 82,191,204,102, 82,230, 0,255, 0, 0, 0, 0,190,185,170, 88, - 61,106,172,239,190,152,221, 10,173, 65,204,102, 82,230, 0,255, 0, 0, 0, 0, 62,221, 34,174,189,115, 9, 29,190,152,221, 10, - 29,246, 98, 64, 76, 94, 0,255, 0, 0, 0, 0,190,167, 1, 59,189,115, 9, 29,190,152,221, 10,226, 10, 98, 64, 76, 94, 0,255, - 0, 0, 0, 0, 62,230,119, 61,189, 55, 82, 92,190,152,221, 10, 77,150, 17,111,100, 75, 0,255, 0, 0, 0, 0,190,176, 85,202, -189, 55, 82, 92,190,152,221, 10,178,106, 17,111,100, 75, 0,255, 0, 0, 0, 0, 62,224,222, 26,188,127,147, 98,190,152,221, 10, - 60,239, 60,190, 94,195, 0,255, 0, 0, 0, 0,190,170,188,167,188,127,147, 98,190,152,221, 10,195, 17, 60,190, 94,195, 0,255, - 0, 0, 0, 0, 62,209,240,106,188, 8, 37,223,190,152,221, 10, 83,199, 23,178, 93,209, 0,255, 0, 0, 0, 0,190,155,206,247, -188, 8, 37,223,190,152,221, 10,172, 57, 23,178, 93,209, 0,255, 0, 0, 0, 0, 62,228,153,135, 60,230,126,216,190,152,221, 10, - 73, 98,200, 1, 88,170, 0,255, 0, 0, 0, 0,190,174,120, 20, 60,230,126,216,190,152,221, 10,182,158,200, 1, 88,170, 0,255, - 0, 0, 0, 0, 63, 9,160, 38, 61,206,232,154,190,175, 65,147, 68, 23,223,166,103,112, 0,255, 0, 0, 0, 0,190,221, 30,219, - 61,206,232,154,190,175, 65,147,187,233,223,166,103,112, 0,255, 0, 0, 0, 0, 63, 27, 90,104, 61,221,214, 74,190,192, 12,249, - 18,165,216,156,120, 89, 0,255, 0, 0, 0, 0,191, 0, 73,175, 61,221,214, 74,190,192, 12,249,237, 91,216,156,120, 89, 0,255, - 0, 0, 0, 0, 63, 35,192, 27, 61,121,154,159,190,193,234,175,185, 25,231, 29,103,157, 0,255, 0, 0, 0, 0,191, 8,175, 98, - 61,121,154,159,190,193,234,175, 70,231,231, 29,103,157, 0,255, 0, 0, 0, 0, 63, 30, 38,249,188, 67,220,161,190,192, 12,249, -209, 43, 64, 0,100,119, 0,255, 0, 0, 0, 0,191, 3, 22, 64,188, 67,220,161,190,192, 12,249, 46,213, 64, 0,100,119, 0,255, - 0, 0, 0, 0, 63, 10,143, 1,189, 85, 45,188,190,177, 31, 73, 26, 52, 92,240, 84, 3, 0,255, 0, 0, 0, 0,190,222,252,145, -189, 85, 45,188,190,177, 31, 73,229,204, 92,240, 84, 3, 0,255, 0, 0, 0, 0, 62,237,238, 21,189,115, 9, 29,190,139,205, 16, - 8, 58,111,116, 62,101, 0,255, 0, 0, 0, 0,190,183,204,162,189,115, 9, 29,190,139,205, 16,247,198,111,116, 62,101, 0,255, - 0, 0, 0, 0, 62,254,185,122, 61,169,150, 97,190,158,118, 45, 80,198,213,102, 89,175, 0,255, 0, 0, 0, 0,190,200,152, 8, - 61,169,150, 97,190,158,118, 45,175, 58,213,102, 89,175, 0,255, 0, 0, 0, 0, 62,239,203,202,186,133,194,226,190,154,186,192, - 25,136, 0,130,125,108, 0,255, 0, 0, 0, 0,190,185,170, 88,186,133,194,226,190,154,186,192,230,120, 0,130,125,108, 0,255, - 0, 0, 0, 0, 62,250,254, 14,188,187,128,115,190,156,152,119, 27, 2, 30, 58,121,104, 0,255, 0, 0, 0, 0,190,196,220,156, -188,187,128,115,190,156,152,119,228,254, 30, 58,121,104, 0,255, 0, 0, 0, 0, 63, 4,245,223, 59,205,106, 77,190,164, 15, 79, - 55,218,253,126,115, 35, 0,255, 0, 0, 0, 0,190,211,202, 76, 59,205,106, 77,190,164, 15, 79,200, 38,253,126,115, 35, 0,255, - 0, 0, 0, 0, 63, 0, 75,152, 60,230,126,216,190,160, 83,227, 41,164,255,199,121, 8, 0,255, 0, 0, 0, 0,190,202,117,190, - 60,230,126,216,190,160, 83,227,214, 92,255,199,121, 8, 0,255, 0, 0, 0, 0, 63, 6,211,149, 61,106,172,239,190,165,237, 5, - 39,237, 9,191,121, 55, 0,255, 0, 0, 0, 0,190,215,133,185, 61,106,172,239,190,165,237, 5,216, 19, 9,191,121, 55, 0,255, - 0, 0, 0, 0, 63, 11,125,220, 61, 17, 26,205,190,167,202,187, 46,208,244, 41,118,137, 0,255, 0, 0, 0, 0,190,224,218, 71, - 61, 17, 26,205,190,167,202,187,209, 48,244, 41,118,137, 0,255, 0, 0, 0, 0, 63, 18, 5,218, 61, 61,227,222,190,169,168,113, - 53, 70, 3, 84,116, 85, 2,255, 0, 0, 0, 0,190,237,234, 65, 61, 61,227,222,190,169,168,113,202,186, 3, 84,116, 85, 2,255, - 0, 0, 0, 0, 63, 15, 57, 73, 61,154,168,176,190,169,168,113, 44, 99, 38, 36,113,212, 2,255, 0, 0, 0, 0,190,232, 81, 31, - 61,154,168,176,190,169,168,113,211,157, 38, 36,113,212, 2,255, 0, 0, 0, 0, 63, 7,194,112, 62, 27,180, 54,190,192, 12,249, -198,249, 72, 3,166,222, 3,255, 0, 0, 0, 0,190,217, 99,111, 62, 27,180, 54,190,192, 12,249, 57, 7, 72, 3,166,222, 3,255, - 0, 0, 0, 0, 63, 34,209, 64, 62, 42,161,230,190,206,250,170, 37,198, 68,123,154,174, 3,255, 0, 0, 0, 0,191, 7,192,135, - 62, 42,161,230,190,206,250,170,218, 58, 68,123,154,174, 3,255, 0, 0, 0, 0, 63, 48,208, 21, 61,177, 13, 57,190,195,200,102, -121, 3, 17,201,218, 73, 3,255, 0, 0, 0, 0,191, 21,191, 93, 61,177, 13, 57,190,195,200,102,134,253, 17,201,218, 73, 3,255, - 0, 0, 0, 0, 63, 42, 72, 24,188,217, 91,211,190,203, 63, 62, 82, 59,200, 75,175, 70, 3,255, 0, 0, 0, 0,191, 15, 55, 96, -188,217, 91,211,190,203, 63, 62,173,197,200, 75,175, 70, 3,255, 0, 0, 0, 0, 63, 9,160, 38,189,188,178, 40,190,193,234,175, -249,134,165,184,165,129, 3,255, 0, 0, 0, 0,190,221, 30,219,189,188,178, 40,190,193,234,175, 6,122,165,184,165,129, 3,255, - 0, 0, 0, 0, 62,215,137,140,189,226, 4, 97,190,154,186,192,249,126,163,122,167,205, 1,255, 0, 0, 0, 0,190,161,104, 25, -189,226, 4, 97,190,154,186,192, 6,130,163,122,167,205, 1,255, 0, 0, 0, 0, 62,232, 84,243, 62, 1,148, 65,190,167,202,187, -193, 93, 65,224,165,229, 1,255, 0, 0, 0, 0,190,178, 51,128, 62, 1,148, 65,190,167,202,187, 62,163, 65,224,165,229, 1,255, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,110,208, 0, 0, 1, 42, 0, 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,133,252,116, 1, 0, 0, + 0, 0, 0, 0, 4, 0, 6, 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, 3,161,166, 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, + 68, 65, 84, 65, 56, 1, 0, 0, 88,147,178, 3,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240,145,178, 3,232, 71,156, 3, + 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 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, 0, + 0, 0, 0, 0, 77, 65, 84, 69, 82, 73, 65, 76, 95, 80, 84, 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, 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,131,251,116, 1,234, 0, 0, 0, 0, 0, 0, 0, 7, 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, 68, 65, 84, 65,232, 0, 0, 0,232,232,160, 3,151, 0, 0, 0, 1, 0, 0, 0, + 8,154,178, 3, 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, 2, 0, 0, 0, 0, 0, 0,193, 0, 0,163, 67, 0, 64,180,196, + 0, 0,104, 67, 0, 0, 0,193, 0, 0,163, 67, 0, 64,180,196, 30,209,118, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213, 0, 53, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, + 0, 0, 4, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 48, 1, 0, 0, 72, 61,154, 3,255, 20, 0, 0, +160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,192,148,178, 3,185, 0, 0, 0, 1, 0, 0, 0,224,149,178, 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, 68, 65, 84, 65, 0, 0, 47, 28, 3,161,166, 32, 0, 0, 0, 55, 0, 0, 3,237, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 43, - 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 44, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 41, 0, 0, 0, 43, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 42, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 9, - 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 8, - 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 34, - 0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 14, - 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 6, - 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 19, 0, 0, 0, 34, - 0, 0, 0, 17, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 20, - 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 19, - 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 25, - 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 20, - 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 31, - 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 30, - 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 30, 0, 0, 0, 34, - 0, 0, 0, 23, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 34, - 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 35, - 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 38, 0, 0, 0, 34, - 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0, 39, - 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 30, - 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 39, 0, 0, 0, 41, 0, 0, 0, 34, - 0, 0, 0, 38, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 42, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 45, - 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 47, - 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0, 34, - 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 51, - 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 50, - 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 53, 0, 0, 0, 34, - 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 55, - 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 54, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 57, 0, 0, 0, 34, - 0, 0, 0, 13, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 61, - 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 58, - 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 63, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 47, - 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 60, 0, 0, 0, 34, - 0, 0, 0, 59, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 59, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 56, - 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 60, 0, 0, 0, 34, - 0, 0, 0, 51, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 59, - 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,171, 0, 0, 0, 34, 0, 0, 0,171, - 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 89, 0, 0, 0, 34, - 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0,172, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, - 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0,169, 0, 0, 0, 34, 0, 0, 0,169, 0, 0, 0,171, 0, 0, 0, 34, 0, 0, 0, 85, - 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0,170, 0, 0, 0,172, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0,170, 0, 0, 0, 34, - 0, 0, 0, 86, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,167, 0, 0, 0, 34, 0, 0, 0,167, 0, 0, 0,169, - 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0,168, 0, 0, 0,170, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0,168, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0,165, 0, 0, 0, 34, - 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0,166, 0, 0, 0,168, - 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0,166, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 79, - 0, 0, 0,163, 0, 0, 0, 34, 0, 0, 0,163, 0, 0, 0,165, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 81, 0, 0, 0, 34, - 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 82, - 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,143, 0, 0, 0, 34, 0, 0, 0,143, - 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0,144, 0, 0, 0, 34, - 0, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,162, 0, 0, 0, 34, 0, 0, 0,144, 0, 0, 0,162, - 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0,145, 0, 0, 0, 34, 0, 0, 0,143, - 0, 0, 0,145, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 93, 0, 0, 0, 34, - 0, 0, 0,144, 0, 0, 0,146, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0,147, - 0, 0, 0, 34, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0,148, 0, 0, 0, 34, 0, 0, 0, 93, - 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0,146, 0, 0, 0,148, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 96, 0, 0, 0, 34, - 0, 0, 0, 96, 0, 0, 0,149, 0, 0, 0, 34, 0, 0, 0,147, 0, 0, 0,149, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,150, - 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0,148, 0, 0, 0,150, 0, 0, 0, 34, 0, 0, 0, 96, - 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0, 34, 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0, 34, - 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0,150, 0, 0, 0,152, - 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,153, 0, 0, 0, 34, 0, 0, 0,151, - 0, 0, 0,153, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0,152, 0, 0, 0,154, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,155, - 0, 0, 0, 34, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,156, 0, 0, 0, 34, 0, 0, 0,101, - 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,154, 0, 0, 0,156, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,104, 0, 0, 0, 34, - 0, 0, 0,104, 0, 0, 0,157, 0, 0, 0, 34, 0, 0, 0,155, 0, 0, 0,157, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,158, - 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,156, 0, 0, 0,158, 0, 0, 0, 34, 0, 0, 0,104, - 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0,157, 0, 0, 0,159, 0, 0, 0, 34, - 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,158, 0, 0, 0,160, - 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,160, 0, 0, 0, 34, - 0, 0, 0,108, 0, 0, 0,125, 0, 0, 0, 34, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,159, - 0, 0, 0, 34, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,126, 0, 0, 0, 34, 0, 0, 0,109, - 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0,125, 0, 0, 0,176, 0, 0, 0, 34, 0, 0, 0,155, 0, 0, 0,176, 0, 0, 0, 34, - 0, 0, 0,156, 0, 0, 0,177, 0, 0, 0, 34, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0, 34, 0, 0, 0,123, 0, 0, 0,153, - 0, 0, 0, 34, 0, 0, 0,123, 0, 0, 0,176, 0, 0, 0, 34, 0, 0, 0,124, 0, 0, 0,154, 0, 0, 0, 34, 0, 0, 0,124, - 0, 0, 0,177, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,151, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,123, 0, 0, 0, 34, - 0, 0, 0,122, 0, 0, 0,152, 0, 0, 0, 34, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 34, 0, 0, 0,119, 0, 0, 0,149, - 0, 0, 0, 34, 0, 0, 0,119, 0, 0, 0,121, 0, 0, 0, 34, 0, 0, 0,120, 0, 0, 0,150, 0, 0, 0, 34, 0, 0, 0,120, - 0, 0, 0,122, 0, 0, 0, 34, 0, 0, 0,117, 0, 0, 0,147, 0, 0, 0, 34, 0, 0, 0,117, 0, 0, 0,119, 0, 0, 0, 34, - 0, 0, 0,118, 0, 0, 0,148, 0, 0, 0, 34, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 34, 0, 0, 0,115, 0, 0, 0,145, - 0, 0, 0, 34, 0, 0, 0,115, 0, 0, 0,117, 0, 0, 0, 34, 0, 0, 0,116, 0, 0, 0,146, 0, 0, 0, 34, 0, 0, 0,116, - 0, 0, 0,118, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,143, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 34, - 0, 0, 0,114, 0, 0, 0,144, 0, 0, 0, 34, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,162, - 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0, 34, 0, 0, 0,161, - 0, 0, 0,174, 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,179, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,179, 0, 0, 0, 34, - 0, 0, 0,162, 0, 0, 0,174, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,110, - 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0,175, 0, 0, 0, 34, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,180, 0, 0, 0, 34, - 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 34, 0, 0, 0,175, 0, 0, 0,181, 0, 0, 0, 34, 0, 0, 0,178, 0, 0, 0,180, - 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 32, 0, 0, 0,179, 0, 0, 0,181, 0, 0, 0, 34, 0, 0, 0,132, - 0, 0, 0,134, 0, 0, 0, 34, 0, 0, 0,134, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0,132, 0, 0, 0,171, 0, 0, 0, 34, - 0, 0, 0,133, 0, 0, 0,134, 0, 0, 0, 34, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0, 34, 0, 0, 0,130, 0, 0, 0,132, - 0, 0, 0, 34, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0, 34, 0, 0, 0,131, 0, 0, 0,133, 0, 0, 0, 34, 0, 0, 0,131, - 0, 0, 0,170, 0, 0, 0, 34, 0, 0, 0,128, 0, 0, 0,130, 0, 0, 0, 34, 0, 0, 0,128, 0, 0, 0,167, 0, 0, 0, 34, - 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 34, 0, 0, 0,163, 0, 0, 0,184, - 0, 0, 0, 34, 0, 0, 0,182, 0, 0, 0,184, 0, 0, 0, 34, 0, 0, 0,165, 0, 0, 0,182, 0, 0, 0, 34, 0, 0, 0,183, - 0, 0, 0,185, 0, 0, 0, 34, 0, 0, 0,164, 0, 0, 0,185, 0, 0, 0, 34, 0, 0, 0,166, 0, 0, 0,183, 0, 0, 0, 34, - 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0, 34, 0, 0, 0,141, 0, 0, 0,187, - 0, 0, 0, 34, 0, 0, 0,186, 0, 0, 0,187, 0, 0, 0, 32, 0, 0, 0,184, 0, 0, 0,186, 0, 0, 0, 34, 0, 0, 0,141, - 0, 0, 0,184, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,185, 0, 0, 0, 34, - 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,186, 0, 0, 0, 32, 0, 0, 0, 67, 0, 0, 0,182, - 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,183, 0, 0, 0, 34, 0, 0, 0,127, 0, 0, 0,128, 0, 0, 0, 34, 0, 0, 0, 67, - 0, 0, 0,127, 0, 0, 0, 32, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0, 34, 0, 0, 0,139, 0, 0, 0,190, 0, 0, 0, 34, - 0, 0, 0,188, 0, 0, 0,190, 0, 0, 0, 34, 0, 0, 0,141, 0, 0, 0,188, 0, 0, 0, 34, 0, 0, 0,139, 0, 0, 0,141, - 0, 0, 0, 34, 0, 0, 0,189, 0, 0, 0,191, 0, 0, 0, 34, 0, 0, 0,140, 0, 0, 0,191, 0, 0, 0, 34, 0, 0, 0,140, - 0, 0, 0,142, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,189, 0, 0, 0, 34, 0, 0, 0,137, 0, 0, 0,192, 0, 0, 0, 34, - 0, 0, 0,190, 0, 0, 0,192, 0, 0, 0, 34, 0, 0, 0,137, 0, 0, 0,139, 0, 0, 0, 34, 0, 0, 0,191, 0, 0, 0,193, - 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,193, 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,140, 0, 0, 0, 34, 0, 0, 0,136, - 0, 0, 0,194, 0, 0, 0, 34, 0, 0, 0,192, 0, 0, 0,194, 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,137, 0, 0, 0, 34, - 0, 0, 0,193, 0, 0, 0,195, 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,195, 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,138, - 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,194, 0, 0, 0, 34, 0, 0, 0,135, - 0, 0, 0,136, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,188, 0, 0, 0, 34, - 0, 0, 0, 68, 0, 0, 0,187, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,189, 0, 0, 0, 34, 0, 0, 0,188, 0, 0, 0,203, - 0, 0, 0, 34, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0,189, - 0, 0, 0,204, 0, 0, 0, 34, 0, 0, 0,204, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,196, 0, 0, 0, 34, - 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0, 34, 0, 0, 0,194, 0, 0, 0,197, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,198, - 0, 0, 0, 34, 0, 0, 0,195, 0, 0, 0,198, 0, 0, 0, 34, 0, 0, 0,197, 0, 0, 0,199, 0, 0, 0, 34, 0, 0, 0,192, - 0, 0, 0,199, 0, 0, 0, 34, 0, 0, 0,198, 0, 0, 0,200, 0, 0, 0, 34, 0, 0, 0,193, 0, 0, 0,200, 0, 0, 0, 34, - 0, 0, 0,199, 0, 0, 0,201, 0, 0, 0, 34, 0, 0, 0,190, 0, 0, 0,201, 0, 0, 0, 34, 0, 0, 0,200, 0, 0, 0,202, - 0, 0, 0, 34, 0, 0, 0,191, 0, 0, 0,202, 0, 0, 0, 34, 0, 0, 0,201, 0, 0, 0,203, 0, 0, 0, 34, 0, 0, 0,202, - 0, 0, 0,204, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,201, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,202, 0, 0, 0, 34, - 0, 0, 0,196, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0,137, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,174, - 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,162, 0, 0, 0, 34, 0, 0, 0,139, 0, 0, 0,208, 0, 0, 0, 34, 0, 0, 0,161, - 0, 0, 0,208, 0, 0, 0, 34, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 34, 0, 0, 0,162, 0, 0, 0,209, 0, 0, 0, 34, - 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0, 34, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,211, - 0, 0, 0, 34, 0, 0, 0,209, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0,163, 0, 0, 0,210, 0, 0, 0, 34, 0, 0, 0,164, - 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,206, 0, 0, 0, 34, 0, 0, 0,206, 0, 0, 0,210, 0, 0, 0, 34, - 0, 0, 0,207, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,207, 0, 0, 0, 34, 0, 0, 0,206, 0, 0, 0,212, - 0, 0, 0, 34, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 34, 0, 0, 0,209, 0, 0, 0,213, 0, 0, 0, 34, 0, 0, 0,207, - 0, 0, 0,213, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0,212, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,213, 0, 0, 0, 34, - 0, 0, 0, 70, 0, 0, 0,127, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, 34, 0, 0, 0,128, 0, 0, 0,219, - 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,220, 0, 0, 0, 34, 0, 0, 0,217, - 0, 0, 0,219, 0, 0, 0, 34, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0, 34, 0, 0, 0,131, 0, 0, 0,218, 0, 0, 0, 34, - 0, 0, 0,218, 0, 0, 0,220, 0, 0, 0, 34, 0, 0, 0,215, 0, 0, 0,217, 0, 0, 0, 34, 0, 0, 0,132, 0, 0, 0,215, - 0, 0, 0, 34, 0, 0, 0,133, 0, 0, 0,216, 0, 0, 0, 34, 0, 0, 0,216, 0, 0, 0,218, 0, 0, 0, 34, 0, 0, 0,214, - 0, 0, 0,215, 0, 0, 0, 34, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 34, 0, 0, 0,214, 0, 0, 0,216, 0, 0, 0, 34, - 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0, 34, 0, 0, 0,226, 0, 0, 0,228, 0, 0, 0, 34, 0, 0, 0,214, 0, 0, 0,228, - 0, 0, 0, 34, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0, 34, 0, 0, 0,227, 0, 0, 0,228, 0, 0, 0, 34, 0, 0, 0,217, - 0, 0, 0,224, 0, 0, 0, 34, 0, 0, 0,224, 0, 0, 0,226, 0, 0, 0, 34, 0, 0, 0,218, 0, 0, 0,225, 0, 0, 0, 34, - 0, 0, 0,225, 0, 0, 0,227, 0, 0, 0, 34, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0, 34, 0, 0, 0,222, 0, 0, 0,224, - 0, 0, 0, 34, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 34, 0, 0, 0,223, 0, 0, 0,225, 0, 0, 0, 34, 0, 0, 0, 70, - 0, 0, 0,221, 0, 0, 0, 34, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 34, 0, 0, 0,221, 0, 0, 0,223, 0, 0, 0, 34, - 0, 0, 0,221, 0, 0, 0,228, 0, 0, 0, 34, 0, 0, 0,222, 0, 0, 0,226, 0, 0, 0, 34, 0, 0, 0,223, 0, 0, 0,227, - 0, 0, 0, 34, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 0,231, 0, 0, 0, 34, 0, 0, 0,180, - 0, 0, 0,229, 0, 0, 0, 34, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0, 34, 0, 0, 0,181, 0, 0, 0,230, 0, 0, 0, 34, - 0, 0, 0,230, 0, 0, 0,232, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,251, - 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 34, 0, 0, 0,230, 0, 0, 0,252, 0, 0, 0, 34, 0, 0, 0,251, - 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,254, 0, 0, 0, 34, - 0, 0, 0,252, 0, 0, 0,254, 0, 0, 0, 34, 0, 0, 0,231, 0, 0, 0,249, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,250, - 0, 0, 0, 34, 0, 0, 0,232, 0, 0, 0,250, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,247, 0, 0, 0, 34, 0, 0, 0,247, - 0, 0, 0,249, 0, 0, 0, 34, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 34, 0, 0, 0,248, 0, 0, 0,250, 0, 0, 0, 34, - 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0, 34, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 34, 0, 0, 0,116, 0, 0, 0,246, - 0, 0, 0, 34, 0, 0, 0,246, 0, 0, 0,248, 0, 0, 0, 34, 0, 0, 0,117, 0, 0, 0,243, 0, 0, 0, 34, 0, 0, 0,243, - 0, 0, 0,245, 0, 0, 0, 34, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0, 34, 0, 0, 0,244, 0, 0, 0,246, 0, 0, 0, 34, - 0, 0, 0,119, 0, 0, 0,241, 0, 0, 0, 34, 0, 0, 0,241, 0, 0, 0,243, 0, 0, 0, 34, 0, 0, 0,120, 0, 0, 0,242, - 0, 0, 0, 34, 0, 0, 0,242, 0, 0, 0,244, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,239, 0, 0, 0, 34, 0, 0, 0,239, - 0, 0, 0,241, 0, 0, 0, 34, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 34, 0, 0, 0,240, 0, 0, 0,242, 0, 0, 0, 34, - 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0, 34, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 34, 0, 0, 0,124, 0, 0, 0,238, - 0, 0, 0, 34, 0, 0, 0,238, 0, 0, 0,240, 0, 0, 0, 34, 0, 0, 0,176, 0, 0, 0,233, 0, 0, 0, 34, 0, 0, 0,233, - 0, 0, 0,237, 0, 0, 0, 34, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0, 34, 0, 0, 0,234, 0, 0, 0,238, 0, 0, 0, 34, - 0, 0, 0,125, 0, 0, 0,235, 0, 0, 0, 34, 0, 0, 0,233, 0, 0, 0,235, 0, 0, 0, 34, 0, 0, 0,126, 0, 0, 0,236, - 0, 0, 0, 34, 0, 0, 0,234, 0, 0, 0,236, 0, 0, 0, 34, 0, 0, 0,235, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 0,236, - 0, 0, 0,254, 0, 0, 0, 34, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 0, 34, 0, 0, 0,255, 0, 0, 1, 17, 0, 0, 0, 34, - 0, 0, 0,235, 0, 0, 1, 17, 0, 0, 0, 34, 0, 0, 0,254, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0,236, 0, 0, 1, 18, - 0, 0, 0, 34, 0, 0, 1, 0, 0, 0, 1, 18, 0, 0, 0, 34, 0, 0, 1, 17, 0, 0, 1, 19, 0, 0, 0, 34, 0, 0, 0,233, - 0, 0, 1, 19, 0, 0, 0, 34, 0, 0, 0,234, 0, 0, 1, 20, 0, 0, 0, 34, 0, 0, 1, 18, 0, 0, 1, 20, 0, 0, 0, 34, - 0, 0, 1, 15, 0, 0, 1, 19, 0, 0, 0, 34, 0, 0, 0,237, 0, 0, 1, 15, 0, 0, 0, 34, 0, 0, 0,238, 0, 0, 1, 16, - 0, 0, 0, 34, 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 0, 34, 0, 0, 1, 13, 0, 0, 1, 15, 0, 0, 0, 34, 0, 0, 0,239, - 0, 0, 1, 13, 0, 0, 0, 34, 0, 0, 0,240, 0, 0, 1, 14, 0, 0, 0, 34, 0, 0, 1, 14, 0, 0, 1, 16, 0, 0, 0, 34, - 0, 0, 1, 11, 0, 0, 1, 13, 0, 0, 0, 34, 0, 0, 0,241, 0, 0, 1, 11, 0, 0, 0, 34, 0, 0, 0,242, 0, 0, 1, 12, - 0, 0, 0, 34, 0, 0, 1, 12, 0, 0, 1, 14, 0, 0, 0, 34, 0, 0, 1, 9, 0, 0, 1, 11, 0, 0, 0, 34, 0, 0, 0,243, - 0, 0, 1, 9, 0, 0, 0, 34, 0, 0, 0,244, 0, 0, 1, 10, 0, 0, 0, 34, 0, 0, 1, 10, 0, 0, 1, 12, 0, 0, 0, 34, - 0, 0, 1, 7, 0, 0, 1, 9, 0, 0, 0, 34, 0, 0, 0,245, 0, 0, 1, 7, 0, 0, 0, 34, 0, 0, 0,246, 0, 0, 1, 8, - 0, 0, 0, 34, 0, 0, 1, 8, 0, 0, 1, 10, 0, 0, 0, 34, 0, 0, 1, 5, 0, 0, 1, 7, 0, 0, 0, 34, 0, 0, 0,247, - 0, 0, 1, 5, 0, 0, 0, 34, 0, 0, 0,248, 0, 0, 1, 6, 0, 0, 0, 34, 0, 0, 1, 6, 0, 0, 1, 8, 0, 0, 0, 34, - 0, 0, 1, 3, 0, 0, 1, 5, 0, 0, 0, 34, 0, 0, 0,249, 0, 0, 1, 3, 0, 0, 0, 34, 0, 0, 0,250, 0, 0, 1, 4, - 0, 0, 0, 34, 0, 0, 1, 4, 0, 0, 1, 6, 0, 0, 0, 34, 0, 0, 1, 3, 0, 0, 1, 21, 0, 0, 0, 34, 0, 0, 0,231, - 0, 0, 1, 21, 0, 0, 0, 34, 0, 0, 0,232, 0, 0, 1, 22, 0, 0, 0, 34, 0, 0, 1, 4, 0, 0, 1, 22, 0, 0, 0, 34, - 0, 0, 0,251, 0, 0, 1, 1, 0, 0, 0, 34, 0, 0, 0,255, 0, 0, 1, 1, 0, 0, 0, 34, 0, 0, 0,252, 0, 0, 1, 2, - 0, 0, 0, 34, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 1, 23, 0, 0, 0, 34, 0, 0, 1, 1, - 0, 0, 1, 23, 0, 0, 0, 34, 0, 0, 0,230, 0, 0, 1, 24, 0, 0, 0, 34, 0, 0, 1, 2, 0, 0, 1, 24, 0, 0, 0, 34, - 0, 0, 1, 21, 0, 0, 1, 23, 0, 0, 0, 34, 0, 0, 1, 22, 0, 0, 1, 24, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 1, 25, - 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 1, 25, 0, 0, 0, 38, 0, 0, 0, 65, 0, 0, 0, 71, 0, 0, 0, 34, 0, 0, 0,107, - 0, 0, 1, 26, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 1, 26, 0, 0, 0, 38, 0, 0, 0,104, 0, 0, 1, 27, 0, 0, 0, 34, - 0, 0, 1, 25, 0, 0, 1, 27, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 1, 28, 0, 0, 0, 34, 0, 0, 1, 26, 0, 0, 1, 28, - 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 1, 29, 0, 0, 0, 34, 0, 0, 1, 27, 0, 0, 1, 29, 0, 0, 0, 34, 0, 0, 0,103, - 0, 0, 1, 30, 0, 0, 0, 34, 0, 0, 1, 28, 0, 0, 1, 30, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 1, 31, 0, 0, 0, 34, - 0, 0, 1, 29, 0, 0, 1, 31, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 1, 32, 0, 0, 0, 34, 0, 0, 1, 30, 0, 0, 1, 32, - 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 1, 33, 0, 0, 0, 34, 0, 0, 1, 31, 0, 0, 1, 33, 0, 0, 0, 38, 0, 0, 0, 99, - 0, 0, 1, 34, 0, 0, 0, 34, 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 0, 38, 0, 0, 0, 96, 0, 0, 1, 35, 0, 0, 0, 34, - 0, 0, 1, 33, 0, 0, 1, 35, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 1, 36, 0, 0, 0, 34, 0, 0, 1, 34, 0, 0, 1, 36, - 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 1, 37, 0, 0, 0, 34, 0, 0, 1, 35, 0, 0, 1, 37, 0, 0, 0, 34, 0, 0, 0, 95, - 0, 0, 1, 38, 0, 0, 0, 34, 0, 0, 1, 36, 0, 0, 1, 38, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 1, 39, 0, 0, 0, 34, - 0, 0, 1, 37, 0, 0, 1, 39, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 1, 40, 0, 0, 0, 34, 0, 0, 1, 38, 0, 0, 1, 40, - 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 1, 41, 0, 0, 0, 34, 0, 0, 1, 39, 0, 0, 1, 41, 0, 0, 0, 34, 0, 0, 0, 91, - 0, 0, 1, 42, 0, 0, 0, 34, 0, 0, 1, 40, 0, 0, 1, 42, 0, 0, 0, 34, 0, 0, 1, 49, 0, 0, 1, 50, 0, 0, 0, 38, - 0, 0, 1, 50, 0, 0, 1, 69, 0, 0, 0, 34, 0, 0, 1, 69, 0, 0, 1, 79, 0, 0, 0, 34, 0, 0, 1, 49, 0, 0, 1, 79, - 0, 0, 0, 34, 0, 0, 1, 50, 0, 0, 1, 70, 0, 0, 0, 34, 0, 0, 1, 49, 0, 0, 1, 80, 0, 0, 0, 34, 0, 0, 1, 70, - 0, 0, 1, 80, 0, 0, 0, 34, 0, 0, 1, 48, 0, 0, 1, 49, 0, 0, 0, 38, 0, 0, 1, 77, 0, 0, 1, 79, 0, 0, 0, 34, - 0, 0, 1, 48, 0, 0, 1, 77, 0, 0, 0, 34, 0, 0, 1, 48, 0, 0, 1, 78, 0, 0, 0, 34, 0, 0, 1, 78, 0, 0, 1, 80, - 0, 0, 0, 34, 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 0, 38, 0, 0, 1, 77, 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 1, 47, - 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 1, 47, 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 1, 78, 0, 0, 1, 82, 0, 0, 0, 34, - 0, 0, 0, 89, 0, 0, 1, 47, 0, 0, 0, 38, 0, 0, 0, 87, 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 1, 82, - 0, 0, 0, 34, 0, 0, 1, 75, 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 1, 75, 0, 0, 0, 34, 0, 0, 0, 86, - 0, 0, 1, 76, 0, 0, 0, 34, 0, 0, 1, 76, 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 1, 71, 0, 0, 1, 75, 0, 0, 0, 34, - 0, 0, 0, 83, 0, 0, 1, 71, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 1, 72, 0, 0, 0, 34, 0, 0, 1, 72, 0, 0, 1, 76, - 0, 0, 0, 34, 0, 0, 1, 71, 0, 0, 1, 73, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 1, 73, 0, 0, 0, 34, 0, 0, 0, 82, - 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 72, 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 71, 0, 0, 1, 77, 0, 0, 0, 34, - 0, 0, 1, 73, 0, 0, 1, 79, 0, 0, 0, 34, 0, 0, 1, 72, 0, 0, 1, 78, 0, 0, 0, 34, 0, 0, 1, 74, 0, 0, 1, 80, - 0, 0, 0, 34, 0, 0, 1, 67, 0, 0, 1, 73, 0, 0, 0, 34, 0, 0, 1, 67, 0, 0, 1, 69, 0, 0, 0, 34, 0, 0, 1, 68, - 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 1, 67, 0, 0, 0, 34, - 0, 0, 0, 80, 0, 0, 1, 68, 0, 0, 0, 34, 0, 0, 0,206, 0, 0, 1, 83, 0, 0, 0, 34, 0, 0, 1, 83, 0, 0, 1, 85, - 0, 0, 0, 34, 0, 0, 0,212, 0, 0, 1, 85, 0, 0, 0, 34, 0, 0, 1, 84, 0, 0, 1, 86, 0, 0, 0, 34, 0, 0, 0,207, - 0, 0, 1, 84, 0, 0, 0, 34, 0, 0, 0,213, 0, 0, 1, 86, 0, 0, 0, 34, 0, 0, 1, 67, 0, 0, 1, 83, 0, 0, 0, 34, - 0, 0, 1, 68, 0, 0, 1, 84, 0, 0, 0, 34, 0, 0, 1, 85, 0, 0, 1, 87, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 1, 87, - 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 1, 88, 0, 0, 0, 34, 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 0, 34, 0, 0, 1, 41, - 0, 0, 1, 87, 0, 0, 0, 34, 0, 0, 1, 42, 0, 0, 1, 88, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 1, 65, 0, 0, 0, 34, - 0, 0, 1, 65, 0, 0, 1, 93, 0, 0, 0, 34, 0, 0, 1, 45, 0, 0, 1, 93, 0, 0, 0, 39, 0, 0, 0, 75, 0, 0, 1, 45, - 0, 0, 0, 38, 0, 0, 1, 66, 0, 0, 1, 94, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 1, 66, 0, 0, 0, 34, 0, 0, 1, 45, - 0, 0, 1, 94, 0, 0, 0, 39, 0, 0, 1, 91, 0, 0, 1, 93, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 1, 91, 0, 0, 0, 34, - 0, 0, 0, 76, 0, 0, 1, 45, 0, 0, 0, 38, 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 1, 92, - 0, 0, 0, 34, 0, 0, 1, 89, 0, 0, 1, 91, 0, 0, 0, 34, 0, 0, 1, 46, 0, 0, 1, 89, 0, 0, 0, 34, 0, 0, 0, 76, - 0, 0, 1, 46, 0, 0, 0, 38, 0, 0, 1, 90, 0, 0, 1, 92, 0, 0, 0, 34, 0, 0, 1, 46, 0, 0, 1, 90, 0, 0, 0, 34, - 0, 0, 1, 69, 0, 0, 1, 89, 0, 0, 0, 34, 0, 0, 1, 46, 0, 0, 1, 50, 0, 0, 0, 38, 0, 0, 1, 70, 0, 0, 1, 90, - 0, 0, 0, 34, 0, 0, 1, 83, 0, 0, 1, 89, 0, 0, 0, 34, 0, 0, 1, 84, 0, 0, 1, 90, 0, 0, 0, 34, 0, 0, 1, 39, - 0, 0, 1, 59, 0, 0, 0, 34, 0, 0, 1, 51, 0, 0, 1, 59, 0, 0, 0, 34, 0, 0, 1, 37, 0, 0, 1, 51, 0, 0, 0, 34, - 0, 0, 1, 40, 0, 0, 1, 60, 0, 0, 0, 34, 0, 0, 1, 38, 0, 0, 1, 52, 0, 0, 0, 34, 0, 0, 1, 52, 0, 0, 1, 60, - 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 1, 57, 0, 0, 0, 39, 0, 0, 1, 57, 0, 0, 1, 65, 0, 0, 0, 34, 0, 0, 0, 74, - 0, 0, 0, 75, 0, 0, 0, 38, 0, 0, 1, 58, 0, 0, 1, 66, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 1, 58, 0, 0, 0, 39, - 0, 0, 1, 43, 0, 0, 1, 99, 0, 0, 0, 34, 0, 0, 1, 97, 0, 0, 1, 99, 0, 0, 0, 34, 0, 0, 1, 44, 0, 0, 1, 97, - 0, 0, 0, 34, 0, 0, 1, 43, 0, 0, 1, 44, 0, 0, 0, 38, 0, 0, 1, 98, 0, 0, 1,100, 0, 0, 0, 34, 0, 0, 1, 43, - 0, 0, 1,100, 0, 0, 0, 34, 0, 0, 1, 44, 0, 0, 1, 98, 0, 0, 0, 34, 0, 0, 1, 95, 0, 0, 1, 97, 0, 0, 0, 34, - 0, 0, 0, 73, 0, 0, 1, 95, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 1, 44, 0, 0, 0, 38, 0, 0, 1, 96, 0, 0, 1, 98, - 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 1, 96, 0, 0, 0, 34, 0, 0, 1, 57, 0, 0, 1, 95, 0, 0, 0, 34, 0, 0, 0, 73, - 0, 0, 0, 74, 0, 0, 0, 38, 0, 0, 1, 58, 0, 0, 1, 96, 0, 0, 0, 34, 0, 0, 1, 35, 0, 0, 1,103, 0, 0, 0, 34, - 0, 0, 1,103, 0, 0, 1,105, 0, 0, 0, 34, 0, 0, 1, 33, 0, 0, 1,105, 0, 0, 0, 34, 0, 0, 1, 36, 0, 0, 1,104, - 0, 0, 0, 34, 0, 0, 1, 34, 0, 0, 1,106, 0, 0, 0, 34, 0, 0, 1,104, 0, 0, 1,106, 0, 0, 0, 34, 0, 0, 1,103, - 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1,107, 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1,105, 0, 0, 1,107, 0, 0, 0, 34, - 0, 0, 1,104, 0, 0, 1,110, 0, 0, 0, 34, 0, 0, 1,106, 0, 0, 1,108, 0, 0, 0, 34, 0, 0, 1,108, 0, 0, 1,110, - 0, 0, 0, 34, 0, 0, 1,109, 0, 0, 1,111, 0, 0, 0, 34, 0, 0, 1,111, 0, 0, 1,113, 0, 0, 0, 34, 0, 0, 1,107, - 0, 0, 1,113, 0, 0, 0, 34, 0, 0, 1,110, 0, 0, 1,112, 0, 0, 0, 34, 0, 0, 1,108, 0, 0, 1,114, 0, 0, 0, 34, - 0, 0, 1,112, 0, 0, 1,114, 0, 0, 0, 34, 0, 0, 1,111, 0, 0, 1,117, 0, 0, 0, 34, 0, 0, 1,115, 0, 0, 1,117, - 0, 0, 0, 34, 0, 0, 1,113, 0, 0, 1,115, 0, 0, 0, 34, 0, 0, 1,112, 0, 0, 1,118, 0, 0, 0, 34, 0, 0, 1,114, - 0, 0, 1,116, 0, 0, 0, 34, 0, 0, 1,116, 0, 0, 1,118, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,119, 0, 0, 0, 39, - 0, 0, 1,115, 0, 0, 1,119, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,117, 0, 0, 0, 34, 0, 0, 1,116, 0, 0, 1,120, - 0, 0, 0, 34, 0, 0, 1, 56, 0, 0, 1,120, 0, 0, 0, 39, 0, 0, 1, 56, 0, 0, 1,118, 0, 0, 0, 34, 0, 0, 1, 95, - 0, 0, 1,115, 0, 0, 0, 34, 0, 0, 1, 57, 0, 0, 1,119, 0, 0, 0, 39, 0, 0, 1, 96, 0, 0, 1,116, 0, 0, 0, 34, - 0, 0, 1, 58, 0, 0, 1,120, 0, 0, 0, 39, 0, 0, 1, 97, 0, 0, 1,113, 0, 0, 0, 34, 0, 0, 1, 98, 0, 0, 1,114, - 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 1,107, 0, 0, 0, 34, 0, 0, 1,100, 0, 0, 1,108, 0, 0, 0, 34, 0, 0, 1, 99, - 0, 0, 1,101, 0, 0, 0, 34, 0, 0, 1,101, 0, 0, 1,105, 0, 0, 0, 34, 0, 0, 1,102, 0, 0, 1,106, 0, 0, 0, 34, - 0, 0, 1,100, 0, 0, 1,102, 0, 0, 0, 34, 0, 0, 1, 31, 0, 0, 1,101, 0, 0, 0, 34, 0, 0, 1, 32, 0, 0, 1,102, - 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1,101, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1, 43, 0, 0, 0, 38, 0, 0, 0, 72, - 0, 0, 1,102, 0, 0, 0, 34, 0, 0, 1, 25, 0, 0, 1, 31, 0, 0, 0, 38, 0, 0, 1, 26, 0, 0, 1, 32, 0, 0, 0, 38, - 0, 0, 0, 72, 0, 0, 1, 25, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1, 26, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 72, - 0, 0, 0, 38, 0, 0, 1, 51, 0, 0, 1,103, 0, 0, 0, 34, 0, 0, 1, 52, 0, 0, 1,104, 0, 0, 0, 34, 0, 0, 1, 51, - 0, 0, 1, 53, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1, 54, 0, 0, 1,110, 0, 0, 0, 34, - 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,123, 0, 0, 0, 34, 0, 0, 1,111, 0, 0, 1,123, - 0, 0, 0, 34, 0, 0, 1,112, 0, 0, 1,124, 0, 0, 0, 34, 0, 0, 1, 54, 0, 0, 1,124, 0, 0, 0, 34, 0, 0, 1, 55, - 0, 0, 1,123, 0, 0, 0, 34, 0, 0, 1, 56, 0, 0, 1,124, 0, 0, 0, 34, 0, 0, 1, 91, 0, 0, 1,127, 0, 0, 0, 34, - 0, 0, 1,125, 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1, 89, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 92, 0, 0, 1,128, - 0, 0, 0, 34, 0, 0, 1, 90, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1,126, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 1, 59, - 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 61, 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1, 59, 0, 0, 1, 61, 0, 0, 0, 34, - 0, 0, 1, 60, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1, 60, 0, 0, 1, 62, 0, 0, 0, 34, 0, 0, 1, 62, 0, 0, 1,128, - 0, 0, 0, 34, 0, 0, 1, 41, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 42, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1, 41, - 0, 0, 1, 85, 0, 0, 0, 34, 0, 0, 1, 83, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 42, 0, 0, 1, 86, 0, 0, 0, 34, - 0, 0, 1, 84, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1, 63, 0, 0, 0, 34, 0, 0, 1, 63, 0, 0, 1,121, - 0, 0, 0, 39, 0, 0, 1,119, 0, 0, 1,121, 0, 0, 0, 34, 0, 0, 1, 64, 0, 0, 1,122, 0, 0, 0, 39, 0, 0, 1, 56, - 0, 0, 1, 64, 0, 0, 0, 34, 0, 0, 1,120, 0, 0, 1,122, 0, 0, 0, 34, 0, 0, 1, 65, 0, 0, 1,121, 0, 0, 0, 34, - 0, 0, 1, 66, 0, 0, 1,122, 0, 0, 0, 34, 0, 0, 1,121, 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1, 61, 0, 0, 1, 63, - 0, 0, 0, 34, 0, 0, 1,122, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 0, 34, 0, 0, 1, 93, - 0, 0, 1,121, 0, 0, 0, 39, 0, 0, 1, 94, 0, 0, 1,122, 0, 0, 0, 39, 0, 0, 1,129, 0, 0, 1,141, 0, 0, 0, 34, - 0, 0, 1,129, 0, 0, 1,155, 0, 0, 0, 34, 0, 0, 1,143, 0, 0, 1,155, 0, 0, 0, 34, 0, 0, 1,141, 0, 0, 1,143, - 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,156, 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,142, 0, 0, 0, 34, 0, 0, 1,142, - 0, 0, 1,144, 0, 0, 0, 34, 0, 0, 1,144, 0, 0, 1,156, 0, 0, 0, 34, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 0, 34, - 0, 0, 1,139, 0, 0, 1,145, 0, 0, 0, 34, 0, 0, 1,139, 0, 0, 1,141, 0, 0, 0, 34, 0, 0, 1,144, 0, 0, 1,146, - 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,142, 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,146, 0, 0, 0, 34, 0, 0, 1,145, - 0, 0, 1,147, 0, 0, 0, 34, 0, 0, 1,137, 0, 0, 1,147, 0, 0, 0, 34, 0, 0, 1,137, 0, 0, 1,139, 0, 0, 0, 34, - 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 34, 0, 0, 1,138, 0, 0, 1,140, 0, 0, 0, 34, 0, 0, 1,138, 0, 0, 1,148, - 0, 0, 0, 34, 0, 0, 1,147, 0, 0, 1,149, 0, 0, 0, 34, 0, 0, 1,135, 0, 0, 1,149, 0, 0, 0, 34, 0, 0, 1,135, - 0, 0, 1,137, 0, 0, 0, 34, 0, 0, 1,148, 0, 0, 1,150, 0, 0, 0, 34, 0, 0, 1,136, 0, 0, 1,138, 0, 0, 0, 34, - 0, 0, 1,136, 0, 0, 1,150, 0, 0, 0, 34, 0, 0, 1,149, 0, 0, 1,151, 0, 0, 0, 34, 0, 0, 1,133, 0, 0, 1,151, - 0, 0, 0, 34, 0, 0, 1,133, 0, 0, 1,135, 0, 0, 0, 34, 0, 0, 1,150, 0, 0, 1,152, 0, 0, 0, 34, 0, 0, 1,134, - 0, 0, 1,136, 0, 0, 0, 34, 0, 0, 1,134, 0, 0, 1,152, 0, 0, 0, 34, 0, 0, 1,151, 0, 0, 1,153, 0, 0, 0, 34, - 0, 0, 1,131, 0, 0, 1,153, 0, 0, 0, 34, 0, 0, 1,131, 0, 0, 1,133, 0, 0, 0, 34, 0, 0, 1,152, 0, 0, 1,154, - 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,134, 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,154, 0, 0, 0, 34, 0, 0, 1,151, - 0, 0, 1,161, 0, 0, 0, 34, 0, 0, 1,159, 0, 0, 1,161, 0, 0, 0, 34, 0, 0, 1,153, 0, 0, 1,159, 0, 0, 0, 34, - 0, 0, 1,160, 0, 0, 1,162, 0, 0, 0, 34, 0, 0, 1,152, 0, 0, 1,162, 0, 0, 0, 34, 0, 0, 1,154, 0, 0, 1,160, - 0, 0, 0, 34, 0, 0, 1,149, 0, 0, 1,163, 0, 0, 0, 34, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 0, 34, 0, 0, 1,162, - 0, 0, 1,164, 0, 0, 0, 34, 0, 0, 1,150, 0, 0, 1,164, 0, 0, 0, 34, 0, 0, 1,147, 0, 0, 1,165, 0, 0, 0, 34, - 0, 0, 1,163, 0, 0, 1,165, 0, 0, 0, 34, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 34, 0, 0, 1,148, 0, 0, 1,166, - 0, 0, 0, 34, 0, 0, 1,145, 0, 0, 1,167, 0, 0, 0, 34, 0, 0, 1,165, 0, 0, 1,167, 0, 0, 0, 34, 0, 0, 1,166, - 0, 0, 1,168, 0, 0, 0, 34, 0, 0, 1,146, 0, 0, 1,168, 0, 0, 0, 34, 0, 0, 1,143, 0, 0, 1,169, 0, 0, 0, 34, - 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 34, 0, 0, 1,168, 0, 0, 1,170, 0, 0, 0, 34, 0, 0, 1,144, 0, 0, 1,170, - 0, 0, 0, 34, 0, 0, 1,155, 0, 0, 1,157, 0, 0, 0, 34, 0, 0, 1,157, 0, 0, 1,169, 0, 0, 0, 34, 0, 0, 1,156, - 0, 0, 1,158, 0, 0, 0, 34, 0, 0, 1,158, 0, 0, 1,170, 0, 0, 0, 34, 0, 0, 1, 61, 0, 0, 1,185, 0, 0, 0, 34, - 0, 0, 1,183, 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1, 59, 0, 0, 1,183, 0, 0, 0, 34, 0, 0, 1, 62, 0, 0, 1,186, - 0, 0, 0, 34, 0, 0, 1, 60, 0, 0, 1,184, 0, 0, 0, 34, 0, 0, 1,184, 0, 0, 1,186, 0, 0, 0, 34, 0, 0, 1, 61, - 0, 0, 1,131, 0, 0, 0, 34, 0, 0, 1,153, 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1, 62, 0, 0, 1,132, 0, 0, 0, 34, - 0, 0, 1,154, 0, 0, 1,186, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,183, 0, 0, 0, 34, 0, 0, 1, 54, 0, 0, 1,184, - 0, 0, 0, 34, 0, 0, 1,123, 0, 0, 1,171, 0, 0, 0, 34, 0, 0, 1,155, 0, 0, 1,171, 0, 0, 0, 34, 0, 0, 1,123, - 0, 0, 1,129, 0, 0, 0, 34, 0, 0, 1,156, 0, 0, 1,172, 0, 0, 0, 34, 0, 0, 1,124, 0, 0, 1,172, 0, 0, 0, 34, - 0, 0, 1,124, 0, 0, 1,130, 0, 0, 0, 34, 0, 0, 1,159, 0, 0, 1,181, 0, 0, 0, 34, 0, 0, 1,181, 0, 0, 1,185, - 0, 0, 0, 34, 0, 0, 1,160, 0, 0, 1,182, 0, 0, 0, 34, 0, 0, 1,182, 0, 0, 1,186, 0, 0, 0, 34, 0, 0, 1,179, - 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,185, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,179, 0, 0, 1,181, 0, 0, 0, 34, - 0, 0, 1,186, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,180, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,180, 0, 0, 1,182, - 0, 0, 0, 34, 0, 0, 1,175, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,177, 0, 0, 1,179, 0, 0, 0, 34, 0, 0, 1,175, - 0, 0, 1,177, 0, 0, 0, 34, 0, 0, 1,176, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 0, 34, - 0, 0, 1,178, 0, 0, 1,180, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,189, 0, 0, 0, 34, 0, 0, 1,187, 0, 0, 1,189, - 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,175, 0, 0, 0, 34, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,174, - 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,174, 0, 0, 1,176, 0, 0, 0, 34, 0, 0, 1,171, 0, 0, 1,189, 0, 0, 0, 34, - 0, 0, 1,173, 0, 0, 1,191, 0, 0, 0, 34, 0, 0, 1,171, 0, 0, 1,191, 0, 0, 0, 32, 0, 0, 1,172, 0, 0, 1,190, - 0, 0, 0, 34, 0, 0, 1,172, 0, 0, 1,192, 0, 0, 0, 32, 0, 0, 1,174, 0, 0, 1,192, 0, 0, 0, 34, 0, 0, 1,157, - 0, 0, 1,191, 0, 0, 0, 34, 0, 0, 1,158, 0, 0, 1,192, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,189, 0, 0, 0, 34, - 0, 0, 1, 54, 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,183, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,184, 0, 0, 1,188, - 0, 0, 0, 34, 0, 0, 1,191, 0, 0, 1,193, 0, 0, 0, 34, 0, 0, 1,193, 0, 0, 1,217, 0, 0, 0, 34, 0, 0, 1,157, - 0, 0, 1,217, 0, 0, 0, 34, 0, 0, 1,192, 0, 0, 1,194, 0, 0, 0, 34, 0, 0, 1,158, 0, 0, 1,218, 0, 0, 0, 34, - 0, 0, 1,194, 0, 0, 1,218, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,203, 0, 0, 0, 34, 0, 0, 1,193, 0, 0, 1,203, - 0, 0, 0, 34, 0, 0, 1,174, 0, 0, 1,204, 0, 0, 0, 34, 0, 0, 1,194, 0, 0, 1,204, 0, 0, 0, 34, 0, 0, 1,175, - 0, 0, 1,201, 0, 0, 0, 34, 0, 0, 1,201, 0, 0, 1,203, 0, 0, 0, 34, 0, 0, 1,176, 0, 0, 1,202, 0, 0, 0, 34, - 0, 0, 1,202, 0, 0, 1,204, 0, 0, 0, 34, 0, 0, 1,177, 0, 0, 1,199, 0, 0, 0, 34, 0, 0, 1,199, 0, 0, 1,201, - 0, 0, 0, 34, 0, 0, 1,178, 0, 0, 1,200, 0, 0, 0, 34, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 0, 34, 0, 0, 1,179, - 0, 0, 1,197, 0, 0, 0, 34, 0, 0, 1,197, 0, 0, 1,199, 0, 0, 0, 34, 0, 0, 1,180, 0, 0, 1,198, 0, 0, 0, 34, - 0, 0, 1,198, 0, 0, 1,200, 0, 0, 0, 34, 0, 0, 1,181, 0, 0, 1,195, 0, 0, 0, 34, 0, 0, 1,195, 0, 0, 1,197, - 0, 0, 0, 34, 0, 0, 1,182, 0, 0, 1,196, 0, 0, 0, 34, 0, 0, 1,196, 0, 0, 1,198, 0, 0, 0, 34, 0, 0, 1,159, - 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,195, 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,160, 0, 0, 1,216, 0, 0, 0, 34, - 0, 0, 1,196, 0, 0, 1,216, 0, 0, 0, 34, 0, 0, 1,205, 0, 0, 1,217, 0, 0, 0, 34, 0, 0, 1,169, 0, 0, 1,205, - 0, 0, 0, 34, 0, 0, 1,170, 0, 0, 1,206, 0, 0, 0, 34, 0, 0, 1,206, 0, 0, 1,218, 0, 0, 0, 34, 0, 0, 1,205, - 0, 0, 1,207, 0, 0, 0, 34, 0, 0, 1,167, 0, 0, 1,207, 0, 0, 0, 34, 0, 0, 1,168, 0, 0, 1,208, 0, 0, 0, 34, - 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 34, 0, 0, 1,207, 0, 0, 1,209, 0, 0, 0, 34, 0, 0, 1,165, 0, 0, 1,209, - 0, 0, 0, 34, 0, 0, 1,166, 0, 0, 1,210, 0, 0, 0, 34, 0, 0, 1,208, 0, 0, 1,210, 0, 0, 0, 34, 0, 0, 1,209, - 0, 0, 1,211, 0, 0, 0, 34, 0, 0, 1,163, 0, 0, 1,211, 0, 0, 0, 34, 0, 0, 1,164, 0, 0, 1,212, 0, 0, 0, 34, - 0, 0, 1,210, 0, 0, 1,212, 0, 0, 0, 34, 0, 0, 1,211, 0, 0, 1,213, 0, 0, 0, 34, 0, 0, 1,161, 0, 0, 1,213, - 0, 0, 0, 34, 0, 0, 1,162, 0, 0, 1,214, 0, 0, 0, 34, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 34, 0, 0, 1,213, - 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,214, 0, 0, 1,216, 0, 0, 0, 34, 0, 0, 1,197, 0, 0, 1,221, 0, 0, 0, 34, - 0, 0, 1,219, 0, 0, 1,221, 0, 0, 0, 34, 0, 0, 1,199, 0, 0, 1,219, 0, 0, 0, 34, 0, 0, 1,198, 0, 0, 1,222, - 0, 0, 0, 34, 0, 0, 1,200, 0, 0, 1,220, 0, 0, 0, 34, 0, 0, 1,220, 0, 0, 1,222, 0, 0, 0, 34, 0, 0, 1,221, - 0, 0, 1,223, 0, 0, 0, 34, 0, 0, 1,223, 0, 0, 1,225, 0, 0, 0, 32, 0, 0, 1,219, 0, 0, 1,225, 0, 0, 0, 34, - 0, 0, 1,222, 0, 0, 1,224, 0, 0, 0, 34, 0, 0, 1,220, 0, 0, 1,226, 0, 0, 0, 34, 0, 0, 1,224, 0, 0, 1,226, - 0, 0, 0, 32, 0, 0, 1,223, 0, 0, 1,229, 0, 0, 0, 34, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 0, 34, 0, 0, 1,225, - 0, 0, 1,227, 0, 0, 0, 34, 0, 0, 1,224, 0, 0, 1,230, 0, 0, 0, 34, 0, 0, 1,226, 0, 0, 1,228, 0, 0, 0, 34, - 0, 0, 1,228, 0, 0, 1,230, 0, 0, 0, 34, 0, 0, 1,229, 0, 0, 1,231, 0, 0, 0, 34, 0, 0, 1,231, 0, 0, 1,233, - 0, 0, 0, 34, 0, 0, 1,227, 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 0, 34, 0, 0, 1,228, - 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,232, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,217, 0, 0, 1,227, 0, 0, 0, 34, - 0, 0, 1,205, 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,218, 0, 0, 1,228, 0, 0, 0, 34, 0, 0, 1,206, 0, 0, 1,234, - 0, 0, 0, 34, 0, 0, 1,193, 0, 0, 1,225, 0, 0, 0, 34, 0, 0, 1,194, 0, 0, 1,226, 0, 0, 0, 34, 0, 0, 1,203, - 0, 0, 1,219, 0, 0, 0, 34, 0, 0, 1,204, 0, 0, 1,220, 0, 0, 0, 34, 0, 0, 1,215, 0, 0, 1,221, 0, 0, 0, 34, - 0, 0, 1,216, 0, 0, 1,222, 0, 0, 0, 34, 0, 0, 1,213, 0, 0, 1,223, 0, 0, 0, 34, 0, 0, 1,214, 0, 0, 1,224, - 0, 0, 0, 34, 0, 0, 1,211, 0, 0, 1,229, 0, 0, 0, 34, 0, 0, 1,212, 0, 0, 1,230, 0, 0, 0, 34, 0, 0, 1,209, - 0, 0, 1,231, 0, 0, 0, 34, 0, 0, 1,210, 0, 0, 1,232, 0, 0, 0, 34, 0, 0, 1,207, 0, 0, 1,233, 0, 0, 0, 34, - 0, 0, 1,208, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,131, 0, 0, 1,245, 0, 0, 0, 34, 0, 0, 1,243, 0, 0, 1,245, - 0, 0, 0, 39, 0, 0, 1,133, 0, 0, 1,243, 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,246, 0, 0, 0, 34, 0, 0, 1,134, - 0, 0, 1,244, 0, 0, 0, 34, 0, 0, 1,244, 0, 0, 1,246, 0, 0, 0, 39, 0, 0, 1,241, 0, 0, 1,243, 0, 0, 0, 39, - 0, 0, 1,135, 0, 0, 1,241, 0, 0, 0, 34, 0, 0, 1,136, 0, 0, 1,242, 0, 0, 0, 34, 0, 0, 1,242, 0, 0, 1,244, - 0, 0, 0, 39, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 39, 0, 0, 1,137, 0, 0, 1,239, 0, 0, 0, 34, 0, 0, 1,138, - 0, 0, 1,240, 0, 0, 0, 34, 0, 0, 1,240, 0, 0, 1,242, 0, 0, 0, 39, 0, 0, 1,237, 0, 0, 1,239, 0, 0, 0, 39, - 0, 0, 1,139, 0, 0, 1,237, 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,238, 0, 0, 0, 34, 0, 0, 1,238, 0, 0, 1,240, - 0, 0, 0, 39, 0, 0, 1,235, 0, 0, 1,237, 0, 0, 0, 39, 0, 0, 1,141, 0, 0, 1,235, 0, 0, 0, 34, 0, 0, 1,142, - 0, 0, 1,236, 0, 0, 0, 34, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 39, 0, 0, 1,235, 0, 0, 1,247, 0, 0, 0, 39, - 0, 0, 1,129, 0, 0, 1,247, 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,248, 0, 0, 0, 34, 0, 0, 1,236, 0, 0, 1,248, - 0, 0, 0, 39, 0, 0, 1,235, 0, 0, 1,243, 0, 0, 0, 34, 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 34, 0, 0, 1,236, - 0, 0, 1,244, 0, 0, 0, 34, 0, 0, 1,246, 0, 0, 1,248, 0, 0, 0, 34, 0, 0, 1,237, 0, 0, 1,241, 0, 0, 0, 34, - 0, 0, 1,238, 0, 0, 1,242, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,247, 0, 0, 0, 39, 0, 0, 1, 56, 0, 0, 1,248, - 0, 0, 0, 39, 0, 0, 1, 63, 0, 0, 1,245, 0, 0, 0, 39, 0, 0, 1, 64, 0, 0, 1,246, 0, 0, 0, 39, 0, 0, 0, 14, - 0, 0, 0,249, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0,178, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0,113, 0, 0, 0, 34, - 0, 0, 0, 14, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0,112, - 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0,112, 0, 0, 0, 34, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,112, 80, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,161,214, 32, 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, 0, 85, 86, 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, 7,247,144, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,161,254, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,224,149,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +192,148,178, 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, 68, 65, 84, 65, 0, 0, 39, 16, 3,161,214, 32, 0, 0, 0, 54, 0, 0, 1,244, 0, 0, 0, 45, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 43, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 46, 0, 0, 0, 44, 0, 0, 0, 1, - 0, 0, 0, 43, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 44, - 0, 0, 0, 42, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 7, - 0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 0, 0, 0, 2, - 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 12, - 0, 0, 0, 14, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0,112, 0, 0, 0, 13, 0, 0, 0, 11, 0, 0, 0, 9, 0, 0, 0, 1, - 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0,112, 0, 0, 0, 9, - 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 19, 0, 0, 0, 17, 0, 0, 0, 15, 0, 0, 0, 1, 0, 0, 0, 18, - 0, 0, 0, 20, 0, 0, 0,112, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 14, - 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0,112, 0, 0, 0, 1, 0, 0, 0, 21, 0, 0, 0, 23, - 0, 0, 0, 25, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0, 22, 0, 0, 0, 20, 0, 0, 0, 1, - 0, 0, 0, 19, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 26, 0, 0, 0, 20, - 0, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 25, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 1, 0, 0, 0, 30, - 0, 0, 0, 32, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 1, 0, 0, 0, 23, 0, 0, 0, 33, 0, 0, 0, 31, 0, 0, 0, 25, - 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 35, - 0, 0, 0, 37, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 38, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 1, - 0, 0, 0, 31, 0, 0, 0, 37, 0, 0, 0, 39, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 40, 0, 0, 0, 38, 0, 0, 0, 32, - 0, 0, 0, 30, 0, 0, 0, 1, 0, 0, 0, 37, 0, 0, 0, 43, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 42, - 0, 0, 0, 44, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0, 43, 0, 0, 0, 37, - 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 36, 0, 0, 0, 38, 0, 0, 0, 1, 0, 0, 0, 45, 0, 0, 0, 35, - 0, 0, 0, 49, 0, 0, 0, 47, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 1, - 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 0, 49, 0, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 36, - 0, 0, 0, 50, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 51, 0, 0, 0, 1, 0, 0, 0, 54, - 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 1, 0, 0, 0, 23, 0, 0, 0, 21, 0, 0, 0, 55, 0, 0, 0, 53, - 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 21, 0, 0, 0, 12, - 0, 0, 0, 57, 0, 0, 0, 55, 0, 0, 0, 1, 0, 0, 0, 58, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 56, 0, 0, 0, 1, - 0, 0, 0, 12, 0, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 1, 0, 0, 0, 62, 0, 0, 0, 11, 0, 0, 0, 13, - 0, 0, 0, 58, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 61, 0, 0, 0, 1, 0, 0, 0, 64, - 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0, 63, - 0, 0, 0, 1, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 63, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 48, 0, 0, 0, 64, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 61, 0, 0, 0, 63, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 62, - 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 58, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 53, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 59, 0, 0, 0, 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 54, 0, 0, 0, 52, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 52, - 0, 0, 0, 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 0, 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 87, 0, 0, 0,171, - 0, 0, 0,173, 0, 0, 0, 89, 0, 0, 0, 1, 0, 0, 0,173, 0, 0, 0,172, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 1, - 0, 0, 0, 85, 0, 0, 0,169, 0, 0, 0,171, 0, 0, 0, 87, 0, 0, 0, 1, 0, 0, 0,172, 0, 0, 0,170, 0, 0, 0, 86, - 0, 0, 0, 88, 0, 0, 0, 1, 0, 0, 0, 83, 0, 0, 0,167, 0, 0, 0,169, 0, 0, 0, 85, 0, 0, 0, 1, 0, 0, 0,170, - 0, 0, 0,168, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 1, 0, 0, 0, 81, 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0, 83, - 0, 0, 0, 1, 0, 0, 0,168, 0, 0, 0,166, 0, 0, 0, 82, 0, 0, 0, 84, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0,163, - 0, 0, 0,165, 0, 0, 0, 81, 0, 0, 0, 1, 0, 0, 0,166, 0, 0, 0,164, 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0, 1, - 0, 0, 0, 77, 0, 0, 0, 90, 0, 0, 0,143, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,144, 0, 0, 0, 91, 0, 0, 0, 78, - 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 90, 0, 0, 0, 92, 0, 0, 0,145, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0,146, - 0, 0, 0, 93, 0, 0, 0, 91, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 92, 0, 0, 0, 94, 0, 0, 0,147, 0, 0, 0,145, - 0, 0, 0, 1, 0, 0, 0,148, 0, 0, 0, 95, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 94, 0, 0, 0, 96, - 0, 0, 0,149, 0, 0, 0,147, 0, 0, 0, 1, 0, 0, 0,150, 0, 0, 0, 97, 0, 0, 0, 95, 0, 0, 0,148, 0, 0, 0, 1, - 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0,152, 0, 0, 0, 99, 0, 0, 0, 97, - 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 98, 0, 0, 0,100, 0, 0, 0,153, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0,154, - 0, 0, 0,101, 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,102, 0, 0, 0,155, 0, 0, 0,153, - 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,103, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 1, 0, 0, 0,102, 0, 0, 0,104, - 0, 0, 0,157, 0, 0, 0,155, 0, 0, 0, 1, 0, 0, 0,158, 0, 0, 0,105, 0, 0, 0,103, 0, 0, 0,156, 0, 0, 0, 1, - 0, 0, 0,104, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160, 0, 0, 0,107, 0, 0, 0,105, - 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,106, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0, 66, - 0, 0, 0, 65, 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0,108, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0,159, - 0, 0, 0, 1, 0, 0, 0,158, 0, 0, 0,126, 0, 0, 0,109, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0,125, 0, 0, 0,176, - 0, 0, 0,155, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,177, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0, 1, - 0, 0, 0,123, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,154, 0, 0, 0,124, - 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,121, 0, 0, 0,151, 0, 0, 0,153, 0, 0, 0,123, 0, 0, 0, 1, 0, 0, 0,154, - 0, 0, 0,152, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0,119, 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0,121, - 0, 0, 0, 1, 0, 0, 0,152, 0, 0, 0,150, 0, 0, 0,120, 0, 0, 0,122, 0, 0, 0, 1, 0, 0, 0,117, 0, 0, 0,147, - 0, 0, 0,149, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0,150, 0, 0, 0,148, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 1, - 0, 0, 0,115, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0,117, 0, 0, 0, 1, 0, 0, 0,148, 0, 0, 0,146, 0, 0, 0,116, - 0, 0, 0,118, 0, 0, 0, 1, 0, 0, 0,113, 0, 0, 0,143, 0, 0, 0,145, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0,146, - 0, 0, 0,144, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0,161, 0, 0, 0,143, 0, 0, 0,113, - 0, 0, 0, 1, 0, 0, 0,144, 0, 0, 0,162, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0,178, - 0, 0, 0,174, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,174, 0, 0, 0,179, 0, 0, 0,112, 0, 0, 0,162, 0, 0, 0, 1, - 0, 0, 0,108, 0, 0, 0,159, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 1, 0, 0, 0, 66, 0, 0, 0,160, 0, 0, 0,109, - 0, 0, 0,111, 0, 0, 0, 1, 0, 0, 0,110, 0, 0, 0, 66, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,175, - 0, 0, 0, 66, 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0,180, 0, 0, 0,175, - 0, 0, 0, 1, 0, 0, 0,181, 0, 0, 0,179, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0,132, 0, 0, 0,134, - 0, 0, 0,173, 0, 0, 0,171, 0, 0, 0, 1, 0, 0, 0,173, 0, 0, 0,134, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0, 1, - 0, 0, 0,130, 0, 0, 0,132, 0, 0, 0,171, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,172, 0, 0, 0,133, 0, 0, 0,131, - 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,170, - 0, 0, 0,131, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,163, 0, 0, 0,184, 0, 0, 0,182, 0, 0, 0,165, - 0, 0, 0, 1, 0, 0, 0,183, 0, 0, 0,185, 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,167, - 0, 0, 0,165, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,166, 0, 0, 0,168, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0, 1, - 0, 0, 0,141, 0, 0, 0,187, 0, 0, 0,186, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0,186, 0, 0, 0,187, 0, 0, 0,142, - 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0,182, 0, 0, 0,184, 0, 0, 0,186, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,186, - 0, 0, 0,185, 0, 0, 0,183, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,127, 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0, 67, - 0, 0, 0, 1, 0, 0, 0,183, 0, 0, 0,129, 0, 0, 0,127, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,139, 0, 0, 0,190, - 0, 0, 0,188, 0, 0, 0,141, 0, 0, 0, 1, 0, 0, 0,189, 0, 0, 0,191, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0, 1, - 0, 0, 0,137, 0, 0, 0,192, 0, 0, 0,190, 0, 0, 0,139, 0, 0, 0, 1, 0, 0, 0,191, 0, 0, 0,193, 0, 0, 0,138, - 0, 0, 0,140, 0, 0, 0, 1, 0, 0, 0,136, 0, 0, 0,194, 0, 0, 0,192, 0, 0, 0,137, 0, 0, 0, 1, 0, 0, 0,193, - 0, 0, 0,195, 0, 0, 0,136, 0, 0, 0,138, 0, 0, 0, 1, 0, 0, 0,135, 0, 0, 0, 69, 0, 0, 0,194, 0, 0, 0,136, - 0, 0, 0, 1, 0, 0, 0,195, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0,136, 0, 0, 0, 1, 0, 0, 0,187, 0, 0, 0,141, - 0, 0, 0,188, 0, 0, 0, 68, 0, 0, 0, 1, 0, 0, 0,189, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 68, 0, 0, 0, 1, - 0, 0, 0, 68, 0, 0, 0,188, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,189, 0, 0, 0, 68, - 0, 0, 0,205, 0, 0, 0, 1, 0, 0, 0, 69, 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,198, - 0, 0, 0,196, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,194, 0, 0, 0,197, 0, 0, 0,199, 0, 0, 0,192, - 0, 0, 0, 1, 0, 0, 0,200, 0, 0, 0,198, 0, 0, 0,195, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 0, 0, 0,199, - 0, 0, 0,201, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,202, 0, 0, 0,200, 0, 0, 0,193, 0, 0, 0,191, 0, 0, 0, 1, - 0, 0, 0,190, 0, 0, 0,201, 0, 0, 0,203, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,202, 0, 0, 0,191, - 0, 0, 0,189, 0, 0, 0, 1, 0, 0, 0,196, 0, 0, 0,201, 0, 0, 0,199, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200, - 0, 0, 0,202, 0, 0, 0,196, 0, 0, 0,198, 0, 0, 0, 1, 0, 0, 0,196, 0, 0, 0,205, 0, 0, 0,203, 0, 0, 0,201, - 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,205, 0, 0, 0,196, 0, 0, 0,202, 0, 0, 0, 1, 0, 0, 0,136, 0, 0, 0,137, - 0, 0, 0,161, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,162, 0, 0, 0,138, 0, 0, 0,136, 0, 0, 0,174, 0, 0, 0, 1, - 0, 0, 0,137, 0, 0, 0,139, 0, 0, 0,208, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,209, 0, 0, 0,140, 0, 0, 0,138, - 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,139, 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,211, - 0, 0, 0,142, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,141, 0, 0, 0,184, 0, 0, 0,163, 0, 0, 0,210, - 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0,185, 0, 0, 0,142, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0,206, - 0, 0, 0,210, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,211, 0, 0, 0,207, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0, 1, - 0, 0, 0,206, 0, 0, 0,212, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,209, 0, 0, 0,213, 0, 0, 0,207, - 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 77, 0, 0, 0,161, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,209, - 0, 0, 0,162, 0, 0, 0, 78, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,127, 0, 0, 0, 70, 0, 0, 0,219, - 0, 0, 0, 1, 0, 0, 0, 70, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 1, 0, 0, 0,130, 0, 0, 0,128, - 0, 0, 0,219, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,220, 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0,218, 0, 0, 0, 1, - 0, 0, 0,132, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,218, 0, 0, 0,131, 0, 0, 0,133, - 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,134, 0, 0, 0,132, 0, 0, 0,215, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, - 0, 0, 0,133, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,214, 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0,228, - 0, 0, 0, 1, 0, 0, 0,227, 0, 0, 0,216, 0, 0, 0,214, 0, 0, 0,228, 0, 0, 0, 1, 0, 0, 0,215, 0, 0, 0,217, - 0, 0, 0,224, 0, 0, 0,226, 0, 0, 0, 1, 0, 0, 0,225, 0, 0, 0,218, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0, 1, - 0, 0, 0,217, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0,224, 0, 0, 0, 1, 0, 0, 0,223, 0, 0, 0,220, 0, 0, 0,218, - 0, 0, 0,225, 0, 0, 0, 1, 0, 0, 0,219, 0, 0, 0, 70, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 1, 0, 0, 0,221, - 0, 0, 0, 70, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0,221, 0, 0, 0,228, 0, 0, 0,226, 0, 0, 0,222, - 0, 0, 0, 1, 0, 0, 0,227, 0, 0, 0,228, 0, 0, 0,221, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0,222, 0, 0, 0,226, - 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,225, 0, 0, 0,227, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0,180, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0,229, 0, 0, 0, 1, 0, 0, 0,232, 0, 0, 0,179, 0, 0, 0,181, - 0, 0, 0,230, 0, 0, 0, 1, 0, 0, 0,110, 0, 0, 0,180, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 1, 0, 0, 0,230, - 0, 0, 0,181, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 1, 0, 0, 0,108, 0, 0, 0,110, 0, 0, 0,251, 0, 0, 0,253, - 0, 0, 0, 1, 0, 0, 0,252, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,254, 0, 0, 0, 1, 0, 0, 0,178, 0, 0, 0, 14, - 0, 0, 0,249, 0, 0, 0,231, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,112, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0, 1, - 0, 0, 0, 14, 0, 0, 0,113, 0, 0, 0,247, 0, 0, 0,249, 0, 0, 0, 1, 0, 0, 0,248, 0, 0, 0,114, 0, 0, 0,112, - 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 1, 0, 0, 0,246, - 0, 0, 0,116, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 1, 0, 0, 0,115, 0, 0, 0,117, 0, 0, 0,243, 0, 0, 0,245, - 0, 0, 0, 1, 0, 0, 0,244, 0, 0, 0,118, 0, 0, 0,116, 0, 0, 0,246, 0, 0, 0, 1, 0, 0, 0,117, 0, 0, 0,119, - 0, 0, 0,241, 0, 0, 0,243, 0, 0, 0, 1, 0, 0, 0,242, 0, 0, 0,120, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0, 1, - 0, 0, 0,119, 0, 0, 0,121, 0, 0, 0,239, 0, 0, 0,241, 0, 0, 0, 1, 0, 0, 0,240, 0, 0, 0,122, 0, 0, 0,120, - 0, 0, 0,242, 0, 0, 0, 1, 0, 0, 0,121, 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 1, 0, 0, 0,238, - 0, 0, 0,124, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 1, 0, 0, 0,123, 0, 0, 0,176, 0, 0, 0,233, 0, 0, 0,237, - 0, 0, 0, 1, 0, 0, 0,234, 0, 0, 0,177, 0, 0, 0,124, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0,176, 0, 0, 0,125, - 0, 0, 0,235, 0, 0, 0,233, 0, 0, 0, 1, 0, 0, 0,236, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0, 1, - 0, 0, 0,125, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0,235, 0, 0, 0, 1, 0, 0, 0,254, 0, 0, 0,109, 0, 0, 0,126, - 0, 0, 0,236, 0, 0, 0, 1, 0, 0, 0,235, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 1, 17, 0, 0, 0, 1, 0, 0, 1, 0, - 0, 0, 0,254, 0, 0, 0,236, 0, 0, 1, 18, 0, 0, 0, 1, 0, 0, 0,233, 0, 0, 0,235, 0, 0, 1, 17, 0, 0, 1, 19, - 0, 0, 0, 1, 0, 0, 1, 18, 0, 0, 0,236, 0, 0, 0,234, 0, 0, 1, 20, 0, 0, 0, 1, 0, 0, 0,237, 0, 0, 0,233, - 0, 0, 1, 19, 0, 0, 1, 15, 0, 0, 0, 1, 0, 0, 1, 20, 0, 0, 0,234, 0, 0, 0,238, 0, 0, 1, 16, 0, 0, 0, 1, - 0, 0, 0,239, 0, 0, 0,237, 0, 0, 1, 15, 0, 0, 1, 13, 0, 0, 0, 1, 0, 0, 1, 16, 0, 0, 0,238, 0, 0, 0,240, - 0, 0, 1, 14, 0, 0, 0, 1, 0, 0, 0,241, 0, 0, 0,239, 0, 0, 1, 13, 0, 0, 1, 11, 0, 0, 0, 1, 0, 0, 1, 14, - 0, 0, 0,240, 0, 0, 0,242, 0, 0, 1, 12, 0, 0, 0, 1, 0, 0, 0,243, 0, 0, 0,241, 0, 0, 1, 11, 0, 0, 1, 9, - 0, 0, 0, 1, 0, 0, 1, 12, 0, 0, 0,242, 0, 0, 0,244, 0, 0, 1, 10, 0, 0, 0, 1, 0, 0, 0,245, 0, 0, 0,243, - 0, 0, 1, 9, 0, 0, 1, 7, 0, 0, 0, 1, 0, 0, 1, 10, 0, 0, 0,244, 0, 0, 0,246, 0, 0, 1, 8, 0, 0, 0, 1, - 0, 0, 0,247, 0, 0, 0,245, 0, 0, 1, 7, 0, 0, 1, 5, 0, 0, 0, 1, 0, 0, 1, 8, 0, 0, 0,246, 0, 0, 0,248, - 0, 0, 1, 6, 0, 0, 0, 1, 0, 0, 0,249, 0, 0, 0,247, 0, 0, 1, 5, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0, 1, 6, - 0, 0, 0,248, 0, 0, 0,250, 0, 0, 1, 4, 0, 0, 0, 1, 0, 0, 0,231, 0, 0, 0,249, 0, 0, 1, 3, 0, 0, 1, 21, - 0, 0, 0, 1, 0, 0, 1, 4, 0, 0, 0,250, 0, 0, 0,232, 0, 0, 1, 22, 0, 0, 0, 1, 0, 0, 0,253, 0, 0, 0,251, - 0, 0, 1, 1, 0, 0, 0,255, 0, 0, 0, 1, 0, 0, 1, 2, 0, 0, 0,252, 0, 0, 0,254, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0,251, 0, 0, 0,229, 0, 0, 1, 23, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 24, 0, 0, 0,230, 0, 0, 0,252, - 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0,229, 0, 0, 0,231, 0, 0, 1, 21, 0, 0, 1, 23, 0, 0, 0, 1, 0, 0, 1, 22, - 0, 0, 0,232, 0, 0, 0,230, 0, 0, 1, 24, 0, 0, 0, 1, 0, 0, 0, 65, 0, 0, 0,106, 0, 0, 1, 25, 0, 0, 0, 71, - 0, 0, 0, 1, 0, 0, 1, 26, 0, 0, 0,107, 0, 0, 0, 65, 0, 0, 0, 71, 0, 0, 0, 1, 0, 0, 0,106, 0, 0, 0,104, - 0, 0, 1, 27, 0, 0, 1, 25, 0, 0, 0, 1, 0, 0, 1, 28, 0, 0, 0,105, 0, 0, 0,107, 0, 0, 1, 26, 0, 0, 0, 1, - 0, 0, 0,104, 0, 0, 0,102, 0, 0, 1, 29, 0, 0, 1, 27, 0, 0, 0, 1, 0, 0, 1, 30, 0, 0, 0,103, 0, 0, 0,105, - 0, 0, 1, 28, 0, 0, 0, 1, 0, 0, 0,102, 0, 0, 0,100, 0, 0, 1, 31, 0, 0, 1, 29, 0, 0, 0, 1, 0, 0, 1, 32, - 0, 0, 0,101, 0, 0, 0,103, 0, 0, 1, 30, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 98, 0, 0, 1, 33, 0, 0, 1, 31, - 0, 0, 0, 1, 0, 0, 1, 34, 0, 0, 0, 99, 0, 0, 0,101, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 98, 0, 0, 0, 96, - 0, 0, 1, 35, 0, 0, 1, 33, 0, 0, 0, 1, 0, 0, 1, 36, 0, 0, 0, 97, 0, 0, 0, 99, 0, 0, 1, 34, 0, 0, 0, 1, - 0, 0, 0, 96, 0, 0, 0, 94, 0, 0, 1, 37, 0, 0, 1, 35, 0, 0, 0, 1, 0, 0, 1, 38, 0, 0, 0, 95, 0, 0, 0, 97, - 0, 0, 1, 36, 0, 0, 0, 1, 0, 0, 0, 94, 0, 0, 0, 92, 0, 0, 1, 39, 0, 0, 1, 37, 0, 0, 0, 1, 0, 0, 1, 40, - 0, 0, 0, 93, 0, 0, 0, 95, 0, 0, 1, 38, 0, 0, 0, 1, 0, 0, 0, 92, 0, 0, 0, 90, 0, 0, 1, 41, 0, 0, 1, 39, - 0, 0, 0, 1, 0, 0, 1, 42, 0, 0, 0, 91, 0, 0, 0, 93, 0, 0, 1, 40, 0, 0, 0, 1, 0, 0, 1, 49, 0, 0, 1, 50, - 0, 0, 1, 69, 0, 0, 1, 79, 0, 0, 0, 1, 0, 0, 1, 70, 0, 0, 1, 50, 0, 0, 1, 49, 0, 0, 1, 80, 0, 0, 0, 1, - 0, 0, 1, 48, 0, 0, 1, 49, 0, 0, 1, 79, 0, 0, 1, 77, 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 49, 0, 0, 1, 48, - 0, 0, 1, 78, 0, 0, 0, 1, 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 1, 77, 0, 0, 1, 81, 0, 0, 0, 1, 0, 0, 1, 78, - 0, 0, 1, 48, 0, 0, 1, 47, 0, 0, 1, 82, 0, 0, 0, 1, 0, 0, 0, 87, 0, 0, 0, 89, 0, 0, 1, 47, 0, 0, 1, 81, - 0, 0, 0, 1, 0, 0, 1, 47, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 1, 82, 0, 0, 0, 1, 0, 0, 0, 85, 0, 0, 0, 87, - 0, 0, 1, 81, 0, 0, 1, 75, 0, 0, 0, 1, 0, 0, 1, 82, 0, 0, 0, 88, 0, 0, 0, 86, 0, 0, 1, 76, 0, 0, 0, 1, - 0, 0, 0, 83, 0, 0, 0, 85, 0, 0, 1, 75, 0, 0, 1, 71, 0, 0, 0, 1, 0, 0, 1, 76, 0, 0, 0, 86, 0, 0, 0, 84, - 0, 0, 1, 72, 0, 0, 0, 1, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 1, 71, 0, 0, 1, 73, 0, 0, 0, 1, 0, 0, 1, 72, - 0, 0, 0, 84, 0, 0, 0, 82, 0, 0, 1, 74, 0, 0, 0, 1, 0, 0, 1, 71, 0, 0, 1, 77, 0, 0, 1, 79, 0, 0, 1, 73, - 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 78, 0, 0, 1, 72, 0, 0, 1, 74, 0, 0, 0, 1, 0, 0, 1, 71, 0, 0, 1, 75, - 0, 0, 1, 81, 0, 0, 1, 77, 0, 0, 0, 1, 0, 0, 1, 82, 0, 0, 1, 76, 0, 0, 1, 72, 0, 0, 1, 78, 0, 0, 0, 1, - 0, 0, 1, 67, 0, 0, 1, 73, 0, 0, 1, 79, 0, 0, 1, 69, 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 74, 0, 0, 1, 68, - 0, 0, 1, 70, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0, 81, 0, 0, 1, 73, 0, 0, 1, 67, 0, 0, 0, 1, 0, 0, 1, 74, - 0, 0, 0, 82, 0, 0, 0, 80, 0, 0, 1, 68, 0, 0, 0, 1, 0, 0, 0,206, 0, 0, 1, 83, 0, 0, 1, 85, 0, 0, 0,212, - 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 1, 84, 0, 0, 0,207, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 1, 67, - 0, 0, 1, 83, 0, 0, 0,206, 0, 0, 0, 1, 0, 0, 1, 84, 0, 0, 1, 68, 0, 0, 0, 80, 0, 0, 0,207, 0, 0, 0, 1, - 0, 0, 0, 77, 0, 0, 0,212, 0, 0, 1, 85, 0, 0, 1, 87, 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 0,213, 0, 0, 0, 78, - 0, 0, 1, 88, 0, 0, 0, 1, 0, 0, 0, 77, 0, 0, 1, 87, 0, 0, 1, 41, 0, 0, 0, 90, 0, 0, 0, 1, 0, 0, 1, 42, - 0, 0, 1, 88, 0, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 1, 0, 0, 0, 75, 0, 0, 1, 65, 0, 0, 1, 93, 0, 0, 1, 45, - 0, 0, 0, 1, 0, 0, 1, 94, 0, 0, 1, 66, 0, 0, 0, 75, 0, 0, 1, 45, 0, 0, 0, 1, 0, 0, 1, 45, 0, 0, 1, 93, - 0, 0, 1, 91, 0, 0, 0, 76, 0, 0, 0, 1, 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 1, 45, 0, 0, 0, 76, 0, 0, 0, 1, - 0, 0, 0, 76, 0, 0, 1, 91, 0, 0, 1, 89, 0, 0, 1, 46, 0, 0, 0, 1, 0, 0, 1, 90, 0, 0, 1, 92, 0, 0, 0, 76, - 0, 0, 1, 46, 0, 0, 0, 1, 0, 0, 1, 46, 0, 0, 1, 89, 0, 0, 1, 69, 0, 0, 1, 50, 0, 0, 0, 1, 0, 0, 1, 70, - 0, 0, 1, 90, 0, 0, 1, 46, 0, 0, 1, 50, 0, 0, 0, 1, 0, 0, 1, 67, 0, 0, 1, 69, 0, 0, 1, 89, 0, 0, 1, 83, - 0, 0, 0, 1, 0, 0, 1, 90, 0, 0, 1, 70, 0, 0, 1, 68, 0, 0, 1, 84, 0, 0, 0, 1, 0, 0, 1, 37, 0, 0, 1, 39, - 0, 0, 1, 59, 0, 0, 1, 51, 0, 0, 0, 1, 0, 0, 1, 60, 0, 0, 1, 40, 0, 0, 1, 38, 0, 0, 1, 52, 0, 0, 0, 1, - 0, 0, 0, 74, 0, 0, 1, 57, 0, 0, 1, 65, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 1, 66, 0, 0, 1, 58, 0, 0, 0, 74, - 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 1, 43, 0, 0, 1, 99, 0, 0, 1, 97, 0, 0, 1, 44, 0, 0, 0, 1, 0, 0, 1, 98, - 0, 0, 1,100, 0, 0, 1, 43, 0, 0, 1, 44, 0, 0, 0, 1, 0, 0, 1, 44, 0, 0, 1, 97, 0, 0, 1, 95, 0, 0, 0, 73, - 0, 0, 0, 1, 0, 0, 1, 96, 0, 0, 1, 98, 0, 0, 1, 44, 0, 0, 0, 73, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0, 1, 95, - 0, 0, 1, 57, 0, 0, 0, 74, 0, 0, 0, 1, 0, 0, 1, 58, 0, 0, 1, 96, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 1, - 0, 0, 1, 33, 0, 0, 1, 35, 0, 0, 1,103, 0, 0, 1,105, 0, 0, 0, 1, 0, 0, 1,104, 0, 0, 1, 36, 0, 0, 1, 34, - 0, 0, 1,106, 0, 0, 0, 1, 0, 0, 1,105, 0, 0, 1,103, 0, 0, 1,109, 0, 0, 1,107, 0, 0, 0, 1, 0, 0, 1,110, - 0, 0, 1,104, 0, 0, 1,106, 0, 0, 1,108, 0, 0, 0, 1, 0, 0, 1,107, 0, 0, 1,109, 0, 0, 1,111, 0, 0, 1,113, - 0, 0, 0, 1, 0, 0, 1,112, 0, 0, 1,110, 0, 0, 1,108, 0, 0, 1,114, 0, 0, 0, 1, 0, 0, 1,113, 0, 0, 1,111, - 0, 0, 1,117, 0, 0, 1,115, 0, 0, 0, 1, 0, 0, 1,118, 0, 0, 1,112, 0, 0, 1,114, 0, 0, 1,116, 0, 0, 0, 1, - 0, 0, 1, 55, 0, 0, 1,119, 0, 0, 1,115, 0, 0, 1,117, 0, 0, 0, 1, 0, 0, 1,116, 0, 0, 1,120, 0, 0, 1, 56, - 0, 0, 1,118, 0, 0, 0, 1, 0, 0, 1, 57, 0, 0, 1, 95, 0, 0, 1,115, 0, 0, 1,119, 0, 0, 0, 1, 0, 0, 1,116, - 0, 0, 1, 96, 0, 0, 1, 58, 0, 0, 1,120, 0, 0, 0, 1, 0, 0, 1, 95, 0, 0, 1, 97, 0, 0, 1,113, 0, 0, 1,115, - 0, 0, 0, 1, 0, 0, 1,114, 0, 0, 1, 98, 0, 0, 1, 96, 0, 0, 1,116, 0, 0, 0, 1, 0, 0, 1, 97, 0, 0, 1, 99, - 0, 0, 1,107, 0, 0, 1,113, 0, 0, 0, 1, 0, 0, 1,108, 0, 0, 1,100, 0, 0, 1, 98, 0, 0, 1,114, 0, 0, 0, 1, - 0, 0, 1, 99, 0, 0, 1,101, 0, 0, 1,105, 0, 0, 1,107, 0, 0, 0, 1, 0, 0, 1,106, 0, 0, 1,102, 0, 0, 1,100, - 0, 0, 1,108, 0, 0, 0, 1, 0, 0, 1, 31, 0, 0, 1, 33, 0, 0, 1,105, 0, 0, 1,101, 0, 0, 0, 1, 0, 0, 1,106, - 0, 0, 1, 34, 0, 0, 1, 32, 0, 0, 1,102, 0, 0, 0, 1, 0, 0, 0, 72, 0, 0, 1,101, 0, 0, 1, 99, 0, 0, 1, 43, - 0, 0, 0, 1, 0, 0, 1,100, 0, 0, 1,102, 0, 0, 0, 72, 0, 0, 1, 43, 0, 0, 0, 1, 0, 0, 1, 25, 0, 0, 1, 27, - 0, 0, 1, 29, 0, 0, 1, 31, 0, 0, 0, 1, 0, 0, 1, 30, 0, 0, 1, 28, 0, 0, 1, 26, 0, 0, 1, 32, 0, 0, 0, 1, - 0, 0, 1, 25, 0, 0, 1, 31, 0, 0, 1,101, 0, 0, 0, 72, 0, 0, 0, 1, 0, 0, 1,102, 0, 0, 1, 32, 0, 0, 1, 26, - 0, 0, 0, 72, 0, 0, 0, 1, 0, 0, 0, 71, 0, 0, 1, 25, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 72, - 0, 0, 1, 26, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 35, 0, 0, 1, 37, 0, 0, 1, 51, 0, 0, 1,103, - 0, 0, 0, 1, 0, 0, 1, 52, 0, 0, 1, 38, 0, 0, 1, 36, 0, 0, 1,104, 0, 0, 0, 1, 0, 0, 1, 51, 0, 0, 1, 53, - 0, 0, 1,109, 0, 0, 1,103, 0, 0, 0, 1, 0, 0, 1,110, 0, 0, 1, 54, 0, 0, 1, 52, 0, 0, 1,104, 0, 0, 0, 1, - 0, 0, 1, 53, 0, 0, 1,123, 0, 0, 1,111, 0, 0, 1,109, 0, 0, 0, 1, 0, 0, 1,112, 0, 0, 1,124, 0, 0, 1, 54, - 0, 0, 1,110, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,117, 0, 0, 1,111, 0, 0, 1,123, 0, 0, 0, 1, 0, 0, 1,112, - 0, 0, 1,118, 0, 0, 1, 56, 0, 0, 1,124, 0, 0, 0, 1, 0, 0, 1, 89, 0, 0, 1, 91, 0, 0, 1,127, 0, 0, 1,125, - 0, 0, 0, 1, 0, 0, 1,128, 0, 0, 1, 92, 0, 0, 1, 90, 0, 0, 1,126, 0, 0, 0, 1, 0, 0, 1, 59, 0, 0, 1,125, - 0, 0, 1,127, 0, 0, 1, 61, 0, 0, 0, 1, 0, 0, 1,128, 0, 0, 1,126, 0, 0, 1, 60, 0, 0, 1, 62, 0, 0, 0, 1, - 0, 0, 1, 39, 0, 0, 1, 41, 0, 0, 1,125, 0, 0, 1, 59, 0, 0, 0, 1, 0, 0, 1,126, 0, 0, 1, 42, 0, 0, 1, 40, - 0, 0, 1, 60, 0, 0, 0, 1, 0, 0, 1, 41, 0, 0, 1, 85, 0, 0, 1, 83, 0, 0, 1,125, 0, 0, 0, 1, 0, 0, 1, 84, - 0, 0, 1, 86, 0, 0, 1, 42, 0, 0, 1,126, 0, 0, 0, 1, 0, 0, 1, 83, 0, 0, 1, 89, 0, 0, 1,125, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 1,126, 0, 0, 1, 90, 0, 0, 1, 84, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 41, 0, 0, 1, 87, - 0, 0, 1, 85, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 1, 42, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 1, 55, 0, 0, 1, 63, 0, 0, 1,121, 0, 0, 1,119, 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1, 64, 0, 0, 1, 56, - 0, 0, 1,120, 0, 0, 0, 1, 0, 0, 1, 57, 0, 0, 1,119, 0, 0, 1,121, 0, 0, 1, 65, 0, 0, 0, 1, 0, 0, 1,122, - 0, 0, 1,120, 0, 0, 1, 58, 0, 0, 1, 66, 0, 0, 0, 1, 0, 0, 1, 61, 0, 0, 1,127, 0, 0, 1,121, 0, 0, 1, 63, - 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1,128, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 0, 1, 0, 0, 1, 91, 0, 0, 1, 93, - 0, 0, 1,121, 0, 0, 1,127, 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1, 94, 0, 0, 1, 92, 0, 0, 1,128, 0, 0, 0, 1, - 0, 0, 1, 65, 0, 0, 1,121, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 94, 0, 0, 1,122, 0, 0, 1, 66, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,129, 0, 0, 1,155, 0, 0, 1,143, 0, 0, 0, 1, 0, 0, 1,156, - 0, 0, 1,130, 0, 0, 1,142, 0, 0, 1,144, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 1,139, - 0, 0, 0, 1, 0, 0, 1,146, 0, 0, 1,144, 0, 0, 1,142, 0, 0, 1,140, 0, 0, 0, 1, 0, 0, 1,139, 0, 0, 1,145, - 0, 0, 1,147, 0, 0, 1,137, 0, 0, 0, 1, 0, 0, 1,148, 0, 0, 1,146, 0, 0, 1,140, 0, 0, 1,138, 0, 0, 0, 1, - 0, 0, 1,137, 0, 0, 1,147, 0, 0, 1,149, 0, 0, 1,135, 0, 0, 0, 1, 0, 0, 1,150, 0, 0, 1,148, 0, 0, 1,138, - 0, 0, 1,136, 0, 0, 0, 1, 0, 0, 1,135, 0, 0, 1,149, 0, 0, 1,151, 0, 0, 1,133, 0, 0, 0, 1, 0, 0, 1,152, - 0, 0, 1,150, 0, 0, 1,136, 0, 0, 1,134, 0, 0, 0, 1, 0, 0, 1,133, 0, 0, 1,151, 0, 0, 1,153, 0, 0, 1,131, - 0, 0, 0, 1, 0, 0, 1,154, 0, 0, 1,152, 0, 0, 1,134, 0, 0, 1,132, 0, 0, 0, 1, 0, 0, 1,151, 0, 0, 1,161, - 0, 0, 1,159, 0, 0, 1,153, 0, 0, 0, 1, 0, 0, 1,160, 0, 0, 1,162, 0, 0, 1,152, 0, 0, 1,154, 0, 0, 0, 1, - 0, 0, 1,149, 0, 0, 1,163, 0, 0, 1,161, 0, 0, 1,151, 0, 0, 0, 1, 0, 0, 1,162, 0, 0, 1,164, 0, 0, 1,150, - 0, 0, 1,152, 0, 0, 0, 1, 0, 0, 1,147, 0, 0, 1,165, 0, 0, 1,163, 0, 0, 1,149, 0, 0, 0, 1, 0, 0, 1,164, - 0, 0, 1,166, 0, 0, 1,148, 0, 0, 1,150, 0, 0, 0, 1, 0, 0, 1,145, 0, 0, 1,167, 0, 0, 1,165, 0, 0, 1,147, - 0, 0, 0, 1, 0, 0, 1,166, 0, 0, 1,168, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 1, 0, 0, 1,143, 0, 0, 1,169, - 0, 0, 1,167, 0, 0, 1,145, 0, 0, 0, 1, 0, 0, 1,168, 0, 0, 1,170, 0, 0, 1,144, 0, 0, 1,146, 0, 0, 0, 1, - 0, 0, 1,143, 0, 0, 1,155, 0, 0, 1,157, 0, 0, 1,169, 0, 0, 0, 1, 0, 0, 1,158, 0, 0, 1,156, 0, 0, 1,144, - 0, 0, 1,170, 0, 0, 0, 1, 0, 0, 1, 59, 0, 0, 1, 61, 0, 0, 1,185, 0, 0, 1,183, 0, 0, 0, 1, 0, 0, 1,186, - 0, 0, 1, 62, 0, 0, 1, 60, 0, 0, 1,184, 0, 0, 0, 1, 0, 0, 1, 61, 0, 0, 1,131, 0, 0, 1,153, 0, 0, 1,185, - 0, 0, 0, 1, 0, 0, 1,154, 0, 0, 1,132, 0, 0, 1, 62, 0, 0, 1,186, 0, 0, 0, 1, 0, 0, 1, 51, 0, 0, 1, 59, - 0, 0, 1,183, 0, 0, 1, 53, 0, 0, 0, 1, 0, 0, 1,184, 0, 0, 1, 60, 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 1, - 0, 0, 1,123, 0, 0, 1,171, 0, 0, 1,155, 0, 0, 1,129, 0, 0, 0, 1, 0, 0, 1,156, 0, 0, 1,172, 0, 0, 1,124, - 0, 0, 1,130, 0, 0, 0, 1, 0, 0, 1,153, 0, 0, 1,159, 0, 0, 1,181, 0, 0, 1,185, 0, 0, 0, 1, 0, 0, 1,182, - 0, 0, 1,160, 0, 0, 1,154, 0, 0, 1,186, 0, 0, 0, 1, 0, 0, 1,179, 0, 0, 1,187, 0, 0, 1,185, 0, 0, 1,181, - 0, 0, 0, 1, 0, 0, 1,186, 0, 0, 1,188, 0, 0, 1,180, 0, 0, 1,182, 0, 0, 0, 1, 0, 0, 1,175, 0, 0, 1,187, - 0, 0, 1,179, 0, 0, 1,177, 0, 0, 0, 1, 0, 0, 1,180, 0, 0, 1,188, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 0, 1, - 0, 0, 1,173, 0, 0, 1,189, 0, 0, 1,187, 0, 0, 1,175, 0, 0, 0, 1, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 1,174, - 0, 0, 1,176, 0, 0, 0, 1, 0, 0, 1,171, 0, 0, 1,189, 0, 0, 1,173, 0, 0, 1,191, 0, 0, 0, 1, 0, 0, 1,174, - 0, 0, 1,190, 0, 0, 1,172, 0, 0, 1,192, 0, 0, 0, 1, 0, 0, 1,155, 0, 0, 1,171, 0, 0, 1,191, 0, 0, 1,157, - 0, 0, 0, 1, 0, 0, 1,192, 0, 0, 1,172, 0, 0, 1,156, 0, 0, 1,158, 0, 0, 0, 1, 0, 0, 1, 53, 0, 0, 1,189, - 0, 0, 1,171, 0, 0, 1,123, 0, 0, 0, 1, 0, 0, 1,172, 0, 0, 1,190, 0, 0, 1, 54, 0, 0, 1,124, 0, 0, 0, 1, - 0, 0, 1, 53, 0, 0, 1,183, 0, 0, 1,187, 0, 0, 1,189, 0, 0, 0, 1, 0, 0, 1,188, 0, 0, 1,184, 0, 0, 1, 54, - 0, 0, 1,190, 0, 0, 0, 1, 0, 0, 1,183, 0, 0, 1,185, 0, 0, 1,187, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,188, - 0, 0, 1,186, 0, 0, 1,184, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,157, 0, 0, 1,191, 0, 0, 1,193, 0, 0, 1,217, - 0, 0, 0, 1, 0, 0, 1,194, 0, 0, 1,192, 0, 0, 1,158, 0, 0, 1,218, 0, 0, 0, 1, 0, 0, 1,191, 0, 0, 1,173, - 0, 0, 1,203, 0, 0, 1,193, 0, 0, 0, 1, 0, 0, 1,204, 0, 0, 1,174, 0, 0, 1,192, 0, 0, 1,194, 0, 0, 0, 1, - 0, 0, 1,173, 0, 0, 1,175, 0, 0, 1,201, 0, 0, 1,203, 0, 0, 0, 1, 0, 0, 1,202, 0, 0, 1,176, 0, 0, 1,174, - 0, 0, 1,204, 0, 0, 0, 1, 0, 0, 1,175, 0, 0, 1,177, 0, 0, 1,199, 0, 0, 1,201, 0, 0, 0, 1, 0, 0, 1,200, - 0, 0, 1,178, 0, 0, 1,176, 0, 0, 1,202, 0, 0, 0, 1, 0, 0, 1,177, 0, 0, 1,179, 0, 0, 1,197, 0, 0, 1,199, - 0, 0, 0, 1, 0, 0, 1,198, 0, 0, 1,180, 0, 0, 1,178, 0, 0, 1,200, 0, 0, 0, 1, 0, 0, 1,179, 0, 0, 1,181, - 0, 0, 1,195, 0, 0, 1,197, 0, 0, 0, 1, 0, 0, 1,196, 0, 0, 1,182, 0, 0, 1,180, 0, 0, 1,198, 0, 0, 0, 1, - 0, 0, 1,181, 0, 0, 1,159, 0, 0, 1,215, 0, 0, 1,195, 0, 0, 0, 1, 0, 0, 1,216, 0, 0, 1,160, 0, 0, 1,182, - 0, 0, 1,196, 0, 0, 0, 1, 0, 0, 1,169, 0, 0, 1,157, 0, 0, 1,217, 0, 0, 1,205, 0, 0, 0, 1, 0, 0, 1,218, - 0, 0, 1,158, 0, 0, 1,170, 0, 0, 1,206, 0, 0, 0, 1, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 1,205, 0, 0, 1,207, - 0, 0, 0, 1, 0, 0, 1,206, 0, 0, 1,170, 0, 0, 1,168, 0, 0, 1,208, 0, 0, 0, 1, 0, 0, 1,165, 0, 0, 1,167, - 0, 0, 1,207, 0, 0, 1,209, 0, 0, 0, 1, 0, 0, 1,208, 0, 0, 1,168, 0, 0, 1,166, 0, 0, 1,210, 0, 0, 0, 1, - 0, 0, 1,163, 0, 0, 1,165, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 1, 0, 0, 1,210, 0, 0, 1,166, 0, 0, 1,164, - 0, 0, 1,212, 0, 0, 0, 1, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 1,211, 0, 0, 1,213, 0, 0, 0, 1, 0, 0, 1,212, - 0, 0, 1,164, 0, 0, 1,162, 0, 0, 1,214, 0, 0, 0, 1, 0, 0, 1,159, 0, 0, 1,161, 0, 0, 1,213, 0, 0, 1,215, - 0, 0, 0, 1, 0, 0, 1,214, 0, 0, 1,162, 0, 0, 1,160, 0, 0, 1,216, 0, 0, 0, 1, 0, 0, 1,199, 0, 0, 1,197, - 0, 0, 1,221, 0, 0, 1,219, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,198, 0, 0, 1,200, 0, 0, 1,220, 0, 0, 0, 1, - 0, 0, 1,219, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 1,225, 0, 0, 0, 1, 0, 0, 1,224, 0, 0, 1,222, 0, 0, 1,220, - 0, 0, 1,226, 0, 0, 0, 1, 0, 0, 1,225, 0, 0, 1,223, 0, 0, 1,229, 0, 0, 1,227, 0, 0, 0, 1, 0, 0, 1,230, - 0, 0, 1,224, 0, 0, 1,226, 0, 0, 1,228, 0, 0, 0, 1, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 1,231, 0, 0, 1,233, - 0, 0, 0, 1, 0, 0, 1,232, 0, 0, 1,230, 0, 0, 1,228, 0, 0, 1,234, 0, 0, 0, 1, 0, 0, 1,205, 0, 0, 1,217, - 0, 0, 1,227, 0, 0, 1,233, 0, 0, 0, 1, 0, 0, 1,228, 0, 0, 1,218, 0, 0, 1,206, 0, 0, 1,234, 0, 0, 0, 1, - 0, 0, 1,193, 0, 0, 1,225, 0, 0, 1,227, 0, 0, 1,217, 0, 0, 0, 1, 0, 0, 1,228, 0, 0, 1,226, 0, 0, 1,194, - 0, 0, 1,218, 0, 0, 0, 1, 0, 0, 1,193, 0, 0, 1,203, 0, 0, 1,219, 0, 0, 1,225, 0, 0, 0, 1, 0, 0, 1,220, - 0, 0, 1,204, 0, 0, 1,194, 0, 0, 1,226, 0, 0, 0, 1, 0, 0, 1,199, 0, 0, 1,219, 0, 0, 1,203, 0, 0, 1,201, - 0, 0, 0, 1, 0, 0, 1,204, 0, 0, 1,220, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 0, 1, 0, 0, 1,195, 0, 0, 1,215, - 0, 0, 1,221, 0, 0, 1,197, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,216, 0, 0, 1,196, 0, 0, 1,198, 0, 0, 0, 1, - 0, 0, 1,213, 0, 0, 1,223, 0, 0, 1,221, 0, 0, 1,215, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,224, 0, 0, 1,214, - 0, 0, 1,216, 0, 0, 0, 1, 0, 0, 1,211, 0, 0, 1,229, 0, 0, 1,223, 0, 0, 1,213, 0, 0, 0, 1, 0, 0, 1,224, - 0, 0, 1,230, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 1, 0, 0, 1,209, 0, 0, 1,231, 0, 0, 1,229, 0, 0, 1,211, - 0, 0, 0, 1, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 1,210, 0, 0, 1,212, 0, 0, 0, 1, 0, 0, 1,207, 0, 0, 1,233, - 0, 0, 1,231, 0, 0, 1,209, 0, 0, 0, 1, 0, 0, 1,232, 0, 0, 1,234, 0, 0, 1,208, 0, 0, 1,210, 0, 0, 0, 1, - 0, 0, 1,205, 0, 0, 1,233, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,208, 0, 0, 1,234, 0, 0, 1,206, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,133, 0, 0, 1,131, 0, 0, 1,245, 0, 0, 1,243, 0, 0, 0, 1, 0, 0, 1,246, - 0, 0, 1,132, 0, 0, 1,134, 0, 0, 1,244, 0, 0, 0, 1, 0, 0, 1,135, 0, 0, 1,133, 0, 0, 1,243, 0, 0, 1,241, - 0, 0, 0, 1, 0, 0, 1,244, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 1,242, 0, 0, 0, 1, 0, 0, 1,137, 0, 0, 1,135, - 0, 0, 1,241, 0, 0, 1,239, 0, 0, 0, 1, 0, 0, 1,242, 0, 0, 1,136, 0, 0, 1,138, 0, 0, 1,240, 0, 0, 0, 1, - 0, 0, 1,139, 0, 0, 1,137, 0, 0, 1,239, 0, 0, 1,237, 0, 0, 0, 1, 0, 0, 1,240, 0, 0, 1,138, 0, 0, 1,140, - 0, 0, 1,238, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,139, 0, 0, 1,237, 0, 0, 1,235, 0, 0, 0, 1, 0, 0, 1,238, - 0, 0, 1,140, 0, 0, 1,142, 0, 0, 1,236, 0, 0, 0, 1, 0, 0, 1,129, 0, 0, 1,141, 0, 0, 1,235, 0, 0, 1,247, - 0, 0, 0, 1, 0, 0, 1,236, 0, 0, 1,142, 0, 0, 1,130, 0, 0, 1,248, 0, 0, 0, 1, 0, 0, 1,235, 0, 0, 1,243, - 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1,244, 0, 0, 1,236, 0, 0, 1,248, 0, 0, 0, 1, - 0, 0, 1,235, 0, 0, 1,237, 0, 0, 1,241, 0, 0, 1,243, 0, 0, 0, 1, 0, 0, 1,242, 0, 0, 1,238, 0, 0, 1,236, - 0, 0, 1,244, 0, 0, 0, 1, 0, 0, 1,237, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,242, - 0, 0, 1,240, 0, 0, 1,238, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,123, 0, 0, 1,129, 0, 0, 1,247, - 0, 0, 0, 1, 0, 0, 1,130, 0, 0, 1,124, 0, 0, 1, 56, 0, 0, 1,248, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,247, - 0, 0, 1,245, 0, 0, 1, 63, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1,248, 0, 0, 1, 56, 0, 0, 1, 64, 0, 0, 0, 1, - 0, 0, 1, 61, 0, 0, 1, 63, 0, 0, 1,245, 0, 0, 1,131, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1, 64, 0, 0, 1, 62, - 0, 0, 1,132, 0, 0, 0, 1, 68, 65, 84, 65, 0, 0, 85,240, 7,247,144, 32, 0, 0, 0, 65, 0, 0, 1,244, 63, 28,112, 3, - 62,236,178,185, 63, 27,124,224, 62,232, 65,235, 63, 30, 63,144, 62,226,195,233, 63, 32,152,118, 62,236,167, 37, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,209,232, 2, 62,226, 21,222, 62,215,109,102, 62,231,147,222, 62,213,135, 28, 62,236, 4,172, - 62,205, 54, 56, 62,235,249, 22, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 32,152,118, 62,236,167, 37, 63, 30, 63,144, - 62,226,195,233, 63, 33,235,108, 62,220,235,197, 63, 37,151,209, 62,236,161, 89, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,202,144, 76, 62,220, 61,186, 62,209,232, 2, 62,226, 21,222, 62,205, 54, 56, 62,235,249, 22, 62,195, 55,128, 62,235,243, 70, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 30, 63,144, 62,226,195,233, 63, 25, 55, 20, 62,223, 35, 1, 63, 25,178,200, - 62,214,233, 77, 63, 33,235,108, 62,220,235,197, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,219, 1,146, 62,214, 59, 66, - 62,219,248,248, 62,222,116,246, 62,209,232, 2, 62,226, 21,222, 62,202,144, 76, 62,220, 61,186, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 27,124,224, 62,232, 65,235, 63, 24,252, 87, 62,230,111, 93, 63, 25, 55, 20, 62,223, 35, 1, 63, 30, 63,144, - 62,226,195,233, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,219,248,248, 62,222,116,246, 62,220,110,118, 62,229,193, 78, - 62,215,109,102, 62,231,147,222, 62,209,232, 2, 62,226, 21,222, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,252, 87, - 62,230,111, 93, 63, 22,195, 22, 62,232, 90,195, 63, 20, 91,191, 62,227, 18,193, 63, 25, 55, 20, 62,223, 35, 1, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,229,175,162, 62,226,100,178, 62,224,224,248, 62,231,172,182, 62,220,110,118, 62,229,193, 78, - 62,219,248,248, 62,222,116,246, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 55, 20, 62,223, 35, 1, 63, 20, 91,191, - 62,227, 18,193, 63, 17,165,187, 62,221, 6,225, 63, 25,178,200, 62,214,233, 77, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,235, 27,170, 62,220, 88,214, 62,229,175,162, 62,226,100,178, 62,219,248,248, 62,222,116,246, 62,219, 1,146, 62,214, 59, 66, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 20, 91,191, 62,227, 18,193, 63, 18, 18,164, 62,236,201,173, 63, 13,231,157, - 62,236,161, 89, 63, 17,165,187, 62,221, 6,225, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,242,151,232, 62,235,243, 70, - 62,234, 65,216, 62,236, 27,158, 62,229,175,162, 62,226,100,178, 62,235, 27,170, 62,220, 88,214, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 22,195, 22, 62,232, 90,195, 63, 21,202, 11, 62,236,189, 1, 63, 18, 18,164, 62,236,201,173, 63, 20, 91,191, - 62,227, 18,193, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,234, 65,216, 62,236, 27,158, 62,226,211, 12, 62,236, 14,246, - 62,224,224,248, 62,231,172,182, 62,229,175,162, 62,226,100,178, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 21,202, 11, - 62,236,189, 1, 63, 22,202,215, 62,241,124,237, 63, 20,105,125, 62,246, 71, 1, 63, 18, 18,164, 62,236,201,173, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,229,148, 42, 62,245,152,246, 62,224,209,112, 62,240,206,226, 62,226,211, 12, 62,236, 14,246, - 62,234, 65,216, 62,236, 27,158, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 18, 18,164, 62,236,201,173, 63, 20,105,125, - 62,246, 71, 1, 63, 17,173, 44, 62,252,149,231, 63, 13,231,157, 62,236,161, 89, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,235, 12,206, 62,251,231,218, 62,229,148, 42, 62,245,152,246, 62,234, 65,216, 62,236, 27,158, 62,242,151,232, 62,235,243, 70, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 20,105,125, 62,246, 71, 1, 63, 25, 59, 37, 62,250, 73, 49, 63, 25,178,108, - 63, 1,108,218, 63, 17,173, 44, 62,252,149,231, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,219, 2, 76, 63, 1, 21,213, - 62,219,240,216, 62,249,155, 38, 62,229,148, 42, 62,245,152,246, 62,235, 12,206, 62,251,231,218, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 22,202,215, 62,241,124,237, 63, 25, 1,195, 62,243,102,169, 63, 25, 59, 37, 62,250, 73, 49, 63, 20,105,125, - 62,246, 71, 1, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,219,240,216, 62,249,155, 38, 62,220, 99,156, 62,242,184,154, - 62,224,209,112, 62,240,206,226, 62,229,148, 42, 62,245,152,246, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 1,195, - 62,243,102,169, 63, 27,125,176, 62,241,145,149, 63, 30, 74,167, 62,246,153, 3, 63, 25, 59, 37, 62,250, 73, 49, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,209,209,212, 62,245,234,246, 62,215,107,192, 62,240,227,138, 62,220, 99,156, 62,242,184,154, - 62,219,240,216, 62,249,155, 38, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 59, 37, 62,250, 73, 49, 63, 30, 74,167, - 62,246,153, 3, 63, 33,230,204, 62,252,232,107, 63, 25,178,108, 63, 1,108,218, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,202,153,132, 62,252, 58, 94, 62,209,209,212, 62,245,234,246, 62,219,240,216, 62,249,155, 38, 62,219, 2, 76, 63, 1, 21,213, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 30, 74,167, 62,246,153, 3, 63, 32,152,118, 62,236,167, 37, 63, 37,151,209, - 62,236,161, 89, 63, 33,230,204, 62,252,232,107, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,195, 55,128, 62,235,243, 70, - 62,205, 54, 56, 62,235,249, 22, 62,209,209,212, 62,245,234,246, 62,202,153,132, 62,252, 58, 94, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 27,125,176, 62,241,145,149, 63, 28,112, 3, 62,236,178,185, 63, 32,152,118, 62,236,167, 37, 63, 30, 74,167, - 62,246,153, 3, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,205, 54, 56, 62,235,249, 22, 62,213,135, 28, 62,236, 4,172, - 62,215,107,192, 62,240,227,138, 62,209,209,212, 62,245,234,246, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 28,112, 3, - 62,236,178,185, 63, 27,125,176, 62,241,145,149, 63, 27, 39, 42, 62,241, 1, 57, 63, 27,249,140, 62,236,186,115, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,216, 24,206, 62,240, 83, 46, 62,215,107,192, 62,240,227,138, 62,213,135, 28, 62,236, 4,172, - 62,214,116, 8, 62,236, 12,102, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 27,125,176, 62,241,145,149, 63, 25, 1,195, - 62,243,102,169, 63, 24,248, 6, 62,242, 91,185, 63, 27, 39, 42, 62,241, 1, 57, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,220,119, 22, 62,241,173,174, 62,220, 99,156, 62,242,184,154, 62,215,107,192, 62,240,227,138, 62,216, 24,206, 62,240, 83, 46, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 1,195, 62,243,102,169, 63, 22,202,215, 62,241,124,237, 63, 23, 38,157, - 62,240,173,225, 63, 24,248, 6, 62,242, 91,185, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,224, 25,234, 62,239,255,214, - 62,224,209,112, 62,240,206,226, 62,220, 99,156, 62,242,184,154, 62,220,119, 22, 62,241,173,174, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 22,202,215, 62,241,124,237, 63, 21,202, 11, 62,236,189, 1, 63, 22, 89, 13, 62,236,196,247, 63, 23, 38,157, - 62,240,173,225, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,225,181, 8, 62,236, 22,234, 62,226,211, 12, 62,236, 14,246, - 62,224,209,112, 62,240,206,226, 62,224, 25,234, 62,239,255,214, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 21,202, 11, - 62,236,189, 1, 63, 22,195, 22, 62,232, 90,195, 63, 23, 33, 88, 62,233, 47, 69, 63, 22, 89, 13, 62,236,196,247, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62,224, 36,112, 62,232,129, 58, 62,224,224,248, 62,231,172,182, 62,226,211, 12, 62,236, 14,246, - 62,225,181, 8, 62,236, 22,234, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 22,195, 22, 62,232, 90,195, 63, 24,252, 87, - 62,230,111, 93, 63, 24,243,100, 62,231,123, 5, 63, 23, 33, 88, 62,233, 47, 69, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,220,128, 90, 62,230,204,248, 62,220,110,118, 62,229,193, 78, 62,224,224,248, 62,231,172,182, 62,224, 36,112, 62,232,129, 58, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,252, 87, 62,230,111, 93, 63, 27,124,224, 62,232, 65,235, 63, 27, 37,169, - 62,232,211, 35, 63, 24,243,100, 62,231,123, 5, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,216, 27,206, 62,232, 37, 22, - 62,215,109,102, 62,231,147,222, 62,220,110,118, 62,229,193, 78, 62,220,128, 90, 62,230,204,248, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,240, 63, 27,124,224, 62,232, 65,235, 63, 28,112, 3, 62,236,178,185, 63, 27,249,140, 62,236,186,115, 63, 27, 37,169, - 62,232,211, 35, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,214,116, 8, 62,236, 12,102, 62,213,135, 28, 62,236, 4,172, - 62,215,109,102, 62,231,147,222, 62,216, 27,206, 62,232, 37, 22, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,242,138, - 62,236,194, 21, 63, 27, 37,169, 62,232,211, 35, 63, 27,249,140, 62,236,186,115, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,112, 62,214,116, 8, 62,236, 12,102, 62,216, 27,206, 62,232, 37, 22, 62,220,130, 16, 62,236, 20, 6, - 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,243,100, 62,231,123, 5, 63, 27, 37,169, - 62,232,211, 35, 63, 24,242,138, 62,236,194, 21, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, - 62,220,130, 16, 62,236, 20, 6, 62,216, 27,206, 62,232, 37, 22, 62,220,128, 90, 62,230,204,248, 63,128, 0, 0, 63,128, 0, 0, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 23, 33, 88, 62,233, 47, 69, 63, 24,243,100, - 62,231,123, 5, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 62,220,128, 90, 62,230,204,248, - 62,224, 36,112, 62,232,129, 58, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 22, 89, 13, 62,236,196,247, 63, 23, 33, 88, 62,233, 47, 69, 63,128, 0, 0, - 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 62,224, 36,112, 62,232,129, 58, 62,225,181, 8, 62,236, 22,234, - 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, - 62,236,194, 21, 63, 23, 38,157, 62,240,173,225, 63, 22, 89, 13, 62,236,196,247, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,112, 62,225,181, 8, 62,236, 22,234, 62,224, 25,234, 62,239,255,214, 62,220,130, 16, 62,236, 20, 6, - 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 24,248, 6, - 62,242, 91,185, 63, 23, 38,157, 62,240,173,225, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, - 62,224, 25,234, 62,239,255,214, 62,220,119, 22, 62,241,173,174, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, - 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 27, 39, 42, 62,241, 1, 57, 63, 24,248, 6, - 62,242, 91,185, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 62,220,119, 22, 62,241,173,174, - 62,216, 24,206, 62,240, 83, 46, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, - 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 27,249,140, 62,236,186,115, 63, 27, 39, 42, 62,241, 1, 57, 63,128, 0, 0, - 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 62,216, 24,206, 62,240, 83, 46, 62,214,116, 8, 62,236, 12,102, - 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 61, 0, 0, 5, 0, 0, 0,112, 63, 16,254,174, - 62, 34, 45, 94, 63, 13,190, 79, 62, 46,193,160, 63, 3,199,220, 62, 24,219, 89, 63, 3,199,219, 61,229, 28, 18, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 16, 63, 3,199,220, 62, 24,219, 89, 62,243,150, 14, 62, 47, 79,204, 62,236,248,140, 62, 34,202,182, - 63, 3,199,219, 61,229, 28, 18, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 21,152,184, 62, 53, 47,182, 63, 16,104,250, - 62, 55,113, 16, 63, 13,190, 79, 62, 46,193,160, 63, 16,254,174, 62, 34, 45, 94, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, - 62,243,150, 14, 62, 47, 79,204, 62,238, 68,200, 62, 56, 62, 76, 62,227,207,183, 62, 54, 75,250, 62,236,248,140, 62, 34,202,182, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 63, 22, 57,137, 62, 61, 93, 81, 63, 16,186,206, 62, 72,129, 85, 63, 16,104,250, - 62, 55,113, 16, 63, 21,152,184, 62, 53, 47,182, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,238, 68,200, 62, 56, 62, 76, - 62,237,187,192, 62, 73,118,194, 62,226,152,122, 62, 62,166,190, 62,227,207,183, 62, 54, 75,250, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 22,249,250, 62, 88,251,160, 63, 16, 32,222, 62, 93,106, 34, 63, 16,186,206, 62, 72,129, 85, 63, 22, 57,137, - 62, 61, 93, 81, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,237,187,192, 62, 73,118,194, 62,239, 19, 21, 62, 94,110,121, - 62,225, 83, 90, 62, 90,153, 21, 62,226,152,122, 62, 62,166,190, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20, - 62,132, 56, 17, 63, 15,243,206, 62,136,207,182, 63, 16, 32,222, 62, 93,106, 34, 63, 22,249,250, 62, 88,251,160, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,239, 19, 21, 62, 94,110,121, 62,239,193, 92, 62,137, 61,113, 62,221, 42, 54, 62,133, 25,209, - 62,225, 83, 90, 62, 90,153, 21, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 37, 94, 91, - 62,187,120,107, 63, 30, 21, 66, 62,200,139,178, 63, 12,237,158, 62,187,241, 38, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,211,125,139, 62,200,171,170, 62,197, 28,156, 62,187,130,166, 62,216, 21,115, 62,166,177, 14, 62,245,175, 15, 62,188, 14,188, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37, 94, 91, 62,187,120,107, 63, 43, 57, 87, 62,206, 58,222, 63, 39,163, 24, - 62,216, 95,174, 63, 30, 21, 66, 62,200,139,178, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,191,194, 98, 62,216, 94, 42, - 62,184,207,130, 62,206, 27, 42, 62,197, 28,156, 62,187,130,166, 62,211,125,139, 62,200,171,170, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 43, 57, 87, 62,206, 58,222, 63, 50,229, 38, 62,226, 32,169, 63, 43, 79,177, 62,231,194,202, 63, 39,163, 24, - 62,216, 95,174, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,183,201, 60, 62,231,218, 82, 62,168, 39,196, 62,226, 11,206, - 62,184,207,130, 62,206, 27, 42, 62,191,194, 98, 62,216, 94, 42, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 50,229, 38, - 62,226, 32,169, 63, 48,134, 62, 62,249,107, 37, 63, 43,190,154, 62,249, 0,192, 63, 43, 79,177, 62,231,194,202, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,182,190,138, 62,249, 49, 35, 62,172,229,172, 62,249,127,116, 62,168, 39,196, 62,226, 11,206, - 62,183,201, 60, 62,231,218, 82, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48,134, 62, 62,249,107, 37, 63, 46, 88,238, - 63, 2,223,146, 63, 40,207,123, 62,254,175,218, 63, 43,190,154, 62,249, 0,192, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,188,184, 2, 62,255, 0,140, 62,177, 87,173, 63, 3, 9,102, 62,172,229,172, 62,249,127,116, 62,182,190,138, 62,249, 49, 35, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 46, 88,238, 63, 2,223,146, 63, 34,158,220, 63, 10, 23,175, 63, 30, 77,126, - 63, 5, 88,156, 63, 40,207,123, 62,254,175,218, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,210, 65, 89, 63, 5,158, 56, - 62,201,109,124, 63, 10,121, 72, 62,177, 87,173, 63, 3, 9,102, 62,188,184, 2, 62,255, 0,140, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 34,158,220, 63, 10, 23,175, 63, 26,105, 28, 63, 11,194,242, 63, 25,120,244, 63, 7,242, 78, 63, 30, 77,126, - 63, 5, 88,156, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,220, 39, 0, 63, 8, 58,252, 62,218, 73,220, 63, 12, 31,169, - 62,201,109,124, 63, 10,121, 72, 62,210, 65, 89, 63, 5,158, 56, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,105, 28, - 63, 11,194,242, 63, 22,244,173, 63, 11,215,236, 63, 22, 47,202, 63, 8, 60,156, 63, 25,120,244, 63, 7,242, 78, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,226,221, 11, 63, 8,125, 90, 62,225, 89,220, 63, 12, 42, 77, 62,218, 73,220, 63, 12, 31,169, - 62,220, 39, 0, 63, 8, 58,252, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,244,173, 63, 11,215,236, 63, 11,169, 67, - 63, 11,197, 18, 63, 12,252,106, 63, 3,173,180, 63, 22, 47,202, 63, 8, 60,156, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,245,114, 35, 63, 3,196,233, 62,248, 72, 55, 63, 11,232, 91, 62,225, 89,220, 63, 12, 42, 77, 62,226,221, 11, 63, 8,125, 90, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 11,169, 67, 63, 11,197, 18, 63, 3,232,148, 63, 11, 17,164, 63, 3,220,162, - 63, 0, 88, 45, 63, 12,252,106, 63, 3,173,180, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,220,162, 63, 0, 88, 45, - 63, 3,232,148, 63, 11, 17,164, 62,248, 72, 55, 63, 11,232, 91, 62,245,114, 35, 63, 3,196,233, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 22, 81,240, 63, 1, 70,114, 63, 22, 47,202, 63, 8, 60,156, 63, 12,252,106, - 63, 3,173,180, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,226,221, 11, 63, 8,125, 90, 62,226,128,106, 63, 1,111,198, - 62,236,213,209, 62,255,250, 4, 62,245,114, 35, 63, 3,196,233, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22, 81,240, - 63, 1, 70,114, 63, 25,182,151, 63, 1, 9,130, 63, 25,120,244, 63, 7,242, 78, 63, 22, 47,202, 63, 8, 60,156, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,220, 39, 0, 63, 8, 58,252, 62,219,150,213, 63, 1, 55, 50, 62,226,128,106, 63, 1,111,198, - 62,226,221, 11, 63, 8,125, 90, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 30, 49, 96, 62,254,229,121, 63, 30, 77,126, - 63, 5, 88,156, 63, 25,120,244, 63, 7,242, 78, 63, 25,182,151, 63, 1, 9,130, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,220, 39, 0, 63, 8, 58,252, 62,210, 65, 89, 63, 5,158, 56, 62,210,116,176, 62,255, 62,227, 62,219,150,213, 63, 1, 55, 50, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37,113, 25, 62,247,157, 35, 63, 40,207,123, 62,254,175,218, 63, 30, 77,126, - 63, 5, 88,156, 63, 30, 49, 96, 62,254,229,121, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,210, 65, 89, 63, 5,158, 56, - 62,188,184, 2, 62,255, 0,140, 62,195,165,189, 62,247,232,139, 62,210,116,176, 62,255, 62,227, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 39, 62, 92, 62,240, 75,121, 63, 43,190,154, 62,249, 0,192, 63, 40,207,123, 62,254,175,218, 63, 37,113, 25, - 62,247,157, 35, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,184, 2, 62,255, 0,140, 62,182,190,138, 62,249, 49, 35, - 62,192, 10,222, 62,240,128,163, 62,195,165,189, 62,247,232,139, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 38,149,140, - 62,229, 95, 38, 63, 43, 79,177, 62,231,194,202, 63, 43,190,154, 62,249, 0,192, 63, 39, 62, 92, 62,240, 75,121, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,182,190,138, 62,249, 49, 35, 62,183,201, 60, 62,231,218, 82, 62,193,140,168, 62,229,129, 94, - 62,192, 10,222, 62,240,128,163, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 33,120, 14, 62,214,238,166, 63, 39,163, 24, - 62,216, 95,174, 63, 43, 79,177, 62,231,194,202, 63, 38,149,140, 62,229, 95, 38, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,183,201, 60, 62,231,218, 82, 62,191,194, 98, 62,216, 94, 42, 62,204, 75,168, 62,215, 7, 62, 62,193,140,168, 62,229,129, 94, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,178,165, 62,208, 17,128, 63, 30, 21, 66, 62,200,139,178, 63, 39,163, 24, - 62,216, 95,174, 63, 33,120, 14, 62,214,238,166, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,191,194, 98, 62,216, 94, 42, - 62,211,125,139, 62,200,171,170, 62,216, 24, 6, 62,208, 57,128, 62,204, 75,168, 62,215, 7, 62, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 17, 97, 15, 62,214, 34,220, 63, 12,237,158, 62,187,241, 38, 63, 30, 21, 66, 62,200,139,178, 63, 27,178,165, - 62,208, 17,128, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,211,125,139, 62,200,171,170, 62,245,175, 15, 62,188, 14,188, - 62,236,200,217, 62,214, 49,134, 62,216, 24, 6, 62,208, 57,128, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 97, 15, - 62,214, 34,220, 63, 14,244,149, 62,221, 42, 4, 63, 3,230,147, 62,208, 47, 78, 63, 12,237,158, 62,187,241, 38, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,230,147, 62,208, 47, 78, 62,241,144,141, 62,221, 52,244, 62,236,200,217, 62,214, 49,134, - 62,245,175, 15, 62,188, 14,188, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 12,252,106, - 63, 3,173,180, 63, 3,220,162, 63, 0, 88, 45, 63, 13, 25, 71, 62,243,163,116, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 63, 3,220,162, 63, 0, 88, 45, 62,245,114, 35, 63, 3,196,233, 62,236,213,209, 62,255,250, 4, 62,245, 45, 0, 62,243,185,206, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 25, 71, 62,243,163,116, 63, 3,220,162, 63, 0, 88, 45, 63, 3,220,215, - 62,231,189,148, 63, 13, 2, 64, 62,230,215, 52, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,220,215, 62,231,189,148, - 63, 3,220,162, 63, 0, 88, 45, 62,245, 45, 0, 62,243,185,206, 62,245,100,219, 62,230,230,184, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,230,147, 62,208, 47, 78, 63, 14,244,149, 62,221, 42, 4, 63, 13, 2, 64, 62,230,215, 52, 63, 3,220,215, - 62,231,189,148, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,245,100,219, 62,230,230,184, 62,241,144,141, 62,221, 52,244, - 63, 3,230,147, 62,208, 47, 78, 63, 3,220,215, 62,231,189,148, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 7, 61,250, - 62, 54, 31,148, 63, 3,202,193, 62, 49,174,214, 63, 3,199,220, 62, 24,219, 89, 63, 13,190, 79, 62, 46,193,160, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,199,220, 62, 24,219, 89, 63, 3,202,193, 62, 49,174,214, 63, 0, 87,175, 62, 54, 90,251, - 62,243,150, 14, 62, 47, 79,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,214, 68, 62, 66,237,246, 63, 7, 61,250, - 62, 54, 31,148, 63, 13,190, 79, 62, 46,193,160, 63, 16,104,250, 62, 55,113, 16, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,243,150, 14, 62, 47, 79,204, 63, 0, 87,175, 62, 54, 90,251, 62,251,137,104, 62, 67, 92,179, 62,238, 68,200, 62, 56, 62, 76, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,221,237, 62, 91, 90,218, 63, 9,214, 68, 62, 66,237,246, 63, 16,104,250, - 62, 55,113, 16, 63, 16,186,206, 62, 72,129, 85, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,238, 68,200, 62, 56, 62, 76, - 62,251,137,104, 62, 67, 92,179, 62,253,153, 39, 62, 91,195, 27, 62,237,187,192, 62, 73,118,194, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 15,243,206, 62,136,207,182, 63, 8, 32, 77, 62,139, 39, 10, 63, 9,117, 22, 62, 97,203,146, 63, 16, 32,222, - 62, 93,106, 34, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,252,110,192, 62, 98, 68, 79, 62,255, 89,219, 62,139, 79,116, - 62,239,193, 92, 62,137, 61,113, 62,239, 19, 21, 62, 94,110,121, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,221,237, - 62, 91, 90,218, 63, 16,186,206, 62, 72,129, 85, 63, 16, 32,222, 62, 93,106, 34, 63, 9,117, 22, 62, 97,203,146, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,239, 19, 21, 62, 94,110,121, 62,237,187,192, 62, 73,118,194, 62,253,153, 39, 62, 91,195, 27, - 62,252,110,192, 62, 98, 68, 79, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,125,119, 62,158,112, 7, 63, 3,233, 70, - 62,154, 27, 88, 63, 3,229,235, 62,139,108, 97, 63, 8, 32, 77, 62,139, 39, 10, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 63, 3,229,235, 62,139,108, 97, 63, 3,233, 70, 62,154, 27, 88, 62,252,179,165, 62,158,140,163, 62,255, 89,219, 62,139, 79,116, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,117, 22, 62, 97,203,146, 63, 8, 32, 77, 62,139, 39, 10, 63, 3,229,235, - 62,139,108, 97, 63, 3,215,246, 62,101, 56,143, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,229,235, 62,139,108, 97, - 62,255, 89,219, 62,139, 79,116, 62,252,110,192, 62, 98, 68, 79, 63, 3,215,246, 62,101, 56,143, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,210,147, 62, 86, 95,221, 63, 8,221,237, 62, 91, 90,218, 63, 9,117, 22, 62, 97,203,146, 63, 3,215,246, - 62,101, 56,143, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,252,110,192, 62, 98, 68, 79, 62,253,153, 39, 62, 91,195, 27, - 63, 3,210,147, 62, 86, 95,221, 63, 3,215,246, 62,101, 56,143, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 12, 54, 5, - 62,167,183,188, 63, 9, 61,250, 62,168,214,252, 63, 8,143,152, 62,163,107, 45, 63, 9,125,119, 62,158,112, 7, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,254,136,100, 62,163,123, 38, 62,253, 39,110, 62,168,224,103, 62,247, 68, 98, 62,167,206,146, - 62,252,179,165, 62,158,140,163, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 10,196,135, 62,178,208, 52, 63, 8,233, 25, - 62,175,110,116, 63, 9, 61,250, 62,168,214,252, 63, 12, 54, 5, 62,167,183,188, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,253, 39,110, 62,168,224,103, 62,253,195,102, 62,175,102,184, 62,250, 14, 98, 62,178,202,149, 62,247, 68, 98, 62,167,206,146, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 4, 17, 69, 62,182,176,105, 63, 6,138, 69, 62,177,180, 80, 63, 8,233, 25, - 62,175,110,116, 63, 10,196,135, 62,178,208, 52, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,253,195,102, 62,175,102,184, - 63, 1, 49, 14, 62,177,150, 62, 63, 4, 17, 69, 62,182,176,105, 62,250, 14, 98, 62,178,202,149, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,124,209, 62,177, 0, 70, 63, 3,232, 11, 62,174, 4,140, 63, 6,138, 69, 62,177,180, 80, 63, 4, 17, 69, - 62,182,176,105, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 49, 14, 62,177,150, 62, 63, 3,232, 11, 62,174, 4,140, - 63, 3,124,209, 62,177, 0, 70, 63, 4, 17, 69, 62,182,176,105, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,233, 70, - 62,154, 27, 88, 63, 9,125,119, 62,158,112, 7, 63, 8,143,152, 62,163,107, 45, 63, 3,232,212, 62,158,152, 58, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,254,136,100, 62,163,123, 38, 62,252,179,165, 62,158,140,163, 63, 3,233, 70, 62,154, 27, 88, - 63, 3,232,212, 62,158,152, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,232,212, 62,158,152, 58, 63, 8,143,152, - 62,163,107, 45, 63, 7, 91,121, 62,166, 51,134, 63, 3,231,205, 62,162,149, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 63, 0,116, 44, 62,166, 56,255, 62,254,136,100, 62,163,123, 38, 63, 3,232,212, 62,158,152, 58, 63, 3,231,205, 62,162,149, 58, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,232, 11, 62,174, 4,140, 63, 3,233,214, 62,170,154,198, 63, 6,110,233, - 62,174,152, 94, 63, 6,138, 69, 62,177,180, 80, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 82,228, 62,174,140, 95, - 63, 3,233,214, 62,170,154,198, 63, 3,232, 11, 62,174, 4,140, 63, 1, 49, 14, 62,177,150, 62, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 6,138, 69, 62,177,180, 80, 63, 6,110,233, 62,174,152, 94, 63, 7,236, 59, 62,173,123, 19, 63, 8,233, 25, - 62,175,110,116, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,255,185,217, 62,173,116, 92, 63, 1, 82,228, 62,174,140, 95, - 63, 1, 49, 14, 62,177,150, 62, 62,253,195,102, 62,175,102,184, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,233, 25, - 62,175,110,116, 63, 7,236, 59, 62,173,123, 19, 63, 7,249, 85, 62,169, 52, 92, 63, 9, 61,250, 62,168,214,252, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,255,169,160, 62,169, 57, 6, 62,255,185,217, 62,173,116, 92, 62,253,195,102, 62,175,102,184, - 62,253, 39,110, 62,168,224,103, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9, 61,250, 62,168,214,252, 63, 7,249, 85, - 62,169, 52, 92, 63, 7, 91,121, 62,166, 51,134, 63, 8,143,152, 62,163,107, 45, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 63, 0,116, 44, 62,166, 56,255, 62,255,169,160, 62,169, 57, 6, 62,253, 39,110, 62,168,224,103, 62,254,136,100, 62,163,123, 38, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,233,214, 62,170,154,198, 63, 7,249, 85, 62,169, 52, 92, 63, 7,236, 59, - 62,173,123, 19, 63, 6,110,233, 62,174,152, 94, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,255,185,217, 62,173,116, 92, - 62,255,169,160, 62,169, 57, 6, 63, 3,233,214, 62,170,154,198, 63, 1, 82,228, 62,174,140, 95, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,233,214, 62,170,154,198, 63, 3,231,205, 62,162,149, 58, 63, 7, 91,121, 62,166, 51,134, 63, 7,249, 85, - 62,169, 52, 92, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 0,116, 44, 62,166, 56,255, 63, 3,231,205, 62,162,149, 58, - 63, 3,233,214, 62,170,154,198, 62,255,169,160, 62,169, 57, 6, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 4, 17, 69, - 62,182,176,105, 63, 10,196,135, 62,178,208, 52, 63, 12,237,158, 62,187,241, 38, 63, 3,230,147, 62,208, 47, 78, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,245,175, 15, 62,188, 14,188, 62,250, 14, 98, 62,178,202,149, 63, 4, 17, 69, 62,182,176,105, - 63, 3,230,147, 62,208, 47, 78, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 10,196,135, 62,178,208, 52, 63, 12, 54, 5, - 62,167,183,188, 63, 16, 0,112, 62,164,246,254, 63, 12,237,158, 62,187,241, 38, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,239,187,207, 62,165, 42, 19, 62,247, 68, 98, 62,167,206,146, 62,250, 14, 98, 62,178,202,149, 62,245,175, 15, 62,188, 14,188, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 12, 54, 5, 62,167,183,188, 63, 9,125,119, 62,158,112, 7, 63, 15,250, 44, - 62,154, 0,109, 63, 16, 0,112, 62,164,246,254, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,205, 56, 62,154, 71, 8, - 62,252,179,165, 62,158,140,163, 62,247, 68, 98, 62,167,206,146, 62,239,187,207, 62,165, 42, 19, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 9,125,119, 62,158,112, 7, 63, 8, 32, 77, 62,139, 39, 10, 63, 15,243,206, 62,136,207,182, 63, 15,250, 44, - 62,154, 0,109, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,193, 92, 62,137, 61,113, 62,255, 89,219, 62,139, 79,116, - 62,252,179,165, 62,158,140,163, 62,239,205, 56, 62,154, 71, 8, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20, - 62,132, 56, 17, 63, 27, 46,208, 62,148, 35,149, 63, 15,250, 44, 62,154, 0,109, 63, 15,243,206, 62,136,207,182, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,239,205, 56, 62,154, 71, 8, 62,217,166,238, 62,148,221,229, 62,221, 42, 54, 62,133, 25,209, - 62,239,193, 92, 62,137, 61,113, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27, 46,208, 62,148, 35,149, 63, 27,177, 36, - 62,156,151,158, 63, 16, 0,112, 62,164,246,254, 63, 15,250, 44, 62,154, 0,109, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,239,187,207, 62,165, 42, 19, 62,216,160, 0, 62,157, 44,127, 62,217,166,238, 62,148,221,229, 62,239,205, 56, 62,154, 71, 8, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 12,237,158, 62,187,241, 38, 63, 16, 0,112, - 62,164,246,254, 63, 27,177, 36, 62,156,151,158, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,187,207, 62,165, 42, 19, - 62,245,175, 15, 62,188, 14,188, 62,216, 21,115, 62,166,177, 14, 62,216,160, 0, 62,157, 44,127, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 8,221,237, 62, 91, 90,218, 63, 3,210,147, 62, 86, 95,221, 63, 3,211,129, 62, 83,168,248, 63, 8, 33,170, - 62, 86,149,254, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,211,129, 62, 83,168,248, 63, 3,210,147, 62, 86, 95,221, - 62,253,153, 39, 62, 91,195, 27, 62,255, 14, 8, 62, 86,232, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,214, 68, - 62, 66,237,246, 63, 8,221,237, 62, 91, 90,218, 63, 8, 33,170, 62, 86,149,254, 63, 8,180, 20, 62, 69, 29, 94, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,255, 14, 8, 62, 86,232, 58, 62,253,153, 39, 62, 91,195, 27, 62,251,137,104, 62, 67, 92,179, - 62,253,210, 19, 62, 69,114, 55, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 7, 61,250, 62, 54, 31,148, 63, 9,214, 68, - 62, 66,237,246, 63, 8,180, 20, 62, 69, 29, 94, 63, 6, 82,168, 62, 57, 43, 80, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,253,210, 19, 62, 69,114, 55, 62,251,137,104, 62, 67, 92,179, 63, 0, 87,175, 62, 54, 90,251, 63, 1, 68, 48, 62, 57, 84,166, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,202,193, 62, 49,174,214, 63, 7, 61,250, 62, 54, 31,148, 63, 6, 82,168, - 62, 57, 43, 80, 63, 3,202,205, 62, 54, 22, 8, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 68, 48, 62, 57, 84,166, - 63, 0, 87,175, 62, 54, 90,251, 63, 3,202,193, 62, 49,174,214, 63, 3,202,205, 62, 54, 22, 8, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,202,205, 62, 54, 22, 8, 63, 6, 82,168, 62, 57, 43, 80, 63, 5, 24,246, 62, 66,150, 26, 63, 3,205,213, - 62, 64,232,220, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 2,131, 29, 62, 66,172, 22, 63, 1, 68, 48, 62, 57, 84,166, - 63, 3,202,205, 62, 54, 22, 8, 63, 3,205,213, 62, 64,232,220, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 6, 82,168, - 62, 57, 43, 80, 63, 8,180, 20, 62, 69, 29, 94, 63, 6, 83, 39, 62, 70,114,191, 63, 5, 24,246, 62, 66,150, 26, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 75,185, 62, 70,160,222, 62,253,210, 19, 62, 69,114, 55, 63, 1, 68, 48, 62, 57, 84,166, - 63, 2,131, 29, 62, 66,172, 22, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,180, 20, 62, 69, 29, 94, 63, 8, 33,170, - 62, 86,149,254, 63, 6,111, 4, 62, 76,172, 40, 63, 6, 83, 39, 62, 70,114,191, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 63, 1, 51,157, 62, 76,218,158, 62,255, 14, 8, 62, 86,232, 58, 62,253,210, 19, 62, 69,114, 55, 63, 1, 75,185, 62, 70,160,222, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8, 33,170, 62, 86,149,254, 63, 3,211,129, 62, 83,168,248, 63, 3,208,234, - 62, 75, 43,146, 63, 6,111, 4, 62, 76,172, 40, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,208,234, 62, 75, 43,146, - 63, 3,211,129, 62, 83,168,248, 62,255, 14, 8, 62, 86,232, 58, 63, 1, 51,157, 62, 76,218,158, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,208,234, 62, 75, 43,146, 63, 3,205,213, 62, 64,232,220, 63, 5, 24,246, 62, 66,150, 26, 63, 6,111, 4, - 62, 76,172, 40, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 2,131, 29, 62, 66,172, 22, 63, 3,205,213, 62, 64,232,220, - 63, 3,208,234, 62, 75, 43,146, 63, 1, 51,157, 62, 76,218,158, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 6,111, 4, - 62, 76,172, 40, 63, 5, 24,246, 62, 66,150, 26, 63, 6, 83, 39, 62, 70,114,191, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 75,185, 62, 70,160,222, 63, 2,131, 29, 62, 66,172, 22, 63, 1, 51,157, 62, 76,218,158, - 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 2, 64, 62,230,215, 52, 63, 14,244,149, - 62,221, 42, 4, 63, 16,216, 4, 62,224, 24,160, 63, 15,200,120, 62,231,255, 84, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,237,193,119, 62,224, 38,190, 62,241,144,141, 62,221, 52,244, 62,245,100,219, 62,230,230,184, 62,239,211, 21, 62,232, 18,185, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 25, 71, 62,243,163,116, 63, 13, 2, 64, 62,230,215, 52, 63, 15,200,120, - 62,231,255, 84, 63, 16,171,184, 62,241,133, 40, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,211, 21, 62,232, 18,185, - 62,245,100,219, 62,230,230,184, 62,245, 45, 0, 62,243,185,206, 62,237,252,218, 62,241,160, 62, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 13, 25, 71, 62,243,163,116, 63, 16,171,184, 62,241,133, 40, 63, 19, 44, 55, - 62,250, 21, 86, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,237,252,218, 62,241,160, 62, 62,245, 45, 0, 62,243,185,206, - 62,236,213,209, 62,255,250, 4, 62,232,228,153, 62,250, 67,154, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 14,244,149, - 62,221, 42, 4, 63, 17, 97, 15, 62,214, 34,220, 63, 19, 53,217, 62,218,211, 16, 63, 16,216, 4, 62,224, 24,160, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,233, 14, 8, 62,218,226, 66, 62,236,200,217, 62,214, 49,134, 62,241,144,141, 62,221, 52,244, - 62,237,193,119, 62,224, 38,190, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 97, 15, 62,214, 34,220, 63, 27,178,165, - 62,208, 17,128, 63, 26,198,205, 62,214,184,124, 63, 19, 53,217, 62,218,211, 16, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,217,214,216, 62,214,224,218, 62,216, 24, 6, 62,208, 57,128, 62,236,200,217, 62,214, 49,134, 62,233, 14, 8, 62,218,226, 66, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,178,165, 62,208, 17,128, 63, 33,120, 14, 62,214,238,166, 63, 31,136,156, - 62,219,138,194, 63, 26,198,205, 62,214,184,124, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,208, 30,254, 62,219,177,204, - 62,204, 75,168, 62,215, 7, 62, 62,216, 24, 6, 62,208, 57,128, 62,217,214,216, 62,214,224,218, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 33,120, 14, 62,214,238,166, 63, 38,149,140, 62,229, 95, 38, 63, 36, 9, 79, 62,229,224, 94, 63, 31,136,156, - 62,219,138,194, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,198,192,148, 62,230, 11,182, 62,193,140,168, 62,229,129, 94, - 62,204, 75,168, 62,215, 7, 62, 62,208, 30,254, 62,219,177,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 38,149,140, - 62,229, 95, 38, 63, 39, 62, 92, 62,240, 75,121, 63, 36, 49, 14, 62,239, 88,253, 63, 36, 9, 79, 62,229,224, 94, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,198, 71, 97, 62,239,149,192, 62,192, 10,222, 62,240,128,163, 62,193,140,168, 62,229,129, 94, - 62,198,192,148, 62,230, 11,182, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 39, 62, 92, 62,240, 75,121, 63, 37,113, 25, - 62,247,157, 35, 63, 35, 33,243, 62,245,143, 80, 63, 36, 49, 14, 62,239, 88,253, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,200, 99, 87, 62,245,217,172, 62,195,165,189, 62,247,232,139, 62,192, 10,222, 62,240,128,163, 62,198, 71, 97, 62,239,149,192, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37,113, 25, 62,247,157, 35, 63, 30, 49, 96, 62,254,229,121, 63, 29, 49,223, - 62,250,140,199, 63, 35, 33,243, 62,245,143, 80, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,212,124,147, 62,250,215,146, - 62,210,116,176, 62,255, 62,227, 62,195,165,189, 62,247,232,139, 62,200, 99, 87, 62,245,217,172, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 30, 49, 96, 62,254,229,121, 63, 25,182,151, 63, 1, 9,130, 63, 25,181, 50, 62,253,111,118, 63, 29, 49,223, - 62,250,140,199, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,219,151, 52, 62,253,186, 68, 62,219,150,213, 63, 1, 55, 50, - 62,210,116,176, 62,255, 62,227, 62,212,124,147, 62,250,215,146, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25,182,151, - 63, 1, 9,130, 63, 22, 81,240, 63, 1, 70,114, 63, 22,188,241, 62,253,149, 28, 63, 25,181, 50, 62,253,111,118, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,225,163,212, 62,253,215, 91, 62,226,128,106, 63, 1,111,198, 62,219,150,213, 63, 1, 55, 50, - 62,219,151, 52, 62,253,186, 68, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22, 81,240, 63, 1, 70,114, 63, 17, 59,103, - 62,255,195,120, 63, 19, 44, 55, 62,250, 21, 86, 63, 22,188,241, 62,253,149, 28, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,232,228,153, 62,250, 67,154, 62,236,213,209, 62,255,250, 4, 62,226,128,106, 63, 1,111,198, 62,225,163,212, 62,253,215, 91, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,188,241, 62,253,149, 28, 63, 19, 44, 55, 62,250, 21, 86, 63, 20,165, 9, - 62,247, 99,248, 63, 23, 0, 20, 62,251, 57, 6, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,229,232,232, 62,247,142, 74, - 62,232,228,153, 62,250, 67,154, 62,225,163,212, 62,253,215, 91, 62,225, 26,145, 62,251,116,114, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 25,181, 50, 62,253,111,118, 63, 22,188,241, 62,253,149, 28, 63, 23, 0, 20, 62,251, 57, 6, 63, 25,144,130, - 62,251, 7,128, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,225, 26,145, 62,251,116,114, 62,225,163,212, 62,253,215, 91, - 62,219,151, 52, 62,253,186, 68, 62,219,225,177, 62,251, 75, 67, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 29, 49,223, - 62,250,140,199, 63, 25,181, 50, 62,253,111,118, 63, 25,144,130, 62,251, 7,128, 63, 28,195, 80, 62,248,166, 55, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,219,225,177, 62,251, 75, 67, 62,219,151, 52, 62,253,186, 68, 62,212,124,147, 62,250,215,146, - 62,213, 95,233, 62,248,237, 20, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 35, 33,243, 62,245,143, 80, 63, 29, 49,223, - 62,250,140,199, 63, 28,195, 80, 62,248,166, 55, 63, 33,164, 22, 62,243, 75,102, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,213, 95,233, 62,248,237, 20, 62,212,124,147, 62,250,215,146, 62,200, 99, 87, 62,245,217,172, 62,203,114, 65, 62,243,143,159, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 36, 49, 14, 62,239, 88,253, 63, 35, 33,243, 62,245,143, 80, 63, 33,164, 22, - 62,243, 75,102, 63, 34,160, 30, 62,238, 47,169, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,203,114, 65, 62,243,143,159, - 62,200, 99, 87, 62,245,217,172, 62,198, 71, 97, 62,239,149,192, 62,201,128,188, 62,238,110,126, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 36, 9, 79, 62,229,224, 94, 63, 36, 49, 14, 62,239, 88,253, 63, 34,160, 30, 62,238, 47,169, 63, 34,144,131, - 62,231, 87,253, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,201,128,188, 62,238,110,126, 62,198, 71, 97, 62,239,149,192, - 62,198,192,148, 62,230, 11,182, 62,201,190,141, 62,231,140,124, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 31,136,156, - 62,219,138,194, 63, 36, 9, 79, 62,229,224, 94, 63, 34,144,131, 62,231, 87,253, 63, 30,208, 21, 62,221,182,174, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,201,190,141, 62,231,140,124, 62,198,192,148, 62,230, 11,182, 62,208, 30,254, 62,219,177,204, - 62,209,133,168, 62,221,221, 51, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,198,205, 62,214,184,124, 63, 31,136,156, - 62,219,138,194, 63, 30,208, 21, 62,221,182,174, 63, 26,218,128, 62,217,206, 68, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,209,133,168, 62,221,221, 51, 62,208, 30,254, 62,219,177,204, 62,217,214,216, 62,214,224,218, 62,217,157, 11, 62,217,243, 64, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 19, 53,217, 62,218,211, 16, 63, 26,198,205, 62,214,184,124, 63, 26,218,128, - 62,217,206, 68, 63, 20, 53,103, 62,221, 84,236, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,217,157, 11, 62,217,243, 64, - 62,217,214,216, 62,214,224,218, 62,233, 14, 8, 62,218,226, 66, 62,231, 5, 68, 62,221,101,234, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 16,216, 4, 62,224, 24,160, 63, 19, 53,217, 62,218,211, 16, 63, 20, 53,103, 62,221, 84,236, 63, 18, 87, 81, - 62,226,175, 33, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,231, 5, 68, 62,221,101,234, 62,233, 14, 8, 62,218,226, 66, - 62,237,193,119, 62,224, 38,190, 62,234,187,180, 62,226,190,249, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 19, 44, 55, - 62,250, 21, 86, 63, 16,171,184, 62,241,133, 40, 63, 18, 68, 98, 62,240,197,150, 63, 20,165, 9, 62,247, 99,248, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,234,197, 35, 62,240,226,215, 62,237,252,218, 62,241,160, 62, 62,232,228,153, 62,250, 67,154, - 62,229,232,232, 62,247,142, 74, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 16,171,184, 62,241,133, 40, 63, 15,200,120, - 62,231,255, 84, 63, 18, 4,161, 62,232,184,138, 63, 18, 68, 98, 62,240,197,150, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,235, 85,154, 62,232,206, 92, 62,239,211, 21, 62,232, 18,185, 62,237,252,218, 62,241,160, 62, 62,234,197, 35, 62,240,226,215, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 15,200,120, 62,231,255, 84, 63, 16,216, 4, 62,224, 24,160, 63, 18, 87, 81, - 62,226,175, 33, 63, 18, 4,161, 62,232,184,138, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,234,187,180, 62,226,190,249, - 62,237,193,119, 62,224, 38,190, 62,239,211, 21, 62,232, 18,185, 62,235, 85,154, 62,232,206, 92, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 3,232,148, 63, 11, 17,164, 63, 11,169, 67, 63, 11,197, 18, 63, 13,120,216, 63, 23, 81,160, 63, 4, 15,147, - 63, 23,248,227, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 27, 64, 63, 23,166,100, 62,248, 72, 55, 63, 11,232, 91, - 63, 3,232,148, 63, 11, 17,164, 63, 4, 15,147, 63, 23,248,227, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 11,169, 67, - 63, 11,197, 18, 63, 22,244,173, 63, 11,215,236, 63, 23,233, 94, 63, 16, 60,186, 63, 13,120,216, 63, 23, 81,160, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,223,130,109, 63, 16,165,118, 62,225, 89,220, 63, 12, 42, 77, 62,248, 72, 55, 63, 11,232, 91, - 62,245, 27, 64, 63, 23,166,100, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,244,173, 63, 11,215,236, 63, 26,105, 28, - 63, 11,194,242, 63, 28, 56,220, 63, 14,250, 66, 63, 23,233, 94, 63, 16, 60,186, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,214,161,157, 63, 15,110,219, 62,218, 73,220, 63, 12, 31,169, 62,225, 89,220, 63, 12, 42, 77, 62,223,130,109, 63, 16,165,118, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,105, 28, 63, 11,194,242, 63, 34,158,220, 63, 10, 23,175, 63, 39, 44,109, - 63, 19,221,107, 63, 28, 56,220, 63, 14,250, 66, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,192, 26,156, 63, 20,139, 31, - 62,201,109,124, 63, 10,121, 72, 62,218, 73,220, 63, 12, 31,169, 62,214,161,157, 63, 15,110,219, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 34,158,220, 63, 10, 23,175, 63, 46, 88,238, 63, 2,223,146, 63, 56, 80,242, 63, 6,244, 44, 63, 39, 44,109, - 63, 19,221,107, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 62,156,208, 61, 63, 7, 16,204, 62,177, 87,173, 63, 3, 9,102, - 62,201,109,124, 63, 10,121, 72, 62,192, 26,156, 63, 20,139, 31, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 63, 46, 88,238, - 63, 2,223,146, 63, 48,134, 62, 62,249,107, 37, 63, 54,173,195, 62,252,106,239, 63, 56, 80,242, 63, 6,244, 44, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,128, 62,160, 36,202, 62,252, 51, 94, 62,172,229,172, 62,249,127,116, 62,177, 87,173, 63, 3, 9,102, - 62,156,208, 61, 63, 7, 16,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 63, 48,134, 62, 62,249,107, 37, 63, 50,229, 38, - 62,226, 32,169, 63, 53, 88,154, 62,221,146,240, 63, 54,173,195, 62,252,106,239, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, - 62,162,172,128, 62,221,169, 17, 62,168, 39,196, 62,226, 11,206, 62,172,229,172, 62,249,127,116, 62,160, 36,202, 62,252, 51, 94, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 63, 50,229, 38, 62,226, 32,169, 63, 43, 57, 87, 62,206, 58,222, 63, 49,117,240, - 62,198,138,164, 63, 53, 88,154, 62,221,146,240, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 62,172,137,147, 62,198, 19,148, - 62,184,207,130, 62,206, 27, 42, 62,168, 39,196, 62,226, 11,206, 62,162,172,128, 62,221,169, 17, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0,128, 63, 43, 57, 87, 62,206, 58,222, 63, 37, 94, 91, 62,187,120,107, 63, 41,160,156, 62,182,175, 56, 63, 49,117,240, - 62,198,138,164, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,212,202, 62,182,163,245, 62,197, 28,156, 62,187,130,166, - 62,184,207,130, 62,206, 27, 42, 62,172,137,147, 62,198, 19,148, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48,252,165, - 62, 85, 33,133, 63, 48, 54,112, 62, 96, 19, 20, 63, 46, 36,172, 62,129, 7,208, 63, 42, 17,240, 62, 97, 84,129, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,181, 71, 76, 62,131,200,204, 62,175,121,117, 62,106,185,183, 62,172, 24,217, 62, 92,237, 21, - 62,187, 81,138, 62,103, 40, 59, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48, 89,204, 62, 4,194,134, 63, 48,252,165, - 62, 85, 33,133, 63, 42, 17,240, 62, 97, 84,129, 63, 37,125,160, 62, 46,211, 50, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, - 62,187, 81,138, 62,103, 40, 59, 62,172, 24,217, 62, 92,237, 21, 62,172,197, 94, 62, 4,200,109, 62,195,121, 25, 62, 48,253, 46, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 20, 44, 11, 61,163, 26, 20, 63, 48, 89,204, 62, 4,194,134, 63, 37,125,160, - 62, 46,211, 50, 63, 24, 92, 40, 62, 21,184,214, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 62,195,121, 25, 62, 48,253, 46, - 62,172,197, 94, 62, 4,200,109, 62,230,122,140, 61,161,248,202, 62,222, 13,216, 62, 22,116,222, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 32, 63, 16,254,174, 62, 34, 45, 94, 63, 3,199,219, 61,229, 28, 18, 63, 20, 44, 11, 61,163, 26, 20, 63, 24, 92, 40, - 62, 21,184,214, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 62,230,122,140, 61,161,248,202, 63, 3,199,219, 61,229, 28, 18, - 62,236,248,140, 62, 34,202,182, 62,222, 13,216, 62, 22,116,222, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 21,152,184, - 62, 53, 47,182, 63, 16,254,174, 62, 34, 45, 94, 63, 24, 92, 40, 62, 21,184,214, 63, 25, 52,209, 62, 51,140, 76, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 32, 62,222, 13,216, 62, 22,116,222, 62,236,248,140, 62, 34,202,182, 62,227,207,183, 62, 54, 75,250, - 62,220,137,229, 62, 52,228,185, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 63, 22, 57,137, 62, 61, 93, 81, 63, 21,152,184, - 62, 53, 47,182, 63, 25, 52,209, 62, 51,140, 76, 63, 30,166,193, 62, 73,168,114, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,220,137,229, 62, 52,228,185, 62,227,207,183, 62, 54, 75,250, 62,226,152,122, 62, 62,166,190, 62,209,198, 54, 62, 75,240, 18, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,249,250, 62, 88,251,160, 63, 22, 57,137, 62, 61, 93, 81, 63, 30,166,193, - 62, 73,168,114, 63, 36, 0, 75, 62,116, 47,229, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,209,198, 54, 62, 75,240, 18, - 62,226,152,122, 62, 62,166,190, 62,225, 83, 90, 62, 90,153, 21, 62,199,231,211, 62,119,237,216, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 30,166,193, 62, 73,168,114, 63, 37,125,160, 62, 46,211, 50, 63, 42, 17,240, 62, 97, 84,129, 63, 36, 0, 75, - 62,116, 47,229, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,187, 81,138, 62,103, 40, 59, 62,195,121, 25, 62, 48,253, 46, - 62,209,198, 54, 62, 75,240, 18, 62,199,231,211, 62,119,237,216, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 30,166,193, - 62, 73,168,114, 63, 25, 52,209, 62, 51,140, 76, 63, 24, 92, 40, 62, 21,184,214, 63, 37,125,160, 62, 46,211, 50, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,222, 13,216, 62, 22,116,222, 62,220,137,229, 62, 52,228,185, 62,209,198, 54, 62, 75,240, 18, - 62,195,121, 25, 62, 48,253, 46, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 36,163, 37, 62,140,168,191, 63, 36, 0, 75, - 62,116, 47,229, 63, 42, 17,240, 62, 97, 84,129, 63, 46, 36,172, 62,129, 7,208, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,187, 81,138, 62,103, 40, 59, 62,199,231,211, 62,119,237,216, 62,199, 64, 6, 62,142, 6,105, 62,181, 71, 76, 62,131,200,204, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20, 62,132, 56, 17, 63, 22,249,250, 62, 88,251,160, 63, 36, 0, 75, - 62,116, 47,229, 63, 36,163, 37, 62,140,168,191, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,199,231,211, 62,119,237,216, - 62,225, 83, 90, 62, 90,153, 21, 62,221, 42, 54, 62,133, 25,209, 62,199, 64, 6, 62,142, 6,105, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 27, 46,208, 62,148, 35,149, 63, 36, 60, 91, 62,150,222,221, 63, 33,170,222, 62,158,126, 74, 63, 27,177, 36, - 62,156,151,158, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,204,234, 72, 62,159, 63, 56, 62,199,245,150, 62,152, 15, 85, - 62,217,166,238, 62,148,221,229, 62,216,160, 0, 62,157, 44,127, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20, - 62,132, 56, 17, 63, 36,163, 37, 62,140,168,191, 63, 36, 60, 91, 62,150,222,221, 63, 27, 46,208, 62,148, 35,149, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,199,245,150, 62,152, 15, 85, 62,199, 64, 6, 62,142, 6,105, 62,221, 42, 54, 62,133, 25,209, - 62,217,166,238, 62,148,221,229, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 27,177, 36, - 62,156,151,158, 63, 33,170,222, 62,158,126, 74, 63, 31,212,102, 62,164,192,144, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,204,234, 72, 62,159, 63, 56, 62,216,160, 0, 62,157, 44,127, 62,216, 21,115, 62,166,177, 14, 62,208,119, 17, 62,165, 65,201, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 31,212,102, 62,164,192,144, 63, 41,160,156, - 62,182,175, 56, 63, 37, 94, 91, 62,187,120,107, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,212,202, 62,182,163,245, - 62,208,119, 17, 62,165, 65,201, 62,216, 21,115, 62,166,177, 14, 62,197, 28,156, 62,187,130,166, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 62,194,119,104, 63, 82,189,164, 62,212, 73, 23, 63, 90,239,152, 62,205,192,100, 63, 97,238, 46, 62,185, 56, 38, - 63, 91,154, 72, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,141, 94,228, 63,100,234, 86, 62,150, 66, 84, 63, 94,154,114, - 62,173, 86,230, 63, 98, 66, 79, 62,162,143, 20, 63,106,173, 44, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 63, 87,122, 72, - 62, 62, 8,216, 63, 84,106,202, 62,113,185,137, 63, 72, 77,226, 62,121, 21,204, 63, 71,225,158, 62, 68, 34,113, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 16, 62,137, 32,132, 62,121, 65,181, 62,107,179,168, 62,103,127,139, 62,114,147,210, 62, 61,116,212, - 62,142,125,248, 62, 80, 4, 30, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 71,225,158, 62, 68, 34,113, 63, 72, 77,226, - 62,121, 21,204, 63, 51, 7, 8, 62,130,186, 5, 63, 49,166, 3, 62, 96, 57,232, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,172,197, 18, 62,133,112, 41, 62,137, 32,132, 62,121, 65,181, 62,142,125,248, 62, 80, 4, 30, 62,174,228,121, 62,109, 79, 52, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 49,166, 3, 62, 96, 57,232, 63, 51, 7, 8, 62,130,186, 5, 63, 46, 36,172, - 62,129, 7,208, 63, 48, 54,112, 62, 96, 19, 20, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,181, 71, 76, 62,131,200,204, - 62,172,197, 18, 62,133,112, 41, 62,174,228,121, 62,109, 79, 52, 62,175,121,117, 62,106,185,183, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 36,163, 37, 62,140,168,191, 63, 46, 36,172, 62,129, 7,208, 63, 51, 7, 8, 62,130,186, 5, 63, 36, 60, 91, - 62,150,222,221, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,172,197, 18, 62,133,112, 41, 62,181, 71, 76, 62,131,200,204, - 62,199, 64, 6, 62,142, 6,105, 62,199,245,150, 62,152, 15, 85, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 53, 88,154, - 62,221,146,240, 63, 49,117,240, 62,198,138,164, 63, 69, 19,224, 62,190, 68, 24, 63, 74, 64, 53, 62,224, 31,171, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 16, 62,134, 78,250, 62,186,213,148, 62,172,137,147, 62,198, 19,148, 62,162,172,128, 62,221,169, 17, - 62,114,112,184, 62,220,169,248, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 62,214, 74, 54, 63, 70, 55, 20, 62,233,130, 48, - 63, 83, 69,188, 62,212, 73, 23, 63, 90,239,152, 62,194,119,104, 63, 82,189,164, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,150, 66, 84, 63, 94,154,114, 62,153, 1, 66, 63, 81,149,245, 62,185, 56, 38, 63, 83,110,102, 62,173, 86,230, 63, 98, 66, 79, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 63, 66,242,106, 63, 25, 94,202, 63, 70,100,190, 63, 15,234,222, 63, 77,189, 90, - 63, 17, 88,233, 63, 74,206, 8, 63, 27,118, 88, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 96, 32, 22, 63, 16, 60, 66, - 62,125, 87, 86, 63, 15, 5,174, 62,132,187, 78, 63, 24, 44,180, 62,108, 79, 26, 63, 26, 1,124, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 74,206, 8, 63, 27,118, 88, 63, 77,189, 90, 63, 17, 88,233, 63, 85,139, 72, 63, 19, 51,103, 63, 85,119,220, - 63, 31, 71, 77, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 64,199, 64, 63, 18, 40, 26, 62, 96, 32, 22, 63, 16, 60, 66, - 62,108, 79, 26, 63, 26, 1,124, 62, 67,191, 44, 63, 30, 89, 90, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 85,119,220, - 63, 31, 71, 77, 63, 85,139, 72, 63, 19, 51,103, 63,100,213,228, 63, 20,156, 72, 63, 96, 82, 18, 63, 34,133,128, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,128, 62, 1, 50,226, 63, 20, 68,184, 62, 64,199, 64, 63, 18, 40, 26, 62, 67,191, 44, 63, 30, 89, 90, - 62, 24,204,194, 63, 34,186, 32, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 63, 56, 80,242, 63, 6,244, 44, 63, 54,173,195, - 62,252,106,239, 63, 60,205,115, 62,253,150,213, 63, 64, 14,166, 63, 4, 80, 81, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, - 62,147, 85,190, 62,252,176, 91, 62,160, 36,202, 62,252, 51, 94, 62,156,208, 61, 63, 7, 16,204, 62,140,121,160, 63, 3,197, 74, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 64, 14,166, 63, 4, 80, 81, 63, 60,205,115, 62,253,150,213, 63, 73,103, 68, - 63, 0,248,233, 63, 75, 12,248, 63, 8,206, 64, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,115, 59,144, 62,255,143,102, - 62,147, 85,190, 62,252,176, 91, 62,140,121,160, 63, 3,197, 74, 62,107,135, 78, 63, 7,182, 88, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 75, 12,248, 63, 8,206, 64, 63, 73,103, 68, 63, 0,248,233, 63, 82,151,239, 63, 3,223, 86, 63, 82,227,181, - 63, 11,102,189, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 77, 17, 82, 63, 2, 98,162, 62,115, 59,144, 62,255,143,102, - 62,107,135, 78, 63, 7,182, 88, 62, 75, 98,202, 63, 10, 43,108, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 82,227,181, - 63, 11,102,189, 63, 82,151,239, 63, 3,223, 86, 63, 91,224, 92, 63, 5,144,239, 63, 90,148,161, 63, 13, 95,146, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 38, 40,178, 63, 3,230, 14, 62, 77, 17, 82, 63, 2, 98,162, 62, 75, 98,202, 63, 10, 43,108, - 62, 43,162, 10, 63, 12, 50, 8, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,103, 89,120, 63, 2, 76,105, 63,103,179,170, - 63, 12,105,142, 63, 90,148,161, 63, 13, 95,146, 63, 91,224, 92, 63, 5,144,239, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 43,162, 10, 63, 12, 50, 8, 61,231, 41,168, 63, 11, 83,158, 61,234,128,116, 63, 0, 39,200, 62, 38, 40,178, 63, 3,230, 14, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,213,228, 63, 20,156, 72, 63, 85,139, 72, 63, 19, 51,103, 63, 90,148,161, - 63, 13, 95,146, 63,103,179,170, 63, 12,105,142, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 43,162, 10, 63, 12, 50, 8, - 62, 64,199, 64, 63, 18, 40, 26, 62, 1, 50,226, 63, 20, 68,184, 61,231, 41,168, 63, 11, 83,158, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 85,139, 72, 63, 19, 51,103, 63, 77,189, 90, 63, 17, 88,233, 63, 82,227,181, 63, 11,102,189, 63, 90,148,161, - 63, 13, 95,146, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 75, 98,202, 63, 10, 43,108, 62, 96, 32, 22, 63, 16, 60, 66, - 62, 64,199, 64, 63, 18, 40, 26, 62, 43,162, 10, 63, 12, 50, 8, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 77,189, 90, - 63, 17, 88,233, 63, 70,100,190, 63, 15,234,222, 63, 75, 12,248, 63, 8,206, 64, 63, 82,227,181, 63, 11,102,189, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,107,135, 78, 63, 7,182, 88, 62,125, 87, 86, 63, 15, 5,174, 62, 96, 32, 22, 63, 16, 60, 66, - 62, 75, 98,202, 63, 10, 43,108, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 70,100,190, 63, 15,234,222, 63, 60,235, 82, - 63, 12, 12, 27, 63, 64, 14,166, 63, 4, 80, 81, 63, 75, 12,248, 63, 8,206, 64, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,140,121,160, 63, 3,197, 74, 62,145,230, 78, 63, 11,225,148, 62,125, 87, 86, 63, 15, 5,174, 62,107,135, 78, 63, 7,182, 88, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 57,118, 31, 63, 12, 79,230, 63, 56, 80,242, 63, 6,244, 44, 63, 64, 14,166, - 63, 4, 80, 81, 63, 60,235, 82, 63, 12, 12, 27, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 62,140,121,160, 63, 3,197, 74, - 62,156,208, 61, 63, 7, 16,204, 62,152,199, 0, 63, 12,133, 13, 62,145,230, 78, 63, 11,225,148, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 32, 63, 57,240,195, 63, 23,138, 10, 63, 60,235, 82, 63, 12, 12, 27, 63, 70,100,190, 63, 15,234,222, 63, 66,242,106, - 63, 25, 94,202, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,125, 87, 86, 63, 15, 5,174, 62,145,230, 78, 63, 11,225,148, - 62,150, 7,247, 63, 23, 12, 96, 62,132,187, 78, 63, 24, 44,180, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13,120,216, - 63, 23, 81,160, 63, 23,233, 94, 63, 16, 60,186, 63, 28, 56,220, 63, 14,250, 66, 63, 39, 44,109, 63, 19,221,107, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,214,161,157, 63, 15,110,219, 62,223,130,109, 63, 16,165,118, 62,245, 27, 64, 63, 23,166,100, - 62,192, 26,156, 63, 20,139, 31, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 56, 29,176, 63, 20,206, 88, 63, 57,118, 31, - 63, 12, 79,230, 63, 60,235, 82, 63, 12, 12, 27, 63, 57,240,195, 63, 23,138, 10, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,145,230, 78, 63, 11,225,148, 62,152,199, 0, 63, 12,133, 13, 62,153,211,239, 63, 20,159,220, 62,150, 7,247, 63, 23, 12, 96, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 54,148, 48, 63, 22,206,220, 63, 56, 29,176, 63, 20,206, 88, 63, 57,240,195, - 63, 23,138, 10, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,150, 7,247, 63, 23, 12, 96, - 62,153,211,239, 63, 20,159,220, 62,156,106,108, 63, 22,154,146, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 54,173,195, 62,252,106,239, 63, 53, 88,154, 62,221,146,240, 63, 74, 64, 53, 62,224, 31,171, 63, 60,205,115, - 62,253,150,213, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 62,114,112,184, 62,220,169,248, 62,162,172,128, 62,221,169, 17, - 62,160, 36,202, 62,252, 51, 94, 62,147, 85,190, 62,252,176, 91, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 63, 74, 64, 53, - 62,224, 31,171, 63, 81,106,217, 62,232,214, 14, 63, 73,103, 68, 63, 0,248,233, 63, 60,205,115, 62,253,150,213, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,115, 59,144, 62,255,143,102, 62, 84, 93, 88, 62,228,105, 50, 62,114,112,184, 62,220,169,248, - 62,147, 85,190, 62,252,176, 91, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217, 62,232,214, 14, 63, 93,154,106, - 62,233, 26,226, 63, 82,151,239, 63, 3,223, 86, 63, 73,103, 68, 63, 0,248,233, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 77, 17, 82, 63, 2, 98,162, 62, 33, 1,128, 62,226,210, 70, 62, 84, 93, 88, 62,228,105, 50, 62,115, 59,144, 62,255,143,102, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,103, 89,120, 63, 2, 76,105, 63, 91,224, 92, 63, 5,144,239, 63, 82,151,239, - 63, 3,223, 86, 63, 93,154,106, 62,233, 26,226, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 77, 17, 82, 63, 2, 98,162, - 62, 38, 40,178, 63, 3,230, 14, 61,234,128,116, 63, 0, 39,200, 62, 33, 1,128, 62,226,210, 70, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 51, 7, 8, 62,130,186, 5, 63, 72, 77,226, 62,121, 21,204, 63, 73,254,154, 62,140, 82,178, 63, 56,188, 90, - 62,159,207,103, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,130,249,249, 62,137,175,246, 62,137, 32,132, 62,121, 65,181, - 62,172,197, 18, 62,133,112, 41, 62,161, 5,192, 62,159, 40,228, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 69, 19,224, - 62,190, 68, 24, 63, 56,188, 90, 62,159,207,103, 63, 73,254,154, 62,140, 82,178, 63, 77,217,216, 62,157,228, 7, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,128, 62,130,249,249, 62,137,175,246, 62,161, 5,192, 62,159, 40,228, 62,134, 78,250, 62,186,213,148, - 62,111,118,154, 62,152,108,120, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 63, 49,117,240, 62,198,138,164, 63, 41,160,156, - 62,182,175, 56, 63, 56,188, 90, 62,159,207,103, 63, 69, 19,224, 62,190, 68, 24, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62,161, 5,192, 62,159, 40,228, 62,188,212,202, 62,182,163,245, 62,172,137,147, 62,198, 19,148, 62,134, 78,250, 62,186,213,148, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 41,160,156, 62,182,175, 56, 63, 33,170,222, 62,158,126, 74, 63, 36, 60, 91, - 62,150,222,221, 63, 56,188, 90, 62,159,207,103, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,199,245,150, 62,152, 15, 85, - 62,204,234, 72, 62,159, 63, 56, 62,188,212,202, 62,182,163,245, 62,161, 5,192, 62,159, 40,228, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 36, 60, 91, 62,150,222,221, 63, 51, 7, 8, 62,130,186, 5, 63, 56,188, 90, 62,159,207,103, 63,128, 0, 0, - 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,161, 5,192, 62,159, 40,228, 62,172,197, 18, 62,133,112, 41, - 62,199,245,150, 62,152, 15, 85, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 41,160,156, - 62,182,175, 56, 63, 31,212,102, 62,164,192,144, 63, 33,170,222, 62,158,126, 74, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,204,234, 72, 62,159, 63, 56, 62,208,119, 17, 62,165, 65,201, 62,188,212,202, 62,182,163,245, - 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 44,226, 63, 96,140,129, 62,227,135, 42, - 63,101, 2, 58, 62,219,168,136, 63, 95,236, 30, 62,238, 30,135, 63, 90, 41,200, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62,137,240,216, 63, 93,226, 90, 62,122,103,110, 63, 92,255,236, 62,120, 84, 74, 63, 83, 32,104, 62,138,193, 32, 63, 83, 3, 16, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,233,130, 48, 63, 83, 69,188, 62,238, 30,135, 63, 90, 41,200, 62,219,168,136, - 63, 95,236, 30, 62,212, 73, 23, 63, 90,239,152, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 62,137,240,216, 63, 93,226, 90, - 62,138,193, 32, 63, 83, 3, 16, 62,153, 1, 66, 63, 81,149,245, 62,150, 66, 84, 63, 94,154,114, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0,240, 63, 77,217,216, 62,157,228, 7, 63, 73,254,154, 62,140, 82,178, 63, 90, 61, 33, 62,124,207,195, 63, 90,225,160, - 62,137,121,110, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 62, 81,207, 98, 62,110, 1,109, 62,130,249,249, 62,137,175,246, - 62,111,118,154, 62,152,108,120, 62, 74,125,166, 62,130, 30,252, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 72, 77,226, - 62,121, 21,204, 63, 84,106,202, 62,113,185,137, 63, 90, 61, 33, 62,124,207,195, 63, 73,254,154, 62,140, 82,178, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 81,207, 98, 62,110, 1,109, 62,107,179,168, 62,103,127,139, 62,137, 32,132, 62,121, 65,181, - 62,130,249,249, 62,137,175,246, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,212, 73, 23, 63, 90,239,152, 62,219,168,136, - 63, 95,236, 30, 62,205,192,100, 63, 97,238, 46, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, - 62,141, 94,228, 63,100,234, 86, 62,137,240,216, 63, 93,226, 90, 62,150, 66, 84, 63, 94,154,114, 63,128, 0, 0, 63,128, 0, 0, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 63,109,178, 31, 62,228, 68,224, 63,102,178, 46, 62,232,184,100, 63,101,251,100, - 62,227,198,238, 63,107,173, 94, 62,225,130,168, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,249,209, 68, 62,219,134, 70, - 61,242,216,120, 62,225, 40,124, 61,177, 27, 28, 62,219,240, 42, 61,196,131, 76, 62,216, 97,196, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,109,178, 31, 62,228, 68,224, 63,107,173, 94, 62,225,130,168, 63,114,102,144, 62,220, 23,198, 63,116, 76, 41, - 62,222,153,139, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,120,163, 56, 62,208,252, 58, 61,196,131, 76, 62,216, 97,196, - 61,177, 27, 28, 62,219,240, 42, 61, 73,183,128, 62,213,108, 84, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,116, 76, 41, - 62,222,153,139, 63,114,102,144, 62,220, 23,198, 63,117, 87, 84, 62,211,255,221, 63,119,115,183, 62,215, 49,140, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 61, 55, 29,144, 62,194,183,207, 61,120,163, 56, 62,208,252, 58, 61, 73,183,128, 62,213,108, 84, - 60,231,111,224, 62,198,142,100, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,119,115,183, 62,215, 49,140, 63,117, 87, 84, - 62,211,255,221, 63,118, 20,150, 62,196,110, 60, 63,122, 12, 49, 62,197, 8,246, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,103,197, 96, 62,170,206, 15, 61, 55, 29,144, 62,194,183,207, 60,231,111,224, 62,198,142,100, 61, 16, 54,240, 62,167, 4,120, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,122, 12, 49, 62,197, 8,246, 63,118, 20,150, 62,196,110, 60, 63,108,155, 17, - 62,178,201,130, 63,110,190, 84, 62,172, 77,223, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,246,252,148, 62,160,116,164, - 61,103,197, 96, 62,170,206, 15, 61, 16, 54,240, 62,167, 4,120, 61,246, 66, 8, 62,152,161, 28, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,110,190, 84, 62,172, 77,223, 63,108,155, 17, 62,178,201,130, 63, 92,180, 21, 62,173, 95,202, 63, 90, 5,151, - 62,167, 61,138, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 54,216,144, 62,163, 76, 35, 61,246,252,148, 62,160,116,164, - 61,246, 66, 8, 62,152,161, 28, 62, 66,251,194, 62,158,102,163, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,108,155, 17, - 62,178,201,130, 63,109,132,198, 62,186,157,182, 63, 97, 32, 68, 62,178, 12,192, 63, 92,180, 21, 62,173, 95,202, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 36,185, 48, 62,166, 7, 16, 61,221, 91, 40, 62,167,194, 4, 61,246,252,148, 62,160,116,164, - 62, 54,216,144, 62,163, 76, 35, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,118, 20,150, 62,196,110, 60, 63,115,225, 84, - 62,198, 85,208, 63,109,132,198, 62,186,157,182, 63,108,155, 17, 62,178,201,130, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,221, 91, 40, 62,167,194, 4, 61,134,221,244, 62,175,164,121, 61,103,197, 96, 62,170,206, 15, 61,246,252,148, 62,160,116,164, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,117, 87, 84, 62,211,255,221, 63,116, 48,222, 62,209, 8,169, 63,115,225, 84, - 62,198, 85,208, 63,118, 20,150, 62,196,110, 60, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,134,221,244, 62,175,164,121, - 61, 93,108,160, 62,190,207, 17, 61, 55, 29,144, 62,194,183,207, 61,103,197, 96, 62,170,206, 15, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,114,102,144, 62,220, 23,198, 63,113,151,174, 62,214,229, 26, 63,116, 48,222, 62,209, 8,169, 63,117, 87, 84, - 62,211,255,221, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61, 93,108,160, 62,190,207, 17, 61,135,155, 12, 62,201, 39,166, - 61,120,163, 56, 62,208,252, 58, 61, 55, 29,144, 62,194,183,207, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,173, 94, - 62,225,130,168, 63,107,239,228, 62,218, 59, 62, 63,113,151,174, 62,214,229, 26, 63,114,102,144, 62,220, 23,198, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 61,135,155, 12, 62,201, 39,166, 61,195, 47,128, 62,207, 11, 6, 61,196,131, 76, 62,216, 97,196, - 61,120,163, 56, 62,208,252, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,173, 94, 62,225,130,168, 63,101,251,100, - 62,227,198,238, 63,102,205, 71, 62,219, 94,132, 63,107,239,228, 62,218, 59, 62, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,244,157,192, 62,209,137,157, 61,249,209, 68, 62,219,134, 70, 61,196,131, 76, 62,216, 97,196, 61,195, 47,128, 62,207, 11, 6, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 69, 19,224, 62,190, 68, 24, 63, 77,217,216, 62,157,228, 7, 63, 85, 35,236, - 62,181,201,164, 63, 78, 92, 56, 62,188,114,177, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 32, 62, 80, 91,122, 62,174, 18, 72, - 62,111,118,154, 62,152,108,120, 62,134, 78,250, 62,186,213,148, 62,104,163,162, 62,182,180,150, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 32, 63, 77,217,216, 62,157,228, 7, 63, 90, 5,151, 62,167, 61,138, 63, 92,180, 21, 62,173, 95,202, 63, 85, 35,236, - 62,181,201,164, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 62, 54,216,144, 62,163, 76, 35, 62, 66,251,194, 62,158,102,163, - 62,111,118,154, 62,152,108,120, 62, 80, 91,122, 62,174, 18, 72, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 63, 74, 64, 53, - 62,224, 31,171, 63, 69, 19,224, 62,190, 68, 24, 63, 78, 92, 56, 62,188,114,177, 63, 81,106,217, 62,232,214, 14, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62,104,163,162, 62,182,180,150, 62,134, 78,250, 62,186,213,148, 62,114,112,184, 62,220,169,248, - 62, 84, 93, 88, 62,228,105, 50, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 93,154,106, 62,233, 26,226, 63, 94,229,196, - 62,224,195,128, 63,101,251,100, 62,227,198,238, 63,102,178, 46, 62,232,184,100, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,249,209, 68, 62,219,134, 70, 62, 28,187,108, 62,217, 86, 48, 62, 33, 1,128, 62,226,210, 70, 61,242,216,120, 62,225, 40,124, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,180, 21, 62,173, 95,202, 63, 97, 32, 68, 62,178, 12,192, 63, 94,215, 9, - 62,186, 54, 4, 63, 85, 35,236, 62,181,201,164, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 41,122, 60, 62,175, 58, 16, - 62, 36,185, 48, 62,166, 7, 16, 62, 54,216,144, 62,163, 76, 35, 62, 80, 91,122, 62,174, 18, 72, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 95, 78,230, 62,189,233, 4, 63, 86,188, 32, 62,190, 62, 44, 63, 85, 35,236, 62,181,201,164, 63, 94,215, 9, - 62,186, 54, 4, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 80, 91,122, 62,174, 18, 72, 62, 71,118, 78, 62,182, 49, 27, - 62, 37,225, 52, 62,179, 12, 40, 62, 41,122, 60, 62,175, 58, 16, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,166, 70, - 62,197,166, 0, 63, 86,188, 32, 62,190, 62, 44, 63, 95, 78,230, 62,189,233, 4, 63, 95, 13,226, 62,194,152, 37, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 37,225, 52, 62,179, 12, 40, 62, 71,118, 78, 62,182, 49, 27, 62, 45,143,142, 62,188, 37,237, - 62, 36,230,106, 62,184, 27,222, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 90,248, 62,207,122,100, 63, 90,249,108, - 62,212,199, 58, 63, 86,188, 32, 62,190, 62, 44, 63, 92,166, 70, 62,197,166, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 71,118, 78, 62,182, 49, 27, 62, 48, 56,110, 62,205, 43,230, 62, 30,250,174, 62,198, 12, 26, 62, 45,143,142, 62,188, 37,237, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 94,229,196, 62,224,195,128, 63, 90,249,108, 62,212,199, 58, 63, 95, 90,248, - 62,207,122,100, 63, 98,104, 92, 62,215,136,197, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 30,250,174, 62,198, 12, 26, - 62, 48, 56,110, 62,205, 43,230, 62, 28,187,108, 62,217, 86, 48, 62, 15, 59,212, 62,206, 50,224, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,101,251,100, 62,227,198,238, 63, 94,229,196, 62,224,195,128, 63, 98,104, 92, 62,215,136,197, 63,102,205, 71, - 62,219, 94,132, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 15, 59,212, 62,206, 50,224, 62, 28,187,108, 62,217, 86, 48, - 61,249,209, 68, 62,219,134, 70, 61,244,157,192, 62,209,137,157, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217, - 62,232,214, 14, 63, 90,249,108, 62,212,199, 58, 63, 94,229,196, 62,224,195,128, 63, 93,154,106, 62,233, 26,226, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 28,187,108, 62,217, 86, 48, 62, 48, 56,110, 62,205, 43,230, 62, 84, 93, 88, 62,228,105, 50, - 62, 33, 1,128, 62,226,210, 70, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217, 62,232,214, 14, 63, 78, 92, 56, - 62,188,114,177, 63, 86,188, 32, 62,190, 62, 44, 63, 90,249,108, 62,212,199, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 71,118, 78, 62,182, 49, 27, 62,104,163,162, 62,182,180,150, 62, 84, 93, 88, 62,228,105, 50, 62, 48, 56,110, 62,205, 43,230, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 78, 92, 56, 62,188,114,177, 63, 85, 35,236, 62,181,201,164, 63, 86,188, 32, - 62,190, 62, 44, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 71,118, 78, 62,182, 49, 27, - 62, 80, 91,122, 62,174, 18, 72, 62,104,163,162, 62,182,180,150, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,102,205, 71, 62,219, 94,132, 63, 98,104, 92, 62,215,136,197, 63,100,109,182, 62,210,255,149, 63,104, 86, 54, - 62,214,241,209, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 7,107,160, 62,200,103, 34, 62, 15, 59,212, 62,206, 50,224, - 61,244,157,192, 62,209,137,157, 61,232, 2, 8, 62,203,214, 20, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 98,104, 92, - 62,215,136,197, 63, 95, 90,248, 62,207,122,100, 63, 97,206,112, 62,204,202, 10, 63,100,109,182, 62,210,255,149, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 21, 68, 64, 62,194, 55,107, 62, 30,250,174, 62,198, 12, 26, 62, 15, 59,212, 62,206, 50,224, - 62, 7,107,160, 62,200,103, 34, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 90,248, 62,207,122,100, 63, 92,166, 70, - 62,197,166, 0, 63, 94,241, 82, 62,198,103, 40, 63, 97,206,112, 62,204,202, 10, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 35,225, 20, 62,188, 50, 39, 62, 45,143,142, 62,188, 37,237, 62, 30,250,174, 62,198, 12, 26, 62, 21, 68, 64, 62,194, 55,107, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,166, 70, 62,197,166, 0, 63, 95, 13,226, 62,194,152, 37, 63, 97, 1,118, - 62,195,226, 47, 63, 94,241, 82, 62,198,103, 40, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 28, 43, 12, 62,184,177,186, - 62, 36,230,106, 62,184, 27,222, 62, 45,143,142, 62,188, 37,237, 62, 35,225, 20, 62,188, 50, 39, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 95, 13,226, 62,194,152, 37, 63, 95, 78,230, 62,189,233, 4, 63, 97,113, 51, 62,189,151, 92, 63, 97, 1,118, - 62,195,226, 47, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 29, 67,104, 62,177,199, 58, 62, 37,225, 52, 62,179, 12, 40, - 62, 36,230,106, 62,184, 27,222, 62, 28, 43, 12, 62,184,177,186, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 78,230, - 62,189,233, 4, 63, 94,215, 9, 62,186, 54, 4, 63, 96, 69, 96, 62,187,133,152, 63, 97,113, 51, 62,189,151, 92, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 35, 14,140, 62,176, 19, 33, 62, 41,122, 60, 62,175, 58, 16, 62, 37,225, 52, 62,179, 12, 40, - 62, 29, 67,104, 62,177,199, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 94,215, 9, 62,186, 54, 4, 63, 97, 32, 68, - 62,178, 12,192, 63, 98, 91,112, 62,182,128,149, 63, 96, 69, 96, 62,187,133,152, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 29,107,228, 62,169,230, 95, 62, 36,185, 48, 62,166, 7, 16, 62, 41,122, 60, 62,175, 58, 16, 62, 35, 14,140, 62,176, 19, 33, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,239,228, 62,218, 59, 62, 63,102,205, 71, 62,219, 94,132, 63,104, 86, 54, - 62,214,241,209, 63,109, 27, 34, 62,214,254,155, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,232, 2, 8, 62,203,214, 20, - 61,244,157,192, 62,209,137,157, 61,195, 47,128, 62,207, 11, 6, 61,184,174, 36, 62,202,130,216, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,113,151,174, 62,214,229, 26, 63,107,239,228, 62,218, 59, 62, 63,109, 27, 34, 62,214,254,155, 63,113,134, 69, - 62,212, 82,156, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,184,174, 36, 62,202,130,216, 61,195, 47,128, 62,207, 11, 6, - 61,135,155, 12, 62,201, 39,166, 61,138,114, 60, 62,197, 61, 28, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,116, 48,222, - 62,209, 8,169, 63,113,151,174, 62,214,229, 26, 63,113,134, 69, 62,212, 82,156, 63,114,143, 42, 62,207,168, 24, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 61,138,114, 60, 62,197, 61, 28, 61,135,155, 12, 62,201, 39,166, 61, 93,108,160, 62,190,207, 17, - 61,132, 85,184, 62,189,211, 22, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,115,225, 84, 62,198, 85,208, 63,116, 48,222, - 62,209, 8,169, 63,114,143, 42, 62,207,168, 24, 63,114,125,203, 62,200,114, 96, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,132, 85,184, 62,189,211, 22, 61, 93,108,160, 62,190,207, 17, 61,134,221,244, 62,175,164,121, 61,145,152, 16, 62,179,214, 84, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,132,198, 62,186,157,182, 63,115,225, 84, 62,198, 85,208, 63,114,125,203, - 62,200,114, 96, 63,109,192,177, 62,190,240,152, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,145,152, 16, 62,179,214, 84, - 61,134,221,244, 62,175,164,121, 61,221, 91, 40, 62,167,194, 4, 61,208,226, 64, 62,172, 58,232, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 97, 32, 68, 62,178, 12,192, 63,109,132,198, 62,186,157,182, 63,109,192,177, 62,190,240,152, 63, 98, 91,112, - 62,182,128,149, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,208,226, 64, 62,172, 58,232, 61,221, 91, 40, 62,167,194, 4, - 62, 36,185, 48, 62,166, 7, 16, 62, 29,107,228, 62,169,230, 95, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 97, 1,118, - 62,195,226, 47, 63, 97,113, 51, 62,189,151, 92, 63,102,139,215, 62,193,109, 15, 63,100, 47, 54, 62,198,115,186, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 5,169, 92, 62,179,115,168, 62, 29, 67,104, 62,177,199, 58, 62, 28, 43, 12, 62,184,177,186, - 62, 13, 97, 50, 62,186, 42, 50, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,100, 47, 54, 62,198,115,186, 63,102,139,215, - 62,193,109, 15, 63,105,241,174, 62,200, 8,204, 63,103,233, 71, 62,204, 42,178, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,229,171,228, 62,185, 42, 41, 62, 5,169, 92, 62,179,115,168, 62, 13, 97, 50, 62,186, 42, 50, 61,243,248, 92, 62,191, 22, 96, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,103,233, 71, 62,204, 42,178, 63,105,241,174, 62,200, 8,204, 63,108, 37, 51, - 62,205, 3,249, 63,106,212, 56, 62,208,238, 96, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,202, 99,120, 62,190, 49,192, - 61,229,171,228, 62,185, 42, 41, 61,243,248, 92, 62,191, 22, 96, 61,211,209,160, 62,195,159,108, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,106,212, 56, 62,208,238, 96, 63,108, 37, 51, 62,205, 3,249, 63,110, 73, 56, 62,206,119,186, 63,109,191, 46, - 62,210, 64, 92, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,179,234,244, 62,190,219,240, 61,202, 99,120, 62,190, 49,192, - 61,211,209,160, 62,195,159,108, 61,181,129,196, 62,196, 14,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,109, 27, 34, - 62,214,254,155, 63,104, 86, 54, 62,214,241,209, 63,106,212, 56, 62,208,238, 96, 63,109,191, 46, 62,210, 64, 92, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 61,211,209,160, 62,195,159,108, 61,232, 2, 8, 62,203,214, 20, 61,184,174, 36, 62,202,130,216, - 61,181,129,196, 62,196, 14,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,109,182, 62,210,255,149, 63,103,233, 71, - 62,204, 42,178, 63,106,212, 56, 62,208,238, 96, 63,104, 86, 54, 62,214,241,209, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,211,209,160, 62,195,159,108, 61,243,248, 92, 62,191, 22, 96, 62, 7,107,160, 62,200,103, 34, 61,232, 2, 8, 62,203,214, 20, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,109,182, 62,210,255,149, 63, 97,206,112, 62,204,202, 10, 63,100, 47, 54, - 62,198,115,186, 63,103,233, 71, 62,204, 42,178, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 13, 97, 50, 62,186, 42, 50, - 62, 21, 68, 64, 62,194, 55,107, 62, 7,107,160, 62,200,103, 34, 61,243,248, 92, 62,191, 22, 96, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63, 97, 1,118, 62,195,226, 47, 63,100, 47, 54, 62,198,115,186, 63, 97,206,112, 62,204,202, 10, 63, 94,241, 82, - 62,198,103, 40, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62, 21, 68, 64, 62,194, 55,107, 62, 13, 97, 50, 62,186, 42, 50, - 62, 28, 43, 12, 62,184,177,186, 62, 35,225, 20, 62,188, 50, 39, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63, 96, 69, 96, - 62,187,133,152, 63, 98, 91,112, 62,182,128,149, 63,102,139,215, 62,193,109, 15, 63, 97,113, 51, 62,189,151, 92, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 62, 5,169, 92, 62,179,115,168, 62, 29,107,228, 62,169,230, 95, 62, 35, 14,140, 62,176, 19, 33, - 62, 29, 67,104, 62,177,199, 58, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,192,177, 62,190,240,152, 63,105,241,174, - 62,200, 8,204, 63,102,139,215, 62,193,109, 15, 63, 98, 91,112, 62,182,128,149, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 62, 5,169, 92, 62,179,115,168, 61,229,171,228, 62,185, 42, 41, 61,208,226, 64, 62,172, 58,232, 62, 29,107,228, 62,169,230, 95, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,114,125,203, 62,200,114, 96, 63,108, 37, 51, 62,205, 3,249, 63,105,241,174, - 62,200, 8,204, 63,109,192,177, 62,190,240,152, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,229,171,228, 62,185, 42, 41, - 61,202, 99,120, 62,190, 49,192, 61,145,152, 16, 62,179,214, 84, 61,208,226, 64, 62,172, 58,232, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,114,143, 42, 62,207,168, 24, 63,110, 73, 56, 62,206,119,186, 63,108, 37, 51, 62,205, 3,249, 63,114,125,203, - 62,200,114, 96, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,202, 99,120, 62,190, 49,192, 61,179,234,244, 62,190,219,240, - 61,132, 85,184, 62,189,211, 22, 61,145,152, 16, 62,179,214, 84, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,113,134, 69, - 62,212, 82,156, 63,109,191, 46, 62,210, 64, 92, 63,110, 73, 56, 62,206,119,186, 63,114,143, 42, 62,207,168, 24, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 61,179,234,244, 62,190,219,240, 61,181,129,196, 62,196, 14,204, 61,138,114, 60, 62,197, 61, 28, - 61,132, 85,184, 62,189,211, 22, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,109, 27, 34, 62,214,254,155, 63,109,191, 46, - 62,210, 64, 92, 63,113,134, 69, 62,212, 82,156, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 61,138,114, 60, 62,197, 61, 28, 61,181,129,196, 62,196, 14,204, 61,184,174, 36, 62,202,130,216, 63,128, 0, 0, 63,128, 0, 0, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,110,190, 84, 62,172, 77,223, 63, 90, 5,151, 62,167, 61,138, 63, 96, 25, 22, - 62,149,248,246, 63,122,176,162, 62,161,215,145, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 62, 54,234, 64, 62,140,219,146, - 62, 66,251,194, 62,158,102,163, 61,246, 66, 8, 62,152,161, 28, 61,189,241,172, 62,132,107, 13, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0, 0, 63,122, 12, 49, 62,197, 8,246, 63,110,190, 84, 62,172, 77,223, 63,122,176,162, 62,161,215,145, 63,126,255,188, - 62,198,248,115, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 61,189,241,172, 62,132,107, 13, 61,246, 66, 8, 62,152,161, 28, - 61, 16, 54,240, 62,167, 4,120, 58,163, 8, 0, 62,162, 69, 39, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 63,119,115,183, - 62,215, 49,140, 63,122, 12, 49, 62,197, 8,246, 63,126,255,188, 62,198,248,115, 63,122, 6, 47, 62,216,157,248, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0, 0, 58,163, 8, 0, 62,162, 69, 39, 61, 16, 54,240, 62,167, 4,120, 60,231,111,224, 62,198,142,100, - 60, 14,248,224, 62,198,141, 70, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 63,116, 76, 41, 62,222,153,139, 63,119,115,183, - 62,215, 49,140, 63,122, 6, 47, 62,216,157,248, 63,119, 98,134, 62,225, 37,204, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, - 60, 14,248,224, 62,198,141, 70, 60,231,111,224, 62,198,142,100, 61, 73,183,128, 62,213,108, 84, 60,229,210, 80, 62,218,239, 32, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,178, 31, 62,228, 68,224, 63,116, 76, 41, 62,222,153,139, 63,119, 98,134, - 62,225, 37,204, 63,115,185, 46, 62,234,157, 90, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,128, 60,229,210, 80, 62,218,239, 32, - 61, 73,183,128, 62,213,108, 84, 61,177, 27, 28, 62,219,240, 42, 61,122,103, 56, 62,230, 10, 30, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0,128, 63,102,178, 46, 62,232,184,100, 63,109,178, 31, 62,228, 68,224, 63,115,185, 46, 62,234,157, 90, 63,106,134,244, - 62,246, 64,234, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 61,122,103, 56, 62,230, 10, 30, 61,177, 27, 28, 62,219,240, 42, - 61,242,216,120, 62,225, 40,124, 61,209,222,212, 62,240,123,238, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, 63, 5,188,235, - 63, 98, 74,252, 62,248,111,200, 63,112,105,197, 62,231, 49, 0, 63,107,190,118, 62,255, 57,150, 63, 96, 14, 53, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62, 95, 99, 80, 63, 94,194,149, 62, 62, 8, 58, 63, 89,154, 10, 62, 92, 24, 40, 63, 74, 82, 14, - 62,112, 11,112, 63, 78,133,157, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 63, 5,188,235, 63, 98, 74,252, 63, 12,139,136, - 63,101,233,138, 63, 6, 45,116, 63,113,245,112, 62,248,111,200, 63,112,105,197, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, - 62, 36,219, 68, 63, 81,186,249, 62, 65,254, 28, 63, 70, 55, 20, 62, 92, 24, 40, 63, 74, 82, 14, 62, 62, 8, 58, 63, 89,154, 10, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 63, 12,139,136, 63,101,233,138, 63, 12,130, 5, 63,108,216,149, 63, 6, 45,116, - 63,113,245,112, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,112, 62, 36,219, 68, 63, 81,186,249, - 62, 42, 1, 76, 63, 73,178, 39, 62, 65,254, 28, 63, 70, 55, 20, 63,128, 0, 0, 63,128, 0, 0, 8,193,158,224, 1, 0, 0, 5, - 0, 0, 0,112, 63,103, 89,120, 63, 2, 76,105, 63, 93,154,106, 62,233, 26,226, 63,102,178, 46, 62,232,184,100, 63,106,134,244, - 62,246, 64,234, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 61,242,216,120, 62,225, 40,124, 62, 33, 1,128, 62,226,210, 70, - 61,234,128,116, 63, 0, 39,200, 61,209,222,212, 62,240,123,238, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 44,226, - 63, 96,140,129, 62,255, 57,150, 63, 96, 14, 53, 62,231, 49, 0, 63,107,190,118, 62,227,135, 42, 63,101, 2, 58, 8,193,158,224, - 1, 0, 0, 5, 0, 0, 0,240, 62, 95, 99, 80, 63, 94,194,149, 62,112, 11,112, 63, 78,133,157, 62,120, 84, 74, 63, 83, 32,104, - 62,122,103,110, 63, 92,255,236, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0,240, 63, 77,217,216, 62,157,228, 7, 63, 90,225,160, - 62,137,121,110, 63, 96, 25, 22, 62,149,248,246, 63, 90, 5,151, 62,167, 61,138, 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 16, - 62, 54,234, 64, 62,140,219,146, 62, 74,125,166, 62,130, 30,252, 62,111,118,154, 62,152,108,120, 62, 66,251,194, 62,158,102,163, - 8,193,158,224, 1, 0, 0, 5, 0, 0, 0, 64, 68, 65, 84, 65, 0, 0, 31, 64, 3,161,254, 32, 0, 0, 0, 59, 0, 0, 7,208, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,113,208, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,119,192, 8,194,107,224, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 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, 8,194,115, 16, - 3,162, 52, 32, 3,162, 58, 32, 0, 0, 0, 0, 3,162, 30, 32, 3,162, 42, 32, 0, 0, 0, 0, 3,162, 68, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,194,115, 64, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,116,192, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,118, 64, 0, 0, 0, 3, - 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,115, 16, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,115, 64, 0, 0, 1, 42, 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, 3,162, 30, 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,113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 79, 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,151,178, 3, 68, 65, 84, 65,216, 2, 0, 0, 0,151,178, 3,145, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,224, 3,162, 30, 32, 0, 0, 0, 58, 0, 0, 0,116, - 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, - 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, - 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, - 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -184,140,212,127, 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, - 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, - 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, 63,255,192, 1, - 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, -192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, - 64,190, 35,238, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 64,190, 35,238, 63,255,192, 1, - 90,129, 0,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -192, 87, 32,102, 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, - 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, - 64, 87, 29,217, 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, - 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62, - 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 65, 6,115,159, 64,215, 30,146,192,190, 36, 74, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,100, 43,135,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 64,215, 30,150, 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, -191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 63,152, 29, 14,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 64,215, 30,150, 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, - 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, - 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, -184,136, 91,213, 65,114, 3, 43,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, - 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, 64,100, 43,129,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, -184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, - 63,152, 28,234,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 63,152, 28,246,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, -184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, -191,152, 29, 30,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,191,152, 29, 18,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, -184,136, 91,213, 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, -192,100, 43,153,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,100, 43,147,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, -184,136, 91,213, 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -191,215, 33,222, 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, -192,100, 43,154, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,191,152, 29, 32, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -193, 6,115,182, 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, -192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, 63,255,192, 1, - 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, -192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, - 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, - 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, -191,152, 28,253, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, -192,100, 43,136, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -184,138,163,172, 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74,192, 1,192, 1, - 90,129, 2,255, 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,116,192, 0, 0, 1, 42, 0, 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, 3,162, 42, 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, @@ -7673,562 +507,76 @@ char datatoc_preview_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, 68, 65, 84, 65, 0, 0, 9, 72, 3,162, 42, 32, 0, 0, 0, 55, 0, 0, 0,198, 0, 0, 0, 21, - 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 34, - 0, 0, 0, 18, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 53, - 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 27, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, - 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, - 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, - 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, - 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, - 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, - 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, - 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, - 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 24, - 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 29, - 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, - 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 35, 0, 0, 0, 34, - 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 33, - 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 40, - 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 39, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0,100, 0, 0, 0, 34, - 0, 0, 0, 37, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 41, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 50, - 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 40, - 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 86, - 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 50, - 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,115, 0, 0, 0, 34, - 0, 0, 0, 52, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,114, - 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 42, - 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34, - 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, - 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 55, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 34, - 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 57, - 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, - 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 57, - 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, - 0, 0, 0, 63, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 66, - 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 52, - 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 53, 0, 0, 0, 34, - 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 65, - 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 71, - 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 97, 0, 0, 0, 34, - 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 0, 85, - 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 34, 0, 0, 0, 73, - 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 77, 0, 0, 0, 34, - 0, 0, 0, 81, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,112, - 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 34, - 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 88, - 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 86, - 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 93, 0, 0, 0, 34, - 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 92, - 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 86, - 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, - 0, 0, 0, 92, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 95, - 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, - 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 95, 0, 0, 0, 34, - 0, 0, 0, 78, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, - 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, - 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, - 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, - 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, - 0, 0, 0,109, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,112, - 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,106, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 34, - 0, 0, 0,112, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,111, - 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,118, 64, 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 3,162, 52, 32, 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, 0, 85, 86, 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, 3,162, 58, 32, - 0, 0, 0, 6, 0, 0, 0, 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, - 67,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, - 3,162, 68, 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,141, 99, 92, 63, + 43, 35, 2,191,188,238, 46,188, 94, 32,148,188, 23,240, 25, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +201, 77, 68, 64,228, 66,111, 64,230, 97,205,191, 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, 68, 65, 84, 65, 0, 0, 3,252, 3,162, 52, 32, 0, 0, 0, 54, 0, 0, 0, 51, - 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, - 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, - 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, - 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, - 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, - 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, - 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, - 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, - 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, - 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, - 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, - 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, - 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, - 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, - 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, - 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, - 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 8,196, 3,162, 58, 32, 0, 0, 0, 65, 0, 0, 0, 51, 63, 27,168,250, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, - 62,203,162, 84, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, - 59, 93,211, 96, 63, 81,128,146, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, - 63,158,151,225, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,149, 59, 93,211, 96, 63, 27,168,251, - 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,227, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,246, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 62,203,162, 85, - 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 24, 59, 93,211, 96, - 63, 81,128,142, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, - 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, - 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, - 63, 27,168,248, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, - 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, - 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, - 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, - 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, - 63, 41, 47, 72, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, - 63, 76,225,174, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, - 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, - 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, - 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, - 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, - 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, - 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 56, 63, 3, 28,220,189,188,105, 96, 63, 41, 47,120, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, 63, 79, 65,242, - 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, 62,181, 84,122, - 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,200, 63, 79, 65,242,189,188,105, 96, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, - 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120, -190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, - 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, - 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, - 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, - 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131,180, 62,186, 19,116, - 63,159,140,244, 63, 3, 28, 50, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 76,225,174, 62,186, 21, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 76,226,112, 61,135, 38, 64, 63,114,244,240, - 62, 91,221, 4, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 61,135, 44, 96, 62,181, 84, 61,189,169,104,176, - 63, 0,189, 93,190,109, 1, 80, 63, 38,207,248,189,169,109,144, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, - 63, 41, 47,116, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 62,186, 21, 0, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, 61,135, 44, 96, - 63, 38,207, 51, 62, 91,224, 24, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, - 63, 79, 65,236, 63, 76,225,174, 63, 41, 47,116, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 0,188,188, 63, 41, 47,120, 62,181, 84,122, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 52, 63, 3, 28,248, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 14, 62,186, 21, 0, 61,104, 82,144, 62, 91,223,128, 62, 82, 94,138, - 61,135, 43, 48, 62,181, 84,122, 62, 91,224, 32, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, - 62,181, 84,127, 63, 79, 65,242, 63, 0,188,188, 63, 41, 47,120, 63, 38,207, 52, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62, 82, 95, 26, 63, 41, 47,120, 61,104, 84,160, 63, 3, 29, 0, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, - 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 56, 63,141,179,111, - 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,127, 63, 79, 65,242, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,189,188,106,128, 62,186, 20,176, - 61,104, 84,160, 63, 3, 29, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 48, 3,162, 68, 32, - 0, 0, 0, 59, 0, 0, 0,204,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -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, 77, 69, 0, 0, 1, 24, - 8,194,119,192, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,125,176, 8,194,113,208, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, - 97,110,101, 46, 48, 48, 49, 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, 8,194,121, 0, 3,162, 94, 32, 3,162, 98, 32, - 0, 0, 0, 0, 3,162, 72, 32, 3,162, 84, 32, 0, 0, 0, 0, 3,162,108, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,121, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,122,176, 0, 0, 0, 1, - 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,124, 48, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,121, 48, 0, 0, 1, 42, 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, 3,162, 72, 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, 68, 65, 84, 65,240, 0, 0, 0, 8,154,178, 3, +146, 0, 0, 0, 1, 0, 0, 0,240,250,157, 3,232,232,160, 3,192,148,178, 3,224,149,178, 3, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 99, 92, 63, 43, 35, 2,191,188,238, 46,188, 94, 32,148,188, + 23,240, 25, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,232,119,179, 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, + 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67,201, 77, 68, 64,228, 66,111, 64,230, 97,205,191,128,191,149, 60, +116,109, 77,191,248,165,230, 63, 20, 0, 0, 0, 7, 0, 10, 0, 99, 0, 0, 0, 1, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, + 40,155,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 72,156,178, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, + 72,156,178, 3,185, 0, 0, 0, 1, 0, 0, 0,104,157,178, 3, 40,155,178, 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, 68, 65, 84, 65, 0, 0, 10,176, 3,162, 72, 32, 0, 0, 0, 58, 0, 0, 0,114, 63,215, 28,223, 65, 87, 31, 77, -192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74,192, 1,192, 1, - 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, -192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -184,138,163,172, 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, -192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, -192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, -192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, -192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, -191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, - 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, 65, 60, 59,114, - 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, -192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, -192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, 63,255,192, 1, - 90,129, 0,255, 0, 0, 0, 0,193, 6,115,182, 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0, -193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, -191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, 90,129,165,127, - 0, 0, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, - 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, -192,100, 43,147,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, - 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, -191,152, 29, 18,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, - 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, - 63,152, 28,246,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, - 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, - 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,190, 36, 72,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, -192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, - 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, -192,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, -192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, - 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62, - 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 64,215, 30,150, 65, 6,115,151, 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, - 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244,165,127,165,127, - 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14, - 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0, -192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, - 64,190, 35,242, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, 63,255,192, 1, - 90,129, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, - 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240, - 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -184,140,212,127, 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172, - 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181, - 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, -192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147, - 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, 0, 0, 0, 0, -127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, - 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16, - 64,190, 35,245, 0, 0,221, 42,123, 41, 2,255, 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16,192,190, 36, 74, 0, 0,221, 42, -132,215, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,122,176, 0, 0, 1, 42, 0, 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, 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, 3,162, 84, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, +104,157,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72,156,178, 3, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189, +205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, +235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0, +235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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,113, 3, 0, 0, + 69, 4, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,196, 0, 0, 0, +240,250,157, 3,150, 0, 0, 0, 1, 0, 0, 0,200,160,178, 3, 8,154,178, 3, 40,155,178, 3,104,157,178, 3, 2, 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, 0, 0, 0, 0,122, 67,205,204,204,189, +205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, +235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0, +235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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, 68, 65, 84, 65,236, 0, 0, 0,136,158,178, 3,185, 0, 0, 0, + 1, 0, 0, 0,168,159,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,168,159,178, 3,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,136,158,178, 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, 0, 0, 9, 0, 3,162, 84, 32, 0, 0, 0, 55, - 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, - 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, - 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, - 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, - 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 21, - 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 35, 0, 0, 0, 34, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 19, - 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 25, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 28, - 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 22, - 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 33, 0, 0, 0, 34, - 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 28, - 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 26, - 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 34, - 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, - 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 4, - 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, - 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, - 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 22, - 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 42, 0, 0, 0, 34, - 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 45, - 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 57, - 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 34, - 0, 0, 0, 46, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, - 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 47, - 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 50, 0, 0, 0, 34, - 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 56, - 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 50, - 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, - 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, - 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 54, - 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, - 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 68, - 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 69, - 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 72, 0, 0, 0, 34, - 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 34, - 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 50, - 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 6, - 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 34, - 0, 0, 0, 71, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 76, - 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 74, 0, 0, 0, 34, 0, 0, 0, 17, - 0, 0, 0, 73, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 95, 0, 0, 0, 34, - 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 83, - 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,110, 0, 0, 0, 34, - 0, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,110, - 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 88, - 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, - 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0,107, - 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 90, - 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, - 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, - 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, - 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, - 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, - 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, - 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, - 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, - 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, - 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 83, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 60, - 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 93, 0, 0, 0, 34, - 0, 0, 0, 31, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 90, - 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,124, 48, 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 3,162, 94, 32, 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, 0, 85, 86, 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, 3,162, 98, 32, - 0, 0, 0, 6, 0, 0, 0, 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, - 67,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, - 3,162,108, 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,113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, + 79, 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, 68, 65, 84, 65,124, 2, 0, 0,200,160,178, 3,158, 0, 0, 0, + 1, 0, 0, 0,184,165,178, 3,240,250,157, 3,136,158,178, 3,168,159,178, 3, 9, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 45, 96, 1, 0, 0, 0, 0, 62, 0, 0, 0, 32, 0, 1, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0, +225, 2, 0, 0,227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0,227, 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, 68, 65, 84, 65, 0, 0, 3,212, 3,162, 94, 32, 0, 0, 0, 54, 0, 0, 0, 49, - 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, - 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, - 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, - 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, - 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, - 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, - 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, - 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, - 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, - 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, - 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, - 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,108, 3,162, 98, 32, - 0, 0, 0, 65, 0, 0, 0, 49, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 3, 29, 0, - 62, 82, 95, 26, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, - 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,190, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,160, 63, 3, 29, 0,189,188,106,128, 62,186, 20,176, 61,104, 82,144, 62, 91,223,128, 62, 82, 95, 14, 62,186, 21, 0, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,127, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,122, - 63, 3, 28,248, 63, 0,188,188, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, - 63, 0,188,190, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62,181, 84,122, 63, 3, 28,248, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, - 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 79, 65,236, 63, 0,188,188, 63, 41, 47,120, - 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 63, 41, 47,116, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, - 62, 91,224, 32, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84, 61,189,169,104,176, 63, 0,188,185, 61,135, 44, 96, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 51, 62, 91,224, 24, - 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, - 63, 41, 47,116, 63,114,244, 42, 63, 3, 28,244, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 38,207, 51, 62, 91,224, 24, 63, 0,188,185, 61,135, 44, 96, 63, 38,207,248,189,169,109,144, 63, 76,226,112, 61,135, 38, 64, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244,240, 62, 91,221, 4, 63,140,131,180, 62,186, 19,116, 63,114,244, 42, - 63, 3, 28,244, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, - 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216, -189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, - 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, - 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, - 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 64, 63, 3, 28,216,189,188,105,128, - 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, - 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, - 63, 79, 65,244,189,188,105, 96, 63, 41, 47,120,189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, - 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 63, 38,207, 56, - 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, - 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, - 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, - 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, - 63,141,179,111, 63, 0,188,190, 63,160,188,171, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99, 63, 41, 47, 76, - 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, - 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, - 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, - 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,131,172, 22, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, - 63, 27,168,248, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,176, - 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, 62,203,162, 85, - 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,226, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,142, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 63, 27,168,247, - 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, - 63,158,151,227, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 63,131,172, 24, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,251, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, - 62,203,162, 86, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,225, - 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,146, 59, 93,211, 96, 63, 27,168,250, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, - 63, 81,128,149, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 16, 3,162,108, 32, - 0, 0, 0, 59, 0, 0, 0,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -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, 77, 69, 0, 0, 1, 24, - 8,194,125,176, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,136, 96, 8,194,119,192, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, - 97,110,101, 46, 48, 48, 50, 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, 8,194,126,240, 8,194,133, 80, 8,194,134, 32, - 0, 0, 0, 0, 3,162,112, 32, 8,194,130, 32, 0, 0, 0, 0, 8,194,135,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,127, 32, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,128,160, 0, 0, 0, 1, - 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,131,208, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 4, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,126,240, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,127, 32, 0, 0, 1, 42, 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, 3,162,112, 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, @@ -8237,8054 +585,218 @@ char datatoc_preview_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, 68, 65, 84, 65, 0, 0, 2, 40, 3,162,112, 32, 0, 0, 0, 58, 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0, -190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, -191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, -190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, - 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, -191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, -191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, - 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, - 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, - 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, - 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, - 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,128,160, 0, 0, 1, 42, 0, 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, 8,194,130, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,236, 0, 0, 0,120,163,178, 3,185, 0, 0, 0, 1, 0, 0, 0,152,164,178, 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, 68, 65, 84, 65, 0, 0, 1,128, 8,194,130, 32, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, - 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, - 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, - 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, - 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, - 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, - 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, - 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, - 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, - 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,131,208, 0, 0, 1, 42, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 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, 8,194,133, 80, 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, 0, 85, 86, 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, 8,194,134, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,135,176, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,236, 0, 0, 0,152,164,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120,163,178, 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, 68, 65, 84, 65, 0, 0, 0,160, 8,194,133, 80, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, - 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, - 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, - 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, - 8,194,134, 32, 0, 0, 0, 65, 0, 0, 0, 8, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, - 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, - 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,229, 0, 63,125,226,162, 62,137,192, 18, 63,125,226,162, - 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, - 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, - 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,194,135,176, 0, 0, 0, 59, 0, 0, 0, 32, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,136, 96, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,147, 16, 8,194,125,176, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 51, 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, 8,194,137,160, - 8,194,144, 0, 8,194,144,208, 0, 0, 0, 0, 3,162,116, 32, 8,194,140,208, 0, 0, 0, 0, 8,194,146, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,194,137,208, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,139, 80, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,142,128, 0, 0, 0, 3, - 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,137,160, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,137,208, 0, 0, 1, 42, 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, 3,162,116, 32, 0, 0, 0, 0, + 0, 0, 0, 0,113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 79, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,162,116, 32, 0, 0, 0, 58, 0, 0, 0, 23, - 62,204,205, 47,180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, -190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, - 62,204,205, 47,180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, - 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, - 63, 76,205, 0, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, -191, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, -190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, - 63, 76,204,210, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, -191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, -180,144, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, -182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, -190,204,204,216, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, - 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,139, 80, 0, 0, 1, 42, 0, 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, 8,194,140,208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,194,140,208, 0, 0, 0, 55, - 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, - 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, - 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,142,128, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,194,144, 0, 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, 0, 85, 86, 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, 8,194,144,208, - 0, 0, 0, 6, 0, 0, 0, 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, - 67,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, - 8,194,146, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,194,144, 0, 0, 0, 0, 54, 0, 0, 0, 8, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, - 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 96, 8,194,144,208, 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, - 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, - 62,213,229, 0, 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,137,192, 18, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, - 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,194,146, 96, - 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,147, 16, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,154,144, - 8,194,136, 96, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 52, 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, 8,194,148, 80, 8,194,153,240, 8,194,154, 48, 0, 0, 0, 0, 8,194,150, 0, 8,194,152, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,148,128, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 8,194,150,144, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 8,194,152,112, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,179,128, 0, 0, 52, 64, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 2, 63,128, 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, 4, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,148, 80, - 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 94, 32, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,148,128, 0, 0, 1, 42, 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, - 8,194,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 96, 8,194,150, 0, - 0, 0, 0, 58, 0, 0, 0, 4, 63,128, 0, 0, 63,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, - 63,128, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,128, 0, 1,191,127,255,253, - 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, -127,255, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,150,144, 0, 0, 1, 42, 0, 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, 8,194,152, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 48, 8,194,152, 16, 0, 0, 0, 55, - 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,152,112, - 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 8,194,153,240, 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, 0, 85, 86, 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, 8,194,154, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 20, 8,194,153,240, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, - 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 0, 44, 8,194,154, 48, 0, 0, 0, 65, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 1, 24, 8,194,154,144, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,160,128, 8,194,147, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 53, 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, - 8,194,155,208, 3,162,142, 32, 3,162,148, 32, 0, 0, 0, 0, 3,162,120, 32, 3,162,132, 32, 0, 0, 0, 0, 3,162,158, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,156, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,157,128, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,159, 0, - 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, - 63,127,255,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,155,208, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,156, 0, 0, 0, 1, 42, 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, 3,162,120, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,224, 3,162,120, 32, 0, 0, 0, 58, - 0, 0, 0,116, 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, - 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, - 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, - 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, - 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, - 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, - 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 64,190, 35,238, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, - 64, 87, 32, 2, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151, 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, - 64, 87, 30, 62, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, - 64,161, 86,217,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 56, 53,234, 98, -191,215, 33, 38,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,100, 43,135, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, - 64,215, 31,117,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 63,152, 29, 14, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, - 64,215, 31,117, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,190, 36, 72, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64,161, 86,177, - 65, 33, 87,146, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, 64,100, 43,129, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, - 65, 33, 87,146, 63,152, 28,234,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 63,152, 28,246, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, - 65, 33, 87,146,191,152, 29, 30,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,191,152, 29, 18, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, - 65, 33, 87,146,192,100, 43,153,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,100, 43,147, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, - 64,161, 87,190,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33,222, 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,193, 6,115,183, - 64,215, 31,127,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,191,152, 29, 32, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,182, 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, - 64,215, 31,127,192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, - 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, - 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, - 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,138,163,172, 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, - 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, - 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,157,128, 0, 0, 1, 42, 0, 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, 3,162,132, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 9, 72, 3,162,132, 32, 0, 0, 0, 55, 0, 0, 0,198, - 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 84, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 34, - 0, 0, 0, 27, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, - 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, - 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, - 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 19, 0, 0, 0, 34, - 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 13, - 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 14, - 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, - 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 35, - 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 31, 0, 0, 0, 34, - 0, 0, 0, 40, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 39, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0,100, - 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 41, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 36, - 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, - 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,101, - 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 60, - 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 34, - 0, 0, 0, 50, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,115, - 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, - 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, - 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, - 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 46, - 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, - 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 54, - 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, - 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, - 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, - 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 62, - 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 34, - 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, - 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 62, - 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 65, 0, 0, 0, 34, - 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 53, - 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 42, - 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,106, 0, 0, 0, 34, - 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 97, - 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 76, - 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 34, - 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 77, - 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 79, - 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, - 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 83, - 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 34, - 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 93, - 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 91, - 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, - 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, - 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 91, - 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 34, - 0, 0, 0, 81, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 95, - 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, - 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, - 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, - 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, - 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, - 0, 0, 0,103, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, - 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,108, - 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,111, 0, 0, 0, 34, - 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, - 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,110, - 0, 0, 0,111, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,159, 0, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,162,142, 32, - 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, 0, - 85, 86, 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, - 3,162,148, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,162,158, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3,252, 3,162,142, 32, 0, 0, 0, 54, - 0, 0, 0, 51, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, - 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, - 0, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 0, 0, 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, - 0, 0, 0, 53, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, - 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, - 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, - 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, - 0, 0, 0, 75, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, - 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, - 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, - 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, - 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, - 0, 0, 0,112, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, - 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, - 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 8,196, 3,162,148, 32, 0, 0, 0, 65, 0, 0, 0, 51, 63, 27,168,250, 59, 93,211, 96, 62,203,162, 84, - 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,131,172, 21, 59, 93,211, 96, 63, 81,128,146, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,185,131,174, - 59, 93,211, 96, 63,158,151,225, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,149, 59, 93,211, 96, - 63, 27,168,251, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,158,151,226, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,246, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, - 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 24, - 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, - 63,185,131,176, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, - 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,226, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 62,203,162, 86, - 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, - 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,224, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, - 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, - 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, - 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, - 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,140,131, 99, 63, 41, 47, 72, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, - 63,141,179,111, 63, 76,225,174, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, - 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, - 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, - 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, - 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, - 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, - 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, -189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 56, 63, 3, 28,220,189,188,105, 96, 63, 41, 47,120, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, - 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, - 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,200, 63, 79, 65,242,189,188,105, 96, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, - 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, - 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, - 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, - 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, - 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120, -190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, - 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131,180, - 62,186, 19,116, 63,159,140,244, 63, 3, 28, 50, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 62,186, 21, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 76,226,112, 61,135, 38, 64, - 63,114,244,240, 62, 91,221, 4, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 61,135, 44, 96, 62,181, 84, 61, -189,169,104,176, 63, 0,189, 93,190,109, 1, 80, 63, 38,207,248,189,169,109,144, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 76,225,174, 63, 41, 47,116, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 62,186, 21, 0, 63,114,244, 42, 63, 3, 28,244, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, - 61,135, 44, 96, 63, 38,207, 51, 62, 91,224, 24, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, - 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,174, 63, 41, 47,116, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,188, 63, 41, 47,120, 62,181, 84,122, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 52, - 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 14, 62,186, 21, 0, 61,104, 82,144, 62, 91,223,128, - 62, 82, 94,138, 61,135, 43, 48, 62,181, 84,122, 62, 91,224, 32, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, - 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,188, 63, 41, 47,120, 63, 38,207, 52, 63, 79, 65,236, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63, 41, 47,120, 61,104, 84,160, 63, 3, 29, 0, 62, 82, 95, 14, 62,186, 21, 0, - 62,181, 84,122, 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 56, - 63,141,179,111, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,127, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,189,188,106,128, - 62,186, 20,176, 61,104, 84,160, 63, 3, 29, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 48, - 3,162,158, 32, 0, 0, 0, 59, 0, 0, 0,204,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,194,160,128, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,166,112, 8,194,154,144, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 48, 54, 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, 8,194,161,192, 3,162,184, 32, - 3,162,188, 32, 0, 0, 0, 0, 3,162,162, 32, 3,162,174, 32, 0, 0, 0, 0, 3,162,198, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,161,240, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,163,112, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,164,240, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,161,192, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,161,240, 0, 0, 1, 42, 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, 3,162,162, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,176, 3,162,162, 32, 0, 0, 0, 58, 0, 0, 0,114, 63,215, 28,223, - 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, - 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,138,163,172, 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, - 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, - 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, - 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, - 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,182, 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, - 64,215, 31,127,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, - 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112,192,100, 43,147,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112,191,152, 29, 18,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112, 63,152, 28,246,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, - 65, 60, 59,110, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,190, 36, 72,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151, 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,192,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, - 64,161, 86,217,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, - 64, 87, 30, 62, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, - 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 2,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, - 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, - 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, - 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, - 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, - 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 60,152, 10, -191,215, 33, 16, 64,190, 35,245, 0, 0,221, 42,123, 41, 2,255, 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16,192,190, 36, 74, - 0, 0,221, 42,132,215, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,163,112, 0, 0, 1, 42, 0, 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, - 3,162,174, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 9, 0, 3,162,174, 32, - 0, 0, 0, 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, - 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 35, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 20, - 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, - 0, 0, 0, 19, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, - 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 33, - 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 26, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 32, - 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 36, - 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, - 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 44, - 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 39, 0, 0, 0, 34, - 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 42, - 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 70, 0, 0, 0, 34, - 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 34, - 0, 0, 0, 47, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 50, - 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 52, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 55, 0, 0, 0, 34, - 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, - 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, - 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 34, - 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 72, - 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, - 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 25, - 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 34, - 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, - 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 14, - 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 74, 0, 0, 0, 34, - 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 95, - 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 78, - 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, - 0, 0, 0, 84, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,110, - 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 34, - 0, 0, 0, 88, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, - 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 92, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,109, 0, 0, 0, 34, - 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,101, - 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 95, - 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, - 0, 0, 0, 94, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, - 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, - 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, - 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, - 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, - 0, 0, 0,109, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, - 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0,111, 0, 0, 0, 34, - 0, 0, 0, 60, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 93, - 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 33, - 0, 0, 0, 90, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,164,240, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,162,184, 32, - 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, 0, - 85, 86, 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, - 3,162,188, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,162,198, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3,212, 3,162,184, 32, 0, 0, 0, 54, - 0, 0, 0, 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, - 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, - 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, - 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, - 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, - 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, - 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, - 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, - 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, - 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, - 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,108, - 3,162,188, 32, 0, 0, 0, 65, 0, 0, 0, 49, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 3, 29, 0, 62, 82, 95, 26, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, - 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,190, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,160, 63, 3, 29, 0,189,188,106,128, 62,186, 20,176, 61,104, 82,144, 62, 91,223,128, 62, 82, 95, 14, - 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,127, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, - 62,181, 84,122, 63, 3, 28,248, 63, 0,188,188, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, - 63,141,179,111, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63, 3, 28,248, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, - 63, 0,188,185, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 79, 65,236, 63, 0,188,188, - 63, 41, 47,120, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 63, 41, 47,116, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62,181, 84,122, 62, 91,224, 32, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84, 61,189,169,104,176, 63, 0,188,185, 61,135, 44, 96, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 51, - 62, 91,224, 24, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, - 63, 76,225,174, 63, 41, 47,116, 63,114,244, 42, 63, 3, 28,244, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 0,188,185, 61,135, 44, 96, 63, 38,207,248,189,169,109,144, 63, 76,226,112, - 61,135, 38, 64, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244,240, 62, 91,221, 4, 63,140,131,180, 62,186, 19,116, - 63,114,244, 42, 63, 3, 28,244, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, - 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, - 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, - 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, - 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, - 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 64, 63, 3, 28,216, -189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, - 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,200, 63, 79, 65,244,189,188,105, 96, 63, 41, 47,120,189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, - 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, - 63, 38,207, 56, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, - 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, - 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, - 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, - 63,117, 84,102, 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 38,207, 52, 63,141,179,111, 63, 0,188,190, 63,160,188,171, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99, - 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, - 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, - 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, - 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, - 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, - 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,185,131,176, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, - 62,203,162, 85, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,158,151,226, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,142, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, - 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, - 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, - 63,131,172, 24, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,251, 59, 93,211, 96, 62,203,162, 84, - 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,225, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,146, 59, 93,211, 96, 63, 27,168,250, 59, 93,211, 96, 63, 27,168,251, - 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 16, - 3,162,198, 32, 0, 0, 0, 59, 0, 0, 0,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,194,166,112, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,172, 96, 8,194,160,128, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 48, 55, 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, 8,194,167,176, 3,162,224, 32, - 3,162,228, 32, 0, 0, 0, 0, 3,162,202, 32, 3,162,214, 32, 0, 0, 0, 0, 3,162,238, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,167,224, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,169, 96, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,170,224, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,167,176, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,167,224, 0, 0, 1, 42, 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, 3,162,202, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,176, 3,162,202, 32, 0, 0, 0, 58, 0, 0, 0,114, 63,215, 28,223, - 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, - 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,138,163,172, 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, - 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, - 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, - 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, - 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,182, 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, - 64,215, 31,127,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, - 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112,192,100, 43,147,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112,191,152, 29, 18,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112, 63,152, 28,246,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, - 65, 60, 59,110, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,190, 36, 72,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151, 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,192,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, - 64,161, 86,217,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, - 64, 87, 30, 62, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, - 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 2,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, - 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, - 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, - 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, - 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, - 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 60,152, 10, -191,215, 33, 16, 64,190, 35,245, 0, 0,221, 42,123, 41, 2,255, 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16,192,190, 36, 74, - 0, 0,221, 42,132,215, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,169, 96, 0, 0, 1, 42, 0, 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, - 3,162,214, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 9, 0, 3,162,214, 32, - 0, 0, 0, 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, - 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 35, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 20, - 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, - 0, 0, 0, 19, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, - 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 33, - 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, - 0, 0, 0, 26, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 32, - 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 36, - 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, - 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 44, - 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 39, 0, 0, 0, 34, - 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 42, - 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 70, 0, 0, 0, 34, - 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 34, - 0, 0, 0, 47, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 50, - 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 52, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 55, 0, 0, 0, 34, - 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, - 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, - 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, - 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, - 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 34, - 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 72, - 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, - 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 25, - 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 34, - 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, - 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 14, - 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 74, 0, 0, 0, 34, - 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 95, - 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 78, - 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, - 0, 0, 0, 84, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,110, - 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 34, - 0, 0, 0, 88, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, - 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 92, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,109, 0, 0, 0, 34, - 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,101, - 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 95, - 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, - 0, 0, 0, 94, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, - 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, - 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, - 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, - 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, - 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, - 0, 0, 0,109, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, - 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 66, - 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0,111, 0, 0, 0, 34, - 0, 0, 0, 60, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 93, - 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 33, - 0, 0, 0, 90, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,170,224, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,162,224, 32, - 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, 0, - 85, 86, 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, - 3,162,228, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,162,238, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3,212, 3,162,224, 32, 0, 0, 0, 54, - 0, 0, 0, 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, - 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, - 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, - 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, - 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, - 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, - 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, - 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, - 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, - 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, - 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,108, - 3,162,228, 32, 0, 0, 0, 65, 0, 0, 0, 49, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 3, 29, 0, 62, 82, 95, 26, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, - 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,190, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,160, 63, 3, 29, 0,189,188,106,128, 62,186, 20,176, 61,104, 82,144, 62, 91,223,128, 62, 82, 95, 14, - 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,127, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, - 62,181, 84,122, 63, 3, 28,248, 63, 0,188,188, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, - 63,141,179,111, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63, 3, 28,248, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, - 63, 0,188,185, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 79, 65,236, 63, 0,188,188, - 63, 41, 47,120, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 63, 41, 47,116, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62,181, 84,122, 62, 91,224, 32, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84, 61,189,169,104,176, 63, 0,188,185, 61,135, 44, 96, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 51, - 62, 91,224, 24, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, - 63, 76,225,174, 63, 41, 47,116, 63,114,244, 42, 63, 3, 28,244, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 0,188,185, 61,135, 44, 96, 63, 38,207,248,189,169,109,144, 63, 76,226,112, - 61,135, 38, 64, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244,240, 62, 91,221, 4, 63,140,131,180, 62,186, 19,116, - 63,114,244, 42, 63, 3, 28,244, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, - 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, - 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, - 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, - 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, - 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, - 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 64, 63, 3, 28,216, -189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, - 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 61,104, 84,200, 63, 79, 65,244,189,188,105, 96, 63, 41, 47,120,189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, - 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, - 63, 38,207, 56, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, - 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, - 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, - 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, - 63,117, 84,102, 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 38,207, 52, 63,141,179,111, 63, 0,188,190, 63,160,188,171, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99, - 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, - 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, - 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, - 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, - 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, - 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,185,131,176, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, - 62,203,162, 85, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,158,151,226, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,142, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, - 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, - 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, - 63,131,172, 24, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,251, 59, 93,211, 96, 62,203,162, 84, - 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,158,151,225, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,146, 59, 93,211, 96, 63, 27,168,250, 59, 93,211, 96, 63, 27,168,251, - 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 16, - 3,162,238, 32, 0, 0, 0, 59, 0, 0, 0,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,194,172, 96, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,178, 80, 8,194,166,112, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 48, 56, 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, 8,194,173,160, 3,163, 8, 32, - 3,163, 14, 32, 0, 0, 0, 0, 3,162,242, 32, 3,162,254, 32, 0, 0, 0, 0, 3,163, 24, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,173,208, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,175, 80, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,176,208, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,173,160, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,173,208, 0, 0, 1, 42, 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, 3,162,242, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,224, 3,162,242, 32, 0, 0, 0, 58, 0, 0, 0,116, 63,215, 28,223, - 65, 87, 31, 77, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, 64,190, 35,242, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, - 65, 6,115,182, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, 64,190, 35,250, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,138,163,172, 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, - 64,215, 31,175, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, 64,190, 35,250, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, - 64,161, 87,242, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, 64,190, 35,250, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, - 64, 87, 32,107, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113, 64,190, 35,239, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 64,190, 35,238, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 64,190, 35,238, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, - 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,190, 35,244, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, - 63,215, 29,150, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62, 64,190, 35,247, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146, 64,190, 35,242, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, - 64,215, 30,146,192,190, 36, 74, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15, -184, 41, 3,226,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,100, 43,135,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 63,152, 28,246,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,191,152, 29, 18,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,100, 43,147,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33,222, - 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,182, - 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,190, 36, 78, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147,192,190, 36, 74, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,190, 36, 72, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192, 87, 32, 5, 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,191, - 65, 33, 87,148, 64,100, 43,133, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, 64,100, 43,139, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147, 63,152, 29, 0, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 63,152, 29, 12, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147,191,152, 29, 9, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,191,152, 28,253, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147,192,100, 43,142, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,100, 43,136, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, - 64,161, 87,240,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,140,212,127, 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, - 64,215, 31,172,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, - 65, 6,115,181,192,190, 36, 71, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, - 65, 33, 87,147,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,175, 80, 0, 0, 1, 42, 0, 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, 3,162,254, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 9, 72, 3,162,254, 32, 0, 0, 0, 55, 0, 0, 0,198, 0, 0, 0, 21, 0, 0, 0, 82, - 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 18, - 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 34, - 0, 0, 0, 28, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 56, - 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, - 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, - 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, - 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, - 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, - 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, - 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, - 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, - 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, 34, - 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 18, - 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 18, - 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 24, 0, 0, 0, 34, - 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 28, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 29, 0, 0, 0, 34, - 0, 0, 0, 6, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, - 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 23, - 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 33, 0, 0, 0, 34, - 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 98, - 0, 0, 0, 34, 0, 0, 0, 39, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 37, - 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 41, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0, 34, - 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, - 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 68, - 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 34, - 0, 0, 0, 56, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,114, - 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 52, - 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,114, 0, 0, 0, 34, - 0, 0, 0, 42, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, - 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 44, - 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, - 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, - 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 56, - 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, - 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 58, - 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 63, - 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 34, - 0, 0, 0, 58, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, - 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 63, - 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 34, - 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 68, - 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 46, - 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0, 34, - 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0,102, - 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 74, - 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 34, - 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 77, - 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 81, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,112, 0, 0, 0, 34, - 0, 0, 0, 78, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 85, - 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 85, - 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 88, 0, 0, 0, 34, - 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, - 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 92, - 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 34, - 0, 0, 0, 87, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 90, - 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 92, - 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 34, - 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 97, - 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 78, - 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, - 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, - 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, - 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, - 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, - 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,112, 0, 0, 0, 34, - 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, - 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0,112, - 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,111, 0, 0, 0, 34, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,176,208, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,163, 8, 32, 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, 0, 85, 86, 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, 3,163, 14, 32, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 3,163, 24, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3,252, 3,163, 8, 32, 0, 0, 0, 54, 0, 0, 0, 51, 0, 0, 0, 18, - 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 12, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, - 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 42, - 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, - 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 68, - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,115, - 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, - 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, 74, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 73, - 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 0, - 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 50, - 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 98, - 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, - 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,109, - 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, - 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0,108, - 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0,113, - 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0,112, - 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,196, - 3,163, 14, 32, 0, 0, 0, 65, 0, 0, 0, 51, 63, 27,168,250, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 62,203,162, 84, - 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, - 63, 81,128,146, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,225, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,149, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, - 63, 27,168,246, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, - 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,246, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, - 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 24, 59, 93,211, 96, 63, 81,128,142, - 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,185,131,174, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 27,168,247, - 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, - 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,248, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, - 63, 81,128,144, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, - 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, - 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, - 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, - 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 72, - 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,174, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, - 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, - 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, - 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, - 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, - 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120, -190,118,127, 56, 63, 3, 28,220,190,118,127, 56, 63, 3, 28,220,189,188,105, 96, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, 63, 79, 65,242, 62, 82, 95, 26, - 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, 62,181, 84,122, 63,141,179,113, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, - 63, 79, 65,242,189,188,105, 96, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, - 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, - 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, - 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242, -189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, - 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216, -190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, - 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131,180, 62,186, 19,116, 63,159,140,244, - 63, 3, 28, 50, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 76,225,174, 62,186, 21, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 76,226,112, 61,135, 38, 64, 63,114,244,240, 62, 91,221, 4, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 61,135, 44, 96, 62,181, 84, 61,189,169,104,176, 63, 0,189, 93, -190,109, 1, 80, 63, 38,207,248,189,169,109,144, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63, 41, 47,116, - 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 62,186, 21, 0, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,185, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, 61,135, 44, 96, 63, 38,207, 51, - 62, 91,224, 24, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, - 63, 76,225,174, 63, 41, 47,116, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, - 63, 41, 47,120, 62,181, 84,122, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 52, 63, 3, 28,248, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 14, 62,186, 21, 0, 61,104, 82,144, 62, 91,223,128, 62, 82, 94,138, 61,135, 43, 48, - 62,181, 84,122, 62, 91,224, 32, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 62,181, 84,127, - 63, 79, 65,242, 63, 0,188,188, 63, 41, 47,120, 63, 38,207, 52, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 26, 63, 41, 47,120, 61,104, 84,160, 63, 3, 29, 0, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 63, 3, 28,248, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 56, 63,141,179,111, 63, 0,188,188, - 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, - 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,127, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,189,188,106,128, 62,186, 20,176, 61,104, 84,160, - 63, 3, 29, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 48, 3,163, 24, 32, 0, 0, 0, 59, - 0, 0, 0,204,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,178, 80, - 0, 0, 0, 52, 0, 0, 0, 1, 8,194,184, 64, 8,194,172, 96, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, - 48, 48, 57, 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, 8,194,179,144, 3,163, 50, 32, 3,163, 56, 32, 0, 0, 0, 0, - 3,163, 28, 32, 3,163, 40, 32, 0, 0, 0, 0, 3,163, 66, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,179,192, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,181, 64, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,182,192, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, - 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,194,179,144, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,179,192, 0, 0, 1, 42, 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, 3,163, 28, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 10,224, 3,163, 28, 32, 0, 0, 0, 58, 0, 0, 0,116, 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, - 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, - 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, - 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, - 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,142,158,222, 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, - 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 64,190, 35,238, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,191,215, 33,222, - 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43, 64,190, 35,244, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 64,190, 35,239, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,190, 35,244,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15, -184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, - 64,215, 30,146, 64,190, 35,242, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, - 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 56, 53,234, 98,191,215, 33, 38,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, - 64,215, 31,117,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,191,152, 28,250, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, - 64,215, 31,117, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,100, 43,141, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, - 65, 60, 59,112,192,190, 36, 77,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,190, 36, 72, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, - 65, 87, 31, 78, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,100, 43,141, - 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 63,152, 28,246,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, - 65, 87, 31, 78, 63,152, 29, 2,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 63,152, 29, 14, - 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,191,152, 29, 18,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, - 65, 87, 31, 78,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,191,152, 28,250, - 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,100, 43,147,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, - 65, 87, 31, 78,192,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43,192,100, 43,135, - 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, - 63,215, 33, 14,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33,222, 56,135,190,183,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, - 64,215, 31,127, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,182, 64,215, 31,128, 64,100, 43,127, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, - 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, - 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,100, 43,142, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, - 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, - 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, - 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, - 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 63,215, 28,223, - 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,181, 64, - 0, 0, 1, 42, 0, 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, 3,163, 40, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 9, 72, 3,163, 40, 32, 0, 0, 0, 55, 0, 0, 0,198, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 20, - 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 85, 0, 0, 0, 34, - 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 54, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 29, - 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, - 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, - 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, - 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, - 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 20, - 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 22, - 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 25, - 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 29, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 28, - 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 32, - 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 34, - 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 32, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 39, - 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0, 41, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, - 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 51, - 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 34, - 0, 0, 0, 64, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 82, - 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 65, - 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0,115, 0, 0, 0, 34, - 0, 0, 0, 51, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 50, - 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 42, - 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, - 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 48, - 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 54, - 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, - 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, - 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 53, - 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 34, - 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 62, - 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 64, - 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 67, 0, 0, 0, 34, - 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, - 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 51, - 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 34, - 0, 0, 0, 44, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,110, - 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 72, - 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 34, - 0, 0, 0, 75, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 81, - 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 74, - 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0,110, 0, 0, 0, 34, - 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,113, - 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 83, - 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 34, - 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 88, - 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 82, - 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, - 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 91, - 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 93, - 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 96, 0, 0, 0, 34, - 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, - 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 80, - 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 94, 0, 0, 0, 34, - 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, - 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, - 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 34, - 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, - 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, - 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,113, 0, 0, 0, 34, - 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, - 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,106, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,113, 0, 0, 0, 34, - 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,111, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,182,192, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,163, 50, 32, 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, 0, 85, 86, 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, 3,163, 56, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,163, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 3,252, 3,163, 50, 32, 0, 0, 0, 54, 0, 0, 0, 51, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, - 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, - 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, - 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, - 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, - 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, - 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, - 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, - 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, - 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, - 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, - 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, - 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, - 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, - 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, - 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, - 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, - 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,196, 3,163, 56, 32, 0, 0, 0, 65, - 0, 0, 0, 51, 63, 27,168,250, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 63, 27,168,251, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,146, 59, 93,211, 96, - 63, 81,128,149, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, - 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,225, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,149, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, - 63, 81,128,142, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,131,172, 22, - 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 27,168,246, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 24, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, - 63,158,151,226, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, - 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, - 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, - 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, - 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, - 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 72, 63,114,244, 44, 63, 79, 65,236, - 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, - 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,174, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, - 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, - 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, - 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, - 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, - 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220, -190,118,127, 56, 63, 3, 28,220,189,188,105, 96, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, - 63,117, 84,102, 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, - 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, 63, 79, 65,242,189,188,105, 96, - 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, - 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, - 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, - 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, -189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, - 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216, -189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, - 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131,180, 62,186, 19,116, 63,159,140,244, 63, 3, 28, 50, 63,140,131, 99, - 63, 41, 47, 76, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 62,186, 21, 0, - 63, 38,207, 51, 62, 91,224, 24, 63, 76,226,112, 61,135, 38, 64, 63,114,244,240, 62, 91,221, 4, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,185, 61,135, 44, 96, 62,181, 84, 61,189,169,104,176, 63, 0,189, 93,190,109, 1, 80, 63, 38,207,248, -189,169,109,144, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63, 41, 47,116, 63, 38,207, 52, 63, 3, 28,248, - 63, 76,225,174, 62,186, 21, 0, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, - 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, 61,135, 44, 96, 63, 38,207, 51, 62, 91,224, 24, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,174, 63, 41, 47,116, - 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63, 41, 47,120, 62,181, 84,122, - 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 52, 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62, 82, 95, 14, 62,186, 21, 0, 61,104, 82,144, 62, 91,223,128, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84,122, 62, 91,224, 32, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,188, - 63, 41, 47,120, 63, 38,207, 52, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63, 41, 47,120, - 61,104, 84,160, 63, 3, 29, 0, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 56, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, - 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, - 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,127, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, - 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,189,188,106,128, 62,186, 20,176, 61,104, 84,160, 63, 3, 29, 0, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 48, 3,163, 66, 32, 0, 0, 0, 59, 0, 0, 0,204,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,184, 64, 0, 0, 0, 52, 0, 0, 0, 1, - 8,194,190, 48, 8,194,178, 80, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 48, 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, 8,194,185,128, 3,163, 92, 32, 3,163, 96, 32, 0, 0, 0, 0, 3,163, 70, 32, 3,163, 82, 32, - 0, 0, 0, 0, 3,163,106, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,185,176, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,187, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,188,176, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, - 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, - 63,128, 0, 30, 63,128, 0,140, 63,127,255,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,194,185,128, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,185,176, 0, 0, 1, 42, - 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, 3,163, 70, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 10,176, - 3,163, 70, 32, 0, 0, 0, 58, 0, 0, 0,114, 63,215, 28,223, 65, 87, 31, 77,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 64,161, 86,175, 65, 33, 87,144,192,190, 36, 74,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,133,229,243, - 65, 60, 59,112,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147,192,190, 36, 69, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,161, 87,194, 64,215, 31,179,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,208, - 65, 33, 87,146,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 87, 32, 13, 64,161, 87,244,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,226, - 65, 6,115,179,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33, 44, 64, 87, 32,113,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,173, - 64,215, 31,170,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240,192,190, 36, 71, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107,192,190, 36, 69, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,142,158,222, 63,215, 33,239,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,192,100, 43,136, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,100, 43,142, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,100, 43,148, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,191,152, 28,253, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,191,152, 29, 9, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,191,152, 29, 20, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180, 63,152, 29, 12, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 63,152, 29, 0, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 63,152, 28,244, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81, 63,152, 28,232, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,121, - 65, 6,115,181, 64,100, 43,139, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,161, 87,191, 65, 33, 87,148, 64,100, 43,133, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192, 87, 32, 5, 65, 60, 59,114, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,191,215, 33, 32, 65, 87, 31, 81, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,122, - 65, 6,115,180,192,190, 36, 72, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147,192,190, 36, 74, - 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113,192,190, 36, 77, 63,255,192, 1, 90,129, 0,255, - 0, 0, 0, 0,191,215, 33, 36, 65, 87, 31, 81,192,190, 36, 78, 63,255,192, 1, 90,129, 0,255, 0, 0, 0, 0,193, 6,115,182, - 64,215, 31,128, 64,100, 43,127, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127, 63,152, 28,232, - 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,191,152, 29, 32, 90,129,165,127, 0, 0, 2,255, - 0, 0, 0, 0,193, 6,115,183, 64,215, 31,127,192,100, 43,154, 90,129,165,127, 0, 0, 2,255, 0, 0, 0, 0,191,215, 33,222, - 56,135,190,183,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14,192,190, 36, 72, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192,215, 31,170, 64,161, 87,190,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,192,100, 43,135, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,192,100, 43,141, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,100, 43,147,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,192,100, 43,153,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,191,152, 28,250, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78,191,152, 29, 6, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,191,152, 29, 18,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146,191,152, 29, 30,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43, 63,152, 29, 14, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 63,152, 29, 2, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 63,152, 28,246,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 63,152, 28,234,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43, 64,100, 43,141, 0, 0,128, 2, 0, 0, 2,255, 0, 0, 0, 0, 63,215, 28,199, 65, 87, 31, 78, 64,100, 43,135, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,225, 65, 60, 59,110, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 64,161, 86,177, 65, 33, 87,146, 64,100, 43,129,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,184,136, 91,213, - 65,114, 3, 43,192,190, 36, 72,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112,192,190, 36, 77, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,190, 36, 72,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 64,100, 43,135,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151, 64,100, 43,141,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117, 63,152, 29, 2, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 63,152, 29, 14,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,191,152, 29, 6,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, - 65, 6,115,151,191,152, 28,250,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115, 43, 64,215, 31,117,192,100, 43,141, -165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151,192,100, 43,135,165,127,165,127, 0, 0, 2,255, - 0, 0, 0, 0, 63,215, 33, 15,184, 41, 3,226,192,190, 36, 67, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 32, 4, - 63,215, 29,150,192,190, 36, 68, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62,192,190, 36, 69, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217,192,190, 36, 72, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 65, 6,115,159, 64,215, 30,146,192,190, 36, 74,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 65, 6,115,159, - 64,215, 30,146, 64,190, 35,242,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 64,215, 31,127, 64,161, 86,217, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 87,193, 64, 87, 30, 62, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 32, 4, 63,215, 29,150, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 33, 15, -184, 41, 3,226, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,215, 30,150, 65, 6,115,151, 64,190, 35,244, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 64, 87, 29,217, 65, 60, 59,112, 64,190, 35,239,192, 1,192, 1, 90,129, 2,255, - 0, 0, 0, 0,184,136, 91,213, 65,114, 3, 43, 64,190, 35,244,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,192,215, 31,170, - 64,161, 87,190, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,240, 64, 87, 32, 2, 64,190, 35,244, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32,102, 63,215, 33, 14, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,215, 33,222, 56,135,190,183, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 36, - 65, 87, 31, 81, 64,190, 35,238, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192, 87, 32, 7, 65, 60, 59,113, 64,190, 35,239, - 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,192,161, 87,192, 65, 33, 87,147, 64,190, 35,242, 63,255,192, 1, 90,129, 2,255, - 0, 0, 0, 0,192,215, 31,122, 65, 6,115,180, 64,190, 35,244, 63,255,192, 1, 90,129, 2,255, 0, 0, 0, 0,184,142,158,222, - 63,215, 33,239, 64,190, 35,248, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,191, 64, 87, 32,107, 64,190, 35,247, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 87, 29,220, 64,161, 87,240, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64,161, 86,173, 64,215, 31,170, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 44, - 64, 87, 32,113, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,140,212,127, 64,161, 87,242, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,215, 28,201, 64,215, 31,172, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 87, 29,226, 65, 6,115,179, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 13, - 64,161, 87,244, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 37, 64,215, 31,175, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,184,138,163,172, 65, 6,115,181, 64,190, 35,245, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 63,215, 28,208, 65, 33, 87,146, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,161, 87,194, - 64,215, 31,179, 64,190, 35,250, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 87, 32, 6, 65, 6,115,182, 64,190, 35,248, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,215, 33, 18, 65, 33, 87,147, 64,190, 35,247, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,184,133,229,243, 65, 60, 59,112, 64,190, 35,244, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,161, 86,175, - 65, 33, 87,144, 64,190, 35,242,192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 63,215, 28,223, 65, 87, 31, 77, 64,190, 35,242, -192, 1,192, 1, 90,129, 2,255, 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16, 64,190, 35,245, 0, 0,221, 42,123, 41, 2,255, - 0, 0, 0, 0, 56, 60,152, 10,191,215, 33, 16,192,190, 36, 74, 0, 0,221, 42,132,215, 2,255, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,187, 48, 0, 0, 1, 42, 0, 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, 3,163, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 9, 0, 3,163, 82, 32, 0, 0, 0, 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, - 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, - 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, - 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 20, - 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 24, - 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 18, - 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 29, 0, 0, 0, 34, - 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 24, - 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 22, - 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 34, - 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 31, - 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 32, - 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, - 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 37, - 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, - 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 38, - 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 18, - 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 42, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 34, - 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 72, - 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 61, - 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 62, 0, 0, 0, 34, - 0, 0, 0, 49, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 52, - 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 46, - 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57, 0, 0, 0, 34, - 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 52, - 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 50, - 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 34, - 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, - 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 60, - 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34, - 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, - 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 67, - 0, 0, 0, 69, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 34, - 0, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 1, - 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 0, 34, - 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 46, - 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 75, - 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0, 77, 0, 0, 0, 34, - 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 75, - 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 74, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 34, 0, 0, 0, 82, - 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96, 0, 0, 0, 34, - 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 82, - 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0, 83, - 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 34, - 0, 0, 0, 84, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0,106, - 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 89, - 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, - 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0,108, - 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 92, - 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, - 0, 0, 0, 96, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 99, - 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0,101, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, - 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, - 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, - 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34, - 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103, - 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,108, - 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, - 0, 0, 0, 65, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 85, - 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 61, - 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 92, 0, 0, 0, 34, - 0, 0, 0, 32, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 90, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,188,176, 0, 0, 1, 42, 0, 0, 0, 5, 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, 3,163, 92, 32, 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, 0, 85, 86, 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, 3,163, 96, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 3,163,106, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 3,212, 3,163, 92, 32, 0, 0, 0, 54, 0, 0, 0, 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, - 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, - 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, - 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, - 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, - 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, - 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, - 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, - 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, - 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, - 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, - 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, - 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, - 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, - 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, - 0, 0, 0,107, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 8,108, 3,163, 96, 32, 0, 0, 0, 65, 0, 0, 0, 49, 61,104, 84,160, - 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 3, 29, 0, 62, 82, 95, 26, 63, 41, 47,120, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, - 63, 0,188,190, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 3, 29, 0,189,188,106,128, - 62,186, 20,176, 61,104, 82,144, 62, 91,223,128, 62, 82, 95, 14, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 62,181, 84,127, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120, 62,181, 84,122, 63, 3, 28,248, 63, 0,188,188, 63, 41, 47,120, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 52, - 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63, 3, 28,248, - 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 38,207, 52, 63, 79, 65,236, 63, 0,188,188, 63, 41, 47,120, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, - 63, 41, 47,116, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 62, 91,224, 32, 62, 82, 94,138, 61,135, 43, 48, - 62,181, 84, 61,189,169,104,176, 63, 0,188,185, 61,135, 44, 96, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, - 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63, 41, 47,116, 63,114,244, 42, 63, 3, 28,244, - 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 0,188,185, - 61,135, 44, 96, 63, 38,207,248,189,169,109,144, 63, 76,226,112, 61,135, 38, 64, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,114,244,240, 62, 91,221, 4, 63,140,131,180, 62,186, 19,116, 63,114,244, 42, 63, 3, 28,244, 63, 76,225,174, 62,186, 21, 0, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, - 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242, -189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, - 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, - 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, - 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, - 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, - 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, - 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120, -190,118,127, 56, 63, 3, 28,220,190,118,127, 64, 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, - 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, 63, 79, 65,244,189,188,105, 96, 63, 41, 47,120, -189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, - 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 63, 38,207, 56, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, - 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, - 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, - 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, - 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, - 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, - 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,190, 63,160,188,171, - 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, - 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, - 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, - 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, - 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, - 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, - 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, - 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, - 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 63, 81,128,144, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,176, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, - 63,158,151,224, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, - 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, - 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 24, - 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 81,128,142, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 63,158,151,226, - 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, - 63, 81,128,149, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 63, 27,168,251, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,246, - 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,225, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, - 63,131,172, 22, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,146, - 59, 93,211, 96, 63, 27,168,250, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 16, 3,163,106, 32, 0, 0, 0, 59, 0, 0, 0,196,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,190, 48, 0, 0, 0, 52, 0, 0, 0, 1, - 8,194,200,224, 8,194,184, 64, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 49, 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, 8,194,191,112, 8,194,197,208, 8,194,198,160, 0, 0, 0, 0, 3,163,110, 32, 8,194,194,160, - 0, 0, 0, 0, 8,194,200, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,191,160, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,193, 32, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,196, 80, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 76,205, 4, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,194,191,112, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,191,160, 0, 0, 1, 42, - 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, 3,163,110, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, - 3,163,110, 32, 0, 0, 0, 58, 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,193, 32, - 0, 0, 1, 42, 0, 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, 8,194,194,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1,128, 8,194,194,160, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, - 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, - 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, - 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, - 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, - 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, - 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,196, 80, 0, 0, 1, 42, - 0, 0, 0, 5, 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, 8,194,197,208, 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, 0, 85, 86, 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, 8,194,198,160, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,200, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, - 8,194,197,208, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, - 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, - 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,194,198,160, 0, 0, 0, 65, 0, 0, 0, 8, - 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,229, 0, 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,128, 8,194,200, 48, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,200,224, - 0, 0, 0, 52, 0, 0, 0, 1, 8,194,211,144, 8,194,190, 48, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, - 48, 49, 50, 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, 8,194,202, 32, 8,194,208,128, 8,194,209, 80, 0, 0, 0, 0, - 3,163,114, 32, 8,194,205, 80, 0, 0, 0, 0, 8,194,210,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,202, 80, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,203,208, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,207, 0, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,194,202, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,202, 80, 0, 0, 1, 42, 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, 3,163,114, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 2, 40, 3,163,114, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,203,208, 0, 0, 1, 42, 0, 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, 8,194,205, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,194,205, 80, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 6, - 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 14, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 17, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,207, 0, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,194,208,128, 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, 0, 85, 86, 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, 8,194,209, 80, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,210,224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,160, 8,194,208,128, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 96, 8,194,209, 80, - 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 18, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,194,210,224, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,194,211,144, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,222, 64, 8,194,200,224, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 49, 51, 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, 8,194,212,208, 8,194,219, 48, - 8,194,220, 0, 0, 0, 0, 0, 3,163,118, 32, 8,194,216, 0, 0, 0, 0, 0, 8,194,221,144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,213, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,214,128, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,217,176, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,212,208, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,213, 0, 0, 0, 1, 42, 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, 3,163,118, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,118, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,214,128, 0, 0, 1, 42, 0, 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, 8,194,216, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,194,216, 0, 0, 0, 0, 55, 0, 0, 0, 32, - 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, - 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, - 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, - 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,217,176, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,194,219, 48, 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, 0, 85, 86, 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, 8,194,220, 0, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,194,221,144, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,194,219, 48, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, - 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 96, 8,194,220, 0, 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 62,137,192, 18, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,194,221,144, 0, 0, 0, 59, - 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,222, 64, 0, 0, 0, 52, 0, 0, 0, 1, 8,194,232,240, 8,194,211,144, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 52, 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, - 8,194,223,128, 8,194,229,224, 8,194,230,176, 0, 0, 0, 0, 3,163,122, 32, 8,194,226,176, 0, 0, 0, 0, 8,194,232, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,223,176, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,225, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,228, 96, - 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 4, 55, 39,197,172, - 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,223,128, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,223,176, 0, 0, 1, 42, 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, 3,163,122, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,122, 32, 0, 0, 0, 58, - 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,225, 48, 0, 0, 1, 42, 0, 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, - 8,194,226,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,194,226,176, - 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 13, - 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 35, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 6, - 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 35, 0, 0, 0, 16, - 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 35, - 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0, 22, - 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 35, 0, 0, 0, 14, - 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,228, 96, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,194,229,224, - 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, 0, - 85, 86, 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, - 8,194,230,176, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,232, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,194,229,224, 0, 0, 0, 54, - 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, - 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 18, - 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, - 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,194,230,176, 0, 0, 0, 65, 0, 0, 0, 8, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,229, 0, - 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, - 8,194,232, 64, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,232,240, 0, 0, 0, 52, 0, 0, 0, 1, - 8,194,243,160, 8,194,222, 64, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 53, 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, 8,194,234, 48, 8,194,240,144, 8,194,241, 96, 0, 0, 0, 0, 3,163,126, 32, 8,194,237, 96, - 0, 0, 0, 0, 8,194,242,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,234, 96, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,235,224, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,239, 16, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 76,205, 4, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,194,234, 48, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,234, 96, 0, 0, 1, 42, - 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, 3,163,126, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, - 3,163,126, 32, 0, 0, 0, 58, 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,235,224, - 0, 0, 1, 42, 0, 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, 8,194,237, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1,128, 8,194,237, 96, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, - 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, - 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, - 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, - 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, - 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, - 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,194,239, 16, 0, 0, 1, 42, - 0, 0, 0, 5, 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, 8,194,240,144, 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, 0, 85, 86, 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, 8,194,241, 96, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,242,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, - 8,194,240,144, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, - 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, - 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,194,241, 96, 0, 0, 0, 65, 0, 0, 0, 8, - 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,229, 0, 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,128, 8,194,242,240, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,194,243,160, - 0, 0, 0, 52, 0, 0, 0, 1, 8,194,254, 80, 8,194,232,240, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, - 48, 49, 54, 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, 8,194,244,224, 8,194,251, 64, 8,194,252, 16, 0, 0, 0, 0, - 3,163,130, 32, 8,194,248, 16, 0, 0, 0, 0, 8,194,253,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,245, 16, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,246,144, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,194,249,192, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,194,244,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,245, 16, 0, 0, 1, 42, 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, 3,163,130, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 2, 40, 3,163,130, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,194,246,144, 0, 0, 1, 42, 0, 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, 8,194,248, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,194,248, 16, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 6, - 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 14, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 17, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, - 8,194,249,192, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,194,251, 64, 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, 0, 85, 86, 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, 8,194,252, 16, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,194,253,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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,160, 8,194,251, 64, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 96, 8,194,252, 16, - 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 18, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,194,253,160, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,194,254, 80, 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 9, 0, 8,194,243,160, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 49, 55, 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, 8,194,255,144, 8,195, 5,240, - 8,195, 6,192, 0, 0, 0, 0, 3,163,134, 32, 8,195, 2,192, 0, 0, 0, 0, 8,195, 8, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,194,255,192, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 1, 64, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 4,112, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,194,255,144, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,194,255,192, 0, 0, 1, 42, 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, 3,163,134, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,134, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 1, 64, 0, 0, 1, 42, 0, 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, 8,195, 2,192, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,195, 2,192, 0, 0, 0, 55, 0, 0, 0, 32, - 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, - 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, - 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, - 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 4,112, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,195, 5,240, 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, 0, 85, 86, 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, 8,195, 6,192, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,195, 5,240, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, - 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 96, 8,195, 6,192, 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 62,137,192, 18, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,195, 8, 80, 0, 0, 0, 59, - 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 9, 0, 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 19,176, 8,194,254, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 56, 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, - 8,195, 10, 64, 8,195, 16,160, 8,195, 17,112, 0, 0, 0, 0, 3,163,138, 32, 8,195, 13,112, 0, 0, 0, 0, 8,195, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 10,112, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 11,240, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 15, 32, - 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 4, 55, 39,197,172, - 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 10, 64, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 10,112, 0, 0, 1, 42, 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, 3,163,138, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,138, 32, 0, 0, 0, 58, - 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 11,240, 0, 0, 1, 42, 0, 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, - 8,195, 13,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,195, 13,112, - 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 13, - 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 35, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 6, - 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 35, 0, 0, 0, 16, - 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 35, - 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0, 22, - 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 35, 0, 0, 0, 14, - 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 15, 32, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,195, 16,160, - 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, 0, - 85, 86, 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, - 8,195, 17,112, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,195, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,195, 16,160, 0, 0, 0, 54, - 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, - 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 18, - 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, - 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,195, 17,112, 0, 0, 0, 65, 0, 0, 0, 8, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,229, 0, - 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, - 8,195, 19, 0, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 19,176, 0, 0, 0, 52, 0, 0, 0, 1, - 8,195, 30, 96, 8,195, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 57, 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, 8,195, 20,240, 8,195, 27, 80, 8,195, 28, 32, 0, 0, 0, 0, 3,163,142, 32, 8,195, 24, 32, - 0, 0, 0, 0, 8,195, 29,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 21, 32, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 22,160, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 25,208, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 76,205, 4, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,195, 20,240, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 21, 32, 0, 0, 1, 42, - 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, 3,163,142, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, - 3,163,142, 32, 0, 0, 0, 58, 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 22,160, - 0, 0, 1, 42, 0, 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, 8,195, 24, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1,128, 8,195, 24, 32, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, - 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, - 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, - 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, - 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, - 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, - 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 25,208, 0, 0, 1, 42, - 0, 0, 0, 5, 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, 8,195, 27, 80, 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, 0, 85, 86, 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, 8,195, 28, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,195, 29,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, - 8,195, 27, 80, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, - 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, - 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, - 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,195, 28, 32, 0, 0, 0, 65, 0, 0, 0, 8, - 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,229, 0, 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,128, 8,195, 29,176, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 30, 96, - 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 41, 16, 8,195, 19,176, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, - 48, 50, 48, 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, 8,195, 31,160, 8,195, 38, 0, 8,195, 38,208, 0, 0, 0, 0, - 3,163,146, 32, 8,195, 34,208, 0, 0, 0, 0, 8,195, 40, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 31,208, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 33, 80, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 36,128, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 31,160, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 31,208, 0, 0, 1, 42, 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, 3,163,146, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 2, 40, 3,163,146, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,191, 76,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 62, 0, 0, - 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,195, 33, 80, 0, 0, 1, 42, 0, 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, 8,195, 34,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,195, 34,208, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 6, - 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 14, - 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 17, - 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 9, - 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 0, 34, - 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 36,128, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,195, 38, 0, 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, 0, 85, 86, 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, 8,195, 38,208, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,195, 40, 96, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0,160, 8,195, 38, 0, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 96, 8,195, 38,208, - 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 18, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,195, 40, 96, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,195, 41, 16, 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 51,192, 8,195, 30, 96, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69, 80,108, 97,110,101, 46, 48, 50, 49, 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, 8,195, 42, 80, 8,195, 48,176, - 8,195, 49,128, 0, 0, 0, 0, 3,163,150, 32, 8,195, 45,128, 0, 0, 0, 0, 8,195, 51, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 42,128, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 44, 0, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 47, 48, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 42, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 42,128, 0, 0, 1, 42, 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, 3,163,150, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,150, 32, 0, 0, 0, 58, 0, 0, 0, 23, 62,204,205, 47, -180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47, -180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, - 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 44, 0, 0, 0, 1, 42, 0, 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, 8,195, 45,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,195, 45,128, 0, 0, 0, 55, 0, 0, 0, 32, - 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, - 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, - 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, - 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, - 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, - 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 47, 48, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,195, 48,176, 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, 0, 85, 86, 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, 8,195, 49,128, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195, 51, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,195, 48,176, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, - 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 96, 8,195, 49,128, 0, 0, 0, 65, 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 62,137,192, 18, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 8,195, 51, 16, 0, 0, 0, 59, - 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 51,192, 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 62,112, 8,195, 41, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 50, 50, 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, - 8,195, 53, 0, 8,195, 59, 96, 8,195, 60, 48, 0, 0, 0, 0, 3,163,154, 32, 8,195, 56, 48, 0, 0, 0, 0, 8,195, 61,192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 53, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 54,176, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 57,224, - 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 4, 55, 39,197,172, - 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 53, 48, 0, 0, 1, 42, 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, 3,163,154, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 3,163,154, 32, 0, 0, 0, 58, - 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, - 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 47, - 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, - 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0, 63, 76,204,210, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 62,204,204,221, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, - 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, - 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,190,204,204,200, - 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 54,176, 0, 0, 1, 42, 0, 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, - 8,195, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 8,195, 56, 48, - 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 35, - 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 13, - 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 35, 0, 0, 0, 5, - 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 35, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 6, - 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 35, - 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0, 10, - 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 35, 0, 0, 0, 16, - 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 35, - 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0, 22, - 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 35, 0, 0, 0, 14, - 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 57,224, 0, 0, 1, 42, 0, 0, 0, 5, 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, 8,195, 59, 96, - 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, 0, - 85, 86, 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, - 8,195, 60, 48, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 8,195, 61,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 8,195, 59, 96, 0, 0, 0, 54, - 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, - 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, - 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 18, - 0, 0, 0, 17, 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, - 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, - 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 96, 8,195, 60, 48, 0, 0, 0, 65, 0, 0, 0, 8, 62,137,192, 12, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, - 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, - 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,229, 0, - 63,125,226,162, 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, - 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, - 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, - 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, - 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, - 8,195, 61,192, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 62,112, 0, 0, 0, 52, 0, 0, 0, 1, - 8,195, 68, 96, 8,195, 51,192, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,119, 0, 0, 0, 0,112,104,101, -114,101, 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, 8,195, 63,176, 7,248,144, 32, 7,249, 0, 32, 0, 0, 0, 0, 7,247,240, 32, 7,248, 48, 32, - 0, 0, 0, 0, 7,254, 48, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 63,224, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 65, 96, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 66,224, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130, - 0, 0, 7,128, 0, 0, 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, - 64,186,224,117, 64,187, 13, 91, 64,186,240,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, - 8,195, 63,176, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 94, 32, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 63,224, 0, 0, 1, 42, - 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, 7,247,240, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 60, 48, - 7,247,240, 32, 0, 0, 0, 58, 0, 0, 2,130,191,141,136, 28, 62,244,243, 12,192,183, 86,198,231,212, 10,117,130,191, 3,255, - 0, 0, 0, 0,192,131,102,240, 64,119,183, 30,191,199,169,109,166, 58, 84,158,221,230, 3,255, 0, 0, 0, 0, 63,239,108,119, - 64,156, 85,213,192, 40, 58,188, 40,228,106,207,198,137, 3,255, 0, 0, 0, 0, 64,146,135, 95,191, 14, 54, 63,192,102,194,241, -100, 27,243,219,177, 45, 3,255, 0, 0, 0, 0, 62,141, 84,239,192,157,220, 16,192, 73, 2, 14, 6, 8,148, 39,187, 86, 3,255, - 0, 0, 0, 0,192,162,239,132,192, 12,165,206,191,240, 45,150,144,175,207,245,214,251, 3,255, 0, 0, 0, 0,190,141, 84,239, - 64,157,220, 16, 64, 73, 2, 14,249,248,107,217, 68,170, 3,255, 0, 0, 0, 0, 64,162,239,132, 64, 12,165,206, 63,240, 45,150, -111, 81, 48, 11, 41, 5, 3,255, 0, 0, 0, 0, 64,131,102,240,192,119,183, 30, 63,199,169,109, 89,198,171, 98, 34, 26, 3,255, - 0, 0, 0, 0,191,239,108,119,192,156, 85,213, 64, 40, 58,188,215, 28,149, 49, 57,119, 3,255, 0, 0, 0, 0,192,146,135, 95, - 63, 14, 54, 63, 64,102,194,241,155,229, 12, 37, 78,211, 3,255, 0, 0, 0, 0, 63,141,136, 28,190,244,243, 12, 64,183, 86,198, - 24, 44,245,139,125, 65, 3,255, 0, 0, 0, 0,192, 68, 17,114, 64, 35,153,226,192,137, 26,154,189, 6, 55,226,162, 85, 3,255, - 0, 0, 0, 0, 62,230, 40,155, 64, 73,199,239,192,157, 52,176, 9,211, 68,237,148,153, 3,255, 0, 0, 0, 0,191,168, 55,124, - 64,164,177,224,192, 29,144, 58,227, 69,112,132,202, 46, 3,255, 0, 0, 0, 0,192,105, 35, 94,191,129, 88,230,192,143, 14,195, -176, 93,233,233,158, 68, 3,255, 0, 0, 0, 0,192,173, 2, 37, 63,123,187,137,192, 1, 68, 56,137,206, 21,127,211,216, 3,255, - 0, 0, 0, 0, 64, 2,168,234,189, 57,158,231,192,175,149, 65, 44,162,255, 3,136, 11, 3,255, 0, 0, 0, 0, 64,114,159, 19, - 64, 34,226,254,192,106,133,196, 82,225, 55,164,175,228, 3,255, 0, 0, 0, 0,190,249,176,105,192, 39,148, 21,192,166,214,217, -245, 87,198,194,142, 5, 3,255, 0, 0, 0, 0, 64, 54,163,227,192, 78,121, 86,192,125,202, 22, 62, 99,185,120,169, 79, 3,255, - 0, 0, 0, 0,192, 53, 40,241,192,134, 31,200,192, 60,188,229,194, 30,164, 94,191,136, 3,255, 0, 0, 0, 0,192,181,230, 96, -191,119, 24, 33, 63,130, 26,174,131,186,234,231, 22, 56, 3,255, 0, 0, 0, 0,192,163, 93,103, 64, 38,128,136, 63,153,235, 83, -144,100, 56,224, 26, 74, 3,255, 0, 0, 0, 0,192, 36,219,238, 64,165,151,132, 63,109,226,165,199,176,113, 33, 20, 80, 3,255, - 0, 0, 0, 0, 63,111,237, 24, 64,184,174,118, 62,154, 34,212, 20,125,126, 44, 6,148, 3,255, 0, 0, 0, 0, 64,130,244,163, - 64,133, 58,157,190,226, 95,125, 89,119, 91, 5,246, 86, 3,255, 0, 0, 0, 0, 64,181,230, 96, 63,119, 24, 33,191,130, 26,174, -124, 70, 21, 25,233,200, 3,255, 0, 0, 0, 0, 64,163, 93,103,192, 38,128,136,191,153,235, 83,111,156,199, 32,229,182, 3,255, - 0, 0, 0, 0, 64, 36,219,238,192,165,151,132,191,109,226,165, 56, 80,142,223,235,176, 3,255, 0, 0, 0, 0,191,111,237, 24, -192,184,174,118,190,154, 34,212,235,131,129,212,249,108, 3,255, 0, 0, 0, 0,192,130,244,163,192,133, 58,157, 62,226, 95,125, -166,137,164,251, 9,170, 3,255, 0, 0, 0, 0,192, 54,163,227, 64, 78,121, 86, 64,125,202, 22,193,157, 70,136, 86,177, 3,255, - 0, 0, 0, 0, 64, 53, 40,241, 64,134, 31,200, 64, 60,188,229, 61,226, 91,162, 64,120, 3,255, 0, 0, 0, 0, 64,173, 2, 37, -191,123,187,137, 64, 1, 68, 56,118, 50,234,129, 44, 40, 3,255, 0, 0, 0, 0, 63,168, 55,124,192,164,177,224, 64, 29,144, 58, - 28,187,143,124, 53,210, 3,255, 0, 0, 0, 0,192,114,159, 19,192, 34,226,254, 64,106,133,196,173, 31,200, 92, 80, 28, 3,255, - 0, 0, 0, 0,192, 2,168,234, 61, 57,158,231, 64,175,149, 65,211, 94, 0,253,119,245, 3,255, 0, 0, 0, 0, 62,249,176,105, - 64, 39,148, 21, 64,166,214,217, 10,169, 57, 62,113,251, 3,255, 0, 0, 0, 0, 64,105, 35, 94, 63,129, 88,230, 64,143, 14,195, - 79,163, 22, 23, 97,188, 3,255, 0, 0, 0, 0, 64, 68, 17,114,192, 35,153,226, 64,137, 26,154, 66,250,200, 30, 93,171, 3,255, - 0, 0, 0, 0,190,230, 40,155,192, 73,199,239, 64,157, 52,176,246, 45,187, 19,107,103, 3,255, 0, 0, 0, 0,192, 10,178, 37, - 63,201,231,138,192,166,143,149,209,129, 33,140,141,145, 3,255, 0, 0, 0, 0,192,110,132, 3, 64, 85,203,243,192, 66,107,151, -174, 16, 73,158,190,209, 3,255, 0, 0, 0, 0,190,174,161,116, 63,241,152, 81,192,177, 2,110,247,217, 40, 15,134,182, 3,255, - 0, 0, 0, 0, 63,154, 91,138, 64,133,179,218,192,122,222,209, 27, 0, 92, 30,171, 86, 3,255, 0, 0, 0, 0,192, 52, 82, 7, - 64,149,252, 82,192, 5,202, 64,193, 39,101,227,210,181, 3,255, 0, 0, 0, 0, 62,148, 12,179, 64,166,221,251,192, 41, 87,188, - 7,192,113,224,198, 21, 3,255, 0, 0, 0, 0,192, 29,246,216,190,141,156, 17,192,169,167,209,203, 47,250,160,139,137, 3,255, - 0, 0, 0, 0,192,145, 72, 99,191,213,114, 79,192, 83, 35,183,156, 26,219, 3,185, 12, 3,255, 0, 0, 0, 0,192,158, 58,115, - 64, 33,120,129,191,238, 41,198,148,126, 56,116,215,137, 3,255, 0, 0, 0, 0,192,174,158,118,191, 33,148,103,192, 1,156,140, -136,218,240,198,211,203, 3,255, 0, 0, 0, 0, 62,249, 14, 55, 62,102,133, 95,192,186,143,210, 9, 56, 5, 40,128,113, 3,255, - 0, 0, 0, 0, 64, 92, 61,220,190,159,230, 56,192,151, 61, 6, 76, 94,248,242,153,135, 3,255, 0, 0, 0, 0, 64, 60, 86, 7, - 64,119, 48, 60,192, 81, 88, 93, 63,119, 85,124,184,246, 3,255, 0, 0, 0, 0, 64,139, 55,252, 63,132, 95, 62,192,113,216,225, - 95,118, 21, 54,173,107, 3,255, 0, 0, 0, 0,191, 84, 6, 18,191,142, 96,251,192,182, 4, 76,237,158,233, 20,131,109, 3,255, - 0, 0, 0, 0,189,225, 74,109,192,123, 54, 51,192,138,246, 34,253,241,169, 39,162, 1, 3,255, 0, 0, 0, 0, 64,119, 66,153, -191,251,154,127,192,123,220,161, 85, 59,214, 59,170, 34, 3,255, 0, 0, 0, 0, 63,208, 59,201,192,135,182,241,192,108,101,212, - 34,103,162,133,175,160, 3,255, 0, 0, 0, 0,191,169,246,161,192,151,196,235,192, 74,149,170,228, 95,151,253,186,184, 3,255, - 0, 0, 0, 0,192,131,198, 33,192, 84,137,218,192, 32,134, 37,164,247,184, 77,201,167, 3,255, 0, 0, 0, 0,192,179, 61,176, -191,210,110,138,190,228,220, 24,133,210,219,130,244,238, 3,255, 0, 0, 0, 0,192,170,182, 73,190, 90, 16,136, 64, 25,194, 90, -139,224,252, 8, 53,174, 3,255, 0, 0, 0, 0,192,153, 55, 75, 64, 87, 78, 4,190, 62, 54, 12,151,200, 74, 29,250,179, 3,255, - 0, 0, 0, 0,192,161, 19,235, 63,210, 12,207, 64, 31,242,210,146, 50, 34,244, 55,182, 3,255, 0, 0, 0, 0,192, 94, 75, 60, - 64,150,115,189,190,167,211,186,179, 98,102, 49,247,183, 3,255, 0, 0, 0, 0,191,189,191,186, 64,168, 32, 63, 64, 7,100,213, -224,161,114,191, 47, 61, 3,255, 0, 0, 0, 0, 63,186,205,242, 64,177, 65,141,191,154,219,127, 32, 82,120,177,228, 61, 3,255, - 0, 0, 0, 0, 62,175,245, 99, 64,178, 12, 97, 63,228,253,255, 6,247,121, 65, 40, 98, 3,255, 0, 0, 0, 0, 64, 70, 92,226, - 64,150,131, 8,191,204, 77,182, 66,193,103, 37,220, 32, 3,255, 0, 0, 0, 0, 64,152,194,200, 64, 83,155,180, 63, 62,217,154, -104,207, 71,101, 17, 87, 3,255, 0, 0, 0, 0, 64,170,182, 73, 62, 90, 16,136,192, 25,194, 90,116, 32, 3,248,202, 82, 3,255, - 0, 0, 0, 0, 64,179, 61,176, 63,210,110,138, 62,228,220, 24,122, 46, 36,126, 11, 18, 3,255, 0, 0, 0, 0, 64,161, 19,235, -191,210, 12,207,192, 31,242,210,109,206,221, 12,200, 74, 3,255, 0, 0, 0, 0, 64,153, 55, 75,192, 87, 78, 4, 62, 62, 54, 12, -104, 56,181,227, 5, 77, 3,255, 0, 0, 0, 0, 63,189,191,186,192,168, 32, 63,192, 7,100,213, 31, 95,141, 65,208,195, 3,255, - 0, 0, 0, 0, 64, 94, 75, 60,192,150,115,189, 62,167,211,186, 76,158,153,207, 8, 73, 3,255, 0, 0, 0, 0,190,175,245, 99, -192,178, 12, 97,191,228,253,255,249, 9,134,191,215,158, 3,255, 0, 0, 0, 0,191,186,205,242,192,177, 65,141, 63,154,219,127, -223,174,135, 79, 27,195, 3,255, 0, 0, 0, 0,192,152,194,200,192, 83,155,180,191, 62,217,154,151, 49,184,155,238,169, 3,255, - 0, 0, 0, 0,192, 70, 92,226,192,150,131, 8, 63,204, 77,182,189, 63,152,219, 35,224, 3,255, 0, 0, 0, 0,191,208, 59,201, - 64,135,182,241, 64,108,101,212,221,153, 93,123, 80, 96, 3,255, 0, 0, 0, 0,192,119, 66,153, 63,251,154,127, 64,123,220,161, -170,197, 41,197, 85,222, 3,255, 0, 0, 0, 0, 63,169,246,161, 64,151,196,235, 64, 74,149,170, 27,161,104, 3, 69, 72, 3,255, - 0, 0, 0, 0, 64,131,198, 33, 64, 84,137,218, 64, 32,134, 37, 91, 9, 71,179, 54, 89, 3,255, 0, 0, 0, 0, 64,174,158,118, - 63, 33,148,103, 64, 1,156,140,119, 38, 15, 58, 44, 53, 3,255, 0, 0, 0, 0, 64,158, 58,115,192, 33,120,129, 63,238, 41,198, -107,130,199,140, 40,119, 3,255, 0, 0, 0, 0, 64, 52, 82, 7,192,149,252, 82, 64, 5,202, 64, 62,217,154, 29, 45, 75, 3,255, - 0, 0, 0, 0,190,148, 12,179,192,166,221,251, 64, 41, 87,188,248, 64,142, 32, 57,235, 3,255, 0, 0, 0, 0,192, 60, 86, 7, -192,119, 48, 60, 64, 81, 88, 93,192,137,170,132, 71, 10, 3,255, 0, 0, 0, 0,192,139, 55,252,191,132, 95, 62, 64,113,216,225, -160,138,234,202, 82,149, 3,255, 0, 0, 0, 0,192, 92, 61,220, 62,159,230, 56, 64,151, 61, 6,179,162, 7, 14,102,121, 3,255, - 0, 0, 0, 0,190,249, 14, 55,190,102,133, 95, 64,186,143,210,246,200,250,216,127,143, 3,255, 0, 0, 0, 0, 61,225, 74,109, - 64,123, 54, 51, 64,138,246, 34, 2, 15, 86,217, 93,255, 3,255, 0, 0, 0, 0, 63, 84, 6, 18, 63,142, 96,251, 64,182, 4, 76, - 18, 98, 22,236,124,147, 3,255, 0, 0, 0, 0, 64,145, 72, 99, 63,213,114, 79, 64, 83, 35,183, 99,230, 36,253, 70,244, 3,255, - 0, 0, 0, 0, 64, 29,246,216, 62,141,156, 17, 64,169,167,209, 52,209, 5, 96,116,119, 3,255, 0, 0, 0, 0, 64,110,132, 3, -192, 85,203,243, 64, 66,107,151, 81,240,182, 98, 65, 47, 3,255, 0, 0, 0, 0, 64, 10,178, 37,191,201,231,138, 64,166,143,149, - 46,127,222,116,114,111, 3,255, 0, 0, 0, 0,191,154, 91,138,192,133,179,218, 64,122,222,209,229, 0,163,226, 84,170, 3,255, - 0, 0, 0, 0, 62,174,161,116,191,241,152, 81, 64,177, 2,110, 8, 39,215,241,121, 74, 3,255, 0, 0, 0, 0,192, 19, 76, 36, - 64,129,151, 25,192, 98,254,212,206,231, 88, 97,177,131, 3,255, 0, 0, 0, 0,191,175,232, 93, 64, 64, 23,177,192,154,186, 69, -225,227, 66,235,151, 34, 3,255, 0, 0, 0, 0,190,232,190,208, 64,139,160, 93,192,120, 33,191,244,183, 94,205,170,192, 3,255, - 0, 0, 0, 0,192,142,126,210, 63,238, 49, 43,192, 84, 30,112,158,187, 39, 95,182,183, 3,255, 0, 0, 0, 0,192, 97,165,138, - 63, 80, 9, 92,192,147, 74, 20,177,183, 17,233,156, 86, 3,255, 0, 0, 0, 0,192,152, 61, 98,188,106, 63, 87,192, 90, 97, 6, -152,127, 0,251,180,183, 3,255, 0, 0, 0, 0, 64, 14,173,200, 64, 63,183,155,192,144, 75,192, 48,206, 64, 45,156,152, 3,255, - 0, 0, 0, 0, 63,167,162, 95, 63,209, 29,144,192,174,245, 25, 29,250, 36, 75,136,250, 3,255, 0, 0, 0, 0, 64, 68, 62,211, - 63,168, 56, 51,192,153,245, 13, 65,241, 29,192,150,106, 3,255, 0, 0, 0, 0, 64, 36,182, 33,191,220, 38, 34,192,159, 5,150, - 54,233,217,211,146,223, 3,255, 0, 0, 0, 0, 63, 81, 34, 16,191,179, 64,129,192,180, 5,162, 18,242,224, 93,133,111, 3,255, - 0, 0, 0, 0, 63,159, 56,212,192, 68,166,172,192,154,108,212, 27,176,190, 32,149,208, 3,255, 0, 0, 0, 0,191,223, 76,204, -192,101, 32,170,192,137, 83, 65,216,199,178,195,161,198, 3,255, 0, 0, 0, 0,192, 10,249,249,191,244, 52, 62,192,162,236, 25, -208, 9,213, 0,145,102, 3,255, 0, 0, 0, 0,192, 89,207, 42,192, 47, 6,251,192,121,165, 27,182,209,196, 18,169,198, 3,255, - 0, 0, 0, 0,192,176,215,137, 63,241, 62, 25,190,219,254,179,134,179, 39,232,247, 78, 3,255, 0, 0, 0, 0,192,186,150, 28, - 60, 28, 16,150,191, 7, 9,191,128,118, 1,131,245, 77, 3,255, 0, 0, 0, 0,192,181,132, 34, 63, 92, 60, 99, 63,149, 81,217, -131,181, 18,238, 23,252, 3,255, 0, 0, 0, 0,190, 74,242,175, 64,183,173,164,191,145,105,227,250,117,125,160,232, 31, 3,255, - 0, 0, 0, 0,192, 2,227,219, 64,173,164, 96,191, 78, 71,200,212,164,119, 52,238,226, 3,255, 0, 0, 0, 0,191, 92,140,181, - 64,184, 38, 75, 63, 37,148,176,236,224,125,237, 12,159, 3,255, 0, 0, 0, 0, 64,159,104, 75, 63,236, 56,212,192, 29,126,240, -108,211, 41,166,203, 9, 3,255, 0, 0, 0, 0, 64,132,159,215, 64, 97,184, 84,192, 10, 44, 30, 91,176, 76, 19,209, 56, 3,255, - 0, 0, 0, 0, 64,164,122, 95, 64, 44,143,199,191, 68, 78, 53,112, 17, 59, 17,237,185, 3,255, 0, 0, 0, 0, 64, 54,176,255, -192,141, 84,243,192, 36,176,237, 63,192,160, 9,200, 63, 3,255, 0, 0, 0, 0, 64,133,229, 93,192, 68, 21,217,192, 45,226,157, - 90,249,187,187,197, 78, 3,255, 0, 0, 0, 0, 64,129, 56,203,192,130,211, 21,191,143,115,187, 87,252,166,194,229,252, 3,255, - 0, 0, 0, 0,192,104,239,189,192,140,142, 82,191,168,178,178,177,134,158,245,227,155, 3,255, 0, 0, 0, 0,191,253,141, 50, -192,167,155, 52,191,218,181,170,211,125,141,166,219,155, 3,255, 0, 0, 0, 0,192, 41, 58,164,192,167, 34,172, 61,151,232,206, -197,232,141,243, 0, 26, 3,255, 0, 0, 0, 0,192,133,229, 93, 64, 68, 21,217, 64, 45,226,157,165, 7, 68, 69, 58,178, 3,255, - 0, 0, 0, 0,192,129, 56,203, 64,130,211, 21, 63,143,115,187,168, 4, 89, 62, 26, 4, 3,255, 0, 0, 0, 0,192, 54,176,255, - 64,141, 84,243, 64, 36,176,237,192, 64, 95,247, 55,193, 3,255, 0, 0, 0, 0, 63,253,141, 50, 64,167,155, 52, 63,218,181,170, - 44,131,114, 90, 36,101, 3,255, 0, 0, 0, 0, 64, 41, 58,164, 64,167, 34,172,189,151,232,206, 58, 24,114, 13,255,230, 3,255, - 0, 0, 0, 0, 64,104,239,189, 64,140,142, 82, 63,168,178,178, 78,122, 97, 11, 28,101, 3,255, 0, 0, 0, 0, 64,186,150, 28, -188, 28, 16,150, 63, 7, 9,191,127,138,254,125, 10,179, 3,255, 0, 0, 0, 0, 64,181,132, 34,191, 92, 60, 99,191,149, 81,217, -124, 75,237, 18,232, 4, 3,255, 0, 0, 0, 0, 64,176,215,137,191,241, 62, 25, 62,219,254,179,121, 77,216, 24, 8,178, 3,255, - 0, 0, 0, 0, 64, 2,227,219,192,173,164, 96, 63, 78, 71,200, 43, 92,136,204, 17, 30, 3,255, 0, 0, 0, 0, 63, 92,140,181, -192,184, 38, 75,191, 37,148,176, 19, 32,130, 19,243, 97, 3,255, 0, 0, 0, 0, 62, 74,242,175,192,183,173,164, 63,145,105,227, - 5,139,130, 96, 23,225, 3,255, 0, 0, 0, 0,192,132,159,215,192, 97,184, 84, 64, 10, 44, 30,164, 80,179,237, 46,200, 3,255, - 0, 0, 0, 0,192,164,122, 95,192, 44,143,199, 63, 68, 78, 53,143,239,196,239, 18, 71, 3,255, 0, 0, 0, 0,192,159,104, 75, -191,236, 56,212, 64, 29,126,240,147, 45,214, 90, 52,247, 3,255, 0, 0, 0, 0,191,159, 56,212, 64, 68,166,172, 64,154,108,212, -228, 80, 65,224,106, 48, 3,255, 0, 0, 0, 0,192, 36,182, 33, 63,220, 38, 34, 64,159, 5,150,201, 23, 38, 45,109, 33, 3,255, - 0, 0, 0, 0,191, 81, 34, 16, 63,179, 64,129, 64,180, 5,162,237, 14, 31,163,122,145, 3,255, 0, 0, 0, 0, 64, 89,207, 42, - 64, 47, 6,251, 64,121,165, 27, 73, 47, 59,238, 86, 58, 3,255, 0, 0, 0, 0, 63,223, 76,208, 64,101, 32,170, 64,137, 83, 65, - 39, 57, 77, 61, 94, 58, 3,255, 0, 0, 0, 0, 64, 10,249,249, 63,244, 52, 62, 64,162,236, 25, 47,247, 43, 0,110,154, 3,255, - 0, 0, 0, 0, 64,142,126,210,191,238, 49, 43, 64, 84, 30,112, 97, 69,216,161, 73, 73, 3,255, 0, 0, 0, 0, 64,152, 61, 98, - 60,106, 63, 87, 64, 90, 97, 6,103,129,255, 5, 75, 73, 3,255, 0, 0, 0, 0, 64, 97,165,138,191, 80, 9, 92, 64,147, 74, 20, - 78, 73,238, 23, 99,170, 3,255, 0, 0, 0, 0, 62,232,190,208,192,139,160, 93, 64,120, 33,191, 11, 73,161, 51, 85, 64, 3,255, - 0, 0, 0, 0, 64, 19, 76, 36,192,129,151, 25, 64, 98,254,212, 49, 25,167,159, 78,125, 3,255, 0, 0, 0, 0, 63,175,232, 93, -192, 64, 23,177, 64,154,186, 69, 30, 29,189, 21,104,222, 3,255, 0, 0, 0, 0,192, 68, 62,211,191,168, 56, 51, 64,153,245, 13, -190, 15,226, 64,105,150, 3,255, 0, 0, 0, 0,192, 14,173,200,192, 63,183,155, 64,144, 75,192,207, 50,191,211, 99,104, 3,255, - 0, 0, 0, 0,191,167,162, 95,191,209, 29,144, 64,174,245, 25,226, 6,219,181,119, 6, 3,255, 0, 0, 0, 0,191,211,156,158, - 63,132,228,185,192,176,207,190,220,164, 21,231,134,244, 3,255, 0, 0, 0, 0,192, 41, 76, 0, 64, 5,199,190,192,153,157, 83, -198,146, 45, 75,150,246, 3,255, 0, 0, 0, 0,192,125, 83,204, 64,105, 55,169,192, 20,162,244,169, 72, 79,246,206, 82, 3,255, - 0, 0, 0, 0,192, 91,215,178, 64, 62,235,222,192,108,254,190,180,215, 65, 87,175,155, 3,255, 0, 0, 0, 0,191, 59, 63,242, - 63,152,237,210,192,182, 21,251,239,125, 25, 26,131,149, 3,255, 0, 0, 0, 0, 61, 94,230, 86, 64, 35, 30,198,192,169, 15,233, - 0,238, 55, 52,140,135, 3,255, 0, 0, 0, 0, 63,199, 4,220, 64,146,145, 7,192, 83,186,104, 34,109,100,137,184,168, 3,255, - 0, 0, 0, 0, 63, 86,120, 9, 64,109, 91,149,192,142,242, 79, 18,133, 81, 64,158,218, 3,255, 0, 0, 0, 0,192, 95,243,103, - 64,138, 91,221,191,236, 15,186,178,170, 93,219,216, 25, 3,255, 0, 0, 0, 0,192, 5,206, 46, 64,159, 41,121,192, 19, 91,154, -209,230,108, 96,205,226, 3,255, 0, 0, 0, 0, 63,139,200,169, 64,163, 78,198,192, 42,146,201, 24,247,111, 59,197,206, 3,255, - 0, 0, 0, 0,191, 4,128,187, 64,167,181,206,192, 37, 92, 74,245, 57,114, 96,199,145, 3,255, 0, 0, 0, 0,191,231, 16,151, - 61,209,166,160,192,178, 95,167,217,136, 2,196,133,245, 3,255, 0, 0, 0, 0,192, 69,200,163,191, 38,143,178,192,158, 48,148, -188,243,242, 11,147,223, 3,255, 0, 0, 0, 0,192,155,192, 43,191,250, 6,151,192, 39, 82,170,149, 79,212,247,199,231, 3,255, - 0, 0, 0, 0,192,132,118,233,191,173,111,217,192,123,122, 67,165,100,226, 58,170,165, 3,255, 0, 0, 0, 0,192,146, 85,238, - 64, 78,205,178,191,221, 54, 70,156,183, 71,134,218,120, 3,255, 0, 0, 0, 0,192,167,137, 76, 63,227, 31,111,191,251, 57,158, -141,234, 39, 54,213, 59, 3,255, 0, 0, 0, 0,192,170,143, 39,191,183, 15,167,191,252, 85,251,139,217,223,169,213, 13, 3,255, - 0, 0, 0, 0,192,175,214, 8, 62, 53,124,177,192, 2,241,206,136, 23, 3, 89,211, 92, 3,255, 0, 0, 0, 0,190,160,160, 77, - 62,182, 20, 9,192,186,232,108,248, 8, 7,241,128,128, 3,255, 0, 0, 0, 0, 63,163,144, 33, 61,186,144,151,192,183, 47, 50, - 27, 97, 2, 19,130,252, 3,255, 0, 0, 0, 0, 64,129,179,222,190,224,147,234,192,134,180, 38, 89, 83,246, 64,164,218, 3,255, - 0, 0, 0, 0, 64, 49,138,114,190, 57, 97,246,192,165, 76, 57, 60,250,251,247,143,138, 3,255, 0, 0, 0, 0, 64, 27,158,249, - 64,141,118,197,192, 62,196, 58, 52, 90, 97, 70,191, 90, 3,255, 0, 0, 0, 0, 64, 89,244, 98, 64, 79,120, 8,192, 96,128, 65, - 74, 8, 71, 39,179,151, 3,255, 0, 0, 0, 0, 64,144,100, 13, 62,118,214,200,192,110,205, 64, 98,182, 4, 37,174,161, 3,255, - 0, 0, 0, 0, 64,131,202, 42, 63,231,161, 60,192,112,245,142, 90, 10, 38,255,173,209, 3,255, 0, 0, 0, 0,191,122, 51,149, -190,163,151, 52,192,184,157, 15,234,118,250, 36,129,248, 3,255, 0, 0, 0, 0,191, 42,113, 5,191,241,112, 31,192,176,119, 15, -241, 93,215, 84,135,135, 3,255, 0, 0, 0, 0, 61,172, 55, 60,192,143, 64, 22,192,113,246,164, 2, 27,157,132,174, 71, 3,255, - 0, 0, 0, 0,190,154,173,167,192, 83,224,111,192,154,169,198,249,136,183, 89,150,211, 3,255, 0, 0, 0, 0, 64,136,133,151, -191,162,249, 9,192,115,219,106, 93,175,229, 47,173, 3, 3,255, 0, 0, 0, 0, 64, 89,124,110,192, 40, 6,135,192,127,195,223, - 74,120,199, 31,168,208, 3,255, 0, 0, 0, 0, 63,117,248,244,192,148, 90,109,192, 93, 0,123, 20, 8,154, 66,180,249, 3,255, - 0, 0, 0, 0, 64, 17, 0,162,192,113,196, 63,192,119,239, 52, 49, 10,173, 64,171,144, 3,255, 0, 0, 0, 0,191, 7,217,162, -192,156,117, 21,192, 75,238,222,245,139,149, 20,186,108, 3,255, 0, 0, 0, 0,192, 6,144,171,192,144,158,112,192, 69,241,198, -210,156,157, 55,188,115, 3,255, 0, 0, 0, 0,192,148,238,110,192, 50,109,115,192, 13,197,187,153,170,195,231,208, 17, 3,255, - 0, 0, 0, 0,192, 96,252, 79,192,115, 40,140,192, 48,165,116,178,226,173, 98,195,236, 3,255, 0, 0, 0, 0,192,172,228,100, -191,248,128,217,191,150, 93, 8,138, 91,213, 53,229, 86, 3,255, 0, 0, 0, 0,192,182,171, 82,191,168,250,216, 62,147, 15, 15, -131,122,226,250, 5,203, 3,255, 0, 0, 0, 0,192,160, 73,215, 62, 49,165,124, 64, 66, 85,232,147, 33, 4, 84, 67, 42, 3,255, - 0, 0, 0, 0,192,178, 89,171,191, 24,115,192, 63,221,116, 78,134,129,243, 64, 38, 50, 3,255, 0, 0, 0, 0,192,143,206, 51, - 64,105,250,133,191, 97,251,119,158, 85, 80, 53,235,193, 3,255, 0, 0, 0, 0,192,160, 32, 62, 64, 65, 38,163, 63, 3,117,164, -146,236, 66, 24, 10,193, 3,255, 0, 0, 0, 0,192,155,108,216, 63,141,255, 59, 64, 69,117,189,150, 61, 23,119, 68, 42, 3,255, - 0, 0, 0, 0,192,164, 27, 85, 64, 9, 78,244, 63,239,193, 87,144, 33, 46,128, 41, 73, 3,255, 0, 0, 0, 0,192,117, 35,134, - 64,138,152, 39,191,116, 86, 73,171,230, 94, 2,234, 73, 3,255, 0, 0, 0, 0,192, 67,220, 35, 64,159,218, 6, 62,155,103,242, -188,240,108,215, 6, 55, 3,255, 0, 0, 0, 0,191, 99, 79,130, 64,164,182,215, 64, 42, 4, 10,237,118,112, 50, 58,190, 3,255, - 0, 0, 0, 0,192, 3, 86,161, 64,168,205, 14, 63,197, 55, 60,211,148,115, 31, 33,255, 3,255, 0, 0, 0, 0, 63,215,101,229, - 64,168,141, 84,191,248, 90, 16, 37, 11,114,148,212,159, 3,255, 0, 0, 0, 0, 63,155, 52, 99, 64,183, 17,198,190,235,199,232, - 26,159,124,192,245,120, 3,255, 0, 0, 0, 0, 61, 10,179,105, 64,169,185, 25, 64, 31,119,120, 0, 77,115,101, 55, 96, 3,255, - 0, 0, 0, 0, 63, 37,198,143, 64,183,120,123, 63,135,108,160, 13,240,125, 8, 23,144, 3,255, 0, 0, 0, 0, 64, 32,174,180, - 64,155, 13, 65,192, 8,167,238, 53,247,105,245,208,163, 3,255, 0, 0, 0, 0, 64,104,199, 69, 64,143,135,177,191,132, 12, 41, - 79, 10, 98, 10,233, 31, 3,255, 0, 0, 0, 0, 64,159,134,121, 64, 49,245, 49, 63,169,166,210,109, 27, 59,242, 29,190, 3,255, - 0, 0, 0, 0, 64,143,133, 52, 64,113,200,119, 62, 29,206,186, 98, 20, 82, 39, 3,190, 3,255, 0, 0, 0, 0, 64,160, 73,215, -190, 49,165,124,192, 66, 85,232,108,223,251,172,188,214, 3,255, 0, 0, 0, 0, 64,178, 89,171, 63, 24,115,192,191,221,116, 78, -121,127, 12,192,217,206, 3,255, 0, 0, 0, 0, 64,172,228,100, 63,248,128,217, 63,150, 93, 8,117,165, 42,203, 26,170, 3,255, - 0, 0, 0, 0, 64,182,171, 82, 63,168,250,216,190,147, 15, 15,124,134, 29, 6,250, 53, 3,255, 0, 0, 0, 0, 64,155,108,216, -191,141,255, 59,192, 69,117,189,105,195,232,137,187,214, 3,255, 0, 0, 0, 0, 64,164, 27, 85,192, 9, 78,244,191,239,193, 87, -111,223,209,128,214,183, 3,255, 0, 0, 0, 0, 64,143,206, 51,192,105,250,133, 63, 97,251,119, 97,171,175,203, 20, 63, 3,255, - 0, 0, 0, 0, 64,160, 32, 62,192, 65, 38,163,191, 3,117,164,109, 20,189,232,245, 63, 3,255, 0, 0, 0, 0, 63, 99, 79,130, -192,164,182,215,192, 42, 4, 10, 18,138,143,206,197, 66, 3,255, 0, 0, 0, 0, 64, 3, 86,161,192,168,205, 14,191,197, 55, 60, - 44,108,140,225,222, 1, 3,255, 0, 0, 0, 0, 64,117, 35,134,192,138,152, 39, 63,116, 86, 73, 84, 26,161,254, 21,183, 3,255, - 0, 0, 0, 0, 64, 67,220, 35,192,159,218, 6,190,155,103,242, 67, 16,147, 41,249,201, 3,255, 0, 0, 0, 0,189, 10,179,105, -192,169,185, 25,192, 31,119,120,255,179,140,155,200,160, 3,255, 0, 0, 0, 0,191, 37,198,143,192,183,120,123,191,135,108,160, -242, 16,130,248,232,112, 3,255, 0, 0, 0, 0,191,215,101,229,192,168,141, 84, 63,248, 90, 16,218,245,141,108, 43, 97, 3,255, - 0, 0, 0, 0,191,155, 52, 99,192,183, 17,198, 62,235,199,232,229, 97,131, 64, 10,136, 3,255, 0, 0, 0, 0,192,159,134,121, -192, 49,245, 49,191,169,166,210,146,229,196, 14,226, 66, 3,255, 0, 0, 0, 0,192,143,133, 52,192,113,200,119,190, 29,206,186, -157,236,173,217,252, 66, 3,255, 0, 0, 0, 0,192, 32,174,180,192,155, 13, 65, 64, 8,167,238,202, 9,150, 11, 47, 93, 3,255, - 0, 0, 0, 0,192,104,199, 69,192,143,135,177, 63,132, 12, 41,176,246,157,246, 22,225, 3,255, 0, 0, 0, 0,191,117,248,244, - 64,148, 90,109, 64, 93, 0,123,235,248,101,190, 75, 7, 3,255, 0, 0, 0, 0,192, 17, 0,162, 64,113,196, 63, 64,119,239, 52, -206,246, 82,192, 84,112, 3,255, 0, 0, 0, 0,192,136,133,151, 63,162,249, 9, 64,115,219,106,162, 81, 26,209, 82,253, 3,255, - 0, 0, 0, 0,192, 89,124,110, 64, 40, 6,135, 64,127,195,223,181,136, 56,225, 87, 48, 3,255, 0, 0, 0, 0, 63, 7,217,162, - 64,156,117, 21, 64, 75,238,222, 10,117,106,236, 69,148, 3,255, 0, 0, 0, 0, 64, 6,144,171, 64,144,158,112, 64, 69,241,198, - 45,100, 98,201, 67,141, 3,255, 0, 0, 0, 0, 64,148,238,110, 64, 50,109,115, 64, 13,197,187,102, 86, 60, 25, 47,239, 3,255, - 0, 0, 0, 0, 64, 96,252, 79, 64,115, 40,140, 64, 48,165,116, 77, 30, 82,158, 60, 20, 3,255, 0, 0, 0, 0, 64,170,143, 39, - 63,183, 15,167, 63,252, 85,251,116, 39, 32, 87, 42,243, 3,255, 0, 0, 0, 0, 64,175,214, 8,190, 53,124,177, 64, 2,241,206, -119,233,252,167, 44,164, 3,255, 0, 0, 0, 0, 64,146, 85,238,192, 78,205,178, 63,221, 54, 70, 99, 73,184,122, 37,136, 3,255, - 0, 0, 0, 0, 64,167,137, 76,191,227, 31,111, 63,251, 57,158,114, 22,216,202, 42,197, 3,255, 0, 0, 0, 0, 64, 95,243,103, -192,138, 91,221, 63,236, 15,186, 77, 86,162, 37, 39,231, 3,255, 0, 0, 0, 0, 64, 5,206, 46,192,159, 41,121, 64, 19, 91,154, - 46, 26,147,160, 50, 30, 3,255, 0, 0, 0, 0,191,139,200,169,192,163, 78,198, 64, 42,146,201,231, 9,144,197, 58, 50, 3,255, - 0, 0, 0, 0, 63, 4,128,187,192,167,181,206, 64, 37, 92, 74, 10,199,141,160, 56,111, 3,255, 0, 0, 0, 0,192, 27,158,249, -192,141,118,197, 64, 62,196, 58,203,166,158,186, 64,166, 3,255, 0, 0, 0, 0,192, 89,244, 98,192, 79,120, 8, 64, 96,128, 65, -181,248,184,217, 76,105, 3,255, 0, 0, 0, 0,192,144,100, 13,190,118,214,200, 64,110,205, 64,157, 74,251,219, 81, 95, 3,255, - 0, 0, 0, 0,192,131,202, 42,191,231,161, 60, 64,112,245,142,165,246,217, 1, 82, 47, 3,255, 0, 0, 0, 0,192,129,179,222, - 62,224,147,234, 64,134,180, 38,166,173, 9,192, 91, 38, 3,255, 0, 0, 0, 0,192, 49,138,114, 62, 57, 97,246, 64,165, 76, 57, -195, 6, 4, 9,112,118, 3,255, 0, 0, 0, 0, 62,160,160, 77,190,182, 20, 9, 64,186,232,108, 7,248,248, 15,127,128, 3,255, - 0, 0, 0, 0,191,163,144, 33,189,186,144,151, 64,183, 47, 50,228,159,253,237,125, 4, 3,255, 0, 0, 0, 0,189,172, 55, 60, - 64,143, 64, 22, 64,113,246,164,253,229, 98,124, 81,185, 3,255, 0, 0, 0, 0, 62,154,173,167, 64, 83,224,111, 64,154,169,198, - 6,120, 72,167,105, 45, 3,255, 0, 0, 0, 0, 63,122, 51,149, 62,163,151, 52, 64,184,157, 15, 21,138, 5,220,126, 8, 3,255, - 0, 0, 0, 0, 63, 42,113, 5, 63,241,112, 31, 64,176,119, 15, 14,163, 40,172,120,121, 3,255, 0, 0, 0, 0, 64,155,192, 43, - 63,250, 6,151, 64, 39, 82,170,106,177, 43, 9, 56, 25, 3,255, 0, 0, 0, 0, 64,132,118,233, 63,173,111,217, 64,123,122, 67, - 90,156, 29,198, 85, 91, 3,255, 0, 0, 0, 0, 63,231, 16,151,189,209,166,160, 64,178, 95,167, 38,120,253, 60,122, 11, 3,255, - 0, 0, 0, 0, 64, 69,200,163, 63, 38,143,178, 64,158, 48,148, 67, 13, 13,245,108, 33, 3,255, 0, 0, 0, 0, 64,125, 83,204, -192,105, 55,169, 64, 20,162,244, 86,184,176, 10, 49,174, 3,255, 0, 0, 0, 0, 64, 91,215,178,192, 62,235,222, 64,108,254,190, - 75, 41,190,169, 80,101, 3,255, 0, 0, 0, 0, 63,211,156,158,191,132,228,185, 64,176,207,190, 35, 92,234, 25,121, 12, 3,255, - 0, 0, 0, 0, 64, 41, 76, 0,192, 5,199,190, 64,153,157, 83, 57,110,210,181,105, 10, 3,255, 0, 0, 0, 0,191,199, 4,220, -192,146,145, 7, 64, 83,186,104,221,147,155,119, 71, 88, 3,255, 0, 0, 0, 0,191, 86,120, 9,192,109, 91,149, 64,142,242, 79, -237,123,174,192, 97, 38, 3,255, 0, 0, 0, 0, 63, 59, 63,242,191,152,237,210, 64,182, 21,251, 16,131,230,230,124,107, 3,255, - 0, 0, 0, 0,189, 94,230, 86,192, 35, 30,198, 64,169, 15,233,255, 18,200,204,115,121, 3,255, 0, 0, 0, 0,192, 46, 27,208, - 64, 86,104,124,192,126, 52, 85,197,137, 72,226,168,134, 3,255, 0, 0, 0, 0,191,234,168, 82, 64,149, 62, 87,192, 67, 12,118, -217, 5,101,188,188,210, 3,255, 0, 0, 0, 0,192, 16, 10,186, 64, 52,106,249,192,147,253,210,206,182, 62,131,155,198, 3,255, - 0, 0, 0, 0,190,240, 33, 93, 64, 71,199,191,192,158, 47,142,245,214, 69, 40,148,199, 3,255, 0, 0, 0, 0,187, 71, 46, 19, - 64,115,240,194,192,142,166,175,254,240, 82,161,158, 66, 3,255, 0, 0, 0, 0,191,101,194,188, 64,154, 84, 17,192, 77,193,240, -235, 76,104,214,185,142, 3,255, 0, 0, 0, 0,192,115,246,246, 64, 15, 86,183,192,118,168, 51,172,249, 47,229,171, 45, 3,255, - 0, 0, 0, 0,192,160, 1,101, 63,184,146, 47,192, 45, 38,153,146,225, 30, 96,196,102, 3,255, 0, 0, 0, 0,192, 85,229,215, - 63,218,178,166,192,144, 55,183,182, 38, 37,133,158,110, 3,255, 0, 0, 0, 0,192,104,178,151,189,205,107,245,192,147, 60,175, -175,178,253,205,156, 91, 3,255, 0, 0, 0, 0,192,136, 81,192,191, 4,239, 55,192,127,222, 24,163,130,245,158,168, 35, 3,255, - 0, 0, 0, 0,192,164,241, 70, 62,251,218,102,192, 48, 82,143,143,222, 11,210,195,110, 3,255, 0, 0, 0, 0, 63,173,230,209, - 64, 71,135,231,192,152,234, 27, 29,148, 67, 4,151, 11, 3,255, 0, 0, 0, 0, 64, 67,103,158, 64, 51,206, 82,192,132,168, 39, - 66,203, 60, 63,164,242, 3,255, 0, 0, 0, 0, 63,100,131,136, 64, 27, 95, 16,192,168,115, 4, 20,122, 53,138,141,143, 3,255, - 0, 0, 0, 0, 63,217,154, 77, 63, 78, 69,185,192,177,196,221, 38, 53, 17,236,135, 42, 3,255, 0, 0, 0, 0, 64, 37,195,107, - 63, 36,213, 4,192,167, 33, 20, 55,151, 14,194,141,168, 3,255, 0, 0, 0, 0, 64, 94,139,103, 63,250,146,153,192,137,141, 72, - 75, 19, 43,156,161,245, 3,255, 0, 0, 0, 0, 64, 21,195,231,191,101, 58,236,192,169,178,218, 49,247,236, 31,139,218, 3,255, - 0, 0, 0, 0, 64, 48, 32,142,192, 32,140,155,192,145, 1,195, 59, 3,200,178,156,204, 3,255, 0, 0, 0, 0, 63,185,155, 70, -191, 59,202, 12,192,180, 86,163, 32,149,239, 73,133, 91, 3,255, 0, 0, 0, 0, 62, 43, 97, 29,192, 2,118,144,192,175,231,125, - 4,106,210,160,136,103, 3,255, 0, 0, 0, 0, 62,196,116, 97,192, 56,176, 10,192,162,239,120, 8,164,194, 20,144, 81, 3,255, - 0, 0, 0, 0, 64, 5, 2,185,192, 76,105,217,192,142,173,135, 45,218,187, 79,158, 56, 3,255, 0, 0, 0, 0,191,144,243,163, -192, 73, 41,252,192,154, 66,148,230,134,188, 73,150,107, 3,255, 0, 0, 0, 0,192, 20,133,147,192,124, 55,234,192,107, 3,176, -204,110,170,196,175,164, 3,255, 0, 0, 0, 0,192, 60,186, 42,191,189,128,219,192,155, 43, 23,191, 41,222,189,150,199, 3,255, - 0, 0, 0, 0,191,172,164, 52,192, 18,240,106,192,167, 58,141,226, 76,204,213,142,128, 3,255, 0, 0, 0, 0,192,100,171, 12, -191,243, 33,249,192,135,221,106,178,248,214,143,162,143, 3,255, 0, 0, 0, 0,192, 74, 78,195,192, 96,206,241,192, 94, 88, 98, -188, 4,179, 34,179,129, 3,255, 0, 0, 0, 0,192,177,110, 41, 63,186, 30, 81,191,158,249,105,134,160, 30,165,229, 86, 3,255, - 0, 0, 0, 0,192,172,138, 45, 64, 17,149,114, 62,200,203,127,137,251, 48,171, 9, 56, 3,255, 0, 0, 0, 0,192,182, 94, 10, - 63, 1, 5, 48,191,165, 81, 86,131,156, 12, 24,228, 94, 3,255, 0, 0, 0, 0,192,186,224,117,190,247,234, 37, 62,126, 56,147, -128,132,246,101, 6, 46, 3,255, 0, 0, 0, 0,192,184, 78,204,189, 89,193, 19, 63,141,163,187,130, 22,254,208, 22,241, 3,255, - 0, 0, 0, 0,192,174,232,105, 63,224,187,151, 63,153,183,156,136,137, 38,137, 25, 3, 3,255, 0, 0, 0, 0,191, 68,118, 42, - 64,176,173,101,191,233,132,114,238, 57,120,142,216,217, 3,255, 0, 0, 0, 0, 62,191,172, 81, 64,186,208, 67,190,216,163,195, - 7, 75,127,131,247,159, 3,255, 0, 0, 0, 0,191,218, 2,113, 64,171,151,172,191,212, 25,114,219,243,117,116,220, 30, 3,255, - 0, 0, 0, 0,192, 21,244,251, 64,172, 12, 28, 61,128,151, 13,205,229,117,196, 1,226, 3,255, 0, 0, 0, 0,191,223, 39, 51, - 64,177, 94,248, 63, 76,122,104,217,155,121, 3, 16, 65, 3,255, 0, 0, 0, 0, 61, 28,208, 72, 64,187, 13, 91, 62,245,215, 64, - 0,187,127,168, 9, 66, 3,255, 0, 0, 0, 0, 64,142, 93, 45, 64, 14,137, 70,192, 70,202,147, 96,241, 49,173,188,202, 3,255, - 0, 0, 0, 0, 64,173, 23,106, 63,182,131,157,191,225,176,175,118, 7, 32, 20,218, 72, 3,255, 0, 0, 0, 0, 64,128,203, 78, - 64, 69, 14,124,192, 61, 0, 55, 88,168, 66, 80,191,199, 3,255, 0, 0, 0, 0, 64,133,175,133, 64,121,149, 28,191,168,212, 51, - 92, 4, 84, 86,227,170, 3,255, 0, 0, 0, 0, 64,149,211, 8, 64, 94,166, 84,191, 29, 24, 68,101,221, 76, 30,241,113, 3,255, - 0, 0, 0, 0, 64,175,169, 31, 63,237,176,138,191,103,168, 15,119,152, 40,128,235, 11, 3,255, 0, 0, 0, 0, 64, 57, 78,122, -192,120, 12,224,192, 84, 56, 7, 64, 62,171,247,183,239, 3,255, 0, 0, 0, 0, 64, 48, 74, 0,192,155,165,245,191,227, 87,208, - 61, 38,150, 68,217,192, 3,255, 0, 0, 0, 0, 64,100,108, 85,192, 76, 47,115,192, 88,224,149, 77,102,185, 90,182,131, 3,255, - 0, 0, 0, 0, 64,150,191,173,192, 55,233,227,191,254,101,198,102,121,192, 79,213, 73, 3,255, 0, 0, 0, 0, 64,148, 97,119, -192, 89, 33,200,191,150,225, 24,101, 7,182, 44,229, 20, 3,255, 0, 0, 0, 0, 64, 86,171, 75,192,150, 83, 36,191,133, 36, 22, - 72,220,153,131,232, 32, 3,255, 0, 0, 0, 0,192, 81,251,116,192,139, 80,115,192, 10,124, 57,185, 81,160, 53,208,254, 3,255, - 0, 0, 0, 0,192,122,239, 70,192,138,220, 53,190,227, 86,113,171, 68,160,132,246,195, 3,255, 0, 0, 0, 0,192, 28, 50, 14, -192,153, 4,245,192, 23, 39,141,201,187,151,215,205, 33, 3,255, 0, 0, 0, 0,191,189,123, 34,192,178,168,203,191,130,106,149, -222,209,134, 63,234,158, 3,255, 0, 0, 0, 0,191,232,127,176,192,178,107,177,189,236,189, 47,216, 65,134,100,252, 66, 3,255, - 0, 0, 0, 0,192, 90,168, 53,192,152, 83,169, 62,133,201,227,181, 29,152, 77, 4,136, 3,255, 0, 0, 0, 0,192,150,191,173, - 64, 55,233,227, 63,254,101,198,153,135, 63,177, 42,183, 3,255, 0, 0, 0, 0,192,100,108, 85, 64, 76, 47,115, 64, 88,224,149, -178,154, 70,166, 73,125, 3,255, 0, 0, 0, 0,192,148, 97,119, 64, 89, 33,200, 63,150,225, 24,154,249, 73,212, 26,236, 3,255, - 0, 0, 0, 0,192, 86,171, 75, 64,150, 83, 36, 63,133, 36, 22,183, 36,102,125, 23,224, 3,255, 0, 0, 0, 0,192, 48, 74, 0, - 64,155,165,245, 63,227, 87,208,194,218,105,188, 38, 64, 3,255, 0, 0, 0, 0,192, 57, 78,122, 64,120, 12,224, 64, 84, 56, 7, -191,194, 84, 9, 72, 17, 3,255, 0, 0, 0, 0, 63,189,123, 34, 64,178,168,203, 63,130,106,149, 33, 47,121,193, 21, 98, 3,255, - 0, 0, 0, 0, 64, 28, 50, 14, 64,153, 4,245, 64, 23, 39,141, 54, 69,104, 41, 50,223, 3,255, 0, 0, 0, 0, 63,232,127,176, - 64,178,107,177, 61,236,189, 47, 39,191,121,156, 3,190, 3,255, 0, 0, 0, 0, 64, 90,168, 53, 64,152, 83,169,190,133,201,227, - 74,227,103,179,251,120, 3,255, 0, 0, 0, 0, 64,122,239, 70, 64,138,220, 53, 62,227, 86,113, 84,188, 95,124, 9, 61, 3,255, - 0, 0, 0, 0, 64, 81,251,116, 64,139, 80,115, 64, 10,124, 57, 70,175, 95,203, 47, 2, 3,255, 0, 0, 0, 0, 64,186,224,117, - 62,247,234, 37,190,126, 56,147,127,124, 9,155,249,210, 3,255, 0, 0, 0, 0, 64,182, 94, 10,191, 1, 5, 48, 63,165, 81, 86, -124,100,243,232, 27,162, 3,255, 0, 0, 0, 0, 64,184, 78,204, 61, 89,193, 19,191,141,163,187,125,234, 1, 48,233, 15, 3,255, - 0, 0, 0, 0, 64,174,232,105,191,224,187,151,191,153,183,156,119,119,217,119,230,253, 3,255, 0, 0, 0, 0, 64,172,138, 45, -192, 17,149,114,190,200,203,127,118, 5,207, 85,246,200, 3,255, 0, 0, 0, 0, 64,177,110, 41,191,186, 30, 81, 63,158,249,105, -121, 96,225, 91, 26,170, 3,255, 0, 0, 0, 0, 64, 21,244,251,192,172, 12, 28,189,128,151, 13, 50, 27,138, 60,254, 30, 3,255, - 0, 0, 0, 0, 63,218, 2,113,192,171,151,172, 63,212, 25,114, 36, 13,138,140, 35,226, 3,255, 0, 0, 0, 0, 63,223, 39, 51, -192,177, 94,248,191, 76,122,104, 38,101,134,253,239,191, 3,255, 0, 0, 0, 0,189, 28,208, 72,192,187, 13, 91,190,245,215, 64, -255, 69,128, 88,246,190, 3,255, 0, 0, 0, 0,190,191,172, 81,192,186,208, 67, 62,216,163,195,248,181,128,125, 8, 97, 3,255, - 0, 0, 0, 0, 63, 68,118, 42,192,176,173,101, 63,233,132,114, 17,199,135,114, 39, 39, 3,255, 0, 0, 0, 0,192,133,175,133, -192,121,149, 28, 63,168,212, 51,163,252,171,170, 28, 86, 3,255, 0, 0, 0, 0,192,128,203, 78,192, 69, 14,124, 64, 61, 0, 55, -167, 88,189,176, 64, 57, 3,255, 0, 0, 0, 0,192,175,169, 31,191,237,176,138, 63,103,168, 15,136,104,215,128, 20,245, 3,255, - 0, 0, 0, 0,192,149,211, 8,192, 94,166, 84, 63, 29, 24, 68,154, 35,179,226, 14,143, 3,255, 0, 0, 0, 0,192,173, 23,106, -191,182,131,157, 63,225,176,175,137,249,223,236, 37,184, 3,255, 0, 0, 0, 0,192,142, 93, 45,192, 14,137, 70, 64, 70,202,147, -159, 15,206, 83, 67, 54, 3,255, 0, 0, 0, 0,192, 5, 2,185, 64, 76,105,217, 64,142,173,135,210, 38, 68,177, 97,200, 3,255, - 0, 0, 0, 0,190,196,116, 97, 64, 56,176, 10, 64,162,239,120,247, 92, 61,236,111,175, 3,255, 0, 0, 0, 0,192, 48, 32,142, - 64, 32,140,155, 64,145, 1,195,196,253, 55, 78, 99, 52, 3,255, 0, 0, 0, 0,192, 21,195,231, 63,101, 58,236, 64,169,178,218, -206, 9, 19,225,116, 38, 3,255, 0, 0, 0, 0,191,185,155, 70, 63, 59,202, 12, 64,180, 86,163,223,107, 16,183,122,165, 3,255, - 0, 0, 0, 0,190, 43, 97, 29, 64, 2,118,144, 64,175,231,125,251,150, 45, 96,119,153, 3,255, 0, 0, 0, 0, 64, 74, 78,195, - 64, 96,206,241, 64, 94, 88, 98, 67,252, 76,222, 76,127, 3,255, 0, 0, 0, 0, 64,100,171, 12, 63,243, 33,249, 64,135,221,106, - 77, 8, 41,113, 93,113, 3,255, 0, 0, 0, 0, 64, 20,133,147, 64,124, 55,234, 64,107, 3,176, 51,146, 85, 60, 80, 92, 3,255, - 0, 0, 0, 0, 63,144,243,164, 64, 73, 41,252, 64,154, 66,148, 25,122, 67,183,105,149, 3,255, 0, 0, 0, 0, 63,172,164, 52, - 64, 18,240,106, 64,167, 58,141, 29,180, 51, 43,113,128, 3,255, 0, 0, 0, 0, 64, 60,186, 42, 63,189,128,219, 64,155, 43, 23, - 64,215, 33, 67,105, 57, 3,255, 0, 0, 0, 0, 64,160, 1,101,191,184,146, 47, 64, 45, 38,153,109, 31,225,160, 59,154, 3,255, - 0, 0, 0, 0, 64,115,246,246,192, 15, 86,183, 64,118,168, 51, 83, 7,208, 27, 84,211, 3,255, 0, 0, 0, 0, 64,164,241, 70, -190,251,218,102, 64, 48, 82,143,112, 34,244, 46, 60,146, 3,255, 0, 0, 0, 0, 64,136, 81,192, 63, 4,239, 55, 64,127,222, 24, - 92,126, 10, 98, 87,221, 3,255, 0, 0, 0, 0, 64,104,178,151, 61,205,107,245, 64,147, 60,175, 80, 78, 2, 51, 99,165, 3,255, - 0, 0, 0, 0, 64, 85,229,215,191,218,178,166, 64,144, 55,183, 73,218,218,123, 97,146, 3,255, 0, 0, 0, 0, 63,101,194,188, -192,154, 84, 17, 64, 77,193,240, 20,180,151, 42, 70,114, 3,255, 0, 0, 0, 0, 59, 71, 46, 19,192,115,240,194, 64,142,166,175, - 1, 16,173, 95, 97,190, 3,255, 0, 0, 0, 0, 63,234,168, 82,192,149, 62, 87, 64, 67, 12,118, 38,251,154, 68, 67, 46, 3,255, - 0, 0, 0, 0, 64, 46, 27,208,192, 86,104,124, 64,126, 52, 85, 58,119,183, 30, 87,122, 3,255, 0, 0, 0, 0, 64, 16, 10,186, -192, 52,106,249, 64,147,253,210, 49, 74,193,125,100, 58, 3,255, 0, 0, 0, 0, 62,240, 33, 93,192, 71,199,191, 64,158, 47,142, - 10, 42,186,216,107, 57, 3,255, 0, 0, 0, 0,192, 94,139,103,191,250,146,153, 64,137,141, 72,180,237,212,100, 94, 11, 3,255, - 0, 0, 0, 0,192, 37,195,107,191, 36,213, 4, 64,167, 33, 20,200,105,241, 62,114, 88, 3,255, 0, 0, 0, 0,192, 67,103,158, -192, 51,206, 82, 64,132,168, 39,189, 53,195,193, 91, 14, 3,255, 0, 0, 0, 0,191,173,230,209,192, 71,135,231, 64,152,234, 27, -226,108,188,252,104,245, 3,255, 0, 0, 0, 0,191,217,154, 77,191, 78, 69,185, 64,177,196,221,217,203,238, 20,120,214, 3,255, - 0, 0, 0, 0,191,100,131,136,192, 27, 95, 16, 64,168,115, 4,235,134,202,118,114,113, 3,255, 0, 0, 0, 0,192, 37,220,139, - 64,141,135,245,192, 54,173,114,199, 45, 96, 95,193,211, 3,255, 0, 0, 0, 0,192, 84,119,204, 64,130, 73, 93,192, 38,107,212, -183, 58, 88,223,199,137, 3,255, 0, 0, 0, 0,192, 67, 76,208, 64,111,120, 62,192, 85, 89, 14,189, 80, 81,196,183,140, 3,255, - 0, 0, 0, 0,191,238,147, 68, 64,100,230,166,192,136, 9,234,215,216, 78,130,163, 59, 3,255, 0, 0, 0, 0,191,109,149, 30, - 64,111, 18, 40,192,141,100,171,235, 37, 81,201,159,199, 3,255, 0, 0, 0, 0,191,178,237,144, 64,136,136, 25,192,113, 1,121, -225,117, 92,189,173, 62, 3,255, 0, 0, 0, 0, 63, 66, 82,214, 64,152,115,128,192, 85, 25,164, 16,241,104, 27,183,126, 3,255, - 0, 0, 0, 0,189,171,155,119, 64,155, 40,138,192, 83, 96,113,254,128,105,196,183,238, 3,255, 0, 0, 0, 0, 62,194,138, 67, - 64,138, 97,177,192,124,158, 75, 8,112, 94,134,170, 29, 3,255, 0, 0, 0, 0,191, 94,106,158, 64, 30,106,167,192,167,240,254, -236,229, 53,187,141,105, 3,255, 0, 0, 0, 0,191,229,114, 22, 64, 20, 96,193,192,162,167,253,217, 22, 50, 93,144,244, 3,255, - 0, 0, 0, 0,191,162,210, 45, 63,224,211,233,192,174, 67,184,228, 69, 37,245,136,244, 3,255, 0, 0, 0, 0,192,152, 61, 37, - 64, 14, 9,230,192, 39,179,137,152, 85, 48,183,198,226, 3,255, 0, 0, 0, 0,192,140,187,232, 64, 62, 96, 6,192, 30,247,107, -160, 7, 65, 68,202, 11, 3,255, 0, 0, 0, 0,192,132,134,116, 64, 40,130, 40,192, 77,207,237,165,139, 57,149,186, 30, 3,255, - 0, 0, 0, 0,192,129,129, 12, 63,173,129,231,192,128,125,159,167, 62, 29, 15,168,123, 3,255, 0, 0, 0, 0,192,134,112,254, - 62,207,146,126,192,130, 19,159,164, 15, 9,119,167,117, 3,255, 0, 0, 0, 0,192,149,121,189, 63,111,192,142,192, 90, 95, 76, -154, 95, 20,107,180,236, 3,255, 0, 0, 0, 0,192,162, 65, 12,191,149, 84, 11,192, 44,202,172,145, 60,230, 47,197, 75, 3,255, - 0, 0, 0, 0,192,165,120, 74,190,167, 78, 95,192, 48, 51,139,143, 54,248,140,195,244, 3,255, 0, 0, 0, 0,192,150,161, 61, -191, 89,221,107,192, 89,113,118,153, 40,237, 79,182, 35, 3,255, 0, 0, 0, 0,192, 66, 56, 52, 62,139, 40,206,192,160,116, 21, -190, 13, 6, 19,146,121, 3,255, 0, 0, 0, 0,192, 56,120,245, 63,154,213,118,192,158,227, 81,193, 81, 26, 47,147,133, 3,255, - 0, 0, 0, 0,192, 22,104,220, 63, 40,221,204,192,170,137,115,205, 16, 14, 89,139,117, 3,255, 0, 0, 0, 0, 64, 39,143,145, - 64, 94, 49,190,192,124, 27,165, 56,238, 75,252,170, 43, 3,255, 0, 0, 0, 0, 64, 6,168,130, 64,130,132,190,192,105, 96, 12, - 45,226, 89, 91,176,173, 3,255, 0, 0, 0, 0, 63,222,169, 76, 64,104,107,205,192,136,142,150, 38, 23, 79,105,163, 33, 3,255, - 0, 0, 0, 0, 63,229,207,137, 64, 22, 63, 30,192,161,235,207, 39,198, 50,227,145,127, 3,255, 0, 0, 0, 0, 64, 14, 11,239, - 63,191,114,175,192,166,208,254, 48,133, 33, 81,142, 87, 3,255, 0, 0, 0, 0, 64, 43,222,239, 64, 11,226,212,192,151, 71,227, - 58, 33, 47,140,152, 91, 3,255, 0, 0, 0, 0, 64,124,245, 0, 62,187, 32, 27,192,138, 6, 57, 86,138, 7,176,162, 2, 3,255, - 0, 0, 0, 0, 64,112, 75, 42, 63,152, 42,228,192,139, 44, 25, 82, 0, 25,159,161, 31, 3,255, 0, 0, 0, 0, 64, 82,218,178, - 63, 1,247,178,192,154,129,211, 72, 35, 11, 4,150,217, 3,255, 0, 0, 0, 0, 63,104,203,208, 63,113, 6,146,192,183, 5,108, - 19,132, 20,150,131, 49, 3,255, 0, 0, 0, 0, 62,251, 68, 26, 63,228, 38,111,192,178, 48,114, 10,139, 38,158,134,109, 3,255, - 0, 0, 0, 0, 61,149, 78,163, 63,137, 25, 65,192,184,102,234, 1, 54, 23, 52,130, 34, 3,255, 0, 0, 0, 0, 64, 80,140, 98, -191,238,205,169,192,144, 69, 83, 71, 70,215,145,157,173, 3,255, 0, 0, 0, 0, 64,109, 39,177,191,147,213,155,192,140,143,238, - 81, 57,230,247,160, 77, 3,255, 0, 0, 0, 0, 64, 66,225,100,191,131,191,146,192,157, 18,152, 66,178,233,128,149, 25, 3,255, - 0, 0, 0, 0, 63,220, 24,190,191,202,163,163,192,171,244,160, 37, 99,220,199,138,196, 3,255, 0, 0, 0, 0, 63,133,219,227, -192, 17, 47,172,192,169,160, 93, 23,126,206,164,140, 68, 3,255, 0, 0, 0, 0, 63,247,202, 46,192, 27,140, 23,192,158,252,116, - 41,217,203, 77,147, 32, 3,255, 0, 0, 0, 0, 63, 68,220, 36,192,132,143, 24,192,130,105, 20, 16,163,165, 66,167, 72, 3,255, - 0, 0, 0, 0, 63,185,255, 60,192,108,244,215,192,138, 7,129, 31,113,175, 11,161,251, 3,255, 0, 0, 0, 0, 63, 19, 18,220, -192, 98,186,168,192,148,136, 66, 12,155,178,121,154,241, 3,255, 0, 0, 0, 0,187,172,119,131,191,162,209,182,192,183, 73,170, -255,209,228,144,130,251, 3,255, 0, 0, 0, 0, 63, 40,230,165,191, 24,111,246,192,185,150, 50, 14, 19,243, 18,129,113, 3,255, - 0, 0, 0, 0,190, 50, 45,123,190,230, 16,213,192,186,240,160,251,231,246,124,128,109, 3,255, 0, 0, 0, 0,191,199, 22,221, -192,134,211, 71,192,113,161, 37,222, 98,163,255,173,157, 3,255, 0, 0, 0, 0,191, 58,131,171,192,140,178, 57,192,115,174,214, -240,105,159,201,173, 11, 3,255, 0, 0, 0, 0,191,112,119,228,192,115, 46, 49,192,139,222,186,235,152,172,221,160,217, 3,255, - 0, 0, 0, 0,191,254, 75,122,192, 50, 36, 18,192,152, 70, 84,211,253,195, 46,152, 87, 3,255, 0, 0, 0, 0,192, 52,239,190, -192, 22,186,193,192,145,240,166,194,167,204, 3,156,108, 3,255, 0, 0, 0, 0,192, 39, 23, 51,192, 76,245, 14,192,132,248,105, -199, 29,186,137,164,200, 3,255, 0, 0, 0, 0,192,140,137,202,192, 33,234, 4,192, 60,117,152,159,215,200,216,192, 6, 3,255, - 0, 0, 0, 0,192,115,176, 68,192, 68, 49, 85,192, 79,173, 65,172,178,189, 81,185, 81, 3,255, 0, 0, 0, 0,192,128,173,131, -192, 14,170, 50,192,105, 71,247,168, 30,207, 64,176,189, 3,255, 0, 0, 0, 0,192, 22, 80,230,191,141,155, 50,192,168, 95,108, -205, 3,232, 6,141, 19, 3,255, 0, 0, 0, 0,191,194,113, 96,191,195,184,166,192,174,160, 31,222,205,222,245,136,227, 3,255, - 0, 0, 0, 0,191,213,244,249,191, 52, 33, 10,192,178, 94,248,219,172,241, 3,134, 48, 3,255, 0, 0, 0, 0,192,167, 26, 30, - 64, 42, 11, 62,190,159,163,199,142, 45, 58, 26,248,236, 3,255, 0, 0, 0, 0,192,157,242, 15, 64, 63, 35,177,191,132,230,242, -148,115, 65,134,233, 39, 3,255, 0, 0, 0, 0,192,169,163, 58, 64, 14,207,184,191,148, 92, 43,140,122, 48,250,230,193, 3,255, - 0, 0, 0, 0,192,184, 83,241, 63,117,241, 33,190,248, 69,204,130, 32, 20,245,246, 22, 3,255, 0, 0, 0, 0,192,186,178, 88, - 62,226, 33,180, 62,165,211, 69,128,153, 10, 65, 6,196, 3,255, 0, 0, 0, 0,192,181,194,100, 63,178, 37,227, 62,191, 51, 65, -131,199, 29,217, 7,201, 3,255, 0, 0, 0, 0,192,168, 68,140, 63, 57,100,162, 64, 31, 41, 90,141, 91, 15,195, 54,175, 3,255, - 0, 0, 0, 0,192,173,114,185, 63,162, 11,147, 63,237,131,136,137,204, 27,106, 40,187, 3,255, 0, 0, 0, 0,192,178, 82, 90, - 62,168, 0,181, 63,231, 64,125,134,136, 7, 78, 39,175, 3,255, 0, 0, 0, 0,192,185, 52,235,191, 83,185,191,190,252,176, 39, -129,201,237,211,244,241, 3,255, 0, 0, 0, 0,192,182,222, 95,190,161, 32,178,191,165, 92, 48,131, 90,248,208,227,211, 3,255, - 0, 0, 0, 0,192,179,119, 52,191,147,204,223,191,160,141,116,133,169,230,113,228,103, 3,255, 0, 0, 0, 0, 63, 35, 88,109, - 64,182,186,129,191,152, 8,207, 14, 5,124,127,229,202, 3,255, 0, 0, 0, 0, 63, 99, 54,226, 64,174,134,172,191,250, 98, 96, - 19,180,118,244,213, 14, 3,255, 0, 0, 0, 0, 61, 60,195,150, 64,177,121, 46,191,245, 6,174, 1, 84,120,249,214, 55, 3,255, - 0, 0, 0, 0,191,145,160,228, 64,181, 59,121,191,123,252,246,231, 63,123,214,235, 42, 3,255, 0, 0, 0, 0,191,188,166, 29, - 64,181,120,167,189,165,224, 4,224, 81,123,253,253,203, 3,255, 0, 0, 0, 0,191, 9,186, 26, 64,186,142,104,190,126, 74,128, -243,158,127, 69,250, 88, 3,255, 0, 0, 0, 0,191, 19,205,179, 64,175,145, 33, 63,253,151,102,243,125,119,171, 43,167, 3,255, - 0, 0, 0, 0,190,134,114,163, 64,183, 94, 81, 63,157,210, 73,250, 40,124,240, 27, 49, 3,255, 0, 0, 0, 0,191,151,217,253, - 64,178, 89, 90, 63,178,246,210,230, 89,121,146, 30,187, 3,255, 0, 0, 0, 0,192, 50,200,107, 64,164, 21, 4,191, 18,252,143, -194,229,111,189,243, 58, 3,255, 0, 0, 0, 0,192, 29,140,219, 64,163,216,164,191,187,160,163,202, 2,111,148,224, 27, 3,255, - 0, 0, 0, 0,192, 76, 63, 8, 64,152, 92,149,191,157, 6,201,185,254,103,184,229, 25, 3,255, 0, 0, 0, 0, 64,167, 31,102, - 63,133,113, 18,192, 29,150,122,113,214, 22,149,202, 5, 3,255, 0, 0, 0, 0, 64,157, 48,115, 63, 33,183, 74,192, 72,172, 21, -107, 50, 13,106,187, 91, 3,255, 0, 0, 0, 0, 64,151, 48,250, 63,186,157,117,192, 74, 37,236,103, 41, 31,126,187, 23, 3,255, - 0, 0, 0, 0, 64,148, 31,118, 64, 46, 99,144,192, 21,237, 95,101,101, 59,141,205,115, 3,255, 0, 0, 0, 0, 64,150,177, 40, - 64, 73,250,101,191,189,252,104,103, 13, 68,113,223, 39, 3,255, 0, 0, 0, 0, 64,164, 67, 59, 64, 19,116,106,191,209,145, 96, -111,204, 50,223,219,255, 3,255, 0, 0, 0, 0, 64,168, 99, 9, 64, 32,173,184, 63, 27, 16,129,114,228, 54,189, 13,164, 3,255, - 0, 0, 0, 0, 64,174, 1,225, 64, 12,167, 65,190, 38, 1,199,118,149, 48, 17,252,195, 3,255, 0, 0, 0, 0, 64,160,156,172, - 64, 66,121, 23,188, 53,253,220,109,155, 66, 25, 0, 0, 3,255, 0, 0, 0, 0, 64,106,184,230, 64,133, 83,117,191,243, 95, 76, - 79,202, 90,251,214, 77, 3,255, 0, 0, 0, 0, 64,101,166,116, 64,111,107, 67,192, 47,233, 69, 78, 23, 81,219,196, 34, 3,255, - 0, 0, 0, 0, 64, 68, 20,109, 64,139, 9,202,192, 29,255,124, 66,138, 95, 22,202, 6, 3,255, 0, 0, 0, 0, 64, 12,138, 46, -192,156,168,195,192, 23,240, 99, 47,172,149, 54,203,252, 3,255, 0, 0, 0, 0, 63,201,189,110,192,154, 28, 48,192, 60,148,180, - 34, 2,150,195,191,147, 3,255, 0, 0, 0, 0, 64, 17, 55, 21,192,140, 67,125,192, 75, 8,118, 49, 61,160, 50,186,221, 3,255, - 0, 0, 0, 0, 64,100,126, 85,192,114,211,103,192, 43,176,187, 78, 60,172,241,198, 2, 3,255, 0, 0, 0, 0, 64,133,112, 29, -192,104, 45,168,191,249, 44, 95, 90,154,176, 96,213, 48, 3,255, 0, 0, 0, 0, 64, 95,193,192,192,138, 5,221,191,239,219, 42, - 76,181,162, 61,214,177, 3,255, 0, 0, 0, 0, 64,134, 21, 28,192,130,231,185, 62,133,210,175, 91,128,166,182, 6, 33, 3,255, - 0, 0, 0, 0, 64,115,101,128,192,142,100,106,190,205,174,214, 83, 32,159, 12,247,127, 3,255, 0, 0, 0, 0, 64,142,250,187, -192,113,123,178,190,242,120, 90, 97, 99,173,142,245,244, 3,255, 0, 0, 0, 0, 64,149, 83,115,192, 24,118, 25,192, 41, 5, 96, -101,195,204, 61,198, 36, 3,255, 0, 0, 0, 0, 64,130, 97,236,192, 34,248,181,192, 87,132, 49, 89, 17,200,184,182,144, 3,255, - 0, 0, 0, 0, 64,144,103,186,191,234, 9, 91,192, 80,226,150, 98,152,216,121,184,152, 3,255, 0, 0, 0, 0,192,136, 74,208, -192,121,117,231,191,133,193, 32,162,248,171, 42,232,249, 3,255, 0, 0, 0, 0,192,144, 84, 31,192, 87, 19, 24,191,211, 65, 53, -157, 74,182,248,219,224, 3,255, 0, 0, 0, 0,192,123, 90, 7,192,121,238,107,191,247,227,115,170, 22,171, 1,213,218, 3,255, - 0, 0, 0, 0,192, 54,112,161,192,156, 77, 94,191,196,107,207,193,198,149, 23,223, 32, 3,255, 0, 0, 0, 0,192, 22, 41, 24, -192,169,197, 1,191, 84, 68,191,204, 45,140,105,237,172, 3,255, 0, 0, 0, 0,192, 75,243, 73,192,156, 16, 86,191, 33,150,180, -186,216,149, 63,241,194, 3,255, 0, 0, 0, 0,192, 19,246,140,192,166, 60,148, 63,182, 70, 11,205,164,142,159, 31,127, 3,255, - 0, 0, 0, 0,192, 58, 21, 17,192,160,209,224, 63, 88,100,103,192,202,146, 72, 18,171, 3,255, 0, 0, 0, 0,192, 4,252,151, -192,174, 89, 71, 63, 38, 93,215,210,148,137, 55, 14,122, 3,255, 0, 0, 0, 0,191,150,176, 53,192,174,252,238,191,226,172, 37, -230,114,136,199,217, 20, 3,255, 0, 0, 0, 0,191,214,105,225,192,161,177,211,192, 29,229,160,219,197,145,175,202, 38, 3,255, - 0, 0, 0, 0,191, 88,213, 62,192,167, 70,193,192, 32,217,212,237,221,141,232,200,230, 3,255, 0, 0, 0, 0,192,130, 97,236, - 64, 34,248,181, 64, 87,132, 49,166,239, 55, 72, 73,112, 3,255, 0, 0, 0, 0,192,144,103,186, 63,234, 9, 91, 64, 80,226,150, -157,104, 39,135, 71,104, 3,255, 0, 0, 0, 0,192,149, 83,115, 64, 24,118, 25, 64, 41, 5, 96,154, 61, 51,195, 57,220, 3,255, - 0, 0, 0, 0,192,133,112, 29, 64,104, 45,168, 63,249, 44, 95,165,102, 79,160, 42,208, 3,255, 0, 0, 0, 0,192, 95,193,192, - 64,138, 5,221, 63,239,219, 42,179, 75, 93,195, 41, 79, 3,255, 0, 0, 0, 0,192,100,126, 85, 64,114,211,103, 64, 43,176,187, -177,196, 83, 15, 57,254, 3,255, 0, 0, 0, 0,191,201,189,110, 64,154, 28, 48, 64, 60,148,180,221,254,105, 61, 64,109, 3,255, - 0, 0, 0, 0,192, 17, 55, 21, 64,140, 67,125, 64, 75, 8,118,206,195, 95,206, 69, 35, 3,255, 0, 0, 0, 0,192, 12,138, 46, - 64,156,168,195, 64, 23,240, 99,208, 84,106,202, 52, 4, 3,255, 0, 0, 0, 0,192,115,101,128, 64,142,100,106, 62,205,174,214, -172,224, 96,244, 8,129, 3,255, 0, 0, 0, 0,192,142,250,187, 64,113,123,178, 62,242,120, 90,158,157, 82,114, 10, 12, 3,255, - 0, 0, 0, 0,192,134, 21, 28, 64,130,231,185,190,133,210,175,164,128, 89, 74,249,223, 3,255, 0, 0, 0, 0, 63,214,105,225, - 64,161,177,211, 64, 29,229,160, 36, 59,110, 81, 53,218, 3,255, 0, 0, 0, 0, 63, 88,213, 62, 64,167, 70,193, 64, 32,217,212, - 18, 35,114, 24, 55, 26, 3,255, 0, 0, 0, 0, 63,150,176, 53, 64,174,252,238, 63,226,172, 37, 25,142,119, 57, 38,236, 3,255, - 0, 0, 0, 0, 64, 22, 41, 24, 64,169,197, 1, 63, 84, 68,191, 51,211,115,151, 18, 84, 3,255, 0, 0, 0, 0, 64, 75,243, 73, - 64,156, 16, 86, 63, 33,150,180, 69, 40,106,193, 14, 62, 3,255, 0, 0, 0, 0, 64, 54,112,161, 64,156, 77, 94, 63,196,107,208, - 62, 58,106,233, 32,224, 3,255, 0, 0, 0, 0, 64,144, 84, 31, 64, 87, 19, 24, 63,211, 65, 53, 98,182, 73, 8, 36, 32, 3,255, - 0, 0, 0, 0, 64,123, 90, 7, 64,121,238,107, 63,247,227,115, 85,234, 84,255, 42, 38, 3,255, 0, 0, 0, 0, 64,136, 74,208, - 64,121,117,231, 63,133,193, 32, 93, 8, 84,214, 23, 7, 3,255, 0, 0, 0, 0, 64, 58, 21, 17, 64,160,209,224,191, 88,100,103, - 63, 54,109,184,237, 85, 3,255, 0, 0, 0, 0, 64, 4,252,151, 64,174, 89, 71,191, 38, 93,215, 45,108,118,201,241,134, 3,255, - 0, 0, 0, 0, 64, 19,246,140, 64,166, 60,148,191,182, 70, 11, 50, 92,113, 97,224,129, 3,255, 0, 0, 0, 0, 64,182,222, 95, - 62,161, 32,178, 63,165, 92, 48,124,166, 7, 48, 28, 45, 3,255, 0, 0, 0, 0, 64,179,119, 52, 63,147,204,223, 63,160,141,116, -122, 87, 25,143, 27,153, 3,255, 0, 0, 0, 0, 64,185, 52,235, 63, 83,185,191, 62,252,176, 39,126, 55, 18, 45, 11, 15, 3,255, - 0, 0, 0, 0, 64,186,178, 88,190,226, 33,180,190,165,211, 69,127,103,245,191,249, 60, 3,255, 0, 0, 0, 0, 64,181,194,100, -191,178, 37,227,190,191, 51, 65,124, 57,226, 39,248, 55, 3,255, 0, 0, 0, 0, 64,184, 83,241,191,117,241, 33, 62,248, 69,204, -125,224,235, 11, 9,234, 3,255, 0, 0, 0, 0, 64,157,242, 15,192, 63, 35,177, 63,132,230,242,107,141,190,122, 22,217, 3,255, - 0, 0, 0, 0, 64,169,163, 58,192, 14,207,184, 63,148, 92, 43,115,134,207, 6, 25, 63, 3,255, 0, 0, 0, 0, 64,167, 26, 30, -192, 42, 11, 62, 62,159,163,199,113,211,197,230, 7, 20, 3,255, 0, 0, 0, 0, 64,173,114,185,191,162, 11,147,191,237,131,136, -118, 52,228,150,215, 69, 3,255, 0, 0, 0, 0, 64,178, 82, 90,190,168, 0,181,191,231, 64,125,121,120,248,178,216, 81, 3,255, - 0, 0, 0, 0, 64,168, 68,140,191, 57,100,162,192, 31, 41, 90,114,165,240, 61,201, 81, 3,255, 0, 0, 0, 0, 64, 29,140,219, -192,163,216,164, 63,187,160,163, 53,254,144,108, 31,229, 3,255, 0, 0, 0, 0, 64, 76, 63, 8,192,152, 92,149, 63,157, 6,201, - 70, 2,152, 72, 26,231, 3,255, 0, 0, 0, 0, 64, 50,200,107,192,164, 21, 4, 63, 18,252,143, 61, 27,144, 67, 12,198, 3,255, - 0, 0, 0, 0, 63,188,166, 29,192,181,120,167, 61,165,224, 4, 31,175,132, 3, 2, 53, 3,255, 0, 0, 0, 0, 63, 9,186, 26, -192,186,142,104, 62,126, 74,128, 12, 98,128,187, 5,168, 3,255, 0, 0, 0, 0, 63,145,160,228,192,181, 59,121, 63,123,252,246, - 24,193,132, 42, 20,214, 3,255, 0, 0, 0, 0,191, 99, 54,226,192,174,134,172, 63,250, 98, 96,236, 76,137, 12, 42,242, 3,255, - 0, 0, 0, 0,189, 60,195,150,192,177,121, 46, 63,245, 6,174,254,172,135, 7, 41,201, 3,255, 0, 0, 0, 0,191, 35, 88,109, -192,182,186,129, 63,152, 8,207,241,251,131,129, 26, 54, 3,255, 0, 0, 0, 0, 62,134,114,163,192,183, 94, 81,191,157,210, 73, - 5,216,131, 16,228,207, 3,255, 0, 0, 0, 0, 63,151,217,253,192,178, 89, 90,191,178,246,210, 25,167,134,110,225, 69, 3,255, - 0, 0, 0, 0, 63, 19,205,179,192,175,145, 33,191,253,151,102, 12,131,136, 85,212, 89, 3,255, 0, 0, 0, 0,192,101,166,116, -192,111,107, 67, 64, 47,233, 69,177,233,174, 37, 59,222, 3,255, 0, 0, 0, 0,192, 68, 20,109,192,139, 9,202, 64, 29,255,124, -189,118,160,234, 53,250, 3,255, 0, 0, 0, 0,192,106,184,230,192,133, 83,117, 63,243, 95, 76,176, 54,165, 5, 41,179, 3,255, - 0, 0, 0, 0,192,150,177, 40,192, 73,250,101, 63,189,252,104,152,243,187,143, 32,217, 3,255, 0, 0, 0, 0,192,164, 67, 59, -192, 19,116,106, 63,209,145, 96,144, 52,205, 33, 36, 1, 3,255, 0, 0, 0, 0,192,148, 31,118,192, 46, 99,144, 64, 21,237, 95, -154,155,196,115, 50,141, 3,255, 0, 0, 0, 0,192,157, 48,115,191, 33,183, 74, 64, 72,172, 21,148,206,242,150, 68,165, 3,255, - 0, 0, 0, 0,192,151, 48,250,191,186,157,117, 64, 74, 37,236,152,215,224,130, 68,233, 3,255, 0, 0, 0, 0,192,167, 31,102, -191,133,113, 18, 64, 29,150,122,142, 42,233,107, 53,251, 3,255, 0, 0, 0, 0,192,174, 1,225,192, 12,167, 65, 62, 38, 1,199, -137,107,207,239, 3, 61, 3,255, 0, 0, 0, 0,192,160,156,172,192, 66,121, 23, 60, 53,253,220,146,101,189,231, 0, 0, 3,255, - 0, 0, 0, 0,192,168, 99, 9,192, 32,173,184,191, 27, 16,129,141, 28,201, 67,242, 92, 3,255, 0, 0, 0, 0,191, 19, 18,220, - 64, 98,186,168, 64,148,136, 66,243,101, 77,135,101, 15, 3,255, 0, 0, 0, 0,191, 68,220, 36, 64,132,143, 24, 64,130,105, 20, -239, 93, 90,190, 88,184, 3,255, 0, 0, 0, 0,191,185,255, 60, 64,108,244,215, 64,138, 7,129,224,143, 80,245, 94, 5, 3,255, - 0, 0, 0, 0,191,247,202, 46, 64, 27,140, 23, 64,158,252,116,214, 39, 52,179,108,224, 3,255, 0, 0, 0, 0,191,220, 24,190, - 63,202,163,163, 64,171,244,160,218,157, 35, 57,117, 60, 3,255, 0, 0, 0, 0,191,133,219,227, 64, 17, 47,172, 64,169,160, 93, -232,130, 49, 92,115,188, 3,255, 0, 0, 0, 0, 62, 50, 45,123, 62,230, 16,213, 64,186,240,160, 4, 25, 9,132,127,147, 3,255, - 0, 0, 0, 0, 59,172,119,131, 63,162,209,182, 64,183, 73,170, 0, 47, 27,112,125, 5, 3,255, 0, 0, 0, 0,191, 40,230,165, - 63, 24,111,246, 64,185,150, 50,241,237, 12,238,126,143, 3,255, 0, 0, 0, 0,192, 66,225,100, 63,131,191,146, 64,157, 18,152, -189, 78, 22,128,106,231, 3,255, 0, 0, 0, 0,192, 80,140, 98, 63,238,205,169, 64,144, 69, 83,184,186, 40,111, 98, 83, 3,255, - 0, 0, 0, 0,192,109, 39,177, 63,147,213,154, 64,140,143,239,174,199, 25, 9, 95,179, 3,255, 0, 0, 0, 0, 64,128,173,131, - 64, 14,170, 50, 64,105, 71,247, 87,226, 48,192, 79, 67, 3,255, 0, 0, 0, 0, 64,140,137,202, 64, 33,234, 4, 64, 60,117,152, - 96, 41, 55, 40, 63,250, 3,255, 0, 0, 0, 0, 64,115,176, 68, 64, 68, 49, 85, 64, 79,173, 65, 83, 78, 66,175, 70,175, 3,255, - 0, 0, 0, 0, 64, 39, 23, 51, 64, 76,245, 14, 64,132,248,105, 56,227, 69,119, 91, 56, 3,255, 0, 0, 0, 0, 63,254, 75,122, - 64, 50, 36, 17, 64,152, 70, 83, 44, 3, 60,210,103,169, 3,255, 0, 0, 0, 0, 64, 52,239,190, 64, 22,186,193, 64,145,240,166, - 61, 89, 51,253, 99,148, 3,255, 0, 0, 0, 0, 63,213,244,249, 63, 52, 33, 10, 64,178, 94,248, 36, 84, 14,253,121,208, 3,255, - 0, 0, 0, 0, 64, 22, 80,230, 63,141,155, 50, 64,168, 95,108, 50,253, 23,250,114,237, 3,255, 0, 0, 0, 0, 63,194,113, 96, - 63,195,184,166, 64,174,160, 31, 33, 51, 33, 11,119, 29, 3,255, 0, 0, 0, 0, 63,112,119,228, 64,115, 46, 49, 64,139,222,186, - 20,104, 83, 35, 95, 40, 3,255, 0, 0, 0, 0, 63,199, 22,221, 64,134,211, 71, 64,113,161, 37, 33,158, 92, 1, 82, 99, 3,255, - 0, 0, 0, 0, 63, 58,131,170, 64,140,178, 58, 64,115,174,213, 15,151, 96, 55, 82,245, 3,255, 0, 0, 0, 0, 64,132,134,116, -192, 40,130, 40, 64, 77,207,237, 90,117,198,107, 69,226, 3,255, 0, 0, 0, 0, 64,140,187,232,192, 62, 96, 6, 64, 30,247,107, - 95,249,190,188, 53,245, 3,255, 0, 0, 0, 0, 64,152, 61, 37,192, 14, 9,230, 64, 39,179,137,103,171,207, 73, 57, 30, 3,255, - 0, 0, 0, 0, 64,149,121,189,191,111,192,142, 64, 90, 95, 76,101,161,235,149, 75, 20, 3,255, 0, 0, 0, 0, 64,134,112,254, -190,207,146,126, 64,130, 19,159, 91,241,246,137, 88,139, 3,255, 0, 0, 0, 0, 64,129,129, 12,191,173,129,231, 64,128,125,159, - 88,194,226,241, 87,133, 3,255, 0, 0, 0, 0, 64, 22,104,220,191, 40,221,204, 64,170,137,115, 50,240,241,167,116,139, 3,255, - 0, 0, 0, 0, 64, 56,120,245,191,154,213,118, 64,158,227, 81, 62,175,229,209,108,123, 3,255, 0, 0, 0, 0, 64, 66, 56, 52, -190,139, 40,206, 64,160,116, 21, 65,243,249,237,109,135, 3,255, 0, 0, 0, 0, 64,150,161, 61, 63, 89,221,107, 64, 89,113,118, -102,216, 18,177, 73,221, 3,255, 0, 0, 0, 0, 64,165,120, 74, 62,167, 78, 95, 64, 48, 51,139,112,202, 7,116, 60, 12, 3,255, - 0, 0, 0, 0, 64,162, 65, 12, 63,149, 84, 11, 64, 44,202,172,110,196, 25,209, 58,181, 3,255, 0, 0, 0, 0,190,194,138, 67, -192,138, 97,177, 64,124,158, 75,247,144,161,122, 85,227, 3,255, 0, 0, 0, 0,191, 66, 82,214,192,152,115,128, 64, 85, 25,164, -239, 15,151,229, 72,130, 3,255, 0, 0, 0, 0, 61,171,155,119,192,155, 40,138, 64, 83, 96,113, 1,128,150, 60, 72, 18, 3,255, - 0, 0, 0, 0, 63,178,237,144,192,136,136, 25, 64,113, 1,121, 30,139,163, 67, 82,194, 3,255, 0, 0, 0, 0, 63,238,147, 68, -192,100,230,166, 64,136, 9,234, 40, 40,177,126, 92,197, 3,255, 0, 0, 0, 0, 63,109,149, 30,192,111, 18, 40, 64,141,100,171, - 20,219,174, 55, 96, 57, 3,255, 0, 0, 0, 0, 63,162,210, 45,191,224,211,233, 64,174, 67,184, 27,187,218, 11,119, 12, 3,255, - 0, 0, 0, 0, 63, 94,106,158,192, 30,106,167, 64,167,240,254, 19, 27,202, 69,114,151, 3,255, 0, 0, 0, 0, 63,229,114, 22, -192, 20, 96,193, 64,162,167,253, 38,234,205,163,111, 12, 3,255, 0, 0, 0, 0, 64, 67, 76,208,192,111,120, 62, 64, 85, 89, 14, - 66,176,174, 60, 72,116, 3,255, 0, 0, 0, 0, 64, 37,220,139,192,141,135,245, 64, 54,173,114, 56,211,159,161, 62, 45, 3,255, - 0, 0, 0, 0, 64, 84,119,204,192,130, 73, 93, 64, 38,107,212, 72,198,167, 33, 56,119, 3,255, 0, 0, 0, 0,192, 82,218,178, -191, 1,247,178, 64,154,129,211,183,221,244,252,105, 39, 3,255, 0, 0, 0, 0,192,124,245, 0,190,187, 32, 27, 64,138, 6, 57, -169,118,248, 80, 93,254, 3,255, 0, 0, 0, 0,192,112, 75, 42,191,152, 42,228, 64,139, 44, 25,174, 0,230, 97, 94,225, 3,255, - 0, 0, 0, 0,192, 43,222,239,192, 11,226,212, 64,151, 71,227,197,223,208,116,103,165, 3,255, 0, 0, 0, 0,191,229,207,137, -192, 22, 63, 30, 64,161,235,207,216, 58,205, 29,110,129, 3,255, 0, 0, 0, 0,192, 14, 11,239,191,191,114,175, 64,166,208,254, -207,123,222,175,113,169, 3,255, 0, 0, 0, 0,189,149, 78,163,191,137, 25, 65, 64,184,102,234,254,202,232,204,125,222, 3,255, - 0, 0, 0, 0,191,104,203,208,191,113, 6,146, 64,183, 5,108,236,124,235,106,124,207, 3,255, 0, 0, 0, 0,190,251, 68, 26, -191,228, 38,111, 64,178, 48,114,245,117,217, 98,121,147, 3,255, 0, 0, 0, 0,191,222,169, 76,192,104,107,205, 64,136,142,150, -217,233,176,151, 92,223, 3,255, 0, 0, 0, 0,192, 39,143,145,192, 94, 49,190, 64,124, 27,165,199, 18,180, 4, 85,213, 3,255, - 0, 0, 0, 0,192, 6,168,130,192,130,132,190, 64,105, 96, 12,210, 30,166,165, 79, 83, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1, 84, 8,195, 65, 96, 0, 0, 1, 42, 0, 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, 7,248, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 90, 0, 7,248, 48, 32, 0, 0, 0, 55, 0, 0, 7,128, 0, 0, 0, 0, 0, 0, 0,162, - 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 0,162, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0, 42, - 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 35, - 0, 0, 0, 12, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,166, - 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0, 44, - 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,168, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 35, - 0, 0, 0, 13, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,170, - 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0, 46, - 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,172, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 0,172, 0, 0, 0, 35, - 0, 0, 0, 14, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,174, - 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0, 48, - 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 0,176, 0, 0, 0, 35, - 0, 0, 0, 15, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,178, - 0, 0, 0, 35, 0, 0, 0, 50, 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0, 50, - 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 0,180, 0, 0, 0, 35, - 0, 0, 0, 16, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,182, - 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 0,182, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0,183, 0, 0, 0, 35, 0, 0, 0, 52, - 0, 0, 0,183, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 35, - 0, 0, 0, 17, 0, 0, 0,185, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 0,185, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,186, - 0, 0, 0, 35, 0, 0, 0, 54, 0, 0, 0,186, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0,187, 0, 0, 0, 35, 0, 0, 0, 54, - 0, 0, 0,187, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 0,188, 0, 0, 0, 35, - 0, 0, 0, 18, 0, 0, 0,189, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 0,189, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,190, - 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0,191, 0, 0, 0, 35, 0, 0, 0, 56, - 0, 0, 0,191, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,192, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 35, - 0, 0, 0, 19, 0, 0, 0,193, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 0,193, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,194, - 0, 0, 0, 35, 0, 0, 0, 58, 0, 0, 0,194, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0,195, 0, 0, 0, 35, 0, 0, 0, 58, - 0, 0, 0,195, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,196, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 0,196, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 0,197, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 0,197, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,198, - 0, 0, 0, 35, 0, 0, 0, 60, 0, 0, 0,198, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0,199, 0, 0, 0, 35, 0, 0, 0, 60, - 0, 0, 0,199, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,200, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 0,200, 0, 0, 0, 35, - 0, 0, 0, 21, 0, 0, 0,201, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 0,201, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,202, - 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 0,202, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 0,203, 0, 0, 0, 35, 0, 0, 0, 62, - 0, 0, 0,203, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,204, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 0,204, 0, 0, 0, 35, - 0, 0, 0, 22, 0, 0, 0,205, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 0,205, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,206, - 0, 0, 0, 35, 0, 0, 0, 64, 0, 0, 0,206, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 0,207, 0, 0, 0, 35, 0, 0, 0, 64, - 0, 0, 0,207, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,208, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 35, - 0, 0, 0, 23, 0, 0, 0,209, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 0,209, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,210, - 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 0,211, 0, 0, 0, 35, 0, 0, 0, 66, - 0, 0, 0,211, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,212, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 0,212, 0, 0, 0, 35, - 0, 0, 0, 24, 0, 0, 0,213, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 0,213, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,214, - 0, 0, 0, 35, 0, 0, 0, 68, 0, 0, 0,214, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 0,215, 0, 0, 0, 35, 0, 0, 0, 68, - 0, 0, 0,215, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,216, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 35, - 0, 0, 0, 25, 0, 0, 0,217, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 0,217, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,218, - 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 0,219, 0, 0, 0, 35, 0, 0, 0, 70, - 0, 0, 0,219, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,220, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 0,220, 0, 0, 0, 35, - 0, 0, 0, 26, 0, 0, 0,221, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 0,221, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,222, - 0, 0, 0, 35, 0, 0, 0, 72, 0, 0, 0,222, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 0,223, 0, 0, 0, 35, 0, 0, 0, 72, - 0, 0, 0,223, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,224, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 35, - 0, 0, 0, 27, 0, 0, 0,225, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 0,225, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,226, - 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 0,227, 0, 0, 0, 35, 0, 0, 0, 74, - 0, 0, 0,227, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,228, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 0,228, 0, 0, 0, 35, - 0, 0, 0, 28, 0, 0, 0,229, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 0,229, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,230, - 0, 0, 0, 35, 0, 0, 0, 76, 0, 0, 0,230, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0,231, 0, 0, 0, 35, 0, 0, 0, 76, - 0, 0, 0,231, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,232, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 35, - 0, 0, 0, 29, 0, 0, 0,233, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 0,233, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,234, - 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 0,235, 0, 0, 0, 35, 0, 0, 0, 78, - 0, 0, 0,235, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0,236, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 0,236, 0, 0, 0, 35, - 0, 0, 0, 30, 0, 0, 0,237, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 0,237, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,238, - 0, 0, 0, 35, 0, 0, 0, 80, 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 0,239, 0, 0, 0, 35, 0, 0, 0, 80, - 0, 0, 0,239, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0,240, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 35, - 0, 0, 0, 31, 0, 0, 0,241, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 0,241, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,242, - 0, 0, 0, 35, 0, 0, 0, 82, 0, 0, 0,242, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 0,243, 0, 0, 0, 35, 0, 0, 0, 82, - 0, 0, 0,243, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,244, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 0,244, 0, 0, 0, 35, - 0, 0, 0, 32, 0, 0, 0,245, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 0,245, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,246, - 0, 0, 0, 35, 0, 0, 0, 84, 0, 0, 0,246, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 0,247, 0, 0, 0, 35, 0, 0, 0, 84, - 0, 0, 0,247, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,248, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 0,248, 0, 0, 0, 35, - 0, 0, 0, 33, 0, 0, 0,249, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 0,249, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,250, - 0, 0, 0, 35, 0, 0, 0, 86, 0, 0, 0,250, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 0, 35, 0, 0, 0, 86, - 0, 0, 0,251, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,252, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 0,252, 0, 0, 0, 35, - 0, 0, 0, 34, 0, 0, 0,253, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 0,253, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,254, - 0, 0, 0, 35, 0, 0, 0, 88, 0, 0, 0,254, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 0, 35, 0, 0, 0, 88, - 0, 0, 0,255, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 1, 0, 0, 0, 0, 35, - 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 2, - 0, 0, 0, 35, 0, 0, 0, 90, 0, 0, 1, 2, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1, 3, 0, 0, 0, 35, 0, 0, 0, 90, - 0, 0, 1, 3, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 1, 4, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 1, 4, 0, 0, 0, 35, - 0, 0, 0, 36, 0, 0, 1, 5, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 1, 5, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 1, 6, - 0, 0, 0, 35, 0, 0, 0, 92, 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1, 7, 0, 0, 0, 35, 0, 0, 0, 92, - 0, 0, 1, 7, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 8, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 1, 8, 0, 0, 0, 35, - 0, 0, 0, 37, 0, 0, 1, 9, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 1, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 1, 10, - 0, 0, 0, 35, 0, 0, 0, 94, 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 0, 38, 0, 0, 1, 11, 0, 0, 0, 35, 0, 0, 0, 94, - 0, 0, 1, 11, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 12, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 1, 12, 0, 0, 0, 35, - 0, 0, 0, 38, 0, 0, 1, 13, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 1, 13, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 1, 14, - 0, 0, 0, 35, 0, 0, 0, 96, 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1, 15, 0, 0, 0, 35, 0, 0, 0, 96, - 0, 0, 1, 15, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 16, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 1, 16, 0, 0, 0, 35, - 0, 0, 0, 39, 0, 0, 1, 17, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 1, 17, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 1, 18, - 0, 0, 0, 35, 0, 0, 0, 98, 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 0, 40, 0, 0, 1, 19, 0, 0, 0, 35, 0, 0, 0, 98, - 0, 0, 1, 19, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 20, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 1, 20, 0, 0, 0, 35, - 0, 0, 0, 40, 0, 0, 1, 21, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 1, 21, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 22, - 0, 0, 0, 35, 0, 0, 0,100, 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1, 23, 0, 0, 0, 35, 0, 0, 0,100, - 0, 0, 1, 23, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 1, 24, 0, 0, 0, 35, - 0, 0, 0, 41, 0, 0, 1, 25, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 1, 25, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 26, - 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1, 26, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 0,102, - 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1, 28, 0, 0, 0, 35, - 0, 0, 0, 13, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 30, - 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0,104, - 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 32, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1, 32, 0, 0, 0, 35, - 0, 0, 0, 16, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 34, - 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1, 34, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 35, 0, 0, 0, 35, 0, 0, 0,106, - 0, 0, 1, 35, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1, 36, 0, 0, 0, 35, - 0, 0, 0, 16, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 38, - 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1, 38, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 0,108, - 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1, 40, 0, 0, 0, 35, - 0, 0, 0, 17, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 42, - 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0,110, - 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 44, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1, 44, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 46, - 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 0,112, - 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1, 48, 0, 0, 0, 35, - 0, 0, 0, 20, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 50, - 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1, 50, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 0,114, - 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 52, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1, 52, 0, 0, 0, 35, - 0, 0, 0, 19, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 54, - 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0,116, - 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 1, 56, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1, 56, 0, 0, 0, 35, - 0, 0, 0, 23, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 1, 58, - 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1, 58, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1, 59, 0, 0, 0, 35, 0, 0, 0,118, - 0, 0, 1, 59, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1, 60, 0, 0, 0, 35, - 0, 0, 0, 23, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 62, - 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1, 62, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0,120, - 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 64, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1, 64, 0, 0, 0, 35, - 0, 0, 0, 24, 0, 0, 1, 65, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1, 65, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 1, 66, - 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0,122, - 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 68, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1, 68, 0, 0, 0, 35, - 0, 0, 0, 27, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 70, - 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1, 70, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 71, 0, 0, 0, 35, 0, 0, 0,124, - 0, 0, 1, 71, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1, 72, 0, 0, 0, 35, - 0, 0, 0, 27, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 1, 74, - 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1, 74, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0,126, - 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 1, 76, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1, 76, 0, 0, 0, 35, - 0, 0, 0, 28, 0, 0, 1, 77, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1, 77, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 1, 78, - 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0,128, - 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 80, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1, 80, 0, 0, 0, 35, - 0, 0, 0, 31, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 82, - 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 1, 82, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1, 83, 0, 0, 0, 35, 0, 0, 0,130, - 0, 0, 1, 83, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 1, 84, 0, 0, 0, 35, - 0, 0, 0, 31, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 1, 86, - 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 1, 86, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 0,132, - 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 1, 88, 0, 0, 0, 35, - 0, 0, 0, 24, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 1, 90, - 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0,134, - 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 92, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 1, 92, 0, 0, 0, 35, - 0, 0, 0, 33, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 94, - 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 0,136, - 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 1, 96, 0, 0, 0, 35, - 0, 0, 0, 33, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 1, 98, - 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 1, 98, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 0,138, - 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 1,100, 0, 0, 0, 35, - 0, 0, 0, 28, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 1,102, - 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0,140, - 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1,104, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 1,104, 0, 0, 0, 35, - 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1,106, - 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 0,142, - 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 1,108, 0, 0, 0, 35, - 0, 0, 0, 35, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 1,110, - 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 1,110, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 0,144, - 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1,112, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 1,112, 0, 0, 0, 35, - 0, 0, 0, 31, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1,114, - 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 0,146, - 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1,116, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 1,116, 0, 0, 0, 35, - 0, 0, 0, 38, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1,118, - 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 1,118, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,119, 0, 0, 0, 35, 0, 0, 0,148, - 0, 0, 1,119, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 1,120, 0, 0, 0, 35, - 0, 0, 0, 38, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 1,122, - 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 1,122, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 0,150, - 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 1,124, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 1,124, 0, 0, 0, 35, - 0, 0, 0, 38, 0, 0, 1,125, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 1,125, 0, 0, 0, 35, 0, 0, 0, 38, 0, 0, 1,126, - 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 0,152, - 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,128, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 1,128, 0, 0, 0, 35, - 0, 0, 0, 40, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,130, - 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 1,130, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,131, 0, 0, 0, 35, 0, 0, 0,154, - 0, 0, 1,131, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 1,132, 0, 0, 0, 35, - 0, 0, 0, 40, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 1,134, - 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 0,156, - 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 1,136, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 1,136, 0, 0, 0, 35, - 0, 0, 0, 40, 0, 0, 1,137, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 1,137, 0, 0, 0, 35, 0, 0, 0, 40, 0, 0, 1,138, - 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 0,158, - 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,140, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 1,140, 0, 0, 0, 35, - 0, 0, 0, 37, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,142, - 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 1,142, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,143, 0, 0, 0, 35, 0, 0, 0,160, - 0, 0, 1,143, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 1,144, 0, 0, 0, 35, - 0, 0, 0, 41, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 1,146, - 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,146, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 1,147, 0, 0, 0, 33, 0, 0, 0, 46, - 0, 0, 1,147, 0, 0, 0, 33, 0, 0, 0, 43, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,148, 0, 0, 0, 35, - 0, 0, 0,102, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,150, - 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 0,104, - 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,152, 0, 0, 0, 33, 0, 0, 0, 47, 0, 0, 1,152, 0, 0, 0, 33, - 0, 0, 0, 47, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,154, - 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 0,103, - 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,156, 0, 0, 0, 35, - 0, 0, 0, 42, 0, 0, 1,157, 0, 0, 0, 33, 0, 0, 0, 44, 0, 0, 1,157, 0, 0, 0, 33, 0, 0, 0, 50, 0, 0, 1,158, - 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,158, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 1,159, 0, 0, 0, 33, 0, 0, 0, 50, - 0, 0, 1,159, 0, 0, 0, 33, 0, 0, 0, 43, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,160, 0, 0, 0, 35, - 0, 0, 0,105, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,162, - 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 0,107, - 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,164, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 1,164, 0, 0, 0, 33, - 0, 0, 0, 51, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,166, - 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0,106, - 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,168, 0, 0, 0, 35, - 0, 0, 0, 42, 0, 0, 1,169, 0, 0, 0, 33, 0, 0, 0, 48, 0, 0, 1,169, 0, 0, 0, 33, 0, 0, 0, 54, 0, 0, 1,170, - 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,170, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,171, 0, 0, 0, 33, 0, 0, 0, 54, - 0, 0, 1,171, 0, 0, 0, 33, 0, 0, 0, 45, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,172, 0, 0, 0, 35, - 0, 0, 0,108, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,174, - 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 0,110, - 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,176, 0, 0, 0, 33, 0, 0, 0, 55, 0, 0, 1,176, 0, 0, 0, 33, - 0, 0, 0, 55, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,178, - 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 0,109, - 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,180, 0, 0, 0, 35, - 0, 0, 0, 44, 0, 0, 1,181, 0, 0, 0, 33, 0, 0, 0, 52, 0, 0, 1,181, 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 1,182, - 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,182, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,183, 0, 0, 0, 33, 0, 0, 0, 58, - 0, 0, 1,183, 0, 0, 0, 33, 0, 0, 0, 53, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,184, 0, 0, 0, 35, - 0, 0, 0,111, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,186, - 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 0,113, - 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,188, 0, 0, 0, 33, 0, 0, 0, 59, 0, 0, 1,188, 0, 0, 0, 33, - 0, 0, 0, 59, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,190, - 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 0,112, - 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,192, 0, 0, 0, 35, - 0, 0, 0, 52, 0, 0, 1,193, 0, 0, 0, 33, 0, 0, 0, 56, 0, 0, 1,193, 0, 0, 0, 33, 0, 0, 0, 60, 0, 0, 1,194, - 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,194, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,195, 0, 0, 0, 33, 0, 0, 0, 60, - 0, 0, 1,195, 0, 0, 0, 33, 0, 0, 0, 57, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,196, 0, 0, 0, 35, - 0, 0, 0,114, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,198, - 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 0,116, - 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,200, 0, 0, 0, 33, 0, 0, 0, 61, 0, 0, 1,200, 0, 0, 0, 33, - 0, 0, 0, 61, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,202, - 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 0,115, - 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,204, 0, 0, 0, 35, - 0, 0, 0, 48, 0, 0, 1,205, 0, 0, 0, 33, 0, 0, 0, 56, 0, 0, 1,205, 0, 0, 0, 33, 0, 0, 0, 64, 0, 0, 1,206, - 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,206, 0, 0, 0, 35, 0, 0, 0, 50, 0, 0, 1,207, 0, 0, 0, 33, 0, 0, 0, 64, - 0, 0, 1,207, 0, 0, 0, 33, 0, 0, 0, 50, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,208, 0, 0, 0, 35, - 0, 0, 0,117, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,210, - 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 0,119, - 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 1,212, 0, 0, 0, 33, 0, 0, 0, 65, 0, 0, 1,212, 0, 0, 0, 33, - 0, 0, 0, 65, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 1,214, - 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0,118, - 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,216, 0, 0, 0, 35, - 0, 0, 0, 51, 0, 0, 1,217, 0, 0, 0, 33, 0, 0, 0, 62, 0, 0, 1,217, 0, 0, 0, 33, 0, 0, 0, 68, 0, 0, 1,218, - 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,218, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 1,219, 0, 0, 0, 33, 0, 0, 0, 68, - 0, 0, 1,219, 0, 0, 0, 33, 0, 0, 0, 47, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,220, 0, 0, 0, 35, - 0, 0, 0,120, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,222, - 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 0,122, - 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 1,224, 0, 0, 0, 33, 0, 0, 0, 69, 0, 0, 1,224, 0, 0, 0, 33, - 0, 0, 0, 69, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 1,226, - 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0,121, - 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,228, 0, 0, 0, 35, - 0, 0, 0, 46, 0, 0, 1,229, 0, 0, 0, 33, 0, 0, 0, 66, 0, 0, 1,229, 0, 0, 0, 33, 0, 0, 0, 72, 0, 0, 1,230, - 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,230, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 1,231, 0, 0, 0, 33, 0, 0, 0, 72, - 0, 0, 1,231, 0, 0, 0, 33, 0, 0, 0, 55, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,232, 0, 0, 0, 35, - 0, 0, 0,123, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,234, - 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 0,125, - 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 1,236, 0, 0, 0, 33, 0, 0, 0, 73, 0, 0, 1,236, 0, 0, 0, 33, - 0, 0, 0, 73, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 1,238, - 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0,124, - 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0, 54, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,240, 0, 0, 0, 35, - 0, 0, 0, 54, 0, 0, 1,241, 0, 0, 0, 33, 0, 0, 0, 70, 0, 0, 1,241, 0, 0, 0, 33, 0, 0, 0, 76, 0, 0, 1,242, - 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,242, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 1,243, 0, 0, 0, 33, 0, 0, 0, 76, - 0, 0, 1,243, 0, 0, 0, 33, 0, 0, 0, 59, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,244, 0, 0, 0, 35, - 0, 0, 0,126, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,246, - 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 0,128, - 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 1,248, 0, 0, 0, 33, 0, 0, 0, 77, 0, 0, 1,248, 0, 0, 0, 33, - 0, 0, 0, 77, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 1,250, - 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0,127, - 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0, 58, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,252, 0, 0, 0, 35, - 0, 0, 0, 58, 0, 0, 1,253, 0, 0, 0, 33, 0, 0, 0, 74, 0, 0, 1,253, 0, 0, 0, 33, 0, 0, 0, 80, 0, 0, 1,254, - 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1,254, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 1,255, 0, 0, 0, 33, 0, 0, 0, 80, - 0, 0, 1,255, 0, 0, 0, 33, 0, 0, 0, 61, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 2, 0, 0, 0, 0, 35, - 0, 0, 0,129, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 2, - 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 0,131, - 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 4, 0, 0, 0, 33, 0, 0, 0, 81, 0, 0, 2, 4, 0, 0, 0, 33, - 0, 0, 0, 81, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 6, - 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0,130, - 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0, 60, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 8, 0, 0, 0, 35, - 0, 0, 0, 60, 0, 0, 2, 9, 0, 0, 0, 33, 0, 0, 0, 78, 0, 0, 2, 9, 0, 0, 0, 33, 0, 0, 0, 83, 0, 0, 2, 10, - 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 10, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 2, 11, 0, 0, 0, 33, 0, 0, 0, 83, - 0, 0, 2, 11, 0, 0, 0, 33, 0, 0, 0, 65, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 12, 0, 0, 0, 35, - 0, 0, 0,132, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 14, - 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 0,134, - 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 2, 16, 0, 0, 0, 33, 0, 0, 0, 82, 0, 0, 2, 16, 0, 0, 0, 33, - 0, 0, 0, 82, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 2, 18, - 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 0,133, - 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 0, 64, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 20, 0, 0, 0, 35, - 0, 0, 0, 64, 0, 0, 2, 21, 0, 0, 0, 33, 0, 0, 0, 66, 0, 0, 2, 21, 0, 0, 0, 33, 0, 0, 0, 84, 0, 0, 2, 22, - 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 22, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 2, 23, 0, 0, 0, 33, 0, 0, 0, 84, - 0, 0, 2, 23, 0, 0, 0, 33, 0, 0, 0, 69, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 24, 0, 0, 0, 35, - 0, 0, 0,135, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 26, - 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 0,137, - 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 2, 28, 0, 0, 0, 33, 0, 0, 0, 85, 0, 0, 2, 28, 0, 0, 0, 33, - 0, 0, 0, 85, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 2, 30, - 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 0,136, - 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 0, 68, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 32, 0, 0, 0, 35, - 0, 0, 0, 68, 0, 0, 2, 33, 0, 0, 0, 33, 0, 0, 0, 70, 0, 0, 2, 33, 0, 0, 0, 33, 0, 0, 0, 86, 0, 0, 2, 34, - 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 34, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 2, 35, 0, 0, 0, 33, 0, 0, 0, 86, - 0, 0, 2, 35, 0, 0, 0, 33, 0, 0, 0, 73, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 36, 0, 0, 0, 35, - 0, 0, 0,138, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 38, - 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 0,140, - 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 2, 40, 0, 0, 0, 33, 0, 0, 0, 87, 0, 0, 2, 40, 0, 0, 0, 33, - 0, 0, 0, 87, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 2, 42, - 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 0,139, - 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 0, 72, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 44, 0, 0, 0, 35, - 0, 0, 0, 72, 0, 0, 2, 45, 0, 0, 0, 33, 0, 0, 0, 74, 0, 0, 2, 45, 0, 0, 0, 33, 0, 0, 0, 88, 0, 0, 2, 46, - 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 46, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 2, 47, 0, 0, 0, 33, 0, 0, 0, 88, - 0, 0, 2, 47, 0, 0, 0, 33, 0, 0, 0, 77, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 48, 0, 0, 0, 35, - 0, 0, 0,141, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 50, - 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 0,143, - 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 52, 0, 0, 0, 33, 0, 0, 0, 89, 0, 0, 2, 52, 0, 0, 0, 33, - 0, 0, 0, 89, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 54, - 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 0,142, - 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 0, 76, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 56, 0, 0, 0, 35, - 0, 0, 0, 76, 0, 0, 2, 57, 0, 0, 0, 33, 0, 0, 0, 78, 0, 0, 2, 57, 0, 0, 0, 33, 0, 0, 0, 90, 0, 0, 2, 58, - 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 58, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 2, 59, 0, 0, 0, 33, 0, 0, 0, 90, - 0, 0, 2, 59, 0, 0, 0, 33, 0, 0, 0, 81, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 60, 0, 0, 0, 35, - 0, 0, 0,144, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 62, - 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 0,146, - 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 2, 64, 0, 0, 0, 33, 0, 0, 0, 91, 0, 0, 2, 64, 0, 0, 0, 33, - 0, 0, 0, 91, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 2, 66, - 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 0,145, - 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 0, 80, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 68, 0, 0, 0, 35, - 0, 0, 0, 62, 0, 0, 2, 69, 0, 0, 0, 33, 0, 0, 0, 80, 0, 0, 2, 69, 0, 0, 0, 33, 0, 0, 0, 94, 0, 0, 2, 70, - 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 70, 0, 0, 0, 35, 0, 0, 0, 82, 0, 0, 2, 71, 0, 0, 0, 33, 0, 0, 0, 94, - 0, 0, 2, 71, 0, 0, 0, 33, 0, 0, 0, 82, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 72, 0, 0, 0, 35, - 0, 0, 0,147, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 74, - 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 0,149, - 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2, 76, 0, 0, 0, 33, 0, 0, 0, 95, 0, 0, 2, 76, 0, 0, 0, 33, - 0, 0, 0, 95, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2, 78, - 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 0, 92, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 0,148, - 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 80, 0, 0, 0, 35, - 0, 0, 0, 83, 0, 0, 2, 81, 0, 0, 0, 33, 0, 0, 0, 92, 0, 0, 2, 81, 0, 0, 0, 33, 0, 0, 0, 96, 0, 0, 2, 82, - 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 82, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 2, 83, 0, 0, 0, 33, 0, 0, 0, 96, - 0, 0, 2, 83, 0, 0, 0, 33, 0, 0, 0, 85, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 84, 0, 0, 0, 35, - 0, 0, 0,150, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 86, - 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 0,152, - 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 2, 88, 0, 0, 0, 33, 0, 0, 0, 97, 0, 0, 2, 88, 0, 0, 0, 33, - 0, 0, 0, 97, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 2, 90, - 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 0, 94, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 0,151, - 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 0, 84, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 92, 0, 0, 0, 35, - 0, 0, 0, 84, 0, 0, 2, 93, 0, 0, 0, 33, 0, 0, 0, 94, 0, 0, 2, 93, 0, 0, 0, 33, 0, 0, 0, 98, 0, 0, 2, 94, - 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 94, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 2, 95, 0, 0, 0, 33, 0, 0, 0, 98, - 0, 0, 2, 95, 0, 0, 0, 33, 0, 0, 0, 87, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 96, 0, 0, 0, 35, - 0, 0, 0,153, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2, 98, - 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 0,155, - 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 2,100, 0, 0, 0, 33, 0, 0, 0, 99, 0, 0, 2,100, 0, 0, 0, 33, - 0, 0, 0, 99, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 2,102, - 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 0, 96, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 0,154, - 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 0, 86, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2,104, 0, 0, 0, 35, - 0, 0, 0, 86, 0, 0, 2,105, 0, 0, 0, 33, 0, 0, 0, 96, 0, 0, 2,105, 0, 0, 0, 33, 0, 0, 0,100, 0, 0, 2,106, - 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,106, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 2,107, 0, 0, 0, 33, 0, 0, 0,100, - 0, 0, 2,107, 0, 0, 0, 33, 0, 0, 0, 89, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,108, 0, 0, 0, 35, - 0, 0, 0,156, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,110, - 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 0,158, - 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 2,112, 0, 0, 0, 33, 0, 0, 0,101, 0, 0, 2,112, 0, 0, 0, 33, - 0, 0, 0,101, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 2,114, - 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 0, 98, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 0,157, - 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 0, 88, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,116, 0, 0, 0, 35, - 0, 0, 0, 88, 0, 0, 2,117, 0, 0, 0, 33, 0, 0, 0, 98, 0, 0, 2,117, 0, 0, 0, 33, 0, 0, 0, 92, 0, 0, 2,118, - 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,118, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 2,119, 0, 0, 0, 33, 0, 0, 0, 92, - 0, 0, 2,119, 0, 0, 0, 33, 0, 0, 0, 91, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,120, 0, 0, 0, 35, - 0, 0, 0,159, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,122, - 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 0,161, - 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2,124, 0, 0, 0, 33, 0, 0, 0,101, 0, 0, 2,124, 0, 0, 0, 33, - 0, 0, 0, 93, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 2,126, - 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 0,100, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 0,160, - 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 0, 90, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,128, 0, 0, 0, 35, - 0, 0, 0, 90, 0, 0, 2,129, 0, 0, 0, 33, 0, 0, 0,100, 0, 0, 2,129, 0, 0, 0, 33, 0, 0, 1, 27, 0, 0, 1,146, - 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1,146, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 1,146, - 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 1,147, 0, 0, 1,148, 0, 0, 0, 35, - 0, 0, 0,165, 0, 0, 1, 26, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 1, 26, 0, 0, 1,148, - 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0,170, - 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 1, 26, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 1, 28, 0, 0, 1,149, 0, 0, 0, 35, - 0, 0, 1, 26, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 1,149, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 1,149, 0, 0, 1,151, - 0, 0, 0, 35, 0, 0, 1,150, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 27, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 1, 31, - 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 27, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 30, 0, 0, 1,150, 0, 0, 0, 35, - 0, 0, 1, 29, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 1, 29, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 1,152, - 0, 0, 0, 35, 0, 0, 0,172, 0, 0, 1,152, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0, 35, 0, 0, 1,152, - 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 1,152, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 1,153, 0, 0, 1,154, 0, 0, 0, 35, - 0, 0, 0,169, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 1, 30, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 1,154, - 0, 0, 0, 35, 0, 0, 1, 31, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0,173, - 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 1, 29, 0, 0, 1,155, 0, 0, 0, 35, - 0, 0, 0,167, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 1,155, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 1,155, 0, 0, 1,157, - 0, 0, 0, 35, 0, 0, 1,156, 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0,162, - 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1,156, 0, 0, 0, 35, - 0, 0, 0,163, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 1, 28, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 1, 33, 0, 0, 1,158, - 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1,158, 0, 0, 0, 35, 0, 0, 1,158, - 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 1,159, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 1,158, 0, 0, 1,160, 0, 0, 0, 35, - 0, 0, 0,165, 0, 0, 1, 32, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 1,160, - 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 0,178, 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 0,164, - 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 0, 35, - 0, 0, 1, 34, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 1,161, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 1,162, 0, 0, 1,163, - 0, 0, 0, 35, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 33, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 1, 33, - 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 37, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 36, 0, 0, 1,162, 0, 0, 0, 35, - 0, 0, 1, 35, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 1, 35, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 1,164, - 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 1,164, 0, 0, 0, 35, 0, 0, 1,164, - 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 1,165, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 35, - 0, 0, 0,177, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 1, 36, 0, 0, 1,166, - 0, 0, 0, 35, 0, 0, 1, 37, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,181, - 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1, 35, 0, 0, 0, 35, - 0, 0, 1, 35, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 1,167, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 1,168, 0, 0, 1,169, - 0, 0, 0, 35, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0,174, - 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1,168, 0, 0, 0, 35, - 0, 0, 1, 34, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1, 34, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1,170, - 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1,170, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 1,170, - 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 1,170, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 1,171, 0, 0, 1,172, 0, 0, 0, 35, - 0, 0, 0,169, 0, 0, 1, 38, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 1, 38, 0, 0, 1,172, - 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,186, 0, 0, 0, 35, 0, 0, 0,186, - 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 1, 38, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 1, 40, 0, 0, 1,173, 0, 0, 0, 35, - 0, 0, 1, 38, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 1,173, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 1,173, 0, 0, 1,175, - 0, 0, 0, 35, 0, 0, 1,174, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 1, 43, - 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 42, 0, 0, 1,174, 0, 0, 0, 35, - 0, 0, 1, 41, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 1, 41, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 1,176, - 0, 0, 0, 35, 0, 0, 0,188, 0, 0, 1,176, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 0,188, 0, 0, 0, 35, 0, 0, 1,176, - 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 1,177, 0, 0, 1,178, 0, 0, 0, 35, - 0, 0, 0,185, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 1, 42, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 0,185, 0, 0, 1,178, - 0, 0, 0, 35, 0, 0, 1, 43, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,189, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0,189, - 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,183, 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 1, 41, 0, 0, 1,179, 0, 0, 0, 35, - 0, 0, 0,183, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 1,179, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 1,179, 0, 0, 1,181, - 0, 0, 0, 35, 0, 0, 1,180, 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,182, 0, 0, 0, 35, 0, 0, 0,166, - 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,182, 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 1,180, 0, 0, 0, 35, - 0, 0, 0,167, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 1, 40, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1,182, - 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1,182, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 1,182, - 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 1,182, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 1,183, 0, 0, 1,184, 0, 0, 0, 35, - 0, 0, 0,185, 0, 0, 1, 44, 0, 0, 0, 35, 0, 0, 0,185, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 1, 44, 0, 0, 1,184, - 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 0,194, 0, 0, 0, 35, 0, 0, 0,194, - 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 1, 44, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 1, 46, 0, 0, 1,185, 0, 0, 0, 35, - 0, 0, 1, 44, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 1,185, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 1,185, 0, 0, 1,187, - 0, 0, 0, 35, 0, 0, 1,186, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 1, 49, - 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 48, 0, 0, 1,186, 0, 0, 0, 35, - 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 1, 47, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 1,188, - 0, 0, 0, 35, 0, 0, 0,196, 0, 0, 1,188, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 0,196, 0, 0, 0, 35, 0, 0, 1,188, - 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 1,189, 0, 0, 1,190, 0, 0, 0, 35, - 0, 0, 0,193, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 1, 48, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 0,193, 0, 0, 1,190, - 0, 0, 0, 35, 0, 0, 1, 49, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,197, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0,197, - 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,191, 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 1, 47, 0, 0, 1,191, 0, 0, 0, 35, - 0, 0, 0,191, 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 1,191, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 1,191, 0, 0, 1,193, - 0, 0, 0, 35, 0, 0, 1,192, 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,182, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0,182, - 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,190, 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,183, 0, 0, 1,192, 0, 0, 0, 35, - 0, 0, 0,183, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 1, 46, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1,194, - 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1,194, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 1,194, - 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 1,194, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 1,195, 0, 0, 1,196, 0, 0, 0, 35, - 0, 0, 0,193, 0, 0, 1, 50, 0, 0, 0, 35, 0, 0, 0,193, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 1, 50, 0, 0, 1,196, - 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 0,198, 0, 0, 0, 35, 0, 0, 0,198, - 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 1, 50, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 1, 53, 0, 0, 1,197, 0, 0, 0, 35, - 0, 0, 1, 50, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 1,197, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 1,197, 0, 0, 1,199, - 0, 0, 0, 35, 0, 0, 1,198, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 1, 55, - 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 54, 0, 0, 1,198, 0, 0, 0, 35, - 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 1, 52, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 1,200, - 0, 0, 0, 35, 0, 0, 0,200, 0, 0, 1,200, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,200, 0, 0, 0, 35, 0, 0, 1,200, - 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 1,201, 0, 0, 1,202, 0, 0, 0, 35, - 0, 0, 0,177, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 1, 54, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 1,202, - 0, 0, 0, 35, 0, 0, 1, 55, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,201, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0,201, - 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 1, 52, 0, 0, 1,203, 0, 0, 0, 35, - 0, 0, 0,175, 0, 0, 1, 52, 0, 0, 0, 35, 0, 0, 1,203, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 1,203, 0, 0, 1,205, - 0, 0, 0, 35, 0, 0, 1,204, 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,174, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0,190, - 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,174, 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,191, 0, 0, 1,204, 0, 0, 0, 35, - 0, 0, 0,191, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 1, 53, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 1, 57, 0, 0, 1,206, - 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 1,206, 0, 0, 0, 35, 0, 0, 1,206, - 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 1,207, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 35, - 0, 0, 0,179, 0, 0, 1, 56, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1,208, - 0, 0, 0, 35, 0, 0, 0,178, 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 0,206, 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 0,178, - 0, 0, 0,206, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1, 58, 0, 0, 0, 35, - 0, 0, 1, 58, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 1,209, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 1,210, 0, 0, 1,211, - 0, 0, 0, 35, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 57, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 1, 57, - 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 61, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 60, 0, 0, 1,210, 0, 0, 0, 35, - 0, 0, 1, 59, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 1, 59, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 1,212, - 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 0,208, 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 1,212, 0, 0, 0, 35, 0, 0, 1,212, - 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 1,213, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 35, - 0, 0, 0,205, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,205, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 1, 60, 0, 0, 1,214, - 0, 0, 0, 35, 0, 0, 1, 61, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,209, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,209, - 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 1, 59, 0, 0, 0, 35, - 0, 0, 1, 59, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 1,215, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 1,216, 0, 0, 1,217, - 0, 0, 0, 35, 0, 0, 1,215, 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 0,202, 0, 0, 0, 35, 0, 0, 0,202, - 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1,216, 0, 0, 0, 35, - 0, 0, 1, 58, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1, 58, 0, 0, 0, 35, 0, 0, 1, 63, 0, 0, 1,218, - 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 1,218, 0, 0, 0, 35, 0, 0, 1,218, - 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 1,219, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 1,218, 0, 0, 1,220, 0, 0, 0, 35, - 0, 0, 0,173, 0, 0, 1, 62, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 1,220, - 0, 0, 0, 35, 0, 0, 0,172, 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 0,214, 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 0,172, - 0, 0, 0,214, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 0, 35, - 0, 0, 1, 64, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 1,221, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 1,222, 0, 0, 1,223, - 0, 0, 0, 35, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 63, 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 1, 63, - 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 67, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 66, 0, 0, 1,222, 0, 0, 0, 35, - 0, 0, 1, 65, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 1, 65, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 1,224, - 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 0,216, 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 1,224, 0, 0, 0, 35, 0, 0, 1,224, - 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 1,225, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 1,224, 0, 0, 1,226, 0, 0, 0, 35, - 0, 0, 0,213, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0,213, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 1, 66, 0, 0, 1,226, - 0, 0, 0, 35, 0, 0, 1, 67, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,217, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,217, - 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 1, 65, 0, 0, 0, 35, - 0, 0, 1, 65, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 1,227, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 1,228, 0, 0, 1,229, - 0, 0, 0, 35, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0,210, - 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1,228, 0, 0, 0, 35, - 0, 0, 1, 64, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1, 64, 0, 0, 0, 35, 0, 0, 1, 69, 0, 0, 1,230, - 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 1,230, 0, 0, 0, 35, 0, 0, 1,230, - 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 1,231, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 0, 35, - 0, 0, 0,189, 0, 0, 1, 68, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 0,189, 0, 0, 1,232, - 0, 0, 0, 35, 0, 0, 0,188, 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 0,222, 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 0,188, - 0, 0, 0,222, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 0, 35, - 0, 0, 1, 70, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 1,233, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 1,234, 0, 0, 1,235, - 0, 0, 0, 35, 0, 0, 1,233, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 69, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 1, 69, - 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 73, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 72, 0, 0, 1,234, 0, 0, 0, 35, - 0, 0, 1, 71, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 1, 71, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 1,236, - 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 0,224, 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 1,236, 0, 0, 0, 35, 0, 0, 1,236, - 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 1,237, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 35, - 0, 0, 0,221, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,221, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 1, 72, 0, 0, 1,238, - 0, 0, 0, 35, 0, 0, 1, 73, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,225, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,225, - 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 1, 71, 0, 0, 0, 35, - 0, 0, 1, 71, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 1,239, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 1,240, 0, 0, 1,241, - 0, 0, 0, 35, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,186, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0,218, - 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,186, 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1,240, 0, 0, 0, 35, - 0, 0, 1, 70, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1, 70, 0, 0, 0, 35, 0, 0, 1, 75, 0, 0, 1,242, - 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 1,242, 0, 0, 0, 35, 0, 0, 1,242, - 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 1,243, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 1,242, 0, 0, 1,244, 0, 0, 0, 35, - 0, 0, 0,197, 0, 0, 1, 74, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 0,197, 0, 0, 1,244, - 0, 0, 0, 35, 0, 0, 0,196, 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 0,230, 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 0,196, - 0, 0, 0,230, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1, 76, 0, 0, 0, 35, - 0, 0, 1, 76, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 1,245, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 1,246, 0, 0, 1,247, - 0, 0, 0, 35, 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 75, 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 1, 75, - 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 79, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 78, 0, 0, 1,246, 0, 0, 0, 35, - 0, 0, 1, 77, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 1, 77, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 1,248, - 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 0,232, 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 1,248, 0, 0, 0, 35, 0, 0, 1,248, - 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 1,249, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 1,248, 0, 0, 1,250, 0, 0, 0, 35, - 0, 0, 0,229, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0,229, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 1, 78, 0, 0, 1,250, - 0, 0, 0, 35, 0, 0, 1, 79, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,233, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,233, - 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 1, 77, 0, 0, 0, 35, - 0, 0, 1, 77, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 1,251, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 1,252, 0, 0, 1,253, - 0, 0, 0, 35, 0, 0, 1,251, 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,194, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0,226, - 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,194, 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1,252, 0, 0, 0, 35, - 0, 0, 1, 76, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1, 76, 0, 0, 0, 35, 0, 0, 1, 81, 0, 0, 1,254, - 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 1,254, 0, 0, 0, 35, 0, 0, 1,254, - 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 1,255, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 1,254, 0, 0, 2, 0, 0, 0, 0, 35, - 0, 0, 0,201, 0, 0, 1, 80, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 0,201, 0, 0, 2, 0, - 0, 0, 0, 35, 0, 0, 0,200, 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 0,238, 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 0,200, - 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 1, 82, 0, 0, 0, 35, - 0, 0, 1, 82, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 2, 1, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 2, 2, 0, 0, 2, 3, - 0, 0, 0, 35, 0, 0, 2, 1, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 81, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 1, 81, - 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 85, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 84, 0, 0, 2, 2, 0, 0, 0, 35, - 0, 0, 1, 83, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 1, 83, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 2, 4, - 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 0,240, 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 2, 4, 0, 0, 0, 35, 0, 0, 2, 4, - 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 2, 5, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 2, 4, 0, 0, 2, 6, 0, 0, 0, 35, - 0, 0, 0,237, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,237, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 1, 84, 0, 0, 2, 6, - 0, 0, 0, 35, 0, 0, 1, 85, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,241, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,241, - 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 1, 83, 0, 0, 0, 35, - 0, 0, 1, 83, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 2, 7, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 2, 8, 0, 0, 2, 9, - 0, 0, 0, 35, 0, 0, 2, 7, 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,198, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0,234, - 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,198, 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 2, 8, 0, 0, 0, 35, - 0, 0, 1, 82, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1, 82, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 2, 10, - 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 2, 10, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 2, 10, - 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 2, 10, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 2, 11, 0, 0, 2, 12, 0, 0, 0, 35, - 0, 0, 0,209, 0, 0, 1, 86, 0, 0, 0, 35, 0, 0, 0,209, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 1, 86, 0, 0, 2, 12, - 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 0,244, 0, 0, 0, 35, 0, 0, 0,244, - 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 1, 86, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 1, 88, 0, 0, 2, 13, 0, 0, 0, 35, - 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 2, 13, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 2, 13, 0, 0, 2, 15, - 0, 0, 0, 35, 0, 0, 2, 14, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 1, 91, - 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 90, 0, 0, 2, 14, 0, 0, 0, 35, - 0, 0, 1, 89, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 1, 89, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 2, 16, - 0, 0, 0, 35, 0, 0, 0,242, 0, 0, 2, 16, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 0,242, 0, 0, 0, 35, 0, 0, 2, 16, - 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 2, 16, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 2, 17, 0, 0, 2, 18, 0, 0, 0, 35, - 0, 0, 0,213, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 1, 90, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 0,213, 0, 0, 2, 18, - 0, 0, 0, 35, 0, 0, 1, 91, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,243, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0,243, - 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 1, 89, 0, 0, 2, 19, 0, 0, 0, 35, - 0, 0, 0,211, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 2, 19, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 2, 19, 0, 0, 2, 21, - 0, 0, 0, 35, 0, 0, 2, 20, 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,206, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0,206, - 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,210, 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 2, 20, 0, 0, 0, 35, - 0, 0, 0,207, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 1, 88, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 2, 22, - 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 2, 22, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 2, 22, - 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 2, 22, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 2, 23, 0, 0, 2, 24, 0, 0, 0, 35, - 0, 0, 0,217, 0, 0, 1, 92, 0, 0, 0, 35, 0, 0, 0,217, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 1, 92, 0, 0, 2, 24, - 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 0,246, 0, 0, 0, 35, 0, 0, 0,246, - 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 1, 92, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 1, 94, 0, 0, 2, 25, 0, 0, 0, 35, - 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 2, 25, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 2, 25, 0, 0, 2, 27, - 0, 0, 0, 35, 0, 0, 2, 26, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 1, 97, - 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 96, 0, 0, 2, 26, 0, 0, 0, 35, - 0, 0, 1, 95, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 1, 95, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 2, 28, - 0, 0, 0, 35, 0, 0, 0,248, 0, 0, 2, 28, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 0,248, 0, 0, 0, 35, 0, 0, 2, 28, - 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 2, 28, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 2, 29, 0, 0, 2, 30, 0, 0, 0, 35, - 0, 0, 0,221, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 1, 96, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 0,221, 0, 0, 2, 30, - 0, 0, 0, 35, 0, 0, 1, 97, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,249, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0,249, - 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 1, 95, 0, 0, 2, 31, 0, 0, 0, 35, - 0, 0, 0,219, 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 2, 31, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 2, 31, 0, 0, 2, 33, - 0, 0, 0, 35, 0, 0, 2, 32, 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,214, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0,214, - 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,218, 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 2, 32, 0, 0, 0, 35, - 0, 0, 0,215, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 1, 94, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 2, 34, - 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 2, 34, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 2, 34, - 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 2, 34, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 2, 35, 0, 0, 2, 36, 0, 0, 0, 35, - 0, 0, 0,225, 0, 0, 1, 98, 0, 0, 0, 35, 0, 0, 0,225, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 1, 98, 0, 0, 2, 36, - 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 0,250, 0, 0, 0, 35, 0, 0, 0,250, - 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 1, 98, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 1,100, 0, 0, 2, 37, 0, 0, 0, 35, - 0, 0, 1, 98, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 2, 37, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 2, 37, 0, 0, 2, 39, - 0, 0, 0, 35, 0, 0, 2, 38, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 1,103, - 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1,102, 0, 0, 2, 38, 0, 0, 0, 35, - 0, 0, 1,101, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 1,101, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 2, 40, - 0, 0, 0, 35, 0, 0, 0,252, 0, 0, 2, 40, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 0,252, 0, 0, 0, 35, 0, 0, 2, 40, - 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 2, 40, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 2, 41, 0, 0, 2, 42, 0, 0, 0, 35, - 0, 0, 0,229, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 1,102, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 0,229, 0, 0, 2, 42, - 0, 0, 0, 35, 0, 0, 1,103, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,253, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0,253, - 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 1,101, 0, 0, 2, 43, 0, 0, 0, 35, - 0, 0, 0,227, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 2, 43, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 2, 43, 0, 0, 2, 45, - 0, 0, 0, 35, 0, 0, 2, 44, 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,222, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0,222, - 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,226, 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 2, 44, 0, 0, 0, 35, - 0, 0, 0,223, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 1,100, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 2, 46, - 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 2, 46, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 2, 46, - 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 2, 46, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 2, 47, 0, 0, 2, 48, 0, 0, 0, 35, - 0, 0, 0,233, 0, 0, 1,104, 0, 0, 0, 35, 0, 0, 0,233, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 1,104, 0, 0, 2, 48, - 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 0,254, 0, 0, 0, 35, 0, 0, 0,254, - 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 1,104, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 1,106, 0, 0, 2, 49, 0, 0, 0, 35, - 0, 0, 1,104, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 2, 49, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 2, 49, 0, 0, 2, 51, - 0, 0, 0, 35, 0, 0, 2, 50, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 1,109, - 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,108, 0, 0, 2, 50, 0, 0, 0, 35, - 0, 0, 1,107, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 1,107, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 2, 52, - 0, 0, 0, 35, 0, 0, 1, 0, 0, 0, 2, 52, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 2, 52, - 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 2, 52, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 2, 53, 0, 0, 2, 54, 0, 0, 0, 35, - 0, 0, 0,237, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 1,108, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 0,237, 0, 0, 2, 54, - 0, 0, 0, 35, 0, 0, 1,109, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 1, 1, - 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 1,107, 0, 0, 2, 55, 0, 0, 0, 35, - 0, 0, 0,235, 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 2, 55, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 2, 55, 0, 0, 2, 57, - 0, 0, 0, 35, 0, 0, 2, 56, 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,230, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0,230, - 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,234, 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 2, 56, 0, 0, 0, 35, - 0, 0, 0,231, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 1,106, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 2, 58, - 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 2, 58, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 2, 58, - 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 2, 58, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 2, 59, 0, 0, 2, 60, 0, 0, 0, 35, - 0, 0, 0,241, 0, 0, 1,110, 0, 0, 0, 35, 0, 0, 0,241, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 1,110, 0, 0, 2, 60, - 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 1, 2, 0, 0, 0, 35, 0, 0, 1, 2, - 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 1,110, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 1,113, 0, 0, 2, 61, 0, 0, 0, 35, - 0, 0, 1,110, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 2, 61, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 2, 61, 0, 0, 2, 63, - 0, 0, 0, 35, 0, 0, 2, 62, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 1,115, - 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,114, 0, 0, 2, 62, 0, 0, 0, 35, - 0, 0, 1,112, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 1,112, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 2, 64, - 0, 0, 0, 35, 0, 0, 1, 4, 0, 0, 2, 64, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 1, 4, 0, 0, 0, 35, 0, 0, 2, 64, - 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 2, 64, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 2, 65, 0, 0, 2, 66, 0, 0, 0, 35, - 0, 0, 0,205, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 1,114, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 0,205, 0, 0, 2, 66, - 0, 0, 0, 35, 0, 0, 1,115, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 1, 5, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 1, 5, - 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 1,112, 0, 0, 2, 67, 0, 0, 0, 35, - 0, 0, 0,203, 0, 0, 1,112, 0, 0, 0, 35, 0, 0, 2, 67, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 2, 67, 0, 0, 2, 69, - 0, 0, 0, 35, 0, 0, 2, 68, 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,202, 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 0,238, - 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,202, 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 2, 68, 0, 0, 0, 35, - 0, 0, 0,239, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 1,113, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 1,117, 0, 0, 2, 70, - 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 2, 70, 0, 0, 0, 35, 0, 0, 2, 70, - 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 2, 71, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 2, 70, 0, 0, 2, 72, 0, 0, 0, 35, - 0, 0, 0,243, 0, 0, 1,116, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 0,243, 0, 0, 2, 72, - 0, 0, 0, 35, 0, 0, 0,242, 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 1, 10, 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 0,242, - 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 1,118, 0, 0, 0, 35, - 0, 0, 1,118, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 2, 73, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 2, 74, 0, 0, 2, 75, - 0, 0, 0, 35, 0, 0, 2, 73, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,117, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 1,117, - 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,121, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,120, 0, 0, 2, 74, 0, 0, 0, 35, - 0, 0, 1,119, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 1,119, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 2, 76, - 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 1, 12, 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 2, 76, 0, 0, 0, 35, 0, 0, 2, 76, - 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 2, 77, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 2, 76, 0, 0, 2, 78, 0, 0, 0, 35, - 0, 0, 1, 9, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 1, 9, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 1,120, 0, 0, 2, 78, - 0, 0, 0, 35, 0, 0, 1,121, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 1, 13, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 1, 13, - 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 1,119, 0, 0, 0, 35, - 0, 0, 1,119, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 2, 79, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 2, 80, 0, 0, 2, 81, - 0, 0, 0, 35, 0, 0, 2, 79, 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,244, 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 1, 6, - 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,244, 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 2, 80, 0, 0, 0, 35, - 0, 0, 1,118, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 1,118, 0, 0, 0, 35, 0, 0, 1,123, 0, 0, 2, 82, - 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 2, 82, 0, 0, 0, 35, 0, 0, 2, 82, - 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 2, 83, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 2, 82, 0, 0, 2, 84, 0, 0, 0, 35, - 0, 0, 0,249, 0, 0, 1,122, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 0,249, 0, 0, 2, 84, - 0, 0, 0, 35, 0, 0, 0,248, 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 1, 14, 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 0,248, - 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 1,124, 0, 0, 0, 35, - 0, 0, 1,124, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 2, 85, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 2, 86, 0, 0, 2, 87, - 0, 0, 0, 35, 0, 0, 2, 85, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,123, 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 1,123, - 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,127, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,126, 0, 0, 2, 86, 0, 0, 0, 35, - 0, 0, 1,125, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 1,125, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 2, 88, - 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 1, 16, 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 2, 88, 0, 0, 0, 35, 0, 0, 2, 88, - 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 2, 89, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 2, 88, 0, 0, 2, 90, 0, 0, 0, 35, - 0, 0, 1, 13, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 1, 13, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 1,126, 0, 0, 2, 90, - 0, 0, 0, 35, 0, 0, 1,127, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 1, 17, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 1, 17, - 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 1,125, 0, 0, 0, 35, - 0, 0, 1,125, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 2, 91, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 2, 92, 0, 0, 2, 93, - 0, 0, 0, 35, 0, 0, 2, 91, 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,246, 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 1, 10, - 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,246, 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 2, 92, 0, 0, 0, 35, - 0, 0, 1,124, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 1,124, 0, 0, 0, 35, 0, 0, 1,129, 0, 0, 2, 94, - 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 2, 94, 0, 0, 0, 35, 0, 0, 2, 94, - 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 2, 95, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 2, 94, 0, 0, 2, 96, 0, 0, 0, 35, - 0, 0, 0,253, 0, 0, 1,128, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 0,253, 0, 0, 2, 96, - 0, 0, 0, 35, 0, 0, 0,252, 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 1, 18, 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 0,252, - 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 1,130, 0, 0, 0, 35, - 0, 0, 1,130, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 2, 97, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 2, 98, 0, 0, 2, 99, - 0, 0, 0, 35, 0, 0, 2, 97, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,129, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 1,129, - 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,133, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,132, 0, 0, 2, 98, 0, 0, 0, 35, - 0, 0, 1,131, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 1,131, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 2,100, - 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 2,100, 0, 0, 0, 35, 0, 0, 2,100, - 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 2,101, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 2,100, 0, 0, 2,102, 0, 0, 0, 35, - 0, 0, 1, 17, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 1, 17, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 1,132, 0, 0, 2,102, - 0, 0, 0, 35, 0, 0, 1,133, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 1, 21, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 1, 21, - 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 1,131, 0, 0, 0, 35, - 0, 0, 1,131, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 2,103, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 2,104, 0, 0, 2,105, - 0, 0, 0, 35, 0, 0, 2,103, 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,250, 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 1, 14, - 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,250, 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 2,104, 0, 0, 0, 35, - 0, 0, 1,130, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 1,130, 0, 0, 0, 35, 0, 0, 1,135, 0, 0, 2,106, - 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 2,106, 0, 0, 0, 35, 0, 0, 2,106, - 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 2,107, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 2,106, 0, 0, 2,108, 0, 0, 0, 35, - 0, 0, 1, 1, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 2,108, - 0, 0, 0, 35, 0, 0, 1, 0, 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 1, 22, 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 1, 0, - 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 0, 35, - 0, 0, 1,136, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 2,109, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 2,110, 0, 0, 2,111, - 0, 0, 0, 35, 0, 0, 2,109, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,135, 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 1,135, - 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,139, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,138, 0, 0, 2,110, 0, 0, 0, 35, - 0, 0, 1,137, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 1,137, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 2,112, - 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 1, 24, 0, 0, 2,112, 0, 0, 0, 35, 0, 0, 2,112, - 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 2,113, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 2,112, 0, 0, 2,114, 0, 0, 0, 35, - 0, 0, 1, 21, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 1, 21, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 1,138, 0, 0, 2,114, - 0, 0, 0, 35, 0, 0, 1,139, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 1, 25, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 1, 25, - 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 1,137, 0, 0, 0, 35, - 0, 0, 1,137, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 2,115, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 2,116, 0, 0, 2,117, - 0, 0, 0, 35, 0, 0, 2,115, 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,254, 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 1, 18, - 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,254, 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 2,116, 0, 0, 0, 35, - 0, 0, 1,136, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,136, 0, 0, 0, 35, 0, 0, 1,141, 0, 0, 2,118, - 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 2,118, 0, 0, 0, 35, 0, 0, 2,118, - 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 2,119, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 2,118, 0, 0, 2,120, 0, 0, 0, 35, - 0, 0, 1, 5, 0, 0, 1,140, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 1, 5, 0, 0, 2,120, - 0, 0, 0, 35, 0, 0, 1, 4, 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 1, 6, 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 1, 4, - 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 1,142, 0, 0, 0, 35, - 0, 0, 1,142, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 2,121, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 2,122, 0, 0, 2,123, - 0, 0, 0, 35, 0, 0, 2,121, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,141, 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 1,141, - 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,144, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,145, 0, 0, 2,122, 0, 0, 0, 35, - 0, 0, 1,143, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 1, 24, 0, 0, 2,124, - 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 2,124, 0, 0, 0, 35, 0, 0, 2,124, - 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 2,125, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 2,124, 0, 0, 2,126, 0, 0, 0, 35, - 0, 0, 1, 25, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 1, 25, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 1,145, 0, 0, 2,126, - 0, 0, 0, 35, 0, 0, 1,144, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 1, 9, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 1, 9, - 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 1,143, 0, 0, 0, 35, - 0, 0, 1,143, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 2,127, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 2,128, 0, 0, 2,129, - 0, 0, 0, 35, 0, 0, 2,127, 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 2, 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 1, 22, - 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 2, 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 2,128, 0, 0, 0, 35, - 0, 0, 1,142, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 1,142, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 66,224, 0, 0, 1, 42, 0, 0, 0, 5, 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, 7,248,144, 32, 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, 0, 85, 86, 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, 7,249, 0, 32, 0, 0, 0, 6, 0, 0, 0, 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, 67,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, 7,254, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0,100, 0, 7,248,144, 32, 0, 0, 0, 54, 0, 0, 5, 0, 0, 0, 1, 27, 0, 0, 0,102, 0, 0, 1,146, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,146, 0, 0, 0,171, 0, 0, 1, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 14, - 0, 0, 1, 27, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,171, 0, 0, 1,146, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,147, 0, 0, 0, 46, 0, 0, 1,146, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,146, 0, 0, 1,148, - 0, 0, 1,147, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 43, 0, 0, 1,147, 0, 0, 1,148, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,148, 0, 0, 1,146, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 26, 0, 0, 0, 12, 0, 0, 0,165, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,165, 0, 0, 1,148, 0, 0, 1, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,102, - 0, 0, 1, 26, 0, 0, 1,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,148, 0, 0, 0,165, 0, 0, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,147, 0, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,164, 0, 0, 0,170, - 0, 0, 1,147, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 46, 0, 0, 1,147, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,170, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 26, 0, 0, 0,102, 0, 0, 1,149, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,149, 0, 0, 1, 28, 0, 0, 1, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 12, - 0, 0, 1, 26, 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 28, 0, 0, 1,149, 0, 0, 0,103, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,150, 0, 0, 0,103, 0, 0, 1,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,149, 0, 0, 1,151, - 0, 0, 1,150, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,104, 0, 0, 1,150, 0, 0, 1,151, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,151, 0, 0, 1,149, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 27, 0, 0, 0, 14, 0, 0, 1, 31, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 31, 0, 0, 1,151, 0, 0, 1, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,102, - 0, 0, 1, 27, 0, 0, 1,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,151, 0, 0, 1, 31, 0, 0, 0,104, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,150, 0, 0, 0,104, 0, 0, 1, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 30, 0, 0, 1, 29, - 0, 0, 1,150, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,103, 0, 0, 1,150, 0, 0, 1, 29, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 29, 0, 0, 1, 30, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,168, 0, 0, 0, 45, 0, 0, 1,152, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,152, 0, 0, 0,172, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, - 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,172, 0, 0, 1,152, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,153, 0, 0, 0, 47, 0, 0, 1,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,152, 0, 0, 1,154, - 0, 0, 1,153, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,104, 0, 0, 1,153, 0, 0, 1,154, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,154, 0, 0, 1,152, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,169, 0, 0, 0, 13, 0, 0, 1, 30, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 30, 0, 0, 1,154, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 45, - 0, 0, 0,169, 0, 0, 1,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,154, 0, 0, 1, 30, 0, 0, 0,104, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,153, 0, 0, 0,104, 0, 0, 1, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 31, 0, 0, 0,173, - 0, 0, 1,153, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 47, 0, 0, 1,153, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,173, 0, 0, 1, 31, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,167, 0, 0, 0, 44, 0, 0, 1,155, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,155, 0, 0, 1, 29, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 13, - 0, 0, 0,167, 0, 0, 1, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 29, 0, 0, 1,155, 0, 0, 0,103, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,156, 0, 0, 0,103, 0, 0, 1,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,155, 0, 0, 1,157, - 0, 0, 1,156, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 42, 0, 0, 1,156, 0, 0, 1,157, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,157, 0, 0, 1,155, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0,162, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,162, 0, 0, 1,157, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 44, - 0, 0, 0,166, 0, 0, 1,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,157, 0, 0, 0,162, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,156, 0, 0, 0, 42, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,163, 0, 0, 1, 28, - 0, 0, 1,156, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,103, 0, 0, 1,156, 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 28, 0, 0, 0,163, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,158, 0, 0, 0,105, 0, 0, 1, 33, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 33, 0, 0, 0,179, 0, 0, 1,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 50, - 0, 0, 1,158, 0, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,179, 0, 0, 1, 33, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,158, 0, 0, 0, 50, 0, 0, 1,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,159, 0, 0, 1,160, - 0, 0, 1,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,105, 0, 0, 1,158, 0, 0, 1,160, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,160, 0, 0, 1,159, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,165, 0, 0, 0, 12, 0, 0, 1, 32, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 32, 0, 0, 1,160, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 43, - 0, 0, 0,165, 0, 0, 1,160, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,160, 0, 0, 1, 32, 0, 0, 0,105, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,164, 0, 0, 0, 43, 0, 0, 1,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,159, 0, 0, 0,178, - 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0,178, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,178, 0, 0, 1,159, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,161, 0, 0, 0,105, 0, 0, 1, 32, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 1,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,106, - 0, 0, 1,161, 0, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 34, 0, 0, 1, 32, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,161, 0, 0, 0,106, 0, 0, 1,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,162, 0, 0, 1,163, - 0, 0, 1,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,105, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,163, 0, 0, 1,162, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 37, 0, 0, 0, 16, 0, 0, 1, 33, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 33, 0, 0, 1,163, 0, 0, 1, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,107, - 0, 0, 1, 37, 0, 0, 1,163, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,163, 0, 0, 1, 33, 0, 0, 0,105, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 36, 0, 0, 0,107, 0, 0, 1,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,162, 0, 0, 1, 35, - 0, 0, 1, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 15, 0, 0, 1, 36, 0, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 35, 0, 0, 1,162, 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,164, 0, 0, 0, 49, 0, 0, 0,176, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 1,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 51, - 0, 0, 1,164, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,180, 0, 0, 0,176, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,164, 0, 0, 0, 51, 0, 0, 1,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,165, 0, 0, 1,166, - 0, 0, 1,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 49, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,166, 0, 0, 1,165, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 36, 0, 0, 0, 15, 0, 0, 0,177, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,177, 0, 0, 1,166, 0, 0, 1, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,107, - 0, 0, 1, 36, 0, 0, 1,166, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,166, 0, 0, 0,177, 0, 0, 0, 49, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 37, 0, 0, 0,107, 0, 0, 1,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,165, 0, 0, 0,181, - 0, 0, 1, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 16, 0, 0, 1, 37, 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,181, 0, 0, 1,165, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,167, 0, 0, 0, 48, 0, 0, 0,175, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,175, 0, 0, 1, 35, 0, 0, 1,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,106, - 0, 0, 1,167, 0, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 35, 0, 0, 0,175, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,167, 0, 0, 0,106, 0, 0, 1,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,168, 0, 0, 1,169, - 0, 0, 1,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 48, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,169, 0, 0, 1,168, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,174, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,174, 0, 0, 1,169, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 42, - 0, 0, 0,162, 0, 0, 1,169, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,169, 0, 0, 0,174, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,163, 0, 0, 0, 42, 0, 0, 1,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,168, 0, 0, 1, 34, - 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 12, 0, 0, 0,163, 0, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 34, 0, 0, 1,168, 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 39, 0, 0, 0,108, 0, 0, 1,170, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,170, 0, 0, 0,187, 0, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 18, - 0, 0, 1, 39, 0, 0, 0,187, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,187, 0, 0, 1,170, 0, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,171, 0, 0, 0, 54, 0, 0, 1,170, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,170, 0, 0, 1,172, - 0, 0, 1,171, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 45, 0, 0, 1,171, 0, 0, 1,172, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,172, 0, 0, 1,170, 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 38, 0, 0, 0, 13, 0, 0, 0,169, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,169, 0, 0, 1,172, 0, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,108, - 0, 0, 1, 38, 0, 0, 1,172, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,172, 0, 0, 0,169, 0, 0, 0, 45, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,171, 0, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,168, 0, 0, 0,186, - 0, 0, 1,171, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 54, 0, 0, 1,171, 0, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,186, 0, 0, 0,168, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 38, 0, 0, 0,108, 0, 0, 1,173, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,173, 0, 0, 1, 40, 0, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 13, - 0, 0, 1, 38, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 40, 0, 0, 1,173, 0, 0, 0,109, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,174, 0, 0, 0,109, 0, 0, 1,173, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,173, 0, 0, 1,175, - 0, 0, 1,174, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,110, 0, 0, 1,174, 0, 0, 1,175, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,175, 0, 0, 1,173, 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 39, 0, 0, 0, 18, 0, 0, 1, 43, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 43, 0, 0, 1,175, 0, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,108, - 0, 0, 1, 39, 0, 0, 1,175, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,175, 0, 0, 1, 43, 0, 0, 0,110, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,174, 0, 0, 0,110, 0, 0, 1, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 42, 0, 0, 1, 41, - 0, 0, 1,174, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,109, 0, 0, 1,174, 0, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 41, 0, 0, 1, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0, 53, 0, 0, 1,176, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,176, 0, 0, 0,188, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, - 0, 0, 0,184, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 1,176, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,177, 0, 0, 0, 55, 0, 0, 1,176, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,176, 0, 0, 1,178, - 0, 0, 1,177, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,110, 0, 0, 1,177, 0, 0, 1,178, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,178, 0, 0, 1,176, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,185, 0, 0, 0, 17, 0, 0, 1, 42, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 42, 0, 0, 1,178, 0, 0, 0,185, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 53, - 0, 0, 0,185, 0, 0, 1,178, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,178, 0, 0, 1, 42, 0, 0, 0,110, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,177, 0, 0, 0,110, 0, 0, 1, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 43, 0, 0, 0,189, - 0, 0, 1,177, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 55, 0, 0, 1,177, 0, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,189, 0, 0, 1, 43, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,183, 0, 0, 0, 52, 0, 0, 1,179, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,179, 0, 0, 1, 41, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 17, - 0, 0, 0,183, 0, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 41, 0, 0, 1,179, 0, 0, 0,109, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,180, 0, 0, 0,109, 0, 0, 1,179, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,179, 0, 0, 1,181, - 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 44, 0, 0, 1,180, 0, 0, 1,181, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,181, 0, 0, 1,179, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0,166, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,166, 0, 0, 1,181, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 52, - 0, 0, 0,182, 0, 0, 1,181, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,181, 0, 0, 0,166, 0, 0, 0, 44, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,180, 0, 0, 0, 44, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,167, 0, 0, 1, 40, - 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,109, 0, 0, 1,180, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 40, 0, 0, 0,167, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 45, 0, 0, 0,111, 0, 0, 1,182, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,182, 0, 0, 0,195, 0, 0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, - 0, 0, 1, 45, 0, 0, 0,195, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,195, 0, 0, 1,182, 0, 0, 0, 58, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,183, 0, 0, 0, 58, 0, 0, 1,182, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,182, 0, 0, 1,184, - 0, 0, 1,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 53, 0, 0, 1,183, 0, 0, 1,184, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,184, 0, 0, 1,182, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 44, 0, 0, 0, 17, 0, 0, 0,185, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,185, 0, 0, 1,184, 0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,111, - 0, 0, 1, 44, 0, 0, 1,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,184, 0, 0, 0,185, 0, 0, 0, 53, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,183, 0, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0,194, - 0, 0, 1,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 58, 0, 0, 1,183, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,194, 0, 0, 0,184, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 44, 0, 0, 0,111, 0, 0, 1,185, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,185, 0, 0, 1, 46, 0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 17, - 0, 0, 1, 44, 0, 0, 1, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 46, 0, 0, 1,185, 0, 0, 0,112, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,186, 0, 0, 0,112, 0, 0, 1,185, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,185, 0, 0, 1,187, - 0, 0, 1,186, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,113, 0, 0, 1,186, 0, 0, 1,187, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,187, 0, 0, 1,185, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 45, 0, 0, 0, 20, 0, 0, 1, 49, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 49, 0, 0, 1,187, 0, 0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,111, - 0, 0, 1, 45, 0, 0, 1,187, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,187, 0, 0, 1, 49, 0, 0, 0,113, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,186, 0, 0, 0,113, 0, 0, 1, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 48, 0, 0, 1, 47, - 0, 0, 1,186, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,112, 0, 0, 1,186, 0, 0, 1, 47, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,192, 0, 0, 0, 57, 0, 0, 1,188, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,188, 0, 0, 0,196, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, - 0, 0, 0,192, 0, 0, 0,196, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,196, 0, 0, 1,188, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,189, 0, 0, 0, 59, 0, 0, 1,188, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,188, 0, 0, 1,190, - 0, 0, 1,189, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,113, 0, 0, 1,189, 0, 0, 1,190, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,190, 0, 0, 1,188, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,193, 0, 0, 0, 19, 0, 0, 1, 48, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 48, 0, 0, 1,190, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 57, - 0, 0, 0,193, 0, 0, 1,190, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,190, 0, 0, 1, 48, 0, 0, 0,113, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,189, 0, 0, 0,113, 0, 0, 1, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 49, 0, 0, 0,197, - 0, 0, 1,189, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 59, 0, 0, 1,189, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,197, 0, 0, 1, 49, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,191, 0, 0, 0, 56, 0, 0, 1,191, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,191, 0, 0, 1, 47, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 19, - 0, 0, 0,191, 0, 0, 1, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 47, 0, 0, 1,191, 0, 0, 0,112, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,192, 0, 0, 0,112, 0, 0, 1,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,191, 0, 0, 1,193, - 0, 0, 1,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 52, 0, 0, 1,192, 0, 0, 1,193, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,193, 0, 0, 1,191, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0,182, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,182, 0, 0, 1,193, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 56, - 0, 0, 0,190, 0, 0, 1,193, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,193, 0, 0, 0,182, 0, 0, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,192, 0, 0, 0, 52, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,183, 0, 0, 1, 46, - 0, 0, 1,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,112, 0, 0, 1,192, 0, 0, 1, 46, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 46, 0, 0, 0,183, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 51, 0, 0, 0,114, 0, 0, 1,194, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,194, 0, 0, 0,199, 0, 0, 1, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 21, - 0, 0, 1, 51, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,199, 0, 0, 1,194, 0, 0, 0, 60, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,195, 0, 0, 0, 60, 0, 0, 1,194, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,194, 0, 0, 1,196, - 0, 0, 1,195, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 57, 0, 0, 1,195, 0, 0, 1,196, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,196, 0, 0, 1,194, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 50, 0, 0, 0, 19, 0, 0, 0,193, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,193, 0, 0, 1,196, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,114, - 0, 0, 1, 50, 0, 0, 1,196, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,196, 0, 0, 0,193, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,195, 0, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,192, 0, 0, 0,198, - 0, 0, 1,195, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 60, 0, 0, 1,195, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,198, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 50, 0, 0, 0,114, 0, 0, 1,197, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,197, 0, 0, 1, 53, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 19, - 0, 0, 1, 50, 0, 0, 1, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 53, 0, 0, 1,197, 0, 0, 0,115, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,198, 0, 0, 0,115, 0, 0, 1,197, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,197, 0, 0, 1,199, - 0, 0, 1,198, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,116, 0, 0, 1,198, 0, 0, 1,199, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,199, 0, 0, 1,197, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 51, 0, 0, 0, 21, 0, 0, 1, 55, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 55, 0, 0, 1,199, 0, 0, 1, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,114, - 0, 0, 1, 51, 0, 0, 1,199, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,199, 0, 0, 1, 55, 0, 0, 0,116, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,198, 0, 0, 0,116, 0, 0, 1, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 54, 0, 0, 1, 52, - 0, 0, 1,198, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,115, 0, 0, 1,198, 0, 0, 1, 52, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,176, 0, 0, 0, 49, 0, 0, 1,200, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,200, 0, 0, 0,200, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0,176, 0, 0, 0,200, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,200, 0, 0, 1,200, 0, 0, 0, 61, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,201, 0, 0, 0, 61, 0, 0, 1,200, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,200, 0, 0, 1,202, - 0, 0, 1,201, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,116, 0, 0, 1,201, 0, 0, 1,202, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,202, 0, 0, 1,200, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,177, 0, 0, 0, 15, 0, 0, 1, 54, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 54, 0, 0, 1,202, 0, 0, 0,177, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 49, - 0, 0, 0,177, 0, 0, 1,202, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,202, 0, 0, 1, 54, 0, 0, 0,116, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,201, 0, 0, 0,116, 0, 0, 1, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 55, 0, 0, 0,201, - 0, 0, 1,201, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 61, 0, 0, 1,201, 0, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,201, 0, 0, 1, 55, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,175, 0, 0, 0, 48, 0, 0, 1,203, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,203, 0, 0, 1, 52, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 15, - 0, 0, 0,175, 0, 0, 1, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 52, 0, 0, 1,203, 0, 0, 0,115, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,204, 0, 0, 0,115, 0, 0, 1,203, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,203, 0, 0, 1,205, - 0, 0, 1,204, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 56, 0, 0, 1,204, 0, 0, 1,205, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,205, 0, 0, 1,203, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0,190, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,190, 0, 0, 1,205, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 48, - 0, 0, 0,174, 0, 0, 1,205, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,205, 0, 0, 0,190, 0, 0, 0, 56, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,204, 0, 0, 0, 56, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,191, 0, 0, 1, 53, - 0, 0, 1,204, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,115, 0, 0, 1,204, 0, 0, 1, 53, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 53, 0, 0, 0,191, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,206, 0, 0, 0,117, 0, 0, 1, 57, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 57, 0, 0, 0,207, 0, 0, 1,206, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 64, - 0, 0, 1,206, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,207, 0, 0, 1, 57, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,206, 0, 0, 0, 64, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,207, 0, 0, 1,208, - 0, 0, 1,206, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,117, 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,208, 0, 0, 1,207, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,179, 0, 0, 0, 16, 0, 0, 1, 56, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 56, 0, 0, 1,208, 0, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 50, - 0, 0, 0,179, 0, 0, 1,208, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,208, 0, 0, 1, 56, 0, 0, 0,117, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,178, 0, 0, 0, 50, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,207, 0, 0, 0,206, - 0, 0, 0,178, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,178, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,206, 0, 0, 1,207, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,209, 0, 0, 0,117, 0, 0, 1, 56, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 56, 0, 0, 1, 58, 0, 0, 1,209, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,118, - 0, 0, 1,209, 0, 0, 1, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 58, 0, 0, 1, 56, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,209, 0, 0, 0,118, 0, 0, 1,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,210, 0, 0, 1,211, - 0, 0, 1,209, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,117, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,211, 0, 0, 1,210, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 61, 0, 0, 0, 23, 0, 0, 1, 57, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 57, 0, 0, 1,211, 0, 0, 1, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,119, - 0, 0, 1, 61, 0, 0, 1,211, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,211, 0, 0, 1, 57, 0, 0, 0,117, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 60, 0, 0, 0,119, 0, 0, 1,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,210, 0, 0, 1, 59, - 0, 0, 1, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 22, 0, 0, 1, 60, 0, 0, 1, 59, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 59, 0, 0, 1,210, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,212, 0, 0, 0, 63, 0, 0, 0,204, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,204, 0, 0, 0,208, 0, 0, 1,212, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 65, - 0, 0, 1,212, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,208, 0, 0, 0,204, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,212, 0, 0, 0, 65, 0, 0, 1,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,213, 0, 0, 1,214, - 0, 0, 1,212, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 63, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,214, 0, 0, 1,213, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 60, 0, 0, 0, 22, 0, 0, 0,205, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,205, 0, 0, 1,214, 0, 0, 1, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,119, - 0, 0, 1, 60, 0, 0, 1,214, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,214, 0, 0, 0,205, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 61, 0, 0, 0,119, 0, 0, 1,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,213, 0, 0, 0,209, - 0, 0, 1, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 23, 0, 0, 1, 61, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,209, 0, 0, 1,213, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,215, 0, 0, 0, 62, 0, 0, 0,203, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,203, 0, 0, 1, 59, 0, 0, 1,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,118, - 0, 0, 1,215, 0, 0, 1, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 59, 0, 0, 0,203, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,215, 0, 0, 0,118, 0, 0, 1,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,216, 0, 0, 1,217, - 0, 0, 1,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 62, 0, 0, 1,215, 0, 0, 1,217, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,217, 0, 0, 1,216, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,180, 0, 0, 0, 5, 0, 0, 0,202, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,202, 0, 0, 1,217, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 51, - 0, 0, 0,180, 0, 0, 1,217, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,217, 0, 0, 0,202, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,181, 0, 0, 0, 51, 0, 0, 1,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,216, 0, 0, 1, 58, - 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 16, 0, 0, 0,181, 0, 0, 1, 58, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 58, 0, 0, 1,216, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,218, 0, 0, 0,120, 0, 0, 1, 63, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 63, 0, 0, 0,215, 0, 0, 1,218, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 68, - 0, 0, 1,218, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,215, 0, 0, 1, 63, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,218, 0, 0, 0, 68, 0, 0, 1,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,219, 0, 0, 1,220, - 0, 0, 1,218, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,120, 0, 0, 1,218, 0, 0, 1,220, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,220, 0, 0, 1,219, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,173, 0, 0, 0, 14, 0, 0, 1, 62, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 62, 0, 0, 1,220, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 47, - 0, 0, 0,173, 0, 0, 1,220, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,220, 0, 0, 1, 62, 0, 0, 0,120, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,172, 0, 0, 0, 47, 0, 0, 1,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,219, 0, 0, 0,214, - 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0,172, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,214, 0, 0, 1,219, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,221, 0, 0, 0,120, 0, 0, 1, 62, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 1,221, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,121, - 0, 0, 1,221, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 64, 0, 0, 1, 62, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,221, 0, 0, 0,121, 0, 0, 1,222, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,222, 0, 0, 1,223, - 0, 0, 1,221, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,120, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,223, 0, 0, 1,222, 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 67, 0, 0, 0, 25, 0, 0, 1, 63, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 63, 0, 0, 1,223, 0, 0, 1, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,122, - 0, 0, 1, 67, 0, 0, 1,223, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,223, 0, 0, 1, 63, 0, 0, 0,120, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 66, 0, 0, 0,122, 0, 0, 1,222, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,222, 0, 0, 1, 65, - 0, 0, 1, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 1, 66, 0, 0, 1, 65, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 65, 0, 0, 1,222, 0, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,224, 0, 0, 0, 67, 0, 0, 0,212, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,212, 0, 0, 0,216, 0, 0, 1,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, - 0, 0, 1,224, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,216, 0, 0, 0,212, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,224, 0, 0, 0, 69, 0, 0, 1,225, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,225, 0, 0, 1,226, - 0, 0, 1,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 67, 0, 0, 1,224, 0, 0, 1,226, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,226, 0, 0, 1,225, 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 66, 0, 0, 0, 24, 0, 0, 0,213, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,213, 0, 0, 1,226, 0, 0, 1, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,122, - 0, 0, 1, 66, 0, 0, 1,226, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,226, 0, 0, 0,213, 0, 0, 0, 67, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 67, 0, 0, 0,122, 0, 0, 1,225, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,225, 0, 0, 0,217, - 0, 0, 1, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 1, 67, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,217, 0, 0, 1,225, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,227, 0, 0, 0, 66, 0, 0, 0,211, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,211, 0, 0, 1, 65, 0, 0, 1,227, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,121, - 0, 0, 1,227, 0, 0, 1, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 65, 0, 0, 0,211, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,227, 0, 0, 0,121, 0, 0, 1,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,228, 0, 0, 1,229, - 0, 0, 1,227, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 66, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,229, 0, 0, 1,228, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,210, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,210, 0, 0, 1,229, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 46, - 0, 0, 0,170, 0, 0, 1,229, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,229, 0, 0, 0,210, 0, 0, 0, 66, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,171, 0, 0, 0, 46, 0, 0, 1,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,228, 0, 0, 1, 64, - 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,171, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 64, 0, 0, 1,228, 0, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,230, 0, 0, 0,123, 0, 0, 1, 69, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 69, 0, 0, 0,223, 0, 0, 1,230, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 72, - 0, 0, 1,230, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,223, 0, 0, 1, 69, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,230, 0, 0, 0, 72, 0, 0, 1,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,231, 0, 0, 1,232, - 0, 0, 1,230, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,123, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,232, 0, 0, 1,231, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 1, 68, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 68, 0, 0, 1,232, 0, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 55, - 0, 0, 0,189, 0, 0, 1,232, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,232, 0, 0, 1, 68, 0, 0, 0,123, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 0, 55, 0, 0, 1,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,231, 0, 0, 0,222, - 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,222, 0, 0, 1,231, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,233, 0, 0, 0,123, 0, 0, 1, 68, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 1,233, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,124, - 0, 0, 1,233, 0, 0, 1, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 70, 0, 0, 1, 68, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,233, 0, 0, 0,124, 0, 0, 1,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,234, 0, 0, 1,235, - 0, 0, 1,233, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,123, 0, 0, 1,233, 0, 0, 1,235, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,235, 0, 0, 1,234, 0, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 73, 0, 0, 0, 27, 0, 0, 1, 69, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 69, 0, 0, 1,235, 0, 0, 1, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,125, - 0, 0, 1, 73, 0, 0, 1,235, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,235, 0, 0, 1, 69, 0, 0, 0,123, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 72, 0, 0, 0,125, 0, 0, 1,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,234, 0, 0, 1, 71, - 0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 26, 0, 0, 1, 72, 0, 0, 1, 71, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 71, 0, 0, 1,234, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,236, 0, 0, 0, 71, 0, 0, 0,220, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,220, 0, 0, 0,224, 0, 0, 1,236, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 73, - 0, 0, 1,236, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,224, 0, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,236, 0, 0, 0, 73, 0, 0, 1,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,237, 0, 0, 1,238, - 0, 0, 1,236, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 71, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,238, 0, 0, 1,237, 0, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 72, 0, 0, 0, 26, 0, 0, 0,221, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,221, 0, 0, 1,238, 0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,125, - 0, 0, 1, 72, 0, 0, 1,238, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,238, 0, 0, 0,221, 0, 0, 0, 71, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 73, 0, 0, 0,125, 0, 0, 1,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,237, 0, 0, 0,225, - 0, 0, 1, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 27, 0, 0, 1, 73, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,225, 0, 0, 1,237, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,239, 0, 0, 0, 70, 0, 0, 0,219, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,219, 0, 0, 1, 71, 0, 0, 1,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,124, - 0, 0, 1,239, 0, 0, 1, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 71, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,239, 0, 0, 0,124, 0, 0, 1,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,240, 0, 0, 1,241, - 0, 0, 1,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 70, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,241, 0, 0, 1,240, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,186, 0, 0, 0, 2, 0, 0, 0,218, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,218, 0, 0, 1,241, 0, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 54, - 0, 0, 0,186, 0, 0, 1,241, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,241, 0, 0, 0,218, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,187, 0, 0, 0, 54, 0, 0, 1,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,240, 0, 0, 1, 70, - 0, 0, 0,187, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 18, 0, 0, 0,187, 0, 0, 1, 70, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 70, 0, 0, 1,240, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,242, 0, 0, 0,126, 0, 0, 1, 75, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 75, 0, 0, 0,231, 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, - 0, 0, 1,242, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,231, 0, 0, 1, 75, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,242, 0, 0, 0, 76, 0, 0, 1,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,243, 0, 0, 1,244, - 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,126, 0, 0, 1,242, 0, 0, 1,244, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,244, 0, 0, 1,243, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,197, 0, 0, 0, 20, 0, 0, 1, 74, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 74, 0, 0, 1,244, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 59, - 0, 0, 0,197, 0, 0, 1,244, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,244, 0, 0, 1, 74, 0, 0, 0,126, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,196, 0, 0, 0, 59, 0, 0, 1,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,243, 0, 0, 0,230, - 0, 0, 0,196, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0,196, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,230, 0, 0, 1,243, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,245, 0, 0, 0,126, 0, 0, 1, 74, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 74, 0, 0, 1, 76, 0, 0, 1,245, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,127, - 0, 0, 1,245, 0, 0, 1, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 76, 0, 0, 1, 74, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,245, 0, 0, 0,127, 0, 0, 1,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,246, 0, 0, 1,247, - 0, 0, 1,245, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,126, 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,247, 0, 0, 1,246, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 79, 0, 0, 0, 29, 0, 0, 1, 75, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 75, 0, 0, 1,247, 0, 0, 1, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,128, - 0, 0, 1, 79, 0, 0, 1,247, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,247, 0, 0, 1, 75, 0, 0, 0,126, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 78, 0, 0, 0,128, 0, 0, 1,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,246, 0, 0, 1, 77, - 0, 0, 1, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 28, 0, 0, 1, 78, 0, 0, 1, 77, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 77, 0, 0, 1,246, 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,248, 0, 0, 0, 75, 0, 0, 0,228, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,228, 0, 0, 0,232, 0, 0, 1,248, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 77, - 0, 0, 1,248, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,232, 0, 0, 0,228, 0, 0, 0, 8, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,248, 0, 0, 0, 77, 0, 0, 1,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,249, 0, 0, 1,250, - 0, 0, 1,248, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 75, 0, 0, 1,248, 0, 0, 1,250, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,250, 0, 0, 1,249, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 78, 0, 0, 0, 28, 0, 0, 0,229, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,229, 0, 0, 1,250, 0, 0, 1, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,128, - 0, 0, 1, 78, 0, 0, 1,250, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,250, 0, 0, 0,229, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 79, 0, 0, 0,128, 0, 0, 1,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,249, 0, 0, 0,233, - 0, 0, 1, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 29, 0, 0, 1, 79, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,233, 0, 0, 1,249, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,251, 0, 0, 0, 74, 0, 0, 0,227, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,227, 0, 0, 1, 77, 0, 0, 1,251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,127, - 0, 0, 1,251, 0, 0, 1, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 77, 0, 0, 0,227, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,251, 0, 0, 0,127, 0, 0, 1,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,252, 0, 0, 1,253, - 0, 0, 1,251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 74, 0, 0, 1,251, 0, 0, 1,253, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,253, 0, 0, 1,252, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,194, 0, 0, 0, 3, 0, 0, 0,226, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 1,253, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 58, - 0, 0, 0,194, 0, 0, 1,253, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,253, 0, 0, 0,226, 0, 0, 0, 74, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,195, 0, 0, 0, 58, 0, 0, 1,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,252, 0, 0, 1, 76, - 0, 0, 0,195, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0,195, 0, 0, 1, 76, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 76, 0, 0, 1,252, 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,254, 0, 0, 0,129, 0, 0, 1, 81, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 81, 0, 0, 0,239, 0, 0, 1,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 80, - 0, 0, 1,254, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,239, 0, 0, 1, 81, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,254, 0, 0, 0, 80, 0, 0, 1,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,255, 0, 0, 2, 0, - 0, 0, 1,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,129, 0, 0, 1,254, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 0, 0, 0, 1,255, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,201, 0, 0, 0, 21, 0, 0, 1, 80, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 80, 0, 0, 2, 0, 0, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 61, - 0, 0, 0,201, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 1, 80, 0, 0, 0,129, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,200, 0, 0, 0, 61, 0, 0, 1,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,255, 0, 0, 0,238, - 0, 0, 0,200, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0,200, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,238, 0, 0, 1,255, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 1, 0, 0, 0,129, 0, 0, 1, 80, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 80, 0, 0, 1, 82, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,130, - 0, 0, 2, 1, 0, 0, 1, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 82, 0, 0, 1, 80, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 1, 0, 0, 0,130, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 2, 0, 0, 2, 3, - 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,129, 0, 0, 2, 1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 3, 0, 0, 2, 2, 0, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 85, 0, 0, 0, 31, 0, 0, 1, 81, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 81, 0, 0, 2, 3, 0, 0, 1, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,131, - 0, 0, 1, 85, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 3, 0, 0, 1, 81, 0, 0, 0,129, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 84, 0, 0, 0,131, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 2, 0, 0, 1, 83, - 0, 0, 1, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 30, 0, 0, 1, 84, 0, 0, 1, 83, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 83, 0, 0, 2, 2, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 4, 0, 0, 0, 79, 0, 0, 0,236, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,236, 0, 0, 0,240, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 81, - 0, 0, 2, 4, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,240, 0, 0, 0,236, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 4, 0, 0, 0, 81, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 5, 0, 0, 2, 6, - 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 79, 0, 0, 2, 4, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 6, 0, 0, 2, 5, 0, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 84, 0, 0, 0, 30, 0, 0, 0,237, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,237, 0, 0, 2, 6, 0, 0, 1, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,131, - 0, 0, 1, 84, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 6, 0, 0, 0,237, 0, 0, 0, 79, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 85, 0, 0, 0,131, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 5, 0, 0, 0,241, - 0, 0, 1, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 31, 0, 0, 1, 85, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,241, 0, 0, 2, 5, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 7, 0, 0, 0, 78, 0, 0, 0,235, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,235, 0, 0, 1, 83, 0, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,130, - 0, 0, 2, 7, 0, 0, 1, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 83, 0, 0, 0,235, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 7, 0, 0, 0,130, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 8, 0, 0, 2, 9, - 0, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 78, 0, 0, 2, 7, 0, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 9, 0, 0, 2, 8, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,198, 0, 0, 0, 4, 0, 0, 0,234, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,234, 0, 0, 2, 9, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 60, - 0, 0, 0,198, 0, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 9, 0, 0, 0,234, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,199, 0, 0, 0, 60, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 8, 0, 0, 1, 82, - 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 21, 0, 0, 0,199, 0, 0, 1, 82, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 82, 0, 0, 2, 8, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 87, 0, 0, 0,132, 0, 0, 2, 10, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 10, 0, 0, 0,245, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 32, - 0, 0, 1, 87, 0, 0, 0,245, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,245, 0, 0, 2, 10, 0, 0, 0, 83, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 11, 0, 0, 0, 83, 0, 0, 2, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 10, 0, 0, 2, 12, - 0, 0, 2, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 65, 0, 0, 2, 11, 0, 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 12, 0, 0, 2, 10, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 86, 0, 0, 0, 23, 0, 0, 0,209, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,209, 0, 0, 2, 12, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,132, - 0, 0, 1, 86, 0, 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 12, 0, 0, 0,209, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 11, 0, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,208, 0, 0, 0,244, - 0, 0, 2, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 83, 0, 0, 2, 11, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,244, 0, 0, 0,208, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 86, 0, 0, 0,132, 0, 0, 2, 13, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 13, 0, 0, 1, 88, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 23, - 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 88, 0, 0, 2, 13, 0, 0, 0,133, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 14, 0, 0, 0,133, 0, 0, 2, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 13, 0, 0, 2, 15, - 0, 0, 2, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,134, 0, 0, 2, 14, 0, 0, 2, 15, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 15, 0, 0, 2, 13, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 87, 0, 0, 0, 32, 0, 0, 1, 91, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 91, 0, 0, 2, 15, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,132, - 0, 0, 1, 87, 0, 0, 2, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 15, 0, 0, 1, 91, 0, 0, 0,134, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 14, 0, 0, 0,134, 0, 0, 1, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 90, 0, 0, 1, 89, - 0, 0, 2, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,133, 0, 0, 2, 14, 0, 0, 1, 89, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 89, 0, 0, 1, 90, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,212, 0, 0, 0, 67, 0, 0, 2, 16, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 16, 0, 0, 0,242, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 6, - 0, 0, 0,212, 0, 0, 0,242, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,242, 0, 0, 2, 16, 0, 0, 0, 82, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 17, 0, 0, 0, 82, 0, 0, 2, 16, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 16, 0, 0, 2, 18, - 0, 0, 2, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,134, 0, 0, 2, 17, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 18, 0, 0, 2, 16, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,213, 0, 0, 0, 24, 0, 0, 1, 90, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 90, 0, 0, 2, 18, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 67, - 0, 0, 0,213, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 18, 0, 0, 1, 90, 0, 0, 0,134, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 17, 0, 0, 0,134, 0, 0, 1, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 91, 0, 0, 0,243, - 0, 0, 2, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 82, 0, 0, 2, 17, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,243, 0, 0, 1, 91, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,211, 0, 0, 0, 66, 0, 0, 2, 19, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 19, 0, 0, 1, 89, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 24, - 0, 0, 0,211, 0, 0, 1, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 89, 0, 0, 2, 19, 0, 0, 0,133, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 20, 0, 0, 0,133, 0, 0, 2, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 19, 0, 0, 2, 21, - 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 64, 0, 0, 2, 20, 0, 0, 2, 21, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 21, 0, 0, 2, 19, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,206, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,206, 0, 0, 2, 21, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 66, - 0, 0, 0,210, 0, 0, 2, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 21, 0, 0, 0,206, 0, 0, 0, 64, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 20, 0, 0, 0, 64, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,207, 0, 0, 1, 88, - 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,133, 0, 0, 2, 20, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 88, 0, 0, 0,207, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 93, 0, 0, 0,135, 0, 0, 2, 22, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 22, 0, 0, 0,247, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 33, - 0, 0, 1, 93, 0, 0, 0,247, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,247, 0, 0, 2, 22, 0, 0, 0, 84, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 23, 0, 0, 0, 84, 0, 0, 2, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 22, 0, 0, 2, 24, - 0, 0, 2, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 2, 23, 0, 0, 2, 24, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 24, 0, 0, 2, 22, 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 92, 0, 0, 0, 25, 0, 0, 0,217, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,217, 0, 0, 2, 24, 0, 0, 1, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,135, - 0, 0, 1, 92, 0, 0, 2, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 24, 0, 0, 0,217, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 23, 0, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,216, 0, 0, 0,246, - 0, 0, 2, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 84, 0, 0, 2, 23, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,246, 0, 0, 0,216, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 92, 0, 0, 0,135, 0, 0, 2, 25, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 25, 0, 0, 1, 94, 0, 0, 1, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, - 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 94, 0, 0, 2, 25, 0, 0, 0,136, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 26, 0, 0, 0,136, 0, 0, 2, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 25, 0, 0, 2, 27, - 0, 0, 2, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,137, 0, 0, 2, 26, 0, 0, 2, 27, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 27, 0, 0, 2, 25, 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 93, 0, 0, 0, 33, 0, 0, 1, 97, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 97, 0, 0, 2, 27, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,135, - 0, 0, 1, 93, 0, 0, 2, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 27, 0, 0, 1, 97, 0, 0, 0,137, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 26, 0, 0, 0,137, 0, 0, 1, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 96, 0, 0, 1, 95, - 0, 0, 2, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,136, 0, 0, 2, 26, 0, 0, 1, 95, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 95, 0, 0, 1, 96, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,220, 0, 0, 0, 71, 0, 0, 2, 28, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 28, 0, 0, 0,248, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, - 0, 0, 0,220, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,248, 0, 0, 2, 28, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 29, 0, 0, 0, 85, 0, 0, 2, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 28, 0, 0, 2, 30, - 0, 0, 2, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,137, 0, 0, 2, 29, 0, 0, 2, 30, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 30, 0, 0, 2, 28, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,221, 0, 0, 0, 26, 0, 0, 1, 96, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 96, 0, 0, 2, 30, 0, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 71, - 0, 0, 0,221, 0, 0, 2, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 30, 0, 0, 1, 96, 0, 0, 0,137, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 29, 0, 0, 0,137, 0, 0, 1, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 97, 0, 0, 0,249, - 0, 0, 2, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 85, 0, 0, 2, 29, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,249, 0, 0, 1, 97, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,219, 0, 0, 0, 70, 0, 0, 2, 31, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 31, 0, 0, 1, 95, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 26, - 0, 0, 0,219, 0, 0, 1, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 95, 0, 0, 2, 31, 0, 0, 0,136, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 32, 0, 0, 0,136, 0, 0, 2, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 31, 0, 0, 2, 33, - 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 68, 0, 0, 2, 32, 0, 0, 2, 33, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 33, 0, 0, 2, 31, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,218, 0, 0, 0, 2, 0, 0, 0,214, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,214, 0, 0, 2, 33, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 70, - 0, 0, 0,218, 0, 0, 2, 33, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 33, 0, 0, 0,214, 0, 0, 0, 68, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 32, 0, 0, 0, 68, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,215, 0, 0, 1, 94, - 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,136, 0, 0, 2, 32, 0, 0, 1, 94, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 94, 0, 0, 0,215, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 99, 0, 0, 0,138, 0, 0, 2, 34, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 34, 0, 0, 0,251, 0, 0, 1, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 34, - 0, 0, 1, 99, 0, 0, 0,251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,251, 0, 0, 2, 34, 0, 0, 0, 86, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 35, 0, 0, 0, 86, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 34, 0, 0, 2, 36, - 0, 0, 2, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 73, 0, 0, 2, 35, 0, 0, 2, 36, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 36, 0, 0, 2, 34, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 98, 0, 0, 0, 27, 0, 0, 0,225, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,225, 0, 0, 2, 36, 0, 0, 1, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,138, - 0, 0, 1, 98, 0, 0, 2, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 36, 0, 0, 0,225, 0, 0, 0, 73, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 35, 0, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,224, 0, 0, 0,250, - 0, 0, 2, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 86, 0, 0, 2, 35, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,250, 0, 0, 0,224, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 98, 0, 0, 0,138, 0, 0, 2, 37, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 37, 0, 0, 1,100, 0, 0, 1, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 27, - 0, 0, 1, 98, 0, 0, 1,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,100, 0, 0, 2, 37, 0, 0, 0,139, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 38, 0, 0, 0,139, 0, 0, 2, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 37, 0, 0, 2, 39, - 0, 0, 2, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,140, 0, 0, 2, 38, 0, 0, 2, 39, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 39, 0, 0, 2, 37, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 99, 0, 0, 0, 34, 0, 0, 1,103, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,103, 0, 0, 2, 39, 0, 0, 1, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,138, - 0, 0, 1, 99, 0, 0, 2, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 39, 0, 0, 1,103, 0, 0, 0,140, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 38, 0, 0, 0,140, 0, 0, 1,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,102, 0, 0, 1,101, - 0, 0, 2, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,139, 0, 0, 2, 38, 0, 0, 1,101, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,101, 0, 0, 1,102, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,228, 0, 0, 0, 75, 0, 0, 2, 40, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 40, 0, 0, 0,252, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 8, - 0, 0, 0,228, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,252, 0, 0, 2, 40, 0, 0, 0, 87, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 41, 0, 0, 0, 87, 0, 0, 2, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 40, 0, 0, 2, 42, - 0, 0, 2, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,140, 0, 0, 2, 41, 0, 0, 2, 42, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 42, 0, 0, 2, 40, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,229, 0, 0, 0, 28, 0, 0, 1,102, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,102, 0, 0, 2, 42, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 75, - 0, 0, 0,229, 0, 0, 2, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 42, 0, 0, 1,102, 0, 0, 0,140, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 41, 0, 0, 0,140, 0, 0, 1,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,103, 0, 0, 0,253, - 0, 0, 2, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 87, 0, 0, 2, 41, 0, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,253, 0, 0, 1,103, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,227, 0, 0, 0, 74, 0, 0, 2, 43, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 43, 0, 0, 1,101, 0, 0, 0,227, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 28, - 0, 0, 0,227, 0, 0, 1,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,101, 0, 0, 2, 43, 0, 0, 0,139, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 44, 0, 0, 0,139, 0, 0, 2, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 43, 0, 0, 2, 45, - 0, 0, 2, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 72, 0, 0, 2, 44, 0, 0, 2, 45, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 45, 0, 0, 2, 43, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 0, 3, 0, 0, 0,222, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,222, 0, 0, 2, 45, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 74, - 0, 0, 0,226, 0, 0, 2, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 45, 0, 0, 0,222, 0, 0, 0, 72, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 44, 0, 0, 0, 72, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,223, 0, 0, 1,100, - 0, 0, 2, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,139, 0, 0, 2, 44, 0, 0, 1,100, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,100, 0, 0, 0,223, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,105, 0, 0, 0,141, 0, 0, 2, 46, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 46, 0, 0, 0,255, 0, 0, 1,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, - 0, 0, 1,105, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255, 0, 0, 2, 46, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 47, 0, 0, 0, 88, 0, 0, 2, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 46, 0, 0, 2, 48, - 0, 0, 2, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 77, 0, 0, 2, 47, 0, 0, 2, 48, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 48, 0, 0, 2, 46, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,104, 0, 0, 0, 29, 0, 0, 0,233, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,233, 0, 0, 2, 48, 0, 0, 1,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,141, - 0, 0, 1,104, 0, 0, 2, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 48, 0, 0, 0,233, 0, 0, 0, 77, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 47, 0, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,232, 0, 0, 0,254, - 0, 0, 2, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 88, 0, 0, 2, 47, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0,254, 0, 0, 0,232, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,104, 0, 0, 0,141, 0, 0, 2, 49, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 49, 0, 0, 1,106, 0, 0, 1,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 29, - 0, 0, 1,104, 0, 0, 1,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,106, 0, 0, 2, 49, 0, 0, 0,142, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 50, 0, 0, 0,142, 0, 0, 2, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 49, 0, 0, 2, 51, - 0, 0, 2, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,143, 0, 0, 2, 50, 0, 0, 2, 51, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 51, 0, 0, 2, 49, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 1,109, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,109, 0, 0, 2, 51, 0, 0, 1,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,141, - 0, 0, 1,105, 0, 0, 2, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 51, 0, 0, 1,109, 0, 0, 0,143, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 50, 0, 0, 0,143, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,108, 0, 0, 1,107, - 0, 0, 2, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,142, 0, 0, 2, 50, 0, 0, 1,107, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,107, 0, 0, 1,108, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,236, 0, 0, 0, 79, 0, 0, 2, 52, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 52, 0, 0, 1, 0, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9, - 0, 0, 0,236, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 2, 52, 0, 0, 0, 89, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 53, 0, 0, 0, 89, 0, 0, 2, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 52, 0, 0, 2, 54, - 0, 0, 2, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,143, 0, 0, 2, 53, 0, 0, 2, 54, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 54, 0, 0, 2, 52, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,237, 0, 0, 0, 30, 0, 0, 1,108, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,108, 0, 0, 2, 54, 0, 0, 0,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 79, - 0, 0, 0,237, 0, 0, 2, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 54, 0, 0, 1,108, 0, 0, 0,143, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 53, 0, 0, 0,143, 0, 0, 1,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,109, 0, 0, 1, 1, - 0, 0, 2, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 2, 53, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 1, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,235, 0, 0, 0, 78, 0, 0, 2, 55, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 55, 0, 0, 1,107, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 30, - 0, 0, 0,235, 0, 0, 1,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,107, 0, 0, 2, 55, 0, 0, 0,142, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 56, 0, 0, 0,142, 0, 0, 2, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 55, 0, 0, 2, 57, - 0, 0, 2, 56, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 0, 0, 2, 56, 0, 0, 2, 57, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 57, 0, 0, 2, 55, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,234, 0, 0, 0, 4, 0, 0, 0,230, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,230, 0, 0, 2, 57, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 78, - 0, 0, 0,234, 0, 0, 2, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 57, 0, 0, 0,230, 0, 0, 0, 76, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 56, 0, 0, 0, 76, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,231, 0, 0, 1,106, - 0, 0, 2, 56, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,142, 0, 0, 2, 56, 0, 0, 1,106, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,106, 0, 0, 0,231, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,111, 0, 0, 0,144, 0, 0, 2, 58, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 58, 0, 0, 1, 3, 0, 0, 1,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 36, - 0, 0, 1,111, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 3, 0, 0, 2, 58, 0, 0, 0, 90, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 59, 0, 0, 0, 90, 0, 0, 2, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 58, 0, 0, 2, 60, - 0, 0, 2, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 81, 0, 0, 2, 59, 0, 0, 2, 60, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 60, 0, 0, 2, 58, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,110, 0, 0, 0, 31, 0, 0, 0,241, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,241, 0, 0, 2, 60, 0, 0, 1,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,144, - 0, 0, 1,110, 0, 0, 2, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 60, 0, 0, 0,241, 0, 0, 0, 81, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 59, 0, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,240, 0, 0, 1, 2, - 0, 0, 2, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 90, 0, 0, 2, 59, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 2, 0, 0, 0,240, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,110, 0, 0, 0,144, 0, 0, 2, 61, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 61, 0, 0, 1,113, 0, 0, 1,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 31, - 0, 0, 1,110, 0, 0, 1,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,113, 0, 0, 2, 61, 0, 0, 0,145, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 62, 0, 0, 0,145, 0, 0, 2, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 61, 0, 0, 2, 63, - 0, 0, 2, 62, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,146, 0, 0, 2, 62, 0, 0, 2, 63, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 63, 0, 0, 2, 61, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,111, 0, 0, 0, 36, 0, 0, 1,115, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,115, 0, 0, 2, 63, 0, 0, 1,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,144, - 0, 0, 1,111, 0, 0, 2, 63, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 63, 0, 0, 1,115, 0, 0, 0,146, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 62, 0, 0, 0,146, 0, 0, 1,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,114, 0, 0, 1,112, - 0, 0, 2, 62, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,145, 0, 0, 2, 62, 0, 0, 1,112, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,112, 0, 0, 1,114, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,204, 0, 0, 0, 63, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 64, 0, 0, 1, 4, 0, 0, 0,204, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 10, - 0, 0, 0,204, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 4, 0, 0, 2, 64, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 65, 0, 0, 0, 91, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 64, 0, 0, 2, 66, - 0, 0, 2, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,146, 0, 0, 2, 65, 0, 0, 2, 66, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 66, 0, 0, 2, 64, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,205, 0, 0, 0, 22, 0, 0, 1,114, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,114, 0, 0, 2, 66, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 63, - 0, 0, 0,205, 0, 0, 2, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 66, 0, 0, 1,114, 0, 0, 0,146, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 65, 0, 0, 0,146, 0, 0, 1,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,115, 0, 0, 1, 5, - 0, 0, 2, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 91, 0, 0, 2, 65, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 5, 0, 0, 1,115, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,203, 0, 0, 0, 62, 0, 0, 2, 67, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 67, 0, 0, 1,112, 0, 0, 0,203, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 22, - 0, 0, 0,203, 0, 0, 1,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,112, 0, 0, 2, 67, 0, 0, 0,145, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 68, 0, 0, 0,145, 0, 0, 2, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 67, 0, 0, 2, 69, - 0, 0, 2, 68, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 80, 0, 0, 2, 68, 0, 0, 2, 69, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 69, 0, 0, 2, 67, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,202, 0, 0, 0, 5, 0, 0, 0,238, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,238, 0, 0, 2, 69, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 62, - 0, 0, 0,202, 0, 0, 2, 69, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 69, 0, 0, 0,238, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 68, 0, 0, 0, 80, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,239, 0, 0, 1,113, - 0, 0, 2, 68, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,145, 0, 0, 2, 68, 0, 0, 1,113, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,113, 0, 0, 0,239, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 70, 0, 0, 0,147, 0, 0, 1,117, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,117, 0, 0, 1, 11, 0, 0, 2, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 94, - 0, 0, 2, 70, 0, 0, 1, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 11, 0, 0, 1,117, 0, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 70, 0, 0, 0, 94, 0, 0, 2, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 71, 0, 0, 2, 72, - 0, 0, 2, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,147, 0, 0, 2, 70, 0, 0, 2, 72, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 72, 0, 0, 2, 71, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,243, 0, 0, 0, 32, 0, 0, 1,116, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,116, 0, 0, 2, 72, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 82, - 0, 0, 0,243, 0, 0, 2, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 72, 0, 0, 1,116, 0, 0, 0,147, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,242, 0, 0, 0, 82, 0, 0, 2, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 71, 0, 0, 1, 10, - 0, 0, 0,242, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0,242, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 10, 0, 0, 2, 71, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 73, 0, 0, 0,147, 0, 0, 1,116, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,116, 0, 0, 1,118, 0, 0, 2, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,148, - 0, 0, 2, 73, 0, 0, 1,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,118, 0, 0, 1,116, 0, 0, 0, 32, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 73, 0, 0, 0,148, 0, 0, 2, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 74, 0, 0, 2, 75, - 0, 0, 2, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,147, 0, 0, 2, 73, 0, 0, 2, 75, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 75, 0, 0, 2, 74, 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,121, 0, 0, 0, 38, 0, 0, 1,117, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,117, 0, 0, 2, 75, 0, 0, 1,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,149, - 0, 0, 1,121, 0, 0, 2, 75, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 75, 0, 0, 1,117, 0, 0, 0,147, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,120, 0, 0, 0,149, 0, 0, 2, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 74, 0, 0, 1,119, - 0, 0, 1,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 37, 0, 0, 1,120, 0, 0, 1,119, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,119, 0, 0, 2, 74, 0, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 76, 0, 0, 0, 93, 0, 0, 1, 8, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 8, 0, 0, 1, 12, 0, 0, 2, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 95, - 0, 0, 2, 76, 0, 0, 1, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 12, 0, 0, 1, 8, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 76, 0, 0, 0, 95, 0, 0, 2, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 77, 0, 0, 2, 78, - 0, 0, 2, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 93, 0, 0, 2, 76, 0, 0, 2, 78, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 78, 0, 0, 2, 77, 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,120, 0, 0, 0, 37, 0, 0, 1, 9, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 9, 0, 0, 2, 78, 0, 0, 1,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,149, - 0, 0, 1,120, 0, 0, 2, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 78, 0, 0, 1, 9, 0, 0, 0, 93, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,121, 0, 0, 0,149, 0, 0, 2, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 77, 0, 0, 1, 13, - 0, 0, 1,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 38, 0, 0, 1,121, 0, 0, 1, 13, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 13, 0, 0, 2, 77, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 79, 0, 0, 0, 92, 0, 0, 1, 7, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 7, 0, 0, 1,119, 0, 0, 2, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,148, - 0, 0, 2, 79, 0, 0, 1,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,119, 0, 0, 1, 7, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 79, 0, 0, 0,148, 0, 0, 2, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 80, 0, 0, 2, 81, - 0, 0, 2, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 92, 0, 0, 2, 79, 0, 0, 2, 81, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 81, 0, 0, 2, 80, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,244, 0, 0, 0, 10, 0, 0, 1, 6, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 6, 0, 0, 2, 81, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 83, - 0, 0, 0,244, 0, 0, 2, 81, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 81, 0, 0, 1, 6, 0, 0, 0, 92, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,245, 0, 0, 0, 83, 0, 0, 2, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 80, 0, 0, 1,118, - 0, 0, 0,245, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 32, 0, 0, 0,245, 0, 0, 1,118, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,118, 0, 0, 2, 80, 0, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 82, 0, 0, 0,150, 0, 0, 1,123, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,123, 0, 0, 1, 15, 0, 0, 2, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 96, - 0, 0, 2, 82, 0, 0, 1, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 15, 0, 0, 1,123, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 82, 0, 0, 0, 96, 0, 0, 2, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 83, 0, 0, 2, 84, - 0, 0, 2, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,150, 0, 0, 2, 82, 0, 0, 2, 84, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 84, 0, 0, 2, 83, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,249, 0, 0, 0, 33, 0, 0, 1,122, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,122, 0, 0, 2, 84, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 85, - 0, 0, 0,249, 0, 0, 2, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 84, 0, 0, 1,122, 0, 0, 0,150, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,248, 0, 0, 0, 85, 0, 0, 2, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 83, 0, 0, 1, 14, - 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0,248, 0, 0, 1, 14, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 14, 0, 0, 2, 83, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 85, 0, 0, 0,150, 0, 0, 1,122, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,122, 0, 0, 1,124, 0, 0, 2, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,151, - 0, 0, 2, 85, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,124, 0, 0, 1,122, 0, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 85, 0, 0, 0,151, 0, 0, 2, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 86, 0, 0, 2, 87, - 0, 0, 2, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,150, 0, 0, 2, 85, 0, 0, 2, 87, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 87, 0, 0, 2, 86, 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,127, 0, 0, 0, 39, 0, 0, 1,123, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,123, 0, 0, 2, 87, 0, 0, 1,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,152, - 0, 0, 1,127, 0, 0, 2, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 87, 0, 0, 1,123, 0, 0, 0,150, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,126, 0, 0, 0,152, 0, 0, 2, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 86, 0, 0, 1,125, - 0, 0, 1,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 38, 0, 0, 1,126, 0, 0, 1,125, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,125, 0, 0, 2, 86, 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 88, 0, 0, 0, 95, 0, 0, 1, 12, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 12, 0, 0, 1, 16, 0, 0, 2, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 97, - 0, 0, 2, 88, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 16, 0, 0, 1, 12, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 88, 0, 0, 0, 97, 0, 0, 2, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 89, 0, 0, 2, 90, - 0, 0, 2, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 95, 0, 0, 2, 88, 0, 0, 2, 90, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 90, 0, 0, 2, 89, 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,126, 0, 0, 0, 38, 0, 0, 1, 13, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 13, 0, 0, 2, 90, 0, 0, 1,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,152, - 0, 0, 1,126, 0, 0, 2, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 90, 0, 0, 1, 13, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,127, 0, 0, 0,152, 0, 0, 2, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 89, 0, 0, 1, 17, - 0, 0, 1,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 39, 0, 0, 1,127, 0, 0, 1, 17, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 17, 0, 0, 2, 89, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 91, 0, 0, 0, 94, 0, 0, 1, 11, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 11, 0, 0, 1,125, 0, 0, 2, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,151, - 0, 0, 2, 91, 0, 0, 1,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,125, 0, 0, 1, 11, 0, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 91, 0, 0, 0,151, 0, 0, 2, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 92, 0, 0, 2, 93, - 0, 0, 2, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 94, 0, 0, 2, 91, 0, 0, 2, 93, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 93, 0, 0, 2, 92, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,246, 0, 0, 0, 6, 0, 0, 1, 10, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 10, 0, 0, 2, 93, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 84, - 0, 0, 0,246, 0, 0, 2, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 93, 0, 0, 1, 10, 0, 0, 0, 94, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,247, 0, 0, 0, 84, 0, 0, 2, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 92, 0, 0, 1,124, - 0, 0, 0,247, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 33, 0, 0, 0,247, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,124, 0, 0, 2, 92, 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 94, 0, 0, 0,153, 0, 0, 1,129, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,129, 0, 0, 1, 19, 0, 0, 2, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 98, - 0, 0, 2, 94, 0, 0, 1, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 19, 0, 0, 1,129, 0, 0, 0, 40, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 94, 0, 0, 0, 98, 0, 0, 2, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 95, 0, 0, 2, 96, - 0, 0, 2, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,153, 0, 0, 2, 94, 0, 0, 2, 96, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 96, 0, 0, 2, 95, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 1,128, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,128, 0, 0, 2, 96, 0, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 87, - 0, 0, 0,253, 0, 0, 2, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 96, 0, 0, 1,128, 0, 0, 0,153, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,252, 0, 0, 0, 87, 0, 0, 2, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 95, 0, 0, 1, 18, - 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0,252, 0, 0, 1, 18, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 18, 0, 0, 2, 95, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 97, 0, 0, 0,153, 0, 0, 1,128, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,128, 0, 0, 1,130, 0, 0, 2, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,154, - 0, 0, 2, 97, 0, 0, 1,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,130, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2, 97, 0, 0, 0,154, 0, 0, 2, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 98, 0, 0, 2, 99, - 0, 0, 2, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,153, 0, 0, 2, 97, 0, 0, 2, 99, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2, 99, 0, 0, 2, 98, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,133, 0, 0, 0, 40, 0, 0, 1,129, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,129, 0, 0, 2, 99, 0, 0, 1,133, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,155, - 0, 0, 1,133, 0, 0, 2, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 99, 0, 0, 1,129, 0, 0, 0,153, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,132, 0, 0, 0,155, 0, 0, 2, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 98, 0, 0, 1,131, - 0, 0, 1,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 39, 0, 0, 1,132, 0, 0, 1,131, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,131, 0, 0, 2, 98, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,100, 0, 0, 0, 97, 0, 0, 1, 16, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 2,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 99, - 0, 0, 2,100, 0, 0, 1, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 20, 0, 0, 1, 16, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,100, 0, 0, 0, 99, 0, 0, 2,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,101, 0, 0, 2,102, - 0, 0, 2,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 97, 0, 0, 2,100, 0, 0, 2,102, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,102, 0, 0, 2,101, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,132, 0, 0, 0, 39, 0, 0, 1, 17, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 17, 0, 0, 2,102, 0, 0, 1,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,155, - 0, 0, 1,132, 0, 0, 2,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,102, 0, 0, 1, 17, 0, 0, 0, 97, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,133, 0, 0, 0,155, 0, 0, 2,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,101, 0, 0, 1, 21, - 0, 0, 1,133, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 40, 0, 0, 1,133, 0, 0, 1, 21, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 21, 0, 0, 2,101, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,103, 0, 0, 0, 96, 0, 0, 1, 15, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 15, 0, 0, 1,131, 0, 0, 2,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,154, - 0, 0, 2,103, 0, 0, 1,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,131, 0, 0, 1, 15, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,103, 0, 0, 0,154, 0, 0, 2,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,104, 0, 0, 2,105, - 0, 0, 2,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 96, 0, 0, 2,103, 0, 0, 2,105, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,105, 0, 0, 2,104, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,250, 0, 0, 0, 7, 0, 0, 1, 14, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 14, 0, 0, 2,105, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 86, - 0, 0, 0,250, 0, 0, 2,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,105, 0, 0, 1, 14, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,251, 0, 0, 0, 86, 0, 0, 2,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,104, 0, 0, 1,130, - 0, 0, 0,251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 1,130, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,130, 0, 0, 2,104, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,106, 0, 0, 0,156, 0, 0, 1,135, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,135, 0, 0, 1, 23, 0, 0, 2,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,100, - 0, 0, 2,106, 0, 0, 1, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 23, 0, 0, 1,135, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,106, 0, 0, 0,100, 0, 0, 2,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,107, 0, 0, 2,108, - 0, 0, 2,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,156, 0, 0, 2,106, 0, 0, 2,108, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,108, 0, 0, 2,107, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 1,134, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,134, 0, 0, 2,108, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 89, - 0, 0, 1, 1, 0, 0, 2,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,108, 0, 0, 1,134, 0, 0, 0,156, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 89, 0, 0, 2,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,107, 0, 0, 1, 22, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9, 0, 0, 1, 0, 0, 0, 1, 22, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 22, 0, 0, 2,107, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,109, 0, 0, 0,156, 0, 0, 1,134, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 2,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,157, - 0, 0, 2,109, 0, 0, 1,136, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,136, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,109, 0, 0, 0,157, 0, 0, 2,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,110, 0, 0, 2,111, - 0, 0, 2,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,156, 0, 0, 2,109, 0, 0, 2,111, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,111, 0, 0, 2,110, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,139, 0, 0, 0, 41, 0, 0, 1,135, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,135, 0, 0, 2,111, 0, 0, 1,139, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,158, - 0, 0, 1,139, 0, 0, 2,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,111, 0, 0, 1,135, 0, 0, 0,156, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,138, 0, 0, 0,158, 0, 0, 2,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,110, 0, 0, 1,137, - 0, 0, 1,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 40, 0, 0, 1,138, 0, 0, 1,137, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,137, 0, 0, 2,110, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,112, 0, 0, 0, 99, 0, 0, 1, 20, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 20, 0, 0, 1, 24, 0, 0, 2,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,101, - 0, 0, 2,112, 0, 0, 1, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 24, 0, 0, 1, 20, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,112, 0, 0, 0,101, 0, 0, 2,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,113, 0, 0, 2,114, - 0, 0, 2,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 99, 0, 0, 2,112, 0, 0, 2,114, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,114, 0, 0, 2,113, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,138, 0, 0, 0, 40, 0, 0, 1, 21, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 21, 0, 0, 2,114, 0, 0, 1,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,158, - 0, 0, 1,138, 0, 0, 2,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,114, 0, 0, 1, 21, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,139, 0, 0, 0,158, 0, 0, 2,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,113, 0, 0, 1, 25, - 0, 0, 1,139, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 41, 0, 0, 1,139, 0, 0, 1, 25, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 25, 0, 0, 2,113, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,115, 0, 0, 0, 98, 0, 0, 1, 19, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 19, 0, 0, 1,137, 0, 0, 2,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,157, - 0, 0, 2,115, 0, 0, 1,137, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,137, 0, 0, 1, 19, 0, 0, 0, 40, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,115, 0, 0, 0,157, 0, 0, 2,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,116, 0, 0, 2,117, - 0, 0, 2,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 98, 0, 0, 2,115, 0, 0, 2,117, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,117, 0, 0, 2,116, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,254, 0, 0, 0, 8, 0, 0, 1, 18, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 18, 0, 0, 2,117, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 88, - 0, 0, 0,254, 0, 0, 2,117, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,117, 0, 0, 1, 18, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0,255, 0, 0, 0, 88, 0, 0, 2,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,116, 0, 0, 1,136, - 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,136, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,136, 0, 0, 2,116, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,118, 0, 0, 0,159, 0, 0, 1,141, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,141, 0, 0, 1, 7, 0, 0, 2,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 92, - 0, 0, 2,118, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 7, 0, 0, 1,141, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,118, 0, 0, 0, 92, 0, 0, 2,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,119, 0, 0, 2,120, - 0, 0, 2,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,159, 0, 0, 2,118, 0, 0, 2,120, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,120, 0, 0, 2,119, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 5, 0, 0, 0, 36, 0, 0, 1,140, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,140, 0, 0, 2,120, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 91, - 0, 0, 1, 5, 0, 0, 2,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,120, 0, 0, 1,140, 0, 0, 0,159, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 4, 0, 0, 0, 91, 0, 0, 2,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,119, 0, 0, 1, 6, - 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 1, 4, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 6, 0, 0, 2,119, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,121, 0, 0, 0,159, 0, 0, 1,140, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,140, 0, 0, 1,142, 0, 0, 2,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,160, - 0, 0, 2,121, 0, 0, 1,142, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,142, 0, 0, 1,140, 0, 0, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,121, 0, 0, 0,160, 0, 0, 2,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,122, 0, 0, 2,123, - 0, 0, 2,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,159, 0, 0, 2,121, 0, 0, 2,123, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,123, 0, 0, 2,122, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,144, 0, 0, 0, 37, 0, 0, 1,141, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,141, 0, 0, 2,123, 0, 0, 1,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,161, - 0, 0, 1,144, 0, 0, 2,123, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,123, 0, 0, 1,141, 0, 0, 0,159, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,145, 0, 0, 0,161, 0, 0, 2,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,122, 0, 0, 1,143, - 0, 0, 1,145, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 41, 0, 0, 1,145, 0, 0, 1,143, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,143, 0, 0, 2,122, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,124, 0, 0, 0,101, 0, 0, 1, 24, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 24, 0, 0, 1, 8, 0, 0, 2,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 93, - 0, 0, 2,124, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 8, 0, 0, 1, 24, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,124, 0, 0, 0, 93, 0, 0, 2,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,125, 0, 0, 2,126, - 0, 0, 2,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,101, 0, 0, 2,124, 0, 0, 2,126, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,126, 0, 0, 2,125, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,145, 0, 0, 0, 41, 0, 0, 1, 25, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 25, 0, 0, 2,126, 0, 0, 1,145, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,161, - 0, 0, 1,145, 0, 0, 2,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,126, 0, 0, 1, 25, 0, 0, 0,101, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1,144, 0, 0, 0,161, 0, 0, 2,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,125, 0, 0, 1, 9, - 0, 0, 1,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 37, 0, 0, 1,144, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1, 9, 0, 0, 2,125, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,127, 0, 0, 0,100, 0, 0, 1, 23, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 23, 0, 0, 1,143, 0, 0, 2,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,160, - 0, 0, 2,127, 0, 0, 1,143, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,143, 0, 0, 1, 23, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 2,127, 0, 0, 0,160, 0, 0, 2,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,128, 0, 0, 2,129, - 0, 0, 2,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,100, 0, 0, 2,127, 0, 0, 2,129, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 2,129, 0, 0, 2,128, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 2, 0, 0, 0, 9, 0, 0, 1, 22, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 22, 0, 0, 2,129, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 90, - 0, 0, 1, 2, 0, 0, 2,129, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,129, 0, 0, 1, 22, 0, 0, 0,100, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 1, 3, 0, 0, 0, 90, 0, 0, 2,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,128, 0, 0, 1,142, - 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 1, 3, 0, 0, 1,142, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 1,142, 0, 0, 2,128, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 3, 68, 65, 84, 65, 0, 0,220, 0, 7,249, 0, 32, - 0, 0, 0, 65, 0, 0, 5, 0, 63,110,222,166, 63, 55,205, 9, 63,105,132,212, 63, 65,236,201, 63,103,153,218, 63, 54,155,119, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,103,153,218, 63, 54,155,119, 63,108,148,118, - 63, 44,160,211, 63,110,222,166, 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 36, 63, 45, 28, 36, 63,110,222,166, 63, 55,205, 9, 63,108,148,118, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,148,118, 63, 44,160,211, 63,103,153,218, 63, 54,155,119, 63,102, 17, 87, - 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 81, 56, 63, 52, 55,170, - 63,102, 17, 87, 63, 43, 52,229, 63,103,153,218, 63, 54,155,119, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,103,153,218, 63, 54,155,119, 63, 97, 75, 9, 63, 63,233, 92, 63, 96, 81, 56, 63, 52, 55,170, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 60, 86, 49, 63, 96, 81, 56, 63, 52, 55,170, - 63, 97, 75, 9, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 97, 75, 9, - 63, 63,233, 92, 63,103,153,218, 63, 54,155,119, 63,105,132,212, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 98,167,103, 63, 75, 39,168, 63, 89,153,138, 63, 82,228, 39, 63, 89,153,139, 63, 71,153,255, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 71,153,255, 63, 97, 75, 9, - 63, 63,233, 92, 63, 98,167,103, 63, 75, 39,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,105,132,212, 63, 65,236,201, 63, 98,167,103, 63, 75, 39,168, 63, 97, 75, 9, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 97, 75, 9, 63, 63,233, 92, 63, 89,153,139, 63, 71,153,255, 63, 89,153,138, - 63, 60, 86, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 81, 56, 63, 52, 55,170, - 63, 89,153,138, 63, 60, 86, 49, 63, 89,153,139, 63, 49, 12, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 89,153,139, 63, 49, 12, 79, 63, 95,182,205, 63, 40,228,222, 63, 96, 81, 56, 63, 52, 55,170, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 17, 87, 63, 43, 52,229, 63, 96, 81, 56, 63, 52, 55,170, - 63, 95,182,205, 63, 40,228,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,182,205, - 63, 40,228,222, 63, 89,153,139, 63, 49, 12, 79, 63, 89,153,139, 63, 37,200, 45, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 98,167,103, 63, 75, 39,168, 63,105,132,212, 63, 65,236,201, 63,109, 83,168, 63, 78, 83,207, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 83,168, 63, 78, 83,207, 63,101, 85,135, - 63, 88, 64,148, 63, 98,167,103, 63, 75, 39,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,138, 63, 82,228, 39, 63, 98,167,103, 63, 75, 39,168, 63,101, 85,135, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 85,135, 63, 88, 64,148, 63,109, 83,168, 63, 78, 83,207, 63,115, 51, 36, - 63, 90, 56, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 18,162, 63, 78, 83,207, - 63,115, 51, 36, 63, 90, 56, 22, 63,109, 83,168, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,109, 83,168, 63, 78, 83,207, 63,115, 51, 36, 63, 67, 23,115, 63,121, 18,162, 63, 78, 83,207, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,225,116, 63, 65,236,202, 63,121, 18,162, 63, 78, 83,207, - 63,115, 51, 36, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, - 63, 67, 23,115, 63,109, 83,168, 63, 78, 83,207, 63,105,132,212, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,110,222,166, 63, 55,205, 9, 63,115, 51, 36, 63, 45, 28, 36, 63,119,135,163, 63, 55,205, 11, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,119,135,163, 63, 55,205, 11, 63,115, 51, 36, - 63, 67, 23,115, 63,110,222,166, 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,105,132,212, 63, 65,236,201, 63,110,222,166, 63, 55,205, 9, 63,115, 51, 36, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 67, 23,115, 63,119,135,163, 63, 55,205, 11, 63,124,225,116, - 63, 65,236,202, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 18,162, 63, 78, 83,207, - 63,124,225,116, 63, 65,236,202, 63,129,223,113, 63, 75, 39,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,129,223,113, 63, 75, 39,170, 63,128,136, 98, 63, 88, 64,148, 63,121, 18,162, 63, 78, 83,207, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 90, 56, 22, 63,121, 18,162, 63, 78, 83,207, - 63,128,136, 98, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 59,136, 98, 95, - 63, 88, 64,148, 60,111,184,160, 63, 75, 39,170, 61, 76,203,243, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,243, 63, 49, 12, 82, 61, 76,203,246, 63, 60, 86, 53, 60,194,162, 31, 63, 52, 55,172, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,194,162, 31, 63, 52, 55,172, 60,213,239,111, - 63, 40,228,223, 61, 76,203,243, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,203,246, 63, 37,200, 48, 61, 76,203,243, 63, 49, 12, 82, 60,213,239,111, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,213,239,111, 63, 40,228,223, 60,194,162, 31, 63, 52, 55,172, 58,169,226,120, - 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,204,111, 63, 54,155,121, - 63,128, 42,121, 63, 43, 52,230, 63,131, 10,136, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,131, 10,136, 63, 52, 55,172, 63,130,141,160, 63, 63,233, 95, 63,126,204,111, 63, 54,155,121, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,225,116, 63, 65,236,202, 63,126,204,111, 63, 54,155,121, - 63,130,141,160, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,163,104, 11, - 63, 63,233, 95, 60,194,162, 31, 63, 52, 55,172, 61, 76,203,246, 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,244, 63, 71,154, 2, 61, 76,203,243, 63, 82,228, 41, 60,111,184,160, 63, 75, 39,170, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,111,184,160, 63, 75, 39,170, 60,163,104, 11, - 63, 63,233, 95, 61, 76,203,244, 63, 71,154, 2, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,203,246, 63, 60, 86, 53, 61, 76,203,244, 63, 71,154, 2, 60,163,104, 11, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,130,141,160, 63, 63,233, 95, 63,129,223,113, 63, 75, 39,170, 63,124,225,116, - 63, 65,236,202, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,204,111, 63, 54,155,121, - 63,124,225,116, 63, 65,236,202, 63,119,135,163, 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,119,135,163, 63, 55,205, 11, 63,121,209,210, 63, 44,160,212, 63,126,204,111, 63, 54,155,121, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 42,121, 63, 43, 52,230, 63,126,204,111, 63, 54,155,121, - 63,121,209,210, 63, 44,160,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,209,210, - 63, 44,160,212, 63,119,135,163, 63, 55,205, 11, 63,115, 51, 36, 63, 45, 28, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,134,102, 95, 63, 94, 46, 79, 63,134,102, 95, 63,105,114, 22, 63,124,205, 52, 63, 99, 26, 58, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,205, 52, 63, 99, 26, 58, 63,128,136, 98, - 63, 88, 64,148, 63,134,102, 95, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,203,243, 63, 82,228, 41, 61, 76,203,234, 63, 94, 46, 79, 59,136, 98, 95, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,128,136, 98, 63, 88, 64,148, 63,124,205, 52, 63, 99, 26, 58, 63,115, 51, 36, - 63, 90, 56, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,153, 21, 63, 99, 26, 58, - 63,115, 51, 36, 63, 90, 56, 22, 63,124,205, 52, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,124,205, 52, 63, 99, 26, 58, 63,115, 51, 32, 63,109,154,212, 63,105,153, 21, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63,105,114, 19, 63,105,153, 21, 63, 99, 26, 58, - 63,115, 51, 32, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 32, - 63,109,154,212, 63,124,205, 52, 63, 99, 26, 58, 63,134,102, 95, 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,134,102, 95, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 63, 89,153,136, 63,116,187,242, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,136, 63,116,187,242, 63,115, 51, 32, - 63,109,154,212, 63,134,102, 95, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,134,102, 95, 63,105,114, 22, 63,134,102, 95, 63,116,187,242, 63,115, 51, 32, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 32, 63,109,154,212, 63, 89,153,136, 63,116,187,242, 63, 89,153,138, - 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,153, 21, 63, 99, 26, 58, - 63, 89,153,138, 63,105,114, 19, 63, 89,153,138, 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 89,153,138, 63, 94, 46, 77, 63,101, 85,135, 63, 88, 64,148, 63,105,153, 21, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 90, 56, 22, 63,105,153, 21, 63, 99, 26, 58, - 63,101, 85,135, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 85,135, - 63, 88, 64,148, 63, 89,153,138, 63, 94, 46, 77, 63, 89,153,138, 63, 82,228, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,153, 67, 63, 54,155,113, 63, 73,174, 74, 63, 65,236,193, 63, 68, 84,124, 63, 55,204,255, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 68, 84,124, 63, 55,204,255, 63, 70,158,169, - 63, 44,160,200, 63, 75,153, 67, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 77, 33,196, 63, 43, 52,221, 63, 75,153, 67, 63, 54,155,113, 63, 70,158,169, 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,158,169, 63, 44,160,200, 63, 68, 84,124, 63, 55,204,255, 63, 64, 0, 0, - 63, 45, 28, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,153, 67, 63, 54,155,113, - 63, 77, 33,196, 63, 43, 52,221, 63, 82,225,225, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 82,225,225, 63, 52, 55,165, 63, 81,232, 16, 63, 63,233, 89, 63, 75,153, 67, 63, 54,155,113, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,174, 74, 63, 65,236,193, 63, 75,153, 67, 63, 54,155,113, - 63, 81,232, 16, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 81,232, 16, - 63, 63,233, 89, 63, 82,225,225, 63, 52, 55,165, 63, 89,153,138, 63, 60, 86, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 71,153,255, 63, 89,153,138, 63, 82,228, 39, 63, 80,139,179, 63, 75, 39,164, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80,139,179, 63, 75, 39,164, 63, 81,232, 16, - 63, 63,233, 89, 63, 89,153,139, 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,138, 63, 60, 86, 49, 63, 89,153,139, 63, 71,153,255, 63, 81,232, 16, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 81,232, 16, 63, 63,233, 89, 63, 80,139,179, 63, 75, 39,164, 63, 73,174, 74, - 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 49, 12, 79, - 63, 89,153,138, 63, 60, 86, 49, 63, 82,225,225, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 82,225,225, 63, 52, 55,165, 63, 83,124, 75, 63, 40,228,217, 63, 89,153,139, 63, 49, 12, 79, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 37,200, 45, 63, 89,153,139, 63, 49, 12, 79, - 63, 83,124, 75, 63, 40,228,217, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,124, 75, - 63, 40,228,217, 63, 82,225,225, 63, 52, 55,165, 63, 77, 33,196, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 69,223,120, 63, 78, 83,198, 63, 73,174, 74, 63, 65,236,193, 63, 80,139,179, 63, 75, 39,164, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80,139,179, 63, 75, 39,164, 63, 77,221,148, - 63, 88, 64,140, 63, 69,223,120, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 63, 90, 56, 12, 63, 69,223,120, 63, 78, 83,198, 63, 77,221,148, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 77,221,148, 63, 88, 64,140, 63, 80,139,179, 63, 75, 39,164, 63, 89,153,138, - 63, 82,228, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 69,223,120, 63, 78, 83,198, - 63, 64, 0, 0, 63, 90, 56, 12, 63, 58, 32,136, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 58, 32,136, 63, 78, 83,198, 63, 64, 0, 0, 63, 67, 23,106, 63, 69,223,120, 63, 78, 83,198, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,174, 74, 63, 65,236,193, 63, 69,223,120, 63, 78, 83,198, - 63, 64, 0, 0, 63, 67, 23,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, - 63, 67, 23,106, 63, 58, 32,136, 63, 78, 83,198, 63, 54, 81,182, 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 59,171,132, 63, 55,204,255, 63, 64, 0, 0, 63, 45, 28, 24, 63, 68, 84,124, 63, 55,204,255, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 68, 84,124, 63, 55,204,255, 63, 64, 0, 0, - 63, 67, 23,106, 63, 59,171,132, 63, 55,204,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 54, 81,182, 63, 65,236,193, 63, 59,171,132, 63, 55,204,255, 63, 64, 0, 0, 63, 67, 23,106, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 67, 23,106, 63, 68, 84,124, 63, 55,204,255, 63, 73,174, 74, - 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,116, 77, 63, 75, 39,164, - 63, 54, 81,182, 63, 65,236,193, 63, 58, 32,136, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 58, 32,136, 63, 78, 83,198, 63, 50, 34,108, 63, 88, 64,140, 63, 47,116, 77, 63, 75, 39,164, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 82,228, 38, 63, 47,116, 77, 63, 75, 39,164, - 63, 50, 34,108, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 50, 34,108, - 63, 88, 64,140, 63, 58, 32,136, 63, 78, 83,198, 63, 64, 0, 0, 63, 90, 56, 12, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 30, 31, 63, 52, 55,165, 63, 38,102,117, 63, 60, 86, 50, 63, 38,102,117, 63, 49, 12, 78, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 49, 12, 78, 63, 44,131,181, - 63, 40,228,216, 63, 45, 30, 31, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 50,222, 60, 63, 43, 52,221, 63, 45, 30, 31, 63, 52, 55,165, 63, 44,131,181, 63, 40,228,216, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44,131,181, 63, 40,228,216, 63, 38,102,117, 63, 49, 12, 78, 63, 38,102,117, - 63, 37,200, 45, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 30, 31, 63, 52, 55,165, - 63, 50,222, 60, 63, 43, 52,221, 63, 52,102,189, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 52,102,189, 63, 54,155,113, 63, 46, 23,240, 63, 63,233, 89, 63, 45, 30, 31, 63, 52, 55,165, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 60, 86, 50, 63, 45, 30, 31, 63, 52, 55,165, - 63, 46, 23,240, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 46, 23,240, - 63, 63,233, 89, 63, 52,102,189, 63, 54,155,113, 63, 54, 81,182, 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,116, 77, 63, 75, 39,164, 63, 38,102,118, 63, 82,228, 38, 63, 38,102,117, 63, 71,153,255, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 71,153,255, 63, 46, 23,240, - 63, 63,233, 89, 63, 47,116, 77, 63, 75, 39,164, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 54, 81,182, 63, 65,236,193, 63, 47,116, 77, 63, 75, 39,164, 63, 46, 23,240, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 46, 23,240, 63, 63,233, 89, 63, 38,102,117, 63, 71,153,255, 63, 38,102,117, - 63, 60, 86, 50, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 59,171,132, 63, 55,204,255, - 63, 54, 81,182, 63, 65,236,193, 63, 52,102,189, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 52,102,189, 63, 54,155,113, 63, 57, 97, 87, 63, 44,160,200, 63, 59,171,132, 63, 55,204,255, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 45, 28, 24, 63, 59,171,132, 63, 55,204,255, - 63, 57, 97, 87, 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 97, 87, - 63, 44,160,200, 63, 52,102,189, 63, 54,155,113, 63, 50,222, 60, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,101,250, 63, 99, 26, 51, 63, 38,102,118, 63,105,114, 19, 63, 38,102,118, 63, 94, 46, 77, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 94, 46, 77, 63, 50, 34,108, - 63, 88, 64,140, 63, 54,101,250, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 63, 90, 56, 12, 63, 54,101,250, 63, 99, 26, 51, 63, 50, 34,108, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 50, 34,108, 63, 88, 64,140, 63, 38,102,118, 63, 94, 46, 77, 63, 38,102,118, - 63, 82,228, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,101,250, 63, 99, 26, 51, - 63, 64, 0, 0, 63, 90, 56, 12, 63, 73,154, 6, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 73,154, 6, 63, 99, 26, 51, 63, 64, 0, 0, 63,109,154,206, 63, 54,101,250, 63, 99, 26, 51, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63,105,114, 19, 63, 54,101,250, 63, 99, 26, 51, - 63, 64, 0, 0, 63,109,154,206, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, - 63,109,154,206, 63, 73,154, 6, 63, 99, 26, 51, 63, 89,153,138, 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,136, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 63, 38,102,120, 63,116,187,242, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,120, 63,116,187,242, 63, 64, 0, 0, - 63,109,154,206, 63, 89,153,136, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,138, 63,105,114, 19, 63, 89,153,136, 63,116,187,242, 63, 64, 0, 0, 63,109,154,206, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63,109,154,206, 63, 38,102,120, 63,116,187,242, 63, 38,102,118, - 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 94, 46, 77, - 63, 89,153,138, 63,105,114, 19, 63, 73,154, 6, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 73,154, 6, 63, 99, 26, 51, 63, 77,221,148, 63, 88, 64,140, 63, 89,153,138, 63, 94, 46, 77, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 82,228, 39, 63, 89,153,138, 63, 94, 46, 77, - 63, 77,221,148, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 77,221,148, - 63, 88, 64,140, 63, 73,154, 6, 63, 99, 26, 51, 63, 64, 0, 0, 63, 90, 56, 12, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 8, 71,167, 63, 55,205, 7, 61,229,192,170, 63, 65,236,200, 61,214,104,203, 63, 54,155,120, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,214,104,203, 63, 54,155,120, 61,254, 61,201, - 63, 44,160,207, 62, 8, 71,167, 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,173, 63, 45, 28, 27, 62, 8, 71,167, 63, 55,205, 7, 61,254, 61,201, 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,254, 61,201, 63, 44,160,207, 61,214,104,203, 63, 54,155,120, 61,202, 36,175, - 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156, 35,145, 63, 52, 55,172, - 61,202, 36,175, 63, 43, 52,228, 61,214,104,203, 63, 54,155,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,214,104,203, 63, 54,155,120, 61,163,242, 32, 63, 63,233, 96, 61,156, 35,145, 63, 52, 55,172, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 60, 86, 53, 61,156, 35,145, 63, 52, 55,172, - 61,163,242, 32, 63, 63,233, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,163,242, 32, - 63, 63,233, 96, 61,214,104,203, 63, 54,155,120, 61,229,192,170, 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,174,213, 17, 63, 75, 39,171, 61, 76,203,243, 63, 82,228, 41, 61, 76,203,244, 63, 71,154, 2, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,244, 63, 71,154, 2, 61,163,242, 32, - 63, 63,233, 96, 61,174,213, 17, 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,229,192,170, 63, 65,236,200, 61,174,213, 17, 63, 75, 39,171, 61,163,242, 32, 63, 63,233, 96, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,163,242, 32, 63, 63,233, 96, 61, 76,203,244, 63, 71,154, 2, 61, 76,203,246, - 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156, 35,145, 63, 52, 55,172, - 61, 76,203,246, 63, 60, 86, 53, 61, 76,203,243, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61, 76,203,243, 63, 49, 12, 82, 61,151, 80, 53, 63, 40,228,223, 61,156, 35,145, 63, 52, 55,172, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,202, 36,175, 63, 43, 52,228, 61,156, 35,145, 63, 52, 55,172, - 61,151, 80, 53, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,151, 80, 53, - 63, 40,228,223, 61, 76,203,243, 63, 49, 12, 82, 61, 76,203,246, 63, 37,200, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,174,213, 17, 63, 75, 39,171, 61,229,192,170, 63, 65,236,200, 62, 2, 27,169, 63, 78, 83,204, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 2, 27,169, 63, 78, 83,204, 61,196, 70, 23, - 63, 88, 64,147, 61,174,213, 17, 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,203,243, 63, 82,228, 41, 61,174,213, 17, 63, 75, 39,171, 61,196, 70, 23, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,196, 70, 23, 63, 88, 64,147, 62, 2, 27,169, 63, 78, 83,204, 62, 25,153,160, - 63, 90, 56, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 49, 23,162, 63, 78, 83,195, - 62, 25,153,160, 63, 90, 56, 14, 62, 2, 27,169, 63, 78, 83,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 2, 27,169, 63, 78, 83,204, 62, 25,153,172, 63, 67, 23,108, 62, 49, 23,162, 63, 78, 83,195, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 82,240, 63, 65,236,183, 62, 49, 23,162, 63, 78, 83,195, - 62, 25,153,172, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,172, - 63, 67, 23,108, 62, 2, 27,169, 63, 78, 83,204, 61,229,192,170, 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 8, 71,167, 63, 55,205, 7, 62, 25,153,173, 63, 45, 28, 27, 62, 42,235,173, 63, 55,204,254, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 42,235,173, 63, 55,204,254, 62, 25,153,172, - 63, 67, 23,108, 62, 8, 71,167, 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,229,192,170, 63, 65,236,200, 62, 8, 71,167, 63, 55,205, 7, 62, 25,153,172, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,172, 63, 67, 23,108, 62, 42,235,173, 63, 55,204,254, 62, 64, 82,240, - 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 49, 23,162, 63, 78, 83,195, - 62, 64, 82,240, 63, 65,236,183, 62, 91,200,166, 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 91,200,166, 63, 75, 39,147, 62, 81, 16, 34, 63, 88, 64,131, 62, 49, 23,162, 63, 78, 83,195, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,160, 63, 90, 56, 14, 62, 49, 23,162, 63, 78, 83,195, - 62, 81, 16, 34, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 81, 16, 34, - 63, 88, 64,131, 62, 91,200,166, 63, 75, 39,147, 62,128, 0, 0, 63, 82,228, 13, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 49, 12, 47, 62,128, 0, 0, 63, 60, 86, 19, 62,101, 33, 92, 63, 52, 55,146, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101, 33, 92, 63, 52, 55,146, 62,103,139, 14, - 63, 40,228,199, 62,128, 0, 0, 63, 49, 12, 47, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 63, 37,200, 23, 62,128, 0, 0, 63, 49, 12, 47, 62,103,139, 14, 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,103,139, 14, 63, 40,228,199, 62,101, 33, 92, 63, 52, 55,146, 62, 78, 32,230, - 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 71,254,223, 63, 54,155,102, - 62, 78, 32,230, 63, 43, 52,211, 62,101, 33, 92, 63, 52, 55,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,101, 33, 92, 63, 52, 55,146, 62, 97, 58, 23, 63, 63,233, 69, 62, 71,254,223, 63, 54,155,102, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 82,240, 63, 65,236,183, 62, 71,254,223, 63, 54,155,102, - 62, 97, 58, 23, 63, 63,233, 69, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 97, 58, 23, - 63, 63,233, 69, 62,101, 33, 92, 63, 52, 55,146, 62,128, 0, 0, 63, 60, 86, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 71,153,228, 62,128, 0, 0, 63, 82,228, 13, 62, 91,200,166, 63, 75, 39,147, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 91,200,166, 63, 75, 39,147, 62, 97, 58, 23, - 63, 63,233, 69, 62,128, 0, 0, 63, 71,153,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 63, 60, 86, 19, 62,128, 0, 0, 63, 71,153,228, 62, 97, 58, 23, 63, 63,233, 69, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 97, 58, 23, 63, 63,233, 69, 62, 91,200,166, 63, 75, 39,147, 62, 64, 82,240, - 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 71,254,223, 63, 54,155,102, - 62, 64, 82,240, 63, 65,236,183, 62, 42,235,173, 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 42,235,173, 63, 55,204,254, 62, 52, 20,105, 63, 44,160,198, 62, 71,254,223, 63, 54,155,102, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 78, 32,230, 63, 43, 52,211, 62, 71,254,223, 63, 54,155,102, - 62, 52, 20,105, 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52, 20,105, - 63, 44,160,198, 62, 42,235,173, 63, 55,204,254, 62, 25,153,173, 63, 45, 28, 27, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 94, 46, 58, 62,128, 0, 0, 63,105,114, 8, 62, 64, 1,230, 63, 99, 26, 49, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 1,230, 63, 99, 26, 49, 62, 81, 16, 34, - 63, 88, 64,131, 62,128, 0, 0, 63, 94, 46, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 63, 82,228, 13, 62,128, 0, 0, 63, 94, 46, 58, 62, 81, 16, 34, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 81, 16, 34, 63, 88, 64,131, 62, 64, 1,230, 63, 99, 26, 49, 62, 25,153,160, - 63, 90, 56, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,230, 98,164, 63, 99, 26, 58, - 62, 25,153,160, 63, 90, 56, 14, 62, 64, 1,230, 63, 99, 26, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 64, 1,230, 63, 99, 26, 49, 62, 25,153,159, 63,109,154,210, 61,230, 98,164, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,237, 63,105,114, 22, 61,230, 98,164, 63, 99, 26, 58, - 62, 25,153,159, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,159, - 63,109,154,210, 62, 64, 1,230, 63, 99, 26, 49, 62,128, 0, 0, 63,105,114, 8, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,116,187,232, 63, 59,153, 3, 63,128, 0, 0, 63,134,102, 95, 63,116,187,242, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,210, 63,116,187,242, 62, 25,153,159, - 63,109,154,210, 62,128, 0, 0, 63,116,187,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 63,105,114, 8, 62,128, 0, 0, 63,116,187,232, 62, 25,153,159, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,159, 63,109,154,210, 61, 76,203,210, 63,116,187,242, 61, 76,203,237, - 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,230, 98,164, 63, 99, 26, 58, - 61, 76,203,237, 63,105,114, 22, 61, 76,203,234, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61, 76,203,234, 63, 94, 46, 79, 61,196, 70, 23, 63, 88, 64,147, 61,230, 98,164, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,160, 63, 90, 56, 14, 61,230, 98,164, 63, 99, 26, 58, - 61,196, 70, 23, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,196, 70, 23, - 63, 88, 64,147, 61, 76,203,234, 63, 94, 46, 79, 61, 76,203,243, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,170,138, 42, 63, 55,204,254, 62,159,214,136, 63, 65,236,183, 62,156, 0,145, 63, 54,155,102, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,156, 0,145, 63, 54,155,102, 62,165,245,204, - 63, 44,160,198, 62,170,138, 42, 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 42, 63, 45, 28, 28, 62,170,138, 42, 63, 55,204,254, 62,165,245,204, 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,245,204, 63, 44,160,198, 62,156, 0,145, 63, 54,155,102, 62,152,239,141, - 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,111, 82, 63, 52, 55,146, - 62,152,239,141, 63, 43, 52,211, 62,156, 0,145, 63, 54,155,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,156, 0,145, 63, 54,155,102, 62,143, 98,245, 63, 63,233, 68, 62,141,111, 82, 63, 52, 55,146, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 60, 86, 19, 62,141,111, 82, 63, 52, 55,146, - 62,143, 98,245, 63, 63,233, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,143, 98,245, - 63, 63,233, 68, 62,156, 0,145, 63, 54,155,102, 62,159,214,136, 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,146, 27,173, 63, 75, 39,147, 62,128, 0, 0, 63, 82,228, 13, 62,128, 0, 0, 63, 71,153,228, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 71,153,228, 62,143, 98,245, - 63, 63,233, 68, 62,146, 27,173, 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,159,214,136, 63, 65,236,183, 62,146, 27,173, 63, 75, 39,147, 62,143, 98,245, 63, 63,233, 68, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,143, 98,245, 63, 63,233, 68, 62,128, 0, 0, 63, 71,153,228, 62,128, 0, 0, - 63, 60, 86, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,111, 82, 63, 52, 55,146, - 62,128, 0, 0, 63, 60, 86, 19, 62,128, 0, 0, 63, 49, 12, 47, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,128, 0, 0, 63, 49, 12, 47, 62,140, 58,121, 63, 40,228,199, 62,141,111, 82, 63, 52, 55,146, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,152,239,141, 63, 43, 52,211, 62,141,111, 82, 63, 52, 55,146, - 62,140, 58,121, 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,140, 58,121, - 63, 40,228,199, 62,128, 0, 0, 63, 49, 12, 47, 62,128, 0, 0, 63, 37,200, 23, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,146, 27,173, 63, 75, 39,147, 62,159,214,136, 63, 65,236,183, 62,167,116, 47, 63, 78, 83,195, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,167,116, 47, 63, 78, 83,195, 62,151,119,239, - 63, 88, 64,131, 62,146, 27,173, 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 63, 82,228, 13, 62,146, 27,173, 63, 75, 39,147, 62,151,119,239, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151,119,239, 63, 88, 64,131, 62,167,116, 47, 63, 78, 83,195, 62,179, 51, 49, - 63, 90, 56, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,190,242, 44, 63, 78, 83,205, - 62,179, 51, 49, 63, 90, 56, 14, 62,167,116, 47, 63, 78, 83,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,167,116, 47, 63, 78, 83,195, 62,179, 51, 42, 63, 67, 23,108, 62,190,242, 44, 63, 78, 83,205, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,143,214, 63, 65,236,200, 62,190,242, 44, 63, 78, 83,205, - 62,179, 51, 42, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, - 63, 67, 23,108, 62,167,116, 47, 63, 78, 83,195, 62,159,214,136, 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,170,138, 42, 63, 55,204,254, 62,179, 51, 42, 63, 45, 28, 28, 62,187,220, 45, 63, 55,205, 7, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,187,220, 45, 63, 55,205, 7, 62,179, 51, 42, - 63, 67, 23,108, 62,170,138, 42, 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,159,214,136, 63, 65,236,183, 62,170,138, 42, 63, 55,204,254, 62,179, 51, 42, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, 63, 67, 23,108, 62,187,220, 45, 63, 55,205, 7, 62,198,143,214, - 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,190,242, 44, 63, 78, 83,205, - 62,198,143,214, 63, 65,236,200, 62,212, 74,188, 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,212, 74,188, 63, 75, 39,171, 62,206,238,122, 63, 88, 64,147, 62,190,242, 44, 63, 78, 83,205, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63, 90, 56, 14, 62,190,242, 44, 63, 78, 83,205, - 62,206,238,122, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,206,238,122, - 63, 88, 64,147, 62,212, 74,188, 63, 75, 39,171, 62,230,102,130, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 49, 12, 82, 62,230,102,129, 63, 60, 86, 53, 62,216,247, 28, 63, 52, 55,172, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,247, 28, 63, 52, 55,172, 62,218, 43,243, - 63, 40,228,223, 62,230,102,130, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102,129, 63, 37,200, 48, 62,230,102,130, 63, 49, 12, 82, 62,218, 43,243, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,218, 43,243, 63, 40,228,223, 62,216,247, 28, 63, 52, 55,172, 62,205,118,212, - 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,101,206, 63, 54,155,120, - 62,205,118,212, 63, 43, 52,228, 62,216,247, 28, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,216,247, 28, 63, 52, 55,172, 62,215, 3,120, 63, 63,233, 95, 62,202,101,206, 63, 54,155,120, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,143,214, 63, 65,236,200, 62,202,101,206, 63, 54,155,120, - 62,215, 3,120, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,215, 3,120, - 63, 63,233, 95, 62,216,247, 28, 63, 52, 55,172, 62,230,102,129, 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 71,154, 1, 62,230,102,130, 63, 82,228, 41, 62,212, 74,188, 63, 75, 39,171, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,212, 74,188, 63, 75, 39,171, 62,215, 3,120, - 63, 63,233, 95, 62,230,102,130, 63, 71,154, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102,129, 63, 60, 86, 53, 62,230,102,130, 63, 71,154, 1, 62,215, 3,120, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,215, 3,120, 63, 63,233, 95, 62,212, 74,188, 63, 75, 39,171, 62,198,143,214, - 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,101,206, 63, 54,155,120, - 62,198,143,214, 63, 65,236,200, 62,187,220, 45, 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,187,220, 45, 63, 55,205, 7, 62,192,112,142, 63, 44,160,207, 62,202,101,206, 63, 54,155,120, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,205,118,212, 63, 43, 52,228, 62,202,101,206, 63, 54,155,120, - 62,192,112,142, 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,112,142, - 63, 44,160,207, 62,187,220, 45, 63, 55,205, 7, 62,179, 51, 42, 63, 45, 28, 28, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,131, 63, 94, 46, 79, 62,230,102,131, 63,105,114, 22, 62,198,103, 87, 63, 99, 26, 58, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,103, 87, 63, 99, 26, 58, 62,206,238,122, - 63, 88, 64,147, 62,230,102,131, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102,130, 63, 82,228, 41, 62,230,102,131, 63, 94, 46, 79, 62,206,238,122, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,206,238,122, 63, 88, 64,147, 62,198,103, 87, 63, 99, 26, 58, 62,179, 51, 49, - 63, 90, 56, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,255, 14, 63, 99, 26, 49, - 62,179, 51, 49, 63, 90, 56, 14, 62,198,103, 87, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,198,103, 87, 63, 99, 26, 58, 62,179, 51, 49, 63,109,154,210, 62,159,255, 14, 63, 99, 26, 49, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,105,114, 8, 62,159,255, 14, 63, 99, 26, 49, - 62,179, 51, 49, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, - 63,109,154,210, 62,198,103, 87, 63, 99, 26, 58, 62,230,102,131, 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,134, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 62,128, 0, 0, 63,116,187,232, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,116,187,232, 62,179, 51, 49, - 63,109,154,210, 62,230,102,134, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102,131, 63,105,114, 22, 62,230,102,134, 63,116,187,242, 62,179, 51, 49, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63,109,154,210, 62,128, 0, 0, 63,116,187,232, 62,128, 0, 0, - 63,105,114, 8, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,255, 14, 63, 99, 26, 49, - 62,128, 0, 0, 63,105,114, 8, 62,128, 0, 0, 63, 94, 46, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,128, 0, 0, 63, 94, 46, 58, 62,151,119,239, 63, 88, 64,131, 62,159,255, 14, 63, 99, 26, 49, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63, 90, 56, 14, 62,159,255, 14, 63, 99, 26, 49, - 62,151,119,239, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151,119,239, - 63, 88, 64,131, 62,128, 0, 0, 63, 94, 46, 58, 62,128, 0, 0, 63, 82,228, 13, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 8,120, 93, 63, 55,205, 11, 63, 3, 30,140, 63, 65,236,201, 63, 1, 51,145, 63, 54,155,121, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 51,145, 63, 54,155,121, 63, 6, 46, 46, - 63, 44,160,211, 63, 8,120, 93, 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,220, 63, 45, 28, 35, 63, 8,120, 93, 63, 55,205, 11, 63, 6, 46, 46, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 46, 46, 63, 44,160,211, 63, 1, 51,145, 63, 54,155,121, 62,255, 86, 30, - 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,213,222, 63, 52, 55,172, - 62,255, 86, 30, 63, 43, 52,230, 63, 1, 51,145, 63, 54,155,121, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 1, 51,145, 63, 54,155,121, 62,245,201,128, 63, 63,233, 94, 62,243,213,222, 63, 52, 55,172, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 60, 86, 53, 62,243,213,222, 63, 52, 55,172, - 62,245,201,128, 63, 63,233, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,245,201,128, - 63, 63,233, 94, 63, 1, 51,145, 63, 54,155,121, 63, 3, 30,140, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,248,130, 59, 63, 75, 39,169, 62,230,102,130, 63, 82,228, 41, 62,230,102,130, 63, 71,154, 1, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 71,154, 1, 62,245,201,128, - 63, 63,233, 94, 62,248,130, 59, 63, 75, 39,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 3, 30,140, 63, 65,236,201, 62,248,130, 59, 63, 75, 39,169, 62,245,201,128, 63, 63,233, 94, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,245,201,128, 63, 63,233, 94, 62,230,102,130, 63, 71,154, 1, 62,230,102,129, - 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,213,222, 63, 52, 55,172, - 62,230,102,129, 63, 60, 86, 53, 62,230,102,130, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,230,102,130, 63, 49, 12, 82, 62,242,161, 9, 63, 40,228,223, 62,243,213,222, 63, 52, 55,172, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,255, 86, 30, 63, 43, 52,230, 62,243,213,222, 63, 52, 55,172, - 62,242,161, 9, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,242,161, 9, - 63, 40,228,223, 62,230,102,130, 63, 49, 12, 82, 62,230,102,129, 63, 37,200, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,248,130, 59, 63, 75, 39,169, 63, 3, 30,140, 63, 65,236,201, 63, 6,237, 94, 63, 78, 83,207, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,237, 94, 63, 78, 83,207, 62,253,222,118, - 63, 88, 64,148, 62,248,130, 59, 63, 75, 39,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102,130, 63, 82,228, 41, 62,248,130, 59, 63, 75, 39,169, 62,253,222,118, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,222,118, 63, 88, 64,148, 63, 6,237, 94, 63, 78, 83,207, 63, 12,204,220, - 63, 90, 56, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,172, 88, 63, 78, 83,207, - 63, 12,204,220, 63, 90, 56, 22, 63, 6,237, 94, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 6,237, 94, 63, 78, 83,207, 63, 12,204,220, 63, 67, 23,115, 63, 18,172, 88, 63, 78, 83,207, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,123, 44, 63, 65,236,201, 63, 18,172, 88, 63, 78, 83,207, - 63, 12,204,220, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, - 63, 67, 23,115, 63, 6,237, 94, 63, 78, 83,207, 63, 3, 30,140, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 8,120, 93, 63, 55,205, 11, 63, 12,204,220, 63, 45, 28, 35, 63, 17, 33, 91, 63, 55,205, 9, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 17, 33, 91, 63, 55,205, 9, 63, 12,204,220, - 63, 67, 23,115, 63, 8,120, 93, 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 3, 30,140, 63, 65,236,201, 63, 8,120, 93, 63, 55,205, 11, 63, 12,204,220, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 67, 23,115, 63, 17, 33, 91, 63, 55,205, 9, 63, 22,123, 44, - 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,172, 88, 63, 78, 83,207, - 63, 22,123, 44, 63, 65,236,201, 63, 29, 88,153, 63, 75, 39,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 29, 88,153, 63, 75, 39,167, 63, 26,170,121, 63, 88, 64,147, 63, 18,172, 88, 63, 78, 83,207, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 90, 56, 22, 63, 18,172, 88, 63, 78, 83,207, - 63, 26,170,121, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 26,170,121, - 63, 88, 64,147, 63, 29, 88,153, 63, 75, 39,167, 63, 38,102,118, 63, 82,228, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 49, 12, 78, 63, 38,102,117, 63, 60, 86, 50, 63, 31,174,200, 63, 52, 55,169, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,174,200, 63, 52, 55,169, 63, 32, 73, 51, - 63, 40,228,221, 63, 38,102,117, 63, 49, 12, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,117, 63, 37,200, 45, 63, 38,102,117, 63, 49, 12, 78, 63, 32, 73, 51, 63, 40,228,221, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 73, 51, 63, 40,228,221, 63, 31,174,200, 63, 52, 55,169, 63, 25,238,169, - 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,102, 39, 63, 54,155,119, - 63, 25,238,169, 63, 43, 52,229, 63, 31,174,200, 63, 52, 55,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 31,174,200, 63, 52, 55,169, 63, 30,180,246, 63, 63,233, 92, 63, 24,102, 39, 63, 54,155,119, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,123, 44, 63, 65,236,201, 63, 24,102, 39, 63, 54,155,119, - 63, 30,180,246, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 30,180,246, - 63, 63,233, 92, 63, 31,174,200, 63, 52, 55,169, 63, 38,102,117, 63, 60, 86, 50, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 71,153,255, 63, 38,102,118, 63, 82,228, 38, 63, 29, 88,153, 63, 75, 39,167, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 29, 88,153, 63, 75, 39,167, 63, 30,180,246, - 63, 63,233, 92, 63, 38,102,117, 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,117, 63, 60, 86, 50, 63, 38,102,117, 63, 71,153,255, 63, 30,180,246, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 30,180,246, 63, 63,233, 92, 63, 29, 88,153, 63, 75, 39,167, 63, 22,123, 44, - 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,102, 39, 63, 54,155,119, - 63, 22,123, 44, 63, 65,236,201, 63, 17, 33, 91, 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 17, 33, 91, 63, 55,205, 9, 63, 19,107,138, 63, 44,160,211, 63, 24,102, 39, 63, 54,155,119, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,238,169, 63, 43, 52,229, 63, 24,102, 39, 63, 54,155,119, - 63, 19,107,138, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,107,138, - 63, 44,160,211, 63, 17, 33, 91, 63, 55,205, 9, 63, 12,204,220, 63, 45, 28, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 94, 46, 77, 63, 38,102,118, 63,105,114, 19, 63, 22,102,235, 63, 99, 26, 59, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,102,235, 63, 99, 26, 59, 63, 26,170,121, - 63, 88, 64,147, 63, 38,102,118, 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,118, 63, 82,228, 38, 63, 38,102,118, 63, 94, 46, 77, 63, 26,170,121, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 26,170,121, 63, 88, 64,147, 63, 22,102,235, 63, 99, 26, 59, 63, 12,204,220, - 63, 90, 56, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 50,204, 63, 99, 26, 58, - 63, 12,204,220, 63, 90, 56, 22, 63, 22,102,235, 63, 99, 26, 59, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 22,102,235, 63, 99, 26, 59, 63, 12,204,224, 63,109,154,212, 63, 3, 50,204, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,131, 63,105,114, 22, 63, 3, 50,204, 63, 99, 26, 58, - 63, 12,204,224, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,224, - 63,109,154,212, 63, 22,102,235, 63, 99, 26, 59, 63, 38,102,118, 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,120, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 62,230,102,134, 63,116,187,242, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,134, 63,116,187,242, 63, 12,204,224, - 63,109,154,212, 63, 38,102,120, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,118, 63,105,114, 19, 63, 38,102,120, 63,116,187,242, 63, 12,204,224, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,224, 63,109,154,212, 62,230,102,134, 63,116,187,242, 62,230,102,131, - 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 50,204, 63, 99, 26, 58, - 62,230,102,131, 63,105,114, 22, 62,230,102,131, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,230,102,131, 63, 94, 46, 79, 62,253,222,118, 63, 88, 64,148, 63, 3, 50,204, 63, 99, 26, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 90, 56, 22, 63, 3, 50,204, 63, 99, 26, 58, - 62,253,222,118, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,222,118, - 63, 88, 64,148, 62,230,102,131, 63, 94, 46, 79, 62,230,102,130, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,233,213, 63, 21, 48, 35, 63, 70,235,176, 63, 22,209,226, 63, 73,234, 80, 63, 11,111,146, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, 63, 79,200, 1, - 63, 9,152, 94, 63, 76,233,213, 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 82,215, 19, 63, 19, 29,252, 63, 76,233,213, 63, 21, 48, 35, 63, 79,200, 1, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,200, 1, 63, 9,152, 94, 63, 73,234, 80, 63, 11,111,146, 63, 76,204,193, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,233,213, 63, 21, 48, 35, - 63, 82,215, 19, 63, 19, 29,252, 63, 80, 41,220, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 80, 41,220, 63, 31, 60,105, 63, 73,219,164, 63, 33, 23,173, 63, 76,233,213, 63, 21, 48, 35, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,235,176, 63, 22,209,226, 63, 76,233,213, 63, 21, 48, 35, - 63, 73,219,164, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,219,164, - 63, 33, 23,173, 63, 80, 41,220, 63, 31, 60,105, 63, 77, 33,196, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,158,169, 63, 44,160,200, 63, 64, 0, 0, 63, 45, 28, 24, 63, 67,171, 5, 63, 34, 17,216, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,171, 5, 63, 34, 17,216, 63, 73,219,164, - 63, 33, 23,173, 63, 70,158,169, 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 77, 33,196, 63, 43, 52,221, 63, 70,158,169, 63, 44,160,200, 63, 73,219,164, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,219,164, 63, 33, 23,173, 63, 67,171, 5, 63, 34, 17,216, 63, 70,235,176, - 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,124, 75, 63, 40,228,217, - 63, 77, 33,196, 63, 43, 52,221, 63, 80, 41,220, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 80, 41,220, 63, 31, 60,105, 63, 86, 20,218, 63, 28,140,143, 63, 83,124, 75, 63, 40,228,217, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 37,200, 45, 63, 83,124, 75, 63, 40,228,217, - 63, 86, 20,218, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 20,218, - 63, 28,140,143, 63, 80, 41,220, 63, 31, 60,105, 63, 82,215, 19, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 23, 32,182, 63, 70,235,176, 63, 22,209,226, 63, 67,171, 5, 63, 34, 17,216, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,171, 5, 63, 34, 17,216, 63, 60, 84,251, - 63, 34, 17,216, 63, 64, 0, 0, 63, 23, 32,182, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 57, 20, 80, 63, 22,209,226, 63, 64, 0, 0, 63, 23, 32,182, 63, 60, 84,251, 63, 34, 17,216, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60, 84,251, 63, 34, 17,216, 63, 67,171, 5, 63, 34, 17,216, 63, 64, 0, 0, - 63, 45, 28, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 23, 32,182, - 63, 57, 20, 80, 63, 22,209,226, 63, 60,156,169, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 60,156,169, 63, 11,116, 96, 63, 67, 99, 87, 63, 11,116, 96, 63, 64, 0, 0, 63, 23, 32,182, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,235,176, 63, 22,209,226, 63, 64, 0, 0, 63, 23, 32,182, - 63, 67, 99, 87, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67, 99, 87, - 63, 11,116, 96, 63, 60,156,169, 63, 11,116, 96, 63, 64, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, 63, 76,204,193, 63, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, 63, 67, 99, 87, - 63, 11,116, 96, 63, 70,102, 96, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 63, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, 63, 67, 99, 87, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67, 99, 87, 63, 11,116, 96, 63, 73,234, 80, 63, 11,111,146, 63, 70,235,176, - 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, - 63, 64, 0, 0, 63, 0, 0, 0, 63, 60,156,169, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 60,156,169, 63, 11,116, 96, 63, 54, 21,176, 63, 11,111,146, 63, 57,153,160, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 51, 63, 63, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, - 63, 54, 21,176, 63, 11,111,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 21,176, - 63, 11,111,146, 63, 60,156,169, 63, 11,116, 96, 63, 57, 20, 80, 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,217, 58, 93, 63, 57, 61,144, 62,217,196, 19, 63, 60,123, 85, 62,198,230,253, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,123, 85, 62,198,230,253, 63, 67,132,171, - 62,198,230,253, 63, 64, 0, 0, 62,217, 58, 93, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 70,194,112, 62,217,196, 19, 63, 64, 0, 0, 62,217, 58, 93, 63, 67,132,171, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,132,171, 62,198,230,253, 63, 60,123, 85, 62,198,230,253, 63, 64, 0, 0, - 62,180,111,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,217, 58, 93, - 63, 70,194,112, 62,217,196, 19, 63, 67, 84,125, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 67, 84,125, 62,236,211, 42, 63, 60,171,131, 62,236,211, 42, 63, 64, 0, 0, 62,217, 58, 93, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 61,144, 62,217,196, 19, 63, 64, 0, 0, 62,217, 58, 93, - 63, 60,171,131, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,171,131, - 62,236,211, 42, 63, 67, 84,125, 62,236,211, 42, 63, 64, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, 63, 51, 51, 63, 63, 0, 0, 0, 63, 54, 46,128, 62,236,207, 75, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 46,128, 62,236,207, 75, 63, 60,171,131, - 62,236,211, 42, 63, 57,153,160, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 63, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, 63, 60,171,131, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,171,131, 62,236,211, 42, 63, 54, 46,128, 62,236,207, 75, 63, 57, 61,144, - 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, - 63, 64, 0, 0, 63, 0, 0, 0, 63, 67, 84,125, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 67, 84,125, 62,236,211, 42, 63, 73,209,128, 62,236,207, 75, 63, 70,102, 96, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,204,193, 63, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, - 63, 73,209,128, 62,236,207, 75, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,209,128, - 62,236,207, 75, 63, 67, 84,125, 62,236,211, 42, 63, 70,194,112, 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 22, 43, 63, 21, 48, 35, 63, 45, 40,237, 63, 19, 29,252, 63, 48, 55,255, 63, 9,152, 94, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 55,255, 63, 9,152, 94, 63, 54, 21,176, - 63, 11,111,146, 63, 51, 22, 43, 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 57, 20, 80, 63, 22,209,226, 63, 51, 22, 43, 63, 21, 48, 35, 63, 54, 21,176, 63, 11,111,146, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 21,176, 63, 11,111,146, 63, 48, 55,255, 63, 9,152, 94, 63, 51, 51, 63, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 22, 43, 63, 21, 48, 35, - 63, 57, 20, 80, 63, 22,209,226, 63, 54, 36, 91, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 54, 36, 91, 63, 33, 23,173, 63, 47,214, 36, 63, 31, 60,105, 63, 51, 22, 43, 63, 21, 48, 35, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 40,237, 63, 19, 29,252, 63, 51, 22, 43, 63, 21, 48, 35, - 63, 47,214, 36, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,214, 36, - 63, 31, 60,105, 63, 54, 36, 91, 63, 33, 23,173, 63, 50,222, 60, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 44,131,181, 63, 40,228,216, 63, 38,102,117, 63, 37,200, 45, 63, 41,235, 38, 63, 28,140,141, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,235, 38, 63, 28,140,141, 63, 47,214, 36, - 63, 31, 60,105, 63, 44,131,181, 63, 40,228,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 50,222, 60, 63, 43, 52,221, 63, 44,131,181, 63, 40,228,216, 63, 47,214, 36, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,214, 36, 63, 31, 60,105, 63, 41,235, 38, 63, 28,140,141, 63, 45, 40,237, - 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 97, 87, 63, 44,160,200, - 63, 50,222, 60, 63, 43, 52,221, 63, 54, 36, 91, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 54, 36, 91, 63, 33, 23,173, 63, 60, 84,251, 63, 34, 17,216, 63, 57, 97, 87, 63, 44,160,200, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 45, 28, 24, 63, 57, 97, 87, 63, 44,160,200, - 63, 60, 84,251, 63, 34, 17,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60, 84,251, - 63, 34, 17,216, 63, 54, 36, 91, 63, 33, 23,173, 63, 57, 20, 80, 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 14,134, 63, 21, 48, 39, 63,122, 30,227, 63, 22,209,233, 63,125, 29,138, 63, 11,111,150, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, 63,129,125,159, - 63, 9,152, 94, 63,128, 14,134, 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 60,193, 73,174, 63, 19, 29,253, 57,232, 92,209, 63, 21, 48, 39, 60, 62,207,114, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,125,159, 63, 9,152, 94, 63,125, 29,138, 63, 11,111,150, 63,128, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 57,232, 92,209, 63, 21, 48, 39, - 60,193, 73,174, 63, 19, 29,253, 60, 87, 67,214, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,129,174,136, 63, 31, 60,110, 63,125, 14,213, 63, 33, 23,180, 63,128, 14,134, 63, 21, 48, 39, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,122, 30,227, 63, 22,209,233, 63,128, 14,134, 63, 21, 48, 39, - 63,125, 14,213, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 14,213, - 63, 33, 23,180, 63,129,174,136, 63, 31, 60,110, 63,128, 42,121, 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,121,209,210, 63, 44,160,212, 63,115, 51, 36, 63, 45, 28, 36, 63,118,222, 49, 63, 34, 17,226, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,222, 49, 63, 34, 17,226, 63,125, 14,213, - 63, 33, 23,180, 63,121,209,210, 63, 44,160,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,128, 42,121, 63, 43, 52,230, 63,121,209,210, 63, 44,160,212, 63,125, 14,213, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 14,213, 63, 33, 23,180, 63,118,222, 49, 63, 34, 17,226, 63,122, 30,227, - 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,213,239,111, 63, 40,228,223, - 58,169,226,120, 63, 43, 52,230, 60, 87, 67,214, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 60, 87, 67,214, 63, 31, 60,110, 61, 20,129, 13, 63, 28,140,143, 60,213,239,111, 63, 40,228,223, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 37,200, 48, 60,213,239,111, 63, 40,228,223, - 61, 20,129, 13, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 20,129, 13, - 63, 28,140,143, 60, 87, 67,214, 63, 31, 60,110, 60,193, 73,174, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 44, 63, 23, 32,188, 63,122, 30,227, 63, 22,209,233, 63,118,222, 49, 63, 34, 17,226, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,222, 49, 63, 34, 17,226, 63,111,136, 31, - 63, 34, 17,225, 63,115, 51, 44, 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,108, 71,116, 63, 22,209,232, 63,115, 51, 44, 63, 23, 32,188, 63,111,136, 31, 63, 34, 17,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,136, 31, 63, 34, 17,225, 63,118,222, 49, 63, 34, 17,226, 63,115, 51, 36, - 63, 45, 28, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 44, 63, 23, 32,188, - 63,108, 71,116, 63, 22,209,232, 63,111,207,213, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,111,207,213, 63, 11,116,100, 63,118,150,138, 63, 11,116,101, 63,115, 51, 44, 63, 23, 32,188, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,122, 30,227, 63, 22,209,233, 63,115, 51, 44, 63, 23, 32,188, - 63,118,150,138, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,150,138, - 63, 11,116,101, 63,111,207,213, 63, 11,116,100, 63,115, 51, 51, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, 63,128, 0, 0, 63, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, 63,118,150,138, - 63, 11,116,101, 63,121,153,154, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 51, 63, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, 63,118,150,138, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,150,138, 63, 11,116,101, 63,125, 29,138, 63, 11,111,150, 63,122, 30,227, - 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, - 63,115, 51, 51, 63, 0, 0, 0, 63,111,207,213, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,111,207,213, 63, 11,116,100, 63,105, 72,213, 63, 11,111,149, 63,108,204,205, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,102,101, 63, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, - 63,105, 72,213, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 72,213, - 63, 11,111,149, 63,111,207,213, 63, 11,116,100, 63,108, 71,116, 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 58, 62,217, 58, 73, 63,108,112,192, 62,217,196, 4, 63,111,174,139, 62,198,230,223, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,174,139, 62,198,230,223, 63,118,183,239, - 62,198,230,227, 63,115, 51, 58, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,121,245,179, 62,217,196, 6, 63,115, 51, 58, 62,217, 58, 73, 63,118,183,239, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,183,239, 62,198,230,227, 63,111,174,139, 62,198,230,223, 63,115, 51, 65, - 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 58, 62,217, 58, 73, - 63,121,245,179, 62,217,196, 6, 63,118,135,185, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,118,135,185, 62,236,211, 30, 63,111,222,180, 62,236,211, 30, 63,115, 51, 58, 62,217, 58, 73, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,112,192, 62,217,196, 4, 63,115, 51, 58, 62,217, 58, 73, - 63,111,222,180, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,222,180, - 62,236,211, 30, 63,118,135,185, 62,236,211, 30, 63,115, 51, 51, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, 63,102,102,101, 63, 0, 0, 0, 63,105, 97,170, 62,236,207, 65, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 97,170, 62,236,207, 65, 63,111,222,180, - 62,236,211, 30, 63,108,204,205, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 51, 63, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, 63,111,222,180, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,222,180, 62,236,211, 30, 63,105, 97,170, 62,236,207, 65, 63,108,112,192, - 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, - 63,115, 51, 51, 63, 0, 0, 0, 63,118,135,185, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,118,135,185, 62,236,211, 30, 63,125, 4,194, 62,236,207, 67, 63,121,153,154, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, - 63,125, 4,194, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 4,194, - 62,236,207, 67, 63,118,135,185, 62,236,211, 30, 63,121,245,179, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 73, 76, 63, 21, 48, 38, 63, 96, 92, 11, 63, 19, 29,253, 63, 99,107, 33, 63, 9,152, 94, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,107, 33, 63, 9,152, 94, 63,105, 72,213, - 63, 11,111,149, 63,102, 73, 76, 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,108, 71,116, 63, 22,209,232, 63,102, 73, 76, 63, 21, 48, 38, 63,105, 72,213, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 72,213, 63, 11,111,149, 63, 99,107, 33, 63, 9,152, 94, 63,102,102,101, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 73, 76, 63, 21, 48, 38, - 63,108, 71,116, 63, 22,209,232, 63,105, 87,124, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,105, 87,124, 63, 33, 23,180, 63, 99, 9, 65, 63, 31, 60,109, 63,102, 73, 76, 63, 21, 48, 38, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 92, 11, 63, 19, 29,253, 63,102, 73, 76, 63, 21, 48, 38, - 63, 99, 9, 65, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 9, 65, - 63, 31, 60,109, 63,105, 87,124, 63, 33, 23,180, 63,102, 17, 87, 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,182,205, 63, 40,228,222, 63, 89,153,139, 63, 37,200, 45, 63, 93, 30, 63, 63, 28,140,143, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 30, 63, 63, 28,140,143, 63, 99, 9, 65, - 63, 31, 60,109, 63, 95,182,205, 63, 40,228,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,102, 17, 87, 63, 43, 52,229, 63, 95,182,205, 63, 40,228,222, 63, 99, 9, 65, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 9, 65, 63, 31, 60,109, 63, 93, 30, 63, 63, 28,140,143, 63, 96, 92, 11, - 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,148,118, 63, 44,160,211, - 63,102, 17, 87, 63, 43, 52,229, 63,105, 87,124, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,105, 87,124, 63, 33, 23,180, 63,111,136, 31, 63, 34, 17,225, 63,108,148,118, 63, 44,160,211, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 45, 28, 36, 63,108,148,118, 63, 44,160,211, - 63,111,136, 31, 63, 34, 17,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,136, 31, - 63, 34, 17,225, 63,105, 87,124, 63, 33, 23,180, 63,108, 71,116, 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 77, 65, 65, 63, 21, 48, 32, 62, 53, 72,152, 63, 22,209,229, 62, 65, 67, 47, 63, 11,111,147, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, 62, 88,185,255, - 63, 9,152, 90, 62, 77, 65, 65, 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,100,246, 64, 63, 19, 29,246, 62, 77, 65, 65, 63, 21, 48, 32, 62, 88,185,255, 63, 9,152, 90, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 88,185,255, 63, 9,152, 90, 62, 65, 67, 47, 63, 11,111,147, 62, 76,204,254, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 77, 65, 65, 63, 21, 48, 32, - 62,100,246, 64, 63, 19, 29,246, 62, 90, 65, 89, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 90, 65, 89, 63, 31, 60, 94, 62, 65, 8,107, 63, 33, 23,170, 62, 77, 65, 65, 63, 21, 48, 32, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 53, 72,152, 63, 22,209,229, 62, 77, 65, 65, 63, 21, 48, 32, - 62, 65, 8,107, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 8,107, - 63, 33, 23,170, 62, 90, 65, 89, 63, 31, 60, 94, 62, 78, 32,230, 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 52, 20,105, 63, 44,160,198, 62, 25,153,173, 63, 45, 28, 27, 62, 40, 69,216, 63, 34, 17,220, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 40, 69,216, 63, 34, 17,220, 62, 65, 8,107, - 63, 33, 23,170, 62, 52, 20,105, 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 78, 32,230, 63, 43, 52,211, 62, 52, 20,105, 63, 44,160,198, 62, 65, 8,107, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 8,107, 63, 33, 23,170, 62, 40, 69,216, 63, 34, 17,220, 62, 53, 72,152, - 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,103,139, 14, 63, 40,228,199, - 62, 78, 32,230, 63, 43, 52,211, 62, 90, 65, 89, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 90, 65, 89, 63, 31, 60, 94, 62,113,237, 83, 63, 28,140,130, 62,103,139, 14, 63, 40,228,199, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 37,200, 23, 62,103,139, 14, 63, 40,228,199, - 62,113,237, 83, 63, 28,140,130, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,113,237, 83, - 63, 28,140,130, 62, 90, 65, 89, 63, 31, 60, 94, 62,100,246, 64, 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,180, 63, 23, 32,185, 62, 53, 72,152, 63, 22,209,229, 62, 40, 69,216, 63, 34, 17,220, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 40, 69,216, 63, 34, 17,220, 62, 10,237,133, - 63, 34, 17,219, 62, 25,153,180, 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,251,213,147, 63, 22,209,228, 62, 25,153,180, 63, 23, 32,185, 62, 10,237,133, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 10,237,133, 63, 34, 17,219, 62, 40, 69,216, 63, 34, 17,220, 62, 25,153,173, - 63, 45, 28, 27, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,180, 63, 23, 32,185, - 61,251,213,147, 63, 22,209,228, 62, 12, 12, 67, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 12, 12, 67, 63, 11,116, 98, 62, 39, 39, 34, 63, 11,116, 98, 62, 25,153,180, 63, 23, 32,185, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 53, 72,152, 63, 22,209,229, 62, 25,153,180, 63, 23, 32,185, - 62, 39, 39, 34, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 39, 39, 34, - 63, 11,116, 98, 62, 12, 12, 67, 63, 11,116, 98, 62, 25,153,181, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, 62, 76,204,254, 63, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, 62, 39, 39, 34, - 63, 11,116, 98, 62, 51, 51, 92, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,181, 63, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, 62, 39, 39, 34, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 39, 39, 34, 63, 11,116, 98, 62, 65, 67, 47, 63, 11,111,147, 62, 53, 72,152, - 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, - 62, 25,153,181, 63, 0, 0, 0, 62, 12, 12, 67, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 12, 12, 67, 63, 11,116, 98, 61,227,224,109, 63, 11,111,147, 62, 0, 0, 8, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,204,204,215, 63, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, - 61,227,224,109, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,227,224,109, - 63, 11,111,147, 62, 12, 12, 67, 63, 11,116, 98, 61,251,213,147, 63, 22,209,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,196, 62,217, 58, 73, 61,253, 31,171, 62,217,196, 6, 62, 11,135, 1, 62,198,230,228, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 11,135, 1, 62,198,230,228, 62, 39,172,153, - 62,198,230,230, 62, 25,153,196, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 52,163,179, 62,217,196, 7, 62, 25,153,196, 62,217, 58, 73, 62, 39,172,153, 62,198,230,230, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 39,172,153, 62,198,230,230, 62, 11,135, 1, 62,198,230,228, 62, 25,153,214, - 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,196, 62,217, 58, 73, - 62, 52,163,179, 62,217,196, 7, 62, 38,235,202, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 38,235,202, 62,236,211, 33, 62, 12, 71,173, 62,236,211, 31, 62, 25,153,196, 62,217, 58, 73, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,253, 31,171, 62,217,196, 6, 62, 25,153,196, 62,217, 58, 73, - 62, 12, 71,173, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 12, 71,173, - 62,236,211, 31, 62, 38,235,202, 62,236,211, 33, 62, 25,153,181, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, 61,204,204,215, 63, 0, 0, 0, 61,228,166,251, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,228,166,251, 62,236,207, 67, 62, 12, 71,173, - 62,236,211, 31, 62, 0, 0, 8, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,181, 63, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, 62, 12, 71,173, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 12, 71,173, 62,236,211, 31, 61,228,166,251, 62,236,207, 67, 61,253, 31,171, - 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, - 62, 25,153,181, 63, 0, 0, 0, 62, 38,235,202, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 38,235,202, 62,236,211, 33, 62, 64,223,251, 62,236,207, 67, 62, 51, 51, 92, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 76,204,254, 63, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, - 62, 64,223,251, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64,223,251, - 62,236,207, 67, 62, 38,235,202, 62,236,211, 33, 62, 52,163,179, 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,203,228, 42, 63, 21, 48, 37, 61,156,122, 1, 63, 19, 29,254, 61,180,242,172, 63, 9,152, 96, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,180,242,172, 63, 9,152, 96, 61,227,224,109, - 63, 11,111,147, 61,203,228, 42, 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,251,213,147, 63, 22,209,228, 61,203,228, 42, 63, 21, 48, 37, 61,227,224,109, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,227,224,109, 63, 11,111,147, 61,180,242,172, 63, 9,152, 96, 61,204,204,215, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,203,228, 42, 63, 21, 48, 37, - 61,251,213,147, 63, 22,209,228, 61,228, 85,208, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,228, 85,208, 63, 33, 23,179, 61,177,227,212, 63, 31, 60,110, 61,203,228, 42, 63, 21, 48, 37, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156,122, 1, 63, 19, 29,254, 61,203,228, 42, 63, 21, 48, 37, - 61,177,227,212, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,177,227,212, - 63, 31, 60,110, 61,228, 85,208, 63, 33, 23,179, 61,202, 36,175, 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,151, 80, 53, 63, 40,228,223, 61, 76,203,246, 63, 37,200, 48, 61,130,139,166, 63, 28,140,145, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,130,139,166, 63, 28,140,145, 61,177,227,212, - 63, 31, 60,110, 61,151, 80, 53, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,202, 36,175, 63, 43, 52,228, 61,151, 80, 53, 63, 40,228,223, 61,177,227,212, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,177,227,212, 63, 31, 60,110, 61,130,139,166, 63, 28,140,145, 61,156,122, 1, - 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,254, 61,201, 63, 44,160,207, - 61,202, 36,175, 63, 43, 52,228, 61,228, 85,208, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,228, 85,208, 63, 33, 23,179, 62, 10,237,133, 63, 34, 17,219, 61,254, 61,201, 63, 44,160,207, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,173, 63, 45, 28, 27, 61,254, 61,201, 63, 44,160,207, - 62, 10,237,133, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 10,237,133, - 63, 34, 17,219, 61,228, 85,208, 63, 33, 23,179, 61,251,213,147, 63, 22,209,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,205, 6,245, 63, 21, 48, 37, 62,193, 10,155, 63, 22,209,229, 62,199, 7,229, 63, 11,111,147, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, 62,210,195, 85, - 63, 9,152, 96, 62,205, 6,245, 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,216,225,128, 63, 19, 29,254, 62,205, 6,245, 63, 21, 48, 37, 62,210,195, 85, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,210,195, 85, 63, 9,152, 96, 62,199, 7,229, 63, 11,111,147, 62,204,204,202, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,205, 6,245, 63, 21, 48, 37, - 62,216,225,128, 63, 19, 29,254, 62,211,135, 11, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,211,135, 11, 63, 31, 60,110, 62,198,234,140, 63, 33, 23,179, 62,205, 6,245, 63, 21, 48, 37, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,193, 10,155, 63, 22,209,229, 62,205, 6,245, 63, 21, 48, 37, - 62,198,234,140, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,234,140, - 63, 33, 23,179, 62,211,135, 11, 63, 31, 60,110, 62,205,118,212, 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,192,112,142, 63, 44,160,207, 62,179, 51, 42, 63, 45, 28, 28, 62,186,137, 61, 63, 34, 17,219, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186,137, 61, 63, 34, 17,219, 62,198,234,140, - 63, 33, 23,179, 62,192,112,142, 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,205,118,212, 63, 43, 52,228, 62,192,112,142, 63, 44,160,207, 62,198,234,140, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,234,140, 63, 33, 23,179, 62,186,137, 61, 63, 34, 17,219, 62,193, 10,155, - 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,218, 43,243, 63, 40,228,223, - 62,205,118,212, 63, 43, 52,228, 62,211,135, 11, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,211,135, 11, 63, 31, 60,110, 62,223, 93, 22, 63, 28,140,145, 62,218, 43,243, 63, 40,228,223, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 37,200, 48, 62,218, 43,243, 63, 40,228,223, - 62,223, 93, 22, 63, 28,140,145, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 93, 22, - 63, 28,140,145, 62,211,135, 11, 63, 31, 60,110, 62,216,225,128, 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 38, 63, 23, 32,185, 62,193, 10,155, 63, 22,209,229, 62,186,137, 61, 63, 34, 17,219, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186,137, 61, 63, 34, 17,219, 62,171,221, 20, - 63, 34, 17,219, 62,179, 51, 38, 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,165, 91,180, 63, 22,209,229, 62,179, 51, 38, 63, 23, 32,185, 62,171,221, 20, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,171,221, 20, 63, 34, 17,219, 62,186,137, 61, 63, 34, 17,219, 62,179, 51, 42, - 63, 45, 28, 28, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 38, 63, 23, 32,185, - 62,165, 91,180, 63, 22,209,229, 62,172,108,111, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,172,108,111, 63, 11,116, 98, 62,185,249,222, 63, 11,116, 98, 62,179, 51, 38, 63, 23, 32,185, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,193, 10,155, 63, 22,209,229, 62,179, 51, 38, 63, 23, 32,185, - 62,185,249,222, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,185,249,222, - 63, 11,116, 98, 62,172,108,111, 63, 11,116, 98, 62,179, 51, 38, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, 62,204,204,202, 63, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, 62,185,249,222, - 63, 11,116, 98, 62,191,255,252, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 38, 63, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, 62,185,249,222, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,185,249,222, 63, 11,116, 98, 62,199, 7,229, 63, 11,111,147, 62,193, 10,155, - 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, - 62,179, 51, 38, 63, 0, 0, 0, 62,172,108,111, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,172,108,111, 63, 11,116, 98, 62,159, 94,104, 63, 11,111,147, 62,166,102, 82, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153,153,129, 63, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, - 62,159, 94,104, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159, 94,104, - 63, 11,111,147, 62,172,108,111, 63, 11,116, 98, 62,165, 91,180, 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 30, 62,217, 58, 73, 62,165,174, 39, 62,217,196, 7, 62,172, 41,180, 62,198,230,227, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172, 41,180, 62,198,230,227, 62,186, 60,127, - 62,198,230,225, 62,179, 51, 30, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,192,184, 21, 62,217,196, 6, 62,179, 51, 30, 62,217, 58, 73, 62,186, 60,127, 62,198,230,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186, 60,127, 62,198,230,225, 62,172, 41,180, 62,198,230,227, 62,179, 51, 21, - 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 30, 62,217, 58, 73, - 62,192,184, 21, 62,217,196, 6, 62,185,220, 42, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,185,220, 42, 62,236,211, 31, 62,172,138, 27, 62,236,211, 33, 62,179, 51, 30, 62,217, 58, 73, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,174, 39, 62,217,196, 7, 62,179, 51, 30, 62,217, 58, 73, - 62,172,138, 27, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172,138, 27, - 62,236,211, 33, 62,185,220, 42, 62,236,211, 31, 62,179, 51, 38, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, 62,153,153,129, 63, 0, 0, 0, 62,159,144, 3, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,144, 3, 62,236,207, 67, 62,172,138, 27, - 62,236,211, 33, 62,166,102, 82, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 38, 63, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, 62,172,138, 27, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172,138, 27, 62,236,211, 33, 62,159,144, 3, 62,236,207, 67, 62,165,174, 39, - 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, - 62,179, 51, 38, 63, 0, 0, 0, 62,185,220, 42, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,185,220, 42, 62,236,211, 31, 62,198,214, 65, 62,236,207, 67, 62,191,255,252, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204,204,202, 63, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, - 62,198,214, 65, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,214, 65, - 62,236,207, 67, 62,185,220, 42, 62,236,211, 31, 62,192,184, 21, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,153, 95, 95, 63, 21, 48, 32, 62,141,132,224, 63, 19, 29,246, 62,147,163, 1, 63, 9,152, 91, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,163, 1, 63, 9,152, 91, 62,159, 94,104, - 63, 11,111,147, 62,153, 95, 95, 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,165, 91,180, 63, 22,209,229, 62,153, 95, 95, 63, 21, 48, 32, 62,159, 94,104, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159, 94,104, 63, 11,111,147, 62,147,163, 1, 63, 9,152, 91, 62,153,153,129, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153, 95, 95, 63, 21, 48, 32, - 62,165, 91,180, 63, 22,209,229, 62,159,123,203, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,159,123,203, 63, 33, 23,170, 62,146,223, 84, 63, 31, 60, 94, 62,153, 95, 95, 63, 21, 48, 32, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,132,224, 63, 19, 29,246, 62,153, 95, 95, 63, 21, 48, 32, - 62,146,223, 84, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,146,223, 84, - 63, 31, 60, 94, 62,159,123,203, 63, 33, 23,170, 62,152,239,141, 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,140, 58,121, 63, 40,228,199, 62,128, 0, 0, 63, 37,200, 23, 62,135, 9, 86, 63, 28,140,130, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 9, 86, 63, 28,140,130, 62,146,223, 84, - 63, 31, 60, 94, 62,140, 58,121, 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,152,239,141, 63, 43, 52,211, 62,140, 58,121, 63, 40,228,199, 62,146,223, 84, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,146,223, 84, 63, 31, 60, 94, 62,135, 9, 86, 63, 28,140,130, 62,141,132,224, - 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,245,204, 63, 44,160,198, - 62,152,239,141, 63, 43, 52,211, 62,159,123,203, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,159,123,203, 63, 33, 23,170, 62,171,221, 20, 63, 34, 17,219, 62,165,245,204, 63, 44,160,198, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, 63, 45, 28, 28, 62,165,245,204, 63, 44,160,198, - 62,171,221, 20, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,171,221, 20, - 63, 34, 17,219, 62,159,123,203, 63, 33, 23,170, 62,165, 91,180, 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,182,180, 63, 21, 48, 38, 63, 19,184,140, 63, 22,209,232, 63, 22,183, 43, 63, 11,111,149, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, 63, 28,148,223, - 63, 9,152, 94, 63, 25,182,180, 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 31,163,245, 63, 19, 29,253, 63, 25,182,180, 63, 21, 48, 38, 63, 28,148,223, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,148,223, 63, 9,152, 94, 63, 22,183, 43, 63, 11,111,149, 63, 25,153,155, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,182,180, 63, 21, 48, 38, - 63, 31,163,245, 63, 19, 29,253, 63, 28,246,191, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 28,246,191, 63, 31, 60,109, 63, 22,168,132, 63, 33, 23,180, 63, 25,182,180, 63, 21, 48, 38, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,184,140, 63, 22,209,232, 63, 25,182,180, 63, 21, 48, 38, - 63, 22,168,132, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,168,132, - 63, 33, 23,180, 63, 28,246,191, 63, 31, 60,109, 63, 25,238,169, 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,107,138, 63, 44,160,211, 63, 12,204,220, 63, 45, 28, 35, 63, 16,119,225, 63, 34, 17,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16,119,225, 63, 34, 17,225, 63, 22,168,132, - 63, 33, 23,180, 63, 19,107,138, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 25,238,169, 63, 43, 52,229, 63, 19,107,138, 63, 44,160,211, 63, 22,168,132, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,168,132, 63, 33, 23,180, 63, 16,119,225, 63, 34, 17,225, 63, 19,184,140, - 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 73, 51, 63, 40,228,221, - 63, 25,238,169, 63, 43, 52,229, 63, 28,246,191, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 28,246,191, 63, 31, 60,109, 63, 34,225,192, 63, 28,140,142, 63, 32, 73, 51, 63, 40,228,221, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 37,200, 45, 63, 32, 73, 51, 63, 40,228,221, - 63, 34,225,192, 63, 28,140,142, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,225,192, - 63, 28,140,142, 63, 28,246,191, 63, 31, 60,109, 63, 31,163,245, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,212, 63, 23, 32,188, 63, 19,184,140, 63, 22,209,232, 63, 16,119,225, 63, 34, 17,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16,119,225, 63, 34, 17,225, 63, 9, 33,207, - 63, 34, 17,226, 63, 12,204,212, 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 5,225, 29, 63, 22,209,233, 63, 12,204,212, 63, 23, 32,188, 63, 9, 33,207, 63, 34, 17,226, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 33,207, 63, 34, 17,226, 63, 16,119,225, 63, 34, 17,225, 63, 12,204,220, - 63, 45, 28, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,212, 63, 23, 32,188, - 63, 5,225, 29, 63, 22,209,233, 63, 9,105,118, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 9,105,118, 63, 11,116,101, 63, 16, 48, 43, 63, 11,116,100, 63, 12,204,212, 63, 23, 32,188, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,184,140, 63, 22,209,232, 63, 12,204,212, 63, 23, 32,188, - 63, 16, 48, 43, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 48, 43, - 63, 11,116,100, 63, 9,105,118, 63, 11,116,101, 63, 12,204,205, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, 63, 25,153,155, 63, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, 63, 16, 48, 43, - 63, 11,116,100, 63, 19, 51, 51, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,205, 63, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, 63, 16, 48, 43, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 48, 43, 63, 11,116,100, 63, 22,183, 43, 63, 11,111,149, 63, 19,184,140, - 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, - 63, 12,204,205, 63, 0, 0, 0, 63, 9,105,118, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 9,105,118, 63, 11,116,101, 63, 2,226,118, 63, 11,111,149, 63, 6,102,102, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, - 63, 2,226,118, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,226,118, - 63, 11,111,149, 63, 9,105,118, 63, 11,116,101, 63, 5,225, 29, 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,198, 62,217, 58, 72, 63, 6, 10, 77, 62,217,196, 6, 63, 9, 72, 17, 62,198,230,227, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 72, 17, 62,198,230,227, 63, 16, 81,117, - 62,198,230,223, 63, 12,204,198, 62,217, 58, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 19,143, 64, 62,217,196, 4, 63, 12,204,198, 62,217, 58, 72, 63, 16, 81,117, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 81,117, 62,198,230,223, 63, 9, 72, 17, 62,198,230,227, 63, 12,204,191, - 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,198, 62,217, 58, 72, - 63, 19,143, 64, 62,217,196, 4, 63, 16, 33, 76, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 16, 33, 76, 62,236,211, 30, 63, 9,120, 71, 62,236,211, 30, 63, 12,204,198, 62,217, 58, 72, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 10, 77, 62,217,196, 6, 63, 12,204,198, 62,217, 58, 72, - 63, 9,120, 71, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9,120, 71, - 62,236,211, 30, 63, 16, 33, 76, 62,236,211, 30, 63, 12,204,205, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, 63, 0, 0, 0, 63, 0, 0, 0, 63, 2,251, 62, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,251, 62, 62,236,207, 67, 63, 9,120, 71, - 62,236,211, 30, 63, 6,102,102, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,205, 63, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, 63, 9,120, 71, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9,120, 71, 62,236,211, 30, 63, 2,251, 62, 62,236,207, 67, 63, 6, 10, 77, - 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, - 63, 12,204,205, 63, 0, 0, 0, 63, 16, 33, 76, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 16, 33, 76, 62,236,211, 30, 63, 22,158, 86, 62,236,207, 65, 63, 19, 51, 51, 63, 0, 1,244, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,153,155, 63, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, - 63, 22,158, 86, 62,236,207, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,158, 86, - 62,236,207, 65, 63, 16, 33, 76, 62,236,211, 30, 63, 19,143, 64, 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,255,197,233, 63, 21, 48, 39, 62,243,235,101, 63, 19, 29,252, 62,250, 9,132, 63, 9,152, 94, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 9,132, 63, 9,152, 94, 63, 2,226,118, - 63, 11,111,149, 62,255,197,233, 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 5,225, 29, 63, 22,209,233, 62,255,197,233, 63, 21, 48, 39, 63, 2,226,118, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,226,118, 63, 11,111,149, 62,250, 9,132, 63, 9,152, 94, 63, 0, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,255,197,233, 63, 21, 48, 39, - 63, 5,225, 29, 63, 22,209,233, 63, 2,241, 43, 63, 33, 23,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 2,241, 43, 63, 33, 23,181, 62,249, 69,225, 63, 31, 60,110, 62,255,197,233, 63, 21, 48, 39, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,235,101, 63, 19, 29,252, 62,255,197,233, 63, 21, 48, 39, - 62,249, 69,225, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249, 69,225, - 63, 31, 60,110, 63, 2,241, 43, 63, 33, 23,181, 62,255, 86, 30, 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,242,161, 9, 63, 40,228,223, 62,230,102,129, 63, 37,200, 48, 62,237,111,222, 63, 28,140,143, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237,111,222, 63, 28,140,143, 62,249, 69,225, - 63, 31, 60,110, 62,242,161, 9, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,255, 86, 30, 63, 43, 52,230, 62,242,161, 9, 63, 40,228,223, 62,249, 69,225, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249, 69,225, 63, 31, 60,110, 62,237,111,222, 63, 28,140,143, 62,243,235,101, - 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 46, 46, 63, 44,160,211, - 62,255, 86, 30, 63, 43, 52,230, 63, 2,241, 43, 63, 33, 23,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 2,241, 43, 63, 33, 23,181, 63, 9, 33,207, 63, 34, 17,226, 63, 6, 46, 46, 63, 44,160,211, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 45, 28, 35, 63, 6, 46, 46, 63, 44,160,211, - 63, 9, 33,207, 63, 34, 17,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 33,207, - 63, 34, 17,226, 63, 2,241, 43, 63, 33, 23,181, 63, 5,225, 29, 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 85,238,138, 62,187,220, 72, 63, 82,173,218, 62,210, 92, 55, 63, 79,189,229, 62,189,208,173, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,189,229, 62,189,208,173, 63, 82,250,230, - 62,166,190,117, 63, 85,238,138, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,149, 62,165,199,201, 63, 85,238,138, 62,187,220, 72, 63, 82,250,230, 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,250,230, 62,166,190,117, 63, 79,189,229, 62,189,208,173, 63, 76,119,198, - 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,111,170, 62,193,135, 68, - 63, 76,119,198, 62,169,150, 90, 63, 79,189,229, 62,189,208,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 79,189,229, 62,189,208,173, 63, 76,175,176, 62,213,159,192, 63, 73,111,170, 62,193,135, 68, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,194,112, 62,217,196, 19, 63, 73,111,170, 62,193,135, 68, - 63, 76,175,176, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,175,176, - 62,213,159,192, 63, 79,189,229, 62,189,208,173, 63, 82,173,218, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,175, 52, 62,233, 32,218, 63, 76,204,193, 63, 0, 0, 0, 63, 73,209,128, 62,236,207, 75, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,209,128, 62,236,207, 75, 63, 76,175,176, - 62,213,159,192, 63, 79,175, 52, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 82,173,218, 62,210, 92, 55, 63, 79,175, 52, 62,233, 32,218, 63, 76,175,176, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,175,176, 62,213,159,192, 63, 73,209,128, 62,236,207, 75, 63, 70,194,112, - 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,111,170, 62,193,135, 68, - 63, 70,194,112, 62,217,196, 19, 63, 67,132,171, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 67,132,171, 62,198,230,253, 63, 70, 29, 61, 62,174, 54,114, 63, 73,111,170, 62,193,135, 68, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,119,198, 62,169,150, 90, 63, 73,111,170, 62,193,135, 68, - 63, 70, 29, 61, 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70, 29, 61, - 62,174, 54,114, 63, 67,132,171, 62,198,230,253, 63, 64, 0, 0, 62,180,111,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,175, 52, 62,233, 32,218, 63, 82,173,218, 62,210, 92, 55, 63, 86, 54, 56, 62,233, 23, 58, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 54, 56, 62,233, 23, 58, 63, 83, 51, 41, - 62,255,252, 24, 63, 79,175, 52, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 76,204,193, 63, 0, 0, 0, 63, 79,175, 52, 62,233, 32,218, 63, 83, 51, 41, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83, 51, 41, 62,255,252, 24, 63, 86, 54, 56, 62,233, 23, 58, 63, 89,153,147, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, - 63, 89,153,147, 63, 0, 0, 0, 63, 86, 54, 56, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 86, 54, 56, 62,233, 23, 58, 63, 89,153,147, 62,209,190,143, 63, 92,252,239, 62,233, 23, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96,133, 78, 62,210, 92, 55, 63, 92,252,239, 62,233, 23, 58, - 63, 89,153,147, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, - 62,209,190,143, 63, 86, 54, 56, 62,233, 23, 58, 63, 82,173,218, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 85,238,138, 62,187,220, 72, 63, 89,153,149, 62,165,199,201, 63, 93, 68,159, 62,187,220, 72, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 68,159, 62,187,220, 72, 63, 89,153,147, - 62,209,190,143, 63, 85,238,138, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 82,173,218, 62,210, 92, 55, 63, 85,238,138, 62,187,220, 72, 63, 89,153,147, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 62,209,190,143, 63, 93, 68,159, 62,187,220, 72, 63, 96,133, 78, - 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, - 63, 96,133, 78, 62,210, 92, 55, 63, 99,131,242, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 99,131,242, 62,233, 32,218, 63, 95,255,254, 62,255,252, 24, 63, 92,252,239, 62,233, 23, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 63, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, - 63, 95,255,254, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,255,254, - 62,255,252, 24, 63, 99,131,242, 62,233, 32,218, 63,102,102,101, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,111,174,139, 62,198,230,223, 63,108,112,192, 62,217,196, 4, 63,105,195,133, 62,193,135, 37, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,195,133, 62,193,135, 37, 63,109, 21,249, - 62,174, 54, 65, 63,111,174,139, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 65, 62,180,111,160, 63,111,174,139, 62,198,230,223, 63,109, 21,249, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 21,249, 62,174, 54, 65, 63,105,195,133, 62,193,135, 37, 63,102,187,106, - 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,117, 70, 62,189,208,155, - 63,102,187,106, 62,169,150, 54, 63,105,195,133, 62,193,135, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,105,195,133, 62,193,135, 37, 63,102,131,123, 62,213,159,181, 63, 99,117, 70, 62,189,208,155, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96,133, 78, 62,210, 92, 55, 63, 99,117, 70, 62,189,208,155, - 63,102,131,123, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,131,123, - 62,213,159,181, 63,105,195,133, 62,193,135, 37, 63,108,112,192, 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 97,170, 62,236,207, 65, 63,102,102,101, 63, 0, 0, 0, 63, 99,131,242, 62,233, 32,218, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,131,242, 62,233, 32,218, 63,102,131,123, - 62,213,159,181, 63,105, 97,170, 62,236,207, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,108,112,192, 62,217,196, 4, 63,105, 97,170, 62,236,207, 65, 63,102,131,123, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,131,123, 62,213,159,181, 63, 99,131,242, 62,233, 32,218, 63, 96,133, 78, - 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,117, 70, 62,189,208,155, - 63, 96,133, 78, 62,210, 92, 55, 63, 93, 68,159, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 93, 68,159, 62,187,220, 72, 63, 96, 56, 71, 62,166,190, 99, 63, 99,117, 70, 62,189,208,155, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,187,106, 62,169,150, 54, 63, 99,117, 70, 62,189,208,155, - 63, 96, 56, 71, 62,166,190, 99, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 56, 71, - 62,166,190, 99, 63, 93, 68,159, 62,187,220, 72, 63, 89,153,149, 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,107, 33, 63, 9,152, 94, 63, 96, 92, 11, 63, 19, 29,253, 63, 92,238, 21, 63, 9,150,112, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,238, 21, 63, 9,150,112, 63, 95,255,254, - 62,255,252, 24, 63, 99,107, 33, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,102,102,101, 63, 0, 0, 0, 63, 99,107, 33, 63, 9,152, 94, 63, 95,255,254, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,255,254, 62,255,252, 24, 63, 92,238, 21, 63, 9,150,112, 63, 89,153,147, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, - 63, 89,153,147, 63, 0, 0, 0, 63, 92,238, 21, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 92,238, 21, 63, 9,150,112, 63, 89,153,143, 63, 19, 98,219, 63, 86, 69, 14, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,215, 19, 63, 19, 29,252, 63, 86, 69, 14, 63, 9,150,112, - 63, 89,153,143, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,143, - 63, 19, 98,219, 63, 92,238, 21, 63, 9,150,112, 63, 96, 92, 11, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 30, 63, 63, 28,140,143, 63, 89,153,139, 63, 37,200, 45, 63, 86, 20,218, 63, 28,140,143, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 20,218, 63, 28,140,143, 63, 89,153,143, - 63, 19, 98,219, 63, 93, 30, 63, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 96, 92, 11, 63, 19, 29,253, 63, 93, 30, 63, 63, 28,140,143, 63, 89,153,143, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,143, 63, 19, 98,219, 63, 86, 20,218, 63, 28,140,143, 63, 82,215, 19, - 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, - 63, 82,215, 19, 63, 19, 29,252, 63, 79,200, 1, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 79,200, 1, 63, 9,152, 94, 63, 83, 51, 41, 62,255,252, 24, 63, 86, 69, 14, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 63, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, - 63, 83, 51, 41, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83, 51, 41, - 62,255,252, 24, 63, 79,200, 1, 63, 9,152, 94, 63, 76,204,193, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61, 18, 28,237, 62,187,220, 60, 60,188, 35,151, 62,210, 92, 46, 60, 60, 74,218, 62,189,208,150, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60, 60, 74,218, 62,189,208,150, 60,197,197,195, - 62,166,190, 89, 61, 18, 28,237, 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,205,194, 62,165,199,186, 61, 18, 28,237, 62,187,220, 60, 60,197,197,195, 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131, 23, 23, 62,166,190, 89, 63,129,120,150, 62,189,208,150, 63,127,171, 15, - 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,162,241, 62,193,135, 36, - 63,127,171, 15, 62,169,150, 52, 63,129,120,150, 62,189,208,150, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,129,120,150, 62,189,208,150, 63,127,226,244, 62,213,159,179, 63,124,162,241, 62,193,135, 36, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,245,179, 62,217,196, 6, 63,124,162,241, 62,193,135, 36, - 63,127,226,244, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,127,226,244, - 62,213,159,179, 63,129,120,150, 62,189,208,150, 63,130,240,142, 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,129,113, 59, 62,233, 32,214, 63,128, 0, 0, 63, 0, 0, 0, 63,125, 4,194, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 4,194, 62,236,207, 67, 63,127,226,244, - 62,213,159,179, 63,129,113, 59, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,130,240,142, 62,210, 92, 46, 63,129,113, 59, 62,233, 32,214, 63,127,226,244, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,127,226,244, 62,213,159,179, 63,125, 4,194, 62,236,207, 67, 63,121,245,179, - 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,162,241, 62,193,135, 36, - 63,121,245,179, 62,217,196, 6, 63,118,183,239, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,118,183,239, 62,198,230,227, 63,121, 80,133, 62,174, 54, 65, 63,124,162,241, 62,193,135, 36, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,127,171, 15, 62,169,150, 52, 63,124,162,241, 62,193,135, 36, - 63,121, 80,133, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 80,133, - 62,174, 54, 65, 63,118,183,239, 62,198,230,227, 63,115, 51, 65, 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 60, 56,157,110, 62,233, 32,214, 60,188, 35,151, 62,210, 92, 46, 61, 22,151, 95, 62,233, 23, 55, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 22,151, 95, 62,233, 23, 55, 60,204,204,176, - 62,255,252, 24, 60, 56,157,110, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 38, 11, 79,167, 63, 0, 0, 0, 60, 56,157,110, 62,233, 32,214, 60,204,204,176, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,204,204,176, 62,255,252, 24, 61, 22,151, 95, 62,233, 23, 55, 61, 76,204,215, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, - 61, 76,204,215, 63, 0, 0, 0, 61, 22,151, 95, 62,233, 23, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61, 22,151, 95, 62,233, 23, 55, 61, 76,205, 68, 62,209,190,135, 61,129,129, 87, 62,233, 23, 57, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,157,196, 92, 62,210, 92, 49, 61,129,129, 87, 62,233, 23, 57, - 61, 76,205, 68, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205, 68, - 62,209,190,135, 61, 22,151, 95, 62,233, 23, 55, 60,188, 35,151, 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61, 18, 28,237, 62,187,220, 60, 61, 76,205,194, 62,165,199,186, 61,131,191, 7, 62,187,220, 62, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,131,191, 7, 62,187,220, 62, 61, 76,205, 68, - 62,209,190,135, 61, 18, 28,237, 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 60,188, 35,151, 62,210, 92, 46, 61, 18, 28,237, 62,187,220, 60, 61, 76,205, 68, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205, 68, 62,209,190,135, 61,131,191, 7, 62,187,220, 62, 61,157,196, 92, - 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, - 61,157,196, 92, 62,210, 92, 49, 61,181,185, 89, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,181,185, 89, 62,233, 32,214, 61,153,153,154, 62,255,252, 25, 61,129,129, 87, 62,233, 23, 57, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204,215, 63, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, - 61,153,153,154, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,153,153,154, - 62,255,252, 25, 61,181,185, 89, 62,233, 32,214, 61,204,204,215, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 11,135, 1, 62,198,230,228, 61,253, 31,171, 62,217,196, 6, 61,231,181,251, 62,193,135, 38, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,231,181,251, 62,193,135, 38, 62, 1, 36,204, - 62,174, 54, 70, 62, 11,135, 1, 62,198,230,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,214, 62,180,111,165, 62, 11,135, 1, 62,198,230,228, 62, 1, 36,204, 62,174, 54, 70, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 1, 36,204, 62,174, 54, 70, 61,231,181,251, 62,193,135, 38, 61,207,117, 70, - 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181, 68, 35, 62,189,208,153, - 61,207,117, 70, 62,169,150, 54, 61,231,181,251, 62,193,135, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,231,181,251, 62,193,135, 38, 61,205,181,164, 62,213,159,180, 61,181, 68, 35, 62,189,208,153, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,157,196, 92, 62,210, 92, 49, 61,181, 68, 35, 62,189,208,153, - 61,205,181,164, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,205,181,164, - 62,213,159,180, 61,231,181,251, 62,193,135, 38, 61,253, 31,171, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,228,166,251, 62,236,207, 67, 61,204,204,215, 63, 0, 0, 0, 61,181,185, 89, 62,233, 32,214, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181,185, 89, 62,233, 32,214, 61,205,181,164, - 62,213,159,180, 61,228,166,251, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,253, 31,171, 62,217,196, 6, 61,228,166,251, 62,236,207, 67, 61,205,181,164, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,205,181,164, 62,213,159,180, 61,181,185, 89, 62,233, 32,214, 61,157,196, 92, - 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181, 68, 35, 62,189,208,153, - 61,157,196, 92, 62,210, 92, 49, 61,131,191, 7, 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,131,191, 7, 62,187,220, 62, 61,155, 92, 79, 62,166,190, 91, 61,181, 68, 35, 62,189,208,153, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,207,117, 70, 62,169,150, 54, 61,181, 68, 35, 62,189,208,153, - 61,155, 92, 79, 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,155, 92, 79, - 62,166,190, 91, 61,131,191, 7, 62,187,220, 62, 61, 76,205,194, 62,165,199,186, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,180,242,172, 63, 9,152, 96, 61,156,122, 1, 63, 19, 29,254, 61,129, 10,100, 63, 9,150,113, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129, 10,100, 63, 9,150,113, 61,153,153,154, - 62,255,252, 25, 61,180,242,172, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,204,204,215, 63, 0, 0, 0, 61,180,242,172, 63, 9,152, 96, 61,153,153,154, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,153,153,154, 62,255,252, 25, 61,129, 10,100, 63, 9,150,113, 61, 76,204,215, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, - 61, 76,204,215, 63, 0, 0, 0, 61,129, 10,100, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,129, 10,100, 63, 9,150,113, 61, 76,204, 91, 63, 19, 98,220, 61, 23,132,109, 63, 9,150,113, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,193, 73,174, 63, 19, 29,253, 61, 23,132,109, 63, 9,150,113, - 61, 76,204, 91, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204, 91, - 63, 19, 98,220, 61,129, 10,100, 63, 9,150,113, 61,156,122, 1, 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,130,139,166, 63, 28,140,145, 61, 76,203,246, 63, 37,200, 48, 61, 20,129, 13, 63, 28,140,143, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 20,129, 13, 63, 28,140,143, 61, 76,204, 91, - 63, 19, 98,220, 61,130,139,166, 63, 28,140,145, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,156,122, 1, 63, 19, 29,254, 61,130,139,166, 63, 28,140,145, 61, 76,204, 91, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204, 91, 63, 19, 98,220, 61, 20,129, 13, 63, 28,140,143, 60,193, 73,174, - 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, - 60,193, 73,174, 63, 19, 29,253, 60, 62,207,114, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 60, 62,207,114, 63, 9,152, 94, 60,204,204,176, 62,255,252, 24, 61, 23,132,109, 63, 9,150,113, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204,215, 63, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, - 60,204,204,176, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,204,204,176, - 62,255,252, 24, 60, 62,207,114, 63, 9,152, 94, 38, 11, 79,167, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,113, 83,237, 62,187,220, 79, 62,100, 81, 63, 62,210, 92, 60, 62, 88,145,110, 62,189,208,167, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 88,145,110, 62,189,208,167, 62,101,133, 91, - 62,166,190,112, 62,113, 83,237, 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 62,165,199,206, 62,113, 83,237, 62,187,220, 79, 62,101,133, 91, 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101,133, 91, 62,166,190,112, 62, 88,145,110, 62,189,208,167, 62, 75,120,239, - 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 63, 88,144, 62,193,135, 46, - 62, 75,120,239, 62,169,150, 70, 62, 88,145,110, 62,189,208,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 88,145,110, 62,189,208,167, 62, 76, 88,170, 62,213,159,187, 62, 63, 88,144, 62,193,135, 46, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,163,179, 62,217,196, 7, 62, 63, 88,144, 62,193,135, 46, - 62, 76, 88,170, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 76, 88,170, - 62,213,159,187, 62, 88,145,110, 62,189,208,167, 62,100, 81, 63, 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 88, 86,190, 62,233, 32,221, 62, 76,204,254, 63, 0, 0, 0, 62, 64,223,251, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64,223,251, 62,236,207, 67, 62, 76, 88,170, - 62,213,159,187, 62, 88, 86,190, 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,100, 81, 63, 62,210, 92, 60, 62, 88, 86,190, 62,233, 32,221, 62, 76, 88,170, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 76, 88,170, 62,213,159,187, 62, 64,223,251, 62,236,207, 67, 62, 52,163,179, - 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 63, 88,144, 62,193,135, 46, - 62, 52,163,179, 62,217,196, 7, 62, 39,172,153, 62,198,230,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 39,172,153, 62,198,230,230, 62, 50, 14,213, 62,174, 54, 78, 62, 63, 88,144, 62,193,135, 46, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 75,120,239, 62,169,150, 70, 62, 63, 88,144, 62,193,135, 46, - 62, 50, 14,213, 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 50, 14,213, - 62,174, 54, 78, 62, 39,172,153, 62,198,230,230, 62, 25,153,214, 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 88, 86,190, 62,233, 32,221, 62,100, 81, 63, 62,210, 92, 60, 62,114,114,166, 62,233, 23, 63, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,114,166, 62,233, 23, 63, 62,102,102,126, - 62,255,252, 25, 62, 88, 86,190, 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 76,204,254, 63, 0, 0, 0, 62, 88, 86,190, 62,233, 32,221, 62,102,102,126, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,102,102,126, 62,255,252, 25, 62,114,114,166, 62,233, 23, 63, 62,128, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, - 62,128, 0, 0, 63, 0, 0, 0, 62,114,114,166, 62,233, 23, 63, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,114,114,166, 62,233, 23, 63, 62,128, 0, 0, 62,209,190,149, 62,134,198,173, 62,233, 23, 63, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,215, 97, 62,210, 92, 60, 62,134,198,173, 62,233, 23, 63, - 62,128, 0, 0, 62,209,190,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, - 62,209,190,149, 62,114,114,166, 62,233, 23, 63, 62,100, 81, 63, 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,113, 83,237, 62,187,220, 79, 62,128, 0, 0, 62,165,199,206, 62,135, 86, 9, 62,187,220, 79, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 86, 9, 62,187,220, 79, 62,128, 0, 0, - 62,209,190,149, 62,113, 83,237, 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,100, 81, 63, 62,210, 92, 60, 62,113, 83,237, 62,187,220, 79, 62,128, 0, 0, 62,209,190,149, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,209,190,149, 62,135, 86, 9, 62,187,220, 79, 62,141,215, 97, - 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, - 62,141,215, 97, 62,210, 92, 60, 62,147,212,161, 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,147,212,161, 62,233, 32,221, 62,140,204,193, 62,255,252, 25, 62,134,198,173, 62,233, 23, 63, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, - 62,140,204,193, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,140,204,193, - 62,255,252, 25, 62,147,212,161, 62,233, 32,221, 62,153,153,129, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,172, 41,180, 62,198,230,227, 62,165,174, 39, 62,217,196, 7, 62,160, 83,184, 62,193,135, 46, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,160, 83,184, 62,193,135, 46, 62,166,248,150, - 62,174, 54, 78, 62,172, 41,180, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 21, 62,180,111,165, 62,172, 41,180, 62,198,230,227, 62,166,248,150, 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,166,248,150, 62,174, 54, 78, 62,160, 83,184, 62,193,135, 46, 62,154, 67,137, - 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,183, 73, 62,189,208,167, - 62,154, 67,137, 62,169,150, 70, 62,160, 83,184, 62,193,135, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,160, 83,184, 62,193,135, 46, 62,153,211,171, 62,213,159,187, 62,147,183, 73, 62,189,208,167, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,215, 97, 62,210, 92, 60, 62,147,183, 73, 62,189,208,167, - 62,153,211,171, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153,211,171, - 62,213,159,187, 62,160, 83,184, 62,193,135, 46, 62,165,174, 39, 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,159,144, 3, 62,236,207, 67, 62,153,153,129, 63, 0, 0, 0, 62,147,212,161, 62,233, 32,221, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,212,161, 62,233, 32,221, 62,153,211,171, - 62,213,159,187, 62,159,144, 3, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,165,174, 39, 62,217,196, 7, 62,159,144, 3, 62,236,207, 67, 62,153,211,171, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153,211,171, 62,213,159,187, 62,147,212,161, 62,233, 32,221, 62,141,215, 97, - 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,183, 73, 62,189,208,167, - 62,141,215, 97, 62,210, 92, 60, 62,135, 86, 9, 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,135, 86, 9, 62,187,220, 79, 62,141, 61, 82, 62,166,190,112, 62,147,183, 73, 62,189,208,167, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,154, 67,137, 62,169,150, 70, 62,147,183, 73, 62,189,208,167, - 62,141, 61, 82, 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141, 61, 82, - 62,166,190,112, 62,135, 86, 9, 62,187,220, 79, 62,128, 0, 0, 62,165,199,206, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,147,163, 1, 63, 9,152, 91, 62,141,132,224, 63, 19, 29,246, 62,134,168,251, 63, 9,150,107, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,168,251, 63, 9,150,107, 62,140,204,193, - 62,255,252, 25, 62,147,163, 1, 63, 9,152, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,153,153,129, 63, 0, 0, 0, 62,147,163, 1, 63, 9,152, 91, 62,140,204,193, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,140,204,193, 62,255,252, 25, 62,134,168,251, 63, 9,150,107, 62,128, 0, 0, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, - 62,128, 0, 0, 63, 0, 0, 0, 62,134,168,251, 63, 9,150,107, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,134,168,251, 63, 9,150,107, 62,128, 0, 0, 63, 19, 98,209, 62,114,174, 11, 63, 9,150,107, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,100,246, 64, 63, 19, 29,246, 62,114,174, 11, 63, 9,150,107, - 62,128, 0, 0, 63, 19, 98,209, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, - 63, 19, 98,209, 62,134,168,251, 63, 9,150,107, 62,141,132,224, 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 9, 86, 63, 28,140,130, 62,128, 0, 0, 63, 37,200, 23, 62,113,237, 83, 63, 28,140,130, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,113,237, 83, 63, 28,140,130, 62,128, 0, 0, - 63, 19, 98,209, 62,135, 9, 86, 63, 28,140,130, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,141,132,224, 63, 19, 29,246, 62,135, 9, 86, 63, 28,140,130, 62,128, 0, 0, 63, 19, 98,209, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 19, 98,209, 62,113,237, 83, 63, 28,140,130, 62,100,246, 64, - 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, - 62,100,246, 64, 63, 19, 29,246, 62, 88,185,255, 63, 9,152, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 88,185,255, 63, 9,152, 90, 62,102,102,126, 62,255,252, 25, 62,114,174, 11, 63, 9,150,107, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, - 62,102,102,126, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,102,102,126, - 62,255,252, 25, 62, 88,185,255, 63, 9,152, 90, 62, 76,204,254, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 16, 63, 62,187,220, 62, 62,216,142,233, 62,210, 92, 49, 62,210,174,248, 62,189,208,153, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,210,174,248, 62,189,208,153, 62,217, 40,237, - 62,166,190, 91, 62,223, 16, 63, 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102, 72, 62,165,199,183, 62,223, 16, 63, 62,187,220, 62, 62,217, 40,237, 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217, 40,237, 62,166,190, 91, 62,210,174,248, 62,189,208,153, 62,204, 34,175, - 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198, 18,129, 62,193,135, 37, - 62,204, 34,175, 62,169,150, 54, 62,210,174,248, 62,189,208,153, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,210,174,248, 62,189,208,153, 62,204,146,151, 62,213,159,180, 62,198, 18,129, 62,193,135, 37, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,184, 21, 62,217,196, 6, 62,198, 18,129, 62,193,135, 37, - 62,204,146,151, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204,146,151, - 62,213,159,180, 62,210,174,248, 62,189,208,153, 62,216,142,233, 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,210,145,170, 62,233, 32,214, 62,204,204,202, 63, 0, 0, 0, 62,198,214, 65, 62,236,207, 67, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,214, 65, 62,236,207, 67, 62,204,146,151, - 62,213,159,180, 62,210,145,170, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,216,142,233, 62,210, 92, 49, 62,210,145,170, 62,233, 32,214, 62,204,146,151, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204,146,151, 62,213,159,180, 62,198,214, 65, 62,236,207, 67, 62,192,184, 21, - 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198, 18,129, 62,193,135, 37, - 62,192,184, 21, 62,217,196, 6, 62,186, 60,127, 62,198,230,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,186, 60,127, 62,198,230,225, 62,191,109,154, 62,174, 54, 68, 62,198, 18,129, 62,193,135, 37, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204, 34,175, 62,169,150, 54, 62,198, 18,129, 62,193,135, 37, - 62,191,109,154, 62,174, 54, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,191,109,154, - 62,174, 54, 68, 62,186, 60,127, 62,198,230,225, 62,179, 51, 21, 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,210,145,170, 62,233, 32,214, 62,216,142,233, 62,210, 92, 49, 62,223,159,171, 62,233, 23, 57, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,159,171, 62,233, 23, 57, 62,217,153,154, - 62,255,252, 24, 62,210,145,170, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,204,204,202, 63, 0, 0, 0, 62,210,145,170, 62,233, 32,214, 62,217,153,154, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217,153,154, 62,255,252, 24, 62,223,159,171, 62,233, 23, 57, 62,230,102,101, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, - 62,230,102,101, 63, 0, 0, 0, 62,223,159,171, 62,233, 23, 57, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,223,159,171, 62,233, 23, 57, 62,230,102, 88, 62,209,190,135, 62,237, 45, 20, 62,233, 23, 55, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,244, 61,199, 62,210, 92, 46, 62,237, 45, 20, 62,233, 23, 55, - 62,230,102, 88, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 88, - 62,209,190,135, 62,223,159,171, 62,233, 23, 57, 62,216,142,233, 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 16, 63, 62,187,220, 62, 62,230,102, 72, 62,165,199,183, 62,237,188, 99, 62,187,220, 60, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237,188, 99, 62,187,220, 60, 62,230,102, 88, - 62,209,190,135, 62,223, 16, 63, 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,216,142,233, 62,210, 92, 49, 62,223, 16, 63, 62,187,220, 62, 62,230,102, 88, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 88, 62,209,190,135, 62,237,188, 99, 62,187,220, 60, 62,244, 61,199, - 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, - 62,244, 61,199, 62,210, 92, 46, 62,250, 59, 21, 62,233, 32,213, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,250, 59, 21, 62,233, 32,213, 62,243, 51, 53, 62,255,252, 24, 62,237, 45, 20, 62,233, 23, 55, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,101, 63, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, - 62,243, 51, 53, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243, 51, 53, - 62,255,252, 24, 62,250, 59, 21, 62,233, 32,213, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 72, 17, 62,198,230,227, 63, 6, 10, 77, 62,217,196, 6, 63, 3, 93, 15, 62,193,135, 36, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 93, 15, 62,193,135, 36, 63, 6,175,123, - 62,174, 54, 65, 63, 9, 72, 17, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,191, 62,180,111,160, 63, 9, 72, 17, 62,198,230,227, 63, 6,175,123, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,175,123, 62,174, 54, 65, 63, 3, 93, 15, 62,193,135, 36, 63, 0, 84,241, - 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 29,169, 62,189,208,150, - 63, 0, 84,241, 62,169,150, 52, 63, 3, 93, 15, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 3, 93, 15, 62,193,135, 36, 63, 0, 29, 12, 62,213,159,179, 62,250, 29,169, 62,189,208,150, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,244, 61,199, 62,210, 92, 46, 62,250, 29,169, 62,189,208,150, - 63, 0, 29, 12, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 29, 12, - 62,213,159,179, 63, 3, 93, 15, 62,193,135, 36, 63, 6, 10, 77, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,251, 62, 62,236,207, 67, 63, 0, 0, 0, 63, 0, 0, 0, 62,250, 59, 21, 62,233, 32,213, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 59, 21, 62,233, 32,213, 63, 0, 29, 12, - 62,213,159,179, 63, 2,251, 62, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 6, 10, 77, 62,217,196, 6, 63, 2,251, 62, 62,236,207, 67, 63, 0, 29, 12, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 29, 12, 62,213,159,179, 62,250, 59, 21, 62,233, 32,213, 62,244, 61,199, - 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 29,169, 62,189,208,150, - 62,244, 61,199, 62,210, 92, 46, 62,237,188, 99, 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,237,188, 99, 62,187,220, 60, 62,243,163,164, 62,166,190, 89, 62,250, 29,169, 62,189,208,150, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 84,241, 62,169,150, 52, 62,250, 29,169, 62,189,208,150, - 62,243,163,164, 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,163,164, - 62,166,190, 89, 62,237,188, 99, 62,187,220, 60, 62,230,102, 72, 62,165,199,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 9,132, 63, 9,152, 94, 62,243,235,101, 63, 19, 29,252, 62,237, 15,114, 63, 9,150,113, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 15,114, 63, 9,150,113, 62,243, 51, 53, - 62,255,252, 24, 62,250, 9,132, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 62,250, 9,132, 63, 9,152, 94, 62,243, 51, 53, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243, 51, 53, 62,255,252, 24, 62,237, 15,114, 63, 9,150,113, 62,230,102,101, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,189,103, 63, 9,150,112, - 62,230,102,101, 63, 0, 0, 0, 62,237, 15,114, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,237, 15,114, 63, 9,150,113, 62,230,102,117, 63, 19, 98,220, 62,223,189,103, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,225,128, 63, 19, 29,254, 62,223,189,103, 63, 9,150,112, - 62,230,102,117, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,117, - 63, 19, 98,220, 62,237, 15,114, 63, 9,150,113, 62,243,235,101, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,237,111,222, 63, 28,140,143, 62,230,102,129, 63, 37,200, 48, 62,223, 93, 22, 63, 28,140,145, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 93, 22, 63, 28,140,145, 62,230,102,117, - 63, 19, 98,220, 62,237,111,222, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,243,235,101, 63, 19, 29,252, 62,237,111,222, 63, 28,140,143, 62,230,102,117, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,117, 63, 19, 98,220, 62,223, 93, 22, 63, 28,140,145, 62,216,225,128, - 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,189,103, 63, 9,150,112, - 62,216,225,128, 63, 19, 29,254, 62,210,195, 85, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,210,195, 85, 63, 9,152, 96, 62,217,153,154, 62,255,252, 24, 62,223,189,103, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,101, 63, 0, 0, 0, 62,223,189,103, 63, 9,150,112, - 62,217,153,154, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217,153,154, - 62,255,252, 24, 62,210,195, 85, 63, 9,152, 96, 62,204,204,202, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,187, 97, 62,187,220, 72, 63, 31,122,178, 62,210, 92, 55, 63, 28,138,186, 62,189,208,155, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,138,186, 62,189,208,155, 63, 31,199,185, - 62,166,190, 96, 63, 34,187, 97, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,107, 62,165,199,201, 63, 34,187, 97, 62,187,220, 72, 63, 31,199,185, 62,166,190, 96, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,199,185, 62,166,190, 96, 63, 28,138,186, 62,189,208,155, 63, 25, 68,150, - 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22, 60,123, 62,193,135, 36, - 63, 25, 68,150, 62,169,150, 54, 63, 28,138,186, 62,189,208,155, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 28,138,186, 62,189,208,155, 63, 25,124,133, 62,213,159,181, 63, 22, 60,123, 62,193,135, 36, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,143, 64, 62,217,196, 4, 63, 22, 60,123, 62,193,135, 36, - 63, 25,124,133, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,124,133, - 62,213,159,181, 63, 28,138,186, 62,189,208,155, 63, 31,122,178, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,124, 14, 62,233, 32,218, 63, 25,153,155, 63, 0, 0, 0, 63, 22,158, 86, 62,236,207, 65, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,158, 86, 62,236,207, 65, 63, 25,124,133, - 62,213,159,181, 63, 28,124, 14, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 31,122,178, 62,210, 92, 55, 63, 28,124, 14, 62,233, 32,218, 63, 25,124,133, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,124,133, 62,213,159,181, 63, 22,158, 86, 62,236,207, 65, 63, 19,143, 64, - 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22, 60,123, 62,193,135, 36, - 63, 19,143, 64, 62,217,196, 4, 63, 16, 81,117, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 16, 81,117, 62,198,230,223, 63, 18,234, 7, 62,174, 54, 65, 63, 22, 60,123, 62,193,135, 36, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25, 68,150, 62,169,150, 54, 63, 22, 60,123, 62,193,135, 36, - 63, 18,234, 7, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,234, 7, - 62,174, 54, 65, 63, 16, 81,117, 62,198,230,223, 63, 12,204,191, 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,124, 14, 62,233, 32,218, 63, 31,122,178, 62,210, 92, 55, 63, 35, 3, 17, 62,233, 23, 58, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 3, 17, 62,233, 23, 58, 63, 32, 0, 2, - 62,255,252, 24, 63, 28,124, 14, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 25,153,155, 63, 0, 0, 0, 63, 28,124, 14, 62,233, 32,218, 63, 32, 0, 2, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 0, 2, 62,255,252, 24, 63, 35, 3, 17, 62,233, 23, 58, 63, 38,102,109, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, - 63, 38,102,109, 63, 0, 0, 0, 63, 35, 3, 17, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 35, 3, 17, 62,233, 23, 58, 63, 38,102,109, 62,209,190,143, 63, 41,201,200, 62,233, 23, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 82, 38, 62,210, 92, 55, 63, 41,201,200, 62,233, 23, 58, - 63, 38,102,109, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, - 62,209,190,143, 63, 35, 3, 17, 62,233, 23, 58, 63, 31,122,178, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,187, 97, 62,187,220, 72, 63, 38,102,107, 62,165,199,201, 63, 42, 17,118, 62,187,220, 72, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42, 17,118, 62,187,220, 72, 63, 38,102,109, - 62,209,190,143, 63, 34,187, 97, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 31,122,178, 62,210, 92, 55, 63, 34,187, 97, 62,187,220, 72, 63, 38,102,109, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 62,209,190,143, 63, 42, 17,118, 62,187,220, 72, 63, 45, 82, 38, - 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, - 63, 45, 82, 38, 62,210, 92, 55, 63, 48, 80,204, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 48, 80,204, 62,233, 32,218, 63, 44,204,215, 62,255,252, 23, 63, 41,201,200, 62,233, 23, 58, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 63, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, - 63, 44,204,215, 62,255,252, 23, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44,204,215, - 62,255,252, 23, 63, 48, 80,204, 62,233, 32,218, 63, 51, 51, 63, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,123, 85, 62,198,230,253, 63, 57, 61,144, 62,217,196, 19, 63, 54,144, 86, 62,193,135, 68, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,144, 86, 62,193,135, 68, 63, 57,226,196, - 62,174, 54,114, 63, 60,123, 85, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 62,180,111,211, 63, 60,123, 85, 62,198,230,253, 63, 57,226,196, 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,226,196, 62,174, 54,114, 63, 54,144, 86, 62,193,135, 68, 63, 51,136, 58, - 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 66, 27, 62,189,208,173, - 63, 51,136, 58, 62,169,150, 90, 63, 54,144, 86, 62,193,135, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 54,144, 86, 62,193,135, 68, 63, 51, 80, 80, 62,213,159,192, 63, 48, 66, 27, 62,189,208,173, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 82, 38, 62,210, 92, 55, 63, 48, 66, 27, 62,189,208,173, - 63, 51, 80, 80, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 80, 80, - 62,213,159,192, 63, 54,144, 86, 62,193,135, 68, 63, 57, 61,144, 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 46,128, 62,236,207, 75, 63, 51, 51, 63, 63, 0, 0, 0, 63, 48, 80,204, 62,233, 32,218, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 80,204, 62,233, 32,218, 63, 51, 80, 80, - 62,213,159,192, 63, 54, 46,128, 62,236,207, 75, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 57, 61,144, 62,217,196, 19, 63, 54, 46,128, 62,236,207, 75, 63, 51, 80, 80, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 80, 80, 62,213,159,192, 63, 48, 80,204, 62,233, 32,218, 63, 45, 82, 38, - 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 66, 27, 62,189,208,173, - 63, 45, 82, 38, 62,210, 92, 55, 63, 42, 17,118, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 42, 17,118, 62,187,220, 72, 63, 45, 5, 26, 62,166,190,117, 63, 48, 66, 27, 62,189,208,173, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51,136, 58, 62,169,150, 90, 63, 48, 66, 27, 62,189,208,173, - 63, 45, 5, 26, 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 5, 26, - 62,166,190,117, 63, 42, 17,118, 62,187,220, 72, 63, 38,102,107, 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 55,255, 63, 9,152, 94, 63, 45, 40,237, 63, 19, 29,252, 63, 41,186,242, 63, 9,150,112, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,186,242, 63, 9,150,112, 63, 44,204,215, - 62,255,252, 23, 63, 48, 55,255, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 51, 51, 63, 63, 0, 0, 0, 63, 48, 55,255, 63, 9,152, 94, 63, 44,204,215, 62,255,252, 23, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44,204,215, 62,255,252, 23, 63, 41,186,242, 63, 9,150,112, 63, 38,102,109, - 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, - 63, 38,102,109, 63, 0, 0, 0, 63, 41,186,242, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 41,186,242, 63, 9,150,112, 63, 38,102,113, 63, 19, 98,219, 63, 35, 17,235, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,163,245, 63, 19, 29,253, 63, 35, 17,235, 63, 9,150,112, - 63, 38,102,113, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,113, - 63, 19, 98,219, 63, 41,186,242, 63, 9,150,112, 63, 45, 40,237, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,235, 38, 63, 28,140,141, 63, 38,102,117, 63, 37,200, 45, 63, 34,225,192, 63, 28,140,142, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,225,192, 63, 28,140,142, 63, 38,102,113, - 63, 19, 98,219, 63, 41,235, 38, 63, 28,140,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 45, 40,237, 63, 19, 29,252, 63, 41,235, 38, 63, 28,140,141, 63, 38,102,113, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,113, 63, 19, 98,219, 63, 34,225,192, 63, 28,140,142, 63, 31,163,245, - 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, - 63, 31,163,245, 63, 19, 29,253, 63, 28,148,223, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 28,148,223, 63, 9,152, 94, 63, 32, 0, 2, 62,255,252, 24, 63, 35, 17,235, 63, 9,150,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 63, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, - 63, 32, 0, 2, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 0, 2, - 62,255,252, 24, 63, 28,148,223, 63, 9,152, 94, 63, 25,153,155, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,107,129,188, 62,128, 45, 66, 63, 99, 71,235, 62,120, 76,222, 63,106, 37, 94, 62, 83, 97, 84, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,106, 37, 94, 62, 83, 97, 84, 63,115, 51, 65, - 62, 97,151,248, 63,107,129,188, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 65, 62,135, 83,151, 63,107,129,188, 62,128, 45, 66, 63,115, 51, 65, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 97,151,248, 63,106, 37, 94, 62, 83, 97, 84, 63,115, 51, 65, - 62, 52,111, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,107,129,188, 62,128, 45, 66, - 63,115, 51, 65, 62,135, 83,151, 63,108,123,142, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,108,123,142, 62,151,144,169, 63,101, 50,231, 62,146,201, 17, 63,107,129,188, 62,128, 45, 66, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 71,235, 62,120, 76,222, 63,107,129,188, 62,128, 45, 66, - 63,101, 50,231, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 50,231, - 62,146,201, 17, 63,108,123,142, 62,151,144,169, 63,102,187,106, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 56, 71, 62,166,190, 99, 63, 89,153,149, 62,165,199,201, 63, 93,238, 22, 62,144,101,243, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93,238, 22, 62,144,101,243, 63,101, 50,231, - 62,146,201, 17, 63, 96, 56, 71, 62,166,190, 99, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,102,187,106, 62,169,150, 54, 63, 96, 56, 71, 62,166,190, 99, 63,101, 50,231, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 50,231, 62,146,201, 17, 63, 93,238, 22, 62,144,101,243, 63, 99, 71,235, - 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 21,249, 62,174, 54, 65, - 63,102,187,106, 62,169,150, 54, 63,108,123,142, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,108,123,142, 62,151,144,169, 63,115, 51, 65, 62,157,231, 93, 63,109, 21,249, 62,174, 54, 65, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,180,111,160, 63,109, 21,249, 62,174, 54, 65, - 63,115, 51, 65, 62,157,231, 93, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, - 62,157,231, 93, 63,108,123,142, 62,151,144,169, 63,115, 51, 65, 62,135, 83,151, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,115,162, 79, 63, 99, 71,235, 62,120, 76,222, 63, 93,238, 22, 62,144,101,243, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93,238, 22, 62,144,101,243, 63, 85, 69, 21, - 62,144,102, 3, 63, 89,153,149, 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 79,235, 68, 62,120, 77, 37, 63, 89,153,149, 62,115,162, 79, 63, 85, 69, 21, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 85, 69, 21, 62,144,102, 3, 63, 93,238, 22, 62,144,101,243, 63, 89,153,149, - 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,115,162, 79, - 63, 79,235, 68, 62,120, 77, 37, 63, 83,186, 24, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 83,186, 24, 62, 70,176,245, 63, 95,121, 22, 62, 70,176,204, 63, 89,153,149, 62,115,162, 79, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 71,235, 62,120, 76,222, 63, 89,153,149, 62,115,162, 79, - 63, 95,121, 22, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,121, 22, - 62, 70,176,204, 63, 83,186, 24, 62, 70,176,245, 63, 89,153,152, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,103,119, 61, 62, 30,253,179, 63,115, 51, 65, 62, 52,111, 90, 63,106, 37, 94, 62, 83, 97, 84, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,106, 37, 94, 62, 83, 97, 84, 63, 95,121, 22, - 62, 70,176,204, 63,103,119, 61, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,152, 62, 23, 31,198, 63,103,119, 61, 62, 30,253,179, 63, 95,121, 22, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,121, 22, 62, 70,176,204, 63,106, 37, 94, 62, 83, 97, 84, 63, 99, 71,235, - 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,187,248, 62, 30,253,241, - 63, 89,153,152, 62, 23, 31,198, 63, 83,186, 24, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 83,186, 24, 62, 70,176,245, 63, 73, 13,214, 62, 83, 97,181, 63, 75,187,248, 62, 30,253,241, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 52,111,202, 63, 75,187,248, 62, 30,253,241, - 63, 73, 13,214, 62, 83, 97,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73, 13,214, - 62, 83, 97,181, 63, 83,186, 24, 62, 70,176,245, 63, 79,235, 68, 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,152, 61,147, 41,111, 63, 64, 0, 0, 61,180,111,195, 63, 64, 0, 0, 61, 52, 65,111, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61, 52, 65,111, 63,117, 49, 38, - 61, 52, 64,225, 63, 89,153,152, 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,115, 51, 65, 61,180,111, 83, 63, 89,153,152, 61,147, 41,111, 63,117, 49, 38, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,117, 49, 38, 61, 52, 64,225, 63, 64, 0, 0, 61, 52, 65,111, 63,121,222,208, -178,239, 9,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,152, 61,147, 41,111, - 63,115, 51, 65, 61,180,111, 83, 63, 99, 51,172, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 99, 51,172, 61,231, 46, 48, 63, 79,255,135, 61,231, 46,120, 63, 89,153,152, 61,147, 41,111, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61,180,111,195, 63, 89,153,152, 61,147, 41,111, - 63, 79,255,135, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,255,135, - 61,231, 46,120, 63, 99, 51,172, 61,231, 46, 48, 63, 89,153,152, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,187,248, 62, 30,253,241, 63, 64, 0, 0, 62, 52,111,202, 63, 64, 0, 0, 62, 7, 71, 24, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 7, 71, 24, 63, 79,255,135, - 61,231, 46,120, 63, 75,187,248, 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 89,153,152, 62, 23, 31,198, 63, 75,187,248, 62, 30,253,241, 63, 79,255,135, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,255,135, 61,231, 46,120, 63, 64, 0, 0, 62, 7, 71, 24, 63, 64, 0, 0, - 61,180,111,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,103,119, 61, 62, 30,253,179, - 63, 89,153,152, 62, 23, 31,198, 63, 99, 51,172, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 99, 51,172, 61,231, 46, 48, 63,115, 51, 66, 62, 7, 70,199, 63,103,119, 61, 62, 30,253,179, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 52,111, 90, 63,103,119, 61, 62, 30,253,179, - 63,115, 51, 66, 62, 7, 70,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 66, - 62, 7, 70,199, 63, 99, 51,172, 61,231, 46, 48, 63,115, 51, 65, 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 71,177,122, 62,128, 45,120, 63, 64, 0, 0, 62,135, 83,218, 63, 64, 0, 0, 62, 97,152,115, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 97,152,115, 63, 73, 13,214, - 62, 83, 97,181, 63, 71,177,122, 62,128, 45,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 79,235, 68, 62,120, 77, 37, 63, 71,177,122, 62,128, 45,120, 63, 73, 13,214, 62, 83, 97,181, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73, 13,214, 62, 83, 97,181, 63, 64, 0, 0, 62, 97,152,115, 63, 64, 0, 0, - 62, 52,111,202, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 71,177,122, 62,128, 45,120, - 63, 79,235, 68, 62,120, 77, 37, 63, 78, 0, 72, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 78, 0, 72, 62,146,201, 52, 63, 70,183,169, 62,151,144,219, 63, 71,177,122, 62,128, 45,120, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,135, 83,218, 63, 71,177,122, 62,128, 45,120, - 63, 70,183,169, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,183,169, - 62,151,144,219, 63, 78, 0, 72, 62,146,201, 52, 63, 76,119,198, 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 70, 29, 61, 62,174, 54,114, 63, 64, 0, 0, 62,180,111,211, 63, 64, 0, 0, 62,157,231,162, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,157,231,162, 63, 70,183,169, - 62,151,144,219, 63, 70, 29, 61, 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 76,119,198, 62,169,150, 90, 63, 70, 29, 61, 62,174, 54,114, 63, 70,183,169, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,183,169, 62,151,144,219, 63, 64, 0, 0, 62,157,231,162, 63, 64, 0, 0, - 62,135, 83,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,250,230, 62,166,190,117, - 63, 76,119,198, 62,169,150, 90, 63, 78, 0, 72, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 78, 0, 72, 62,146,201, 52, 63, 85, 69, 21, 62,144,102, 3, 63, 82,250,230, 62,166,190,117, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,165,199,201, 63, 82,250,230, 62,166,190,117, - 63, 85, 69, 21, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 85, 69, 21, - 62,144,102, 3, 63, 78, 0, 72, 62,146,201, 52, 63, 79,235, 68, 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,245,167,179, 62,128, 45, 72, 61,179,217, 94, 62,120, 76,222, 61,234,196,202, 62, 83, 97,100, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,234,196,202, 62, 83, 97,100, 62, 25,153,212, - 62, 97,152, 2, 61,245,167,179, 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,214, 62,135, 83,156, 61,245,167,179, 62,128, 45, 72, 62, 25,153,212, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,212, 62, 97,152, 2, 61,234,196,202, 62, 83, 97,100, 62, 25,153,214, - 62, 52,111,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,245,167,179, 62,128, 45, 72, - 62, 25,153,214, 62,135, 83,156, 61,253,118, 62, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,253,118, 62, 62,151,144,174, 61,195, 49, 53, 62,146,201, 17, 61,245,167,179, 62,128, 45, 72, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,179,217, 94, 62,120, 76,222, 61,245,167,179, 62,128, 45, 72, - 61,195, 49, 53, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,195, 49, 53, - 62,146,201, 17, 61,253,118, 62, 62,151,144,174, 61,207,117, 70, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,155, 92, 79, 62,166,190, 91, 61, 76,205,194, 62,165,199,186, 61,137, 10,212, 62,144,101,238, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,137, 10,212, 62,144,101,238, 61,195, 49, 53, - 62,146,201, 17, 61,155, 92, 79, 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61,207,117, 70, 62,169,150, 54, 61,155, 92, 79, 62,166,190, 91, 61,195, 49, 53, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,195, 49, 53, 62,146,201, 17, 61,137, 10,212, 62,144,101,238, 61,179,217, 94, - 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 1, 36,204, 62,174, 54, 70, - 61,207,117, 70, 62,169,150, 54, 61,253,118, 62, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,253,118, 62, 62,151,144,174, 62, 25,153,213, 62,157,231,100, 62, 1, 36,204, 62,174, 54, 70, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,180,111,165, 62, 1, 36,204, 62,174, 54, 70, - 62, 25,153,213, 62,157,231,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,213, - 62,157,231,100, 61,253,118, 62, 62,151,144,174, 62, 25,153,214, 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,188, 62,115,162, 53, 61,179,217, 94, 62,120, 76,222, 61,137, 10,212, 62,144,101,238, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,137, 10,212, 62,144,101,238, 61, 7,133,207, - 62,144,101,236, 61, 76,205,188, 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 60, 71,162,255, 62,120, 76,216, 61, 76,205,188, 62,115,162, 53, 61, 7,133,207, 62,144,101,236, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 7,133,207, 62,144,101,236, 61,137, 10,212, 62,144,101,238, 61, 76,205,194, - 62,165,199,186, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,188, 62,115,162, 53, - 60, 71,162,255, 62,120, 76,216, 60,221,171,190, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 60,221,171,190, 62, 70,176,194, 61,149, 98,194, 62, 70,176,194, 61, 76,205,188, 62,115,162, 53, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,179,217, 94, 62,120, 76,222, 61, 76,205,188, 62,115,162, 53, - 61,149, 98,194, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,149, 98,194, - 62, 70,176,194, 60,221,171,190, 62, 70,176,194, 61, 76,205,193, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 61,213, 83,198, 62, 30,253,179, 62, 25,153,214, 62, 52,111,106, 61,234,196,202, 62, 83, 97,100, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,234,196,202, 62, 83, 97,100, 61,149, 98,194, - 62, 70,176,194, 61,213, 83,198, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 61, 76,205,193, 62, 23, 31,168, 61,213, 83,198, 62, 30,253,179, 61,149, 98,194, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,149, 98,194, 62, 70,176,194, 61,234,196,202, 62, 83, 97,100, 61,179,217, 94, - 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,239, 59, 62, 30,253,174, - 63,131,105,154, 62, 23, 31,168, 63,131,118,175, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,131,118,175, 62, 70,176,194, 63,124, 65, 30, 62, 83, 97, 90, 63,126,239, 59, 62, 30,253,174, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 52,111, 90, 63,126,239, 59, 62, 30,253,174, - 63,124, 65, 30, 62, 83, 97, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124, 65, 30, - 62, 83, 97, 90, 63,131,118,175, 62, 70,176,194, 63,129,143, 70, 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,131,105,156, 61,147, 41,101, 63,115, 51, 65, 61,180,111, 83, 63,117, 49, 38, 61, 52, 64,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,117, 49, 38, 61, 52, 64,225, 63,135,148,232, - 60,125,158,144, 63,131,105,156, 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 25,153,215, 61,180,111,104, 61,128,245,122, 61,147, 41,101, 62, 25,153,224, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,135,148,232, 60,125,158,144, 63,117, 49, 38, 61, 52, 64,225, 63,121,222,208, -178,239, 9,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,128,245,122, 61,147, 41,101, - 62, 25,153,215, 61,180,111,104, 61,179, 55, 89, 61,231, 46, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,179, 55, 89, 61,231, 46, 38, 60,208,147, 96, 61,231, 46, 48, 61,128,245,122, 61,147, 41,101, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 61,180,111, 83, 63,131,105,156, 61,147, 41,101, - 63,129,153,102, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,208,147, 96, - 61,231, 46, 48, 61,179, 55, 89, 61,231, 46, 38, 61, 76,205,193, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,126,239, 59, 62, 30,253,174, 63,115, 51, 65, 62, 52,111, 90, 63,115, 51, 66, 62, 7, 70,199, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 66, 62, 7, 70,199, 63,129,153,102, - 61,231, 46, 48, 63,126,239, 59, 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,131,105,154, 62, 23, 31,168, 63,126,239, 59, 62, 30,253,174, 63,129,153,102, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,153,102, 61,231, 46, 48, 63,115, 51, 66, 62, 7, 70,199, 63,115, 51, 65, - 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,213, 83,198, 62, 30,253,179, - 61, 76,205,193, 62, 23, 31,168, 61,179, 55, 89, 61,231, 46, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 61,179, 55, 89, 61,231, 46, 38, 62, 25,153,217, 62, 7, 70,204, 61,213, 83,198, 62, 30,253,179, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62, 52,111,106, 61,213, 83,198, 62, 30,253,179, - 62, 25,153,217, 62, 7, 70,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,217, - 62, 7, 70,204, 61,179, 55, 89, 61,231, 46, 38, 62, 25,153,215, 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,122,228,192, 62,128, 45, 66, 63,115, 51, 65, 62,135, 83,151, 63,115, 51, 65, 62, 97,151,248, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 97,151,248, 63,124, 65, 30, - 62, 83, 97, 90, 63,122,228,192, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,129,143, 70, 62,120, 76,216, 63,122,228,192, 62,128, 45, 66, 63,124, 65, 30, 62, 83, 97, 90, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124, 65, 30, 62, 83, 97, 90, 63,115, 51, 65, 62, 97,151,248, 63,115, 51, 65, - 62, 52,111, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,122,228,192, 62,128, 45, 66, - 63,129,143, 70, 62,120, 76,216, 63,128,153,201, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63,128,153,201, 62,146,201, 14, 63,121,234,239, 62,151,144,169, 63,122,228,192, 62,128, 45, 66, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,135, 83,151, 63,122,228,192, 62,128, 45, 66, - 63,121,234,239, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,234,239, - 62,151,144,169, 63,128,153,201, 62,146,201, 14, 63,127,171, 15, 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 80,133, 62,174, 54, 65, 63,115, 51, 65, 62,180,111,160, 63,115, 51, 65, 62,157,231, 93, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,157,231, 93, 63,121,234,239, - 62,151,144,169, 63,121, 80,133, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63,127,171, 15, 62,169,150, 52, 63,121, 80,133, 62,174, 54, 65, 63,121,234,239, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,234,239, 62,151,144,169, 63,115, 51, 65, 62,157,231, 93, 63,115, 51, 65, - 62,135, 83,151, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131, 23, 23, 62,166,190, 89, - 63,127,171, 15, 62,169,150, 52, 63,128,153,201, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 59,153,200,136, 62,146,201, 14, 61, 7,133,207, 62,144,101,236, 60,197,197,195, 62,166,190, 89, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,194, 62,165,199,186, 60,197,197,195, 62,166,190, 89, - 61, 7,133,207, 62,144,101,236, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 7,133,207, - 62,144,101,236, 59,153,200,136, 62,146,201, 14, 60, 71,162,255, 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,163,208, 32, 62,128, 45, 79, 62,147, 92,147, 62,120, 76,252, 62,161, 23,102, 62, 83, 97,115, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,161, 23,102, 62, 83, 97,115, 62,179, 51, 22, - 62, 97,152, 2, 62,163,208, 32, 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 21, 62,135, 83,156, 62,163,208, 32, 62,128, 45, 79, 62,179, 51, 22, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 22, 62, 97,152, 2, 62,161, 23,102, 62, 83, 97,115, 62,179, 51, 21, - 62, 52,111,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,163,208, 32, 62,128, 45, 79, - 62,179, 51, 21, 62,135, 83,156, 62,165,195,194, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,165,195,194, 62,151,144,181, 62,151, 50,134, 62,146,201, 29, 62,163,208, 32, 62,128, 45, 79, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 92,147, 62,120, 76,252, 62,163,208, 32, 62,128, 45, 79, - 62,151, 50,134, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151, 50,134, - 62,146,201, 29, 62,165,195,194, 62,151,144,181, 62,154, 67,137, 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,141, 61, 82, 62,166,190,112, 62,128, 0, 0, 62,165,199,206, 62,136,168,247, 62,144,102, 3, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,136,168,247, 62,144,102, 3, 62,151, 50,134, - 62,146,201, 29, 62,141, 61, 82, 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,154, 67,137, 62,169,150, 70, 62,141, 61, 82, 62,166,190,112, 62,151, 50,134, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151, 50,134, 62,146,201, 29, 62,136,168,247, 62,144,102, 3, 62,147, 92,147, - 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,166,248,150, 62,174, 54, 78, - 62,154, 67,137, 62,169,150, 70, 62,165,195,194, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,165,195,194, 62,151,144,181, 62,179, 51, 21, 62,157,231, 98, 62,166,248,150, 62,174, 54, 78, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,180,111,165, 62,166,248,150, 62,174, 54, 78, - 62,179, 51, 21, 62,157,231, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, - 62,157,231, 98, 62,165,195,194, 62,151,144,181, 62,179, 51, 21, 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,115,162, 89, 62,147, 92,147, 62,120, 76,252, 62,136,168,247, 62,144,102, 3, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,136,168,247, 62,144,102, 3, 62,110,174, 18, - 62,144,102, 3, 62,128, 0, 0, 62,115,162, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 89, 70,217, 62,120, 76,252, 62,128, 0, 0, 62,115,162, 89, 62,110,174, 18, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,110,174, 18, 62,144,102, 3, 62,136,168,247, 62,144,102, 3, 62,128, 0, 0, - 62,165,199,206, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,115,162, 89, - 62, 89, 70,217, 62,120, 76,252, 62,104,130, 30, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,104,130, 30, 62, 70,176,230, 62,139,190,241, 62, 70,176,230, 62,128, 0, 0, 62,115,162, 89, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 92,147, 62,120, 76,252, 62,128, 0, 0, 62,115,162, 89, - 62,139,190,241, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,139,190,241, - 62, 70,176,230, 62,104,130, 30, 62, 70,176,230, 62,128, 0, 0, 62, 23, 31,208, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,155,187, 41, 62, 30,253,205, 62,179, 51, 21, 62, 52,111,101, 62,161, 23,102, 62, 83, 97,115, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,161, 23,102, 62, 83, 97,115, 62,139,190,241, - 62, 70,176,230, 62,155,187, 41, 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 62, 23, 31,208, 62,155,187, 41, 62, 30,253,205, 62,139,190,241, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,139,190,241, 62, 70,176,230, 62,161, 23,102, 62, 83, 97,115, 62,147, 92,147, - 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 72,137,174, 62, 30,253,205, - 62,128, 0, 0, 62, 23, 31,208, 62,104,130, 30, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,104,130, 30, 62, 70,176,230, 62, 61,209, 51, 62, 83, 97,115, 62, 72,137,174, 62, 30,253,205, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62, 52,111,106, 62, 72,137,174, 62, 30,253,205, - 62, 61,209, 51, 62, 83, 97,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 61,209, 51, - 62, 83, 97,115, 62,104,130, 30, 62, 70,176,230, 62, 89, 70,217, 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,127,255,255, 61,147, 41,141, 62, 25,153,215, 61,180,111,104, 62, 25,153,224, 61, 52, 64,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,224, 61, 52, 64,225, 62,179, 51, 15, - 61, 52, 64,225, 62,127,255,255, 61,147, 41,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,179, 51, 20, 61,180,111,104, 62,127,255,255, 61,147, 41,141, 62,179, 51, 15, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 15, 61, 52, 64,225, 62, 25,153,224, 61, 52, 64,225, 62,161,175,144, -178,239, 9,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,127,255,255, 61,147, 41,141, - 62,179, 51, 20, 61,180,111,104, 62,147, 52, 12, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,147, 52, 12, 61,231, 46,109, 62, 89,151,231, 61,231, 46,109, 62,127,255,255, 61,147, 41,141, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,215, 61,180,111,104, 62,127,255,255, 61,147, 41,141, - 62, 89,151,231, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 89,151,231, - 61,231, 46,109, 62,147, 52, 12, 61,231, 46,109, 62,128, 0, 0, 62, 23, 31,208, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 72,137,174, 62, 30,253,205, 62, 25,153,214, 62, 52,111,106, 62, 25,153,217, 62, 7, 70,204, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,217, 62, 7, 70,204, 62, 89,151,231, - 61,231, 46,109, 62, 72,137,174, 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,128, 0, 0, 62, 23, 31,208, 62, 72,137,174, 62, 30,253,205, 62, 89,151,231, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 89,151,231, 61,231, 46,109, 62, 25,153,217, 62, 7, 70,204, 62, 25,153,215, - 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,155,187, 41, 62, 30,253,205, - 62,128, 0, 0, 62, 23, 31,208, 62,147, 52, 12, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,147, 52, 12, 61,231, 46,109, 62,179, 51, 19, 62, 7, 70,204, 62,155,187, 41, 62, 30,253,205, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62, 52,111,101, 62,155,187, 41, 62, 30,253,205, - 62,179, 51, 19, 62, 7, 70,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 19, - 62, 7, 70,204, 62,147, 52, 12, 61,231, 46,109, 62,179, 51, 20, 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 56, 95,192, 62,128, 45, 79, 62, 25,153,214, 62,135, 83,156, 62, 25,153,212, 62, 97,152, 2, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,212, 62, 97,152, 2, 62, 61,209, 51, - 62, 83, 97,115, 62, 56, 95,192, 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 89, 70,217, 62,120, 76,252, 62, 56, 95,192, 62,128, 45, 79, 62, 61,209, 51, 62, 83, 97,115, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 61,209, 51, 62, 83, 97,115, 62, 25,153,212, 62, 97,152, 2, 62, 25,153,214, - 62, 52,111,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 56, 95,192, 62,128, 45, 79, - 62, 89, 70,217, 62,120, 76,252, 62, 81,154,245, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 81,154,245, 62,146,201, 29, 62, 52,120,125, 62,151,144,181, 62, 56, 95,192, 62,128, 45, 79, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,135, 83,156, 62, 56, 95,192, 62,128, 45, 79, - 62, 52,120,125, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,120,125, - 62,151,144,181, 62, 81,154,245, 62,146,201, 29, 62, 75,120,239, 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62, 50, 14,213, 62,174, 54, 78, 62, 25,153,214, 62,180,111,165, 62, 25,153,213, 62,157,231,100, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,213, 62,157,231,100, 62, 52,120,125, - 62,151,144,181, 62, 50, 14,213, 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62, 75,120,239, 62,169,150, 70, 62, 50, 14,213, 62,174, 54, 78, 62, 52,120,125, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,120,125, 62,151,144,181, 62, 25,153,213, 62,157,231,100, 62, 25,153,214, - 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101,133, 91, 62,166,190,112, - 62, 75,120,239, 62,169,150, 70, 62, 81,154,245, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62, 81,154,245, 62,146,201, 29, 62,110,174, 18, 62,144,102, 3, 62,101,133, 91, 62,166,190,112, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,165,199,206, 62,101,133, 91, 62,166,190,112, - 62,110,174, 18, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,110,174, 18, - 62,144,102, 3, 62, 81,154,245, 62,146,201, 29, 62, 89, 70,217, 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 5, 27, 64, 62,128, 45, 66, 62,249,194,232, 62,120, 76,216, 63, 3,190,226, 62, 83, 97, 90, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3,190,226, 62, 83, 97, 90, 63, 12,204,191, - 62, 97,151,248, 63, 5, 27, 64, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,191, 62,135, 83,149, 63, 5, 27, 64, 62,128, 45, 66, 63, 12,204,191, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 97,151,248, 63, 3,190,226, 62, 83, 97, 90, 63, 12,204,191, - 62, 52,111, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 5, 27, 64, 62,128, 45, 66, - 63, 12,204,191, 62,135, 83,149, 63, 6, 21, 17, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 6, 21, 17, 62,151,144,169, 62,253,152,222, 62,146,201, 14, 63, 5, 27, 64, 62,128, 45, 66, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249,194,232, 62,120, 76,216, 63, 5, 27, 64, 62,128, 45, 66, - 62,253,152,222, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,152,222, - 62,146,201, 14, 63, 6, 21, 17, 62,151,144,169, 63, 0, 84,241, 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,243,163,164, 62,166,190, 89, 62,230,102, 72, 62,165,199,183, 62,239, 15, 70, 62,144,101,233, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,239, 15, 70, 62,144,101,233, 62,253,152,222, - 62,146,201, 14, 62,243,163,164, 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 0, 84,241, 62,169,150, 52, 62,243,163,164, 62,166,190, 89, 62,253,152,222, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,152,222, 62,146,201, 14, 62,239, 15, 70, 62,144,101,233, 62,249,194,232, - 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,175,123, 62,174, 54, 65, - 63, 0, 84,241, 62,169,150, 52, 63, 6, 21, 17, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 6, 21, 17, 62,151,144,169, 63, 12,204,191, 62,157,231, 90, 63, 6,175,123, 62,174, 54, 65, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,180,111,160, 63, 6,175,123, 62,174, 54, 65, - 63, 12,204,191, 62,157,231, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, - 62,157,231, 90, 63, 6, 21, 17, 62,151,144,169, 63, 12,204,191, 62,135, 83,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,115,162, 53, 62,249,194,232, 62,120, 76,216, 62,239, 15, 70, 62,144,101,233, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,239, 15, 70, 62,144,101,233, 62,221,189, 75, - 62,144,101,238, 62,230,102, 72, 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,211, 9,168, 62,120, 76,222, 62,230,102, 72, 62,115,162, 53, 62,221,189, 75, 62,144,101,238, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,221,189, 75, 62,144,101,238, 62,239, 15, 70, 62,144,101,233, 62,230,102, 72, - 62,165,199,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,115,162, 53, - 62,211, 9,168, 62,120, 76,222, 62,218,167, 80, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,218,167, 80, 62, 70,176,194, 62,242, 37, 68, 62, 70,176,194, 62,230,102, 72, 62,115,162, 53, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249,194,232, 62,120, 76,216, 62,230,102, 72, 62,115,162, 53, - 62,242, 37, 68, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,242, 37, 68, - 62, 70,176,194, 62,218,167, 80, 62, 70,176,194, 62,230,102, 72, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 16,197, 62, 30,253,174, 63, 12,204,191, 62, 52,111, 90, 63, 3,190,226, 62, 83, 97, 90, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3,190,226, 62, 83, 97, 90, 62,242, 37, 68, - 62, 70,176,194, 63, 1, 16,197, 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102, 72, 62, 23, 31,168, 63, 1, 16,197, 62, 30,253,174, 62,242, 37, 68, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,242, 37, 68, 62, 70,176,194, 63, 3,190,226, 62, 83, 97, 90, 62,249,194,232, - 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,171, 14, 62, 30,253,179, - 62,230,102, 72, 62, 23, 31,168, 62,218,167, 80, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,218,167, 80, 62, 70,176,194, 62,197, 78,205, 62, 83, 97, 95, 62,202,171, 14, 62, 30,253,179, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62, 52,111,101, 62,202,171, 14, 62, 30,253,179, - 62,197, 78,205, 62, 83, 97, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,197, 78,205, - 62, 83, 97, 95, 62,218,167, 80, 62, 70,176,194, 62,211, 9,168, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 63, 61,147, 41,101, 62,179, 51, 20, 61,180,111,104, 62,179, 51, 15, 61, 52, 64,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 15, 61, 52, 64,225, 63, 12,204,189, - 61, 52, 64,225, 62,230,102, 63, 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 12,204,191, 61,180,111, 83, 62,230,102, 63, 61,147, 41,101, 63, 12,204,189, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,189, 61, 52, 64,225, 62,179, 51, 15, 61, 52, 64,225, 62,161,175,144, -178,239, 9,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 63, 61,147, 41,101, - 63, 12,204,191, 61,180,111, 83, 62,249,154,104, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,249,154,104, 61,231, 46, 48, 62,211, 50, 42, 61,231, 46, 48, 62,230,102, 63, 61,147, 41,101, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 20, 61,180,111,104, 62,230,102, 63, 61,147, 41,101, - 62,211, 50, 42, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211, 50, 42, - 61,231, 46, 48, 62,249,154,104, 61,231, 46, 48, 62,230,102, 72, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,202,171, 14, 62, 30,253,179, 62,179, 51, 21, 62, 52,111,101, 62,179, 51, 19, 62, 7, 70,204, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 19, 62, 7, 70,204, 62,211, 50, 42, - 61,231, 46, 48, 62,202,171, 14, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,230,102, 72, 62, 23, 31,168, 62,202,171, 14, 62, 30,253,179, 62,211, 50, 42, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211, 50, 42, 61,231, 46, 48, 62,179, 51, 19, 62, 7, 70,204, 62,179, 51, 20, - 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 16,197, 62, 30,253,174, - 62,230,102, 72, 62, 23, 31,168, 62,249,154,104, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,249,154,104, 61,231, 46, 48, 63, 12,204,191, 62, 7, 70,199, 63, 1, 16,197, 62, 30,253,174, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 52,111, 90, 63, 1, 16,197, 62, 30,253,174, - 63, 12,204,191, 62, 7, 70,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, - 62, 7, 70,199, 62,249,154,104, 61,231, 46, 48, 63, 12,204,191, 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,194,150, 19, 62,128, 45, 72, 62,179, 51, 21, 62,135, 83,156, 62,179, 51, 22, 62, 97,152, 2, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 22, 62, 97,152, 2, 62,197, 78,205, - 62, 83, 97, 95, 62,194,150, 19, 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,211, 9,168, 62,120, 76,222, 62,194,150, 19, 62,128, 45, 72, 62,197, 78,205, 62, 83, 97, 95, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,197, 78,205, 62, 83, 97, 95, 62,179, 51, 22, 62, 97,152, 2, 62,179, 51, 21, - 62, 52,111,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,194,150, 19, 62,128, 45, 72, - 62,211, 9,168, 62,120, 76,222, 62,207, 51,179, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,207, 51,179, 62,146,201, 17, 62,192,162,113, 62,151,144,174, 62,194,150, 19, 62,128, 45, 72, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,135, 83,156, 62,194,150, 19, 62,128, 45, 72, - 62,192,162,113, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,162,113, - 62,151,144,174, 62,207, 51,179, 62,146,201, 17, 62,204, 34,175, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 62,191,109,154, 62,174, 54, 68, 62,179, 51, 21, 62,180,111,165, 62,179, 51, 21, 62,157,231, 98, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,157,231, 98, 62,192,162,113, - 62,151,144,174, 62,191,109,154, 62,174, 54, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 62,204, 34,175, 62,169,150, 54, 62,191,109,154, 62,174, 54, 68, 62,192,162,113, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,162,113, 62,151,144,174, 62,179, 51, 21, 62,157,231, 98, 62,179, 51, 21, - 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217, 40,237, 62,166,190, 91, - 62,204, 34,175, 62,169,150, 54, 62,207, 51,179, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 62,207, 51,179, 62,146,201, 17, 62,221,189, 75, 62,144,101,238, 62,217, 40,237, 62,166,190, 91, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,165,199,183, 62,217, 40,237, 62,166,190, 91, - 62,221,189, 75, 62,144,101,238, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,221,189, 75, - 62,144,101,238, 62,207, 51,179, 62,146,201, 17, 62,211, 9,168, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 56, 78,134, 62,128, 45,117, 63, 48, 20,188, 62,120, 77, 37, 63, 54,242, 42, 62, 83, 97,181, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,242, 42, 62, 83, 97,181, 63, 64, 0, 0, - 62, 97,152,115, 63, 56, 78,134, 62,128, 45,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 62,135, 83,218, 63, 56, 78,134, 62,128, 45,117, 63, 64, 0, 0, 62, 97,152,115, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 97,152,115, 63, 54,242, 42, 62, 83, 97,181, 63, 64, 0, 0, - 62, 52,111,202, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 56, 78,134, 62,128, 45,117, - 63, 64, 0, 0, 62,135, 83,218, 63, 57, 72, 87, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 57, 72, 87, 62,151,144,219, 63, 49,255,184, 62,146,201, 52, 63, 56, 78,134, 62,128, 45,117, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 20,188, 62,120, 77, 37, 63, 56, 78,134, 62,128, 45,117, - 63, 49,255,184, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 49,255,184, - 62,146,201, 52, 63, 57, 72, 87, 62,151,144,219, 63, 51,136, 58, 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 5, 26, 62,166,190,117, 63, 38,102,107, 62,165,199,201, 63, 42,186,235, 62,144,102, 5, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42,186,235, 62,144,102, 5, 63, 49,255,184, - 62,146,201, 52, 63, 45, 5, 26, 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 51,136, 58, 62,169,150, 90, 63, 45, 5, 26, 62,166,190,117, 63, 49,255,184, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 49,255,184, 62,146,201, 52, 63, 42,186,235, 62,144,102, 5, 63, 48, 20,188, - 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,226,196, 62,174, 54,114, - 63, 51,136, 58, 62,169,150, 90, 63, 57, 72, 87, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 57, 72, 87, 62,151,144,219, 63, 64, 0, 0, 62,157,231,162, 63, 57,226,196, 62,174, 54,114, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,180,111,211, 63, 57,226,196, 62,174, 54,114, - 63, 64, 0, 0, 62,157,231,162, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, - 62,157,231,162, 63, 57, 72, 87, 62,151,144,219, 63, 64, 0, 0, 62,135, 83,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,115,162, 79, 63, 48, 20,188, 62,120, 77, 37, 63, 42,186,235, 62,144,102, 5, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42,186,235, 62,144,102, 5, 63, 34, 17,234, - 62,144,101,243, 63, 38,102,107, 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 28,184, 21, 62,120, 76,222, 63, 38,102,107, 62,115,162, 79, 63, 34, 17,234, 62,144,101,243, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34, 17,234, 62,144,101,243, 63, 42,186,235, 62,144,102, 5, 63, 38,102,107, - 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,115,162, 79, - 63, 28,184, 21, 62,120, 76,222, 63, 32,134,234, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 32,134,234, 62, 70,176,204, 63, 44, 69,233, 62, 70,176,245, 63, 38,102,107, 62,115,162, 79, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 20,188, 62,120, 77, 37, 63, 38,102,107, 62,115,162, 79, - 63, 44, 69,233, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44, 69,233, - 62, 70,176,245, 63, 32,134,234, 62, 70,176,204, 63, 38,102,104, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 52, 68, 9, 62, 30,253,241, 63, 64, 0, 0, 62, 52,111,202, 63, 54,242, 42, 62, 83, 97,181, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,242, 42, 62, 83, 97,181, 63, 44, 69,233, - 62, 70,176,245, 63, 52, 68, 9, 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,104, 62, 23, 31,198, 63, 52, 68, 9, 62, 30,253,241, 63, 44, 69,233, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44, 69,233, 62, 70,176,245, 63, 54,242, 42, 62, 83, 97,181, 63, 48, 20,188, - 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,136,195, 62, 30,253,179, - 63, 38,102,104, 62, 23, 31,198, 63, 32,134,234, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 32,134,234, 62, 70,176,204, 63, 21,218,162, 62, 83, 97, 84, 63, 24,136,195, 62, 30,253,179, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 52,111, 90, 63, 24,136,195, 62, 30,253,179, - 63, 21,218,162, 62, 83, 97, 84, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 21,218,162, - 62, 83, 97, 84, 63, 32,134,234, 62, 70,176,204, 63, 28,184, 21, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,104, 61,147, 41,111, 63, 12,204,191, 61,180,111, 83, 63, 12,204,189, 61, 52, 64,225, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,189, 61, 52, 64,225, 63, 64, 0, 0, - 61, 52, 65,111, 63, 38,102,104, 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 64, 0, 0, 61,180,111,195, 63, 38,102,104, 61,147, 41,111, 63, 64, 0, 0, 61, 52, 65,111, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61, 52, 65,111, 63, 12,204,189, 61, 52, 64,225, 63,121,222,208, -178,239, 9,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,104, 61,147, 41,111, - 63, 64, 0, 0, 61,180,111,195, 63, 48, 0,122, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 48, 0,122, 61,231, 46,120, 63, 28,204, 85, 61,231, 46, 48, 63, 38,102,104, 61,147, 41,111, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 61,180,111, 83, 63, 38,102,104, 61,147, 41,111, - 63, 28,204, 85, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,204, 85, - 61,231, 46, 48, 63, 48, 0,122, 61,231, 46,120, 63, 38,102,104, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,136,195, 62, 30,253,179, 63, 12,204,191, 62, 52,111, 90, 63, 12,204,191, 62, 7, 70,199, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 7, 70,199, 63, 28,204, 85, - 61,231, 46, 48, 63, 24,136,195, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 38,102,104, 62, 23, 31,198, 63, 24,136,195, 62, 30,253,179, 63, 28,204, 85, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,204, 85, 61,231, 46, 48, 63, 12,204,191, 62, 7, 70,199, 63, 12,204,191, - 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 52, 68, 9, 62, 30,253,241, - 63, 38,102,104, 62, 23, 31,198, 63, 48, 0,122, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 48, 0,122, 61,231, 46,120, 63, 64, 0, 0, 62, 7, 71, 24, 63, 52, 68, 9, 62, 30,253,241, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 52,111,202, 63, 52, 68, 9, 62, 30,253,241, - 63, 64, 0, 0, 62, 7, 71, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, - 62, 7, 71, 24, 63, 48, 0,122, 61,231, 46,120, 63, 64, 0, 0, 61,180,111,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 20,126, 68, 62,128, 45, 64, 63, 12,204,191, 62,135, 83,149, 63, 12,204,191, 62, 97,151,248, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 97,151,248, 63, 21,218,162, - 62, 83, 97, 84, 63, 20,126, 68, 62,128, 45, 64, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 28,184, 21, 62,120, 76,222, 63, 20,126, 68, 62,128, 45, 64, 63, 21,218,162, 62, 83, 97, 84, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 21,218,162, 62, 83, 97, 84, 63, 12,204,191, 62, 97,151,248, 63, 12,204,191, - 62, 52,111, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 20,126, 68, 62,128, 45, 64, - 63, 28,184, 21, 62,120, 76,222, 63, 26,205, 25, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 26,205, 25, 62,146,201, 14, 63, 19,132,114, 62,151,144,169, 63, 20,126, 68, 62,128, 45, 64, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,135, 83,149, 63, 20,126, 68, 62,128, 45, 64, - 63, 19,132,114, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,132,114, - 62,151,144,169, 63, 26,205, 25, 62,146,201, 14, 63, 25, 68,150, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,234, 7, 62,174, 54, 65, 63, 12,204,191, 62,180,111,160, 63, 12,204,191, 62,157,231, 90, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,157,231, 90, 63, 19,132,114, - 62,151,144,169, 63, 18,234, 7, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 63, 25, 68,150, 62,169,150, 54, 63, 18,234, 7, 62,174, 54, 65, 63, 19,132,114, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,132,114, 62,151,144,169, 63, 12,204,191, 62,157,231, 90, 63, 12,204,191, - 62,135, 83,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,199,185, 62,166,190, 96, - 63, 25, 68,150, 62,169,150, 54, 63, 26,205, 25, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 63, 26,205, 25, 62,146,201, 14, 63, 34, 17,234, 62,144,101,243, 63, 31,199,185, 62,166,190, 96, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,165,199,201, 63, 31,199,185, 62,166,190, 96, - 63, 34, 17,234, 62,144,101,243, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34, 17,234, - 62,144,101,243, 63, 26,205, 25, 62,146,201, 14, 63, 28,184, 21, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 80, 0, 7,254, 48, 32, 0, 0, 0, 59, 0, 0, 20, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,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, 77, 69, - 0, 0, 1, 24, 8,195, 68, 96, 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 76, 48, 8,195, 62,112, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 69,112,114,101,118,105,101,119, 46, 48, 48, 50, 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, 8,195, 69,160, 8,195, 75, 80, - 8,195, 75,144, 0, 0, 0, 0, 8,195, 71, 80, 8,195, 73,112, 0, 0, 0, 0, 8,195, 75,240, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,195, 69,208, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 71,240, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 73,208, 0, 0, 0, 3, 0, 0, 0, 5, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,179,128, 0, 0, 52, 64, 0, 0,188,142, 92,235, 63,128, 0, 0, 63,128, 0, 2, 60,142, 92,235, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 69,160, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 94, 32, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 69,208, 0, 0, 1, 42, 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, 8,195, 71, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,120, 8,195, 71, 80, 0, 0, 0, 58, 0, 0, 0, 5, 65, 6,116, 0, - 63,127,255,254, 39,228,117, 42, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 65, 6,116, 0,191,127,255,254,167,177, 59, 43, - 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,193, 6,116, 0,191,127,255,250,167,228,117, 39, 0, 0, 0, 0,127,255, 3,255, - 0, 0, 0, 0,193, 6,115,252, 63,128, 0, 1, 39,177, 59, 49, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 59,110,239, 0, - 60, 26,164,131,189, 14, 92,235, 12,228, 33, 95,133, 28, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 71,240, - 0, 0, 1, 42, 0, 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, 8,195, 73,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 48, 8,195, 73,112, 0, 0, 0, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 73,208, 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 8,195, 75, 80, 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, 0, 85, 86, 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, 8,195, 75,144, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195, 75,240, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,195, 75, 80, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 0, 44, 8,195, 75,144, 0, 0, 0, 65, - 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 16, 8,195, 75,240, 0, 0, 0, 59, - 0, 0, 0, 4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 8,195, 76, 48, - 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 87, 96, 8,195, 68, 96, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101, -119, 46, 48, 48, 51, 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, 8,195, 77,112, 8,195, 84, 0, 8,195, 84,224, 0, 0, 0, 0, - 3,163,158, 32, 8,195, 80,160, 0, 0, 0, 0, 8,195, 86,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 77,160, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 79, 32, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 82,128, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 36, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,179,128, 0, 0, - 52, 64, 0, 0, 28,192, 0, 0, 63,128, 0, 0, 63,128, 0, 2, 55, 39,197,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 77,112, 0, 0, 0, 0, 0, 0, 0, 1, 3,161,102, 32, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 77,160, 0, 0, 1, 42, 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, 3,163,158, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 3, 96, 3,163,158, 32, 0, 0, 0, 58, 0, 0, 0, 36, 63,128, 0, 0, 63,127,255,255, 39,251,255,255, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,168, 2, 0, 0, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,191,128, 0, 1,191,127,255,253,167,251,255,253, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,127,255,250, - 63,128, 0, 3, 40, 2, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 63,250,113, 63,128, 3, 7, 48,113,201, 79, - 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0, 64, 63,250,114,191,127,249,242, 48,113,200,107, 0, 0, 0, 0,128, 1, 2,255, - 0, 0, 0, 0, 63,127,233,206,191,127,249,245, 48,113,200, 95, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0, 63,127,233,206, - 63,128, 3, 3, 48,113,201, 63, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,192, 63,235,185, 63,128, 9,197, 51,171, 82,138, - 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,192, 63,235,185,191,127,236,113, 51,171, 82,137, 0, 0, 0, 0,128, 1, 2,255, - 0, 0, 0, 0,191,127,174,232,191,127,236,110, 51,171, 82,137, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,191,127,174,236, - 63,128, 9,201, 51,171, 82,138, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,192,159,242,181, 63,128, 15, 32, 43, 41,196,175, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,159,242,182,191,127,225,194, 43, 37,196,175, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,192, 63,229,108,191,127,225,197, 43, 37,180,175, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192, 63,229,108, - 63,128, 15, 29, 43, 41,180,175, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,159,253,112, 63,128, 18,242, 51, 18,138, 85, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64,159,253,112,191,127,218, 27, 51, 18,138, 81, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0, 64, 63,250,223,191,127,218, 24, 51, 18,138, 81, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 64, 63,250,225, - 63,128, 18,245, 51, 18,138, 85, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,223,236,178, 63,128, 14, 32,175,216,158, 81, - 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,223,236,178,191,127,227,192,175,216,160, 81, 0, 0, 0, 0,127,255, 2,255, - 0, 0, 0, 0,193, 15,246, 89,191,127,227,188,175,216,160, 73, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,193, 15,246, 89, - 63,128, 14, 35,175,216,158, 73, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,192,159,239,217, 63,128, 8,204, 51,170,121,151, - 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,192,159,239,217,191,127,238,104, 51,170,121,150, 0, 0, 0, 0,128, 1, 2,255, - 0, 0, 0, 0,192,223,239,217,191,127,238,108, 51,170,121,150, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0,192,223,239,217, - 63,128, 8,200, 51,170,121,151, 0, 0, 0, 0,128, 1, 2,255, 0, 0, 0, 0, 64,223,247,233, 63,128, 24,219,180,155,136, 78, - 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 64,223,247,233,191,127,206, 76,180,155,136, 79, 0, 0, 0, 0,127,255, 3,255, - 0, 0, 0, 0, 65, 15,251,245,191,127,206, 80,180,155,136, 79, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 65, 15,251,245, - 63,128, 24,216,180,155,136, 78, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 64,159,247,179, 63,128, 8,233,180,173, 96,180, - 0, 0, 0, 0,128, 1, 3,255, 0, 0, 0, 0, 64,159,247,179,191,127,238, 42,180,173, 96,181, 0, 0, 0, 0,128, 1, 3,255, - 0, 0, 0, 0, 64,223,247,178,191,127,238, 38,180,173, 96,181, 0, 0, 0, 0,128, 1, 3,255, 0, 0, 0, 0, 64,223,247,177, - 63,128, 8,237,180,173, 96,180, 0, 0, 0, 0,128, 1, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 79, 32, - 0, 0, 1, 42, 0, 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, 8,195, 80,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 1,176, 8,195, 80,160, 0, 0, 0, 55, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 34, - 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, - 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 8, - 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, - 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, - 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 16, - 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, - 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 23, - 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, - 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 34, - 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 0, 30, - 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 35, 0, 0, 0, 32, - 0, 0, 0, 33, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 35, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 82,128, 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 8,195, 84, 0, 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, 0, 85, 86, 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, 8,195, 84,224, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195, 86,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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,180, 8,195, 84, 0, 0, 0, 0, 54, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 23, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 24, 0, 0, 0, 25, - 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 2, 0, 0, 0, 32, - 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1,140, 8,195, 84,224, 0, 0, 0, 65, - 0, 0, 0, 9, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,144, 8,195, 86,160, 0, 0, 0, 59, - 0, 0, 0, 36,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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, 77, 69, 0, 0, 1, 24, 8,195, 87, 96, - 0, 0, 0, 52, 0, 0, 0, 1, 8,195, 95, 32, 8,195, 76, 48, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101, -119, 46, 48, 48, 52, 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, 8,195, 88,160, 8,195, 94, 64, 8,195, 94,128, 0, 0, 0, 0, - 8,195, 90, 80, 8,195, 92, 96, 0, 0, 0, 0, 8,195, 94,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 88,208, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 90,224, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 92,192, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,179,128, 0, 0, - 52, 64, 0, 0, 28,192, 0, 0, 63,128, 0, 0, 63,128, 0, 2, 55, 39,197,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 88,160, 0, 0, 0, 0, 0, 0, 0, 1, 3,161,110, 32, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 88,208, 0, 0, 1, 42, 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, 8,195, 90, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 96, 8,195, 90, 80, 0, 0, 0, 58, 0, 0, 0, 4, 64,175, 49, 50, 63,127,255,255, 51,152,159, 28, - 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 64,175, 49, 50,191,128, 0, 0,179,152,159, 33, 0, 0, 0, 0,127,255, 3,255, - 0, 0, 0, 0,192,175, 49, 50,191,127,255,252,179,152,159, 31, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,192,175, 49, 45, - 63,128, 0, 4, 51,152,159, 33, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 90,224, - 0, 0, 1, 42, 0, 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, 8,195, 92, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 0, 0, 48, 8,195, 92, 96, 0, 0, 0, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 92,192, 0, 0, 1, 42, 0, 0, 0, 5, 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, 86, 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, 8,195, 94, 64, 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, 0, 85, 86, 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, 8,195, 94,128, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195, 94,224, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 8,195, 94, 64, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 0, 44, 8,195, 94,128, 0, 0, 0, 65, - 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 16, 8,195, 94,224, 0, 0, 0, 59, - 0, 0, 0, 4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 8,195, 95, 32, - 0, 0, 0, 52, 0, 0, 0, 1, 0, 0, 0, 0, 8,195, 87, 96, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0, 0, + 68, 65, 84, 65,136, 0, 0, 0,184,165,178, 3,156, 0, 0, 0, 1, 0, 0, 0,176,168,178, 3,200,160,178, 3,120,163,178, 3, +152,164,178, 3, 6, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 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,195, 96, 96, 8,195,102,192, 8,195,103, 96, 0, 0, 0, 0, - 8,195, 98, 16, 8,195,100,128, 0, 0, 0, 0, 8,195,104,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 96,144, - 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 8,195, 99, 0, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8,195,101, 64, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51,128, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 4, 63,128, 0, 4, 63,128, 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, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 0, 0, 4, 8,195, 96, 96, 0, 0, 0, 0, 0, 0, 0, 1, 3,161, 94, 32, 68, 65, 84, 65, 0, 0, 1, 84, - 8,195, 96,144, 0, 0, 1, 42, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +236, 0, 0, 0,112,166,178, 3,185, 0, 0, 0, 1, 0, 0, 0,144,167,178, 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, 8,195, 98, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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, +236, 0, 0, 0,144,167,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,112,166,178, 3, 0, 0, 0, 0, 0, 0,182, 67, + 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 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, 0, 0, 6, 0, 0, 0, 0, 0,108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65, +248, 0, 0, 0,176,168,178, 3,155, 0, 0, 0, 1, 0, 0, 0, 24,172,178, 3,184,165,178, 3,112,166,178, 3,144,167,178, 3, + 3, 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, 0, 0, 0, 0,182, 67, + 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,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, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,216,169,178, 3,185, 0, 0, 0, 1, 0, 0, 0,248,170,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,248,170,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +216,169,178, 3, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, + 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, + 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 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, 69, 4, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,184, 0, 0, 0, 24,172,178, 3,250, 0, 0, 0, 1, 0, 0, 0, 96,176,178, 3, +176,168,178, 3,216,169,178, 3,248,170,178, 3, 11, 0, 0, 0, 51, 51, 51, 63,248,150,127, 3, 0, 0,128,192, 0, 0,122, 67, + 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, + 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, + 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, 68, 65, 84, 65,236, 0, 0, 0, 0,173,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 32,174,178, 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, 2, 0, 3, 3, + 4, 0, 12, 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, 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,236, 0, 0, 0, 32,174,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 64,175,178, 3, 0,173,178, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 64,175,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,174,178, 3, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, + 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, +196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 69, 4, 0, 0, + 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,188, 0, 0, 0, 96,176,178, 3, +157, 0, 0, 0, 1, 0, 0, 0,176,180,178, 3, 24,172,178, 3, 0,173,178, 3, 64,175,178, 3, 13, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0, +124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0, +108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, + 0, 0, 72, 66, 10, 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, 68, 65, 84, 65,236, 0, 0, 0, 80,177,178, 3,185, 0, 0, 0, 1, 0, 0, 0,112,178,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,112,178,178, 3,185, 0, 0, 0, 1, 0, 0, 0,144,179,178, 3, 80,177,178, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,144,179,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,112,178,178, 3, + 0, 0,160,193, 0, 0, 85, 67, 0,160,134,196, 0, 0, 0, 0, 0, 0,160,193, 0, 0, 85, 67, 0,160,134,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,216, 0, 0, 0,176,180,178, 3, 4, 1, 0, 0, 1, 0, 0, 0, 56,186,178, 3, 96,176,178, 3, + 80,177,178, 3,144,179,178, 3, 12, 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, 0,191, 0, 0, 2, 66, 0, 0,122,196, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64, +108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, +128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68, + 10,215, 35, 60, 0, 0, 72, 66, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,184,181,178, 3,185, 0, 0, 0, + 1, 0, 0, 0,216,182,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,216,182,178, 3,185, 0, 0, 0, + 1, 0, 0, 0,248,183,178, 3,184,181,178, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,248,183,178, 3,185, 0, 0, 0, + 1, 0, 0, 0, 24,185,178, 3,216,182,178, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 24,185,178, 3,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,248,183,178, 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, 18, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, + 79, 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, 68, 65, 84, 65, 52, 0, 0, 0, 56,186,178, 3,154, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,176,180,178, 3,184,181,178, 3, 24,185,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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, +144,214, 76, 1,184, 0, 0, 0, 1, 0, 0, 0,184,227,178, 3, 16,102,155, 3, 0,219,155, 3,144, 72,160, 3,216, 12,156, 3, +232,206,159, 3, 0, 0, 0, 0,193, 3, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 6, 6, 71, 2, 44, 3, 1, 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,240,183, 65, 1,224,188,178, 3, + 80,227,178, 3,160,186,178, 3,192,187,178, 3, 0, 0, 0, 0, 0, 0, 0, 0,200,159, 71, 1,136, 0,158, 3, 68, 65, 84, 65, +236, 0, 0, 0,160,186,178, 3,185, 0, 0, 0, 1, 0, 0, 0,192,187,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 5, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 17, 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, 70, 2, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 3, 68, 0, 0,200, 65, 0,128, 3, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 71, 2, 26, 0, 71, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +193, 3, 0, 0, 7, 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, + 71, 2, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,188, 65, 1,144, 58,199, 3, +144, 58,199, 3, 0, 0, 0, 0, 0, 0, 0, 0, 56, 2,158, 3, 40, 3,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +236, 0, 0, 0,192,187,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,160,186,178, 3, 0, 0, 0, 0, 0, 0, 22, 67, + 0, 0, 0, 0, 0, 0, 22, 67, 36,191,184,191,146, 95, 28, 64, 19,174, 7,192, 19,174, 71, 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, 71, 2, 0, 0, + 0, 0, 0, 0, 18, 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, +193, 3, 0, 0, 7, 6, 0, 0, 26, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 2, 18, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,184, 65, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 5,158, 3,104, 6,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +136, 0, 0, 0,224,188,178, 3,156, 0, 0, 0, 1, 0, 0, 0,224,194,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 83,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63,179, 3, + 0, 0, 0, 0, 0, 0,255,255, 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, 1, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +152,189,178, 3,185, 0, 0, 0, 1, 0, 0, 0,184,190,178, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, +184,190,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,189,178, 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, 33, 2, 0, 0, +111, 3, 0, 0, 0, 0, 0, 0, 79, 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,216,191,178, 3, 68, 65, 84, 65,216, 2, 0, 0, +216,191,178, 3,145, 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, @@ -16293,16 +805,418 @@ char datatoc_preview_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, - 68, 65, 84, 65, 0, 0, 0,192, 8,195, 98, 16, 0, 0, 0, 58, 0, 0, 0, 8, 63,128, 0, 0, 63,127,255,255,191,128, 0, 0, - 73,230, 73,230,182, 26, 3,255, 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,191,128, 0, 0, 73,230,182, 26,182, 26, 3,255, - 0, 0, 0, 0,191,128, 0, 1,191,127,255,253,191,128, 0, 0,182, 26,182, 26,182, 26, 3,255, 0, 0, 0, 0,191,127,255,250, - 63,128, 0, 3,191,128, 0, 0,182, 26, 73,230,182, 26, 3,255, 0, 0, 0, 0, 63,128, 0, 4, 63,127,255,247, 63,128, 0, 0, - 73,230, 73,230, 73,230, 3,255, 0, 0, 0, 0, 63,127,255,245,191,128, 0, 5, 63,128, 0, 0, 73,230,182, 26, 73,230, 3,255, - 0, 0, 0, 0,191,128, 0, 3,191,127,255,250, 63,128, 0, 0,182, 26,182, 26, 73,230, 3,255, 0, 0, 0, 0,191,127,255,255, - 63,128, 0, 0, 63,128, 0, 0,182, 26, 73,230, 73,230, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 84, 8,195, 99, 0, - 0, 0, 1, 42, 0, 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, 8,195,100,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,252, 83, 63,104, 25,223,190,115, 52, 40, 62,119,211,159, 62, 96,183,198, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,163,146, 22,189,174, 51,122,190, 29,244, 58,192, 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, 0, 0, 0, 0, 0, 0, 0, 0, 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,224,194,178, 3,146, 0, 0, 0, 1, 0, 0, 0, 32,241,154, 3,224,188,178, 3, +152,189,178, 3,184,190,178, 3, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84,252, 83, 63,104, 25,223,190,115, 52, 40, 62,119,211,159, 62, 96,183,198, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +232,119,179, 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, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, +163,146, 22,189,174, 51,122,190, 29,244, 58,192, 0, 0,224, 54, 56,146, 88, 63,198, 37, 71, 64, 20, 0, 0, 0, 7, 0, 10, 0, +115, 0, 0, 0, 1, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 0,196,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 32,197,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, 32,197,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0,196,178, 3, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195, +172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, + 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3, +235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,232, 0, 0, 0, 32,241,154, 3,151, 0, 0, 0, 1, 0, 0, 0,160,201,178, 3, +224,194,178, 3, 0,196,178, 3, 32,197,178, 3, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, 0, 0,100, 67, +197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, + 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 64,198,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 96,199,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, 96,199,178, 3,185, 0, 0, 0, 1, 0, 0, 0,128,200,178, 3, 64,198,178, 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, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,128,200,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96,199,178, 3, + 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, + 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, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,196, 0, 0, 0,160,201,178, 3,150, 0, 0, 0, 1, 0, 0, 0,216,204,178, 3, 32,241,154, 3, + 64,198,178, 3,128,200,178, 3, 2, 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, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, + 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, 68, 65, 84, 65, +236, 0, 0, 0,152,202,178, 3,185, 0, 0, 0, 1, 0, 0, 0,184,203,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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, +236, 0, 0, 0,184,203,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,202,178, 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, + 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65, +124, 2, 0, 0,216,204,178, 3,158, 0, 0, 0, 1, 0, 0, 0,200,209,178, 3,160,201,178, 3,152,202,178, 3,184,203,178, 3, + 9, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 45, 96, 1, 0, 0, 0, 0, + 62, 0, 0, 0, 32, 0, 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0,225, 2, 0, 0,227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0, +227, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,136,207,178, 3,185, 0, 0, 0, 1, 0, 0, 0, +168,208,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,168,208,178, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,136,207,178, 3, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, + 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, + 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, 0, 0, 6, 0, 0, 0, + 0, 0,108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,248, 0, 0, 0,200,209,178, 3,155, 0, 0, 0, 1, 0, 0, 0, + 48,213,178, 3,216,204,178, 3,136,207,178, 3,168,208,178, 3, 3, 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, 0, 0, 0, 0,182, 67, 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, + 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,108, 1,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, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +240,210,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 16,212,178, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, + 16,212,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240,210,178, 3, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, + 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0, +124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0, +111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,184, 0, 0, 0, + 48,213,178, 3,250, 0, 0, 0, 1, 0, 0, 0,120,217,178, 3,200,209,178, 3,240,210,178, 3, 16,212,178, 3, 11, 0, 0, 0, + 51, 51, 51, 63, 0,226,127, 3, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, + 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, + 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 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, 68, 65, 84, 65,236, 0, 0, 0, 24,214,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 56,215,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, 56,215,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 88,216,178, 3, 24,214,178, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 88,216,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56,215,178, 3, + 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67, +108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, +196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68, +205,204,204, 61, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,188, 0, 0, 0,120,217,178, 3,157, 0, 0, 0, 1, 0, 0, 0,200,221,178, 3, 48,213,178, 3, + 24,214,178, 3, 88,216,178, 3, 13, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, + 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0, +108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 10, 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, 68, 65, 84, 65,236, 0, 0, 0,104,218,178, 3, +185, 0, 0, 0, 1, 0, 0, 0,136,219,178, 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, 2, 0, 3, 3, + 4, 0, 12, 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, 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,236, 0, 0, 0,136,219,178, 3, +185, 0, 0, 0, 1, 0, 0, 0,168,220,178, 3,104,218,178, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,168,220,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136,219,178, 3, 0, 0,160,193, 0,128,167, 67, 0,160,134,196, 0, 0, 0, 0, + 0, 0,160,193, 0,128,167, 67, 0,160,134,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, + 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,216, 0, 0, 0,200,221,178, 3, + 4, 1, 0, 0, 1, 0, 0, 0, 80,227,178, 3,120,217,178, 3,104,218,178, 3,168,220,178, 3, 12, 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, 0,191, 0, 0, 2, 66, 0, 0,122,196, 0, 0, 0, 0, + 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0, +128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, 14, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68, 10,215, 35, 60, 0, 0, 72, 66, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,236, 0, 0, 0,208,222,178, 3,185, 0, 0, 0, 1, 0, 0, 0,240,223,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,240,223,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 16,225,178, 3,208,222,178, 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, 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, + 68, 65, 84, 65,236, 0, 0, 0, 16,225,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 48,226,178, 3,240,223,178, 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, 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, + 68, 65, 84, 65,236, 0, 0, 0, 48,226,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16,225,178, 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, 18, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, + 68, 65, 84, 65, 52, 0, 0, 0, 80,227,178, 3,154, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,200,221,178, 3,208,222,178, 3, + 48,226,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, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,184,227,178, 3,184, 0, 0, 0, 1, 0, 0, 0,112, 13,179, 3, +144,214, 76, 1, 24,225,155, 3, 48, 11,156, 3, 0,177,154, 3, 0,219,155, 3, 0, 0, 0, 0, 0, 0, 0, 0,191, 3, 0, 0, + 0, 0, 0, 0,119, 4, 0, 0, 1, 1,192, 3,120, 4, 1, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112,172, 65, 1,160,233,178, 3, 8, 13,179, 3, 88,228,178, 3,120,229,178, 3, 0, 0, 0, 0, + 0, 0, 0, 0,224, 6,158, 3,160, 7,158, 3, 68, 65, 84, 65,236, 0, 0, 0, 88,228,178, 3,185, 0, 0, 0, 1, 0, 0, 0, +120,229,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,112, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 84, 68, 0, 0,200, 65, + 0,192, 84, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,192, 3, + 26, 0,192, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 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,192, 3, 26, 0, 8, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72,178, 65, 1,112,168, 78, 1,112,168, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 9,158, 3, +184, 10,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,120,229,178, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 88,228,178, 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,191, 3, 0, 0, 26, 0, 0, 0,119, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 94, 4, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8,173, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 12,158, 3, + 96, 16,158, 3, 0, 0, 0, 0,152,230,178, 3, 68, 65, 84, 65,216, 2, 0, 0,152,230,178, 3,145, 0, 0, 0, 1, 0, 0, 0, +170, 10,163, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, +197, 56, 16, 63,181,165,214,190,216, 65, 54, 63, 0, 0, 0, 0,103,115, 83, 63,179,248,135, 62,228,147,254,190, 0, 0, 0, 0, +155,199,158, 60, 68, 64, 94, 63,111,229,253, 62, 0, 0, 0, 0,239,219,254,191,167, 80,144,192,255, 66, 63,194, 0, 0,128, 63, +229, 56, 16, 63, 90,115, 83, 63,158,201,158, 60, 0, 0, 0, 0,200,165,214,190,182,248,135, 62, 77, 64, 94, 63, 0, 0, 0, 0, +225, 65, 54, 63, 0,148,254,190,119,229,253, 62, 0, 0, 0, 0,110, 23, 5, 66, 18,118,167,193, 59, 82,221, 65, 0, 0,128, 63, + 79,180, 55, 63, 62,197,234,190,182, 67, 54,191,216, 65, 54,191, 74,171,134, 63, 4,184,148, 62,128,150,254, 62,228,147,254, 62, +106, 63,202, 60, 74, 22,115, 63, 9,232,253,190,111,229,253,190,167, 80, 34,192, 55,216,157,192,122, 48, 63, 66,255, 66, 63, 66, + 76,111,226, 62,122, 2, 38, 63,246,229,120, 60, 0, 84,115,181, 62,141,196,190,172, 3,121, 62, 71, 19, 75, 63, 0, 8,149,183, + 77, 79,208,196, 76, 13,131, 68,171, 51,173,196, 68, 87, 72,194,156, 58,208, 68,179,254,130,196,138, 37,173, 68, 71, 89, 72, 66, +197, 56, 16, 63,181,165,214,190,216, 65, 54, 63, 0, 0, 0, 0,103,115, 83, 63,179,248,135, 62,228,147,254,190, 0, 0, 0, 0, +155,199,158, 60, 68, 64, 94, 63,111,229,253, 62, 0, 0, 0, 0, 62,101,214,192,129, 55, 88,192, 98, 89, 45,194, 0, 0,128, 63, + 79,180, 55, 63, 62,197,234,190,182, 67, 54,191,216, 65, 54,191, 74,171,134, 63, 4,184,148, 62,128,150,254, 62,228,147,254, 62, +106, 63,202, 60, 74, 22,115, 63, 9,232,253,190,111,229,253,190,101,139, 8,193,181,124,108,192,174, 70, 45, 66, 98, 89, 45, 66, +180, 25,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 25,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,180, 25,170, 64, 0, 0, 0, 0,113, 36,122, 61,157, 24,186,192, 28, 38, 71, 64, 0, 0,128, 63, +153, 42, 67, 63,246, 62,229,190,251,142,104,190,131, 17,209,190,141, 8, 56, 66,223,139, 15, 66, 0, 0, 0, 0, 0, 0, 0, 0, +251, 91,214, 58, 80,127, 4,191,250,204,248,191, 74, 51,155,192, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +160,233,178, 3,146, 0, 0, 0, 1, 0, 0, 0, 0,237,178, 3, 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, 17,139, 48, 63,240,151, 31,191,155, 98,151,190, + 77, 45, 97,190,141, 8, 56, 66, 0, 0, 0, 0,255, 13, 0, 0, 1, 0, 0, 0,232,119,179, 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, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 24, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 80,127, 4,191,250,204,248,191, 74, 51,155,192, + 96,199, 41,188,225,230, 30,193,216,129,230, 63, 20, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 1, 0, 3, 0,255,255, + 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, 68, 65, 84, 65, +236, 0, 0, 0,192,234,178, 3,185, 0, 0, 0, 1, 0, 0, 0,224,235,178, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 55, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,213, 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,174, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,213, 68, 0, 0,200, 65, 0,192,213, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,175, 6, 26, 0,175, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,174, 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, +175, 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, 68, 65, 84, 65, +236, 0, 0, 0,224,235,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,192,234,178, 3, 0, 0, 0, 0, 0, 0, 22, 67, + 0, 0, 0, 0, 0, 0, 22, 67,181,129,166,192,181,129,198, 64,218, 64, 71,192,109,160,131, 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,175, 6, 0, 0, + 0, 0, 0, 0, 60, 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,174, 6, 0, 0, 26, 0, 0, 0, 85, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +175, 6, 60, 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, 68, 65, 84, 65, +136, 0, 0, 0, 0,237,178, 3,156, 0, 0, 0, 1, 0, 0, 0,192, 78,174, 3,160,233,178, 3,192,234,178, 3,224,235,178, 3, + 6, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 83,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +184,237,178, 3,185, 0, 0, 0, 1, 0, 0, 0,216,238,178, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, +216,238,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,184,237,178, 3, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, + 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 2, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,232, 0, 0, 0, +192, 78,174, 3,151, 0, 0, 0, 1, 0, 0, 0, 88,243,178, 3, 0,237,178, 3,184,237,178, 3,216,238,178, 3, 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, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, + 0, 0, 0, 63, 72,225,154, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3,235, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,248,239,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 24,241,178, 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, 2, 0, 3, 3, + 4, 0, 12, 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, 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,236, 0, 0, 0, 24,241,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 56,242,178, 3,248,239,178, 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, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 56,242,178, 3, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 24,241,178, 3, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, + 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, + 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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, 31, 2, 0, 0, + 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,196, 0, 0, 0, 88,243,178, 3, +150, 0, 0, 0, 1, 0, 0, 0,144,246,178, 3,192, 78,174, 3,248,239,178, 3, 56,242,178, 3, 2, 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, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, + 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, + 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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, 68, 65, 84, 65,236, 0, 0, 0, 80,244,178, 3,185, 0, 0, 0, 1, 0, 0, 0, +112,245,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,112,245,178, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 80,244,178, 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, 31, 2, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,124, 2, 0, 0,144,246,178, 3,158, 0, 0, 0, 1, 0, 0, 0, +128,251,178, 3, 88,243,178, 3, 80,244,178, 3,112,245,178, 3, 9, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 45, 96, 1, 0, 0, 0, 0, 62, 0, 0, 0, 32, 0, 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0,225, 2, 0, 0, +227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0,227, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16311,660 +1225,16078 @@ char datatoc_preview_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, 68, 65, 84, 65, - 0, 0, 0,144, 8,195,100,128, 0, 0, 0, 55, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, - 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, - 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 35, - 68, 65, 84, 65, 0, 0, 1, 84, 8,195,101, 64, 0, 0, 1, 42, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, +236, 0, 0, 0, 64,249,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 96,250,178, 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, 8,195,102,192, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 3, 4, 0, 12, 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, 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, +236, 0, 0, 0, 96,250,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64,249,178, 3, 0, 0, 0, 0, 0, 0,182, 67, + 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 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, 0, 0, 6, 0, 0, 0, 0, 0,108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 2, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65, +248, 0, 0, 0,128,251,178, 3,155, 0, 0, 0, 1, 0, 0, 0,232,254,178, 3,144,246,178, 3, 64,249,178, 3, 96,250,178, 3, + 3, 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, 0, 0, 0, 0,182, 67, + 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,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, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,168,252,178, 3,185, 0, 0, 0, 1, 0, 0, 0,200,253,178, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,200,253,178, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +168,252,178, 3, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, + 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, + 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,184, 0, 0, 0,232,254,178, 3,250, 0, 0, 0, 1, 0, 0, 0, 48, 3,179, 3, +128,251,178, 3,168,252,178, 3,200,253,178, 3, 11, 0, 0, 0, 51, 51, 51, 63,248,254,127, 3, 0, 0,128,192, 0, 0,122, 67, + 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, + 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, + 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, 68, 65, 84, 65,236, 0, 0, 0,208,255,178, 3, +185, 0, 0, 0, 1, 0, 0, 0,240, 0,179, 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, 2, 0, 3, 3, + 4, 0, 12, 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, 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,236, 0, 0, 0,240, 0,179, 3, +185, 0, 0, 0, 1, 0, 0, 0, 16, 2,179, 3,208,255,178, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 16, 2,179, 3, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240, 0,179, 3, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, + 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, +196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 2, 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, 31, 2, 0, 0, + 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,188, 0, 0, 0, 48, 3,179, 3, +157, 0, 0, 0, 1, 0, 0, 0,128, 7,179, 3,232,254,178, 3,208,255,178, 3, 16, 2,179, 3, 13, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0, +124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0, +108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, + 0, 0, 72, 66, 10, 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, 68, 65, 84, 65,236, 0, 0, 0, 32, 4,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 64, 5,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, 64, 5,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 96, 6,179, 3, 32, 4,179, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, 96, 6,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 5,179, 3, + 0, 0,160,193, 0, 0, 8, 68, 0,160,134,196, 0, 0, 0, 0, 0, 0,160,193, 0, 0, 8, 68, 0,160,134,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 31, 2, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,216, 0, 0, 0,128, 7,179, 3, 4, 1, 0, 0, 1, 0, 0, 0, 8, 13,179, 3, 48, 3,179, 3, + 32, 4,179, 3, 96, 6,179, 3, 12, 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, 0,191, 0, 0, 2, 66, 0, 0,122,196, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64, +108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, +128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68, + 10,215, 35, 60, 0, 0, 72, 66, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,136, 8,179, 3,185, 0, 0, 0, + 1, 0, 0, 0,168, 9,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,168, 9,179, 3,185, 0, 0, 0, + 1, 0, 0, 0,200, 10,179, 3,136, 8,179, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,200, 10,179, 3,185, 0, 0, 0, + 1, 0, 0, 0,232, 11,179, 3,168, 9,179, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,232, 11,179, 3,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,200, 10,179, 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, 18, 0, 0, 0, 0, 0, 3, 3, 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, 31, 2, 0, 0, 0, 0, 0, 0, + 79, 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, 68, 65, 84, 65, 52, 0, 0, 0, 8, 13,179, 3,154, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,128, 7,179, 3,136, 8,179, 3,232, 11,179, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, +112, 13,179, 3,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,184,227,178, 3,144, 72,160, 3, 0,177,154, 3,136, 3,156, 3, +216, 12,156, 3, 0, 0, 0, 0,193, 3, 0, 0, 7, 6, 0, 0, 45, 3, 0, 0,119, 4, 0, 0, 3, 3, 71, 2, 75, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 65, 1, 80, 16,179, 3, +216, 62,179, 3, 16, 14,179, 3, 48, 15,179, 3, 0, 0, 0, 0, 0, 0, 0, 0,216, 16,158, 3,152, 17,158, 3, 68, 65, 84, 65, +236, 0, 0, 0, 16, 14,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 48, 15,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 17, 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, 70, 2, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 3, 68, 0, 0,200, 65, 0,128, 3, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 71, 2, 26, 0, 71, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +193, 3, 0, 0, 7, 6, 0, 0, 45, 3, 0, 0, 70, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 2, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,170, 65, 1,112,145,203, 3, +112,145,203, 3, 0, 0, 0, 0, 0, 0, 0, 0, 72, 19,158, 3,192, 19,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +236, 0, 0, 0, 48, 15,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 14,179, 3, 0, 0, 0, 0, 0,128,241, 67, + 0, 0,210,195, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 13, 68, 0,128,143,195, 0, 0, 0, 0, 54, 2, 0, 0, 71, 2, 0, 0, + 18, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0, + 18, 0, 0, 0, 48, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 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, 0, 4, 6, 0, 71, 2, 49, 1, 54, 2, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +193, 3, 0, 0, 7, 6, 0, 0, 71, 3, 0, 0,119, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 2, 49, 1, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,169, 65, 1,240,149,203, 3, +240,149,203, 3, 0, 0, 0, 0, 0, 0, 0, 0,136, 21,158, 3,120, 22,158, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +248, 0, 0, 0, 80, 16,179, 3,155, 0, 0, 0, 1, 0, 0, 0,184, 26,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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, 0, 0, 0, 0,182, 67, + 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +184, 67,199, 3,184, 67,199, 3,136,177,163, 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, + 1, 0, 12, 0, 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,136,177,163, 3,208, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, +164, 0, 0, 0,232, 21,199, 3, 68, 65, 84, 65,176, 7, 0, 0,232, 21,199, 3,207, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 63,179, 3, 19, 0, 0, 0, 1, 0, 0, 0,160, 63,179, 3, 20, 0, 0, 0, 1, 0, 0, 0,160, 63,179, 3, + 23, 0, 0, 0, 1, 0, 0, 0,168,141,156, 3, 21, 0, 1, 0, 1, 0, 0, 0,160, 63,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 24,112,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,203,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,112,104,184, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,199,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 64, 91,184, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 80,195,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 16, 78,184, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 80,191,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,224, 64,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,187,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0,176, 51,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, +104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,183,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,128, 38,184, 3, 0, 0, 0, 0, + 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,179,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80, 25,184, 3, + 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,175,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 32, 12,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,171,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,240,254,183, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80,167,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0,192,241,183, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 80,163,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,144,228,183, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 80,159,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 96,215,183, 3, 0, 0, 0, 0, 1, 0, 0, 0,136,155,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 80,173,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, +104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,248,151,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 40,130,183, 3, 0, 0, 0, 0, + 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,104,148,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 87,183, 3, + 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,216,144,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, +240, 44,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 72,141,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,224, 2,183, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,184,137,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0,184,215,182, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, +232,119,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 85,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 8, 57,181, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 8, 87,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 40,134,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,168,181,182, 3, + 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,152,130,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, +112, 96,182, 3, 0, 0, 0, 0, 1, 0, 0, 0,184, 4,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, 8,208,182, 3, 0, 0, 0, 0, + 1, 0, 0, 0,232, 71,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,208, 91,181, 3, 9, 0, 0, 0, 1, 0, 0, 0,184, 4,180, 3, + 10, 0, 0, 0, 1, 0, 0, 0,184, 4,180, 3, 29, 0, 0, 0, 1, 0, 0, 0,184, 4,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 32,225,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 40,109,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,176,228,179, 3, 0, 0, 0, 0, + 1, 0, 0, 0,216,194,182, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, + 0, 0, 0, 0, 1, 0, 0, 0,144,221,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,248,102,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0,218,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 8,100,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,184, 0,180, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 64,193,186, 3, 0, 0, 0, 0, 1, 0, 0, 0, 8,127,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152,139,182, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, 40,249,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 72, 90,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,184,252,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,144,185,186, 3, 0, 0, 0, 0, + 1, 0, 0, 0,168, 85,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 60,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,160,170,186, 3, + 0, 0, 0, 0, 1, 0, 0, 0,200, 78,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,208, 91,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 40,245,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,160,117,184, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 0, 0, 0, 0, + 1, 0, 0, 0,176,232,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,216,162,186, 3, 0, 0, 0, 0, 1, 0, 0, 0,208, 91,181, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 80,207,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,136, 93,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 40,241,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,112,214,179, 3, 0, 0, 0, 0, + 1, 0, 0, 0,232,105,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,176,236,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,176, 94,181, 3, + 0, 0, 0, 0, 1, 0, 0, 0,208, 91,181, 3, 9, 0, 0, 0, 1, 0, 0, 0,176,236,179, 3, 10, 0, 0, 0, 1, 0, 0, 0, +176,236,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,224,210,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,200, 96,179, 3, 0, 0, 0, 0, + 1, 0, 0, 0,120,123,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 80, 86,179, 3, 30, 0,255,255, 0, 0, 1, 0,112,152,230, 0, + 31, 0, 0, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 1, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 2, 0, 1, 0, 1, 0, +112,152,230, 0, 31, 0, 3, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 4, 0, 0, 0, 1, 0,112,152,230, 0, 31, 0, 5, 0, + 1, 0, 1, 0,112,152,230, 0, 31, 0, 6, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 7, 0, 1, 0, 1, 0,112,152,230, 0, + 31, 0, 8, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 9, 0, 1, 0, 1, 0,112,152,230, 0, 30, 0,255,255, 0, 0, 1, 0, +112,152,230, 0, 31, 0, 0, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 1, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 2, 0, + 1, 0, 1, 0,112,152,230, 0, 31, 0, 3, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 10, 0, 1, 0, 1, 0,112,152,230, 0, + 31, 0, 11, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 12, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 13, 0, 1, 0, 0, 0, +112,152,230, 0, 31, 0, 14, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 15, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 16, 0, + 1, 0, 0, 0,112,152,230, 0, 31, 0, 17, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 18, 0, 1, 0, 0, 0,112,152,230, 0, + 31, 0, 19, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 20, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 21, 0, 1, 0, 0, 0, +112,152,230, 0, 31, 0, 22, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 23, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 24, 0, + 1, 0, 0, 0,112,152,230, 0, 31, 0, 25, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 26, 0, 1, 0, 0, 0,112,152,230, 0, + 31, 0, 27, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 28, 0, 1, 0, 0, 0,112,152,230, 0, 31, 0, 29, 0, 1, 0, 0, 0, +112,152,230, 0, 31, 0, 4, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 5, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 6, 0, + 1, 0, 1, 0,112,152,230, 0, 31, 0, 7, 0, 1, 0, 1, 0,112,152,230, 0, 31, 0, 8, 0, 1, 0, 1, 0,112,152,230, 0, + 31, 0, 9, 0, 1, 0, 1, 0,112,152,230, 0, 68, 65, 84, 65,236, 0, 0, 0,120, 24,179, 3,185, 0, 0, 0, 1, 0, 0, 0, +152, 25,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,217, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 3, 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, 14, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 3, 68, 0, 0,200, 65, + 0,128, 3, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 15, 2, + 26, 0, 15, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 3, 0, 0, 99, 5, 0, 0, 17, 3, 0, 0, 42, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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,236, 0, 0, 0,152, 25,179, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,120, 24,179, 3, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,254,127, 7,191,255,191,195, 63, +247,255,163,189,255, 63,138, 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, 15, 2, 0, 0, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 99, 5, 0, 0, 43, 3, 0, 0, 83, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 2, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0,184, 26,179, 3,156, 0, 0, 0, 1, 0, 0, 0, +184, 32,179, 3, 80, 16,179, 3,120, 24,179, 3,152, 25,179, 3, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,255,255, 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, 1, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0,112, 27,179, 3,185, 0, 0, 0, 1, 0, 0, 0,144, 28,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,144, 28,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +112, 27,179, 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, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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,176, 29,179, 3, 68, 65, 84, 65,216, 2, 0, 0,176, 29,179, 3,145, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,252, 83, 63, +104, 25,223,190,115, 52, 40, 62,119,211,159, 62, 96,183,198, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +163,146, 22,189,174, 51,122,190, 29,244, 58,192, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 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,184, 32,179, 3, +146, 0, 0, 0, 1, 0, 0, 0, 24, 36,179, 3,184, 26,179, 3,112, 27,179, 3,144, 28,179, 3, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,252, 83, 63,104, 25,223,190,115, 52, 40, 62,119,211,159, 62, + 96,183,198, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,232,119,179, 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, + 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67,163,146, 22,189,174, 51,122,190, 29,244, 58,192, 0, 0,224, 54, + 56,146, 88, 63,198, 37, 71, 64, 20, 0, 0, 0, 7, 0, 10, 0,115, 0, 0, 0, 1, 0, 0, 0, 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, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, +216, 33,179, 3,185, 0, 0, 0, 1, 0, 0, 0,248, 34,179, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, +248, 34,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,216, 33,179, 3, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, + 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0, +111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,232, 0, 0, 0, + 24, 36,179, 3,151, 0, 0, 0, 1, 0, 0, 0,144, 40,179, 3,184, 32,179, 3,216, 33,179, 3,248, 34,179, 3, 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, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196, 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 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,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, + 0, 0, 0, 63, 72,225,154, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 3,235, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 48, 37,179, 3, +185, 0, 0, 0, 1, 0, 0, 0, 80, 38,179, 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, 2, 0, 3, 3, + 4, 0, 12, 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, 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,236, 0, 0, 0, 80, 38,179, 3, +185, 0, 0, 0, 1, 0, 0, 0,112, 39,179, 3, 48, 37,179, 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, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,112, 39,179, 3, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 38,179, 3, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, + 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, + 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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, 33, 2, 0, 0,111, 3, 0, 0, + 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,196, 0, 0, 0,144, 40,179, 3, +150, 0, 0, 0, 1, 0, 0, 0,200, 43,179, 3, 24, 36,179, 3, 48, 37,179, 3,112, 39,179, 3, 2, 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, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, + 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, + 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, + 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 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, 68, 65, 84, 65,236, 0, 0, 0,136, 41,179, 3,185, 0, 0, 0, 1, 0, 0, 0, +168, 42,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,168, 42,179, 3,185, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,136, 41,179, 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, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,124, 2, 0, 0,200, 43,179, 3,158, 0, 0, 0, 1, 0, 0, 0, +184, 48,179, 3,144, 40,179, 3,136, 41,179, 3,168, 42,179, 3, 9, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 45, 96, 1, 0, 0, 0, 0, 62, 0, 0, 0, 32, 0, 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0,225, 2, 0, 0, +227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0,227, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +236, 0, 0, 0,120, 46,179, 3,185, 0, 0, 0, 1, 0, 0, 0,152, 47,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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, +236, 0, 0, 0,152, 47,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120, 46,179, 3, 0, 0,128,192, 0, 0,122, 67, + 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, + 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, + 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65, +184, 0, 0, 0,184, 48,179, 3,250, 0, 0, 0, 1, 0, 0, 0, 0, 53,179, 3,200, 43,179, 3,120, 46,179, 3,152, 47,179, 3, + 11, 0, 0, 0, 51, 51, 51, 63, 0,226,127, 3, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, + 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, + 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 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, 68, 65, 84, 65,236, 0, 0, 0,160, 49,179, 3,185, 0, 0, 0, 1, 0, 0, 0,192, 50,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,192, 50,179, 3,185, 0, 0, 0, 1, 0, 0, 0,224, 51,179, 3, +160, 49,179, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,224, 51,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +192, 50,179, 3, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, + 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, + 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,188, 0, 0, 0, 0, 53,179, 3,157, 0, 0, 0, 1, 0, 0, 0, 80, 57,179, 3, +184, 48,179, 3,160, 49,179, 3,224, 51,179, 3, 13, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, + 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, +196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 10, 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, 68, 65, 84, 65,236, 0, 0, 0, +240, 53,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 16, 55,179, 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, + 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0, + 16, 55,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 48, 56,179, 3,240, 53,179, 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, 8, 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, 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, 68, 65, 84, 65,236, 0, 0, 0, + 48, 56,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 55,179, 3, 0, 0,160,193, 0,128,167, 67, 0,160,134,196, + 0, 0, 0, 0, 0, 0,160,193, 0,128,167, 67, 0,160,134,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0, +111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65,216, 0, 0, 0, + 80, 57,179, 3, 4, 1, 0, 0, 1, 0, 0, 0,216, 62,179, 3, 0, 53,179, 3,240, 53,179, 3, 48, 56,179, 3, 12, 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, 0,191, 0, 0, 2, 66, 0, 0,122,196, + 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, + 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, + 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68, 10,215, 35, 60, 0, 0, 72, 66, 10, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,236, 0, 0, 0, 88, 58,179, 3,185, 0, 0, 0, 1, 0, 0, 0,120, 59,179, 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, 2, 0, 3, 3, 4, 0, 12, 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, 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,236, 0, 0, 0,120, 59,179, 3,185, 0, 0, 0, 1, 0, 0, 0,152, 60,179, 3, 88, 58,179, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,152, 60,179, 3,185, 0, 0, 0, 1, 0, 0, 0,184, 61,179, 3,120, 59,179, 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, 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, 68, 65, 84, 65,236, 0, 0, 0,184, 61,179, 3,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152, 60,179, 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, 18, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0,111, 3, 0, 0, 0, 0, 0, 0, 79, 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, 68, 65, 84, 65, 52, 0, 0, 0,216, 62,179, 3,154, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 57,179, 3, + 88, 58,179, 3,184, 61,179, 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, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,220, 4, 0, 0,160, 63,179, 3,143, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67,112,114,101,118,105,101,119, 0, 0, 99,101,110,101, 46, + 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,119,179, 3, 24,112,179, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 93,178, 3,144, 80,179, 3,240, 74,179, 3, 0, 0, 0, 0,167,253,243, 64,112,165, 81, 63, +136, 56, 93, 65,113, 36,122, 61,157, 24,186,192, 28, 38, 71, 64,113, 36,122, 61,157, 24,186,192, 28, 38, 71, 64,113, 36,122, 61, +157, 24,186,192, 28, 38, 71, 64, 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,224, 80,179, 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, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 20, 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, 0, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 25, 0,141, 0, 88, 2, 88, 2, 4, 0, 4, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0, 0, + 90, 0, 1, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 5, 0, 25, 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, 0, 0, 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,203,159, 3,120,203,159, 3, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 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, 47, 47, 98, 97, 99,107, 98,117,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,116,109,112, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 6, 0, 0, 0, + 16, 0, 0, 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, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,103, 75, 1, 1, 0, 0, 0, 1, 0, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 28, 0, 0, 0, 72, 93,178, 3,125, 0, 0, 0, 1, 0, 0, 0,176, 68,179, 3, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,183, 1,208, 0, 80,203,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,176, 68,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 0, 69,179, 3, 72, 93,178, 3, 33, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,183, 1,208, 0, 80,199,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 0, 69,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 80, 69,179, 3,176, 68,179, 3, 33, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0,224, 46, 43, 1, 80,195,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 80, 69,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +160, 69,179, 3, 0, 69,179, 3, 33, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,224, 46, 43, 1, 80,191,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,160, 69,179, 3,125, 0, 0, 0, 1, 0, 0, 0,240, 69,179, 3, 80, 69,179, 3, 33, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0,224, 46, 66, 2, 80,187,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,240, 69,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 64, 70,179, 3,160, 69,179, 3, 33, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,224, 46, 66, 2, 80,183,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 64, 70,179, 3,125, 0, 0, 0, 1, 0, 0, 0,144, 70,179, 3,240, 69,179, 3, 33, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0,153, 1, 33, 1, 80,179,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,144, 70,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +224, 70,179, 3, 64, 70,179, 3, 33, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,153, 1, 33, 1, 80,175,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,224, 70,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 48, 71,179, 3,144, 70,179, 3, 33, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 36, 1, 92, 1, 80,171,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 48, 71,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +128, 71,179, 3,224, 70,179, 3, 33, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 36, 1, 92, 1, 80,167,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,128, 71,179, 3,125, 0, 0, 0, 1, 0, 0, 0,208, 71,179, 3, 48, 71,179, 3, 33, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 57, 0,210, 1, 80,163,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,208, 71,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 32, 72,179, 3,128, 71,179, 3, 33, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 57, 0,210, 1, 80,159,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 32, 72,179, 3,125, 0, 0, 0, 1, 0, 0, 0,112, 72,179, 3,208, 71,179, 3, 14, 4, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 84, 1,240, 1,136,155,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,112, 72,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +192, 72,179, 3, 32, 72,179, 3, 14, 4, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 84, 1,240, 1,248,151,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,192, 72,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 16, 73,179, 3,112, 72,179, 3, 14, 4, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0,118, 1,235, 1,104,148,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 16, 73,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 96, 73,179, 3,192, 72,179, 3, 14, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,118, 1,235, 1,216,144,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 96, 73,179, 3,125, 0, 0, 0, 1, 0, 0, 0,176, 73,179, 3, 16, 73,179, 3, 14, 4, 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 97, 1, 3, 2, 72,141,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,176, 73,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 0, 74,179, 3, 96, 73,179, 3, 14, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 97, 1, 3, 2,184,137,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 0, 74,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 80, 74,179, 3,176, 73,179, 3, 0, 8, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 15, 1, 76, 1,232,119,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 80, 74,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +160, 74,179, 3, 0, 74,179, 3, 0, 8, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,188, 0, 90, 1, 8, 57,181, 3, 68, 65, 84, 65, + 28, 0, 0, 0,160, 74,179, 3,125, 0, 0, 0, 1, 0, 0, 0,240, 74,179, 3, 80, 74,179, 3, 33, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0,174, 0,151, 1, 40,134,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,240, 74,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 64, 75,179, 3,160, 74,179, 3, 14, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0,129, 1,255, 1,152,130,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 64, 75,179, 3,125, 0, 0, 0, 1, 0, 0, 0,144, 75,179, 3,240, 74,179, 3, 0, 4, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0,217, 0,233, 0,184, 4,180, 3, 68, 65, 84, 65, 28, 0, 0, 0,144, 75,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +224, 75,179, 3, 64, 75,179, 3, 32, 0, 0, 0, 14, 0, 0, 0, 0, 16, 0, 0,116, 0, 27, 1, 32,225,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,224, 75,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 48, 76,179, 3,144, 75,179, 3, 33, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0,174, 0,151, 1,176,228,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 48, 76,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +128, 76,179, 3,224, 75,179, 3, 1, 0, 0, 0, 15, 0, 0, 0, 0, 20, 0, 0, 12, 0,160, 0,144,221,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,128, 76,179, 3,125, 0, 0, 0, 1, 0, 0, 0,208, 76,179, 3, 48, 76,179, 3, 1, 0, 0, 0, 16, 0, 0, 0, + 0, 20, 0, 0,175, 0,161, 0, 0,218,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,208, 76,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 32, 77,179, 3,128, 76,179, 3, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,163, 1,254, 1,184, 0,180, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 32, 77,179, 3,125, 0, 0, 0, 1, 0, 0, 0,112, 77,179, 3,208, 76,179, 3, 14, 4, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0,129, 1,255, 1, 8,127,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,112, 77,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +192, 77,179, 3, 32, 77,179, 3, 64, 0, 0, 0, 1, 0, 0, 0, 0, 16, 0, 0,238, 0,122, 1, 40,249,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,192, 77,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 16, 78,179, 3,112, 77,179, 3, 64, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0,237, 0,119, 1,184,252,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 16, 78,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 96, 78,179, 3,192, 77,179, 3, 32, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,152, 0,114, 1,152, 60,181, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 96, 78,179, 3,125, 0, 0, 0, 1, 0, 0, 0,176, 78,179, 3, 16, 78,179, 3, 16, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 22, 1,185, 1, 40,245,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,176, 78,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 0, 79,179, 3, 96, 78,179, 3, 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,123, 0, 26, 1,176,232,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 0, 79,179, 3,125, 0, 0, 0, 1, 0, 0, 0, 80, 79,179, 3,176, 78,179, 3, 30, 4, 0, 0, 9, 0, 0, 0, + 0, 20, 0, 0,109, 2, 57, 1, 80,207,179, 3, 68, 65, 84, 65, 28, 0, 0, 0, 80, 79,179, 3,125, 0, 0, 0, 1, 0, 0, 0, +160, 79,179, 3, 0, 79,179, 3, 2, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,205, 1, 11, 2, 40,241,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0,160, 79,179, 3,125, 0, 0, 0, 1, 0, 0, 0,240, 79,179, 3, 80, 79,179, 3, 30, 4, 0, 0, 11, 0, 0, 0, + 0, 20, 0, 0,230, 0, 99, 2,112,214,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,240, 79,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 64, 80,179, 3,160, 79,179, 3, 8, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 1,185, 1,176,236,179, 3, 68, 65, 84, 65, + 28, 0, 0, 0, 64, 80,179, 3,125, 0, 0, 0, 1, 0, 0, 0,144, 80,179, 3,240, 79,179, 3, 30, 4, 0, 0, 12, 0, 0, 0, + 0, 20, 0, 0,252, 0,171, 1,224,210,179, 3, 68, 65, 84, 65, 28, 0, 0, 0,144, 80,179, 3,125, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 64, 80,179, 3,223, 13, 0, 0, 13, 0, 0, 0, 0, 4, 0, 0, 75, 1,221, 1,120,123,179, 3, 68, 65, 84, 65, + 36, 1, 0, 0,224, 80,179, 3,141, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 1, 0, 1, 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, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, + 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, + 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 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, 23,183,209, 56,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, 1, 0, 0, 0, 0, 0, 0, 0, + 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,120,203,159, 3, +130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,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,168,141,156, 3,255,255, 15, 0, 0, 0, 0, 0, +255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 73, 77, 0, 0,128, 1, 0, 0, 56, 82,179, 3, 32, 0, 0, 0, + 1, 0, 0, 0,232, 83,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 73,109, 97,103,101, 46, 48, 48, 49, 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, 85,110,116,105,116,108,101,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, 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,108,110,134, 68, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,128, 63, + 0, 0,128, 63, 73, 77, 0, 0,128, 1, 0, 0,232, 83,179, 3, 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 82,179, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 82,101,110,100,101,114, 32, 82,101,115,117,108,116, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 4, 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, 0, 0, 0, 0, + 0, 0, 0, 0,116, 41, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 67, 65, 0, 0,136, 0, 0, 0, +152, 85,179, 3, 30, 0, 0, 0, 1, 0, 0, 0, 80, 86,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97, +109,101,114, 97, 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, 9, 0,205,204, 76, 62,117,148, 96, 66, 0, 0,128, 63, 0, 0,112, 66, 0, 0,240, 65, 0, 0,192, 64, + 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, 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, 0, 0,136, 0, 0, 0, 80, 86,179, 3, + 30, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152, 85,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, + 65,116,109,111, 0, 0, 48, 49, 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, 13, 0,205,204, 76, 62,145,137, 68, 66, 0, 0,128, 63,210, 69,112, 66, 0, 0, 12, 66,161, 14,234, 64, 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, 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,132, 1, 0, 0, 8, 87,179, 3, 40, 0, 0, 0, + 1, 0, 0, 0, 72, 90,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 46, 48, 48, 49, 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, 1, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,160, 65, 0, 0, 52, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63,192, 88,179, 3, 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, + 0, 2, 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, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 32, 65, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 89,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,192, 88,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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, 80,160,153, 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,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, 80,160,153, 3, 53, 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, 32, 0, 0, 0,248, 89,179, 3, 19, 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, 76, 65, 0, 0,132, 1, 0, 0, 72, 90,179, 3, 40, 0, 0, 0, 1, 0, 0, 0,136, 93,179, 3, 8, 87,179, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 46, 48, 48, 50, 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, 2, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,160, 65,182,152,143, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 92,179, 3, 1, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 93,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 8, 1, 0, 0, 0, 92,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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,152, 93,155, 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,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, +152, 93,155, 3, 53, 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, 32, 0, 0, 0, 56, 93,179, 3, 19, 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, 76, 65, 0, 0,132, 1, 0, 0, +136, 93,179, 3, 40, 0, 0, 0, 1, 0, 0, 0,200, 96,179, 3, 72, 90,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112, +111,116, 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, 16, 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,128, 63, 0, 0,128, 63, 64, 95,179, 3, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, + 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 96,179, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 64, 95,179, 3, 55, 1, 0, 0, + 1, 0, 0, 0, 1, 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,136,164,154, 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,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,136,164,154, 3, 53, 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, 32, 0, 0, 0, +120, 96,179, 3, 19, 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, 76, 65, 0, 0,132, 1, 0, 0,200, 96,179, 3, 40, 0, 0, 0, 1, 0, 0, 0, + 8,100,179, 3,136, 93,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 49, 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, 16, 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, +128, 98,179, 3, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, + 1, 0, 0, 0, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 99,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,128, 98,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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, + 32,253,157, 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,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, 32,253,157, 3, 53, 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, 32, 0, 0, 0,184, 99,179, 3, 19, 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, + 76, 65, 0, 0,132, 1, 0, 0, 8,100,179, 3, 40, 0, 0, 0, 1, 0, 0, 0,248,102,179, 3,200, 96,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 51, 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, 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,200,182, 27, 63, 0, 0,128, 63,192,101,179, 3, 1, 0, 0, 0, 46, 26,128, 63, + 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, +192,101,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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, 56,121,154, 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,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, 56,121,154, 3, + 53, 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, + 76, 65, 0, 0,132, 1, 0, 0,248,102,179, 3, 40, 0, 0, 0, 1, 0, 0, 0,232,105,179, 3, 8,100,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 52, 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, 16, 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,205,204,204, 62,247,255,239, 65, + 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63,200,182, 27, 63, 0, 0,128, 63,176,104,179, 3, 1, 0, 0, 0, 46, 26,128, 63, + 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, +176,104,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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,171,153, 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,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,171,153, 3, + 53, 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, + 76, 65, 0, 0,132, 1, 0, 0,232,105,179, 3, 40, 0, 0, 0, 1, 0, 0, 0, 40,109,179, 3,248,102,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 54, 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, 2, 0, 0, 0, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64, 0, 0, 52, 66, + 0, 0, 72, 66,171,156, 8, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,160,107,179, 3, 2, 0, 0, 0, 78,207, 68, 65, + 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,108,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, +160,107,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, 1, 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, 64,198,153, 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,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, 64,198,153, 3, + 53, 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, 32, 0, 0, 0,216,108,179, 3, 19, 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, 76, 65, 0, 0,132, 1, 0, 0, 40,109,179, 3, + 40, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,232,105,179, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 63, 0, 0,160, 65, 0, 0, 52, 66,154,153, 25, 62, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63,224,110,179, 3, 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0,128, 63, + 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,224,110,179, 3, 55, 1, 0, 0, 1, 0, 0, 0, + 1, 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, 96,241,157, 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,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, 96,241,157, 3, 53, 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, 87, 79, 0, 0,112, 1, 0, 0, 24,112,179, 3, +124, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,141, 47, 79, 62, 64, 19,209, 62, 73, 23, 14, 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,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, 1, 0, 32, 0,128, 0, 5, 0, + 60, 0, 5, 0, 1, 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, 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, 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,184,113,179, 3, 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,113,179, 3, 19, 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, 84, 88, 0, 0,120, 0, 0, 0,224, 45, 96, 1, 28, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, 0, 0, 0, + 0, 89,155, 3, 0, 89,155, 3, 0, 89,155, 3, 0, 89,155, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,114,179, 3,255,255,255,255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, + 0, 89,155, 3, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,127,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 69, 82, 70, 68, 65, 84, 65, 4, 0, 0, 0,240,127,159, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 71, 82, 0, 0, + 76, 0, 0, 0,168,141,156, 3,252, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 82, 79,118,101,114,114,105,100,101, 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,104,122, 74, 1,160,119,179, 3,255,255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 24, 0, 0, 0,104,122, 74, 1,251, 0, 0, 0, 1, 0, 0, 0, 56,118,179, 3, 0, 0, 0, 0, 32,225,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56,118,179, 3,251, 0, 0, 0, 1, 0, 0, 0,128,118,179, 3, +104,122, 74, 1,144,221,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128,118,179, 3, +251, 0, 0, 0, 1, 0, 0, 0,200,118,179, 3, 56,118,179, 3, 0,218,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 0, 0, 0,200,118,179, 3,251, 0, 0, 0, 1, 0, 0, 0, 16,119,179, 3,128,118,179, 3, 40,249,179, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16,119,179, 3,251, 0, 0, 0, 1, 0, 0, 0, + 88,119,179, 3,200,118,179, 3, 80,207,179, 3,192, 36,203, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, + 88,119,179, 3,251, 0, 0, 0, 1, 0, 0, 0,160,119,179, 3, 16,119,179, 3,112,214,179, 3,200,104,155, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160,119,179, 3,251, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88,119,179, 3, +224,210,179, 3,136, 77,156, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,232,119,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,120,123,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 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, 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,152, 85,179, 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, 78,199, 41,188,225,230, 30,193,216,129,230, 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,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63, 0, 0, 0,128, 0, 0, 0,128, 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,105, 33,162, 51, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191,105, 33,162, 51, 0, 0, 0, 0, 78,199, 41,188,225,230, 30,193, +216,129,230, 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, + 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, + 64, 90,136, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 64, 90,136,176, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 40, 19,212, 50, + 63,252, 17,180, 0, 0,128, 63, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66, 0, 0, 92, 3, 0, 0,120,123,179, 3,115, 0, 0, 0, 1, 0, 0, 0, 8,127,179, 3,232,119,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 65,116,109,111, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 1, 0, 0, 4, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 86,179, 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, 78,199, 41,188,225,230, 30,193,216,129,230, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +173, 47,244, 63,162,155,113, 37, 40, 80,170, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 40, 80,170, 37, +162,155,113,165, 0, 0, 0, 0, 39, 80,170, 37,157, 64,169,190,163,155,113, 63, 0, 0, 0, 0,165,155,113, 37,163,155,113,191, +157, 64,169,190, 0, 0, 0, 0, 78,199, 41,188,225,230, 30,193,216,129,230, 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, 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,187, 35, 58,154, +139, 2,174, 25, 0, 0, 0, 0,151, 29,171, 37, 1, 0,128, 63, 33,110, 77, 51, 0, 0, 0, 0,135,255,255, 45,158, 64,169, 50, + 0, 0,128, 63, 0, 0, 0, 0, 30, 0,128, 48, 5, 80, 56, 53,157,216,128, 52, 0, 0,128, 63, 0, 0,128, 63, 39, 80,170, 37, +166,155,113, 37, 0, 0, 0, 0,162,155,113,165,164,155,113, 63,158, 64,169,190, 0, 0, 0, 0, 40, 80,170,165,159, 64,169, 62, +162,155,113, 63, 0, 0, 0, 0,144, 57, 41, 26,134,234,185,178,154,138, 18,180, 0, 0,128, 63,223, 13, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 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,210, 32, 80, 63, + 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 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, 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,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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 8,127,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,152,130,179, 3,120,123,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 49, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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,248,188,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,139,182, 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,184, 71,158, 3,240, 71,158, 3, 1, 0, 0, 0, 1, 0, 0, 0,113, 36,122, 61,157, 24,186,192, 28, 38, 71, 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, 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, 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,113, 36,122, 61,157, 24,186,192, + 28, 38, 71, 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, 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,116, 38, 13, 49,213,214,162, 50, + 0, 0,128, 63, 0, 0, 0, 0, 72, 95,202, 47,255,255,127,191,162,181,187, 51, 0, 0, 0, 0, 34, 75,146,189, 36,181,131,192, + 95,202,167,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, +248,164,206, 3,248,176,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,184, 71,158, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +240, 71,158, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,152,130,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 40,134,179, 3, 8,127,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 50, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,198, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 96,182, 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, 40,163,160, 3,240,159,160, 3, 1, 0, 0, 0, 1, 0, 0, 0,113, 36,122, 61,157, 24,186,192, 28, 38, 71, 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, 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, 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,113, 36,122, 61,157, 24,186,192, + 28, 38, 71, 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, 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,116, 38, 13, 49,213,214,162, 50, + 0, 0,128, 63, 0, 0, 0, 0, 72, 95,202, 47,255,255,127,191,162,181,187, 51, 0, 0, 0, 0, 34, 75,146,189, 36,181,131,192, + 95,202,167,191, 0, 0,128, 63, 14, 4, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 96,244,206, 3,120,243,198, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0, 40,163,160, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +240,159,160, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 40,134,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,184,137,179, 3,152,130,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 51, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,182, 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,240,159,163, 3, 8,207,156, 3, 1, 0, 0, 0, 1, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, 24,211,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, + 24,211,229, 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, + 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,252,118,143,165, 0, 0, 0, 0, 0, 0, 0, 0,176,193,168,165, 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,176,193, 40,155, 0, 0, 0, 53, + 0, 0, 0, 0, 0, 0,128, 63,231,126,201, 61,219,145,171, 48, 32, 19, 70, 29, 0, 0, 0, 0, 65,209,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,235, 66,172, 48,231,126,201,189, 79,216,251, 49, 0, 0, 0, 0, 18,136, 29,187,203,200,189,191, +139,139, 9, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,240,159,163, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 8,207,156, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,184,137,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 72,141,179, 3, 40,134,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 52, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,215,182, 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,224,144, 74, 1,104,206,160, 3, 1, 0, 0, 0, 1, 0, 0, 0, 38, 84,207,191, 0,225,239,192, 15,169, 70, 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, 0, 0, 0, 0, 0,128,218, 15,201, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 33,162, 51, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191,105, 33,162, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 38, 84,207,191, 0,225,239,192, + 15,169, 70, 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,105, 33,162, 51, 0, 0, 0, 0, 0, 0, 0, 0, 64, 90,136,176, 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,136, 93,191,179,218, 88,190,180, + 0, 0,128, 52, 0, 0,128, 63, 91,184, 22, 52, 0, 0,128,191, 28,112, 97, 51, 0, 0, 0, 0,104, 33,162, 51,176, 22,140, 39, + 0, 0,128, 63, 0, 0, 0, 0,255,255,127,191, 0,152, 86,179, 0, 58, 50, 51, 0, 0, 0, 0,131,217, 27,192,152, 0,206,191, + 70,208,166,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 16,140,206, 3, 56,152,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,144, 74, 1, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +104,206,160, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 72,141,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,216,144,179, 3,184,137,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 53, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,139,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 2,183, 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,136,114,155, 3,152,178,155, 3, 1, 0, 0, 0, 1, 0, 0, 0, 38, 84,207,191, 0,225,239,192, 15,169, 70, 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, 0, 0, 0, 0, 0,128,218, 15,201, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 33,162, 51, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191,105, 33,162, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 38, 84,207,191, 0,225,239,192, + 15,169, 70, 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,105, 33,162, 51, 0, 0, 0, 0, 0, 0, 0, 0, 64, 90,136,176, 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,136, 93,191,179,218, 88,190,180, + 0, 0,128, 52, 0, 0,128, 63, 91,184, 22, 52, 0, 0,128,191, 28,112, 97, 51, 0, 0, 0, 0,104, 33,162, 51,176, 22,140, 39, + 0, 0,128, 63, 0, 0, 0, 0,255,255,127,191, 0,152, 86,179, 0, 58, 50, 51, 0, 0, 0, 0,131,217, 27,192,152, 0,206,191, + 70,208,166,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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,115,206, 3,120,127,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,136,114,155, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +152,178,155, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,216,144,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,104,148,179, 3, 72,141,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 54, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224,114,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 44,183, 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,136, 60,158, 3,144, 64,158, 3, 1, 0, 0, 0, 1, 0, 0, 0, 93, 0,223, 63,205,220,239,192,222,170, 70, 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, 0, 0, 0, 0, 0,128,218, 15,201,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 33,162, 51, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,105, 33,162, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 93, 0,223, 63,205,220,239,192, +222,170, 70, 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,105, 33,162,179,105, 33, 34,167, 0, 0, 0, 0, 64, 90,136, 48, 0, 0,128, 63, + 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 66, 72,191, 51, 87, 98,185,180, + 0, 0, 0, 53, 0, 0,128, 63,223,139, 24, 52, 0, 0,128, 63,138, 8, 26,179, 0, 0, 0, 0,104, 33,162,179, 91, 81,180, 39, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2,184,145,179,211, 40, 97, 51, 0, 0, 0, 0,231,225, 27, 64,237, 83,224,191, +227,211,166,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, +224, 90,206, 3,224,102,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,136, 60,158, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +144, 64,158, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,104,148,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,248,151,179, 3,216,144,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 55, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 59,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,183, 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,176,127,153, 3,232, 15,160, 3, 1, 0, 0, 0, 1, 0, 0, 0, 93, 0,223, 63,205,220,239,192,222,170, 70, 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, 0, 0, 0, 0, 0,128,218, 15,201,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,105, 33,162, 51, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,105, 33,162, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 93, 0,223, 63,205,220,239,192, +222,170, 70, 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,105, 33,162,179,105, 33, 34,167, 0, 0, 0, 0, 64, 90,136, 48, 0, 0,128, 63, + 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 66, 72,191, 51, 87, 98,185,180, + 0, 0, 0, 53, 0, 0,128, 63,223,139, 24, 52, 0, 0,128, 63,138, 8, 26,179, 0, 0, 0, 0,104, 33,162,179, 91, 81,180, 39, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2,184,145,179,211, 40, 97, 51, 0, 0, 0, 0,231,225, 27, 64,237, 83,224,191, +227,211,166,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 32, 73,206, 3, 0, 82,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,176,127,153, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +232, 15,160, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,248,151,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,136,155,179, 3,104,148,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 56, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 61,195, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,130,183, 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,168,232,160, 3, 96, 76,154, 3, 1, 0, 0, 0, 1, 0, 0, 0,185,115,122, 61, 28,209, 18,193, 27, 38, 71, 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, 0, 0, 0, 0, 0,128,218, 15, 73,192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191,105, 33, 34,180, 0, 0, 0, 0, 0, 0, 0, 0,105, 33, 34, 52, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,185,115,122, 61, 28,209, 18,193, + 27, 38, 71, 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, 0, 0, 0, 0, 0, 0,128,167, 0, 0, 0, 0, 0,164, 5, 47, 0, 0,128, 63, + 0,164, 5,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,146,243,109, 49, 0,157, 30, 50, +146,243,109,153, 0, 0,128, 63, 0, 0,128,191,106, 33, 34, 52,203,167,116, 28, 0, 0, 0, 0,112, 57,108, 48, 6, 39,170,179, + 0, 0,128, 63, 0, 0, 0, 0,106, 33, 34, 52, 1, 0,128, 63,255,255,159, 51, 0, 0, 0, 0,213,114,146, 61, 78, 92, 65, 63, + 93,202,167,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, +192,114,155, 3, 16,158,155, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,168,232,160, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 96, 76,154, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,136,155,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,159,179, 3,248,151,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 48, 57, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,176,137,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,173,183, 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,112,223,154, 3, 24,159,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,185,115,122, 61, 28,209, 18,193, 27, 38, 71, 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, 0, 0, 0, 0, 0,128,218, 15, 73,192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191,105, 33, 34,180, 0, 0, 0, 0, 0, 0, 0, 0,105, 33, 34, 52, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,185,115,122, 61, 28,209, 18,193, + 27, 38, 71, 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, 0, 0, 0, 0, 0, 0,128,167, 0, 0, 0, 0, 0,164, 5, 47, 0, 0,128, 63, + 0,164, 5,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,146,243,109, 49, 0,157, 30, 50, +146,243,109,153, 0, 0,128, 63, 0, 0,128,191,106, 33, 34, 52,203,167,116, 28, 0, 0, 0, 0,112, 57,108, 48, 6, 39,170,179, + 0, 0,128, 63, 0, 0, 0, 0,106, 33, 34, 52, 1, 0,128, 63,255,255,159, 51, 0, 0, 0, 0,213,114,146, 61, 78, 92, 65, 63, + 93,202,167,191, 0, 0,128, 63, 14, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 80, 6,154, 3, 40, 1,155, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,112,223,154, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,159,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,159,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,163,179, 3,136,155,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 48, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,215,183, 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,224,162,179, 3, 24,163,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,227,252,129,193, 14,112,164, 64, 9,197,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,227,252,129,193, 14,112,164, 64, + 9,197,229, 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, + 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, 17, 66,216,178, 0, 0, 0, 0, 0, 0, 0, 0,176,193,168,165, 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,176,193, 40, 27, 0, 0, 0,181, + 0, 0, 0, 52, 0, 0,128, 63,231,126,201, 61, 54,219, 4,178,204,187,104, 43, 0, 0, 0, 0, 95, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,219,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0,148,126,204, 63,204,200,189,191, + 75,156, 20, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,162,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,163,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,163,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,167,179, 3, 80,159,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 49, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,228,183, 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,224,166,179, 3, 24,167,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,227,252,129,193, 14,112,164, 64, 9,197,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,227,252,129,193, 14,112,164, 64, + 9,197,229, 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, + 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, 17, 66,216,178, 0, 0, 0, 0, 0, 0, 0, 0,176,193,168,165, 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,176,193, 40, 27, 0, 0, 0,181, + 0, 0, 0, 52, 0, 0,128, 63,231,126,201, 61, 54,219, 4,178,204,187,104, 43, 0, 0, 0, 0, 95, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,219,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0,148,126,204, 63,204,200,189,191, + 75,156, 20, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,166,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,167,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,167,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,171,179, 3, 80,163,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 50, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,241,183, 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,224,170,179, 3, 24,171,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 8, 56,130, 65, 14,112,164, 64, 35,197,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 8, 56,130, 65, 14,112,164, 64, + 35,197,229, 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, + 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,254,255,127, 63, 15, 66,216,178, 0, 0, 0, 0, 0, 0, 0, 0,138,222,112, 38, 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,138,222,112, 28, 0, 0,128, 53, + 0, 0, 0, 0, 0, 0,128, 63,230,126,201, 61, 91, 75,181,177, 58,240,226,171, 0, 0, 0, 0, 94, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,217,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0,127, 30,205,191,203,200,189,191, +211,135, 20, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,170,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,171,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,171,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,175,179, 3, 80,167,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 51, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,254,183, 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,224,174,179, 3, 24,175,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 8, 56,130, 65, 14,112,164, 64, 35,197,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 8, 56,130, 65, 14,112,164, 64, + 35,197,229, 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, + 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,254,255,127, 63, 15, 66,216,178, 0, 0, 0, 0, 0, 0, 0, 0,138,222,112, 38, 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,138,222,112, 28, 0, 0,128, 53, + 0, 0, 0, 0, 0, 0,128, 63,230,126,201, 61, 91, 75,181,177, 58,240,226,171, 0, 0, 0, 0, 94, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,217,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0,127, 30,205,191,203,200,189,191, +211,135, 20, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,174,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,175,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,175,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,179,179, 3, 80,171,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 52, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 12,184, 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,224,178,179, 3, 24,179,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,176, 38, 2, 66, 14,112,164, 64, 46,149,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,176, 38, 2, 66, 14,112,164, 64, + 46,149,229, 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, + 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,254,255,127, 63,120,137,214,177,176,159,162,177, 0, 0, 0, 0,138,222,112, 38, 0, 0,128, 63, +177,159, 34, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,254,255,127, 54,255,255,255, 52, +255,255,127, 52, 0, 0,128, 63,231,126,201, 61,224,158,198, 48,128, 51,197,170, 0, 0, 0, 0, 95, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,218,145,171, 48,231,126,201,189,160,222,251, 49, 0, 0, 0, 0,125,242, 76,192,203,200,189,191, +246, 70, 58, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,178,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,179,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,179,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,183,179, 3, 80,175,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 53, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 25,184, 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,224,182,179, 3, 24,183,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,176, 38, 2, 66, 14,112,164, 64, 46,149,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,176, 38, 2, 66, 14,112,164, 64, + 46,149,229, 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, + 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,254,255,127, 63,120,137,214,177,176,159,162,177, 0, 0, 0, 0,138,222,112, 38, 0, 0,128, 63, +177,159, 34, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,254,255,127, 54,255,255,255, 52, +255,255,127, 52, 0, 0,128, 63,231,126,201, 61,224,158,198, 48,128, 51,197,170, 0, 0, 0, 0, 95, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,218,145,171, 48,231,126,201,189,160,222,251, 49, 0, 0, 0, 0,125,242, 76,192,203,200,189,191, +246, 70, 58, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,182,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,183,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,183,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,187,179, 3, 80,179,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 54, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 38,184, 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,224,186,179, 3, 24,187,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,237, 10, 2,194, 14,112,164, 64,184,147,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,237, 10, 2,194, 14,112,164, 64, +184,147,229, 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, + 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,254,255,127, 63,130,206, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0,138,222,112, 38, 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,138,222,112, 28, 0, 0,128, 53, + 0, 0, 0, 0, 0, 0,128, 63,231,126,201, 61, 24, 67,144,176, 48,212, 86, 43, 0, 0, 0, 0, 94, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,218,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0, 98,165, 76, 64,203,200,189,191, + 86,109, 59, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,186,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,187,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,187,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,191,179, 3, 80,183,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 55, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 51,184, 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,224,190,179, 3, 24,191,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,237, 10, 2,194, 14,112,164, 64,184,147,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,237, 10, 2,194, 14,112,164, 64, +184,147,229, 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, + 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,254,255,127, 63,130,206, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0,138,222,112, 38, 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,138,222,112, 28, 0, 0,128, 53, + 0, 0, 0, 0, 0, 0,128, 63,231,126,201, 61, 24, 67,144,176, 48,212, 86, 43, 0, 0, 0, 0, 94, 81,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,218,145,171, 48,231,126,201,189,161,222,251, 49, 0, 0, 0, 0, 98,165, 76, 64,203,200,189,191, + 86,109, 59, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,190,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,191,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,191,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,195,179, 3, 80,187,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 56, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 64,184, 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,224,194,179, 3, 24,195,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 13,134, 34,194, 58, 92, 63,192,184,147,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15,201, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144,252, 77, 53,178,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34,193,144,252, 77, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 13,134, 34,194, 58, 92, 63,192, +184,147,229, 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, + 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, 34,187,154, 49,225,149,196, 23, 0, 0, 0, 0, 16, 58,194, 39, 0, 0,128, 63, +177,159,162, 37, 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, 56,150, 2, 50,231,126,201,189, 48, 48, 63,171, 0, 0, 0, 0, 51, 57,255, 49,130,163, 33, 38, +232,126,201, 61, 0, 0, 0, 0,231,126,201,189, 54, 57,255,177,162,222,251, 49, 0, 0, 0, 0,240,212, 46,191,239,198,127,192, + 86,109, 59, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,194,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,195,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,195,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,199,179, 3, 80,191,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 49, 57, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 78,184, 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,224,198,179, 3, 24,199,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 13,134, 34,194, 58, 92, 63,192,184,147,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15,201, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144,252, 77, 53,178,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34,193,144,252, 77, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 13,134, 34,194, 58, 92, 63,192, +184,147,229, 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, + 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, 34,187,154, 49,225,149,196, 23, 0, 0, 0, 0, 16, 58,194, 39, 0, 0,128, 63, +177,159,162, 37, 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, 56,150, 2, 50,231,126,201,189, 48, 48, 63,171, 0, 0, 0, 0, 51, 57,255, 49,130,163, 33, 38, +232,126,201, 61, 0, 0, 0, 0,231,126,201,189, 54, 57,255,177,162,222,251, 49, 0, 0, 0, 0,240,212, 46,191,239,198,127,192, + 86,109, 59, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,198,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,199,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,199,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,203,179, 3, 80,195,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 50, 48, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 91,184, 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,224,202,179, 3, 24,203,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,176,160, 34, 66, 28, 67, 63,192, 45,149,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15,201,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144,252, 77, 53,178,159, 34,193, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,144,252, 77, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,176,160, 34, 66, 28, 67, 63,192, + 45,149,229, 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, + 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, 34,187,154,177, 0, 0, 0, 0, 0, 0, 0, 0, 16, 58,194,167, 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, 16, 58,194,156, 0, 0,128, 52, + 0, 0, 0, 0, 0, 0,128, 63, 28,240,238, 49,231,126,201, 61,240, 90, 33,171, 0, 0, 0, 0, 51, 57,255,177,130,163, 33, 38, +232,126,201, 61, 0, 0, 0, 0,231,126,201, 61, 54, 57,255,177,163,222,251, 49, 0, 0, 0, 0,210,222, 46, 63, 34, 9,128,192, +191, 71, 58, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,202,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,203,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,203,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 80,207,179, 3, 80,199,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, + 50, 49, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,104,184, 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,224,206,179, 3, 24,207,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,176,160, 34, 66, 28, 67, 63,192, 45,149,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15,201,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,144,252, 77, 53,178,159, 34,193, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,144,252, 77, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0,176,160, 34, 66, 28, 67, 63,192, + 45,149,229, 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, + 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, 34,187,154,177, 0, 0, 0, 0, 0, 0, 0, 0, 16, 58,194,167, 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, 16, 58,194,156, 0, 0,128, 52, + 0, 0, 0, 0, 0, 0,128, 63, 28,240,238, 49,231,126,201, 61,240, 90, 33,171, 0, 0, 0, 0, 51, 57,255,177,130,163, 33, 38, +232,126,201, 61, 0, 0, 0, 0,231,126,201, 61, 54, 57,255,177,163,222,251, 49, 0, 0, 0, 0,210,222, 46, 63, 34, 9,128,192, +191, 71, 58, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0,224,206,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, + 24,207,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 80,207,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,224,210,179, 3, 80,203,179, 3, 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, 1, 0, 0, 4, 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,136, 93,179, 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,170, 77,152, 65,248,108, 90,191, 90,202,168,191, + 0, 0, 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, 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61, +176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,170, 77,152, 65,248,108, 90,191, + 90,202,168,191, 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,220, 19,149,176,206,185,149,179, 0, 0, 0, 0,101, 61, 84, 51, 1, 0,128, 63, + 45,173,146, 51, 0, 0, 0, 0,180,106, 15, 51, 67, 91, 19,178, 0, 0,128, 63, 0, 0, 0, 0,229,162, 50, 53,251, 88,214, 52, +187,255,179, 53, 0, 0,128, 63,136,247,255, 62,164, 21, 44,191,251,203, 11, 63, 0, 0, 0, 0,138, 26,182, 62,176,248, 59, 63, + 46, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 26, 67,194,189,218, 45, 27, 63, 0, 0, 0, 0, 4, 80,121,193,162,189, 99, 65, + 13, 24, 70,192, 0, 0,128, 63, 30, 4, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66, 0, 0, 92, 3, 0, 0,224,210,179, 3,115, 0, 0, 0, 1, 0, 0, 0,112,214,179, 3, 80,207,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 49, 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, 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,200, 96,179, 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, 98,160, 52,193, 56,135, 93,193,153,227, 19,193, 0, 0, 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, + 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63, +138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, + 47, 7, 20, 63, 0, 0, 0, 0, 98,160, 52,193, 56,135, 93,193,153,227, 19,193, 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, 12, 73,149, 51, +183,223, 34,179, 0, 0, 0, 0,180, 66, 41, 50, 0, 0,128, 63,176, 27,138, 49, 0, 0, 0, 0,201, 75, 13, 50, 76, 10,177, 50, + 1, 0,128, 63, 0, 0, 0, 0, 41,189, 56,179,113,162,231,180, 67,151,100,180, 0, 0,128, 63,139,247,255, 62,165, 21, 44,191, +252,203, 11, 63, 0, 0, 0, 0,141, 26,182, 62,176,248, 59, 63, 46, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 19, 67,194,189, +216, 45, 27, 63, 0, 0, 0, 0, 42,133, 74, 65, 29, 20,102, 63,116,194, 34, 65, 0, 0,128, 63, 30, 4, 0, 0, 0, 20, 0, 0, + 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, + 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,112,214,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 0,218,179, 3,224,210,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 50, 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, 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,232,105,179, 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,111, 56,183,192, 61, 86, 90,193,242,190, 40, 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,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,143,104,191, 93, 33, 11,191,232, 45, 17, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,134,194, 12,191, 1,236, 39, 63,180, 97, 4, 63, 0, 0, 0, 0, 37,182, 59,191,170, 20,169,189, + 65,200, 44,191, 0, 0, 0, 0, 11,208,204,190, 93, 18, 64,191,215,191, 6, 63, 0, 0, 0, 0,111, 56,183,192, 61, 86, 90,193, +242,190, 40, 65, 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,238,165, 47,180,227,129, 13, 50, 0, 0, 0, 0,163, 29,131,178, 1, 0,128, 63, + 76,221,150,177, 0, 0, 0, 0, 14, 36, 14,179,106,112,163, 48, 0, 0,128, 63, 0, 0, 0, 0,255,187,156,179, 91, 51,158,181, +179,247,156,180, 0, 0,128, 63,135,194, 12,191, 35,182, 59,191, 12,208,204,190, 0, 0, 0, 0,181, 97, 4, 63, 65,200, 44,191, +213,191, 6, 63, 0, 0, 0, 0, 0,236, 39,191,162, 20,169, 61, 92, 18, 64, 63, 0, 0, 0, 0,135, 79,167,192, 33,228,179, 63, + 21,212, 26,193, 0, 0,128, 63, 30, 4, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66, 0, 0, 92, 3, 0, 0, 0,218,179, 3,115, 0, 0, 0, 1, 0, 0, 0,144,221,179, 3,112,214,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 51, 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, 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, 8,100,179, 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,176,147,104, 64, 42, 84, 23,193,116, 77,171, 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, + 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63, +138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, + 47, 7, 20, 63, 0, 0, 0, 0,176,147,104, 64, 42, 84, 23,193,116, 77,171, 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,197,201, 17,180, + 99,220,102, 50, 0, 0, 0, 0,123,165,191, 50,254,255,127, 63, 10,194,140, 50, 0, 0, 0, 0, 41,160,180,178, 91,103, 73, 50, +254,255,127, 63, 0, 0, 0, 0,254,255,127, 52,254,255,127,181,253,255,255, 52, 0, 0,128, 63,136,247,255, 62,164, 21, 44,191, +251,203, 11, 63, 0, 0, 0, 0,138, 26,182, 62,175,248, 59, 63, 45, 7, 20, 63, 0, 0, 0, 0, 37, 39, 74,191, 18, 67,194,189, +217, 45, 27, 63, 0, 0, 0, 0, 88, 99, 93,192,122, 98, 80,190,223,119,112,192, 0, 0,128, 63, 1, 0, 0, 0, 0, 20, 0, 0, + 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, + 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,144,221,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 32,225,179, 3, 0,218,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 52, 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, 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,248,102,179, 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,249,147,251,192,206, 0, 24,193, 67,131,104,192, + 0, 0, 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, 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61, +176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,249,147,251,192,206, 0, 24,193, + 67,131,104,192, 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,254,255,127, 63, 55,105,222, 50,186,168, 17, 51, 0, 0, 0, 0,243,228, 47,178, 0, 0,128, 63, + 81, 76,155,178, 0, 0, 0, 0,170,191, 22, 50,214, 89, 50, 51,254,255,127, 63, 0, 0, 0, 0,254,255,127,181, 0, 0,128,181, + 35, 5,136,168, 0, 0,128, 63,139,247,255, 62,165, 21, 44,191,252,203, 11, 63, 0, 0, 0, 0,140, 26,182, 62,175,248, 59, 63, + 45, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 20, 67,194,189,217, 45, 27, 63, 0, 0, 0, 0,147,142,176, 64,101, 22,170,191, + 27, 28,246, 64, 0, 0,128, 63, 1, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66, 0, 0, 92, 3, 0, 0, 32,225,179, 3,115, 0, 0, 0, 1, 0, 0, 0,176,228,179, 3,144,221,179, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 56, 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, 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, 40,109,179, 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,145, 75,188, 63, 44,197,107,193, 5,147, 81, 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, +218, 15,201, 63, 0, 0,128, 37,255,255,127, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,255,255,127, 37, + 0, 0,128,165, 0, 0, 0, 0,255,255,127, 37,105, 33,162, 51, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 37, 0, 0,128,191, +105, 33,162, 51, 0, 0, 0, 0,145, 75,188, 63, 44,197,107,193, 5,147, 81, 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,254,255,127, 63, 44,197,107, 53, + 4,147, 81,180, 0, 0, 0, 0,253,255,127, 37, 0, 0,128, 63, 64, 90,136, 48, 0, 0, 0, 0,254,255,127,165, 44,197,107,155, + 0, 0,128, 63, 0, 0, 0, 0,254,255,255, 51,255,255,255,181,254,255,127, 52, 0, 0,128, 63, 0, 0,128, 63, 25, 58,194,178, + 67,191,128,179, 0, 0, 0, 0, 4, 0,128,165, 0, 0,128, 63,254,255,255, 39, 0, 0, 0, 0,156, 90,241, 49,220, 13,171,177, +255,255,127, 63, 0, 0, 0, 0, 33,159,189,191, 47,164,188,191,151,188,153,192, 0, 0,128, 63, 32, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, + 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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, 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, 79, 66, 0, 0, 92, 3, 0, 0,176,228,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,176,232,179, 3, 32,225,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 0, 0, +108, 97,110,101, 46, 48, 48, 51, 0, 0, 0, 0, 1, 0, 0, 4, 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,216,194,182, 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, 64,232,179, 3,120,232,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, 24,211,229, 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,178,159, 34, 65,178,159, 34, 65, +177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180, 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,159, 34, 65, 0, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, + 24,211,229, 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, + 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,252,118,143,165, 0, 0, 0, 0, 0, 0, 0, 0,176,193,168,165, 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,176,193, 40,155, 0, 0, 0, 53, + 0, 0, 0, 0, 0, 0,128, 63,231,126,201, 61,219,145,171, 48, 32, 19, 70, 29, 0, 0, 0, 0, 65,209,217,164, 51, 57,255, 49, +232,126,201, 61, 0, 0, 0, 0,235, 66,172, 48,231,126,201,189, 79,216,251, 49, 0, 0, 0, 0, 18,136, 29,187,203,200,189,191, +139,139, 9, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0, 64,232,179, 3, 0, 0, 0, 0, 1, 0, 0, 0,152, 64,181, 3, 68, 65, 84, 65, 4, 0, 0, 0, +120,232,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,176,232,179, 3,115, 0, 0, 0, + 1, 0, 0, 0,176,236,179, 3,176,228,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,162,186, 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, 64,236,179, 3,120,236,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,100, 82, 7,189, 21,204,103,191,241,165,230, 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,153, 39,155, 64,153, 39,155, 64, +153, 39,155, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63, 0, 0,192, 37,255,255,255, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,153, 39,155, 64,152, 39, 27, 38,102,187,232,166, 0, 0, 0, 0,102,187,232, 38,157,134,196, 52, +153, 39,155, 64, 0, 0, 0, 0,154, 39, 27, 38,153, 39,155,192,157,134,196, 52, 0, 0, 0, 0,100, 82, 7,189, 21,204,103,191, +241,165,230, 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, + 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,236, 48,206,152, 9, 66, 41, 24, 0, 0, 0, 0,216, 55, 60,152, 0, 0,128, 63, + 88,133,105,166, 0, 0, 0, 0,226,159, 91,151, 64,218, 93, 38, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 25, 50, 83, 62,147,101,158, 36, 27, 50,211, 35, 0, 0, 0, 0,147,101,158,164, 25, 50, 83, 62, + 59,119,189, 38, 0, 0, 0, 0, 0, 94,204,173, 16, 58, 97,175, 25, 50, 83, 62, 0, 0, 0, 0,135, 62,153, 59,184, 97,110,185, +118, 71,238, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 4, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0, 64,236,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, +120,236,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,176,236,179, 3,115, 0, 0, 0, + 1, 0, 0, 0, 40,241,179, 3,176,232,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, + 50, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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,176, 94,181, 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,176,240,179, 3, +176,240,179, 3, 64,240,179, 3,120,240,179, 3, 1, 0, 0, 0, 1, 0, 0, 0,242,187,213,191,194,145,134, 63,254,100, 35, 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,243, 0, 28, 65,246, 0, 28, 65, +243, 0, 28, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,110,135, 63,180,169, 59, 62,138,115, 1,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,198, 49, 6, 65,115,154,148,192, 3,113,227,191, 0, 0, 0, 0,159,250,106, 64,189,207, 91, 64, + 80,170, 5, 65, 0, 0, 0, 0, 46,151, 86,192,125, 94,251,192,188,127,150, 64, 0, 0, 0, 0,242,187,213,191,194,145,134, 63, +254,100, 35, 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,220,198, 33,177, 33, 91, 79,179, 0, 0, 0, 0,132, 62,152, 49, 0, 0,128, 63, + 52,168,172, 50, 0, 0, 0, 0, 31, 6, 96,177,234,190, 21, 51, 0, 0,128, 63, 0, 0, 0, 0,212, 90,228, 50,171,224,143,179, +223, 27,189,175, 0, 0,128, 63,143,174,180, 61,160, 48, 30, 61,223,118, 16,189, 0, 0, 0, 0,162, 29,153,188, 38,248,179, 61, +115,162, 74, 61, 0, 0, 0, 0, 15, 21, 72, 61,160,250, 19,189, 88, 57,169, 61, 0, 0, 0, 0, 4,107, 50, 63, 88, 46,204,190, +177,206, 79, 63, 0, 0,128, 63, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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, +169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 4, 0, 0, 0, 64,240,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, +120,240,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,176,240,179, 3, 79, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 31, 0, 0, 0, 83,117, 98,115,117,114,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, 1, 0, + 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 40,241,179, 3,115, 0, 0, 0, 1, 0, 0, 0, + 40,245,179, 3,176,236,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 51, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,243,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,117,184, 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, +184,244,179, 3,240,244,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 16,194,203,187,155, 89, 45, 63,244,153,230, 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, 56,135, 72, 63, 56,135, 72, 63, 56,135, 72, 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, 56,135, 72, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,135, 72, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,135, 72, 63, 0, 0, 0, 0, 16,194,203,187,155, 89, 45, 63,244,153,230, 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, 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, 57,135,200, 47, 57,135,200,178, 1, 0,128, 63, 0, 0, 0, 0,180,192,175,176, 32,132,146, 51,193, 40, 10,179, + 0, 0,128, 63,144,104,163, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 33, 52, 34,252,250,206, 51,144,104,163, 63, + 0, 0, 0, 0, 60,240,202,173,144,104,163,191,130, 64,204, 51, 0, 0, 0, 0,105, 93,173,187,172,176, 88,193,178, 56,118,186, + 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, + 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 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,144,189,206, 3, +176, 1,206, 3, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 4, 0, 0, 0,184,244,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,240,244,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 40,245,179, 3,115, 0, 0, 0, 1, 0, 0, 0, + 40,249,179, 3, 40,241,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 52, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,117,184, 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, +184,248,179, 3,240,248,179, 3, 1, 0, 0, 0, 1, 0, 0, 0, 0, 31, 10, 58, 59, 94,236, 63,236, 84,231, 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, 91,188,110, 63, 91,188,110, 63, 91,188,110, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91,188,110, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 50,151, 51, 91,188,110, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 91,188,110,191, 90, 50,151, 51, 0, 0, 0, 0, 0, 31, 10, 58, 59, 94,236, 63,236, 84,231, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255,127, 63,226, 53, 25,179, + 0, 0, 0, 0, 0, 0, 0, 0,167,120,247,166, 1, 0,128, 63, 0, 0, 0, 0,183,132, 39,174,239,106,181,179,116,226,155,179, + 0, 0,128, 63,160, 65,137, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,204,221,150,160, 65,137, 63,194,226, 40, 40, + 0, 0, 0, 0,248,127, 14, 45,115,141,149,176,161, 65,137, 63, 0, 0, 0, 0, 29, 80, 63,188,103, 95,226,187, 87, 19, 74, 65, + 0, 0,128, 63, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, + 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 4, 0, 0, 0,184,248,179, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,240,248,179, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 40,249,179, 3,115, 0, 0, 0, 1, 0, 0, 0, +184,252,179, 3, 40,245,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 53, 0, 48, 48, + 51, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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, 72, 90,179, 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,128,155,195,189, 20,145,188, 64, 94,220, 88, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,221,180,134, 63, 48,190,141, 37,253, 55, 57, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63,253, 55, 57, 35, 48,190,141,165, 0, 0, 0, 0,219,128,112, 37, 52,177,253, 62, 94, 93, 94, 63, + 0, 0, 0, 0, 52,133, 22, 37, 94, 93, 94,191, 52,177,253, 62, 0, 0, 0, 0,128,155,195,189, 20,145,188, 64, 94,220, 88, 65, + 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,118, 42, 31, 25,242,108,131,153, 0, 0, 0, 0, 0, 0, 0,176, 0, 0,128, 63,210, 21, 66,178, + 0, 0, 0, 0, 5, 0, 0,176, 25,245,158, 50, 1, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 50,118, 42,159, 11,242,108, 3,140, + 0, 0,128, 63, 0, 0,128, 63,219,128,112, 37, 53,133, 22, 37, 0, 0, 0, 0, 80, 90,231,174, 94, 93, 94, 63, 52,177,253, 62, + 0, 0, 0, 0, 0, 68,239,172, 50,177,253,190, 95, 93, 94, 63, 0, 0, 0, 0,150, 98,174, 61, 85,101,144,193,196,124,253, 64, + 0, 0,128, 63, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 7, 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,236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 64, 1, 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, 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, 79, 66, 0, 0, + 92, 3, 0, 0,184,252,179, 3,115, 0, 0, 0, 1, 0, 0, 0,184, 0,180, 3, 40,249,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 54, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,185,186, 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, 72, 0,180, 3,128, 0,180, 3, 1, 0, 0, 0, 1, 0, 0, 0, + 94, 52,252,190,174,101,228, 65,141,116, 17, 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,235,239, 30, 66,236,239, 30, 66,235,239, 30, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,138,174, 95, 63, + 98,132,123, 37, 61, 56, 87,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,239, 30, 66,105,158, 5,168,108, 39, 28,168, + 0, 0, 0, 0,212,129, 77, 40, 66, 15,204, 65,158,186,243, 65, 0, 0, 0, 0, 55, 89, 13,165,156,186,243,193, 65, 15,204, 65, + 0, 0, 0, 0, 94, 52,252,190,174,101,228, 65,141,116, 17, 65, 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,151,169,232, 24,151,190,157, 25, + 0, 0, 0, 0, 21, 24,149, 24, 0, 0,128, 63,109,157, 59,178, 0, 0, 0, 0,191,231, 64,153, 1,158,199,178, 1, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,101, 43,206, 60, 25, 74, 5, 35,141, 90,183,159, + 0, 0, 0, 0, 41,143,202,162,101, 20,158, 60,193, 89,132, 60, 0, 0, 0, 0,188, 83,173, 34,192, 89,132,188,103, 20,158, 60, + 0, 0, 0, 0, 11,215, 70, 60, 61, 43, 67,191,185,241, 31, 63, 0, 0,128, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0, +143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 72, 0,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,128, 0,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, + 92, 3, 0, 0,184, 0,180, 3,115, 0, 0, 0, 1, 0, 0, 0,184, 4,180, 3,184,252,179, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66,112,114,101,118,105,101,119, 99,117, 98,101, 0,117, 98,101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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, 64,193,186, 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, 72, 4,180, 3,128, 4,180, 3, 1, 0, 0, 0, 1, 0, 0, 0, +128,253, 88, 59,220,118,160, 63, 0, 15, 37, 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, 84, 88, 68, 64, 84, 88, 68, 64, 83, 88, 68, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,190,237, 62, +108,230,217,190, 20,151, 52, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 38, 8, 64,191,228,231, 63,186, 31,162, 63, + 0, 0, 0, 0, 35,118, 13,192, 2, 61,220, 63, 31, 44,160, 63, 0, 0, 0, 0,166, 52,234, 60,102,223,227,191, 55,229, 31, 64, + 0, 0, 0, 0,128,253, 88, 59,220,118,160, 63, 0, 15, 37, 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,187,122,172,178,103,144, 8, 50, + 0, 0, 0, 0, 7,239, 27,179, 0, 0,128, 63,247,131,152,178, 0, 0, 0, 0,149,110,134, 50,189,195,169, 50, 1, 0,128, 63, + 0, 0, 0, 0,255,223,172, 50, 56, 88,136,179,159,134, 16,180, 0, 0,128, 63, 10,115,103, 62,201,122,112,190,191, 17, 71, 59, + 0, 0, 0, 0,116,205, 9, 62,205, 36, 8, 62,136,232,135, 62, 0, 0, 0, 0, 1, 27, 69,190,224, 50, 59,190, 25,176, 65, 62, + 0, 0, 0, 0,110,176, 16,192,158, 71, 9,192,115, 90,244, 63, 0, 0,128, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0, +143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 72, 4,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,128, 4,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, + 92, 3, 0, 0,184, 4,180, 3,115, 0, 0, 0, 1, 0, 0, 0, 8, 57,181, 3,184, 0,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 66,112,114,101,118,105,101,119,104, 97,105,114, 0,108, 97,110,101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 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, 8,208,182, 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, 16,137,156, 3, 16,137,156, 3, 72, 8,180, 3,128, 8,180, 3, 1, 0, 0, 0, 1, 0, 0, 0, + 86, 92,200, 63, 7,205,227, 63,149,199, 9,189, 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,126, 47, 64,234,126, 47, 64,236,126, 47, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,225, 80, 2, 63, + 5,211, 15,191, 92,219, 18, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,254, 18, 64, 23,209,169, 62, 27,251,186, 63, + 0, 0, 0, 0, 71,254,133,191,207, 40, 17, 64,229,194,144, 63, 0, 0, 0, 0, 78, 38,137,191, 48,162,192,191,125,176, 1, 64, + 0, 0, 0, 0, 86, 92,200, 63, 7,205,227, 63,149,199, 9,189, 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,225,128, 25,179,157,103, 88,179, + 0, 0, 0, 0,249,162,132, 50, 1, 0,128, 63, 89,156,139, 51, 0, 0, 0, 0,225,204,139,179,160, 96,185,178, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 0, 52, 1, 0, 0,180, 1, 0, 84,180, 0, 0,128, 63,244,100,156, 62,135,143, 14,190, 52,235, 17,190, + 0, 0, 0, 0,175,239, 70, 62,102, 4, 26, 62, 72,251,137, 62, 0, 0, 0, 0,174,172, 52,189,211,112,154,190, 67,243, 76, 62, + 0, 0, 0, 0,149, 56, 36,191,139, 98, 66,192,168, 5, 68, 64, 0, 0,128, 63, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0, +143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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,168, 90,154, 3,168, 90,154, 3,184, 8,180, 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, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 72, 8,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,128, 8,180, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +128, 0, 0, 0,184, 8,180, 3,117, 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,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, 0, 0, 0, 0, 68, 65, 84, 65, 76, 1, 0, 0,168, 90,154, 3, 66, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,203,186, 3,104, 9,180, 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, +244,100,156, 62,134,143, 14,190, 52,235, 17,190, 0, 0, 0, 0,172,172, 52, 61,211,112,154, 62, 69,243, 76,190, 0, 0, 0, 0, +176,239, 70, 62,102, 4, 26, 62, 73,251,137, 62, 0, 0, 0, 0,188,211, 12,191,198,176,160,190, 56,156, 22, 63, 0, 0,128, 63, + 0, 0, 0, 64, 0, 0, 0, 0, 17, 2, 0, 0,150, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 55,181, 3, 68, 65, 84, 65,168,147, 0, 0,104, 9,180, 3, 64, 1, 0, 0, +150, 0, 0, 0, 0, 0, 0, 0, 20,135, 17,192, 36,121, 97,192,112, 32,141, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 64,157,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 96, 32, 63,185,201,160, 62,160, 3, 6, 63, 11, 34,248,190, +206, 53,185, 60,192,197,178, 61,174,184, 53, 63,223,172,162,190,109,136,224, 62,142,173, 61,191,180, 96, 10, 60,200,196,163, 61, + 78,182, 99, 63,165,242,180, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +248,112,150, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,111, 46, 7,192,143, 26, 60,192, 28,147,207, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 72,158,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,121,229,190,108, 50, 41,191,136,152, 7,191,156,100,146,190,146,141, 25,191, + 39, 92,142, 62,212,104, 18, 63,227,105,105,190,113,156, 96, 62,137,226, 69,191,147,247, 17, 61, 51,172, 44, 62, 17,125, 54, 63, + 69,195,169, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,144, 63,245, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224,103,174,189, 60, 88, 17,192,230, 35, 76, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190, +200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 80,159,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,101,160,155, 62, 59, 87,152, 62,118,199, 84,191, 86, 89,183, 62,118,103,231, 62,110, 47,177,189, +155, 8, 4,191,100, 60,199, 62,197, 40,177,189, 2, 14, 46, 62,102, 96, 39, 62,101,119,242, 61,189,168,146, 62, 55, 9,221, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,135, 36, 87, 61, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,102,131,192, +196,241, 26, 63,140,198, 76, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 88,160,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 80, 39, 63,171, 26,218,190, 89,118, 16, 63,130, 72,138,190,169,255,122,190,185,111, 14,191, 21,207, 38, 63, + 73,252,211, 61,198,177, 80,191, 43,154,203,189,227,146, 53, 61, 63,180,115, 63,216,113, 42, 59,125, 63,144, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,175, 95,142, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 43,226,189,253, 85,220,191, +225,104,101, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 96,161,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +119, 97, 45, 63,119, 47,205,190, 35,117, 19, 63,166,125, 98, 62,242,195, 73, 62,124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62, +230,232, 88, 63,130, 53,204,190,250,120,128, 62, 19,194, 20, 62, 61, 15, 90, 62, 92, 30,200, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 53,129,253, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,108,159,129,191, 8,210, 6, 63, 35,221,152, 64, +190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,104,162,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,167,210,190, +194,172,139, 62,250,220, 35, 63, 30,182, 22,191,122, 3,136, 61,109,164,176,190, 30,153,147,190,255,248, 10,188,234, 90,160,190, + 89,241,205,190,148,235, 25, 63,206,172,146, 62,137,195, 52, 61, 99,142,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 37,227, 77, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,167,189,191,217, 59,104,192,184,179,184, 63,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +112,163,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 45,121, 62,120,126, 98, 63, + 60,171,135,189,139,174,200,190,220,142, 21, 63, 77, 70, 40,191,118, 70,150, 62, 4,245, 92, 61,159,118,174,190,176,217, 49, 63, +120,167,104, 60,166,104,235, 60,218,251, 73, 63, 13, 25, 44, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,217, 2,247, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,112, 30, 63,111, 69, 82,192, 59,191, 51, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,120,164,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,227,137,190,206,195, 71,191, 70, 31, 96,190, +127, 46, 5, 63, 99, 51,214,189,228, 61, 67,191,134, 90, 2, 62,120,214,146,190, 34,111, 33, 62,136,229,187,190, 27,112,241, 60, + 0,187,177, 60, 4,134,171, 62,164, 35, 29, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,130,192, 56, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118,148,176,191, 88,200, 1, 63, 89, 48,146, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,128,165,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,169, 82,190,102,214, 57, 63, 55,112, 36,191, 59,205, 9, 62, +184,139, 5, 63,105, 32, 43,190,120, 62, 37,191,220,215, 15, 63,180, 2, 8, 63,198,170,163, 62,160,178, 8, 63,185,164,184, 62, + 68, 72, 63, 61, 16,104,112, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 97,249,192, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200, 80,168,191, 8,154,165,191,229,248, 80, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,136,166,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,145, 5,191, 83, 77,126, 62, 14,133, 63,191,190, 5,167, 62,123,212, 96,190, +233,136,176, 62, 25,193, 80,189,147, 49, 18, 62,222, 40, 25, 62, 59,204, 10,191,177, 46,104, 62, 36,106,150, 62, 2, 61,138, 62, + 4,131, 86, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 39, 27, 19, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,190,246,189,233,129, 90,192,224,155, 20, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190, +206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,144,167,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 77, 14,191,231, 81,154, 62, 41,220, 22,191,104,189, 0,191,214,167,160,190,140, 60, 22,190, + 37, 85, 74, 63, 32,253, 8,191, 96,146, 23, 61,196, 30,177,190, 79, 25,187, 60,207,244,194, 60, 53,234,253, 62,233, 52,234, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,218, 21, 79, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,231, 67,190, +144,105, 11,189,210,111,153, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,152,168,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74,110,205, 62,146,226, 27,191, 73, 95,219, 61, 75, 3, 45, 63,222,109,147,190,152,196, 40, 63, 36,136,116,190, +181, 21,190,190,211, 38,213,190,114,230,183, 62,206,217, 24, 63, 59,222, 25, 62, 0, 50,134, 61,139,161, 63, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,180, 67,127, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,217,158, 63,122,225, 17,192, +213,158,120, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,160,169,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +176, 95, 22, 63,172, 95,210,190,114, 70, 46,191, 67, 71, 26, 62,188,164,234, 61,121,120, 78,191,186,229,108,188,144,225, 72,190, +197,218, 42,190, 83,104,114,191, 34,213, 73, 62,217,230, 49, 61,217,117,187, 61,143,253, 42, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,226,144, 95, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,205,127,191,231,116,142,191,116, 64,100, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,168,170,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196, 25,132,189, + 67,167, 41,191,249,145,174,190,171,227, 41, 63, 84,208, 94, 62, 98, 21, 50, 63,138,162, 46,191,136, 53, 56,191, 9, 44,160, 62, + 15, 42,188,190,109,124,145, 62, 47, 84,135, 62, 95, 56, 95, 62,104, 38,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,183,116, 87, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,106, 67,192,239, 1,236, 62,230,139,105, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +176,171,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, 72, 62,147,226,176, 62, + 67,185, 48,191,255,215, 26,191,242,158,254,187, 89,238,201,190, 99,166, 39, 63,102,238, 3,191,206,229, 10, 62,165, 53,230, 62, + 37,227,100, 62,230, 38, 54, 63, 87, 4, 43, 61,166, 1,190, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,213, 26,126, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 63, 58,191,242, 44,102,191,239,155,119, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,184,172,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,238,131, 61, 49, 99, 58,191, 63,180, 26, 63, +201, 92,162,190,113,254,209, 62,151, 67, 12, 63, 80,138,197, 62,197,116, 72,191,117,129,182,190,180,137, 76, 62,232,134,178, 62, + 23,134,113, 62,235,242, 46, 62, 45,121,122, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,248, 12,169, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,244,173,175, 62,136,194,141, 61, 0,239,164, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,192,173,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213, 38, 28, 63, 66,248,166, 60,227,199, 67,191,127,123, 83,190, +122,119,224,190, 73, 46,149, 62,135, 43, 62, 62, 30,175,199, 62, 97,224, 2, 63,180,198,250, 62,211, 97, 48, 63, 38,134,130, 61, +167, 53, 8, 61, 56, 40, 91, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 93,115,157, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,188, 36,192, 83,192, 42,192, 20, 24,202, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,200,174,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,121, 82,190,233,142,216,190, 94,156, 83,191,222, 73,158, 62,170,207, 3, 63, + 63, 41, 39,191, 2,164,147, 62, 36,187, 38,191, 0, 1,218, 62,145,119, 32,191,191,242,154, 60, 14,165,130, 62,127,236, 49, 63, +163, 44,253, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 13,194,130, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +191,117, 51, 63, 40,247, 44,192, 84, 59, 82, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,208,175,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61, 51,118,199, 62, +129,125, 72, 63, 86,250, 36,191, 70, 99, 90, 61,125, 38, 25, 63,218, 50,227, 61, 48,152,110, 61,166, 58,104, 62,121,161, 26, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,218, 44,192, +131,112,159,190, 68,196, 80, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,216,176,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 65, 39,191,175,203,203,190, 24, 58, 8,191,132,178,185,190, 48,133, 27, 63,166,150, 35, 63,195,164,174,189, +146, 20,209,189,124, 43, 3,191,219,188, 54, 63, 23,126, 53, 62, 93,113, 22, 63, 29,104, 42, 62,166,168,140, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 90,122,222, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,253, 61,191,212,216, 43,190, +219,239,140, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,224,177,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 62,251,190,154,207,132, 62,191,198, 19,191,122, 82, 25,191,179,114,169,190,242, 80, 46,191,161, 92,100,189,125,103,188, 62, + 0,234, 23,191, 12,140, 22, 63, 24, 36,252, 62,191,130,121, 62, 96,245,198, 61, 98,186, 42, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 62,205, 89, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,168,212,191, 47,175, 30,192, 94,228, 12, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,232,178,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,136, 6, 62, +240,135, 58,191, 89,198,233, 61, 57,148, 41, 63,151,188,189,190,156, 72,189,190,184, 14, 86, 63,185, 54,165,190,131,220, 49, 62, + 60, 87,189,189,118,198,167, 61, 92,200, 80, 62,157,210, 10, 63,240, 9, 48, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,186,132,181, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,184,238,190,237,206,230,191,208,122, 85, 64,190, 81, 55,191, +107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +240,179,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,165, 30, 63,161, 50,249,190, +180,213, 86,189,178, 10, 29,191,227,247, 49,191,215,139, 7,189,222,249,154,189,153, 77, 23,191,160, 58, 14, 63, 72, 47, 15, 61, +138,132, 94, 62,167,190, 48, 62,203, 41,136, 62,157, 52,176, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 38,177,233, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 19,104, 63,179,122,254,191,115, 37,123, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,248,180,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,231,181, 62, 36, 19, 51, 63,126, 5, 6,191, +231, 27,170,190,128,253, 35,189,182, 11,151,189, 74,171,178, 62,127,231, 49, 63,204,146,128, 62, 88,100, 17, 62,197,245,124, 62, + 30,108,130, 61,201,152,229, 61,242,193, 19, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 56,156, 79, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,172,106,191, 63,110,225, 42,192, 2,170,110, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63, +236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,182,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,227, 27,191, 17, 83, 26, 63, 27,229, 2,191, 83, 48,135, 61, +199,244,134, 62, 55, 37,151,190,210,195,237,189,249, 39, 17, 63,154, 1, 76, 61, 75,194, 79,191,240, 99,249, 61,190, 88,249, 60, +174, 20,183, 61, 39, 38, 66, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +150, 40,178, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,121, 3, 12,192, 63, 11,252,190,146,136, 89, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 8,183,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 59, 20,191, 30, 36, 17, 63,112, 57,252,190, 32,101,162, 62,139, 6,160, 62, + 57,160, 80, 61,109,243,245, 61, 41, 18,224,190,182,154,227,188,238,196,139,190,173, 28,108, 62,191,152,246, 62,199, 50, 61, 62, + 31,254,210, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 20,166, 56, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +250,104,187,191, 56, 86,139,189,145, 23,131, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190, +203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 16,184,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,228, 80, 19,191,118,138, 16,191,122,210, 6,191,139, 14,138, 62, 73, 65,189, 62, 19, 89,244,189, +205, 5, 83, 62, 94,159,107,190, 19,199,255, 62, 14,124, 48,190, 15, 67,208, 62,184, 57,190, 62,119,154,219, 61,111,114,234, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,203, 51,223, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 56,161, 62, +255,221,207,191,202,110,120, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 24,185,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,138,124, 47, 63, 12,193, 0, 63,124, 39,176, 62, 68, 3,204,190,132,180, 43, 61, 66,184,104,189, 69,173, 54,191, + 24,239,116,189,191,183, 53,190,120, 91,198,190,123, 33,150, 62, 68, 30,226, 61,224,121, 27, 62, 4,154,227, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,117, 22, 35, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 89, 41,192,117,107, 25,192, +174,245,222, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 32,186,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66,202,207, 62,211, 32, 47, 63,139,219, 0,191,197,212,172,190,195, 68, 65, 63,105,152,217,190,159,218,214,190, 85,113, 84,190, +194,108,158,190,229,217,235, 61, 82,179,202, 60,197,106,157, 62,211,197, 33, 63, 9,243, 18, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 1,162,102, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,238,220,191, 91, 70,150,191,203,192, 72, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 40,187,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 95, 22, 63, +172, 95,210,190,114, 70, 46,191, 67, 71, 26, 62,188,164,234, 61,121,120, 78,191,186,229,108,188,144,225, 72,190,197,218, 42,190, + 83,104,114,191, 13,183, 77, 62,158,153,182, 62, 65, 59,143, 62, 52,159, 38, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,226,144, 95, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,234,116,192,224,101,238,188,165, 20, 56, 64,190, 81, 55,191, +107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, + 48,188,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,136, 6, 62,240,135, 58,191, + 89,198,233, 61, 57,148, 41, 63,151,188,189,190,156, 72,189,190,184, 14, 86, 63,185, 54,165,190,131,220, 49, 62, 60, 87,189,189, + 31,255,242, 60,231,194, 83, 63,189, 56, 5, 62, 68,188, 85, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,186,132,181, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,209,240,189,178,183, 95, 63, 5, 67,176, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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, 56,189,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,114, 86,191,137,141, 2,191,227,140,105, 61, + 70,121, 63,190,130,242,218, 62,237,163,132,190,219,235, 16, 60, 85,203,248, 62, 79,244, 80,191,103, 0,148, 62,153,189, 85, 63, +151,104,200, 61,246, 55,142, 60, 74, 57, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 31,252, 33, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,206, 54, 25,192,171,197,162, 62, 6, 16,121, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63, +236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 64,190,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219,100,244,190,182, 69, 91,191, 60,137,144,189,161,126, 59, 62, + 28,228,200,190, 60, 49,170, 62,225,139,250,189,244,143,111, 62,252,103,100,191,148, 32, 79, 62,104,246,163, 62, 91,201, 16, 63, + 24,104,136, 61,227,230, 66, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +182, 88, 41, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 57, 61,192,236, 53, 39,191,173,221, 55, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62, +198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 72,191,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 43, 35,190,242,210,225, 61,197, 58, 30, 63,229, 8, 67, 63,215,176,222, 61, + 70, 15, 12, 63, 80,195,165, 62,218, 72,227, 61,188, 66, 87,191,145,213,195, 62, 39,218,212, 61,242, 20, 25, 63,122, 70,118, 62, +159,226,107, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,173, 74, 64, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +249, 62, 40,191, 16,113, 26, 63, 50,179,160, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 80,192,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,190, 29,224,190,239, 44, 4, 63,125,217, 49, 63,107, 25,121,190,117,172,217, 62,242, 98,116,190, +148,162, 42, 63,142,178,199,190, 54,105, 13,191, 83,107,163,190, 64,186, 45, 63,109,122, 91, 62, 32,134, 21, 61, 21,118,144, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,113,107, 73, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 51,138,191, +199, 14,110,192, 18, 66,203, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 88,193,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 78, 39, 63,128, 50,251,190,139,185,189,190,175, 4,226, 62,118, 23,153,190, 67,228,120,190, 50,226, 42,191, +239,243, 86,191, 37, 42,189,190, 66, 1,190,190,235,223,153, 59, 21,174,243, 59,231,160, 60, 63,251,135,128, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,167,245,105, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 75,186,191,170,205,204,191, +132,169, 61, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 96,194,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118,223,155, 62,249,196, 3,191,115, 12,163,190,212, 73, 60,191, 59,208, 85, 62, 65, 11,155, 62, 28, 17,173,189, 20, 16,254,190, +213,229, 32, 63,216,221, 28,189, 79, 19, 52, 62,229, 52,146, 62,191,228,171, 62,106,185, 79, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 45,184, 37, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,119,219, 63,231, 73, 28,192, 83,117,128, 64, +188, 81, 55,191,109,243, 71,191,100,237, 42, 63,233,163,214, 62,202,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,104,195,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,109,254, 62, +210,146, 4, 63,232,131, 23, 63, 66,212,187, 62, 9,109,158,190, 71, 12,216, 62, 64, 20,153, 59, 11, 2, 7, 62, 92,134, 91, 62, + 43,128, 33,191,186, 75, 51, 62,206,251,144, 60,198, 49, 19, 61, 22,114, 69, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,221,100,115, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,172, 59,194,191, 35, 29, 13,192, 13,208, 30, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +112,196,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,223,155, 62,249,196, 3,191, +115, 12,163,190,212, 73, 60,191, 59,208, 85, 62, 65, 11,155, 62, 28, 17,173,189, 20, 16,254,190,213,229, 32, 63,216,221, 28,189, + 97, 31,227, 61,168,207,104, 62, 38, 89,237, 62, 93,238, 74, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 45,184, 37, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,197,190, 82,192,251,148,174, 62, 29,189, 91, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,120,197,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,132, 10,191, 82, 61,237, 62,127,191,223,190, + 11,148, 12, 63,236,142, 92, 62, 17,199, 32, 63,157,206,242,189,199,114, 15, 63, 91, 82, 33,191, 3,247,167,190,210, 10, 37, 62, +124,152, 65, 63, 28,110,106, 61,179,189,207, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 40, 23,140, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120,157,163,190, 44,219, 33, 63,250, 25,167, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63, +237,163,214, 62,199,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,128,198,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,175, 4,191,160,200, 50,190,248,214, 77, 63,226,194,110,190, +138, 10,198, 61,210,213, 62, 62,141,163,253, 61,106,130,160, 61,201,229,101,191,103,145, 50, 62, 52,192, 61, 63, 16, 50, 23, 62, + 40, 56, 1, 61, 43,254,162, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 89, 81,220, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,131, 63, 79, 63, 22,225,203,191,183, 83,133, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,136,199,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70,155,194,190, 82, 93, 3,191, 23,133, 19,191,179,146, 2,191,131,198,104, 62, + 15,189, 93, 63, 77,226,209,190,159,122, 21,191,169,192,234,190, 16,128, 35, 63, 9,188,167, 62,141,167,138, 61,186,163,185, 61, +147,152, 3, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 25,249,236, 59, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20,218, 89, 62,169, 21, 81,192, 50,226, 38, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190, +206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,144,200,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,139,169, 52, 63, 97,163,156, 62, 26,132,184,190, 82, 25, 7, 63,127,117,151, 62,254,206,247, 62, + 27,144, 76, 63,150, 57,204, 62,184,181,246,188,196,222, 19, 63,175,237, 18, 61, 50, 0, 0, 61,180, 45,208, 62, 72,186, 6, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 61,195,186, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 91,166,190, +203,138,151, 62,232, 4,159, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,152,201,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,212,240, 7, 63,213, 2, 18,191,228, 90, 5,191,221, 92,178, 62, 8,236, 16, 63, 90,216,151, 62,155,193,128, 62, + 56, 60,245,188,118,129,160,190, 47,157,113,191,114,117, 40, 63,164, 92, 37, 62, 72,198, 78, 61, 6, 28, 5, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,137, 96,226, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,137,191,191,143,156,208,190, +234,245,116, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,160,202,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62,118,245, 46,191, 72,158,236,186, 55, 10, 97,191, +140,128,183, 62,177,230,146,190,121,217,174, 62, 45, 55,188, 62, 41, 76, 25, 62,138,146, 16, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 6, 78,191,240,247, 2,191, 2,181,131, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,168,203,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189, +127,158, 27, 63,123,235,239, 62, 59,108, 33, 63,244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191, +208, 20, 63,190,237,209,211, 62, 1,168,129, 62,108,237, 7, 62,188, 30, 77, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,181,251,191,160, 67, 79, 63, 83,115,143, 64,190, 81, 55,191, +109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +176,204,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,243,237, 61, 11,234,169,190, +211,226, 55,191,184,175, 25,191, 24,201, 39, 63,204, 23, 71,190, 87, 61,218, 62, 31,211, 39, 63,108,101,215,190, 35,125,244,189, + 31, 56,250, 62,174,208,248, 62, 50, 43, 79, 60,252,186, 79, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 83,130,186, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,166,143, 16,192,219, 40, 31,192,188,165,240, 63,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,184,205,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,157, 15,191, 47, 51,205,190,152, 40,136,190, +128,122, 44, 63,194,144, 92, 63,235, 36, 99,190,244, 22,206,190,143, 32,220, 62,169,244, 19, 63,160,205,238,189, 93,255, 69, 61, +131,237,129, 62,199,113, 29, 63, 16,188,169, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,249,139,151, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 16, 46,192,234,135, 17, 62,196,174,101, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63, +235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,192,206,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,186,110,162,190,145,104,105,190,247,168,239, 62, 3,235, 74, 63, +140, 77,178,190, 80, 49, 72, 63,164, 45,112, 62, 43,101, 44, 63, 95,162,173, 62,180,215,104,190,132,185,112, 62, 76,198, 31, 63, + 82,148,186, 61,149,140, 75, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +161,174,120, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,221, 76, 34,192,195, 63,220,191,101, 92, 19, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,200,207,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 89, 32, 62,234, 91, 82, 63,243, 78, 86, 60, 22, 61, 12, 63,249,120,178,190, +203, 19, 37,191,128, 65, 24, 63,196,226, 52, 63,219,214, 0,191,203,228,210,190,191, 5,144, 61, 27,251,203, 62, 8,217,232, 62, +185,169,156, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 7,165,113, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,209,208,191,175, 98, 57,192,214, 39,244, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,208,208,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,242,136, 6, 62,240,135, 58,191, 89,198,233, 61, 57,148, 41, 63,151,188,189,190,156, 72,189,190, +184, 14, 86, 63,185, 54,165,190,131,220, 49, 62, 60, 87,189,189, 40,142,100, 61,206, 81, 18, 62, 52,238, 34, 63,214,209, 40, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,186,132,181, 61, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,156,146, 19,192, +132,169, 38, 63,119,240,133, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,216,209,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,123,191,104,191, 91, 12,172,190,100, 97,112, 62,240, 67,150, 61,237,234,241, 61,121, 15, 65,190,224, 2, 61, 62, +159, 38,233,190,118, 62,191,187,107,119, 29, 63,177, 98,202, 62,157,134, 14, 63,246,140,213, 60, 97,116,179, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,159,173, 69, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,209,211, 63, 80, 57, 64,192, +239, 52,100, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,224,210,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +129, 46,157,190,239,142, 47,191, 7,129,219, 60,124,203, 40, 63, 5,175,122,189,180, 33,139, 62,162, 8, 63, 61, 75,191, 26,191, + 52,191,189, 61,125,188,100,190,131,222,112, 61,150,149,161, 60,127,188,202, 61,219,141, 82, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 34, 78, 58, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,204, 40,195, 62,169, 66, 22,192, 56, 69, 88, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,232,211,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 69, 25, 63, + 76,123,124, 62,100,238, 32,191,234,140,220, 62, 84,159,120, 61,187,254,244, 61,103,215, 59, 63,244,235, 71,190, 9,172, 73,191, + 94,228,165,190,237,198, 39, 62,232,166,180, 61, 33, 45,106, 62, 32,238, 4, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,128,255,104, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 41,124, 63,215, 52, 92,192, 1,194, 56, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +240,212,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249,191,175, 62, 72,210, 67, 63, + 91, 44,255,190, 36,232, 97, 62,183, 89, 70,191, 58, 37,246,190,112,174,211, 61,231,174,119,189,237, 2,119,191,180,205, 35, 62, +225,119,158, 59, 62,185, 89, 59, 58, 41,150, 62,186,212, 50, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 78,102, 32, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,215, 66,192, 16,102, 17,189,251, 64, 82, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,248,213,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 15,158,190, 97, 48, 27,191, 48,181, 41,191, + 31, 19,160,190, 91, 23,153,189,100,243,110,190,182,169,164,190, 97,129,120,191,145,101, 90, 60,193, 53,186, 61, 94, 65, 31, 62, +152, 57, 45, 63,117,240,248, 61, 59,128, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,196, 79,137, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,243,234,243, 63, 12,199, 50,192,246,173,118, 64,192, 81, 55,191,107,243, 71,191, 98,237, 42, 63, +235,163,214, 62,197,206,183,190,205,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,215,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,137,136, 62,101, 7,106,191,249,249,155,190,146,218,155, 60, +179,212,184,188, 68,215,201,189, 40,244, 61,191,114,234, 70, 61,154,226, 1,191,119,139, 91, 63,202, 64,207, 61, 46,106, 89, 60, + 30, 53, 13, 61,236,222, 89, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 6, 40, 87, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,174,176, 54,191, 99,173,187,191,209, 31, 93, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 8,216,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61, + 51,118,199, 62,129,125, 72, 63, 86,250, 36,191, 70, 99, 90, 61,125, 38, 25, 63,101,144,129, 62,185, 1, 91, 62, 60, 67,121, 62, + 32, 77,148, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +238,131,100,192,222,185, 81,191, 40, 50, 27, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 16,217,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,167, 43, 35,190,242,210,225, 61,197, 58, 30, 63,229, 8, 67, 63,215,176,222, 61, 70, 15, 12, 63, + 80,195,165, 62,218, 72,227, 61,188, 66, 87,191,145,213,195, 62,197,146, 70, 60, 83,125, 44, 63, 64,124,156, 62,125,144, 10, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,173, 74, 64, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 77,248,190, + 12,109,103,190,230,231,143, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,199,206,183,190,204,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 24,218,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 62,251,190,154,207,132, 62,191,198, 19,191,122, 82, 25,191,179,114,169,190,242, 80, 46,191,161, 92,100,189, +125,103,188, 62, 0,234, 23,191, 12,140, 22, 63, 53,173, 3, 63,187,233, 78, 62, 77,225,187, 61,203,112, 68, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 62,205, 89, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 80, 10, 64,253,130, 74,192, +124,179,109, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 32,219,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61, 51,118,199, 62,129,125, 72, 63, 86,250, 36,191, + 70, 99, 90, 61,125, 38, 25, 63,215, 2,202, 60, 38,116,181, 59,240,167,204, 60,193,223,113, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 37, 55,192, 92, 44,210,191,134, 20, 12, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 40,220,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 7, 15, 63, +135,194, 46,190, 36, 82,148, 62,185, 22, 66,191,211,135, 53, 63,111, 29,172,190,200, 68,229, 62,253,167,140, 62,181,223, 99,190, + 35,226,176,190,144,158, 50, 61, 53,247,230, 62,253, 25,236, 62,226,215, 52, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,202,199,214, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,163,152,191,233,189, 16,192,148, 29, 39, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, + 48,221,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,127,158, 27, 63, +123,235,239, 62, 59,108, 33, 63,244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,208, 20, 63,190, +113,136,250, 61,109, 45, 71, 62,248,240,222, 62,108,172,125, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,219,213, 63,119,221, 77,192, 98,157, 90, 64,192, 81, 55,191,107,243, 71,191, + 98,237, 42, 63,235,163,214, 62,197,206,183,190,205,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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, 56,222,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,225, 4,191,239,172, 35, 63, 92, 44, 4,191, + 88,166,112,190,229,149,176,190,233,184, 6, 63, 91,120, 44,191,208, 36, 20, 63,165, 84, 79, 63,190,145, 89, 61,154,154,192, 60, +206,233, 43, 60, 68, 13, 0, 62, 51, 72, 87, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 34,131, 32, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,118, 39,106,191,130, 29,114, 63,156,123,164, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63, +235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 64,223,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 97, 45, 63,119, 47,205,190, 35,117, 19, 63,166,125, 98, 62, +242,195, 73, 62,124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62,230,232, 88, 63,130, 53,204,190,149, 27, 54, 63,243, 38,133, 62, +232, 55, 53, 60, 91,130,143, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 53,129,253, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 71,102,192,241,109,194,190,108, 39, 47, 64,192, 81, 55,191,107,243, 71,191,100,237, 42, 63,233,163,214, 62, +198,206,183,190,204,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 72,224,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,157,105,188,148, 8,184, 62,181,109, 7,191,177,194, 68,191,163, 77,220,190, + 58,120,101, 63,241,105, 25, 61, 69,197, 86, 62,214, 78,236,190,126,136, 46, 63,152,203, 22, 61,132,161, 61, 63, 67,196, 79, 62, + 79, 22,160, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,112,148, 93, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,224,214, 63,225,182, 5,192,246, 59,136, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 80,225,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63, 40, 83,126, 62, +188,195, 8, 63,234,211,238, 62, 69, 36,152, 61,235,106,145, 62,211, 28,131, 62, 24,255, 46, 60, 11,165,139, 60,113, 88, 55, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95,158, 92, 63, +117,243, 67,192, 16,154, 70, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 88,226,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,102,175, 4,191,160,200, 50,190,248,214, 77, 63,226,194,110,190,138, 10,198, 61,210,213, 62, 62,141,163,253, 61, +106,130,160, 61,201,229,101,191,103,145, 50, 62,112, 55,104, 61, 14, 23, 9, 61,208, 82,129, 62,176, 65, 40, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 89, 81,220, 60, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,234, 31,192,204,234, 65,192, +110,200,172, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 96,227,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +162,180, 99, 63,127,169,145, 62,114, 95,174, 62,169,121,223,189,173,190, 73, 63,118, 72, 51,190,116, 48,162,190, 59, 98,139,189, + 77,245,191, 62, 75,124,253, 61,197,252, 48, 60,163,176, 62, 62,216, 93, 72, 63, 94, 65,166, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 81, 69, 12, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,122,189,191,238,243,102,191,158,253, 93, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,104,228,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,139,218,189, +160, 81,222,190, 75, 71,151,190, 47, 33, 88,191,152,174,128,190, 43,218,107,190, 40, 96, 66,190,219, 29,113,190, 89,240,184,190, +153, 92,204, 62,101,159,135, 62,253,216,174, 62,217, 99, 96, 62,104,171, 50, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 5, 27,207, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 75, 67, 63, 48,124, 78, 61,200,150,171, 64,190, 81, 55,191, +107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +112,229,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 19,190,190,188,203,147, 62, + 19,242, 2, 62,223,138, 95, 63,144, 50, 24, 60,148,174, 64, 63,196,158, 11,191,220, 22, 64, 63, 98, 35, 19,190,217, 93, 44, 62, +191,115, 58, 63,121,198, 2, 60,254,102,167, 59,178,100,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,189,176, 27, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 37,139, 62, 4,231, 62, 63,174,205,179, 64,188, 81, 55,191,107,243, 71,191, +102,237, 42, 63,235,163,214, 62,200,206,183,190,206,137, 61,190,156, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,120,230,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,220,239, 60,168,204, 46,191, 78, 95, 84, 61, + 8,105, 58,191,231,245, 43, 63, 91,254,151, 62, 77,143,206, 61,177,139, 42, 63, 26,107,196,190,150,211,139,190, 50, 23, 92, 63, +169, 27, 15, 61, 8, 43, 83, 60, 59, 83,189, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,121,221, 49, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32,247,225,191, 37,175, 81,192,248,254,198, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,128,231,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59,132,130, 62,131,166,120,190, 15,191,109,191,170,164,238, 61, + 20, 93, 78,190,245,164,231,189,254,254, 16, 62, 61,189,234,190,116,167,116,189, 67,175, 16, 63, 66,132, 2, 61,191, 37,189, 61, +173, 5, 64, 63, 91,181, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +129, 93, 2, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,110,165, 61,183, 43,239, 62,129,243,169, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,136,232,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62, +118,245, 46,191, 72,158,236,186, 55, 10, 97,191,140,128,183, 62,177,230,146,190, 62,109, 66, 63,244,159,170, 61, 79,150,243, 60, + 69,136, 2, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,158,243,191,244,237,104,192,138, 34,155, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,144,233,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,155, 22, 49,191,223,232,165, 62,133,208, 6,191, 93,253,190,190,190,234,194,190,239, 89, 29,191, +134,110, 23,191, 8,217, 30,191,107,159,205,190, 18, 94,185,190,228,106, 92, 60, 23, 25, 35, 61,136,111, 93, 63,211,105,167, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,252,153,132, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 74, 8, 63, + 0,240, 1,192, 28,123,108, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,152,234,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,217,155,104, 63,215,164, 29,190,175, 60,179,190,201,201, 43, 62,100, 60, 67, 61,171, 42, 90,189, 68, 85, 4,191, + 67,249,130, 62,230,199,133,190,149, 14,107, 63,233,242,101, 62,181,120,181, 61,231,136, 43, 62,245,241, 4, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,252,179,108, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 24,231,191, 44,105, 21,191, +186, 32, 98, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,160,235,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 52, 49,191,201, 9, 43, 63,166,234, 96,190,182,210, 37,190,206, 58, 54, 61,231, 1, 63, 63,133,173, 34,191, 5,154,170,190, + 93,112, 51, 63, 18, 61, 23,191, 66,189,138, 62,114,103,210, 62,117,128, 62, 62, 35, 54, 7, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 33,132,126, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 52, 5,191, 10,103, 49,192,230,154, 37, 64, +190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,168,236,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 96, 32, 63, +185,201,160, 62,160, 3, 6, 63, 11, 34,248,190,206, 53,185, 60,192,197,178, 61,174,184, 53, 63,223,172,162,190,109,136,224, 62, +142,173, 61,191,132, 47,184, 61,244,157,207, 61,168, 0,225, 62,249, 11,189, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,248,112,150, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 45,177,191, 22,253, 99, 63, 8, 58,155, 64,190, 81, 55,191, +109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +176,237,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,202, 55, 63,249,235, 89,190, +127, 18, 92,190,146,129, 32,191, 7,212, 8,190,167, 50,171,190, 97,120,123, 62,232,152,249,189,140, 18,149, 62, 37,111, 13, 61, +147,253, 28, 63,231,184,184, 62, 48, 48, 58, 60, 59, 78,111, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,115, 61, 18, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,255, 57,191,235, 4, 65,192, 77, 7, 19, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,184,238,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,218,133,189,116, 10,176,189,186,237, 10, 63, + 14, 61, 85, 63,182,219, 38,190,174,175,206, 62, 47,240, 10, 63, 31,232,114,190, 91,162,207,190,173, 85,193,190,228,255,128, 61, + 76, 32,172, 61,147,152, 5, 63,205,134,169, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 62, 38,212, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184, 68,137,191,204,177,226, 61,196,247,141, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,192,239,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,133,138,146, 61,133, 75, 8,187, 28,235, 68, 62,122,141,122, 63, +116,117, 92, 63, 7,147,125,190, 87, 49,147,190, 9, 88, 41, 63, 63,255, 2, 63, 71, 44,126, 61,107,166, 0, 63, 23, 29,154, 62, + 34,214,165, 61, 42,130,236, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +241,170,103, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22,103, 82,192, 73, 75,201,191, 1,247, 0, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,200,240,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231,120,168, 62,179,154, 7,191, 41,180, 48, 63,239,232,187,190, 9, 35,104,191, +222, 8,114, 62, 76,143,177,190,107, 29, 28,191,210,112,234, 62, 9,249, 92,190, 73,109,118, 59,168,155, 4, 63, 73, 2,243, 62, +186,198,108, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74, 4,184, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +194,241,246,191, 87,130,236, 62, 50,209,135, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,208,241,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,124,197,223, 62, 32,243,189,190,199,213,140,190, 13,149, 69,191,221,235,199,190,159, 79,240, 62, +113,202, 14,190,186,168, 60,190, 5,145,220,190, 42, 8,148, 62, 49, 99,219, 62, 85, 73,242, 62,127, 14, 79, 61, 68,141, 67, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,157,236,192, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,228,149,189, +233, 13,221,190,210,251,145, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,199,206,183,190,204,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,216,242,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 92, 19,190,190,188,203,147, 62, 19,242, 2, 62,223,138, 95, 63,144, 50, 24, 60,148,174, 64, 63,196,158, 11,191, +220, 22, 64, 63, 98, 35, 19,190,217, 93, 44, 62,198,141, 4, 63, 3, 71, 19, 62, 60,186,174, 61, 99,146,129, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,189,176, 27, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 89, 62,164,169,120,190, + 26, 78,155, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,224,243,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +118,201, 94, 63,192,189,213, 62,142, 27, 67, 62,214, 93, 55,190, 6,154,131,190,133, 48,178,190,139, 11,192,190, 39,123,147,189, + 29,130, 57,191, 46,253, 33,190,224, 89, 24, 63,189,174,198, 61, 2,152,101, 61,143,237,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 59,122,117, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 80, 26,192,232, 3,239,189,182,210, 99, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,232,244,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 16,153,190, +224, 1, 33,191, 43,253,168, 62,254, 36, 35, 63,124,255, 19,191, 70, 97,138,190,188,109, 6, 62, 64, 58,223,190,154,121,189,189, + 9,126,170, 62,115,248,126, 62, 84, 41, 12, 63,153, 55, 4, 62, 62, 85,152, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74,244,106, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,245, 70,190,136,148, 37,192, 41,107, 57, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +240,245,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,246,249, 62,200,102,140, 62, +154,199, 10, 63, 40,102, 32, 63, 78, 10, 19,191,224,238,250,190, 0, 13,111,190,243,232,187, 61,106, 10, 99, 62,163, 96,221, 62, +208,237,239, 61, 10, 34,210, 61, 62,101,181, 62,205, 22,218, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 35,143, 25, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,172, 25,191, 68,234,249,191, 59,217, 73, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,248,246,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,109,230, 62, 67, 47,189,190,205,119,155,189, +238, 53, 79,191,223,144, 88,191, 88,163,146, 62, 63, 99,208,190,236,235,130, 62, 72, 10, 17,190,124,223, 15, 63, 12,172, 64, 62, +160, 24, 51, 62,145, 49,156, 62, 26,236,169, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,254,237, 72, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 63, 60,192,192, 70,245,191,246,177,248, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,248,180, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,162, 16, 63, 33,180,219,190, 24,166,177,190,234, 8, 29,191, + 24, 26, 48,190,240, 70,115,190, 0,197, 54, 63, 69,201, 75, 62, 28,174, 10,189, 81,128, 78, 63,172,109,175, 60, 7,135,214, 62, + 59, 12, 9, 63,150,154,198, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 34, 50,138, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6,125,162, 63, 63,233, 64,192,147,167, 86, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 8,249,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234,120, 11, 63,200, 35,253,190, 2,152,233,190, 0, 38, 0,191,214, 3, 36,191, + 3,239, 45,190,135,175, 9,191, 18,130, 42,190,156,197, 38, 63,181, 37,238,190, 4, 49,119, 61,119,251,224, 60, 94, 5, 47, 62, +188,195, 61, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 89,162,191, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +184, 96, 27,192,251, 23,179,191,193, 77, 38, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 16,250,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,177,231, 32,191,150, 89,239, 62,128,156,188,190,225, 45, 0,191,247,133,210, 62, 51,169, 40, 63, +146,184, 26, 63,209, 39,223,190,182,238, 15,191, 75, 63,146,190,166,161,213, 61,217,242,218, 62, 39, 18,191, 62, 89, 74,194, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 81,236,129, 61, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,185, 0, 21,191, +137,241, 14,192,206, 27, 61, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 24,251,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,214, 79,213,190, 95, 19, 10, 63, 60, 25, 56,191,193,193, 10, 62,127,232, 10,190,162,126, 93,190, 25,169, 7, 63, + 38,209,221,190, 52,214,186, 62, 21, 63, 41,191, 58, 36, 27, 62,245,151, 28, 62, 82, 23,179, 62,148, 10,177, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 98,241, 41, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 80, 57,189,193, 80,166,191, +242,172,123, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 32,252,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160,174,232, 62, 64, 99,164, 61, 41,108, 12, 63,106,126, 50,191, 66,117,124, 62,134, 54, 82, 63, 38, 55,191, 62,121,232,197,190, +188,203, 70,189, 26, 88, 51,191,199,225,170, 62,114, 67, 23, 62,202, 56, 33, 62, 26,224,184, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,216,213,138, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,202,106,219,190, 17,216,127, 63,140,251,173, 64, +190, 81, 55,191,110,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 40,253,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 79,213,190, + 95, 19, 10, 63, 60, 25, 56,191,193,193, 10, 62,127,232, 10,190,162,126, 93,190, 25,169, 7, 63, 38,209,221,190, 52,214,186, 62, + 21, 63, 41,191, 10,203, 79, 63,104, 14, 32, 62,252,238, 44, 60, 55,180,175, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 98,241, 41, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 39, 91,192, 64, 81,150,191, 89, 68, 15, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, + 48,254,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,212, 0,191, 15,161, 38,191, +131,203,123,190,207, 48, 3,191,112, 6, 64, 63,137, 53, 34,190,175,202, 6,191, 66,241, 19, 62,119,105, 85,190,149,246,146, 61, + 25, 88, 25, 60, 85, 74, 25, 63,199,185,196, 62,210,179,249, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,198,223, 90, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 17, 40, 63,141, 44,153,190, 68,123,161, 64,190, 81, 55,191,107,243, 71,191, +102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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, 56,255,180, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,219, 68, 63,190, 75, 74, 62,250,129,229, 62, +198, 78,210,190, 65, 63, 59,188,173,173,214, 62, 18,159, 85, 62, 25,160,185,189,169,193, 46,191,177, 21, 77,190,202,133, 32, 63, + 25,163, 36, 61, 45,136,225, 60,133, 71,156, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 22,208,141, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50, 95,160, 63, 34,101,249,191,176, 96,132, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 64, 0,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,127,158, 27, 63,123,235,239, 62, 59,108, 33, 63, +244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,208, 20, 63,190, 62, 45,138, 62, 35,142, 30, 61, +173, 78,128, 61,170,246, 32, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, + 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,111,133, 6,192,167,152,225,191, 84, 16, 32, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 72, 1,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 57,241, 62,209,244,173, 62,202,195,188, 61,229, 10, 79, 63, 15,223, 34,191, +171, 65, 40,190,158,228, 38, 61,187,225, 12, 63,198,196, 13,189,185,253, 14,191,245,107,217, 61,253,147,174, 62,227,232,218, 62, + 70, 80, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 8,168,183, 62, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 99,228,190, 44, 59, 51,191,221, 75,133, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190, +202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 80, 2,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52,191, 23, 63,247,209, 82, 62, 34, 21,204, 62, 21, 58, 43, 63, 1, 3,139, 61, 52,159,135, 61, + 30,117, 36,189,230,123,244, 62, 79,104,185, 62, 17, 73, 33, 63,117,208,213, 62,118,118, 76, 62, 32,254, 5, 62, 65,245,128, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,179,246, 4, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,101, 74,192, +166,185,105,191, 18,141, 36, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 88, 3,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,221,157, 3, 63, 67, 81,215, 62,135, 46, 5, 63,121,108, 9,191, 37, 83, 16,190, 37,244,130,190,191, 18,216, 62, +221, 44, 53, 63,153,136,162,189, 80,138,252,190,221,214,102, 61, 50, 22, 25, 63,139, 42,157, 62,164,113, 30, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,145,208, 26, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,234,218,191, 50,177,232,191, +108,174, 42, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 96, 4,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, 41, 59,191,236, 70,252, 61, 77, 96, 25,191, 33,195,154,190, 31,119,242,190,125, 79,204,190, 23, 53, 18,190,102, 31,214,190, +165,174,199,190, 48,105,169,188,229, 50, 8, 62,227,251,148, 62,133, 65,206, 62, 75, 82, 49, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 44,230, 5, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,106,206,191,205, 36,150, 62, 96, 42,137, 64, +190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,104, 5,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,191, 23, 63, +247,209, 82, 62, 34, 21,204, 62, 21, 58, 43, 63, 1, 3,139, 61, 52,159,135, 61, 30,117, 36,189,230,123,244, 62, 79,104,185, 62, + 17, 73, 33, 63, 87, 15,231, 62, 49,237,207, 62,254, 43,141, 61,226,225,150, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,179,246, 4, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 61,167, 63,119, 5,171,191, 86,214,147, 64,190, 81, 55,191, +109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +112, 6,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 39, 70, 63, 91,103,218,188, + 44, 24, 30, 63, 28, 81, 12, 62, 26,129, 16, 63,215,153,162, 61, 11,203, 31,191,222,132, 2, 63, 26, 4,154,190,202,112,100, 62, +216, 36,214, 62,172, 85,122, 60, 44,247,142, 60,132,140, 12, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 48, 61,115, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 14,251,191, 44,213,105,190,165,188,109, 64,190, 81, 55,191,107,243, 71,191, +100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,120, 7,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173, 49, 3,191,178,133, 9, 63,104, 18, 16, 63, +159, 16,186, 62,183,147,245, 62,220, 88,111, 62,220, 25, 2, 63, 80, 44, 77,191, 76,136,152, 62,126,242,176, 61,239, 13,155, 62, + 40, 17,234, 62, 92,128, 13, 62,226,130,208, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 65,147,208, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,102, 47, 46,192, 64,212, 45, 63, 61, 35,127, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,128, 8,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,164, 48, 63, 32,100, 38,191,163,157,157,190, 10, 78,167, 61, + 4, 8, 54, 59,139,155,147,190, 11, 41, 50, 63, 27,101,140, 62,241,237,110, 63, 18,188,179, 59, 74, 31,165, 62,207,208, 37, 63, + 74,227,141, 60, 8, 28, 76, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +129, 24, 80, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10,203, 83,191,133, 15, 29,192,237, 82, 42, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,136, 9,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,194,232,190,156,110, 35, 63,233,200, 75,190,170,158, 22,191, 83,122,193,189, +217, 58,149,189, 80, 15, 18,191, 66, 37,145,189, 98,184,219,189, 70,185, 86,191, 21,150,239, 61,130,193, 24, 62, 46, 71,217, 62, +141,114,158, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,122,231, 75, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 71,102, 63, 16, 13, 44,191, 24,187,156, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190, +201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,144, 10,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120, 40, 61,190,150,196, 15,191,159,219, 54,191,234,195,191, 62,104, 96,122,190,193, 71, 74,191, + 15,230, 56,190, 61,156,203, 61,227, 39,177, 61, 25,222,193,190,178,206, 13, 63,144,101,237, 60, 16,227,198, 60, 16, 30,201, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74,137,189, 61, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,210,252, 62, +216, 58, 44,191, 98,217,149, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,152, 11,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86,152, 38, 63,169,225, 17,191, 57,217,140,189, 67,124,254,190, 13, 65, 17, 62,229,204, 15, 63,180,148,241, 62, +175,210, 73,191,182,161, 21, 63,186,222,169,188,235,174, 4, 63,125,216,156, 61,114,228,115, 61,124,239,176, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 86,104,165, 61, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,210, 46,192, 59, 4,135,191, +164, 99, 44, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,160, 12,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +119, 97, 45, 63,119, 47,205,190, 35,117, 19, 63,166,125, 98, 62,242,195, 73, 62,124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62, +230,232, 88, 63,130, 53,204,190,154, 69,201, 61, 74,143, 3, 63,155, 10,162, 62,186, 21,146, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 53,129,253, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,235, 64, 60,203,210,147, 63,205, 32,185, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,168, 13,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,137,136, 62, +101, 7,106,191,249,249,155,190,146,218,155, 60,179,212,184,188, 68,215,201,189, 40,244, 61,191,114,234, 70, 61,154,226, 1,191, +119,139, 91, 63,135,168,109, 63, 87, 44,112, 61,106, 72,115, 59,214, 90, 24, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 6, 40, 87, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,185, 0,192,197,235, 38,192,182,221,245, 63,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +176, 14,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 54,241, 62, 25, 75, 60,190, +137, 31,166,190, 26,162, 76, 63,214, 23,180, 62,134, 28, 22,191,189,125,184, 62,170,143, 49, 63, 42,100,208, 62,201,182, 12, 63, + 85,123,103, 61,230, 65, 90, 62, 33,215, 29, 63,124, 5,233, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,233, 6, 78, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,132,118,247,191, 87, 66, 8,192, 93, 88, 20, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,184, 15,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,149,157, 62,169,241,150, 62,210, 72, 5, 63, +196, 98, 61,191, 94, 43,103,191,141,249, 13, 62,108, 40, 28,190,180,143, 89,189,159,169,180, 62, 50,210,102, 63, 15,245,186, 61, +252,211,140, 62,237,184,252, 62,164,107, 15, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,234, 53,126, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96,252, 2,190,189, 32, 63,192,249,176, 40, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63, +235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,192, 16,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227,185,185, 62, 69, 55,133,190, 76,101,246, 62,146, 32, 65,191, + 11,142, 47,190,207,240, 16,191,178, 47,250, 60,147, 12,135, 62,250,130,192,190,182,224, 63, 63,109,251,141, 61,209, 15,135, 61, +152,122,212, 62,150, 66,230, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +194, 22,201, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,186, 37, 60,192,209, 36, 19,192,200,102,212, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,200, 17,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,133,116,253,190,160,178, 23, 63,114, 78, 32,191, 57, 97,221, 61,191,244,236,189, +206, 56,214, 62, 77,142, 40,191, 31, 48,161, 61, 82, 95, 7, 63,244, 70, 62,190,144,146,141, 59, 24,189,182, 62, 12, 24, 34, 63, +242, 33,183, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 51, 4, 90, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62,165,155, 63, 35,188,200,191,156,201,140, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,208, 18,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68,198,205, 62, 50, 21, 99, 63, 18,246, 86,190,237, 24,178,189,229,177, 74, 62,233, 94,174,190, + 14,113, 17,189,144,148,211, 62,157,182, 80,190, 18,214, 66,191, 54,112,182, 62,156,202, 2, 61, 65,146, 40, 61, 24, 18, 18, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,229, 84,124, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 48, 1, 63, +133, 14,211, 62,120,209,175, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,216, 19,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0,181, 60,183, 21, 39, 63,174, 28, 42,191,206,254,185, 62, 60,101,180, 61,224,164,162, 62,169, 22, 78,191, + 15,164,146,190, 66, 47,188, 62,233,255, 63,191, 26, 61, 76, 63,214,234,171, 60,230,187, 47, 60,126,146, 46, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,113,195, 41, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,144, 98, 62, 62,190,112,191, +153,224,138, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,224, 20,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255, 80,148,190, 17,138, 5, 63,171, 16, 38, 62,107, 50, 73,191,214,126, 32, 63,143, 14,148, 62,183, 31, 4,191, 70,152,145, 62, + 21, 32, 89,189, 63,239,100, 62, 51,212,220, 62, 49, 96,238, 61, 1,246,205, 61, 64, 22,180, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,247, 33, 76, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,243, 2,192, 18, 84, 91,191,110, 0, 77, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,232, 21,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,146, 69,191, +236,123, 69,190,179,188, 26,191,207,182, 47,189, 96, 14,105,191, 55,120, 31,190,138, 41, 18, 62,210, 73,183,189,105, 99, 57,189, + 32,155,137,190,112,143, 79, 62, 13, 36,220, 62,207,171,119, 62,168,124, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,184,151,199, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 81, 34, 62,178, 55, 39,192, 87, 36, 68, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +240, 22,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,148, 3, 63,224, 68,239, 62, + 72, 64,241, 62, 71, 35, 11,191,248,202, 31,191, 68, 98,182, 62, 18,127, 48,191,158,108, 26,189,145, 93,173,190,161,155, 16,191, +144, 72,244, 61,152, 98,173, 61, 16,243,154, 62, 38,162,252, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63, 69,111,245, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,206,132,191,153,157,254,191, 61, 78, 57, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,248, 23,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 64,217, 62,151, 24,213,190, 94,174,187, 61, +102,136, 76, 63, 27, 1, 32, 63,236, 95,162,189,124, 18, 29,191, 75, 78,155,190,124,134, 43,191,174,202,184,190, 49,138, 35, 62, +237,209, 85, 62,126, 75,186, 62,113, 6,137, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,111,100, 76, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,228,163,237, 62, 55, 20, 58,192, 9,122, 64, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 25,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 95, 55,189, 43, 21,181,190,230, 3,101,191, 87,248,137, 62, + 4,208, 75, 62, 0,115,115, 59,100,196, 95,190,191, 15, 83, 62, 84,222, 81,191, 36, 58,169, 62,187,215,163, 61, 90,207, 92, 61, +188,248,152, 62,182, 59, 17, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +230,119,112, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,202, 59,148,191,188,242, 56,191,189,111,113, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 8, 26,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 21,192, 61,216, 22, 8, 63,188, 84, 66, 63,158, 70,186, 62,240,211, 98, 62, +124, 7,155, 62, 10,134,246, 62,110, 16, 79,190,248,197,252,189, 81,188, 39, 63, 42,204,169, 62,204,195,154, 62,146,225, 51, 62, +125,254, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,123, 26, 81, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34,179,252,191, 86,102,184,191,169,174, 51, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 16, 27,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 50,144,190,207, 31, 50,191,179,203, 40,191,214, 99, 45,189,109,153, 34,190,239, 94, 10,191, +115,186,212,190, 42,234, 19,190, 72, 26, 97,191,122,105, 99, 61, 46,210, 21, 62,250, 32,186, 62,195,126,178, 62, 85,238, 16, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,131,240,124, 60, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,244, 77,192, + 51, 52,163,190, 30,234, 62, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190, +157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 24, 28,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 41,112, 63, 56,166,164, 61, 91, 4,240, 61, 15,172,161, 62,106,126,191,190,117, 33, 64, 63,130,227,184, 62, + 92, 20,244,190,210,168,180,189, 60, 25, 43,191, 89,246,198, 61, 30,130, 46, 63,223,241, 54, 62,221, 41, 46, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,190,196,107, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 27,122, 63,179,229,133,191, + 66, 39,149, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 32, 29,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63, 40, 83,126, 62,188,195, 8, 63,234,211,238, 62, + 69, 36,152, 61,235,106,145, 62,216, 4,239, 62,235,100, 21, 61,174, 73, 20, 61, 83,197,235, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 66,151,191,208,139, 62,192, 98,118, 5, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 40, 30,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159,160, 32,190, +190, 39, 52,191,142,138, 9,191,138, 13,224, 62,166,218,242, 62, 93, 71, 26, 63, 36, 22, 52, 62,231, 52,124, 62,165, 91,192,190, +148,111, 86,191,212,101,120, 61, 72, 26,221, 61,158, 82, 22, 63,241, 14,122, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,195, 96, 22, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 63, 46,190,222,105,107,191,198,191,132, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, + 48, 31,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,202, 55, 63,249,235, 89,190, +127, 18, 92,190,146,129, 32,191, 7,212, 8,190,167, 50,171,190, 97,120,123, 62,232,152,249,189,140, 18,149, 62, 37,111, 13, 61, + 89,238,204, 62, 10, 90, 39, 62,123,156, 6, 62, 98, 22,156, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,115, 61, 18, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,148,234,190, 11,179, 97,192, 16,215, 3, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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, 56, 32,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,227,248,190,160,134,192,190,155,159,184, 62, +105,157, 51, 63, 2, 56, 54, 63, 88,126,182, 62,108,207, 4,187, 38,216,198, 62,140, 66, 73,191,139,126,248, 61,251, 26,119, 60, + 34,207,150, 60,170,176, 20, 63,225,120,197, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,208,234,216, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,202,177,135,191,150,220, 86,192,144, 9,239, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 64, 33,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201,122, 18,191,155, 68,163,190,236, 36, 39,191,221,182,194,190, +217, 47, 98,190, 97, 46,230,190,197,236,134, 62,216, 40,187, 60,111, 92,179,189, 71, 17, 54, 63, 87,169, 5, 61,120,116, 92, 61, +179,253, 38, 63,225,192,133, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +100, 58,154, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,213,105,108,192,125,145,223, 62,192,182, 82, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62, +198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 72, 34,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,244, 32,190,174,189,218,190,163, 11, 55, 62,157, 75, 95,191, 33,155,243,190, +180, 86, 90,191, 57,237, 86, 62,226,198,126,190, 30, 34,101, 61, 93,239,180,190,206, 82,204, 61, 44,113, 89, 63, 63, 63, 23, 61, +220, 33,100, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 6, 63, 50, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 23,243, 62, 46,133,166,191, 78,153,134, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190, +202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 80, 35,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62,118,245, 46,191, + 72,158,236,186, 55, 10, 97,191,140,128,183, 62,177,230,146,190,159, 2,190, 62, 29,141,193, 61,214, 93,214, 61,164, 2,220, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,192,214,190, +182, 57, 73,192,175, 83, 23, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 88, 36,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,206,172, 34,191, 64, 79,187, 62,140,197, 11, 62,199,135, 42, 63,100, 91,148, 61,123, 75, 25, 60, 54,126,232,189, +210,190,220,189, 9,158,186, 62,182, 62,225,190,211,103, 84, 61, 92,194,115, 61,148,216,253, 62, 41, 34,201, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 38,103,162, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 4,133,192,109,136,128, 62, +136, 58, 58, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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, 96, 37,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +147,206,137, 62,234,207, 11, 63,195,144,225, 62,162,225, 40, 63, 24, 69,148,190, 50,238,190, 61, 13, 31, 86,191,217,106, 71, 63, +247, 60, 1, 62,162,250,136, 62, 70, 80,156, 58,142,100,108, 63, 15, 72,153, 61,116, 35, 17, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,174,199, 41, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 40, 12, 62,102, 32, 1,192,222,178, 95, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,104, 38,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 57, 95, 63, +238,148,214, 62, 87,249,109, 62,227,220,204,189,238,118,221,189,121,162, 19,191,203, 50, 48,191, 58,232, 80,190,141,100, 8,191, +229,142, 19, 63,223,196, 88, 62,134, 94,237, 61,141, 5, 97, 62, 43,195,231, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 75, 11, 15, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,211,109, 80, 63, 96,210, 20,192,246,253,103, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +112, 39,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 32,133, 62, 13,201,189,190, + 55, 43, 66, 63, 76,254,239, 62,254,163,179, 62, 15,181,171,188,130, 8,196, 60,214, 27, 14,191, 86, 32,128,190,190, 27,208,190, + 69,196, 53, 62,136,184,135, 61,240,250, 35, 62, 34,153, 24, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,224, 93,234, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,142,147,191, 43, 7,166,190, 61, 69,130, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,120, 40,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,246,249, 62,200,102,140, 62,154,199, 10, 63, + 40,102, 32, 63, 78, 10, 19,191,224,238,250,190, 0, 13,111,190,243,232,187, 61,106, 10, 99, 62,163, 96,221, 62, 56,243,206, 62, +109,170,159, 62,224,145, 2, 62,211, 50, 32, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63, 35,143, 25, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2,254, 89,191,195,197, 85,192,176,197,254, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,128, 41,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,125,204, 62, 37, 10, 46, 63, 69, 71, 26,190,130,168, 24, 63, +117,105, 36,190,144,220, 32, 63, 11,167,231, 62,151,145,179, 62, 33, 72, 36,190, 42, 67, 50,191,111, 3, 11, 61,241, 2, 76, 61, +231,181, 28, 63,103,179,155, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +244,186,188, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 46,253,191,200,126,214, 61,248, 1,125, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62, +197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,136, 42,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171,218,181,190,162,100, 80, 63, 86, 18,175,190,142, 51,157,190, 18, 35, 4,191, +207,113,210, 62, 0,170, 11, 63,134,126,165,190,141, 47, 59, 62,104,163, 62,191, 18,251,181, 62,225,163,242, 62, 90, 98,191, 61, +220, 33,158, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 83, 76,104, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +115, 18, 94,192,112, 61, 49, 61, 90,153, 71, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190, +202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,144, 43,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 41,112, 63, 56,166,164, 61, 91, 4,240, 61, 15,172,161, 62,106,126,191,190,117, 33, 64, 63, +130,227,184, 62, 92, 20,244,190,210,168,180,189, 60, 25, 43,191,141,188,190, 61,118,157, 68, 63,105,119,224, 61,112,129,239, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,190,196,107, 62, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 34,141,191, +222,140, 39,192,182, 55, 25, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,152, 44,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,193, 40, 85, 63,120, 79,146,190, 68,249,203,190,207,217,131, 62,229, 65, 22, 63,120,104, 63, 63,173,135,124,189, +131,179,190,190,208, 81,171, 62,211,132, 69, 63,122, 6,189, 61, 58,195, 23, 62, 6,114,254, 62,189,106,134, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,179,102, 20, 63, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 14, 63,192, 64,204,165,191, + 12, 96, 24, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,160, 45,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 81, 30,191,157, 39,223, 62,214, 30, 11, 63, 76, 51,186, 62,206,228, 83, 62,209,146, 0, 61, 22,106,121, 63, 44,124, 6,187, +128,233, 71,187,218,190,173, 62, 14, 67, 83, 61,192,186, 4, 63, 39,206,197, 62,178,159, 50, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,208, 19, 52, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,180, 22,192,126,173, 4,192,240,189, 8, 64, +190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,168, 46,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 59, 20,191, + 30, 36, 17, 63,112, 57,252,190, 32,101,162, 62,139, 6,160, 62, 57,160, 80, 61,109,243,245, 61, 41, 18,224,190,182,154,227,188, +238,196,139,190,133, 49,131, 61,130, 33,167, 62,160,225, 5, 63,124, 59,177, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 20,166, 56, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,160, 97, 63,129,220,163,191,194,248,141, 64,190, 81, 55,191, +109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 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, +176, 47,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,149,157, 62,169,241,150, 62, +210, 72, 5, 63,196, 98, 61,191, 94, 43,103,191,141,249, 13, 62,108, 40, 28,190,180,143, 89,189,159,169,180, 62, 50,210,102, 63, + 78,174,206, 62, 68,159, 93, 61,160, 84,118, 61, 54,211,246, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0,128, 63,234, 53,126, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,223, 18,192,155,169,140,191,151, 18, 57, 64,190, 81, 55,191,109,243, 71,191, +100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 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,184, 48,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,186, 63, 44, 63,134,104,136, 62, 44,117, 32, 63, +178,227,147,190,254, 77, 90, 63, 0,117,175,190,119, 69,167, 62,238, 73,138, 61, 58,211,189, 62,210, 28, 37,191,245, 96, 21, 62, + 35,104,227, 62, 83, 62,154, 62, 64,164,222, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0,128, 63,130, 27,151, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100,193,179,191,251,111, 78,192,166, 64,228, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63, +234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,192, 49,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129,101, 4,191,237, 90, 0, 63,104,125,239,190,131, 31, 3, 63, +200,160,212,190,115,217, 27, 63, 55,189, 6,190,131,223, 22,190, 4,241,223,190, 4, 70, 0,190, 37,242, 35, 61,204,214,171, 61, +175, 25, 46, 63, 82,177, 72, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, +184,249,202, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 93, 90,124,191,113, 48,212,191, 56,208, 74, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62, +200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,200, 50,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,127,158, 27, 63,123,235,239, 62, 59,108, 33, 63,244,198,103,190, +251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,208, 20, 63,190,187,178, 81, 62,176, 57,108, 62, 93,177,153, 62, +108, 88,135, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 2,210,109, 63, + 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +251,231, 33,192,132, 2, 59,191, 78,162, 66, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190, +199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,208, 51,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63, 40, 83,126, 62, +188,195, 8, 63,234,211,238, 62, 69, 36,152, 61,235,106,145, 62,217, 15, 30, 62,227,209, 4, 63,178,148,117, 62,218, 39,178, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63, 0, 0, 0, 0, +255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,185,138, 63, +191,128, 41,192,139,193, 97, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190, +158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,216, 52,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,231,120,168, 62,179,154, 7,191, 41,180, 48, 63,239,232,187,190, 9, 35,104,191,222, 8,114, 62, 76,143,177,190, +107, 29, 28,191,210,112,234, 62, 9,249, 92,190, 0,196,250, 61, 79,120, 62, 61,195, 12, 31, 62,202,252, 44, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74, 4,184, 62, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 63,243,190, 86,176,159,191, +245,150,111, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,224, 53,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +166, 26, 58,191, 1, 70,159, 62,113,111, 2, 63,235,187,173,190,116, 51,237, 62,130, 53,247, 62,243,199, 26,190,235, 88,172,189, +118,115,244, 62, 34,147, 5,191,217, 77,158, 62, 43,131, 72, 62,119,208, 68, 62, 86, 8,155, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,253,152,110, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,178, 48,191,138, 39, 52, 62, 39,252,149, 64, +190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 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,232, 54,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,167,210,190, +194,172,139, 62,250,220, 35, 63, 30,182, 22,191,122, 3,136, 61,109,164,176,190, 30,153,147,190,255,248, 10,188,234, 90,160,190, + 89,241,205,190, 62, 71, 19, 63,111,215,107, 62, 63, 71,138, 61,243,231, 1, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 37,227, 77, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64,157,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, + 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, +231, 84,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 15, 85,145,189, 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 72,158,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,219,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, + 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80,159,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186, 63,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +168,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,251,223,124, 61, +125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 59,138, 94,189,142,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88,160,180, 3, 60, 1, 0, 0, + 9, 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, 7, 82,145,186, +255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,255,223,124, 60,186, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,255, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,199, 84,145,188, 15,224,124, 61,123,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, + 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,136,127, 35,189, 15, 62, 14, 62,163,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,151,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0,255, 84,145,189, 31,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 96,161,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,243, 61, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188,251,223,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 5,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +180,127, 35,189, 8, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,142,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104,162,180, 3, 60, 1, 0, 0, 9, 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, 7, 82,145,186,255,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,200,126, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,135, 84,145,188, + 7,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,104,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0,251,137, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,231, 84,145,189, + 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112,163,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +235, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62, +165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,120,164,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, +247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,251,223,124, 61,125,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 5,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 8, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +142,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128,165,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 71, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 18,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,152,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 31, 85,145,189, 34,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +136,166,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,223, 84,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,132,127, 35,188, 3, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,252, 84,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,207, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,169,127, 35,189, + 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 50,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144,167,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,143,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,250, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 4,224,124, 61, +124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 43,138, 94,189,146,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 26,224,124, 62, +140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152,168,180, 3, 60, 1, 0, 0, + 9, 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, 7, 87,145,186, +255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 85,145,187,255,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 71, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, + 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,192,127, 35,189, 11, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,160,169,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 7, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61, +221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,239,223,124, 61,127,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +184,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,135,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 17,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,170,180, 3, 60, 1, 0, 0, 9, 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, 71, 84,145,186,239,223,124, 59, 58,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,120,127, 35,188, 2, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188, + 17,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,165,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 48,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, + 28,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176,171,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, + 43, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62, +165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,143,155, 65, 62,186,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,184,172,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, + 3, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 17,224,124, 61,125,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 53,138, 94,189, +148,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 10, 85,145,189, 29,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192,173,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 71, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 83,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 27, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +200,174,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,219, 20,227,188, 23,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, + 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 27,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208,175,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,247,223,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 59,138, 94,189,138,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216,176,180, 3, 60, 1, 0, 0, + 9, 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, 7, 86,145,186, +255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,188, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, + 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 11, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 83,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,224,177,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 71, 85,145,187,223,223,124, 60,189, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,247, 61, 14, 61, +221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 7,224,124, 61,127,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 11,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,145,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232,178,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,168,127, 35,188,247, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, + 7,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, 82, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 43,138, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, + 25,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,240,179,180, 3, + 60, 1, 0, 0, 9, 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, +135, 84,145,186, 63,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187, 55,224,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 17, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 30,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +203, 20,227,188, 24,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,164,127, 35,189, 18, 62, 14, 62, +163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 55,138, 94,189,155,155, 65, 62,183,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 9, 85,145,189, 36,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,248,180,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, +239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189, +139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 0,182,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 39, 85,145,188, 15,224,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, + 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,151,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 31, 85,145,189, 31,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 8,183,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187, +255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 23,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, + 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,184,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,247,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, + 72,127, 35,188, 0, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 14,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 27,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,251, 84,145,189, 27,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24,185,180, 3, 60, 1, 0, 0, + 9, 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, 7, 85,145,186, +127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,223,223,124, 60,186, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,184,127, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 31, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,243, 20,227,188, + 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,188,127, 35,189, 7, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 17, 85,145,189, 22,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 32,186,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,255, 61, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40,187,180, 3, 60, 1, 0, 0, 9, 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, 71, 84,145,186,255,223,124, 59, 58,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, + 23,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 19,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,170,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 56,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 13, 85,145,189, + 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48,188,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187, 63,224,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +171, 20,227,188, 7,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 11, 62, 14, 62, +163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 19,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0, 56,189,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, +255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,103, 85,145,188,255,223,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 75, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,216,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189, +143,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,143, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64,190,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 71, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 27,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 19, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,155,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 31, 85,145,189, 35,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 72,191,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, +191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188,255, 61, 14, 61,219,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,187, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, + 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,143,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80,192,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61, +128,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 13, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 75,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 29,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88,193,180, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,231, 84,145,188, 23,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, + 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,149,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 33,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 96,194,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +215, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188, 7, 62, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,251, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,207, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +166,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 45,138, 94,189,147,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 8, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104,195,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,222,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, +255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188,255,142,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 91,138, 94,189,139,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, + 15,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112,196,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 13, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,120,197,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, +255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128,198,180, 3, 60, 1, 0, 0, 9, 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, 7, 82,145,186,255,223,124, 59, + 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 83,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,126, 35,188,239, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, +135, 84,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 75, 20,227,188,255,142,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, 88,127, 35,189,255, 61, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0,219,137, 94,189,135,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, +223, 84,145,189, 15,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +136,199,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, + 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,137,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 15,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144,200,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,127,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,251, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 3,224,124, 61, +124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 8,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 10, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 27,138, 94,189,143,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 24,224,124, 62, +140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152,201,180, 3, 60, 1, 0, 0, + 9, 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, 7, 86,145,186, +255,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 63,224,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 15, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 71, 85,145,188, 31,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, + 27,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 23, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,157,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 31, 85,145,189, 37,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,160,202,180, 3, 60, 1, 0, 0, 9, 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, 7, 87,145,186, 15,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +135, 85,145,187, 19,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,232,127, 35,188, 12, 62, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 28,224,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 25,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +200,127, 35,189, 19, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,155,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 35,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,203,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186, 63,224,124, 59, 58,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,168,127, 35,188, 3, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, + 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, + 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176,204,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186, 33,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 29,224,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 11, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 24,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, + 43, 21,227,188, 24,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 18, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,157,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 37,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,184,205,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, +255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192,206,180, 3, 60, 1, 0, 0, 9, 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, 7, 82,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188, 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, +167, 84,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188, 15,143,197, 61, + 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,136,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,143,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, +247, 84,145,189, 23,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +200,207,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,215, 84,145,187, +191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188,255, 61, 14, 61,219,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,223, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,174,127, 35,189, + 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 57,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 12, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208,208,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61, +127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 75,138, 94,189,147,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62, +143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216,209,180, 3, 60, 1, 0, 0, + 9, 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, 7, 86,145,186, +191,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 71, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, + 17,143,197, 61, 83, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 14, 62, 14, 62,165,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,146,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 26,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,224,210,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,139,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232,211,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, +255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,251, 20,227,188, 3,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,192,127, 35,189, 6, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 67,138, 94,189,140,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, + 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,240,212,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 84,145,186,127,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +235, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,248,213,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, + 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 0,215,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,224,124, 59, + 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 47, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, +231, 84,145,188, 63,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 47,143,197, 61, + 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,167,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, +255, 84,145,189, 51,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 8,216,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186, 31,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187, + 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 16, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,215, 20,227,188, 22,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,172,127, 35,189, + 17, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 53,138, 94,189,151,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 9, 85,145,189, 32,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,217,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188,255,223,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 59,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 23,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24,218,180, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,186, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,231, 84,145,188,247,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, + 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 7, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,145,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0,255, 84,145,189, 26,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 32,219,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40,220,180, 3, 60, 1, 0, 0, 9, 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,191, 84,145,186,255,222,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,229, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,154,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, +255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,232, 20,227,188, 7,143,197, 61, 82, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,182,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 65,138, 94,189,139,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 16, 85,145,189, + 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48,221,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187, 31,224,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0, 56,222,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,135, 84,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, + 47, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 47,224,124, 61,125,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 47,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,152,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189, +167,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 49,224,124, 62,139, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64,223,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, + 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, +167, 84,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, + 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,104,127, 35,189, 9, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, +239, 84,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 72,224,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,171, 20,227,188, 31,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, + 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,159,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 39,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80,225,180, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61, +125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,192,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 67,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 19,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88,226,180, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 7, 85,145,188,247,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, +255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 5, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,138,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 96,227,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +135, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +168,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104,228,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187, 15,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188, + 19,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 17,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,164,127, 35,189, 14, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, + 30,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112,229,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 83,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 84,145,187,191,223,124, 60, +186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 40,127, 35,188,223, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,239,223,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +155, 20,227,188,255,142,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,128,127, 35,189,255, 61, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,131,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0,243, 84,145,189, 15,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,120,230,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, +239, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,255,223,124, 61,124,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188,247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,120,127, 35,189,255, 61, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189, +131,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, 11,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128,231,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 39, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 23,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 39, 85,145,189, 27,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +136,232,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,222,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, +191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,239, 61, 14, 61,221,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,103, 85,145,188,255,223,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0, 43, 21,227,188,255,142,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, + 3, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,135,155, 65, 62,186,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 19,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144,233,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +200,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 91,138, 94,189,151,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 27,224,124, 62, +143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152,234,180, 3, 60, 1, 0, 0, + 9, 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, 7, 85,145,186, +127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,191,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,231, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,215, 84,145,188,231,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, +247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 1, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,135,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0,251, 84,145,189, 15,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,160,235,180, 3, 60, 1, 0, 0, 9, 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, 7, 83,145,186,191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +135, 84,145,187,239,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188, 3, 62, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,187, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +152,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,145,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,236,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186, 63,224,124, 59, 56,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 47,224,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,136,127, 35,188, 15, 62, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, + 29,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 24,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 17, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 59,138, 94,189,155,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, + 35,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176,237,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60, +188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, + 43, 21,227,188, 23,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 15, 62, 14, 62, +166,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,150,155, 65, 62,186,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 30,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,184,238,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, + 11, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 23,224,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 17, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 33,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192,239,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,191,223,124, 59, + 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 39, 85,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 17,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 14, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 23, 85,145,189, 34,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +200,240,180, 3, 60, 1, 0, 0, 9, 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,103, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,191, 84,145,187, + 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 3, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,223, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,174,127, 35,189, + 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208,241,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,191,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 3,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, + 8,128, 35,188, 4, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 18,224,124, 61, +128,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 14, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 91,138, 94,189,149,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 26,224,124, 62, +143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216,242,180, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,191,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,247, 84,145,188,247,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, + 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,160,127, 35,189, 7, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 7, 85,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,224,243,180, 3, 60, 1, 0, 0, 9, 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, 7, 87,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +199, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 40,128, 35,188, 15, 62, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0, 27, 21,227,188, 31,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +208,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,163,155, 65, 62, +183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 43,224,124, 62,140, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232,244,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, + 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, + 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,240,245,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,207,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,244, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,254,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, + 11, 21,227,188, 5,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 9, 62, 14, 62, +165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 25,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,248,246,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,241,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, +253, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 11,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,176,127, 35,189, 12, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189, +146,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 27,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 0,248,180, 3, 60, 1, 0, 0, 9, 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,199, 84,145,186,255,222,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,247, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,160,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 11, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,231, 20,227,188, 15,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,178,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 61,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 14, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 8,249,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,239, 61, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,203, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, + 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,137,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 17,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,250,180, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,215, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +140,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,251, 84,145,188, 15,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,178,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 61,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24,251,180, 3, 60, 1, 0, 0, + 9, 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, 7, 85,145,186, + 13,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,188, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 9, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 23, 85,145,188, 22,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, + 16,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 14, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,148,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 15, 85,145,189, 30,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 32,252,180, 3, 60, 1, 0, 0, 9, 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,199, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +231, 84,145,187,159,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188,231, 61, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,217, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +175,127, 35,189, 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 56,138, 94,189,140,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 21,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40,253,180, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,224,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 63,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0, 72,128, 35,188, 31, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,103, 85,145,188, + 47,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 75, 21,227,188, 39,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,248,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0,139,138, 94,189,163,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 55, 85,145,189, + 43,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48,254,180, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +219, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62, +165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,139,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0, 56,255,180, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 71, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, +239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,255,223,124, 61,125,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,187, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,152,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189, +139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 19,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64, 0,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 23, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,251, 20,227,188, 7,143,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 19, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 72, 1,181, 3, 60, 1, 0, 0, 9, 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,199, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 3, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, + 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,147,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80, 2,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 39,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,227, 20,227,188, 33,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 24, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 67,138, 94,189,162,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 17, 85,145,189, 45,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88, 3,181, 3, 60, 1, 0, 0, + 9, 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, 7, 85,145,186, +255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, + 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 96, 4,181, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +231, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 7, 62, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 9, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104, 5,181, 3, 60, 1, 0, 0, 9, 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, 7, 82,145,186,223,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,235,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,200,126, 35,188,251, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,167, 84,145,188, + 9,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,120,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0,251,137, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, + 28,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112, 6,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,255,222,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,191,223,124, 60, +186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, + 3, 21,227,188, 7,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,196,127, 35,189, 7, 62, 14, 62, +163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 87,138, 94,189,143,155, 65, 62,183,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 29, 85,145,189, 23,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,120, 7,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 84,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, +251, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, 11,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,155, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,136,127, 35,189, 12, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 19,138, 94,189, +144,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 24,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128, 8,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 71, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 11,143,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 31, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +136, 9,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +239,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 3, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,219, 20,227,188, 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, + 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,149,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144, 10,181, 3, 60, 1, 0, 0, 9, 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,135, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,103, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +248,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 55, 85,145,188, 15,224,124, 61, +125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 35, 21,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,220,127, 35,189, 15, 62, 14, 62,162,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, +107,138, 94,189,151,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 37, 85,145,189, 31,224,124, 62, +139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152, 11,181, 3, 60, 1, 0, 0, + 9, 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,135, 86,145,186, +255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,103, 85,145,187,255,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,184,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 7, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, + 31,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 23, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 71,138, 94,189,159,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 18, 85,145,189, 43,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,160, 12,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,222,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 39, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,243, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +184,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 83,138, 94,189,151,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 25, 85,145,189, 27,224,124, 62,140, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 13,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,222,124, 59, 58,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0, 8,128, 35,188,239, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, +255,223,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 75, 21,227,188, 7,143,197, 61, 82, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0,107,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, + 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176, 14,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 63,224,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +219, 20,227,188, 23,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 15, 62, 14, 62, +165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,184, 15,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, +255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,176,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189, +147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 31,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192, 16,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,143,223,124, 59, + 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,251, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 39, 85,145,188, 2,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 11,143,197, 61, + 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,145,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 7, 85,145,189, 27,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +200, 17,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, + 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208, 18,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +152,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188,255,223,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 75,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 23,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 19,181, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,186, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,239, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,199, 84,145,188,239,223,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188, +247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,120,127, 35,189,251, 61, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,131,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0,239, 84,145,189, 11,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,224, 20,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, + 39, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,176,127, 35,188,239, 61, 14, 61, +219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 19, 85,145,188,239,223,124, 61,125,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,231, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +179,127, 35,189, 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 65,138, 94,189,139,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 16, 85,145,189, 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232, 21,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,104,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,239, 84,145,188, + 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,164,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 51,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, + 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,240, 22,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,207,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,243, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,251,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,248, 23,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, + 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189, +147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 27,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 0, 25,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,127,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,247, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 7, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 6, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 23, 85,145,189, 22,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 8, 26,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187, + 13,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 5, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 19,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,227, 20,227,188, 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, + 14, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,149,155, 65, 62,185,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 13, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16, 27,181, 3, 60, 1, 0, 0, 9, 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,151, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0,219, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +140,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,249, 84,145,188, 15,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,205, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 10, 85,145,189, 27,224,124, 62, +142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24, 28,181, 3, 60, 1, 0, 0, + 9, 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, 7, 86,145,186, +255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, + 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 32, 29,181, 3, 60, 1, 0, 0, 9, 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,175, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +224, 84,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,142,127, 35,188,239, 61, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 1, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,207, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +164,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 42,138, 94,189,135,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 4, 85,145,189, 15,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40, 30,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,200,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, + 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 82, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, + 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48, 31,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,127,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,223,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,176,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 19, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +231, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,178,127, 35,189, 9, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 24,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0, 56, 32,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, + 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189, +151,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62,143, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64, 33,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 23, 85,145,189, 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, + 72, 34,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, +255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,255, 61, 14, 61,217,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,123,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, + 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,182,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 27,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80, 35,181, 3, 60, 1, 0, 0, 9, 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, 71, 85,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +144,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 31,224,124, 61, +125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,223, 20,227,188, 31,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 23, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 63,138, 94,189,161,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 14, 85,145,189, 43,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88, 36,181, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, 15,224,124, 60,188, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, + 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,150,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 30,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0, 96, 37,181, 3, 60, 1, 0, 0, 9, 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, 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +135, 84,145,187,255,223,124, 60,185, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,255, 61, 14, 61, +217,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,255,223,124, 61,123,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +152,127, 35,189, 7, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,143,155, 65, 62, +184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104, 38,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,127,223,124, 59, 56,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,168,127, 35,188,247, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, +255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 59,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, + 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112, 39,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 5, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,120, 40,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,189, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, + 1, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 16,224,124, 61,127,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,184,127, 35,189, 13, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189, +147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 30,224,124, 62,142, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128, 41,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 7, 85,145,188, 7,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, + 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 23, 85,145,189, 29,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +136, 42,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,191,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, +255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 11, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0, 11, 21,227,188, 21,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, + 17, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,153,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 33,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144, 43,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 86,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, + 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, +107,138, 94,189,147,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 39, 85,145,189, 27,224,124, 62, +140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152, 44,181, 3, 60, 1, 0, 0, + 9, 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, 7, 86,145,186, +255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, + 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 15, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,160, 45,181, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61, +220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,215, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +174,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 57,138, 94,189,143,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 13, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 46,181, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188, + 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 23,143,197, 61, 82, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, + 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176, 47,181, 3, + 60, 1, 0, 0, 9, 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, + 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,247, 84,145,187,191,223,124, 60, +187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, + 0, 0, 32, 63, 0, 0, 0, 0, 11, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, +227, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 7, 62, 14, 62, +164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 73,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, + 0, 0, 0, 62, 0, 0, 0, 0, 20, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,216, 0, 0, 0,184, 48,181, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, + 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, +255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, + 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, + 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 55,138, 94,189, +147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 12, 85,145,189, 27,224,124, 62,141, 17,245, 63, + 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192, 49,181, 3, 60, 1, 0, 0, 9, 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, 7, 86,145,186,255,223,124, 59, + 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, + 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, + 7, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 23,143,197, 61, + 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, + 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, + 23, 85,145,189, 35,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, +200, 50,181, 3, 60, 1, 0, 0, 9, 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,135, 84,145,186, 15,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187, +251,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 8, 62, 14, 61,220,123, 65, 63, + 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 22,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, + 0, 0, 0, 0,219, 20,227,188, 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,172,127, 35,189, + 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,184,177,216, 63, + 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 9, 85,145,189, 30,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208, 51,181, 3, 60, 1, 0, 0, 9, 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, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, + 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, +168,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61, +126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, + 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, + 67,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 27,224,124, 62, +141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 52,181, 3, 60, 1, 0, 0, + 9, 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, 7, 84,145,186, +255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, + 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, + 0, 0, 0, 0, 7, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, +255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 3, 62, 14, 62,164,172,187, 63, + 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,137,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, + 0, 0, 0, 0, 23, 85,145,189, 17,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +216, 0, 0, 0,224, 53,181, 3, 60, 1, 0, 0, 9, 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,111, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, +173, 84,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,116,127, 35,188,255, 61, 14, 61, +221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,245, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, + 0, 0, 0, 63, 0, 0, 0, 0,199, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0, +163,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 47,138, 94,189,147,155, 65, 62, +185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 6, 85,145,189, 28,224,124, 62,142, 17,245, 63, 0, 0,200, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232, 54,181, 3, 60, 1, 0, 0, 9, 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, 7, 82,145,186,127,223,124, 59, 57,146,131, 62, + 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, + 0, 0, 0, 0, 8,127, 35,188,247, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, + 7,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188, 7,143,197, 61, 81, 2,158, 63, + 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,136,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, + 0, 0, 0, 0, 27,138, 94,189,147,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, + 28,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,232, 0, 0, 0,240, 55,181, 3, +119, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,137,156, 3,105, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 23, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116, +101,109, 32, 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,168, 90,154, 3, + 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0, 8, 57,181, 3, +115, 0, 0, 0, 1, 0, 0, 0,152, 60,181, 3,184, 4,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101, +119,108, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 97,109,112, 1, 0, 0, 4, 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, 8, 87,179, 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,192,197,211,188, 76,229, 59, 65, +208,106,184, 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,247,215, 98,191, 71, 11, 72, 63,230,248, 6, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 14, 29, 63,149,225,182, 62, 84, 76, 52,191, 0, 0, 0, 0, 22, 40, 74,191, +201, 74,139, 62,228,198, 12,191, 0, 0, 0, 0, 84,213,157,187,151,190,100, 63,145,223,229, 62, 0, 0, 0, 0,192,197,211,188, + 76,229, 59, 65,208,106,184, 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,147, 39, 25, 51, 43, 47, 63,179, 0, 0, 0, 0, 9,108,247, 50, + 0, 0,128, 63, 26, 92,142,178, 0, 0, 0, 0, 43, 4,114,179, 32, 59,141,178, 1, 0,128, 63, 0, 0, 0, 0,135,255,127,177, +130,214, 10, 40, 1, 0, 0,181, 0, 0,128, 63,213, 14, 29, 63, 23, 40, 74,191,254,211,157,187, 0, 0, 0, 0, 83, 76, 52,191, +227,198, 12,191,148,223,229, 62, 0, 0, 0, 0,149,225,182,190,202, 74,139,190,152,190,100,191, 0, 0, 0, 0,208, 36,158,192, +100,186,110,192, 99, 43,169,193, 0, 0,128, 63, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, + 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,236, 81, 56, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 1, 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, 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,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 0, 0, 92, 3, 0, 0,152, 60,181, 3,115, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 57,181, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,116,101,120,116,117,114,101, 0,114,101,118,105,101,119, 46, 48, 48, 53, 0, 0, 0, 0, + 1, 0, 0, 4, 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,160,170,186, 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, 40, 64,181, 3, 96, 64,181, 3, + 1, 0, 0, 0, 1, 0, 0, 0, 61, 16,183,188, 21,204,103,191, 48,234,228, 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,153, 39,155, 64,153, 39,155, 64,153, 39,155, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,218, 15,201, 63, 0, 0,192, 37,255,255,255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 39,155, 64, +152, 39, 27, 38,102,187,232,166, 0, 0, 0, 0,102,187,232, 38,157,134,196, 52,153, 39,155, 64, 0, 0, 0, 0,154, 39, 27, 38, +153, 39,155,192,157,134,196, 52, 0, 0, 0, 0, 61, 16,183,188, 21,204,103,191, 48,234,228, 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, 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, +236, 48,206,152, 9, 66, 41, 24, 0, 0, 0, 0,216, 55, 60,152, 0, 0,128, 63, 88,133,105,166, 0, 0, 0, 0,226,159, 91,151, + 64,218, 93, 38, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 25, 50, 83, 62, +147,101,158, 36, 27, 50,211, 35, 0, 0, 0, 0,147,101,158,164, 25, 50, 83, 62, 59,119,189, 38, 0, 0, 0, 0, 0, 24, 44,173, + 0,179,115,175, 25, 50, 83, 62, 0, 0, 0, 0,236,251, 33, 59, 88, 37, 40, 59,118, 71,238, 63, 0, 0,128, 63, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 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,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62, +236, 81, 56, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 4, 4, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 40, 64,181, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 96, 64,181, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 77, 65, 0, 0,112, 2, 0, 0,152, 64,181, 3, 42, 0, 0, 0, 1, 0, 0, 0, 64, 68,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,101, 99,107,101,114,100, 97,114,107, 0, 0, 0, 97,116,101,114,105, 97, 0, 0, + 11, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,124, 36, 57, 62,187, 31, 57, 62,187, 31, 57, 62, + 0, 0,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, 0, 63,154,153, 89, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, + 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,160, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 1, 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, 0, 0, 3, 0, 64, 1, 3, 0, 64, 1, 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,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 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, 16, 8, 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, 56, 67,181, 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,240, 67,181, 3, + 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,205,204, 76, 63,205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0, 56, 67,181, 3, 33, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,104, 93,181, 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, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,192, 63, + 1, 0,192, 63, 1, 0,192, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,183,209, 56,184,177,209, 56, +184,177,209, 56, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 67,181, 3, 19, 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, 77, 65, 0, 0,112, 2, 0, 0, + 64, 68,181, 3, 42, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3,152, 64,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104, +101, 99,107,101,114,108,105,103,104,116, 0, 0, 0, 97,116,101,114,105, 0, 0, 11, 0, 0, 0, 23, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,158, 56, 23, 63,187, 52, 23, 63,187, 52, 23, 63, 0, 0,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, 0, 63,154,153, 89, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 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,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, + 2, 0, 2, 0, 1, 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, 0, 0, 3, 0, 64, 1, 3, 0, 64, 1, 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,128, 63, 0, 0, 0, 0, 0, 0, 2, 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, + 16, 8, 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,224, 70,181, 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,152, 71,181, 3, 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,205,204, 76, 63,205,204, 76, 63, +205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +136, 0, 0, 0,224, 70,181, 3, 33, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 93,181, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,183,209, 56,184,177,209, 56,184,177,209, 56, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +152, 71,181, 3, 19, 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, 77, 65, 0, 0,112, 2, 0, 0,232, 71,181, 3, 42, 0, 0, 0, 1, 0, 0, 0, +200, 78,181, 3, 64, 68,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,112,114,101,118,105,101,119, 0, 0, 97,116,101,114,105, + 97,108, 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,128, 63, + 61,232, 54, 63,184,161, 23, 63, 0, 0,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, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,188,248, 68, 62, + 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,121,130, 63, 0, 0,160, 63, + 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 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, 0, 0, 3, 0, 17, 3, + 3, 0, 17, 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,128, 63, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 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, 16, 8, 1, 0, 64, 75,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,136, 74,181, 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,120, 78,181, 3, 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,205,204, 76, 63,205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0,136, 74,181, 3, 33, 0, 0, 0, + 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 91,181, 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, 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, 16, 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, 0, 63, + 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, 8, 3, 0, 0, 64, 75,181, 3, 36, 0, 0, 0, 1, 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,245, 40,220, 62, 0, 0, 0, 0, +164,112,125, 63, 0, 0,128, 63,106,214, 24, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 78,181, 3, 19, 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, 77, 65, 0, 0, +112, 2, 0, 0,200, 78,181, 3, 42, 0, 0, 0, 1, 0, 0, 0,168, 85,181, 3,232, 71,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 65,116,101,120,116,117,114,101, 0,114,101,118,105,101,119, 46, 48, 48, 49, 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, 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, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63, 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,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, +205,204,204, 61, 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, 0, 0, 71, 0, 1, 3, 67, 0, 1, 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,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 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, 1, 8,129, 0, 32, 82,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, +104, 81,181, 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, 88, 85,181, 3, 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,205,204, 76, 63, +205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,136, 0, 0, 0,104, 81,181, 3, 33, 0, 0, 0, 1, 0, 0, 0, 1, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 91,181, 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, 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, + 16, 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, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 68, 65, 84, 65, + 8, 3, 0, 0, 32, 82,181, 3, 36, 0, 0, 0, 1, 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,245, 40,220, 62, 0, 0, 0, 0,164,112,125, 63, 0, 0,128, 63,106,214, 24, 63, 0, 0,128, 63, + 0, 0,128, 63, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 85,181, 3, 19, 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, 77, 65, 0, 0,112, 2, 0, 0,168, 85,181, 3, 42, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,200, 78,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 46, 48, 48, 49, 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,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,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, 0, 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, 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, 0, 0, 3, 0, 1, 3, + 3, 0, 1, 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,128, 63, + 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 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, 72, 88,181, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 91,181, 3, 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,205,204, 76, 63,205,204, 76, 63,205,204, 76, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 72, 88,181, 3, 36, 0, 0, 0, + 1, 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,245, 40,220, 62, + 0, 0, 0, 0,164,112,125, 63, 0, 0,128, 63,106,214, 24, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 91,181, 3, 19, 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, + 84, 69, 0, 0, 24, 1, 0, 0,208, 91,181, 3, 38, 0, 0, 0, 1, 0, 0, 0,104, 93,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 69,112,114,101,118,105,101,119, 0,101,120, 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,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, 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, 5, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 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, 1, 0, 0, 0, 2, 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, + 24, 93,181, 3, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 93,181, 3, 19, 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, + 84, 69, 0, 0, 24, 1, 0, 0,104, 93,181, 3, 38, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,208, 91,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 69,102, 97,107,101,115,104, 97,100,111,119, 0, 0, 76,101,110,100, 0,101,120, 0, 0, 0, 2, 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, 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, 5, 0, 40, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 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, 1, 0, 0, 0, 2, 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, 77, 69, 0, 0, 24, 1, 0, 0,176, 94,181, 3, 52, 0, 0, 0, 1, 0, 0, 0, +112, 96,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 46, 48, 48, 49, 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,248, 95,181, 3,160,195,181, 3,224,234,181, 3, 0, 0, 0, 0,184, 97,181, 3,200,146,181, 3, + 0, 0, 0, 0, 0, 65,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 96,181, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,145,181, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24,194,181, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +249, 1, 0, 0,237, 3, 0, 0,244, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,192,133, 88, 61,184, 45, 85,189, +196,181, 24,190,185, 71, 35, 63,153, 31,235, 62,130,102,203, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, +248, 95,181, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 68, 65, 84, 65, 84, 1, 0, 0, 48, 96,181, 3, 58, 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,184, 97,181, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 47, 0, 0, +184, 97,181, 3, 58, 0, 0, 0,249, 1, 0, 0,140,144,131, 62,119,163,200, 60,156, 9, 85, 62,125, 92, 70,170,228, 21,255, 0, + 0, 0, 0, 0, 50,222, 26,190,119,163,200, 60,156, 9, 85, 62,131,163, 70,170,228, 21,255, 0, 0, 0, 0, 0, 61,126,146, 62, +223, 37, 8,188, 99,183, 47, 62,247, 76,191,194,228, 81,255, 0, 2, 0, 0, 0,147,185, 56,190,223, 37, 8,188, 99,183, 47, 62, + 9,179,191,194,228, 81,255, 0, 2, 0, 0, 0,129,176,157, 62,211, 91,217,188,244,238,246, 61, 31, 84,226,181,191, 61,255, 0, + 2, 0, 0, 0, 28, 30, 79,190,211, 91,217,188,244,238,246, 61,225,171,226,181,191, 61,255, 0, 2, 0, 0, 0,115, 19, 94, 62, +103,251,128,189,150, 32, 14, 62,241, 9,155,144, 64, 62,255, 0, 2, 0, 0, 0, 26,161,227,189,103,251,128,189,150, 32, 14, 62, + 15,246,155,144, 64, 62,255, 0, 2, 0, 0, 0,115, 19, 94, 62,251,118, 25,189, 20,165, 62, 62,184, 14,144,163, 76, 87,255, 0, + 2, 0, 0, 0, 26,161,227,189,251,118, 25,189, 20,165, 62, 62, 72,241,144,163, 76, 87,255, 0, 2, 0, 0, 0,115, 19, 94, 62, +232,107, 34, 60,116,128, 92, 62, 3, 3,121,131,110, 29,255, 0, 0, 0, 0, 0, 26,161,227,189,232,107, 34, 60,116,128, 92, 62, +253,252,121,131,110, 29,255, 0, 0, 0, 0, 0, 58,193, 56, 62,119,163,200, 60, 77,247, 99, 62, 56,171,117,167,206, 36,255, 0, + 0, 0, 0, 0,168,252,152,189,119,163,200, 60, 77,247, 99, 62,200, 84,117,167,206, 36,255, 0, 0, 0, 0, 0,109, 42, 23, 62, +223, 37, 8,188, 88,215, 73, 62,152,217,122,203, 56,110,255, 0, 0, 0, 0, 0,229,197, 0, 62,211, 91,217,188, 71, 14, 29, 62, +179,184, 93,175, 66, 69,255, 0, 2, 0, 0, 0,249, 23,164,188,211, 91,217,188, 71, 14, 29, 62, 77, 71, 93,175, 66, 69,255, 0, + 2, 0, 0, 0, 88,231,182, 61,159,154,121, 61,179,201, 32, 62,181,151,104,255, 51, 74,255, 0, 2, 0, 0, 0,207,121,134, 60, +159,154,121, 61,179,201, 32, 62, 75,104,104,255, 51, 74,255, 0, 2, 0, 0, 0, 25,158,242, 61,159,154,121, 61, 88,215, 73, 62, + 78,171,150,255,246, 95,255, 0, 2, 0, 0, 0,110,194, 80,188,159,154,121, 61, 88,215, 73, 62,178, 84,150,255,246, 95,255, 0, + 2, 0, 0, 0,138,211, 41, 62,159,154,121, 61, 77,247, 99, 62,152,133,153,254, 98, 37,255, 0, 0, 0, 0, 0,143, 66,118,189, +159,154,121, 61, 77,247, 99, 62,104,122,153,254, 98, 37,255, 0, 0, 0, 0, 0, 58,193, 56, 62,154,232,206, 61, 77,247, 99, 62, + 24,170, 13, 88, 89, 35,255, 0, 0, 0, 0, 0,168,252,152,189,154,232,206, 61, 77,247, 99, 62,232, 85, 13, 88, 89, 35,255, 0, + 0, 0, 0, 0,109, 42, 23, 62,173, 79, 5, 62, 88,215, 73, 62,249,200,221, 65,244, 94,255, 0, 2, 0, 0, 0, 31,158, 43,189, +173, 79, 5, 62, 88,215, 73, 62, 7, 55,221, 65,244, 94,255, 0, 2, 0, 0, 0,229,197, 0, 62, 54,180, 27, 62, 71, 14, 29, 62, + 51,186, 86, 78, 78, 73,255, 0, 2, 0, 0, 0,249, 23,164,188, 54,180, 27, 62, 71, 14, 29, 62,205, 69, 86, 78, 78, 73,255, 0, + 2, 0, 0, 0,115, 19, 94, 62,111, 6, 65, 62,150, 32, 14, 62, 2, 11,152,107,114, 68,255, 0, 2, 0, 0, 0, 26,161,227,189, +111, 6, 65, 62,150, 32, 14, 62,254,244,152,107,114, 68,255, 0, 2, 0, 0, 0,115, 19, 94, 62, 14, 43, 35, 62, 20,165, 62, 62, +201, 14,180, 91, 14, 88,255, 0, 2, 0, 0, 0, 26,161,227,189, 14, 43, 35, 62, 20,165, 62, 62, 55,241,180, 91, 14, 88,255, 0, + 2, 0, 0, 0,115, 19, 94, 62,250,195,236, 61,116,128, 92, 62,134, 2, 29,125,228, 26,255, 0, 0, 0, 0, 0, 26,161,227,189, +250,195,236, 61,116,128, 92, 62,122,253, 29,125,228, 26,255, 0, 0, 0, 0, 0,140,144,131, 62,154,232,206, 61,156, 9, 85, 62, + 54, 93, 67, 85,154, 20,255, 0, 0, 0, 0, 0, 50,222, 26,190,154,232,206, 61,156, 9, 85, 62,202,162, 67, 85,154, 20,255, 0, + 0, 0, 0, 0, 61,126,146, 62,173, 79, 5, 62, 99,183, 47, 62,241, 76,161, 60, 97, 82,255, 0, 2, 0, 0, 0,147,185, 56,190, +173, 79, 5, 62, 99,183, 47, 62, 15,179,161, 60, 97, 82,255, 0, 2, 0, 0, 0,129,176,157, 62, 54,180, 27, 62,244,238,246, 61, +179, 83,157, 71, 45, 65,255, 0, 2, 0, 0, 0, 28, 30, 79,190, 54,180, 27, 62,244,238,246, 61, 77,172,157, 71, 45, 65,255, 0, + 2, 0, 0, 0,157, 89,176, 62,159,154,121, 61, 67, 1,232, 61, 40,111,113,255,117, 63,255, 0, 2, 0, 0, 0, 84,112,116,190, +159,154,121, 61, 67, 1,232, 61,216,144,113,255,117, 63,255, 0, 2, 0, 0, 0,237,107,161, 62,159,154,121, 61,139, 64, 40, 62, + 48,100,154,255,167, 79,255, 0, 2, 0, 0, 0,244,148, 86,190,159,154,121, 61,139, 64, 40, 62,208,155,154,255,167, 79,255, 0, + 2, 0, 0, 0,100, 7,139, 62,159,154,121, 61, 48, 78, 81, 62,117,126,181,254,185, 19,255, 0, 0, 0, 0, 0,227,203, 41,190, +159,154,121, 61, 48, 78, 81, 62,139,129,181,254,185, 19,255, 0, 0, 0, 0, 0, 26,229,140, 62,159,154,121, 61, 8,197, 88, 62, +160,120,106,254,198, 42,255, 0, 2, 0, 0, 0, 79,135, 45,190,159,154,121, 61, 8,197, 88, 62, 96,135,106,254,198, 42,255, 0, + 2, 0, 0, 0, 66,110,133, 62,114, 95,214, 61,116,128, 92, 62,173, 93,126, 74, 93, 45,255, 0, 2, 0, 0, 0,158,153, 30,190, +114, 95,214, 61,116,128, 92, 62, 83,162,126, 74, 93, 45,255, 0, 2, 0, 0, 0,115, 19, 94, 62,170,177,251, 61,185,178,103, 62, + 9, 11, 31,115,216, 54,255, 0, 2, 0, 0, 0, 26,161,227,189,170,177,251, 61,185,178,103, 62,247,244, 31,115,216, 54,255, 0, + 2, 0, 0, 0,206, 5, 53, 62,114, 95,214, 61,145, 41,111, 62, 9,181,184, 80, 43, 65,255, 0, 2, 0, 0, 0,208,133,145,189, +114, 95,214, 61,145, 41,111, 62,247, 74,184, 80, 43, 65,255, 0, 2, 0, 0, 0,178, 92, 34, 62,159,154,121, 61,145, 41,111, 62, +116,146, 57,254, 43, 66,255, 0, 2, 0, 0, 0, 48,103, 88,189,159,154,121, 61,145, 41,111, 62,140,109, 57,254, 43, 66,255, 0, + 2, 0, 0, 0,206, 5, 53, 62, 22,200,170, 60,145, 41,111, 62, 34,182,181,173,115, 64,255, 0, 2, 0, 0, 0,208,133,145,189, + 22,200,170, 60,145, 41,111, 62,222, 73,181,173,115, 64,255, 0, 2, 0, 0, 0,115, 19, 94, 62,159,154,121, 61,253,228,114, 62, + 74, 24,139,255,171,125,255, 0, 2, 0, 0, 0, 26,161,227,189,159,154,121, 61,253,228,114, 62,182,231,139,255,171,125,255, 0, + 2, 0, 0, 0,115, 19, 94, 62,149,249, 43, 59,185,178,103, 62,218, 10,140,140, 45, 54,255, 0, 2, 0, 0, 0, 26,161,227,189, +149,249, 43, 59,185,178,103, 62, 38,245,140,140, 45, 54,255, 0, 2, 0, 0, 0, 66,110,133, 62, 22,200,170, 60,116,128, 92, 62, +141, 92,203,179,210, 44,255, 0, 2, 0, 0, 0,158,153, 30,190, 22,200,170, 60,116,128, 92, 62,115,163,203,179,210, 44,255, 0, + 2, 0, 0, 0,203,133, 88, 61,202,248, 23, 62, 88,215, 73, 62, 0, 0, 43,124, 17, 31,255, 0, 0, 0, 0, 0,203,133, 88, 61, + 34, 77,229, 61,145, 41,111, 62, 0, 0, 63,249,209,127,255, 0, 0, 0, 0, 0,203,133, 88, 61,150,254,188,190,236, 27, 70, 62, + 0, 0,204,251,237,127,255, 0, 0, 0, 0, 0,203,133, 88, 61,191, 79, 78,190,116,128, 92, 62, 0, 0, 33,150,238, 71,255, 0, + 2, 0, 0, 0,203,133, 88, 61,146,221, 14,190, 77,247, 99, 62, 0, 0, 28,100,192, 79,255, 0, 0, 0, 0, 0,203,133, 88, 61, + 30, 99,211,190, 20,165, 62, 62, 0, 0,184,142,147, 59,255, 0, 2, 0, 0, 0,203,133, 88, 61,133,198, 12, 62,190,169, 6, 62, + 0, 0,143,103, 57, 75,255, 0, 0, 0, 0, 0,203,133, 88, 61, 99, 38, 91, 62, 28,120,239, 61, 0, 0,115, 78, 34,101,255, 0, + 0, 0, 0, 0,203,133, 88, 61, 16,243,187, 62,170,250,206,190, 0, 0,190,110,212,191,255, 0, 2, 0, 0, 0,203,133, 88, 61, +247,106, 87, 62,178,224, 11,191, 0, 0,144, 35, 12,133,255, 0, 3, 0, 0, 0,203,133, 88, 61, 18,165,157,188, 33, 20, 9,191, + 0, 0,194,214,213,134,255, 0, 2, 0, 0, 0,203,133, 88, 61, 32, 43,108,190,227, 83,160,190, 0, 0,154,134,113,215,255, 0, + 2, 0, 0, 0,109, 42, 23, 62,146,221, 14,190, 67, 1,232, 61,144,113,122,198, 79, 13,255, 0, 0, 0, 0, 0, 31,158, 43,189, +146,221, 14,190, 67, 1,232, 61,112,142,122,198, 79, 13,255, 0, 0, 0, 0, 0, 87,106, 75, 62,138, 37,131,190, 28,120,239, 61, +196,122, 19, 31,152, 18,255, 0, 2, 0, 0, 0,225, 78,190,189,138, 37,131,190, 28,120,239, 61, 60,133, 19, 31,152, 18,255, 0, + 2, 0, 0, 0,115, 19, 94, 62, 2,186,192,190, 28,120,239, 61,167,125,146, 12,226, 20,255, 0, 0, 0, 0, 0, 26,161,227,189, + 2,186,192,190, 28,120,239, 61, 89,130,146, 12,226, 20,255, 0, 0, 0, 0, 0, 75,138,101, 62,200, 96,239,190,227, 37,202, 61, +113,124,142,242,196, 26,255, 0, 2, 0, 0, 0,203,142,242,189,200, 96,239,190,227, 37,202, 61,143,131,142,242,196, 26,255, 0, + 2, 0, 0, 0, 47,225, 82, 62,195,112,252,190, 10,175,194, 61,159, 79, 44,159,210, 25,255, 0, 2, 0, 0, 0,146, 60,205,189, +195,112,252,190, 10,175,194, 61, 97,176, 44,159,210, 25,255, 0, 2, 0, 0, 0, 41,248, 11, 62,242, 4, 1,191,107,138,224, 61, +143, 19, 13,131,178, 19,255, 0, 2, 0, 0, 0, 27,170,253,188,242, 4, 1,191,107,138,224, 61,113,236, 13,131,178, 19,255, 0, + 2, 0, 0, 0,203,133, 88, 61,168,226, 2,191,244,238,246, 61, 0, 0, 75,130, 21, 24,255, 0, 2, 0, 0, 0,140,144,131, 62, + 18,242,240,189,227, 37,202, 61,114, 47,117,137,232, 8,255, 0, 2, 0, 0, 0, 50,222, 26,190, 18,242,240,189,227, 37,202, 61, +142,208,117,137,232, 8,255, 0, 2, 0, 0, 0, 83, 55,178, 62, 23,233,143,189,187,156,209, 61, 25, 77,198,154,214, 13,255, 0, + 2, 0, 0, 0,193, 43,120,190, 23,233,143,189,187,156,209, 61,231,178,198,154,214, 13,255, 0, 2, 0, 0, 0, 26,222,224, 62, +182,236,140, 60, 49, 21,112, 61,216,113,247,198,255, 12,255, 0, 2, 0, 0, 0,167,188,170,190,182,236,140, 60, 49, 21,112, 61, + 40,142,247,198,255, 12,255, 0, 2, 0, 0, 0,243, 84,232, 62,202,248, 23, 62, 82,238, 2, 62,104,113, 31, 51, 32, 30,255, 0, + 2, 0, 0, 0,128, 51,178,190,202,248, 23, 62, 82,238, 2, 62,152,142, 31, 51, 32, 30,255, 0, 2, 0, 0, 0,112,224,196, 62, +190, 24, 50, 62, 2,220, 17, 62,216, 64,225,106,121, 27,255, 0, 0, 0, 0, 0,253,190,142,190,190, 24, 50, 62, 2,220, 17, 62, + 40,191,225,106,121, 27,255, 0, 0, 0, 0, 0,134,160,144, 62, 20, 20,106, 62, 99,183, 47, 62,137, 75, 82,101, 70, 20,255, 0, + 0, 0, 0, 0, 39,254, 52,190, 20, 20,106, 62, 99,183, 47, 62,119,180, 82,101, 70, 20,255, 0, 0, 0, 0, 0,195, 37, 79, 62, + 67, 92,154, 62,236, 27, 70, 62,241, 38, 19,119, 54, 26,255, 0, 2, 0, 0, 0,186,197,197,189, 67, 92,154, 62,236, 27, 70, 62, + 15,217, 19,119, 54, 26,255, 0, 2, 0, 0, 0,229,197, 0, 62,181, 7,145, 62, 48, 78, 81, 62, 21,175, 54, 96, 12, 24,255, 0, + 2, 0, 0, 0,249, 23,164,188,181, 7,145, 62, 48, 78, 81, 62,235, 80, 54, 96, 12, 24,255, 0, 2, 0, 0, 0,168,249,167, 61, + 42,212, 53, 62,196,146, 77, 62,174,155,128, 76,151, 21,255, 0, 0, 0, 0, 0,144, 48,194, 60, 42,212, 53, 62,196,146, 77, 62, + 82,100,128, 76,151, 21,255, 0, 0, 0, 0, 0, 81,129, 4, 62,241,129, 16, 62, 8,197, 88, 62, 0, 25, 4,237, 22,124,255, 0, + 0, 0, 0, 0, 89,243,193,188,241,129, 16, 62, 8,197, 88, 62, 0,231, 4,237, 22,124,255, 0, 0, 0, 0, 0,105,176,227, 61, + 17,132,184, 61,156, 9, 85, 62,160,255,126,232,209,125,255, 0, 0, 0, 0, 0,214,169,178,187, 17,132,184, 61,156, 9, 85, 62, + 96, 0,126,232,209,125,255, 0, 0, 0, 0, 0, 31,158, 43,189,223, 37, 8,188, 88,215, 73, 62,104, 38,122,203, 56,110,255, 0, + 0, 0, 0, 0,184, 69,105, 62, 92, 82, 55,189, 59, 46, 55, 62,106, 34,119,200, 16,110,255, 0, 0, 0, 0, 0,163, 5,250,189, + 92, 82, 55,189, 59, 46, 55, 62,150,221,119,200, 16,110,255, 0, 0, 0, 0, 0,134,160,144, 62,115,128,187,188,139, 64, 40, 62, +161, 55, 60,207,115,104,255, 0, 0, 0, 0, 0, 39,254, 52,190,115,128,187,188,139, 64, 40, 62, 95,200, 60,207,115,104,255, 0, + 0, 0, 0, 0,157, 89,176, 62,205, 26, 17, 61, 71, 14, 29, 62,181, 58,123,226,214,109,255, 0, 0, 0, 0, 0, 84,112,116,190, +205, 26, 17, 61, 71, 14, 29, 62, 75,197,123,226,214,109,255, 0, 0, 0, 0, 0, 9, 21,180, 62, 57, 13,177, 61, 71, 14, 29, 62, +157, 49, 61,230, 36,115,255, 0, 0, 0, 0, 0, 45,231,123,190, 57, 13,177, 61, 71, 14, 29, 62, 99,206, 61,230, 36,115,255, 0, + 0, 0, 0, 0,123,192,170, 62,170,177,251, 61, 31,133, 36, 62,206, 39,175,234,196,119,255, 0, 0, 0, 0, 0, 16, 62,105,190, +170,177,251, 61, 31,133, 36, 62, 50,216,175,234,196,119,255, 0, 0, 0, 0, 0,214,178,129, 62, 54,180, 27, 62, 20,165, 62, 62, + 62, 24, 85,255,173,125,255, 0, 0, 0, 0, 0,198, 34, 23,190, 54,180, 27, 62, 20,165, 62, 62,194,231, 85,255,173,125,255, 0, + 0, 0, 0, 0,246,142, 45, 62,230,161, 42, 62, 48, 78, 81, 62,251, 31, 40,247,158,123,255, 0, 0, 0, 0, 0, 32,152,130,189, +230,161, 42, 62, 48, 78, 81, 62, 5,224, 40,247,158,123,255, 0, 0, 0, 0, 0,203,133, 88, 61,104,133,209,190,236, 27, 70, 62, + 0, 0,148,210,170,119,255, 0, 0, 0, 0, 0,185,194,212, 61, 36, 83,198,190,236, 27, 70, 62, 39, 19, 65,222,248,121,255, 0, + 0, 0, 0, 0,191,196,240, 58, 36, 83,198,190,236, 27, 70, 62,217,236, 65,222,248,121,255, 0, 0, 0, 0, 0,145, 57,220, 61, +207, 80,226,190,167,233, 58, 62,134, 2,132,217, 12,122,255, 0, 0, 0, 0, 0, 77,241,236,186,207, 80,226,190,167,233, 58, 62, +122,253,132,217, 12,122,255, 0, 0, 0, 0, 0,168,249,167, 61, 19,131,237,190,207,114, 51, 62, 13,252,169,214, 18,121,255, 0, + 0, 0, 0, 0,144, 48,194, 60, 19,131,237,190,207,114, 51, 62,243, 3,169,214, 18,121,255, 0, 0, 0, 0, 0,203,133, 88, 61, +200, 96,239,190, 99,183, 47, 62, 0, 0,150,219,180,122,255, 0, 0, 0, 0, 0,203,133, 88, 61,254,152, 18,190,196,146, 77, 62, + 0, 0, 46, 97, 76, 83,255, 0, 0, 0, 0, 0,203,133, 88, 61, 18,242,240,189, 88,215, 73, 62, 0, 0,197,104,134, 73,255, 0, + 0, 0, 0, 0,225, 75,205, 61,235,104,248,189, 88,215, 73, 62, 52, 36, 2, 53,187,110,255, 0, 0, 0, 0, 0,179,158,179, 59, +235,104,248,189, 88,215, 73, 62,204,219, 2, 53,187,110,255, 0, 0, 0, 0, 0,105,176,227, 61,174,134, 33,190,196,146, 77, 62, +187, 95, 14,212,182, 72,255, 0, 0, 0, 0, 0,214,169,178,187,174,134, 33,190,196,146, 77, 62, 69,160, 14,212,182, 72,255, 0, + 0, 0, 0, 0, 48, 94,190, 61, 15, 98, 63,190, 88,215, 73, 62,117, 64,117,207, 90, 99,255, 0, 0, 0, 0, 0,220, 60, 81, 60, + 15, 98, 63,190, 88,215, 73, 62,139,191,117,207, 90, 99,255, 0, 0, 0, 0, 0,252,119,116, 62,239, 95,151,189,139, 64, 40, 62, +103, 49,157,196, 13,102,255, 0, 0, 0, 0, 0, 22, 53, 8,190,239, 95,151,189,139, 64, 40, 62,153,206,157,196, 13,102,255, 0, + 0, 0, 0, 0,231,123,174, 62,211, 91,217,188, 2,220, 17, 62,142, 59,107,204,223,100,255, 0, 2, 0, 0, 0,232,180,112,190, +211, 91,217,188, 2,220, 17, 62,114,196,107,204,223,100,255, 0, 2, 0, 0, 0,220,155,200, 62, 45,246, 46, 61,190,169, 6, 62, +102, 66, 11,217, 65,102,255, 0, 0, 0, 0, 0,105,122,146,190, 45,246, 46, 61,190,169, 6, 62,154,189, 11,217, 65,102,255, 0, + 0, 0, 0, 0, 72, 87,204, 62,170,177,251, 61,179,201, 32, 62, 87, 54,142,228,151,112,255, 0, 0, 0, 0, 0,213, 53,150,190, +170,177,251, 61,179,201, 32, 62,169,201,142,228,151,112,255, 0, 0, 0, 0, 0, 78, 71,191, 62,241,129, 16, 62,128, 96, 66, 62, + 82, 42, 97,247,125,120,255, 0, 2, 0, 0, 0,219, 37,137,190,241,129, 16, 62,128, 96, 66, 62,174,213, 97,247,125,120,255, 0, + 2, 0, 0, 0,140,144,131, 62, 31,244, 79, 62, 77,247, 99, 62,192, 41,216,254,253,120,255, 0, 0, 0, 0, 0, 50,222, 26,190, + 31,244, 79, 62, 77,247, 99, 62, 64,214,216,254,253,120,255, 0, 0, 0, 0, 0, 87,106, 75, 62, 48,189,124, 62,105,160,118, 62, +217, 28, 53, 7,126,124,255, 0, 0, 0, 0, 0,225, 78,190,189, 48,189,124, 62,105,160,118, 62, 39,227, 53, 7,126,124,255, 0, + 0, 0, 0, 0,109, 42, 23, 62,236,138,113, 62, 65, 23,126, 62,125,255, 44, 5,227,127,255, 0, 0, 0, 0, 0, 31,158, 43,189, +236,138,113, 62, 65, 23,126, 62,131, 0, 44, 5,227,127,255, 0, 0, 0, 0, 0,225, 75,205, 61,202,248, 23, 62,213, 91,122, 62, +130,238, 89, 2,197,126,255, 0, 0, 0, 0, 0,179,158,179, 59,202,248, 23, 62,213, 91,122, 62,126, 17, 89, 2,197,126,255, 0, + 0, 0, 0, 0,105,176,227, 61,217,159,203,189, 37,110,107, 62,115, 23, 27,230, 34,123,255, 0, 0, 0, 0, 0,214,169,178,187, +217,159,203,189, 37,110,107, 62,141,232, 27,230, 34,123,255, 0, 0, 0, 0, 0,218,229, 26, 62, 64, 3,133,190,167,233, 58, 62, +212, 74, 28, 14,225,102,255, 0, 2, 0, 0, 0,207,139, 58,189, 64, 3,133,190,167,233, 58, 62, 44,181, 28, 14,225,102,255, 0, + 2, 0, 0, 0,246,142, 45, 62,184,151,194,190, 99,183, 47, 62,235, 72, 17,252, 31,105,255, 0, 2, 0, 0, 0, 32,152,130,189, +184,151,194,190, 99,183, 47, 62, 21,183, 17,252, 31,105,255, 0, 2, 0, 0, 0,206, 5, 53, 62, 99,149,222,190, 31,133, 36, 62, +179, 66,197,225,249,104,255, 0, 2, 0, 0, 0,208,133,145,189, 99,149,222,190, 31,133, 36, 62, 77,189,197,225,249,104,255, 0, + 2, 0, 0, 0, 30, 24, 38, 62,234,249,244,190,111,151, 21, 62, 62, 44, 4,183, 98, 95,255, 0, 2, 0, 0, 0,224, 84,103,189, +234,249,244,190,111,151, 21, 62,194,211, 4,183, 98, 95,255, 0, 2, 0, 0, 0, 81,129, 4, 62, 86,181,248,190,111,151, 21, 62, +155, 19, 52,158, 54, 80,255, 0, 2, 0, 0, 0, 89,243,193,188, 86,181,248,190,111,151, 21, 62,101,236, 52,158, 54, 80,255, 0, + 2, 0, 0, 0,203,133, 88, 61,195,112,252,190,219, 82, 25, 62, 0, 0,201,154, 88, 78,255, 0, 2, 0, 0, 0,203,133, 88, 61, + 52, 55,247,188,128, 96, 66, 62, 0, 0, 2,252,239,127,255, 0, 0, 0, 0, 0,203,133, 88, 61,222,227, 61, 61,156, 9, 85, 62, + 0, 0,112,227,196,124,255, 0, 0, 0, 0, 0, 47,225, 82, 62, 82, 93, 46, 62, 88,215, 73, 62, 58, 21,234,254, 56,126,255, 0, + 0, 0, 0, 0,146, 60,205,189, 82, 93, 46, 62, 88,215, 73, 62,198,234,234,254, 56,126,255, 0, 0, 0, 0, 0, 81,129, 4, 62, +170, 34, 94, 60,196,146, 77, 62, 37,214,110,232,163,118,255, 0, 0, 0, 0, 0, 89,243,193,188,170, 34, 94, 60,196,146, 77, 62, +219, 41,110,232,163,118,255, 0, 0, 0, 0, 0, 65, 39,235, 61,222,227, 61, 61, 48, 78, 81, 62,150,232,127,230, 57,123,255, 0, + 0, 0, 0, 0,173, 11, 21,188,222,227, 61, 61, 48, 78, 81, 62,106, 23,127,230, 57,123,255, 0, 0, 0, 0, 0,145, 57,220, 61, + 76,220,190,190,236, 27, 70, 62,117, 20,197,248, 36,126,255, 0, 0, 0, 0, 0, 77,241,236,186, 76,220,190,190,236, 27, 70, 62, +139,235,197,248, 36,126,255, 0, 0, 0, 0, 0, 88,231,182, 61, 64, 3,133,190,196,146, 77, 62, 43, 19,128, 0,141,126,255, 0, + 2, 0, 0, 0,207,121,134, 60, 64, 3,133,190,196,146, 77, 62,213,236,128, 0,141,126,255, 0, 2, 0, 0, 0,203,133, 88, 61, + 64, 3,133,190,196,146, 77, 62, 0, 0,122,255,254,127,255, 0, 0, 0, 0, 0,203,133, 88, 61, 43, 11, 82,190, 88,215, 73, 62, + 0, 0,121,184, 36,106,255, 0, 0, 0, 0, 0, 8,213,197, 61, 55,235, 55,190,116,128, 92, 62,167, 66,139,160, 45, 53,255, 0, + 2, 0, 0, 0, 27,134, 21, 60, 55,235, 55,190,116,128, 92, 62, 89,189,139,160, 45, 53,255, 0, 2, 0, 0, 0, 65, 39,235, 61, +174,134, 33,190, 77,247, 99, 62,133,118,215,224,239, 36,255, 0, 2, 0, 0, 0,173, 11, 21,188,174,134, 33,190, 77,247, 99, 62, +123,137,215,224,239, 36,255, 0, 2, 0, 0, 0,185,194,212, 61, 57,123,233,189,116,128, 92, 62,167, 81,141, 95, 49, 24,255, 0, + 2, 0, 0, 0,191,196,240, 58, 57,123,233,189,116,128, 92, 62, 89,174,141, 95, 49, 24,255, 0, 2, 0, 0, 0, 31,149,145, 61, + 97, 4,226,189,116,128, 92, 62,189,200,160,108, 26, 39,255, 0, 2, 0, 0, 0, 89,225, 13, 61, 97, 4,226,189,116,128, 92, 62, + 67, 55,160,108, 26, 39,255, 0, 2, 0, 0, 0,203,133, 88, 61,106, 84, 22,190,253,228,114, 62, 0, 0, 42, 23,225,125,255, 0, + 0, 0, 0, 0,247, 11,153, 61,235,104,248,189, 37,110,107, 62,186,231, 89, 78, 66, 98,255, 0, 2, 0, 0, 0, 82,231,253, 60, +235,104,248,189, 37,110,107, 62, 70, 24, 89, 78, 66, 98,255, 0, 2, 0, 0, 0, 8,213,197, 61,195,223,255,189, 37,110,107, 62, + 88, 43,134, 62,237,102,255, 0, 2, 0, 0, 0, 27,134, 21, 60,195,223,255,189, 37,110,107, 62,168,212,134, 62,237,102,255, 0, + 2, 0, 0, 0,185,194,212, 61,174,134, 33,190,253,228,114, 62,247, 46, 89,233,228,116,255, 0, 2, 0, 0, 0,191,196,240, 58, +174,134, 33,190,253,228,114, 62, 9,209, 89,233,228,116,255, 0, 2, 0, 0, 0, 88,231,182, 61,243,184, 44,190,185,178,103, 62, + 46, 31,198,181,128, 99,255, 0, 2, 0, 0, 0,207,121,134, 60,243,184, 44,190,185,178,103, 62,210,224,198,181,128, 99,255, 0, + 2, 0, 0, 0,203,133, 88, 61, 15, 98, 63,190,185,178,103, 62, 0, 0,185,191,175,110,255, 0, 2, 0, 0, 0, 98, 74, 49, 62, + 83,148, 74,190,107,138,224, 61, 23,120, 34, 41, 99, 16,255, 0, 0, 0, 0, 0,248, 14,138,189, 83,148, 74,190,107,138,224, 61, +233,135, 34, 41, 99, 16,255, 0, 0, 0, 0, 0, 81,129, 4, 62,134,253, 40,190,167,233, 58, 62,251, 80, 26,250,241, 98,255, 0, + 0, 0, 0, 0, 89,243,193,188,134,253, 40,190,167,233, 58, 62, 5,175, 26,250,241, 98,255, 0, 0, 0, 0, 0, 41,248, 11, 62, + 83,148, 74,190,167,233, 58, 62,215, 83,153, 16, 71, 95,255, 0, 0, 0, 0, 0, 27,170,253,188, 83,148, 74,190,167,233, 58, 62, + 41,172,153, 16, 71, 95,255, 0, 0, 0, 0, 0, 30, 24, 38, 62,243,184, 44,190,107,138,224, 61, 24,122, 67, 35, 64, 15,255, 0, + 0, 0, 0, 0,224, 84,103,189,243,184, 44,190,107,138,224, 61,232,133, 67, 35, 64, 15,255, 0, 0, 0, 0, 0,203,133, 88, 61, + 93,165,235,190, 99,183, 47, 62, 0, 0,139, 86, 77, 94,255, 0, 0, 0, 0, 0,247, 11,153, 61,167,199,233,190, 99,183, 47, 62, +144,206,200, 70,125, 94,255, 0, 0, 0, 0, 0, 82,231,253, 60,167,199,233,190, 99,183, 47, 62,112, 49,200, 70,125, 94,255, 0, + 0, 0, 0, 0, 8,213,197, 61, 99,149,222,190,167,233, 58, 62,253,164,109, 17, 75, 88,255, 0, 0, 0, 0, 0, 27,134, 21, 60, + 99,149,222,190,167,233, 58, 62, 3, 91,109, 17, 75, 88,255, 0, 0, 0, 0, 0, 8,213,197, 61, 70,236,203,190,128, 96, 66, 62, +141,225, 87,168, 39, 88,255, 0, 0, 0, 0, 0, 27,134, 21, 60, 70,236,203,190,128, 96, 66, 62,115, 30, 87,168, 39, 88,255, 0, + 0, 0, 0, 0,203,133, 88, 61,212, 64,213,190,179,201, 32, 62, 0, 0, 20,159,153, 83,255, 0, 0, 0, 0, 0, 8,213,197, 61, +252,201,205,190, 31,133, 36, 62, 5,230,250,177, 20, 98,255, 0, 0, 0, 0, 0, 27,134, 21, 60,252,201,205,190, 31,133, 36, 62, +251, 25,250,177, 20, 98,255, 0, 0, 0, 0, 0, 8,213,197, 61,173,183,220,190,219, 82, 25, 62, 18,152, 8, 24,188, 70,255, 0, + 0, 0, 0, 0, 27,134, 21, 60,173,183,220,190,219, 82, 25, 62,238,103, 8, 24,188, 70,255, 0, 0, 0, 0, 0,247, 11,153, 61, + 59, 12,230,190,111,151, 21, 62, 26,222,242, 49,221,112,255, 0, 0, 0, 0, 0, 82,231,253, 60, 59, 12,230,190,111,151, 21, 62, +230, 33,242, 49,221,112,255, 0, 0, 0, 0, 0,203,133, 88, 61,241,233,231,190,111,151, 21, 62, 0, 0, 18, 60, 5,113,255, 0, + 0, 0, 0, 0,189, 60, 8, 62,142,209, 76, 61,116,128, 92, 62, 4, 30, 93,244,225,123,255, 0, 0, 0, 0, 0,186,206,223,188, +142,209, 76, 61,116,128, 92, 62,252,225, 93,244,225,123,255, 0, 0, 0, 0, 0,149,179, 15, 62, 22,200,170, 60, 8,197, 88, 62, + 71, 9, 34,251,144,127,255, 0, 0, 0, 0, 0,190,194, 13,189, 22,200,170, 60, 8,197, 88, 62,185,246, 34,251,144,127,255, 0, + 0, 0, 0, 0,155,156, 86, 62,202,248, 23, 62, 48, 78, 81, 62, 81, 17, 74, 2,204,126,255, 0, 0, 0, 0, 0,106,179,212,189, +202,248, 23, 62, 48, 78, 81, 62,175,238, 74, 2,204,126,255, 0, 0, 0, 0, 0, 58,193, 56, 62, 94, 61, 20, 62, 8,197, 88, 62, +218, 25,177,253, 86,125,255, 0, 2, 0, 0, 0,168,252,152,189, 94, 61, 20, 62, 8,197, 88, 62, 38,230,177,253, 86,125,255, 0, + 2, 0, 0, 0, 64,170,127, 62, 25, 11, 9, 62, 8,197, 88, 62,182, 21,210,240, 57,125,255, 0, 2, 0, 0, 0, 90,103, 19,190, + 25, 11, 9, 62, 8,197, 88, 62, 74,234,210,240, 57,125,255, 0, 2, 0, 0, 0,237,107,161, 62, 34, 77,229, 61,207,114, 51, 62, +143, 28,249,237,117,123,255, 0, 0, 0, 0, 0,244,148, 86,190, 34, 77,229, 61,207,114, 51, 62,113,227,249,237,117,123,255, 0, + 0, 0, 0, 0, 15, 5,167, 62, 97,150,169, 61, 99,183, 47, 62,209, 15,217,246,175,126,255, 0, 0, 0, 0, 0, 56,199, 97,190, + 97,150,169, 61, 99,183, 47, 62, 47,240,217,246,175,126,255, 0, 0, 0, 0, 0, 89, 39,165, 62,125, 8, 32, 61,247,251, 43, 62, +177, 24,190,253,146,125,255, 0, 0, 0, 0, 0,204, 11, 94,190,125, 8, 32, 61,247,251, 43, 62, 79,231,190,253,146,125,255, 0, + 0, 0, 0, 0, 26,229,140, 62, 60,222,152,187, 20,165, 62, 62, 20, 33, 75, 2,160,123,255, 0, 0, 0, 0, 0, 79,135, 45,190, + 60,222,152,187, 20,165, 62, 62,236,222, 75, 2,160,123,255, 0, 0, 0, 0, 0,184, 69,105, 62,115,128,187,188, 88,215, 73, 62, + 85, 26,238,248, 14,125,255, 0, 0, 0, 0, 0,163, 5,250,189,115,128,187,188, 88,215, 73, 62,171,229,238,248, 14,125,255, 0, + 0, 0, 0, 0,178, 92, 34, 62,226,194,133,186,116,128, 92, 62, 8, 7,142,250,175,127,255, 0, 0, 0, 0, 0, 48,103, 88,189, +226,194,133,186,116,128, 92, 62,248,248,142,250,175,127,255, 0, 0, 0, 0, 0, 41,248, 11, 62, 57, 13,177, 61,116,128, 92, 62, +169, 34, 2,240, 43,122,255, 0, 0, 0, 0, 0, 27,170,253,188, 57, 13,177, 61,116,128, 92, 62, 87,221, 2,240, 43,122,255, 0, + 0, 0, 0, 0,218,229, 26, 62,170,177,251, 61,116,128, 92, 62,126, 27,108,239,231,123,255, 0, 0, 0, 0, 0,207,139, 58,189, +170,177,251, 61,116,128, 92, 62,130,228,108,239,231,123,255, 0, 0, 0, 0, 0, 30, 24, 38, 62,250,195,236, 61, 48, 78, 81, 62, +226, 64, 13,207,224, 98,255, 0, 0, 0, 0, 0,224, 84,103,189,250,195,236, 61, 48, 78, 81, 62, 30,191, 13,207,224, 98,255, 0, + 0, 0, 0, 0, 1,111, 19, 62, 57, 13,177, 61, 48, 78, 81, 62, 29, 96,169,229, 81, 80,255, 0, 0, 0, 0, 0,110,176, 28,189, + 57, 13,177, 61, 48, 78, 81, 62,227,159,169,229, 81, 80,255, 0, 0, 0, 0, 0,138,211, 41, 62, 77,106,205, 59, 48, 78, 81, 62, + 36, 55,122, 71,188, 90,255, 0, 0, 0, 0, 0,143, 66,118,189, 77,106,205, 59, 48, 78, 81, 62,220,200,122, 71,188, 90,255, 0, + 0, 0, 0, 0,184, 69,105, 62,161,220, 67,188,128, 96, 66, 62, 76, 21, 90, 78,241, 98,255, 0, 0, 0, 0, 0,163, 5,250,189, +161,220, 67,188,128, 96, 66, 62,180,234, 90, 78,241, 98,255, 0, 0, 0, 0, 0,174, 41,137, 62,149,249, 43, 59, 59, 46, 55, 62, + 85,245, 69, 69, 25,107,255, 0, 0, 0, 0, 0,118, 16, 38,190,149,249, 43, 59, 59, 46, 55, 62,171, 10, 69, 69, 25,107,255, 0, + 0, 0, 0, 0,129,176,157, 62,222,227, 61, 61,139, 64, 40, 62,232,223,211, 29, 67,120,255, 0, 0, 0, 0, 0, 28, 30, 79,190, +222,227, 61, 61,139, 64, 40, 62, 24, 32,211, 29, 67,120,255, 0, 0, 0, 0, 0, 55,142,159, 62,137, 31,162, 61,139, 64, 40, 62, +148,210,123,238, 95,118,255, 0, 0, 0, 0, 0,136,217, 82,190,137, 31,162, 61,139, 64, 40, 62,108, 45,123,238, 95,118,255, 0, + 0, 0, 0, 0, 21,245,153, 62,114, 95,214, 61,247,251, 43, 62,216,229,108,179, 43, 99,255, 0, 0, 0, 0, 0, 67,167, 71,190, +114, 95,214, 61,247,251, 43, 62, 40, 26,108,179, 43, 99,255, 0, 0, 0, 0, 0,212,238,123, 62,173, 79, 5, 62,196,146, 77, 62, +202,237,179,158, 35, 81,255, 0, 2, 0, 0, 0,238,171, 15,190,173, 79, 5, 62,196,146, 77, 62, 54, 18,179,158, 35, 81,255, 0, + 2, 0, 0, 0,166,124, 60, 62, 25, 11, 9, 62,156, 9, 85, 62, 24, 39,118,212,214,113,255, 0, 2, 0, 0, 0,129,115,160,189, + 25, 11, 9, 62,156, 9, 85, 62,232,216,118,212,214,113,255, 0, 2, 0, 0, 0,155,156, 86, 62,133,198, 12, 62,196,146, 77, 62, +213, 1,189,193,208,111,255, 0, 0, 0, 0, 0,106,179,212,189,133,198, 12, 62,196,146, 77, 62, 43,254,189,193,208,111,255, 0, + 0, 0, 0, 0,109, 42, 23, 62,216,126,230, 60,196,146, 77, 62,226, 84,192, 42,187, 85,255, 0, 0, 0, 0, 0, 31,158, 43,189, +216,126,230, 60,196,146, 77, 62, 30,171,192, 42,187, 85,255, 0, 0, 0, 0, 0, 1,111, 19, 62, 63,191, 91, 61,196,146, 77, 62, +235,102,196, 2, 11, 76,255, 0, 0, 0, 0, 0,110,176, 28,189, 63,191, 91, 61,196,146, 77, 62, 21,153,196, 2, 11, 76,255, 0, + 0, 0, 0, 0,185,194,212, 61,122,230, 38, 62, 42,101, 10, 62,183,182,118,104, 5,246,255, 0, 0, 0, 0, 0,191,196,240, 58, +122,230, 38, 62, 42,101, 10, 62, 73, 73,118,104, 5,246,255, 0, 0, 0, 0, 0, 1,111, 19, 62,186,247,131, 62,150, 32, 14, 62, +208,192,221, 66, 3,167,255, 0, 2, 0, 0, 0,110,176, 28,189,186,247,131, 62,150, 32, 14, 62, 48, 63,221, 66, 3,167,255, 0, + 2, 0, 0, 0,155,156, 86, 62,220,144,137, 62, 82,238, 2, 62, 59, 9, 89, 90,208,165,255, 0, 2, 0, 0, 0,106,179,212,189, +220,144,137, 62, 82,238, 2, 62,197,246, 89, 90,208,165,255, 0, 2, 0, 0, 0,208,194,142, 62,139,175, 83, 62,107,138,224, 61, +165, 37,104,114,176,212,255, 0, 0, 0, 0, 0,187, 66, 49,190,139,175, 83, 62,107,138,224, 61, 91,218,104,114,176,212,255, 0, + 0, 0, 0, 0,152,105,189, 62, 14, 43, 35, 62,170,211,164, 61, 67, 45, 40,116, 1,227,255, 0, 0, 0, 0, 0, 37, 72,135,190, + 14, 43, 35, 62,170,211,164, 61,189,210, 40,116, 1,227,255, 0, 0, 0, 0, 0, 66,103,217, 62,133,198, 12, 62, 73,248,134, 61, +100, 94,237, 79, 18,223,255, 0, 0, 0, 0, 0,207, 69,163,190,133,198, 12, 62, 73,248,134, 61,156,161,237, 79, 18,223,255, 0, + 0, 0, 0, 0, 32,206,211, 62,119,163,200, 60,252,115,211, 60,247,120,255,221,165,231,255, 0, 0, 0, 0, 0,173,172,157,190, +119,163,200, 60,252,115,211, 60, 9,135,255,221,165,231,255, 0, 0, 0, 0, 0,123,192,170, 62,188, 45, 85,189,112, 94, 52, 61, +155, 76,106,154, 19,242,255, 0, 0, 0, 0, 0, 16, 62,105,190,188, 45, 85,189,112, 94, 52, 61,101,179,106,154, 19,242,255, 0, + 0, 0, 0, 0,140,144,131, 62, 0, 41,196,189, 33,111,142, 61,204, 56, 26,142,138, 13,255, 0, 0, 0, 0, 0, 50,222, 26,190, + 0, 41,196,189, 33,111,142, 61, 52,199, 26,142,138, 13,255, 0, 0, 0, 0, 0,203,133, 88, 61, 16,243,187, 62, 89,242,105,188, + 0, 0,155,106,214, 70,255, 0, 2, 0, 0, 0,203,133, 88, 61,226,121,208, 62,254, 7, 62,190, 0, 0,243,127, 82, 3,255, 0, + 2, 0, 0, 0,203,133, 88, 61,254,152, 18,190, 11,214,236,190, 0, 0, 54,164,204,166,255, 0, 3, 0, 0, 0,203,133, 88, 61, +173,190,136,190,139,142,124,189, 0, 0,179,129, 65,235,255, 0, 0, 0, 0, 0,203,133, 88, 61,205,243, 1,191, 73,248,134, 61, + 0, 0,182,151,204,181,255, 0, 2, 0, 0, 0,203,133, 88, 61,247,217,218,190,241, 12, 56, 60, 0, 0,231,221,162,132,255, 0, + 2, 0, 0, 0,203,133, 88, 61,161,222,162,190,147, 21,157, 57, 0, 0, 16,212,201,135,255, 0, 0, 0, 0, 0,203,133, 88, 61, +207, 87,142,190,141,212,146,188, 0, 0,245,147, 97,187,255, 0, 0, 0, 0, 0, 61,119,230, 62,239,172,106, 61,161, 43,253,189, +164,125,181,235,156, 13,255, 0, 0, 0, 0, 0,202, 85,176,190,239,172,106, 61,161, 43,253,189, 92,130,181,235,156, 13,255, 0, + 0, 0, 0, 0,243, 84,232, 62,194,113,199, 61, 78, 26, 47,190,174,126, 23,238, 66,252,255, 0, 0, 0, 0, 0,128, 51,178,190, +194,113,199, 61, 78, 26, 47,190, 82,129, 23,238, 66,252,255, 0, 0, 0, 0, 0, 32,206,211, 62,216, 49,147, 61,181,218,180,190, + 70, 81,148, 13, 15,158,255, 0, 1, 0, 0, 0,173,172,157,190,216, 49,147, 61,181,218,180,190,186,174,148, 13, 15,158,255, 0, + 1, 0, 0, 0,174, 41,137, 62, 54,180, 27, 62,226, 76,244,190,123, 58,228, 21, 70,144,255, 0, 3, 0, 0, 0,118, 16, 38,190, + 54,180, 27, 62,226, 76,244,190,133,197,228, 21, 70,144,255, 0, 3, 0, 0, 0,146,121,202, 62,239, 95,151,189,240, 61,238,189, + 76, 89,139,164,161, 6,255, 0, 2, 0, 0, 0, 31, 88,148,190,239, 95,151,189,240, 61,238,189,180,166,139,164,161, 6,255, 0, + 2, 0, 0, 0,197,226,168, 62, 97, 4,226,189,163, 21,103,190, 93, 38, 34,134,182, 7,255, 0, 0, 0, 0, 0,164,130,101,190, + 97, 4,226,189,163, 21,103,190,163,217, 34,134,182, 7,255, 0, 0, 0, 0, 0, 9, 21,180, 62,109, 27,100,189,255,252,178,190, +106, 43,219,170,222,170,255, 0, 1, 0, 0, 0, 45,231,123,190,109, 27,100,189,255,252,178,190,150,212,219,170,222,170,255, 0, + 1, 0, 0, 0,155,156, 86, 62,211, 91,217,188, 85,248,234,190,168, 55,109,213,229,148,255, 0, 2, 0, 0, 0,106,179,212,189, +211, 91,217,188, 85,248,234,190, 88,200,109,213,229,148,255, 0, 2, 0, 0, 0, 30, 24, 38, 62,112, 61, 93,190,191,112, 37, 61, +197,120, 36,255,158,213,255, 0, 0, 0, 0, 0,224, 84,103,189,112, 61, 93,190,191,112, 37, 61, 59,135, 36,255,158,213,255, 0, + 0, 0, 0, 0, 41,248, 11, 62,209, 24,123,190,176,102,236,188,188, 84, 20,181, 24,196,255, 0, 0, 0, 0, 0, 27,170,253,188, +209, 24,123,190,176,102,236,188, 68,171, 20,181, 24,196,255, 0, 0, 0, 0, 0, 19, 56, 64, 62,110,117,196,190, 92, 79,241, 60, +131, 79, 86,254,183,155,255, 0, 2, 0, 0, 0, 89,234,167,189,110,117,196,190, 92, 79,241, 60,125,176, 86,254,183,155,255, 0, + 2, 0, 0, 0,246,142, 45, 62, 59, 19,146,190, 95,149, 7, 61, 5, 99, 8, 1,231,174,255, 0, 0, 0, 0, 0, 32,152,130,189, + 59, 19,146,190, 95,149, 7, 61,251,156, 8, 1,231,174,255, 0, 0, 0, 0, 0, 47,225, 82, 62,234,249,244,190, 15,131, 22, 61, + 65, 62,227,185,224,168,255, 0, 2, 0, 0, 0,146, 60,205,189,234,249,244,190, 15,131, 22, 61,191,193,227,185,224,168,255, 0, + 2, 0, 0, 0, 25,158,242, 61,178,167,207,190,155,152,181, 60,133, 16,208,232, 55,131,255, 0, 0, 0, 0, 0,110,194, 80,188, +178,167,207,190,155,152,181, 60,123,239,208,232, 55,131,255, 0, 0, 0, 0, 0,105,176,227, 61,201,103,155,190, 58,189,151, 60, + 7, 48,163,224,149,141,255, 0, 0, 0, 0, 0,214,169,178,187,201,103,155,190, 58,189,151, 60,249,207,163,224,149,141,255, 0, + 0, 0, 0, 0, 81,129, 4, 62,195,112,252,190,129, 39, 97, 61, 68, 12,218,158,147,173,255, 0, 0, 0, 0, 0, 89,243,193,188, +195,112,252,190,129, 39, 97, 61,188,243,218,158,147,173,255, 0, 0, 0, 0, 0, 70,161, 30, 62,163,166, 59,190,208, 57, 82, 61, +195,124,106,227,203,255,255, 0, 0, 0, 0, 0,127,121, 73,189,163,166, 59,190,208, 57, 82, 61, 61,131,106,227,203,255,255, 0, + 0, 0, 0, 0,218,229, 26, 62,174,134, 33,190, 33,111,142, 61, 29,120,105,231,193, 36,255, 0, 0, 0, 0, 0,207,139, 58,189, +174,134, 33,190, 33,111,142, 61,227,135,105,231,193, 36,255, 0, 0, 0, 0, 0,109, 42, 23, 62,186,102, 7,190,130, 74,172, 61, +160,101,164,182,240, 25,255, 0, 0, 0, 0, 0, 31,158, 43,189,186,102, 7,190,130, 74,172, 61, 96,154,164,182,240, 25,255, 0, + 0, 0, 0, 0,218,229, 26, 62,140,230,111,190,206,171,148,189,120, 84,221,159,198,253,255, 0, 0, 0, 0, 0,207,139, 58,189, +140,230,111,190,206,171,148,189,136,171,221,159,198,253,255, 0, 0, 0, 0, 0,127,243, 67, 62, 83,148, 74,190, 16,205,139,190, +255, 67, 42,151, 73,228,255, 0, 2, 0, 0, 0, 49, 97,175,189, 83,148, 74,190, 16,205,139,190, 1,188, 42,151, 73,228,255, 0, + 2, 0, 0, 0, 7, 88, 90, 62,235,104,248,189,244, 28,205,190,201, 63, 25,176, 0,179,255, 0, 3, 0, 0, 0, 66, 42,220,189, +235,104,248,189,244, 28,205,190, 55,192, 25,176, 0,179,255, 0, 3, 0, 0, 0,248, 75,135, 62, 55,124,180, 62,187,202,167,190, + 34, 56,160, 95, 17,192,255, 0, 2, 0, 0, 0, 10, 85, 34,190, 55,124,180, 62,187,202,167,190,222,199,160, 95, 17,192,255, 0, + 2, 0, 0, 0,248, 75,135, 62,232,105,195, 62,146, 76, 58,190, 54, 55,120,115,239, 0,255, 0, 2, 0, 0, 0, 10, 85, 34,190, +232,105,195, 62,146, 76, 58,190,202,200,120,115,239, 0,255, 0, 2, 0, 0, 0,248, 75,135, 62,203,192,176, 62,105,252, 34,189, +239, 63,164, 92,238, 60,255, 0, 2, 0, 0, 0, 10, 85, 34,190,203,192,176, 62,105,252, 34,189, 17,192,164, 92,238, 60,255, 0, + 2, 0, 0, 0,174, 41,137, 62,219,193, 68, 62,208, 57, 82, 61,123, 49,255,102,170, 57,255, 0, 0, 0, 0, 0,118, 16, 38,190, +219,193, 68, 62,208, 57, 82, 61,133,206,255,102,170, 57,255, 0, 0, 0, 0, 0,220,155,200, 62,133,198, 12, 62, 95,172,248, 59, +142, 98,198, 73, 6, 35,255, 0, 0, 0, 0, 0,105,122,146,190,133,198, 12, 62, 95,172,248, 59,114,157,198, 73, 6, 35,255, 0, + 0, 0, 0, 0, 83, 55,178, 62, 14, 43, 35, 62,141,212,146,188,129, 61,254,106,241, 33,255, 0, 0, 0, 0, 0,193, 43,120,190, + 14, 43, 35, 62,141,212,146,188,127,194,254,106,241, 33,255, 0, 0, 0, 0, 0, 9, 21,180, 62, 72, 76,141, 62,161, 43,253,189, +234, 76,151, 87,221, 52,255, 0, 0, 0, 0, 0, 45,231,123,190, 72, 76,141, 62,161, 43,253,189, 22,179,151, 87,221, 52,255, 0, + 0, 0, 0, 0, 66,103,217, 62,247,106, 87, 62, 7,254,185,189,187,101, 28, 66,199, 40,255, 0, 2, 0, 0, 0,207, 69,163,190, +247,106, 87, 62, 7,254,185,189, 69,154, 28, 66,199, 40,255, 0, 2, 0, 0, 0, 66,103,217, 62,236,138,113, 62, 26,177, 80,190, +183,113, 68, 58,119,248,255, 0, 2, 0, 0, 0,207, 69,163,190,236,138,113, 62, 26,177, 80,190, 73,142, 68, 58,119,248,255, 0, + 2, 0, 0, 0, 9, 21,180, 62,141,126,152, 62, 83, 3,118,190,235, 86,238, 93,205,253,255, 0, 0, 0, 0, 0, 45,231,123,190, +141,126,152, 62, 83, 3,118,190, 21,169,238, 93,205,253,255, 0, 0, 0, 0, 0, 9, 21,180, 62, 38,179,135, 62,107,184,182,190, +232, 85,154, 70,157,192,255, 0, 2, 0, 0, 0, 45,231,123,190, 38,179,135, 62,107,184,182,190, 24,170,154, 70,157,192,255, 0, + 2, 0, 0, 0, 66,103,217, 62,179, 56, 76, 62,153, 49,162,190,166,110,177, 42,222,207,255, 0, 2, 0, 0, 0,207, 69,163,190, +179, 56, 76, 62,153, 49,162,190, 90,145,177, 42,222,207,255, 0, 2, 0, 0, 0,231,123,174, 62,154,232,206, 61, 56, 79,216,190, + 58, 75, 57, 1,116,152,255, 0, 3, 0, 0, 0,232,180,112,190,154,232,206, 61, 56, 79,216,190,198,180, 57, 1,116,152,255, 0, + 3, 0, 0, 0,208,194,142, 62,171,100, 40,189,170,250,206,190, 73, 70,147,187,200,173,255, 0, 1, 0, 0, 0,187, 66, 49,190, +171,100, 40,189,170,250,206,190,183,185,147,187,200,173,255, 0, 0, 0, 0, 0,100, 0,223, 62,154,232,206, 61,191,190,121,190, +194,114, 80, 41,207, 38,255, 0, 0, 0, 0, 0,241,222,168,190,154,232,206, 61,191,190,121,190, 62,141, 80, 41,207, 38,255, 0, + 0, 0, 0, 0,104, 51,120, 62,186,102, 7,190,127,153,163,189,232, 74,153,154, 28, 22,255, 0, 0, 0, 0, 0,130,240, 11,190, +186,102, 7,190,127,153,163,189, 24,181,153,154, 28, 22,255, 0, 0, 0, 0, 0,214,178,129, 62,254,152, 18,190, 44,122,125,190, + 89, 71,115,151, 1,237,255, 0, 0, 0, 0, 0,198, 34, 23,190,254,152, 18,190, 44,122,125,190,167,184,115,151, 1,237,255, 0, + 0, 0, 0, 0,202,203,239, 62,133,198, 12, 62, 56, 86,132,190, 72,220,207, 93,106, 79,255, 0, 2, 0, 0, 0, 88,170,185,190, +133,198, 12, 62, 56, 86,132,190,184, 35,207, 93,106, 79,255, 0, 2, 0, 0, 0, 32,206,211, 62, 18,242,240,189,135,108, 84,190, + 30, 15, 34,150, 84, 70,255, 0, 2, 0, 0, 0,173,172,157,190, 18,242,240,189,135,108, 84,190,226,240, 34,150, 84, 70,255, 0, + 2, 0, 0, 0, 38,160, 9, 63,217,159,203,189,192,186,154,190,164, 67,138,166,172, 61,255, 0, 0, 0, 0, 0,219, 30,221,190, +217,159,203,189,192,186,154,190, 92,188,138,166,172, 61,255, 0, 0, 0, 0, 0,172,140, 38, 63,211, 91,217,188,255,252,178,190, +179, 83,223,206,114, 83,255, 0, 0, 0, 0, 0,244,123, 11,191,211, 91,217,188,255,252,178,190, 77,172,223,206,114, 83,255, 0, + 0, 0, 0, 0, 95,242, 46, 63,194,113,199, 61, 73, 31,177,190, 54, 92,232, 12,210, 87,255, 0, 2, 0, 0, 0,167,225, 19,191, +194,113,199, 61, 73, 31,177,190,202,163,232, 12,210, 87,255, 0, 2, 0, 0, 0,138,243, 32, 63, 3, 75, 61, 62, 73, 31,177,190, +247, 62,221, 83, 97, 73,255, 0, 0, 0, 0, 0,209,226, 5,191, 3, 75, 61, 62, 73, 31,177,190, 9,193,221, 83, 97, 73,255, 0, + 0, 0, 0, 0,112,194, 7, 63, 82, 93, 46, 62, 84,255,150,190,181, 5, 80,111,236, 62,255, 0, 0, 0, 0, 0,111, 99,217,190, + 82, 93, 46, 62, 84,255,150,190, 75,250, 80,111,236, 62,255, 0, 0, 0, 0, 0,149,211, 6, 63,241,129, 16, 62, 50,102,145,190, +236, 69,117,239,236,105,255, 0, 0, 0, 0, 0,185,133,215,190,241,129, 16, 62, 50,102,145,190, 20,186,117,239,236,105,255, 0, + 0, 0, 0, 0,104, 90, 27, 63, 54,180, 27, 62,113,168,169,190, 34, 24,205,231, 89,123,255, 0, 0, 0, 0, 0,175, 73, 0,191, + 54,180, 27, 62,113,168,169,190,222,231,205,231, 89,123,255, 0, 0, 0, 0, 0,246,174, 36, 63, 97,150,169, 61,221, 99,173,190, + 69,223, 16,252,173,123,255, 0, 0, 0, 0, 0, 62,158, 9,191, 97,150,169, 61,221, 99,173,190,187, 32, 16,252,173,123,255, 0, + 0, 0, 0, 0,249, 38, 30, 63, 98,147,127,188,221, 99,173,190,171,239, 0, 39,207,120,255, 0, 0, 0, 0, 0, 64, 22, 3,191, + 98,147,127,188,221, 99,173,190, 85, 16, 0, 39,207,120,255, 0, 0, 0, 0, 0, 75,177, 8, 63, 23,233,143,189,158, 33,149,190, + 9, 51, 56, 45, 82,108,255, 0, 0, 0, 0, 0, 37, 65,219,190, 23,233,143,189,158, 33,149,190,247,204, 56, 45, 82,108,255, 0, + 0, 0, 0, 0, 26,222,224, 62,120,196,173,189,243, 39, 88,190,147, 38,224, 62,153,104,255, 0, 2, 0, 0, 0,167,188,170,190, +120,196,173,189,243, 39, 88,190,109,217,224, 62,153,104,255, 0, 2, 0, 0, 0,162, 66,247, 62,250,195,236, 61,204,154,128,190, +218, 62,152,243,206,110,255, 0, 2, 0, 0, 0, 48, 33,193,190,250,195,236, 61,204,154,128,190, 38,193,152,243,206,110,255, 0, + 2, 0, 0, 0,196,219,252, 62, 17,132,184, 61, 50,102,145,190, 10, 87, 73,182, 19, 58,255, 0, 0, 0, 0, 0, 82,186,198,190, + 17,132,184, 61, 50,102,145,190,246,168, 73,182, 19, 58,255, 0, 0, 0, 0, 0, 21,238,237, 62,103,251,128,189, 44,122,125,190, +232, 15,106,121, 64, 37,255, 0, 0, 0, 0, 0,162,204,183,190,103,251,128,189, 44,122,125,190, 24,240,106,121, 64, 37,255, 0, + 0, 0, 0, 0, 38,160, 9, 63,188, 45, 85,189, 79, 15,164,190,157,239, 89,122,212, 33,255, 0, 0, 0, 0, 0,219, 30,221,190, +188, 45, 85,189, 79, 15,164,190, 99, 16, 89,122,212, 33,255, 0, 0, 0, 0, 0,104, 90, 27, 63,223, 37, 8,188,107,184,182,190, + 8,158,202, 81,185, 9,255, 0, 0, 0, 0, 0,175, 73, 0,191,223, 37, 8,188,107,184,182,190,248, 97,202, 81,185, 9,255, 0, + 0, 0, 0, 0,138,243, 32, 63, 40, 68,132, 61,107,184,182,190, 60,131,145,239, 95, 23,255, 0, 0, 0, 0, 0,209,226, 5,191, + 40, 68,132, 61,107,184,182,190,196,124,145,239, 95, 23,255, 0, 0, 0, 0, 0,178,124, 25, 63,250,195,236, 61,181,218,180,190, + 27,228, 22,153,206, 70,255, 0, 0, 0, 0, 0,242,215,252,190,250,195,236, 61,181,218,180,190,229, 27, 22,153,206, 70,255, 0, + 0, 0, 0, 0,112,194, 7, 63, 74,214,221, 61,153, 49,162,190, 65, 68,253,168,113, 64,255, 0, 0, 0, 0, 0,111, 99,217,190, + 74,214,221, 61,153, 49,162,190,191,187,253,168,113, 64,255, 0, 0, 0, 0, 0,135,153,228, 62, 97,150,169, 61, 44,122,125,190, +113, 86,190,222, 87, 88,255, 0, 0, 0, 0, 0, 20,120,174,190, 97,150,169, 61, 44,122,125,190,143,169,190,222, 87, 88,255, 0, + 0, 0, 0, 0,209,187,226, 62,216,126,230, 60,198,170,141,190,196, 95,107,182,100, 42,255, 0, 0, 0, 0, 0, 93,154,172,190, +216,126,230, 60,198,170,141,190, 60,160,107,182,100, 42,255, 0, 0, 0, 0, 0,180, 18,208, 62,223, 37, 8,188,198,170,141,190, + 42,111, 21, 14,220, 61,255, 0, 0, 0, 0, 0, 65,241,153,190,223, 37, 8,188,198,170,141,190,214,144, 21, 14,220, 61,255, 0, + 0, 0, 0, 0,100, 0,223, 62,161,220, 67,188,198,170,141,190, 3, 79, 4, 91, 19, 43,255, 0, 2, 0, 0, 0,241,222,168,190, +161,220, 67,188,198,170,141,190,253,176, 4, 91, 19, 43,255, 0, 2, 0, 0, 0,135,153,228, 62, 92, 82, 55,189,198,170,141,190, +207,107,198,254,250, 68,255, 0, 2, 0, 0, 0, 20,120,174,190, 92, 82, 55,189,198,170,141,190, 49,148,198,254,250, 68,255, 0, + 2, 0, 0, 0,174, 34,221, 62, 29, 9,115,189,198,170,141,190, 7, 82,225, 64,200, 73,255, 0, 0, 0, 0, 0, 59, 1,167,190, + 29, 9,115,189,198,170,141,190,249,173,225, 64,200, 73,255, 0, 0, 0, 0, 0,220,155,200, 62,188, 45, 85,189,146, 76, 58,190, + 38,117, 66,207, 47,239,255, 0, 0, 0, 0, 0,105,122,146,190,188, 45, 85,189,146, 76, 58,190,218,138, 66,207, 47,239,255, 0, + 0, 0, 0, 0, 38,190,198, 62,103,251,128,189, 15,209,106,190,150, 97,139, 18,184, 80,255, 0, 0, 0, 0, 0,179,156,144,190, +103,251,128,189, 15,209,106,190,106,158,139, 18,184, 80,255, 0, 0, 0, 0, 0, 38,190,198, 62, 74,137, 10,189,231, 71,114,190, + 17,116, 66,240,154, 51,255, 0, 0, 0, 0, 0,179,156,144,190, 74,137, 10,189,231, 71,114,190,239,139, 66,240,154, 51,255, 0, + 0, 0, 0, 0, 66,103,217, 62, 45,246, 46, 61, 44,122,125,190,112,113,245,204, 39, 30,255, 0, 0, 0, 0, 0,207, 69,163,190, + 45,246, 46, 61, 44,122,125,190,144,142,245,204, 39, 30,255, 0, 0, 0, 0, 0,202,203,239, 62,159,154,121, 61, 16,205,139,190, +105, 90, 61,185,146, 56,255, 0, 0, 0, 0, 0, 88,170,185,190,159,154,121, 61, 16,205,139,190,151,165, 61,185,146, 56,255, 0, + 0, 0, 0, 0,202,203,239, 62,239,172,106, 61, 10,221,152,190,191, 82,102,204,230, 82,255, 0, 0, 0, 0, 0, 88,170,185,190, +239,172,106, 61, 10,221,152,190, 65,173,102,204,230, 82,255, 0, 0, 0, 0, 0,174, 34,221, 62, 29, 9,115,189, 10,221,152,190, +246, 29, 64, 98, 94, 76,255, 0, 0, 0, 0, 0, 59, 1,167,190, 29, 9,115,189, 10,221,152,190, 10,226, 64, 98, 94, 76,255, 0, + 0, 0, 0, 0, 61,119,230, 62, 92, 82, 55,189, 10,221,152,190,150, 77,111, 17, 75,100,255, 0, 0, 0, 0, 0,202, 85,176,190, + 92, 82, 55,189, 10,221,152,190,106,178,111, 17, 75,100,255, 0, 0, 0, 0, 0, 26,222,224, 62, 98,147,127,188, 10,221,152,190, +239, 60,190, 60,195, 94,255, 0, 0, 0, 0, 0,167,188,170,190, 98,147,127,188, 10,221,152,190, 17,195,190, 60,195, 94,255, 0, + 0, 0, 0, 0,106,240,209, 62,223, 37, 8,188, 10,221,152,190,199, 83,178, 23,209, 93,255, 0, 0, 0, 0, 0,247,206,155,190, +223, 37, 8,188, 10,221,152,190, 57,172,178, 23,209, 93,255, 0, 0, 0, 0, 0,135,153,228, 62,216,126,230, 60, 10,221,152,190, + 98, 73, 1,200,170, 88,255, 0, 0, 0, 0, 0, 20,120,174,190,216,126,230, 60, 10,221,152,190,158,182, 1,200,170, 88,255, 0, + 0, 0, 0, 0, 38,160, 9, 63,154,232,206, 61,147, 65,175,190, 23, 68,166,223,112,103,255, 0, 0, 0, 0, 0,219, 30,221,190, +154,232,206, 61,147, 65,175,190,233,187,166,223,112,103,255, 0, 0, 0, 0, 0,104, 90, 27, 63, 74,214,221, 61,249, 12,192,190, +165, 18,156,216, 89,120,255, 0, 0, 0, 0, 0,175, 73, 0,191, 74,214,221, 61,249, 12,192,190, 91,237,156,216, 89,120,255, 0, + 0, 0, 0, 0, 27,192, 35, 63,159,154,121, 61,175,234,193,190, 25,185, 29,231,157,103,255, 0, 0, 0, 0, 0, 98,175, 8,191, +159,154,121, 61,175,234,193,190,231, 70, 29,231,157,103,255, 0, 0, 0, 0, 0,249, 38, 30, 63,161,220, 67,188,249, 12,192,190, + 43,209, 0, 64,119,100,255, 0, 0, 0, 0, 0, 64, 22, 3,191,161,220, 67,188,249, 12,192,190,213, 46, 0, 64,119,100,255, 0, + 0, 0, 0, 0, 1,143, 10, 63,188, 45, 85,189, 73, 31,177,190, 52, 26,240, 92, 3, 84,255, 0, 0, 0, 0, 0,145,252,222,190, +188, 45, 85,189, 73, 31,177,190,204,229,240, 92, 3, 84,255, 0, 0, 0, 0, 0, 21,238,237, 62, 29, 9,115,189, 16,205,139,190, + 58, 8,116,111,101, 62,255, 0, 0, 0, 0, 0,162,204,183,190, 29, 9,115,189, 16,205,139,190,198,247,116,111,101, 62,255, 0, + 0, 0, 0, 0,122,185,254, 62, 97,150,169, 61, 45,118,158,190,198, 80,102,213,175, 89,255, 0, 0, 0, 0, 0, 8,152,200,190, + 97,150,169, 61, 45,118,158,190, 58,175,102,213,175, 89,255, 0, 0, 0, 0, 0,202,203,239, 62,226,194,133,186,192,186,154,190, +136, 25,130, 0,108,125,255, 0, 0, 0, 0, 0, 88,170,185,190,226,194,133,186,192,186,154,190,120,230,130, 0,108,125,255, 0, + 0, 0, 0, 0, 14,254,250, 62,115,128,187,188,119,152,156,190, 2, 27, 58, 30,104,121,255, 0, 0, 0, 0, 0,156,220,196,190, +115,128,187,188,119,152,156,190,254,228, 58, 30,104,121,255, 0, 0, 0, 0, 0,223,245, 4, 63, 77,106,205, 59, 79, 15,164,190, +218, 55,126,253, 35,115,255, 0, 0, 0, 0, 0, 76,202,211,190, 77,106,205, 59, 79, 15,164,190, 38,200,126,253, 35,115,255, 0, + 0, 0, 0, 0,152, 75, 0, 63,216,126,230, 60,227, 83,160,190,164, 41,199,255, 8,121,255, 0, 0, 0, 0, 0,190,117,202,190, +216,126,230, 60,227, 83,160,190, 92,214,199,255, 8,121,255, 0, 0, 0, 0, 0,149,211, 6, 63,239,172,106, 61, 5,237,165,190, +237, 39,191, 9, 55,121,255, 0, 0, 0, 0, 0,185,133,215,190,239,172,106, 61, 5,237,165,190, 19,216,191, 9, 55,121,255, 0, + 0, 0, 0, 0,220,125, 11, 63,205, 26, 17, 61,187,202,167,190,208, 46, 41,244,137,118,255, 0, 0, 0, 0, 0, 71,218,224,190, +205, 26, 17, 61,187,202,167,190, 48,209, 41,244,137,118,255, 0, 0, 0, 0, 0,218, 5, 18, 63,222,227, 61, 61,113,168,169,190, + 70, 53, 84, 3, 85,116,255, 0, 2, 0, 0, 0, 65,234,237,190,222,227, 61, 61,113,168,169,190,186,202, 84, 3, 85,116,255, 0, + 2, 0, 0, 0, 73, 57, 15, 63,176,168,154, 61,113,168,169,190, 99, 44, 36, 38,212,113,255, 0, 2, 0, 0, 0, 31, 81,232,190, +176,168,154, 61,113,168,169,190,157,211, 36, 38,212,113,255, 0, 2, 0, 0, 0,112,194, 7, 63, 54,180, 27, 62,249, 12,192,190, +249,198, 3, 72,222,166,255, 0, 3, 0, 0, 0,111, 99,217,190, 54,180, 27, 62,249, 12,192,190, 7, 57, 3, 72,222,166,255, 0, + 3, 0, 0, 0, 64,209, 34, 63,230,161, 42, 62,170,250,206,190,198, 37,123, 68,174,154,255, 0, 3, 0, 0, 0,135,192, 7,191, +230,161, 42, 62,170,250,206,190, 58,218,123, 68,174,154,255, 0, 3, 0, 0, 0, 21,208, 48, 63, 57, 13,177, 61,102,200,195,190, + 3,121,201, 17, 73,218,255, 0, 3, 0, 0, 0, 93,191, 21,191, 57, 13,177, 61,102,200,195,190,253,134,201, 17, 73,218,255, 0, + 3, 0, 0, 0, 24, 72, 42, 63,211, 91,217,188, 62, 63,203,190, 59, 82, 75,200, 70,175,255, 0, 3, 0, 0, 0, 96, 55, 15,191, +211, 91,217,188, 62, 63,203,190,197,173, 75,200, 70,175,255, 0, 3, 0, 0, 0, 38,160, 9, 63, 40,178,188,189,175,234,193,190, +134,249,184,165,129,165,255, 0, 3, 0, 0, 0,219, 30,221,190, 40,178,188,189,175,234,193,190,122, 6,184,165,129,165,255, 0, + 3, 0, 0, 0,140,137,215, 62, 97, 4,226,189,192,186,154,190,126,249,122,163,205,167,255, 0, 1, 0, 0, 0, 25,104,161,190, + 97, 4,226,189,192,186,154,190,130, 6,122,163,205,167,255, 0, 1, 0, 0, 0,243, 84,232, 62, 65,148, 1, 62,187,202,167,190, + 93,193,224, 65,229,165,255, 0, 1, 0, 0, 0,128, 51,178,190, 65,148, 1, 62,187,202,167,190,163, 62,224, 65,229,165,255, 0, + 1, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 64,145,181, 3, 58, 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,200,146,181, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 47, 0, 0,200,146,181, 3, 55, 0, 0, 0,237, 3, 0, 0, + 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 43, 0, 0, 0, + 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 41, 0, 0, 0, 43, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, + 42, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 34, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, + 10, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 34, 0, 11, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, + 17, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 34, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 34, 0, 24, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 26, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 34, 0, 29, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, + 23, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 34, 0, 0, 0, + 0, 0, 34, 0, 24, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, + 34, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 34, 0, 29, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 40, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, + 40, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 39, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, + 38, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 42, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 34, 0, 36, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 34, 0, 45, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, + 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 34, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, + 24, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 55, 0, 0, 0, + 0, 0, 34, 0, 53, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, + 13, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 48, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, + 59, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, + 60, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, + 51, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 34, 0, 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,171, 0, 0, 0, 0, 0, 34, 0,171, 0, 0, 0, +173, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, +172, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0,172, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, + 0, 0, 34, 0, 85, 0, 0, 0,169, 0, 0, 0, 0, 0, 34, 0,169, 0, 0, 0,171, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, + 87, 0, 0, 0, 0, 0, 34, 0,170, 0, 0, 0,172, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0,170, 0, 0, 0, 0, 0, 34, 0, + 86, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,167, 0, 0, 0, 0, 0, 34, 0,167, 0, 0, 0,169, 0, 0, 0, + 0, 0, 34, 0, 83, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0,168, 0, 0, 0,170, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, +168, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0,165, 0, 0, 0, 0, 0, 34, 0, +165, 0, 0, 0,167, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0,166, 0, 0, 0,168, 0, 0, 0, + 0, 0, 34, 0, 82, 0, 0, 0,166, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, +163, 0, 0, 0, 0, 0, 34, 0,163, 0, 0, 0,165, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, 0, +164, 0, 0, 0,166, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,164, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, 82, 0, 0, 0, + 0, 0, 34, 0, 77, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,143, 0, 0, 0, 0, 0, 34, 0,143, 0, 0, 0, +161, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0,144, 0, 0, 0, 0, 0, 34, 0, + 78, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,162, 0, 0, 0, 0, 0, 34, 0,144, 0, 0, 0,162, 0, 0, 0, + 0, 0, 34, 0, 90, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0,145, 0, 0, 0, 0, 0, 34, 0,143, 0, 0, 0, +145, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,146, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, +144, 0, 0, 0,146, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0,147, 0, 0, 0, + 0, 0, 34, 0,145, 0, 0, 0,147, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0,148, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 34, 0,146, 0, 0, 0,148, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, + 96, 0, 0, 0,149, 0, 0, 0, 0, 0, 34, 0,147, 0, 0, 0,149, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,150, 0, 0, 0, + 0, 0, 34, 0, 95, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0,148, 0, 0, 0,150, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0,149, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0, + 99, 0, 0, 0,152, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0,150, 0, 0, 0,152, 0, 0, 0, + 0, 0, 34, 0, 98, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,153, 0, 0, 0, 0, 0, 34, 0,151, 0, 0, 0, +153, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,154, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, +152, 0, 0, 0,154, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,155, 0, 0, 0, + 0, 0, 34, 0,153, 0, 0, 0,155, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,156, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0, +103, 0, 0, 0, 0, 0, 34, 0,154, 0, 0, 0,156, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, +104, 0, 0, 0,157, 0, 0, 0, 0, 0, 34, 0,155, 0, 0, 0,157, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,158, 0, 0, 0, + 0, 0, 34, 0,103, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,156, 0, 0, 0,158, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0, +106, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0,157, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0, +107, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,158, 0, 0, 0,160, 0, 0, 0, + 0, 0, 34, 0, 65, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, +159, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0, +108, 0, 0, 0,125, 0, 0, 0, 0, 0, 34, 0,125, 0, 0, 0,157, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,159, 0, 0, 0, + 0, 0, 34, 0,126, 0, 0, 0,158, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,126, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0, +160, 0, 0, 0, 0, 0, 34, 0,125, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0,155, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0, +156, 0, 0, 0,177, 0, 0, 0, 0, 0, 34, 0,126, 0, 0, 0,177, 0, 0, 0, 0, 0, 34, 0,123, 0, 0, 0,153, 0, 0, 0, + 0, 0, 34, 0,123, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0,124, 0, 0, 0,154, 0, 0, 0, 0, 0, 34, 0,124, 0, 0, 0, +177, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,123, 0, 0, 0, 0, 0, 34, 0, +122, 0, 0, 0,152, 0, 0, 0, 0, 0, 34, 0,122, 0, 0, 0,124, 0, 0, 0, 0, 0, 34, 0,119, 0, 0, 0,149, 0, 0, 0, + 0, 0, 34, 0,119, 0, 0, 0,121, 0, 0, 0, 0, 0, 34, 0,120, 0, 0, 0,150, 0, 0, 0, 0, 0, 34, 0,120, 0, 0, 0, +122, 0, 0, 0, 0, 0, 34, 0,117, 0, 0, 0,147, 0, 0, 0, 0, 0, 34, 0,117, 0, 0, 0,119, 0, 0, 0, 0, 0, 34, 0, +118, 0, 0, 0,148, 0, 0, 0, 0, 0, 34, 0,118, 0, 0, 0,120, 0, 0, 0, 0, 0, 34, 0,115, 0, 0, 0,145, 0, 0, 0, + 0, 0, 34, 0,115, 0, 0, 0,117, 0, 0, 0, 0, 0, 34, 0,116, 0, 0, 0,146, 0, 0, 0, 0, 0, 34, 0,116, 0, 0, 0, +118, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,143, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, +114, 0, 0, 0,144, 0, 0, 0, 0, 0, 34, 0,114, 0, 0, 0,116, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,162, 0, 0, 0, + 0, 0, 34, 0,112, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0,174, 0, 0, 0,178, 0, 0, 0, 0, 0, 34, 0,161, 0, 0, 0, +174, 0, 0, 0, 0, 0, 34, 0,174, 0, 0, 0,179, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,179, 0, 0, 0, 0, 0, 34, 0, +162, 0, 0, 0,174, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,110, 0, 0, 0, + 0, 0, 34, 0,109, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, +175, 0, 0, 0, 0, 0, 34, 0,175, 0, 0, 0,180, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,180, 0, 0, 0, 0, 0, 34, 0, +111, 0, 0, 0,181, 0, 0, 0, 0, 0, 34, 0,175, 0, 0, 0,181, 0, 0, 0, 0, 0, 34, 0,178, 0, 0, 0,180, 0, 0, 0, + 0, 0, 34, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 32, 0,179, 0, 0, 0,181, 0, 0, 0, 0, 0, 34, 0,132, 0, 0, 0, +134, 0, 0, 0, 0, 0, 34, 0,134, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0,132, 0, 0, 0,171, 0, 0, 0, 0, 0, 34, 0, +133, 0, 0, 0,134, 0, 0, 0, 0, 0, 34, 0,133, 0, 0, 0,172, 0, 0, 0, 0, 0, 34, 0,130, 0, 0, 0,132, 0, 0, 0, + 0, 0, 34, 0,130, 0, 0, 0,169, 0, 0, 0, 0, 0, 34, 0,131, 0, 0, 0,133, 0, 0, 0, 0, 0, 34, 0,131, 0, 0, 0, +170, 0, 0, 0, 0, 0, 34, 0,128, 0, 0, 0,130, 0, 0, 0, 0, 0, 34, 0,128, 0, 0, 0,167, 0, 0, 0, 0, 0, 34, 0, +129, 0, 0, 0,131, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,168, 0, 0, 0, 0, 0, 34, 0,163, 0, 0, 0,184, 0, 0, 0, + 0, 0, 34, 0,182, 0, 0, 0,184, 0, 0, 0, 0, 0, 34, 0,165, 0, 0, 0,182, 0, 0, 0, 0, 0, 34, 0,183, 0, 0, 0, +185, 0, 0, 0, 0, 0, 34, 0,164, 0, 0, 0,185, 0, 0, 0, 0, 0, 34, 0,166, 0, 0, 0,183, 0, 0, 0, 0, 0, 34, 0, +128, 0, 0, 0,182, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,183, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0,187, 0, 0, 0, + 0, 0, 34, 0,186, 0, 0, 0,187, 0, 0, 0, 0, 0, 32, 0,184, 0, 0, 0,186, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0, +184, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,187, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,185, 0, 0, 0, 0, 0, 34, 0, +185, 0, 0, 0,186, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,186, 0, 0, 0, 0, 0, 32, 0, 67, 0, 0, 0,182, 0, 0, 0, + 0, 0, 34, 0, 67, 0, 0, 0,183, 0, 0, 0, 0, 0, 34, 0,127, 0, 0, 0,128, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, +127, 0, 0, 0, 0, 0, 32, 0,127, 0, 0, 0,129, 0, 0, 0, 0, 0, 34, 0,139, 0, 0, 0,190, 0, 0, 0, 0, 0, 34, 0, +188, 0, 0, 0,190, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0,188, 0, 0, 0, 0, 0, 34, 0,139, 0, 0, 0,141, 0, 0, 0, + 0, 0, 34, 0,189, 0, 0, 0,191, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0,191, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0, +142, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,189, 0, 0, 0, 0, 0, 34, 0,137, 0, 0, 0,192, 0, 0, 0, 0, 0, 34, 0, +190, 0, 0, 0,192, 0, 0, 0, 0, 0, 34, 0,137, 0, 0, 0,139, 0, 0, 0, 0, 0, 34, 0,191, 0, 0, 0,193, 0, 0, 0, + 0, 0, 34, 0,138, 0, 0, 0,193, 0, 0, 0, 0, 0, 34, 0,138, 0, 0, 0,140, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0, +194, 0, 0, 0, 0, 0, 34, 0,192, 0, 0, 0,194, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,137, 0, 0, 0, 0, 0, 34, 0, +193, 0, 0, 0,195, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,195, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,138, 0, 0, 0, + 0, 0, 34, 0, 69, 0, 0, 0,135, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,194, 0, 0, 0, 0, 0, 34, 0,135, 0, 0, 0, +136, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,195, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,188, 0, 0, 0, 0, 0, 34, 0, + 68, 0, 0, 0,187, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,189, 0, 0, 0, 0, 0, 34, 0,188, 0, 0, 0,203, 0, 0, 0, + 0, 0, 34, 0,203, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0,189, 0, 0, 0, +204, 0, 0, 0, 0, 0, 34, 0,204, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,196, 0, 0, 0, 0, 0, 34, 0, +196, 0, 0, 0,197, 0, 0, 0, 0, 0, 34, 0,194, 0, 0, 0,197, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,198, 0, 0, 0, + 0, 0, 34, 0,195, 0, 0, 0,198, 0, 0, 0, 0, 0, 34, 0,197, 0, 0, 0,199, 0, 0, 0, 0, 0, 34, 0,192, 0, 0, 0, +199, 0, 0, 0, 0, 0, 34, 0,198, 0, 0, 0,200, 0, 0, 0, 0, 0, 34, 0,193, 0, 0, 0,200, 0, 0, 0, 0, 0, 34, 0, +199, 0, 0, 0,201, 0, 0, 0, 0, 0, 34, 0,190, 0, 0, 0,201, 0, 0, 0, 0, 0, 34, 0,200, 0, 0, 0,202, 0, 0, 0, + 0, 0, 34, 0,191, 0, 0, 0,202, 0, 0, 0, 0, 0, 34, 0,201, 0, 0, 0,203, 0, 0, 0, 0, 0, 34, 0,202, 0, 0, 0, +204, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,201, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,202, 0, 0, 0, 0, 0, 34, 0, +196, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0,137, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,174, 0, 0, 0, + 0, 0, 34, 0,138, 0, 0, 0,162, 0, 0, 0, 0, 0, 34, 0,139, 0, 0, 0,208, 0, 0, 0, 0, 0, 34, 0,161, 0, 0, 0, +208, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0,209, 0, 0, 0, 0, 0, 34, 0,162, 0, 0, 0,209, 0, 0, 0, 0, 0, 34, 0, +141, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0,208, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,211, 0, 0, 0, + 0, 0, 34, 0,209, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0,163, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0,164, 0, 0, 0, +211, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,206, 0, 0, 0, 0, 0, 34, 0,206, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0, +207, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,207, 0, 0, 0, 0, 0, 34, 0,206, 0, 0, 0,212, 0, 0, 0, + 0, 0, 34, 0,208, 0, 0, 0,212, 0, 0, 0, 0, 0, 34, 0,209, 0, 0, 0,213, 0, 0, 0, 0, 0, 34, 0,207, 0, 0, 0, +213, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0,212, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,213, 0, 0, 0, 0, 0, 34, 0, + 70, 0, 0, 0,127, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,219, 0, 0, 0, 0, 0, 34, 0,128, 0, 0, 0,219, 0, 0, 0, + 0, 0, 34, 0,129, 0, 0, 0,220, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,220, 0, 0, 0, 0, 0, 34, 0,217, 0, 0, 0, +219, 0, 0, 0, 0, 0, 34, 0,130, 0, 0, 0,217, 0, 0, 0, 0, 0, 34, 0,131, 0, 0, 0,218, 0, 0, 0, 0, 0, 34, 0, +218, 0, 0, 0,220, 0, 0, 0, 0, 0, 34, 0,215, 0, 0, 0,217, 0, 0, 0, 0, 0, 34, 0,132, 0, 0, 0,215, 0, 0, 0, + 0, 0, 34, 0,133, 0, 0, 0,216, 0, 0, 0, 0, 0, 34, 0,216, 0, 0, 0,218, 0, 0, 0, 0, 0, 34, 0,214, 0, 0, 0, +215, 0, 0, 0, 0, 0, 34, 0,134, 0, 0, 0,214, 0, 0, 0, 0, 0, 34, 0,214, 0, 0, 0,216, 0, 0, 0, 0, 0, 34, 0, +215, 0, 0, 0,226, 0, 0, 0, 0, 0, 34, 0,226, 0, 0, 0,228, 0, 0, 0, 0, 0, 34, 0,214, 0, 0, 0,228, 0, 0, 0, + 0, 0, 34, 0,216, 0, 0, 0,227, 0, 0, 0, 0, 0, 34, 0,227, 0, 0, 0,228, 0, 0, 0, 0, 0, 34, 0,217, 0, 0, 0, +224, 0, 0, 0, 0, 0, 34, 0,224, 0, 0, 0,226, 0, 0, 0, 0, 0, 34, 0,218, 0, 0, 0,225, 0, 0, 0, 0, 0, 34, 0, +225, 0, 0, 0,227, 0, 0, 0, 0, 0, 34, 0,219, 0, 0, 0,222, 0, 0, 0, 0, 0, 34, 0,222, 0, 0, 0,224, 0, 0, 0, + 0, 0, 34, 0,220, 0, 0, 0,223, 0, 0, 0, 0, 0, 34, 0,223, 0, 0, 0,225, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, +221, 0, 0, 0, 0, 0, 34, 0,221, 0, 0, 0,222, 0, 0, 0, 0, 0, 34, 0,221, 0, 0, 0,223, 0, 0, 0, 0, 0, 34, 0, +221, 0, 0, 0,228, 0, 0, 0, 0, 0, 34, 0,222, 0, 0, 0,226, 0, 0, 0, 0, 0, 34, 0,223, 0, 0, 0,227, 0, 0, 0, + 0, 0, 34, 0,178, 0, 0, 0,231, 0, 0, 0, 0, 0, 34, 0,229, 0, 0, 0,231, 0, 0, 0, 0, 0, 34, 0,180, 0, 0, 0, +229, 0, 0, 0, 0, 0, 34, 0,179, 0, 0, 0,232, 0, 0, 0, 0, 0, 34, 0,181, 0, 0, 0,230, 0, 0, 0, 0, 0, 34, 0, +230, 0, 0, 0,232, 0, 0, 0, 0, 0, 34, 0,229, 0, 0, 0,251, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,251, 0, 0, 0, + 0, 0, 34, 0,111, 0, 0, 0,252, 0, 0, 0, 0, 0, 34, 0,230, 0, 0, 0,252, 0, 0, 0, 0, 0, 34, 0,251, 0, 0, 0, +253, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,253, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,254, 0, 0, 0, 0, 0, 34, 0, +252, 0, 0, 0,254, 0, 0, 0, 0, 0, 34, 0,231, 0, 0, 0,249, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,250, 0, 0, 0, + 0, 0, 34, 0,232, 0, 0, 0,250, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,247, 0, 0, 0, 0, 0, 34, 0,247, 0, 0, 0, +249, 0, 0, 0, 0, 0, 34, 0,114, 0, 0, 0,248, 0, 0, 0, 0, 0, 34, 0,248, 0, 0, 0,250, 0, 0, 0, 0, 0, 34, 0, +115, 0, 0, 0,245, 0, 0, 0, 0, 0, 34, 0,245, 0, 0, 0,247, 0, 0, 0, 0, 0, 34, 0,116, 0, 0, 0,246, 0, 0, 0, + 0, 0, 34, 0,246, 0, 0, 0,248, 0, 0, 0, 0, 0, 34, 0,117, 0, 0, 0,243, 0, 0, 0, 0, 0, 34, 0,243, 0, 0, 0, +245, 0, 0, 0, 0, 0, 34, 0,118, 0, 0, 0,244, 0, 0, 0, 0, 0, 34, 0,244, 0, 0, 0,246, 0, 0, 0, 0, 0, 34, 0, +119, 0, 0, 0,241, 0, 0, 0, 0, 0, 34, 0,241, 0, 0, 0,243, 0, 0, 0, 0, 0, 34, 0,120, 0, 0, 0,242, 0, 0, 0, + 0, 0, 34, 0,242, 0, 0, 0,244, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,239, 0, 0, 0, 0, 0, 34, 0,239, 0, 0, 0, +241, 0, 0, 0, 0, 0, 34, 0,122, 0, 0, 0,240, 0, 0, 0, 0, 0, 34, 0,240, 0, 0, 0,242, 0, 0, 0, 0, 0, 34, 0, +123, 0, 0, 0,237, 0, 0, 0, 0, 0, 34, 0,237, 0, 0, 0,239, 0, 0, 0, 0, 0, 34, 0,124, 0, 0, 0,238, 0, 0, 0, + 0, 0, 34, 0,238, 0, 0, 0,240, 0, 0, 0, 0, 0, 34, 0,176, 0, 0, 0,233, 0, 0, 0, 0, 0, 34, 0,233, 0, 0, 0, +237, 0, 0, 0, 0, 0, 34, 0,177, 0, 0, 0,234, 0, 0, 0, 0, 0, 34, 0,234, 0, 0, 0,238, 0, 0, 0, 0, 0, 34, 0, +125, 0, 0, 0,235, 0, 0, 0, 0, 0, 34, 0,233, 0, 0, 0,235, 0, 0, 0, 0, 0, 34, 0,126, 0, 0, 0,236, 0, 0, 0, + 0, 0, 34, 0,234, 0, 0, 0,236, 0, 0, 0, 0, 0, 34, 0,235, 0, 0, 0,253, 0, 0, 0, 0, 0, 34, 0,236, 0, 0, 0, +254, 0, 0, 0, 0, 0, 34, 0,253, 0, 0, 0,255, 0, 0, 0, 0, 0, 34, 0,255, 0, 0, 0, 17, 1, 0, 0, 0, 0, 34, 0, +235, 0, 0, 0, 17, 1, 0, 0, 0, 0, 34, 0,254, 0, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0,236, 0, 0, 0, 18, 1, 0, 0, + 0, 0, 34, 0, 0, 1, 0, 0, 18, 1, 0, 0, 0, 0, 34, 0, 17, 1, 0, 0, 19, 1, 0, 0, 0, 0, 34, 0,233, 0, 0, 0, + 19, 1, 0, 0, 0, 0, 34, 0,234, 0, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0, 18, 1, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0, + 15, 1, 0, 0, 19, 1, 0, 0, 0, 0, 34, 0,237, 0, 0, 0, 15, 1, 0, 0, 0, 0, 34, 0,238, 0, 0, 0, 16, 1, 0, 0, + 0, 0, 34, 0, 16, 1, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0, 13, 1, 0, 0, 15, 1, 0, 0, 0, 0, 34, 0,239, 0, 0, 0, + 13, 1, 0, 0, 0, 0, 34, 0,240, 0, 0, 0, 14, 1, 0, 0, 0, 0, 34, 0, 14, 1, 0, 0, 16, 1, 0, 0, 0, 0, 34, 0, + 11, 1, 0, 0, 13, 1, 0, 0, 0, 0, 34, 0,241, 0, 0, 0, 11, 1, 0, 0, 0, 0, 34, 0,242, 0, 0, 0, 12, 1, 0, 0, + 0, 0, 34, 0, 12, 1, 0, 0, 14, 1, 0, 0, 0, 0, 34, 0, 9, 1, 0, 0, 11, 1, 0, 0, 0, 0, 34, 0,243, 0, 0, 0, + 9, 1, 0, 0, 0, 0, 34, 0,244, 0, 0, 0, 10, 1, 0, 0, 0, 0, 34, 0, 10, 1, 0, 0, 12, 1, 0, 0, 0, 0, 34, 0, + 7, 1, 0, 0, 9, 1, 0, 0, 0, 0, 34, 0,245, 0, 0, 0, 7, 1, 0, 0, 0, 0, 34, 0,246, 0, 0, 0, 8, 1, 0, 0, + 0, 0, 34, 0, 8, 1, 0, 0, 10, 1, 0, 0, 0, 0, 34, 0, 5, 1, 0, 0, 7, 1, 0, 0, 0, 0, 34, 0,247, 0, 0, 0, + 5, 1, 0, 0, 0, 0, 34, 0,248, 0, 0, 0, 6, 1, 0, 0, 0, 0, 34, 0, 6, 1, 0, 0, 8, 1, 0, 0, 0, 0, 34, 0, + 3, 1, 0, 0, 5, 1, 0, 0, 0, 0, 34, 0,249, 0, 0, 0, 3, 1, 0, 0, 0, 0, 34, 0,250, 0, 0, 0, 4, 1, 0, 0, + 0, 0, 34, 0, 4, 1, 0, 0, 6, 1, 0, 0, 0, 0, 34, 0, 3, 1, 0, 0, 21, 1, 0, 0, 0, 0, 34, 0,231, 0, 0, 0, + 21, 1, 0, 0, 0, 0, 34, 0,232, 0, 0, 0, 22, 1, 0, 0, 0, 0, 34, 0, 4, 1, 0, 0, 22, 1, 0, 0, 0, 0, 34, 0, +251, 0, 0, 0, 1, 1, 0, 0, 0, 0, 34, 0,255, 0, 0, 0, 1, 1, 0, 0, 0, 0, 34, 0,252, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 34, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 34, 0,229, 0, 0, 0, 23, 1, 0, 0, 0, 0, 34, 0, 1, 1, 0, 0, + 23, 1, 0, 0, 0, 0, 34, 0,230, 0, 0, 0, 24, 1, 0, 0, 0, 0, 34, 0, 2, 1, 0, 0, 24, 1, 0, 0, 0, 0, 34, 0, + 21, 1, 0, 0, 23, 1, 0, 0, 0, 0, 34, 0, 22, 1, 0, 0, 24, 1, 0, 0, 0, 0, 34, 0,106, 0, 0, 0, 25, 1, 0, 0, + 0, 0, 34, 0, 71, 0, 0, 0, 25, 1, 0, 0, 0, 0, 38, 0, 65, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0, + 26, 1, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 26, 1, 0, 0, 0, 0, 38, 0,104, 0, 0, 0, 27, 1, 0, 0, 0, 0, 34, 0, + 25, 1, 0, 0, 27, 1, 0, 0, 0, 0, 34, 0,105, 0, 0, 0, 28, 1, 0, 0, 0, 0, 34, 0, 26, 1, 0, 0, 28, 1, 0, 0, + 0, 0, 34, 0,102, 0, 0, 0, 29, 1, 0, 0, 0, 0, 34, 0, 27, 1, 0, 0, 29, 1, 0, 0, 0, 0, 34, 0,103, 0, 0, 0, + 30, 1, 0, 0, 0, 0, 34, 0, 28, 1, 0, 0, 30, 1, 0, 0, 0, 0, 34, 0,100, 0, 0, 0, 31, 1, 0, 0, 0, 0, 34, 0, + 29, 1, 0, 0, 31, 1, 0, 0, 0, 0, 34, 0,101, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 0, 30, 1, 0, 0, 32, 1, 0, 0, + 0, 0, 34, 0, 98, 0, 0, 0, 33, 1, 0, 0, 0, 0, 34, 0, 31, 1, 0, 0, 33, 1, 0, 0, 0, 0, 38, 0, 99, 0, 0, 0, + 34, 1, 0, 0, 0, 0, 34, 0, 32, 1, 0, 0, 34, 1, 0, 0, 0, 0, 38, 0, 96, 0, 0, 0, 35, 1, 0, 0, 0, 0, 34, 0, + 33, 1, 0, 0, 35, 1, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0, 36, 1, 0, 0, 0, 0, 34, 0, 34, 1, 0, 0, 36, 1, 0, 0, + 0, 0, 34, 0, 94, 0, 0, 0, 37, 1, 0, 0, 0, 0, 34, 0, 35, 1, 0, 0, 37, 1, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, + 38, 1, 0, 0, 0, 0, 34, 0, 36, 1, 0, 0, 38, 1, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 39, 1, 0, 0, 0, 0, 34, 0, + 37, 1, 0, 0, 39, 1, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, 40, 1, 0, 0, 0, 0, 34, 0, 38, 1, 0, 0, 40, 1, 0, 0, + 0, 0, 34, 0, 90, 0, 0, 0, 41, 1, 0, 0, 0, 0, 34, 0, 39, 1, 0, 0, 41, 1, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, + 42, 1, 0, 0, 0, 0, 34, 0, 40, 1, 0, 0, 42, 1, 0, 0, 0, 0, 34, 0, 49, 1, 0, 0, 50, 1, 0, 0, 0, 0, 38, 0, + 50, 1, 0, 0, 69, 1, 0, 0, 0, 0, 34, 0, 69, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, 49, 1, 0, 0, 79, 1, 0, 0, + 0, 0, 34, 0, 50, 1, 0, 0, 70, 1, 0, 0, 0, 0, 34, 0, 49, 1, 0, 0, 80, 1, 0, 0, 0, 0, 34, 0, 70, 1, 0, 0, + 80, 1, 0, 0, 0, 0, 34, 0, 48, 1, 0, 0, 49, 1, 0, 0, 0, 0, 38, 0, 77, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, + 48, 1, 0, 0, 77, 1, 0, 0, 0, 0, 34, 0, 48, 1, 0, 0, 78, 1, 0, 0, 0, 0, 34, 0, 78, 1, 0, 0, 80, 1, 0, 0, + 0, 0, 34, 0, 47, 1, 0, 0, 48, 1, 0, 0, 0, 0, 38, 0, 77, 1, 0, 0, 81, 1, 0, 0, 0, 0, 34, 0, 47, 1, 0, 0, + 81, 1, 0, 0, 0, 0, 34, 0, 47, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0, 78, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0, + 89, 0, 0, 0, 47, 1, 0, 0, 0, 0, 38, 0, 87, 0, 0, 0, 81, 1, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 82, 1, 0, 0, + 0, 0, 34, 0, 75, 1, 0, 0, 81, 1, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, 75, 1, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, + 76, 1, 0, 0, 0, 0, 34, 0, 76, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0, 71, 1, 0, 0, 75, 1, 0, 0, 0, 0, 34, 0, + 83, 0, 0, 0, 71, 1, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 72, 1, 0, 0, 0, 0, 34, 0, 72, 1, 0, 0, 76, 1, 0, 0, + 0, 0, 34, 0, 71, 1, 0, 0, 73, 1, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 73, 1, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, + 74, 1, 0, 0, 0, 0, 34, 0, 72, 1, 0, 0, 74, 1, 0, 0, 0, 0, 34, 0, 71, 1, 0, 0, 77, 1, 0, 0, 0, 0, 34, 0, + 73, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, 72, 1, 0, 0, 78, 1, 0, 0, 0, 0, 34, 0, 74, 1, 0, 0, 80, 1, 0, 0, + 0, 0, 34, 0, 67, 1, 0, 0, 73, 1, 0, 0, 0, 0, 34, 0, 67, 1, 0, 0, 69, 1, 0, 0, 0, 0, 34, 0, 68, 1, 0, 0, + 74, 1, 0, 0, 0, 0, 34, 0, 68, 1, 0, 0, 70, 1, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 67, 1, 0, 0, 0, 0, 34, 0, + 80, 0, 0, 0, 68, 1, 0, 0, 0, 0, 34, 0,206, 0, 0, 0, 83, 1, 0, 0, 0, 0, 34, 0, 83, 1, 0, 0, 85, 1, 0, 0, + 0, 0, 34, 0,212, 0, 0, 0, 85, 1, 0, 0, 0, 0, 34, 0, 84, 1, 0, 0, 86, 1, 0, 0, 0, 0, 34, 0,207, 0, 0, 0, + 84, 1, 0, 0, 0, 0, 34, 0,213, 0, 0, 0, 86, 1, 0, 0, 0, 0, 34, 0, 67, 1, 0, 0, 83, 1, 0, 0, 0, 0, 34, 0, + 68, 1, 0, 0, 84, 1, 0, 0, 0, 0, 34, 0, 85, 1, 0, 0, 87, 1, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0, 87, 1, 0, 0, + 0, 0, 34, 0, 78, 0, 0, 0, 88, 1, 0, 0, 0, 0, 34, 0, 86, 1, 0, 0, 88, 1, 0, 0, 0, 0, 34, 0, 41, 1, 0, 0, + 87, 1, 0, 0, 0, 0, 34, 0, 42, 1, 0, 0, 88, 1, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 65, 1, 0, 0, 0, 0, 34, 0, + 65, 1, 0, 0, 93, 1, 0, 0, 0, 0, 34, 0, 45, 1, 0, 0, 93, 1, 0, 0, 0, 0, 39, 0, 75, 0, 0, 0, 45, 1, 0, 0, + 0, 0, 38, 0, 66, 1, 0, 0, 94, 1, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 66, 1, 0, 0, 0, 0, 34, 0, 45, 1, 0, 0, + 94, 1, 0, 0, 0, 0, 39, 0, 91, 1, 0, 0, 93, 1, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 91, 1, 0, 0, 0, 0, 34, 0, + 76, 0, 0, 0, 45, 1, 0, 0, 0, 0, 38, 0, 92, 1, 0, 0, 94, 1, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 92, 1, 0, 0, + 0, 0, 34, 0, 89, 1, 0, 0, 91, 1, 0, 0, 0, 0, 34, 0, 46, 1, 0, 0, 89, 1, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, + 46, 1, 0, 0, 0, 0, 38, 0, 90, 1, 0, 0, 92, 1, 0, 0, 0, 0, 34, 0, 46, 1, 0, 0, 90, 1, 0, 0, 0, 0, 34, 0, + 69, 1, 0, 0, 89, 1, 0, 0, 0, 0, 34, 0, 46, 1, 0, 0, 50, 1, 0, 0, 0, 0, 38, 0, 70, 1, 0, 0, 90, 1, 0, 0, + 0, 0, 34, 0, 83, 1, 0, 0, 89, 1, 0, 0, 0, 0, 34, 0, 84, 1, 0, 0, 90, 1, 0, 0, 0, 0, 34, 0, 39, 1, 0, 0, + 59, 1, 0, 0, 0, 0, 34, 0, 51, 1, 0, 0, 59, 1, 0, 0, 0, 0, 34, 0, 37, 1, 0, 0, 51, 1, 0, 0, 0, 0, 34, 0, + 40, 1, 0, 0, 60, 1, 0, 0, 0, 0, 34, 0, 38, 1, 0, 0, 52, 1, 0, 0, 0, 0, 34, 0, 52, 1, 0, 0, 60, 1, 0, 0, + 0, 0, 34, 0, 74, 0, 0, 0, 57, 1, 0, 0, 0, 0, 39, 0, 57, 1, 0, 0, 65, 1, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, + 75, 0, 0, 0, 0, 0, 38, 0, 58, 1, 0, 0, 66, 1, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 58, 1, 0, 0, 0, 0, 39, 0, + 43, 1, 0, 0, 99, 1, 0, 0, 0, 0, 34, 0, 97, 1, 0, 0, 99, 1, 0, 0, 0, 0, 34, 0, 44, 1, 0, 0, 97, 1, 0, 0, + 0, 0, 34, 0, 43, 1, 0, 0, 44, 1, 0, 0, 0, 0, 38, 0, 98, 1, 0, 0,100, 1, 0, 0, 0, 0, 34, 0, 43, 1, 0, 0, +100, 1, 0, 0, 0, 0, 34, 0, 44, 1, 0, 0, 98, 1, 0, 0, 0, 0, 34, 0, 95, 1, 0, 0, 97, 1, 0, 0, 0, 0, 34, 0, + 73, 0, 0, 0, 95, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 44, 1, 0, 0, 0, 0, 38, 0, 96, 1, 0, 0, 98, 1, 0, 0, + 0, 0, 34, 0, 73, 0, 0, 0, 96, 1, 0, 0, 0, 0, 34, 0, 57, 1, 0, 0, 95, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, + 74, 0, 0, 0, 0, 0, 38, 0, 58, 1, 0, 0, 96, 1, 0, 0, 0, 0, 34, 0, 35, 1, 0, 0,103, 1, 0, 0, 0, 0, 34, 0, +103, 1, 0, 0,105, 1, 0, 0, 0, 0, 34, 0, 33, 1, 0, 0,105, 1, 0, 0, 0, 0, 34, 0, 36, 1, 0, 0,104, 1, 0, 0, + 0, 0, 34, 0, 34, 1, 0, 0,106, 1, 0, 0, 0, 0, 34, 0,104, 1, 0, 0,106, 1, 0, 0, 0, 0, 34, 0,103, 1, 0, 0, +109, 1, 0, 0, 0, 0, 34, 0,107, 1, 0, 0,109, 1, 0, 0, 0, 0, 34, 0,105, 1, 0, 0,107, 1, 0, 0, 0, 0, 34, 0, +104, 1, 0, 0,110, 1, 0, 0, 0, 0, 34, 0,106, 1, 0, 0,108, 1, 0, 0, 0, 0, 34, 0,108, 1, 0, 0,110, 1, 0, 0, + 0, 0, 34, 0,109, 1, 0, 0,111, 1, 0, 0, 0, 0, 34, 0,111, 1, 0, 0,113, 1, 0, 0, 0, 0, 34, 0,107, 1, 0, 0, +113, 1, 0, 0, 0, 0, 34, 0,110, 1, 0, 0,112, 1, 0, 0, 0, 0, 34, 0,108, 1, 0, 0,114, 1, 0, 0, 0, 0, 34, 0, +112, 1, 0, 0,114, 1, 0, 0, 0, 0, 34, 0,111, 1, 0, 0,117, 1, 0, 0, 0, 0, 34, 0,115, 1, 0, 0,117, 1, 0, 0, + 0, 0, 34, 0,113, 1, 0, 0,115, 1, 0, 0, 0, 0, 34, 0,112, 1, 0, 0,118, 1, 0, 0, 0, 0, 34, 0,114, 1, 0, 0, +116, 1, 0, 0, 0, 0, 34, 0,116, 1, 0, 0,118, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,119, 1, 0, 0, 0, 0, 39, 0, +115, 1, 0, 0,119, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,117, 1, 0, 0, 0, 0, 34, 0,116, 1, 0, 0,120, 1, 0, 0, + 0, 0, 34, 0, 56, 1, 0, 0,120, 1, 0, 0, 0, 0, 39, 0, 56, 1, 0, 0,118, 1, 0, 0, 0, 0, 34, 0, 95, 1, 0, 0, +115, 1, 0, 0, 0, 0, 34, 0, 57, 1, 0, 0,119, 1, 0, 0, 0, 0, 39, 0, 96, 1, 0, 0,116, 1, 0, 0, 0, 0, 34, 0, + 58, 1, 0, 0,120, 1, 0, 0, 0, 0, 39, 0, 97, 1, 0, 0,113, 1, 0, 0, 0, 0, 34, 0, 98, 1, 0, 0,114, 1, 0, 0, + 0, 0, 34, 0, 99, 1, 0, 0,107, 1, 0, 0, 0, 0, 34, 0,100, 1, 0, 0,108, 1, 0, 0, 0, 0, 34, 0, 99, 1, 0, 0, +101, 1, 0, 0, 0, 0, 34, 0,101, 1, 0, 0,105, 1, 0, 0, 0, 0, 34, 0,102, 1, 0, 0,106, 1, 0, 0, 0, 0, 34, 0, +100, 1, 0, 0,102, 1, 0, 0, 0, 0, 34, 0, 31, 1, 0, 0,101, 1, 0, 0, 0, 0, 34, 0, 32, 1, 0, 0,102, 1, 0, 0, + 0, 0, 34, 0, 72, 0, 0, 0,101, 1, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, 43, 1, 0, 0, 0, 0, 38, 0, 72, 0, 0, 0, +102, 1, 0, 0, 0, 0, 34, 0, 25, 1, 0, 0, 31, 1, 0, 0, 0, 0, 38, 0, 26, 1, 0, 0, 32, 1, 0, 0, 0, 0, 38, 0, + 72, 0, 0, 0, 25, 1, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, 26, 1, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 38, 0, 51, 1, 0, 0,103, 1, 0, 0, 0, 0, 34, 0, 52, 1, 0, 0,104, 1, 0, 0, 0, 0, 34, 0, 51, 1, 0, 0, + 53, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,109, 1, 0, 0, 0, 0, 34, 0, 54, 1, 0, 0,110, 1, 0, 0, 0, 0, 34, 0, + 52, 1, 0, 0, 54, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,123, 1, 0, 0, 0, 0, 34, 0,111, 1, 0, 0,123, 1, 0, 0, + 0, 0, 34, 0,112, 1, 0, 0,124, 1, 0, 0, 0, 0, 34, 0, 54, 1, 0, 0,124, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0, +123, 1, 0, 0, 0, 0, 34, 0, 56, 1, 0, 0,124, 1, 0, 0, 0, 0, 34, 0, 91, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0, +125, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0, 89, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0, 92, 1, 0, 0,128, 1, 0, 0, + 0, 0, 34, 0, 90, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0,126, 1, 0, 0,128, 1, 0, 0, 0, 0, 34, 0, 59, 1, 0, 0, +125, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0, 59, 1, 0, 0, 61, 1, 0, 0, 0, 0, 34, 0, + 60, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0, 60, 1, 0, 0, 62, 1, 0, 0, 0, 0, 34, 0, 62, 1, 0, 0,128, 1, 0, 0, + 0, 0, 34, 0, 41, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0, 42, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0, 41, 1, 0, 0, + 85, 1, 0, 0, 0, 0, 34, 0, 83, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0, 42, 1, 0, 0, 86, 1, 0, 0, 0, 0, 34, 0, + 84, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0, 63, 1, 0, 0, 0, 0, 34, 0, 63, 1, 0, 0,121, 1, 0, 0, + 0, 0, 39, 0,119, 1, 0, 0,121, 1, 0, 0, 0, 0, 34, 0, 64, 1, 0, 0,122, 1, 0, 0, 0, 0, 39, 0, 56, 1, 0, 0, + 64, 1, 0, 0, 0, 0, 34, 0,120, 1, 0, 0,122, 1, 0, 0, 0, 0, 34, 0, 65, 1, 0, 0,121, 1, 0, 0, 0, 0, 34, 0, + 66, 1, 0, 0,122, 1, 0, 0, 0, 0, 34, 0,121, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0, 63, 1, 0, 0, + 0, 0, 34, 0,122, 1, 0, 0,128, 1, 0, 0, 0, 0, 34, 0, 62, 1, 0, 0, 64, 1, 0, 0, 0, 0, 34, 0, 93, 1, 0, 0, +121, 1, 0, 0, 0, 0, 39, 0, 94, 1, 0, 0,122, 1, 0, 0, 0, 0, 39, 0,129, 1, 0, 0,141, 1, 0, 0, 0, 0, 34, 0, +129, 1, 0, 0,155, 1, 0, 0, 0, 0, 34, 0,143, 1, 0, 0,155, 1, 0, 0, 0, 0, 34, 0,141, 1, 0, 0,143, 1, 0, 0, + 0, 0, 34, 0,130, 1, 0, 0,156, 1, 0, 0, 0, 0, 34, 0,130, 1, 0, 0,142, 1, 0, 0, 0, 0, 34, 0,142, 1, 0, 0, +144, 1, 0, 0, 0, 0, 34, 0,144, 1, 0, 0,156, 1, 0, 0, 0, 0, 34, 0,143, 1, 0, 0,145, 1, 0, 0, 0, 0, 34, 0, +139, 1, 0, 0,145, 1, 0, 0, 0, 0, 34, 0,139, 1, 0, 0,141, 1, 0, 0, 0, 0, 34, 0,144, 1, 0, 0,146, 1, 0, 0, + 0, 0, 34, 0,140, 1, 0, 0,142, 1, 0, 0, 0, 0, 34, 0,140, 1, 0, 0,146, 1, 0, 0, 0, 0, 34, 0,145, 1, 0, 0, +147, 1, 0, 0, 0, 0, 34, 0,137, 1, 0, 0,147, 1, 0, 0, 0, 0, 34, 0,137, 1, 0, 0,139, 1, 0, 0, 0, 0, 34, 0, +146, 1, 0, 0,148, 1, 0, 0, 0, 0, 34, 0,138, 1, 0, 0,140, 1, 0, 0, 0, 0, 34, 0,138, 1, 0, 0,148, 1, 0, 0, + 0, 0, 34, 0,147, 1, 0, 0,149, 1, 0, 0, 0, 0, 34, 0,135, 1, 0, 0,149, 1, 0, 0, 0, 0, 34, 0,135, 1, 0, 0, +137, 1, 0, 0, 0, 0, 34, 0,148, 1, 0, 0,150, 1, 0, 0, 0, 0, 34, 0,136, 1, 0, 0,138, 1, 0, 0, 0, 0, 34, 0, +136, 1, 0, 0,150, 1, 0, 0, 0, 0, 34, 0,149, 1, 0, 0,151, 1, 0, 0, 0, 0, 34, 0,133, 1, 0, 0,151, 1, 0, 0, + 0, 0, 34, 0,133, 1, 0, 0,135, 1, 0, 0, 0, 0, 34, 0,150, 1, 0, 0,152, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0, +136, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0,152, 1, 0, 0, 0, 0, 34, 0,151, 1, 0, 0,153, 1, 0, 0, 0, 0, 34, 0, +131, 1, 0, 0,153, 1, 0, 0, 0, 0, 34, 0,131, 1, 0, 0,133, 1, 0, 0, 0, 0, 34, 0,152, 1, 0, 0,154, 1, 0, 0, + 0, 0, 34, 0,132, 1, 0, 0,134, 1, 0, 0, 0, 0, 34, 0,132, 1, 0, 0,154, 1, 0, 0, 0, 0, 34, 0,151, 1, 0, 0, +161, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0,161, 1, 0, 0, 0, 0, 34, 0,153, 1, 0, 0,159, 1, 0, 0, 0, 0, 34, 0, +160, 1, 0, 0,162, 1, 0, 0, 0, 0, 34, 0,152, 1, 0, 0,162, 1, 0, 0, 0, 0, 34, 0,154, 1, 0, 0,160, 1, 0, 0, + 0, 0, 34, 0,149, 1, 0, 0,163, 1, 0, 0, 0, 0, 34, 0,161, 1, 0, 0,163, 1, 0, 0, 0, 0, 34, 0,162, 1, 0, 0, +164, 1, 0, 0, 0, 0, 34, 0,150, 1, 0, 0,164, 1, 0, 0, 0, 0, 34, 0,147, 1, 0, 0,165, 1, 0, 0, 0, 0, 34, 0, +163, 1, 0, 0,165, 1, 0, 0, 0, 0, 34, 0,164, 1, 0, 0,166, 1, 0, 0, 0, 0, 34, 0,148, 1, 0, 0,166, 1, 0, 0, + 0, 0, 34, 0,145, 1, 0, 0,167, 1, 0, 0, 0, 0, 34, 0,165, 1, 0, 0,167, 1, 0, 0, 0, 0, 34, 0,166, 1, 0, 0, +168, 1, 0, 0, 0, 0, 34, 0,146, 1, 0, 0,168, 1, 0, 0, 0, 0, 34, 0,143, 1, 0, 0,169, 1, 0, 0, 0, 0, 34, 0, +167, 1, 0, 0,169, 1, 0, 0, 0, 0, 34, 0,168, 1, 0, 0,170, 1, 0, 0, 0, 0, 34, 0,144, 1, 0, 0,170, 1, 0, 0, + 0, 0, 34, 0,155, 1, 0, 0,157, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0,169, 1, 0, 0, 0, 0, 34, 0,156, 1, 0, 0, +158, 1, 0, 0, 0, 0, 34, 0,158, 1, 0, 0,170, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0, +183, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0, 59, 1, 0, 0,183, 1, 0, 0, 0, 0, 34, 0, 62, 1, 0, 0,186, 1, 0, 0, + 0, 0, 34, 0, 60, 1, 0, 0,184, 1, 0, 0, 0, 0, 34, 0,184, 1, 0, 0,186, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0, +131, 1, 0, 0, 0, 0, 34, 0,153, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0, 62, 1, 0, 0,132, 1, 0, 0, 0, 0, 34, 0, +154, 1, 0, 0,186, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,183, 1, 0, 0, 0, 0, 34, 0, 54, 1, 0, 0,184, 1, 0, 0, + 0, 0, 34, 0,123, 1, 0, 0,171, 1, 0, 0, 0, 0, 34, 0,155, 1, 0, 0,171, 1, 0, 0, 0, 0, 34, 0,123, 1, 0, 0, +129, 1, 0, 0, 0, 0, 34, 0,156, 1, 0, 0,172, 1, 0, 0, 0, 0, 34, 0,124, 1, 0, 0,172, 1, 0, 0, 0, 0, 34, 0, +124, 1, 0, 0,130, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0,181, 1, 0, 0, 0, 0, 34, 0,181, 1, 0, 0,185, 1, 0, 0, + 0, 0, 34, 0,160, 1, 0, 0,182, 1, 0, 0, 0, 0, 34, 0,182, 1, 0, 0,186, 1, 0, 0, 0, 0, 34, 0,179, 1, 0, 0, +187, 1, 0, 0, 0, 0, 34, 0,185, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,179, 1, 0, 0,181, 1, 0, 0, 0, 0, 34, 0, +186, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,180, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,180, 1, 0, 0,182, 1, 0, 0, + 0, 0, 34, 0,175, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,177, 1, 0, 0,179, 1, 0, 0, 0, 0, 34, 0,175, 1, 0, 0, +177, 1, 0, 0, 0, 0, 34, 0,176, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,176, 1, 0, 0,178, 1, 0, 0, 0, 0, 34, 0, +178, 1, 0, 0,180, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0,187, 1, 0, 0,189, 1, 0, 0, + 0, 0, 34, 0,173, 1, 0, 0,175, 1, 0, 0, 0, 0, 34, 0,188, 1, 0, 0,190, 1, 0, 0, 0, 0, 34, 0,174, 1, 0, 0, +190, 1, 0, 0, 0, 0, 34, 0,174, 1, 0, 0,176, 1, 0, 0, 0, 0, 34, 0,171, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0, +173, 1, 0, 0,191, 1, 0, 0, 0, 0, 34, 0,171, 1, 0, 0,191, 1, 0, 0, 0, 0, 32, 0,172, 1, 0, 0,190, 1, 0, 0, + 0, 0, 34, 0,172, 1, 0, 0,192, 1, 0, 0, 0, 0, 32, 0,174, 1, 0, 0,192, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0, +191, 1, 0, 0, 0, 0, 34, 0,158, 1, 0, 0,192, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0, + 54, 1, 0, 0,190, 1, 0, 0, 0, 0, 34, 0,183, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,184, 1, 0, 0,188, 1, 0, 0, + 0, 0, 34, 0,191, 1, 0, 0,193, 1, 0, 0, 0, 0, 34, 0,193, 1, 0, 0,217, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0, +217, 1, 0, 0, 0, 0, 34, 0,192, 1, 0, 0,194, 1, 0, 0, 0, 0, 34, 0,158, 1, 0, 0,218, 1, 0, 0, 0, 0, 34, 0, +194, 1, 0, 0,218, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,203, 1, 0, 0, 0, 0, 34, 0,193, 1, 0, 0,203, 1, 0, 0, + 0, 0, 34, 0,174, 1, 0, 0,204, 1, 0, 0, 0, 0, 34, 0,194, 1, 0, 0,204, 1, 0, 0, 0, 0, 34, 0,175, 1, 0, 0, +201, 1, 0, 0, 0, 0, 34, 0,201, 1, 0, 0,203, 1, 0, 0, 0, 0, 34, 0,176, 1, 0, 0,202, 1, 0, 0, 0, 0, 34, 0, +202, 1, 0, 0,204, 1, 0, 0, 0, 0, 34, 0,177, 1, 0, 0,199, 1, 0, 0, 0, 0, 34, 0,199, 1, 0, 0,201, 1, 0, 0, + 0, 0, 34, 0,178, 1, 0, 0,200, 1, 0, 0, 0, 0, 34, 0,200, 1, 0, 0,202, 1, 0, 0, 0, 0, 34, 0,179, 1, 0, 0, +197, 1, 0, 0, 0, 0, 34, 0,197, 1, 0, 0,199, 1, 0, 0, 0, 0, 34, 0,180, 1, 0, 0,198, 1, 0, 0, 0, 0, 34, 0, +198, 1, 0, 0,200, 1, 0, 0, 0, 0, 34, 0,181, 1, 0, 0,195, 1, 0, 0, 0, 0, 34, 0,195, 1, 0, 0,197, 1, 0, 0, + 0, 0, 34, 0,182, 1, 0, 0,196, 1, 0, 0, 0, 0, 34, 0,196, 1, 0, 0,198, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0, +215, 1, 0, 0, 0, 0, 34, 0,195, 1, 0, 0,215, 1, 0, 0, 0, 0, 34, 0,160, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0, +196, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0,205, 1, 0, 0,217, 1, 0, 0, 0, 0, 34, 0,169, 1, 0, 0,205, 1, 0, 0, + 0, 0, 34, 0,170, 1, 0, 0,206, 1, 0, 0, 0, 0, 34, 0,206, 1, 0, 0,218, 1, 0, 0, 0, 0, 34, 0,205, 1, 0, 0, +207, 1, 0, 0, 0, 0, 34, 0,167, 1, 0, 0,207, 1, 0, 0, 0, 0, 34, 0,168, 1, 0, 0,208, 1, 0, 0, 0, 0, 34, 0, +206, 1, 0, 0,208, 1, 0, 0, 0, 0, 34, 0,207, 1, 0, 0,209, 1, 0, 0, 0, 0, 34, 0,165, 1, 0, 0,209, 1, 0, 0, + 0, 0, 34, 0,166, 1, 0, 0,210, 1, 0, 0, 0, 0, 34, 0,208, 1, 0, 0,210, 1, 0, 0, 0, 0, 34, 0,209, 1, 0, 0, +211, 1, 0, 0, 0, 0, 34, 0,163, 1, 0, 0,211, 1, 0, 0, 0, 0, 34, 0,164, 1, 0, 0,212, 1, 0, 0, 0, 0, 34, 0, +210, 1, 0, 0,212, 1, 0, 0, 0, 0, 34, 0,211, 1, 0, 0,213, 1, 0, 0, 0, 0, 34, 0,161, 1, 0, 0,213, 1, 0, 0, + 0, 0, 34, 0,162, 1, 0, 0,214, 1, 0, 0, 0, 0, 34, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 34, 0,213, 1, 0, 0, +215, 1, 0, 0, 0, 0, 34, 0,214, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0,197, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0, +219, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0,199, 1, 0, 0,219, 1, 0, 0, 0, 0, 34, 0,198, 1, 0, 0,222, 1, 0, 0, + 0, 0, 34, 0,200, 1, 0, 0,220, 1, 0, 0, 0, 0, 34, 0,220, 1, 0, 0,222, 1, 0, 0, 0, 0, 34, 0,221, 1, 0, 0, +223, 1, 0, 0, 0, 0, 34, 0,223, 1, 0, 0,225, 1, 0, 0, 0, 0, 32, 0,219, 1, 0, 0,225, 1, 0, 0, 0, 0, 34, 0, +222, 1, 0, 0,224, 1, 0, 0, 0, 0, 34, 0,220, 1, 0, 0,226, 1, 0, 0, 0, 0, 34, 0,224, 1, 0, 0,226, 1, 0, 0, + 0, 0, 32, 0,223, 1, 0, 0,229, 1, 0, 0, 0, 0, 34, 0,227, 1, 0, 0,229, 1, 0, 0, 0, 0, 34, 0,225, 1, 0, 0, +227, 1, 0, 0, 0, 0, 34, 0,224, 1, 0, 0,230, 1, 0, 0, 0, 0, 34, 0,226, 1, 0, 0,228, 1, 0, 0, 0, 0, 34, 0, +228, 1, 0, 0,230, 1, 0, 0, 0, 0, 34, 0,229, 1, 0, 0,231, 1, 0, 0, 0, 0, 34, 0,231, 1, 0, 0,233, 1, 0, 0, + 0, 0, 34, 0,227, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,230, 1, 0, 0,232, 1, 0, 0, 0, 0, 34, 0,228, 1, 0, 0, +234, 1, 0, 0, 0, 0, 34, 0,232, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,217, 1, 0, 0,227, 1, 0, 0, 0, 0, 34, 0, +205, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,218, 1, 0, 0,228, 1, 0, 0, 0, 0, 34, 0,206, 1, 0, 0,234, 1, 0, 0, + 0, 0, 34, 0,193, 1, 0, 0,225, 1, 0, 0, 0, 0, 34, 0,194, 1, 0, 0,226, 1, 0, 0, 0, 0, 34, 0,203, 1, 0, 0, +219, 1, 0, 0, 0, 0, 34, 0,204, 1, 0, 0,220, 1, 0, 0, 0, 0, 34, 0,215, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0, +216, 1, 0, 0,222, 1, 0, 0, 0, 0, 34, 0,213, 1, 0, 0,223, 1, 0, 0, 0, 0, 34, 0,214, 1, 0, 0,224, 1, 0, 0, + 0, 0, 34, 0,211, 1, 0, 0,229, 1, 0, 0, 0, 0, 34, 0,212, 1, 0, 0,230, 1, 0, 0, 0, 0, 34, 0,209, 1, 0, 0, +231, 1, 0, 0, 0, 0, 34, 0,210, 1, 0, 0,232, 1, 0, 0, 0, 0, 34, 0,207, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0, +208, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,131, 1, 0, 0,245, 1, 0, 0, 0, 0, 34, 0,243, 1, 0, 0,245, 1, 0, 0, + 0, 0, 39, 0,133, 1, 0, 0,243, 1, 0, 0, 0, 0, 34, 0,132, 1, 0, 0,246, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0, +244, 1, 0, 0, 0, 0, 34, 0,244, 1, 0, 0,246, 1, 0, 0, 0, 0, 39, 0,241, 1, 0, 0,243, 1, 0, 0, 0, 0, 39, 0, +135, 1, 0, 0,241, 1, 0, 0, 0, 0, 34, 0,136, 1, 0, 0,242, 1, 0, 0, 0, 0, 34, 0,242, 1, 0, 0,244, 1, 0, 0, + 0, 0, 39, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 39, 0,137, 1, 0, 0,239, 1, 0, 0, 0, 0, 34, 0,138, 1, 0, 0, +240, 1, 0, 0, 0, 0, 34, 0,240, 1, 0, 0,242, 1, 0, 0, 0, 0, 39, 0,237, 1, 0, 0,239, 1, 0, 0, 0, 0, 39, 0, +139, 1, 0, 0,237, 1, 0, 0, 0, 0, 34, 0,140, 1, 0, 0,238, 1, 0, 0, 0, 0, 34, 0,238, 1, 0, 0,240, 1, 0, 0, + 0, 0, 39, 0,235, 1, 0, 0,237, 1, 0, 0, 0, 0, 39, 0,141, 1, 0, 0,235, 1, 0, 0, 0, 0, 34, 0,142, 1, 0, 0, +236, 1, 0, 0, 0, 0, 34, 0,236, 1, 0, 0,238, 1, 0, 0, 0, 0, 39, 0,235, 1, 0, 0,247, 1, 0, 0, 0, 0, 39, 0, +129, 1, 0, 0,247, 1, 0, 0, 0, 0, 34, 0,130, 1, 0, 0,248, 1, 0, 0, 0, 0, 34, 0,236, 1, 0, 0,248, 1, 0, 0, + 0, 0, 39, 0,235, 1, 0, 0,243, 1, 0, 0, 0, 0, 34, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 34, 0,236, 1, 0, 0, +244, 1, 0, 0, 0, 0, 34, 0,246, 1, 0, 0,248, 1, 0, 0, 0, 0, 34, 0,237, 1, 0, 0,241, 1, 0, 0, 0, 0, 34, 0, +238, 1, 0, 0,242, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,247, 1, 0, 0, 0, 0, 39, 0, 56, 1, 0, 0,248, 1, 0, 0, + 0, 0, 39, 0, 63, 1, 0, 0,245, 1, 0, 0, 0, 0, 39, 0, 64, 1, 0, 0,246, 1, 0, 0, 0, 0, 39, 0, 14, 0, 0, 0, +249, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0,178, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, + 14, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0,112, 0, 0, 0, + 0, 0, 34, 0, 9, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 24,194,181, 3, 58, 1, 0, 0, 5, 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,160,195,181, 3, 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, 0, 0, 0, 0, 85, 86, 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,224,234,181, 3, 6, 0, 0, 0, 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, 67,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, 65,182, 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, 68, 65, 84, 65, 16, 39, 0, 0,160,195,181, 3, 54, 0, 0, 0,244, 1, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0, 0, 46, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 1, + 43, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 3, 0, 0, 0, 44, 0, 0, 0, + 42, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, + 9, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 9, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0, 12, 0, 0, 0, + 14, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1,112, 0, 0, 0, 13, 0, 0, 0, 11, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, + 8, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0,112, 0, 0, 0, 9, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0, 19, 0, 0, 0, 17, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 18, 0, 0, 0, + 20, 0, 0, 0,112, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 1, 20, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 1, 21, 0, 0, 0, 23, 0, 0, 0, + 25, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 1, 26, 0, 0, 0, 24, 0, 0, 0, 22, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, + 19, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 1, 28, 0, 0, 0, 26, 0, 0, 0, 20, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 1, 25, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 1, 30, 0, 0, 0, + 32, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 23, 0, 0, 0, 33, 0, 0, 0, 31, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 1, 32, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0, + 37, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 1, 38, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 1, + 31, 0, 0, 0, 37, 0, 0, 0, 39, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 38, 0, 0, 0, 32, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 1, 37, 0, 0, 0, 43, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 1, 42, 0, 0, 0, + 44, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 1, 35, 0, 0, 0, 45, 0, 0, 0, 43, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 1, 44, 0, 0, 0, 46, 0, 0, 0, 36, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 0, + 49, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 50, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 1, + 35, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 1, 52, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 1, 33, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 1, 54, 0, 0, 0, + 24, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 1, 23, 0, 0, 0, 21, 0, 0, 0, 55, 0, 0, 0, 53, 0, 0, 0, + 0, 0, 0, 1, 56, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 1, 21, 0, 0, 0, 12, 0, 0, 0, + 57, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 1, 58, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 1, + 12, 0, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 1, 62, 0, 0, 0, 11, 0, 0, 0, 13, 0, 0, 0, + 58, 0, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, + 1, 0, 0, 0, 11, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 0, 1, 48, 0, 0, 0, 46, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 63, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 48, 0, 0, 0, 64, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 61, 0, 0, 0, 63, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 64, 0, 0, 0, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0, 0, 0, + 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 55, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 58, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 53, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 56, 0, 0, 0, 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 59, 0, 0, 0, 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 54, 0, 0, 0, 52, 0, 0, 0, 60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 52, 0, 0, 0, + 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 50, 0, 0, 0, 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 87, 0, 0, 0,171, 0, 0, 0, +173, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1,173, 0, 0, 0,172, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, + 85, 0, 0, 0,169, 0, 0, 0,171, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 1,172, 0, 0, 0,170, 0, 0, 0, 86, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 0, 1, 83, 0, 0, 0,167, 0, 0, 0,169, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 1,170, 0, 0, 0, +168, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 1,168, 0, 0, 0,166, 0, 0, 0, 82, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0,163, 0, 0, 0, +165, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1,166, 0, 0, 0,164, 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 1, + 77, 0, 0, 0, 90, 0, 0, 0,143, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,144, 0, 0, 0, 91, 0, 0, 0, 78, 0, 0, 0, +162, 0, 0, 0, 0, 0, 0, 1, 90, 0, 0, 0, 92, 0, 0, 0,145, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 1,146, 0, 0, 0, + 93, 0, 0, 0, 91, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 1, 92, 0, 0, 0, 94, 0, 0, 0,147, 0, 0, 0,145, 0, 0, 0, + 0, 0, 0, 1,148, 0, 0, 0, 95, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 0, 0, 0, 1, 94, 0, 0, 0, 96, 0, 0, 0, +149, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 1,150, 0, 0, 0, 97, 0, 0, 0, 95, 0, 0, 0,148, 0, 0, 0, 0, 0, 0, 1, + 96, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 1,152, 0, 0, 0, 99, 0, 0, 0, 97, 0, 0, 0, +150, 0, 0, 0, 0, 0, 0, 1, 98, 0, 0, 0,100, 0, 0, 0,153, 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 1,154, 0, 0, 0, +101, 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 1,100, 0, 0, 0,102, 0, 0, 0,155, 0, 0, 0,153, 0, 0, 0, + 0, 0, 0, 1,156, 0, 0, 0,103, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 1,102, 0, 0, 0,104, 0, 0, 0, +157, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 1,158, 0, 0, 0,105, 0, 0, 0,103, 0, 0, 0,156, 0, 0, 0, 0, 0, 0, 1, +104, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 1,160, 0, 0, 0,107, 0, 0, 0,105, 0, 0, 0, +158, 0, 0, 0, 0, 0, 0, 1,106, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 1, 66, 0, 0, 0, + 65, 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 1,108, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0,159, 0, 0, 0, + 0, 0, 0, 1,158, 0, 0, 0,126, 0, 0, 0,109, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 1,125, 0, 0, 0,176, 0, 0, 0, +155, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 1,156, 0, 0, 0,177, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 1, +123, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 1,156, 0, 0, 0,154, 0, 0, 0,124, 0, 0, 0, +177, 0, 0, 0, 0, 0, 0, 1,121, 0, 0, 0,151, 0, 0, 0,153, 0, 0, 0,123, 0, 0, 0, 0, 0, 0, 1,154, 0, 0, 0, +152, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 1,119, 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0,121, 0, 0, 0, + 0, 0, 0, 1,152, 0, 0, 0,150, 0, 0, 0,120, 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 1,117, 0, 0, 0,147, 0, 0, 0, +149, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 1,150, 0, 0, 0,148, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 1, +115, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0,117, 0, 0, 0, 0, 0, 0, 1,148, 0, 0, 0,146, 0, 0, 0,116, 0, 0, 0, +118, 0, 0, 0, 0, 0, 0, 1,113, 0, 0, 0,143, 0, 0, 0,145, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 1,146, 0, 0, 0, +144, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0,161, 0, 0, 0,143, 0, 0, 0,113, 0, 0, 0, + 0, 0, 0, 1,144, 0, 0, 0,162, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0,178, 0, 0, 0, +174, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,174, 0, 0, 0,179, 0, 0, 0,112, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 1, +108, 0, 0, 0,159, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 1, 66, 0, 0, 0,160, 0, 0, 0,109, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 1,110, 0, 0, 0, 66, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 1,175, 0, 0, 0, + 66, 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 1,174, 0, 0, 0,178, 0, 0, 0,180, 0, 0, 0,175, 0, 0, 0, + 0, 0, 0, 1,181, 0, 0, 0,179, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 1,132, 0, 0, 0,134, 0, 0, 0, +173, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 1,173, 0, 0, 0,134, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 1, +130, 0, 0, 0,132, 0, 0, 0,171, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 1,172, 0, 0, 0,133, 0, 0, 0,131, 0, 0, 0, +170, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 1,170, 0, 0, 0, +131, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 1,163, 0, 0, 0,184, 0, 0, 0,182, 0, 0, 0,165, 0, 0, 0, + 0, 0, 0, 1,183, 0, 0, 0,185, 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,167, 0, 0, 0, +165, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 1,166, 0, 0, 0,168, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 1, +141, 0, 0, 0,187, 0, 0, 0,186, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 1,186, 0, 0, 0,187, 0, 0, 0,142, 0, 0, 0, +185, 0, 0, 0, 0, 0, 0, 1,182, 0, 0, 0,184, 0, 0, 0,186, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,186, 0, 0, 0, +185, 0, 0, 0,183, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,127, 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0, 67, 0, 0, 0, + 0, 0, 0, 1,183, 0, 0, 0,129, 0, 0, 0,127, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,139, 0, 0, 0,190, 0, 0, 0, +188, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 1,189, 0, 0, 0,191, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 1, +137, 0, 0, 0,192, 0, 0, 0,190, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 1,191, 0, 0, 0,193, 0, 0, 0,138, 0, 0, 0, +140, 0, 0, 0, 0, 0, 0, 1,136, 0, 0, 0,194, 0, 0, 0,192, 0, 0, 0,137, 0, 0, 0, 0, 0, 0, 1,193, 0, 0, 0, +195, 0, 0, 0,136, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 1,135, 0, 0, 0, 69, 0, 0, 0,194, 0, 0, 0,136, 0, 0, 0, + 0, 0, 0, 1,195, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 1,187, 0, 0, 0,141, 0, 0, 0, +188, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 1,189, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 1, + 68, 0, 0, 0,188, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 1,204, 0, 0, 0,189, 0, 0, 0, 68, 0, 0, 0, +205, 0, 0, 0, 0, 0, 0, 1, 69, 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 1,198, 0, 0, 0, +196, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 0, 0, 0, 1,194, 0, 0, 0,197, 0, 0, 0,199, 0, 0, 0,192, 0, 0, 0, + 0, 0, 0, 1,200, 0, 0, 0,198, 0, 0, 0,195, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 1,192, 0, 0, 0,199, 0, 0, 0, +201, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 1,202, 0, 0, 0,200, 0, 0, 0,193, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 1, +190, 0, 0, 0,201, 0, 0, 0,203, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 1,204, 0, 0, 0,202, 0, 0, 0,191, 0, 0, 0, +189, 0, 0, 0, 0, 0, 0, 1,196, 0, 0, 0,201, 0, 0, 0,199, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 1,200, 0, 0, 0, +202, 0, 0, 0,196, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 1,196, 0, 0, 0,205, 0, 0, 0,203, 0, 0, 0,201, 0, 0, 0, + 0, 0, 0, 1,204, 0, 0, 0,205, 0, 0, 0,196, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 1,136, 0, 0, 0,137, 0, 0, 0, +161, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 1,162, 0, 0, 0,138, 0, 0, 0,136, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 1, +137, 0, 0, 0,139, 0, 0, 0,208, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,209, 0, 0, 0,140, 0, 0, 0,138, 0, 0, 0, +162, 0, 0, 0, 0, 0, 0, 1,139, 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 1,211, 0, 0, 0, +142, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 1,141, 0, 0, 0,184, 0, 0, 0,163, 0, 0, 0,210, 0, 0, 0, + 0, 0, 0, 1,164, 0, 0, 0,185, 0, 0, 0,142, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0,206, 0, 0, 0, +210, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 1,211, 0, 0, 0,207, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 1, +206, 0, 0, 0,212, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 1,209, 0, 0, 0,213, 0, 0, 0,207, 0, 0, 0, +211, 0, 0, 0, 0, 0, 0, 1, 77, 0, 0, 0,161, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 1,209, 0, 0, 0, +162, 0, 0, 0, 78, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,127, 0, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, + 0, 0, 0, 1, 70, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 1,130, 0, 0, 0,128, 0, 0, 0, +219, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 1,220, 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 1, +132, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 1,218, 0, 0, 0,131, 0, 0, 0,133, 0, 0, 0, +216, 0, 0, 0, 0, 0, 0, 1,134, 0, 0, 0,132, 0, 0, 0,215, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 1,216, 0, 0, 0, +133, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 1,214, 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0,228, 0, 0, 0, + 0, 0, 0, 1,227, 0, 0, 0,216, 0, 0, 0,214, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 1,215, 0, 0, 0,217, 0, 0, 0, +224, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 1,225, 0, 0, 0,218, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0, 0, 0, 0, 1, +217, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 1,223, 0, 0, 0,220, 0, 0, 0,218, 0, 0, 0, +225, 0, 0, 0, 0, 0, 0, 1,219, 0, 0, 0, 70, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 1,221, 0, 0, 0, + 70, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 1,221, 0, 0, 0,228, 0, 0, 0,226, 0, 0, 0,222, 0, 0, 0, + 0, 0, 0, 1,227, 0, 0, 0,228, 0, 0, 0,221, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 1,222, 0, 0, 0,226, 0, 0, 0, +224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,225, 0, 0, 0,227, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, +180, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 1,232, 0, 0, 0,179, 0, 0, 0,181, 0, 0, 0, +230, 0, 0, 0, 0, 0, 0, 1,110, 0, 0, 0,180, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 0, 0, 0, 1,230, 0, 0, 0, +181, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 1,108, 0, 0, 0,110, 0, 0, 0,251, 0, 0, 0,253, 0, 0, 0, + 0, 0, 0, 1,252, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 1,178, 0, 0, 0, 14, 0, 0, 0, +249, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 1,250, 0, 0, 0,112, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 1, + 14, 0, 0, 0,113, 0, 0, 0,247, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 1,248, 0, 0, 0,114, 0, 0, 0,112, 0, 0, 0, +250, 0, 0, 0, 0, 0, 0, 1,113, 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 0, 0, 0, 1,246, 0, 0, 0, +116, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 1,115, 0, 0, 0,117, 0, 0, 0,243, 0, 0, 0,245, 0, 0, 0, + 0, 0, 0, 1,244, 0, 0, 0,118, 0, 0, 0,116, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 1,117, 0, 0, 0,119, 0, 0, 0, +241, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0,120, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 1, +119, 0, 0, 0,121, 0, 0, 0,239, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 1,240, 0, 0, 0,122, 0, 0, 0,120, 0, 0, 0, +242, 0, 0, 0, 0, 0, 0, 1,121, 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 1,238, 0, 0, 0, +124, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 1,123, 0, 0, 0,176, 0, 0, 0,233, 0, 0, 0,237, 0, 0, 0, + 0, 0, 0, 1,234, 0, 0, 0,177, 0, 0, 0,124, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 1,176, 0, 0, 0,125, 0, 0, 0, +235, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 1,236, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 1, +125, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 1,254, 0, 0, 0,109, 0, 0, 0,126, 0, 0, 0, +236, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 0, 17, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, +254, 0, 0, 0,236, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 1,233, 0, 0, 0,235, 0, 0, 0, 17, 1, 0, 0, 19, 1, 0, 0, + 0, 0, 0, 1, 18, 1, 0, 0,236, 0, 0, 0,234, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 1,237, 0, 0, 0,233, 0, 0, 0, + 19, 1, 0, 0, 15, 1, 0, 0, 0, 0, 0, 1, 20, 1, 0, 0,234, 0, 0, 0,238, 0, 0, 0, 16, 1, 0, 0, 0, 0, 0, 1, +239, 0, 0, 0,237, 0, 0, 0, 15, 1, 0, 0, 13, 1, 0, 0, 0, 0, 0, 1, 16, 1, 0, 0,238, 0, 0, 0,240, 0, 0, 0, + 14, 1, 0, 0, 0, 0, 0, 1,241, 0, 0, 0,239, 0, 0, 0, 13, 1, 0, 0, 11, 1, 0, 0, 0, 0, 0, 1, 14, 1, 0, 0, +240, 0, 0, 0,242, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 1,243, 0, 0, 0,241, 0, 0, 0, 11, 1, 0, 0, 9, 1, 0, 0, + 0, 0, 0, 1, 12, 1, 0, 0,242, 0, 0, 0,244, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 1,245, 0, 0, 0,243, 0, 0, 0, + 9, 1, 0, 0, 7, 1, 0, 0, 0, 0, 0, 1, 10, 1, 0, 0,244, 0, 0, 0,246, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 1, +247, 0, 0, 0,245, 0, 0, 0, 7, 1, 0, 0, 5, 1, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0,246, 0, 0, 0,248, 0, 0, 0, + 6, 1, 0, 0, 0, 0, 0, 1,249, 0, 0, 0,247, 0, 0, 0, 5, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 1, 6, 1, 0, 0, +248, 0, 0, 0,250, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 1,231, 0, 0, 0,249, 0, 0, 0, 3, 1, 0, 0, 21, 1, 0, 0, + 0, 0, 0, 1, 4, 1, 0, 0,250, 0, 0, 0,232, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1,253, 0, 0, 0,251, 0, 0, 0, + 1, 1, 0, 0,255, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0,252, 0, 0, 0,254, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, +251, 0, 0, 0,229, 0, 0, 0, 23, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 24, 1, 0, 0,230, 0, 0, 0,252, 0, 0, 0, + 2, 1, 0, 0, 0, 0, 0, 1,229, 0, 0, 0,231, 0, 0, 0, 21, 1, 0, 0, 23, 1, 0, 0, 0, 0, 0, 1, 22, 1, 0, 0, +232, 0, 0, 0,230, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 1, 65, 0, 0, 0,106, 0, 0, 0, 25, 1, 0, 0, 71, 0, 0, 0, + 0, 0, 0, 1, 26, 1, 0, 0,107, 0, 0, 0, 65, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 1,106, 0, 0, 0,104, 0, 0, 0, + 27, 1, 0, 0, 25, 1, 0, 0, 0, 0, 0, 1, 28, 1, 0, 0,105, 0, 0, 0,107, 0, 0, 0, 26, 1, 0, 0, 0, 0, 0, 1, +104, 0, 0, 0,102, 0, 0, 0, 29, 1, 0, 0, 27, 1, 0, 0, 0, 0, 0, 1, 30, 1, 0, 0,103, 0, 0, 0,105, 0, 0, 0, + 28, 1, 0, 0, 0, 0, 0, 1,102, 0, 0, 0,100, 0, 0, 0, 31, 1, 0, 0, 29, 1, 0, 0, 0, 0, 0, 1, 32, 1, 0, 0, +101, 0, 0, 0,103, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 1,100, 0, 0, 0, 98, 0, 0, 0, 33, 1, 0, 0, 31, 1, 0, 0, + 0, 0, 0, 1, 34, 1, 0, 0, 99, 0, 0, 0,101, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 1, 98, 0, 0, 0, 96, 0, 0, 0, + 35, 1, 0, 0, 33, 1, 0, 0, 0, 0, 0, 1, 36, 1, 0, 0, 97, 0, 0, 0, 99, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 1, + 96, 0, 0, 0, 94, 0, 0, 0, 37, 1, 0, 0, 35, 1, 0, 0, 0, 0, 0, 1, 38, 1, 0, 0, 95, 0, 0, 0, 97, 0, 0, 0, + 36, 1, 0, 0, 0, 0, 0, 1, 94, 0, 0, 0, 92, 0, 0, 0, 39, 1, 0, 0, 37, 1, 0, 0, 0, 0, 0, 1, 40, 1, 0, 0, + 93, 0, 0, 0, 95, 0, 0, 0, 38, 1, 0, 0, 0, 0, 0, 1, 92, 0, 0, 0, 90, 0, 0, 0, 41, 1, 0, 0, 39, 1, 0, 0, + 0, 0, 0, 1, 42, 1, 0, 0, 91, 0, 0, 0, 93, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 49, 1, 0, 0, 50, 1, 0, 0, + 69, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 1, 70, 1, 0, 0, 50, 1, 0, 0, 49, 1, 0, 0, 80, 1, 0, 0, 0, 0, 0, 1, + 48, 1, 0, 0, 49, 1, 0, 0, 79, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 1, 80, 1, 0, 0, 49, 1, 0, 0, 48, 1, 0, 0, + 78, 1, 0, 0, 0, 0, 0, 1, 47, 1, 0, 0, 48, 1, 0, 0, 77, 1, 0, 0, 81, 1, 0, 0, 0, 0, 0, 1, 78, 1, 0, 0, + 48, 1, 0, 0, 47, 1, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 87, 0, 0, 0, 89, 0, 0, 0, 47, 1, 0, 0, 81, 1, 0, 0, + 0, 0, 0, 1, 47, 1, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 87, 0, 0, 0, + 81, 1, 0, 0, 75, 1, 0, 0, 0, 0, 0, 1, 82, 1, 0, 0, 88, 0, 0, 0, 86, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 1, + 83, 0, 0, 0, 85, 0, 0, 0, 75, 1, 0, 0, 71, 1, 0, 0, 0, 0, 0, 1, 76, 1, 0, 0, 86, 0, 0, 0, 84, 0, 0, 0, + 72, 1, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 83, 0, 0, 0, 71, 1, 0, 0, 73, 1, 0, 0, 0, 0, 0, 1, 72, 1, 0, 0, + 84, 0, 0, 0, 82, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 1, 71, 1, 0, 0, 77, 1, 0, 0, 79, 1, 0, 0, 73, 1, 0, 0, + 0, 0, 0, 1, 80, 1, 0, 0, 78, 1, 0, 0, 72, 1, 0, 0, 74, 1, 0, 0, 0, 0, 0, 1, 71, 1, 0, 0, 75, 1, 0, 0, + 81, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 1, 82, 1, 0, 0, 76, 1, 0, 0, 72, 1, 0, 0, 78, 1, 0, 0, 0, 0, 0, 1, + 67, 1, 0, 0, 73, 1, 0, 0, 79, 1, 0, 0, 69, 1, 0, 0, 0, 0, 0, 1, 80, 1, 0, 0, 74, 1, 0, 0, 68, 1, 0, 0, + 70, 1, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0, 81, 0, 0, 0, 73, 1, 0, 0, 67, 1, 0, 0, 0, 0, 0, 1, 74, 1, 0, 0, + 82, 0, 0, 0, 80, 0, 0, 0, 68, 1, 0, 0, 0, 0, 0, 1,206, 0, 0, 0, 83, 1, 0, 0, 85, 1, 0, 0,212, 0, 0, 0, + 0, 0, 0, 1, 86, 1, 0, 0, 84, 1, 0, 0,207, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0, 67, 1, 0, 0, + 83, 1, 0, 0,206, 0, 0, 0, 0, 0, 0, 1, 84, 1, 0, 0, 68, 1, 0, 0, 80, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 1, + 77, 0, 0, 0,212, 0, 0, 0, 85, 1, 0, 0, 87, 1, 0, 0, 0, 0, 0, 1, 86, 1, 0, 0,213, 0, 0, 0, 78, 0, 0, 0, + 88, 1, 0, 0, 0, 0, 0, 1, 77, 0, 0, 0, 87, 1, 0, 0, 41, 1, 0, 0, 90, 0, 0, 0, 0, 0, 0, 1, 42, 1, 0, 0, + 88, 1, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 1, 75, 0, 0, 0, 65, 1, 0, 0, 93, 1, 0, 0, 45, 1, 0, 0, + 0, 0, 0, 1, 94, 1, 0, 0, 66, 1, 0, 0, 75, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 45, 1, 0, 0, 93, 1, 0, 0, + 91, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 92, 1, 0, 0, 94, 1, 0, 0, 45, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, + 76, 0, 0, 0, 91, 1, 0, 0, 89, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 1, 90, 1, 0, 0, 92, 1, 0, 0, 76, 0, 0, 0, + 46, 1, 0, 0, 0, 0, 0, 1, 46, 1, 0, 0, 89, 1, 0, 0, 69, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 1, 70, 1, 0, 0, + 90, 1, 0, 0, 46, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 1, 67, 1, 0, 0, 69, 1, 0, 0, 89, 1, 0, 0, 83, 1, 0, 0, + 0, 0, 0, 1, 90, 1, 0, 0, 70, 1, 0, 0, 68, 1, 0, 0, 84, 1, 0, 0, 0, 0, 0, 1, 37, 1, 0, 0, 39, 1, 0, 0, + 59, 1, 0, 0, 51, 1, 0, 0, 0, 0, 0, 1, 60, 1, 0, 0, 40, 1, 0, 0, 38, 1, 0, 0, 52, 1, 0, 0, 0, 0, 0, 1, + 74, 0, 0, 0, 57, 1, 0, 0, 65, 1, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 66, 1, 0, 0, 58, 1, 0, 0, 74, 0, 0, 0, + 75, 0, 0, 0, 0, 0, 0, 1, 43, 1, 0, 0, 99, 1, 0, 0, 97, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 1, 98, 1, 0, 0, +100, 1, 0, 0, 43, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 1, 44, 1, 0, 0, 97, 1, 0, 0, 95, 1, 0, 0, 73, 0, 0, 0, + 0, 0, 0, 1, 96, 1, 0, 0, 98, 1, 0, 0, 44, 1, 0, 0, 73, 0, 0, 0, 0, 0, 0, 1, 73, 0, 0, 0, 95, 1, 0, 0, + 57, 1, 0, 0, 74, 0, 0, 0, 0, 0, 0, 1, 58, 1, 0, 0, 96, 1, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 1, + 33, 1, 0, 0, 35, 1, 0, 0,103, 1, 0, 0,105, 1, 0, 0, 0, 0, 0, 1,104, 1, 0, 0, 36, 1, 0, 0, 34, 1, 0, 0, +106, 1, 0, 0, 0, 0, 0, 1,105, 1, 0, 0,103, 1, 0, 0,109, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 1,110, 1, 0, 0, +104, 1, 0, 0,106, 1, 0, 0,108, 1, 0, 0, 0, 0, 0, 1,107, 1, 0, 0,109, 1, 0, 0,111, 1, 0, 0,113, 1, 0, 0, + 0, 0, 0, 1,112, 1, 0, 0,110, 1, 0, 0,108, 1, 0, 0,114, 1, 0, 0, 0, 0, 0, 1,113, 1, 0, 0,111, 1, 0, 0, +117, 1, 0, 0,115, 1, 0, 0, 0, 0, 0, 1,118, 1, 0, 0,112, 1, 0, 0,114, 1, 0, 0,116, 1, 0, 0, 0, 0, 0, 1, + 55, 1, 0, 0,119, 1, 0, 0,115, 1, 0, 0,117, 1, 0, 0, 0, 0, 0, 1,116, 1, 0, 0,120, 1, 0, 0, 56, 1, 0, 0, +118, 1, 0, 0, 0, 0, 0, 1, 57, 1, 0, 0, 95, 1, 0, 0,115, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 1,116, 1, 0, 0, + 96, 1, 0, 0, 58, 1, 0, 0,120, 1, 0, 0, 0, 0, 0, 1, 95, 1, 0, 0, 97, 1, 0, 0,113, 1, 0, 0,115, 1, 0, 0, + 0, 0, 0, 1,114, 1, 0, 0, 98, 1, 0, 0, 96, 1, 0, 0,116, 1, 0, 0, 0, 0, 0, 1, 97, 1, 0, 0, 99, 1, 0, 0, +107, 1, 0, 0,113, 1, 0, 0, 0, 0, 0, 1,108, 1, 0, 0,100, 1, 0, 0, 98, 1, 0, 0,114, 1, 0, 0, 0, 0, 0, 1, + 99, 1, 0, 0,101, 1, 0, 0,105, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 1,106, 1, 0, 0,102, 1, 0, 0,100, 1, 0, 0, +108, 1, 0, 0, 0, 0, 0, 1, 31, 1, 0, 0, 33, 1, 0, 0,105, 1, 0, 0,101, 1, 0, 0, 0, 0, 0, 1,106, 1, 0, 0, + 34, 1, 0, 0, 32, 1, 0, 0,102, 1, 0, 0, 0, 0, 0, 1, 72, 0, 0, 0,101, 1, 0, 0, 99, 1, 0, 0, 43, 1, 0, 0, + 0, 0, 0, 1,100, 1, 0, 0,102, 1, 0, 0, 72, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 1, 25, 1, 0, 0, 27, 1, 0, 0, + 29, 1, 0, 0, 31, 1, 0, 0, 0, 0, 0, 1, 30, 1, 0, 0, 28, 1, 0, 0, 26, 1, 0, 0, 32, 1, 0, 0, 0, 0, 0, 1, + 25, 1, 0, 0, 31, 1, 0, 0,101, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 1,102, 1, 0, 0, 32, 1, 0, 0, 26, 1, 0, 0, + 72, 0, 0, 0, 0, 0, 0, 1, 71, 0, 0, 0, 25, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 72, 0, 0, 0, + 26, 1, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 35, 1, 0, 0, 37, 1, 0, 0, 51, 1, 0, 0,103, 1, 0, 0, + 0, 0, 0, 1, 52, 1, 0, 0, 38, 1, 0, 0, 36, 1, 0, 0,104, 1, 0, 0, 0, 0, 0, 1, 51, 1, 0, 0, 53, 1, 0, 0, +109, 1, 0, 0,103, 1, 0, 0, 0, 0, 0, 1,110, 1, 0, 0, 54, 1, 0, 0, 52, 1, 0, 0,104, 1, 0, 0, 0, 0, 0, 1, + 53, 1, 0, 0,123, 1, 0, 0,111, 1, 0, 0,109, 1, 0, 0, 0, 0, 0, 1,112, 1, 0, 0,124, 1, 0, 0, 54, 1, 0, 0, +110, 1, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,117, 1, 0, 0,111, 1, 0, 0,123, 1, 0, 0, 0, 0, 0, 1,112, 1, 0, 0, +118, 1, 0, 0, 56, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 1, 89, 1, 0, 0, 91, 1, 0, 0,127, 1, 0, 0,125, 1, 0, 0, + 0, 0, 0, 1,128, 1, 0, 0, 92, 1, 0, 0, 90, 1, 0, 0,126, 1, 0, 0, 0, 0, 0, 1, 59, 1, 0, 0,125, 1, 0, 0, +127, 1, 0, 0, 61, 1, 0, 0, 0, 0, 0, 1,128, 1, 0, 0,126, 1, 0, 0, 60, 1, 0, 0, 62, 1, 0, 0, 0, 0, 0, 1, + 39, 1, 0, 0, 41, 1, 0, 0,125, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1,126, 1, 0, 0, 42, 1, 0, 0, 40, 1, 0, 0, + 60, 1, 0, 0, 0, 0, 0, 1, 41, 1, 0, 0, 85, 1, 0, 0, 83, 1, 0, 0,125, 1, 0, 0, 0, 0, 0, 1, 84, 1, 0, 0, + 86, 1, 0, 0, 42, 1, 0, 0,126, 1, 0, 0, 0, 0, 0, 1, 83, 1, 0, 0, 89, 1, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,126, 1, 0, 0, 90, 1, 0, 0, 84, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 41, 1, 0, 0, 87, 1, 0, 0, + 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 86, 1, 0, 0, 88, 1, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 55, 1, 0, 0, 63, 1, 0, 0,121, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0, 64, 1, 0, 0, 56, 1, 0, 0, +120, 1, 0, 0, 0, 0, 0, 1, 57, 1, 0, 0,119, 1, 0, 0,121, 1, 0, 0, 65, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0, +120, 1, 0, 0, 58, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 1, 61, 1, 0, 0,127, 1, 0, 0,121, 1, 0, 0, 63, 1, 0, 0, + 0, 0, 0, 1,122, 1, 0, 0,128, 1, 0, 0, 62, 1, 0, 0, 64, 1, 0, 0, 0, 0, 0, 1, 91, 1, 0, 0, 93, 1, 0, 0, +121, 1, 0, 0,127, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0, 94, 1, 0, 0, 92, 1, 0, 0,128, 1, 0, 0, 0, 0, 0, 1, + 65, 1, 0, 0,121, 1, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 94, 1, 0, 0,122, 1, 0, 0, 66, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,129, 1, 0, 0,155, 1, 0, 0,143, 1, 0, 0, 0, 0, 0, 1,156, 1, 0, 0, +130, 1, 0, 0,142, 1, 0, 0,144, 1, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,143, 1, 0, 0,145, 1, 0, 0,139, 1, 0, 0, + 0, 0, 0, 1,146, 1, 0, 0,144, 1, 0, 0,142, 1, 0, 0,140, 1, 0, 0, 0, 0, 0, 1,139, 1, 0, 0,145, 1, 0, 0, +147, 1, 0, 0,137, 1, 0, 0, 0, 0, 0, 1,148, 1, 0, 0,146, 1, 0, 0,140, 1, 0, 0,138, 1, 0, 0, 0, 0, 0, 1, +137, 1, 0, 0,147, 1, 0, 0,149, 1, 0, 0,135, 1, 0, 0, 0, 0, 0, 1,150, 1, 0, 0,148, 1, 0, 0,138, 1, 0, 0, +136, 1, 0, 0, 0, 0, 0, 1,135, 1, 0, 0,149, 1, 0, 0,151, 1, 0, 0,133, 1, 0, 0, 0, 0, 0, 1,152, 1, 0, 0, +150, 1, 0, 0,136, 1, 0, 0,134, 1, 0, 0, 0, 0, 0, 1,133, 1, 0, 0,151, 1, 0, 0,153, 1, 0, 0,131, 1, 0, 0, + 0, 0, 0, 1,154, 1, 0, 0,152, 1, 0, 0,134, 1, 0, 0,132, 1, 0, 0, 0, 0, 0, 1,151, 1, 0, 0,161, 1, 0, 0, +159, 1, 0, 0,153, 1, 0, 0, 0, 0, 0, 1,160, 1, 0, 0,162, 1, 0, 0,152, 1, 0, 0,154, 1, 0, 0, 0, 0, 0, 1, +149, 1, 0, 0,163, 1, 0, 0,161, 1, 0, 0,151, 1, 0, 0, 0, 0, 0, 1,162, 1, 0, 0,164, 1, 0, 0,150, 1, 0, 0, +152, 1, 0, 0, 0, 0, 0, 1,147, 1, 0, 0,165, 1, 0, 0,163, 1, 0, 0,149, 1, 0, 0, 0, 0, 0, 1,164, 1, 0, 0, +166, 1, 0, 0,148, 1, 0, 0,150, 1, 0, 0, 0, 0, 0, 1,145, 1, 0, 0,167, 1, 0, 0,165, 1, 0, 0,147, 1, 0, 0, + 0, 0, 0, 1,166, 1, 0, 0,168, 1, 0, 0,146, 1, 0, 0,148, 1, 0, 0, 0, 0, 0, 1,143, 1, 0, 0,169, 1, 0, 0, +167, 1, 0, 0,145, 1, 0, 0, 0, 0, 0, 1,168, 1, 0, 0,170, 1, 0, 0,144, 1, 0, 0,146, 1, 0, 0, 0, 0, 0, 1, +143, 1, 0, 0,155, 1, 0, 0,157, 1, 0, 0,169, 1, 0, 0, 0, 0, 0, 1,158, 1, 0, 0,156, 1, 0, 0,144, 1, 0, 0, +170, 1, 0, 0, 0, 0, 0, 1, 59, 1, 0, 0, 61, 1, 0, 0,185, 1, 0, 0,183, 1, 0, 0, 0, 0, 0, 1,186, 1, 0, 0, + 62, 1, 0, 0, 60, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 1, 61, 1, 0, 0,131, 1, 0, 0,153, 1, 0, 0,185, 1, 0, 0, + 0, 0, 0, 1,154, 1, 0, 0,132, 1, 0, 0, 62, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 1, 51, 1, 0, 0, 59, 1, 0, 0, +183, 1, 0, 0, 53, 1, 0, 0, 0, 0, 0, 1,184, 1, 0, 0, 60, 1, 0, 0, 52, 1, 0, 0, 54, 1, 0, 0, 0, 0, 0, 1, +123, 1, 0, 0,171, 1, 0, 0,155, 1, 0, 0,129, 1, 0, 0, 0, 0, 0, 1,156, 1, 0, 0,172, 1, 0, 0,124, 1, 0, 0, +130, 1, 0, 0, 0, 0, 0, 1,153, 1, 0, 0,159, 1, 0, 0,181, 1, 0, 0,185, 1, 0, 0, 0, 0, 0, 1,182, 1, 0, 0, +160, 1, 0, 0,154, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 1,179, 1, 0, 0,187, 1, 0, 0,185, 1, 0, 0,181, 1, 0, 0, + 0, 0, 0, 1,186, 1, 0, 0,188, 1, 0, 0,180, 1, 0, 0,182, 1, 0, 0, 0, 0, 0, 1,175, 1, 0, 0,187, 1, 0, 0, +179, 1, 0, 0,177, 1, 0, 0, 0, 0, 0, 1,180, 1, 0, 0,188, 1, 0, 0,176, 1, 0, 0,178, 1, 0, 0, 0, 0, 0, 1, +173, 1, 0, 0,189, 1, 0, 0,187, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 1,188, 1, 0, 0,190, 1, 0, 0,174, 1, 0, 0, +176, 1, 0, 0, 0, 0, 0, 1,171, 1, 0, 0,189, 1, 0, 0,173, 1, 0, 0,191, 1, 0, 0, 0, 0, 0, 1,174, 1, 0, 0, +190, 1, 0, 0,172, 1, 0, 0,192, 1, 0, 0, 0, 0, 0, 1,155, 1, 0, 0,171, 1, 0, 0,191, 1, 0, 0,157, 1, 0, 0, + 0, 0, 0, 1,192, 1, 0, 0,172, 1, 0, 0,156, 1, 0, 0,158, 1, 0, 0, 0, 0, 0, 1, 53, 1, 0, 0,189, 1, 0, 0, +171, 1, 0, 0,123, 1, 0, 0, 0, 0, 0, 1,172, 1, 0, 0,190, 1, 0, 0, 54, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 1, + 53, 1, 0, 0,183, 1, 0, 0,187, 1, 0, 0,189, 1, 0, 0, 0, 0, 0, 1,188, 1, 0, 0,184, 1, 0, 0, 54, 1, 0, 0, +190, 1, 0, 0, 0, 0, 0, 1,183, 1, 0, 0,185, 1, 0, 0,187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,188, 1, 0, 0, +186, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,157, 1, 0, 0,191, 1, 0, 0,193, 1, 0, 0,217, 1, 0, 0, + 0, 0, 0, 1,194, 1, 0, 0,192, 1, 0, 0,158, 1, 0, 0,218, 1, 0, 0, 0, 0, 0, 1,191, 1, 0, 0,173, 1, 0, 0, +203, 1, 0, 0,193, 1, 0, 0, 0, 0, 0, 1,204, 1, 0, 0,174, 1, 0, 0,192, 1, 0, 0,194, 1, 0, 0, 0, 0, 0, 1, +173, 1, 0, 0,175, 1, 0, 0,201, 1, 0, 0,203, 1, 0, 0, 0, 0, 0, 1,202, 1, 0, 0,176, 1, 0, 0,174, 1, 0, 0, +204, 1, 0, 0, 0, 0, 0, 1,175, 1, 0, 0,177, 1, 0, 0,199, 1, 0, 0,201, 1, 0, 0, 0, 0, 0, 1,200, 1, 0, 0, +178, 1, 0, 0,176, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 1,177, 1, 0, 0,179, 1, 0, 0,197, 1, 0, 0,199, 1, 0, 0, + 0, 0, 0, 1,198, 1, 0, 0,180, 1, 0, 0,178, 1, 0, 0,200, 1, 0, 0, 0, 0, 0, 1,179, 1, 0, 0,181, 1, 0, 0, +195, 1, 0, 0,197, 1, 0, 0, 0, 0, 0, 1,196, 1, 0, 0,182, 1, 0, 0,180, 1, 0, 0,198, 1, 0, 0, 0, 0, 0, 1, +181, 1, 0, 0,159, 1, 0, 0,215, 1, 0, 0,195, 1, 0, 0, 0, 0, 0, 1,216, 1, 0, 0,160, 1, 0, 0,182, 1, 0, 0, +196, 1, 0, 0, 0, 0, 0, 1,169, 1, 0, 0,157, 1, 0, 0,217, 1, 0, 0,205, 1, 0, 0, 0, 0, 0, 1,218, 1, 0, 0, +158, 1, 0, 0,170, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 1,167, 1, 0, 0,169, 1, 0, 0,205, 1, 0, 0,207, 1, 0, 0, + 0, 0, 0, 1,206, 1, 0, 0,170, 1, 0, 0,168, 1, 0, 0,208, 1, 0, 0, 0, 0, 0, 1,165, 1, 0, 0,167, 1, 0, 0, +207, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 1,208, 1, 0, 0,168, 1, 0, 0,166, 1, 0, 0,210, 1, 0, 0, 0, 0, 0, 1, +163, 1, 0, 0,165, 1, 0, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 1,210, 1, 0, 0,166, 1, 0, 0,164, 1, 0, 0, +212, 1, 0, 0, 0, 0, 0, 1,161, 1, 0, 0,163, 1, 0, 0,211, 1, 0, 0,213, 1, 0, 0, 0, 0, 0, 1,212, 1, 0, 0, +164, 1, 0, 0,162, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 1,159, 1, 0, 0,161, 1, 0, 0,213, 1, 0, 0,215, 1, 0, 0, + 0, 0, 0, 1,214, 1, 0, 0,162, 1, 0, 0,160, 1, 0, 0,216, 1, 0, 0, 0, 0, 0, 1,199, 1, 0, 0,197, 1, 0, 0, +221, 1, 0, 0,219, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,198, 1, 0, 0,200, 1, 0, 0,220, 1, 0, 0, 0, 0, 0, 1, +219, 1, 0, 0,221, 1, 0, 0,223, 1, 0, 0,225, 1, 0, 0, 0, 0, 0, 1,224, 1, 0, 0,222, 1, 0, 0,220, 1, 0, 0, +226, 1, 0, 0, 0, 0, 0, 1,225, 1, 0, 0,223, 1, 0, 0,229, 1, 0, 0,227, 1, 0, 0, 0, 0, 0, 1,230, 1, 0, 0, +224, 1, 0, 0,226, 1, 0, 0,228, 1, 0, 0, 0, 0, 0, 1,227, 1, 0, 0,229, 1, 0, 0,231, 1, 0, 0,233, 1, 0, 0, + 0, 0, 0, 1,232, 1, 0, 0,230, 1, 0, 0,228, 1, 0, 0,234, 1, 0, 0, 0, 0, 0, 1,205, 1, 0, 0,217, 1, 0, 0, +227, 1, 0, 0,233, 1, 0, 0, 0, 0, 0, 1,228, 1, 0, 0,218, 1, 0, 0,206, 1, 0, 0,234, 1, 0, 0, 0, 0, 0, 1, +193, 1, 0, 0,225, 1, 0, 0,227, 1, 0, 0,217, 1, 0, 0, 0, 0, 0, 1,228, 1, 0, 0,226, 1, 0, 0,194, 1, 0, 0, +218, 1, 0, 0, 0, 0, 0, 1,193, 1, 0, 0,203, 1, 0, 0,219, 1, 0, 0,225, 1, 0, 0, 0, 0, 0, 1,220, 1, 0, 0, +204, 1, 0, 0,194, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 1,199, 1, 0, 0,219, 1, 0, 0,203, 1, 0, 0,201, 1, 0, 0, + 0, 0, 0, 1,204, 1, 0, 0,220, 1, 0, 0,200, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 1,195, 1, 0, 0,215, 1, 0, 0, +221, 1, 0, 0,197, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,216, 1, 0, 0,196, 1, 0, 0,198, 1, 0, 0, 0, 0, 0, 1, +213, 1, 0, 0,223, 1, 0, 0,221, 1, 0, 0,215, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,224, 1, 0, 0,214, 1, 0, 0, +216, 1, 0, 0, 0, 0, 0, 1,211, 1, 0, 0,229, 1, 0, 0,223, 1, 0, 0,213, 1, 0, 0, 0, 0, 0, 1,224, 1, 0, 0, +230, 1, 0, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 1,209, 1, 0, 0,231, 1, 0, 0,229, 1, 0, 0,211, 1, 0, 0, + 0, 0, 0, 1,230, 1, 0, 0,232, 1, 0, 0,210, 1, 0, 0,212, 1, 0, 0, 0, 0, 0, 1,207, 1, 0, 0,233, 1, 0, 0, +231, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 1,232, 1, 0, 0,234, 1, 0, 0,208, 1, 0, 0,210, 1, 0, 0, 0, 0, 0, 1, +205, 1, 0, 0,233, 1, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,208, 1, 0, 0,234, 1, 0, 0,206, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1,133, 1, 0, 0,131, 1, 0, 0,245, 1, 0, 0,243, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0, +132, 1, 0, 0,134, 1, 0, 0,244, 1, 0, 0, 0, 0, 0, 1,135, 1, 0, 0,133, 1, 0, 0,243, 1, 0, 0,241, 1, 0, 0, + 0, 0, 0, 1,244, 1, 0, 0,134, 1, 0, 0,136, 1, 0, 0,242, 1, 0, 0, 0, 0, 0, 1,137, 1, 0, 0,135, 1, 0, 0, +241, 1, 0, 0,239, 1, 0, 0, 0, 0, 0, 1,242, 1, 0, 0,136, 1, 0, 0,138, 1, 0, 0,240, 1, 0, 0, 0, 0, 0, 1, +139, 1, 0, 0,137, 1, 0, 0,239, 1, 0, 0,237, 1, 0, 0, 0, 0, 0, 1,240, 1, 0, 0,138, 1, 0, 0,140, 1, 0, 0, +238, 1, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,139, 1, 0, 0,237, 1, 0, 0,235, 1, 0, 0, 0, 0, 0, 1,238, 1, 0, 0, +140, 1, 0, 0,142, 1, 0, 0,236, 1, 0, 0, 0, 0, 0, 1,129, 1, 0, 0,141, 1, 0, 0,235, 1, 0, 0,247, 1, 0, 0, + 0, 0, 0, 1,236, 1, 0, 0,142, 1, 0, 0,130, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 1,235, 1, 0, 0,243, 1, 0, 0, +245, 1, 0, 0,247, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0,244, 1, 0, 0,236, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 1, +235, 1, 0, 0,237, 1, 0, 0,241, 1, 0, 0,243, 1, 0, 0, 0, 0, 0, 1,242, 1, 0, 0,238, 1, 0, 0,236, 1, 0, 0, +244, 1, 0, 0, 0, 0, 0, 1,237, 1, 0, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,242, 1, 0, 0, +240, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,123, 1, 0, 0,129, 1, 0, 0,247, 1, 0, 0, + 0, 0, 0, 1,130, 1, 0, 0,124, 1, 0, 0, 56, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,247, 1, 0, 0, +245, 1, 0, 0, 63, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0,248, 1, 0, 0, 56, 1, 0, 0, 64, 1, 0, 0, 0, 0, 0, 1, + 61, 1, 0, 0, 63, 1, 0, 0,245, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0, 64, 1, 0, 0, 62, 1, 0, 0, +132, 1, 0, 0, 0, 0, 0, 1, 68, 65, 84, 65,240, 85, 0, 0,224,234,181, 3, 65, 0, 0, 0,244, 1, 0, 0, 3,112, 28, 63, +185,178,236, 62,224,124, 27, 63,235, 65,232, 62,144, 63, 30, 63,233,195,226, 62,118,152, 32, 63, 37,167,236, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0, 2,232,209, 62,222, 21,226, 62,102,109,215, 62,222,147,231, 62, 28,135,213, 62,172, 4,236, 62, + 56, 54,205, 62, 22,249,235, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,118,152, 32, 63, 37,167,236, 62,144, 63, 30, 63, +233,195,226, 62,108,235, 33, 63,197,235,220, 62,209,151, 37, 63, 89,161,236, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, + 76,144,202, 62,186, 61,220, 62, 2,232,209, 62,222, 21,226, 62, 56, 54,205, 62, 22,249,235, 62,128, 55,195, 62, 70,243,235, 62, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,144, 63, 30, 63,233,195,226, 62, 20, 55, 25, 63, 1, 35,223, 62,200,178, 25, 63, + 77,233,214, 62,108,235, 33, 63,197,235,220, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,146, 1,219, 62, 66, 59,214, 62, +248,248,219, 62,246,116,222, 62, 2,232,209, 62,222, 21,226, 62, 76,144,202, 62,186, 61,220, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0,224,124, 27, 63,235, 65,232, 62, 87,252, 24, 63, 93,111,230, 62, 20, 55, 25, 63, 1, 35,223, 62,144, 63, 30, 63, +233,195,226, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,248,248,219, 62,246,116,222, 62,118,110,220, 62, 78,193,229, 62, +102,109,215, 62,222,147,231, 62, 2,232,209, 62,222, 21,226, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 87,252, 24, 63, + 93,111,230, 62, 22,195, 22, 63,195, 90,232, 62,191, 91, 20, 63,193, 18,227, 62, 20, 55, 25, 63, 1, 35,223, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0,162,175,229, 62,178,100,226, 62,248,224,224, 62,182,172,231, 62,118,110,220, 62, 78,193,229, 62, +248,248,219, 62,246,116,222, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 20, 55, 25, 63, 1, 35,223, 62,191, 91, 20, 63, +193, 18,227, 62,187,165, 17, 63,225, 6,221, 62,200,178, 25, 63, 77,233,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, +170, 27,235, 62,214, 88,220, 62,162,175,229, 62,178,100,226, 62,248,248,219, 62,246,116,222, 62,146, 1,219, 62, 66, 59,214, 62, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,191, 91, 20, 63,193, 18,227, 62,164, 18, 18, 63,173,201,236, 62,157,231, 13, 63, + 89,161,236, 62,187,165, 17, 63,225, 6,221, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,232,151,242, 62, 70,243,235, 62, +216, 65,234, 62,158, 27,236, 62,162,175,229, 62,178,100,226, 62,170, 27,235, 62,214, 88,220, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0, 22,195, 22, 63,195, 90,232, 62, 11,202, 21, 63, 1,189,236, 62,164, 18, 18, 63,173,201,236, 62,191, 91, 20, 63, +193, 18,227, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,216, 65,234, 62,158, 27,236, 62, 12,211,226, 62,246, 14,236, 62, +248,224,224, 62,182,172,231, 62,162,175,229, 62,178,100,226, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 11,202, 21, 63, + 1,189,236, 62,215,202, 22, 63,237,124,241, 62,125,105, 20, 63, 1, 71,246, 62,164, 18, 18, 63,173,201,236, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0, 42,148,229, 62,246,152,245, 62,112,209,224, 62,226,206,240, 62, 12,211,226, 62,246, 14,236, 62, +216, 65,234, 62,158, 27,236, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,164, 18, 18, 63,173,201,236, 62,125,105, 20, 63, + 1, 71,246, 62, 44,173, 17, 63,231,149,252, 62,157,231, 13, 63, 89,161,236, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, +206, 12,235, 62,218,231,251, 62, 42,148,229, 62,246,152,245, 62,216, 65,234, 62,158, 27,236, 62,232,151,242, 62, 70,243,235, 62, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,125,105, 20, 63, 1, 71,246, 62, 37, 59, 25, 63, 49, 73,250, 62,108,178, 25, 63, +218,108, 1, 63, 44,173, 17, 63,231,149,252, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 76, 2,219, 62,213, 21, 1, 63, +216,240,219, 62, 38,155,249, 62, 42,148,229, 62,246,152,245, 62,206, 12,235, 62,218,231,251, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0,215,202, 22, 63,237,124,241, 62,195, 1, 25, 63,169,102,243, 62, 37, 59, 25, 63, 49, 73,250, 62,125,105, 20, 63, + 1, 71,246, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,216,240,219, 62, 38,155,249, 62,156, 99,220, 62,154,184,242, 62, +112,209,224, 62,226,206,240, 62, 42,148,229, 62,246,152,245, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,195, 1, 25, 63, +169,102,243, 62,176,125, 27, 63,149,145,241, 62,167, 74, 30, 63, 3,153,246, 62, 37, 59, 25, 63, 49, 73,250, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0,212,209,209, 62,246,234,245, 62,192,107,215, 62,138,227,240, 62,156, 99,220, 62,154,184,242, 62, +216,240,219, 62, 38,155,249, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 37, 59, 25, 63, 49, 73,250, 62,167, 74, 30, 63, + 3,153,246, 62,204,230, 33, 63,107,232,252, 62,108,178, 25, 63,218,108, 1, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, +132,153,202, 62, 94, 58,252, 62,212,209,209, 62,246,234,245, 62,216,240,219, 62, 38,155,249, 62, 76, 2,219, 62,213, 21, 1, 63, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,167, 74, 30, 63, 3,153,246, 62,118,152, 32, 63, 37,167,236, 62,209,151, 37, 63, + 89,161,236, 62,204,230, 33, 63,107,232,252, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,128, 55,195, 62, 70,243,235, 62, + 56, 54,205, 62, 22,249,235, 62,212,209,209, 62,246,234,245, 62,132,153,202, 62, 94, 58,252, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0,176,125, 27, 63,149,145,241, 62, 3,112, 28, 63,185,178,236, 62,118,152, 32, 63, 37,167,236, 62,167, 74, 30, 63, + 3,153,246, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 56, 54,205, 62, 22,249,235, 62, 28,135,213, 62,172, 4,236, 62, +192,107,215, 62,138,227,240, 62,212,209,209, 62,246,234,245, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 3,112, 28, 63, +185,178,236, 62,176,125, 27, 63,149,145,241, 62, 42, 39, 27, 63, 57, 1,241, 62,140,249, 27, 63,115,186,236, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0,206, 24,216, 62, 46, 83,240, 62,192,107,215, 62,138,227,240, 62, 28,135,213, 62,172, 4,236, 62, + 8,116,214, 62,102, 12,236, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,176,125, 27, 63,149,145,241, 62,195, 1, 25, 63, +169,102,243, 62, 6,248, 24, 63,185, 91,242, 62, 42, 39, 27, 63, 57, 1,241, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, + 22,119,220, 62,174,173,241, 62,156, 99,220, 62,154,184,242, 62,192,107,215, 62,138,227,240, 62,206, 24,216, 62, 46, 83,240, 62, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,195, 1, 25, 63,169,102,243, 62,215,202, 22, 63,237,124,241, 62,157, 38, 23, 63, +225,173,240, 62, 6,248, 24, 63,185, 91,242, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,234, 25,224, 62,214,255,239, 62, +112,209,224, 62,226,206,240, 62,156, 99,220, 62,154,184,242, 62, 22,119,220, 62,174,173,241, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0,215,202, 22, 63,237,124,241, 62, 11,202, 21, 63, 1,189,236, 62, 13, 89, 22, 63,247,196,236, 62,157, 38, 23, 63, +225,173,240, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 8,181,225, 62,234, 22,236, 62, 12,211,226, 62,246, 14,236, 62, +112,209,224, 62,226,206,240, 62,234, 25,224, 62,214,255,239, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 11,202, 21, 63, + 1,189,236, 62, 22,195, 22, 63,195, 90,232, 62, 88, 33, 23, 63, 69, 47,233, 62, 13, 89, 22, 63,247,196,236, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0,112, 36,224, 62, 58,129,232, 62,248,224,224, 62,182,172,231, 62, 12,211,226, 62,246, 14,236, 62, + 8,181,225, 62,234, 22,236, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 22,195, 22, 63,195, 90,232, 62, 87,252, 24, 63, + 93,111,230, 62,100,243, 24, 63, 5,123,231, 62, 88, 33, 23, 63, 69, 47,233, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, + 90,128,220, 62,248,204,230, 62,118,110,220, 62, 78,193,229, 62,248,224,224, 62,182,172,231, 62,112, 36,224, 62, 58,129,232, 62, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0, 87,252, 24, 63, 93,111,230, 62,224,124, 27, 63,235, 65,232, 62,169, 37, 27, 63, + 35,211,232, 62,100,243, 24, 63, 5,123,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,206, 27,216, 62, 22, 37,232, 62, +102,109,215, 62,222,147,231, 62,118,110,220, 62, 78,193,229, 62, 90,128,220, 62,248,204,230, 62, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,240, 0,224,124, 27, 63,235, 65,232, 62, 3,112, 28, 63,185,178,236, 62,140,249, 27, 63,115,186,236, 62,169, 37, 27, 63, + 35,211,232, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 8,116,214, 62,102, 12,236, 62, 28,135,213, 62,172, 4,236, 62, +102,109,215, 62,222,147,231, 62,206, 27,216, 62, 22, 37,232, 62, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,240, 0,138,242, 24, 63, + 21,194,236, 62,169, 37, 27, 63, 35,211,232, 62,140,249, 27, 63,115,186,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,112, 0, 8,116,214, 62,102, 12,236, 62,206, 27,216, 62, 22, 37,232, 62, 16,130,220, 62, 6, 20,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,100,243, 24, 63, 5,123,231, 62,169, 37, 27, 63, + 35,211,232, 62,138,242, 24, 63, 21,194,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, + 16,130,220, 62, 6, 20,236, 62,206, 27,216, 62, 22, 37,232, 62, 90,128,220, 62,248,204,230, 62, 0, 0,128, 63, 0, 0,128, 63, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 88, 33, 23, 63, 69, 47,233, 62,100,243, 24, 63, + 5,123,231, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, 90,128,220, 62,248,204,230, 62, +112, 36,224, 62, 58,129,232, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 13, 89, 22, 63,247,196,236, 62, 88, 33, 23, 63, 69, 47,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0,112, 36,224, 62, 58,129,232, 62, 8,181,225, 62,234, 22,236, 62, + 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, + 21,194,236, 62,157, 38, 23, 63,225,173,240, 62, 13, 89, 22, 63,247,196,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,112, 0, 8,181,225, 62,234, 22,236, 62,234, 25,224, 62,214,255,239, 62, 16,130,220, 62, 6, 20,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 6,248, 24, 63, +185, 91,242, 62,157, 38, 23, 63,225,173,240, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, +234, 25,224, 62,214,255,239, 62, 22,119,220, 62,174,173,241, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 42, 39, 27, 63, 57, 1,241, 62, 6,248, 24, 63, +185, 91,242, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, 22,119,220, 62,174,173,241, 62, +206, 24,216, 62, 46, 83,240, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, + 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62,140,249, 27, 63,115,186,236, 62, 42, 39, 27, 63, 57, 1,241, 62, 0, 0,128, 63, + 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0,206, 24,216, 62, 46, 83,240, 62, 8,116,214, 62,102, 12,236, 62, + 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 61, 0, 5, 0, 0, 0,112, 0,174,254, 16, 63, + 94, 45, 34, 62, 79,190, 13, 63,160,193, 46, 62,220,199, 3, 63, 89,219, 24, 62,219,199, 3, 63, 18, 28,229, 61, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 16, 0,220,199, 3, 63, 89,219, 24, 62, 14,150,243, 62,204, 79, 47, 62,140,248,236, 62,182,202, 34, 62, +219,199, 3, 63, 18, 28,229, 61, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,184,152, 21, 63,182, 47, 53, 62,250,104, 16, 63, + 16,113, 55, 62, 79,190, 13, 63,160,193, 46, 62,174,254, 16, 63, 94, 45, 34, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0, + 14,150,243, 62,204, 79, 47, 62,200, 68,238, 62, 76, 62, 56, 62,183,207,227, 62,250, 75, 54, 62,140,248,236, 62,182,202, 34, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0,137, 57, 22, 63, 81, 93, 61, 62,206,186, 16, 63, 85,129, 72, 62,250,104, 16, 63, + 16,113, 55, 62,184,152, 21, 63,182, 47, 53, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,200, 68,238, 62, 76, 62, 56, 62, +192,187,237, 62,194,118, 73, 62,122,152,226, 62,190,166, 62, 62,183,207,227, 62,250, 75, 54, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,250,249, 22, 63,160,251, 88, 62,222, 32, 16, 63, 34,106, 93, 62,206,186, 16, 63, 85,129, 72, 62,137, 57, 22, 63, + 81, 93, 61, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,187,237, 62,194,118, 73, 62, 21, 19,239, 62,121,110, 94, 62, + 90, 83,225, 62, 21,153, 90, 62,122,152,226, 62,190,166, 62, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20, 81, 25, 63, + 17, 56,132, 62,206,243, 15, 63,182,207,136, 62,222, 32, 16, 63, 34,106, 93, 62,250,249, 22, 63,160,251, 88, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 21, 19,239, 62,121,110, 94, 62, 92,193,239, 62,113, 61,137, 62, 54, 42,221, 62,209, 25,133, 62, + 90, 83,225, 62, 21,153, 90, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62, 91, 94, 37, 63, +107,120,187, 62, 66, 21, 30, 63,178,139,200, 62,158,237, 12, 63, 38,241,187, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +139,125,211, 62,170,171,200, 62,156, 28,197, 62,166,130,187, 62,115, 21,216, 62, 14,177,166, 62, 15,175,245, 62,188, 14,188, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 91, 94, 37, 63,107,120,187, 62, 87, 57, 43, 63,222, 58,206, 62, 24,163, 39, 63, +174, 95,216, 62, 66, 21, 30, 63,178,139,200, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 98,194,191, 62, 42, 94,216, 62, +130,207,184, 62, 42, 27,206, 62,156, 28,197, 62,166,130,187, 62,139,125,211, 62,170,171,200, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 87, 57, 43, 63,222, 58,206, 62, 38,229, 50, 63,169, 32,226, 62,177, 79, 43, 63,202,194,231, 62, 24,163, 39, 63, +174, 95,216, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 60,201,183, 62, 82,218,231, 62,196, 39,168, 62,206, 11,226, 62, +130,207,184, 62, 42, 27,206, 62, 98,194,191, 62, 42, 94,216, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 38,229, 50, 63, +169, 32,226, 62, 62,134, 48, 63, 37,107,249, 62,154,190, 43, 63,192, 0,249, 62,177, 79, 43, 63,202,194,231, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,138,190,182, 62, 35, 49,249, 62,172,229,172, 62,116,127,249, 62,196, 39,168, 62,206, 11,226, 62, + 60,201,183, 62, 82,218,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 62,134, 48, 63, 37,107,249, 62,238, 88, 46, 63, +146,223, 2, 63,123,207, 40, 63,218,175,254, 62,154,190, 43, 63,192, 0,249, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 2,184,188, 62,140, 0,255, 62,173, 87,177, 62,102, 9, 3, 63,172,229,172, 62,116,127,249, 62,138,190,182, 62, 35, 49,249, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,238, 88, 46, 63,146,223, 2, 63,220,158, 34, 63,175, 23, 10, 63,126, 77, 30, 63, +156, 88, 5, 63,123,207, 40, 63,218,175,254, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 89, 65,210, 62, 56,158, 5, 63, +124,109,201, 62, 72,121, 10, 63,173, 87,177, 62,102, 9, 3, 63, 2,184,188, 62,140, 0,255, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,220,158, 34, 63,175, 23, 10, 63, 28,105, 26, 63,242,194, 11, 63,244,120, 25, 63, 78,242, 7, 63,126, 77, 30, 63, +156, 88, 5, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 0, 39,220, 62,252, 58, 8, 63,220, 73,218, 62,169, 31, 12, 63, +124,109,201, 62, 72,121, 10, 63, 89, 65,210, 62, 56,158, 5, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 28,105, 26, 63, +242,194, 11, 63,173,244, 22, 63,236,215, 11, 63,202, 47, 22, 63,156, 60, 8, 63,244,120, 25, 63, 78,242, 7, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 11,221,226, 62, 90,125, 8, 63,220, 89,225, 62, 77, 42, 12, 63,220, 73,218, 62,169, 31, 12, 63, + 0, 39,220, 62,252, 58, 8, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,173,244, 22, 63,236,215, 11, 63, 67,169, 11, 63, + 18,197, 11, 63,106,252, 12, 63,180,173, 3, 63,202, 47, 22, 63,156, 60, 8, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 35,114,245, 62,233,196, 3, 63, 55, 72,248, 62, 91,232, 11, 63,220, 89,225, 62, 77, 42, 12, 63, 11,221,226, 62, 90,125, 8, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 67,169, 11, 63, 18,197, 11, 63,148,232, 3, 63,164, 17, 11, 63,162,220, 3, 63, + 45, 88, 0, 63,106,252, 12, 63,180,173, 3, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,162,220, 3, 63, 45, 88, 0, 63, +148,232, 3, 63,164, 17, 11, 63, 55, 72,248, 62, 91,232, 11, 63, 35,114,245, 62,233,196, 3, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62,240, 81, 22, 63,114, 70, 1, 63,202, 47, 22, 63,156, 60, 8, 63,106,252, 12, 63, +180,173, 3, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,221,226, 62, 90,125, 8, 63,106,128,226, 62,198,111, 1, 63, +209,213,236, 62, 4,250,255, 62, 35,114,245, 62,233,196, 3, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,240, 81, 22, 63, +114, 70, 1, 63,151,182, 25, 63,130, 9, 1, 63,244,120, 25, 63, 78,242, 7, 63,202, 47, 22, 63,156, 60, 8, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 0, 39,220, 62,252, 58, 8, 63,213,150,219, 62, 50, 55, 1, 63,106,128,226, 62,198,111, 1, 63, + 11,221,226, 62, 90,125, 8, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 96, 49, 30, 63,121,229,254, 62,126, 77, 30, 63, +156, 88, 5, 63,244,120, 25, 63, 78,242, 7, 63,151,182, 25, 63,130, 9, 1, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 0, 39,220, 62,252, 58, 8, 63, 89, 65,210, 62, 56,158, 5, 63,176,116,210, 62,227, 62,255, 62,213,150,219, 62, 50, 55, 1, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 25,113, 37, 63, 35,157,247, 62,123,207, 40, 63,218,175,254, 62,126, 77, 30, 63, +156, 88, 5, 63, 96, 49, 30, 63,121,229,254, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 89, 65,210, 62, 56,158, 5, 63, + 2,184,188, 62,140, 0,255, 62,189,165,195, 62,139,232,247, 62,176,116,210, 62,227, 62,255, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 92, 62, 39, 63,121, 75,240, 62,154,190, 43, 63,192, 0,249, 62,123,207, 40, 63,218,175,254, 62, 25,113, 37, 63, + 35,157,247, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 2,184,188, 62,140, 0,255, 62,138,190,182, 62, 35, 49,249, 62, +222, 10,192, 62,163,128,240, 62,189,165,195, 62,139,232,247, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,140,149, 38, 63, + 38, 95,229, 62,177, 79, 43, 63,202,194,231, 62,154,190, 43, 63,192, 0,249, 62, 92, 62, 39, 63,121, 75,240, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,138,190,182, 62, 35, 49,249, 62, 60,201,183, 62, 82,218,231, 62,168,140,193, 62, 94,129,229, 62, +222, 10,192, 62,163,128,240, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14,120, 33, 63,166,238,214, 62, 24,163, 39, 63, +174, 95,216, 62,177, 79, 43, 63,202,194,231, 62,140,149, 38, 63, 38, 95,229, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 60,201,183, 62, 82,218,231, 62, 98,194,191, 62, 42, 94,216, 62,168, 75,204, 62, 62, 7,215, 62,168,140,193, 62, 94,129,229, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,165,178, 27, 63,128, 17,208, 62, 66, 21, 30, 63,178,139,200, 62, 24,163, 39, 63, +174, 95,216, 62, 14,120, 33, 63,166,238,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 98,194,191, 62, 42, 94,216, 62, +139,125,211, 62,170,171,200, 62, 6, 24,216, 62,128, 57,208, 62,168, 75,204, 62, 62, 7,215, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 15, 97, 17, 63,220, 34,214, 62,158,237, 12, 63, 38,241,187, 62, 66, 21, 30, 63,178,139,200, 62,165,178, 27, 63, +128, 17,208, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,139,125,211, 62,170,171,200, 62, 15,175,245, 62,188, 14,188, 62, +217,200,236, 62,134, 49,214, 62, 6, 24,216, 62,128, 57,208, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 15, 97, 17, 63, +220, 34,214, 62,149,244, 14, 63, 4, 42,221, 62,147,230, 3, 63, 78, 47,208, 62,158,237, 12, 63, 38,241,187, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,147,230, 3, 63, 78, 47,208, 62,141,144,241, 62,244, 52,221, 62,217,200,236, 62,134, 49,214, 62, + 15,175,245, 62,188, 14,188, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62,106,252, 12, 63, +180,173, 3, 63,162,220, 3, 63, 45, 88, 0, 63, 71, 25, 13, 63,116,163,243, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +162,220, 3, 63, 45, 88, 0, 63, 35,114,245, 62,233,196, 3, 63,209,213,236, 62, 4,250,255, 62, 0, 45,245, 62,206,185,243, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71, 25, 13, 63,116,163,243, 62,162,220, 3, 63, 45, 88, 0, 63,215,220, 3, 63, +148,189,231, 62, 64, 2, 13, 63, 52,215,230, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,215,220, 3, 63,148,189,231, 62, +162,220, 3, 63, 45, 88, 0, 63, 0, 45,245, 62,206,185,243, 62,219,100,245, 62,184,230,230, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,147,230, 3, 63, 78, 47,208, 62,149,244, 14, 63, 4, 42,221, 62, 64, 2, 13, 63, 52,215,230, 62,215,220, 3, 63, +148,189,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,219,100,245, 62,184,230,230, 62,141,144,241, 62,244, 52,221, 62, +147,230, 3, 63, 78, 47,208, 62,215,220, 3, 63,148,189,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,250, 61, 7, 63, +148, 31, 54, 62,193,202, 3, 63,214,174, 49, 62,220,199, 3, 63, 89,219, 24, 62, 79,190, 13, 63,160,193, 46, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,220,199, 3, 63, 89,219, 24, 62,193,202, 3, 63,214,174, 49, 62,175, 87, 0, 63,251, 90, 54, 62, + 14,150,243, 62,204, 79, 47, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68,214, 9, 63,246,237, 66, 62,250, 61, 7, 63, +148, 31, 54, 62, 79,190, 13, 63,160,193, 46, 62,250,104, 16, 63, 16,113, 55, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 14,150,243, 62,204, 79, 47, 62,175, 87, 0, 63,251, 90, 54, 62,104,137,251, 62,179, 92, 67, 62,200, 68,238, 62, 76, 62, 56, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,237,221, 8, 63,218, 90, 91, 62, 68,214, 9, 63,246,237, 66, 62,250,104, 16, 63, + 16,113, 55, 62,206,186, 16, 63, 85,129, 72, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,200, 68,238, 62, 76, 62, 56, 62, +104,137,251, 62,179, 92, 67, 62, 39,153,253, 62, 27,195, 91, 62,192,187,237, 62,194,118, 73, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,206,243, 15, 63,182,207,136, 62, 77, 32, 8, 63, 10, 39,139, 62, 22,117, 9, 63,146,203, 97, 62,222, 32, 16, 63, + 34,106, 93, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,110,252, 62, 79, 68, 98, 62,219, 89,255, 62,116, 79,139, 62, + 92,193,239, 62,113, 61,137, 62, 21, 19,239, 62,121,110, 94, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,237,221, 8, 63, +218, 90, 91, 62,206,186, 16, 63, 85,129, 72, 62,222, 32, 16, 63, 34,106, 93, 62, 22,117, 9, 63,146,203, 97, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 21, 19,239, 62,121,110, 94, 62,192,187,237, 62,194,118, 73, 62, 39,153,253, 62, 27,195, 91, 62, +192,110,252, 62, 79, 68, 98, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,119,125, 9, 63, 7,112,158, 62, 70,233, 3, 63, + 88, 27,154, 62,235,229, 3, 63, 97,108,139, 62, 77, 32, 8, 63, 10, 39,139, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +235,229, 3, 63, 97,108,139, 62, 70,233, 3, 63, 88, 27,154, 62,165,179,252, 62,163,140,158, 62,219, 89,255, 62,116, 79,139, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 22,117, 9, 63,146,203, 97, 62, 77, 32, 8, 63, 10, 39,139, 62,235,229, 3, 63, + 97,108,139, 62,246,215, 3, 63,143, 56,101, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,235,229, 3, 63, 97,108,139, 62, +219, 89,255, 62,116, 79,139, 62,192,110,252, 62, 79, 68, 98, 62,246,215, 3, 63,143, 56,101, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,147,210, 3, 63,221, 95, 86, 62,237,221, 8, 63,218, 90, 91, 62, 22,117, 9, 63,146,203, 97, 62,246,215, 3, 63, +143, 56,101, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,110,252, 62, 79, 68, 98, 62, 39,153,253, 62, 27,195, 91, 62, +147,210, 3, 63,221, 95, 86, 62,246,215, 3, 63,143, 56,101, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 5, 54, 12, 63, +188,183,167, 62,250, 61, 9, 63,252,214,168, 62,152,143, 8, 63, 45,107,163, 62,119,125, 9, 63, 7,112,158, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,100,136,254, 62, 38,123,163, 62,110, 39,253, 62,103,224,168, 62, 98, 68,247, 62,146,206,167, 62, +165,179,252, 62,163,140,158, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,135,196, 10, 63, 52,208,178, 62, 25,233, 8, 63, +116,110,175, 62,250, 61, 9, 63,252,214,168, 62, 5, 54, 12, 63,188,183,167, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +110, 39,253, 62,103,224,168, 62,102,195,253, 62,184,102,175, 62, 98, 14,250, 62,149,202,178, 62, 98, 68,247, 62,146,206,167, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 69, 17, 4, 63,105,176,182, 62, 69,138, 6, 63, 80,180,177, 62, 25,233, 8, 63, +116,110,175, 62,135,196, 10, 63, 52,208,178, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,102,195,253, 62,184,102,175, 62, + 14, 49, 1, 63, 62,150,177, 62, 69, 17, 4, 63,105,176,182, 62, 98, 14,250, 62,149,202,178, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,209,124, 3, 63, 70, 0,177, 62, 11,232, 3, 63,140, 4,174, 62, 69,138, 6, 63, 80,180,177, 62, 69, 17, 4, 63, +105,176,182, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14, 49, 1, 63, 62,150,177, 62, 11,232, 3, 63,140, 4,174, 62, +209,124, 3, 63, 70, 0,177, 62, 69, 17, 4, 63,105,176,182, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 70,233, 3, 63, + 88, 27,154, 62,119,125, 9, 63, 7,112,158, 62,152,143, 8, 63, 45,107,163, 62,212,232, 3, 63, 58,152,158, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,100,136,254, 62, 38,123,163, 62,165,179,252, 62,163,140,158, 62, 70,233, 3, 63, 88, 27,154, 62, +212,232, 3, 63, 58,152,158, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,212,232, 3, 63, 58,152,158, 62,152,143, 8, 63, + 45,107,163, 62,121, 91, 7, 63,134, 51,166, 62,205,231, 3, 63, 58,149,162, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 44,116, 0, 63,255, 56,166, 62,100,136,254, 62, 38,123,163, 62,212,232, 3, 63, 58,152,158, 62,205,231, 3, 63, 58,149,162, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,232, 3, 63,140, 4,174, 62,214,233, 3, 63,198,154,170, 62,233,110, 6, 63, + 94,152,174, 62, 69,138, 6, 63, 80,180,177, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,228, 82, 1, 63, 95,140,174, 62, +214,233, 3, 63,198,154,170, 62, 11,232, 3, 63,140, 4,174, 62, 14, 49, 1, 63, 62,150,177, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 69,138, 6, 63, 80,180,177, 62,233,110, 6, 63, 94,152,174, 62, 59,236, 7, 63, 19,123,173, 62, 25,233, 8, 63, +116,110,175, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,185,255, 62, 92,116,173, 62,228, 82, 1, 63, 95,140,174, 62, + 14, 49, 1, 63, 62,150,177, 62,102,195,253, 62,184,102,175, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 25,233, 8, 63, +116,110,175, 62, 59,236, 7, 63, 19,123,173, 62, 85,249, 7, 63, 92, 52,169, 62,250, 61, 9, 63,252,214,168, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,160,169,255, 62, 6, 57,169, 62,217,185,255, 62, 92,116,173, 62,102,195,253, 62,184,102,175, 62, +110, 39,253, 62,103,224,168, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,250, 61, 9, 63,252,214,168, 62, 85,249, 7, 63, + 92, 52,169, 62,121, 91, 7, 63,134, 51,166, 62,152,143, 8, 63, 45,107,163, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 44,116, 0, 63,255, 56,166, 62,160,169,255, 62, 6, 57,169, 62,110, 39,253, 62,103,224,168, 62,100,136,254, 62, 38,123,163, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,214,233, 3, 63,198,154,170, 62, 85,249, 7, 63, 92, 52,169, 62, 59,236, 7, 63, + 19,123,173, 62,233,110, 6, 63, 94,152,174, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,185,255, 62, 92,116,173, 62, +160,169,255, 62, 6, 57,169, 62,214,233, 3, 63,198,154,170, 62,228, 82, 1, 63, 95,140,174, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,214,233, 3, 63,198,154,170, 62,205,231, 3, 63, 58,149,162, 62,121, 91, 7, 63,134, 51,166, 62, 85,249, 7, 63, + 92, 52,169, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 44,116, 0, 63,255, 56,166, 62,205,231, 3, 63, 58,149,162, 62, +214,233, 3, 63,198,154,170, 62,160,169,255, 62, 6, 57,169, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 69, 17, 4, 63, +105,176,182, 62,135,196, 10, 63, 52,208,178, 62,158,237, 12, 63, 38,241,187, 62,147,230, 3, 63, 78, 47,208, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 15,175,245, 62,188, 14,188, 62, 98, 14,250, 62,149,202,178, 62, 69, 17, 4, 63,105,176,182, 62, +147,230, 3, 63, 78, 47,208, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,135,196, 10, 63, 52,208,178, 62, 5, 54, 12, 63, +188,183,167, 62,112, 0, 16, 63,254,246,164, 62,158,237, 12, 63, 38,241,187, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +207,187,239, 62, 19, 42,165, 62, 98, 68,247, 62,146,206,167, 62, 98, 14,250, 62,149,202,178, 62, 15,175,245, 62,188, 14,188, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 5, 54, 12, 63,188,183,167, 62,119,125, 9, 63, 7,112,158, 62, 44,250, 15, 63, +109, 0,154, 62,112, 0, 16, 63,254,246,164, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56,205,239, 62, 8, 71,154, 62, +165,179,252, 62,163,140,158, 62, 98, 68,247, 62,146,206,167, 62,207,187,239, 62, 19, 42,165, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,119,125, 9, 63, 7,112,158, 62, 77, 32, 8, 63, 10, 39,139, 62,206,243, 15, 63,182,207,136, 62, 44,250, 15, 63, +109, 0,154, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92,193,239, 62,113, 61,137, 62,219, 89,255, 62,116, 79,139, 62, +165,179,252, 62,163,140,158, 62, 56,205,239, 62, 8, 71,154, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20, 81, 25, 63, + 17, 56,132, 62,208, 46, 27, 63,149, 35,148, 62, 44,250, 15, 63,109, 0,154, 62,206,243, 15, 63,182,207,136, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 56,205,239, 62, 8, 71,154, 62,238,166,217, 62,229,221,148, 62, 54, 42,221, 62,209, 25,133, 62, + 92,193,239, 62,113, 61,137, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,208, 46, 27, 63,149, 35,148, 62, 36,177, 27, 63, +158,151,156, 62,112, 0, 16, 63,254,246,164, 62, 44,250, 15, 63,109, 0,154, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +207,187,239, 62, 19, 42,165, 62, 0,160,216, 62,127, 44,157, 62,238,166,217, 62,229,221,148, 62, 56,205,239, 62, 8, 71,154, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,158,237, 12, 63, 38,241,187, 62,112, 0, 16, 63, +254,246,164, 62, 36,177, 27, 63,158,151,156, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,207,187,239, 62, 19, 42,165, 62, + 15,175,245, 62,188, 14,188, 62,115, 21,216, 62, 14,177,166, 62, 0,160,216, 62,127, 44,157, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,237,221, 8, 63,218, 90, 91, 62,147,210, 3, 63,221, 95, 86, 62,129,211, 3, 63,248,168, 83, 62,170, 33, 8, 63, +254,149, 86, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,129,211, 3, 63,248,168, 83, 62,147,210, 3, 63,221, 95, 86, 62, + 39,153,253, 62, 27,195, 91, 62, 8, 14,255, 62, 58,232, 86, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68,214, 9, 63, +246,237, 66, 62,237,221, 8, 63,218, 90, 91, 62,170, 33, 8, 63,254,149, 86, 62, 20,180, 8, 63, 94, 29, 69, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 8, 14,255, 62, 58,232, 86, 62, 39,153,253, 62, 27,195, 91, 62,104,137,251, 62,179, 92, 67, 62, + 19,210,253, 62, 55,114, 69, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,250, 61, 7, 63,148, 31, 54, 62, 68,214, 9, 63, +246,237, 66, 62, 20,180, 8, 63, 94, 29, 69, 62,168, 82, 6, 63, 80, 43, 57, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 19,210,253, 62, 55,114, 69, 62,104,137,251, 62,179, 92, 67, 62,175, 87, 0, 63,251, 90, 54, 62, 48, 68, 1, 63,166, 84, 57, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,193,202, 3, 63,214,174, 49, 62,250, 61, 7, 63,148, 31, 54, 62,168, 82, 6, 63, + 80, 43, 57, 62,205,202, 3, 63, 8, 22, 54, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 48, 68, 1, 63,166, 84, 57, 62, +175, 87, 0, 63,251, 90, 54, 62,193,202, 3, 63,214,174, 49, 62,205,202, 3, 63, 8, 22, 54, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,205,202, 3, 63, 8, 22, 54, 62,168, 82, 6, 63, 80, 43, 57, 62,246, 24, 5, 63, 26,150, 66, 62,213,205, 3, 63, +220,232, 64, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 29,131, 2, 63, 22,172, 66, 62, 48, 68, 1, 63,166, 84, 57, 62, +205,202, 3, 63, 8, 22, 54, 62,213,205, 3, 63,220,232, 64, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,168, 82, 6, 63, + 80, 43, 57, 62, 20,180, 8, 63, 94, 29, 69, 62, 39, 83, 6, 63,191,114, 70, 62,246, 24, 5, 63, 26,150, 66, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,185, 75, 1, 63,222,160, 70, 62, 19,210,253, 62, 55,114, 69, 62, 48, 68, 1, 63,166, 84, 57, 62, + 29,131, 2, 63, 22,172, 66, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20,180, 8, 63, 94, 29, 69, 62,170, 33, 8, 63, +254,149, 86, 62, 4,111, 6, 63, 40,172, 76, 62, 39, 83, 6, 63,191,114, 70, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +157, 51, 1, 63,158,218, 76, 62, 8, 14,255, 62, 58,232, 86, 62, 19,210,253, 62, 55,114, 69, 62,185, 75, 1, 63,222,160, 70, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,170, 33, 8, 63,254,149, 86, 62,129,211, 3, 63,248,168, 83, 62,234,208, 3, 63, +146, 43, 75, 62, 4,111, 6, 63, 40,172, 76, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,234,208, 3, 63,146, 43, 75, 62, +129,211, 3, 63,248,168, 83, 62, 8, 14,255, 62, 58,232, 86, 62,157, 51, 1, 63,158,218, 76, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,234,208, 3, 63,146, 43, 75, 62,213,205, 3, 63,220,232, 64, 62,246, 24, 5, 63, 26,150, 66, 62, 4,111, 6, 63, + 40,172, 76, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 29,131, 2, 63, 22,172, 66, 62,213,205, 3, 63,220,232, 64, 62, +234,208, 3, 63,146, 43, 75, 62,157, 51, 1, 63,158,218, 76, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 4,111, 6, 63, + 40,172, 76, 62,246, 24, 5, 63, 26,150, 66, 62, 39, 83, 6, 63,191,114, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,185, 75, 1, 63,222,160, 70, 62, 29,131, 2, 63, 22,172, 66, 62,157, 51, 1, 63,158,218, 76, 62, + 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 2, 13, 63, 52,215,230, 62,149,244, 14, 63, + 4, 42,221, 62, 4,216, 16, 63,160, 24,224, 62,120,200, 15, 63, 84,255,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +119,193,237, 62,190, 38,224, 62,141,144,241, 62,244, 52,221, 62,219,100,245, 62,184,230,230, 62, 21,211,239, 62,185, 18,232, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71, 25, 13, 63,116,163,243, 62, 64, 2, 13, 63, 52,215,230, 62,120,200, 15, 63, + 84,255,231, 62,184,171, 16, 63, 40,133,241, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21,211,239, 62,185, 18,232, 62, +219,100,245, 62,184,230,230, 62, 0, 45,245, 62,206,185,243, 62,218,252,237, 62, 62,160,241, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62, 71, 25, 13, 63,116,163,243, 62,184,171, 16, 63, 40,133,241, 62, 55, 44, 19, 63, + 86, 21,250, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,218,252,237, 62, 62,160,241, 62, 0, 45,245, 62,206,185,243, 62, +209,213,236, 62, 4,250,255, 62,153,228,232, 62,154, 67,250, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,149,244, 14, 63, + 4, 42,221, 62, 15, 97, 17, 63,220, 34,214, 62,217, 53, 19, 63, 16,211,218, 62, 4,216, 16, 63,160, 24,224, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 8, 14,233, 62, 66,226,218, 62,217,200,236, 62,134, 49,214, 62,141,144,241, 62,244, 52,221, 62, +119,193,237, 62,190, 38,224, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 15, 97, 17, 63,220, 34,214, 62,165,178, 27, 63, +128, 17,208, 62,205,198, 26, 63,124,184,214, 62,217, 53, 19, 63, 16,211,218, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +216,214,217, 62,218,224,214, 62, 6, 24,216, 62,128, 57,208, 62,217,200,236, 62,134, 49,214, 62, 8, 14,233, 62, 66,226,218, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,165,178, 27, 63,128, 17,208, 62, 14,120, 33, 63,166,238,214, 62,156,136, 31, 63, +194,138,219, 62,205,198, 26, 63,124,184,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,254, 30,208, 62,204,177,219, 62, +168, 75,204, 62, 62, 7,215, 62, 6, 24,216, 62,128, 57,208, 62,216,214,217, 62,218,224,214, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 14,120, 33, 63,166,238,214, 62,140,149, 38, 63, 38, 95,229, 62, 79, 9, 36, 63, 94,224,229, 62,156,136, 31, 63, +194,138,219, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,148,192,198, 62,182, 11,230, 62,168,140,193, 62, 94,129,229, 62, +168, 75,204, 62, 62, 7,215, 62,254, 30,208, 62,204,177,219, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,140,149, 38, 63, + 38, 95,229, 62, 92, 62, 39, 63,121, 75,240, 62, 14, 49, 36, 63,253, 88,239, 62, 79, 9, 36, 63, 94,224,229, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 97, 71,198, 62,192,149,239, 62,222, 10,192, 62,163,128,240, 62,168,140,193, 62, 94,129,229, 62, +148,192,198, 62,182, 11,230, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92, 62, 39, 63,121, 75,240, 62, 25,113, 37, 63, + 35,157,247, 62,243, 33, 35, 63, 80,143,245, 62, 14, 49, 36, 63,253, 88,239, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 87, 99,200, 62,172,217,245, 62,189,165,195, 62,139,232,247, 62,222, 10,192, 62,163,128,240, 62, 97, 71,198, 62,192,149,239, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 25,113, 37, 63, 35,157,247, 62, 96, 49, 30, 63,121,229,254, 62,223, 49, 29, 63, +199,140,250, 62,243, 33, 35, 63, 80,143,245, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,147,124,212, 62,146,215,250, 62, +176,116,210, 62,227, 62,255, 62,189,165,195, 62,139,232,247, 62, 87, 99,200, 62,172,217,245, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 96, 49, 30, 63,121,229,254, 62,151,182, 25, 63,130, 9, 1, 63, 50,181, 25, 63,118,111,253, 62,223, 49, 29, 63, +199,140,250, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 52,151,219, 62, 68,186,253, 62,213,150,219, 62, 50, 55, 1, 63, +176,116,210, 62,227, 62,255, 62,147,124,212, 62,146,215,250, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,151,182, 25, 63, +130, 9, 1, 63,240, 81, 22, 63,114, 70, 1, 63,241,188, 22, 63, 28,149,253, 62, 50,181, 25, 63,118,111,253, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,212,163,225, 62, 91,215,253, 62,106,128,226, 62,198,111, 1, 63,213,150,219, 62, 50, 55, 1, 63, + 52,151,219, 62, 68,186,253, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,240, 81, 22, 63,114, 70, 1, 63,103, 59, 17, 63, +120,195,255, 62, 55, 44, 19, 63, 86, 21,250, 62,241,188, 22, 63, 28,149,253, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +153,228,232, 62,154, 67,250, 62,209,213,236, 62, 4,250,255, 62,106,128,226, 62,198,111, 1, 63,212,163,225, 62, 91,215,253, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,241,188, 22, 63, 28,149,253, 62, 55, 44, 19, 63, 86, 21,250, 62, 9,165, 20, 63, +248, 99,247, 62, 20, 0, 23, 63, 6, 57,251, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,232,232,229, 62, 74,142,247, 62, +153,228,232, 62,154, 67,250, 62,212,163,225, 62, 91,215,253, 62,145, 26,225, 62,114,116,251, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 50,181, 25, 63,118,111,253, 62,241,188, 22, 63, 28,149,253, 62, 20, 0, 23, 63, 6, 57,251, 62,130,144, 25, 63, +128, 7,251, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,145, 26,225, 62,114,116,251, 62,212,163,225, 62, 91,215,253, 62, + 52,151,219, 62, 68,186,253, 62,177,225,219, 62, 67, 75,251, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,223, 49, 29, 63, +199,140,250, 62, 50,181, 25, 63,118,111,253, 62,130,144, 25, 63,128, 7,251, 62, 80,195, 28, 63, 55,166,248, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,177,225,219, 62, 67, 75,251, 62, 52,151,219, 62, 68,186,253, 62,147,124,212, 62,146,215,250, 62, +233, 95,213, 62, 20,237,248, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,243, 33, 35, 63, 80,143,245, 62,223, 49, 29, 63, +199,140,250, 62, 80,195, 28, 63, 55,166,248, 62, 22,164, 33, 63,102, 75,243, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +233, 95,213, 62, 20,237,248, 62,147,124,212, 62,146,215,250, 62, 87, 99,200, 62,172,217,245, 62, 65,114,203, 62,159,143,243, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14, 49, 36, 63,253, 88,239, 62,243, 33, 35, 63, 80,143,245, 62, 22,164, 33, 63, +102, 75,243, 62, 30,160, 34, 63,169, 47,238, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 65,114,203, 62,159,143,243, 62, + 87, 99,200, 62,172,217,245, 62, 97, 71,198, 62,192,149,239, 62,188,128,201, 62,126,110,238, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 79, 9, 36, 63, 94,224,229, 62, 14, 49, 36, 63,253, 88,239, 62, 30,160, 34, 63,169, 47,238, 62,131,144, 34, 63, +253, 87,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,188,128,201, 62,126,110,238, 62, 97, 71,198, 62,192,149,239, 62, +148,192,198, 62,182, 11,230, 62,141,190,201, 62,124,140,231, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,156,136, 31, 63, +194,138,219, 62, 79, 9, 36, 63, 94,224,229, 62,131,144, 34, 63,253, 87,231, 62, 21,208, 30, 63,174,182,221, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,141,190,201, 62,124,140,231, 62,148,192,198, 62,182, 11,230, 62,254, 30,208, 62,204,177,219, 62, +168,133,209, 62, 51,221,221, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,205,198, 26, 63,124,184,214, 62,156,136, 31, 63, +194,138,219, 62, 21,208, 30, 63,174,182,221, 62,128,218, 26, 63, 68,206,217, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +168,133,209, 62, 51,221,221, 62,254, 30,208, 62,204,177,219, 62,216,214,217, 62,218,224,214, 62, 11,157,217, 62, 64,243,217, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217, 53, 19, 63, 16,211,218, 62,205,198, 26, 63,124,184,214, 62,128,218, 26, 63, + 68,206,217, 62,103, 53, 20, 63,236, 84,221, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,157,217, 62, 64,243,217, 62, +216,214,217, 62,218,224,214, 62, 8, 14,233, 62, 66,226,218, 62, 68, 5,231, 62,234,101,221, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 4,216, 16, 63,160, 24,224, 62,217, 53, 19, 63, 16,211,218, 62,103, 53, 20, 63,236, 84,221, 62, 81, 87, 18, 63, + 33,175,226, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68, 5,231, 62,234,101,221, 62, 8, 14,233, 62, 66,226,218, 62, +119,193,237, 62,190, 38,224, 62,180,187,234, 62,249,190,226, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 55, 44, 19, 63, + 86, 21,250, 62,184,171, 16, 63, 40,133,241, 62, 98, 68, 18, 63,150,197,240, 62, 9,165, 20, 63,248, 99,247, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 35,197,234, 62,215,226,240, 62,218,252,237, 62, 62,160,241, 62,153,228,232, 62,154, 67,250, 62, +232,232,229, 62, 74,142,247, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,184,171, 16, 63, 40,133,241, 62,120,200, 15, 63, + 84,255,231, 62,161, 4, 18, 63,138,184,232, 62, 98, 68, 18, 63,150,197,240, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +154, 85,235, 62, 92,206,232, 62, 21,211,239, 62,185, 18,232, 62,218,252,237, 62, 62,160,241, 62, 35,197,234, 62,215,226,240, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120,200, 15, 63, 84,255,231, 62, 4,216, 16, 63,160, 24,224, 62, 81, 87, 18, 63, + 33,175,226, 62,161, 4, 18, 63,138,184,232, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,180,187,234, 62,249,190,226, 62, +119,193,237, 62,190, 38,224, 62, 21,211,239, 62,185, 18,232, 62,154, 85,235, 62, 92,206,232, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,148,232, 3, 63,164, 17, 11, 63, 67,169, 11, 63, 18,197, 11, 63,216,120, 13, 63,160, 81, 23, 63,147, 15, 4, 63, +227,248, 23, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 27,245, 62,100,166, 23, 63, 55, 72,248, 62, 91,232, 11, 63, +148,232, 3, 63,164, 17, 11, 63,147, 15, 4, 63,227,248, 23, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 67,169, 11, 63, + 18,197, 11, 63,173,244, 22, 63,236,215, 11, 63, 94,233, 23, 63,186, 60, 16, 63,216,120, 13, 63,160, 81, 23, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,109,130,223, 62,118,165, 16, 63,220, 89,225, 62, 77, 42, 12, 63, 55, 72,248, 62, 91,232, 11, 63, + 64, 27,245, 62,100,166, 23, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,173,244, 22, 63,236,215, 11, 63, 28,105, 26, 63, +242,194, 11, 63,220, 56, 28, 63, 66,250, 14, 63, 94,233, 23, 63,186, 60, 16, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +157,161,214, 62,219,110, 15, 63,220, 73,218, 62,169, 31, 12, 63,220, 89,225, 62, 77, 42, 12, 63,109,130,223, 62,118,165, 16, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 28,105, 26, 63,242,194, 11, 63,220,158, 34, 63,175, 23, 10, 63,109, 44, 39, 63, +107,221, 19, 63,220, 56, 28, 63, 66,250, 14, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,156, 26,192, 62, 31,139, 20, 63, +124,109,201, 62, 72,121, 10, 63,220, 73,218, 62,169, 31, 12, 63,157,161,214, 62,219,110, 15, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,220,158, 34, 63,175, 23, 10, 63,238, 88, 46, 63,146,223, 2, 63,242, 80, 56, 63, 44,244, 6, 63,109, 44, 39, 63, +107,221, 19, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 61,208,156, 62,204, 16, 7, 63,173, 87,177, 62,102, 9, 3, 63, +124,109,201, 62, 72,121, 10, 63,156, 26,192, 62, 31,139, 20, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0,238, 88, 46, 63, +146,223, 2, 63, 62,134, 48, 63, 37,107,249, 62,195,173, 54, 63,239,106,252, 62,242, 80, 56, 63, 44,244, 6, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,128, 0,202, 36,160, 62, 94, 51,252, 62,172,229,172, 62,116,127,249, 62,173, 87,177, 62,102, 9, 3, 63, + 61,208,156, 62,204, 16, 7, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0, 62,134, 48, 63, 37,107,249, 62, 38,229, 50, 63, +169, 32,226, 62,154, 88, 53, 63,240,146,221, 62,195,173, 54, 63,239,106,252, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, +128,172,162, 62, 17,169,221, 62,196, 39,168, 62,206, 11,226, 62,172,229,172, 62,116,127,249, 62,202, 36,160, 62, 94, 51,252, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, 38,229, 50, 63,169, 32,226, 62, 87, 57, 43, 63,222, 58,206, 62,240,117, 49, 63, +164,138,198, 62,154, 88, 53, 63,240,146,221, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0,147,137,172, 62,148, 19,198, 62, +130,207,184, 62, 42, 27,206, 62,196, 39,168, 62,206, 11,226, 62,128,172,162, 62, 17,169,221, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0,128, 0, 87, 57, 43, 63,222, 58,206, 62, 91, 94, 37, 63,107,120,187, 62,156,160, 41, 63, 56,175,182, 62,240,117, 49, 63, +164,138,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,202,212,188, 62,245,163,182, 62,156, 28,197, 62,166,130,187, 62, +130,207,184, 62, 42, 27,206, 62,147,137,172, 62,148, 19,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,165,252, 48, 63, +133, 33, 85, 62,112, 54, 48, 63, 20, 19, 96, 62,172, 36, 46, 63,208, 7,129, 62,240, 17, 42, 63,129, 84, 97, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 76, 71,181, 62,204,200,131, 62,117,121,175, 62,183,185,106, 62,217, 24,172, 62, 21,237, 92, 62, +138, 81,187, 62, 59, 40,103, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,204, 89, 48, 63,134,194, 4, 62,165,252, 48, 63, +133, 33, 85, 62,240, 17, 42, 63,129, 84, 97, 62,160,125, 37, 63, 50,211, 46, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, +138, 81,187, 62, 59, 40,103, 62,217, 24,172, 62, 21,237, 92, 62, 94,197,172, 62,109,200, 4, 62, 25,121,195, 62, 46,253, 48, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 11, 44, 20, 63, 20, 26,163, 61,204, 89, 48, 63,134,194, 4, 62,160,125, 37, 63, + 50,211, 46, 62, 40, 92, 24, 63,214,184, 21, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0, 25,121,195, 62, 46,253, 48, 62, + 94,197,172, 62,109,200, 4, 62,140,122,230, 62,202,248,161, 61,216, 13,222, 62,222,116, 22, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 32, 0,174,254, 16, 63, 94, 45, 34, 62,219,199, 3, 63, 18, 28,229, 61, 11, 44, 20, 63, 20, 26,163, 61, 40, 92, 24, 63, +214,184, 21, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0,140,122,230, 62,202,248,161, 61,219,199, 3, 63, 18, 28,229, 61, +140,248,236, 62,182,202, 34, 62,216, 13,222, 62,222,116, 22, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,184,152, 21, 63, +182, 47, 53, 62,174,254, 16, 63, 94, 45, 34, 62, 40, 92, 24, 63,214,184, 21, 62,209, 52, 25, 63, 76,140, 51, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 32, 0,216, 13,222, 62,222,116, 22, 62,140,248,236, 62,182,202, 34, 62,183,207,227, 62,250, 75, 54, 62, +229,137,220, 62,185,228, 52, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0,137, 57, 22, 63, 81, 93, 61, 62,184,152, 21, 63, +182, 47, 53, 62,209, 52, 25, 63, 76,140, 51, 62,193,166, 30, 63,114,168, 73, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +229,137,220, 62,185,228, 52, 62,183,207,227, 62,250, 75, 54, 62,122,152,226, 62,190,166, 62, 62, 54,198,209, 62, 18,240, 75, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,250,249, 22, 63,160,251, 88, 62,137, 57, 22, 63, 81, 93, 61, 62,193,166, 30, 63, +114,168, 73, 62, 75, 0, 36, 63,229, 47,116, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 54,198,209, 62, 18,240, 75, 62, +122,152,226, 62,190,166, 62, 62, 90, 83,225, 62, 21,153, 90, 62,211,231,199, 62,216,237,119, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,193,166, 30, 63,114,168, 73, 62,160,125, 37, 63, 50,211, 46, 62,240, 17, 42, 63,129, 84, 97, 62, 75, 0, 36, 63, +229, 47,116, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,138, 81,187, 62, 59, 40,103, 62, 25,121,195, 62, 46,253, 48, 62, + 54,198,209, 62, 18,240, 75, 62,211,231,199, 62,216,237,119, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,193,166, 30, 63, +114,168, 73, 62,209, 52, 25, 63, 76,140, 51, 62, 40, 92, 24, 63,214,184, 21, 62,160,125, 37, 63, 50,211, 46, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,216, 13,222, 62,222,116, 22, 62,229,137,220, 62,185,228, 52, 62, 54,198,209, 62, 18,240, 75, 62, + 25,121,195, 62, 46,253, 48, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 37,163, 36, 63,191,168,140, 62, 75, 0, 36, 63, +229, 47,116, 62,240, 17, 42, 63,129, 84, 97, 62,172, 36, 46, 63,208, 7,129, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +138, 81,187, 62, 59, 40,103, 62,211,231,199, 62,216,237,119, 62, 6, 64,199, 62,105, 6,142, 62, 76, 71,181, 62,204,200,131, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20, 81, 25, 63, 17, 56,132, 62,250,249, 22, 63,160,251, 88, 62, 75, 0, 36, 63, +229, 47,116, 62, 37,163, 36, 63,191,168,140, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,211,231,199, 62,216,237,119, 62, + 90, 83,225, 62, 21,153, 90, 62, 54, 42,221, 62,209, 25,133, 62, 6, 64,199, 62,105, 6,142, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,208, 46, 27, 63,149, 35,148, 62, 91, 60, 36, 63,221,222,150, 62,222,170, 33, 63, 74,126,158, 62, 36,177, 27, 63, +158,151,156, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 72,234,204, 62, 56, 63,159, 62,150,245,199, 62, 85, 15,152, 62, +238,166,217, 62,229,221,148, 62, 0,160,216, 62,127, 44,157, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20, 81, 25, 63, + 17, 56,132, 62, 37,163, 36, 63,191,168,140, 62, 91, 60, 36, 63,221,222,150, 62,208, 46, 27, 63,149, 35,148, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,150,245,199, 62, 85, 15,152, 62, 6, 64,199, 62,105, 6,142, 62, 54, 42,221, 62,209, 25,133, 62, +238,166,217, 62,229,221,148, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62, 36,177, 27, 63, +158,151,156, 62,222,170, 33, 63, 74,126,158, 62,102,212, 31, 63,144,192,164, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 72,234,204, 62, 56, 63,159, 62, 0,160,216, 62,127, 44,157, 62,115, 21,216, 62, 14,177,166, 62, 17,119,208, 62,201, 65,165, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,102,212, 31, 63,144,192,164, 62,156,160, 41, 63, + 56,175,182, 62, 91, 94, 37, 63,107,120,187, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,202,212,188, 62,245,163,182, 62, + 17,119,208, 62,201, 65,165, 62,115, 21,216, 62, 14,177,166, 62,156, 28,197, 62,166,130,187, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,104,119,194, 62,164,189, 82, 63, 23, 73,212, 62,152,239, 90, 63,100,192,205, 62, 46,238, 97, 63, 38, 56,185, 62, + 72,154, 91, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,228, 94,141, 62, 86,234,100, 63, 84, 66,150, 62,114,154, 94, 63, +230, 86,173, 62, 79, 66, 98, 63, 20,143,162, 62, 44,173,106, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 72,122, 87, 63, +216, 8, 62, 62,202,106, 84, 63,137,185,113, 62,226, 77, 72, 63,204, 21,121, 62,158,225, 71, 63,113, 34, 68, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 16, 0,132, 32,137, 62,181, 65,121, 62,168,179,107, 62,139,127,103, 62,210,147,114, 62,212,116, 61, 62, +248,125,142, 62, 30, 4, 80, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,158,225, 71, 63,113, 34, 68, 62,226, 77, 72, 63, +204, 21,121, 62, 8, 7, 51, 63, 5,186,130, 62, 3,166, 49, 63,232, 57, 96, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 18,197,172, 62, 41,112,133, 62,132, 32,137, 62,181, 65,121, 62,248,125,142, 62, 30, 4, 80, 62,121,228,174, 62, 52, 79,109, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 3,166, 49, 63,232, 57, 96, 62, 8, 7, 51, 63, 5,186,130, 62,172, 36, 46, 63, +208, 7,129, 62,112, 54, 48, 63, 20, 19, 96, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 76, 71,181, 62,204,200,131, 62, + 18,197,172, 62, 41,112,133, 62,121,228,174, 62, 52, 79,109, 62,117,121,175, 62,183,185,106, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 37,163, 36, 63,191,168,140, 62,172, 36, 46, 63,208, 7,129, 62, 8, 7, 51, 63, 5,186,130, 62, 91, 60, 36, 63, +221,222,150, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 18,197,172, 62, 41,112,133, 62, 76, 71,181, 62,204,200,131, 62, + 6, 64,199, 62,105, 6,142, 62,150,245,199, 62, 85, 15,152, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,154, 88, 53, 63, +240,146,221, 62,240,117, 49, 63,164,138,198, 62,224, 19, 69, 63, 24, 68,190, 62, 53, 64, 74, 63,171, 31,224, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 16, 0,250, 78,134, 62,148,213,186, 62,147,137,172, 62,148, 19,198, 62,128,172,162, 62, 17,169,221, 62, +184,112,114, 62,248,169,220, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 54, 74,214, 62, 20, 55, 70, 63, 48,130,233, 62, +188, 69, 83, 63, 23, 73,212, 62,152,239, 90, 63,104,119,194, 62,164,189, 82, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, + 84, 66,150, 62,114,154, 94, 63, 66, 1,153, 62,245,149, 81, 63, 38, 56,185, 62,102,110, 83, 63,230, 86,173, 62, 79, 66, 98, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,106,242, 66, 63,202, 94, 25, 63,190,100, 70, 63,222,234, 15, 63, 90,189, 77, 63, +233, 88, 17, 63, 8,206, 74, 63, 88,118, 27, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 22, 32, 96, 62, 66, 60, 16, 63, + 86, 87,125, 62,174, 5, 15, 63, 78,187,132, 62,180, 44, 24, 63, 26, 79,108, 62,124, 1, 26, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 8,206, 74, 63, 88,118, 27, 63, 90,189, 77, 63,233, 88, 17, 63, 72,139, 85, 63,103, 51, 19, 63,220,119, 85, 63, + 77, 71, 31, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64,199, 64, 62, 26, 40, 18, 63, 22, 32, 96, 62, 66, 60, 16, 63, + 26, 79,108, 62,124, 1, 26, 63, 44,191, 67, 62, 90, 89, 30, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,220,119, 85, 63, + 77, 71, 31, 63, 72,139, 85, 63,103, 51, 19, 63,228,213,100, 63, 72,156, 20, 63, 18, 82, 96, 63,128,133, 34, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,128, 0,226, 50, 1, 62,184, 68, 20, 63, 64,199, 64, 62, 26, 40, 18, 63, 44,191, 67, 62, 90, 89, 30, 63, +194,204, 24, 62, 32,186, 34, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0,242, 80, 56, 63, 44,244, 6, 63,195,173, 54, 63, +239,106,252, 62,115,205, 60, 63,213,150,253, 62,166, 14, 64, 63, 81, 80, 4, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, +190, 85,147, 62, 91,176,252, 62,202, 36,160, 62, 94, 51,252, 62, 61,208,156, 62,204, 16, 7, 63,160,121,140, 62, 74,197, 3, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,166, 14, 64, 63, 81, 80, 4, 63,115,205, 60, 63,213,150,253, 62, 68,103, 73, 63, +233,248, 0, 63,248, 12, 75, 63, 64,206, 8, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,144, 59,115, 62,102,143,255, 62, +190, 85,147, 62, 91,176,252, 62,160,121,140, 62, 74,197, 3, 63, 78,135,107, 62, 88,182, 7, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,248, 12, 75, 63, 64,206, 8, 63, 68,103, 73, 63,233,248, 0, 63,239,151, 82, 63, 86,223, 3, 63,181,227, 82, 63, +189,102, 11, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 82, 17, 77, 62,162, 98, 2, 63,144, 59,115, 62,102,143,255, 62, + 78,135,107, 62, 88,182, 7, 63,202, 98, 75, 62,108, 43, 10, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,181,227, 82, 63, +189,102, 11, 63,239,151, 82, 63, 86,223, 3, 63, 92,224, 91, 63,239,144, 5, 63,161,148, 90, 63,146, 95, 13, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,178, 40, 38, 62, 14,230, 3, 63, 82, 17, 77, 62,162, 98, 2, 63,202, 98, 75, 62,108, 43, 10, 63, + 10,162, 43, 62, 8, 50, 12, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 89,103, 63,105, 76, 2, 63,170,179,103, 63, +142,105, 12, 63,161,148, 90, 63,146, 95, 13, 63, 92,224, 91, 63,239,144, 5, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 10,162, 43, 62, 8, 50, 12, 63,168, 41,231, 61,158, 83, 11, 63,116,128,234, 61,200, 39, 0, 63,178, 40, 38, 62, 14,230, 3, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,213,100, 63, 72,156, 20, 63, 72,139, 85, 63,103, 51, 19, 63,161,148, 90, 63, +146, 95, 13, 63,170,179,103, 63,142,105, 12, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 10,162, 43, 62, 8, 50, 12, 63, + 64,199, 64, 62, 26, 40, 18, 63,226, 50, 1, 62,184, 68, 20, 63,168, 41,231, 61,158, 83, 11, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 72,139, 85, 63,103, 51, 19, 63, 90,189, 77, 63,233, 88, 17, 63,181,227, 82, 63,189,102, 11, 63,161,148, 90, 63, +146, 95, 13, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,202, 98, 75, 62,108, 43, 10, 63, 22, 32, 96, 62, 66, 60, 16, 63, + 64,199, 64, 62, 26, 40, 18, 63, 10,162, 43, 62, 8, 50, 12, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 90,189, 77, 63, +233, 88, 17, 63,190,100, 70, 63,222,234, 15, 63,248, 12, 75, 63, 64,206, 8, 63,181,227, 82, 63,189,102, 11, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 78,135,107, 62, 88,182, 7, 63, 86, 87,125, 62,174, 5, 15, 63, 22, 32, 96, 62, 66, 60, 16, 63, +202, 98, 75, 62,108, 43, 10, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,190,100, 70, 63,222,234, 15, 63, 82,235, 60, 63, + 27, 12, 12, 63,166, 14, 64, 63, 81, 80, 4, 63,248, 12, 75, 63, 64,206, 8, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +160,121,140, 62, 74,197, 3, 63, 78,230,145, 62,148,225, 11, 63, 86, 87,125, 62,174, 5, 15, 63, 78,135,107, 62, 88,182, 7, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 31,118, 57, 63,230, 79, 12, 63,242, 80, 56, 63, 44,244, 6, 63,166, 14, 64, 63, + 81, 80, 4, 63, 82,235, 60, 63, 27, 12, 12, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0,160,121,140, 62, 74,197, 3, 63, + 61,208,156, 62,204, 16, 7, 63, 0,199,152, 62, 13,133, 12, 63, 78,230,145, 62,148,225, 11, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 32, 0,195,240, 57, 63, 10,138, 23, 63, 82,235, 60, 63, 27, 12, 12, 63,190,100, 70, 63,222,234, 15, 63,106,242, 66, 63, +202, 94, 25, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 86, 87,125, 62,174, 5, 15, 63, 78,230,145, 62,148,225, 11, 63, +247, 7,150, 62, 96, 12, 23, 63, 78,187,132, 62,180, 44, 24, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,216,120, 13, 63, +160, 81, 23, 63, 94,233, 23, 63,186, 60, 16, 63,220, 56, 28, 63, 66,250, 14, 63,109, 44, 39, 63,107,221, 19, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,157,161,214, 62,219,110, 15, 63,109,130,223, 62,118,165, 16, 63, 64, 27,245, 62,100,166, 23, 63, +156, 26,192, 62, 31,139, 20, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,176, 29, 56, 63, 88,206, 20, 63, 31,118, 57, 63, +230, 79, 12, 63, 82,235, 60, 63, 27, 12, 12, 63,195,240, 57, 63, 10,138, 23, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 78,230,145, 62,148,225, 11, 63, 0,199,152, 62, 13,133, 12, 63,239,211,153, 62,220,159, 20, 63,247, 7,150, 62, 96, 12, 23, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 48,148, 54, 63,220,206, 22, 63,176, 29, 56, 63, 88,206, 20, 63,195,240, 57, 63, + 10,138, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,247, 7,150, 62, 96, 12, 23, 63, +239,211,153, 62,220,159, 20, 63,108,106,156, 62,146,154, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,195,173, 54, 63,239,106,252, 62,154, 88, 53, 63,240,146,221, 62, 53, 64, 74, 63,171, 31,224, 62,115,205, 60, 63, +213,150,253, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0,184,112,114, 62,248,169,220, 62,128,172,162, 62, 17,169,221, 62, +202, 36,160, 62, 94, 51,252, 62,190, 85,147, 62, 91,176,252, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0, 53, 64, 74, 63, +171, 31,224, 62,217,106, 81, 63, 14,214,232, 62, 68,103, 73, 63,233,248, 0, 63,115,205, 60, 63,213,150,253, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,144, 59,115, 62,102,143,255, 62, 88, 93, 84, 62, 50,105,228, 62,184,112,114, 62,248,169,220, 62, +190, 85,147, 62, 91,176,252, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,106, 81, 63, 14,214,232, 62,106,154, 93, 63, +226, 26,233, 62,239,151, 82, 63, 86,223, 3, 63, 68,103, 73, 63,233,248, 0, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 82, 17, 77, 62,162, 98, 2, 63,128, 1, 33, 62, 70,210,226, 62, 88, 93, 84, 62, 50,105,228, 62,144, 59,115, 62,102,143,255, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 89,103, 63,105, 76, 2, 63, 92,224, 91, 63,239,144, 5, 63,239,151, 82, 63, + 86,223, 3, 63,106,154, 93, 63,226, 26,233, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 82, 17, 77, 62,162, 98, 2, 63, +178, 40, 38, 62, 14,230, 3, 63,116,128,234, 61,200, 39, 0, 63,128, 1, 33, 62, 70,210,226, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 8, 7, 51, 63, 5,186,130, 62,226, 77, 72, 63,204, 21,121, 62,154,254, 73, 63,178, 82,140, 62, 90,188, 56, 63, +103,207,159, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,249,249,130, 62,246,175,137, 62,132, 32,137, 62,181, 65,121, 62, + 18,197,172, 62, 41,112,133, 62,192, 5,161, 62,228, 40,159, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,224, 19, 69, 63, + 24, 68,190, 62, 90,188, 56, 63,103,207,159, 62,154,254, 73, 63,178, 82,140, 62,216,217, 77, 63, 7,228,157, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,128, 0,249,249,130, 62,246,175,137, 62,192, 5,161, 62,228, 40,159, 62,250, 78,134, 62,148,213,186, 62, +154,118,111, 62,120,108,152, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0,240,117, 49, 63,164,138,198, 62,156,160, 41, 63, + 56,175,182, 62, 90,188, 56, 63,103,207,159, 62,224, 19, 69, 63, 24, 68,190, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +192, 5,161, 62,228, 40,159, 62,202,212,188, 62,245,163,182, 62,147,137,172, 62,148, 19,198, 62,250, 78,134, 62,148,213,186, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,156,160, 41, 63, 56,175,182, 62,222,170, 33, 63, 74,126,158, 62, 91, 60, 36, 63, +221,222,150, 62, 90,188, 56, 63,103,207,159, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,150,245,199, 62, 85, 15,152, 62, + 72,234,204, 62, 56, 63,159, 62,202,212,188, 62,245,163,182, 62,192, 5,161, 62,228, 40,159, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 91, 60, 36, 63,221,222,150, 62, 8, 7, 51, 63, 5,186,130, 62, 90,188, 56, 63,103,207,159, 62, 0, 0,128, 63, + 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,192, 5,161, 62,228, 40,159, 62, 18,197,172, 62, 41,112,133, 62, +150,245,199, 62, 85, 15,152, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,156,160, 41, 63, + 56,175,182, 62,102,212, 31, 63,144,192,164, 62,222,170, 33, 63, 74,126,158, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 72,234,204, 62, 56, 63,159, 62, 17,119,208, 62,201, 65,165, 62,202,212,188, 62,245,163,182, 62, + 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,226, 44,245, 62,129,140, 96, 63, 42,135,227, 62, + 58, 2,101, 63,136,168,219, 62, 30,236, 95, 63,135, 30,238, 62,200, 41, 90, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, +216,240,137, 62, 90,226, 93, 63,110,103,122, 62,236,255, 92, 63, 74, 84,120, 62,104, 32, 83, 63, 32,193,138, 62, 16, 3, 83, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, 48,130,233, 62,188, 69, 83, 63,135, 30,238, 62,200, 41, 90, 63,136,168,219, 62, + 30,236, 95, 63, 23, 73,212, 62,152,239, 90, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,216,240,137, 62, 90,226, 93, 63, + 32,193,138, 62, 16, 3, 83, 63, 66, 1,153, 62,245,149, 81, 63, 84, 66,150, 62,114,154, 94, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0,240, 0,216,217, 77, 63, 7,228,157, 62,154,254, 73, 63,178, 82,140, 62, 33, 61, 90, 63,195,207,124, 62,160,225, 90, 63, +110,121,137, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, 98,207, 81, 62,109, 1,110, 62,249,249,130, 62,246,175,137, 62, +154,118,111, 62,120,108,152, 62,166,125, 74, 62,252, 30,130, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,226, 77, 72, 63, +204, 21,121, 62,202,106, 84, 63,137,185,113, 62, 33, 61, 90, 63,195,207,124, 62,154,254, 73, 63,178, 82,140, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 98,207, 81, 62,109, 1,110, 62,168,179,107, 62,139,127,103, 62,132, 32,137, 62,181, 65,121, 62, +249,249,130, 62,246,175,137, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 23, 73,212, 62,152,239, 90, 63,136,168,219, 62, + 30,236, 95, 63,100,192,205, 62, 46,238, 97, 63, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, +228, 94,141, 62, 86,234,100, 63,216,240,137, 62, 90,226, 93, 63, 84, 66,150, 62,114,154, 94, 63, 0, 0,128, 63, 0, 0,128, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, 31,178,109, 63,224, 68,228, 62, 46,178,102, 63,100,184,232, 62,100,251,101, 63, +238,198,227, 62, 94,173,107, 63,168,130,225, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68,209,249, 61, 70,134,219, 62, +120,216,242, 61,124, 40,225, 62, 28, 27,177, 61, 42,240,219, 62, 76,131,196, 61,196, 97,216, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 31,178,109, 63,224, 68,228, 62, 94,173,107, 63,168,130,225, 62,144,102,114, 63,198, 23,220, 62, 41, 76,116, 63, +139,153,222, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56,163,120, 61, 58,252,208, 62, 76,131,196, 61,196, 97,216, 62, + 28, 27,177, 61, 42,240,219, 62,128,183, 73, 61, 84,108,213, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 41, 76,116, 63, +139,153,222, 62,144,102,114, 63,198, 23,220, 62, 84, 87,117, 63,221,255,211, 62,183,115,119, 63,140, 49,215, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,144, 29, 55, 61,207,183,194, 62, 56,163,120, 61, 58,252,208, 62,128,183, 73, 61, 84,108,213, 62, +224,111,231, 60,100,142,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,183,115,119, 63,140, 49,215, 62, 84, 87,117, 63, +221,255,211, 62,150, 20,118, 63, 60,110,196, 62, 49, 12,122, 63,246, 8,197, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 96,197,103, 61, 15,206,170, 62,144, 29, 55, 61,207,183,194, 62,224,111,231, 60,100,142,198, 62,240, 54, 16, 61,120, 4,167, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 49, 12,122, 63,246, 8,197, 62,150, 20,118, 63, 60,110,196, 62, 17,155,108, 63, +130,201,178, 62, 84,190,110, 63,223, 77,172, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,148,252,246, 61,164,116,160, 62, + 96,197,103, 61, 15,206,170, 62,240, 54, 16, 61,120, 4,167, 62, 8, 66,246, 61, 28,161,152, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 84,190,110, 63,223, 77,172, 62, 17,155,108, 63,130,201,178, 62, 21,180, 92, 63,202, 95,173, 62,151, 5, 90, 63, +138, 61,167, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,144,216, 54, 62, 35, 76,163, 62,148,252,246, 61,164,116,160, 62, + 8, 66,246, 61, 28,161,152, 62,194,251, 66, 62,163,102,158, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 17,155,108, 63, +130,201,178, 62,198,132,109, 63,182,157,186, 62, 68, 32, 97, 63,192, 12,178, 62, 21,180, 92, 63,202, 95,173, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 48,185, 36, 62, 16, 7,166, 62, 40, 91,221, 61, 4,194,167, 62,148,252,246, 61,164,116,160, 62, +144,216, 54, 62, 35, 76,163, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,150, 20,118, 63, 60,110,196, 62, 84,225,115, 63, +208, 85,198, 62,198,132,109, 63,182,157,186, 62, 17,155,108, 63,130,201,178, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 40, 91,221, 61, 4,194,167, 62,244,221,134, 61,121,164,175, 62, 96,197,103, 61, 15,206,170, 62,148,252,246, 61,164,116,160, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84, 87,117, 63,221,255,211, 62,222, 48,116, 63,169, 8,209, 62, 84,225,115, 63, +208, 85,198, 62,150, 20,118, 63, 60,110,196, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,244,221,134, 61,121,164,175, 62, +160,108, 93, 61, 17,207,190, 62,144, 29, 55, 61,207,183,194, 62, 96,197,103, 61, 15,206,170, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,144,102,114, 63,198, 23,220, 62,174,151,113, 63, 26,229,214, 62,222, 48,116, 63,169, 8,209, 62, 84, 87,117, 63, +221,255,211, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,108, 93, 61, 17,207,190, 62, 12,155,135, 61,166, 39,201, 62, + 56,163,120, 61, 58,252,208, 62,144, 29, 55, 61,207,183,194, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 94,173,107, 63, +168,130,225, 62,228,239,107, 63, 62, 59,218, 62,174,151,113, 63, 26,229,214, 62,144,102,114, 63,198, 23,220, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 12,155,135, 61,166, 39,201, 62,128, 47,195, 61, 6, 11,207, 62, 76,131,196, 61,196, 97,216, 62, + 56,163,120, 61, 58,252,208, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 94,173,107, 63,168,130,225, 62,100,251,101, 63, +238,198,227, 62, 71,205,102, 63,132, 94,219, 62,228,239,107, 63, 62, 59,218, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +192,157,244, 61,157,137,209, 62, 68,209,249, 61, 70,134,219, 62, 76,131,196, 61,196, 97,216, 62,128, 47,195, 61, 6, 11,207, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,224, 19, 69, 63, 24, 68,190, 62,216,217, 77, 63, 7,228,157, 62,236, 35, 85, 63, +164,201,181, 62, 56, 92, 78, 63,177,114,188, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 32, 0,122, 91, 80, 62, 72, 18,174, 62, +154,118,111, 62,120,108,152, 62,250, 78,134, 62,148,213,186, 62,162,163,104, 62,150,180,182, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 32, 0,216,217, 77, 63, 7,228,157, 62,151, 5, 90, 63,138, 61,167, 62, 21,180, 92, 63,202, 95,173, 62,236, 35, 85, 63, +164,201,181, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0,144,216, 54, 62, 35, 76,163, 62,194,251, 66, 62,163,102,158, 62, +154,118,111, 62,120,108,152, 62,122, 91, 80, 62, 72, 18,174, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 53, 64, 74, 63, +171, 31,224, 62,224, 19, 69, 63, 24, 68,190, 62, 56, 92, 78, 63,177,114,188, 62,217,106, 81, 63, 14,214,232, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,162,163,104, 62,150,180,182, 62,250, 78,134, 62,148,213,186, 62,184,112,114, 62,248,169,220, 62, + 88, 93, 84, 62, 50,105,228, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,106,154, 93, 63,226, 26,233, 62,196,229, 94, 63, +128,195,224, 62,100,251,101, 63,238,198,227, 62, 46,178,102, 63,100,184,232, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 68,209,249, 61, 70,134,219, 62,108,187, 28, 62, 48, 86,217, 62,128, 1, 33, 62, 70,210,226, 62,120,216,242, 61,124, 40,225, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21,180, 92, 63,202, 95,173, 62, 68, 32, 97, 63,192, 12,178, 62, 9,215, 94, 63, + 4, 54,186, 62,236, 35, 85, 63,164,201,181, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 60,122, 41, 62, 16, 58,175, 62, + 48,185, 36, 62, 16, 7,166, 62,144,216, 54, 62, 35, 76,163, 62,122, 91, 80, 62, 72, 18,174, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,230, 78, 95, 63, 4,233,189, 62, 32,188, 86, 63, 44, 62,190, 62,236, 35, 85, 63,164,201,181, 62, 9,215, 94, 63, + 4, 54,186, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,122, 91, 80, 62, 72, 18,174, 62, 78,118, 71, 62, 27, 49,182, 62, + 52,225, 37, 62, 40, 12,179, 62, 60,122, 41, 62, 16, 58,175, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 70,166, 92, 63, + 0,166,197, 62, 32,188, 86, 63, 44, 62,190, 62,230, 78, 95, 63, 4,233,189, 62,226, 13, 95, 63, 37,152,194, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 52,225, 37, 62, 40, 12,179, 62, 78,118, 71, 62, 27, 49,182, 62,142,143, 45, 62,237, 37,188, 62, +106,230, 36, 62,222, 27,184, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,248, 90, 95, 63,100,122,207, 62,108,249, 90, 63, + 58,199,212, 62, 32,188, 86, 63, 44, 62,190, 62, 70,166, 92, 63, 0,166,197, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 78,118, 71, 62, 27, 49,182, 62,110, 56, 48, 62,230, 43,205, 62,174,250, 30, 62, 26, 12,198, 62,142,143, 45, 62,237, 37,188, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,196,229, 94, 63,128,195,224, 62,108,249, 90, 63, 58,199,212, 62,248, 90, 95, 63, +100,122,207, 62, 92,104, 98, 63,197,136,215, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,174,250, 30, 62, 26, 12,198, 62, +110, 56, 48, 62,230, 43,205, 62,108,187, 28, 62, 48, 86,217, 62,212, 59, 15, 62,224, 50,206, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,100,251,101, 63,238,198,227, 62,196,229, 94, 63,128,195,224, 62, 92,104, 98, 63,197,136,215, 62, 71,205,102, 63, +132, 94,219, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,212, 59, 15, 62,224, 50,206, 62,108,187, 28, 62, 48, 86,217, 62, + 68,209,249, 61, 70,134,219, 62,192,157,244, 61,157,137,209, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,106, 81, 63, + 14,214,232, 62,108,249, 90, 63, 58,199,212, 62,196,229, 94, 63,128,195,224, 62,106,154, 93, 63,226, 26,233, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,108,187, 28, 62, 48, 86,217, 62,110, 56, 48, 62,230, 43,205, 62, 88, 93, 84, 62, 50,105,228, 62, +128, 1, 33, 62, 70,210,226, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,106, 81, 63, 14,214,232, 62, 56, 92, 78, 63, +177,114,188, 62, 32,188, 86, 63, 44, 62,190, 62,108,249, 90, 63, 58,199,212, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 78,118, 71, 62, 27, 49,182, 62,162,163,104, 62,150,180,182, 62, 88, 93, 84, 62, 50,105,228, 62,110, 56, 48, 62,230, 43,205, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56, 92, 78, 63,177,114,188, 62,236, 35, 85, 63,164,201,181, 62, 32,188, 86, 63, + 44, 62,190, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 78,118, 71, 62, 27, 49,182, 62, +122, 91, 80, 62, 72, 18,174, 62,162,163,104, 62,150,180,182, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 71,205,102, 63,132, 94,219, 62, 92,104, 98, 63,197,136,215, 62,182,109,100, 63,149,255,210, 62, 54, 86,104, 63, +209,241,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,107, 7, 62, 34,103,200, 62,212, 59, 15, 62,224, 50,206, 62, +192,157,244, 61,157,137,209, 62, 8, 2,232, 61, 20,214,203, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92,104, 98, 63, +197,136,215, 62,248, 90, 95, 63,100,122,207, 62,112,206, 97, 63, 10,202,204, 62,182,109,100, 63,149,255,210, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 64, 68, 21, 62,107, 55,194, 62,174,250, 30, 62, 26, 12,198, 62,212, 59, 15, 62,224, 50,206, 62, +160,107, 7, 62, 34,103,200, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,248, 90, 95, 63,100,122,207, 62, 70,166, 92, 63, + 0,166,197, 62, 82,241, 94, 63, 40,103,198, 62,112,206, 97, 63, 10,202,204, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 20,225, 35, 62, 39, 50,188, 62,142,143, 45, 62,237, 37,188, 62,174,250, 30, 62, 26, 12,198, 62, 64, 68, 21, 62,107, 55,194, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 70,166, 92, 63, 0,166,197, 62,226, 13, 95, 63, 37,152,194, 62,118, 1, 97, 63, + 47,226,195, 62, 82,241, 94, 63, 40,103,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 12, 43, 28, 62,186,177,184, 62, +106,230, 36, 62,222, 27,184, 62,142,143, 45, 62,237, 37,188, 62, 20,225, 35, 62, 39, 50,188, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,226, 13, 95, 63, 37,152,194, 62,230, 78, 95, 63, 4,233,189, 62, 51,113, 97, 63, 92,151,189, 62,118, 1, 97, 63, + 47,226,195, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,104, 67, 29, 62, 58,199,177, 62, 52,225, 37, 62, 40, 12,179, 62, +106,230, 36, 62,222, 27,184, 62, 12, 43, 28, 62,186,177,184, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,230, 78, 95, 63, + 4,233,189, 62, 9,215, 94, 63, 4, 54,186, 62, 96, 69, 96, 63,152,133,187, 62, 51,113, 97, 63, 92,151,189, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,140, 14, 35, 62, 33, 19,176, 62, 60,122, 41, 62, 16, 58,175, 62, 52,225, 37, 62, 40, 12,179, 62, +104, 67, 29, 62, 58,199,177, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 9,215, 94, 63, 4, 54,186, 62, 68, 32, 97, 63, +192, 12,178, 62,112, 91, 98, 63,149,128,182, 62, 96, 69, 96, 63,152,133,187, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +228,107, 29, 62, 95,230,169, 62, 48,185, 36, 62, 16, 7,166, 62, 60,122, 41, 62, 16, 58,175, 62,140, 14, 35, 62, 33, 19,176, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,239,107, 63, 62, 59,218, 62, 71,205,102, 63,132, 94,219, 62, 54, 86,104, 63, +209,241,214, 62, 34, 27,109, 63,155,254,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 8, 2,232, 61, 20,214,203, 62, +192,157,244, 61,157,137,209, 62,128, 47,195, 61, 6, 11,207, 62, 36,174,184, 61,216,130,202, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,174,151,113, 63, 26,229,214, 62,228,239,107, 63, 62, 59,218, 62, 34, 27,109, 63,155,254,214, 62, 69,134,113, 63, +156, 82,212, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 36,174,184, 61,216,130,202, 62,128, 47,195, 61, 6, 11,207, 62, + 12,155,135, 61,166, 39,201, 62, 60,114,138, 61, 28, 61,197, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,222, 48,116, 63, +169, 8,209, 62,174,151,113, 63, 26,229,214, 62, 69,134,113, 63,156, 82,212, 62, 42,143,114, 63, 24,168,207, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 60,114,138, 61, 28, 61,197, 62, 12,155,135, 61,166, 39,201, 62,160,108, 93, 61, 17,207,190, 62, +184, 85,132, 61, 22,211,189, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84,225,115, 63,208, 85,198, 62,222, 48,116, 63, +169, 8,209, 62, 42,143,114, 63, 24,168,207, 62,203,125,114, 63, 96,114,200, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +184, 85,132, 61, 22,211,189, 62,160,108, 93, 61, 17,207,190, 62,244,221,134, 61,121,164,175, 62, 16,152,145, 61, 84,214,179, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,198,132,109, 63,182,157,186, 62, 84,225,115, 63,208, 85,198, 62,203,125,114, 63, + 96,114,200, 62,177,192,109, 63,152,240,190, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 16,152,145, 61, 84,214,179, 62, +244,221,134, 61,121,164,175, 62, 40, 91,221, 61, 4,194,167, 62, 64,226,208, 61,232, 58,172, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 68, 32, 97, 63,192, 12,178, 62,198,132,109, 63,182,157,186, 62,177,192,109, 63,152,240,190, 62,112, 91, 98, 63, +149,128,182, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64,226,208, 61,232, 58,172, 62, 40, 91,221, 61, 4,194,167, 62, + 48,185, 36, 62, 16, 7,166, 62,228,107, 29, 62, 95,230,169, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,118, 1, 97, 63, + 47,226,195, 62, 51,113, 97, 63, 92,151,189, 62,215,139,102, 63, 15,109,193, 62, 54, 47,100, 63,186,115,198, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 92,169, 5, 62,168,115,179, 62,104, 67, 29, 62, 58,199,177, 62, 12, 43, 28, 62,186,177,184, 62, + 50, 97, 13, 62, 50, 42,186, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 54, 47,100, 63,186,115,198, 62,215,139,102, 63, + 15,109,193, 62,174,241,105, 63,204, 8,200, 62, 71,233,103, 63,178, 42,204, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +228,171,229, 61, 41, 42,185, 62, 92,169, 5, 62,168,115,179, 62, 50, 97, 13, 62, 50, 42,186, 62, 92,248,243, 61, 96, 22,191, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71,233,103, 63,178, 42,204, 62,174,241,105, 63,204, 8,200, 62, 51, 37,108, 63, +249, 3,205, 62, 56,212,106, 63, 96,238,208, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 99,202, 61,192, 49,190, 62, +228,171,229, 61, 41, 42,185, 62, 92,248,243, 61, 96, 22,191, 62,160,209,211, 61,108,159,195, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 56,212,106, 63, 96,238,208, 62, 51, 37,108, 63,249, 3,205, 62, 56, 73,110, 63,186,119,206, 62, 46,191,109, 63, + 92, 64,210, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,244,234,179, 61,240,219,190, 62,120, 99,202, 61,192, 49,190, 62, +160,209,211, 61,108,159,195, 62,196,129,181, 61,204, 14,196, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 34, 27,109, 63, +155,254,214, 62, 54, 86,104, 63,209,241,214, 62, 56,212,106, 63, 96,238,208, 62, 46,191,109, 63, 92, 64,210, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,160,209,211, 61,108,159,195, 62, 8, 2,232, 61, 20,214,203, 62, 36,174,184, 61,216,130,202, 62, +196,129,181, 61,204, 14,196, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,182,109,100, 63,149,255,210, 62, 71,233,103, 63, +178, 42,204, 62, 56,212,106, 63, 96,238,208, 62, 54, 86,104, 63,209,241,214, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +160,209,211, 61,108,159,195, 62, 92,248,243, 61, 96, 22,191, 62,160,107, 7, 62, 34,103,200, 62, 8, 2,232, 61, 20,214,203, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,182,109,100, 63,149,255,210, 62,112,206, 97, 63, 10,202,204, 62, 54, 47,100, 63, +186,115,198, 62, 71,233,103, 63,178, 42,204, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 50, 97, 13, 62, 50, 42,186, 62, + 64, 68, 21, 62,107, 55,194, 62,160,107, 7, 62, 34,103,200, 62, 92,248,243, 61, 96, 22,191, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0,118, 1, 97, 63, 47,226,195, 62, 54, 47,100, 63,186,115,198, 62,112,206, 97, 63, 10,202,204, 62, 82,241, 94, 63, + 40,103,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 68, 21, 62,107, 55,194, 62, 50, 97, 13, 62, 50, 42,186, 62, + 12, 43, 28, 62,186,177,184, 62, 20,225, 35, 62, 39, 50,188, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 96, 69, 96, 63, +152,133,187, 62,112, 91, 98, 63,149,128,182, 62,215,139,102, 63, 15,109,193, 62, 51,113, 97, 63, 92,151,189, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 92,169, 5, 62,168,115,179, 62,228,107, 29, 62, 95,230,169, 62,140, 14, 35, 62, 33, 19,176, 62, +104, 67, 29, 62, 58,199,177, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,177,192,109, 63,152,240,190, 62,174,241,105, 63, +204, 8,200, 62,215,139,102, 63, 15,109,193, 62,112, 91, 98, 63,149,128,182, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 92,169, 5, 62,168,115,179, 62,228,171,229, 61, 41, 42,185, 62, 64,226,208, 61,232, 58,172, 62,228,107, 29, 62, 95,230,169, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,203,125,114, 63, 96,114,200, 62, 51, 37,108, 63,249, 3,205, 62,174,241,105, 63, +204, 8,200, 62,177,192,109, 63,152,240,190, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,171,229, 61, 41, 42,185, 62, +120, 99,202, 61,192, 49,190, 62, 16,152,145, 61, 84,214,179, 62, 64,226,208, 61,232, 58,172, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 42,143,114, 63, 24,168,207, 62, 56, 73,110, 63,186,119,206, 62, 51, 37,108, 63,249, 3,205, 62,203,125,114, 63, + 96,114,200, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 99,202, 61,192, 49,190, 62,244,234,179, 61,240,219,190, 62, +184, 85,132, 61, 22,211,189, 62, 16,152,145, 61, 84,214,179, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 69,134,113, 63, +156, 82,212, 62, 46,191,109, 63, 92, 64,210, 62, 56, 73,110, 63,186,119,206, 62, 42,143,114, 63, 24,168,207, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0,244,234,179, 61,240,219,190, 62,196,129,181, 61,204, 14,196, 62, 60,114,138, 61, 28, 61,197, 62, +184, 85,132, 61, 22,211,189, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 34, 27,109, 63,155,254,214, 62, 46,191,109, 63, + 92, 64,210, 62, 69,134,113, 63,156, 82,212, 62, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, + 60,114,138, 61, 28, 61,197, 62,196,129,181, 61,204, 14,196, 62, 36,174,184, 61,216,130,202, 62, 0, 0,128, 63, 0, 0,128, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84,190,110, 63,223, 77,172, 62,151, 5, 90, 63,138, 61,167, 62, 22, 25, 96, 63, +246,248,149, 62,162,176,122, 63,145,215,161, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0, 64,234, 54, 62,146,219,140, 62, +194,251, 66, 62,163,102,158, 62, 8, 66,246, 61, 28,161,152, 62,172,241,189, 61, 13,107,132, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0, 0, 0, 49, 12,122, 63,246, 8,197, 62, 84,190,110, 63,223, 77,172, 62,162,176,122, 63,145,215,161, 62,188,255,126, 63, +115,248,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0,172,241,189, 61, 13,107,132, 62, 8, 66,246, 61, 28,161,152, 62, +240, 54, 16, 61,120, 4,167, 62, 0, 8,163, 58, 39, 69,162, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0,183,115,119, 63, +140, 49,215, 62, 49, 12,122, 63,246, 8,197, 62,188,255,126, 63,115,248,198, 62, 47, 6,122, 63,248,157,216, 62, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0, 0, 0, 0, 8,163, 58, 39, 69,162, 62,240, 54, 16, 61,120, 4,167, 62,224,111,231, 60,100,142,198, 62, +224,248, 14, 60, 70,141,198, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, 41, 76,116, 63,139,153,222, 62,183,115,119, 63, +140, 49,215, 62, 47, 6,122, 63,248,157,216, 62,134, 98,119, 63,204, 37,225, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, +224,248, 14, 60, 70,141,198, 62,224,111,231, 60,100,142,198, 62,128,183, 73, 61, 84,108,213, 62, 80,210,229, 60, 32,239,218, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0, 31,178,109, 63,224, 68,228, 62, 41, 76,116, 63,139,153,222, 62,134, 98,119, 63, +204, 37,225, 62, 46,185,115, 63, 90,157,234, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,128, 0, 80,210,229, 60, 32,239,218, 62, +128,183, 73, 61, 84,108,213, 62, 28, 27,177, 61, 42,240,219, 62, 56,103,122, 61, 30, 10,230, 62, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0,128, 0, 46,178,102, 63,100,184,232, 62, 31,178,109, 63,224, 68,228, 62, 46,185,115, 63, 90,157,234, 62,244,134,106, 63, +234, 64,246, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 56,103,122, 61, 30, 10,230, 62, 28, 27,177, 61, 42,240,219, 62, +120,216,242, 61,124, 40,225, 62,212,222,209, 61,238,123,240, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0,235,188, 5, 63, +252, 74, 98, 63,200,111,248, 62,197,105,112, 63, 0, 49,231, 62,118,190,107, 63,150, 57,255, 62, 53, 14, 96, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0, 80, 99, 95, 62,149,194, 94, 63, 58, 8, 62, 62, 10,154, 89, 63, 40, 24, 92, 62, 14, 82, 74, 63, +112, 11,112, 62,157,133, 78, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,235,188, 5, 63,252, 74, 98, 63,136,139, 12, 63, +138,233,101, 63,116, 45, 6, 63,112,245,113, 63,200,111,248, 62,197,105,112, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0, + 68,219, 36, 62,249,186, 81, 63, 28,254, 65, 62, 20, 55, 70, 63, 40, 24, 92, 62, 14, 82, 74, 63, 58, 8, 62, 62, 10,154, 89, 63, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,136,139, 12, 63,138,233,101, 63, 5,130, 12, 63,149,216,108, 63,116, 45, 6, 63, +112,245,113, 63, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,112, 0, 68,219, 36, 62,249,186, 81, 63, + 76, 1, 42, 62, 39,178, 73, 63, 28,254, 65, 62, 20, 55, 70, 63, 0, 0,128, 63, 0, 0,128, 63, 56, 82,179, 3, 1, 0, 5, 0, + 0, 0,112, 0,120, 89,103, 63,105, 76, 2, 63,106,154, 93, 63,226, 26,233, 62, 46,178,102, 63,100,184,232, 62,244,134,106, 63, +234, 64,246, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,120,216,242, 61,124, 40,225, 62,128, 1, 33, 62, 70,210,226, 62, +116,128,234, 61,200, 39, 0, 63,212,222,209, 61,238,123,240, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 0, 0,226, 44,245, 62, +129,140, 96, 63,150, 57,255, 62, 53, 14, 96, 63, 0, 49,231, 62,118,190,107, 63, 42,135,227, 62, 58, 2,101, 63, 56, 82,179, 3, + 1, 0, 5, 0, 0, 0,240, 0, 80, 99, 95, 62,149,194, 94, 63,112, 11,112, 62,157,133, 78, 63, 74, 84,120, 62,104, 32, 83, 63, +110,103,122, 62,236,255, 92, 63, 56, 82,179, 3, 1, 0, 5, 0, 0, 0,240, 0,216,217, 77, 63, 7,228,157, 62,160,225, 90, 63, +110,121,137, 62, 22, 25, 96, 63,246,248,149, 62,151, 5, 90, 63,138, 61,167, 62, 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 16, 0, + 64,234, 54, 62,146,219,140, 62,166,125, 74, 62,252, 30,130, 62,154,118,111, 62,120,108,152, 62,194,251, 66, 62,163,102,158, 62, + 56, 82,179, 3, 1, 0, 5, 0, 0, 0, 64, 0, 68, 65, 84, 65, 64, 31, 0, 0, 0, 65,182, 3, 59, 0, 0, 0,208, 7, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 77, 69, 0, 0, 24, 1, 0, 0,112, 96,182, 3, 52, 0, 0, 0, 1, 0, 0, 0,152,139,182, 3,176, 94,181, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 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,184, 97,182, 3, + 16,123,182, 3, 64,127,182, 3, 0, 0, 0, 0,120, 99,182, 3, 16,112,182, 3, 0, 0, 0, 0, 56,136,182, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 97,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,136,110,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,121,182, 3, + 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63, +214,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,184, 97,182, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,240, 97,182, 3, 58, 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,120, 99,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,224, 10, 0, 0,120, 99,182, 3, 58, 0, 0, 0,116, 0, 0, 0, +223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, +242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, +250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, +250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +127,212,140,184,242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, +250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, +248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64,255, 63, 1,192, +129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, + 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, +238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,183,115, 6,193,127, 31,215, 64,238, 35,190, 64,255, 63, 1,192, +129, 90,255, 0, 0, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +102, 32, 87,192, 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, +244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, +217, 29, 87, 64,112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, +244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, +247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +159,115, 6, 65,146, 30,215, 64, 74, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,135, 43,100,192,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +150, 30,215, 64,151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, + 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 14, 29,152, 63,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +150, 30,215, 64,151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, +135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 72, 36,190,192, 1,192, 1,192, +129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, +213, 91,136,184, 43, 3,114, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, +129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65,129, 43,100, 64,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, +234, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,246, 28,152, 63,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, + 30, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 18, 29,152,191,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +213, 91,136,184, 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, +153, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,147, 43,100,192,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +213, 91,136,184, 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +222, 33,215,191,183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, +154, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 32, 29,152,191,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +182,115, 6,193,128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, + 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192,255, 63, 1,192, +129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,122, 31,215,192,180,115, 6, 65, + 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192,114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +191, 87,161,192,148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65, +139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, + 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, +253, 28,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, +136, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +172,163,138,184,181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, 1,192, 1,192, +129, 90,255, 0, 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0,136,110,182, 3, 58, 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, 16,112,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 16,112,182, 3, 55, 0, 0, 0,198, 0, 0, 0, 21, 0, 0, 0, + 82, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, + 18, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 53, 0, 0, 0, + 0, 0, 34, 0, 28, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, + 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, + 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, + 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, + 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, + 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 34, 0, 9, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 29, 0, 0, 0, + 0, 0, 34, 0, 6, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, + 23, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 34, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 34, 0, 39, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, + 37, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 41, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, + 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 86, 0, 0, 0, + 0, 0, 34, 0, 56, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, +114, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, + 52, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,114, 0, 0, 0, + 0, 0, 34, 0, 42, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, + 43, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, + 44, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, + 0, 0, 34, 0, 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, + 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, + 58, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, + 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, + 63, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, + 46, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 65, 0, 0, 0, + 0, 0, 34, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, +102, 0, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, + 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 85, 0, 0, 0, + 0, 0, 34, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, + 77, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, + 81, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,112, 0, 0, 0, + 0, 0, 34, 0, 78, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, + 85, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 34, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, + 87, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, + 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 92, 0, 0, 0, + 0, 0, 34, 0, 87, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, + 90, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, + 92, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, + 97, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, + 78, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, + 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0, +103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, +105, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, + 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, +109, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,112, 0, 0, 0, + 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, +112, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,111, 0, 0, 0, + 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0,136,121,182, 3, 58, 1, 0, 0, 5, 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, 86, 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, 16,123,182, 3, 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, 0, 0, 0, 0, 85, 86, 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, 64,127,182, 3, + 6, 0, 0, 0, 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, + 67,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, + 56,136,182, 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, 68, 65, 84, 65,252, 3, 0, 0, 16,123,182, 3, 54, 0, 0, 0, 51, 0, 0, 0, + 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, + 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, + 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, +115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, + 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, + 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, + 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0, +101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, +109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, + 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0, +108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, +113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0, +112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +196, 8, 0, 0, 64,127,182, 3, 65, 0, 0, 0, 51, 0, 0, 0,250,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, + 84,162,203, 62, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, + 96,211, 93, 59,146,128, 81, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, +225,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,149,128, 81, 63, 96,211, 93, 59,251,168, 27, 63, + 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +227,151,158, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,246,168, 27, 63, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, 85,162,203, 62, + 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 24,172,131, 63, 96,211, 93, 59, +142,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,174,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, +247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, + 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, +248,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +226,151,158, 63, 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63, +236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, + 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, + 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, + 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, + 72, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63, +174,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63, +173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63, +111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63, +188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63, +236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, +172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189, +120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 56,127,118,190,220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61,242, 65, 79, 63, + 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63,122, 84,181, 62, +113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +200, 84,104, 61,242, 65, 79, 63, 96,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62, +102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, + 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61, +242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63, +122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190, +216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63, +173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,180,131,140, 63,116, 19,186, 62, +244,140,159, 63, 50, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,174,225, 76, 63, 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62,112,226, 76, 63, 64, 38,135, 61,240,244,114, 63, + 4,221, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 96, 44,135, 61, 61, 84,181, 62,176,104,169,189, + 93,189, 0, 63, 80, 1,109,190,248,207, 38, 63,144,109,169,189, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63, +116, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, 96, 44,135, 61, + 51,207, 38, 63, 24,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63, +236, 65, 79, 63,174,225, 76, 63,116, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +188,188, 0, 63,120, 47, 41, 63,122, 84,181, 62,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 52,207, 38, 63,248, 28, 3, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 14, 95, 82, 62, 0, 21,186, 62,144, 82,104, 61,128,223, 91, 62,138, 94, 82, 62, + 48, 43,135, 61,122, 84,181, 62, 32,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, +127, 84,181, 62,242, 65, 79, 63,188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 26, 95, 82, 62,120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62, +248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, 56,207, 38, 63,111,179,141, 63, +188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,127, 84,181, 62,242, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,128,106,188,189,176, 20,186, 62, +160, 84,104, 61, 0, 29, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 3, 0, 0, 56,136,182, 3, + 59, 0, 0, 0,204, 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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, +152,139,182, 3, 52, 0, 0, 0, 1, 0, 0, 0,168,181,182, 3,112, 96,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, + 97,110,101, 46, 48, 48, 49, 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,224,140,182, 3,192,165,182, 3,200,169,182, 3, + 0, 0, 0, 0,160,142,182, 3, 8,155,182, 3, 0, 0, 0, 0,104,178,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24,141,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153,182, 3, + 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,164,182, 3, 3, 0, 0, 0, 5, 0, 0, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,224,140,182, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 24,141,182, 3, 58, 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,160,142,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,176, 10, 0, 0,160,142,182, 3, 58, 0, 0, 0,114, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65, + 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, 1,192, 1,192, +129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65, + 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +172,163,138,184,181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64, + 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64, + 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64, + 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, +148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, + 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, +244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +191, 87,161,192,148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192,114, 59, 60, 65, +127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, +192, 87,161,192,147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, + 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192,255, 63, 1,192, +129, 90,255, 0, 0, 0, 0, 0,182,115, 6,193,128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, +183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, + 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192,129, 90,127,165, + 0, 0,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0, +199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, +147, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0, +199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, + 18, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0, +199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, +246, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0, +199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65, +129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 72, 36,190,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, + 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, + 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, + 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, + 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, +135, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64, + 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, +127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, +247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, +239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64,127,165,127,165, + 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, +244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0, + 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, +242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64,255, 63, 1,192, +129, 90,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, +245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, +127,212,140,184,242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, +245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, +245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, + 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, +247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, 0, 0, 0, 0, +255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, +223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191, +245, 35,190, 64, 0, 0, 42,221, 41,123,255, 0, 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191, 74, 36,190,192, 0, 0, 42,221, +215,132,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,128,153,182, 3, 58, 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, 8,155,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 9, 0, 0, 8,155,182, 3, 55, 0, 0, 0, +192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, + 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, + 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, + 18, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 20, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 23, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 25, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 34, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, + 23, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, + 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 34, 0, 27, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, + 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 34, 0, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, + 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 34, 0, 30, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, + 40, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 42, 0, 0, 0, 0, 0, 34, 0, + 13, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 34, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, + 46, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, + 0, 0, 34, 0, 48, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, + 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 34, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, + 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, + 58, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, + 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 68, 0, 0, 0, + 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, + 70, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 69, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, + 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, + 33, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 34, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, + 71, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 76, 0, 0, 0, + 0, 0, 34, 0, 15, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, + 73, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, + 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 34, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, +105, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, + 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,110, 0, 0, 0, + 0, 0, 34, 0, 86, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, + 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0,107, 0, 0, 0, + 0, 0, 34, 0, 91, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, + 91, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, + 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 34, 0, 95, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, +100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, + 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, +102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, +104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0, + 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0, +111, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, +106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, + 31, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, 56,164,182, 3, 58, 1, 0, 0, 5, 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, 86, 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,192,165,182, 3, 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, 0, 0, 0, 0, 85, 86, 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,200,169,182, 3, + 6, 0, 0, 0, 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, + 67,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, +104,178,182, 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, 68, 65, 84, 65,212, 3, 0, 0,192,165,182, 3, 54, 0, 0, 0, 49, 0, 0, 0, + 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, + 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, + 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, 0, 0, 0, + 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, + 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, + 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, + 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, 0, 0, 0, + 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, + 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, + 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, + 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, +100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0, +102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, 0, 0, 0, + 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, 0, 0, 0, + 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,108, 8, 0, 0,200,169,182, 3, + 65, 0, 0, 0, 49, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, + 26, 95, 82, 62,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62, +102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,190,188, 0, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +160, 84,104, 61, 0, 29, 3, 63,128,106,188,189,176, 20,186, 62,144, 82,104, 61,128,223, 91, 62, 14, 95, 82, 62, 0, 21,186, 62, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,127, 84,181, 62,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,122, 84,181, 62, +248, 28, 3, 63,188,188, 0, 63,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63, +190,188, 0, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,122, 84,181, 62,248, 28, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, + 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,236, 65, 79, 63,188,188, 0, 63,120, 47, 41, 63, + 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63,116, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62, + 32,224, 91, 62,138, 94, 82, 62, 48, 43,135, 61, 61, 84,181, 62,176,104,169,189,185,188, 0, 63, 96, 44,135, 61, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62, +174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63, +116, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 51,207, 38, 63, 24,224, 91, 62,185,188, 0, 63, 96, 44,135, 61,248,207, 38, 63,144,109,169,189,112,226, 76, 63, 64, 38,135, 61, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,240,244,114, 63, 4,221, 91, 62,180,131,140, 63,116, 19,186, 62, 42,244,114, 63, +244, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, + 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, +242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63, +128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62, +102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62, +113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63, +200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189, +120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, + 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61, +244, 65, 79, 63, 96,105,188,189,120, 47, 41, 63, 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, + 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63, 56,207, 38, 63, +111,179,141, 63, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63, +102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63, +188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63, +174,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63, +111,179,141, 63,190,188, 0, 63,171,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63, +161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63, +236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63, +236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, + 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 22,172,131, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, +248,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,176,131,185, 63, + 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, + 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +226,151,158, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,142,128, 81, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59,247,168, 27, 63, + 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, 96,211, 93, 59, +227,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 24,172,131, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,251,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, + 86,162,203, 62, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,225,151,158, 63, + 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,146,128, 81, 63, 96,211, 93, 59,250,168, 27, 63, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59, +149,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 3, 0, 0,104,178,182, 3, + 59, 0, 0, 0,196, 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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, +168,181,182, 3, 52, 0, 0, 0, 1, 0, 0, 0,216,194,182, 3,152,139,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, + 97,110,101, 46, 48, 48, 50, 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,240,182,182, 3,200,191,182, 3,152,192,182, 3, + 0, 0, 0, 0,176,184,182, 3,144,188,182, 3, 0, 0, 0, 0, 40,194,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40,183,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,187,182, 3, + 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,190,182, 3, 3, 0, 0, 0, 5, 0, 0, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 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, 4,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,240,182,182, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 40,183,182, 3, 58, 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,176,184,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,176,184,182, 3, 58, 0, 0, 0, 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, +208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, + 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, +197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, +212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180, +214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, + 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, + 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 8,187,182, 3, 58, 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,144,188,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,144,188,182, 3, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, + 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, + 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, + 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 64,190,182, 3, 58, 1, 0, 0, 5, 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,200,191,182, 3, 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, 0, 0, 0, 0, 85, 86, 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,152,192,182, 3, 6, 0, 0, 0, 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, 67,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, 40,194,182, 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, 68, 65, 84, 65,160, 0, 0, 0,200,191,182, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, + 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, + 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0, +152,192,182, 3, 65, 0, 0, 0, 8, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61, +162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, + 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 0,229,213, 62,162,226,125, 63, 18,192,137, 62,162,226,125, 63, + 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63, +162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63, +162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 40,194,182, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 77, 69, 0, 0, 24, 1, 0, 0,216,194,182, 3, 52, 0, 0, 0, 1, 0, 0, 0, 8,208,182, 3,168,181,182, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 51, 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, 32,196,182, 3, +248,204,182, 3,200,205,182, 3, 0, 0, 0, 0,224,197,182, 3,192,201,182, 3, 0, 0, 0, 0, 88,207,182, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,196,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56,200,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,203,182, 3, + 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55, +214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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, 32,196,182, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 88,196,182, 3, 58, 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,224,197,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,224,197,182, 3, 58, 0, 0, 0, 23, 0, 0, 0, + 47,205,204, 62, 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, +208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, + 47,205,204, 62, 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, +213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, + 0,205, 76, 63, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, +214,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, + 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, +210,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, + 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, + 0, 0,144,180, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, +216,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, + 0, 0, 0, 0, 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 56,200,182, 3, 58, 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,192,201,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,192,201,182, 3, 55, 0, 0, 0, + 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 34, 0, 11, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, + 19, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0,112,203,182, 3, 58, 1, 0, 0, 5, 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,248,204,182, 3, 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, 0, 0, 0, 0, 85, 86, 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,200,205,182, 3, + 6, 0, 0, 0, 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, + 67,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, + 88,207,182, 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, 68, 65, 84, 65,160, 0, 0, 0,248,204,182, 3, 54, 0, 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, + 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 96, 1, 0, 0,200,205,182, 3, 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63, +162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, + 0,229,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 18,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62, +162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, +252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 88,207,182, 3, + 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 8,208,182, 3, 52, 0, 0, 0, 1, 0, 0, 0,184,215,182, 3, +216,194,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 52, 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, 80,209,182, 3, 16,215,182, 3, 88,215,182, 3, 0, 0, 0, 0, 16,211,182, 3, 40,213,182, 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,136,209,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,211,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,136,213,182, 3, 2, 0, 0, 0, 5, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128,179, 0, 0, 64, 52, 0, 0, 0, 0, + 0, 0,128, 63, 2, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, + 30, 0, 4, 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, 80,209,182, 3, + 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 68, 65, 84, 65, 84, 1, 0, 0,136,209,182, 3, 58, 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, + 16,211,182, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 16,211,182, 3, + 58, 0, 0, 0, 4, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, + 0, 0,128, 63, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, + 0, 0, 0, 0, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, +255,127,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,160,211,182, 3, 58, 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, 40,213,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 40,213,182, 3, 55, 0, 0, 0, + 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 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, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,136,213,182, 3, + 58, 1, 0, 0, 5, 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, 86, 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, 16,215,182, 3, 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, 0, 0, 0, 0, 85, 86, 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, 88,215,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 20, 0, 0, 0, 16,215,182, 3, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 2, 68, 65, 84, 65, 44, 0, 0, 0, 88,215,182, 3, 65, 0, 0, 0, 1, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 77, 69, 0, 0, 24, 1, 0, 0,184,215,182, 3, 52, 0, 0, 0, 1, 0, 0, 0,224, 2,183, 3, 8,208,182, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 53, 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,217,182, 3, 88,242,182, 3,136,246,182, 3, 0, 0, 0, 0,192,218,182, 3, 88,231,182, 3, 0, 0, 0, 0,128,255,182, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,217,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,229,182, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208,240,182, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63, +140, 0,128, 63,214,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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, 0,217,182, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 56,217,182, 3, 58, 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,192,218,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,224, 10, 0, 0,192,218,182, 3, 58, 0, 0, 0, +116, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64, +144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192, +179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192, +244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,127,212,140,184,242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191, +113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184, +239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, + 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,183,115, 6,193,127, 31,215, 64,238, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, + 2, 32, 87, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, + 62, 30, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64, +217, 86,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 98,234, 53, 56, + 38, 33,215,191, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,135, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65, +117, 31,215, 64, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 14, 29,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65, +117, 31,215, 64,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 72, 36,190,192, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,177, 86,161, 64, +146, 87, 33, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65,129, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64, +146, 87, 33, 65,234, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,246, 28,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64, +146, 87, 33, 65, 30, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 18, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64, +146, 87, 33, 65,153, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,147, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192, +190, 87,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,222, 33,215,191,183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,183,115, 6,193, +127, 31,215, 64,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 32, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,182,115, 6,193,128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193, +127, 31,215, 64, 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,122, 31,215,192, +180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192,114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,191, 87,161,192,148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192, +181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64, +170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64, +179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63, +146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184, +112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,208,229,182, 3, 58, 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, 88,231,182, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 88,231,182, 3, 55, 0, 0, 0,198, 0, 0, 0, + 21, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 84, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, + 27, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, + 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 34, 0, 1, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, + 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 34, 0, 23, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, + 40, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 39, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,100, 0, 0, 0, + 0, 0, 34, 0, 37, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 41, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, + 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,101, 0, 0, 0, + 0, 0, 34, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, + 86, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, + 50, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,115, 0, 0, 0, + 0, 0, 34, 0, 52, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, +114, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, + 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 34, 0, 44, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, + 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, + 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, + 0, 0, 34, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, + 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, + 0, 0, 34, 0, 63, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, + 52, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 53, 0, 0, 0, + 0, 0, 34, 0, 46, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, + 65, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, + 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 97, 0, 0, 0, + 0, 0, 34, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0, + 73, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 77, 0, 0, 0, + 0, 0, 34, 0, 81, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, +112, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, + 84, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 34, 0, 85, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, + 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 93, 0, 0, 0, + 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, + 86, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, + 0, 0, 34, 0, 92, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, + 81, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 34, 0, 78, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0, +101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, + 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, + 0, 0, 34, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0, +105, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, +103, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, + 0, 0, 34, 0,109, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0, +112, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, +106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, + 0, 0, 34, 0,112, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0, +111, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0,208,240,182, 3, 58, 1, 0, 0, 5, 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, 88,242,182, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, +136,246,182, 3, 6, 0, 0, 0, 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, 67,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,128,255,182, 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, 68, 65, 84, 65,252, 3, 0, 0, 88,242,182, 3, 54, 0, 0, 0, + 51, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, + 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, + 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, + 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, + 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, + 53, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, + 64, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, + 0, 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, + 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, + 75, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, + 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 97, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, + 79, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, + 36, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0, +100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0, +104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0, +112, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, + 0, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, +111, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,196, 8, 0, 0,136,246,182, 3, 65, 0, 0, 0, 51, 0, 0, 0,250,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, + 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 21,172,131, 63, 96,211, 93, 59,146,128, 81, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,174,131,185, 63, + 96,211, 93, 59,225,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,149,128, 81, 63, 96,211, 93, 59, +251,168, 27, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59,226,151,158, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,246,168, 27, 63, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, + 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 24,172,131, 63, + 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, +176,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, + 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +226,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 86,162,203, 62, + 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59, +144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,224,151,158, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, + 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63, +210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, + 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, + 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 99,131,140, 63, 72, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63, +111,179,141, 63,174,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63, +188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63, +236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, + 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63, +111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, + 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63, +102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 56,127,118,190,220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61, +242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63, +122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,200, 84,104, 61,242, 65, 79, 63, 96,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, +242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, + 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189, +120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, + 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62, +113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62, +102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, + 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, +188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,180,131,140, 63, +116, 19,186, 62,244,140,159, 63, 50, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63, 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62,112,226, 76, 63, 64, 38,135, 61, +240,244,114, 63, 4,221, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 96, 44,135, 61, 61, 84,181, 62, +176,104,169,189, 93,189, 0, 63, 80, 1,109,190,248,207, 38, 63,144,109,169,189, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +174,225, 76, 63,116, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 42,244,114, 63,244, 28, 3, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, + 96, 44,135, 61, 51,207, 38, 63, 24,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, + 52,207, 38, 63,236, 65, 79, 63,174,225, 76, 63,116, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,188,188, 0, 63,120, 47, 41, 63,122, 84,181, 62,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 52,207, 38, 63, +248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 14, 95, 82, 62, 0, 21,186, 62,144, 82,104, 61,128,223, 91, 62, +138, 94, 82, 62, 48, 43,135, 61,122, 84,181, 62, 32,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63, +102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,236, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, 14, 95, 82, 62, 0, 21,186, 62, +122, 84,181, 62,248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, 56,207, 38, 63, +111,179,141, 63,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,127, 84,181, 62,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,128,106,188,189, +176, 20,186, 62,160, 84,104, 61, 0, 29, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 3, 0, 0, +128,255,182, 3, 59, 0, 0, 0,204, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0,224, 2,183, 3, 52, 0, 0, 0, 1, 0, 0, 0,240, 44,183, 3,184,215,182, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 48, 54, 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, 40, 4,183, 3, 8, 29,183, 3, + 16, 33,183, 3, 0, 0, 0, 0,232, 5,183, 3, 80, 18,183, 3, 0, 0, 0, 0,176, 41,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 4,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200, 16,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 27,183, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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, 40, 4,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 96, 4,183, 3, 58, 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,232, 5,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,176, 10, 0, 0,232, 5,183, 3, 58, 0, 0, 0,114, 0, 0, 0,223, 28,215, 63, + 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192, +182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191, +175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184, +242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63, +107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,191, 87,161,192,148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192, +114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,182,115, 6,193,128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193, +127, 31,215, 64, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, + 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,147, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65, 18, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,246, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64, +110, 59, 60, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 72, 36,190,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65, 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65, 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,135, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64, +217, 86,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, + 62, 30, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, + 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64, +240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,127,212,140,184,242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63, +172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184, +181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191, +147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 10,152, 60, 56, + 16, 33,215,191,245, 35,190, 64, 0, 0, 42,221, 41,123,255, 0, 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191, 74, 36,190,192, + 0, 0, 42,221,215,132,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,200, 16,183, 3, 58, 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, + 80, 18,183, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 9, 0, 0, 80, 18,183, 3, + 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, + 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 34, 0, 25, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 34, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 26, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, + 22, 0, 0, 0, 40, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 42, 0, 0, 0, + 0, 0, 34, 0, 13, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, + 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 46, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, + 47, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, + 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 34, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, + 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, + 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 69, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 34, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, + 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, + 0, 0, 34, 0, 33, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, + 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, + 0, 0, 34, 0, 71, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, + 17, 0, 0, 0, 73, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, + 84, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,110, 0, 0, 0, + 0, 0, 34, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, + 88, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, + 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, + 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,101, 0, 0, 0, + 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, + 94, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, + 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0, +100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, + 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, + 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, +109, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, + 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, + 60, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 93, 0, 0, 0, + 0, 0, 34, 0, 31, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, + 90, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0,128, 27,183, 3, 58, 1, 0, 0, 5, 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, 8, 29,183, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, + 16, 33,183, 3, 6, 0, 0, 0, 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, 67,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,176, 41,183, 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, 68, 65, 84, 65,212, 3, 0, 0, 8, 29,183, 3, 54, 0, 0, 0, + 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, + 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, + 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, + 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, + 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, + 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, + 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, + 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, + 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, +103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, + 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, + 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,108, 8, 0, 0, + 16, 33,183, 3, 65, 0, 0, 0, 49, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, + 0, 29, 3, 63, 26, 95, 82, 62,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, + 26, 95, 82, 62,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,190,188, 0, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,160, 84,104, 61, 0, 29, 3, 63,128,106,188,189,176, 20,186, 62,144, 82,104, 61,128,223, 91, 62, 14, 95, 82, 62, + 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,127, 84,181, 62,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63, +122, 84,181, 62,248, 28, 3, 63,188,188, 0, 63,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63, +111,179,141, 63,190,188, 0, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,248, 28, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62, +185,188, 0, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,236, 65, 79, 63,188,188, 0, 63, +120, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63,116, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +122, 84,181, 62, 32,224, 91, 62,138, 94, 82, 62, 48, 43,135, 61, 61, 84,181, 62,176,104,169,189,185,188, 0, 63, 96, 44,135, 61, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 51,207, 38, 63, + 24,224, 91, 62,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63, +174,225, 76, 63,116, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 51,207, 38, 63, 24,224, 91, 62,185,188, 0, 63, 96, 44,135, 61,248,207, 38, 63,144,109,169,189,112,226, 76, 63, + 64, 38,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,240,244,114, 63, 4,221, 91, 62,180,131,140, 63,116, 19,186, 62, + 42,244,114, 63,244, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62, +113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63, +160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62, +113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190, +216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, + 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, +242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 64,127,118,190,216, 28, 3, 63, +128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62, +102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +200, 84,104, 61,244, 65, 79, 63, 96,105,188,189,120, 47, 41, 63, 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63, +102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63, + 56,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, +172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63, +111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63, +172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63, +102, 84,117, 63,174,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 52,207, 38, 63,111,179,141, 63,190,188, 0, 63,171,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63, 99,131,140, 63, + 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, + 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63, +210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, + 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63, +210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, + 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +176,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, + 85,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59,226,151,158, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,142,128, 81, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, +247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, + 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, + 24,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,251,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, + 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +225,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,146,128, 81, 63, 96,211, 93, 59,250,168, 27, 63, 96,211, 93, 59,251,168, 27, 63, + 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 3, 0, 0, +176, 41,183, 3, 59, 0, 0, 0,196, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0,240, 44,183, 3, 52, 0, 0, 0, 1, 0, 0, 0, 0, 87,183, 3,224, 2,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 48, 55, 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, 56, 46,183, 3, 24, 71,183, 3, + 32, 75,183, 3, 0, 0, 0, 0,248, 47,183, 3, 96, 60,183, 3, 0, 0, 0, 0,192, 83,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,112, 46,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216, 58,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 69,183, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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, 56, 46,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0,112, 46,183, 3, 58, 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,248, 47,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,176, 10, 0, 0,248, 47,183, 3, 58, 0, 0, 0,114, 0, 0, 0,223, 28,215, 63, + 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192, +182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191, +175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184, +242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63, +107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,191, 87,161,192,148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192, +114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,182,115, 6,193,128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193, +127, 31,215, 64, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, + 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,147, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65, 18, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,246, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64, +110, 59, 60, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 72, 36,190,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65, 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65, 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,135, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64, +217, 86,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, + 62, 30, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, + 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64, +240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,127,212,140,184,242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63, +172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184, +181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191, +147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 10,152, 60, 56, + 16, 33,215,191,245, 35,190, 64, 0, 0, 42,221, 41,123,255, 0, 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191, 74, 36,190,192, + 0, 0, 42,221,215,132,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,216, 58,183, 3, 58, 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, + 96, 60,183, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 9, 0, 0, 96, 60,183, 3, + 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, + 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 34, 0, 25, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 34, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, + 26, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, + 22, 0, 0, 0, 40, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 42, 0, 0, 0, + 0, 0, 34, 0, 13, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, + 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 46, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, + 47, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, + 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 34, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, + 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, + 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, + 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 69, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 34, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, + 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, + 0, 0, 34, 0, 33, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, + 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, + 0, 0, 34, 0, 71, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, + 17, 0, 0, 0, 73, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, + 84, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,110, 0, 0, 0, + 0, 0, 34, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, + 88, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, + 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, + 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,101, 0, 0, 0, + 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, + 94, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, + 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0, +100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, + 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, + 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0, +107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, +109, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, + 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, + 60, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 93, 0, 0, 0, + 0, 0, 34, 0, 31, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, + 90, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0,144, 69,183, 3, 58, 1, 0, 0, 5, 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, 24, 71,183, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, + 32, 75,183, 3, 6, 0, 0, 0, 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, 67,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,192, 83,183, 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, 68, 65, 84, 65,212, 3, 0, 0, 24, 71,183, 3, 54, 0, 0, 0, + 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, + 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, + 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, + 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, + 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, + 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, + 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, + 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, + 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, +103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, + 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, + 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,108, 8, 0, 0, + 32, 75,183, 3, 65, 0, 0, 0, 49, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, + 0, 29, 3, 63, 26, 95, 82, 62,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, + 26, 95, 82, 62,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,190,188, 0, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,160, 84,104, 61, 0, 29, 3, 63,128,106,188,189,176, 20,186, 62,144, 82,104, 61,128,223, 91, 62, 14, 95, 82, 62, + 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,127, 84,181, 62,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63, +122, 84,181, 62,248, 28, 3, 63,188,188, 0, 63,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63, +111,179,141, 63,190,188, 0, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,248, 28, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62, +185,188, 0, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,236, 65, 79, 63,188,188, 0, 63, +120, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63,116, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +122, 84,181, 62, 32,224, 91, 62,138, 94, 82, 62, 48, 43,135, 61, 61, 84,181, 62,176,104,169,189,185,188, 0, 63, 96, 44,135, 61, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 51,207, 38, 63, + 24,224, 91, 62,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63, +174,225, 76, 63,116, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 51,207, 38, 63, 24,224, 91, 62,185,188, 0, 63, 96, 44,135, 61,248,207, 38, 63,144,109,169,189,112,226, 76, 63, + 64, 38,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,240,244,114, 63, 4,221, 91, 62,180,131,140, 63,116, 19,186, 62, + 42,244,114, 63,244, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62, +113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63, +160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62, +113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190, +216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, + 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, +242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 64,127,118,190,216, 28, 3, 63, +128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62, +102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +200, 84,104, 61,244, 65, 79, 63, 96,105,188,189,120, 47, 41, 63, 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,242, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63, +102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63, + 56,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, +172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63, +111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63, +172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63, +102, 84,117, 63,174,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 52,207, 38, 63,111,179,141, 63,190,188, 0, 63,171,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63, 99,131,140, 63, + 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, + 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63, +210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, + 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63, +210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, + 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +176,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, + 85,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59,226,151,158, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,142,128, 81, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, +247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, + 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, + 24,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,251,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, + 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +225,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,146,128, 81, 63, 96,211, 93, 59,250,168, 27, 63, 96,211, 93, 59,251,168, 27, 63, + 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 3, 0, 0, +192, 83,183, 3, 59, 0, 0, 0,196, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0, 0, 87,183, 3, 52, 0, 0, 0, 1, 0, 0, 0, 40,130,183, 3,240, 44,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 48, 56, 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, 72, 88,183, 3,160,113,183, 3, +208,117,183, 3, 0, 0, 0, 0, 8, 90,183, 3,160,102,183, 3, 0, 0, 0, 0,200,126,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,128, 88,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24,101,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,112,183, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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, 72, 88,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0,128, 88,183, 3, 58, 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, 8, 90,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,224, 10, 0, 0, 8, 90,183, 3, 58, 0, 0, 0,116, 0, 0, 0,223, 28,215, 63, + 77, 31, 87, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65,242, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192, +182,115, 6, 65,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64,250, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,172,163,138,184,181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191, +175, 31,215, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64,250, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184, +242, 87,161, 64,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64,250, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63, +107, 32, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,239, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,238, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,183,115, 6,193,127, 31,215, 64,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, + 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64, +150, 29,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64,247, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64,242, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65, +146, 30,215, 64, 74, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63, +226, 3, 41,184, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,135, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,246, 28,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 18, 29,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,147, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222, 33,215,191, +183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,182,115, 6,193, +128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 78, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65, 74, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 72, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 5, 32, 87,192,114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,191, 87,161,192, +148, 87, 33, 65,133, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65,139, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65, 0, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 12, 29,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65, 9, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,253, 28,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65,142, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,136, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64, +240, 87,161, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,127,212,140,184,242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63, +172, 31,215, 64, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184, +181,115, 6, 65, 71, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191, +147, 87, 33, 65, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 24,101,183, 3, 58, 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,160,102,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0,160,102,183, 3, 55, 0, 0, 0,198, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, + 0, 0, 34, 0, 20, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, + 28, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 34, 0, 29, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, + 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, + 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, + 3, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, + 9, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, + 6, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, + 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 34, 0, 39, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0, +101, 0, 0, 0, 0, 0, 34, 0, 41, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, + 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, + 0, 0, 34, 0, 51, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, + 56, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,114, 0, 0, 0, + 0, 0, 34, 0, 65, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, +115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, + 42, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, + 0, 0, 34, 0, 42, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, + 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, + 60, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, + 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 58, 0, 0, 0, + 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, + 58, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 34, 0, 64, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, + 67, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, + 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 68, 0, 0, 0, + 0, 0, 34, 0, 51, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, + 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0,102, 0, 0, 0, + 0, 0, 34, 0, 72, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, + 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 77, 0, 0, 0, + 0, 0, 34, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, + 78, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 85, 0, 0, 0, + 0, 0, 34, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, + 89, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, + 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, + 0, 0, 34, 0, 82, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, + 87, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 34, 0, 93, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, + 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 97, 0, 0, 0, + 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, +100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, + 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0, +114, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, +104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0, + 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0, +113, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, +107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, + 0, 0, 34, 0,106, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0, +113, 0, 0, 0, 0, 0, 34, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 24,112,183, 3, 58, 1, 0, 0, 5, 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,160,113,183, 3, 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, 0, 0, 0, 0, 85, 86, 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, 8,195,103, 96, 0, 0, 0, 6, - 0, 0, 0, 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, 67,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, 8,195,104,144, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,117,183, 3, 6, 0, 0, 0, + 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, 67,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,200,126,183, 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, 68, 65, 84, 65, 0, 0, 0,120, 8,195,102,192, 0, 0, 0, 54, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 5, - 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 2, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 8, 8,195,103, 96, - 0, 0, 0, 65, 0, 0, 0, 6, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 96, 8,195,104,144, 0, 0, 0, 59, - 0, 0, 0, 24,255,255,255,255,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, 0, 0, 0, 0, 68, 65, 84, 65,252, 3, 0, 0,160,113,183, 3, 54, 0, 0, 0, 51, 0, 0, 0, 18, 0, 0, 0, + 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, + 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, + 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 42, 0, 0, 0, + 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, + 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, + 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, + 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, + 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, + 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, 74, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, + 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 73, 0, 0, 0, + 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, + 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0, +101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, + 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0, +105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, +106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0,108, 0, 0, 0, +109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0, +115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, + 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,196, 8, 0, 0, +208,117,183, 3, 65, 0, 0, 0, 51, 0, 0, 0,250,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, 84,162,203, 62, + 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59, +146,128, 81, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,225,151,158, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,149,128, 81, 63, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59, +246,168, 27, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, + 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,246,168, 27, 63, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, +247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 24,172,131, 63, 96,211, 93, 59,142,128, 81, 63, + 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +174,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,247,168, 27, 63, + 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, + 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,248,168, 27, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, +144,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, + 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, + 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, + 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, + 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 72, 47, 41, 63, + 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,174,225, 76, 63, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63, +188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63, +236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63, +172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63, +173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63, +102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, + 56,127,118,190,220, 28, 3, 63, 56,127,118,190,220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62, +102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63,122, 84,181, 62,113,179,141, 63, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61, +242, 65, 79, 63, 96,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63, +122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190, +216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62, +113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63, +128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62, +113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, + 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, +122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,180,131,140, 63,116, 19,186, 62,244,140,159, 63, + 50, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +174,225, 76, 63, 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62,112,226, 76, 63, 64, 38,135, 61,240,244,114, 63, 4,221, 91, 62, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 96, 44,135, 61, 61, 84,181, 62,176,104,169,189, 93,189, 0, 63, + 80, 1,109,190,248,207, 38, 63,144,109,169,189, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,116, 47, 41, 63, + 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,185,188, 0, 63, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, 96, 44,135, 61, 51,207, 38, 63, + 24,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63, +174,225, 76, 63,116, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63, +120, 47, 41, 63,122, 84,181, 62,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 52,207, 38, 63,248, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 14, 95, 82, 62, 0, 21,186, 62,144, 82,104, 61,128,223, 91, 62,138, 94, 82, 62, 48, 43,135, 61, +122, 84,181, 62, 32,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63,127, 84,181, 62, +242, 65, 79, 63,188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 26, 95, 82, 62,120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62,248, 28, 3, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, 56,207, 38, 63,111,179,141, 63,188,188, 0, 63, +173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63, +160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,127, 84,181, 62,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,128,106,188,189,176, 20,186, 62,160, 84,104, 61, + 0, 29, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 3, 0, 0,200,126,183, 3, 59, 0, 0, 0, +204, 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, 0, 0, 80, 65, 0, 0, 1,224, 3,163,162, 32, 0, 0, 1, 48, 0, 0, 0, 1, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 40,130,183, 3, + 52, 0, 0, 0, 1, 0, 0, 0, 80,173,183, 3, 0, 87,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, + 48, 48, 57, 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,112,131,183, 3,200,156,183, 3,248,160,183, 3, 0, 0, 0, 0, + 48,133,183, 3,200,145,183, 3, 0, 0, 0, 0,240,169,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168,131,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,144,183, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,155,183, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,198, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,112,131,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, +168,131,183, 3, 58, 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, 48,133,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,224, 10, 0, 0, 48,133,183, 3, 58, 0, 0, 0,116, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191, +147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184, +181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63, +172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64, +240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222,158,142,184,239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192, +147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0,183,115, 6,193,127, 31,215, 64,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,222, 33,215,191, +183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,239, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63, +226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65, +146, 30,215, 64,242, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64, +150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 98,234, 53, 56, 38, 33,215,191, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,135, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65, +117, 31,215, 64,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,250, 28,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65, +117, 31,215, 64, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,141, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64, +112, 59, 60, 65, 77, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 72, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, + 78, 31, 87, 65,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,141, 43,100, 64, + 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,246, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, + 78, 31, 87, 65, 2, 29,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65, 14, 29,152, 63, + 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 18, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, + 78, 31, 87, 65, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,250, 28,152,191, + 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,147, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, + 78, 31, 87, 65,141, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,135, 43,100,192, + 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, + 14, 33,215, 63, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,222, 33,215,191,183,190,135, 56, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193, +127, 31,215, 64,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,182,115, 6,193,128, 31,215, 64,127, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 74, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192, +114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,191, 87,161,192,148, 87, 33, 65,133, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192,181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 9, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192, +113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,142, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63, +107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184, +242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191, +175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192, +182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,223, 28,215, 63, + 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 64,144,183, 3, + 58, 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,200,145,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0,200,145,183, 3, 55, 0, 0, 0,198, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, + 22, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, + 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 34, 0, 4, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 17, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 34, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, + 14, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 39, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, + 41, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, +109, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, + 64, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 82, 0, 0, 0, + 0, 0, 34, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, +114, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, + 51, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, + 44, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, + 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 48, 0, 0, 0, + 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, + 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, + 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 62, 0, 0, 0, + 0, 0, 34, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, + 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 34, 0, 61, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, + 44, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,110, 0, 0, 0, + 0, 0, 34, 0, 70, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, + 75, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0, 81, 0, 0, 0, + 0, 0, 34, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, + 75, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, + 80, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,113, 0, 0, 0, + 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, + 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 34, 0, 83, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, + 86, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, + 88, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, + 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, + 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 34, 0, 90, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, +101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, + 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, +105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, + 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0, +103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, +108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, + 0, 0, 34, 0,107, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, +111, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, + 64,155,183, 3, 58, 1, 0, 0, 5, 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,200,156,183, 3, 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, 0, 0, 0, 0, 85, 86, 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,248,160,183, 3, 6, 0, 0, 0, 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, 67,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,240,169,183, 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, + 68, 65, 84, 65,252, 3, 0, 0,200,156,183, 3, 54, 0, 0, 0, 51, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, + 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0, +114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, + 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, + 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, + 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, + 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, + 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, + 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, +100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, + 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0, +102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, + 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, + 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, +111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, + 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, + 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,196, 8, 0, 0,248,160,183, 3, 65, 0, 0, 0, + 51, 0, 0, 0,250,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59,251,168, 27, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,146,128, 81, 63, 96,211, 93, 59, +149,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, + 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,225,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,149,128, 81, 63, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, +142,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59, 22,172,131, 63, + 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +246,168, 27, 63, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 24,172,131, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, 96,211, 93, 59, +226,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, + 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, + 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, + 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, + 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63, +210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 72, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, + 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63, +102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,174,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, + 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63, +102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63, +173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63, +172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63, +111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, + 56,127,118,190,220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62, +102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63, +188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61,242, 65, 79, 63, 96,105,188,189, +120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190, +216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63, +160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63, +173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63, +128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62, +113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63, +128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61, +242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,180,131,140, 63,116, 19,186, 62,244,140,159, 63, 50, 28, 3, 63, 99,131,140, 63, + 76, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63, 0, 21,186, 62, + 51,207, 38, 63, 24,224, 91, 62,112,226, 76, 63, 64, 38,135, 61,240,244,114, 63, 4,221, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,185,188, 0, 63, 96, 44,135, 61, 61, 84,181, 62,176,104,169,189, 93,189, 0, 63, 80, 1,109,190,248,207, 38, 63, +144,109,169,189, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,116, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63, +174,225, 76, 63, 0, 21,186, 62, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, + 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, 96, 44,135, 61, 51,207, 38, 63, 24,224, 91, 62, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,174,225, 76, 63,116, 47, 41, 63, + 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,120, 47, 41, 63,122, 84,181, 62, +248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 52,207, 38, 63,248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 14, 95, 82, 62, 0, 21,186, 62,144, 82,104, 61,128,223, 91, 62,138, 94, 82, 62, 48, 43,135, 61,122, 84,181, 62, 32,224, 91, 62, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,188,188, 0, 63, +120, 47, 41, 63, 52,207, 38, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,120, 47, 41, 63, +160, 84,104, 61, 0, 29, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62,248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, 56,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,122, 84,181, 62, +113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63, + 26, 95, 82, 62,120, 47, 41, 63,127, 84,181, 62,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189, +120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,128,106,188,189,176, 20,186, 62,160, 84,104, 61, 0, 29, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 3, 0, 0,240,169,183, 3, 59, 0, 0, 0,204, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 80,173,183, 3, 52, 0, 0, 0, 1, 0, 0, 0, + 96,215,183, 3, 40,130,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 48, 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,152,174,183, 3,120,199,183, 3,128,203,183, 3, 0, 0, 0, 0, 88,176,183, 3,192,188,183, 3, + 0, 0, 0, 0, 32,212,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,174,183, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,187,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240,197,183, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +114, 0, 0, 0,192, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, + 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 4, 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, +152,174,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,208,174,183, 3, 58, 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, 88,176,183, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,176, 10, 0, 0, + 88,176,183, 3, 58, 0, 0, 0,114, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,175, 86,161, 64,144, 87, 33, 65, 74, 36,190,192, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,243,229,133,184, +112, 59, 60, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65, 69, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,194, 87,161,192,179, 31,215, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,208, 28,215, 63, +146, 87, 33, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 13, 32, 87,192,244, 87,161, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,226, 29, 87, 64, +179,115, 6, 65, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 44, 33,215,191,113, 32, 87, 64, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,173, 86,161, 64, +170, 31,215, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64, 71, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64, 69, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,222,158,142,184,239, 33,215, 63, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65,136, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,142, 43,100,192, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,148, 43,100,192,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65,253, 28,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 9, 29,152,191, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 20, 29,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65, 12, 29,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 0, 29,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,244, 28,152, 63,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65,232, 28,152, 63,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,121, 31,215,192, +181,115, 6, 65,139, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,191, 87,161,192,148, 87, 33, 65,133, 43,100, 64, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0, 5, 32, 87,192,114, 59, 60, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 32, 33,215,191, 81, 31, 87, 65,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,122, 31,215,192, +180,115, 6, 65, 72, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,192, 87,161,192,147, 87, 33, 65, 74, 36,190,192, +255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65, 77, 36,190,192,255, 63, 1,192,129, 90,255, 0, + 0, 0, 0, 0, 36, 33,215,191, 81, 31, 87, 65, 78, 36,190,192,255, 63, 1,192,129, 90,255, 0, 0, 0, 0, 0,182,115, 6,193, +128, 31,215, 64,127, 43,100, 64,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,232, 28,152, 63, +129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64, 32, 29,152,191,129, 90,127,165, 0, 0,255, 0, + 2, 0, 0, 0,183,115, 6,193,127, 31,215, 64,154, 43,100,192,129, 90,127,165, 0, 0,255, 0, 2, 0, 0, 0,222, 33,215,191, +183,190,135, 56, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63, 72, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,170, 31,215,192,190, 87,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,135, 43,100,192, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,141, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,147, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,153, 43,100,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,250, 28,152,191, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 6, 29,152,191, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 18, 29,152,191,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65, 30, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65, 14, 29,152, 63, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65, 2, 29,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,246, 28,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,234, 28,152, 63,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65,141, 43,100, 64, 0, 0, 2,128, 0, 0,255, 0, 2, 0, 0, 0,199, 28,215, 63, 78, 31, 87, 65,135, 43,100, 64, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,225, 29, 87, 64,110, 59, 60, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0,177, 86,161, 64,146, 87, 33, 65,129, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,213, 91,136,184, + 43, 3,114, 65, 72, 36,190,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65, 77, 36,190,192, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 72, 36,190,192, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,135, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,141, 43,100, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 2, 29,152, 63, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65, 14, 29,152, 63,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64, 6, 29,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64, +151,115, 6, 65,250, 28,152,191,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0, 43,115, 6, 65,117, 31,215, 64,141, 43,100,192, +127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,135, 43,100,192,127,165,127,165, 0, 0,255, 0, + 2, 0, 0, 0, 15, 33,215, 63,226, 3, 41,184, 67, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 4, 32, 87, 64, +150, 29,215, 63, 68, 36,190,192, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64, 69, 36,190,192, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64, 72, 36,190,192, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,159,115, 6, 65,146, 30,215, 64, 74, 36,190,192,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,159,115, 6, 65, +146, 30,215, 64,242, 35,190, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,127, 31,215, 64,217, 86,161, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,193, 87,161, 64, 62, 30, 87, 64,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 4, 32, 87, 64,150, 29,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 15, 33,215, 63, +226, 3, 41,184,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,150, 30,215, 64,151,115, 6, 65,244, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,217, 29, 87, 64,112, 59, 60, 65,239, 35,190, 64, 1,192, 1,192,129, 90,255, 0, + 2, 0, 0, 0,213, 91,136,184, 43, 3,114, 65,244, 35,190, 64,127,165,127,165, 0, 0,255, 0, 2, 0, 0, 0,170, 31,215,192, +190, 87,161, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,240, 87,161,192, 2, 32, 87, 64,244, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,102, 32, 87,192, 14, 33,215, 63,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,222, 33,215,191,183,190,135, 56,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 36, 33,215,191, + 81, 31, 87, 65,238, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0, 7, 32, 87,192,113, 59, 60, 65,239, 35,190, 64, +255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,192, 87,161,192,147, 87, 33, 65,242, 35,190, 64,255, 63, 1,192,129, 90,255, 0, + 2, 0, 0, 0,122, 31,215,192,180,115, 6, 65,244, 35,190, 64,255, 63, 1,192,129, 90,255, 0, 2, 0, 0, 0,222,158,142,184, +239, 33,215, 63,248, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,191, 28,215, 63,107, 32, 87, 64,247, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,220, 29, 87, 64,240, 87,161, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,173, 86,161, 64,170, 31,215, 64,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 44, 33,215,191, +113, 32, 87, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,127,212,140,184,242, 87,161, 64,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,201, 28,215, 63,172, 31,215, 64,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,226, 29, 87, 64,179,115, 6, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 13, 32, 87,192, +244, 87,161, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 37, 33,215,191,175, 31,215, 64,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,172,163,138,184,181,115, 6, 65,245, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,208, 28,215, 63,146, 87, 33, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,194, 87,161,192, +179, 31,215, 64,250, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 6, 32, 87,192,182,115, 6, 65,248, 35,190, 64, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 18, 33,215,191,147, 87, 33, 65,247, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,243,229,133,184,112, 59, 60, 65,244, 35,190, 64, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,175, 86,161, 64, +144, 87, 33, 65,242, 35,190, 64, 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0,223, 28,215, 63, 77, 31, 87, 65,242, 35,190, 64, + 1,192, 1,192,129, 90,255, 0, 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191,245, 35,190, 64, 0, 0, 42,221, 41,123,255, 0, + 2, 0, 0, 0, 10,152, 60, 56, 16, 33,215,191, 74, 36,190,192, 0, 0, 42,221,215,132,255, 0, 2, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 56,187,183, 3, 58, 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,192,188,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 0, 9, 0, 0,192,188,183, 3, 55, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, + 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 34, 0, 23, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, + 28, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, + 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 34, 0, 3, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, + 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 38, 0, 0, 0, + 0, 0, 34, 0, 26, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 40, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 42, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, + 9, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 34, 0, 53, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, + 49, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 52, 0, 0, 0, + 0, 0, 34, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, + 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 52, 0, 0, 0, + 0, 0, 34, 0, 51, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, + 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, + 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, + 0, 0, 34, 0, 68, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, + 69, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, + 64, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, + 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 34, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, + 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 34, 0, 16, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 73, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, + 79, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 82, 0, 0, 0, + 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, + 97, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, + 84, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0,106, 0, 0, 0, + 0, 0, 34, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, + 93, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0,108, 0, 0, 0, + 0, 0, 34, 0, 90, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, + 96, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 99, 0, 0, 0, + 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, +100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, + 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0, +109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, +103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, + 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0, +109, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, + 65, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 85, 0, 0, 0, + 0, 0, 34, 0, 59, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, +110, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, + 32, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, +240,197,183, 3, 58, 1, 0, 0, 5, 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,120,199,183, 3, 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, 0, 0, 0, 0, 85, 86, 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,128,203,183, 3, 6, 0, 0, 0, 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, 67,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, 32,212,183, 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, + 68, 65, 84, 65,212, 3, 0, 0,120,199,183, 3, 54, 0, 0, 0, 49, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, + 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, + 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, + 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, + 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, + 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, +111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, + 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, + 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, + 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, +110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, +104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, + 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0, +103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, + 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, +107, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,108, 8, 0, 0,128,203,183, 3, 65, 0, 0, 0, 49, 0, 0, 0,160, 84,104, 61, +242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, 26, 95, 82, 62,120, 47, 41, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63, +190,188, 0, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61, 0, 29, 3, 63,128,106,188,189, +176, 20,186, 62,144, 82,104, 61,128,223, 91, 62, 14, 95, 82, 62, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +127, 84,181, 62,242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,122, 84,181, 62,248, 28, 3, 63,188,188, 0, 63,120, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,190,188, 0, 63,102, 84,117, 63, 52,207, 38, 63, +236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,248, 28, 3, 63, + 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 52,207, 38, 63,236, 65, 79, 63,188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63, +116, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62, 32,224, 91, 62,138, 94, 82, 62, 48, 43,135, 61, + 61, 84,181, 62,176,104,169,189,185,188, 0, 63, 96, 44,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63, +248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,116, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, + 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 51,207, 38, 63, 24,224, 91, 62,185,188, 0, 63, + 96, 44,135, 61,248,207, 38, 63,144,109,169,189,112,226, 76, 63, 64, 38,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +240,244,114, 63, 4,221, 91, 62,180,131,140, 63,116, 19,186, 62, 42,244,114, 63,244, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62, +102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63, +128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63, +173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63, +160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189, +120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63, +122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189, +120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, +188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61, +242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, + 56,127,118,190,220, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62, +113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61,244, 65, 79, 63, 96,105,188,189,120, 47, 41, 63, + 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63, +236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63, 56,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63, +188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63, +111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63, +173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, + 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, + 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,174,225, 76, 63,102, 84,117, 63, 44,244,114, 63, +236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,190,188, 0, 63,171,188,160, 63, +188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63, +210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, + 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, + 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, + 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, + 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, + 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, + 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59, +226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,176,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, +224,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, + 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, +247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 24,172,131, 63, + 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +142,128, 81, 63, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59,226,151,158, 63, + 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59, +149,128, 81, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,251,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,246,168, 27, 63, + 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,225,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, + 22,172,131, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,146,128, 81, 63, + 96,211, 93, 59,250,168, 27, 63, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 3, 0, 0, 32,212,183, 3, 59, 0, 0, 0,196, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 96,215,183, 3, 52, 0, 0, 0, 1, 0, 0, 0, +144,228,183, 3, 80,173,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 49, 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,168,216,183, 3,128,225,183, 3, 80,226,183, 3, 0, 0, 0, 0,104,218,183, 3, 72,222,183, 3, + 0, 0, 0, 0,224,227,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,216,183, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,220,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248,223,183, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 0, 0, 0, 32, 0, 0, 0, 8, 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, 4,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 5, 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, +168,216,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,224,216,183, 3, 58, 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,104,218,183, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 2, 0, 0, +104,218,183, 3, 58, 0, 0, 0, 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,192,220,183, 3, + 58, 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, 72,222,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 72,222,183, 3, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, + 2, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 35, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, + 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 35, 0, 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 35, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 35, 0, 14, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,248,223,183, 3, 58, 1, 0, 0, + 5, 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,128,225,183, 3, 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, 0, 0, 0, 0, 85, 86, 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, 80,226,183, 3, 6, 0, 0, 0, 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, 67,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,224,227,183, 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, 68, 65, 84, 65,160, 0, 0, 0, +128,225,183, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, + 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 2, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, + 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 2, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, + 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0, 80,226,183, 3, 65, 0, 0, 0, 8, 0, 0, 0, + 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 0,229,213, 62,162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63, +162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 68, 65, 84, 65,128, 0, 0, 0,224,227,183, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,144,228,183, 3, + 52, 0, 0, 0, 1, 0, 0, 0,192,241,183, 3, 96,215,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, + 48, 49, 50, 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,216,229,183, 3,176,238,183, 3,128,239,183, 3, 0, 0, 0, 0, +152,231,183, 3,120,235,183, 3, 0, 0, 0, 0, 16,241,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,230,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,233,183, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,237,183, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,216,229,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, + 16,230,183, 3, 58, 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,152,231,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,152,231,183, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0,240,233,183, 3, 58, 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,120,235,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,120,235,183, 3, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, + 40,237,183, 3, 58, 1, 0, 0, 5, 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,176,238,183, 3, 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, 0, 0, 0, 0, 85, 86, 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,128,239,183, 3, 6, 0, 0, 0, 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, 67,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, 16,241,183, 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, + 68, 65, 84, 65,160, 0, 0, 0,176,238,183, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,128,239,183, 3, + 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 18,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 16,241,183, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0,192,241,183, 3, 52, 0, 0, 0, 1, 0, 0, 0,240,254,183, 3,144,228,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 49, 51, 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, 8,243,183, 3,224,251,183, 3, +176,252,183, 3, 0, 0, 0, 0,200,244,183, 3,168,248,183, 3, 0, 0, 0, 0, 64,254,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64,243,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,247,183, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,250,183, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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, 8,243,183, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 64,243,183, 3, 58, 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,200,244,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,200,244,183, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 32,247,183, 3, 58, 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,168,248,183, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,168,248,183, 3, 55, 0, 0, 0, 32, 0, 0, 0, + 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 9, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 88,250,183, 3, 58, 1, 0, 0, 5, 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,224,251,183, 3, 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, 0, 0, 0, 0, 85, 86, 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,176,252,183, 3, 6, 0, 0, 0, + 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, 67,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, 64,254,183, 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, 68, 65, 84, 65,160, 0, 0, 0,224,251,183, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, + 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0,176,252,183, 3, 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 18,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 64,254,183, 3, 59, 0, 0, 0, + 32, 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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,240,254,183, 3, 52, 0, 0, 0, 1, 0, 0, 0, 32, 12,184, 3,192,241,183, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 52, 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, + 56, 0,184, 3, 16, 9,184, 3,224, 9,184, 3, 0, 0, 0, 0,248, 1,184, 3,216, 5,184, 3, 0, 0, 0, 0,112, 11,184, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 0,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 4,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136, 7,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, + 8, 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, 4,205, 76, 63, +172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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, 56, 0,184, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,112, 0,184, 3, 58, 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,248, 1,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,248, 1,184, 3, 58, 0, 0, 0, + 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 80, 4,184, 3, 58, 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, +216, 5,184, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0,216, 5,184, 3, + 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 35, 0, + 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,136, 7,184, 3, 58, 1, 0, 0, 5, 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, 16, 9,184, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, +224, 9,184, 3, 6, 0, 0, 0, 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, 67,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,112, 11,184, 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, 68, 65, 84, 65,160, 0, 0, 0, 16, 9,184, 3, 54, 0, 0, 0, + 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, + 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, + 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0,224, 9,184, 3, 65, 0, 0, 0, 8, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 0,229,213, 62, +162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, +112, 11,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 32, 12,184, 3, 52, 0, 0, 0, 1, 0, 0, 0, + 80, 25,184, 3,240,254,183, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 53, 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,104, 13,184, 3, 64, 22,184, 3, 16, 23,184, 3, 0, 0, 0, 0, 40, 15,184, 3, 8, 19,184, 3, + 0, 0, 0, 0,160, 24,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 13,184, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 17,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184, 20,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 0, 0, 0, 32, 0, 0, 0, 8, 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, 4,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 5, 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, +104, 13,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,160, 13,184, 3, 58, 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, 40, 15,184, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 2, 0, 0, + 40, 15,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,128, 17,184, 3, + 58, 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, 8, 19,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 8, 19,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, + 2, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 35, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, + 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 35, 0, 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 35, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 35, 0, 14, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,184, 20,184, 3, 58, 1, 0, 0, + 5, 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, 64, 22,184, 3, 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, 0, 0, 0, 0, 85, 86, 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, 16, 23,184, 3, 6, 0, 0, 0, 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, 67,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,160, 24,184, 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, 68, 65, 84, 65,160, 0, 0, 0, + 64, 22,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, + 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 2, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, + 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 2, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, + 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0, 16, 23,184, 3, 65, 0, 0, 0, 8, 0, 0, 0, + 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 0,229,213, 62,162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63, +162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 68, 65, 84, 65,128, 0, 0, 0,160, 24,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 80, 25,184, 3, + 52, 0, 0, 0, 1, 0, 0, 0,128, 38,184, 3, 32, 12,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, + 48, 49, 54, 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,152, 26,184, 3,112, 35,184, 3, 64, 36,184, 3, 0, 0, 0, 0, + 88, 28,184, 3, 56, 32,184, 3, 0, 0, 0, 0,208, 37,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 26,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 30,184, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 33,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,152, 26,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, +208, 26,184, 3, 58, 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, 88, 28,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 88, 28,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0,176, 30,184, 3, 58, 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, 56, 32,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 56, 32,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, +232, 33,184, 3, 58, 1, 0, 0, 5, 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,112, 35,184, 3, 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, 0, 0, 0, 0, 85, 86, 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, 64, 36,184, 3, 6, 0, 0, 0, 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, 67,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,208, 37,184, 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, + 68, 65, 84, 65,160, 0, 0, 0,112, 35,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 64, 36,184, 3, + 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 18,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,208, 37,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0,128, 38,184, 3, 52, 0, 0, 0, 1, 0, 0, 0,176, 51,184, 3, 80, 25,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 49, 55, 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,200, 39,184, 3,160, 48,184, 3, +112, 49,184, 3, 0, 0, 0, 0,136, 41,184, 3,104, 45,184, 3, 0, 0, 0, 0, 0, 51,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 43,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 47,184, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,200, 39,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 0, 40,184, 3, 58, 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,136, 41,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,136, 41,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,224, 43,184, 3, 58, 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,104, 45,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,104, 45,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, + 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 9, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 24, 47,184, 3, 58, 1, 0, 0, 5, 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,160, 48,184, 3, 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, 0, 0, 0, 0, 85, 86, 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,112, 49,184, 3, 6, 0, 0, 0, + 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, 67,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, 51,184, 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, 68, 65, 84, 65,160, 0, 0, 0,160, 48,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, + 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0,112, 49,184, 3, 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 18,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, 0, 51,184, 3, 59, 0, 0, 0, + 32, 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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,176, 51,184, 3, 52, 0, 0, 0, 1, 0, 0, 0,224, 64,184, 3,128, 38,184, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 56, 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, +248, 52,184, 3,208, 61,184, 3,160, 62,184, 3, 0, 0, 0, 0,184, 54,184, 3,152, 58,184, 3, 0, 0, 0, 0, 48, 64,184, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 53,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 57,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 60,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, + 8, 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, 4,205, 76, 63, +172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,248, 52,184, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 48, 53,184, 3, 58, 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,184, 54,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,184, 54,184, 3, 58, 0, 0, 0, + 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 16, 57,184, 3, 58, 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, +152, 58,184, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0,152, 58,184, 3, + 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 35, 0, + 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0, 72, 60,184, 3, 58, 1, 0, 0, 5, 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,208, 61,184, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, +160, 62,184, 3, 6, 0, 0, 0, 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, 67,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, 48, 64,184, 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, 68, 65, 84, 65,160, 0, 0, 0,208, 61,184, 3, 54, 0, 0, 0, + 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, + 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, + 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0,160, 62,184, 3, 65, 0, 0, 0, 8, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 0,229,213, 62, +162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, + 48, 64,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,224, 64,184, 3, 52, 0, 0, 0, 1, 0, 0, 0, + 16, 78,184, 3,176, 51,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 49, 57, 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, 40, 66,184, 3, 0, 75,184, 3,208, 75,184, 3, 0, 0, 0, 0,232, 67,184, 3,200, 71,184, 3, + 0, 0, 0, 0, 96, 77,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 66,184, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 70,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120, 73,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 0, 0, 0, 32, 0, 0, 0, 8, 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, 4,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 5, 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, + 40, 66,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 96, 66,184, 3, 58, 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,232, 67,184, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 2, 0, 0, +232, 67,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 64, 70,184, 3, + 58, 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,200, 71,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,200, 71,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, + 2, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 35, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, + 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 35, 0, 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 35, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 35, 0, 14, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,120, 73,184, 3, 58, 1, 0, 0, + 5, 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, 75,184, 3, 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, 0, 0, 0, 0, 85, 86, 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,208, 75,184, 3, 6, 0, 0, 0, 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, 67,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, 96, 77,184, 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, 68, 65, 84, 65,160, 0, 0, 0, + 0, 75,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, + 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 2, 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, + 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 2, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, + 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0,208, 75,184, 3, 65, 0, 0, 0, 8, 0, 0, 0, + 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0, 0,229,213, 62,162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63, +162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 68, 65, 84, 65,128, 0, 0, 0, 96, 77,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 16, 78,184, 3, + 52, 0, 0, 0, 1, 0, 0, 0, 64, 91,184, 3,224, 64,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, + 48, 50, 48, 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, 88, 79,184, 3, 48, 88,184, 3, 0, 89,184, 3, 0, 0, 0, 0, + 24, 81,184, 3,248, 84,184, 3, 0, 0, 0, 0,144, 90,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +144, 79,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 83,184, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 86,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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, 79,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, +144, 79,184, 3, 58, 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, 24, 81,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 24, 81,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 62,182, + 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0,112, 83,184, 3, 58, 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,248, 84,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,248, 84,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, + 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 84, 1, 0, 0, +168, 86,184, 3, 58, 1, 0, 0, 5, 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, 48, 88,184, 3, 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, 0, 0, 0, 0, 85, 86, 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, 89,184, 3, 6, 0, 0, 0, 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, 67,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,144, 90,184, 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, + 68, 65, 84, 65,160, 0, 0, 0, 48, 88,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 0, 89,184, 3, + 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, +152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 18,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,144, 90,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0, 64, 91,184, 3, 52, 0, 0, 0, 1, 0, 0, 0,112,104,184, 3, 16, 78,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69, 80,108, 97,110,101, 46, 48, 50, 49, 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,136, 92,184, 3, 96,101,184, 3, + 48,102,184, 3, 0, 0, 0, 0, 72, 94,184, 3, 40, 98,184, 3, 0, 0, 0, 0,192,103,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 92,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +160, 96,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 99,184, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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, 92,184, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 84, 1, 0, 0,192, 92,184, 3, 58, 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, 72, 94,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 72, 94,184, 3, 58, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204, 62, + 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190, + 0, 0, 1,128, 0, 0, 0, 0, 2, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 0, 0, + 2, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,160, 96,184, 3, 58, 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, 40, 98,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 40, 98,184, 3, 55, 0, 0, 0, 32, 0, 0, 0, + 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, + 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 34, 0, 9, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, + 68, 65, 84, 65, 84, 1, 0, 0,216, 99,184, 3, 58, 1, 0, 0, 5, 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, 96,101,184, 3, 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, 0, 0, 0, 0, 85, 86, 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, 48,102,184, 3, 6, 0, 0, 0, + 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, 67,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,192,103,184, 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, 68, 65, 84, 65,160, 0, 0, 0, 96,101,184, 3, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, + 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 96, 1, 0, 0, 48,102,184, 3, 65, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,162,226,125, 63, 0,229,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 18,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,192,103,184, 3, 59, 0, 0, 0, + 32, 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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,112,104,184, 3, 52, 0, 0, 0, 1, 0, 0, 0,160,117,184, 3, 64, 91,184, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 50, 50, 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, +184,105,184, 3,144,114,184, 3, 96,115,184, 3, 0, 0, 0, 0,120,107,184, 3, 88,111,184, 3, 0, 0, 0, 0,240,116,184, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,105,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,109,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,113,184, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, + 8, 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, 4,205, 76, 63, +172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 5, 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,184,105,184, 3, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,240,105,184, 3, 58, 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,120,107,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0,120,107,184, 3, 58, 0, 0, 0, + 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, + 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0, 0, 0, 0,179, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204,190, + 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 55,205,204,190, 0, 0, 0, 0,212,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 70,182, + 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,206,204, 76,191, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 1, 0, + 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180, 0, 0,240, 52, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 0,205, 76, 63, + 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, + 0, 0, 1,128, 0, 0, 1, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,208,109,184, 3, 58, 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, + 88,111,184, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 88,111,184, 3, + 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, + 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 35, 0, + 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0, 8,113,184, 3, 58, 1, 0, 0, 5, 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,144,114,184, 3, + 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, 0, 0, 0, 0, + 85, 86, 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, + 96,115,184, 3, 6, 0, 0, 0, 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, 67,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,240,116,184, 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, 68, 65, 84, 65,160, 0, 0, 0,144,114,184, 3, 54, 0, 0, 0, + 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, + 10, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, + 21, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 2, 68, 65, 84, 65, 96, 1, 0, 0, 96,115,184, 3, 65, 0, 0, 0, 8, 0, 0, 0, 12,192,137, 62,162,226,125, 63, +144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, + 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63, +144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 0,229,213, 62, +162,226,125, 63, 18,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, + 61, 0, 1, 0, 0, 0, 0, 0,154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, +152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62, +162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, + 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, + 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62, +162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0, +240,116,184, 3, 59, 0, 0, 0, 32, 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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,160,117,184, 3, 52, 0, 0, 0, 1, 0, 0, 0, +216,162,186, 3,112,104,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,119, 0, 0, 0, 0,112,104,101, +114,101, 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,232,118,184, 3, 72, 18,185, 3,120,118,185, 3, 0, 0, 0, 0,168,120,184, 3,144,182,184, 3, + 0, 0, 0, 0,168, 82,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,119,184, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,181,184, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 16,185, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +130, 2, 0, 0,128, 7, 0, 0, 0, 5, 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,117,224,186, 64, 91, 13,187, 64,160,240,186, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 30, 0, 4, 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, +232,118,184, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 68, 65, 84, 65, 84, 1, 0, 0, 32,119,184, 3, 58, 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,168,120,184, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 60, 0, 0, +168,120,184, 3, 58, 0, 0, 0,130, 2, 0, 0, 28,136,141,191, 12,243,244, 62,198, 86,183,192,212,231,117, 10,191,130,255, 0, + 3, 0, 0, 0,240,102,131,192, 30,183,119, 64,109,169,199,191, 58,166,158, 84,230,221,255, 0, 3, 0, 0, 0,119,108,239, 63, +213, 85,156, 64,188, 58, 40,192,228, 40,207,106,137,198,255, 0, 3, 0, 0, 0, 95,135,146, 64, 63, 54, 14,191,241,194,102,192, + 27,100,219,243, 45,177,255, 0, 3, 0, 0, 0,239, 84,141, 62, 16,220,157,192, 14, 2, 73,192, 8, 6, 39,148, 86,187,255, 0, + 3, 0, 0, 0,132,239,162,192,206,165, 12,192,150, 45,240,191,175,144,245,207,251,214,255, 0, 3, 0, 0, 0,239, 84,141,190, + 16,220,157, 64, 14, 2, 73, 64,248,249,217,107,170, 68,255, 0, 3, 0, 0, 0,132,239,162, 64,206,165, 12, 64,150, 45,240, 63, + 81,111, 11, 48, 5, 41,255, 0, 3, 0, 0, 0,240,102,131, 64, 30,183,119,192,109,169,199, 63,198, 89, 98,171, 26, 34,255, 0, + 3, 0, 0, 0,119,108,239,191,213, 85,156,192,188, 58, 40, 64, 28,215, 49,149,119, 57,255, 0, 3, 0, 0, 0, 95,135,146,192, + 63, 54, 14, 63,241,194,102, 64,229,155, 37, 12,211, 78,255, 0, 3, 0, 0, 0, 28,136,141, 63, 12,243,244,190,198, 86,183, 64, + 44, 24,139,245, 65,125,255, 0, 3, 0, 0, 0,114, 17, 68,192,226,153, 35, 64,154, 26,137,192, 6,189,226, 55, 85,162,255, 0, + 3, 0, 0, 0,155, 40,230, 62,239,199, 73, 64,176, 52,157,192,211, 9,237, 68,153,148,255, 0, 3, 0, 0, 0,124, 55,168,191, +224,177,164, 64, 58,144, 29,192, 69,227,132,112, 46,202,255, 0, 3, 0, 0, 0, 94, 35,105,192,230, 88,129,191,195, 14,143,192, + 93,176,233,233, 68,158,255, 0, 3, 0, 0, 0, 37, 2,173,192,137,187,123, 63, 56, 68, 1,192,206,137,127, 21,216,211,255, 0, + 3, 0, 0, 0,234,168, 2, 64,231,158, 57,189, 65,149,175,192,162, 44, 3,255, 11,136,255, 0, 3, 0, 0, 0, 19,159,114, 64, +254,226, 34, 64,196,133,106,192,225, 82,164, 55,228,175,255, 0, 3, 0, 0, 0,105,176,249,190, 21,148, 39,192,217,214,166,192, + 87,245,194,198, 5,142,255, 0, 3, 0, 0, 0,227,163, 54, 64, 86,121, 78,192, 22,202,125,192, 99, 62,120,185, 79,169,255, 0, + 3, 0, 0, 0,241, 40, 53,192,200, 31,134,192,229,188, 60,192, 30,194, 94,164,136,191,255, 0, 3, 0, 0, 0, 96,230,181,192, + 33, 24,119,191,174, 26,130, 63,186,131,231,234, 56, 22,255, 0, 3, 0, 0, 0,103, 93,163,192,136,128, 38, 64, 83,235,153, 63, +100,144,224, 56, 74, 26,255, 0, 3, 0, 0, 0,238,219, 36,192,132,151,165, 64,165,226,109, 63,176,199, 33,113, 80, 20,255, 0, + 3, 0, 0, 0, 24,237,111, 63,118,174,184, 64,212, 34,154, 62,125, 20, 44,126,148, 6,255, 0, 3, 0, 0, 0,163,244,130, 64, +157, 58,133, 64,125, 95,226,190,119, 89, 5, 91, 86,246,255, 0, 3, 0, 0, 0, 96,230,181, 64, 33, 24,119, 63,174, 26,130,191, + 70,124, 25, 21,200,233,255, 0, 3, 0, 0, 0,103, 93,163, 64,136,128, 38,192, 83,235,153,191,156,111, 32,199,182,229,255, 0, + 3, 0, 0, 0,238,219, 36, 64,132,151,165,192,165,226,109,191, 80, 56,223,142,176,235,255, 0, 3, 0, 0, 0, 24,237,111,191, +118,174,184,192,212, 34,154,190,131,235,212,129,108,249,255, 0, 3, 0, 0, 0,163,244,130,192,157, 58,133,192,125, 95,226, 62, +137,166,251,164,170, 9,255, 0, 3, 0, 0, 0,227,163, 54,192, 86,121, 78, 64, 22,202,125, 64,157,193,136, 70,177, 86,255, 0, + 3, 0, 0, 0,241, 40, 53, 64,200, 31,134, 64,229,188, 60, 64,226, 61,162, 91,120, 64,255, 0, 3, 0, 0, 0, 37, 2,173, 64, +137,187,123,191, 56, 68, 1, 64, 50,118,129,234, 40, 44,255, 0, 3, 0, 0, 0,124, 55,168, 63,224,177,164,192, 58,144, 29, 64, +187, 28,124,143,210, 53,255, 0, 3, 0, 0, 0, 19,159,114,192,254,226, 34,192,196,133,106, 64, 31,173, 92,200, 28, 80,255, 0, + 3, 0, 0, 0,234,168, 2,192,231,158, 57, 61, 65,149,175, 64, 94,211,253, 0,245,119,255, 0, 3, 0, 0, 0,105,176,249, 62, + 21,148, 39, 64,217,214,166, 64,169, 10, 62, 57,251,113,255, 0, 3, 0, 0, 0, 94, 35,105, 64,230, 88,129, 63,195, 14,143, 64, +163, 79, 23, 22,188, 97,255, 0, 3, 0, 0, 0,114, 17, 68, 64,226,153, 35,192,154, 26,137, 64,250, 66, 30,200,171, 93,255, 0, + 3, 0, 0, 0,155, 40,230,190,239,199, 73,192,176, 52,157, 64, 45,246, 19,187,103,107,255, 0, 3, 0, 0, 0, 37,178, 10,192, +138,231,201, 63,149,143,166,192,129,209,140, 33,145,141,255, 0, 3, 0, 0, 0, 3,132,110,192,243,203, 85, 64,151,107, 66,192, + 16,174,158, 73,209,190,255, 0, 3, 0, 0, 0,116,161,174,190, 81,152,241, 63,110, 2,177,192,217,247, 15, 40,182,134,255, 0, + 3, 0, 0, 0,138, 91,154, 63,218,179,133, 64,209,222,122,192, 0, 27, 30, 92, 86,171,255, 0, 3, 0, 0, 0, 7, 82, 52,192, + 82,252,149, 64, 64,202, 5,192, 39,193,227,101,181,210,255, 0, 3, 0, 0, 0,179, 12,148, 62,251,221,166, 64,188, 87, 41,192, +192, 7,224,113, 21,198,255, 0, 3, 0, 0, 0,216,246, 29,192, 17,156,141,190,209,167,169,192, 47,203,160,250,137,139,255, 0, + 3, 0, 0, 0, 99, 72,145,192, 79,114,213,191,183, 35, 83,192, 26,156, 3,219, 12,185,255, 0, 3, 0, 0, 0,115, 58,158,192, +129,120, 33, 64,198, 41,238,191,126,148,116, 56,137,215,255, 0, 3, 0, 0, 0,118,158,174,192,103,148, 33,191,140,156, 1,192, +218,136,198,240,203,211,255, 0, 3, 0, 0, 0, 55, 14,249, 62, 95,133,102, 62,210,143,186,192, 56, 9, 40, 5,113,128,255, 0, + 3, 0, 0, 0,220, 61, 92, 64, 56,230,159,190, 6, 61,151,192, 94, 76,242,248,135,153,255, 0, 3, 0, 0, 0, 7, 86, 60, 64, + 60, 48,119, 64, 93, 88, 81,192,119, 63,124, 85,246,184,255, 0, 3, 0, 0, 0,252, 55,139, 64, 62, 95,132, 63,225,216,113,192, +118, 95, 54, 21,107,173,255, 0, 3, 0, 0, 0, 18, 6, 84,191,251, 96,142,191, 76, 4,182,192,158,237, 20,233,109,131,255, 0, + 3, 0, 0, 0,109, 74,225,189, 51, 54,123,192, 34,246,138,192,241,253, 39,169, 1,162,255, 0, 3, 0, 0, 0,153, 66,119, 64, +127,154,251,191,161,220,123,192, 59, 85, 59,214, 34,170,255, 0, 3, 0, 0, 0,201, 59,208, 63,241,182,135,192,212,101,108,192, +103, 34,133,162,160,175,255, 0, 3, 0, 0, 0,161,246,169,191,235,196,151,192,170,149, 74,192, 95,228,253,151,184,186,255, 0, + 3, 0, 0, 0, 33,198,131,192,218,137, 84,192, 37,134, 32,192,247,164, 77,184,167,201,255, 0, 3, 0, 0, 0,176, 61,179,192, +138,110,210,191, 24,220,228,190,210,133,130,219,238,244,255, 0, 3, 0, 0, 0, 73,182,170,192,136, 16, 90,190, 90,194, 25, 64, +224,139, 8,252,174, 53,255, 0, 3, 0, 0, 0, 75, 55,153,192, 4, 78, 87, 64, 12, 54, 62,190,200,151, 29, 74,179,250,255, 0, + 3, 0, 0, 0,235, 19,161,192,207, 12,210, 63,210,242, 31, 64, 50,146,244, 34,182, 55,255, 0, 3, 0, 0, 0, 60, 75, 94,192, +189,115,150, 64,186,211,167,190, 98,179, 49,102,183,247,255, 0, 3, 0, 0, 0,186,191,189,191, 63, 32,168, 64,213,100, 7, 64, +161,224,191,114, 61, 47,255, 0, 3, 0, 0, 0,242,205,186, 63,141, 65,177, 64,127,219,154,191, 82, 32,177,120, 61,228,255, 0, + 3, 0, 0, 0, 99,245,175, 62, 97, 12,178, 64,255,253,228, 63,247, 6, 65,121, 98, 40,255, 0, 3, 0, 0, 0,226, 92, 70, 64, + 8,131,150, 64,182, 77,204,191,193, 66, 37,103, 32,220,255, 0, 3, 0, 0, 0,200,194,152, 64,180,155, 83, 64,154,217, 62, 63, +207,104,101, 71, 87, 17,255, 0, 3, 0, 0, 0, 73,182,170, 64,136, 16, 90, 62, 90,194, 25,192, 32,116,248, 3, 82,202,255, 0, + 3, 0, 0, 0,176, 61,179, 64,138,110,210, 63, 24,220,228, 62, 46,122,126, 36, 18, 11,255, 0, 3, 0, 0, 0,235, 19,161, 64, +207, 12,210,191,210,242, 31,192,206,109, 12,221, 74,200,255, 0, 3, 0, 0, 0, 75, 55,153, 64, 4, 78, 87,192, 12, 54, 62, 62, + 56,104,227,181, 77, 5,255, 0, 3, 0, 0, 0,186,191,189, 63, 63, 32,168,192,213,100, 7,192, 95, 31, 65,141,195,208,255, 0, + 3, 0, 0, 0, 60, 75, 94, 64,189,115,150,192,186,211,167, 62,158, 76,207,153, 73, 8,255, 0, 3, 0, 0, 0, 99,245,175,190, + 97, 12,178,192,255,253,228,191, 9,249,191,134,158,215,255, 0, 3, 0, 0, 0,242,205,186,191,141, 65,177,192,127,219,154, 63, +174,223, 79,135,195, 27,255, 0, 3, 0, 0, 0,200,194,152,192,180,155, 83,192,154,217, 62,191, 49,151,155,184,169,238,255, 0, + 3, 0, 0, 0,226, 92, 70,192, 8,131,150,192,182, 77,204, 63, 63,189,219,152,224, 35,255, 0, 3, 0, 0, 0,201, 59,208,191, +241,182,135, 64,212,101,108, 64,153,221,123, 93, 96, 80,255, 0, 3, 0, 0, 0,153, 66,119,192,127,154,251, 63,161,220,123, 64, +197,170,197, 41,222, 85,255, 0, 3, 0, 0, 0,161,246,169, 63,235,196,151, 64,170,149, 74, 64,161, 27, 3,104, 72, 69,255, 0, + 3, 0, 0, 0, 33,198,131, 64,218,137, 84, 64, 37,134, 32, 64, 9, 91,179, 71, 89, 54,255, 0, 3, 0, 0, 0,118,158,174, 64, +103,148, 33, 63,140,156, 1, 64, 38,119, 58, 15, 53, 44,255, 0, 3, 0, 0, 0,115, 58,158, 64,129,120, 33,192,198, 41,238, 63, +130,107,140,199,119, 40,255, 0, 3, 0, 0, 0, 7, 82, 52, 64, 82,252,149,192, 64,202, 5, 64,217, 62, 29,154, 75, 45,255, 0, + 3, 0, 0, 0,179, 12,148,190,251,221,166,192,188, 87, 41, 64, 64,248, 32,142,235, 57,255, 0, 3, 0, 0, 0, 7, 86, 60,192, + 60, 48,119,192, 93, 88, 81, 64,137,192,132,170, 10, 71,255, 0, 3, 0, 0, 0,252, 55,139,192, 62, 95,132,191,225,216,113, 64, +138,160,202,234,149, 82,255, 0, 3, 0, 0, 0,220, 61, 92,192, 56,230,159, 62, 6, 61,151, 64,162,179, 14, 7,121,102,255, 0, + 3, 0, 0, 0, 55, 14,249,190, 95,133,102,190,210,143,186, 64,200,246,216,250,143,127,255, 0, 3, 0, 0, 0,109, 74,225, 61, + 51, 54,123, 64, 34,246,138, 64, 15, 2,217, 86,255, 93,255, 0, 3, 0, 0, 0, 18, 6, 84, 63,251, 96,142, 63, 76, 4,182, 64, + 98, 18,236, 22,147,124,255, 0, 3, 0, 0, 0, 99, 72,145, 64, 79,114,213, 63,183, 35, 83, 64,230, 99,253, 36,244, 70,255, 0, + 3, 0, 0, 0,216,246, 29, 64, 17,156,141, 62,209,167,169, 64,209, 52, 96, 5,119,116,255, 0, 3, 0, 0, 0, 3,132,110, 64, +243,203, 85,192,151,107, 66, 64,240, 81, 98,182, 47, 65,255, 0, 3, 0, 0, 0, 37,178, 10, 64,138,231,201,191,149,143,166, 64, +127, 46,116,222,111,114,255, 0, 3, 0, 0, 0,138, 91,154,191,218,179,133,192,209,222,122, 64, 0,229,226,163,170, 84,255, 0, + 3, 0, 0, 0,116,161,174, 62, 81,152,241,191,110, 2,177, 64, 39, 8,241,215, 74,121,255, 0, 3, 0, 0, 0, 36, 76, 19,192, + 25,151,129, 64,212,254, 98,192,231,206, 97, 88,131,177,255, 0, 3, 0, 0, 0, 93,232,175,191,177, 23, 64, 64, 69,186,154,192, +227,225,235, 66, 34,151,255, 0, 3, 0, 0, 0,208,190,232,190, 93,160,139, 64,191, 33,120,192,183,244,205, 94,192,170,255, 0, + 3, 0, 0, 0,210,126,142,192, 43, 49,238, 63,112, 30, 84,192,187,158, 95, 39,183,182,255, 0, 3, 0, 0, 0,138,165, 97,192, + 92, 9, 80, 63, 20, 74,147,192,183,177,233, 17, 86,156,255, 0, 3, 0, 0, 0, 98, 61,152,192, 87, 63,106,188, 6, 97, 90,192, +127,152,251, 0,183,180,255, 0, 3, 0, 0, 0,200,173, 14, 64,155,183, 63, 64,192, 75,144,192,206, 48, 45, 64,152,156,255, 0, + 3, 0, 0, 0, 95,162,167, 63,144, 29,209, 63, 25,245,174,192,250, 29, 75, 36,250,136,255, 0, 3, 0, 0, 0,211, 62, 68, 64, + 51, 56,168, 63, 13,245,153,192,241, 65,192, 29,106,150,255, 0, 3, 0, 0, 0, 33,182, 36, 64, 34, 38,220,191,150, 5,159,192, +233, 54,211,217,223,146,255, 0, 3, 0, 0, 0, 16, 34, 81, 63,129, 64,179,191,162, 5,180,192,242, 18, 93,224,111,133,255, 0, + 3, 0, 0, 0,212, 56,159, 63,172,166, 68,192,212,108,154,192,176, 27, 32,190,208,149,255, 0, 3, 0, 0, 0,204, 76,223,191, +170, 32,101,192, 65, 83,137,192,199,216,195,178,198,161,255, 0, 3, 0, 0, 0,249,249, 10,192, 62, 52,244,191, 25,236,162,192, + 9,208, 0,213,102,145,255, 0, 3, 0, 0, 0, 42,207, 89,192,251, 6, 47,192, 27,165,121,192,209,182, 18,196,198,169,255, 0, + 3, 0, 0, 0,137,215,176,192, 25, 62,241, 63,179,254,219,190,179,134,232, 39, 78,247,255, 0, 3, 0, 0, 0, 28,150,186,192, +150, 16, 28, 60,191, 9, 7,191,118,128,131, 1, 77,245,255, 0, 3, 0, 0, 0, 34,132,181,192, 99, 60, 92, 63,217, 81,149, 63, +181,131,238, 18,252, 23,255, 0, 3, 0, 0, 0,175,242, 74,190,164,173,183, 64,227,105,145,191,117,250,160,125, 31,232,255, 0, + 3, 0, 0, 0,219,227, 2,192, 96,164,173, 64,200, 71, 78,191,164,212, 52,119,226,238,255, 0, 3, 0, 0, 0,181,140, 92,191, + 75, 38,184, 64,176,148, 37, 63,224,236,237,125,159, 12,255, 0, 3, 0, 0, 0, 75,104,159, 64,212, 56,236, 63,240,126, 29,192, +211,108,166, 41, 9,203,255, 0, 3, 0, 0, 0,215,159,132, 64, 84,184, 97, 64, 30, 44, 10,192,176, 91, 19, 76, 56,209,255, 0, + 3, 0, 0, 0, 95,122,164, 64,199,143, 44, 64, 53, 78, 68,191, 17,112, 17, 59,185,237,255, 0, 3, 0, 0, 0,255,176, 54, 64, +243, 84,141,192,237,176, 36,192,192, 63, 9,160, 63,200,255, 0, 3, 0, 0, 0, 93,229,133, 64,217, 21, 68,192,157,226, 45,192, +249, 90,187,187, 78,197,255, 0, 3, 0, 0, 0,203, 56,129, 64, 21,211,130,192,187,115,143,191,252, 87,194,166,252,229,255, 0, + 3, 0, 0, 0,189,239,104,192, 82,142,140,192,178,178,168,191,134,177,245,158,155,227,255, 0, 3, 0, 0, 0, 50,141,253,191, + 52,155,167,192,170,181,218,191,125,211,166,141,155,219,255, 0, 3, 0, 0, 0,164, 58, 41,192,172, 34,167,192,206,232,151, 61, +232,197,243,141, 26, 0,255, 0, 3, 0, 0, 0, 93,229,133,192,217, 21, 68, 64,157,226, 45, 64, 7,165, 69, 68,178, 58,255, 0, + 3, 0, 0, 0,203, 56,129,192, 21,211,130, 64,187,115,143, 63, 4,168, 62, 89, 4, 26,255, 0, 3, 0, 0, 0,255,176, 54,192, +243, 84,141, 64,237,176, 36, 64, 64,192,247, 95,193, 55,255, 0, 3, 0, 0, 0, 50,141,253, 63, 52,155,167, 64,170,181,218, 63, +131, 44, 90,114,101, 36,255, 0, 3, 0, 0, 0,164, 58, 41, 64,172, 34,167, 64,206,232,151,189, 24, 58, 13,114,230,255,255, 0, + 3, 0, 0, 0,189,239,104, 64, 82,142,140, 64,178,178,168, 63,122, 78, 11, 97,101, 28,255, 0, 3, 0, 0, 0, 28,150,186, 64, +150, 16, 28,188,191, 9, 7, 63,138,127,125,254,179, 10,255, 0, 3, 0, 0, 0, 34,132,181, 64, 99, 60, 92,191,217, 81,149,191, + 75,124, 18,237, 4,232,255, 0, 3, 0, 0, 0,137,215,176, 64, 25, 62,241,191,179,254,219, 62, 77,121, 24,216,178, 8,255, 0, + 3, 0, 0, 0,219,227, 2, 64, 96,164,173,192,200, 71, 78, 63, 92, 43,204,136, 30, 17,255, 0, 3, 0, 0, 0,181,140, 92, 63, + 75, 38,184,192,176,148, 37,191, 32, 19, 19,130, 97,243,255, 0, 3, 0, 0, 0,175,242, 74, 62,164,173,183,192,227,105,145, 63, +139, 5, 96,130,225, 23,255, 0, 3, 0, 0, 0,215,159,132,192, 84,184, 97,192, 30, 44, 10, 64, 80,164,237,179,200, 46,255, 0, + 3, 0, 0, 0, 95,122,164,192,199,143, 44,192, 53, 78, 68, 63,239,143,239,196, 71, 18,255, 0, 3, 0, 0, 0, 75,104,159,192, +212, 56,236,191,240,126, 29, 64, 45,147, 90,214,247, 52,255, 0, 3, 0, 0, 0,212, 56,159,191,172,166, 68, 64,212,108,154, 64, + 80,228,224, 65, 48,106,255, 0, 3, 0, 0, 0, 33,182, 36,192, 34, 38,220, 63,150, 5,159, 64, 23,201, 45, 38, 33,109,255, 0, + 3, 0, 0, 0, 16, 34, 81,191,129, 64,179, 63,162, 5,180, 64, 14,237,163, 31,145,122,255, 0, 3, 0, 0, 0, 42,207, 89, 64, +251, 6, 47, 64, 27,165,121, 64, 47, 73,238, 59, 58, 86,255, 0, 3, 0, 0, 0,208, 76,223, 63,170, 32,101, 64, 65, 83,137, 64, + 57, 39, 61, 77, 58, 94,255, 0, 3, 0, 0, 0,249,249, 10, 64, 62, 52,244, 63, 25,236,162, 64,247, 47, 0, 43,154,110,255, 0, + 3, 0, 0, 0,210,126,142, 64, 43, 49,238,191,112, 30, 84, 64, 69, 97,161,216, 73, 73,255, 0, 3, 0, 0, 0, 98, 61,152, 64, + 87, 63,106, 60, 6, 97, 90, 64,129,103, 5,255, 73, 75,255, 0, 3, 0, 0, 0,138,165, 97, 64, 92, 9, 80,191, 20, 74,147, 64, + 73, 78, 23,238,170, 99,255, 0, 3, 0, 0, 0,208,190,232, 62, 93,160,139,192,191, 33,120, 64, 73, 11, 51,161, 64, 85,255, 0, + 3, 0, 0, 0, 36, 76, 19, 64, 25,151,129,192,212,254, 98, 64, 25, 49,159,167,125, 78,255, 0, 3, 0, 0, 0, 93,232,175, 63, +177, 23, 64,192, 69,186,154, 64, 29, 30, 21,189,222,104,255, 0, 3, 0, 0, 0,211, 62, 68,192, 51, 56,168,191, 13,245,153, 64, + 15,190, 64,226,150,105,255, 0, 3, 0, 0, 0,200,173, 14,192,155,183, 63,192,192, 75,144, 64, 50,207,211,191,104, 99,255, 0, + 3, 0, 0, 0, 95,162,167,191,144, 29,209,191, 25,245,174, 64, 6,226,181,219, 6,119,255, 0, 3, 0, 0, 0,158,156,211,191, +185,228,132, 63,190,207,176,192,164,220,231, 21,244,134,255, 0, 3, 0, 0, 0, 0, 76, 41,192,190,199, 5, 64, 83,157,153,192, +146,198, 75, 45,246,150,255, 0, 3, 0, 0, 0,204, 83,125,192,169, 55,105, 64,244,162, 20,192, 72,169,246, 79, 82,206,255, 0, + 3, 0, 0, 0,178,215, 91,192,222,235, 62, 64,190,254,108,192,215,180, 87, 65,155,175,255, 0, 3, 0, 0, 0,242, 63, 59,191, +210,237,152, 63,251, 21,182,192,125,239, 26, 25,149,131,255, 0, 3, 0, 0, 0, 86,230, 94, 61,198, 30, 35, 64,233, 15,169,192, +238, 0, 52, 55,135,140,255, 0, 3, 0, 0, 0,220, 4,199, 63, 7,145,146, 64,104,186, 83,192,109, 34,137,100,168,184,255, 0, + 3, 0, 0, 0, 9,120, 86, 63,149, 91,109, 64, 79,242,142,192,133, 18, 64, 81,218,158,255, 0, 3, 0, 0, 0,103,243, 95,192, +221, 91,138, 64,186, 15,236,191,170,178,219, 93, 25,216,255, 0, 3, 0, 0, 0, 46,206, 5,192,121, 41,159, 64,154, 91, 19,192, +230,209, 96,108,226,205,255, 0, 3, 0, 0, 0,169,200,139, 63,198, 78,163, 64,201,146, 42,192,247, 24, 59,111,206,197,255, 0, + 3, 0, 0, 0,187,128, 4,191,206,181,167, 64, 74, 92, 37,192, 57,245, 96,114,145,199,255, 0, 3, 0, 0, 0,151, 16,231,191, +160,166,209, 61,167, 95,178,192,136,217,196, 2,245,133,255, 0, 3, 0, 0, 0,163,200, 69,192,178,143, 38,191,148, 48,158,192, +243,188, 11,242,223,147,255, 0, 3, 0, 0, 0, 43,192,155,192,151, 6,250,191,170, 82, 39,192, 79,149,247,212,231,199,255, 0, + 3, 0, 0, 0,233,118,132,192,217,111,173,191, 67,122,123,192,100,165, 58,226,165,170,255, 0, 3, 0, 0, 0,238, 85,146,192, +178,205, 78, 64, 70, 54,221,191,183,156,134, 71,120,218,255, 0, 3, 0, 0, 0, 76,137,167,192,111, 31,227, 63,158, 57,251,191, +234,141, 54, 39, 59,213,255, 0, 3, 0, 0, 0, 39,143,170,192,167, 15,183,191,251, 85,252,191,217,139,169,223, 13,213,255, 0, + 3, 0, 0, 0, 8,214,175,192,177,124, 53, 62,206,241, 2,192, 23,136, 89, 3, 92,211,255, 0, 3, 0, 0, 0, 77,160,160,190, + 9, 20,182, 62,108,232,186,192, 8,248,241, 7,128,128,255, 0, 3, 0, 0, 0, 33,144,163, 63,151,144,186, 61, 50, 47,183,192, + 97, 27, 19, 2,252,130,255, 0, 3, 0, 0, 0,222,179,129, 64,234,147,224,190, 38,180,134,192, 83, 89, 64,246,218,164,255, 0, + 3, 0, 0, 0,114,138, 49, 64,246, 97, 57,190, 57, 76,165,192,250, 60,247,251,138,143,255, 0, 3, 0, 0, 0,249,158, 27, 64, +197,118,141, 64, 58,196, 62,192, 90, 52, 70, 97, 90,191,255, 0, 3, 0, 0, 0, 98,244, 89, 64, 8,120, 79, 64, 65,128, 96,192, + 8, 74, 39, 71,151,179,255, 0, 3, 0, 0, 0, 13,100,144, 64,200,214,118, 62, 64,205,110,192,182, 98, 37, 4,161,174,255, 0, + 3, 0, 0, 0, 42,202,131, 64, 60,161,231, 63,142,245,112,192, 10, 90,255, 38,209,173,255, 0, 3, 0, 0, 0,149, 51,122,191, + 52,151,163,190, 15,157,184,192,118,234, 36,250,248,129,255, 0, 3, 0, 0, 0, 5,113, 42,191, 31,112,241,191, 15,119,176,192, + 93,241, 84,215,135,135,255, 0, 3, 0, 0, 0, 60, 55,172, 61, 22, 64,143,192,164,246,113,192, 27, 2,132,157, 71,174,255, 0, + 3, 0, 0, 0,167,173,154,190,111,224, 83,192,198,169,154,192,136,249, 89,183,211,150,255, 0, 3, 0, 0, 0,151,133,136, 64, + 9,249,162,191,106,219,115,192,175, 93, 47,229, 3,173,255, 0, 3, 0, 0, 0,110,124, 89, 64,135, 6, 40,192,223,195,127,192, +120, 74, 31,199,208,168,255, 0, 3, 0, 0, 0,244,248,117, 63,109, 90,148,192,123, 0, 93,192, 8, 20, 66,154,249,180,255, 0, + 3, 0, 0, 0,162, 0, 17, 64, 63,196,113,192, 52,239,119,192, 10, 49, 64,173,144,171,255, 0, 3, 0, 0, 0,162,217, 7,191, + 21,117,156,192,222,238, 75,192,139,245, 20,149,108,186,255, 0, 3, 0, 0, 0,171,144, 6,192,112,158,144,192,198,241, 69,192, +156,210, 55,157,115,188,255, 0, 3, 0, 0, 0,110,238,148,192,115,109, 50,192,187,197, 13,192,170,153,231,195, 17,208,255, 0, + 3, 0, 0, 0, 79,252, 96,192,140, 40,115,192,116,165, 48,192,226,178, 98,173,236,195,255, 0, 3, 0, 0, 0,100,228,172,192, +217,128,248,191, 8, 93,150,191, 91,138, 53,213, 86,229,255, 0, 3, 0, 0, 0, 82,171,182,192,216,250,168,191, 15, 15,147, 62, +122,131,250,226,203, 5,255, 0, 3, 0, 0, 0,215, 73,160,192,124,165, 49, 62,232, 85, 66, 64, 33,147, 84, 4, 42, 67,255, 0, + 3, 0, 0, 0,171, 89,178,192,192,115, 24,191, 78,116,221, 63,129,134, 64,243, 50, 38,255, 0, 3, 0, 0, 0, 51,206,143,192, +133,250,105, 64,119,251, 97,191, 85,158, 53, 80,193,235,255, 0, 3, 0, 0, 0, 62, 32,160,192,163, 38, 65, 64,164,117, 3, 63, +236,146, 24, 66,193, 10,255, 0, 3, 0, 0, 0,216,108,155,192, 59,255,141, 63,189,117, 69, 64, 61,150,119, 23, 42, 68,255, 0, + 3, 0, 0, 0, 85, 27,164,192,244, 78, 9, 64, 87,193,239, 63, 33,144,128, 46, 73, 41,255, 0, 3, 0, 0, 0,134, 35,117,192, + 39,152,138, 64, 73, 86,116,191,230,171, 2, 94, 73,234,255, 0, 3, 0, 0, 0, 35,220, 67,192, 6,218,159, 64,242,103,155, 62, +240,188,215,108, 55, 6,255, 0, 3, 0, 0, 0,130, 79, 99,191,215,182,164, 64, 10, 4, 42, 64,118,237, 50,112,190, 58,255, 0, + 3, 0, 0, 0,161, 86, 3,192, 14,205,168, 64, 60, 55,197, 63,148,211, 31,115,255, 33,255, 0, 3, 0, 0, 0,229,101,215, 63, + 84,141,168, 64, 16, 90,248,191, 11, 37,148,114,159,212,255, 0, 3, 0, 0, 0, 99, 52,155, 63,198, 17,183, 64,232,199,235,190, +159, 26,192,124,120,245,255, 0, 3, 0, 0, 0,105,179, 10, 61, 25,185,169, 64,120,119, 31, 64, 77, 0,101,115, 96, 55,255, 0, + 3, 0, 0, 0,143,198, 37, 63,123,120,183, 64,160,108,135, 63,240, 13, 8,125,144, 23,255, 0, 3, 0, 0, 0,180,174, 32, 64, + 65, 13,155, 64,238,167, 8,192,247, 53,245,105,163,208,255, 0, 3, 0, 0, 0, 69,199,104, 64,177,135,143, 64, 41, 12,132,191, + 10, 79, 10, 98, 31,233,255, 0, 3, 0, 0, 0,121,134,159, 64, 49,245, 49, 64,210,166,169, 63, 27,109,242, 59,190, 29,255, 0, + 3, 0, 0, 0, 52,133,143, 64,119,200,113, 64,186,206, 29, 62, 20, 98, 39, 82,190, 3,255, 0, 3, 0, 0, 0,215, 73,160, 64, +124,165, 49,190,232, 85, 66,192,223,108,172,251,214,188,255, 0, 3, 0, 0, 0,171, 89,178, 64,192,115, 24, 63, 78,116,221,191, +127,121,192, 12,206,217,255, 0, 3, 0, 0, 0,100,228,172, 64,217,128,248, 63, 8, 93,150, 63,165,117,203, 42,170, 26,255, 0, + 3, 0, 0, 0, 82,171,182, 64,216,250,168, 63, 15, 15,147,190,134,124, 6, 29, 53,250,255, 0, 3, 0, 0, 0,216,108,155, 64, + 59,255,141,191,189,117, 69,192,195,105,137,232,214,187,255, 0, 3, 0, 0, 0, 85, 27,164, 64,244, 78, 9,192, 87,193,239,191, +223,111,128,209,183,214,255, 0, 3, 0, 0, 0, 51,206,143, 64,133,250,105,192,119,251, 97, 63,171, 97,203,175, 63, 20,255, 0, + 3, 0, 0, 0, 62, 32,160, 64,163, 38, 65,192,164,117, 3,191, 20,109,232,189, 63,245,255, 0, 3, 0, 0, 0,130, 79, 99, 63, +215,182,164,192, 10, 4, 42,192,138, 18,206,143, 66,197,255, 0, 3, 0, 0, 0,161, 86, 3, 64, 14,205,168,192, 60, 55,197,191, +108, 44,225,140, 1,222,255, 0, 3, 0, 0, 0,134, 35,117, 64, 39,152,138,192, 73, 86,116, 63, 26, 84,254,161,183, 21,255, 0, + 3, 0, 0, 0, 35,220, 67, 64, 6,218,159,192,242,103,155,190, 16, 67, 41,147,201,249,255, 0, 3, 0, 0, 0,105,179, 10,189, + 25,185,169,192,120,119, 31,192,179,255,155,140,160,200,255, 0, 3, 0, 0, 0,143,198, 37,191,123,120,183,192,160,108,135,191, + 16,242,248,130,112,232,255, 0, 3, 0, 0, 0,229,101,215,191, 84,141,168,192, 16, 90,248, 63,245,218,108,141, 97, 43,255, 0, + 3, 0, 0, 0, 99, 52,155,191,198, 17,183,192,232,199,235, 62, 97,229, 64,131,136, 10,255, 0, 3, 0, 0, 0,121,134,159,192, + 49,245, 49,192,210,166,169,191,229,146, 14,196, 66,226,255, 0, 3, 0, 0, 0, 52,133,143,192,119,200,113,192,186,206, 29,190, +236,157,217,173, 66,252,255, 0, 3, 0, 0, 0,180,174, 32,192, 65, 13,155,192,238,167, 8, 64, 9,202, 11,150, 93, 47,255, 0, + 3, 0, 0, 0, 69,199,104,192,177,135,143,192, 41, 12,132, 63,246,176,246,157,225, 22,255, 0, 3, 0, 0, 0,244,248,117,191, +109, 90,148, 64,123, 0, 93, 64,248,235,190,101, 7, 75,255, 0, 3, 0, 0, 0,162, 0, 17,192, 63,196,113, 64, 52,239,119, 64, +246,206,192, 82,112, 84,255, 0, 3, 0, 0, 0,151,133,136,192, 9,249,162, 63,106,219,115, 64, 81,162,209, 26,253, 82,255, 0, + 3, 0, 0, 0,110,124, 89,192,135, 6, 40, 64,223,195,127, 64,136,181,225, 56, 48, 87,255, 0, 3, 0, 0, 0,162,217, 7, 63, + 21,117,156, 64,222,238, 75, 64,117, 10,236,106,148, 69,255, 0, 3, 0, 0, 0,171,144, 6, 64,112,158,144, 64,198,241, 69, 64, +100, 45,201, 98,141, 67,255, 0, 3, 0, 0, 0,110,238,148, 64,115,109, 50, 64,187,197, 13, 64, 86,102, 25, 60,239, 47,255, 0, + 3, 0, 0, 0, 79,252, 96, 64,140, 40,115, 64,116,165, 48, 64, 30, 77,158, 82, 20, 60,255, 0, 3, 0, 0, 0, 39,143,170, 64, +167, 15,183, 63,251, 85,252, 63, 39,116, 87, 32,243, 42,255, 0, 3, 0, 0, 0, 8,214,175, 64,177,124, 53,190,206,241, 2, 64, +233,119,167,252,164, 44,255, 0, 3, 0, 0, 0,238, 85,146, 64,178,205, 78,192, 70, 54,221, 63, 73, 99,122,184,136, 37,255, 0, + 3, 0, 0, 0, 76,137,167, 64,111, 31,227,191,158, 57,251, 63, 22,114,202,216,197, 42,255, 0, 3, 0, 0, 0,103,243, 95, 64, +221, 91,138,192,186, 15,236, 63, 86, 77, 37,162,231, 39,255, 0, 3, 0, 0, 0, 46,206, 5, 64,121, 41,159,192,154, 91, 19, 64, + 26, 46,160,147, 30, 50,255, 0, 3, 0, 0, 0,169,200,139,191,198, 78,163,192,201,146, 42, 64, 9,231,197,144, 50, 58,255, 0, + 3, 0, 0, 0,187,128, 4, 63,206,181,167,192, 74, 92, 37, 64,199, 10,160,141,111, 56,255, 0, 3, 0, 0, 0,249,158, 27,192, +197,118,141,192, 58,196, 62, 64,166,203,186,158,166, 64,255, 0, 3, 0, 0, 0, 98,244, 89,192, 8,120, 79,192, 65,128, 96, 64, +248,181,217,184,105, 76,255, 0, 3, 0, 0, 0, 13,100,144,192,200,214,118,190, 64,205,110, 64, 74,157,219,251, 95, 81,255, 0, + 3, 0, 0, 0, 42,202,131,192, 60,161,231,191,142,245,112, 64,246,165, 1,217, 47, 82,255, 0, 3, 0, 0, 0,222,179,129,192, +234,147,224, 62, 38,180,134, 64,173,166,192, 9, 38, 91,255, 0, 3, 0, 0, 0,114,138, 49,192,246, 97, 57, 62, 57, 76,165, 64, + 6,195, 9, 4,118,112,255, 0, 3, 0, 0, 0, 77,160,160, 62, 9, 20,182,190,108,232,186, 64,248, 7, 15,248,128,127,255, 0, + 3, 0, 0, 0, 33,144,163,191,151,144,186,189, 50, 47,183, 64,159,228,237,253, 4,125,255, 0, 3, 0, 0, 0, 60, 55,172,189, + 22, 64,143, 64,164,246,113, 64,229,253,124, 98,185, 81,255, 0, 3, 0, 0, 0,167,173,154, 62,111,224, 83, 64,198,169,154, 64, +120, 6,167, 72, 45,105,255, 0, 3, 0, 0, 0,149, 51,122, 63, 52,151,163, 62, 15,157,184, 64,138, 21,220, 5, 8,126,255, 0, + 3, 0, 0, 0, 5,113, 42, 63, 31,112,241, 63, 15,119,176, 64,163, 14,172, 40,121,120,255, 0, 3, 0, 0, 0, 43,192,155, 64, +151, 6,250, 63,170, 82, 39, 64,177,106, 9, 43, 25, 56,255, 0, 3, 0, 0, 0,233,118,132, 64,217,111,173, 63, 67,122,123, 64, +156, 90,198, 29, 91, 85,255, 0, 3, 0, 0, 0,151, 16,231, 63,160,166,209,189,167, 95,178, 64,120, 38, 60,253, 11,122,255, 0, + 3, 0, 0, 0,163,200, 69, 64,178,143, 38, 63,148, 48,158, 64, 13, 67,245, 13, 33,108,255, 0, 3, 0, 0, 0,204, 83,125, 64, +169, 55,105,192,244,162, 20, 64,184, 86, 10,176,174, 49,255, 0, 3, 0, 0, 0,178,215, 91, 64,222,235, 62,192,190,254,108, 64, + 41, 75,169,190,101, 80,255, 0, 3, 0, 0, 0,158,156,211, 63,185,228,132,191,190,207,176, 64, 92, 35, 25,234, 12,121,255, 0, + 3, 0, 0, 0, 0, 76, 41, 64,190,199, 5,192, 83,157,153, 64,110, 57,181,210, 10,105,255, 0, 3, 0, 0, 0,220, 4,199,191, + 7,145,146,192,104,186, 83, 64,147,221,119,155, 88, 71,255, 0, 3, 0, 0, 0, 9,120, 86,191,149, 91,109,192, 79,242,142, 64, +123,237,192,174, 38, 97,255, 0, 3, 0, 0, 0,242, 63, 59, 63,210,237,152,191,251, 21,182, 64,131, 16,230,230,107,124,255, 0, + 3, 0, 0, 0, 86,230, 94,189,198, 30, 35,192,233, 15,169, 64, 18,255,204,200,121,115,255, 0, 3, 0, 0, 0,208, 27, 46,192, +124,104, 86, 64, 85, 52,126,192,137,197,226, 72,134,168,255, 0, 3, 0, 0, 0, 82,168,234,191, 87, 62,149, 64,118, 12, 67,192, + 5,217,188,101,210,188,255, 0, 3, 0, 0, 0,186, 10, 16,192,249,106, 52, 64,210,253,147,192,182,206,131, 62,198,155,255, 0, + 3, 0, 0, 0, 93, 33,240,190,191,199, 71, 64,142, 47,158,192,214,245, 40, 69,199,148,255, 0, 3, 0, 0, 0, 19, 46, 71,187, +194,240,115, 64,175,166,142,192,240,254,161, 82, 66,158,255, 0, 3, 0, 0, 0,188,194,101,191, 17, 84,154, 64,240,193, 77,192, + 76,235,214,104,142,185,255, 0, 3, 0, 0, 0,246,246,115,192,183, 86, 15, 64, 51,168,118,192,249,172,229, 47, 45,171,255, 0, + 3, 0, 0, 0,101, 1,160,192, 47,146,184, 63,153, 38, 45,192,225,146, 96, 30,102,196,255, 0, 3, 0, 0, 0,215,229, 85,192, +166,178,218, 63,183, 55,144,192, 38,182,133, 37,110,158,255, 0, 3, 0, 0, 0,151,178,104,192,245,107,205,189,175, 60,147,192, +178,175,205,253, 91,156,255, 0, 3, 0, 0, 0,192, 81,136,192, 55,239, 4,191, 24,222,127,192,130,163,158,245, 35,168,255, 0, + 3, 0, 0, 0, 70,241,164,192,102,218,251, 62,143, 82, 48,192,222,143,210, 11,110,195,255, 0, 3, 0, 0, 0,209,230,173, 63, +231,135, 71, 64, 27,234,152,192,148, 29, 4, 67, 11,151,255, 0, 3, 0, 0, 0,158,103, 67, 64, 82,206, 51, 64, 39,168,132,192, +203, 66, 63, 60,242,164,255, 0, 3, 0, 0, 0,136,131,100, 63, 16, 95, 27, 64, 4,115,168,192,122, 20,138, 53,143,141,255, 0, + 3, 0, 0, 0, 77,154,217, 63,185, 69, 78, 63,221,196,177,192, 53, 38,236, 17, 42,135,255, 0, 3, 0, 0, 0,107,195, 37, 64, + 4,213, 36, 63, 20, 33,167,192,151, 55,194, 14,168,141,255, 0, 3, 0, 0, 0,103,139, 94, 64,153,146,250, 63, 72,141,137,192, + 19, 75,156, 43,245,161,255, 0, 3, 0, 0, 0,231,195, 21, 64,236, 58,101,191,218,178,169,192,247, 49, 31,236,218,139,255, 0, + 3, 0, 0, 0,142, 32, 48, 64,155,140, 32,192,195, 1,145,192, 3, 59,178,200,204,156,255, 0, 3, 0, 0, 0, 70,155,185, 63, + 12,202, 59,191,163, 86,180,192,149, 32, 73,239, 91,133,255, 0, 3, 0, 0, 0, 29, 97, 43, 62,144,118, 2,192,125,231,175,192, +106, 4,160,210,103,136,255, 0, 3, 0, 0, 0, 97,116,196, 62, 10,176, 56,192,120,239,162,192,164, 8, 20,194, 81,144,255, 0, + 3, 0, 0, 0,185, 2, 5, 64,217,105, 76,192,135,173,142,192,218, 45, 79,187, 56,158,255, 0, 3, 0, 0, 0,163,243,144,191, +252, 41, 73,192,148, 66,154,192,134,230, 73,188,107,150,255, 0, 3, 0, 0, 0,147,133, 20,192,234, 55,124,192,176, 3,107,192, +110,204,196,170,164,175,255, 0, 3, 0, 0, 0, 42,186, 60,192,219,128,189,191, 23, 43,155,192, 41,191,189,222,199,150,255, 0, + 3, 0, 0, 0, 52,164,172,191,106,240, 18,192,141, 58,167,192, 76,226,213,204,128,142,255, 0, 3, 0, 0, 0, 12,171,100,192, +249, 33,243,191,106,221,135,192,248,178,143,214,143,162,255, 0, 3, 0, 0, 0,195, 78, 74,192,241,206, 96,192, 98, 88, 94,192, + 4,188, 34,179,129,179,255, 0, 3, 0, 0, 0, 41,110,177,192, 81, 30,186, 63,105,249,158,191,160,134,165, 30, 86,229,255, 0, + 3, 0, 0, 0, 45,138,172,192,114,149, 17, 64,127,203,200, 62,251,137,171, 48, 56, 9,255, 0, 3, 0, 0, 0, 10, 94,182,192, + 48, 5, 1, 63, 86, 81,165,191,156,131, 24, 12, 94,228,255, 0, 3, 0, 0, 0,117,224,186,192, 37,234,247,190,147, 56,126, 62, +132,128,101,246, 46, 6,255, 0, 3, 0, 0, 0,204, 78,184,192, 19,193, 89,189,187,163,141, 63, 22,130,208,254,241, 22,255, 0, + 3, 0, 0, 0,105,232,174,192,151,187,224, 63,156,183,153, 63,137,136,137, 38, 3, 25,255, 0, 3, 0, 0, 0, 42,118, 68,191, +101,173,176, 64,114,132,233,191, 57,238,142,120,217,216,255, 0, 3, 0, 0, 0, 81,172,191, 62, 67,208,186, 64,195,163,216,190, + 75, 7,131,127,159,247,255, 0, 3, 0, 0, 0,113, 2,218,191,172,151,171, 64,114, 25,212,191,243,219,116,117, 30,220,255, 0, + 3, 0, 0, 0,251,244, 21,192, 28, 12,172, 64, 13,151,128, 61,229,205,196,117,226, 1,255, 0, 3, 0, 0, 0, 51, 39,223,191, +248, 94,177, 64,104,122, 76, 63,155,217, 3,121, 65, 16,255, 0, 3, 0, 0, 0, 72,208, 28, 61, 91, 13,187, 64, 64,215,245, 62, +187, 0,168,127, 66, 9,255, 0, 3, 0, 0, 0, 45, 93,142, 64, 70,137, 14, 64,147,202, 70,192,241, 96,173, 49,202,188,255, 0, + 3, 0, 0, 0,106, 23,173, 64,157,131,182, 63,175,176,225,191, 7,118, 20, 32, 72,218,255, 0, 3, 0, 0, 0, 78,203,128, 64, +124, 14, 69, 64, 55, 0, 61,192,168, 88, 80, 66,199,191,255, 0, 3, 0, 0, 0,133,175,133, 64, 28,149,121, 64, 51,212,168,191, + 4, 92, 86, 84,170,227,255, 0, 3, 0, 0, 0, 8,211,149, 64, 84,166, 94, 64, 68, 24, 29,191,221,101, 30, 76,113,241,255, 0, + 3, 0, 0, 0, 31,169,175, 64,138,176,237, 63, 15,168,103,191,152,119,128, 40, 11,235,255, 0, 3, 0, 0, 0,122, 78, 57, 64, +224, 12,120,192, 7, 56, 84,192, 62, 64,247,171,239,183,255, 0, 3, 0, 0, 0, 0, 74, 48, 64,245,165,155,192,208, 87,227,191, + 38, 61, 68,150,192,217,255, 0, 3, 0, 0, 0, 85,108,100, 64,115, 47, 76,192,149,224, 88,192,102, 77, 90,185,131,182,255, 0, + 3, 0, 0, 0,173,191,150, 64,227,233, 55,192,198,101,254,191,121,102, 79,192, 73,213,255, 0, 3, 0, 0, 0,119, 97,148, 64, +200, 33, 89,192, 24,225,150,191, 7,101, 44,182, 20,229,255, 0, 3, 0, 0, 0, 75,171, 86, 64, 36, 83,150,192, 22, 36,133,191, +220, 72,131,153, 32,232,255, 0, 3, 0, 0, 0,116,251, 81,192,115, 80,139,192, 57,124, 10,192, 81,185, 53,160,254,208,255, 0, + 3, 0, 0, 0, 70,239,122,192, 53,220,138,192,113, 86,227,190, 68,171,132,160,195,246,255, 0, 3, 0, 0, 0, 14, 50, 28,192, +245, 4,153,192,141, 39, 23,192,187,201,215,151, 33,205,255, 0, 3, 0, 0, 0, 34,123,189,191,203,168,178,192,149,106,130,191, +209,222, 63,134,158,234,255, 0, 3, 0, 0, 0,176,127,232,191,177,107,178,192, 47,189,236,189, 65,216,100,134, 66,252,255, 0, + 3, 0, 0, 0, 53,168, 90,192,169, 83,152,192,227,201,133, 62, 29,181, 77,152,136, 4,255, 0, 3, 0, 0, 0,173,191,150,192, +227,233, 55, 64,198,101,254, 63,135,153,177, 63,183, 42,255, 0, 3, 0, 0, 0, 85,108,100,192,115, 47, 76, 64,149,224, 88, 64, +154,178,166, 70,125, 73,255, 0, 3, 0, 0, 0,119, 97,148,192,200, 33, 89, 64, 24,225,150, 63,249,154,212, 73,236, 26,255, 0, + 3, 0, 0, 0, 75,171, 86,192, 36, 83,150, 64, 22, 36,133, 63, 36,183,125,102,224, 23,255, 0, 3, 0, 0, 0, 0, 74, 48,192, +245,165,155, 64,208, 87,227, 63,218,194,188,105, 64, 38,255, 0, 3, 0, 0, 0,122, 78, 57,192,224, 12,120, 64, 7, 56, 84, 64, +194,191, 9, 84, 17, 72,255, 0, 3, 0, 0, 0, 34,123,189, 63,203,168,178, 64,149,106,130, 63, 47, 33,193,121, 98, 21,255, 0, + 3, 0, 0, 0, 14, 50, 28, 64,245, 4,153, 64,141, 39, 23, 64, 69, 54, 41,104,223, 50,255, 0, 3, 0, 0, 0,176,127,232, 63, +177,107,178, 64, 47,189,236, 61,191, 39,156,121,190, 3,255, 0, 3, 0, 0, 0, 53,168, 90, 64,169, 83,152, 64,227,201,133,190, +227, 74,179,103,120,251,255, 0, 3, 0, 0, 0, 70,239,122, 64, 53,220,138, 64,113, 86,227, 62,188, 84,124, 95, 61, 9,255, 0, + 3, 0, 0, 0,116,251, 81, 64,115, 80,139, 64, 57,124, 10, 64,175, 70,203, 95, 2, 47,255, 0, 3, 0, 0, 0,117,224,186, 64, + 37,234,247, 62,147, 56,126,190,124,127,155, 9,210,249,255, 0, 3, 0, 0, 0, 10, 94,182, 64, 48, 5, 1,191, 86, 81,165, 63, +100,124,232,243,162, 27,255, 0, 3, 0, 0, 0,204, 78,184, 64, 19,193, 89, 61,187,163,141,191,234,125, 48, 1, 15,233,255, 0, + 3, 0, 0, 0,105,232,174, 64,151,187,224,191,156,183,153,191,119,119,119,217,253,230,255, 0, 3, 0, 0, 0, 45,138,172, 64, +114,149, 17,192,127,203,200,190, 5,118, 85,207,200,246,255, 0, 3, 0, 0, 0, 41,110,177, 64, 81, 30,186,191,105,249,158, 63, + 96,121, 91,225,170, 26,255, 0, 3, 0, 0, 0,251,244, 21, 64, 28, 12,172,192, 13,151,128,189, 27, 50, 60,138, 30,254,255, 0, + 3, 0, 0, 0,113, 2,218, 63,172,151,171,192,114, 25,212, 63, 13, 36,140,138,226, 35,255, 0, 3, 0, 0, 0, 51, 39,223, 63, +248, 94,177,192,104,122, 76,191,101, 38,253,134,191,239,255, 0, 3, 0, 0, 0, 72,208, 28,189, 91, 13,187,192, 64,215,245,190, + 69,255, 88,128,190,246,255, 0, 3, 0, 0, 0, 81,172,191,190, 67,208,186,192,195,163,216, 62,181,248,125,128, 97, 8,255, 0, + 3, 0, 0, 0, 42,118, 68, 63,101,173,176,192,114,132,233, 63,199, 17,114,135, 39, 39,255, 0, 3, 0, 0, 0,133,175,133,192, + 28,149,121,192, 51,212,168, 63,252,163,170,171, 86, 28,255, 0, 3, 0, 0, 0, 78,203,128,192,124, 14, 69,192, 55, 0, 61, 64, + 88,167,176,189, 57, 64,255, 0, 3, 0, 0, 0, 31,169,175,192,138,176,237,191, 15,168,103, 63,104,136,128,215,245, 20,255, 0, + 3, 0, 0, 0, 8,211,149,192, 84,166, 94,192, 68, 24, 29, 63, 35,154,226,179,143, 14,255, 0, 3, 0, 0, 0,106, 23,173,192, +157,131,182,191,175,176,225, 63,249,137,236,223,184, 37,255, 0, 3, 0, 0, 0, 45, 93,142,192, 70,137, 14,192,147,202, 70, 64, + 15,159, 83,206, 54, 67,255, 0, 3, 0, 0, 0,185, 2, 5,192,217,105, 76, 64,135,173,142, 64, 38,210,177, 68,200, 97,255, 0, + 3, 0, 0, 0, 97,116,196,190, 10,176, 56, 64,120,239,162, 64, 92,247,236, 61,175,111,255, 0, 3, 0, 0, 0,142, 32, 48,192, +155,140, 32, 64,195, 1,145, 64,253,196, 78, 55, 52, 99,255, 0, 3, 0, 0, 0,231,195, 21,192,236, 58,101, 63,218,178,169, 64, + 9,206,225, 19, 38,116,255, 0, 3, 0, 0, 0, 70,155,185,191, 12,202, 59, 63,163, 86,180, 64,107,223,183, 16,165,122,255, 0, + 3, 0, 0, 0, 29, 97, 43,190,144,118, 2, 64,125,231,175, 64,150,251, 96, 45,153,119,255, 0, 3, 0, 0, 0,195, 78, 74, 64, +241,206, 96, 64, 98, 88, 94, 64,252, 67,222, 76,127, 76,255, 0, 3, 0, 0, 0, 12,171,100, 64,249, 33,243, 63,106,221,135, 64, + 8, 77,113, 41,113, 93,255, 0, 3, 0, 0, 0,147,133, 20, 64,234, 55,124, 64,176, 3,107, 64,146, 51, 60, 85, 92, 80,255, 0, + 3, 0, 0, 0,164,243,144, 63,252, 41, 73, 64,148, 66,154, 64,122, 25,183, 67,149,105,255, 0, 3, 0, 0, 0, 52,164,172, 63, +106,240, 18, 64,141, 58,167, 64,180, 29, 43, 51,128,113,255, 0, 3, 0, 0, 0, 42,186, 60, 64,219,128,189, 63, 23, 43,155, 64, +215, 64, 67, 33, 57,105,255, 0, 3, 0, 0, 0,101, 1,160, 64, 47,146,184,191,153, 38, 45, 64, 31,109,160,225,154, 59,255, 0, + 3, 0, 0, 0,246,246,115, 64,183, 86, 15,192, 51,168,118, 64, 7, 83, 27,208,211, 84,255, 0, 3, 0, 0, 0, 70,241,164, 64, +102,218,251,190,143, 82, 48, 64, 34,112, 46,244,146, 60,255, 0, 3, 0, 0, 0,192, 81,136, 64, 55,239, 4, 63, 24,222,127, 64, +126, 92, 98, 10,221, 87,255, 0, 3, 0, 0, 0,151,178,104, 64,245,107,205, 61,175, 60,147, 64, 78, 80, 51, 2,165, 99,255, 0, + 3, 0, 0, 0,215,229, 85, 64,166,178,218,191,183, 55,144, 64,218, 73,123,218,146, 97,255, 0, 3, 0, 0, 0,188,194,101, 63, + 17, 84,154,192,240,193, 77, 64,180, 20, 42,151,114, 70,255, 0, 3, 0, 0, 0, 19, 46, 71, 59,194,240,115,192,175,166,142, 64, + 16, 1, 95,173,190, 97,255, 0, 3, 0, 0, 0, 82,168,234, 63, 87, 62,149,192,118, 12, 67, 64,251, 38, 68,154, 46, 67,255, 0, + 3, 0, 0, 0,208, 27, 46, 64,124,104, 86,192, 85, 52,126, 64,119, 58, 30,183,122, 87,255, 0, 3, 0, 0, 0,186, 10, 16, 64, +249,106, 52,192,210,253,147, 64, 74, 49,125,193, 58,100,255, 0, 3, 0, 0, 0, 93, 33,240, 62,191,199, 71,192,142, 47,158, 64, + 42, 10,216,186, 57,107,255, 0, 3, 0, 0, 0,103,139, 94,192,153,146,250,191, 72,141,137, 64,237,180,100,212, 11, 94,255, 0, + 3, 0, 0, 0,107,195, 37,192, 4,213, 36,191, 20, 33,167, 64,105,200, 62,241, 88,114,255, 0, 3, 0, 0, 0,158,103, 67,192, + 82,206, 51,192, 39,168,132, 64, 53,189,193,195, 14, 91,255, 0, 3, 0, 0, 0,209,230,173,191,231,135, 71,192, 27,234,152, 64, +108,226,252,188,245,104,255, 0, 3, 0, 0, 0, 77,154,217,191,185, 69, 78,191,221,196,177, 64,203,217, 20,238,214,120,255, 0, + 3, 0, 0, 0,136,131,100,191, 16, 95, 27,192, 4,115,168, 64,134,235,118,202,113,114,255, 0, 3, 0, 0, 0,139,220, 37,192, +245,135,141, 64,114,173, 54,192, 45,199, 95, 96,211,193,255, 0, 3, 0, 0, 0,204,119, 84,192, 93, 73,130, 64,212,107, 38,192, + 58,183,223, 88,137,199,255, 0, 3, 0, 0, 0,208, 76, 67,192, 62,120,111, 64, 14, 89, 85,192, 80,189,196, 81,140,183,255, 0, + 3, 0, 0, 0, 68,147,238,191,166,230,100, 64,234, 9,136,192,216,215,130, 78, 59,163,255, 0, 3, 0, 0, 0, 30,149,109,191, + 40, 18,111, 64,171,100,141,192, 37,235,201, 81,199,159,255, 0, 3, 0, 0, 0,144,237,178,191, 25,136,136, 64,121, 1,113,192, +117,225,189, 92, 62,173,255, 0, 3, 0, 0, 0,214, 82, 66, 63,128,115,152, 64,164, 25, 85,192,241, 16, 27,104,126,183,255, 0, + 3, 0, 0, 0,119,155,171,189,138, 40,155, 64,113, 96, 83,192,128,254,196,105,238,183,255, 0, 3, 0, 0, 0, 67,138,194, 62, +177, 97,138, 64, 75,158,124,192,112, 8,134, 94, 29,170,255, 0, 3, 0, 0, 0,158,106, 94,191,167,106, 30, 64,254,240,167,192, +229,236,187, 53,105,141,255, 0, 3, 0, 0, 0, 22,114,229,191,193, 96, 20, 64,253,167,162,192, 22,217, 93, 50,244,144,255, 0, + 3, 0, 0, 0, 45,210,162,191,233,211,224, 63,184, 67,174,192, 69,228,245, 37,244,136,255, 0, 3, 0, 0, 0, 37, 61,152,192, +230, 9, 14, 64,137,179, 39,192, 85,152,183, 48,226,198,255, 0, 3, 0, 0, 0,232,187,140,192, 6, 96, 62, 64,107,247, 30,192, + 7,160, 68, 65, 11,202,255, 0, 3, 0, 0, 0,116,134,132,192, 40,130, 40, 64,237,207, 77,192,139,165,149, 57, 30,186,255, 0, + 3, 0, 0, 0, 12,129,129,192,231,129,173, 63,159,125,128,192, 62,167, 15, 29,123,168,255, 0, 3, 0, 0, 0,254,112,134,192, +126,146,207, 62,159, 19,130,192, 15,164,119, 9,117,167,255, 0, 3, 0, 0, 0,189,121,149,192,142,192,111, 63, 76, 95, 90,192, + 95,154,107, 20,236,180,255, 0, 3, 0, 0, 0, 12, 65,162,192, 11, 84,149,191,172,202, 44,192, 60,145, 47,230, 75,197,255, 0, + 3, 0, 0, 0, 74,120,165,192, 95, 78,167,190,139, 51, 48,192, 54,143,140,248,244,195,255, 0, 3, 0, 0, 0, 61,161,150,192, +107,221, 89,191,118,113, 89,192, 40,153, 79,237, 35,182,255, 0, 3, 0, 0, 0, 52, 56, 66,192,206, 40,139, 62, 21,116,160,192, + 13,190, 19, 6,121,146,255, 0, 3, 0, 0, 0,245,120, 56,192,118,213,154, 63, 81,227,158,192, 81,193, 47, 26,133,147,255, 0, + 3, 0, 0, 0,220,104, 22,192,204,221, 40, 63,115,137,170,192, 16,205, 89, 14,117,139,255, 0, 3, 0, 0, 0,145,143, 39, 64, +190, 49, 94, 64,165, 27,124,192,238, 56,252, 75, 43,170,255, 0, 3, 0, 0, 0,130,168, 6, 64,190,132,130, 64, 12, 96,105,192, +226, 45, 91, 89,173,176,255, 0, 3, 0, 0, 0, 76,169,222, 63,205,107,104, 64,150,142,136,192, 23, 38,105, 79, 33,163,255, 0, + 3, 0, 0, 0,137,207,229, 63, 30, 63, 22, 64,207,235,161,192,198, 39,227, 50,127,145,255, 0, 3, 0, 0, 0,239, 11, 14, 64, +175,114,191, 63,254,208,166,192,133, 48, 81, 33, 87,142,255, 0, 3, 0, 0, 0,239,222, 43, 64,212,226, 11, 64,227, 71,151,192, + 33, 58,140, 47, 91,152,255, 0, 3, 0, 0, 0, 0,245,124, 64, 27, 32,187, 62, 57, 6,138,192,138, 86,176, 7, 2,162,255, 0, + 3, 0, 0, 0, 42, 75,112, 64,228, 42,152, 63, 25, 44,139,192, 0, 82,159, 25, 31,161,255, 0, 3, 0, 0, 0,178,218, 82, 64, +178,247, 1, 63,211,129,154,192, 35, 72, 4, 11,217,150,255, 0, 3, 0, 0, 0,208,203,104, 63,146, 6,113, 63,108, 5,183,192, +132, 19,150, 20, 49,131,255, 0, 3, 0, 0, 0, 26, 68,251, 62,111, 38,228, 63,114, 48,178,192,139, 10,158, 38,109,134,255, 0, + 3, 0, 0, 0,163, 78,149, 61, 65, 25,137, 63,234,102,184,192, 54, 1, 52, 23, 34,130,255, 0, 3, 0, 0, 0, 98,140, 80, 64, +169,205,238,191, 83, 69,144,192, 70, 71,145,215,173,157,255, 0, 3, 0, 0, 0,177, 39,109, 64,155,213,147,191,238,143,140,192, + 57, 81,247,230, 77,160,255, 0, 3, 0, 0, 0,100,225, 66, 64,146,191,131,191,152, 18,157,192,178, 66,128,233, 25,149,255, 0, + 3, 0, 0, 0,190, 24,220, 63,163,163,202,191,160,244,171,192, 99, 37,199,220,196,138,255, 0, 3, 0, 0, 0,227,219,133, 63, +172, 47, 17,192, 93,160,169,192,126, 23,164,206, 68,140,255, 0, 3, 0, 0, 0, 46,202,247, 63, 23,140, 27,192,116,252,158,192, +217, 41, 77,203, 32,147,255, 0, 3, 0, 0, 0, 36,220, 68, 63, 24,143,132,192, 20,105,130,192,163, 16, 66,165, 72,167,255, 0, + 3, 0, 0, 0, 60,255,185, 63,215,244,108,192,129, 7,138,192,113, 31, 11,175,251,161,255, 0, 3, 0, 0, 0,220, 18, 19, 63, +168,186, 98,192, 66,136,148,192,155, 12,121,178,241,154,255, 0, 3, 0, 0, 0,131,119,172,187,182,209,162,191,170, 73,183,192, +209,255,144,228,251,130,255, 0, 3, 0, 0, 0,165,230, 40, 63,246,111, 24,191, 50,150,185,192, 19, 14, 18,243,113,129,255, 0, + 3, 0, 0, 0,123, 45, 50,190,213, 16,230,190,160,240,186,192,231,251,124,246,109,128,255, 0, 3, 0, 0, 0,221, 22,199,191, + 71,211,134,192, 37,161,113,192, 98,222,255,163,157,173,255, 0, 3, 0, 0, 0,171,131, 58,191, 57,178,140,192,214,174,115,192, +105,240,201,159, 11,173,255, 0, 3, 0, 0, 0,228,119,112,191, 49, 46,115,192,186,222,139,192,152,235,221,172,217,160,255, 0, + 3, 0, 0, 0,122, 75,254,191, 18, 36, 50,192, 84, 70,152,192,253,211, 46,195, 87,152,255, 0, 3, 0, 0, 0,190,239, 52,192, +193,186, 22,192,166,240,145,192,167,194, 3,204,108,156,255, 0, 3, 0, 0, 0, 51, 23, 39,192, 14,245, 76,192,105,248,132,192, + 29,199,137,186,200,164,255, 0, 3, 0, 0, 0,202,137,140,192, 4,234, 33,192,152,117, 60,192,215,159,216,200, 6,192,255, 0, + 3, 0, 0, 0, 68,176,115,192, 85, 49, 68,192, 65,173, 79,192,178,172, 81,189, 81,185,255, 0, 3, 0, 0, 0,131,173,128,192, + 50,170, 14,192,247, 71,105,192, 30,168, 64,207,189,176,255, 0, 3, 0, 0, 0,230, 80, 22,192, 50,155,141,191,108, 95,168,192, + 3,205, 6,232, 19,141,255, 0, 3, 0, 0, 0, 96,113,194,191,166,184,195,191, 31,160,174,192,205,222,245,222,227,136,255, 0, + 3, 0, 0, 0,249,244,213,191, 10, 33, 52,191,248, 94,178,192,172,219, 3,241, 48,134,255, 0, 3, 0, 0, 0, 30, 26,167,192, + 62, 11, 42, 64,199,163,159,190, 45,142, 26, 58,236,248,255, 0, 3, 0, 0, 0, 15,242,157,192,177, 35, 63, 64,242,230,132,191, +115,148,134, 65, 39,233,255, 0, 3, 0, 0, 0, 58,163,169,192,184,207, 14, 64, 43, 92,148,191,122,140,250, 48,193,230,255, 0, + 3, 0, 0, 0,241, 83,184,192, 33,241,117, 63,204, 69,248,190, 32,130,245, 20, 22,246,255, 0, 3, 0, 0, 0, 88,178,186,192, +180, 33,226, 62, 69,211,165, 62,153,128, 65, 10,196, 6,255, 0, 3, 0, 0, 0,100,194,181,192,227, 37,178, 63, 65, 51,191, 62, +199,131,217, 29,201, 7,255, 0, 3, 0, 0, 0,140, 68,168,192,162,100, 57, 63, 90, 41, 31, 64, 91,141,195, 15,175, 54,255, 0, + 3, 0, 0, 0,185,114,173,192,147, 11,162, 63,136,131,237, 63,204,137,106, 27,187, 40,255, 0, 3, 0, 0, 0, 90, 82,178,192, +181, 0,168, 62,125, 64,231, 63,136,134, 78, 7,175, 39,255, 0, 3, 0, 0, 0,235, 52,185,192,191,185, 83,191, 39,176,252,190, +201,129,211,237,241,244,255, 0, 3, 0, 0, 0, 95,222,182,192,178, 32,161,190, 48, 92,165,191, 90,131,208,248,211,227,255, 0, + 3, 0, 0, 0, 52,119,179,192,223,204,147,191,116,141,160,191,169,133,113,230,103,228,255, 0, 3, 0, 0, 0,109, 88, 35, 63, +129,186,182, 64,207, 8,152,191, 5, 14,127,124,202,229,255, 0, 3, 0, 0, 0,226, 54, 99, 63,172,134,174, 64, 96, 98,250,191, +180, 19,244,118, 14,213,255, 0, 3, 0, 0, 0,150,195, 60, 61, 46,121,177, 64,174, 6,245,191, 84, 1,249,120, 55,214,255, 0, + 3, 0, 0, 0,228,160,145,191,121, 59,181, 64,246,252,123,191, 63,231,214,123, 42,235,255, 0, 3, 0, 0, 0, 29,166,188,191, +167,120,181, 64, 4,224,165,189, 81,224,253,123,203,253,255, 0, 3, 0, 0, 0, 26,186, 9,191,104,142,186, 64,128, 74,126,190, +158,243, 69,127, 88,250,255, 0, 3, 0, 0, 0,179,205, 19,191, 33,145,175, 64,102,151,253, 63,125,243,171,119,167, 43,255, 0, + 3, 0, 0, 0,163,114,134,190, 81, 94,183, 64, 73,210,157, 63, 40,250,240,124, 49, 27,255, 0, 3, 0, 0, 0,253,217,151,191, + 90, 89,178, 64,210,246,178, 63, 89,230,146,121,187, 30,255, 0, 3, 0, 0, 0,107,200, 50,192, 4, 21,164, 64,143,252, 18,191, +229,194,189,111, 58,243,255, 0, 3, 0, 0, 0,219,140, 29,192,164,216,163, 64,163,160,187,191, 2,202,148,111, 27,224,255, 0, + 3, 0, 0, 0, 8, 63, 76,192,149, 92,152, 64,201, 6,157,191,254,185,184,103, 25,229,255, 0, 3, 0, 0, 0,102, 31,167, 64, + 18,113,133, 63,122,150, 29,192,214,113,149, 22, 5,202,255, 0, 3, 0, 0, 0,115, 48,157, 64, 74,183, 33, 63, 21,172, 72,192, + 50,107,106, 13, 91,187,255, 0, 3, 0, 0, 0,250, 48,151, 64,117,157,186, 63,236, 37, 74,192, 41,103,126, 31, 23,187,255, 0, + 3, 0, 0, 0,118, 31,148, 64,144, 99, 46, 64, 95,237, 21,192,101,101,141, 59,115,205,255, 0, 3, 0, 0, 0, 40,177,150, 64, +101,250, 73, 64,104,252,189,191, 13,103,113, 68, 39,223,255, 0, 3, 0, 0, 0, 59, 67,164, 64,106,116, 19, 64, 96,145,209,191, +204,111,223, 50,255,219,255, 0, 3, 0, 0, 0, 9, 99,168, 64,184,173, 32, 64,129, 16, 27, 63,228,114,189, 54,164, 13,255, 0, + 3, 0, 0, 0,225, 1,174, 64, 65,167, 12, 64,199, 1, 38,190,149,118, 17, 48,195,252,255, 0, 3, 0, 0, 0,172,156,160, 64, + 23,121, 66, 64,220,253, 53,188,155,109, 25, 66, 0, 0,255, 0, 3, 0, 0, 0,230,184,106, 64,117, 83,133, 64, 76, 95,243,191, +202, 79,251, 90, 77,214,255, 0, 3, 0, 0, 0,116,166,101, 64, 67,107,111, 64, 69,233, 47,192, 23, 78,219, 81, 34,196,255, 0, + 3, 0, 0, 0,109, 20, 68, 64,202, 9,139, 64,124,255, 29,192,138, 66, 22, 95, 6,202,255, 0, 3, 0, 0, 0, 46,138, 12, 64, +195,168,156,192, 99,240, 23,192,172, 47, 54,149,252,203,255, 0, 3, 0, 0, 0,110,189,201, 63, 48, 28,154,192,180,148, 60,192, + 2, 34,195,150,147,191,255, 0, 3, 0, 0, 0, 21, 55, 17, 64,125, 67,140,192,118, 8, 75,192, 61, 49, 50,160,221,186,255, 0, + 3, 0, 0, 0, 85,126,100, 64,103,211,114,192,187,176, 43,192, 60, 78,241,172, 2,198,255, 0, 3, 0, 0, 0, 29,112,133, 64, +168, 45,104,192, 95, 44,249,191,154, 90, 96,176, 48,213,255, 0, 3, 0, 0, 0,192,193, 95, 64,221, 5,138,192, 42,219,239,191, +181, 76, 61,162,177,214,255, 0, 3, 0, 0, 0, 28, 21,134, 64,185,231,130,192,175,210,133, 62,128, 91,182,166, 33, 6,255, 0, + 3, 0, 0, 0,128,101,115, 64,106,100,142,192,214,174,205,190, 32, 83, 12,159,127,247,255, 0, 3, 0, 0, 0,187,250,142, 64, +178,123,113,192, 90,120,242,190, 99, 97,142,173,244,245,255, 0, 3, 0, 0, 0,115, 83,149, 64, 25,118, 24,192, 96, 5, 41,192, +195,101, 61,204, 36,198,255, 0, 3, 0, 0, 0,236, 97,130, 64,181,248, 34,192, 49,132, 87,192, 17, 89,184,200,144,182,255, 0, + 3, 0, 0, 0,186,103,144, 64, 91, 9,234,191,150,226, 80,192,152, 98,121,216,152,184,255, 0, 3, 0, 0, 0,208, 74,136,192, +231,117,121,192, 32,193,133,191,248,162, 42,171,249,232,255, 0, 3, 0, 0, 0, 31, 84,144,192, 24, 19, 87,192, 53, 65,211,191, + 74,157,248,182,224,219,255, 0, 3, 0, 0, 0, 7, 90,123,192,107,238,121,192,115,227,247,191, 22,170, 1,171,218,213,255, 0, + 3, 0, 0, 0,161,112, 54,192, 94, 77,156,192,207,107,196,191,198,193, 23,149, 32,223,255, 0, 3, 0, 0, 0, 24, 41, 22,192, + 1,197,169,192,191, 68, 84,191, 45,204,105,140,172,237,255, 0, 3, 0, 0, 0, 73,243, 75,192, 86, 16,156,192,180,150, 33,191, +216,186, 63,149,194,241,255, 0, 3, 0, 0, 0,140,246, 19,192,148, 60,166,192, 11, 70,182, 63,164,205,159,142,127, 31,255, 0, + 3, 0, 0, 0, 17, 21, 58,192,224,209,160,192,103,100, 88, 63,202,192, 72,146,171, 18,255, 0, 3, 0, 0, 0,151,252, 4,192, + 71, 89,174,192,215, 93, 38, 63,148,210, 55,137,122, 14,255, 0, 3, 0, 0, 0, 53,176,150,191,238,252,174,192, 37,172,226,191, +114,230,199,136, 20,217,255, 0, 3, 0, 0, 0,225,105,214,191,211,177,161,192,160,229, 29,192,197,219,175,145, 38,202,255, 0, + 3, 0, 0, 0, 62,213, 88,191,193, 70,167,192,212,217, 32,192,221,237,232,141,230,200,255, 0, 3, 0, 0, 0,236, 97,130,192, +181,248, 34, 64, 49,132, 87, 64,239,166, 72, 55,112, 73,255, 0, 3, 0, 0, 0,186,103,144,192, 91, 9,234, 63,150,226, 80, 64, +104,157,135, 39,104, 71,255, 0, 3, 0, 0, 0,115, 83,149,192, 25,118, 24, 64, 96, 5, 41, 64, 61,154,195, 51,220, 57,255, 0, + 3, 0, 0, 0, 29,112,133,192,168, 45,104, 64, 95, 44,249, 63,102,165,160, 79,208, 42,255, 0, 3, 0, 0, 0,192,193, 95,192, +221, 5,138, 64, 42,219,239, 63, 75,179,195, 93, 79, 41,255, 0, 3, 0, 0, 0, 85,126,100,192,103,211,114, 64,187,176, 43, 64, +196,177, 15, 83,254, 57,255, 0, 3, 0, 0, 0,110,189,201,191, 48, 28,154, 64,180,148, 60, 64,254,221, 61,105,109, 64,255, 0, + 3, 0, 0, 0, 21, 55, 17,192,125, 67,140, 64,118, 8, 75, 64,195,206,206, 95, 35, 69,255, 0, 3, 0, 0, 0, 46,138, 12,192, +195,168,156, 64, 99,240, 23, 64, 84,208,202,106, 4, 52,255, 0, 3, 0, 0, 0,128,101,115,192,106,100,142, 64,214,174,205, 62, +224,172,244, 96,129, 8,255, 0, 3, 0, 0, 0,187,250,142,192,178,123,113, 64, 90,120,242, 62,157,158,114, 82, 12, 10,255, 0, + 3, 0, 0, 0, 28, 21,134,192,185,231,130, 64,175,210,133,190,128,164, 74, 89,223,249,255, 0, 3, 0, 0, 0,225,105,214, 63, +211,177,161, 64,160,229, 29, 64, 59, 36, 81,110,218, 53,255, 0, 3, 0, 0, 0, 62,213, 88, 63,193, 70,167, 64,212,217, 32, 64, + 35, 18, 24,114, 26, 55,255, 0, 3, 0, 0, 0, 53,176,150, 63,238,252,174, 64, 37,172,226, 63,142, 25, 57,119,236, 38,255, 0, + 3, 0, 0, 0, 24, 41, 22, 64, 1,197,169, 64,191, 68, 84, 63,211, 51,151,115, 84, 18,255, 0, 3, 0, 0, 0, 73,243, 75, 64, + 86, 16,156, 64,180,150, 33, 63, 40, 69,193,106, 62, 14,255, 0, 3, 0, 0, 0,161,112, 54, 64, 94, 77,156, 64,208,107,196, 63, + 58, 62,233,106,224, 32,255, 0, 3, 0, 0, 0, 31, 84,144, 64, 24, 19, 87, 64, 53, 65,211, 63,182, 98, 8, 73, 32, 36,255, 0, + 3, 0, 0, 0, 7, 90,123, 64,107,238,121, 64,115,227,247, 63,234, 85,255, 84, 38, 42,255, 0, 3, 0, 0, 0,208, 74,136, 64, +231,117,121, 64, 32,193,133, 63, 8, 93,214, 84, 7, 23,255, 0, 3, 0, 0, 0, 17, 21, 58, 64,224,209,160, 64,103,100, 88,191, + 54, 63,184,109, 85,237,255, 0, 3, 0, 0, 0,151,252, 4, 64, 71, 89,174, 64,215, 93, 38,191,108, 45,201,118,134,241,255, 0, + 3, 0, 0, 0,140,246, 19, 64,148, 60,166, 64, 11, 70,182,191, 92, 50, 97,113,129,224,255, 0, 3, 0, 0, 0, 95,222,182, 64, +178, 32,161, 62, 48, 92,165, 63,166,124, 48, 7, 45, 28,255, 0, 3, 0, 0, 0, 52,119,179, 64,223,204,147, 63,116,141,160, 63, + 87,122,143, 25,153, 27,255, 0, 3, 0, 0, 0,235, 52,185, 64,191,185, 83, 63, 39,176,252, 62, 55,126, 45, 18, 15, 11,255, 0, + 3, 0, 0, 0, 88,178,186, 64,180, 33,226,190, 69,211,165,190,103,127,191,245, 60,249,255, 0, 3, 0, 0, 0,100,194,181, 64, +227, 37,178,191, 65, 51,191,190, 57,124, 39,226, 55,248,255, 0, 3, 0, 0, 0,241, 83,184, 64, 33,241,117,191,204, 69,248, 62, +224,125, 11,235,234, 9,255, 0, 3, 0, 0, 0, 15,242,157, 64,177, 35, 63,192,242,230,132, 63,141,107,122,190,217, 22,255, 0, + 3, 0, 0, 0, 58,163,169, 64,184,207, 14,192, 43, 92,148, 63,134,115, 6,207, 63, 25,255, 0, 3, 0, 0, 0, 30, 26,167, 64, + 62, 11, 42,192,199,163,159, 62,211,113,230,197, 20, 7,255, 0, 3, 0, 0, 0,185,114,173, 64,147, 11,162,191,136,131,237,191, + 52,118,150,228, 69,215,255, 0, 3, 0, 0, 0, 90, 82,178, 64,181, 0,168,190,125, 64,231,191,120,121,178,248, 81,216,255, 0, + 3, 0, 0, 0,140, 68,168, 64,162,100, 57,191, 90, 41, 31,192,165,114, 61,240, 81,201,255, 0, 3, 0, 0, 0,219,140, 29, 64, +164,216,163,192,163,160,187, 63,254, 53,108,144,229, 31,255, 0, 3, 0, 0, 0, 8, 63, 76, 64,149, 92,152,192,201, 6,157, 63, + 2, 70, 72,152,231, 26,255, 0, 3, 0, 0, 0,107,200, 50, 64, 4, 21,164,192,143,252, 18, 63, 27, 61, 67,144,198, 12,255, 0, + 3, 0, 0, 0, 29,166,188, 63,167,120,181,192, 4,224,165, 61,175, 31, 3,132, 53, 2,255, 0, 3, 0, 0, 0, 26,186, 9, 63, +104,142,186,192,128, 74,126, 62, 98, 12,187,128,168, 5,255, 0, 3, 0, 0, 0,228,160,145, 63,121, 59,181,192,246,252,123, 63, +193, 24, 42,132,214, 20,255, 0, 3, 0, 0, 0,226, 54, 99,191,172,134,174,192, 96, 98,250, 63, 76,236, 12,137,242, 42,255, 0, + 3, 0, 0, 0,150,195, 60,189, 46,121,177,192,174, 6,245, 63,172,254, 7,135,201, 41,255, 0, 3, 0, 0, 0,109, 88, 35,191, +129,186,182,192,207, 8,152, 63,251,241,129,131, 54, 26,255, 0, 3, 0, 0, 0,163,114,134, 62, 81, 94,183,192, 73,210,157,191, +216, 5, 16,131,207,228,255, 0, 3, 0, 0, 0,253,217,151, 63, 90, 89,178,192,210,246,178,191,167, 25,110,134, 69,225,255, 0, + 3, 0, 0, 0,179,205, 19, 63, 33,145,175,192,102,151,253,191,131, 12, 85,136, 89,212,255, 0, 3, 0, 0, 0,116,166,101,192, + 67,107,111,192, 69,233, 47, 64,233,177, 37,174,222, 59,255, 0, 3, 0, 0, 0,109, 20, 68,192,202, 9,139,192,124,255, 29, 64, +118,189,234,160,250, 53,255, 0, 3, 0, 0, 0,230,184,106,192,117, 83,133,192, 76, 95,243, 63, 54,176, 5,165,179, 41,255, 0, + 3, 0, 0, 0, 40,177,150,192,101,250, 73,192,104,252,189, 63,243,152,143,187,217, 32,255, 0, 3, 0, 0, 0, 59, 67,164,192, +106,116, 19,192, 96,145,209, 63, 52,144, 33,205, 1, 36,255, 0, 3, 0, 0, 0,118, 31,148,192,144, 99, 46,192, 95,237, 21, 64, +155,154,115,196,141, 50,255, 0, 3, 0, 0, 0,115, 48,157,192, 74,183, 33,191, 21,172, 72, 64,206,148,150,242,165, 68,255, 0, + 3, 0, 0, 0,250, 48,151,192,117,157,186,191,236, 37, 74, 64,215,152,130,224,233, 68,255, 0, 3, 0, 0, 0,102, 31,167,192, + 18,113,133,191,122,150, 29, 64, 42,142,107,233,251, 53,255, 0, 3, 0, 0, 0,225, 1,174,192, 65,167, 12,192,199, 1, 38, 62, +107,137,239,207, 61, 3,255, 0, 3, 0, 0, 0,172,156,160,192, 23,121, 66,192,220,253, 53, 60,101,146,231,189, 0, 0,255, 0, + 3, 0, 0, 0, 9, 99,168,192,184,173, 32,192,129, 16, 27,191, 28,141, 67,201, 92,242,255, 0, 3, 0, 0, 0,220, 18, 19,191, +168,186, 98, 64, 66,136,148, 64,101,243,135, 77, 15,101,255, 0, 3, 0, 0, 0, 36,220, 68,191, 24,143,132, 64, 20,105,130, 64, + 93,239,190, 90,184, 88,255, 0, 3, 0, 0, 0, 60,255,185,191,215,244,108, 64,129, 7,138, 64,143,224,245, 80, 5, 94,255, 0, + 3, 0, 0, 0, 46,202,247,191, 23,140, 27, 64,116,252,158, 64, 39,214,179, 52,224,108,255, 0, 3, 0, 0, 0,190, 24,220,191, +163,163,202, 63,160,244,171, 64,157,218, 57, 35, 60,117,255, 0, 3, 0, 0, 0,227,219,133,191,172, 47, 17, 64, 93,160,169, 64, +130,232, 92, 49,188,115,255, 0, 3, 0, 0, 0,123, 45, 50, 62,213, 16,230, 62,160,240,186, 64, 25, 4,132, 9,147,127,255, 0, + 3, 0, 0, 0,131,119,172, 59,182,209,162, 63,170, 73,183, 64, 47, 0,112, 27, 5,125,255, 0, 3, 0, 0, 0,165,230, 40,191, +246,111, 24, 63, 50,150,185, 64,237,241,238, 12,143,126,255, 0, 3, 0, 0, 0,100,225, 66,192,146,191,131, 63,152, 18,157, 64, + 78,189,128, 22,231,106,255, 0, 3, 0, 0, 0, 98,140, 80,192,169,205,238, 63, 83, 69,144, 64,186,184,111, 40, 83, 98,255, 0, + 3, 0, 0, 0,177, 39,109,192,154,213,147, 63,239,143,140, 64,199,174, 9, 25,179, 95,255, 0, 3, 0, 0, 0,131,173,128, 64, + 50,170, 14, 64,247, 71,105, 64,226, 87,192, 48, 67, 79,255, 0, 3, 0, 0, 0,202,137,140, 64, 4,234, 33, 64,152,117, 60, 64, + 41, 96, 40, 55,250, 63,255, 0, 3, 0, 0, 0, 68,176,115, 64, 85, 49, 68, 64, 65,173, 79, 64, 78, 83,175, 66,175, 70,255, 0, + 3, 0, 0, 0, 51, 23, 39, 64, 14,245, 76, 64,105,248,132, 64,227, 56,119, 69, 56, 91,255, 0, 3, 0, 0, 0,122, 75,254, 63, + 17, 36, 50, 64, 83, 70,152, 64, 3, 44,210, 60,169,103,255, 0, 3, 0, 0, 0,190,239, 52, 64,193,186, 22, 64,166,240,145, 64, + 89, 61,253, 51,148, 99,255, 0, 3, 0, 0, 0,249,244,213, 63, 10, 33, 52, 63,248, 94,178, 64, 84, 36,253, 14,208,121,255, 0, + 3, 0, 0, 0,230, 80, 22, 64, 50,155,141, 63,108, 95,168, 64,253, 50,250, 23,237,114,255, 0, 3, 0, 0, 0, 96,113,194, 63, +166,184,195, 63, 31,160,174, 64, 51, 33, 11, 33, 29,119,255, 0, 3, 0, 0, 0,228,119,112, 63, 49, 46,115, 64,186,222,139, 64, +104, 20, 35, 83, 40, 95,255, 0, 3, 0, 0, 0,221, 22,199, 63, 71,211,134, 64, 37,161,113, 64,158, 33, 1, 92, 99, 82,255, 0, + 3, 0, 0, 0,170,131, 58, 63, 58,178,140, 64,213,174,115, 64,151, 15, 55, 96,245, 82,255, 0, 3, 0, 0, 0,116,134,132, 64, + 40,130, 40,192,237,207, 77, 64,117, 90,107,198,226, 69,255, 0, 3, 0, 0, 0,232,187,140, 64, 6, 96, 62,192,107,247, 30, 64, +249, 95,188,190,245, 53,255, 0, 3, 0, 0, 0, 37, 61,152, 64,230, 9, 14,192,137,179, 39, 64,171,103, 73,207, 30, 57,255, 0, + 3, 0, 0, 0,189,121,149, 64,142,192,111,191, 76, 95, 90, 64,161,101,149,235, 20, 75,255, 0, 3, 0, 0, 0,254,112,134, 64, +126,146,207,190,159, 19,130, 64,241, 91,137,246,139, 88,255, 0, 3, 0, 0, 0, 12,129,129, 64,231,129,173,191,159,125,128, 64, +194, 88,241,226,133, 87,255, 0, 3, 0, 0, 0,220,104, 22, 64,204,221, 40,191,115,137,170, 64,240, 50,167,241,139,116,255, 0, + 3, 0, 0, 0,245,120, 56, 64,118,213,154,191, 81,227,158, 64,175, 62,209,229,123,108,255, 0, 3, 0, 0, 0, 52, 56, 66, 64, +206, 40,139,190, 21,116,160, 64,243, 65,237,249,135,109,255, 0, 3, 0, 0, 0, 61,161,150, 64,107,221, 89, 63,118,113, 89, 64, +216,102,177, 18,221, 73,255, 0, 3, 0, 0, 0, 74,120,165, 64, 95, 78,167, 62,139, 51, 48, 64,202,112,116, 7, 12, 60,255, 0, + 3, 0, 0, 0, 12, 65,162, 64, 11, 84,149, 63,172,202, 44, 64,196,110,209, 25,181, 58,255, 0, 3, 0, 0, 0, 67,138,194,190, +177, 97,138,192, 75,158,124, 64,144,247,122,161,227, 85,255, 0, 3, 0, 0, 0,214, 82, 66,191,128,115,152,192,164, 25, 85, 64, + 15,239,229,151,130, 72,255, 0, 3, 0, 0, 0,119,155,171, 61,138, 40,155,192,113, 96, 83, 64,128, 1, 60,150, 18, 72,255, 0, + 3, 0, 0, 0,144,237,178, 63, 25,136,136,192,121, 1,113, 64,139, 30, 67,163,194, 82,255, 0, 3, 0, 0, 0, 68,147,238, 63, +166,230,100,192,234, 9,136, 64, 40, 40,126,177,197, 92,255, 0, 3, 0, 0, 0, 30,149,109, 63, 40, 18,111,192,171,100,141, 64, +219, 20, 55,174, 57, 96,255, 0, 3, 0, 0, 0, 45,210,162, 63,233,211,224,191,184, 67,174, 64,187, 27, 11,218, 12,119,255, 0, + 3, 0, 0, 0,158,106, 94, 63,167,106, 30,192,254,240,167, 64, 27, 19, 69,202,151,114,255, 0, 3, 0, 0, 0, 22,114,229, 63, +193, 96, 20,192,253,167,162, 64,234, 38,163,205, 12,111,255, 0, 3, 0, 0, 0,208, 76, 67, 64, 62,120,111,192, 14, 89, 85, 64, +176, 66, 60,174,116, 72,255, 0, 3, 0, 0, 0,139,220, 37, 64,245,135,141,192,114,173, 54, 64,211, 56,161,159, 45, 62,255, 0, + 3, 0, 0, 0,204,119, 84, 64, 93, 73,130,192,212,107, 38, 64,198, 72, 33,167,119, 56,255, 0, 3, 0, 0, 0,178,218, 82,192, +178,247, 1,191,211,129,154, 64,221,183,252,244, 39,105,255, 0, 3, 0, 0, 0, 0,245,124,192, 27, 32,187,190, 57, 6,138, 64, +118,169, 80,248,254, 93,255, 0, 3, 0, 0, 0, 42, 75,112,192,228, 42,152,191, 25, 44,139, 64, 0,174, 97,230,225, 94,255, 0, + 3, 0, 0, 0,239,222, 43,192,212,226, 11,192,227, 71,151, 64,223,197,116,208,165,103,255, 0, 3, 0, 0, 0,137,207,229,191, + 30, 63, 22,192,207,235,161, 64, 58,216, 29,205,129,110,255, 0, 3, 0, 0, 0,239, 11, 14,192,175,114,191,191,254,208,166, 64, +123,207,175,222,169,113,255, 0, 3, 0, 0, 0,163, 78,149,189, 65, 25,137,191,234,102,184, 64,202,254,204,232,222,125,255, 0, + 3, 0, 0, 0,208,203,104,191,146, 6,113,191,108, 5,183, 64,124,236,106,235,207,124,255, 0, 3, 0, 0, 0, 26, 68,251,190, +111, 38,228,191,114, 48,178, 64,117,245, 98,217,147,121,255, 0, 3, 0, 0, 0, 76,169,222,191,205,107,104,192,150,142,136, 64, +233,217,151,176,223, 92,255, 0, 3, 0, 0, 0,145,143, 39,192,190, 49, 94,192,165, 27,124, 64, 18,199, 4,180,213, 85,255, 0, + 3, 0, 0, 0,130,168, 6,192,190,132,130,192, 12, 96,105, 64, 30,210,165,166, 83, 79,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, + 84, 1, 0, 0, 8,181,184, 3, 58, 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,144,182,184, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 0, 90, 0, 0,144,182,184, 3, 55, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 0, 0, 35, 0, 42, 0, 0, 0,162, 0, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0,163, 0, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0, +163, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,164, 0, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,164, 0, 0, 0, 0, 0, 35, 0, + 12, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,166, 0, 0, 0, + 0, 0, 35, 0, 44, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0, +167, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,168, 0, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,168, 0, 0, 0, 0, 0, 35, 0, + 13, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,170, 0, 0, 0, + 0, 0, 35, 0, 46, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0, +171, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0, + 14, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,174, 0, 0, 0, + 0, 0, 35, 0, 48, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0, +175, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0, + 15, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,178, 0, 0, 0, + 0, 0, 35, 0, 50, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0, 50, 0, 0, 0, +179, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0, + 16, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,182, 0, 0, 0, + 0, 0, 35, 0, 52, 0, 0, 0,182, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0,183, 0, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0, +183, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,184, 0, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,184, 0, 0, 0, 0, 0, 35, 0, + 17, 0, 0, 0,185, 0, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,185, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,186, 0, 0, 0, + 0, 0, 35, 0, 54, 0, 0, 0,186, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0,187, 0, 0, 0, 0, 0, 35, 0, 54, 0, 0, 0, +187, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,188, 0, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,188, 0, 0, 0, 0, 0, 35, 0, + 18, 0, 0, 0,189, 0, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,189, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,190, 0, 0, 0, + 0, 0, 35, 0, 56, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0,191, 0, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0, +191, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,192, 0, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,192, 0, 0, 0, 0, 0, 35, 0, + 19, 0, 0, 0,193, 0, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,193, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,194, 0, 0, 0, + 0, 0, 35, 0, 58, 0, 0, 0,194, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0,195, 0, 0, 0, 0, 0, 35, 0, 58, 0, 0, 0, +195, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,196, 0, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,196, 0, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0,197, 0, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,197, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,198, 0, 0, 0, + 0, 0, 35, 0, 60, 0, 0, 0,198, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0,199, 0, 0, 0, 0, 0, 35, 0, 60, 0, 0, 0, +199, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,200, 0, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,200, 0, 0, 0, 0, 0, 35, 0, + 21, 0, 0, 0,201, 0, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,201, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,202, 0, 0, 0, + 0, 0, 35, 0, 62, 0, 0, 0,202, 0, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,203, 0, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0, +203, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,204, 0, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,204, 0, 0, 0, 0, 0, 35, 0, + 22, 0, 0, 0,205, 0, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,205, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,206, 0, 0, 0, + 0, 0, 35, 0, 64, 0, 0, 0,206, 0, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0,207, 0, 0, 0, 0, 0, 35, 0, 64, 0, 0, 0, +207, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,208, 0, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0,208, 0, 0, 0, 0, 0, 35, 0, + 23, 0, 0, 0,209, 0, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0,209, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,210, 0, 0, 0, + 0, 0, 35, 0, 66, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0,211, 0, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0, +211, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,212, 0, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,212, 0, 0, 0, 0, 0, 35, 0, + 24, 0, 0, 0,213, 0, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,213, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,214, 0, 0, 0, + 0, 0, 35, 0, 68, 0, 0, 0,214, 0, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0,215, 0, 0, 0, 0, 0, 35, 0, 68, 0, 0, 0, +215, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,216, 0, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0,216, 0, 0, 0, 0, 0, 35, 0, + 25, 0, 0, 0,217, 0, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0,217, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,218, 0, 0, 0, + 0, 0, 35, 0, 70, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0,219, 0, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0, +219, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,220, 0, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,220, 0, 0, 0, 0, 0, 35, 0, + 26, 0, 0, 0,221, 0, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,221, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,222, 0, 0, 0, + 0, 0, 35, 0, 72, 0, 0, 0,222, 0, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0,223, 0, 0, 0, 0, 0, 35, 0, 72, 0, 0, 0, +223, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,224, 0, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0,224, 0, 0, 0, 0, 0, 35, 0, + 27, 0, 0, 0,225, 0, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0,225, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,226, 0, 0, 0, + 0, 0, 35, 0, 74, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0,227, 0, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0, +227, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,228, 0, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,228, 0, 0, 0, 0, 0, 35, 0, + 28, 0, 0, 0,229, 0, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,229, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,230, 0, 0, 0, + 0, 0, 35, 0, 76, 0, 0, 0,230, 0, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,231, 0, 0, 0, 0, 0, 35, 0, 76, 0, 0, 0, +231, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,232, 0, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0,232, 0, 0, 0, 0, 0, 35, 0, + 29, 0, 0, 0,233, 0, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0,233, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,234, 0, 0, 0, + 0, 0, 35, 0, 78, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,235, 0, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0, +235, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,236, 0, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,236, 0, 0, 0, 0, 0, 35, 0, + 30, 0, 0, 0,237, 0, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,237, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,238, 0, 0, 0, + 0, 0, 35, 0, 80, 0, 0, 0,238, 0, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0,239, 0, 0, 0, 0, 0, 35, 0, 80, 0, 0, 0, +239, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,240, 0, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0,240, 0, 0, 0, 0, 0, 35, 0, + 31, 0, 0, 0,241, 0, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0,241, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,242, 0, 0, 0, + 0, 0, 35, 0, 82, 0, 0, 0,242, 0, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,243, 0, 0, 0, 0, 0, 35, 0, 82, 0, 0, 0, +243, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,244, 0, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0,244, 0, 0, 0, 0, 0, 35, 0, + 32, 0, 0, 0,245, 0, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0,245, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,246, 0, 0, 0, + 0, 0, 35, 0, 84, 0, 0, 0,246, 0, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,247, 0, 0, 0, 0, 0, 35, 0, 84, 0, 0, 0, +247, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,248, 0, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0,248, 0, 0, 0, 0, 0, 35, 0, + 33, 0, 0, 0,249, 0, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0,249, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,250, 0, 0, 0, + 0, 0, 35, 0, 86, 0, 0, 0,250, 0, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,251, 0, 0, 0, 0, 0, 35, 0, 86, 0, 0, 0, +251, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,252, 0, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0,252, 0, 0, 0, 0, 0, 35, 0, + 34, 0, 0, 0,253, 0, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0,253, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,254, 0, 0, 0, + 0, 0, 35, 0, 88, 0, 0, 0,254, 0, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,255, 0, 0, 0, 0, 0, 35, 0, 88, 0, 0, 0, +255, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, + 35, 0, 0, 0, 1, 1, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0, 1, 1, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 35, 0, 90, 0, 0, 0, 2, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 3, 1, 0, 0, 0, 0, 35, 0, 90, 0, 0, 0, + 3, 1, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0, 4, 1, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0, 4, 1, 0, 0, 0, 0, 35, 0, + 36, 0, 0, 0, 5, 1, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0, 5, 1, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0, 6, 1, 0, 0, + 0, 0, 35, 0, 92, 0, 0, 0, 6, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0, 7, 1, 0, 0, 0, 0, 35, 0, 92, 0, 0, 0, + 7, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 8, 1, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 8, 1, 0, 0, 0, 0, 35, 0, + 37, 0, 0, 0, 9, 1, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 9, 1, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 10, 1, 0, 0, + 0, 0, 35, 0, 94, 0, 0, 0, 10, 1, 0, 0, 0, 0, 35, 0, 38, 0, 0, 0, 11, 1, 0, 0, 0, 0, 35, 0, 94, 0, 0, 0, + 11, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 1, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 12, 1, 0, 0, 0, 0, 35, 0, + 38, 0, 0, 0, 13, 1, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 13, 1, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0, 14, 1, 0, 0, + 0, 0, 35, 0, 96, 0, 0, 0, 14, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0, 15, 1, 0, 0, 0, 0, 35, 0, 96, 0, 0, 0, + 15, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 16, 1, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0, 16, 1, 0, 0, 0, 0, 35, 0, + 39, 0, 0, 0, 17, 1, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0, 17, 1, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 18, 1, 0, 0, + 0, 0, 35, 0, 98, 0, 0, 0, 18, 1, 0, 0, 0, 0, 35, 0, 40, 0, 0, 0, 19, 1, 0, 0, 0, 0, 35, 0, 98, 0, 0, 0, + 19, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 20, 1, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0, 20, 1, 0, 0, 0, 0, 35, 0, + 40, 0, 0, 0, 21, 1, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0, 21, 1, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 22, 1, 0, 0, + 0, 0, 35, 0,100, 0, 0, 0, 22, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0, 23, 1, 0, 0, 0, 0, 35, 0,100, 0, 0, 0, + 23, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0,101, 0, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0, + 41, 0, 0, 0, 25, 1, 0, 0, 0, 0, 35, 0,101, 0, 0, 0, 25, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 26, 1, 0, 0, + 0, 0, 35, 0,102, 0, 0, 0, 26, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 27, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0, + 27, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0, + 13, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0, 30, 1, 0, 0, + 0, 0, 35, 0,104, 0, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0, + 31, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 32, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0, 32, 1, 0, 0, 0, 0, 35, 0, + 16, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 34, 1, 0, 0, + 0, 0, 35, 0,106, 0, 0, 0, 34, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 35, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0, + 35, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0, + 16, 0, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0, 38, 1, 0, 0, + 0, 0, 35, 0,108, 0, 0, 0, 38, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 39, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0, + 39, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0, + 17, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 42, 1, 0, 0, + 0, 0, 35, 0,110, 0, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0, + 43, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 44, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0, 44, 1, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 46, 1, 0, 0, + 0, 0, 35, 0,112, 0, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 47, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0, + 47, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0, + 20, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 50, 1, 0, 0, + 0, 0, 35, 0,114, 0, 0, 0, 50, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 51, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0, + 51, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 52, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0, 52, 1, 0, 0, 0, 0, 35, 0, + 19, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 54, 1, 0, 0, + 0, 0, 35, 0,116, 0, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0, + 55, 1, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, 56, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0, 56, 1, 0, 0, 0, 0, 35, 0, + 23, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, 58, 1, 0, 0, + 0, 0, 35, 0,118, 0, 0, 0, 58, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0, 59, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0, + 59, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0, + 23, 0, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 62, 1, 0, 0, + 0, 0, 35, 0,120, 0, 0, 0, 62, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 63, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0, + 63, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0, + 24, 0, 0, 0, 65, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0, 65, 1, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0, 66, 1, 0, 0, + 0, 0, 35, 0,122, 0, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0, + 67, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 68, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0, 68, 1, 0, 0, 0, 0, 35, 0, + 27, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 70, 1, 0, 0, + 0, 0, 35, 0,124, 0, 0, 0, 70, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 71, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0, + 71, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0, + 27, 0, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 74, 1, 0, 0, + 0, 0, 35, 0,126, 0, 0, 0, 74, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0, 75, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0, + 75, 1, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0, + 28, 0, 0, 0, 77, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0, 77, 1, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0, 78, 1, 0, 0, + 0, 0, 35, 0,128, 0, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0, + 79, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 80, 1, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 80, 1, 0, 0, 0, 0, 35, 0, + 31, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 82, 1, 0, 0, + 0, 0, 35, 0,130, 0, 0, 0, 82, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0, 83, 1, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, + 83, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0, + 31, 0, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0, 86, 1, 0, 0, + 0, 0, 35, 0,132, 0, 0, 0, 86, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0, 87, 1, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, + 87, 1, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0, + 24, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0, 90, 1, 0, 0, + 0, 0, 35, 0,134, 0, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, + 91, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 92, 1, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 92, 1, 0, 0, 0, 0, 35, 0, + 33, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 94, 1, 0, 0, + 0, 0, 35, 0,136, 0, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 95, 1, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, + 95, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0, + 33, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0, 98, 1, 0, 0, + 0, 0, 35, 0,138, 0, 0, 0, 98, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0, 99, 1, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, + 99, 1, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0,100, 1, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,100, 1, 0, 0, 0, 0, 35, 0, + 28, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0,102, 1, 0, 0, + 0, 0, 35, 0,140, 0, 0, 0,102, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, +103, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,104, 1, 0, 0, 0, 0, 35, 0,141, 0, 0, 0,104, 1, 0, 0, 0, 0, 35, 0, + 35, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0,141, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,106, 1, 0, 0, + 0, 0, 35, 0,142, 0, 0, 0,106, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,107, 1, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, +107, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,143, 0, 0, 0,108, 1, 0, 0, 0, 0, 35, 0, + 35, 0, 0, 0,109, 1, 0, 0, 0, 0, 35, 0,143, 0, 0, 0,109, 1, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0,110, 1, 0, 0, + 0, 0, 35, 0,144, 0, 0, 0,110, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,111, 1, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, +111, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,112, 1, 0, 0, 0, 0, 35, 0,145, 0, 0, 0,112, 1, 0, 0, 0, 0, 35, 0, + 31, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0,145, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,114, 1, 0, 0, + 0, 0, 35, 0,146, 0, 0, 0,114, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,115, 1, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, +115, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,116, 1, 0, 0, 0, 0, 35, 0,147, 0, 0, 0,116, 1, 0, 0, 0, 0, 35, 0, + 38, 0, 0, 0,117, 1, 0, 0, 0, 0, 35, 0,147, 0, 0, 0,117, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,118, 1, 0, 0, + 0, 0, 35, 0,148, 0, 0, 0,118, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,119, 1, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, +119, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,120, 1, 0, 0, 0, 0, 35, 0,149, 0, 0, 0,120, 1, 0, 0, 0, 0, 35, 0, + 38, 0, 0, 0,121, 1, 0, 0, 0, 0, 35, 0,149, 0, 0, 0,121, 1, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,122, 1, 0, 0, + 0, 0, 35, 0,150, 0, 0, 0,122, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,123, 1, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, +123, 1, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,124, 1, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,124, 1, 0, 0, 0, 0, 35, 0, + 38, 0, 0, 0,125, 1, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,125, 1, 0, 0, 0, 0, 35, 0, 38, 0, 0, 0,126, 1, 0, 0, + 0, 0, 35, 0,152, 0, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,127, 1, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, +127, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,128, 1, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,128, 1, 0, 0, 0, 0, 35, 0, + 40, 0, 0, 0,129, 1, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,129, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,130, 1, 0, 0, + 0, 0, 35, 0,154, 0, 0, 0,130, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,131, 1, 0, 0, 0, 0, 35, 0,154, 0, 0, 0, +131, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,132, 1, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,132, 1, 0, 0, 0, 0, 35, 0, + 40, 0, 0, 0,133, 1, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,133, 1, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,134, 1, 0, 0, + 0, 0, 35, 0,156, 0, 0, 0,134, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,135, 1, 0, 0, 0, 0, 35, 0,156, 0, 0, 0, +135, 1, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,136, 1, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,136, 1, 0, 0, 0, 0, 35, 0, + 40, 0, 0, 0,137, 1, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,137, 1, 0, 0, 0, 0, 35, 0, 40, 0, 0, 0,138, 1, 0, 0, + 0, 0, 35, 0,158, 0, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,139, 1, 0, 0, 0, 0, 35, 0,158, 0, 0, 0, +139, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,140, 1, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,140, 1, 0, 0, 0, 0, 35, 0, + 37, 0, 0, 0,141, 1, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,141, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,142, 1, 0, 0, + 0, 0, 35, 0,160, 0, 0, 0,142, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,143, 1, 0, 0, 0, 0, 35, 0,160, 0, 0, 0, +143, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,144, 1, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,144, 1, 0, 0, 0, 0, 35, 0, + 41, 0, 0, 0,145, 1, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0,146, 1, 0, 0, + 0, 0, 35, 0,102, 0, 0, 0,146, 1, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,147, 1, 0, 0, 0, 0, 33, 0, 46, 0, 0, 0, +147, 1, 0, 0, 0, 0, 33, 0, 43, 0, 0, 0,148, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0,148, 1, 0, 0, 0, 0, 35, 0, +102, 0, 0, 0,149, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,149, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,150, 1, 0, 0, + 0, 0, 35, 0,104, 0, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0,151, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0, +151, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,152, 1, 0, 0, 0, 0, 33, 0, 47, 0, 0, 0,152, 1, 0, 0, 0, 0, 33, 0, + 47, 0, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0,153, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,154, 1, 0, 0, + 0, 0, 35, 0,104, 0, 0, 0,154, 1, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0,155, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0, +155, 1, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0,156, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,156, 1, 0, 0, 0, 0, 35, 0, + 42, 0, 0, 0,157, 1, 0, 0, 0, 0, 33, 0, 44, 0, 0, 0,157, 1, 0, 0, 0, 0, 33, 0, 50, 0, 0, 0,158, 1, 0, 0, + 0, 0, 35, 0,105, 0, 0, 0,158, 1, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,159, 1, 0, 0, 0, 0, 33, 0, 50, 0, 0, 0, +159, 1, 0, 0, 0, 0, 33, 0, 43, 0, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0,160, 1, 0, 0, 0, 0, 35, 0, +105, 0, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,162, 1, 0, 0, + 0, 0, 35, 0,107, 0, 0, 0,162, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0,163, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0, +163, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,164, 1, 0, 0, 0, 0, 33, 0, 51, 0, 0, 0,164, 1, 0, 0, 0, 0, 33, 0, + 51, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,166, 1, 0, 0, + 0, 0, 35, 0,107, 0, 0, 0,166, 1, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0, +167, 1, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,168, 1, 0, 0, 0, 0, 35, 0, + 42, 0, 0, 0,169, 1, 0, 0, 0, 0, 33, 0, 48, 0, 0, 0,169, 1, 0, 0, 0, 0, 33, 0, 54, 0, 0, 0,170, 1, 0, 0, + 0, 0, 35, 0,108, 0, 0, 0,170, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,171, 1, 0, 0, 0, 0, 33, 0, 54, 0, 0, 0, +171, 1, 0, 0, 0, 0, 33, 0, 45, 0, 0, 0,172, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0,172, 1, 0, 0, 0, 0, 35, 0, +108, 0, 0, 0,173, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,173, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,174, 1, 0, 0, + 0, 0, 35, 0,110, 0, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0,175, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0, +175, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,176, 1, 0, 0, 0, 0, 33, 0, 55, 0, 0, 0,176, 1, 0, 0, 0, 0, 33, 0, + 55, 0, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0,177, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,178, 1, 0, 0, + 0, 0, 35, 0,110, 0, 0, 0,178, 1, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0,179, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0, +179, 1, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0,180, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,180, 1, 0, 0, 0, 0, 35, 0, + 44, 0, 0, 0,181, 1, 0, 0, 0, 0, 33, 0, 52, 0, 0, 0,181, 1, 0, 0, 0, 0, 33, 0, 58, 0, 0, 0,182, 1, 0, 0, + 0, 0, 35, 0,111, 0, 0, 0,182, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,183, 1, 0, 0, 0, 0, 33, 0, 58, 0, 0, 0, +183, 1, 0, 0, 0, 0, 33, 0, 53, 0, 0, 0,184, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0,184, 1, 0, 0, 0, 0, 35, 0, +111, 0, 0, 0,185, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,185, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,186, 1, 0, 0, + 0, 0, 35, 0,113, 0, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0,187, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0, +187, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,188, 1, 0, 0, 0, 0, 33, 0, 59, 0, 0, 0,188, 1, 0, 0, 0, 0, 33, 0, + 59, 0, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,189, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,190, 1, 0, 0, + 0, 0, 35, 0,113, 0, 0, 0,190, 1, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0,191, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0, +191, 1, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0,192, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,192, 1, 0, 0, 0, 0, 35, 0, + 52, 0, 0, 0,193, 1, 0, 0, 0, 0, 33, 0, 56, 0, 0, 0,193, 1, 0, 0, 0, 0, 33, 0, 60, 0, 0, 0,194, 1, 0, 0, + 0, 0, 35, 0,114, 0, 0, 0,194, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,195, 1, 0, 0, 0, 0, 33, 0, 60, 0, 0, 0, +195, 1, 0, 0, 0, 0, 33, 0, 57, 0, 0, 0,196, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,196, 1, 0, 0, 0, 0, 35, 0, +114, 0, 0, 0,197, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,197, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,198, 1, 0, 0, + 0, 0, 35, 0,116, 0, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,199, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0, +199, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,200, 1, 0, 0, 0, 0, 33, 0, 61, 0, 0, 0,200, 1, 0, 0, 0, 0, 33, 0, + 61, 0, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0,201, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,202, 1, 0, 0, + 0, 0, 35, 0,116, 0, 0, 0,202, 1, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0,203, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0, +203, 1, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0,204, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,204, 1, 0, 0, 0, 0, 35, 0, + 48, 0, 0, 0,205, 1, 0, 0, 0, 0, 33, 0, 56, 0, 0, 0,205, 1, 0, 0, 0, 0, 33, 0, 64, 0, 0, 0,206, 1, 0, 0, + 0, 0, 35, 0,117, 0, 0, 0,206, 1, 0, 0, 0, 0, 35, 0, 50, 0, 0, 0,207, 1, 0, 0, 0, 0, 33, 0, 64, 0, 0, 0, +207, 1, 0, 0, 0, 0, 33, 0, 50, 0, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0,208, 1, 0, 0, 0, 0, 35, 0, +117, 0, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,210, 1, 0, 0, + 0, 0, 35, 0,119, 0, 0, 0,210, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0,211, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0, +211, 1, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,212, 1, 0, 0, 0, 0, 33, 0, 65, 0, 0, 0,212, 1, 0, 0, 0, 0, 33, 0, + 65, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,214, 1, 0, 0, + 0, 0, 35, 0,119, 0, 0, 0,214, 1, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0, +215, 1, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,216, 1, 0, 0, 0, 0, 35, 0, + 51, 0, 0, 0,217, 1, 0, 0, 0, 0, 33, 0, 62, 0, 0, 0,217, 1, 0, 0, 0, 0, 33, 0, 68, 0, 0, 0,218, 1, 0, 0, + 0, 0, 35, 0,120, 0, 0, 0,218, 1, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,219, 1, 0, 0, 0, 0, 33, 0, 68, 0, 0, 0, +219, 1, 0, 0, 0, 0, 33, 0, 47, 0, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0,220, 1, 0, 0, 0, 0, 35, 0, +120, 0, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,222, 1, 0, 0, + 0, 0, 35, 0,122, 0, 0, 0,222, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0,223, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0, +223, 1, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,224, 1, 0, 0, 0, 0, 33, 0, 69, 0, 0, 0,224, 1, 0, 0, 0, 0, 33, 0, + 69, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,226, 1, 0, 0, + 0, 0, 35, 0,122, 0, 0, 0,226, 1, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0, +227, 1, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,228, 1, 0, 0, 0, 0, 35, 0, + 46, 0, 0, 0,229, 1, 0, 0, 0, 0, 33, 0, 66, 0, 0, 0,229, 1, 0, 0, 0, 0, 33, 0, 72, 0, 0, 0,230, 1, 0, 0, + 0, 0, 35, 0,123, 0, 0, 0,230, 1, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,231, 1, 0, 0, 0, 0, 33, 0, 72, 0, 0, 0, +231, 1, 0, 0, 0, 0, 33, 0, 55, 0, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,232, 1, 0, 0, 0, 0, 35, 0, +123, 0, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,234, 1, 0, 0, + 0, 0, 35, 0,125, 0, 0, 0,234, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,235, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0, +235, 1, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,236, 1, 0, 0, 0, 0, 33, 0, 73, 0, 0, 0,236, 1, 0, 0, 0, 0, 33, 0, + 73, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,238, 1, 0, 0, + 0, 0, 35, 0,125, 0, 0, 0,238, 1, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0, +239, 1, 0, 0, 0, 0, 35, 0, 54, 0, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,240, 1, 0, 0, 0, 0, 35, 0, + 54, 0, 0, 0,241, 1, 0, 0, 0, 0, 33, 0, 70, 0, 0, 0,241, 1, 0, 0, 0, 0, 33, 0, 76, 0, 0, 0,242, 1, 0, 0, + 0, 0, 35, 0,126, 0, 0, 0,242, 1, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,243, 1, 0, 0, 0, 0, 33, 0, 76, 0, 0, 0, +243, 1, 0, 0, 0, 0, 33, 0, 59, 0, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0,244, 1, 0, 0, 0, 0, 35, 0, +126, 0, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,246, 1, 0, 0, + 0, 0, 35, 0,128, 0, 0, 0,246, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0,247, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0, +247, 1, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,248, 1, 0, 0, 0, 0, 33, 0, 77, 0, 0, 0,248, 1, 0, 0, 0, 0, 33, 0, + 77, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,250, 1, 0, 0, + 0, 0, 35, 0,128, 0, 0, 0,250, 1, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0, +251, 1, 0, 0, 0, 0, 35, 0, 58, 0, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,252, 1, 0, 0, 0, 0, 35, 0, + 58, 0, 0, 0,253, 1, 0, 0, 0, 0, 33, 0, 74, 0, 0, 0,253, 1, 0, 0, 0, 0, 33, 0, 80, 0, 0, 0,254, 1, 0, 0, + 0, 0, 35, 0,129, 0, 0, 0,254, 1, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,255, 1, 0, 0, 0, 0, 33, 0, 80, 0, 0, 0, +255, 1, 0, 0, 0, 0, 33, 0, 61, 0, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0, +129, 0, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 35, 0,131, 0, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, + 3, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 4, 2, 0, 0, 0, 0, 33, 0, 81, 0, 0, 0, 4, 2, 0, 0, 0, 0, 33, 0, + 81, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 6, 2, 0, 0, + 0, 0, 35, 0,131, 0, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, + 7, 2, 0, 0, 0, 0, 35, 0, 60, 0, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0, + 60, 0, 0, 0, 9, 2, 0, 0, 0, 0, 33, 0, 78, 0, 0, 0, 9, 2, 0, 0, 0, 0, 33, 0, 83, 0, 0, 0, 10, 2, 0, 0, + 0, 0, 35, 0,132, 0, 0, 0, 10, 2, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0, 11, 2, 0, 0, 0, 0, 33, 0, 83, 0, 0, 0, + 11, 2, 0, 0, 0, 0, 33, 0, 65, 0, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, +132, 0, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 14, 2, 0, 0, + 0, 0, 35, 0,134, 0, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, + 15, 2, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0, 16, 2, 0, 0, 0, 0, 33, 0, 82, 0, 0, 0, 16, 2, 0, 0, 0, 0, 33, 0, + 82, 0, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0, 18, 2, 0, 0, + 0, 0, 35, 0,134, 0, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, + 19, 2, 0, 0, 0, 0, 35, 0, 64, 0, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, + 64, 0, 0, 0, 21, 2, 0, 0, 0, 0, 33, 0, 66, 0, 0, 0, 21, 2, 0, 0, 0, 0, 33, 0, 84, 0, 0, 0, 22, 2, 0, 0, + 0, 0, 35, 0,135, 0, 0, 0, 22, 2, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0, 23, 2, 0, 0, 0, 0, 33, 0, 84, 0, 0, 0, + 23, 2, 0, 0, 0, 0, 33, 0, 69, 0, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, +135, 0, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 26, 2, 0, 0, + 0, 0, 35, 0,137, 0, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, + 27, 2, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0, 28, 2, 0, 0, 0, 0, 33, 0, 85, 0, 0, 0, 28, 2, 0, 0, 0, 0, 33, 0, + 85, 0, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0, 30, 2, 0, 0, + 0, 0, 35, 0,137, 0, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, + 31, 2, 0, 0, 0, 0, 35, 0, 68, 0, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, + 68, 0, 0, 0, 33, 2, 0, 0, 0, 0, 33, 0, 70, 0, 0, 0, 33, 2, 0, 0, 0, 0, 33, 0, 86, 0, 0, 0, 34, 2, 0, 0, + 0, 0, 35, 0,138, 0, 0, 0, 34, 2, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0, 35, 2, 0, 0, 0, 0, 33, 0, 86, 0, 0, 0, + 35, 2, 0, 0, 0, 0, 33, 0, 73, 0, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, +138, 0, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, 38, 2, 0, 0, + 0, 0, 35, 0,140, 0, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, + 39, 2, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0, 40, 2, 0, 0, 0, 0, 33, 0, 87, 0, 0, 0, 40, 2, 0, 0, 0, 0, 33, 0, + 87, 0, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0, 42, 2, 0, 0, + 0, 0, 35, 0,140, 0, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, + 43, 2, 0, 0, 0, 0, 35, 0, 72, 0, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0, + 72, 0, 0, 0, 45, 2, 0, 0, 0, 0, 33, 0, 74, 0, 0, 0, 45, 2, 0, 0, 0, 0, 33, 0, 88, 0, 0, 0, 46, 2, 0, 0, + 0, 0, 35, 0,141, 0, 0, 0, 46, 2, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0, 47, 2, 0, 0, 0, 0, 33, 0, 88, 0, 0, 0, + 47, 2, 0, 0, 0, 0, 33, 0, 77, 0, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0,141, 0, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0, +141, 0, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, 50, 2, 0, 0, + 0, 0, 35, 0,143, 0, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0,141, 0, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,143, 0, 0, 0, + 51, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 52, 2, 0, 0, 0, 0, 33, 0, 89, 0, 0, 0, 52, 2, 0, 0, 0, 0, 33, 0, + 89, 0, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0,143, 0, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 54, 2, 0, 0, + 0, 0, 35, 0,143, 0, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, + 55, 2, 0, 0, 0, 0, 35, 0, 76, 0, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0, + 76, 0, 0, 0, 57, 2, 0, 0, 0, 0, 33, 0, 78, 0, 0, 0, 57, 2, 0, 0, 0, 0, 33, 0, 90, 0, 0, 0, 58, 2, 0, 0, + 0, 0, 35, 0,144, 0, 0, 0, 58, 2, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0, 59, 2, 0, 0, 0, 0, 33, 0, 90, 0, 0, 0, + 59, 2, 0, 0, 0, 0, 33, 0, 81, 0, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0, +144, 0, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, 62, 2, 0, 0, + 0, 0, 35, 0,146, 0, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, + 63, 2, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0, 64, 2, 0, 0, 0, 0, 33, 0, 91, 0, 0, 0, 64, 2, 0, 0, 0, 0, 33, 0, + 91, 0, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0, 66, 2, 0, 0, + 0, 0, 35, 0,146, 0, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, + 67, 2, 0, 0, 0, 0, 35, 0, 80, 0, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0, + 62, 0, 0, 0, 69, 2, 0, 0, 0, 0, 33, 0, 80, 0, 0, 0, 69, 2, 0, 0, 0, 0, 33, 0, 94, 0, 0, 0, 70, 2, 0, 0, + 0, 0, 35, 0,147, 0, 0, 0, 70, 2, 0, 0, 0, 0, 35, 0, 82, 0, 0, 0, 71, 2, 0, 0, 0, 0, 33, 0, 94, 0, 0, 0, + 71, 2, 0, 0, 0, 0, 33, 0, 82, 0, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0,147, 0, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0, +147, 0, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, 74, 2, 0, 0, + 0, 0, 35, 0,149, 0, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0,147, 0, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,149, 0, 0, 0, + 75, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 76, 2, 0, 0, 0, 0, 33, 0, 95, 0, 0, 0, 76, 2, 0, 0, 0, 0, 33, 0, + 95, 0, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0,149, 0, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 78, 2, 0, 0, + 0, 0, 35, 0,149, 0, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0, 92, 0, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, + 79, 2, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0, + 83, 0, 0, 0, 81, 2, 0, 0, 0, 0, 33, 0, 92, 0, 0, 0, 81, 2, 0, 0, 0, 0, 33, 0, 96, 0, 0, 0, 82, 2, 0, 0, + 0, 0, 35, 0,150, 0, 0, 0, 82, 2, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0, 83, 2, 0, 0, 0, 0, 33, 0, 96, 0, 0, 0, + 83, 2, 0, 0, 0, 0, 33, 0, 85, 0, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0, +150, 0, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, 86, 2, 0, 0, + 0, 0, 35, 0,152, 0, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, + 87, 2, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 88, 2, 0, 0, 0, 0, 33, 0, 97, 0, 0, 0, 88, 2, 0, 0, 0, 0, 33, 0, + 97, 0, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 90, 2, 0, 0, + 0, 0, 35, 0,152, 0, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0, 94, 0, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, + 91, 2, 0, 0, 0, 0, 35, 0, 84, 0, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0, + 84, 0, 0, 0, 93, 2, 0, 0, 0, 0, 33, 0, 94, 0, 0, 0, 93, 2, 0, 0, 0, 0, 33, 0, 98, 0, 0, 0, 94, 2, 0, 0, + 0, 0, 35, 0,153, 0, 0, 0, 94, 2, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0, 95, 2, 0, 0, 0, 0, 33, 0, 98, 0, 0, 0, + 95, 2, 0, 0, 0, 0, 33, 0, 87, 0, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0,153, 0, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0, +153, 0, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0, 98, 2, 0, 0, + 0, 0, 35, 0,155, 0, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0,153, 0, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,155, 0, 0, 0, + 99, 2, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0,100, 2, 0, 0, 0, 0, 33, 0, 99, 0, 0, 0,100, 2, 0, 0, 0, 0, 33, 0, + 99, 0, 0, 0,101, 2, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,101, 2, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0,102, 2, 0, 0, + 0, 0, 35, 0,155, 0, 0, 0,102, 2, 0, 0, 0, 0, 35, 0, 96, 0, 0, 0,103, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0, +103, 2, 0, 0, 0, 0, 35, 0, 86, 0, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,104, 2, 0, 0, 0, 0, 35, 0, + 86, 0, 0, 0,105, 2, 0, 0, 0, 0, 33, 0, 96, 0, 0, 0,105, 2, 0, 0, 0, 0, 33, 0,100, 0, 0, 0,106, 2, 0, 0, + 0, 0, 35, 0,156, 0, 0, 0,106, 2, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0,107, 2, 0, 0, 0, 0, 33, 0,100, 0, 0, 0, +107, 2, 0, 0, 0, 0, 33, 0, 89, 0, 0, 0,108, 2, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,108, 2, 0, 0, 0, 0, 35, 0, +156, 0, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,110, 2, 0, 0, + 0, 0, 35, 0,158, 0, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,158, 0, 0, 0, +111, 2, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0,112, 2, 0, 0, 0, 0, 33, 0,101, 0, 0, 0,112, 2, 0, 0, 0, 0, 33, 0, +101, 0, 0, 0,113, 2, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,113, 2, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0,114, 2, 0, 0, + 0, 0, 35, 0,158, 0, 0, 0,114, 2, 0, 0, 0, 0, 35, 0, 98, 0, 0, 0,115, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0, +115, 2, 0, 0, 0, 0, 35, 0, 88, 0, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,116, 2, 0, 0, 0, 0, 35, 0, + 88, 0, 0, 0,117, 2, 0, 0, 0, 0, 33, 0, 98, 0, 0, 0,117, 2, 0, 0, 0, 0, 33, 0, 92, 0, 0, 0,118, 2, 0, 0, + 0, 0, 35, 0,159, 0, 0, 0,118, 2, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0,119, 2, 0, 0, 0, 0, 33, 0, 92, 0, 0, 0, +119, 2, 0, 0, 0, 0, 33, 0, 91, 0, 0, 0,120, 2, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,120, 2, 0, 0, 0, 0, 35, 0, +159, 0, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,122, 2, 0, 0, + 0, 0, 35, 0,161, 0, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,161, 0, 0, 0, +123, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0,124, 2, 0, 0, 0, 0, 33, 0,101, 0, 0, 0,124, 2, 0, 0, 0, 0, 33, 0, + 93, 0, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,101, 0, 0, 0,126, 2, 0, 0, + 0, 0, 35, 0,161, 0, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,100, 0, 0, 0,127, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0, +127, 2, 0, 0, 0, 0, 35, 0, 90, 0, 0, 0,128, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,128, 2, 0, 0, 0, 0, 35, 0, + 90, 0, 0, 0,129, 2, 0, 0, 0, 0, 33, 0,100, 0, 0, 0,129, 2, 0, 0, 0, 0, 33, 0, 27, 1, 0, 0,146, 1, 0, 0, + 0, 0, 35, 0,171, 0, 0, 0,146, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0, 27, 1, 0, 0, 0, 0, 35, 0,146, 1, 0, 0, +147, 1, 0, 0, 0, 0, 35, 0,146, 1, 0, 0,148, 1, 0, 0, 0, 0, 35, 0,147, 1, 0, 0,148, 1, 0, 0, 0, 0, 35, 0, +165, 0, 0, 0, 26, 1, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,148, 1, 0, 0, 0, 0, 35, 0, 26, 1, 0, 0,148, 1, 0, 0, + 0, 0, 35, 0,164, 0, 0, 0,147, 1, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0,170, 0, 0, 0, +147, 1, 0, 0, 0, 0, 35, 0, 26, 1, 0, 0,149, 1, 0, 0, 0, 0, 35, 0, 28, 1, 0, 0,149, 1, 0, 0, 0, 0, 35, 0, + 26, 1, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0,149, 1, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,149, 1, 0, 0,151, 1, 0, 0, + 0, 0, 35, 0,150, 1, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 27, 1, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0, 31, 1, 0, 0, +151, 1, 0, 0, 0, 0, 35, 0, 27, 1, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 30, 1, 0, 0,150, 1, 0, 0, 0, 0, 35, 0, + 29, 1, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 29, 1, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,152, 1, 0, 0, + 0, 0, 35, 0,172, 0, 0, 0,152, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0,152, 1, 0, 0, +153, 1, 0, 0, 0, 0, 35, 0,152, 1, 0, 0,154, 1, 0, 0, 0, 0, 35, 0,153, 1, 0, 0,154, 1, 0, 0, 0, 0, 35, 0, +169, 0, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 30, 1, 0, 0,154, 1, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,154, 1, 0, 0, + 0, 0, 35, 0, 31, 1, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,173, 0, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0,173, 0, 0, 0, +153, 1, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,155, 1, 0, 0, 0, 0, 35, 0, 29, 1, 0, 0,155, 1, 0, 0, 0, 0, 35, 0, +167, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0,155, 1, 0, 0,156, 1, 0, 0, 0, 0, 35, 0,155, 1, 0, 0,157, 1, 0, 0, + 0, 0, 35, 0,156, 1, 0, 0,157, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0,162, 0, 0, 0, +157, 1, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,157, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0,156, 1, 0, 0, 0, 0, 35, 0, +163, 0, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0, 28, 1, 0, 0,156, 1, 0, 0, 0, 0, 35, 0, 33, 1, 0, 0,158, 1, 0, 0, + 0, 0, 35, 0,179, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0,179, 0, 0, 0,158, 1, 0, 0, 0, 0, 35, 0,158, 1, 0, 0, +159, 1, 0, 0, 0, 0, 35, 0,159, 1, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,158, 1, 0, 0,160, 1, 0, 0, 0, 0, 35, 0, +165, 0, 0, 0, 32, 1, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,160, 1, 0, 0, + 0, 0, 35, 0,164, 0, 0, 0,159, 1, 0, 0, 0, 0, 35, 0,178, 0, 0, 0,159, 1, 0, 0, 0, 0, 35, 0,164, 0, 0, 0, +178, 0, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0,161, 1, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0, 34, 1, 0, 0, 0, 0, 35, 0, + 34, 1, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,161, 1, 0, 0,162, 1, 0, 0, 0, 0, 35, 0,162, 1, 0, 0,163, 1, 0, 0, + 0, 0, 35, 0,161, 1, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 33, 1, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0, 33, 1, 0, 0, +163, 1, 0, 0, 0, 0, 35, 0, 37, 1, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 36, 1, 0, 0,162, 1, 0, 0, 0, 0, 35, 0, + 35, 1, 0, 0,162, 1, 0, 0, 0, 0, 35, 0, 35, 1, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,164, 1, 0, 0, + 0, 0, 35, 0,176, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,164, 1, 0, 0, 0, 0, 35, 0,164, 1, 0, 0, +165, 1, 0, 0, 0, 0, 35, 0,165, 1, 0, 0,166, 1, 0, 0, 0, 0, 35, 0,164, 1, 0, 0,166, 1, 0, 0, 0, 0, 35, 0, +177, 0, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,166, 1, 0, 0, 0, 0, 35, 0, 36, 1, 0, 0,166, 1, 0, 0, + 0, 0, 35, 0, 37, 1, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0, + 37, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0, 35, 1, 0, 0, 0, 0, 35, 0, + 35, 1, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,167, 1, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,168, 1, 0, 0,169, 1, 0, 0, + 0, 0, 35, 0,167, 1, 0, 0,169, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0,174, 0, 0, 0, +169, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,169, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0,168, 1, 0, 0, 0, 0, 35, 0, + 34, 1, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0, 34, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0,170, 1, 0, 0, + 0, 0, 35, 0,187, 0, 0, 0,170, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0, 39, 1, 0, 0, 0, 0, 35, 0,170, 1, 0, 0, +171, 1, 0, 0, 0, 0, 35, 0,170, 1, 0, 0,172, 1, 0, 0, 0, 0, 35, 0,171, 1, 0, 0,172, 1, 0, 0, 0, 0, 35, 0, +169, 0, 0, 0, 38, 1, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,172, 1, 0, 0, 0, 0, 35, 0, 38, 1, 0, 0,172, 1, 0, 0, + 0, 0, 35, 0,168, 0, 0, 0,171, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,186, 0, 0, 0, 0, 0, 35, 0,186, 0, 0, 0, +171, 1, 0, 0, 0, 0, 35, 0, 38, 1, 0, 0,173, 1, 0, 0, 0, 0, 35, 0, 40, 1, 0, 0,173, 1, 0, 0, 0, 0, 35, 0, + 38, 1, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0,173, 1, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,173, 1, 0, 0,175, 1, 0, 0, + 0, 0, 35, 0,174, 1, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0, 43, 1, 0, 0, +175, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 42, 1, 0, 0,174, 1, 0, 0, 0, 0, 35, 0, + 41, 1, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 41, 1, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,176, 1, 0, 0, + 0, 0, 35, 0,188, 0, 0, 0,176, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,188, 0, 0, 0, 0, 0, 35, 0,176, 1, 0, 0, +177, 1, 0, 0, 0, 0, 35, 0,176, 1, 0, 0,178, 1, 0, 0, 0, 0, 35, 0,177, 1, 0, 0,178, 1, 0, 0, 0, 0, 35, 0, +185, 0, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 42, 1, 0, 0,178, 1, 0, 0, 0, 0, 35, 0,185, 0, 0, 0,178, 1, 0, 0, + 0, 0, 35, 0, 43, 1, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,189, 0, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0,189, 0, 0, 0, +177, 1, 0, 0, 0, 0, 35, 0,183, 0, 0, 0,179, 1, 0, 0, 0, 0, 35, 0, 41, 1, 0, 0,179, 1, 0, 0, 0, 0, 35, 0, +183, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0,179, 1, 0, 0,180, 1, 0, 0, 0, 0, 35, 0,179, 1, 0, 0,181, 1, 0, 0, + 0, 0, 35, 0,180, 1, 0, 0,181, 1, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,182, 0, 0, 0, 0, 0, 35, 0,166, 0, 0, 0, +181, 1, 0, 0, 0, 0, 35, 0,182, 0, 0, 0,181, 1, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,180, 1, 0, 0, 0, 0, 35, 0, +167, 0, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0, 40, 1, 0, 0,180, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0,182, 1, 0, 0, + 0, 0, 35, 0,195, 0, 0, 0,182, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0,182, 1, 0, 0, +183, 1, 0, 0, 0, 0, 35, 0,182, 1, 0, 0,184, 1, 0, 0, 0, 0, 35, 0,183, 1, 0, 0,184, 1, 0, 0, 0, 0, 35, 0, +185, 0, 0, 0, 44, 1, 0, 0, 0, 0, 35, 0,185, 0, 0, 0,184, 1, 0, 0, 0, 0, 35, 0, 44, 1, 0, 0,184, 1, 0, 0, + 0, 0, 35, 0,184, 0, 0, 0,183, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,194, 0, 0, 0, 0, 0, 35, 0,194, 0, 0, 0, +183, 1, 0, 0, 0, 0, 35, 0, 44, 1, 0, 0,185, 1, 0, 0, 0, 0, 35, 0, 46, 1, 0, 0,185, 1, 0, 0, 0, 0, 35, 0, + 44, 1, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0,185, 1, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,185, 1, 0, 0,187, 1, 0, 0, + 0, 0, 35, 0,186, 1, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0, 49, 1, 0, 0, +187, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 48, 1, 0, 0,186, 1, 0, 0, 0, 0, 35, 0, + 47, 1, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0, 47, 1, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,188, 1, 0, 0, + 0, 0, 35, 0,196, 0, 0, 0,188, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,196, 0, 0, 0, 0, 0, 35, 0,188, 1, 0, 0, +189, 1, 0, 0, 0, 0, 35, 0,188, 1, 0, 0,190, 1, 0, 0, 0, 0, 35, 0,189, 1, 0, 0,190, 1, 0, 0, 0, 0, 35, 0, +193, 0, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0, 48, 1, 0, 0,190, 1, 0, 0, 0, 0, 35, 0,193, 0, 0, 0,190, 1, 0, 0, + 0, 0, 35, 0, 49, 1, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,197, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0,197, 0, 0, 0, +189, 1, 0, 0, 0, 0, 35, 0,191, 0, 0, 0,191, 1, 0, 0, 0, 0, 35, 0, 47, 1, 0, 0,191, 1, 0, 0, 0, 0, 35, 0, +191, 0, 0, 0, 47, 1, 0, 0, 0, 0, 35, 0,191, 1, 0, 0,192, 1, 0, 0, 0, 0, 35, 0,191, 1, 0, 0,193, 1, 0, 0, + 0, 0, 35, 0,192, 1, 0, 0,193, 1, 0, 0, 0, 0, 35, 0,182, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0,182, 0, 0, 0, +193, 1, 0, 0, 0, 0, 35, 0,190, 0, 0, 0,193, 1, 0, 0, 0, 0, 35, 0,183, 0, 0, 0,192, 1, 0, 0, 0, 0, 35, 0, +183, 0, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0, 46, 1, 0, 0,192, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0,194, 1, 0, 0, + 0, 0, 35, 0,199, 0, 0, 0,194, 1, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 51, 1, 0, 0, 0, 0, 35, 0,194, 1, 0, 0, +195, 1, 0, 0, 0, 0, 35, 0,194, 1, 0, 0,196, 1, 0, 0, 0, 0, 35, 0,195, 1, 0, 0,196, 1, 0, 0, 0, 0, 35, 0, +193, 0, 0, 0, 50, 1, 0, 0, 0, 0, 35, 0,193, 0, 0, 0,196, 1, 0, 0, 0, 0, 35, 0, 50, 1, 0, 0,196, 1, 0, 0, + 0, 0, 35, 0,192, 0, 0, 0,195, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,198, 0, 0, 0, 0, 0, 35, 0,198, 0, 0, 0, +195, 1, 0, 0, 0, 0, 35, 0, 50, 1, 0, 0,197, 1, 0, 0, 0, 0, 35, 0, 53, 1, 0, 0,197, 1, 0, 0, 0, 0, 35, 0, + 50, 1, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0,197, 1, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,197, 1, 0, 0,199, 1, 0, 0, + 0, 0, 35, 0,198, 1, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0, 55, 1, 0, 0, +199, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 54, 1, 0, 0,198, 1, 0, 0, 0, 0, 35, 0, + 52, 1, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 52, 1, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,200, 1, 0, 0, + 0, 0, 35, 0,200, 0, 0, 0,200, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,200, 0, 0, 0, 0, 0, 35, 0,200, 1, 0, 0, +201, 1, 0, 0, 0, 0, 35, 0,200, 1, 0, 0,202, 1, 0, 0, 0, 0, 35, 0,201, 1, 0, 0,202, 1, 0, 0, 0, 0, 35, 0, +177, 0, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 54, 1, 0, 0,202, 1, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,202, 1, 0, 0, + 0, 0, 35, 0, 55, 1, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,201, 0, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0,201, 0, 0, 0, +201, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,203, 1, 0, 0, 0, 0, 35, 0, 52, 1, 0, 0,203, 1, 0, 0, 0, 0, 35, 0, +175, 0, 0, 0, 52, 1, 0, 0, 0, 0, 35, 0,203, 1, 0, 0,204, 1, 0, 0, 0, 0, 35, 0,203, 1, 0, 0,205, 1, 0, 0, + 0, 0, 35, 0,204, 1, 0, 0,205, 1, 0, 0, 0, 0, 35, 0,174, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0,190, 0, 0, 0, +205, 1, 0, 0, 0, 0, 35, 0,174, 0, 0, 0,205, 1, 0, 0, 0, 0, 35, 0,191, 0, 0, 0,204, 1, 0, 0, 0, 0, 35, 0, +191, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0, 53, 1, 0, 0,204, 1, 0, 0, 0, 0, 35, 0, 57, 1, 0, 0,206, 1, 0, 0, + 0, 0, 35, 0,207, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0,207, 0, 0, 0,206, 1, 0, 0, 0, 0, 35, 0,206, 1, 0, 0, +207, 1, 0, 0, 0, 0, 35, 0,207, 1, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,206, 1, 0, 0,208, 1, 0, 0, 0, 0, 35, 0, +179, 0, 0, 0, 56, 1, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,179, 0, 0, 0,208, 1, 0, 0, + 0, 0, 35, 0,178, 0, 0, 0,207, 1, 0, 0, 0, 0, 35, 0,206, 0, 0, 0,207, 1, 0, 0, 0, 0, 35, 0,178, 0, 0, 0, +206, 0, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0,209, 1, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0, 58, 1, 0, 0, 0, 0, 35, 0, + 58, 1, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,209, 1, 0, 0,210, 1, 0, 0, 0, 0, 35, 0,210, 1, 0, 0,211, 1, 0, 0, + 0, 0, 35, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 57, 1, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0, 57, 1, 0, 0, +211, 1, 0, 0, 0, 0, 35, 0, 61, 1, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 60, 1, 0, 0,210, 1, 0, 0, 0, 0, 35, 0, + 59, 1, 0, 0,210, 1, 0, 0, 0, 0, 35, 0, 59, 1, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,204, 0, 0, 0,212, 1, 0, 0, + 0, 0, 35, 0,204, 0, 0, 0,208, 0, 0, 0, 0, 0, 35, 0,208, 0, 0, 0,212, 1, 0, 0, 0, 0, 35, 0,212, 1, 0, 0, +213, 1, 0, 0, 0, 0, 35, 0,213, 1, 0, 0,214, 1, 0, 0, 0, 0, 35, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 35, 0, +205, 0, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,205, 0, 0, 0,214, 1, 0, 0, 0, 0, 35, 0, 60, 1, 0, 0,214, 1, 0, 0, + 0, 0, 35, 0, 61, 1, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,209, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,209, 0, 0, 0, + 61, 1, 0, 0, 0, 0, 35, 0,203, 0, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,203, 0, 0, 0, 59, 1, 0, 0, 0, 0, 35, 0, + 59, 1, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,215, 1, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,216, 1, 0, 0,217, 1, 0, 0, + 0, 0, 35, 0,215, 1, 0, 0,217, 1, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,202, 0, 0, 0, 0, 0, 35, 0,202, 0, 0, 0, +217, 1, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,217, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0,216, 1, 0, 0, 0, 0, 35, 0, + 58, 1, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0, 58, 1, 0, 0, 0, 0, 35, 0, 63, 1, 0, 0,218, 1, 0, 0, + 0, 0, 35, 0,215, 0, 0, 0, 63, 1, 0, 0, 0, 0, 35, 0,215, 0, 0, 0,218, 1, 0, 0, 0, 0, 35, 0,218, 1, 0, 0, +219, 1, 0, 0, 0, 0, 35, 0,219, 1, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,218, 1, 0, 0,220, 1, 0, 0, 0, 0, 35, 0, +173, 0, 0, 0, 62, 1, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,173, 0, 0, 0,220, 1, 0, 0, + 0, 0, 35, 0,172, 0, 0, 0,219, 1, 0, 0, 0, 0, 35, 0,214, 0, 0, 0,219, 1, 0, 0, 0, 0, 35, 0,172, 0, 0, 0, +214, 0, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0,221, 1, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0, + 64, 1, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,221, 1, 0, 0,222, 1, 0, 0, 0, 0, 35, 0,222, 1, 0, 0,223, 1, 0, 0, + 0, 0, 35, 0,221, 1, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 63, 1, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0, 63, 1, 0, 0, +223, 1, 0, 0, 0, 0, 35, 0, 67, 1, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 66, 1, 0, 0,222, 1, 0, 0, 0, 0, 35, 0, + 65, 1, 0, 0,222, 1, 0, 0, 0, 0, 35, 0, 65, 1, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,224, 1, 0, 0, + 0, 0, 35, 0,212, 0, 0, 0,216, 0, 0, 0, 0, 0, 35, 0,216, 0, 0, 0,224, 1, 0, 0, 0, 0, 35, 0,224, 1, 0, 0, +225, 1, 0, 0, 0, 0, 35, 0,225, 1, 0, 0,226, 1, 0, 0, 0, 0, 35, 0,224, 1, 0, 0,226, 1, 0, 0, 0, 0, 35, 0, +213, 0, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0,213, 0, 0, 0,226, 1, 0, 0, 0, 0, 35, 0, 66, 1, 0, 0,226, 1, 0, 0, + 0, 0, 35, 0, 67, 1, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,217, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,217, 0, 0, 0, + 67, 1, 0, 0, 0, 0, 35, 0,211, 0, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,211, 0, 0, 0, 65, 1, 0, 0, 0, 0, 35, 0, + 65, 1, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,227, 1, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,228, 1, 0, 0,229, 1, 0, 0, + 0, 0, 35, 0,227, 1, 0, 0,229, 1, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0,210, 0, 0, 0, +229, 1, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,229, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0,228, 1, 0, 0, 0, 0, 35, 0, + 64, 1, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0, 69, 1, 0, 0,230, 1, 0, 0, + 0, 0, 35, 0,223, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0,223, 0, 0, 0,230, 1, 0, 0, 0, 0, 35, 0,230, 1, 0, 0, +231, 1, 0, 0, 0, 0, 35, 0,231, 1, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,230, 1, 0, 0,232, 1, 0, 0, 0, 0, 35, 0, +189, 0, 0, 0, 68, 1, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,189, 0, 0, 0,232, 1, 0, 0, + 0, 0, 35, 0,188, 0, 0, 0,231, 1, 0, 0, 0, 0, 35, 0,222, 0, 0, 0,231, 1, 0, 0, 0, 0, 35, 0,188, 0, 0, 0, +222, 0, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0,233, 1, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0, 70, 1, 0, 0, 0, 0, 35, 0, + 70, 1, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,233, 1, 0, 0,234, 1, 0, 0, 0, 0, 35, 0,234, 1, 0, 0,235, 1, 0, 0, + 0, 0, 35, 0,233, 1, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 69, 1, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0, 69, 1, 0, 0, +235, 1, 0, 0, 0, 0, 35, 0, 73, 1, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 72, 1, 0, 0,234, 1, 0, 0, 0, 0, 35, 0, + 71, 1, 0, 0,234, 1, 0, 0, 0, 0, 35, 0, 71, 1, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,236, 1, 0, 0, + 0, 0, 35, 0,220, 0, 0, 0,224, 0, 0, 0, 0, 0, 35, 0,224, 0, 0, 0,236, 1, 0, 0, 0, 0, 35, 0,236, 1, 0, 0, +237, 1, 0, 0, 0, 0, 35, 0,237, 1, 0, 0,238, 1, 0, 0, 0, 0, 35, 0,236, 1, 0, 0,238, 1, 0, 0, 0, 0, 35, 0, +221, 0, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,221, 0, 0, 0,238, 1, 0, 0, 0, 0, 35, 0, 72, 1, 0, 0,238, 1, 0, 0, + 0, 0, 35, 0, 73, 1, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,225, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,225, 0, 0, 0, + 73, 1, 0, 0, 0, 0, 35, 0,219, 0, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,219, 0, 0, 0, 71, 1, 0, 0, 0, 0, 35, 0, + 71, 1, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,239, 1, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,240, 1, 0, 0,241, 1, 0, 0, + 0, 0, 35, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 35, 0,186, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0,218, 0, 0, 0, +241, 1, 0, 0, 0, 0, 35, 0,186, 0, 0, 0,241, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0,240, 1, 0, 0, 0, 0, 35, 0, + 70, 1, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0, 70, 1, 0, 0, 0, 0, 35, 0, 75, 1, 0, 0,242, 1, 0, 0, + 0, 0, 35, 0,231, 0, 0, 0, 75, 1, 0, 0, 0, 0, 35, 0,231, 0, 0, 0,242, 1, 0, 0, 0, 0, 35, 0,242, 1, 0, 0, +243, 1, 0, 0, 0, 0, 35, 0,243, 1, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,242, 1, 0, 0,244, 1, 0, 0, 0, 0, 35, 0, +197, 0, 0, 0, 74, 1, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,197, 0, 0, 0,244, 1, 0, 0, + 0, 0, 35, 0,196, 0, 0, 0,243, 1, 0, 0, 0, 0, 35, 0,230, 0, 0, 0,243, 1, 0, 0, 0, 0, 35, 0,196, 0, 0, 0, +230, 0, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0,245, 1, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0, + 76, 1, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,245, 1, 0, 0,246, 1, 0, 0, 0, 0, 35, 0,246, 1, 0, 0,247, 1, 0, 0, + 0, 0, 35, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 75, 1, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0, 75, 1, 0, 0, +247, 1, 0, 0, 0, 0, 35, 0, 79, 1, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 78, 1, 0, 0,246, 1, 0, 0, 0, 0, 35, 0, + 77, 1, 0, 0,246, 1, 0, 0, 0, 0, 35, 0, 77, 1, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,248, 1, 0, 0, + 0, 0, 35, 0,228, 0, 0, 0,232, 0, 0, 0, 0, 0, 35, 0,232, 0, 0, 0,248, 1, 0, 0, 0, 0, 35, 0,248, 1, 0, 0, +249, 1, 0, 0, 0, 0, 35, 0,249, 1, 0, 0,250, 1, 0, 0, 0, 0, 35, 0,248, 1, 0, 0,250, 1, 0, 0, 0, 0, 35, 0, +229, 0, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0,229, 0, 0, 0,250, 1, 0, 0, 0, 0, 35, 0, 78, 1, 0, 0,250, 1, 0, 0, + 0, 0, 35, 0, 79, 1, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,233, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,233, 0, 0, 0, + 79, 1, 0, 0, 0, 0, 35, 0,227, 0, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,227, 0, 0, 0, 77, 1, 0, 0, 0, 0, 35, 0, + 77, 1, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,251, 1, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,252, 1, 0, 0,253, 1, 0, 0, + 0, 0, 35, 0,251, 1, 0, 0,253, 1, 0, 0, 0, 0, 35, 0,194, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0,226, 0, 0, 0, +253, 1, 0, 0, 0, 0, 35, 0,194, 0, 0, 0,253, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0,252, 1, 0, 0, 0, 0, 35, 0, + 76, 1, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0, 81, 1, 0, 0,254, 1, 0, 0, + 0, 0, 35, 0,239, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0,239, 0, 0, 0,254, 1, 0, 0, 0, 0, 35, 0,254, 1, 0, 0, +255, 1, 0, 0, 0, 0, 35, 0,255, 1, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,254, 1, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0, +201, 0, 0, 0, 80, 1, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,201, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 35, 0,200, 0, 0, 0,255, 1, 0, 0, 0, 0, 35, 0,238, 0, 0, 0,255, 1, 0, 0, 0, 0, 35, 0,200, 0, 0, 0, +238, 0, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 82, 1, 0, 0, 0, 0, 35, 0, + 82, 1, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0, 1, 2, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0, 2, 2, 0, 0, 3, 2, 0, 0, + 0, 0, 35, 0, 1, 2, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 81, 1, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0, 81, 1, 0, 0, + 3, 2, 0, 0, 0, 0, 35, 0, 85, 1, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 84, 1, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0, + 83, 1, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0, 83, 1, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,236, 0, 0, 0, 4, 2, 0, 0, + 0, 0, 35, 0,236, 0, 0, 0,240, 0, 0, 0, 0, 0, 35, 0,240, 0, 0, 0, 4, 2, 0, 0, 0, 0, 35, 0, 4, 2, 0, 0, + 5, 2, 0, 0, 0, 0, 35, 0, 5, 2, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 4, 2, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, +237, 0, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,237, 0, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 84, 1, 0, 0, 6, 2, 0, 0, + 0, 0, 35, 0, 85, 1, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,241, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,241, 0, 0, 0, + 85, 1, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 83, 1, 0, 0, 0, 0, 35, 0, + 83, 1, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0, 7, 2, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0, 8, 2, 0, 0, 9, 2, 0, 0, + 0, 0, 35, 0, 7, 2, 0, 0, 9, 2, 0, 0, 0, 0, 35, 0,198, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0,234, 0, 0, 0, + 9, 2, 0, 0, 0, 0, 35, 0,198, 0, 0, 0, 9, 2, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0, + 82, 1, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 82, 1, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0, 10, 2, 0, 0, + 0, 0, 35, 0,245, 0, 0, 0, 10, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0, 87, 1, 0, 0, 0, 0, 35, 0, 10, 2, 0, 0, + 11, 2, 0, 0, 0, 0, 35, 0, 10, 2, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, 11, 2, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, +209, 0, 0, 0, 86, 1, 0, 0, 0, 0, 35, 0,209, 0, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, 86, 1, 0, 0, 12, 2, 0, 0, + 0, 0, 35, 0,208, 0, 0, 0, 11, 2, 0, 0, 0, 0, 35, 0,208, 0, 0, 0,244, 0, 0, 0, 0, 0, 35, 0,244, 0, 0, 0, + 11, 2, 0, 0, 0, 0, 35, 0, 86, 1, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0, 88, 1, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0, + 86, 1, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0, 13, 2, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0, 13, 2, 0, 0, 15, 2, 0, 0, + 0, 0, 35, 0, 14, 2, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0, 91, 1, 0, 0, + 15, 2, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 90, 1, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0, + 89, 1, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 89, 1, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0,212, 0, 0, 0, 16, 2, 0, 0, + 0, 0, 35, 0,242, 0, 0, 0, 16, 2, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,242, 0, 0, 0, 0, 0, 35, 0, 16, 2, 0, 0, + 17, 2, 0, 0, 0, 0, 35, 0, 16, 2, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0, 17, 2, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0, +213, 0, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 90, 1, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0,213, 0, 0, 0, 18, 2, 0, 0, + 0, 0, 35, 0, 91, 1, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0,243, 0, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0,243, 0, 0, 0, + 17, 2, 0, 0, 0, 0, 35, 0,211, 0, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0, 89, 1, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0, +211, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0, 19, 2, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, 19, 2, 0, 0, 21, 2, 0, 0, + 0, 0, 35, 0, 20, 2, 0, 0, 21, 2, 0, 0, 0, 0, 35, 0,206, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0,206, 0, 0, 0, + 21, 2, 0, 0, 0, 0, 35, 0,210, 0, 0, 0, 21, 2, 0, 0, 0, 0, 35, 0,207, 0, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, +207, 0, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0, 88, 1, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0, 22, 2, 0, 0, + 0, 0, 35, 0,247, 0, 0, 0, 22, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0, 22, 2, 0, 0, + 23, 2, 0, 0, 0, 0, 35, 0, 22, 2, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, 23, 2, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, +217, 0, 0, 0, 92, 1, 0, 0, 0, 0, 35, 0,217, 0, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, 92, 1, 0, 0, 24, 2, 0, 0, + 0, 0, 35, 0,216, 0, 0, 0, 23, 2, 0, 0, 0, 0, 35, 0,216, 0, 0, 0,246, 0, 0, 0, 0, 0, 35, 0,246, 0, 0, 0, + 23, 2, 0, 0, 0, 0, 35, 0, 92, 1, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0, 94, 1, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0, + 92, 1, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 25, 2, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0, 25, 2, 0, 0, 27, 2, 0, 0, + 0, 0, 35, 0, 26, 2, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0, 97, 1, 0, 0, + 27, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 96, 1, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0, + 95, 1, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0, 95, 1, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0,220, 0, 0, 0, 28, 2, 0, 0, + 0, 0, 35, 0,248, 0, 0, 0, 28, 2, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,248, 0, 0, 0, 0, 0, 35, 0, 28, 2, 0, 0, + 29, 2, 0, 0, 0, 0, 35, 0, 28, 2, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0, 29, 2, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0, +221, 0, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0, 96, 1, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0,221, 0, 0, 0, 30, 2, 0, 0, + 0, 0, 35, 0, 97, 1, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0,249, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0,249, 0, 0, 0, + 29, 2, 0, 0, 0, 0, 35, 0,219, 0, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0, 95, 1, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0, +219, 0, 0, 0, 95, 1, 0, 0, 0, 0, 35, 0, 31, 2, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, 31, 2, 0, 0, 33, 2, 0, 0, + 0, 0, 35, 0, 32, 2, 0, 0, 33, 2, 0, 0, 0, 0, 35, 0,214, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0,214, 0, 0, 0, + 33, 2, 0, 0, 0, 0, 35, 0,218, 0, 0, 0, 33, 2, 0, 0, 0, 0, 35, 0,215, 0, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, +215, 0, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 94, 1, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0, 34, 2, 0, 0, + 0, 0, 35, 0,251, 0, 0, 0, 34, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0, 99, 1, 0, 0, 0, 0, 35, 0, 34, 2, 0, 0, + 35, 2, 0, 0, 0, 0, 35, 0, 34, 2, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, 35, 2, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, +225, 0, 0, 0, 98, 1, 0, 0, 0, 0, 35, 0,225, 0, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, 98, 1, 0, 0, 36, 2, 0, 0, + 0, 0, 35, 0,224, 0, 0, 0, 35, 2, 0, 0, 0, 0, 35, 0,224, 0, 0, 0,250, 0, 0, 0, 0, 0, 35, 0,250, 0, 0, 0, + 35, 2, 0, 0, 0, 0, 35, 0, 98, 1, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,100, 1, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0, + 98, 1, 0, 0,100, 1, 0, 0, 0, 0, 35, 0, 37, 2, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0, 37, 2, 0, 0, 39, 2, 0, 0, + 0, 0, 35, 0, 38, 2, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,103, 1, 0, 0, + 39, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0,102, 1, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0, +101, 1, 0, 0,102, 1, 0, 0, 0, 0, 35, 0,101, 1, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0,228, 0, 0, 0, 40, 2, 0, 0, + 0, 0, 35, 0,252, 0, 0, 0, 40, 2, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,252, 0, 0, 0, 0, 0, 35, 0, 40, 2, 0, 0, + 41, 2, 0, 0, 0, 0, 35, 0, 40, 2, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0, 41, 2, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0, +229, 0, 0, 0,102, 1, 0, 0, 0, 0, 35, 0,102, 1, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0,229, 0, 0, 0, 42, 2, 0, 0, + 0, 0, 35, 0,103, 1, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0,253, 0, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,253, 0, 0, 0, + 41, 2, 0, 0, 0, 0, 35, 0,227, 0, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0,101, 1, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0, +227, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0, 43, 2, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0, 43, 2, 0, 0, 45, 2, 0, 0, + 0, 0, 35, 0, 44, 2, 0, 0, 45, 2, 0, 0, 0, 0, 35, 0,222, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0,222, 0, 0, 0, + 45, 2, 0, 0, 0, 0, 35, 0,226, 0, 0, 0, 45, 2, 0, 0, 0, 0, 35, 0,223, 0, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0, +223, 0, 0, 0,100, 1, 0, 0, 0, 0, 35, 0,100, 1, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0, 46, 2, 0, 0, + 0, 0, 35, 0,255, 0, 0, 0, 46, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0, 46, 2, 0, 0, + 47, 2, 0, 0, 0, 0, 35, 0, 46, 2, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0, 47, 2, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0, +233, 0, 0, 0,104, 1, 0, 0, 0, 0, 35, 0,233, 0, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0,104, 1, 0, 0, 48, 2, 0, 0, + 0, 0, 35, 0,232, 0, 0, 0, 47, 2, 0, 0, 0, 0, 35, 0,232, 0, 0, 0,254, 0, 0, 0, 0, 0, 35, 0,254, 0, 0, 0, + 47, 2, 0, 0, 0, 0, 35, 0,104, 1, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,106, 1, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0, +104, 1, 0, 0,106, 1, 0, 0, 0, 0, 35, 0, 49, 2, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0, 49, 2, 0, 0, 51, 2, 0, 0, + 0, 0, 35, 0, 50, 2, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0,109, 1, 0, 0, 0, 0, 35, 0,109, 1, 0, 0, + 51, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,108, 1, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0, +107, 1, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,107, 1, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0,236, 0, 0, 0, 52, 2, 0, 0, + 0, 0, 35, 0, 0, 1, 0, 0, 52, 2, 0, 0, 0, 0, 35, 0,236, 0, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 52, 2, 0, 0, + 53, 2, 0, 0, 0, 0, 35, 0, 52, 2, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0, 53, 2, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0, +237, 0, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,108, 1, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0,237, 0, 0, 0, 54, 2, 0, 0, + 0, 0, 35, 0,109, 1, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0, 1, 1, 0, 0,109, 1, 0, 0, 0, 0, 35, 0, 1, 1, 0, 0, + 53, 2, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0,107, 1, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0, +235, 0, 0, 0,107, 1, 0, 0, 0, 0, 35, 0, 55, 2, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0, 55, 2, 0, 0, 57, 2, 0, 0, + 0, 0, 35, 0, 56, 2, 0, 0, 57, 2, 0, 0, 0, 0, 35, 0,230, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0,230, 0, 0, 0, + 57, 2, 0, 0, 0, 0, 35, 0,234, 0, 0, 0, 57, 2, 0, 0, 0, 0, 35, 0,231, 0, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0, +231, 0, 0, 0,106, 1, 0, 0, 0, 0, 35, 0,106, 1, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0, 58, 2, 0, 0, + 0, 0, 35, 0, 3, 1, 0, 0, 58, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,111, 1, 0, 0, 0, 0, 35, 0, 58, 2, 0, 0, + 59, 2, 0, 0, 0, 0, 35, 0, 58, 2, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0, 59, 2, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0, +241, 0, 0, 0,110, 1, 0, 0, 0, 0, 35, 0,241, 0, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0,110, 1, 0, 0, 60, 2, 0, 0, + 0, 0, 35, 0,240, 0, 0, 0, 59, 2, 0, 0, 0, 0, 35, 0,240, 0, 0, 0, 2, 1, 0, 0, 0, 0, 35, 0, 2, 1, 0, 0, + 59, 2, 0, 0, 0, 0, 35, 0,110, 1, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,113, 1, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0, +110, 1, 0, 0,113, 1, 0, 0, 0, 0, 35, 0, 61, 2, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0, 61, 2, 0, 0, 63, 2, 0, 0, + 0, 0, 35, 0, 62, 2, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0,115, 1, 0, 0, 0, 0, 35, 0,115, 1, 0, 0, + 63, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,114, 1, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0, +112, 1, 0, 0,114, 1, 0, 0, 0, 0, 35, 0,112, 1, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0,204, 0, 0, 0, 64, 2, 0, 0, + 0, 0, 35, 0, 4, 1, 0, 0, 64, 2, 0, 0, 0, 0, 35, 0,204, 0, 0, 0, 4, 1, 0, 0, 0, 0, 35, 0, 64, 2, 0, 0, + 65, 2, 0, 0, 0, 0, 35, 0, 64, 2, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0, 65, 2, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0, +205, 0, 0, 0,114, 1, 0, 0, 0, 0, 35, 0,114, 1, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0,205, 0, 0, 0, 66, 2, 0, 0, + 0, 0, 35, 0,115, 1, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0, 5, 1, 0, 0,115, 1, 0, 0, 0, 0, 35, 0, 5, 1, 0, 0, + 65, 2, 0, 0, 0, 0, 35, 0,203, 0, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0,112, 1, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0, +203, 0, 0, 0,112, 1, 0, 0, 0, 0, 35, 0, 67, 2, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0, 67, 2, 0, 0, 69, 2, 0, 0, + 0, 0, 35, 0, 68, 2, 0, 0, 69, 2, 0, 0, 0, 0, 35, 0,202, 0, 0, 0,238, 0, 0, 0, 0, 0, 35, 0,238, 0, 0, 0, + 69, 2, 0, 0, 0, 0, 35, 0,202, 0, 0, 0, 69, 2, 0, 0, 0, 0, 35, 0,239, 0, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0, +239, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0,113, 1, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0,117, 1, 0, 0, 70, 2, 0, 0, + 0, 0, 35, 0, 11, 1, 0, 0,117, 1, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0, 70, 2, 0, 0, 0, 0, 35, 0, 70, 2, 0, 0, + 71, 2, 0, 0, 0, 0, 35, 0, 71, 2, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0, 70, 2, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0, +243, 0, 0, 0,116, 1, 0, 0, 0, 0, 35, 0,116, 1, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0,243, 0, 0, 0, 72, 2, 0, 0, + 0, 0, 35, 0,242, 0, 0, 0, 71, 2, 0, 0, 0, 0, 35, 0, 10, 1, 0, 0, 71, 2, 0, 0, 0, 0, 35, 0,242, 0, 0, 0, + 10, 1, 0, 0, 0, 0, 35, 0,116, 1, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,116, 1, 0, 0,118, 1, 0, 0, 0, 0, 35, 0, +118, 1, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0, 73, 2, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0, 74, 2, 0, 0, 75, 2, 0, 0, + 0, 0, 35, 0, 73, 2, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,117, 1, 0, 0,121, 1, 0, 0, 0, 0, 35, 0,117, 1, 0, 0, + 75, 2, 0, 0, 0, 0, 35, 0,121, 1, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,120, 1, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0, +119, 1, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0,119, 1, 0, 0,120, 1, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0, 76, 2, 0, 0, + 0, 0, 35, 0, 8, 1, 0, 0, 12, 1, 0, 0, 0, 0, 35, 0, 12, 1, 0, 0, 76, 2, 0, 0, 0, 0, 35, 0, 76, 2, 0, 0, + 77, 2, 0, 0, 0, 0, 35, 0, 77, 2, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0, 76, 2, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0, + 9, 1, 0, 0,120, 1, 0, 0, 0, 0, 35, 0, 9, 1, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0,120, 1, 0, 0, 78, 2, 0, 0, + 0, 0, 35, 0,121, 1, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 13, 1, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 13, 1, 0, 0, +121, 1, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0,119, 1, 0, 0, 0, 0, 35, 0, +119, 1, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0, 79, 2, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0, 80, 2, 0, 0, 81, 2, 0, 0, + 0, 0, 35, 0, 79, 2, 0, 0, 81, 2, 0, 0, 0, 0, 35, 0,244, 0, 0, 0, 6, 1, 0, 0, 0, 0, 35, 0, 6, 1, 0, 0, + 81, 2, 0, 0, 0, 0, 35, 0,244, 0, 0, 0, 81, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0, +118, 1, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0,118, 1, 0, 0, 0, 0, 35, 0,123, 1, 0, 0, 82, 2, 0, 0, + 0, 0, 35, 0, 15, 1, 0, 0,123, 1, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0, 82, 2, 0, 0, 0, 0, 35, 0, 82, 2, 0, 0, + 83, 2, 0, 0, 0, 0, 35, 0, 83, 2, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0, 82, 2, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0, +249, 0, 0, 0,122, 1, 0, 0, 0, 0, 35, 0,122, 1, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0,249, 0, 0, 0, 84, 2, 0, 0, + 0, 0, 35, 0,248, 0, 0, 0, 83, 2, 0, 0, 0, 0, 35, 0, 14, 1, 0, 0, 83, 2, 0, 0, 0, 0, 35, 0,248, 0, 0, 0, + 14, 1, 0, 0, 0, 0, 35, 0,122, 1, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,122, 1, 0, 0,124, 1, 0, 0, 0, 0, 35, 0, +124, 1, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0, 85, 2, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0, 86, 2, 0, 0, 87, 2, 0, 0, + 0, 0, 35, 0, 85, 2, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,123, 1, 0, 0,127, 1, 0, 0, 0, 0, 35, 0,123, 1, 0, 0, + 87, 2, 0, 0, 0, 0, 35, 0,127, 1, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,126, 1, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0, +125, 1, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0,125, 1, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 12, 1, 0, 0, 88, 2, 0, 0, + 0, 0, 35, 0, 12, 1, 0, 0, 16, 1, 0, 0, 0, 0, 35, 0, 16, 1, 0, 0, 88, 2, 0, 0, 0, 0, 35, 0, 88, 2, 0, 0, + 89, 2, 0, 0, 0, 0, 35, 0, 89, 2, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0, 88, 2, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0, + 13, 1, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 13, 1, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0,126, 1, 0, 0, 90, 2, 0, 0, + 0, 0, 35, 0,127, 1, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 17, 1, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 17, 1, 0, 0, +127, 1, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0,125, 1, 0, 0, 0, 0, 35, 0, +125, 1, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0, 91, 2, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0, 92, 2, 0, 0, 93, 2, 0, 0, + 0, 0, 35, 0, 91, 2, 0, 0, 93, 2, 0, 0, 0, 0, 35, 0,246, 0, 0, 0, 10, 1, 0, 0, 0, 0, 35, 0, 10, 1, 0, 0, + 93, 2, 0, 0, 0, 0, 35, 0,246, 0, 0, 0, 93, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0, +124, 1, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0,124, 1, 0, 0, 0, 0, 35, 0,129, 1, 0, 0, 94, 2, 0, 0, + 0, 0, 35, 0, 19, 1, 0, 0,129, 1, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0, 94, 2, 0, 0, 0, 0, 35, 0, 94, 2, 0, 0, + 95, 2, 0, 0, 0, 0, 35, 0, 95, 2, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0, 94, 2, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0, +253, 0, 0, 0,128, 1, 0, 0, 0, 0, 35, 0,128, 1, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0,253, 0, 0, 0, 96, 2, 0, 0, + 0, 0, 35, 0,252, 0, 0, 0, 95, 2, 0, 0, 0, 0, 35, 0, 18, 1, 0, 0, 95, 2, 0, 0, 0, 0, 35, 0,252, 0, 0, 0, + 18, 1, 0, 0, 0, 0, 35, 0,128, 1, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,128, 1, 0, 0,130, 1, 0, 0, 0, 0, 35, 0, +130, 1, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0, 97, 2, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0, 98, 2, 0, 0, 99, 2, 0, 0, + 0, 0, 35, 0, 97, 2, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,129, 1, 0, 0,133, 1, 0, 0, 0, 0, 35, 0,129, 1, 0, 0, + 99, 2, 0, 0, 0, 0, 35, 0,133, 1, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,132, 1, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0, +131, 1, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0,131, 1, 0, 0,132, 1, 0, 0, 0, 0, 35, 0, 16, 1, 0, 0,100, 2, 0, 0, + 0, 0, 35, 0, 16, 1, 0, 0, 20, 1, 0, 0, 0, 0, 35, 0, 20, 1, 0, 0,100, 2, 0, 0, 0, 0, 35, 0,100, 2, 0, 0, +101, 2, 0, 0, 0, 0, 35, 0,101, 2, 0, 0,102, 2, 0, 0, 0, 0, 35, 0,100, 2, 0, 0,102, 2, 0, 0, 0, 0, 35, 0, + 17, 1, 0, 0,132, 1, 0, 0, 0, 0, 35, 0, 17, 1, 0, 0,102, 2, 0, 0, 0, 0, 35, 0,132, 1, 0, 0,102, 2, 0, 0, + 0, 0, 35, 0,133, 1, 0, 0,101, 2, 0, 0, 0, 0, 35, 0, 21, 1, 0, 0,101, 2, 0, 0, 0, 0, 35, 0, 21, 1, 0, 0, +133, 1, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0,103, 2, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0,131, 1, 0, 0, 0, 0, 35, 0, +131, 1, 0, 0,103, 2, 0, 0, 0, 0, 35, 0,103, 2, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,104, 2, 0, 0,105, 2, 0, 0, + 0, 0, 35, 0,103, 2, 0, 0,105, 2, 0, 0, 0, 0, 35, 0,250, 0, 0, 0, 14, 1, 0, 0, 0, 0, 35, 0, 14, 1, 0, 0, +105, 2, 0, 0, 0, 0, 35, 0,250, 0, 0, 0,105, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0,104, 2, 0, 0, 0, 0, 35, 0, +130, 1, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0,130, 1, 0, 0, 0, 0, 35, 0,135, 1, 0, 0,106, 2, 0, 0, + 0, 0, 35, 0, 23, 1, 0, 0,135, 1, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,106, 2, 0, 0, 0, 0, 35, 0,106, 2, 0, 0, +107, 2, 0, 0, 0, 0, 35, 0,107, 2, 0, 0,108, 2, 0, 0, 0, 0, 35, 0,106, 2, 0, 0,108, 2, 0, 0, 0, 0, 35, 0, + 1, 1, 0, 0,134, 1, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,108, 2, 0, 0, 0, 0, 35, 0, 1, 1, 0, 0,108, 2, 0, 0, + 0, 0, 35, 0, 0, 1, 0, 0,107, 2, 0, 0, 0, 0, 35, 0, 22, 1, 0, 0,107, 2, 0, 0, 0, 0, 35, 0, 0, 1, 0, 0, + 22, 1, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,136, 1, 0, 0, 0, 0, 35, 0, +136, 1, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,109, 2, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,110, 2, 0, 0,111, 2, 0, 0, + 0, 0, 35, 0,109, 2, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,135, 1, 0, 0,139, 1, 0, 0, 0, 0, 35, 0,135, 1, 0, 0, +111, 2, 0, 0, 0, 0, 35, 0,139, 1, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,138, 1, 0, 0,110, 2, 0, 0, 0, 0, 35, 0, +137, 1, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,137, 1, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 20, 1, 0, 0,112, 2, 0, 0, + 0, 0, 35, 0, 20, 1, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0, 24, 1, 0, 0,112, 2, 0, 0, 0, 0, 35, 0,112, 2, 0, 0, +113, 2, 0, 0, 0, 0, 35, 0,113, 2, 0, 0,114, 2, 0, 0, 0, 0, 35, 0,112, 2, 0, 0,114, 2, 0, 0, 0, 0, 35, 0, + 21, 1, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 21, 1, 0, 0,114, 2, 0, 0, 0, 0, 35, 0,138, 1, 0, 0,114, 2, 0, 0, + 0, 0, 35, 0,139, 1, 0, 0,113, 2, 0, 0, 0, 0, 35, 0, 25, 1, 0, 0,113, 2, 0, 0, 0, 0, 35, 0, 25, 1, 0, 0, +139, 1, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0,115, 2, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0,137, 1, 0, 0, 0, 0, 35, 0, +137, 1, 0, 0,115, 2, 0, 0, 0, 0, 35, 0,115, 2, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,116, 2, 0, 0,117, 2, 0, 0, + 0, 0, 35, 0,115, 2, 0, 0,117, 2, 0, 0, 0, 0, 35, 0,254, 0, 0, 0, 18, 1, 0, 0, 0, 0, 35, 0, 18, 1, 0, 0, +117, 2, 0, 0, 0, 0, 35, 0,254, 0, 0, 0,117, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,116, 2, 0, 0, 0, 0, 35, 0, +136, 1, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,136, 1, 0, 0, 0, 0, 35, 0,141, 1, 0, 0,118, 2, 0, 0, + 0, 0, 35, 0, 7, 1, 0, 0,141, 1, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0,118, 2, 0, 0, 0, 0, 35, 0,118, 2, 0, 0, +119, 2, 0, 0, 0, 0, 35, 0,119, 2, 0, 0,120, 2, 0, 0, 0, 0, 35, 0,118, 2, 0, 0,120, 2, 0, 0, 0, 0, 35, 0, + 5, 1, 0, 0,140, 1, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,120, 2, 0, 0, 0, 0, 35, 0, 5, 1, 0, 0,120, 2, 0, 0, + 0, 0, 35, 0, 4, 1, 0, 0,119, 2, 0, 0, 0, 0, 35, 0, 6, 1, 0, 0,119, 2, 0, 0, 0, 0, 35, 0, 4, 1, 0, 0, + 6, 1, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,142, 1, 0, 0, 0, 0, 35, 0, +142, 1, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,121, 2, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,122, 2, 0, 0,123, 2, 0, 0, + 0, 0, 35, 0,121, 2, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,141, 1, 0, 0,144, 1, 0, 0, 0, 0, 35, 0,141, 1, 0, 0, +123, 2, 0, 0, 0, 0, 35, 0,144, 1, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,145, 1, 0, 0,122, 2, 0, 0, 0, 0, 35, 0, +143, 1, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,143, 1, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 24, 1, 0, 0,124, 2, 0, 0, + 0, 0, 35, 0, 8, 1, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0,124, 2, 0, 0, 0, 0, 35, 0,124, 2, 0, 0, +125, 2, 0, 0, 0, 0, 35, 0,125, 2, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,124, 2, 0, 0,126, 2, 0, 0, 0, 0, 35, 0, + 25, 1, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 25, 1, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,145, 1, 0, 0,126, 2, 0, 0, + 0, 0, 35, 0,144, 1, 0, 0,125, 2, 0, 0, 0, 0, 35, 0, 9, 1, 0, 0,125, 2, 0, 0, 0, 0, 35, 0, 9, 1, 0, 0, +144, 1, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,127, 2, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,143, 1, 0, 0, 0, 0, 35, 0, +143, 1, 0, 0,127, 2, 0, 0, 0, 0, 35, 0,127, 2, 0, 0,128, 2, 0, 0, 0, 0, 35, 0,128, 2, 0, 0,129, 2, 0, 0, + 0, 0, 35, 0,127, 2, 0, 0,129, 2, 0, 0, 0, 0, 35, 0, 2, 1, 0, 0, 22, 1, 0, 0, 0, 0, 35, 0, 22, 1, 0, 0, +129, 2, 0, 0, 0, 0, 35, 0, 2, 1, 0, 0,129, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,128, 2, 0, 0, 0, 0, 35, 0, +142, 1, 0, 0,128, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,142, 1, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0, +192, 16,185, 3, 58, 1, 0, 0, 5, 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, 72, 18,185, 3, 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, 0, 0, 0, 0, 85, 86, 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,120,118,185, 3, 6, 0, 0, 0, 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, 67,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,168, 82,186, 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, + 68, 65, 84, 65, 0,100, 0, 0, 72, 18,185, 3, 54, 0, 0, 0, 0, 5, 0, 0, 27, 1, 0, 0,102, 0, 0, 0,146, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,146, 1, 0, 0,171, 0, 0, 0, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 0, 0, 0, + 27, 1, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,171, 0, 0, 0,146, 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,147, 1, 0, 0, 46, 0, 0, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,146, 1, 0, 0,148, 1, 0, 0, +147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 0, 0, 0,147, 1, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +148, 1, 0, 0,146, 1, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 1, 0, 0, 12, 0, 0, 0,165, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,165, 0, 0, 0,148, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 0, 0, 0, + 26, 1, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 1, 0, 0,165, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,147, 1, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,164, 0, 0, 0,170, 0, 0, 0, +147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 0, 0, 0,147, 1, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +170, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 1, 0, 0,102, 0, 0, 0,149, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,149, 1, 0, 0, 28, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 0, 0, 0, + 26, 1, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 1, 0, 0,149, 1, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,150, 1, 0, 0,103, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 1, 0, 0,151, 1, 0, 0, +150, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 0, 0, 0,150, 1, 0, 0,151, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +151, 1, 0, 0,149, 1, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 1, 0, 0, 14, 0, 0, 0, 31, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 31, 1, 0, 0,151, 1, 0, 0, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 0, 0, 0, + 27, 1, 0, 0,151, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 1, 0, 0, 31, 1, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,150, 1, 0, 0,104, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 1, 0, 0, 29, 1, 0, 0, +150, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 0, 0, 0,150, 1, 0, 0, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 29, 1, 0, 0, 30, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 0, 0, 0, 45, 0, 0, 0,152, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,152, 1, 0, 0,172, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, +168, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,172, 0, 0, 0,152, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,153, 1, 0, 0, 47, 0, 0, 0,152, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 1, 0, 0,154, 1, 0, 0, +153, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 0, 0, 0,153, 1, 0, 0,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +154, 1, 0, 0,152, 1, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,169, 0, 0, 0, 13, 0, 0, 0, 30, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 30, 1, 0, 0,154, 1, 0, 0,169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 0, 0, 0, +169, 0, 0, 0,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 1, 0, 0, 30, 1, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,153, 1, 0, 0,104, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 1, 0, 0,173, 0, 0, 0, +153, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0,153, 1, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +173, 0, 0, 0, 31, 1, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 0, 0, 0, 44, 0, 0, 0,155, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,155, 1, 0, 0, 29, 1, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 0, 0, 0, +167, 0, 0, 0, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 1, 0, 0,155, 1, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,156, 1, 0, 0,103, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 1, 0, 0,157, 1, 0, 0, +156, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 0, 0, 0,156, 1, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +157, 1, 0, 0,155, 1, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,166, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,162, 0, 0, 0,157, 1, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 0, 0, 0, +166, 0, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 1, 0, 0,162, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,156, 1, 0, 0, 42, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,163, 0, 0, 0, 28, 1, 0, 0, +156, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 0, 0, 0,156, 1, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 28, 1, 0, 0,163, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 1, 0, 0,105, 0, 0, 0, 33, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 33, 1, 0, 0,179, 0, 0, 0,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 0, 0, 0, +158, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 0, 0, 0, 33, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,158, 1, 0, 0, 50, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 1, 0, 0,160, 1, 0, 0, +158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 0, 0, 0,158, 1, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +160, 1, 0, 0,159, 1, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 0, 0, 0, 12, 0, 0, 0, 32, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 32, 1, 0, 0,160, 1, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 0, 0, 0, +165, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 1, 0, 0, 32, 1, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,164, 0, 0, 0, 43, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 1, 0, 0,178, 0, 0, 0, +164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0,164, 0, 0, 0,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +178, 0, 0, 0,159, 1, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 1, 0, 0,105, 0, 0, 0, 32, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 32, 1, 0, 0, 34, 1, 0, 0,161, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 0, 0, 0, +161, 1, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 1, 0, 0, 32, 1, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,161, 1, 0, 0,106, 0, 0, 0,162, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 1, 0, 0,163, 1, 0, 0, +161, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 0, 0, 0,161, 1, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +163, 1, 0, 0,162, 1, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 1, 0, 0, 16, 0, 0, 0, 33, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 33, 1, 0, 0,163, 1, 0, 0, 37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 0, 0, 0, + 37, 1, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,163, 1, 0, 0, 33, 1, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 36, 1, 0, 0,107, 0, 0, 0,162, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 1, 0, 0, 35, 1, 0, 0, + 36, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 36, 1, 0, 0, 35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 35, 1, 0, 0,162, 1, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,164, 1, 0, 0, 49, 0, 0, 0,176, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,176, 0, 0, 0,180, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 0, 0, 0, +164, 1, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,180, 0, 0, 0,176, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,164, 1, 0, 0, 51, 0, 0, 0,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 1, 0, 0,166, 1, 0, 0, +164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 0, 0, 0,164, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +166, 1, 0, 0,165, 1, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 1, 0, 0, 15, 0, 0, 0,177, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,177, 0, 0, 0,166, 1, 0, 0, 36, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 0, 0, 0, + 36, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,166, 1, 0, 0,177, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 37, 1, 0, 0,107, 0, 0, 0,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 1, 0, 0,181, 0, 0, 0, + 37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0, 37, 1, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +181, 0, 0, 0,165, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 1, 0, 0, 48, 0, 0, 0,175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,175, 0, 0, 0, 35, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 0, 0, 0, +167, 1, 0, 0, 35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 1, 0, 0,175, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,167, 1, 0, 0,106, 0, 0, 0,168, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 1, 0, 0,169, 1, 0, 0, +167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0,167, 1, 0, 0,169, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +169, 1, 0, 0,168, 1, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 0, 0, 0, 0, 0, 0, 0,174, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,174, 0, 0, 0,169, 1, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 0, 0, 0, +162, 0, 0, 0,169, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,169, 1, 0, 0,174, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,163, 0, 0, 0, 42, 0, 0, 0,168, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 1, 0, 0, 34, 1, 0, 0, +163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 0, 0, 0,163, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 34, 1, 0, 0,168, 1, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 1, 0, 0,108, 0, 0, 0,170, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,170, 1, 0, 0,187, 0, 0, 0, 39, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 0, 0, 0, + 39, 1, 0, 0,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,187, 0, 0, 0,170, 1, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,171, 1, 0, 0, 54, 0, 0, 0,170, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,170, 1, 0, 0,172, 1, 0, 0, +171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 0, 0, 0,171, 1, 0, 0,172, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +172, 1, 0, 0,170, 1, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 1, 0, 0, 13, 0, 0, 0,169, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,169, 0, 0, 0,172, 1, 0, 0, 38, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 0, 0, 0, + 38, 1, 0, 0,172, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,172, 1, 0, 0,169, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,171, 1, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 0, 0, 0,186, 0, 0, 0, +171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 0, 0, 0,171, 1, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +186, 0, 0, 0,168, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 1, 0, 0,108, 0, 0, 0,173, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,173, 1, 0, 0, 40, 1, 0, 0, 38, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 0, 0, 0, + 38, 1, 0, 0, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 1, 0, 0,173, 1, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,174, 1, 0, 0,109, 0, 0, 0,173, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,173, 1, 0, 0,175, 1, 0, 0, +174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 0, 0, 0,174, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +175, 1, 0, 0,173, 1, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 1, 0, 0, 18, 0, 0, 0, 43, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 43, 1, 0, 0,175, 1, 0, 0, 39, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 0, 0, 0, + 39, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,175, 1, 0, 0, 43, 1, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,174, 1, 0, 0,110, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 1, 0, 0, 41, 1, 0, 0, +174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 0, 0, 0,174, 1, 0, 0, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 41, 1, 0, 0, 42, 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 0, 0, 0, 53, 0, 0, 0,176, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,176, 1, 0, 0,188, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, +184, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,188, 0, 0, 0,176, 1, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,177, 1, 0, 0, 55, 0, 0, 0,176, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,176, 1, 0, 0,178, 1, 0, 0, +177, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 0, 0, 0,177, 1, 0, 0,178, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +178, 1, 0, 0,176, 1, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,185, 0, 0, 0, 17, 0, 0, 0, 42, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 42, 1, 0, 0,178, 1, 0, 0,185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 0, 0, 0, +185, 0, 0, 0,178, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,178, 1, 0, 0, 42, 1, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,177, 1, 0, 0,110, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 1, 0, 0,189, 0, 0, 0, +177, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 0, 0, 0,177, 1, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +189, 0, 0, 0, 43, 1, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,183, 0, 0, 0, 52, 0, 0, 0,179, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,179, 1, 0, 0, 41, 1, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 0, 0, +183, 0, 0, 0, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 1, 0, 0,179, 1, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,180, 1, 0, 0,109, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 1, 0, 0,181, 1, 0, 0, +180, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 0, 0, 0,180, 1, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +181, 1, 0, 0,179, 1, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,182, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,166, 0, 0, 0,181, 1, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 0, 0, 0, +182, 0, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,181, 1, 0, 0,166, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,180, 1, 0, 0, 44, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 0, 0, 0, 40, 1, 0, 0, +180, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 0, 0, 0,180, 1, 0, 0, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 40, 1, 0, 0,167, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 1, 0, 0,111, 0, 0, 0,182, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,182, 1, 0, 0,195, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 0, 0, 0, + 45, 1, 0, 0,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,195, 0, 0, 0,182, 1, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,183, 1, 0, 0, 58, 0, 0, 0,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,182, 1, 0, 0,184, 1, 0, 0, +183, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 0, 0, 0,183, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +184, 1, 0, 0,182, 1, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 1, 0, 0, 17, 0, 0, 0,185, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,185, 0, 0, 0,184, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 0, 0, 0, + 44, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 1, 0, 0,185, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,183, 1, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 0, 0, 0,194, 0, 0, 0, +183, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 0, 0, 0,183, 1, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +194, 0, 0, 0,184, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 1, 0, 0,111, 0, 0, 0,185, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,185, 1, 0, 0, 46, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 0, 0, + 44, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 1, 0, 0,185, 1, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,186, 1, 0, 0,112, 0, 0, 0,185, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,185, 1, 0, 0,187, 1, 0, 0, +186, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 0, 0, 0,186, 1, 0, 0,187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +187, 1, 0, 0,185, 1, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 1, 0, 0, 20, 0, 0, 0, 49, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 49, 1, 0, 0,187, 1, 0, 0, 45, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 0, 0, 0, + 45, 1, 0, 0,187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,187, 1, 0, 0, 49, 1, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,186, 1, 0, 0,113, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 1, 0, 0, 47, 1, 0, 0, +186, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 0, 0, 0,186, 1, 0, 0, 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 47, 1, 0, 0, 48, 1, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,192, 0, 0, 0, 57, 0, 0, 0,188, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,188, 1, 0, 0,196, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, +192, 0, 0, 0,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,196, 0, 0, 0,188, 1, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,189, 1, 0, 0, 59, 0, 0, 0,188, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,188, 1, 0, 0,190, 1, 0, 0, +189, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 0, 0, 0,189, 1, 0, 0,190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +190, 1, 0, 0,188, 1, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,193, 0, 0, 0, 19, 0, 0, 0, 48, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 48, 1, 0, 0,190, 1, 0, 0,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 0, 0, 0, +193, 0, 0, 0,190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,190, 1, 0, 0, 48, 1, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,189, 1, 0, 0,113, 0, 0, 0, 49, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 1, 0, 0,197, 0, 0, 0, +189, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 0, 0, 0,189, 1, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +197, 0, 0, 0, 49, 1, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 0, 0, 0, 56, 0, 0, 0,191, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,191, 1, 0, 0, 47, 1, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 0, 0, 0, +191, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 1, 0, 0,191, 1, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,192, 1, 0, 0,112, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 1, 0, 0,193, 1, 0, 0, +192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 0, 0, 0,192, 1, 0, 0,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +193, 1, 0, 0,191, 1, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,190, 0, 0, 0, 0, 0, 0, 0,182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,182, 0, 0, 0,193, 1, 0, 0,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 56, 0, 0, 0, +190, 0, 0, 0,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,193, 1, 0, 0,182, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,192, 1, 0, 0, 52, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,183, 0, 0, 0, 46, 1, 0, 0, +192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 0, 0, 0,192, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 46, 1, 0, 0,183, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 1, 0, 0,114, 0, 0, 0,194, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,194, 1, 0, 0,199, 0, 0, 0, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 0, 0, 0, + 51, 1, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,199, 0, 0, 0,194, 1, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,195, 1, 0, 0, 60, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,194, 1, 0, 0,196, 1, 0, 0, +195, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 0, 0, 0,195, 1, 0, 0,196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +196, 1, 0, 0,194, 1, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 1, 0, 0, 19, 0, 0, 0,193, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,193, 0, 0, 0,196, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 0, 0, 0, + 50, 1, 0, 0,196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,196, 1, 0, 0,193, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,195, 1, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,192, 0, 0, 0,198, 0, 0, 0, +195, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 0, 0, 0,195, 1, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +198, 0, 0, 0,192, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 1, 0, 0,114, 0, 0, 0,197, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,197, 1, 0, 0, 53, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 0, 0, 0, + 50, 1, 0, 0, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 1, 0, 0,197, 1, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,198, 1, 0, 0,115, 0, 0, 0,197, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,197, 1, 0, 0,199, 1, 0, 0, +198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 0, 0, 0,198, 1, 0, 0,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +199, 1, 0, 0,197, 1, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 1, 0, 0, 21, 0, 0, 0, 55, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 55, 1, 0, 0,199, 1, 0, 0, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 0, 0, 0, + 51, 1, 0, 0,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,199, 1, 0, 0, 55, 1, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,198, 1, 0, 0,116, 0, 0, 0, 54, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 1, 0, 0, 52, 1, 0, 0, +198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 0, 0, 0,198, 1, 0, 0, 52, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 52, 1, 0, 0, 54, 1, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,176, 0, 0, 0, 49, 0, 0, 0,200, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,200, 1, 0, 0,200, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, +176, 0, 0, 0,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,200, 0, 0, 0,200, 1, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,201, 1, 0, 0, 61, 0, 0, 0,200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,200, 1, 0, 0,202, 1, 0, 0, +201, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 0, 0, 0,201, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +202, 1, 0, 0,200, 1, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,177, 0, 0, 0, 15, 0, 0, 0, 54, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 54, 1, 0, 0,202, 1, 0, 0,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 0, 0, 0, +177, 0, 0, 0,202, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,202, 1, 0, 0, 54, 1, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,201, 1, 0, 0,116, 0, 0, 0, 55, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 1, 0, 0,201, 0, 0, 0, +201, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 0, 0, 0,201, 1, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +201, 0, 0, 0, 55, 1, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,175, 0, 0, 0, 48, 0, 0, 0,203, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,203, 1, 0, 0, 52, 1, 0, 0,175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, +175, 0, 0, 0, 52, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 1, 0, 0,203, 1, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,204, 1, 0, 0,115, 0, 0, 0,203, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,203, 1, 0, 0,205, 1, 0, 0, +204, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 56, 0, 0, 0,204, 1, 0, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +205, 1, 0, 0,203, 1, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,174, 0, 0, 0, 0, 0, 0, 0,190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,190, 0, 0, 0,205, 1, 0, 0,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0, +174, 0, 0, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,205, 1, 0, 0,190, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,204, 1, 0, 0, 56, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 0, 0, 0, 53, 1, 0, 0, +204, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 0, 0, 0,204, 1, 0, 0, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 53, 1, 0, 0,191, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,206, 1, 0, 0,117, 0, 0, 0, 57, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 57, 1, 0, 0,207, 0, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0, +206, 1, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 0, 0, 0, 57, 1, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,206, 1, 0, 0, 64, 0, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 1, 0, 0,208, 1, 0, 0, +206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,117, 0, 0, 0,206, 1, 0, 0,208, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +208, 1, 0, 0,207, 1, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 0, 0, 0, 16, 0, 0, 0, 56, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 56, 1, 0, 0,208, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 0, 0, 0, +179, 0, 0, 0,208, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 1, 0, 0, 56, 1, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,178, 0, 0, 0, 50, 0, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 1, 0, 0,206, 0, 0, 0, +178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0,178, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +206, 0, 0, 0,207, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,209, 1, 0, 0,117, 0, 0, 0, 56, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 56, 1, 0, 0, 58, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 0, 0, 0, +209, 1, 0, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 1, 0, 0, 56, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,209, 1, 0, 0,118, 0, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 1, 0, 0,211, 1, 0, 0, +209, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,117, 0, 0, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +211, 1, 0, 0,210, 1, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 1, 0, 0, 23, 0, 0, 0, 57, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 57, 1, 0, 0,211, 1, 0, 0, 61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 0, 0, 0, + 61, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 1, 0, 0, 57, 1, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 60, 1, 0, 0,119, 0, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 1, 0, 0, 59, 1, 0, 0, + 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 0, 0, 0, 60, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 59, 1, 0, 0,210, 1, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 1, 0, 0, 63, 0, 0, 0,204, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,204, 0, 0, 0,208, 0, 0, 0,212, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 0, 0, 0, +212, 1, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 0, 0, 0,204, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,212, 1, 0, 0, 65, 0, 0, 0,213, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 1, 0, 0,214, 1, 0, 0, +212, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 0, 0, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +214, 1, 0, 0,213, 1, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 1, 0, 0, 22, 0, 0, 0,205, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,205, 0, 0, 0,214, 1, 0, 0, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 0, 0, 0, + 60, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,214, 1, 0, 0,205, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 61, 1, 0, 0,119, 0, 0, 0,213, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 1, 0, 0,209, 0, 0, 0, + 61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 0, 0, 0, 61, 1, 0, 0,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +209, 0, 0, 0,213, 1, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 1, 0, 0, 62, 0, 0, 0,203, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,203, 0, 0, 0, 59, 1, 0, 0,215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 0, 0, 0, +215, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 1, 0, 0,203, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,215, 1, 0, 0,118, 0, 0, 0,216, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 1, 0, 0,217, 1, 0, 0, +215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 62, 0, 0, 0,215, 1, 0, 0,217, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +217, 1, 0, 0,216, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,180, 0, 0, 0, 5, 0, 0, 0,202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,202, 0, 0, 0,217, 1, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 0, 0, 0, +180, 0, 0, 0,217, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,217, 1, 0, 0,202, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,181, 0, 0, 0, 51, 0, 0, 0,216, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 1, 0, 0, 58, 1, 0, 0, +181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0,181, 0, 0, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 58, 1, 0, 0,216, 1, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,218, 1, 0, 0,120, 0, 0, 0, 63, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 63, 1, 0, 0,215, 0, 0, 0,218, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 68, 0, 0, 0, +218, 1, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 0, 0, 0, 63, 1, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,218, 1, 0, 0, 68, 0, 0, 0,219, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 1, 0, 0,220, 1, 0, 0, +218, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 0, 0, 0,218, 1, 0, 0,220, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +220, 1, 0, 0,219, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,173, 0, 0, 0, 14, 0, 0, 0, 62, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 62, 1, 0, 0,220, 1, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0, +173, 0, 0, 0,220, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,220, 1, 0, 0, 62, 1, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,172, 0, 0, 0, 47, 0, 0, 0,219, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 1, 0, 0,214, 0, 0, 0, +172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0,172, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +214, 0, 0, 0,219, 1, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,221, 1, 0, 0,120, 0, 0, 0, 62, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 62, 1, 0, 0, 64, 1, 0, 0,221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 0, 0, 0, +221, 1, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 1, 0, 0, 62, 1, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,221, 1, 0, 0,121, 0, 0, 0,222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,222, 1, 0, 0,223, 1, 0, 0, +221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 0, 0, 0,221, 1, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +223, 1, 0, 0,222, 1, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 1, 0, 0, 25, 0, 0, 0, 63, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 63, 1, 0, 0,223, 1, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 0, 0, 0, + 67, 1, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 1, 0, 0, 63, 1, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 66, 1, 0, 0,122, 0, 0, 0,222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,222, 1, 0, 0, 65, 1, 0, 0, + 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 0, 0, 0, 66, 1, 0, 0, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 65, 1, 0, 0,222, 1, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 1, 0, 0, 67, 0, 0, 0,212, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,212, 0, 0, 0,216, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 0, 0, 0, +224, 1, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 0, 0, 0,212, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,224, 1, 0, 0, 69, 0, 0, 0,225, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,225, 1, 0, 0,226, 1, 0, 0, +224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 0, 0, 0,224, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +226, 1, 0, 0,225, 1, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 1, 0, 0, 24, 0, 0, 0,213, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,213, 0, 0, 0,226, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 0, 0, 0, + 66, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,226, 1, 0, 0,213, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 67, 1, 0, 0,122, 0, 0, 0,225, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,225, 1, 0, 0,217, 0, 0, 0, + 67, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 0, 0, 0, 67, 1, 0, 0,217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +217, 0, 0, 0,225, 1, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,227, 1, 0, 0, 66, 0, 0, 0,211, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,211, 0, 0, 0, 65, 1, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 0, 0, 0, +227, 1, 0, 0, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 1, 0, 0,211, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,227, 1, 0, 0,121, 0, 0, 0,228, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 1, 0, 0,229, 1, 0, 0, +227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 0, 0, 0,227, 1, 0, 0,229, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +229, 1, 0, 0,228, 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,170, 0, 0, 0, 1, 0, 0, 0,210, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 0,229, 1, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 0, 0, 0, +170, 0, 0, 0,229, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,229, 1, 0, 0,210, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,171, 0, 0, 0, 46, 0, 0, 0,228, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 1, 0, 0, 64, 1, 0, 0, +171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 0, 0, 0,171, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 64, 1, 0, 0,228, 1, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,230, 1, 0, 0,123, 0, 0, 0, 69, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 69, 1, 0, 0,223, 0, 0, 0,230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 0, 0, 0, +230, 1, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 0, 0, 0, 69, 1, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,230, 1, 0, 0, 72, 0, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 1, 0, 0,232, 1, 0, 0, +230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,123, 0, 0, 0,230, 1, 0, 0,232, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +232, 1, 0, 0,231, 1, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,189, 0, 0, 0, 18, 0, 0, 0, 68, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 68, 1, 0, 0,232, 1, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 0, 0, 0, +189, 0, 0, 0,232, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 1, 0, 0, 68, 1, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,188, 0, 0, 0, 55, 0, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 1, 0, 0,222, 0, 0, 0, +188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,188, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +222, 0, 0, 0,231, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,233, 1, 0, 0,123, 0, 0, 0, 68, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 68, 1, 0, 0, 70, 1, 0, 0,233, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 0, 0, 0, +233, 1, 0, 0, 70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,233, 1, 0, 0,124, 0, 0, 0,234, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 1, 0, 0,235, 1, 0, 0, +233, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,123, 0, 0, 0,233, 1, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +235, 1, 0, 0,234, 1, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 1, 0, 0, 27, 0, 0, 0, 69, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 69, 1, 0, 0,235, 1, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 0, 0, 0, + 73, 1, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,235, 1, 0, 0, 69, 1, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 72, 1, 0, 0,125, 0, 0, 0,234, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 1, 0, 0, 71, 1, 0, 0, + 72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, 72, 1, 0, 0, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 71, 1, 0, 0,234, 1, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,236, 1, 0, 0, 71, 0, 0, 0,220, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,220, 0, 0, 0,224, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 0, 0, 0, +236, 1, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 0, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,236, 1, 0, 0, 73, 0, 0, 0,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 1, 0, 0,238, 1, 0, 0, +236, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 0, 0, 0,236, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +238, 1, 0, 0,237, 1, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 1, 0, 0, 26, 0, 0, 0,221, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,221, 0, 0, 0,238, 1, 0, 0, 72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 0, 0, 0, + 72, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,238, 1, 0, 0,221, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 73, 1, 0, 0,125, 0, 0, 0,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 1, 0, 0,225, 0, 0, 0, + 73, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 0, 0, 0, 73, 1, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +225, 0, 0, 0,237, 1, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 1, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,219, 0, 0, 0, 71, 1, 0, 0,239, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 0, 0, 0, +239, 1, 0, 0, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 1, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,239, 1, 0, 0,124, 0, 0, 0,240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 1, 0, 0,241, 1, 0, 0, +239, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 0, 0, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +241, 1, 0, 0,240, 1, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,186, 0, 0, 0, 2, 0, 0, 0,218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,218, 0, 0, 0,241, 1, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 0, 0, 0, +186, 0, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,241, 1, 0, 0,218, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,187, 0, 0, 0, 54, 0, 0, 0,240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 1, 0, 0, 70, 1, 0, 0, +187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 0, 0, 0,187, 0, 0, 0, 70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 70, 1, 0, 0,240, 1, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,242, 1, 0, 0,126, 0, 0, 0, 75, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 75, 1, 0, 0,231, 0, 0, 0,242, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 0, 0, 0, +242, 1, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 0, 0, 0, 75, 1, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,242, 1, 0, 0, 76, 0, 0, 0,243, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 1, 0, 0,244, 1, 0, 0, +242, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 0, 0, 0,242, 1, 0, 0,244, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +244, 1, 0, 0,243, 1, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,197, 0, 0, 0, 20, 0, 0, 0, 74, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 74, 1, 0, 0,244, 1, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 0, 0, 0, +197, 0, 0, 0,244, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 1, 0, 0, 74, 1, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,196, 0, 0, 0, 59, 0, 0, 0,243, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 1, 0, 0,230, 0, 0, 0, +196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0,196, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +230, 0, 0, 0,243, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,245, 1, 0, 0,126, 0, 0, 0, 74, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 74, 1, 0, 0, 76, 1, 0, 0,245, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 0, 0, 0, +245, 1, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 1, 0, 0, 74, 1, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,245, 1, 0, 0,127, 0, 0, 0,246, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 1, 0, 0,247, 1, 0, 0, +245, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 0, 0, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +247, 1, 0, 0,246, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 1, 0, 0, 29, 0, 0, 0, 75, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 75, 1, 0, 0,247, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 0, 0, 0, + 79, 1, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,247, 1, 0, 0, 75, 1, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 78, 1, 0, 0,128, 0, 0, 0,246, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 1, 0, 0, 77, 1, 0, 0, + 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 0, 0, 0, 78, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 77, 1, 0, 0,246, 1, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,248, 1, 0, 0, 75, 0, 0, 0,228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,228, 0, 0, 0,232, 0, 0, 0,248, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 0, 0, 0, +248, 1, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 0,228, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,248, 1, 0, 0, 77, 0, 0, 0,249, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 1, 0, 0,250, 1, 0, 0, +248, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 0, 0, 0,248, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +250, 1, 0, 0,249, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 1, 0, 0, 28, 0, 0, 0,229, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,229, 0, 0, 0,250, 1, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 0, 0, 0, + 78, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 1, 0, 0,229, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 79, 1, 0, 0,128, 0, 0, 0,249, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 1, 0, 0,233, 0, 0, 0, + 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 0, 0, 0, 79, 1, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +233, 0, 0, 0,249, 1, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,251, 1, 0, 0, 74, 0, 0, 0,227, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,227, 0, 0, 0, 77, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 0, 0, 0, +251, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 1, 0, 0,227, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,251, 1, 0, 0,127, 0, 0, 0,252, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 1, 0, 0,253, 1, 0, 0, +251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 0, 0, 0,251, 1, 0, 0,253, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +253, 1, 0, 0,252, 1, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,194, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,226, 0, 0, 0,253, 1, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 0, 0, 0, +194, 0, 0, 0,253, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 1, 0, 0,226, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,195, 0, 0, 0, 58, 0, 0, 0,252, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 1, 0, 0, 76, 1, 0, 0, +195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 0, 0, 0,195, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 76, 1, 0, 0,252, 1, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,254, 1, 0, 0,129, 0, 0, 0, 81, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 81, 1, 0, 0,239, 0, 0, 0,254, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0, +254, 1, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 0, 0, 0, 81, 1, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,254, 1, 0, 0, 80, 0, 0, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 1, 0, 0, 0, 2, 0, 0, +254, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,129, 0, 0, 0,254, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 0, 2, 0, 0,255, 1, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,201, 0, 0, 0, 21, 0, 0, 0, 80, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 80, 1, 0, 0, 0, 2, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 0, 0, 0, +201, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 80, 1, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,200, 0, 0, 0, 61, 0, 0, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 1, 0, 0,238, 0, 0, 0, +200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0,200, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +238, 0, 0, 0,255, 1, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 0, 0,129, 0, 0, 0, 80, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 80, 1, 0, 0, 82, 1, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 0, 0, 0, + 1, 2, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 1, 0, 0, 80, 1, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 1, 2, 0, 0,130, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 0, 0, 3, 2, 0, 0, + 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,129, 0, 0, 0, 1, 2, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 3, 2, 0, 0, 2, 2, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 1, 0, 0, 31, 0, 0, 0, 81, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 81, 1, 0, 0, 3, 2, 0, 0, 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 0, 0, 0, + 85, 1, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 0, 0, 81, 1, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 84, 1, 0, 0,131, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 0, 0, 83, 1, 0, 0, + 84, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 0, 0, 0, 84, 1, 0, 0, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 83, 1, 0, 0, 2, 2, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 2, 0, 0, 79, 0, 0, 0,236, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,236, 0, 0, 0,240, 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 0, 0, 0, + 4, 2, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 0, 0,236, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, 2, 0, 0, 81, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 0, 0, 6, 2, 0, 0, + 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 0, 0, 0, 4, 2, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 6, 2, 0, 0, 5, 2, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 1, 0, 0, 30, 0, 0, 0,237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,237, 0, 0, 0, 6, 2, 0, 0, 84, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 0, 0, 0, + 84, 1, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 2, 0, 0,237, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 85, 1, 0, 0,131, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 0, 0,241, 0, 0, 0, + 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 0, 0, 0, 85, 1, 0, 0,241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +241, 0, 0, 0, 5, 2, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 2, 0, 0, 78, 0, 0, 0,235, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,235, 0, 0, 0, 83, 1, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 0, 0, 0, + 7, 2, 0, 0, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 1, 0, 0,235, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 7, 2, 0, 0,130, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 2, 0, 0, 9, 2, 0, 0, + 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 0, 0, 0, 7, 2, 0, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 9, 2, 0, 0, 8, 2, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,198, 0, 0, 0, 4, 0, 0, 0,234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,234, 0, 0, 0, 9, 2, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 0, 0, 0, +198, 0, 0, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 2, 0, 0,234, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,199, 0, 0, 0, 60, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 2, 0, 0, 82, 1, 0, 0, +199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 0, 0, 0,199, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 82, 1, 0, 0, 8, 2, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 1, 0, 0,132, 0, 0, 0, 10, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0,245, 0, 0, 0, 87, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0, + 87, 1, 0, 0,245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,245, 0, 0, 0, 10, 2, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 11, 2, 0, 0, 83, 0, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0, 12, 2, 0, 0, + 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 0, 0, 0, 11, 2, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 12, 2, 0, 0, 10, 2, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 1, 0, 0, 23, 0, 0, 0,209, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,209, 0, 0, 0, 12, 2, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 0, 0, 0, + 86, 1, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 2, 0, 0,209, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 11, 2, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 0, 0, 0,244, 0, 0, 0, + 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 0, 0, 0, 11, 2, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +244, 0, 0, 0,208, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 1, 0, 0,132, 0, 0, 0, 13, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 13, 2, 0, 0, 88, 1, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 0, 0, 0, + 86, 1, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 1, 0, 0, 13, 2, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 14, 2, 0, 0,133, 0, 0, 0, 13, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 2, 0, 0, 15, 2, 0, 0, + 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,134, 0, 0, 0, 14, 2, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 15, 2, 0, 0, 13, 2, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 1, 0, 0, 32, 0, 0, 0, 91, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 91, 1, 0, 0, 15, 2, 0, 0, 87, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 0, 0, 0, + 87, 1, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 2, 0, 0, 91, 1, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 14, 2, 0, 0,134, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 1, 0, 0, 89, 1, 0, 0, + 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,133, 0, 0, 0, 14, 2, 0, 0, 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 89, 1, 0, 0, 90, 1, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 0, 0, 0, 67, 0, 0, 0, 16, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 16, 2, 0, 0,242, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, +212, 0, 0, 0,242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,242, 0, 0, 0, 16, 2, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 17, 2, 0, 0, 82, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 2, 0, 0, 18, 2, 0, 0, + 17, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,134, 0, 0, 0, 17, 2, 0, 0, 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 18, 2, 0, 0, 16, 2, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 0, 0, 0, 24, 0, 0, 0, 90, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 90, 1, 0, 0, 18, 2, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 0, 0, 0, +213, 0, 0, 0, 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 2, 0, 0, 90, 1, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 17, 2, 0, 0,134, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 1, 0, 0,243, 0, 0, 0, + 17, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 0, 0, 0, 17, 2, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +243, 0, 0, 0, 91, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 0, 0, 0, 66, 0, 0, 0, 19, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 19, 2, 0, 0, 89, 1, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 0, 0, 0, +211, 0, 0, 0, 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 1, 0, 0, 19, 2, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 20, 2, 0, 0,133, 0, 0, 0, 19, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 2, 0, 0, 21, 2, 0, 0, + 20, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0, 20, 2, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 21, 2, 0, 0, 19, 2, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 0, 1, 0, 0, 0,206, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,206, 0, 0, 0, 21, 2, 0, 0,210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 0, 0, 0, +210, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 2, 0, 0,206, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 20, 2, 0, 0, 64, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 0, 0, 0, 88, 1, 0, 0, + 20, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,133, 0, 0, 0, 20, 2, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 88, 1, 0, 0,207, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 1, 0, 0,135, 0, 0, 0, 22, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 22, 2, 0, 0,247, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 0, 0, 0, + 93, 1, 0, 0,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,247, 0, 0, 0, 22, 2, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 23, 2, 0, 0, 84, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 2, 0, 0, 24, 2, 0, 0, + 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 0, 0, 0, 23, 2, 0, 0, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 24, 2, 0, 0, 22, 2, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 1, 0, 0, 25, 0, 0, 0,217, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,217, 0, 0, 0, 24, 2, 0, 0, 92, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,135, 0, 0, 0, + 92, 1, 0, 0, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 2, 0, 0,217, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 23, 2, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 0, 0, 0,246, 0, 0, 0, + 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 0, 0, 0, 23, 2, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +246, 0, 0, 0,216, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 1, 0, 0,135, 0, 0, 0, 25, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 25, 2, 0, 0, 94, 1, 0, 0, 92, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 0, 0, 0, + 92, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 1, 0, 0, 25, 2, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 26, 2, 0, 0,136, 0, 0, 0, 25, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 2, 0, 0, 27, 2, 0, 0, + 26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,137, 0, 0, 0, 26, 2, 0, 0, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 27, 2, 0, 0, 25, 2, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 1, 0, 0, 33, 0, 0, 0, 97, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 97, 1, 0, 0, 27, 2, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,135, 0, 0, 0, + 93, 1, 0, 0, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 2, 0, 0, 97, 1, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 26, 2, 0, 0,137, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 1, 0, 0, 95, 1, 0, 0, + 26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,136, 0, 0, 0, 26, 2, 0, 0, 95, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 95, 1, 0, 0, 96, 1, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,220, 0, 0, 0, 71, 0, 0, 0, 28, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 28, 2, 0, 0,248, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 0, 0, 0, +220, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,248, 0, 0, 0, 28, 2, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 29, 2, 0, 0, 85, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 2, 0, 0, 30, 2, 0, 0, + 29, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,137, 0, 0, 0, 29, 2, 0, 0, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 30, 2, 0, 0, 28, 2, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,221, 0, 0, 0, 26, 0, 0, 0, 96, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 96, 1, 0, 0, 30, 2, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 0, 0, 0, +221, 0, 0, 0, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 2, 0, 0, 96, 1, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 29, 2, 0, 0,137, 0, 0, 0, 97, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 1, 0, 0,249, 0, 0, 0, + 29, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 0, 0, 0, 29, 2, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +249, 0, 0, 0, 97, 1, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 0, 0, 0, 70, 0, 0, 0, 31, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 31, 2, 0, 0, 95, 1, 0, 0,219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, +219, 0, 0, 0, 95, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 1, 0, 0, 31, 2, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 32, 2, 0, 0,136, 0, 0, 0, 31, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 2, 0, 0, 33, 2, 0, 0, + 32, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 68, 0, 0, 0, 32, 2, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 33, 2, 0, 0, 31, 2, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,218, 0, 0, 0, 2, 0, 0, 0,214, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,214, 0, 0, 0, 33, 2, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 0, 0, 0, +218, 0, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 2, 0, 0,214, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 32, 2, 0, 0, 68, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 0, 0, 0, 94, 1, 0, 0, + 32, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,136, 0, 0, 0, 32, 2, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 94, 1, 0, 0,215, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 1, 0, 0,138, 0, 0, 0, 34, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 34, 2, 0, 0,251, 0, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 0, 0, 0, + 99, 1, 0, 0,251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,251, 0, 0, 0, 34, 2, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 35, 2, 0, 0, 86, 0, 0, 0, 34, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 2, 0, 0, 36, 2, 0, 0, + 35, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 0, 0, 0, 35, 2, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 36, 2, 0, 0, 34, 2, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 1, 0, 0, 27, 0, 0, 0,225, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,225, 0, 0, 0, 36, 2, 0, 0, 98, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 0, 0, 0, + 98, 1, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 2, 0, 0,225, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 35, 2, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 0, 0, 0,250, 0, 0, 0, + 35, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 0, 0, 0, 35, 2, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +250, 0, 0, 0,224, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 1, 0, 0,138, 0, 0, 0, 37, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 37, 2, 0, 0,100, 1, 0, 0, 98, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 0, 0, 0, + 98, 1, 0, 0,100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 1, 0, 0, 37, 2, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 38, 2, 0, 0,139, 0, 0, 0, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 2, 0, 0, 39, 2, 0, 0, + 38, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,140, 0, 0, 0, 38, 2, 0, 0, 39, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 39, 2, 0, 0, 37, 2, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 1, 0, 0, 34, 0, 0, 0,103, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,103, 1, 0, 0, 39, 2, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 0, 0, 0, + 99, 1, 0, 0, 39, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 2, 0, 0,103, 1, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 38, 2, 0, 0,140, 0, 0, 0,102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 1, 0, 0,101, 1, 0, 0, + 38, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,139, 0, 0, 0, 38, 2, 0, 0,101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +101, 1, 0, 0,102, 1, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 0, 0, 0, 75, 0, 0, 0, 40, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 40, 2, 0, 0,252, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0, +228, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 0, 0, 0, 40, 2, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 41, 2, 0, 0, 87, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 2, 0, 0, 42, 2, 0, 0, + 41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,140, 0, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 42, 2, 0, 0, 40, 2, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,229, 0, 0, 0, 28, 0, 0, 0,102, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,102, 1, 0, 0, 42, 2, 0, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 0, 0, 0, +229, 0, 0, 0, 42, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 2, 0, 0,102, 1, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 41, 2, 0, 0,140, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 1, 0, 0,253, 0, 0, 0, + 41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 0, 0, 0, 41, 2, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +253, 0, 0, 0,103, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,227, 0, 0, 0, 74, 0, 0, 0, 43, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 43, 2, 0, 0,101, 1, 0, 0,227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 0, 0, 0, +227, 0, 0, 0,101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 1, 0, 0, 43, 2, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 44, 2, 0, 0,139, 0, 0, 0, 43, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 2, 0, 0, 45, 2, 0, 0, + 44, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 0, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 45, 2, 0, 0, 43, 2, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,226, 0, 0, 0, 3, 0, 0, 0,222, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,222, 0, 0, 0, 45, 2, 0, 0,226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 0, 0, 0, +226, 0, 0, 0, 45, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 2, 0, 0,222, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 44, 2, 0, 0, 72, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 0, 0, 0,100, 1, 0, 0, + 44, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,139, 0, 0, 0, 44, 2, 0, 0,100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +100, 1, 0, 0,223, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 1, 0, 0,141, 0, 0, 0, 46, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 46, 2, 0, 0,255, 0, 0, 0,105, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 0, 0, 0, +105, 1, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 0, 0, 0, 46, 2, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 47, 2, 0, 0, 88, 0, 0, 0, 46, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 2, 0, 0, 48, 2, 0, 0, + 47, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 0, 0, 0, 47, 2, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 48, 2, 0, 0, 46, 2, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 1, 0, 0, 29, 0, 0, 0,233, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,233, 0, 0, 0, 48, 2, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,141, 0, 0, 0, +104, 1, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 2, 0, 0,233, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 47, 2, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 0,254, 0, 0, 0, + 47, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 0, 0, 0, 47, 2, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +254, 0, 0, 0,232, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 1, 0, 0,141, 0, 0, 0, 49, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 49, 2, 0, 0,106, 1, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 0, 0, 0, +104, 1, 0, 0,106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 1, 0, 0, 49, 2, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 50, 2, 0, 0,142, 0, 0, 0, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 2, 0, 0, 51, 2, 0, 0, + 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,143, 0, 0, 0, 50, 2, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 51, 2, 0, 0, 49, 2, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 1, 0, 0, 35, 0, 0, 0,109, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,109, 1, 0, 0, 51, 2, 0, 0,105, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,141, 0, 0, 0, +105, 1, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 2, 0, 0,109, 1, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 50, 2, 0, 0,143, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 1, 0, 0,107, 1, 0, 0, + 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 0, 0, 0, 50, 2, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +107, 1, 0, 0,108, 1, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,236, 0, 0, 0, 79, 0, 0, 0, 52, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 52, 2, 0, 0, 0, 1, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0, +236, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 52, 2, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 53, 2, 0, 0, 89, 0, 0, 0, 52, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 2, 0, 0, 54, 2, 0, 0, + 53, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,143, 0, 0, 0, 53, 2, 0, 0, 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 54, 2, 0, 0, 52, 2, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 0, 0, 0, 30, 0, 0, 0,108, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,108, 1, 0, 0, 54, 2, 0, 0,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 0, 0, 0, +237, 0, 0, 0, 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 2, 0, 0,108, 1, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 53, 2, 0, 0,143, 0, 0, 0,109, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 1, 0, 0, 1, 1, 0, 0, + 53, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 0, 0, 0, 53, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 1, 1, 0, 0,109, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,235, 0, 0, 0, 78, 0, 0, 0, 55, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 55, 2, 0, 0,107, 1, 0, 0,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 0, 0, 0, +235, 0, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 1, 0, 0, 55, 2, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 56, 2, 0, 0,142, 0, 0, 0, 55, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 2, 0, 0, 57, 2, 0, 0, + 56, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 0, 0, 0, 56, 2, 0, 0, 57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 57, 2, 0, 0, 55, 2, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 0, 0, 0, 4, 0, 0, 0,230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,230, 0, 0, 0, 57, 2, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 0, 0, 0, +234, 0, 0, 0, 57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 2, 0, 0,230, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 56, 2, 0, 0, 76, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 0, 0, 0,106, 1, 0, 0, + 56, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 0, 0, 0, 56, 2, 0, 0,106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +106, 1, 0, 0,231, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 1, 0, 0,144, 0, 0, 0, 58, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 58, 2, 0, 0, 3, 1, 0, 0,111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 0, 0, 0, +111, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 58, 2, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 59, 2, 0, 0, 90, 0, 0, 0, 58, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 2, 0, 0, 60, 2, 0, 0, + 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 0, 0, 0, 59, 2, 0, 0, 60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 60, 2, 0, 0, 58, 2, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 1, 0, 0, 31, 0, 0, 0,241, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,241, 0, 0, 0, 60, 2, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 0, 0, 0, +110, 1, 0, 0, 60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 2, 0, 0,241, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 59, 2, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 0, 0, 2, 1, 0, 0, + 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 0, 0, 0, 59, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 2, 1, 0, 0,240, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 1, 0, 0,144, 0, 0, 0, 61, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 61, 2, 0, 0,113, 1, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 0, 0, 0, +110, 1, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 1, 0, 0, 61, 2, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 62, 2, 0, 0,145, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 2, 0, 0, 63, 2, 0, 0, + 62, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,146, 0, 0, 0, 62, 2, 0, 0, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 63, 2, 0, 0, 61, 2, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 1, 0, 0, 36, 0, 0, 0,115, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,115, 1, 0, 0, 63, 2, 0, 0,111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 0, 0, 0, +111, 1, 0, 0, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 2, 0, 0,115, 1, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 62, 2, 0, 0,146, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 1, 0, 0,112, 1, 0, 0, + 62, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,145, 0, 0, 0, 62, 2, 0, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +112, 1, 0, 0,114, 1, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,204, 0, 0, 0, 63, 0, 0, 0, 64, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 64, 2, 0, 0, 4, 1, 0, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 0, 0, 0, +204, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 1, 0, 0, 64, 2, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 65, 2, 0, 0, 91, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 2, 0, 0, 66, 2, 0, 0, + 65, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,146, 0, 0, 0, 65, 2, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 66, 2, 0, 0, 64, 2, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,205, 0, 0, 0, 22, 0, 0, 0,114, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,114, 1, 0, 0, 66, 2, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 0, 0, 0, +205, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 2, 0, 0,114, 1, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 65, 2, 0, 0,146, 0, 0, 0,115, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 1, 0, 0, 5, 1, 0, 0, + 65, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 0, 0, 0, 65, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 5, 1, 0, 0,115, 1, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,203, 0, 0, 0, 62, 0, 0, 0, 67, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 67, 2, 0, 0,112, 1, 0, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 0, 0, 0, +203, 0, 0, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 1, 0, 0, 67, 2, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 68, 2, 0, 0,145, 0, 0, 0, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 2, 0, 0, 69, 2, 0, 0, + 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0, 68, 2, 0, 0, 69, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 69, 2, 0, 0, 67, 2, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,202, 0, 0, 0, 5, 0, 0, 0,238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,238, 0, 0, 0, 69, 2, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 62, 0, 0, 0, +202, 0, 0, 0, 69, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 2, 0, 0,238, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 68, 2, 0, 0, 80, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 0, 0, 0,113, 1, 0, 0, + 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,145, 0, 0, 0, 68, 2, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +113, 1, 0, 0,239, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 2, 0, 0,147, 0, 0, 0,117, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,117, 1, 0, 0, 11, 1, 0, 0, 70, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 0, 0, 0, + 70, 2, 0, 0, 11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 1, 0, 0,117, 1, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 70, 2, 0, 0, 94, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 2, 0, 0, 72, 2, 0, 0, + 70, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,147, 0, 0, 0, 70, 2, 0, 0, 72, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 72, 2, 0, 0, 71, 2, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 0, 0, 0, 32, 0, 0, 0,116, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,116, 1, 0, 0, 72, 2, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 0, 0, 0, +243, 0, 0, 0, 72, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 2, 0, 0,116, 1, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,242, 0, 0, 0, 82, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 2, 0, 0, 10, 1, 0, 0, +242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0,242, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 10, 1, 0, 0, 71, 2, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 2, 0, 0,147, 0, 0, 0,116, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,116, 1, 0, 0,118, 1, 0, 0, 73, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 0, 0, 0, + 73, 2, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 1, 0, 0,116, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 73, 2, 0, 0,148, 0, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 2, 0, 0, 75, 2, 0, 0, + 73, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,147, 0, 0, 0, 73, 2, 0, 0, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 75, 2, 0, 0, 74, 2, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 1, 0, 0, 38, 0, 0, 0,117, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,117, 1, 0, 0, 75, 2, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 0, 0, 0, +121, 1, 0, 0, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 2, 0, 0,117, 1, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,120, 1, 0, 0,149, 0, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 2, 0, 0,119, 1, 0, 0, +120, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 0, 0, 0,120, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +119, 1, 0, 0, 74, 2, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 2, 0, 0, 93, 0, 0, 0, 8, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 8, 1, 0, 0, 12, 1, 0, 0, 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 0, 0, 0, + 76, 2, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 1, 0, 0, 8, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 76, 2, 0, 0, 95, 0, 0, 0, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 2, 0, 0, 78, 2, 0, 0, + 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 0, 0, 0, 76, 2, 0, 0, 78, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 78, 2, 0, 0, 77, 2, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 1, 0, 0, 37, 0, 0, 0, 9, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 9, 1, 0, 0, 78, 2, 0, 0,120, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 0, 0, 0, +120, 1, 0, 0, 78, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 2, 0, 0, 9, 1, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,121, 1, 0, 0,149, 0, 0, 0, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 2, 0, 0, 13, 1, 0, 0, +121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 0, 0, 0,121, 1, 0, 0, 13, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 13, 1, 0, 0, 77, 2, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 2, 0, 0, 92, 0, 0, 0, 7, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 7, 1, 0, 0,119, 1, 0, 0, 79, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 0, 0, 0, + 79, 2, 0, 0,119, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 1, 0, 0, 7, 1, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 79, 2, 0, 0,148, 0, 0, 0, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 2, 0, 0, 81, 2, 0, 0, + 79, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 0, 0, 0, 79, 2, 0, 0, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 81, 2, 0, 0, 80, 2, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 0, 0, 0, 10, 0, 0, 0, 6, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 6, 1, 0, 0, 81, 2, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 0, 0, 0, +244, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 2, 0, 0, 6, 1, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,245, 0, 0, 0, 83, 0, 0, 0, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 2, 0, 0,118, 1, 0, 0, +245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0,245, 0, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +118, 1, 0, 0, 80, 2, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 2, 0, 0,150, 0, 0, 0,123, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,123, 1, 0, 0, 15, 1, 0, 0, 82, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0, + 82, 2, 0, 0, 15, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 1, 0, 0,123, 1, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 82, 2, 0, 0, 96, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 2, 0, 0, 84, 2, 0, 0, + 82, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,150, 0, 0, 0, 82, 2, 0, 0, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 84, 2, 0, 0, 83, 2, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 0, 0, 0, 33, 0, 0, 0,122, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 84, 2, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 0, 0, 0, +249, 0, 0, 0, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 2, 0, 0,122, 1, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,248, 0, 0, 0, 85, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 2, 0, 0, 14, 1, 0, 0, +248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 0, 0, 0,248, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 14, 1, 0, 0, 83, 2, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 2, 0, 0,150, 0, 0, 0,122, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0,124, 1, 0, 0, 85, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 0, 0, 0, + 85, 2, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 1, 0, 0,122, 1, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 85, 2, 0, 0,151, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 2, 0, 0, 87, 2, 0, 0, + 85, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,150, 0, 0, 0, 85, 2, 0, 0, 87, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 87, 2, 0, 0, 86, 2, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 1, 0, 0, 39, 0, 0, 0,123, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,123, 1, 0, 0, 87, 2, 0, 0,127, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 0, 0, 0, +127, 1, 0, 0, 87, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 2, 0, 0,123, 1, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,126, 1, 0, 0,152, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 2, 0, 0,125, 1, 0, 0, +126, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 0, 0, 0,126, 1, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +125, 1, 0, 0, 86, 2, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 2, 0, 0, 95, 0, 0, 0, 12, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 12, 1, 0, 0, 16, 1, 0, 0, 88, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 0, 0, 0, + 88, 2, 0, 0, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 1, 0, 0, 12, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 88, 2, 0, 0, 97, 0, 0, 0, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 2, 0, 0, 90, 2, 0, 0, + 88, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 0, 0, 0, 88, 2, 0, 0, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 90, 2, 0, 0, 89, 2, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 1, 0, 0, 38, 0, 0, 0, 13, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 13, 1, 0, 0, 90, 2, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 0, 0, 0, +126, 1, 0, 0, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 2, 0, 0, 13, 1, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,127, 1, 0, 0,152, 0, 0, 0, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 2, 0, 0, 17, 1, 0, 0, +127, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 0, 0, 0,127, 1, 0, 0, 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 17, 1, 0, 0, 89, 2, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 2, 0, 0, 94, 0, 0, 0, 11, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 11, 1, 0, 0,125, 1, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 0, 0, 0, + 91, 2, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 1, 0, 0, 11, 1, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 91, 2, 0, 0,151, 0, 0, 0, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 2, 0, 0, 93, 2, 0, 0, + 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 0, 0, 0, 91, 2, 0, 0, 93, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 93, 2, 0, 0, 92, 2, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 0, 0, 0, 6, 0, 0, 0, 10, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 10, 1, 0, 0, 93, 2, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 0, 0, 0, +246, 0, 0, 0, 93, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 2, 0, 0, 10, 1, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,247, 0, 0, 0, 84, 0, 0, 0, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 2, 0, 0,124, 1, 0, 0, +247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 0, 0, 0,247, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +124, 1, 0, 0, 92, 2, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 2, 0, 0,153, 0, 0, 0,129, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,129, 1, 0, 0, 19, 1, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 0, 0, 0, + 94, 2, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 1, 0, 0,129, 1, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 94, 2, 0, 0, 98, 0, 0, 0, 95, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 2, 0, 0, 96, 2, 0, 0, + 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,153, 0, 0, 0, 94, 2, 0, 0, 96, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 96, 2, 0, 0, 95, 2, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 0, 0, 0, 34, 0, 0, 0,128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,128, 1, 0, 0, 96, 2, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 0, 0, 0, +253, 0, 0, 0, 96, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 2, 0, 0,128, 1, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,252, 0, 0, 0, 87, 0, 0, 0, 95, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 2, 0, 0, 18, 1, 0, 0, +252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0,252, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 18, 1, 0, 0, 95, 2, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 2, 0, 0,153, 0, 0, 0,128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,128, 1, 0, 0,130, 1, 0, 0, 97, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 0, 0, 0, + 97, 2, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 1, 0, 0,128, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 97, 2, 0, 0,154, 0, 0, 0, 98, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 2, 0, 0, 99, 2, 0, 0, + 97, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,153, 0, 0, 0, 97, 2, 0, 0, 99, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 99, 2, 0, 0, 98, 2, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,133, 1, 0, 0, 40, 0, 0, 0,129, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,129, 1, 0, 0, 99, 2, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 0, 0, 0, +133, 1, 0, 0, 99, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 2, 0, 0,129, 1, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,132, 1, 0, 0,155, 0, 0, 0, 98, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 2, 0, 0,131, 1, 0, 0, +132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 0, 0, 0,132, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +131, 1, 0, 0, 98, 2, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 2, 0, 0, 97, 0, 0, 0, 16, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 16, 1, 0, 0, 20, 1, 0, 0,100, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 0, 0, 0, +100, 2, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 1, 0, 0, 16, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,100, 2, 0, 0, 99, 0, 0, 0,101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 2, 0, 0,102, 2, 0, 0, +100, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 0, 0, 0,100, 2, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +102, 2, 0, 0,101, 2, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 1, 0, 0, 39, 0, 0, 0, 17, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 17, 1, 0, 0,102, 2, 0, 0,132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 0, 0, 0, +132, 1, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 2, 0, 0, 17, 1, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,133, 1, 0, 0,155, 0, 0, 0,101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 2, 0, 0, 21, 1, 0, 0, +133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 0, 0, 0,133, 1, 0, 0, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 21, 1, 0, 0,101, 2, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 2, 0, 0, 96, 0, 0, 0, 15, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 15, 1, 0, 0,131, 1, 0, 0,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 0, 0, 0, +103, 2, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 1, 0, 0, 15, 1, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,103, 2, 0, 0,154, 0, 0, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 2, 0, 0,105, 2, 0, 0, +103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0,103, 2, 0, 0,105, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +105, 2, 0, 0,104, 2, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 0, 0, 0, 7, 0, 0, 0, 14, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 14, 1, 0, 0,105, 2, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 0, 0, 0, +250, 0, 0, 0,105, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 2, 0, 0, 14, 1, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,251, 0, 0, 0, 86, 0, 0, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 2, 0, 0,130, 1, 0, 0, +251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 0, 0, 0,251, 0, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +130, 1, 0, 0,104, 2, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 2, 0, 0,156, 0, 0, 0,135, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,135, 1, 0, 0, 23, 1, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 0, 0, 0, +106, 2, 0, 0, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 1, 0, 0,135, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,106, 2, 0, 0,100, 0, 0, 0,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 2, 0, 0,108, 2, 0, 0, +106, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,156, 0, 0, 0,106, 2, 0, 0,108, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +108, 2, 0, 0,107, 2, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 35, 0, 0, 0,134, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,134, 1, 0, 0,108, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 0, 0, 0, + 1, 1, 0, 0,108, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 2, 0, 0,134, 1, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 1, 0, 0, 89, 0, 0, 0,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 2, 0, 0, 22, 1, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0, 0, 1, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 22, 1, 0, 0,107, 2, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 2, 0, 0,156, 0, 0, 0,134, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,134, 1, 0, 0,136, 1, 0, 0,109, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 0, 0, 0, +109, 2, 0, 0,136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,136, 1, 0, 0,134, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,109, 2, 0, 0,157, 0, 0, 0,110, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 2, 0, 0,111, 2, 0, 0, +109, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,156, 0, 0, 0,109, 2, 0, 0,111, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +111, 2, 0, 0,110, 2, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,139, 1, 0, 0, 41, 0, 0, 0,135, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,135, 1, 0, 0,111, 2, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 0, 0, 0, +139, 1, 0, 0,111, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 2, 0, 0,135, 1, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,138, 1, 0, 0,158, 0, 0, 0,110, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 2, 0, 0,137, 1, 0, 0, +138, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 0, 0, 0,138, 1, 0, 0,137, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +137, 1, 0, 0,110, 2, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 2, 0, 0, 99, 0, 0, 0, 20, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 20, 1, 0, 0, 24, 1, 0, 0,112, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 0, 0, 0, +112, 2, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 1, 0, 0, 20, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,112, 2, 0, 0,101, 0, 0, 0,113, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 2, 0, 0,114, 2, 0, 0, +112, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 0, 0, 0,112, 2, 0, 0,114, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +114, 2, 0, 0,113, 2, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 1, 0, 0, 40, 0, 0, 0, 21, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 21, 1, 0, 0,114, 2, 0, 0,138, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 0, 0, 0, +138, 1, 0, 0,114, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 2, 0, 0, 21, 1, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,139, 1, 0, 0,158, 0, 0, 0,113, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 2, 0, 0, 25, 1, 0, 0, +139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 0, 0, 0,139, 1, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 25, 1, 0, 0,113, 2, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 2, 0, 0, 98, 0, 0, 0, 19, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 19, 1, 0, 0,137, 1, 0, 0,115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 0, 0, 0, +115, 2, 0, 0,137, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,137, 1, 0, 0, 19, 1, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,115, 2, 0, 0,157, 0, 0, 0,116, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 2, 0, 0,117, 2, 0, 0, +115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 0, 0, 0,115, 2, 0, 0,117, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +117, 2, 0, 0,116, 2, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,254, 0, 0, 0, 8, 0, 0, 0, 18, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 18, 1, 0, 0,117, 2, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 0, 0, 0, +254, 0, 0, 0,117, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,117, 2, 0, 0, 18, 1, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,255, 0, 0, 0, 88, 0, 0, 0,116, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 2, 0, 0,136, 1, 0, 0, +255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 0, 0, 0,255, 0, 0, 0,136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +136, 1, 0, 0,116, 2, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 2, 0, 0,159, 0, 0, 0,141, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,141, 1, 0, 0, 7, 1, 0, 0,118, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 0, 0, 0, +118, 2, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 1, 0, 0,141, 1, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,118, 2, 0, 0, 92, 0, 0, 0,119, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 2, 0, 0,120, 2, 0, 0, +118, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 0, 0, 0,118, 2, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +120, 2, 0, 0,119, 2, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 1, 0, 0, 36, 0, 0, 0,140, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,140, 1, 0, 0,120, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 0, 0, 0, + 5, 1, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 2, 0, 0,140, 1, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, 1, 0, 0, 91, 0, 0, 0,119, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 2, 0, 0, 6, 1, 0, 0, + 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 0, 0, 0, 4, 1, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 6, 1, 0, 0,119, 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 2, 0, 0,159, 0, 0, 0,140, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,140, 1, 0, 0,142, 1, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 0, 0, 0, +121, 2, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 1, 0, 0,140, 1, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,121, 2, 0, 0,160, 0, 0, 0,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 2, 0, 0,123, 2, 0, 0, +121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 0, 0, 0,121, 2, 0, 0,123, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +123, 2, 0, 0,122, 2, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 1, 0, 0, 37, 0, 0, 0,141, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3,141, 1, 0, 0,123, 2, 0, 0,144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 0, 0, 0, +144, 1, 0, 0,123, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,123, 2, 0, 0,141, 1, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,145, 1, 0, 0,161, 0, 0, 0,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 2, 0, 0,143, 1, 0, 0, +145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 0, 0, 0,145, 1, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +143, 1, 0, 0,122, 2, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 2, 0, 0,101, 0, 0, 0, 24, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 24, 1, 0, 0, 8, 1, 0, 0,124, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 0, 0, 0, +124, 2, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 1, 0, 0, 24, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,124, 2, 0, 0, 93, 0, 0, 0,125, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 2, 0, 0,126, 2, 0, 0, +124, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 0, 0, 0,124, 2, 0, 0,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +126, 2, 0, 0,125, 2, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,145, 1, 0, 0, 41, 0, 0, 0, 25, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 25, 1, 0, 0,126, 2, 0, 0,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 0, 0, 0, +145, 1, 0, 0,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 2, 0, 0, 25, 1, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,144, 1, 0, 0,161, 0, 0, 0,125, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 2, 0, 0, 9, 1, 0, 0, +144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 0, 0, 0,144, 1, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 9, 1, 0, 0,125, 2, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 2, 0, 0,100, 0, 0, 0, 23, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 23, 1, 0, 0,143, 1, 0, 0,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 0, 0, 0, +127, 2, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,143, 1, 0, 0, 23, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,127, 2, 0, 0,160, 0, 0, 0,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 2, 0, 0,129, 2, 0, 0, +127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 0, 0, 0,127, 2, 0, 0,129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +129, 2, 0, 0,128, 2, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0, 9, 0, 0, 0, 22, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 22, 1, 0, 0,129, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 0, 0, 0, + 2, 1, 0, 0,129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,129, 2, 0, 0, 22, 1, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 3, 1, 0, 0, 90, 0, 0, 0,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 2, 0, 0,142, 1, 0, 0, + 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 0, 0, 0, 3, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, +142, 1, 0, 0,128, 2, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 68, 65, 84, 65, 0,220, 0, 0,120,118,185, 3, + 65, 0, 0, 0, 0, 5, 0, 0,166,222,110, 63, 9,205, 55, 63,212,132,105, 63,201,236, 65, 63,218,153,103, 63,119,155, 54, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218,153,103, 63,119,155, 54, 63,118,148,108, 63, +211,160, 44, 63,166,222,110, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 36, 51,115, 63, 36, 28, 45, 63,166,222,110, 63, 9,205, 55, 63,118,148,108, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,148,108, 63,211,160, 44, 63,218,153,103, 63,119,155, 54, 63, 87, 17,102, 63, +229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 81, 96, 63,170, 55, 52, 63, + 87, 17,102, 63,229, 52, 43, 63,218,153,103, 63,119,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,218,153,103, 63,119,155, 54, 63, 9, 75, 97, 63, 92,233, 63, 63, 56, 81, 96, 63,170, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 49, 86, 60, 63, 56, 81, 96, 63,170, 55, 52, 63, + 9, 75, 97, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 75, 97, 63, + 92,233, 63, 63,218,153,103, 63,119,155, 54, 63,212,132,105, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,103,167, 98, 63,168, 39, 75, 63,138,153, 89, 63, 39,228, 82, 63,139,153, 89, 63,255,153, 71, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63,255,153, 71, 63, 9, 75, 97, 63, + 92,233, 63, 63,103,167, 98, 63,168, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +212,132,105, 63,201,236, 65, 63,103,167, 98, 63,168, 39, 75, 63, 9, 75, 97, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 75, 97, 63, 92,233, 63, 63,139,153, 89, 63,255,153, 71, 63,138,153, 89, 63, + 49, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 81, 96, 63,170, 55, 52, 63, +138,153, 89, 63, 49, 86, 60, 63,139,153, 89, 63, 79, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,139,153, 89, 63, 79, 12, 49, 63,205,182, 95, 63,222,228, 40, 63, 56, 81, 96, 63,170, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 17,102, 63,229, 52, 43, 63, 56, 81, 96, 63,170, 55, 52, 63, +205,182, 95, 63,222,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,182, 95, 63, +222,228, 40, 63,139,153, 89, 63, 79, 12, 49, 63,139,153, 89, 63, 45,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,103,167, 98, 63,168, 39, 75, 63,212,132,105, 63,201,236, 65, 63,168, 83,109, 63,207, 83, 78, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,168, 83,109, 63,207, 83, 78, 63,135, 85,101, 63, +148, 64, 88, 63,103,167, 98, 63,168, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +138,153, 89, 63, 39,228, 82, 63,103,167, 98, 63,168, 39, 75, 63,135, 85,101, 63,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135, 85,101, 63,148, 64, 88, 63,168, 83,109, 63,207, 83, 78, 63, 36, 51,115, 63, + 22, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 18,121, 63,207, 83, 78, 63, + 36, 51,115, 63, 22, 56, 90, 63,168, 83,109, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,168, 83,109, 63,207, 83, 78, 63, 36, 51,115, 63,115, 23, 67, 63,162, 18,121, 63,207, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116,225,124, 63,202,236, 65, 63,162, 18,121, 63,207, 83, 78, 63, + 36, 51,115, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, +115, 23, 67, 63,168, 83,109, 63,207, 83, 78, 63,212,132,105, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,166,222,110, 63, 9,205, 55, 63, 36, 51,115, 63, 36, 28, 45, 63,163,135,119, 63, 11,205, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,163,135,119, 63, 11,205, 55, 63, 36, 51,115, 63, +115, 23, 67, 63,166,222,110, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +212,132,105, 63,201,236, 65, 63,166,222,110, 63, 9,205, 55, 63, 36, 51,115, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63,115, 23, 67, 63,163,135,119, 63, 11,205, 55, 63,116,225,124, 63, +202,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 18,121, 63,207, 83, 78, 63, +116,225,124, 63,202,236, 65, 63,113,223,129, 63,170, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,113,223,129, 63,170, 39, 75, 63, 98,136,128, 63,148, 64, 88, 63,162, 18,121, 63,207, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 22, 56, 90, 63,162, 18,121, 63,207, 83, 78, 63, + 98,136,128, 63,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95, 98,136, 59, +148, 64, 88, 63,160,184,111, 60,170, 39, 75, 63,243,203, 76, 61, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,243,203, 76, 61, 82, 12, 49, 63,246,203, 76, 61, 53, 86, 60, 63, 31,162,194, 60,172, 55, 52, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31,162,194, 60,172, 55, 52, 63,111,239,213, 60, +223,228, 40, 63,243,203, 76, 61, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +246,203, 76, 61, 48,200, 37, 63,243,203, 76, 61, 82, 12, 49, 63,111,239,213, 60,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,239,213, 60,223,228, 40, 63, 31,162,194, 60,172, 55, 52, 63,120,226,169, 58, +230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,204,126, 63,121,155, 54, 63, +121, 42,128, 63,230, 52, 43, 63,136, 10,131, 63,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,136, 10,131, 63,172, 55, 52, 63,160,141,130, 63, 95,233, 63, 63,111,204,126, 63,121,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116,225,124, 63,202,236, 65, 63,111,204,126, 63,121,155, 54, 63, +160,141,130, 63, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,104,163, 60, + 95,233, 63, 63, 31,162,194, 60,172, 55, 52, 63,246,203, 76, 61, 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,244,203, 76, 61, 2,154, 71, 63,243,203, 76, 61, 41,228, 82, 63,160,184,111, 60,170, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,184,111, 60,170, 39, 75, 63, 11,104,163, 60, + 95,233, 63, 63,244,203, 76, 61, 2,154, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +246,203, 76, 61, 53, 86, 60, 63,244,203, 76, 61, 2,154, 71, 63, 11,104,163, 60, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,141,130, 63, 95,233, 63, 63,113,223,129, 63,170, 39, 75, 63,116,225,124, 63, +202,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,204,126, 63,121,155, 54, 63, +116,225,124, 63,202,236, 65, 63,163,135,119, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,163,135,119, 63, 11,205, 55, 63,210,209,121, 63,212,160, 44, 63,111,204,126, 63,121,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121, 42,128, 63,230, 52, 43, 63,111,204,126, 63,121,155, 54, 63, +210,209,121, 63,212,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,210,209,121, 63, +212,160, 44, 63,163,135,119, 63, 11,205, 55, 63, 36, 51,115, 63, 36, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 95,102,134, 63, 79, 46, 94, 63, 95,102,134, 63, 22,114,105, 63, 52,205,124, 63, 58, 26, 99, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 52,205,124, 63, 58, 26, 99, 63, 98,136,128, 63, +148, 64, 88, 63, 95,102,134, 63, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +243,203, 76, 61, 41,228, 82, 63,234,203, 76, 61, 79, 46, 94, 63, 95, 98,136, 59,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 98,136,128, 63,148, 64, 88, 63, 52,205,124, 63, 58, 26, 99, 63, 36, 51,115, 63, + 22, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,153,105, 63, 58, 26, 99, 63, + 36, 51,115, 63, 22, 56, 90, 63, 52,205,124, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 52,205,124, 63, 58, 26, 99, 63, 32, 51,115, 63,212,154,109, 63, 21,153,105, 63, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 19,114,105, 63, 21,153,105, 63, 58, 26, 99, 63, + 32, 51,115, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32, 51,115, 63, +212,154,109, 63, 52,205,124, 63, 58, 26, 99, 63, 95,102,134, 63, 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 95,102,134, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,136,153, 89, 63,242,187,116, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,136,153, 89, 63,242,187,116, 63, 32, 51,115, 63, +212,154,109, 63, 95,102,134, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 95,102,134, 63, 22,114,105, 63, 95,102,134, 63,242,187,116, 63, 32, 51,115, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32, 51,115, 63,212,154,109, 63,136,153, 89, 63,242,187,116, 63,138,153, 89, 63, + 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,153,105, 63, 58, 26, 99, 63, +138,153, 89, 63, 19,114,105, 63,138,153, 89, 63, 77, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,138,153, 89, 63, 77, 46, 94, 63,135, 85,101, 63,148, 64, 88, 63, 21,153,105, 63, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 22, 56, 90, 63, 21,153,105, 63, 58, 26, 99, 63, +135, 85,101, 63,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135, 85,101, 63, +148, 64, 88, 63,138,153, 89, 63, 77, 46, 94, 63,138,153, 89, 63, 39,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 67,153, 75, 63,113,155, 54, 63, 74,174, 73, 63,193,236, 65, 63,124, 84, 68, 63,255,204, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,124, 84, 68, 63,255,204, 55, 63,169,158, 70, 63, +200,160, 44, 63, 67,153, 75, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +196, 33, 77, 63,221, 52, 43, 63, 67,153, 75, 63,113,155, 54, 63,169,158, 70, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,158, 70, 63,200,160, 44, 63,124, 84, 68, 63,255,204, 55, 63, 0, 0, 64, 63, + 24, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 67,153, 75, 63,113,155, 54, 63, +196, 33, 77, 63,221, 52, 43, 63,225,225, 82, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,225,225, 82, 63,165, 55, 52, 63, 16,232, 81, 63, 89,233, 63, 63, 67,153, 75, 63,113,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 74,174, 73, 63,193,236, 65, 63, 67,153, 75, 63,113,155, 54, 63, + 16,232, 81, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 16,232, 81, 63, + 89,233, 63, 63,225,225, 82, 63,165, 55, 52, 63,138,153, 89, 63, 49, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63,255,153, 71, 63,138,153, 89, 63, 39,228, 82, 63,179,139, 80, 63,164, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,139, 80, 63,164, 39, 75, 63, 16,232, 81, 63, + 89,233, 63, 63,139,153, 89, 63,255,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +138,153, 89, 63, 49, 86, 60, 63,139,153, 89, 63,255,153, 71, 63, 16,232, 81, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 16,232, 81, 63, 89,233, 63, 63,179,139, 80, 63,164, 39, 75, 63, 74,174, 73, 63, +193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 79, 12, 49, 63, +138,153, 89, 63, 49, 86, 60, 63,225,225, 82, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,225,225, 82, 63,165, 55, 52, 63, 75,124, 83, 63,217,228, 40, 63,139,153, 89, 63, 79, 12, 49, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 45,200, 37, 63,139,153, 89, 63, 79, 12, 49, 63, + 75,124, 83, 63,217,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,124, 83, 63, +217,228, 40, 63,225,225, 82, 63,165, 55, 52, 63,196, 33, 77, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,120,223, 69, 63,198, 83, 78, 63, 74,174, 73, 63,193,236, 65, 63,179,139, 80, 63,164, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,139, 80, 63,164, 39, 75, 63,148,221, 77, 63, +140, 64, 88, 63,120,223, 69, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63, 12, 56, 90, 63,120,223, 69, 63,198, 83, 78, 63,148,221, 77, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,148,221, 77, 63,140, 64, 88, 63,179,139, 80, 63,164, 39, 75, 63,138,153, 89, 63, + 39,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120,223, 69, 63,198, 83, 78, 63, + 0, 0, 64, 63, 12, 56, 90, 63,136, 32, 58, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,136, 32, 58, 63,198, 83, 78, 63, 0, 0, 64, 63,106, 23, 67, 63,120,223, 69, 63,198, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 74,174, 73, 63,193,236, 65, 63,120,223, 69, 63,198, 83, 78, 63, + 0, 0, 64, 63,106, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, +106, 23, 67, 63,136, 32, 58, 63,198, 83, 78, 63,182, 81, 54, 63,193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,132,171, 59, 63,255,204, 55, 63, 0, 0, 64, 63, 24, 28, 45, 63,124, 84, 68, 63,255,204, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,124, 84, 68, 63,255,204, 55, 63, 0, 0, 64, 63, +106, 23, 67, 63,132,171, 59, 63,255,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +182, 81, 54, 63,193,236, 65, 63,132,171, 59, 63,255,204, 55, 63, 0, 0, 64, 63,106, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,106, 23, 67, 63,124, 84, 68, 63,255,204, 55, 63, 74,174, 73, 63, +193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 77,116, 47, 63,164, 39, 75, 63, +182, 81, 54, 63,193,236, 65, 63,136, 32, 58, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,136, 32, 58, 63,198, 83, 78, 63,108, 34, 50, 63,140, 64, 88, 63, 77,116, 47, 63,164, 39, 75, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 38,228, 82, 63, 77,116, 47, 63,164, 39, 75, 63, +108, 34, 50, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,108, 34, 50, 63, +140, 64, 88, 63,136, 32, 58, 63,198, 83, 78, 63, 0, 0, 64, 63, 12, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 31, 30, 45, 63,165, 55, 52, 63,117,102, 38, 63, 50, 86, 60, 63,117,102, 38, 63, 78, 12, 49, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 78, 12, 49, 63,181,131, 44, 63, +216,228, 40, 63, 31, 30, 45, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 60,222, 50, 63,221, 52, 43, 63, 31, 30, 45, 63,165, 55, 52, 63,181,131, 44, 63,216,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,181,131, 44, 63,216,228, 40, 63,117,102, 38, 63, 78, 12, 49, 63,117,102, 38, 63, + 45,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 30, 45, 63,165, 55, 52, 63, + 60,222, 50, 63,221, 52, 43, 63,189,102, 52, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,189,102, 52, 63,113,155, 54, 63,240, 23, 46, 63, 89,233, 63, 63, 31, 30, 45, 63,165, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 50, 86, 60, 63, 31, 30, 45, 63,165, 55, 52, 63, +240, 23, 46, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 23, 46, 63, + 89,233, 63, 63,189,102, 52, 63,113,155, 54, 63,182, 81, 54, 63,193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 77,116, 47, 63,164, 39, 75, 63,118,102, 38, 63, 38,228, 82, 63,117,102, 38, 63,255,153, 71, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63,255,153, 71, 63,240, 23, 46, 63, + 89,233, 63, 63, 77,116, 47, 63,164, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +182, 81, 54, 63,193,236, 65, 63, 77,116, 47, 63,164, 39, 75, 63,240, 23, 46, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 23, 46, 63, 89,233, 63, 63,117,102, 38, 63,255,153, 71, 63,117,102, 38, 63, + 50, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132,171, 59, 63,255,204, 55, 63, +182, 81, 54, 63,193,236, 65, 63,189,102, 52, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,189,102, 52, 63,113,155, 54, 63, 87, 97, 57, 63,200,160, 44, 63,132,171, 59, 63,255,204, 55, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 28, 45, 63,132,171, 59, 63,255,204, 55, 63, + 87, 97, 57, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 97, 57, 63, +200,160, 44, 63,189,102, 52, 63,113,155, 54, 63, 60,222, 50, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,250,101, 54, 63, 51, 26, 99, 63,118,102, 38, 63, 19,114,105, 63,118,102, 38, 63, 77, 46, 94, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 77, 46, 94, 63,108, 34, 50, 63, +140, 64, 88, 63,250,101, 54, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63, 12, 56, 90, 63,250,101, 54, 63, 51, 26, 99, 63,108, 34, 50, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,108, 34, 50, 63,140, 64, 88, 63,118,102, 38, 63, 77, 46, 94, 63,118,102, 38, 63, + 38,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,250,101, 54, 63, 51, 26, 99, 63, + 0, 0, 64, 63, 12, 56, 90, 63, 6,154, 73, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 6,154, 73, 63, 51, 26, 99, 63, 0, 0, 64, 63,206,154,109, 63,250,101, 54, 63, 51, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 19,114,105, 63,250,101, 54, 63, 51, 26, 99, 63, + 0, 0, 64, 63,206,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, +206,154,109, 63, 6,154, 73, 63, 51, 26, 99, 63,138,153, 89, 63, 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,136,153, 89, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,120,102, 38, 63,242,187,116, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120,102, 38, 63,242,187,116, 63, 0, 0, 64, 63, +206,154,109, 63,136,153, 89, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +138,153, 89, 63, 19,114,105, 63,136,153, 89, 63,242,187,116, 63, 0, 0, 64, 63,206,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,206,154,109, 63,120,102, 38, 63,242,187,116, 63,118,102, 38, 63, + 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 77, 46, 94, 63, +138,153, 89, 63, 19,114,105, 63, 6,154, 73, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 6,154, 73, 63, 51, 26, 99, 63,148,221, 77, 63,140, 64, 88, 63,138,153, 89, 63, 77, 46, 94, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 39,228, 82, 63,138,153, 89, 63, 77, 46, 94, 63, +148,221, 77, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,148,221, 77, 63, +140, 64, 88, 63, 6,154, 73, 63, 51, 26, 99, 63, 0, 0, 64, 63, 12, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,167, 71, 8, 62, 7,205, 55, 63,170,192,229, 61,200,236, 65, 63,203,104,214, 61,120,155, 54, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,203,104,214, 61,120,155, 54, 63,201, 61,254, 61, +207,160, 44, 63,167, 71, 8, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +173,153, 25, 62, 27, 28, 45, 63,167, 71, 8, 62, 7,205, 55, 63,201, 61,254, 61,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,201, 61,254, 61,207,160, 44, 63,203,104,214, 61,120,155, 54, 63,175, 36,202, 61, +228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 35,156, 61,172, 55, 52, 63, +175, 36,202, 61,228, 52, 43, 63,203,104,214, 61,120,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,203,104,214, 61,120,155, 54, 63, 32,242,163, 61, 96,233, 63, 63,145, 35,156, 61,172, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61, 53, 86, 60, 63,145, 35,156, 61,172, 55, 52, 63, + 32,242,163, 61, 96,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32,242,163, 61, + 96,233, 63, 63,203,104,214, 61,120,155, 54, 63,170,192,229, 61,200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 17,213,174, 61,171, 39, 75, 63,243,203, 76, 61, 41,228, 82, 63,244,203, 76, 61, 2,154, 71, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,244,203, 76, 61, 2,154, 71, 63, 32,242,163, 61, + 96,233, 63, 63, 17,213,174, 61,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +170,192,229, 61,200,236, 65, 63, 17,213,174, 61,171, 39, 75, 63, 32,242,163, 61, 96,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32,242,163, 61, 96,233, 63, 63,244,203, 76, 61, 2,154, 71, 63,246,203, 76, 61, + 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 35,156, 61,172, 55, 52, 63, +246,203, 76, 61, 53, 86, 60, 63,243,203, 76, 61, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,243,203, 76, 61, 82, 12, 49, 63, 53, 80,151, 61,223,228, 40, 63,145, 35,156, 61,172, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 36,202, 61,228, 52, 43, 63,145, 35,156, 61,172, 55, 52, 63, + 53, 80,151, 61,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 80,151, 61, +223,228, 40, 63,243,203, 76, 61, 82, 12, 49, 63,246,203, 76, 61, 48,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 17,213,174, 61,171, 39, 75, 63,170,192,229, 61,200,236, 65, 63,169, 27, 2, 62,204, 83, 78, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 27, 2, 62,204, 83, 78, 63, 23, 70,196, 61, +147, 64, 88, 63, 17,213,174, 61,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +243,203, 76, 61, 41,228, 82, 63, 17,213,174, 61,171, 39, 75, 63, 23, 70,196, 61,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 70,196, 61,147, 64, 88, 63,169, 27, 2, 62,204, 83, 78, 63,160,153, 25, 62, + 14, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 23, 49, 62,195, 83, 78, 63, +160,153, 25, 62, 14, 56, 90, 63,169, 27, 2, 62,204, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,169, 27, 2, 62,204, 83, 78, 63,172,153, 25, 62,108, 23, 67, 63,162, 23, 49, 62,195, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 82, 64, 62,183,236, 65, 63,162, 23, 49, 62,195, 83, 78, 63, +172,153, 25, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,172,153, 25, 62, +108, 23, 67, 63,169, 27, 2, 62,204, 83, 78, 63,170,192,229, 61,200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,167, 71, 8, 62, 7,205, 55, 63,173,153, 25, 62, 27, 28, 45, 63,173,235, 42, 62,254,204, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,235, 42, 62,254,204, 55, 63,172,153, 25, 62, +108, 23, 67, 63,167, 71, 8, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +170,192,229, 61,200,236, 65, 63,167, 71, 8, 62, 7,205, 55, 63,172,153, 25, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,172,153, 25, 62,108, 23, 67, 63,173,235, 42, 62,254,204, 55, 63,240, 82, 64, 62, +183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 23, 49, 62,195, 83, 78, 63, +240, 82, 64, 62,183,236, 65, 63,166,200, 91, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,166,200, 91, 62,147, 39, 75, 63, 34, 16, 81, 62,131, 64, 88, 63,162, 23, 49, 62,195, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 25, 62, 14, 56, 90, 63,162, 23, 49, 62,195, 83, 78, 63, + 34, 16, 81, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 16, 81, 62, +131, 64, 88, 63,166,200, 91, 62,147, 39, 75, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 62, 19, 86, 60, 63, 92, 33,101, 62,146, 55, 52, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92, 33,101, 62,146, 55, 52, 63, 14,139,103, 62, +199,228, 40, 63, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62, 23,200, 37, 63, 0, 0,128, 62, 47, 12, 49, 63, 14,139,103, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,139,103, 62,199,228, 40, 63, 92, 33,101, 62,146, 55, 52, 63,230, 32, 78, 62, +211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,223,254, 71, 62,102,155, 54, 63, +230, 32, 78, 62,211, 52, 43, 63, 92, 33,101, 62,146, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 92, 33,101, 62,146, 55, 52, 63, 23, 58, 97, 62, 69,233, 63, 63,223,254, 71, 62,102,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 82, 64, 62,183,236, 65, 63,223,254, 71, 62,102,155, 54, 63, + 23, 58, 97, 62, 69,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 58, 97, 62, + 69,233, 63, 63, 92, 33,101, 62,146, 55, 52, 63, 0, 0,128, 62, 19, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 62, 13,228, 82, 63,166,200, 91, 62,147, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,200, 91, 62,147, 39, 75, 63, 23, 58, 97, 62, + 69,233, 63, 63, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62, 19, 86, 60, 63, 0, 0,128, 62,228,153, 71, 63, 23, 58, 97, 62, 69,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 58, 97, 62, 69,233, 63, 63,166,200, 91, 62,147, 39, 75, 63,240, 82, 64, 62, +183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,223,254, 71, 62,102,155, 54, 63, +240, 82, 64, 62,183,236, 65, 63,173,235, 42, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,173,235, 42, 62,254,204, 55, 63,105, 20, 52, 62,198,160, 44, 63,223,254, 71, 62,102,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230, 32, 78, 62,211, 52, 43, 63,223,254, 71, 62,102,155, 54, 63, +105, 20, 52, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,105, 20, 52, 62, +198,160, 44, 63,173,235, 42, 62,254,204, 55, 63,173,153, 25, 62, 27, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 62, 8,114,105, 63,230, 1, 64, 62, 49, 26, 99, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230, 1, 64, 62, 49, 26, 99, 63, 34, 16, 81, 62, +131, 64, 88, 63, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 62, 58, 46, 94, 63, 34, 16, 81, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 16, 81, 62,131, 64, 88, 63,230, 1, 64, 62, 49, 26, 99, 63,160,153, 25, 62, + 14, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164, 98,230, 61, 58, 26, 99, 63, +160,153, 25, 62, 14, 56, 90, 63,230, 1, 64, 62, 49, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,230, 1, 64, 62, 49, 26, 99, 63,159,153, 25, 62,210,154,109, 63,164, 98,230, 61, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237,203, 76, 61, 22,114,105, 63,164, 98,230, 61, 58, 26, 99, 63, +159,153, 25, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159,153, 25, 62, +210,154,109, 63,230, 1, 64, 62, 49, 26, 99, 63, 0, 0,128, 62, 8,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,232,187,116, 63, 3,153, 59, 63, 0, 0,128, 63, 95,102,134, 63,242,187,116, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,210,203, 76, 61,242,187,116, 63,159,153, 25, 62, +210,154,109, 63, 0, 0,128, 62,232,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62, 8,114,105, 63, 0, 0,128, 62,232,187,116, 63,159,153, 25, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159,153, 25, 62,210,154,109, 63,210,203, 76, 61,242,187,116, 63,237,203, 76, 61, + 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164, 98,230, 61, 58, 26, 99, 63, +237,203, 76, 61, 22,114,105, 63,234,203, 76, 61, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,234,203, 76, 61, 79, 46, 94, 63, 23, 70,196, 61,147, 64, 88, 63,164, 98,230, 61, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 25, 62, 14, 56, 90, 63,164, 98,230, 61, 58, 26, 99, 63, + 23, 70,196, 61,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 70,196, 61, +147, 64, 88, 63,234,203, 76, 61, 79, 46, 94, 63,243,203, 76, 61, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 42,138,170, 62,254,204, 55, 63,136,214,159, 62,183,236, 65, 63,145, 0,156, 62,102,155, 54, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 0,156, 62,102,155, 54, 63,204,245,165, 62, +198,160, 44, 63, 42,138,170, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 42, 51,179, 62, 28, 28, 45, 63, 42,138,170, 62,254,204, 55, 63,204,245,165, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204,245,165, 62,198,160, 44, 63,145, 0,156, 62,102,155, 54, 63,141,239,152, 62, +211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,111,141, 62,146, 55, 52, 63, +141,239,152, 62,211, 52, 43, 63,145, 0,156, 62,102,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,145, 0,156, 62,102,155, 54, 63,245, 98,143, 62, 68,233, 63, 63, 82,111,141, 62,146, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 19, 86, 60, 63, 82,111,141, 62,146, 55, 52, 63, +245, 98,143, 62, 68,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245, 98,143, 62, + 68,233, 63, 63,145, 0,156, 62,102,155, 54, 63,136,214,159, 62,183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 62,228,153, 71, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,228,153, 71, 63,245, 98,143, 62, + 68,233, 63, 63,173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +136,214,159, 62,183,236, 65, 63,173, 27,146, 62,147, 39, 75, 63,245, 98,143, 62, 68,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245, 98,143, 62, 68,233, 63, 63, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 62, + 19, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,111,141, 62,146, 55, 52, 63, + 0, 0,128, 62, 19, 86, 60, 63, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 62, 47, 12, 49, 63,121, 58,140, 62,199,228, 40, 63, 82,111,141, 62,146, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,141,239,152, 62,211, 52, 43, 63, 82,111,141, 62,146, 55, 52, 63, +121, 58,140, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121, 58,140, 62, +199,228, 40, 63, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 62, 23,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,173, 27,146, 62,147, 39, 75, 63,136,214,159, 62,183,236, 65, 63, 47,116,167, 62,195, 83, 78, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47,116,167, 62,195, 83, 78, 63,239,119,151, 62, +131, 64, 88, 63,173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62, 13,228, 82, 63,173, 27,146, 62,147, 39, 75, 63,239,119,151, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,119,151, 62,131, 64, 88, 63, 47,116,167, 62,195, 83, 78, 63, 49, 51,179, 62, + 14, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,242,190, 62,205, 83, 78, 63, + 49, 51,179, 62, 14, 56, 90, 63, 47,116,167, 62,195, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 47,116,167, 62,195, 83, 78, 63, 42, 51,179, 62,108, 23, 67, 63, 44,242,190, 62,205, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,143,198, 62,200,236, 65, 63, 44,242,190, 62,205, 83, 78, 63, + 42, 51,179, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62, +108, 23, 67, 63, 47,116,167, 62,195, 83, 78, 63,136,214,159, 62,183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 42,138,170, 62,254,204, 55, 63, 42, 51,179, 62, 28, 28, 45, 63, 45,220,187, 62, 7,205, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 45,220,187, 62, 7,205, 55, 63, 42, 51,179, 62, +108, 23, 67, 63, 42,138,170, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +136,214,159, 62,183,236, 65, 63, 42,138,170, 62,254,204, 55, 63, 42, 51,179, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62,108, 23, 67, 63, 45,220,187, 62, 7,205, 55, 63,214,143,198, 62, +200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,242,190, 62,205, 83, 78, 63, +214,143,198, 62,200,236, 65, 63,188, 74,212, 62,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,188, 74,212, 62,171, 39, 75, 63,122,238,206, 62,147, 64, 88, 63, 44,242,190, 62,205, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62, 14, 56, 90, 63, 44,242,190, 62,205, 83, 78, 63, +122,238,206, 62,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,238,206, 62, +147, 64, 88, 63,188, 74,212, 62,171, 39, 75, 63,130,102,230, 62, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62, 82, 12, 49, 63,129,102,230, 62, 53, 86, 60, 63, 28,247,216, 62,172, 55, 52, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 28,247,216, 62,172, 55, 52, 63,243, 43,218, 62, +223,228, 40, 63,130,102,230, 62, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +129,102,230, 62, 48,200, 37, 63,130,102,230, 62, 82, 12, 49, 63,243, 43,218, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,243, 43,218, 62,223,228, 40, 63, 28,247,216, 62,172, 55, 52, 63,212,118,205, 62, +228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,206,101,202, 62,120,155, 54, 63, +212,118,205, 62,228, 52, 43, 63, 28,247,216, 62,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 28,247,216, 62,172, 55, 52, 63,120, 3,215, 62, 95,233, 63, 63,206,101,202, 62,120,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,143,198, 62,200,236, 65, 63,206,101,202, 62,120,155, 54, 63, +120, 3,215, 62, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120, 3,215, 62, + 95,233, 63, 63, 28,247,216, 62,172, 55, 52, 63,129,102,230, 62, 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62, 1,154, 71, 63,130,102,230, 62, 41,228, 82, 63,188, 74,212, 62,171, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 74,212, 62,171, 39, 75, 63,120, 3,215, 62, + 95,233, 63, 63,130,102,230, 62, 1,154, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +129,102,230, 62, 53, 86, 60, 63,130,102,230, 62, 1,154, 71, 63,120, 3,215, 62, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120, 3,215, 62, 95,233, 63, 63,188, 74,212, 62,171, 39, 75, 63,214,143,198, 62, +200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,206,101,202, 62,120,155, 54, 63, +214,143,198, 62,200,236, 65, 63, 45,220,187, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 45,220,187, 62, 7,205, 55, 63,142,112,192, 62,207,160, 44, 63,206,101,202, 62,120,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,118,205, 62,228, 52, 43, 63,206,101,202, 62,120,155, 54, 63, +142,112,192, 62,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,142,112,192, 62, +207,160, 44, 63, 45,220,187, 62, 7,205, 55, 63, 42, 51,179, 62, 28, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,131,102,230, 62, 79, 46, 94, 63,131,102,230, 62, 22,114,105, 63, 87,103,198, 62, 58, 26, 99, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,103,198, 62, 58, 26, 99, 63,122,238,206, 62, +147, 64, 88, 63,131,102,230, 62, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +130,102,230, 62, 41,228, 82, 63,131,102,230, 62, 79, 46, 94, 63,122,238,206, 62,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,238,206, 62,147, 64, 88, 63, 87,103,198, 62, 58, 26, 99, 63, 49, 51,179, 62, + 14, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,255,159, 62, 49, 26, 99, 63, + 49, 51,179, 62, 14, 56, 90, 63, 87,103,198, 62, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 87,103,198, 62, 58, 26, 99, 63, 49, 51,179, 62,210,154,109, 63, 14,255,159, 62, 49, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 8,114,105, 63, 14,255,159, 62, 49, 26, 99, 63, + 49, 51,179, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62, +210,154,109, 63, 87,103,198, 62, 58, 26, 99, 63,131,102,230, 62, 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,134,102,230, 62,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63, 0, 0,128, 62,232,187,116, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,232,187,116, 63, 49, 51,179, 62, +210,154,109, 63,134,102,230, 62,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +131,102,230, 62, 22,114,105, 63,134,102,230, 62,242,187,116, 63, 49, 51,179, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62,210,154,109, 63, 0, 0,128, 62,232,187,116, 63, 0, 0,128, 62, + 8,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,255,159, 62, 49, 26, 99, 63, + 0, 0,128, 62, 8,114,105, 63, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 62, 58, 46, 94, 63,239,119,151, 62,131, 64, 88, 63, 14,255,159, 62, 49, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62, 14, 56, 90, 63, 14,255,159, 62, 49, 26, 99, 63, +239,119,151, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,119,151, 62, +131, 64, 88, 63, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 93,120, 8, 63, 11,205, 55, 63,140, 30, 3, 63,201,236, 65, 63,145, 51, 1, 63,121,155, 54, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 51, 1, 63,121,155, 54, 63, 46, 46, 6, 63, +211,160, 44, 63, 93,120, 8, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +220,204, 12, 63, 35, 28, 45, 63, 93,120, 8, 63, 11,205, 55, 63, 46, 46, 6, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 46, 46, 6, 63,211,160, 44, 63,145, 51, 1, 63,121,155, 54, 63, 30, 86,255, 62, +230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,213,243, 62,172, 55, 52, 63, + 30, 86,255, 62,230, 52, 43, 63,145, 51, 1, 63,121,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,145, 51, 1, 63,121,155, 54, 63,128,201,245, 62, 94,233, 63, 63,222,213,243, 62,172, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62, 53, 86, 60, 63,222,213,243, 62,172, 55, 52, 63, +128,201,245, 62, 94,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,201,245, 62, + 94,233, 63, 63,145, 51, 1, 63,121,155, 54, 63,140, 30, 3, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 59,130,248, 62,169, 39, 75, 63,130,102,230, 62, 41,228, 82, 63,130,102,230, 62, 1,154, 71, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62, 1,154, 71, 63,128,201,245, 62, + 94,233, 63, 63, 59,130,248, 62,169, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +140, 30, 3, 63,201,236, 65, 63, 59,130,248, 62,169, 39, 75, 63,128,201,245, 62, 94,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,201,245, 62, 94,233, 63, 63,130,102,230, 62, 1,154, 71, 63,129,102,230, 62, + 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,213,243, 62,172, 55, 52, 63, +129,102,230, 62, 53, 86, 60, 63,130,102,230, 62, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,130,102,230, 62, 82, 12, 49, 63, 9,161,242, 62,223,228, 40, 63,222,213,243, 62,172, 55, 52, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 86,255, 62,230, 52, 43, 63,222,213,243, 62,172, 55, 52, 63, + 9,161,242, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9,161,242, 62, +223,228, 40, 63,130,102,230, 62, 82, 12, 49, 63,129,102,230, 62, 48,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 59,130,248, 62,169, 39, 75, 63,140, 30, 3, 63,201,236, 65, 63, 94,237, 6, 63,207, 83, 78, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,237, 6, 63,207, 83, 78, 63,118,222,253, 62, +148, 64, 88, 63, 59,130,248, 62,169, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +130,102,230, 62, 41,228, 82, 63, 59,130,248, 62,169, 39, 75, 63,118,222,253, 62,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,222,253, 62,148, 64, 88, 63, 94,237, 6, 63,207, 83, 78, 63,220,204, 12, 63, + 22, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,172, 18, 63,207, 83, 78, 63, +220,204, 12, 63, 22, 56, 90, 63, 94,237, 6, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 94,237, 6, 63,207, 83, 78, 63,220,204, 12, 63,115, 23, 67, 63, 88,172, 18, 63,207, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,123, 22, 63,201,236, 65, 63, 88,172, 18, 63,207, 83, 78, 63, +220,204, 12, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, +115, 23, 67, 63, 94,237, 6, 63,207, 83, 78, 63,140, 30, 3, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 93,120, 8, 63, 11,205, 55, 63,220,204, 12, 63, 35, 28, 45, 63, 91, 33, 17, 63, 9,205, 55, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91, 33, 17, 63, 9,205, 55, 63,220,204, 12, 63, +115, 23, 67, 63, 93,120, 8, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +140, 30, 3, 63,201,236, 65, 63, 93,120, 8, 63, 11,205, 55, 63,220,204, 12, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63,115, 23, 67, 63, 91, 33, 17, 63, 9,205, 55, 63, 44,123, 22, 63, +201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,172, 18, 63,207, 83, 78, 63, + 44,123, 22, 63,201,236, 65, 63,153, 88, 29, 63,167, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,153, 88, 29, 63,167, 39, 75, 63,121,170, 26, 63,147, 64, 88, 63, 88,172, 18, 63,207, 83, 78, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 22, 56, 90, 63, 88,172, 18, 63,207, 83, 78, 63, +121,170, 26, 63,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121,170, 26, 63, +147, 64, 88, 63,153, 88, 29, 63,167, 39, 75, 63,118,102, 38, 63, 38,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 78, 12, 49, 63,117,102, 38, 63, 50, 86, 60, 63,200,174, 31, 63,169, 55, 52, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,174, 31, 63,169, 55, 52, 63, 51, 73, 32, 63, +221,228, 40, 63,117,102, 38, 63, 78, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +117,102, 38, 63, 45,200, 37, 63,117,102, 38, 63, 78, 12, 49, 63, 51, 73, 32, 63,221,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 73, 32, 63,221,228, 40, 63,200,174, 31, 63,169, 55, 52, 63,169,238, 25, 63, +229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,102, 24, 63,119,155, 54, 63, +169,238, 25, 63,229, 52, 43, 63,200,174, 31, 63,169, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,200,174, 31, 63,169, 55, 52, 63,246,180, 30, 63, 92,233, 63, 63, 39,102, 24, 63,119,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,123, 22, 63,201,236, 65, 63, 39,102, 24, 63,119,155, 54, 63, +246,180, 30, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,180, 30, 63, + 92,233, 63, 63,200,174, 31, 63,169, 55, 52, 63,117,102, 38, 63, 50, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63,255,153, 71, 63,118,102, 38, 63, 38,228, 82, 63,153, 88, 29, 63,167, 39, 75, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,153, 88, 29, 63,167, 39, 75, 63,246,180, 30, 63, + 92,233, 63, 63,117,102, 38, 63,255,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +117,102, 38, 63, 50, 86, 60, 63,117,102, 38, 63,255,153, 71, 63,246,180, 30, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,180, 30, 63, 92,233, 63, 63,153, 88, 29, 63,167, 39, 75, 63, 44,123, 22, 63, +201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,102, 24, 63,119,155, 54, 63, + 44,123, 22, 63,201,236, 65, 63, 91, 33, 17, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 91, 33, 17, 63, 9,205, 55, 63,138,107, 19, 63,211,160, 44, 63, 39,102, 24, 63,119,155, 54, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,238, 25, 63,229, 52, 43, 63, 39,102, 24, 63,119,155, 54, 63, +138,107, 19, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,107, 19, 63, +211,160, 44, 63, 91, 33, 17, 63, 9,205, 55, 63,220,204, 12, 63, 35, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 77, 46, 94, 63,118,102, 38, 63, 19,114,105, 63,235,102, 22, 63, 59, 26, 99, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,102, 22, 63, 59, 26, 99, 63,121,170, 26, 63, +147, 64, 88, 63,118,102, 38, 63, 77, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +118,102, 38, 63, 38,228, 82, 63,118,102, 38, 63, 77, 46, 94, 63,121,170, 26, 63,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121,170, 26, 63,147, 64, 88, 63,235,102, 22, 63, 59, 26, 99, 63,220,204, 12, 63, + 22, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 50, 3, 63, 58, 26, 99, 63, +220,204, 12, 63, 22, 56, 90, 63,235,102, 22, 63, 59, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,235,102, 22, 63, 59, 26, 99, 63,224,204, 12, 63,212,154,109, 63,204, 50, 3, 63, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,102,230, 62, 22,114,105, 63,204, 50, 3, 63, 58, 26, 99, 63, +224,204, 12, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,204, 12, 63, +212,154,109, 63,235,102, 22, 63, 59, 26, 99, 63,118,102, 38, 63, 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,120,102, 38, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,134,102,230, 62,242,187,116, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134,102,230, 62,242,187,116, 63,224,204, 12, 63, +212,154,109, 63,120,102, 38, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +118,102, 38, 63, 19,114,105, 63,120,102, 38, 63,242,187,116, 63,224,204, 12, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,204, 12, 63,212,154,109, 63,134,102,230, 62,242,187,116, 63,131,102,230, 62, + 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 50, 3, 63, 58, 26, 99, 63, +131,102,230, 62, 22,114,105, 63,131,102,230, 62, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,131,102,230, 62, 79, 46, 94, 63,118,222,253, 62,148, 64, 88, 63,204, 50, 3, 63, 58, 26, 99, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 22, 56, 90, 63,204, 50, 3, 63, 58, 26, 99, 63, +118,222,253, 62,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,222,253, 62, +148, 64, 88, 63,131,102,230, 62, 79, 46, 94, 63,130,102,230, 62, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,213,233, 76, 63, 35, 48, 21, 63,176,235, 70, 63,226,209, 22, 63, 80,234, 73, 63,146,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80,234, 73, 63,146,111, 11, 63, 1,200, 79, 63, + 94,152, 9, 63,213,233, 76, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 19,215, 82, 63,252, 29, 19, 63,213,233, 76, 63, 35, 48, 21, 63, 1,200, 79, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,200, 79, 63, 94,152, 9, 63, 80,234, 73, 63,146,111, 11, 63,193,204, 76, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,233, 76, 63, 35, 48, 21, 63, + 19,215, 82, 63,252, 29, 19, 63,220, 41, 80, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,220, 41, 80, 63,105, 60, 31, 63,164,219, 73, 63,173, 23, 33, 63,213,233, 76, 63, 35, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,235, 70, 63,226,209, 22, 63,213,233, 76, 63, 35, 48, 21, 63, +164,219, 73, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,219, 73, 63, +173, 23, 33, 63,220, 41, 80, 63,105, 60, 31, 63,196, 33, 77, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,169,158, 70, 63,200,160, 44, 63, 0, 0, 64, 63, 24, 28, 45, 63, 5,171, 67, 63,216, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5,171, 67, 63,216, 17, 34, 63,164,219, 73, 63, +173, 23, 33, 63,169,158, 70, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +196, 33, 77, 63,221, 52, 43, 63,169,158, 70, 63,200,160, 44, 63,164,219, 73, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,219, 73, 63,173, 23, 33, 63, 5,171, 67, 63,216, 17, 34, 63,176,235, 70, 63, +226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,124, 83, 63,217,228, 40, 63, +196, 33, 77, 63,221, 52, 43, 63,220, 41, 80, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,220, 41, 80, 63,105, 60, 31, 63,218, 20, 86, 63,143,140, 28, 63, 75,124, 83, 63,217,228, 40, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 45,200, 37, 63, 75,124, 83, 63,217,228, 40, 63, +218, 20, 86, 63,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 20, 86, 63, +143,140, 28, 63,220, 41, 80, 63,105, 60, 31, 63, 19,215, 82, 63,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,182, 32, 23, 63,176,235, 70, 63,226,209, 22, 63, 5,171, 67, 63,216, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5,171, 67, 63,216, 17, 34, 63,251, 84, 60, 63, +216, 17, 34, 63, 0, 0, 64, 63,182, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 80, 20, 57, 63,226,209, 22, 63, 0, 0, 64, 63,182, 32, 23, 63,251, 84, 60, 63,216, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251, 84, 60, 63,216, 17, 34, 63, 5,171, 67, 63,216, 17, 34, 63, 0, 0, 64, 63, + 24, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,182, 32, 23, 63, + 80, 20, 57, 63,226,209, 22, 63,169,156, 60, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,169,156, 60, 63, 96,116, 11, 63, 87, 99, 67, 63, 96,116, 11, 63, 0, 0, 64, 63,182, 32, 23, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,235, 70, 63,226,209, 22, 63, 0, 0, 64, 63,182, 32, 23, 63, + 87, 99, 67, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 99, 67, 63, + 96,116, 11, 63,169,156, 60, 63, 96,116, 11, 63, 0, 0, 64, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 96,102, 70, 63,244, 1, 0, 63,193,204, 76, 63, 0, 0, 0, 63, 80,234, 73, 63,146,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80,234, 73, 63,146,111, 11, 63, 87, 99, 67, 63, + 96,116, 11, 63, 96,102, 70, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63, 0, 0, 0, 63, 96,102, 70, 63,244, 1, 0, 63, 87, 99, 67, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 99, 67, 63, 96,116, 11, 63, 80,234, 73, 63,146,111, 11, 63,176,235, 70, 63, +226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 57, 63,244, 1, 0, 63, + 0, 0, 64, 63, 0, 0, 0, 63,169,156, 60, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,169,156, 60, 63, 96,116, 11, 63,176, 21, 54, 63,146,111, 11, 63,160,153, 57, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 51, 51, 63, 0, 0, 0, 63,160,153, 57, 63,244, 1, 0, 63, +176, 21, 54, 63,146,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176, 21, 54, 63, +146,111, 11, 63,169,156, 60, 63, 96,116, 11, 63, 80, 20, 57, 63,226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 93, 58,217, 62,144, 61, 57, 63, 19,196,217, 62, 85,123, 60, 63,253,230,198, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,123, 60, 63,253,230,198, 62,171,132, 67, 63, +253,230,198, 62, 0, 0, 64, 63, 93, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +112,194, 70, 63, 19,196,217, 62, 0, 0, 64, 63, 93, 58,217, 62,171,132, 67, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,132, 67, 63,253,230,198, 62, 85,123, 60, 63,253,230,198, 62, 0, 0, 64, 63, +211,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 93, 58,217, 62, +112,194, 70, 63, 19,196,217, 62,125, 84, 67, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,125, 84, 67, 63, 42,211,236, 62,131,171, 60, 63, 42,211,236, 62, 0, 0, 64, 63, 93, 58,217, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 61, 57, 63, 19,196,217, 62, 0, 0, 64, 63, 93, 58,217, 62, +131,171, 60, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,171, 60, 63, + 42,211,236, 62,125, 84, 67, 63, 42,211,236, 62, 0, 0, 64, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,160,153, 57, 63,244, 1, 0, 63, 63, 51, 51, 63, 0, 0, 0, 63,128, 46, 54, 63, 75,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128, 46, 54, 63, 75,207,236, 62,131,171, 60, 63, + 42,211,236, 62,160,153, 57, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63, 0, 0, 0, 63,160,153, 57, 63,244, 1, 0, 63,131,171, 60, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,171, 60, 63, 42,211,236, 62,128, 46, 54, 63, 75,207,236, 62,144, 61, 57, 63, + 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 96,102, 70, 63,244, 1, 0, 63, + 0, 0, 64, 63, 0, 0, 0, 63,125, 84, 67, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,125, 84, 67, 63, 42,211,236, 62,128,209, 73, 63, 75,207,236, 62, 96,102, 70, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204, 76, 63, 0, 0, 0, 63, 96,102, 70, 63,244, 1, 0, 63, +128,209, 73, 63, 75,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,209, 73, 63, + 75,207,236, 62,125, 84, 67, 63, 42,211,236, 62,112,194, 70, 63, 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 43, 22, 51, 63, 35, 48, 21, 63,237, 40, 45, 63,252, 29, 19, 63,255, 55, 48, 63, 94,152, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255, 55, 48, 63, 94,152, 9, 63,176, 21, 54, 63, +146,111, 11, 63, 43, 22, 51, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 80, 20, 57, 63,226,209, 22, 63, 43, 22, 51, 63, 35, 48, 21, 63,176, 21, 54, 63,146,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176, 21, 54, 63,146,111, 11, 63,255, 55, 48, 63, 94,152, 9, 63, 63, 51, 51, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43, 22, 51, 63, 35, 48, 21, 63, + 80, 20, 57, 63,226,209, 22, 63, 91, 36, 54, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 91, 36, 54, 63,173, 23, 33, 63, 36,214, 47, 63,105, 60, 31, 63, 43, 22, 51, 63, 35, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40, 45, 63,252, 29, 19, 63, 43, 22, 51, 63, 35, 48, 21, 63, + 36,214, 47, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36,214, 47, 63, +105, 60, 31, 63, 91, 36, 54, 63,173, 23, 33, 63, 60,222, 50, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,181,131, 44, 63,216,228, 40, 63,117,102, 38, 63, 45,200, 37, 63, 38,235, 41, 63,141,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38,235, 41, 63,141,140, 28, 63, 36,214, 47, 63, +105, 60, 31, 63,181,131, 44, 63,216,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 60,222, 50, 63,221, 52, 43, 63,181,131, 44, 63,216,228, 40, 63, 36,214, 47, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36,214, 47, 63,105, 60, 31, 63, 38,235, 41, 63,141,140, 28, 63,237, 40, 45, 63, +252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 97, 57, 63,200,160, 44, 63, + 60,222, 50, 63,221, 52, 43, 63, 91, 36, 54, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 91, 36, 54, 63,173, 23, 33, 63,251, 84, 60, 63,216, 17, 34, 63, 87, 97, 57, 63,200,160, 44, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 28, 45, 63, 87, 97, 57, 63,200,160, 44, 63, +251, 84, 60, 63,216, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251, 84, 60, 63, +216, 17, 34, 63, 91, 36, 54, 63,173, 23, 33, 63, 80, 20, 57, 63,226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,134, 14,128, 63, 39, 48, 21, 63,227, 30,122, 63,233,209, 22, 63,138, 29,125, 63,150,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138, 29,125, 63,150,111, 11, 63,159,125,129, 63, + 94,152, 9, 63,134, 14,128, 63, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +174, 73,193, 60,253, 29, 19, 63,209, 92,232, 57, 39, 48, 21, 63,114,207, 62, 60, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159,125,129, 63, 94,152, 9, 63,138, 29,125, 63,150,111, 11, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,209, 92,232, 57, 39, 48, 21, 63, +174, 73,193, 60,253, 29, 19, 63,214, 67, 87, 60,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,136,174,129, 63,110, 60, 31, 63,213, 14,125, 63,180, 23, 33, 63,134, 14,128, 63, 39, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,227, 30,122, 63,233,209, 22, 63,134, 14,128, 63, 39, 48, 21, 63, +213, 14,125, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 14,125, 63, +180, 23, 33, 63,136,174,129, 63,110, 60, 31, 63,121, 42,128, 63,230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,210,209,121, 63,212,160, 44, 63, 36, 51,115, 63, 36, 28, 45, 63, 49,222,118, 63,226, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49,222,118, 63,226, 17, 34, 63,213, 14,125, 63, +180, 23, 33, 63,210,209,121, 63,212,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +121, 42,128, 63,230, 52, 43, 63,210,209,121, 63,212,160, 44, 63,213, 14,125, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 14,125, 63,180, 23, 33, 63, 49,222,118, 63,226, 17, 34, 63,227, 30,122, 63, +233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,239,213, 60,223,228, 40, 63, +120,226,169, 58,230, 52, 43, 63,214, 67, 87, 60,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,214, 67, 87, 60,110, 60, 31, 63, 13,129, 20, 61,143,140, 28, 63,111,239,213, 60,223,228, 40, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61, 48,200, 37, 63,111,239,213, 60,223,228, 40, 63, + 13,129, 20, 61,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 13,129, 20, 61, +143,140, 28, 63,214, 67, 87, 60,110, 60, 31, 63,174, 73,193, 60,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 44, 51,115, 63,188, 32, 23, 63,227, 30,122, 63,233,209, 22, 63, 49,222,118, 63,226, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49,222,118, 63,226, 17, 34, 63, 31,136,111, 63, +225, 17, 34, 63, 44, 51,115, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +116, 71,108, 63,232,209, 22, 63, 44, 51,115, 63,188, 32, 23, 63, 31,136,111, 63,225, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31,136,111, 63,225, 17, 34, 63, 49,222,118, 63,226, 17, 34, 63, 36, 51,115, 63, + 36, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44, 51,115, 63,188, 32, 23, 63, +116, 71,108, 63,232,209, 22, 63,213,207,111, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,213,207,111, 63,100,116, 11, 63,138,150,118, 63,101,116, 11, 63, 44, 51,115, 63,188, 32, 23, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,227, 30,122, 63,233,209, 22, 63, 44, 51,115, 63,188, 32, 23, 63, +138,150,118, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,150,118, 63, +101,116, 11, 63,213,207,111, 63,100,116, 11, 63, 51, 51,115, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,138, 29,125, 63,150,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138, 29,125, 63,150,111, 11, 63,138,150,118, 63, +101,116, 11, 63,154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 51, 51,115, 63, 0, 0, 0, 63,154,153,121, 63,244, 1, 0, 63,138,150,118, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,150,118, 63,101,116, 11, 63,138, 29,125, 63,150,111, 11, 63,227, 30,122, 63, +233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,204,108, 63,244, 1, 0, 63, + 51, 51,115, 63, 0, 0, 0, 63,213,207,111, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,213,207,111, 63,100,116, 11, 63,213, 72,105, 63,149,111, 11, 63,205,204,108, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,102, 63, 0, 0, 0, 63,205,204,108, 63,244, 1, 0, 63, +213, 72,105, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 72,105, 63, +149,111, 11, 63,213,207,111, 63,100,116, 11, 63,116, 71,108, 63,232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 58, 51,115, 63, 73, 58,217, 62,192,112,108, 63, 4,196,217, 62,139,174,111, 63,223,230,198, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,174,111, 63,223,230,198, 62,239,183,118, 63, +227,230,198, 62, 58, 51,115, 63, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +179,245,121, 63, 6,196,217, 62, 58, 51,115, 63, 73, 58,217, 62,239,183,118, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,183,118, 63,227,230,198, 62,139,174,111, 63,223,230,198, 62, 65, 51,115, 63, +160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 58, 51,115, 63, 73, 58,217, 62, +179,245,121, 63, 6,196,217, 62,185,135,118, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,185,135,118, 63, 30,211,236, 62,180,222,111, 63, 30,211,236, 62, 58, 51,115, 63, 73, 58,217, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,112,108, 63, 4,196,217, 62, 58, 51,115, 63, 73, 58,217, 62, +180,222,111, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,222,111, 63, + 30,211,236, 62,185,135,118, 63, 30,211,236, 62, 51, 51,115, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,205,204,108, 63,244, 1, 0, 63,101,102,102, 63, 0, 0, 0, 63,170, 97,105, 63, 65,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170, 97,105, 63, 65,207,236, 62,180,222,111, 63, + 30,211,236, 62,205,204,108, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 51, 51,115, 63, 0, 0, 0, 63,205,204,108, 63,244, 1, 0, 63,180,222,111, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,222,111, 63, 30,211,236, 62,170, 97,105, 63, 65,207,236, 62,192,112,108, 63, + 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,121, 63,244, 1, 0, 63, + 51, 51,115, 63, 0, 0, 0, 63,185,135,118, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,185,135,118, 63, 30,211,236, 62,194, 4,125, 63, 67,207,236, 62,154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63,154,153,121, 63,244, 1, 0, 63, +194, 4,125, 63, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 4,125, 63, + 67,207,236, 62,185,135,118, 63, 30,211,236, 62,179,245,121, 63, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 76, 73,102, 63, 38, 48, 21, 63, 11, 92, 96, 63,253, 29, 19, 63, 33,107, 99, 63, 94,152, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 33,107, 99, 63, 94,152, 9, 63,213, 72,105, 63, +149,111, 11, 63, 76, 73,102, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +116, 71,108, 63,232,209, 22, 63, 76, 73,102, 63, 38, 48, 21, 63,213, 72,105, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 72,105, 63,149,111, 11, 63, 33,107, 99, 63, 94,152, 9, 63,101,102,102, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 76, 73,102, 63, 38, 48, 21, 63, +116, 71,108, 63,232,209, 22, 63,124, 87,105, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,124, 87,105, 63,180, 23, 33, 63, 65, 9, 99, 63,109, 60, 31, 63, 76, 73,102, 63, 38, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11, 92, 96, 63,253, 29, 19, 63, 76, 73,102, 63, 38, 48, 21, 63, + 65, 9, 99, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 9, 99, 63, +109, 60, 31, 63,124, 87,105, 63,180, 23, 33, 63, 87, 17,102, 63,229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,205,182, 95, 63,222,228, 40, 63,139,153, 89, 63, 45,200, 37, 63, 63, 30, 93, 63,143,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 30, 93, 63,143,140, 28, 63, 65, 9, 99, 63, +109, 60, 31, 63,205,182, 95, 63,222,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 87, 17,102, 63,229, 52, 43, 63,205,182, 95, 63,222,228, 40, 63, 65, 9, 99, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 9, 99, 63,109, 60, 31, 63, 63, 30, 93, 63,143,140, 28, 63, 11, 92, 96, 63, +253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,148,108, 63,211,160, 44, 63, + 87, 17,102, 63,229, 52, 43, 63,124, 87,105, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,124, 87,105, 63,180, 23, 33, 63, 31,136,111, 63,225, 17, 34, 63,118,148,108, 63,211,160, 44, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 36, 28, 45, 63,118,148,108, 63,211,160, 44, 63, + 31,136,111, 63,225, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31,136,111, 63, +225, 17, 34, 63,124, 87,105, 63,180, 23, 33, 63,116, 71,108, 63,232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 65, 65, 77, 62, 32, 48, 21, 63,152, 72, 53, 62,229,209, 22, 63, 47, 67, 65, 62,147,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47, 67, 65, 62,147,111, 11, 63,255,185, 88, 62, + 90,152, 9, 63, 65, 65, 77, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 64,246,100, 62,246, 29, 19, 63, 65, 65, 77, 62, 32, 48, 21, 63,255,185, 88, 62, 90,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255,185, 88, 62, 90,152, 9, 63, 47, 67, 65, 62,147,111, 11, 63,254,204, 76, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 65, 77, 62, 32, 48, 21, 63, + 64,246,100, 62,246, 29, 19, 63, 89, 65, 90, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 89, 65, 90, 62, 94, 60, 31, 63,107, 8, 65, 62,170, 23, 33, 63, 65, 65, 77, 62, 32, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152, 72, 53, 62,229,209, 22, 63, 65, 65, 77, 62, 32, 48, 21, 63, +107, 8, 65, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107, 8, 65, 62, +170, 23, 33, 63, 89, 65, 90, 62, 94, 60, 31, 63,230, 32, 78, 62,211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,105, 20, 52, 62,198,160, 44, 63,173,153, 25, 62, 27, 28, 45, 63,216, 69, 40, 62,220, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,216, 69, 40, 62,220, 17, 34, 63,107, 8, 65, 62, +170, 23, 33, 63,105, 20, 52, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +230, 32, 78, 62,211, 52, 43, 63,105, 20, 52, 62,198,160, 44, 63,107, 8, 65, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107, 8, 65, 62,170, 23, 33, 63,216, 69, 40, 62,220, 17, 34, 63,152, 72, 53, 62, +229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,139,103, 62,199,228, 40, 63, +230, 32, 78, 62,211, 52, 43, 63, 89, 65, 90, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 89, 65, 90, 62, 94, 60, 31, 63, 83,237,113, 62,130,140, 28, 63, 14,139,103, 62,199,228, 40, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 23,200, 37, 63, 14,139,103, 62,199,228, 40, 63, + 83,237,113, 62,130,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 83,237,113, 62, +130,140, 28, 63, 89, 65, 90, 62, 94, 60, 31, 63, 64,246,100, 62,246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,180,153, 25, 62,185, 32, 23, 63,152, 72, 53, 62,229,209, 22, 63,216, 69, 40, 62,220, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,216, 69, 40, 62,220, 17, 34, 63,133,237, 10, 62, +219, 17, 34, 63,180,153, 25, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +147,213,251, 61,228,209, 22, 63,180,153, 25, 62,185, 32, 23, 63,133,237, 10, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,237, 10, 62,219, 17, 34, 63,216, 69, 40, 62,220, 17, 34, 63,173,153, 25, 62, + 27, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,153, 25, 62,185, 32, 23, 63, +147,213,251, 61,228,209, 22, 63, 67, 12, 12, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 67, 12, 12, 62, 98,116, 11, 63, 34, 39, 39, 62, 98,116, 11, 63,180,153, 25, 62,185, 32, 23, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152, 72, 53, 62,229,209, 22, 63,180,153, 25, 62,185, 32, 23, 63, + 34, 39, 39, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 39, 39, 62, + 98,116, 11, 63, 67, 12, 12, 62, 98,116, 11, 63,181,153, 25, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 92, 51, 51, 62,244, 1, 0, 63,254,204, 76, 62, 0, 0, 0, 63, 47, 67, 65, 62,147,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47, 67, 65, 62,147,111, 11, 63, 34, 39, 39, 62, + 98,116, 11, 63, 92, 51, 51, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +181,153, 25, 62, 0, 0, 0, 63, 92, 51, 51, 62,244, 1, 0, 63, 34, 39, 39, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 39, 39, 62, 98,116, 11, 63, 47, 67, 65, 62,147,111, 11, 63,152, 72, 53, 62, +229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 62,244, 1, 0, 63, +181,153, 25, 62, 0, 0, 0, 63, 67, 12, 12, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 67, 12, 12, 62, 98,116, 11, 63,109,224,227, 61,147,111, 11, 63, 8, 0, 0, 62,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204,204, 61, 0, 0, 0, 63, 8, 0, 0, 62,244, 1, 0, 63, +109,224,227, 61,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,224,227, 61, +147,111, 11, 63, 67, 12, 12, 62, 98,116, 11, 63,147,213,251, 61,228,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,196,153, 25, 62, 73, 58,217, 62,171, 31,253, 61, 6,196,217, 62, 1,135, 11, 62,228,230,198, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,135, 11, 62,228,230,198, 62,153,172, 39, 62, +230,230,198, 62,196,153, 25, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +179,163, 52, 62, 7,196,217, 62,196,153, 25, 62, 73, 58,217, 62,153,172, 39, 62,230,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,153,172, 39, 62,230,230,198, 62, 1,135, 11, 62,228,230,198, 62,214,153, 25, 62, +165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196,153, 25, 62, 73, 58,217, 62, +179,163, 52, 62, 7,196,217, 62,202,235, 38, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,202,235, 38, 62, 33,211,236, 62,173, 71, 12, 62, 31,211,236, 62,196,153, 25, 62, 73, 58,217, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171, 31,253, 61, 6,196,217, 62,196,153, 25, 62, 73, 58,217, 62, +173, 71, 12, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173, 71, 12, 62, + 31,211,236, 62,202,235, 38, 62, 33,211,236, 62,181,153, 25, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 62,244, 1, 0, 63,215,204,204, 61, 0, 0, 0, 63,251,166,228, 61, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,166,228, 61, 67,207,236, 62,173, 71, 12, 62, + 31,211,236, 62, 8, 0, 0, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +181,153, 25, 62, 0, 0, 0, 63, 8, 0, 0, 62,244, 1, 0, 63,173, 71, 12, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173, 71, 12, 62, 31,211,236, 62,251,166,228, 61, 67,207,236, 62,171, 31,253, 61, + 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92, 51, 51, 62,244, 1, 0, 63, +181,153, 25, 62, 0, 0, 0, 63,202,235, 38, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,202,235, 38, 62, 33,211,236, 62,251,223, 64, 62, 67,207,236, 62, 92, 51, 51, 62,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,204, 76, 62, 0, 0, 0, 63, 92, 51, 51, 62,244, 1, 0, 63, +251,223, 64, 62, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,223, 64, 62, + 67,207,236, 62,202,235, 38, 62, 33,211,236, 62,179,163, 52, 62, 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 42,228,203, 61, 37, 48, 21, 63, 1,122,156, 61,254, 29, 19, 63,172,242,180, 61, 96,152, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,172,242,180, 61, 96,152, 9, 63,109,224,227, 61, +147,111, 11, 63, 42,228,203, 61, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +147,213,251, 61,228,209, 22, 63, 42,228,203, 61, 37, 48, 21, 63,109,224,227, 61,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,224,227, 61,147,111, 11, 63,172,242,180, 61, 96,152, 9, 63,215,204,204, 61, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,228,203, 61, 37, 48, 21, 63, +147,213,251, 61,228,209, 22, 63,208, 85,228, 61,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,208, 85,228, 61,179, 23, 33, 63,212,227,177, 61,110, 60, 31, 63, 42,228,203, 61, 37, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,122,156, 61,254, 29, 19, 63, 42,228,203, 61, 37, 48, 21, 63, +212,227,177, 61,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,227,177, 61, +110, 60, 31, 63,208, 85,228, 61,179, 23, 33, 63,175, 36,202, 61,228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 53, 80,151, 61,223,228, 40, 63,246,203, 76, 61, 48,200, 37, 63,166,139,130, 61,145,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,139,130, 61,145,140, 28, 63,212,227,177, 61, +110, 60, 31, 63, 53, 80,151, 61,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +175, 36,202, 61,228, 52, 43, 63, 53, 80,151, 61,223,228, 40, 63,212,227,177, 61,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,227,177, 61,110, 60, 31, 63,166,139,130, 61,145,140, 28, 63, 1,122,156, 61, +254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,201, 61,254, 61,207,160, 44, 63, +175, 36,202, 61,228, 52, 43, 63,208, 85,228, 61,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,208, 85,228, 61,179, 23, 33, 63,133,237, 10, 62,219, 17, 34, 63,201, 61,254, 61,207,160, 44, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,153, 25, 62, 27, 28, 45, 63,201, 61,254, 61,207,160, 44, 63, +133,237, 10, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,237, 10, 62, +219, 17, 34, 63,208, 85,228, 61,179, 23, 33, 63,147,213,251, 61,228,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,245, 6,205, 62, 37, 48, 21, 63,155, 10,193, 62,229,209, 22, 63,229, 7,199, 62,147,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229, 7,199, 62,147,111, 11, 63, 85,195,210, 62, + 96,152, 9, 63,245, 6,205, 62, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +128,225,216, 62,254, 29, 19, 63,245, 6,205, 62, 37, 48, 21, 63, 85,195,210, 62, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,195,210, 62, 96,152, 9, 63,229, 7,199, 62,147,111, 11, 63,202,204,204, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245, 6,205, 62, 37, 48, 21, 63, +128,225,216, 62,254, 29, 19, 63, 11,135,211, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 11,135,211, 62,110, 60, 31, 63,140,234,198, 62,179, 23, 33, 63,245, 6,205, 62, 37, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155, 10,193, 62,229,209, 22, 63,245, 6,205, 62, 37, 48, 21, 63, +140,234,198, 62,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,234,198, 62, +179, 23, 33, 63, 11,135,211, 62,110, 60, 31, 63,212,118,205, 62,228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,142,112,192, 62,207,160, 44, 63, 42, 51,179, 62, 28, 28, 45, 63, 61,137,186, 62,219, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,137,186, 62,219, 17, 34, 63,140,234,198, 62, +179, 23, 33, 63,142,112,192, 62,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +212,118,205, 62,228, 52, 43, 63,142,112,192, 62,207,160, 44, 63,140,234,198, 62,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,234,198, 62,179, 23, 33, 63, 61,137,186, 62,219, 17, 34, 63,155, 10,193, 62, +229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,243, 43,218, 62,223,228, 40, 63, +212,118,205, 62,228, 52, 43, 63, 11,135,211, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 11,135,211, 62,110, 60, 31, 63, 22, 93,223, 62,145,140, 28, 63,243, 43,218, 62,223,228, 40, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62, 48,200, 37, 63,243, 43,218, 62,223,228, 40, 63, + 22, 93,223, 62,145,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 93,223, 62, +145,140, 28, 63, 11,135,211, 62,110, 60, 31, 63,128,225,216, 62,254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 38, 51,179, 62,185, 32, 23, 63,155, 10,193, 62,229,209, 22, 63, 61,137,186, 62,219, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,137,186, 62,219, 17, 34, 63, 20,221,171, 62, +219, 17, 34, 63, 38, 51,179, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +180, 91,165, 62,229,209, 22, 63, 38, 51,179, 62,185, 32, 23, 63, 20,221,171, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20,221,171, 62,219, 17, 34, 63, 61,137,186, 62,219, 17, 34, 63, 42, 51,179, 62, + 28, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 51,179, 62,185, 32, 23, 63, +180, 91,165, 62,229,209, 22, 63,111,108,172, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,111,108,172, 62, 98,116, 11, 63,222,249,185, 62, 98,116, 11, 63, 38, 51,179, 62,185, 32, 23, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155, 10,193, 62,229,209, 22, 63, 38, 51,179, 62,185, 32, 23, 63, +222,249,185, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,249,185, 62, + 98,116, 11, 63,111,108,172, 62, 98,116, 11, 63, 38, 51,179, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,252,255,191, 62,244, 1, 0, 63,202,204,204, 62, 0, 0, 0, 63,229, 7,199, 62,147,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229, 7,199, 62,147,111, 11, 63,222,249,185, 62, + 98,116, 11, 63,252,255,191, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 38, 51,179, 62, 0, 0, 0, 63,252,255,191, 62,244, 1, 0, 63,222,249,185, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,249,185, 62, 98,116, 11, 63,229, 7,199, 62,147,111, 11, 63,155, 10,193, 62, +229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,102,166, 62,244, 1, 0, 63, + 38, 51,179, 62, 0, 0, 0, 63,111,108,172, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,111,108,172, 62, 98,116, 11, 63,104, 94,159, 62,147,111, 11, 63, 82,102,166, 62,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,153,153, 62, 0, 0, 0, 63, 82,102,166, 62,244, 1, 0, 63, +104, 94,159, 62,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104, 94,159, 62, +147,111, 11, 63,111,108,172, 62, 98,116, 11, 63,180, 91,165, 62,229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 30, 51,179, 62, 73, 58,217, 62, 39,174,165, 62, 7,196,217, 62,180, 41,172, 62,227,230,198, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180, 41,172, 62,227,230,198, 62,127, 60,186, 62, +225,230,198, 62, 30, 51,179, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 21,184,192, 62, 6,196,217, 62, 30, 51,179, 62, 73, 58,217, 62,127, 60,186, 62,225,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,127, 60,186, 62,225,230,198, 62,180, 41,172, 62,227,230,198, 62, 21, 51,179, 62, +165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 51,179, 62, 73, 58,217, 62, + 21,184,192, 62, 6,196,217, 62, 42,220,185, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 42,220,185, 62, 31,211,236, 62, 27,138,172, 62, 33,211,236, 62, 30, 51,179, 62, 73, 58,217, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,174,165, 62, 7,196,217, 62, 30, 51,179, 62, 73, 58,217, 62, + 27,138,172, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27,138,172, 62, + 33,211,236, 62, 42,220,185, 62, 31,211,236, 62, 38, 51,179, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 82,102,166, 62,244, 1, 0, 63,129,153,153, 62, 0, 0, 0, 63, 3,144,159, 62, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3,144,159, 62, 67,207,236, 62, 27,138,172, 62, + 33,211,236, 62, 82,102,166, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 38, 51,179, 62, 0, 0, 0, 63, 82,102,166, 62,244, 1, 0, 63, 27,138,172, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27,138,172, 62, 33,211,236, 62, 3,144,159, 62, 67,207,236, 62, 39,174,165, 62, + 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,252,255,191, 62,244, 1, 0, 63, + 38, 51,179, 62, 0, 0, 0, 63, 42,220,185, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 42,220,185, 62, 31,211,236, 62, 65,214,198, 62, 67,207,236, 62,252,255,191, 62,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,204,204, 62, 0, 0, 0, 63,252,255,191, 62,244, 1, 0, 63, + 65,214,198, 62, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65,214,198, 62, + 67,207,236, 62, 42,220,185, 62, 31,211,236, 62, 21,184,192, 62, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 95, 95,153, 62, 32, 48, 21, 63,224,132,141, 62,246, 29, 19, 63, 1,163,147, 62, 91,152, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,163,147, 62, 91,152, 9, 63,104, 94,159, 62, +147,111, 11, 63, 95, 95,153, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +180, 91,165, 62,229,209, 22, 63, 95, 95,153, 62, 32, 48, 21, 63,104, 94,159, 62,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104, 94,159, 62,147,111, 11, 63, 1,163,147, 62, 91,152, 9, 63,129,153,153, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95, 95,153, 62, 32, 48, 21, 63, +180, 91,165, 62,229,209, 22, 63,203,123,159, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,203,123,159, 62,170, 23, 33, 63, 84,223,146, 62, 94, 60, 31, 63, 95, 95,153, 62, 32, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,132,141, 62,246, 29, 19, 63, 95, 95,153, 62, 32, 48, 21, 63, + 84,223,146, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 84,223,146, 62, + 94, 60, 31, 63,203,123,159, 62,170, 23, 33, 63,141,239,152, 62,211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,121, 58,140, 62,199,228, 40, 63, 0, 0,128, 62, 23,200, 37, 63, 86, 9,135, 62,130,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86, 9,135, 62,130,140, 28, 63, 84,223,146, 62, + 94, 60, 31, 63,121, 58,140, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +141,239,152, 62,211, 52, 43, 63,121, 58,140, 62,199,228, 40, 63, 84,223,146, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 84,223,146, 62, 94, 60, 31, 63, 86, 9,135, 62,130,140, 28, 63,224,132,141, 62, +246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204,245,165, 62,198,160, 44, 63, +141,239,152, 62,211, 52, 43, 63,203,123,159, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,203,123,159, 62,170, 23, 33, 63, 20,221,171, 62,219, 17, 34, 63,204,245,165, 62,198,160, 44, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62, 28, 28, 45, 63,204,245,165, 62,198,160, 44, 63, + 20,221,171, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20,221,171, 62, +219, 17, 34, 63,203,123,159, 62,170, 23, 33, 63,180, 91,165, 62,229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,180,182, 25, 63, 38, 48, 21, 63,140,184, 19, 63,232,209, 22, 63, 43,183, 22, 63,149,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43,183, 22, 63,149,111, 11, 63,223,148, 28, 63, + 94,152, 9, 63,180,182, 25, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +245,163, 31, 63,253, 29, 19, 63,180,182, 25, 63, 38, 48, 21, 63,223,148, 28, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,223,148, 28, 63, 94,152, 9, 63, 43,183, 22, 63,149,111, 11, 63,155,153, 25, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,182, 25, 63, 38, 48, 21, 63, +245,163, 31, 63,253, 29, 19, 63,191,246, 28, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,191,246, 28, 63,109, 60, 31, 63,132,168, 22, 63,180, 23, 33, 63,180,182, 25, 63, 38, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,184, 19, 63,232,209, 22, 63,180,182, 25, 63, 38, 48, 21, 63, +132,168, 22, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132,168, 22, 63, +180, 23, 33, 63,191,246, 28, 63,109, 60, 31, 63,169,238, 25, 63,229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,138,107, 19, 63,211,160, 44, 63,220,204, 12, 63, 35, 28, 45, 63,225,119, 16, 63,225, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225,119, 16, 63,225, 17, 34, 63,132,168, 22, 63, +180, 23, 33, 63,138,107, 19, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +169,238, 25, 63,229, 52, 43, 63,138,107, 19, 63,211,160, 44, 63,132,168, 22, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132,168, 22, 63,180, 23, 33, 63,225,119, 16, 63,225, 17, 34, 63,140,184, 19, 63, +232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 73, 32, 63,221,228, 40, 63, +169,238, 25, 63,229, 52, 43, 63,191,246, 28, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,191,246, 28, 63,109, 60, 31, 63,192,225, 34, 63,142,140, 28, 63, 51, 73, 32, 63,221,228, 40, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 45,200, 37, 63, 51, 73, 32, 63,221,228, 40, 63, +192,225, 34, 63,142,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,225, 34, 63, +142,140, 28, 63,191,246, 28, 63,109, 60, 31, 63,245,163, 31, 63,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,212,204, 12, 63,188, 32, 23, 63,140,184, 19, 63,232,209, 22, 63,225,119, 16, 63,225, 17, 34, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225,119, 16, 63,225, 17, 34, 63,207, 33, 9, 63, +226, 17, 34, 63,212,204, 12, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 29,225, 5, 63,233,209, 22, 63,212,204, 12, 63,188, 32, 23, 63,207, 33, 9, 63,226, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207, 33, 9, 63,226, 17, 34, 63,225,119, 16, 63,225, 17, 34, 63,220,204, 12, 63, + 35, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,204, 12, 63,188, 32, 23, 63, + 29,225, 5, 63,233,209, 22, 63,118,105, 9, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,118,105, 9, 63,101,116, 11, 63, 43, 48, 16, 63,100,116, 11, 63,212,204, 12, 63,188, 32, 23, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,184, 19, 63,232,209, 22, 63,212,204, 12, 63,188, 32, 23, 63, + 43, 48, 16, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43, 48, 16, 63, +100,116, 11, 63,118,105, 9, 63,101,116, 11, 63,205,204, 12, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 51, 51, 19, 63,244, 1, 0, 63,155,153, 25, 63, 0, 0, 0, 63, 43,183, 22, 63,149,111, 11, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43,183, 22, 63,149,111, 11, 63, 43, 48, 16, 63, +100,116, 11, 63, 51, 51, 19, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +205,204, 12, 63, 0, 0, 0, 63, 51, 51, 19, 63,244, 1, 0, 63, 43, 48, 16, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43, 48, 16, 63,100,116, 11, 63, 43,183, 22, 63,149,111, 11, 63,140,184, 19, 63, +232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102,102, 6, 63,244, 1, 0, 63, +205,204, 12, 63, 0, 0, 0, 63,118,105, 9, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,118,105, 9, 63,101,116, 11, 63,118,226, 2, 63,149,111, 11, 63,102,102, 6, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,102,102, 6, 63,244, 1, 0, 63, +118,226, 2, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,226, 2, 63, +149,111, 11, 63,118,105, 9, 63,101,116, 11, 63, 29,225, 5, 63,233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,198,204, 12, 63, 72, 58,217, 62, 77, 10, 6, 63, 6,196,217, 62, 17, 72, 9, 63,227,230,198, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 17, 72, 9, 63,227,230,198, 62,117, 81, 16, 63, +223,230,198, 62,198,204, 12, 63, 72, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 64,143, 19, 63, 4,196,217, 62,198,204, 12, 63, 72, 58,217, 62,117, 81, 16, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117, 81, 16, 63,223,230,198, 62, 17, 72, 9, 63,227,230,198, 62,191,204, 12, 63, +160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198,204, 12, 63, 72, 58,217, 62, + 64,143, 19, 63, 4,196,217, 62, 76, 33, 16, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 76, 33, 16, 63, 30,211,236, 62, 71,120, 9, 63, 30,211,236, 62,198,204, 12, 63, 72, 58,217, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 77, 10, 6, 63, 6,196,217, 62,198,204, 12, 63, 72, 58,217, 62, + 71,120, 9, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 71,120, 9, 63, + 30,211,236, 62, 76, 33, 16, 63, 30,211,236, 62,205,204, 12, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,102,102, 6, 63,244, 1, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 62,251, 2, 63, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 62,251, 2, 63, 67,207,236, 62, 71,120, 9, 63, + 30,211,236, 62,102,102, 6, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +205,204, 12, 63, 0, 0, 0, 63,102,102, 6, 63,244, 1, 0, 63, 71,120, 9, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 71,120, 9, 63, 30,211,236, 62, 62,251, 2, 63, 67,207,236, 62, 77, 10, 6, 63, + 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 51, 19, 63,244, 1, 0, 63, +205,204, 12, 63, 0, 0, 0, 63, 76, 33, 16, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 76, 33, 16, 63, 30,211,236, 62, 86,158, 22, 63, 65,207,236, 62, 51, 51, 19, 63,244, 1, 0, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155,153, 25, 63, 0, 0, 0, 63, 51, 51, 19, 63,244, 1, 0, 63, + 86,158, 22, 63, 65,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,158, 22, 63, + 65,207,236, 62, 76, 33, 16, 63, 30,211,236, 62, 64,143, 19, 63, 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,233,197,255, 62, 39, 48, 21, 63,101,235,243, 62,252, 29, 19, 63,132, 9,250, 62, 94,152, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132, 9,250, 62, 94,152, 9, 63,118,226, 2, 63, +149,111, 11, 63,233,197,255, 62, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 29,225, 5, 63,233,209, 22, 63,233,197,255, 62, 39, 48, 21, 63,118,226, 2, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,226, 2, 63,149,111, 11, 63,132, 9,250, 62, 94,152, 9, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233,197,255, 62, 39, 48, 21, 63, + 29,225, 5, 63,233,209, 22, 63, 43,241, 2, 63,181, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 43,241, 2, 63,181, 23, 33, 63,225, 69,249, 62,110, 60, 31, 63,233,197,255, 62, 39, 48, 21, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,235,243, 62,252, 29, 19, 63,233,197,255, 62, 39, 48, 21, 63, +225, 69,249, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225, 69,249, 62, +110, 60, 31, 63, 43,241, 2, 63,181, 23, 33, 63, 30, 86,255, 62,230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 9,161,242, 62,223,228, 40, 63,129,102,230, 62, 48,200, 37, 63,222,111,237, 62,143,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,111,237, 62,143,140, 28, 63,225, 69,249, 62, +110, 60, 31, 63, 9,161,242, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 30, 86,255, 62,230, 52, 43, 63, 9,161,242, 62,223,228, 40, 63,225, 69,249, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225, 69,249, 62,110, 60, 31, 63,222,111,237, 62,143,140, 28, 63,101,235,243, 62, +252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 46, 46, 6, 63,211,160, 44, 63, + 30, 86,255, 62,230, 52, 43, 63, 43,241, 2, 63,181, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 43,241, 2, 63,181, 23, 33, 63,207, 33, 9, 63,226, 17, 34, 63, 46, 46, 6, 63,211,160, 44, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 35, 28, 45, 63, 46, 46, 6, 63,211,160, 44, 63, +207, 33, 9, 63,226, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207, 33, 9, 63, +226, 17, 34, 63, 43,241, 2, 63,181, 23, 33, 63, 29,225, 5, 63,233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,138,238, 85, 63, 72,220,187, 62,218,173, 82, 63, 55, 92,210, 62,229,189, 79, 63,173,208,189, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229,189, 79, 63,173,208,189, 62,230,250, 82, 63, +117,190,166, 62,138,238, 85, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +149,153, 89, 63,201,199,165, 62,138,238, 85, 63, 72,220,187, 62,230,250, 82, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230,250, 82, 63,117,190,166, 62,229,189, 79, 63,173,208,189, 62,198,119, 76, 63, + 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,111, 73, 63, 68,135,193, 62, +198,119, 76, 63, 90,150,169, 62,229,189, 79, 63,173,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,229,189, 79, 63,173,208,189, 62,176,175, 76, 63,192,159,213, 62,170,111, 73, 63, 68,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,112,194, 70, 63, 19,196,217, 62,170,111, 73, 63, 68,135,193, 62, +176,175, 76, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,175, 76, 63, +192,159,213, 62,229,189, 79, 63,173,208,189, 62,218,173, 82, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 52,175, 79, 63,218, 32,233, 62,193,204, 76, 63, 0, 0, 0, 63,128,209, 73, 63, 75,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,209, 73, 63, 75,207,236, 62,176,175, 76, 63, +192,159,213, 62, 52,175, 79, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +218,173, 82, 63, 55, 92,210, 62, 52,175, 79, 63,218, 32,233, 62,176,175, 76, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,175, 76, 63,192,159,213, 62,128,209, 73, 63, 75,207,236, 62,112,194, 70, 63, + 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,111, 73, 63, 68,135,193, 62, +112,194, 70, 63, 19,196,217, 62,171,132, 67, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,171,132, 67, 63,253,230,198, 62, 61, 29, 70, 63,114, 54,174, 62,170,111, 73, 63, 68,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198,119, 76, 63, 90,150,169, 62,170,111, 73, 63, 68,135,193, 62, + 61, 29, 70, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61, 29, 70, 63, +114, 54,174, 62,171,132, 67, 63,253,230,198, 62, 0, 0, 64, 63,211,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 52,175, 79, 63,218, 32,233, 62,218,173, 82, 63, 55, 92,210, 62, 56, 54, 86, 63, 58, 23,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 54, 86, 63, 58, 23,233, 62, 41, 51, 83, 63, + 24,252,255, 62, 52,175, 79, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +193,204, 76, 63, 0, 0, 0, 63, 52,175, 79, 63,218, 32,233, 62, 41, 51, 83, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 41, 51, 83, 63, 24,252,255, 62, 56, 54, 86, 63, 58, 23,233, 62,147,153, 89, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,252, 92, 63, 58, 23,233, 62, +147,153, 89, 63, 0, 0, 0, 63, 56, 54, 86, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 56, 54, 86, 63, 58, 23,233, 62,147,153, 89, 63,143,190,209, 62,239,252, 92, 63, 58, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 78,133, 96, 63, 55, 92,210, 62,239,252, 92, 63, 58, 23,233, 62, +147,153, 89, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63, +143,190,209, 62, 56, 54, 86, 63, 58, 23,233, 62,218,173, 82, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,138,238, 85, 63, 72,220,187, 62,149,153, 89, 63,201,199,165, 62,159, 68, 93, 63, 72,220,187, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159, 68, 93, 63, 72,220,187, 62,147,153, 89, 63, +143,190,209, 62,138,238, 85, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +218,173, 82, 63, 55, 92,210, 62,138,238, 85, 63, 72,220,187, 62,147,153, 89, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63,143,190,209, 62,159, 68, 93, 63, 72,220,187, 62, 78,133, 96, 63, + 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,252, 92, 63, 58, 23,233, 62, + 78,133, 96, 63, 55, 92,210, 62,242,131, 99, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,242,131, 99, 63,218, 32,233, 62,254,255, 95, 63, 24,252,255, 62,239,252, 92, 63, 58, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63, 0, 0, 0, 63,239,252, 92, 63, 58, 23,233, 62, +254,255, 95, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,255, 95, 63, + 24,252,255, 62,242,131, 99, 63,218, 32,233, 62,101,102,102, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,139,174,111, 63,223,230,198, 62,192,112,108, 63, 4,196,217, 62,133,195,105, 63, 37,135,193, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,195,105, 63, 37,135,193, 62,249, 21,109, 63, + 65, 54,174, 62,139,174,111, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 65, 51,115, 63,160,111,180, 62,139,174,111, 63,223,230,198, 62,249, 21,109, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,249, 21,109, 63, 65, 54,174, 62,133,195,105, 63, 37,135,193, 62,106,187,102, 63, + 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117, 99, 63,155,208,189, 62, +106,187,102, 63, 54,150,169, 62,133,195,105, 63, 37,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,133,195,105, 63, 37,135,193, 62,123,131,102, 63,181,159,213, 62, 70,117, 99, 63,155,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 78,133, 96, 63, 55, 92,210, 62, 70,117, 99, 63,155,208,189, 62, +123,131,102, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,131,102, 63, +181,159,213, 62,133,195,105, 63, 37,135,193, 62,192,112,108, 63, 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,170, 97,105, 63, 65,207,236, 62,101,102,102, 63, 0, 0, 0, 63,242,131, 99, 63,218, 32,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,242,131, 99, 63,218, 32,233, 62,123,131,102, 63, +181,159,213, 62,170, 97,105, 63, 65,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +192,112,108, 63, 4,196,217, 62,170, 97,105, 63, 65,207,236, 62,123,131,102, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,131,102, 63,181,159,213, 62,242,131, 99, 63,218, 32,233, 62, 78,133, 96, 63, + 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117, 99, 63,155,208,189, 62, + 78,133, 96, 63, 55, 92,210, 62,159, 68, 93, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,159, 68, 93, 63, 72,220,187, 62, 71, 56, 96, 63, 99,190,166, 62, 70,117, 99, 63,155,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,106,187,102, 63, 54,150,169, 62, 70,117, 99, 63,155,208,189, 62, + 71, 56, 96, 63, 99,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 71, 56, 96, 63, + 99,190,166, 62,159, 68, 93, 63, 72,220,187, 62,149,153, 89, 63,201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 33,107, 99, 63, 94,152, 9, 63, 11, 92, 96, 63,253, 29, 19, 63, 21,238, 92, 63,112,150, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,238, 92, 63,112,150, 9, 63,254,255, 95, 63, + 24,252,255, 62, 33,107, 99, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +101,102,102, 63, 0, 0, 0, 63, 33,107, 99, 63, 94,152, 9, 63,254,255, 95, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,255, 95, 63, 24,252,255, 62, 21,238, 92, 63,112,150, 9, 63,147,153, 89, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14, 69, 86, 63,112,150, 9, 63, +147,153, 89, 63, 0, 0, 0, 63, 21,238, 92, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 21,238, 92, 63,112,150, 9, 63,143,153, 89, 63,219, 98, 19, 63, 14, 69, 86, 63,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19,215, 82, 63,252, 29, 19, 63, 14, 69, 86, 63,112,150, 9, 63, +143,153, 89, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,143,153, 89, 63, +219, 98, 19, 63, 21,238, 92, 63,112,150, 9, 63, 11, 92, 96, 63,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 63, 30, 93, 63,143,140, 28, 63,139,153, 89, 63, 45,200, 37, 63,218, 20, 86, 63,143,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 20, 86, 63,143,140, 28, 63,143,153, 89, 63, +219, 98, 19, 63, 63, 30, 93, 63,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 11, 92, 96, 63,253, 29, 19, 63, 63, 30, 93, 63,143,140, 28, 63,143,153, 89, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,143,153, 89, 63,219, 98, 19, 63,218, 20, 86, 63,143,140, 28, 63, 19,215, 82, 63, +252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14, 69, 86, 63,112,150, 9, 63, + 19,215, 82, 63,252, 29, 19, 63, 1,200, 79, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 1,200, 79, 63, 94,152, 9, 63, 41, 51, 83, 63, 24,252,255, 62, 14, 69, 86, 63,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63, 0, 0, 0, 63, 14, 69, 86, 63,112,150, 9, 63, + 41, 51, 83, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 41, 51, 83, 63, + 24,252,255, 62, 1,200, 79, 63, 94,152, 9, 63,193,204, 76, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,237, 28, 18, 61, 60,220,187, 62,151, 35,188, 60, 46, 92,210, 62,218, 74, 60, 60,150,208,189, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 74, 60, 60,150,208,189, 62,195,197,197, 60, + 89,190,166, 62,237, 28, 18, 61, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +194,205, 76, 61,186,199,165, 62,237, 28, 18, 61, 60,220,187, 62,195,197,197, 60, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 23,131, 63, 89,190,166, 62,150,120,129, 63,150,208,189, 62, 15,171,127, 63, + 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,162,124, 63, 36,135,193, 62, + 15,171,127, 63, 52,150,169, 62,150,120,129, 63,150,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,150,120,129, 63,150,208,189, 62,244,226,127, 63,179,159,213, 62,241,162,124, 63, 36,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,245,121, 63, 6,196,217, 62,241,162,124, 63, 36,135,193, 62, +244,226,127, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,244,226,127, 63, +179,159,213, 62,150,120,129, 63,150,208,189, 62,142,240,130, 63, 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 59,113,129, 63,214, 32,233, 62, 0, 0,128, 63, 0, 0, 0, 63,194, 4,125, 63, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 4,125, 63, 67,207,236, 62,244,226,127, 63, +179,159,213, 62, 59,113,129, 63,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +142,240,130, 63, 46, 92,210, 62, 59,113,129, 63,214, 32,233, 62,244,226,127, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,244,226,127, 63,179,159,213, 62,194, 4,125, 63, 67,207,236, 62,179,245,121, 63, + 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,162,124, 63, 36,135,193, 62, +179,245,121, 63, 6,196,217, 62,239,183,118, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,239,183,118, 63,227,230,198, 62,133, 80,121, 63, 65, 54,174, 62,241,162,124, 63, 36,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15,171,127, 63, 52,150,169, 62,241,162,124, 63, 36,135,193, 62, +133, 80,121, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133, 80,121, 63, + 65, 54,174, 62,239,183,118, 63,227,230,198, 62, 65, 51,115, 63,160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,110,157, 56, 60,214, 32,233, 62,151, 35,188, 60, 46, 92,210, 62, 95,151, 22, 61, 55, 23,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95,151, 22, 61, 55, 23,233, 62,176,204,204, 60, + 24,252,255, 62,110,157, 56, 60,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +167, 79, 11, 38, 0, 0, 0, 63,110,157, 56, 60,214, 32,233, 62,176,204,204, 60, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,204,204, 60, 24,252,255, 62, 95,151, 22, 61, 55, 23,233, 62,215,204, 76, 61, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,129,129, 61, 57, 23,233, 62, +215,204, 76, 61, 0, 0, 0, 63, 95,151, 22, 61, 55, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 95,151, 22, 61, 55, 23,233, 62, 68,205, 76, 61,135,190,209, 62, 87,129,129, 61, 57, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92,196,157, 61, 49, 92,210, 62, 87,129,129, 61, 57, 23,233, 62, + 68,205, 76, 61,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,205, 76, 61, +135,190,209, 62, 95,151, 22, 61, 55, 23,233, 62,151, 35,188, 60, 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,237, 28, 18, 61, 60,220,187, 62,194,205, 76, 61,186,199,165, 62, 7,191,131, 61, 62,220,187, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 7,191,131, 61, 62,220,187, 62, 68,205, 76, 61, +135,190,209, 62,237, 28, 18, 61, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +151, 35,188, 60, 46, 92,210, 62,237, 28, 18, 61, 60,220,187, 62, 68,205, 76, 61,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,205, 76, 61,135,190,209, 62, 7,191,131, 61, 62,220,187, 62, 92,196,157, 61, + 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,129,129, 61, 57, 23,233, 62, + 92,196,157, 61, 49, 92,210, 62, 89,185,181, 61,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 89,185,181, 61,214, 32,233, 62,154,153,153, 61, 25,252,255, 62, 87,129,129, 61, 57, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 76, 61, 0, 0, 0, 63, 87,129,129, 61, 57, 23,233, 62, +154,153,153, 61, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,153, 61, + 25,252,255, 62, 89,185,181, 61,214, 32,233, 62,215,204,204, 61, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 1,135, 11, 62,228,230,198, 62,171, 31,253, 61, 6,196,217, 62,251,181,231, 61, 38,135,193, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,181,231, 61, 38,135,193, 62,204, 36, 1, 62, + 70, 54,174, 62, 1,135, 11, 62,228,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +214,153, 25, 62,165,111,180, 62, 1,135, 11, 62,228,230,198, 62,204, 36, 1, 62, 70, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 36, 1, 62, 70, 54,174, 62,251,181,231, 61, 38,135,193, 62, 70,117,207, 61, + 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 35, 68,181, 61,153,208,189, 62, + 70,117,207, 61, 54,150,169, 62,251,181,231, 61, 38,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,251,181,231, 61, 38,135,193, 62,164,181,205, 61,180,159,213, 62, 35, 68,181, 61,153,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92,196,157, 61, 49, 92,210, 62, 35, 68,181, 61,153,208,189, 62, +164,181,205, 61,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,181,205, 61, +180,159,213, 62,251,181,231, 61, 38,135,193, 62,171, 31,253, 61, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,251,166,228, 61, 67,207,236, 62,215,204,204, 61, 0, 0, 0, 63, 89,185,181, 61,214, 32,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 89,185,181, 61,214, 32,233, 62,164,181,205, 61, +180,159,213, 62,251,166,228, 61, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +171, 31,253, 61, 6,196,217, 62,251,166,228, 61, 67,207,236, 62,164,181,205, 61,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,181,205, 61,180,159,213, 62, 89,185,181, 61,214, 32,233, 62, 92,196,157, 61, + 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 35, 68,181, 61,153,208,189, 62, + 92,196,157, 61, 49, 92,210, 62, 7,191,131, 61, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 7,191,131, 61, 62,220,187, 62, 79, 92,155, 61, 91,190,166, 62, 35, 68,181, 61,153,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117,207, 61, 54,150,169, 62, 35, 68,181, 61,153,208,189, 62, + 79, 92,155, 61, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 79, 92,155, 61, + 91,190,166, 62, 7,191,131, 61, 62,220,187, 62,194,205, 76, 61,186,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,172,242,180, 61, 96,152, 9, 63, 1,122,156, 61,254, 29, 19, 63,100, 10,129, 61,113,150, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,100, 10,129, 61,113,150, 9, 63,154,153,153, 61, + 25,252,255, 62,172,242,180, 61, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +215,204,204, 61, 0, 0, 0, 63,172,242,180, 61, 96,152, 9, 63,154,153,153, 61, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,153, 61, 25,252,255, 62,100, 10,129, 61,113,150, 9, 63,215,204, 76, 61, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,132, 23, 61,113,150, 9, 63, +215,204, 76, 61, 0, 0, 0, 63,100, 10,129, 61,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,100, 10,129, 61,113,150, 9, 63, 91,204, 76, 61,220, 98, 19, 63,109,132, 23, 61,113,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,174, 73,193, 60,253, 29, 19, 63,109,132, 23, 61,113,150, 9, 63, + 91,204, 76, 61,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,204, 76, 61, +220, 98, 19, 63,100, 10,129, 61,113,150, 9, 63, 1,122,156, 61,254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,166,139,130, 61,145,140, 28, 63,246,203, 76, 61, 48,200, 37, 63, 13,129, 20, 61,143,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 13,129, 20, 61,143,140, 28, 63, 91,204, 76, 61, +220, 98, 19, 63,166,139,130, 61,145,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 1,122,156, 61,254, 29, 19, 63,166,139,130, 61,145,140, 28, 63, 91,204, 76, 61,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,204, 76, 61,220, 98, 19, 63, 13,129, 20, 61,143,140, 28, 63,174, 73,193, 60, +253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,132, 23, 61,113,150, 9, 63, +174, 73,193, 60,253, 29, 19, 63,114,207, 62, 60, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,114,207, 62, 60, 94,152, 9, 63,176,204,204, 60, 24,252,255, 62,109,132, 23, 61,113,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 76, 61, 0, 0, 0, 63,109,132, 23, 61,113,150, 9, 63, +176,204,204, 60, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,204,204, 60, + 24,252,255, 62,114,207, 62, 60, 94,152, 9, 63,167, 79, 11, 38, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,237, 83,113, 62, 79,220,187, 62, 63, 81,100, 62, 60, 92,210, 62,110,145, 88, 62,167,208,189, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,110,145, 88, 62,167,208,189, 62, 91,133,101, 62, +112,190,166, 62,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62,206,199,165, 62,237, 83,113, 62, 79,220,187, 62, 91,133,101, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,133,101, 62,112,190,166, 62,110,145, 88, 62,167,208,189, 62,239,120, 75, 62, + 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 88, 63, 62, 46,135,193, 62, +239,120, 75, 62, 70,150,169, 62,110,145, 88, 62,167,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,110,145, 88, 62,167,208,189, 62,170, 88, 76, 62,187,159,213, 62,144, 88, 63, 62, 46,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,163, 52, 62, 7,196,217, 62,144, 88, 63, 62, 46,135,193, 62, +170, 88, 76, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170, 88, 76, 62, +187,159,213, 62,110,145, 88, 62,167,208,189, 62, 63, 81,100, 62, 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,190, 86, 88, 62,221, 32,233, 62,254,204, 76, 62, 0, 0, 0, 63,251,223, 64, 62, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,223, 64, 62, 67,207,236, 62,170, 88, 76, 62, +187,159,213, 62,190, 86, 88, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 63, 81,100, 62, 60, 92,210, 62,190, 86, 88, 62,221, 32,233, 62,170, 88, 76, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170, 88, 76, 62,187,159,213, 62,251,223, 64, 62, 67,207,236, 62,179,163, 52, 62, + 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 88, 63, 62, 46,135,193, 62, +179,163, 52, 62, 7,196,217, 62,153,172, 39, 62,230,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,153,172, 39, 62,230,230,198, 62,213, 14, 50, 62, 78, 54,174, 62,144, 88, 63, 62, 46,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,120, 75, 62, 70,150,169, 62,144, 88, 63, 62, 46,135,193, 62, +213, 14, 50, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 14, 50, 62, + 78, 54,174, 62,153,172, 39, 62,230,230,198, 62,214,153, 25, 62,165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,190, 86, 88, 62,221, 32,233, 62, 63, 81,100, 62, 60, 92,210, 62,166,114,114, 62, 63, 23,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,114,114, 62, 63, 23,233, 62,126,102,102, 62, + 25,252,255, 62,190, 86, 88, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +254,204, 76, 62, 0, 0, 0, 63,190, 86, 88, 62,221, 32,233, 62,126,102,102, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,126,102,102, 62, 25,252,255, 62,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,198,134, 62, 63, 23,233, 62, + 0, 0,128, 62, 0, 0, 0, 63,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 62,149,190,209, 62,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 97,215,141, 62, 60, 92,210, 62,173,198,134, 62, 63, 23,233, 62, + 0, 0,128, 62,149,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, +149,190,209, 62,166,114,114, 62, 63, 23,233, 62, 63, 81,100, 62, 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 62,206,199,165, 62, 9, 86,135, 62, 79,220,187, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 62, +149,190,209, 62,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 63, 81,100, 62, 60, 92,210, 62,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 62,149,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,149,190,209, 62, 9, 86,135, 62, 79,220,187, 62, 97,215,141, 62, + 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,198,134, 62, 63, 23,233, 62, + 97,215,141, 62, 60, 92,210, 62,161,212,147, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,161,212,147, 62,221, 32,233, 62,193,204,140, 62, 25,252,255, 62,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63,173,198,134, 62, 63, 23,233, 62, +193,204,140, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204,140, 62, + 25,252,255, 62,161,212,147, 62,221, 32,233, 62,129,153,153, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,180, 41,172, 62,227,230,198, 62, 39,174,165, 62, 7,196,217, 62,184, 83,160, 62, 46,135,193, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,184, 83,160, 62, 46,135,193, 62,150,248,166, 62, + 78, 54,174, 62,180, 41,172, 62,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 21, 51,179, 62,165,111,180, 62,180, 41,172, 62,227,230,198, 62,150,248,166, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150,248,166, 62, 78, 54,174, 62,184, 83,160, 62, 46,135,193, 62,137, 67,154, 62, + 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 73,183,147, 62,167,208,189, 62, +137, 67,154, 62, 70,150,169, 62,184, 83,160, 62, 46,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,184, 83,160, 62, 46,135,193, 62,171,211,153, 62,187,159,213, 62, 73,183,147, 62,167,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 97,215,141, 62, 60, 92,210, 62, 73,183,147, 62,167,208,189, 62, +171,211,153, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,211,153, 62, +187,159,213, 62,184, 83,160, 62, 46,135,193, 62, 39,174,165, 62, 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 3,144,159, 62, 67,207,236, 62,129,153,153, 62, 0, 0, 0, 63,161,212,147, 62,221, 32,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,161,212,147, 62,221, 32,233, 62,171,211,153, 62, +187,159,213, 62, 3,144,159, 62, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 39,174,165, 62, 7,196,217, 62, 3,144,159, 62, 67,207,236, 62,171,211,153, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,211,153, 62,187,159,213, 62,161,212,147, 62,221, 32,233, 62, 97,215,141, 62, + 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 73,183,147, 62,167,208,189, 62, + 97,215,141, 62, 60, 92,210, 62, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 9, 86,135, 62, 79,220,187, 62, 82, 61,141, 62,112,190,166, 62, 73,183,147, 62,167,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,137, 67,154, 62, 70,150,169, 62, 73,183,147, 62,167,208,189, 62, + 82, 61,141, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82, 61,141, 62, +112,190,166, 62, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 62,206,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 1,163,147, 62, 91,152, 9, 63,224,132,141, 62,246, 29, 19, 63,251,168,134, 62,107,150, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,168,134, 62,107,150, 9, 63,193,204,140, 62, + 25,252,255, 62, 1,163,147, 62, 91,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +129,153,153, 62, 0, 0, 0, 63, 1,163,147, 62, 91,152, 9, 63,193,204,140, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204,140, 62, 25,252,255, 62,251,168,134, 62,107,150, 9, 63, 0, 0,128, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,174,114, 62,107,150, 9, 63, + 0, 0,128, 62, 0, 0, 0, 63,251,168,134, 62,107,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,251,168,134, 62,107,150, 9, 63, 0, 0,128, 62,209, 98, 19, 63, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,246,100, 62,246, 29, 19, 63, 11,174,114, 62,107,150, 9, 63, + 0, 0,128, 62,209, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, +209, 98, 19, 63,251,168,134, 62,107,150, 9, 63,224,132,141, 62,246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 62, 23,200, 37, 63, 83,237,113, 62,130,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 83,237,113, 62,130,140, 28, 63, 0, 0,128, 62, +209, 98, 19, 63, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +224,132,141, 62,246, 29, 19, 63, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 62,209, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,209, 98, 19, 63, 83,237,113, 62,130,140, 28, 63, 64,246,100, 62, +246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,174,114, 62,107,150, 9, 63, + 64,246,100, 62,246, 29, 19, 63,255,185, 88, 62, 90,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,255,185, 88, 62, 90,152, 9, 63,126,102,102, 62, 25,252,255, 62, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63, 11,174,114, 62,107,150, 9, 63, +126,102,102, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,126,102,102, 62, + 25,252,255, 62,255,185, 88, 62, 90,152, 9, 63,254,204, 76, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 63, 16,223, 62, 62,220,187, 62,233,142,216, 62, 49, 92,210, 62,248,174,210, 62,153,208,189, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,248,174,210, 62,153,208,189, 62,237, 40,217, 62, + 91,190,166, 62, 63, 16,223, 62, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 72,102,230, 62,183,199,165, 62, 63, 16,223, 62, 62,220,187, 62,237, 40,217, 62, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40,217, 62, 91,190,166, 62,248,174,210, 62,153,208,189, 62,175, 34,204, 62, + 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129, 18,198, 62, 37,135,193, 62, +175, 34,204, 62, 54,150,169, 62,248,174,210, 62,153,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,248,174,210, 62,153,208,189, 62,151,146,204, 62,180,159,213, 62,129, 18,198, 62, 37,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,184,192, 62, 6,196,217, 62,129, 18,198, 62, 37,135,193, 62, +151,146,204, 62,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,151,146,204, 62, +180,159,213, 62,248,174,210, 62,153,208,189, 62,233,142,216, 62, 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,170,145,210, 62,214, 32,233, 62,202,204,204, 62, 0, 0, 0, 63, 65,214,198, 62, 67,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65,214,198, 62, 67,207,236, 62,151,146,204, 62, +180,159,213, 62,170,145,210, 62,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +233,142,216, 62, 49, 92,210, 62,170,145,210, 62,214, 32,233, 62,151,146,204, 62,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,151,146,204, 62,180,159,213, 62, 65,214,198, 62, 67,207,236, 62, 21,184,192, 62, + 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129, 18,198, 62, 37,135,193, 62, + 21,184,192, 62, 6,196,217, 62,127, 60,186, 62,225,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,127, 60,186, 62,225,230,198, 62,154,109,191, 62, 68, 54,174, 62,129, 18,198, 62, 37,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 34,204, 62, 54,150,169, 62,129, 18,198, 62, 37,135,193, 62, +154,109,191, 62, 68, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,109,191, 62, + 68, 54,174, 62,127, 60,186, 62,225,230,198, 62, 21, 51,179, 62,165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,170,145,210, 62,214, 32,233, 62,233,142,216, 62, 49, 92,210, 62,171,159,223, 62, 57, 23,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,159,223, 62, 57, 23,233, 62,154,153,217, 62, + 24,252,255, 62,170,145,210, 62,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +202,204,204, 62, 0, 0, 0, 63,170,145,210, 62,214, 32,233, 62,154,153,217, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,217, 62, 24,252,255, 62,171,159,223, 62, 57, 23,233, 62,101,102,230, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 45,237, 62, 55, 23,233, 62, +101,102,230, 62, 0, 0, 0, 63,171,159,223, 62, 57, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,171,159,223, 62, 57, 23,233, 62, 88,102,230, 62,135,190,209, 62, 20, 45,237, 62, 55, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,199, 61,244, 62, 46, 92,210, 62, 20, 45,237, 62, 55, 23,233, 62, + 88,102,230, 62,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,102,230, 62, +135,190,209, 62,171,159,223, 62, 57, 23,233, 62,233,142,216, 62, 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 63, 16,223, 62, 62,220,187, 62, 72,102,230, 62,183,199,165, 62, 99,188,237, 62, 60,220,187, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 99,188,237, 62, 60,220,187, 62, 88,102,230, 62, +135,190,209, 62, 63, 16,223, 62, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +233,142,216, 62, 49, 92,210, 62, 63, 16,223, 62, 62,220,187, 62, 88,102,230, 62,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,102,230, 62,135,190,209, 62, 99,188,237, 62, 60,220,187, 62,199, 61,244, 62, + 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 45,237, 62, 55, 23,233, 62, +199, 61,244, 62, 46, 92,210, 62, 21, 59,250, 62,213, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 21, 59,250, 62,213, 32,233, 62, 53, 51,243, 62, 24,252,255, 62, 20, 45,237, 62, 55, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,230, 62, 0, 0, 0, 63, 20, 45,237, 62, 55, 23,233, 62, + 53, 51,243, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 51,243, 62, + 24,252,255, 62, 21, 59,250, 62,213, 32,233, 62, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 17, 72, 9, 63,227,230,198, 62, 77, 10, 6, 63, 6,196,217, 62, 15, 93, 3, 63, 36,135,193, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15, 93, 3, 63, 36,135,193, 62,123,175, 6, 63, + 65, 54,174, 62, 17, 72, 9, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +191,204, 12, 63,160,111,180, 62, 17, 72, 9, 63,227,230,198, 62,123,175, 6, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,175, 6, 63, 65, 54,174, 62, 15, 93, 3, 63, 36,135,193, 62,241, 84, 0, 63, + 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 29,250, 62,150,208,189, 62, +241, 84, 0, 63, 52,150,169, 62, 15, 93, 3, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 15, 93, 3, 63, 36,135,193, 62, 12, 29, 0, 63,179,159,213, 62,169, 29,250, 62,150,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,199, 61,244, 62, 46, 92,210, 62,169, 29,250, 62,150,208,189, 62, + 12, 29, 0, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 12, 29, 0, 63, +179,159,213, 62, 15, 93, 3, 63, 36,135,193, 62, 77, 10, 6, 63, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 62,251, 2, 63, 67,207,236, 62, 0, 0, 0, 63, 0, 0, 0, 63, 21, 59,250, 62,213, 32,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 59,250, 62,213, 32,233, 62, 12, 29, 0, 63, +179,159,213, 62, 62,251, 2, 63, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 77, 10, 6, 63, 6,196,217, 62, 62,251, 2, 63, 67,207,236, 62, 12, 29, 0, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 12, 29, 0, 63,179,159,213, 62, 21, 59,250, 62,213, 32,233, 62,199, 61,244, 62, + 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 29,250, 62,150,208,189, 62, +199, 61,244, 62, 46, 92,210, 62, 99,188,237, 62, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 99,188,237, 62, 60,220,187, 62,164,163,243, 62, 89,190,166, 62,169, 29,250, 62,150,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241, 84, 0, 63, 52,150,169, 62,169, 29,250, 62,150,208,189, 62, +164,163,243, 62, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,163,243, 62, + 89,190,166, 62, 99,188,237, 62, 60,220,187, 62, 72,102,230, 62,183,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,132, 9,250, 62, 94,152, 9, 63,101,235,243, 62,252, 29, 19, 63,114, 15,237, 62,113,150, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,114, 15,237, 62,113,150, 9, 63, 53, 51,243, 62, + 24,252,255, 62,132, 9,250, 62, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,132, 9,250, 62, 94,152, 9, 63, 53, 51,243, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 51,243, 62, 24,252,255, 62,114, 15,237, 62,113,150, 9, 63,101,102,230, 62, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,103,189,223, 62,112,150, 9, 63, +101,102,230, 62, 0, 0, 0, 63,114, 15,237, 62,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,114, 15,237, 62,113,150, 9, 63,117,102,230, 62,220, 98, 19, 63,103,189,223, 62,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,225,216, 62,254, 29, 19, 63,103,189,223, 62,112,150, 9, 63, +117,102,230, 62,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102,230, 62, +220, 98, 19, 63,114, 15,237, 62,113,150, 9, 63,101,235,243, 62,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,222,111,237, 62,143,140, 28, 63,129,102,230, 62, 48,200, 37, 63, 22, 93,223, 62,145,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 93,223, 62,145,140, 28, 63,117,102,230, 62, +220, 98, 19, 63,222,111,237, 62,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +101,235,243, 62,252, 29, 19, 63,222,111,237, 62,143,140, 28, 63,117,102,230, 62,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102,230, 62,220, 98, 19, 63, 22, 93,223, 62,145,140, 28, 63,128,225,216, 62, +254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,103,189,223, 62,112,150, 9, 63, +128,225,216, 62,254, 29, 19, 63, 85,195,210, 62, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 85,195,210, 62, 96,152, 9, 63,154,153,217, 62, 24,252,255, 62,103,189,223, 62,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,230, 62, 0, 0, 0, 63,103,189,223, 62,112,150, 9, 63, +154,153,217, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,217, 62, + 24,252,255, 62, 85,195,210, 62, 96,152, 9, 63,202,204,204, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 97,187, 34, 63, 72,220,187, 62,178,122, 31, 63, 55, 92,210, 62,186,138, 28, 63,155,208,189, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,186,138, 28, 63,155,208,189, 62,185,199, 31, 63, + 96,190,166, 62, 97,187, 34, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +107,102, 38, 63,201,199,165, 62, 97,187, 34, 63, 72,220,187, 62,185,199, 31, 63, 96,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,185,199, 31, 63, 96,190,166, 62,186,138, 28, 63,155,208,189, 62,150, 68, 25, 63, + 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123, 60, 22, 63, 36,135,193, 62, +150, 68, 25, 63, 54,150,169, 62,186,138, 28, 63,155,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,186,138, 28, 63,155,208,189, 62,133,124, 25, 63,181,159,213, 62,123, 60, 22, 63, 36,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,143, 19, 63, 4,196,217, 62,123, 60, 22, 63, 36,135,193, 62, +133,124, 25, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,124, 25, 63, +181,159,213, 62,186,138, 28, 63,155,208,189, 62,178,122, 31, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 14,124, 28, 63,218, 32,233, 62,155,153, 25, 63, 0, 0, 0, 63, 86,158, 22, 63, 65,207,236, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,158, 22, 63, 65,207,236, 62,133,124, 25, 63, +181,159,213, 62, 14,124, 28, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +178,122, 31, 63, 55, 92,210, 62, 14,124, 28, 63,218, 32,233, 62,133,124, 25, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,124, 25, 63,181,159,213, 62, 86,158, 22, 63, 65,207,236, 62, 64,143, 19, 63, + 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123, 60, 22, 63, 36,135,193, 62, + 64,143, 19, 63, 4,196,217, 62,117, 81, 16, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,117, 81, 16, 63,223,230,198, 62, 7,234, 18, 63, 65, 54,174, 62,123, 60, 22, 63, 36,135,193, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150, 68, 25, 63, 54,150,169, 62,123, 60, 22, 63, 36,135,193, 62, + 7,234, 18, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 7,234, 18, 63, + 65, 54,174, 62,117, 81, 16, 63,223,230,198, 62,191,204, 12, 63,160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 14,124, 28, 63,218, 32,233, 62,178,122, 31, 63, 55, 92,210, 62, 17, 3, 35, 63, 58, 23,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 17, 3, 35, 63, 58, 23,233, 62, 2, 0, 32, 63, + 24,252,255, 62, 14,124, 28, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +155,153, 25, 63, 0, 0, 0, 63, 14,124, 28, 63,218, 32,233, 62, 2, 0, 32, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 32, 63, 24,252,255, 62, 17, 3, 35, 63, 58, 23,233, 62,109,102, 38, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,201, 41, 63, 58, 23,233, 62, +109,102, 38, 63, 0, 0, 0, 63, 17, 3, 35, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 17, 3, 35, 63, 58, 23,233, 62,109,102, 38, 63,143,190,209, 62,200,201, 41, 63, 58, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 82, 45, 63, 55, 92,210, 62,200,201, 41, 63, 58, 23,233, 62, +109,102, 38, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63, +143,190,209, 62, 17, 3, 35, 63, 58, 23,233, 62,178,122, 31, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 97,187, 34, 63, 72,220,187, 62,107,102, 38, 63,201,199,165, 62,118, 17, 42, 63, 72,220,187, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118, 17, 42, 63, 72,220,187, 62,109,102, 38, 63, +143,190,209, 62, 97,187, 34, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +178,122, 31, 63, 55, 92,210, 62, 97,187, 34, 63, 72,220,187, 62,109,102, 38, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63,143,190,209, 62,118, 17, 42, 63, 72,220,187, 62, 38, 82, 45, 63, + 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,201, 41, 63, 58, 23,233, 62, + 38, 82, 45, 63, 55, 92,210, 62,204, 80, 48, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,204, 80, 48, 63,218, 32,233, 62,215,204, 44, 63, 23,252,255, 62,200,201, 41, 63, 58, 23,233, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63, 0, 0, 0, 63,200,201, 41, 63, 58, 23,233, 62, +215,204, 44, 63, 23,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 44, 63, + 23,252,255, 62,204, 80, 48, 63,218, 32,233, 62, 63, 51, 51, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 85,123, 60, 63,253,230,198, 62,144, 61, 57, 63, 19,196,217, 62, 86,144, 54, 63, 68,135,193, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,144, 54, 63, 68,135,193, 62,196,226, 57, 63, +114, 54,174, 62, 85,123, 60, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63,211,111,180, 62, 85,123, 60, 63,253,230,198, 62,196,226, 57, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196,226, 57, 63,114, 54,174, 62, 86,144, 54, 63, 68,135,193, 62, 58,136, 51, 63, + 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27, 66, 48, 63,173,208,189, 62, + 58,136, 51, 63, 90,150,169, 62, 86,144, 54, 63, 68,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 86,144, 54, 63, 68,135,193, 62, 80, 80, 51, 63,192,159,213, 62, 27, 66, 48, 63,173,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 82, 45, 63, 55, 92,210, 62, 27, 66, 48, 63,173,208,189, 62, + 80, 80, 51, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80, 80, 51, 63, +192,159,213, 62, 86,144, 54, 63, 68,135,193, 62,144, 61, 57, 63, 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,128, 46, 54, 63, 75,207,236, 62, 63, 51, 51, 63, 0, 0, 0, 63,204, 80, 48, 63,218, 32,233, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 80, 48, 63,218, 32,233, 62, 80, 80, 51, 63, +192,159,213, 62,128, 46, 54, 63, 75,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +144, 61, 57, 63, 19,196,217, 62,128, 46, 54, 63, 75,207,236, 62, 80, 80, 51, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80, 80, 51, 63,192,159,213, 62,204, 80, 48, 63,218, 32,233, 62, 38, 82, 45, 63, + 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27, 66, 48, 63,173,208,189, 62, + 38, 82, 45, 63, 55, 92,210, 62,118, 17, 42, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,118, 17, 42, 63, 72,220,187, 62, 26, 5, 45, 63,117,190,166, 62, 27, 66, 48, 63,173,208,189, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 58,136, 51, 63, 90,150,169, 62, 27, 66, 48, 63,173,208,189, 62, + 26, 5, 45, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 26, 5, 45, 63, +117,190,166, 62,118, 17, 42, 63, 72,220,187, 62,107,102, 38, 63,201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,255, 55, 48, 63, 94,152, 9, 63,237, 40, 45, 63,252, 29, 19, 63,242,186, 41, 63,112,150, 9, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,242,186, 41, 63,112,150, 9, 63,215,204, 44, 63, + 23,252,255, 62,255, 55, 48, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 63, 51, 51, 63, 0, 0, 0, 63,255, 55, 48, 63, 94,152, 9, 63,215,204, 44, 63, 23,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 44, 63, 23,252,255, 62,242,186, 41, 63,112,150, 9, 63,109,102, 38, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 17, 35, 63,112,150, 9, 63, +109,102, 38, 63, 0, 0, 0, 63,242,186, 41, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,242,186, 41, 63,112,150, 9, 63,113,102, 38, 63,219, 98, 19, 63,235, 17, 35, 63,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245,163, 31, 63,253, 29, 19, 63,235, 17, 35, 63,112,150, 9, 63, +113,102, 38, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,102, 38, 63, +219, 98, 19, 63,242,186, 41, 63,112,150, 9, 63,237, 40, 45, 63,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 38,235, 41, 63,141,140, 28, 63,117,102, 38, 63, 45,200, 37, 63,192,225, 34, 63,142,140, 28, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,225, 34, 63,142,140, 28, 63,113,102, 38, 63, +219, 98, 19, 63, 38,235, 41, 63,141,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +237, 40, 45, 63,252, 29, 19, 63, 38,235, 41, 63,141,140, 28, 63,113,102, 38, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,102, 38, 63,219, 98, 19, 63,192,225, 34, 63,142,140, 28, 63,245,163, 31, 63, +253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 17, 35, 63,112,150, 9, 63, +245,163, 31, 63,253, 29, 19, 63,223,148, 28, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,223,148, 28, 63, 94,152, 9, 63, 2, 0, 32, 63, 24,252,255, 62,235, 17, 35, 63,112,150, 9, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63, 0, 0, 0, 63,235, 17, 35, 63,112,150, 9, 63, + 2, 0, 32, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 32, 63, + 24,252,255, 62,223,148, 28, 63, 94,152, 9, 63,155,153, 25, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,188,129,107, 63, 66, 45,128, 62,235, 71, 99, 63,222, 76,120, 62, 94, 37,106, 63, 84, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94, 37,106, 63, 84, 97, 83, 62, 65, 51,115, 63, +248,151, 97, 62,188,129,107, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 65, 51,115, 63,151, 83,135, 62,188,129,107, 63, 66, 45,128, 62, 65, 51,115, 63,248,151, 97, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,248,151, 97, 62, 94, 37,106, 63, 84, 97, 83, 62, 65, 51,115, 63, + 90,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188,129,107, 63, 66, 45,128, 62, + 65, 51,115, 63,151, 83,135, 62,142,123,108, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,142,123,108, 63,169,144,151, 62,231, 50,101, 63, 17,201,146, 62,188,129,107, 63, 66, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 71, 99, 63,222, 76,120, 62,188,129,107, 63, 66, 45,128, 62, +231, 50,101, 63, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231, 50,101, 63, + 17,201,146, 62,142,123,108, 63,169,144,151, 62,106,187,102, 63, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 71, 56, 96, 63, 99,190,166, 62,149,153, 89, 63,201,199,165, 62, 22,238, 93, 63,243,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,238, 93, 63,243,101,144, 62,231, 50,101, 63, + 17,201,146, 62, 71, 56, 96, 63, 99,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +106,187,102, 63, 54,150,169, 62, 71, 56, 96, 63, 99,190,166, 62,231, 50,101, 63, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231, 50,101, 63, 17,201,146, 62, 22,238, 93, 63,243,101,144, 62,235, 71, 99, 63, +222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,249, 21,109, 63, 65, 54,174, 62, +106,187,102, 63, 54,150,169, 62,142,123,108, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,142,123,108, 63,169,144,151, 62, 65, 51,115, 63, 93,231,157, 62,249, 21,109, 63, 65, 54,174, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,160,111,180, 62,249, 21,109, 63, 65, 54,174, 62, + 65, 51,115, 63, 93,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, + 93,231,157, 62,142,123,108, 63,169,144,151, 62, 65, 51,115, 63,151, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63, 79,162,115, 62,235, 71, 99, 63,222, 76,120, 62, 22,238, 93, 63,243,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,238, 93, 63,243,101,144, 62, 21, 69, 85, 63, + 3,102,144, 62,149,153, 89, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 68,235, 79, 63, 37, 77,120, 62,149,153, 89, 63, 79,162,115, 62, 21, 69, 85, 63, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 69, 85, 63, 3,102,144, 62, 22,238, 93, 63,243,101,144, 62,149,153, 89, 63, +201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63, 79,162,115, 62, + 68,235, 79, 63, 37, 77,120, 62, 24,186, 83, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 24,186, 83, 63,245,176, 70, 62, 22,121, 95, 63,204,176, 70, 62,149,153, 89, 63, 79,162,115, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 71, 99, 63,222, 76,120, 62,149,153, 89, 63, 79,162,115, 62, + 22,121, 95, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,121, 95, 63, +204,176, 70, 62, 24,186, 83, 63,245,176, 70, 62,152,153, 89, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 61,119,103, 63,179,253, 30, 62, 65, 51,115, 63, 90,111, 52, 62, 94, 37,106, 63, 84, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94, 37,106, 63, 84, 97, 83, 62, 22,121, 95, 63, +204,176, 70, 62, 61,119,103, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +152,153, 89, 63,198, 31, 23, 62, 61,119,103, 63,179,253, 30, 62, 22,121, 95, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,121, 95, 63,204,176, 70, 62, 94, 37,106, 63, 84, 97, 83, 62,235, 71, 99, 63, +222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,248,187, 75, 63,241,253, 30, 62, +152,153, 89, 63,198, 31, 23, 62, 24,186, 83, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 24,186, 83, 63,245,176, 70, 62,214, 13, 73, 63,181, 97, 83, 62,248,187, 75, 63,241,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,202,111, 52, 62,248,187, 75, 63,241,253, 30, 62, +214, 13, 73, 63,181, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214, 13, 73, 63, +181, 97, 83, 62, 24,186, 83, 63,245,176, 70, 62, 68,235, 79, 63, 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,152,153, 89, 63,111, 41,147, 61, 0, 0, 64, 63,195,111,180, 61, 0, 0, 64, 63,111, 65, 52, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,111, 65, 52, 61, 38, 49,117, 63, +225, 64, 52, 61,152,153, 89, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 65, 51,115, 63, 83,111,180, 61,152,153, 89, 63,111, 41,147, 61, 38, 49,117, 63,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 49,117, 63,225, 64, 52, 61, 0, 0, 64, 63,111, 65, 52, 61,208,222,121, 63, +102, 9,239,178, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152,153, 89, 63,111, 41,147, 61, + 65, 51,115, 63, 83,111,180, 61,172, 51, 99, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,172, 51, 99, 63, 48, 46,231, 61,135,255, 79, 63,120, 46,231, 61,152,153, 89, 63,111, 41,147, 61, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,195,111,180, 61,152,153, 89, 63,111, 41,147, 61, +135,255, 79, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135,255, 79, 63, +120, 46,231, 61,172, 51, 99, 63, 48, 46,231, 61,152,153, 89, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,248,187, 75, 63,241,253, 30, 62, 0, 0, 64, 63,202,111, 52, 62, 0, 0, 64, 63, 24, 71, 7, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 71, 7, 62,135,255, 79, 63, +120, 46,231, 61,248,187, 75, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +152,153, 89, 63,198, 31, 23, 62,248,187, 75, 63,241,253, 30, 62,135,255, 79, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135,255, 79, 63,120, 46,231, 61, 0, 0, 64, 63, 24, 71, 7, 62, 0, 0, 64, 63, +195,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,119,103, 63,179,253, 30, 62, +152,153, 89, 63,198, 31, 23, 62,172, 51, 99, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,172, 51, 99, 63, 48, 46,231, 61, 66, 51,115, 63,199, 70, 7, 62, 61,119,103, 63,179,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 90,111, 52, 62, 61,119,103, 63,179,253, 30, 62, + 66, 51,115, 63,199, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 66, 51,115, 63, +199, 70, 7, 62,172, 51, 99, 63, 48, 46,231, 61, 65, 51,115, 63, 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,122,177, 71, 63,120, 45,128, 62, 0, 0, 64, 63,218, 83,135, 62, 0, 0, 64, 63,115,152, 97, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,115,152, 97, 62,214, 13, 73, 63, +181, 97, 83, 62,122,177, 71, 63,120, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 68,235, 79, 63, 37, 77,120, 62,122,177, 71, 63,120, 45,128, 62,214, 13, 73, 63,181, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214, 13, 73, 63,181, 97, 83, 62, 0, 0, 64, 63,115,152, 97, 62, 0, 0, 64, 63, +202,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,177, 71, 63,120, 45,128, 62, + 68,235, 79, 63, 37, 77,120, 62, 72, 0, 78, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 72, 0, 78, 63, 52,201,146, 62,169,183, 70, 63,219,144,151, 62,122,177, 71, 63,120, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,218, 83,135, 62,122,177, 71, 63,120, 45,128, 62, +169,183, 70, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,183, 70, 63, +219,144,151, 62, 72, 0, 78, 63, 52,201,146, 62,198,119, 76, 63, 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 61, 29, 70, 63,114, 54,174, 62, 0, 0, 64, 63,211,111,180, 62, 0, 0, 64, 63,162,231,157, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,162,231,157, 62,169,183, 70, 63, +219,144,151, 62, 61, 29, 70, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +198,119, 76, 63, 90,150,169, 62, 61, 29, 70, 63,114, 54,174, 62,169,183, 70, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,183, 70, 63,219,144,151, 62, 0, 0, 64, 63,162,231,157, 62, 0, 0, 64, 63, +218, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230,250, 82, 63,117,190,166, 62, +198,119, 76, 63, 90,150,169, 62, 72, 0, 78, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 72, 0, 78, 63, 52,201,146, 62, 21, 69, 85, 63, 3,102,144, 62,230,250, 82, 63,117,190,166, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63,201,199,165, 62,230,250, 82, 63,117,190,166, 62, + 21, 69, 85, 63, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 69, 85, 63, + 3,102,144, 62, 72, 0, 78, 63, 52,201,146, 62, 68,235, 79, 63, 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,179,167,245, 61, 72, 45,128, 62, 94,217,179, 61,222, 76,120, 62,202,196,234, 61,100, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,196,234, 61,100, 97, 83, 62,212,153, 25, 62, + 2,152, 97, 62,179,167,245, 61, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +214,153, 25, 62,156, 83,135, 62,179,167,245, 61, 72, 45,128, 62,212,153, 25, 62, 2,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,153, 25, 62, 2,152, 97, 62,202,196,234, 61,100, 97, 83, 62,214,153, 25, 62, +106,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,167,245, 61, 72, 45,128, 62, +214,153, 25, 62,156, 83,135, 62, 62,118,253, 61,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 62,118,253, 61,174,144,151, 62, 53, 49,195, 61, 17,201,146, 62,179,167,245, 61, 72, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,217,179, 61,222, 76,120, 62,179,167,245, 61, 72, 45,128, 62, + 53, 49,195, 61, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 49,195, 61, + 17,201,146, 62, 62,118,253, 61,174,144,151, 62, 70,117,207, 61, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 79, 92,155, 61, 91,190,166, 62,194,205, 76, 61,186,199,165, 62,212, 10,137, 61,238,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212, 10,137, 61,238,101,144, 62, 53, 49,195, 61, + 17,201,146, 62, 79, 92,155, 61, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 70,117,207, 61, 54,150,169, 62, 79, 92,155, 61, 91,190,166, 62, 53, 49,195, 61, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 49,195, 61, 17,201,146, 62,212, 10,137, 61,238,101,144, 62, 94,217,179, 61, +222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 36, 1, 62, 70, 54,174, 62, + 70,117,207, 61, 54,150,169, 62, 62,118,253, 61,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 62,118,253, 61,174,144,151, 62,213,153, 25, 62,100,231,157, 62,204, 36, 1, 62, 70, 54,174, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,165,111,180, 62,204, 36, 1, 62, 70, 54,174, 62, +213,153, 25, 62,100,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,153, 25, 62, +100,231,157, 62, 62,118,253, 61,174,144,151, 62,214,153, 25, 62,156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,188,205, 76, 61, 53,162,115, 62, 94,217,179, 61,222, 76,120, 62,212, 10,137, 61,238,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212, 10,137, 61,238,101,144, 62,207,133, 7, 61, +236,101,144, 62,188,205, 76, 61, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +255,162, 71, 60,216, 76,120, 62,188,205, 76, 61, 53,162,115, 62,207,133, 7, 61,236,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207,133, 7, 61,236,101,144, 62,212, 10,137, 61,238,101,144, 62,194,205, 76, 61, +186,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188,205, 76, 61, 53,162,115, 62, +255,162, 71, 60,216, 76,120, 62,190,171,221, 60,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,190,171,221, 60,194,176, 70, 62,194, 98,149, 61,194,176, 70, 62,188,205, 76, 61, 53,162,115, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,217,179, 61,222, 76,120, 62,188,205, 76, 61, 53,162,115, 62, +194, 98,149, 61,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 98,149, 61, +194,176, 70, 62,190,171,221, 60,194,176, 70, 62,193,205, 76, 61,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,198, 83,213, 61,179,253, 30, 62,214,153, 25, 62,106,111, 52, 62,202,196,234, 61,100, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,196,234, 61,100, 97, 83, 62,194, 98,149, 61, +194,176, 70, 62,198, 83,213, 61,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +193,205, 76, 61,168, 31, 23, 62,198, 83,213, 61,179,253, 30, 62,194, 98,149, 61,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 98,149, 61,194,176, 70, 62,202,196,234, 61,100, 97, 83, 62, 94,217,179, 61, +222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 59,239,126, 63,174,253, 30, 62, +154,105,131, 63,168, 31, 23, 62,175,118,131, 63,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,175,118,131, 63,194,176, 70, 62, 30, 65,124, 63, 90, 97, 83, 62, 59,239,126, 63,174,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 90,111, 52, 62, 59,239,126, 63,174,253, 30, 62, + 30, 65,124, 63, 90, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 65,124, 63, + 90, 97, 83, 62,175,118,131, 63,194,176, 70, 62, 70,143,129, 63,216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,156,105,131, 63,101, 41,147, 61, 65, 51,115, 63, 83,111,180, 61, 38, 49,117, 63,225, 64, 52, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 49,117, 63,225, 64, 52, 61,232,148,135, 63, +144,158,125, 60,156,105,131, 63,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +215,153, 25, 62,104,111,180, 61,122,245,128, 61,101, 41,147, 61,224,153, 25, 62,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,232,148,135, 63,144,158,125, 60, 38, 49,117, 63,225, 64, 52, 61,208,222,121, 63, +102, 9,239,178, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,245,128, 61,101, 41,147, 61, +215,153, 25, 62,104,111,180, 61, 89, 55,179, 61, 38, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 89, 55,179, 61, 38, 46,231, 61, 96,147,208, 60, 48, 46,231, 61,122,245,128, 61,101, 41,147, 61, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 83,111,180, 61,156,105,131, 63,101, 41,147, 61, +102,153,129, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 96,147,208, 60, + 48, 46,231, 61, 89, 55,179, 61, 38, 46,231, 61,193,205, 76, 61,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 59,239,126, 63,174,253, 30, 62, 65, 51,115, 63, 90,111, 52, 62, 66, 51,115, 63,199, 70, 7, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 66, 51,115, 63,199, 70, 7, 62,102,153,129, 63, + 48, 46,231, 61, 59,239,126, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +154,105,131, 63,168, 31, 23, 62, 59,239,126, 63,174,253, 30, 62,102,153,129, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102,153,129, 63, 48, 46,231, 61, 66, 51,115, 63,199, 70, 7, 62, 65, 51,115, 63, + 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198, 83,213, 61,179,253, 30, 62, +193,205, 76, 61,168, 31, 23, 62, 89, 55,179, 61, 38, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 89, 55,179, 61, 38, 46,231, 61,217,153, 25, 62,204, 70, 7, 62,198, 83,213, 61,179,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,106,111, 52, 62,198, 83,213, 61,179,253, 30, 62, +217,153, 25, 62,204, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217,153, 25, 62, +204, 70, 7, 62, 89, 55,179, 61, 38, 46,231, 61,215,153, 25, 62,104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,192,228,122, 63, 66, 45,128, 62, 65, 51,115, 63,151, 83,135, 62, 65, 51,115, 63,248,151, 97, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,248,151, 97, 62, 30, 65,124, 63, + 90, 97, 83, 62,192,228,122, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 70,143,129, 63,216, 76,120, 62,192,228,122, 63, 66, 45,128, 62, 30, 65,124, 63, 90, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 65,124, 63, 90, 97, 83, 62, 65, 51,115, 63,248,151, 97, 62, 65, 51,115, 63, + 90,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,228,122, 63, 66, 45,128, 62, + 70,143,129, 63,216, 76,120, 62,201,153,128, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,201,153,128, 63, 14,201,146, 62,239,234,121, 63,169,144,151, 62,192,228,122, 63, 66, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,151, 83,135, 62,192,228,122, 63, 66, 45,128, 62, +239,234,121, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,234,121, 63, +169,144,151, 62,201,153,128, 63, 14,201,146, 62, 15,171,127, 63, 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,133, 80,121, 63, 65, 54,174, 62, 65, 51,115, 63,160,111,180, 62, 65, 51,115, 63, 93,231,157, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 93,231,157, 62,239,234,121, 63, +169,144,151, 62,133, 80,121, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 15,171,127, 63, 52,150,169, 62,133, 80,121, 63, 65, 54,174, 62,239,234,121, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,234,121, 63,169,144,151, 62, 65, 51,115, 63, 93,231,157, 62, 65, 51,115, 63, +151, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 23,131, 63, 89,190,166, 62, + 15,171,127, 63, 52,150,169, 62,201,153,128, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,136,200,153, 59, 14,201,146, 62,207,133, 7, 61,236,101,144, 62,195,197,197, 60, 89,190,166, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194,205, 76, 61,186,199,165, 62,195,197,197, 60, 89,190,166, 62, +207,133, 7, 61,236,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207,133, 7, 61, +236,101,144, 62,136,200,153, 59, 14,201,146, 62,255,162, 71, 60,216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 32,208,163, 62, 79, 45,128, 62,147, 92,147, 62,252, 76,120, 62,102, 23,161, 62,115, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102, 23,161, 62,115, 97, 83, 62, 22, 51,179, 62, + 2,152, 97, 62, 32,208,163, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 21, 51,179, 62,156, 83,135, 62, 32,208,163, 62, 79, 45,128, 62, 22, 51,179, 62, 2,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 51,179, 62, 2,152, 97, 62,102, 23,161, 62,115, 97, 83, 62, 21, 51,179, 62, +101,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32,208,163, 62, 79, 45,128, 62, + 21, 51,179, 62,156, 83,135, 62,194,195,165, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,194,195,165, 62,181,144,151, 62,134, 50,151, 62, 29,201,146, 62, 32,208,163, 62, 79, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147, 92,147, 62,252, 76,120, 62, 32,208,163, 62, 79, 45,128, 62, +134, 50,151, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134, 50,151, 62, + 29,201,146, 62,194,195,165, 62,181,144,151, 62,137, 67,154, 62, 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 82, 61,141, 62,112,190,166, 62, 0, 0,128, 62,206,199,165, 62,247,168,136, 62, 3,102,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,247,168,136, 62, 3,102,144, 62,134, 50,151, 62, + 29,201,146, 62, 82, 61,141, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +137, 67,154, 62, 70,150,169, 62, 82, 61,141, 62,112,190,166, 62,134, 50,151, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134, 50,151, 62, 29,201,146, 62,247,168,136, 62, 3,102,144, 62,147, 92,147, 62, +252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150,248,166, 62, 78, 54,174, 62, +137, 67,154, 62, 70,150,169, 62,194,195,165, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,194,195,165, 62,181,144,151, 62, 21, 51,179, 62, 98,231,157, 62,150,248,166, 62, 78, 54,174, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,165,111,180, 62,150,248,166, 62, 78, 54,174, 62, + 21, 51,179, 62, 98,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62, + 98,231,157, 62,194,195,165, 62,181,144,151, 62, 21, 51,179, 62,156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 89,162,115, 62,147, 92,147, 62,252, 76,120, 62,247,168,136, 62, 3,102,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,247,168,136, 62, 3,102,144, 62, 18,174,110, 62, + 3,102,144, 62, 0, 0,128, 62, 89,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +217, 70, 89, 62,252, 76,120, 62, 0, 0,128, 62, 89,162,115, 62, 18,174,110, 62, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 18,174,110, 62, 3,102,144, 62,247,168,136, 62, 3,102,144, 62, 0, 0,128, 62, +206,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 89,162,115, 62, +217, 70, 89, 62,252, 76,120, 62, 30,130,104, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 30,130,104, 62,230,176, 70, 62,241,190,139, 62,230,176, 70, 62, 0, 0,128, 62, 89,162,115, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147, 92,147, 62,252, 76,120, 62, 0, 0,128, 62, 89,162,115, 62, +241,190,139, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,190,139, 62, +230,176, 70, 62, 30,130,104, 62,230,176, 70, 62, 0, 0,128, 62,208, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 41,187,155, 62,205,253, 30, 62, 21, 51,179, 62,101,111, 52, 62,102, 23,161, 62,115, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102, 23,161, 62,115, 97, 83, 62,241,190,139, 62, +230,176, 70, 62, 41,187,155, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62,208, 31, 23, 62, 41,187,155, 62,205,253, 30, 62,241,190,139, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,190,139, 62,230,176, 70, 62,102, 23,161, 62,115, 97, 83, 62,147, 92,147, 62, +252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,174,137, 72, 62,205,253, 30, 62, + 0, 0,128, 62,208, 31, 23, 62, 30,130,104, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 30,130,104, 62,230,176, 70, 62, 51,209, 61, 62,115, 97, 83, 62,174,137, 72, 62,205,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,106,111, 52, 62,174,137, 72, 62,205,253, 30, 62, + 51,209, 61, 62,115, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51,209, 61, 62, +115, 97, 83, 62, 30,130,104, 62,230,176, 70, 62,217, 70, 89, 62,252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,255,255,127, 62,141, 41,147, 61,215,153, 25, 62,104,111,180, 61,224,153, 25, 62,225, 64, 52, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,153, 25, 62,225, 64, 52, 61, 15, 51,179, 62, +225, 64, 52, 61,255,255,127, 62,141, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 20, 51,179, 62,104,111,180, 61,255,255,127, 62,141, 41,147, 61, 15, 51,179, 62,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15, 51,179, 62,225, 64, 52, 61,224,153, 25, 62,225, 64, 52, 61,144,175,161, 62, +102, 9,239,178, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255,255,127, 62,141, 41,147, 61, + 20, 51,179, 62,104,111,180, 61, 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 12, 52,147, 62,109, 46,231, 61,231,151, 89, 62,109, 46,231, 61,255,255,127, 62,141, 41,147, 61, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,153, 25, 62,104,111,180, 61,255,255,127, 62,141, 41,147, 61, +231,151, 89, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231,151, 89, 62, +109, 46,231, 61, 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 62,208, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,174,137, 72, 62,205,253, 30, 62,214,153, 25, 62,106,111, 52, 62,217,153, 25, 62,204, 70, 7, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217,153, 25, 62,204, 70, 7, 62,231,151, 89, 62, +109, 46,231, 61,174,137, 72, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0,128, 62,208, 31, 23, 62,174,137, 72, 62,205,253, 30, 62,231,151, 89, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231,151, 89, 62,109, 46,231, 61,217,153, 25, 62,204, 70, 7, 62,215,153, 25, 62, +104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 41,187,155, 62,205,253, 30, 62, + 0, 0,128, 62,208, 31, 23, 62, 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 12, 52,147, 62,109, 46,231, 61, 19, 51,179, 62,204, 70, 7, 62, 41,187,155, 62,205,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,101,111, 52, 62, 41,187,155, 62,205,253, 30, 62, + 19, 51,179, 62,204, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19, 51,179, 62, +204, 70, 7, 62, 12, 52,147, 62,109, 46,231, 61, 20, 51,179, 62,104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,192, 95, 56, 62, 79, 45,128, 62,214,153, 25, 62,156, 83,135, 62,212,153, 25, 62, 2,152, 97, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,153, 25, 62, 2,152, 97, 62, 51,209, 61, 62, +115, 97, 83, 62,192, 95, 56, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +217, 70, 89, 62,252, 76,120, 62,192, 95, 56, 62, 79, 45,128, 62, 51,209, 61, 62,115, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51,209, 61, 62,115, 97, 83, 62,212,153, 25, 62, 2,152, 97, 62,214,153, 25, 62, +106,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192, 95, 56, 62, 79, 45,128, 62, +217, 70, 89, 62,252, 76,120, 62,245,154, 81, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,245,154, 81, 62, 29,201,146, 62,125,120, 52, 62,181,144,151, 62,192, 95, 56, 62, 79, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,156, 83,135, 62,192, 95, 56, 62, 79, 45,128, 62, +125,120, 52, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,125,120, 52, 62, +181,144,151, 62,245,154, 81, 62, 29,201,146, 62,239,120, 75, 62, 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,213, 14, 50, 62, 78, 54,174, 62,214,153, 25, 62,165,111,180, 62,213,153, 25, 62,100,231,157, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,153, 25, 62,100,231,157, 62,125,120, 52, 62, +181,144,151, 62,213, 14, 50, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +239,120, 75, 62, 70,150,169, 62,213, 14, 50, 62, 78, 54,174, 62,125,120, 52, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,125,120, 52, 62,181,144,151, 62,213,153, 25, 62,100,231,157, 62,214,153, 25, 62, +156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,133,101, 62,112,190,166, 62, +239,120, 75, 62, 70,150,169, 62,245,154, 81, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,245,154, 81, 62, 29,201,146, 62, 18,174,110, 62, 3,102,144, 62, 91,133,101, 62,112,190,166, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,206,199,165, 62, 91,133,101, 62,112,190,166, 62, + 18,174,110, 62, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 18,174,110, 62, + 3,102,144, 62,245,154, 81, 62, 29,201,146, 62,217, 70, 89, 62,252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 64, 27, 5, 63, 66, 45,128, 62,232,194,249, 62,216, 76,120, 62,226,190, 3, 63, 90, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,226,190, 3, 63, 90, 97, 83, 62,191,204, 12, 63, +248,151, 97, 62, 64, 27, 5, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +191,204, 12, 63,149, 83,135, 62, 64, 27, 5, 63, 66, 45,128, 62,191,204, 12, 63,248,151, 97, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,248,151, 97, 62,226,190, 3, 63, 90, 97, 83, 62,191,204, 12, 63, + 90,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64, 27, 5, 63, 66, 45,128, 62, +191,204, 12, 63,149, 83,135, 62, 17, 21, 6, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 17, 21, 6, 63,169,144,151, 62,222,152,253, 62, 14,201,146, 62, 64, 27, 5, 63, 66, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,232,194,249, 62,216, 76,120, 62, 64, 27, 5, 63, 66, 45,128, 62, +222,152,253, 62, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,152,253, 62, + 14,201,146, 62, 17, 21, 6, 63,169,144,151, 62,241, 84, 0, 63, 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,164,163,243, 62, 89,190,166, 62, 72,102,230, 62,183,199,165, 62, 70, 15,239, 62,233,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70, 15,239, 62,233,101,144, 62,222,152,253, 62, + 14,201,146, 62,164,163,243, 62, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +241, 84, 0, 63, 52,150,169, 62,164,163,243, 62, 89,190,166, 62,222,152,253, 62, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,152,253, 62, 14,201,146, 62, 70, 15,239, 62,233,101,144, 62,232,194,249, 62, +216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,175, 6, 63, 65, 54,174, 62, +241, 84, 0, 63, 52,150,169, 62, 17, 21, 6, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 17, 21, 6, 63,169,144,151, 62,191,204, 12, 63, 90,231,157, 62,123,175, 6, 63, 65, 54,174, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,160,111,180, 62,123,175, 6, 63, 65, 54,174, 62, +191,204, 12, 63, 90,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, + 90,231,157, 62, 17, 21, 6, 63,169,144,151, 62,191,204, 12, 63,149, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62, 53,162,115, 62,232,194,249, 62,216, 76,120, 62, 70, 15,239, 62,233,101,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70, 15,239, 62,233,101,144, 62, 75,189,221, 62, +238,101,144, 62, 72,102,230, 62, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +168, 9,211, 62,222, 76,120, 62, 72,102,230, 62, 53,162,115, 62, 75,189,221, 62,238,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,189,221, 62,238,101,144, 62, 70, 15,239, 62,233,101,144, 62, 72,102,230, 62, +183,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62, 53,162,115, 62, +168, 9,211, 62,222, 76,120, 62, 80,167,218, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 80,167,218, 62,194,176, 70, 62, 68, 37,242, 62,194,176, 70, 62, 72,102,230, 62, 53,162,115, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,232,194,249, 62,216, 76,120, 62, 72,102,230, 62, 53,162,115, 62, + 68, 37,242, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 37,242, 62, +194,176, 70, 62, 80,167,218, 62,194,176, 70, 62, 72,102,230, 62,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,197, 16, 1, 63,174,253, 30, 62,191,204, 12, 63, 90,111, 52, 62,226,190, 3, 63, 90, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,226,190, 3, 63, 90, 97, 83, 62, 68, 37,242, 62, +194,176, 70, 62,197, 16, 1, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 72,102,230, 62,168, 31, 23, 62,197, 16, 1, 63,174,253, 30, 62, 68, 37,242, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 37,242, 62,194,176, 70, 62,226,190, 3, 63, 90, 97, 83, 62,232,194,249, 62, +216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,171,202, 62,179,253, 30, 62, + 72,102,230, 62,168, 31, 23, 62, 80,167,218, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 80,167,218, 62,194,176, 70, 62,205, 78,197, 62, 95, 97, 83, 62, 14,171,202, 62,179,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,101,111, 52, 62, 14,171,202, 62,179,253, 30, 62, +205, 78,197, 62, 95, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205, 78,197, 62, + 95, 97, 83, 62, 80,167,218, 62,194,176, 70, 62,168, 9,211, 62,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 63,102,230, 62,101, 41,147, 61, 20, 51,179, 62,104,111,180, 61, 15, 51,179, 62,225, 64, 52, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15, 51,179, 62,225, 64, 52, 61,189,204, 12, 63, +225, 64, 52, 61, 63,102,230, 62,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +191,204, 12, 63, 83,111,180, 61, 63,102,230, 62,101, 41,147, 61,189,204, 12, 63,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,189,204, 12, 63,225, 64, 52, 61, 15, 51,179, 62,225, 64, 52, 61,144,175,161, 62, +102, 9,239,178, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63,102,230, 62,101, 41,147, 61, +191,204, 12, 63, 83,111,180, 61,104,154,249, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,104,154,249, 62, 48, 46,231, 61, 42, 50,211, 62, 48, 46,231, 61, 63,102,230, 62,101, 41,147, 61, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 51,179, 62,104,111,180, 61, 63,102,230, 62,101, 41,147, 61, + 42, 50,211, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 50,211, 62, + 48, 46,231, 61,104,154,249, 62, 48, 46,231, 61, 72,102,230, 62,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 14,171,202, 62,179,253, 30, 62, 21, 51,179, 62,101,111, 52, 62, 19, 51,179, 62,204, 70, 7, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19, 51,179, 62,204, 70, 7, 62, 42, 50,211, 62, + 48, 46,231, 61, 14,171,202, 62,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 72,102,230, 62,168, 31, 23, 62, 14,171,202, 62,179,253, 30, 62, 42, 50,211, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 50,211, 62, 48, 46,231, 61, 19, 51,179, 62,204, 70, 7, 62, 20, 51,179, 62, +104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,197, 16, 1, 63,174,253, 30, 62, + 72,102,230, 62,168, 31, 23, 62,104,154,249, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,104,154,249, 62, 48, 46,231, 61,191,204, 12, 63,199, 70, 7, 62,197, 16, 1, 63,174,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,111, 52, 62,197, 16, 1, 63,174,253, 30, 62, +191,204, 12, 63,199, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, +199, 70, 7, 62,104,154,249, 62, 48, 46,231, 61,191,204, 12, 63, 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 19,150,194, 62, 72, 45,128, 62, 21, 51,179, 62,156, 83,135, 62, 22, 51,179, 62, 2,152, 97, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 51,179, 62, 2,152, 97, 62,205, 78,197, 62, + 95, 97, 83, 62, 19,150,194, 62, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +168, 9,211, 62,222, 76,120, 62, 19,150,194, 62, 72, 45,128, 62,205, 78,197, 62, 95, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205, 78,197, 62, 95, 97, 83, 62, 22, 51,179, 62, 2,152, 97, 62, 21, 51,179, 62, +101,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19,150,194, 62, 72, 45,128, 62, +168, 9,211, 62,222, 76,120, 62,179, 51,207, 62, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,179, 51,207, 62, 17,201,146, 62,113,162,192, 62,174,144,151, 62, 19,150,194, 62, 72, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,156, 83,135, 62, 19,150,194, 62, 72, 45,128, 62, +113,162,192, 62,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,162,192, 62, +174,144,151, 62,179, 51,207, 62, 17,201,146, 62,175, 34,204, 62, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,154,109,191, 62, 68, 54,174, 62, 21, 51,179, 62,165,111,180, 62, 21, 51,179, 62, 98,231,157, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62, 98,231,157, 62,113,162,192, 62, +174,144,151, 62,154,109,191, 62, 68, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +175, 34,204, 62, 54,150,169, 62,154,109,191, 62, 68, 54,174, 62,113,162,192, 62,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,162,192, 62,174,144,151, 62, 21, 51,179, 62, 98,231,157, 62, 21, 51,179, 62, +156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40,217, 62, 91,190,166, 62, +175, 34,204, 62, 54,150,169, 62,179, 51,207, 62, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,179, 51,207, 62, 17,201,146, 62, 75,189,221, 62,238,101,144, 62,237, 40,217, 62, 91,190,166, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62,183,199,165, 62,237, 40,217, 62, 91,190,166, 62, + 75,189,221, 62,238,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,189,221, 62, +238,101,144, 62,179, 51,207, 62, 17,201,146, 62,168, 9,211, 62,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,134, 78, 56, 63,117, 45,128, 62,188, 20, 48, 63, 37, 77,120, 62, 42,242, 54, 63,181, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,242, 54, 63,181, 97, 83, 62, 0, 0, 64, 63, +115,152, 97, 62,134, 78, 56, 63,117, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63,218, 83,135, 62,134, 78, 56, 63,117, 45,128, 62, 0, 0, 64, 63,115,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,115,152, 97, 62, 42,242, 54, 63,181, 97, 83, 62, 0, 0, 64, 63, +202,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134, 78, 56, 63,117, 45,128, 62, + 0, 0, 64, 63,218, 83,135, 62, 87, 72, 57, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 87, 72, 57, 63,219,144,151, 62,184,255, 49, 63, 52,201,146, 62,134, 78, 56, 63,117, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 20, 48, 63, 37, 77,120, 62,134, 78, 56, 63,117, 45,128, 62, +184,255, 49, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,184,255, 49, 63, + 52,201,146, 62, 87, 72, 57, 63,219,144,151, 62, 58,136, 51, 63, 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 26, 5, 45, 63,117,190,166, 62,107,102, 38, 63,201,199,165, 62,235,186, 42, 63, 5,102,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,186, 42, 63, 5,102,144, 62,184,255, 49, 63, + 52,201,146, 62, 26, 5, 45, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 58,136, 51, 63, 90,150,169, 62, 26, 5, 45, 63,117,190,166, 62,184,255, 49, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,184,255, 49, 63, 52,201,146, 62,235,186, 42, 63, 5,102,144, 62,188, 20, 48, 63, + 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196,226, 57, 63,114, 54,174, 62, + 58,136, 51, 63, 90,150,169, 62, 87, 72, 57, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 87, 72, 57, 63,219,144,151, 62, 0, 0, 64, 63,162,231,157, 62,196,226, 57, 63,114, 54,174, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,211,111,180, 62,196,226, 57, 63,114, 54,174, 62, + 0, 0, 64, 63,162,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, +162,231,157, 62, 87, 72, 57, 63,219,144,151, 62, 0, 0, 64, 63,218, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63, 79,162,115, 62,188, 20, 48, 63, 37, 77,120, 62,235,186, 42, 63, 5,102,144, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,186, 42, 63, 5,102,144, 62,234, 17, 34, 63, +243,101,144, 62,107,102, 38, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 21,184, 28, 63,222, 76,120, 62,107,102, 38, 63, 79,162,115, 62,234, 17, 34, 63,243,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,234, 17, 34, 63,243,101,144, 62,235,186, 42, 63, 5,102,144, 62,107,102, 38, 63, +201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63, 79,162,115, 62, + 21,184, 28, 63,222, 76,120, 62,234,134, 32, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,234,134, 32, 63,204,176, 70, 62,233, 69, 44, 63,245,176, 70, 62,107,102, 38, 63, 79,162,115, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 20, 48, 63, 37, 77,120, 62,107,102, 38, 63, 79,162,115, 62, +233, 69, 44, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233, 69, 44, 63, +245,176, 70, 62,234,134, 32, 63,204,176, 70, 62,104,102, 38, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 9, 68, 52, 63,241,253, 30, 62, 0, 0, 64, 63,202,111, 52, 62, 42,242, 54, 63,181, 97, 83, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,242, 54, 63,181, 97, 83, 62,233, 69, 44, 63, +245,176, 70, 62, 9, 68, 52, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +104,102, 38, 63,198, 31, 23, 62, 9, 68, 52, 63,241,253, 30, 62,233, 69, 44, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233, 69, 44, 63,245,176, 70, 62, 42,242, 54, 63,181, 97, 83, 62,188, 20, 48, 63, + 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,195,136, 24, 63,179,253, 30, 62, +104,102, 38, 63,198, 31, 23, 62,234,134, 32, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,234,134, 32, 63,204,176, 70, 62,162,218, 21, 63, 84, 97, 83, 62,195,136, 24, 63,179,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,111, 52, 62,195,136, 24, 63,179,253, 30, 62, +162,218, 21, 63, 84, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162,218, 21, 63, + 84, 97, 83, 62,234,134, 32, 63,204,176, 70, 62, 21,184, 28, 63,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,104,102, 38, 63,111, 41,147, 61,191,204, 12, 63, 83,111,180, 61,189,204, 12, 63,225, 64, 52, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,189,204, 12, 63,225, 64, 52, 61, 0, 0, 64, 63, +111, 65, 52, 61,104,102, 38, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 64, 63,195,111,180, 61,104,102, 38, 63,111, 41,147, 61, 0, 0, 64, 63,111, 65, 52, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,111, 65, 52, 61,189,204, 12, 63,225, 64, 52, 61,208,222,121, 63, +102, 9,239,178, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104,102, 38, 63,111, 41,147, 61, + 0, 0, 64, 63,195,111,180, 61,122, 0, 48, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,122, 0, 48, 63,120, 46,231, 61, 85,204, 28, 63, 48, 46,231, 61,104,102, 38, 63,111, 41,147, 61, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 83,111,180, 61,104,102, 38, 63,111, 41,147, 61, + 85,204, 28, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,204, 28, 63, + 48, 46,231, 61,122, 0, 48, 63,120, 46,231, 61,104,102, 38, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0,195,136, 24, 63,179,253, 30, 62,191,204, 12, 63, 90,111, 52, 62,191,204, 12, 63,199, 70, 7, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,199, 70, 7, 62, 85,204, 28, 63, + 48, 46,231, 61,195,136, 24, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +104,102, 38, 63,198, 31, 23, 62,195,136, 24, 63,179,253, 30, 62, 85,204, 28, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,204, 28, 63, 48, 46,231, 61,191,204, 12, 63,199, 70, 7, 62,191,204, 12, 63, + 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 68, 52, 63,241,253, 30, 62, +104,102, 38, 63,198, 31, 23, 62,122, 0, 48, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0,122, 0, 48, 63,120, 46,231, 61, 0, 0, 64, 63, 24, 71, 7, 62, 9, 68, 52, 63,241,253, 30, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,202,111, 52, 62, 9, 68, 52, 63,241,253, 30, 62, + 0, 0, 64, 63, 24, 71, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, + 24, 71, 7, 62,122, 0, 48, 63,120, 46,231, 61, 0, 0, 64, 63,195,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 68,126, 20, 63, 64, 45,128, 62,191,204, 12, 63,149, 83,135, 62,191,204, 12, 63,248,151, 97, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,248,151, 97, 62,162,218, 21, 63, + 84, 97, 83, 62, 68,126, 20, 63, 64, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 21,184, 28, 63,222, 76,120, 62, 68,126, 20, 63, 64, 45,128, 62,162,218, 21, 63, 84, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162,218, 21, 63, 84, 97, 83, 62,191,204, 12, 63,248,151, 97, 62,191,204, 12, 63, + 90,111, 52, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,126, 20, 63, 64, 45,128, 62, + 21,184, 28, 63,222, 76,120, 62, 25,205, 26, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 25,205, 26, 63, 14,201,146, 62,114,132, 19, 63,169,144,151, 62, 68,126, 20, 63, 64, 45,128, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,149, 83,135, 62, 68,126, 20, 63, 64, 45,128, 62, +114,132, 19, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,114,132, 19, 63, +169,144,151, 62, 25,205, 26, 63, 14,201,146, 62,150, 68, 25, 63, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 7,234, 18, 63, 65, 54,174, 62,191,204, 12, 63,160,111,180, 62,191,204, 12, 63, 90,231,157, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,231,157, 62,114,132, 19, 63, +169,144,151, 62, 7,234, 18, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, +150, 68, 25, 63, 54,150,169, 62, 7,234, 18, 63, 65, 54,174, 62,114,132, 19, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,114,132, 19, 63,169,144,151, 62,191,204, 12, 63, 90,231,157, 62,191,204, 12, 63, +149, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,185,199, 31, 63, 96,190,166, 62, +150, 68, 25, 63, 54,150,169, 62, 25,205, 26, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 25,205, 26, 63, 14,201,146, 62,234, 17, 34, 63,243,101,144, 62,185,199, 31, 63, 96,190,166, 62, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63,201,199,165, 62,185,199, 31, 63, 96,190,166, 62, +234, 17, 34, 63,243,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,234, 17, 34, 63, +243,101,144, 62, 25,205, 26, 63, 14,201,146, 62, 21,184, 28, 63,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 80, 0, 0,168, 82,186, 3, 59, 0, 0, 0, 0, 20, 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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, + 24, 1, 0, 0,216,162,186, 3, 52, 0, 0, 0, 1, 0, 0, 0,160,170,186, 3,160,117,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 77, 69,112,114,101,118,105,101,119, 46, 48, 48, 50, 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, 32,164,186, 3,248,169,186, 3, + 64,170,186, 3, 0, 0, 0, 0,224,165,186, 3, 16,168,186, 3, 0, 0, 0, 0,176,163,159, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,164,186, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136,166,186, 3, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,168,186, 3, 3, 0, 0, 0, + 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 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,128,179, 0, 0, 64, 52,235, 92,142,188, 0, 0,128, 63, 2, 0,128, 63,235, 92,142, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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, 32,164,186, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, + 68, 65, 84, 65, 84, 1, 0, 0, 88,164,186, 3, 58, 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,224,165,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0,224,165,186, 3, 58, 0, 0, 0, 5, 0, 0, 0, 0,116, 6, 65, +254,255,127, 63, 42,117,228, 39, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 0,116, 6, 65,254,255,127,191, 43, 59,177,167, + 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 0,116, 6,193,250,255,127,191, 39,117,228,167, 0, 0, 0, 0,255,127,255, 0, + 3, 0, 0, 0,252,115, 6,193, 1, 0,128, 63, 49, 59,177, 39, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 0,239,110, 59, +131,164, 26, 60,235, 92, 14,189,228, 12, 95, 33, 28,133,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,136,166,186, 3, + 58, 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, 16,168,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 16,168,186, 3, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 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, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, + 68, 65, 84, 65, 84, 1, 0, 0,112,168,186, 3, 58, 1, 0, 0, 5, 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, 86, 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,248,169,186, 3, 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, 0, 0, 0, 0, 85, 86, 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, 64,170,186, 3, 6, 0, 0, 0, + 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, 67,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,176,163,159, 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, 68, 65, 84, 65, 20, 0, 0, 0,248,169,186, 3, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 44, 0, 0, 0, 64,170,186, 3, 65, 0, 0, 0, + 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 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, 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,176,163,159, 3, 59, 0, 0, 0, + 4, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,160,170,186, 3, + 52, 0, 0, 0, 1, 0, 0, 0,144,185,186, 3,216,162,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101, +119, 46, 48, 48, 51, 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,232,171,186, 3, 40,182,186, 3, 16,183,186, 3, 0, 0, 0, 0, +168,173,186, 3,192,178,186, 3, 0, 0, 0, 0,208,184,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,172,186, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,177,186, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,180,186, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 36, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128,179, 0, 0, 64, 52, 0, 0,192, 28, 0, 0,128, 63, 2, 0,128, 63,172,197, 39, 55, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,232,171,186, 3, 0, 0, 0, 0, 1, 0, 0, 0,200, 78,181, 3, 68, 65, 84, 65, 84, 1, 0, 0, + 32,172,186, 3, 58, 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,168,173,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0,168,173,186, 3, 58, 0, 0, 0, 36, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,255,255,251, 39, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0, 2,168, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 1, 0,128,191,253,255,127,191,253,255,251,167, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,250,255,127,191, + 3, 0,128, 63, 3, 0, 2, 40, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,113,250, 63, 64, 7, 3,128, 63, 79,201,113, 48, + 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,114,250, 63, 64,242,249,127,191,107,200,113, 48, 0, 0, 0, 0, 1,128,255, 0, + 2, 0, 0, 0,206,233,127, 63,245,249,127,191, 95,200,113, 48, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,206,233,127, 63, + 3, 3,128, 63, 63,201,113, 48, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,185,235, 63,192,197, 9,128, 63,138, 82,171, 51, + 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,185,235, 63,192,113,236,127,191,137, 82,171, 51, 0, 0, 0, 0, 1,128,255, 0, + 2, 0, 0, 0,232,174,127,191,110,236,127,191,137, 82,171, 51, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,236,174,127,191, +201, 9,128, 63,138, 82,171, 51, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,181,242,159,192, 32, 15,128, 63,175,196, 41, 43, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,182,242,159,192,194,225,127,191,175,196, 37, 43, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,108,229, 63,192,197,225,127,191,175,180, 37, 43, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,108,229, 63,192, + 29, 15,128, 63,175,180, 41, 43, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,112,253,159, 64,242, 18,128, 63, 85,138, 18, 51, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,112,253,159, 64, 27,218,127,191, 81,138, 18, 51, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0,223,250, 63, 64, 24,218,127,191, 81,138, 18, 51, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,225,250, 63, 64, +245, 18,128, 63, 85,138, 18, 51, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,178,236,223,192, 32, 14,128, 63, 81,158,216,175, + 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,178,236,223,192,192,227,127,191, 81,160,216,175, 0, 0, 0, 0,255,127,255, 0, + 2, 0, 0, 0, 89,246, 15,193,188,227,127,191, 73,160,216,175, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0, 89,246, 15,193, + 35, 14,128, 63, 73,158,216,175, 0, 0, 0, 0,255,127,255, 0, 2, 0, 0, 0,217,239,159,192,204, 8,128, 63,151,121,170, 51, + 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,217,239,159,192,104,238,127,191,150,121,170, 51, 0, 0, 0, 0, 1,128,255, 0, + 2, 0, 0, 0,217,239,223,192,108,238,127,191,150,121,170, 51, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,217,239,223,192, +200, 8,128, 63,151,121,170, 51, 0, 0, 0, 0, 1,128,255, 0, 2, 0, 0, 0,233,247,223, 64,219, 24,128, 63, 78,136,155,180, + 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0,233,247,223, 64, 76,206,127,191, 79,136,155,180, 0, 0, 0, 0,255,127,255, 0, + 3, 0, 0, 0,245,251, 15, 65, 80,206,127,191, 79,136,155,180, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0,245,251, 15, 65, +216, 24,128, 63, 78,136,155,180, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0,179,247,159, 64,233, 8,128, 63,180, 96,173,180, + 0, 0, 0, 0, 1,128,255, 0, 3, 0, 0, 0,179,247,159, 64, 42,238,127,191,181, 96,173,180, 0, 0, 0, 0, 1,128,255, 0, + 3, 0, 0, 0,178,247,223, 64, 38,238,127,191,181, 96,173,180, 0, 0, 0, 0, 1,128,255, 0, 3, 0, 0, 0,177,247,223, 64, +237, 8,128, 63,180, 96,173,180, 0, 0, 0, 0, 1,128,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 56,177,186, 3, + 58, 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,192,178,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +176, 1, 0, 0,192,178,186, 3, 55, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, + 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 34, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, + 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 34, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, + 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 23, 0, 0, 0, + 0, 0, 34, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, + 29, 0, 0, 0, 28, 0, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0, 28, 0, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 35, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0, 33, 0, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0, 32, 0, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 35, 0, + 68, 65, 84, 65, 84, 1, 0, 0,160,180,186, 3, 58, 1, 0, 0, 5, 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, 86, 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, 40,182,186, 3, 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, 0, 0, 0, 0, 85, 86, 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, 16,183,186, 3, 6, 0, 0, 0, + 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, 67,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,208,184,186, 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, 68, 65, 84, 65,180, 0, 0, 0, 40,182,186, 3, 54, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 23, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, + 35, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65,140, 1, 0, 0, 16,183,186, 3, 65, 0, 0, 0, + 9, 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,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 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,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,208,184,186, 3, 59, 0, 0, 0, + 36, 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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0,144,185,186, 3, + 52, 0, 0, 0, 1, 0, 0, 0, 64,193,186, 3,160,170,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101, +119, 46, 48, 48, 52, 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,216,186,186, 3,152,192,186, 3,224,192,186, 3, 0, 0, 0, 0, +152,188,186, 3,176,190,186, 3, 0, 0, 0, 0,136,201,163, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,187,186, 3, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,189,186, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,191,186, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0,128,179, 0, 0, 64, 52, 0, 0,192, 28, 0, 0,128, 63, 2, 0,128, 63,172,197, 39, 55, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,216,186,186, 3, 0, 0, 0, 0, 1, 0, 0, 0,168, 85,181, 3, 68, 65, 84, 65, 84, 1, 0, 0, + 16,187,186, 3, 58, 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,152,188,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,152,188,186, 3, 58, 0, 0, 0, 4, 0, 0, 0, 50, 49,175, 64,255,255,127, 63, 28,159,152, 51, + 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 50, 49,175, 64, 0, 0,128,191, 33,159,152,179, 0, 0, 0, 0,255,127,255, 0, + 3, 0, 0, 0, 50, 49,175,192,252,255,127,191, 31,159,152,179, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 45, 49,175,192, + 4, 0,128, 63, 33,159,152, 51, 0, 0, 0, 0,255,127,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 40,189,186, 3, + 58, 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,176,190,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,176,190,186, 3, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 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, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, + 68, 65, 84, 65, 84, 1, 0, 0, 16,191,186, 3, 58, 1, 0, 0, 5, 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, 86, 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,152,192,186, 3, 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, 0, 0, 0, 0, 85, 86, 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,224,192,186, 3, 6, 0, 0, 0, + 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, 67,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,136,201,163, 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, 68, 65, 84, 65, 20, 0, 0, 0,152,192,186, 3, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 44, 0, 0, 0,224,192,186, 3, 65, 0, 0, 0, + 1, 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,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,136,201,163, 3, 59, 0, 0, 0, + 4, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 24, 1, 0, 0, 64,193,186, 3, + 52, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,144,185,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 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,136,194,186, 3, 8,201,186, 3,176,201,186, 3, 0, 0, 0, 0, + 72,196,186, 3,192,198,186, 3, 0, 0, 0, 0,232,202,186, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192,194,186, 3, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,197,186, 3, 1, 0, 0, 0, + 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,199,186, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 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,194,186, 3, 0, 0, 0, 0, 1, 0, 0, 0,232, 71,181, 3, 68, 65, 84, 65, 84, 1, 0, 0, +192,194,186, 3, 58, 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, 72,196,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 72,196,186, 3, 58, 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,255, 0, 3, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255, 0, + 3, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255, 0, 3, 0, 0, 0,250,255,127,191, + 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255, 0, 3, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63, +230, 73,230, 73,230, 73,255, 0, 3, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255, 0, + 3, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255, 0, 3, 0, 0, 0,255,255,127,191, + 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255, 0, 3, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0, 56,197,186, 3, + 58, 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,192,198,186, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,192,198,186, 3, 55, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 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, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, + 4, 0, 0, 0, 5, 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, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 4, 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, + 68, 65, 84, 65, 84, 1, 0, 0,128,199,186, 3, 58, 1, 0, 0, 5, 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, 8,201,186, 3, 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, 0, 0, 0, 0, 85, 86, 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,176,201,186, 3, 6, 0, 0, 0, + 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, 67,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,232,202,186, 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, 68, 65, 84, 65,120, 0, 0, 0, 8,201,186, 3, 54, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, + 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, + 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 8, 1, 0, 0,176,201,186, 3, + 65, 0, 0, 0, 6, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 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,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 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,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,232,202,186, 3, 59, 0, 0, 0, + 24, 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, 80, 65, 0, 0,244, 1, 0, 0,120,203,186, 3, 65, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 65, 80, 83,121,115, 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, 18, 0, 2, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 4, 0, 6, 0, 8, 0, 5, 0, 5, 0, 3, 0,100, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, - 0, 4, 0, 5, 0, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,128, - 63,128, 0, 0, 61,204,204,205, 63, 76,204,205, 63,128, 0, 0, 66,200, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 10, 63,182, 41,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, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,189, 35,214,240, 0, 0, 0, 0, -189,196,155,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 10, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 76,204,205, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 63,128, 0, 0, - 62, 76,204,205, 62,153,153,154, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, - 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 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, 68, 78, 65, 49, 0, 0,173,128, - 7,223,224, 32, 0, 0, 0, 0, 0, 0, 0, 1, 83, 68, 78, 65, 78, 65, 77, 69, 0, 0, 9,113, 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,119, 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,110, 97,109,101, 91, 51, 50, 93, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, - 0,102,108, 97,103, 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, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, - 48, 0,112, 97,100, 49, 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,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0, -112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,115,108,105,100,101,114,109, -105,110, 0,115,108,105,100,101,114,109, 97,120, 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, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105, -112,116, 0,116,111,116,115, 99,114,105,112,116, 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,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103, -108,101, 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,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111, -102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, - 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114,111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111, -102, 95,111, 98, 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,109,101,110,117,110,114, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 8, 0, 5, 0, 5, 0, 3, 0,100, 0, + 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 4, 0, 5, 0, 3, 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,128, 7, 0, 0,128, 63,205,204,204, 61,205,204, 76, 63, 0, 0,128, 63, 0, 0,200, 66, + 0, 0, 72, 66, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, +128, 41,182, 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,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,240,214, 35,189, + 0, 0, 0, 0,184,155,196,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 64, 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, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,205,204, 76, 62,154,153,153, 62, 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, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 1, 2, 3, 4, 5, 6, 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, 68, 78, 65, 49,204,208, 0, 0, 32, 77,162, 3, 0, 0, 0, 0, 1, 0, 0, 0, + 83, 68, 78, 65, 78, 65, 77, 69, 59, 10, 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,119, 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, 51, 50, 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, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 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, 50, 52, 48, 93, 0,102,105, +108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 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,112, 97,100, 48, 0,112, 97,100, 49, 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,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116, +115, 0,118,103,114,111,117,112, 91, 51, 50, 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, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, + 99,114,105,112,116, 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,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 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,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, + 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, + 0, 89, 70, 95, 98,107,104,114,111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 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, +109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 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,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, 97,115,112, -120, 0, 97,115,112,121, 0, 42,118,110,111,100,101, 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, 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97, -114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, - 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, - 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, - 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,112, 97, -100, 51, 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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97, -115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108,111, -114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109, -115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98, -117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95, -108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, - 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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,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, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, - 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106, -105,116, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0,115, 99, 97,108,101, 0, 42, - 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 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, 42,109, - 97,116, 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,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117, -115, 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,104, 0,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,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,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,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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99, -101, 0, 99,117, 98,101,109, 97,112,115,105,122,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, 42,109,114, 0, 42,112,118, 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,112, 97,100, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101, -120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,118, 91, 52, 93, 0,109,105,100, 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,101,100,103,101, 95, 98,111,117,110,100, 97,114, -121, 95,115,116, 97,116,101,115, 0, 42,118,101,114,116, 95,101,100,103,101, 95,109, 97,112, 0, 42,118,101,114,116, 95,102, 97, - 99,101, 95,109, 97,112, 0, 42,109, 97,112, 95,109,101,109, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101, -100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101, -114,114,111,114, 0,109,111,100,105,102,105,101,114, 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,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, 51, 50, 93, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0, -100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121, -101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, - 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101,101,100, 98,105,110,100, 0, 42, 98, -105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 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,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,115,121,115, 0,114,116, 91, 50, 93, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, - 99,116, 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, 51, 50, 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,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,118,101, 99, 91, 56, 93, 91, 51, 93, 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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, 67, -104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 0, 99,111,108, 98,105,116, -115, 0,116,114, 97,110,115,102,108, 97,103, 0,105,112,111,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,112,114,111,116,101, 99,116,102,108, 97,103, 0,105,112,111,119,105,110, 0, -115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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, 99,116,105,109,101, - 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0, 97, 99,116, 99,111,108, 0,101,109,112,116,121, 95,100,114, 97,119,116,121, -112,101, 0,112, 97,100, 49, 91, 51, 93, 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,112, -100, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0, -114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114, -101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111, -114, 99,101,102,105,101,108,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,102, - 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0, -109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95, -112,111,119,101,114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110, -107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 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, -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, 42,112, 97,114,116,105, 99,108,101,115, 0,116,111,116,112,111,105,110,116, 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,110,111,100,101,109, 97,115,115, 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,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,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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, - 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 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, 83,117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, - 80, 97,116,104, 91, 50, 52, 48, 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, 83,117,114,102, 78,111,114,109, 97,108,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,109,105,115,116,121,112,101, - 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122, -101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 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,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,104,101,109,105,114,101,115, 0,109, 97,120,105,116,101,114, 0,100,114, 97,119,116,121,112,101, 0,115,117, - 98,115,104,111,111,116,112, 0,115,117, 98,115,104,111,111,116,101, 0,110,111,100,101,108,105,109, 0,109, 97,120,115,117, 98, -108, 97,109,112, 0,112, 97,109, 97, 0,112, 97,109,105, 0,101,108,109, 97, 0,101,108,109,105, 0,109, 97,120,110,111,100,101, - 0, 99,111,110,118,101,114,103,101,110, 99,101, 0,114, 97,100,102, 97, 99, 0,103, 97,109,109, 97, 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, - 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,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, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, - 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,102,102, 99,111, -100,101, 99,100, 97,116, 97, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110, -112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108, -105,116,121, 0,114,112, 97,100, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114,101,110, -100,101,114,101,114, 0,111, 99,114,101,115, 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,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,112,111,115,116,109,117,108, 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, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, - 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, - 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112, -114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, - 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, - 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97, -121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0, -121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109, -101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, - 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105, -120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, - 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, 91, 51, 93, 0,102,114, 97,109,101, 0,110, 97,109,101, 91, 54, 52, 93, 0, 42, 98,114,117,115,104, 0,116,111, -111,108, 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,116,101,112, 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,100,114, 97,119, 95,116,105, -109,101,100, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 99,111,114,110,101,114,116,121,112, -101, 0,101,100,105,116, 98,117,116,102,108, 97,103, 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,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, 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,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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, - 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, - 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95, -116,121,112,101, 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,112, 97,100, 51, 91, 50, 93, 0,100,105,114, 0,118,105,101,119, 0, 42,115,101,115, -115,105,111,110, 0, 42, 99,117,109, 97,112, 0,100,114, 97,119, 98,114,117,115,104, 0,115,109,111,111,116,104, 98,114,117,115, -104, 0,112,105,110, 99,104, 98,114,117,115,104, 0,105,110,102,108, 97,116,101, 98,114,117,115,104, 0,103,114, 97, 98, 98,114, -117,115,104, 0,108, 97,121,101,114, 98,114,117,115,104, 0,102,108, 97,116,116,101,110, 98,114,117,115,104, 0,112,105,118,111, -116, 91, 51, 93, 0, 98,114,117,115,104, 95,116,121,112,101, 0,116,101,120,110,114, 0,116,101,120,114,101,112,116, 0,116,101, -120,102, 97,100,101, 0,116,101,120,115,101,112, 0, 97,118,101,114, 97,103,105,110,103, 0,116, 97, 98,108,101,116, 95,115,105, -122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,115,121,109,109, 0,114, 97,107,101, 0, 97,120,105, -115,108,111, 99,107, 0, 42, 99, 97,109,101,114, 97, 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, 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,101,100,105,116, 98,117,116,115,105,122,101, 0,115,101,108,101, 99,116,109, -111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, 97,117,116,111,109, -101,114,103,101, 0,112, 97,100, 53, 0,112, 97,100, 54, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 42,101,100, 0, - 42,114, 97,100,105,111, 0,102,114, 97,109,105,110,103, 0, 42,116,111,111,108,115,101,116,116,105,110,103,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,106,117,109,112,102,114, 97,109,101, 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, 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,115, 99,117,108,112,116, -100, 97,116, 97, 0,102,114, 97,109,101, 95,115,116,101,112, 0,122,111,111,109, 0, 98,108,101,110,100, 0,120,105,109, 0,121, -105,109, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 42, 97,114,101, 97, 0, 98,108, -111, 99,107,104, 97,110,100,108,101,114, 91, 56, 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,119,105,110,109, 97,116, 49, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 49, 91, 52, 93, 91, - 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0,108, 97,121, 95,117,115,101,100, 0,112,101,114, -115,112, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114, -105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 0, 42,100,101,112,116,104,115, 0,111, 98, 95, 99, -101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108,111, 99, 97,108,118,105,101,119, 0,108, 97,121, 97, 99,116, 0, -115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0, 99, 97,109,122,111,111,109, 0,112,105,118,111,116, 95,108, - 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112,105,120,115,105,122,101, 0,110,101, 97,114, 0,102, - 97,114, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,103,114,105,100,108,105,110,101,115, 0,118,105,101,119, 98,117,116, - 0,103,114,105,100,102,108, 97,103, 0,109,111,100,101,115,101,108,101, 99,116, 0,116,119,116,121,112,101, 0,116,119,109,111, -100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, - 0, 99,108,105,112, 91, 52, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98, -117,102, 0,120,114, 97,121, 0,102,108, 97,103, 50, 0,103,114,105,100,115,117, 98,100,105,118, 0,107,101,121,102,108, 97,103, -115, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 0, 42,112,114,111,112,101,114,116,105,101, -115, 95,115,116,111,114, 97,103,101, 0, 42,103,112,100, 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,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,107,101,101,112, -116,111,116, 0,107,101,101,112, 97,115,112,101, 99,116, 0,107,101,101,112,122,111,111,109, 0,111,108,100,119,105,110,120, 0, -111,108,100,119,105,110,121, 0, 99,117,114,115,111,114, 91, 50, 93, 0,114,111,119, 98,117,116, 0,118, 50,100, 0, 42,101,100, -105,116,105,112,111, 0,105,112,111,107,101,121, 0, 97, 99,116,110, 97,109,101, 91, 51, 50, 93, 0, 99,111,110,115,116,110, 97, -109,101, 91, 51, 50, 93, 0, 98,111,110,101,110, 97,109,101, 91, 51, 50, 93, 0,116,111,116,105,112,111, 0,112,105,110, 0, 98, -117,116,111,102,115, 0, 99,104, 97,110,110,101,108, 0,108,111, 99,107, 0,109,101,100,105, 97,110, 91, 51, 93, 0, 99,117,114, -115,101,110,115, 0, 99,117,114, 97, 99,116, 0, 97,108,105,103,110, 0,116, 97, 98,111, 0,109, 97,105,110, 98, 0,109, 97,105, -110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114,111,117,112, 0, -109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105,103,110, 0,111, -108,100,107,101,121,112,114,101,115,115, 0,116, 97, 98, 91, 55, 93, 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, 42,102,105,108,101,108,105,115,116, 0,116,111,116,102,105,108,101, 0, -116,105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,111,102,115, 0, -115,111,114,116, 0,109, 97,120,110, 97,109,101,108,101,110, 0, 99,111,108,108,117,109,115, 0,102, 95,102,112, 0,102,112, 95, -115,116,114, 91, 56, 93, 0, 42,108,105, 98,102,105,108,101,100, 97,116, 97, 0,114,101,116,118, 97,108, 0,109,101,110,117, 0, - 97, 99,116, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, - 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, - 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,112,117,112,109,101,110,117, 0,111,111,112,115, 0, -118,105,115,105,102,108, 97,103, 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,115,101, 97,114, 99,104, 95,102,108, 97, -103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0,100,101,112,115, - 95,102,108, 97,103,115, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 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,112, 97,100, 91, 53, 93, 0, 99, -101,110,116,120, 0, 99,101,110,116,121, 0, 97,117,116,111,115,110, 97,112, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105, -101,119,108,105,110,101,115, 0,102,111,110,116, 95,105,100, 0,108,104,101,105,103,104,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, 99,117,114,114,116, 97, 98, 95,115,101,116, 0,115, -104,111,119,115,121,110,116, 97,120, 0,111,118,101,114,119,114,105,116,101, 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, 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, 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0, 42,101,100, -105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0, 42,102,105,108,101,115, 0, 97, 99,116,105,118,101, 95,102,105, -108,101, 0,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,115,101,108,115,116, 97,116,101, 0, -118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0, -115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0, 97, 99,116,105,118,101, 95, 98, -111,111,107,109, 97,114,107, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 42,105,109,103, 0,111,117,116,108,105,110,101, - 91, 52, 93, 0,110,101,117,116,114, 97,108, 91, 52, 93, 0, 97, 99,116,105,111,110, 91, 52, 93, 0,115,101,116,116,105,110,103, - 91, 52, 93, 0,115,101,116,116,105,110,103, 49, 91, 52, 93, 0,115,101,116,116,105,110,103, 50, 91, 52, 93, 0,110,117,109, 91, - 52, 93, 0,116,101,120,116,102,105,101,108,100, 91, 52, 93, 0,116,101,120,116,102,105,101,108,100, 95,104,105, 91, 52, 93, 0, -112,111,112,117,112, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,109,101,110,117, - 95, 98, 97, 99,107, 91, 52, 93, 0,109,101,110,117, 95,105,116,101,109, 91, 52, 93, 0,109,101,110,117, 95,104,105,108,105,116, -101, 91, 52, 93, 0,109,101,110,117, 95,116,101,120,116, 91, 52, 93, 0,109,101,110,117, 95,116,101,120,116, 95,104,105, 91, 52, - 93, 0, 98,117,116, 95,100,114, 97,119,116,121,112,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98, 97, 99,107, - 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,112, 97,110,101,108, 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, 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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100, -111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 55, 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,115,110,100, 0,116, 97, 99,116, 0,116, -110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 93, 0, 98,112, 97,100, 91, 52, 93, 0, 98,112, - 97,100, 49, 91, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114, -100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105, -114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, - 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, - 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 0,118,114,109,108,102,108, 97,103, 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, 99,111,110,115,111,108,101, 95, 98,117,102,102,101, -114, 0, 99,111,110,115,111,108,101, 95,111,117,116, 0,109,105,120, 98,117,102,115,105,122,101, 0,102,111,110,116,115,105,122, -101, 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,102,111,110,116,110, 97,109,101, 91, 50, 53, 54, 93, - 0,116,104,101,109,101,115, 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,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,110,100,111,102, - 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,112, 97,100, 91, 56, 93, - 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, - 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119, -101,105,103,104,116, 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,115, 99,101,110,101, 0,101,110,100,120, 0,101,110,100,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,115, 99, -101,110,101,110,114, 0,115, 99,114,101,101,110,110,114, 0,102,117,108,108, 0,109, 97,105,110,119,105,110, 0,119,105,110, 97, -107,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, -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, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,111,108, -100, 95,111,102,115,120, 0,111,108,100, 95,111,102,115,121, 0,115,111,114,116, 99,111,117,110,116,101,114, 0, 42,112, 97,110, -101,108,116, 97, 98, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, - 0,104,101, 97,100,114, 99,116, 0,119,105,110,114, 99,116, 0,104,101, 97,100,119,105,110, 0,119,105,110, 0,104,101, 97,100, -101,114,116,121,112,101, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,119,105,110,120, 0,119,105,110,121, 0,104,101, - 97,100, 95,115,119, 97,112, 0,104,101, 97,100, 95,101,113,117, 97,108, 0,119,105,110, 95,115,119, 97,112, 0,119,105,110, 95, -101,113,117, 97,108, 0,104,101, 97,100, 98,117,116,108,101,110, 0,104,101, 97,100, 98,117,116,111,102,115, 0, 99,117,114,115, -111,114, 0,115,112, 97, 99,101,100, 97,116, 97, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 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,100,105,115,112,108, 97,121,109,111,100,101, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115, -101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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, -115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116,105, -108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115,116, - 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 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,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, 42,115,116,114,105,112, 0,102, 97, 99,102, 48, 0,102, 97, 99,102, - 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0, 99,117,114,112,111,115, 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,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, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, - 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111, -108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, - 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0,100,120, 0,100,121, 0,108,105,110,107, 0,111,116,121,112, -101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, - 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109, -101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0, 42,102,114,111,109, - 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, - 91, 54, 52, 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, 51, 50, 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,115,110,100,110, -114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, - 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,109,105,110, 0,109, 97, -120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, - 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101, -101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, 0, 42,115, 97,109,112,108,101, 0, 42,115, -116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, 42,115,110,100, 95,115,111,117,110,100, 0, -112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112,105,116, 99,104, 0,109,105,110, 95,103, 97, -105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0,115,116,114,101, 97,109,108,101,110, 0, 99, -104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91, 49, 48, 93, 0,103, 97,105,110, 0,100,111, -112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101,108,111, 99,105,116,121, 0,110,117,109,115, -111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100,115,103, 97,109,101,101,110,103,105,110,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, 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,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, 98, -111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0,112, 97,116,104,102,108, 97,103, 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, 99,111,110,115, -116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100, -101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, - 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116, -115, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, 99,117,115, -116,111,109, 67,111,108, 0, 99,115, 0, 42,103,114,112, 0,114,101,115,101,114,118,101,100, 49, 0,103,114,111,117,112,115, 0, - 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0, 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109, -101,115,108,105,100,101, 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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101, -116, 91, 51, 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0, 42,112,114,111,112, 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, 51, 50, 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,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102, + 0, 42,112,114,101,118,105,101,119, 0, 42,114,101,110,100,101,114, 95,116,101,120,116, 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, 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, 51, 50, 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,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,112, 97,100, 91, 50, 93, 0,114, 0,103, 0, 98, 0,107, 0, +100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115, +112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 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,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,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,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,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 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, 99,111, 98, 97, 0, 42,101,110,118, 0,117,115,101, 95,110,111,100,101,115, 0,112, 97,100, 91, 55, 93, 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,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,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, + 97,115, 0,115,111,102,116, 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,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,107,121, 95, 99,111,108, +111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117, +109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, + 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, + 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, + 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 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,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, 51, 50, 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, 89, 70, 95, 97,114, 0, 89, + 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95, +100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, + 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0, +107, 50, 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,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,118,101, + 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 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,104, 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,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, 98,112, 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, 99,116,105,109,101, 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,101,102,102,101, 99,116, 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,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, + 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,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, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,109, + 97,112,115,105,122,101, 0,100,114, 97,119,102,108, 97,103, 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, 42,109,114, 0, 42,112,118, 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,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, + 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0, +109,105,100, 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, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, + 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 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,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, 51, 50, 93, 0, 42, +116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101, +118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 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, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 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,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,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, 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, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0, 42,100,109, 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,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110, +100, 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,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,115,121,115, 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, 42,117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111, +116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,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, 51, 50, 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,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,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, 51, 50, 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, 99,111,110,115,116,114, 97,105,110,116, + 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 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,114,111,116, 91, 51, 93, 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,108, 97,121, 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,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102, +108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 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,115,105,122,101,102, 97, 99, 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,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, + 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 53, 93, 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,112,100, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70, +108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, + 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 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,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, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99, +116, 0,102,111,114, 99,101,102,105,101,108,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,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, + 97,109,112, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97, +100, 0,102, 95,112,111,119,101,114, 95,114, 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,116,101,120, 95,109,111,100,101, 0,107,105,110,107, + 0,107,105,110,107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,102,114, 97,109, +101, 0,116,111,116,112,111,105,110,116, 0, 42,120,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,120,100, 97,116, 97, 95,116,121,112,101, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101, +118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 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, 42,112, 97,114,116,105, 99,108,101,115, 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,110,111,100,101,109, 97,115,115, 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,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,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,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,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, + 97,110,105,109, 69,110,100, 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, 83,117, +114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 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, + 83,117,114,102, 78,111,114,109, 97,108,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,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, + 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97, +109, 98,107, 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,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, 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,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, +112, 97,100, 91, 51, 93, 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,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0, +112, 97,115,115, 95,120,111,114, 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,102,102, 99,111,100,101, 99,100, 97,116, 97, 0, 97,117,100,105,111, 0, 99,102,114, 97, 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,114,116, 49, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0, +115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, + 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, + 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,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, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101, +116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70, +101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0, +121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120, +101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120, +112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112, +116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97, +100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, + 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, + 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115, +105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0, +112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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, 99,111,108, + 91, 51, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 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, 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,100,114, 97,119, 95,116,105,109,101,100, 0,115,101,108,101, 99,116,109, +111,100,101, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 42,115,101,115,115,105,111,110, 0, +112,105,118,111,116, 91, 51, 93, 0,116,101,120,115,101,112, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108, +101,116, 95,115,116,114,101,110,103,116,104, 0,112, 97,100, 91, 53, 93, 0,103, 97,109,109, 97, 0,109,117,108, 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, 42,118,112, 97,105,110,116, 0, 42, +119,112, 97,105,110,116, 0, 42,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,101,100,105,116, 98,117,116,102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, + 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112, +111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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,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, 42, 99, 97,109,101,114, 97, 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, 42,101,100, 0,102,114, 97,109,105,110,103, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116, +115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 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,106,117,109,112,102,114, 97,109,101, 0,102,114, 97,109,101, 95,115, +116,101,112, 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, + 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,108, 97,115,116,109,111,100,101, 0,114,102,108, 97,103, 0,118,105,101,119,108, +111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, + 98, 0, 42,103,112,100, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, + 95,100, 97,116, 97, 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,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,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,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, + 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0, +100,114, 97,119,116,121,112,101, 0,108,111, 99, 97,108,118,105,101,119, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111, +117,110,100, 0,102,108, 97,103, 50, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105, +101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102, +108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97, +103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, + 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117, +102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 0, 42,115, 99,114,101,101,110, 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,112,105,110, 0,108,111, 99,107, 0, 99,117, +114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0,112,114,101,118,105,101,119, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98, +111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,110,114, 0,116,101,120,102,114,111,109, 0,115,104,111,119,103,114, +111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, 99,107, 0,114,101, 95, 97,108,105, +103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 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,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, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, + 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114, +107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, + 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110, +101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116, +105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101, +119,108,105,110,101,115, 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,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, 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, + 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110, +116, 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,110,117,109,116,105, +108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107, +114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111, +108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117, +114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, + 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, + 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114,112, +116, 95,109, 97,115,107, 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, 56, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,115, +116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, + 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, + 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116, +105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, + 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, + 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, + 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0, +121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,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,119,109,112, 97,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,110,100,111,102, 95,112, 97,110, 0,110,100, +111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0,118,101,114,115,101, +109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112, +104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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,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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42, +105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, 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,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, + 97,116, 97, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116, +105,108,108, 0, 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116, +105,108,108, 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,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, + 99,102, 48, 0,102, 97, 99,102, 49, 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,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99, +101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70, +105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, + 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117, +112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115, +101,100,101,108,101,109, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, + 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105, +109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105, +115,102,108, 97,103, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111, +100,121, 91, 51, 50, 93, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99,111, +112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 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,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, 98,117,116,115,116, 97, 0, 98,117, +116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, 50, 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,103,111, 0, 97, 99, + 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, + 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, + 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, + 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112, +105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0, +115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91, + 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101, +108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100, +115,103, 97,109,101,101,110,103,105,110,101, 0, 42, 97,114,101, 97, 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, 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,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, 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,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,114,111,112, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, + 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104, +105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, + 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0,114,111,116, +109,111,100,101, 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, 42, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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, + 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, 42,115,111,117,114, 99,101, 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, + 97, 99,116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101, +109,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, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, + 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 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, 51, 50, 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,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, @@ -16974,93 +17306,125 @@ char datatoc_preview_blend[]= { 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 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, 42,110,101,119, 95, -115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, - 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105, -110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, - 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, - 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 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,110,111,100,101,115, 0,108,105, -110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, - 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121, -112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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,105,116,101,114, 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,115, 97,116, 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, -120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,114, -111,116, 97,116,105,111,110, 0,112,114,101,118,105,101,119, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, - 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, - 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0,105,110, -110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0, 99,108,111,110,101, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97, -118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, 99,107, 95,111, 98, 0,112,114,101, -118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0,114, 95,114,111,116, 91, 52, 93, 0, -114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109,101, 0, 98, 97,110,107, 0,115,105, -122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97,108,105,118,101, 0,108,111,111,112, - 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0,114,111,116,109,111,100,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,100,114, 97,119, 95,115,116,101,112, 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,110, 98,101,116, -119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,117,114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 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, -106,105,116,102, 97, 99, 0,107,101,121,101,100, 95,116,105,109,101, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95, -114,101,115, 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, 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,114,101, 97, 99,116,115,104, 97,112,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,100, 97,109,112,102, 97, 99, - 0, 97, 98,115,108,101,110,103,116,104, 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,104,105,108,100,115,112,114,101, 97,100, 0, 99,108,117,109,112,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, 99, 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118, -101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105,110,103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110, -100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98,111,105,100,114,117,108,101, 91, 56, 93, 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, -101,100,105,116, 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,116, 97,114,103, -101,116, 95,111, 98, 0, 42,107,101,121,101,100, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111, -114,115, 0,114,101, 97, 99,116,101,118,101,110,116,115, 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,107,101,121,101, -100, 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, 51, 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, - 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 0, 0, 0, 84, 89, 80, 69, 0, 0, 1, 99, + 0,115,116,114,105,100,101,108,101,110, 0,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0, +105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, + 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110, +107, 0, 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111, +117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104, +114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100, +101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108, +111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115, +100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118,101,100, 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,105,116,101,114, 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,115, 97,116, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0, +114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111, +102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, + 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,105,110,110, +101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,114,111,116, 0,115, 99,117,108,112,116, 95, +116,111,111,108, 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,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,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, + 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 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,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, + 99,107, 95,111, 98, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0, +114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109, +101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97, +108,105,118,101, 0,108,111,111,112, 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,114,116, 50, 91, 51, 93, 0,100,114, 97,119, 95, +115,116,101,112, 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,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,117, +114,115, 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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103, +114,105,100, 95,114,101,115, 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, 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,114,101, 97, 99,116,115, +104, 97,112,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,100, 97,109, +112,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, +102, 97, 99, 0, 99,108,117,109,112,112,111,119, 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, 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,109, 97,120, 95,108, 97,116, 95, 97, 99, + 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105,110, +103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98,111, +105,100,114,117,108,101, 91, 56, 93, 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,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, + 41, 40, 41, 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,116, 97,114,103,101, +116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118,101, +110,116,115, 0,107,101,121,101,100, 95,116, 97,114,103,101,116,115, 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, 51, + 50, 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, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 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,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,112,114,101,115,101,116,115, 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,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, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 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, 42,116,121,112,101,115,116,114, 0, 42,109,101,115,115, 97,103,101, 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,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,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,107,101,121,109, 97, +112,115, 0, 42,103,104,111,115,116,119,105,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97, +109,101, 91, 51, 50, 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, 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,116,105,109,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, 42,112,116,114, + 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,107,101,121,109, 97,112, 0,110, 97,109,101,105,100, 91, 54, 52, 93, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105, +111,110,105,100, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,114,101,112,111,114,116,115, 0,109,118, 97,108, 91, 50, + 93, 0,112,114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121, +109, 97,112, 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, + 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 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, 42,114,110, 97, 95, +112, 97,116,104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, + 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, + 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,103,114,111,117,112, 91, 54, 52, 93, 0,105,100,116,121, +112,101, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121, +105,110,103,102,108, 97,103, 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, 0, 84, 89, 80, 69,161, 1, 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,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,105, 0,118,101, 99, 50, @@ -17069,684 +17433,899 @@ char datatoc_preview_blend[]= { 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, 83, 99,114,105,112,116, 76,105,110,107, 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, 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, - 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 67,117,114, -118,101, 0, 80, 97,116,104, 0, 77,101,115,104, 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, 77, 83,101,108,101, 99,116, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, - 0, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, - 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 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,117,108,116,105,114,101, -115, 77, 97,112, 78,111,100,101, 0, 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, 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, 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, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, - 99,116,105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 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, 87,111,114,108,100, 0, 82, 97,100,105,111, 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, 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, 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, 70,114, 97,109, -105,110,103, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103, -115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116, -105,111,110, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 68, 97,116, 97, 0, 83, 99,117,108,112, -116, 68, 97,116, 97, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 83, 99,101,110,101, 0, 68, 97,103, 70,111,114, -101,115,116, 0, 66, 71,112,105, 99, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 83, 99,114, 65,114, -101, 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 0, 86,105,101, -119, 68,101,112,116,104,115, 0, 98, 71, 80,100, 97,116, 97, 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, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 83,112, 97, - 99,101, 70,105,108,101, 0,100,105,114,101,110,116,114,121, 0, 66,108,101,110,100, 72, 97,110,100,108,101, 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,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, 0, 83,112, 97, 99,101, 78,111, -100,101, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 0, 70,105,108,101, 76,105,115,116, 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, 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, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114, -105,112, 69,108,101,109, 0, 84, 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,104,100, 97,117,100,105,111, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 69,100,105,116,105,110, -103, 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, 79,111,112,115, 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, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, - 67, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76, -105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 65, 99,116,105, -111,110, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 83,112, 97, 99,101, 65, 99,116,105, -111,110, 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, 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, 77,105,110, 77, 97, -120, 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, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, - 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 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, 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, 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, 72, - 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, - 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, - 97,114,116,105, 99,108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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, 84, 76, 69, 78, 0, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, - 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 2, 40, 0, 0, 0, 32, 0,140, 3, 80, 0, 92, 0, 36, 0, 56, 0, 84, 0,112, - 0,120, 0, 16, 0, 24, 0, 40, 0,120, 0, 20, 0,132, 0, 32, 1,128, 0, 0, 0, 0, 0, 0, 0,136, 1, 16, 1, 84, 0, 24, - 3, 8, 0,168, 0, 0, 0,124, 0,132, 1,128, 1, 8, 0, 56, 2,108, 0, 76, 1, 68, 0, 0, 0,108, 0,104, 0,136, 0, 56, - 0, 8, 0, 16, 1, 56, 0, 0, 1, 24, 0, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 24, 0, 76, - 0, 32, 0, 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 1, 0, 0, 32, 0, 16, 0, 64, 0, 24, 0, 12, 0, 56, 0, 0, 0, 52, - 0, 68, 0, 88, 0, 96, 0, 68, 0, 96, 0,116, 0, 64, 0, 60, 0,108, 0, 60, 0,148, 0,152, 0, 60, 0, 92, 0,104, 0,184, - 0,100, 0,180, 0, 52, 0, 68, 0, 0, 0,132, 0, 28, 0, 20, 0,100, 0, 0, 0, 60, 0, 0, 0, 0, 0, 64, 0, 8, 0, 8, - 0,216, 0, 76, 1, 64, 0, 64, 0, 64, 0, 60, 1,164, 0,108, 0,104, 0,116, 0, 40, 0, 84, 0, 56, 0,120, 0,128, 0,152, - 0,208, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,108, 0, 40, 0, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 3,208, 0, 56, - 0, 16, 0, 80, 0, 12, 0,184, 0, 8, 0, 72, 0, 80, 0,232, 0, 8, 0,168, 0, 0, 5,124, 0, 0, 0, 60, 3, 28, 0, 36, - 0,204, 0, 0, 0, 0, 0, 0, 0, 20, 0,136, 0, 36, 1, 88, 0,220, 0,200, 1,200, 0, 0, 0, 0, 1, 8, 0, 12, 0, 12, - 1, 8, 0,180, 0,128, 2, 80, 0, 36, 0,164, 0,220, 2,132, 0, 0, 0,152, 0,208, 0, 16, 14, 56, 0, 56, 12, 32, 0,120, - 0, 20, 0, 24, 0,228, 0, 32, 0, 80, 0, 28, 0, 16, 0, 8, 0, 52, 0,244, 0,240, 1,168, 0,204, 1, 28, 0, 0, 0, 16, - 0, 28, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 1, 56, 0, 0, 0, 56, 0, 44, 0, 64, 0, 48, 0, 8, 0, 44, - 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, 76, 0, 80, 0, 60, 0,128, 0, 76, 0, 60, 0, 12, - 0, 92, 0, 28, 0, 20, 0, 80, 0, 16, 0, 76, 0,108, 0, 84, 0, 28, 0, 96, 0, 60, 0, 56, 0,108, 0,140, 0, 4, 0, 20, - 0, 12, 0, 8, 0, 40, 0, 0, 0, 68, 0,176, 0, 24, 1, 4, 0,116, 1,152, 0, 72, 0, 64, 0,192, 0, 44, 0, 64, 0,116, - 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 28, - 0, 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 24, 0,204, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, - 0, 12, 1, 16, 0, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 44, 0, 20, - 0, 68, 0, 24, 0, 56, 0, 72, 0,252, 1,224, 0, 0, 0, 0, 0, 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 0, 83, 84, 82, 67, - 0, 0, 1, 57, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, - 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, - 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, - 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, - 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, - 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, - 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, - 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, - 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 2, 0, 20, - 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, - 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 20, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, - 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, - 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, - 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 18, 0, 2, 0, 20, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, - 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, - 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 20, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, - 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, - 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, - 0, 2, 0, 18, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 20, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, - 0, 0, 0, 17, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 12, 0, 27, 0, 31, 0, 37, 0, 75, 0, 0, 0, 76, - 0, 4, 0, 77, 0, 7, 0, 61, 0, 12, 0, 78, 0, 36, 0, 79, 0, 27, 0, 80, 0, 2, 0, 18, 0, 2, 0, 81, 0, 2, 0, 82, - 0, 2, 0, 20, 0, 39, 0, 5, 0, 27, 0, 83, 0, 2, 0, 84, 0, 2, 0, 85, 0, 2, 0, 86, 0, 4, 0, 37, 0, 40, 0, 6, - 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 87, 0, 0, 0, 88, 0, 4, 0, 23, 0, 4, 0, 89, 0, 41, 0, 10, 0, 41, 0, 0, - 0, 41, 0, 1, 0, 4, 0, 90, 0, 4, 0, 91, 0, 4, 0, 92, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 93, 0, 0, 0, 94, - 0, 0, 0, 95, 0, 42, 0, 15, 0, 27, 0, 31, 0, 0, 0, 96, 0, 4, 0, 93, 0, 4, 0, 97, 0, 12, 0, 98, 0, 40, 0, 99, - 0, 40, 0,100, 0, 4, 0,101, 0, 4, 0,102, 0, 12, 0,103, 0, 0, 0,104, 0, 4, 0,105, 0, 4, 0,106, 0, 9, 0,107, - 0, 8, 0,108, 0, 43, 0, 5, 0, 4, 0,109, 0, 4, 0,110, 0, 4, 0, 93, 0, 4, 0, 37, 0, 9, 0, 2, 0, 44, 0, 20, - 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 0, 20, 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, 7, 0,121, 0, 2, 0,122, 0, 2, 0,123, - 0, 7, 0,124, 0, 36, 0, 79, 0, 39, 0,125, 0, 32, 0,126, 0, 45, 0, 12, 0, 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, - 0, 4, 0,130, 0, 2, 0,131, 0, 2, 0,132, 0, 2, 0, 20, 0, 2, 0,133, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, - 0, 2, 0,137, 0, 46, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,138, 0, 47, 0,139, 0, 48, 0,140, 0, 49, 0,141, - 0, 2, 0,133, 0, 2, 0, 20, 0, 2, 0,142, 0, 2, 0, 18, 0, 2, 0, 37, 0, 2, 0, 43, 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, 43, 0,152, - 0, 30, 0,153, 0, 7, 0,154, 0, 4, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 7, 0,160, - 0, 7, 0,161, 0, 9, 0,162, 0, 50, 0, 31, 0, 2, 0,163, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 32, 0,167, - 0, 51, 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, 2, 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, 7, 0,183, - 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0, 57, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, - 0, 7, 0,191, 0, 7, 0,192, 0, 52, 0, 15, 0, 0, 0,193, 0, 9, 0,194, 0, 0, 0,195, 0, 0, 0,196, 0, 4, 0,197, - 0, 4, 0,198, 0, 9, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 4, 0,203, 0, 9, 0,204, 0, 9, 0,205, - 0, 4, 0,206, 0, 4, 0, 37, 0, 53, 0, 6, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,207, 0, 7, 0, 67, - 0, 4, 0, 64, 0, 54, 0, 5, 0, 2, 0, 20, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,208, 0, 53, 0,202, 0, 55, 0, 17, - 0, 32, 0,167, 0, 46, 0,209, 0, 56, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 2, 0, 18, 0, 2, 0,213, 0, 7, 0,113, - 0, 7, 0,114, 0, 7, 0,214, 0, 4, 0,215, 0, 2, 0,216, 0, 2, 0,217, 0, 4, 0,133, 0, 4, 0,143, 0, 2, 0,218, - 0, 2, 0,219, 0, 51, 0, 56, 0, 27, 0, 31, 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, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, - 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 2, 0,240, - 0, 2, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 2, 0, 20, 0, 2, 0, 18, - 0, 2, 0,213, 0, 7, 0,247, 0, 7, 0,248, 0, 7, 0,249, 0, 7, 0,250, 0, 2, 0,251, 0, 2, 0,252, 0, 2, 0,253, - 0, 2, 0,131, 0, 4, 0, 23, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 7, 0,254, 0, 7, 0,255, 0, 7, 0,189, - 0, 45, 1, 0, 0, 57, 1, 1, 0, 36, 0, 79, 0, 46, 0,209, 0, 52, 1, 2, 0, 54, 1, 3, 0, 55, 1, 4, 0, 30, 0,153, - 0, 0, 1, 5, 0, 0, 1, 6, 0, 58, 0, 8, 0, 7, 1, 7, 0, 7, 1, 8, 0, 7, 0,175, 0, 4, 0, 20, 0, 7, 1, 9, - 0, 7, 1, 10, 0, 7, 1, 11, 0, 32, 0, 45, 0, 59, 0, 80, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 1, 12, 0, 4, 1, 13, - 0, 2, 0,177, 0, 2, 1, 14, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 1, 15, 0, 7, 1, 16, - 0, 7, 1, 17, 0, 7, 1, 18, 0, 7, 1, 19, 0, 7, 1, 20, 0, 7, 1, 21, 0, 7, 1, 22, 0, 7, 1, 23, 0, 7, 1, 24, - 0, 7, 1, 25, 0, 60, 1, 26, 0, 2, 1, 27, 0, 2, 0, 70, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 1, 28, 0, 7, 1, 29, - 0, 7, 1, 30, 0, 2, 1, 31, 0, 2, 1, 32, 0, 2, 1, 33, 0, 2, 1, 34, 0, 0, 1, 35, 0, 0, 1, 36, 0, 2, 1, 37, - 0, 2, 1, 38, 0, 2, 1, 39, 0, 2, 1, 40, 0, 2, 1, 41, 0, 7, 1, 42, 0, 7, 1, 43, 0, 7, 1, 44, 0, 7, 1, 45, - 0, 2, 1, 46, 0, 2, 0, 43, 0, 2, 1, 47, 0, 2, 1, 48, 0, 2, 1, 49, 0, 2, 1, 50, 0, 7, 1, 51, 0, 7, 1, 52, - 0, 7, 1, 53, 0, 7, 1, 54, 0, 7, 1, 55, 0, 7, 1, 56, 0, 7, 1, 57, 0, 7, 1, 58, 0, 7, 1, 59, 0, 7, 1, 60, - 0, 7, 1, 61, 0, 7, 1, 62, 0, 2, 1, 63, 0, 2, 1, 64, 0, 4, 1, 65, 0, 4, 1, 66, 0, 2, 1, 67, 0, 2, 1, 68, - 0, 2, 1, 69, 0, 2, 1, 70, 0, 7, 1, 71, 0, 7, 1, 72, 0, 7, 1, 73, 0, 7, 1, 74, 0, 2, 1, 75, 0, 2, 1, 76, - 0, 50, 1, 77, 0, 36, 0, 79, 0, 30, 0,153, 0, 39, 0,125, 0, 61, 0, 2, 0, 27, 0, 31, 0, 36, 0, 79, 0, 62, 0,129, - 0, 27, 0, 31, 0, 2, 0,177, 0, 2, 0, 20, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 1, 78, 0, 7, 1, 79, - 0, 7, 1, 80, 0, 7, 1, 81, 0, 7, 1, 82, 0, 7, 1, 83, 0, 7, 1, 84, 0, 7, 1, 85, 0, 7, 1, 86, 0, 7, 1, 87, - 0, 7, 1, 88, 0, 7, 1, 89, 0, 7, 1, 90, 0, 7, 1, 91, 0, 7, 1, 92, 0, 7, 1, 93, 0, 7, 1, 94, 0, 7, 1, 95, - 0, 7, 1, 96, 0, 7, 1, 97, 0, 7, 1, 98, 0, 7, 1, 99, 0, 7, 1,100, 0, 7, 1,101, 0, 7, 1,102, 0, 7, 1,103, - 0, 7, 1,104, 0, 2, 1,105, 0, 2, 1,106, 0, 2, 1,107, 0, 0, 1,108, 0, 0, 1,109, 0, 7, 1,110, 0, 7, 1,111, - 0, 2, 1,112, 0, 2, 1,113, 0, 7, 1,114, 0, 7, 1,115, 0, 7, 1,116, 0, 7, 1,117, 0, 2, 1,118, 0, 2, 1,119, - 0, 4, 1, 13, 0, 4, 1,120, 0, 2, 1,121, 0, 2, 1,122, 0, 2, 1,123, 0, 2, 1,124, 0, 7, 1,125, 0, 7, 1,126, - 0, 7, 1,127, 0, 7, 1,128, 0, 7, 1,129, 0, 7, 1,130, 0, 7, 1,131, 0, 7, 1,132, 0, 7, 1,133, 0, 7, 1,134, - 0, 0, 1,135, 0, 7, 1,136, 0, 7, 1,137, 0, 7, 1,138, 0, 4, 1,139, 0, 0, 1,140, 0, 0, 1, 47, 0, 0, 1,141, - 0, 0, 1, 5, 0, 2, 1,142, 0, 2, 1,143, 0, 2, 1, 64, 0, 2, 1,144, 0, 2, 1,145, 0, 2, 1,146, 0, 7, 1,147, - 0, 7, 1,148, 0, 7, 1,149, 0, 7, 1,150, 0, 7, 1,151, 0, 2, 0,163, 0, 2, 0,164, 0, 54, 1,152, 0, 54, 1,153, - 0, 0, 1,154, 0, 0, 1,155, 0, 0, 1,156, 0, 0, 1,157, 0, 2, 1,158, 0, 2, 1, 12, 0, 7, 1,159, 0, 7, 1,160, - 0, 50, 1, 77, 0, 57, 1, 1, 0, 36, 0, 79, 0, 63, 1,161, 0, 30, 0,153, 0, 7, 1,162, 0, 7, 1,163, 0, 7, 1,164, - 0, 7, 1,165, 0, 7, 1,166, 0, 2, 1,167, 0, 2, 0, 70, 0, 7, 1,168, 0, 7, 1,169, 0, 7, 1,170, 0, 7, 1,171, - 0, 7, 1,172, 0, 7, 1,173, 0, 7, 1,174, 0, 7, 1,175, 0, 7, 1,176, 0, 2, 1,177, 0, 2, 1,178, 0, 7, 1,179, - 0, 7, 1,180, 0, 7, 1,181, 0, 7, 1,182, 0, 7, 1,183, 0, 4, 1,184, 0, 4, 1,185, 0, 4, 1,186, 0, 39, 0,125, - 0, 12, 1,187, 0, 64, 0, 6, 0, 27, 0, 31, 0, 0, 1,188, 0, 7, 1,189, 0, 7, 0, 37, 0, 65, 0, 2, 0, 43, 0,152, - 0, 66, 0, 26, 0, 66, 0, 0, 0, 66, 0, 1, 0, 67, 1,190, 0, 4, 1,191, 0, 4, 1,192, 0, 4, 1,193, 0, 4, 1,194, - 0, 4, 1,195, 0, 4, 1,196, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 1,197, 0, 2, 1,198, 0, 7, 0, 5, 0, 7, 0, 6, - 0, 7, 0, 7, 0, 7, 1,199, 0, 7, 1,200, 0, 7, 1,201, 0, 7, 1,202, 0, 7, 1,203, 0, 7, 1,204, 0, 7, 1,205, - 0, 7, 0, 23, 0, 7, 1,206, 0, 7, 1,207, 0, 68, 0, 15, 0, 27, 0, 31, 0, 67, 1,190, 0, 12, 1,208, 0, 12, 1,209, - 0, 36, 0, 79, 0, 62, 1,210, 0, 2, 0, 20, 0, 2, 1,211, 0, 4, 0,176, 0, 7, 1, 7, 0, 7, 0,175, 0, 7, 1, 8, - 0, 7, 1,212, 0, 7, 1,213, 0, 7, 1,214, 0, 35, 0, 10, 0, 7, 1,215, 0, 7, 1,216, 0, 7, 1,217, 0, 7, 1,218, - 0, 2, 1,219, 0, 2, 1,220, 0, 0, 1,221, 0, 0, 1,222, 0, 0, 1,223, 0, 0, 1,224, 0, 34, 0, 7, 0, 7, 1,225, - 0, 7, 1,216, 0, 7, 1,217, 0, 2, 1,221, 0, 2, 1,224, 0, 7, 1,218, 0, 7, 0, 37, 0, 69, 0, 21, 0, 69, 0, 0, - 0, 69, 0, 1, 0, 2, 0, 18, 0, 2, 1,226, 0, 2, 1,224, 0, 2, 0, 20, 0, 2, 1,227, 0, 2, 1,228, 0, 2, 1,229, - 0, 2, 1,230, 0, 2, 1,231, 0, 2, 1,232, 0, 2, 1,233, 0, 2, 1,234, 0, 7, 1,235, 0, 7, 1,236, 0, 34, 0, 49, - 0, 35, 0, 50, 0, 2, 1,237, 0, 2, 1,238, 0, 4, 1,239, 0, 70, 0, 5, 0, 2, 1,240, 0, 2, 1,226, 0, 0, 0, 20, - 0, 0, 0, 37, 0, 2, 0, 70, 0, 71, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 1,241, 0, 72, 0, 57, - 0, 27, 0, 31, 0, 67, 1,190, 0, 12, 1,242, 0, 12, 1,209, 0, 32, 1,243, 0, 32, 1,244, 0, 32, 1,245, 0, 36, 0, 79, - 0, 73, 1,246, 0, 38, 1,247, 0, 62, 1,210, 0, 12, 1,248, 0, 7, 1, 7, 0, 7, 0,175, 0, 7, 1, 8, 0, 4, 0,176, - 0, 2, 1,249, 0, 2, 1,211, 0, 2, 0, 20, 0, 2, 1,250, 0, 7, 1,251, 0, 7, 1,252, 0, 7, 1,253, 0, 2, 1,229, - 0, 2, 1,230, 0, 2, 1,254, 0, 2, 1,255, 0, 4, 0, 70, 0, 2, 0, 23, 0, 2, 0, 98, 0, 2, 0, 67, 0, 2, 2, 0, - 0, 7, 2, 1, 0, 7, 2, 2, 0, 7, 2, 3, 0, 7, 2, 4, 0, 7, 2, 5, 0, 7, 2, 6, 0, 7, 2, 7, 0, 7, 2, 8, - 0, 7, 2, 9, 0, 7, 2, 10, 0, 0, 2, 11, 0, 0, 2, 12, 0, 64, 2, 13, 0, 64, 2, 14, 0, 64, 2, 15, 0, 64, 2, 16, - 0, 4, 2, 17, 0, 4, 2, 18, 0, 4, 2, 19, 0, 4, 0, 37, 0, 71, 2, 20, 0, 4, 2, 21, 0, 4, 2, 22, 0, 70, 2, 23, - 0, 70, 2, 24, 0, 74, 0, 39, 0, 27, 0, 31, 0, 67, 1,190, 0, 12, 2, 25, 0, 36, 0, 79, 0, 38, 1,247, 0, 62, 1,210, - 0, 75, 2, 26, 0, 76, 2, 27, 0, 77, 2, 28, 0, 78, 2, 29, 0, 79, 2, 30, 0, 80, 2, 31, 0, 81, 2, 32, 0, 82, 2, 33, - 0, 74, 2, 34, 0, 83, 2, 35, 0, 84, 2, 36, 0, 84, 2, 37, 0, 84, 2, 38, 0, 4, 0, 54, 0, 4, 2, 39, 0, 4, 2, 40, - 0, 4, 2, 41, 0, 4, 2, 42, 0, 4, 0,176, 0, 7, 1, 7, 0, 7, 0,175, 0, 7, 1, 8, 0, 7, 2, 43, 0, 7, 0, 37, - 0, 2, 2, 44, 0, 2, 0, 20, 0, 2, 2, 45, 0, 2, 2, 46, 0, 2, 1,211, 0, 2, 2, 47, 0, 85, 2, 48, 0, 86, 2, 49, - 0, 9, 0,162, 0, 77, 0, 8, 0, 9, 2, 50, 0, 7, 2, 51, 0, 4, 2, 52, 0, 0, 0, 20, 0, 0, 2, 53, 0, 2, 1, 13, - 0, 2, 2, 54, 0, 2, 2, 55, 0, 75, 0, 8, 0, 4, 2, 56, 0, 4, 2, 57, 0, 4, 2, 58, 0, 4, 2, 59, 0, 0, 0, 37, - 0, 0, 1,226, 0, 0, 2, 60, 0, 0, 0, 20, 0, 79, 0, 5, 0, 4, 2, 56, 0, 4, 2, 57, 0, 0, 2, 61, 0, 0, 2, 62, - 0, 2, 0, 20, 0, 87, 0, 2, 0, 4, 2, 63, 0, 7, 1,217, 0, 80, 0, 3, 0, 87, 2, 64, 0, 4, 2, 65, 0, 4, 0, 20, - 0, 78, 0, 6, 0, 7, 2, 66, 0, 2, 2, 67, 0, 0, 0, 20, 0, 0, 1,226, 0, 0, 2, 62, 0, 0, 2, 68, 0, 81, 0, 4, - 0, 0, 0,207, 0, 0, 0,183, 0, 0, 0,184, 0, 0, 0,185, 0, 88, 0, 6, 0, 46, 2, 50, 0, 0, 0, 20, 0, 0, 2, 53, - 0, 2, 1, 13, 0, 2, 2, 54, 0, 2, 2, 55, 0, 89, 0, 1, 0, 7, 2, 69, 0, 90, 0, 5, 0, 0, 0,207, 0, 0, 0,183, - 0, 0, 0,184, 0, 0, 0,185, 0, 4, 0, 37, 0, 82, 0, 1, 0, 7, 2, 70, 0, 83, 0, 2, 0, 4, 2, 71, 0, 4, 0, 18, - 0, 76, 0, 7, 0, 7, 2, 51, 0, 46, 2, 50, 0, 0, 0, 20, 0, 0, 2, 53, 0, 2, 1, 13, 0, 2, 2, 54, 0, 2, 2, 55, - 0, 91, 0, 1, 0, 7, 2, 72, 0, 92, 0, 1, 0, 4, 2, 73, 0, 93, 0, 1, 0, 0, 2, 74, 0, 94, 0, 1, 0, 7, 2, 51, - 0, 95, 0, 4, 0, 7, 0,207, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 96, 0, 1, 0, 95, 2, 52, 0, 97, 0, 5, - 0, 4, 2, 75, 0, 4, 2, 76, 0, 0, 0, 20, 0, 0, 1,226, 0, 0, 0,182, 0, 98, 0, 2, 0, 4, 2, 77, 0, 4, 2, 76, - 0, 99, 0, 14, 0, 99, 0, 0, 0, 99, 0, 1, 0, 97, 2, 78, 0, 96, 2, 79, 0, 98, 2, 80, 0, 0, 2, 81, 0, 12, 2, 82, - 0, 12, 2, 83, 0,100, 2, 84, 0, 4, 0, 54, 0, 4, 2, 40, 0, 4, 2, 39, 0, 4, 0, 37, 0, 78, 2, 85, 0, 85, 0, 14, - 0, 12, 2, 86, 0, 78, 2, 85, 0, 0, 2, 87, 0, 0, 2, 88, 0, 0, 2, 89, 0, 0, 2, 90, 0, 0, 2, 91, 0, 0, 2, 92, - 0, 0, 2, 93, 0, 0, 0, 20, 0, 84, 2, 36, 0, 84, 2, 38, 0, 2, 2, 94, 0, 0, 2, 95, 0, 86, 0, 8, 0, 4, 2, 96, - 0, 4, 2, 97, 0, 75, 2, 98, 0, 79, 2, 99, 0, 4, 2, 40, 0, 4, 2, 39, 0, 4, 0, 54, 0, 4, 0, 37, 0,101, 0, 6, - 0,101, 0, 0, 0,101, 0, 1, 0, 4, 0, 18, 0, 4, 1, 13, 0, 0, 0, 17, 0, 0, 2,100, 0,102, 0, 7, 0,101, 2,101, - 0, 2, 2,102, 0, 2, 2, 86, 0, 2, 2,103, 0, 2, 0, 93, 0, 9, 2,104, 0, 9, 2,105, 0,103, 0, 3, 0,101, 2,101, - 0, 32, 0,167, 0, 0, 0, 17, 0,104, 0, 5, 0,101, 2,101, 0, 32, 0,167, 0, 0, 0, 17, 0, 2, 2,106, 0, 0, 2,107, - 0,105, 0, 5, 0,101, 2,101, 0, 7, 0, 91, 0, 7, 2,108, 0, 4, 2,109, 0, 4, 2,110, 0,106, 0, 5, 0,101, 2,101, - 0, 32, 2,111, 0, 0, 0, 72, 0, 4, 1, 13, 0, 4, 0, 20, 0,107, 0, 13, 0,101, 2,101, 0, 32, 2,112, 0, 32, 2,113, - 0, 32, 2,114, 0, 32, 2,115, 0, 7, 2,116, 0, 7, 2,117, 0, 7, 2,108, 0, 7, 2,118, 0, 4, 2,119, 0, 4, 2,120, - 0, 4, 0, 93, 0, 4, 2,121, 0,108, 0, 5, 0,101, 2,101, 0, 2, 2,122, 0, 2, 0, 20, 0, 7, 2,123, 0, 32, 2,124, - 0,109, 0, 3, 0,101, 2,101, 0, 7, 2,125, 0, 4, 0, 93, 0,110, 0, 10, 0,101, 2,101, 0, 7, 2,126, 0, 4, 2,127, - 0, 4, 0, 37, 0, 2, 0, 93, 0, 2, 2,128, 0, 2, 2,129, 0, 2, 2,130, 0, 7, 2,131, 0, 0, 2,132, 0,111, 0, 3, - 0,101, 2,101, 0, 7, 0, 37, 0, 4, 0, 18, 0,112, 0, 11, 0,101, 2,101, 0, 51, 2,133, 0, 7, 2,134, 0, 4, 2,135, - 0, 0, 2,132, 0, 7, 2,136, 0, 4, 2,137, 0, 32, 2,138, 0, 0, 2,139, 0, 4, 2,140, 0, 4, 0, 37, 0,113, 0, 10, - 0,101, 2,101, 0, 32, 2,141, 0, 46, 2,142, 0, 4, 0, 93, 0, 4, 2,143, 0, 7, 2,144, 0, 7, 2,145, 0, 0, 2,139, - 0, 4, 2,140, 0, 4, 0, 37, 0,114, 0, 3, 0,101, 2,101, 0, 7, 2,146, 0, 4, 2,147, 0,115, 0, 5, 0,101, 2,101, - 0, 7, 2,148, 0, 0, 2,132, 0, 2, 0, 20, 0, 2, 2,149, 0,116, 0, 8, 0,101, 2,101, 0, 32, 0,167, 0, 7, 2,148, - 0, 7, 1,218, 0, 7, 0,109, 0, 0, 2,132, 0, 2, 0, 20, 0, 2, 0, 18, 0,117, 0, 21, 0,101, 2,101, 0, 32, 2,150, - 0, 0, 2,132, 0, 51, 2,133, 0, 32, 2,138, 0, 2, 0, 20, 0, 2, 0, 37, 0, 7, 2,151, 0, 7, 2,152, 0, 7, 2,153, - 0, 7, 1,251, 0, 7, 2,154, 0, 7, 2,155, 0, 7, 2,156, 0, 7, 2,157, 0, 4, 2,137, 0, 4, 2,140, 0, 0, 2,139, - 0, 7, 2,158, 0, 7, 2,159, 0, 7, 0, 43, 0,118, 0, 7, 0,101, 2,101, 0, 2, 2,160, 0, 2, 2,161, 0, 4, 0, 70, - 0, 32, 0,167, 0, 7, 2,162, 0, 0, 2,132, 0,119, 0, 9, 0,101, 2,101, 0, 32, 0,167, 0, 7, 2,163, 0, 7, 2,164, - 0, 7, 2,157, 0, 4, 2,165, 0, 4, 2,166, 0, 7, 2,167, 0, 0, 0, 17, 0,120, 0, 1, 0,101, 2,101, 0,121, 0, 5, - 0,101, 2,101, 0,122, 2,168, 0,123, 2,169, 0,124, 2,170, 0,125, 2,171, 0,126, 0, 14, 0,101, 2,101, 0, 78, 2,172, - 0, 78, 2,173, 0, 78, 2,174, 0, 78, 2,175, 0, 78, 2,176, 0, 78, 2,177, 0, 75, 2,178, 0, 4, 2,179, 0, 4, 2,180, - 0, 2, 2,181, 0, 2, 0, 37, 0, 7, 2,182, 0,127, 2,183, 0,128, 0, 3, 0,101, 2,101, 0,129, 2,184, 0,130, 2,183, - 0,131, 0, 4, 0,101, 2,101, 0, 32, 0,167, 0, 4, 2,185, 0, 4, 0, 37, 0,132, 0, 2, 0, 4, 2,186, 0, 7, 1,217, - 0,133, 0, 2, 0, 4, 0,129, 0, 4, 2,187, 0,134, 0, 20, 0,101, 2,101, 0, 32, 0,167, 0, 0, 2,132, 0, 2, 2,188, - 0, 2, 2,189, 0, 2, 0, 20, 0, 2, 0, 37, 0, 7, 2,190, 0, 7, 2,191, 0, 4, 0, 54, 0, 4, 2,192, 0,133, 2,193, - 0,132, 2,194, 0, 4, 2,195, 0, 4, 2,196, 0, 4, 2,197, 0, 4, 2,187, 0, 7, 2,198, 0, 7, 2,199, 0, 7, 2,200, - 0,135, 0, 8, 0,101, 2,101, 0,136, 2,201, 0,129, 2,184, 0, 4, 2,202, 0, 4, 2,203, 0, 4, 2,204, 0, 2, 0, 20, - 0, 2, 0, 57, 0,137, 0, 5, 0,101, 2,101, 0, 32, 0, 45, 0, 2, 2,205, 0, 2, 0, 20, 0, 2, 2,206, 0,138, 0, 5, - 0,101, 2,101, 0, 4, 2,207, 0, 2, 0, 20, 0, 2, 2,208, 0, 7, 2,209, 0,139, 0, 3, 0,101, 2,101, 0,140, 2,210, - 0,125, 2,171, 0,141, 0, 10, 0,101, 2,101, 0, 32, 2,211, 0, 32, 2,212, 0, 0, 2,213, 0, 7, 2,214, 0, 2, 2,215, - 0, 2, 2,216, 0, 0, 2,217, 0, 0, 2,218, 0, 0, 2,107, 0,142, 0, 9, 0,101, 2,101, 0, 32, 2,219, 0, 0, 2,213, - 0, 7, 2,220, 0, 7, 2,221, 0, 0, 1, 13, 0, 0, 2,122, 0, 0, 2,222, 0, 0, 0, 37, 0,143, 0, 24, 0, 27, 0, 31, - 0, 2, 1,227, 0, 2, 1,228, 0, 2, 2,223, 0, 2, 0, 20, 0, 2, 2,224, 0, 2, 2,225, 0, 2, 2,226, 0, 2, 0, 70, - 0, 0, 2,227, 0, 0, 2,228, 0, 0, 2,229, 0, 0, 0, 18, 0, 4, 0, 37, 0, 7, 2,230, 0, 7, 2,231, 0, 7, 2,232, - 0, 7, 2,233, 0, 7, 2,234, 0, 7, 2,235, 0, 34, 2,236, 0, 36, 0, 79, 0, 38, 1,247, 0, 80, 2, 31, 0,144, 0, 3, - 0,144, 0, 0, 0,144, 0, 1, 0, 0, 0, 17, 0, 67, 0, 3, 0, 7, 2,237, 0, 4, 0, 20, 0, 4, 0, 37, 0, 32, 0,111, - 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 2,238, 0, 4, 2,239, 0, 4, 2,240, 0, 4, 2,241, 0, 0, 2,242, 0, 32, 0, 38, - 0, 32, 2,243, 0, 32, 2,244, 0, 32, 2,245, 0, 32, 2,246, 0, 36, 0, 79, 0, 73, 1,246, 0, 67, 1,190, 0,145, 2,247, - 0,145, 2,248, 0,146, 2,249, 0, 9, 0, 2, 0, 12, 2,250, 0, 12, 2, 25, 0, 12, 1,209, 0, 12, 2,251, 0, 12, 2,252, - 0, 62, 1,210, 0, 7, 1, 7, 0, 7, 2,253, 0, 7, 2,254, 0, 7, 0,175, 0, 7, 2,255, 0, 7, 1, 8, 0, 7, 3, 0, - 0, 7, 3, 1, 0, 7, 2,163, 0, 7, 3, 2, 0, 7, 0,211, 0, 4, 3, 3, 0, 2, 0, 20, 0, 2, 3, 4, 0, 2, 3, 5, - 0, 2, 3, 6, 0, 2, 3, 7, 0, 2, 3, 8, 0, 2, 3, 9, 0, 2, 3, 10, 0, 2, 3, 11, 0, 2, 3, 12, 0, 2, 3, 13, - 0, 2, 3, 14, 0, 4, 3, 15, 0, 4, 3, 16, 0, 4, 3, 17, 0, 4, 3, 18, 0, 7, 3, 19, 0, 7, 3, 20, 0, 7, 3, 21, - 0, 7, 3, 22, 0, 7, 3, 23, 0, 7, 3, 24, 0, 7, 3, 25, 0, 7, 3, 26, 0, 7, 3, 27, 0, 7, 3, 28, 0, 7, 3, 29, - 0, 7, 3, 30, 0, 0, 3, 31, 0, 0, 3, 32, 0, 0, 1,211, 0, 0, 3, 33, 0, 0, 3, 34, 0, 0, 3, 35, 0, 7, 3, 36, - 0, 7, 3, 37, 0, 39, 0,125, 0, 12, 3, 38, 0, 12, 3, 39, 0, 12, 3, 40, 0, 12, 3, 41, 0, 7, 3, 42, 0, 2, 2, 71, - 0, 2, 3, 43, 0, 7, 2, 52, 0, 4, 3, 44, 0, 4, 3, 45, 0,147, 3, 46, 0, 2, 3, 47, 0, 2, 0,218, 0, 7, 3, 48, - 0, 12, 3, 49, 0, 12, 3, 50, 0, 12, 3, 51, 0, 12, 3, 52, 0,148, 3, 53, 0,149, 3, 54, 0, 63, 3, 55, 0, 2, 3, 56, - 0, 2, 3, 57, 0, 2, 3, 58, 0, 2, 3, 59, 0, 7, 2, 44, 0, 2, 3, 60, 0, 2, 3, 61, 0,140, 3, 62, 0,129, 3, 63, - 0,129, 3, 64, 0, 4, 3, 65, 0, 4, 3, 66, 0, 4, 3, 67, 0, 4, 0, 70, 0, 9, 0,162, 0, 12, 3, 68, 0,150, 0, 14, - 0,150, 0, 0, 0,150, 0, 1, 0, 32, 0, 38, 0, 7, 2,163, 0, 7, 1, 9, 0, 7, 2,164, 0, 7, 2,157, 0, 0, 0, 17, - 0, 4, 2,165, 0, 4, 2,166, 0, 4, 3, 69, 0, 2, 0, 18, 0, 2, 3, 70, 0, 7, 2,167, 0,148, 0, 36, 0, 2, 3, 71, - 0, 2, 3, 72, 0, 2, 0, 20, 0, 2, 2,157, 0, 7, 3, 73, 0, 7, 3, 74, 0, 7, 3, 75, 0, 7, 3, 76, 0, 7, 3, 77, - 0, 7, 3, 78, 0, 7, 3, 79, 0, 7, 3, 80, 0, 7, 3, 81, 0, 7, 3, 82, 0, 7, 3, 83, 0, 7, 3, 84, 0, 7, 3, 85, - 0, 7, 3, 86, 0, 7, 3, 87, 0, 7, 3, 88, 0, 7, 3, 89, 0, 7, 3, 90, 0, 7, 3, 91, 0, 7, 3, 92, 0, 7, 3, 93, - 0, 7, 3, 94, 0, 7, 3, 95, 0, 7, 3, 96, 0, 2, 3, 97, 0, 2, 3, 98, 0, 2, 3, 99, 0, 2, 3,100, 0, 51, 0,168, - 0,151, 3,101, 0, 7, 3,102, 0, 4, 0, 37, 0,125, 0, 5, 0, 4, 0, 20, 0, 4, 3,103, 0, 4, 3,104, 0, 4, 3,105, - 0, 4, 3,106, 0,152, 0, 1, 0, 7, 1,225, 0,147, 0, 30, 0, 4, 0, 20, 0, 7, 3,107, 0, 7, 3,108, 0, 7, 3,109, - 0, 4, 3,110, 0, 4, 3,111, 0, 4, 3,112, 0, 4, 3,113, 0, 7, 3,114, 0, 7, 3,115, 0, 7, 3,116, 0, 7, 3,117, - 0, 7, 3,118, 0, 7, 3,119, 0, 7, 3,120, 0, 7, 3,121, 0, 7, 3,122, 0, 7, 3,123, 0, 7, 3,124, 0, 7, 3,125, - 0, 7, 3,126, 0, 7, 3,127, 0, 7, 3,128, 0, 7, 3,129, 0, 7, 3,130, 0, 7, 3,131, 0, 4, 3,132, 0, 4, 3,133, - 0, 7, 3,134, 0, 7, 3, 27, 0,149, 0, 44, 0,136, 3,135, 0, 4, 3,136, 0, 4, 3,137, 0,153, 3,138, 0,154, 3,139, - 0, 7, 0, 37, 0, 7, 3,140, 0, 7, 3,141, 0, 7, 3,142, 0, 7, 3,143, 0, 7, 3,144, 0, 7, 3,145, 0, 7, 3,146, - 0, 7, 3,147, 0, 7, 3,148, 0, 7, 3,149, 0, 2, 3,150, 0, 2, 3,151, 0, 7, 3,152, 0, 7, 3,153, 0, 4, 0,130, - 0, 4, 3,154, 0, 4, 3,155, 0, 2, 3,156, 0, 2, 3,157, 0,152, 3,158, 0, 4, 3,159, 0, 4, 0, 81, 0, 7, 3,160, - 0, 7, 3,161, 0, 7, 3,162, 0, 7, 3,163, 0, 2, 3,164, 0, 2, 3,165, 0, 2, 3,166, 0, 2, 3,167, 0, 2, 3,168, - 0, 2, 3,169, 0, 2, 3,170, 0, 2, 3,171, 0,155, 3,172, 0, 7, 3,173, 0, 7, 3,174, 0,125, 3,175, 0,140, 0, 48, - 0, 2, 0, 18, 0, 2, 3,176, 0, 2, 3,177, 0, 2, 3,178, 0, 7, 3,179, 0, 2, 3,180, 0, 2, 3,181, 0, 7, 3,182, - 0, 2, 3,183, 0, 2, 3,184, 0, 7, 3,185, 0, 7, 3,186, 0, 7, 3,187, 0, 7, 3,188, 0, 7, 3,189, 0, 7, 3,190, - 0, 4, 3,191, 0, 7, 3,192, 0, 7, 3,193, 0, 7, 3,194, 0, 74, 3,195, 0, 74, 3,196, 0, 74, 3,197, 0, 0, 3,198, - 0, 7, 3,199, 0, 7, 3,200, 0, 36, 0, 79, 0, 2, 3,201, 0, 0, 3,202, 0, 0, 3,203, 0, 7, 3,204, 0, 4, 3,205, - 0, 7, 3,206, 0, 7, 3,207, 0, 4, 3,208, 0, 4, 0, 20, 0, 7, 3,209, 0, 7, 3,210, 0, 7, 3,211, 0, 78, 3,212, - 0, 7, 3,213, 0, 7, 3,214, 0, 7, 3,215, 0, 7, 3,216, 0, 7, 3,217, 0, 7, 3,218, 0, 7, 3,219, 0, 4, 3,220, - 0,156, 0, 71, 0, 27, 0, 31, 0, 2, 0,177, 0, 2, 1, 14, 0, 2, 1, 47, 0, 2, 3,221, 0, 7, 3,222, 0, 7, 3,223, - 0, 7, 3,224, 0, 7, 3,225, 0, 7, 3,226, 0, 7, 3,227, 0, 7, 3,228, 0, 7, 3,229, 0, 7, 1, 84, 0, 7, 1, 86, - 0, 7, 1, 85, 0, 7, 3,230, 0, 4, 3,231, 0, 7, 3,232, 0, 7, 3,233, 0, 7, 3,234, 0, 7, 3,235, 0, 7, 3,236, - 0, 7, 3,237, 0, 7, 3,238, 0, 2, 3,239, 0, 2, 1, 13, 0, 2, 3,240, 0, 2, 3,241, 0, 2, 3,242, 0, 2, 3,243, - 0, 2, 3,244, 0, 2, 3,245, 0, 7, 3,246, 0, 7, 3,247, 0, 7, 3,248, 0, 7, 3,249, 0, 7, 3,250, 0, 7, 3,251, - 0, 7, 3,252, 0, 7, 3,253, 0, 7, 3,254, 0, 7, 3,255, 0, 7, 4, 0, 0, 7, 4, 1, 0, 2, 4, 2, 0, 2, 4, 3, - 0, 2, 4, 4, 0, 2, 4, 5, 0, 7, 4, 6, 0, 7, 4, 7, 0, 7, 4, 8, 0, 7, 4, 9, 0, 2, 4, 10, 0, 2, 4, 11, - 0, 2, 4, 12, 0, 2, 4, 13, 0, 7, 4, 14, 0, 7, 4, 15, 0, 7, 4, 16, 0, 7, 4, 17, 0, 2, 4, 18, 0, 2, 4, 19, - 0, 2, 4, 20, 0, 2, 0, 43, 0, 7, 4, 21, 0, 7, 4, 22, 0, 36, 0, 79, 0, 50, 1, 77, 0, 30, 0,153, 0, 39, 0,125, - 0,157, 0, 16, 0, 2, 4, 23, 0, 2, 4, 24, 0, 2, 4, 25, 0, 2, 0, 20, 0, 2, 4, 26, 0, 2, 4, 27, 0, 2, 4, 28, - 0, 2, 4, 29, 0, 2, 4, 30, 0, 2, 4, 31, 0, 2, 4, 32, 0, 2, 4, 33, 0, 4, 4, 34, 0, 7, 4, 35, 0, 7, 4, 36, - 0, 7, 4, 37, 0,158, 0, 8, 0,158, 0, 0, 0,158, 0, 1, 0, 4, 3, 3, 0, 4, 4, 38, 0, 4, 0, 20, 0, 2, 4, 39, - 0, 2, 4, 40, 0, 32, 0,167, 0,159, 0, 13, 0, 9, 4, 41, 0, 9, 4, 42, 0, 4, 4, 43, 0, 4, 4, 44, 0, 4, 4, 45, - 0, 4, 4, 46, 0, 4, 4, 47, 0, 4, 4, 48, 0, 4, 4, 49, 0, 4, 4, 50, 0, 4, 4, 51, 0, 4, 0, 37, 0, 0, 4, 52, - 0,160, 0, 5, 0, 9, 4, 53, 0, 9, 4, 54, 0, 4, 4, 55, 0, 4, 0, 70, 0, 0, 4, 56, 0,161, 0, 13, 0, 4, 0, 18, - 0, 4, 4, 57, 0, 4, 4, 58, 0, 4, 4, 59, 0, 4, 4, 60, 0, 4, 4, 61, 0, 4, 0, 93, 0, 4, 4, 62, 0, 4, 4, 63, - 0, 4, 4, 64, 0, 4, 4, 65, 0, 4, 4, 66, 0, 26, 0, 30, 0,162, 0, 4, 0, 4, 4, 67, 0, 7, 4, 68, 0, 2, 0, 20, - 0, 2, 2, 68, 0,163, 0, 11, 0,163, 0, 0, 0,163, 0, 1, 0, 0, 0, 17, 0, 62, 4, 69, 0, 63, 4, 70, 0, 4, 3, 3, - 0, 4, 4, 71, 0, 4, 4, 72, 0, 4, 0, 37, 0, 4, 4, 73, 0, 4, 4, 74, 0,164, 0,130, 0,159, 4, 75, 0,160, 4, 76, - 0,161, 4, 77, 0, 4, 4, 78, 0, 4, 0,130, 0, 4, 3,154, 0, 4, 4, 79, 0, 4, 4, 80, 0, 4, 4, 81, 0, 4, 4, 82, - 0, 2, 0, 20, 0, 2, 4, 83, 0, 7, 3, 20, 0, 7, 4, 84, 0, 7, 4, 85, 0, 7, 4, 86, 0, 7, 4, 87, 0, 7, 4, 88, - 0, 2, 4, 89, 0, 2, 4, 90, 0, 2, 4, 91, 0, 2, 4, 92, 0, 2, 0,217, 0, 2, 4, 93, 0, 2, 4, 94, 0, 2, 3,100, - 0, 2, 4, 95, 0, 2, 4, 96, 0, 2, 1, 34, 0, 2, 0,109, 0, 2, 4, 97, 0, 2, 4, 98, 0, 2, 4, 99, 0, 2, 4,100, - 0, 2, 4,101, 0, 2, 4,102, 0, 2, 4,103, 0, 2, 4,104, 0, 2, 4,105, 0, 2, 1, 35, 0, 2, 4,106, 0, 2, 4,107, - 0, 2, 4,108, 0, 2, 4,109, 0, 4, 4,110, 0, 4, 1, 13, 0, 2, 4,111, 0, 2, 4,112, 0, 2, 4,113, 0, 2, 4,114, - 0, 2, 4,115, 0, 2, 4,116, 0, 24, 4,117, 0, 24, 4,118, 0, 23, 4,119, 0, 12, 4,120, 0, 2, 4,121, 0, 2, 0, 37, - 0, 7, 4,122, 0, 7, 4,123, 0, 7, 4,124, 0, 7, 4,125, 0, 7, 4,126, 0, 7, 4,127, 0, 7, 4,128, 0, 7, 4,129, - 0, 7, 4,130, 0, 2, 4,131, 0, 2, 4,132, 0, 2, 4,133, 0, 2, 4,134, 0, 2, 4,135, 0, 2, 4,136, 0, 7, 4,137, - 0, 7, 4,138, 0, 7, 4,139, 0, 2, 4,140, 0, 2, 4,141, 0, 2, 4,142, 0, 2, 4,143, 0, 2, 4,144, 0, 2, 4,145, - 0, 2, 4,146, 0, 2, 4,147, 0, 2, 4,148, 0, 2, 4,149, 0, 4, 4,150, 0, 4, 4,151, 0, 4, 4,152, 0, 4, 4,153, - 0, 4, 4,154, 0, 7, 4,155, 0, 4, 4,156, 0, 4, 4,157, 0, 4, 4,158, 0, 4, 4,159, 0, 7, 4,160, 0, 7, 4,161, - 0, 7, 4,162, 0, 7, 4,163, 0, 7, 4,164, 0, 7, 4,165, 0, 7, 4,166, 0, 7, 4,167, 0, 7, 4,168, 0, 0, 4,169, - 0, 0, 4,170, 0, 4, 4,171, 0, 2, 4,172, 0, 2, 1, 12, 0, 0, 4,173, 0, 7, 4,174, 0, 7, 4,175, 0, 4, 4,176, - 0, 4, 4,177, 0, 7, 4,178, 0, 7, 4,179, 0, 2, 4,180, 0, 2, 4,181, 0, 7, 4,182, 0, 2, 4,183, 0, 2, 4,184, - 0, 4, 4,185, 0, 2, 4,186, 0, 2, 4,187, 0, 2, 4,188, 0, 2, 4,189, 0, 7, 4,190, 0, 7, 0, 70, 0, 42, 4,191, - 0,165, 0, 9, 0,165, 0, 0, 0,165, 0, 1, 0, 0, 0, 17, 0, 2, 4,192, 0, 2, 4,193, 0, 2, 4,194, 0, 2, 0, 43, - 0, 7, 4,195, 0, 7, 0, 70, 0,166, 0, 5, 0, 7, 4,196, 0, 0, 0, 18, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 1, 12, - 0,167, 0, 5, 0,167, 0, 0, 0,167, 0, 1, 0, 4, 4,197, 0, 0, 4,198, 0, 4, 0, 20, 0,168, 0, 5, 0,169, 4,199, - 0, 2, 0, 20, 0, 2, 4,200, 0, 2, 4,201, 0, 2, 4,202, 0,170, 0, 4, 0, 2, 0,109, 0, 2, 2,134, 0, 2, 4,203, - 0, 2, 4,204, 0,171, 0, 7, 0, 2, 0, 20, 0, 2, 4,205, 0, 2, 4,206, 0, 2, 4,207, 0,170, 4,208, 0, 7, 4,209, - 0, 4, 4,210, 0,172, 0, 4, 0,172, 0, 0, 0,172, 0, 1, 0, 0, 4,211, 0, 7, 4,212, 0,173, 0, 56, 0, 2, 4,213, - 0, 2, 4,214, 0, 7, 4,215, 0, 7, 4,216, 0, 2, 4,203, 0, 2, 4,217, 0, 7, 4,218, 0, 7, 4,219, 0, 2, 4,220, - 0, 2, 4,221, 0, 2, 4,222, 0, 2, 4,223, 0, 7, 4,224, 0, 7, 4,225, 0, 7, 4,226, 0, 7, 0, 37, 0, 2, 4,227, - 0, 2, 4,228, 0, 2, 4,229, 0, 2, 4,230, 0,168, 4,231, 0,171, 4,232, 0, 7, 4,233, 0, 7, 4,234, 0, 0, 4,235, - 0, 0, 4,236, 0, 0, 4,237, 0, 0, 4,238, 0, 0, 4,239, 0, 0, 4,240, 0, 2, 4,241, 0, 7, 4,242, 0, 7, 4,243, - 0, 7, 4,244, 0, 7, 4,245, 0, 7, 4,246, 0, 7, 4,247, 0, 7, 4,248, 0, 7, 4,249, 0, 7, 4,250, 0, 7, 4,251, - 0, 2, 4,252, 0, 0, 4,253, 0, 0, 4,254, 0, 0, 4,255, 0, 0, 5, 0, 0, 32, 5, 1, 0, 0, 5, 2, 0, 0, 5, 3, - 0, 0, 5, 4, 0, 0, 5, 5, 0, 0, 5, 6, 0, 0, 5, 7, 0, 0, 5, 8, 0, 0, 5, 9, 0, 0, 5, 10, 0,174, 0, 6, - 0, 2, 0,109, 0, 0, 2,134, 0, 0, 5, 11, 0, 0, 5, 12, 0, 0, 0, 20, 0, 0, 0,182, 0,175, 0, 26, 0,176, 5, 13, - 0, 50, 1, 77, 0, 60, 5, 14, 0,174, 5, 15, 0,174, 5, 16, 0,174, 5, 17, 0,174, 5, 18, 0,174, 5, 19, 0,174, 5, 20, - 0,174, 5, 21, 0, 7, 5, 22, 0, 2, 5, 23, 0, 2, 1, 47, 0, 2, 5, 24, 0, 2, 2, 1, 0, 0, 5, 25, 0, 0, 5, 26, - 0, 0, 5, 27, 0, 0, 5, 28, 0, 0, 0, 93, 0, 0, 5, 29, 0, 0, 5, 30, 0, 0, 5, 31, 0, 0, 5, 32, 0, 0, 5, 33, - 0, 0, 0,182, 0,177, 0, 43, 0, 27, 0, 31, 0, 32, 5, 34, 0,156, 5, 35, 0,177, 5, 36, 0, 46, 0,209, 0, 12, 5, 37, - 0,158, 5, 38, 0, 7, 5, 39, 0, 7, 5, 40, 0, 7, 5, 41, 0, 7, 5, 42, 0, 4, 3, 3, 0, 7, 5, 43, 0, 2, 5, 44, - 0, 2, 5, 45, 0, 2, 5, 46, 0, 2, 5, 47, 0, 2, 5, 48, 0, 2, 5, 49, 0, 2, 5, 50, 0, 2, 1, 5, 0, 57, 1, 1, - 0, 9, 5, 51, 0,157, 5, 52, 0,166, 5, 53, 0,173, 5, 54, 0,164, 0,183, 0,162, 5, 55, 0, 39, 0,125, 0, 12, 0,103, - 0, 12, 5, 56, 0, 2, 5, 57, 0, 2, 5, 58, 0, 2, 5, 59, 0, 2, 5, 60, 0,178, 5, 61, 0, 2, 5, 62, 0, 2, 5, 63, - 0, 2, 1, 64, 0, 2, 0,218, 0,175, 5, 64, 0, 4, 5, 65, 0, 4, 0, 37, 0,179, 0, 9, 0, 46, 0,209, 0, 45, 1, 0, - 0, 7, 2, 8, 0, 7, 2, 9, 0, 7, 0,109, 0, 7, 5, 66, 0, 7, 5, 67, 0, 2, 5, 68, 0, 2, 5, 69, 0,180, 0, 75, - 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0, 7, 5, 74, 0, 7, 5, 75, - 0, 7, 5, 76, 0, 7, 5, 77, 0, 7, 5, 78, 0, 7, 5, 79, 0, 7, 5, 80, 0, 7, 1, 20, 0, 7, 5, 81, 0, 4, 5, 82, - 0, 2, 5, 83, 0, 2, 5, 12, 0, 32, 5, 34, 0, 32, 5, 84, 0,179, 5, 85, 0,180, 5, 86, 0,183, 5, 87, 0,184, 5, 88, - 0,185, 5, 89, 0, 0, 5, 90, 0, 2, 4, 25, 0, 2, 5, 91, 0, 4, 3, 3, 0, 4, 5, 92, 0, 2, 5, 93, 0, 2, 5, 94, - 0, 2, 5, 95, 0, 0, 5, 96, 0, 0, 0, 43, 0, 7, 0,115, 0, 7, 5, 97, 0, 7, 5, 98, 0, 7, 5, 99, 0, 7, 5,100, - 0, 7, 5,101, 0, 7, 5,102, 0, 7, 5,103, 0, 7, 0,174, 0, 7, 5, 39, 0, 2, 5,104, 0, 2, 5,105, 0, 2, 5,106, - 0, 2, 5,107, 0, 2, 0,137, 0, 2, 5, 24, 0, 2, 5,108, 0, 2, 5,109, 0, 2, 5,110, 0, 2, 5,111, 0, 7, 5,112, - 0, 7, 5,113, 0, 67, 5,114, 0, 12, 5,115, 0, 2, 5,116, 0, 2, 2, 53, 0, 2, 5,117, 0, 2, 0, 20, 0, 2, 5,118, - 0, 2, 5,119, 0, 2, 5,120, 0, 0, 5,121, 0, 0, 5,122, 0, 9, 5,123, 0,186, 5,124, 0, 7, 5,125, 0, 2, 5,126, - 0, 2, 5,127, 0, 2, 5, 48, 0, 2, 5, 49, 0,187, 0, 19, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 5,128, 0, 23, 5,129, - 0, 23, 5,130, 0, 7, 5,131, 0, 7, 5,132, 0, 7, 5,133, 0, 7, 5,134, 0, 2, 5,135, 0, 2, 5,136, 0, 2, 5,137, - 0, 2, 5,138, 0, 2, 5,139, 0, 2, 5,140, 0, 4, 0, 20, 0, 7, 5,141, 0, 2, 5, 94, 0, 0, 2,107, 0,181, 0, 6, - 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,188, 0, 6, 0,181, 0, 0, - 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,189, 0, 27, 0,181, 0, 0, 0,181, 0, 1, - 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0, 4, 5,142, 0, 4, 0, 70, 0,187, 5,143, 0, 9, 5,144, - 0, 12, 5,145, 0, 36, 0, 79, 0, 27, 0, 80, 0, 0, 5,146, 0, 0, 5,147, 0, 0, 5,148, 0, 2, 5,149, 0, 2, 5,150, - 0, 2, 5,151, 0, 2, 5,152, 0, 2, 0, 65, 0, 2, 0, 46, 0, 2, 0,137, 0, 2, 5,153, 0, 4, 0, 20, 0, 7, 5,154, - 0, 24, 0, 36, 0,190, 0, 29, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0,183, 5, 87, - 0, 2, 5, 73, 0, 2, 5,155, 0, 2, 5,156, 0, 2, 5,157, 0, 2, 5,158, 0,187, 5,143, 0, 2, 5,159, 0, 2, 0,137, - 0, 2, 5,150, 0, 2, 5,160, 0, 9, 5,161, 0, 2, 5, 24, 0, 0, 5,162, 0, 0, 5,163, 0, 2, 5,164, 0, 2, 5,165, - 0, 2, 3, 12, 0, 2, 5,166, 0, 2, 5,167, 0, 0, 0, 37, 0, 0, 0, 20, 0, 0, 1, 47, 0, 0, 5,168, 0,191, 0, 16, - 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,187, 5,143, 0, 7, 2, 8, - 0, 7, 2, 9, 0, 2, 5,159, 0, 2, 5,169, 0, 2, 5,170, 0, 2, 5,171, 0, 4, 0, 20, 0, 7, 5, 66, 0,186, 5,124, - 0,192, 0, 33, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,193, 5,172, - 0, 4, 5,173, 0, 0, 5,174, 0, 0, 5,175, 0, 0, 5,176, 0, 2, 0, 18, 0, 2, 5,177, 0, 2, 0, 20, 0, 2, 5,178, - 0, 2, 5,179, 0, 2, 5,180, 0, 2, 5,181, 0, 2, 0, 43, 0, 4, 0, 70, 0, 0, 5,182, 0,194, 5,183, 0, 2, 5,184, - 0, 2, 5,185, 0, 2, 5,186, 0, 2, 0,208, 0, 9, 5,187, 0, 9, 5,188, 0, 9, 5,189, 0, 9, 5,190, 0, 9, 5,191, - 0, 2, 5,192, 0, 0, 5,193, 0,195, 0, 23, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, - 0, 2, 5, 73, 0,187, 5,143, 0, 12, 5,194, 0, 2, 5,150, 0, 2, 5,195, 0, 2, 0, 20, 0, 2, 0, 57, 0, 9, 5,161, - 0, 12, 5,196, 0,196, 5,197, 0, 0, 5,198, 0,197, 5,199, 0, 4, 5,200, 0, 4, 5,201, 0, 2, 0, 18, 0, 2, 5,202, - 0, 2, 5,203, 0, 2, 5,204, 0,198, 0, 29, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, - 0, 2, 5, 73, 0,187, 5,143, 0, 46, 2,142, 0, 45, 1, 0, 0, 60, 5, 14, 0, 2, 1, 13, 0, 2, 0,137, 0, 2, 5,205, - 0, 2, 5,206, 0, 4, 0, 20, 0, 2, 5, 44, 0, 2, 5,207, 0, 2, 5,153, 0, 2, 5,150, 0, 7, 5, 66, 0, 0, 5,208, - 0, 0, 5,209, 0, 0, 5,210, 0, 0, 5,211, 0, 7, 2, 8, 0, 7, 2, 9, 0, 7, 5,212, 0, 7, 5,213, 0,186, 5,124, - 0,199, 0, 11, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0, 2, 0,137, - 0, 2, 5,153, 0, 2, 5,214, 0, 2, 0, 20, 0,187, 5,143, 0,200, 0, 24, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, - 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0, 42, 5,215, 0, 4, 5,216, 0, 4, 5,217, 0, 2, 0, 93, 0, 2, 0,137, - 0, 4, 5,218, 0, 4, 5,219, 0, 4, 5,220, 0, 4, 5,221, 0, 4, 5,222, 0, 4, 5,223, 0, 4, 5,224, 0, 4, 5,225, - 0, 7, 5,226, 0, 23, 5,227, 0, 23, 5,228, 0, 4, 5,229, 0, 4, 5,230, 0,201, 0, 10, 0, 27, 0, 31, 0, 9, 5,231, - 0, 9, 5,232, 0, 9, 5,233, 0, 9, 5,234, 0, 9, 5,235, 0, 4, 0, 93, 0, 4, 5,236, 0, 0, 5,237, 0, 0, 5,238, - 0,202, 0, 10, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0,201, 5,239, 0, 2, 0, 93, - 0, 2, 0,137, 0, 4, 0, 43, 0, 9, 5,240, 0,203, 0, 8, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, - 0,182, 5, 72, 0,187, 5,143, 0, 4, 0, 20, 0, 4, 5,241, 0,204, 0, 21, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, - 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,187, 5,143, 0, 27, 5,242, 0, 27, 0, 80, 0, 2, 0, 20, 0, 2, 0,137, - 0, 7, 5,243, 0, 9, 5,244, 0, 7, 2, 8, 0, 7, 2, 9, 0, 57, 1, 1, 0, 57, 5,245, 0, 4, 5,246, 0, 2, 5,162, - 0, 2, 0, 37, 0,186, 5,124, 0,205, 0, 42, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, - 0, 2, 5, 73, 0,187, 5,143, 0,206, 5,247, 0, 0, 5,174, 0, 0, 5,175, 0, 0, 5,176, 0, 2, 0, 18, 0, 2, 5,185, - 0, 2, 0, 20, 0, 2, 5,178, 0, 9, 5,244, 0, 4, 5,248, 0, 4, 5,249, 0, 4, 5,250, 0, 4, 5,251, 0, 23, 5,252, - 0, 23, 5,253, 0, 7, 5,254, 0, 7, 5,255, 0, 7, 6, 0, 0, 7, 5,243, 0, 2, 5,184, 0, 2, 0,208, 0, 2, 1,102, - 0, 2, 6, 1, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 6, 2, 0, 2, 6, 3, 0, 9, 5,187, 0, 9, 5,188, 0, 9, 5,189, - 0, 9, 5,190, 0, 9, 5,191, 0, 2, 5,192, 0, 0, 5,193, 0, 56, 6, 4, 0,207, 0, 20, 0, 0, 6, 5, 0, 0, 6, 6, - 0, 0, 6, 7, 0, 0, 6, 8, 0, 0, 6, 9, 0, 0, 6, 10, 0, 0, 6, 11, 0, 0, 6, 12, 0, 0, 6, 13, 0, 0, 6, 14, - 0, 0, 6, 15, 0, 0, 6, 16, 0, 0, 6, 17, 0, 0, 6, 18, 0, 0, 6, 19, 0, 0, 6, 20, 0, 0, 6, 21, 0, 0, 6, 22, - 0, 0, 2, 68, 0, 0, 6, 23, 0,208, 0, 54, 0, 0, 6, 24, 0, 0, 6, 15, 0, 0, 6, 16, 0, 0, 6, 25, 0, 0, 6, 26, - 0, 0, 6, 27, 0, 0, 6, 28, 0, 0, 6, 29, 0, 0, 6, 30, 0, 0, 6, 31, 0, 0, 6, 32, 0, 0, 6, 33, 0, 0, 6, 34, - 0, 0, 6, 35, 0, 0, 6, 36, 0, 0, 6, 37, 0, 0, 6, 38, 0, 0, 6, 39, 0, 0, 6, 40, 0, 0, 6, 41, 0, 0, 6, 42, - 0, 0, 6, 43, 0, 0, 6, 44, 0, 0, 6, 45, 0, 0, 6, 46, 0, 0, 6, 47, 0, 0, 6, 48, 0, 0, 6, 49, 0, 0, 6, 50, - 0, 0, 6, 51, 0, 0, 6, 52, 0, 0, 6, 53, 0, 0, 0, 95, 0, 0, 6, 54, 0, 0, 6, 55, 0, 0, 6, 56, 0, 0, 6, 57, - 0, 0, 6, 58, 0, 0, 6, 59, 0, 0, 6, 60, 0, 0, 6, 61, 0, 0, 6, 62, 0, 0, 6, 63, 0, 0, 6, 64, 0, 0, 6, 65, - 0, 0, 6, 66, 0, 0, 6, 67, 0, 0, 6, 68, 0, 0, 6, 69, 0, 0, 6, 70, 0, 0, 6, 71, 0, 0, 6, 72, 0, 0, 6, 73, - 0, 0, 6, 74, 0,209, 0, 5, 0, 0, 6, 75, 0, 0, 6, 32, 0, 0, 6, 34, 0, 2, 0, 20, 0, 2, 0, 37, 0,210, 0, 22, - 0,210, 0, 0, 0,210, 0, 1, 0, 0, 0, 17, 0,207, 6, 76, 0,208, 6, 77, 0,208, 6, 78, 0,208, 6, 79, 0,208, 6, 80, - 0,208, 6, 81, 0,208, 6, 82, 0,208, 6, 83, 0,208, 6, 84, 0,208, 6, 85, 0,208, 6, 86, 0,208, 6, 87, 0,208, 6, 88, - 0,208, 6, 89, 0,208, 6, 90, 0,208, 6, 91, 0,209, 6, 92, 0, 0, 6, 93, 0, 0, 6, 94, 0,211, 0, 5, 0, 4, 0, 20, - 0, 4, 0, 37, 0, 7, 2, 52, 0, 7, 6, 95, 0, 7, 1,225, 0,212, 0, 66, 0, 4, 0, 20, 0, 4, 6, 96, 0, 4, 6, 97, - 0, 0, 6, 98, 0, 0, 6, 99, 0, 0, 6,100, 0, 0, 6,101, 0, 0, 6,102, 0, 0, 6,103, 0, 0, 6,104, 0, 0, 6,105, - 0, 0, 6,106, 0, 2, 6,107, 0, 2, 6,108, 0, 4, 6,109, 0, 4, 6,110, 0, 4, 6,111, 0, 4, 6,112, 0, 2, 6,113, - 0, 2, 6,114, 0, 2, 6,115, 0, 2, 6,116, 0, 4, 6,117, 0, 4, 6,118, 0, 2, 6,119, 0, 2, 6,120, 0, 2, 6,121, - 0, 2, 6,122, 0, 0, 6,123, 0, 12, 6,124, 0, 2, 6,125, 0, 2, 6,126, 0, 2, 6,127, 0, 2, 6,128, 0, 2, 6,129, - 0, 2, 6,130, 0, 2, 6,131, 0, 2, 6,132, 0,211, 6,133, 0, 2, 6,134, 0, 2, 6,135, 0, 2, 6,136, 0, 2, 6,137, - 0, 4, 6,138, 0, 4, 6,139, 0, 4, 6,140, 0, 4, 6,141, 0, 2, 6,142, 0, 2, 6,143, 0, 2, 6,144, 0, 2, 6,145, - 0, 2, 6,146, 0, 2, 6,147, 0, 2, 6,148, 0, 2, 6,149, 0, 2, 6,150, 0, 2, 6,151, 0, 2, 6,152, 0, 2, 0, 37, - 0, 0, 6,153, 0, 0, 6,154, 0, 0, 6,155, 0, 7, 6,156, 0, 2, 5, 50, 0, 2, 6,157, 0, 54, 6,158, 0,213, 0, 18, - 0, 27, 0, 31, 0, 12, 6,159, 0, 12, 6,160, 0, 12, 6,161, 0,177, 6,162, 0, 2, 2,151, 0, 2, 6,163, 0, 2, 2,152, - 0, 2, 6,164, 0, 2, 6,165, 0, 2, 6,166, 0, 2, 6,167, 0, 2, 6,168, 0, 2, 6,169, 0, 2, 0, 37, 0, 2, 6,170, - 0, 2, 6,171, 0, 2, 6,172, 0,214, 0, 5, 0,214, 0, 0, 0,214, 0, 1, 0,214, 6,173, 0, 13, 6,174, 0, 4, 0, 20, - 0,215, 0, 7, 0,215, 0, 0, 0,215, 0, 1, 0,214, 6,175, 0,214, 6,176, 0, 2, 4,118, 0, 2, 0, 20, 0, 4, 0, 37, - 0,216, 0, 17, 0,216, 0, 0, 0,216, 0, 1, 0, 0, 6,177, 0, 0, 6,178, 0, 0, 6,179, 0, 2, 6,180, 0, 2, 6,181, - 0, 2, 6,165, 0, 2, 6,166, 0, 2, 0, 20, 0, 2, 3, 70, 0, 2, 6,182, 0, 2, 6,183, 0, 2, 6,184, 0, 2, 6,185, - 0, 4, 6,186, 0,216, 6,187, 0,182, 0, 30, 0,182, 0, 0, 0,182, 0, 1, 0,214, 6,175, 0,214, 6,176, 0,214, 6,188, - 0,214, 6,189, 0,213, 6,190, 0, 7, 6,191, 0, 23, 0, 52, 0, 23, 6,192, 0, 23, 6,193, 0, 2, 6,194, 0, 2, 6,195, - 0, 2, 6,196, 0, 0, 5, 70, 0, 0, 6,197, 0, 2, 6,198, 0, 2, 6,199, 0, 0, 6,200, 0, 0, 6,201, 0, 0, 6,202, - 0, 0, 6,203, 0, 2, 6,204, 0, 2, 6,205, 0, 2, 6,206, 0, 2, 0, 20, 0, 39, 0,125, 0, 12, 6,207, 0, 12, 6,208, - 0, 12, 6,209, 0,217, 0, 11, 0, 0, 6,210, 0, 2, 6,211, 0, 2, 6,212, 0, 2, 6,213, 0, 2, 6,214, 0, 2, 6,215, - 0, 2, 4,102, 0, 9, 6,216, 0, 9, 6,217, 0, 4, 6,218, 0, 4, 6,219, 0,218, 0, 1, 0, 0, 6,220, 0,219, 0, 8, - 0, 56, 6,221, 0, 56, 6,222, 0,219, 6,223, 0,219, 6,224, 0,219, 6,225, 0, 2, 0,133, 0, 2, 0, 20, 0, 4, 6,226, - 0,220, 0, 4, 0, 4, 5,216, 0, 4, 6,227, 0, 4, 5,220, 0, 4, 6,228, 0,221, 0, 2, 0, 4, 6,229, 0, 4, 6,230, - 0,222, 0, 7, 0, 7, 6,231, 0, 7, 6,232, 0, 7, 6,233, 0, 4, 0, 20, 0, 4, 0, 37, 0, 7, 3,232, 0, 7, 6,234, - 0,223, 0, 3, 0, 0, 6,235, 0, 0, 5,176, 0, 48, 0,140, 0,224, 0, 21, 0,224, 0, 0, 0,224, 0, 1, 0, 4, 0, 57, - 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 6,236, 0, 4, 6,237, 0, 4, 6,238, 0,218, 6,239, 0, 0, 6,235, 0, 4, 6,240, - 0, 4, 6,241, 0,223, 2,244, 0,220, 6,242, 0,221, 6,243, 0,222, 6,244, 0,219, 6,245, 0,219, 6,246, 0,219, 6,247, - 0, 56, 6,248, 0, 56, 6,249, 0,225, 0, 12, 0, 0, 1,188, 0, 9, 0,194, 0, 0, 0,195, 0, 4, 0,198, 0, 4, 0,206, - 0, 9, 0,199, 0, 7, 0,201, 0, 7, 0,202, 0, 9, 6,250, 0, 9, 6,251, 0, 9, 0,203, 0, 9, 0,205, 0,226, 0, 45, - 0,226, 0, 0, 0,226, 0, 1, 0, 9, 6,252, 0, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 20, 0, 4, 0, 18, 0, 4, 0, 23, - 0, 4, 0, 91, 0, 4, 6,253, 0, 4, 6,254, 0, 4, 6,237, 0, 4, 6,238, 0, 4, 6,255, 0, 4, 0,217, 0, 4, 7, 0, - 0, 4, 7, 1, 0, 7, 7, 2, 0, 7, 7, 3, 0, 4, 0,130, 0, 4, 7, 4, 0,224, 7, 5, 0, 36, 0, 79, 0,177, 6,162, - 0, 48, 0,140, 0, 7, 7, 6, 0, 7, 7, 7, 0,225, 1, 2, 0,226, 7, 8, 0,226, 7, 9, 0,226, 7, 10, 0, 12, 7, 11, - 0,227, 7, 12, 0,228, 7, 13, 0, 7, 7, 14, 0, 7, 7, 15, 0, 4, 7, 16, 0, 7, 7, 17, 0, 9, 7, 18, 0, 4, 7, 19, - 0, 4, 7, 20, 0, 4, 7, 21, 0, 7, 7, 22, 0, 4, 6,167, 0, 4, 0, 37, 0,229, 0, 4, 0,229, 0, 0, 0,229, 0, 1, - 0, 12, 7, 23, 0,226, 7, 24, 0,230, 0, 6, 0, 12, 7, 25, 0, 12, 7, 11, 0, 12, 7, 26, 0, 2, 0, 20, 0, 2, 0, 37, - 0, 4, 0, 57, 0,231, 0, 4, 0, 7, 7, 27, 0, 7, 0,112, 0, 2, 7, 28, 0, 2, 7, 29, 0,232, 0, 6, 0, 7, 7, 30, - 0, 7, 7, 31, 0, 7, 7, 32, 0, 7, 7, 33, 0, 4, 7, 34, 0, 4, 7, 35, 0,233, 0, 12, 0, 7, 7, 36, 0, 7, 7, 37, - 0, 7, 7, 38, 0, 7, 7, 39, 0, 7, 7, 40, 0, 7, 7, 41, 0, 7, 7, 42, 0, 7, 7, 43, 0, 7, 7, 44, 0, 7, 7, 45, - 0, 4, 2,146, 0, 4, 7, 46, 0,234, 0, 2, 0, 7, 4,196, 0, 7, 0, 37, 0,235, 0, 5, 0, 7, 7, 47, 0, 7, 7, 48, - 0, 4, 0, 93, 0, 4, 2,108, 0, 4, 7, 49, 0,236, 0, 6, 0,236, 0, 0, 0,236, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, - 0, 2, 7, 50, 0, 2, 0, 57, 0,237, 0, 8, 0,237, 0, 0, 0,237, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7, 50, - 0, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,130, 0,238, 0, 45, 0,238, 0, 0, 0,238, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, - 0, 2, 7, 50, 0, 2, 0,213, 0, 2, 3,150, 0, 2, 7, 51, 0, 7, 7, 52, 0, 7, 0, 92, 0, 7, 2,159, 0, 4, 7, 53, - 0, 4, 0, 81, 0, 4, 2,110, 0, 7, 7, 54, 0, 7, 7, 55, 0, 7, 7, 56, 0, 7, 7, 57, 0, 7, 7, 58, 0, 7, 7, 59, - 0, 7, 2,156, 0, 7, 0,255, 0, 7, 7, 60, 0, 7, 7, 61, 0, 7, 0, 37, 0, 7, 7, 62, 0, 7, 7, 63, 0, 7, 7, 64, - 0, 2, 7, 65, 0, 2, 7, 66, 0, 2, 7, 67, 0, 2, 7, 68, 0, 2, 7, 69, 0, 2, 7, 70, 0, 2, 7, 71, 0, 2, 7, 72, - 0, 2, 5,118, 0, 2, 7, 73, 0, 2, 1,209, 0, 2, 7, 74, 0, 0, 7, 75, 0, 0, 7, 76, 0, 7, 0,211, 0,239, 7, 77, - 0, 63, 1,161, 0,240, 0, 16, 0,240, 0, 0, 0,240, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7, 50, 0, 2, 0,213, - 0, 7, 2,151, 0, 7, 2,152, 0, 7, 2,153, 0, 7, 1,251, 0, 7, 2,154, 0, 7, 2,155, 0, 7, 7, 78, 0, 7, 2,156, - 0, 7, 2,158, 0, 7, 2,159, 0,197, 0, 5, 0, 2, 0, 18, 0, 2, 6,226, 0, 2, 0, 20, 0, 2, 7, 79, 0, 27, 5,242, - 0,196, 0, 3, 0, 4, 0, 69, 0, 4, 7, 80, 0,197, 0, 2, 0,241, 0, 12, 0,241, 0, 0, 0,241, 0, 1, 0, 2, 0, 18, - 0, 2, 0, 20, 0, 2, 3, 31, 0, 2, 1,224, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 7, 81, 0, 7, 7, 82, 0, 27, 5,242, - 0, 12, 7, 83, 0,242, 0, 11, 0,242, 0, 0, 0,242, 0, 1, 0, 0, 0, 17, 0, 2, 0, 18, 0, 2, 7, 84, 0, 4, 0, 22, - 0, 4, 7, 85, 0, 2, 0, 20, 0, 2, 0, 37, 0, 9, 7, 86, 0, 9, 7, 87, 0,243, 0, 5, 0, 0, 0, 17, 0, 7, 1, 20, - 0, 7, 7, 88, 0, 4, 7, 89, 0, 4, 0, 37, 0,244, 0, 4, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0, 43, 0, 2, 0, 70, - 0,245, 0, 4, 0, 0, 0, 17, 0, 62, 7, 90, 0, 7, 1, 20, 0, 7, 0, 37, 0,246, 0, 6, 0, 2, 7, 91, 0, 2, 7, 92, - 0, 2, 0, 18, 0, 2, 7, 93, 0, 0, 7, 94, 0, 0, 7, 95, 0,247, 0, 5, 0, 4, 0, 18, 0, 4, 0, 37, 0, 0, 0, 17, - 0, 0, 7, 96, 0, 0, 7, 97, 0,248, 0, 3, 0, 4, 0, 18, 0, 4, 0, 37, 0, 0, 0, 17, 0,249, 0, 4, 0, 2, 7, 98, - 0, 2, 7, 99, 0, 2, 0, 20, 0, 2, 0, 37, 0,250, 0, 6, 0, 0, 0, 17, 0, 0, 7,100, 0, 2, 7,101, 0, 2, 2,156, - 0, 2, 1, 13, 0, 2, 0, 70, 0,251, 0, 5, 0, 0, 0, 17, 0, 7, 0,112, 0, 7, 3,234, 0, 2, 0, 20, 0, 2, 2,122, - 0,252, 0, 3, 0, 0, 0, 17, 0, 4, 2,110, 0, 4, 7, 98, 0,253, 0, 7, 0, 0, 0, 17, 0, 7, 3,234, 0, 0, 7,102, - 0, 0, 7,103, 0, 2, 1, 13, 0, 2, 0, 43, 0, 4, 7,104, 0,254, 0, 3, 0, 32, 7,105, 0, 0, 7,106, 0, 0, 7,107, - 0,255, 0, 18, 0,255, 0, 0, 0,255, 0, 1, 0, 2, 0, 18, 0, 2, 7, 84, 0, 2, 0, 20, 0, 2, 7,108, 0, 2, 7,109, - 0, 2, 7,110, 0, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 17, 0, 9, 0, 2, 1, 0, 7,111, 0, 32, 0, 45, 0, 2, 4,204, - 0, 2, 7, 14, 0, 2, 7,112, 0, 2, 0, 37, 1, 1, 0, 11, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 7,113, 0, 2, 0, 20, - 0, 2, 2,122, 0, 2, 7,114, 0, 4, 7,115, 0, 4, 7,116, 0, 4, 7,117, 0, 4, 7,118, 0, 4, 7,119, 1, 2, 0, 1, - 0, 0, 7,120, 1, 3, 0, 4, 0, 42, 5,215, 0, 0, 7,121, 0, 4, 1, 13, 0, 4, 0, 20, 1, 0, 0, 18, 1, 0, 0, 0, - 1, 0, 0, 1, 1, 0, 7,122, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7,123, 0, 2, 7,110, 0, 2, 7, 84, 0, 2, 7,124, - 0, 2, 0, 70, 0, 2, 1, 12, 0, 0, 0, 17, 0, 9, 0, 2, 1, 4, 7,111, 0,255, 7,125, 0, 2, 0, 15, 0, 2, 7,126, - 0, 4, 7,127, 1, 5, 0, 3, 0, 4, 2,182, 0, 4, 0, 37, 0, 32, 0, 45, 1, 6, 0, 12, 0,145, 7,128, 0, 2, 0, 18, - 0, 2, 0, 20, 0, 4, 7, 52, 0, 4, 0, 92, 0, 0, 0, 17, 0, 0, 7,129, 0, 2, 7,130, 0, 2, 7,131, 0, 2, 7,132, - 0, 2, 7,133, 0, 7, 7,134, 1, 7, 0, 10, 0, 2, 0, 20, 0, 2, 7,135, 0, 4, 7, 52, 0, 4, 0, 92, 0, 2, 7,136, - 0,227, 7, 12, 0, 2, 0, 18, 0, 2, 7,137, 0, 2, 7,138, 0, 2, 7,139, 1, 8, 0, 7, 0, 2, 0, 20, 0, 2, 7,135, - 0, 4, 7, 52, 0, 4, 0, 92, 0, 2, 0, 18, 0, 2, 7,140, 0, 7, 3,109, 1, 9, 0, 11, 0, 4, 2,182, 0, 2, 0, 18, - 0, 2, 0, 20, 0, 32, 0, 45, 0, 74, 7,141, 0, 0, 0, 17, 0, 7, 7,142, 0, 7, 7,143, 0, 7, 3, 21, 0, 2, 7,144, - 0, 2, 7,145, 1, 10, 0, 5, 0, 2, 0, 18, 0, 2, 0, 20, 0, 4, 0, 37, 0,177, 6,162, 0, 32, 5, 34, 1, 11, 0, 5, - 0, 4, 0, 20, 0, 4, 0, 18, 0, 0, 0, 17, 0, 0, 7, 96, 0, 32, 0, 45, 1, 12, 0, 13, 0, 2, 0, 20, 0, 2, 0, 18, - 0, 2, 7, 84, 0, 2, 3, 22, 0, 7, 7,146, 0, 7, 7,147, 0, 7, 1, 7, 0, 7, 1, 8, 0, 7, 2,253, 0, 7, 3, 0, - 0, 7, 7,148, 0, 7, 7,149, 0, 32, 7,150, 1, 13, 0, 10, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 7, 52, 0, 4, 0, 92, - 0, 0, 0, 17, 0, 0, 7,129, 0, 2, 0, 43, 0, 2, 0, 64, 0, 2, 7,151, 0, 2, 7,152, 1, 14, 0, 8, 0, 32, 0, 45, - 0, 7, 2,153, 0, 7, 7,153, 0, 7, 7,154, 0, 7, 2,148, 0, 2, 0, 20, 0, 2, 2,122, 0, 7, 7,155, 1, 15, 0, 12, - 0, 2, 0, 18, 0, 2, 1, 13, 0, 2, 0, 20, 0, 2, 2,156, 0, 2, 2,182, 0, 2, 7,156, 0, 4, 0, 37, 0, 7, 7,157, - 0, 7, 7,158, 0, 7, 7,159, 0, 7, 7,160, 0, 0, 7,161, 1, 16, 0, 10, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 7, 52, - 0, 4, 0, 92, 0, 0, 0, 17, 0, 2, 2, 68, 0, 2, 0, 64, 0, 2, 7,151, 0, 2, 7,152, 0, 63, 1,161, 1, 17, 0, 7, - 0, 4, 2,110, 0, 4, 7,162, 0, 4, 7,163, 0, 4, 7,164, 0, 7, 7,165, 0, 7, 7,166, 0, 0, 7,102, 1, 18, 0, 7, - 0, 0, 7,167, 0, 32, 7,168, 0, 0, 7,106, 0, 2, 7,169, 0, 2, 0, 43, 0, 4, 0, 70, 0, 0, 7,107, 1, 19, 0, 6, - 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 7, 52, 0, 4, 0, 92, 0, 0, 7,170, 0, 0, 7,171, 1, 20, 0, 1, 0, 4, 0, 20, - 1, 21, 0, 6, 0, 0, 0, 95, 0, 2, 0, 18, 0, 2, 0, 20, 0, 4, 7,172, 0, 7, 7,173, 0, 42, 5,215, 1, 22, 0, 4, - 0, 0, 0,182, 0, 2, 0, 20, 0, 4, 0, 18, 0, 32, 0, 45, 1, 23, 0, 2, 0, 4, 0, 18, 0, 4, 5,130, 1, 4, 0, 10, - 1, 4, 0, 0, 1, 4, 0, 1, 1, 4, 7,122, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7, 84, 0, 2, 7,174, 0, 0, 0, 17, - 0, 9, 0, 2, 0, 32, 0, 45, 1, 24, 0, 10, 0, 7, 3, 21, 0, 7, 7,175, 0, 7, 7,176, 0, 7, 7,177, 0, 7, 7,178, - 0, 4, 0, 20, 0, 7, 7,156, 0, 7, 7,179, 0, 7, 7,180, 0, 7, 0, 37, 0,227, 0, 20, 0, 27, 0, 31, 0, 0, 0,193, - 1, 25, 7,181, 0, 9, 7,182, 0, 43, 0,152, 0, 43, 7,183, 0, 9, 7,184, 0, 36, 0, 79, 0, 7, 3,109, 0, 7, 7,185, - 0, 7, 7,186, 0, 7, 7,187, 0, 7, 7,188, 0, 7, 7,189, 0, 7, 7,190, 0, 4, 0, 93, 0, 4, 7,191, 0, 0, 7,192, - 0, 0, 7,193, 0, 0, 7,194, 1, 26, 0, 6, 0, 27, 0, 31, 0, 7, 7,195, 0, 7, 7,196, 0, 7, 7,197, 0, 2, 7,198, - 0, 2, 7,199, 1, 27, 0, 14, 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0,187, 5,143, - 0,227, 7, 12, 0, 2, 1, 13, 0, 2, 7,135, 0, 2, 2, 8, 0, 2, 2, 9, 0, 2, 0, 20, 0, 2, 5,153, 0, 4, 0, 70, - 1, 28, 0, 6, 1, 28, 0, 0, 1, 28, 0, 1, 0, 32, 0, 45, 0, 9, 7,200, 0, 4, 0,218, 0, 4, 0, 37, 0, 63, 0, 4, - 0, 27, 0, 31, 0, 12, 7,201, 0, 4, 0,135, 0, 7, 7,202, 1, 29, 0, 25, 1, 29, 0, 0, 1, 29, 0, 1, 1, 29, 0, 38, - 0, 12, 7,203, 0, 0, 0, 17, 0, 7, 7,204, 0, 7, 7,205, 0, 7, 7,206, 0, 7, 7,207, 0, 4, 0, 20, 0, 7, 7,208, - 0, 7, 7,209, 0, 7, 7,210, 0, 7, 1, 20, 0, 7, 1,217, 0, 7, 7,211, 0, 7, 2,108, 0, 7, 7,212, 0, 7, 7,213, - 0, 7, 7,214, 0, 7, 7,215, 0, 7, 7,216, 0, 7, 0,175, 0, 2, 0,135, 0, 2, 4,220, 1, 30, 0, 19, 0, 27, 0, 31, - 0, 12, 7,217, 0, 12, 7,218, 0, 4, 0, 20, 0, 4, 4, 25, 0, 2, 2,160, 0, 2, 7,219, 0, 2, 0,135, 0, 2, 7,220, - 0, 2, 7,221, 0, 2, 7,222, 0, 2, 7,223, 0, 2, 7,224, 0, 4, 7,225, 0, 4, 7,226, 0, 4, 7,227, 0, 4, 7,228, - 0, 4, 7,229, 0, 4, 7,230, 1, 31, 0, 34, 1, 31, 0, 0, 1, 31, 0, 1, 0, 12, 3, 49, 0, 0, 0, 17, 0, 2, 0, 20, - 0, 2, 7,231, 0, 2, 7,232, 0, 2, 7,233, 0, 2, 3, 10, 0, 2, 7,234, 0, 4, 1,249, 0, 4, 7,227, 0, 4, 7,228, - 1, 29, 7,235, 1, 31, 0, 38, 1, 31, 7,236, 0, 12, 7,237, 0, 9, 7,238, 0, 9, 7,239, 0, 9, 7,240, 0, 7, 1, 7, - 0, 7, 0,175, 0, 7, 1,199, 0, 7, 7,241, 0, 7, 7,242, 0, 7, 3, 2, 0, 7, 7,243, 0, 7, 7,244, 0, 7, 7,245, - 0, 7, 7,246, 0, 7, 7,247, 0, 7, 7,248, 0, 7, 1,246, 0, 32, 7,249, 0,146, 0, 9, 0, 12, 7,250, 0, 2, 0, 20, - 0, 2, 7,251, 0, 7, 3, 20, 0, 7, 7,252, 0, 7, 7,253, 0, 12, 7,254, 0, 4, 7,255, 0, 4, 0, 37, 1, 32, 0, 7, - 1, 32, 0, 0, 1, 32, 0, 1, 0, 12, 7,192, 0, 4, 0, 20, 0, 4, 8, 0, 0, 0, 0, 17, 0,209, 8, 1, 1, 33, 0, 8, - 1, 33, 0, 0, 1, 33, 0, 1, 1, 32, 8, 2, 0, 36, 0, 79, 0, 12, 2,250, 0, 4, 0, 20, 0, 0, 0, 17, 0, 4, 8, 3, - 0,145, 0, 6, 0, 27, 0, 31, 0, 12, 7,250, 0, 12, 8, 4, 0, 12, 0,103, 0, 4, 8, 5, 0, 4, 0, 37, 1, 34, 0, 16, - 0,181, 0, 0, 0,181, 0, 1, 0, 4, 5, 70, 0, 7, 5, 71, 0,182, 5, 72, 0, 2, 5, 73, 0,187, 5,143, 0,145, 2,247, - 0, 0, 1, 13, 0, 0, 5,214, 0, 2, 0, 20, 0, 2, 8, 6, 0, 2, 5,150, 0, 2, 5,153, 0, 2, 8, 7, 0, 7, 8, 8, - 1, 35, 0, 5, 1, 35, 0, 0, 1, 35, 0, 1, 0, 36, 0, 79, 0, 2, 0, 20, 0, 0, 8, 9, 1, 36, 0, 12, 1, 36, 0, 0, - 1, 36, 0, 1, 0, 9, 0, 2, 0, 2, 0, 18, 0, 2, 0, 20, 0, 0, 8, 10, 0, 0, 8, 11, 0, 0, 8, 9, 0, 7, 8, 12, - 0, 7, 8, 13, 0, 4, 0, 37, 0, 36, 0, 79, 1, 37, 0, 9, 1, 37, 0, 0, 1, 37, 0, 1, 0, 32, 8, 14, 0, 0, 8, 15, - 0, 7, 8, 16, 0, 2, 8, 17, 0, 2, 0, 20, 0, 2, 0, 18, 0, 2, 0, 37, 1, 38, 0, 7, 0, 42, 5,215, 0, 26, 8, 18, - 0, 4, 0, 20, 0, 4, 8, 19, 0, 12, 8, 20, 0, 32, 8, 14, 0, 0, 8, 15, 1, 39, 0, 12, 0, 32, 8, 14, 0, 2, 8, 21, - 0, 2, 0, 20, 0, 2, 8, 22, 0, 2, 8, 23, 0, 0, 8, 15, 0, 32, 8, 24, 0, 0, 8, 25, 0, 7, 8, 26, 0, 7, 1,217, - 0, 7, 8, 27, 0, 7, 8, 28, 1, 40, 0, 6, 0, 32, 8, 14, 0, 4, 8, 3, 0, 4, 8, 29, 0, 4, 0, 93, 0, 4, 0, 37, - 0, 0, 8, 15, 1, 41, 0, 4, 0, 32, 8, 14, 0, 4, 0, 20, 0, 4, 8, 3, 0, 0, 8, 15, 1, 42, 0, 4, 0, 32, 8, 14, - 0, 4, 0, 20, 0, 4, 8, 3, 0, 0, 8, 15, 1, 43, 0, 10, 0, 32, 8, 14, 0, 4, 8, 30, 0, 7, 0,129, 0, 4, 0, 20, - 0, 2, 5,209, 0, 2, 8, 31, 0, 2, 0, 43, 0, 2, 0, 70, 0, 7, 8, 32, 0, 0, 8, 15, 1, 44, 0, 4, 0, 32, 8, 14, - 0, 4, 0, 20, 0, 4, 8, 3, 0, 0, 8, 15, 1, 45, 0, 10, 0, 32, 8, 14, 0, 2, 0, 18, 0, 2, 3,156, 0, 4, 0, 91, - 0, 4, 0, 92, 0, 7, 7,153, 0, 7, 7,154, 0, 4, 0, 37, 0,145, 7,128, 0, 0, 8, 15, 1, 46, 0, 4, 0, 32, 8, 14, - 0, 4, 3, 7, 0, 4, 8, 33, 0, 0, 8, 15, 1, 47, 0, 5, 0, 32, 8, 14, 0, 7, 0,129, 0, 4, 8, 34, 0, 4, 3, 7, - 0, 4, 3, 8, 1, 48, 0, 6, 0, 32, 8, 14, 0, 4, 8, 35, 0, 4, 8, 36, 0, 7, 8, 37, 0, 7, 8, 38, 0, 0, 8, 15, - 1, 49, 0, 16, 0, 32, 8, 14, 0, 32, 7,236, 0, 4, 0, 18, 0, 7, 8, 39, 0, 7, 8, 40, 0, 7, 8, 41, 0, 7, 8, 42, - 0, 7, 8, 43, 0, 7, 8, 44, 0, 7, 8, 45, 0, 7, 8, 46, 0, 7, 8, 47, 0, 2, 0, 20, 0, 2, 0, 37, 0, 2, 0, 43, - 0, 2, 0, 70, 1, 50, 0, 3, 0, 32, 8, 14, 0, 4, 0, 20, 0, 4, 5,118, 1, 51, 0, 5, 0, 32, 8, 14, 0, 4, 0, 20, - 0, 4, 0, 37, 0, 7, 8, 48, 0, 0, 8, 15, 1, 52, 0, 10, 0, 32, 8, 14, 0, 0, 8, 15, 0, 2, 8, 49, 0, 2, 8, 50, - 0, 0, 8, 51, 0, 0, 8, 52, 0, 7, 8, 53, 0, 7, 8, 54, 0, 7, 8, 55, 0, 7, 8, 56, 1, 53, 0, 8, 0, 7, 0, 9, - 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 8, 57, 0, 7, 8, 58, 0, 2, 0, 20, 0, 2, 5,118, 1, 54, 0, 8, - 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 8, 57, 0, 7, 8, 58, 0, 2, 0, 20, 0, 2, 5,118, - 1, 55, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 8, 57, 0, 7, 8, 58, 0, 2, 0, 20, - 0, 2, 5,118, 1, 56, 0, 7, 0, 32, 8, 14, 0, 0, 8, 15, 0, 7, 1, 20, 0, 7, 1, 30, 0, 2, 0, 20, 0, 2, 1, 13, - 0, 4, 0, 37, 1, 57, 0, 5, 0, 32, 2,211, 0, 7, 1, 20, 0, 2, 2,215, 0, 0, 2,217, 0, 0, 8, 59, 1, 58, 0, 10, - 1, 58, 0, 0, 1, 58, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 0, 8, 60, 0, 7, 0,220, 0, 7, 0,221, 0, 2, 7,192, - 0, 2, 8, 61, 0, 32, 0, 45, 1, 59, 0, 22, 1, 59, 0, 0, 1, 59, 0, 1, 0, 2, 0, 20, 0, 2, 1, 13, 0, 2, 8, 62, - 0, 2, 8, 63, 0, 36, 0, 79, 0,145, 7,128, 0, 32, 0,167, 0, 7, 0, 91, 0, 7, 0, 92, 0, 7, 8, 64, 0, 7, 8, 65, - 0, 7, 8, 66, 0, 7, 8, 67, 0, 7, 2,149, 0, 7, 1,189, 0, 7, 7,130, 0, 7, 8, 68, 0, 0, 8, 69, 0, 0, 8, 70, - 0, 12, 2,252, 1, 60, 0, 8, 0, 7, 1,225, 0, 7, 7,153, 0, 7, 7,154, 0, 9, 0, 2, 0, 2, 8, 71, 0, 2, 8, 72, - 0, 2, 8, 73, 0, 2, 8, 74, 1, 61, 0, 18, 1, 61, 0, 0, 1, 61, 0, 1, 1, 61, 8, 75, 0, 0, 0, 17, 1, 60, 8, 76, - 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 8, 77, 0, 2, 8, 78, 0, 2, 8, 79, 0, 2, 8, 80, 0, 4, 0, 43, 0, 7, 8, 81, - 0, 7, 8, 82, 0, 4, 8, 83, 0, 4, 8, 84, 1, 61, 8, 85, 1, 62, 8, 86, 1, 63, 0, 32, 1, 63, 0, 0, 1, 63, 0, 1, - 1, 63, 8, 87, 0, 0, 0, 17, 0, 0, 8, 88, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,236, 0, 2, 7, 14, 0, 2, 8, 89, - 0, 2, 0,137, 0, 2, 8, 78, 0, 2, 6,226, 0, 12, 7,123, 0, 12, 8, 90, 0, 27, 5,242, 0, 9, 8, 91, 0, 7, 8, 81, - 0, 7, 8, 82, 0, 7, 1,251, 0, 7, 8, 92, 0, 2, 8, 93, 0, 2, 8, 94, 0, 7, 8, 95, 0, 7, 8, 96, 0, 2, 8, 97, - 0, 2, 8, 98, 0, 24, 8, 99, 0, 24, 8,100, 0, 24, 8,101, 1, 64, 0,153, 1, 65, 8,102, 1, 62, 0, 6, 1, 62, 0, 0, - 1, 62, 0, 1, 1, 63, 8,103, 1, 63, 8,104, 1, 61, 8,105, 1, 61, 8, 85, 0, 57, 0, 16, 0, 27, 0, 31, 0, 12, 8,106, - 0, 12, 8,107, 1, 60, 8,108, 0, 12, 8,109, 0, 4, 0, 18, 0, 4, 8,110, 0, 4, 8,111, 0, 4, 8,112, 0, 12, 8,113, - 1, 65, 8,114, 1, 61, 8,115, 1, 61, 8,116, 0, 9, 8,117, 0, 9, 8,118, 0, 4, 8,119, 1, 66, 0, 6, 0, 4, 0,128, - 0, 4, 0,130, 0, 4, 6,226, 0, 0, 8,120, 0, 0, 8,121, 0, 2, 0, 37, 1, 67, 0, 16, 0, 2, 6,165, 0, 2, 6,166, - 0, 2, 8,122, 0, 2, 7,176, 0, 2, 8,123, 0, 2, 0, 68, 0, 7, 2,148, 0, 7, 8,124, 0, 7, 8,125, 0, 2, 1, 34, - 0, 0, 8,126, 0, 0, 4, 37, 0, 2, 8,127, 0, 2, 0, 37, 0, 4, 8,128, 0, 4, 8,129, 1, 68, 0, 9, 0, 7, 8,130, - 0, 7, 8,131, 0, 7, 7,190, 0, 7, 0,112, 0, 7, 8,132, 0, 7, 5, 66, 0, 2, 8,133, 0, 0, 8,134, 0, 0, 0, 37, - 1, 69, 0, 4, 0, 7, 8,135, 0, 7, 8,136, 0, 2, 8,133, 0, 2, 0, 37, 1, 70, 0, 3, 0, 7, 8,137, 0, 7, 8,138, - 0, 7, 0, 15, 1, 71, 0, 7, 0, 0, 1,188, 0, 2, 4,104, 0, 2, 4,105, 0, 2, 4,106, 0, 2, 4, 57, 0, 4, 0,130, - 0, 4, 3,154, 1, 72, 0, 7, 0, 7, 8,139, 0, 7, 8,140, 0, 7, 8,141, 0, 7, 2, 4, 0, 7, 8,142, 0, 7, 8,143, - 0, 7, 8,144, 1, 73, 0, 4, 0, 2, 8,145, 0, 2, 8,146, 0, 2, 8,147, 0, 2, 8,148, 1, 74, 0, 2, 0, 7, 0, 5, - 0, 7, 0, 6, 1, 75, 0, 2, 0, 0, 0,169, 0, 0, 8,149, 1, 76, 0, 1, 0, 0, 0, 17, 1, 77, 0, 10, 0, 0, 8,150, - 0, 0, 8,151, 0, 0, 8,152, 0, 0, 8,153, 0, 2, 8,122, 0, 2, 8,154, 0, 7, 8,155, 0, 7, 8,156, 0, 7, 8,157, - 0, 7, 1,189, 1, 78, 0, 2, 0, 9, 8,158, 0, 9, 8,159, 1, 79, 0, 11, 0, 0, 4,106, 0, 0, 0, 18, 0, 0, 8,133, - 0, 0, 0,112, 0, 0, 8,160, 0, 0, 0,109, 0, 0, 0,182, 0, 7, 8,161, 0, 7, 8,162, 0, 7, 8,163, 0, 7, 8,164, - 1, 80, 0, 8, 0, 7, 7, 91, 0, 7, 0,129, 0, 7, 4, 37, 0, 7, 2, 72, 0, 7, 8,165, 0, 7, 0,207, 0, 7, 8,166, - 0, 4, 0, 18, 1, 81, 0, 4, 0, 2, 8,167, 0, 2, 8,168, 0, 2, 8,169, 0, 2, 0, 37, 1, 82, 0, 1, 0, 0, 0, 17, - 1, 83, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 20, 0, 2, 8,170, 1, 84, 0, 10, 0, 2, 3,136, 0, 2, 0, 20, - 0, 7, 3,234, 0, 7, 8,171, 0, 7, 8,172, 0, 7, 8,173, 0, 7, 8,174, 1, 83, 8,175, 1, 83, 8,176, 1, 83, 8,177, - 0, 60, 0, 9, 0, 4, 0, 20, 0, 4, 0, 64, 0, 24, 8,178, 0, 24, 8,179, 1, 84, 8,180, 0, 7, 8,181, 0, 7, 8,182, - 0, 7, 8,183, 0, 7, 8,184, 1, 85, 0, 4, 0, 46, 2,142, 0, 7, 8,185, 0, 7, 1, 92, 0, 7, 0, 37, 0,169, 0, 13, - 0, 27, 0, 31, 0, 2, 0, 20, 0, 2, 5, 67, 0, 4, 0,109, 0, 7, 8,186, 0, 7, 2, 1, 0, 7, 8,187, 0, 7, 8,188, - 0, 7, 1, 92, 0, 2, 1, 47, 0, 2, 0, 37, 0, 50, 1, 77, 1, 85, 8,189, 1, 86, 0, 10, 0, 4, 0, 18, 0, 4, 0,129, - 0, 4, 0, 20, 0, 4, 3, 70, 0, 4, 8,190, 0, 4, 8,191, 0, 4, 8,192, 0, 0, 0, 95, 0, 0, 0, 17, 0, 9, 0, 2, - 0, 84, 0, 6, 1, 86, 8,193, 0, 4, 8,194, 0, 4, 8,195, 0, 4, 8,196, 0, 4, 0, 37, 0, 9, 8,197, 1, 87, 0, 5, - 0, 7, 2, 66, 0, 7, 2,182, 0, 7, 1,217, 0, 2, 8,198, 0, 2, 0, 37, 1, 88, 0, 5, 0, 7, 2, 66, 0, 7, 8,199, - 0, 7, 8,200, 0, 7, 8,201, 0, 7, 2,182, 1, 89, 0, 7, 0, 4, 8,202, 0, 4, 8,203, 0, 4, 8,204, 0, 7, 8,205, - 0, 7, 8,206, 0, 7, 8,207, 0, 7, 8,208, 1, 90, 0, 26, 0, 32, 8,209, 1, 88, 3, 66, 1, 88, 8,210, 1, 87, 8,211, - 1, 88, 7, 77, 0, 7, 8,212, 0, 7, 8,213, 0, 7, 8,214, 0, 7, 8,215, 0, 7, 8,206, 0, 7, 8,207, 0, 7, 2,182, - 0, 7, 2,159, 0, 7, 8,216, 0, 7, 8,217, 0, 7, 0,109, 0, 7, 8,218, 0, 4, 8,202, 0, 4, 8,219, 0, 4, 0, 37, - 0, 4, 0, 81, 0, 4, 8,220, 0, 2, 0, 20, 0, 2, 8,221, 0, 2, 8,222, 0, 2, 3,100, 1, 91, 0,112, 0, 27, 0, 31, - 0, 4, 0, 20, 0, 2, 0, 18, 0, 2, 8, 49, 0, 2, 8,223, 0, 2, 8,224, 0, 2, 8,225, 0, 2, 8,226, 0, 2, 8,227, - 0, 2, 8,228, 0, 2, 8,229, 0, 2, 8,230, 0, 2, 8,231, 0, 2, 8,232, 0, 2, 8,233, 0, 2, 8,234, 0, 2, 8,235, - 0, 2, 8,236, 0, 2, 8,237, 0, 2, 1,209, 0, 2, 7, 70, 0, 2, 7, 46, 0, 2, 8,238, 0, 2, 8,239, 0, 2, 3, 98, - 0, 2, 3, 99, 0, 2, 8,240, 0, 2, 8,241, 0, 2, 8,242, 0, 2, 8,243, 0, 2, 8,244, 0, 2, 8,245, 0, 7, 8,246, - 0, 7, 8,247, 0, 7, 8,248, 0, 2, 8,249, 0, 2, 8,250, 0, 7, 8,251, 0, 7, 8,252, 0, 7, 8,253, 0, 7, 7, 52, - 0, 7, 0, 92, 0, 7, 2,159, 0, 7, 7, 58, 0, 7, 8,254, 0, 7, 8,255, 0, 7, 9, 0, 0, 7, 9, 1, 0, 7, 0, 57, - 0, 4, 7, 53, 0, 4, 7, 51, 0, 4, 9, 2, 0, 7, 7, 54, 0, 7, 7, 55, 0, 7, 7, 56, 0, 7, 9, 3, 0, 7, 9, 4, - 0, 7, 9, 5, 0, 7, 9, 6, 0, 7, 9, 7, 0, 7, 9, 8, 0, 7, 9, 9, 0, 7, 9, 10, 0, 7, 3, 21, 0, 7, 0,109, - 0, 7, 9, 11, 0, 7, 9, 12, 0, 7, 9, 13, 0, 7, 9, 14, 0, 7, 9, 15, 0, 7, 9, 16, 0, 7, 2,108, 0, 7, 9, 17, - 0, 7, 9, 18, 0, 4, 9, 19, 0, 4, 9, 20, 0, 7, 9, 21, 0, 7, 9, 22, 0, 7, 9, 23, 0, 7, 9, 24, 0, 7, 9, 25, - 0, 7, 9, 26, 0, 7, 9, 27, 0, 7, 9, 28, 0, 7, 3, 94, 0, 7, 3, 92, 0, 7, 3, 93, 0, 7, 9, 29, 0, 7, 9, 30, - 0, 7, 9, 31, 0, 7, 9, 32, 0, 7, 9, 33, 0, 7, 9, 34, 0, 7, 9, 35, 0, 7, 9, 36, 0, 7, 9, 37, 0, 7, 3, 28, - 0, 7, 9, 38, 0, 7, 9, 39, 0, 7, 9, 40, 0, 7, 9, 41, 0, 7, 9, 42, 0, 7, 9, 43, 0, 7, 9, 44, 0, 0, 9, 45, - 0, 63, 3, 55, 0, 63, 9, 46, 0, 32, 9, 47, 0, 32, 9, 48, 0, 36, 0, 79, 0,148, 3, 53, 0,148, 9, 49, 0,136, 0, 37, - 0,136, 0, 0, 0,136, 0, 1, 1, 91, 9, 50, 1, 90, 3,135, 1, 89, 7,236, 1, 92, 9, 51, 1, 93, 9, 52, 1, 93, 9, 53, - 0, 12, 9, 54, 0, 12, 9, 55, 0,149, 3, 54, 0, 32, 9, 56, 0, 32, 9, 57, 0, 32, 9, 58, 0, 12, 9, 59, 0, 12, 9, 60, - 0, 7, 0,211, 0, 7, 4, 78, 0, 4, 2,110, 0, 4, 0, 20, 0, 4, 7, 53, 0, 4, 9, 61, 0, 4, 9, 62, 0, 4, 9, 63, - 0, 4, 0, 57, 0, 2, 0,218, 0, 2, 9, 64, 0, 2, 9, 65, 0, 2, 9, 66, 0, 2, 3, 47, 0, 2, 9, 67, 0, 0, 9, 68, - 0, 2, 9, 69, 0, 2, 9, 70, 0, 2, 9, 71, 0, 9, 9, 72, 0,125, 3,175, 0,123, 0, 34, 1, 94, 9, 73, 0, 7, 3,147, - 0, 7, 9, 74, 0, 7, 9, 75, 0, 7, 3,237, 0, 7, 9, 76, 0, 7, 3, 31, 0, 7, 3, 21, 0, 7, 9, 77, 0, 7, 2, 3, - 0, 7, 9, 78, 0, 7, 9, 79, 0, 7, 9, 80, 0, 7, 9, 81, 0, 7, 9, 82, 0, 7, 9, 83, 0, 7, 3,148, 0, 7, 9, 84, - 0, 7, 9, 85, 0, 7, 9, 86, 0, 7, 3,149, 0, 7, 3,145, 0, 7, 3,146, 0, 4, 9, 87, 0, 4, 0, 93, 0, 4, 9, 88, - 0, 4, 9, 89, 0, 2, 9, 90, 0, 2, 9, 91, 0, 2, 9, 92, 0, 2, 9, 93, 0, 2, 9, 94, 0, 2, 0, 37, 0, 4, 0, 70, - 0,124, 0, 8, 1, 94, 9, 95, 0, 7, 9, 96, 0, 7, 9, 97, 0, 7, 1,162, 0, 7, 9, 98, 0, 4, 0, 93, 0, 2, 9, 99, - 0, 2, 9,100, 1, 95, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 9,101, 1, 96, 0, 6, 1, 96, 0, 0, - 1, 96, 0, 1, 1, 95, 9,102, 0, 4, 9,103, 0, 2, 9,104, 0, 2, 0, 20, 1, 97, 0, 5, 1, 97, 0, 0, 1, 97, 0, 1, - 0, 12, 9,105, 0, 4, 9,106, 0, 4, 0, 20, 1, 98, 0, 9, 1, 98, 0, 0, 1, 98, 0, 1, 0, 12, 0,128, 1, 97, 9,107, - 0, 4, 0, 20, 0, 2, 9,104, 0, 2, 9,108, 0, 7, 0, 94, 0, 0, 9,109, 0,186, 0, 5, 0, 12, 4,120, 0, 4, 0, 20, - 0, 2, 9,110, 0, 2, 9,111, 0, 9, 9,112, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; + 75,101,121, 66,108,111, 99,107, 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 83, 99,114,105,112,116, 76,105,110,107, + 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, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112, +112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111, +114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67, +111,108, 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, 77, 68,105, +115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, + 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, + 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, + 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, + 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, + 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, + 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, + 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, + 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, + 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, + 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, + 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, + 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, + 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102, 32,117,108,116,105,114,101,115, 76,101,118,101,108, 59, 13, 10, 13, 10,116,121, +112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 77,117,108,116,105,114,101,115, 32,123, 13, 10, 9, 76,105,115,116, 66, 97, +115,101, 32,108,101,118,101,108,115, 59, 13, 10, 9, 77, 86,101,114,116, 32, 42,118,101,114,116,115, 59, 13, 10, 13, 10, 9,117, +110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,108,101,118,101,108, 95, 99,111,117,110,116, 44, 32, 99,117,114,114,101,110, +116, 44, 32,110,101,119,108,118,108, 44, 32,101,100,103,101,108,118,108, 44, 32,112,105,110,108,118,108, 44, 32,114,101,110,100, +101,114,108,118,108, 59, 13, 10, 9,117,110,115,105,103,110,101,100, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32, +102,108, 97,103, 59, 13, 10, 13, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, + 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111, +116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, + 97, 59, 13, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 13, 10, 9,115,104,111,114,116, 32, 42, +101,100,103,101, 95,102,108, 97,103,115, 59, 13, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, + 59, 13, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 13, 10, 13, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114, +101,115, 32, 42, 42, 47, 13, 10, 13, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, + 86,105,115,105, 98,105,108,105,116,121, 32,123, 13, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114, +116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78, +101,119, 32, 73,110,100,101,120, 32, 42, 47, 13, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32, +101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, + 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 13, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, + 59, 13, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 13, 10, 9,117,110,115,105,103,110,101,100, + 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32, +112, 97,100, 59, 13, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 13, 10, 13, 10, 47, 42, + 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 13, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, + 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, + 54, 41, 13, 10, 13, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, + 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 13, + 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 13, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32, +114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 13, 10, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 13, 10, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 13, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 13, 10, 13, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114, +116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 47, 42, 32,114,101,110,100,101,114, 32, + 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, + 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 13, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, + 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, + 90, 9, 9, 54, 52, 13, 10, 13, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, + 50, 86, 51, 9, 9, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 13, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, + 86, 49, 9, 9, 9, 56, 13, 10, 13, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 13, 10, 35,100, +101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 13, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, + 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 13, 10, 47, 42, + 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, + 69,108, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 13, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, + 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108, +100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97, +116,101,100, 33, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, + 9, 9, 49, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 13, 10, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97, +115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100, +101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 84, 69, 88, 9, 9, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, + 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 13, 10, 13, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, + 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 13, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, + 66, 76, 69, 9, 49, 48, 50, 52, 13, 10, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, + 52, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, + 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 13, 10, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97, +110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103, +115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110, +116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 79, 76, 73, 68, 9, 48, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 13, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, + 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, + 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 13, 10, 13, 10, 47, 42, 32,115,117, 98, 32,105,115, + 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114, +102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, + 9, 51, 13, 10, 13, 10, 13, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 13, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 13, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, + 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, + 68, 52, 9, 56, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 13, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 13, 10, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 13, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, + 9, 32, 32, 32, 32, 9, 49, 50, 56, 13, 10, 13, 10, 35,101,110,100,105,102, 13, 10, 35, 79, 67, 75, 33,110,101, 32, 67,249, 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,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, 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, 76, 97,116,116,105, 99,101, + 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 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, 82, 78, 71, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 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, 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, 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, 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, 70,114, 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114, +107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, + 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103, +115, 0, 98, 83,116, 97,116,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, 66, 71,112,105, 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 98, 71, 80,100, 97,116, 97, + 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 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, + 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, + 73,109, 97, 83,101,108, 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, +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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 72,101, 97,100,101,114, 0, 72,101, 97,100,101,114, 84,121,112,101, 0, 77,101,110,117, 0, 77,101,110,117, 84,121, +112,101, 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, 84, 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,104, +100, 97,117,100,105,111, 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, 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, 98, 83,111,117,110,100, + 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112, +108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 80,111,115,101, 67,104, 97, +110,110,101,108, 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, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 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, 0, 98, 78,111, +100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105, +109, 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, 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, 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, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105, +108,100, 80, 97,114,116,105, 99,108,101, 0, 75,101,121,101,100, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, + 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114, +116,105, 99,108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 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, 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, 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,109, 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, 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, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, + 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 0, + 40, 2, 0, 0, 32, 0,140, 0, 92, 3, 92, 0, 36, 0, 56, 0, 84, 0,112, 0,124, 0, 48, 0, 16, 0, 24, 0, 40, 0,120, 0, + 12, 0,136, 0, 36, 0,220, 4,128, 1, 0, 0, 0, 0, 0, 0,136, 0, 24, 1, 84, 1, 24, 0, 8, 3,168, 0, 0, 0,140, 0, +132, 0,132, 1, 8, 1, 56, 0,112, 2, 76, 0, 60, 1, 0, 0,108, 0,104, 0,140, 0, 56, 0, 8, 0, 16, 0, 76, 1, 0, 0, + 0, 0, 0, 0, 24, 1, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 0, 0, 24, 0, 76, 0, 32, 0, + 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 12, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 40, 0, 56, 0, + 72, 0, 92, 0,100, 0, 72, 0,100, 0,120, 0, 68, 0, 64, 0,112, 0, 64, 0,152, 0,156, 0, 64, 0, 96, 0,108, 0,188, 0, +104, 0,184, 0, 56, 0, 76, 0, 0, 0,132, 0, 28, 0,232, 0,104, 0, 0, 0, 64, 0, 0, 0, 0, 0, 68, 0, 8, 0, 8, 0, +220, 0, 80, 0, 76, 1, 76, 0, 68, 0, 68, 0, 64, 0,164, 1,112, 0,108, 0,188, 0, 40, 0, 92, 0, 56, 0,120, 0,128, 0, +152, 0,208, 0, 0, 0, 24, 0, 16, 0, 0, 0, 0, 0, 0, 0,112, 1, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 0,224, 3, + 56, 0, 16, 0, 80, 0, 16, 0,196, 0, 8, 0, 84, 0, 80, 0, 32, 0, 0, 0, 32, 0, 36, 1, 32, 0, 24, 2, 0, 0, 0, 0, + 56, 0,216, 2, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 40, 0,136, 0, 48, 0,140, 0,196, 0, 20, 0,232, 0, +204, 0,124, 1, 52, 0, 0, 0, 92, 0, 0, 0,248, 0, 12, 0, 12, 0,136, 0,188, 0,124, 2, 80, 2, 40, 0,168, 0,232, 0, + 52, 0,136, 2, 28, 0, 80, 0, 16, 1, 32, 0,224, 0, 32, 0, 32, 0, 48, 2, 16, 1, 16, 0,152, 20, 56, 0, 40, 11, 20, 0, + 24, 0, 56, 1, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0,112, 0, 0, 0,236, 0, 0, 0, 32, 0, 80, 0, 28, 0, 16, 0, + 8, 0, 52, 0,252, 0,240, 0,168, 1,196, 0, 28, 1, 0, 0, 16, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 0, + 56, 1, 0, 0, 56, 0, 64, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, + 76, 0, 80, 0, 60, 0,128, 0, 76, 0, 60, 0, 12, 0, 92, 0, 28, 0, 20, 0, 80, 0, 16, 0, 76, 0,108, 0, 84, 0, 28, 0, + 96, 0, 60, 0, 56, 0,108, 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 40, 0, 0, 0, 68, 0,184, 0, 24, 0, 4, 1,120, 0, +172, 1,104, 0,216, 0, 64, 0, 44, 0, 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, + 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 32, 0, +208, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, + 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 44, 0, 20, 0, 68, 0, 24, 0, 56, 0, 72, 0, 28, 0,252, 0,244, 1, 0, 0, 0, 0, + 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 24, 0, 24, 0,140, 0,148, 0, 56, 0, 0, 0, 0, 0, 92, 0, 0, 0, 88, 0, 0, 0, + 88, 0, 20, 0, 24, 0, 16, 0, 20, 0, 8, 0, 8, 0, 24, 0, 20, 0, 88, 0, 24, 1, 16, 0, 68, 0, 0, 1, 20, 0,152, 0, + 88, 0, 96, 0, 88, 0, 20, 0, 56, 0, 0, 0, 83, 84, 82, 67,104, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, + 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, + 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, + 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, + 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, + 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, + 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, + 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, + 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, + 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, + 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, + 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, + 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, + 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, + 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, + 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, + 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, + 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, + 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, + 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 5, 0, 27, 0, 84, 0, + 2, 0, 85, 0, 2, 0, 86, 0, 2, 0, 87, 0, 4, 0, 37, 0, 41, 0, 6, 0, 41, 0, 0, 0, 41, 0, 1, 0, 0, 0, 88, 0, + 0, 0, 89, 0, 4, 0, 23, 0, 4, 0, 90, 0, 42, 0, 10, 0, 42, 0, 0, 0, 42, 0, 1, 0, 4, 0, 91, 0, 4, 0, 92, 0, + 4, 0, 93, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 43, 0, 15, 0, 27, 0, 31, 0, + 0, 0, 97, 0, 4, 0, 94, 0, 4, 0, 98, 0, 12, 0, 99, 0, 41, 0,100, 0, 41, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, + 12, 0,104, 0, 0, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0,108, 0, 8, 0,109, 0, 44, 0, 3, 0, 4, 0,110, 0, + 4, 0,111, 0, 9, 0, 2, 0, 45, 0, 21, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 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, + 7, 0,121, 0, 7, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0, 7, 0,125, 0, 36, 0, 80, 0, 40, 0,126, 0, 32, 0,127, 0, + 46, 0, 13, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0, 19, 0, + 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 2, 0,138, 0, 47, 0,139, 0, 48, 0, 32, 0, 27, 0, 31, 0, + 0, 0, 34, 0, 12, 0,140, 0, 49, 0,141, 0, 50, 0,142, 0, 51, 0,143, 0, 2, 0,134, 0, 2, 0, 19, 0, 2, 0,144, 0, + 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, + 2, 0,150, 0, 2, 0,151, 0, 4, 0,152, 0, 4, 0,153, 0, 44, 0,154, 0, 30, 0,155, 0, 0, 0,156, 0, 7, 0,157, 0, + 4, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 7, 0,163, 0, 7, 0,164, 0, 52, 0, 31, 0, + 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0, 2, 0,168, 0, 32, 0,169, 0, 53, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, + 0, 0,173, 0, 0, 0,174, 0, 0, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, + 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0, 2, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, + 7, 0,189, 0, 7, 0, 57, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 54, 0, 15, 0, + 0, 0,195, 0, 9, 0,196, 0, 0, 0,197, 0, 0, 0,198, 0, 4, 0,199, 0, 4, 0,200, 0, 9, 0,201, 0, 7, 0,202, 0, + 7, 0,203, 0, 7, 0,204, 0, 4, 0,205, 0, 9, 0,206, 0, 9, 0,207, 0, 4, 0,208, 0, 4, 0, 37, 0, 55, 0, 6, 0, + 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,209, 0, 7, 0, 67, 0, 4, 0, 64, 0, 56, 0, 5, 0, 2, 0, 19, 0, + 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,210, 0, 55, 0,204, 0, 57, 0, 17, 0, 32, 0,169, 0, 48, 0,211, 0, 58, 0,212, 0, + 7, 0,213, 0, 7, 0,214, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,216, 0, 4, 0,217, 0, + 2, 0,218, 0, 2, 0,219, 0, 4, 0,134, 0, 4, 0,145, 0, 2, 0,220, 0, 2, 0,221, 0, 53, 0, 57, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, + 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0, 7, 0,236, 0, + 7, 0,237, 0, 7, 0,238, 0, 7, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 2, 0,244, 0, + 2, 0,245, 0, 2, 0,246, 0, 2, 0,247, 0, 2, 0,248, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,215, 0, 7, 0,249, 0, + 7, 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,132, 0, 4, 0, 23, 0, + 4, 0,129, 0, 4, 0,130, 0, 4, 0,131, 0, 7, 0, 0, 1, 7, 0, 1, 1, 7, 0,191, 0, 46, 0, 2, 1, 59, 0, 3, 1, + 36, 0, 80, 0, 48, 0,211, 0, 54, 0, 4, 1, 56, 0, 5, 1, 57, 0, 6, 1, 30, 0,155, 0, 0, 0, 7, 1, 0, 0, 8, 1, + 60, 0, 8, 0, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0,177, 0, 4, 0, 19, 0, 7, 0, 11, 1, 7, 0, 12, 1, 7, 0, 13, 1, + 32, 0, 45, 0, 61, 0, 81, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 14, 1, 2, 0,179, 0, + 2, 0, 15, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 16, 1, 7, 0, 17, 1, 7, 0, 18, 1, + 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, + 62, 0, 27, 1, 2, 0, 28, 1, 2, 0, 70, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, + 2, 0, 32, 1, 2, 0, 33, 1, 2, 0, 34, 1, 2, 0, 35, 1, 0, 0, 36, 1, 0, 0, 37, 1, 2, 0, 38, 1, 2, 0, 39, 1, + 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 2, 0, 47, 1, + 2, 0, 43, 0, 2, 0, 48, 1, 2, 0, 49, 1, 2, 0, 50, 1, 2, 0, 51, 1, 7, 0, 52, 1, 7, 0, 53, 1, 7, 0, 54, 1, + 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, + 7, 0, 63, 1, 2, 0, 64, 1, 2, 0, 65, 1, 4, 0, 66, 1, 4, 0, 67, 1, 2, 0, 68, 1, 2, 0, 69, 1, 2, 0, 70, 1, + 2, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 2, 0, 76, 1, 2, 0, 77, 1, 52, 0, 78, 1, + 36, 0, 80, 0, 30, 0,155, 0, 40, 0,126, 0, 63, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 64, 0,130, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 2, 0, 79, 1, 2, 0, 19, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 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, 7, 0, 87, 1, 7, 0, 88, 1, 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, 7, 0,100, 1, 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, 0, 0,110, 1, 0, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, + 2, 0,114, 1, 2, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 2, 0,120, 1, 2, 0,121, 1, + 4, 0, 14, 1, 4, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, + 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, + 0, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 4, 0,141, 1, 0, 0,142, 1, 0, 0, 48, 1, 0, 0,143, 1, + 0, 0, 7, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0, 65, 1, 2, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 7, 0,149, 1, + 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 2, 0,165, 0, 2, 0,166, 0, 56, 0,154, 1, 56, 0,155, 1, + 0, 0,156, 1, 0, 0,157, 1, 0, 0,158, 1, 0, 0,159, 1, 2, 0,160, 1, 2, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, + 52, 0, 78, 1, 59, 0, 3, 1, 36, 0, 80, 0, 65, 0,164, 1, 30, 0,155, 0, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, + 7, 0,168, 1, 7, 0,169, 1, 2, 0,170, 1, 2, 0, 70, 0, 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, 2, 0,180, 1, 2, 0,181, 1, 7, 0,182, 1, + 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 4, 0,187, 1, 4, 0,188, 1, 4, 0,189, 1, 40, 0,126, 0, + 12, 0,190, 1, 66, 0, 4, 0, 27, 0, 31, 0, 0, 0,191, 1, 67, 0, 2, 0, 44, 0,154, 0, 68, 0, 26, 0, 68, 0, 0, 0, + 68, 0, 1, 0, 69, 0,192, 1, 4, 0,193, 1, 4, 0,194, 1, 4, 0,195, 1, 4, 0,196, 1, 4, 0,197, 1, 4, 0,198, 1, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,199, 1, 2, 0,200, 1, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,201, 1, + 7, 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, 23, 0, 7, 0,208, 1, + 7, 0,209, 1, 70, 0, 16, 0, 27, 0, 31, 0, 69, 0,192, 1, 12, 0,210, 1, 12, 0,211, 1, 12, 0,212, 1, 36, 0, 80, 0, + 64, 0,213, 1, 2, 0, 19, 0, 2, 0,214, 1, 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0,215, 1, + 7, 0,216, 1, 7, 0,217, 1, 35, 0, 11, 0, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 2, 0, 55, 0, + 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 0, 0,226, 1, 0, 0,227, 1, 34, 0, 7, 0, 7, 0,228, 1, + 7, 0,219, 1, 7, 0,220, 1, 2, 0,224, 1, 2, 0,227, 1, 7, 0,221, 1, 7, 0, 37, 0, 71, 0, 21, 0, 71, 0, 0, 0, + 71, 0, 1, 0, 2, 0, 17, 0, 2, 0,229, 1, 2, 0,227, 1, 2, 0, 19, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,232, 1, + 2, 0,233, 1, 2, 0,234, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 34, 0, 49, 0, + 35, 0, 50, 0, 2, 0,240, 1, 2, 0,241, 1, 4, 0,242, 1, 72, 0, 5, 0, 2, 0,243, 1, 2, 0,229, 1, 0, 0, 19, 0, + 0, 0, 37, 0, 2, 0, 70, 0, 73, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0,244, 1, 74, 0, 62, 0, + 27, 0, 31, 0, 39, 0, 75, 0, 69, 0,192, 1, 12, 0,245, 1, 12, 0,211, 1, 12, 0,246, 1, 32, 0,247, 1, 32, 0,248, 1, + 32, 0,249, 1, 36, 0, 80, 0, 75, 0,250, 1, 38, 0,251, 1, 64, 0,213, 1, 12, 0,252, 1, 7, 0, 9, 1, 7, 0,177, 0, + 7, 0, 10, 1, 4, 0,178, 0, 2, 0,253, 1, 2, 0,214, 1, 2, 0, 19, 0, 2, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, + 7, 0, 1, 2, 2, 0,232, 1, 2, 0,233, 1, 2, 0, 2, 2, 2, 0, 3, 2, 4, 0, 4, 2, 34, 0, 5, 2, 2, 0, 23, 0, + 2, 0, 99, 0, 2, 0, 67, 0, 2, 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, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 16, 2, 0, 0, 17, 2, 76, 0, 18, 2, 77, 0, 19, 2, + 0, 0, 20, 2, 66, 0, 21, 2, 66, 0, 22, 2, 66, 0, 23, 2, 66, 0, 24, 2, 4, 0, 25, 2, 7, 0, 26, 2, 4, 0, 27, 2, + 4, 0, 28, 2, 73, 0, 29, 2, 4, 0, 30, 2, 4, 0, 31, 2, 72, 0, 32, 2, 72, 0, 33, 2, 78, 0, 39, 0, 27, 0, 31, 0, + 69, 0,192, 1, 12, 0, 34, 2, 36, 0, 80, 0, 38, 0,251, 1, 64, 0,213, 1, 79, 0, 35, 2, 80, 0, 36, 2, 81, 0, 37, 2, + 82, 0, 38, 2, 83, 0, 39, 2, 84, 0, 40, 2, 85, 0, 41, 2, 86, 0, 42, 2, 78, 0, 43, 2, 87, 0, 44, 2, 88, 0, 45, 2, + 89, 0, 46, 2, 89, 0, 47, 2, 89, 0, 48, 2, 4, 0, 54, 0, 4, 0, 49, 2, 4, 0, 50, 2, 4, 0, 51, 2, 4, 0, 52, 2, + 4, 0,178, 0, 7, 0, 9, 1, 7, 0,177, 0, 7, 0, 10, 1, 7, 0, 53, 2, 4, 0, 54, 2, 2, 0, 55, 2, 2, 0, 19, 0, + 2, 0, 56, 2, 2, 0, 57, 2, 2, 0,214, 1, 2, 0, 58, 2, 90, 0, 59, 2, 91, 0, 60, 2, 81, 0, 8, 0, 9, 0, 61, 2, + 7, 0, 62, 2, 4, 0, 63, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 79, 0, 7, 0, + 4, 0, 67, 2, 4, 0, 68, 2, 4, 0, 69, 2, 4, 0, 70, 2, 2, 0,229, 1, 0, 0, 71, 2, 0, 0, 19, 0, 83, 0, 5, 0, + 4, 0, 67, 2, 4, 0, 68, 2, 0, 0, 72, 2, 0, 0, 73, 2, 2, 0, 19, 0, 92, 0, 2, 0, 4, 0, 74, 2, 7, 0,220, 1, + 84, 0, 3, 0, 92, 0, 75, 2, 4, 0, 76, 2, 4, 0, 19, 0, 82, 0, 6, 0, 7, 0, 77, 2, 2, 0, 78, 2, 2, 0,229, 1, + 0, 0, 19, 0, 0, 0, 73, 2, 0, 0,184, 0, 85, 0, 4, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, + 93, 0, 6, 0, 48, 0, 61, 2, 0, 0, 19, 0, 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 94, 0, 1, 0, + 7, 0, 79, 2, 95, 0, 5, 0, 0, 0,209, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,187, 0, 4, 0, 37, 0, 86, 0, 1, 0, + 7, 0, 80, 2, 87, 0, 2, 0, 4, 0, 81, 2, 4, 0, 17, 0, 80, 0, 7, 0, 7, 0, 62, 2, 48, 0, 61, 2, 0, 0, 19, 0, + 0, 0, 64, 2, 2, 0, 14, 1, 2, 0, 65, 2, 2, 0, 66, 2, 96, 0, 1, 0, 7, 0, 82, 2, 97, 0, 1, 0, 4, 0, 83, 2, + 98, 0, 1, 0, 0, 0, 84, 2, 99, 0, 1, 0, 7, 0, 62, 2,100, 0, 3, 0, 4, 0, 85, 2, 0, 0, 96, 0, 7, 0, 86, 2, +102, 0, 4, 0, 7, 0,209, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,103, 0, 1, 0,102, 0, 63, 2,104, 0, 5, 0, + 4, 0, 87, 2, 4, 0, 88, 2, 0, 0, 19, 0, 0, 0,229, 1, 0, 0,184, 0,105, 0, 2, 0, 4, 0, 89, 2, 4, 0, 88, 2, +106, 0, 10, 0,106, 0, 0, 0,106, 0, 1, 0,104, 0, 90, 2,103, 0, 91, 2,105, 0, 92, 2, 4, 0, 54, 0, 4, 0, 50, 2, + 4, 0, 49, 2, 4, 0, 37, 0, 82, 0, 93, 2, 90, 0, 14, 0, 12, 0, 94, 2, 82, 0, 93, 2, 0, 0, 95, 2, 0, 0, 96, 2, + 0, 0, 97, 2, 0, 0, 98, 2, 0, 0, 99, 2, 0, 0,100, 2, 0, 0,101, 2, 0, 0, 19, 0, 89, 0, 46, 2, 89, 0, 48, 2, + 2, 0,102, 2, 0, 0,103, 2, 91, 0, 8, 0, 4, 0,104, 2, 4, 0,105, 2, 79, 0,106, 2, 83, 0,107, 2, 4, 0, 50, 2, + 4, 0, 49, 2, 4, 0, 54, 0, 4, 0, 37, 0,107, 0, 7, 0,107, 0, 0, 0,107, 0, 1, 0, 4, 0, 17, 0, 4, 0, 14, 1, + 0, 0, 20, 0, 47, 0,139, 0, 0, 0,108, 2,108, 0, 7, 0,107, 0,109, 2, 2, 0,110, 2, 2, 0, 94, 2, 2, 0,111, 2, + 2, 0, 94, 0, 9, 0,112, 2, 9, 0,113, 2,109, 0, 3, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0,110, 0, 5, 0, +107, 0,109, 2, 32, 0,169, 0, 0, 0, 20, 0, 2, 0,114, 2, 0, 0,115, 2,111, 0, 5, 0,107, 0,109, 2, 7, 0, 92, 0, + 7, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2,112, 0, 5, 0,107, 0,109, 2, 32, 0,119, 2, 0, 0, 72, 0, 4, 0, 14, 1, + 4, 0, 19, 0,113, 0, 13, 0,107, 0,109, 2, 32, 0,120, 2, 32, 0,121, 2, 32, 0,122, 2, 32, 0,123, 2, 7, 0,124, 2, + 7, 0,125, 2, 7, 0,116, 2, 7, 0,126, 2, 4, 0,127, 2, 4, 0,128, 2, 4, 0, 94, 0, 4, 0,129, 2,114, 0, 5, 0, +107, 0,109, 2, 2, 0,130, 2, 2, 0, 19, 0, 7, 0,131, 2, 32, 0,132, 2,115, 0, 3, 0,107, 0,109, 2, 7, 0,133, 2, + 4, 0, 94, 0,116, 0, 10, 0,107, 0,109, 2, 7, 0,134, 2, 4, 0,135, 2, 4, 0, 37, 0, 2, 0, 94, 0, 2, 0,136, 2, + 2, 0,137, 2, 2, 0,138, 2, 7, 0,139, 2, 0, 0,140, 2,117, 0, 3, 0,107, 0,109, 2, 7, 0, 37, 0, 4, 0, 17, 0, +118, 0, 11, 0,107, 0,109, 2, 53, 0,141, 2, 7, 0,142, 2, 4, 0,143, 2, 0, 0,140, 2, 7, 0,144, 2, 4, 0,145, 2, + 32, 0,146, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,119, 0, 10, 0,107, 0,109, 2, 32, 0,149, 2, 48, 0,150, 2, + 4, 0, 94, 0, 4, 0,151, 2, 7, 0,152, 2, 7, 0,153, 2, 0, 0,147, 2, 4, 0,148, 2, 4, 0, 37, 0,120, 0, 3, 0, +107, 0,109, 2, 7, 0,154, 2, 4, 0,155, 2,121, 0, 5, 0,107, 0,109, 2, 7, 0,156, 2, 0, 0,140, 2, 2, 0, 19, 0, + 2, 0,157, 2,122, 0, 8, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,156, 2, 7, 0,221, 1, 7, 0,110, 0, 0, 0,140, 2, + 2, 0, 19, 0, 2, 0, 17, 0,123, 0, 21, 0,107, 0,109, 2, 32, 0,158, 2, 0, 0,140, 2, 53, 0,141, 2, 32, 0,146, 2, + 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, + 7, 0,164, 2, 7, 0,165, 2, 4, 0,145, 2, 4, 0,148, 2, 0, 0,147, 2, 7, 0,166, 2, 7, 0,167, 2, 7, 0, 43, 0, +124, 0, 7, 0,107, 0,109, 2, 2, 0,168, 2, 2, 0,169, 2, 4, 0, 70, 0, 32, 0,169, 0, 7, 0,170, 2, 0, 0,140, 2, +125, 0, 9, 0,107, 0,109, 2, 32, 0,169, 0, 7, 0,171, 2, 7, 0,172, 2, 7, 0,165, 2, 4, 0,173, 2, 4, 0,174, 2, + 7, 0,175, 2, 0, 0, 20, 0,126, 0, 1, 0,107, 0,109, 2,127, 0, 6, 0,107, 0,109, 2, 47, 0,139, 0,128, 0,176, 2, +129, 0,177, 2,130, 0,178, 2,131, 0,179, 2,132, 0, 14, 0,107, 0,109, 2, 82, 0,180, 2, 82, 0,181, 2, 82, 0,182, 2, + 82, 0,183, 2, 82, 0,184, 2, 82, 0,185, 2, 79, 0,186, 2, 4, 0,187, 2, 4, 0,188, 2, 2, 0,189, 2, 2, 0, 37, 0, + 7, 0,190, 2,133, 0,191, 2,134, 0, 3, 0,107, 0,109, 2,135, 0,192, 2,136, 0,191, 2,137, 0, 4, 0,107, 0,109, 2, + 32, 0,169, 0, 4, 0,193, 2, 4, 0, 37, 0,138, 0, 2, 0, 4, 0,194, 2, 7, 0,220, 1,139, 0, 2, 0, 4, 0,130, 0, + 4, 0,195, 2,140, 0, 20, 0,107, 0,109, 2, 32, 0,169, 0, 0, 0,140, 2, 2, 0,196, 2, 2, 0,197, 2, 2, 0, 19, 0, + 2, 0, 37, 0, 7, 0,198, 2, 7, 0,199, 2, 4, 0, 54, 0, 4, 0,200, 2,139, 0,201, 2,138, 0,202, 2, 4, 0,203, 2, + 4, 0,204, 2, 4, 0,205, 2, 4, 0,195, 2, 7, 0,206, 2, 7, 0,207, 2, 7, 0,208, 2,141, 0, 8, 0,107, 0,109, 2, +142, 0,209, 2,135, 0,192, 2, 4, 0,210, 2, 4, 0,211, 2, 4, 0,212, 2, 2, 0, 19, 0, 2, 0, 57, 0,143, 0, 8, 0, +107, 0,109, 2, 32, 0, 45, 0, 2, 0,213, 2, 2, 0, 19, 0, 2, 0,130, 2, 2, 0, 57, 0, 7, 0,214, 2, 7, 0,215, 2, +144, 0, 5, 0,107, 0,109, 2, 4, 0,216, 2, 2, 0, 19, 0, 2, 0,217, 2, 7, 0,218, 2,145, 0, 7, 0,107, 0,109, 2, + 82, 0,219, 2, 4, 0,220, 2, 0, 0,221, 2, 0, 0,222, 2, 0, 0,223, 2, 0, 0,224, 2,146, 0, 3, 0,107, 0,109, 2, +147, 0,225, 2,131, 0,179, 2,148, 0, 10, 0,107, 0,109, 2, 32, 0,226, 2, 32, 0,227, 2, 0, 0,228, 2, 7, 0,229, 2, + 2, 0,230, 2, 2, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 0, 0,115, 2,149, 0, 9, 0,107, 0,109, 2, 32, 0,234, 2, + 0, 0,228, 2, 7, 0,235, 2, 7, 0,236, 2, 0, 0, 14, 1, 0, 0,130, 2, 0, 0,237, 2, 0, 0, 37, 0,150, 0, 27, 0, + 27, 0, 31, 0, 2, 0,230, 1, 2, 0,231, 1, 2, 0,238, 2, 2, 0, 19, 0, 2, 0,239, 2, 2, 0,240, 2, 2, 0,241, 2, + 2, 0, 70, 0, 0, 0,242, 2, 0, 0,243, 2, 0, 0,244, 2, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0,245, 2, 7, 0,246, 2, + 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 34, 0,251, 2, 36, 0, 80, 0, 38, 0,251, 1, 84, 0, 40, 2, + 7, 0,252, 2, 7, 0,253, 2,150, 0,254, 2,151, 0, 3, 0,151, 0, 0, 0,151, 0, 1, 0, 0, 0, 20, 0, 69, 0, 3, 0, + 7, 0,255, 2, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,112, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 0, 3, + 4, 0, 1, 3, 4, 0, 2, 3, 4, 0, 3, 3, 0, 0, 4, 3, 32, 0, 38, 0, 32, 0, 5, 3, 32, 0, 6, 3, 32, 0, 7, 3, + 32, 0, 8, 3, 36, 0, 80, 0, 75, 0,250, 1, 69, 0,192, 1,152, 0, 9, 3,152, 0, 10, 3,153, 0, 11, 3, 9, 0, 2, 0, + 12, 0, 12, 3, 12, 0, 34, 2, 12, 0,211, 1, 12, 0, 13, 3, 12, 0, 14, 3, 64, 0,213, 1, 0, 0, 15, 3, 4, 0,214, 1, + 4, 0, 16, 3, 7, 0, 9, 1, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0,177, 0, 7, 0, 19, 3, 7, 0, 10, 1, 7, 0, 20, 3, + 7, 0, 21, 3, 7, 0,171, 2, 7, 0, 22, 3, 7, 0,213, 0, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 24, 3, 2, 0, 25, 3, + 2, 0, 26, 3, 2, 0, 27, 3, 2, 0, 28, 3, 2, 0, 29, 3, 2, 0, 30, 3, 2, 0, 31, 3, 2, 0, 32, 3, 2, 0, 33, 3, + 2, 0, 34, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 4, 0, 38, 3, 7, 0, 39, 3, 7, 0, 26, 2, 7, 0, 40, 3, + 7, 0, 41, 3, 7, 0, 42, 3, 7, 0, 43, 3, 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3, 7, 0, 48, 3, + 7, 0, 49, 3, 0, 0, 50, 3, 0, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 7, 0, 54, 3, 7, 0, 55, 3, 40, 0,126, 0, + 12, 0, 56, 3, 12, 0, 57, 3, 12, 0, 58, 3, 12, 0, 59, 3, 7, 0, 60, 3, 2, 0, 81, 2, 2, 0, 61, 3, 7, 0, 63, 2, + 4, 0, 62, 3, 4, 0, 63, 3,154, 0, 64, 3, 2, 0, 65, 3, 2, 0,220, 0, 7, 0, 66, 3, 12, 0, 67, 3, 12, 0, 68, 3, + 12, 0, 69, 3, 12, 0, 70, 3,155, 0, 71, 3,156, 0, 72, 3, 65, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, 2, 0, 76, 3, + 2, 0, 77, 3, 7, 0, 55, 2, 2, 0, 78, 3, 2, 0, 79, 3,147, 0, 80, 3,135, 0, 81, 3,135, 0, 82, 3, 4, 0, 83, 3, + 4, 0, 84, 3, 4, 0, 85, 3, 4, 0, 70, 0, 12, 0, 86, 3,157, 0, 14, 0,157, 0, 0, 0,157, 0, 1, 0, 32, 0, 38, 0, + 7, 0,171, 2, 7, 0, 11, 1, 7, 0,172, 2, 7, 0,165, 2, 0, 0, 20, 0, 4, 0,173, 2, 4, 0,174, 2, 4, 0, 87, 3, + 2, 0, 17, 0, 2, 0, 88, 3, 7, 0,175, 2,155, 0, 36, 0, 2, 0, 89, 3, 2, 0, 90, 3, 2, 0, 19, 0, 2, 0,165, 2, + 7, 0, 91, 3, 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, + 7, 0, 99, 3, 7, 0,100, 3, 7, 0,101, 3, 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, + 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, + 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 53, 0,170, 0,158, 0,119, 3, 7, 0,120, 3, 4, 0,118, 2, +159, 0, 6, 0,159, 0, 0, 0,159, 0, 1, 0, 4, 0,121, 3, 4, 0,122, 3, 7, 0, 2, 0, 9, 0,123, 3,131, 0, 12, 0, + 4, 0, 19, 0, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 4, 0,127, 3, 4, 0,128, 3, 4, 0,129, 3, 4, 0,130, 3, + 0, 0,131, 3, 0, 0,132, 3, 0, 0,133, 3, 12, 0,134, 3,160, 0, 1, 0, 7, 0,228, 1,154, 0, 30, 0, 4, 0, 19, 0, + 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3, 4, 0,138, 3, 4, 0,139, 3, 4, 0,140, 3, 4, 0,141, 3, 7, 0,142, 3, + 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3, 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 7, 0,150, 3, + 7, 0,151, 3, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, 7, 0,157, 3, 7, 0,158, 3, + 7, 0,159, 3, 4, 0,160, 3, 4, 0,161, 3, 7, 0,162, 3, 7, 0, 46, 3,156, 0, 44, 0,142, 0,163, 3, 4, 0,122, 3, + 4, 0,164, 3,161, 0,165, 3,162, 0,166, 3, 7, 0, 37, 0, 7, 0,167, 3, 7, 0,168, 3, 7, 0,169, 3, 7, 0,170, 3, + 7, 0,171, 3, 7, 0,172, 3, 7, 0,173, 3, 7, 0,174, 3, 7, 0,175, 3, 7, 0,176, 3, 2, 0,177, 3, 2, 0,178, 3, + 7, 0,179, 3, 7, 0,180, 3, 4, 0,131, 0, 4, 0,181, 3, 4, 0,182, 3, 2, 0,183, 3, 2, 0,184, 3,160, 0,185, 3, + 4, 0,186, 3, 4, 0, 82, 0, 7, 0,187, 3, 7, 0,188, 3, 7, 0,189, 3, 7, 0,190, 3, 2, 0,191, 3, 2, 0,192, 3, + 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3, 2, 0,197, 3, 2, 0,198, 3,163, 0,199, 3, 7, 0,200, 3, + 7, 0,201, 3,131, 0,202, 3,147, 0, 48, 0, 2, 0, 17, 0, 2, 0,203, 3, 2, 0,204, 3, 2, 0,205, 3, 7, 0,206, 3, + 2, 0,207, 3, 2, 0,208, 3, 7, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, + 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 4, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, 78, 0,222, 3, + 78, 0,223, 3, 78, 0,224, 3, 0, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 36, 0, 80, 0, 2, 0,228, 3, 0, 0,229, 3, + 0, 0,230, 3, 7, 0,231, 3, 4, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 4, 0,235, 3, 4, 0, 19, 0, 7, 0,236, 3, + 7, 0,237, 3, 7, 0,238, 3, 82, 0,239, 3, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 7, 0,243, 3, 7, 0,244, 3, + 7, 0,245, 3, 7, 0,246, 3, 4, 0,247, 3,164, 0, 72, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,179, 0, 2, 0, 15, 1, + 2, 0, 48, 1, 2, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, + 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 86, 1, 7, 0, 88, 1, 7, 0, 87, 1, 7, 0, 1, 4, 4, 0, 2, 4, 7, 0, 3, 4, + 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, 2, 0, 10, 4, 2, 0, 14, 1, + 2, 0, 11, 4, 2, 0, 12, 4, 2, 0, 13, 4, 2, 0, 14, 4, 2, 0, 15, 4, 2, 0, 16, 4, 7, 0, 17, 4, 7, 0, 18, 4, + 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, + 7, 0, 27, 4, 7, 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, 2, 0, 37, 4, 2, 0, 38, 4, 2, 0, 39, 4, 2, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, + 7, 0, 43, 4, 7, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 19, 0, 7, 0, 48, 4, 7, 0, 49, 4, + 36, 0, 80, 0, 52, 0, 78, 1, 30, 0,155, 0, 40, 0,126, 0,165, 0, 8, 0,165, 0, 0, 0,165, 0, 1, 0, 4, 0, 23, 3, + 4, 0, 50, 4, 4, 0, 19, 0, 2, 0, 51, 4, 2, 0, 52, 4, 32, 0,169, 0,166, 0, 13, 0, 9, 0, 53, 4, 9, 0, 54, 4, + 4, 0, 55, 4, 4, 0, 56, 4, 4, 0, 57, 4, 4, 0, 58, 4, 4, 0, 59, 4, 4, 0, 60, 4, 4, 0, 61, 4, 4, 0, 62, 4, + 4, 0, 63, 4, 4, 0, 37, 0, 0, 0, 64, 4,167, 0, 5, 0, 9, 0, 65, 4, 9, 0, 66, 4, 4, 0, 67, 4, 4, 0, 70, 0, + 0, 0, 68, 4,168, 0, 13, 0, 4, 0, 17, 0, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4, + 4, 0, 94, 0, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, 26, 0, 30, 0,169, 0, 4, 0, + 4, 0, 79, 4, 7, 0, 80, 4, 2, 0, 19, 0, 2, 0, 81, 4,170, 0, 11, 0,170, 0, 0, 0,170, 0, 1, 0, 0, 0, 20, 0, + 64, 0, 82, 4, 65, 0, 83, 4, 4, 0, 23, 3, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 37, 0, 4, 0, 86, 4, 4, 0, 87, 4, +171, 0,131, 0,166, 0, 88, 4,167, 0, 89, 4,168, 0, 90, 4,169, 0, 91, 4, 4, 0, 92, 4, 4, 0,131, 0, 4, 0,181, 3, + 4, 0, 93, 4, 4, 0, 94, 4, 4, 0, 95, 4, 4, 0, 96, 4, 2, 0, 19, 0, 2, 0, 97, 4, 7, 0, 26, 2, 7, 0, 98, 4, + 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 2, 0,103, 4, 2, 0,104, 4, 2, 0,105, 4, 2, 0,106, 4, + 2, 0,219, 0, 2, 0,107, 4, 2, 0,108, 4, 2, 0,118, 3, 2, 0,109, 4, 2, 0,110, 4, 2, 0, 35, 1, 2, 0,110, 0, + 2, 0,111, 4, 2, 0,112, 4, 2, 0,113, 4, 2, 0,114, 4, 2, 0,115, 4, 2, 0,116, 4, 2, 0,117, 4, 2, 0,118, 4, + 2, 0,119, 4, 2, 0, 36, 1, 2, 0,120, 4, 2, 0,121, 4, 2, 0,122, 4, 2, 0,123, 4, 4, 0,124, 4, 4, 0, 14, 1, + 2, 0,125, 4, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 24, 0,131, 4, 24, 0,132, 4, + 23, 0,133, 4, 12, 0,134, 4, 2, 0,135, 4, 2, 0, 37, 0, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, + 4, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, + 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, 2, 0,154, 4, 2, 0,155, 4, + 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, + 4, 0,164, 4, 4, 0,165, 4, 4, 0,166, 4, 4, 0,167, 4, 4, 0,168, 4, 7, 0,169, 4, 4, 0,170, 4, 4, 0,171, 4, + 4, 0,172, 4, 4, 0,173, 4, 7, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, + 7, 0,180, 4, 7, 0,181, 4, 7, 0,182, 4, 0, 0,183, 4, 0, 0,184, 4, 4, 0,185, 4, 2, 0,186, 4, 2, 0,161, 1, + 0, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 7, 0,192, 4, 7, 0,193, 4, 2, 0,194, 4, + 2, 0,195, 4, 7, 0,196, 4, 2, 0,197, 4, 2, 0,198, 4, 4, 0,199, 4, 2, 0,200, 4, 2, 0,201, 4, 2, 0,202, 4, + 2, 0,203, 4, 7, 0,204, 4, 7, 0, 70, 0, 43, 0,205, 4,172, 0, 9, 0,172, 0, 0, 0,172, 0, 1, 0, 0, 0, 20, 0, + 2, 0,206, 4, 2, 0,207, 4, 2, 0,208, 4, 2, 0, 43, 0, 7, 0,209, 4, 7, 0, 70, 0,173, 0, 5, 0, 7, 0,210, 4, + 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,161, 1,174, 0, 5, 0,174, 0, 0, 0,174, 0, 1, 0, 4, 0,121, 3, + 0, 0,131, 3, 4, 0, 19, 0,175, 0, 6, 0,176, 0,211, 4, 2, 0, 19, 0, 2, 0,212, 4, 2, 0,213, 4, 2, 0,214, 4, + 9, 0,215, 4,177, 0, 4, 0, 2, 0,110, 0, 2, 0,142, 2, 2, 0,124, 3, 2, 0,216, 4,178, 0, 10, 0, 2, 0, 19, 0, + 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4,177, 0,220, 4, 9, 0,215, 4, 7, 0,221, 4, 4, 0,222, 4, 4, 0,223, 4, + 4, 0, 37, 0,179, 0, 4, 0,179, 0, 0, 0,179, 0, 1, 0, 0, 0,224, 4, 7, 0,225, 4,180, 0, 8, 0,181, 0,226, 4, +176, 0,211, 4, 7, 0,227, 4, 4, 0, 94, 0, 0, 0,228, 4, 0, 0,229, 4, 0, 0,230, 4, 0, 0,231, 4,182, 0, 9, 0, +176, 0,211, 4, 7, 0,232, 4, 7, 0,233, 4, 2, 0, 14, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,234, 4, 84, 0,235, 4, + 9, 0,215, 4,183, 0, 72, 0,182, 0,236, 4,182, 0,237, 4,180, 0,238, 4, 7, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, + 7, 0,242, 4, 7, 0,243, 4, 2, 0,124, 3, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, 2, 0,248, 4, + 2, 0,223, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, + 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5,175, 0, 7, 5, +178, 0, 8, 5, 7, 0, 9, 5, 7, 0, 10, 5, 7, 0, 11, 5, 2, 0, 12, 5, 2, 0, 70, 0, 0, 0, 13, 5, 0, 0, 14, 5, + 0, 0, 15, 5, 0, 0, 16, 5, 0, 0, 17, 5, 0, 0, 18, 5, 2, 0, 19, 5, 7, 0, 20, 5, 7, 0, 21, 5, 7, 0, 22, 5, + 7, 0, 23, 5, 7, 0, 24, 5, 7, 0, 25, 5, 7, 0, 26, 5, 7, 0, 27, 5, 7, 0, 28, 5, 7, 0, 29, 5, 2, 0, 30, 5, + 0, 0, 31, 5, 0, 0, 32, 5, 0, 0, 33, 5, 0, 0, 34, 5, 32, 0, 35, 5, 0, 0, 36, 5, 0, 0, 37, 5, 0, 0, 38, 5, + 0, 0, 39, 5, 0, 0, 40, 5, 0, 0, 41, 5, 0, 0, 42, 5, 0, 0, 43, 5, 2, 0, 44, 5, 2, 0, 45, 5, 2, 0, 46, 5, + 2, 0, 47, 5, 2, 0, 48, 5,184, 0, 8, 0, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 4, 0, 52, 5, 4, 0, 53, 5, + 4, 0, 54, 5, 4, 0, 54, 0, 4, 0, 50, 2, 47, 0, 34, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0, 55, 5,164, 0, 56, 5, + 47, 0, 57, 5, 48, 0,211, 0, 12, 0, 58, 5,165, 0, 59, 5, 32, 0, 60, 5, 7, 0, 61, 5, 7, 0, 62, 5, 7, 0, 63, 5, + 7, 0, 64, 5, 4, 0, 23, 3, 2, 0, 19, 0, 2, 0, 7, 1, 59, 0, 3, 1,185, 0, 65, 5,173, 0, 66, 5,183, 0, 67, 5, +186, 0, 68, 5,171, 0,185, 0,169, 0, 91, 4, 40, 0,126, 0, 12, 0,104, 0, 12, 0, 69, 5,187, 0, 70, 5, 2, 0, 71, 5, + 2, 0, 72, 5, 2, 0,220, 0, 2, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 12, 0, 76, 5,188, 0, 6, 0, 48, 0,211, 0, + 46, 0, 2, 1, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,110, 0, 7, 0, 77, 5,189, 0, 35, 0, 7, 0, 78, 5, 7, 0, 79, 5, + 7, 0, 80, 5, 7, 0, 81, 5, 7, 0, 82, 5, 7, 0, 83, 5, 7, 0, 84, 5, 7, 0, 85, 5, 7, 0, 86, 5, 7, 0, 21, 1, + 7, 0, 87, 5, 7, 0, 88, 5, 7, 0, 89, 5, 7, 0, 90, 5, 7, 0,176, 0, 2, 0, 91, 5, 2, 0, 92, 5, 4, 0, 93, 5, + 2, 0, 94, 5, 2, 0, 95, 5, 2, 0, 96, 5, 2, 0, 97, 5, 7, 0, 98, 5, 69, 0, 99, 5,190, 0,100, 5,189, 0,101, 5, +191, 0,102, 5,192, 0,103, 5,193, 0,104, 5,194, 0,105, 5,195, 0,106, 5, 7, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, + 4, 0,161, 1,196, 0, 54, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, + 7, 0, 86, 5, 7, 0, 21, 1, 7, 0, 43, 0, 4, 0,114, 5, 2, 0, 96, 5, 2, 0, 97, 5, 32, 0, 55, 5, 32, 0,115, 5, +188, 0,116, 5,196, 0,101, 5, 0, 0,117, 5, 4, 0, 23, 3, 4, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 2, 0,121, 5, + 2, 0,122, 5, 2, 0,161, 1, 2, 0, 19, 0, 2, 0,123, 5, 2, 0,124, 5, 7, 0,116, 0, 7, 0,125, 5, 7, 0,126, 5, + 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,176, 0, 7, 0, 61, 5, 2, 0,130, 5, 2, 0, 65, 1, 2, 0,131, 5, + 2, 0,132, 5, 2, 0,133, 5, 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 4, 0,139, 5, + 12, 0,140, 5, 2, 0,141, 5, 2, 0, 64, 2, 2, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, 9, 0,145, 5,190, 0,100, 5, +198, 0, 22, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0,146, 5, 23, 0,147, 5, 23, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, + 7, 0,151, 5, 7, 0,152, 5, 2, 0,153, 5, 2, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 2, 0,157, 5, 2, 0, 19, 0, + 2, 0,158, 5, 2, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 2, 0,162, 5, 2, 0,122, 5, 7, 0,163, 5,197, 0, 6, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,199, 0, 8, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,200, 0,164, 5, 47, 0,139, 0,201, 0, 14, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,202, 0,166, 5, + 12, 0,167, 5, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5,203, 0, 31, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,191, 0,102, 5, 2, 0,171, 5, 2, 0,172, 5, + 2, 0,158, 5, 2, 0,173, 5,198, 0,165, 5, 2, 0,174, 5, 2, 0,138, 0, 2, 0,169, 5, 2, 0,175, 5, 9, 0,176, 5, + 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0, 32, 3, 2, 0,182, 5, 2, 0,183, 5, + 0, 0, 19, 0, 0, 0, 48, 1, 9, 0,250, 1, 4, 0,184, 5, 4, 0,185, 5, 27, 0,186, 5,204, 0, 16, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 7, 0, 14, 2, 7, 0, 15, 2, + 2, 0,174, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 4, 0, 19, 0, 7, 0,190, 5,190, 0,100, 5,205, 0, 15, 0, + 0, 0,191, 5, 0, 0,192, 5, 0, 0,193, 5, 2, 0, 19, 0, 2, 0,194, 5, 2, 0,195, 5, 2, 0,104, 1, 2, 0,196, 5, + 2, 0, 37, 0, 4, 0,197, 5, 4, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5, 0, 0,201, 5, 0, 0,202, 5,206, 0, 12, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 4, 0, 37, 0,205, 0,203, 5,207, 0,204, 5, 12, 0,205, 5, + 12, 0,206, 5,208, 0,207, 5,195, 0,208, 5,209, 0,209, 5,210, 0, 17, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, + 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 12, 0,210, 5,211, 0,211, 5, 0, 0,212, 5,212, 0,213, 5, + 4, 0,214, 5, 4, 0,215, 5, 2, 0, 19, 0, 2, 0,216, 5, 2, 0,217, 5, 2, 0, 37, 0,213, 0, 29, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 48, 0,150, 2, 46, 0, 2, 1, 62, 0,218, 5, + 2, 0,138, 0, 2, 0,219, 5, 2, 0, 70, 0, 2, 0,220, 5, 4, 0, 19, 0, 2, 0,221, 5, 2, 0,170, 5, 2, 0,169, 5, + 2, 0,161, 1, 0, 0,222, 5, 0, 0,223, 5, 0, 0,224, 5, 0, 0,122, 5, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0,190, 5, + 7, 0, 65, 1, 7, 0,225, 5, 7, 0,226, 5,190, 0,100, 5,214, 0, 11, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, + 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 2, 0,168, 5, 2, 0, 19, 0, 4, 0, 37, 0,202, 0,166, 5,198, 0,165, 5, +215, 0, 27, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, 43, 0,227, 5, + 4, 0,228, 5, 4, 0,229, 5, 2, 0, 94, 0, 2, 0,138, 0, 2, 0,230, 5, 0, 0,231, 5, 0, 0,232, 5, 4, 0,233, 5, + 4, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 2, 0,237, 5, 2, 0,238, 5, 7, 0,239, 5, 23, 0,240, 5, 23, 0,241, 5, + 4, 0,242, 5, 4, 0,243, 5, 0, 0,244, 5, 0, 0,245, 5,216, 0, 10, 0, 27, 0, 31, 0, 9, 0,246, 5, 9, 0,247, 5, + 9, 0,248, 5, 9, 0,249, 5, 9, 0,250, 5, 4, 0, 94, 0, 4, 0,251, 5, 0, 0,252, 5, 0, 0,253, 5,217, 0, 10, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,216, 0,254, 5, 2, 0, 94, 0, 2, 0,138, 0, + 4, 0, 43, 0, 9, 0,255, 5,218, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, +198, 0,165, 5, 4, 0, 19, 0, 4, 0, 0, 6,219, 0, 23, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5, 27, 0, 1, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,138, 0, 7, 0, 2, 6, + 9, 0, 3, 6, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 4, 6, 7, 0, 5, 6, 59, 0, 3, 1, 59, 0, 6, 6, 4, 0, 7, 6, + 2, 0,178, 5, 2, 0, 37, 0,190, 0,100, 5,220, 0, 10, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, + 7, 0,112, 5, 2, 0,113, 5, 2, 0, 19, 0, 2, 0, 32, 3, 4, 0, 37, 0,190, 0,100, 5,221, 0, 42, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,207, 0,204, 5, 0, 0,191, 5, + 0, 0,192, 5, 0, 0,193, 5, 2, 0, 17, 0, 2, 0,200, 5, 2, 0, 19, 0, 2, 0,194, 5, 9, 0, 3, 6, 4, 0,197, 5, + 4, 0, 8, 6, 4, 0, 9, 6, 4, 0,198, 5, 23, 0, 10, 6, 23, 0, 11, 6, 7, 0, 12, 6, 7, 0, 13, 6, 7, 0, 14, 6, + 7, 0, 2, 6, 2, 0, 15, 6, 2, 0,210, 0, 2, 0,104, 1, 2, 0,196, 5, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 16, 6, + 2, 0, 17, 6, 9, 0, 18, 6, 9, 0, 19, 6, 9, 0, 20, 6, 9, 0, 21, 6, 9, 0, 22, 6, 2, 0, 23, 6, 0, 0,202, 5, + 58, 0, 24, 6,222, 0, 7, 0,222, 0, 0, 0,222, 0, 1, 0, 4, 0, 25, 6, 4, 0, 23, 0, 0, 0, 88, 0, 4, 0, 26, 6, + 4, 0, 17, 0,223, 0, 13, 0,197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5, + 4, 0, 17, 0, 4, 0, 27, 6, 4, 0, 19, 0, 4, 0,230, 5, 12, 0, 28, 6, 12, 0, 29, 6, 0, 0, 30, 6,224, 0, 7, 0, +224, 0, 0, 0,224, 0, 1, 0, 0, 0, 31, 6, 2, 0, 32, 6, 2, 0, 33, 6, 2, 0, 34, 6, 2, 0, 37, 0,225, 0, 12, 0, + 2, 0, 33, 6, 2, 0, 35, 6, 2, 0, 36, 6, 0, 0,115, 2, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6, 2, 0, 40, 6, + 2, 0, 41, 6, 2, 0,158, 5, 7, 0, 42, 6, 7, 0, 43, 6,226, 0, 18, 0,226, 0, 0, 0,226, 0, 1, 0, 0, 0,131, 3, +225, 0, 44, 6,225, 0, 45, 6,225, 0, 46, 6,225, 0, 47, 6, 7, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, + 2, 0, 52, 6, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 57, 6, 2, 0, 58, 6,227, 0, 10, 0, + 0, 0, 59, 6, 0, 0, 60, 6, 0, 0, 61, 6, 0, 0, 62, 6, 0, 0, 63, 6, 0, 0, 64, 6, 2, 0, 65, 6, 2, 0, 66, 6, + 2, 0, 67, 6, 2, 0, 37, 0,228, 0, 8, 0, 0, 0, 68, 6, 0, 0, 69, 6, 0, 0, 70, 6, 0, 0, 71, 6, 0, 0, 72, 6, + 0, 0, 73, 6, 7, 0, 77, 5, 7, 0, 37, 0,229, 0, 16, 0,227, 0, 74, 6,227, 0, 75, 6,227, 0, 76, 6,227, 0, 77, 6, +227, 0, 78, 6,227, 0, 79, 6,227, 0, 80, 6,227, 0, 81, 6,227, 0, 82, 6,227, 0, 83, 6,227, 0, 84, 6,227, 0, 85, 6, +227, 0, 86, 6,227, 0, 87, 6,228, 0, 88, 6, 0, 0, 89, 6,230, 0, 71, 0, 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 63, 6, + 0, 0, 92, 6, 0, 0, 93, 6, 0, 0, 94, 6, 0, 0, 95, 6, 0, 0, 96, 6, 0, 0, 97, 6, 0, 0, 98, 6, 0, 0, 99, 6, + 0, 0,100, 6, 0, 0,101, 6, 0, 0,102, 6, 0, 0,103, 6, 0, 0,104, 6, 0, 0,105, 6, 0, 0,106, 6, 0, 0,107, 6, + 0, 0,108, 6, 0, 0,109, 6, 0, 0,110, 6, 0, 0,111, 6, 0, 0,112, 6, 0, 0,113, 6, 0, 0,114, 6, 0, 0,115, 6, + 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0,119, 6, 0, 0,120, 6, 0, 0,121, 6, 0, 0,122, 6, 0, 0,123, 6, + 0, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0,128, 6, 0, 0,129, 6, 0, 0,130, 6, 0, 0,131, 6, + 0, 0,132, 6, 0, 0,133, 6, 0, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6, + 0, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,143, 6, 0, 0,144, 6, 0, 0,145, 6, 0, 0,146, 6, 0, 0,147, 6, + 0, 0,148, 6, 0, 0,149, 6, 0, 0,150, 6, 0, 0,151, 6, 0, 0,152, 6, 0, 0,153, 6, 0, 0,154, 6, 0, 0,155, 6, + 0, 0,156, 6, 0, 0,157, 6, 0, 0,158, 6, 0, 0, 96, 0,231, 0, 5, 0, 0, 0,159, 6, 0, 0,114, 6, 0, 0,116, 6, + 2, 0, 19, 0, 2, 0, 37, 0,232, 0, 21, 0,232, 0, 0, 0,232, 0, 1, 0, 0, 0, 20, 0,229, 0,160, 6,230, 0,161, 6, +230, 0,162, 6,230, 0,163, 6,230, 0,164, 6,230, 0,165, 6,230, 0,166, 6,230, 0,167, 6,230, 0,168, 6,230, 0,169, 6, +230, 0,170, 6,230, 0,171, 6,230, 0,172, 6,230, 0,173, 6,230, 0,174, 6,230, 0,175, 6,230, 0,176, 6,231, 0,177, 6, +233, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 63, 2, 7, 0,178, 6, 7, 0,228, 1,234, 0, 67, 0, 4, 0, 19, 0, + 4, 0,179, 6, 4, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, 0, 0,183, 6, 0, 0,184, 6, 0, 0,185, 6, 0, 0,186, 6, + 0, 0,187, 6, 0, 0,188, 6, 0, 0,189, 6, 2, 0,190, 6, 2, 0, 37, 0, 4, 0,191, 6, 4, 0,192, 6, 4, 0,193, 6, + 4, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 4, 0,197, 6, 4, 0, 43, 0, 4, 0,198, 6, 2, 0,199, 6, 2, 0,200, 6, + 2, 0,201, 6, 2, 0,202, 6, 12, 0,203, 6, 12, 0,204, 6, 12, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, + 2, 0,209, 6, 2, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6,233, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6, + 2, 0,217, 6, 2, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6, 2, 0,222, 6, 4, 0,223, 6, 4, 0,224, 6, + 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, 2, 0,231, 6, 2, 0,232, 6, + 2, 0,233, 6, 2, 0,234, 6, 2, 0,235, 6, 2, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 7, 0,239, 6, 2, 0, 12, 5, + 2, 0,240, 6, 56, 0,241, 6,200, 0, 21, 0, 27, 0, 31, 0, 12, 0,242, 6, 12, 0,243, 6, 12, 0,244, 6, 12, 0,110, 5, + 47, 0,139, 0, 47, 0,245, 6, 2, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6, 2, 0,249, 6, 2, 0,250, 6, 2, 0,251, 6, + 2, 0,252, 6, 2, 0, 37, 0, 2, 0,253, 6, 2, 0,254, 6, 4, 0, 70, 0,195, 0,255, 6, 9, 0, 0, 7, 2, 0, 1, 7, +235, 0, 5, 0,235, 0, 0, 0,235, 0, 1, 0,235, 0, 2, 7, 13, 0, 3, 7, 4, 0, 19, 0,236, 0, 7, 0,236, 0, 0, 0, +236, 0, 1, 0,235, 0, 4, 7,235, 0, 5, 7, 2, 0,132, 4, 2, 0, 19, 0, 4, 0, 37, 0,237, 0, 23, 0,237, 0, 0, 0, +237, 0, 1, 0,238, 0, 6, 7,239, 0,209, 5, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 2, 0, 10, 7, 2, 0, 11, 7, + 2, 0, 12, 7, 2, 0, 13, 7, 2, 0, 14, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0, 15, 7, 2, 0, 16, 7, 2, 0, 17, 7, + 4, 0, 18, 7,237, 0, 19, 7, 9, 0, 20, 7, 4, 0, 21, 7, 4, 0, 22, 7, 0, 0, 23, 7,240, 0, 2, 0,241, 0, 6, 7, +239, 0,209, 5,242, 0, 2, 0,243, 0, 6, 7,239, 0,209, 5,244, 0, 23, 0,244, 0, 0, 0,244, 0, 1, 0,235, 0, 4, 7, +235, 0, 5, 7,235, 0, 24, 7,235, 0, 25, 7,200, 0, 26, 7, 23, 0, 52, 0, 0, 0,111, 5, 0, 0, 27, 7, 2, 0,159, 5, + 2, 0,160, 5, 2, 0, 28, 7, 2, 0, 37, 0, 2, 0,249, 6, 2, 0, 26, 6, 2, 0, 19, 0, 40, 0,126, 0,245, 0, 6, 7, + 12, 0, 29, 7, 12, 0,110, 5, 12, 0, 30, 7, 12, 0, 31, 7,246, 0, 21, 0,246, 0, 0, 0,246, 0, 1, 0,198, 0,165, 5, + 23, 0, 32, 7, 23, 0, 33, 7, 2, 0,159, 5, 2, 0,160, 5, 2, 0, 34, 7, 2, 0, 35, 7, 2, 0, 36, 7, 2, 0, 19, 0, + 7, 0, 10, 2, 2, 0,248, 6, 2, 0,252, 6, 4, 0, 43, 0,247, 0, 6, 7, 12, 0, 37, 7, 12, 0, 38, 7, 12, 0, 30, 7, + 0, 0, 39, 7, 9, 0, 40, 7,248, 0, 11, 0, 0, 0, 41, 7, 2, 0, 42, 7, 2, 0, 43, 7, 2, 0, 44, 7, 2, 0, 45, 7, + 2, 0,121, 4, 2, 0,116, 4,200, 0, 46, 7, 47, 0, 47, 7, 4, 0, 48, 7, 4, 0, 49, 7,249, 0, 1, 0, 0, 0, 50, 7, +250, 0, 8, 0, 58, 0, 51, 7, 58, 0, 52, 7,250, 0, 53, 7,250, 0, 54, 7,250, 0, 55, 7, 2, 0,134, 0, 2, 0, 19, 0, + 4, 0, 56, 7,251, 0, 4, 0, 4, 0,228, 5, 4, 0, 57, 7, 4, 0,233, 5, 4, 0, 58, 7,252, 0, 2, 0, 4, 0, 59, 7, + 4, 0, 60, 7,253, 0, 7, 0, 7, 0, 61, 7, 7, 0, 62, 7, 7, 0, 63, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 3, 4, + 7, 0, 64, 7,254, 0, 6, 0, 0, 0, 65, 7, 0, 0,193, 5, 50, 0,142, 0, 2, 0,110, 0, 2, 0,120, 4, 4, 0, 37, 0, +255, 0, 21, 0,255, 0, 0, 0,255, 0, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 66, 7, 4, 0, 67, 7, + 4, 0, 68, 7,249, 0, 69, 7, 0, 0, 65, 7, 4, 0, 70, 7, 4, 0, 71, 7,254, 0, 6, 3,251, 0, 72, 7,252, 0, 73, 7, +253, 0, 74, 7,250, 0, 75, 7,250, 0, 76, 7,250, 0, 77, 7, 58, 0, 78, 7, 58, 0, 79, 7, 0, 1, 12, 0, 0, 0,191, 1, + 9, 0,196, 0, 0, 0,197, 0, 4, 0,200, 0, 4, 0,208, 0, 9, 0,201, 0, 7, 0,203, 0, 7, 0,204, 0, 9, 0, 80, 7, + 9, 0, 81, 7, 9, 0,205, 0, 9, 0,207, 0, 1, 1, 43, 0, 1, 1, 0, 0, 1, 1, 1, 0, 9, 0, 82, 7, 9, 0, 26, 0, + 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 92, 0, 4, 0, 83, 7, 4, 0, 84, 7, 4, 0, 67, 7, + 4, 0, 68, 7, 4, 0, 85, 7, 4, 0,219, 0, 4, 0, 86, 7, 4, 0, 87, 7, 7, 0,233, 4, 7, 0, 88, 7, 4, 0,131, 0, + 4, 0, 89, 7,255, 0, 90, 7, 36, 0, 80, 0, 47, 0,139, 0, 50, 0,142, 0, 7, 0, 91, 7, 7, 0, 92, 7, 0, 1, 4, 1, + 1, 1, 93, 7, 1, 1, 94, 7, 1, 1, 95, 7, 12, 0, 96, 7, 2, 1, 97, 7, 3, 1, 98, 7, 7, 0, 99, 7, 7, 0,100, 7, + 4, 0,101, 7, 7, 0,102, 7, 9, 0,103, 7, 4, 0,104, 7, 4, 0,105, 7, 4, 0,106, 7, 7, 0,107, 7, 4, 1, 4, 0, + 4, 1, 0, 0, 4, 1, 1, 0, 12, 0,108, 7, 1, 1,109, 7,185, 0, 6, 0, 12, 0,110, 7, 12, 0, 96, 7, 12, 0,111, 7, + 1, 1,112, 7, 0, 0,113, 7, 0, 0,114, 7, 5, 1, 4, 0, 7, 0,115, 7, 7, 0,113, 0, 2, 0,116, 7, 2, 0,117, 7, + 6, 1, 6, 0, 7, 0,118, 7, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 4, 0,122, 7, 4, 0,123, 7, 7, 1, 12, 0, + 7, 0,124, 7, 7, 0,125, 7, 7, 0,126, 7, 7, 0,127, 7, 7, 0,128, 7, 7, 0,129, 7, 7, 0,130, 7, 7, 0,131, 7, + 7, 0,132, 7, 7, 0,133, 7, 4, 0,154, 2, 4, 0,134, 7, 8, 1, 2, 0, 7, 0,210, 4, 7, 0, 37, 0, 9, 1, 5, 0, + 7, 0,135, 7, 7, 0,136, 7, 4, 0, 94, 0, 4, 0,116, 2, 4, 0,137, 7, 10, 1, 6, 0, 10, 1, 0, 0, 10, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 11, 1, 8, 0, 11, 1, 0, 0, 11, 1, 1, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,138, 7, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,131, 0, 12, 1, 45, 0, 12, 1, 0, 0, 12, 1, 1, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,138, 7, 2, 0,215, 0, 2, 0,177, 3, 2, 0,139, 7, 7, 0,140, 7, 7, 0, 93, 0, + 7, 0,167, 2, 4, 0,141, 7, 4, 0, 82, 0, 4, 0,118, 2, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,145, 7, + 7, 0,146, 7, 7, 0,147, 7, 7, 0,164, 2, 7, 0, 1, 1, 7, 0,148, 7, 7, 0,149, 7, 7, 0, 37, 0, 7, 0,150, 7, + 7, 0,151, 7, 7, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7, 2, 0,158, 7, + 2, 0,159, 7, 2, 0,160, 7, 2, 0,123, 5, 2, 0,161, 7, 2, 0,211, 1, 2, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, + 7, 0,213, 0, 13, 1,165, 7, 65, 0,164, 1, 14, 1, 16, 0, 14, 1, 0, 0, 14, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0,138, 7, 2, 0,215, 0, 7, 0,159, 2, 7, 0,160, 2, 7, 0,161, 2, 7, 0,255, 1, 7, 0,162, 2, 7, 0,163, 2, + 7, 0,166, 7, 7, 0,164, 2, 7, 0,166, 2, 7, 0,167, 2,212, 0, 5, 0, 2, 0, 17, 0, 2, 0, 56, 7, 2, 0, 19, 0, + 2, 0,167, 7, 27, 0, 1, 6,211, 0, 3, 0, 4, 0, 69, 0, 4, 0,168, 7,212, 0, 2, 0, 15, 1, 11, 0, 15, 1, 0, 0, + 15, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0,169, 7, 4, 0, 22, 0, 4, 0,170, 7, 2, 0, 19, 0, 2, 0, 37, 0, + 9, 0,171, 7, 9, 0,172, 7, 16, 1, 5, 0, 0, 0, 20, 0, 7, 0, 21, 1, 7, 0,173, 7, 4, 0,174, 7, 4, 0, 37, 0, + 17, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 18, 1, 4, 0, 0, 0, 20, 0, 64, 0,175, 7, + 7, 0, 21, 1, 7, 0, 37, 0, 19, 1, 6, 0, 2, 0,176, 7, 2, 0,177, 7, 2, 0, 17, 0, 2, 0,178, 7, 0, 0,179, 7, + 0, 0,180, 7, 20, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0,181, 7, 0, 0,182, 7, 21, 1, 3, 0, + 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 22, 1, 4, 0, 2, 0,183, 7, 2, 0,184, 7, 2, 0, 19, 0, 2, 0, 37, 0, + 23, 1, 6, 0, 0, 0, 20, 0, 0, 0,185, 7, 2, 0,186, 7, 2, 0,164, 2, 2, 0, 14, 1, 2, 0, 70, 0, 24, 1, 5, 0, + 0, 0, 20, 0, 7, 0,113, 0, 7, 0, 5, 4, 2, 0, 19, 0, 2, 0,130, 2, 25, 1, 3, 0, 0, 0, 20, 0, 4, 0,118, 2, + 4, 0,183, 7, 26, 1, 7, 0, 0, 0, 20, 0, 7, 0, 5, 4, 0, 0,187, 7, 0, 0,188, 7, 2, 0, 14, 1, 2, 0, 43, 0, + 4, 0,189, 7, 27, 1, 3, 0, 32, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7, 28, 1, 18, 0, 28, 1, 0, 0, 28, 1, 1, 0, + 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 19, 0, 2, 0,193, 7, 2, 0,194, 7, 2, 0,195, 7, 2, 0, 43, 0, 2, 0, 70, 0, + 0, 0, 20, 0, 9, 0, 2, 0, 29, 1,196, 7, 32, 0, 45, 0, 2, 0,216, 4, 2, 0, 99, 7, 2, 0,197, 7, 2, 0, 37, 0, + 30, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,198, 7, 2, 0, 19, 0, 2, 0,130, 2, 2, 0,199, 7, 4, 0,200, 7, + 4, 0,201, 7, 4, 0,202, 7, 4, 0,203, 7, 4, 0,204, 7, 31, 1, 1, 0, 0, 0,205, 7, 32, 1, 4, 0, 43, 0,227, 5, + 0, 0,206, 7, 4, 0, 14, 1, 4, 0, 19, 0, 29, 1, 18, 0, 29, 1, 0, 0, 29, 1, 1, 0, 29, 1,207, 7, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0,208, 7, 2, 0,195, 7, 2, 0,169, 7, 2, 0,209, 7, 2, 0, 70, 0, 2, 0,161, 1, 0, 0, 20, 0, + 9, 0, 2, 0, 33, 1,196, 7, 28, 1,210, 7, 2, 0, 15, 0, 2, 0,211, 7, 4, 0,212, 7, 34, 1, 3, 0, 4, 0,190, 2, + 4, 0, 37, 0, 32, 0, 45, 0, 35, 1, 12, 0,152, 0,213, 7, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,140, 7, 4, 0, 93, 0, + 0, 0, 20, 0, 0, 0,214, 7, 2, 0,215, 7, 2, 0,216, 7, 2, 0,217, 7, 2, 0,218, 7, 7, 0,219, 7, 36, 1, 10, 0, + 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0,221, 7, 2, 1, 97, 7, 2, 0, 17, 0, 2, 0,222, 7, + 2, 0,223, 7, 2, 0,224, 7, 37, 1, 7, 0, 2, 0, 19, 0, 2, 0,220, 7, 4, 0,140, 7, 4, 0, 93, 0, 2, 0, 17, 0, + 2, 0,225, 7, 7, 0,137, 3, 38, 1, 11, 0, 4, 0,190, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 78, 0,226, 7, + 0, 0, 20, 0, 7, 0,227, 7, 7, 0,228, 7, 7, 0, 40, 3, 2, 0,229, 7, 2, 0,230, 7, 39, 1, 5, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 37, 0, 47, 0,139, 0, 32, 0, 55, 5, 40, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, + 0, 0,181, 7, 32, 0, 45, 0, 41, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,169, 7, 2, 0, 41, 3, 7, 0,231, 7, + 7, 0,232, 7, 7, 0, 9, 1, 7, 0, 10, 1, 7, 0, 17, 3, 7, 0, 20, 3, 7, 0,233, 7, 7, 0,234, 7, 32, 0,235, 7, + 42, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 0, 0,214, 7, 2, 0, 43, 0, + 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 43, 1, 8, 0, 32, 0, 45, 0, 7, 0,161, 2, 7, 0,238, 7, 7, 0,239, 7, + 7, 0,156, 2, 2, 0, 19, 0, 2, 0,130, 2, 7, 0,240, 7, 44, 1, 12, 0, 2, 0, 17, 0, 2, 0, 14, 1, 2, 0, 19, 0, + 2, 0,164, 2, 2, 0,190, 2, 2, 0,241, 7, 4, 0, 37, 0, 7, 0,242, 7, 7, 0,243, 7, 7, 0,244, 7, 7, 0,245, 7, + 0, 0,246, 7, 45, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, 4, 0, 93, 0, 0, 0, 20, 0, 2, 0, 81, 4, + 2, 0, 64, 0, 2, 0,236, 7, 2, 0,237, 7, 65, 0,164, 1, 46, 1, 7, 0, 4, 0,118, 2, 4, 0,247, 7, 4, 0,248, 7, + 4, 0,249, 7, 7, 0,250, 7, 7, 0,251, 7, 0, 0,187, 7, 47, 1, 7, 0, 0, 0,252, 7, 32, 0,253, 7, 0, 0,191, 7, + 2, 0,254, 7, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,192, 7, 48, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,140, 7, + 4, 0, 93, 0, 0, 0,255, 7, 0, 0, 0, 8, 49, 1, 1, 0, 4, 0, 19, 0, 50, 1, 6, 0, 0, 0, 96, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 4, 0, 1, 8, 7, 0, 2, 8, 43, 0,227, 5, 51, 1, 4, 0, 0, 0,184, 0, 2, 0, 19, 0, 4, 0, 17, 0, + 32, 0, 45, 0, 52, 1, 2, 0, 4, 0, 17, 0, 4, 0,148, 5, 33, 1, 10, 0, 33, 1, 0, 0, 33, 1, 1, 0, 33, 1,207, 7, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,169, 7, 2, 0, 3, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 53, 1, 10, 0, + 7, 0, 40, 3, 7, 0, 4, 8, 7, 0, 5, 8, 7, 0, 6, 8, 7, 0, 7, 8, 4, 0, 19, 0, 7, 0,241, 7, 7, 0, 8, 8, + 7, 0, 9, 8, 7, 0, 37, 0, 2, 1, 20, 0, 27, 0, 31, 0, 0, 0,195, 0, 54, 1, 10, 8, 9, 0, 11, 8, 44, 0,154, 0, + 44, 0, 12, 8, 9, 0, 13, 8, 36, 0, 80, 0, 7, 0,137, 3, 7, 0, 14, 8, 7, 0, 15, 8, 7, 0, 16, 8, 7, 0, 17, 8, + 7, 0, 18, 8, 7, 0, 19, 8, 4, 0, 94, 0, 4, 0, 20, 8, 0, 0, 21, 8, 0, 0, 22, 8, 0, 0, 23, 8, 55, 1, 6, 0, + 27, 0, 31, 0, 7, 0, 24, 8, 7, 0, 25, 8, 7, 0, 26, 8, 2, 0, 27, 8, 2, 0, 28, 8, 56, 1, 15, 0,197, 0, 0, 0, +197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5,244, 0, 29, 8,198, 0,165, 5, 2, 1, 97, 7, 2, 0, 14, 1, + 2, 0,220, 7, 2, 0, 14, 2, 2, 0, 15, 2, 2, 0, 19, 0, 2, 0,170, 5, 4, 0, 70, 0, 57, 1, 6, 0, 57, 1, 0, 0, + 57, 1, 1, 0, 32, 0, 45, 0, 9, 0, 30, 8, 4, 0,220, 0, 4, 0, 37, 0, 65, 0, 4, 0, 27, 0, 31, 0, 12, 0, 31, 8, + 4, 0,136, 0, 7, 0, 32, 8, 58, 1, 25, 0, 58, 1, 0, 0, 58, 1, 1, 0, 58, 1, 38, 0, 12, 0, 33, 8, 0, 0, 20, 0, + 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, 4, 0, 19, 0, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, + 7, 0, 21, 1, 7, 0,220, 1, 7, 0, 41, 8, 7, 0,116, 2, 7, 0, 42, 8, 7, 0, 43, 8, 7, 0, 44, 8, 7, 0, 45, 8, + 7, 0, 46, 8, 7, 0,177, 0, 2, 0,136, 0, 2, 0,249, 4, 59, 1, 20, 0, 27, 0, 31, 0, 12, 0, 47, 8, 12, 0, 48, 8, + 12, 0, 49, 8, 4, 0, 19, 0, 4, 0,119, 5, 2, 0,168, 2, 2, 0,184, 5, 2, 0,136, 0, 2, 0, 50, 8, 2, 0, 51, 8, + 2, 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, 60, 8, 60, 1, 38, 0, 60, 1, 0, 0, 60, 1, 1, 0, 26, 0, 61, 8, 12, 0, 67, 3, 0, 0, 20, 0, 2, 0, 19, 0, + 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 2, 0, 26, 3, 2, 0, 65, 8, 4, 0,253, 1, 4, 0, 57, 8, 4, 0, 58, 8, + 58, 1, 66, 8, 60, 1, 38, 0, 60, 1, 67, 8, 12, 0, 68, 8, 9, 0, 69, 8, 9, 0, 70, 8, 9, 0, 71, 8, 7, 0, 9, 1, + 7, 0,177, 0, 7, 0, 72, 8, 7, 0,201, 1, 2, 0, 73, 8, 2, 0, 37, 0, 7, 0, 74, 8, 7, 0, 75, 8, 7, 0, 22, 3, + 7, 0, 76, 8, 7, 0, 77, 8, 7, 0, 78, 8, 7, 0, 79, 8, 7, 0, 80, 8, 7, 0, 81, 8, 7, 0,250, 1, 32, 0, 82, 8, +153, 0, 9, 0, 12, 0, 83, 8, 2, 0, 19, 0, 2, 0, 84, 8, 7, 0, 26, 2, 7, 0, 85, 8, 7, 0, 86, 8, 12, 0, 87, 8, + 4, 0, 88, 8, 4, 0, 37, 0, 61, 1, 7, 0, 61, 1, 0, 0, 61, 1, 1, 0, 12, 0, 21, 8, 4, 0, 19, 0, 4, 0, 89, 8, + 0, 0,131, 3,231, 0, 90, 8,152, 0, 7, 0, 27, 0, 31, 0, 12, 0, 91, 8, 12, 0, 83, 8, 12, 0, 92, 8, 12, 0,104, 0, + 4, 0, 19, 0, 4, 0, 93, 8,202, 0, 4, 0, 27, 0, 94, 8, 12, 0, 83, 8, 4, 0, 95, 8, 4, 0, 19, 0, 62, 1, 17, 0, +197, 0, 0, 0,197, 0, 1, 0, 12, 0,110, 5, 4, 0,111, 5, 7, 0,112, 5, 2, 0,113, 5,198, 0,165, 5,152, 0, 9, 3, +202, 0, 96, 8, 0, 0, 14, 1, 0, 0,168, 5, 2, 0, 19, 0, 2, 0, 97, 8, 2, 0,169, 5, 2, 0,170, 5, 2, 0, 98, 8, + 7, 0, 99, 8, 63, 1, 8, 0, 63, 1, 0, 0, 63, 1, 1, 0, 61, 1,100, 8, 36, 0, 80, 0, 12, 0, 12, 3, 4, 0, 19, 0, + 0, 0, 20, 0, 4, 0,101, 8, 64, 1, 5, 0, 64, 1, 0, 0, 64, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0,102, 8, + 65, 1, 12, 0, 65, 1, 0, 0, 65, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,103, 8, 0, 0,104, 8, + 0, 0,102, 8, 7, 0,105, 8, 7, 0,106, 8, 4, 0, 37, 0, 36, 0, 80, 0, 66, 1, 9, 0, 66, 1, 0, 0, 66, 1, 1, 0, + 32, 0,107, 8, 0, 0,108, 8, 7, 0,109, 8, 2, 0,110, 8, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 37, 0, 67, 1, 7, 0, + 43, 0,227, 5, 26, 0, 61, 8, 4, 0, 19, 0, 4, 0,111, 8, 12, 0,112, 8, 32, 0,107, 8, 0, 0,108, 8, 68, 1, 12, 0, + 32, 0,107, 8, 2, 0,113, 8, 2, 0, 19, 0, 2, 0,114, 8, 2, 0,115, 8, 0, 0,108, 8, 32, 0,116, 8, 0, 0,117, 8, + 7, 0,118, 8, 7, 0,220, 1, 7, 0,119, 8, 7, 0,120, 8, 69, 1, 6, 0, 32, 0,107, 8, 4, 0,121, 8, 4, 0,122, 8, + 4, 0, 94, 0, 4, 0, 37, 0, 0, 0,108, 8, 70, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, + 71, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 72, 1, 10, 0, 32, 0,107, 8, 4, 0,123, 8, + 7, 0,130, 0, 4, 0, 19, 0, 2, 0,223, 5, 2, 0,124, 8, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,125, 8, 0, 0,108, 8, + 73, 1, 4, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,121, 8, 0, 0,108, 8, 74, 1, 10, 0, 32, 0,107, 8, 2, 0, 17, 0, + 2, 0,183, 3, 4, 0, 92, 0, 4, 0, 93, 0, 7, 0,238, 7, 7, 0,239, 7, 4, 0, 37, 0,152, 0,213, 7, 0, 0,108, 8, + 75, 1, 4, 0, 32, 0,107, 8, 4, 0, 27, 3, 4, 0,126, 8, 0, 0,108, 8, 76, 1, 5, 0, 32, 0,107, 8, 7, 0,130, 0, + 4, 0,127, 8, 4, 0, 27, 3, 4, 0, 28, 3, 77, 1, 6, 0, 32, 0,107, 8, 4, 0,128, 8, 4, 0,129, 8, 7, 0,130, 8, + 7, 0,131, 8, 0, 0,108, 8, 78, 1, 16, 0, 32, 0,107, 8, 32, 0, 67, 8, 4, 0, 17, 0, 7, 0,132, 8, 7, 0,133, 8, + 7, 0,134, 8, 7, 0,135, 8, 7, 0,136, 8, 7, 0,137, 8, 7, 0,138, 8, 7, 0,139, 8, 7, 0,140, 8, 2, 0, 19, 0, + 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 79, 1, 3, 0, 32, 0,107, 8, 4, 0, 19, 0, 4, 0,123, 5, 80, 1, 5, 0, + 32, 0,107, 8, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,141, 8, 0, 0,108, 8, 81, 1, 10, 0, 32, 0,107, 8, 0, 0,108, 8, + 2, 0,142, 8, 2, 0,143, 8, 0, 0,144, 8, 0, 0,145, 8, 7, 0,146, 8, 7, 0,147, 8, 7, 0,148, 8, 7, 0,149, 8, + 82, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, 2, 0, 19, 0, + 2, 0,123, 5, 83, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, 7, 0,151, 8, + 2, 0, 19, 0, 2, 0,123, 5, 84, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,150, 8, + 7, 0,151, 8, 2, 0, 19, 0, 2, 0,123, 5, 85, 1, 7, 0, 32, 0,107, 8, 0, 0,108, 8, 7, 0, 21, 1, 7, 0, 31, 1, + 2, 0, 19, 0, 2, 0, 14, 1, 4, 0, 37, 0, 86, 1, 5, 0, 32, 0,226, 2, 7, 0, 21, 1, 2, 0,230, 2, 0, 0,232, 2, + 0, 0,152, 8, 87, 1, 10, 0, 87, 1, 0, 0, 87, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,153, 8, 7, 0,222, 0, + 7, 0,223, 0, 2, 0, 21, 8, 2, 0,154, 8, 32, 0, 45, 0, 88, 1, 22, 0, 88, 1, 0, 0, 88, 1, 1, 0, 2, 0, 19, 0, + 2, 0, 14, 1, 2, 0,155, 8, 2, 0,156, 8, 36, 0, 80, 0,152, 0,213, 7, 32, 0,169, 0, 7, 0, 92, 0, 7, 0, 93, 0, + 7, 0,157, 8, 7, 0,158, 8, 7, 0,159, 8, 7, 0,160, 8, 7, 0,157, 2, 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, + 0, 0,163, 8, 0, 0,164, 8, 12, 0, 14, 3, 89, 1, 8, 0, 7, 0,228, 1, 7, 0,238, 7, 7, 0,239, 7, 9, 0, 2, 0, + 2, 0,165, 8, 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 90, 1, 18, 0, 90, 1, 0, 0, 90, 1, 1, 0, 90, 1,169, 8, + 0, 0, 20, 0, 89, 1,170, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,171, 8, 2, 0,172, 8, 2, 0,173, 8, 2, 0,174, 8, + 4, 0, 43, 0, 7, 0,175, 8, 7, 0,176, 8, 4, 0,177, 8, 4, 0,178, 8, 90, 1,179, 8, 91, 1,180, 8, 92, 1, 33, 0, + 92, 1, 0, 0, 92, 1, 1, 0, 92, 1,181, 8, 0, 0, 20, 0, 0, 0,182, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 66, 7, + 2, 0, 99, 7, 2, 0,183, 8, 2, 0,138, 0, 2, 0,172, 8, 2, 0, 56, 7, 12, 0,208, 7, 12, 0,184, 8, 27, 0, 1, 6, + 9, 0,185, 8, 7, 0,175, 8, 7, 0,176, 8, 7, 0,255, 1, 7, 0,186, 8, 2, 0,187, 8, 2, 0,188, 8, 7, 0,189, 8, + 7, 0,190, 8, 2, 0,191, 8, 2, 0,192, 8, 9, 0,193, 8, 24, 0,194, 8, 24, 0,195, 8, 24, 0,196, 8, 93, 1,155, 0, + 94, 1,197, 8, 91, 1, 8, 0, 91, 1, 0, 0, 91, 1, 1, 0, 92, 1,198, 8, 92, 1,199, 8, 90, 1,200, 8, 90, 1,179, 8, + 4, 0, 19, 0, 4, 0, 37, 0, 59, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,201, 8, 12, 0,202, 8, 89, 1,203, 8, + 12, 0,204, 8, 4, 0, 17, 0, 4, 0,205, 8, 4, 0,206, 8, 4, 0,207, 8, 12, 0,208, 8, 94, 1,209, 8, 90, 1,210, 8, + 90, 1,211, 8, 9, 0,212, 8, 9, 0,213, 8, 4, 0,214, 8, 9, 0,215, 8, 9, 0,216, 8, 9, 0,217, 8, 95, 1, 6, 0, + 4, 0,129, 0, 4, 0,131, 0, 4, 0, 56, 7, 0, 0,218, 8, 0, 0,219, 8, 2, 0, 37, 0, 96, 1, 16, 0, 2, 0, 12, 7, + 2, 0, 13, 7, 2, 0,220, 8, 2, 0, 5, 8, 2, 0,221, 8, 2, 0, 68, 0, 7, 0,156, 2, 7, 0,222, 8, 7, 0,223, 8, + 2, 0, 35, 1, 0, 0,224, 8, 0, 0,232, 4, 2, 0,225, 8, 2, 0, 37, 0, 4, 0,226, 8, 4, 0,227, 8, 97, 1, 9, 0, + 7, 0,228, 8, 7, 0,229, 8, 7, 0, 19, 8, 7, 0,113, 0, 7, 0,230, 8, 7, 0,190, 5, 2, 0,231, 8, 0, 0,232, 8, + 0, 0, 37, 0, 98, 1, 4, 0, 7, 0,233, 8, 7, 0,234, 8, 2, 0,231, 8, 2, 0, 37, 0, 99, 1, 3, 0, 7, 0,235, 8, + 7, 0,236, 8, 7, 0, 15, 0,100, 1, 7, 0, 0, 0,191, 1, 2, 0,118, 4, 2, 0,119, 4, 2, 0,120, 4, 2, 0, 69, 4, + 4, 0,131, 0, 4, 0,181, 3,101, 1, 7, 0, 7, 0,237, 8, 7, 0,238, 8, 7, 0,239, 8, 7, 0, 10, 2, 7, 0,240, 8, + 7, 0,241, 8, 7, 0,242, 8,102, 1, 4, 0, 2, 0,243, 8, 2, 0,244, 8, 2, 0,245, 8, 2, 0,246, 8,103, 1, 2, 0, + 7, 0, 5, 0, 7, 0, 6, 0,104, 1, 2, 0, 0, 0,171, 0, 0, 0,247, 8,105, 1, 1, 0, 0, 0, 20, 0,106, 1, 10, 0, + 0, 0,248, 8, 0, 0,249, 8, 0, 0,173, 5, 0, 0,250, 8, 2, 0,220, 8, 2, 0,251, 8, 7, 0,252, 8, 7, 0,253, 8, + 7, 0,254, 8, 7, 0,161, 8,107, 1, 2, 0, 9, 0,255, 8, 9, 0, 0, 9,108, 1, 11, 0, 0, 0,120, 4, 0, 0, 17, 0, + 0, 0,231, 8, 0, 0,113, 0, 0, 0, 1, 9, 0, 0,110, 0, 0, 0,184, 0, 7, 0, 2, 9, 7, 0, 3, 9, 7, 0, 4, 9, + 7, 0, 5, 9,109, 1, 8, 0, 7, 0,176, 7, 7, 0,130, 0, 7, 0,232, 4, 7, 0, 82, 2, 7, 0, 6, 9, 7, 0,209, 0, + 7, 0, 7, 9, 4, 0, 17, 0,110, 1, 4, 0, 2, 0, 8, 9, 2, 0, 9, 9, 2, 0, 10, 9, 2, 0, 37, 0,111, 1, 1, 0, + 0, 0, 20, 0,112, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 0, 11, 9,113, 1, 10, 0, 2, 0,122, 3, + 2, 0, 19, 0, 7, 0, 5, 4, 7, 0, 12, 9, 7, 0, 13, 9, 7, 0, 14, 9, 7, 0, 15, 9,112, 1, 16, 9,112, 1, 17, 9, +112, 1, 18, 9, 62, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, 24, 0, 19, 9, 24, 0, 20, 9,113, 1, 21, 9, 7, 0, 22, 9, + 7, 0, 23, 9, 7, 0, 24, 9, 7, 0, 25, 9,114, 1, 4, 0, 48, 0,150, 2, 7, 0, 26, 9, 7, 0, 94, 1, 7, 0, 37, 0, +176, 0, 17, 0, 27, 0, 31, 0,114, 1, 27, 9, 62, 0, 16, 9, 52, 0, 78, 1, 2, 0, 19, 0, 2, 0, 77, 5, 4, 0,110, 0, + 7, 0, 28, 9, 7, 0, 7, 2, 7, 0, 29, 9, 7, 0, 30, 9, 7, 0, 94, 1, 7, 0, 31, 9, 2, 0, 48, 1, 0, 0, 32, 9, + 0, 0,115, 3, 0, 0, 96, 0,115, 1, 10, 0, 4, 0, 17, 0, 4, 0,130, 0, 4, 0, 19, 0, 4, 0, 88, 3, 4, 0, 33, 9, + 4, 0, 34, 9, 4, 0, 35, 9, 0, 0, 96, 0, 0, 0, 20, 0, 9, 0, 2, 0, 89, 0, 6, 0,115, 1, 36, 9, 4, 0, 37, 9, + 4, 0, 38, 9, 4, 0, 39, 9, 4, 0, 37, 0, 9, 0, 40, 9,116, 1, 5, 0, 7, 0, 77, 2, 7, 0,190, 2, 7, 0,220, 1, + 2, 0, 41, 9, 2, 0, 37, 0,117, 1, 5, 0, 7, 0, 77, 2, 7, 0, 42, 9, 7, 0, 43, 9, 7, 0, 44, 9, 7, 0,190, 2, +118, 1, 7, 0, 4, 0, 45, 9, 4, 0, 46, 9, 4, 0, 47, 9, 7, 0, 48, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0, 51, 9, +119, 1, 8, 0,119, 1, 0, 0,119, 1, 1, 0, 32, 0, 45, 0, 4, 0,213, 2, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0,190, 2, + 7, 0,184, 7,120, 1, 26, 0, 32, 0, 52, 9,117, 1, 84, 3,117, 1, 53, 9,116, 1, 54, 9,117, 1,165, 7, 7, 0, 55, 9, + 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0,190, 2, 7, 0,167, 2, 7, 0, 59, 9, + 7, 0, 60, 9, 7, 0,110, 0, 7, 0, 61, 9, 4, 0, 45, 9, 4, 0, 62, 9, 4, 0, 37, 0, 4, 0, 82, 0, 4, 0, 63, 9, + 2, 0, 19, 0, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0,118, 3,121, 1,117, 0, 27, 0, 31, 0, 39, 0, 75, 0, 4, 0, 19, 0, + 2, 0, 17, 0, 2, 0,142, 8, 2, 0, 66, 9, 2, 0, 67, 9, 2, 0, 73, 8, 2, 0, 68, 9, 2, 0, 69, 9, 2, 0, 70, 9, + 2, 0, 71, 9, 2, 0, 72, 9, 2, 0, 73, 9, 2, 0, 74, 9, 2, 0, 75, 9, 2, 0, 76, 9, 2, 0, 77, 9, 2, 0, 78, 9, + 2, 0, 79, 9, 2, 0, 80, 9, 2, 0, 81, 9, 2, 0,211, 1, 2, 0,158, 7, 2, 0,134, 7, 2, 0, 82, 9, 2, 0, 83, 9, + 2, 0,116, 3, 2, 0,117, 3, 2, 0, 84, 9, 2, 0, 85, 9, 2, 0, 86, 9, 2, 0, 87, 9, 2, 0, 88, 9, 2, 0, 89, 9, + 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 2, 0, 93, 9, 2, 0, 94, 9, 7, 0, 95, 9, 7, 0, 96, 9, 7, 0, 97, 9, + 7, 0,140, 7, 7, 0, 93, 0, 7, 0,167, 2, 7, 0,146, 7, 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 4, 0,141, 7, + 4, 0,139, 7, 4, 0,101, 9, 7, 0,142, 7, 7, 0,143, 7, 7, 0,144, 7, 7, 0,102, 9, 7, 0,103, 9, 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, 40, 3, 7, 0,110, 0, 7, 0,110, 9, + 7, 0,111, 9, 7, 0,112, 9, 7, 0,113, 9, 7, 0,114, 9, 7, 0,115, 9, 7, 0,116, 9, 4, 0,117, 9, 4, 0,118, 9, + 7, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, 7, 0,122, 9, 7, 0,123, 9, 7, 0, 57, 0, 7, 0,124, 9, 7, 0,125, 9, + 7, 0,112, 3, 7, 0,110, 3, 7, 0,111, 3, 7, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 7, 0,129, 9, 7, 0,130, 9, + 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 7, 0,134, 9, 7, 0,135, 9, 7, 0,136, 9, 7, 0,137, 9, 7, 0,138, 9, + 4, 0,139, 9, 4, 0,140, 9, 7, 0, 47, 3, 7, 0,141, 9, 7, 0,142, 9, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, + 7, 0,146, 9, 7, 0,147, 9, 0, 0,148, 9, 65, 0, 73, 3, 65, 0,149, 9, 32, 0,150, 9, 32, 0,151, 9, 36, 0, 80, 0, +155, 0, 71, 3,155, 0,152, 9,142, 0, 39, 0,142, 0, 0, 0,142, 0, 1, 0,121, 1,153, 9,120, 1,163, 3,118, 1, 67, 8, +122, 1,154, 9, 9, 0,155, 9,123, 1,156, 9,123, 1,157, 9, 12, 0,158, 9, 12, 0,159, 9,156, 0, 72, 3, 32, 0,160, 9, + 32, 0,161, 9, 32, 0, 38, 0, 12, 0,162, 9, 12, 0,163, 9, 12, 0,164, 9, 7, 0,213, 0, 7, 0, 92, 4, 4, 0,118, 2, + 4, 0, 19, 0, 4, 0,141, 7, 4, 0,165, 9, 4, 0,166, 9, 4, 0,167, 9, 4, 0, 57, 0, 2, 0,220, 0, 2, 0,168, 9, + 2, 0,169, 9, 2, 0, 65, 3, 2, 0,170, 9, 2, 0,118, 3, 0, 0,171, 9, 2, 0,172, 9, 2, 0,173, 9, 2, 0,174, 9, + 9, 0,175, 9,131, 0,202, 3,129, 0, 34, 0,124, 1,176, 9, 7, 0,174, 3, 7, 0,177, 9, 7, 0,178, 9, 7, 0, 8, 4, + 7, 0,179, 9, 7, 0, 50, 3, 7, 0, 40, 3, 7, 0,180, 9, 7, 0, 9, 2, 7, 0,181, 9, 7, 0,182, 9, 7, 0,183, 9, + 7, 0,184, 9, 7, 0,185, 9, 7, 0,186, 9, 7, 0,175, 3, 7, 0,187, 9, 7, 0,188, 9, 7, 0,189, 9, 7, 0,176, 3, + 7, 0,172, 3, 7, 0,173, 3, 4, 0,190, 9, 4, 0, 94, 0, 4, 0,191, 9, 4, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9, + 2, 0,195, 9, 2, 0,196, 9, 2, 0,197, 9, 2, 0, 37, 0, 4, 0, 70, 0,130, 0, 8, 0,124, 1,198, 9, 7, 0,199, 9, + 7, 0,200, 9, 7, 0,165, 1, 7, 0,201, 9, 4, 0, 94, 0, 2, 0,202, 9, 2, 0,203, 9,125, 1, 4, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,204, 9,126, 1, 6, 0,126, 1, 0, 0,126, 1, 1, 0,125, 1,205, 9, 4, 0,206, 9, + 2, 0,207, 9, 2, 0, 19, 0,127, 1, 5, 0,127, 1, 0, 0,127, 1, 1, 0, 12, 0,208, 9, 4, 0,209, 9, 4, 0, 19, 0, +128, 1, 9, 0,128, 1, 0, 0,128, 1, 1, 0, 12, 0,129, 0,127, 1,210, 9, 4, 0, 19, 0, 2, 0,207, 9, 2, 0,211, 9, + 7, 0, 95, 0, 0, 0,212, 9,190, 0, 6, 0, 27, 0, 31, 0, 12, 0,134, 4, 4, 0, 19, 0, 2, 0,213, 9, 2, 0,214, 9, + 9, 0,215, 9,129, 1, 6, 0,129, 1, 0, 0,129, 1, 1, 0, 4, 0, 17, 0, 4, 0, 23, 0, 0, 0,216, 9, 0, 0,217, 9, +130, 1, 5, 0, 12, 0,218, 9, 4, 0,219, 9, 4, 0,220, 9, 4, 0, 19, 0, 4, 0, 37, 0,131, 1, 13, 0, 27, 0, 31, 0, +132, 1,221, 9,132, 1,222, 9, 12, 0,223, 9, 4, 0,224, 9, 2, 0,225, 9, 2, 0, 37, 0, 12, 0,226, 9, 12, 0,227, 9, +130, 1,228, 9, 12, 0,229, 9, 12, 0,230, 9, 12, 0,231, 9,132, 1, 30, 0,132, 1, 0, 0,132, 1, 1, 0, 9, 0,232, 9, + 4, 0,247, 6, 4, 0, 37, 0,200, 0,164, 5,200, 0,233, 9, 0, 0,234, 9, 2, 0,235, 9, 2, 0,236, 9, 2, 0, 12, 7, + 2, 0, 13, 7, 2, 0,237, 9, 2, 0,238, 9, 2, 0, 88, 3, 2, 0, 26, 6, 2, 0,239, 9, 2, 0,240, 9, 4, 0,161, 1, +133, 1,241, 9,134, 1,242, 9,135, 1,243, 9, 4, 0,244, 9, 4, 0,245, 9, 9, 0,246, 9, 12, 0,247, 9, 12, 0,227, 9, + 12, 0, 30, 7, 12, 0,248, 9, 12, 0,249, 9,136, 1, 12, 0,136, 1, 0, 0,136, 1, 1, 0, 0, 0,250, 9,137, 1,251, 9, + 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 37, 0, +138, 1, 6, 0,138, 1, 0, 0,138, 1, 1, 0, 12, 0, 1, 10, 0, 0, 2, 10, 4, 0, 3, 10, 4, 0, 4, 10,208, 0, 8, 0, +208, 0, 0, 0,208, 0, 1, 0, 0, 0,250, 9, 26, 0, 30, 0,139, 1, 6, 7, 9, 0, 5, 10,137, 1,251, 9,130, 1, 6, 10, +133, 1, 23, 0,133, 1, 0, 0,133, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0, 7, 10, + 2, 0, 8, 10, 2, 0, 9, 10, 2, 0, 10, 10, 0, 0, 11, 10, 0, 0, 37, 0, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, + 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 43, 0, 0, 0, 12, 10, 2, 0, 13, 10, 2, 0, 14, 10, 4, 0, 70, 0, 9, 0, 5, 10, +140, 1, 8, 0,140, 1, 0, 0,140, 1, 1, 0, 9, 0, 2, 0, 9, 0, 15, 10, 0, 0,131, 3, 2, 0, 17, 0, 2, 0, 19, 0, + 7, 0, 16, 10,141, 1, 5, 0, 7, 0, 17, 10, 4, 0, 18, 10, 4, 0, 19, 10, 4, 0, 14, 1, 4, 0, 19, 0,142, 1, 6, 0, + 7, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 4, 0, 17, 0, 4, 0, 19, 0,143, 1, 5, 0, 7, 0,238, 7, + 7, 0,239, 7, 7, 0,190, 2, 2, 0,224, 1, 2, 0,225, 1,144, 1, 5, 0,143, 1, 2, 0, 4, 0, 54, 0, 7, 0, 24, 10, + 7, 0,238, 7, 7, 0,239, 7,145, 1, 4, 0, 2, 0, 25, 10, 2, 0, 26, 10, 2, 0, 27, 10, 2, 0, 28, 10,146, 1, 2, 0, + 43, 0,254, 5, 26, 0, 61, 8,147, 1, 3, 0, 24, 0, 29, 10, 4, 0, 19, 0, 4, 0, 37, 0,148, 1, 6, 0, 7, 0,110, 0, + 7, 0,142, 2, 7, 0, 30, 10, 7, 0, 37, 0, 2, 0,219, 0, 2, 0, 31, 10,149, 1, 7, 0,149, 1, 0, 0,149, 1, 1, 0, + 27, 0, 1, 6, 0, 0, 32, 10, 4, 0, 33, 10, 4, 0, 94, 0, 0, 0,131, 3,150, 1, 6, 0, 12, 0,112, 8, 0, 0, 34, 10, + 7, 0, 61, 0, 7, 0, 16, 10, 4, 0, 17, 0, 4, 0, 19, 0,151, 1, 3, 0, 7, 0, 35, 10, 4, 0, 19, 0, 4, 0, 37, 0, +152, 1, 15, 0,152, 1, 0, 0,152, 1, 1, 0, 61, 1,100, 8,150, 1, 62, 0, 12, 0, 14, 3, 35, 0, 50, 0,151, 1, 36, 10, + 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0,255, 0, 4, 0, 33, 10, 0, 0, 32, 10, 4, 0, 37, 10, 7, 0, 38, 10, +153, 1, 2, 0, 0, 0, 39, 10, 0, 0, 40, 10,154, 1, 4, 0,154, 1, 0, 0,154, 1, 1, 0,152, 0,226, 2, 12, 0, 41, 10, +155, 1, 22, 0,155, 1, 0, 0,155, 1, 1, 0, 12, 0, 42, 10,152, 0,213, 7,154, 1, 43, 10, 12, 0, 44, 10, 12, 0, 14, 3, + 0, 0,131, 3, 7, 0, 16, 10, 7, 0, 45, 10, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0,157, 8, 7, 0,158, 8, 7, 0,157, 2, + 7, 0,161, 8, 7, 0,215, 7, 7, 0,162, 8, 2, 0, 46, 10, 2, 0, 47, 10, 2, 0, 19, 0, 2, 0, 17, 0,156, 1, 6, 0, +156, 1, 0, 0,156, 1, 1, 0, 12, 0, 42, 10, 4, 0, 19, 0, 4, 0, 81, 2, 0, 0,131, 3,157, 1, 10, 0,157, 1, 0, 0, +157, 1, 1, 0, 27, 0, 1, 6, 0, 0, 48, 10, 4, 0, 49, 10, 4, 0, 50, 10, 0, 0, 32, 10, 4, 0, 33, 10, 2, 0, 19, 0, + 2, 0, 51, 10,158, 1, 6, 0,158, 1, 0, 0,158, 1, 1, 0, 12, 0, 52, 10, 0, 0,131, 3, 4, 0, 19, 0, 4, 0, 53, 10, +159, 1, 5, 0,159, 1, 0, 0,159, 1, 1, 0, 0, 0, 32, 10, 4, 0, 33, 10, 7, 0,134, 2, 39, 0, 9, 0,152, 0, 9, 3, +152, 0, 54, 10,154, 1, 43, 10, 12, 0, 55, 10,155, 1, 56, 10, 12, 0, 57, 10, 12, 0, 58, 10, 4, 0, 19, 0, 4, 0,220, 0, +160, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}; + diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h index f5769610f50..deee3e3c8b4 100644 --- a/source/blender/editors/include/BIF_glutil.h +++ b/source/blender/editors/include/BIF_glutil.h @@ -132,10 +132,11 @@ void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, int row_w, int * is expected to be in RGBA byte or float format, and the * modelview and projection matrices are assumed to define a * 1-to-1 mapping to screen space. + * @param gamma_correct Optionally gamma correct float sources to sRGB for display */ /* only for float rects, converts to 32 bits and draws */ -void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf); +void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf, int gamma_correct); void glaDrawPixelsTex (float x, float y, int img_w, int img_h, int format, void *rect); diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c index e79dbed0661..28b9c6b1833 100644 --- a/source/blender/editors/preview/previewrender.c +++ b/source/blender/editors/preview/previewrender.c @@ -293,6 +293,7 @@ static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp sce->world->range= scene->world->range; } + sce->r.color_mgt_flag = scene->r.color_mgt_flag; sce->r.cfra= scene->r.cfra; if(id_type==ID_MA) { @@ -353,6 +354,9 @@ static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp sce->lay= 1<r.color_mgt_flag &= ~R_COLOR_MANAGEMENT; + for(base= sce->base.first; base; base= base->next) { if(base->object->id.name[2]=='t') { Material *mat= give_current_material(base->object, base->object->actcol); @@ -404,21 +408,27 @@ static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp return NULL; } - /* new UI convention: draw is in pixel space already. */ /* uses ROUNDBOX button in block to get the rect */ void ED_preview_draw(const bContext *C, void *idp, rcti *rect) { if(idp) { ScrArea *sa= CTX_wm_area(C); + Scene *sce = CTX_data_scene(C); + ID *id = (ID *)idp; SpaceButs *sbuts= sa->spacedata.first; RenderResult rres; int newx= rect->xmax-rect->xmin, newy= rect->ymax-rect->ymin; int ok= 0; char name[32]; + int gamma_correct=0; + + if (id && GS(id->name) != ID_TE) { + /* exception: don't color manage texture previews - show the raw values */ + if (sce) gamma_correct = sce->r.color_mgt_flag & R_COLOR_MANAGEMENT; + } sprintf(name, "Preview %p", sa); - BLI_lock_malloc_thread(); RE_GetResultImage(RE_GetRender(name), &rres); if(rres.rectf) { @@ -428,11 +438,10 @@ void ED_preview_draw(const bContext *C, void *idp, rcti *rect) rect->xmax= rect->xmin + rres.rectx; rect->ymax= rect->ymin + rres.recty; - glaDrawPixelsSafe(rect->xmin, rect->ymin, rres.rectx, rres.recty, rres.rectx, GL_RGBA, GL_FLOAT, rres.rectf); + glaDrawPixelsSafe_to32(rect->xmin, rect->ymin, rres.rectx, rres.recty, rres.rectx, rres.rectf, gamma_correct); ok= 1; } } - BLI_unlock_malloc_thread(); /* check for spacetype... */ if(sbuts->spacetype==SPACE_BUTS && sbuts->preview) { @@ -468,7 +477,7 @@ void view3d_previewrender_progress(RenderResult *rr, volatile rcti *renrect) glDrawBuffer(GL_FRONT); // glaDefine2DArea(&sa->winrct); - glaDrawPixelsSafe_to32(ofsx, ofsy, rr->rectx, rr->recty, rr->rectx, rl->rectf); + glaDrawPixelsSafe_to32(ofsx, ofsy, rr->rectx, rr->recty, rr->rectx, rl->rectf, 0); bglFlush(); glDrawBuffer(GL_BACK); diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c index a23487effa1..5312ca26906 100644 --- a/source/blender/editors/screen/glutil.c +++ b/source/blender/editors/screen/glutil.c @@ -35,6 +35,7 @@ #include "DNA_listBase.h" #include "BKE_utildefines.h" +#include "BKE_colortools.h" #include "BLI_arithb.h" #include "BLI_threads.h" @@ -482,27 +483,20 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void * glaDrawPixelsTexScaled(x, y, img_w, img_h, format, rect, 1.0f, 1.0f); } -void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf) +void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf, int gamma_correct) { - float *rf; - int x, y; - char *rect32, *rc; + unsigned char *rect32; /* copy imgw-imgh to a temporal 32 bits rect */ if(img_w<1 || img_h<1) return; - rc= rect32= MEM_mallocN(img_w*img_h*sizeof(int), "temp 32 bits"); + rect32= MEM_mallocN(img_w*img_h*sizeof(int), "temp 32 bits"); - for(y=0; yrectx*ymin + xmin); rectc= (char *)(ibuf->rect + ibuf->x*rymin + rxmin); - for(y1= 0; y1= (char *)(ibuf->rect)) { - for(x1= 0; x1scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) { + for(y1= 0; y1= (char *)(ibuf->rect)) { + for(x1= 0; x1rectx; + rectc += 4*ibuf->x; + } + } else { + for(y1= 0; y1= (char *)(ibuf->rect)) { + for(x1= 0; x1rectx; + rectc += 4*ibuf->x; } - rectf += 4*rr->rectx; - rectc += 4*ibuf->x; } /* make jobs timer to send notifier */ diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index e5d74e6dddd..da1f050cfd3 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -106,7 +106,7 @@ static int image_curves_active(SpaceImage *sima) return 0; } -static void image_verify_buffer_float(SpaceImage *sima, ImBuf *ibuf) +static void image_verify_buffer_float(SpaceImage *sima, Image *ima, ImBuf *ibuf, int color_manage) { /* detect if we need to redo the curve map. ibuf->rect is zero for compositor and render results after change @@ -121,6 +121,12 @@ static void image_verify_buffer_float(SpaceImage *sima, ImBuf *ibuf) curvemapping_do_ibuf(sima->cumap, ibuf); } else { + if (color_manage) { + if (ima && ima->source == IMA_SRC_VIEWER) + ibuf->profile = IB_PROFILE_SRGB; + } else { + ibuf->profile = IB_PROFILE_NONE; + } IMB_rect_from_float(ibuf); } } @@ -371,9 +377,10 @@ static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rec MEM_freeN(rectf); } -static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy) +static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, Image *ima, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy) { int x, y; + int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT; /* set zoom */ glPixelZoom(zoomx, zoomy); @@ -398,7 +405,7 @@ static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf } #ifdef WITH_LCMS else if(sima->flag & SI_COLOR_CORRECTION) { - image_verify_buffer_float(sima, ibuf); + image_verify_buffer_float(sima, ima, ibuf, color_manage); sima_draw_colorcorrected_pixels(x, y, ibuf); @@ -414,7 +421,7 @@ static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf /* we don't draw floats buffers directly but * convert them, and optionally apply curves */ - image_verify_buffer_float(sima, ibuf); + image_verify_buffer_float(sima, ima, ibuf, color_manage); if(ibuf->rect) glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); @@ -451,10 +458,11 @@ static unsigned int *get_part_from_ibuf(ImBuf *ibuf, short startx, short starty, return rectmain; } -static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Image *ima, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy) +static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene, Image *ima, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy) { unsigned int *rect; int dx, dy, sx, sy, x, y; + int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT; /* verify valid values, just leave this a while */ if(ima->xrep<1) return; @@ -466,7 +474,7 @@ static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Image *ima, I sima->curtile = ima->xrep*ima->yrep - 1; /* create char buffer from float if needed */ - image_verify_buffer_float(sima, ibuf); + image_verify_buffer_float(sima, ima, ibuf, color_manage); /* retrieve part of image buffer */ dx= ibuf->x/ima->xrep; @@ -499,9 +507,9 @@ static void draw_image_buffer_repeated(SpaceImage *sima, ARegion *ar, Scene *sce for(x=floor(ar->v2d.cur.xmin); xv2d.cur.xmax; x += 1.0f) { for(y=floor(ar->v2d.cur.ymin); yv2d.cur.ymax; y += 1.0f) { if(ima && (ima->tpageflag & IMA_TILES)) - draw_image_buffer_tiled(sima, ar, ima, ibuf, x, y, zoomx, zoomy); + draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, x, y, zoomx, zoomy); else - draw_image_buffer(sima, ar, scene, ibuf, x, y, zoomx, zoomy); + draw_image_buffer(sima, ar, scene, ima, ibuf, x, y, zoomx, zoomy); /* only draw until running out of time */ if((PIL_check_seconds_timer() - time_current) > 0.25) @@ -673,9 +681,9 @@ void draw_image_main(SpaceImage *sima, ARegion *ar, Scene *scene) else if(sima->flag & SI_DRAW_TILE) draw_image_buffer_repeated(sima, ar, scene, ima, ibuf, zoomx, zoomy); else if(ima && (ima->tpageflag & IMA_TILES)) - draw_image_buffer_tiled(sima, ar, ima, ibuf, 0.0f, 0.0, zoomx, zoomy); + draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, 0.0f, 0.0, zoomx, zoomy); else - draw_image_buffer(sima, ar, scene, ibuf, 0.0f, 0.0f, zoomx, zoomy); + draw_image_buffer(sima, ar, scene, ima, ibuf, 0.0f, 0.0f, zoomx, zoomy); /* grease pencil */ draw_image_grease_pencil(sima, ibuf); diff --git a/source/blender/editors/space_image/image_render.c b/source/blender/editors/space_image/image_render.c index 381e12267c6..617749937cb 100644 --- a/source/blender/editors/space_image/image_render.c +++ b/source/blender/editors/space_image/image_render.c @@ -119,7 +119,7 @@ void imagewindow_progress(SpaceImage *sima, RenderResult *rr, volatile rcti *ren if(rect32) glaDrawPixelsSafe(x1, y1, xmax, ymax, rr->rectx, GL_RGBA, GL_UNSIGNED_BYTE, rect32); else - glaDrawPixelsSafe_to32(x1, y1, xmax, ymax, rr->rectx, rectf); + glaDrawPixelsSafe_to32(x1, y1, xmax, ymax, rr->rectx, rectf, 0); glPixelZoom(1.0, 1.0); diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h index 79da0cb1c41..91a7b136fa5 100644 --- a/source/blender/imbuf/IMB_imbuf_types.h +++ b/source/blender/imbuf/IMB_imbuf_types.h @@ -98,9 +98,13 @@ typedef struct ImBuf { unsigned int encodedsize; /**< Size of data written to encodedbuffer */ unsigned int encodedbuffersize; /**< Size of encodedbuffer */ - float *rect_float; /**< floating point Rect equivalent */ + float *rect_float; /**< floating point Rect equivalent + Linear RGB color space - may need gamma correction to + sRGB when generating 8bit representations */ int channels; /**< amount of channels in rect_float (0 = 4 channel default) */ float dither; /**< random dither value, for conversion from float -> byte rect */ + short profile; /** color space/profile preset that the byte rect buffer represents */ + char profile_filename[256]; /** to be implemented properly, specific filename for custom profiles */ struct MEM_CacheLimiterHandle_s * c_handle; /**< handle for cache limiter */ struct ImgInfo * img_info; @@ -213,6 +217,18 @@ typedef enum { #define AN_tanx (Anim | TANX) /**@}*/ +/** + * \name Imbuf preset profile tags + * \brief Some predefined color space profiles that 8 bit imbufs can represent + */ +/**@{*/ +#define IB_PROFILE_NONE 0 +#define IB_PROFILE_LINEAR_RGB 1 +#define IB_PROFILE_SRGB 2 +#define IB_PROFILE_CUSTOM 3 +/**@}*/ + + /** \name Imbuf File Type Tests * \brief These macros test if an ImBuf struct is the corresponding file type. */ diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c index 8043e594454..6e1a176a5d2 100644 --- a/source/blender/imbuf/intern/divers.c +++ b/source/blender/imbuf/intern/divers.c @@ -39,6 +39,7 @@ #include "IMB_allocimbuf.h" #include "IMB_divers.h" #include "BKE_utildefines.h" +#include "BKE_colortools.h" void imb_checkncols(struct ImBuf *ibuf) { @@ -176,9 +177,11 @@ void IMB_gamwarp(struct ImBuf *ibuf, double gamma) void IMB_rect_from_float(struct ImBuf *ibuf) { /* quick method to convert floatbuf to byte */ - float *tof = ibuf->rect_float; + float *tof = (float *)ibuf->rect_float; float dither= ibuf->dither; + float srgb[3]; int i, channels= ibuf->channels; + short profile= ibuf->profile; unsigned char *to = (unsigned char *) ibuf->rect; if(tof==NULL) return; @@ -187,7 +190,24 @@ void IMB_rect_from_float(struct ImBuf *ibuf) to = (unsigned char *) ibuf->rect; } - if(dither==0.0f || channels!=4) { + if (profile == IB_PROFILE_SRGB && (channels == 3 || channels == 4)) { + if(channels == 3) { + for (i = ibuf->x * ibuf->y; i > 0; i--, to+=4, tof+=3) { + srgb[0]= linearrgb_to_srgb(tof[0]); + srgb[1]= linearrgb_to_srgb(tof[1]); + srgb[2]= linearrgb_to_srgb(tof[2]); + + to[0] = FTOCHAR(srgb[0]); + to[1] = FTOCHAR(srgb[1]); + to[2] = FTOCHAR(srgb[2]); + to[3] = 255; + } + } + else if (channels == 4) { + floatbuf_to_srgb_byte(tof, to, 0, ibuf->x, 0, ibuf->y, ibuf->x); + } + } + else if(ELEM(profile, IB_PROFILE_NONE, IB_PROFILE_LINEAR_RGB) && (dither==0.0f || channels!=4)) { if(channels==1) { for (i = ibuf->x * ibuf->y; i > 0; i--, to+=4, tof++) to[1]= to[2]= to[3]= to[0] = FTOCHAR(tof[0]); @@ -242,14 +262,28 @@ void IMB_float_from_rect(struct ImBuf *ibuf) tof = ibuf->rect_float; } - for (i = ibuf->x * ibuf->y; i > 0; i--) - { - tof[0] = ((float)to[0])*(1.0f/255.0f); - tof[1] = ((float)to[1])*(1.0f/255.0f); - tof[2] = ((float)to[2])*(1.0f/255.0f); - tof[3] = ((float)to[3])*(1.0f/255.0f); - to += 4; - tof += 4; + if (ibuf->profile == IB_PROFILE_SRGB) { + /* convert from srgb to linear rgb */ + + for (i = ibuf->x * ibuf->y; i > 0; i--) + { + tof[0] = srgb_to_linearrgb(((float)to[0])*(1.0f/255.0f)); + tof[1] = srgb_to_linearrgb(((float)to[1])*(1.0f/255.0f)); + tof[2] = srgb_to_linearrgb(((float)to[2])*(1.0f/255.0f)); + tof[3] = ((float)to[3])*(1.0f/255.0f); + to += 4; + tof += 4; + } + } else { + for (i = ibuf->x * ibuf->y; i > 0; i--) + { + tof[0] = ((float)to[0])*(1.0f/255.0f); + tof[1] = ((float)to[1])*(1.0f/255.0f); + tof[2] = ((float)to[2])*(1.0f/255.0f); + tof[3] = ((float)to[3])*(1.0f/255.0f); + to += 4; + tof += 4; + } } } diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 7a6cbced45e..b21b127554f 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -274,8 +274,12 @@ typedef struct RenderData { * Value used to define filter size for all filter options */ float gauss; + + /* color management settings - color profiles, gamma correction, etc */ + int color_mgt_flag; + /** post-production settings. Depricated, but here for upwards compat (initialized to 1) */ - float postmul, postgamma, posthue, postsat; + float postgamma, posthue, postsat; /* Dither noise intensity */ float dither_intensity; @@ -722,6 +726,9 @@ typedef struct Scene { #define R_PLANES32 32 #define R_PLANESBW 8 +/* color_mgt_flag */ +#define R_COLOR_MANAGEMENT 1 + /* imtype */ #define R_TARGA 0 #define R_IRIS 1 diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index ba6830f309b..ef9d958a9c0 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1113,6 +1113,11 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Sequencer", "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + prop= RNA_def_property(srna, "color_management", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "color_mgt_flag", R_COLOR_MANAGEMENT); + RNA_def_property_ui_text(prop, "Color Management", "Use color profiles and gamma corrected imaging pipeline"); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_MATERIAL|ND_SHADING, NULL); + prop= RNA_def_property(srna, "file_extensions", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXTENSION); RNA_def_property_ui_text(prop, "File Extensions", "Add the file format extensions to the rendered file name (eg: filename + .jpg)"); diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c index 396df4ff402..5f444357776 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c @@ -65,9 +65,28 @@ static CompBuf *node_composit_get_image(RenderData *rd, Image *ima, ImageUser *i if(ibuf==NULL) return NULL; - if(ibuf->rect_float==NULL) - IMB_float_from_rect(ibuf); + if (rd->color_mgt_flag & R_COLOR_MANAGEMENT) { + if (ibuf->profile == IB_PROFILE_NONE) { + if (ibuf->rect_float != NULL) { + imb_freerectfloatImBuf(ibuf); + } + ibuf->profile = IB_PROFILE_SRGB; + IMB_float_from_rect(ibuf); + } + } else { + if (ibuf->profile == IB_PROFILE_SRGB) { + if (ibuf->rect_float != NULL) { + imb_freerectfloatImBuf(ibuf); + } + ibuf->profile = IB_PROFILE_NONE; + IMB_float_from_rect(ibuf); + } + } + if (ibuf->rect_float == NULL) { + IMB_float_from_rect(ibuf); + } + type= ibuf->channels; if(rd->scemode & R_COMP_CROP) { diff --git a/source/blender/render/intern/include/shading.h b/source/blender/render/intern/include/shading.h index 54311d2515a..d195f32d5ef 100644 --- a/source/blender/render/intern/include/shading.h +++ b/source/blender/render/intern/include/shading.h @@ -66,6 +66,7 @@ void shade_input_set_strand(struct ShadeInput *shi, struct StrandRen *strand, st void shade_input_set_strand_texco(struct ShadeInput *shi, struct StrandRen *strand, struct StrandVert *svert, struct StrandPoint *spoint); void shade_input_do_shade(struct ShadeInput *shi, struct ShadeResult *shr); +void shade_input_init_material(struct ShadeInput *shi); void shade_input_initialize(struct ShadeInput *shi, struct RenderPart *pa, struct RenderLayer *rl, int sample); void shade_sample_initialize(struct ShadeSample *ssamp, struct RenderPart *pa, struct RenderLayer *rl); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 65942a14be9..da77d578efc 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4701,6 +4701,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view) extern int slurph_opt; /* key.c */ Scene *sce; float mat[4][4]; + float amb[3]; unsigned int lay; re->scene= scene; @@ -4747,7 +4748,9 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view) /* still bad... doing all */ init_render_textures(re); - init_render_materials(re->r.mode, &re->wrld.ambr); + if (re->r.color_mgt_flag & R_COLOR_MANAGEMENT) color_manage_linearize(amb, &re->wrld.ambr); + else VECCOPY(amb, &re->wrld.ambr); + init_render_materials(re->r.mode, amb); set_node_shader_lamp_loop(shade_material_loop); /* MAKE RENDER DATA */ @@ -5358,6 +5361,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce) void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob) { float mat[4][4]; + float amb[3]; unsigned int lay; int onlyselected, nolamps; @@ -5419,9 +5423,13 @@ void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob) /* still bad... doing all */ init_render_textures(re); - init_render_materials(re->r.mode, &re->wrld.ambr); + + if (re->r.color_mgt_flag & R_COLOR_MANAGEMENT) color_manage_linearize(amb, &re->wrld.ambr); + else VECCOPY(amb, &re->wrld.ambr); + init_render_materials(re->r.mode, amb); + set_node_shader_lamp_loop(shade_material_loop); - + /* MAKE RENDER DATA */ nolamps= !ELEM3(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW); onlyselected= ELEM3(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 3ef50af53c2..bdf327d6638 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2543,13 +2543,16 @@ static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh) ImBuf *ibuf= IMB_allocImBuf(rres.rectx, rres.recty, scene->r.planes, 0, 0); int ok; - /* if not exists, BKE_write_ibuf makes one */ + /* if not exists, BKE_write_ibuf makes one */ ibuf->rect= (unsigned int *)rres.rect32; ibuf->rect_float= rres.rectf; ibuf->zbuf_float= rres.rectz; /* float factor for random dither, imbuf takes care of it */ ibuf->dither= scene->r.dither_intensity; + /* gamma correct to sRGB color space */ + if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) + ibuf->profile = IB_PROFILE_SRGB; ok= BKE_write_ibuf(scene, ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality); diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c index af6093ab36c..75a2ab257f4 100644 --- a/source/blender/render/intern/source/pixelshading.c +++ b/source/blender/render/intern/source/pixelshading.c @@ -43,6 +43,7 @@ #include "DNA_texture_types.h" #include "DNA_lamp_types.h" +#include "BKE_colortools.h" #include "BKE_image.h" #include "BKE_global.h" #include "BKE_material.h" @@ -58,6 +59,7 @@ #include "rendercore.h" #include "shadbuf.h" #include "pixelshading.h" +#include "shading.h" #include "sunsky.h" /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @@ -536,9 +538,15 @@ void shadeSkyView(float *colf, float *rco, float *view, float *dxyview, short th blend= fabs(0.5+ view[1]); } - hor[0]= R.wrld.horr; hor[1]= R.wrld.horg; hor[2]= R.wrld.horb; - zen[0]= R.wrld.zenr; zen[1]= R.wrld.zeng; zen[2]= R.wrld.zenb; - + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(hor, &R.wrld.horr); + color_manage_linearize(zen, &R.wrld.zenr); + } + else { + VECCOPY(hor, &R.wrld.horr); + VECCOPY(zen, &R.wrld.zenr); + } + /* Careful: SKYTEX and SKYBLEND are NOT mutually exclusive! If */ /* SKYBLEND is active, the texture and color blend are added. */ if(R.wrld.skytype & WO_SKYTEX) { @@ -625,9 +633,11 @@ void shadeSkyPixel(float *collector, float fx, float fy, short thread) } else if((R.wrld.skytype & (WO_SKYBLEND+WO_SKYTEX))==0) { /* 2. solid color */ - collector[0] = R.wrld.horr; - collector[1] = R.wrld.horg; - collector[2] = R.wrld.horb; + if(R.r.color_mgt_flag & R_COLOR_MANAGEMENT) + color_manage_linearize(collector, &R.wrld.horr); + else + VECCOPY(collector, &R.wrld.horr); + collector[3] = 0.0f; } else { diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 33b58cf9751..df74e88e87e 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -225,8 +225,7 @@ static void shade_ray(Isect *is, ShadeInput *shi, ShadeResult *shr) shi->obr= obi->obr; shi->vlr= vlr; shi->mat= vlr->mat; - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); // note, keep this synced with render_types.h - shi->har= shi->mat->har; + shade_input_init_material(shi); // Osa structs we leave unchanged now SWAP(int, osatex, shi->osatex); diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 165cb88de71..3a3d6f57830 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -1515,9 +1515,7 @@ static void shade_sample_sss(ShadeSample *ssamp, Material *mat, ObjectInstanceRe shi->mat= mat; /* init material vars */ - // note, keep this synced with render_types.h - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); - shi->har= shi->mat->har; + shade_input_init_material(shi); /* render */ shade_input_set_shade_texco(shi); @@ -1950,10 +1948,7 @@ void RE_shade_external(Render *re, ShadeInput *shi, ShadeResult *shr) if(shi->mat->nodetree && shi->mat->use_nodes) ntreeShaderExecTree(shi->mat->nodetree, shi, shr); else { - /* copy all relevant material vars, note, keep this synced with render_types.h */ - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); - shi->har= shi->mat->har; - + shade_input_init_material(shi); shade_material_loop(shi, shr); } } @@ -2104,9 +2099,7 @@ static void bake_shade(void *handle, Object *ob, ShadeInput *shi, int quad, int ShadeResult shr; VlakRen *vlr= shi->vlr; - /* init material vars */ - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); // note, keep this synced with render_types.h - shi->har= shi->mat->har; + shade_input_init_material(shi); if(bs->type==RE_BAKE_AO) { ambient_occlusion(shi); diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c index 1cd8ec110f9..931595eae60 100644 --- a/source/blender/render/intern/source/shadeinput.c +++ b/source/blender/render/intern/source/shadeinput.c @@ -39,6 +39,7 @@ #include "DNA_meshdata_types.h" #include "DNA_material_types.h" +#include "BKE_colortools.h" #include "BKE_utildefines.h" #include "BKE_node.h" @@ -84,11 +85,45 @@ extern struct Render R; */ +/* initialise material variables in shadeinput, + * doing inverse gamma correction where applicable */ +void shade_input_init_material(ShadeInput *shi) +{ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(&shi->r, &shi->mat->r); + color_manage_linearize(&shi->specr, &shi->mat->specr); + color_manage_linearize(&shi->mirr, &shi->mat->mirr); + + /* material ambr / ambg / ambb is overwritten from world + color_manage_linearize(shi->ambr, shi->mat->ambr); + */ + + /* note, keep this synced with render_types.h */ + memcpy(&shi->amb, &shi->mat->amb, 11*sizeof(float)); + shi->har= shi->mat->har; + } else { + /* note, keep this synced with render_types.h */ + memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); + shi->har= shi->mat->har; + } + +} + +static void shadeinput_colors_linearize(ShadeInput *shi) +{ + color_manage_linearize(&shi->r, &shi->r); + color_manage_linearize(&shi->specr, &shi->specr); + color_manage_linearize(&shi->mirr, &shi->mirr); +} /* also used as callback for nodes */ /* delivers a fully filled in ShadeResult, for all passes */ void shade_material_loop(ShadeInput *shi, ShadeResult *shr) { + /* because node materials don't have access to rendering context, + * inverse gamma correction must happen here. evil. */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT && shi->nodes == 1) + shadeinput_colors_linearize(shi); shade_lamp_loop(shi, shr); /* clears shr */ @@ -96,9 +131,7 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr) ShadeResult shr_t; float fac= shi->translucency; - /* gotta copy it again */ - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); - shi->har= shi->mat->har; + shade_input_init_material(shi); VECCOPY(shi->vn, shi->vno); VECMUL(shi->vn, -1.0f); @@ -148,8 +181,7 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr) } else { /* copy all relevant material vars, note, keep this synced with render_types.h */ - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); - shi->har= shi->mat->har; + shade_input_init_material(shi); shade_material_loop(shi, shr); } @@ -571,6 +603,13 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert /* not supported */ } } + + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + if(mode & (MA_VERTEXCOL|MA_VERTEXCOLP|MA_FACETEXTURE)) { + color_manage_linearize(shi->vcol, shi->vcol); + } + } + } /* from scanline pixel coordinates to 3d coordinates, requires set_triangle */ @@ -1240,6 +1279,12 @@ void shade_input_set_shade_texco(ShadeInput *shi) } /* else { Note! For raytracing winco is not set, important because thus means all shader input's need to have their variables set to zero else in-initialized values are used */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + if(mode & (MA_VERTEXCOL|MA_VERTEXCOLP|MA_FACETEXTURE)) { + color_manage_linearize(shi->vcol, shi->vcol); + } + } + } /* ****************** ShadeSample ************************************** */ diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c index 7bb2aef2e6e..bd022e768f8 100644 --- a/source/blender/render/intern/source/sss.c +++ b/source/blender/render/intern/source/sss.c @@ -55,6 +55,7 @@ #include "DNA_material_types.h" +#include "BKE_colortools.h" #include "BKE_global.h" #include "BKE_main.h" #include "BKE_material.h" @@ -916,7 +917,7 @@ static void sss_create_tree_mat(Render *re, Material *mat) if(!re->test_break(re->tbh)) { SSSData *sss= MEM_callocN(sizeof(*sss), "SSSData"); float ior= mat->sss_ior, cfac= mat->sss_colfac; - float *col= mat->sss_col, *radius= mat->sss_radius; + float col[3], *radius= mat->sss_radius; float fw= mat->sss_front, bw= mat->sss_back; float error = mat->sss_error; @@ -924,6 +925,9 @@ static void sss_create_tree_mat(Render *re, Material *mat) if((re->r.scemode & R_PREVIEWBUTS) && error < 0.5f) error= 0.5f; + if (re->r.color_mgt_flag & R_COLOR_MANAGEMENT) color_manage_linearize(col, mat->sss_col); + else VECCOPY(col, mat->sss_col); + sss->ss[0]= scatter_settings_new(col[0], radius[0], ior, cfac, fw, bw); sss->ss[1]= scatter_settings_new(col[1], radius[1], ior, cfac, fw, bw); sss->ss[2]= scatter_settings_new(col[2], radius[2], ior, cfac, fw, bw); diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index 3c8c1640b75..a47fef840ca 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -281,9 +281,7 @@ void strand_shade_point(Render *re, ShadeSample *ssamp, StrandSegment *sseg, Str shade_input_set_strand_texco(shi, sseg->strand, sseg->v[1], spoint); /* init material vars */ - // note, keep this synced with render_types.h - memcpy(&shi->r, &shi->mat->r, 23*sizeof(float)); - shi->har= shi->mat->har; + shade_input_init_material(shi); /* shade */ shade_samples_do_AO(ssamp); diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index d9fc075c1c4..e11bb0004b2 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -48,6 +48,7 @@ #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" +#include "BKE_colortools.h" #include "BKE_image.h" #include "BKE_node.h" #include "BKE_plugin_types.h" @@ -1808,6 +1809,11 @@ void do_material_tex(ShadeInput *shi) } else texres.tin= texres.ta; + /* inverse gamma correction */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(tcol, tcol); + } + if(mtex->mapto & MAP_COL) { texture_rgb_blend(&shi->r, tcol, &shi->r, texres.tin, colfac, mtex->blendtype); } @@ -2127,6 +2133,11 @@ void do_halo_tex(HaloRen *har, float xn, float yn, float *colf) } else texres.tin= texres.ta; + /* inverse gamma correction */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(&texres.tr, &texres.tr); + } + fact= texres.tin*mtex->colfac; facm= 1.0-fact; @@ -2314,6 +2325,11 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f tcol[0]= texres.tr; tcol[1]= texres.tg; tcol[2]= texres.tb; + /* inverse gamma correction */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(tcol, tcol); + } + if(mtex->mapto & WOMAP_HORIZ) { texture_rgb_blend(hor, tcol, hor, texres.tin, mtex->colfac, mtex->blendtype); } @@ -2496,6 +2512,11 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef } else texres.tin= texres.ta; + /* inverse gamma correction */ + if (R.r.color_mgt_flag & R_COLOR_MANAGEMENT) { + color_manage_linearize(&texres.tr, &texres.tr); + } + /* lamp colors were premultiplied with this */ col[0]= texres.tr*la->energy; col[1]= texres.tg*la->energy; From a705f6424567873b64f6309311106ec1e918b4e0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Jul 2009 12:26:40 +0000 Subject: [PATCH 234/512] python access to operators now hides the _OT_ syntax, eg. SOME_OT_operator -> some.operator this works for the calling operators from python and using the RNA api. bpy.ops.CONSOLE_exec() is now bpy.ops.console.exec() eg. split.itemO("PARTICLE_OT_editable_set", text="Free Edit") becomes... split.itemO("particle.editable_set", text="Free Edit") For now any operator thats called checks if its missing _OT_ and assumes its python syntax and converts it before doing the lookup. bpy.ops is a python class in release/ui/bpy_ops.py which does the fake submodules and conversion, the C operator api is at bpy.__ops__ personally Id still rather rename C id-names not to contain the _OT_ text which would avoid the conversion, its called a lot since the UI has to convert the operators. --- release/ui/bpy_ops.py | 107 ++++++++++++++++ release/ui/buttons_data_lattice.py | 2 +- release/ui/buttons_data_mesh.py | 42 +++---- release/ui/buttons_data_modifier.py | 6 +- release/ui/buttons_material.py | 6 +- release/ui/buttons_object_constraint.py | 8 +- release/ui/buttons_objects.py | 4 +- release/ui/buttons_particle.py | 32 ++--- release/ui/buttons_physics_cloth.py | 18 +-- release/ui/buttons_physics_fluid.py | 6 +- release/ui/buttons_physics_softbody.py | 4 +- release/ui/buttons_scene.py | 8 +- release/ui/buttons_texture.py | 6 +- release/ui/buttons_world.py | 2 +- release/ui/space_console.py | 11 +- release/ui/space_filebrowser.py | 14 +-- release/ui/space_image.py | 88 ++++++------- release/ui/space_info.py | 26 ++-- release/ui/space_outliner.py | 12 +- release/ui/space_sequencer.py | 118 +++++++++--------- release/ui/space_text.py | 72 +++++------ release/ui/space_view3d.py | 40 +++--- release/ui/space_view3d_toolbar.py | 76 +++++------ source/blender/python/intern/bpy_interface.c | 2 +- source/blender/python/intern/bpy_rna.c | 20 ++- source/blender/windowmanager/WM_api.h | 2 + .../windowmanager/intern/wm_operators.c | 58 ++++++++- 27 files changed, 485 insertions(+), 305 deletions(-) create mode 100644 release/ui/bpy_ops.py diff --git a/release/ui/bpy_ops.py b/release/ui/bpy_ops.py new file mode 100644 index 00000000000..22b7846a671 --- /dev/null +++ b/release/ui/bpy_ops.py @@ -0,0 +1,107 @@ +import bpy + +# This class is used for bpy.ops +# + +class bpy_ops(object): + ''' + Fake module like class. + + bpy.ops + ''' + def add(self, pyop): + bpy.__ops__.add(pyop) + + def remove(self, pyop): + bpy.__ops__.remove(pyop) + + def __getattr__(self, module): + ''' + gets a bpy.ops submodule + ''' + return bpy_ops_submodule(module) + + def __dir__(self): + + submodules = set() + + for id_name in dir(bpy.__ops__): + + if id_name.startswith('__'): + continue + + id_split = id_name.split('_OT_', 1) + + if len(id_split) == 2: + submodules.add(id_split[0].lower()) + else: + submodules.add(id_split[0]) + + return list(submodules) + + def __repr__(self): + return "" + + +class bpy_ops_submodule(object): + ''' + Utility class to fake submodules. + + eg. bpy.ops.object + ''' + __keys__ = ('module',) + + def __init__(self, module): + self.module = module + + def __getattr__(self, func): + ''' + gets a bpy.ops.submodule function + ''' + return bpy_ops_submodule_op(self.module, func) + + def __dir__(self): + + functions = set() + + module_upper = self.module.upper() + + for id_name in dir(bpy.__ops__): + + if id_name.startswith('__'): + continue + + id_split = id_name.split('_OT_', 1) + if len(id_split) == 2 and module_upper == id_split[0]: + functions.add(id_split[1]) + + return list(functions) + + def __repr__(self): + return "" % self.module + +class bpy_ops_submodule_op(object): + ''' + Utility class to fake submodule operators. + + eg. bpy.ops.object.somefunc + ''' + __keys__ = ('module', 'func') + def __init__(self, module, func): + self.module = module + self.func = func + + def __call__(self, **kw): + # submod.foo -> SUBMOD_OT_foo + id_name = self.module.upper() + '_OT_' + self.func + + # Get the operator from + internal_op = getattr(bpy.__ops__, id_name) + + # Call the op + return internal_op(**kw) + + def __repr__(self): + return "" % (self.module, self.func, id(self)) + +bpy.ops = bpy_ops() diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py index dfb429af29d..1bcaa342c67 100644 --- a/release/ui/buttons_data_lattice.py +++ b/release/ui/buttons_data_lattice.py @@ -52,7 +52,7 @@ class DATA_PT_lattice(DataButtonsPanel): row.itemR(lat, "interpolation_type_w", expand=True) row = layout.row() - row.itemO("LATTICE_OT_make_regular") + row.itemO("lattice.make_regular") row.itemR(lat, "outside") bpy.types.register(DATA_PT_context_lattice) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 85ce15ef970..fba150c48ad 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -68,15 +68,15 @@ class DATA_PT_materials(DataButtonsPanel): row.template_list(ob, "materials", ob, "active_material_index") col = row.column(align=True) - col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="") - col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") + col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") if context.edit_object: row = layout.row(align=True) - row.itemO("OBJECT_OT_material_slot_assign", text="Assign") - row.itemO("OBJECT_OT_material_slot_select", text="Select") - row.itemO("OBJECT_OT_material_slot_deselect", text="Deselect") + row.itemO("object.material_slot_assign", text="Assign") + row.itemO("object.material_slot_select", text="Select") + row.itemO("object.material_slot_deselect", text="Deselect") """ layout.itemS() @@ -87,8 +87,8 @@ class DATA_PT_materials(DataButtonsPanel): row.template_list(ob, "materials", ob, "active_material_index", compact=True) subrow = row.row(align=True) - subrow.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="") - subrow.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="") + subrow.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") + subrow.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") """ class DATA_PT_vertex_groups(DataButtonsPanel): @@ -107,20 +107,20 @@ class DATA_PT_vertex_groups(DataButtonsPanel): row.template_list(ob, "vertex_groups", ob, "active_vertex_group_index") col = row.column(align=True) - col.itemO("OBJECT_OT_vertex_group_add", icon="ICON_ZOOMIN", text="") - col.itemO("OBJECT_OT_vertex_group_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("object.vertex_group_add", icon="ICON_ZOOMIN", text="") + col.itemO("object.vertex_group_remove", icon="ICON_ZOOMOUT", text="") - col.itemO("OBJECT_OT_vertex_group_copy", icon="ICON_BLANK1", text="") + col.itemO("object.vertex_group_copy", icon="ICON_BLANK1", text="") if ob.data.users > 1: - col.itemO("OBJECT_OT_vertex_group_copy_to_linked", icon="ICON_BLANK1", text="") + col.itemO("object.vertex_group_copy_to_linked", icon="ICON_BLANK1", text="") if context.edit_object: row = layout.row(align=True) - row.itemO("OBJECT_OT_vertex_group_assign", text="Assign") - row.itemO("OBJECT_OT_vertex_group_remove_from", text="Remove") - row.itemO("OBJECT_OT_vertex_group_select", text="Select") - row.itemO("OBJECT_OT_vertex_group_deselect", text="Deselect") + row.itemO("object.vertex_group_assign", text="Assign") + row.itemO("object.vertex_group_remove_from", text="Remove") + row.itemO("object.vertex_group_select", text="Select") + row.itemO("object.vertex_group_deselect", text="Deselect") layout.itemR(context.tool_settings, "vertex_group_weight", text="Weight") @@ -143,8 +143,8 @@ class DATA_PT_shape_keys(DataButtonsPanel): col = row.column() subcol = col.column(align=True) - subcol.itemO("OBJECT_OT_shape_key_add", icon="ICON_ZOOMIN", text="") - subcol.itemO("OBJECT_OT_shape_key_remove", icon="ICON_ZOOMOUT", text="") + subcol.itemO("object.shape_key_add", icon="ICON_ZOOMIN", text="") + subcol.itemO("object.shape_key_remove", icon="ICON_ZOOMOUT", text="") if kb: col.itemS() @@ -189,8 +189,8 @@ class DATA_PT_uv_texture(DataButtonsPanel): row.template_list(me, "uv_textures", me, "active_uv_texture_index") col = row.column(align=True) - col.itemO("MESH_OT_uv_texture_add", icon="ICON_ZOOMIN", text="") - col.itemO("MESH_OT_uv_texture_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("mesh.uv_texture_add", icon="ICON_ZOOMIN", text="") + col.itemO("mesh.uv_texture_remove", icon="ICON_ZOOMOUT", text="") class DATA_PT_vertex_colors(DataButtonsPanel): __idname__ = "DATA_PT_vertex_colors" @@ -205,8 +205,8 @@ class DATA_PT_vertex_colors(DataButtonsPanel): row.template_list(me, "vertex_colors", me, "active_vertex_color_index") col = row.column(align=True) - col.itemO("MESH_OT_vertex_color_add", icon="ICON_ZOOMIN", text="") - col.itemO("MESH_OT_vertex_color_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("mesh.vertex_color_add", icon="ICON_ZOOMIN", text="") + col.itemO("mesh.vertex_color_remove", icon="ICON_ZOOMOUT", text="") bpy.types.register(DATA_PT_context_mesh) bpy.types.register(DATA_PT_mesh) diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py index 10f3efa1ed4..f4d0f7f8ad0 100644 --- a/release/ui/buttons_data_modifier.py +++ b/release/ui/buttons_data_modifier.py @@ -15,7 +15,7 @@ class DATA_PT_modifiers(DataButtonsPanel): layout = self.layout row = layout.row() - row.item_menu_enumO("OBJECT_OT_modifier_add", "type") + row.item_menu_enumO("object.modifier_add", "type") row.itemL(); for md in ob.modifiers: @@ -264,7 +264,7 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.itemR(md, "invert") layout.itemS() - layout.itemO("OBJECT_OT_modifier_mdef_bind", text="Bind") + layout.itemO("object.modifier_mdef_bind", text="Bind") row = layout.row() row.itemR(md, "precision") row.itemR(md, "dynamic") @@ -289,7 +289,7 @@ class DATA_PT_modifiers(DataButtonsPanel): def multires(self, layout, ob, md): layout.itemR(md, "subdivision_type") - layout.itemO("OBJECT_OT_multires_subdivide", text="Subdivide") + layout.itemO("object.multires_subdivide", text="Subdivide") layout.itemR(md, "level") def particleinstance(self, layout, ob, md): diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index c9df957ee02..c2e94b39964 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -40,13 +40,13 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): row.template_list(ob, "materials", ob, "active_material_index") col = row.column(align=True) - col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="") - col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") + col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") split = layout.split(percentage=0.65) if ob and slot: - split.template_ID(slot, "material", new="MATERIAL_OT_new") + split.template_ID(slot, "material", new="material.new") row = split.row() row.itemR(slot, "link", expand=True) elif mat: diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index c0e2bd0250a..2bd24f3f176 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -110,8 +110,8 @@ class ConstraintButtonsPanel(bpy.types.Panel): sub.itemR(con, "sizez", text="Z") row = layout.row() - row.itemO("CONSTRAINT_OT_childof_set_inverse") - row.itemO("CONSTRAINT_OT_childof_clear_inverse") + row.itemO("constraint.childof_set_inverse") + row.itemO("constraint.childof_clear_inverse") def track_to(self, layout, con): self.target_template(layout, con) @@ -521,7 +521,7 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): layout = self.layout row = layout.row() - row.item_menu_enumO("OBJECT_OT_constraint_add", "type") + row.item_menu_enumO("objects.constraint_add", "type") row.itemL(); for con in ob.constraints: @@ -542,7 +542,7 @@ class BONE_PT_constraints(ConstraintButtonsPanel): layout = self.layout row = layout.row() - row.item_menu_enumO("POSE_OT_constraint_add", "type") + row.item_menu_enumO("pose.constraint_add", "type") row.itemL(); for con in pchan.constraints: diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index 69bc1708eba..c8f2101eca9 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -65,7 +65,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel): ob = context.object split = layout.split() - split.item_menu_enumO("OBJECT_OT_group_add", "group", text="Add to Group") + split.item_menu_enumO("object.group_add", "group", text="Add to Group") split.itemL() for group in bpy.data.groups: @@ -76,7 +76,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel): row = col.box().row() row.itemR(group, "name", text="") - row.itemO("OBJECT_OT_group_remove", text="", icon="VICON_X") + row.itemO("object.group_remove", text="", icon="VICON_X") split = col.box().split() split.column().itemR(group, "layer", text="Dupli") diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index 2d269967e4b..56e586a7271 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -36,13 +36,13 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): row.template_list(ob, "particle_systems", ob, "active_particle_system_index") col = row.column(align=True) - col.itemO("OBJECT_OT_particle_system_add", icon="ICON_ZOOMIN", text="") - col.itemO("OBJECT_OT_particle_system_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("object.particle_system_add", icon="ICON_ZOOMIN", text="") + col.itemO("object.particle_system_remove", icon="ICON_ZOOMOUT", text="") if psys: split = layout.split(percentage=0.65) - split.template_ID(psys, "settings", new="PARTICLE_OT_new") + split.template_ID(psys, "settings", new="particle.new") #row = layout.row() #row.itemL(text="Viewport") @@ -65,9 +65,9 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): split = layout.split(percentage=0.65) if part.type=='HAIR': if psys.editable==True: - split.itemO("PARTICLE_OT_editable_set", text="Free Edit") + split.itemO("particle.editable_set", text="Free Edit") else: - split.itemO("PARTICLE_OT_editable_set", text="Make Editable") + split.itemO("particle.editable_set", text="Make Editable") row = split.row() row.enabled = particle_panel_enabled(psys) row.itemR(part, "hair_step") @@ -149,17 +149,17 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): row = layout.row() if cache.baked == True: - row.itemO("PTCACHE_OT_free_bake_particle_system", text="Free Bake") + row.itemO("ptcache.free_bake_particle_system", text="Free Bake") else: - row.item_booleanO("PTCACHE_OT_cache_particle_system", "bake", True, text="Bake") + row.item_booleanO("ptcache.cache_particle_system", "bake", True, text="Bake") subrow = row.row() subrow.enabled = (cache.frames_skipped or cache.outdated) and particle_panel_enabled(psys) - subrow.itemO("PTCACHE_OT_cache_particle_system", text="Calculate to Current Frame") + subrow.itemO("ptcache.cache_particle_system", text="Calculate to Current Frame") row = layout.row() row.enabled = particle_panel_enabled(psys) - row.itemO("PTCACHE_OT_bake_from_particles_cache", text="Current Cache to Bake") + row.itemO("ptcache.bake_from_particles_cache", text="Current Cache to Bake") row.itemR(cache, "step"); row = layout.row() @@ -172,9 +172,9 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): layout.itemS() row = layout.row() - row.item_booleanO("PTCACHE_OT_bake_all", "bake", True, text="Bake All Dynamics") - row.itemO("PTCACHE_OT_free_bake_all", text="Free All Bakes") - layout.itemO("PTCACHE_OT_bake_all", text="Update All Dynamics to current frame") + row.item_booleanO("ptcache.bake_all", "bake", True, text="Bake All Dynamics") + row.itemO("ptcache.free_bake_all", text="Free All Bakes") + layout.itemO("ptcache.bake_all", text="Update All Dynamics to current frame") # for particles these are figured out automatically #row.itemR(cache, "start_frame") @@ -294,12 +294,12 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): col = row.column() subrow = col.row() subcol = subrow.column(align=True) - subcol.itemO("PARTICLE_OT_new_keyed_target", icon="ICON_ZOOMIN", text="") - subcol.itemO("PARTICLE_OT_remove_keyed_target", icon="ICON_ZOOMOUT", text="") + subcol.itemO("particle.new_keyed_target", icon="ICON_ZOOMIN", text="") + subcol.itemO("particle.remove_keyed_target", icon="ICON_ZOOMOUT", text="") subrow = col.row() subcol = subrow.column(align=True) - subcol.itemO("PARTICLE_OT_keyed_target_move_up", icon="VICON_MOVE_UP", text="") - subcol.itemO("PARTICLE_OT_keyed_target_move_down", icon="VICON_MOVE_DOWN", text="") + subcol.itemO("particle.keyed_target_move_up", icon="VICON_MOVE_UP", text="") + subcol.itemO("particle.keyed_target_move_down", icon="VICON_MOVE_DOWN", text="") key = psys.active_keyed_target if key: diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index 18dab36211f..6e55d728c27 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -25,14 +25,14 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel): if md: # remove modifier + settings split.set_context_pointer("modifier", md) - split.itemO("OBJECT_OT_modifier_remove", text="Remove") + split.itemO("object.modifier_remove", text="Remove") row = split.row(align=True) row.itemR(md, "render", text="") row.itemR(md, "realtime", text="") else: # add modifier - split.item_enumO("OBJECT_OT_modifier_add", "type", "CLOTH", text="Add") + split.item_enumO("object.modifier_add", "type", "CLOTH", text="Add") split.itemL() if md: @@ -97,17 +97,17 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel): row = layout.row() if cache.baked == True: - row.itemO("PTCACHE_OT_free_bake_cloth", text="Free Bake") + row.itemO("ptcache.free_bake_cloth", text="Free Bake") else: - row.item_booleanO("PTCACHE_OT_cache_cloth", "bake", True, text="Bake") + row.item_booleanO("ptcache.cache_cloth", "bake", True, text="Bake") subrow = row.row() subrow.enabled = cache.frames_skipped or cache.outdated - subrow.itemO("PTCACHE_OT_cache_cloth", text="Calculate to Current Frame") + subrow.itemO("ptcache.cache_cloth", text="Calculate to Current Frame") row = layout.row() #row.enabled = particle_panel_enabled(psys) - row.itemO("PTCACHE_OT_bake_from_cloth_cache", text="Current Cache to Bake") + row.itemO("ptcache.bake_from_cloth_cache", text="Current Cache to Bake") row.itemR(cache, "step"); row = layout.row() @@ -120,9 +120,9 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel): layout.itemS() row = layout.row() - row.itemO("PTCACHE_OT_bake_all", "bake", True, text="Bake All Dynamics") - row.itemO("PTCACHE_OT_free_bake_all", text="Free All Bakes") - layout.itemO("PTCACHE_OT_bake_all", text="Update All Dynamics to current frame") + row.itemO("ptcache.bake_all", "bake", True, text="Bake All Dynamics") + row.itemO("ptcache.free_bake_all", text="Free All Bakes") + layout.itemO("ptcache.bake_all", text="Update All Dynamics to current frame") class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_clothcollision" diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index cab5b0c632a..4273adc9cab 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -25,7 +25,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): if md: # remove modifier + settings split.set_context_pointer("modifier", md) - split.itemO("OBJECT_OT_modifier_remove", text="Remove") + split.itemO("object.modifier_remove", text="Remove") row = split.row(align=True) row.itemR(md, "render", text="") @@ -35,7 +35,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): else: # add modifier - split.item_enumO("OBJECT_OT_modifier_add", "type", "FLUID_SIMULATION", text="Add") + split.item_enumO("object.modifier_add", "type", "FLUID_SIMULATION", text="Add") split.itemL() fluid = None @@ -56,7 +56,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): row.item_enumR(fluid, "type", "CONTROL") if fluid.type == 'DOMAIN': - layout.itemO("FLUID_OT_bake", text="BAKE") + layout.itemO("fluid.bake", text="BAKE") split = layout.split() col = split.column() diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py index 35cee713a87..836c557257e 100644 --- a/release/ui/buttons_physics_softbody.py +++ b/release/ui/buttons_physics_softbody.py @@ -25,14 +25,14 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel): if md: # remove modifier + settings split.set_context_pointer("modifier", md) - split.itemO("OBJECT_OT_modifier_remove", text="Remove") + split.itemO("object.modifier_remove", text="Remove") row = split.row(align=True) row.itemR(md, "render", text="") row.itemR(md, "realtime", text="") else: # add modifier - split.item_enumO("OBJECT_OT_modifier_add", "type", "SOFTBODY", text="Add") + split.item_enumO("object.modifier_add", "type", "SOFTBODY", text="Add") split.itemL("") if md: diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 9886c56ab0a..a73b42b88e4 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -14,8 +14,8 @@ class RENDER_PT_render(RenderButtonsPanel): rd = context.scene.render_data row = layout.row() - row.itemO("SCREEN_OT_render", text="Image", icon='ICON_IMAGE_COL') - row.item_booleanO("SCREEN_OT_render", "anim", True, text="Animation", icon='ICON_SEQUENCE') + row.itemO("screen.render", text="Image", icon='ICON_IMAGE_COL') + row.item_booleanO("screen.render", "anim", True, text="Animation", icon='ICON_SEQUENCE') layout.itemR(rd, "display_mode", text="Display") @@ -32,8 +32,8 @@ class RENDER_PT_layers(RenderButtonsPanel): row.template_list(rd, "layers", rd, "active_layer_index", rows=2) col = row.column(align=True) - col.itemO("SCENE_OT_render_layer_add", icon="ICON_ZOOMIN", text="") - col.itemO("SCENE_OT_render_layer_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("scene.render_layer_add", icon="ICON_ZOOMIN", text="") + col.itemO("scene.render_layer_remove", icon="ICON_ZOOMOUT", text="") rl = rd.layers[rd.active_layer_index] diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 030e0836ca7..4c2f392b646 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -46,15 +46,15 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): row.template_list(wo, "textures", wo, "active_texture_index") """if ma or la or wo: col = row.column(align=True) - col.itemO("TEXTURE_OT_new", icon="ICON_ZOOMIN", text="") - #col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="") + col.itemO("texture.new", icon="ICON_ZOOMIN", text="") + #col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") """ split = layout.split(percentage=0.65) if ma or la or wo: if slot: - split.template_ID(slot, "texture", new="TEXTURE_OT_new") + split.template_ID(slot, "texture", new="texture.new") else: split.itemS() diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index e8b2656dea1..6e233f86765 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -34,7 +34,7 @@ class WORLD_PT_context_world(WorldButtonsPanel): split = layout.split(percentage=0.65) if scene: - split.template_ID(scene, "world", new="WORLD_OT_new") + split.template_ID(scene, "world", new="world.new") elif world: split.template_ID(space, "pin_id") diff --git a/release/ui/space_console.py b/release/ui/space_console.py index ee6abcb0a2d..b92e3b7d51c 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -1,6 +1,9 @@ import bpy +import bpy_ops # XXX - should not need to do this +del bpy_ops + class CONSOLE_HT_header(bpy.types.Header): __space_type__ = "CONSOLE" __idname__ = "CONSOLE_HT_header" @@ -36,11 +39,11 @@ class CONSOLE_MT_console(bpy.types.Menu): sc = context.space_data layout.column() - layout.itemO("CONSOLE_OT_clear") + layout.itemO("console.clear") def add_scrollback(text, text_type): for l in text.split('\n'): - bpy.ops.CONSOLE_OT_scrollback_append(text=l.replace('\t', ' '), type=text_type) + bpy.ops.console.scrollback_append(text=l.replace('\t', ' '), type=text_type) def get_console(console_id): ''' @@ -148,13 +151,13 @@ class CONSOLE_OT_exec(bpy.types.Operator): stdout.truncate(0) stderr.truncate(0) - bpy.ops.CONSOLE_OT_scrollback_append(text = sc.prompt+line, type='INPUT') + bpy.ops.console.scrollback_append(text = sc.prompt+line, type='INPUT') if is_multiline: sc.prompt = self.PROMPT_MULTI else: sc.prompt = self.PROMPT # insert a new blank line - bpy.ops.CONSOLE_OT_history_append(text="", current_character=0) + bpy.ops.console.history_append(text="", current_character=0) # Insert the output into the editor # not quite correct because the order might have changed, but ok 99% of the time. diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py index 0c37e8c0816..b0aaae8f0a5 100644 --- a/release/ui/space_filebrowser.py +++ b/release/ui/space_filebrowser.py @@ -19,10 +19,10 @@ class FILEBROWSER_HT_header(bpy.types.Header): row.itemM("FILEBROWSER_MT_bookmarks") row = layout.row(align=True) - row.itemO("FILE_OT_parent", text="", icon='ICON_FILE_PARENT') - row.itemO("FILE_OT_refresh", text="", icon='ICON_FILE_REFRESH') - row.itemO("FILE_OT_previous", text="", icon='ICON_PREV_KEYFRAME') - row.itemO("FILE_OT_next", text="", icon='ICON_NEXT_KEYFRAME') + row.itemO("file.parent", text="", icon='ICON_FILE_PARENT') + row.itemO("file.refresh", text="", icon='ICON_FILE_REFRESH') + row.itemO("file.previous", text="", icon='ICON_PREV_KEYFRAME') + row.itemO("file.next", text="", icon='ICON_NEXT_KEYFRAME') layout.itemR(params, "display", expand=True, text="") layout.itemR(params, "sort", expand=True, text="") @@ -49,8 +49,8 @@ class FILEBROWSER_MT_directory(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("FILE_OT_refresh", text="Refresh", icon='ICON_FILE_REFRESH') - layout.itemO("FILE_OT_parent", text="Parent", icon='ICON_FILE_PARENT') + layout.itemO("file.refresh", text="Refresh", icon='ICON_FILE_REFRESH') + layout.itemO("file.parent", text="Parent", icon='ICON_FILE_PARENT') class FILEBROWSER_MT_bookmarks(bpy.types.Menu): __space_type__ = "FILE_BROWSER" @@ -59,7 +59,7 @@ class FILEBROWSER_MT_bookmarks(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("FILE_OT_add_bookmark", text="Add current directory", icon='ICON_BOOKMARKS') + layout.itemO("file.add_bookmark", text="Add current directory", icon='ICON_BOOKMARKS') bpy.types.register(FILEBROWSER_HT_header) diff --git a/release/ui/space_image.py b/release/ui/space_image.py index ce8257203dc..7084a0f639d 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -13,7 +13,7 @@ class IMAGE_MT_view(bpy.types.Menu): show_uvedit = sima.show_uvedit - layout.itemO("IMAGE_OT_properties", icon="ICON_MENU_PANEL") + layout.itemO("image.properties", icon="ICON_MENU_PANEL") layout.itemS() @@ -23,8 +23,8 @@ class IMAGE_MT_view(bpy.types.Menu): layout.itemS() - layout.itemO("IMAGE_OT_view_zoom_in") - layout.itemO("IMAGE_OT_view_zoom_out") + layout.itemO("image.view_zoom_in") + layout.itemO("image.view_zoom_out") layout.itemS() @@ -32,15 +32,15 @@ class IMAGE_MT_view(bpy.types.Menu): for a, b in ratios: text = "Zoom %d:%d" % (a, b) - layout.item_floatO("IMAGE_OT_view_zoom_ratio", "ratio", a/b, text=text) + layout.item_floatO("image.view_zoom_ratio", "ratio", a/b, text=text) layout.itemS() if show_uvedit: - layout.itemO("IMAGE_OT_view_selected") + layout.itemO("image.view_selected") - layout.itemO("IMAGE_OT_view_all") - layout.itemO("SCREEN_OT_screen_full_area") + layout.itemO("image.view_all") + layout.itemO("screen.screen_full_area") class IMAGE_MT_select(bpy.types.Menu): __space_type__ = "IMAGE_EDITOR" @@ -49,19 +49,19 @@ class IMAGE_MT_select(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("UV_OT_select_border") - layout.item_booleanO("UV_OT_select_border", "pinned", True) + layout.itemO("uv.select_border") + layout.item_booleanO("uv.select_border", "pinned", True) layout.itemS() - layout.itemO("UV_OT_select_all_toggle") - layout.itemO("UV_OT_select_inverse") - layout.itemO("UV_OT_unlink_selection") + layout.itemO("uv.select_all_toggle") + layout.itemO("uv.select_inverse") + layout.itemO("uv.unlink_selection") layout.itemS() - layout.itemO("UV_OT_select_pinned") - layout.itemO("UV_OT_select_linked") + layout.itemO("uv.select_pinned") + layout.itemO("uv.select_linked") class IMAGE_MT_image(bpy.types.Menu): __space_type__ = "IMAGE_EDITOR" @@ -72,35 +72,35 @@ class IMAGE_MT_image(bpy.types.Menu): sima = context.space_data ima = sima.image - layout.itemO("IMAGE_OT_new") - layout.itemO("IMAGE_OT_open") + layout.itemO("image.new") + layout.itemO("image.open") show_render = sima.show_render if ima: if show_render: - layout.itemO("IMAGE_OT_replace") - layout.itemO("IMAGE_OT_reload") + layout.itemO("image.replace") + layout.itemO("image.reload") - layout.itemO("IMAGE_OT_save") - layout.itemO("IMAGE_OT_save_as") + layout.itemO("image.save") + layout.itemO("image.save_as") if ima.source == "SEQUENCE": - layout.itemO("IMAGE_OT_save_sequence") + layout.itemO("image.save_sequence") if not show_render: layout.itemS() if ima.packed_file: - layout.itemO("IMAGE_OT_unpack") + layout.itemO("image.unpack") else: - layout.itemO("IMAGE_OT_pack") + layout.itemO("image.pack") # only for dirty && specific image types, perhaps # this could be done in operator poll too if ima.dirty: if ima.source in ("FILE", "GENERATED") and ima.type != "MULTILAYER": - layout.item_booleanO("IMAGE_OT_pack", "as_png", True, text="Pack As PNG") + layout.item_booleanO("image.pack", "as_png", True, text="Pack As PNG") layout.itemS() @@ -113,9 +113,9 @@ class IMAGE_MT_uvs_showhide(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("UV_OT_reveal") - layout.itemO("UV_OT_hide") - layout.item_booleanO("UV_OT_hide", "unselected", True) + layout.itemO("uv.reveal") + layout.itemO("uv.hide") + layout.item_booleanO("uv.hide", "unselected", True) class IMAGE_MT_uvs_transform(bpy.types.Menu): __space_type__ = "IMAGE_EDITOR" @@ -124,9 +124,9 @@ class IMAGE_MT_uvs_transform(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.item_enumO("TFM_OT_transform", "mode", "TRANSLATION") - layout.item_enumO("TFM_OT_transform", "mode", "ROTATION") - layout.item_enumO("TFM_OT_transform", "mode", "RESIZE") + layout.item_enumO("tfm.transform", "mode", "TRANSLATION") + layout.item_enumO("tfm.transform", "mode", "ROTATION") + layout.item_enumO("tfm.transform", "mode", "RESIZE") class IMAGE_MT_uvs_mirror(bpy.types.Menu): __space_type__ = "IMAGE_EDITOR" @@ -135,8 +135,8 @@ class IMAGE_MT_uvs_mirror(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.item_enumO("UV_OT_mirror", "axis", "MIRROR_X") # "X Axis", M, - layout.item_enumO("UV_OT_mirror", "axis", "MIRROR_Y") # "Y Axis", M, + layout.item_enumO("uv.mirror", "axis", "MIRROR_X") # "X Axis", M, + layout.item_enumO("uv.mirror", "axis", "MIRROR_Y") # "Y Axis", M, class IMAGE_MT_uvs_weldalign(bpy.types.Menu): __space_type__ = "IMAGE_EDITOR" @@ -145,8 +145,8 @@ class IMAGE_MT_uvs_weldalign(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("UV_OT_weld") # W, 1 - layout.items_enumO("UV_OT_align", "axis") # W, 2/3/4 + layout.itemO("uv.weld") # W, 1 + layout.items_enumO("uv.align", "axis") # W, 2/3/4 class IMAGE_MT_uvs(bpy.types.Menu): @@ -165,16 +165,16 @@ class IMAGE_MT_uvs(bpy.types.Menu): layout.itemS() layout.itemR(uv, "live_unwrap") - layout.itemO("UV_OT_unwrap") - layout.item_booleanO("UV_OT_pin", "clear", True, text="Unpin") - layout.itemO("UV_OT_pin") + layout.itemO("uv.unwrap") + layout.item_booleanO("uv.pin", "clear", True, text="Unpin") + layout.itemO("uv.pin") layout.itemS() - layout.itemO("UV_OT_pack_islands") - layout.itemO("UV_OT_average_islands_scale") - layout.itemO("UV_OT_minimize_stretch") - layout.itemO("UV_OT_stitch") + layout.itemO("uv.pack_islands") + layout.itemO("uv.average_islands_scale") + layout.itemO("uv.minimize_stretch") + layout.itemO("uv.stitch") layout.itemS() @@ -223,7 +223,7 @@ class IMAGE_HT_header(bpy.types.Header): if show_uvedit: row.itemM("IMAGE_MT_uvs") - layout.template_ID(sima, "image", new="IMAGE_OT_new", open="IMAGE_OT_open") + layout.template_ID(sima, "image", new="image.new", open="image.open") """ /* image select */ @@ -290,9 +290,9 @@ class IMAGE_HT_header(bpy.types.Header): row = layout.row(align=True) if ima.type == "COMPOSITE": - row.itemO("IMAGE_OT_record_composite", icon="ICON_REC") + row.itemO("image.record_composite", icon="ICON_REC") if ima.type == "COMPOSITE" and ima.source in ("MOVIE", "SEQUENCE"): - row.itemO("IMAGE_OT_play_composite", icon="ICON_PLAY") + row.itemO("image.play_composite", icon="ICON_PLAY") layout.itemR(sima, "update_automatically", text="") diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 4348eb87bfe..04a91bf92d3 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -20,8 +20,8 @@ class INFO_HT_header(bpy.types.Header): row.itemM("INFO_MT_render") row.itemM("INFO_MT_help") - layout.template_ID(context.window, "screen") #, new="SCREEN_OT_new", open="SCREEN_OT_unlink") - layout.template_ID(context.screen, "scene") #, new="SCENE_OT_new", unlink="SCENE_OT_unlink") + layout.template_ID(context.window, "screen") #, new="screen.new", open="scene.unlink") + layout.template_ID(context.screen, "scene") #, new="screen.new", unlink="scene.unlink") layout.itemS() @@ -36,16 +36,16 @@ class INFO_MT_file(bpy.types.Menu): layout = self.layout layout.operator_context = "EXEC_AREA" - layout.itemO("WM_OT_read_homefile") + layout.itemO("wm.read_homefile") layout.operator_context = "INVOKE_AREA" - layout.itemO("WM_OT_open_mainfile") + layout.itemO("wm.open_mainfile") layout.itemS() layout.operator_context = "EXEC_AREA" - layout.itemO("WM_OT_save_mainfile") + layout.itemO("wm.save_mainfile") layout.operator_context = "INVOKE_AREA" - layout.itemO("WM_OT_save_as_mainfile") + layout.itemO("wm.save_as_mainfile") layout.itemS() @@ -58,15 +58,15 @@ class INFO_MT_file_external_data(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("FILE_OT_pack_all", text="Pack into .blend file") - layout.itemO("FILE_OT_unpack_all", text="Unpack into Files...") + layout.itemO("file.pack_all", text="Pack into .blend file") + layout.itemO("file.unpack_all", text="Unpack into Files...") layout.itemS() - layout.itemO("FILE_OT_make_paths_relative") - layout.itemO("FILE_OT_make_paths_absolute") - layout.itemO("FILE_OT_report_missing_files") - layout.itemO("FILE_OT_find_missing_files") + layout.itemO("file.make_paths_relative") + layout.itemO("file.make_paths_absolute") + layout.itemO("file.report_missing_files") + layout.itemO("file.find_missing_files") class INFO_MT_add(bpy.types.Menu): __space_type__ = "USER_PREFERENCES" @@ -444,7 +444,7 @@ class INFO_PT_bottombar(bpy.types.Panel): split = layout.split(percentage=0.8) split.itemL(text="") - split.itemO("WM_OT_save_homefile", text="Save As Default") + split.itemO("wm.save_homefile", text="Save As Default") bpy.types.register(INFO_HT_header) diff --git a/release/ui/space_outliner.py b/release/ui/space_outliner.py index 5a6ee5ea2aa..545a001349b 100644 --- a/release/ui/space_outliner.py +++ b/release/ui/space_outliner.py @@ -21,18 +21,18 @@ class OUTLINER_HT_header(bpy.types.Header): if so.display_mode == 'DATABLOCKS': row = layout.row(align=True) - row.itemO("ANIM_OT_keyingset_add_new", text="", icon=31) + row.itemO("anim.keyingset_add_new", text="", icon=31) # row.itemR(sce, "active_keyingset", text="KS: ") # ks = sce.keyingsets[sce.active_keyingset - 1] # row.itemR(ks, "name", text="") ## row.itemR(sce, "keyingsets") row = layout.row() - row.itemO("OUTLINER_OT_keyingset_add_selected", text="", icon=31) - row.itemO("OUTLINER_OT_keyingset_remove_selected", text="", icon=32) + row.itemO("outliner.keyingset_add_selected", text="", icon=31) + row.itemO("outliner.keyingset_remove_selected", text="", icon=32) - row.itemO("ANIM_OT_insert_keyframe", text="", icon=514) - row.itemO("ANIM_OT_delete_keyframe", text="", icon=513) + row.itemO("anim.insert_keyframe", text="", icon=514) + row.itemO("anim.delete_keyframe", text="", icon=513) class OUTLINER_MT_view(bpy.types.Menu): @@ -45,7 +45,7 @@ class OUTLINER_MT_view(bpy.types.Menu): col = layout.column() col.itemR(so, "show_restriction_columns") - #layout.itemO("TEXT_OT_new") + #layout.itemO("text.new") bpy.types.register(OUTLINER_HT_header) bpy.types.register(OUTLINER_MT_view) diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py index 702c2ff20f2..13f90a1af63 100644 --- a/release/ui/space_sequencer.py +++ b/release/ui/space_sequencer.py @@ -31,7 +31,7 @@ class SEQUENCER_HT_header(bpy.types.Header): row.itemM("SEQUENCER_MT_add") row.itemM("SEQUENCER_MT_strip") layout.itemS() - row.itemO("SEQUENCER_OT_reload") + row.itemO("sequencer.reload") else: row.itemR(st, "display_channel") # text="Chan" @@ -74,8 +74,8 @@ class SEQUENCER_MT_view(bpy.types.Menu): """ layout.itemS() - layout.itemO("SEQUENCER_OT_view_all") - layout.itemO("SEQUENCER_OT_view_selected") + layout.itemO("sequencer.view_all") + layout.itemO("sequencer.view_selected") layout.itemS() """ @@ -110,16 +110,16 @@ class SEQUENCER_MT_select(bpy.types.Menu): st = context.space_data layout.column() - layout.item_enumO("SEQUENCER_OT_select_active_side", "side", 'LEFT', text="Strips to the Left") - layout.item_enumO("SEQUENCER_OT_select_active_side", "side", 'RIGHT', text="Strips to the Right") + layout.item_enumO("sequencer.select_active_side", "side", 'LEFT', text="Strips to the Left") + layout.item_enumO("sequencer.select_active_side", "side", 'RIGHT', text="Strips to the Right") layout.itemS() - layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'BOTH', text="Surrounding Handles") - layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'LEFT', text="Left Handle") - layout.item_enumO("SEQUENCER_OT_select_handles", "side", 'RIGHT', text="Right Handle") + layout.item_enumO("sequencer.select_handles", "side", 'BOTH', text="Surrounding Handles") + layout.item_enumO("sequencer.select_handles", "side", 'LEFT', text="Left Handle") + layout.item_enumO("sequencer.select_handles", "side", 'RIGHT', text="Right Handle") layout.itemS() - layout.itemO("SEQUENCER_OT_select_linked") - layout.itemO("SEQUENCER_OT_select_all_toggle") - layout.itemO("SEQUENCER_OT_select_inverse") + layout.itemO("sequencer.select_linked") + layout.itemO("sequencer.select_all_toggle") + layout.itemO("sequencer.select_inverse") class SEQUENCER_MT_marker(bpy.types.Menu): __space_type__ = "SEQUENCE_EDITOR" @@ -130,14 +130,14 @@ class SEQUENCER_MT_marker(bpy.types.Menu): st = context.space_data layout.column() - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Add Marker|Ctrl Alt M") - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Duplicate Marker|Ctrl Shift D") - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Delete Marker|Shift X") + layout.itemO("sequencer.sound_strip_add", text="Add Marker|Ctrl Alt M") + layout.itemO("sequencer.sound_strip_add", text="Duplicate Marker|Ctrl Shift D") + layout.itemO("sequencer.sound_strip_add", text="Delete Marker|Shift X") layout.itemS() - layout.itemO("SEQUENCER_OT_sound_strip_add", text="(Re)Name Marker|Ctrl M") - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Grab/Move Marker|Ctrl G") + layout.itemO("sequencer.sound_strip_add", text="(Re)Name Marker|Ctrl M") + layout.itemO("sequencer.sound_strip_add", text="Grab/Move Marker|Ctrl G") layout.itemS() - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Transform Markers") # toggle, will be rna - (sseq->flag & SEQ_MARKER_TRANS) + layout.itemO("sequencer.sound_strip_add", text="Transform Markers") # toggle, will be rna - (sseq->flag & SEQ_MARKER_TRANS) class SEQUENCER_MT_add(bpy.types.Menu): __space_type__ = "SEQUENCE_EDITOR" @@ -148,12 +148,12 @@ class SEQUENCER_MT_add(bpy.types.Menu): st = context.space_data layout.column() - layout.itemO("SEQUENCER_OT_scene_strip_add", text="Scene") - layout.itemO("SEQUENCER_OT_movie_strip_add", text="Movie") - layout.item_booleanO("SEQUENCER_OT_movie_strip_add", "sound", True, text="Movie & Sound") # FFMPEG ONLY - layout.itemO("SEQUENCER_OT_image_strip_add", text="Image") - layout.itemO("SEQUENCER_OT_sound_strip_add", text="Sound (Ram)") - layout.item_booleanO("SEQUENCER_OT_sound_strip_add", "hd", True, text="Sound (Streaming)") # FFMPEG ONLY + layout.itemO("sequencer.scene_strip_add", text="Scene") + layout.itemO("sequencer.movie_strip_add", text="Movie") + layout.item_booleanO("sequencer.movie_strip_add", "sound", True, text="Movie & Sound") # FFMPEG ONLY + layout.itemO("sequencer.image_strip_add", text="Image") + layout.itemO("sequencer.sound_strip_add", text="Sound (Ram)") + layout.item_booleanO("sequencer.sound_strip_add", "hd", True, text="Sound (Streaming)") # FFMPEG ONLY layout.itemM("SEQUENCER_MT_add_effect") @@ -167,19 +167,19 @@ class SEQUENCER_MT_add_effect(bpy.types.Menu): st = context.space_data self.layout.column() - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ADD') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'SUBTRACT') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ALPHA_OVER') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'ALPHA_UNDER') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'GAMMA_CROSS') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'MULTIPLY') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'OVER_DROP') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'PLUGIN') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'WIPE') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'GLOW') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'TRANSFORM') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'COLOR') - self.layout.item_enumO("SEQUENCER_OT_effect_strip_add", 'type', 'SPEED') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'ADD') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'SUBTRACT') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'ALPHA_OVER') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'ALPHA_UNDER') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'GAMMA_CROSS') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'MULTIPLY') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'OVER_DROP') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'PLUGIN') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'WIPE') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'GLOW') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'TRANSFORM') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'COLOR') + self.layout.item_enumO("sequencer.effect_strip_add", 'type', 'SPEED') class SEQUENCER_MT_strip(bpy.types.Menu): __space_type__ = "SEQUENCE_EDITOR" @@ -192,18 +192,18 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.operator_context = 'INVOKE_REGION_WIN' layout.column() - layout.item_enumO("TFM_OT_transform", "mode", 'TRANSLATION', text="Grab/Move") - layout.item_enumO("TFM_OT_transform", "mode", 'TIME_EXTEND', text="Grab/Extend from frame") - # uiItemO(layout, NULL, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator + layout.item_enumO("tfm.transform", "mode", 'TRANSLATION', text="Grab/Move") + layout.item_enumO("tfm.transform", "mode", 'TIME_EXTEND', text="Grab/Extend from frame") + # uiItemO(layout, NULL, 0, "sequencer.strip_snap"); // TODO - add this operator layout.itemS() - layout.item_enumO("SEQUENCER_OT_cut", "type", 'HARD', text="Cut (hard) at frame") - layout.item_enumO("SEQUENCER_OT_cut", "type", 'SOFT', text="Cut (soft) at frame") - layout.itemO("SEQUENCER_OT_images_separate") + layout.item_enumO("sequencer.cut", "type", 'HARD', text="Cut (hard) at frame") + layout.item_enumO("sequencer.cut", "type", 'SOFT', text="Cut (soft) at frame") + layout.itemO("sequencer.images_separate") layout.itemS() - layout.itemO("SEQUENCER_OT_duplicate") - layout.itemO("SEQUENCER_OT_delete") + layout.itemO("sequencer.duplicate") + layout.itemO("sequencer.delete") strip = act_strip(context) @@ -212,39 +212,39 @@ class SEQUENCER_MT_strip(bpy.types.Menu): if stype=='EFFECT': layout.itemS() - layout.itemO("SEQUENCER_OT_effect_change") - layout.itemO("SEQUENCER_OT_effect_reassign_inputs") + layout.itemO("sequencer.effect_change") + layout.itemO("sequencer.effect_reassign_inputs") elif stype=='IMAGE': layout.itemS() - layout.itemO("SEQUENCER_OT_image_change") + layout.itemO("sequencer.image_change") elif stype=='SCENE': layout.itemS() - layout.itemO("SEQUENCER_OT_scene_change", text="Change Scene") + layout.itemO("sequencer.scene_change", text="Change Scene") elif stype=='MOVIE': layout.itemS() - layout.itemO("SEQUENCER_OT_movie_change") + layout.itemO("sequencer.movie_change") layout.itemS() - layout.itemO("SEQUENCER_OT_meta_make") - layout.itemO("SEQUENCER_OT_meta_separate") + layout.itemO("sequencer.meta_make") + layout.itemO("sequencer.meta_separate") #if (ed && (ed->metastack.first || (ed->act_seq && ed->act_seq->type == SEQ_META))) { # uiItemS(layout); - # uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_toggle"); + # uiItemO(layout, NULL, 0, "sequencer.meta_toggle"); #} layout.itemS() - layout.itemO("SEQUENCER_OT_reload") + layout.itemO("sequencer.reload") layout.itemS() - layout.itemO("SEQUENCER_OT_lock") - layout.itemO("SEQUENCER_OT_unlock") - layout.itemO("SEQUENCER_OT_mute") - layout.itemO("SEQUENCER_OT_unmute") + layout.itemO("sequencer.lock") + layout.itemO("sequencer.unlock") + layout.itemO("sequencer.mute") + layout.itemO("sequencer.unmute") - layout.item_booleanO("SEQUENCER_OT_mute", "unselected", 1, text="Mute Deselected Strips") + layout.item_booleanO("sequencer.mute", "unselected", 1, text="Mute Deselected Strips") - layout.itemO("SEQUENCER_OT_snap") + layout.itemO("sequencer.snap") # Panels class SequencerButtonsPanel(bpy.types.Panel): diff --git a/release/ui/space_text.py b/release/ui/space_text.py index 07e43f32054..51f7f6447ae 100644 --- a/release/ui/space_text.py +++ b/release/ui/space_text.py @@ -22,14 +22,14 @@ class TEXT_HT_header(bpy.types.Header): if text and text.modified: row = layout.row() # row.color(redalert) - row.itemO("TEXT_OT_resolve_conflict", text="", icon='ICON_HELP') + row.itemO("text.resolve_conflict", text="", icon='ICON_HELP') row = layout.row(align=True) row.itemR(st, "line_numbers", text="") row.itemR(st, "word_wrap", text="") row.itemR(st, "syntax_highlight", text="") - layout.template_ID(st, "text", new="TEXT_OT_new", unlink="TEXT_OT_unlink") + layout.template_ID(st, "text", new="text.new", unlink="text.unlink") if text: row = layout.row() @@ -76,18 +76,18 @@ class TEXT_PT_find(bpy.types.Panel): col = layout.column(align=True) row = col.row() row.itemR(st, "find_text", text="") - row.itemO("TEXT_OT_find_set_selected", text="", icon='ICON_TEXT') - col.itemO("TEXT_OT_find") + row.itemO("text.find_set_selected", text="", icon='ICON_TEXT') + col.itemO("text.find") # replace col = layout.column(align=True) row = col.row() row.itemR(st, "replace_text", text="") - row.itemO("TEXT_OT_replace_set_selected", text="", icon='ICON_TEXT') - col.itemO("TEXT_OT_replace") + row.itemO("text.replace_set_selected", text="", icon='ICON_TEXT') + col.itemO("text.replace") # mark - layout.itemO("TEXT_OT_mark_all") + layout.itemO("text.mark_all") # settings row = layout.row() @@ -104,25 +104,25 @@ class TEXT_MT_text(bpy.types.Menu): text = st.text layout.column() - layout.itemO("TEXT_OT_new") - layout.itemO("TEXT_OT_open") + layout.itemO("text.new") + layout.itemO("text.open") if text: - layout.itemO("TEXT_OT_reload") + layout.itemO("text.reload") layout.column() - layout.itemO("TEXT_OT_save") - layout.itemO("TEXT_OT_save_as") + layout.itemO("text.save") + layout.itemO("text.save_as") if text.filename != "": - layout.itemO("TEXT_OT_make_internal") + layout.itemO("text.make_internal") layout.column() - layout.itemO("TEXT_OT_run_script") + layout.itemO("text.run_script") #ifndef DISABLE_PYTHON # XXX if(BPY_is_pyconstraint(text)) - # XXX uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints"); + # XXX uiMenuItemO(head, 0, "text.refresh_pyconstraints"); #endif #ifndef DISABLE_PYTHON @@ -138,8 +138,8 @@ class TEXT_MT_edit_view(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.item_enumO("TEXT_OT_move", "type", "FILE_TOP", text="Top of File") - layout.item_enumO("TEXT_OT_move", "type", "FILE_BOTTOM", text="Bottom of File") + layout.item_enumO("text.move", "type", "FILE_TOP", text="Top of File") + layout.item_enumO("text.move", "type", "FILE_BOTTOM", text="Bottom of File") class TEXT_MT_edit_select(bpy.types.Menu): __space_type__ = "TEXT_EDITOR" @@ -148,8 +148,8 @@ class TEXT_MT_edit_select(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("TEXT_OT_select_all") - layout.itemO("TEXT_OT_select_line") + layout.itemO("text.select_all") + layout.itemO("text.select_line") class TEXT_MT_edit_markers(bpy.types.Menu): __space_type__ = "TEXT_EDITOR" @@ -158,9 +158,9 @@ class TEXT_MT_edit_markers(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("TEXT_OT_markers_clear") - layout.itemO("TEXT_OT_next_marker") - layout.itemO("TEXT_OT_previous_marker") + layout.itemO("text.markers_clear") + layout.itemO("text.next_marker") + layout.itemO("text.previous_marker") class TEXT_MT_format(bpy.types.Menu): __space_type__ = "TEXT_EDITOR" @@ -169,17 +169,17 @@ class TEXT_MT_format(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("TEXT_OT_indent") - layout.itemO("TEXT_OT_unindent") + layout.itemO("text.indent") + layout.itemO("text.unindent") layout.itemS() - layout.itemO("TEXT_OT_comment") - layout.itemO("TEXT_OT_uncomment") + layout.itemO("text.comment") + layout.itemO("text.uncomment") layout.itemS() - layout.item_menu_enumO("TEXT_OT_convert_whitespace", "type") + layout.item_menu_enumO("text.convert_whitespace", "type") class TEXT_MT_edit_to3d(bpy.types.Menu): __space_type__ = "TEXT_EDITOR" @@ -188,8 +188,8 @@ class TEXT_MT_edit_to3d(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.item_booleanO("TEXT_OT_to_3d_object", "split_lines", False, text="One Object"); - layout.item_booleanO("TEXT_OT_to_3d_object", "split_lines", True, text="One Object Per Line"); + layout.item_booleanO("text.to_3d_object", "split_lines", False, text="One Object"); + layout.item_booleanO("text.to_3d_object", "split_lines", True, text="One Object Per Line"); class TEXT_MT_edit(bpy.types.Menu): __space_type__ = "TEXT_EDITOR" @@ -202,14 +202,14 @@ class TEXT_MT_edit(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("ED_OT_undo") - layout.itemO("ED_OT_redo") + layout.itemO("ed.undo") + layout.itemO("ed.redo") layout.itemS() - layout.itemO("TEXT_OT_cut") - layout.itemO("TEXT_OT_copy") - layout.itemO("TEXT_OT_paste") + layout.itemO("text.cut") + layout.itemO("text.copy") + layout.itemO("text.paste") layout.itemS() @@ -219,8 +219,8 @@ class TEXT_MT_edit(bpy.types.Menu): layout.itemS() - layout.itemO("TEXT_OT_jump") - layout.itemO("TEXT_OT_properties") + layout.itemO("text.jump") + layout.itemO("text.properties") layout.itemS() diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index 77a25c0161e..eaa854ac7a8 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -8,19 +8,19 @@ class VIEW3D_MT_view_navigation(bpy.types.Menu): def draw(self, context): layout = self.layout - # layout.itemO("VIEW3D_OT_view_fly_mode") + # layout.itemO("view3d.view_fly_mode") # layout.itemS() - layout.items_enumO("VIEW3D_OT_view_orbit", "type") + layout.items_enumO("view3d.view_orbit", "type") layout.itemS() - layout.items_enumO("VIEW3D_OT_view_pan", "type") + layout.items_enumO("view3d.view_pan", "type") layout.itemS() - layout.item_floatO("VIEW3D_OT_zoom", "delta", 1.0, text="Zoom In") - layout.item_floatO("VIEW3D_OT_zoom", "delta", -1.0, text="Zoom Out") + layout.item_floatO("view3d.zoom", "delta", 1.0, text="Zoom In") + layout.item_floatO("view3d.zoom", "delta", -1.0, text="Zoom Out") class VIEW3D_MT_view(bpy.types.Menu): __space_type__ = "VIEW_3D" @@ -29,30 +29,30 @@ class VIEW3D_MT_view(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.itemO("VIEW3D_OT_properties", icon="ICON_MENU_PANEL") - layout.itemO("VIEW3D_OT_toolbar", icon="ICON_MENU_PANEL") + layout.itemO("view3d.properties", icon="ICON_MENU_PANEL") + layout.itemO("view3d.toolbar", icon="ICON_MENU_PANEL") layout.itemS() - layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "CAMERA") - layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "TOP") - layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "FRONT") - layout.item_enumO("VIEW3D_OT_viewnumpad", "type", "RIGHT") + layout.item_enumO("view3d.viewnumpad", "type", "CAMERA") + layout.item_enumO("view3d.viewnumpad", "type", "TOP") + layout.item_enumO("view3d.viewnumpad", "type", "FRONT") + layout.item_enumO("view3d.viewnumpad", "type", "RIGHT") # layout.itemM("VIEW3D_MT_view_cameras", text="Cameras") layout.itemS() - layout.itemO("VIEW3D_OT_view_persportho") + layout.itemO("view3d.view_persportho") layout.itemS() - # layout.itemO("VIEW3D_OT_view_show_all_layers") + # layout.itemO("view3d.view_show_all_layers") # layout.itemS() - # layout.itemO("VIEW3D_OT_view_local_view") - # layout.itemO("VIEW3D_OT_view_global_view") + # layout.itemO("view3d.view_local_view") + # layout.itemO("view3d.view_global_view") # layout.itemS() @@ -63,17 +63,17 @@ class VIEW3D_MT_view(bpy.types.Menu): layout.operator_context = "INVOKE_REGION_WIN" - layout.itemO("VIEW3D_OT_clip_border") - layout.itemO("VIEW3D_OT_zoom_border") + layout.itemO("view3d.clip_border") + layout.itemO("view3d.zoom_border") layout.itemS() - layout.itemO("VIEW3D_OT_view_center") - layout.itemO("VIEW3D_OT_view_all") + layout.itemO("view3d.view_center") + layout.itemO("view3d.view_all") layout.itemS() - layout.itemO("SCREEN_OT_screen_full_area") + layout.itemO("screen.screen_full_area") class VIEW3D_HT_header(bpy.types.Header): __space_type__ = "VIEW_3D" diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 990ba1eb6b6..1580052f697 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -15,12 +15,12 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("OBJECT_OT_duplicate") - layout.row().itemO("OBJECT_OT_delete") - layout.row().itemO("OBJECT_OT_mesh_add") - layout.row().itemO("OBJECT_OT_curve_add") - layout.row().itemO("OBJECT_OT_text_add") - layout.row().itemO("OBJECT_OT_surface_add") + layout.row().itemO("object.duplicate") + layout.row().itemO("object.delete") + layout.row().itemO("object.mesh_add") + layout.row().itemO("object.curve_add") + layout.row().itemO("object.text_add") + layout.row().itemO("object.surface_add") # ********** default tools for editmode_mesh **************** @@ -36,14 +36,14 @@ class VIEW3D_PT_tools_editmode_mesh(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("MESH_OT_duplicate") - layout.row().itemO("MESH_OT_delete") - layout.row().itemO("MESH_OT_spin") - layout.row().itemO("MESH_OT_screw") - layout.row().itemO("MESH_OT_primitive_plane_add") - layout.row().itemO("MESH_OT_primitive_cube_add") - layout.row().itemO("MESH_OT_primitive_circle_add") - layout.row().itemO("MESH_OT_primitive_cylinder_add") + layout.row().itemO("mesh.duplicate") + layout.row().itemO("mesh.delete") + layout.row().itemO("mesh.spin") + layout.row().itemO("mesh.screw") + layout.row().itemO("mesh.primitive_plane_add") + layout.row().itemO("mesh.primitive_cube_add") + layout.row().itemO("mesh.primitive_circle_add") + layout.row().itemO("mesh.primitive_cylinder_add") # ********** default tools for editmode_curve **************** @@ -59,10 +59,10 @@ class VIEW3D_PT_tools_editmode_curve(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("CURVE_OT_duplicate") - layout.row().itemO("CURVE_OT_delete") - layout.row().itemO("OBJECT_OT_curve_add") - layout.row().itemO("CURVE_OT_subdivide") + layout.row().itemO("curve.duplicate") + layout.row().itemO("curve.delete") + layout.row().itemO("object.curve_add") + layout.row().itemO("curve.subdivide") # ********** default tools for editmode_surface **************** @@ -78,10 +78,10 @@ class VIEW3D_PT_tools_editmode_surface(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("CURVE_OT_duplicate") - layout.row().itemO("CURVE_OT_delete") - layout.row().itemO("OBJECT_OT_surface_add") - layout.row().itemO("CURVE_OT_subdivide") + layout.row().itemO("curve.duplicate") + layout.row().itemO("curve.delete") + layout.row().itemO("object.surface_add") + layout.row().itemO("curve.subdivide") # ********** default tools for editmode_text **************** @@ -97,10 +97,10 @@ class VIEW3D_PT_tools_editmode_text(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("FONT_OT_text_copy") - layout.row().itemO("FONT_OT_text_paste") - layout.row().itemO("FONT_OT_case_set") - layout.row().itemO("FONT_OT_style_toggle") + layout.row().itemO("font.text_copy") + layout.row().itemO("font.text_paste") + layout.row().itemO("font.case_set") + layout.row().itemO("font.style_toggle") # ********** default tools for editmode_armature **************** @@ -116,10 +116,10 @@ class VIEW3D_PT_tools_editmode_armature(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("ARMATURE_OT_duplicate_selected") - layout.row().itemO("ARMATURE_OT_bone_primitive_add") - layout.row().itemO("ARMATURE_OT_delete") - layout.row().itemO("ARMATURE_OT_parent_clear") + layout.row().itemO("armature.duplicate_selected") + layout.row().itemO("armature.bone_primitive_add") + layout.row().itemO("armature.delete") + layout.row().itemO("armature.parent_clear") # ********** default tools for editmode_mball **************** @@ -167,10 +167,10 @@ class VIEW3D_PT_tools_posemode(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("POSE_OT_hide") - layout.row().itemO("POSE_OT_reveal") - layout.row().itemO("POSE_OT_rot_clear") - layout.row().itemO("POSE_OT_loc_clear") + layout.row().itemO("pose.hide") + layout.row().itemO("pose.reveal") + layout.row().itemO("pose.rot_clear") + layout.row().itemO("pose.loc_clear") # ********** default tools for sculptmode **************** @@ -186,7 +186,7 @@ class VIEW3D_PT_tools_sculptmode(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("SCULPT_OT_radial_control") + layout.row().itemO("sculpt.radial_control") # ********** default tools for weightpaint **************** @@ -202,7 +202,7 @@ class VIEW3D_PT_tools_weightpaint(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("PAINT_OT_weight_paint_radial_control") + layout.row().itemO("paint.weight_paint_radial_control") # ********** default tools for vertexpaint **************** @@ -218,7 +218,7 @@ class VIEW3D_PT_tools_vertexpaint(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("PAINT_OT_vertex_paint_radial_control") + layout.row().itemO("paint.vertex_paint_radial_control") # ********** default tools for texturepaint **************** @@ -234,7 +234,7 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel): def draw(self, context): layout = self.layout - layout.row().itemO("PAINT_OT_texture_paint_radial_control") + layout.row().itemO("paint.texture_paint_radial_control") bpy.types.register(VIEW3D_PT_tools_objectmode) diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index a07c447c718..8fcd69c67c7 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -65,7 +65,7 @@ static void bpy_init_modules( void ) /* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */ PyModule_AddObject( mod, "types", BPY_rna_types() ); PyModule_AddObject( mod, "props", BPY_rna_props() ); - PyModule_AddObject( mod, "ops", BPY_operator_module() ); + PyModule_AddObject( mod, "__ops__", BPY_operator_module() ); /* ops is now a python module that does the conversion from SOME_OT_foo -> some.foo */ PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very experimental, consider this a test, especially PyCObject is not meant to be permanent /* add the module so we can import it */ diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 34269db7f94..e62dda03e09 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -436,9 +436,16 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) PyObject *pyrna_func_to_py(BPy_StructRNA *pyrna, FunctionRNA *func) { static PyMethodDef func_meth = {"", (PyCFunction)pyrna_func_call, METH_VARARGS|METH_KEYWORDS, "python rna function"}; - PyObject *self= PyTuple_New(2); + PyObject *self; PyObject *ret; + + if(func==NULL) { + PyErr_Format( PyExc_RuntimeError, "%.200s: type attempted to get NULL function", RNA_struct_identifier(pyrna->ptr.type)); + return NULL; + } + self= PyTuple_New(2); + PyTuple_SET_ITEM(self, 0, (PyObject *)pyrna); Py_INCREF(pyrna); @@ -1912,6 +1919,17 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) const char *parm_id; void *retdata= NULL; + /* Should never happen but it does in rare cases */ + if(self_ptr==NULL) { + PyErr_SetString(PyExc_RuntimeError, "rna functions internal rna pointer is NULL, this is a bug. aborting"); + return NULL; + } + + if(self_func==NULL) { + PyErr_Format(PyExc_RuntimeError, "%.200s.???(): rna function internal function is NULL, this is a bug. aborting", RNA_struct_identifier(self_ptr->type)); + return NULL; + } + /* setup */ RNA_pointer_create(NULL, &RNA_Function, self_func, &funcptr); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index c72da8fe593..a5e1df1669a 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -149,6 +149,8 @@ void WM_operator_properties_free(struct PointerRNA *ptr); /* operator as a python command (resultuing string must be free'd) */ char *WM_operator_pystring(struct wmOperator *op); +void WM_operator_bl_idname(char *to, char *from); +void WM_operator_bl_idname(char *to, char *from); /* default operator callbacks for border/circle/lasso */ int WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 4dbe26bb79f..57c090f29ed 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -30,6 +30,8 @@ #define _USE_MATH_DEFINES #include #include +#include +#include #include "DNA_ID.h" #include "DNA_screen_types.h" @@ -82,17 +84,21 @@ static ListBase global_ops= {NULL, NULL}; /* ************ operator API, exported ********** */ + wmOperatorType *WM_operatortype_find(const char *idname, int quiet) { wmOperatorType *ot; + char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax + WM_operator_bl_idname(idname_bl, idname); + for(ot= global_ops.first; ot; ot= ot->next) { - if(strncmp(ot->idname, idname, OP_MAX_TYPENAME)==0) + if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0) return ot; } if(!quiet) - printf("search for unknown operator %s\n", idname); + printf("search for unknown operator %s, %s\n", idname_bl, idname); return NULL; } @@ -101,8 +107,11 @@ wmOperatorType *WM_operatortype_exists(const char *idname) { wmOperatorType *ot; + char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax + WM_operator_bl_idname(idname_bl, idname); + for(ot= global_ops.first; ot; ot= ot->next) { - if(strncmp(ot->idname, idname, OP_MAX_TYPENAME)==0) + if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0) return ot; } return NULL; @@ -152,11 +161,51 @@ int WM_operatortype_remove(const char *idname) return 1; } +/* SOME_OT_op -> some.op */ +void WM_operator_py_idname(char *to, char *from) +{ + char *sep= strstr(from, "_OT_"); + if(sep) { + int i, ofs= (sep-from); + + for(i=0; i SOME_OT_op */ +void WM_operator_bl_idname(char *to, char *from) +{ + char *sep= strstr(from, "."); + + if(sep) { + int i, ofs= (sep-from); + + for(i=0; iidname); + WM_operator_py_idname(idname_py, op->idname); + BLI_dynstr_appendf(dynstr, "bpy.ops.%s(", idname_py); iterprop= RNA_struct_iterator_property(op->ptr->type); From 802ca7f639615edf082128206f790985edfe4237 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Jul 2009 12:35:57 +0000 Subject: [PATCH 235/512] patch from William, adds some rna user prefs and adjusts prefs UI. --- release/ui/buttons_material.py | 79 ++-- release/ui/space_info.py | 354 ++++++++++-------- .../editors/space_console/space_console.c | 2 +- source/blender/makesrna/intern/rna_userdef.c | 38 +- 4 files changed, 269 insertions(+), 204 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index c2e94b39964..2fd6cffe5be 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -55,7 +55,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): class MATERIAL_PT_material(MaterialButtonsPanel): __idname__= "MATERIAL_PT_material" - __label__ = "Material" + __label__ = "Shading" def draw(self, context): layout = self.layout @@ -68,15 +68,41 @@ class MATERIAL_PT_material(MaterialButtonsPanel): if mat: layout.itemR(mat, "type", expand=True) - layout.itemR(mat, "alpha", slider=True) - row = layout.row() - row.active = mat.type in ('SURFACE', 'VOLUME') - row.itemR(mat, "shadeless") - row.itemR(mat, "wireframe") - rowsub = row.row() - rowsub.active = mat.shadeless== False - rowsub.itemR(mat, "tangent_shading") + +# row = layout.row() + + if mat.type == 'SURFACE': + split = layout.split() + + sub = split.column() + sub.itemR(mat, "alpha", slider=True) + sub.itemR(mat, "ambient", slider=True) + sub.itemR(mat, "emit") + sub.itemR(mat, "translucency", slider=True) + + sub = split.column() + sub.itemR(mat, "shadeless") + sub.itemR(mat, "wireframe") + sub.itemR(mat, "tangent_shading") + sub.itemR(mat, "cubic", slider=True) + elif mat.type == 'VOLUME': + split = layout.split() + + sub = split.column() + sub.itemR(mat, "alpha", slider=True) + sub.itemR(mat, "ambient", slider=True) + sub.itemR(mat, "emit") + sub.itemR(mat, "translucency", slider=True) + + sub = split.column() + sub.itemR(mat, "shadeless") + sub.itemR(mat, "wireframe") + sub.itemR(mat, "tangent_shading") + sub.itemR(mat, "cubic", slider=True) + elif mat.type == 'HALO': + layout.itemR(mat, "alpha", slider=True) + class MATERIAL_PT_strand(MaterialButtonsPanel): __idname__= "MATERIAL_PT_strand" @@ -126,6 +152,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel): sub.itemR(mat, "full_oversampling") sub.itemR(mat, "sky") sub.itemR(mat, "exclude_mist") + sub = split.column() sub.itemR(mat, "face_texture") colsub = sub.column() colsub.active = mat.face_texture @@ -134,14 +161,26 @@ class MATERIAL_PT_options(MaterialButtonsPanel): sub.itemR(mat, "light_group") sub.itemR(mat, "light_group_exclusive") + + + +class MATERIAL_PT_shadows(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_shadows" + __label__ = "Shadows" + + def draw(self, context): + layout = self.layout + mat = context.material + + split = layout.split() + sub = split.column() - sub.itemL(text="Shadows:") sub.itemR(mat, "shadows", text="Recieve") sub.itemR(mat, "transparent_shadows", text="Recieve Transparent") sub.itemR(mat, "only_shadow", text="Shadows Only") sub.itemR(mat, "cast_shadows_only", text="Cast Only") sub.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) - + sub = split.column() sub.itemR(mat, "ray_shadow_bias", text="Auto Ray Bias") colsub = sub.column() colsub.active = not mat.ray_shadow_bias @@ -149,6 +188,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel): sub.itemR(mat, "cast_buffer_shadows") sub.itemR(mat, "shadow_buffer_bias", text="Buffer Bias") + class MATERIAL_PT_diffuse(MaterialButtonsPanel): __idname__= "MATERIAL_PT_diffuse" __label__ = "Diffuse" @@ -165,19 +205,15 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): sub = split.column() sub.itemR(mat, "diffuse_color", text="") - sub.itemR(mat, "object_color") - colsub = sub.column() - colsub.active = mat.shadeless== False - colsub.itemR(mat, "ambient", slider=True) - colsub.itemR(mat, "emit") - sub.itemR(mat, "translucency", slider=True) + sub.itemR(mat, "vertex_color_paint") + sub.itemR(mat, "vertex_color_light") sub = split.column() sub.active = mat.shadeless== False sub.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) - sub.itemR(mat, "vertex_color_light") - sub.itemR(mat, "vertex_color_paint") - sub.itemR(mat, "cubic") + sub.itemR(mat, "object_color") + + row = layout.row() row.active = mat.shadeless== False @@ -235,8 +271,6 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): sub.itemR(mat, "specular_ior", text="IOR") if mat.spec_shader == 'WARDISO': sub.itemR(mat, "specular_slope", text="Slope") - sub = split.column() - sub.itemR(mat, "specular_hardness", text="Hardness") if mat.spec_shader == 'TOON': sub.itemR(mat, "specular_toon_size", text="Size") sub = split.column() @@ -438,3 +472,4 @@ bpy.types.register(MATERIAL_PT_sss) bpy.types.register(MATERIAL_PT_halo) bpy.types.register(MATERIAL_PT_strand) bpy.types.register(MATERIAL_PT_options) +bpy.types.register(MATERIAL_PT_shadows) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index 04a91bf92d3..c51be1e4db8 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -134,89 +134,92 @@ class INFO_PT_view(bpy.types.Panel): split = layout.split() col = split.column() - col.itemL(text="Display:") - col.itemR(view, "tooltips") - col.itemR(view, "display_object_info", text="Object Info") - col.itemR(view, "use_large_cursors") - col.itemR(view, "show_view_name", text="View Name") - col.itemR(view, "show_playback_fps", text="Playback FPS") - col.itemR(view, "global_scene") - col.itemR(view, "pin_floating_panels") - col.itemR(view, "object_center_size") - col.itemS() - col.itemS() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemL(text="Display:") + colsplitcol.itemR(view, "tooltips") + colsplitcol.itemR(view, "display_object_info", text="Object Info") + colsplitcol.itemR(view, "use_large_cursors") + colsplitcol.itemR(view, "show_view_name", text="View Name") + colsplitcol.itemR(view, "show_playback_fps", text="Playback FPS") + colsplitcol.itemR(view, "global_scene") + colsplitcol.itemR(view, "pin_floating_panels") + colsplitcol.itemR(view, "object_center_size") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() - col.itemL(text="Menus:") - col.itemR(view, "open_mouse_over") - col.itemL(text="Menu Open Delay:") - col.itemR(view, "open_toplevel_delay", text="Top Level") - col.itemR(view, "open_sublevel_delay", text="Sub Level") - - - col = split.column() - - col.itemL(text="View Manipulation:") - col.itemR(view, "auto_depth") - col.itemR(view, "global_pivot") - col.itemR(view, "zoom_to_mouse") - col.itemL(text="Zoom Style:") - row = col.row() - row.itemR(view, "viewport_zoom_style", expand=True) - col.itemL(text="Orbit Style:") - row = col.row() - row.itemR(view, "view_rotation", expand=True) - col.itemR(view, "perspective_orthographic_switch") - col.itemR(view, "smooth_view") - col.itemR(view, "rotation_angle") - col.itemL(text="NDOF Device:") - col.itemR(view, "ndof_pan_speed", text="Pan Speed") - col.itemR(view, "ndof_rotate_speed", text="Orbit Speed") - - col = split.column() - col.itemL(text="Snap:") - col.itemR(view, "snap_translate", text="Translate") - col.itemR(view, "snap_rotate", text="Rotate") - col.itemR(view, "snap_scale", text="Scale") - col.itemS() - col.itemS() - - col.itemL(text="Mouse Buttons:") - col.itemR(view, "left_mouse_button_select") - col.itemR(view, "right_mouse_button_select") - col.itemR(view, "emulate_3_button_mouse") - col.itemR(view, "use_middle_mouse_paste") - col.itemR(view, "middle_mouse_rotate") - col.itemR(view, "middle_mouse_pan") - col.itemR(view, "wheel_invert_zoom") - col.itemR(view, "wheel_scroll_lines") - - - col = split.column() - #Axis - col.itemL(text="Mini Axis:") - col.itemR(view, "show_mini_axis") - colsub = col.column() + colsplitcol.itemR(view, "show_mini_axis") + colsub = colsplitcol.column() colsub.enabled = view.show_mini_axis colsub.itemR(view, "mini_axis_size") colsub.itemR(view, "mini_axis_brightness") - col.itemS() - col.itemS() + + + + + col = split.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemL(text="View Manipulation:") + colsplitcol.itemR(view, "auto_depth") + colsplitcol.itemR(view, "global_pivot") + colsplitcol.itemR(view, "zoom_to_mouse") + colsplitcol.itemL(text="Zoom Style:") + row = colsplitcol.row() + row.itemR(view, "viewport_zoom_style", expand=True) + colsplitcol.itemL(text="Orbit Style:") + row = colsplitcol.row() + row.itemR(view, "view_rotation", expand=True) + colsplitcol.itemR(view, "perspective_orthographic_switch") + colsplitcol.itemR(view, "smooth_view") + colsplitcol.itemR(view, "rotation_angle") + colsplitcol.itemL(text="NDOF Device:") + colsplitcol.itemR(view, "ndof_pan_speed", text="Pan Speed") + colsplitcol.itemR(view, "ndof_rotate_speed", text="Orbit Speed") + + col = split.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemL(text="Mouse Buttons:") + colsplitcol.itemR(view, "left_mouse_button_select") + colsplitcol.itemR(view, "right_mouse_button_select") + colsplitcol.itemR(view, "emulate_3_button_mouse") + colsplitcol.itemR(view, "use_middle_mouse_paste") + colsplitcol.itemR(view, "middle_mouse_rotate") + colsplitcol.itemR(view, "middle_mouse_pan") + colsplitcol.itemR(view, "wheel_invert_zoom") + colsplitcol.itemR(view, "wheel_scroll_lines") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() + + colsplitcol.itemL(text="Menus:") + colsplitcol.itemR(view, "open_mouse_over") + colsplitcol.itemL(text="Menu Open Delay:") + colsplitcol.itemR(view, "open_toplevel_delay", text="Top Level") + colsplitcol.itemR(view, "open_sublevel_delay", text="Sub Level") + + + col = split.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() #manipulator - col.itemL(text="Manipulator:") - col.itemR(view, "use_manipulator") - colsub = col.column() + colsplitcol.itemR(view, "use_manipulator") + colsub = colsplitcol.column() colsub.enabled = view.use_manipulator colsub.itemR(view, "manipulator_size", text="Size") colsub.itemR(view, "manipulator_handle_size", text="Handle Size") colsub.itemR(view, "manipulator_hotspot", text="Hotspot") - col.itemS() - col.itemS() + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() - col.itemL(text="Toolbox:") - col.itemR(view, "use_column_layout") - col.itemL(text="Open Toolbox Delay:") - col.itemR(view, "open_left_mouse_delay", text="Hold LMB") - col.itemR(view, "open_right_mouse_delay", text="Hold RMB") + colsplitcol.itemL(text="Toolbox:") + colsplitcol.itemR(view, "use_column_layout") + colsplitcol.itemL(text="Open Toolbox Delay:") + colsplitcol.itemR(view, "open_left_mouse_delay", text="Hold LMB") + colsplitcol.itemR(view, "open_right_mouse_delay", text="Hold RMB") class INFO_PT_edit(bpy.types.Panel): @@ -232,70 +235,90 @@ class INFO_PT_edit(bpy.types.Panel): layout = self.layout userpref = context.user_preferences edit = userpref.edit - + view = userpref.view + split = layout.split() col = split.column() - #Materials - col.itemL(text="Materials:") - col.itemR(edit, "material_linked_object", text="Linked to Object") - col.itemR(edit, "material_linked_obdata", text="Linked to ObData") - col.itemS() - col.itemS() - - #New Objects - col.itemL(text="New Objects:") - col.itemR(edit, "enter_edit_mode") - col.itemR(edit, "align_to_view") - col.itemS() - col.itemS() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + + colsplitcol.itemL(text="Materials:") + colsplitcol.itemR(edit, "material_linked_object", text="Linked to Object") + colsplitcol.itemR(edit, "material_linked_obdata", text="Linked to ObData") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() - #Tranform - col.itemL(text="Transform:") - col.itemR(edit, "drag_immediately") - col.itemS() - col.itemS() + colsplitcol.itemL(text="New Objects:") + colsplitcol.itemR(edit, "enter_edit_mode") + colsplitcol.itemR(edit, "align_to_view") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() - #undo - col.itemL(text="Undo:") - col.itemR(edit, "global_undo") - col.itemR(edit, "undo_steps", text="Steps") - col.itemR(edit, "undo_memory_limit", text="Memory Limit") + colsplitcol.itemL(text="Transform:") + colsplitcol.itemR(edit, "drag_immediately") col = split.column() - #keying - col.itemL(text="Keyframing:") - col.itemR(edit, "use_visual_keying") - col.itemR(edit, "new_interpolation_type") - col.itemR(edit, "auto_keying_enable", text="Auto Keyframing") - colsub = col.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemL(text="Snap:") + colsplitcol.itemR(edit, "snap_translate", text="Translate") + colsplitcol.itemR(edit, "snap_rotate", text="Rotate") + colsplitcol.itemR(edit, "snap_scale", text="Scale") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() + + colsplitcol.itemL(text="Grease Pencil:") + colsplitcol.itemR(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance") + colsplitcol.itemR(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance") + colsplitcol.itemR(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke") + colsplitcol.itemR(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke") + colsplitcol.itemR(edit, "grease_pencil_eraser_radius", text="Eraser Radius") + + + col = split.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + + colsplitcol.itemL(text="Keyframing:") + colsplitcol.itemR(edit, "use_visual_keying") + colsplitcol.itemR(edit, "new_interpolation_type") + colsplitcol.itemR(edit, "auto_keying_enable", text="Auto Keyframing") + colsub = colsplitcol.column() colsub.enabled = edit.auto_keying_enable row = colsub.row() row.itemR(edit, "auto_keying_mode", expand=True) colsub.itemR(edit, "auto_keyframe_insert_available", text="Only Insert Available") colsub.itemR(edit, "auto_keyframe_insert_needed", text="Only Insert Needed") - col.itemS() - col.itemS() - #greasepencil - col.itemL(text="Grease Pencil:") - col.itemR(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance") - col.itemR(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance") - col.itemR(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke") - col.itemR(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke") - col.itemR(edit, "grease_pencil_eraser_radius", text="Eraser Radius") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() + + colsplitcol.itemL(text="Undo:") + colsplitcol.itemR(edit, "global_undo") + colsplitcol.itemR(edit, "undo_steps", text="Steps") + colsplitcol.itemR(edit, "undo_memory_limit", text="Memory Limit") + colsplitcol.itemS() + colsplitcol.itemS() + colsplitcol.itemS() + col = split.column() - #Diplicate - col.itemL(text="Duplicate:") - col.itemR(edit, "duplicate_mesh", text="Mesh") - col.itemR(edit, "duplicate_surface", text="Surface") - col.itemR(edit, "duplicate_curve", text="Curve") - col.itemR(edit, "duplicate_text", text="Text") - col.itemR(edit, "duplicate_metaball", text="Metaball") - col.itemR(edit, "duplicate_armature", text="Armature") - col.itemR(edit, "duplicate_lamp", text="Lamp") - col.itemR(edit, "duplicate_material", text="Material") - col.itemR(edit, "duplicate_texture", text="Texture") - col.itemR(edit, "duplicate_ipo", text="F-Curve") - col.itemR(edit, "duplicate_action", text="Action") + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemL(text="Duplicate:") + colsplitcol.itemR(edit, "duplicate_mesh", text="Mesh") + colsplitcol.itemR(edit, "duplicate_surface", text="Surface") + colsplitcol.itemR(edit, "duplicate_curve", text="Curve") + colsplitcol.itemR(edit, "duplicate_text", text="Text") + colsplitcol.itemR(edit, "duplicate_metaball", text="Metaball") + colsplitcol.itemR(edit, "duplicate_armature", text="Armature") + colsplitcol.itemR(edit, "duplicate_lamp", text="Lamp") + colsplitcol.itemR(edit, "duplicate_material", text="Material") + colsplitcol.itemR(edit, "duplicate_texture", text="Texture") + colsplitcol.itemR(edit, "duplicate_ipo", text="F-Curve") + colsplitcol.itemR(edit, "duplicate_action", text="Action") class INFO_PT_system(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" @@ -314,48 +337,51 @@ class INFO_PT_system(bpy.types.Panel): split = layout.split() col = split.column() - - col.itemR(system, "emulate_numpad") - col.itemS() - col.itemS() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemR(system, "emulate_numpad") + colsplitcol.itemS() + colsplitcol.itemS() #Weight Colors - col.itemL(text="Weight Colors:") - col.itemR(system, "use_weight_color_range", text="Use Custom Range") - col.itemR(system, "weight_color_range") - col.itemS() - col.itemS() + colsplitcol.itemL(text="Weight Colors:") + colsplitcol.itemR(system, "use_weight_color_range", text="Use Custom Range") + colsplitcol.itemR(system, "weight_color_range") + colsplitcol.itemS() + colsplitcol.itemS() #sequencer - col.itemL(text="Sequencer:") - col.itemR(system, "prefetch_frames") - col.itemR(system, "memory_cache_limit") + colsplitcol.itemL(text="Sequencer:") + colsplitcol.itemR(system, "prefetch_frames") + colsplitcol.itemR(system, "memory_cache_limit") col = split.column() - + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() #System - col.itemL(text="System:") - col.itemR(lan, "dpi") - col.itemR(system, "enable_all_codecs") - col.itemR(system, "auto_run_python_scripts") - col.itemR(system, "frame_server_port") - col.itemR(system, "game_sound") - col.itemR(system, "filter_file_extensions") - col.itemR(system, "hide_dot_files_datablocks") - col.itemR(system, "audio_mixing_buffer") + colsplitcol.itemL(text="System:") + colsplitcol.itemR(lan, "dpi") + colsplitcol.itemR(system, "enable_all_codecs") + colsplitcol.itemR(system, "auto_run_python_scripts") + colsplitcol.itemR(system, "frame_server_port") + colsplitcol.itemR(system, "game_sound") + colsplitcol.itemR(system, "filter_file_extensions") + colsplitcol.itemR(system, "hide_dot_files_datablocks") + colsplitcol.itemR(system, "audio_mixing_buffer") col = split.column() - + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() #OpenGL - col.itemL(text="OpenGL:") - col.itemR(system, "clip_alpha", slider=True) - col.itemR(system, "use_mipmaps") - col.itemL(text="Windom Draw Method:") - row = col.row() + colsplitcol.itemL(text="OpenGL:") + colsplitcol.itemR(system, "clip_alpha", slider=True) + colsplitcol.itemR(system, "use_mipmaps") + colsplitcol.itemL(text="Windom Draw Method:") + row = colsplitcol.row() row.itemR(system, "window_draw_method", expand=True) - col.itemL(text="Textures:") - col.itemR(system, "gl_texture_limit", text="Limit") - col.itemR(system, "texture_time_out", text="Time Out") - col.itemR(system, "texture_collection_rate", text="Collection Rate") + colsplitcol.itemL(text="Textures:") + colsplitcol.itemR(system, "gl_texture_limit", text="Limit") + colsplitcol.itemR(system, "texture_time_out", text="Time Out") + colsplitcol.itemR(system, "texture_collection_rate", text="Collection Rate") class INFO_PT_filepaths(bpy.types.Panel): __space_type__ = "USER_PREFERENCES" @@ -400,13 +426,17 @@ class INFO_PT_autosave(bpy.types.Panel): split = layout.split() col = split.column() - col.itemR(save, "save_version") - col.itemR(save, "recent_files") - col.itemR(save, "save_preview_images") + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemR(save, "save_version") + colsplitcol.itemR(save, "recent_files") + colsplitcol.itemR(save, "save_preview_images") col = split.column() - col.itemR(save, "auto_save_temporary_files") - colsub = col.column() + colsplit = col.split(percentage=0.8) + colsplitcol = colsplit.column() + colsplitcol.itemR(save, "auto_save_temporary_files") + colsub = colsplitcol.column() colsub.enabled = save.auto_save_temporary_files colsub.itemR(save, "auto_save_time") diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 4585eef2579..6bc948a880a 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -97,7 +97,7 @@ static SpaceLink *console_new(const bContext *C) ar->regiontype= RGN_TYPE_WINDOW; - ar->v2d.scroll |= (V2D_SCROLL_LEFT); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT); ar->v2d.align |= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */ ar->v2d.keepofs |= V2D_LOCKOFS_X; ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index ffe3751908d..5235883e408 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1579,27 +1579,14 @@ static void rna_def_userdef_view(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "uiflag", USER_MENUFIXEDORDER); RNA_def_property_ui_text(prop, "Contents Follow Opening Direction", "Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction."); - /* snap to grid */ - prop= RNA_def_property(srna, "snap_translate", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOGRABGRID); - RNA_def_property_ui_text(prop, "Enable Translation Snap", "Snap objects and sub-objects to grid units when moving."); - - prop= RNA_def_property(srna, "snap_rotate", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOROTGRID); - RNA_def_property_ui_text(prop, "Enable Rotation Snap", "Snap objects and sub-objects to grid units when rotating."); - - prop= RNA_def_property(srna, "snap_scale", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSIZEGRID); - RNA_def_property_ui_text(prop, "Enable Scaling Snap", "Snap objects and sub-objects to grid units when scaling."); + prop= RNA_def_property(srna, "global_pivot", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_LOCKAROUND); + RNA_def_property_ui_text(prop, "Global Pivot", "Lock the same rotation/scaling pivot in all 3D Views."); prop= RNA_def_property(srna, "auto_depth", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ORBIT_ZBUF); RNA_def_property_ui_text(prop, "Auto Depth", "Use the depth under the mouse to improve view pan/rotate/zoom functionality."); - prop= RNA_def_property(srna, "global_pivot", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_LOCKAROUND); - RNA_def_property_ui_text(prop, "Global Pivot", "Lock the same rotation/scaling pivot in all 3D Views."); - /* view zoom */ prop= RNA_def_property(srna, "viewport_zoom_style", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "viewzoom"); @@ -1778,6 +1765,19 @@ static void rna_def_userdef_edit(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_GLOBALUNDO); RNA_def_property_ui_text(prop, "Global Undo", "Global undo works by keeping a full copy of the file itself in memory, so takes extra memory."); + /* snap to grid */ + prop= RNA_def_property(srna, "snap_translate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOGRABGRID); + RNA_def_property_ui_text(prop, "Enable Translation Snap", "Snap objects and sub-objects to grid units when moving."); + + prop= RNA_def_property(srna, "snap_rotate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOROTGRID); + RNA_def_property_ui_text(prop, "Enable Rotation Snap", "Snap objects and sub-objects to grid units when rotating."); + + prop= RNA_def_property(srna, "snap_scale", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSIZEGRID); + RNA_def_property_ui_text(prop, "Enable Scaling Snap", "Snap objects and sub-objects to grid units when scaling."); + prop= RNA_def_property(srna, "auto_keying_enable", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "autokey_mode", AUTOKEY_ON); RNA_def_property_ui_text(prop, "Auto Keying Enable", "Automatic keyframe insertion for Objects and Bones."); @@ -2176,9 +2176,9 @@ void RNA_def_userdef(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem user_pref_sections[] = { - {0, "VIEW_CONTROLS", 0, "View & Controls", ""}, - {1, "EDIT_METHODS", 0, "Edit Methods", ""}, - {2, "LANGUAGE_COLORS", 0, "Language & Colors", ""}, + {0, "VIEW_CONTROLS", 0, "View", ""}, + {1, "EDIT_METHODS", 0, "Editing", ""}, + {2, "LANGUAGE_COLORS", 0, "Language", ""}, {3, "AUTO_SAVE", 0, "Auto Save", ""}, {4, "SYSTEM_OPENGL", 0, "System & OpenGL", ""}, {5, "FILE_PATHS", 0, "File Paths", ""}, From 4fb20358e4ea562fd4e13ca46a550a590a762255 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Fri, 17 Jul 2009 18:35:49 +0000 Subject: [PATCH 236/512] Source code with executable property, manual fix. *sigh* --- source/blender/python/generic/BGL.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 source/blender/python/generic/BGL.h diff --git a/source/blender/python/generic/BGL.h b/source/blender/python/generic/BGL.h old mode 100755 new mode 100644 From ffdd2d12ce79f778aaab462209921db8abb27cb1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 04:09:23 +0000 Subject: [PATCH 237/512] patch from oxben (Benjamin) * fixes two typos in the material buttons: "Recieve" -> "Receive" * adds a missing preference in the User Preferences view: "Rotate Around Selected" --- release/ui/buttons_material.py | 4 ++-- release/ui/space_info.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 2fd6cffe5be..52a10f1e37e 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -175,8 +175,8 @@ class MATERIAL_PT_shadows(MaterialButtonsPanel): split = layout.split() sub = split.column() - sub.itemR(mat, "shadows", text="Recieve") - sub.itemR(mat, "transparent_shadows", text="Recieve Transparent") + sub.itemR(mat, "shadows", text="Receive") + sub.itemR(mat, "transparent_shadows", text="Receive Transparent") sub.itemR(mat, "only_shadow", text="Shadows Only") sub.itemR(mat, "cast_shadows_only", text="Cast Only") sub.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) diff --git a/release/ui/space_info.py b/release/ui/space_info.py index c51be1e4db8..55ce80e857f 100644 --- a/release/ui/space_info.py +++ b/release/ui/space_info.py @@ -165,6 +165,7 @@ class INFO_PT_view(bpy.types.Panel): colsplitcol.itemR(view, "auto_depth") colsplitcol.itemR(view, "global_pivot") colsplitcol.itemR(view, "zoom_to_mouse") + colsplitcol.itemR(view, "rotate_around_selection") colsplitcol.itemL(text="Zoom Style:") row = colsplitcol.row() row.itemR(view, "viewport_zoom_style", expand=True) From d1bafa00c62a3984421617146a9fed0a7671f8e9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 18 Jul 2009 04:16:51 +0000 Subject: [PATCH 238/512] 2.5 - Quick fix for NLA drawing When some object had materials that may have been driven/animated, a crash could sometimes occur if some material-slot had no material. --- .../blender/editors/animation/anim_filter.c | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 42943475a57..ecc8012f3ec 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -1471,18 +1471,20 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int for (a=0; a < ob->totcol; a++) { Material *ma= give_current_material(ob, a); - /* if material has relevant animation data, break */ - ANIMDATA_FILTER_CASES(ma, - { - /* for the special AnimData blocks only case, we only need to add - * the block if it is valid... then other cases just get skipped (hence ok=0) - */ - ANIMDATA_ADD_ANIMDATA(ma); - matOk=0; - }, - matOk= 1;, - matOk= 1;, - matOk= 1;) + if (ma) { + /* if material has relevant animation data, break */ + ANIMDATA_FILTER_CASES(ma, + { + /* for the special AnimData blocks only case, we only need to add + * the block if it is valid... then other cases just get skipped (hence ok=0) + */ + ANIMDATA_ADD_ANIMDATA(ma); + matOk=0; + }, + matOk= 1;, + matOk= 1;, + matOk= 1;) + } if (matOk) break; From 7018af51cdc1acea9ef7c059125bd046bf24757b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 05:26:47 +0000 Subject: [PATCH 239/512] removed BeOS dirs (BeOS isn't supported anymore) removed unneeded includes for the console. --- release/beos-4.5-i386/specific.sh | 36 ------------------- release/beos-5.0-i386/specific.sh | 36 ------------------- source/blender/editors/space_console/Makefile | 4 --- .../blender/editors/space_console/SConscript | 16 ++++++--- 4 files changed, 12 insertions(+), 80 deletions(-) delete mode 100755 release/beos-4.5-i386/specific.sh delete mode 100755 release/beos-5.0-i386/specific.sh diff --git a/release/beos-4.5-i386/specific.sh b/release/beos-4.5-i386/specific.sh deleted file mode 100755 index 9ce063b27a9..00000000000 --- a/release/beos-4.5-i386/specific.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# -# $Id$ -# -# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# -# OS specific stuff for the package, only to be executed by ../Makefile - -# Add Python .so to package -cp -f $NAN_PYTHON/lib/libpython$NAN_PYTHON_VERSION.so $DISTDIR/ - -# And create a drag'n'drop symlink for it -cd $DISTDIR && ln -s /boot/home/config/lib Drag_libpython$NAN_PYTHON_VERSION.so_here diff --git a/release/beos-5.0-i386/specific.sh b/release/beos-5.0-i386/specific.sh deleted file mode 100755 index 9ce063b27a9..00000000000 --- a/release/beos-5.0-i386/specific.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# -# $Id$ -# -# ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# -# OS specific stuff for the package, only to be executed by ../Makefile - -# Add Python .so to package -cp -f $NAN_PYTHON/lib/libpython$NAN_PYTHON_VERSION.so $DISTDIR/ - -# And create a drag'n'drop symlink for it -cd $DISTDIR && ln -s /boot/home/config/lib Drag_libpython$NAN_PYTHON_VERSION.so_here diff --git a/source/blender/editors/space_console/Makefile b/source/blender/editors/space_console/Makefile index 052dd360c9c..19ca75beaf8 100644 --- a/source/blender/editors/space_console/Makefile +++ b/source/blender/editors/space_console/Makefile @@ -35,7 +35,6 @@ include nan_compile.mk CFLAGS += $(LEVEL_1_C_WARNINGS) -CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) # not very neat.... @@ -45,10 +44,7 @@ CPPFLAGS += -I../../blenkernel CPPFLAGS += -I../../blenlib CPPFLAGS += -I../../makesdna CPPFLAGS += -I../../makesrna -CPPFLAGS += -I../../imbuf -CPPFLAGS += -I../../python CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include -CPPFLAGS += -I../../render/extern/include # own include diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript index a29c17f6937..73fef55d001 100644 --- a/source/blender/editors/space_console/SConscript +++ b/source/blender/editors/space_console/SConscript @@ -3,11 +3,19 @@ Import ('env') sources = env.Glob('*.c') defs = [] -incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' -incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../python ../../makesrna ../../blenfont' + +incs = [ + '../include', + '#/intern/guardedalloc', + '../../makesdna', + '../../makesrna', + '../../blenkernel', + '../../blenlib', + '../../windowmanager', + '../../blenfont', +] if not env['WITH_BF_PYTHON']: defs.append('DISABLE_PYTHON') -env.BlenderLib ( 'bf_editors_space_console', sources, Split(incs), defs, libtype=['core'], priority=[95] ) +env.BlenderLib ( 'bf_editors_space_console', sources, incs, defs, libtype=['core'], priority=[95] ) From 43ac3aebf3da8e09bd584786b0f845b958a53ad5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 07:01:16 +0000 Subject: [PATCH 240/512] worked for me but broke building for eman, this fixes (both on linux which is confusing). --- source/blender/editors/space_console/SConscript | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript index 73fef55d001..ecc10a1d0c3 100644 --- a/source/blender/editors/space_console/SConscript +++ b/source/blender/editors/space_console/SConscript @@ -6,6 +6,7 @@ defs = [] incs = [ '../include', + '#extern/glew/include', '#/intern/guardedalloc', '../../makesdna', '../../makesrna', From 169a87cb0b51b29a01274db6b106e9a8d0cca8ac Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 18 Jul 2009 07:11:37 +0000 Subject: [PATCH 241/512] 2.5 - Optimisations for Keyframe Drawing in DopeSheet Keyframes are now prepared for drawing by being added to a binary-tree structure instead of using insertion-sort on a Double-Linked List. This gives rather significant improvements on a few bad cases (*). I've implemented a basic Red-Black Tree whose nodes/data-structures can also be used as a simple Double-Linked List (ListBase) for this purpose. The implementation of this tree currently does not have support for removing individual nodes, since such capabilities aren't needed yet. Stats (using keyframes from an imported .bvh animation file): * When only the keyframes are drawn (i.e. long keyframes are not identified), the time needed to draw the DopeSheet region 10 times went down from 4000ms to about 300ms. * When long keyframes are considered as well, the same test has gone from 6000ms to 3000ms. There is still a bottleneck there that I haven't been able to remove yet (an attempt at this made the runtimes go through the roof - 32000 ms for the test done here). Assorted Notes: * Added missing headers for some files * Fixed profiling flags for mingw. There was an extra space which prevented the sound-code from compiling. --- config/win32-mingw-config.py | 2 +- source/blender/blenkernel/BKE_animsys.h | 27 +- source/blender/blenlib/BLI_dlrbTree.h | 101 ++++ source/blender/blenlib/intern/DLRB_tree.c | 359 ++++++++++++++ .../editors/animation/keyframes_draw.c | 458 +++++++++++------- source/blender/editors/armature/poselib.c | 5 +- .../editors/include/ED_keyframes_draw.h | 40 +- .../blender/editors/space_action/action_ops.c | 71 +++ .../editors/space_action/action_select.c | 22 +- source/blender/editors/space_nla/nla_draw.c | 7 +- .../editors/space_view3d/drawarmature.c | 20 +- 11 files changed, 902 insertions(+), 210 deletions(-) create mode 100644 source/blender/blenlib/BLI_dlrbTree.h create mode 100644 source/blender/blenlib/intern/DLRB_tree.c diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index 1223a4c49e9..375b8c36ce8 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -148,7 +148,7 @@ LLIBS = ['-lshell32', '-lshfolder', '-lgdi32', '-lmsvcrt', '-lwinmm', '-lmingw32 BF_DEBUG = False BF_DEBUG_CCFLAGS= ['-g'] -BF_PROFILE_CCFLAGS = ['-pg', '-g '] +BF_PROFILE_CCFLAGS = ['-pg', '-g'] BF_PROFILE_LINKFLAGS = ['-pg'] BF_PROFILE_FLAGS = BF_PROFILE_CCFLAGS BF_PROFILE = False diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h index b45917e6ca1..2447d1823af 100644 --- a/source/blender/blenkernel/BKE_animsys.h +++ b/source/blender/blenkernel/BKE_animsys.h @@ -1,5 +1,28 @@ -/* Testing code for new animation system in 2.5 - * Copyright 2009, Joshua Leung +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (original author) + * + * ***** END GPL LICENSE BLOCK ***** */ #ifndef BKE_ANIM_SYS_H diff --git a/source/blender/blenlib/BLI_dlrbTree.h b/source/blender/blenlib/BLI_dlrbTree.h new file mode 100644 index 00000000000..eeb224ad1f4 --- /dev/null +++ b/source/blender/blenlib/BLI_dlrbTree.h @@ -0,0 +1,101 @@ +/** + * $Id: BLI_dlrbTree.h 21514 2009-07-11 05:41:21Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (original author) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BLI_DLRB_TREE_H +#define BLI_DLRB_TREE_H + +/* Double-Linked Red-Black Tree Implementation: + * + * This is simply a Red-Black Tree implementation whose nodes can later + * be arranged + retrieved as elements in a Double-Linked list (i.e. ListBase). + * The Red-Black Tree implementation is based on the methods defined by Wikipedia. + */ + +/* ********************************************** */ +/* Data Types and Type Defines */ + +/* Base Structs --------------------------------- */ + +/* Basic Layout for a Node */ +typedef struct DLRBT_Node { + /* ListBase capabilities */ + struct DLRBT_Node *next, *prev; + + /* Tree Associativity settings */ + struct DLRBT_Node *left, *right; + struct DLRBT_Node *parent; + + char tree_col; + /* ... for nice alignment, next item should usually be a char too... */ +} DLRBT_Node; + +/* Red/Black defines for tree_col */ +enum eDLRBT_Colors { + DLRBT_BLACK= 0, + DLRBT_RED, +}; + +/* -------- */ + +/* The Tree Data */ +typedef struct DLRBT_Tree { + /* ListBase capabilities */ + void *first, *last; /* these should be based on DLRBT_Node-s */ + + /* Root Node */ + void *root; /* this should be based on DLRBT_Node-s */ +} DLRBT_Tree; + +/* ********************************************** */ +/* Public API */ + +/* Create a new tree, and initialise as necessary */ +DLRBT_Tree *BLI_dlrbTree_new(void); + +/* Initialises some given trees */ +void BLI_dlrbTree_init(DLRBT_Tree *tree); + +/* Free some tree */ +void BLI_dlrbTree_free(DLRBT_Tree *tree); + +/* Make sure the tree's Double-Linked list representation is valid */ +void BLI_dlrbTree_linkedlist_sync(DLRBT_Tree *tree); + + + +/* Balance the tree after the given element has been added to it + * (using custom code, in the Binary Tree way). + */ +void BLI_dlrbTree_insert(DLRBT_Tree *tree, DLRBT_Node *node); + +/* Remove the given element from the tree and balance again */ +// FIXME: this is not implemented yet... +void BLI_dlrbTree_remove(DLRBT_Tree *tree, DLRBT_Node *node); + +/* ********************************************** */ + +#endif // BLI_DLRB_TREE_H diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c new file mode 100644 index 00000000000..debe02164fb --- /dev/null +++ b/source/blender/blenlib/intern/DLRB_tree.c @@ -0,0 +1,359 @@ +/** + * $Id: BLI_dlrbTree.c 21514 2009-07-11 05:41:21Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung + * All rights reserved. + * + * Contributor(s): Joshua Leung (original author) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_dlrbTree.h" + +#include "DNA_listBase.h" + +/* *********************************************** */ +/* Tree API */ + +/* Create a new tree, and initialise as necessary */ +DLRBT_Tree *BLI_dlrbTree_new (void) +{ + /* just allocate for now */ + return MEM_callocN(sizeof(DLRBT_Tree), "DLRBT_Tree"); +} + +/* Just zero out the pointers used */ +void BLI_dlrbTree_init (DLRBT_Tree *tree) +{ + if (tree == NULL) + return; + + tree->first= tree->last= tree->root= NULL; +} + +/* Helper for traversing tree and freeing sub-nodes */ +static void recursive_tree_free_nodes (DLRBT_Node *node) +{ + /* sanity check */ + if (node == NULL) + return; + + /* free child nodes + subtrees */ + recursive_tree_free_nodes(node->left); + recursive_tree_free_nodes(node->right); + + /* free self */ + MEM_freeN(node); +} + +/* Free the given tree's data but not the tree itself */ +void BLI_dlrbTree_free (DLRBT_Tree *tree) +{ + if (tree == NULL) + return; + + /* if the list-base stuff is set, just use that (and assume its set), + * otherwise, we'll need to traverse the tree... + */ + if (tree->first) { + /* free list */ + BLI_freelistN((ListBase *)tree); + } + else { + /* traverse tree, freeing sub-nodes */ + recursive_tree_free_nodes(tree->root); + } + + /* clear pointers */ + tree->first= tree->last= tree->root= NULL; +} + +/* ------- */ + +/* Helper function - used for traversing down the tree from the root to add nodes in order */ +static void linkedlist_sync_add_node (DLRBT_Tree *tree, DLRBT_Node *node) +{ + /* sanity checks */ + if ((tree == NULL) || (node == NULL)) + return; + + /* add left-node (and its subtree) */ + linkedlist_sync_add_node(tree, node->left); + + /* now add self + * - must remove detach from other links first + * (for now, only clear own pointers) + */ + node->prev= node->next= NULL; + BLI_addtail((ListBase *)tree, (Link *)node); + + /* finally, add right node (and its subtree) */ + linkedlist_sync_add_node(tree, node->right); +} + +/* Make sure the tree's Double-Linked list representation is valid */ +void BLI_dlrbTree_linkedlist_sync (DLRBT_Tree *tree) +{ + /* sanity checks */ + if (tree == NULL) + return; + + /* clear list-base pointers so that the new list can be added properly */ + tree->first= tree->last= NULL; + + /* start adding items from the root */ + linkedlist_sync_add_node(tree, tree->root); +} + +/* *********************************************** */ +/* Tree Relationships Utilities */ + +/* get the 'grandparent' - the parent of the parent - of the given node */ +static DLRBT_Node *get_grandparent (DLRBT_Node *node) +{ + if (node && node->parent) + return node->parent->parent; + else + return NULL; +} + +/* get the 'uncle' - the sibling of the parent - of the given node */ +static DLRBT_Node *get_uncle (DLRBT_Node *node) +{ + DLRBT_Node *gpn= get_grandparent(node); + + /* return the child of the grandparent which isn't the node's parent */ + if (gpn) { + if (gpn->left == node->parent) + return gpn->right; + else + return gpn->left; + } + + /* not found */ + return NULL; +} + +/* *********************************************** */ +/* Tree Rotation Utilities */ + +/* Left Rotation is only done for Right-Right Case, and Left-Right Case */ +static void rotate_left (DLRBT_Tree *tree, DLRBT_Node *root) +{ + DLRBT_Node **root_slot, *pivot; + + /* pivot is simply the root's right child, to become the root's parent */ + pivot= root->right; + if (pivot == NULL) + return; + + if (root->parent) { + if (root == root->parent->left) + root_slot= &root->parent->left; + else + root_slot= &root->parent->right; + } + else + root_slot= ((DLRBT_Node**)&tree->root);//&((DLRBT_Node*)tree->root); + + /* - pivot's left child becomes root's right child + * - root now becomes pivot's left child + */ + root->right= pivot->left; + if (pivot->left) pivot->left->parent= root; + + pivot->left= root; + pivot->parent= root->parent; + root->parent= pivot; + + /* make the pivot the new root */ + if (root_slot) + *root_slot= pivot; +} + +static void rotate_right (DLRBT_Tree *tree, DLRBT_Node *root) +{ + DLRBT_Node **root_slot, *pivot; + + /* pivot is simply the root's left child, to become the root's parent */ + pivot= root->left; + if (pivot == NULL) + return; + + if (root->parent) { + if (root == root->parent->left) + root_slot= &root->parent->left; + else + root_slot= &root->parent->right; + } + else + root_slot= ((DLRBT_Node**)&tree->root);//&((DLRBT_Node*)tree->root); + + /* - pivot's right child becomes root's left child + * - root now becomes pivot's right child + */ + root->left= pivot->right; + if (pivot->right) pivot->right->parent= root; + + pivot->right= root; + pivot->parent= root->parent; + root->parent= pivot; + + /* make the pivot the new root */ + if (root_slot) + *root_slot= pivot; +} + +/* *********************************************** */ +/* Post-Insertion Balancing */ + +/* forward defines for insertion checks */ +static void insert_check_1(DLRBT_Tree *tree, DLRBT_Node *node); +static void insert_check_2(DLRBT_Tree *tree, DLRBT_Node *node); +static void insert_check_3(DLRBT_Tree *tree, DLRBT_Node *node); +static void insert_check_4(DLRBT_Tree *tree, DLRBT_Node *node); + +/* ----- */ + +/* W. 1) Root must be black (so that the 2nd-generation can have a black parent) */ +static void insert_check_1 (DLRBT_Tree *tree, DLRBT_Node *node) +{ + if (node) { + /* if this is the root, just ensure that it is black */ + if (node->parent == NULL) + node->tree_col= DLRBT_BLACK; + else + insert_check_2(tree, node); + } +} + +/* W. 2+3) Parent of node must be black, otherwise recolor and flush */ +static void insert_check_2 (DLRBT_Tree *tree, DLRBT_Node *node) +{ + /* if the parent is not black, we need to change that... */ + if (node && node->parent && node->parent->tree_col) { + DLRBT_Node *unc= get_uncle(node); + + /* if uncle and parent are both red, need to change them to black and make + * the parent black in order to satisfy the criteria of each node having the + * same number of black nodes to its leaves + */ + if (unc && unc->tree_col) { + DLRBT_Node *gp= get_grandparent(node); + + /* make the n-1 generation nodes black */ + node->parent->tree_col= unc->tree_col= DLRBT_BLACK; + + /* - make the grandparent red, so that we maintain alternating red/black property + * (it must exist, so no need to check for NULL here), + * - as the grandparent may now cause inconsistencies with the rest of the tree, + * we must flush up the tree and perform checks/rebalancing/repainting, using the + * grandparent as the node of interest + */ + gp->tree_col= DLRBT_RED; + insert_check_1(tree, gp); + } + else { + /* we've got an unbalanced branch going down the grandparent to the parent, + * so need to perform some rotations to re-balance the tree + */ + insert_check_3(tree, node); + } + } +} + +/* W. 4) Perform rotation on sub-tree containing the 'new' node */ +static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node) +{ + DLRBT_Node *gp= get_grandparent(node); + + /* check that grandparent and node->parent exist (jut in case... really shouldn't happen on a good tree) */ + if (node && node->parent && gp) { + /* a left rotation will switch the roles of node and its parent, assuming that + * the parent is the left child of the grandparent... otherwise, rotation direction + * should be swapped + */ + if ((node == node->parent->right) && (node->parent == gp->left)) { + rotate_left(tree, node); + node= node->left; + } + else if ((node == node->parent->left) && (node->parent == gp->right)) { + rotate_right(tree, node); + node= node->right; + } + // TODO: what about other cases? + + /* fix old parent's color-tagging */ + insert_check_4(tree, node); + } +} + +/* W. 5) Perform rotation in the opposite direction on the parent of the given node */ +static void insert_check_4 (DLRBT_Tree *tree, DLRBT_Node *node) +{ + DLRBT_Node *gp= get_grandparent(node); + + if (node == NULL) + return; + + /* modify the coloring of the grandparent and parent so that they still satisfy the constraints */ + node->parent->tree_col= DLRBT_BLACK; + gp->tree_col= DLRBT_RED; + + /* if there are several nodes that all form a left chain, do a right rotation to correct this + * (or a rotation in the opposite direction if they all form a right chain) + */ + if ((node == node->parent->left) && (node->parent == gp->left)) + rotate_right(tree, gp); + else /* ((node == node->parent->right) && (node->parent == gp->right)) */ + rotate_left(tree, gp); +} + +/* ----- */ + +/* Balance the tree after the given element has been added to it + * (using custom code, in the Binary Tree way). + */ +void BLI_dlrbTree_insert(DLRBT_Tree *tree, DLRBT_Node *node) +{ + /* sanity checks */ + if ((tree == NULL) || (node == NULL)) + return; + + /* firstly, the node we just added should be red by default */ + node->tree_col= DLRBT_RED; + + /* start from case 1, an trek through the tail-recursive insertion checks */ + insert_check_1(tree, node); +} + +/* *********************************************** */ +/* Remove */ + +// TODO: this hasn't been coded yet, since this functionality was not needed by the author + +/* *********************************************** */ diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 64e008b92ca..78ceb4a0149 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -17,12 +17,12 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung * All rights reserved. * * The Original Code is: all of this file. * - * Contributor(s): Joshua Leung + * Contributor(s): Joshua Leung (full recode) * * ***** END GPL LICENSE BLOCK ***** */ @@ -42,8 +42,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" - -/* Types --------------------------------------------------------------- */ +#include "BLI_dlrbTree.h" #include "DNA_listBase.h" #include "DNA_anim_types.h" @@ -75,8 +74,6 @@ #include "BKE_context.h" #include "BKE_utildefines.h" -/* Everything from source (BIF, BDR, BSE) ------------------------------ */ - #include "BIF_gl.h" #include "BIF_glutil.h" @@ -93,53 +90,99 @@ /* *************************** Keyframe Processing *************************** */ -/* The equivalent of add_to_cfra_elem except this version - * makes ActKeyColumns - one of the two datatypes required - * for DopeSheet drawing. - */ -static void add_bezt_to_keycolumnslist(ListBase *keys, BezTriple *bezt) +/* Create a ActKeyColumn from a BezTriple */ +static ActKeyColumn *bezt_to_new_actkeycolumn(BezTriple *bezt) { - ActKeyColumn *ak, *akn; + ActKeyColumn *ak= MEM_callocN(sizeof(ActKeyColumn), "ActKeyColumn"); - if (ELEM(NULL, keys, bezt)) return; - - /* try to any existing key to replace, or where to insert after */ - for (ak= keys->last; ak; ak= ak->prev) { - /* do because of double keys */ - if (ak->cfra == bezt->vec[1][0]) { - /* set selection status and 'touched' status */ - if (BEZSELECTED(bezt)) ak->sel = SELECT; - ak->modified += 1; - - return; - } - else if (ak->cfra < bezt->vec[1][0]) break; - } - - /* add new block */ - akn= MEM_callocN(sizeof(ActKeyColumn), "ActKeyColumn"); - if (ak) BLI_insertlinkafter(keys, ak, akn); - else BLI_addtail(keys, akn); - - akn->cfra= bezt->vec[1][0]; - akn->modified += 1; + /* store settings based on state of BezTriple */ + ak->cfra= bezt->vec[1][0]; + ak->sel= BEZSELECTED(bezt) ? SELECT : 0; // TODO: handle type = bezt->h1 or bezt->h2 - akn->handle_type= 0; + ak->handle_type= 0; - if (BEZSELECTED(bezt)) - akn->sel = SELECT; - else - akn->sel = 0; + /* set 'modified', since this is used to identify long keyframes */ + ak->modified = 1; + + return ak; } -/* The equivalent of add_to_cfra_elem except this version - * makes ActKeyBlocks - one of the two datatypes required - * for DopeSheet drawing. - */ -static void add_bezt_to_keyblockslist(ListBase *blocks, FCurve *fcu, int index) +/* Add the given BezTriple to the given 'list' of Keyframes */ +static void add_bezt_to_keycolumns_list(DLRBT_Tree *keys, BezTriple *bezt) { - ActKeyBlock *ab, *abn; + ActKeyColumn *new_ak=NULL; + + if ELEM(NULL, keys, bezt) return; + + /* if there are no keys already, just add as root */ + if (keys->root == NULL) { + /* just add this as the root, then call the tree-balancing functions to validate */ + new_ak= bezt_to_new_actkeycolumn(bezt); + keys->root= (DLRBT_Node *)new_ak; + } + else { + ActKeyColumn *ak, *akp=NULL, *akn=NULL; + + /* traverse tree to find an existing entry to update the status of, + * or a suitable point to add at + */ + for (ak= keys->root; ak; akp= ak, ak= akn) { + /* check if this is a match, or whether we go left or right */ + if (ak->cfra == bezt->vec[1][0]) { + /* set selection status and 'touched' status */ + if (BEZSELECTED(bezt)) ak->sel = SELECT; + ak->modified += 1; + + /* done... no need to insert */ + return; + } + else { + ActKeyColumn **aknp= NULL; + + /* check if go left or right, but if not available, add new node */ + if (ak->cfra < bezt->vec[1][0]) + aknp= &ak->right; + else + aknp= &ak->left; + + /* if this does not exist, add a new node, otherwise continue... */ + if (*aknp == NULL) { + /* add a new node representing this, and attach it to the relevant place */ + new_ak= bezt_to_new_actkeycolumn(bezt); + new_ak->parent= ak; + *aknp= new_ak; + break; + } + else + akn= *aknp; + } + } + } + + /* now, balance the tree taking into account this newly added node */ + BLI_dlrbTree_insert(keys, (DLRBT_Node *)new_ak); +} + + +/* Create a ActKeyColumn for a pair of BezTriples */ +static ActKeyBlock *bezts_to_new_actkeyblock(BezTriple *prev, BezTriple *beztn) +{ + ActKeyBlock *ab= MEM_callocN(sizeof(ActKeyBlock), "ActKeyBlock"); + + ab->start= prev->vec[1][0]; + ab->end= beztn->vec[1][0]; + ab->val= beztn->vec[1][1]; + + ab->sel= (BEZSELECTED(prev) || BEZSELECTED(beztn)) ? SELECT : 0; + ab->modified = 1; + + return ab; +} + +static void add_bezt_to_keyblocks_list(DLRBT_Tree *blocks, FCurve *fcu, int index) +{ + ActKeyBlock *new_ab= NULL; BezTriple *beztn=NULL, *prev=NULL; BezTriple *bezt; int v; @@ -148,6 +191,7 @@ static void add_bezt_to_keyblockslist(ListBase *blocks, FCurve *fcu, int index) beztn= (fcu->bezt + index); /* we need to go through all beztriples, as they may not be in order (i.e. during transform) */ + // TODO: this seems to be a bit of a bottleneck for (v=0, bezt=fcu->bezt; v < fcu->totvert; v++, bezt++) { /* skip if beztriple is current */ if (v != index) { @@ -174,68 +218,119 @@ static void add_bezt_to_keyblockslist(ListBase *blocks, FCurve *fcu, int index) if (IS_EQ(beztn->vec[1][1], beztn->vec[0][1])==0) return; if (IS_EQ(prev->vec[1][1], prev->vec[2][1])==0) return; - /* try to find a keyblock that starts on the previous beztriple - * Note: we can't search from end to try to optimise this as it causes errors there's - * an A ___ B |---| B situation - */ - // FIXME: here there is a bug where we are trying to get the summary for the following channels - // A|--------------|A ______________ B|--------------|B - // A|------------------------------------------------|A - // A|----|A|---|A|-----------------------------------|A - for (ab= blocks->first; ab; ab= ab->next) { - /* check if alter existing block or add new block */ - if (ab->start == prev->vec[1][0]) { - /* set selection status and 'touched' status */ - if (BEZSELECTED(beztn)) ab->sel = SELECT; - ab->modified += 1; - - return; + + /* if there are no blocks already, just add as root */ + if (blocks->root == NULL) { + /* just add this as the root, then call the tree-balancing functions to validate */ + new_ab= bezts_to_new_actkeyblock(prev, beztn); + blocks->root= (DLRBT_Node *)new_ab; + } + else { + ActKeyBlock *ab, *abp=NULL, *abn=NULL; + + /* try to find a keyblock that starts on the previous beztriple, and add a new one if none start there + * Note: we can't search from end to try to optimise this as it causes errors there's + * an A ___ B |---| B situation + */ + // FIXME: here there is a bug where we are trying to get the summary for the following channels + // A|--------------|A ______________ B|--------------|B + // A|------------------------------------------------|A + // A|----|A|---|A|-----------------------------------|A + for (ab= blocks->root; ab; abp= ab, ab= abn) { + /* check if this is a match, or whether we go left or right */ + if (ab->start == prev->vec[1][0]) { + /* set selection status and 'touched' status */ + if (BEZSELECTED(beztn)) ab->sel = SELECT; + ab->modified += 1; + + /* done... no need to insert */ + return; + } + else { + ActKeyBlock **abnp= NULL; + + /* check if go left or right, but if not available, add new node */ + if (ab->start < prev->vec[1][0]) + abnp= &ab->right; + else + abnp= &ab->left; + + /* if this does not exist, add a new node, otherwise continue... */ + if (*abnp == NULL) { + /* add a new node representing this, and attach it to the relevant place */ + new_ab= bezts_to_new_actkeyblock(prev, beztn); + new_ab->parent= ab; + *abnp= new_ab; + break; + } + else + abn= *abnp; + } } - else if (ab->start < prev->vec[1][0]) break; } - /* add new block */ - abn= MEM_callocN(sizeof(ActKeyBlock), "ActKeyBlock"); - if (ab) BLI_insertlinkbefore(blocks, ab, abn); - else BLI_addtail(blocks, abn); + /* now, balance the tree taking into account this newly added node */ + BLI_dlrbTree_insert(blocks, (DLRBT_Node *)new_ab); +} + +/* --------- */ + +/* Handle the 'touched' status of ActKeyColumn tree nodes */ +static void set_touched_actkeycolumn (ActKeyColumn *ak) +{ + /* sanity check */ + if (ak == NULL) + return; + + /* deal with self first */ + if (ak->modified) { + ak->modified= 0; + ak->totcurve++; + } - abn->start= prev->vec[1][0]; - abn->end= beztn->vec[1][0]; - abn->val= beztn->vec[1][1]; + /* children */ + set_touched_actkeycolumn(ak->left); + set_touched_actkeycolumn(ak->right); +} + +/* Handle the 'touched' status of ActKeyBlock tree nodes */ +static void set_touched_actkeyblock (ActKeyBlock *ab) +{ + /* sanity check */ + if (ab == NULL) + return; + + /* deal with self first */ + if (ab->modified) { + ab->modified= 0; + ab->totcurve++; + } - if (BEZSELECTED(prev) || BEZSELECTED(beztn)) - abn->sel = SELECT; - else - abn->sel = 0; - abn->modified = 1; + /* children */ + set_touched_actkeyblock(ab->left); + set_touched_actkeyblock(ab->right); } /* *************************** Keyframe Drawing *************************** */ /* helper function - find actkeycolumn that occurs on cframe */ -static ActKeyColumn *cfra_find_actkeycolumn (ListBase *keys, float cframe) +static ActKeyColumn *cfra_find_actkeycolumn (ActKeyColumn *ak, float cframe) { - ActKeyColumn *ak, *ak2; - - if (keys==NULL) + /* sanity checks */ + if (ak == NULL) return NULL; - - /* search from both ends at the same time, and stop if we find match or if both ends meet */ - for (ak=keys->first, ak2=keys->last; ak && ak2; ak=ak->next, ak2=ak2->prev) { - /* return whichever end encounters the frame */ - if (ak->cfra == cframe) - return ak; - if (ak2->cfra == cframe) - return ak2; - - /* no matches on either end, so return NULL */ - if (ak == ak2) - return NULL; - } - return NULL; + /* check if this is a match, or whether it is in some subtree */ + if (cframe < ak->cfra) + return cfra_find_actkeycolumn(ak->left, cframe); + else if (cframe > ak->cfra) + return cfra_find_actkeycolumn(ak->right, cframe); + else + return ak; /* match */ } +/* -------- */ + /* coordinates for diamond shape */ static const float _unit_diamond_shape[4][2] = { {0.0f, 1.0f}, /* top vert */ @@ -306,7 +401,7 @@ void draw_keyframe_shape (float x, float y, float xscale, float hsize, short sel glTranslatef(-x, -y, 0.0f); } -static void draw_keylist(View2D *v2d, ListBase *keys, ListBase *blocks, float ypos) +static void draw_keylist(View2D *v2d, DLRBT_Tree *keys, DLRBT_Tree *blocks, float ypos) { ActKeyColumn *ak; ActKeyBlock *ab; @@ -323,10 +418,10 @@ static void draw_keylist(View2D *v2d, ListBase *keys, ListBase *blocks, float yp short startCurves, endCurves, totCurves; /* find out how many curves occur at each keyframe */ - ak= cfra_find_actkeycolumn(keys, ab->start); + ak= cfra_find_actkeycolumn((ActKeyColumn *)keys->root, ab->start); startCurves = (ak)? ak->totcurve: 0; - ak= cfra_find_actkeycolumn(keys, ab->end); + ak= cfra_find_actkeycolumn((ActKeyColumn *)keys->root, ab->end); endCurves = (ak)? ak->totcurve: 0; /* only draw keyblock if it appears in at all of the keyframes at lowest end */ @@ -382,76 +477,112 @@ static void draw_keylist(View2D *v2d, ListBase *keys, ListBase *blocks, float yp void draw_scene_channel(View2D *v2d, bDopeSheet *ads, Scene *sce, float ypos) { - ListBase keys = {0, 0}; - ListBase blocks = {0, 0}; - - scene_to_keylist(ads, sce, &keys, &blocks); - draw_keylist(v2d, &keys, &blocks, ypos); + DLRBT_Tree keys, blocks; - BLI_freelistN(&keys); - BLI_freelistN(&blocks); + BLI_dlrbTree_init(&keys); + BLI_dlrbTree_init(&blocks); + + scene_to_keylist(ads, sce, &keys, &blocks); + + BLI_dlrbTree_linkedlist_sync(&keys); + BLI_dlrbTree_linkedlist_sync(&blocks); + + draw_keylist(v2d, &keys, &blocks, ypos); + + BLI_dlrbTree_free(&keys); + BLI_dlrbTree_free(&blocks); } void draw_object_channel(View2D *v2d, bDopeSheet *ads, Object *ob, float ypos) { - ListBase keys = {0, 0}; - ListBase blocks = {0, 0}; - - ob_to_keylist(ads, ob, &keys, &blocks); - draw_keylist(v2d, &keys, &blocks, ypos); + DLRBT_Tree keys, blocks; - BLI_freelistN(&keys); - BLI_freelistN(&blocks); + BLI_dlrbTree_init(&keys); + BLI_dlrbTree_init(&blocks); + + ob_to_keylist(ads, ob, &keys, &blocks); + + BLI_dlrbTree_linkedlist_sync(&keys); + BLI_dlrbTree_linkedlist_sync(&blocks); + + draw_keylist(v2d, &keys, &blocks, ypos); + + BLI_dlrbTree_free(&keys); + BLI_dlrbTree_free(&blocks); } void draw_fcurve_channel(View2D *v2d, AnimData *adt, FCurve *fcu, float ypos) { - ListBase keys = {0, 0}; - ListBase blocks = {0, 0}; - - fcurve_to_keylist(adt, fcu, &keys, &blocks); - draw_keylist(v2d, &keys, &blocks, ypos); + DLRBT_Tree keys, blocks; - BLI_freelistN(&keys); - BLI_freelistN(&blocks); + BLI_dlrbTree_init(&keys); + BLI_dlrbTree_init(&blocks); + + fcurve_to_keylist(adt, fcu, &keys, &blocks); + + BLI_dlrbTree_linkedlist_sync(&keys); + BLI_dlrbTree_linkedlist_sync(&blocks); + + draw_keylist(v2d, &keys, &blocks, ypos); + + BLI_dlrbTree_free(&keys); + BLI_dlrbTree_free(&blocks); } void draw_agroup_channel(View2D *v2d, AnimData *adt, bActionGroup *agrp, float ypos) { - ListBase keys = {0, 0}; - ListBase blocks = {0, 0}; - - agroup_to_keylist(adt, agrp, &keys, &blocks); - draw_keylist(v2d, &keys, &blocks, ypos); + DLRBT_Tree keys, blocks; - BLI_freelistN(&keys); - BLI_freelistN(&blocks); + BLI_dlrbTree_init(&keys); + BLI_dlrbTree_init(&blocks); + + agroup_to_keylist(adt, agrp, &keys, &blocks); + + BLI_dlrbTree_linkedlist_sync(&keys); + BLI_dlrbTree_linkedlist_sync(&blocks); + + draw_keylist(v2d, &keys, &blocks, ypos); + + BLI_dlrbTree_free(&keys); + BLI_dlrbTree_free(&blocks); } void draw_action_channel(View2D *v2d, AnimData *adt, bAction *act, float ypos) { - ListBase keys = {0, 0}; - ListBase blocks = {0, 0}; - - action_to_keylist(adt, act, &keys, &blocks); - draw_keylist(v2d, &keys, &blocks, ypos); + DLRBT_Tree keys, blocks; - BLI_freelistN(&keys); - BLI_freelistN(&blocks); + BLI_dlrbTree_init(&keys); + BLI_dlrbTree_init(&blocks); + + action_to_keylist(adt, act, &keys, &blocks); + + BLI_dlrbTree_linkedlist_sync(&keys); + BLI_dlrbTree_linkedlist_sync(&blocks); + + draw_keylist(v2d, &keys, &blocks, ypos); + + BLI_dlrbTree_free(&keys); + BLI_dlrbTree_free(&blocks); } void draw_gpl_channel(View2D *v2d, bDopeSheet *ads, bGPDlayer *gpl, float ypos) { - ListBase keys = {0, 0}; + DLRBT_Tree keys; - gpl_to_keylist(ads, gpl, &keys, NULL); - draw_keylist(v2d, &keys, NULL, ypos); - BLI_freelistN(&keys); + BLI_dlrbTree_init(&keys); + + gpl_to_keylist(ads, gpl, &keys, NULL); + + BLI_dlrbTree_linkedlist_sync(&keys); + + draw_keylist(v2d, &keys, NULL, ypos); + + BLI_dlrbTree_free(&keys); } /* *************************** Keyframe List Conversions *************************** */ -void scene_to_keylist(bDopeSheet *ads, Scene *sce, ListBase *keys, ListBase *blocks) +void scene_to_keylist(bDopeSheet *ads, Scene *sce, DLRBT_Tree *keys, DLRBT_Tree *blocks) { if (sce) { AnimData *adt; @@ -483,7 +614,7 @@ void scene_to_keylist(bDopeSheet *ads, Scene *sce, ListBase *keys, ListBase *blo } } -void ob_to_keylist(bDopeSheet *ads, Object *ob, ListBase *keys, ListBase *blocks) +void ob_to_keylist(bDopeSheet *ads, Object *ob, DLRBT_Tree *keys, DLRBT_Tree *blocks) { Key *key= ob_get_key(ob); @@ -508,12 +639,9 @@ void ob_to_keylist(bDopeSheet *ads, Object *ob, ListBase *keys, ListBase *blocks } } - -void fcurve_to_keylist(AnimData *adt, FCurve *fcu, ListBase *keys, ListBase *blocks) +void fcurve_to_keylist(AnimData *adt, FCurve *fcu, DLRBT_Tree *keys, DLRBT_Tree *blocks) { BezTriple *bezt; - ActKeyColumn *ak, *ak2; - ActKeyBlock *ab, *ab2; int v; if (fcu && fcu->totvert && fcu->bezt) { @@ -525,51 +653,23 @@ void fcurve_to_keylist(AnimData *adt, FCurve *fcu, ListBase *keys, ListBase *blo bezt= fcu->bezt; for (v=0; v < fcu->totvert; v++, bezt++) { - /* only if keyframe is in range (optimisation) */ - add_bezt_to_keycolumnslist(keys, bezt); - if (blocks) add_bezt_to_keyblockslist(blocks, fcu, v); + add_bezt_to_keycolumns_list(keys, bezt); + if (blocks) add_bezt_to_keyblocks_list(blocks, fcu, v); } /* update the number of curves that elements have appeared in */ - if (keys) { - for (ak=keys->first, ak2=keys->last; ak && ak2; ak=ak->next, ak2=ak2->prev) { - if (ak->modified) { - ak->modified = 0; - ak->totcurve += 1; - } - - if (ak == ak2) - break; - - if (ak2->modified) { - ak2->modified = 0; - ak2->totcurve += 1; - } - } - } - if (blocks) { - for (ab=blocks->first, ab2=blocks->last; ab && ab2; ab=ab->next, ab2=ab2->prev) { - if (ab->modified) { - ab->modified = 0; - ab->totcurve += 1; - } - - if (ab == ab2) - break; - - if (ab2->modified) { - ab2->modified = 0; - ab2->totcurve += 1; - } - } - } + // FIXME: this is broken with the new tree structure for now... + if (keys) + set_touched_actkeycolumn(keys->root); + if (blocks) + set_touched_actkeyblock(blocks->root); /* unapply NLA-mapping if applicable */ ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } } -void agroup_to_keylist(AnimData *adt, bActionGroup *agrp, ListBase *keys, ListBase *blocks) +void agroup_to_keylist(AnimData *adt, bActionGroup *agrp, DLRBT_Tree *keys, DLRBT_Tree *blocks) { FCurve *fcu; @@ -581,7 +681,7 @@ void agroup_to_keylist(AnimData *adt, bActionGroup *agrp, ListBase *keys, ListBa } } -void action_to_keylist(AnimData *adt, bAction *act, ListBase *keys, ListBase *blocks) +void action_to_keylist(AnimData *adt, bAction *act, DLRBT_Tree *keys, DLRBT_Tree *blocks) { FCurve *fcu; @@ -594,7 +694,7 @@ void action_to_keylist(AnimData *adt, bAction *act, ListBase *keys, ListBase *bl } -void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, ListBase *keys, ListBase *blocks) +void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, DLRBT_Tree *keys, DLRBT_Tree *blocks) { bGPDframe *gpf; ActKeyColumn *ak; @@ -603,7 +703,7 @@ void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, ListBase *keys, ListBase *b /* loop over frames, converting directly to 'keyframes' (should be in order too) */ for (gpf= gpl->frames.first; gpf; gpf= gpf->next) { ak= MEM_callocN(sizeof(ActKeyColumn), "ActKeyColumn"); - BLI_addtail(keys, ak); + BLI_addtail((ListBase *)keys, ak); ak->cfra= (float)gpf->framenum; ak->modified = 1; diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index 93611a30bd8..d0a99e4ad13 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -37,6 +37,7 @@ #include "BLI_arithb.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" +#include "BLI_dlrbTree.h" #include "DNA_listBase.h" #include "DNA_anim_types.h" @@ -216,7 +217,7 @@ bAction *poselib_validate (Object *ob) // TODO: operatorfy me! void poselib_validate_act (bAction *act) { - ListBase keys = {NULL, NULL}; + DLRBT_Tree keys = {NULL, NULL}; ActKeyColumn *ak; TimeMarker *marker, *markern; @@ -227,7 +228,9 @@ void poselib_validate_act (bAction *act) } /* determine which frames have keys */ + BLI_dlrbTree_init(&keys); action_to_keylist(NULL, act, &keys, NULL); + BLI_dlrbTree_linkedlist_sync(&keys); /* for each key, make sure there is a correspnding pose */ for (ak= keys.first; ak; ak= ak->next) { diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h index 63adcf39c12..e940aaed36e 100644 --- a/source/blender/editors/include/ED_keyframes_draw.h +++ b/source/blender/editors/include/ED_keyframes_draw.h @@ -17,12 +17,12 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * The Original Code is Copyright (C) (C) 2009 Blender Foundation, Joshua Leung * All rights reserved. * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): Joshua Leung (full recode) * * ***** END GPL LICENSE BLOCK ***** */ @@ -41,13 +41,23 @@ struct ListBase; struct bGPDlayer; struct Scene; struct View2D; +struct DLRBT_Tree; /* ****************************** Base Structs ****************************** */ /* Keyframe Column Struct */ typedef struct ActKeyColumn { + /* ListBase linkage */ struct ActKeyColumn *next, *prev; - short sel, handle_type; + + /* sorting-tree linkage */ + struct ActKeyColumn *left, *right; /* 'children' of this node, less than and greater than it (respectively) */ + struct ActKeyColumn *parent; /* parent of this node in the tree */ + char tree_col; /* DLRB_BLACK or DLRB_RED */ + + /* keyframe info */ + char sel; + short handle_type; float cfra; /* only while drawing - used to determine if long-keyframe needs to be drawn */ @@ -57,8 +67,17 @@ typedef struct ActKeyColumn { /* 'Long Keyframe' Struct */ typedef struct ActKeyBlock { + /* ListBase linkage */ struct ActKeyBlock *next, *prev; - short sel, handle_type; + + /* sorting-tree linkage */ + struct ActKeyBlock *left, *right; /* 'children' of this node, less than and greater than it (respectively) */ + struct ActKeyBlock *parent; /* parent of this node in the tree */ + char tree_col; /* DLRB_BLACK or DLRB_RED */ + + /* key-block info */ + char sel; + short handle_type; float val; float start, end; @@ -67,7 +86,6 @@ typedef struct ActKeyBlock { short totcurve; } ActKeyBlock; - /* *********************** Keyframe Drawing ****************************** */ /* options for keyframe shape drawing */ @@ -94,12 +112,12 @@ void draw_scene_channel(struct View2D *v2d, struct bDopeSheet *ads, struct Scene void draw_gpl_channel(struct View2D *v2d, struct bDopeSheet *ads, struct bGPDlayer *gpl, float ypos); /* Keydata Generation */ -void fcurve_to_keylist(struct AnimData *adt, struct FCurve *fcu, ListBase *keys, ListBase *blocks); -void agroup_to_keylist(struct AnimData *adt, struct bActionGroup *agrp, ListBase *keys, ListBase *blocks); -void action_to_keylist(struct AnimData *adt, struct bAction *act, ListBase *keys, ListBase *blocks); -void ob_to_keylist(struct bDopeSheet *ads, struct Object *ob, ListBase *keys, ListBase *blocks); -void scene_to_keylist(struct bDopeSheet *ads, struct Scene *sce, ListBase *keys, ListBase *blocks); -void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, ListBase *keys, ListBase *blocks); +void fcurve_to_keylist(struct AnimData *adt, struct FCurve *fcu, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); +void agroup_to_keylist(struct AnimData *adt, struct bActionGroup *agrp, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); +void action_to_keylist(struct AnimData *adt, struct bAction *act, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); +void ob_to_keylist(struct bDopeSheet *ads, struct Object *ob, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); +void scene_to_keylist(struct bDopeSheet *ads, struct Scene *sce, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); +void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, struct DLRBT_Tree *keys, struct DLRBT_Tree *blocks); #endif /* ED_KEYFRAMES_DRAW_H */ diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index d1c9e1deac3..c4dbe92985a 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -32,6 +32,7 @@ #include "MEM_guardedalloc.h" #include "DNA_listBase.h" +#include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -57,6 +58,70 @@ #include "WM_types.h" +/* ------------- */ + +#include "BLI_dlrbTree.h" +#include "ED_anim_api.h" +#include "ED_keyframes_draw.h" +#include "DNA_object_types.h" + +static int act_drawtree_test_exec (bContext *C, wmOperator *op) +{ + bAnimContext ac; + bDopeSheet *ads; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter, items; + + ANIM_animdata_get_context(C, &ac); + ads= ac.data; + + /* build list of channels to draw */ + filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); + items= ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + if (items) { + for (ale= anim_data.first; ale; ale= ale->next) { + AnimData *adt= BKE_animdata_from_id(ale->id); + + + if (ale->type == ANIMTYPE_GROUP) { + DLRBT_Tree keys; + ActKeyColumn *ak; + + BLI_dlrbTree_init(&keys); + + agroup_to_keylist(adt, ale->data, &keys, NULL); + + BLI_dlrbTree_linkedlist_sync(&keys); + + printf("printing sorted list of object keyframes --------------- \n"); + for (ak= keys.first; ak; ak= ak->next) { + printf("\t%p (%f) | L:%p R:%p P:%p \n", ak, ak->cfra, ak->left, ak->right, ak->parent); + } + + printf("printing tree ---------------- \n"); + for (ak= keys.root; ak; ak= ak->next) { + printf("\t%p (%f) | L:%p R:%p P:%p \n", ak, ak->cfra, ak->left, ak->right, ak->parent); + } + + BLI_dlrbTree_free(&keys); + + break; + } + } + + BLI_freelistN(&anim_data); + } +} + +void ACT_OT_test (wmOperatorType *ot) +{ + ot->idname= "ACT_OT_test"; + + ot->exec= act_drawtree_test_exec; +} + /* ************************** registration - operator types **********************************/ void action_operatortypes(void) @@ -85,6 +150,9 @@ void action_operatortypes(void) WM_operatortype_append(ACT_OT_previewrange_set); WM_operatortype_append(ACT_OT_view_all); + + // test + WM_operatortype_append(ACT_OT_test); } /* ************************** registration - keymaps **********************************/ @@ -154,6 +222,9 @@ static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) /* transform system */ transform_keymap_for_space(wm, keymap, SPACE_ACTION); + + /* test */ + WM_keymap_add_item(keymap, "ACT_OT_test", QKEY, KM_PRESS, 0, 0); } /* --------------- */ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index ef1b392815d..e358f559b14 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -37,6 +37,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" +#include "BLI_dlrbTree.h" #include "DNA_anim_types.h" #include "DNA_action_types.h" @@ -224,7 +225,6 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short BeztEditFunc ok_cb, select_cb; View2D *v2d= &ac->ar->v2d; rctf rectf; - //float ymin=0, ymax=(float)(-ACHANNEL_HEIGHT); float ymin=0, ymax=(float)(-ACHANNEL_HEIGHT_HALF); /* convert mouse coordinates to frame ranges and channel coordinates corrected for view pan/zoom */ @@ -745,7 +745,7 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, short column) { ListBase anim_data = {NULL, NULL}; - ListBase anim_keys = {NULL, NULL}; + DLRBT_Tree anim_keys; bAnimListElem *ale; int filter; @@ -784,10 +784,12 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, else { /* found match - must return here... */ AnimData *adt= ANIM_nla_mapping_get(ac, ale); - ActKeyColumn *ak; + ActKeyColumn *ak, *akn=NULL; /* make list of keyframes */ // TODO: it would be great if we didn't have to apply this to all the keyframes to do this... + BLI_dlrbTree_init(&anim_keys); + if (ale->key_data) { switch (ale->datatype) { case ALE_OB: @@ -825,8 +827,11 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, gpl_to_keylist(ads, gpl, &anim_keys, NULL); } - /* loop through keyframes, finding one that was clicked on */ - for (ak= anim_keys.first; ak; ak= ak->next) { + // the call below is not strictly necessary, since we have adjacency info anyway + //BLI_dlrbTree_linkedlist_sync(&anim_keys); + + /* loop through keyframes, finding one that was within the range clicked on */ + for (ak= anim_keys.root; ak; ak= akn) { if (IN_RANGE(ak->cfra, rectf.xmin, rectf.xmax)) { /* set the frame to use, and apply inverse-correction for NLA-mapping * so that the frame will get selected by the selection functiosn without @@ -836,14 +841,17 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, found= 1; break; } + else if (ak->cfra < rectf.xmin) + akn= ak->right; + else + akn= ak->left; } /* remove active channel from list of channels for separate treatment (since it's needed later on) */ BLI_remlink(&anim_data, ale); /* cleanup temporary lists */ - BLI_freelistN(&anim_keys); - anim_keys.first = anim_keys.last = NULL; + BLI_dlrbTree_free(&anim_keys); /* free list of channels, since it's not used anymore */ BLI_freelistN(&anim_data); diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index 8d56670a149..9e60651081f 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -56,6 +56,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" #include "BLI_rand.h" +#include "BLI_dlrbTree.h" #include "BKE_animsys.h" #include "BKE_fcurve.h" @@ -127,13 +128,15 @@ static void nla_action_get_color (AnimData *adt, bAction *act, float color[4]) /* draw the keyframes in the specified Action */ static void nla_action_draw_keyframes (AnimData *adt, bAction *act, View2D *v2d, float y, float ymin, float ymax) { - ListBase keys = {NULL, NULL}; + DLRBT_Tree keys; ActKeyColumn *ak; float xscale, f1, f2; float color[4]; /* get a list of the keyframes with NLA-scaling applied */ + BLI_dlrbTree_init(&keys); action_to_keylist(adt, act, &keys, NULL); + BLI_dlrbTree_linkedlist_sync(&keys); if ELEM(NULL, act, keys.first) return; @@ -165,7 +168,7 @@ static void nla_action_draw_keyframes (AnimData *adt, bAction *act, View2D *v2d, draw_keyframe_shape(ak->cfra, y, xscale, 3.0f, 0, KEYFRAME_SHAPE_FRAME); /* free icons */ - BLI_freelistN(&keys); + BLI_dlrbTree_free(&keys); } /* Strips (Proper) ---------------------- */ diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index ec3b716e616..b698b404825 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -52,6 +52,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" +#include "BLI_dlrbTree.h" #include "BKE_animsys.h" #include "BKE_action.h" @@ -2026,7 +2027,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec bArmature *arm= ob->data; bPoseChannel *pchan; ActKeyColumn *ak; - ListBase keys; + DLRBT_Tree keys; float *fp, *fp_start; int a, stepsize; int sfra, efra, len; @@ -2168,12 +2169,14 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec /* Keyframes - dots and numbers */ if (arm->pathflag & ARM_PATH_KFRAS) { /* build list of all keyframes in active action for pchan */ - keys.first = keys.last = NULL; + BLI_dlrbTree_init(&keys); if (adt) { bActionGroup *agrp= action_groups_find_named(adt->action, pchan->name); - if (agrp) + if (agrp) { agroup_to_keylist(adt, agrp, &keys, NULL); + BLI_dlrbTree_linkedlist_sync(&keys); + } } /* Draw slightly-larger yellow dots at each keyframe */ @@ -2205,7 +2208,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec } } - BLI_freelistN(&keys); + BLI_dlrbTree_free(&keys); } } } @@ -2319,7 +2322,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, bAction *act= (adt) ? adt->action : NULL; bArmature *arm= ob->data; bPose *posen, *poseo; - ListBase keys= {NULL, NULL}; + DLRBT_Tree keys; ActKeyColumn *ak, *akn; float start, end, range, colfac, i; int cfrao, flago; @@ -2330,13 +2333,16 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, return; /* get keyframes - then clip to only within range */ + BLI_dlrbTree_init(&keys); action_to_keylist(adt, act, &keys, NULL); + BLI_dlrbTree_linkedlist_sync(&keys); + range= 0; for (ak= keys.first; ak; ak= akn) { akn= ak->next; if ((ak->cfra < start) || (ak->cfra > end)) - BLI_freelinkN(&keys, ak); + BLI_freelinkN((ListBase *)&keys, ak); else range++; } @@ -2374,7 +2380,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, if (v3d->zbuf) glEnable(GL_DEPTH_TEST); ghost_poses_tag_unselected(ob, 1); /* unhide unselected bones if need be */ - BLI_freelistN(&keys); + BLI_dlrbTree_free(&keys); free_pose(posen); /* restore */ From 178bc61dd3250507fda7107fbb11b02dc95f2e6b Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 18 Jul 2009 11:32:52 +0000 Subject: [PATCH 242/512] 2.5 Fix for Makefile to use GLEW in console editor --- source/blender/editors/space_console/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/space_console/Makefile b/source/blender/editors/space_console/Makefile index 19ca75beaf8..a7c9283985b 100644 --- a/source/blender/editors/space_console/Makefile +++ b/source/blender/editors/space_console/Makefile @@ -35,6 +35,7 @@ include nan_compile.mk CFLAGS += $(LEVEL_1_C_WARNINGS) +CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) # not very neat.... From 3a32411f2b756851cf0211e2769ac4a31bbfa4c3 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sat, 18 Jul 2009 11:39:50 +0000 Subject: [PATCH 243/512] 2.5 - Removing quick test operator that I added by mistake It was used to quickly test that the red-black tree was being built correctly, but was really an incomplete operator... --- .../blender/editors/space_action/action_ops.c | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index c4dbe92985a..490f301e9e8 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -57,71 +57,6 @@ #include "WM_api.h" #include "WM_types.h" - -/* ------------- */ - -#include "BLI_dlrbTree.h" -#include "ED_anim_api.h" -#include "ED_keyframes_draw.h" -#include "DNA_object_types.h" - -static int act_drawtree_test_exec (bContext *C, wmOperator *op) -{ - bAnimContext ac; - bDopeSheet *ads; - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter, items; - - ANIM_animdata_get_context(C, &ac); - ads= ac.data; - - /* build list of channels to draw */ - filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); - items= ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - - if (items) { - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= BKE_animdata_from_id(ale->id); - - - if (ale->type == ANIMTYPE_GROUP) { - DLRBT_Tree keys; - ActKeyColumn *ak; - - BLI_dlrbTree_init(&keys); - - agroup_to_keylist(adt, ale->data, &keys, NULL); - - BLI_dlrbTree_linkedlist_sync(&keys); - - printf("printing sorted list of object keyframes --------------- \n"); - for (ak= keys.first; ak; ak= ak->next) { - printf("\t%p (%f) | L:%p R:%p P:%p \n", ak, ak->cfra, ak->left, ak->right, ak->parent); - } - - printf("printing tree ---------------- \n"); - for (ak= keys.root; ak; ak= ak->next) { - printf("\t%p (%f) | L:%p R:%p P:%p \n", ak, ak->cfra, ak->left, ak->right, ak->parent); - } - - BLI_dlrbTree_free(&keys); - - break; - } - } - - BLI_freelistN(&anim_data); - } -} - -void ACT_OT_test (wmOperatorType *ot) -{ - ot->idname= "ACT_OT_test"; - - ot->exec= act_drawtree_test_exec; -} - /* ************************** registration - operator types **********************************/ void action_operatortypes(void) @@ -150,9 +85,6 @@ void action_operatortypes(void) WM_operatortype_append(ACT_OT_previewrange_set); WM_operatortype_append(ACT_OT_view_all); - - // test - WM_operatortype_append(ACT_OT_test); } /* ************************** registration - keymaps **********************************/ From c13674614e96b0b8d38f6717374a3181bb59a50c Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Sat, 18 Jul 2009 13:29:47 +0000 Subject: [PATCH 244/512] 2.5/Sculpt: * Fixed the NKEY panel not updating when switching to sculpt mode * Removed some old XXX'd code for testing textures, can replace that now with proper brush-texture UI --- source/blender/editors/sculpt_paint/sculpt.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 7245218c688..b1dcef39eee 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -1627,8 +1627,6 @@ static int sculpt_toggle_mode(bContext *C, wmOperator *op) sculptsession_free(ts->sculpt); } else { - MTex *mtex; // XXX: temporary - /* Enter sculptmode */ G.f |= G_SCULPTMODE; @@ -1647,17 +1645,7 @@ static int sculpt_toggle_mode(bContext *C, wmOperator *op) /* If there's no brush, create one */ brush_check_exists(&ts->sculpt->brush); - /* XXX: testing: set the brush texture to the first available one */ - if(G.main->tex.first) { - Tex *tex = G.main->tex.first; - if(tex->type) { - mtex = MEM_callocN(sizeof(MTex), "test mtex"); - ts->sculpt->brush->texact = 0; - ts->sculpt->brush->mtex[0] = mtex; - mtex->tex = tex; - mtex->size[0] = mtex->size[1] = mtex->size[2] = 50; - } - } + WM_event_add_notifier(C, NC_SCENE|ND_MODE, CTX_data_scene(C)); } return OPERATOR_FINISHED; From d9e16f494fc60eb41410a611102439fbec1ef3b1 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sat, 18 Jul 2009 14:55:03 +0000 Subject: [PATCH 245/512] Use verb for operator names Translation -> Translate Rotation -> Rotate --- source/blender/editors/mesh/editmesh_tools.c | 4 +- .../editors/transform/transform_manipulator.c | 4 +- .../blender/editors/transform/transform_ops.c | 46 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 2e869933db9..e16adf8ab2e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -719,7 +719,7 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -4991,7 +4991,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_enum_set(op->ptr, "proportional", 0); RNA_boolean_set(op->ptr, "mirror", 0); - WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index ef92787701c..78837b3b0bb 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -1601,7 +1601,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_translation", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); } else if (drawflags & MAN_SCALE_C) { switch(drawflags) { @@ -1649,7 +1649,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_rotation", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TFM_OT_rotate", WM_OP_INVOKE_REGION_WIN, op->ptr); } } /* after transform, restore drawflags */ diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index f817776dbd8..6ca4c620303 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -88,8 +88,8 @@ EnumPropertyItem orientation_items[]= { {V3D_MANIP_VIEW, "VIEW", 0, "View", ""}, {0, NULL, 0, NULL, NULL}}; -char OP_TRANSLATION[] = "TFM_OT_translation"; -char OP_ROTATION[] = "TFM_OT_rotation"; +char OP_TRANSLATION[] = "TFM_OT_translate"; +char OP_ROTATION[] = "TFM_OT_rotate"; char OP_TOSPHERE[] = "TFM_OT_tosphere"; char OP_RESIZE[] = "TFM_OT_resize"; char OP_SHEAR[] = "TFM_OT_shear"; @@ -301,10 +301,10 @@ void Properties_Constraints(struct wmOperatorType *ot) RNA_def_enum_funcs(prop, select_orientation_itemf); } -void TFM_OT_translation(struct wmOperatorType *ot) +void TFM_OT_translate(struct wmOperatorType *ot) { /* identifiers */ - ot->name = "Translation"; + ot->name = "Translate"; ot->idname = OP_TRANSLATION; ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; @@ -373,10 +373,10 @@ void TFM_OT_trackball(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); } -void TFM_OT_rotation(struct wmOperatorType *ot) +void TFM_OT_rotate(struct wmOperatorType *ot) { /* identifiers */ - ot->name = "Rotation"; + ot->name = "Rotate"; ot->idname = OP_ROTATION; ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; @@ -568,8 +568,8 @@ void TFM_OT_transform(struct wmOperatorType *ot) void transform_operatortypes(void) { WM_operatortype_append(TFM_OT_transform); - WM_operatortype_append(TFM_OT_translation); - WM_operatortype_append(TFM_OT_rotation); + WM_operatortype_append(TFM_OT_translate); + WM_operatortype_append(TFM_OT_rotate); WM_operatortype_append(TFM_OT_tosphere); WM_operatortype_append(TFM_OT_resize); WM_operatortype_append(TFM_OT_shear); @@ -587,11 +587,11 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key switch(spaceid) { case SPACE_VIEW3D: - km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); @@ -625,15 +625,15 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key RNA_int_set(km->ptr, "mode", TFM_TIME_SLIDE); break; case SPACE_IPO: - km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); // XXX the 'mode' identifier here is not quite right km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); break; @@ -651,29 +651,29 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE); break; case SPACE_NODE: - km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_A, KM_ANY, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_A, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); break; case SPACE_SEQ: - km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); break; case SPACE_IMAGE: - km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); From d0b6a2710471e50d52b65a2f6a645c1e1433e201 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sat, 18 Jul 2009 15:02:12 +0000 Subject: [PATCH 246/512] Second round of transform mouse buttons experiment. Confirm on LMB up but cancel on RMB down. This works well with hotkeys, manipulator, RMB+drag and gesture (when they are added back). The question is do we stick with one scheme for all or have separate keymaps for different "calling mode". --- source/blender/editors/transform/transform.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index c62ea07e398..d8b62b40dff 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -515,6 +515,9 @@ void transformEvent(TransInfo *t, wmEvent *event) if (event->val) { switch (event->type){ + case RIGHTMOUSE: + t->state = TRANS_CANCEL; + break; /* enforce redraw of transform when modifiers are used */ case LEFTCTRLKEY: case RIGHTCTRLKEY: @@ -814,9 +817,6 @@ void transformEvent(TransInfo *t, wmEvent *event) } else { switch (event->type){ - case RIGHTMOUSE: - t->state = TRANS_CANCEL; - break; case LEFTMOUSE: t->state = TRANS_CONFIRM; break; From 75b8badda5b044f56b512cd2874d80d7af1fd012 Mon Sep 17 00:00:00 2001 From: Elia Sarti Date: Sat, 18 Jul 2009 15:14:59 +0000 Subject: [PATCH 247/512] 2.5 / RNA Fix for render layers' rendering options Was using same flag for all options --- source/blender/makesrna/intern/rna_scene.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index ef9d958a9c0..f300ab1b26f 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -425,27 +425,27 @@ void rna_def_scene_render_layer(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_HALO); RNA_def_property_ui_text(prop, "Halo", "Render Halos in this Layer (on top of Solid)."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "ztransp", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZTRA); RNA_def_property_ui_text(prop, "ZTransp", "Render Z-Transparent faces in this Layer (On top of Solid and Halos)."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SKY); RNA_def_property_ui_text(prop, "Sky", "Render Sky in this Layer."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_EDGE); RNA_def_property_ui_text(prop, "Edge", "Render Edge-enhance in this Layer (only works for Solid faces)."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "strand", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); + RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_STRAND); RNA_def_property_ui_text(prop, "Strand", "Render Strands in this Layer."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); From 119844eb23718870df614a68a035573e9c5e4e11 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 16:27:25 +0000 Subject: [PATCH 248/512] fixes for errors on startup and compiler errors and draw speedup. * Drawing the console text now skips all lines outside the view bounds. * Added dummy C operators for console.exec and console.autocomplete so blender wont complain at startup, its not really a problem but people testing reported it a few times. Eventually we should have some way python operators are initialized before the spaces operators are checked. * reordered the imports so the "ui" dir is imported before "io", for now this means bpy.ops is defined before exporters and importers need to use it, was causing a python error on startup. * fixed all compiler warnings for the console (gcc4.4) * stopped operators were printing out the return flag. * removed references to ACT_OT_test, TEXT_OT_console_exec and TEXT_OT_console_autocomplete --- .../blender/editors/space_action/action_ops.c | 2 +- .../editors/space_console/console_draw.c | 28 +++++++----- .../editors/space_console/console_intern.h | 13 ++---- .../editors/space_console/console_ops.c | 43 ++++++++++++++----- .../editors/space_console/space_console.c | 11 ++--- .../blender/editors/space_text/space_text.c | 4 -- source/blender/python/intern/bpy_interface.c | 2 +- .../blender/python/intern/bpy_operator_wrap.c | 3 ++ 8 files changed, 65 insertions(+), 41 deletions(-) diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index 490f301e9e8..f18b6197eb3 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -156,7 +156,7 @@ static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap) transform_keymap_for_space(wm, keymap, SPACE_ACTION); /* test */ - WM_keymap_add_item(keymap, "ACT_OT_test", QKEY, KM_PRESS, 0, 0); + /* WM_keymap_add_item(keymap, "ACT_OT_test", QKEY, KM_PRESS, 0, 0); */ } /* --------------- */ diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 96641fd8fbd..65e18beabbc 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -109,23 +109,28 @@ static void console_report_color(unsigned char *fg, int type) static int console_draw_string( char *str, int str_len, int console_width, int lheight, unsigned char *fg, unsigned char *bg, - int winx, int winy, + int winx, + int ymin, int ymax, int *x, int *y, int draw) { int rct_ofs= lheight/4; - int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ + int tot_lines = (str_len/console_width)+1; /* total number of lines for wrapping */ + int y_next = (str_len > console_width) ? (*y)+lheight*tot_lines : (*y)+lheight; /* just advance the height */ if(draw==0) { - if(str_len > console_width) (*y) += tot_lines * lheight; - else (*y) += lheight; - + *y= y_next; + return 1; + } + else if (y_next-lheight < ymin) { + /* have not reached the drawable area so don't break */ + *y= y_next; return 1; } if(str_len > console_width) { /* wrap? */ char *line_stride= str + ((tot_lines-1) * console_width); /* advance to the last line and draw it first */ - char eol; /* baclup the end of wrapping */ + char eol; /* baclup the end of wrapping */ if(bg) { glColor3ub(bg[0], bg[1], bg[2]); @@ -149,7 +154,7 @@ static int console_draw_string( char *str, int str_len, line_stride[console_width] = eol; /* restore */ /* check if were out of view bounds */ - if(*y > winy) + if(*y > ymax) return 0; } } @@ -165,7 +170,7 @@ static int console_draw_string( char *str, int str_len, BLF_position(*x, *y, 0); (*y) += lheight; BLF_draw(str); - if(*y > winy) + if(*y > ymax) return 0; } @@ -230,7 +235,8 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * if(!console_draw_string( cl->line, cl->len, console_width, sc->lheight, fg, NULL, - ar->winx-CONSOLE_DRAW_MARGIN, v2d->cur.ymax, + ar->winx-CONSOLE_DRAW_MARGIN, + v2d->cur.ymin, v2d->cur.ymax, &x, &y, draw)) { /* when drawing, if we pass v2d->cur.ymax, then quit */ @@ -268,7 +274,8 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * if(!console_draw_string( report->message, report->len, console_width, sc->lheight, fg, bool?bg:NULL, - ar->winx-CONSOLE_DRAW_MARGIN, v2d->cur.ymax, + ar->winx-CONSOLE_DRAW_MARGIN, + v2d->cur.ymin, v2d->cur.ymax, &x, &y, draw)) { /* when drawing, if we pass v2d->cur.ymax, then quit */ @@ -279,7 +286,6 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * bool = !(bool); } - } } y += sc->lheight*2; diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 2e5af9c5ffd..0a911fb546a 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -61,16 +61,11 @@ void CONSOLE_OT_clear(wmOperatorType *ot); void CONSOLE_OT_history_cycle(wmOperatorType *ot); void CONSOLE_OT_zoom(wmOperatorType *ot); +/* DUMMY OPS. python will replace */ +void CONSOLE_OT_exec(wmOperatorType *ot); +void CONSOLE_OT_autocomplete(wmOperatorType *ot); + enum { LINE_BEGIN, LINE_END, PREV_CHAR, NEXT_CHAR, PREV_WORD, NEXT_WORD }; enum { DEL_ALL, DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_SELECTION, DEL_NEXT_SEL, DEL_PREV_SEL }; -/* defined in DNA_space_types.h */ -static EnumPropertyItem console_line_type_items[] = { - {CONSOLE_LINE_OUTPUT, "OUTPUT", 0, "Output", ""}, - {CONSOLE_LINE_INPUT, "INPUT", 0, "Input", ""}, - {CONSOLE_LINE_INFO, "INFO", 0, "Information", ""}, - {CONSOLE_LINE_ERROR, "ERROR", 0, "Error", ""}, - {0, NULL, 0, NULL, NULL}}; - #endif /* ED_CONSOLE_INTERN_H */ - diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index c82463eb768..359202ba022 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -128,12 +128,14 @@ static ConsoleLine *console_history_add(const bContext *C, ConsoleLine *from) return console_lb_add__internal(&sc->history, from); } +#if 0 /* may use later ? */ static ConsoleLine *console_scrollback_add(const bContext *C, ConsoleLine *from) { SpaceConsole *sc= CTX_wm_space_console(C); return console_lb_add__internal(&sc->scrollback, from); } +#endif static ConsoleLine *console_lb_add_str__internal(ListBase *lb, const bContext *C, char *str, int own) { @@ -198,7 +200,7 @@ static int console_line_insert(ConsoleLine *ci, char *str) return len; } -static int console_edit_poll(const bContext *C) +static int console_edit_poll(bContext *C) { SpaceConsole *sc= CTX_wm_space_console(C); @@ -221,7 +223,7 @@ static EnumPropertyItem move_type_items[]= { {NEXT_WORD, "NEXT_WORD", 0, "Next Word", ""}, {0, NULL, 0, NULL, NULL}}; -static int move_exec(const bContext *C, wmOperator *op) +static int move_exec(bContext *C, wmOperator *op) { ConsoleLine *ci= console_history_verify(C); @@ -268,7 +270,7 @@ void CONSOLE_OT_move(wmOperatorType *ot) } -static int insert_exec(const bContext *C, wmOperator *op) +static int insert_exec(bContext *C, wmOperator *op) { ConsoleLine *ci= console_history_verify(C); char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); @@ -285,7 +287,7 @@ static int insert_exec(const bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -static int insert_invoke(const bContext *C, wmOperator *op, wmEvent *event) +static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) { if(!RNA_property_is_set(op->ptr, "text")) { char str[2] = {event->ascii, '\0'}; @@ -320,7 +322,7 @@ static EnumPropertyItem delete_type_items[]= { // {DEL_PREV_WORD, "PREVIOUS_WORD", 0, "Previous Word", ""}, {0, NULL, 0, NULL, NULL}}; -static int delete_exec(const bContext *C, wmOperator *op) +static int delete_exec(bContext *C, wmOperator *op) { ConsoleLine *ci= console_history_verify(C); @@ -380,7 +382,7 @@ void CONSOLE_OT_delete(wmOperatorType *ot) /* the python exec operator uses this */ -static int clear_exec(const bContext *C, wmOperator *op) +static int clear_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); @@ -425,7 +427,7 @@ void CONSOLE_OT_clear(wmOperatorType *ot) /* the python exec operator uses this */ -static int history_cycle_exec(const bContext *C, wmOperator *op) +static int history_cycle_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); ConsoleLine *ci= console_history_verify(C); /* TODO - stupid, just prevernts crashes when no command line */ @@ -467,7 +469,7 @@ void CONSOLE_OT_history_cycle(wmOperatorType *ot) /* the python exec operator uses this */ -static int history_append_exec(const bContext *C, wmOperator *op) +static int history_append_exec(bContext *C, wmOperator *op) { ConsoleLine *ci= console_history_verify(C); @@ -503,7 +505,7 @@ void CONSOLE_OT_history_append(wmOperatorType *ot) /* the python exec operator uses this */ -static int scrollback_append_exec(const bContext *C, wmOperator *op) +static int scrollback_append_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); ConsoleLine *ci= console_history_verify(C); @@ -523,6 +525,14 @@ static int scrollback_append_exec(const bContext *C, wmOperator *op) void CONSOLE_OT_scrollback_append(wmOperatorType *ot) { + /* defined in DNA_space_types.h */ + static EnumPropertyItem console_line_type_items[] = { + {CONSOLE_LINE_OUTPUT, "OUTPUT", 0, "Output", ""}, + {CONSOLE_LINE_INPUT, "INPUT", 0, "Input", ""}, + {CONSOLE_LINE_INFO, "INFO", 0, "Information", ""}, + {CONSOLE_LINE_ERROR, "ERROR", 0, "Error", ""}, + {0, NULL, 0, NULL, NULL}}; + /* identifiers */ ot->name= "Scrollback Append"; ot->idname= "CONSOLE_OT_scrollback_append"; @@ -539,7 +549,7 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", console_line_type_items, CONSOLE_LINE_OUTPUT, "Type", "Console output type."); } -static int zoom_exec(const bContext *C, wmOperator *op) +static int zoom_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); @@ -570,3 +580,16 @@ void CONSOLE_OT_zoom(wmOperatorType *ot) RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "Scale the view font.", 0, 1000); } +/* Dummy operators, python will replace these, so blender can start without any errors */ +void CONSOLE_OT_exec(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "CONSOLE_OT_exec dummy"; + ot->idname= "CONSOLE_OT_exec"; +} +void CONSOLE_OT_autocomplete(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "CONSOLE_OT_autocomplete dummy"; + ot->idname= "CONSOLE_OT_autocomplete"; +} diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 6bc948a880a..5551a303ead 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -215,6 +215,10 @@ void console_operatortypes(void) WM_operatortype_append(CONSOLE_OT_clear); WM_operatortype_append(CONSOLE_OT_history_cycle); WM_operatortype_append(CONSOLE_OT_zoom); + + /* Dummy, defined in space_console.py */ + WM_operatortype_append(CONSOLE_OT_exec); + WM_operatortype_append(CONSOLE_OT_autocomplete); } void console_keymap(struct wmWindowManager *wm) @@ -345,10 +349,7 @@ void ED_spacetype_console(void) art->draw= console_header_area_draw; BLI_addhead(&sc->regiontypes, art); - - - + + BKE_spacetype_register(sc); } - - diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 68848c39c25..c260fe05093 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -285,10 +285,6 @@ static void text_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "TEXT_OT_line_break", RETKEY, KM_PRESS, 0, 0); -#ifndef DISABLE_PYTHON - WM_keymap_add_item(keymap, "TEXT_OT_console_exec", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */ - WM_keymap_add_item(keymap, "TEXT_OT_console_autocomplete", RETKEY, KM_PRESS, KM_ALT, 0); /* python operator - space_text.py */ -#endif WM_keymap_add_item(keymap, "TEXT_OT_line_number", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); WM_keymap_add_item(keymap, "TEXT_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 8fcd69c67c7..18dae972db4 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -452,7 +452,7 @@ void BPY_run_ui_scripts(bContext *C, int reload) char *file_extension; char *dirname; char path[FILE_MAX]; - char *dirs[] = {"io", "ui", NULL}; + char *dirs[] = {"ui", "io", NULL}; int a; PyGILState_STATE gilstate; diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index 33d276ba5b3..9f4137a15c0 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -191,6 +191,8 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve Py_DECREF(ret); } +#if 0 /* only for testing */ + /* print operator return value */ if (mode != PYOP_POLL) { char flag_str[100]; @@ -216,6 +218,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve fprintf(stderr, "%s's %s returned %s\n", class_name, mode == PYOP_EXEC ? "execute" : "invoke", flag_str); } +#endif PyGILState_Release(gilstate); bpy_import_main_set(NULL); From 9b75187c55831030d9ba73ac9f2bd17b406be28d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 19:40:26 +0000 Subject: [PATCH 249/512] initialize keymaps after python so python keymaps, solves the problem of keymaps complaining about python operators not existing, but at the expense of some annoying init flags/functions. :/ Brecht/Ton you may want to check that C->data.py_init is a good place to store this. --- source/blender/blenkernel/BKE_context.h | 4 ++++ source/blender/blenkernel/intern/context.c | 11 +++++++++++ .../makesdna/DNA_windowmanager_types.h | 3 +++ source/blender/windowmanager/WM_api.h | 1 + source/blender/windowmanager/intern/wm.c | 19 +++++++++++++++---- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 5baf5af81d1..8078f57b98e 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -101,6 +101,10 @@ bContextStore *CTX_store_copy(bContextStore *store); void CTX_store_free(bContextStore *store); void CTX_store_free_list(ListBase *contexts); +/* need to store if python is initialized or not */ +int CTX_py_init_get(bContext *C); +int CTX_py_init_set(bContext *C, int value); + /* Window Manager Context */ struct wmWindowManager *CTX_wm_manager(const bContext *C); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 4bfc1484e56..17349ecc919 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -68,6 +68,7 @@ struct bContext { struct Scene *scene; int recursion; + int py_init; /* true if python is initialized */ } data; /* data evaluation */ @@ -162,6 +163,16 @@ void CTX_store_free_list(ListBase *contexts) } } +/* is python initialied? */ +int CTX_py_init_get(bContext *C) +{ + return C->data.py_init; +} +int CTX_py_init_set(bContext *C, int value) +{ + C->data.py_init= value; +} + /* window manager context */ wmWindowManager *CTX_wm_manager(const bContext *C) diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 69ab45d3389..126b6c47b63 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -117,6 +117,9 @@ typedef struct wmWindowManager { } wmWindowManager; +/* wmWindowManager.initialized */ +#define WM_INIT_WINDOW 1<<0 +#define WM_INIT_KEYMAP 1<<1 /* the savable part, rest of data is local in ghostwinlay */ typedef struct wmWindow { diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index a5e1df1669a..3615df8bd3b 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -72,6 +72,7 @@ void *WM_paint_cursor_activate(struct wmWindowManager *wm, int (*poll)(struct b void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle); /* keymap */ +void WM_keymap_init (struct bContext *C); wmKeymapItem *WM_keymap_verify_item(ListBase *lb, char *idname, short type, short val, int modifier, short keymodifier); wmKeymapItem *WM_keymap_add_item(ListBase *lb, char *idname, short type, diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 94200925a02..863fb3ab4bd 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -120,6 +120,18 @@ void WM_operator_stack_clear(bContext *C) /* ****************************************** */ +void WM_keymap_init(bContext *C) +{ + wmWindowManager *wm= CTX_wm_manager(C); + + if(CTX_py_init_get(C) && (wm->initialized & WM_INIT_KEYMAP) == 0) { + wm_window_keymap(wm); + ED_spacetypes_keymap(wm); + + wm->initialized |= WM_INIT_KEYMAP; + } +} + void wm_check(bContext *C) { wmWindowManager *wm= CTX_wm_manager(C); @@ -136,13 +148,12 @@ void wm_check(bContext *C) wm_window_add_ghostwindows(wm); /* case: fileread */ - if(wm->initialized==0) { + if((wm->initialized & WM_INIT_WINDOW) == 0) { - wm_window_keymap(wm); - ED_spacetypes_keymap(wm); + WM_keymap_init(C); ED_screens_initialize(wm); - wm->initialized= 1; + wm->initialized |= WM_INIT_WINDOW; } } From 2d88c069bcfcbdd6742decb92b7fc71f72d7f47c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jul 2009 19:42:13 +0000 Subject: [PATCH 250/512] missed this file in last commit. --- source/blender/blenkernel/BKE_context.h | 2 +- source/blender/blenkernel/intern/context.c | 2 +- source/blender/windowmanager/WM_api.h | 4 ++-- source/blender/windowmanager/intern/wm_operators.c | 4 ++-- source/creator/creator.c | 3 +++ 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 8078f57b98e..83cac0adf93 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -103,7 +103,7 @@ void CTX_store_free_list(ListBase *contexts); /* need to store if python is initialized or not */ int CTX_py_init_get(bContext *C); -int CTX_py_init_set(bContext *C, int value); +void CTX_py_init_set(bContext *C, int value); /* Window Manager Context */ diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 17349ecc919..08182dc873b 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -168,7 +168,7 @@ int CTX_py_init_get(bContext *C) { return C->data.py_init; } -int CTX_py_init_set(bContext *C, int value) +void CTX_py_init_set(bContext *C, int value) { C->data.py_init= value; } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 3615df8bd3b..609d599a09a 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -150,8 +150,8 @@ void WM_operator_properties_free(struct PointerRNA *ptr); /* operator as a python command (resultuing string must be free'd) */ char *WM_operator_pystring(struct wmOperator *op); -void WM_operator_bl_idname(char *to, char *from); -void WM_operator_bl_idname(char *to, char *from); +void WM_operator_bl_idname(char *to, const char *from); +void WM_operator_py_idname(char *to, const char *from); /* default operator callbacks for border/circle/lasso */ int WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 57c090f29ed..9e8c5dc7ca0 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -162,7 +162,7 @@ int WM_operatortype_remove(const char *idname) } /* SOME_OT_op -> some.op */ -void WM_operator_py_idname(char *to, char *from) +void WM_operator_py_idname(char *to, const char *from) { char *sep= strstr(from, "_OT_"); if(sep) { @@ -181,7 +181,7 @@ void WM_operator_py_idname(char *to, char *from) } /* some.op -> SOME_OT_op */ -void WM_operator_bl_idname(char *to, char *from) +void WM_operator_bl_idname(char *to, const char *from) { char *sep= strstr(from, "."); diff --git a/source/creator/creator.c b/source/creator/creator.c index 9bf09a46461..45288bfb9b5 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -549,6 +549,9 @@ int main(int argc, char **argv) BPY_run_ui_scripts(C, 0); /* dont need to reload the first time */ #endif + CTX_py_init_set(C, 1); + WM_keymap_init(C); /* after BPY_run_ui_scripts() */ + #ifdef WITH_QUICKTIME quicktime_init(); From ad2e306b09bc1b53446f248d24621476c1eb9093 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Sat, 18 Jul 2009 23:12:42 +0000 Subject: [PATCH 251/512] SVN maintenance. --- source/blender/blenlib/BLI_dlrbTree.h | 2 +- source/blender/blenlib/intern/DLRB_tree.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenlib/BLI_dlrbTree.h b/source/blender/blenlib/BLI_dlrbTree.h index eeb224ad1f4..a17cbbd1993 100644 --- a/source/blender/blenlib/BLI_dlrbTree.h +++ b/source/blender/blenlib/BLI_dlrbTree.h @@ -1,5 +1,5 @@ /** - * $Id: BLI_dlrbTree.h 21514 2009-07-11 05:41:21Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c index debe02164fb..766547cee05 100644 --- a/source/blender/blenlib/intern/DLRB_tree.c +++ b/source/blender/blenlib/intern/DLRB_tree.c @@ -1,5 +1,5 @@ /** - * $Id: BLI_dlrbTree.c 21514 2009-07-11 05:41:21Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From d7564761c03c560efd33591d47559f889d07bff1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 00:49:44 +0000 Subject: [PATCH 252/512] operator macro playback (run operator reports in the console) - reports can be selected with RMB, Border (bkey) and (de)select all. - delete reports (X key) - run operators in the console (R key) - copy reports (Ctrl+C), can be pasted in the text editor an run with alt+p Details - Added "selected_editable_objects" and "selected_editable_bases" to screen_context.c, use the scene layers, this was needed for duplicate to run outside the 3D view. - RNA_property_as_string converted an array of 1 into "(num)" need a comma so python sees it as a tuple - "(num,)" - add flag to reports, use for seletion atm. opens a new world of context bugs :) --- release/ui/space_console.py | 49 ++- source/blender/blenkernel/intern/multires.c | 4 +- source/blender/blenkernel/intern/object.c | 13 +- source/blender/editors/include/ED_object.h | 1 + source/blender/editors/object/object_edit.c | 2 +- .../blender/editors/screen/screen_context.c | 22 +- .../editors/space_console/console_draw.c | 77 +++- .../editors/space_console/console_intern.h | 16 +- .../editors/space_console/console_ops.c | 21 +- .../editors/space_console/console_report.c | 414 ++++++++++++++++++ .../editors/space_console/space_console.c | 29 +- .../editors/space_view3d/space_view3d.c | 26 +- source/blender/makesdna/DNA_scene_types.h | 2 +- .../makesdna/DNA_windowmanager_types.h | 3 +- source/blender/makesrna/intern/rna_access.c | 6 + 15 files changed, 605 insertions(+), 80 deletions(-) create mode 100644 source/blender/editors/space_console/console_report.c diff --git a/release/ui/space_console.py b/release/ui/space_console.py index b92e3b7d51c..18994352034 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -15,19 +15,29 @@ class CONSOLE_HT_header(bpy.types.Header): layout.template_header() - if context.area.show_menus: - row = layout.row() - row.itemM("CONSOLE_MT_console") - row = layout.row() - row.scale_x = 0.9 row.itemR(sc, "type", expand=True) + if sc.type == 'REPORT': - row.itemR(sc, "show_report_debug") - row.itemR(sc, "show_report_info") - row.itemR(sc, "show_report_operator") - row.itemR(sc, "show_report_warn") - row.itemR(sc, "show_report_error") + + if context.area.show_menus: + row = layout.row() + row.itemM("CONSOLE_MT_report") + + row.itemR(sc, "show_report_debug", text="Debug") + row.itemR(sc, "show_report_info", text="Info") + row.itemR(sc, "show_report_operator", text="Operators") + row.itemR(sc, "show_report_warn", text="Warnings") + row.itemR(sc, "show_report_error", text="Errors") + + row = layout.row() + row.enabled = sc.show_report_operator + row.itemO("console.report_replay") + + else: + if context.area.show_menus: + row = layout.row() + row.itemM("CONSOLE_MT_console") class CONSOLE_MT_console(bpy.types.Menu): @@ -41,6 +51,20 @@ class CONSOLE_MT_console(bpy.types.Menu): layout.column() layout.itemO("console.clear") +class CONSOLE_MT_report(bpy.types.Menu): + __space_type__ = "CONSOLE" + __label__ = "Report" + + def draw(self, context): + layout = self.layout + sc = context.space_data + + layout.column() + layout.itemO("console.select_all_toggle") + layout.itemO("console.select_border") + layout.itemO("console.report_delete") + layout.itemO("console.report_copy") + def add_scrollback(text, text_type): for l in text.split('\n'): bpy.ops.console.scrollback_append(text=l.replace('\t', ' '), type=text_type) @@ -97,7 +121,7 @@ class CONSOLE_OT_exec(bpy.types.Operator): Operator documentatuon text, will be used for the operator tooltip and python docs. ''' __label__ = "Console Execute" - __register__ = True + __register__ = False # Both prompts must be the same length PROMPT = '>>> ' @@ -373,7 +397,7 @@ class CONSOLE_OT_autocomplete(bpy.types.Operator): Operator documentatuon text, will be used for the operator tooltip and python docs. ''' __label__ = "Console Autocomplete" - __register__ = True + __register__ = False def poll(self, context): return context.space_data.type == 'PYTHON' @@ -423,6 +447,7 @@ class CONSOLE_OT_autocomplete(bpy.types.Operator): bpy.types.register(CONSOLE_HT_header) bpy.types.register(CONSOLE_MT_console) +bpy.types.register(CONSOLE_MT_report) bpy.ops.add(CONSOLE_OT_exec) bpy.ops.add(CONSOLE_OT_autocomplete) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 5def910ddef..22a471f6521 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -101,7 +101,7 @@ void multiresModifier_join(Object *ob) /* First find the highest level of subdivision */ base = FIRSTBASE; while(base) { - if(TESTBASELIB_BGMODE(base) && base->object->type==OB_MESH) { + if(TESTBASELIB_BGMODE(v3d, base) && base->object->type==OB_MESH) { ModifierData *md; for(md = base->object->modifiers.first; md; md = md->next) { if(md->type == eModifierType_Multires) { @@ -124,7 +124,7 @@ void multiresModifier_join(Object *ob) /* Subdivide all the displacements to the highest level */ base = FIRSTBASE; while(base) { - if(TESTBASELIB_BGMODE(base) && base->object->type==OB_MESH) { + if(TESTBASELIB_BGMODE(v3d, base) && base->object->type==OB_MESH) { ModifierData *md = NULL; MultiresModifierData *mmd = NULL; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index b8ea042455f..65043abe518 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1323,7 +1323,18 @@ void make_local_object(Object *ob) expand_local_object(ob); } -/* returns true if the Object data is a from an external blend file (libdata) */ +/* + * Returns true if the Object is a from an external blend file (libdata) + */ +int object_is_libdata(Object *ob) +{ + if (!ob) return 0; + if (ob->proxy) return 0; + if (ob->id.lib) return 1; + return 0; +} + +/* Returns true if the Object data is a from an external blend file (libdata) */ int object_data_is_libdata(Object *ob) { if(!ob) return 0; diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index ab718aca81f..8d4819d2d71 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -70,6 +70,7 @@ void ED_object_enter_editmode(struct bContext *C, int flag); void ED_object_base_init_from_view(struct bContext *C, struct Base *base); /* cleanup */ +int object_is_libdata(struct Object *ob); int object_data_is_libdata(struct Object *ob); /* constraints */ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 26a89999475..5ad41bd82f8 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -747,7 +747,7 @@ static void copy_object_set_idnew(Scene *scene, View3D *v3d, int dupflag) /* XXX check object pointers */ for(base= FIRSTBASE; base; base= base->next) { - if(TESTBASELIB(v3d, base)) { + if(TESTBASELIB_BGMODE(v3d, base)) { ob= base->object; relink_constraints(&ob->constraints); if (ob->pose){ diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 1ea6f8baceb..e9a979aa134 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -44,7 +44,9 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if(CTX_data_dir(member)) { static const char *dir[] = { - "scene", "selected_objects", "selected_bases", "active_base", + "scene", "selected_objects", "selected_bases", + "selected_editable_objects", "selected_editable_bases" + "active_base", "active_object", "edit_object", NULL}; CTX_data_dir_set(result, dir); @@ -68,6 +70,24 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else if(CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) { + int selected_editable_objects= CTX_data_equals(member, "selected_editable_objects"); + + for(base=scene->base.first; base; base=base->next) { + if((base->flag & SELECT) && (base->lay & scene->lay)) { + if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) { + if(0==object_is_libdata(base->object)) { + if(selected_editable_objects) + CTX_data_id_list_add(result, &base->object->id); + else + CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + } + } + } + } + + return 1; + } else if(CTX_data_equals(member, "active_base")) { if(scene->basact) CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, &scene->basact); diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 65e18beabbc..68cb1cc4a01 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "MEM_guardedalloc.h" @@ -53,6 +54,8 @@ #include "BIF_glutil.h" #include "ED_datafiles.h" +#include "ED_types.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -89,7 +92,7 @@ static void console_line_color(unsigned char *fg, int type) } } -static void console_report_color(unsigned char *fg, int type) +static void console_report_color(unsigned char *fg, unsigned char *bg, Report *report, int bool) { /* if (type & RPT_ERROR_ALL) { fg[0]=220; fg[1]=0; fg[2]=0; } @@ -99,8 +102,30 @@ static void console_report_color(unsigned char *fg, int type) else if (type & RPT_DEBUG_ALL) { fg[0]=196; fg[1]=196; fg[2]=196; } else { fg[0]=196; fg[1]=196; fg[2]=196; } */ + if(report->flag & SELECT) { + fg[0]=255; fg[1]=255; fg[2]=255; + if(bool) { + bg[0]=96; bg[1]=128; bg[2]=255; + } + else { + bg[0]=90; bg[1]=122; bg[2]=249; + } + } + + else { + fg[0]=0; fg[1]=0; fg[2]=0; + + if(bool) { + bg[0]=120; bg[1]=120; bg[2]=120; + } + else { + bg[0]=114; bg[1]=114; bg[2]=114; + } + + } + + - fg[0]=0; fg[1]=0; fg[2]=0; } @@ -180,14 +205,14 @@ static int console_draw_string( char *str, int str_len, #define CONSOLE_DRAW_MARGIN 4 #define CONSOLE_DRAW_SCROLL 16 -static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw) +static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw, int mouse_y, void **mouse_pick) { View2D *v2d= &ar->v2d; ConsoleLine *cl= sc->history.last; int x_orig=CONSOLE_DRAW_MARGIN, y_orig=CONSOLE_DRAW_MARGIN; - int x,y; + int x,y, y_prev; int cwidth; int console_width; /* number of characters that fit into the width of the console (fixed width) */ unsigned char fg[3]; @@ -200,6 +225,10 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * x= x_orig; y= y_orig; + if(mouse_y != INT_MAX) + mouse_y += (v2d->cur.ymin+CONSOLE_DRAW_MARGIN); + + if(sc->type==CONSOLE_TYPE_PYTHON) { int prompt_len; @@ -228,6 +257,7 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * y += sc->lheight; for(cl= sc->scrollback.last; cl; cl= cl->prev) { + y_prev= y; if(draw) console_line_color(fg, cl->type); @@ -235,7 +265,7 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * if(!console_draw_string( cl->line, cl->len, console_width, sc->lheight, fg, NULL, - ar->winx-CONSOLE_DRAW_MARGIN, + ar->winx-(CONSOLE_DRAW_MARGIN+CONSOLE_DRAW_SCROLL), v2d->cur.ymin, v2d->cur.ymax, &x, &y, draw)) { @@ -244,37 +274,39 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * break; /* past the y limits */ } } + + if((mouse_y != INT_MAX) && (mouse_y >= y_prev && mouse_y <= y)) { + *mouse_pick= (void *)cl; + break; + } } } else { Report *report; int report_mask= 0; int bool= 0; - unsigned char bg[3] = {114, 114, 114}; - + unsigned char bg[3]; + if(draw) { glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); } /* convert our display toggles into a flag compatible with BKE_report flags */ - if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL; - if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL; - if(sc->rpt_mask & CONSOLE_RPT_OP) report_mask |= RPT_OPERATOR_ALL; - if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL; - if(sc->rpt_mask & CONSOLE_RPT_ERR) report_mask |= RPT_ERROR_ALL; + report_mask= console_report_mask(sc); for(report=reports->list.last; report; report=report->prev) { if(report->type & report_mask) { + y_prev= y; if(draw) - console_report_color(fg, report->type); + console_report_color(fg, bg, report, bool); if(!console_draw_string( report->message, report->len, console_width, sc->lheight, - fg, bool?bg:NULL, - ar->winx-CONSOLE_DRAW_MARGIN, + fg, bg, + ar->winx-(CONSOLE_DRAW_MARGIN+CONSOLE_DRAW_SCROLL), v2d->cur.ymin, v2d->cur.ymax, &x, &y, draw)) { @@ -283,6 +315,10 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * break; /* past the y limits */ } } + if((mouse_y != INT_MAX) && (mouse_y >= y_prev && mouse_y <= y)) { + *mouse_pick= (void *)report; + break; + } bool = !(bool); } @@ -296,10 +332,17 @@ static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion * void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) { - console_text_main__internal(sc, ar, reports, 1); + console_text_main__internal(sc, ar, reports, 1, INT_MAX, NULL); } int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) { - return console_text_main__internal(sc, ar, reports, 0); + return console_text_main__internal(sc, ar, reports, 0, INT_MAX, NULL); +} + +void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y) +{ + void *mouse_pick= NULL; + console_text_main__internal(sc, ar, reports, 0, mouse_y, &mouse_pick); + return (void *)mouse_pick; } diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index 0a911fb546a..3c6eeb63505 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -40,6 +40,7 @@ struct ReportList; /* console_draw.c */ void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */ +void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports, int mouse_y); /* needed for selection */ /* console_ops.c */ void console_history_free(SpaceConsole *sc, ConsoleLine *cl); @@ -49,6 +50,8 @@ ConsoleLine *console_scrollback_add_str(const bContext *C, char *str, int own); ConsoleLine *console_history_verify(const bContext *C); +int console_report_mask(SpaceConsole *sc); + void CONSOLE_OT_move(wmOperatorType *ot); void CONSOLE_OT_delete(wmOperatorType *ot); @@ -61,9 +64,16 @@ void CONSOLE_OT_clear(wmOperatorType *ot); void CONSOLE_OT_history_cycle(wmOperatorType *ot); void CONSOLE_OT_zoom(wmOperatorType *ot); -/* DUMMY OPS. python will replace */ -void CONSOLE_OT_exec(wmOperatorType *ot); -void CONSOLE_OT_autocomplete(wmOperatorType *ot); +/* console_report.c */ +void CONSOLE_OT_select_pick(wmOperatorType *ot); /* report selection */ +void CONSOLE_OT_select_all_toggle(wmOperatorType *ot); +void CONSOLE_OT_select_border(wmOperatorType *ot); + +void CONSOLE_OT_report_replay(wmOperatorType *ot); +void CONSOLE_OT_report_delete(wmOperatorType *ot); +void CONSOLE_OT_report_copy(wmOperatorType *ot); + + enum { LINE_BEGIN, LINE_END, PREV_CHAR, NEXT_CHAR, PREV_WORD, NEXT_WORD }; enum { DEL_ALL, DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_SELECTION, DEL_NEXT_SEL, DEL_PREV_SEL }; diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 359202ba022..ca6e3983eac 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -22,7 +22,7 @@ * * The Original Code is: all of this file. * - * Contributor(s): none yet. + * Contributor(s): Campbell Barton * * ***** END GPL LICENSE BLOCK ***** */ @@ -49,13 +49,12 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_report.h" -// #include "BKE_suggestions.h" -//#include "BKE_text.h" #include "WM_api.h" #include "WM_types.h" #include "ED_screen.h" +#include "ED_types.h" #include "UI_interface.h" #include "UI_resources.h" @@ -210,8 +209,8 @@ static int console_edit_poll(bContext *C) return 1; } -/* static funcs for text editing */ +/* static funcs for text editing */ /* similar to the text editor, with some not used. keep compatible */ static EnumPropertyItem move_type_items[]= { @@ -579,17 +578,3 @@ void CONSOLE_OT_zoom(wmOperatorType *ot) /* properties */ RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "Scale the view font.", 0, 1000); } - -/* Dummy operators, python will replace these, so blender can start without any errors */ -void CONSOLE_OT_exec(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "CONSOLE_OT_exec dummy"; - ot->idname= "CONSOLE_OT_exec"; -} -void CONSOLE_OT_autocomplete(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "CONSOLE_OT_autocomplete dummy"; - ot->idname= "CONSOLE_OT_autocomplete"; -} diff --git a/source/blender/editors/space_console/console_report.c b/source/blender/editors/space_console/console_report.c new file mode 100644 index 00000000000..9707af5f066 --- /dev/null +++ b/source/blender/editors/space_console/console_report.c @@ -0,0 +1,414 @@ +/** + * $Id: console_ops.c 21679 2009-07-18 16:27:25Z campbellbarton $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_space_types.h" +#include "DNA_windowmanager_types.h" + +#include "BLI_blenlib.h" +#include "BLI_dynstr.h" +#include "PIL_time.h" + +#include "BKE_utildefines.h" +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_global.h" +#include "BKE_library.h" +#include "BKE_main.h" +#include "BKE_report.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_types.h" +#include "UI_interface.h" +#include "UI_resources.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "console_intern.h" + +int console_report_mask(SpaceConsole *sc) +{ + int report_mask = 0; + + if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL; + if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL; + if(sc->rpt_mask & CONSOLE_RPT_OP) report_mask |= RPT_OPERATOR_ALL; + if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL; + if(sc->rpt_mask & CONSOLE_RPT_ERR) report_mask |= RPT_ERROR_ALL; + + return report_mask; +} + +static int console_report_poll(bContext *C) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + + if(!sc || sc->type != CONSOLE_TYPE_REPORT) + return 0; + + return 1; +} + +static int report_replay_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ReportList *reports= CTX_wm_reports(C); + int report_mask= console_report_mask(sc); + Report *report; + + sc->type= CONSOLE_TYPE_PYTHON; + + for(report=reports->list.last; report; report=report->prev) { + if((report->type & report_mask) && (report->type & RPT_OPERATOR_ALL) && (report->flag & SELECT)) { + console_history_add_str(C, report->message, 0); + WM_operator_name_call(C, "CONSOLE_OT_exec", WM_OP_EXEC_DEFAULT, NULL); + + ED_area_tag_redraw(CTX_wm_area(C)); + } + } + + sc->type= CONSOLE_TYPE_REPORT; + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_report_replay(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Replay Operators"; + ot->idname= "CONSOLE_OT_report_replay"; + + /* api callbacks */ + ot->poll= console_report_poll; + ot->exec= report_replay_exec; + + /* flags */ + /* ot->flag= OPTYPE_REGISTER; */ + + /* properties */ +} + +static int select_report_pick_exec(bContext *C, wmOperator *op) +{ + int report_index= RNA_int_get(op->ptr, "report_index"); + Report *report= BLI_findlink(&CTX_wm_reports(C)->list, report_index); + + if(!report) + return OPERATOR_CANCELLED; + + report->flag ^= SELECT; /* toggle */ + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +static int select_report_pick_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); + ReportList *reports= CTX_wm_reports(C); + Report *report; + + report= console_text_pick(sc, ar, reports, event->mval[1]); + + RNA_int_set(op->ptr, "report_index", BLI_findindex(&reports->list, report)); + + return select_report_pick_exec(C, op); +} + + +void CONSOLE_OT_select_pick(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select report"; + ot->idname= "CONSOLE_OT_select_pick"; + + /* api callbacks */ + ot->poll= console_report_poll; + ot->invoke= select_report_pick_invoke; + ot->exec= select_report_pick_exec; + + /* flags */ + /* ot->flag= OPTYPE_REGISTER; */ + + /* properties */ + RNA_def_int(ot->srna, "report_index", 0, 0, INT_MAX, "Report", "The index of the report.", 0, INT_MAX); +} + + + +static int report_select_all_toggle_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ReportList *reports= CTX_wm_reports(C); + int report_mask= console_report_mask(sc); + int deselect= 0; + + Report *report; + + for(report=reports->list.last; report; report=report->prev) { + if((report->type & report_mask) && (report->flag & SELECT)) { + deselect= 1; + break; + } + } + + + if(deselect) { + for(report=reports->list.last; report; report=report->prev) + if(report->type & report_mask) + report->flag &= ~SELECT; + } + else { + for(report=reports->list.last; report; report=report->prev) + if(report->type & report_mask) + report->flag |= SELECT; + } + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_select_all_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "(De)Select All"; + ot->idname= "CONSOLE_OT_select_all_toggle"; + + /* api callbacks */ + ot->poll= console_report_poll; + ot->exec= report_select_all_toggle_exec; + + /* flags */ + /*ot->flag= OPTYPE_REGISTER;*/ + + /* properties */ +} + +/* borderselect operator */ +static int borderselect_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); + ReportList *reports= CTX_wm_reports(C); + int report_mask= console_report_mask(sc); + Report *report_min, *report_max, *report; + + //View2D *v2d= UI_view2d_fromcontext(C); + + + rcti rect; + //rctf rectf, rq; + int val; + //short mval[2]; + + val= RNA_int_get(op->ptr, "event_type"); + 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"); + + /* + mval[0]= rect.xmin; + mval[1]= rect.ymin; + UI_view2d_region_to_view(v2d, mval[0], mval[1], &rectf.xmin, &rectf.ymin); + mval[0]= rect.xmax; + mval[1]= rect.ymax; + UI_view2d_region_to_view(v2d, mval[0], mval[1], &rectf.xmax, &rectf.ymax); +*/ + + report_min= console_text_pick(sc, ar, reports, rect.ymax); + report_max= console_text_pick(sc, ar, reports, rect.ymin); + + /* get the first report if none found */ + if(report_min==NULL) { + printf("find_min\n"); + for(report=reports->list.first; report; report=report->next) { + if(report->type & report_mask) { + report_min= report; + break; + } + } + } + + if(report_max==NULL) { + printf("find_max\n"); + for(report=reports->list.last; report; report=report->prev) { + if(report->type & report_mask) { + report_max= report; + break; + } + } + } + + if(report_min==NULL || report_max==NULL) + return OPERATOR_CANCELLED; + + for(report= report_min; (report != report_max->next); report= report->next) { + + if((report->type & report_mask)==0) + continue; + + if(val==LEFTMOUSE) report->flag |= SELECT; + else report->flag &= ~SELECT; + } + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + + +/* ****** Border Select ****** */ +void CONSOLE_OT_select_border(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Border Select"; + ot->idname= "CONSOLE_OT_select_border"; + + /* api callbacks */ + ot->invoke= WM_border_select_invoke; + ot->exec= borderselect_exec; + ot->modal= WM_border_select_modal; + + ot->poll= console_report_poll; + + /* flags */ + /* ot->flag= OPTYPE_REGISTER; */ + + /* rna */ + RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); +} + + + +static int report_delete_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ReportList *reports= CTX_wm_reports(C); + int report_mask= console_report_mask(sc); + + + Report *report, *report_next; + + for(report=reports->list.first; report; ) { + + report_next=report->next; + + if((report->type & report_mask) && (report->flag & SELECT)) { + BLI_remlink(&reports->list, report); + MEM_freeN(report->message); + MEM_freeN(report); + } + + report= report_next; + } + + ED_area_tag_redraw(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_report_delete(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Delete Reports"; + ot->idname= "CONSOLE_OT_report_delete"; + + /* api callbacks */ + ot->poll= console_report_poll; + ot->exec= report_delete_exec; + + /* flags */ + /*ot->flag= OPTYPE_REGISTER;*/ + + /* properties */ +} + + +static int report_copy_exec(bContext *C, wmOperator *op) +{ + SpaceConsole *sc= CTX_wm_space_console(C); + ReportList *reports= CTX_wm_reports(C); + int report_mask= console_report_mask(sc); + + Report *report; + + DynStr *buf_dyn= BLI_dynstr_new(); + char *buf_str; + + for(report=reports->list.first; report; report= report->next) { + if((report->type & report_mask) && (report->flag & SELECT)) { + BLI_dynstr_append(buf_dyn, report->message); + BLI_dynstr_append(buf_dyn, "\n"); + } + } + + buf_str= BLI_dynstr_get_cstring(buf_dyn); + BLI_dynstr_free(buf_dyn); + + WM_clipboard_text_set(buf_str, 0); + + MEM_freeN(buf_str); + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_report_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Reports to Clipboard"; + ot->idname= "CONSOLE_OT_report_copy"; + + /* api callbacks */ + ot->poll= console_report_poll; + ot->exec= report_copy_exec; + + /* flags */ + /*ot->flag= OPTYPE_REGISTER;*/ + + /* properties */ +} diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 5551a303ead..763be0392dc 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -203,6 +203,7 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) void console_operatortypes(void) { + /* console_ops.c */ WM_operatortype_append(CONSOLE_OT_move); WM_operatortype_append(CONSOLE_OT_delete); WM_operatortype_append(CONSOLE_OT_insert); @@ -211,14 +212,19 @@ void console_operatortypes(void) WM_operatortype_append(CONSOLE_OT_history_append); WM_operatortype_append(CONSOLE_OT_scrollback_append); - WM_operatortype_append(CONSOLE_OT_clear); WM_operatortype_append(CONSOLE_OT_history_cycle); WM_operatortype_append(CONSOLE_OT_zoom); - /* Dummy, defined in space_console.py */ - WM_operatortype_append(CONSOLE_OT_exec); - WM_operatortype_append(CONSOLE_OT_autocomplete); + + /* console_report.c */ + WM_operatortype_append(CONSOLE_OT_select_pick); + WM_operatortype_append(CONSOLE_OT_select_all_toggle); + WM_operatortype_append(CONSOLE_OT_select_border); + + WM_operatortype_append(CONSOLE_OT_report_replay); + WM_operatortype_append(CONSOLE_OT_report_delete); + WM_operatortype_append(CONSOLE_OT_report_copy); } void console_keymap(struct wmWindowManager *wm) @@ -275,6 +281,21 @@ void console_keymap(struct wmWindowManager *wm) WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", RETKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */ #endif + /* report selection */ + WM_keymap_add_item(keymap, "CONSOLE_OT_select_pick", SELECTMOUSE, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_select_border", BKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "CONSOLE_OT_report_replay", RKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0); + + + + + + RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", " "); /* fake tabs */ WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_PRESS, KM_ANY, 0); // last! } diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 387468f7160..a8abdf4132e 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -591,24 +591,12 @@ static void view3d_tools_area_draw(const bContext *C, ARegion *ar) ED_region_panels(C, ar, 1, view3d_context_string(C)); } -/* - * Returns true if the Object is a from an external blend file (libdata) - */ -static int object_is_libdata(Object *ob) -{ - if (!ob) return 0; - if (ob->proxy) return 0; - if (ob->id.lib) return 1; - return 0; -} - static int view3d_context(const bContext *C, const char *member, bContextDataResult *result) { View3D *v3d= CTX_wm_view3d(C); Scene *scene= CTX_data_scene(C); Base *base; - - if(v3d==NULL) return 0; + int lay = v3d ? v3d->lay:scene->lay; /* fallback to the scene layer, allows duplicate and other oject operators to run outside the 3d view */ if(CTX_data_dir(member)) { static const char *dir[] = { @@ -624,7 +612,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes int selected_objects= CTX_data_equals(member, "selected_objects"); for(base=scene->base.first; base; base=base->next) { - if((base->flag & SELECT) && (base->lay & v3d->lay)) { + if((base->flag & SELECT) && (base->lay & lay)) { if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) { if(selected_objects) CTX_data_id_list_add(result, &base->object->id); @@ -640,7 +628,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes int selected_editable_objects= CTX_data_equals(member, "selected_editable_objects"); for(base=scene->base.first; base; base=base->next) { - if((base->flag & SELECT) && (base->lay & v3d->lay)) { + if((base->flag & SELECT) && (base->lay & lay)) { if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) { if(0==object_is_libdata(base->object)) { if(selected_editable_objects) @@ -658,7 +646,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes int visible_objects= CTX_data_equals(member, "visible_objects"); for(base=scene->base.first; base; base=base->next) { - if(base->lay & v3d->lay) { + if(base->lay & lay) { if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) { if(visible_objects) CTX_data_id_list_add(result, &base->object->id); @@ -674,7 +662,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes int selectable_objects= CTX_data_equals(member, "selectable_objects"); for(base=scene->base.first; base; base=base->next) { - if(base->lay & v3d->lay) { + if(base->lay & lay) { if((base->object->restrictflag & OB_RESTRICT_VIEW)==0 && (base->object->restrictflag & OB_RESTRICT_SELECT)==0) { if(selectable_objects) CTX_data_id_list_add(result, &base->object->id); @@ -687,14 +675,14 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes return 1; } else if(CTX_data_equals(member, "active_base")) { - if(scene->basact && (scene->basact->lay & v3d->lay)) + if(scene->basact && (scene->basact->lay & lay)) if((scene->basact->object->restrictflag & OB_RESTRICT_VIEW)==0) CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, scene->basact); return 1; } else if(CTX_data_equals(member, "active_object")) { - if(scene->basact && (scene->basact->lay & v3d->lay)) + if(scene->basact && (scene->basact->lay & lay)) if((scene->basact->object->restrictflag & OB_RESTRICT_VIEW)==0) CTX_data_id_pointer_set(result, &scene->basact->object->id); diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index b21b127554f..572913f10d0 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -801,7 +801,7 @@ typedef struct Scene { /* depricate this! */ #define TESTBASE(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) ) #define TESTBASELIB(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0)) -#define TESTBASELIB_BGMODE(base) ( ((base)->flag & SELECT) && ((base)->lay & (v3d ? v3d->lay : scene->lay)) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0)) +#define TESTBASELIB_BGMODE(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & (v3d ? v3d->lay : scene->lay)) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0)) #define BASE_SELECTABLE(v3d, base) ((base->lay & v3d->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0) #define FIRSTBASE scene->base.first #define LASTBASE scene->base.last diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 126b6c47b63..9d36882058e 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -77,7 +77,8 @@ enum ReportListFlags { }; typedef struct Report { struct Report *next, *prev; - int type; /* ReportType */ + short type; /* ReportType */ + short flag; int len; /* strlen(message), saves some time calculating the word wrap */ char *typestr; char *message; diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index b55df31640f..d9d4852a72c 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -2647,6 +2647,8 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop) for(i=0; i Date: Sun, 19 Jul 2009 01:55:21 +0000 Subject: [PATCH 253/512] Sculpt/2.5: * Added pointer RNA for the sculpt brush * Converted sculpt settings panel (in the NKEY area) from C to Python * For Python UI, needed context for whether sculpt is enabled or not; discussed this with Brecht and added sculpt_object to scene context --- release/ui/space_view3d.py | 29 +++++++++++++- .../blender/editors/screen/screen_context.c | 9 ++++- .../editors/space_view3d/view3d_buttons.c | 39 ------------------- source/blender/makesrna/intern/rna_scene.c | 4 ++ 4 files changed, 39 insertions(+), 42 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index eaa854ac7a8..e194e6f939b 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -170,6 +170,32 @@ class VIEW3D_PT_background_image(bpy.types.Panel): col.itemR(bg, "x_offset", text="X") col.itemR(bg, "y_offset", text="Y") +class VIEW3D_PT_sculpt(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "UI" + __label__ = "Sculpt" + + def poll(self, context): + return context.sculpt_object + + def draw(self, context): + sculpt = context.scene.tool_settings.sculpt + + split = self.layout.split() + + col = split.column() + col.itemL(text="Symmetry") + row = col.row(align=True) + row.itemR(sculpt, "symmetry_x", text="X", toggle=True) + row.itemR(sculpt, "symmetry_y", text="Y", toggle=True) + row.itemR(sculpt, "symmetry_z", text="Z", toggle=True) + + col = split.column() + col.itemL(text="Lock Axis") + row = col.row(align=True) + row.itemR(sculpt, "lock_x", text="X", toggle=True) + row.itemR(sculpt, "lock_y", text="Y", toggle=True) + row.itemR(sculpt, "lock_z", text="Z", toggle=True) bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) @@ -177,5 +203,4 @@ bpy.types.register(VIEW3D_HT_header) bpy.types.register(VIEW3D_PT_3dview_properties) bpy.types.register(VIEW3D_PT_3dview_display) bpy.types.register(VIEW3D_PT_background_image) - - +bpy.types.register(VIEW3D_PT_sculpt) diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index e9a979aa134..5944ef5f507 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -33,6 +33,7 @@ #include "BKE_context.h" #include "BKE_utildefines.h" +#include "BKE_global.h" #include "RNA_access.h" @@ -47,7 +48,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult "scene", "selected_objects", "selected_bases", "selected_editable_objects", "selected_editable_bases" "active_base", - "active_object", "edit_object", NULL}; + "active_object", "edit_object", "sculpt_object", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -107,6 +108,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else if(CTX_data_equals(member, "sculpt_object")) { + if(G.f & G_SCULPTMODE && scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } return 0; } diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 3cf438bdd32..76f9699b3e7 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1176,41 +1176,6 @@ static void view3d_panel_brush(const bContext *C, Panel *pa) } } -static void sculptmode_draw_interface_tools(Scene *scene, uiBlock *block, unsigned short cx, unsigned short cy) -{ - Sculpt *s = scene->toolsettings->sculpt; - - //XXX if(sd->brush_type != SMOOTH_BRUSH && sd->brush_type != GRAB_BRUSH && sd->brush_type != FLATTEN_BRUSH) { - { - /*uiDefButBitS(block,ROW,B_NOP,"Add",cx,cy,89,19,&br->dir,15.0,1.0,0, 0,"Add depth to model [Shift]"); - uiDefButBitS(block,ROW,B_NOP,"Sub",cx+89,cy,89,19,&br->dir,15.0,2.0,0, 0,"Subtract depth from model [Shift]"); - */} - //XXX if(sd->brush_type!=GRAB_BRUSH) - - uiBlockBeginAlign(block); - uiDefBut( block,LABEL,B_NOP,"Symmetry",cx,cy,90,19,NULL,0,0,0,0,""); - cy-= 20; - uiBlockBeginAlign(block); - uiDefButBitI(block, TOG, SCULPT_SYMM_X, B_NOP, "X", cx,cy,40,19, &s->flags, 0,0,0,0, "Mirror brush across X axis"); - uiDefButBitI(block, TOG, SCULPT_SYMM_Y, B_NOP, "Y", cx+40,cy,40,19, &s->flags, 0,0,0,0, "Mirror brush across Y axis"); - uiDefButBitI(block, TOG, SCULPT_SYMM_Z, B_NOP, "Z", cx+80,cy,40,19, &s->flags, 0,0,0,0, "Mirror brush across Z axis"); - uiBlockEndAlign(block); - - - cy+= 20; - uiBlockBeginAlign(block); - uiDefBut( block,LABEL,B_NOP,"LockAxis",cx+140,cy,90,19,NULL,0,0,0,0,""); - cy-= 20; - uiBlockBeginAlign(block); - uiDefButBitI(block, TOG, SCULPT_LOCK_X, B_NOP, "X", cx+140,cy,40,19, &s->flags, 0,0,0,0, "Constrain X axis"); - uiDefButBitI(block, TOG, SCULPT_LOCK_Y, B_NOP, "Y", cx+180,cy,40,19, &s->flags, 0,0,0,0, "Constrain Y axis"); - uiDefButBitI(block, TOG, SCULPT_LOCK_Z, B_NOP, "Z", cx+220,cy,40,19, &s->flags, 0,0,0,0, "Constrain Z axis"); - uiBlockEndAlign(block); - - cx+= 210; -} - - static void view3d_panel_object(const bContext *C, Panel *pa) { uiBlock *block; @@ -1278,10 +1243,6 @@ static void view3d_panel_object(const bContext *C, Panel *pa) /* 'f' is for floating panel */ uiBlockPickerButtons(block, (*br)->rgb, hsv, old, hexcol, 'f', B_REDR); } - else if(G.f & G_SCULPTMODE) { - BLI_strncpy(pa->drawname, "Sculpt Properties", sizeof(pa->drawname)); - sculptmode_draw_interface_tools(scene, block, 10, 150); - } else if(G.f & G_PARTICLEEDIT){ BLI_strncpy(pa->drawname, "Particle Edit Properties", sizeof(pa->drawname)); // XXX particle_edit_buttons(block); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index f300ab1b26f..8d0fc4f6a8b 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -213,6 +213,10 @@ void rna_def_sculpt(BlenderRNA *brna) srna= RNA_def_struct(brna, "Sculpt", NULL); RNA_def_struct_nested(brna, srna, "Scene"); RNA_def_struct_ui_text(srna, "Sculpt", ""); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Brush"); + RNA_def_property_ui_text(prop, "Brush", ""); prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X); From 880c3756e96c4ffcd9238abd3ae9f49415d270a9 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sun, 19 Jul 2009 02:26:01 +0000 Subject: [PATCH 254/512] Store sketch in armature instead of ugly global. Like edit data, this isn't saved, just a temp pointer used during work session. Also bring back sketching panel for 3d view. --- source/blender/blenkernel/intern/armature.c | 6 + source/blender/blenloader/intern/readfile.c | 1 + .../editors/armature/editarmature_sketch.c | 193 +++++++++++------- source/blender/editors/include/ED_armature.h | 5 +- .../editors/space_view3d/view3d_buttons.c | 7 +- source/blender/makesdna/DNA_armature_types.h | 2 + .../windowmanager/intern/wm_init_exit.c | 1 - 7 files changed, 136 insertions(+), 79 deletions(-) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 1b930a74449..62194caa658 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -140,6 +140,12 @@ void free_armature(bArmature *arm) MEM_freeN(arm->edbo); arm->edbo= NULL; } + + /* free sketch */ + if (arm->sketch) { + ED_freeSketch(arm->sketch); + arm->sketch = NULL; + } } } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index fbe7a07c7be..8a5f915c849 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2342,6 +2342,7 @@ static void direct_link_armature(FileData *fd, bArmature *arm) link_list(fd, &arm->bonebase); arm->edbo= NULL; + arm->sketch = NULL; bone=arm->bonebase.first; while (bone) { diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index af1ed3e2746..974eeb91a68 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -186,7 +186,6 @@ typedef struct SK_GestureAction { GestureApplyFct apply; } SK_GestureAction; -SK_Sketch *GLOBAL_sketch = NULL; SK_Point boneSnap; int LAST_SNAP_POINT_VALID = 0; float LAST_SNAP_POINT[3]; @@ -217,6 +216,8 @@ void sk_applyReverseGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch); int sk_detectConvertGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch); void sk_applyConvertGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch); +SK_Sketch* contextSketch(const bContext *c, int create); +SK_Sketch* viewcontextSketch(ViewContext *vc, int create); void sk_resetOverdraw(SK_Sketch *sketch); int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk); @@ -381,7 +382,7 @@ int BIF_nbJointsTemplate(const bContext *C) char * BIF_nameBoneTemplate(const bContext *C) { ToolSettings *ts = CTX_data_tool_settings(C); - SK_Sketch *stk = GLOBAL_sketch; + SK_Sketch *stk = contextSketch(C, 1); RigGraph *rg; int index = 0; @@ -1592,6 +1593,7 @@ int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Strok float p[3]; float size = 0; + BLI_freelistN(&sketch->depth_peels); sketch->depth_peels.first = sketch->depth_peels.last = NULL; peelObjectsContext(C, &sketch->depth_peels, dd->mval); @@ -3023,9 +3025,10 @@ int BDR_drawSketchNames(ViewContext *vc) { if (ValidSketchViewContext(vc)) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = viewcontextSketch(vc, 0); + if (sketch) { - sk_drawSketch(vc->scene, vc->v3d, GLOBAL_sketch, 1); + sk_drawSketch(vc->scene, vc->v3d, sketch, 1); return 1; } } @@ -3037,18 +3040,20 @@ void BDR_drawSketch(const bContext *C) { if (ED_operator_sketch_mode(C)) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { - sk_drawSketch(CTX_data_scene(C), CTX_wm_view3d(C), GLOBAL_sketch, 0); + sk_drawSketch(CTX_data_scene(C), CTX_wm_view3d(C), sketch, 0); } } } static int sketch_delete(bContext *C, wmOperator *op, wmEvent *event) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { - sk_deleteSelectedStrokes(GLOBAL_sketch); + sk_deleteSelectedStrokes(sketch); // allqueue(REDRAWVIEW3D, 0); } return OPERATOR_FINISHED; @@ -3056,9 +3061,10 @@ static int sketch_delete(bContext *C, wmOperator *op, wmEvent *event) void BIF_sk_selectStroke(bContext *C, short mval[2], short extend) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { - sk_selectStroke(C, GLOBAL_sketch, mval, extend); + sk_selectStroke(C, sketch, mval, extend); } } @@ -3066,9 +3072,10 @@ void BIF_convertSketch(bContext *C) { if (ED_operator_sketch_full_mode(C)) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { - sk_convert(C, GLOBAL_sketch); + sk_convert(C, sketch); // BIF_undo_push("Convert Sketch"); // allqueue(REDRAWVIEW3D, 0); // allqueue(REDRAWBUTSEDIT, 0); @@ -3080,42 +3087,86 @@ void BIF_deleteSketch(bContext *C) { if (ED_operator_sketch_full_mode(C)) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { - sk_deleteSelectedStrokes(GLOBAL_sketch); + sk_deleteSelectedStrokes(sketch); // BIF_undo_push("Convert Sketch"); // allqueue(REDRAWVIEW3D, 0); } } } -//void BIF_selectAllSketch(bContext *C, int mode) -//{ -// if (BIF_validSketchMode(C)) -// { -// if (GLOBAL_sketch != NULL) -// { -// sk_selectAllSketch(GLOBAL_sketch, mode); -//// XXX -//// allqueue(REDRAWVIEW3D, 0); -// } -// } -//} - -void BIF_freeSketch(bContext *C) +#if 0 +void BIF_selectAllSketch(bContext *C, int mode) { - if (GLOBAL_sketch != NULL) + if (BIF_validSketchMode(C)) { - sk_freeSketch(GLOBAL_sketch); - GLOBAL_sketch = NULL; + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) + { + sk_selectAllSketch(sketch, mode); +// XXX +// allqueue(REDRAWVIEW3D, 0); + } } } +#endif + +void ED_freeSketch(SK_Sketch *sketch) +{ + sk_freeSketch(sketch); +} + +SK_Sketch* ED_createSketch() +{ + return sk_createSketch(); +} + +SK_Sketch* contextSketch(const bContext *C, int create) +{ + Object *obedit = CTX_data_edit_object(C); + SK_Sketch *sketch = NULL; + + if (obedit && obedit->type == OB_ARMATURE) + { + bArmature *arm = obedit->data; + + if (arm->sketch == NULL && create) + { + arm->sketch = sk_createSketch(); + } + sketch = arm->sketch; + } + + return sketch; +} + +SK_Sketch* viewcontextSketch(ViewContext *vc, int create) +{ + Object *obedit = vc->obedit; + SK_Sketch *sketch = NULL; + + if (obedit && obedit->type == OB_ARMATURE) + { + bArmature *arm = obedit->data; + + if (arm->sketch == NULL && create) + { + arm->sketch = sk_createSketch(); + } + sketch = arm->sketch; + } + + return sketch; +} static int sketch_cancel(bContext *C, wmOperator *op, wmEvent *event) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch != NULL) { - sk_cancelStroke(GLOBAL_sketch); + sk_cancelStroke(sketch); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -3124,9 +3175,10 @@ static int sketch_cancel(bContext *C, wmOperator *op, wmEvent *event) static int sketch_finish(bContext *C, wmOperator *op, wmEvent *event) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch != NULL) { - if (sk_finish_stroke(C, GLOBAL_sketch)) + if (sk_finish_stroke(C, sketch)) { ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -3137,10 +3189,11 @@ static int sketch_finish(bContext *C, wmOperator *op, wmEvent *event) static int sketch_select(bContext *C, wmOperator *op, wmEvent *event) { - if (GLOBAL_sketch != NULL) + SK_Sketch *sketch = contextSketch(C, 0); + if (sketch) { short extend = 0; - sk_selectStroke(C, GLOBAL_sketch, event->mval, extend); + sk_selectStroke(C, sketch, event->mval, extend); ED_area_tag_redraw(CTX_wm_area(C)); } @@ -3149,7 +3202,8 @@ static int sketch_select(bContext *C, wmOperator *op, wmEvent *event) static int sketch_draw_stroke_cancel(bContext *C, wmOperator *op) { - sk_cancelStroke(GLOBAL_sketch); + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ + sk_cancelStroke(sketch); MEM_freeN(op->customdata); return OPERATOR_CANCELLED; } @@ -3158,18 +3212,14 @@ static int sketch_draw_stroke(bContext *C, wmOperator *op, wmEvent *event) { short snap = RNA_boolean_get(op->ptr, "snap"); SK_DrawData *dd; - - if (GLOBAL_sketch == NULL) - { - GLOBAL_sketch = sk_createSketch(); - } + SK_Sketch *sketch = contextSketch(C, 1); op->customdata = dd = MEM_callocN(sizeof("SK_DrawData"), "SketchDrawData"); sk_initDrawData(dd, event->mval); - sk_start_draw_stroke(GLOBAL_sketch); + sk_start_draw_stroke(sketch); - sk_draw_stroke(C, GLOBAL_sketch, GLOBAL_sketch->active_stroke, dd, snap); + sk_draw_stroke(C, sketch, sketch->active_stroke, dd, snap); WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op); @@ -3178,7 +3228,8 @@ static int sketch_draw_stroke(bContext *C, wmOperator *op, wmEvent *event) static int sketch_draw_gesture_cancel(bContext *C, wmOperator *op) { - sk_cancelStroke(GLOBAL_sketch); + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ + sk_cancelStroke(sketch); MEM_freeN(op->customdata); return OPERATOR_CANCELLED; } @@ -3187,17 +3238,14 @@ static int sketch_draw_gesture(bContext *C, wmOperator *op, wmEvent *event) { short snap = RNA_boolean_get(op->ptr, "snap"); SK_DrawData *dd; - - if (GLOBAL_sketch == NULL) - { - GLOBAL_sketch = sk_createSketch(); - } + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ + sk_cancelStroke(sketch); op->customdata = dd = MEM_callocN(sizeof("SK_DrawData"), "SketchDrawData"); sk_initDrawData(dd, event->mval); - sk_start_draw_gesture(GLOBAL_sketch); - sk_draw_stroke(C, GLOBAL_sketch, GLOBAL_sketch->gesture, dd, snap); + sk_start_draw_gesture(sketch); + sk_draw_stroke(C, sketch, sketch->gesture, dd, snap); WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op); @@ -3208,6 +3256,7 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short { short snap = RNA_boolean_get(op->ptr, "snap"); SK_DrawData *dd = op->customdata; + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ int retval = OPERATOR_RUNNING_MODAL; switch (event->type) @@ -3220,7 +3269,7 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short case MOUSEMOVE: dd->mval[0] = event->mval[0]; dd->mval[1] = event->mval[1]; - sk_draw_stroke(C, GLOBAL_sketch, stk, dd, snap); + sk_draw_stroke(C, sketch, stk, dd, snap); ED_area_tag_redraw(CTX_wm_area(C)); break; case ESCKEY: @@ -3235,7 +3284,7 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short { sk_endContinuousStroke(stk); sk_filterLastContinuousStroke(stk); - sk_updateNextPoint(GLOBAL_sketch, stk); + sk_updateNextPoint(sketch, stk); ED_area_tag_redraw(CTX_wm_area(C)); MEM_freeN(op->customdata); retval = OPERATOR_FINISHED; @@ -3248,11 +3297,11 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short if (stk->nb_points > 1) { /* apply gesture here */ - sk_applyGesture(C, GLOBAL_sketch); + sk_applyGesture(C, sketch); } sk_freeStroke(stk); - GLOBAL_sketch->gesture = NULL; + sketch->gesture = NULL; ED_area_tag_redraw(CTX_wm_area(C)); MEM_freeN(op->customdata); @@ -3267,21 +3316,23 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short static int sketch_draw_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) { - return sketch_draw_modal(C, op, event, 0, GLOBAL_sketch->active_stroke); + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ + return sketch_draw_modal(C, op, event, 0, sketch->active_stroke); } static int sketch_draw_gesture_modal(bContext *C, wmOperator *op, wmEvent *event) { - return sketch_draw_modal(C, op, event, 1, GLOBAL_sketch->gesture); + SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ + return sketch_draw_modal(C, op, event, 1, sketch->gesture); } static int sketch_draw_preview(bContext *C, wmOperator *op, wmEvent *event) { short snap = RNA_boolean_get(op->ptr, "snap"); + SK_Sketch *sketch = contextSketch(C, 0); - if (GLOBAL_sketch != NULL) + if (sketch) { - SK_Sketch *sketch = GLOBAL_sketch; SK_DrawData dd; sk_initDrawData(&dd, event->mval); @@ -3296,14 +3347,12 @@ static int sketch_draw_preview(bContext *C, wmOperator *op, wmEvent *event) int ED_operator_sketch_mode_active_stroke(bContext *C) { - Object *obedit = CTX_data_edit_object(C); ToolSettings *ts = CTX_data_tool_settings(C); + SK_Sketch *sketch = contextSketch(C, 0); - if (obedit && - obedit->type == OB_ARMATURE && - ts->bone_sketching & BONE_SKETCHING && - GLOBAL_sketch != NULL && - GLOBAL_sketch->active_stroke != NULL) + if (ts->bone_sketching & BONE_SKETCHING && + sketch != NULL && + sketch->active_stroke != NULL) { return 1; } @@ -3315,15 +3364,13 @@ int ED_operator_sketch_mode_active_stroke(bContext *C) int ED_operator_sketch_mode_gesture(bContext *C) { - Object *obedit = CTX_data_edit_object(C); ToolSettings *ts = CTX_data_tool_settings(C); + SK_Sketch *sketch = contextSketch(C, 0); - if (obedit && - obedit->type == OB_ARMATURE && - ts->bone_sketching & BONE_SKETCHING && + if (ts->bone_sketching & BONE_SKETCHING && (ts->bone_sketching & BONE_SKETCHING_QUICK) == 0 && - GLOBAL_sketch != NULL && - GLOBAL_sketch->active_stroke == NULL) + sketch != NULL && + sketch->active_stroke == NULL) { return 1; } diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index d699b0d46b2..8c19f2c3ecf 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -40,6 +40,7 @@ struct ListBase; struct View3D; struct ViewContext; struct RegionView3D; +struct SK_Sketch; typedef struct EditBone { @@ -132,7 +133,9 @@ int ED_operator_sketch_mode_active_stroke(struct bContext *C); int ED_operator_sketch_full_mode(struct bContext *C); int ED_operator_sketch_mode(const struct bContext *C); -void BIF_freeSketch(struct bContext *C); +void ED_freeSketch(struct SK_Sketch *sketch); +struct SK_Sketch* ED_createSketch(); + void BIF_convertSketch(struct bContext *C); void BIF_deleteSketch(struct bContext *C); void BIF_selectAllSketch(struct bContext *C, int mode); /* -1: deselect, 0: select, 1: toggle */ diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 76f9699b3e7..077f34f3c4d 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1512,7 +1512,6 @@ static void view3d_panel_gpencil(const bContext *C, Panel *pa) } #endif -#if 0 // XXX not used static void delete_sketch_armature(bContext *C, void *arg1, void *arg2) { BIF_deleteSketch(C); @@ -1643,10 +1642,9 @@ static void view3d_panel_bonesketch_spaces(const bContext *C, Panel *pa) } uiBlockEndAlign(block); - - uiDefButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_NOP, "Peel Objects", 10, yco, 200, 20, &scene->toolsettings->snap_flag, 0, 0, 0, 0, "Peel whole objects as one"); } +#if 0 // XXX not used /* op->invoke */ static void redo_cb(bContext *C, void *arg_op, void *arg2) @@ -1736,7 +1734,7 @@ void view3d_buttons_register(ARegionType *art) strcpy(pt->label, "Greas Pencil"); pt->draw= view3d_panel_gpencil; BLI_addtail(&art->paneltypes, pt);*/ -/* + pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel bonesketch spaces"); strcpy(pt->idname, "VIEW3D_PT_bonesketch_spaces"); strcpy(pt->label, "Bone Sketching"); @@ -1744,6 +1742,7 @@ void view3d_buttons_register(ARegionType *art) pt->poll= view3d_panel_bonesketch_spaces_poll; BLI_addtail(&art->paneltypes, pt); + /* pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel redo"); strcpy(pt->idname, "VIEW3D_PT_redo"); strcpy(pt->label, "Last Operator"); diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h index 69b5e9b0f92..bb60fb107ff 100644 --- a/source/blender/makesdna/DNA_armature_types.h +++ b/source/blender/makesdna/DNA_armature_types.h @@ -73,6 +73,8 @@ typedef struct bArmature { ListBase chainbase; ListBase *edbo; /* editbone listbase, we use pointer so we can check state */ + void *sketch; /* sketch struct for etch-a-ton */ + int flag; int drawtype; short deformflag; diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 4c9c3059e5b..94218c10c9a 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -208,7 +208,6 @@ void WM_exit(bContext *C) // BIF_GlobalReebFree(); // BIF_freeRetarget(); BIF_freeTemplates(C); - BIF_freeSketch(C); free_ttfont(); /* bke_font.h */ From aad1f809dd1a494cd5e36f585e5029195c712942 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Sun, 19 Jul 2009 02:28:59 +0000 Subject: [PATCH 255/512] SVN maintenance. --- source/blender/editors/space_console/console_report.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_console/console_report.c b/source/blender/editors/space_console/console_report.c index 9707af5f066..2e23c4039f1 100644 --- a/source/blender/editors/space_console/console_report.c +++ b/source/blender/editors/space_console/console_report.c @@ -1,5 +1,5 @@ /** - * $Id: console_ops.c 21679 2009-07-18 16:27:25Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From 7411a86a41c654ff0ea6769a8130707a6baadac4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 04:50:10 +0000 Subject: [PATCH 256/512] - was freeing reports on freed listbases - free reports in a single loop. - extrude was using a NULL scene, crashed when used as a macro --- source/blender/blenkernel/intern/report.c | 14 ++++++++++---- source/blender/editors/mesh/editmesh_tools.c | 7 +++---- source/blender/windowmanager/intern/wm_init_exit.c | 3 +-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index 3e3dd4b0af0..391adfb762a 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -73,15 +73,21 @@ void BKE_reports_init(ReportList *reports, int flag) void BKE_reports_clear(ReportList *reports) { - Report *report; + Report *report, *report_next; if(!reports) return; - for(report=reports->list.first; report; report=report->next) - MEM_freeN(report->message); + report= reports->list.first; - BLI_freelistN(&reports->list); + while (report) { + report_next= report->next; + MEM_freeN(report->message); + MEM_freeN(report); + report= report_next; + } + + reports->list.first= reports->list.last= NULL; } void BKE_report(ReportList *reports, ReportType type, const char *message) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e16adf8ab2e..3c186659adc 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -622,9 +622,8 @@ void hashvert_flag(EditMesh *em, int flag) } /* generic extern called extruder */ -void extrude_mesh(Object *obedit, EditMesh *em, wmOperator *op) +void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op) { - Scene *scene= NULL; // XXX CTX! float nor[3]= {0.0, 0.0, 0.0}; short nr, transmode= 0; @@ -704,7 +703,7 @@ static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data); int constraint_axis[3] = {0, 0, 1}; - extrude_mesh(obedit,em, op); + extrude_mesh(scene, obedit, em, op); BKE_mesh_end_editmesh(obedit->data, em); @@ -731,7 +730,7 @@ static int mesh_extrude_exec(bContext *C, wmOperator *op) Object *obedit= CTX_data_edit_object(C); EditMesh *em= BKE_mesh_get_editmesh(obedit->data); - extrude_mesh(obedit,em, op); + extrude_mesh(scene, obedit, em, op); DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 94218c10c9a..5c34b19c1f4 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -227,6 +227,7 @@ void WM_exit(bContext *C) fastshade_free_render(); /* shaded view */ ED_preview_free_dbase(); /* frees a Main dbase, before free_blender! */ + wm_free_reports(C); /* before free_blender! - since the ListBases get freed there */ free_blender(); /* blender.c, does entire library and spacetypes */ // free_matcopybuf(); free_anim_copybuf(); @@ -270,8 +271,6 @@ void WM_exit(bContext *C) RNA_exit(); - wm_free_reports(C); - CTX_free(C); if(MEM_get_memory_blocks_in_use()!=0) { From 388af9d827ccae97f24c6d65f7ab2da22ee8ea79 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 19 Jul 2009 05:20:30 +0000 Subject: [PATCH 257/512] 2.5 - Warning Fixes + Hotkey for Reversed Playback Reversed playback can now be activated using the Alt-Shift-A hotkey. It works the same way that the Alt-A playback operator works. --- source/blender/editors/armature/poselib.c | 2 +- source/blender/editors/object/editconstraint.c | 2 +- source/blender/editors/screen/screen_ops.c | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index d0a99e4ad13..ef2e5188487 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -270,7 +270,7 @@ void poselib_validate_act (bAction *act) } /* free temp memory */ - BLI_freelistN(&keys); + BLI_freelistN((ListBase *)&keys); BIF_undo_push("PoseLib Validate Action"); } diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 62bc5d13257..f5feccb8e4c 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -1091,7 +1091,7 @@ static int pose_constraint_add_exec(bContext *C, wmOperator *op) Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; if(!ob) - return OPERATOR_CANCELLED;; + return OPERATOR_CANCELLED; return constraint_add_exec(C, op, get_active_constraints(ob)); } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 812c9f11069..05f5d847159 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2880,7 +2880,10 @@ void ED_operatortypes_screen(void) /* called in spacetypes.c */ void ED_keymap_screen(wmWindowManager *wm) { - ListBase *keymap= WM_keymap_listbase(wm, "Screen", 0, 0); + ListBase *keymap; + + /* Screen General ------------------------------------------------ */ + keymap= WM_keymap_listbase(wm, "Screen", 0, 0); /* standard timers */ WM_keymap_add_item(keymap, "SCREEN_OT_animation_step", TIMER0, KM_ANY, KM_ANY, 0); @@ -2933,13 +2936,17 @@ void ED_keymap_screen(wmWindowManager *wm) WM_keymap_add_item(keymap, "SCREEN_OT_render_view_cancel", ESCKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_show", F11KEY, KM_PRESS, 0, 0); - /* frame offsets & play */ + /* Anim Playback ------------------------------------------------ */ keymap= WM_keymap_listbase(wm, "Frames", 0, 0); + + /* frame offsets */ RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 10); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -10); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -1); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 1); - WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0); + /* play (forward and backwards) */ + WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1); } From 8ced84eec9ae9fd311789935901f52d5073eb0fb Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 19 Jul 2009 07:20:21 +0000 Subject: [PATCH 258/512] 2.5 - Clear Constraints Operators Added some operators to clear all constraints on the active object or the selected bones. --- source/blender/editors/armature/poseobject.c | 32 ------- .../blender/editors/object/editconstraint.c | 90 ++++++++++++++----- source/blender/editors/object/object_intern.h | 4 + source/blender/editors/object/object_ops.c | 2 + .../editors/space_view3d/view3d_header.c | 8 +- 5 files changed, 74 insertions(+), 62 deletions(-) diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index f7d926ea18d..ccf82fbc7ac 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -640,38 +640,6 @@ void pose_clear_IK(Scene *scene) BIF_undo_push("Remove IK constraint(s)"); } -void pose_clear_constraints(Scene *scene) -{ - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - bArmature *arm= ob->data; - bPoseChannel *pchan; - - /* paranoia checks */ - if(!ob && !ob->pose) return; - if(ob==obedit || (ob->flag & OB_POSEMODE)==0) return; - - if(pose_has_protected_selected(ob, 0, 1)) - return; - - if(okee("Remove Constraints")==0) return; - - /* find active */ - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if(arm->layer & pchan->bone->layer) { - if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { - free_constraints(&pchan->constraints); - pchan->constflag= 0; - } - } - } - - DAG_object_flush_update(scene, ob, OB_RECALC_DATA); // and all its relations - - BIF_undo_push("Remove Constraint(s)"); - -} - void pose_copy_menu(Scene *scene) { diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index f5feccb8e4c..a2f709b9dff 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -519,28 +519,6 @@ void add_constraint (Scene *scene, View3D *v3d, short only_IK) } -/* Remove all constraints from the active object */ -void ob_clear_constraints (Scene *scene) -{ - Object *ob= OBACT; - - /* paranoia checks */ - if ((ob==NULL) || (ob==scene->obedit) || (ob->flag & OB_POSEMODE)) - return; - - /* get user permission */ - if (okee("Clear Constraints")==0) - return; - - /* do freeing */ - free_constraints(&ob->constraints); - - /* do updates */ - DAG_object_flush_update(scene, ob, OB_RECALC_OB); - - BIF_undo_push("Clear Constraint(s)"); -} - /* ------------- Constraint Sanity Testing ------------------- */ /* checks validity of object pointers, and NULLs, @@ -1006,7 +984,71 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot) /***************************** OPERATORS ****************************/ -/************************ add constraint operator *********************/ +/************************ remove constraint operators *********************/ + +static int pose_constraints_clear_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + + /* free constraints for all selected bones */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + free_constraints(&pchan->constraints); + } + CTX_DATA_END; + + /* do updates */ + DAG_object_flush_update(scene, ob, OB_RECALC_OB); + WM_event_add_notifier(C, NC_OBJECT|ND_POSE|ND_CONSTRAINT|NA_REMOVED, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_constraints_clear(wmOperatorType *ot) +{ + /* identifiers */ + //ot->name = "Clear Constraints"; + ot->idname= "POSE_OT_constraints_clear"; + ot->description= "Clear all the constraints for the selected bones."; + + /* callbacks */ + //ot->invoke= WM_menu_confirm; // XXX do we want confirmations on these things anymore? + ot->exec= pose_constraints_clear_exec; + ot->poll= ED_operator_posemode; // XXX - do we want to ensure there are selected bones too? +} + + +static int object_constraints_clear_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + + /* do freeing */ + // TODO: we should free constraints for all selected objects instead (to be more consistent with bones) + free_constraints(&ob->constraints); + + /* do updates */ + DAG_object_flush_update(scene, ob, OB_RECALC_OB); + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_constraints_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Clear Constraints"; + ot->idname= "OBJECT_OT_constraints_clear"; + ot->description= "Clear all the constraints for the active Object only."; + + /* callbacks */ + //ot->invoke= WM_menu_confirm; // XXX do we want confirmations on these things anymore? + ot->exec= object_constraints_clear_exec; + ot->poll= ED_operator_object_active; +} + +/************************ add constraint operators *********************/ static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) { @@ -1071,7 +1113,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) else DAG_object_flush_update(scene, ob, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, ob); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 5610a75d4d3..99967858d8b 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -103,6 +103,10 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); void POSE_OT_constraint_add(struct wmOperatorType *ot); + +void OBJECT_OT_constraints_clear(struct wmOperatorType *ot); +void POSE_OT_constraints_clear(struct wmOperatorType *ot); + void CONSTRAINT_OT_delete(struct wmOperatorType *ot); void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index b73030226ef..992cdabaa77 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -113,6 +113,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_constraint_add); WM_operatortype_append(POSE_OT_constraint_add); + WM_operatortype_append(OBJECT_OT_constraints_clear); + WM_operatortype_append(POSE_OT_constraints_clear); WM_operatortype_append(CONSTRAINT_OT_delete); WM_operatortype_append(CONSTRAINT_OT_move_up); WM_operatortype_append(CONSTRAINT_OT_move_down); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 78b21ded2f5..ed127fd032a 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1978,12 +1978,8 @@ static void view3d_edit_object_trackmenu(bContext *C, uiLayout *layout, void *ar static void view3d_edit_object_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused) { -#if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - add_constraint(0); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - ob_clear_constraints(); -#endif + uiItemO(layout, NULL, 0, "OBJECT_OT_constraint_add"); // XXX it'd be better to have the version which sets links... + uiItemO(layout, NULL, 0, "OBJECT_OT_constraints_clear"); } static void view3d_edit_object_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) From 1917e951ca4cb593399158f5b9222708dbb66f24 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 09:33:27 +0000 Subject: [PATCH 259/512] py rna arrays were assumed sizeof(char)*len, should be sizeof(int)*len, was causing end of array corruption errors when running operators that took bool array options - transform. --- source/blender/python/intern/bpy_rna.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index e62dda03e09..d3f69e4db73 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -499,7 +499,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v { int *param_arr; if(data) param_arr= (int*)data; - else param_arr= MEM_mallocN(sizeof(char) * len, "pyrna bool array"); + else param_arr= MEM_mallocN(sizeof(int) * len, "pyrna bool array"); /* collect the variables before assigning, incase one of them is incorrect */ From 08ef73ab3ea9b9758c47eb0658eb0490f19b5ffd Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 19 Jul 2009 11:13:15 +0000 Subject: [PATCH 260/512] 2.5 Requested UI feature: when scaling Blender window, the buttons view keeps scale (in visible pixels) as previously. Also works for the .B25.blend, which currently will show the buttons a bit too large for small screens... this because the .B25.blend was created on a 1920x1200 screen. Might need a config inbetween... 1440x1080 or so? Or we make a couple of defaults later. Additional feature could be to also scale the buttons area itself, but that will change the entire screen layout too much, potentially giving bad issues with extremer scaling. --- source/blender/editors/screen/screen_edit.c | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 6da00f12a25..e7a61514010 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -603,6 +603,21 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge) } } +/* helper call for below, correct buttons view */ +static void screen_test_scale_region(ListBase *regionbase, float facx, float facy) +{ + ARegion *ar; + + for(ar= regionbase->first; ar; ar= ar->next) { + if(ar->regiontype==RGN_TYPE_WINDOW) { + ar->v2d.cur.xmin *= facx; + ar->v2d.cur.xmax *= facx; + ar->v2d.cur.ymin *= facy; + ar->v2d.cur.ymax *= facy; + } + } +} + /* test if screen vertices should be scaled */ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) { @@ -653,6 +668,19 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) CLAMP(sv->vec.y, 0, winsizey); } + + /* keep buttons view2d same size */ + for(sa= sc->areabase.first; sa; sa= sa->next) { + SpaceLink *sl; + + if(sa->spacetype==SPACE_BUTS) + screen_test_scale_region(&sa->regionbase, facx, facy); + + for(sl= sa->spacedata.first; sl; sl= sl->next) + if(sl->spacetype==SPACE_BUTS) + screen_test_scale_region(&sl->regionbase, facx, facy); + } + } /* test for collapsed areas. This could happen in some blender version... */ From 26ec00d567520d9c2a5f99e4884ebc0cd63a6656 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sun, 19 Jul 2009 11:28:43 +0000 Subject: [PATCH 261/512] First version of fields panel. Please keep in mind: I am no python expert and may have some ugly layout-tricks in this file. GUI designed by nudelZ. Commit approved by William ;-) --- release/ui/buttons_physics_field.py | 167 +++++++++++++++++++++++++--- 1 file changed, 150 insertions(+), 17 deletions(-) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 696de5e6d56..88636108475 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -11,21 +11,141 @@ class PhysicButtonsPanel(bpy.types.Panel): class PHYSICS_PT_field(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_field" - __label__ = "Field" + __label__ = "Force Fields" + __default_closed__ = True def draw(self, context): layout = self.layout ob = context.object field = ob.field - layout.itemR(field, "type") + #layout.active = field.enabled + + split = layout.split() + col = split.column(align=True) + col.itemL(text="Type:") + col.itemR(field, "type", text="") + colsub = split.column(align=True) + + if field.type == "GUIDE": + colsub = col.column() + colsub.itemL(text="blabla") + colsub.itemR(field, "guide_path_add") + + if field.type == "WIND": + col.itemR(field, "strength") + col.itemR(field, "noise") + col.itemR(field, "seed") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + + if field.type == "VORTEX": + col.itemR(field, "strength") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") - if field.type != "NONE": - layout.itemR(field, "strength") + if field.type in ("SPHERICAL", "CHARGE", "LENNARDJ"): + col.itemR(field, "strength") + colsub.itemL(text="") + colsub.itemR(field, "surface") + colsub.itemR(field, "planar") + colsub.itemL(text="") + colsub.itemL(text="") + + if field.type == "MAGNET": + col.itemR(field, "strength") + colsub.itemL(text="") + colsub.itemR(field, "planar") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + + if field.type == "HARMONIC": + col.itemR(field, "strength") + col.itemR(field, "harmonic_damping", text="Damping") + colsub.itemL(text="") + colsub.itemR(field, "surface") + colsub.itemR(field, "planar") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + + if field.type == "TEXTURE": + col.itemR(field, "strength") + col.itemR(field, "texture", text="") + col.itemL(text="Texture Mode:") + col.itemR(field, "texture_mode", text="") + col.itemR(field, "texture_nabla") + colsub.itemL(text="") + colsub.itemR(field, "use_coordinates") + colsub.itemR(field, "root_coordinates") + colsub.itemR(field, "force_2d") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + colsub.itemL(text="") + + if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET"): + col.itemL(text="Fall-Off:") + col.itemR(field, "falloff_type", text="") + col.itemR(field, "positive_z", text="Positive Z") + col.itemR(field, "use_min_distance", text="Use Minimum") + col.itemR(field, "use_max_distance", text="Use Maximum") + colsub.itemR(field, "falloff_power", text="Power") + colsub1 = colsub.column() + colsub1.active = field.use_min_distance + colsub1.itemR(field, "minimum_distance", text="Distance") + colsub2 = colsub.column() + colsub2.active = field.use_max_distance + colsub2.itemR(field, "maximum_distance", text="Distance") + + if field.falloff_type == "CONE": + col.itemL(text="") + col.itemL(text="Angular:") + col.itemR(field, "use_radial_min", text="Use Minimum") + col.itemR(field, "use_radial_max", text="Use Maximum") + colsub.itemL(text="") + colsub.itemR(field, "radial_falloff", text="Power") + colsub1 = colsub.column() + colsub1.active = field.use_radial_min + colsub1.itemR(field, "radial_minimum", text="Angle") + colsub2 = colsub.column() + colsub2.active = field.use_radial_max + colsub2.itemR(field, "radial_maximum", text="Angle") + + if field.falloff_type == "TUBE": + col.itemL(text="") + col.itemL(text="Radial:") + col.itemR(field, "use_radial_min", text="Use Minimum") + col.itemR(field, "use_radial_max", text="Use Maximum") + colsub.itemL(text="") + colsub.itemR(field, "radial_falloff", text="Power") + colsub1 = colsub.column() + colsub1.active = field.use_radial_min + colsub1.itemR(field, "radial_minimum", text="Distance") + colsub2 = colsub.column() + colsub2.active = field.use_radial_max + colsub2.itemR(field, "radial_maximum", text="Distance") + + #if ob.type in "CURVE": + #if field.type == "GUIDE": + #colsub = col.column(align=True) + + #if field.type != "NONE": + #layout.itemR(field, "strength") - if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "LENNARDj"): - if ob.type in ("MESH", "SURFACE", "FONT", "CURVE"): - layout.itemR(field, "surface") + #if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "LENNARDj"): + #if ob.type in ("MESH", "SURFACE", "FONT", "CURVE"): + #layout.itemR(field, "surface") class PHYSICS_PT_collision(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_collision" @@ -50,17 +170,30 @@ class PHYSICS_PT_collision(PhysicButtonsPanel): split = layout.split() col = split.column() - col.itemL(text="Damping:") - col.itemR(settings, "damping_factor", text="Factor"); - col.itemR(settings, "random_damping", text="Random"); + col.itemL(text="Particle:") + col.itemR(settings, "permeability", slider=True) + col.itemL(text="Particle Damping:") + colsub = col.column(align=True) + colsub.itemR(settings, "damping_factor", text="Factor", slider=True) + colsub.itemR(settings, "random_damping", text="Random", slider=True) + + col.itemL(text="Soft Body and Cloth:") + colsub = col.column(align=True) + colsub.itemR(settings, "outer_thickness", text="Outer", slider=True) + colsub.itemR(settings, "inner_thickness", text="Inner", slider=True) + + col.itemL(text="Force Fields:") + layout.itemR(md, "absorption", text="Absorption") col = split.column() - col.itemL(text="Friction:") - col.itemR(settings, "friction_factor", text="Factor"); - col.itemR(settings, "random_friction", text="Random"); + col.itemL(text="") + col.itemR(settings, "kill_particles") + col.itemL(text="Particle Friction:") + colsub = col.column(align=True) + colsub.itemR(settings, "friction_factor", text="Factor", slider=True) + colsub.itemR(settings, "random_friction", text="Random", slider=True) + col.itemL(text="Soft Body Damping:") + col.itemR(settings, "damping", text="Factor", slider=True) - layout.itemR(settings, "permeability"); - layout.itemR(settings, "kill_particles"); - bpy.types.register(PHYSICS_PT_field) -bpy.types.register(PHYSICS_PT_collision) +bpy.types.register(PHYSICS_PT_collision) \ No newline at end of file From f72018ebeb841c9aa677b4f51e1d28a56e8565a7 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 19 Jul 2009 12:15:20 +0000 Subject: [PATCH 262/512] 2.5 Small fix: Triple Buffer mode didn't clip custom paint cursors correctly for overlapping regions (example, view3d paint circle drawing into toolbar) --- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/screen/area.c | 22 +++++++++++++++++++ source/blender/windowmanager/intern/wm_draw.c | 4 ++-- .../blender/windowmanager/intern/wm_gesture.c | 2 +- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 3449458168e..6036a4c9e0f 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -50,6 +50,7 @@ void ED_region_do_listen(struct ARegion *ar, struct wmNotifier *note); void ED_region_do_draw(struct bContext *C, struct ARegion *ar); void ED_region_exit(struct bContext *C, struct ARegion *ar); void ED_region_pixelspace(struct ARegion *ar); +void ED_region_set(const struct bContext *C, struct ARegion *ar); void ED_region_init(struct bContext *C, struct ARegion *ar); void ED_region_tag_redraw(struct ARegion *ar); void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index e84aab787c1..cdb4322d7f2 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -273,6 +273,28 @@ static void region_scissor_winrct(ARegion *ar, rcti *winrct) } } +/* only exported for WM */ +/* makes region ready for drawing, sets pixelspace */ +void ED_region_set(const bContext *C, ARegion *ar) +{ + wmWindow *win= CTX_wm_window(C); + ScrArea *sa= CTX_wm_area(C); + rcti winrct; + + /* checks other overlapping regions */ + region_scissor_winrct(ar, &winrct); + + ar->drawrct= winrct; + + /* note; this sets state, so we can use wmOrtho and friends */ + wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct); + + UI_SetTheme(sa?sa->spacetype:0, ar->type?ar->type->regionid:0); + + ED_region_pixelspace(ar); +} + + /* only exported for WM */ void ED_region_do_draw(bContext *C, ARegion *ar) { diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index ef89b2b35ad..1df567e3c92 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -574,8 +574,8 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win) CTX_wm_area_set(C, sa); CTX_wm_region_set(C, ar); - wmSubWindowSet(win, ar->swinid); - ED_region_pixelspace(ar); + /* make region ready for draw, scissor, pixelspace */ + ED_region_set(C, ar); wm_paintcursor_draw(C, ar); CTX_wm_region_set(C, NULL); diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index c899d1d290e..05471329f32 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -236,7 +236,7 @@ static void wm_gesture_draw_cross(wmWindow *win, wmGesture *gt) glDisable(GL_LINE_STIPPLE); } -/* called in wm_event_system.c */ +/* called in wm_draw.c */ void wm_gesture_draw(wmWindow *win) { wmGesture *gt= (wmGesture *)win->gesture.first; From 8efdb04817b53562b9d8092a5d973981f78703c9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 19 Jul 2009 13:06:18 +0000 Subject: [PATCH 263/512] 2.5 - Recode of Add Constraint Operator(s) Add Constraint operators are now based on the old add_constraint() function (to be removed when the new code works well). - Fixed a few bugs with the code, including depsgraph missing rebuild call, and unique-naming for constraints failing due to wrong order for adding constraint to list - Added capabilities for setting the target of the constraint to the first selected object/bone for the operator when called from menus + hotkeys (but not for buttons window) This commit is still buggy. I'll fix the remaining issues tomorrow, as well as adding some more operators for IK add/clear. --- release/ui/buttons_object_constraint.py | 2 +- .../blender/editors/object/editconstraint.c | 324 +++++++++++++++--- source/blender/editors/object/object_ops.c | 3 + .../editors/space_view3d/view3d_header.c | 2 +- 4 files changed, 289 insertions(+), 42 deletions(-) diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 2bd24f3f176..8d531df9e19 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -521,7 +521,7 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): layout = self.layout row = layout.row() - row.item_menu_enumO("objects.constraint_add", "type") + row.item_menu_enumO("object.constraint_add", "type") row.itemL(); for con in ob.constraints: diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index a2f709b9dff..6a88fb5ab51 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -67,10 +67,13 @@ #include "RNA_access.h" #include "RNA_define.h" #include "RNA_enum_types.h" +#include "RNA_types.h" #include "ED_object.h" #include "ED_screen.h" +#include "UI_interface.h" + #include "object_intern.h" /* XXX */ @@ -1013,7 +1016,6 @@ void POSE_OT_constraints_clear(wmOperatorType *ot) ot->description= "Clear all the constraints for the selected bones."; /* callbacks */ - //ot->invoke= WM_menu_confirm; // XXX do we want confirmations on these things anymore? ot->exec= pose_constraints_clear_exec; ot->poll= ED_operator_posemode; // XXX - do we want to ensure there are selected bones too? } @@ -1043,96 +1045,336 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot) ot->description= "Clear all the constraints for the active Object only."; /* callbacks */ - //ot->invoke= WM_menu_confirm; // XXX do we want confirmations on these things anymore? ot->exec= object_constraints_clear_exec; ot->poll= ED_operator_object_active; } /************************ add constraint operators *********************/ +/* get the Object and/or PoseChannel to use as target */ +static short get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, short add) +{ + Object *obact= CTX_data_active_object(C); + short only_curve= 0, only_mesh= 0, only_ob= 0; + short found= 0; + + /* clear tar_ob and tar_pchan fields before use + * - assume for now that both always exist... + */ + *tar_ob= NULL; + *tar_pchan= NULL; + + /* check if constraint type doesn't requires a target + * - if so, no need to get any targets + */ + switch (con_type) { + /* no-target constraints --------------------------- */ + /* null constraint - shouldn't even be added! */ + case CONSTRAINT_TYPE_NULL: + /* limit constraints - no targets needed */ + case CONSTRAINT_TYPE_LOCLIMIT: + case CONSTRAINT_TYPE_ROTLIMIT: + case CONSTRAINT_TYPE_SIZELIMIT: + return 0; + + /* restricted target-type constraints -------------- */ + /* curve-based constraints - set the only_curve and only_ob flags */ + case CONSTRAINT_TYPE_TRACKTO: + case CONSTRAINT_TYPE_CLAMPTO: + case CONSTRAINT_TYPE_FOLLOWPATH: + only_curve= 1; + only_ob= 1; + break; + + /* mesh only? */ + case CONSTRAINT_TYPE_SHRINKWRAP: + only_mesh= 1; + only_ob= 1; + break; + + /* object only */ + case CONSTRAINT_TYPE_RIGIDBODYJOINT: + only_ob= 1; + break; + } + + /* if the active Object is Armature, and we can search for bones, do so... */ + if ((obact->type == OB_ARMATURE) && (only_ob == 0)) { + /* search in list of selected Pose-Channels for target */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + /* just use the first one that we encounter... */ + *tar_ob= obact; + *tar_pchan= pchan; + found= 1; + + break; + } + CTX_DATA_END; + } + + /* if not yet found, try selected Objects... */ + if (found == 0) { + /* search in selected objects context */ + CTX_DATA_BEGIN(C, Object*, ob, selected_objects) + { + /* just use the first object we encounter (that isn't the active object) + * and which fulfills the criteria for the object-target that we've got + */ + if ( (ob != obact) && + ((!only_curve) || (ob->type == OB_CURVE)) && + ((!only_mesh) || (ob->type == OB_MESH)) ) + { + /* set target */ + *tar_ob= ob; + found= 1; + + /* perform some special operations on the target */ + if (only_curve) { + /* Curve-Path option must be enabled for follow-path constraints to be able to work */ + Curve *cu= (Curve *)ob->data; + cu->flag |= CU_PATH; + } + + break; + } + } + CTX_DATA_END; + } + + /* if still not found, add a new empty to act as a target (if allowed) */ + if ((found == 0) && (add)) { +#if 0 // XXX old code to be fixed + Base *base= BASACT, *newbase; + Object *obt; + + obt= add_object(scene, OB_EMPTY); + /* set layers OK */ + newbase= BASACT; + newbase->lay= base->lay; + obt->lay= newbase->lay; + + /* transform cent to global coords for loc */ + if (pchanact) { + if (only_IK) + VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_tail); + else + VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_head); + } + else + VECCOPY(obt->loc, ob->obmat[3]); + + //set_constraint_nth_target(con, obt, "", 0); + + /* restore, add_object sets active */ + BASACT= base; + base->flag |= SELECT; +#endif // XXX old code to be ported + } + + /* return whether there's any target */ + return found; +} + +/* used by add constraint operators to add the constraint required */ static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) { Scene *scene= CTX_data_scene(C); Object *ob = CTX_data_active_object(C); - bConstraint *con, *coniter; bPoseChannel *pchan= get_active_posechannel(ob); + bConstraint *con; int type= RNA_enum_get(op->ptr, "type"); - + int setTarget= RNA_boolean_get(op->ptr, "set_targets"); + + /* create a new constraint of the type requried, and add it to the active/given constraints list */ con = add_new_constraint(type); - - if(list) { - unique_constraint_name(con, list); - BLI_addtail(list, con); + + if (list) { + bConstraint *coniter; - if(proxylocked_constraints_owner(ob, pchan)) + /* add new constraint to end of list of constraints before ensuring that it has a unique name + * (otherwise unique-naming code will fail, since it assumes element exists in list) + */ + BLI_addtail(list, con); + unique_constraint_name(con, list); + + /* if the target list is a list on some PoseChannel belonging to a proxy-protected + * Armature layer, we must tag newly added constraints with a flag which allows them + * to persist after proxy syncing has been done + */ + if (proxylocked_constraints_owner(ob, pchan)) con->flag |= CONSTRAINT_PROXY_LOCAL; + /* make this constraint the active one + * - since constraint was added at end of stack, we can just go + * through deactivating all previous ones + */ con->flag |= CONSTRAINT_ACTIVE; - for(coniter= con->prev; coniter; coniter= coniter->prev) + for (coniter= con->prev; coniter; coniter= coniter->prev) coniter->flag &= ~CONSTRAINT_ACTIVE; } - switch(type) { + /* get the first selected object/bone, and make that the target + * - apart from the buttons-window add buttons, we shouldn't add in this way + */ + if (setTarget) { + Object *tar_ob= NULL; + bPoseChannel *tar_pchan= NULL; + + /* get the target objects, adding them as need be */ + if (get_new_constraint_target(C, type, &tar_ob, &tar_pchan, 1)) { + /* method of setting target depends on the type of target we've got + * - by default, just set the first target (distinction here is only for multiple-targetted constraints) + */ + if (tar_pchan) + set_constraint_nth_target(con, tar_ob, tar_pchan->name, 0); + else + set_constraint_nth_target(con, tar_ob, "", 0); + } + } + + /* do type-specific tweaking to the constraint settings */ + switch (type) { case CONSTRAINT_TYPE_CHILDOF: - { - /* if this constraint is being added to a posechannel, make sure - * the constraint gets evaluated in pose-space */ - if(ob->flag & OB_POSEMODE) { - con->ownspace = CONSTRAINT_SPACE_POSE; - con->flag |= CONSTRAINT_SPACEONCE; - } + { + /* if this constraint is being added to a posechannel, make sure + * the constraint gets evaluated in pose-space */ + if (ob->flag & OB_POSEMODE) { + con->ownspace = CONSTRAINT_SPACE_POSE; + con->flag |= CONSTRAINT_SPACEONCE; } + } break; - case CONSTRAINT_TYPE_RIGIDBODYJOINT: - { - bRigidBodyJointConstraint *data; + + case CONSTRAINT_TYPE_PYTHON: // FIXME: this code is not really valid anymore + { + char *menustr; + int scriptint= 0; +#ifndef DISABLE_PYTHON + /* popup a list of usable scripts */ + menustr = buildmenu_pyconstraints(NULL, &scriptint); + scriptint = pupmenu(menustr); + MEM_freeN(menustr); + + /* only add constraint if a script was chosen */ + if (scriptint) { + /* add constraint */ + validate_pyconstraint_cb(con->data, &scriptint); - /* set selected first object as target - moved from new_constraint_data */ - data = (bRigidBodyJointConstraint*)con->data; - - CTX_DATA_BEGIN(C, Object*, selob, selected_objects) { - if(selob != ob) { - data->tar= selob; - break; - } - } - CTX_DATA_END; + /* make sure target allowance is set correctly */ + BPY_pyconstraint_update(ob, con); } - break; +#endif + } default: break; } - + + /* make sure all settings are valid - similar to above checks, but sometimes can be wrong */ object_test_constraints(ob); - if(ob->pose) + if (ob->pose) update_pose_constraint_flags(ob->pose); - if(ob->type==OB_ARMATURE) + + /* force depsgraph to get recalculated since new relationships added */ + DAG_scene_sort(scene); /* sort order of objects */ + + if ((ob->type==OB_ARMATURE) && (pchan)) { + ob->pose->flag |= POSE_RECALC; /* sort pose channels */ DAG_object_flush_update(scene, ob, OB_RECALC_DATA|OB_RECALC_OB); + } else DAG_object_flush_update(scene, ob, OB_RECALC_DATA); - + + /* notifiers for updates */ WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, ob); return OPERATOR_FINISHED; } +/* ------------------ */ + +#if 0 // BUGGY +/* for object cosntraints, don't include NULL or IK for now */ +static int object_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) +{ + EnumPropertyItem *item; + uiPopupMenu *pup; + uiLayout *layout; + int i, totitem; + + pup= uiPupMenuBegin(C, "Add Constraint", 0); + layout= uiPupMenuLayout(pup); + + /* loop over the constraint-types as defined in the enum + * - code below is based on the code used for WM_menu_invoke() + */ + totitem= sizeof(&constraint_type_items[0]) / sizeof(EnumPropertyItem); + item= constraint_type_items; + + for (i=0; i < totitem; i++) { + if (ELEM(item[i].value, CONSTRAINT_TYPE_NULL, CONSTRAINT_TYPE_KINEMATIC) == 0) { + if (item[i].identifier[0]) + uiItemEnumO(layout, (char*)item[i].name, item[i].icon, "OBJECT_OT_constraint_add", "type", item[i].value); + else + uiItemS(layout); + } + } + + uiPupMenuEnd(C, pup); +} +#endif // BUGGY + +/* dummy operator callback */ static int object_constraint_add_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; - if(!ob) + if (!ob) return OPERATOR_CANCELLED; return constraint_add_exec(C, op, &ob->constraints); } +#if 0 // BUGGY +/* for bone constraints, don't include NULL for now */ +static int pose_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) +{ + EnumPropertyItem *item; + uiPopupMenu *pup; + uiLayout *layout; + int i, totitem; + + pup= uiPupMenuBegin(C, "Add Constraint", 0); + layout= uiPupMenuLayout(pup); + + /* loop over the constraint-types as defined in the enum + * - code below is based on the code used for WM_menu_invoke() + */ + totitem= sizeof(&constraint_type_items[0]) / sizeof(EnumPropertyItem); + item= constraint_type_items; + + for (i=0; i < totitem; i++) { + // TODO: can add some other conditions here... + if (item[i].value != CONSTRAINT_TYPE_NULL) { + if (item[i].identifier[0]) + uiItemEnumO(layout, (char*)item[i].name, item[i].icon, "POSE_OT_constraint_add", "type", item[i].value); + else + uiItemS(layout); + } + } + + uiPupMenuEnd(C, pup); +} +#endif // BUGGY + +/* dummy operator callback */ static int pose_constraint_add_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; - if(!ob) + if (!ob) return OPERATOR_CANCELLED; return constraint_add_exec(C, op, get_active_constraints(ob)); @@ -1146,7 +1388,7 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) ot->idname= "OBJECT_OT_constraint_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke; + ot->invoke= WM_menu_invoke;//object_constraint_add_invoke; ot->exec= object_constraint_add_exec; ot->poll= ED_operator_object_active; @@ -1155,6 +1397,7 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) /* properties */ RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); + RNA_def_boolean(ot->srna, "set_targets", 0, "Set Targets", "Set target info for new constraints from context."); } void POSE_OT_constraint_add(wmOperatorType *ot) @@ -1165,7 +1408,7 @@ void POSE_OT_constraint_add(wmOperatorType *ot) ot->idname= "POSE_OT_constraint_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke; + ot->invoke= WM_menu_invoke; //pose_constraint_add_invoke; ot->exec= pose_constraint_add_exec; ot->poll= ED_operator_posemode; @@ -1174,5 +1417,6 @@ void POSE_OT_constraint_add(wmOperatorType *ot) /* properties */ RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); + RNA_def_boolean(ot->srna, "set_targets", 0, "Set Targets", "Set target info for new constraints from context."); } diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 992cdabaa77..4bc60a6a91b 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -158,6 +158,9 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0); + RNA_boolean_set(WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add", CKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "set_targets", 1); + WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, /*KM_CTRL|*/KM_ALT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_location_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_rotation_clear", RKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index ed127fd032a..8cceb46c559 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1978,7 +1978,7 @@ static void view3d_edit_object_trackmenu(bContext *C, uiLayout *layout, void *ar static void view3d_edit_object_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemO(layout, NULL, 0, "OBJECT_OT_constraint_add"); // XXX it'd be better to have the version which sets links... + uiItemBooleanO(layout, NULL, 0, "OBJECT_OT_constraint_add", "set_targets", 1); // XXX it'd be better to have the version which sets links... uiItemO(layout, NULL, 0, "OBJECT_OT_constraints_clear"); } From d9a7e5144f816bfa15687e5bd9d55e95f69c0269 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 13:32:02 +0000 Subject: [PATCH 264/512] Python operators - simplified C operator API bpy.__ops__ since its wrapped by python now. - needs the class to have an __idname__ rather then __name__ (like menus, headers) - convert python names "console.exec" into blender names "CONSOLE_OT_exec" when registering (store the blender name as class.__idname_bl__, users scripters wont notice) - bpy.props.props ???, removed --- release/io/export_ply.py | 1 + release/ui/bpy_ops.py | 26 ++- release/ui/space_console.py | 2 + .../editors/space_view3d/space_view3d.c | 1 + source/blender/python/intern/bpy_operator.c | 150 ++++++------------ .../blender/python/intern/bpy_operator_wrap.c | 32 ++-- source/blender/python/intern/bpy_rna.c | 5 +- source/blender/python/intern/bpy_util.c | 9 ++ source/blender/python/intern/bpy_util.h | 1 + 9 files changed, 99 insertions(+), 128 deletions(-) diff --git a/release/io/export_ply.py b/release/io/export_ply.py index ed983c2b169..6fdf4bf41b9 100644 --- a/release/io/export_ply.py +++ b/release/io/export_ply.py @@ -240,6 +240,7 @@ class EXPORT_OT_ply(bpy.types.Operator): ''' Operator documentatuon text, will be used for the operator tooltip and python docs. ''' + __idname__ = "export.ply" __label__ = "Export PLY" # List of operator properties, the attributes will be assigned diff --git a/release/ui/bpy_ops.py b/release/ui/bpy_ops.py index 22b7846a671..084f4c9703b 100644 --- a/release/ui/bpy_ops.py +++ b/release/ui/bpy_ops.py @@ -1,7 +1,8 @@ -import bpy - -# This class is used for bpy.ops -# +# for slightly faster access +from bpy.__ops__ import add as op_add +from bpy.__ops__ import remove as op_remove +from bpy.__ops__ import dir as op_dir +from bpy.__ops__ import call as op_call class bpy_ops(object): ''' @@ -10,10 +11,10 @@ class bpy_ops(object): bpy.ops ''' def add(self, pyop): - bpy.__ops__.add(pyop) + op_add(pyop) def remove(self, pyop): - bpy.__ops__.remove(pyop) + op_remove(pyop) def __getattr__(self, module): ''' @@ -25,11 +26,8 @@ class bpy_ops(object): submodules = set() - for id_name in dir(bpy.__ops__): + for id_name in op_dir(): - if id_name.startswith('__'): - continue - id_split = id_name.split('_OT_', 1) if len(id_split) == 2: @@ -66,7 +64,7 @@ class bpy_ops_submodule(object): module_upper = self.module.upper() - for id_name in dir(bpy.__ops__): + for id_name in op_dir(): if id_name.startswith('__'): continue @@ -96,12 +94,10 @@ class bpy_ops_submodule_op(object): id_name = self.module.upper() + '_OT_' + self.func # Get the operator from - internal_op = getattr(bpy.__ops__, id_name) - - # Call the op - return internal_op(**kw) + return op_call(id_name, kw) def __repr__(self): return "" % (self.module, self.func, id(self)) +import bpy bpy.ops = bpy_ops() diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 18994352034..d6078b1db80 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -120,6 +120,7 @@ class CONSOLE_OT_exec(bpy.types.Operator): ''' Operator documentatuon text, will be used for the operator tooltip and python docs. ''' + __idname__ = "console.exec" __label__ = "Console Execute" __register__ = False @@ -396,6 +397,7 @@ class CONSOLE_OT_autocomplete(bpy.types.Operator): ''' Operator documentatuon text, will be used for the operator tooltip and python docs. ''' + __idname__ = "console.autocomplete" __label__ = "Console Autocomplete" __register__ = False diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index a8abdf4132e..2b162f9574d 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -52,6 +52,7 @@ #include "ED_armature.h" #include "ED_space_api.h" #include "ED_screen.h" +#include "ED_object.h" #include "BIF_gl.h" diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index b57ef54304b..240ce2030ba 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -23,65 +23,79 @@ * ***** END GPL LICENSE BLOCK ***** */ +/* Note, this module is not to be used directly by the user. + * its accessed from blender with bpy.__ops__ + * */ + #include "bpy_operator.h" #include "bpy_operator_wrap.h" #include "bpy_rna.h" /* for setting arg props only - pyrna_py_to_prop() */ #include "bpy_compat.h" #include "bpy_util.h" -//#include "blendef.h" -#include "BLI_dynstr.h" - #include "WM_api.h" #include "WM_types.h" #include "MEM_guardedalloc.h" -//#include "BKE_idprop.h" #include "BKE_report.h" -extern ListBase global_ops; /* evil, temp use */ - -static PyObject *pyop_base_dir(PyObject *self); -static PyObject *pyop_base_rna(PyObject *self, PyObject *pyname); -static struct PyMethodDef pyop_base_methods[] = { - {"__dir__", (PyCFunction)pyop_base_dir, METH_NOARGS, ""}, - {"__rna__", (PyCFunction)pyop_base_rna, METH_O, ""}, - {"add", (PyCFunction)PYOP_wrap_add, METH_O, ""}, - {"remove", (PyCFunction)PYOP_wrap_remove, METH_O, ""}, - {NULL, NULL, 0, NULL} -}; /* 'self' stores the operator string */ -static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * kw) +static PyObject *pyop_call( PyObject * self, PyObject * args) { wmOperatorType *ot; int error_val = 0; PointerRNA ptr; + char *opname; + PyObject *kw= NULL; + // XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it... bContext *C = BPy_GetContext(); - char *opname = _PyUnicode_AsString(self); - if (PyTuple_Size(args)) { - PyErr_SetString( PyExc_AttributeError, "All operator args must be keywords"); + switch(PyTuple_Size(args)) { + case 2: + kw = PyTuple_GET_ITEM(args, 1); + + if(!PyDict_Check(kw)) { + PyErr_SetString( PyExc_AttributeError, "bpy.__ops__.call: expected second arg to be a dict"); + return NULL; + } + /* pass through */ + case 1: + opname = _PyUnicode_AsString(PyTuple_GET_ITEM(args, 0)); + + if(opname==NULL) { + PyErr_SetString( PyExc_AttributeError, "bpy.__ops__.call: expected the first arg to be a string"); + return NULL; + } + break; + default: + PyErr_SetString( PyExc_AttributeError, "bpy.__ops__.call: expected a string and optional dict"); return NULL; } + ot= WM_operatortype_find(opname, 1); + if (ot == NULL) { - PyErr_Format( PyExc_SystemError, "Operator \"%s\"could not be found", opname); + PyErr_Format( PyExc_SystemError, "bpy.__ops__.call: operator \"%s\"could not be found", opname); return NULL; } if(ot->poll && (ot->poll(C) == 0)) { - PyErr_SetString( PyExc_SystemError, "Operator poll() function failed, context is incorrect"); + PyErr_SetString( PyExc_SystemError, "bpy.__ops__.call: operator poll() function failed, context is incorrect"); return NULL; } - WM_operator_properties_create(&ptr, opname); + /* WM_operator_properties_create(&ptr, opname); */ + /* Save another lookup */ + RNA_pointer_create(NULL, ot->srna, NULL, &ptr); - error_val= pyrna_pydict_to_props(&ptr, kw, "Converting py args to operator properties: "); + if(kw && PyDict_Size(kw)) + error_val= pyrna_pydict_to_props(&ptr, kw, "Converting py args to operator properties: "); + if (error_val==0) { ReportList reports; @@ -118,96 +132,34 @@ static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * k Py_RETURN_NONE; } -static PyMethodDef pyop_base_call_meth[] = { - {"__op_call__", (PyCFunction)pyop_base_call, METH_VARARGS|METH_KEYWORDS, "generic operator calling function"} -}; - - -//---------------getattr-------------------------------------------- -static PyObject *pyop_base_getattro( BPy_OperatorBase * self, PyObject *pyname ) -{ - char *name = _PyUnicode_AsString(pyname); - PyObject *ret; - wmOperatorType *ot; - - /* First look for the operator, then our own methods if that fails. - * when methods are searched first, PyObject_GenericGetAttr will raise an error - * each time we want to call an operator, we could clear the error but I prefer - * not to since calling operators is a lot more common then adding and removing. - Campbell */ - - if ((ot= WM_operatortype_find(name, 1))) { - ret = PyCFunction_New( pyop_base_call_meth, pyname); /* set the name string as self, PyCFunction_New incref's self */ - } - else if ((ret = PyObject_GenericGetAttr((PyObject *)self, pyname))) { - /* do nothing, this accounts for methoddef's add and remove - * An exception is raised when PyObject_GenericGetAttr fails - * but its ok because its overwritten below */ - } - else { - PyErr_Format( PyExc_AttributeError, "Operator \"%s\" not found", name); - ret= NULL; - } - - return ret; -} - -static PyObject *pyop_base_dir(PyObject *self) +static PyObject *pyop_dir(PyObject *self) { PyObject *list = PyList_New(0), *name; wmOperatorType *ot; - PyMethodDef *meth; for(ot= WM_operatortype_first(); ot; ot= ot->next) { name = PyUnicode_FromString(ot->idname); PyList_Append(list, name); Py_DECREF(name); } - - for(meth=pyop_base_methods; meth->ml_name; meth++) { - name = PyUnicode_FromString(meth->ml_name); - PyList_Append(list, name); - Py_DECREF(name); - } return list; } -static PyObject *pyop_base_rna(PyObject *self, PyObject *pyname) -{ - char *name = _PyUnicode_AsString(pyname); - wmOperatorType *ot; - - if ((ot= WM_operatortype_find(name, 1))) { - BPy_StructRNA *pyrna; - PointerRNA ptr; - - /* XXX POINTER - if this 'ot' is python generated, it could be free'd */ - RNA_pointer_create(NULL, ot->srna, NULL, &ptr); - - pyrna= (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ptr); /* were not really using &ptr, overwite next */ - //pyrna->freeptr= 1; - return (PyObject *)pyrna; - } - else { - PyErr_Format(PyExc_AttributeError, "Operator \"%s\" not found", name); - return NULL; - } -} - -PyTypeObject pyop_base_Type = {NULL}; - PyObject *BPY_operator_module( void ) { - pyop_base_Type.tp_name = "OperatorBase"; - pyop_base_Type.tp_basicsize = sizeof( BPy_OperatorBase ); - pyop_base_Type.tp_getattro = ( getattrofunc )pyop_base_getattro; - pyop_base_Type.tp_flags = Py_TPFLAGS_DEFAULT; - pyop_base_Type.tp_methods = pyop_base_methods; - - if( PyType_Ready( &pyop_base_Type ) < 0 ) - return NULL; + static PyMethodDef pyop_call_meth = {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL}; + static PyMethodDef pyop_dir_meth = {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL}; + static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL}; + static PyMethodDef pyop_remove_meth = {"remove", (PyCFunction) PYOP_wrap_remove, METH_O, NULL}; - //submodule = Py_InitModule3( "operator", M_rna_methods, "rna module" ); - return (PyObject *)PyObject_NEW( BPy_OperatorBase, &pyop_base_Type ); + PyObject *submodule = PyModule_New("bpy.__ops__"); + PyDict_SetItemString(PySys_GetObject("modules"), "bpy.__ops__", submodule); + + PyModule_AddObject( submodule, "call", PyCFunction_New(&pyop_call_meth, NULL) ); + PyModule_AddObject( submodule, "dir", PyCFunction_New(&pyop_dir_meth, NULL) ); + PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) ); + PyModule_AddObject( submodule, "remove", PyCFunction_New(&pyop_remove_meth, NULL) ); + + return submodule; } - diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index 9f4137a15c0..02d721739e7 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -44,7 +44,8 @@ #define PYOP_ATTR_PROP "__props__" #define PYOP_ATTR_UINAME "__label__" -#define PYOP_ATTR_IDNAME "__name__" /* use pythons class name */ +#define PYOP_ATTR_IDNAME "__idname__" /* the name given by python */ +#define PYOP_ATTR_IDNAME_BL "__idname_bl__" /* our own name converted into blender syntax, users wont see this */ #define PYOP_ATTR_DESCRIPTION "__doc__" /* use pythons docstring */ #define PYOP_ATTR_REGISTER "__register__" /* True/False. if this python operator should be registered */ @@ -249,10 +250,9 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) PyObject *props, *item; /* identifiers */ - item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME); + item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME_BL); ot->idname= _PyUnicode_AsString(item); Py_DECREF(item); - item= PyObject_GetAttrString(py_class, PYOP_ATTR_UINAME); if (item) { @@ -338,16 +338,17 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) char *idname= NULL; + char idname_bl[OP_MAX_TYPENAME]; /* converted to blender syntax */ int i; static struct BPY_class_attr_check pyop_class_attr_values[]= { - {PYOP_ATTR_IDNAME, 's', 0, 0}, - {PYOP_ATTR_UINAME, 's', 0, BPY_CLASS_ATTR_OPTIONAL}, - {PYOP_ATTR_PROP, 'l', 0, BPY_CLASS_ATTR_OPTIONAL}, - {PYOP_ATTR_DESCRIPTION, 's', 0, BPY_CLASS_ATTR_NONE_OK}, - {"execute", 'f', 2, BPY_CLASS_ATTR_OPTIONAL}, - {"invoke", 'f', 3, BPY_CLASS_ATTR_OPTIONAL}, - {"poll", 'f', 2, BPY_CLASS_ATTR_OPTIONAL}, + {PYOP_ATTR_IDNAME, 's', -1, OP_MAX_TYPENAME-3, 0}, /* -3 because a.b -> A_OT_b */ + {PYOP_ATTR_UINAME, 's', -1,-1, BPY_CLASS_ATTR_OPTIONAL}, + {PYOP_ATTR_PROP, 'l', -1,-1, BPY_CLASS_ATTR_OPTIONAL}, + {PYOP_ATTR_DESCRIPTION, 's', -1,-1, BPY_CLASS_ATTR_NONE_OK}, + {"execute", 'f', 2, -1, BPY_CLASS_ATTR_OPTIONAL}, + {"invoke", 'f', 3, -1, BPY_CLASS_ATTR_OPTIONAL}, + {"poll", 'f', 2, -1, BPY_CLASS_ATTR_OPTIONAL}, {NULL, 0, 0, 0} }; @@ -363,7 +364,18 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) /* class name is used for operator ID - this can be changed later if we want */ item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME); idname = _PyUnicode_AsString(item); + + + /* annoying conversion! */ + WM_operator_bl_idname(idname_bl, idname); Py_DECREF(item); + + item= PyUnicode_FromString(idname_bl); + PyObject_SetAttrString(py_class, PYOP_ATTR_IDNAME_BL, item); + idname = _PyUnicode_AsString(item); + Py_DECREF(item); + /* end annoying conversion! */ + /* remove if it already exists */ if ((ot=WM_operatortype_exists(idname))) { diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index d3f69e4db73..bebb745a27e 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -2550,7 +2550,7 @@ static struct PyMethodDef props_methods[] = { #if PY_VERSION_HEX >= 0x03000000 static struct PyModuleDef props_module = { PyModuleDef_HEAD_INIT, - "bpyprops", + "bpy.props", "", -1,/* multiple "initialization" just copies the module dict. */ props_methods, @@ -2567,9 +2567,6 @@ PyObject *BPY_rna_props( void ) submodule= Py_InitModule3( "bpy.props", props_methods, "" ); #endif - mod = PyModule_New("props"); - PyModule_AddObject( submodule, "props", mod ); - /* INCREF since its its assumed that all these functions return the * module with a new ref like PyDict_New, since they are passed to * PyModule_AddObject which steals a ref */ diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c index b451923e780..3084cc1f871 100644 --- a/source/blender/python/intern/bpy_util.c +++ b/source/blender/python/intern/bpy_util.c @@ -304,12 +304,21 @@ int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_c PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a string", class_type, class_attrs->name); return -1; } + if(class_attrs->len != -1 && class_attrs->len < PyUnicode_GetSize(item)) { + PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute string to be shorter then %d", class_type, class_attrs->name, class_attrs->len); + return -1; + } + break; case 'l': if (PyList_Check(item)==0) { PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a list", class_type, class_attrs->name); return -1; } + if(class_attrs->len != -1 && class_attrs->len < PyList_GET_SIZE(item)) { + PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute list to be shorter then %d", class_type, class_attrs->name, class_attrs->len); + return -1; + } break; case 'f': if (PyMethod_Check(item)) diff --git a/source/blender/python/intern/bpy_util.h b/source/blender/python/intern/bpy_util.h index 6429af67eb0..470dd4c2a45 100644 --- a/source/blender/python/intern/bpy_util.h +++ b/source/blender/python/intern/bpy_util.h @@ -59,6 +59,7 @@ typedef struct BPY_class_attr_check { const char *name; /* name of the class attribute */ char type; /* 's' = string, 'f' = function, 'l' = list, (add as needed) */ int arg_count; /* only for function types, -1 for undefined, includes self arg */ + int len; /* only for string types currently */ int flag; /* other options */ } BPY_class_attr_check; From b96a6e183863e5280a6e48a462593e8df72050ef Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 14:57:20 +0000 Subject: [PATCH 265/512] issues auto generating rna docs - add a warning when an operator name is NULL, set it to a dummy name to prevent crash. POSE_OT_constraints_clear had its name commented (not sure why) - rna_Object_parent_type_itemf wasnt checking for context being NULL, needed for docs else it crashes. - bpy.ops.add/remove didnt show up in a dir(bpy.ops) --- release/ui/bpy_ops.py | 10 +++++----- source/blender/editors/object/editconstraint.c | 2 +- source/blender/makesrna/intern/rna_object.c | 9 +++++++-- source/blender/windowmanager/intern/wm_operators.c | 7 +++++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/release/ui/bpy_ops.py b/release/ui/bpy_ops.py index 084f4c9703b..aaf9edc082e 100644 --- a/release/ui/bpy_ops.py +++ b/release/ui/bpy_ops.py @@ -26,8 +26,12 @@ class bpy_ops(object): submodules = set() + # add this classes functions + for id_name in dir(self.__class__): + if not id_name.startswith('__'): + submodules.add(id_name) + for id_name in op_dir(): - id_split = id_name.split('_OT_', 1) if len(id_split) == 2: @@ -65,10 +69,6 @@ class bpy_ops_submodule(object): module_upper = self.module.upper() for id_name in op_dir(): - - if id_name.startswith('__'): - continue - id_split = id_name.split('_OT_', 1) if len(id_split) == 2 and module_upper == id_split[0]: functions.add(id_split[1]) diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 6a88fb5ab51..477d04a818b 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -1011,7 +1011,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *op) void POSE_OT_constraints_clear(wmOperatorType *ot) { /* identifiers */ - //ot->name = "Clear Constraints"; + ot->name = "Clear Constraints"; ot->idname= "POSE_OT_constraints_clear"; ot->description= "Clear all the constraints for the selected bones."; diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 5ec25cfe4c2..05a60f3c0f9 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -184,13 +184,18 @@ static void rna_Object_track_set(PointerRNA *ptr, PointerRNA value) static EnumPropertyItem *rna_Object_parent_type_itemf(bContext *C, PointerRNA *ptr, int *free) { Object *ob= (Object*)ptr->data; - Object *par= ob->parent; EnumPropertyItem *item= NULL; int totitem= 0; + if(C==NULL) { + return parent_type_items; + } + RNA_enum_items_add_value(&item, &totitem, parent_type_items, PAROBJECT); - if(par) { + if(ob->parent) { + Object *par= ob->parent; + if(par->type == OB_CURVE) RNA_enum_items_add_value(&item, &totitem, parent_type_items, PARCURVE); else if(par->type == OB_LATTICE) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 9e8c5dc7ca0..5e60207f62d 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -130,6 +130,13 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType*)) ot= MEM_callocN(sizeof(wmOperatorType), "operatortype"); ot->srna= RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); opfunc(ot); + + if(ot->name==NULL) { + static char dummy_name[] = "Dummy Name"; + fprintf(stderr, "ERROR: Operator %s has no name property!\n", ot->idname); + ot->name= dummy_name; + } + RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:""); // XXX All ops should have a description but for now allow them not to. RNA_def_struct_identifier(ot->srna, ot->idname); BLI_addtail(&global_ops, ot); From 9e047d5acc853f026680e5411af78805222160a1 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 19 Jul 2009 16:53:57 +0000 Subject: [PATCH 266/512] 2.5 Bugfix: the 'active 3d view layer' was never set, causing issues when adding new objects. Reported by Martin, thanks! --- .../blender/editors/space_view3d/view3d_header.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 8cceb46c559..677d3c20de1 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -284,6 +284,21 @@ static int layers_exec(bContext *C, wmOperator *op) else v3d->lay = (1<lay & (1<layact= 1<lay & v3d->layact)==0) { + int bit= 0; + + while(bit<32) { + if(v3d->lay & (1<layact= 1<scenelock) handle_view3d_lock(C); /* new layers might need unflushed events events */ From 20f1fb6a7f430eadcefaf5a8c30c4e6349df8d7a Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 19 Jul 2009 17:14:26 +0000 Subject: [PATCH 267/512] 2.5 Bugfix: extrudes failed when called a 2nd time, missing statistics update. Reported by Sanne in irc, thanks! --- source/blender/editors/mesh/editmesh_tools.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 3c186659adc..6d5baa80ade 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -627,6 +627,9 @@ void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op) float nor[3]= {0.0, 0.0, 0.0}; short nr, transmode= 0; + /* extrude depends on totvertsel etc */ + EM_stats_update(em); + if(em->selectmode & SCE_SELECT_VERTEX) { if(em->totvertsel==0) nr= 0; else if(em->totvertsel==1) nr= 4; From 8ac67fcd21039676011b5393e22a0fede89c34c9 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sun, 19 Jul 2009 17:42:01 +0000 Subject: [PATCH 268/512] Remove unneeded manipulator functions. Disable manipulator drawing while moving. This still use G.moving, but that's acceptable for now (it's sort of a weird display option, after talk with Ton, we couldn't find a good place to set it). --- source/blender/editors/include/ED_transform.h | 2 - source/blender/editors/transform/transform.c | 196 ------------------ .../blender/editors/transform/transform_ops.c | 3 + 3 files changed, 3 insertions(+), 198 deletions(-) diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index de1294c9b2b..984def760ae 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -132,8 +132,6 @@ void Properties_Snapping(struct wmOperatorType *ot, short align); void Properties_Constraints(struct wmOperatorType *ot); /* view3d manipulators */ -void initManipulator(int mode); -void ManipulatorTransform(); int BIF_do_manipulator(struct bContext *C, struct wmEvent *event, struct wmOperator *op); void BIF_draw_manipulator(const struct bContext *C); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d8b62b40dff..0d29f39e478 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1452,202 +1452,6 @@ int transformEnd(bContext *C, TransInfo *t) return exit_code; } -/* ************************** Manipulator init and main **************************** */ - -void initManipulator(int mode) -{ - printf("init manipulator mode %d\n", mode); - -#if 0 // TRANSFORM_FIX_ME - Trans.state = TRANS_RUNNING; - - Trans.options = CTX_NONE; - - Trans.mode = mode; - - /* automatic switch to scaling bone envelopes */ - if(mode==TFM_RESIZE && t->obedit && t->obedit->type==OB_ARMATURE) { - bArmature *arm= t->obedit->data; - if(arm->drawtype==ARM_ENVELOPE) - mode= TFM_BONE_ENVELOPE; - } - - initTrans(&Trans); // internal data, mouse, vectors - - G.moving |= G_TRANSFORM_MANIP; // signal to draw manipuls while transform - createTransData(&Trans); // make TransData structs from selection - - if (Trans.total == 0) - return; - - initSnapping(&Trans); // Initialize snapping data AFTER mode flags - - /* EVIL! posemode code can switch translation to rotate when 1 bone is selected. will be removed (ton) */ - /* EVIL2: we gave as argument also texture space context bit... was cleared */ - mode = Trans.mode; - - calculatePropRatio(&Trans); - calculateCenter(&Trans); - - switch (mode) { - case TFM_TRANSLATION: - initTranslation(&Trans); - break; - case TFM_ROTATION: - initRotation(&Trans); - break; - case TFM_RESIZE: - initResize(&Trans); - break; - case TFM_TRACKBALL: - initTrackball(&Trans); - break; - } - - Trans.flag |= T_USES_MANIPULATOR; -#endif -} - -void ManipulatorTransform() -{ -#if 0 // TRANSFORM_FIX_ME - int mouse_moved = 0; - short pmval[2] = {0, 0}, mval[2], val; - unsigned short event; - - if (Trans.total == 0) - return; - - Trans.redraw = 1; /* initial draw */ - - while (Trans.state == TRANS_RUNNING) { - - getmouseco_areawin(mval); - - if (mval[0] != pmval[0] || mval[1] != pmval[1]) { - Trans.redraw = 1; - } - if (Trans.redraw) { - pmval[0] = mval[0]; - pmval[1] = mval[1]; - - //selectConstraint(&Trans); needed? - if (Trans.transform) { - Trans.transform(&Trans, mval); - } - Trans.redraw = 0; - } - - /* essential for idling subloop */ - if( qtest()==0) PIL_sleep_ms(2); - - while( qtest() ) { - event= extern_qread(&val); - - switch (event){ - case MOUSEX: - case MOUSEY: - mouse_moved = 1; - break; - /* enforce redraw of transform when modifiers are used */ - case LEFTCTRLKEY: - case RIGHTCTRLKEY: - if(val) Trans.redraw = 1; - break; - case LEFTSHIFTKEY: - case RIGHTSHIFTKEY: - /* shift is modifier for higher resolution transform, works nice to store this mouse position */ - if(val) { - getmouseco_areawin(Trans.shiftmval); - Trans.flag |= T_SHIFT_MOD; - Trans.redraw = 1; - } - else Trans.flag &= ~T_SHIFT_MOD; - break; - - case ESCKEY: - case RIGHTMOUSE: - Trans.state = TRANS_CANCEL; - break; - case LEFTMOUSE: - if(mouse_moved==0 && val==0) break; - // else we pass on event to next, which cancels - case SPACEKEY: - case PADENTER: - case RETKEY: - Trans.state = TRANS_CONFIRM; - break; - // case NDOFMOTION: - // viewmoveNDOF(1); - // break; - } - if(val) { - switch(event) { - case PADPLUSKEY: - if(G.qual & LR_ALTKEY && Trans.flag & T_PROP_EDIT) { - Trans.propsize*= 1.1f; - calculatePropRatio(&Trans); - } - Trans.redraw= 1; - break; - case PAGEUPKEY: - case WHEELDOWNMOUSE: - if (Trans.flag & T_AUTOIK) { - transform_autoik_update(&Trans, 1); - } - else if(Trans.flag & T_PROP_EDIT) { - Trans.propsize*= 1.1f; - calculatePropRatio(&Trans); - } - else view_editmove(event); - Trans.redraw= 1; - break; - case PADMINUS: - if(G.qual & LR_ALTKEY && Trans.flag & T_PROP_EDIT) { - Trans.propsize*= 0.90909090f; - calculatePropRatio(&Trans); - } - Trans.redraw= 1; - break; - case PAGEDOWNKEY: - case WHEELUPMOUSE: - if (Trans.flag & T_AUTOIK) { - transform_autoik_update(&Trans, -1); - } - else if (Trans.flag & T_PROP_EDIT) { - Trans.propsize*= 0.90909090f; - calculatePropRatio(&Trans); - } - else view_editmove(event); - Trans.redraw= 1; - break; - } - - // Numerical input events - Trans.redraw |= handleNumInput(&(Trans.num), event); - } - } - } - - if(Trans.state == TRANS_CANCEL) { - restoreTransObjects(&Trans); - } - - /* free data, reset vars */ - postTrans(&Trans); - - /* aftertrans does insert ipos and action channels, and clears base flags */ - special_aftertrans_update(&Trans); - - /* send events out for redraws */ - viewRedrawPost(&Trans); - - if(Trans.state != TRANS_CANCEL) { - BIF_undo_push(transform_to_undostr(&Trans)); - } -#endif -} - /* ************************** TRANSFORM LOCKS **************************** */ static void protectedTransBits(short protectflag, float *vec) diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 6ca4c620303..7d6112b03de 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -36,6 +36,7 @@ #include "BKE_utildefines.h" #include "BKE_context.h" +#include "BKE_global.h" #include "WM_api.h" #include "WM_types.h" @@ -163,6 +164,7 @@ static void transformops_exit(bContext *C, wmOperator *op) saveTransform(C, op->customdata, op); MEM_freeN(op->customdata); op->customdata = NULL; + G.moving = 0; } static int transformops_data(bContext *C, wmOperator *op, wmEvent *event) @@ -188,6 +190,7 @@ static int transformops_data(bContext *C, wmOperator *op, wmEvent *event) } retval = initTransform(C, t, op, event, mode); + G.moving = 1; /* store data */ op->customdata = t; From d410135408fcce7856cc044ba717297c89302a34 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Sun, 19 Jul 2009 17:44:44 +0000 Subject: [PATCH 269/512] Sculpt+Paint/2.5: * Moved brush NKEY panel from C to Python. Could use some UI review :) * Added a NULL check in bpy_internal_import.c, was crashing here on Python errors * Added RNA for vpaint brush and for weight paint * Added context for vpaint/wpaint similar to edit_object and sculpt_object --- release/ui/space_view3d.py | 51 ++++++++++- .../blender/editors/screen/screen_context.c | 18 +++- .../editors/space_view3d/view3d_buttons.c | 84 +------------------ source/blender/makesrna/intern/rna_scene.c | 4 + source/blender/makesrna/intern/rna_vpaint.c | 4 + .../python/generic/bpy_internal_import.c | 2 + 6 files changed, 77 insertions(+), 86 deletions(-) diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index e194e6f939b..9d4994b9793 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -197,10 +197,59 @@ class VIEW3D_PT_sculpt(bpy.types.Panel): row.itemR(sculpt, "lock_y", text="Y", toggle=True) row.itemR(sculpt, "lock_z", text="Z", toggle=True) +class VIEW3D_PT_brush(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "UI" + __label__ = "Brush" + + def brush_src(self, context): + ts = context.scene.tool_settings + if context.sculpt_object: + return ts.sculpt + elif context.vpaint_object: + return ts.vpaint + elif context.wpaint_object: + return ts.wpaint + return False + + def poll(self, context): + return self.brush_src(context) + + def draw(self, context): + src = self.brush_src(context) + brush = src.brush + layout = self.layout + + layout.split().row().template_ID(src, "brush") + + split = layout.split() + col = split.column(align=True) + col.itemR(brush, "size", slider=True) + if context.wpaint_object: + col.itemR(context.scene.tool_settings, "vertex_group_weight", text="Weight", slider=True) + col.itemR(brush, "strength", slider=True) + + if context.sculpt_object: + layout.split().row().itemR(brush, "sculpt_tool") + + split = layout.split() + col = split.column() + col.itemR(brush, "airbrush") + col.itemR(brush, "anchored") + col.itemR(brush, "rake") + col = split.column() + col.itemR(brush, "space") + col.itemR(brush, "spacing") + + split = layout.split() + split.template_curve_mapping(brush.curve) + bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) bpy.types.register(VIEW3D_HT_header) +bpy.types.register(VIEW3D_PT_sculpt) +bpy.types.register(VIEW3D_PT_brush) bpy.types.register(VIEW3D_PT_3dview_properties) bpy.types.register(VIEW3D_PT_3dview_display) bpy.types.register(VIEW3D_PT_background_image) -bpy.types.register(VIEW3D_PT_sculpt) + diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 5944ef5f507..19750833b4d 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -37,6 +37,8 @@ #include "RNA_access.h" +#include "ED_object.h" + int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result) { bScreen *sc= CTX_wm_screen(C); @@ -47,8 +49,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult static const char *dir[] = { "scene", "selected_objects", "selected_bases", "selected_editable_objects", "selected_editable_bases" - "active_base", - "active_object", "edit_object", "sculpt_object", NULL}; + "active_base", "active_object", "edit_object", + "sculpt_object", "vpaint_object", "wpaint_object", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -114,6 +116,18 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else if(CTX_data_equals(member, "vpaint_object")) { + if(G.f & G_VERTEXPAINT && scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } + else if(CTX_data_equals(member, "wpaint_object")) { + if(G.f & G_WEIGHTPAINT && scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } return 0; } diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 077f34f3c4d..a50502e8265 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1101,81 +1101,6 @@ static void brush_idpoin_handle(bContext *C, ID *id, int event) } } -static int view3d_panel_brush_poll(const bContext *C, PanelType *pt) -{ - Brush **brp = current_brush_source(CTX_data_scene(C)); - - return ((G.f & (G_SCULPTMODE|G_TEXTUREPAINT|G_VERTEXPAINT|G_WEIGHTPAINT)) && brp); -} - -static void view3d_panel_brush(const bContext *C, Panel *pa) -{ - uiBlock *block; - ToolSettings *ts= CTX_data_tool_settings(C); - Brush **brp = current_brush_source(CTX_data_scene(C)), *br; - short w = 268, h = 400, cx = 10, cy = h; - rctf rect; - - br = *brp; - - block= uiLayoutFreeBlock(pa->layout); - uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL); - - uiBlockBeginAlign(block); - uiDefIDPoinButs(block, CTX_data_main(C), NULL, &br->id, ID_BR, NULL, cx, cy, - brush_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE|UI_ID_ALONE); - cy-= 25; - uiBlockEndAlign(block); - - if(!br) - return; - - if(G.f & G_SCULPTMODE) { - uiBlockBeginAlign(block); - uiDefButC(block,ROW,B_REDR,"Draw",cx,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_DRAW,0,0,"Draw lines on the model"); - uiDefButC(block,ROW,B_REDR,"Smooth",cx+67,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_SMOOTH,0,0,"Interactively smooth areas of the model"); - uiDefButC(block,ROW,B_REDR,"Pinch",cx+134,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_PINCH,0,0,"Interactively pinch areas of the model"); - uiDefButC(block,ROW,B_REDR,"Inflate",cx+201,cy,67,19,&br->sculpt_tool,14,SCULPT_TOOL_INFLATE,0,0,"Push vertices along the direction of their normals"); - cy-= 20; - uiDefButC(block,ROW,B_REDR,"Grab", cx,cy,67,19,&br->sculpt_tool,14,SCULPT_TOOL_GRAB,0,0,"Grabs a group of vertices and moves them with the mouse"); - uiDefButC(block,ROW,B_REDR,"Layer", cx+67,cy,67,19,&br->sculpt_tool,14, SCULPT_TOOL_LAYER,0,0,"Adds a layer of depth"); - uiDefButC(block,ROW,B_REDR,"Flatten", cx+134,cy,67,19,&br->sculpt_tool,14, SCULPT_TOOL_FLATTEN,0,0,"Interactively flatten areas of the model"); - uiDefButC(block,ROW,B_REDR,"Clay", cx+201,cy,67,19,&br->sculpt_tool,14, SCULPT_TOOL_CLAY,0,0,"Build up depth quickly"); - cy-= 25; - uiBlockEndAlign(block); - } - - uiBlockBeginAlign(block); - uiDefButI(block,NUMSLI,B_NOP,"Size: ",cx,cy,w,19,&br->size,1.0,200.0,0,0,"Set brush radius in pixels"); - cy-= 20; - if(G.f & G_WEIGHTPAINT) { - uiDefButF(block,NUMSLI,B_NOP,"Weight: ",cx,cy,w,19,&ts->vgroup_weight,0,1.0,0,0,"Set vertex weight"); - cy-= 20; - } - uiDefButF(block,NUMSLI,B_NOP,"Strength: ",cx,cy,w,19,&br->alpha,0,1.0,0,0,"Set brush strength"); - cy-= 25; - uiBlockEndAlign(block); - - uiBlockBeginAlign(block); - - uiDefButBitS(block, TOG, BRUSH_AIRBRUSH, B_NOP, "Airbrush", cx,cy,w/3,19, &br->flag,0,0,0,0, "Brush makes changes without waiting for the mouse to move"); - uiDefButBitS(block, TOG, BRUSH_RAKE, B_NOP, "Rake", cx+w/3,cy,w/3,19, &br->flag,0,0,0,0, ""); - uiDefButBitS(block, TOG, BRUSH_ANCHORED, B_NOP, "Anchored", cx+w*2.0/3,cy,w/3,19, &br->flag,0,0,0,0, ""); - cy-= 20; - uiDefButBitS(block, TOG, BRUSH_SPACE, B_NOP, "Space", cx,cy,w/3,19, &br->flag,0,0,0,0, ""); - uiDefButF(block,NUMSLI,B_NOP,"Spacing: ",cx+w/3,cy,w*2.0/3,19,&br->spacing,1.0,500,0,0,""); - cy-= 20; - uiBlockEndAlign(block); - - if(br->curve) { - rect.xmin= cx; rect.xmax= cx + w; - rect.ymin= cy - 200; rect.ymax= cy; - uiBlockBeginAlign(block); - curvemap_buttons(block, br->curve, (char)0, B_NOP, 0, &rect); - uiBlockEndAlign(block); - } -} - static void view3d_panel_object(const bContext *C, Panel *pa) { uiBlock *block; @@ -1715,14 +1640,7 @@ void view3d_buttons_register(ARegionType *art) strcpy(pt->label, "Background Image"); pt->draw= view3d_panel_background; BLI_addtail(&art->paneltypes, pt); -*/ - pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel brush"); - strcpy(pt->idname, "VIEW3D_PT_brush"); - strcpy(pt->label, "Brush"); - pt->draw= view3d_panel_brush; - pt->poll= view3d_panel_brush_poll; - BLI_addtail(&art->paneltypes, pt); -/* + pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel transform spaces"); strcpy(pt->idname, "VIEW3D_PT_transform spaces"); strcpy(pt->label, "Transform Orientations"); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 8d0fc4f6a8b..d1ef9dbbef3 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -294,6 +294,10 @@ void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_struct_type(prop, "VPaint"); RNA_def_property_ui_text(prop, "Vertex Paint", ""); + prop= RNA_def_property(srna, "wpaint", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "VPaint"); + RNA_def_property_ui_text(prop, "Weight Paint", ""); + /* Transform */ prop= RNA_def_property(srna, "proportional_editing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "proportional", 0); diff --git a/source/blender/makesrna/intern/rna_vpaint.c b/source/blender/makesrna/intern/rna_vpaint.c index a34099dffb7..bf6b70dab23 100644 --- a/source/blender/makesrna/intern/rna_vpaint.c +++ b/source/blender/makesrna/intern/rna_vpaint.c @@ -51,6 +51,10 @@ void RNA_def_vpaint(BlenderRNA *brna) srna= RNA_def_struct(brna, "VPaint", NULL); RNA_def_struct_ui_text(srna, "Vertex Paint", "Properties of the Vpaint tool."); + + prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "Brush"); + RNA_def_property_ui_text(prop, "Brush", ""); prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_mode_items); diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index c41ea386c0e..b8c17d71ac4 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -65,6 +65,8 @@ PyObject *bpy_text_import( char *name, int *found ) Main *maggie= bpy_import_main; *found= 0; + + if(!maggie) return NULL; if (namelen>21-3) return NULL; /* we know this cant be importable, the name is too long for blender! */ From 979bec79c373b5bfae0bfe6e74e6e92bf3214ff2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 17:45:14 +0000 Subject: [PATCH 270/512] - Support for importing python packages. (directories of python scripts containing an __init__.py) - BLI_add_slash returns the new string length. - BLI_where_am_i() would often have /./ in the path (not incorrect but annoying, got into python exceptions) - release/ui/space_image.py, py error referencing invalid keyword args. --- release/ui/space_image.py | 2 +- source/blender/blenkernel/intern/pointcache.c | 7 +-- source/blender/blenlib/BLI_fileops.h | 2 +- source/blender/blenlib/intern/fileops.c | 5 +- source/blender/blenlib/intern/util.c | 47 ++++++-------- source/blender/editors/space_file/file_ops.c | 1 - source/blender/python/intern/bpy_interface.c | 61 +++++++++++++------ 7 files changed, 69 insertions(+), 56 deletions(-) diff --git a/release/ui/space_image.py b/release/ui/space_image.py index 7084a0f639d..3bd8c4ceb57 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -223,7 +223,7 @@ class IMAGE_HT_header(bpy.types.Header): if show_uvedit: row.itemM("IMAGE_MT_uvs") - layout.template_ID(sima, "image", new="image.new", open="image.open") + layout.template_ID(sima, "image", new="image.new") # open="image.open" """ /* image select */ diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 6107510fa47..cde0587772e 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -196,15 +196,14 @@ static int ptcache_path(PTCacheID *pid, char *filename) snprintf(filename, MAX_PTCACHE_PATH, "//"PTCACHE_PATH"%s", file); /* add blend file name to pointcache dir */ BLI_convertstringcode(filename, blendfilename); - BLI_add_slash(filename); - return strlen(filename); + return BLI_add_slash(filename); /* new strlen() */ } /* use the temp path. this is weak but better then not using point cache at all */ /* btempdir is assumed to exist and ALWAYS has a trailing slash */ snprintf(filename, MAX_PTCACHE_PATH, "%s"PTCACHE_PATH"%d", btempdir, abs(getpid())); - BLI_add_slash(filename); - return strlen(filename); + + return BLI_add_slash(filename); /* new strlen() */ } static int BKE_ptcache_id_filename(PTCacheID *pid, char *filename, int cfra, short do_path, short do_ext) diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index 146ca16606e..d2dd40b21a5 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -53,7 +53,7 @@ int BLI_delete(char *file, int dir, int recursive); int BLI_move(char *file, char *to); int BLI_touch(const char *file); char *BLI_last_slash(const char *string); -void BLI_add_slash(char *string); +int BLI_add_slash(char *string); void BLI_del_slash(char *string); char *first_slash(char *string); diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 917537bf03d..42fd75a543e 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -83,19 +83,22 @@ char *BLI_last_slash(const char *string) { } /* adds a slash if there isnt one there alredy */ -void BLI_add_slash(char *string) { +int BLI_add_slash(char *string) { int len = strlen(string); #ifdef WIN32 if (len==0 || string[len-1]!='\\') { string[len] = '\\'; string[len+1] = '\0'; + return len+1; } #else if (len==0 || string[len-1]!='/') { string[len] = '/'; string[len+1] = '\0'; + return len+1; } #endif + return len; } /* removes a slash if there is one */ diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c index 78a4599b3b3..8eeca6900a1 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/util.c @@ -499,9 +499,8 @@ int BLI_has_parent(char *path) int len; int slashes = 0; BLI_clean(path); - BLI_add_slash(path); + len = BLI_add_slash(path) - 1; - len = strlen(path)-1; while (len>=0) { if ((path[len] == '\\') || (path[len] == '/')) slashes++; @@ -1276,22 +1275,12 @@ void BLI_split_dirfile(char *string, char *dir, char *file) /* simple appending of filename to dir, does not check for valid path! */ void BLI_join_dirfile(char *string, const char *dir, const char *file) { - int sl_dir = strlen(dir); - BLI_strncpy(string, dir, FILE_MAX); - if (sl_dir > FILE_MAX-1) sl_dir = FILE_MAX-1; + int sl_dir; - /* only add seperator if needed */ -#ifdef WIN32 - if (string[sl_dir-1] != '\\') { - string[sl_dir] = '\\'; - sl_dir++; - } -#else - if (string[sl_dir-1] != '/') { - string[sl_dir] = '/'; - sl_dir++; - } -#endif + if(string != dir) /* compare pointers */ + BLI_strncpy(string, dir, FILE_MAX); + + sl_dir= BLI_add_slash(string); if (sl_dir params->dir, tmpstr, sizeof(sfile->params->dir)); } diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 18dae972db4..520856a8d0b 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -28,6 +28,7 @@ #include "MEM_guardedalloc.h" #include "BLI_util.h" +#include "BLI_fileops.h" #include "BLI_string.h" #include "BKE_context.h" @@ -441,6 +442,26 @@ int BPY_run_python_script_space(const char *modulename, const char *func) #include "PIL_time.h" #endif +/* for use by BPY_run_ui_scripts only */ +static int bpy_import_module(char *modname, int reload) +{ + PyObject *mod= PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0); + if (mod) { + if (reload) { + PyObject *mod_orig= mod; + mod= PyImport_ReloadModule(mod); + Py_DECREF(mod_orig); + } + } + + if(mod) { + Py_DECREF(mod); /* could be NULL from reloading */ + return 0; + } else { + return -1; + } +} + /* XXX this is temporary, need a proper script registration system for 2.5 */ void BPY_run_ui_scripts(bContext *C, int reload) { @@ -453,10 +474,9 @@ void BPY_run_ui_scripts(bContext *C, int reload) char *dirname; char path[FILE_MAX]; char *dirs[] = {"ui", "io", NULL}; - int a; + int a, err; PyGILState_STATE gilstate; - PyObject *mod; PyObject *sys_path; gilstate = PyGILState_Ensure(); @@ -486,27 +506,32 @@ void BPY_run_ui_scripts(bContext *C, int reload) while((de = readdir(dir)) != NULL) { /* We could stat the file but easier just to let python * import it and complain if theres a problem */ + err = 0; - file_extension = strstr(de->d_name, ".py"); - - if(file_extension && file_extension[3] == '\0') { - BLI_strncpy(path, de->d_name, (file_extension - de->d_name) + 1); /* cut off the .py on copy */ - mod= PyImport_ImportModuleLevel(path, NULL, NULL, NULL, 0); - if (mod) { - if (reload) { - PyObject *mod_orig= mod; - mod= PyImport_ReloadModule(mod); - Py_DECREF(mod_orig); - } + if (de->d_name[0] == '.') { + /* do nothing, probably .svn */ + } + else if(de->d_type==DT_DIR) { + /* support packages */ + BLI_join_dirfile(path, dirname, de->d_name); + BLI_join_dirfile(path, path, "__init__.py"); + + if(BLI_exists(path)) { + bpy_import_module(de->d_name, reload); } + } else { + /* normal py files */ + file_extension = strstr(de->d_name, ".py"); - if(mod) { - Py_DECREF(mod); /* could be NULL from reloading */ - } else { - BPy_errors_to_report(NULL); - fprintf(stderr, "unable to import \"%s\" %s/%s\n", path, dirname, de->d_name); + if(file_extension && file_extension[3] == '\0') { + de->d_name[(file_extension - de->d_name) + 1] = '\0'; + bpy_import_module(de->d_name, reload); } + } + if(err==-1) { + BPy_errors_to_report(NULL); + fprintf(stderr, "unable to import %s/%s\n", dirname, de->d_name); } } From 62ffb81316bbae1c1bf286d72e729f623004a0b8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 18:51:25 +0000 Subject: [PATCH 271/512] d_type isnt a member of dirent on win32. --- source/blender/python/intern/bpy_interface.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 520856a8d0b..6a5d01d9466 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -511,9 +511,13 @@ void BPY_run_ui_scripts(bContext *C, int reload) if (de->d_name[0] == '.') { /* do nothing, probably .svn */ } +#ifndef __linux__ + else if( BLI_join_dirfile(path, dirname, de->d_name), S_ISDIR(BLI_exists(path))) { +#else else if(de->d_type==DT_DIR) { - /* support packages */ BLI_join_dirfile(path, dirname, de->d_name); +#endif + /* support packages */ BLI_join_dirfile(path, path, "__init__.py"); if(BLI_exists(path)) { From 4e9171e6f6f3b09d2faa50f790d2abff51082ea7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Jul 2009 19:36:56 +0000 Subject: [PATCH 272/512] binreloc wasnt working with cmake. --- blenderplayer/CMakeLists.txt | 4 ++-- extern/binreloc/CMakeLists.txt | 4 ++-- extern/binreloc/Makefile | 2 +- source/creator/CMakeLists.txt | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/blenderplayer/CMakeLists.txt b/blenderplayer/CMakeLists.txt index 5b13a5f4521..2d8fc6ff4b9 100644 --- a/blenderplayer/CMakeLists.txt +++ b/blenderplayer/CMakeLists.txt @@ -32,10 +32,10 @@ IF(WITH_QUICKTIME) ADD_DEFINITIONS(-DWITH_QUICKTIME) ENDIF(WITH_QUICKTIME) -IF(LINUX) +IF(CMAKE_SYSTEM_NAME MATCHES "Linux") ADD_DEFINITIONS(-DWITH_BINRELOC) INCLUDE_DIRECTORIES(${BINRELOC_INC}) -endif(LINUX) +ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dna.c diff --git a/extern/binreloc/CMakeLists.txt b/extern/binreloc/CMakeLists.txt index 78dc65d8112..7bdc93fc978 100644 --- a/extern/binreloc/CMakeLists.txt +++ b/extern/binreloc/CMakeLists.txt @@ -18,8 +18,8 @@ # All rights reserved. # -SET(INC ./include ${WINTAB_INC}) -ADD_DEFINITIONS(-DWITH_BINRELOC) +SET(INC ./include ) +ADD_DEFINITIONS(-DENABLE_BINRELOC) FILE(GLOB SRC *.c) BLENDERLIB(extern_binreloc "${SRC}" "${INC}") diff --git a/extern/binreloc/Makefile b/extern/binreloc/Makefile index d303ab3afcc..21343ab4803 100644 --- a/extern/binreloc/Makefile +++ b/extern/binreloc/Makefile @@ -27,7 +27,7 @@ DIR = $(OCGDIR)/extern/$(LIBNAME) include nan_definitions.mk -CPPFLAGS += -I./include +CPPFLAGS += -DENABLE_BINRELOC -I./include include nan_compile.mk diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index cd0d551211f..b3371678534 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -62,10 +62,10 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) -IF(LINUX) +IF(CMAKE_SYSTEM_NAME MATCHES "Linux") ADD_DEFINITIONS(-DWITH_BINRELOC) INCLUDE_DIRECTORIES(${BINRELOC_INC}) -endif(LINUX) +ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE(STATUS "Configuring blender") From b76009232eea8d299fa2bec52c44dc76872705fb Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 20 Jul 2009 00:02:03 +0000 Subject: [PATCH 273/512] 2.5 - Bugfixes * Fix for crash when holding down downarrow in the info-header search box. Was caused by badly written poll callback for file-browser. Thanks pidhash for noticing the error * Made add constraint operators work again from 3D-View. They were using the wrong context pointer when in the 3D-View, since the old one was only valid for the buttons-window. Now they check which window they're in. --- .../blender/editors/object/editconstraint.c | 20 +++++++++++++++---- source/blender/editors/space_file/file_ops.c | 17 +++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 477d04a818b..e3ec72b502c 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -1329,8 +1329,14 @@ static int object_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *ev /* dummy operator callback */ static int object_constraint_add_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; - + ScrArea *sa= CTX_wm_area(C); + Object *ob; + + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + if (!ob) return OPERATOR_CANCELLED; @@ -1372,8 +1378,14 @@ static int pose_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) /* dummy operator callback */ static int pose_constraint_add_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; - + ScrArea *sa= CTX_wm_area(C); + Object *ob; + + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + if (!ob) return OPERATOR_CANCELLED; diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index cd981b7b419..0bc2e310810 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -876,14 +876,17 @@ int file_delete_poll(bContext *C) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); struct direntry* file; - if(!sfile->params ) poll= 0; - - if (sfile->params->active_file < 0) { - poll= 0; - } else { - file = filelist_file(sfile->files, sfile->params->active_file); - if (file && S_ISDIR(file->type)) poll= 0; + if (sfile->params) { + if (sfile->params->active_file < 0) { + poll= 0; + } else { + file = filelist_file(sfile->files, sfile->params->active_file); + if (file && S_ISDIR(file->type)) poll= 0; + } } + else + poll= 0; + return poll; } From 4d0a6fee4af4be5877d2a69321913ad39039b76b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Jul 2009 10:24:53 +0000 Subject: [PATCH 274/512] cmake option to disable SDL, bpy_interface.c - change order of checking scripts to avoid calling stat on .py files. --- CMakeLists.txt | 9 ++++++--- source/blender/blenkernel/CMakeLists.txt | 7 ++++++- source/blender/blenlib/SConscript | 3 --- source/blender/python/intern/bpy_interface.c | 15 +++++++------- source/creator/CMakeLists.txt | 4 ++++ source/gameengine/GameLogic/CMakeLists.txt | 7 ++++++- source/gameengine/Ketsji/CMakeLists.txt | 21 ++++++-------------- 7 files changed, 35 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a4796c2eee9..47daa1e4b9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ OPTION(WITH_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ON) OPTION(WITH_DDS "Enable DDS Support" ON) OPTION(WITH_FFMPEG "Enable FFMPeg Support (http://ffmpeg.mplayerhq.hu/)" OFF) OPTION(WITH_PYTHON "Enable Embedded Python API" ON) +OPTION(WITH_SDL "Enable SDL for sound and joystick support" ON) OPTION(WITH_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org/)" OFF) OPTION(WITH_OPENAL "Enable OpenAL Support (http://www.openal.org)" ON) OPTION(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" OFF) @@ -133,9 +134,11 @@ IF(UNIX AND NOT APPLE) SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic") - FIND_PACKAGE(SDL) - SET(SDL_INC ${SDL_INCLUDE_DIR}) - SET(SDL_LIB ${SDL_LIBRARY}) + IF(WITH_SDL) + FIND_PACKAGE(SDL) + SET(SDL_INC ${SDL_INCLUDE_DIR}) + SET(SDL_LIB ${SDL_LIBRARY}) + ENDIF(WITH_SDL) FIND_PATH(OPENEXR_INC ImfXdr.h diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index ebe0ea74c28..92cc206667c 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -34,7 +34,6 @@ SET(INC ../../../extern/bullet2/src ../nodes ../../../extern/glew/include ../gpu ../makesrna ../../../intern/bsp/extern - ${SDL_INC} ${ZLIB_INC} ) @@ -55,6 +54,12 @@ IF(WITH_QUICKTIME) ADD_DEFINITIONS(-DWITH_QUICKTIME) ENDIF(WITH_QUICKTIME) +IF(WITH_SDL) + SET(INC ${INC} ${SDL_INC}) +ELSE(WITH_SDL) + ADD_DEFINITIONS(-DDISABLE_SDL) +ENDIF(WITH_SDL) + IF(WITH_FFMPEG) SET(INC ${INC} ${FFMPEG_INC}) ADD_DEFINITIONS(-DWITH_FFMPEG) diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript index e0411a6fc80..3d7d6b63e64 100644 --- a/source/blender/blenlib/SConscript +++ b/source/blender/blenlib/SConscript @@ -9,9 +9,6 @@ incs += ' ' + env['BF_FREETYPE_INC'] incs += ' ' + env['BF_ZLIB_INC'] defs = '' -if env['WITH_BF_SDL']: - incs += ' ' + env['BF_SDL_INC'] - if env['OURPLATFORM'] == 'linux2': cflags='-pthread' incs += ' ../../../extern/binreloc/include' diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 6a5d01d9466..04d70f5a758 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -511,6 +511,13 @@ void BPY_run_ui_scripts(bContext *C, int reload) if (de->d_name[0] == '.') { /* do nothing, probably .svn */ } + else if ((file_extension = strstr(de->d_name, ".py"))) { + /* normal py files? */ + if(file_extension && file_extension[3] == '\0') { + de->d_name[(file_extension - de->d_name) + 1] = '\0'; + bpy_import_module(de->d_name, reload); + } + } #ifndef __linux__ else if( BLI_join_dirfile(path, dirname, de->d_name), S_ISDIR(BLI_exists(path))) { #else @@ -523,14 +530,6 @@ void BPY_run_ui_scripts(bContext *C, int reload) if(BLI_exists(path)) { bpy_import_module(de->d_name, reload); } - } else { - /* normal py files */ - file_extension = strstr(de->d_name, ".py"); - - if(file_extension && file_extension[3] == '\0') { - de->d_name[(file_extension - de->d_name) + 1] = '\0'; - bpy_import_module(de->d_name, reload); - } } if(err==-1) { diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index b3371678534..35cb3e92b21 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -62,6 +62,10 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) +IF(NOT WITH_SDL) + ADD_DEFINITIONS(-DDISABLE_SDL) +ENDIF(NOT WITH_SDL) + IF(CMAKE_SYSTEM_NAME MATCHES "Linux") ADD_DEFINITIONS(-DWITH_BINRELOC) INCLUDE_DIRECTORIES(${BINRELOC_INC}) diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt index 7e2bc85bd1f..530664dce55 100644 --- a/source/gameengine/GameLogic/CMakeLists.txt +++ b/source/gameengine/GameLogic/CMakeLists.txt @@ -35,8 +35,13 @@ SET(INC ../../../intern/moto/include ../../../source/gameengine/Rasterizer ${PYTHON_INC} - ${SDL_INC} ) +IF(WITH_SDL) + SET(INC ${INC} ${SDL_INC}) +ELSE(WITH_SDL) + ADD_DEFINITIONS(-DDISABLE_SDL) +ENDIF(WITH_SDL) + BLENDERLIB(bf_logic "${SRC}" "${INC}") #env.BlenderLib ( 'bf_logic', sources, Split(incs), [], libtype=['game','player'], priority=[30, 110] ) diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index ee1ff2c6502..f703841c40b 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -26,20 +26,6 @@ FILE(GLOB SRC *.cpp) -#XXX disabled for 2.5 because of missing python -#SET(SRC -# ${SRC} -# ../../../source/blender/python/api2_2x/Mathutils.c -# ../../../source/blender/python/api2_2x/Geometry.c -# ../../../source/blender/python/api2_2x/constant.c -# ../../../source/blender/python/api2_2x/euler.c -# ../../../source/blender/python/api2_2x/matrix.c -# ../../../source/blender/python/api2_2x/quat.c -# ../../../source/blender/python/api2_2x/vector.c -# ../../../source/blender/python/api2_2x/bpy_internal_import.c -# ../../../source/blender/python/api2_2x/BGL.c -#) - SET(INC . ../../../source/kernel/gen_system @@ -77,8 +63,13 @@ SET(INC ../../../extern/solid ../../../extern/glew/include ${PYTHON_INC} - ${SDL_INC} ) +IF(WITH_SDL) + SET(INC ${INC} ${SDL_INC}) +ELSE(WITH_SDL) + ADD_DEFINITIONS(-DDISABLE_SDL) +ENDIF(WITH_SDL) + BLENDERLIB(bf_ketsji "${SRC}" "${INC}") #env.BlenderLib ( 'bf_ketsji', sources, Split(incs), [], libtype=['game','player'], priority=[25, 72], compileflags = cflags ) From ae7e321c8b810bade6cb5ee6d2e6b35d1f490c6f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 20 Jul 2009 10:43:41 +0000 Subject: [PATCH 275/512] 2.5 - Fixes to try and let C++ compilers not choke on DNA_anim_types.h --- source/blender/makesdna/DNA_anim_types.h | 53 ++++++++++++------------ 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index fed0c490014..cb1cd9e3ed8 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -63,7 +63,7 @@ typedef struct FModifier { /* Types of F-Curve modifier * WARNING: order here is important! */ -enum { +typedef enum eFModifier_Types { FMODIFIER_TYPE_NULL = 0, FMODIFIER_TYPE_GENERATOR, FMODIFIER_TYPE_FN_GENERATOR, @@ -79,7 +79,7 @@ enum { } eFModifier_Types; /* F-Curve Modifier Settings */ -enum { +typedef enum eFModifier_Flags { /* modifier is not able to be evaluated for some reason, and should be skipped (internal) */ FMODIFIER_FLAG_DISABLED = (1<<0), /* modifier's data is expanded (in UI) */ @@ -106,7 +106,7 @@ typedef struct FMod_Generator { } FMod_Generator; /* generator modes */ -enum { +typedef enum eFMod_Generator_Modes { FCM_GENERATOR_POLYNOMIAL = 0, FCM_GENERATOR_POLYNOMIAL_FACTORISED, } eFMod_Generator_Modes; @@ -115,7 +115,7 @@ enum { /* generator flags * - shared by Generator and Function Generator */ -enum { +typedef enum eFMod_Generator_Flags { /* generator works in conjunction with other modifiers (i.e. doesn't replace those before it) */ FCM_GENERATOR_ADDITIVE = (1<<0), } eFMod_Generator_Flags; @@ -142,7 +142,7 @@ typedef struct FMod_FunctionGenerator { } FMod_FunctionGenerator; /* 'function' generator types */ -enum { +typedef enum eFMod_Generator_Functions { FCM_GENERATOR_FN_SIN = 0, FCM_GENERATOR_FN_COS, FCM_GENERATOR_FN_TAN, @@ -181,7 +181,7 @@ typedef struct FMod_Cycles { } FMod_Cycles; /* cycling modes */ -enum { +typedef enum eFMod_Cycling_Modes { FCM_EXTRAPOLATE_NONE = 0, /* don't do anything */ FCM_EXTRAPOLATE_CYCLIC, /* repeat keyframe range as-is */ FCM_EXTRAPOLATE_CYCLIC_OFFSET, /* repeat keyframe range, but with offset based on gradient between values */ @@ -204,7 +204,7 @@ typedef struct FMod_Limits { } FMod_Limits; /* limiting flags */ -enum { +typedef enum eFMod_Limit_Flags { FCM_LIMIT_XMIN = (1<<0), FCM_LIMIT_XMAX = (1<<1), FCM_LIMIT_YMIN = (1<<2), @@ -217,14 +217,13 @@ typedef struct FMod_Noise { float strength; float phase; float pad; - + short depth; short modification; - } FMod_Noise; /* modification modes */ -enum { +typedef enum eFMod_Noise_Modifications { FCM_NOISE_MODIF_REPLACE = 0, /* Modify existing curve, matching it's shape */ FCM_NOISE_MODIF_ADD, /* Add noise to the curve */ FCM_NOISE_MODIF_SUBTRACT, /* Subtract noise from the curve */ @@ -280,7 +279,7 @@ typedef struct ChannelDriver { } ChannelDriver; /* driver type */ -enum { +typedef enum eDriver_Types { /* target values are averaged together */ DRIVER_TYPE_AVERAGE = 0, /* python expression/function relates targets */ @@ -290,7 +289,7 @@ enum { } eDriver_Types; /* driver flags */ -enum { +typedef enum eDriver_Flags { /* driver has invalid settings (internal flag) */ DRIVER_FLAG_INVALID = (1<<0), /* driver needs recalculation (set by depsgraph) */ @@ -346,7 +345,7 @@ typedef struct FCurve { /* user-editable flags/settings */ -enum { +typedef enum eFCurve_Flags { /* curve/keyframes are visible in editor */ FCURVE_VISIBLE = (1<<0), /* curve is selected for editing */ @@ -369,13 +368,13 @@ enum { } eFCurve_Flags; /* extrapolation modes (only simple value 'extending') */ -enum { +typedef enum eFCurve_Extend { FCURVE_EXTRAPOLATE_CONSTANT = 0, /* just extend min/max keyframe value */ FCURVE_EXTRAPOLATE_LINEAR, /* just extend gradient of segment between first segment keyframes */ } eFCurve_Extend; /* curve coloring modes */ -enum { +typedef enum eFCurve_Coloring { FCURVE_COLOR_AUTO_RAINBOW = 0, /* automatically determine color using rainbow (calculated at drawtime) */ FCURVE_COLOR_AUTO_RGB, /* automatically determine color using XYZ (array index) <-> RGB */ FCURVE_COLOR_CUSTOM, /* custom color */ @@ -465,7 +464,7 @@ typedef struct NlaStrip { } NlaStrip; /* NLA Strip Blending Mode */ -enum { +typedef enum eNlaStrip_Blend_Mode { NLASTRIP_MODE_REPLACE = 0, NLASTRIP_MODE_ADD, NLASTRIP_MODE_SUBTRACT, @@ -473,7 +472,7 @@ enum { } eNlaStrip_Blend_Mode; /* NLA Strip Extrpolation Mode */ -enum { +typedef enum eNlaStrip_Extrapolate_Mode { /* extend before first frame if no previous strips in track, and always hold+extend last frame */ NLASTRIP_EXTEND_HOLD = 0, /* only hold+extend last frame */ @@ -483,7 +482,7 @@ enum { } eNlaStrip_Extrapolate_Mode; /* NLA Strip Settings */ -enum { +typedef enum eNlaStrip_Flag { /* UI selection flags */ /* NLA strip is the active one in the track (also indicates if strip is being tweaked) */ NLASTRIP_FLAG_ACTIVE = (1<<0), @@ -517,7 +516,7 @@ enum { } eNlaStrip_Flag; /* NLA Strip Type */ -enum { +typedef enum eNlaStrip_Type { /* 'clip' - references an Action */ NLASTRIP_TYPE_CLIP = 0, /* 'transition' - blends between the adjacent strips */ @@ -547,7 +546,7 @@ typedef struct NlaTrack { } NlaTrack; /* settings for track */ -enum { +typedef enum eNlaTrack_Flag { /* track is the one that settings can be modified on, also indicates if track is being 'tweaked' */ NLATRACK_ACTIVE = (1<<0), /* track is selected in UI for relevant editing operations */ @@ -595,13 +594,13 @@ typedef struct KS_Path { } KS_Path; /* KS_Path->flag */ -enum { +typedef enum eKSP_Settings { /* entire array (not just the specified index) gets keyframed */ KSP_FLAG_WHOLE_ARRAY = (1<<0), } eKSP_Settings; /* KS_Path->groupmode */ -enum { +typedef enum eKSP_Grouping { /* path should be grouped using group name stored in path */ KSP_GROUP_NAMED = 0, /* path should not be grouped at all */ @@ -621,7 +620,7 @@ enum { * enum here defines the flags which define which templates are * required by a path before it can be used */ -enum { +typedef enum eKSP_TemplateTypes { KSP_TEMPLATE_OBJECT = (1<<0), /* #obj - selected object */ KSP_TEMPLATE_PCHAN = (1<<1), /* #pch - selected posechannel */ KSP_TEMPLATE_CONSTRAINT = (1<<2), /* #con - active only */ @@ -652,7 +651,7 @@ typedef struct KeyingSet { } KeyingSet; /* KeyingSet settings */ -enum { +typedef enum eKS_Settings { /* keyingset cannot be removed (and doesn't need to be freed) */ KEYINGSET_BUILTIN = (1<<0), /* keyingset does not depend on context info (i.e. paths are absolute) */ @@ -660,7 +659,7 @@ enum { } eKS_Settings; /* Flags for use by keyframe creation/deletion calls */ -enum { +typedef enum eInsertKeyFlags { INSERTKEY_NEEDED = (1<<0), /* only insert keyframes where they're needed */ INSERTKEY_MATRIX = (1<<1), /* insert 'visual' keyframes where possible/needed */ INSERTKEY_FAST = (1<<2), /* don't recalculate handles,etc. after adding key */ @@ -734,7 +733,7 @@ typedef struct AnimData { } AnimData; /* Animation Data settings (mostly for NLA) */ -enum { +typedef enum eAnimData_Flag { /* only evaluate a single track in the NLA */ ADT_NLA_SOLO_TRACK = (1<<0), /* don't use NLA */ @@ -756,7 +755,7 @@ enum { } eAnimData_Flag; /* Animation Data recalculation settings (to be set by depsgraph) */ -enum { +typedef enum eAnimData_Recalc { ADT_RECALC_DRIVERS = (1<<0), ADT_RECALC_ANIM = (1<<1), ADT_RECALC_ALL = (ADT_RECALC_DRIVERS|ADT_RECALC_ANIM), From 8bf9a8cb1e18dc784835db5fd869ad14469053a5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Jul 2009 11:30:27 +0000 Subject: [PATCH 276/512] Added error prints if the text's main is not set. --- source/blender/python/generic/bpy_internal_import.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index b8c17d71ac4..733576146b7 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -66,7 +66,10 @@ PyObject *bpy_text_import( char *name, int *found ) *found= 0; - if(!maggie) return NULL; + if(!maggie) { + printf("ERROR: bpy_import_main_set() was not called before running python. this is a bug.\n"); + return NULL; + } if (namelen>21-3) return NULL; /* we know this cant be importable, the name is too long for blender! */ @@ -114,6 +117,11 @@ PyObject *bpy_text_reimport( PyObject *module, int *found ) //XXX Main *maggie= bpy_import_main ? bpy_import_main:G.main; Main *maggie= bpy_import_main; + if(!maggie) { + printf("ERROR: bpy_import_main_set() was not called before running python. this is a bug.\n"); + return NULL; + } + *found= 0; /* get name, filename from the module itself */ From cc69f1301387ea920a225b6eb49283e3c03e1b06 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 20 Jul 2009 12:42:31 +0000 Subject: [PATCH 277/512] 2.5 - Constraints Editing + Keyframe Drawing Tweaks Constraints: * Adding constraints with targets should now work. -- (When no target is provided, the code to create a new target is not yet in place again yet) * Constraints can be added in Object and PoseModes again using the Ctrl-Shift-C hotkey. * All constraints can now be cleared from the active Object or selected Bones using the Ctrl-Alt-C hotkey. * Added warnings when adding constraints invalid for the current context, and removed the old add_constraint() function. * Buttons window updates correctly after adding keyframes now Keyframes Drawing: * Removed un-necessary extra function-call for RB-Tree implementation, by inlining a special one-off case. * Keyframe diamonds which are not within the viewable area are now not drawn (but filtering will still need to find them). --- source/blender/blenlib/intern/DLRB_tree.c | 48 +- .../editors/animation/keyframes_draw.c | 28 +- .../blender/editors/armature/armature_ops.c | 5 + .../blender/editors/object/editconstraint.c | 409 ++++-------------- source/blender/editors/object/object_intern.h | 2 + source/blender/editors/object/object_ops.c | 8 +- .../editors/space_buttons/space_buttons.c | 1 + .../editors/space_view3d/view3d_header.c | 2 +- 8 files changed, 125 insertions(+), 378 deletions(-) diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c index 766547cee05..af9774c6afd 100644 --- a/source/blender/blenlib/intern/DLRB_tree.c +++ b/source/blender/blenlib/intern/DLRB_tree.c @@ -161,7 +161,6 @@ static DLRBT_Node *get_uncle (DLRBT_Node *node) /* *********************************************** */ /* Tree Rotation Utilities */ -/* Left Rotation is only done for Right-Right Case, and Left-Right Case */ static void rotate_left (DLRBT_Tree *tree, DLRBT_Node *root) { DLRBT_Node **root_slot, *pivot; @@ -235,7 +234,6 @@ static void rotate_right (DLRBT_Tree *tree, DLRBT_Node *root) static void insert_check_1(DLRBT_Tree *tree, DLRBT_Node *node); static void insert_check_2(DLRBT_Tree *tree, DLRBT_Node *node); static void insert_check_3(DLRBT_Tree *tree, DLRBT_Node *node); -static void insert_check_4(DLRBT_Tree *tree, DLRBT_Node *node); /* ----- */ @@ -286,7 +284,7 @@ static void insert_check_2 (DLRBT_Tree *tree, DLRBT_Node *node) } } -/* W. 4) Perform rotation on sub-tree containing the 'new' node */ +/* W. 4+5) Perform rotation on sub-tree containing the 'new' node, then do any */ static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node) { DLRBT_Node *gp= get_grandparent(node); @@ -305,34 +303,30 @@ static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node) rotate_right(tree, node); node= node->right; } - // TODO: what about other cases? - /* fix old parent's color-tagging */ - insert_check_4(tree, node); + /* fix old parent's color-tagging, and perform rotation on the old parent in the + * opposite direction if needed for the current situation + * NOTE: in the code above, node pointer is changed to point to the old parent + */ + if (node) { + /* get 'new' grandparent (i.e. grandparent for old-parent (node)) */ + gp= get_grandparent(node); + + /* modify the coloring of the grandparent and parent so that they still satisfy the constraints */ + node->parent->tree_col= DLRBT_BLACK; + gp->tree_col= DLRBT_RED; + + /* if there are several nodes that all form a left chain, do a right rotation to correct this + * (or a rotation in the opposite direction if they all form a right chain) + */ + if ((node == node->parent->left) && (node->parent == gp->left)) + rotate_right(tree, gp); + else //if ((node == node->parent->right) && (node->parent == gp->right)) + rotate_left(tree, gp); + } } } -/* W. 5) Perform rotation in the opposite direction on the parent of the given node */ -static void insert_check_4 (DLRBT_Tree *tree, DLRBT_Node *node) -{ - DLRBT_Node *gp= get_grandparent(node); - - if (node == NULL) - return; - - /* modify the coloring of the grandparent and parent so that they still satisfy the constraints */ - node->parent->tree_col= DLRBT_BLACK; - gp->tree_col= DLRBT_RED; - - /* if there are several nodes that all form a left chain, do a right rotation to correct this - * (or a rotation in the opposite direction if they all form a right chain) - */ - if ((node == node->parent->left) && (node->parent == gp->left)) - rotate_right(tree, gp); - else /* ((node == node->parent->right) && (node->parent == gp->right)) */ - rotate_left(tree, gp); -} - /* ----- */ /* Balance the tree after the given element has been added to it diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 78ceb4a0149..2107e6e4252 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -445,28 +445,16 @@ static void draw_keylist(View2D *v2d, DLRBT_Tree *keys, DLRBT_Tree *blocks, floa /* draw keys */ if (keys) { for (ak= keys->first; ak; ak= ak->next) { + /* optimisation: if keyframe doesn't appear within 5 units (screenspace) in visible area, don't draw + * - this might give some improvements, since we current have to flip between view/region matrices + */ + if (IN_RANGE_INCL(ak->cfra, v2d->cur.xmin, v2d->cur.xmax) == 0) + continue; + /* draw using OpenGL - uglier but faster */ - // NOTE: a previous version of this didn't work nice for some intel cards + // NOTE1: a previous version of this didn't work nice for some intel cards + // NOTE2: if we wanted to go back to icons, these are icon = (ak->sel & SELECT) ? ICON_SPACE2 : ICON_SPACE3; draw_keyframe_shape(ak->cfra, ypos, xscale, 5.0f, (ak->sel & SELECT), KEYFRAME_SHAPE_BOTH); - -#if 0 // OLD CODE - //int sc_x, sc_y; - - /* get co-ordinate to draw at */ - //gla2DDrawTranslatePt(di, ak->cfra, ypos, &sc_x, &sc_y); - - /* draw using icons - old way which is slower but more proven */ - //if (ak->sel & SELECT) UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE2, 1.0f); - //else UI_icon_draw_aspect((float)sc_x-7, (float)sc_y-6, ICON_SPACE3, 1.0f); -#endif // OLD CODE -#if 0 // NEW NON-WORKING CODE - /* draw icon */ - // FIXME: this draws slightly wrong, as we need to apply some offset for icon, but that depends on scaling - // so for now disabled - //int icon = (ak->sel & SELECT) ? ICON_SPACE2 : ICON_SPACE3; - //UI_icon_draw_aspect(ak->cfra, ypos-6, icon, 1.0f); -#endif // NEW NON-WORKING CODE - } } diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index df32f452a38..a8a342451cc 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -251,6 +251,11 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_select_linked", LKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "POSE_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, "POSE_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + //WM_keymap_add_item(keymap, "POSE_OT_ik_add", IKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + //WM_keymap_add_item(keymap, "POSE_OT_ik_clear", IKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index e3ec72b502c..b0890f5858d 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -77,9 +77,6 @@ #include "object_intern.h" /* XXX */ -static void BIF_undo_push() {} -static void error() {} -static int okee() {return 0;} static int pupmenu() {return 0;} /* -------------- Get Active Constraint Data ---------------------- */ @@ -273,255 +270,6 @@ static void set_constraint_nth_target (bConstraint *con, Object *target, char su } } -/* context: active object in posemode, active channel, optional selected channel */ -void add_constraint (Scene *scene, View3D *v3d, short only_IK) -{ - Object *ob= OBACT, *obsel=NULL; - bPoseChannel *pchanact=NULL, *pchansel=NULL; - bConstraint *con=NULL; - Base *base; - short nr; - - /* paranoia checks */ - if ((ob==NULL) || (ob==scene->obedit)) - return; - - if ((ob->pose) && (ob->flag & OB_POSEMODE)) { - bArmature *arm= ob->data; - - /* find active channel */ - pchanact= get_active_posechannel(ob); - if (pchanact==NULL) - return; - - /* find selected bone */ - for (pchansel=ob->pose->chanbase.first; pchansel; pchansel=pchansel->next) { - if (pchansel != pchanact) { - if (pchansel->bone->flag & BONE_SELECTED) { - if (pchansel->bone->layer & arm->layer) - break; - } - } - } - } - - /* find selected object */ - for (base= FIRSTBASE; base; base= base->next) { - if ((TESTBASE(v3d, base)) && (base->object!=ob)) - obsel= base->object; - } - - /* the only_IK caller has checked for posemode! */ - if (only_IK) { - for (con= pchanact->constraints.first; con; con= con->next) { - if (con->type==CONSTRAINT_TYPE_KINEMATIC) break; - } - if (con) { - error("Pose Channel already has IK"); - return; - } - - if (pchansel) - nr= pupmenu("Add IK Constraint%t|To Active Bone%x10"); - else if (obsel) - nr= pupmenu("Add IK Constraint%t|To Active Object%x10"); - else - nr= pupmenu("Add IK Constraint%t|To New Empty Object%x10|Without Target%x11"); - } - else { - if (pchanact) { - if (pchansel) - nr= pupmenu("Add Constraint to Active Bone%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Stretch To%x7|%l|Action%x16|Script%x18"); - else if ((obsel) && (obsel->type==OB_CURVE)) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Follow Path%x6|Clamp To%x17|Stretch To%x7|%l|Action%x16|Script%x18"); - else if ((obsel) && (obsel->type==OB_MESH)) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Shrinkwrap%x22|Stretch To%x7|%l|Action%x16|Script%x18"); - else if (obsel) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Stretch To%x7|%l|Action%x16|Script%x18"); - else - nr= pupmenu("Add Constraint to New Empty Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Stretch To%x7|%l|Action%x16|Script%x18"); - } - else { - if ((obsel) && (obsel->type==OB_CURVE)) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Follow Path%x6|Clamp To%x17|%l|Action%x16|Script%x18"); - else if ((obsel) && (obsel->type==OB_MESH)) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Shrinkwrap%x22|%l|Action%x16|Script%x18"); - else if (obsel) - nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|%l|Action%x16|Script%x18"); - else - nr= pupmenu("Add Constraint to New Empty Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|%l|Action%x16|Script%x18"); - } - } - - if (nr < 1) return; - - /* handle IK separate */ - if (nr==10 || nr==11) { - /* ik - prevent weird chains... */ - if (pchansel) { - bPoseChannel *pchan= pchanact; - while (pchan) { - if (pchan==pchansel) break; - pchan= pchan->parent; - } - if (pchan) { - error("IK root cannot be linked to IK tip"); - return; - } - - pchan= pchansel; - while (pchan) { - if (pchan==pchanact) break; - pchan= pchan->parent; - } - if (pchan) { - error("IK tip cannot be linked to IK root"); - return; - } - } - - con = add_new_constraint(CONSTRAINT_TYPE_KINEMATIC); - BLI_addtail(&pchanact->constraints, con); - unique_constraint_name(con, &pchanact->constraints); - pchanact->constflag |= PCHAN_HAS_IK; /* for draw, but also for detecting while pose solving */ - if (nr==11) - pchanact->constflag |= PCHAN_HAS_TARGET; - if (proxylocked_constraints_owner(ob, pchanact)) - con->flag |= CONSTRAINT_PROXY_LOCAL; - } - else { - /* normal constraints - add data */ - if (nr==1) con = add_new_constraint(CONSTRAINT_TYPE_LOCLIKE); - else if (nr==2) con = add_new_constraint(CONSTRAINT_TYPE_ROTLIKE); - else if (nr==3) con = add_new_constraint(CONSTRAINT_TYPE_TRACKTO); - else if (nr==4) con = add_new_constraint(CONSTRAINT_TYPE_MINMAX); - else if (nr==5) con = add_new_constraint(CONSTRAINT_TYPE_LOCKTRACK); - else if (nr==6) { - Curve *cu= obsel->data; - cu->flag |= CU_PATH; - con = add_new_constraint(CONSTRAINT_TYPE_FOLLOWPATH); - } - else if (nr==7) con = add_new_constraint(CONSTRAINT_TYPE_STRETCHTO); - else if (nr==8) con = add_new_constraint(CONSTRAINT_TYPE_SIZELIKE); - else if (nr==13) con = add_new_constraint(CONSTRAINT_TYPE_LOCLIMIT); - else if (nr==14) con = add_new_constraint(CONSTRAINT_TYPE_ROTLIMIT); - else if (nr==15) con = add_new_constraint(CONSTRAINT_TYPE_SIZELIMIT); - else if (nr==16) { - /* TODO: add a popup-menu to display list of available actions to use (like for pyconstraints) */ - con = add_new_constraint(CONSTRAINT_TYPE_ACTION); - } - else if (nr==17) { - Curve *cu= obsel->data; - cu->flag |= CU_PATH; - con = add_new_constraint(CONSTRAINT_TYPE_CLAMPTO); - } - else if (nr==18) { - char *menustr; - int scriptint= 0; -#ifndef DISABLE_PYTHON - /* popup a list of usable scripts */ - menustr = buildmenu_pyconstraints(NULL, &scriptint); - scriptint = pupmenu(menustr); - MEM_freeN(menustr); - - /* only add constraint if a script was chosen */ - if (scriptint) { - /* add constraint */ - con = add_new_constraint(CONSTRAINT_TYPE_PYTHON); - validate_pyconstraint_cb(con->data, &scriptint); - - /* make sure target allowance is set correctly */ - BPY_pyconstraint_update(ob, con); - } -#endif - } - else if (nr==19) { - con = add_new_constraint(CONSTRAINT_TYPE_CHILDOF); - - /* if this constraint is being added to a posechannel, make sure - * the constraint gets evaluated in pose-space - */ - if (pchanact) { - con->ownspace = CONSTRAINT_SPACE_POSE; - con->flag |= CONSTRAINT_SPACEONCE; - } - } - else if (nr==20) con = add_new_constraint(CONSTRAINT_TYPE_TRANSFORM); - else if (nr==21) con = add_new_constraint(CONSTRAINT_TYPE_DISTLIMIT); - else if (nr==22) con = add_new_constraint(CONSTRAINT_TYPE_SHRINKWRAP); - - if (con==NULL) return; /* paranoia */ - - if (pchanact) { - BLI_addtail(&pchanact->constraints, con); - unique_constraint_name(con, &pchanact->constraints); - pchanact->constflag |= PCHAN_HAS_CONST; /* for draw */ - if (proxylocked_constraints_owner(ob, pchanact)) - con->flag |= CONSTRAINT_PROXY_LOCAL; - } - else { - BLI_addtail(&ob->constraints, con); - unique_constraint_name(con, &ob->constraints); - if (proxylocked_constraints_owner(ob, NULL)) - con->flag |= CONSTRAINT_PROXY_LOCAL; - } - } - - /* set the target */ - if (pchansel) { - set_constraint_nth_target(con, ob, pchansel->name, 0); - } - else if (obsel) { - set_constraint_nth_target(con, obsel, "", 0); - } - else if (ELEM4(nr, 11, 13, 14, 15)==0) { /* add new empty as target */ - Base *base= BASACT, *newbase; - Object *obt; - - obt= add_object(scene, OB_EMPTY); - /* set layers OK */ - newbase= BASACT; - newbase->lay= base->lay; - obt->lay= newbase->lay; - - /* transform cent to global coords for loc */ - if (pchanact) { - if (only_IK) - VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_tail); - else - VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_head); - } - else - VECCOPY(obt->loc, ob->obmat[3]); - - set_constraint_nth_target(con, obt, "", 0); - - /* restore, add_object sets active */ - BASACT= base; - base->flag |= SELECT; - } - - /* active flag */ - con->flag |= CONSTRAINT_ACTIVE; - for (con= con->prev; con; con= con->prev) - con->flag &= ~CONSTRAINT_ACTIVE; - - DAG_scene_sort(scene); // sort order of objects - - if (pchanact) { - ob->pose->flag |= POSE_RECALC; // sort pose channels - DAG_object_flush_update(scene, ob, OB_RECALC_DATA); // and all its relations - } - else - DAG_object_flush_update(scene, ob, OB_RECALC_OB); // and all its relations - - if (only_IK) - BIF_undo_push("Add IK Constraint"); - else - BIF_undo_push("Add Constraint"); - -} - /* ------------- Constraint Sanity Testing ------------------- */ /* checks validity of object pointers, and NULLs, @@ -1177,14 +925,24 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o } /* used by add constraint operators to add the constraint required */ -static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) +static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget) { Scene *scene= CTX_data_scene(C); - Object *ob = CTX_data_active_object(C); bPoseChannel *pchan= get_active_posechannel(ob); bConstraint *con; - int type= RNA_enum_get(op->ptr, "type"); - int setTarget= RNA_boolean_get(op->ptr, "set_targets"); + + /* check if constraint to be added is valid for the given constraints stack */ + if (type == CONSTRAINT_TYPE_NULL) { + return OPERATOR_CANCELLED; + } + if ( (type == CONSTRAINT_TYPE_RIGIDBODYJOINT) && (list != &ob->constraints) ) { + BKE_report(op->reports, RPT_ERROR, "Rigid Body Joint Constraint can only be added to Objects."); + return OPERATOR_CANCELLED; + } + if ( (type == CONSTRAINT_TYPE_KINEMATIC) && ((!pchan) || (list != &pchan->constraints)) ) { + BKE_report(op->reports, RPT_ERROR, "IK Constraint can only be added to Bones."); + return OPERATOR_CANCELLED; + } /* create a new constraint of the type requried, and add it to the active/given constraints list */ con = add_new_constraint(type); @@ -1295,103 +1053,64 @@ static int constraint_add_exec(bContext *C, wmOperator *op, ListBase *list) /* ------------------ */ -#if 0 // BUGGY -/* for object cosntraints, don't include NULL or IK for now */ -static int object_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) -{ - EnumPropertyItem *item; - uiPopupMenu *pup; - uiLayout *layout; - int i, totitem; - - pup= uiPupMenuBegin(C, "Add Constraint", 0); - layout= uiPupMenuLayout(pup); - - /* loop over the constraint-types as defined in the enum - * - code below is based on the code used for WM_menu_invoke() - */ - totitem= sizeof(&constraint_type_items[0]) / sizeof(EnumPropertyItem); - item= constraint_type_items; - - for (i=0; i < totitem; i++) { - if (ELEM(item[i].value, CONSTRAINT_TYPE_NULL, CONSTRAINT_TYPE_KINEMATIC) == 0) { - if (item[i].identifier[0]) - uiItemEnumO(layout, (char*)item[i].name, item[i].icon, "OBJECT_OT_constraint_add", "type", item[i].value); - else - uiItemS(layout); - } - } - - uiPupMenuEnd(C, pup); -} -#endif // BUGGY - /* dummy operator callback */ static int object_constraint_add_exec(bContext *C, wmOperator *op) { ScrArea *sa= CTX_wm_area(C); Object *ob; + int type= RNA_enum_get(op->ptr, "type"); + short with_targets= 0; + /* get active object from context */ if (sa->spacetype == SPACE_BUTS) ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; else ob= CTX_data_active_object(C); - if (!ob) + if (!ob) { + BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to."); return OPERATOR_CANCELLED; - - return constraint_add_exec(C, op, &ob->constraints); -} - -#if 0 // BUGGY -/* for bone constraints, don't include NULL for now */ -static int pose_constraint_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) -{ - EnumPropertyItem *item; - uiPopupMenu *pup; - uiLayout *layout; - int i, totitem; - - pup= uiPupMenuBegin(C, "Add Constraint", 0); - layout= uiPupMenuLayout(pup); - - /* loop over the constraint-types as defined in the enum - * - code below is based on the code used for WM_menu_invoke() - */ - totitem= sizeof(&constraint_type_items[0]) / sizeof(EnumPropertyItem); - item= constraint_type_items; - - for (i=0; i < totitem; i++) { - // TODO: can add some other conditions here... - if (item[i].value != CONSTRAINT_TYPE_NULL) { - if (item[i].identifier[0]) - uiItemEnumO(layout, (char*)item[i].name, item[i].icon, "POSE_OT_constraint_add", "type", item[i].value); - else - uiItemS(layout); - } } - - uiPupMenuEnd(C, pup); + + /* hack: set constraint targets from selected objects in context is allowed when + * operator name included 'with_targets', since the menu doesn't allow multiple properties + */ + if (strstr(op->idname, "with_targets")) + with_targets= 1; + + return constraint_add_exec(C, op, ob, &ob->constraints, type, with_targets); } -#endif // BUGGY /* dummy operator callback */ static int pose_constraint_add_exec(bContext *C, wmOperator *op) { ScrArea *sa= CTX_wm_area(C); Object *ob; + int type= RNA_enum_get(op->ptr, "type"); + short with_targets= 0; + /* get active object from context */ if (sa->spacetype == SPACE_BUTS) ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; else ob= CTX_data_active_object(C); - if (!ob) + if (!ob) { + BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to."); return OPERATOR_CANCELLED; + } + + /* hack: set constraint targets from selected objects in context is allowed when + * operator name included 'with_targets', since the menu doesn't allow multiple properties + */ + if (strstr(op->idname, "with_targets")) + with_targets= 1; - return constraint_add_exec(C, op, get_active_constraints(ob)); + return constraint_add_exec(C, op, ob, get_active_constraints(ob), type, with_targets); } +/* ------------------ */ + void OBJECT_OT_constraint_add(wmOperatorType *ot) { /* identifiers */ @@ -1400,7 +1119,26 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) ot->idname= "OBJECT_OT_constraint_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke;//object_constraint_add_invoke; + ot->invoke= WM_menu_invoke; + ot->exec= object_constraint_add_exec; + ot->poll= ED_operator_object_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); +} + +void OBJECT_OT_constraint_add_with_targets(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Constraint (with Targets)"; + ot->description = "Add a constraint to the active object, with target (where applicable) set to the selected Objects/Bones."; + ot->idname= "OBJECT_OT_constraint_add_with_targets"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; ot->exec= object_constraint_add_exec; ot->poll= ED_operator_object_active; @@ -1409,7 +1147,6 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) /* properties */ RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); - RNA_def_boolean(ot->srna, "set_targets", 0, "Set Targets", "Set target info for new constraints from context."); } void POSE_OT_constraint_add(wmOperatorType *ot) @@ -1420,7 +1157,26 @@ void POSE_OT_constraint_add(wmOperatorType *ot) ot->idname= "POSE_OT_constraint_add"; /* api callbacks */ - ot->invoke= WM_menu_invoke; //pose_constraint_add_invoke; + ot->invoke= WM_menu_invoke; + ot->exec= pose_constraint_add_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); +} + +void POSE_OT_constraint_add_with_targets(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Constraint (with Targets)"; + ot->description = "Add a constraint to the active bone, with target (where applicable) set to the selected Objects/Bones."; + ot->idname= "POSE_OT_constraint_add_with_targets"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; ot->exec= pose_constraint_add_exec; ot->poll= ED_operator_posemode; @@ -1429,6 +1185,5 @@ void POSE_OT_constraint_add(wmOperatorType *ot) /* properties */ RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); - RNA_def_boolean(ot->srna, "set_targets", 0, "Set Targets", "Set target info for new constraints from context."); } diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 99967858d8b..3feec87edca 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -102,7 +102,9 @@ void OBJECT_OT_modifier_mdef_bind(struct wmOperatorType *ot); /* editconstraint.c */ void OBJECT_OT_constraint_add(struct wmOperatorType *ot); +void OBJECT_OT_constraint_add_with_targets(struct wmOperatorType *ot); void POSE_OT_constraint_add(struct wmOperatorType *ot); +void POSE_OT_constraint_add_with_targets(struct wmOperatorType *ot); void OBJECT_OT_constraints_clear(struct wmOperatorType *ot); void POSE_OT_constraints_clear(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 4bc60a6a91b..b8fb5f43ea4 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -112,7 +112,9 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_mdef_bind); WM_operatortype_append(OBJECT_OT_constraint_add); + WM_operatortype_append(OBJECT_OT_constraint_add_with_targets); WM_operatortype_append(POSE_OT_constraint_add); + WM_operatortype_append(POSE_OT_constraint_add_with_targets); WM_operatortype_append(OBJECT_OT_constraints_clear); WM_operatortype_append(POSE_OT_constraints_clear); WM_operatortype_append(CONSTRAINT_OT_delete); @@ -143,7 +145,7 @@ void ED_keymap_object(wmWindowManager *wm) /* Note: this keymap works disregarding mode */ WM_keymap_add_item(keymap, "OBJECT_OT_editmode_toggle", TABKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_center_set", CKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_center_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0); /* Note: this keymap gets disabled in non-objectmode, */ keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0); @@ -158,8 +160,8 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0); - RNA_boolean_set(WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add", CKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "set_targets", 1); - WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, /*KM_CTRL|*/KM_ALT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_location_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_rotation_clear", RKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 9345a24b198..4a741f85d85 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -326,6 +326,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_GEOM_SELECT: + case ND_CONSTRAINT: ED_area_tag_redraw(sa); break; case ND_SHADING: diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 677d3c20de1..bdc6bdb5601 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1993,7 +1993,7 @@ static void view3d_edit_object_trackmenu(bContext *C, uiLayout *layout, void *ar static void view3d_edit_object_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiItemBooleanO(layout, NULL, 0, "OBJECT_OT_constraint_add", "set_targets", 1); // XXX it'd be better to have the version which sets links... + uiItemO(layout, NULL, 0, "OBJECT_OT_constraint_add_with_targets"); uiItemO(layout, NULL, 0, "OBJECT_OT_constraints_clear"); } From 33bfd7397b8b0031bd2cf46d2037a8da4ef40888 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Jul 2009 16:21:55 +0000 Subject: [PATCH 278/512] BGE Button types panel, can edit existing buttons but not add new ones yet. World Physics panel too though Im not sure if we'll eventually move this into another struct. --- release/ui/buttons_world.py | 21 ++++++ release/ui/space_logic.py | 25 +++++++- source/blender/blenkernel/BKE_property.h | 1 + source/blender/blenkernel/intern/property.c | 64 ++++++++++++++++--- .../editors/space_logic/logic_buttons.c | 6 +- .../editors/space_logic/logic_window.c | 4 +- source/blender/makesdna/DNA_property_types.h | 7 +- source/blender/makesrna/intern/rna_object.c | 2 +- source/blender/makesrna/intern/rna_property.c | 24 ++++++- source/blender/makesrna/intern/rna_world.c | 32 ++++++++++ 10 files changed, 165 insertions(+), 21 deletions(-) diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 6e233f86765..0f16c847c5d 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -175,6 +175,26 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel): col.row().itemR(ao, "blend_mode", expand=True) col.row().itemR(ao, "color", expand=True) col.itemR(ao, "energy") + +class WORLD_PT_game(WorldButtonsPanel): + __label__ = "Game Settings" + + def draw(self, context): + layout = self.layout + world = context.world + + flow = layout.column_flow() + flow.itemR(world, "physics_engine") + flow.itemR(world, "physics_gravity") + + flow.itemR(world, "game_fps") + flow.itemR(world, "game_logic_step_max") + flow.itemR(world, "game_physics_substep") + flow.itemR(world, "game_physics_step_max") + + flow.itemR(world, "game_use_occlusion_culling", text="Enable Occlusion Culling") + flow.itemR(world, "game_occlusion_culling_resolution") + bpy.types.register(WORLD_PT_context_world) bpy.types.register(WORLD_PT_preview) @@ -183,3 +203,4 @@ bpy.types.register(WORLD_PT_ambient_occlusion) bpy.types.register(WORLD_PT_mist) bpy.types.register(WORLD_PT_stars) bpy.types.register(WORLD_PT_color_correction) +bpy.types.register(WORLD_PT_game) diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index f862f6e2667..bb7f22c7c5e 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -75,7 +75,7 @@ class LOGIC_PT_collision_bounds(bpy.types.Panel): def draw(self, context): layout = self.layout - ob = context.scene.objects[0] + ob = context.active_object game = ob.game flow = layout.column_flow() @@ -84,5 +84,28 @@ class LOGIC_PT_collision_bounds(bpy.types.Panel): flow.itemR(game, "collision_compound") flow.itemR(game, "collision_margin") +class LOGIC_PT_properties(bpy.types.Panel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "Properties" + + def poll(self, context): + ob = context.active_object + return ob and ob.game + + def draw(self, context): + layout = self.layout + + ob = context.active_object + game = ob.game + + for prop in game.properties: + flow = layout.row() + flow.itemR(prop, "name", text="") + flow.itemR(prop, "type", text="") + flow.itemR(prop, "value", text="") # we dont care about the type. rna will display correctly + flow.itemR(prop, "debug") + bpy.types.register(LOGIC_PT_physics) bpy.types.register(LOGIC_PT_collision_bounds) +bpy.types.register(LOGIC_PT_properties) diff --git a/source/blender/blenkernel/BKE_property.h b/source/blender/blenkernel/BKE_property.h index 6af1deda727..78a9ecddaac 100644 --- a/source/blender/blenkernel/BKE_property.h +++ b/source/blender/blenkernel/BKE_property.h @@ -41,6 +41,7 @@ struct bProperty *copy_property(struct bProperty *prop); void copy_properties(struct ListBase *lbn, struct ListBase *lbo); void init_property(struct bProperty *prop); struct bProperty *new_property(int type); +void unique_property(struct bProperty *first, struct bProperty *prop, int force); struct bProperty *get_ob_property(struct Object *ob, char *name); void set_ob_property(struct Object *ob, struct bProperty *propc); int compare_property(struct bProperty *prop, char *str); diff --git a/source/blender/blenkernel/intern/property.c b/source/blender/blenkernel/intern/property.c index 261b58454bd..5cae527957b 100644 --- a/source/blender/blenkernel/intern/property.c +++ b/source/blender/blenkernel/intern/property.c @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include @@ -99,25 +100,18 @@ void init_property(bProperty *prop) if(prop->poin && prop->poin != &prop->data) MEM_freeN(prop->poin); prop->poin= 0; - prop->otype= prop->type; prop->data= 0; switch(prop->type) { case GPROP_BOOL: - prop->poin= &prop->data; - break; case GPROP_INT: - prop->poin= &prop->data; - break; case GPROP_FLOAT: + case GPROP_TIME: prop->poin= &prop->data; break; case GPROP_STRING: prop->poin= MEM_callocN(MAX_PROPSTRING, "property string"); break; - case GPROP_TIME: - prop->poin= &prop->data; - break; } } @@ -136,6 +130,60 @@ bProperty *new_property(int type) return prop; } +/* used by unique_property() only */ +static bProperty *get_property__internal(bProperty *first, bProperty *self, const char *name) +{ + bProperty *p; + for(p= first; p; p= p->next) { + if (p!=self && (strcmp(p->name, name)==0)) + return p; + } + return NULL; +} +void unique_property(bProperty *first, bProperty *prop, int force) +{ + bProperty *p; + + /* set the first if its not set */ + if(first==NULL) { + first= prop; + while(first->prev) { + first= first->prev; + } + } + + if(force) { + /* change other names to make them unique */ + while((p = get_property__internal(first, prop, prop->name))) { + unique_property(first, p, 0); + } + }else { + /* change our own name until its unique */ + if(get_property__internal(first, prop, prop->name)) { + /* there is a collision */ + char new_name[sizeof(prop->name)]; + char base_name[sizeof(prop->name)]; + char num[sizeof(prop->name)]; + int i= 0; + + /* strip numbers */ + strcpy(base_name, prop->name); + for(i= strlen(base_name)-1; (i>=0 && isdigit(base_name[i])); i--) { + base_name[i]= '\0'; + } + i= 0; + + do { /* ensure we have enough chars for the new number in the name */ + sprintf(num, "%d", i++); + BLI_strncpy(new_name, base_name, sizeof(prop->name) - strlen(num)); + strcat(new_name, num); + } while(get_property__internal(first, prop, new_name)); + + strcpy(prop->name, new_name); + } + } +} + bProperty *get_ob_property(Object *ob, char *name) { bProperty *prop; diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index b082d5d6ae2..db6922f304c 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -66,6 +66,7 @@ #include "logic_intern.h" +#if 0 static void do_logic_panel_events(bContext *C, void *arg, int event) { @@ -96,12 +97,12 @@ static void logic_panel_view_properties(const bContext *C, Panel *pa) uiBlockSetHandleFunc(block, do_logic_panel_events, NULL); } - +#endif void logic_buttons_register(ARegionType *art) { PanelType *pt; - +#if 0 pt= MEM_callocN(sizeof(PanelType), "spacetype logic panel properties"); strcpy(pt->idname, "LOGIC_PT_properties"); strcpy(pt->label, "Logic Properties"); @@ -113,6 +114,7 @@ void logic_buttons_register(ARegionType *art) strcpy(pt->label, "View Properties"); pt->draw= logic_panel_view_properties; BLI_addtail(&art->paneltypes, pt); +#endif } diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index 55e21561c34..ab4574d5940 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -393,7 +393,7 @@ void do_logic_buts(bContext *C, void *arg, int event) BLI_addtail(&ob->prop, prop); ED_undo_push(C, "Add property"); break; - +#if 0 // XXX Now done in python case B_CHANGE_PROP: prop= ob->prop.first; while(prop) { @@ -403,7 +403,7 @@ void do_logic_buts(bContext *C, void *arg, int event) prop= prop->next; } break; - +#endif case B_ADD_SENS: for(ob=G.main->object.first; ob; ob=ob->id.next) { if(ob->scaflag & OB_ADDSENS) { diff --git a/source/blender/makesdna/DNA_property_types.h b/source/blender/makesdna/DNA_property_types.h index 7cc365a9ebc..af79b2e0a22 100644 --- a/source/blender/makesdna/DNA_property_types.h +++ b/source/blender/makesdna/DNA_property_types.h @@ -39,12 +39,9 @@ typedef struct bProperty { struct bProperty *next, *prev; char name[32]; - short type, otype; /* otype is for buttons, when a property type changes */ + short type, flag; int data; /* data should be 4 bytes to store int,float stuff */ - int old; /* old is for simul */ - short flag, pad; - void *poin; - void *oldpoin; /* oldpoin is for simul */ + void *poin; /* references data unless its a string which is malloc'd */ } bProperty; diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 05a60f3c0f9..32a97d2c86a 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -705,7 +705,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "properties", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "prop", NULL); - RNA_def_property_struct_type(prop, "GameProperty"); + RNA_def_property_struct_type(prop, "GameProperty"); /* rna_property.c */ RNA_def_property_ui_text(prop, "Properties", "Game engine properties."); prop= RNA_def_property(srna, "show_sensors", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_property.c b/source/blender/makesrna/intern/rna_property.c index a840552b86f..a1fcbac274e 100644 --- a/source/blender/makesrna/intern/rna_property.c +++ b/source/blender/makesrna/intern/rna_property.c @@ -33,6 +33,8 @@ #ifdef RNA_RUNTIME +#include "BKE_property.h" + static StructRNA* rna_GameProperty_refine(struct PointerRNA *ptr) { bProperty *property= (bProperty*)ptr->data; @@ -67,6 +69,24 @@ static void rna_GameFloatProperty_value_set(PointerRNA *ptr, float value) *(float*)(&prop->data)= value; } +static void rna_GameProperty_type_set(PointerRNA *ptr, int value) +{ + bProperty *prop= (bProperty*)(ptr->data); + + if(prop->type != value) { + prop->type= value; + init_property(prop); + } +} + +static void rna_GameProperty_name_set(PointerRNA *ptr, const char *value) +{ + bProperty *prop= (bProperty*)(ptr->data); + BLI_strncpy(prop->name, value, sizeof(prop->name)); + unique_property(NULL, prop, 1); +} + + #else void RNA_def_gameproperty(BlenderRNA *brna) @@ -89,14 +109,14 @@ void RNA_def_gameproperty(BlenderRNA *brna) RNA_def_struct_refine_func(srna, "rna_GameProperty_refine"); prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* must be unique */ RNA_def_property_ui_text(prop, "Name", "Available as as GameObject attributes in the game engines python api"); RNA_def_struct_name_property(srna, prop); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_GameProperty_name_set"); prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, gameproperty_type_items); RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_enum_funcs(prop, NULL, "rna_GameProperty_type_set", NULL); prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PROP_DEBUG); diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index c93d18d4017..773037176de 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -422,6 +422,38 @@ void RNA_def_world(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle."); RNA_def_property_update(prop, NC_WORLD, NULL); + /* game settings */ + /* should go in a fake substruct however not sure if they move about */ + prop= RNA_def_property(srna, "game_fps", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "ticrate"); + RNA_def_property_range(prop, 1, 120); + RNA_def_property_ui_text(prop, "Frames Per Second", "The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate."); + + prop= RNA_def_property(srna, "game_logic_step_max", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "maxlogicstep"); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Max Logic Steps", "The maxmimum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics."); + + prop= RNA_def_property(srna, "game_physics_substep", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "physubstep"); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Physics Sub Steps", "The maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime."); + + prop= RNA_def_property(srna, "game_physics_step_max", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "maxphystep"); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Max Physics Steps", "The number of simulation substep per physic timestep, higher value give better physics precision."); + + prop= RNA_def_property(srna, "game_use_occlusion_culling", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_DBVT_CULLING); + RNA_def_property_ui_text(prop, "Enabled", "Use optimized Bullet DBVT tree for view frustrum and occlusion culling"); + + prop= RNA_def_property(srna, "game_occlusion_culling_resolution", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "occlusionRes"); + RNA_def_property_range(prop, 128, 1024); + RNA_def_property_ui_text(prop, "Occlusion Resolution", "The size of the occlusion buffer in pixel, use higher value for better precsion (slower)."); + + /* physics */ prop= RNA_def_property(srna, "physics_engine", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "physicsEngine"); From 587d408f611757684015270448e87e16e1d8a140 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Jul 2009 16:39:16 +0000 Subject: [PATCH 279/512] patch from William Cleaned up force fields panel, as well as the other fixes (sculpt, lamps) --- release/ui/buttons_data_lamp.py | 95 +++++++---- release/ui/buttons_physics_field.py | 173 +++++++++++---------- release/ui/space_view3d.py | 74 --------- release/ui/space_view3d_toolbar.py | 91 ++++++++++- source/blender/editors/screen/screen_ops.c | 2 +- source/blender/makesrna/intern/rna_lamp.c | 2 +- 6 files changed, 244 insertions(+), 193 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index cf0ede8ec3b..0232c18a258 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -47,8 +47,10 @@ class DATA_PT_lamp(DataButtonsPanel): layout = self.layout lamp = context.lamp - - layout.itemR(lamp, "type") + + split = layout.split(percentage=0.2) + split.itemL(text="Type:") + split.itemR(lamp, "type", text="") split = layout.split() @@ -64,7 +66,9 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "diffuse") if lamp.type in ('POINT', 'SPOT'): - sub.itemR(lamp, "falloff_type") + split = sub.split(percentage=0.3) + split.itemL(text="Falloff:") + split.itemR(lamp, "falloff_type", text="") sub.itemR(lamp, "sphere") if (lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED'): @@ -81,47 +85,75 @@ class DATA_PT_lamp(DataButtonsPanel): sub.itemR(lamp, "size", text="Size X") sub.itemR(lamp, "size_y") -class DATA_PT_sunsky(DataButtonsPanel): - __idname__ = "DATA_PT_sunsky" - __label__ = "Sun/Sky" +class DATA_PT_sky(DataButtonsPanel): + __idname__ = "DATA_PT_sky" + __label__ = "Sky" def poll(self, context): lamp = context.lamp return (lamp and lamp.type == 'SUN') + + def draw_header(self, context): + layout = self.layout + lamp = context.lamp.sky + + layout.itemR(lamp, "sky", text="") def draw(self, context): layout = self.layout lamp = context.lamp.sky - row = layout.row() - row.itemR(lamp, "sky") - row.itemR(lamp, "atmosphere") + layout.active = lamp.sky - row = layout.row() - row.active = lamp.sky or lamp.atmosphere - row.itemR(lamp, "atmosphere_turbidity", text="Turbidity") - split = layout.split() - col = split.column() - sub = col.column() - sub.active = lamp.sky - sub.itemR(lamp, "sky_blend_type", text="Blend Type") - sub.itemR(lamp, "sky_blend") - sub.itemR(lamp, "sky_color_space", text="Color Space") - sub.itemR(lamp, "sky_exposure") - sub.itemR(lamp, "horizon_brightness", text="Hor Bright") - sub.itemR(lamp, "spread", text="Hor Spread") - sub.itemR(lamp, "sun_brightness", text="Sun Bright") - sub.itemR(lamp, "sun_size") - sub.itemR(lamp, "backscattered_light", text="Back Light") + + col.itemL(text="Colors:") + col.itemR(lamp, "sky_blend_type", text="Blend Type") + col.itemR(lamp, "sky_blend") + col.itemR(lamp, "sky_color_space", text="Color Space") + col.itemR(lamp, "sky_exposure", text="Exposure") + + col = split.column() + col.itemL(text="Horizon:") + col.itemR(lamp, "horizon_brightness", text="Brightness") + col.itemR(lamp, "spread", text="Spread") + col.itemL(text="Sun:") + col.itemR(lamp, "sun_brightness", text="Brightness") + col.itemR(lamp, "sun_size", text="Size") + col.itemR(lamp, "backscattered_light", text="Back Light") + + + +class DATA_PT_atmosphere(DataButtonsPanel): + __idname__ = "DATA_PT_atmosphere" + __label__ = "Atmosphere" + + def poll(self, context): + lamp = context.lamp + return (lamp and lamp.type == 'SUN') + + def draw_header(self, context): + layout = self.layout + lamp = context.lamp.sky + + layout.itemR(lamp, "atmosphere", text="") + + def draw(self, context): + layout = self.layout + lamp = context.lamp.sky + + layout.active = lamp.atmosphere + + split = layout.split() sub = split.column() - sub.active = lamp.atmosphere - sub.itemR(lamp, "sun_intensity", text="Sun Intens") - sub.itemR(lamp, "atmosphere_inscattering", text="Inscattering") - sub.itemR(lamp, "atmosphere_extinction", text="Extinction") - sub.itemR(lamp, "atmosphere_distance_factor", text="Distance") + sub.itemR(lamp, "atmosphere_turbidity", text="Turbidity") + sub.itemR(lamp, "sun_intensity", text="Sun Intensity") + sub = split.column() + sub.itemR(lamp, "atmosphere_inscattering", text="Inscattering", slider=True) + sub.itemR(lamp, "atmosphere_extinction", text="Extinction", slider=True) + sub.itemR(lamp, "atmosphere_distance_factor", text="Distance") class DATA_PT_shadow(DataButtonsPanel): __idname__ = "DATA_PT_shadow" @@ -252,7 +284,8 @@ bpy.types.register(DATA_PT_context_lamp) bpy.types.register(DATA_PT_preview) bpy.types.register(DATA_PT_lamp) bpy.types.register(DATA_PT_shadow) -bpy.types.register(DATA_PT_sunsky) +bpy.types.register(DATA_PT_sky) +bpy.types.register(DATA_PT_atmosphere) bpy.types.register(DATA_PT_spot) bpy.types.register(DATA_PT_falloff_curve) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 88636108475..c2ee744c08b 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -21,118 +21,129 @@ class PHYSICS_PT_field(PhysicButtonsPanel): #layout.active = field.enabled + split = layout.split(percentage=0.3) + + split.itemL(text="Type:") + split.itemR(field, "type", text="" + ) + split = layout.split() - col = split.column(align=True) - col.itemL(text="Type:") - col.itemR(field, "type", text="") - colsub = split.column(align=True) + + sub = split.column() if field.type == "GUIDE": - colsub = col.column() - colsub.itemL(text="blabla") - colsub.itemR(field, "guide_path_add") + sub = col.column() + sub.itemR(field, "guide_path_add") if field.type == "WIND": - col.itemR(field, "strength") - col.itemR(field, "noise") - col.itemR(field, "seed") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub = split.column() + sub.itemR(field, "noise") + sub.itemR(field, "seed") + if field.type == "VORTEX": - col.itemR(field, "strength") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub = split.column() + sub.itemL(text="") if field.type in ("SPHERICAL", "CHARGE", "LENNARDJ"): - col.itemR(field, "strength") - colsub.itemL(text="") - colsub.itemR(field, "surface") - colsub.itemR(field, "planar") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub = split.column() + sub.itemR(field, "planar") + sub.itemR(field, "surface") if field.type == "MAGNET": - col.itemR(field, "strength") - colsub.itemL(text="") - colsub.itemR(field, "planar") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub = split.column() + sub.itemR(field, "planar") if field.type == "HARMONIC": - col.itemR(field, "strength") - col.itemR(field, "harmonic_damping", text="Damping") - colsub.itemL(text="") - colsub.itemR(field, "surface") - colsub.itemR(field, "planar") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub.itemR(field, "harmonic_damping", text="Damping") + sub = split.column() + sub.itemR(field, "surface") + sub.itemR(field, "planar") if field.type == "TEXTURE": - col.itemR(field, "strength") - col.itemR(field, "texture", text="") - col.itemL(text="Texture Mode:") - col.itemR(field, "texture_mode", text="") - col.itemR(field, "texture_nabla") - colsub.itemL(text="") - colsub.itemR(field, "use_coordinates") - colsub.itemR(field, "root_coordinates") - colsub.itemR(field, "force_2d") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") - colsub.itemL(text="") + sub.itemR(field, "strength") + sub.itemR(field, "texture", text="") + sub.itemR(field, "texture_mode") + sub.itemR(field, "texture_nabla") + sub = split.column() + sub.itemR(field, "use_coordinates") + sub.itemR(field, "root_coordinates") + sub.itemR(field, "force_2d") if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET"): - col.itemL(text="Fall-Off:") - col.itemR(field, "falloff_type", text="") - col.itemR(field, "positive_z", text="Positive Z") - col.itemR(field, "use_min_distance", text="Use Minimum") - col.itemR(field, "use_max_distance", text="Use Maximum") - colsub.itemR(field, "falloff_power", text="Power") - colsub1 = colsub.column() + + + layout.itemS() + layout.itemL(text="Falloff:") + layout.itemR(field, "falloff_type", expand=True) + + row = layout.row() + row.itemR(field, "falloff_power", text="Power") + row.itemR(field, "positive_z", text="Positive Z") + + split = layout.split() + sub = split.column() + + sub.itemR(field, "use_min_distance", text="Minimum") + colsub1 = sub.column() colsub1.active = field.use_min_distance colsub1.itemR(field, "minimum_distance", text="Distance") - colsub2 = colsub.column() + + sub = split.column() + + sub.itemR(field, "use_max_distance", text="Maximum") + colsub2 = sub.column() colsub2.active = field.use_max_distance colsub2.itemR(field, "maximum_distance", text="Distance") if field.falloff_type == "CONE": - col.itemL(text="") - col.itemL(text="Angular:") - col.itemR(field, "use_radial_min", text="Use Minimum") - col.itemR(field, "use_radial_max", text="Use Maximum") - colsub.itemL(text="") - colsub.itemR(field, "radial_falloff", text="Power") - colsub1 = colsub.column() + layout.itemS() + layout.itemL(text="Angular:") + + row = layout.row() + row.itemR(field, "radial_falloff", text="Power") + row.itemL(text="") + + split = layout.split() + sub = split.column() + + sub.itemR(field, "use_radial_min", text="Minimum") + colsub1 = sub.column() colsub1.active = field.use_radial_min colsub1.itemR(field, "radial_minimum", text="Angle") - colsub2 = colsub.column() + + sub = split.column() + + sub.itemR(field, "use_radial_max", text="Maximum") + colsub2 = sub.column() colsub2.active = field.use_radial_max colsub2.itemR(field, "radial_maximum", text="Angle") if field.falloff_type == "TUBE": - col.itemL(text="") - col.itemL(text="Radial:") - col.itemR(field, "use_radial_min", text="Use Minimum") - col.itemR(field, "use_radial_max", text="Use Maximum") - colsub.itemL(text="") - colsub.itemR(field, "radial_falloff", text="Power") - colsub1 = colsub.column() + + layout.itemS() + layout.itemL(text="Radial:") + row = layout.row() + row.itemR(field, "radial_falloff", text="Power") + row.itemL(text="") + + split = layout.split() + sub = split.column() + + sub.itemR(field, "use_radial_min", text="Minimum") + colsub1 = sub.column() colsub1.active = field.use_radial_min colsub1.itemR(field, "radial_minimum", text="Distance") - colsub2 = colsub.column() + + sub = split.column() + + sub.itemR(field, "use_radial_max", text="Maximum") + colsub2 = sub.column() colsub2.active = field.use_radial_max colsub2.itemR(field, "radial_maximum", text="Distance") diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index 9d4994b9793..e28fdd6641f 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -170,85 +170,11 @@ class VIEW3D_PT_background_image(bpy.types.Panel): col.itemR(bg, "x_offset", text="X") col.itemR(bg, "y_offset", text="Y") -class VIEW3D_PT_sculpt(bpy.types.Panel): - __space_type__ = "VIEW_3D" - __region_type__ = "UI" - __label__ = "Sculpt" - def poll(self, context): - return context.sculpt_object - - def draw(self, context): - sculpt = context.scene.tool_settings.sculpt - - split = self.layout.split() - - col = split.column() - col.itemL(text="Symmetry") - row = col.row(align=True) - row.itemR(sculpt, "symmetry_x", text="X", toggle=True) - row.itemR(sculpt, "symmetry_y", text="Y", toggle=True) - row.itemR(sculpt, "symmetry_z", text="Z", toggle=True) - - col = split.column() - col.itemL(text="Lock Axis") - row = col.row(align=True) - row.itemR(sculpt, "lock_x", text="X", toggle=True) - row.itemR(sculpt, "lock_y", text="Y", toggle=True) - row.itemR(sculpt, "lock_z", text="Z", toggle=True) - -class VIEW3D_PT_brush(bpy.types.Panel): - __space_type__ = "VIEW_3D" - __region_type__ = "UI" - __label__ = "Brush" - - def brush_src(self, context): - ts = context.scene.tool_settings - if context.sculpt_object: - return ts.sculpt - elif context.vpaint_object: - return ts.vpaint - elif context.wpaint_object: - return ts.wpaint - return False - - def poll(self, context): - return self.brush_src(context) - - def draw(self, context): - src = self.brush_src(context) - brush = src.brush - layout = self.layout - - layout.split().row().template_ID(src, "brush") - - split = layout.split() - col = split.column(align=True) - col.itemR(brush, "size", slider=True) - if context.wpaint_object: - col.itemR(context.scene.tool_settings, "vertex_group_weight", text="Weight", slider=True) - col.itemR(brush, "strength", slider=True) - - if context.sculpt_object: - layout.split().row().itemR(brush, "sculpt_tool") - - split = layout.split() - col = split.column() - col.itemR(brush, "airbrush") - col.itemR(brush, "anchored") - col.itemR(brush, "rake") - col = split.column() - col.itemR(brush, "space") - col.itemR(brush, "spacing") - - split = layout.split() - split.template_curve_mapping(brush.curve) bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) bpy.types.register(VIEW3D_HT_header) -bpy.types.register(VIEW3D_PT_sculpt) -bpy.types.register(VIEW3D_PT_brush) bpy.types.register(VIEW3D_PT_3dview_properties) bpy.types.register(VIEW3D_PT_3dview_display) bpy.types.register(VIEW3D_PT_background_image) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index 1580052f697..f4a2682f111 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -179,14 +179,94 @@ class View3DPanel(bpy.types.Panel): __region_type__ = "TOOLS" __context__ = "sculptmode" -class VIEW3D_PT_tools_sculptmode(View3DPanel): - __idname__ = "VIEW3D_PT_tools_sculptmode" - __label__ = "Sculpt Tools" +#class VIEW3D_PT_tools_sculptmode(View3DPanel): +# __idname__ = "VIEW3D_PT_tools_sculptmode" +# __label__ = "Sculpt Tools" +# +# def draw(self, context): +# layout = self.layout +# +# layout.row().itemO("sculpt.radial_control") + +class VIEW3D_PT_tools_brush(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "TOOLS" + __label__ = "Brush" + + def brush_src(self, context): + ts = context.scene.tool_settings + if context.sculpt_object: + return ts.sculpt + elif context.vpaint_object: + return ts.vpaint + elif context.wpaint_object: + return ts.wpaint + return False + + def poll(self, context): + return self.brush_src(context) def draw(self, context): + src = self.brush_src(context) + brush = src.brush layout = self.layout - layout.row().itemO("sculpt.radial_control") + layout.split().row().template_ID(src, "brush") + + if context.sculpt_object: + layout.column().itemR(brush, "sculpt_tool", expand=True) + + split = layout.split() + col = split.column() + col.itemR(brush, "size", slider=True) + if context.wpaint_object: + col.itemR(context.scene.tool_settings, "vertex_group_weight", text="Weight", slider=True) + col.itemR(brush, "strength", slider=True) + + + + split = layout.split() + col = split.column() + col.itemR(brush, "airbrush") + col.itemR(brush, "anchored") + col.itemR(brush, "rake") + col.itemR(brush, "space", text="Spacing") + colsub = col.column() + colsub.active = brush.space + colsub.itemR(brush, "spacing", text="") + + split = layout.split() + split.template_curve_mapping(brush.curve) + +class VIEW3D_PT_sculptoptions(bpy.types.Panel): + __space_type__ = "VIEW_3D" + __region_type__ = "TOOLS" + __label__ = "Options" + + def poll(self, context): + return context.sculpt_object + + def draw(self, context): + sculpt = context.scene.tool_settings.sculpt + + split = self.layout.split() + + col = split.column() + col.itemL(text="Symmetry:") + row = col.row(align=True) + row.itemR(sculpt, "symmetry_x", text="X", toggle=True) + row.itemR(sculpt, "symmetry_y", text="Y", toggle=True) + row.itemR(sculpt, "symmetry_z", text="Z", toggle=True) + + split = self.layout.split() + + col = split.column() + col.itemL(text="Lock Axis:") + row = col.row(align=True) + row.itemR(sculpt, "lock_x", text="X", toggle=True) + row.itemR(sculpt, "lock_y", text="Y", toggle=True) + row.itemR(sculpt, "lock_z", text="Z", toggle=True) + # ********** default tools for weightpaint **************** @@ -246,7 +326,8 @@ bpy.types.register(VIEW3D_PT_tools_editmode_armature) bpy.types.register(VIEW3D_PT_tools_editmode_mball) bpy.types.register(VIEW3D_PT_tools_editmode_lattice) bpy.types.register(VIEW3D_PT_tools_posemode) -bpy.types.register(VIEW3D_PT_tools_sculptmode) +bpy.types.register(VIEW3D_PT_tools_brush) +bpy.types.register(VIEW3D_PT_sculptoptions) bpy.types.register(VIEW3D_PT_tools_weightpaint) bpy.types.register(VIEW3D_PT_tools_vertexpaint) bpy.types.register(VIEW3D_PT_tools_texturepaint) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 05f5d847159..5cf1ffb9915 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -1980,7 +1980,7 @@ void SCREEN_OT_region_foursplit(wmOperatorType *ot) ot->idname= "SCREEN_OT_region_foursplit"; /* api callbacks */ - ot->invoke= WM_operator_confirm; +// ot->invoke= WM_operator_confirm; ot->exec= region_foursplit_exec; ot->poll= ED_operator_areaactive; ot->flag= OPTYPE_REGISTER; diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index 61d4a3a8ac6..b83036be8fb 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -283,7 +283,7 @@ static void rna_def_lamp(BlenderRNA *brna) {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_HEMI, "HEMI", ICON_LAMP_HEMI, "Hemisphere", "180 degree constant light source."}, {LA_AREA, "AREA", ICON_LAMP_AREA, "Area", "Directional area light source."}, {0, NULL, 0, NULL, NULL}}; From d301d8174c927ff2746322e87a3a9e26da952b4c Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Mon, 20 Jul 2009 17:15:41 +0000 Subject: [PATCH 280/512] Some little UI adjustments to cloth + fluid panel and their presets --- release/ui/buttons_physics_cloth.py | 4 ++-- release/ui/buttons_physics_fluid.py | 10 +++++----- source/blender/blenkernel/intern/fluidsim.c | 2 +- source/blender/makesrna/intern/rna_cloth.c | 16 ++++++++-------- source/blender/makesrna/intern/rna_fluidsim.c | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index 6e55d728c27..b3de2fccd42 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -147,7 +147,7 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): col = split.column(align=True) col.itemR(cloth, "collision_quality", slider=True, text="Quality") - col.itemR(cloth, "min_distance", text="Distance") + col.itemR(cloth, "min_distance", slider=True, text="Distance") col.itemR(cloth, "friction") col = split.column(align=True) @@ -155,7 +155,7 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel): col = col.column(align=True) col.active = cloth.enable_self_collision col.itemR(cloth, "self_collision_quality", slider=True, text="Quality") - col.itemR(cloth, "self_min_distance", text="Distance") + col.itemR(cloth, "self_min_distance", slider=True, text="Distance") class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_stiffness" diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 4273adc9cab..0e6e9e64323 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -105,7 +105,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): colsub=col.column(align=True) colsub.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - colsub.itemR(fluid, "partial_slip_amount", text="Amount") + colsub.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") col.itemR(fluid, "impact_factor") @@ -199,8 +199,8 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): col.itemL(text="Gravity:") col.itemR(fluid, "gravity", text="") - col.itemL(text="Size:") - col.itemR(fluid, "real_world_size", text="Real World Size") + col.itemL(text="Real World Size:") + col.itemR(fluid, "real_world_size", text="Metres") col = split.column() col.itemL(text="Viscosity Presets:") @@ -217,7 +217,7 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel): col.itemL(text="Optimization:") col=col.column(align=True) col.itemR(fluid, "grid_levels", slider=True) - col.itemR(fluid, "compressibility") + col.itemR(fluid, "compressibility", slider=True) class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): __idname__ = "PHYSICS_PT_domain_boundary" @@ -243,7 +243,7 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel): col=col.column(align=True) col.itemR(fluid, "slip_type", text="") if fluid.slip_type == 'PARTIALSLIP': - col.itemR(fluid, "partial_slip_amount", text="Amount") + col.itemR(fluid, "partial_slip_amount", slider=True, text="Amount") col = split.column() col.itemL(text="Surface:") col=col.column(align=True) diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c index 6cf916c4038..ad9e481ffd2 100644 --- a/source/blender/blenkernel/intern/fluidsim.c +++ b/source/blender/blenkernel/intern/fluidsim.c @@ -117,7 +117,7 @@ void fluidsim_init(FluidsimModifierData *fluidmd) fss->typeFlags = OB_FSBND_PARTSLIP; fss->domainNovecgen = 0; fss->volumeInitType = 1; // volume - fss->partSlipValue = 0.5; + fss->partSlipValue = 0.2; fss->generateTracers = 0; fss->generateParticles = 0.0; diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index 95b580ac298..11443ddfde1 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -247,7 +247,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "stepsPerFrame"); RNA_def_property_range(prop, 4, 80); - RNA_def_property_ui_text(prop, "Quality", "Quality of the simulation in steps per frame (higher is better quality but slower)."); + RNA_def_property_ui_text(prop, "Quality", "Quality of the simulation in steps per frame. (higher is better quality but slower)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); /* springs */ @@ -260,7 +260,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "spring_damping", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "Cdis"); RNA_def_property_range(prop, 0.0f, 50.0f); - RNA_def_property_ui_text(prop, "Spring Damping", "Damping of cloth velocity (higher = more smooth, less jiggling)"); + RNA_def_property_ui_text(prop, "Spring Damping", "Damping of cloth velocity. (higher = more smooth, less jiggling)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "structural_stiffness", PROP_FLOAT, PROP_NONE); @@ -284,7 +284,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "bending_stiffness", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "bending"); RNA_def_property_range(prop, 0.0f, 10000.0f); - RNA_def_property_ui_text(prop, "Bending Stiffness", "Wrinkle coefficient (higher = less smaller but more big wrinkles)."); + RNA_def_property_ui_text(prop, "Bending Stiffness", "Wrinkle coefficient. (higher = less smaller but more big wrinkles)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "bending_stiffness_max", PROP_FLOAT, PROP_NONE); @@ -363,18 +363,18 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "epsilon"); RNA_def_property_range(prop, 0.001f, 1.0f); - RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in"); + RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "friction", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 80.0f); - RNA_def_property_ui_text(prop, "Friction", "Friction force if a collision happened (higher = less movement)."); + RNA_def_property_ui_text(prop, "Friction", "Friction force if a collision happened. (higher = less movement)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "collision_quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "loop_count"); RNA_def_property_range(prop, 1, 20); - RNA_def_property_ui_text(prop, "Collision Quality", "How many collision iterations should be done (higher is better quality but slower)."); + RNA_def_property_ui_text(prop, "Collision Quality", "How many collision iterations should be done. (higher is better quality but slower)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); /* self collision */ @@ -387,7 +387,7 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "self_min_distance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "selfepsilon"); RNA_def_property_range(prop, 0.5f, 1.0f); - RNA_def_property_ui_text(prop, "Self Minimum Distance", "0.5 means no distance at all, 1.0 is maximum distance"); + RNA_def_property_ui_text(prop, "Self Minimum Distance", "0.5 means no distance at all, 1.0 is maximum distance."); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); prop= RNA_def_property(srna, "self_friction", PROP_FLOAT, PROP_NONE); @@ -398,7 +398,7 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "self_collision_quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "self_loop_count"); RNA_def_property_range(prop, 1, 10); - RNA_def_property_ui_text(prop, "Self Collision Quality", "How many self collision iterations should be done. (higher is better quality but slower), can be changed for each frame."); + RNA_def_property_ui_text(prop, "Self Collision Quality", "How many self collision iterations should be done. (higher is better quality but slower)"); RNA_def_property_update(prop, NC_OBJECT|ND_GEOM_DATA, "rna_cloth_update"); } diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 44a50fbae25..9afe36fb142 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -274,7 +274,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna) prop= RNA_def_property(srna, "compressibility", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "gstar"); RNA_def_property_range(prop, 0.001, 0.1); - RNA_def_property_ui_text(prop, "Compressibility", "Allowed compressibility due to gravitational force for standing fluid (directly affects simulation step size)."); + RNA_def_property_ui_text(prop, "Compressibility", "Allowed compressibility due to gravitational force for standing fluid. (directly affects simulation step size)"); /* domain boundary settings */ @@ -382,7 +382,7 @@ static void rna_def_fluidsim_inflow(BlenderRNA *brna) prop= RNA_def_property(srna, "local_coordinates", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSINFLOW_LOCALCOORD); - RNA_def_property_ui_text(prop, "Local Coordinates", "Use local coordinates for inflow (e.g. for rotating objects)."); + RNA_def_property_ui_text(prop, "Local Coordinates", "Use local coordinates for inflow. (e.g. for rotating objects)"); } static void rna_def_fluidsim_outflow(BlenderRNA *brna) @@ -425,7 +425,7 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna) prop= RNA_def_property(srna, "alpha_influence", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "particleInfAlpha"); RNA_def_property_range(prop, 0.0, 2.0); - RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full (large particles get lower alphas, smaller ones higher values)."); + RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)"); prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_maxlength(prop, 240); @@ -476,7 +476,7 @@ static void rna_def_fluidsim_control(BlenderRNA *brna) prop= RNA_def_property(srna, "quality", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "cpsQuality"); RNA_def_property_range(prop, 5.0, 100.0); - RNA_def_property_ui_text(prop, "Quality", "Specifies the quality which is used for object sampling (higher = better but slower)."); + RNA_def_property_ui_text(prop, "Quality", "Specifies the quality which is used for object sampling. (higher = better but slower)"); prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE); From 0b4a6ddf4a40f704292628787931d23c0c72151f Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 20 Jul 2009 17:42:40 +0000 Subject: [PATCH 281/512] 2.5 Notifier: * Added some missing notifier for 3DView Display settings. --- source/blender/makesrna/intern/rna_space.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index fb41262b812..ba8f4ce9024 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -531,67 +531,82 @@ static void rna_def_space_3dview(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "lens"); RNA_def_property_ui_text(prop, "Lens", "Lens angle (mm) in perspective view."); RNA_def_property_range(prop, 1.0f, 250.0f); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "near"); RNA_def_property_range(prop, 0.0f, FLT_MAX); RNA_def_property_ui_text(prop, "Clip Start", "3D View near clipping distance."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "far"); RNA_def_property_range(prop, 1.0f, FLT_MAX); RNA_def_property_ui_text(prop, "Clip End", "3D View far clipping distance."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "grid_spacing", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "grid"); RNA_def_property_ui_text(prop, "Grid Spacing", "The distance between 3D View grid lines."); RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "gridlines"); RNA_def_property_ui_text(prop, "Grid Lines", "The number of grid lines to display in perspective view."); RNA_def_property_range(prop, 0, 1024); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "gridsubdiv"); RNA_def_property_ui_text(prop, "Grid Subdivisions", "The number of subdivisions between grid lines."); RNA_def_property_range(prop, 1, 1024); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_floor", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR); RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_x_axis", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X); RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_y_axis", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y); RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_z_axis", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z); RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "outline_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE); RNA_def_property_ui_text(prop, "Outline Selected", "Show an outline highlight around selected objects in non-wireframe views."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "all_object_centers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS); RNA_def_property_ui_text(prop, "All Object Centers", "Show the object center dot for all (selected and unselected) objects."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "relationship_lines", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES); RNA_def_property_ui_text(prop, "Relationship Lines", "Show dashed lines indicating parent or constraint relationships."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "textured_solid", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SOLID_TEX); RNA_def_property_ui_text(prop, "Textured Solid", "Display face-assigned textures in solid view"); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "display_background_image", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPIC); RNA_def_property_ui_text(prop, "Display Background Image", "Display a reference image behind objects in the 3D View"); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "around"); From e43c425e8cd4c38cdecfe2024c2cf9302eb9100e Mon Sep 17 00:00:00 2001 From: William Reynish Date: Mon, 20 Jul 2009 17:59:45 +0000 Subject: [PATCH 282/512] Ok, first commit! Hope this goes ok. Added the Turbidity parameter to the Sky panel in lamp buttons, since it affects sky as well as atmosphere. --- release/ui/buttons_data_lamp.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 0232c18a258..b70734d2fa5 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -113,6 +113,8 @@ class DATA_PT_sky(DataButtonsPanel): col.itemR(lamp, "sky_blend") col.itemR(lamp, "sky_color_space", text="Color Space") col.itemR(lamp, "sky_exposure", text="Exposure") + col.itemS() + col.itemR(lamp, "atmosphere_turbidity", text="Turbidity") col = split.column() col.itemL(text="Horizon:") From 1b7f1bc72dbbf2051eb015d219f2c89d43439cad Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Jul 2009 20:00:59 +0000 Subject: [PATCH 283/512] mistake in own recent change, errors with startup scripts didnt raise errors --- source/blender/python/intern/bpy_interface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 04d70f5a758..76852d99b56 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -515,7 +515,7 @@ void BPY_run_ui_scripts(bContext *C, int reload) /* normal py files? */ if(file_extension && file_extension[3] == '\0') { de->d_name[(file_extension - de->d_name) + 1] = '\0'; - bpy_import_module(de->d_name, reload); + err= bpy_import_module(de->d_name, reload); } } #ifndef __linux__ @@ -528,7 +528,7 @@ void BPY_run_ui_scripts(bContext *C, int reload) BLI_join_dirfile(path, path, "__init__.py"); if(BLI_exists(path)) { - bpy_import_module(de->d_name, reload); + err= bpy_import_module(de->d_name, reload); } } From 9a9d118bbf7786b1c5c412bef651885e33709553 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Mon, 20 Jul 2009 20:28:29 +0000 Subject: [PATCH 284/512] BGE panels: wip Logic Panel: - world settings (moved from world) ... that includes physic engine selection + gravity - game player (from gamesettings, it wasn't wrapped) - stereo/dome (from gamesettings, it wasn't wrapped) ... separated stereom into stereoflag and stereomode - properties ... (didn't touch it) Buttons Game Panel: (wip panel) - Physics (moved from Logic Panel) ... it will be a datablock in the future (right Campbell ?) - Material Physics (not currently implemented) ... a datablock link to the materials of an object + the dynamic physic variables * NOTE: in readfile.c::do_version I couldn't do if(scene->world). There is something wrong with scenes with an unlinked world. So so far we are ignoring the old values.... --- release/ui/buttons_game.py | 118 +++++++++ release/ui/buttons_world.py | 21 -- release/ui/space_logic.py | 244 +++++++++++------- source/blender/blenkernel/intern/scene.c | 35 ++- source/blender/blenkernel/intern/world.c | 8 - source/blender/blenloader/intern/readfile.c | 68 ++++- .../editors/space_buttons/buttons_context.c | 34 ++- .../editors/space_buttons/buttons_header.c | 3 +- .../editors/space_buttons/space_buttons.c | 2 + source/blender/makesdna/DNA_scene_types.h | 88 ++++++- source/blender/makesdna/DNA_world_types.h | 20 +- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_scene.c | 217 ++++++++++++++++ source/blender/makesrna/intern/rna_space.c | 1 + source/blender/makesrna/intern/rna_world.c | 45 +--- .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 12 +- .../Converter/BL_BlenderDataConversion.cpp | 28 +- .../GamePlayer/ghost/GPG_Application.cpp | 4 +- .../RAS_OpenGLRasterizer.cpp | 6 +- 19 files changed, 725 insertions(+), 230 deletions(-) create mode 100644 release/ui/buttons_game.py diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py new file mode 100644 index 00000000000..01937caf5a7 --- /dev/null +++ b/release/ui/buttons_game.py @@ -0,0 +1,118 @@ + +import bpy + +class GameButtonsPanel(bpy.types.Panel): + __space_type__ = "BUTTONS_WINDOW" + __region_type__ = "WINDOW" + __context__ = "game" + +class GAME_PT_context_game(GameButtonsPanel): + __idname__ = "GAME_PT_context_game" + __no_header__ = True + + def draw(self, context): + layout = self.layout + ob = context.object + game = context.game + + split = layout.split(percentage=0.06) + split.itemL(text="", icon="ICON_GAME") + split.itemR(game, "name", text="") + +class GAME_PT_data(GameButtonsPanel): + __idname__ = "GAME_PT_data" + __label__ = "Data" + + def draw(self, context): + layout = self.layout + ob = context.object + game = context.game + +class GAME_PT_physics(GameButtonsPanel): + __idname__ = "GAME_PT_physics" + __label__ = "Physics" + + def poll(self, context): + ob = context.active_object + return ob and ob.game + + def draw(self, context): + layout = self.layout + ob = context.active_object + + game = ob.game + + flow = layout.column_flow() + flow.active = True + flow.itemR(game, "physics_type") + flow.itemR(game, "actor") + + row = layout.row() + row.itemR(game, "ghost") + row.itemR(ob, "restrict_render", text="Invisible") # out of place but useful + + flow = layout.column_flow() + flow.itemR(game, "mass") + flow.itemR(game, "radius") + flow.itemR(game, "no_sleeping") + flow.itemR(game, "damping") + flow.itemR(game, "rotation_damping") + flow.itemR(game, "minimum_velocity") + flow.itemR(game, "maximum_velocity") + + row = layout.row() + row.itemR(game, "do_fh") + row.itemR(game, "rotation_fh") + + flow = layout.column_flow() + flow.itemR(game, "form_factor") + flow.itemR(game, "anisotropic_friction") + + flow = layout.column_flow() + flow.active = game.anisotropic_friction + flow.itemR(game, "friction_coefficients") + + split = layout.split() + sub = split.column() + sub.itemR(game, "lock_x_axis") + sub.itemR(game, "lock_y_axis") + sub.itemR(game, "lock_z_axis") + sub = split.column() + sub.itemR(game, "lock_x_rot_axis") + sub.itemR(game, "lock_y_rot_axis") + sub.itemR(game, "lock_z_rot_axis") + + +class GAME_PT_collision_bounds(GameButtonsPanel): + __idname__ = "GAME_PT_collision_bounds" + __label__ = "Collision Bounds" + + def poll(self, context): + ob = context.active_object + return ob and ob.game + + def draw_header(self, context): + layout = self.layout + ob = context.active_object + game = ob.game + + layout.itemR(game, "use_collision_bounds", text="") + + def draw(self, context): + layout = self.layout + + ob = context.scene.objects[0] + game = ob.game + + flow = layout.column_flow() + flow.active = game.use_collision_bounds + flow.itemR(game, "collision_bounds") + flow.itemR(game, "collision_compound") + flow.itemR(game, "collision_margin") + + + +bpy.types.register(GAME_PT_context_game) +bpy.types.register(GAME_PT_data) +bpy.types.register(GAME_PT_physics) +bpy.types.register(GAME_PT_collision_bounds) \ No newline at end of file diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 0f16c847c5d..6e233f86765 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -175,26 +175,6 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel): col.row().itemR(ao, "blend_mode", expand=True) col.row().itemR(ao, "color", expand=True) col.itemR(ao, "energy") - -class WORLD_PT_game(WorldButtonsPanel): - __label__ = "Game Settings" - - def draw(self, context): - layout = self.layout - world = context.world - - flow = layout.column_flow() - flow.itemR(world, "physics_engine") - flow.itemR(world, "physics_gravity") - - flow.itemR(world, "game_fps") - flow.itemR(world, "game_logic_step_max") - flow.itemR(world, "game_physics_substep") - flow.itemR(world, "game_physics_step_max") - - flow.itemR(world, "game_use_occlusion_culling", text="Enable Occlusion Culling") - flow.itemR(world, "game_occlusion_culling_resolution") - bpy.types.register(WORLD_PT_context_world) bpy.types.register(WORLD_PT_preview) @@ -203,4 +183,3 @@ bpy.types.register(WORLD_PT_ambient_occlusion) bpy.types.register(WORLD_PT_mist) bpy.types.register(WORLD_PT_stars) bpy.types.register(WORLD_PT_color_correction) -bpy.types.register(WORLD_PT_game) diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index bb7f22c7c5e..5f56c0e4537 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -1,89 +1,5 @@ import bpy -class LOGIC_PT_physics(bpy.types.Panel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "Physics" - - def poll(self, context): - ob = context.active_object - return ob and ob.game - - def draw(self, context): - layout = self.layout - ob = context.active_object - - game = ob.game - - flow = layout.column_flow() - flow.active = True - flow.itemR(game, "physics_type") - flow.itemR(game, "actor") - - row = layout.row() - row.itemR(game, "ghost") - row.itemR(ob, "restrict_render", text="Invisible") # out of place but useful - - flow = layout.column_flow() - flow.itemR(game, "mass") - flow.itemR(game, "radius") - flow.itemR(game, "no_sleeping") - flow.itemR(game, "damping") - flow.itemR(game, "rotation_damping") - flow.itemR(game, "minimum_velocity") - flow.itemR(game, "maximum_velocity") - - row = layout.row() - row.itemR(game, "do_fh") - row.itemR(game, "rotation_fh") - - flow = layout.column_flow() - flow.itemR(game, "form_factor") - flow.itemR(game, "anisotropic_friction") - - flow = layout.column_flow() - flow.active = game.anisotropic_friction - flow.itemR(game, "friction_coefficients") - - split = layout.split() - sub = split.column() - sub.itemR(game, "lock_x_axis") - sub.itemR(game, "lock_y_axis") - sub.itemR(game, "lock_z_axis") - sub = split.column() - sub.itemR(game, "lock_x_rot_axis") - sub.itemR(game, "lock_y_rot_axis") - sub.itemR(game, "lock_z_rot_axis") - - -class LOGIC_PT_collision_bounds(bpy.types.Panel): - __space_type__ = "LOGIC_EDITOR" - __region_type__ = "UI" - __label__ = "Collision Bounds" - - def poll(self, context): - ob = context.active_object - return ob and ob.game - - def draw_header(self, context): - layout = self.layout - ob = context.active_object - game = ob.game - - layout.itemR(game, "use_collision_bounds", text="") - - def draw(self, context): - layout = self.layout - - ob = context.active_object - game = ob.game - - flow = layout.column_flow() - flow.active = game.use_collision_bounds - flow.itemR(game, "collision_bounds") - flow.itemR(game, "collision_compound") - flow.itemR(game, "collision_margin") - class LOGIC_PT_properties(bpy.types.Panel): __space_type__ = "LOGIC_EDITOR" __region_type__ = "UI" @@ -92,10 +8,9 @@ class LOGIC_PT_properties(bpy.types.Panel): def poll(self, context): ob = context.active_object return ob and ob.game - + def draw(self, context): layout = self.layout - ob = context.active_object game = ob.game @@ -106,6 +21,159 @@ class LOGIC_PT_properties(bpy.types.Panel): flow.itemR(prop, "value", text="") # we dont care about the type. rna will display correctly flow.itemR(prop, "debug") -bpy.types.register(LOGIC_PT_physics) -bpy.types.register(LOGIC_PT_collision_bounds) +""" +class WORLD_PT_game(WorldButtonsPanel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "Game Settings" + + def draw(self, context): + layout = self.layout + world = context.world + + flow = layout.column_flow() + flow.itemR(world, "physics_engine") + flow.itemR(world, "physics_gravity") + + flow.itemR(world, "game_fps") + flow.itemR(world, "game_logic_step_max") + flow.itemR(world, "game_physics_substep") + flow.itemR(world, "game_physics_step_max") + + flow.itemR(world, "game_use_occlusion_culling", text="Enable Occlusion Culling") + flow.itemR(world, "game_occlusion_culling_resolution") +""" +class LOGIC_PT_player(bpy.types.Panel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "Game Player" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + row = layout.row() + row.itemR(gs, "fullscreen") + + split = layout.split() + col = split.column(align=True) + col.itemR(gs, "resolution_x", slider=False, text="Res. X") + col.itemR(gs, "resolution_y", slider=False, text="Res. Y") + + col = split.column(align=True) + col.itemR(gs, "depth", slider=False) + col.itemR(gs, "frequency", slider=False) + + + # framing: + col = layout.column() + col.itemL(text="Framing Options:") + col.row().itemR(gs, "framing_type", expand=True) + + colsub = col.column() + colsub.itemR(gs, "framing_color", text="") + +class LOGIC_PT_stereo(bpy.types.Panel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "Stereo and Dome" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + + + # stereo options: + col= layout.column() + col.itemL(text="Stereo Options:") + row = col.row() + row.itemR(gs, "stereo", expand=True) + + stereo_mode = gs.stereo + + + # stereo: + if stereo_mode == 'STEREO': + col = layout.column(align=True) + row = col.row() + row.item_enumR(gs, "stereo_mode", "QUADBUFFERED") + row.item_enumR(gs, "stereo_mode", "ABOVEBELOW") + + row = col.row() + row.item_enumR(gs, "stereo_mode", "INTERLACED") + row.item_enumR(gs, "stereo_mode", "ANAGLYPH") + + row = col.row() + row.item_enumR(gs, "stereo_mode", "SIDEBYSIDE") + row.item_enumR(gs, "stereo_mode", "VINTERLACE") + +# row = layout.column_flow() +# row.itemR(gs, "stereo_mode") + + # dome: + if stereo_mode == 'DOME': + row = layout.row() + row.itemR(gs, "dome_mode") + + split=layout.split() + col=split.column(align=True) + col.itemR(gs, "dome_angle", slider=True) + col.itemR(gs, "dome_tesselation", text="Tessel.") + col=split.column(align=True) + col.itemR(gs, "dome_tilt") + col.itemR(gs, "dome_buffer_resolution", text="Res.", slider=True) + col=layout.column() + col.itemR(gs, "dome_text") + + +class LOGIC_PT_physics(bpy.types.Panel): + __space_type__ = "LOGIC_EDITOR" + __region_type__ = "UI" + __label__ = "World Physics" + + def draw(self, context): + layout = self.layout + gs = context.scene.game_data + flow = layout.column_flow() + flow.itemR(gs, "physics_engine") + if gs.physics_engine != "NONE": + flow.itemR(gs, "physics_gravity") + + split = layout.split() + col = split.column() + col.itemR(gs, "use_occlusion_culling", text="Enable Occlusion Culling") + + sub = split.column() + sub.active = gs.use_occlusion_culling + sub.itemR(gs, "occlusion_culling_resolution", text="resol.") + +# Activity Culling is deprecated I think. Let's leave it commented by now +""" + split = layout.split() + col = split.column() + col.itemR(gs, "activity_culling") + + sub = split.column() + sub.active = gs.activity_culling + sub.itemR(gs, "activity_culling_box_radius") +""" + + split = layout.split() + col = split.column(align=True) + col.itemR(gs, "physics_step_max", text="phys") + col.itemR(gs, "physics_step_sub", text="sub") + + col = split.column(align=True) + col.itemR(gs, "fps", text="fps") + col.itemR(gs, "logic_step_max", text="log") + + else: + split = layout.split() + col = split.column(align=True) + col.itemR(gs, "fps", text="fps") + col = split.column(align=True) + col.itemR(gs, "logic_step_max", text="log") + bpy.types.register(LOGIC_PT_properties) +bpy.types.register(LOGIC_PT_player) +bpy.types.register(LOGIC_PT_stereo) +bpy.types.register(LOGIC_PT_physics) \ No newline at end of file diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 2ab67ed6151..20ed7c1b7eb 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -230,23 +230,11 @@ Scene *add_scene(char *name) sce->r.bake_osa= 5; sce->r.bake_flag= R_BAKE_CLEAR; sce->r.bake_normal_space= R_BAKE_SPACE_TANGENT; - - sce->r.xplay= 640; - sce->r.yplay= 480; - sce->r.freqplay= 60; - sce->r.depth= 32; sce->r.scemode= R_DOCOMP|R_DOSEQ|R_EXTENSION; sce->r.stamp= R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_SCENE|R_STAMP_CAMERA; sce->r.threads= 1; - - sce->r.stereomode = 1; // no stereo - sce->r.domeangle = 180; - sce->r.domemode = 1; - sce->r.domeres = 4; - sce->r.domeresbuf = 1.0f; - sce->r.dometilt = 0; sce->r.simplify_subsurf= 6; sce->r.simplify_particles= 1.0f; @@ -322,6 +310,29 @@ Scene *add_scene(char *name) /* note; in header_info.c the scene copy happens..., if you add more to renderdata it has to be checked there */ scene_add_render_layer(sce); + /* game data */ + sce->gm.stereoflag = STEREO_NOSTEREO; + sce->gm.stereomode = STEREO_ANAGLYPH; + sce->gm.dome.angle = 180; + sce->gm.dome.mode = DOME_FISHEYE; + sce->gm.dome.res = 4; + sce->gm.dome.resbuf = 1.0f; + sce->gm.dome.tilt = 0; + + sce->gm.xplay= 800; + sce->gm.yplay= 600; + sce->gm.freqplay= 60; + sce->gm.depth= 32; + + sce->gm.gravity= 9.8f; + sce->gm.physicsEngine= WOPHY_BULLET; + sce->gm.mode = 32; //XXX ugly harcoding, still not sure we should drop mode. 32 == 1 << 5 == use_occlusion_culling + sce->gm.occlusionRes = 128; + sce->gm.ticrate = 60; + sce->gm.maxlogicstep = 5; + sce->gm.physubstep = 1; + sce->gm.maxphystep = 5; + return sce; } diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index 7fe129ed6fc..c84c54b17ee 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -94,7 +94,6 @@ World *add_world(char *name) wrld->skytype= WO_SKYBLEND; wrld->stardist= 15.0f; wrld->starsize= 2.0f; - wrld->gravity= 9.8f; wrld->exp= 0.0f; wrld->exposure=wrld->range= 1.0f; @@ -106,14 +105,7 @@ World *add_world(char *name) wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY; wrld->ao_approx_error= 0.25f; - wrld->physicsEngine= WOPHY_BULLET;//WOPHY_SUMO; Bullet by default - wrld->mode = WO_DBVT_CULLING; // DBVT culling by default - wrld->occlusionRes = 128; wrld->preview = NULL; - wrld->ticrate = 60; - wrld->maxlogicstep = 5; - wrld->physubstep = 1; - wrld->maxphystep = 5; return wrld; } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 8a5f915c849..46db4109440 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3995,7 +3995,8 @@ static void lib_link_scene(FileData *fd, Main *main) srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override); } /*Game Settings: Dome Warp Text*/ - sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext); +// sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext); // XXX deprecated since 2.5 + sce->gm.dome.warptext= newlibadr_us(fd, sce->id.lib, sce->gm.dome.warptext); sce->id.flag -= LIB_NEEDLINK; } @@ -9314,6 +9315,69 @@ static void do_versions(FileData *fd, Library *lib, Main *main) ts->uv_selectmode= UV_SELECT_VERTEX; ts->vgroup_weight= 1.0f; } + + /* Game Settings */ + //Dome + sce->gm.dome.angle = sce->r.domeangle; + sce->gm.dome.mode = sce->r.domemode; + sce->gm.dome.res = sce->r.domeres; + sce->gm.dome.resbuf = sce->r.domeresbuf; + sce->gm.dome.tilt = sce->r.dometilt; + sce->gm.dome.warptext = sce->r.dometext; + + //Stand Alone + sce->gm.fullscreen = sce->r.fullscreen; + sce->gm.xplay = sce->r.xplay; + sce->gm.yplay = sce->r.yplay; + sce->gm.freqplay = sce->r.freqplay; + sce->gm.depth = sce->r.depth; + sce->gm.attrib = sce->r.attrib; + + //Stereo + sce->gm.xsch = sce->r.xsch; + sce->gm.ysch = sce->r.ysch; + sce->gm.stereomode = sce->r.stereomode; + /* reassigning stereomode NO_STEREO and DOME to a separeted flag*/ + if (sce->gm.stereomode == 1){ //1 = STEREO_NOSTEREO + sce->gm.stereoflag = STEREO_NOSTEREO; + sce->gm.stereomode = STEREO_ANAGLYPH; + } + else if(sce->gm.stereomode == 8){ //8 = STEREO_DOME + sce->gm.stereoflag = STEREO_DOME; + sce->gm.stereomode = STEREO_ANAGLYPH; + } + else + sce->gm.stereoflag = STEREO_ENABLE; + + //Framing + sce->gm.framing = sce->framing; + sce->gm.xplay = sce->r.xplay; + sce->gm.yplay = sce->r.yplay; + sce->gm.freqplay= sce->r.freqplay; + sce->gm.depth= sce->r.depth; + + //Physic (previously stored in world) + if (0){ +// if (sce->world){ // XXX I think we need to run lib_link_all() before do_version() + sce->gm.gravity = sce->world->gravity; + sce->gm.physicsEngine= sce->world->physicsEngine; + sce->gm.mode = sce->world->mode; + sce->gm.occlusionRes = sce->world->occlusionRes; + sce->gm.ticrate = sce->world->ticrate; + sce->gm.maxlogicstep = sce->world->maxlogicstep; + sce->gm.physubstep = sce->world->physubstep; + sce->gm.maxphystep = sce->world->maxphystep; + } + else{ + sce->gm.gravity =9.8f; + sce->gm.physicsEngine= WOPHY_BULLET;// Bullet by default + sce->gm.mode = WO_DBVT_CULLING; // DBVT culling by default + sce->gm.occlusionRes = 128; + sce->gm.ticrate = 60; + sce->gm.maxlogicstep = 5; + sce->gm.physubstep = 1; + sce->gm.maxphystep = 5; + } } } @@ -10225,7 +10289,7 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) } if(sce->r.dometext) - expand_doit(fd, mainvar, sce->r.dometext); + expand_doit(fd, mainvar, sce->gm.dome.warptext); } static void expand_camera(FileData *fd, Main *mainvar, Camera *ca) diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index b7e2a3325cb..9048565b01f 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -360,6 +360,32 @@ static int buttons_context_path_texture(ButsContextPath *path) return 0; } +static int buttons_context_path_game(ButsContextPath *path) +{ + /* XXX temporary context. Using material slot instead of ob->game_data */ + Object *ob; + PointerRNA *ptr= &path->ptr[path->len-1]; + Material *ma; + + /* if we already have a (pinned) material, we're done */ + if(RNA_struct_is_a(ptr->type, &RNA_Material)) { + return 1; + } + /* if we have an object, use the object material slot */ + else if(buttons_context_path_object(path)) { + ob= path->ptr[path->len-1].data; + + if(ob && ob->type && (ob->typeactcol); + RNA_id_pointer_create(&ma->id, &path->ptr[path->len]); + path->len++; + return 1; + } + } + + /* no path to a material possible */ + return 0; +} static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int worldtex) { SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); @@ -404,6 +430,9 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma case BCONTEXT_DATA: found= buttons_context_path_data(path, -1); break; + case BCONTEXT_GAME: + found= buttons_context_path_game(path); + break; case BCONTEXT_PARTICLE: found= buttons_context_path_particle(path); break; @@ -496,8 +525,8 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r /* here we handle context, getting data from precomputed path */ if(CTX_data_dir(member)) { static const char *dir[] = { - "world", "object", "meshe", "armature", "lattice", "curve", - "meta_ball", "lamp", "camera", "material", "material_slot", + "world", "object", "mesh", "armature", "lattice", "curve", + "meta_ball", "lamp", "camera", "material", "material_slot", "game", "texture", "texture_slot", "bone", "edit_bone", "particle_system", "cloth", "soft_body", "fluid", "collision", NULL}; @@ -736,4 +765,3 @@ void buttons_context_register(ARegionType *art) pt->flag= PNL_NO_HEADER; BLI_addtail(&art->paneltypes, pt); } - diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index ff906b7f539..e569ed324cd 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -187,7 +187,8 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); - + if(sbuts->pathflag & (1<mainb), 0.0, (float)BCONTEXT_GAME, 0, 0, "Game"); xco+= XIC; uiBlockEndAlign(block); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 4a741f85d85..0c1f735451a 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -172,6 +172,8 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar) ED_region_panels(C, ar, vertical, "modifier"); else if (sbuts->mainb == BCONTEXT_CONSTRAINT) ED_region_panels(C, ar, vertical, "constraint"); + else if (sbuts->mainb == BCONTEXT_GAME) + ED_region_panels(C, ar, vertical, "game"); sbuts->re_align= 0; sbuts->mainbo= sbuts->mainb; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 572913f10d0..31d7a63b31b 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -183,10 +183,10 @@ typedef struct RenderData { /** For UR edge rendering: give the edges this color */ float edgeR, edgeG, edgeB; - short fullscreen, xplay, yplay, freqplay; /* standalone player */ - short depth, attrib, rt1, rt2; /* standalone player */ + short fullscreen, xplay, yplay, freqplay; /* standalone player */ // XXX deprecated since 2.5 + short depth, attrib, rt1, rt2; /* standalone player */ // XXX deprecated since 2.5 - short stereomode; /* standalone player stereo settings */ + short stereomode; /* standalone player stereo settings */ // XXX deprecated since 2.5 short dimensionspreset; /* for the dimensions presets menu */ @@ -327,12 +327,12 @@ typedef struct RenderData { short jp2_preset, jp2_depth; int rpad3; - /* Dome variables */ - short domeres, domemode; - short domeangle, dometilt; - float domeresbuf; - float pad2; - struct Text *dometext; + /* Dome variables */ // XXX deprecated since 2.5 + short domeres, domemode; // XXX deprecated since 2.5 + short domeangle, dometilt; // XXX deprecated since 2.5 + float domeresbuf; // XXX deprecated since 2.5 + float pad2; // XXX deprecated since 2.5 + struct Text *dometext; // XXX deprecated since 2.5 } RenderData; @@ -350,6 +350,20 @@ typedef struct RenderProfile { } RenderProfile; +typedef struct GameDome { + short res, mode; + short angle, tilt; + float resbuf, pad2; + struct Text *warptext; +} GameDome; + +#define DOME_FISHEYE 1 +#define DOME_TRUNCATED_FRONT 2 +#define DOME_TRUNCATED_REAR 3 +#define DOME_ENVMAP 4 +#define DOME_PANORAM_SPH 5 +#define DOME_NUM_MODES 6 + typedef struct GameFraming { float col[3]; char type, pad1, pad2, pad3; @@ -359,6 +373,56 @@ typedef struct GameFraming { #define SCE_GAMEFRAMING_EXTEND 1 #define SCE_GAMEFRAMING_SCALE 2 +typedef struct GameData { + + /* physics (it was in world)*/ + float gravity; /*Gravitation constant for the game world*/ + + /* + * Radius of the activity bubble, in Manhattan length. Objects + * outside the box are activity-culled. */ + float activityBoxRadius; //it's not being used ANYWHERE !!!!!!!!!!!!!! + /* + * bit 3: (gameengine): Activity culling is enabled. + * bit 5: (gameengine) : enable Bullet DBVT tree for view frustrum culling + */ + short mode, pad11; + short occlusionRes; /* resolution of occlusion Z buffer in pixel */ + short physicsEngine; + short ticrate, maxlogicstep, physubstep, maxphystep; + + /* standalone player */ + struct GameFraming framing; + short pad9, pad10; + short fullscreen, xplay, yplay, freqplay; + short depth, attrib, rt1, rt2; + + /* stereo/dome mode */ + struct GameDome dome; + short stereoflag, stereomode, xsch, ysch; //xsch and ysch can be deleted !!! + float pad12; +} GameData; +#define STEREO_NOSTEREO 1 +#define STEREO_ENABLE 2 +#define STEREO_DOME 3 + +//#define STEREO_NOSTEREO 1 +#define STEREO_QUADBUFFERED 2 +#define STEREO_ABOVEBELOW 3 +#define STEREO_INTERLACED 4 +#define STEREO_ANAGLYPH 5 +#define STEREO_SIDEBYSIDE 6 +#define STEREO_VINTERLACE 7 +//#define STEREO_DOME 8 + +/* physicsEngine */ +#define WOPHY_NONE 0 +#define WOPHY_ENJI 1 +#define WOPHY_SUMO 2 +#define WOPHY_DYNAMO 3 +#define WOPHY_ODE 4 +#define WOPHY_BULLET 5 + typedef struct TimeMarker { struct TimeMarker *next, *prev; int frame; @@ -588,8 +652,6 @@ typedef struct Scene { struct Editing *ed; /* sequence editor data is allocated here */ - struct GameFraming framing; - struct ToolSettings *toolsettings; /* default allocated now */ struct SceneStats *stats; /* default allocated now */ @@ -617,6 +679,10 @@ typedef struct Scene { /* User-Defined KeyingSets */ int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */ ListBase keyingsets; /* KeyingSets for the given frame */ + + /* Game Settings */ + struct GameFraming framing; // XXX deprecated since 2.5 + struct GameData gm; } Scene; diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h index 608a4ca982e..b6e387fbede 100644 --- a/source/blender/makesdna/DNA_world_types.h +++ b/source/blender/makesdna/DNA_world_types.h @@ -72,12 +72,12 @@ typedef struct World { /** * Gravitation constant for the game world */ - float gravity; + float gravity; // moved to scene->gamedata in 2.5 /** * Radius of the activity bubble, in Manhattan length. Objects * outside the box are activity-culled. */ - float activityBoxRadius; + float activityBoxRadius; // moved to scene->gamedata in 2.5 short skytype; /** @@ -89,10 +89,10 @@ typedef struct World { * bit 4: ambient occlusion * bit 5: (gameengine) : enable Bullet DBVT tree for view frustrum culling */ - short mode; - short occlusionRes; /* resolution of occlusion Z buffer in pixel */ - short physicsEngine; /* here it's aligned */ - short ticrate, maxlogicstep, physubstep, maxphystep; + short mode; // partially moved to scene->gamedata in 2.5 + short occlusionRes; /* resolution of occlusion Z buffer in pixel */ // moved to scene->gamedata in 2.5 + short physicsEngine; /* here it's aligned */ // moved to scene->gamedata in 2.5 + short ticrate, maxlogicstep, physubstep, maxphystep; // moved to scene->gamedata in 2.5 float misi, miststa, mistdist, misthi; @@ -181,14 +181,6 @@ typedef struct World { #define WOMAP_ZENDOWN 8 #define WOMAP_MIST 16 -/* physicsEngine */ -#define WOPHY_NONE 0 -#define WOPHY_ENJI 1 -#define WOPHY_SUMO 2 -#define WOPHY_DYNAMO 3 -#define WOPHY_ODE 4 -#define WOPHY_BULLET 5 - /* flag */ #define WO_DS_EXPAND (1<<0) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 9ad71f4e1d7..90270483adb 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -320,6 +320,7 @@ extern StructRNA RNA_RaySensor; extern StructRNA RNA_Region; extern StructRNA RNA_RigidBodyJointConstraint; extern StructRNA RNA_Scene; +extern StructRNA RNA_SceneGameData; extern StructRNA RNA_SceneRenderData; extern StructRNA RNA_SceneSequence; extern StructRNA RNA_Screen; diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index d1ef9dbbef3..a41bff8431c 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -554,6 +554,216 @@ void rna_def_scene_render_layer(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); } +void rna_def_scene_game_data(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem framing_types_items[] ={ + {SCE_GAMEFRAMING_BARS, "BARS", 0, "Stretch", ""}, + {SCE_GAMEFRAMING_EXTEND, "EXTEND", 0, "Extend", ""}, + {SCE_GAMEFRAMING_SCALE, "SCALE", 0, "Scale", ""}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem dome_modes_items[] ={ + {DOME_FISHEYE, "FISHEYE", 0, "Fisheye", ""}, + {DOME_TRUNCATED_FRONT, "TRUNCATED_FRONT", 0, "Front-Truncated", ""}, + {DOME_TRUNCATED_REAR, "TRUNCATED_REAR", 0, "Rear-Truncated", ""}, + {DOME_ENVMAP, "ENVMAP", 0, "Cube Map", ""}, + {DOME_PANORAM_SPH, "PANORAM_SPH", 0, "Spherical Panoramic", ""}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem stereo_modes_items[] ={ +// {STEREO_NOSTEREO, "NO_STEREO", 0, "No Stereo", ""}, + {STEREO_QUADBUFFERED, "QUADBUFFERED", 0, "Quad-Buffer", ""}, + {STEREO_ABOVEBELOW, "ABOVEBELOW", 0, "Above-Below", ""}, + {STEREO_INTERLACED, "INTERLACED", 0, "Interlaced", ""}, + {STEREO_ANAGLYPH, "ANAGLYPH", 0, "Anaglyph", ""}, + {STEREO_SIDEBYSIDE, "SIDEBYSIDE", 0, "Side-by-side", ""}, + {STEREO_VINTERLACE, "VINTERLACE", 0, "Vinterlace", ""}, +// {STEREO_DOME, "DOME", 0, "Dome", ""}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem stereo_items[] ={ + {STEREO_NOSTEREO, "NO_STEREO", 0, "No Stereo", ""}, + {STEREO_ENABLE, "STEREO", 0, "Stereo", ""}, + {STEREO_DOME, "DOME", 0, "Dome", ""}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem physics_engine_items[] = { + {WOPHY_NONE, "NONE", 0, "None", ""}, + //{WOPHY_ENJI, "ENJI", 0, "Enji", ""}, + //{WOPHY_SUMO, "SUMO", 0, "Sumo (Deprecated)", ""}, + //{WOPHY_DYNAMO, "DYNAMO", 0, "Dynamo", ""}, + //{WOPHY_ODE, "ODE", 0, "ODE", ""}, + {WOPHY_BULLET, "BULLET", 0, "Bullet", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "SceneGameData", NULL); + RNA_def_struct_sdna(srna, "GameData"); + RNA_def_struct_nested(brna, srna, "Scene"); + RNA_def_struct_ui_text(srna, "Game Data", "Game data for a Scene datablock."); + + prop= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "xplay"); + RNA_def_property_range(prop, 4, 10000); + RNA_def_property_ui_text(prop, "Resolution X", "Number of horizontal pixels in the screen."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "yplay"); + RNA_def_property_range(prop, 4, 10000); + RNA_def_property_ui_text(prop, "Resolution Y", "Number of vertical pixels in the screen."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "depth", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "depth"); + RNA_def_property_range(prop, 8, 32); + RNA_def_property_ui_text(prop, "Bits", "Displays bit depth of full screen display."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + // Do we need it here ? (since we already have it in World + prop= RNA_def_property(srna, "frequency", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "freqplay"); + RNA_def_property_range(prop, 4, 2000); + RNA_def_property_ui_text(prop, "Freq", "Displays clock frequency of fullscreen display."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "fullscreen", 1.0); + RNA_def_property_ui_text(prop, "Fullscreen", "Starts player in a new fullscreen display"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + /* Framing */ + prop= RNA_def_property(srna, "framing_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "framing.type"); + RNA_def_property_enum_items(prop, framing_types_items); + RNA_def_property_ui_text(prop, "Framing Types", "Select the type of Framing you want."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "framing_color", PROP_FLOAT, PROP_COLOR); + RNA_def_property_float_sdna(prop, NULL, "framing.col"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "", ""); + RNA_def_property_update(prop, NC_SCENE, NULL); + + /* Stereo */ + prop= RNA_def_property(srna, "stereo", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "stereoflag"); + RNA_def_property_enum_items(prop, stereo_items); + RNA_def_property_ui_text(prop, "Stereo Options", ""); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "stereo_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "stereomode"); + RNA_def_property_enum_items(prop, stereo_modes_items); + RNA_def_property_ui_text(prop, "Stereo Mode", ""); + RNA_def_property_update(prop, NC_SCENE, NULL); + + /* Dome */ + prop= RNA_def_property(srna, "dome_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "dome.mode"); + RNA_def_property_enum_items(prop, dome_modes_items); + RNA_def_property_ui_text(prop, "Dome Mode", ""); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "dome_tesselation", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "dome.res"); + RNA_def_property_ui_range(prop, 1, 8, 1, 1); + RNA_def_property_ui_text(prop, "Tesselation", "Tesselation level - check the generated mesh in wireframe mode"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "dome_buffer_resolution", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "dome.resbuf"); + RNA_def_property_ui_range(prop, 0.1, 1.0, 0.1, 0.1); + RNA_def_property_ui_text(prop, "Buffer Resolution", "Buffer Resolution - decrease it to increase speed"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "dome_angle", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "dome.angle"); + RNA_def_property_ui_range(prop, 90, 250, 1, 1); + RNA_def_property_ui_text(prop, "Angle", "Field of View of the Dome - it only works in mode Fisheye and Truncated"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "dome_tilt", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "dome.tilt"); + RNA_def_property_ui_range(prop, -180, 180, 1, 1); + RNA_def_property_ui_text(prop, "Tilt", "Camera rotation in horizontal axis"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "dome_text", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "dome.warptext"); + RNA_def_property_struct_type(prop, "Text"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Warp Data", "Custom Warp Mesh data file"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + /* physics */ + prop= RNA_def_property(srna, "physics_engine", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "physicsEngine"); + RNA_def_property_enum_items(prop, physics_engine_items); + RNA_def_property_ui_text(prop, "Physics Engine", "Physics engine used for physics simulation in the game engine."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "physics_gravity", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "gravity"); + RNA_def_property_range(prop, 0.0, 25.0); + RNA_def_property_ui_text(prop, "Physics Gravity", "Gravitational constant used for physics simulation in the game engine."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "occlusion_culling_resolution", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "occlusionRes"); + RNA_def_property_range(prop, 128.0, 1024.0); + RNA_def_property_ui_text(prop, "Occlusion Resolution", "The size of the occlusion buffer in pixel, use higher value for better precsion (slower)"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "ticrate"); + RNA_def_property_ui_range(prop, 1, 60, 1, 1); + RNA_def_property_range(prop, 1, 250); + RNA_def_property_ui_text(prop, "Frames Per Second", "The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate."); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "logic_step_max", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "maxlogicstep"); + RNA_def_property_ui_range(prop, 1, 5, 1, 1); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Max Logic Steps", "Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "physics_step_max", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "maxphystep"); + RNA_def_property_ui_range(prop, 1, 5, 1, 1); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Max Physics Steps", "Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "physics_step_sub", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "physubstep"); + RNA_def_property_ui_range(prop, 1, 5, 1, 1); + RNA_def_property_range(prop, 1, 5); + RNA_def_property_ui_text(prop, "Physics Sub Steps", "Sets the number of simulation substep per physic timestep, higher value give better physics precision"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + /* mode */ + prop= RNA_def_property(srna, "use_occlusion_culling", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 5)); //XXX mode hardcoded // WO_DBVT_CULLING + RNA_def_property_ui_text(prop, "DBVT culling", "Use optimized Bullet DBVT tree for view frustrum and occlusion culling"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + // not used // deprecated !!!!!!!!!!!!! + prop= RNA_def_property(srna, "activity_culling", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 3)); //XXX mode hardcoded + RNA_def_property_ui_text(prop, "Activity Culling", "Activity culling is enabled"); + RNA_def_property_update(prop, NC_SCENE, NULL); + + // not used // deprecated !!!!!!!!!!!!! + prop= RNA_def_property(srna, "activity_culling_box_radius", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "activityBoxRadius"); + RNA_def_property_range(prop, 0.0, 1000.0); + RNA_def_property_ui_text(prop, "box radius", "Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled"); + RNA_def_property_update(prop, NC_SCENE, NULL); +} void rna_def_scene_render_data(BlenderRNA *brna) { StructRNA *srna; @@ -1360,8 +1570,15 @@ void RNA_def_scene(BlenderRNA *brna) RNA_def_property_struct_type(prop, "TimelineMarker"); RNA_def_property_ui_text(prop, "Timeline Markers", "Markers used in all timelines for the current scene."); + /* Game Settings */ + prop= RNA_def_property(srna, "game_data", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gm"); + RNA_def_property_struct_type(prop, "SceneGameData"); + RNA_def_property_ui_text(prop, "Game Data", ""); + rna_def_tool_settings(brna); rna_def_scene_render_data(brna); + rna_def_scene_game_data(brna); rna_def_scene_render_layer(brna); } diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index ba8f4ce9024..d959c26a49a 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -658,6 +658,7 @@ static void rna_def_space_buttons(BlenderRNA *brna) {BCONTEXT_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture"}, {BCONTEXT_PARTICLE, "PARTICLE", ICON_PARTICLES, "Particle", "Particle"}, {BCONTEXT_PHYSICS, "PHYSICS", ICON_PHYSICS, "Physics", "Physics"}, + {BCONTEXT_GAME, "GAME", ICON_GAME, "Game", "Game"}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem panel_alignment_items[] = { diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index 773037176de..b40f3de43ef 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -361,6 +361,7 @@ void RNA_def_world(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; +/* static EnumPropertyItem physics_engine_items[] = { {WOPHY_NONE, "NONE", 0, "None", ""}, //{WOPHY_ENJI, "ENJI", 0, "Enji", ""}, @@ -369,6 +370,7 @@ void RNA_def_world(BlenderRNA *brna) //{WOPHY_ODE, "ODE", 0, "ODE", ""}, {WOPHY_BULLET, "BULLET", 0, "Bullet", ""}, {0, NULL, 0, NULL, NULL}}; +*/ srna= RNA_def_struct(brna, "World", "ID"); RNA_def_struct_ui_text(srna, "World", "World datablock describing the environment and ambient lighting of a scene."); @@ -422,49 +424,6 @@ void RNA_def_world(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle."); RNA_def_property_update(prop, NC_WORLD, NULL); - /* game settings */ - /* should go in a fake substruct however not sure if they move about */ - prop= RNA_def_property(srna, "game_fps", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "ticrate"); - RNA_def_property_range(prop, 1, 120); - RNA_def_property_ui_text(prop, "Frames Per Second", "The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate."); - - prop= RNA_def_property(srna, "game_logic_step_max", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "maxlogicstep"); - RNA_def_property_range(prop, 1, 5); - RNA_def_property_ui_text(prop, "Max Logic Steps", "The maxmimum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics."); - - prop= RNA_def_property(srna, "game_physics_substep", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "physubstep"); - RNA_def_property_range(prop, 1, 5); - RNA_def_property_ui_text(prop, "Physics Sub Steps", "The maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime."); - - prop= RNA_def_property(srna, "game_physics_step_max", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "maxphystep"); - RNA_def_property_range(prop, 1, 5); - RNA_def_property_ui_text(prop, "Max Physics Steps", "The number of simulation substep per physic timestep, higher value give better physics precision."); - - prop= RNA_def_property(srna, "game_use_occlusion_culling", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_DBVT_CULLING); - RNA_def_property_ui_text(prop, "Enabled", "Use optimized Bullet DBVT tree for view frustrum and occlusion culling"); - - prop= RNA_def_property(srna, "game_occlusion_culling_resolution", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "occlusionRes"); - RNA_def_property_range(prop, 128, 1024); - RNA_def_property_ui_text(prop, "Occlusion Resolution", "The size of the occlusion buffer in pixel, use higher value for better precsion (slower)."); - - - /* physics */ - prop= RNA_def_property(srna, "physics_engine", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "physicsEngine"); - RNA_def_property_enum_items(prop, physics_engine_items); - RNA_def_property_ui_text(prop, "Physics Engine", "Physics engine used for physics simulation in the game engine."); - - prop= RNA_def_property(srna, "physics_gravity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "gravity"); - RNA_def_property_range(prop, 0.0, 25.0); - RNA_def_property_ui_text(prop, "Physics Gravity", "Gravitational constant used for physics simulation in the game engine."); - /* nested structs */ prop= RNA_def_property(srna, "ambient_occlusion", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_struct_type(prop, "WorldAmbientOcclusion"); diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index fb222b419c3..b62667627a1 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -332,8 +332,8 @@ extern "C" void StartKetsjiShell(struct bContext *C, int always_use_expand_frami ketsjiengine->SetGame2IpoMode(game2ipo,startFrame); // Quad buffered needs a special window. - if (blscene->r.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) - rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->r.stereomode); + if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) + rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); } if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME) @@ -396,8 +396,8 @@ extern "C" void StartKetsjiShell(struct bContext *C, int always_use_expand_frami #endif //initialize Dome Settings - if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME) - ketsjiengine->InitDome(blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometilt, blscene->r.dometext); + if(blscene->gm.stereoflag == STEREO_DOME) + ketsjiengine->InitDome(blscene->gm.dome.res, blscene->gm.dome.mode, blscene->gm.dome.angle, blscene->gm.dome.resbuf, blscene->gm.dome.tilt, blscene->gm.dome.warptext); if (sceneconverter) { @@ -672,8 +672,8 @@ extern "C" void StartKetsjiShellSimulation(struct wmWindow *win, } // Quad buffered needs a special window. - if (blscene->r.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) - rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->r.stereomode); + if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) + rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME) { diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 177f261e40b..072889a530f 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1931,39 +1931,35 @@ void BL_ConvertBlenderObjects(struct Main* maggie, aspect_width = canvas->GetWidth(); aspect_height = canvas->GetHeight(); } else { - if (blenderscene->framing.type == SCE_GAMEFRAMING_BARS) { + if (blenderscene->gm.framing.type == SCE_GAMEFRAMING_BARS) { frame_type = RAS_FrameSettings::e_frame_bars; - } else if (blenderscene->framing.type == SCE_GAMEFRAMING_EXTEND) { + } else if (blenderscene->gm.framing.type == SCE_GAMEFRAMING_EXTEND) { frame_type = RAS_FrameSettings::e_frame_extend; } else { frame_type = RAS_FrameSettings::e_frame_scale; } - aspect_width = blenderscene->r.xsch; - aspect_height = blenderscene->r.ysch; + aspect_width = blenderscene->gm.xsch; + aspect_height = blenderscene->gm.ysch; } RAS_FrameSettings frame_settings( frame_type, - blenderscene->framing.col[0], - blenderscene->framing.col[1], - blenderscene->framing.col[2], + blenderscene->gm.framing.col[0], + blenderscene->gm.framing.col[1], + blenderscene->gm.framing.col[2], aspect_width, aspect_height ); kxscene->SetFramingType(frame_settings); - kxscene->SetGravity(MT_Vector3(0,0,(blenderscene->world != NULL) ? -blenderscene->world->gravity : -9.8)); + kxscene->SetGravity(MT_Vector3(0,0, -blenderscene->gm.gravity)); /* set activity culling parameters */ - if (blenderscene->world) { - kxscene->SetActivityCulling( (blenderscene->world->mode & WO_ACTIVITY_CULLING) != 0); - kxscene->SetActivityCullingRadius(blenderscene->world->activityBoxRadius); - kxscene->SetDbvtCulling((blenderscene->world->mode & WO_DBVT_CULLING) != 0); - } else { - kxscene->SetActivityCulling(false); - kxscene->SetDbvtCulling(false); - } + kxscene->SetActivityCulling( (blenderscene->gm.mode & WO_ACTIVITY_CULLING) != 0); + kxscene->SetActivityCullingRadius(blenderscene->gm.activityBoxRadius); + kxscene->SetDbvtCulling((blenderscene->gm.mode & WO_DBVT_CULLING) != 0); + // no occlusion culling by default kxscene->SetDbvtOcclusionRes(0); diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index e5932180fe1..a3805bd4317 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -700,8 +700,8 @@ bool GPG_Application::startEngine(void) #endif //initialize Dome Settings - if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME) - m_ketsjiengine->InitDome(m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometilt, m_startScene->r.dometext); + if(m_startScene->gm.stereoflag == STEREO_DOME) + m_ketsjiengine->InitDome(m_startScene->gm.dome.res, m_startScene->gm.dome.mode, m_startScene->gm.dome.angle, m_startScene->gm.dome.resbuf, m_startScene->gm.dome.tilt, m_startScene->gm.dome.warptext); // Set the GameLogic.globalDict from marshal'd data, so we can // load new blend files and keep data in GameLogic.globalDict diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index 83ba2778ad6..d16348defb2 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -451,10 +451,10 @@ RAS_IRasterizer::StereoMode RAS_OpenGLRasterizer::GetStereoMode() bool RAS_OpenGLRasterizer::Stereo() { - if(m_stereomode == RAS_STEREO_NOSTEREO || m_stereomode == RAS_STEREO_DOME) - return false; - else + if(m_stereomode > RAS_STEREO_NOSTEREO) // > 0 return true; + else + return false; } bool RAS_OpenGLRasterizer::InterlacedStereo() From c72064272f7ef64070339a7622dc7305007de8c2 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 20 Jul 2009 20:34:14 +0000 Subject: [PATCH 285/512] 2.5 Lamps: * Replaced RNA ENUM hacks for "shadow method" and "shadow_ray_sampling_method" with modifications in the layout file. --- release/ui/buttons_data_lamp.py | 31 +++++++++++++---------- source/blender/makesrna/intern/rna_lamp.c | 19 +++----------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index b70734d2fa5..aa1b9db8334 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -124,10 +124,7 @@ class DATA_PT_sky(DataButtonsPanel): col.itemR(lamp, "sun_brightness", text="Brightness") col.itemR(lamp, "sun_size", text="Size") col.itemR(lamp, "backscattered_light", text="Back Light") - - - class DATA_PT_atmosphere(DataButtonsPanel): __idname__ = "DATA_PT_atmosphere" __label__ = "Atmosphere" @@ -168,10 +165,15 @@ class DATA_PT_shadow(DataButtonsPanel): def draw(self, context): layout = self.layout lamp = context.lamp - - layout.itemR(lamp, "shadow_method", expand=True) - if lamp.shadow_method in ('BUFFER_SHADOW', 'RAY_SHADOW'): + row = layout.row(align=True) + row.item_enumR(lamp, "shadow_method", 'NOSHADOW') + row.item_enumR(lamp, "shadow_method", 'RAY_SHADOW') + if lamp.type == 'SPOT': + row.item_enumR(lamp, "shadow_method", 'BUFFER_SHADOW') + + + if lamp.shadow_method != 'NOSHADOW': split = layout.split() @@ -184,9 +186,12 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.shadow_method == 'RAY_SHADOW': - col = layout.column() - col.itemL(text="Sampling:") - col.row().itemR(lamp, "shadow_ray_sampling_method", expand=True) + row = layout.row(align=True) + layout.itemL(text="Sampling:") + row.item_enumR(lamp, "shadow_ray_sampling_method", 'ADAPTIVE_QMC') + row.item_enumR(lamp, "shadow_ray_sampling_method", 'CONSTANT_QMC') + if lamp.type == 'AREA': + row.item_enumR(lamp, "shadow_ray_sampling_method", 'CONSTANT_JITTERED') if lamp.type in ('POINT', 'SUN', 'SPOT'): flow = layout.column_flow() @@ -206,10 +211,10 @@ class DATA_PT_shadow(DataButtonsPanel): flow.itemR(lamp, "jitter") if lamp.shadow_method == 'BUFFER_SHADOW': - col = layout.column() - col.itemL(text="Buffer Type:") - col.row().itemR(lamp, "shadow_buffer_type", expand=True) - + row = layout.row(align=True) + row.itemL(text="Buffer Type:") + layout.itemR(lamp, "shadow_buffer_type", expand=True) + if lamp.shadow_buffer_type in ('REGULAR', 'HALFWAY'): flow = layout.column_flow() flow.itemL(text="Sample Buffers:") diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index b83036be8fb..dd2681cb092 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -389,31 +389,20 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area) PropertyRNA *prop; static EnumPropertyItem prop_shadow_items[] = { - {0, "NOSHADOW", 0, "No Shadow", ""}, - {LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow."}, - {0, NULL, 0, NULL, NULL}}; - - static EnumPropertyItem prop_spot_shadow_items[] = { {0, "NOSHADOW", 0, "No Shadow", ""}, {LA_SHAD_BUF, "BUFFER_SHADOW", 0, "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."}, {LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow."}, {0, NULL, 0, NULL, NULL}}; - + static EnumPropertyItem prop_ray_sampling_method_items[] = { {LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""}, {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""}, + {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", "For Area lamps only."}, {0, NULL, 0, NULL, NULL}}; - - static EnumPropertyItem prop_spot_ray_sampling_method_items[] = { - {LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""}, - {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""}, - {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""}, - {0, NULL, 0, NULL, NULL}}; - prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode"); - RNA_def_property_enum_items(prop, (spot)? prop_spot_shadow_items: prop_shadow_items); + RNA_def_property_enum_items(prop, prop_shadow_items); RNA_def_property_ui_text(prop, "Shadow Method", "Method to compute lamp shadow with."); RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); @@ -430,7 +419,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area) prop= RNA_def_property(srna, "shadow_ray_sampling_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "ray_samp_method"); - RNA_def_property_enum_items(prop, (area)? prop_spot_ray_sampling_method_items: prop_ray_sampling_method_items); + RNA_def_property_enum_items(prop, prop_ray_sampling_method_items); RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower."); RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); From bb0eab7f93c6a16662d86f5cb7e2d09e2d19977f Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Mon, 20 Jul 2009 20:42:13 +0000 Subject: [PATCH 286/512] fix from last commit. I thought """ """ could be used everywhere to make comments in python --- release/ui/space_logic.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index 5f56c0e4537..13400e276b5 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -138,24 +138,12 @@ class LOGIC_PT_physics(bpy.types.Panel): if gs.physics_engine != "NONE": flow.itemR(gs, "physics_gravity") - split = layout.split() - col = split.column() - col.itemR(gs, "use_occlusion_culling", text="Enable Occlusion Culling") + row = layout.row() + row.itemR(gs, "use_occlusion_culling", text="Enable Occlusion Culling") - sub = split.column() - sub.active = gs.use_occlusion_culling - sub.itemR(gs, "occlusion_culling_resolution", text="resol.") - -# Activity Culling is deprecated I think. Let's leave it commented by now -""" - split = layout.split() - col = split.column() - col.itemR(gs, "activity_culling") - - sub = split.column() - sub.active = gs.activity_culling - sub.itemR(gs, "activity_culling_box_radius") -""" + row = layout.row() + row.active = gs.use_occlusion_culling + row.itemR(gs, "occlusion_culling_resolution", text="resol.") split = layout.split() col = split.column(align=True) From a3366cb8f03b2bd5d050c61ba794acb939e75f05 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Mon, 20 Jul 2009 21:31:32 +0000 Subject: [PATCH 287/512] UI layouts Changed order of panels in scene buttons to better follow order of importance, putting the post-processing options further down. Cleaned up game physics properties --- release/ui/buttons_game.py | 83 ++++++++++++++++------------- release/ui/buttons_physics_field.py | 1 + release/ui/buttons_scene.py | 6 +-- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index 01937caf5a7..356b7913217 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -42,45 +42,57 @@ class GAME_PT_physics(GameButtonsPanel): game = ob.game - flow = layout.column_flow() - flow.active = True - flow.itemR(game, "physics_type") - flow.itemR(game, "actor") - - row = layout.row() - row.itemR(game, "ghost") - row.itemR(ob, "restrict_render", text="Invisible") # out of place but useful - - flow = layout.column_flow() - flow.itemR(game, "mass") - flow.itemR(game, "radius") - flow.itemR(game, "no_sleeping") - flow.itemR(game, "damping") - flow.itemR(game, "rotation_damping") - flow.itemR(game, "minimum_velocity") - flow.itemR(game, "maximum_velocity") - - row = layout.row() - row.itemR(game, "do_fh") - row.itemR(game, "rotation_fh") - - flow = layout.column_flow() - flow.itemR(game, "form_factor") - flow.itemR(game, "anisotropic_friction") - - flow = layout.column_flow() - flow.active = game.anisotropic_friction - flow.itemR(game, "friction_coefficients") + layout.itemR(game, "physics_type") + layout.itemS() + split = layout.split() + col = split.column() + + col.itemR(game, "actor") + + col.itemR(game, "ghost") + col.itemR(ob, "restrict_render", text="Invisible") # out of place but useful + col = split.column() + col.itemR(game, "do_fh", text="Use Material Physics") + col.itemR(game, "rotation_fh", text="Rotate From Normal") + + layout.itemS() + split = layout.split() + col = split.column() + + col.itemR(game, "mass") + col.itemR(game, "radius") + col.itemR(game, "no_sleeping") + col.itemR(game, "form_factor") + col.itemS() + col.itemL(text="Damping:") + col.itemR(game, "damping", text="Translation", slider=True) + col.itemR(game, "rotation_damping", text="Rotation", slider=True) + + col = split.column() + + col.itemL(text="Velocity:") + col.itemR(game, "minimum_velocity", text="Minimum") + col.itemR(game, "maximum_velocity", text="Maximum") + col.itemS() + col.itemR(game, "anisotropic_friction") + + colsub = col.column() + colsub.active = game.anisotropic_friction + colsub.itemR(game, "friction_coefficients", text="", slider=True) + + layout.itemS() split = layout.split() sub = split.column() - sub.itemR(game, "lock_x_axis") - sub.itemR(game, "lock_y_axis") - sub.itemR(game, "lock_z_axis") + sub.itemL(text="Lock Translation:") + sub.itemR(game, "lock_x_axis", text="X") + sub.itemR(game, "lock_y_axis", text="Y") + sub.itemR(game, "lock_z_axis", text="Z") sub = split.column() - sub.itemR(game, "lock_x_rot_axis") - sub.itemR(game, "lock_y_rot_axis") - sub.itemR(game, "lock_z_rot_axis") + sub.itemL(text="Lock Rotation:") + sub.itemR(game, "lock_x_rot_axis", text="X") + sub.itemR(game, "lock_y_rot_axis", text="Y") + sub.itemR(game, "lock_z_rot_axis", text="Z") class GAME_PT_collision_bounds(GameButtonsPanel): @@ -111,7 +123,6 @@ class GAME_PT_collision_bounds(GameButtonsPanel): flow.itemR(game, "collision_margin") - bpy.types.register(GAME_PT_context_game) bpy.types.register(GAME_PT_data) bpy.types.register(GAME_PT_physics) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index c2ee744c08b..3a9622b0657 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -86,6 +86,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel): row.itemR(field, "falloff_power", text="Power") row.itemR(field, "positive_z", text="Positive Z") + layout.itemS() split = layout.split() sub = split.column() diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index a73b42b88e4..2b47003e970 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -412,13 +412,13 @@ class RENDER_PT_stamp(RenderButtonsPanel): rowsub.itemR(rd, "stamp_note_text", text="") bpy.types.register(RENDER_PT_render) +bpy.types.register(RENDER_PT_layers) bpy.types.register(RENDER_PT_dimensions) bpy.types.register(RENDER_PT_antialiasing) -bpy.types.register(RENDER_PT_layers) bpy.types.register(RENDER_PT_shading) -bpy.types.register(RENDER_PT_post_processing) -bpy.types.register(RENDER_PT_performance) bpy.types.register(RENDER_PT_output) bpy.types.register(RENDER_PT_encoding) +bpy.types.register(RENDER_PT_performance) +bpy.types.register(RENDER_PT_post_processing) bpy.types.register(RENDER_PT_stamp) From 01b787636b468a1d37a27bb7601de5b0dea9c4b0 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Mon, 20 Jul 2009 22:36:56 +0000 Subject: [PATCH 288/512] fix for recent stereo changes+tweaks (it's the 3rd commit in a row. But as they say, the 3rd is always a charm ;) I still think we have a little mess with the DEFINE parameters in BGE (as in RAS_IRasterizer::StereoMode). We used to have them duplicated and hardcoded in 2.4xx, but I think we can do it in another way now. (I didn't change gameplayer, but I can do it once we have it linking and building properly) --- release/ui/space_logic.py | 6 ++--- source/blender/blenloader/intern/readfile.c | 24 ++++++++++--------- source/blender/makesdna/DNA_scene_types.h | 2 +- source/blender/makesrna/intern/rna_scene.c | 2 +- .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 12 ++++++---- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index 13400e276b5..83d48896c3b 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -95,16 +95,16 @@ class LOGIC_PT_stereo(bpy.types.Panel): if stereo_mode == 'STEREO': col = layout.column(align=True) row = col.row() + row.item_enumR(gs, "stereo_mode", "ANAGLYPH") row.item_enumR(gs, "stereo_mode", "QUADBUFFERED") - row.item_enumR(gs, "stereo_mode", "ABOVEBELOW") row = col.row() row.item_enumR(gs, "stereo_mode", "INTERLACED") - row.item_enumR(gs, "stereo_mode", "ANAGLYPH") + row.item_enumR(gs, "stereo_mode", "VINTERLACE") row = col.row() row.item_enumR(gs, "stereo_mode", "SIDEBYSIDE") - row.item_enumR(gs, "stereo_mode", "VINTERLACE") + row.item_enumR(gs, "stereo_mode", "ABOVEBELOW") # row = layout.column_flow() # row.itemR(gs, "stereo_mode") diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 46db4109440..f258746dafe 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9214,6 +9214,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) /* TODO: should be moved into one of the version blocks once this branch moves to trunk and we can bump the version (or sub-version.) */ { + World *wo; Object *ob; Material *ma; Scene *sce; @@ -9347,7 +9348,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) sce->gm.stereomode = STEREO_ANAGLYPH; } else - sce->gm.stereoflag = STEREO_ENABLE; + sce->gm.stereoflag = STEREO_ENABLED; //Framing sce->gm.framing = sce->framing; @@ -9357,16 +9358,17 @@ static void do_versions(FileData *fd, Library *lib, Main *main) sce->gm.depth= sce->r.depth; //Physic (previously stored in world) - if (0){ -// if (sce->world){ // XXX I think we need to run lib_link_all() before do_version() - sce->gm.gravity = sce->world->gravity; - sce->gm.physicsEngine= sce->world->physicsEngine; - sce->gm.mode = sce->world->mode; - sce->gm.occlusionRes = sce->world->occlusionRes; - sce->gm.ticrate = sce->world->ticrate; - sce->gm.maxlogicstep = sce->world->maxlogicstep; - sce->gm.physubstep = sce->world->physubstep; - sce->gm.maxphystep = sce->world->maxphystep; + //temporarily getting the correct world address + wo = newlibadr(fd, sce->id.lib, sce->world); + if (wo){ + sce->gm.gravity = wo->gravity; + sce->gm.physicsEngine= wo->physicsEngine; + sce->gm.mode = wo->mode; + sce->gm.occlusionRes = wo->occlusionRes; + sce->gm.ticrate = wo->ticrate; + sce->gm.maxlogicstep = wo->maxlogicstep; + sce->gm.physubstep = wo->physubstep; + sce->gm.maxphystep = wo->maxphystep; } else{ sce->gm.gravity =9.8f; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 31d7a63b31b..516a718849b 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -403,7 +403,7 @@ typedef struct GameData { float pad12; } GameData; #define STEREO_NOSTEREO 1 -#define STEREO_ENABLE 2 +#define STEREO_ENABLED 2 #define STEREO_DOME 3 //#define STEREO_NOSTEREO 1 diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index a41bff8431c..bf122c1a13c 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -586,7 +586,7 @@ void rna_def_scene_game_data(BlenderRNA *brna) static EnumPropertyItem stereo_items[] ={ {STEREO_NOSTEREO, "NO_STEREO", 0, "No Stereo", ""}, - {STEREO_ENABLE, "STEREO", 0, "Stereo", ""}, + {STEREO_ENABLED, "STEREO", 0, "Stereo", ""}, {STEREO_DOME, "DOME", 0, "Dome", ""}, {0, NULL, 0, NULL, NULL}}; diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index b62667627a1..03dd5d07eb0 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -332,8 +332,10 @@ extern "C" void StartKetsjiShell(struct bContext *C, int always_use_expand_frami ketsjiengine->SetGame2IpoMode(game2ipo,startFrame); // Quad buffered needs a special window. - if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) - rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); + if(blscene->gm.stereoflag == STEREO_ENABLED){ + if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) + rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); + } } if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME) @@ -672,8 +674,10 @@ extern "C" void StartKetsjiShellSimulation(struct wmWindow *win, } // Quad buffered needs a special window. - if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) - rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); + if(blscene->gm.stereoflag == STEREO_ENABLED){ + if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) + rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); + } if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME) { From b4353a84439085ac7d4bb7da2daed983637a75cc Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Mon, 20 Jul 2009 23:52:53 +0000 Subject: [PATCH 289/512] Initial code for boids v2 Too many new features to list! But here are the biggies: - Boids can move on air and/or land, or climb a goal object. - Proper interaction with collision objects. * Closest collision object in negative z direction is considered as ground. * Other collision objects are obstacles and boids collide with them. - Boid behavior rules are now added to a dynamic list. * Many new rules and many still not implemented. * Different rule evaluation modes (fuzzy, random, average). - Only particle systems defined by per system "boid relations" are considered for simulation of that system. * This is in addition to the boids own system of course. * Relations define other systems as "neutral", "friend" or "enemy". - All effectors now effect boid physics, not boid brains. * This allows forcing boids somewhere. * Exception to this is new "boid" effector, which defines boid predators (positive strength) and goals (negative strength). Known issue: - Boid health isn't yet stored in pointcache so simulations with "fight" rule are not be read from cache properly. - Object/Group visualization object's animation is not played in "particle time". This is definately the wanted behavior, but isn't possible with the current state of dupliobject code. Other new features: - Particle systems can now be named separately from particle settings. * Default name for particle settings is now "ParticleSettings" instead of "PSys" - Per particle system list of particle effector weights. * Enables different effection strengths for particles from different particle systems with without messing around with effector group setting. Other code changes: - KDTree now supports range search as it's needed for new boids. - "Keyed particle targets" renamed as general "particle targets", as they're needed for boids too. (this might break some files saved with new keyed particles) Bug fixes: - Object & group visualizations didn't work. - Interpolating pointcache didn't do rotation. --- release/ui/buttons_particle.py | 273 ++- release/ui/buttons_physics_field.py | 7 +- source/blender/blenkernel/BKE_boids.h | 62 + source/blender/blenkernel/BKE_particle.h | 29 +- source/blender/blenkernel/intern/boids.c | 1526 +++++++++++++++++ source/blender/blenkernel/intern/depsgraph.c | 80 +- source/blender/blenkernel/intern/effect.c | 3 + source/blender/blenkernel/intern/modifier.c | 50 +- source/blender/blenkernel/intern/object.c | 46 +- source/blender/blenkernel/intern/particle.c | 55 +- .../blenkernel/intern/particle_system.c | 1234 +++++-------- source/blender/blenlib/BLI_kdtree.h | 6 +- source/blender/blenlib/intern/BLI_kdtree.c | 113 +- source/blender/blenloader/intern/readfile.c | 74 +- source/blender/blenloader/intern/writefile.c | 54 +- source/blender/editors/include/ED_physics.h | 1 + .../blender/editors/physics/physics_boids.c | 433 +++++ source/blender/editors/space_api/spacetypes.c | 1 + .../editors/space_buttons/buttons_intern.h | 8 +- .../editors/space_buttons/buttons_ops.c | 112 +- .../editors/space_buttons/space_buttons.c | 8 +- .../blender/editors/space_view3d/drawobject.c | 23 +- source/blender/makesdna/DNA_modifier_types.h | 5 + source/blender/makesdna/DNA_object_force.h | 1 + source/blender/makesdna/DNA_particle_types.h | 68 +- source/blender/makesdna/intern/makesdna.c | 2 + source/blender/makesrna/RNA_access.h | 2 +- source/blender/makesrna/RNA_enum_types.h | 1 + source/blender/makesrna/intern/makesrna.c | 1 + source/blender/makesrna/intern/rna_boid.c | 615 +++++++ source/blender/makesrna/intern/rna_fluidsim.c | 2 +- source/blender/makesrna/intern/rna_internal.h | 1 + .../makesrna/intern/rna_object_force.c | 3 +- source/blender/makesrna/intern/rna_particle.c | 368 ++-- 34 files changed, 4074 insertions(+), 1193 deletions(-) create mode 100644 source/blender/blenkernel/BKE_boids.h create mode 100644 source/blender/blenkernel/intern/boids.c create mode 100644 source/blender/editors/physics/physics_boids.c create mode 100644 source/blender/makesrna/intern/rna_boid.c diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index 56e586a7271..47d325a5940 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -40,27 +40,33 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): col.itemO("object.particle_system_remove", icon="ICON_ZOOMOUT", text="") if psys: - split = layout.split(percentage=0.65) + part = psys.settings - split.template_ID(psys, "settings", new="particle.new") + split = layout.split(percentage=0.32) + col = split.column() + col.itemL(text="Name:") + if part.type in ('EMITTER', 'REACTOR', 'HAIR'): + col.itemL(text="Settings:") + col.itemL(text="Type:") + + col = split.column() + col.itemR(psys, "name", text="") + if part.type in ('EMITTER', 'REACTOR', 'HAIR'): + col.template_ID(psys, "settings", new="particle.new") #row = layout.row() #row.itemL(text="Viewport") #row.itemL(text="Render") - part = psys.settings - if part: - ptype = psys.settings.type - if ptype not in ('EMITTER', 'REACTOR', 'HAIR'): + if part.type not in ('EMITTER', 'REACTOR', 'HAIR'): layout.itemL(text="No settings for fluid particles") return - - split = layout.split(percentage=0.65) - split.enabled = particle_panel_enabled(psys) - split.itemR(part, "type") - split.itemR(psys, "seed") + row=col.row() + row.enabled = particle_panel_enabled(psys) + row.itemR(part, "type", text="") + row.itemR(psys, "seed") split = layout.split(percentage=0.65) if part.type=='HAIR': @@ -183,6 +189,13 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): class PARTICLE_PT_initial(ParticleButtonsPanel): __idname__= "PARTICLE_PT_initial" __label__ = "Velocity" + + def poll(self, context): + if particle_panel_poll(context): + psys = context.particle_system + return psys.settings.physics_type != 'BOIDS' + else: + return False def draw(self, context): layout = self.layout @@ -250,13 +263,11 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): psys = context.particle_system part = psys.settings - layout.enabled = layout.enabled = particle_panel_enabled(psys) + layout.enabled = particle_panel_enabled(psys) row = layout.row() row.itemR(part, "physics_type", expand=True) if part.physics_type != 'NO': - layout.itemR(part, "effector_group") - row = layout.row() col = row.column(align=True) col.itemR(part, "particle_size") @@ -264,12 +275,10 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): col = row.column(align=True) col.itemR(part, "mass") col.itemR(part, "sizemass", text="Multiply mass with size") - - split = layout.split() - - sub = split.column() if part.physics_type == 'NEWTON': + split = layout.split() + sub = split.column() sub.itemL(text="Forces:") sub.itemR(part, "brownian_factor") @@ -280,6 +289,9 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): sub.itemR(part, "acceleration") elif part.physics_type == 'KEYED': + split = layout.split() + sub = split.column() + row = layout.row() col = row.column() col.active = not psys.keyed_timing @@ -287,38 +299,189 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): row.itemR(psys, "keyed_timing", text="Use Timing") layout.itemL(text="Keys:") + elif part.physics_type=='BOIDS': + boids = part.boids + + + row = layout.row() + row.itemR(boids, "allow_flight") + row.itemR(boids, "allow_land") + row.itemR(boids, "allow_climb") + + split = layout.split() + + sub = split.column() + col = sub.column(align=True) + col.active = boids.allow_flight + col.itemR(boids, "air_max_speed") + col.itemR(boids, "air_min_speed", slider="True") + col.itemR(boids, "air_max_acc", slider="True") + col.itemR(boids, "air_max_ave", slider="True") + col.itemR(boids, "air_personal_space") + row = col.row() + row.active = (boids.allow_land or boids.allow_climb) and boids.allow_flight + row.itemR(boids, "landing_smoothness") + + sub = split.column() + col = sub.column(align=True) + col.active = boids.allow_land or boids.allow_climb + col.itemR(boids, "land_max_speed") + col.itemR(boids, "land_jump_speed") + col.itemR(boids, "land_max_acc", slider="True") + col.itemR(boids, "land_max_ave", slider="True") + col.itemR(boids, "land_personal_space") + col.itemR(boids, "land_stick_force") + row = layout.row() - row.template_list(psys, "keyed_targets", psys, "active_keyed_target_index") + col = row.column(align=True) + col.itemL(text="Battle:") + col.itemR(boids, "health") + col.itemR(boids, "strength") + col.itemR(boids, "aggression") + col.itemR(boids, "accuracy") + col.itemR(boids, "range") + + col = row.column() + col.itemL(text="Misc:") + col.itemR(part, "gravity") + col.itemR(boids, "banking", slider=True) + col.itemR(boids, "height", slider=True) + + if part.physics_type=='NEWTON': + sub.itemR(part, "size_deflect") + sub.itemR(part, "die_on_collision") + sub.itemR(part, "sticky") + elif part.physics_type=='KEYED' or part.physics_type=='BOIDS': + if part.physics_type=='BOIDS': + layout.itemL(text="Relations:") + + row = layout.row() + row.template_list(psys, "targets", psys, "active_particle_target_index") col = row.column() subrow = col.row() subcol = subrow.column(align=True) - subcol.itemO("particle.new_keyed_target", icon="ICON_ZOOMIN", text="") - subcol.itemO("particle.remove_keyed_target", icon="ICON_ZOOMOUT", text="") + subcol.itemO("particle.new_target", icon="ICON_ZOOMIN", text="") + subcol.itemO("particle.remove_target", icon="ICON_ZOOMOUT", text="") subrow = col.row() subcol = subrow.column(align=True) - subcol.itemO("particle.keyed_target_move_up", icon="VICON_MOVE_UP", text="") - subcol.itemO("particle.keyed_target_move_down", icon="VICON_MOVE_DOWN", text="") + subcol.itemO("particle.target_move_up", icon="VICON_MOVE_UP", text="") + subcol.itemO("particle.target_move_down", icon="VICON_MOVE_DOWN", text="") - key = psys.active_keyed_target + key = psys.active_particle_target if key: row = layout.row() - col = row.column() - #doesn't work yet - #col.red_alert = key.valid - col.itemR(key, "object", text="") - col.itemR(key, "system", text="System") - col = row.column(); - col.active = psys.keyed_timing - col.itemR(key, "time") - col.itemR(key, "duration") - - if part.physics_type=='NEWTON' or part.physics_type=='BOIDS': + if part.physics_type=='KEYED': + col = row.column() + #doesn't work yet + #col.red_alert = key.valid + col.itemR(key, "object", text="") + col.itemR(key, "system", text="System") + col = row.column(); + col.active = psys.keyed_timing + col.itemR(key, "time") + col.itemR(key, "duration") + else: + subrow = row.row() + #doesn't work yet + #subrow.red_alert = key.valid + subrow.itemR(key, "object", text="") + subrow.itemR(key, "system", text="System") + + layout.itemR(key, "mode", expand=True) - sub.itemR(part, "size_deflect") - sub.itemR(part, "die_on_collision") - sub.itemR(part, "sticky") +class PARTICLE_PT_boidbrain(ParticleButtonsPanel): + __idname__ = "PARTICLE_PT_boidbrain" + __label__ = "Boid Brain" + + def poll(self, context): + psys = context.particle_system + if psys==None: return False + if psys.settings==None: return False + return psys.settings.physics_type=='BOIDS' + + def draw(self, context): + boids = context.particle_system.settings.boids + layout = self.layout + + # Currently boids can only use the first state so these are commented out for now. + #row = layout.row() + #row.template_list(boids, "states", boids, "active_boid_state_index", compact="True") + #col = row.row() + #subrow = col.row(align=True) + #subrow.itemO("boid.boidstate_add", icon="ICON_ZOOMIN", text="") + #subrow.itemO("boid.boidstate_del", icon="ICON_ZOOMOUT", text="") + #subrow = row.row(align=True) + #subrow.itemO("boid.boidstate_move_up", icon="VICON_MOVE_UP", text="") + #subrow.itemO("boid.boidstate_move_down", icon="VICON_MOVE_DOWN", text="") + + state = boids.active_boid_state + + #layout.itemR(state, "name", text="State name") + + row = layout.row() + row.itemR(state, "ruleset_type") + if state.ruleset_type=='FUZZY': + row.itemR(state, "rule_fuzziness", slider=True) + else: + row.itemL(text="") + + row = layout.row() + row.template_list(state, "rules", state, "active_boid_rule_index") + + col = row.column() + subrow = col.row() + subcol = subrow.column(align=True) + subcol.item_menu_enumO("boid.boidrule_add", "type", icon="ICON_ZOOMIN", text="") + subcol.itemO("boid.boidrule_del", icon="ICON_ZOOMOUT", text="") + subrow = col.row() + subcol = subrow.column(align=True) + subcol.itemO("boid.boidrule_move_up", icon="VICON_MOVE_UP", text="") + subcol.itemO("boid.boidrule_move_down", icon="VICON_MOVE_DOWN", text="") + + rule = state.active_boid_rule + + if rule: + row = layout.row() + row.itemR(rule, "name", text="") + #somebody make nice icons for boids here please! -jahka + row.itemR(rule, "in_air", icon="VICON_MOVE_UP", text="") + row.itemR(rule, "on_land", icon="VICON_MOVE_DOWN", text="") + + row = layout.row() + + if rule.type == 'GOAL': + row.itemR(rule, "object") + row = layout.row() + row.itemR(rule, "predict") + elif rule.type == 'AVOID': + row.itemR(rule, "object") + row = layout.row() + row.itemR(rule, "predict") + row.itemR(rule, "fear_factor") + elif rule.type == 'FOLLOW_PATH': + row.itemL(text="Not yet functional.") + elif rule.type == 'AVOID_COLLISION': + row.itemR(rule, "boids") + row.itemR(rule, "deflectors") + row.itemR(rule, "look_ahead") + elif rule.type == 'FOLLOW_LEADER': + row.itemR(rule, "object", text="") + row.itemR(rule, "distance") + row = layout.row() + row.itemR(rule, "line") + subrow = row.row() + subrow.active = rule.line + subrow.itemR(rule, "queue_size") + elif rule.type == 'AVERAGE_SPEED': + row.itemR(rule, "speed", slider=True) + row.itemR(rule, "wander", slider=True) + row.itemR(rule, "level", slider=True) + elif rule.type == 'FIGHT': + row.itemR(rule, "distance") + row.itemR(rule, "flee_distance") + class PARTICLE_PT_render(ParticleButtonsPanel): __idname__= "PARTICLE_PT_render" @@ -596,6 +759,38 @@ class PARTICLE_PT_children(ParticleButtonsPanel): sub = split.column() sub.itemR(part, "kink_shape", slider=True) +class PARTICLE_PT_effectors(ParticleButtonsPanel): + __idname__= "PARTICLE_PT_effectors" + __label__ = "Effectors" + __default_closed__ = True + + def poll(self, context): + psys = context.particle_system + if psys==None: return False + if psys.settings==None: return False + return True; + + def draw(self, context): + layout = self.layout + + psys = context.particle_system + part = psys.settings + + layout.itemR(part, "effector_group") + + layout.itemR(part, "eweight_all", slider=True) + + layout.itemS() + layout.itemR(part, "eweight_spherical", slider=True) + layout.itemR(part, "eweight_vortex", slider=True) + layout.itemR(part, "eweight_magnetic", slider=True) + layout.itemR(part, "eweight_wind", slider=True) + layout.itemR(part, "eweight_curveguide", slider=True) + layout.itemR(part, "eweight_texture", slider=True) + layout.itemR(part, "eweight_harmonic", slider=True) + layout.itemR(part, "eweight_charge", slider=True) + layout.itemR(part, "eweight_lennardjones", slider=True) + class PARTICLE_PT_vertexgroups(ParticleButtonsPanel): __idname__= "PARTICLE_PT_vertexgroups" __label__ = "Vertexgroups" @@ -667,7 +862,9 @@ bpy.types.register(PARTICLE_PT_cache) bpy.types.register(PARTICLE_PT_emission) bpy.types.register(PARTICLE_PT_initial) bpy.types.register(PARTICLE_PT_physics) +bpy.types.register(PARTICLE_PT_boidbrain) bpy.types.register(PARTICLE_PT_render) bpy.types.register(PARTICLE_PT_draw) bpy.types.register(PARTICLE_PT_children) +bpy.types.register(PARTICLE_PT_effectors) bpy.types.register(PARTICLE_PT_vertexgroups) diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py index 3a9622b0657..cdb90c95228 100644 --- a/release/ui/buttons_physics_field.py +++ b/release/ui/buttons_physics_field.py @@ -53,6 +53,11 @@ class PHYSICS_PT_field(PhysicButtonsPanel): sub.itemR(field, "planar") sub.itemR(field, "surface") + if field.type == "BOID": + sub.itemR(field, "strength") + sub = split.column() + sub.itemR(field, "surface") + if field.type == "MAGNET": sub.itemR(field, "strength") sub = split.column() @@ -75,7 +80,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel): sub.itemR(field, "root_coordinates") sub.itemR(field, "force_2d") - if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET"): + if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "WIND", "VORTEX", "TEXTURE", "MAGNET", "BOID"): layout.itemS() diff --git a/source/blender/blenkernel/BKE_boids.h b/source/blender/blenkernel/BKE_boids.h new file mode 100644 index 00000000000..acceff863b9 --- /dev/null +++ b/source/blender/blenkernel/BKE_boids.h @@ -0,0 +1,62 @@ +/* BKE_particle.h + * + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Janne Karhu. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BKE_BOIDS_H +#define BKE_BOIDS_H + +#include "DNA_boid_types.h" + +typedef struct BoidBrainData { + Scene *scene; + struct Object *ob; + struct ParticleSystem *psys; + struct ParticleSettings *part; + float timestep, cfra, dfra; + float wanted_co[3], wanted_speed; + + /* Goal stuff */ + struct Object *goal_ob; + float goal_co[3]; + float goal_nor[3]; + float goal_priority; +} BoidBrainData; + +void boids_precalc_rules(struct ParticleSettings *part, float cfra); +void boid_brain(BoidBrainData *bbd, int p, struct ParticleData *pa); +void boid_body(BoidBrainData *bbd, struct ParticleData *pa); +void boid_default_settings(BoidSettings *boids); +BoidRule *boid_new_rule(int type); +BoidState *boid_new_state(BoidSettings *boids); +BoidState *boid_duplicate_state(BoidSettings *boids, BoidState *state); +void boid_free_settings(BoidSettings *boids); +BoidSettings *boid_copy_settings(BoidSettings *boids); +BoidState *boid_get_current_state(BoidSettings *boids); +#endif diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index bb0b905b8e3..9f44d3c47cb 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -95,16 +95,6 @@ typedef struct ParticleTexture{ float rough1, rough2, roughe; /* used in path caching */ } ParticleTexture; -typedef struct BoidVecFunc{ - void (*Addf)(float *v, float *v1, float *v2); - void (*Subf)(float *v, float *v1, float *v2); - void (*Mulf)(float *v, float f); - float (*Length)(float *v); - float (*Normalize)(float *v); - float (*Inpf)(float *v1, float *v2); - void (*Copyf)(float *v1, float *v2); -} BoidVecFunc; - typedef struct ParticleSeam{ float v0[3], v1[3]; float nor[3], dir[3], tan[3]; @@ -209,6 +199,19 @@ typedef struct ParticleBillboardData } ParticleBillboardData; +/* container for moving data between deflet_particle and particle_intersect_face */ +typedef struct ParticleCollision +{ + struct Object *ob, *ob_t; // collided and current objects + struct CollisionModifierData *md; // collision modifier for ob_t; + float nor[3]; // normal at collision point + float vel[3]; // velocity of collision point + float co1[3], co2[3]; // ray start and end points + float ray_len; // original length of co2-co1, needed for collision time evaluation + float t; // time of previous collision, needed for substracting face velocity +} +ParticleCollision; + /* ----------- functions needed outside particlesystem ---------------- */ /* particle.c */ int count_particles(struct ParticleSystem *psys); @@ -231,6 +234,7 @@ int psys_ob_has_hair(struct Object *ob); int psys_in_edit_mode(struct Scene *scene, struct ParticleSystem *psys); int psys_check_enabled(struct Object *ob, struct ParticleSystem *psys); +void psys_free_boid_rules(struct ListBase *list); void psys_free_settings(struct ParticleSettings *part); void free_child_path_cache(struct ParticleSystem *psys); void psys_free_path_cache(struct ParticleSystem *psys); @@ -288,6 +292,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]); /* particle_system.c */ +struct ParticleSystem *psys_get_target_system(struct Object *ob, struct ParticleTarget *pt); void psys_count_keyed_targets(struct Object *ob, struct ParticleSystem *psys); void psys_get_reactor_target(struct Object *ob, struct ParticleSystem *psys, struct Object **target_ob, struct ParticleSystem **target_psys); @@ -298,6 +303,8 @@ void psys_make_temp_pointcache(struct Object *ob, struct ParticleSystem *psys); void psys_end_temp_pointcache(struct ParticleSystem *psys); void psys_get_pointcache_start_end(struct Scene *scene, struct ParticleSystem *psys, int *sfra, int *efra); +void psys_check_boid_data(struct ParticleSystem *psys); + void particle_system_update(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys); /* ----------- functions needed only inside particlesystem ------------ */ @@ -321,11 +328,13 @@ float psys_interpolate_value_from_verts(struct DerivedMesh *dm, short from, int void psys_get_from_key(struct ParticleKey *key, float *loc, float *vel, float *rot, float *time); int psys_intersect_dm(struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_uv, float *face_minmax, float *pa_minmax, float radius, float *ipoint); +void particle_intersect_face(void *userdata, int index, const struct BVHTreeRay *ray, struct BVHTreeRayHit *hit); void psys_particle_on_dm(struct DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor); /* particle_system.c */ void initialize_particle(struct ParticleData *pa, int p, struct Object *ob, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd); +int effector_find_co(struct Scene *scene, float *pco, struct SurfaceModifierData *sur, struct Object *ob, struct PartDeflect *pd, float *co, float *nor, float *vel, int *index); void do_effectors(int pa_no, struct ParticleData *pa, struct ParticleKey *state, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, float *texco, float *force_field, float *vel,float framestep, float cfra); void psys_calc_dmcache(struct Object *ob, struct DerivedMesh *dm, struct ParticleSystem *psys); diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c new file mode 100644 index 00000000000..931ad0b3043 --- /dev/null +++ b/source/blender/blenkernel/intern/boids.c @@ -0,0 +1,1526 @@ +/* boids.c + * + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Janne Karhu. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_particle_types.h" +#include "DNA_modifier_types.h" +#include "DNA_object_force.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" +#include "DNA_boid_types.h" +#include "DNA_listBase.h" + +#include "BLI_rand.h" +#include "BLI_arithb.h" +#include "BLI_blenlib.h" +#include "BLI_kdtree.h" +#include "BLI_kdopbvh.h" +#include "BKE_effect.h" +#include "BKE_boids.h" +#include "BKE_particle.h" +#include "BKE_utildefines.h" +#include "BKE_modifier.h" + +#include "RNA_enum_types.h" + +typedef struct BoidValues { + float max_speed, max_acc; + float max_ave, min_speed; + float personal_space, jump_speed; +} BoidValues; + +static int apply_boid_rule(BoidBrainData *bbd, BoidRule *rule, BoidValues *val, ParticleData *pa, float fuzziness); + +static int rule_none(BoidRule *rule, BoidBrainData *data, BoidValues *val, ParticleData *pa) +{ + return 0; +} + +static int rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + BoidRuleGoalAvoid *gabr = (BoidRuleGoalAvoid*) rule; + BoidSettings *boids = bbd->part->boids; + ParticleEffectorCache *ec; + Object *priority_ob = NULL; + float vec[3] = {0.0f, 0.0f, 0.0f}, loc[3] = {0.0f, 0.0f, 0.0f}; + float mul = (rule->type == eBoidRuleType_Avoid ? 1.0 : -1.0); + float priority = 0.0f, len; + int ret = 0; + + /* first find out goal/predator with highest priority */ + /* if rule->ob specified use it */ + if(gabr->ob && (rule->type != eBoidRuleType_Goal || gabr->ob != pa->stick_ob)) { + PartDeflect *pd = gabr->ob->pd; + float vec_to_part[3]; + + if(pd && pd->forcefield == PFIELD_BOID) { + effector_find_co(bbd->scene, pa->prev_state.co, NULL, gabr->ob, pd, loc, vec, NULL, NULL); + + VecSubf(vec_to_part, pa->prev_state.co, loc); + + priority = mul * pd->f_strength * effector_falloff(pd, vec, vec_to_part); + } + else + priority = 1.0; + + priority = 1.0; + priority_ob = gabr->ob; + } + else for(ec=bbd->psys->effectors.first; ec; ec=ec->next) { + if(ec->type & PSYS_EC_EFFECTOR) { + Object *eob = ec->ob; + PartDeflect *pd = eob->pd; + + /* skip current object */ + if(rule->type == eBoidRuleType_Goal && eob == pa->stick_ob) + continue; + + if(pd->forcefield == PFIELD_BOID && mul * pd->f_strength > 0.0f) { + float vec_to_part[3], temp; + + effector_find_co(bbd->scene, pa->prev_state.co, NULL, eob, pd, loc, vec, NULL, NULL); + + VecSubf(vec_to_part, pa->prev_state.co, loc); + + temp = mul * pd->f_strength * effector_falloff(pd, vec, vec_to_part); + + if(temp == 0.0f) + ; /* do nothing */ + else if(temp > priority) { + priority = temp; + priority_ob = eob; + len = VecLength(vec_to_part); + } + /* choose closest object with same priority */ + else if(temp == priority) { + float len2 = VecLength(vec_to_part); + + if(len2 < len) { + priority_ob = eob; + len = len2; + } + } + } + } + } + + /* then use that effector */ + if(priority > (rule->type==eBoidRuleType_Avoid ? gabr->fear_factor : 0.0f)) { /* with avoid, factor is "fear factor" */ + Object *eob = priority_ob; + PartDeflect *pd = eob->pd; + float vec_to_part[3]; + float surface = 0.0f; + float nor[3]; + + if(gabr->options & BRULE_GOAL_AVOID_PREDICT) { + /* estimate future location of target */ + surface = (float)effector_find_co(bbd->scene, pa->prev_state.co, NULL, eob, pd, loc, nor, vec, NULL); + + VecSubf(vec_to_part, pa->prev_state.co, loc); + len = Normalize(vec_to_part); + + VecMulf(vec, len / (val->max_speed * bbd->timestep)); + VecAddf(loc, loc, vec); + VecSubf(vec_to_part, pa->prev_state.co, loc); + } + else { + surface = (float)effector_find_co(bbd->scene, pa->prev_state.co, NULL, eob, pd, loc, nor, NULL, NULL); + + VecSubf(vec_to_part, pa->prev_state.co, loc); + len = VecLength(vec_to_part); + } + + if(rule->type == eBoidRuleType_Goal && boids->options & BOID_ALLOW_CLIMB && surface!=0.0f) { + if(!bbd->goal_ob || bbd->goal_priority < priority) { + bbd->goal_ob = eob; + VECCOPY(bbd->goal_co, loc); + VECCOPY(bbd->goal_nor, nor); + } + } + else if(rule->type == eBoidRuleType_Avoid && pa->boid->mode == eBoidMode_Climbing && + priority > 2.0f * gabr->fear_factor) { + /* detach from surface and try to fly away from danger */ + VECCOPY(vec_to_part, pa->r_ve); + VecMulf(vec_to_part, -1.0f); + } + + VECCOPY(bbd->wanted_co, vec_to_part); + VecMulf(bbd->wanted_co, mul); + + bbd->wanted_speed = val->max_speed * priority; + + /* with goals factor is approach velocity factor */ + if(rule->type == eBoidRuleType_Goal && boids->landing_smoothness > 0.0f) { + float len2 = 2.0f*VecLength(pa->prev_state.vel); + + surface *= pa->size * boids->height; + + if(len2 > 0.0f && len - surface < len2) { + len2 = (len - surface)/len2; + bbd->wanted_speed *= pow(len2, boids->landing_smoothness); + } + } + + ret = 1; + } + + return ret; +} + +static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + BoidRuleAvoidCollision *acbr = (BoidRuleAvoidCollision*) rule; + KDTreeNearest *ptn = NULL; + ParticleEffectorCache *ec; + ParticleTarget *pt; + float vec[3] = {0.0f, 0.0f, 0.0f}, loc[3] = {0.0f, 0.0f, 0.0f}; + float co1[3], vel1[3], co2[3], vel2[3]; + float len, t, inp, t_min = 2.0f; + int n, neighbors = 0, nearest = 0; + int ret = 0; + + //check deflector objects first + if(acbr->options & BRULE_ACOLL_WITH_DEFLECTORS) { + ParticleCollision col; + BVHTreeRayHit hit; + float radius = val->personal_space * pa->size, ray_dir[3]; + + VECCOPY(col.co1, pa->prev_state.co); + VecAddf(col.co2, pa->prev_state.co, pa->prev_state.vel); + VecSubf(ray_dir, col.co2, col.co1); + VecMulf(ray_dir, acbr->look_ahead); + col.t = 0.0f; + hit.index = -1; + hit.dist = col.ray_len = VecLength(ray_dir); + + /* find out closest deflector object */ + for(ec=bbd->psys->effectors.first; ec; ec=ec->next) { + if(ec->type & PSYS_EC_DEFLECT) { + Object *eob = ec->ob; + + /* don't check with current ground object */ + if(eob == pa->stick_ob) + continue; + + col.md = ( CollisionModifierData * ) ( modifiers_findByType ( eob, eModifierType_Collision ) ); + col.ob_t = eob; + + if(col.md && col.md->bvhtree) + BLI_bvhtree_ray_cast(col.md->bvhtree, col.co1, ray_dir, radius, &hit, particle_intersect_face, &col); + } + } + /* then avoid that object */ + if(hit.index>=0) { + /* TODO: not totally happy with this part */ + t = hit.dist/col.ray_len; + + VECCOPY(bbd->wanted_co, col.nor); + + VecMulf(bbd->wanted_co, (1.0f - t) * val->personal_space * pa->size); + + bbd->wanted_speed = sqrt(t) * VecLength(pa->prev_state.vel); + + return 1; + } + } + + //check boids in own system + if(acbr->options & BRULE_ACOLL_WITH_BOIDS) + { + neighbors = BLI_kdtree_range_search(bbd->psys->tree, acbr->look_ahead * VecLength(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); + if(neighbors > 1) for(n=1; nprev_state.co); + VECCOPY(vel1, pa->prev_state.vel); + VECCOPY(co2, (bbd->psys->particles + ptn[n].index)->prev_state.co); + VECCOPY(vel2, (bbd->psys->particles + ptn[n].index)->prev_state.vel); + + VecSubf(loc, co1, co2); + + VecSubf(vec, vel1, vel2); + + inp = Inpf(vec,vec); + + /* velocities not parallel */ + if(inp != 0.0f) { + t = -Inpf(loc, vec)/inp; + /* cpa is not too far in the future so investigate further */ + if(t > 0.0f && t < t_min) { + VECADDFAC(co1, co1, vel1, t); + VECADDFAC(co2, co2, vel2, t); + + VecSubf(vec, co2, co1); + + len = Normalize(vec); + + /* distance of cpa is close enough */ + if(len < 2.0f * val->personal_space * pa->size) { + t_min = t; + + VecMulf(vec, VecLength(vel1)); + VecMulf(vec, (2.0f - t)/2.0f); + VecSubf(bbd->wanted_co, vel1, vec); + bbd->wanted_speed = VecLength(bbd->wanted_co); + ret = 1; + } + } + } + } + } + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + + /* check boids in other systems */ + for(pt=bbd->psys->targets.first; pt; pt=pt->next) { + ParticleSystem *epsys = psys_get_target_system(bbd->ob, pt); + + if(epsys) { + neighbors = BLI_kdtree_range_search(epsys->tree, acbr->look_ahead * VecLength(pa->prev_state.vel), pa->prev_state.co, pa->prev_state.ave, &ptn); + if(neighbors > 0) for(n=0; nprev_state.co); + VECCOPY(vel1, pa->prev_state.vel); + VECCOPY(co2, (epsys->particles + ptn[n].index)->prev_state.co); + VECCOPY(vel2, (epsys->particles + ptn[n].index)->prev_state.vel); + + VecSubf(loc, co1, co2); + + VecSubf(vec, vel1, vel2); + + inp = Inpf(vec,vec); + + /* velocities not parallel */ + if(inp != 0.0f) { + t = -Inpf(loc, vec)/inp; + /* cpa is not too far in the future so investigate further */ + if(t > 0.0f && t < t_min) { + VECADDFAC(co1, co1, vel1, t); + VECADDFAC(co2, co2, vel2, t); + + VecSubf(vec, co2, co1); + + len = Normalize(vec); + + /* distance of cpa is close enough */ + if(len < 2.0f * val->personal_space * pa->size) { + t_min = t; + + VecMulf(vec, VecLength(vel1)); + VecMulf(vec, (2.0f - t)/2.0f); + VecSubf(bbd->wanted_co, vel1, vec); + bbd->wanted_speed = VecLength(bbd->wanted_co); + ret = 1; + } + } + } + } + + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + } + } + + + if(ptn && nearest==0) + MEM_freeN(ptn); + + return ret; +} +static int rule_separate(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + KDTreeNearest *ptn = NULL; + ParticleTarget *pt; + float len = 2.0f * val->personal_space * pa->size + 1.0f; + float vec[3] = {0.0f, 0.0f, 0.0f}; + int neighbors = BLI_kdtree_range_search(bbd->psys->tree, 2.0f * val->personal_space * pa->size, pa->prev_state.co, NULL, &ptn); + int ret = 0; + + if(neighbors > 1 && ptn[1].dist!=0.0f) { + VecSubf(vec, pa->prev_state.co, bbd->psys->particles[ptn[1].index].state.co); + VecMulf(vec, (2.0f * val->personal_space * pa->size - ptn[1].dist) / ptn[1].dist); + VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + bbd->wanted_speed = val->max_speed; + len = ptn[1].dist; + ret = 1; + } + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + + /* check other boid systems */ + for(pt=bbd->psys->targets.first; pt; pt=pt->next) { + ParticleSystem *epsys = psys_get_target_system(bbd->ob, pt); + + if(epsys) { + neighbors = BLI_kdtree_range_search(epsys->tree, 2.0f * val->personal_space * pa->size, pa->prev_state.co, NULL, &ptn); + + if(neighbors > 0 && ptn[0].dist < len) { + VecSubf(vec, pa->prev_state.co, ptn[0].co); + VecMulf(vec, (2.0f * val->personal_space * pa->size - ptn[0].dist) / ptn[1].dist); + VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + bbd->wanted_speed = val->max_speed; + len = ptn[0].dist; + ret = 1; + } + + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + } + } + return ret; +} +static int rule_flock(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + KDTreeNearest ptn[11]; + float vec[3] = {0.0f, 0.0f, 0.0f}, loc[3] = {0.0f, 0.0f, 0.0f}; + int neighbors = BLI_kdtree_find_n_nearest(bbd->psys->tree, 11, pa->state.co, pa->prev_state.ave, ptn); + int n, nearest = 1; + int ret = 0; + + if(neighbors > 1) { + for(n=1; npsys->particles[ptn[n].index].prev_state.co); + VecAddf(vec, vec, bbd->psys->particles[ptn[n].index].prev_state.vel); + } + + VecMulf(loc, 1.0f/((float)neighbors - 1.0f)); + VecMulf(vec, 1.0f/((float)neighbors - 1.0f)); + + VecSubf(loc, loc, pa->prev_state.co); + VecSubf(vec, vec, pa->prev_state.vel); + + VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + VecAddf(bbd->wanted_co, bbd->wanted_co, loc); + bbd->wanted_speed = VecLength(bbd->wanted_co); + + ret = 1; + } + return ret; +} +static int rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + BoidRuleFollowLeader *flbr = (BoidRuleFollowLeader*) rule; + float vec[3] = {0.0f, 0.0f, 0.0f}, loc[3] = {0.0f, 0.0f, 0.0f}; + float mul, len; + int n = (flbr->queue_size <= 1) ? bbd->psys->totpart : flbr->queue_size; + int i, ret = 0, p = pa - bbd->psys->particles; + + if(flbr->ob) { + float vec2[3], t; + + /* first check we're not blocking the leader*/ + VecSubf(vec, flbr->loc, flbr->oloc); + VecMulf(vec, 1.0f/bbd->timestep); + + VecSubf(loc, pa->prev_state.co, flbr->oloc); + + mul = Inpf(vec, vec); + + /* leader is not moving */ + if(mul < 0.01) { + len = VecLength(loc); + /* too close to leader */ + if(len < 2.0f * val->personal_space * pa->size) { + VECCOPY(bbd->wanted_co, loc); + bbd->wanted_speed = val->max_speed; + return 1; + } + } + else { + t = Inpf(loc, vec)/mul; + + /* possible blocking of leader in near future */ + if(t > 0.0f && t < 3.0f) { + VECCOPY(vec2, vec); + VecMulf(vec2, t); + + VecSubf(vec2, loc, vec2); + + len = VecLength(vec2); + + if(len < 2.0f * val->personal_space * pa->size) { + VECCOPY(bbd->wanted_co, vec2); + bbd->wanted_speed = val->max_speed * (3.0f - t)/3.0f; + return 1; + } + } + } + + /* not blocking so try to follow leader */ + if(p && flbr->options & BRULE_LEADER_IN_LINE) { + VECCOPY(vec, bbd->psys->particles[p-1].prev_state.vel); + VECCOPY(loc, bbd->psys->particles[p-1].prev_state.co); + } + else { + VECCOPY(loc, flbr->oloc); + VecSubf(vec, flbr->loc, flbr->oloc); + VecMulf(vec, 1.0/bbd->timestep); + } + + /* fac is seconds behind leader */ + VECADDFAC(loc, loc, vec, -flbr->distance); + + VecSubf(bbd->wanted_co, loc, pa->prev_state.co); + bbd->wanted_speed = VecLength(bbd->wanted_co); + + ret = 1; + } + else if(p % n) { + float vec2[3], t, t_min = 3.0f; + + /* first check we're not blocking any leaders */ + for(i = 0; i< bbd->psys->totpart; i+=n){ + VECCOPY(vec, bbd->psys->particles[i].prev_state.vel); + + VecSubf(loc, pa->prev_state.co, bbd->psys->particles[i].prev_state.co); + + mul = Inpf(vec, vec); + + /* leader is not moving */ + if(mul < 0.01) { + len = VecLength(loc); + /* too close to leader */ + if(len < 2.0f * val->personal_space * pa->size) { + VECCOPY(bbd->wanted_co, loc); + bbd->wanted_speed = val->max_speed; + return 1; + } + } + else { + t = Inpf(loc, vec)/mul; + + /* possible blocking of leader in near future */ + if(t > 0.0f && t < t_min) { + VECCOPY(vec2, vec); + VecMulf(vec2, t); + + VecSubf(vec2, loc, vec2); + + len = VecLength(vec2); + + if(len < 2.0f * val->personal_space * pa->size) { + t_min = t; + VECCOPY(bbd->wanted_co, loc); + bbd->wanted_speed = val->max_speed * (3.0f - t)/3.0f; + ret = 1; + } + } + } + } + + if(ret) return 1; + + /* not blocking so try to follow leader */ + if(flbr->options & BRULE_LEADER_IN_LINE) { + VECCOPY(vec, bbd->psys->particles[p-1].prev_state.vel); + VECCOPY(loc, bbd->psys->particles[p-1].prev_state.co); + } + else { + VECCOPY(vec, bbd->psys->particles[p - p%n].prev_state.vel); + VECCOPY(loc, bbd->psys->particles[p - p%n].prev_state.co); + } + + /* fac is seconds behind leader */ + VECADDFAC(loc, loc, vec, -flbr->distance); + + VecSubf(bbd->wanted_co, loc, pa->prev_state.co); + bbd->wanted_speed = VecLength(bbd->wanted_co); + + ret = 1; + } + + return ret; +} +static int rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + BoidRuleAverageSpeed *asbr = (BoidRuleAverageSpeed*)rule; + float vec[3] = {0.0f, 0.0f, 0.0f}; + + if(asbr->wander > 0.0f) { + /* abuse pa->r_ave for wandering */ + pa->r_ave[0] += asbr->wander * (-1.0f + 2.0f * BLI_frand()); + pa->r_ave[1] += asbr->wander * (-1.0f + 2.0f * BLI_frand()); + pa->r_ave[2] += asbr->wander * (-1.0f + 2.0f * BLI_frand()); + + Normalize(pa->r_ave); + + VECCOPY(vec, pa->r_ave); + + QuatMulVecf(pa->prev_state.rot, vec); + + VECCOPY(bbd->wanted_co, pa->prev_state.ave); + + VecMulf(bbd->wanted_co, 1.1f); + + VecAddf(bbd->wanted_co, bbd->wanted_co, vec); + + /* leveling */ + if(asbr->level > 0.0f) { + Projf(vec, bbd->wanted_co, bbd->psys->part->acc); + VecMulf(vec, asbr->level); + VecSubf(bbd->wanted_co, bbd->wanted_co, vec); + } + } + else { + VECCOPY(bbd->wanted_co, pa->prev_state.ave); + + /* may happen at birth */ + if(Inp2f(bbd->wanted_co,bbd->wanted_co)==0.0f) { + bbd->wanted_co[0] = 2.0f*(0.5f - BLI_frand()); + bbd->wanted_co[1] = 2.0f*(0.5f - BLI_frand()); + bbd->wanted_co[2] = 2.0f*(0.5f - BLI_frand()); + } + + /* leveling */ + if(asbr->level > 0.0f) { + Projf(vec, bbd->wanted_co, bbd->psys->part->acc); + VecMulf(vec, asbr->level); + VecSubf(bbd->wanted_co, bbd->wanted_co, vec); + } + + } + bbd->wanted_speed = asbr->speed * val->max_speed; + + return 1; +} +static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa) +{ + BoidRuleFight *fbr = (BoidRuleFight*)rule; + KDTreeNearest *ptn = NULL; + ParticleTarget *pt; + ParticleData *epars; + ParticleData *enemy_pa; + /* friends & enemies */ + float closest_enemy[3] = {0.0f,0.0f,0.0f}; + float closest_dist = fbr->distance + 1.0f; + float f_strength = 0.0f, e_strength = 0.0f; + float health = 0.0f; + int n, ret = 0; + + /* calculate own group strength */ + int neighbors = BLI_kdtree_range_search(bbd->psys->tree, fbr->distance, pa->prev_state.co, NULL, &ptn); + for(n=0; npsys->particles[ptn[n].index].boid->health; + + f_strength += bbd->part->boids->strength * health; + + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + + /* add other friendlies and calculate enemy strength and find closest enemy */ + for(pt=bbd->psys->targets.first; pt; pt=pt->next) { + ParticleSystem *epsys = psys_get_target_system(bbd->ob, pt); + if(epsys) { + epars = epsys->particles; + + neighbors = BLI_kdtree_range_search(epsys->tree, fbr->distance, pa->prev_state.co, NULL, &ptn); + + health = 0.0f; + + for(n=0; nhealth; + + if(n==0 && pt->mode==PTARGET_MODE_ENEMY && ptn[n].dist < closest_dist) { + VECCOPY(closest_enemy, ptn[n].co); + closest_dist = ptn[n].dist; + enemy_pa = epars + ptn[n].index; + } + } + if(pt->mode==PTARGET_MODE_ENEMY) + e_strength += epsys->part->boids->strength * health; + else if(pt->mode==PTARGET_MODE_FRIEND) + f_strength += epsys->part->boids->strength * health; + + if(ptn){ MEM_freeN(ptn); ptn=NULL; } + } + } + /* decide action if enemy presence found */ + if(e_strength > 0.0f) { + VecSubf(bbd->wanted_co, closest_enemy, pa->prev_state.co); + + /* attack if in range */ + if(closest_dist <= bbd->part->boids->range + pa->size + enemy_pa->size) { + float damage = BLI_frand(); + float enemy_dir[3] = {bbd->wanted_co[0],bbd->wanted_co[1],bbd->wanted_co[2]}; + + Normalize(enemy_dir); + + /* fight mode */ + bbd->wanted_speed = 0.0f; + + /* must face enemy to fight */ + if(Inpf(pa->prev_state.ave, enemy_dir)>0.5f) { + enemy_pa->boid->health -= bbd->part->boids->strength * bbd->timestep * ((1.0f-bbd->part->boids->accuracy)*damage + bbd->part->boids->accuracy); + } + } + else { + /* approach mode */ + bbd->wanted_speed = val->max_speed; + } + + /* check if boid doesn't want to fight */ + if(pa->boid->health/bbd->part->boids->health * bbd->part->boids->aggression < e_strength / f_strength) { + /* decide to flee */ + if(closest_dist < fbr->flee_distance * fbr->distance) { + VecMulf(bbd->wanted_co, -1.0f); + bbd->wanted_speed = val->max_speed; + } + else { /* wait for better odds */ + bbd->wanted_speed = 0.0f; + } + } + + ret = 1; + } + + return ret; +} + +typedef int (*boid_rule_cb)(BoidRule *rule, BoidBrainData *data, BoidValues *val, ParticleData *pa); + +static boid_rule_cb boid_rules[] = { + rule_none, + rule_goal_avoid, + rule_goal_avoid, + rule_avoid_collision, + rule_separate, + rule_flock, + rule_follow_leader, + rule_average_speed, + rule_fight, + //rule_help, + //rule_protect, + //rule_hide, + //rule_follow_path, + //rule_follow_wall +}; + +static void set_boid_values(BoidValues *val, BoidSettings *boids, ParticleData *pa) +{ + if(ELEM(pa->boid->mode, eBoidMode_OnLand, eBoidMode_Climbing)) { + val->max_speed = boids->land_max_speed * pa->boid->health/boids->health; + val->max_acc = boids->land_max_acc * val->max_speed; + val->max_ave = boids->land_max_ave * M_PI * pa->boid->health/boids->health; + val->min_speed = 0.0f; /* no minimum speed on land */ + val->personal_space = boids->land_personal_space; + val->jump_speed = boids->land_jump_speed * pa->boid->health/boids->health; + } + else { + val->max_speed = boids->air_max_speed * pa->boid->health/boids->health; + val->max_acc = boids->air_max_acc * val->max_speed; + val->max_ave = boids->air_max_ave * M_PI * pa->boid->health/boids->health; + val->min_speed = boids->air_min_speed * boids->air_max_speed; + val->personal_space = boids->air_personal_space; + val->jump_speed = 0.0f; /* no jumping in air */ + } +} +static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *ground_co, float *ground_nor) +{ + if(pa->boid->mode == eBoidMode_Climbing) { + SurfaceModifierData *surmd = NULL; + float x[3], v[3]; + + surmd = (SurfaceModifierData *)modifiers_findByType ( pa->stick_ob, eModifierType_Surface ); + + /* take surface velocity into account */ + effector_find_co(bbd->scene, pa->state.co, surmd, NULL, NULL, x, NULL, v, NULL); + VecAddf(x, x, v); + + /* get actual position on surface */ + effector_find_co(bbd->scene, x, surmd, NULL, NULL, ground_co, ground_nor, NULL, NULL); + + return pa->stick_ob; + } + else { + float zvec[3] = {0.0f, 0.0f, 2000.0f}; + ParticleCollision col; + BVHTreeRayHit hit; + ParticleEffectorCache *ec; + float radius = 0.0f, t, ray_dir[3]; + + VECCOPY(col.co1, pa->state.co); + VECCOPY(col.co2, pa->state.co); + VecAddf(col.co1, col.co1, zvec); + VecSubf(col.co2, col.co2, zvec); + VecSubf(ray_dir, col.co2, col.co1); + col.t = 0.0f; + hit.index = -1; + hit.dist = col.ray_len = VecLength(ray_dir); + + /* find out upmost deflector object */ + for(ec=bbd->psys->effectors.first; ec; ec=ec->next) { + if(ec->type & PSYS_EC_DEFLECT) { + Object *eob = ec->ob; + + col.md = ( CollisionModifierData * ) ( modifiers_findByType ( eob, eModifierType_Collision ) ); + col.ob_t = eob; + + if(col.md && col.md->bvhtree) + BLI_bvhtree_ray_cast(col.md->bvhtree, col.co1, ray_dir, radius, &hit, particle_intersect_face, &col); + } + } + /* then use that object */ + if(hit.index>=0) { + t = hit.dist/col.ray_len; + VecLerpf(ground_co, col.co1, col.co2, t); + VECCOPY(ground_nor, col.nor); + Normalize(ground_nor); + return col.ob; + } + else { + /* default to z=0 */ + VECCOPY(ground_co, pa->state.co); + ground_co[2] = 0; + ground_nor[0] = ground_nor[1] = 0.0f; + ground_nor[2] = 1.0f; + return NULL; + } + } +} +static int boid_rule_applies(ParticleData *pa, BoidSettings *boids, BoidRule *rule) +{ + if(rule==NULL) + return 0; + + if(ELEM(pa->boid->mode, eBoidMode_OnLand, eBoidMode_Climbing) && rule->flag & BOIDRULE_ON_LAND) + return 1; + + if(pa->boid->mode==eBoidMode_InAir && rule->flag & BOIDRULE_IN_AIR) + return 1; + + return 0; +} +void boids_precalc_rules(ParticleSettings *part, float cfra) +{ + BoidState *state = part->boids->states.first; + BoidRule *rule; + for(; state; state=state->next) { + for(rule = state->rules.first; rule; rule=rule->next) { + if(rule->type==eBoidRuleType_FollowLeader) { + BoidRuleFollowLeader *flbr = (BoidRuleFollowLeader*) rule; + + if(flbr->ob && flbr->cfra != cfra) { + /* save object locations for velocity calculations */ + VECCOPY(flbr->oloc, flbr->loc); + VECCOPY(flbr->loc, flbr->ob->obmat[3]); + flbr->cfra = cfra; + } + } + } + } +} +static void boid_climb(BoidSettings *boids, ParticleData *pa, float *surface_co, float *surface_nor) +{ + float nor[3], vel[3]; + VECCOPY(nor, surface_nor); + + /* gather apparent gravity to r_ve */ + VECADDFAC(pa->r_ve, pa->r_ve, surface_nor, -1.0); + Normalize(pa->r_ve); + + /* raise boid it's size from surface */ + VecMulf(nor, pa->size * boids->height); + VecAddf(pa->state.co, surface_co, nor); + + /* remove normal component from velocity */ + Projf(vel, pa->state.vel, surface_nor); + VecSubf(pa->state.vel, pa->state.vel, vel); +} +static float boid_goal_signed_dist(float *boid_co, float *goal_co, float *goal_nor) +{ + float vec[3]; + + VecSubf(vec, boid_co, goal_co); + + return Inpf(vec, goal_nor); +} +/* wanted_co is relative to boid location */ +static int apply_boid_rule(BoidBrainData *bbd, BoidRule *rule, BoidValues *val, ParticleData *pa, float fuzziness) +{ + if(rule==NULL) + return 0; + + if(boid_rule_applies(pa, bbd->part->boids, rule)==0) + return 0; + + if(boid_rules[rule->type](rule, bbd, val, pa)==0) + return 0; + + if(fuzziness < 0.0f || VecLenCompare(bbd->wanted_co, pa->prev_state.vel, fuzziness * VecLength(pa->prev_state.vel))==0) + return 1; + else + return 0; +} +static BoidState *get_boid_state(BoidSettings *boids, ParticleData *pa) { + BoidState *state = boids->states.first; + + for(; state; state=state->next) { + if(state->id==pa->boid->state_id) + return state; + } + + /* for some reason particle isn't at a valid state */ + state = boids->states.first; + if(state) + pa->boid->state_id = state->id; + + return state; +} +//static int boid_condition_is_true(BoidCondition *cond) { +// /* TODO */ +// return 0; +//} + +/* determines the velocity the boid wants to have */ +void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) +{ + ParticleData *pars=bbd->psys->particles; + ParticleEffectorCache *ec=0; + BoidRule *rule; + BoidSettings *boids = bbd->part->boids; + BoidValues val; + BoidState *state = get_boid_state(boids, pa); + //BoidCondition *cond; + + if(pa->boid->health <= 0.0f) { + pa->alive = PARS_DYING; + return; + } + + //planned for near future + //cond = state->conditions.first; + //for(; cond; cond=cond->next) { + // if(boid_condition_is_true(cond)) { + // pa->boid->state_id = cond->state_id; + // state = get_boid_state(boids, pa); + // break; /* only first true condition is used */ + // } + //} + + bbd->wanted_co[0]=bbd->wanted_co[1]=bbd->wanted_co[2]=bbd->wanted_speed=0.0f; + + /* create random seed for every particle & frame */ + BLI_srandom(bbd->psys->seed + p + (int)bbd->cfra + (int)(1000*pa->r_rot[0])); + + set_boid_values(&val, bbd->part->boids, pa); + + /* go through rules */ + switch(state->ruleset_type) { + case eBoidRulesetType_Fuzzy: + { + for(rule = state->rules.first; rule; rule = rule->next) { + if(apply_boid_rule(bbd, rule, &val, pa, state->rule_fuzziness)) + break; /* only first nonzero rule that comes through fuzzy rule is applied */ + } + break; + } + case eBoidRulesetType_Random: + { + /* use random rule for each particle (allways same for same particle though) */ + rule = BLI_findlink(&state->rules, (int)(1000.0f * pa->r_rot[1]) % BLI_countlist(&state->rules)); + + apply_boid_rule(bbd, rule, &val, pa, -1.0); + } + case eBoidRulesetType_Average: + { + float wanted_co[3] = {0.0f, 0.0f, 0.0f}, wanted_speed = 0.0f; + int n = 0; + for(rule = state->rules.first; rule; rule=rule->next) { + if(apply_boid_rule(bbd, rule, &val, pa, -1.0f)) { + VecAddf(wanted_co, wanted_co, bbd->wanted_co); + wanted_speed += bbd->wanted_speed; + n++; + bbd->wanted_co[0]=bbd->wanted_co[1]=bbd->wanted_co[2]=bbd->wanted_speed=0.0f; + } + } + + if(n > 1) { + VecMulf(wanted_co, 1.0f/(float)n); + wanted_speed /= (float)n; + } + + VECCOPY(bbd->wanted_co, wanted_co); + bbd->wanted_speed = wanted_speed; + break; + } + + } + + /* decide on jumping & liftoff */ + if(pa->boid->mode == eBoidMode_OnLand) { + /* fuzziness makes boids capable of misjudgement */ + float mul = 1.0 + state->rule_fuzziness; + + if(boids->options & BOID_ALLOW_FLIGHT && bbd->wanted_co[2] > 0.0f) { + float cvel[3], dir[3]; + + VECCOPY(dir, pa->prev_state.ave); + Normalize2(dir); + + VECCOPY(cvel, bbd->wanted_co); + Normalize2(cvel); + + if(Inp2f(cvel, dir) > 0.95 / mul) + pa->boid->mode = eBoidMode_Liftoff; + } + else if(val.jump_speed > 0.0f) { + float jump_v[3]; + int jump = 0; + + /* jump to get to a location */ + if(bbd->wanted_co[2] > 0.0f) { + float cvel[3], dir[3]; + float z_v, ground_v, cur_v; + float len; + + VECCOPY(dir, pa->prev_state.ave); + Normalize2(dir); + + VECCOPY(cvel, bbd->wanted_co); + Normalize2(cvel); + + len = Vec2Length(pa->prev_state.vel); + + /* first of all, are we going in a suitable direction? */ + /* or at a suitably slow speed */ + if(Inp2f(cvel, dir) > 0.95f / mul || len <= state->rule_fuzziness) { + /* try to reach goal at highest point of the parabolic path */ + cur_v = Vec2Length(pa->prev_state.vel); + z_v = sasqrt(-2.0f * bbd->part->acc[2] * bbd->wanted_co[2]); + ground_v = Vec2Length(bbd->wanted_co)*sasqrt(-0.5f * bbd->part->acc[2] / bbd->wanted_co[2]); + + len = sasqrt((ground_v-cur_v)*(ground_v-cur_v) + z_v*z_v); + + if(len < val.jump_speed * mul || bbd->part->boids->options & BOID_ALLOW_FLIGHT) { + jump = 1; + + len = MIN2(len, val.jump_speed); + + VECCOPY(jump_v, dir); + jump_v[2] = z_v; + VecMulf(jump_v, ground_v); + + Normalize(jump_v); + VecMulf(jump_v, len); + Vec2Addf(jump_v, jump_v, pa->prev_state.vel); + } + } + } + + /* jump to go faster */ + if(jump == 0 && val.jump_speed > val.max_speed && bbd->wanted_speed > val.max_speed) { + + } + + if(jump) { + VECCOPY(pa->prev_state.vel, jump_v); + pa->boid->mode = eBoidMode_Falling; + } + } + } +} +/* tries to realize the wanted velocity taking all constraints into account */ +void boid_body(BoidBrainData *bbd, ParticleData *pa) +{ + BoidSettings *boids = bbd->part->boids; + BoidValues val; + float acc[3] = {0.0f, 0.0f, 0.0f}, tan_acc[3], nor_acc[3]; + float dvec[3], bvec[3]; + float new_dir[3], new_speed; + float old_dir[3], old_speed; + float wanted_dir[3]; + float q[4], mat[3][3]; /* rotation */ + float ground_co[3] = {0.0f, 0.0f, 0.0f}, ground_nor[3] = {0.0f, 0.0f, 1.0f}; + float force[3] = {0.0f, 0.0f, 0.0f}, tvel[3] = {0.0f, 0.0f, 1.0f}; + float pa_mass=bbd->part->mass, dtime=bbd->dfra*bbd->timestep; + int p = pa - bbd->psys->particles; + + set_boid_values(&val, boids, pa); + + /* make sure there's something in new velocity, location & rotation */ + copy_particle_key(&pa->state,&pa->prev_state,0); + + if(bbd->part->flag & PART_SIZEMASS) + pa_mass*=pa->size; + + /* if boids can't fly they fall to the ground */ + if((boids->options & BOID_ALLOW_FLIGHT)==0 && ELEM(pa->boid->mode, eBoidMode_OnLand, eBoidMode_Climbing)==0 && bbd->part->acc[2] != 0.0f) + pa->boid->mode = eBoidMode_Falling; + + if(pa->boid->mode == eBoidMode_Falling) { + /* Falling boids are only effected by gravity. */ + acc[2] = bbd->part->acc[2]; + } + else { + /* figure out acceleration */ + float landing_level = 2.0f; + float level = landing_level + 1.0f; + float new_vel[3]; + + if(pa->boid->mode == eBoidMode_Liftoff) { + pa->boid->mode = eBoidMode_InAir; + pa->stick_ob = boid_find_ground(bbd, pa, ground_co, ground_nor); + } + else if(pa->boid->mode == eBoidMode_InAir && boids->options & BOID_ALLOW_LAND) { + /* auto-leveling & landing if close to ground */ + + pa->stick_ob = boid_find_ground(bbd, pa, ground_co, ground_nor); + + /* level = how many particle sizes above ground */ + level = (pa->prev_state.co[2] - ground_co[2])/(2.0f * pa->size) - 0.5; + + landing_level = - boids->landing_smoothness * pa->prev_state.vel[2] * pa_mass; + + if(pa->prev_state.vel[2] < 0.0f) { + if(level < 1.0f) { + bbd->wanted_co[0] = bbd->wanted_co[1] = bbd->wanted_co[2] = 0.0f; + bbd->wanted_speed = 0.0f; + pa->boid->mode = eBoidMode_Falling; + } + else if(level < landing_level) { + bbd->wanted_speed *= (level - 1.0f)/landing_level; + bbd->wanted_co[2] *= (level - 1.0f)/landing_level; + } + } + } + + VECCOPY(old_dir, pa->prev_state.ave); + VECCOPY(wanted_dir, bbd->wanted_co); + new_speed = Normalize(wanted_dir); + + /* first check if we have valid direction we want to go towards */ + if(new_speed == 0.0f) { + VECCOPY(new_dir, old_dir); + } + else { + float old_dir2[2], wanted_dir2[2], nor[3], angle; + Vec2Copyf(old_dir2, old_dir); + Normalize2(old_dir2); + Vec2Copyf(wanted_dir2, wanted_dir); + Normalize2(wanted_dir2); + + /* choose random direction to turn if wanted velocity */ + /* is directly behind regardless of z-coordinate */ + if(Inp2f(old_dir2, wanted_dir2) < -0.99f) { + wanted_dir[0] = 2.0f*(0.5f - BLI_frand()); + wanted_dir[1] = 2.0f*(0.5f - BLI_frand()); + wanted_dir[2] = 2.0f*(0.5f - BLI_frand()); + Normalize(wanted_dir); + } + + /* constrain direction with maximum angular velocity */ + angle = saacos(Inpf(old_dir, wanted_dir)); + angle = MIN2(angle, val.max_ave); + + Crossf(nor, old_dir, wanted_dir); + VecRotToQuat(nor, angle, q); + VECCOPY(new_dir, old_dir); + QuatMulVecf(q, new_dir); + Normalize(new_dir); + + /* save direction in case resulting velocity too small */ + VecRotToQuat(nor, angle*dtime, q); + VECCOPY(pa->state.ave, old_dir); + QuatMulVecf(q, pa->state.ave); + Normalize(pa->state.ave); + } + + /* constrain speed with maximum acceleration */ + old_speed = VecLength(pa->prev_state.vel); + + if(bbd->wanted_speed < old_speed) + new_speed = MAX2(bbd->wanted_speed, old_speed - val.max_acc); + else + new_speed = MIN2(bbd->wanted_speed, old_speed + val.max_acc); + + /* combine direction and speed */ + VECCOPY(new_vel, new_dir); + VecMulf(new_vel, new_speed); + + /* maintain minimum flying velocity if not landing */ + if(level >= landing_level) { + float len2 = Inp2f(new_vel,new_vel); + float root; + + len2 = MAX2(len2, val.min_speed*val.min_speed); + root = sasqrt(new_speed*new_speed - len2); + + new_vel[2] = new_vel[2] < 0.0f ? -root : root; + + Normalize2(new_vel); + Vec2Mulf(new_vel, sasqrt(len2)); + } + + /* finally constrain speed to max speed */ + new_speed = Normalize(new_vel); + VecMulf(new_vel, MIN2(new_speed, val.max_speed)); + + /* get acceleration from difference of velocities */ + VecSubf(acc, new_vel, pa->prev_state.vel); + + /* break acceleration to components */ + Projf(tan_acc, acc, pa->prev_state.ave); + VecSubf(nor_acc, acc, tan_acc); + } + + /* account for effectors */ + do_effectors(p, pa, &pa->state, bbd->scene, bbd->ob, bbd->psys, pa->state.co, force, tvel, bbd->dfra, bbd->cfra); + + if(ELEM(pa->boid->mode, eBoidMode_OnLand, eBoidMode_Climbing)) { + float length = Normalize(force); + + length = MAX2(0.0f, length - boids->land_stick_force); + + VecMulf(force, length); + } + + VecAddf(acc, acc, force); + + /* store smoothed acceleration for nice banking etc. */ + VECADDFAC(pa->boid->acc, pa->boid->acc, acc, dtime); + VecMulf(pa->boid->acc, 1.0f / (1.0f + dtime)); + + /* integrate new location & velocity */ + + /* by regarding the acceleration as a force at this stage we*/ + /* can get better control allthough it's a bit unphysical */ + VecMulf(acc, 1.0f/pa_mass); + + VECCOPY(dvec, acc); + VecMulf(dvec, dtime*dtime*0.5f); + + VECCOPY(bvec, pa->prev_state.vel); + VecMulf(bvec, dtime); + VecAddf(dvec, dvec, bvec); + VecAddf(pa->state.co, pa->state.co, dvec); + + VECADDFAC(pa->state.vel, pa->state.vel, acc, dtime); + + if(pa->boid->mode != eBoidMode_InAir) + pa->stick_ob = boid_find_ground(bbd, pa, ground_co, ground_nor); + + /* change modes, constrain movement & keep track of down vector */ + switch(pa->boid->mode) { + case eBoidMode_InAir: + { + float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f}; + + /* don't take forward acceleration into account (better banking) */ + if(Inpf(pa->boid->acc, pa->state.vel) > 0.0f) { + Projf(dvec, pa->boid->acc, pa->state.vel); + VecSubf(dvec, pa->boid->acc, dvec); + } + else { + VECCOPY(dvec, pa->boid->acc); + } + + /* gather apparent gravity to r_ve */ + VECADDFAC(pa->r_ve, grav, dvec, -boids->banking); + Normalize(pa->r_ve); + + /* stick boid on goal when close enough */ + if(bbd->goal_ob && boid_goal_signed_dist(pa->state.co, bbd->goal_co, bbd->goal_nor) <= pa->size * boids->height) { + pa->boid->mode = eBoidMode_Climbing; + pa->stick_ob = bbd->goal_ob; + boid_find_ground(bbd, pa, ground_co, ground_nor); + boid_climb(boids, pa, ground_co, ground_nor); + } + /* land boid when belowg ground */ + else if(boids->options & BOID_ALLOW_LAND && pa->state.co[2] <= ground_co[2] + pa->size * boids->height) { + pa->state.co[2] = ground_co[2] + pa->size * boids->height; + pa->state.vel[2] = 0.0f; + pa->boid->mode = eBoidMode_OnLand; + } + break; + } + case eBoidMode_Falling: + { + float zvec[3] = {0.0f,0.0f,1.0f}; + float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f}; + + /* gather apparent gravity to r_ve */ + VECADDFAC(pa->r_ve, pa->r_ve, grav, dtime); + Normalize(pa->r_ve); + + if(boids->options & BOID_ALLOW_LAND) { + /* stick boid on goal when close enough */ + if(bbd->goal_ob && boid_goal_signed_dist(pa->state.co, bbd->goal_co, bbd->goal_nor) <= pa->size * boids->height) { + pa->boid->mode = eBoidMode_Climbing; + pa->stick_ob = bbd->goal_ob; + boid_find_ground(bbd, pa, ground_co, ground_nor); + boid_climb(boids, pa, ground_co, ground_nor); + } + /* land boid when really near ground */ + else if(pa->state.co[2] <= ground_co[2] + 1.01 * pa->size * boids->height){ + pa->state.co[2] = ground_co[2] + pa->size * boids->height; + pa->state.vel[2] = 0.0f; + pa->boid->mode = eBoidMode_OnLand; + } + /* if we're falling, can fly and want to go upwards lets fly */ + else if(boids->options & BOID_ALLOW_FLIGHT && bbd->wanted_co[2] > 0.0f) + pa->boid->mode = eBoidMode_InAir; + } + else + pa->boid->mode = eBoidMode_InAir; + break; + } + case eBoidMode_Climbing: + { + boid_climb(boids, pa, ground_co, ground_nor); + //float nor[3]; + //VECCOPY(nor, ground_nor); + + ///* gather apparent gravity to r_ve */ + //VECADDFAC(pa->r_ve, pa->r_ve, ground_nor, -1.0); + //Normalize(pa->r_ve); + + ///* raise boid it's size from surface */ + //VecMulf(nor, pa->size * boids->height); + //VecAddf(pa->state.co, ground_co, nor); + + ///* remove normal component from velocity */ + //Projf(v, pa->state.vel, ground_nor); + //VecSubf(pa->state.vel, pa->state.vel, v); + break; + } + case eBoidMode_OnLand: + { + /* stick boid on goal when close enough */ + if(bbd->goal_ob && boid_goal_signed_dist(pa->state.co, bbd->goal_co, bbd->goal_nor) <= pa->size * boids->height) { + pa->boid->mode = eBoidMode_Climbing; + pa->stick_ob = bbd->goal_ob; + boid_find_ground(bbd, pa, ground_co, ground_nor); + boid_climb(boids, pa, ground_co, ground_nor); + } + /* ground is too far away so boid falls */ + else if(pa->state.co[2]-ground_co[2] > 1.1 * pa->size * boids->height) + pa->boid->mode = eBoidMode_Falling; + else { + /* constrain to surface */ + pa->state.co[2] = ground_co[2] + pa->size * boids->height; + pa->state.vel[2] = 0.0f; + } + + if(boids->banking > 0.0f) { + float grav[3]; + /* Don't take gravity's strength in to account, */ + /* otherwise amount of banking is hard to control. */ + VECCOPY(grav, ground_nor); + VecMulf(grav, -1.0f); + + Projf(dvec, pa->boid->acc, pa->state.vel); + VecSubf(dvec, pa->boid->acc, dvec); + + /* gather apparent gravity to r_ve */ + VECADDFAC(pa->r_ve, grav, dvec, -boids->banking); + Normalize(pa->r_ve); + } + else { + /* gather negative surface normal to r_ve */ + VECADDFAC(pa->r_ve, pa->r_ve, ground_nor, -1.0f); + Normalize(pa->r_ve); + } + break; + } + } + + /* save direction to state.ave unless the boid is falling */ + /* (boids can't effect their direction when falling) */ + if(pa->boid->mode!=eBoidMode_Falling && VecLength(pa->state.vel) > 0.1*pa->size) { + VECCOPY(pa->state.ave, pa->state.vel); + Normalize(pa->state.ave); + } + + /* apply damping */ + if(ELEM(pa->boid->mode, eBoidMode_OnLand, eBoidMode_Climbing)) + VecMulf(pa->state.vel, 1.0f - 0.2f*bbd->part->dampfac); + + /* calculate rotation matrix based on forward & down vectors */ + if(pa->boid->mode == eBoidMode_InAir) { + VECCOPY(mat[0], pa->state.ave); + + Projf(dvec, pa->r_ve, pa->state.ave); + VecSubf(mat[2], pa->r_ve, dvec); + Normalize(mat[2]); + } + else { + Projf(dvec, pa->state.ave, pa->r_ve); + VecSubf(mat[0], pa->state.ave, dvec); + Normalize(mat[0]); + + VECCOPY(mat[2], pa->r_ve); + } + VecMulf(mat[2], -1.0f); + Crossf(mat[1], mat[2], mat[0]); + + /* apply rotation */ + Mat3ToQuat_is_ok(mat, q); + QuatCopy(pa->state.rot, q); +} + +BoidRule *boid_new_rule(int type) +{ + BoidRule *rule = NULL; + if(type <= 0) + return NULL; + + switch(type) { + case eBoidRuleType_Goal: + case eBoidRuleType_Avoid: + rule = MEM_callocN(sizeof(BoidRuleGoalAvoid), "BoidRuleGoalAvoid"); + break; + case eBoidRuleType_AvoidCollision: + rule = MEM_callocN(sizeof(BoidRuleAvoidCollision), "BoidRuleAvoidCollision"); + ((BoidRuleAvoidCollision*)rule)->look_ahead = 2.0f; + break; + case eBoidRuleType_FollowLeader: + rule = MEM_callocN(sizeof(BoidRuleFollowLeader), "BoidRuleFollowLeader"); + ((BoidRuleFollowLeader*)rule)->distance = 1.0f; + break; + case eBoidRuleType_AverageSpeed: + rule = MEM_callocN(sizeof(BoidRuleAverageSpeed), "BoidRuleAverageSpeed"); + ((BoidRuleAverageSpeed*)rule)->speed = 0.5f; + break; + case eBoidRuleType_Fight: + rule = MEM_callocN(sizeof(BoidRuleFight), "BoidRuleFight"); + ((BoidRuleFight*)rule)->distance = 100.0f; + ((BoidRuleFight*)rule)->flee_distance = 100.0f; + break; + default: + rule = MEM_callocN(sizeof(BoidRule), "BoidRule"); + break; + } + + rule->type = type; + rule->flag |= BOIDRULE_IN_AIR|BOIDRULE_ON_LAND; + strcpy(rule->name, boidrule_type_items[type-1].name); + + return rule; +} +void boid_default_settings(BoidSettings *boids) +{ + boids->air_max_speed = 10.0f; + boids->air_max_acc = 0.5f; + boids->air_max_ave = 0.5f; + boids->air_personal_space = 1.0f; + + boids->land_max_speed = 5.0f; + boids->land_max_acc = 0.5f; + boids->land_max_ave = 0.5f; + boids->land_personal_space = 1.0f; + + boids->options = BOID_ALLOW_FLIGHT; + + boids->landing_smoothness = 3.0f; + boids->banking = 1.0f; + boids->height = 1.0f; + + boids->health = 1.0f; + boids->accuracy = 1.0f; + boids->aggression = 2.0f; + boids->range = 1.0f; + boids->strength = 0.1f; +} + +BoidState *boid_new_state(BoidSettings *boids) +{ + BoidState *state = MEM_callocN(sizeof(BoidState), "BoidState"); + + state->id = boids->last_state_id++; + if(state->id) + sprintf(state->name, "State %i", state->id); + else + strcpy(state->name, "State"); + + state->rule_fuzziness = 0.5; + state->volume = 1.0f; + state->channels |= ~0; + + return state; +} + +BoidState *boid_duplicate_state(BoidSettings *boids, BoidState *state) { + BoidState *staten = MEM_dupallocN(state); + + BLI_duplicatelist(&staten->rules, &state->rules); + BLI_duplicatelist(&staten->conditions, &state->conditions); + BLI_duplicatelist(&staten->actions, &state->actions); + + staten->id = boids->last_state_id++; + + return staten; +} +void boid_free_settings(BoidSettings *boids) +{ + if(boids) { + BoidState *state = boids->states.first; + + for(; state; state=state->next) { + BLI_freelistN(&state->rules); + BLI_freelistN(&state->conditions); + BLI_freelistN(&state->actions); + } + + BLI_freelistN(&boids->states); + + MEM_freeN(boids); + } +} +BoidSettings *boid_copy_settings(BoidSettings *boids) +{ + BoidSettings *nboids = NULL; + + if(boids) { + BoidState *state; + BoidState *nstate; + + nboids = MEM_dupallocN(boids); + + BLI_duplicatelist(&nboids->states, &boids->states); + + state = boids->states.first; + nstate = nboids->states.first; + for(; state; state=state->next, nstate=nstate->next) { + BLI_duplicatelist(&nstate->rules, &state->rules); + BLI_duplicatelist(&nstate->conditions, &state->conditions); + BLI_duplicatelist(&nstate->actions, &state->actions); + } + } + + return nboids; +} +BoidState *boid_get_current_state(BoidSettings *boids) +{ + BoidState *state = boids->states.first; + + for(; state; state=state->next) { + if(state->flag & BOIDSTATE_CURRENT) + break; + } + + return state; +} \ No newline at end of file diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index f52eec34cc7..7e6a652da6b 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -39,6 +39,7 @@ #include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_armature_types.h" +#include "DNA_boid_types.h" #include "DNA_curve_types.h" #include "DNA_camera_types.h" #include "DNA_ID.h" @@ -555,6 +556,8 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O GroupObject *go; for(; psys; psys=psys->next) { + BoidRule *rule = NULL; + BoidState *state = NULL; ParticleSettings *part= psys->part; dag_add_relation(dag, node, node, DAG_RL_OB_DATA, "Particle-Object Relation"); @@ -562,16 +565,14 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if(!psys_check_enabled(ob, psys)) continue; - if(part->phystype==PART_PHYS_KEYED) { - KeyedParticleTarget *kpt = psys->keyed_targets.first; + if(ELEM(part->phystype,PART_PHYS_KEYED,PART_PHYS_BOIDS)) { + ParticleTarget *pt = psys->targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->ob && BLI_findlink(&kpt->ob->particlesystem, kpt->psys-1)) { - node2 = dag_get_node(dag, kpt->ob); - dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Keyed Physics"); + for(; pt; pt=pt->next) { + if(pt->ob && BLI_findlink(&pt->ob->particlesystem, pt->psys-1)) { + node2 = dag_get_node(dag, pt->ob); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Targets"); } - else - break; } } @@ -589,33 +590,47 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O } } - if(psys->effectors.first) - psys_end_effectors(psys); + psys_end_effectors(psys); psys_init_effectors(scene, ob, psys->part->eff_group, psys); - if(psys->effectors.first) { - for(nec= psys->effectors.first; nec; nec= nec->next) { - Object *ob1= nec->ob; + for(nec= psys->effectors.first; nec; nec= nec->next) { + Object *ob1= nec->ob; - if(nec->type & PSYS_EC_EFFECTOR) { - node2 = dag_get_node(dag, ob1); - if(ob1->pd->forcefield==PFIELD_GUIDE) - dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Field"); - else - dag_add_relation(dag, node2, node, DAG_RL_OB_DATA, "Particle Field"); - } - else if(nec->type & PSYS_EC_DEFLECT) { - node2 = dag_get_node(dag, ob1); - dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Collision"); - } - else if(nec->type & PSYS_EC_PARTICLE) { - node2 = dag_get_node(dag, ob1); - dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA, "Particle Field"); - } - - if(nec->type & PSYS_EC_REACTOR) { - node2 = dag_get_node(dag, ob1); - dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA, "Particle Reactor"); + if(nec->type & PSYS_EC_EFFECTOR) { + node2 = dag_get_node(dag, ob1); + if(ob1->pd->forcefield==PFIELD_GUIDE) + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Field"); + else + dag_add_relation(dag, node2, node, DAG_RL_OB_DATA, "Particle Field"); + } + else if(nec->type & PSYS_EC_DEFLECT) { + node2 = dag_get_node(dag, ob1); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Collision"); + } + else if(nec->type & PSYS_EC_PARTICLE) { + node2 = dag_get_node(dag, ob1); + dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA, "Particle Field"); + } + + if(nec->type & PSYS_EC_REACTOR) { + node2 = dag_get_node(dag, ob1); + dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA, "Particle Reactor"); + } + } + + if(part->boids) { + for(state = part->boids->states.first; state; state=state->next) { + for(rule = state->rules.first; rule; rule=rule->next) { + Object *ruleob = NULL; + if(rule->type==eBoidRuleType_Avoid) + ruleob = ((BoidRuleGoalAvoid*)rule)->ob; + else if(rule->type==eBoidRuleType_FollowLeader) + ruleob = ((BoidRuleFollowLeader*)rule)->ob; + + if(ruleob) { + node2 = dag_get_node(dag, ruleob); + dag_add_relation(dag, node2, node, DAG_RL_OB_DATA, "Boid Rule"); + } } } } @@ -2070,7 +2085,6 @@ static void dag_object_time_update_flags(Object *ob) } } } - /* flag all objects that need recalc, for changes in time for example */ void DAG_scene_update_flags(Scene *scene, unsigned int lay) { diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 7951fcf1d3e..e3c4f12184e 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -505,6 +505,9 @@ void do_physical_effector(Scene *scene, Object *ob, float *opco, short type, flo VecAddf(field,field,mag_vec); break; } + case PFIELD_BOID: + /* Boid field is handled completely in boids code. */ + break; } } diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 948d02f2a80..c129e8ed99b 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -6113,9 +6113,14 @@ static void surfaceModifier_freeData(ModifierData *md) MEM_freeN(surmd->bvhtree); } - if(surmd->dm) - surmd->dm->release(surmd->dm); + surmd->dm->release(surmd->dm); + + if(surmd->x) + MEM_freeN(surmd->x); + if(surmd->v) + MEM_freeN(surmd->v); + surmd->bvhtree = NULL; surmd->dm = NULL; } @@ -6128,7 +6133,7 @@ static int surfaceModifier_dependsOnTime(ModifierData *md) static void surfaceModifier_deformVerts( ModifierData *md, Object *ob, DerivedMesh *derivedData, - float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc) + float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc) { SurfaceModifierData *surmd = (SurfaceModifierData*) md; unsigned int numverts = 0, i = 0; @@ -6148,14 +6153,47 @@ static void surfaceModifier_deformVerts( if(surmd->dm) { + int init = 0; + float *vec; + MVert *x, *v; + CDDM_apply_vert_coords(surmd->dm, vertexCos); CDDM_calc_normals(surmd->dm); numverts = surmd->dm->getNumVerts ( surmd->dm ); - /* convert to global coordinates */ - for(i = 0; iobmat, CDDM_get_vert(surmd->dm, i)->co); + if(numverts != surmd->numverts || surmd->x == NULL || surmd->v == NULL || md->scene->r.cfra != surmd->cfra+1) { + if(surmd->x) { + MEM_freeN(surmd->x); + surmd->x = NULL; + } + if(surmd->v) { + MEM_freeN(surmd->v); + surmd->v = NULL; + } + + surmd->x = MEM_callocN(numverts * sizeof(MVert), "MVert"); + surmd->v = MEM_callocN(numverts * sizeof(MVert), "MVert"); + + surmd->numverts = numverts; + + init = 1; + } + + /* convert to global coordinates and calculate velocity */ + for(i = 0, x = surmd->x, v = surmd->v; idm, i)->co; + Mat4MulVecfl(ob->obmat, vec); + + if(init) + v->co[0] = v->co[1] = v->co[2] = 0.0f; + else + VecSubf(v->co, vec, x->co); + + VecCopyf(x->co, vec); + } + + surmd->cfra = md->scene->r.cfra; if(surmd->bvhtree) free_bvhtree_from_mesh(surmd->bvhtree); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 65043abe518..60b34bf0783 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -42,6 +42,7 @@ #include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_armature_types.h" +#include "DNA_boid_types.h" #include "DNA_camera_types.h" #include "DNA_constraint_types.h" #include "DNA_curve_types.h" @@ -429,11 +430,13 @@ void unlink_object(Scene *scene, Object *ob) if(obt->particlesystem.first) { ParticleSystem *tpsys= obt->particlesystem.first; for(; tpsys; tpsys=tpsys->next) { - KeyedParticleTarget *kpt = tpsys->keyed_targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->ob==ob) { - BLI_remlink(&tpsys->keyed_targets, kpt); - MEM_freeN(kpt); + BoidState *state = NULL; + BoidRule *rule = NULL; + + ParticleTarget *pt = tpsys->targets.first; + for(; pt; pt=pt->next) { + if(pt->ob==ob) { + pt->ob = NULL; obt->recalc |= OB_RECALC_DATA; break; } @@ -458,6 +461,22 @@ void unlink_object(Scene *scene, Object *ob) } } } + if(tpsys->part->boids) { + for(state = tpsys->part->boids->states.first; state; state=state->next) { + for(rule = state->rules.first; rule; rule=rule->next) { + if(rule->type==eBoidRuleType_Avoid) { + BoidRuleGoalAvoid *gabr = (BoidRuleGoalAvoid*)rule; + if(gabr->ob==ob) + gabr->ob= NULL; + } + else if(rule->type==eBoidRuleType_FollowLeader) { + BoidRuleFollowLeader *flbr = (BoidRuleFollowLeader*)rule; + if(flbr->ob==ob) + flbr->ob= NULL; + } + } + } + } } if(ob->pd) obt->recalc |= OB_RECALC_DATA; @@ -1063,8 +1082,14 @@ ParticleSystem *copy_particlesystem(ParticleSystem *psys) psysn->soft->particles = psysn; } - if(psys->keyed_targets.first) - BLI_duplicatelist(&psysn->keyed_targets, &psys->keyed_targets); + if(psys->particles->boid) { + psysn->particles->boid = MEM_dupallocN(psys->particles->boid); + for(a=1, pa=psysn->particles+1; atotpart; a++, pa++) + pa->boid = (pa-1)->boid + 1; + } + + if(psys->targets.first) + BLI_duplicatelist(&psysn->targets, &psys->targets); psysn->pathcache= NULL; psysn->childcache= NULL; @@ -2369,10 +2394,17 @@ void object_handle_update(Scene *scene, Object *ob) if(ob->particlesystem.first) { ParticleSystem *tpsys, *psys; DerivedMesh *dm; + ob->transflag &= ~OB_DUPLIPARTS; psys= ob->particlesystem.first; while(psys) { if(psys_check_enabled(ob, psys)) { + /* check use of dupli objects here */ + if(psys->part && psys->part->draw_as == PART_DRAW_REND && + ((psys->part->ren_as == PART_DRAW_OB && psys->part->dup_ob) + || (psys->part->ren_as == PART_DRAW_GR && psys->part->dup_group))) + ob->transflag |= OB_DUPLIPARTS; + particle_system_update(scene, ob, psys); psys= psys->next; } diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index da14ac46550..6e8f9ee213c 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -36,6 +36,7 @@ #include "MEM_guardedalloc.h" #include "DNA_scene_types.h" +#include "DNA_boid_types.h" #include "DNA_particle_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -58,6 +59,7 @@ #include "BKE_anim.h" +#include "BKE_boids.h" #include "BKE_global.h" #include "BKE_main.h" #include "BKE_lattice.h" @@ -355,10 +357,13 @@ void psys_free_settings(ParticleSettings *part) MEM_freeN(part->pd); part->pd = NULL; } + if(part->pd2) { MEM_freeN(part->pd2); part->pd2 = NULL; } + + boid_free_settings(part->boids); } void free_hair(ParticleSystem *psys, int softbody) @@ -439,6 +444,9 @@ void psys_free(Object *ob, ParticleSystem * psys) psys->free_edit(psys); if(psys->particles){ + if(psys->particles->boid) + MEM_freeN(psys->particles->boid); + MEM_freeN(psys->particles); psys->particles = 0; psys->totpart = 0; @@ -479,8 +487,10 @@ void psys_free(Object *ob, ParticleSystem * psys) if(psys->pointcache) BKE_ptcache_free(psys->pointcache); - if(psys->keyed_targets.first) - BLI_freelistN(&psys->keyed_targets); + if(psys->targets.first) + BLI_freelistN(&psys->targets); + + BLI_kdtree_free(psys->tree); MEM_freeN(psys); } @@ -1043,21 +1053,21 @@ static void do_particle_interpolation(ParticleSystem *psys, int p, ParticleData real_t = pind->kkey[0]->time + t * (pind->kkey[0][pa->totkey-1].time - pind->kkey[0]->time); if(psys->part->phystype==PART_PHYS_KEYED && psys->flag & PSYS_KEYED_TIMING) { - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; - kpt=kpt->next; + pt=pt->next; - while(kpt && pa->time + kpt->time < real_t) - kpt= kpt->next; + while(pt && pa->time + pt->time < real_t) + pt= pt->next; - if(kpt) { - kpt=kpt->prev; + if(pt) { + pt=pt->prev; - if(pa->time + kpt->time + kpt->duration > real_t) - real_t = pa->time + kpt->time; + if(pa->time + pt->time + pt->duration > real_t) + real_t = pa->time + pt->time; } else - real_t = pa->time + ((KeyedParticleTarget*)psys->keyed_targets.last)->time; + real_t = pa->time + ((ParticleTarget*)psys->targets.last)->time; } CLAMP(real_t, pa->time, pa->dietime); @@ -3028,7 +3038,12 @@ void object_add_particle_system(Scene *scene, Object *ob) psys->pointcache = BKE_ptcache_add(); BLI_addtail(&ob->particlesystem, psys); - psys->part = psys_new_settings("PSys", NULL); + psys->part = psys_new_settings("ParticleSettings", NULL); + + if(BLI_countlist(&ob->particlesystem)>1) + sprintf(psys->name, "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); + else + strcpy(psys->name, "ParticleSystem"); md= modifier_new(eModifierType_ParticleSystem); sprintf(md->name, "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); @@ -3099,14 +3114,8 @@ static void default_particle_settings(ParticleSettings *part) part->reactevent= PART_EVENT_DEATH; part->disp=100; part->from= PART_FROM_FACE; - part->nbetween= 4; - part->boidneighbours= 5; part->normfac= 1.0f; - part->max_vel = 10.0f; - part->average_vel = 0.3f; - part->max_tan_acc = 0.2f; - part->max_lat_acc = 1.0f; part->reactshape=1.0f; @@ -3136,13 +3145,9 @@ static void default_particle_settings(ParticleSettings *part) part->keyed_loops = 1; - part->banking=1.0; - part->max_bank=1.0; + for(i=0; i<10; i++) + part->effector_weight[i]=1.0f; - for(i=0; iboidrule[i]=(char)i; - part->boidfac[i]=0.5; - } #if 0 // XXX old animation system part->ipo = NULL; @@ -3176,6 +3181,8 @@ ParticleSettings *psys_copy_settings(ParticleSettings *part) partn= copy_libblock(part); if(partn->pd) partn->pd= MEM_dupallocN(part->pd); if(partn->pd2) partn->pd2= MEM_dupallocN(part->pd2); + + partn->boids = boid_copy_settings(part->boids); return partn; } diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 56ca3e8e22b..b792564f50c 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -37,6 +37,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_boid_types.h" #include "DNA_particle_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -49,6 +50,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" #include "DNA_ipo_types.h" // XXX old animation system stuff... to be removed! +#include "DNA_listBase.h" #include "BLI_rand.h" #include "BLI_jitter.h" @@ -60,6 +62,7 @@ #include "BLI_threads.h" #include "BKE_anim.h" +#include "BKE_boids.h" #include "BKE_cdderivedmesh.h" #include "BKE_collision.h" #include "BKE_displist.h" @@ -172,6 +175,7 @@ void psys_reset(ParticleSystem *psys, int mode) static void realloc_particles(Object *ob, ParticleSystem *psys, int new_totpart) { ParticleData *newpars = 0, *pa; + BoidData *newboids = 0; int i, totpart, totsaved = 0; if(new_totpart<0) { @@ -185,22 +189,34 @@ static void realloc_particles(Object *ob, ParticleSystem *psys, int new_totpart) else totpart=new_totpart; - if(totpart) + if(totpart) { newpars= MEM_callocN(totpart*sizeof(ParticleData), "particles"); + + if(psys->part->phystype == PART_PHYS_BOIDS) + newboids = MEM_callocN(totpart*sizeof(BoidData), "Boid Data"); + } if(psys->particles) { totsaved=MIN2(psys->totpart,totpart); /*save old pars*/ - if(totsaved) + if(totsaved) { memcpy(newpars,psys->particles,totsaved*sizeof(ParticleData)); + if(newboids) + memcpy(newboids, psys->particles->boid, totsaved*sizeof(BoidData)); + } + if(psys->particles->keys) MEM_freeN(psys->particles->keys); - for(i=0, pa=newpars; iparticles->boid) + MEM_freeN(psys->particles->boid); + + for(i=0, pa=newpars; ikeys) { pa->keys= NULL; pa->totkey= 0; } + } for(i=totsaved, pa=psys->particles+totsaved; itotpart; i++, pa++) if(pa->hair) MEM_freeN(pa->hair); @@ -209,6 +225,13 @@ static void realloc_particles(Object *ob, ParticleSystem *psys, int new_totpart) } psys->particles=newpars; + if(newboids) { + pa = psys->particles; + pa->boid = newboids; + for(i=1, pa++; iboid = (pa-1)->boid + 1; + } + if(psys->child) { MEM_freeN(psys->child); psys->child=0; @@ -1607,12 +1630,15 @@ void initialize_particle(ParticleData *pa, int p, Object *ob, ParticleSystem *ps rand= BLI_frand(); /* while loops are to have a spherical distribution (avoid cubic distribution) */ - length=2.0f; - while(length>1.0){ - pa->r_ve[0]=2.0f*(BLI_frand()-0.5f); - pa->r_ve[1]=2.0f*(BLI_frand()-0.5f); - pa->r_ve[2]=2.0f*(BLI_frand()-0.5f); - length=VecLength(pa->r_ve); + if(part->phystype != PART_PHYS_BOIDS) { + /* boids store gravity in r_ve, so skip here */ + length=2.0f; + while(length>1.0){ + pa->r_ve[0]=2.0f*(BLI_frand()-0.5f); + pa->r_ve[1]=2.0f*(BLI_frand()-0.5f); + pa->r_ve[2]=2.0f*(BLI_frand()-0.5f); + length=VecLength(pa->r_ve); + } } length=2.0f; @@ -1828,122 +1854,164 @@ void reset_particle(Scene *scene, ParticleData *pa, ParticleSystem *psys, Partic QuatMul(r_rot,r_rot,rot); } } - /* conversion done so now we apply new: */ - /* -velocity from: */ - /* *reactions */ - if(dtime>0.0f){ - VECSUB(vel,pa->state.vel,pa->prev_state.vel); + if(part->phystype==PART_PHYS_BOIDS) { + float dvec[3], q[4], mat[3][3]; + + VECCOPY(pa->state.co,loc); + + /* boids don't get any initial velocity */ + pa->state.vel[0]=pa->state.vel[1]=pa->state.vel[2]=0.0f; + + /* boids store direction in ave */ + if(fabs(nor[2])==1.0f) { + VecSubf(pa->state.ave, loc, ob->obmat[3]); + Normalize(pa->state.ave); + } + else { + VECCOPY(pa->state.ave, nor); + } + /* and gravity in r_ve */ + pa->r_ve[0] = pa->r_ve[1] = 0.0f; + pa->r_ve[2] = -1.0f; + if(part->acc[2]!=0.0f) + pa->r_ve[2] = part->acc[2]; + + /* calculate rotation matrix */ + Projf(dvec, pa->r_ve, pa->state.ave); + VecSubf(mat[0], pa->state.ave, dvec); + Normalize(mat[0]); + VECCOPY(mat[2], pa->r_ve); + VecMulf(mat[2], -1.0f); + Normalize(mat[2]); + Crossf(mat[1], mat[2], mat[0]); + + /* apply rotation */ + Mat3ToQuat_is_ok(mat, q); + QuatCopy(pa->state.rot, q); + + pa->boid->health = part->boids->health; + pa->boid->mode = eBoidMode_InAir; + pa->boid->state_id = ((BoidState*)part->boids->states.first)->id; + pa->boid->acc[0]=pa->boid->acc[1]=pa->boid->acc[2]=0.0f; } + else { + /* conversion done so now we apply new: */ + /* -velocity from: */ - /* *emitter velocity */ - if(dtime!=0.0 && part->obfac!=0.0){ - VECSUB(vel,loc,pa->state.co); - VecMulf(vel,part->obfac/dtime); - } - - /* *emitter normal */ - if(part->normfac!=0.0) - VECADDFAC(vel,vel,nor,part->normfac); - - /* *emitter tangent */ - if(part->tanfac!=0.0) - VECADDFAC(vel,vel,vtan,part->tanfac*(vg_tan?psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_tan):1.0f)); + /* *reactions */ + if(dtime>0.0f){ + VECSUB(vel,pa->state.vel,pa->prev_state.vel); + } - /* *texture */ - /* TODO */ - - /* *random */ - if(part->randfac!=0.0) - VECADDFAC(vel,vel,r_vel,part->randfac); - - /* *particle */ - if(part->partfac!=0.0) - VECADDFAC(vel,vel,p_vel,part->partfac); - -#if 0 // XXX old animation system - icu=find_ipocurve(psys->part->ipo,PART_EMIT_VEL); - if(icu){ - calc_icu(icu,100*((pa->time-part->sta)/(part->end-part->sta))); - ptex.ivel*=icu->curval; - } -#endif // XXX old animation system - - VecMulf(vel,ptex.ivel); - - VECCOPY(pa->state.vel,vel); - - /* -location from emitter */ - VECCOPY(pa->state.co,loc); - - /* -rotation */ - pa->state.rot[0]=1.0; - pa->state.rot[1]=pa->state.rot[2]=pa->state.rot[3]=0.0; - - if(part->rotmode){ - /* create vector into which rotation is aligned */ - switch(part->rotmode){ - case PART_ROT_NOR: - VecCopyf(rot_vec, nor); - break; - case PART_ROT_VEL: - VecCopyf(rot_vec, vel); - break; - case PART_ROT_GLOB_X: - case PART_ROT_GLOB_Y: - case PART_ROT_GLOB_Z: - rot_vec[part->rotmode - PART_ROT_GLOB_X] = 1.0f; - break; - case PART_ROT_OB_X: - case PART_ROT_OB_Y: - case PART_ROT_OB_Z: - VecCopyf(rot_vec, ob->obmat[part->rotmode - PART_ROT_OB_X]); - break; + /* *emitter velocity */ + if(dtime!=0.0 && part->obfac!=0.0){ + VECSUB(vel,loc,pa->state.co); + VecMulf(vel,part->obfac/dtime); } - /* create rotation quat */ - VecNegf(rot_vec); - vectoquat(rot_vec, OB_POSX, OB_POSZ, q2); + /* *emitter normal */ + if(part->normfac!=0.0) + VECADDFAC(vel,vel,nor,part->normfac); + + /* *emitter tangent */ + if(psmd && part->tanfac!=0.0) + VECADDFAC(vel,vel,vtan,part->tanfac*(vg_tan?psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_tan):1.0f)); - /* randomize rotation quat */ - if(part->randrotfac!=0.0f) - QuatInterpol(rot, q2, r_rot, part->randrotfac); - else - QuatCopy(rot,q2); + /* *texture */ + /* TODO */ - /* rotation phase */ - phasefac = part->phasefac; - if(part->randphasefac != 0.0f) /* abuse r_ave[0] as a random number */ - phasefac += part->randphasefac * pa->r_ave[0]; - VecRotToQuat(x_vec, phasefac*(float)M_PI, q_phase); + /* *random */ + if(part->randfac!=0.0) + VECADDFAC(vel,vel,r_vel,part->randfac); - /* combine base rotation & phase */ - QuatMul(pa->state.rot, rot, q_phase); - } + /* *particle */ + if(part->partfac!=0.0) + VECADDFAC(vel,vel,p_vel,part->partfac); - /* -angular velocity */ + //icu=find_ipocurve(psys->part->ipo,PART_EMIT_VEL); + //if(icu){ + // calc_icu(icu,100*((pa->time-part->sta)/(part->end-part->sta))); + // ptex.ivel*=icu->curval; + //} - pa->state.ave[0] = pa->state.ave[1] = pa->state.ave[2] = 0.0; + VecMulf(vel,ptex.ivel); - if(part->avemode){ - switch(part->avemode){ - case PART_AVE_SPIN: - VECCOPY(pa->state.ave,vel); - break; - case PART_AVE_RAND: - VECCOPY(pa->state.ave,r_ave); - break; + //if(ELEM(part->phystype, PART_PHYS_GRADU_EX, PART_PHYS_GRADU_SIM)) + // VecAddf(vel,vel,part->acc); + + VECCOPY(pa->state.vel,vel); + + /* -location from emitter */ + VECCOPY(pa->state.co,loc); + + /* -rotation */ + pa->state.rot[0]=1.0; + pa->state.rot[1]=pa->state.rot[2]=pa->state.rot[3]=0.0; + + if(part->rotmode){ + /* create vector into which rotation is aligned */ + switch(part->rotmode){ + case PART_ROT_NOR: + VecCopyf(rot_vec, nor); + break; + case PART_ROT_VEL: + VecCopyf(rot_vec, vel); + break; + case PART_ROT_GLOB_X: + case PART_ROT_GLOB_Y: + case PART_ROT_GLOB_Z: + rot_vec[part->rotmode - PART_ROT_GLOB_X] = 1.0f; + break; + case PART_ROT_OB_X: + case PART_ROT_OB_Y: + case PART_ROT_OB_Z: + VecCopyf(rot_vec, ob->obmat[part->rotmode - PART_ROT_OB_X]); + break; + } + + /* create rotation quat */ + VecNegf(rot_vec); + vectoquat(rot_vec, OB_POSX, OB_POSZ, q2); + + /* randomize rotation quat */ + if(part->randrotfac!=0.0f) + QuatInterpol(rot, q2, r_rot, part->randrotfac); + else + QuatCopy(rot,q2); + + /* rotation phase */ + phasefac = part->phasefac; + if(part->randphasefac != 0.0f) /* abuse r_ave[0] as a random number */ + phasefac += part->randphasefac * pa->r_ave[0]; + VecRotToQuat(x_vec, phasefac*(float)M_PI, q_phase); + + /* combine base rotation & phase */ + QuatMul(pa->state.rot, rot, q_phase); } - Normalize(pa->state.ave); - VecMulf(pa->state.ave,part->avefac); -#if 0 // XXX old animation system - icu=find_ipocurve(psys->part->ipo,PART_EMIT_AVE); - if(icu){ - calc_icu(icu,100*((pa->time-part->sta)/(part->end-part->sta))); - VecMulf(pa->state.ave,icu->curval); + /* -angular velocity */ + + pa->state.ave[0] = pa->state.ave[1] = pa->state.ave[2] = 0.0; + + if(part->avemode){ + switch(part->avemode){ + case PART_AVE_SPIN: + VECCOPY(pa->state.ave,vel); + break; + case PART_AVE_RAND: + VECCOPY(pa->state.ave,r_ave); + break; + } + Normalize(pa->state.ave); + VecMulf(pa->state.ave,part->avefac); + + //icu=find_ipocurve(psys->part->ipo,PART_EMIT_AVE); + //if(icu){ + // calc_icu(icu,100*((pa->time-part->sta)/(part->end-part->sta))); + // VecMulf(pa->state.ave,icu->curval); + //} } -#endif // XXX old animation system } pa->dietime = pa->time + pa->lifetime; @@ -1971,48 +2039,46 @@ static void reset_all_particles(Scene *scene, Object *ob, ParticleSystem *psys, MEM_freeN(vg_vel); } /************************************************/ +/* Particle targets */ +/************************************************/ +ParticleSystem *psys_get_target_system(Object *ob, ParticleTarget *pt) +{ + ParticleSystem *psys = NULL; + + if(pt->ob == NULL || pt->ob == ob) + psys = BLI_findlink(&ob->particlesystem, pt->psys-1); + else + psys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1); + + if(psys) + pt->flag |= PTARGET_VALID; + else + pt->flag &= ~PTARGET_VALID; + + return psys; +} +/************************************************/ /* Keyed particles */ /************************************************/ /* Counts valid keyed targets */ void psys_count_keyed_targets(Object *ob, ParticleSystem *psys) { ParticleSystem *kpsys; - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; int psys_num = BLI_findindex(&ob->particlesystem, psys); int keys_valid = 1; psys->totkeyed = 0; - for(; kpt; kpt=kpt->next) { - kpsys = NULL; - if(kpt->ob==ob || kpt->ob==NULL) { - if(kpt->psys >= psys_num) - kpsys = BLI_findlink(&ob->particlesystem, kpt->psys-1); + for(; pt; pt=pt->next) { + kpsys = psys_get_target_system(ob, pt); - if(kpsys && kpsys->totpart) { - kpt->flag |= KEYED_TARGET_VALID; - psys->totkeyed += keys_valid; - if(psys->flag & PSYS_KEYED_TIMING && kpt->duration != 0.0f) - psys->totkeyed += 1; - } - else { - kpt->flag &= ~KEYED_TARGET_VALID; - keys_valid = 0; - } + if(kpsys && kpsys->totpart) { + psys->totkeyed += keys_valid; + if(psys->flag & PSYS_KEYED_TIMING && pt->duration != 0.0f) + psys->totkeyed += 1; } else { - if(kpt->ob) - kpsys = BLI_findlink(&kpt->ob->particlesystem, kpt->psys-1); - - if(kpsys && kpsys->totpart) { - kpt->flag |= KEYED_TARGET_VALID; - psys->totkeyed += keys_valid; - if(psys->flag & PSYS_KEYED_TIMING && kpt->duration != 0.0f) - psys->totkeyed += 1; - } - else { - kpt->flag &= ~KEYED_TARGET_VALID; - keys_valid = 0; - } + keys_valid = 0; } } @@ -2023,10 +2089,9 @@ static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) { Object *kob = ob; ParticleSystem *kpsys = psys; - KeyedParticleTarget *kpt; + ParticleTarget *pt; ParticleData *pa; int totpart = psys->totpart, i, k, totkeys = psys->totkeyed; - float prevtime, nexttime, keyedtime; /* no proper targets so let's clear and bail out */ if(psys->totkeyed==0) { @@ -2050,23 +2115,23 @@ static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) psys->flag &= ~PSYS_KEYED; - kpt = psys->keyed_targets.first; + pt = psys->targets.first; for(k=0; kob) - kpsys = BLI_findlink(&kpt->ob->particlesystem, kpt->psys - 1); + if(pt->ob) + kpsys = BLI_findlink(&pt->ob->particlesystem, pt->psys - 1); else - kpsys = BLI_findlink(&ob->particlesystem, kpt->psys - 1); + kpsys = BLI_findlink(&ob->particlesystem, pt->psys - 1); for(i=0,pa=psys->particles; ikeys + k)->time = -1.0; /* use current time */ - psys_get_particle_state(scene, kpt->ob, kpsys, i%kpsys->totpart, pa->keys + k, 1); + psys_get_particle_state(scene, pt->ob, kpsys, i%kpsys->totpart, pa->keys + k, 1); if(psys->flag & PSYS_KEYED_TIMING){ - (pa->keys+k)->time = pa->time + kpt->time; - if(kpt->duration != 0.0f && k+1 < totkeys) { + (pa->keys+k)->time = pa->time + pt->time; + if(pt->duration != 0.0f && k+1 < totkeys) { copy_particle_key(pa->keys+k+1, pa->keys+k, 1); - (pa->keys+k+1)->time = pa->time + kpt->time + kpt->duration; + (pa->keys+k+1)->time = pa->time + pt->time + pt->duration; } } else if(totkeys > 1) @@ -2075,10 +2140,10 @@ static void set_keyed_keys(Scene *scene, Object *ob, ParticleSystem *psys) pa->keys->time = pa->time; } - if(psys->flag & PSYS_KEYED_TIMING && kpt->duration!=0.0f) + if(psys->flag & PSYS_KEYED_TIMING && pt->duration!=0.0f) k++; - kpt = (kpt->next && kpt->next->flag & KEYED_TARGET_VALID) ? kpt = kpt->next : psys->keyed_targets.first; + pt = (pt->next && pt->next->flag & PTARGET_VALID) ? pt = pt->next : psys->targets.first; } psys->flag |= PSYS_KEYED; @@ -2297,6 +2362,7 @@ static void particle_cache_interpolate(int index, void *psys_ptr, float frs_sec, VecMulf(keys[2].vel, dfra / frs_sec); psys_interpolate_particle(-1, keys, (cfra - cfra1) / dfra, &pa->state, 1); + QuatInterpol(pa->state.rot, keys[1].rot,keys[2].rot, (cfra - cfra1) / dfra); VecMulf(pa->state.vel, frs_sec / dfra); @@ -2340,6 +2406,30 @@ static int get_particles_from_cache(Scene *scene, Object *ob, ParticleSystem *ps /************************************************/ /* Effectors */ /************************************************/ +static void update_particle_tree(ParticleSystem *psys) +{ + if(psys) { + ParticleData *pa = psys->particles; + int p, totpart = psys->totpart; + + if(!psys->tree || psys->tree_frame != psys->cfra) { + + BLI_kdtree_free(psys->tree); + + psys->tree = BLI_kdtree_new(totpart); + + for(p=0, pa=psys->particles; pflag & (PARS_NO_DISP+PARS_UNEXIST) || pa->alive != PARS_ALIVE) + continue; + + BLI_kdtree_insert(psys->tree, p, pa->state.co, NULL); + } + BLI_kdtree_balance(psys->tree); + + psys->tree_frame = psys->cfra; + } + } +} static void do_texture_effector(Tex *tex, short mode, short is_2d, float nabla, short object, float *pa_co, float obmat[4][4], float force_val, float falloff, float *field) { TexResult result[4]; @@ -2541,31 +2631,29 @@ void psys_end_effectors(ParticleSystem *psys) /* NOTE: ec->ob is not valid in here anymore! - dg */ - ListBase *lb=&psys->effectors; - if(lb->first) { - ParticleEffectorCache *ec; - for(ec= lb->first; ec; ec= ec->next){ - if(ec->distances) - MEM_freeN(ec->distances); + ParticleEffectorCache *ec = psys->effectors.first; - if(ec->locations) - MEM_freeN(ec->locations); + for(; ec; ec= ec->next){ + if(ec->distances) + MEM_freeN(ec->distances); - if(ec->face_minmax) - MEM_freeN(ec->face_minmax); + if(ec->locations) + MEM_freeN(ec->locations); - if(ec->vert_cos) - MEM_freeN(ec->vert_cos); + if(ec->face_minmax) + MEM_freeN(ec->face_minmax); - if(ec->tree) - BLI_kdtree_free(ec->tree); - - if(ec->rng) - rng_free(ec->rng); - } + if(ec->vert_cos) + MEM_freeN(ec->vert_cos); - BLI_freelistN(lb); + if(ec->tree) + BLI_kdtree_free(ec->tree); + + if(ec->rng) + rng_free(ec->rng); } + + BLI_freelistN(&psys->effectors); } static void precalc_effectors(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra) @@ -2648,7 +2736,84 @@ static void precalc_effectors(Scene *scene, Object *ob, ParticleSystem *psys, Pa } } +int effector_find_co(Scene *scene, float *pco, SurfaceModifierData *sur, Object *ob, PartDeflect *pd, float *co, float *nor, float *vel, int *index) +{ + SurfaceModifierData *surmd = NULL; + int ret = 0; + if(sur) + surmd = sur; + else if(pd && pd->flag&PFIELD_SURFACE) + { + surmd = (SurfaceModifierData *)modifiers_findByType ( ob, eModifierType_Surface ); + } + + if(surmd) { + /* closest point in the object surface is an effector */ + BVHTreeNearest nearest; + + nearest.index = -1; + nearest.dist = FLT_MAX; + + BLI_bvhtree_find_nearest(surmd->bvhtree->tree, pco, &nearest, surmd->bvhtree->nearest_callback, surmd->bvhtree); + + if(nearest.index != -1) { + VECCOPY(co, nearest.co); + + if(nor) { + VECCOPY(nor, nearest.no); + } + + if(vel) { + MFace *mface = CDDM_get_face(surmd->dm, nearest.index); + + VECCOPY(vel, surmd->v[mface->v1].co); + VecAddf(vel, vel, surmd->v[mface->v2].co); + VecAddf(vel, vel, surmd->v[mface->v3].co); + if(mface->v4) + VecAddf(vel, vel, surmd->v[mface->v4].co); + + VecMulf(vel, mface->v4 ? 0.25f : 0.333f); + } + + if(index) + *index = nearest.index; + + ret = 1; + } + else { + co[0] = co[1] = co[2] = 0.0f; + + if(nor) + nor[0] = nor[1] = nor[2] = 0.0f; + + if(vel) + vel[0] = vel[1] = vel[2] = 0.0f; + } + } + else { + /* use center of object for distance calculus */ + VECCOPY(co, ob->obmat[3]); + + if(nor) { + VECCOPY(nor, ob->obmat[2]); + } + + if(vel) { + Object obcopy = *ob; + + VECCOPY(vel, ob->obmat[3]); + + where_is_object_time(scene, ob, scene->r.cfra - 1.0); + + VecSubf(vel, vel, ob->obmat[3]); + + *ob = obcopy; + } + } + + return ret; +} /* calculate forces that all effectors apply to a particle*/ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene, Object *ob, ParticleSystem *psys, float *rootco, float *force_field, float *vel,float framestep, float cfra) { @@ -2658,12 +2823,11 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene, ParticleData *epa; ParticleKey estate; PartDeflect *pd; - SurfaceModifierData *surmd = NULL; ListBase *lb=&psys->effectors; ParticleEffectorCache *ec; - float distance, vec_to_part[3]; - float falloff, charge = 0.0f; - int p; + float distance, vec_to_part[3], pco[3], co[3]; + float falloff, charge = 0.0f, strength; + int p, face_index=-1; /* check all effector objects for interaction */ if(lb->first){ @@ -2687,45 +2851,33 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene, where_is_object_time(scene, eob,cfra); if(pd && pd->flag&PFIELD_SURFACE) { - surmd = (SurfaceModifierData *)modifiers_findByType ( eob, eModifierType_Surface ); - } - if(surmd) { - /* closest point in the object surface is an effector */ - BVHTreeNearest nearest; float velocity[3]; - - nearest.index = -1; - nearest.dist = FLT_MAX; - /* using velocity corrected location allows for easier sliding over effector surface */ VecCopyf(velocity, state->vel); VecMulf(velocity, psys_get_timestep(psys->part)); - VecAddf(vec_to_part, state->co, velocity); - - BLI_bvhtree_find_nearest(surmd->bvhtree->tree, vec_to_part, &nearest, surmd->bvhtree->nearest_callback, surmd->bvhtree); - - if(nearest.index != -1) { - VecSubf(vec_to_part, state->co, nearest.co); - } - else - vec_to_part[0] = vec_to_part[1] = vec_to_part[2] = 0.0f; + VecAddf(pco, state->co, velocity); } else - /* use center of object for distance calculus */ - VecSubf(vec_to_part, state->co, eob->obmat[3]); + VECCOPY(pco, state->co); + + effector_find_co(scene, pco, NULL, eob, pd, co, NULL, NULL, &face_index); + + VecSubf(vec_to_part, state->co, co); distance = VecLength(vec_to_part); falloff=effector_falloff(pd,eob->obmat[2],vec_to_part); + strength = pd->f_strength * psys->part->effector_weight[0] * psys->part->effector_weight[pd->forcefield]; + if(falloff<=0.0f) ; /* don't do anything */ else if(pd->forcefield==PFIELD_TEXTURE) { do_texture_effector(pd->tex, pd->tex_mode, pd->flag&PFIELD_TEX_2D, pd->tex_nabla, pd->flag & PFIELD_TEX_OBJECT, (pd->flag & PFIELD_TEX_ROOTCO) ? rootco : state->co, eob->obmat, - pd->f_strength, falloff, force_field); + strength, falloff, force_field); } else { - do_physical_effector(scene, eob, state->co, pd->forcefield,pd->f_strength,distance, + do_physical_effector(scene, eob, state->co, pd->forcefield,strength,distance, falloff,0.0,pd->f_damp,eob->obmat[2],vec_to_part, state->vel,force_field,pd->flag&PFIELD_PLANAR,ec->rng,pd->f_noise,charge,pa->size); } @@ -2766,10 +2918,12 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene, falloff=effector_falloff(pd,estate.vel,vec_to_part); + strength = pd->f_strength * psys->part->effector_weight[0] * psys->part->effector_weight[pd->forcefield]; + if(falloff<=0.0f) ; /* don't do anything */ else - do_physical_effector(scene, eob, state->co, pd->forcefield,pd->f_strength,distance, + do_physical_effector(scene, eob, state->co, pd->forcefield,strength,distance, falloff,epart->size,pd->f_damp,estate.vel,vec_to_part, state->vel,force_field,0, ec->rng, pd->f_noise,charge,pa->size); } @@ -3121,20 +3275,7 @@ int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos return intersect; } -/* container for moving data between deflet_particle and particle_intersect_face */ -typedef struct ParticleCollision -{ - struct Object *ob, *ob_t; // collided and current objects - struct CollisionModifierData *md; // collision modifier for ob_t; - float nor[3]; // normal at collision point - float vel[3]; // velocity of collision point - float co1[3], co2[3]; // ray start and end points - float ray_len; // original length of co2-co1, needed for collision time evaluation - float t; // time of previous collision, needed for substracting face velocity -} -ParticleCollision; - -static void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit) +void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit) { ParticleCollision *col = (ParticleCollision *) userdata; MFace *face = col->md->mfaces + index; @@ -3209,20 +3350,27 @@ static void particle_intersect_face(void *userdata, int index, const BVHTreeRay /* 1. check for all possible deflectors for closest intersection on particle path */ /* 2. if deflection was found kill the particle or calculate new coordinates */ static void deflect_particle(Scene *scene, Object *pob, ParticleSystemModifierData *psmd, ParticleSystem *psys, ParticleSettings *part, ParticleData *pa, int p, float timestep, float dfra, float cfra){ - Object *ob = NULL; + Object *ob = NULL, *skip_ob = NULL; ListBase *lb=&psys->effectors; ParticleEffectorCache *ec; ParticleKey reaction_state; ParticleCollision col; BVHTreeRayHit hit; float ray_dir[3], zerovec[3]={0.0,0.0,0.0}; - float radius = ((part->flag & PART_SIZE_DEFL)?pa->size:0.0f); + float radius = ((part->flag & PART_SIZE_DEFL)?pa->size:0.0f), boid_z; int deflections=0, max_deflections=10; VECCOPY(col.co1, pa->prev_state.co); VECCOPY(col.co2, pa->state.co); col.t = 0.0f; + /* override for boids */ + if(part->phystype == PART_PHYS_BOIDS) { + radius = pa->size; + boid_z = pa->state.co[2]; + skip_ob = pa->stick_ob; + } + /* 10 iterations to catch multiple deflections */ if(lb->first) while(deflections < max_deflections){ /* 1. */ @@ -3240,13 +3388,17 @@ static void deflect_particle(Scene *scene, Object *pob, ParticleSystemModifierDa if(ec->type & PSYS_EC_DEFLECT){ ob= ec->ob; - if(part->type!=PART_HAIR) - where_is_object_time(scene, ob,cfra); + /* for boids: don't check with current ground object */ + if(ob==skip_ob) + continue; /* particles should not collide with emitter at birth */ if(ob==pob && pa->time < cfra && pa->time >= psys->cfra) continue; + if(part->type!=PART_HAIR) + where_is_object_time(scene,ob,cfra); + col.md = ( CollisionModifierData * ) ( modifiers_findByType ( ec->ob, eModifierType_Collision ) ); col.ob_t = ob; @@ -3378,6 +3530,13 @@ static void deflect_particle(Scene *scene, Object *pob, ParticleSystemModifierDa /* make sure we don't hit the current face again */ VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f)); + if(part->phystype == PART_PHYS_BOIDS && part->boids->options & BOID_ALLOW_LAND) { + if(pa->boid->mode == eBoidMode_OnLand || co[2] <= boid_z) { + co[2] = boid_z; + vel[2] = 0.0f; + } + } + /* store state for reactors */ VECCOPY(reaction_state.co, co); VecLerpf(reaction_state.vel, pa->prev_state.vel, pa->state.vel, dt); @@ -3411,564 +3570,6 @@ static void deflect_particle(Scene *scene, Object *pob, ParticleSystemModifierDa } } /************************************************/ -/* Boid physics */ -/************************************************/ -static int boid_see_mesh(ListBase *lb, Scene *scene, Object *pob, ParticleSystem *psys, float *vec1, float *vec2, float *loc, float *nor, float cfra) -{ - Object *ob, *min_ob; - DerivedMesh *dm; - MFace *mface; - MVert *mvert; - ParticleEffectorCache *ec; - ParticleSystemModifierData *psmd=psys_get_modifier(pob,psys); - float imat[4][4]; - float co1[3], co2[3], min_w[4], min_d; - int min_face=0, intersect=0; - - if(lb->first){ - intersect=0; - min_d=20000.0; - min_ob=NULL; - for(ec=lb->first; ec; ec=ec->next){ - if(ec->type & PSYS_EC_DEFLECT){ - ob= ec->ob; - - if(psys->part->type!=PART_HAIR) - where_is_object_time(scene, ob,cfra); - - if(ob==pob) - dm=psmd->dm; - else - dm=0; - - VECCOPY(co1,vec1); - VECCOPY(co2,vec2); - - if(ec->vert_cos==0){ - /* convert particle coordinates to object coordinates */ - Mat4Invert(imat,ob->obmat); - - Mat4MulVecfl(imat,co1); - Mat4MulVecfl(imat,co2); - } - - if(psys_intersect_dm(scene,ob,dm,ec->vert_cos,co1,co2,&min_d,&min_face,min_w,ec->face_minmax,0,0,0)) - min_ob=ob; - } - } - if(min_ob){ - ob=min_ob; - - if(ob==pob){ - dm=psmd->dm; - } - else{ - psys_disable_all(ob); - - dm=mesh_get_derived_final(scene, ob, 0); - if(dm==0) - dm=mesh_get_derived_deform(scene, ob, 0); - - psys_enable_all(ob); - } - - mface=dm->getFaceDataArray(dm,CD_MFACE); - mface+=min_face; - mvert=dm->getVertDataArray(dm,CD_MVERT); - - /* get deflection point & normal */ - psys_interpolate_face(mvert,mface,0,0,min_w,loc,nor,0,0,0,0); - - VECADD(nor,nor,loc); - Mat4MulVecfl(ob->obmat,loc); - Mat4MulVecfl(ob->obmat,nor); - VECSUB(nor,nor,loc); - return 1; - } - } - return 0; -} -/* vector calculus functions in 2d vs. 3d */ -static void set_boid_vec_func(BoidVecFunc *bvf, int is_2d) -{ - if(is_2d){ - bvf->Addf = Vec2Addf; - bvf->Subf = Vec2Subf; - bvf->Mulf = Vec2Mulf; - bvf->Length = Vec2Length; - bvf->Normalize = Normalize2; - bvf->Inpf = Inp2f; - bvf->Copyf = Vec2Copyf; - } - else{ - bvf->Addf = VecAddf; - bvf->Subf = VecSubf; - bvf->Mulf = VecMulf; - bvf->Length = VecLength; - bvf->Normalize = Normalize; - bvf->Inpf = Inpf; - bvf->Copyf = VecCopyf; - } -} -/* boids have limited processing capability so once there's too much information (acceleration) no more is processed */ -static int add_boid_acc(BoidVecFunc *bvf, float lat_max, float tan_max, float *lat_accu, float *tan_accu, float *acc, float *dvec, float *vel) -{ - static float tangent[3]; - static float tan_length; - - if(vel){ - bvf->Copyf(tangent,vel); - tan_length=bvf->Normalize(tangent); - return 1; - } - else{ - float cur_tan, cur_lat; - float tan_acc[3], lat_acc[3]; - int ret=0; - - bvf->Copyf(tan_acc,tangent); - - if(tan_length>0.0){ - bvf->Mulf(tan_acc,Inpf(tangent,dvec)); - - bvf->Subf(lat_acc,dvec,tan_acc); - } - else{ - bvf->Copyf(tan_acc,dvec); - lat_acc[0]=lat_acc[1]=lat_acc[2]=0.0f; - *lat_accu=lat_max; - } - - cur_tan=bvf->Length(tan_acc); - cur_lat=bvf->Length(lat_acc); - - /* add tangential acceleration */ - if(*lat_accu+cur_lat<=lat_max){ - bvf->Addf(acc,acc,lat_acc); - *lat_accu+=cur_lat; - ret=1; - } - else{ - bvf->Mulf(lat_acc,(lat_max-*lat_accu)/cur_lat); - bvf->Addf(acc,acc,lat_acc); - *lat_accu=lat_max; - } - - /* add lateral acceleration */ - if(*tan_accu+cur_tan<=tan_max){ - bvf->Addf(acc,acc,tan_acc); - *tan_accu+=cur_tan; - ret=1; - } - else{ - bvf->Mulf(tan_acc,(tan_max-*tan_accu)/cur_tan); - bvf->Addf(acc,acc,tan_acc); - *tan_accu=tan_max; - } - - return ret; - } -} -/* determines the acceleration that the boid tries to acchieve */ -static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Scene *scene, Object *ob, ParticleSystem *psys, ParticleSettings *part, KDTree *tree, float timestep, float cfra, float *acc) -{ - ParticleData *pars=psys->particles; - KDTreeNearest ptn[MAX_BOIDNEIGHBOURS+1]; - ParticleEffectorCache *ec=0; - float dvec[3]={0.0,0.0,0.0}, ob_co[3], ob_nor[3]; - float avoid[3]={0.0,0.0,0.0}, velocity[3]={0.0,0.0,0.0}, center[3]={0.0,0.0,0.0}; - float cubedist[MAX_BOIDNEIGHBOURS+1]; - int i, n, neighbours=0, near, not_finished=1; - - float cur_vel; - float lat_accu=0.0f, max_lat_acc=part->max_vel*part->max_lat_acc; - float tan_accu=0.0f, max_tan_acc=part->max_vel*part->max_tan_acc; - float avg_vel=part->average_vel*part->max_vel; - - acc[0]=acc[1]=acc[2]=0.0f; - /* the +1 neighbour is because boid itself is in the tree */ - neighbours=BLI_kdtree_find_n_nearest(tree,part->boidneighbours+1,pa->state.co,NULL,ptn); - - for(n=1; nsize),3.0); - cubedist[n]=1.0f/MAX2(cubedist[n],1.0f); - } - - /* initialize tangent */ - add_boid_acc(bvf,0.0,0.0,0,0,0,0,pa->state.vel); - - for(i=0; iboidrule[i]){ - case BOID_COLLIDE: - /* collision avoidance */ - bvf->Copyf(dvec,pa->prev_state.vel); - bvf->Mulf(dvec,5.0f); - bvf->Addf(dvec,dvec,pa->prev_state.co); - if(boid_see_mesh(&psys->effectors,scene, ob,psys,pa->prev_state.co,dvec,ob_co,ob_nor,cfra)){ - float probelen = bvf->Length(dvec); - float proj; - float oblen; - - Normalize(ob_nor); - proj = bvf->Inpf(ob_nor,pa->prev_state.vel); - - bvf->Subf(dvec,pa->prev_state.co,ob_co); - oblen=bvf->Length(dvec); - - bvf->Copyf(dvec,ob_nor); - bvf->Mulf(dvec,-proj); - bvf->Mulf(dvec,((probelen/oblen)-1.0f)*100.0f*part->boidfac[BOID_COLLIDE]); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - break; - case BOID_AVOID: - /* predator avoidance */ - if(psys->effectors.first){ - for(ec=psys->effectors.first; ec; ec=ec->next){ - if(ec->type & PSYS_EC_EFFECTOR){ - Object *eob = ec->ob; - PartDeflect *pd = eob->pd; - - if(pd->forcefield==PFIELD_FORCE && pd->f_strength<0.0){ - float distance; - VECSUB(dvec,eob->obmat[3],pa->prev_state.co); - - distance=Normalize(dvec); - - if(part->flag & PART_DIE_ON_COL && distance < pd->mindist){ - pa->alive = PARS_DYING; - pa->dietime=cfra; - i=BOID_TOT_RULES; - break; - } - - if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist) - ; - else{ - bvf->Mulf(dvec,part->boidfac[BOID_AVOID]*pd->f_strength/(float)pow((double)distance,(double)pd->f_power)); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - } - } - else if(ec->type & PSYS_EC_PARTICLE){ - Object *eob = ec->ob; - ParticleSystem *epsys; - ParticleSettings *epart; - ParticleKey state; - PartDeflect *pd; - KDTreeNearest ptn2[MAX_BOIDNEIGHBOURS]; - int totepart, p, count; - float distance; - epsys= BLI_findlink(&eob->particlesystem,ec->psys_nbr); - epart= epsys->part; - pd= epart->pd; - totepart= epsys->totpart; - - if(pd->forcefield==PFIELD_FORCE && pd->f_strength<0.0 && ec->tree){ - count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2); - for(p=0; pprev_state.co); - - distance = Normalize(dvec); - - if(part->flag & PART_DIE_ON_COL && distance < (epsys->particles+ptn2[p].index)->size){ - pa->alive = PARS_DYING; - pa->dietime=cfra; - i=BOID_TOT_RULES; - break; - } - - if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist) - ; - else{ - bvf->Mulf(dvec,part->boidfac[BOID_AVOID]*pd->f_strength/(float)pow((double)distance,(double)pd->f_power)); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - } - } - } - } - } - } - break; - case BOID_CROWD: - /* crowd avoidance */ - near=0; - for(n=1; nsize){ - if(ptn[n].dist!=0.0f) { - bvf->Subf(dvec,pa->prev_state.co,pars[ptn[n].index].state.co); - bvf->Mulf(dvec,(2.0f*pa->size-ptn[n].dist)/ptn[n].dist); - bvf->Addf(avoid,avoid,dvec); - near++; - } - } - /* ptn[] is distance ordered so no need to check others */ - else break; - } - if(near){ - bvf->Mulf(avoid,part->boidfac[BOID_CROWD]*2.0f/timestep); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,avoid,0); - } - break; - case BOID_CENTER: - /* flock centering */ - if(neighbours>1){ - for(n=1; nAddf(center,center,pars[ptn[n].index].state.co); - } - bvf->Mulf(center,1.0f/((float)neighbours-1.0f)); - - bvf->Subf(dvec,center,pa->prev_state.co); - - bvf->Mulf(dvec,part->boidfac[BOID_CENTER]*2.0f); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - break; - case BOID_AV_VEL: - /* average velocity */ - cur_vel=bvf->Length(pa->prev_state.vel); - if(cur_vel>0.0){ - bvf->Copyf(dvec,pa->prev_state.vel); - bvf->Mulf(dvec,part->boidfac[BOID_AV_VEL]*(avg_vel-cur_vel)/cur_vel); - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - break; - case BOID_VEL_MATCH: - /* velocity matching */ - if(neighbours>1){ - for(n=1; nCopyf(dvec,pars[ptn[n].index].state.vel); - bvf->Mulf(dvec,cubedist[n]); - bvf->Addf(velocity,velocity,dvec); - } - bvf->Mulf(velocity,1.0f/((float)neighbours-1.0f)); - - bvf->Subf(dvec,velocity,pa->prev_state.vel); - - bvf->Mulf(dvec,part->boidfac[BOID_VEL_MATCH]); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - break; - case BOID_GOAL: - /* goal seeking */ - if(psys->effectors.first){ - for(ec=psys->effectors.first; ec; ec=ec->next){ - if(ec->type & PSYS_EC_EFFECTOR){ - Object *eob = ec->ob; - PartDeflect *pd = eob->pd; - float temp[4]; - - if(pd->forcefield==PFIELD_FORCE && pd->f_strength>0.0){ - float distance; - VECSUB(dvec,eob->obmat[3],pa->prev_state.co); - - distance=Normalize(dvec); - - if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist) - ; - else{ - VecMulf(dvec,pd->f_strength*part->boidfac[BOID_GOAL]/(float)pow((double)distance,(double)pd->f_power)); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - } - else if(pd->forcefield==PFIELD_GUIDE){ - float distance; - - where_on_path(eob, (cfra-pa->time)/pa->lifetime, temp, dvec); - - VECSUB(dvec,temp,pa->prev_state.co); - - distance=Normalize(dvec); - - if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist) - ; - else{ - VecMulf(dvec,pd->f_strength*part->boidfac[BOID_GOAL]/(float)pow((double)distance,(double)pd->f_power)); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - } - } - else if(ec->type & PSYS_EC_PARTICLE){ - Object *eob = ec->ob; - ParticleSystem *epsys; - ParticleSettings *epart; - ParticleKey state; - PartDeflect *pd; - KDTreeNearest ptn2[MAX_BOIDNEIGHBOURS]; - int totepart, p, count; - float distance; - epsys= BLI_findlink(&eob->particlesystem,ec->psys_nbr); - epart= epsys->part; - pd= epart->pd; - totepart= epsys->totpart; - - if(pd->forcefield==PFIELD_FORCE && pd->f_strength>0.0 && ec->tree){ - count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2); - for(p=0; pprev_state.co); - - distance = Normalize(dvec); - - if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist) - ; - else{ - bvf->Mulf(dvec,part->boidfac[BOID_AVOID]*pd->f_strength/(float)pow((double)distance,(double)pd->f_power)); - - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - } - } - } - } - } - } - break; - case BOID_LEVEL: - /* level flight */ - if((part->flag & PART_BOIDS_2D)==0){ - dvec[0]=dvec[1]=0.0; - dvec[2]=-pa->prev_state.vel[2]; - - VecMulf(dvec,part->boidfac[BOID_LEVEL]); - not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0); - } - break; - } - } -} -/* tries to realize the wanted acceleration */ -static void boid_body(Scene *scene, BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys, ParticleSettings *part, float timestep, float *acc) -{ - float dvec[3], bvec[3], length, max_vel=part->max_vel; - float q2[4], q[4]; - float g=9.81f, pa_mass=part->mass; - float yvec[3]={0.0,1.0,0.0}, zvec[3]={0.0,0.0,-1.0}, bank; - - /* apply new velocity, location & rotation */ - copy_particle_key(&pa->state,&pa->prev_state,0); - - if(part->flag & PART_SIZEMASS) - pa_mass*=pa->size; - - /* by regarding the acceleration as a force at this stage we*/ - /* can get better controll allthough it's a bit unphysical */ - bvf->Mulf(acc,1.0f/pa_mass); - - bvf->Copyf(dvec,acc); - bvf->Mulf(dvec,timestep*timestep*0.5f); - - bvf->Copyf(bvec,pa->state.vel); - bvf->Mulf(bvec,timestep); - bvf->Addf(dvec,dvec,bvec); - bvf->Addf(pa->state.co,pa->state.co,dvec); - - /* air speed from wind and vortex effectors */ - if(psys->effectors.first) { - ParticleEffectorCache *ec; - for(ec=psys->effectors.first; ec; ec=ec->next) { - if(ec->type & PSYS_EC_EFFECTOR) { - Object *eob = ec->ob; - PartDeflect *pd = eob->pd; - float direction[3], vec_to_part[3]; - float falloff; - - if(pd->f_strength != 0.0f) { - VecCopyf(direction, eob->obmat[2]); - VecSubf(vec_to_part, pa->state.co, eob->obmat[3]); - - falloff=effector_falloff(pd, direction, vec_to_part); - - switch(pd->forcefield) { - case PFIELD_WIND: - if(falloff <= 0.0f) - ; /* don't do anything */ - else { - Normalize(direction); - VecMulf(direction, pd->f_strength * falloff); - bvf->Addf(pa->state.co, pa->state.co, direction); - } - break; - case PFIELD_VORTEX: - { - float distance, mag_vec[3]; - Crossf(mag_vec, direction, vec_to_part); - Normalize(mag_vec); - - distance = VecLength(vec_to_part); - - VecMulf(mag_vec, pd->f_strength * distance * falloff); - bvf->Addf(pa->state.co, pa->state.co, mag_vec); - break; - } - } - } - } - } - } - - - if((part->flag & PART_BOIDS_2D)==0 && pa->prev_state.vel[0]!=0.0 && pa->prev_state.vel[0]!=0.0 && pa->prev_state.vel[0]!=0.0){ - Crossf(yvec,pa->state.vel,zvec); - - Normalize(yvec); - - bank=Inpf(yvec,acc); - - bank=-(float)atan((double)(bank/g)); - - bank*=part->banking; - - bank-=pa->bank; - if(bank>M_PI*part->max_bank){ - bank=pa->bank+(float)M_PI*part->max_bank; - } - else if(bank<-M_PI*part->max_bank){ - bank=pa->bank-(float)M_PI*part->max_bank; - } - else - bank+=pa->bank; - - pa->bank=bank; - } - else{ - bank=0.0; - } - - - VecRotToQuat(pa->state.vel,bank,q); - - VECCOPY(dvec,pa->state.vel); - VecNegf(dvec); - vectoquat(dvec, OB_POSX, OB_POSZ, q2); - - QuatMul(pa->state.rot,q,q2); - - bvf->Mulf(acc,timestep); - bvf->Addf(pa->state.vel,pa->state.vel,acc); - - if(part->flag & PART_BOIDS_2D){ - pa->state.vel[2]=0.0; - pa->state.co[2]=part->groundz; - } - - length=bvf->Length(pa->state.vel); - if(length > max_vel) - bvf->Mulf(pa->state.vel,max_vel/length); -} -/************************************************/ /* Hair */ /************************************************/ static void save_hair(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra){ @@ -4025,9 +3626,9 @@ static void dynamics_step(Scene *scene, Object *ob, ParticleSystem *psys, Partic ParticleData *pa; ParticleSettings *part=psys->part; KDTree *tree=0; - BoidVecFunc bvf; IpoCurve *icu_esize= NULL; //=find_ipocurve(part->ipo,PART_EMIT_SIZE); // XXX old animation system Material *ma=give_current_material(ob,part->omat); + BoidBrainData bbd; float timestep; int p, totpart; /* current time */ @@ -4107,16 +3708,23 @@ static void dynamics_step(Scene *scene, Object *ob, ParticleSystem *psys, Partic precalc_effectors(scene, ob,psys,psmd,cfra); if(part->phystype==PART_PHYS_BOIDS){ - /* create particle tree for fast inter-particle comparisons */ - tree=BLI_kdtree_new(totpart); - for(p=0, pa=psys->particles; pflag & (PARS_NO_DISP+PARS_UNEXIST) || pa->alive!=PARS_ALIVE) - continue; + ParticleTarget *pt = psys->targets.first; + bbd.scene = scene; + bbd.ob = ob; + bbd.psys = psys; + bbd.part = part; + bbd.cfra = cfra; + bbd.dfra = dfra; + bbd.timestep = timestep; - BLI_kdtree_insert(tree, p, pa->state.co, NULL); + update_particle_tree(psys); + + boids_precalc_rules(part, cfra); + + for(; pt; pt=pt->next) { + if(pt->ob) + update_particle_tree(BLI_findlink(&pt->ob->particlesystem, pt->psys-1)); } - BLI_kdtree_balance(tree); - set_boid_vec_func(&bvf,part->flag&PART_BOIDS_2D); } /* main loop: calculate physics for all particles */ @@ -4185,10 +3793,14 @@ static void dynamics_step(Scene *scene, Object *ob, ParticleSystem *psys, Partic break; case PART_PHYS_BOIDS: { - float acc[3]; - boid_brain(&bvf, pa, scene, ob, psys, part, tree, timestep,cfra,acc); - if(pa->alive != PARS_DYING) - boid_body(scene, &bvf,pa,psys,part,timestep,acc); + bbd.goal_ob = NULL; + boid_brain(&bbd, p, pa); + if(pa->alive != PARS_DYING) { + boid_body(&bbd, pa); + + /* deflection */ + deflect_particle(scene,ob,psmd,psys,part,pa,p,timestep,pa_dfra,cfra); + } break; } } @@ -4368,8 +3980,8 @@ static void cached_step(Scene *scene, Object *ob, ParticleSystemModifierData *ps dietime = birthtime + (1 + pa->loop) * (pa->dietime - pa->time); /* update alive status and push events */ - if(pa->time > cfra) { - pa->alive = PARS_UNBORN; + if(pa->time >= cfra) { + pa->alive = pa->time==cfra ? PARS_ALIVE : PARS_UNBORN; reset_particle(scene, pa, psys, psmd, ob, 0.0f, cfra, NULL, NULL, NULL); } else if(dietime <= cfra){ @@ -4454,9 +4066,33 @@ static void psys_changed_type(Object *ob, ParticleSystem *psys) psys_reset(psys, PSYS_RESET_ALL); } -void psys_changed_physics(Object *ob, ParticleSystem *psys) +void psys_check_boid_data(ParticleSystem *psys) { - if(ELEM(psys->part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) { + ParticleData *pa = psys->particles; + int p = 1; + + if(!pa) + return; + + if(psys->part && psys->part->phystype==PART_PHYS_BOIDS) { + if(!pa->boid) { + pa->boid = MEM_callocN(psys->totpart * sizeof(BoidData), "Boid Data"); + + for(pa++; ptotpart; p++, pa++) + pa->boid = (pa-1)->boid + 1; + } + } + else if(pa->boid){ + MEM_freeN(pa->boid); + for(; ptotpart; p++, pa++) + pa->boid = NULL; + } +} +static void psys_changed_physics(Object *ob, ParticleSystem *psys) +{ + ParticleSettings *part = psys->part; + + if(ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) { PTCacheID pid; BKE_ptcache_id_from_particles(&pid, ob, psys); BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0); @@ -4465,6 +4101,24 @@ void psys_changed_physics(Object *ob, ParticleSystem *psys) free_keyed_keys(psys); psys->flag &= ~PSYS_KEYED; } + + if(part->phystype == PART_PHYS_BOIDS && part->boids == NULL) { + BoidState *state; + + psys_check_boid_data(psys); + + part->boids = MEM_callocN(sizeof(BoidSettings), "Boid Settings"); + boid_default_settings(part->boids); + + state = boid_new_state(part->boids); + BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Separate)); + BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Flock)); + + ((BoidRule*)state->rules.first)->flag |= BOIDRULE_CURRENT; + + state->flag |= BOIDSTATE_CURRENT; + BLI_addtail(&part->boids->states, state); + } } static void particles_fluid_step(Scene *scene, Object *ob, ParticleSystem *psys, int cfra) { diff --git a/source/blender/blenlib/BLI_kdtree.h b/source/blender/blenlib/BLI_kdtree.h index 49c21e424f7..585107b0c4a 100644 --- a/source/blender/blenlib/BLI_kdtree.h +++ b/source/blender/blenlib/BLI_kdtree.h @@ -52,9 +52,13 @@ void BLI_kdtree_balance(KDTree *tree); /* Find nearest returns index, and -1 if no node is found. * Find n nearest returns number of points found, with results in nearest. - * Normal is optional. */ +/* Normal is optional, but if given will limit results to points in normal direction from co. */ int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest); int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest); +/* Range search returns number of points found, with results in nearest */ +/* Normal is optional, but if given will limit results to points in normal direction from co. */ +/* Remember to free nearest after use! */ +int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KDTreeNearest **nearest); #endif diff --git a/source/blender/blenlib/intern/BLI_kdtree.c b/source/blender/blenlib/intern/BLI_kdtree.c index 8e8b2e9f0e9..79a46da4c66 100644 --- a/source/blender/blenlib/intern/BLI_kdtree.c +++ b/source/blender/blenlib/intern/BLI_kdtree.c @@ -130,7 +130,7 @@ void BLI_kdtree_balance(KDTree *tree) tree->root= kdtree_balance(tree->nodes, tree->totnode, 0); } -static float squared_distance(float *v1, float *v2, float *n1, float *n2) +static float squared_distance(float *v2, float *v1, float *n1, float *n2) { float d[3], dist; @@ -140,7 +140,8 @@ static float squared_distance(float *v1, float *v2, float *n1, float *n2) dist= d[0]*d[0] + d[1]*d[1] + d[2]*d[2]; - if(n1 && n2 && n1[0]*n2[0] + n1[1]*n2[1] + n1[2]*n2[2] < 0.0f) + //if(n1 && n2 && n1[0]*n2[0] + n1[1]*n2[1] + n1[2]*n2[2] < 0.0f) + if(n2 && d[0]*n2[0] + d[1]*n2[1] + d[2]*n2[2] < 0.0f) dist *= 10.0f; return dist; @@ -336,3 +337,111 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree return found; } +int range_compare(const void * a, const void * b) +{ + const KDTreeNearest *kda = a; + const KDTreeNearest *kdb = b; + + if(kda->dist < kdb->dist) + return -1; + else if(kda->dist > kdb->dist) + return 1; + else + return 0; +} +static void add_in_range(KDTreeNearest **ptn, int found, int *totfoundstack, int index, float dist, float *co) +{ + KDTreeNearest *to; + + if(found+1 > *totfoundstack) { + KDTreeNearest *temp=MEM_callocN((*totfoundstack+50)*sizeof(KDTreeNode), "psys_treefoundstack"); + memcpy(temp, *ptn, *totfoundstack * sizeof(KDTreeNearest)); + if(*ptn) + MEM_freeN(*ptn); + *ptn = temp; + *totfoundstack+=50; + } + + to = (*ptn) + found; + + to->index = index; + to->dist = sqrt(dist); + VecCopyf(to->co, co); +} +int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KDTreeNearest **nearest) +{ + KDTreeNode *root, *node=0; + KDTreeNode **stack, *defaultstack[100]; + KDTreeNearest *foundstack=NULL; + float range2 = range*range, dist2; + int i, totstack, cur=0, found=0, totfoundstack=0; + + if(!tree || !tree->root) + return 0; + + stack= defaultstack; + totstack= 100; + + root= tree->root; + + if(co[root->d] + range < root->co[root->d]) { + if(root->left) + stack[cur++]=root->left; + } + else if(co[root->d] - range > root->co[root->d]) { + if(root->right) + stack[cur++]=root->right; + } + else { + dist2 = squared_distance(root->co, co, root->nor, nor); + if(dist2 <= range2) + add_in_range(&foundstack, found++, &totfoundstack, root->index, dist2, root->co); + + if(root->left) + stack[cur++]=root->left; + if(root->right) + stack[cur++]=root->right; + } + + while(cur--) { + node=stack[cur]; + + if(co[node->d] + range < node->co[node->d]) { + if(node->left) + stack[cur++]=node->left; + } + else if(co[node->d] - range > node->co[node->d]) { + if(node->right) + stack[cur++]=node->right; + } + else { + dist2 = squared_distance(node->co, co, node->nor, nor); + if(dist2 <= range2) + add_in_range(&foundstack, found++, &totfoundstack, node->index, dist2, node->co); + + if(node->left) + stack[cur++]=node->left; + if(node->right) + stack[cur++]=node->right; + } + + if(cur+3 > totstack){ + KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack"); + memcpy(temp,stack,totstack*sizeof(KDTreeNode*)); + if(stack != defaultstack) + MEM_freeN(stack); + stack=temp; + totstack+=100; + } + } + + if(stack != defaultstack) + MEM_freeN(stack); + + if(found) + qsort(foundstack, found, sizeof(KDTreeNearest), range_compare); + + *nearest = foundstack; + + return found; +} diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index f258746dafe..c43c720bad0 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -53,6 +53,7 @@ #include "DNA_armature_types.h" #include "DNA_ID.h" #include "DNA_actuator_types.h" +#include "DNA_boid_types.h" #include "DNA_brush_types.h" #include "DNA_camera_types.h" #include "DNA_cloth_types.h" @@ -2990,6 +2991,29 @@ static void lib_link_particlesettings(FileData *fd, Main *main) part->dup_group = newlibadr(fd, part->id.lib, part->dup_group); part->eff_group = newlibadr(fd, part->id.lib, part->eff_group); part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob); + if(part->boids) { + BoidState *state = part->boids->states.first; + BoidRule *rule; + for(; state; state=state->next) { + rule = state->rules.first; + for(; rule; rule=rule->next) + switch(rule->type) { + case eBoidRuleType_Goal: + case eBoidRuleType_Avoid: + { + BoidRuleGoalAvoid *brga = (BoidRuleGoalAvoid*)rule; + brga->ob = newlibadr(fd, part->id.lib, brga->ob); + break; + } + case eBoidRuleType_FollowLeader: + { + BoidRuleFollowLeader *brfl = (BoidRuleFollowLeader*)rule; + brfl->ob = newlibadr(fd, part->id.lib, brfl->ob); + break; + } + } + } + } part->id.flag -= LIB_NEEDLINK; } part= part->id.next; @@ -3001,6 +3025,19 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part) part->adt= newdataadr(fd, part->adt); part->pd= newdataadr(fd, part->pd); part->pd2= newdataadr(fd, part->pd2); + + part->boids= newdataadr(fd, part->boids); + + if(part->boids) { + BoidState *state; + link_list(fd, &part->boids->states); + + for(state=part->boids->states.first; state; state=state->next) { + link_list(fd, &state->rules); + link_list(fd, &state->conditions); + link_list(fd, &state->actions); + } + } } static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase *particles) @@ -3015,10 +3052,10 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase psys->part = newlibadr_us(fd, id->lib, psys->part); if(psys->part) { - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; - for(; kpt; kpt=kpt->next) - kpt->ob=newlibadr(fd, id->lib, kpt->ob); + for(; pt; pt=pt->next) + pt->ob=newlibadr(fd, id->lib, pt->ob); psys->target_ob = newlibadr(fd, id->lib, psys->target_ob); @@ -3042,24 +3079,38 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase static void direct_link_particlesystems(FileData *fd, ListBase *particles) { ParticleSystem *psys; + ParticleData *pa; int a; for(psys=particles->first; psys; psys=psys->next) { psys->particles=newdataadr(fd,psys->particles); + if(psys->particles && psys->particles->hair){ - ParticleData *pa = psys->particles; - for(a=0; atotpart; a++, pa++) + for(a=0,pa=psys->particles; atotpart; a++, pa++) pa->hair=newdataadr(fd,pa->hair); } + if(psys->particles && psys->particles->keys){ - ParticleData *pa = psys->particles; - for(a=0; atotpart; a++, pa++) { + for(a=0,pa=psys->particles; atotpart; a++, pa++) { pa->keys= NULL; pa->totkey= 0; } psys->flag &= ~PSYS_KEYED; } + + if(psys->particles->boid) { + pa = psys->particles; + pa->boid = newdataadr(fd, pa->boid); + for(a=1,pa++; atotpart; a++, pa++) + pa->boid = (pa-1)->boid + 1; + } + else { + for(a=0,pa=psys->particles; atotpart; a++, pa++) + pa->boid = NULL; + } + + psys->child=newdataadr(fd,psys->child); psys->effectors.first=psys->effectors.last=0; @@ -3076,7 +3127,7 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles) direct_link_pointcache(fd, sb->pointcache); } - link_list(fd, &psys->keyed_targets); + link_list(fd, &psys->targets); psys->edit = 0; psys->free_edit = NULL; @@ -3089,6 +3140,8 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles) psys->pointcache= newdataadr(fd, psys->pointcache); if(psys->pointcache) direct_link_pointcache(fd, psys->pointcache); + + psys->tree = NULL; } return; } @@ -3649,6 +3702,9 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) surmd->dm = NULL; surmd->bvhtree = NULL; + surmd->x = NULL; + surmd->v = NULL; + surmd->numverts = 0; } else if (md->type==eModifierType_Hook) { HookModifierData *hmd = (HookModifierData*) md; @@ -8541,7 +8597,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) psys = MEM_callocN(sizeof(ParticleSystem), "particle_system"); psys->pointcache = BKE_ptcache_add(); - part = psys->part = psys_new_settings("PSys", main); + part = psys->part = psys_new_settings("ParticleSettings", main); /* needed for proper libdata lookup */ oldnewmap_insert(fd->libmap, psys->part, psys->part, 0); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 958e8bb874b..9e5fbfc2598 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -93,6 +93,7 @@ Any case: direct data is ALWAYS after the lib block #include "DNA_armature_types.h" #include "DNA_action_types.h" #include "DNA_actuator_types.h" +#include "DNA_boid_types.h" #include "DNA_brush_types.h" #include "DNA_camera_types.h" #include "DNA_cloth_types.h" @@ -550,6 +551,39 @@ static void write_userdef(WriteData *wd) } } +static void write_boid_state(WriteData *wd, BoidState *state) +{ + BoidRule *rule = state->rules.first; + //BoidCondition *cond = state->conditions.first; + + writestruct(wd, DATA, "BoidState", 1, state); + + for(; rule; rule=rule->next) { + switch(rule->type) { + case eBoidRuleType_Goal: + case eBoidRuleType_Avoid: + writestruct(wd, DATA, "BoidRuleGoalAvoid", 1, rule); + break; + case eBoidRuleType_AvoidCollision: + writestruct(wd, DATA, "BoidRuleAvoidCollision", 1, rule); + break; + case eBoidRuleType_FollowLeader: + writestruct(wd, DATA, "BoidRuleFollowLeader", 1, rule); + break; + case eBoidRuleType_AverageSpeed: + writestruct(wd, DATA, "BoidRuleAverageSpeed", 1, rule); + break; + case eBoidRuleType_Fight: + writestruct(wd, DATA, "BoidRuleFight", 1, rule); + break; + default: + writestruct(wd, DATA, "BoidRule", 1, rule); + break; + } + } + //for(; cond; cond=cond->next) + // writestruct(wd, DATA, "BoidCondition", 1, cond); +} /* TODO: replace *cache with *cachelist once it's coded */ #define PTCACHE_WRITE_PSYS 0 #define PTCACHE_WRITE_CLOTH 1 @@ -582,6 +616,15 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase) if (part->adt) write_animdata(wd, part->adt); writestruct(wd, DATA, "PartDeflect", 1, part->pd); writestruct(wd, DATA, "PartDeflect", 1, part->pd2); + + if(part->boids && part->phystype == PART_PHYS_BOIDS) { + BoidState *state = part->boids->states.first; + + writestruct(wd, DATA, "BoidSettings", 1, part->boids); + + for(; state; state=state->next) + write_boid_state(wd, state); + } } part= part->id.next; } @@ -589,7 +632,7 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase) static void write_particlesystems(WriteData *wd, ListBase *particles) { ParticleSystem *psys= particles->first; - KeyedParticleTarget *kpt; + ParticleTarget *pt; int a; for(; psys; psys=psys->next) { @@ -604,10 +647,13 @@ static void write_particlesystems(WriteData *wd, ListBase *particles) for(a=0; atotpart; a++, pa++) writestruct(wd, DATA, "HairKey", pa->totkey, pa->hair); } + + if(psys->particles->boid && psys->part->phystype == PART_PHYS_BOIDS) + writestruct(wd, DATA, "BoidData", psys->totpart, psys->particles->boid); } - kpt = psys->keyed_targets.first; - for(; kpt; kpt=kpt->next) - writestruct(wd, DATA, "KeyedParticleTarget", 1, kpt); + pt = psys->targets.first; + for(; pt; pt=pt->next) + writestruct(wd, DATA, "ParticleTarget", 1, pt); if(psys->child) writestruct(wd, DATA, "ChildParticle", psys->totchild ,psys->child); writestruct(wd, DATA, "SoftBody", 1, psys->soft); diff --git a/source/blender/editors/include/ED_physics.h b/source/blender/editors/include/ED_physics.h index b04bfb992dc..6ab804230d0 100644 --- a/source/blender/editors/include/ED_physics.h +++ b/source/blender/editors/include/ED_physics.h @@ -32,6 +32,7 @@ /* operators */ +void ED_operatortypes_boids(void); void ED_operatortypes_pointcache(void); void ED_operatortypes_fluid(void); //void ED_keymap_pointcache(struct wmWindowManager *wm); diff --git a/source/blender/editors/physics/physics_boids.c b/source/blender/editors/physics/physics_boids.c new file mode 100644 index 00000000000..2d3b11080e7 --- /dev/null +++ b/source/blender/editors/physics/physics_boids.c @@ -0,0 +1,433 @@ +/** + * $Id: + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Janne Karhu. + * All rights reserved. + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +//#include +//#include +// +#include "MEM_guardedalloc.h" + +#include "DNA_boid_types.h" +#include "DNA_particle_types.h" +//#include "DNA_curve_types.h" +#include "DNA_object_types.h" +//#include "DNA_material_types.h" +//#include "DNA_texture_types.h" +#include "DNA_scene_types.h" +//#include "DNA_world_types.h" + +#include "BKE_boids.h" +#include "BKE_context.h" +#include "BKE_depsgraph.h" +//#include "BKE_font.h" +//#include "BKE_library.h" +//#include "BKE_main.h" +//#include "BKE_material.h" +#include "BKE_particle.h" +//#include "BKE_texture.h" +//#include "BKE_utildefines.h" +//#include "BKE_world.h" + +//#include "BLI_editVert.h" +#include "BLI_listbase.h" +// +#include "RNA_access.h" +#include "RNA_enum_types.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +//#include "ED_curve.h" +//#include "ED_mesh.h" +// +//#include "buttons_intern.h" // own include + +/************************ add/del boid rule operators *********************/ +static int boidrule_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob= ptr.id.data; + ParticleSettings *part; + int type= RNA_enum_get(op->ptr, "type"); + + BoidRule *rule; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + part = psys->part; + + state = boid_get_current_state(part->boids); + + + for(rule=state->rules.first; rule; rule=rule->next) + rule->flag &= ~BOIDRULE_CURRENT; + + rule = boid_new_rule(type); + rule->flag |= BOIDRULE_CURRENT; + + BLI_addtail(&state->rules, rule); + + psys_flush_particle_settings(scene, part, PSYS_RECALC_RESET); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidrule_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Boid Rule"; + ot->description = "Add a boid rule to the current boid state."; + ot->idname= "BOID_OT_boidrule_add"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= boidrule_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", boidrule_type_items, 0, "Type", ""); +} +static int boidrule_del_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + BoidRule *rule; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + state = boid_get_current_state(psys->part->boids); + + + for(rule=state->rules.first; rule; rule=rule->next) { + if(rule->flag & BOIDRULE_CURRENT) { + BLI_remlink(&state->rules, rule); + MEM_freeN(rule); + break; + } + + } + rule = state->rules.first; + + if(rule) + rule->flag |= BOIDRULE_CURRENT; + + DAG_scene_sort(scene); + psys_flush_particle_settings(scene, psys->part, PSYS_RECALC_RESET); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidrule_del(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Boid Rule"; + ot->idname= "BOID_OT_boidrule_del"; + + /* api callbacks */ + ot->exec= boidrule_del_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/************************ move up/down boid rule operators *********************/ +static int boidrule_move_up_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + BoidRule *rule; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + state = boid_get_current_state(psys->part->boids); + for(rule = state->rules.first; rule; rule=rule->next) { + if(rule->flag & BOIDRULE_CURRENT && rule->prev) { + BLI_remlink(&state->rules, rule); + BLI_insertlink(&state->rules, rule->prev->prev, rule); + + psys_flush_particle_settings(scene, psys->part, PSYS_RECALC_RESET); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + break; + } + } + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidrule_move_up(wmOperatorType *ot) +{ + ot->name= "Move Up Boid Rule"; + ot->description= "Move boid rule up in the list."; + ot->idname= "BOID_OT_boidrule_move_up"; + + ot->exec= boidrule_move_up_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int boidrule_move_down_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + BoidRule *rule; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + state = boid_get_current_state(psys->part->boids); + for(rule = state->rules.first; rule; rule=rule->next) { + if(rule->flag & BOIDRULE_CURRENT && rule->next) { + BLI_remlink(&state->rules, rule); + BLI_insertlink(&state->rules, rule->next, rule); + + psys_flush_particle_settings(scene, psys->part, PSYS_RECALC_RESET); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + break; + } + } + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidrule_move_down(wmOperatorType *ot) +{ + ot->name= "Move Down Boid Rule"; + ot->description= "Move boid rule down in the list."; + ot->idname= "BOID_OT_boidrule_move_down"; + + ot->exec= boidrule_move_down_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + +/************************ add/del boid state operators *********************/ +static int boidstate_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob= ptr.id.data; + ParticleSettings *part; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + part = psys->part; + + for(state=part->boids->states.first; state; state=state->next) + state->flag &= ~BOIDSTATE_CURRENT; + + state = boid_new_state(part->boids); + state->flag |= BOIDSTATE_CURRENT; + + BLI_addtail(&part->boids->states, state); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidstate_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Boid State"; + ot->description = "Add a boid state to the particle system."; + ot->idname= "BOID_OT_boidstate_add"; + + /* api callbacks */ + ot->exec= boidstate_add_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} +static int boidstate_del_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + ParticleSettings *part; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + part = psys->part; + + for(state=part->boids->states.first; state; state=state->next) { + if(state->flag & BOIDSTATE_CURRENT) { + BLI_remlink(&part->boids->states, state); + MEM_freeN(state); + break; + } + + } + + /* there must be at least one state */ + if(!part->boids->states.first) { + state = boid_new_state(part->boids); + BLI_addtail(&part->boids->states, state); + } + else + state = part->boids->states.first; + + state->flag |= BOIDSTATE_CURRENT; + + DAG_scene_sort(scene); + psys_flush_particle_settings(scene, psys->part, PSYS_RECALC_RESET); + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidstate_del(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Boid State"; + ot->idname= "BOID_OT_boidstate_del"; + + /* api callbacks */ + ot->exec= boidstate_del_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/************************ move up/down boid state operators *********************/ +static int boidstate_move_up_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + BoidSettings *boids; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + boids = psys->part->boids; + + for(state = boids->states.first; state; state=state->next) { + if(state->flag & BOIDSTATE_CURRENT && state->prev) { + BLI_remlink(&boids->states, state); + BLI_insertlink(&boids->states, state->prev->prev, state); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + break; + } + } + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidstate_move_up(wmOperatorType *ot) +{ + ot->name= "Move Up Boid State"; + ot->description= "Move boid state up in the list."; + ot->idname= "BOID_OT_boidstate_move_up"; + + ot->exec= boidstate_move_up_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +static int boidstate_move_down_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); + ParticleSystem *psys= ptr.data; + Object *ob = ptr.id.data; + BoidSettings *boids; + BoidState *state; + + if(!psys || !psys->part || psys->part->phystype != PART_PHYS_BOIDS) + return OPERATOR_CANCELLED; + + boids = psys->part->boids; + + for(state = boids->states.first; state; state=state->next) { + if(state->flag & BOIDSTATE_CURRENT && state->next) { + BLI_remlink(&boids->states, state); + BLI_insertlink(&boids->states, state->next, state); + psys_flush_particle_settings(scene, psys->part, PSYS_RECALC_RESET); + break; + } + } + + return OPERATOR_FINISHED; +} + +void BOID_OT_boidstate_move_down(wmOperatorType *ot) +{ + ot->name= "Move Down Boid State"; + ot->description= "Move boid state down in the list."; + ot->idname= "BOID_OT_boidstate_move_down"; + + ot->exec= boidstate_move_down_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/*******************************************************************************/ +void ED_operatortypes_boids(void) +{ + WM_operatortype_append(BOID_OT_boidrule_add); + WM_operatortype_append(BOID_OT_boidrule_del); + WM_operatortype_append(BOID_OT_boidrule_move_up); + WM_operatortype_append(BOID_OT_boidrule_move_down); + + WM_operatortype_append(BOID_OT_boidstate_add); + WM_operatortype_append(BOID_OT_boidstate_del); + WM_operatortype_append(BOID_OT_boidstate_move_up); + WM_operatortype_append(BOID_OT_boidstate_move_down); +} \ No newline at end of file diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c index 5a55c5fb717..b427742077a 100644 --- a/source/blender/editors/space_api/spacetypes.c +++ b/source/blender/editors/space_api/spacetypes.c @@ -93,6 +93,7 @@ void ED_spacetypes_init(void) ED_operatortypes_marker(); ED_operatortypes_pointcache(); ED_operatortypes_fluid(); + ED_operatortypes_boids(); ui_view2d_operatortypes(); diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h index 20db9fce8f2..adae52c1ce7 100644 --- a/source/blender/editors/space_buttons/buttons_intern.h +++ b/source/blender/editors/space_buttons/buttons_intern.h @@ -78,10 +78,10 @@ void OBJECT_OT_particle_system_add(struct wmOperatorType *ot); void OBJECT_OT_particle_system_remove(struct wmOperatorType *ot); void PARTICLE_OT_new(struct wmOperatorType *ot); -void PARTICLE_OT_new_keyed_target(struct wmOperatorType *ot); -void PARTICLE_OT_remove_keyed_target(struct wmOperatorType *ot); -void PARTICLE_OT_keyed_target_move_up(struct wmOperatorType *ot); -void PARTICLE_OT_keyed_target_move_down(struct wmOperatorType *ot); +void PARTICLE_OT_new_target(struct wmOperatorType *ot); +void PARTICLE_OT_remove_target(struct wmOperatorType *ot); +void PARTICLE_OT_target_move_up(struct wmOperatorType *ot); +void PARTICLE_OT_target_move_down(struct wmOperatorType *ot); void SCENE_OT_render_layer_add(struct wmOperatorType *ot); void SCENE_OT_render_layer_remove(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 7dececd2679..8a9d2e9149b 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -30,6 +30,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_boid_types.h" #include "DNA_curve_types.h" #include "DNA_group_types.h" #include "DNA_object_types.h" @@ -57,6 +58,7 @@ #include "BLI_listbase.h" #include "RNA_access.h" +#include "RNA_enum_types.h" #include "WM_api.h" #include "WM_types.h" @@ -623,7 +625,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op) if(psys->part) part= psys_copy_settings(psys->part); else - part= psys_new_settings("PSys", bmain); + part= psys_new_settings("ParticleSettings", bmain); ob= ptr.id.data; @@ -632,6 +634,8 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op) psys->part = part; + psys_check_boid_data(psys); + DAG_scene_sort(scene); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); @@ -655,28 +659,28 @@ void PARTICLE_OT_new(wmOperatorType *ot) /********************** keyed particle target operators *********************/ -static int new_keyed_particle_target_exec(bContext *C, wmOperator *op) +static int new_particle_target_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); ParticleSystem *psys= ptr.data; Object *ob = ptr.id.data; - KeyedParticleTarget *kpt; + ParticleTarget *pt; if(!psys) return OPERATOR_CANCELLED; - kpt = psys->keyed_targets.first; - for(; kpt; kpt=kpt->next) - kpt->flag &= ~KEYED_TARGET_CURRENT; + pt = psys->targets.first; + for(; pt; pt=pt->next) + pt->flag &= ~PTARGET_CURRENT; - kpt = MEM_callocN(sizeof(KeyedParticleTarget), "keyed particle target"); + pt = MEM_callocN(sizeof(ParticleTarget), "keyed particle target"); - kpt->flag |= KEYED_TARGET_CURRENT; - kpt->psys = 1; + pt->flag |= PTARGET_CURRENT; + pt->psys = 1; - BLI_addtail(&psys->keyed_targets, kpt); + BLI_addtail(&psys->targets, pt); DAG_scene_sort(scene); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); @@ -686,44 +690,44 @@ static int new_keyed_particle_target_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void PARTICLE_OT_new_keyed_target(wmOperatorType *ot) +void PARTICLE_OT_new_target(wmOperatorType *ot) { /* identifiers */ - ot->name= "New Keyed Particle Target"; - ot->idname= "PARTICLE_OT_new_keyed_target"; + ot->name= "New Particle Target"; + ot->idname= "PARTICLE_OT_new_target"; /* api callbacks */ - ot->exec= new_keyed_particle_target_exec; + ot->exec= new_particle_target_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -static int remove_keyed_particle_target_exec(bContext *C, wmOperator *op) +static int remove_particle_target_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); ParticleSystem *psys= ptr.data; Object *ob = ptr.id.data; - KeyedParticleTarget *kpt; + ParticleTarget *pt; if(!psys) return OPERATOR_CANCELLED; - kpt = psys->keyed_targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->flag & KEYED_TARGET_CURRENT) { - BLI_remlink(&psys->keyed_targets, kpt); - MEM_freeN(kpt); + pt = psys->targets.first; + for(; pt; pt=pt->next) { + if(pt->flag & PTARGET_CURRENT) { + BLI_remlink(&psys->targets, pt); + MEM_freeN(pt); break; } } - kpt = psys->keyed_targets.last; + pt = psys->targets.last; - if(kpt) - kpt->flag |= KEYED_TARGET_CURRENT; + if(pt) + pt->flag |= PTARGET_CURRENT; DAG_scene_sort(scene); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); @@ -733,37 +737,37 @@ static int remove_keyed_particle_target_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void PARTICLE_OT_remove_keyed_target(wmOperatorType *ot) +void PARTICLE_OT_remove_target(wmOperatorType *ot) { /* identifiers */ - ot->name= "Remove Keyed Particle Target"; - ot->idname= "PARTICLE_OT_remove_keyed_target"; + ot->name= "Remove Particle Target"; + ot->idname= "PARTICLE_OT_remove_target"; /* api callbacks */ - ot->exec= remove_keyed_particle_target_exec; + ot->exec= remove_particle_target_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -/************************ move up modifier operator *********************/ +/************************ move up particle target operator *********************/ -static int keyed_target_move_up_exec(bContext *C, wmOperator *op) +static int target_move_up_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); ParticleSystem *psys= ptr.data; Object *ob = ptr.id.data; - KeyedParticleTarget *kpt; + ParticleTarget *pt; if(!psys) return OPERATOR_CANCELLED; - kpt = psys->keyed_targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->flag & KEYED_TARGET_CURRENT && kpt->prev) { - BLI_remlink(&psys->keyed_targets, kpt); - BLI_insertlink(&psys->keyed_targets, kpt->prev->prev, kpt); + pt = psys->targets.first; + for(; pt; pt=pt->next) { + if(pt->flag & PTARGET_CURRENT && pt->prev) { + BLI_remlink(&psys->targets, pt); + BLI_insertlink(&psys->targets, pt->prev->prev, pt); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); @@ -774,35 +778,35 @@ static int keyed_target_move_up_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void PARTICLE_OT_keyed_target_move_up(wmOperatorType *ot) +void PARTICLE_OT_target_move_up(wmOperatorType *ot) { - ot->name= "Move Up Keyed Target"; - ot->description= "Move keyed particle target up in the list."; - ot->idname= "PARTICLE_OT_keyed_target_move_up"; + ot->name= "Move Up Target"; + ot->description= "Move particle target up in the list."; + ot->idname= "PARTICLE_OT_target_move_up"; - ot->exec= keyed_target_move_up_exec; + ot->exec= target_move_up_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -/************************ move down modifier operator *********************/ +/************************ move down particle target operator *********************/ -static int keyed_target_move_down_exec(bContext *C, wmOperator *op) +static int target_move_down_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem); ParticleSystem *psys= ptr.data; Object *ob = ptr.id.data; - KeyedParticleTarget *kpt; + ParticleTarget *pt; if(!psys) return OPERATOR_CANCELLED; - kpt = psys->keyed_targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->flag & KEYED_TARGET_CURRENT && kpt->next) { - BLI_remlink(&psys->keyed_targets, kpt); - BLI_insertlink(&psys->keyed_targets, kpt->next, kpt); + pt = psys->targets.first; + for(; pt; pt=pt->next) { + if(pt->flag & PTARGET_CURRENT && pt->next) { + BLI_remlink(&psys->targets, pt); + BLI_insertlink(&psys->targets, pt->next, pt); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); @@ -813,13 +817,13 @@ static int keyed_target_move_down_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void PARTICLE_OT_keyed_target_move_down(wmOperatorType *ot) +void PARTICLE_OT_target_move_down(wmOperatorType *ot) { - ot->name= "Move Down Keyed Target"; - ot->description= "Move keyed particle target down in the list."; - ot->idname= "PARTICLE_OT_keyed_target_move_down"; + ot->name= "Move Down Target"; + ot->description= "Move particle target down in the list."; + ot->idname= "PARTICLE_OT_target_move_down"; - ot->exec= keyed_target_move_down_exec; + ot->exec= target_move_down_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 0c1f735451a..72c479b2877 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -198,10 +198,10 @@ void buttons_operatortypes(void) WM_operatortype_append(OBJECT_OT_particle_system_remove); WM_operatortype_append(PARTICLE_OT_new); - WM_operatortype_append(PARTICLE_OT_new_keyed_target); - WM_operatortype_append(PARTICLE_OT_remove_keyed_target); - WM_operatortype_append(PARTICLE_OT_keyed_target_move_up); - WM_operatortype_append(PARTICLE_OT_keyed_target_move_down); + WM_operatortype_append(PARTICLE_OT_new_target); + WM_operatortype_append(PARTICLE_OT_remove_target); + WM_operatortype_append(PARTICLE_OT_target_move_up); + WM_operatortype_append(PARTICLE_OT_target_move_down); WM_operatortype_append(SCENE_OT_render_layer_add); WM_operatortype_append(SCENE_OT_render_layer_remove); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 41da2c5a85b..0f498810fb5 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -40,6 +40,7 @@ #include "MTC_matrixops.h" #include "DNA_armature_types.h" +#include "DNA_boid_types.h" #include "DNA_camera_types.h" #include "DNA_curve_types.h" #include "DNA_constraint_types.h" // for drawing constraint @@ -3136,7 +3137,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv Material *ma; float vel[3], imat[4][4]; float timestep, pixsize=1.0, pa_size, r_tilt, r_length; - float pa_time, pa_birthtime, pa_dietime; + float pa_time, pa_birthtime, pa_dietime, pa_health; float cfra= bsystem_time(scene, ob,(float)CFRA,0.0); float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f; int a, totpart, totpoint=0, totve=0, drawn, draw_as, totchild=0; @@ -3362,6 +3363,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pa_birthtime=pa->time; pa_dietime = pa->dietime; pa_size=pa->size; + if(part->phystype==PART_PHYS_BOIDS) + pa_health = pa->boid->health; + else + pa_health = -1.0; #if 0 // XXX old animation system if((part->flag&PART_ABS_TIME)==0){ @@ -3424,6 +3429,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pa_size=psys_get_child_size(psys,cpa,cfra,0); + pa_health = -1.0; + r_tilt = 2.0f * cpa->rand[2]; r_length = cpa->rand[1]; } @@ -3506,9 +3513,19 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv setlinestyle(0); } - if(part->draw&PART_DRAW_NUM && !(G.f & G_RENDER_SHADOW)){ + if((part->draw&PART_DRAW_NUM || part->draw&PART_DRAW_HEALTH) && !(G.f & G_RENDER_SHADOW)){ + strcpy(val, ""); + + if(part->draw&PART_DRAW_NUM) + sprintf(val, " %i", a); + + if(part->draw&PART_DRAW_NUM && part->draw&PART_DRAW_HEALTH) + sprintf(val, "%s:", val); + + if(part->draw&PART_DRAW_HEALTH && a < totpart && part->phystype==PART_PHYS_BOIDS) + sprintf(val, "%s %.2f", val, pa_health); + /* in path drawing state.co is the end point */ - sprintf(val," %i",a); view3d_particle_text_draw_add(state.co[0], state.co[1], state.co[2], val, 0); } } diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 49a6fd4daf0..ab053c136ea 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -427,9 +427,14 @@ typedef struct CollisionModifierData { typedef struct SurfaceModifierData { ModifierData modifier; + struct MVert *x; /* old position */ + struct MVert *v; /* velocity */ + struct DerivedMesh *dm; struct BVHTreeFromMesh *bvhtree; /* bounding volume hierarchy of the mesh faces */ + + int cfra, numverts; } SurfaceModifierData; typedef enum { diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index 32bfc58f56c..6cf20cc25a2 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -227,6 +227,7 @@ typedef struct SoftBody { #define PFIELD_HARMONIC 7 #define PFIELD_CHARGE 8 #define PFIELD_LENNARDJ 9 +#define PFIELD_BOID 10 /* pd->flag: various settings */ diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index 0b3309bfc0c..2d8a186d3f4 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -61,13 +61,13 @@ typedef struct ChildParticle { float rand[3]; } ChildParticle; -typedef struct KeyedParticleTarget { - struct KeyedParticleTarget *next, *prev; +typedef struct ParticleTarget { + struct ParticleTarget *next, *prev; struct Object *ob; int psys; - short flag, rt; + short flag, mode; float time, duration; -} KeyedParticleTarget; +} ParticleTarget; /* Everything that's non dynamic for a particle: */ typedef struct ParticleData { @@ -82,7 +82,9 @@ typedef struct ParticleData { ParticleKey *keys; /* keyed states */ - float i_rot[4],r_rot[4];/* initial & random values (i_rot should be removed as it's not used anymore)*/ + struct BoidData *boid; /* boids data */ + + float r_rot[4]; /* random values */ float r_ave[3],r_ve[3]; float fuv[4], foffset; /* coordinates on face/edge number "num" and depth along*/ @@ -91,13 +93,10 @@ typedef struct ParticleData { float time, lifetime; /* dietime is not nescessarily time+lifetime as */ float dietime; /* particles can die unnaturally (collision) */ - float bank; /* banking angle for boids */ - float size, sizemul; /* size and multiplier so that we can update size when ever */ int num; /* index to vert/edge/face */ int num_dmcache; /* index to derived mesh data (face) to avoid slow lookups */ - int pad; int totkey; int bpi; /* softbody body point start index */ @@ -112,12 +111,14 @@ typedef struct ParticleSettings { ID id; struct AnimData *adt; + struct BoidSettings *boids; + int flag; short type, from, distr; /* physics modes */ short phystype, rotmode, avemode, reactevent; short draw, draw_as, draw_size, childtype; - short ren_as, rt2[3]; + short ren_as, rt2; /* number of path segments, power of 2 except */ short draw_step, ren_step; short hair_step, keys_step; @@ -126,7 +127,7 @@ typedef struct ParticleSettings { short adapt_angle, adapt_pix; short disp, omat, interpolation, rotfrom, integrator; - short kink, kink_axis, nbetween, boidneighbours; + short kink, kink_axis; /* billboards */ short bb_align, bb_uv_split, bb_anim, bb_split_offset; @@ -154,7 +155,7 @@ typedef struct ParticleSettings { /* children */ int child_nbr, ren_child_nbr; float parents, childsize, childrandsize; - float childrad, childflat, rt; + float childrad, childflat; /* clumping */ float clumpfac, clumppow; /* kink */ @@ -174,11 +175,7 @@ typedef struct ParticleSettings { /* keyed particles */ int keyed_loops; - /* boids */ - float max_vel, max_lat_acc, max_tan_acc; - float average_vel, banking, max_bank, groundz; - float boidfac[8]; - char boidrule[8]; + float effector_weight[10]; struct Group *dup_group; struct Group *eff_group; @@ -212,12 +209,14 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in struct ListBase effectors, reactevents; /* runtime */ - struct ListBase keyed_targets; + struct ListBase targets; /* used for keyed and boid physics */ + + char name[32]; /* particle system name */ float imat[4][4]; /* used for duplicators */ - float cfra; + float cfra, tree_frame; int seed; - int flag, totpart, totchild, totcached, totchildcache, rt; + int flag, totpart, totchild, totcached, totchildcache; short recalc, target_psys, totkeyed, softflag, bakespace, rt2; char bb_uvname[3][32]; /* billboard uv name */ @@ -230,6 +229,8 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in /* point cache */ struct PointCache *pointcache; + + struct KDTree *tree; /* used for interactions with self and other systems */ }ParticleSystem; /* general particle maximums */ @@ -325,7 +326,7 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in //#define PART_DRAW_PATH_LEN 2 #define PART_DRAW_SIZE 4 #define PART_DRAW_EMITTER 8 /* render emitter also */ -//#define PART_DRAW_HEALTH 16 +#define PART_DRAW_HEALTH 16 #define PART_ABS_PATH_TIME 32 //#define PART_DRAW_TRAIL 64 #define PART_DRAW_BB_LOCK 128 @@ -460,26 +461,13 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in #define PSYS_VG_ROT 10 #define PSYS_VG_EFFECTOR 11 -/* part->boidrules */ -#define BOID_TOT_RULES 8 +/* ParticleTarget->flag */ +#define PTARGET_CURRENT 1 +#define PTARGET_VALID 2 -#define BOID_COLLIDE 0 -#define BOID_AVOID 1 -#define BOID_CROWD 2 -#define BOID_CENTER 3 -#define BOID_AV_VEL 4 -#define BOID_VEL_MATCH 5 -#define BOID_GOAL 6 -#define BOID_LEVEL 7 - -/* psys->keyed_targets->flag */ -#define KEYED_TARGET_CURRENT 1 -#define KEYED_TARGET_VALID 2 - - -//#define PSYS_INTER_CUBIC 0 -//#define PSYS_INTER_LINEAR 1 -//#define PSYS_INTER_CARDINAL 2 -//#define PSYS_INTER_BSPLINE 3 +/* ParticleTarget->mode */ +#define PTARGET_MODE_NEUTRAL 0 +#define PTARGET_MODE_FRIEND 1 +#define PTARGET_MODE_ENEMY 2 #endif diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index 08af6372d31..ffd164baaaf 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -132,6 +132,7 @@ char *includefiles[] = { // of makesdna.c (this file) as well "DNA_windowmanager_types.h", "DNA_anim_types.h", + "DNA_boid_types.h", // empty string to indicate end of includefiles "" @@ -1154,4 +1155,5 @@ int main(int argc, char ** argv) #include "DNA_gpencil_types.h" #include "DNA_windowmanager_types.h" #include "DNA_anim_types.h" +#include "DNA_boid_types.h" /* end of list */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 90270483adb..f3c2e95451d 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -221,7 +221,7 @@ extern StructRNA RNA_Key; extern StructRNA RNA_KeyboardSensor; extern StructRNA RNA_KeyingSet; extern StructRNA RNA_KeyingSetPath; -extern StructRNA RNA_KeyedParticleTarget; +extern StructRNA RNA_ParticleTarget; extern StructRNA RNA_KinematicConstraint; extern StructRNA RNA_Lamp; extern StructRNA RNA_LampSkySettings; diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index 276f421c586..2592a1340ec 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -34,6 +34,7 @@ extern EnumPropertyItem space_type_items[]; extern EnumPropertyItem region_type_items[]; extern EnumPropertyItem modifier_type_items[]; extern EnumPropertyItem constraint_type_items[]; +extern EnumPropertyItem boidrule_type_items[]; extern EnumPropertyItem beztriple_handle_type_items[]; extern EnumPropertyItem beztriple_interpolation_mode_items[]; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 85c266e3f27..c8698ef57ac 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1901,6 +1901,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_animation.c", NULL, RNA_def_animation}, {"rna_actuator.c", NULL, RNA_def_actuator}, {"rna_armature.c", NULL, RNA_def_armature}, + {"rna_boid.c", NULL, RNA_def_boid}, {"rna_brush.c", NULL, RNA_def_brush}, {"rna_camera.c", NULL, RNA_def_camera}, {"rna_cloth.c", NULL, RNA_def_cloth}, diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c new file mode 100644 index 00000000000..af274d813b5 --- /dev/null +++ b/source/blender/makesrna/intern/rna_boid.c @@ -0,0 +1,615 @@ +/** + * $Id: rna_modifier.c 21514 2009-07-11 05:41:21Z aligorith $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Janne Karhu. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "rna_internal.h" + +#include "DNA_scene_types.h" +#include "DNA_boid_types.h" +#include "DNA_object_types.h" +#include "DNA_particle_types.h" + +#include "WM_types.h" + +EnumPropertyItem boidrule_type_items[] ={ + {eBoidRuleType_Goal, "GOAL", 0, "Goal", "Go to assigned object or loudest assigned signal source."}, + {eBoidRuleType_Avoid, "AVOID", 0, "Avoid", "Get away from assigned object or loudest assigned signal source."}, + {eBoidRuleType_AvoidCollision, "AVOID_COLLISION", 0, "Avoid Collision", "Monoeuver to avoid collisions with other boids and deflector objects in near future."}, + {eBoidRuleType_Separate, "SEPARATE", 0, "Separate", "Keep from going through other boids."}, + {eBoidRuleType_Flock, "FLOCK", 0, "Flock", "Move to center of neighbors and match their velocity."}, + {eBoidRuleType_FollowLeader, "FOLLOW_LEADER", 0, "Follow Leader", "Follow a boid or assigned object."}, + {eBoidRuleType_AverageSpeed, "AVERAGE_SPEED", 0, "Average Speed", "Maintain speed, flight level or wander."}, + {eBoidRuleType_Fight, "FIGHT", 0, "Fight", "Go to closest enemy and attack when in range."}, + //{eBoidRuleType_Protect, "PROTECT", 0, "Protect", "Go to enemy closest to target and attack when in range."}, + //{eBoidRuleType_Hide, "HIDE", 0, "Hide", "Find a deflector move to it's other side from closest enemy."}, + //{eBoidRuleType_FollowPath, "FOLLOW_PATH", 0, "Follow Path", "Move along a assigned curve or closest curve in a group."}, + //{eBoidRuleType_FollowWall, "FOLLOW_WALL", 0, "Follow Wall", "Move next to a deflector object's in direction of it's tangent."}, + {0, NULL, 0, NULL, NULL}}; + +EnumPropertyItem boidruleset_type_items[] ={ + {eBoidRulesetType_Fuzzy, "FUZZY", 0, "Fuzzy", "Rules are gone through top to bottom. Only the first rule that effect above fuzziness threshold is evaluated."}, + {eBoidRulesetType_Random, "RANDOM", 0, "Random", "A random rule is selected for each boid."}, + {eBoidRulesetType_Average, "AVERAGE", 0, "Average", "All rules are averaged."}, + {0, NULL, 0, NULL, NULL}}; + + +#ifdef RNA_RUNTIME + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_particle.h" + +static void rna_Boids_reset(bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + ParticleSettings *part; + + if(ptr->type==&RNA_ParticleSystem) { + ParticleSystem *psys = (ParticleSystem*)ptr->data; + Object *ob = psys_find_object(scene, psys); + + psys->recalc = PSYS_RECALC_RESET; + + if(ob) { + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + } + } + else { + part = ptr->id.data; + psys_flush_particle_settings(scene, part, PSYS_RECALC_RESET); + } +} +static void rna_Boids_reset_deps(bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + ParticleSettings *part; + + if(ptr->type==&RNA_ParticleSystem) { + ParticleSystem *psys = (ParticleSystem*)ptr->data; + Object *ob = psys_find_object(scene, psys); + + psys->recalc = PSYS_RECALC_RESET; + + if(ob) { + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + } + } + else { + part = ptr->id.data; + psys_flush_particle_settings(scene, part, PSYS_RECALC_RESET); + DAG_scene_sort(scene); + } +} + +static StructRNA* rna_BoidRule_refine(struct PointerRNA *ptr) +{ + BoidRule *rule= (BoidRule*)ptr->data; + + switch(rule->type) { + case eBoidRuleType_Goal: + return &RNA_BoidRuleGoal; + case eBoidRuleType_Avoid: + return &RNA_BoidRuleAvoid; + case eBoidRuleType_AvoidCollision: + return &RNA_BoidRuleAvoidCollision; + case eBoidRuleType_FollowLeader: + return &RNA_BoidRuleFollowLeader; + case eBoidRuleType_AverageSpeed: + return &RNA_BoidRuleAverageSpeed; + case eBoidRuleType_Fight: + return &RNA_BoidRuleFight; + default: + return &RNA_BoidRule; + } +} + +static char *rna_BoidRule_path(PointerRNA *ptr) +{ + return BLI_sprintfN("rules[%s]", ((BoidRule*)ptr->data)->name); // XXX not unique +} + +static PointerRNA rna_BoidState_active_boid_rule_get(PointerRNA *ptr) +{ + BoidState *state= (BoidState*)ptr->data; + BoidRule *rule = (BoidRule*)state->rules.first; + + for(; rule; rule=rule->next) { + if(rule->flag & BOIDRULE_CURRENT) + return rna_pointer_inherit_refine(ptr, &RNA_BoidRule, rule); + } + return rna_pointer_inherit_refine(ptr, &RNA_BoidRule, NULL); +} +static void rna_BoidState_active_boid_rule_index_range(PointerRNA *ptr, int *min, int *max) +{ + BoidState *state= (BoidState*)ptr->data; + *min= 0; + *max= BLI_countlist(&state->rules)-1; + *max= MAX2(0, *max); +} + +static int rna_BoidState_active_boid_rule_index_get(PointerRNA *ptr) +{ + BoidState *state= (BoidState*)ptr->data; + BoidRule *rule = (BoidRule*)state->rules.first; + int i=0; + + for(; rule; rule=rule->next, i++) { + if(rule->flag & BOIDRULE_CURRENT) + return i; + } + return 0; +} + +static void rna_BoidState_active_boid_rule_index_set(struct PointerRNA *ptr, int value) +{ + BoidState *state= (BoidState*)ptr->data; + BoidRule *rule = (BoidRule*)state->rules.first; + int i=0; + + for(; rule; rule=rule->next, i++) { + if(i==value) + rule->flag |= BOIDRULE_CURRENT; + else + rule->flag &= ~BOIDRULE_CURRENT; + } +} + +static PointerRNA rna_BoidSettings_active_boid_state_get(PointerRNA *ptr) +{ + BoidSettings *boids= (BoidSettings*)ptr->data; + BoidState *state = (BoidState*)boids->states.first; + + for(; state; state=state->next) { + if(state->flag & BOIDSTATE_CURRENT) + return rna_pointer_inherit_refine(ptr, &RNA_BoidState, state); + } + return rna_pointer_inherit_refine(ptr, &RNA_BoidState, NULL); +} +static void rna_BoidSettings_active_boid_state_index_range(PointerRNA *ptr, int *min, int *max) +{ + BoidSettings *boids= (BoidSettings*)ptr->data; + *min= 0; + *max= BLI_countlist(&boids->states)-1; + *max= MAX2(0, *max); +} + +static int rna_BoidSettings_active_boid_state_index_get(PointerRNA *ptr) +{ + BoidSettings *boids= (BoidSettings*)ptr->data; + BoidState *state = (BoidState*)boids->states.first; + int i=0; + + for(; state; state=state->next, i++) { + if(state->flag & BOIDSTATE_CURRENT) + return i; + } + return 0; +} + +static void rna_BoidSettings_active_boid_state_index_set(struct PointerRNA *ptr, int value) +{ + BoidSettings *boids= (BoidSettings*)ptr->data; + BoidState *state = (BoidState*)boids->states.first; + int i=0; + + for(; state; state=state->next, i++) { + if(i==value) + state->flag |= BOIDSTATE_CURRENT; + else + state->flag &= ~BOIDSTATE_CURRENT; + } +} + +#else + +static void rna_def_boidrule_goal(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleGoal", "BoidRule"); + RNA_def_struct_ui_text(srna, "Goal", ""); + RNA_def_struct_sdna(srna, "BoidRuleGoalAvoid"); + + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "ob"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Object", "Goal object."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset_deps"); + + prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT); + RNA_def_property_ui_text(prop, "Predict", "Predict target movement."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule_avoid(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleAvoid", "BoidRule"); + RNA_def_struct_ui_text(srna, "Avoid", ""); + RNA_def_struct_sdna(srna, "BoidRuleGoalAvoid"); + + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "ob"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Object", "Object to avoid."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset_deps"); + + prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT); + RNA_def_property_ui_text(prop, "Predict", "Predict target movement."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "fear_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Fear factor", "Avoid object if danger from it is above this threshol."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule_avoid_collision(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleAvoidCollision", "BoidRule"); + RNA_def_struct_ui_text(srna, "Avoid Collision", ""); + + prop= RNA_def_property(srna, "boids", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_BOIDS); + RNA_def_property_ui_text(prop, "Boids", "Avoid collision with other boids."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "deflectors", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_DEFLECTORS); + RNA_def_property_ui_text(prop, "Deflectors", "Avoid collision with deflector objects."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "look_ahead", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Look ahead", "Time to look ahead in seconds."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule_follow_leader(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleFollowLeader", "BoidRule"); + RNA_def_struct_ui_text(srna, "Follow Leader", ""); + + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "ob"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Object", "Follow this object instead of a boid."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset_deps"); + + prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Distance", "Distance behind leader to follow."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "queue_size", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Queue Size", "How many boids in a line."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "line", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_LEADER_IN_LINE); + RNA_def_property_ui_text(prop, "Line", "Follow leader in a line."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule_average_speed(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleAverageSpeed", "BoidRule"); + RNA_def_struct_ui_text(srna, "Average Speed", ""); + + prop= RNA_def_property(srna, "wander", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Wander", "How fast velocity's direction is randomized."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "level", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Level", "How much velocity's z-component is kept constant."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Speed", "Percentage of maximum speed."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule_fight(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoidRuleFight", "BoidRule"); + RNA_def_struct_ui_text(srna, "Fight", ""); + + prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Fight Distance", "Attack boids at max this distance."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "flee_distance", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 100.0f); + RNA_def_property_ui_text(prop, "Flee Distance", "Flee to this distance."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +static void rna_def_boidrule(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + /* data */ + srna= RNA_def_struct(brna, "BoidRule", NULL); + RNA_def_struct_ui_text(srna , "Boid Rule", ""); + RNA_def_struct_refine_func(srna, "rna_BoidRule_refine"); + RNA_def_struct_path_func(srna, "rna_BoidRule_path"); + + /* strings */ + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", "Boid rule name."); + RNA_def_struct_name_property(srna, prop); + + /* enums */ + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, boidrule_type_items); + RNA_def_property_ui_text(prop, "Type", ""); + + /* flags */ + prop= RNA_def_property(srna, "in_air", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_IN_AIR); + RNA_def_property_ui_text(prop, "In Air", "Use rule when boid is flying."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "on_land", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_ON_LAND); + RNA_def_property_ui_text(prop, "On Land", "Use rule when boid is on land."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + //prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE); + //RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded); + //RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface."); + + /* types */ + rna_def_boidrule_goal(brna); + rna_def_boidrule_avoid(brna); + rna_def_boidrule_avoid_collision(brna); + rna_def_boidrule_follow_leader(brna); + rna_def_boidrule_average_speed(brna); + rna_def_boidrule_fight(brna); +} + +static void rna_def_boidstate(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "BoidState", NULL); + RNA_def_struct_ui_text(srna, "Boid State", "Boid state for boid physics."); + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", "Boid state name."); + RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "ruleset_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, boidruleset_type_items); + RNA_def_property_ui_text(prop, "Rule Evaluation", "How the rules in the list are evaluated."); + + prop= RNA_def_property(srna, "rules", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "BoidRule"); + RNA_def_property_ui_text(prop, "Boid Rules", ""); + + prop= RNA_def_property(srna, "active_boid_rule", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "BoidRule"); + RNA_def_property_pointer_funcs(prop, "rna_BoidState_active_boid_rule_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Active Boid Rule", ""); + + prop= RNA_def_property(srna, "active_boid_rule_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_BoidState_active_boid_rule_index_get", "rna_BoidState_active_boid_rule_index_set", "rna_BoidState_active_boid_rule_index_range"); + RNA_def_property_ui_text(prop, "Active Boid Rule Index", ""); + + prop= RNA_def_property(srna, "rule_fuzziness", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Rule Fuzzines", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Volume", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 10.0); + RNA_def_property_ui_text(prop, "Falloff", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} +static void rna_def_boid_settings(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "BoidSettings", NULL); + RNA_def_struct_ui_text(srna, "Boid Settings", "Settings for boid physics."); + + prop= RNA_def_property(srna, "landing_smoothness", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 10.0); + RNA_def_property_ui_text(prop, "Landing Smoothness", "How smoothly the boids land."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "banking", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 2.0); + RNA_def_property_ui_text(prop, "Banking", "Amount of rotation around velocity vector on turns."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 2.0); + RNA_def_property_ui_text(prop, "Height", "Boid height relative to particle size."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + /* states */ + prop= RNA_def_property(srna, "states", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "BoidState"); + RNA_def_property_ui_text(prop, "Boid States", ""); + + prop= RNA_def_property(srna, "active_boid_state", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "BoidRule"); + RNA_def_property_pointer_funcs(prop, "rna_BoidSettings_active_boid_state_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Active Boid Rule", ""); + + prop= RNA_def_property(srna, "active_boid_state_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_BoidSettings_active_boid_state_index_get", "rna_BoidSettings_active_boid_state_index_set", "rna_BoidSettings_active_boid_state_index_range"); + RNA_def_property_ui_text(prop, "Active Boid State Index", ""); + + /* character properties */ + prop= RNA_def_property(srna, "health", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Health", "Initial boid health when born."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Strength", "Maximum caused damage on attack per second."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "aggression", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Aggression", "Boid will fight this times stronger enemy."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "accuracy", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Accuracy", "Accuracy of attack."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Range", "The maximum distance from which a boid can attack."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + /* physical properties */ + prop= RNA_def_property(srna, "air_min_speed", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Min Air Speed", "Minimum speed in air (relative to maximum speed)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "air_max_speed", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Max Air Speed", "Maximum speed in air."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "air_max_acc", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Max Air Acceleration", "Maximum acceleration in air (relative to maximum speed)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "air_max_ave", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Max Air Angular Velocity", "Maximum angular velocity in air (relative to 180 degrees)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "air_personal_space", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 10.0); + RNA_def_property_ui_text(prop, "Air Personal Space", "Radius of boids personal space in air (% of particle size)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_jump_speed", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Jump Speed", "Maximum speed for jumping."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_max_speed", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 100.0); + RNA_def_property_ui_text(prop, "Max Land Speed", "Maximum speed on land."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_max_acc", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Max Land Acceleration", "Maximum acceleration on land (relative to maximum speed)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_max_ave", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Max Land Angular Velocity", "Maximum angular velocity on land (relative to 180 degrees)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_personal_space", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 10.0); + RNA_def_property_ui_text(prop, "Land Personal Space", "Radius of boids personal space on land (% of particle size)."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "land_stick_force", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 1000.0); + RNA_def_property_ui_text(prop, "Land Stick Force", "How strong a force must be to start effecting a boid on land."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + /* options */ + prop= RNA_def_property(srna, "allow_flight", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_FLIGHT); + RNA_def_property_ui_text(prop, "Allow Flight", "Allow boids to move in air."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "allow_land", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_LAND); + RNA_def_property_ui_text(prop, "Allow Land", "Allow boids to move on land."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); + + prop= RNA_def_property(srna, "allow_climb", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_CLIMB); + RNA_def_property_ui_text(prop, "Allow Climbing", "Allow boids to climb goal objects."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Boids_reset"); +} + +void RNA_def_boid(BlenderRNA *brna) +{ + rna_def_boidrule(brna); + rna_def_boidstate(brna); + rna_def_boid_settings(brna); +} + +#endif diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 9afe36fb142..ea4deae08e7 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -93,7 +93,7 @@ static void rna_FluidSettings_update_type(bContext *C, PointerRNA *ptr) if(ob->type == OB_MESH && !psys) { /* add particle system */ - part= psys_new_settings("PSys", bmain); + part= psys_new_settings("ParticleSettings", bmain); psys= MEM_callocN(sizeof(ParticleSystem), "particle_system"); part->type= PART_FLUID; diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 3e92c606e53..5afc08439e2 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -117,6 +117,7 @@ void RNA_def_action(struct BlenderRNA *brna); void RNA_def_animation(struct BlenderRNA *brna); void RNA_def_armature(struct BlenderRNA *brna); void RNA_def_actuator(struct BlenderRNA *brna); +void RNA_def_boid(struct BlenderRNA *brna); void RNA_def_brush(struct BlenderRNA *brna); void RNA_def_brushclone(struct BlenderRNA *brna); void RNA_def_camera(struct BlenderRNA *brna); diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index 269437a8fae..2ec8d9ea41e 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -284,7 +284,7 @@ static void rna_FieldSettings_surface_update(bContext *C, PointerRNA *ptr) /* add/remove modifier as needed */ if(!md) { if(pd && (pd->flag & PFIELD_SURFACE)) - if(ELEM5(pd->forcefield,PFIELD_HARMONIC,PFIELD_FORCE,PFIELD_HARMONIC,PFIELD_CHARGE,PFIELD_LENNARDJ)) + if(ELEM6(pd->forcefield,PFIELD_HARMONIC,PFIELD_FORCE,PFIELD_HARMONIC,PFIELD_CHARGE,PFIELD_LENNARDJ,PFIELD_BOID)) if(ELEM4(ob->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE)) ED_object_modifier_add(NULL, scene, ob, eModifierType_Surface); } @@ -504,6 +504,7 @@ static void rna_def_field(BlenderRNA *brna) {PFIELD_HARMONIC, "HARMONIC", 0, "Harmonic", ""}, {PFIELD_CHARGE, "CHARGE", 0, "Charge", ""}, {PFIELD_LENNARDJ, "LENNARDJ", 0, "Lennard-Jones", ""}, + {PFIELD_BOID, "BOID", 0, "Boid", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem falloff_items[] = { diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 3c25bd76630..f07351f0a30 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -29,6 +29,7 @@ #include "RNA_define.h" #include "RNA_types.h" +#include "RNA_access.h" #include "rna_internal.h" @@ -36,6 +37,7 @@ #include "DNA_object_force.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_boid_types.h" #include "WM_types.h" #include "WM_api.h" @@ -140,13 +142,33 @@ static void rna_Particle_reset(bContext *C, PointerRNA *ptr) } } -static void rna_Particle_keyed_reset(bContext *C, PointerRNA *ptr) +static void rna_Particle_target_reset(bContext *C, PointerRNA *ptr) { Scene *scene = CTX_data_scene(C); - if(ptr->type==&RNA_KeyedParticleTarget) { + if(ptr->type==&RNA_ParticleTarget) { + ParticleTarget *pt = (ParticleTarget*)ptr->data; Object *ob = (Object*)ptr->id.data; - ParticleSystem *psys = psys_get_current(ob); + ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob); + int psys_num = BLI_findindex(&ob->particlesystem, psys); + + if(pt->ob==ob || pt->ob==NULL) { + kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1); + + if(kpsys) + pt->flag |= PTARGET_VALID; + else + pt->flag &= ~PTARGET_VALID; + } + else { + if(pt->ob) + kpsys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1); + + if(kpsys) + pt->flag |= PTARGET_VALID; + else + pt->flag &= ~PTARGET_VALID; + } psys->recalc = PSYS_RECALC_RESET; @@ -155,11 +177,11 @@ static void rna_Particle_keyed_reset(bContext *C, PointerRNA *ptr) } } -static void rna_Particle_keyed_redo(bContext *C, PointerRNA *ptr) +static void rna_Particle_target_redo(bContext *C, PointerRNA *ptr) { Scene *scene = CTX_data_scene(C); - if(ptr->type==&RNA_KeyedParticleTarget) { + if(ptr->type==&RNA_ParticleTarget) { Object *ob = (Object*)ptr->id.data; ParticleSystem *psys = psys_get_current(ob); @@ -235,8 +257,10 @@ static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value) psys->part = (ParticleSettings *)value.data; - if(psys->part) + if(psys->part) { psys->part->id.us++; + psys_check_boid_data(psys); + } } static void rna_Particle_abspathtime_update(bContext *C, PointerRNA *ptr) { @@ -315,97 +339,100 @@ static float rna_PartSetting_linelenhead_get(struct PointerRNA *ptr) return settings->draw_line[1]; } -static int rna_ParticleSystem_name_length(PointerRNA *ptr) -{ - ParticleSystem *psys= ptr->data; - - if(psys->part) - return strlen(psys->part->id.name+2); - - return 0; -} - -static void rna_ParticleSystem_name_get(PointerRNA *ptr, char *str) -{ - ParticleSystem *psys= ptr->data; - - if(psys->part) - strcpy(str, psys->part->id.name+2); - else - strcpy(str, ""); -} - -static PointerRNA rna_ParticleSystem_active_keyed_target_get(PointerRNA *ptr) +static PointerRNA rna_ParticleSystem_active_particle_target_get(PointerRNA *ptr) { ParticleSystem *psys= (ParticleSystem*)ptr->data; - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; - for(; kpt; kpt=kpt->next) { - if(kpt->flag & KEYED_TARGET_CURRENT) - return rna_pointer_inherit_refine(ptr, &RNA_KeyedParticleTarget, kpt); + for(; pt; pt=pt->next) { + if(pt->flag & PTARGET_CURRENT) + return rna_pointer_inherit_refine(ptr, &RNA_ParticleTarget, pt); } - return rna_pointer_inherit_refine(ptr, &RNA_KeyedParticleTarget, NULL); + return rna_pointer_inherit_refine(ptr, &RNA_ParticleTarget, NULL); } -static void rna_ParticleSystem_active_keyed_target_index_range(PointerRNA *ptr, int *min, int *max) +static void rna_ParticleSystem_active_particle_target_index_range(PointerRNA *ptr, int *min, int *max) { ParticleSystem *psys= (ParticleSystem*)ptr->data; *min= 0; - *max= BLI_countlist(&psys->keyed_targets)-1; + *max= BLI_countlist(&psys->targets)-1; *max= MAX2(0, *max); } -static int rna_ParticleSystem_active_keyed_target_index_get(PointerRNA *ptr) +static int rna_ParticleSystem_active_particle_target_index_get(PointerRNA *ptr) { ParticleSystem *psys= (ParticleSystem*)ptr->data; - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; int i=0; - for(; kpt; kpt=kpt->next, i++) - if(kpt->flag & KEYED_TARGET_CURRENT) + for(; pt; pt=pt->next, i++) + if(pt->flag & PTARGET_CURRENT) return i; return 0; } -static void rna_ParticleSystem_active_keyed_target_index_set(struct PointerRNA *ptr, int value) +static void rna_ParticleSystem_active_particle_target_index_set(struct PointerRNA *ptr, int value) { ParticleSystem *psys= (ParticleSystem*)ptr->data; - KeyedParticleTarget *kpt = psys->keyed_targets.first; + ParticleTarget *pt = psys->targets.first; int i=0; - for(; kpt; kpt=kpt->next, i++) { + for(; pt; pt=pt->next, i++) { if(i==value) - kpt->flag |= KEYED_TARGET_CURRENT; + pt->flag |= PTARGET_CURRENT; else - kpt->flag &= ~KEYED_TARGET_CURRENT; + pt->flag &= ~PTARGET_CURRENT; } } -static int rna_KeyedParticleTarget_name_length(PointerRNA *ptr) +static int rna_ParticleTarget_name_length(PointerRNA *ptr) { - KeyedParticleTarget *kpt= ptr->data; + ParticleTarget *pt= ptr->data; - if(kpt->flag & KEYED_TARGET_VALID) { - if(kpt->ob) - return strlen(kpt->ob->id.name+2) + 4; + if(pt->flag & PTARGET_VALID) { + ParticleSystem *psys = NULL; + + if(pt->ob) + psys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1); + else { + Object *ob = (Object*) ptr->id.data; + psys = BLI_findlink(&ob->particlesystem, pt->psys-1); + } + + if(psys) { + if(pt->ob) + return strlen(pt->ob->id.name+2) + 2 + strlen(psys->name); + else + return strlen(psys->name); + } else - return 20; + return 15; } else return 15; - - return 0; } -static void rna_KeyedParticleTarget_name_get(PointerRNA *ptr, char *str) +static void rna_ParticleTarget_name_get(PointerRNA *ptr, char *str) { - KeyedParticleTarget *kpt= ptr->data; + ParticleTarget *pt= ptr->data; - if(kpt->flag & KEYED_TARGET_VALID) { - if(kpt->ob) - sprintf(str, "%s: %i", kpt->ob->id.name+2, kpt->psys); + if(pt->flag & PTARGET_VALID) { + ParticleSystem *psys = NULL; + + if(pt->ob) + psys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1); + else { + Object *ob = (Object*) ptr->id.data; + psys = BLI_findlink(&ob->particlesystem, pt->psys-1); + } + + if(psys) { + if(pt->ob) + sprintf(str, "%s: %s", pt->ob->id.name+2, psys->name); + else + strcpy(str, psys->name); + } else - sprintf(str, "Particle System: %i", kpt->psys); - + strcpy(str, "Invalid target!"); } else strcpy(str, "Invalid target!"); @@ -636,10 +663,10 @@ static void rna_def_particle(BlenderRNA *brna) // RNA_def_property_range(prop, lowerLimitf, upperLimitf); RNA_def_property_ui_text(prop, "Die Time", ""); - prop= RNA_def_property(srna, "banking_angle", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "bank"); -// RNA_def_property_range(prop, lowerLimitf, upperLimitf); - RNA_def_property_ui_text(prop, "Banking Angle", ""); +// prop= RNA_def_property(srna, "banking_angle", PROP_FLOAT, PROP_NONE); +// RNA_def_property_float_sdna(prop, NULL, "bank"); +//// RNA_def_property_range(prop, lowerLimitf, upperLimitf); +// RNA_def_property_ui_text(prop, "Banking Angle", ""); prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); @@ -1024,10 +1051,10 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Emitter", "Render emitter Object also."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - //prop= RNA_def_property(srna, "draw_health", PROP_BOOLEAN, PROP_NONE); - //RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_HEALTH); - //RNA_def_property_ui_text(prop, "Health", "Draw boid health"); - //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); + prop= RNA_def_property(srna, "draw_health", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_HEALTH); + RNA_def_property_ui_text(prop, "Health", "Draw boid health"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); prop= RNA_def_property(srna, "abs_path_time", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_ABS_PATH_TIME); @@ -1149,9 +1176,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - //interpolation - //TODO: can't find where interpolation is used - //TODO: is this read only/internal? prop= RNA_def_property(srna, "rotate_from", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "rotfrom"); @@ -1173,19 +1197,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Axis", "Which axis to use for offset"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); - /* used? - prop= RNA_def_property(srna, "inbetween", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "nbetween"); - RNA_def_property_range(prop, 0, INT_MAX); - RNA_def_property_ui_text(prop, "Inbetween", ""); - */ - - prop= RNA_def_property(srna, "boid_neighbours", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "boidneighbours"); - RNA_def_property_range(prop, 1, 10); - RNA_def_property_ui_text(prop, "Neighbours", "How many neighbours to consider for each boid"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - /* billboards */ prop= RNA_def_property(srna, "billboard_align", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "bb_align"); @@ -1421,6 +1432,12 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Acceleration", "Constant acceleration"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "acc[2]"); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_text(prop, "Gravity", "Constant acceleration in global Z axis direction"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "drag_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "dragfac"); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -1619,46 +1636,12 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); /* boids */ - prop= RNA_def_property(srna, "max_velocity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "max_vel"); - RNA_def_property_range(prop, 0.0f, 200.0f); - RNA_def_property_ui_text(prop, "Maximum Velocity", ""); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + prop= RNA_def_property(srna, "boids", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "BoidSettings"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Boid Settings", ""); - prop= RNA_def_property(srna, "lateral_acceleration_max", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "max_lat_acc"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Lateral Acceleration", "Lateral acceleration % of max velocity"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - prop= RNA_def_property(srna, "tangential_acceleration_max", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "max_tan_acc"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Tangential acceleration", "Tangential acceleration % of max velocity"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - prop= RNA_def_property(srna, "average_velocity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "average_vel"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Average Velocity", "The usual speed % of max velocity"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - prop= RNA_def_property(srna, "banking", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, -10.0f, 10.0f); - RNA_def_property_ui_text(prop, "Banking", "Banking of boids on turns (1.0==natural banking)"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - prop= RNA_def_property(srna, "banking_max", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "max_bank"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Maximum Banking", "How much a boid can bank at a single step"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - - prop= RNA_def_property(srna, "ground_z", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "groundz"); - RNA_def_property_range(prop, -100.0f, 100.0f); - RNA_def_property_ui_text(prop, "Ground Z", "Default Z value"); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + /* draw objects & groups */ prop= RNA_def_property(srna, "dupli_group", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "dup_group"); @@ -1667,13 +1650,6 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Dupli Group", "Show Objects in this Group in place of particles"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - prop= RNA_def_property(srna, "effector_group", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "eff_group"); - RNA_def_property_struct_type(prop, "Group"); - RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Effector Group", "Limit effectors to this Group."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - prop= RNA_def_property(srna, "dupli_object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "dup_ob"); RNA_def_property_struct_type(prop, "Object"); @@ -1687,6 +1663,74 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Billboard Object", "Billboards face this object (default is active camera)"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); + + /* effectors */ + prop= RNA_def_property(srna, "effector_group", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "eff_group"); + RNA_def_property_struct_type(prop, "Group"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Effector Group", "Limit effectors to this Group."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_all", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[0]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "All", "All effector's weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_spherical", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[1]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Spherical", "Spherical effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_vortex", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[2]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Vortex", "Vortex effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_magnetic", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[3]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Magnetic", "Magnetic effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_wind", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[4]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Wind", "Wind effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_curveguide", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[5]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Curve Guide", "Curve guide effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_texture", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[6]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Magnetic", "Texture effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_harmonic", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[7]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Harmonic", "Harmonic effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_charge", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[8]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Charge", "Charge effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); + + prop= RNA_def_property(srna, "eweight_lennardjones", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "effector_weight[9]"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Lennard-Jones", "Lennard-Jones effector weight."); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); /* animation here? */ rna_def_animdata_common(srna); @@ -1695,17 +1739,25 @@ static void rna_def_particle_settings(BlenderRNA *brna) // struct PartDeflect *pd2; } -static void rna_def_keyed_particle_target(BlenderRNA *brna) +static void rna_def_particle_target(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - srna = RNA_def_struct(brna, "KeyedParticleTarget", NULL); - RNA_def_struct_ui_text(srna, "Keyed Particle Target", "Target particle system for keyed particles."); + static EnumPropertyItem mode_items[] = { + {PTARGET_MODE_FRIEND, "FRIEND", 0, "Friend", ""}, + {PTARGET_MODE_NEUTRAL, "NEUTRAL", 0, "Neutral", ""}, + {PTARGET_MODE_ENEMY, "ENEMY", 0, "Enemy", ""}, + {0, NULL, 0, NULL, NULL} + }; + + + srna = RNA_def_struct(brna, "ParticleTarget", NULL); + RNA_def_struct_ui_text(srna, "Particle Target", "Target particle system."); prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); - RNA_def_property_string_funcs(prop, "rna_KeyedParticleTarget_name_get", "rna_KeyedParticleTarget_name_length", NULL); - RNA_def_property_ui_text(prop, "Name", "Keyed particle target name."); + RNA_def_property_string_funcs(prop, "rna_ParticleTarget_name_get", "rna_ParticleTarget_name_length", NULL); + RNA_def_property_ui_text(prop, "Name", "Particle target name."); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_struct_name_property(srna, prop); @@ -1713,32 +1765,36 @@ static void rna_def_keyed_particle_target(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "ob"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Target Object", "The object that has the target particle system (empty if same object)."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_reset"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_target_reset"); prop= RNA_def_property(srna, "system", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "psys"); RNA_def_property_range(prop, 1, INT_MAX); RNA_def_property_ui_text(prop, "Target Particle System", "The index of particle system on the target object."); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_reset"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_target_reset"); prop= RNA_def_property(srna, "time", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "time"); RNA_def_property_range(prop, 0.0, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 RNA_def_property_ui_text(prop, "Time", ""); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_redo"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_target_redo"); prop= RNA_def_property(srna, "duration", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "duration"); RNA_def_property_range(prop, 0.0, 30000.0f); //TODO: replace 30000 with MAXFRAMEF when available in 2.5 RNA_def_property_ui_text(prop, "Duration", ""); - RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_keyed_redo"); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_target_redo"); prop= RNA_def_property(srna, "valid", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYED_TARGET_VALID); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PTARGET_VALID); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); RNA_def_property_ui_text(prop, "Valid", "Keyed particles target is valid."); - + prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, mode_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); + RNA_def_property_ui_text(prop, "Mode", ""); + RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_target_reset"); } static void rna_def_particle_system(BlenderRNA *brna) @@ -1751,9 +1807,7 @@ static void rna_def_particle_system(BlenderRNA *brna) RNA_def_struct_ui_icon(srna, ICON_PARTICLE_DATA); prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); - RNA_def_property_string_funcs(prop, "rna_ParticleSystem_name_get", "rna_ParticleSystem_name_length", NULL); RNA_def_property_ui_text(prop, "Name", "Particle system name."); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_struct_name_property(srna, prop); /* access to particle settings is redirected through functions */ @@ -1807,13 +1861,6 @@ static void rna_def_particle_system(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Reactor Target Particle System", "For reactor systems, index of particle system on the target object."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - /* boids */ - //prop= RNA_def_property(srna, "boids_surface_object", PROP_POINTER, PROP_NONE); - //RNA_def_property_pointer_sdna(prop, NULL, "keyed_ob"); - //RNA_def_property_flag(prop, PROP_EDITABLE); - //RNA_def_property_ui_text(prop, "Boids Surface Object", "For boids physics systems, constrain boids to this object's surface."); - //RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); - /* keyed */ prop= RNA_def_property(srna, "keyed_timing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_KEYED_TIMING); @@ -1821,19 +1868,18 @@ static void rna_def_particle_system(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Keyed timing", "Use key times"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); - prop= RNA_def_property(srna, "keyed_targets", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "keyed_targets", NULL); - RNA_def_property_struct_type(prop, "KeyedParticleTarget"); - RNA_def_property_ui_text(prop, "Keyed Targets", "Target particle systems for keyed particles"); + prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "ParticleTarget"); + RNA_def_property_ui_text(prop, "Targets", "Target particle systems."); - prop= RNA_def_property(srna, "active_keyed_target", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "KeyedParticleTarget"); - RNA_def_property_pointer_funcs(prop, "rna_ParticleSystem_active_keyed_target_get", NULL, NULL); - RNA_def_property_ui_text(prop, "Active Particle System", "Active particle system being displayed"); + prop= RNA_def_property(srna, "active_particle_target", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "ParticleTarget"); + RNA_def_property_pointer_funcs(prop, "rna_ParticleSystem_active_particle_target_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Active Particle Target", ""); - prop= RNA_def_property(srna, "active_keyed_target_index", PROP_INT, PROP_UNSIGNED); - RNA_def_property_int_funcs(prop, "rna_ParticleSystem_active_keyed_target_index_get", "rna_ParticleSystem_active_keyed_target_index_set", "rna_ParticleSystem_active_keyed_target_index_range"); - RNA_def_property_ui_text(prop, "Active Particle System Index", "Index of active particle system slot."); + prop= RNA_def_property(srna, "active_particle_target_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_ParticleSystem_active_particle_target_index_get", "rna_ParticleSystem_active_particle_target_index_set", "rna_ParticleSystem_active_particle_target_index_range"); + RNA_def_property_ui_text(prop, "Active Particle Target Index", ""); /* billboard */ @@ -1989,11 +2035,13 @@ static void rna_def_particle_system(BlenderRNA *brna) void RNA_def_particle(BlenderRNA *brna) { + rna_def_particle_target(brna); + rna_def_particle_hair_key(brna); rna_def_particle_key(brna); + rna_def_child_particle(brna); rna_def_particle(brna); - rna_def_keyed_particle_target(brna); rna_def_particle_system(brna); rna_def_particle_settings(brna); } From 024cd8c3d88ef09a74c6b5916a3f960a7adcef01 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Tue, 21 Jul 2009 00:19:07 +0000 Subject: [PATCH 290/512] SVN maintenance. --- source/blender/makesrna/intern/rna_boid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index af274d813b5..0c5565e253a 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -1,5 +1,5 @@ /** - * $Id: rna_modifier.c 21514 2009-07-11 05:41:21Z aligorith $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From ae10731eb9b2397b34cf21d349f022e78fdab180 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 00:30:19 +0000 Subject: [PATCH 291/512] 2.5: DNA fixes for game engine changes, making it work on 64bit. --- source/blender/makesdna/DNA_scene_types.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 516a718849b..8e517ad7760 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -393,14 +393,12 @@ typedef struct GameData { /* standalone player */ struct GameFraming framing; - short pad9, pad10; short fullscreen, xplay, yplay, freqplay; short depth, attrib, rt1, rt2; /* stereo/dome mode */ struct GameDome dome; short stereoflag, stereomode, xsch, ysch; //xsch and ysch can be deleted !!! - float pad12; } GameData; #define STEREO_NOSTEREO 1 #define STEREO_ENABLED 2 From 5fd16476d990a59098f924d401dc9de9ef40a58a Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Tue, 21 Jul 2009 00:31:33 +0000 Subject: [PATCH 292/512] Forgotten file from boids commit. --- source/blender/makesdna/DNA_boid_types.h | 223 +++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 source/blender/makesdna/DNA_boid_types.h diff --git a/source/blender/makesdna/DNA_boid_types.h b/source/blender/makesdna/DNA_boid_types.h new file mode 100644 index 00000000000..3e5b0829c70 --- /dev/null +++ b/source/blender/makesdna/DNA_boid_types.h @@ -0,0 +1,223 @@ +/* DNA_particle_types.h + * + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 by Janne Karhu. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef DNA_BOID_TYPES_H +#define DNA_BOID_TYPES_H + +#include "DNA_listBase.h" + +typedef enum BoidRuleType { + eBoidRuleType_None = 0, + eBoidRuleType_Goal, /* go to goal assigned object or loudest assigned signal source */ + eBoidRuleType_Avoid, /* get away from assigned object or loudest assigned signal source */ + eBoidRuleType_AvoidCollision, /* manoeuver to avoid collisions with other boids and deflector object in near future */ + eBoidRuleType_Separate, /* keep from going through other boids */ + eBoidRuleType_Flock, /* move to center of neighbors and match their velocity */ + eBoidRuleType_FollowLeader, /* follow a boid or assigned object */ + eBoidRuleType_AverageSpeed, /* maintain speed, flight level or wander*/ + eBoidRuleType_Fight, /* go to closest enemy and attack when in range */ + //eBoidRuleType_Protect, /* go to enemy closest to target and attack when in range */ + //eBoidRuleType_Hide, /* find a deflector move to it's other side from closest enemy */ + //eBoidRuleType_FollowPath, /* move along a assigned curve or closest curve in a group */ + //eBoidRuleType_FollowWall, /* move next to a deflector object's in direction of it's tangent */ + NUM_BOID_RULE_TYPES +} BoidRuleType; + +/* boidrule->flag */ +#define BOIDRULE_CURRENT 1 +#define BOIDRULE_IN_AIR 4 +#define BOIDRULE_ON_LAND 8 +typedef struct BoidRule { + struct BoidRule *next, *prev; + int type, flag; + char name[32]; +} BoidRule; +#define BRULE_GOAL_AVOID_PREDICT 1 +#define BRULE_GOAL_AVOID_ARRIVE 2 +#define BRULE_GOAL_AVOID_SIGNAL 4 +typedef struct BoidRuleGoalAvoid { + BoidRule rule; + struct Object *ob; + int options; + float fear_factor; + + /* signals */ + int signal_id, channels; +} BoidRuleGoalAvoid; +#define BRULE_ACOLL_WITH_BOIDS 1 +#define BRULE_ACOLL_WITH_DEFLECTORS 2 +typedef struct BoidRuleAvoidCollision { + BoidRule rule; + int options; + float look_ahead; +} BoidRuleAvoidCollision; +#define BRULE_LEADER_IN_LINE 1 +typedef struct BoidRuleFollowLeader { + BoidRule rule; + struct Object *ob; + float loc[3], oloc[3]; + float cfra, distance; + int options, queue_size; +} BoidRuleFollowLeader; +typedef struct BoidRuleAverageSpeed { + BoidRule rule; + float wander, level, speed, rt; +} BoidRuleAverageSpeed; +typedef struct BoidRuleFight { + BoidRule rule; + float distance, flee_distance; +} BoidRuleFight; + +typedef enum BoidMode { + eBoidMode_InAir = 0, + eBoidMode_OnLand, + eBoidMode_Climbing, + eBoidMode_Falling, + eBoidMode_Liftoff, + NUM_BOID_MODES +} BoidMode; +typedef struct BoidData { + float health, acc[3]; + short state_id, mode; +} BoidData; + +// planned for near future +//typedef enum BoidConditionMode { +// eBoidConditionType_Then = 0, +// eBoidConditionType_And, +// eBoidConditionType_Or, +// NUM_BOID_CONDITION_MODES +//} BoidConditionMode; +//typedef enum BoidConditionType { +// eBoidConditionType_None = 0, +// eBoidConditionType_Signal, +// eBoidConditionType_NoSignal, +// eBoidConditionType_HealthBelow, +// eBoidConditionType_HealthAbove, +// eBoidConditionType_See, +// eBoidConditionType_NotSee, +// eBoidConditionType_StateTime, +// eBoidConditionType_Touching, +// NUM_BOID_CONDITION_TYPES +//} BoidConditionType; +//typedef struct BoidCondition { +// struct BoidCondition *next, *prev; +// int state_id; +// short type, mode; +// float threshold, probability; +// +// /* signals */ +// int signal_id, channels; +//} BoidCondition; + +typedef enum BoidRulesetType { + eBoidRulesetType_Fuzzy = 0, + eBoidRulesetType_Random, + eBoidRulesetType_Average, + NUM_BOID_RULESET_TYPES +} BoidRulesetType; +#define BOIDSTATE_CURRENT 1 +typedef struct BoidState { + struct BoidState *next, *prev; + ListBase rules; + ListBase conditions; + ListBase actions; + char name[32]; + int id, flag; + + /* rules */ + int ruleset_type; + float rule_fuzziness; + + /* signal */ + int signal_id, channels; + float volume, falloff; +} BoidState; + +// planned for near future +//typedef struct BoidSignal { +// struct BoidSignal *next, *prev; +// float loc[3]; +// float volume, falloff; +// int id; +//} BoidSignal; +//typedef struct BoidSignalDefine { +// struct BoidSignalDefine *next, *prev; +// int id, rt; +// char name[32]; +//} BoidSignalDefine; + +//typedef struct BoidSimulationData { +// ListBase signal_defines;/* list of defined signals */ +// ListBase signals[20]; /* gathers signals from all channels */ +// struct KDTree *signaltrees[20]; +// char channel_names[20][32]; +// int last_signal_id; /* used for incrementing signal ids */ +// int flag; /* switches for drawing stuff */ +//} BoidSimulationData; + +typedef struct BoidSettings { + int options, last_state_id; + + float landing_smoothness, rt; + float banking, height; + + float health, aggression; + float strength, accuracy, range; + + /* flying related */ + float air_min_speed, air_max_speed; + float air_max_acc, air_max_ave; + float air_personal_space; + + /* walk/run related */ + float land_jump_speed, land_max_speed; + float land_max_acc, land_max_ave; + float land_personal_space; + float land_stick_force; + + struct ListBase states; +} BoidSettings; + +/* boidsettings->options */ +#define BOID_ALLOW_FLIGHT 1 +#define BOID_ALLOW_LAND 2 +#define BOID_ALLOW_CLIMB 4 + +/* boidrule->options */ +//#define BOID_RULE_FOLLOW_LINE 1 /* follow leader */ +//#define BOID_RULE_PREDICT 2 /* goal/avoid */ +//#define BOID_RULE_ARRIVAL 4 /* goal */ +//#define BOID_RULE_LAND 8 /* goal */ +//#define BOID_RULE_WITH_BOIDS 16 /* avoid collision */ +//#define BOID_RULE_WITH_DEFLECTORS 32 /* avoid collision */ + +#endif From 0aebd5f14475ef84b0095de4a8f034170b9aee75 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 00:36:07 +0000 Subject: [PATCH 293/512] 2.5: Make shade smooth/flat operators consistent, and add object mode operators. --- source/blender/editors/curve/curve_intern.h | 3 +- source/blender/editors/curve/curve_ops.c | 3 +- source/blender/editors/curve/editcurve.c | 29 +++++--- source/blender/editors/mesh/editmesh_tools.c | 8 +-- source/blender/editors/mesh/mesh_intern.h | 2 +- source/blender/editors/mesh/mesh_ops.c | 6 +- source/blender/editors/object/object_edit.c | 70 +++++++++++++++++++ source/blender/editors/object/object_intern.h | 2 + source/blender/editors/object/object_ops.c | 2 + .../editors/space_buttons/buttons_ops.c | 1 + .../editors/space_view3d/view3d_header.c | 2 +- 11 files changed, 108 insertions(+), 20 deletions(-) diff --git a/source/blender/editors/curve/curve_intern.h b/source/blender/editors/curve/curve_intern.h index 34e81b60a16..ad3e9427861 100644 --- a/source/blender/editors/curve/curve_intern.h +++ b/source/blender/editors/curve/curve_intern.h @@ -75,7 +75,8 @@ void CURVE_OT_spline_type_set(struct wmOperatorType *ot); void CURVE_OT_radius_set(struct wmOperatorType *ot); void CURVE_OT_spline_weight_set(struct wmOperatorType *ot); void CURVE_OT_handle_type_set(struct wmOperatorType *ot); -void CURVE_OT_smooth_set(struct wmOperatorType *ot); +void CURVE_OT_shade_smooth(struct wmOperatorType *ot); +void CURVE_OT_shade_flat(struct wmOperatorType *ot); void CURVE_OT_tilt_clear(struct wmOperatorType *ot); void CURVE_OT_smooth(struct wmOperatorType *ot); diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index 45dc76d5488..6006c7e656b 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -130,7 +130,8 @@ void ED_operatortypes_curve(void) WM_operatortype_append(CURVE_OT_radius_set); WM_operatortype_append(CURVE_OT_spline_weight_set); WM_operatortype_append(CURVE_OT_handle_type_set); - WM_operatortype_append(CURVE_OT_smooth_set); + WM_operatortype_append(CURVE_OT_shade_smooth); + WM_operatortype_append(CURVE_OT_shade_flat); WM_operatortype_append(CURVE_OT_tilt_clear); WM_operatortype_append(CURVE_OT_smooth); diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 51a9cf5c75a..2bf5d357e5c 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -4550,14 +4550,14 @@ void CURVE_OT_delete(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "Which elements to delete."); } -/********************** set smooth operator *********************/ +/********************** shade smooth/flat operator *********************/ -static int set_smooth_exec(bContext *C, wmOperator *op) +static int shade_smooth_exec(bContext *C, wmOperator *op) { Object *obedit= CTX_data_edit_object(C); ListBase *editnurb= curve_get_editcurve(obedit); Nurb *nu; - int clear= RNA_boolean_get(op->ptr, "clear"); + int clear= (strcmp(op->idname, "CURVE_OT_shade_flat") == 0); if(obedit->type != OB_CURVE) return OPERATOR_CANCELLED; @@ -4575,21 +4575,32 @@ static int set_smooth_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void CURVE_OT_smooth_set(wmOperatorType *ot) +void CURVE_OT_shade_smooth(wmOperatorType *ot) { /* identifiers */ - ot->name= "Set Smooth"; - ot->idname= "CURVE_OT_smooth_set"; + ot->name= "Shade Smooth"; + ot->idname= "CURVE_OT_shade_smooth"; /* api callbacks */ - ot->exec= set_smooth_exec; + ot->exec= shade_smooth_exec; ot->poll= ED_operator_editsurfcurve; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} - /* properties */ - RNA_def_boolean(ot->srna, "clear", 0, "Clear", "Clear smooth shading to solid for selection instead of enabling it."); +void CURVE_OT_shade_flat(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Shade Flat"; + ot->idname= "CURVE_OT_shade_flat"; + + /* api callbacks */ + ot->exec= shade_smooth_exec; + ot->poll= ED_operator_editsurfcurve; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } /************** join operator, to be used externally? ****************/ diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 6d5baa80ade..76f355ab7f9 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -7134,7 +7134,7 @@ void MESH_OT_faces_shade_smooth(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -static int mesh_faces_shade_solid_exec(bContext *C, wmOperator *op) +static int mesh_faces_shade_flat_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); @@ -7148,14 +7148,14 @@ static int mesh_faces_shade_solid_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void MESH_OT_faces_shade_solid(wmOperatorType *ot) +void MESH_OT_faces_shade_flat(wmOperatorType *ot) { /* identifiers */ ot->name= "Shade Flat"; - ot->idname= "MESH_OT_faces_shade_solid"; + ot->idname= "MESH_OT_faces_shade_flat"; /* api callbacks */ - ot->exec= mesh_faces_shade_solid_exec; + ot->exec= mesh_faces_shade_flat_exec; ot->poll= ED_operator_editmesh; /* flags */ diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 6e098e04a14..905a51a1bb0 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -217,7 +217,7 @@ void MESH_OT_quads_convert_to_tris(struct wmOperatorType *ot); void MESH_OT_tris_convert_to_quads(struct wmOperatorType *ot); void MESH_OT_edge_flip(struct wmOperatorType *ot); void MESH_OT_faces_shade_smooth(struct wmOperatorType *ot); -void MESH_OT_faces_shade_solid(struct wmOperatorType *ot); +void MESH_OT_faces_shade_flat(struct wmOperatorType *ot); void MESH_OT_split(struct wmOperatorType *ot); void MESH_OT_extrude_repeat(struct wmOperatorType *ot); void MESH_OT_edge_rotate(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index cfe8dd4352d..8ed68d5cd20 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -147,7 +147,7 @@ static int face_specials_invoke(bContext *C, wmOperator *op, wmEvent *event) uiItemO(layout, NULL, 0, "MESH_OT_flip_normals"); // uiItemO(layout, "Bevel", 0, "MESH_OT_bevel"); // bevelmenu(em) uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth"); - uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_solid"); + uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_flat"); uiItemO(layout, NULL, 0, "MESH_OT_quads_convert_to_tris"); uiItemO(layout, NULL, 0, "MESH_OT_tris_convert_to_quads"); uiItemO(layout, NULL, 0, "MESH_OT_edge_flip"); @@ -205,7 +205,7 @@ static int specials_invoke(bContext *C, wmOperator *op, wmEvent *event) uiItemO(layout, "Smooth", 0, "MESH_OT_vertices_smooth"); // uiItemO(layout, "Bevel", 0, "MESH_OT_bevel"); // bevelmenu(em) uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth"); - uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_solid"); + uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_flat"); //uiItemO(layout, "Blend From Shape", 0, "MESH_OT_blend_from_shape"); //uiItemO(layout, "Propagate to All Shapes", 0, "MESH_OT_shape_propagate_to_all"); uiItemO(layout, "Select Vertex Path", 0, "MESH_OT_select_vertex_path"); @@ -284,7 +284,7 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_tris_convert_to_quads); WM_operatortype_append(MESH_OT_edge_flip); WM_operatortype_append(MESH_OT_faces_shade_smooth); - WM_operatortype_append(MESH_OT_faces_shade_solid); + WM_operatortype_append(MESH_OT_faces_shade_flat); WM_operatortype_append(MESH_OT_delete); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 5ad41bd82f8..37453039cf5 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -6388,6 +6388,76 @@ void OBJECT_OT_join(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } +/********************** Smooth/Flat *********************/ + +static int shade_smooth_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob; + Curve *cu; + Nurb *nu; + int clear= (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); + int done= 0; + + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + ob= base->object; + + if(ob->type==OB_MESH) { + mesh_set_smooth_flag(ob, !clear); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + done= 1; + } + else if ELEM(ob->type, OB_SURF, OB_CURVE) { + cu= ob->data; + + for(nu=cu->nurb.first; nu; nu=nu->next) { + if(!clear) nu->flag |= ME_SMOOTH; + else nu->flag &= ~ME_SMOOTH; + nu= nu->next; + } + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + done= 1; + } + } + CTX_DATA_END; + + return (done)? OPERATOR_FINISHED: OPERATOR_CANCELLED; +} + +void OBJECT_OT_shade_flat(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Shade Flat"; + ot->idname= "OBJECT_OT_shade_flat"; + + /* api callbacks */ + ot->exec= shade_smooth_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +void OBJECT_OT_shade_smooth(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Shade Smooth"; + ot->idname= "OBJECT_OT_shade_smooth"; + + /* api callbacks */ + ot->exec= shade_smooth_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + + /* ********************** */ void image_aspect(Scene *scene, View3D *v3d) diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 3feec87edca..9f6e2d68556 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -65,6 +65,8 @@ void OBJECT_OT_object_add(struct wmOperatorType *ot); void OBJECT_OT_duplicate(struct wmOperatorType *ot); void OBJECT_OT_delete(struct wmOperatorType *ot); void OBJECT_OT_join(struct wmOperatorType *ot); +void OBJECT_OT_shade_smooth(struct wmOperatorType *ot); +void OBJECT_OT_shade_flat(struct wmOperatorType *ot); void OBJECT_OT_mesh_add(struct wmOperatorType *ot); void OBJECT_OT_curve_add(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index b8fb5f43ea4..0a45bf92003 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -87,6 +87,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_duplicates_make_real); WM_operatortype_append(OBJECT_OT_duplicate); WM_operatortype_append(OBJECT_OT_join); + WM_operatortype_append(OBJECT_OT_shade_smooth); + WM_operatortype_append(OBJECT_OT_shade_flat); WM_operatortype_append(GROUP_OT_group_create); WM_operatortype_append(GROUP_OT_objects_remove); WM_operatortype_append(GROUP_OT_objects_add_active); diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index 8a9d2e9149b..124ccf9d480 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -900,3 +900,4 @@ void SCENE_OT_render_layer_remove(wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index bdc6bdb5601..5e6f5d9a96b 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2263,7 +2263,7 @@ static void view3d_edit_mesh_facesmenu(bContext *C, uiLayout *layout, void *arg_ uiItemS(layout); uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth"); - uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_solid"); + uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_flat"); } static void view3d_edit_mesh_normalsmenu(bContext *C, uiLayout *layout, void *arg_unused) From 1f4fa869e4877202fd91825f85be748fc3dfe50b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 00:55:20 +0000 Subject: [PATCH 294/512] 2.5: RNA & UI * Revert lamp sampling/buffers change. The right enum items should be defined in RNA, not the layout, so that it works in outliner, python api too. * Also changed type popup to radio buttons again, and removed the icons. This is more consistent, and I don't think it's a good idea to start using icons for these things, too much clutter. * Replace Mesh with Normals panel in the mesh buttons. * Remove Material panel from mesh buttons. * Added name fields for shape/vgroup/vcol/uv. * Spacing tweak to Object and Bone names. * Fix some naming conflicts in RNA, with "name" and "type" properties being defined twice in the same struct. * context.scene.tool_settings -> context.tool_settings. --- release/ui/buttons_data_bone.py | 6 +- release/ui/buttons_data_lamp.py | 22 ++--- release/ui/buttons_data_mesh.py | 82 ++++++++----------- release/ui/buttons_material.py | 9 +- release/ui/buttons_objects.py | 7 +- release/ui/buttons_physics_cloth.py | 1 + release/ui/buttons_scene.py | 4 +- release/ui/space_console.py | 2 +- release/ui/space_image.py | 10 +-- release/ui/space_view3d.py | 3 +- release/ui/space_view3d_toolbar.py | 6 +- source/blender/makesrna/intern/rna_brush.c | 1 + source/blender/makesrna/intern/rna_fcurve.c | 3 +- source/blender/makesrna/intern/rna_lamp.c | 28 +++++-- source/blender/makesrna/intern/rna_nodetree.c | 28 +++---- source/blender/makesrna/intern/rna_object.c | 2 +- source/blender/makesrna/intern/rna_space.c | 3 +- 17 files changed, 107 insertions(+), 110 deletions(-) diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py index fae3d24839c..b31cac15425 100644 --- a/release/ui/buttons_data_bone.py +++ b/release/ui/buttons_data_bone.py @@ -19,9 +19,9 @@ class BONE_PT_context_bone(BoneButtonsPanel): if not bone: bone = context.edit_bone - split = layout.split(percentage=0.06) - split.itemL(text="", icon="ICON_BONE_DATA") - split.itemR(bone, "name", text="") + row = layout.row() + row.itemL(text="", icon="ICON_BONE_DATA") + row.itemR(bone, "name", text="") class BONE_PT_transform(BoneButtonsPanel): __idname__ = "BONE_PT_transform" diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index aa1b9db8334..2155830e568 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -48,9 +48,7 @@ class DATA_PT_lamp(DataButtonsPanel): lamp = context.lamp - split = layout.split(percentage=0.2) - split.itemL(text="Type:") - split.itemR(lamp, "type", text="") + layout.itemR(lamp, "type", expand=True) split = layout.split() @@ -165,13 +163,8 @@ class DATA_PT_shadow(DataButtonsPanel): def draw(self, context): layout = self.layout lamp = context.lamp - - row = layout.row(align=True) - row.item_enumR(lamp, "shadow_method", 'NOSHADOW') - row.item_enumR(lamp, "shadow_method", 'RAY_SHADOW') - if lamp.type == 'SPOT': - row.item_enumR(lamp, "shadow_method", 'BUFFER_SHADOW') - + + layout.itemR(lamp, "shadow_method", expand=True) if lamp.shadow_method != 'NOSHADOW': @@ -186,12 +179,9 @@ class DATA_PT_shadow(DataButtonsPanel): if lamp.shadow_method == 'RAY_SHADOW': - row = layout.row(align=True) - layout.itemL(text="Sampling:") - row.item_enumR(lamp, "shadow_ray_sampling_method", 'ADAPTIVE_QMC') - row.item_enumR(lamp, "shadow_ray_sampling_method", 'CONSTANT_QMC') - if lamp.type == 'AREA': - row.item_enumR(lamp, "shadow_ray_sampling_method", 'CONSTANT_JITTERED') + col = layout.column() + col.itemL(text="Sampling:") + col.row().itemR(lamp, "shadow_ray_sampling_method", expand=True) if lamp.type in ('POINT', 'SUN', 'SPOT'): flow = layout.column_flow() diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index fba150c48ad..757745d039e 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -29,9 +29,9 @@ class DATA_PT_context_mesh(DataButtonsPanel): split.template_ID(space, "pin_id") split.itemS() -class DATA_PT_mesh(DataButtonsPanel): - __idname__ = "DATA_PT_mesh" - __label__ = "Mesh" +class DATA_PT_normals(DataButtonsPanel): + __idname__ = "DATA_PT_normals" + __label__ = "Normals" def draw(self, context): layout = self.layout @@ -48,48 +48,14 @@ class DATA_PT_mesh(DataButtonsPanel): sub = split.column() sub.itemR(mesh, "vertex_normal_flip") sub.itemR(mesh, "double_sided") - - layout.itemS() - layout.itemR(mesh, "texco_mesh") - -class DATA_PT_materials(DataButtonsPanel): - __idname__ = "DATA_PT_materials" - __label__ = "Materials" - - def poll(self, context): - return (context.object and context.object.type in ('MESH', 'CURVE', 'FONT', 'SURFACE')) - - def draw(self, context): - layout = self.layout - ob = context.object - - row = layout.row() - - row.template_list(ob, "materials", ob, "active_material_index") - - col = row.column(align=True) - col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") - col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") + row = layout.row(align=True) if context.edit_object: - row = layout.row(align=True) - - row.itemO("object.material_slot_assign", text="Assign") - row.itemO("object.material_slot_select", text="Select") - row.itemO("object.material_slot_deselect", text="Deselect") - - """ - layout.itemS() - - box= layout.box() - - row = box.row() - row.template_list(ob, "materials", ob, "active_material_index", compact=True) - - subrow = row.row(align=True) - subrow.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") - subrow.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") - """ + row.itemO("MESH_OT_faces_shade_smooth") + row.itemO("MESH_OT_faces_shade_flat") + else: + row.itemO("OBJECT_OT_shade_smooth") + row.itemO("OBJECT_OT_shade_flat") class DATA_PT_vertex_groups(DataButtonsPanel): __idname__ = "DATA_PT_vertex_groups" @@ -114,6 +80,11 @@ class DATA_PT_vertex_groups(DataButtonsPanel): if ob.data.users > 1: col.itemO("object.vertex_group_copy_to_linked", icon="ICON_BLANK1", text="") + group = ob.active_vertex_group + if group: + row = layout.row() + row.itemR(group, "name") + if context.edit_object: row = layout.row(align=True) @@ -150,7 +121,7 @@ class DATA_PT_shape_keys(DataButtonsPanel): col.itemS() subcol = col.column(align=True) - subcol.itemR(ob, "shape_key_lock", icon="ICON_PINNED", text="") + subcol.itemR(ob, "shape_key_lock", icon="ICON_UNPINNED", text="") subcol.itemR(kb, "mute", icon="ICON_MUTE_IPO_ON", text="") if key.relative: @@ -158,6 +129,9 @@ class DATA_PT_shape_keys(DataButtonsPanel): row.itemR(key, "relative") row.itemL() + row = layout.row() + row.itemR(kb, "name") + if ob.active_shape_key_index != 0: if not ob.shape_key_lock: row = layout.row(align=True) @@ -173,6 +147,9 @@ class DATA_PT_shape_keys(DataButtonsPanel): row.itemR(key, "relative") row.itemR(key, "slurph") + row = layout.row() + row.itemR(kb, "name") + if context.edit_object: layout.enabled = False @@ -186,12 +163,17 @@ class DATA_PT_uv_texture(DataButtonsPanel): row = layout.row() - row.template_list(me, "uv_textures", me, "active_uv_texture_index") + col = row.column() + col.template_list(me, "uv_textures", me, "active_uv_texture_index", rows=2) col = row.column(align=True) col.itemO("mesh.uv_texture_add", icon="ICON_ZOOMIN", text="") col.itemO("mesh.uv_texture_remove", icon="ICON_ZOOMOUT", text="") + lay = me.active_uv_texture + if lay: + layout.itemR(lay, "name") + class DATA_PT_vertex_colors(DataButtonsPanel): __idname__ = "DATA_PT_vertex_colors" __label__ = "Vertex Colors" @@ -201,16 +183,20 @@ class DATA_PT_vertex_colors(DataButtonsPanel): me = context.mesh row = layout.row() + col = row.column() - row.template_list(me, "vertex_colors", me, "active_vertex_color_index") + col.template_list(me, "vertex_colors", me, "active_vertex_color_index", rows=2) col = row.column(align=True) col.itemO("mesh.vertex_color_add", icon="ICON_ZOOMIN", text="") col.itemO("mesh.vertex_color_remove", icon="ICON_ZOOMOUT", text="") + lay = me.active_vertex_color + if lay: + layout.itemR(lay, "name") + bpy.types.register(DATA_PT_context_mesh) -bpy.types.register(DATA_PT_mesh) -bpy.types.register(DATA_PT_materials) +bpy.types.register(DATA_PT_normals) bpy.types.register(DATA_PT_vertex_groups) bpy.types.register(DATA_PT_shape_keys) bpy.types.register(DATA_PT_uv_texture) diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index 52a10f1e37e..ceb492b198e 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -37,12 +37,19 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): if ob: row = layout.row() - row.template_list(ob, "materials", ob, "active_material_index") + row.template_list(ob, "materials", ob, "active_material_index", rows=2) col = row.column(align=True) col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="") col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") + if context.edit_object: + row = layout.row(align=True) + + row.itemO("object.material_slot_assign", text="Assign") + row.itemO("object.material_slot_select", text="Select") + row.itemO("object.material_slot_deselect", text="Deselect") + split = layout.split(percentage=0.65) if ob and slot: diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index c8f2101eca9..27ce093af6d 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -14,9 +14,9 @@ class OBJECT_PT_context_object(ObjectButtonsPanel): layout = self.layout ob = context.object - split = layout.split(percentage=0.06) - split.itemL(text="", icon="ICON_OBJECT_DATA") - split.itemR(ob, "name", text="") + row = layout.row() + row.itemL(text="", icon="ICON_OBJECT_DATA") + row.itemR(ob, "name", text="") class OBJECT_PT_transform(ObjectButtonsPanel): __idname__ = "OBJECT_PT_transform" @@ -176,3 +176,4 @@ bpy.types.register(OBJECT_PT_groups) bpy.types.register(OBJECT_PT_display) bpy.types.register(OBJECT_PT_duplication) bpy.types.register(OBJECT_PT_animation) + diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py index b3de2fccd42..08911b0195c 100644 --- a/release/ui/buttons_physics_cloth.py +++ b/release/ui/buttons_physics_cloth.py @@ -196,3 +196,4 @@ bpy.types.register(PHYSICS_PT_cloth) bpy.types.register(PHYSICS_PT_cloth_cache) bpy.types.register(PHYSICS_PT_cloth_collision) bpy.types.register(PHYSICS_PT_cloth_stiffness) + diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 2b47003e970..5f686469292 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -114,9 +114,9 @@ class RENDER_PT_shading(RenderButtonsPanel): col.itemR(rd, "render_textures", text="Textures") col.itemR(rd, "render_shadows", text="Shadows") col.itemR(rd, "render_sss", text="Subsurface Scattering") + col.itemR(rd, "render_envmaps", text="Environment Map") col = split.column() - col.itemR(rd, "render_envmaps", text="Environment Map") col.itemR(rd, "render_raytracing", text="Ray Tracing") col.itemR(rd, "color_management") col.itemR(rd, "alpha_mode", text="Alpha") @@ -330,7 +330,7 @@ class RENDER_PT_antialiasing(RenderButtonsPanel): col.itemR(rd, "full_sample") col = split.column() - col.itemR(rd, "pixel_filter", text="Filter") + col.itemR(rd, "pixel_filter", text="") col.itemR(rd, "filter_size", text="Size", slider=True) class RENDER_PT_dimensions(RenderButtonsPanel): diff --git a/release/ui/space_console.py b/release/ui/space_console.py index d6078b1db80..880cce82a27 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -16,7 +16,7 @@ class CONSOLE_HT_header(bpy.types.Header): layout.template_header() row = layout.row() - row.itemR(sc, "type", expand=True) + row.itemR(sc, "console_type", expand=True) if sc.type == 'REPORT': diff --git a/release/ui/space_image.py b/release/ui/space_image.py index 3bd8c4ceb57..cdb22fb0442 100644 --- a/release/ui/space_image.py +++ b/release/ui/space_image.py @@ -9,7 +9,7 @@ class IMAGE_MT_view(bpy.types.Menu): layout = self.layout sima = context.space_data uv = sima.uv_editor - settings = context.scene.tool_settings + settings = context.tool_settings show_uvedit = sima.show_uvedit @@ -78,7 +78,7 @@ class IMAGE_MT_image(bpy.types.Menu): show_render = sima.show_render if ima: - if show_render: + if not show_render: layout.itemO("image.replace") layout.itemO("image.reload") @@ -157,7 +157,7 @@ class IMAGE_MT_uvs(bpy.types.Menu): layout = self.layout sima = context.space_data uv = sima.uv_editor - settings = context.scene.tool_settings + settings = context.tool_settings layout.itemR(uv, "snap_to_pixels") layout.itemR(uv, "constrain_to_image_bounds") @@ -199,7 +199,7 @@ class IMAGE_HT_header(bpy.types.Header): ima = sima.image iuser = sima.image_user layout = self.layout - settings = context.scene.tool_settings + settings = context.tool_settings show_render = sima.show_render show_paint = sima.show_paint @@ -223,7 +223,7 @@ class IMAGE_HT_header(bpy.types.Header): if show_uvedit: row.itemM("IMAGE_MT_uvs") - layout.template_ID(sima, "image", new="image.new") # open="image.open" + layout.template_ID(sima, "image", new="image.new") """ /* image select */ diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py index e28fdd6641f..39d8b86613f 100644 --- a/release/ui/space_view3d.py +++ b/release/ui/space_view3d.py @@ -170,8 +170,6 @@ class VIEW3D_PT_background_image(bpy.types.Panel): col.itemR(bg, "x_offset", text="X") col.itemR(bg, "y_offset", text="Y") - - bpy.types.register(VIEW3D_MT_view_navigation) bpy.types.register(VIEW3D_MT_view) bpy.types.register(VIEW3D_HT_header) @@ -179,3 +177,4 @@ bpy.types.register(VIEW3D_PT_3dview_properties) bpy.types.register(VIEW3D_PT_3dview_display) bpy.types.register(VIEW3D_PT_background_image) + diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index f4a2682f111..abffb7037c9 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -194,7 +194,7 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): __label__ = "Brush" def brush_src(self, context): - ts = context.scene.tool_settings + ts = context.tool_settings if context.sculpt_object: return ts.sculpt elif context.vpaint_object: @@ -220,7 +220,7 @@ class VIEW3D_PT_tools_brush(bpy.types.Panel): col = split.column() col.itemR(brush, "size", slider=True) if context.wpaint_object: - col.itemR(context.scene.tool_settings, "vertex_group_weight", text="Weight", slider=True) + col.itemR(context.tool_settings, "vertex_group_weight", text="Weight", slider=True) col.itemR(brush, "strength", slider=True) @@ -247,7 +247,7 @@ class VIEW3D_PT_sculptoptions(bpy.types.Panel): return context.sculpt_object def draw(self, context): - sculpt = context.scene.tool_settings.sculpt + sculpt = context.tool_settings.sculpt split = self.layout.split() diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 954c20e211c..8089d2e8b38 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -114,6 +114,7 @@ void rna_def_brush(BlenderRNA *brna) {SCULPT_TOOL_GRAB, "GRAB", 0, "Grab", ""}, {SCULPT_TOOL_LAYER, "LAYER", 0, "Layer", ""}, {SCULPT_TOOL_FLATTEN, "FLATTEN", 0, "Flatten", ""}, + {SCULPT_TOOL_CLAY, "CLAY", 0, "Clay", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "Brush", "ID"); diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index 95a0482557f..ceef84b92df 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -225,7 +225,8 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE); RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them."); - prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "function_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, prop_type_items); RNA_def_property_ui_text(prop, "Type", "Type of built-in function to use."); } diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index dd2681cb092..bbe3b1dedb3 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -280,11 +280,11 @@ static void rna_def_lamp(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem prop_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, "Hemisphere", "180 degree constant light source."}, - {LA_AREA, "AREA", ICON_LAMP_AREA, "Area", "Directional area light source."}, + {LA_LOCAL, "POINT", 0, "Point", "Omnidirectional point light source."}, + {LA_SUN, "SUN", 0, "Sun", "Constant direction parallel ray light source."}, + {LA_SPOT, "SPOT", 0, "Spot", "Directional cone light source."}, + {LA_HEMI, "HEMI", 0, "Hemi", "180 degree constant light source."}, + {LA_AREA, "AREA", 0, "Area", "Directional area light source."}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "Lamp", "ID"); @@ -389,20 +389,30 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area) PropertyRNA *prop; static EnumPropertyItem prop_shadow_items[] = { + {0, "NOSHADOW", 0, "No Shadow", ""}, + {LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow."}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem prop_spot_shadow_items[] = { {0, "NOSHADOW", 0, "No Shadow", ""}, {LA_SHAD_BUF, "BUFFER_SHADOW", 0, "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."}, {LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow."}, {0, NULL, 0, NULL, NULL}}; - + static EnumPropertyItem prop_ray_sampling_method_items[] = { {LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""}, {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""}, - {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", "For Area lamps only."}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem prop_spot_ray_sampling_method_items[] = { + {LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""}, + {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""}, + {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""}, {0, NULL, 0, NULL, NULL}}; prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode"); - RNA_def_property_enum_items(prop, prop_shadow_items); + RNA_def_property_enum_items(prop, (spot)? prop_spot_shadow_items: prop_shadow_items); RNA_def_property_ui_text(prop, "Shadow Method", "Method to compute lamp shadow with."); RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); @@ -419,7 +429,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area) prop= RNA_def_property(srna, "shadow_ray_sampling_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "ray_samp_method"); - RNA_def_property_enum_items(prop, prop_ray_sampling_method_items); + RNA_def_property_enum_items(prop, (area)? prop_spot_ray_sampling_method_items: prop_ray_sampling_method_items); RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower."); RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL); diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index b35b02b2063..a03b59556e1 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -483,10 +483,10 @@ static void def_cmp_filter(StructRNA *srna) {0, NULL, 0, NULL, NULL} }; - prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, type_items); - RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_ui_text(prop, "Filter Type", ""); } static void def_cmp_map_value(StructRNA *srna) @@ -653,14 +653,14 @@ static void def_cmp_output_file(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeImageFile", "storage"); - prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "name"); - RNA_def_property_ui_text(prop, "Name", ""); + RNA_def_property_ui_text(prop, "Filename", ""); - prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "image_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "imtype"); RNA_def_property_enum_items(prop, type_items); - RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_ui_text(prop, "Image Type", ""); /* TODO: openexr only { */ @@ -1092,10 +1092,10 @@ static void def_cmp_premul_key(StructRNA *srna) {0, NULL, 0, NULL, NULL} }; - prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, type_items); - RNA_def_property_ui_text(prop, "Blend Type", "Conversion between premultiplied alpha and key alpha"); + RNA_def_property_ui_text(prop, "Mapping", "Conversion between premultiplied alpha and key alpha"); } @@ -1120,10 +1120,10 @@ static void def_cmp_glare(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeGlare", "storage"); - prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "glare_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, type_items); - RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_ui_text(prop, "Glare Type", ""); prop = RNA_def_property(srna, "quality", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "quality"); @@ -1181,10 +1181,10 @@ static void def_cmp_tonemap(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeTonemap", "storage"); - prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "tonemap_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, type_items); - RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_ui_text(prop, "Tonemap Type", ""); /* TODO: if type==0 { */ @@ -1250,9 +1250,9 @@ static void def_tex_output(StructRNA *srna) RNA_def_struct_sdna_from(srna, "TexNodeOutput", "storage"); - prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + prop = RNA_def_property(srna, "output_name", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "name"); - RNA_def_property_ui_text(prop, "Name", ""); + RNA_def_property_ui_text(prop, "Output Name", ""); } static void def_tex_image(StructRNA *srna) diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 32a97d2c86a..29bb3a9b323 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -234,7 +234,7 @@ static int rna_VertexGroup_index_get(PointerRNA *ptr) static PointerRNA rna_Object_active_vertex_group_get(PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; - return rna_pointer_inherit_refine(ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef)); + return rna_pointer_inherit_refine(ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef-1)); } static int rna_Object_active_vertex_group_index_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index d959c26a49a..461c46e09bf 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1087,7 +1087,8 @@ static void rna_def_space_console(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text."); RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE, NULL); - prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + prop= RNA_def_property(srna, "console_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); RNA_def_property_enum_items(prop, console_type_items); RNA_def_property_ui_text(prop, "Type", "Console type."); RNA_def_property_update(prop, NC_CONSOLE | ND_CONSOLE, NULL); From f682de6fd2b4b64bc405f36f68c4024797b84492 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 01:14:55 +0000 Subject: [PATCH 295/512] RNA * Added suppport for generating code without verifying with DNA, this doesn't give good errors and is more error prone, but makes it easier to wrap things like EditBone which are not in DNA. * RNA_define_verify_sdna(0), and set to 1 again afterwards. --- source/blender/blenkernel/BKE_screen.h | 11 + source/blender/makesdna/DNA_screen_types.h | 10 - source/blender/makesrna/RNA_define.h | 1 + source/blender/makesrna/intern/makesrna.c | 9 +- source/blender/makesrna/intern/rna_armature.c | 385 ++---------------- source/blender/makesrna/intern/rna_define.c | 32 +- source/blender/makesrna/intern/rna_internal.h | 2 +- source/blender/makesrna/intern/rna_ui.c | 10 + 8 files changed, 92 insertions(+), 368 deletions(-) diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index be625fb856a..5a12c04780a 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -194,6 +194,12 @@ typedef struct HeaderType { void (*py_free)(void *py_data); } HeaderType; +typedef struct Header { + struct HeaderType *type; /* runtime */ + struct uiLayout *layout; /* runtime for drawing */ +} Header; + + /* menu types */ typedef struct MenuType { @@ -215,6 +221,11 @@ typedef struct MenuType { void (*py_free)(void *py_data); } MenuType; +typedef struct Menu { + struct MenuType *type; /* runtime */ + struct uiLayout *layout; /* runtime for drawing */ +} Menu; + /* spacetypes */ struct SpaceType *BKE_spacetype_from_id(int spaceid); struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid); diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index 73ecade9b8b..1be75e97735 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -110,16 +110,6 @@ typedef struct Panel { /* the part from uiBlock that needs saved in file */ char list_search[64]; } Panel; -typedef struct Header { - struct HeaderType *type; /* runtime */ - struct uiLayout *layout; /* runtime for drawing */ -} Header; - -typedef struct Menu { - struct MenuType *type; /* runtime */ - struct uiLayout *layout; /* runtime for drawing */ -} Menu; - typedef struct ScrArea { struct ScrArea *next, *prev; diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index aeb6c8edf2d..f76423ea846 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -42,6 +42,7 @@ extern "C" { BlenderRNA *RNA_create(void); void RNA_define_free(BlenderRNA *brna); void RNA_free(BlenderRNA *brna); +void RNA_define_verify_sdna(int verify); void RNA_init(void); void RNA_exit(void); diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index c8698ef57ac..ded8db61b7c 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -398,8 +398,10 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr } else if(rna_color_quantize(prop, dp)) fprintf(f, " values[%d]= (%s)(data->%s[%d]*(1.0f/255.0f));\n", i, rna_type_type(prop), dp->dnaname, i); - else + else if(dp->dnatype) fprintf(f, " values[%d]= (%s)%s(((%s*)data->%s)[%d]);\n", i, rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnatype, dp->dnaname, i); + else + fprintf(f, " values[%d]= (%s)%s((data->%s)[%d]);\n", i, rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname, i); } } } @@ -564,7 +566,10 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr fprintf(f, " data->%s[%d]= FTOCHAR(values[%d]);\n", dp->dnaname, i, i); } else { - fprintf(f, " ((%s*)data->%s)[%d]= %s", dp->dnatype, dp->dnaname, i, (dp->booleannegative)? "!": ""); + if(dp->dnatype) + fprintf(f, " ((%s*)data->%s)[%d]= %s", dp->dnatype, dp->dnaname, i, (dp->booleannegative)? "!": ""); + else + fprintf(f, " (data->%s)[%d]= %s", dp->dnaname, i, (dp->booleannegative)? "!": ""); rna_clamp_value(f, prop, 1, i); } } diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index 4c8f5597e1e..d98c7235c35 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -144,18 +144,6 @@ static void rna_Armature_path_end_frame_set(PointerRNA *ptr, int value) data->pathef= value; } -static void rna_EditBone_name_get(PointerRNA *ptr, char *value) -{ - EditBone *data= (EditBone*)(ptr->data); - BLI_strncpy(value, data->name, sizeof(data->name)); -} - -static int rna_EditBone_name_length(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return strlen(data->name); -} - static void rna_EditBone_name_set(PointerRNA *ptr, const char *value) { bArmature *arm= (bArmature*)ptr->id.data; @@ -169,55 +157,6 @@ static void rna_EditBone_name_set(PointerRNA *ptr, const char *value) ED_armature_bone_rename(arm, oldname, newname); } -static int rna_EditBone_active_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_ACTIVE) != 0); -} - -static void rna_EditBone_active_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_ACTIVE; - else data->flag &= ~BONE_ACTIVE; -} - -static float rna_EditBone_bbone_in_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->ease1); -} - -static void rna_EditBone_bbone_in_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->ease1= CLAMPIS(value, 0.0f, 2.0f); -} - -static float rna_EditBone_bbone_out_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->ease2); -} - -static void rna_EditBone_bbone_out_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->ease2= CLAMPIS(value, 0.0f, 2.0f); -} - -static int rna_EditBone_bbone_segments_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (int)(data->segments); -} - -static void rna_EditBone_bbone_segments_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->segments= CLAMPIS(value, 1, 32); -} - static void rna_EditBone_layer_get(PointerRNA *ptr, int values[16]) { EditBone *data= (EditBone*)(ptr->data); @@ -261,12 +200,6 @@ static void rna_EditBone_connected_check(EditBone *ebone) } } -static int rna_EditBone_connected_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_CONNECTED) != 0); -} - static void rna_EditBone_connected_set(PointerRNA *ptr, int value) { EditBone *ebone= (EditBone*)(ptr->data); @@ -277,190 +210,6 @@ static void rna_EditBone_connected_set(PointerRNA *ptr, int value) rna_EditBone_connected_check(ebone); } -static int rna_EditBone_cyclic_offset_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (!((data->flag) & BONE_NO_CYCLICOFFSET) != 0); -} - -static void rna_EditBone_cyclic_offset_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(!value) data->flag |= BONE_NO_CYCLICOFFSET; - else data->flag &= ~BONE_NO_CYCLICOFFSET; -} - -static int rna_EditBone_deform_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (!((data->flag) & BONE_NO_DEFORM) != 0); -} - -static void rna_EditBone_deform_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(!value) data->flag |= BONE_NO_DEFORM; - else data->flag &= ~BONE_NO_DEFORM; -} - -static int rna_EditBone_draw_wire_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_DRAWWIRE) != 0); -} - -static void rna_EditBone_draw_wire_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_DRAWWIRE; - else data->flag &= ~BONE_DRAWWIRE; -} - -static float rna_EditBone_envelope_distance_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->dist); -} - -static void rna_EditBone_envelope_distance_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->dist= CLAMPIS(value, 0.0f, 1000.0f); -} - -static float rna_EditBone_envelope_weight_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->weight); -} - -static void rna_EditBone_envelope_weight_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->weight= CLAMPIS(value, 0.0f, 1000.0f); -} - -static float rna_EditBone_radius_head_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->rad_head); -} - -static void rna_EditBone_radius_head_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(data->parent) - data->parent->rad_tail= value; - else - data->rad_head= value; -} - -static float rna_EditBone_radius_tail_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->rad_tail); -} - -static void rna_EditBone_radius_tail_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->rad_tail= value; -} - -static void rna_EditBone_head_get(PointerRNA *ptr, float values[3]) -{ - EditBone *data= (EditBone*)(ptr->data); - values[0]= (float)(((float*)data->head)[0]); - values[1]= (float)(((float*)data->head)[1]); - values[2]= (float)(((float*)data->head)[2]); -} - -static void rna_EditBone_head_set(PointerRNA *ptr, const float values[3]) -{ - EditBone *data= (EditBone*)(ptr->data); - ((float*)data->head)[0]= values[0]; - ((float*)data->head)[1]= values[1]; - ((float*)data->head)[2]= values[2]; -} - -static int rna_EditBone_head_selected_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_ROOTSEL) != 0); -} - -static void rna_EditBone_head_selected_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_ROOTSEL; - else data->flag &= ~BONE_ROOTSEL; -} - -static int rna_EditBone_hidden_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_HIDDEN_A) != 0); -} - -static void rna_EditBone_hidden_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_HIDDEN_A; - else data->flag &= ~BONE_HIDDEN_A; -} - -static int rna_EditBone_hinge_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (!((data->flag) & BONE_HINGE) != 0); -} - -static void rna_EditBone_hinge_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(!value) data->flag |= BONE_HINGE; - else data->flag &= ~BONE_HINGE; -} - -static int rna_EditBone_inherit_scale_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (!((data->flag) & BONE_NO_SCALE) != 0); -} - -static void rna_EditBone_inherit_scale_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(!value) data->flag |= BONE_NO_SCALE; - else data->flag &= ~BONE_NO_SCALE; -} - -static int rna_EditBone_locked_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_EDITMODE_LOCKED) != 0); -} - -static void rna_EditBone_locked_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_EDITMODE_LOCKED; - else data->flag &= ~BONE_EDITMODE_LOCKED; -} - -static int rna_EditBone_multiply_vertexgroup_with_envelope_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_MULT_VG_ENV) != 0); -} - -static void rna_EditBone_multiply_vertexgroup_with_envelope_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_MULT_VG_ENV; - else data->flag &= ~BONE_MULT_VG_ENV; -} - static PointerRNA rna_EditBone_parent_get(PointerRNA *ptr) { EditBone *data= (EditBone*)(ptr->data); @@ -497,47 +246,6 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value) } } -static float rna_EditBone_roll_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (float)(data->roll); -} - -static void rna_EditBone_roll_set(PointerRNA *ptr, float value) -{ - EditBone *data= (EditBone*)(ptr->data); - data->roll= value; -} - -static void rna_EditBone_tail_get(PointerRNA *ptr, float values[3]) -{ - EditBone *data= (EditBone*)(ptr->data); - values[0]= (float)(((float*)data->tail)[0]); - values[1]= (float)(((float*)data->tail)[1]); - values[2]= (float)(((float*)data->tail)[2]); -} - -static void rna_EditBone_tail_set(PointerRNA *ptr, const float values[3]) -{ - EditBone *data= (EditBone*)(ptr->data); - ((float*)data->tail)[0]= values[0]; - ((float*)data->tail)[1]= values[1]; - ((float*)data->tail)[2]= values[2]; -} - -static int rna_EditBone_tail_selected_get(PointerRNA *ptr) -{ - EditBone *data= (EditBone*)(ptr->data); - return (((data->flag) & BONE_TIPSEL) != 0); -} - -static void rna_EditBone_tail_selected_set(PointerRNA *ptr, int value) -{ - EditBone *data= (EditBone*)(ptr->data); - if(value) data->flag |= BONE_TIPSEL; - else data->flag &= ~BONE_TIPSEL; -} - static void rna_Armature_editbone_transform_update(bContext *C, PointerRNA *ptr) { bArmature *arm= (bArmature*)ptr->id.data; @@ -608,128 +316,104 @@ static void rna_def_bone_common(StructRNA *srna, int editbone) /* strings */ prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); - if(editbone) RNA_def_property_string_funcs(prop, "rna_EditBone_name_get", "rna_EditBone_name_length", "rna_EditBone_name_set"); + if(editbone) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_EditBone_name_set"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); /* flags */ prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE); - if(editbone) { - RNA_def_property_array(prop, 16); - RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set"); - } - else { - RNA_def_property_boolean_sdna(prop, NULL, "layer", 1); - RNA_def_property_array(prop, 16); - RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set"); - } + RNA_def_property_boolean_sdna(prop, NULL, "layer", 1); + RNA_def_property_array(prop, 16); + if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set"); + else RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set"); RNA_def_property_ui_text(prop, "Layers", "Layers bone exists in"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "connected", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_connected_get", "rna_EditBone_connected_set"); - else { - RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - } + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED); + if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_connected_set"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_active_get", "rna_EditBone_active_set"); - else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE); RNA_def_property_ui_text(prop, "Active", "Bone was the last bone clicked on (most operations are applied to only this bone)"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_hinge_get", "rna_EditBone_hinge_set"); - else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE); RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone doesn't inherit rotation or scale from parent bone."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "multiply_vertexgroup_with_envelope", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_multiply_vertexgroup_with_envelope_get", "rna_EditBone_multiply_vertexgroup_with_envelope_set"); - else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV); RNA_def_property_ui_text(prop, "Multiply Vertex Group with Envelope", "When deforming bone, multiply effects of Vertex Group weights with Envelope influence."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "deform", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_deform_get", "rna_EditBone_deform_set"); - else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM); RNA_def_property_ui_text(prop, "Deform", "Bone does not deform any geometry."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE); RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone."); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_inherit_scale_get", "rna_EditBone_inherit_scale_set"); - else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_draw_wire_get", "rna_EditBone_draw_wire_set"); - else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE); RNA_def_property_ui_text(prop, "Draw Wire", "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes."); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "cyclic_offset", PROP_BOOLEAN, PROP_NONE); - if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_cyclic_offset_get", "rna_EditBone_cyclic_offset_set"); - else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET); RNA_def_property_ui_text(prop, "Cyclic Offset", "When bone doesn't have a parent, it receives cyclic offset effects."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); /* Number values */ /* envelope deform settings */ prop= RNA_def_property(srna, "envelope_distance", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_envelope_distance_get", "rna_EditBone_envelope_distance_set", NULL); - else RNA_def_property_float_sdna(prop, NULL, "dist"); + RNA_def_property_float_sdna(prop, NULL, "dist"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Envelope Deform Distance", "Bone deformation distance (for Envelope deform only)."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "envelope_weight", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_envelope_weight_get", "rna_EditBone_envelope_weight_set", NULL); - else RNA_def_property_float_sdna(prop, NULL, "weight"); + RNA_def_property_float_sdna(prop, NULL, "weight"); RNA_def_property_range(prop, 0.0f, 1000.0f); RNA_def_property_ui_text(prop, "Envelope Deform Weight", "Bone deformation weight (for Envelope deform only)."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "head_radius", PROP_FLOAT, PROP_NONE); - if(editbone) { - RNA_def_property_float_funcs(prop, "rna_EditBone_radius_head_get", "rna_EditBone_radius_head_set", NULL); - RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); - } - else RNA_def_property_float_sdna(prop, NULL, "rad_head"); + if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); + RNA_def_property_float_sdna(prop, NULL, "rad_head"); //RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); RNA_def_property_ui_text(prop, "Envelope Head Radius", "Radius of head of bone (for Envelope deform only)."); prop= RNA_def_property(srna, "tail_radius", PROP_FLOAT, PROP_NONE); - if(editbone) { - RNA_def_property_float_funcs(prop, "rna_EditBone_radius_tail_get", "rna_EditBone_radius_tail_set", NULL); - RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); - } - else RNA_def_property_float_sdna(prop, NULL, "rad_tail"); + if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); + RNA_def_property_float_sdna(prop, NULL, "rad_tail"); //RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); RNA_def_property_ui_text(prop, "Envelope Tail Radius", "Radius of tail of bone (for Envelope deform only)."); /* b-bones deform settings */ prop= RNA_def_property(srna, "bbone_segments", PROP_INT, PROP_NONE); - if(editbone) RNA_def_property_int_funcs(prop, "rna_EditBone_bbone_segments_get", "rna_EditBone_bbone_segments_set", NULL); - else RNA_def_property_int_sdna(prop, NULL, "segments"); + RNA_def_property_int_sdna(prop, NULL, "segments"); RNA_def_property_range(prop, 1, 32); RNA_def_property_ui_text(prop, "B-Bone Segments", "Number of subdivisions of bone (for B-Bones only)."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "bbone_in", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_in_get", "rna_EditBone_bbone_in_set", NULL); - else RNA_def_property_float_sdna(prop, NULL, "ease1"); + RNA_def_property_float_sdna(prop, NULL, "ease1"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "B-Bone Ease In", "Length of first Bezier Handle (for B-Bones only)."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); prop= RNA_def_property(srna, "bbone_out", PROP_FLOAT, PROP_NONE); - if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_out_get", "rna_EditBone_bbone_out_set", NULL); - else RNA_def_property_float_sdna(prop, NULL, "ease2"); + RNA_def_property_float_sdna(prop, NULL, "ease2"); RNA_def_property_range(prop, 0.0f, 2.0f); RNA_def_property_ui_text(prop, "B-Bone Ease Out", "Length of second Bezier Handle (for B-Bones only)."); RNA_def_property_update(prop, 0, "rna_Armature_update_data"); @@ -779,9 +463,12 @@ static void rna_def_edit_bone(BlenderRNA *brna) PropertyRNA *prop; srna= RNA_def_struct(brna, "EditBone", NULL); + RNA_def_struct_sdna(srna, "EditBone"); RNA_def_struct_ui_text(srna, "Edit Bone", "Editmode bone in an Armature datablock."); RNA_def_struct_ui_icon(srna, ICON_BONE_DATA); + RNA_define_verify_sdna(0); // not in sdna + prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "EditBone"); RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", "rna_EditBone_parent_set", NULL); @@ -790,43 +477,45 @@ static void rna_def_edit_bone(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "roll", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "rna_EditBone_roll_get", "rna_EditBone_roll_set", NULL); + RNA_def_property_float_sdna(prop, NULL, "roll"); RNA_def_property_ui_text(prop, "Roll", "Bone rotation around head-tail axis."); RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); prop= RNA_def_property(srna, "head", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "head"); RNA_def_property_array(prop, 3); - RNA_def_property_float_funcs(prop, "rna_EditBone_head_get", "rna_EditBone_head_set", NULL); RNA_def_property_ui_text(prop, "Head", "Location of head end of the bone."); RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); prop= RNA_def_property(srna, "tail", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "tail"); RNA_def_property_array(prop, 3); - RNA_def_property_float_funcs(prop, "rna_EditBone_tail_get", "rna_EditBone_tail_set", NULL); RNA_def_property_ui_text(prop, "Tail", "Location of tail end of the bone."); RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); rna_def_bone_common(srna, 1); prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_funcs(prop, "rna_EditBone_hidden_get", "rna_EditBone_hidden_set"); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_A); RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when in Edit Mode"); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_funcs(prop, "rna_EditBone_locked_get", "rna_EditBone_locked_set"); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_EDITMODE_LOCKED); RNA_def_property_ui_text(prop, "Locked", "Bone is not able to be transformed when in Edit Mode."); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "head_selected", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_funcs(prop, "rna_EditBone_head_selected_get", "rna_EditBone_head_selected_set"); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ROOTSEL); RNA_def_property_ui_text(prop, "Head Selected", ""); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); prop= RNA_def_property(srna, "tail_selected", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_funcs(prop, "rna_EditBone_tail_selected_get", "rna_EditBone_tail_selected_set"); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_TIPSEL); RNA_def_property_ui_text(prop, "Tail Selected", ""); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); + + RNA_define_verify_sdna(1); } void rna_def_armature(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index b651360eda0..491095a0bd6 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -44,7 +44,7 @@ /* Global used during defining */ -BlenderDefRNA DefRNA = {0, {0, 0}, {0, 0}, 0, 0, 0}; +BlenderDefRNA DefRNA = {0, {0, 0}, {0, 0}, 0, 0, 0, 0, 1}; /* Duplicated code since we can't link in blenkernel or blenlib */ @@ -438,6 +438,11 @@ void RNA_define_free(BlenderRNA *brna) DefRNA.error= 0; } +void RNA_define_verify_sdna(int verify) +{ + DefRNA.verify= verify; +} + void RNA_struct_free(BlenderRNA *brna, StructRNA *srna) { FunctionRNA *func, *nextfunc; @@ -1322,11 +1327,24 @@ static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *stru propname= prop->identifier; if(!rna_find_sdna_member(DefRNA.sdna, structname, propname, &smember)) { - if(!DefRNA.silent) { + if(DefRNA.silent) { + return NULL; + } + else if(!DefRNA.verify) { + /* some basic values to survive even with sdna info */ + dp->dnastructname= structname; + dp->dnaname= propname; + if(prop->type == PROP_BOOLEAN) + dp->dnaarraylength= 1; + if(prop->type == PROP_POINTER) + dp->dnapointerlevel= 1; + return dp; + } + else { fprintf(stderr, "rna_def_property_sdna: %s.%s not found.\n", structname, propname); DefRNA.error= 1; + return NULL; } - return NULL; } if(smember.arraylength > 1) @@ -1396,15 +1414,15 @@ void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const if((dp= rna_def_property_sdna(prop, structname, propname))) { /* SDNA doesn't pass us unsigned unfortunately .. */ - if(strcmp(dp->dnatype, "char") == 0) { + if(dp->dnatype && strcmp(dp->dnatype, "char") == 0) { iprop->hardmin= iprop->softmin= CHAR_MIN; iprop->hardmax= iprop->softmax= CHAR_MAX; } - else if(strcmp(dp->dnatype, "short") == 0) { + else if(dp->dnatype && strcmp(dp->dnatype, "short") == 0) { iprop->hardmin= iprop->softmin= SHRT_MIN; iprop->hardmax= iprop->softmax= SHRT_MAX; } - else if(strcmp(dp->dnatype, "int") == 0) { + else if(dp->dnatype && strcmp(dp->dnatype, "int") == 0) { iprop->hardmin= INT_MIN; iprop->hardmax= INT_MAX; @@ -1553,7 +1571,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, } } - if(strcmp(dp->dnatype, "ListBase") == 0) { + if(dp->dnatype && strcmp(dp->dnatype, "ListBase") == 0) { cprop->next= (PropCollectionNextFunc)"rna_iterator_listbase_next"; cprop->get= (PropCollectionGetFunc)"rna_iterator_listbase_get"; cprop->end= (PropCollectionEndFunc)"rna_iterator_listbase_end"; diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 5afc08439e2..299539a87bd 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -103,7 +103,7 @@ typedef struct BlenderDefRNA { ListBase structs; ListBase allocs; struct StructRNA *laststruct; - int error, silent, preprocess; + int error, silent, preprocess, verify; } BlenderDefRNA; extern BlenderDefRNA DefRNA; diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 217f1ea00a8..e83557957f6 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -633,7 +633,10 @@ static void rna_def_header(BlenderRNA *brna) RNA_def_function_flag(func, FUNC_REGISTER); RNA_def_pointer(func, "context", "Context", "", ""); + RNA_define_verify_sdna(0); // not in sdna + prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "layout"); RNA_def_property_struct_type(prop, "UILayout"); /* registration */ @@ -645,6 +648,8 @@ static void rna_def_header(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "type->space_type"); RNA_def_property_enum_items(prop, space_type_items); RNA_def_property_flag(prop, PROP_REGISTER); + + RNA_define_verify_sdna(1); } static void rna_def_menu(BlenderRNA *brna) @@ -672,7 +677,10 @@ static void rna_def_menu(BlenderRNA *brna) RNA_def_function_flag(func, FUNC_REGISTER); RNA_def_pointer(func, "context", "Context", "", ""); + RNA_define_verify_sdna(0); // not in sdna + prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "layout"); RNA_def_property_struct_type(prop, "UILayout"); /* registration */ @@ -688,6 +696,8 @@ static void rna_def_menu(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "type->space_type"); RNA_def_property_enum_items(prop, space_type_items); RNA_def_property_flag(prop, PROP_REGISTER); + + RNA_define_verify_sdna(1); } void RNA_def_ui(BlenderRNA *brna) From a78ef19054af921c536f647bd84ed9fd2636bfe0 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 01:26:17 +0000 Subject: [PATCH 296/512] 2.5: UI * List template visual changes. Items now look different, and it expands to size 5 as more items are added. * Added LISTROW and LISTBOX elements. The former is like a typical ROW button, but looks diffrent. The latter looks like a BOUNDBOX, and has no extra features yet. * Fix some glColor3ubv warnings with casting, did not find a nicer way. --- source/blender/editors/include/UI_interface.h | 19 +++- source/blender/editors/interface/interface.c | 7 +- .../editors/interface/interface_draw.c | 12 +-- .../editors/interface/interface_handlers.c | 21 ++-- .../editors/interface/interface_intern.h | 3 +- .../editors/interface/interface_layout.c | 32 +++++- .../editors/interface/interface_style.c | 8 +- .../editors/interface/interface_templates.c | 100 ++++++++++++++---- .../editors/interface/interface_widgets.c | 76 +++++++++++-- source/blender/makesdna/DNA_userdef_types.h | 2 +- source/blender/makesrna/intern/rna_ui.c | 75 +++++++++---- source/blender/makesrna/intern/rna_ui_api.c | 10 +- source/blender/makesrna/intern/rna_userdef.c | 6 ++ 13 files changed, 287 insertions(+), 84 deletions(-) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 66089272737..2fec61fda3c 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -30,6 +30,8 @@ #ifndef UI_INTERFACE_H #define UI_INTERFACE_H +#include "RNA_types.h" + /* Struct Declarations */ struct ID; @@ -201,7 +203,9 @@ typedef struct uiLayout uiLayout; #define SEARCH_MENU (40<<9) #define BUT_EXTRA (41<<9) #define HSVCIRCLE (42<<9) -#define BUTTYPE (63<<9) +#define LISTBOX (43<<9) +#define LISTROW (44<<9) +#define BUTTYPE (63<<9) /* Drawing * @@ -588,7 +592,6 @@ void uiLayoutSetKeepAspect(uiLayout *layout, int keepaspect); void uiLayoutSetScaleX(uiLayout *layout, float scale); void uiLayoutSetScaleY(uiLayout *layout, float scale); - int uiLayoutGetOperatorContext(uiLayout *layout); int uiLayoutGetActive(uiLayout *layout); int uiLayoutGetEnabled(uiLayout *layout); @@ -597,12 +600,14 @@ int uiLayoutGetAlignment(uiLayout *layout); int uiLayoutGetKeepAspect(uiLayout *layout); float uiLayoutGetScaleX(uiLayout *layout); float uiLayoutGetScaleY(uiLayout *layout); +ListBase *uiLayoutBoxGetList(uiLayout *layout); /* layout specifiers */ uiLayout *uiLayoutRow(uiLayout *layout, int align); uiLayout *uiLayoutColumn(uiLayout *layout, int align); uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align); uiLayout *uiLayoutBox(uiLayout *layout); +uiLayout *uiLayoutListBox(uiLayout *layout); uiLayout *uiLayoutFree(uiLayout *layout, int align); uiLayout *uiLayoutSplit(uiLayout *layout, float percentage); @@ -619,11 +624,19 @@ void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int type); void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname); void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser); -ListBase uiTemplateList(uiLayout *layout, struct PointerRNA *ptr, char *propname, struct PointerRNA *activeptr, char *activeprop, int rows, int columns, int compact); void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); void uiTemplateOperatorSearch(uiLayout *layout); void uiTemplateHeader3D(uiLayout *layout, struct bContext *C); +typedef struct uiListItem { + struct uiListItem *next, *prev; + + struct PointerRNA data; + uiLayout *layout; +} uiListItem; + +ListBase uiTemplateList(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *activeptr, char *activeprop, int rows, int type); + /* items */ void uiItemO(uiLayout *layout, char *name, int icon, char *opname); void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 9ded2ec9eb8..27561f42b8a 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -720,6 +720,7 @@ static void ui_is_but_sel(uiBut *but) if(value==0.0) push= 1; break; case ROW: + case LISTROW: if(value == but->hardmax) push= 1; break; case COL: @@ -2149,7 +2150,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1, freestr= 1; } - else if(type == ROW && proptype == PROP_ENUM) { + else if(ELEM(type, ROW, LISTROW) && proptype == PROP_ENUM) { EnumPropertyItem *item; int i, totitem, free; @@ -2202,7 +2203,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1, RNA_property_int_range(ptr, prop, &hardmin, &hardmax); RNA_property_int_ui_range(ptr, prop, &softmin, &softmax, &step); - if(type != ROW && min == max) { + if(!ELEM(type, ROW, LISTROW) && min == max) { min= hardmin; max= hardmax; } @@ -2217,7 +2218,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1, RNA_property_float_range(ptr, prop, &hardmin, &hardmax); RNA_property_float_ui_range(ptr, prop, &softmin, &softmax, &step, &precision); - if(type != ROW && min == max) { + if(!ELEM(type, ROW, LISTROW) && min == max) { min= hardmin; max= hardmax; } diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 8400fee0c55..cded4753f61 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -788,7 +788,7 @@ void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect) glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff); /* backdrop */ - glColor3ubv(wcol->inner); + glColor3ubv((unsigned char*)wcol->inner); uiSetRoundBox(15); gl_round_box(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f); @@ -852,7 +852,7 @@ void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect) /* AA circle */ glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH ); - glColor3ubv(wcol->inner); + glColor3ubv((unsigned char*)wcol->inner); glutil_draw_lined_arc(0.0f, M_PI*2.0, 100.0f, 32); glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH ); @@ -926,14 +926,14 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect if(cumap->flag & CUMA_DO_CLIP) { glColor3ubvShade(wcol->inner, -20); glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax); - glColor3ubv(wcol->inner); + glColor3ubv((unsigned char*)wcol->inner); glRectf(rect->xmin + zoomx*(cumap->clipr.xmin-offsx), rect->ymin + zoomy*(cumap->clipr.ymin-offsy), rect->xmin + zoomx*(cumap->clipr.xmax-offsx), rect->ymin + zoomy*(cumap->clipr.ymax-offsy)); } else { - glColor3ubv(wcol->inner); + glColor3ubv((unsigned char*)wcol->inner); glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax); } @@ -989,7 +989,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect }*/ /* the curve */ - glColor3ubv(wcol->item); + glColor3ubv((unsigned char*)wcol->item); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBegin(GL_LINE_STRIP); @@ -1043,7 +1043,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); /* outline */ - glColor3ubv(wcol->outline); + glColor3ubv((unsigned char*)wcol->outline); fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax); } diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 0fbfeffba0d..442d472a47a 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -188,7 +188,7 @@ static uiBut *ui_but_prev(uiBut *but) { while(but->prev) { but= but->prev; - if(but->type!=LABEL && but->type!=SEPR && but->type!=ROUNDBOX) return but; + if(!ELEM4(but->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return but; } return NULL; } @@ -197,7 +197,7 @@ static uiBut *ui_but_next(uiBut *but) { while(but->next) { but= but->next; - if(but->type!=LABEL && but->type!=SEPR && but->type!=ROUNDBOX) return but; + if(!ELEM4(but->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return but; } return NULL; } @@ -208,7 +208,7 @@ static uiBut *ui_but_first(uiBlock *block) but= block->buttons.first; while(but) { - if(but->type!=LABEL && but->type!=SEPR && but->type!=ROUNDBOX) return but; + if(!ELEM4(but->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return but; but= but->next; } return NULL; @@ -220,7 +220,7 @@ static uiBut *ui_but_last(uiBlock *block) but= block->buttons.last; while(but) { - if(but->type!=LABEL && but->type!=SEPR && but->type!=ROUNDBOX) return but; + if(!ELEM4(but->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return but; but= but->prev; } return NULL; @@ -284,7 +284,7 @@ static void ui_apply_autokey_undo(bContext *C, uiBut *but) uiAfterFunc *after; char *str= NULL; - if ELEM5(but->type, BLOCK, BUT, LABEL, PULLDOWN, ROUNDBOX); + if ELEM6(but->type, BLOCK, BUT, LABEL, PULLDOWN, ROUNDBOX, LISTBOX); else { /* define which string to use for undo */ if ELEM(but->type, LINK, INLINK) str= "Add button link"; @@ -449,7 +449,7 @@ static void ui_apply_but_ROW(bContext *C, uiBlock *block, uiBut *but, uiHandleBu /* states of other row buttons */ for(bt= block->buttons.first; bt; bt= bt->next) - if(bt!=but && bt->poin==but->poin && bt->type==ROW) + if(bt!=but && bt->poin==but->poin && ELEM(bt->type, ROW, LISTROW)) ui_check_but(bt); ui_apply_but_func(C, but); @@ -782,6 +782,7 @@ static void ui_apply_button(bContext *C, uiBlock *block, uiBut *but, uiHandleBut ui_apply_but_TOG(C, block, but, data); break; case ROW: + case LISTROW: ui_apply_but_ROW(C, block, but, data); break; case SCROLL: @@ -1392,7 +1393,7 @@ static void ui_textedit_next_but(uiBlock *block, uiBut *actbut, uiHandleButtonDa uiBut *but; /* label and roundbox can overlap real buttons (backdrops...) */ - if(actbut->type==LABEL && actbut->type==ROUNDBOX) + if(ELEM4(actbut->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return; for(but= actbut->next; but; but= but->next) { @@ -1416,7 +1417,7 @@ static void ui_textedit_prev_but(uiBlock *block, uiBut *actbut, uiHandleButtonDa uiBut *but; /* label and roundbox can overlap real buttons (backdrops...) */ - if(actbut->type==LABEL && actbut->type==ROUNDBOX) + if(ELEM4(actbut->type, LABEL, SEPR, ROUNDBOX, LISTBOX)) return; for(but= actbut->prev; but; but= but->prev) { @@ -3183,9 +3184,11 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) retval= ui_do_but_SLI(C, block, but, data, event); break; case ROUNDBOX: + case LISTBOX: case LABEL: case TOG3: case ROW: + case LISTROW: retval= ui_do_but_EXIT(C, but, data, event); break; case TEX: @@ -3331,7 +3334,7 @@ static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y) ui_window_to_block(ar, block, &mx, &my); for(but=block->buttons.first; but; but= but->next) { - if(ELEM3(but->type, LABEL, ROUNDBOX, SEPR)) + if(ELEM4(but->type, LABEL, ROUNDBOX, SEPR, LISTBOX)) continue; if(but->flag & UI_HIDDEN) continue; diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 5760a28cb5c..70d60502ac4 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -84,7 +84,8 @@ typedef enum { UI_WTYPE_RGB_PICKER, UI_WTYPE_NORMAL, UI_WTYPE_BOX, - UI_WTYPE_SCROLL + UI_WTYPE_SCROLL, + UI_WTYPE_LISTITEM } uiWidgetTypeEnum; diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 284da29f0d2..07fe2686317 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -148,6 +148,7 @@ typedef struct uiLayoutItemFlow { typedef struct uiLayoutItemBx { uiLayout litem; uiBut *roundbox; + ListBase items; } uiLayoutItemBx; typedef struct uiLayoutItemSplt { @@ -218,7 +219,7 @@ static int ui_text_icon_width(uiLayout *layout, char *name, int icon) { int variable = ui_layout_vary_direction(layout) == UI_ITEM_VARY_X; - if(icon && strcmp(name, "") == 0) + if(icon && !name[0]) return UI_UNIT_X; /* icon only */ else if(icon) return (variable)? UI_GetStringWidth(name) + 4 + UI_UNIT_X: 10*UI_UNIT_X; /* icon + text */ @@ -723,15 +724,17 @@ static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PropertyRNA subtype= RNA_property_subtype(prop); len= RNA_property_array_length(prop); - if(ELEM(type, PROP_STRING, PROP_POINTER) && strcmp(name, "") == 0) + if(ELEM(type, PROP_STRING, PROP_POINTER) && !name[0]) name= "non-empty"; + else if(type == PROP_BOOLEAN && !name[0]) + icon= ICON_DOT; w= ui_text_icon_width(layout, name, icon); h= UI_UNIT_Y; /* increase height for arrays */ if(index == RNA_NO_INDEX && len > 0) { - if(strcmp(name, "") == 0 && icon == 0) + if(!name[0] && icon == 0) h= 0; if(type == PROP_BOOLEAN && len == 20) @@ -1808,7 +1811,7 @@ uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align) return &flow->litem; } -uiLayout *uiLayoutBox(uiLayout *layout) +static uiLayout *ui_layout_box(uiLayout *layout, int type) { uiLayoutItemBx *box; @@ -1823,11 +1826,27 @@ uiLayout *uiLayoutBox(uiLayout *layout) uiBlockSetCurLayout(layout->root->block, &box->litem); - box->roundbox= uiDefBut(layout->root->block, ROUNDBOX, 0, "", 0, 0, 0, 0, NULL, 0.0, 0.0, 0, 0, ""); + box->roundbox= uiDefBut(layout->root->block, type, 0, "", 0, 0, 0, 0, NULL, 0.0, 0.0, 0, 0, ""); return &box->litem; } +uiLayout *uiLayoutBox(uiLayout *layout) +{ + return ui_layout_box(layout, ROUNDBOX); +} + +uiLayout *uiLayoutListBox(uiLayout *layout) +{ + return ui_layout_box(layout, LISTBOX); +} + +ListBase *uiLayoutBoxGetList(uiLayout *layout) +{ + uiLayoutItemBx *box= (uiLayoutItemBx*)layout; + return &box->items; +} + uiLayout *uiLayoutFree(uiLayout *layout, int align) { uiLayout *litem; @@ -2132,6 +2151,9 @@ static void ui_layout_free(uiLayout *layout) ui_layout_free((uiLayout*)item); } + if(layout->item.type == ITEM_LAYOUT_BOX) + BLI_freelistN(&((uiLayoutItemBx*)layout)->items); + MEM_freeN(layout); } diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 6faa658c3d0..e2c97e4f05e 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -93,7 +93,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->paneltitle.uifont_id= UIFONT_DEFAULT; style->paneltitle.points= 12; - style->paneltitle.kerning= 0; + style->paneltitle.kerning= 1; style->paneltitle.shadow= 5; style->paneltitle.shadx= 2; style->paneltitle.shady= -2; @@ -102,7 +102,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->grouplabel.uifont_id= UIFONT_DEFAULT; style->grouplabel.points= 12; - style->grouplabel.kerning= 0; + style->grouplabel.kerning= 1; style->grouplabel.shadow= 3; style->grouplabel.shadx= 1; style->grouplabel.shady= -1; @@ -110,7 +110,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widgetlabel.uifont_id= UIFONT_DEFAULT; style->widgetlabel.points= 11; - style->widgetlabel.kerning= 0; + style->widgetlabel.kerning= 1; style->widgetlabel.shadow= 3; style->widgetlabel.shadx= 1; style->widgetlabel.shady= -1; @@ -119,7 +119,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widget.uifont_id= UIFONT_DEFAULT; style->widget.points= 11; - style->widget.kerning= 0; + style->widget.kerning= 1; style->widget.shadowalpha= 0.25f; style->columnspace= 5; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 512d279cc37..f34774b0516 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -99,11 +99,12 @@ static void id_search_cb(const struct bContext *C, void *arg_template, char *str /* ID listbase */ for(id= lb->first; id; id= id->next) { - iconid= ui_id_icon_get(scene, id); + if(BLI_strcasestr(id->name+2, str)) { + iconid= ui_id_icon_get(scene, id); - if(BLI_strcasestr(id->name+2, str)) if(!uiSearchItemAdd(items, id->name+2, id, iconid)) break; + } } } @@ -1296,17 +1297,36 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname) /************************* List Template **************************/ -ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, PointerRNA *activeptr, char *activepropname, int rows, int columns, int compact) +#if 0 +static void list_item_add(ListBase *lb, ListBase *itemlb, uiLayout *layout, PointerRNA *data) { CollectionPointerLink *link; + uiListItem *item; + + /* add to list to store in box */ + item= MEM_callocN(sizeof(uiListItem), "uiListItem"); + item->layout= layout; + item->data= *data; + BLI_addtail(itemlb, item); + + /* add to list to return from function */ + link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); + RNA_pointer_create(NULL, &RNA_UIListItem, item, &link->ptr); + BLI_addtail(lb, link); +} +#endif + +ListBase uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, PointerRNA *activeptr, char *activepropname, int rows, int listtype) +{ + //Scene *scene= CTX_data_scene(C); PropertyRNA *prop= NULL, *activeprop; PropertyType type, activetype; StructRNA *ptype; - uiLayout *box, *row, *col; + uiLayout *box, *row, *col, *subrow; uiBlock *block; uiBut *but; Panel *pa; - ListBase lb; + ListBase lb, *itemlb; char *name, str[32]; int icon=0, i= 0, activei= 0, len, items, found, min, max; @@ -1361,7 +1381,39 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point /* get active data */ activei= RNA_property_int_get(activeptr, activeprop); - if(compact) { + if(listtype == 'i') { + box= uiLayoutListBox(layout); + col= uiLayoutColumn(box, 1); + row= uiLayoutRow(col, 0); + + itemlb= uiLayoutBoxGetList(box); + + if(ptr->data && prop) { + /* create list items */ + RNA_PROP_BEGIN(ptr, itemptr, prop) { + /* create button */ + if(i == 9) + row= uiLayoutRow(col, 0); + + if(RNA_struct_is_a(itemptr.type, &RNA_TextureSlot)) { +#if 0 + MTex *mtex= itemptr.data; + + if(mtex && mtex->tex) + icon= ui_id_icon_get(scene, &mtex->tex->id); +#endif + } + + uiDefIconButR(block, LISTROW, 0, icon, 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); + + //list_item_add(&lb, itemlb, uiLayoutRow(row, 1), &itemptr); + + i++; + } + RNA_PROP_END; + } + } + else if(listtype == 'c') { /* compact layout */ found= 0; @@ -1381,9 +1433,7 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point MEM_freeN(name); /* add to list to return */ - link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); - link->ptr= itemptr; - BLI_addtail(&lb, link); + //list_item_add(&lb, itemlb, uiLayoutRow(row, 1), &itemptr); } i++; @@ -1402,45 +1452,53 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point uiButSetFlag(but, UI_BUT_DISABLED); } else { - /* default rows/columns */ + /* default rows */ if(rows == 0) rows= 5; - if(columns == 0) - columns= 1; /* layout */ - box= uiLayoutBox(layout); + box= uiLayoutListBox(layout); row= uiLayoutRow(box, 0); col = uiLayoutColumn(row, 1); - uiBlockSetEmboss(block, UI_EMBOSSN); - /* init numbers */ RNA_property_int_range(activeptr, activeprop, &min, &max); len= max - min + 1; - items= rows*columns; + items= CLAMPIS(len, rows, 5); pa->list_scroll= MIN2(pa->list_scroll, len-items); pa->list_scroll= MAX2(pa->list_scroll, 0); + itemlb= uiLayoutBoxGetList(box); + if(ptr->data && prop) { /* create list items */ RNA_PROP_BEGIN(ptr, itemptr, prop) { if(i >= pa->list_scroll && ilist_scroll+items) { name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); + subrow= uiLayoutRow(col, 0); + /* create button */ - but= uiDefIconTextButR(block, ROW, 0, icon, (name)? name: "", 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); + if(!icon || icon == ICON_DOT) + but= uiDefButR(block, LISTROW, 0, (name)? name: "", 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); + else + but= uiDefIconTextButR(block, LISTROW, 0, icon, (name)? name: "", 0,0,UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, ""); uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT); + /* XXX hardcoded */ + if(itemptr.type == &RNA_MeshTextureFaceLayer || itemptr.type == &RNA_MeshColorLayer) { + uiBlockSetEmboss(block, UI_EMBOSSN); + uiItemR(subrow, "", ICON_SCENE, &itemptr, "active_render", 0, 0, 0); + uiBlockSetEmboss(block, UI_EMBOSS); + } + if(name) MEM_freeN(name); /* add to list to return */ - link= MEM_callocN(sizeof(CollectionPointerLink), "uiTemplateList return"); - link->ptr= itemptr; - BLI_addtail(&lb, link); + //list_item_add(&lb, itemlb, subrow, &itemptr); } i++; @@ -1455,8 +1513,6 @@ ListBase uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, Point i++; } - uiBlockSetEmboss(block, UI_EMBOSS); - /* add scrollbar */ if(len > items) { col= uiLayoutColumn(row, 0); diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index afb7e74daff..97c2bb55a69 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -536,7 +536,7 @@ static void shadecolors4(char *coltop, char *coldown, char *color, short shadeto static void round_box_shade_col4(char *col1, char *col2, float fac) { int faci, facm; - char col[4]; + unsigned char col[4]; faci= floor(255.1f*fac); facm= 255-faci; @@ -575,7 +575,7 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol) if(wcol->shaded==0) { /* filled center, solid */ - glColor4ubv(wcol->inner); + glColor4ubv((unsigned char*)wcol->inner); glBegin(GL_POLYGON); for(a=0; atotvert; a++) glVertex2fv(wtb->inner_v[a]); @@ -682,7 +682,7 @@ static void widget_draw_icon(uiBut *but, BIFIconID icon, int blend, rcti *rect) height= ICON_HEIGHT; /* calculate blend color */ - if ELEM3(but->type, TOG, ROW, TOGN) { + if ELEM4(but->type, TOG, ROW, TOGN, LISTROW) { if(but->flag & UI_SELECT); else if(but->flag & UI_ACTIVE); else blend= -60; @@ -806,7 +806,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b but->drawstr[selend_tmp]= ch; - glColor3ubv(wcol->item); + glColor3ubv((unsigned char*)wcol->item); glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2); } } else { @@ -838,7 +838,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b if(cpoin) *cpoin= 0; } - glColor3ubv(wcol->text); + glColor3ubv((unsigned char*)wcol->text); uiStyleFontDraw(fstyle, rect, but->drawstr+but->ofs); /* part text right aligned */ @@ -1123,6 +1123,19 @@ static struct uiWidgetColors wcol_scroll= { 10, -20 }; +static struct uiWidgetColors wcol_list_item= { + {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 +}; + /* free wcol struct to play with */ static struct uiWidgetColors wcol_tmp= { {0, 0, 0, 255}, @@ -1155,6 +1168,7 @@ void ui_widget_color_init(ThemeUI *tui) tui->wcol_menu_item= wcol_menu_item; tui->wcol_box= wcol_box; tui->wcol_scroll= wcol_scroll; + tui->wcol_list_item= wcol_list_item; tui->wcol_state= wcol_state; } @@ -1724,7 +1738,7 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat { rcti rect1; double value; - float fac, size; + float fac, size, min; int horizontal; /* calculate slider part */ @@ -1743,11 +1757,35 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat fac= (rect->xmax - rect->xmin)/(size); rect1.xmin= rect1.xmin + ceil(fac*(value - but->softmin)); rect1.xmax= rect1.xmin + ceil(fac*(but->a1 - but->softmin)); + + /* ensure minimium size */ + min= rect->ymax - rect->ymin; + + if(rect1.xmax - rect1.xmin < min) { + rect1.xmax= rect1.xmin + min; + + if(rect1.xmax > rect->xmax) { + rect1.xmax= rect->xmax; + rect1.xmin= MAX2(rect1.xmax - min, rect->xmin); + } + } } else { fac= (rect->ymax - rect->ymin)/(size); rect1.ymax= rect1.ymax - ceil(fac*(value - but->softmin)); rect1.ymin= rect1.ymax - ceil(fac*(but->a1 - but->softmin)); + + /* ensure minimium size */ + min= rect->xmax - rect->xmin; + + if(rect1.ymax - rect1.ymin < min) { + rect1.ymax= rect1.ymin + min; + + if(rect1.ymax > rect->ymax) { + rect1.ymax= rect->ymax; + rect1.ymin= MAX2(rect1.ymax - min, rect->ymin); + } + } } if(state & UI_SELECT) @@ -1755,7 +1793,6 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat else state= 0; uiWidgetScrollDraw(wcol, rect, &rect1, state); - } static void widget_link(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign) @@ -1918,6 +1955,18 @@ static void widget_menu_itembut(uiWidgetColors *wcol, rcti *rect, int state, int widgetbase_draw(&wtb, wcol); } +static void widget_list_itembut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign) +{ + uiWidgetBase wtb; + + widget_init(&wtb); + + /* rounded, but no outline */ + wtb.outline= 0; + round_box_edges(&wtb, 15, rect, 4.0f); + + widgetbase_draw(&wtb, wcol); +} static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign) { @@ -2067,7 +2116,6 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) case UI_WTYPE_OPTION: wt.wcol_theme= &btheme->tui.wcol_option; wt.draw= widget_optionbut; - wt.state= widget_state_label; break; case UI_WTYPE_RADIO: @@ -2161,6 +2209,11 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.state= widget_state_nothing; wt.custom= widget_scroll; break; + + case UI_WTYPE_LISTITEM: + wt.wcol_theme= &btheme->tui.wcol_list_item; + wt.draw= widget_list_itembut; + break; } return &wt; @@ -2268,6 +2321,10 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case ROW: wt= widget_type(UI_WTYPE_RADIO); break; + + case LISTROW: + wt= widget_type(UI_WTYPE_LISTITEM); + break; case TEX: wt= widget_type(UI_WTYPE_NAME); @@ -2315,6 +2372,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct break; case ROUNDBOX: + case LISTBOX: wt= widget_type(UI_WTYPE_BOX); break; @@ -2437,7 +2495,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, char *name, int iconid, rect->xmax -= BLF_width(cpoin+1) + 10; } - glColor3ubv(wt->wcol.text); + glColor3ubv((unsigned char*)wt->wcol.text); uiStyleFontDraw(fstyle, rect, name); /* part text right aligned */ diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 4fab0de1f0a..d8a943e1656 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -139,7 +139,7 @@ typedef struct ThemeUI { uiWidgetColors wcol_radio, wcol_option, wcol_toggle; uiWidgetColors wcol_num, wcol_numslider; uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item; - uiWidgetColors wcol_box, wcol_scroll; + uiWidgetColors wcol_box, wcol_scroll, wcol_list_item; uiWidgetStateColors wcol_state; diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index e83557957f6..8a51a5f4142 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -199,7 +199,7 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi return pt->py_srna; } -static StructRNA* rna_Panel_refine(struct PointerRNA *ptr) +static StructRNA* rna_Panel_refine(PointerRNA *ptr) { Panel *hdr= (Panel*)ptr->data; return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Panel; @@ -290,7 +290,7 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo return ht->py_srna; } -static StructRNA* rna_Header_refine(struct PointerRNA *htr) +static StructRNA* rna_Header_refine(PointerRNA *htr) { Header *hdr= (Header*)htr->data; return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Header; @@ -405,92 +405,108 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void return mt->py_srna; } -static StructRNA* rna_Menu_refine(struct PointerRNA *mtr) +static StructRNA* rna_Menu_refine(PointerRNA *mtr) { Menu *hdr= (Menu*)mtr->data; return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Menu; } -static int rna_UILayout_active_get(struct PointerRNA *ptr) +static int rna_UILayout_active_get(PointerRNA *ptr) { return uiLayoutGetActive(ptr->data); } -static void rna_UILayout_active_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_active_set(PointerRNA *ptr, int value) { uiLayoutSetActive(ptr->data, value); } -static void rna_UILayout_op_context_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_op_context_set(PointerRNA *ptr, int value) { uiLayoutSetOperatorContext(ptr->data, value); } -static int rna_UILayout_op_context_get(struct PointerRNA *ptr) +static int rna_UILayout_op_context_get(PointerRNA *ptr) { return uiLayoutGetOperatorContext(ptr->data); } -static int rna_UILayout_enabled_get(struct PointerRNA *ptr) +static int rna_UILayout_enabled_get(PointerRNA *ptr) { return uiLayoutGetEnabled(ptr->data); } -static void rna_UILayout_enabled_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_enabled_set(PointerRNA *ptr, int value) { uiLayoutSetEnabled(ptr->data, value); } -static int rna_UILayout_red_alert_get(struct PointerRNA *ptr) +#if 0 +static int rna_UILayout_red_alert_get(PointerRNA *ptr) { return uiLayoutGetRedAlert(ptr->data); } -static void rna_UILayout_red_alert_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_red_alert_set(PointerRNA *ptr, int value) { uiLayoutSetRedAlert(ptr->data, value); } -static int rna_UILayout_keep_aspect_get(struct PointerRNA *ptr) +static int rna_UILayout_keep_aspect_get(PointerRNA *ptr) { return uiLayoutGetKeepAspect(ptr->data); } -static void rna_UILayout_keep_aspect_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_keep_aspect_set(PointerRNA *ptr, int value) { uiLayoutSetKeepAspect(ptr->data, value); } +#endif -static int rna_UILayout_alignment_get(struct PointerRNA *ptr) +static int rna_UILayout_alignment_get(PointerRNA *ptr) { return uiLayoutGetAlignment(ptr->data); } -static void rna_UILayout_alignment_set(struct PointerRNA *ptr, int value) +static void rna_UILayout_alignment_set(PointerRNA *ptr, int value) { uiLayoutSetAlignment(ptr->data, value); } -static float rna_UILayout_scale_x_get(struct PointerRNA *ptr) +static float rna_UILayout_scale_x_get(PointerRNA *ptr) { return uiLayoutGetScaleX(ptr->data); } -static void rna_UILayout_scale_x_set(struct PointerRNA *ptr, float value) +static void rna_UILayout_scale_x_set(PointerRNA *ptr, float value) { uiLayoutSetScaleX(ptr->data, value); } -static float rna_UILayout_scale_y_get(struct PointerRNA *ptr) +static float rna_UILayout_scale_y_get(PointerRNA *ptr) { return uiLayoutGetScaleY(ptr->data); } -static void rna_UILayout_scale_y_set(struct PointerRNA *ptr, float value) +static void rna_UILayout_scale_y_set(PointerRNA *ptr, float value) { uiLayoutSetScaleY(ptr->data, value); } +static PointerRNA rna_UIListItem_layout_get(PointerRNA *ptr) +{ + uiListItem *item= (uiListItem*)ptr->data; + PointerRNA newptr; + RNA_pointer_create(NULL, &RNA_UILayout, item->layout, &newptr); + return newptr; +} + +static PointerRNA rna_UIListItem_data_get(PointerRNA *ptr) +{ + uiListItem *item= (uiListItem*)ptr->data; + return item->data; +} + #else // RNA_RUNTIME static void rna_def_ui_layout(BlenderRNA *brna) @@ -516,6 +532,8 @@ static void rna_def_ui_layout(BlenderRNA *brna) {WM_OP_EXEC_AREA, "EXEC_AREA", 0, "Exec Area", ""}, {WM_OP_EXEC_SCREEN, "EXEC_SCREEN", 0, "Exec Screen", ""}, {0, NULL, 0, NULL, NULL}}; + + /* layout */ srna= RNA_def_struct(brna, "UILayout", NULL); RNA_def_struct_sdna(srna, "uiLayout"); @@ -531,15 +549,19 @@ static void rna_def_ui_layout(BlenderRNA *brna) prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_UILayout_enabled_get", "rna_UILayout_enabled_set"); +#if 0 prop= RNA_def_property(srna, "red_alert", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_UILayout_red_alert_get", "rna_UILayout_red_alert_set"); +#endif prop= RNA_def_property(srna, "alignment", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, alignment_items); RNA_def_property_enum_funcs(prop, "rna_UILayout_alignment_get", "rna_UILayout_alignment_set", NULL); +#if 0 prop= RNA_def_property(srna, "keep_aspect", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_UILayout_keep_aspect_get", "rna_UILayout_keep_aspect_set"); +#endif prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_funcs(prop, "rna_UILayout_scale_x_get", "rna_UILayout_scale_x_set", NULL); @@ -548,6 +570,21 @@ static void rna_def_ui_layout(BlenderRNA *brna) RNA_def_property_float_funcs(prop, "rna_UILayout_scale_y_get", "rna_UILayout_scale_y_set", NULL); RNA_api_ui_layout(srna); + + /* list item */ + + srna= RNA_def_struct(brna, "UIListItem", NULL); + RNA_def_struct_ui_text(srna, "UI List Item", "User interface list."); + + prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "UILayout"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, "rna_UIListItem_layout_get", NULL, NULL); + + prop= RNA_def_property(srna, "data", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "AnyType"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, "rna_UIListItem_data_get", NULL, NULL); } static void rna_def_panel(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 404befc9bb2..e89e633acbe 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -86,6 +86,12 @@ void RNA_api_ui_layout(StructRNA *srna) {'v', "VECTOR", 0, "Vector", ""}, {'c', "COLOR", 0, "Color", ""}, {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem list_type_items[] = { + {0, "DEFAULT", 0, "None", ""}, + {'c', "COMPACT", 0, "Compact", ""}, + {'i', "ICONS", 0, "Icons", ""}, + {0, NULL, 0, NULL, NULL}}; /* simple layout specifiers */ func= RNA_def_function(srna, "row", "uiLayoutRow"); @@ -258,14 +264,14 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_property_flag(parm, PROP_REQUIRED); func= RNA_def_function(srna, "template_list", "uiTemplateList"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); api_ui_item_rna_common(func); parm= RNA_def_pointer(func, "active_data", "AnyType", "", "Data from which to take property for the active element."); RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR); parm= RNA_def_string(func, "active_property", "", 0, "", "Identifier of property in data, for the active element."); RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_int(func, "rows", 5, 0, INT_MAX, "", "Number of rows to display.", 0, INT_MAX); - parm= RNA_def_int(func, "columns", 5, 0, INT_MAX, "", "Number of columns to display.", 0, INT_MAX); - parm= RNA_def_boolean(func, "compact", 0, "", "Use compact, single row list template."); + parm= RNA_def_enum(func, "type", list_type_items, 0, "Type", "Type of list to use."); parm= RNA_def_collection(func, "items", 0, "", "Items visible in the list."); RNA_def_function_return(func, parm); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 5235883e408..f9aa27fcdbd 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -410,6 +410,12 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Scroll Widget Colors", ""); RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "wcol_list_item", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_list_item"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "List Item Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "wcol_state", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_pointer_sdna(prop, NULL, "wcol_state"); RNA_def_property_struct_type(prop, "ThemeWidgetStateColors"); From 6dfec894f9ae33ae30a28cd9ab4e7f49c5a4ab48 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 01:52:05 +0000 Subject: [PATCH 297/512] 2.5: Lamp button layout improvements by nudelZ. --- release/ui/buttons_data_lamp.py | 241 ++++++++++++++++++-------------- 1 file changed, 136 insertions(+), 105 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 2155830e568..4a6bc11922d 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -51,107 +51,124 @@ class DATA_PT_lamp(DataButtonsPanel): layout.itemR(lamp, "type", expand=True) split = layout.split() + col = split.column() + #col.itemL(text="Type:") + #col.itemR(lamp, "type", text="") + colsub = col.column(align=True) + colsub.itemR(lamp, "color", text="") + colsub.itemR(lamp, "energy") - sub = split.column() - sub.itemR(lamp, "color") - sub.itemR(lamp, "energy") - sub.itemR(lamp, "distance") - sub.itemR(lamp, "negative") + col.itemR(lamp, "negative") + #col.itemR(lamp, "distance") sub = split.column() + #sub.itemL(text="Influence:") sub.itemR(lamp, "layer", text="This Layer Only") sub.itemR(lamp, "specular") sub.itemR(lamp, "diffuse") + #sub.itemR(lamp, "negative") if lamp.type in ('POINT', 'SPOT'): - split = sub.split(percentage=0.3) - split.itemL(text="Falloff:") - split.itemR(lamp, "falloff_type", text="") - sub.itemR(lamp, "sphere") + split = layout.split() + col = split.column() + col.itemL(text="Falloff:") + col = col.column(align=True) + col.itemR(lamp, "falloff_type", text="") + col.itemR(lamp, "distance") + col.itemR(lamp, "sphere") - if (lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED'): - sub.itemR(lamp, "linear_attenuation") - sub.itemR(lamp, "quadratic_attenuation") + if lamp.falloff_type != 'LINEAR_QUADRATIC_WEIGHTED': + col = split.column() + + else: + sub = split.column() + sub.itemL(text="Attenuation Distance:") + sub = sub.column(align=True) + sub.itemR(lamp, "linear_attenuation", slider=True, text="Linear") + sub.itemR(lamp, "quadratic_attenuation", slider=True, text="Quadratic") if lamp.type == 'AREA': - sub.column() - sub.itemR(lamp, "gamma") - sub.itemR(lamp, "shape") + split = layout.split() + col = split.column() + col.itemL(text="Shape:") + col = col.column(align=True) + col.itemR(lamp, "shape", text="") if (lamp.shape == 'SQUARE'): - sub.itemR(lamp, "size") + col.itemR(lamp, "size") if (lamp.shape == 'RECTANGLE'): - sub.itemR(lamp, "size", text="Size X") - sub.itemR(lamp, "size_y") + col.itemR(lamp, "size", text="Size X") + col.itemR(lamp, "size_y", text="Size Y") + + sub = split.column() + sub.itemL(text="Gamma:") + sub.itemR(lamp, "gamma", text="Value") -class DATA_PT_sky(DataButtonsPanel): - __idname__ = "DATA_PT_sky" - __label__ = "Sky" +class DATA_PT_sunsky(DataButtonsPanel): + __idname__ = "DATA_PT_sunsky" + __label__ = "Sun/Sky" def poll(self, context): lamp = context.lamp return (lamp and lamp.type == 'SUN') - - def draw_header(self, context): - layout = self.layout - lamp = context.lamp.sky - - layout.itemR(lamp, "sky", text="") def draw(self, context): layout = self.layout lamp = context.lamp.sky - layout.active = lamp.sky + row = layout.row() + row.itemR(lamp, "sky") + row.itemR(lamp, "atmosphere") + row = layout.row() + row.active = lamp.sky or lamp.atmosphere + row.itemR(lamp, "atmosphere_turbidity", text="Turbidity") + split = layout.split() - col = split.column() - - col.itemL(text="Colors:") - col.itemR(lamp, "sky_blend_type", text="Blend Type") - col.itemR(lamp, "sky_blend") - col.itemR(lamp, "sky_color_space", text="Color Space") - col.itemR(lamp, "sky_exposure", text="Exposure") - col.itemS() - col.itemR(lamp, "atmosphere_turbidity", text="Turbidity") col = split.column() + col.active = lamp.sky + col.itemL(text="Blend Mode:") + colsub = col.column(align=True) + colsub.itemR(lamp, "sky_blend_type", text="") + colsub.itemR(lamp, "sky_blend", text="Factor") + + col.itemL(text="Color Space:") + colsub = col.column(align=True) + colsub.itemR(lamp, "sky_color_space", text="") + colsub.itemR(lamp, "sky_exposure", text="Exposure") + + col = split.column() + col.active = lamp.sky col.itemL(text="Horizon:") - col.itemR(lamp, "horizon_brightness", text="Brightness") - col.itemR(lamp, "spread", text="Spread") + colsub = col.column(align=True) + colsub.itemR(lamp, "horizon_brightness", text="Brightness") + colsub.itemR(lamp, "spread", text="Spread") + col.itemL(text="Sun:") - col.itemR(lamp, "sun_brightness", text="Brightness") - col.itemR(lamp, "sun_size", text="Size") - col.itemR(lamp, "backscattered_light", text="Back Light") - -class DATA_PT_atmosphere(DataButtonsPanel): - __idname__ = "DATA_PT_atmosphere" - __label__ = "Atmosphere" - - def poll(self, context): - lamp = context.lamp - return (lamp and lamp.type == 'SUN') - - def draw_header(self, context): - layout = self.layout - lamp = context.lamp.sky - - layout.itemR(lamp, "atmosphere", text="") - - def draw(self, context): - layout = self.layout - lamp = context.lamp.sky - - layout.active = lamp.atmosphere + colsub = col.column(align=True) + colsub.itemR(lamp, "sun_brightness", text="Brightness") + colsub.itemR(lamp, "sun_size", text="Size") + colsub.itemR(lamp, "backscattered_light", slider=True,text="Back Light") + + row = layout.row() + row.itemS() split = layout.split() - sub = split.column() - sub.itemR(lamp, "atmosphere_turbidity", text="Turbidity") - sub.itemR(lamp, "sun_intensity", text="Sun Intensity") - sub = split.column() - sub.itemR(lamp, "atmosphere_inscattering", text="Inscattering", slider=True) - sub.itemR(lamp, "atmosphere_extinction", text="Extinction", slider=True) - sub.itemR(lamp, "atmosphere_distance_factor", text="Distance") - + + col = split.column() + col.active = lamp.atmosphere + col.itemL(text="Sun:") + col.itemR(lamp, "sun_intensity", text="Intensity") + col.itemL(text="Scale Distance:") + col.itemR(lamp, "atmosphere_distance_factor", text="Distance") + + col = split.column() + col.active = lamp.atmosphere + col.itemL(text="Scattering:") + sub = col.column(align=True) + sub.itemR(lamp, "atmosphere_inscattering", slider=True, text="Inscattering") + sub.itemR(lamp, "atmosphere_extinction", slider=True ,text="Extinction") + class DATA_PT_shadow(DataButtonsPanel): __idname__ = "DATA_PT_shadow" __label__ = "Shadow" @@ -170,8 +187,8 @@ class DATA_PT_shadow(DataButtonsPanel): split = layout.split() - sub = split.column() - sub.itemR(lamp, "shadow_color") + col = split.column() + col.itemR(lamp, "shadow_color") sub = split.column() sub.itemR(lamp, "shadow_layer", text="This Layer Only") @@ -184,39 +201,53 @@ class DATA_PT_shadow(DataButtonsPanel): col.row().itemR(lamp, "shadow_ray_sampling_method", expand=True) if lamp.type in ('POINT', 'SUN', 'SPOT'): - flow = layout.column_flow() - flow.itemR(lamp, "shadow_soft_size", text="Soft Size") - flow.itemR(lamp, "shadow_ray_samples", text="Samples") + split = layout.split() + col = split.column(align=True) + col.itemR(lamp, "shadow_soft_size", text="Soft Size") + col = split.column(align=True) + col.itemR(lamp, "shadow_ray_samples", text="Samples") if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': - flow.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") + col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") if lamp.type == 'AREA': - flow = layout.column_flow() - flow.itemR(lamp, "shadow_ray_samples_x", text="Samples") - if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': - flow.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") + split = layout.split() + col = split.column() + if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': - flow.itemR(lamp, "umbra") - flow.itemR(lamp, "dither") - flow.itemR(lamp, "jitter") + col.itemR(lamp, "umbra") + col.itemR(lamp, "dither") + col.itemR(lamp, "jitter") + else: + col.itemL() + + col = split.column(align=True) + col.itemR(lamp, "shadow_ray_samples_x", text="Samples") + if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC': + col.itemR(lamp, "shadow_adaptive_threshold", text="Threshold") if lamp.shadow_method == 'BUFFER_SHADOW': - row = layout.row(align=True) - row.itemL(text="Buffer Type:") - layout.itemR(lamp, "shadow_buffer_type", expand=True) - + col = layout.column() + col.itemL(text="Buffer Type:") + col.row().itemR(lamp, "shadow_buffer_type", expand=True) + if lamp.shadow_buffer_type in ('REGULAR', 'HALFWAY'): - flow = layout.column_flow() - flow.itemL(text="Sample Buffers:") - flow.itemR(lamp, "shadow_sample_buffers", text="") - flow.itemL(text="Filter Type:") - flow.itemR(lamp, "shadow_filter_type", text="") - flow = layout.column_flow() - flow.itemR(lamp, "shadow_buffer_size", text="Size") - flow.itemR(lamp, "shadow_buffer_samples", text="Samples") - flow.itemR(lamp, "shadow_buffer_bias", text="Bias") - flow.itemR(lamp, "shadow_buffer_soft", text="Soft") + split = layout.split() + col = split.column() + col.itemL(text="Filter Type:") + col.itemR(lamp, "shadow_filter_type", text="") + + colsub = col.column(align=True) + colsub.itemR(lamp, "shadow_buffer_soft", text="Soft") + colsub.itemR(lamp, "shadow_buffer_bias", text="Bias") + + col = split.column() + col.itemL(text="Sample Buffers:") + col.itemR(lamp, "shadow_sample_buffers", text="") + + colsub = col.column(align=True) + colsub.itemR(lamp, "shadow_buffer_size", text="Size") + colsub.itemR(lamp, "shadow_buffer_samples", text="Samples") if (lamp.shadow_buffer_type == 'IRREGULAR'): row = layout.row() @@ -244,15 +275,15 @@ class DATA_PT_spot(DataButtonsPanel): lamp = context.lamp split = layout.split() - - sub = split.column() + col = split.column() + sub = col.column(align=True) sub.itemR(lamp, "spot_size", text="Size") sub.itemR(lamp, "spot_blend", text="Blend") - sub.itemR(lamp, "square") + col.itemR(lamp, "square") col = split.column() col.itemR(lamp, "halo") - colsub = col.column() + colsub = col.column(align=True) colsub.active = lamp.halo colsub.itemR(lamp, "halo_intensity", text="Intensity") if lamp.shadow_method == 'BUFFER_SHADOW': @@ -261,6 +292,7 @@ class DATA_PT_spot(DataButtonsPanel): class DATA_PT_falloff_curve(DataButtonsPanel): __idname__ = "DATA_PT_falloff_curve" __label__ = "Falloff Curve" + __default_closed__ = True def poll(self, context): lamp = context.lamp @@ -280,9 +312,8 @@ class DATA_PT_falloff_curve(DataButtonsPanel): bpy.types.register(DATA_PT_context_lamp) bpy.types.register(DATA_PT_preview) bpy.types.register(DATA_PT_lamp) -bpy.types.register(DATA_PT_shadow) -bpy.types.register(DATA_PT_sky) -bpy.types.register(DATA_PT_atmosphere) -bpy.types.register(DATA_PT_spot) bpy.types.register(DATA_PT_falloff_curve) +bpy.types.register(DATA_PT_spot) +bpy.types.register(DATA_PT_shadow) +bpy.types.register(DATA_PT_sunsky) From 22f421a9eea41262ea9a327862afb233c22d98aa Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 01:57:46 +0000 Subject: [PATCH 298/512] 2.5: Texture buttons preview now has an option to display the texture, the material, or both side by side. --- release/ui/buttons_texture.py | 8 +- .../editors/include/ED_previewrender.h | 4 +- source/blender/editors/include/UI_interface.h | 4 +- source/blender/editors/interface/interface.c | 3 +- .../editors/interface/interface_intern.h | 3 +- .../editors/interface/interface_templates.c | 39 ++++- .../editors/interface/interface_widgets.c | 4 +- .../blender/editors/preview/previewrender.c | 145 ++++++++++++------ .../blender/editors/space_node/space_node.c | 2 +- source/blender/makesdna/DNA_material_types.h | 8 +- source/blender/makesrna/intern/rna_ui_api.c | 1 + 11 files changed, 158 insertions(+), 63 deletions(-) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 4c2f392b646..49f04b886b4 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -16,15 +16,19 @@ class TEXTURE_PT_preview(TextureButtonsPanel): def draw(self, context): layout = self.layout tex = context.texture + mat = context.material - layout.template_preview(tex) + if mat: + layout.template_preview(tex, parent=mat) + else: + layout.template_preview(tex) class TEXTURE_PT_context_texture(TextureButtonsPanel): __idname__= "TEXTURE_PT_context_texture" __no_header__ = True def poll(self, context): - return (context.material or context.world or context.lamp) + return (context.material or context.world or context.lamp or context.texture) def draw(self, context): layout = self.layout diff --git a/source/blender/editors/include/ED_previewrender.h b/source/blender/editors/include/ED_previewrender.h index 10067510e53..0e50ea896d6 100644 --- a/source/blender/editors/include/ED_previewrender.h +++ b/source/blender/editors/include/ED_previewrender.h @@ -70,9 +70,9 @@ pr_method: void ED_preview_init_dbase(void); void ED_preview_free_dbase(void); -void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, int sizex, int sizey); +void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, int sizex, int sizey); void ED_preview_iconrender(struct Scene *scene, struct ID *id, int *rect, int sizex, int sizey); -void ED_preview_draw(const struct bContext *C, void *idp, rcti *rect); +void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, rcti *rect); #endif diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 2fec61fda3c..b7f75386113 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -481,7 +481,7 @@ void uiButSetNFunc (uiBut *but, uiButHandleNFunc func, void *argN, void *arg2) void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg); -void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct bContext *C, void *, struct rcti *rect)); +void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct bContext *C, void *, void *, struct rcti *rect), void *arg); /* Autocomplete * @@ -619,7 +619,7 @@ void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *newop, char *unlinkop); uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr); uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr); -void uiTemplatePreview(uiLayout *layout, struct ID *id); +void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent); void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int type); void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 27561f42b8a..284ec6943ea 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2772,9 +2772,10 @@ void uiBlockSetRenameFunc(uiBlock *block, uiButHandleRenameFunc func, void *arg1 } -void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, void *idv, rcti *rect)) +void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, void *idv, void *argv, rcti *rect), void *arg) { block->drawextra= func; + block->drawextra_arg= arg; } void uiButSetFunc(uiBut *but, uiButHandleFunc func, void *arg1, void *arg2) diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 70d60502ac4..aef52572fe3 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -269,7 +269,8 @@ struct uiBlock { int (*block_event_func)(const struct bContext *C, struct uiBlock *, struct wmEvent *); /* extra draw function for custom blocks */ - void (*drawextra)(const struct bContext *C, void *idv, rcti *rect); + void (*drawextra)(const struct bContext *C, void *idv, void *argv, rcti *rect); + void *drawextra_arg; int afterval, flag; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index f34774b0516..c08e8efcdb5 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1169,32 +1169,47 @@ static void do_preview_buttons(bContext *C, void *arg, int event) } } -void uiTemplatePreview(uiLayout *layout, ID *id) +void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) { uiLayout *row, *col; uiBlock *block; Material *ma; + ID *pid, *pparent; if(id && !ELEM4(GS(id->name), ID_MA, ID_TE, ID_WO, ID_LA)) { printf("uiTemplatePreview: expected ID of type material, texture, lamp or world.\n"); return; } + /* decide what to render */ + pid= id; + pparent= NULL; + + if((id && GS(id->name) == ID_TE) && (parent && GS(parent->name) == ID_MA)) { + ma= ((Material*)parent); + + if(ma->pr_texture == MA_PR_MATERIAL) + pid= parent; + else if(ma->pr_texture == MA_PR_BOTH) + pparent= parent; + } + + /* layout */ block= uiLayoutGetBlock(layout); - row= uiLayoutRow(layout, 0); - col= uiLayoutColumn(row, 0); uiLayoutSetKeepAspect(col, 1); - uiDefBut(block, BUT_EXTRA, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, id, 0.0, 0.0, 0, 0, ""); - uiBlockSetDrawExtraFunc(block, ED_preview_draw); - + /* add preview */ + uiDefBut(block, BUT_EXTRA, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, pid, 0.0, 0.0, 0, 0, ""); + uiBlockSetDrawExtraFunc(block, ED_preview_draw, pparent); uiBlockSetHandleFunc(block, do_preview_buttons, NULL); + /* add buttons */ if(id) { - if(GS(id->name) == ID_MA) { - ma= (Material*)id; + if(GS(id->name) == ID_MA || (parent && GS(parent->name) == ID_MA)) { + if(GS(id->name) == ID_MA) ma= (Material*)id; + else ma= (Material*)parent; uiLayoutColumn(row, 1); @@ -1205,6 +1220,14 @@ void uiTemplatePreview(uiLayout *layout, ID *id) uiDefIconButC(block, ROW, B_MATPRV, ICON_HAIR, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_HAIR, 0, 0, "Preview type: Hair strands"); uiDefIconButC(block, ROW, B_MATPRV, ICON_MATSPHERE, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_SPHERE_A, 0, 0, "Preview type: Large sphere with sky"); } + + if(GS(id->name) == ID_TE && (parent && GS(parent->name) == ID_MA)) { + uiLayoutRow(layout, 1); + + uiDefButS(block, ROW, B_MATPRV, "Texture", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_TEXTURE, 0, 0, ""); + uiDefButS(block, ROW, B_MATPRV, "Material", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_MATERIAL, 0, 0, ""); + uiDefButS(block, ROW, B_MATPRV, "Both", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_BOTH, 0, 0, ""); + } } } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 97c2bb55a69..fa56af74033 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2052,11 +2052,11 @@ static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType * if(but->block->drawextra) { /* note: drawextra can change rect +1 or -1, to match round errors of existing previews */ - but->block->drawextra(C, but->poin, rect); + but->block->drawextra(C, but->poin, but->block->drawextra_arg, rect); /* make mask to draw over image */ UI_GetThemeColor3ubv(TH_BACK, col); - glColor3ubv(col); + glColor3ubv((unsigned char*)col); round_box__edges(&wtb, 15, rect, 0.0f, 4.0); widgetbase_outline(&wtb); diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c index 28b9c6b1833..624952b48f5 100644 --- a/source/blender/editors/preview/previewrender.c +++ b/source/blender/editors/preview/previewrender.c @@ -112,6 +112,7 @@ typedef struct ShaderPreview { Scene *scene; ID *id; + ID *parent; int sizex, sizey; int *pr_rect; @@ -273,11 +274,10 @@ static Object *find_object(ListBase *lb, const char *name) /* call this with a pointer to initialize preview scene */ /* call this with NULL to restore assigned ID pointers in preview scene */ -static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp) +static Scene *preview_prepare_scene(Scene *scene, ID *id, int id_type, ShaderPreview *sp) { Scene *sce; Base *base; - ID *id= sp?sp->id:NULL; if(pr_main==NULL) return NULL; @@ -410,38 +410,74 @@ static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp /* new UI convention: draw is in pixel space already. */ /* uses ROUNDBOX button in block to get the rect */ -void ED_preview_draw(const bContext *C, void *idp, rcti *rect) +static int ed_preview_draw_rect(ScrArea *sa, Scene *sce, ID *id, int split, int first, rcti *rect, rcti *newrect) +{ + RenderResult rres; + char name[32]; + int gamma_correct=0; + int offx=0, newx= rect->xmax-rect->xmin, newy= rect->ymax-rect->ymin; + + if (id && GS(id->name) != ID_TE) { + /* exception: don't color manage texture previews - show the raw values */ + if (sce) gamma_correct = sce->r.color_mgt_flag & R_COLOR_MANAGEMENT; + } + + if(!split || first) sprintf(name, "Preview %p", sa); + else sprintf(name, "SecondPreview %p", sa); + + if(split) { + if(first) { + offx= 0; + newx= newx/2; + } + else { + offx= newx/2; + newx= newx - newx/2; + } + } + + RE_GetResultImage(RE_GetRender(name), &rres); + + if(rres.rectf) { + + if(ABS(rres.rectx-newx)<2 && ABS(rres.recty-newy)<2) { + newrect->xmax= MAX2(newrect->xmax, rect->xmin + rres.rectx + offx); + newrect->ymax= MAX2(newrect->ymax, rect->ymin + rres.recty); + + glPushMatrix(); + glTranslatef(offx, 0, 0); + glaDrawPixelsSafe_to32(rect->xmin, rect->ymin, rres.rectx, rres.recty, rres.rectx, rres.rectf, gamma_correct); + glPopMatrix(); + return 1; + } + } + + return 0; +} + +void ED_preview_draw(const bContext *C, void *idp, void *parentp, rcti *rect) { if(idp) { ScrArea *sa= CTX_wm_area(C); Scene *sce = CTX_data_scene(C); ID *id = (ID *)idp; + ID *parent= (ID *)parentp; SpaceButs *sbuts= sa->spacedata.first; - RenderResult rres; + rcti newrect; + int ok; int newx= rect->xmax-rect->xmin, newy= rect->ymax-rect->ymin; - int ok= 0; - char name[32]; - int gamma_correct=0; - - if (id && GS(id->name) != ID_TE) { - /* exception: don't color manage texture previews - show the raw values */ - if (sce) gamma_correct = sce->r.color_mgt_flag & R_COLOR_MANAGEMENT; - } - - sprintf(name, "Preview %p", sa); - RE_GetResultImage(RE_GetRender(name), &rres); - if(rres.rectf) { - - if( ABS(rres.rectx-newx)<2 && ABS(rres.recty-newy)<2 ) { - /* correct size, then black outline matches */ - rect->xmax= rect->xmin + rres.rectx; - rect->ymax= rect->ymin + rres.recty; - - glaDrawPixelsSafe_to32(rect->xmin, rect->ymin, rres.rectx, rres.recty, rres.rectx, rres.rectf, gamma_correct); - ok= 1; - } - } + newrect.xmin= rect->xmin; + newrect.xmax= rect->xmin; + newrect.ymin= rect->ymin; + newrect.ymax= rect->ymin; + + ok= ed_preview_draw_rect(sa, sce, id, (parent != NULL), 1, rect, &newrect); + if(parent) + ok &= ed_preview_draw_rect(sa, sce, parent, 1, 0, rect, &newrect); + + if(ok) + *rect= newrect; /* check for spacetype... */ if(sbuts->spacetype==SPACE_BUTS && sbuts->preview) { @@ -450,7 +486,7 @@ void ED_preview_draw(const bContext *C, void *idp, rcti *rect) } if(ok==0) { - ED_preview_shader_job(C, sa, idp, newx, newy); + ED_preview_shader_job(C, sa, id, parent, newx, newy); } } } @@ -791,23 +827,20 @@ static void shader_preview_updatejob(void *spv) } -/* runs inside thread for material, in foreground for icons */ -static void shader_preview_startjob(void *customdata, short *stop, short *do_update) +static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int first) { - ShaderPreview *sp= customdata; Render *re; Scene *sce; float oldlens; - char name [32]; + char name[32]; + int sizex; - sp->stop= stop; - sp->do_update= do_update; - /* get the stuff from the builtin preview dbase */ - sce= preview_prepare_scene(sp->scene, GS(sp->id->name), sp); + sce= preview_prepare_scene(sp->scene, id, GS(id->name), sp); // XXX sizex if(sce==NULL) return; - sprintf(name, "Preview %p", sp->owner); + if(!split || first) sprintf(name, "Preview %p", sp->owner); + else sprintf(name, "SecondPreview %p", sp->owner); re= RE_GetRender(name); /* full refreshed render from first tile */ @@ -825,8 +858,15 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd sce->r.scemode |= R_NO_IMAGE_LOAD; } + /* in case of split preview, use border render */ + if(split) { + if(first) sizex= sp->sizex/2; + else sizex= sp->sizex - sp->sizex/2; + } + else sizex= sp->sizex; + /* allocates or re-uses render result */ - RE_InitState(re, NULL, &sce->r, sp->sizex, sp->sizey, NULL); + RE_InitState(re, NULL, &sce->r, sizex, sp->sizey, NULL); /* callbacs are cleared on GetRender() */ if(sp->pr_method==PR_DO_RENDER) { @@ -835,8 +875,8 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd } /* lens adjust */ oldlens= ((Camera *)sce->camera->data)->lens; - if(sp->sizex > sp->sizey) - ((Camera *)sce->camera->data)->lens *= (float)sp->sizey/(float)sp->sizex; + if(sizex > sp->sizey) + ((Camera *)sce->camera->data)->lens *= (float)sp->sizey/(float)sizex; /* entire cycle for render engine */ RE_SetCamera(re, sce->camera); @@ -845,7 +885,6 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd RE_Database_Free(re); ((Camera *)sce->camera->data)->lens= oldlens; - *do_update= 1; /* handle results */ if(sp->pr_method==PR_ICON_RENDER) { @@ -860,8 +899,25 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd } /* unassign the pointers, reset vars */ - preview_prepare_scene(sp->scene, GS(sp->id->name), NULL); + preview_prepare_scene(sp->scene, NULL, GS(id->name), NULL); +} +/* runs inside thread for material, in foreground for icons */ +static void shader_preview_startjob(void *customdata, short *stop, short *do_update) +{ + ShaderPreview *sp= customdata; + + sp->stop= stop; + sp->do_update= do_update; + + if(sp->parent) { + shader_preview_render(sp, sp->parent, 1, 1); + shader_preview_render(sp, sp->id, 1, 0); + } + else + shader_preview_render(sp, sp->id, 0, 0); + + *do_update= 1; } static void shader_preview_free(void *customdata) @@ -871,7 +927,7 @@ static void shader_preview_free(void *customdata) MEM_freeN(sp); } -void ED_preview_shader_job(const bContext *C, void *owner, ID *id, int sizex, int sizey) +void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, int sizex, int sizey) { wmJob *steve; ShaderPreview *sp; @@ -890,6 +946,7 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, int sizex, in sp->sizey= sizey; sp->pr_method= PR_DO_RENDER; sp->id = id; + sp->parent= parent; /* setup job */ WM_jobs_customdata(steve, sp, shader_preview_free); @@ -905,8 +962,10 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, int sizex, in /* rect should be allocated, sizex/sizy pixels, 32 bits */ void ED_preview_iconrender(Scene *scene, ID *id, int *rect, int sizex, int sizey) { - ShaderPreview *sp= MEM_callocN(sizeof(ShaderPreview), "ShaderPreview"); + ShaderPreview *sp; short stop=0, do_update=0; + + sp= MEM_callocN(sizeof(ShaderPreview), "ShaderPreview"); /* customdata for preview thread */ sp->scene= scene; diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index ac3a884c5f8..7c6667a83f2 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -168,7 +168,7 @@ static void node_area_refresh(const struct bContext *C, struct ScrArea *sa) if(snode->treetype==NTREE_SHADER) { Material *ma= (Material *)snode->id; if(ma->use_nodes) - ED_preview_shader_job(C, sa, snode->id, 100, 100); + ED_preview_shader_job(C, sa, snode->id, NULL, 100, 100); } else if(snode->treetype==NTREE_COMPOSIT) { Scene *scene= (Scene *)snode->id; diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index 561638bfd20..fd73d371d87 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -93,7 +93,7 @@ typedef struct Material { /* for buttons and render*/ char rgbsel, texact, pr_type, use_nodes; - short pr_back, pr_lamp, pad4, ml_flag; /* ml_flag is for disable base material */ + short pr_back, pr_lamp, pr_texture, ml_flag; /* ml_flag is for disable base material */ /* shaders */ short diff_shader, spec_shader; @@ -326,6 +326,12 @@ typedef struct Material { #define MA_HAIR 10 #define MA_ATMOS 11 +/* pr_texture */ +#define MA_PR_TEXTURE 0 +#define MA_PR_MATERIAL 1 +#define MA_PR_BOTH 2 + + /* pr_back */ #define MA_DARK 1 diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index e89e633acbe..05255036992 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -242,6 +242,7 @@ void RNA_api_ui_layout(StructRNA *srna) func= RNA_def_function(srna, "template_preview", "uiTemplatePreview"); parm= RNA_def_pointer(func, "id", "ID", "", "ID datablock."); RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "parent", "ID", "", "ID datablock."); func= RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping"); parm= RNA_def_pointer(func, "curvemap", "CurveMapping", "", "Curve mapping pointer."); From 74fce51841dab8ef81a7eab58ef14a946dfc0043 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 02:54:02 +0000 Subject: [PATCH 299/512] 2.5 - Constraint (Re)Naming * Names for newly added constraints are now derived from the type of constraint, making it easier to identify the type of constraint * Fixed crash when renaming constraints (due to invalid pointer being passed for the 'old' string name) --- source/blender/editors/interface/interface_templates.c | 2 +- source/blender/editors/object/editconstraint.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index c08e8efcdb5..e70510753e1 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -764,7 +764,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) if(proxy_protected == 0) { but = uiDefBut(block, TEX, B_CONSTRAINT_TEST, "", xco+120, yco, 85, 18, con->name, 0.0, 29.0, 0.0, 0.0, "Constraint name"); - uiButSetFunc(but, verify_constraint_name_func, con, NULL); + uiButSetFunc(but, verify_constraint_name_func, con, con->name); } else uiDefBut(block, LABEL, B_CONSTRAINT_TEST, con->name, xco+120, yco-1, 135, 19, NULL, 0.0, 0.0, 0.0, 0.0, ""); diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index b0890f5858d..69fc440dfe7 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -200,8 +200,7 @@ bConstraint *add_new_constraint (short type) /* Set up a generic constraint datablock */ con->type = type; con->flag |= CONSTRAINT_EXPAND; - con->enforce = 1.0F; - strcpy(con->name, "Const"); + con->enforce = 1.0f; /* Load the data for it */ cti = constraint_get_typeinfo(con); @@ -211,7 +210,12 @@ bConstraint *add_new_constraint (short type) /* only constraints that change any settings need this */ if (cti->new_data) cti->new_data(con->data); + + /* set the name based on the type of constraint */ + strcpy(con->name, cti->name); } + else + strcpy(con->name, "Const"); return con; } From 93f2743b0f569f0e7b6d9d8c9cc5f0b5cd1bedfa Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 04:21:07 +0000 Subject: [PATCH 300/512] 2.5 - IK Constraint Tools + Constraint Editing Tweaks * Add/Remove IK now works again using Shift-I and Ctrl-Alt-I as before. The code for this is now located in editconstraint.c for now... * Adding constraints with automatically added targets works again. It's a relief that the old code still works (with a minor tweak) --- .../blender/editors/armature/armature_ops.c | 4 +- source/blender/editors/armature/poseobject.c | 56 ------ .../blender/editors/object/editconstraint.c | 178 ++++++++++++++++-- source/blender/editors/object/object_intern.h | 3 + source/blender/editors/object/object_ops.c | 2 + 5 files changed, 169 insertions(+), 74 deletions(-) diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index a8a342451cc..dcd22e3138c 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -253,8 +253,8 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); WM_keymap_add_item(keymap, "POSE_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); - //WM_keymap_add_item(keymap, "POSE_OT_ik_add", IKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); - //WM_keymap_add_item(keymap, "POSE_OT_ik_clear", IKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_add_item(keymap, "POSE_OT_ik_add", IKEY, KM_PRESS, /*KM_CTRL|*/KM_SHIFT, 0); + WM_keymap_add_item(keymap, "POSE_OT_ik_clear", IKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index ccf82fbc7ac..16a9efc9023 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -85,13 +85,11 @@ /* ************* XXX *************** */ static int movetolayer_short_buts() {return 1;} -static int okee() {return 0;} static int pupmenu() {return 0;} static void waitcursor() {}; static void error() {}; static void BIF_undo_push() {} static void countall() {} -static void add_constraint() {} static void autokeyframe_pose_cb_func() {} /* ************* XXX *************** */ @@ -587,60 +585,6 @@ void POSE_OT_select_hierarchy(wmOperatorType *ot) } -void pose_add_IK(Scene *scene) -{ - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - - /* paranoia checks */ - if(!ob && !ob->pose) return; - if(ob==obedit || (ob->flag & OB_POSEMODE)==0) return; - - add_constraint(1); /* 1 means only IK */ -} - -/* context: all selected channels */ -void pose_clear_IK(Scene *scene) -{ - Object *obedit= scene->obedit; // XXX context - Object *ob= OBACT; - bArmature *arm= ob->data; - bPoseChannel *pchan; - bConstraint *con; - bConstraint *next; - - /* paranoia checks */ - if(!ob && !ob->pose) return; - if(ob==obedit || (ob->flag & OB_POSEMODE)==0) return; - - if(pose_has_protected_selected(ob, 0, 1)) - return; - - if(okee("Remove IK constraint(s)")==0) return; - - for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if(arm->layer & pchan->bone->layer) { - if(pchan->bone->flag & (BONE_ACTIVE|BONE_SELECTED)) { - - for(con= pchan->constraints.first; con; con= next) { - next= con->next; - if(con->type==CONSTRAINT_TYPE_KINEMATIC) { - BLI_remlink(&pchan->constraints, con); - free_constraint_data(con); - MEM_freeN(con); - } - } - pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET); - } - } - } - - DAG_object_flush_update(scene, ob, OB_RECALC_DATA); // and all its relations - - BIF_undo_push("Remove IK constraint(s)"); -} - - void pose_copy_menu(Scene *scene) { Object *obedit= scene->obedit; // XXX context diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 69fc440dfe7..437beda324b 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -807,6 +807,7 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot) static short get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, short add) { Object *obact= CTX_data_active_object(C); + bPoseChannel *pchanact= get_active_posechannel(obact); short only_curve= 0, only_mesh= 0, only_ob= 0; short found= 0; @@ -830,21 +831,24 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o return 0; /* restricted target-type constraints -------------- */ + /* NOTE: for these, we cannot try to add a target object if no valid ones are found, since that doesn't work */ /* curve-based constraints - set the only_curve and only_ob flags */ case CONSTRAINT_TYPE_TRACKTO: case CONSTRAINT_TYPE_CLAMPTO: case CONSTRAINT_TYPE_FOLLOWPATH: only_curve= 1; only_ob= 1; + add= 0; break; /* mesh only? */ case CONSTRAINT_TYPE_SHRINKWRAP: only_mesh= 1; only_ob= 1; + add= 0; break; - /* object only */ + /* object only - add here is ok? */ case CONSTRAINT_TYPE_RIGIDBODYJOINT: only_ob= 1; break; @@ -855,12 +859,14 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* search in list of selected Pose-Channels for target */ CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) { - /* just use the first one that we encounter... */ - *tar_ob= obact; - *tar_pchan= pchan; - found= 1; - - break; + /* just use the first one that we encounter, as long as it is not the active one */ + if (pchan != pchanact) { + *tar_ob= obact; + *tar_pchan= pchan; + found= 1; + + break; + } } CTX_DATA_END; } @@ -896,11 +902,13 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if still not found, add a new empty to act as a target (if allowed) */ if ((found == 0) && (add)) { -#if 0 // XXX old code to be fixed - Base *base= BASACT, *newbase; + Scene *scene= CTX_data_scene(C); + Base *base= BASACT, *newbase=NULL; Object *obt; + /* add new target object */ obt= add_object(scene, OB_EMPTY); + /* set layers OK */ newbase= BASACT; newbase->lay= base->lay; @@ -908,20 +916,24 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* transform cent to global coords for loc */ if (pchanact) { - if (only_IK) - VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_tail); + /* since by default, IK targets the tip of the last bone, use the tip of the active PoseChannel + * if adding a target for an IK Constraint + */ + if (con_type == CONSTRAINT_TYPE_KINEMATIC) + VecMat4MulVecfl(obt->loc, obact->obmat, pchanact->pose_tail); else - VecMat4MulVecfl(obt->loc, ob->obmat, pchanact->pose_head); + VecMat4MulVecfl(obt->loc, obact->obmat, pchanact->pose_head); } else - VECCOPY(obt->loc, ob->obmat[3]); - - //set_constraint_nth_target(con, obt, "", 0); + VECCOPY(obt->loc, obact->obmat[3]); /* restore, add_object sets active */ BASACT= base; base->flag |= SELECT; -#endif // XXX old code to be ported + + /* make our new target the new object */ + *tar_ob= obt; + found= 1; } /* return whether there's any target */ @@ -1191,3 +1203,137 @@ void POSE_OT_constraint_add_with_targets(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); } +/************************ IK Constraint operators *********************/ +/* NOTE: only for Pose-Channels */ +// TODO: should these be here, or back in editors/armature/poseobject.c again? + +/* present menu with options + validation for targets to use */ +static int pose_ik_add_invoke(bContext *C, wmOperator *op, wmEvent *evt) +{ + Object *ob= CTX_data_active_object(C); + bPoseChannel *pchan= get_active_posechannel(ob); + bConstraint *con= NULL; + + uiPopupMenu *pup; + uiLayout *layout; + Object *tar_ob= NULL; + bPoseChannel *tar_pchan= NULL; + + /* must have active bone */ + if (ELEM(NULL, ob, pchan)) { + BKE_report(op->reports, RPT_ERROR, "Must have active bone to add IK Constraint to."); + return OPERATOR_CANCELLED; + } + + /* bone must not have any constraints already */ + for (con= pchan->constraints.first; con; con= con->next) { + if (con->type==CONSTRAINT_TYPE_KINEMATIC) break; + } + if (con) { + BKE_report(op->reports, RPT_ERROR, "Bone already has IK Constraint."); + return OPERATOR_CANCELLED; + } + + /* prepare popup menu to choose targetting options */ + pup= uiPupMenuBegin(C, "Add IK", 0); + layout= uiPupMenuLayout(pup); + + /* the type of targets we'll set determines the menu entries to show... */ + if (get_new_constraint_target(C, CONSTRAINT_TYPE_KINEMATIC, &tar_ob, &tar_pchan, 0)) { + /* bone target, or object target? + * - the only thing that matters is that we want a target... + */ + if (tar_pchan) + uiItemBooleanO(layout, "To Active Bone", 0, "POSE_OT_ik_add", "with_targets", 1); + else + uiItemBooleanO(layout, "To Active Object", 0, "POSE_OT_ik_add", "with_targets", 1); + } + else { + /* we have a choice of adding to a new empty, or not setting any target (targetless IK) */ + uiItemBooleanO(layout, "To New Empty Object", 0, "POSE_OT_ik_add", "with_targets", 1); + uiItemBooleanO(layout, "Without Targets", 0, "POSE_OT_ik_add", "with_targets", 0); + } + + /* finish building the menu, and process it (should result in calling self again) */ + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +/* call constraint_add_exec() to add the IK constraint */ +static int pose_ik_add_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + int with_targets= RNA_boolean_get(op->ptr, "with_targets"); + + /* add the constraint - all necessary checks should have been done by the invoke() callback already... */ + return constraint_add_exec(C, op, ob, get_active_constraints(ob), CONSTRAINT_TYPE_KINEMATIC, with_targets); +} + +void POSE_OT_ik_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add IK to Bone"; + ot->description= "Add IK Constraint to the active Bone."; + ot->idname= "POSE_OT_ik_add"; + + /* api callbacks */ + ot->invoke= pose_ik_add_invoke; + ot->exec= pose_ik_add_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "with_targets", 1, "With Targets", "Assign IK Constraint with targets derived from the select bones/objects"); +} + +/* ------------------ */ + +/* remove IK constraints from selected bones */ +static int pose_ik_clear_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + + /* only remove IK Constraints */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + bConstraint *con, *next; + + // TODO: should we be checking if these contraints were local before we try and remove them? + for (con= pchan->constraints.first; con; con= next) { + next= con->next; + if (con->type==CONSTRAINT_TYPE_KINEMATIC) { + free_constraint_data(con); + BLI_freelinkN(&pchan->constraints, con); + } + } + pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET); + } + CTX_DATA_END; + + /* */ + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + + /* note, notifier might evolve */ + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_ik_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove IK"; + ot->description= "Remove all IK Constraints from selected bones."; + ot->idname= "POSE_OT_ik_clear"; + + /* api callbacks */ + ot->exec= pose_ik_clear_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 9f6e2d68556..fba49caba28 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -111,6 +111,9 @@ void POSE_OT_constraint_add_with_targets(struct wmOperatorType *ot); void OBJECT_OT_constraints_clear(struct wmOperatorType *ot); void POSE_OT_constraints_clear(struct wmOperatorType *ot); +void POSE_OT_ik_add(struct wmOperatorType *ot); +void POSE_OT_ik_clear(struct wmOperatorType *ot); + void CONSTRAINT_OT_delete(struct wmOperatorType *ot); void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 0a45bf92003..9971030bb66 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -119,6 +119,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(POSE_OT_constraint_add_with_targets); WM_operatortype_append(OBJECT_OT_constraints_clear); WM_operatortype_append(POSE_OT_constraints_clear); + WM_operatortype_append(POSE_OT_ik_add); + WM_operatortype_append(POSE_OT_ik_clear); WM_operatortype_append(CONSTRAINT_OT_delete); WM_operatortype_append(CONSTRAINT_OT_move_up); WM_operatortype_append(CONSTRAINT_OT_move_down); From ca466dc8d825e06255e4b76507dbb5e052ede693 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 05:08:59 +0000 Subject: [PATCH 301/512] 2.5 - Porting 'Pose' Menu (and its submenus) to Layout Engine It's alarming how many tools are still missing here! --- .../blender/editors/armature/armature_ops.c | 2 +- .../editors/space_view3d/view3d_header.c | 317 +++++------------- 2 files changed, 84 insertions(+), 235 deletions(-) diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index dcd22e3138c..ed98f70818e 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -225,7 +225,7 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, 0, 0); kmi= WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0); - RNA_boolean_set(kmi->ptr, "unselected", 1); + RNA_boolean_set(kmi->ptr, "unselected", 1); WM_keymap_add_item(keymap, "POSE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0); /*clear pose*/ WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5e6f5d9a96b..1047e8ee7e5 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -2091,12 +2091,11 @@ static void view3d_edit_objectmenu(bContext *C, uiLayout *layout, void *arg_unus uiItemS(layout); -#if 0 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); + // TODO: these operators may get renamed + uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu"); + uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_old"); uiItemS(layout); -#endif uiItemO(layout, NULL, 0, "OBJECT_OT_duplicate"); uiItemBooleanO(layout, "Duplicate Linked", 0, "OBJECT_OT_duplicate", "linked", 1); @@ -2118,14 +2117,17 @@ static void view3d_edit_objectmenu(bContext *C, uiLayout *layout, void *arg_unus uiItemMenuF(layout, "Constraints", 0, view3d_edit_object_constraintsmenu); #if 0 - uiItemS(layout); - if(ob && ob->type == OB_MESH) { uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); } - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); + + // join... (added already) + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); #endif + uiItemS(layout); + + uiItemO(layout, NULL, 0, "OBJECT_OT_join"); uiItemS(layout); @@ -3002,155 +3004,45 @@ static uiBlock *view3d_edit_armaturemenu(bContext *C, ARegion *ar, void *arg_unu return block; } -static void do_view3d_pose_armature_transformmenu(bContext *C, void *arg, int event) + +static void view3d_pose_armature_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) { + //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear User Transform|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); + //used: clear_user_transform(scene, ob); + //uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiItemO(layout, NULL, 0, "POSE_OT_loc_clear"); + uiItemO(layout, NULL, 0, "POSE_OT_rot_clear"); + uiItemO(layout, NULL, 0, "POSE_OT_scale_clear"); + + // ??? + //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); + //used:clear_object('o'); +} + +static void view3d_pose_armature_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, "Show Hidden", 0, "POSE_OT_reveal"); + + uiItemO(layout, "Hide Selected", 0, "POSE_OT_hide"); + uiItemBooleanO(layout, "Hide Unselected", 0, "POSE_OT_hide", "unselected", 1); +} + +static void view3d_pose_armature_ikmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "POSE_OT_ik_add"); + uiItemO(layout, NULL, 0, "POSE_OT_ik_clear"); +} + +static void view3d_pose_armature_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, NULL, 0, "POSE_OT_constraint_add_with_targets"); + uiItemO(layout, NULL, 0, "POSE_OT_constraints_clear"); +} + #if 0 - Scene *scene= CTX_data_scene(C); - Object *ob= CTX_data_active_object(C); - - switch(event) { - case 0: /* clear origin */ - clear_object('o'); - break; - case 1: /* clear scale */ - clear_object('s'); - break; - case 2: /* clear rotation */ - clear_object('r'); - break; - case 3: /* clear location */ - clear_object('g'); - break; - case 4: /* clear user transform */ - clear_user_transform(scene, ob); - break; - } -#endif -} - -static uiBlock *view3d_pose_armature_transformmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_transformmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_transformmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear User Transform|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_pose_armature_showhidemenu(bContext *C, void *arg, int event) -{ -#if 0 - - switch(event) { - - case 0: /* show hidden bones */ - show_all_pose_bones(); - break; - case 1: /* hide selected bones */ - hide_selected_pose_bones(); - break; - case 2: /* hide deselected bones */ - hide_unselected_pose_bones(); - break; - } -#endif -} - -static uiBlock *view3d_pose_armature_showhidemenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_showhidemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_showhidemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_pose_armature_ikmenu(bContext *C, void *arg, int event) -{ -#if 0 - - switch(event) { - - case 1: - pose_add_IK(); - break; - case 2: - pose_clear_IK(); - break; - } -#endif -} - -static uiBlock *view3d_pose_armature_ikmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_ikmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_ikmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Shift I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear IK...|Ctrl Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_pose_armature_constraintsmenu(bContext *C, void *arg, int event) -{ -#if 0 - - switch(event) { - - case 1: - add_constraint(0); - break; - case 2: - pose_clear_constraints(); - break; - } -#endif -} - -static uiBlock *view3d_pose_armature_constraintsmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_constraintsmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_constraintsmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint to Bone...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - static void do_view3d_pose_armature_groupmenu(bContext *C, void *arg, int event) { -#if 0 switch (event) { case 1: pose_assign_to_posegroup(1); @@ -3168,7 +3060,6 @@ static void do_view3d_pose_armature_groupmenu(bContext *C, void *arg, int event) pose_remove_posegroup(); break; } -#endif } static uiBlock *view3d_pose_armature_groupmenu(bContext *C, ARegion *ar, void *arg_unused) @@ -3192,8 +3083,6 @@ static uiBlock *view3d_pose_armature_groupmenu(bContext *C, ARegion *ar, void *a static void do_view3d_pose_armature_motionpathsmenu(bContext *C, void *arg, int event) { -#if 0 - switch(event) { case 1: @@ -3203,9 +3092,9 @@ static void do_view3d_pose_armature_motionpathsmenu(bContext *C, void *arg, int pose_clear_paths(OBACT); break; } -#endif } + static uiBlock *view3d_pose_armature_motionpathsmenu(bContext *C, ARegion *ar, void *arg_unused) { uiBlock *block; @@ -3221,54 +3110,22 @@ static uiBlock *view3d_pose_armature_motionpathsmenu(bContext *C, ARegion *ar, v uiTextBoundsBlock(block, 60); return block; } - -static void do_view3d_pose_armature_poselibmenu(bContext *C, void *arg, int event) -{ -#if 0 - Object *ob= OBACT; - - switch(event) { - case 1: - poselib_preview_poses(ob, 0); - break; - case 2: - poselib_add_current_pose(ob, 0); - break; - case 3: - poselib_rename_pose(ob); - break; - case 4: - poselib_remove_pose(ob, NULL); - break; - } - #endif -} -static uiBlock *view3d_pose_armature_poselibmenu(bContext *C, ARegion *ar, void *arg_unused) +static void view3d_pose_armature_poselibmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_poselibmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_poselibmenu, NULL); + uiItemO(layout, NULL, 0, "POSELIB_OT_browse_interactive"); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Browse Poses|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + uiItemS(layout); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add/Replace Pose|Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename Pose|Ctrl Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Pose|Alt L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; + uiItemO(layout, NULL, 0, "POSELIB_OT_pose_add"); + uiItemO(layout, NULL, 0, "POSELIB_OT_pose_rename"); + uiItemO(layout, NULL, 0, "POSELIB_OT_pose_remove"); } +#if 0 static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event) { -#if 0 Object *ob; ob=OBACT; @@ -3322,33 +3179,30 @@ static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event) common_deletekey(); break; } - -#endif } +#endif -static uiBlock *view3d_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unused) +static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "view3d_pose_armaturemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armaturemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); +#if 0 // XXX to be ported, using uiItemMenuF(layout, "", 0, view3d_pose_armature_menu); uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear Transform", 0, yco-=20, 120, 19, ""); + // ... clear transfrom sub-menu was here.... uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); +#endif + uiItemMenuF(layout, "Clear Transform", 0, view3d_pose_armature_transformmenu); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemS(layout); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + // TODO: these operators may get renamed + uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu"); + uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_old"); + uiItemS(layout); + +#if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Relax Pose|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Pose as Restpose|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); - + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Current Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); @@ -3356,16 +3210,22 @@ static uiBlock *view3d_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unu uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Flipped Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); +#endif + + uiItemMenuF(layout, "Pose Library", 0, view3d_pose_armature_poselibmenu); + //uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu); + //uiItemMenuF(layout, "Bone Groups", 0, view3d_pose_armature_groupmenu); - uiDefIconTextBlockBut(block, view3d_pose_armature_poselibmenu, NULL, ICON_RIGHTARROW_THIN, "Pose Library", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_motionpathsmenu, NULL, ICON_RIGHTARROW_THIN, "Motion Paths", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Groups", 0, yco-=20, 120, 19, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_ikmenu, NULL, ICON_RIGHTARROW_THIN, "Inverse Kinematics", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, ""); + uiItemS(layout); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiItemMenuF(layout, "Inverse Kinematics", 0, view3d_pose_armature_ikmenu); + uiItemMenuF(layout, "Constraints", 0, view3d_pose_armature_constraintsmenu); + uiItemS(layout); + + uiItemMenuF(layout, "Show/Hide Bones", 0, view3d_pose_armature_showhidemenu); + +#if 0 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Left-Right|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Front-Back|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Top-Bottom|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); @@ -3380,24 +3240,13 @@ static uiBlock *view3d_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unu uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_showhidemenu, - NULL, ICON_RIGHTARROW_THIN, "Show/Hide Bones", 0, yco-=20, 120, 19, ""); + // ... show/hide bones was here uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); - - if(ar->alignment==RGN_ALIGN_TOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - - return block; +#endif } + /* vertex paint menu */ static void do_view3d_vpaintmenu(bContext *C, void *arg, int event) { @@ -4384,7 +4233,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o else { if (ob && (ob->flag & OB_POSEMODE)) { xmax= GetButStringLength("Pose"); - uiDefPulldownBut(block, view3d_pose_armaturemenu, NULL, "Pose", xco,yco, xmax-3, 20, ""); + uiDefMenuBut(block, view3d_pose_armaturemenu, NULL, "Pose", xco,yco, xmax-3, 20, ""); xco+= xmax; } else { From 0ebf23c0b8de670ea856757f6950c515efd87a71 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 21 Jul 2009 09:26:28 +0000 Subject: [PATCH 302/512] BLI_setenv, use instead of copying ifdefs about for setting env vars. set PYTHONHOME as well as PYTHONPATH, quiets some warnings. --- source/blender/blenlib/BLI_util.h | 1 + source/blender/blenlib/intern/util.c | 18 +++++++++++++++ source/blender/python/intern/bpy_interface.c | 24 ++------------------ source/creator/creator.c | 22 ++++-------------- 4 files changed, 25 insertions(+), 40 deletions(-) diff --git a/source/blender/blenlib/BLI_util.h b/source/blender/blenlib/BLI_util.h index d323f701ba5..f9a84e071e7 100644 --- a/source/blender/blenlib/BLI_util.h +++ b/source/blender/blenlib/BLI_util.h @@ -43,6 +43,7 @@ struct direntry; char *BLI_gethome(void); char *BLI_gethome_folder(char *folder_name); +void BLI_setenv(const char *env, const char *val); void BLI_make_file_string(const char *relabase, char *string, const char *dir, const char *file); void BLI_make_exist(char *dir); diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c index 8eeca6900a1..3c441a81d6b 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/util.c @@ -951,6 +951,24 @@ char *BLI_gethome_folder(char *folder_name) return NULL; } +void BLI_setenv(const char *env, const char*val) +{ + /* SGI or free windows */ +#if (defined(__sgi) || ((defined(WIN32) || defined(WIN64)) && defined(FREE_WINDOWS))) + char *envstr= malloc(sizeof(char) * (strlen(env) + strlen(val) + 2)); /* one for = another for \0 */ + + sprintf(envstr, "%s=%s", env, val); + putenv(envstr); + free(envstr); + + /* non-free windows */ +#elif (defined(WIN32) || defined(WIN64)) /* not free windows */ + _putenv_s(env, val); +#else + /* linux/osx/bsd */ + setenv(env, val, 1); +#endif +} void BLI_clean(char *path) { diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 76852d99b56..1a2bb57a423 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -160,28 +160,8 @@ void BPY_start_python_path(void) /* set the environment path */ printf("found bundled python: %s\n", py_path_bundle); -#if (defined(WIN32) || defined(WIN64)) -#if defined(FREE_WINDOWS) - { - char py_path[FILE_MAXDIR + 11] = ""; - sprintf(py_path, "PYTHONPATH=%s", py_path_bundle); - putenv(py_path); - } -#else - _putenv_s("PYTHONPATH", py_path_bundle); -#endif -#else -#ifdef __sgi - { - char py_path[FILE_MAXDIR + 11] = ""; - sprintf(py_path, "PYTHONPATH=%s", py_path_bundle); - putenv(py_path); - } -#else - setenv("PYTHONPATH", py_path_bundle, 1); -#endif -#endif - + BLI_setenv("PYTHONHOME", py_path_bundle); + BLI_setenv("PYTHONPATH", py_path_bundle); } diff --git a/source/creator/creator.c b/source/creator/creator.c index 45288bfb9b5..8e0152b5e63 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -501,25 +501,11 @@ int main(int argc, char **argv) BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */ #ifndef DISABLE_SDL -#if (defined(WIN32) || defined(WIN64)) -#if defined(FREE_WINDOWS) - putenv("SDL_VIDEODRIVER=dummy"); -#else - _putenv_s("SDL_VIDEODRIVER", "dummy"); -#endif -#else -#ifdef __sgi - putenv("SDL_VIDEODRIVER=dummy"); -#else - setenv("SDL_VIDEODRIVER", "dummy", 1); /* initializing the video driver can cause crashes on some systems - Campbell */ -#endif -#endif + BLI_setenv("SDL_VIDEODRIVER", "dummy"); #ifdef __linux__ - /* On linux the default SDL driver dma often would not play - * use alsa if none is set */ - if ( getenv("SDL_AUDIODRIVER") == NULL) { - setenv("SDL_AUDIODRIVER", "alsa", 1); - } + /* On linux the default SDL driver dma often would not play + * use alsa if none is set */ + setenv("SDL_AUDIODRIVER", "alsa", 0); #endif #endif } From 5cd5e851434fa9de941a830874b0e47468e09afa Mon Sep 17 00:00:00 2001 From: William Reynish Date: Tue, 21 Jul 2009 09:35:39 +0000 Subject: [PATCH 303/512] Cleaned up logic buttons in logic space slightly. Moved Shade Smooth/Flat from Mesh obdata panel to tools area. These kinds of operator tools aren't really allowed in the buttons window anymore - whole point of new tools area :) The only operators that are allowed in buttons window are things that act on the RNA fields, like add/remove buttons for adding vertex groups etc. --- release/ui/buttons_data_mesh.py | 8 --- release/ui/space_logic.py | 89 ++++++++++++++---------------- release/ui/space_view3d_toolbar.py | 2 + 3 files changed, 44 insertions(+), 55 deletions(-) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 757745d039e..d4bf9698a89 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -49,14 +49,6 @@ class DATA_PT_normals(DataButtonsPanel): sub.itemR(mesh, "vertex_normal_flip") sub.itemR(mesh, "double_sided") - row = layout.row(align=True) - if context.edit_object: - row.itemO("MESH_OT_faces_shade_smooth") - row.itemO("MESH_OT_faces_shade_flat") - else: - row.itemO("OBJECT_OT_shade_smooth") - row.itemO("OBJECT_OT_shade_flat") - class DATA_PT_vertex_groups(DataButtonsPanel): __idname__ = "DATA_PT_vertex_groups" __label__ = "Vertex Groups" diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py index 83d48896c3b..b19351bf779 100644 --- a/release/ui/space_logic.py +++ b/release/ui/space_logic.py @@ -46,7 +46,7 @@ class WORLD_PT_game(WorldButtonsPanel): class LOGIC_PT_player(bpy.types.Panel): __space_type__ = "LOGIC_EDITOR" __region_type__ = "UI" - __label__ = "Game Player" + __label__ = "Player" def draw(self, context): layout = self.layout @@ -55,18 +55,22 @@ class LOGIC_PT_player(bpy.types.Panel): row.itemR(gs, "fullscreen") split = layout.split() - col = split.column(align=True) - col.itemR(gs, "resolution_x", slider=False, text="Res. X") - col.itemR(gs, "resolution_y", slider=False, text="Res. Y") + col = split.column() + col.itemL(text="Resolution:") + colsub = col.column(align=True) + colsub.itemR(gs, "resolution_x", slider=False, text="X") + colsub.itemR(gs, "resolution_y", slider=False, text="Y") - col = split.column(align=True) - col.itemR(gs, "depth", slider=False) - col.itemR(gs, "frequency", slider=False) + col = split.column() + col.itemL(text="Quality:") + colsub = col.column(align=True) + colsub.itemR(gs, "depth", text="Bit Depth", slider=False) + colsub.itemR(gs, "frequency", text="FPS", slider=False) # framing: col = layout.column() - col.itemL(text="Framing Options:") + col.itemL(text="Framing:") col.row().itemR(gs, "framing_type", expand=True) colsub = col.column() @@ -75,7 +79,7 @@ class LOGIC_PT_player(bpy.types.Panel): class LOGIC_PT_stereo(bpy.types.Panel): __space_type__ = "LOGIC_EDITOR" __region_type__ = "UI" - __label__ = "Stereo and Dome" + __label__ = "Stereo" def draw(self, context): layout = self.layout @@ -84,7 +88,6 @@ class LOGIC_PT_stereo(bpy.types.Panel): # stereo options: col= layout.column() - col.itemL(text="Stereo Options:") row = col.row() row.itemR(gs, "stereo", expand=True) @@ -93,34 +96,22 @@ class LOGIC_PT_stereo(bpy.types.Panel): # stereo: if stereo_mode == 'STEREO': - col = layout.column(align=True) - row = col.row() - row.item_enumR(gs, "stereo_mode", "ANAGLYPH") - row.item_enumR(gs, "stereo_mode", "QUADBUFFERED") - - row = col.row() - row.item_enumR(gs, "stereo_mode", "INTERLACED") - row.item_enumR(gs, "stereo_mode", "VINTERLACE") - - row = col.row() - row.item_enumR(gs, "stereo_mode", "SIDEBYSIDE") - row.item_enumR(gs, "stereo_mode", "ABOVEBELOW") -# row = layout.column_flow() -# row.itemR(gs, "stereo_mode") + row = layout.row() + row.itemR(gs, "stereo_mode") # dome: if stereo_mode == 'DOME': row = layout.row() - row.itemR(gs, "dome_mode") + row.itemR(gs, "dome_mode", text="Dome Type") split=layout.split() - col=split.column(align=True) + col=split.column() col.itemR(gs, "dome_angle", slider=True) - col.itemR(gs, "dome_tesselation", text="Tessel.") - col=split.column(align=True) + col.itemR(gs, "dome_tesselation", text="Tesselation") + col=split.column() col.itemR(gs, "dome_tilt") - col.itemR(gs, "dome_buffer_resolution", text="Res.", slider=True) + col.itemR(gs, "dome_buffer_resolution", text="Resolution", slider=True) col=layout.column() col.itemR(gs, "dome_text") @@ -136,30 +127,34 @@ class LOGIC_PT_physics(bpy.types.Panel): flow = layout.column_flow() flow.itemR(gs, "physics_engine") if gs.physics_engine != "NONE": - flow.itemR(gs, "physics_gravity") + flow.itemR(gs, "physics_gravity", text="Gravity") - row = layout.row() - row.itemR(gs, "use_occlusion_culling", text="Enable Occlusion Culling") - - row = layout.row() - row.active = gs.use_occlusion_culling - row.itemR(gs, "occlusion_culling_resolution", text="resol.") - split = layout.split() - col = split.column(align=True) - col.itemR(gs, "physics_step_max", text="phys") - col.itemR(gs, "physics_step_sub", text="sub") + col = split.column() + col.itemL(text="Physics Steps:") + colsub = col.column(align=True) + colsub.itemR(gs, "physics_step_max", text="Max") + colsub.itemR(gs, "physics_step_sub", text="Substeps") + col.itemR(gs, "fps", text="FPS") + + col = split.column() + col.itemL(text="Logic Steps:") + col.itemR(gs, "logic_step_max", text="Max") + col.itemS() + col.itemR(gs, "use_occlusion_culling", text="Occlusion Culling") + colsub = col.column() + colsub.active = gs.use_occlusion_culling + colsub.itemR(gs, "occlusion_culling_resolution", text="Resolution") - col = split.column(align=True) - col.itemR(gs, "fps", text="fps") - col.itemR(gs, "logic_step_max", text="log") else: split = layout.split() - col = split.column(align=True) - col.itemR(gs, "fps", text="fps") - col = split.column(align=True) - col.itemR(gs, "logic_step_max", text="log") + col = split.column() + col.itemL(text="Physics Steps:") + col.itemR(gs, "fps", text="FPS") + col = split.column() + col.itemL(text="Logic Steps:") + col.itemR(gs, "logic_step_max", text="Max") bpy.types.register(LOGIC_PT_properties) bpy.types.register(LOGIC_PT_player) diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py index abffb7037c9..cab22af44e3 100644 --- a/release/ui/space_view3d_toolbar.py +++ b/release/ui/space_view3d_toolbar.py @@ -44,6 +44,8 @@ class VIEW3D_PT_tools_editmode_mesh(View3DPanel): layout.row().itemO("mesh.primitive_cube_add") layout.row().itemO("mesh.primitive_circle_add") layout.row().itemO("mesh.primitive_cylinder_add") + layout.row().itemO("mesh.faces_shade_smooth") + layout.row().itemO("mesh.faces_shade_flat") # ********** default tools for editmode_curve **************** From 8c9ade81e8a916521fbfb110aade7627131f3610 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 21 Jul 2009 10:13:20 +0000 Subject: [PATCH 304/512] Make linux/scons default to python 3.1 rather then the version scons runs with. for a while py2.x will work but eventually be dropped when most OS's support it, so Id recommend upgrading. The following instructions are only needed if you don't use python3.1 installed in the default location. For releases users wont have to worry about this. # in python3.1 source dir, build and install into your own dir, /opt/py31 is just an example. ./configure --prefix="/opt/py31"; make; make install # In the scons user-config.py... BF_PYTHON = "/opt/py31" # ... now build ... # # Blender now needs 2 things to run. ./lib/libpython3.1.so and the python modules. # Symlink (or copy) python modules, blender sets this path for modules on startup if it is found. ln -s /opt/py31/lib/python3.1 ~/.blender/python # Currently static linking is not working without hacks because of limitations in scons. # for releases we can workaround, but for now its easier to set an environment variable. # To start blender so it can find libpython3.1.so make this into a shell script to save yourself typing it in all the time. export LD_LIBRARY_PATH="/opt/py31/lib/" ./blender --- config/linux2-config.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/config/linux2-config.py b/config/linux2-config.py index 86de10c8fb3..b6a1eeb2c44 100644 --- a/config/linux2-config.py +++ b/config/linux2-config.py @@ -1,17 +1,9 @@ LCGDIR = '../lib/linux2' LIBDIR = "${LCGDIR}" -def py_version_string(): - ''' - returns py version - "2.5", "2.6" etc - ''' - import platform - ver = platform.python_version_tuple() - return '%d.%d' % (int(ver[0]), int(ver[1])) # py2.5 uses strings, 2.6 ints - BF_PYTHON = '/usr' BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib' -BF_PYTHON_VERSION = py_version_string() +BF_PYTHON_VERSION = '3.1' WITH_BF_STATICPYTHON = False BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}' BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}' From 6d074526f24320eb23be6ad14fd372a2f9c70b89 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 10:18:08 +0000 Subject: [PATCH 305/512] 2.5 - Restoring Bone Groups * Added Bone Groups UI to 'Armature' context buttons for now. Later, it may be more convenient to have these with bones instead? * Added operators for the operations that can be performed on these groups. Moved the core adding/removing functions to blenkernel so that they can be used elsewhere in future if need be. * Properly wrapped bone groups in RNA. Copied the way that Vertex Groups are wrapped, since they share some similarities. Setting colours for bone groups still needs more work though. --- release/ui/buttons_data_armature.py | 33 ++ source/blender/blenkernel/BKE_action.h | 37 +- source/blender/blenkernel/intern/action.c | 58 ++- .../editors/armature/armature_intern.h | 21 + .../blender/editors/armature/armature_ops.c | 8 + .../blender/editors/armature/editarmature.c | 6 +- source/blender/editors/armature/poseobject.c | 383 ++++++++++++------ .../editors/space_view3d/view3d_header.c | 53 +-- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_pose.c | 137 ++++++- 10 files changed, 539 insertions(+), 198 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index 94fda908e56..8eb7ba59c70 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -79,6 +79,38 @@ class DATA_PT_display(DataButtonsPanel): sub.itemR(arm, "draw_group_colors", text="Colors") sub.itemR(arm, "delay_deform", text="Delay Refresh") +class DATA_PT_bone_groups(DataButtonsPanel): + __idname__ = "DATA_PT_bone_groups" + __label__ = "Bone Groups" + + def poll(self, context): + return (context.object and context.object.type=='ARMATURE' and context.object.pose) + + def draw(self, context): + layout = self.layout + ob = context.object + pose= ob.pose + + row = layout.row() + + row.template_list(pose, "bone_groups", pose, "active_bone_group_index") + + col = row.column(align=True) + col.itemO("pose.group_add", icon="ICON_ZOOMIN", text="") + col.itemO("pose.group_remove", icon="ICON_ZOOMOUT", text="") + + group = pose.active_bone_group + if group: + row = layout.row() + row.itemR(group, "name") + + row = layout.row(align=True) + + row.itemO("pose.group_assign", text="Assign") + row.itemO("pose.group_remove", text="Remove") #row.itemO("pose.bone_group_remove_from", text="Remove") + #row.itemO("object.bone_group_select", text="Select") + #row.itemO("object.bone_group_deselect", text="Deselect") + class DATA_PT_paths(DataButtonsPanel): __idname__ = "DATA_PT_paths" __label__ = "Paths" @@ -136,5 +168,6 @@ class DATA_PT_ghost(DataButtonsPanel): bpy.types.register(DATA_PT_context_arm) bpy.types.register(DATA_PT_skeleton) bpy.types.register(DATA_PT_display) +bpy.types.register(DATA_PT_bone_groups) bpy.types.register(DATA_PT_paths) bpy.types.register(DATA_PT_ghost) diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 0c9bba5e413..d35acb5447a 100644 --- a/source/blender/blenkernel/BKE_action.h +++ b/source/blender/blenkernel/BKE_action.h @@ -1,6 +1,6 @@ /* BKE_action.h May 2001 * - * Blender kernel action functionality + * Blender kernel action and pose functionality * * Reevan McKay * @@ -26,7 +26,7 @@ * All rights reserved. * * Contributor(s): Full recode, Ton Roosendaal, Crete 2005 - * Full recode, Joshua Leung, 2009 + * Full recode, Joshua Leung, 2009 * * ***** END GPL LICENSE BLOCK ***** */ @@ -103,8 +103,7 @@ void free_pose(struct bPose *pose); * Allocate a new pose on the heap, and copy the src pose and it's channels * into the new pose. *dst is set to the newly allocated structure, and assumed to be NULL. */ -void copy_pose(struct bPose **dst, struct bPose *src, - int copyconstraints); +void copy_pose(struct bPose **dst, struct bPose *src, int copyconstraints); @@ -112,9 +111,8 @@ void copy_pose(struct bPose **dst, struct bPose *src, * Return a pointer to the pose channel of the given name * from this pose. */ -struct bPoseChannel *get_pose_channel(const struct bPose *pose, - const char *name); - +struct bPoseChannel *get_pose_channel(const struct bPose *pose, const char *name); + /** * Return a pointer to the active pose channel from this Object. * (Note: Object, not bPose is used here, as we need layer info from Armature) @@ -126,8 +124,9 @@ struct bPoseChannel *get_active_posechannel(struct Object *ob); * already exists in this pose - if not a new one is * allocated and initialized. */ -struct bPoseChannel *verify_pose_channel(struct bPose* pose, - const char* name); +struct bPoseChannel *verify_pose_channel(struct bPose* pose, const char* name); + + /* sets constraint flags */ void update_pose_constraint_flags(struct bPose *pose); @@ -136,18 +135,30 @@ void update_pose_constraint_flags(struct bPose *pose); // XXX to be depreceated for a more general solution in animsys... void framechange_poses_clear_unkeyed(void); +/* Bone Groups API --------------------- */ + +/* Adds a new bone-group */ +void pose_add_group(struct Object *ob); + +/* Remove the active bone-group */ +void pose_remove_group(struct Object *ob); + +/* Assorted Evaluation ----------------- */ + /* Used for the Action Constraint */ void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe); -/* exported for game engine */ -void game_blend_poses(struct bPose *dst, struct bPose *src, float srcweight/*, short mode*/); /* was blend_poses */ -void extract_pose_from_pose(struct bPose *pose, const struct bPose *src); - /* for proxy */ void copy_pose_result(struct bPose *to, struct bPose *from); /* clear all transforms */ void rest_pose(struct bPose *pose); +/* Game Engine ------------------------- */ + +/* exported for game engine */ +void game_blend_poses(struct bPose *dst, struct bPose *src, float srcweight/*, short mode*/); /* was blend_poses */ +void extract_pose_from_pose(struct bPose *pose, const struct bPose *src); + /* functions used by the game engine */ void game_copy_pose(struct bPose **dst, struct bPose *src); void game_free_pose(struct bPose *pose); diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 96896509f60..f4d4eb1cc9c 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -21,6 +21,7 @@ * All rights reserved. * * Contributor(s): Full recode, Ton Roosendaal, Crete 2005 + * Full recode, Joshua Leung, 2009 * * ***** END GPL LICENSE BLOCK ***** */ @@ -31,7 +32,8 @@ #include #include -#include /* for NULL */ +#include +#include #include "MEM_guardedalloc.h" @@ -68,8 +70,6 @@ #include "RNA_access.h" #include "RNA_types.h" -//XXX #include "nla.h" - /* *********************** NOTE ON POSE AND ACTION ********************** - Pose is the local (object level) component of armature. The current @@ -765,7 +765,57 @@ void framechange_poses_clear_unkeyed(void) } } -/* ************************ END Pose channels *************** */ +/* ************************** Bone Groups ************************** */ + +/* Adds a new bone-group */ +void pose_add_group (Object *ob) +{ + bPose *pose= (ob) ? ob->pose : NULL; + bActionGroup *grp; + + if (ELEM(NULL, ob, ob->pose)) + return; + + grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup"); + strcpy(grp->name, "Group"); + BLI_addtail(&pose->agroups, grp); + BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), 32); + + pose->active_group= BLI_countlist(&pose->agroups); +} + +/* Remove the active bone-group */ +void pose_remove_group (Object *ob) +{ + bPose *pose= (ob) ? ob->pose : NULL; + bActionGroup *grp = NULL; + bPoseChannel *pchan; + + /* sanity checks */ + if (ELEM(NULL, ob, pose)) + return; + if (pose->active_group <= 0) + return; + + /* get group to remove */ + grp= BLI_findlink(&pose->agroups, pose->active_group-1); + if (grp) { + /* adjust group references (the trouble of using indices!): + * - firstly, make sure nothing references it + * - also, make sure that those after this item get corrected + */ + for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { + if (pchan->agrp_index == pose->active_group) + pchan->agrp_index= 0; + else if (pchan->agrp_index > pose->active_group) + pchan->agrp_index--; + } + + /* now, remove it from the pose */ + BLI_freelinkN(&pose->agroups, grp); + pose->active_group= 0; + } +} /* ************** time ****************** */ diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index d5ad63ca21b..9ea7b1174a5 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -33,28 +33,37 @@ struct wmOperatorType; /* editarmature.c operators */ void ARMATURE_OT_bone_primitive_add(struct wmOperatorType *ot); + void ARMATURE_OT_bones_align(struct wmOperatorType *ot); void ARMATURE_OT_calculate_roll(struct wmOperatorType *ot); void ARMATURE_OT_switch_direction(struct wmOperatorType *ot); + void ARMATURE_OT_subdivs(struct wmOperatorType *ot); void ARMATURE_OT_subdivide_simple(struct wmOperatorType *ot); void ARMATURE_OT_subdivide_multi(struct wmOperatorType *ot); + void ARMATURE_OT_parent_set(struct wmOperatorType *ot); void ARMATURE_OT_parent_clear(struct wmOperatorType *ot); + void ARMATURE_OT_select_all_toggle(struct wmOperatorType *ot); void ARMATURE_OT_select_inverse(struct wmOperatorType *ot); void ARMATURE_OT_select_hierarchy(struct wmOperatorType *ot); void ARMATURE_OT_select_linked(struct wmOperatorType *ot); + void ARMATURE_OT_delete(struct wmOperatorType *ot); void ARMATURE_OT_duplicate_selected(struct wmOperatorType *ot); void ARMATURE_OT_extrude(struct wmOperatorType *ot); void ARMATURE_OT_click_extrude(struct wmOperatorType *ot); +/* ******************************************************* */ +/* Pose-Mode Operators */ void POSE_OT_hide(struct wmOperatorType *ot); void POSE_OT_reveal(struct wmOperatorType *ot); + void POSE_OT_rot_clear(struct wmOperatorType *ot); void POSE_OT_loc_clear(struct wmOperatorType *ot); void POSE_OT_scale_clear(struct wmOperatorType *ot); + void POSE_OT_select_all_toggle(struct wmOperatorType *ot); void POSE_OT_select_inverse(struct wmOperatorType *ot); void POSE_OT_select_parent(struct wmOperatorType *ot); @@ -62,6 +71,16 @@ void POSE_OT_select_hierarchy(struct wmOperatorType *ot); void POSE_OT_select_linked(struct wmOperatorType *ot); void POSE_OT_select_constraint_target(struct wmOperatorType *ot); +void POSE_OT_groups_menu(struct wmOperatorType *ot); +void POSE_OT_group_add(struct wmOperatorType *ot); +void POSE_OT_group_remove(struct wmOperatorType *ot); +void POSE_OT_group_remove(struct wmOperatorType *ot); +void POSE_OT_group_assign(struct wmOperatorType *ot); +void POSE_OT_group_unassign(struct wmOperatorType *ot); + +/* ******************************************************* */ +/* Etch-A-Ton */ + void SKETCH_OT_gesture(struct wmOperatorType *ot); void SKETCH_OT_delete(struct wmOperatorType *ot); void SKETCH_OT_draw_stroke(struct wmOperatorType *ot); @@ -70,12 +89,14 @@ void SKETCH_OT_finish_stroke(struct wmOperatorType *ot); void SKETCH_OT_cancel_stroke(struct wmOperatorType *ot); void SKETCH_OT_select(struct wmOperatorType *ot); +/* ******************************************************* */ /* PoseLib */ void POSELIB_OT_pose_add(struct wmOperatorType *ot); void POSELIB_OT_pose_remove(struct wmOperatorType *ot); void POSELIB_OT_pose_rename(struct wmOperatorType *ot); void POSELIB_OT_browse_interactive(struct wmOperatorType *ot); +/* ******************************************************* */ /* editarmature.c */ struct bArmature; struct EditBone; diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index ed98f70818e..84bddbf0725 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -155,6 +155,12 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_select_linked); WM_operatortype_append(POSE_OT_select_constraint_target); + WM_operatortype_append(POSE_OT_groups_menu); + WM_operatortype_append(POSE_OT_group_add); + WM_operatortype_append(POSE_OT_group_remove); + WM_operatortype_append(POSE_OT_group_assign); + WM_operatortype_append(POSE_OT_group_unassign); + /* POSELIB */ WM_operatortype_append(POSELIB_OT_browse_interactive); @@ -256,6 +262,8 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_ik_add", IKEY, KM_PRESS, /*KM_CTRL|*/KM_SHIFT, 0); WM_keymap_add_item(keymap, "POSE_OT_ik_clear", IKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_add_item(keymap, "POSE_OT_groups_menu", GKEY, KM_PRESS, KM_CTRL, 0); + // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 49f13d99af9..68d8ffbc11d 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -1598,10 +1598,8 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *op) /* cancel if nothing selected */ if (CTX_DATA_COUNT(C, selected_bones) == 0) - return OPERATOR_CANCELLED; - - /* if (okee("Erase selected bone(s)")==0) return; */ - + return OPERATOR_CANCELLED; + /* Select mirrored bones */ if (arm->flag & ARM_MIRROR_EDIT) { for (curBone=arm->edbo->first; curBone; curBone=curBone->next) { diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 16a9efc9023..d753cf39f69 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -81,6 +81,8 @@ #include "ED_transform.h" /* for autokey TFM_TRANSLATION, etc */ #include "ED_view3d.h" +#include "UI_interface.h" + #include "armature_intern.h" /* ************* XXX *************** */ @@ -397,7 +399,7 @@ void pose_clear_paths(Object *ob) } - +// XXX this function is to be removed when the other stuff is recoded void pose_select_constraint_target(Scene *scene) { Object *obedit= scene->obedit; // XXX context @@ -932,171 +934,301 @@ void pose_adds_vgroups(Scene *scene, Object *meshobj, int heatweights) /* ********************************************** */ -/* adds a new pose-group */ -void pose_add_posegroup (Scene *scene) + +static int pose_group_add_exec (bContext *C, wmOperator *op) { - Object *ob= OBACT; - bPose *pose= (ob) ? ob->pose : NULL; - bActionGroup *grp; + ScrArea *sa= CTX_wm_area(C); + Object *ob; - if (ELEM(NULL, ob, ob->pose)) - return; + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object */ + if (ob == NULL) + return OPERATOR_CANCELLED; - grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup"); - strcpy(grp->name, "Group"); - BLI_addtail(&pose->agroups, grp); - BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), 32); + /* for now, just call the API function for this */ + pose_add_group(ob); - pose->active_group= BLI_countlist(&pose->agroups); - - BIF_undo_push("Add Bone Group"); + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + return OPERATOR_FINISHED; } -/* Remove the active bone-group */ -void pose_remove_posegroup (Scene *scene) +void POSE_OT_group_add (wmOperatorType *ot) { - Object *ob= OBACT; - bPose *pose= (ob) ? ob->pose : NULL; - bActionGroup *grp = NULL; - bPoseChannel *pchan; + /* identifiers */ + ot->name= "Add Bone Group"; + ot->idname= "POSE_OT_group_add"; + ot->description= "Add a new bone group."; - /* sanity checks */ - if (ELEM(NULL, ob, pose)) - return; - if (pose->active_group <= 0) - return; - - /* get group to remove */ - grp= BLI_findlink(&pose->agroups, pose->active_group-1); - if (grp) { - /* adjust group references (the trouble of using indices!): - * - firstly, make sure nothing references it - * - also, make sure that those after this item get corrected - */ - for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { - if (pchan->agrp_index == pose->active_group) - pchan->agrp_index= 0; - else if (pchan->agrp_index > pose->active_group) - pchan->agrp_index--; - } - - /* now, remove it from the pose */ - BLI_freelinkN(&pose->agroups, grp); - pose->active_group= 0; - - BIF_undo_push("Remove Bone Group"); - } + /* api callbacks */ + ot->exec= pose_group_add_exec; + ot->poll= ED_operator_posemode; + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } -char *build_posegroups_menustr (bPose *pose, short for_pupmenu) + +static int pose_group_remove_exec (bContext *C, wmOperator *op) { - DynStr *pupds= BLI_dynstr_new(); + ScrArea *sa= CTX_wm_area(C); + Object *ob; + + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object */ + if (ob == NULL) + return OPERATOR_CANCELLED; + + /* for now, just call the API function for this */ + pose_remove_group(ob); + + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + return OPERATOR_FINISHED; +} + +void POSE_OT_group_remove (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Remove Bone Group"; + ot->idname= "POSE_OT_group_remove"; + ot->description= "Removes the active bone group."; + + /* api callbacks */ + ot->exec= pose_group_remove_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ------------ */ + +/* invoke callback which presents a list of bone-groups for the user to choose from */ +static int pose_groups_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + ScrArea *sa= CTX_wm_area(C); + Object *ob; + bPose *pose; + + uiPopupMenu *pup; + uiLayout *layout; bActionGroup *grp; - char *str; - char buf[16]; int i; - /* add title first (and the "none" entry) */ - BLI_dynstr_append(pupds, "Bone Group%t|"); - if (for_pupmenu) - BLI_dynstr_append(pupds, "Add New%x0|"); + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; else - BLI_dynstr_append(pupds, "BG: [None]%x0|"); + ob= CTX_data_active_object(C); - /* loop through groups, adding them */ - for (grp= pose->agroups.first, i=1; grp; grp=grp->next, i++) { - if (for_pupmenu == 0) - BLI_dynstr_append(pupds, "BG: "); - BLI_dynstr_append(pupds, grp->name); + /* only continue if there's an object, and a pose there too */ + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + pose= ob->pose; + + /* if there's no active group (or active is invalid), create a new menu to find it */ + if (pose->active_group <= 0) { + /* create a new menu, and start populating it with group names */ + pup= uiPupMenuBegin(C, op->type->name, 0); + layout= uiPupMenuLayout(pup); - sprintf(buf, "%%x%d", i); - BLI_dynstr_append(pupds, buf); + /* special entry - allow to create new group, then use that + * (not to be used for removing though) + */ + if (strstr(op->idname, "assign")) { + uiItemIntO(layout, "New Group", 0, op->idname, "type", 0); + uiItemS(layout); + } - if (grp->next) - BLI_dynstr_append(pupds, "|"); + /* add entries for each group */ + for (grp= pose->agroups.first, i=1; grp; grp=grp->next, i++) + uiItemIntO(layout, grp->name, 0, op->idname, "type", i); + + /* finish building the menu, and process it (should result in calling self again) */ + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; + } + else { + /* just use the active group index, and call the exec callback for the calling operator */ + RNA_int_set(op->ptr, "type", pose->active_group); + return op->type->exec; } - - /* convert to normal MEM_malloc'd string */ - str= BLI_dynstr_get_cstring(pupds); - BLI_dynstr_free(pupds); - - return str; } /* Assign selected pchans to the bone group that the user selects */ -void pose_assign_to_posegroup (Scene *scene, short active) +static int pose_group_assign_exec (bContext *C, wmOperator *op) { - Object *ob= OBACT; - bArmature *arm= (ob) ? ob->data : NULL; - bPose *pose= (ob) ? ob->pose : NULL; - bPoseChannel *pchan; - char *menustr; - int nr; + ScrArea *sa= CTX_wm_area(C); + Object *ob; + bPose *pose; short done= 0; - /* sanity checks */ - if (ELEM3(NULL, ob, pose, arm)) - return; - - /* get group to affect */ - if ((active==0) || (pose->active_group <= 0)) { - menustr= build_posegroups_menustr(pose, 1); - nr= 0; // XXX pupmenu_col(menustr, 20); - MEM_freeN(menustr); - - if (nr < 0) - return; - else if (nr == 0) { - /* add new - note: this does an undo push and sets active group */ - pose_add_posegroup(scene); - } - else - pose->active_group= nr; - } + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object, and a pose there too */ + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + pose= ob->pose; + + /* set the active group number to the one from operator props */ + pose->active_group= RNA_int_get(op->ptr, "type"); /* add selected bones to group then */ - for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) { - pchan->agrp_index= pose->active_group; + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + pchan->agrp_index= pose->active_group; + done= 1; + } + CTX_DATA_END; + + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + /* report done status */ + if (done) + return OPERATOR_FINISHED; + else + return OPERATOR_CANCELLED; +} + +void POSE_OT_group_assign (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Selected to Bone Group"; + ot->idname= "POSE_OT_group_assign"; + ot->description= "Add selected bones to the chosen bone group."; + + /* api callbacks */ + ot->invoke= pose_groups_menu_invoke; + ot->exec= pose_group_assign_exec; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_int(ot->srna, "type", 0, 0, 10, "Bone Group Index", "", 0, INT_MAX); +} + + +static int pose_group_unassign_exec (bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + Object *ob; + bPose *pose; + short done= 0; + + /* since this call may also be used from the buttons window, we need to check for where to get the object */ + if (sa->spacetype == SPACE_BUTS) + ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + else + ob= CTX_data_active_object(C); + + /* only continue if there's an object, and a pose there too */ + if (ELEM(NULL, ob, ob->pose)) + return OPERATOR_CANCELLED; + pose= ob->pose; + + /* add selected bones to ungroup then */ + CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + { + if (pchan->agrp_index) { + pchan->agrp_index= 0; done= 1; } } + CTX_DATA_END; + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); + + /* report done status */ if (done) - BIF_undo_push("Add Bones To Group"); - + return OPERATOR_FINISHED; + else + return OPERATOR_CANCELLED; } -/* Remove selected pchans from their bone groups */ -void pose_remove_from_posegroups (Scene *scene) +void POSE_OT_group_unassign (wmOperatorType *ot) { - Object *ob= OBACT; - bArmature *arm= (ob) ? ob->data : NULL; - bPose *pose= (ob) ? ob->pose : NULL; - bPoseChannel *pchan; - short done= 0; + /* identifiers */ + ot->name= "Remove Selected from Bone Groups"; + ot->idname= "POSE_OT_group_unassign"; + ot->description= "Add selected bones from all bone groups"; - /* sanity checks */ - if (ELEM3(NULL, ob, pose, arm)) - return; + /* api callbacks */ + ot->exec= pose_group_unassign_exec; + ot->poll= ED_operator_posemode; - /* remove selected bones from their groups */ - for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) { - if (pchan->agrp_index) { - pchan->agrp_index= 0; - done= 1; - } - } - } - - if (done) - BIF_undo_push("Remove Bones From Groups"); - + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ----------------- */ + +static int pose_groupOps_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) +{ + Object *ob= CTX_data_active_object(C); + uiPopupMenu *pup= uiPupMenuBegin(C, op->type->name, 0); + uiLayout *layout= uiPupMenuLayout(pup); + + /* sanity check - must have object with pose */ + if ELEM(NULL, ob, ob->pose) + return OPERATOR_CANCELLED; + + /* get mode of action */ + if (CTX_DATA_COUNT(C, selected_pchans)) { + /* if selected bone(s), include options to add/remove to active group */ + uiItemO(layout, "Add Selected to Active Group", 0, "POSE_OT_group_assign"); + + uiItemS(layout); + + uiItemO(layout, "Remove Selected from All Groups", 0, "POSE_OT_group_unassign"); + uiItemO(layout, "Remove Active Group", 0, "POSE_OT_group_remove"); + } + else { + /* no selected bones - so just options for groups management */ + uiItemO(layout, "Add New Group", 0, "POSE_OT_group_add"); + uiItemO(layout, "Remove Active Group", 0, "POSE_OT_group_remove"); + } + + return OPERATOR_CANCELLED; +} + +void POSE_OT_groups_menu (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Bone Group Tools"; + ot->idname= "POSE_OT_groups_menu"; + ot->description= "Menu displaying available tools for Bone Groups."; + + /* api callbacks (only invoke needed) */ + ot->invoke= pose_groupOps_menu_invoke; + ot->poll= ED_operator_posemode; + + /* flags */ + ot->flag= OPTYPE_REGISTER; +} + +#if 0 /* Ctrl-G in 3D-View while in PoseMode */ void pgroup_operation_with_menu (Scene *scene) { @@ -1143,6 +1275,7 @@ void pgroup_operation_with_menu (Scene *scene) break; } } +#endif /* ********************************************** */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 1047e8ee7e5..edffa39cb8c 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -3040,47 +3040,18 @@ static void view3d_pose_armature_constraintsmenu(bContext *C, uiLayout *layout, uiItemO(layout, NULL, 0, "POSE_OT_constraints_clear"); } +static void view3d_pose_armature_groupmenu(bContext *C, uiLayout *layout, void *arg_unused) +{ + uiItemO(layout, "Add Selected to Active Group", 0, "POSE_OT_group_assign"); + //uiItemO(layout, "Add Selected to Group", 0, "POSE_OT_group_assign"); + + uiItemO(layout, "Add New Group", 0, "POSE_OT_group_add"); + + uiItemO(layout, "Remove from All Groups", 0, "POSE_OT_group_unassign"); + uiItemO(layout, "Remove Active Group", 0, "POSE_OT_group_remove"); +} + #if 0 -static void do_view3d_pose_armature_groupmenu(bContext *C, void *arg, int event) -{ - switch (event) { - case 1: - pose_assign_to_posegroup(1); - break; - case 2: - pose_assign_to_posegroup(0); - break; - case 3: - pose_add_posegroup(); - break; - case 4: - pose_remove_from_posegroups(); - break; - case 5: - pose_remove_posegroup(); - break; - } -} - -static uiBlock *view3d_pose_armature_groupmenu(bContext *C, ARegion *ar, void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiBeginBlock(C, ar, "view3d_pose_armature_groupmenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_view3d_pose_armature_groupmenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Selected to Active Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Selected to Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add New Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove from All Groups|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Active Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - static void do_view3d_pose_armature_motionpathsmenu(bContext *C, void *arg, int event) { switch(event) { @@ -3214,7 +3185,7 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiItemMenuF(layout, "Pose Library", 0, view3d_pose_armature_poselibmenu); //uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu); - //uiItemMenuF(layout, "Bone Groups", 0, view3d_pose_armature_groupmenu); + uiItemMenuF(layout, "Bone Groups", 0, view3d_pose_armature_groupmenu); uiItemS(layout); diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index f3c2e95451d..33bf1147748 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -63,6 +63,7 @@ extern StructRNA RNA_BezierCurvePoint; extern StructRNA RNA_BlendTexture; extern StructRNA RNA_BlenderRNA; extern StructRNA RNA_Bone; +extern StructRNA RNA_BoneGroup; extern StructRNA RNA_BooleanModifier; extern StructRNA RNA_BooleanProperty; extern StructRNA RNA_Brush; diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index c7ee7887aff..e15310a02bf 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -107,11 +107,106 @@ static int rna_PoseChannel_has_ik_get(PointerRNA *ptr) return ED_pose_channel_in_IK_chain(ob, pchan); } +static PointerRNA rna_Pose_active_bone_group_get(PointerRNA *ptr) +{ + bPose *pose= (bPose*)ptr->data; + return rna_pointer_inherit_refine(ptr, &RNA_BoneGroup, BLI_findlink(&pose->agroups, pose->active_group-1)); +} + +static int rna_Pose_active_bone_group_index_get(PointerRNA *ptr) +{ + bPose *pose= (bPose*)ptr->data; + return MAX2(pose->active_group-1, 0); +} + +static void rna_Pose_active_bone_group_index_set(PointerRNA *ptr, int value) +{ + bPose *pose= (bPose*)ptr->data; + pose->active_group= value+1; +} + +static void rna_Pose_active_bone_group_index_range(PointerRNA *ptr, int *min, int *max) +{ + bPose *pose= (bPose*)ptr->data; + + *min= 0; + *max= BLI_countlist(&pose->agroups)-1; + *max= MAX2(0, *max); +} + +void rna_pose_bgroup_name_index_get(PointerRNA *ptr, char *value, int index) +{ + bPose *pose= (bPose*)ptr->data; + bActionGroup *grp; + + grp= BLI_findlink(&pose->agroups, index-1); + + if(grp) BLI_strncpy(value, grp->name, sizeof(grp->name)); + else BLI_strncpy(value, "", sizeof(grp->name)); // XXX if invalid pointer, won't this crash? +} + +int rna_pose_bgroup_name_index_length(PointerRNA *ptr, int index) +{ + bPose *pose= (bPose*)ptr->data; + bActionGroup *grp; + + grp= BLI_findlink(&pose->agroups, index-1); + return (grp)? strlen(grp->name): 0; +} + +void rna_pose_bgroup_name_index_set(PointerRNA *ptr, const char *value, short *index) +{ + bPose *pose= (bPose*)ptr->data; + bActionGroup *grp; + int a; + + for (a=1, grp=pose->agroups.first; grp; grp=grp->next, a++) { + if (strcmp(grp->name, value) == 0) { + *index= a; + return; + } + } + + *index= 0; +} + +void rna_pose_pgroup_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen) +{ + bPose *pose= (bPose*)ptr->data; + bActionGroup *grp; + + for (grp= pose->agroups.first; grp; grp= grp->next) { + if (strcmp(grp->name, value) == 0) { + BLI_strncpy(result, value, maxlen); + return; + } + } + + BLI_strncpy(result, "", maxlen); +} + #else -/* users shouldn't be editing pose channel data directly -- better to set ipos and let blender calc pose_channel stuff */ -/* it's going to be weird for users to find IK flags and other such here, instead of in bone where they would expect them - -- is there any way to put a doc in bone, pointing them here? */ +static void rna_def_bone_group(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "BoneGroup", NULL); + RNA_def_struct_sdna(srna, "bActionGroup"); + RNA_def_struct_ui_text(srna, "Bone Group", "Groups of Pose Channels (Bones)."); + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", ""); + RNA_def_struct_name_property(srna, prop); + + // TODO: add some runtime-collections stuff to access grouped bones + + // FIXME: this needs more work - probably a custom template? + prop= RNA_def_property(srna, "custom_color", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "customCol"); + RNA_def_property_ui_text(prop, "Custom Color", "Index of custom color set."); +} static void rna_def_pose_channel(BlenderRNA *brna) { @@ -341,27 +436,47 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Lock Scale", "Lock editing of scale in the interface."); } -void RNA_def_pose(BlenderRNA *brna) +static void rna_def_pose(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - - rna_def_pose_channel(brna); - + + /* struct definition */ srna= RNA_def_struct(brna, "Pose", NULL); RNA_def_struct_sdna(srna, "bPose"); RNA_def_struct_ui_text(srna, "Pose", "A collection of pose channels, including settings for animating bones."); + /* pose channels */ prop= RNA_def_property(srna, "pose_channels", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "chanbase", NULL); RNA_def_property_struct_type(prop, "PoseChannel"); RNA_def_property_ui_text(prop, "Pose Channels", "Individual pose channels for the armature."); - /* commented for now... missing info... */ - /*prop= RNA_def_property(srna, "action_groups", PROP_COLLECTION, PROP_NONE); + /* bone groups */ + prop= RNA_def_property(srna, "bone_groups", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "agroups", NULL); - RNA_def_property_struct_type(prop, "ActionGroup"); - RNA_def_property_ui_text(prop, "Action Groups", "Groups of bones.");*/ + RNA_def_property_struct_type(prop, "BoneGroup"); + RNA_def_property_ui_text(prop, "Bone Groups", "Groups of the bones."); + + prop= RNA_def_property(srna, "active_bone_group", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "BoneGroup"); + RNA_def_property_pointer_funcs(prop, "rna_Pose_active_bone_group_get", "rna_Pose_active_bone_group_set", NULL); + RNA_def_property_ui_text(prop, "Active Bone Group", "Bone groups of the pose."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); + + prop= RNA_def_property(srna, "active_bone_group_index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "active_group"); + RNA_def_property_int_funcs(prop, "rna_Pose_active_bone_group_index_get", "rna_Pose_active_bone_group_index_set", "rna_Pose_active_bone_group_index_range"); + RNA_def_property_ui_text(prop, "Active Bone Group Index", "Active index in bone groups array."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); +} + +void RNA_def_pose(BlenderRNA *brna) +{ + rna_def_pose(brna); + rna_def_pose_channel(brna); + + rna_def_bone_group(brna); } #endif From 0865bf295947e5cd0b59429edf084f738321aef0 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 10:40:13 +0000 Subject: [PATCH 306/512] 2.5: python module name for import had trailing "." --- source/blender/python/intern/bpy_interface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 1a2bb57a423..ef2406d446c 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -494,7 +494,7 @@ void BPY_run_ui_scripts(bContext *C, int reload) else if ((file_extension = strstr(de->d_name, ".py"))) { /* normal py files? */ if(file_extension && file_extension[3] == '\0') { - de->d_name[(file_extension - de->d_name) + 1] = '\0'; + de->d_name[(file_extension - de->d_name)] = '\0'; err= bpy_import_module(de->d_name, reload); } } From ed921058573dca5277f062e992ad0db0393071fe Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 21 Jul 2009 11:03:07 +0000 Subject: [PATCH 307/512] 2.5 Modal keymaps. I've tried to make it as simple as possible, yet still using sufficient facilities to enable self-documenting UIs, saving/reading in files, and proper Python support. The simplicity is: the 'modal keymap' just checks an event, uses event matching similarly to other keymap matching, and if there's a match it changes the event type, and sets the event value to what the modal keymap has defined. The event values are being defined using EnumPropertyItem structs, so the UI will be able to show all options in self-documenting way. This system also allows to still handle hardcoded own events. Tech doc: 1) define keymap - Create map with unique name, WM_modalkeymap_add() - Give map property definitions (EnumPropertyItem *) This only for UI, so user can get information on available options 2) items - WM_modalkeymap_add_item(): give it an enum value for events 3) activate - In keymap definition code, assign the modal keymap to operatortype WM_modalkeymap_assign() 4) event manager - The event handler will check for modal keymap, if so: - If the modal map has a match: - Sets event->type to EVT_MODAL_MAP - Sets event->val to the enum value 5) modal handler - If event type is EVT_MODAL_MAP: - Check event->val, handle it - Other events can just be handled still Two examples added in the code: editors/transform/transform.c: transform_modal_keymap() editors/screen/screen_ops.c: keymap_modal_set() Also: to support 'key release' the define KM_RELEASE now is officially used in event manager, this is not '0', so don't check key events with the old convention if(event->val) but use if(event->val==KM_PRESS) --- source/blender/editors/screen/screen_ops.c | 70 ++++++++--- source/blender/editors/transform/transform.c | 119 +++++++++++++++++- source/blender/editors/transform/transform.h | 5 +- .../blender/editors/transform/transform_ops.c | 4 + .../makesdna/DNA_windowmanager_types.h | 24 +++- source/blender/windowmanager/WM_api.h | 9 +- .../windowmanager/intern/wm_event_system.c | 26 +++- .../blender/windowmanager/intern/wm_keymap.c | 57 ++++++++- source/blender/windowmanager/wm_event_types.h | 4 + 9 files changed, 288 insertions(+), 30 deletions(-) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5cf1ffb9915..e13e27412b8 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -76,6 +76,11 @@ #include "screen_intern.h" /* own module include */ +#define KM_MODAL_CANCEL 1 +#define KM_MODAL_APPLY 2 +#define KM_MODAL_STEP10 3 +#define KM_MODAL_STEP10_OFF 4 + /* ************** Exported Poll tests ********************** */ int ED_operator_regionactive(bContext *C) @@ -719,7 +724,7 @@ static void SCREEN_OT_area_dupli(wmOperatorType *ot) */ typedef struct sAreaMoveData { - int bigger, smaller, origval; + int bigger, smaller, origval, step; char dir; } sAreaMoveData; @@ -876,32 +881,40 @@ static int area_move_cancel(bContext *C, wmOperator *op) /* modal callback for while moving edges */ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) { - sAreaMoveData *md; + sAreaMoveData *md= op->customdata; int delta, x, y; - md= op->customdata; - - x= RNA_int_get(op->ptr, "x"); - y= RNA_int_get(op->ptr, "y"); - /* execute the events */ switch(event->type) { case MOUSEMOVE: + + x= RNA_int_get(op->ptr, "x"); + y= RNA_int_get(op->ptr, "y"); + delta= (md->dir == 'v')? event->x - x: event->y - y; + if(md->step) delta= delta - (delta % md->step); RNA_int_set(op->ptr, "delta", delta); area_move_apply(C, op); break; - case LEFTMOUSE: - if(event->val==0) { - area_move_exit(C, op); - return OPERATOR_FINISHED; - } - break; + case EVT_MODAL_MAP: - case ESCKEY: - return area_move_cancel(C, op); + switch (event->val) { + case KM_MODAL_APPLY: + area_move_exit(C, op); + return OPERATOR_FINISHED; + + case KM_MODAL_CANCEL: + return area_move_cancel(C, op); + + case KM_MODAL_STEP10: + md->step= 10; + break; + case KM_MODAL_STEP10_OFF: + md->step= 0; + break; + } } return OPERATOR_RUNNING_MODAL; @@ -2877,6 +2890,31 @@ void ED_operatortypes_screen(void) } +static void keymap_modal_set(wmWindowManager *wm) +{ + static EnumPropertyItem modal_items[] = { + {KM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {KM_MODAL_APPLY, "APPLY", 0, "Apply", ""}, + {KM_MODAL_STEP10, "STEP10", 0, "Steps on", ""}, + {KM_MODAL_STEP10_OFF, "STEP10_OFF", 0, "Steps off", ""}, + {0, NULL, 0, NULL, NULL}}; + wmKeyMap *keymap; + + /* Standard Modal keymap ------------------------------------------------ */ + keymap= WM_modalkeymap_add(wm, "Standard Modal Map", modal_items); + + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, KM_MODAL_APPLY); + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_APPLY); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, KM_MODAL_APPLY); + + WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_STEP10); + WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_MODAL_STEP10_OFF); + + WM_modalkeymap_assign(keymap, "SCREEN_OT_area_move"); + +} + /* called in spacetypes.c */ void ED_keymap_screen(wmWindowManager *wm) { @@ -2948,5 +2986,7 @@ void ED_keymap_screen(wmWindowManager *wm) /* play (forward and backwards) */ WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1); + + keymap_modal_set(wm); } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 0d29f39e478..35915c96f3c 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -496,6 +496,63 @@ static char *transform_to_undostr(TransInfo *t) /* ************************************************* */ +/* 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_GEARS 6 +#define TFM_MODAL_SNAP_GEARS_OFF 7 + +/* called in transform_ops.c, on each regeneration of keymaps */ +void transform_modal_keymap(wmWindowManager *wm) +{ + 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_GEARS, "SNAP_GEARS", 0, "Snap On", ""}, + {TFM_MODAL_SNAP_GEARS_OFF, "SNAP_GEARS_OFF", 0, "Snap Off", ""}, + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(wm, "Transform Modal Map"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(wm, "Transform Modal Map", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, TFM_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, GKEY, KM_PRESS, 0, 0, TFM_MODAL_TRANSLATE); + WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, TFM_MODAL_ROTATE); + WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, TFM_MODAL_RESIZE); + + WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_GEARS); + WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_GEARS_OFF); + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "TFM_OT_transform"); + WM_modalkeymap_assign(keymap, "TFM_OT_translate"); + WM_modalkeymap_assign(keymap, "TFM_OT_rotate"); + WM_modalkeymap_assign(keymap, "TFM_OT_tosphere"); + WM_modalkeymap_assign(keymap, "TFM_OT_resize"); + WM_modalkeymap_assign(keymap, "TFM_OT_shear"); + WM_modalkeymap_assign(keymap, "TFM_OT_warp"); + WM_modalkeymap_assign(keymap, "TFM_OT_shrink_fatten"); + WM_modalkeymap_assign(keymap, "TFM_OT_tilt"); + WM_modalkeymap_assign(keymap, "TFM_OT_trackball"); + +} + + void transformEvent(TransInfo *t, wmEvent *event) { float mati[3][3] = {{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}}; @@ -513,7 +570,67 @@ void transformEvent(TransInfo *t, wmEvent *event) applyMouseInput(t, &t->mouse, t->mval, t->values); } - if (event->val) { + /* handle modal keymap first */ + if (event->type == EVT_MODAL_MAP) { + switch (event->val) { + case TFM_MODAL_CANCEL: + t->state = TRANS_CANCEL; + break; + case TFM_MODAL_CONFIRM: + t->state = TRANS_CONFIRM; + break; + + case TFM_MODAL_TRANSLATE: + /* 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 = 1; + } + break; + case TFM_MODAL_ROTATE: + /* only switch when... */ + if( ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { + + 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 = 1; + } + break; + case TFM_MODAL_RESIZE: + /* 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 = 1; + } + break; + + case TFM_MODAL_SNAP_GEARS: + t->modifiers |= MOD_SNAP_GEARS; + t->redraw = 1; + break; + case TFM_MODAL_SNAP_GEARS_OFF: + t->modifiers &= ~MOD_SNAP_GEARS; + t->redraw = 1; + break; + } + } + /* else do non-mapped events */ + else if (event->val==KM_PRESS) { switch (event->type){ case RIGHTMOUSE: t->state = TRANS_CANCEL; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index db78632e76a..efa60b15293 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -47,6 +47,7 @@ struct bConstraint; struct BezTriple; struct wmOperatorType; struct wmOperator; +struct wmWindowManager; struct bContext; struct wmEvent; struct wmTimer; @@ -482,9 +483,11 @@ int Mirror(TransInfo *t, short mval[2]); void initAlign(TransInfo *t); int Align(TransInfo *t, short mval[2]); - void drawPropCircle(const struct bContext *C, TransInfo *t); +void transform_modal_keymap(struct wmWindowManager *wm); + + /*********************** transform_conversions.c ********** */ struct ListBase; diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 7d6112b03de..081e9589fb8 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -587,6 +587,10 @@ void transform_operatortypes(void) void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid) { wmKeymapItem *km; + + /* transform.c, only adds modal map once, checks if it's there */ + transform_modal_keymap(wm); + switch(spaceid) { case SPACE_VIEW3D: diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 9d36882058e..895bc943e9f 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -41,6 +41,7 @@ struct wmEvent; struct wmGesture; struct wmOperatorType; struct wmOperator; +struct wmKeyMap; /* forwards */ struct bContext; @@ -54,6 +55,10 @@ struct PointerRNA; struct ReportList; struct Report; +#define OP_MAX_TYPENAME 64 +#define KMAP_MAX_NAME 64 + + typedef enum ReportType { RPT_DEBUG = 1<<0, RPT_INFO = 1<<1, @@ -198,14 +203,16 @@ typedef struct wmOperatorType { struct StructRNA *srna; short flag; - + + /* pointer to modal keymap, do not free! */ + struct wmKeyMap *modalkeymap; + /* only used for operators defined with python * use to store pointers to python functions */ void *pyop_data; } wmOperatorType; -#define OP_MAX_TYPENAME 64 /* partial copy of the event, for matching by eventhandler */ typedef struct wmKeymapItem { @@ -219,10 +226,9 @@ typedef struct wmKeymapItem { short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */ short keymodifier; /* rawkey modifier */ - short pad; + short propvalue; /* if used, the item is from modal map */ } wmKeymapItem; -#define KMAP_MAX_NAME 64 /* stored in WM, the actively used keymaps */ typedef struct wmKeyMap { @@ -231,8 +237,13 @@ typedef struct wmKeyMap { ListBase keymap; char nameid[64]; /* global editor keymaps, or for more per space/region */ - int spaceid; /* same IDs as in DNA_space_types.h */ - int regionid; /* see above */ + short spaceid; /* same IDs as in DNA_space_types.h */ + short regionid; /* see above */ + + short is_modal; /* modal map, not using operatornames */ + short pad; + + void *items; /* struct EnumPropertyItem for now */ } wmKeyMap; @@ -250,6 +261,7 @@ typedef struct wmOperator { void *customdata; /* custom storage, only while operator runs */ struct PointerRNA *ptr; /* rna pointer to access properties */ struct ReportList *reports; /* errors and warnings storage */ + } wmOperator; /* operator type exec(), invoke() modal(), return values */ diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 609d599a09a..542a747d454 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -40,6 +40,7 @@ struct wmJob; struct wmNotifier; struct rcti; struct PointerRNA; +struct EnumPropertyItem; typedef struct wmJob wmJob; @@ -79,7 +80,13 @@ wmKeymapItem *WM_keymap_add_item(ListBase *lb, char *idname, short type, short val, int modifier, short keymodifier); void WM_keymap_tweak (ListBase *lb, short type, short val, int modifier, short keymodifier); ListBase *WM_keymap_listbase (struct wmWindowManager *wm, const char *nameid, - int spaceid, int regionid); + short spaceid, short regionid); + +wmKeyMap *WM_modalkeymap_add(struct wmWindowManager *wm, const char *nameid, struct EnumPropertyItem *items); +wmKeyMap *WM_modalkeymap_get(struct wmWindowManager *wm, const char *nameid); +void WM_modalkeymap_add_item(wmKeyMap *km, short type, short val, int modifier, short keymodifier, short value); +void WM_modalkeymap_assign(wmKeyMap *km, const char *opname); + const char *WM_key_event_string(short type); char *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index ffd1054d954..0df0679f98b 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -652,6 +652,23 @@ static int wm_event_always_pass(wmEvent *event) return ELEM5(event->type, TIMER, TIMER0, TIMER1, TIMER2, TIMERJOBS); } +/* operator exists */ +static void wm_event_modalkeymap(wmOperator *op, wmEvent *event) +{ + if(op->type->modalkeymap) { + wmKeymapItem *kmi; + + for(kmi= op->type->modalkeymap->keymap.first; kmi; kmi= kmi->next) { + if(wm_eventmatch(event, kmi)) { + + event->type= EVT_MODAL_MAP; + event->val= kmi->propvalue; + printf("found modal event %s %d\n", kmi->idname, kmi->propvalue); + } + } + } +} + /* Warning: this function removes a modal handler, when finished */ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHandler *handler, wmEvent *event, PointerRNA *properties) { @@ -668,8 +685,9 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand ARegion *region= CTX_wm_region(C); wm_handler_op_context(C, handler); - wm_region_mouse_co(C, event); + wm_event_modalkeymap(op, event); + retval= ot->modal(C, op, event); /* putting back screen context, reval can pass trough after modal failures! */ @@ -1446,7 +1464,7 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) GHOST_TEventKeyData *kd= customdata; event.type= convert_key(kd->key); event.ascii= kd->ascii; - event.val= (type==GHOST_kEventKeyDown); /* XXX eventmatch uses defines, bad code... */ + event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE; /* exclude arrow keys, esc, etc from text input */ if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>14)) @@ -1474,10 +1492,10 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) event.oskey= evt->oskey = 3; // define? } - /* if test_break set, it catches this. Keep global for now? */ + /* if test_break set, it catches this. XXX Keep global for now? */ if(event.type==ESCKEY) G.afbreek= 1; - + wm_event_add(win, &event); break; diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index b914e63788d..764b209d755 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -132,7 +132,7 @@ wmKeymapItem *WM_keymap_add_item(ListBase *lb, char *idname, short type, short v space/region ids are same as DNA_space_types.h */ /* gets free'd in wm.c */ -ListBase *WM_keymap_listbase(wmWindowManager *wm, const char *nameid, int spaceid, int regionid) +static wmKeyMap *wm_keymap_add(wmWindowManager *wm, const char *nameid, short spaceid, short regionid) { wmKeyMap *km; @@ -140,7 +140,7 @@ ListBase *WM_keymap_listbase(wmWindowManager *wm, const char *nameid, int spacei if(km->spaceid==spaceid && km->regionid==regionid) if(0==strncmp(nameid, km->nameid, KMAP_MAX_NAME)) break; - + if(km==NULL) { km= MEM_callocN(sizeof(struct wmKeyMap), "keymap list"); BLI_strncpy(km->nameid, nameid, KMAP_MAX_NAME); @@ -149,9 +149,62 @@ ListBase *WM_keymap_listbase(wmWindowManager *wm, const char *nameid, int spacei BLI_addtail(&wm->keymaps, km); } + return km; +} + +ListBase *WM_keymap_listbase(wmWindowManager *wm, const char *nameid, short spaceid, short regionid) +{ + wmKeyMap *km= wm_keymap_add(wm, nameid, spaceid, regionid); return &km->keymap; } +/* ****************** modal keymaps ************ */ + +/* modal maps get linked to a running operator, and filter the keys before sending to modal() callback */ + +wmKeyMap *WM_modalkeymap_add(wmWindowManager *wm, const char *nameid, EnumPropertyItem *items) +{ + wmKeyMap *km= wm_keymap_add(wm, nameid, 0, 0); + km->is_modal= 1; + km->items= items; + + return km; +} + +wmKeyMap *WM_modalkeymap_get(wmWindowManager *wm, const char *nameid) +{ + wmKeyMap *km; + + for(km= wm->keymaps.first; km; km= km->next) + if(km->is_modal) + if(0==strncmp(nameid, km->nameid, KMAP_MAX_NAME)) + break; + + return km; +} + + +void WM_modalkeymap_add_item(wmKeyMap *km, short type, short val, int modifier, short keymodifier, short value) +{ + wmKeymapItem *kmi= MEM_callocN(sizeof(wmKeymapItem), "keymap entry"); + + BLI_addtail(&km->keymap, kmi); + kmi->propvalue= value; + + keymap_event_set(kmi, type, val, modifier, keymodifier); +} + +void WM_modalkeymap_assign(wmKeyMap *km, const char *opname) +{ + wmOperatorType *ot= WM_operatortype_find(opname, 0); + + if(ot) + ot->modalkeymap= km; + else + printf("error: modalkeymap_assign, unknown operator %s\n", opname); +} + + /* ***************** get string from key events **************** */ const char *WM_key_event_string(short type) diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index 39c267b132c..6f64cdbde32 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -238,7 +238,11 @@ #define EVT_FILESELECT_EXEC 3 #define EVT_FILESELECT_CANCEL 4 +/* event->type */ #define EVT_BUT_OPEN 0x5021 +#define EVT_MODAL_MAP 0x5022 + + #endif /* WM_EVENT_TYPES_H */ From e18164dbab59ae5c9f0f1dd1ba12d1a97538919b Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 21 Jul 2009 12:19:46 +0000 Subject: [PATCH 308/512] 2.5 Overlooked WM event.val usage without checking proper #defines. My previous commit made all input not work on any modifier key press. --- .../windowmanager/intern/wm_event_system.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 0df0679f98b..5377e351ff0 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1472,23 +1472,23 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) /* modifiers */ if (event.type==LEFTSHIFTKEY || event.type==RIGHTSHIFTKEY) { - event.shift= evt->shift= event.val; - if(event.val && (evt->ctrl || evt->alt || evt->oskey)) + event.shift= evt->shift= (event.val==KM_PRESS); + if(event.val==KM_PRESS && (evt->ctrl || evt->alt || evt->oskey)) event.shift= evt->shift = 3; // define? } else if (event.type==LEFTCTRLKEY || event.type==RIGHTCTRLKEY) { - event.ctrl= evt->ctrl= event.val; - if(event.val && (evt->shift || evt->alt || evt->oskey)) + event.ctrl= evt->ctrl= (event.val==KM_PRESS); + if(event.val==KM_PRESS && (evt->shift || evt->alt || evt->oskey)) event.ctrl= evt->ctrl = 3; // define? } else if (event.type==LEFTALTKEY || event.type==RIGHTALTKEY) { - event.alt= evt->alt= event.val; - if(event.val && (evt->ctrl || evt->shift || evt->oskey)) + event.alt= evt->alt= (event.val==KM_PRESS); + if(event.val==KM_PRESS && (evt->ctrl || evt->shift || evt->oskey)) event.alt= evt->alt = 3; // define? } else if (event.type==COMMANDKEY) { - event.oskey= evt->oskey= event.val; - if(event.val && (evt->ctrl || evt->alt || evt->shift)) + event.oskey= evt->oskey= (event.val==KM_PRESS); + if(event.val==KM_PRESS && (evt->ctrl || evt->alt || evt->shift)) event.oskey= evt->oskey = 3; // define? } From 7284eb6d9119f70766242f490a0dc841e01cc585 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 12:38:01 +0000 Subject: [PATCH 309/512] 2.5 - More work on Bone Groups * Added a new UI Template for the 3-colour picker used to visualise + select the custom colours for a bone group. * Finished wrapping the colour properties for Bone Groups in RNA. Although changing the colour-set used will change the displayed/cached colours, changing the colours via the colour wells will not change the colour set to 'custom' (as per 2.4x) yet. This needs a nice solution... * Fixed context-related bugs with the Assign/Remove operators for bone groups. These were using context-iterators for selected posechannels, but that was only defined/valid for the 3d view (but not for the buttons window), hence a failure in that case. --- release/ui/buttons_data_armature.py | 9 +- source/blender/editors/armature/poseobject.c | 99 +++++++------------ source/blender/editors/include/UI_interface.h | 1 + .../editors/interface/interface_templates.c | 35 ++++++- source/blender/makesrna/intern/rna_pose.c | 91 +++++++++++++++-- source/blender/makesrna/intern/rna_ui_api.c | 3 + 6 files changed, 163 insertions(+), 75 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index 8eb7ba59c70..ad34d867350 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -101,8 +101,13 @@ class DATA_PT_bone_groups(DataButtonsPanel): group = pose.active_bone_group if group: - row = layout.row() - row.itemR(group, "name") + col = layout.column() + col.itemR(group, "name") + + split = layout.split(0.5) + split.itemR(group, "color_set") + if group.color_set: + split.template_triColorSet(group, "colors") row = layout.row(align=True) diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index d753cf39f69..eface169387 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -1035,7 +1035,7 @@ static int pose_groups_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) ob= CTX_data_active_object(C); /* only continue if there's an object, and a pose there too */ - if (ELEM(NULL, ob, ob->pose)) + if (ELEM(NULL, ob, ob->pose)) return OPERATOR_CANCELLED; pose= ob->pose; @@ -1065,7 +1065,7 @@ static int pose_groups_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) else { /* just use the active group index, and call the exec callback for the calling operator */ RNA_int_set(op->ptr, "type", pose->active_group); - return op->type->exec; + return op->type->exec(C, op); } } @@ -1074,7 +1074,9 @@ static int pose_group_assign_exec (bContext *C, wmOperator *op) { ScrArea *sa= CTX_wm_area(C); Object *ob; + bArmature *arm; bPose *pose; + bPoseChannel *pchan; short done= 0; /* since this call may also be used from the buttons window, we need to check for where to get the object */ @@ -1086,18 +1088,29 @@ static int pose_group_assign_exec (bContext *C, wmOperator *op) /* only continue if there's an object, and a pose there too */ if (ELEM(NULL, ob, ob->pose)) return OPERATOR_CANCELLED; + arm= ob->data; pose= ob->pose; - /* set the active group number to the one from operator props */ + /* set the active group number to the one from operator props + * - if 0 after this, make a new group... + */ pose->active_group= RNA_int_get(op->ptr, "type"); + if (pose->active_group == 0) + pose_add_group(ob); /* add selected bones to group then */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) - { - pchan->agrp_index= pose->active_group; - done= 1; + // NOTE: unfortunately, we cannot use the context-iterators here, since they might not be defined... + // CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { + /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ + // NOTE: sync this view3d_context() in space_view3d.c + if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) { + pchan->agrp_index= pose->active_group; + done= 1; + } + } } - CTX_DATA_END; /* notifiers for updates */ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); @@ -1133,7 +1146,9 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *op) { ScrArea *sa= CTX_wm_area(C); Object *ob; + bArmature *arm; bPose *pose; + bPoseChannel *pchan; short done= 0; /* since this call may also be used from the buttons window, we need to check for where to get the object */ @@ -1146,16 +1161,23 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *op) if (ELEM(NULL, ob, ob->pose)) return OPERATOR_CANCELLED; pose= ob->pose; + arm= ob->data; /* add selected bones to ungroup then */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) - { - if (pchan->agrp_index) { - pchan->agrp_index= 0; - done= 1; + // NOTE: unfortunately, we cannot use the context-iterators here, since they might not be defined... + // CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) + for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { + /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ + // NOTE: sync this view3d_context() in space_view3d.c + if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) { + if (pchan->agrp_index) { + pchan->agrp_index= 0; + done= 1; + } + } } } - CTX_DATA_END; /* notifiers for updates */ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); @@ -1228,55 +1250,6 @@ void POSE_OT_groups_menu (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER; } -#if 0 -/* Ctrl-G in 3D-View while in PoseMode */ -void pgroup_operation_with_menu (Scene *scene) -{ - Object *ob= OBACT; - bArmature *arm= (ob) ? ob->data : NULL; - bPose *pose= (ob) ? ob->pose : NULL; - bPoseChannel *pchan= NULL; - int mode; - - /* sanity checks */ - if (ELEM3(NULL, ob, pose, arm)) - return; - - /* check that something is selected */ - for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) - break; - } - if (pchan == NULL) - return; - - /* get mode of action */ - if (pchan) - mode= pupmenu("Bone Groups%t|Add Selected to Active Group%x1|Add Selected to Group%x2|%|Remove Selected From Groups%x3|Remove Active Group%x4"); - else - mode= pupmenu("Bone Groups%t|Add New Group%x5|Remove Active Group%x4"); - - /* handle mode */ - switch (mode) { - case 1: - pose_assign_to_posegroup(scene, 1); - break; - case 2: - pose_assign_to_posegroup(scene, 0); - break; - case 5: - pose_add_posegroup(scene); - break; - case 3: - pose_remove_from_posegroups(scene); - break; - case 4: - pose_remove_posegroup(scene); - break; - } -} -#endif - /* ********************************************** */ static short pose_select_same_group (Object *ob) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b7f75386113..f6774d6ac92 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -622,6 +622,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr); void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent); void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int type); +void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname); void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname); void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser); void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index e70510753e1..24009819f45 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1173,7 +1173,7 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) { uiLayout *row, *col; uiBlock *block; - Material *ma; + Material *ma= NULL; ID *pid, *pparent; if(id && !ELEM4(GS(id->name), ID_MA, ID_TE, ID_WO, ID_LA)) { @@ -1265,6 +1265,34 @@ void uiTemplateCurveMapping(uiLayout *layout, CurveMapping *cumap, int type) } } +/********************* TriColor (ThemeWireColorSet) Template ************************/ + +void uiTemplateTriColorSet(uiLayout *layout, PointerRNA *ptr, char *propname) +{ + uiLayout *row; + PropertyRNA *prop; + PointerRNA csPtr; + + if (!ptr->data) + return; + + prop= RNA_struct_find_property(ptr, propname); + if (!prop) { + printf("uiTemplateTriColorSet: property not found: %s\n", propname); + return; + } + + /* we lay out the data in a row as 3 color swatches */ + row= uiLayoutRow(layout, 1); + + /* nselected, selected, active color swatches */ + csPtr= RNA_property_pointer_get(ptr, prop); + + uiItemR(row, "", 0, &csPtr, "normal", 0, 0, 0); + uiItemR(row, "", 0, &csPtr, "selected", 0, 0, 0); + uiItemR(row, "", 0, &csPtr, "active", 0, 0, 0); +} + /********************* Layer Buttons Template ************************/ // TODO: @@ -1299,7 +1327,10 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname) groups= ((cols / 2) < 5) ? (1) : (cols / 2); /* layers are laid out going across rows, with the columns being divided into groups */ - uSplit= uiLayoutSplit(layout, (1.0f/(float)groups)); + if (groups > 1) + uSplit= uiLayoutSplit(layout, (1.0f/(float)groups)); + else + uSplit= layout; for (group= 0; group < groups; group++) { uCol= uiLayoutColumn(uSplit, 1); diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index e15310a02bf..0963f2483f3 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * Contributor(s): Blender Foundation (2008), Roland Hess + * Contributor(s): Blender Foundation (2008), Roland Hess, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** */ @@ -39,8 +39,12 @@ #ifdef RNA_RUNTIME +#include + #include "BLI_arithb.h" +#include "DNA_userdef_types.h" + #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_idprop.h" @@ -54,6 +58,41 @@ static void rna_Pose_update(bContext *C, PointerRNA *ptr) DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_DATA); } +static void rna_BoneGroup_color_set_set(PointerRNA *ptr, int value) +{ + bActionGroup *grp= ptr->data; + + /* if valid value, set the new enum value, then copy the relevant colours? */ + if ((value >= -1) && (value < 21)) + grp->customCol= value; + else + return; + + /* only do color copying if using a custom color (i.e. not default colour) */ + if (grp->customCol) { + if (grp->customCol > 0) { + /* copy theme colors on-to group's custom color in case user tries to edit color */ + bTheme *btheme= U.themes.first; + ThemeWireColor *col_set= &btheme->tarm[(grp->customCol - 1)]; + + memcpy(&grp->cs, col_set, sizeof(ThemeWireColor)); + } + else { + /* init custom colors with a generic multi-color rgb set, if not initialised already (for custom color set) */ + if (grp->cs.solid[0] == 0) { + /* define for setting colors in theme below */ + #define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a; + + SETCOL(grp->cs.solid, 0xff, 0x00, 0x00, 255); + SETCOL(grp->cs.select, 0x81, 0xe6, 0x14, 255); + SETCOL(grp->cs.active, 0x18, 0xb6, 0xe0, 255); + + #undef SETCOL + } + } + } +} + IDProperty *rna_PoseChannel_idproperties(PointerRNA *ptr, int create) { bPoseChannel *pchan= ptr->data; @@ -189,23 +228,60 @@ void rna_pose_pgroup_name_set(PointerRNA *ptr, const char *value, char *result, static void rna_def_bone_group(BlenderRNA *brna) { + static EnumPropertyItem prop_colorSets_items[] = { + {0, "DEFAULT", 0, "Default Colors", ""}, + {1, "THEME01", 0, "01 - Theme Color Set", ""}, + {2, "THEME02", 0, "02 - Theme Color Set", ""}, + {3, "THEME03", 0, "03 - Theme Color Set", ""}, + {4, "THEME04", 0, "04 - Theme Color Set", ""}, + {5, "THEME05", 0, "05 - Theme Color Set", ""}, + {6, "THEME06", 0, "06 - Theme Color Set", ""}, + {7, "THEME07", 0, "07 - Theme Color Set", ""}, + {8, "THEME08", 0, "08 - Theme Color Set", ""}, + {9, "THEME09", 0, "09 - Theme Color Set", ""}, + {10, "THEME10", 0, "10 - Theme Color Set", ""}, + {11, "THEME11", 0, "11 - Theme Color Set", ""}, + {12, "THEME12", 0, "12 - Theme Color Set", ""}, + {13, "THEME13", 0, "13 - Theme Color Set", ""}, + {14, "THEME14", 0, "14 - Theme Color Set", ""}, + {15, "THEME15", 0, "15 - Theme Color Set", ""}, + {16, "THEME16", 0, "16 - Theme Color Set", ""}, + {17, "THEME17", 0, "17 - Theme Color Set", ""}, + {18, "THEME18", 0, "18 - Theme Color Set", ""}, + {19, "THEME19", 0, "19 - Theme Color Set", ""}, + {20, "THEME20", 0, "20 - Theme Color Set", ""}, + {-1, "CUSTOM", 0, "Custom Color Set", ""}, + {0, NULL, 0, NULL, NULL}}; + StructRNA *srna; PropertyRNA *prop; - + + /* struct */ srna= RNA_def_struct(brna, "BoneGroup", NULL); RNA_def_struct_sdna(srna, "bActionGroup"); RNA_def_struct_ui_text(srna, "Bone Group", "Groups of Pose Channels (Bones)."); - + + /* name */ prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); // TODO: add some runtime-collections stuff to access grouped bones - // FIXME: this needs more work - probably a custom template? - prop= RNA_def_property(srna, "custom_color", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "customCol"); - RNA_def_property_ui_text(prop, "Custom Color", "Index of custom color set."); + /* color set + colors */ + prop= RNA_def_property(srna, "color_set", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "customCol"); + RNA_def_property_enum_items(prop, prop_colorSets_items); + RNA_def_property_enum_funcs(prop, NULL, "rna_BoneGroup_color_set_set", NULL); + RNA_def_property_ui_text(prop, "Color Set", "Custom color set to use."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); + + // TODO: editing the colors for this should result in changes to the color type... + prop= RNA_def_property(srna, "colors", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_struct_type(prop, "ThemeBoneColorSet"); + RNA_def_property_pointer_sdna(prop, NULL, "cs"); /* NOTE: the DNA data is not really a pointer, but this code works :) */ + RNA_def_property_ui_text(prop, "Colors", "Copy of the colors associated with the group's color set."); + RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update"); } static void rna_def_pose_channel(BlenderRNA *brna) @@ -272,7 +348,6 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "selectflag", BONE_SELECTED); RNA_def_property_ui_text(prop, "Selected", ""); - /* XXX note: bone groups are stored internally as bActionGroups :) - Aligorith */ prop= RNA_def_property(srna, "bone_group_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "agrp_index"); RNA_def_property_ui_text(prop, "Bone Group Index", "Bone Group this pose channel belongs to (0=no group)."); diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 05255036992..b88a2d50d7e 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -256,6 +256,9 @@ void RNA_api_ui_layout(StructRNA *srna) func= RNA_def_function(srna, "template_layers", "uiTemplateLayers"); api_ui_item_rna_common(func); + + func= RNA_def_function(srna, "template_triColorSet", "uiTemplateTriColorSet"); + api_ui_item_rna_common(func); func= RNA_def_function(srna, "template_image_layers", "uiTemplateImageLayers"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); From e56287bfc900ec80f97ad281d54bb8c315db5af4 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 12:57:55 +0000 Subject: [PATCH 310/512] 2.5: Texture Buttons * World and Lamp previews now working here too. * Experiment with list template, showing only icons. Unfortunately texture icon render crashes combined with preview render so it shows all icons the same. * Influence panels updated, with slider for each option. The values are still linked though, will fix that later. * Image texture controls a bit more complete, still WIP. * Color ramp back. --- release/ui/buttons_texture.py | 285 ++++++++++-------- source/blender/editors/include/UI_interface.h | 2 + .../editors/interface/interface_templates.c | 50 ++- .../editors/interface/interface_utils.c | 11 +- source/blender/makesdna/DNA_lamp_types.h | 3 +- source/blender/makesdna/DNA_material_types.h | 6 - source/blender/makesdna/DNA_texture_types.h | 5 + source/blender/makesdna/DNA_world_types.h | 1 + source/blender/makesrna/intern/rna_lamp.c | 14 + source/blender/makesrna/intern/rna_material.c | 100 +++++- source/blender/makesrna/intern/rna_texture.c | 34 ++- source/blender/makesrna/intern/rna_ui_api.c | 5 + source/blender/makesrna/intern/rna_world.c | 30 ++ 13 files changed, 377 insertions(+), 169 deletions(-) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 49f04b886b4..7367805a395 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -16,10 +16,16 @@ class TEXTURE_PT_preview(TextureButtonsPanel): def draw(self, context): layout = self.layout tex = context.texture - mat = context.material + ma = context.material + la = context.lamp + wo = context.world - if mat: - layout.template_preview(tex, parent=mat) + if ma: + layout.template_preview(tex, parent=ma) + elif la: + layout.template_preview(tex, parent=la) + elif wo: + layout.template_preview(tex, parent=wo) else: layout.template_preview(tex) @@ -43,16 +49,11 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): if ma or la or wo: row = layout.row() if ma: - row.template_list(ma, "textures", ma, "active_texture_index") + row.template_list(ma, "textures", ma, "active_texture_index", type="ICONS") elif la: - row.template_list(la, "textures", la, "active_texture_index") + row.template_list(la, "textures", la, "active_texture_index", type="ICONS") elif wo: - row.template_list(wo, "textures", wo, "active_texture_index") - """if ma or la or wo: - col = row.column(align=True) - col.itemO("texture.new", icon="ICON_ZOOMIN", text="") - #col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="") - """ + row.template_list(wo, "textures", wo, "active_texture_index", type="ICONS") split = layout.split(percentage=0.65) @@ -97,21 +98,30 @@ class TEXTURE_PT_mapping(TextureButtonsPanel): col = split.column() col.itemR(tex, "texture_coordinates", text="") - if tex.texture_coordinates == 'UV': - row = layout.row() - row.itemR(tex, "uv_layer") + if tex.texture_coordinates == 'ORCO': + """ + ob = context.object + if ob and ob.type == 'MESH': + split = layout.split(percentage=0.3) + split.itemL(text="Mesh:") + split.itemR(ob.data, "texco_mesh", text="") + """ + elif tex.texture_coordinates == 'UV': + split = layout.split(percentage=0.3) + split.itemL(text="Layer:") + split.itemR(tex, "uv_layer", text="") elif tex.texture_coordinates == 'OBJECT': - row = layout.row() - row.itemR(tex, "object") + split = layout.split(percentage=0.3) + split.itemL(text="Object:") + split.itemR(tex, "object", text="") - if textype.type in ('IMAGE', 'ENVIRONMENT_MAP'): + if ma: split = layout.split(percentage=0.3) col = split.column() col.itemL(text="Projection:") col = split.column() col.itemR(tex, "mapping", text="") - if ma: split = layout.split() col = split.column() @@ -147,89 +157,76 @@ class TEXTURE_PT_influence(TextureButtonsPanel): wo = context.world textype = context.texture tex = context.texture_slot + + def factor_but(layout, active, toggle, factor, name): + row = layout.row(align=True) + row.itemR(tex, toggle, text="") + sub = row.row() + sub.active = active + sub.itemR(tex, factor, text=name, slider=True) if ma: split = layout.split() col = split.column() - col.itemR(tex, "map_color", text="Diffuse Color") - colsub = col.column() - colsub.active = tex.map_color - colsub.itemR(tex, "color_factor", text="Opacity", slider=True) - colsub.itemR(tex, "blend_type") - col.itemR(tex, "rgb_to_intensity") - colsub = col.column() - colsub.active = tex.rgb_to_intensity - colsub.itemR(tex, "color") - - col.itemR(tex, "map_colorspec") - col.itemR(tex, "map_normal") - colsub = col.column() - colsub.active = tex.map_normal - colsub.itemR(tex, "normal_factor", text="Amount", slider=True) - col.itemR(tex, "normal_map_space") - col.itemR(tex, "map_warp") - colsub = col.column() - colsub.active = tex.map_warp - colsub.itemR(tex, "warp_factor", text="Amount", slider=True) - col.itemR(tex, "map_displacement") - colsub = col.column() - colsub.active = tex.map_displacement - colsub.itemR(tex, "displacement_factor", text="Amount", slider=True) - col = split.column() - col.itemR(tex, "map_mirror") - col.itemR(tex, "map_reflection") - col.itemR(tex, "map_specularity") - col.itemR(tex, "map_ambient") - col.itemR(tex, "map_hardness") - col.itemR(tex, "map_raymir") - col.itemR(tex, "map_alpha") - col.itemR(tex, "map_emit") - col.itemR(tex, "map_translucency") - colsub = col.column() - colsub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror - colsub.itemR(tex, "default_value", text="Amount", slider=True) - + col.itemL(text="Diffuse:") + factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity") + factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color") + factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha") + factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency") + + col.itemL(text="Specular:") + factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity") + factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color") + factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness") + + col = split.column() + col.itemL(text="Shading:") + factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient") + factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit") + factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror") + factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror") + + col.itemL(text="Geometry:") + factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal") + factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp") + factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace") + + #colsub = col.column() + #colsub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror + #colsub.itemR(tex, "default_value", text="Amount", slider=True) elif la: row = layout.row() - row.itemR(tex, "map_color") - row.itemR(tex, "map_shadow") - - split = layout.split() - - col = split.column() - col.itemR(tex, "color_factor", text="Opacity", slider=True) - col.itemR(tex, "blend_type") - col.itemR(tex, "rgb_to_intensity") - col.itemR(tex, "color") - - col = split.column() - col.itemR(tex, "default_value", text="DVar", slider=True) + factor_but(row, tex.map_color, "map_color", "color_factor", "Color") + factor_but(row, tex.map_shadow, "map_shadow", "shadow_factor", "Shadow") elif wo: - row = layout.row() - row.itemR(tex, "map_blend") - row.itemR(tex, "map_horizon") - row.itemR(tex, "map_zenith_up") - row.itemR(tex, "map_zenith_down") - split = layout.split() + col = split.column() + factor_but(col, tex.map_blend, "map_blend", "blend_factor", "Blend") + factor_but(col, tex.map_horizon, "map_horizon", "horizon_factor", "Horizon") col = split.column() - col.itemR(tex, "color_factor", text="Opacity", slider=True) - col.itemR(tex, "blend_type") - col.itemR(tex, "rgb_to_intensity") - col.itemR(tex, "color") + factor_but(col, tex.map_zenith_up, "map_zenith_up", "zenith_up_factor", "Zenith Up") + factor_but(col, tex.map_zenith_down, "map_zenith_down", "zenith_down_factor", "Zenith Down") - col = split.column() - col.itemR(tex, "normal_factor", text="Nor", slider=True) - col.itemR(tex, "variable_factor", text="Var", slider=True) + layout.itemS() + split = layout.split() + + col = split.column() + + col.itemR(tex, "blend_type", text="Blend") + col.itemR(tex, "rgb_to_intensity") + colsub = col.column() + colsub.active = tex.rgb_to_intensity + colsub.itemR(tex, "color", text="") + + col = split.column() + col.itemR(tex, "negate", text="Negative") + col.itemR(tex, "stencil") + if ma or wo: col.itemR(tex, "default_value", text="DVar", slider=True) - row = layout.row() - row.itemR(tex, "stencil") - row.itemR(tex, "negate", text="Negative") - class TEXTURE_PT_colors(TextureButtonsPanel): __idname__= "TEXTURE_PT_colors" __label__ = "Colors" @@ -239,12 +236,13 @@ class TEXTURE_PT_colors(TextureButtonsPanel): layout = self.layout tex = context.texture - if tex.color_ramp: + layout.itemR(tex, "use_color_ramp", text="Ramp") + if tex.use_color_ramp: layout.template_color_ramp(tex.color_ramp, expand=True) - else: - split = layout.split() - col = split.column() - col.itemR(tex, "rgb_factor", text="Multiply RGB") + + split = layout.split() + col = split.column() + col.itemR(tex, "rgb_factor", text="Multiply RGB") col = split.column() col.itemL(text="Adjust:") @@ -378,7 +376,7 @@ class TEXTURE_PT_stucci(TextureButtonsPanel): class TEXTURE_PT_image(TextureButtonsPanel): __idname__= "TEXTURE_PT_image" - __label__ = "Image/Movie" + __label__ = "Image" def poll(self, context): tex = context.texture @@ -387,25 +385,65 @@ class TEXTURE_PT_image(TextureButtonsPanel): def draw(self, context): layout = self.layout tex = context.texture + + layout.template_texture_image(tex) + +class TEXTURE_PT_image_sampling(TextureButtonsPanel): + __idname__= "TEXTURE_PT_image_sampling" + __label__ = "Image Sampling" + __default_closed__ = True + + def poll(self, context): + tex = context.texture + return (tex and tex.type == 'IMAGE') + + def draw(self, context): + layout = self.layout + tex = context.texture + slot = context.texture_slot split = layout.split() + """ sub = split.column() sub.itemR(tex, "flip_axis") sub.itemR(tex, "normal_map") - sub.itemL(text="Filter:") - sub.itemR(tex, "mipmap") - sub.itemR(tex, "mipmap_gauss") - sub.itemR(tex, "interpolation") - sub = split.column() - sub.itemL(text="Alpha:") - sub.itemR(tex, "use_alpha") - sub.itemR(tex, "calculate_alpha") - sub.itemR(tex, "invert_alpha") + if slot: + row = sub.row() + row.active = tex.normal_map + row.itemR(slot, "normal_map_space", text="") + """ -class TEXTURE_PT_crop(TextureButtonsPanel): - __idname__= "TEXTURE_PT_crop" - __label__ = "Crop" + sub = split.column() + + sub.itemL(text="Alpha:") + sub.itemR(tex, "use_alpha", text="Use") + sub.itemR(tex, "calculate_alpha", text="Calculate") + sub.itemR(tex, "invert_alpha", text="Invert") + + sub.itemL(text="Flip:") + sub.itemR(tex, "flip_axis", text="X/Y Axis") + + sub = split.column() + sub.itemL(text="Filter:") + #sub.itemR(tex, "filter", text="") + sub.itemR(tex, "mipmap") + row = sub.row() + row.itemR(tex, "mipmap_gauss", text="Gauss") + row.active = tex.mipmap + sub.itemR(tex, "interpolation") + """ + if tex.mipmap and tex.filter != 'DEFAULT': + if tex.filter == 'FELINE': + sub.itemR(tex, "filter_probes", text="Probes") + else: + sub.itemR(tex, "filter_eccentricity", text="Eccentricity") + """ + +class TEXTURE_PT_image_mapping(TextureButtonsPanel): + __idname__= "TEXTURE_PT_image_mapping" + __label__ = "Image Mapping" + __default_closed__ = True def poll(self, context): tex = context.texture @@ -414,37 +452,41 @@ class TEXTURE_PT_crop(TextureButtonsPanel): def draw(self, context): layout = self.layout tex = context.texture - - split = layout.split() - - sub = split.column() - #sub.itemR(tex, "crop_rectangle") - sub.itemL(text="Crop Minimum:") - sub.itemR(tex, "crop_min_x", text="X") - sub.itemR(tex, "crop_min_y", text="Y") - sub = split.column() - sub.itemL(text="Crop Maximum:") - sub.itemR(tex, "crop_max_x", text="X") - sub.itemR(tex, "crop_max_y", text="Y") layout.itemR(tex, "extension") split = layout.split() - sub = split.column() if tex.extension == 'REPEAT': + sub = split.column(align=True) sub.itemL(text="Repeat:") sub.itemR(tex, "repeat_x", text="X") sub.itemR(tex, "repeat_y", text="Y") - sub = split.column() + sub = split.column(align=True) sub.itemL(text="Mirror:") sub.itemR(tex, "mirror_x", text="X") sub.itemR(tex, "mirror_y", text="Y") elif tex.extension == 'CHECKER': - sub.itemR(tex, "checker_even", text="Even") - sub.itemR(tex, "checker_odd", text="Odd") + sub = split.column(align=True) + row = sub.row() + row.itemR(tex, "checker_even", text="Even") + row.itemR(tex, "checker_odd", text="Odd") sub = split.column() sub.itemR(tex, "checker_distance", text="Distance") + + layout.itemS() + + split = layout.split() + + sub = split.column(align=True) + #sub.itemR(tex, "crop_rectangle") + sub.itemL(text="Crop Minimum:") + sub.itemR(tex, "crop_min_x", text="X") + sub.itemR(tex, "crop_min_y", text="Y") + sub = split.column(align=True) + sub.itemL(text="Crop Maximum:") + sub.itemR(tex, "crop_max_x", text="X") + sub.itemR(tex, "crop_max_y", text="Y") class TEXTURE_PT_plugin(TextureButtonsPanel): __idname__= "TEXTURE_PT_plugin" @@ -573,7 +615,8 @@ bpy.types.register(TEXTURE_PT_magic) bpy.types.register(TEXTURE_PT_blend) bpy.types.register(TEXTURE_PT_stucci) bpy.types.register(TEXTURE_PT_image) -bpy.types.register(TEXTURE_PT_crop) +bpy.types.register(TEXTURE_PT_image_sampling) +bpy.types.register(TEXTURE_PT_image_mapping) bpy.types.register(TEXTURE_PT_plugin) bpy.types.register(TEXTURE_PT_envmap) bpy.types.register(TEXTURE_PT_musgrave) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index f6774d6ac92..b40f90dcf0c 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -59,6 +59,7 @@ struct CurveMapping; struct Image; struct ImageUser; struct uiWidgetColors; +struct Tex; typedef struct uiBut uiBut; typedef struct uiBlock uiBlock; @@ -628,6 +629,7 @@ void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *i void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); void uiTemplateOperatorSearch(uiLayout *layout); void uiTemplateHeader3D(uiLayout *layout, struct bContext *C); +void uiTemplateTextureImage(uiLayout *layout, struct bContext *C, struct Tex *tex); typedef struct uiListItem { struct uiListItem *next, *prev; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 24009819f45..f8d1e1d7ab9 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1155,11 +1155,12 @@ uiLayout *uiTemplateGroup(uiLayout *layout, Object *ob, Group *group) /************************* Preview Template ***************************/ +#include "DNA_lamp_types.h" #include "DNA_material_types.h" +#include "DNA_world_types.h" #define B_MATPRV 1 - static void do_preview_buttons(bContext *C, void *arg, int event) { switch(event) { @@ -1175,6 +1176,7 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) uiBlock *block; Material *ma= NULL; ID *pid, *pparent; + short *pr_texture= NULL; if(id && !ELEM4(GS(id->name), ID_MA, ID_TE, ID_WO, ID_LA)) { printf("uiTemplatePreview: expected ID of type material, texture, lamp or world.\n"); @@ -1185,13 +1187,20 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) pid= id; pparent= NULL; - if((id && GS(id->name) == ID_TE) && (parent && GS(parent->name) == ID_MA)) { - ma= ((Material*)parent); + if(id && (GS(id->name) == ID_TE)) { + if(parent && (GS(parent->name) == ID_MA)) + pr_texture= &((Material*)parent)->pr_texture; + else if(parent && (GS(parent->name) == ID_WO)) + pr_texture= &((World*)parent)->pr_texture; + else if(parent && (GS(parent->name) == ID_LA)) + pr_texture= &((Lamp*)parent)->pr_texture; - if(ma->pr_texture == MA_PR_MATERIAL) - pid= parent; - else if(ma->pr_texture == MA_PR_BOTH) - pparent= parent; + if(pr_texture) { + if(*pr_texture == TEX_PR_OTHER) + pid= parent; + else if(*pr_texture == TEX_PR_BOTH) + pparent= parent; + } } /* layout */ @@ -1221,12 +1230,17 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) uiDefIconButC(block, ROW, B_MATPRV, ICON_MATSPHERE, 0, 0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_SPHERE_A, 0, 0, "Preview type: Large sphere with sky"); } - if(GS(id->name) == ID_TE && (parent && GS(parent->name) == ID_MA)) { + if(pr_texture) { uiLayoutRow(layout, 1); - uiDefButS(block, ROW, B_MATPRV, "Texture", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_TEXTURE, 0, 0, ""); - uiDefButS(block, ROW, B_MATPRV, "Material", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_MATERIAL, 0, 0, ""); - uiDefButS(block, ROW, B_MATPRV, "Both", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_BOTH, 0, 0, ""); + uiDefButS(block, ROW, B_MATPRV, "Texture", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_TEXTURE, 0, 0, ""); + if(GS(parent->name) == ID_MA) + uiDefButS(block, ROW, B_MATPRV, "Material", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, ""); + else if(GS(parent->name) == ID_LA) + uiDefButS(block, ROW, B_MATPRV, "Lamp", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, ""); + else if(GS(parent->name) == ID_WO) + uiDefButS(block, ROW, B_MATPRV, "World", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, ""); + uiDefButS(block, ROW, B_MATPRV, "Both", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_BOTH, 0, 0, ""); } } } @@ -1669,3 +1683,17 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C) uiDefIconTextBut(block, BUT, B_STOPANIM, ICON_REC, "Anim Player", 0,0,85,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop animation playback"); } +/************************* Image Template **************************/ + +#include "ED_image.h" + +void uiTemplateTextureImage(uiLayout *layout, bContext *C, Tex *tex) +{ + uiBlock *block; + + if(tex) { + block= uiLayoutFreeBlock(layout); + ED_image_uiblock_panel(C, block, &tex->ima, &tex->iuser, 0, 0); + } +} + diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 4df8641b455..5c10c69d1c1 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -1011,14 +1011,16 @@ static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, if(coba==NULL) return; - bt= uiDefBut(block, BUT, redraw, "Add", 80+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Adds a new color position to the colorband"); + uiBlockBeginAlign(block); + bt= uiDefBut(block, BUT, redraw, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Adds a new color position to the colorband"); uiButSetFunc(bt, colorband_add_cb, coba, NULL); - uiDefButS(block, NUM, redraw, "Cur:", 117+xoffs,95+yoffs,81,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active color from the colorband"); - bt= uiDefBut(block, BUT, redraw, "Del", 199+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Deletes the active position"); + uiDefButS(block, NUM, redraw, "Cur:", 50+xoffs,100+yoffs,100,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active color from the colorband"); + bt= uiDefBut(block, BUT, redraw, "Del", 150+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Deletes the active position"); uiButSetFunc(bt, colorband_del_cb, coba, NULL); uiDefButS(block, MENU, redraw, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", - 236+xoffs, 95+yoffs, 64, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation type"); + 200+xoffs, 100+yoffs, 100, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation type"); + uiBlockEndAlign(block); uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, ""); @@ -1059,7 +1061,6 @@ static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, uiDefBut(block, BUT_COLORBAND, event, "", xs,butr->ymin,butr->xmax-butr->xmin,20.0f, coba, 0, 0, 0, 0, ""); uiBlockEndAlign(block); - } void colorband_buttons(uiBlock *block, ColorBand *coba, rctf *butr, int small) diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h index c6a1a2b45e2..a1059038777 100644 --- a/source/blender/makesdna/DNA_lamp_types.h +++ b/source/blender/makesdna/DNA_lamp_types.h @@ -104,8 +104,9 @@ typedef struct Lamp { float YF_glowint, YF_glowofs; short YF_glowtype, YF_pad2; - struct MTex *mtex[18]; /* MAX_MTEX */ struct Ipo *ipo; // XXX depreceated... old animation system + struct MTex *mtex[18]; /* MAX_MTEX */ + short pr_texture, pad[3]; /* preview */ struct PreviewImage *preview; diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index fd73d371d87..a2ead6fc33d 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -326,12 +326,6 @@ typedef struct Material { #define MA_HAIR 10 #define MA_ATMOS 11 -/* pr_texture */ -#define MA_PR_TEXTURE 0 -#define MA_PR_MATERIAL 1 -#define MA_PR_BOTH 2 - - /* pr_back */ #define MA_DARK 1 diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h index f37d9eca282..6b7bfbdcd83 100644 --- a/source/blender/makesdna/DNA_texture_types.h +++ b/source/blender/makesdna/DNA_texture_types.h @@ -341,6 +341,11 @@ typedef struct TexMapping { #define TEX_RGB 1 #define TEX_NOR 2 +/* pr_texture in material, world, lamp, */ +#define TEX_PR_TEXTURE 0 +#define TEX_PR_OTHER 1 +#define TEX_PR_BOTH 2 + /* **************** MTEX ********************* */ /* proj */ diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h index b6e387fbede..31f0727cf73 100644 --- a/source/blender/makesdna/DNA_world_types.h +++ b/source/blender/makesdna/DNA_world_types.h @@ -119,6 +119,7 @@ typedef struct World { struct Ipo *ipo; // XXX depreceated... old animation system struct MTex *mtex[18]; /* MAX_MTEX */ + short pr_texture, pad[3]; /* previews */ struct PreviewImage *preview; diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index bbe3b1dedb3..fe14870cf6f 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -141,10 +141,24 @@ static void rna_def_lamp_mtex(BlenderRNA *brna) prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_COL); RNA_def_property_ui_text(prop, "Color", "Lets the texture affect the basic color of the lamp."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_shadow", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_SHAD); RNA_def_property_ui_text(prop, "Shadow", "Lets the texture affect the shadow color of the lamp."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Color Factor", "Amount texture affects color values."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "shadow_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Shadow Factor", "Amount texture affects shadow."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); } static void rna_def_lamp_sky_settings(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index c8ee0479f61..6686d43d075 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -244,15 +244,15 @@ static void rna_def_material_mtex(BlenderRNA *brna) prop= RNA_def_property(srna, "from_dupli", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_DUPLI_MAPTO); - RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent (only for UV and Orco texture coordinates)."); + RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent."); prop= RNA_def_property(srna, "from_original", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_OB_DUPLI_ORIG); RNA_def_property_ui_text(prop, "From Original", "Dupli's derive their object coordinates from the original objects transformation."); - prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_colordiff", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL); - RNA_def_property_ui_text(prop, "Color", "Causes the texture to affect basic color of the material"); + RNA_def_property_ui_text(prop, "Diffuse Color", "Causes the texture to affect basic color of the material"); prop= RNA_def_property(srna, "map_normal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_NORM); @@ -260,19 +260,19 @@ static void rna_def_material_mtex(BlenderRNA *brna) prop= RNA_def_property(srna, "map_colorspec", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLSPEC); - RNA_def_property_ui_text(prop, "Specularity Color", "Causes the texture to affect the specularity color"); + RNA_def_property_ui_text(prop, "Specular Color", "Causes the texture to affect the specularity color"); prop= RNA_def_property(srna, "map_mirror", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLMIR); RNA_def_property_ui_text(prop, "Mirror", "Causes the texture to affect the mirror color"); - prop= RNA_def_property(srna, "map_reflection", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_diffuse", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REF); - RNA_def_property_ui_text(prop, "Reflection", "Causes the texture to affect the value of the materials reflectivity"); + RNA_def_property_ui_text(prop, "Diffuse", "Causes the texture to affect the value of the materials diffuse reflectivity"); - prop= RNA_def_property(srna, "map_specularity", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "map_specular", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SPEC); - RNA_def_property_ui_text(prop, "Specularity", "Causes the texture to affect the value of specularity"); + RNA_def_property_ui_text(prop, "Specular", "Causes the texture to affect the value of specular reflectivity"); prop= RNA_def_property(srna, "map_ambient", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_AMB); @@ -336,21 +336,91 @@ static void rna_def_material_mtex(BlenderRNA *brna) /* XXX: MTex.k */ - prop= RNA_def_property(srna, "displacement_factor", PROP_FLOAT, PROP_VECTOR); + prop= RNA_def_property(srna, "displacement_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "dispfac"); - RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Displacement Factor", "Amount texture displaces the surface."); - prop= RNA_def_property(srna, "warp_factor", PROP_FLOAT, PROP_VECTOR); + prop= RNA_def_property(srna, "warp_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "warpfac"); - RNA_def_property_range(prop, 0, 1); - RNA_def_property_ui_text(prop, "Warp Factor", "Amount texture affects color values."); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Warp Factor", "Amount texture affects texture coordinates of next channels."); + + prop= RNA_def_property(srna, "colorspec_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Specular Color Factor", "Amount texture affects specular color."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "colordiff_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Diffuse Color Factor", "Amount texture affects diffuse color."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "mirror_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Mirror Factor", "Amount texture affects mirror color."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "alpha_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Alpha Factor", "Amount texture affects alpha."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "diffuse_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Diffuse Factor", "Amount texture affects diffuse reflectivity."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "specular_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Specular Factor", "Amount texture affects specular reflectivity."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "emit_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Emit Factor", "Amount texture affects emission."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "hardness_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Hardness Factor", "Amount texture affects hardness."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "raymir_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Ray Mirror Factor", "Amount texture affects ray mirror."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "translucency_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Translucency Factor", "Amount texture affects translucency."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "ambient_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Ambient Factor", "Amount texture affects ambient."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_MaterialTextureSlot_enabled_get", "rna_MaterialTextureSlot_enabled_set"); RNA_def_property_ui_text(prop, "Enabled", "Enable this material texture slot."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); + /*prop= RNA_def_property(srna, "new_bump", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP); + RNA_def_property_ui_text(prop, "New Bump", "Use new, corrected bump mapping code (backwards compatibility option)."); + RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);*/ } static void rna_def_material_colors(StructRNA *srna) @@ -784,13 +854,13 @@ static void rna_def_material_sss(BlenderRNA *brna) prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sss_colfac"); - RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Color Factor", "Blend factor for SSS colors."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); prop= RNA_def_property(srna, "texture_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sss_texfac"); - RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Texture Factor", "Texture scatting blend factor."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 9ba98d766cc..2573ad8394a 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -41,6 +41,8 @@ #ifdef RNA_RUNTIME +#include "BKE_texture.h" + StructRNA *rna_Texture_refine(struct PointerRNA *ptr) { Tex *tex= (Tex*)ptr->data; @@ -97,6 +99,17 @@ static void rna_TextureSlot_name_get(PointerRNA *ptr, char *str) strcpy(str, ""); } +static void rna_Texture_use_color_ramp_set(PointerRNA *ptr, int value) +{ + Tex *tex= (Tex*)ptr->data; + + if(value) tex->flag |= TEX_COLORBAND; + else tex->flag &= ~TEX_COLORBAND; + + if((tex->flag & TEX_COLORBAND) && tex->coba == NULL) + tex->coba= add_colorband(0); +} + #else static void rna_def_color_ramp_element(BlenderRNA *brna) @@ -277,25 +290,19 @@ static void rna_def_mtex(BlenderRNA *brna) prop= RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "def_var"); - RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Default Value", "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard."); RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "variable_factor", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "varfac"); - RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Variable Factor", "Amount texture affects other values."); RNA_def_property_update(prop, NC_TEXTURE, NULL); - prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_VECTOR); - RNA_def_property_float_sdna(prop, NULL, "colfac"); - RNA_def_property_range(prop, 0, 1); - RNA_def_property_ui_text(prop, "Color Factor", "Amount texture affects color values."); - RNA_def_property_update(prop, NC_TEXTURE, NULL); - prop= RNA_def_property(srna, "normal_factor", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "norfac"); - RNA_def_property_range(prop, 0, 25); + RNA_def_property_ui_range(prop, 0, 5, 10, 3); RNA_def_property_ui_text(prop, "Normal Factor", "Amount texture affects normal values."); RNA_def_property_update(prop, NC_TEXTURE, NULL); } @@ -744,6 +751,7 @@ static void rna_def_texture_image(BlenderRNA *brna) prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP); + //RNA_def_property_boolean_funcs(prop, NULL, "rna_ImageTexture_mipmap_set"); RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image"); RNA_def_property_update(prop, NC_TEXTURE, NULL); @@ -1120,7 +1128,7 @@ static void rna_def_texture(BlenderRNA *brna) {TEX_BLEND, "BLEND", 0, "Blend", ""}, {TEX_STUCCI, "STUCCI", 0, "Stucci", ""}, {TEX_NOISE, "NOISE", 0, "Noise", ""}, - {TEX_IMAGE, "IMAGE", 0, "Image/Movie", ""}, + {TEX_IMAGE, "IMAGE", 0, "Image or Movie", ""}, {TEX_PLUGIN, "PLUGIN", 0, "Plugin", ""}, {TEX_ENVMAP, "ENVIRONMENT_MAP", 0, "Environment Map", ""}, {TEX_MUSGRAVE, "MUSGRAVE", 0, "Musgrave", ""}, @@ -1139,6 +1147,12 @@ static void rna_def_texture(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Type", ""); RNA_def_property_update(prop, NC_TEXTURE, NULL); + prop= RNA_def_property(srna, "use_color_ramp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_COLORBAND); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Texture_use_color_ramp_set"); + RNA_def_property_ui_text(prop, "Use Color Ramp", "Toggle color ramp operations."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + prop= RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL); RNA_def_property_pointer_sdna(prop, NULL, "coba"); RNA_def_property_struct_type(prop, "ColorRamp"); diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index b88a2d50d7e..67ade9998ed 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -286,6 +286,11 @@ void RNA_api_ui_layout(StructRNA *srna) func= RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); + + func= RNA_def_function(srna, "template_texture_image", "uiTemplateTextureImage"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + parm= RNA_def_pointer(func, "texture", "Texture", "", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); } #endif diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index b40f3de43ef..c3032326a3d 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -117,18 +117,22 @@ static void rna_def_world_mtex(BlenderRNA *brna) prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND); RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ); RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP); RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN); RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); /* unused prop= RNA_def_property(srna, "map_mist", PROP_BOOLEAN, PROP_NONE); @@ -139,12 +143,38 @@ static void rna_def_world_mtex(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "texco"); RNA_def_property_enum_items(prop, texco_items); RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "object"); RNA_def_property_struct_type(prop, "Object"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "blend_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "varfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Blend Factor", "Amount texture affects color progression of the background."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "horizon_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Horizon Factor", "Amount texture affects color of the horizon."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "zenith_up_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Zenith Up Factor", "Amount texture affects color of the zenith above."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "zenith_down_factor", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "colfac"); + RNA_def_property_ui_range(prop, 0, 1, 10, 3); + RNA_def_property_ui_text(prop, "Zenith Down Factor", "Amount texture affects color of the zenith below."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); } static void rna_def_ambient_occlusion(BlenderRNA *brna) From ea0b015b0a1c73fb1899a4d9040704a7d85fda9c Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 13:12:40 +0000 Subject: [PATCH 311/512] 2.5 - Copy/Paste Operators for Armatures * Buttons in header now use operators too. The paste-flipped button needs attention though, since the flipped argument isn't set yet * Assigned Ctrl-C, Ctrl-V, and Ctrl-Shift-V to Copy/Paste/Paste-Flipped respectively for now. * Auto-Keying for this doesn't work again yet. On todo for later... --- * Also, new armatures now get the flag to show custom bone colours enabled by default. --- source/blender/blenkernel/intern/armature.c | 1 + .../editors/armature/armature_intern.h | 3 + .../blender/editors/armature/armature_ops.c | 9 + source/blender/editors/armature/poseobject.c | 154 +++++++++++++----- .../editors/space_view3d/view3d_header.c | 30 ++-- 5 files changed, 139 insertions(+), 58 deletions(-) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 62194caa658..37130a0e3a0 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -83,6 +83,7 @@ bArmature *add_armature(char *name) arm= alloc_libblock (&G.main->armature, ID_AR, name); arm->deformflag = ARM_DEF_VGROUP|ARM_DEF_ENVELOPE; + arm->flag = ARM_COL_CUSTOM; /* custom bone-group colors */ arm->layer= 1; return arm; } diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h index 9ea7b1174a5..7b3f9a020e3 100644 --- a/source/blender/editors/armature/armature_intern.h +++ b/source/blender/editors/armature/armature_intern.h @@ -64,6 +64,9 @@ void POSE_OT_rot_clear(struct wmOperatorType *ot); void POSE_OT_loc_clear(struct wmOperatorType *ot); void POSE_OT_scale_clear(struct wmOperatorType *ot); +void POSE_OT_copy(struct wmOperatorType *ot); +void POSE_OT_paste(struct wmOperatorType *ot); + void POSE_OT_select_all_toggle(struct wmOperatorType *ot); void POSE_OT_select_inverse(struct wmOperatorType *ot); void POSE_OT_select_parent(struct wmOperatorType *ot); diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 84bddbf0725..bf4ec09f3fb 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -147,6 +147,9 @@ void ED_operatortypes_armature(void) WM_operatortype_append(POSE_OT_loc_clear); WM_operatortype_append(POSE_OT_scale_clear); + WM_operatortype_append(POSE_OT_copy); + WM_operatortype_append(POSE_OT_paste); + WM_operatortype_append(POSE_OT_select_all_toggle); WM_operatortype_append(POSE_OT_select_inverse); @@ -238,6 +241,12 @@ void ED_keymap_armature(wmWindowManager *wm) WM_keymap_add_item(keymap, "POSE_OT_loc_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "POSE_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0); + // for now, we include hotkeys for copy/paste + WM_keymap_add_item(keymap, "POSE_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "POSE_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); + kmi= WM_keymap_add_item(keymap, "POSE_OT_paste", VKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "flipped", 1); + WM_keymap_add_item(keymap, "POSE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "POSE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index eface169387..9814a056b70 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -63,6 +63,7 @@ #include "BKE_modifier.h" #include "BKE_object.h" #include "BKE_utildefines.h" +#include "BKE_report.h" #include "BIF_gl.h" @@ -779,81 +780,132 @@ void pose_copy_menu(Scene *scene) /* ******************** copy/paste pose ********************** */ -static bPose *g_posebuf=NULL; +/* Global copy/paste buffer for pose - cleared on start/end session + before every copy operation */ +static bPose *g_posebuf = NULL; void free_posebuf(void) { if (g_posebuf) { - // was copied without constraints - BLI_freelistN (&g_posebuf->chanbase); - MEM_freeN (g_posebuf); + /* was copied without constraints */ + BLI_freelistN(&g_posebuf->chanbase); + MEM_freeN(g_posebuf); } + g_posebuf=NULL; } -void copy_posebuf (Scene *scene) -{ - Object *ob= OBACT; +/* ---- */ - if (!ob || !ob->pose){ - error ("No Pose"); - return; +static int pose_copy_exec (bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_active_object(C); + + /* sanity checking */ + if ELEM(NULL, ob, ob->pose) { + BKE_report(op->reports, RPT_ERROR, "No Pose to Copy"); + return OPERATOR_CANCELLED; } + /* free existing pose buffer */ free_posebuf(); - set_pose_keys(ob); // sets chan->flag to POSE_KEY if bone selected + /* sets chan->flag to POSE_KEY if bone selected, then copy those bones to the buffer */ + set_pose_keys(ob); copy_pose(&g_posebuf, ob->pose, 0); - + + + return OPERATOR_FINISHED; } -void paste_posebuf (Scene *scene, int flip) +void POSE_OT_copy (wmOperatorType *ot) { - Object *ob= OBACT; - bPoseChannel *chan, *pchan; - float eul[4]; - char name[32]; + /* identifiers */ + ot->name= "Copy Pose"; + ot->idname= "POSE_OT_copy"; + ot->description= "Copies the current pose of the selected bones to copy/paste buffer."; - if (!ob || !ob->pose) - return; + /* api callbacks */ + ot->exec= pose_copy_exec; + ot->poll= ED_operator_posemode; + + /* flag */ + ot->flag= OPTYPE_REGISTER; +} - if (!g_posebuf){ - error ("Copy buffer is empty"); - return; +/* ---- */ + +static int pose_paste_exec (bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_active_object(C); + bPoseChannel *chan, *pchan; + char name[32]; + int flip= RNA_boolean_get(op->ptr, "flipped"); + + /* sanity checks */ + if ELEM(NULL, ob, ob->pose) + return OPERATOR_CANCELLED; + + if (g_posebuf == NULL) { + BKE_report(op->reports, RPT_ERROR, "Copy buffer is empty"); + return OPERATOR_CANCELLED; } - /* - // disabled until protected bones in proxies follow the rules everywhere else! - if(pose_has_protected_selected(ob, 1, 1)) - return; - */ - - /* Safely merge all of the channels in this pose into - any existing pose */ - for (chan=g_posebuf->chanbase.first; chan; chan=chan->next) { + /* Safely merge all of the channels in the buffer pose into any existing pose */ + for (chan= g_posebuf->chanbase.first; chan; chan=chan->next) { if (chan->flag & POSE_KEY) { + /* get the name - if flipping, we must flip this first */ BLI_strncpy(name, chan->name, sizeof(name)); if (flip) - bone_flip_name (name, 0); // 0 = don't strip off number extensions + bone_flip_name(name, 0); /* 0 = don't strip off number extensions */ /* only copy when channel exists, poses are not meant to add random channels to anymore */ pchan= get_pose_channel(ob->pose, name); if (pchan) { - /* only loc rot size */ - /* only copies transform info for the pose */ + /* only loc rot size + * - only copies transform info for the pose + */ VECCOPY(pchan->loc, chan->loc); VECCOPY(pchan->size, chan->size); - QUATCOPY(pchan->quat, chan->quat); pchan->flag= chan->flag; + /* check if rotation modes are compatible (i.e. do they need any conversions) */ + if (pchan->rotmode == chan->rotmode) { + /* copy the type of rotation in use */ + if (pchan->rotmode) { + VECCOPY(pchan->eul, chan->eul); + } + else { + QUATCOPY(pchan->quat, chan->quat); + } + } + else if (pchan->rotmode) { + /* quat to euler */ + QuatToEul(chan->quat, pchan->eul); + } + else { + /* euler to quat */ + EulToQuat(chan->eul, pchan->quat); + } + + /* paste flipped pose? */ if (flip) { pchan->loc[0]*= -1; - QuatToEul(pchan->quat, eul); - eul[1]*= -1; - eul[2]*= -1; - EulToQuat(eul, pchan->quat); + /* has to be done as eulers... */ + if (pchan->rotmode) { + pchan->eul[1] *= -1; + pchan->eul[2] *= -1; + } + else { + float eul[3]; + + QuatToEul(pchan->quat, eul); + eul[1]*= -1; + eul[2]*= -1; + EulToQuat(eul, pchan->quat); + } } #if 0 // XXX old animation system @@ -861,6 +913,7 @@ void paste_posebuf (Scene *scene, int flip) ID *id= &ob->id; /* Set keys on pose */ + // TODO: make these use keyingsets.... if (chan->flag & POSE_ROT) { insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, 0); insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, 0); @@ -903,8 +956,29 @@ void paste_posebuf (Scene *scene, int flip) where_is_pose(scene, ob); ob->recalc= 0; } + + /* notifiers for updates */ + WM_event_add_notifier(C, NC_OBJECT|ND_POSE|ND_TRANSFORM, ob); - BIF_undo_push("Paste Action Pose"); + return OPERATOR_FINISHED; +} + +void POSE_OT_paste (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Paste Pose"; + ot->idname= "POSE_OT_paste"; + ot->description= "Pastes the stored pose on to the current pose."; + + /* api callbacks */ + ot->exec= pose_paste_exec; + ot->poll= ED_operator_posemode; + + /* flag */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "flipped", 0, "Flipped on X-Axis", ""); } /* ********************************************** */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index edffa39cb8c..4781e0e0108 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -3175,13 +3175,13 @@ static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_un uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Pose as Restpose|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Current Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Flipped Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); #endif + + uiItemO(layout, "Copy Current Pose", 0, "POSE_OT_copy"); + uiItemO(layout, "Paste Pose", 0, "POSE_OT_paste"); + uiItemBooleanO(layout, "Paste X-Flipped Pose", 0, "POSE_OT_paste", "flipped", 1); + + uiItemS(layout); uiItemMenuF(layout, "Pose Library", 0, view3d_pose_armature_poselibmenu); //uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu); @@ -4492,24 +4492,18 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) uiDefIconBut(block, BUT, B_VIEWRENDER, ICON_SCENE, xco,yco,XIC,YIC, NULL, 0, 1.0, 0, 0, "Render this window (Ctrl Click for anim)"); - if (ob && (ob->flag & OB_POSEMODE)) { - xco+= XIC/2; + xco+= XIC; uiBlockBeginAlign(block); - uiDefIconBut(block, BUT, B_ACTCOPY, ICON_COPYDOWN, - xco,yco,XIC,YIC, 0, 0, 0, 0, 0, - "Copies the current pose to the buffer"); + uiDefIconButO(block, BUT, "POSE_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, NULL); uiBlockSetButLock(block, object_data_is_libdata(ob), "Can't edit external libdata"); xco+= XIC; - - uiDefIconBut(block, BUT, B_ACTPASTE, ICON_PASTEDOWN, - xco,yco,XIC,YIC, 0, 0, 0, 0, 0, - "Pastes the pose from the buffer"); + + uiDefIconButO(block, BUT, "POSE_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, NULL); xco+= XIC; - uiDefIconBut(block, BUT, B_ACTPASTEFLIP, ICON_PASTEFLIPDOWN, - xco,yco,XIC,YIC, 0, 0, 0, 0, 0, - "Pastes the mirrored pose from the buffer"); + // FIXME: this needs an extra arg... + uiDefIconButO(block, BUT, "POSE_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEFLIPDOWN, xco,yco,XIC,YIC, NULL); uiBlockEndAlign(block); header_xco_step(ar, &xco, &yco, &maxco, XIC); From e3c6ae9b89d1d0c7bb6957f81b9fd9a89477b2d0 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 13:20:35 +0000 Subject: [PATCH 312/512] 2.5: Texture Filtering Patch by Alfredo de Greef with high quality image texture filters. This adds 3 new filters: * SAT: Summed Area Tables. This is like mipmaps, but using somewhat more memory avoids some artifacts. * EWA: Ellipitical Weighted Average, anisotropic filter. * FELINE: Fast elliptical lines for anisotropic texture mapping. The one change I made to this was to try to fix an alpha/premul problem, hopefully I didn't break anything, it looks compatible with the existing filter now for me. --- release/ui/buttons_texture.py | 4 +- source/blender/blenkernel/intern/texture.c | 5 +- source/blender/blenloader/intern/readfile.c | 6 + .../editors/interface/interface_templates.c | 8 +- .../editors/space_view3d/view3d_draw.c | 2 +- source/blender/imbuf/IMB_imbuf.h | 2 +- source/blender/imbuf/intern/filter.c | 88 +- source/blender/makesdna/DNA_texture_types.h | 13 +- source/blender/makesrna/intern/rna_texture.c | 59 +- .../render/intern/source/imagetexture.c | 947 +++++++++++++++++- source/blender/render/intern/source/texture.c | 50 +- 11 files changed, 1119 insertions(+), 65 deletions(-) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 7367805a395..d86cec17d01 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -426,19 +426,17 @@ class TEXTURE_PT_image_sampling(TextureButtonsPanel): sub = split.column() sub.itemL(text="Filter:") - #sub.itemR(tex, "filter", text="") + sub.itemR(tex, "filter", text="") sub.itemR(tex, "mipmap") row = sub.row() row.itemR(tex, "mipmap_gauss", text="Gauss") row.active = tex.mipmap sub.itemR(tex, "interpolation") - """ if tex.mipmap and tex.filter != 'DEFAULT': if tex.filter == 'FELINE': sub.itemR(tex, "filter_probes", text="Probes") else: sub.itemR(tex, "filter_eccentricity", text="Eccentricity") - """ class TEXTURE_PT_image_mapping(TextureButtonsPanel): __idname__= "TEXTURE_PT_image_mapping" diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index bcdea06936f..db864dc9f1e 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -435,12 +435,15 @@ void default_tex(Tex *tex) VarStruct *varstr; int a; + tex->type= TEX_CLOUDS; tex->stype= 0; tex->flag= TEX_CHECKER_ODD; - tex->imaflag= TEX_INTERPOL+TEX_MIPMAP+TEX_USEALPHA; + tex->imaflag= TEX_INTERPOL|TEX_MIPMAP|TEX_USEALPHA; tex->extend= TEX_REPEAT; tex->cropxmin= tex->cropymin= 0.0; tex->cropxmax= tex->cropymax= 1.0; + tex->texfilter = TXF_DEFAULT; + tex->afmax = 8; tex->xrepeat= tex->yrepeat= 1; tex->fie_ima= 2; tex->sfra= 1; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index c43c720bad0..6da444bc88e 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9273,6 +9273,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) World *wo; Object *ob; Material *ma; + Tex *tex; Scene *sce; ToolSettings *ts; int i; @@ -9349,6 +9350,11 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } + /* texture filter */ + for(tex = main->tex.first; tex; tex = tex->id.next) + if(tex->afmax == 0) + tex->afmax= 8; + for(ma = main->mat.first; ma; ma = ma->id.next) { if(ma->mode & MA_HALO) { ma->material_type= MA_TYPE_HALO; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index f8d1e1d7ab9..8b01c341565 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1215,10 +1215,10 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent) uiBlockSetHandleFunc(block, do_preview_buttons, NULL); /* add buttons */ - if(id) { - if(GS(id->name) == ID_MA || (parent && GS(parent->name) == ID_MA)) { - if(GS(id->name) == ID_MA) ma= (Material*)id; - else ma= (Material*)parent; + if(pid) { + if(GS(pid->name) == ID_MA || (pparent && GS(pparent->name) == ID_MA)) { + if(GS(pid->name) == ID_MA) ma= (Material*)pid; + else ma= (Material*)pparent; uiLayoutColumn(row, 1); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index dd4e67e612c..d80a26e50f8 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1345,7 +1345,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) int mip= 0; if(ibuf->mipmap[0]==NULL) - IMB_makemipmap(ibuf, 0); + IMB_makemipmap(ibuf, 0, 0); while(tzoom < 1.0f && mip<8 && ibuf->mipmap[mip]) { tzoom*= 2.0f; diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h index 1d8035a2358..d2f561438b9 100644 --- a/source/blender/imbuf/IMB_imbuf.h +++ b/source/blender/imbuf/IMB_imbuf.h @@ -319,7 +319,7 @@ void IMB_antialias(struct ImBuf * ibuf); void IMB_filter(struct ImBuf *ibuf); void IMB_filterN(struct ImBuf *out, struct ImBuf *in); void IMB_filter_extend(struct ImBuf *ibuf, char *mask); -void IMB_makemipmap(struct ImBuf *ibuf, int use_filter); +void IMB_makemipmap(struct ImBuf *ibuf, int use_filter, int SAT); /** * diff --git a/source/blender/imbuf/intern/filter.c b/source/blender/imbuf/intern/filter.c index 9802405fd8d..cc3315c7696 100644 --- a/source/blender/imbuf/intern/filter.c +++ b/source/blender/imbuf/intern/filter.c @@ -371,6 +371,7 @@ void IMB_filter_extend(struct ImBuf *ibuf, char *mask) } } +#if 0 void IMB_makemipmap(ImBuf *ibuf, int use_filter) { ImBuf *hbuf= ibuf; @@ -394,5 +395,90 @@ void IMB_makemipmap(ImBuf *ibuf, int use_filter) minsize= hbuf->xy?hbuf->x:hbuf->y; } } +#endif - +void IMB_makemipmap(ImBuf *ibuf, int use_filter, int SAT) +{ + if (SAT) { + // to maximize precision subtract image average, use intermediate double SAT, + // only convert to float at the end + const double dv = 1.0/255.0; + double avg[4] = {0, 0, 0, 0}; + const int x4 = ibuf->x << 2; + int x, y, i; + ImBuf* sbuf = IMB_allocImBuf(ibuf->x, ibuf->y, 32, IB_rectfloat, 0); + double *satp, *satbuf = MEM_callocN(sizeof(double)*ibuf->x*ibuf->y*4, "tmp SAT buf"); + const double mf = ibuf->x*ibuf->y; + float* fp; + ibuf->mipmap[0] = sbuf; + if (ibuf->rect_float) { + fp = ibuf->rect_float; + for (y=0; yy; ++y) + for (x=0; xx; ++x) { + avg[0] += *fp++; + avg[1] += *fp++; + avg[2] += *fp++; + avg[3] += *fp++; + } + } + else { + char* cp = (char*)ibuf->rect; + for (y=0; yy; ++y) + for (x=0; xx; ++x) { + avg[0] += *cp++ * dv; + avg[1] += *cp++ * dv; + avg[2] += *cp++ * dv; + avg[3] += *cp++ * dv; + } + } + avg[0] /= mf; + avg[1] /= mf; + avg[2] /= mf; + avg[3] /= mf; + for (y=0; yy; ++y) + for (x=0; xx; ++x) { + const unsigned int p = (x + y*ibuf->x) << 2; + char* cp = (char*)ibuf->rect + p; + fp = ibuf->rect_float + p; + satp = satbuf + p; + for (i=0; i<4; ++i, ++cp, ++fp, ++satp) { + double sv = (ibuf->rect_float ? (double)*fp : (double)(*cp)*dv) - avg[i]; + if (x > 0) sv += satp[-4]; + if (y > 0) sv += satp[-x4]; + if (x > 0 && y > 0) sv -= satp[-x4 - 4]; + *satp = sv; + } + } + fp = sbuf->rect_float; + satp = satbuf; + for (y=0; yy; ++y) + for (x=0; xx; ++x) { + *fp++ = (float)*satp++; + *fp++ = (float)*satp++; + *fp++ = (float)*satp++; + *fp++ = (float)*satp++; + } + MEM_freeN(satbuf); + fp = &sbuf->rect_float[(sbuf->x - 1 + (sbuf->y - 1)*sbuf->x) << 2]; + fp[0] = avg[0]; + fp[1] = avg[1]; + fp[2] = avg[2]; + fp[3] = avg[3]; + } + else { + ImBuf *hbuf = ibuf; + int curmap = 0; + while (curmap < IB_MIPMAP_LEVELS) { + if (use_filter) { + ImBuf *nbuf= IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect, 0); + IMB_filterN(nbuf, hbuf); + ibuf->mipmap[curmap] = IMB_onehalf(nbuf); + IMB_freeImBuf(nbuf); + } + else ibuf->mipmap[curmap] = IMB_onehalf(hbuf); + hbuf = ibuf->mipmap[curmap]; + if (hbuf->x == 1 && hbuf->y == 1) break; + curmap++; + } + } +} diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h index 6b7bfbdcd83..e1dd21a8ccb 100644 --- a/source/blender/makesdna/DNA_texture_types.h +++ b/source/blender/makesdna/DNA_texture_types.h @@ -150,11 +150,13 @@ typedef struct Tex { /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */ short noisebasis, noisebasis2; - + short imaflag, flag; short type, stype; float cropxmin, cropymin, cropxmax, cropymax; + int texfilter; + int afmax; // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes short xrepeat, yrepeat; short extend; @@ -253,6 +255,15 @@ typedef struct TexMapping { #define TEX_GAUSS_MIP 4096 #define TEX_FILTER_MIN 8192 +/* texfilter */ +// TXF_DEFAULT -> blender's old texture filtering method +#define TXF_DEFAULT 0 +#define TXF_EWA 1 +#define TXF_FELINE 2 +#define TXF_AREA 3 +// TXF_SAT only available when mipmaps disabled +#define TXF_SAT 4 + /* imaflag unused, only for version check */ #define TEX_FIELDS_ 8 #define TEX_ANIMCYCLIC_ 64 diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 2573ad8394a..330d38502ce 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -39,6 +39,14 @@ #include "WM_types.h" +static EnumPropertyItem texture_filter_items[] = { + {TXF_DEFAULT, "DEFAULT", 0, "Default", ""}, + {TXF_EWA, "EWA", 0, "EWA", ""}, + {TXF_FELINE, "FELINE", 0, "FELINE", ""}, + {TXF_AREA, "AREA", 0, "Area", ""}, + {TXF_SAT, "SAT", 0, "SAT (4x mem)", ""}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME #include "BKE_texture.h" @@ -110,6 +118,35 @@ static void rna_Texture_use_color_ramp_set(PointerRNA *ptr, int value) tex->coba= add_colorband(0); } +static void rna_ImageTexture_mipmap_set(PointerRNA *ptr, int value) +{ + Tex *tex= (Tex*)ptr->data; + + if(value) tex->imaflag |= TEX_MIPMAP; + else tex->imaflag &= ~TEX_MIPMAP; + + if((tex->imaflag & TEX_MIPMAP) && tex->texfilter == TXF_SAT) + tex->texfilter = TXF_DEFAULT; +} + +static EnumPropertyItem *rna_ImageTexture_filter_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + Tex *tex= (Tex*)ptr->data; + EnumPropertyItem *item= NULL; + int totitem= 0; + + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_DEFAULT); + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_EWA); + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_FELINE); + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_AREA); + if(tex->imaflag & TEX_MIPMAP) + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_SAT); + + *free= 1; + + return item; +} + #else static void rna_def_color_ramp_element(BlenderRNA *brna) @@ -751,7 +788,7 @@ static void rna_def_texture_image(BlenderRNA *brna) prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP); - //RNA_def_property_boolean_funcs(prop, NULL, "rna_ImageTexture_mipmap_set"); + RNA_def_property_boolean_funcs(prop, NULL, "rna_ImageTexture_mipmap_set"); RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image"); RNA_def_property_update(prop, NC_TEXTURE, NULL); @@ -889,6 +926,26 @@ static void rna_def_texture_image(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Image", ""); RNA_def_property_update(prop, NC_TEXTURE, NULL); + + /* filtering */ + prop= RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "texfilter"); + RNA_def_property_enum_items(prop, texture_filter_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_ImageTexture_filter_itemf"); + RNA_def_property_ui_text(prop, "Filter", "Texture filter to use for sampling image."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "filter_probes", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "afmax"); + RNA_def_property_range(prop, 1, 256); + RNA_def_property_ui_text(prop, "Filter Probes", "Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); + + prop= RNA_def_property(srna, "filter_eccentricity", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "afmax"); + RNA_def_property_range(prop, 1, 256); + RNA_def_property_ui_text(prop, "Filter Eccentricity", "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); } static void rna_def_texture_plugin(BlenderRNA *brna) diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index b9a2acb8b1c..743dbb72e7c 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -416,6 +416,107 @@ static float clipy_rctf(rctf *rf, float y1, float y2) } +// used in SAT_get_color_bilerp() below +static void SAT_getcol(float* col, ImBuf* ibuf, int x, int y) +{ + if ((x == (ibuf->x - 1)) && (y == (ibuf->y - 1))) { // avg val pos + col[0] = col[1] = col[2] = col[3] = 0.f; + return; + } + ibuf_get_color(col, ibuf, x, y); +} + +// used in boxsampleclip_SAT() below +static void SAT_get_color_bilerp(float *col, ImBuf *ibuf, float u, float v) +{ + float c00[4], c01[4], c10[4], c11[4]; + const float ufl = floorf(u -= 0.5f), vfl = floorf(v -= 0.5f); + const float uf = u - ufl, vf = v - vfl; + const float w00=(1.f-uf)*(1.f-vf), w10=uf*(1.f-vf), w01=(1.f-uf)*vf, w11=uf*vf; + int x1 = (int)ufl, y1 = (int)vfl, x2 = x1 + 1, y2 = y1 + 1; + x1 = (x1 < 0) ? 0 : (x1 >= ibuf->x ? ibuf->x - 1 : x1); + x2 = (x2 < 0) ? 0 : (x2 >= ibuf->x ? ibuf->x - 1 : x2); + y1 = (y1 < 0) ? 0 : (y1 >= ibuf->y ? ibuf->y - 1 : y1); + y2 = (y2 < 0) ? 0 : (y2 >= ibuf->y ? ibuf->y - 1 : y2); + SAT_getcol(c00, ibuf, x1, y1); + SAT_getcol(c10, ibuf, x2, y1); + SAT_getcol(c01, ibuf, x1, y2); + SAT_getcol(c11, ibuf, x2, y2); + col[0] = w00*c00[0] + w10*c10[0] + w01*c01[0] + w11*c11[0]; + col[1] = w00*c00[1] + w10*c10[1] + w01*c01[1] + w11*c11[1]; + col[2] = w00*c00[2] + w10*c10[2] + w01*c01[2] + w11*c11[2]; + col[3] = w00*c00[3] + w10*c10[3] + w01*c01[3] + w11*c11[3]; +} + +static void boxsampleclip_SAT(ImBuf *ibuf, rctf *rf, TexResult *texres, int intpol) +{ + float div, col[4]; + if (intpol) { + div = 1.f/((rf->xmax - rf->xmin + 1.f)*(rf->ymax - rf->ymin + 1.f)); + SAT_get_color_bilerp(&texres->tr, ibuf, rf->xmax, rf->ymax); + if (rf->ymin >= 1.f) { + SAT_get_color_bilerp(col, ibuf, rf->xmax, rf->ymin - 1.f); + texres->tr -= col[0]; + texres->tg -= col[1]; + texres->tb -= col[2]; + texres->ta -= col[3]; + } + if (rf->xmin >= 1.f) { + SAT_get_color_bilerp(col, ibuf, rf->xmin - 1.f, rf->ymax); + texres->tr -= col[0]; + texres->tg -= col[1]; + texres->tb -= col[2]; + texres->ta -= col[3]; + } + if (rf->xmin >= 1.f && rf->ymin >= 1.f) { + SAT_get_color_bilerp(col, ibuf, rf->xmin - 1.f, rf->ymin - 1.f); + texres->tr += col[0]; + texres->tg += col[1]; + texres->tb += col[2]; + texres->ta += col[3]; + } + } + else { + int startx = (int)floorf(rf->xmin); + int endx = (int)floorf(rf->xmax); + int starty = (int)floorf(rf->ymin); + int endy = (int)floorf(rf->ymax); + if (startx < 0) startx = 0; + if (starty < 0) starty = 0; + if (endx >= ibuf->x) endx = ibuf->x - 1; + if (endy >= ibuf->y) endy = ibuf->y - 1; + div = 1.f/((endx - startx + 1)*(endy - starty + 1)); + SAT_getcol(&texres->tr, ibuf, endx, endy); + if (starty >= 1) { + SAT_getcol(col, ibuf, endx, starty - 1); + texres->tr -= col[0]; + texres->tg -= col[1]; + texres->tb -= col[2]; + texres->ta -= col[3]; + } + if (startx >= 1) { + SAT_getcol(col, ibuf, startx - 1, endy); + texres->tr -= col[0]; + texres->tg -= col[1]; + texres->tb -= col[2]; + texres->ta -= col[3]; + } + if (startx >=1 && starty >= 1) { + SAT_getcol(col, ibuf, startx - 1, starty - 1); + texres->tr += col[0]; + texres->tg += col[1]; + texres->tb += col[2]; + texres->ta += col[3]; + } + } + // avg + ibuf_get_color(col, ibuf, ibuf->x - 1, ibuf->y - 1); + texres->tr = texres->tr*div + col[0]; + texres->tg = texres->tg*div + col[1]; + texres->tb = texres->tb*div + col[2]; + texres->ta = texres->ta*div + col[3]; +} + static void boxsampleclip(struct ImBuf *ibuf, rctf *rf, TexResult *texres) { /* sample box, is clipped already, and minx etc. have been set at ibuf size. @@ -485,6 +586,7 @@ static void boxsampleclip(struct ImBuf *ibuf, rctf *rf, TexResult *texres) } } } + if(div!=0.0) { div= 1.0f/div; texres->tb*= div; @@ -498,13 +600,13 @@ static void boxsampleclip(struct ImBuf *ibuf, rctf *rf, TexResult *texres) } } -static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, int imaprepeat, int imapextend) +static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, int imaprepeat, int imapextend, int SAT, int intpol) { /* Sample box, performs clip. minx etc are in range 0.0 - 1.0 . - * Enlarge with antialiased edges of pixels. - * If variable 'imaprepeat' has been set, the - * clipped-away parts are sampled as well. - */ + * Enlarge with antialiased edges of pixels. + * If variable 'imaprepeat' has been set, the + * clipped-away parts are sampled as well. + */ /* note: actually minx etc isnt in the proper range... this due to filter size and offset vectors for bump */ TexResult texr; rctf *rf, stack[8]; @@ -552,7 +654,10 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max if(count>1) { tot= texres->tr= texres->tb= texres->tg= texres->ta= 0.0; while(count--) { - boxsampleclip(ibuf, rf, &texr); + if (SAT) + boxsampleclip_SAT(ibuf, rf, &texr, intpol); + else + boxsampleclip(ibuf, rf, &texr); opp= square_rctf(rf); tot+= opp; @@ -571,7 +676,10 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max } } else { - boxsampleclip(ibuf, rf, texres); + if (SAT) + boxsampleclip_SAT(ibuf, rf, texres, intpol); + else + boxsampleclip(ibuf, rf, texres); } if(texres->talpha==0) texres->ta= 1.0; @@ -598,7 +706,7 @@ void image_sample(Image *ima, float fx, float fy, float dx, float dy, float *res if( (R.flag & R_SEC_FIELD) && (ibuf->flags & IB_fields) ) ibuf->rect+= (ibuf->x*ibuf->y); - boxsample(ibuf, fx, fy, fx+dx, fy+dy, &texres, 0, 1); + boxsample(ibuf, fx, fy, fx+dx, fy+dy, &texres, 0, 1, 0, 0); result[0]= texres.tr; result[1]= texres.tg; result[2]= texres.tb; @@ -617,7 +725,7 @@ void ibuf_sample(ImBuf *ibuf, float fx, float fy, float dx, float dy, float *res } memset(&texres, 0, sizeof(texres)); - boxsample(ibuf, fx, fy, fx+dx, fy+dy, &texres, 0, 1); + boxsample(ibuf, fx, fy, fx+dx, fy+dy, &texres, 0, 1, 0, 0); result[0]= texres.tr; result[1]= texres.tg; result[2]= texres.tb; @@ -625,13 +733,777 @@ void ibuf_sample(ImBuf *ibuf, float fx, float fy, float dx, float dy, float *res } +//----------------------------------------------------------------------------------------------------------------- +// from here, some functions only used for the new filtering -int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, float *dyt, TexResult *texres) +// this only used here to make it easier to pass extend flags as single int +enum {TXC_XMIR=1, TXC_YMIR, TXC_REPT, TXC_EXTD}; + +// similar to ibuf_get_color() but clips/wraps coords according to repeat/extend flags +// returns true if out of range in clipmode +static int ibuf_get_color_clip(float *col, ImBuf *ibuf, int x, int y, int extflag) +{ + int clip = 0; + switch (extflag) { + case TXC_XMIR: // y rep + x %= 2*ibuf->x; + x += x < 0 ? 2*ibuf->x : 0; + x = x >= ibuf->x ? 2*ibuf->x - x - 1 : x; + y %= ibuf->y; + y += y < 0 ? ibuf->y : 0; + break; + case TXC_YMIR: // x rep + x %= ibuf->x; + x += x < 0 ? ibuf->x : 0; + y %= 2*ibuf->y; + y += y < 0 ? 2*ibuf->y : 0; + y = y >= ibuf->y ? 2*ibuf->y - y - 1 : y; + break; + case TXC_EXTD: + x = (x < 0) ? 0 : ((x >= ibuf->x) ? (ibuf->x - 1) : x); + y = (y < 0) ? 0 : ((y >= ibuf->y) ? (ibuf->y - 1) : y); + break; + case TXC_REPT: + x %= ibuf->x; + x += (x < 0) ? ibuf->x : 0; + y %= ibuf->y; + y += (y < 0) ? ibuf->y : 0; + break; + default: { // as extend, if clipped, set alpha to 0.0 + if (x < 0) { x = 0; } // TXF alpha: clip = 1; } + if (x >= ibuf->x) { x = ibuf->x - 1; } // TXF alpha: clip = 1; } + if (y < 0) { y = 0; } // TXF alpha: clip = 1; } + if (y >= ibuf->y) { y = ibuf->y - 1; } // TXF alpha: clip = 1; } + } + } + + if (ibuf->rect_float) { + const float* fp = ibuf->rect_float + (x + y*ibuf->x)*ibuf->channels; + if (ibuf->channels == 1) + col[0] = col[1] = col[2] = col[3] = *fp; + else { + col[0] = fp[0]; + col[1] = fp[1]; + col[2] = fp[2]; + col[3] = clip ? 0.f : (ibuf->channels == 4 ? fp[3] : 1.f); + } + } + else { + char* rect = (char*)(ibuf->rect + x + y*ibuf->x); + col[0] = rect[0]*(1.f/255.f); + col[1] = rect[1]*(1.f/255.f); + col[2] = rect[2]*(1.f/255.f); + col[3] = clip ? 0.f : rect[3]*(1.f/255.f); + } + return clip; +} + +// as above + bilerp +static int ibuf_get_color_clip_bilerp(float *col, ImBuf *ibuf, float u, float v, int intpol, int extflag) +{ + if (intpol) { + float c00[4], c01[4], c10[4], c11[4]; + const float ufl = floorf(u -= 0.5f), vfl = floorf(v -= 0.5f); + const float uf = u - ufl, vf = v - vfl; + const float w00=(1.f-uf)*(1.f-vf), w10=uf*(1.f-vf), w01=(1.f-uf)*vf, w11=uf*vf; + const int x1 = (int)ufl, y1 = (int)vfl, x2 = x1 + 1, y2 = y1 + 1; + int clip = ibuf_get_color_clip(c00, ibuf, x1, y1, extflag); + clip |= ibuf_get_color_clip(c10, ibuf, x2, y1, extflag); + clip |= ibuf_get_color_clip(c01, ibuf, x1, y2, extflag); + clip |= ibuf_get_color_clip(c11, ibuf, x2, y2, extflag); + col[0] = w00*c00[0] + w10*c10[0] + w01*c01[0] + w11*c11[0]; + col[1] = w00*c00[1] + w10*c10[1] + w01*c01[1] + w11*c11[1]; + col[2] = w00*c00[2] + w10*c10[2] + w01*c01[2] + w11*c11[2]; + col[3] = clip ? 0.f : w00*c00[3] + w10*c10[3] + w01*c01[3] + w11*c11[3]; + return clip; + } + return ibuf_get_color_clip(col, ibuf, (int)u, (int)v, extflag); +} + +// anisotropic filters, data struct used instead of long line of (possibly unused) func args +typedef struct afdata_t { + float *dxt, *dyt; + int intpol, extflag; + // feline only + float majrad, minrad, theta; + int iProbes; + float dusc, dvsc; +} afdata_t; + +static void area_sample(TexResult* texr, ImBuf* ibuf, float fx, float fy, afdata_t* AFD) +{ + int xs, ys, clip = 0; + float tc[4], xsd, ysd, cw = 0.f; + const float ux = ibuf->x*AFD->dxt[0], uy = ibuf->y*AFD->dxt[1]; + const float vx = ibuf->x*AFD->dyt[0], vy = ibuf->y*AFD->dyt[1]; + int xsam = (int)(0.5f*sqrtf(ux*ux + uy*uy) + 0.5f); + int ysam = (int)(0.5f*sqrtf(vx*vx + vy*vy) + 0.5f); + const int minsam = AFD->intpol ? 2 : 4; + xsam = xsam < minsam ? minsam : xsam; + ysam = ysam < minsam ? minsam : ysam; + xsd = 1.f / xsam; + ysd = 1.f / ysam; + texr->tr = texr->tg = texr->tb = texr->ta = 0.f; + for (ys=0; ysdxt[0] + sv*AFD->dyt[0]; + const float pv = fy + su*AFD->dxt[1] + sv*AFD->dyt[1]; + const int out = ibuf_get_color_clip_bilerp(tc, ibuf, pu*ibuf->x, pv*ibuf->y, AFD->intpol, AFD->extflag); + clip |= out; + cw += out ? 0.f : 1.f; + texr->tr += tc[0]; + texr->tg += tc[1]; + texr->tb += tc[2]; + texr->ta += texr->talpha ? tc[3] : 0.f; + } + } + xsd *= ysd; + texr->tr *= xsd; + texr->tg *= xsd; + texr->tb *= xsd; + // clipping can be ignored if alpha used, texr->ta already includes filtered edge + texr->ta = texr->talpha ? texr->ta*xsd : (clip ? cw*xsd : 1.f); +} + +// table of (exp(ar) - exp(a)) / (1 - exp(a)) for r in range [0, 1] and a = -2 +// used instead of actual gaussian, otherwise at high texture magnifications circular artifacts are visible +#define EWA_MAXIDX 255 +static float EWA_WTS[EWA_MAXIDX + 1] = +{ 1.f, 0.990965f, 0.982f, 0.973105f, 0.96428f, 0.955524f, 0.946836f, 0.938216f, 0.929664f, + 0.921178f, 0.912759f, 0.904405f, 0.896117f, 0.887893f, 0.879734f, 0.871638f, 0.863605f, + 0.855636f, 0.847728f, 0.839883f, 0.832098f, 0.824375f, 0.816712f, 0.809108f, 0.801564f, + 0.794079f, 0.786653f, 0.779284f, 0.771974f, 0.76472f, 0.757523f, 0.750382f, 0.743297f, + 0.736267f, 0.729292f, 0.722372f, 0.715505f, 0.708693f, 0.701933f, 0.695227f, 0.688572f, + 0.68197f, 0.67542f, 0.66892f, 0.662471f, 0.656073f, 0.649725f, 0.643426f, 0.637176f, + 0.630976f, 0.624824f, 0.618719f, 0.612663f, 0.606654f, 0.600691f, 0.594776f, 0.588906f, + 0.583083f, 0.577305f, 0.571572f, 0.565883f, 0.56024f, 0.55464f, 0.549084f, 0.543572f, + 0.538102f, 0.532676f, 0.527291f, 0.521949f, 0.516649f, 0.511389f, 0.506171f, 0.500994f, + 0.495857f, 0.490761f, 0.485704f, 0.480687f, 0.475709f, 0.470769f, 0.465869f, 0.461006f, + 0.456182f, 0.451395f, 0.446646f, 0.441934f, 0.437258f, 0.432619f, 0.428017f, 0.42345f, + 0.418919f, 0.414424f, 0.409963f, 0.405538f, 0.401147f, 0.39679f, 0.392467f, 0.388178f, + 0.383923f, 0.379701f, 0.375511f, 0.371355f, 0.367231f, 0.363139f, 0.359079f, 0.355051f, + 0.351055f, 0.347089f, 0.343155f, 0.339251f, 0.335378f, 0.331535f, 0.327722f, 0.323939f, + 0.320186f, 0.316461f, 0.312766f, 0.3091f, 0.305462f, 0.301853f, 0.298272f, 0.294719f, + 0.291194f, 0.287696f, 0.284226f, 0.280782f, 0.277366f, 0.273976f, 0.270613f, 0.267276f, + 0.263965f, 0.26068f, 0.257421f, 0.254187f, 0.250979f, 0.247795f, 0.244636f, 0.241502f, + 0.238393f, 0.235308f, 0.232246f, 0.229209f, 0.226196f, 0.223206f, 0.220239f, 0.217296f, + 0.214375f, 0.211478f, 0.208603f, 0.20575f, 0.20292f, 0.200112f, 0.197326f, 0.194562f, + 0.191819f, 0.189097f, 0.186397f, 0.183718f, 0.18106f, 0.178423f, 0.175806f, 0.17321f, + 0.170634f, 0.168078f, 0.165542f, 0.163026f, 0.16053f, 0.158053f, 0.155595f, 0.153157f, + 0.150738f, 0.148337f, 0.145955f, 0.143592f, 0.141248f, 0.138921f, 0.136613f, 0.134323f, + 0.132051f, 0.129797f, 0.12756f, 0.125341f, 0.123139f, 0.120954f, 0.118786f, 0.116635f, + 0.114501f, 0.112384f, 0.110283f, 0.108199f, 0.106131f, 0.104079f, 0.102043f, 0.100023f, + 0.0980186f, 0.09603f, 0.094057f, 0.0920994f, 0.0901571f, 0.08823f, 0.0863179f, 0.0844208f, + 0.0825384f, 0.0806708f, 0.0788178f, 0.0769792f, 0.0751551f, 0.0733451f, 0.0715493f, 0.0697676f, + 0.0679997f, 0.0662457f, 0.0645054f, 0.0627786f, 0.0610654f, 0.0593655f, 0.0576789f, 0.0560055f, + 0.0543452f, 0.0526979f, 0.0510634f, 0.0494416f, 0.0478326f, 0.0462361f, 0.0446521f, 0.0430805f, + 0.0415211f, 0.039974f, 0.0384389f, 0.0369158f, 0.0354046f, 0.0339052f, 0.0324175f, 0.0309415f, + 0.029477f, 0.0280239f, 0.0265822f, 0.0251517f, 0.0237324f, 0.0223242f, 0.020927f, 0.0195408f, + 0.0181653f, 0.0168006f, 0.0154466f, 0.0141031f, 0.0127701f, 0.0114476f, 0.0101354f, 0.00883339f, + 0.00754159f, 0.00625989f, 0.00498819f, 0.00372644f, 0.00247454f, 0.00123242f, 0.f +}; + +// test if a float value is 'nan' +// there is a C99 function for this: isnan(), but blender seems to use C90 (according to gcc warns), +// and may not be supported by other compilers either +#ifndef ISNAN +#define ISNAN(x) ((x) != (x)) +#endif +//static int ISNAN(float x) { return (x != x); } + +static void radangle2imp(float a2, float b2, float th, float* A, float* B, float* C, float* F) +{ + float ct2 = cosf(th); + const float st2 = 1.f - ct2*ct2; // <- sin(th)^2 + ct2 *= ct2; + *A = a2*st2 + b2*ct2; + *B = (b2 - a2)*sinf(2.f*th); + *C = a2*ct2 + b2*st2; + *F = a2*b2; +} + +// all tests here are done to make sure possible overflows are hopefully minimized +static void imp2radangle(float A, float B, float C, float F, float* a, float* b, float* th, float* ecc) +{ + if (F <= 1e-5f) { // use arbitrary major radius, zero minor, infinite eccentricity + *a = sqrtf(A > C ? A : C); + *b = 0.f; + *ecc = 1e10f; + *th = 0.5f*(atan2f(B, A - C) + (float)M_PI); + } + else { + const float AmC = A - C, ApC = A + C, F2 = F*2.f; + const float r = sqrtf(AmC*AmC + B*B); + float d = ApC - r; + *a = (d <= 0.f) ? sqrtf(A > C ? A : C) : sqrtf(F2 / d); + d = ApC + r; + if (d <= 0.f) { + *b = 0.f; + *ecc = 1e10f; + } + else { + *b = sqrtf(F2 / d); + *ecc = *a / *b; + } + // incr theta by 0.5*pi (angle of major axis) + *th = 0.5f*(atan2f(B, AmC) + (float)M_PI); + } +} + +static void ewa_eval(TexResult* texr, ImBuf* ibuf, float fx, float fy, afdata_t* AFD) +{ + // scaling dxt/dyt by full resolution can cause overflow because of huge A/B/C and esp. F values, + // scaling by aspect ratio alone does the opposite, so try something inbetween instead... + const float ff2 = ibuf->x, ff = sqrtf(ff2), q = ibuf->y / ff; + const float Ux = AFD->dxt[0]*ff, Vx = AFD->dxt[1]*q, Uy = AFD->dyt[0]*ff, Vy = AFD->dyt[1]*q; + float A = Vx*Vx + Vy*Vy; + float B = -2.f*(Ux*Vx + Uy*Vy); + float C = Ux*Ux + Uy*Uy; + float F = A*C - B*B*0.25f; + float a, b, th, ecc, a2, b2, ue, ve, U0, V0, DDQ, U, ac1, ac2, BU, d; // TXF alpha: cw = 0.f; + int u, v, u1, u2, v1, v2; // TXF alpha: clip = 0; + + // The so-called 'high' quality ewa method simply adds a constant of 1 to both A & C, + // so the ellipse always covers at least some texels. But since the filter is now always larger, + // it also means that everywhere else it's also more blurry then ideally should be the case. + // So instead here the ellipse radii are modified instead whenever either is too low. + // Use a different radius based on interpolation switch, just enough to anti-alias when interpolation is off, + // and slightly larger to make result a bit smoother than bilinear interpolation when interpolation is on + // (minimum values: const float rmin = intpol ? 1.f : 0.5f;) + const float rmin = (AFD->intpol ? 1.5625f : 0.765625f)/ff2; + imp2radangle(A, B, C, F, &a, &b, &th, &ecc); + if ((b2 = b*b) < rmin) { + if ((a2 = a*a) < rmin) { + B = 0.f; + A = C = rmin; + F = A*C; + } + else { + b2 = rmin; + radangle2imp(a2, b2, th, &A, &B, &C, &F); + } + } + + ue = ff*sqrtf(C); + ve = ff*sqrtf(A); + d = (float)(EWA_MAXIDX + 1) / (F*ff2); + A *= d; + B *= d; + C *= d; + + U0 = fx*ibuf->x; + V0 = fy*ibuf->y; + u1 = (int)(floorf(U0 - ue)); + u2 = (int)(ceilf(U0 + ue)); + v1 = (int)(floorf(V0 - ve)); + v2 = (int)(ceilf(V0 + ve)); + U0 -= 0.5f; + V0 -= 0.5f; + DDQ = 2.f*A; + U = u1 - U0; + ac1 = A*(2.f*U + 1.f); + ac2 = A*U*U; + BU = B*U; + + d = texr->tr = texr->tb = texr->tg = texr->ta = 0.f; + for (v=v1; v<=v2; ++v) { + const float V = v - V0; + float DQ = ac1 + B*V; + float Q = (C*V + BU)*V + ac2; + for (u=u1; u<=u2; ++u) { + if (Q < (float)(EWA_MAXIDX + 1)) { + float tc[4]; + const float wt = EWA_WTS[(Q < 0.f) ? 0 : (unsigned int)Q]; + /*const int out =*/ ibuf_get_color_clip(tc, ibuf, u, v, AFD->extflag); + // TXF alpha: clip |= out; + // TXF alpha: cw += out ? 0.f : wt; + texr->tr += tc[0]*wt; + texr->tg += tc[1]*wt; + texr->tb += tc[2]*wt; + texr->ta += texr->talpha ? tc[3]*wt : 0.f; + d += wt; + } + Q += DQ; + DQ += DDQ; + } + } + + // d should hopefully never be zero anymore + d = 1.f/d; + texr->tr *= d; + texr->tg *= d; + texr->tb *= d; + // clipping can be ignored if alpha used, texr->ta already includes filtered edge + texr->ta = texr->talpha ? texr->ta*d : 1.f; // TXF alpha (clip ? cw*d : 1.f); +} + +static void feline_eval(TexResult* texr, ImBuf* ibuf, float fx, float fy, afdata_t* AFD) +{ + const int maxn = AFD->iProbes - 1; + const float ll = ((AFD->majrad == AFD->minrad) ? 2.f*AFD->majrad : 2.f*(AFD->majrad - AFD->minrad)) / (maxn ? (float)maxn : 1.f); + float du = maxn ? cosf(AFD->theta)*ll : 0.f; + float dv = maxn ? sinf(AFD->theta)*ll : 0.f; + //const float D = -0.5f*(du*du + dv*dv) / (AFD->majrad*AFD->majrad); + const float D = (EWA_MAXIDX + 1)*0.25f*(du*du + dv*dv) / (AFD->majrad*AFD->majrad); + float d; // TXF alpha: cw = 0.f; + int n; // TXF alpha: clip = 0; + // have to use same scaling for du/dv here as for Ux/Vx/Uy/Vy (*after* D calc.) + du *= AFD->dusc; + dv *= AFD->dvsc; + d = texr->tr = texr->tb = texr->tg = texr->ta = 0.f; + for (n=-maxn; n<=maxn; n+=2) { + float tc[4]; + const float hn = n*0.5f; + const float u = fx + hn*du, v = fy + hn*dv; + //const float wt = expf(n*n*D); + // can use ewa table here too + const float wt = EWA_WTS[(int)(n*n*D)]; + /*const int out =*/ ibuf_get_color_clip_bilerp(tc, ibuf, ibuf->x*u, ibuf->y*v, AFD->intpol, AFD->extflag); + // TXF alpha: clip |= out; + // TXF alpha: cw += out ? 0.f : wt; + texr->tr += tc[0]*wt; + texr->tg += tc[1]*wt; + texr->tb += tc[2]*wt; + texr->ta += texr->talpha ? tc[3]*wt : 0.f; + d += wt; + } + + d = 1.f/d; + texr->tr *= d; + texr->tg *= d; + texr->tb *= d; + // clipping can be ignored if alpha used, texr->ta already includes filtered edge + texr->ta = texr->talpha ? texr->ta*d : 1.f; // TXF alpha: (clip ? cw*d : 1.f); +} +#undef EWA_MAXIDX + +static void alpha_clip_aniso(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, int extflag, TexResult *texres) +{ + float alphaclip; + rctf rf; + + // TXF apha: we're doing the same alphaclip here as boxsample, but i'm doubting + // if this is actually correct for the all the filtering algorithms .. + + if(!(extflag == TXC_REPT || extflag == TXC_EXTD)) { + rf.xmin= minx*(ibuf->x); + rf.xmax= maxx*(ibuf->x); + rf.ymin= miny*(ibuf->y); + rf.ymax= maxy*(ibuf->y); + + alphaclip = clipx_rctf(&rf, 0.0, (float)(ibuf->x)); + alphaclip*= clipy_rctf(&rf, 0.0, (float)(ibuf->y)); + alphaclip= MAX2(alphaclip, 0.0f); + + if(alphaclip!=1.0) { + /* premul it all */ + texres->tr*= alphaclip; + texres->tg*= alphaclip; + texres->tb*= alphaclip; + texres->ta*= alphaclip; + } + } +} + +static int imagewraposa_aniso(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, float *dyt, TexResult *texres) { TexResult texr; - float fx, fy, minx, maxx, miny, maxy, dx, dy; + float fx, fy, minx, maxx, miny, maxy; + float maxd, val1, val2, val3; + int curmap, retval, intpol, extflag = 0; + afdata_t AFD; + + void (*filterfunc)(TexResult*, ImBuf*, float, float, afdata_t*); + switch (tex->texfilter) { + case TXF_EWA: + filterfunc = ewa_eval; + break; + case TXF_FELINE: + filterfunc = feline_eval; + break; + case TXF_AREA: + default: + filterfunc = area_sample; + } + + texres->tin = texres->ta = texres->tr = texres->tg = texres->tb = 0.f; + + // we need to set retval OK, otherwise texture code generates normals itself... + retval = texres->nor ? 3 : 1; + + // quick tests + if (ibuf==NULL && ima==NULL) return retval; + + if (ima) { // hack for icon render + if ((ima->ibufs.first == NULL) && (R.r.scemode & R_NO_IMAGE_LOAD)) return retval; + ibuf = BKE_image_get_ibuf(ima, &tex->iuser); + } + + if ((ibuf == NULL) || ((ibuf->rect == NULL) && (ibuf->rect_float == NULL))) return retval; + + // mipmap test + if (tex->imaflag & TEX_MIPMAP) { + if (((ibuf->flags & IB_fields) == 0) && (ibuf->mipmap[0] == NULL)) { + BLI_lock_thread(LOCK_IMAGE); + if (ibuf->mipmap[0] == NULL) IMB_makemipmap(ibuf, tex->imaflag & TEX_GAUSS_MIP, 0); + BLI_unlock_thread(LOCK_IMAGE); + } + } + + if ((tex->imaflag & TEX_USEALPHA) && ((tex->imaflag & TEX_CALCALPHA) == 0)) texres->talpha = 1; + texr.talpha = texres->talpha; + + if (tex->imaflag & TEX_IMAROT) { + fy = texvec[0]; + fx = texvec[1]; + } + else { + fx = texvec[0]; + fy = texvec[1]; + } + + if (ibuf->flags & IB_fields) { + if (R.r.mode & R_FIELDS) { /* field render */ + if (R.flag & R_SEC_FIELD) { /* correction for 2nd field */ + /* fac1= 0.5/( (float)ibuf->y ); */ + /* fy-= fac1; */ + } + else /* first field */ + fy += 0.5f/( (float)ibuf->y ); + } + } + + // pixel coordinates + minx = MIN3(dxt[0], dyt[0], dxt[0] + dyt[0]); + maxx = MAX3(dxt[0], dyt[0], dxt[0] + dyt[0]); + miny = MIN3(dxt[1], dyt[1], dxt[1] + dyt[1]); + maxy = MAX3(dxt[1], dyt[1], dxt[1] + dyt[1]); + + // tex_sharper has been removed + minx = (maxx - minx)*0.5f; + miny = (maxy - miny)*0.5f; + + if (tex->imaflag & TEX_FILTER_MIN) { + // make sure the filtersize is minimal in pixels (normal, ref map can have miniature pixel dx/dy) + const float addval = (0.5f * tex->filtersize) / (float)MIN2(ibuf->x, ibuf->y); + if (addval > minx) minx = addval; + if (addval > miny) miny = addval; + } + else if (tex->filtersize != 1.f) { + minx *= tex->filtersize; + miny *= tex->filtersize; + dxt[0] *= tex->filtersize; + dxt[1] *= tex->filtersize; + dyt[0] *= tex->filtersize; + dyt[1] *= tex->filtersize; + } + + if (tex->imaflag & TEX_IMAROT) { + float t; + SWAP(float, minx, miny); + // must rotate dxt/dyt 90 deg + // yet another blender problem is that swapping X/Y axes (or any tex proj switches) should do something similar, + // but it doesn't, it only swaps coords, so filter area will be incorrect in those cases. + t = dxt[0]; + dxt[0] = dxt[1]; + dxt[1] = -t; + t = dyt[0]; + dyt[0] = dyt[1]; + dyt[1] = -t; + } + + // side faces of unit-cube + minx = (minx > 0.25f) ? 0.25f : ((minx < 1e-5f) ? 1e-5 : minx); + miny = (miny > 0.25f) ? 0.25f : ((miny < 1e-5f) ? 1e-5 : miny); + + // repeat and clip + + if (tex->extend == TEX_REPEAT) { + if ((tex->flag & (TEX_REPEAT_XMIR | TEX_REPEAT_YMIR)) == (TEX_REPEAT_XMIR | TEX_REPEAT_YMIR)) + extflag = TXC_EXTD; + else if (tex->flag & TEX_REPEAT_XMIR) + extflag = TXC_XMIR; + else if (tex->flag & TEX_REPEAT_YMIR) + extflag = TXC_YMIR; + else + extflag = TXC_REPT; + } + else if (tex->extend == TEX_EXTEND) + extflag = TXC_EXTD; + + if (tex->extend == TEX_CHECKER) { + int xs = (int)floorf(fx), ys = (int)floorf(fy); + // both checkers available, no boundary exceptions, checkerdist will eat aliasing + if ((tex->flag & TEX_CHECKER_ODD) && (tex->flag & TEX_CHECKER_EVEN)) { + fx -= xs; + fy -= ys; + } + else { + int xs1 = (int)floorf(fx - minx); + int ys1 = (int)floorf(fy - miny); + int xs2 = (int)floorf(fx + minx); + int ys2 = (int)floorf(fy + miny); + if ((xs1 != xs2) || (ys1 != ys2)) { + if (tex->flag & TEX_CHECKER_ODD) { + fx -= ((xs1 + ys) & 1) ? xs2 : xs1; + fy -= ((ys1 + xs) & 1) ? ys2 : ys1; + } + if (tex->flag & TEX_CHECKER_EVEN) { + fx -= ((xs1 + ys) & 1) ? xs1 : xs2; + fy -= ((ys1 + xs) & 1) ? ys1 : ys2; + } + } + else { + if ((tex->flag & TEX_CHECKER_ODD) == 0 && ((xs + ys) & 1) == 0) return retval; + if ((tex->flag & TEX_CHECKER_EVEN) == 0 && (xs + ys) & 1) return retval; + fx -= xs; + fy -= ys; + } + } + // scale around center, (0.5, 0.5) + if (tex->checkerdist < 1.f) { + const float omcd = 1.f / (1.f - tex->checkerdist); + fx = (fx - 0.5f)*omcd + 0.5f; + fy = (fy - 0.5f)*omcd + 0.5f; + minx *= omcd; + miny *= omcd; + } + } + + if (tex->extend == TEX_CLIPCUBE) { + if ((fx + minx) < 0.f || (fy + miny) < 0.f || (fx - minx) > 1.f || (fy - miny) > 1.f || texvec[2] < -1.f || texvec[2] > 1.f) return retval; + } + else if (tex->extend == TEX_CLIP || tex->extend == TEX_CHECKER) { + if ((fx + minx) < 0.f || (fy + miny) < 0.f || (fx - minx) > 1.f || (fy - miny) > 1.f) return retval; + } + else { + if (tex->extend == TEX_EXTEND) { + fx = (fx > 1.f) ? 1.f : ((fx < 0.f) ? 0.f : fx); + fy = (fy > 1.f) ? 1.f : ((fy < 0.f) ? 0.f : fy); + } + else { + fx -= floorf(fx); + fy -= floorf(fy); + } + } + + intpol = tex->imaflag & TEX_INTERPOL; + + // warning no return! + if ((R.flag & R_SEC_FIELD) && (ibuf->flags & IB_fields)) + ibuf->rect += ibuf->x*ibuf->y; + + // struct common data + AFD.dxt = dxt; + AFD.dyt = dyt; + AFD.intpol = intpol; + AFD.extflag = extflag; + + // choice: + if (tex->imaflag & TEX_MIPMAP) { + ImBuf *previbuf, *curibuf; + float levf; + int maxlev; + ImBuf* mipmaps[IB_MIPMAP_LEVELS + 1]; + + // modify ellipse minor axis if too eccentric, use for area sampling as well + // scaling dxt/dyt as done in pbrt is not the same + // (as in ewa_eval(), scale by sqrt(ibuf->x) to maximize precision) + const float ff = sqrtf(ibuf->x), q = ibuf->y/ff; + const float Ux = dxt[0]*ff, Vx = dxt[1]*q, Uy = dyt[0]*ff, Vy = dyt[1]*q; + const float A = Vx*Vx + Vy*Vy; + const float B = -2.f*(Ux*Vx + Uy*Vy); + const float C = Ux*Ux + Uy*Uy; + const float F = A*C - B*B*0.25f; + float a, b, th, ecc; + imp2radangle(A, B, C, F, &a, &b, &th, &ecc); + if (tex->texfilter == TXF_FELINE) { + float fProbes; + a *= ff; + b *= ff; + a = MAX2(a, 1.f); + b = MAX2(b, 1.f); + fProbes = 2.f*(a / b) - 1.f; + AFD.iProbes = (int)floorf(fProbes + 0.5f); + AFD.iProbes = MIN2(AFD.iProbes, tex->afmax); + if (AFD.iProbes < fProbes) + b = 2.f*a / (float)(AFD.iProbes + 1); + AFD.majrad = a/ff; + AFD.minrad = b/ff; + AFD.theta = th; + AFD.dusc = 1.f/ff; + AFD.dvsc = ff / (float)ibuf->y; + } + else { // EWA & area + if (ecc > (float)tex->afmax) b = a / (float)tex->afmax; + b *= ff; + } + maxd = MAX2(b, 1e-8f); + levf = logf(maxd)*(float)M_LOG2E; + + curmap = 0; + maxlev = 1; + mipmaps[0] = ibuf; + while (curmap < IB_MIPMAP_LEVELS) { + mipmaps[curmap + 1] = ibuf->mipmap[curmap]; + if (ibuf->mipmap[curmap]) maxlev++; + curmap++; + } + + // mipmap level + if (levf < 0.f) { // original image only + previbuf = curibuf = mipmaps[0]; + levf = 0.f; + } + else if (levf >= maxlev - 1) { + previbuf = curibuf = mipmaps[maxlev - 1]; + levf = 0.f; + if (tex->texfilter == TXF_FELINE) AFD.iProbes = 1; + } + else { + const int lev = ISNAN(levf) ? 0 : (int)levf; + curibuf = mipmaps[lev]; + previbuf = mipmaps[lev + 1]; + levf -= floorf(levf); + } + + // filter functions take care of interpolation themselves, no need to modify dxt/dyt here + + if (texres->nor && ((tex->imaflag & TEX_NORMALMAP) == 0)) { + // color & normal + filterfunc(texres, curibuf, fx, fy, &AFD); + val1 = texres->tr + texres->tg + texres->tb; + filterfunc(&texr, curibuf, fx + dxt[0], fy + dxt[1], &AFD); + val2 = texr.tr + texr.tg + texr.tb; + filterfunc(&texr, curibuf, fx + dyt[0], fy + dyt[1], &AFD); + val3 = texr.tr + texr.tg + texr.tb; + // don't switch x or y! + texres->nor[0] = val1 - val2; + texres->nor[1] = val1 - val3; + if (previbuf != curibuf) { // interpolate + filterfunc(&texr, previbuf, fx, fy, &AFD); + // rgb + texres->tr += levf*(texr.tr - texres->tr); + texres->tg += levf*(texr.tg - texres->tg); + texres->tb += levf*(texr.tb - texres->tb); + texres->ta += levf*(texr.ta - texres->ta); + // normal + val1 += levf*((texr.tr + texr.tg + texr.tb) - val1); + filterfunc(&texr, previbuf, fx + dxt[0], fy + dxt[1], &AFD); + val2 += levf*((texr.tr + texr.tg + texr.tb) - val2); + filterfunc(&texr, previbuf, fx + dyt[0], fy + dyt[1], &AFD); + val3 += levf*((texr.tr + texr.tg + texr.tb) - val3); + texres->nor[0] = val1 - val2; // vals have been interpolated above! + texres->nor[1] = val1 - val3; + } + } + else { // color + filterfunc(texres, curibuf, fx, fy, &AFD); + if (previbuf != curibuf) { // interpolate + filterfunc(&texr, previbuf, fx, fy, &AFD); + texres->tr += levf*(texr.tr - texres->tr); + texres->tg += levf*(texr.tg - texres->tg); + texres->tb += levf*(texr.tb - texres->tb); + texres->ta += levf*(texr.ta - texres->ta); + } + + alpha_clip_aniso(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, extflag, texres); + } + } + else { // no mipmap + // filter functions take care of interpolation themselves, no need to modify dxt/dyt here + if (tex->texfilter == TXF_FELINE) { + const float ff = sqrtf(ibuf->x), q = ibuf->y/ff; + const float Ux = dxt[0]*ff, Vx = dxt[1]*q, Uy = dyt[0]*ff, Vy = dyt[1]*q; + const float A = Vx*Vx + Vy*Vy; + const float B = -2.f*(Ux*Vx + Uy*Vy); + const float C = Ux*Ux + Uy*Uy; + const float F = A*C - B*B*0.25f; + float a, b, th, ecc, fProbes; + imp2radangle(A, B, C, F, &a, &b, &th, &ecc); + a *= ff; + b *= ff; + a = MAX2(a, 1.f); + b = MAX2(b, 1.f); + fProbes = 2.f*(a / b) - 1.f; + // no limit to number of Probes here + AFD.iProbes = (int)floorf(fProbes + 0.5f); + if (AFD.iProbes < fProbes) b = 2.f*a / (float)(AFD.iProbes + 1); + AFD.majrad = a/ff; + AFD.minrad = b/ff; + AFD.theta = th; + AFD.dusc = 1.f/ff; + AFD.dvsc = ff / (float)ibuf->y; + } + if (texres->nor && ((tex->imaflag & TEX_NORMALMAP) == 0)) { + // color & normal + filterfunc(texres, ibuf, fx, fy, &AFD); + val1 = texres->tr + texres->tg + texres->tb; + filterfunc(&texr, ibuf, fx + dxt[0], fy + dxt[1], &AFD); + val2 = texr.tr + texr.tg + texr.tb; + filterfunc(&texr, ibuf, fx + dyt[0], fy + dyt[1], &AFD); + val3 = texr.tr + texr.tg + texr.tb; + // don't switch x or y! + texres->nor[0] = val1 - val2; + texres->nor[1] = val1 - val3; + } + else { + filterfunc(texres, ibuf, fx, fy, &AFD); + alpha_clip_aniso(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, extflag, texres); + } + } + + BRICONTRGB; + + if (tex->imaflag & TEX_CALCALPHA) + texres->ta = texres->tin = texres->ta * MAX3(texres->tr, texres->tg, texres->tb); + else + texres->tin = texres->ta; + if (tex->flag & TEX_NEGALPHA) texres->ta = 1.f - texres->ta; + + if ((R.flag & R_SEC_FIELD) && (ibuf->flags & IB_fields)) + ibuf->rect -= ibuf->x*ibuf->y; + + if (texres->nor && (tex->imaflag & TEX_NORMALMAP)) { // normal from color + texres->nor[0] = 2.f*(texres->tr - 0.5f); + texres->nor[1] = 2.f*(0.5f - texres->tg); + texres->nor[2] = 2.f*(texres->tb - 0.5f); + } + + // de-premul, this is being premulled in shade_input_do_shade() + // TXF: this currently does not (yet?) work properly, destroys edge AA in clip/checker mode, so for now commented out + // also disabled in imagewraposa() to be able to compare results with blender's default texture filtering + + // brecht: tried to fix this, see "TXF alpha" comments + + if (texres->ta != 1.f && (texres->ta > FLT_EPSILON)) { + fx = 1.f/texres->ta; + texres->tr *= fx; + texres->tg *= fx; + texres->tb *= fx; + } + + return retval; +} + + +int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *DXT, float *DYT, TexResult *texres) +{ + TexResult texr; + float fx, fy, minx, maxx, miny, maxy, dx, dy, dxt[3], dyt[3]; float maxd, pixsize, val1, val2, val3; - int curmap, retval, imaprepeat, imapextend; + int curmap, retval, imaprepeat, imapextend, SAT = (tex->texfilter == TXF_SAT); + + // TXF: since dxt/dyt might be modified here and since they might be needed after imagewraposa() call, + // make a local copy here so that original vecs remain untouched + VECCOPY(dxt, DXT); + VECCOPY(dyt, DYT); + + // anisotropic filtering + if (!SAT && (tex->texfilter != TXF_DEFAULT)) + return imagewraposa_aniso(tex, ima, ibuf, texvec, dxt, dyt, texres); texres->tin= texres->ta= texres->tr= texres->tg= texres->tb= 0.0f; @@ -653,13 +1525,13 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f return retval; /* mipmap test */ - if(tex->imaflag & TEX_MIPMAP) { + if (SAT || tex->imaflag & TEX_MIPMAP) { if(ibuf->flags & IB_fields); else if(ibuf->mipmap[0]==NULL) { BLI_lock_thread(LOCK_IMAGE); if(ibuf->mipmap[0]==NULL) - IMB_makemipmap(ibuf, tex->imaflag & TEX_GAUSS_MIP); + IMB_makemipmap(ibuf, tex->imaflag & TEX_GAUSS_MIP, SAT); BLI_unlock_thread(LOCK_IMAGE); } @@ -871,11 +1743,11 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f //minx*= 1.35f; //miny*= 1.35f; - boxsample(curibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend); + boxsample(curibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend, 0, 0); val1= texres->tr+texres->tg+texres->tb; - boxsample(curibuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend); + boxsample(curibuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend, 0, 0); val2= texr.tr + texr.tg + texr.tb; - boxsample(curibuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend); + boxsample(curibuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend, 0, 0); val3= texr.tr + texr.tg + texr.tb; /* don't switch x or y! */ @@ -884,7 +1756,7 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f if(previbuf!=curibuf) { /* interpolate */ - boxsample(previbuf, fx-minx, fy-miny, fx+minx, fy+miny, &texr, imaprepeat, imapextend); + boxsample(previbuf, fx-minx, fy-miny, fx+minx, fy+miny, &texr, imaprepeat, imapextend, 0, 0); /* calc rgb */ dx= 2.0f*(pixsize-maxd)/pixsize; @@ -901,9 +1773,9 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f } val1= dy*val1+ dx*(texr.tr + texr.tg + texr.tb); - boxsample(previbuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend); + boxsample(previbuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend, 0, 0); val2= dy*val2+ dx*(texr.tr + texr.tg + texr.tb); - boxsample(previbuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend); + boxsample(previbuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend, 0, 0); val3= dy*val3+ dx*(texr.tr + texr.tg + texr.tb); texres->nor[0]= (val1-val2); /* vals have been interpolated above! */ @@ -926,10 +1798,10 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f maxy= fy+miny; miny= fy-miny; - boxsample(curibuf, minx, miny, maxx, maxy, texres, imaprepeat, imapextend); + boxsample(curibuf, minx, miny, maxx, maxy, texres, imaprepeat, imapextend, 0, 0); if(previbuf!=curibuf) { /* interpolate */ - boxsample(previbuf, minx, miny, maxx, maxy, &texr, imaprepeat, imapextend); + boxsample(previbuf, minx, miny, maxx, maxy, &texr, imaprepeat, imapextend, 0, 0); fx= 2.0f*(pixsize-maxd)/pixsize; @@ -947,26 +1819,39 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f } } else { - if((tex->imaflag & TEX_INTERPOL)) { + const int intpol = tex->imaflag & TEX_INTERPOL; + if (intpol && !SAT) { /* sample 1 pixel minimum */ if (minx < 0.5f / ibuf->x) minx = 0.5f / ibuf->x; if (miny < 0.5f / ibuf->y) miny = 0.5f / ibuf->y; } if(texres->nor && (tex->imaflag & TEX_NORMALMAP)==0) { - - boxsample(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend); - val1= texres->tr+texres->tg+texres->tb; - boxsample(ibuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend); - val2= texr.tr + texr.tg + texr.tb; - boxsample(ibuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend); - val3= texr.tr + texr.tg + texr.tb; + if (SAT) { + boxsample(ibuf->mipmap[0], fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend, 1, intpol); + val1 = texres->tr + texres->tg + texres->tb; + boxsample(ibuf->mipmap[0], fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend, 1, intpol); + val2 = texr.tr + texr.tg + texr.tb; + boxsample(ibuf->mipmap[0], fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend, 1, intpol); + val3 = texr.tr + texr.tg + texr.tb; + } + else { + boxsample(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend, 0, 0); + val1= texres->tr+texres->tg+texres->tb; + boxsample(ibuf, fx-minx+dxt[0], fy-miny+dxt[1], fx+minx+dxt[0], fy+miny+dxt[1], &texr, imaprepeat, imapextend, 0, 0); + val2= texr.tr + texr.tg + texr.tb; + boxsample(ibuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr, imaprepeat, imapextend, 0, 0); + val3= texr.tr + texr.tg + texr.tb; + } /* don't switch x or y! */ texres->nor[0]= (val1-val2); texres->nor[1]= (val1-val3); } else { - boxsample(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend); + if (SAT) + boxsample(ibuf->mipmap[0], fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend, 1, intpol); + else + boxsample(ibuf, fx-minx, fy-miny, fx+minx, fy+miny, texres, imaprepeat, imapextend, 0, 0); } } diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index e11bb0004b2..9466bd45420 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -984,7 +984,7 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d if(tex->flag & TEX_REPEAT_XMIR) { int orig= (int)floor(origf); - if(orig & 1) + if(orig & 1) fx= 1.0-fx; } } @@ -1077,13 +1077,15 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d dxt[2]= f1; dyt[2]= f2; } - dxt[0]/= 2.0; - dxt[1]/= 2.0; - dxt[2]/= 2.0; - - dyt[0]/= 2.0; - dyt[1]/= 2.0; - dyt[2]/= 2.0; + + dxt[0] *= 0.5f; + dxt[1] *= 0.5f; + dxt[2] *= 0.5f; + + dyt[0] *= 0.5f; + dyt[1] *= 0.5f; + dyt[2] *= 0.5f; + } /* if area, then reacalculate dxt[] and dyt[] */ @@ -1102,13 +1104,16 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d if(tex->xrepeat>1) { float origf= fx *= tex->xrepeat; - if(fx>1.0f) fx -= (int)(fx); - else if(fx<0.0f) fx+= 1-(int)(fx); + // TXF: omit mirror here, see comments in do_material_tex() after do_2d_mapping() call + if (tex->texfilter == TXF_DEFAULT) { + if(fx>1.0f) fx -= (int)(fx); + else if(fx<0.0f) fx+= 1-(int)(fx); - if(tex->flag & TEX_REPEAT_XMIR) { - int orig= (int)floor(origf); - if(orig & 1) - fx= 1.0f-fx; + if(tex->flag & TEX_REPEAT_XMIR) { + int orig= (int)floor(origf); + if(orig & 1) + fx= 1.0f-fx; + } } max= tex->xrepeat; @@ -1119,13 +1124,16 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d if(tex->yrepeat>1) { float origf= fy *= tex->yrepeat; - if(fy>1.0f) fy -= (int)(fy); - else if(fy<0.0f) fy+= 1-(int)(fy); + // TXF: omit mirror here, see comments in do_material_tex() after do_2d_mapping() call + if (tex->texfilter == TXF_DEFAULT) { + if(fy>1.0f) fy -= (int)(fy); + else if(fy<0.0f) fy+= 1-(int)(fy); - if(tex->flag & TEX_REPEAT_YMIR) { - int orig= (int)floor(origf); - if(orig & 1) - fy= 1.0f-fy; + if(tex->flag & TEX_REPEAT_YMIR) { + int orig= (int)floor(origf); + if(orig & 1) + fy= 1.0f-fy; + } } if(maxyrepeat) @@ -1200,7 +1208,7 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, retval= texnoise(tex, texres); break; case TEX_IMAGE: - if(osatex) retval= imagewraposa(tex, tex->ima, NULL, texvec, dxt, dyt, texres); + if(osatex) retval= imagewraposa(tex, tex->ima, NULL, texvec, dxt, dyt, texres); else retval= imagewrap(tex, tex->ima, NULL, texvec, texres); tag_image_time(tex->ima); /* tag image as having being used */ break; From d19bb6ffcf1364340cdb87b7bd6559ff90de8c0e Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 21 Jul 2009 13:20:39 +0000 Subject: [PATCH 313/512] Silencing warnings (mingw + scons) about undefined stuff... --- source/blender/blenkernel/BKE_particle.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 9f44d3c47cb..cf02efc34ac 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -55,6 +55,9 @@ struct IpoCurve; struct LinkNode; struct KDTree; struct RNG; +struct SurfaceModifierData; +struct BVHTreeRay; +struct BVHTreeRayHit; typedef struct ParticleEffectorCache { struct ParticleEffectorCache *next, *prev; From 0b49dc77deaa5e4bf148be4e17ae73119e6aa769 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 13:46:49 +0000 Subject: [PATCH 314/512] 2.5: Bump Mapping Patch by Alfredo de Greef. Considerably improves the quality of bump mapping, and texture filtering for displacement and warp too. Mainly this is achieved by getting the texture derivatives just right in various cases, many thanks to Alfredo for figuring this one out, works great. This is enabled by default now, but disabled still for existing textures to preserve backwards compatibility. Can be enabled with the "New Bump" option in the material texture slot in the outliner. Also, I made the range for the normal factor a bit smaller since this gives stronger effects, but note that you can still type in larger values than the slider allows. --- release/ui/buttons_data_mesh.py | 8 + source/blender/blenkernel/intern/material.c | 1 + source/blender/blenkernel/intern/texture.c | 4 +- source/blender/blenlib/intern/arithb.c | 24 +- source/blender/blenloader/intern/readfile.c | 15 +- source/blender/makesdna/DNA_texture_types.h | 1 + source/blender/makesrna/intern/rna_material.c | 30 +- .../render/intern/source/convertblender.c | 1 + .../blender/render/intern/source/shadeinput.c | 10 +- source/blender/render/intern/source/texture.c | 395 +++++++++++++----- 10 files changed, 367 insertions(+), 122 deletions(-) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index d4bf9698a89..757745d039e 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -49,6 +49,14 @@ class DATA_PT_normals(DataButtonsPanel): sub.itemR(mesh, "vertex_normal_flip") sub.itemR(mesh, "double_sided") + row = layout.row(align=True) + if context.edit_object: + row.itemO("MESH_OT_faces_shade_smooth") + row.itemO("MESH_OT_faces_shade_flat") + else: + row.itemO("OBJECT_OT_shade_smooth") + row.itemO("OBJECT_OT_shade_flat") + class DATA_PT_vertex_groups(DataButtonsPanel): __idname__ = "DATA_PT_vertex_groups" __label__ = "Vertex Groups" diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 088b1b6e0c2..bee63f497ca 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -671,6 +671,7 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb) ma->mapto |= mtex->mapto; if(r_mode & R_OSA) { if ELEM3(mtex->tex->type, TEX_IMAGE, TEX_PLUGIN, TEX_ENVMAP) ma->texco |= TEXCO_OSA; + else if(mtex->texflag & MTEX_NEW_BUMP) ma->texco |= TEXCO_OSA; // NEWBUMP: need texture derivatives for procedurals as well } if(ma->texco & (TEXCO_ORCO|TEXCO_REFL|TEXCO_NORM|TEXCO_STRAND|TEXCO_STRESS)) needuv= 1; diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index db864dc9f1e..1c7dab15d5c 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -534,7 +534,7 @@ void default_mtex(MTex *mtex) mtex->size[1]= 1.0; mtex->size[2]= 1.0; mtex->tex= 0; - mtex->texflag= 0; + mtex->texflag= MTEX_NEW_BUMP; mtex->colormodel= 0; mtex->r= 1.0; mtex->g= 0.0; @@ -543,7 +543,7 @@ void default_mtex(MTex *mtex) mtex->def_var= 1.0; mtex->blendtype= MTEX_BLEND; mtex->colfac= 1.0; - mtex->norfac= 0.5; + mtex->norfac= 1.0; mtex->varfac= 1.0; mtex->dispfac=0.2; mtex->normapspace= MTEX_NSPACE_TANGENT; diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c index 03be10dd0b1..f7313c8b37a 100644 --- a/source/blender/blenlib/intern/arithb.c +++ b/source/blender/blenlib/intern/arithb.c @@ -2197,25 +2197,23 @@ void VecNegf(float *v1) void VecOrthoBasisf(float *v, float *v1, float *v2) { - float f = (float)sqrt(v[0]*v[0] + v[1]*v[1]); + const float f = (float)sqrt(v[0]*v[0] + v[1]*v[1]); if (f < 1e-35f) { // degenerate case - v1[0] = 0.0f; v1[1] = 1.0f; v1[2] = 0.0f; - if (v[2] > 0.0f) { - v2[0] = 1.0f; v2[1] = v2[2] = 0.0f; - } - else { - v2[0] = -1.0f; v2[1] = v2[2] = 0.0f; - } + v1[0] = (v[2] < 0.0f) ? -1.0f : 1.0f; + v1[1] = v1[2] = v2[0] = v2[2] = 0.0f; + v2[1] = 1.0f; } else { - f = 1.0f/f; - v1[0] = v[1]*f; - v1[1] = -v[0]*f; - v1[2] = 0.0f; + const float d= 1.0f/f; - Crossf(v2, v, v1); + v1[0] = v[1]*d; + v1[1] = -v[0]*d; + v1[2] = 0.0f; + v2[0] = -v[2]*v1[1]; + v2[1] = v[2]*v1[0]; + v2[2] = v[0]*v1[1] - v[1]*v1[0]; } } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 6da444bc88e..bbe85c5f378 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -9276,7 +9276,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Tex *tex; Scene *sce; ToolSettings *ts; - int i; + int i, a; for(ob = main->object.first; ob; ob = ob->id.next) { @@ -9351,15 +9351,26 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } /* texture filter */ - for(tex = main->tex.first; tex; tex = tex->id.next) + for(tex = main->tex.first; tex; tex = tex->id.next) { if(tex->afmax == 0) tex->afmax= 8; + } for(ma = main->mat.first; ma; ma = ma->id.next) { if(ma->mode & MA_HALO) { ma->material_type= MA_TYPE_HALO; ma->mode &= ~MA_HALO; } + + /* set new bump for unused slots */ + for(a=0; amtex[a]) { + if(!ma->mtex[a]->tex) + ma->mtex[a]->texflag |= MTEX_NEW_BUMP; + else if(((Tex*)newlibadr(fd, ma->id.lib, ma->mtex[a]->tex))->type == 0) + ma->mtex[a]->texflag |= MTEX_NEW_BUMP; + } + } } for(sce = main->scene.first; sce; sce = sce->id.next) { diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h index e1dd21a8ccb..0760825670d 100644 --- a/source/blender/makesdna/DNA_texture_types.h +++ b/source/blender/makesdna/DNA_texture_types.h @@ -373,6 +373,7 @@ typedef struct TexMapping { #define MTEX_VIEWSPACE 16 #define MTEX_DUPLI_MAPTO 32 #define MTEX_OB_DUPLI_ORIG 64 +#define MTEX_NEW_BUMP 128 /* blendtype */ #define MTEX_BLEND 0 diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 6686d43d075..fd54dd959b2 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -231,99 +231,122 @@ static void rna_def_material_mtex(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "texco"); RNA_def_property_enum_items(prop, prop_texture_coordinates_items); RNA_def_property_ui_text(prop, "Texture Coordinates", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "object"); RNA_def_property_struct_type(prop, "Object"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "uvname"); RNA_def_property_ui_text(prop, "UV Layer", "UV layer to use for mapping with UV texture coordinates."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "from_dupli", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_DUPLI_MAPTO); RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "from_original", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_OB_DUPLI_ORIG); RNA_def_property_ui_text(prop, "From Original", "Dupli's derive their object coordinates from the original objects transformation."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_colordiff", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL); RNA_def_property_ui_text(prop, "Diffuse Color", "Causes the texture to affect basic color of the material"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_normal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_NORM); RNA_def_property_ui_text(prop, "Normal", "Causes the texture to affect the rendered normal"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_colorspec", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLSPEC); RNA_def_property_ui_text(prop, "Specular Color", "Causes the texture to affect the specularity color"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_mirror", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLMIR); RNA_def_property_ui_text(prop, "Mirror", "Causes the texture to affect the mirror color"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_diffuse", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REF); RNA_def_property_ui_text(prop, "Diffuse", "Causes the texture to affect the value of the materials diffuse reflectivity"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_specular", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SPEC); RNA_def_property_ui_text(prop, "Specular", "Causes the texture to affect the value of specular reflectivity"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_ambient", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_AMB); RNA_def_property_ui_text(prop, "Ambient", "Causes the texture to affect the value of ambient"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_hardness", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_HAR); RNA_def_property_ui_text(prop, "Hardness", "Causes the texture to affect the hardness value"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_raymir", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_RAYMIRR); RNA_def_property_ui_text(prop, "Ray-Mirror", "Causes the texture to affect the ray-mirror value"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_alpha", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_ALPHA); RNA_def_property_ui_text(prop, "Alpha", "Causes the texture to affect the alpha value"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_emit", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMIT); RNA_def_property_ui_text(prop, "Emit", "Causes the texture to affect the emit value"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_translucency", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_TRANSLU); RNA_def_property_ui_text(prop, "Translucency", "Causes the texture to affect the translucency value"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_displacement", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_DISPLACE); RNA_def_property_ui_text(prop, "Displacement", "Let the texture displace the surface"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "map_warp", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_WARP); RNA_def_property_ui_text(prop, "Warp", "Let the texture warp texture coordinates of next channels"); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "x_mapping", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "projx"); RNA_def_property_enum_items(prop, prop_x_mapping_items); RNA_def_property_ui_text(prop, "X Mapping", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "y_mapping", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "projy"); RNA_def_property_enum_items(prop, prop_y_mapping_items); RNA_def_property_ui_text(prop, "Y Mapping", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "z_mapping", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "projz"); RNA_def_property_enum_items(prop, prop_z_mapping_items); RNA_def_property_ui_text(prop, "Z Mapping", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_mapping_items); RNA_def_property_ui_text(prop, "Mapping", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); /* XXX: pmapto, pmaptoneg */ @@ -331,6 +354,7 @@ static void rna_def_material_mtex(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "normapspace"); RNA_def_property_enum_items(prop, prop_normal_map_space_items); RNA_def_property_ui_text(prop, "Normal Map Space", ""); + RNA_def_property_update(prop, NC_TEXTURE, NULL); /* XXX: MTex.which_output */ @@ -340,11 +364,13 @@ static void rna_def_material_mtex(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "dispfac"); RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Displacement Factor", "Amount texture displaces the surface."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "warp_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "warpfac"); RNA_def_property_ui_range(prop, 0, 1, 10, 3); RNA_def_property_ui_text(prop, "Warp Factor", "Amount texture affects texture coordinates of next channels."); + RNA_def_property_update(prop, NC_TEXTURE, NULL); prop= RNA_def_property(srna, "colorspec_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "colfac"); @@ -417,10 +443,10 @@ static void rna_def_material_mtex(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Enabled", "Enable this material texture slot."); RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); - /*prop= RNA_def_property(srna, "new_bump", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "new_bump", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP); RNA_def_property_ui_text(prop, "New Bump", "Use new, corrected bump mapping code (backwards compatibility option)."); - RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);*/ + RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL); } static void rna_def_material_colors(StructRNA *srna) diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index da77d578efc..5853b51a6b1 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -2243,6 +2243,7 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float /* memset above means we dont need this */ /*shi.osatex= 0;*/ /* signal not to use dx[] and dy[] texture AA vectors */ + shi.obr= obr; shi.vlr= vlr; /* current render face */ shi.mat= vlr->mat; /* current input material */ shi.thread= 0; diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c index 931595eae60..6b1d11be6f3 100644 --- a/source/blender/render/intern/source/shadeinput.c +++ b/source/blender/render/intern/source/shadeinput.c @@ -210,7 +210,6 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr) /* add mist and premul color */ if(shr->alpha!=1.0f || alpha!=1.0f) { float fac= alpha*(shr->alpha); - shr->combined[3]= fac; shr->combined[0]*= fac; shr->combined[1]*= fac; @@ -1016,9 +1015,12 @@ void shade_input_set_shade_texco(ShadeInput *shi) MTC_Mat4MulVecfl(R.viewinv, shi->gl); if(shi->osatex) { VECCOPY(shi->dxgl, shi->dxco); - MTC_Mat3MulVecfl(R.imat, shi->dxco); + // TXF: bug was here, but probably should be in convertblender.c, R.imat only valid if there is a world + //MTC_Mat3MulVecfl(R.imat, shi->dxco); + MTC_Mat4Mul3Vecfl(R.viewinv, shi->dxco); VECCOPY(shi->dygl, shi->dyco); - MTC_Mat3MulVecfl(R.imat, shi->dyco); + //MTC_Mat3MulVecfl(R.imat, shi->dyco); + MTC_Mat4Mul3Vecfl(R.viewinv, shi->dyco); } } @@ -1121,6 +1123,8 @@ void shade_input_set_shade_texco(ShadeInput *shi) if(tface && tface->tpage) render_realtime_texture(shi, tface->tpage); } + + } shi->dupliuv[0]= -1.0f + 2.0f*obi->dupliuv[0]; diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 9466bd45420..3f7ffc5b9bb 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -71,6 +71,8 @@ #include "shading.h" #include "texture.h" +#include "renderdatabase.h" /* needed for UV */ + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* defined in pipeline.c, is hardcopy of active dynamic allocated Render */ /* only to be used here in this file, it's for speed */ @@ -1499,6 +1501,94 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen return in; } +static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex, float* co, float* dx, float* dy, float* texvec, float* dxt, float* dyt) +{ + // new: first swap coords, then map, then trans/scale + if (tex->type == TEX_IMAGE) { + // placement + texvec[0] = mtex->projx ? co[mtex->projx - 1] : 0.f; + texvec[1] = mtex->projy ? co[mtex->projy - 1] : 0.f; + texvec[2] = mtex->projz ? co[mtex->projz - 1] : 0.f; + + if (shi->osatex) { + if (mtex->projx) { + dxt[0] = dx[mtex->projx - 1]; + dyt[0] = dy[mtex->projx - 1]; + } + else dxt[0] = dyt[0] = 0.f; + if (mtex->projy) { + dxt[1] = dx[mtex->projy - 1]; + dyt[1] = dy[mtex->projy - 1]; + } + else dxt[1] = dyt[1] = 0.f; + if (mtex->projz) { + dxt[2] = dx[mtex->projz - 1]; + dyt[2] = dy[mtex->projz - 1]; + } + else dxt[2] = dyt[2] = 0.f; + } + do_2d_mapping(mtex, texvec, shi->vlr, shi->facenor, dxt, dyt); + + // translate and scale + texvec[0] = mtex->size[0]*(texvec[0] - 0.5f) + mtex->ofs[0] + 0.5f; + texvec[1] = mtex->size[1]*(texvec[1] - 0.5f) + mtex->ofs[1] + 0.5f; + if (shi->osatex) { + dxt[0] = mtex->size[0]*dxt[0]; + dxt[1] = mtex->size[1]*dxt[1]; + dyt[0] = mtex->size[0]*dyt[0]; + dyt[1] = mtex->size[1]*dyt[1]; + } + + /* problem: repeat-mirror is not a 'repeat' but 'extend' in imagetexture.c */ + // TXF: bug was here, only modify texvec when repeat mode set, old code affected other modes too. + // New texfilters solve mirroring differently so that it also works correctly when + // textures are scaled (sizeXYZ) as well as repeated. See also modification in do_2d_mapping(). + // (since currently only done in osa mode, results will look incorrect without osa TODO) + if (tex->extend == TEX_REPEAT && (tex->flag & TEX_REPEAT_XMIR)) { + if (tex->texfilter == TXF_DEFAULT) + texvec[0] -= floorf(texvec[0]); // this line equivalent to old code, same below + else if (texvec[0] < 0.f || texvec[0] > 1.f) { + const float tx = 0.5f*texvec[0]; + texvec[0] = 2.f*(tx - floorf(tx)); + if (texvec[0] > 1.f) texvec[0] = 2.f - texvec[0]; + } + } + if (tex->extend == TEX_REPEAT && (tex->flag & TEX_REPEAT_YMIR)) { + if (tex->texfilter == TXF_DEFAULT) + texvec[1] -= floorf(texvec[1]); + else if (texvec[1] < 0.f || texvec[1] > 1.f) { + const float ty = 0.5f*texvec[1]; + texvec[1] = 2.f*(ty - floorf(ty)); + if (texvec[1] > 1.f) texvec[1] = 2.f - texvec[1]; + } + } + + } + else { // procedural + // placement + texvec[0] = mtex->size[0]*(mtex->projx ? (co[mtex->projx - 1] + mtex->ofs[0]) : mtex->ofs[0]); + texvec[1] = mtex->size[1]*(mtex->projy ? (co[mtex->projy - 1] + mtex->ofs[1]) : mtex->ofs[1]); + texvec[2] = mtex->size[2]*(mtex->projz ? (co[mtex->projz - 1] + mtex->ofs[2]) : mtex->ofs[2]); + + if (shi->osatex) { + if (mtex->projx) { + dxt[0] = mtex->size[0]*dx[mtex->projx - 1]; + dyt[0] = mtex->size[0]*dy[mtex->projx - 1]; + } + else dxt[0] = 0.f; + if (mtex->projy) { + dxt[1] = mtex->size[1]*dx[mtex->projy - 1]; + dyt[1] = mtex->size[1]*dy[mtex->projy - 1]; + } + else dxt[1] = 0.f; + if (mtex->projz) { + dxt[2] = mtex->size[2]*dx[mtex->projz - 1]; + dyt[2] = mtex->size[2]*dy[mtex->projz - 1]; + } + else dxt[2]= 0.f; + } + } +} void do_material_tex(ShadeInput *shi) { @@ -1509,10 +1599,12 @@ void do_material_tex(ShadeInput *shi) float fact, facm, factt, facmm, stencilTin=1.0; float texvec[3], dxt[3], dyt[3], tempvec[3], norvec[3], warpvec[3]={0.0f, 0.0f, 0.0f}, Tnor=1.0; int tex_nr, rgbnor= 0, warpdone=0; + float nu[3], nv[3], nn[3] = {0,0,0}, dudnu = 1.f, dudnv = 0.f, dvdnu = 0.f, dvdnv = 1.f; // bump mapping + int nunvdone= 0; if (R.r.scemode & R_NO_TEX) return; /* here: test flag if there's a tex (todo) */ - + for(tex_nr=0; tex_nruv[shi->actuv]; - int i; + int i = shi->actuv; if(mtex->uvname[0] != 0) { for(i = 0; i < shi->totuv; i++) { @@ -1596,6 +1688,47 @@ void do_material_tex(ShadeInput *shi) co= suv->uv; dx= suv->dxuv; dy= suv->dyuv; + + // uvmapping only, calculation of normal tangent u/v partial derivatives + // (should not be here, dudnu, dudnv, dvdnu & dvdnv should probably be part of ShadeInputUV struct, + // nu/nv in ShadeInput and this calculation should then move to shadeinput.c, shade_input_set_shade_texco() func.) + // NOTE: test for shi->obr->ob here, since vlr/obr/obi can be 'fake' when called from fastshade(), another reason to move it.. + if ((mtex->texflag & MTEX_NEW_BUMP) && shi->obr && shi->obr->ob) { + if(mtex->mapto & (MAP_NORM|MAP_DISPLACE|MAP_WARP)) { + MTFace* tf = RE_vlakren_get_tface(shi->obr, shi->vlr, i, NULL, 0); + int j1 = shi->i1, j2 = shi->i2, j3 = shi->i3; + + vlr_set_uv_indices(shi->vlr, &j1, &j2, &j3); + + if (tf) { + float *uv1 = tf->uv[j1], *uv2 = tf->uv[j2], *uv3 = tf->uv[j3]; + const float an[3] = {fabsf(nn[0]), fabsf(nn[1]), fabsf(nn[2])}; + const int a1 = (an[0] > an[1] && an[0] > an[2]) ? 1 : 0; + const int a2 = (an[2] > an[0] && an[2] > an[1]) ? 1 : 2; + const float dp1_a1 = shi->v1->co[a1] - shi->v3->co[a1]; + const float dp1_a2 = shi->v1->co[a2] - shi->v3->co[a2]; + const float dp2_a1 = shi->v2->co[a1] - shi->v3->co[a1]; + const float dp2_a2 = shi->v2->co[a2] - shi->v3->co[a2]; + const float du1 = uv1[0] - uv3[0], du2 = uv2[0] - uv3[0]; + const float dv1 = uv1[1] - uv3[1], dv2 = uv2[1] - uv3[1]; + const float dpdu_a1 = dv2*dp1_a1 - dv1*dp2_a1; + const float dpdu_a2 = dv2*dp1_a2 - dv1*dp2_a2; + const float dpdv_a1 = du1*dp2_a1 - du2*dp1_a1; + const float dpdv_a2 = du1*dp2_a2 - du2*dp1_a2; + float d = dpdu_a1*dpdv_a2 - dpdv_a1*dpdu_a2; + float uvd = du1*dv2 - dv1*du2; + + if (uvd == 0.f) uvd = 1e-5f; + if (d == 0.f) d = 1e-5f; + d = uvd / d; + + dudnu = (dpdv_a2*nu[a1] - dpdv_a1*nu[a2])*d; + dvdnu = (dpdu_a1*nu[a2] - dpdu_a2*nu[a1])*d; + dudnv = (dpdv_a2*nv[a1] - dpdv_a1*nv[a2])*d; + dvdnv = (dpdu_a1*nv[a2] - dpdu_a2*nv[a1])*d; + } + } + } } } else if(mtex->texco==TEXCO_WINDOW) { @@ -1621,7 +1754,7 @@ void do_material_tex(ShadeInput *shi) } else continue; // can happen when texco defines disappear and it renders old files - /* de pointer defines if bumping happens */ + /* the pointer defines if bumping happens */ if(mtex->mapto & (MAP_NORM|MAP_DISPLACE|MAP_WARP)) { texres.nor= norvec; norvec[0]= norvec[1]= norvec[2]= 0.0; @@ -1632,95 +1765,150 @@ void do_material_tex(ShadeInput *shi) VECADD(tempvec, co, warpvec); co= tempvec; } - - if(tex->type==TEX_IMAGE) { - /* new: first swap coords, then map, then trans/scale */ + if(mtex->texflag & MTEX_NEW_BUMP) { + // compute ortho basis around normal + if(!nunvdone) { + // render normal is negated + nn[0] = -shi->vn[0]; + nn[1] = -shi->vn[1]; + nn[2] = -shi->vn[2]; + VecOrthoBasisf(nn, nu, nv); + nunvdone= 1; + } - /* placement */ - if(mtex->projx) texvec[0]= co[mtex->projx-1]; - else texvec[0]= 0.0; - if(mtex->projy) texvec[1]= co[mtex->projy-1]; - else texvec[1]= 0.0; - if(mtex->projz) texvec[2]= co[mtex->projz-1]; - else texvec[2]= 0.0; + if(texres.nor) { + TexResult ttexr = {0, 0, 0, 0, 0, texres.talpha, NULL}; // temp TexResult + float tco[3], texv[3], cd, ud, vd, du, dv, idu, idv; + const int fromrgb = ((tex->type == TEX_IMAGE) || ((tex->flag & TEX_COLORBAND)!=0)); + const float bf = 0.04f*Tnor*((mtex->maptoneg & MAP_NORM) ? -mtex->norfac : mtex->norfac); + // disable internal bump eval + float* nvec = texres.nor; + texres.nor = NULL; + // du & dv estimates, constant value defaults + du = dv = 0.01f; - if(shi->osatex) { - - if(mtex->projx) { - dxt[0]= dx[mtex->projx-1]; - dyt[0]= dy[mtex->projx-1]; + // two methods, either constant based on main image resolution, + // (which also works without osa, though of course not always good (or even very bad) results), + // or based on tex derivative max values (osa only). Not sure which is best... + + if (!shi->osatex && (tex->type == TEX_IMAGE) && tex->ima) { + // in case we have no proper derivatives, fall back to + // computing du/dv it based on image size + ImBuf* ibuf = BKE_image_get_ibuf(tex->ima, &tex->iuser); + if (ibuf) { + du = 1.f/(float)ibuf->x; + dv = 1.f/(float)ibuf->y; + } } - else dxt[0]= dyt[0]= 0.0f; - - if(mtex->projy) { - dxt[1]= dx[mtex->projy-1]; - dyt[1]= dy[mtex->projy-1]; + else if (shi->osatex) { + // we have derivatives, can compute proper du/dv + if (tex->type == TEX_IMAGE) { // 2d image, use u & v max. of dx/dy 2d vecs + const float adx[2] = {fabsf(dx[0]), fabsf(dx[1])}; + const float ady[2] = {fabsf(dy[0]), fabsf(dy[1])}; + du = MAX2(adx[0], ady[0]); + dv = MAX2(adx[1], ady[1]); + } + else { // 3d procedural, estimate from all dx/dy elems + const float adx[3] = {fabsf(dx[0]), fabsf(dx[1]), fabsf(dx[2])}; + const float ady[3] = {fabsf(dy[0]), fabsf(dy[1]), fabsf(dy[2])}; + du = MAX3(adx[0], adx[1], adx[2]); + dv = MAX3(ady[1], ady[1], ady[2]); + } } - else dxt[1]= dyt[1]= 0.0f; - if(mtex->projz) { - dxt[2]= dx[mtex->projz-1]; - dyt[2]= dy[mtex->projz-1]; - } - else dxt[2]= dyt[2]= 0.0; - } - - do_2d_mapping(mtex, texvec, shi->vlr, shi->facenor, dxt, dyt); - /* translate and scale */ - texvec[0]= mtex->size[0]*(texvec[0]-0.5) +mtex->ofs[0]+0.5; - texvec[1]= mtex->size[1]*(texvec[1]-0.5) +mtex->ofs[1]+0.5; - if(shi->osatex) { - dxt[0]= mtex->size[0]*dxt[0]; - dxt[1]= mtex->size[1]*dxt[1]; - dyt[0]= mtex->size[0]*dyt[0]; - dyt[1]= mtex->size[1]*dyt[1]; + // center, main return value + texco_mapping(shi, tex, mtex, co, dx, dy, texvec, dxt, dyt); + rgbnor = multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output); + cd = fromrgb ? (texres.tr + texres.tg + texres.tb)*0.33333333f : texres.tin; + + if (mtex->texco == TEXCO_UV) { + // for the uv case, use the same value for both du/dv, + // since individually scaling the normal derivatives makes them useless... + du = MIN2(du, dv); + idu = (du < 1e-6f) ? bf : (bf/du); + + // +u val + tco[0] = co[0] + dudnu*du; + tco[1] = co[1] + dvdnu*du; + tco[2] = 0.f; + texco_mapping(shi, tex, mtex, tco, dx, dy, texv, dxt, dyt); + multitex(tex, texv, dxt, dyt, shi->osatex, &ttexr, shi->thread, mtex->which_output); + ud = idu*(cd - (fromrgb ? (ttexr.tr + ttexr.tg + ttexr.tb)*0.33333333f : ttexr.tin)); + + // +v val + tco[0] = co[0] + dudnv*du; + tco[1] = co[1] + dvdnv*du; + tco[2] = 0.f; + texco_mapping(shi, tex, mtex, tco, dx, dy, texv, dxt, dyt); + multitex(tex, texv, dxt, dyt, shi->osatex, &ttexr, shi->thread, mtex->which_output); + vd = idu*(cd - (fromrgb ? (ttexr.tr + ttexr.tg + ttexr.tb)*0.33333333f : ttexr.tin)); + } + else { + float tu[3] = {nu[0], nu[1], nu[2]}, tv[3] = {nv[0], nv[1], nv[2]}; + + idu = (du < 1e-6f) ? bf : (bf/du); + idv = (dv < 1e-6f) ? bf : (bf/dv); + + if ((mtex->texco == TEXCO_ORCO) && shi->obr && shi->obr->ob) { + Mat4Mul3Vecfl(shi->obr->ob->imat, tu); + Mat4Mul3Vecfl(shi->obr->ob->imat, tv); + Normalize(tu); + Normalize(tv); + } + else if (mtex->texco == TEXCO_GLOB) { + Mat4Mul3Vecfl(R.viewinv, tu); + Mat4Mul3Vecfl(R.viewinv, tv); + } + else if (mtex->texco == TEXCO_OBJECT && mtex->object) { + Mat4Mul3Vecfl(mtex->object->imat, tu); + Mat4Mul3Vecfl(mtex->object->imat, tv); + Normalize(tu); + Normalize(tv); + } + + // +u val + tco[0] = co[0] + tu[0]*du; + tco[1] = co[1] + tu[1]*du; + tco[2] = co[2] + tu[2]*du; + texco_mapping(shi, tex, mtex, tco, dx, dy, texv, dxt, dyt); + multitex(tex, texv, dxt, dyt, shi->osatex, &ttexr, shi->thread, mtex->which_output); + ud = idu*(cd - (fromrgb ? (ttexr.tr + ttexr.tg + ttexr.tb)*0.33333333f : ttexr.tin)); + + // +v val + tco[0] = co[0] + tv[0]*dv; + tco[1] = co[1] + tv[1]*dv; + tco[2] = co[2] + tv[2]*dv; + texco_mapping(shi, tex, mtex, tco, dx, dy, texv, dxt, dyt); + multitex(tex, texv, dxt, dyt, shi->osatex, &ttexr, shi->thread, mtex->which_output); + vd = idv*(cd - (fromrgb ? (ttexr.tr + ttexr.tg + ttexr.tb)*0.33333333f : ttexr.tin)); + } + + // bumped normal + nu[0] += ud*nn[0]; + nu[1] += ud*nn[1]; + nu[2] += ud*nn[2]; + nv[0] += vd*nn[0]; + nv[1] += vd*nn[1]; + nv[2] += vd*nn[2]; + Crossf(nvec, nu, nv); + + nvec[0] = -nvec[0]; + nvec[1] = -nvec[1]; + nvec[2] = -nvec[2]; + texres.nor = nvec; + rgbnor |= TEX_NOR; } - - /* problem: repeat-mirror is not a 'repeat' but 'extend' in imagetexture.c */ - if(tex->flag & TEX_REPEAT_XMIR) { - if(texvec[0]>1.0f) texvec[0] -= (int)(texvec[0]); - else if(texvec[0]<0.0f) texvec[0]+= 1-(int)(texvec[0]); + else { + texco_mapping(shi, tex, mtex, co, dx, dy, texvec, dxt, dyt); + rgbnor = multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output); } - if(tex->flag & TEX_REPEAT_YMIR) { - if(texvec[1]>1.0f) texvec[1] -= (int)(texvec[1]); - else if(texvec[1]<0.0f) texvec[1]+= 1-(int)(texvec[1]); - } - } else { - - /* placement */ - if(mtex->projx) texvec[0]= mtex->size[0]*(co[mtex->projx-1]+mtex->ofs[0]); - else texvec[0]= mtex->size[0]*(mtex->ofs[0]); - - if(mtex->projy) texvec[1]= mtex->size[1]*(co[mtex->projy-1]+mtex->ofs[1]); - else texvec[1]= mtex->size[1]*(mtex->ofs[1]); - - if(mtex->projz) texvec[2]= mtex->size[2]*(co[mtex->projz-1]+mtex->ofs[2]); - else texvec[2]= mtex->size[2]*(mtex->ofs[2]); - - if(shi->osatex) { - if(mtex->projx) { - dxt[0]= mtex->size[0]*dx[mtex->projx-1]; - dyt[0]= mtex->size[0]*dy[mtex->projx-1]; - } - else dxt[0]= 0.0; - if(mtex->projy) { - dxt[1]= mtex->size[1]*dx[mtex->projy-1]; - dyt[1]= mtex->size[1]*dy[mtex->projy-1]; - } - else dxt[1]= 0.0; - if(mtex->projz) { - dxt[2]= mtex->size[2]*dx[mtex->projz-1]; - dyt[2]= mtex->size[2]*dy[mtex->projz-1]; - } - else dxt[2]= 0.0; - } + texco_mapping(shi, tex, mtex, co, dx, dy, texvec, dxt, dyt); + rgbnor = multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output); } - rgbnor= multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output); - /* texture output */ if( (rgbnor & TEX_RGB) && (mtex->texflag & MTEX_RGBTOINT)) { @@ -1785,7 +1973,7 @@ void do_material_tex(ShadeInput *shi) if(mtex->texflag & MTEX_VIEWSPACE) { // rotate to global coords if(mtex->texco==TEXCO_ORCO || mtex->texco==TEXCO_UV) { - if(shi->vlr && shi->obr->ob) { + if(shi->vlr && shi->obr && shi->obr->ob) { float len= Normalize(texres.nor); // can be optimized... (ton) Mat4Mul3Vecfl(shi->obr->ob->obmat, texres.nor); @@ -1897,25 +2085,32 @@ void do_material_tex(ShadeInput *shi) } } else { - float nor[3], dot; - - if(shi->mat->mode & MA_TANGENT_V) { - shi->tang[0]+= Tnor*tex->norfac*texres.nor[0]; - shi->tang[1]+= Tnor*tex->norfac*texres.nor[1]; - shi->tang[2]+= Tnor*tex->norfac*texres.nor[2]; + if (mtex->texflag & MTEX_NEW_BUMP) { + shi->vn[0] = texres.nor[0]; + shi->vn[1] = texres.nor[1]; + shi->vn[2] = texres.nor[2]; } - - /* prevent bump to become negative normal */ - nor[0]= Tnor*tex->norfac*texres.nor[0]; - nor[1]= Tnor*tex->norfac*texres.nor[1]; - nor[2]= Tnor*tex->norfac*texres.nor[2]; - - dot= 0.5f + 0.5f*INPR(nor, shi->vn); - - shi->vn[0]+= dot*nor[0]; - shi->vn[1]+= dot*nor[1]; - shi->vn[2]+= dot*nor[2]; - } + else { + float nor[3], dot; + + if(shi->mat->mode & MA_TANGENT_V) { + shi->tang[0]+= Tnor*tex->norfac*texres.nor[0]; + shi->tang[1]+= Tnor*tex->norfac*texres.nor[1]; + shi->tang[2]+= Tnor*tex->norfac*texres.nor[2]; + } + + /* prevent bump to become negative normal */ + nor[0]= Tnor*tex->norfac*texres.nor[0]; + nor[1]= Tnor*tex->norfac*texres.nor[1]; + nor[2]= Tnor*tex->norfac*texres.nor[2]; + + dot= 0.5f + 0.5f*INPR(nor, shi->vn); + + shi->vn[0]+= dot*nor[0]; + shi->vn[1]+= dot*nor[1]; + shi->vn[2]+= dot*nor[2]; + } + } Normalize(shi->vn); /* this makes sure the bump is passed on to the next texture */ @@ -2628,7 +2823,7 @@ void render_realtime_texture(ShadeInput *shi, Image *ima) texr.nor= NULL; - if(shi->osatex) imagewraposa(tex, ima, NULL, texvec, dx, dy, &texr); + if(shi->osatex) imagewraposa(tex, ima, NULL, texvec, dx, dy, &texr); else imagewrap(tex, ima, NULL, texvec, &texr); shi->vcol[0]*= texr.tr; From b5457e8e70aa5f27dd6285cf9f4dccf9637ca0cb Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 14:11:51 +0000 Subject: [PATCH 315/512] RNA * Wrapped RenderResult, RenderLayer, RenderPass. * Update RNA_access.h with new structs. --- source/blender/makesrna/RNA_access.h | 33 ++- source/blender/makesrna/SConscript | 1 + source/blender/makesrna/intern/CMakeLists.txt | 2 +- source/blender/makesrna/intern/Makefile | 1 + source/blender/makesrna/intern/SConscript | 1 + source/blender/makesrna/intern/makesrna.c | 1 + source/blender/makesrna/intern/rna_internal.h | 2 + source/blender/makesrna/intern/rna_render.c | 214 ++++++++++++++++++ source/blender/makesrna/intern/rna_scene.c | 137 +++++++---- .../render/extern/include/RE_pipeline.h | 2 + .../blender/render/intern/source/pipeline.c | 21 +- 11 files changed, 362 insertions(+), 53 deletions(-) create mode 100644 source/blender/makesrna/intern/rna_render.c diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 33bf1147748..50ae05c8544 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -62,6 +62,15 @@ extern StructRNA RNA_BevelModifier; extern StructRNA RNA_BezierCurvePoint; extern StructRNA RNA_BlendTexture; extern StructRNA RNA_BlenderRNA; +extern StructRNA RNA_BoidRule; +extern StructRNA RNA_BoidRuleAverageSpeed; +extern StructRNA RNA_BoidRuleAvoid; +extern StructRNA RNA_BoidRuleAvoidCollision; +extern StructRNA RNA_BoidRuleFight; +extern StructRNA RNA_BoidRuleFollowLeader; +extern StructRNA RNA_BoidRuleGoal; +extern StructRNA RNA_BoidSettings; +extern StructRNA RNA_BoidState; extern StructRNA RNA_Bone; extern StructRNA RNA_BoneGroup; extern StructRNA RNA_BooleanModifier; @@ -143,6 +152,7 @@ extern StructRNA RNA_CompositorNodeValue; extern StructRNA RNA_CompositorNodeVecBlur; extern StructRNA RNA_CompositorNodeViewer; extern StructRNA RNA_CompositorNodeZcombine; +extern StructRNA RNA_ConsoleLine; extern StructRNA RNA_Constraint; extern StructRNA RNA_ConstraintTarget; extern StructRNA RNA_Context; @@ -171,23 +181,22 @@ extern StructRNA RNA_EnumProperty; extern StructRNA RNA_EnumPropertyItem; extern StructRNA RNA_EnvironmentMap; extern StructRNA RNA_EnvironmentMapTexture; +extern StructRNA RNA_Event; extern StructRNA RNA_ExplodeModifier; extern StructRNA RNA_ExpressionController; -extern StructRNA RNA_Event; extern StructRNA RNA_FCurve; extern StructRNA RNA_FCurveSample; -extern StructRNA RNA_FileSelectParams; extern StructRNA RNA_FModifier; extern StructRNA RNA_FModifierCycles; extern StructRNA RNA_FModifierEnvelope; extern StructRNA RNA_FModifierEnvelopeControlPoint; extern StructRNA RNA_FModifierFunctionGenerator; extern StructRNA RNA_FModifierGenerator; -extern StructRNA RNA_FModifierGenerator_PolyExpanded; extern StructRNA RNA_FModifierLimits; extern StructRNA RNA_FModifierNoise; extern StructRNA RNA_FModifierPython; extern StructRNA RNA_FieldSettings; +extern StructRNA RNA_FileSelectParams; extern StructRNA RNA_FloatProperty; extern StructRNA RNA_FloorConstraint; extern StructRNA RNA_FluidFluidSettings; @@ -222,7 +231,6 @@ extern StructRNA RNA_Key; extern StructRNA RNA_KeyboardSensor; extern StructRNA RNA_KeyingSet; extern StructRNA RNA_KeyingSetPath; -extern StructRNA RNA_ParticleTarget; extern StructRNA RNA_KinematicConstraint; extern StructRNA RNA_Lamp; extern StructRNA RNA_LampSkySettings; @@ -278,8 +286,8 @@ extern StructRNA RNA_MultiresModifier; extern StructRNA RNA_MusgraveTexture; extern StructRNA RNA_NandController; extern StructRNA RNA_NearSensor; -extern StructRNA RNA_NlaTrack; extern StructRNA RNA_NlaStrip; +extern StructRNA RNA_NlaTrack; extern StructRNA RNA_Node; extern StructRNA RNA_NodeTree; extern StructRNA RNA_NoiseTexture; @@ -304,6 +312,7 @@ extern StructRNA RNA_ParticleKey; extern StructRNA RNA_ParticleSettings; extern StructRNA RNA_ParticleSystem; extern StructRNA RNA_ParticleSystemModifier; +extern StructRNA RNA_ParticleTarget; extern StructRNA RNA_PluginSequence; extern StructRNA RNA_PluginTexture; extern StructRNA RNA_PointCache; @@ -315,14 +324,18 @@ extern StructRNA RNA_PropertySensor; extern StructRNA RNA_PythonConstraint; extern StructRNA RNA_PythonController; extern StructRNA RNA_RadarSensor; -extern StructRNA RNA_Radiosity; extern StructRNA RNA_RandomSensor; extern StructRNA RNA_RaySensor; extern StructRNA RNA_Region; +extern StructRNA RNA_RenderLayer; +extern StructRNA RNA_RenderPass; +extern StructRNA RNA_RenderResult; +extern StructRNA RNA_RenderValue; extern StructRNA RNA_RigidBodyJointConstraint; extern StructRNA RNA_Scene; extern StructRNA RNA_SceneGameData; extern StructRNA RNA_SceneRenderData; +extern StructRNA RNA_SceneRenderLayer; extern StructRNA RNA_SceneSequence; extern StructRNA RNA_Screen; extern StructRNA RNA_ScriptLink; @@ -366,8 +379,8 @@ extern StructRNA RNA_ShrinkwrapConstraint; extern StructRNA RNA_ShrinkwrapModifier; extern StructRNA RNA_SimpleDeformModifier; extern StructRNA RNA_SmoothModifier; -extern StructRNA RNA_SoftBodySettings; extern StructRNA RNA_SoftBodyModifier; +extern StructRNA RNA_SoftBodySettings; extern StructRNA RNA_Sound; extern StructRNA RNA_SoundSequence; extern StructRNA RNA_Space; @@ -375,13 +388,13 @@ extern StructRNA RNA_Space3DView; extern StructRNA RNA_SpaceButtonsWindow; extern StructRNA RNA_SpaceConsole; extern StructRNA RNA_SpaceDopeSheetEditor; +extern StructRNA RNA_SpaceFileBrowser; extern StructRNA RNA_SpaceGraphEditor; extern StructRNA RNA_SpaceImageEditor; extern StructRNA RNA_SpaceNLA; extern StructRNA RNA_SpaceOutliner; extern StructRNA RNA_SpaceSequenceEditor; extern StructRNA RNA_SpaceTextEditor; -extern StructRNA RNA_SpaceFileBrowser; extern StructRNA RNA_SpaceUVEditor; extern StructRNA RNA_SpeedControlSequence; extern StructRNA RNA_SpotLamp; @@ -434,6 +447,7 @@ extern StructRNA RNA_ThemeFileBrowser; extern StructRNA RNA_ThemeFontStyle; extern StructRNA RNA_ThemeGraphEditor; extern StructRNA RNA_ThemeImageEditor; +extern StructRNA RNA_ThemeLogicEditor; extern StructRNA RNA_ThemeNLAEditor; extern StructRNA RNA_ThemeNodeEditor; extern StructRNA RNA_ThemeOutliner; @@ -445,6 +459,7 @@ extern StructRNA RNA_ThemeUserInterface; extern StructRNA RNA_ThemeUserPreferences; extern StructRNA RNA_ThemeView3D; extern StructRNA RNA_ThemeWidgetColors; +extern StructRNA RNA_ThemeWidgetStateColors; extern StructRNA RNA_TimelineMarker; extern StructRNA RNA_ToolSettings; extern StructRNA RNA_TouchSensor; @@ -452,6 +467,7 @@ extern StructRNA RNA_TrackToConstraint; extern StructRNA RNA_TransformConstraint; extern StructRNA RNA_TransformSequence; extern StructRNA RNA_UILayout; +extern StructRNA RNA_UIListItem; extern StructRNA RNA_UVProjectModifier; extern StructRNA RNA_UnknownType; extern StructRNA RNA_UserPreferences; @@ -468,6 +484,7 @@ extern StructRNA RNA_VertexGroup; extern StructRNA RNA_VertexGroupElement; extern StructRNA RNA_VoronoiTexture; extern StructRNA RNA_WaveModifier; +extern StructRNA RNA_Window; extern StructRNA RNA_WindowManager; extern StructRNA RNA_WipeSequence; extern StructRNA RNA_WoodTexture; diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index 89118850b20..3b47eeca59d 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -8,6 +8,7 @@ objs += o incs = '#/intern/guardedalloc ../blenkernel ../blenlib ../makesdna intern .' incs += ' ../windowmanager ../editors/include ../imbuf' +incs += ' ../render/extern/include' defs = [] diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 85505d546c4..2aa0fcc79ff 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -39,7 +39,7 @@ SET(SRC ../../../../intern/guardedalloc/intern/mallocn.c ../../../../intern/guardedalloc/intern/mmap_win.c) -INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager ../../editors/include ../../imbuf .) +INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager ../../editors/include ../../imbuf ../../render/extern/include .) FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h) IF(WITH_OPENEXR) diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile index 7f9bfbfea67..c7cc6e7a4bf 100644 --- a/source/blender/makesrna/intern/Makefile +++ b/source/blender/makesrna/intern/Makefile @@ -52,6 +52,7 @@ CPPFLAGS += -I../../imbuf CPPFLAGS += -I../../makesdna CPPFLAGS += -I../../windowmanager CPPFLAGS += -I../../editors/include +CPPFLAGS += -I../../render/extern/include CPPFLAGS += -I.. CPPFLAGS += -I. diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index c10b907d04e..a4f184a3f67 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -32,6 +32,7 @@ defs = [] incs = '#/intern/guardedalloc ../../blenlib ../../blenkernel' incs += ' ../../imbuf ../../makesdna ../../makesrna' incs += ' ../../windowmanager ../../editors/include' +incs += ' ../../render/extern/include' if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index ded8db61b7c..81c4642f4d5 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1935,6 +1935,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_particle.c", NULL, RNA_def_particle}, {"rna_pose.c", NULL, RNA_def_pose}, {"rna_property.c", NULL, RNA_def_gameproperty}, + {"rna_render.c", NULL, RNA_def_render}, {"rna_scene.c", NULL, RNA_def_scene}, {"rna_screen.c", NULL, RNA_def_screen}, {"rna_scriptlink.c", NULL, RNA_def_scriptlink}, diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 299539a87bd..8bc1fcaf926 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -147,6 +147,7 @@ void RNA_def_object_force(struct BlenderRNA *brna); void RNA_def_packedfile(struct BlenderRNA *brna); void RNA_def_particle(struct BlenderRNA *brna); void RNA_def_pose(struct BlenderRNA *brna); +void RNA_def_render(struct BlenderRNA *brna); void RNA_def_rna(struct BlenderRNA *brna); void RNA_def_scene(struct BlenderRNA *brna); void RNA_def_screen(struct BlenderRNA *brna); @@ -171,6 +172,7 @@ void rna_def_animdata_common(struct StructRNA *srna); void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable); void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname); +void rna_def_render_layer_common(struct StructRNA *srna, int scene); void rna_ID_name_get(struct PointerRNA *ptr, char *value); int rna_ID_name_length(struct PointerRNA *ptr); diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c new file mode 100644 index 00000000000..7eacb4079e5 --- /dev/null +++ b/source/blender/makesrna/intern/rna_render.c @@ -0,0 +1,214 @@ +/** + * $Id: rna_render.c 21648 2009-07-17 02:31:28Z campbellbarton $ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Contributor(s): Blender Foundation (2009) + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include + +#include "DNA_scene_types.h" + +#include "RNA_define.h" +#include "RNA_types.h" + +#include "rna_internal.h" + +#include "WM_types.h" + +#include "RE_pipeline.h" +#include "RE_render_ext.h" + +#ifdef RNA_RUNTIME + +#include "MEM_guardedalloc.h" + +#include "RNA_access.h" + +#include "BKE_context.h" +#include "BKE_report.h" + +#include "WM_api.h" + +static void rna_RenderResult_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + RenderResult *rr= (RenderResult*)ptr->data; + rna_iterator_listbase_begin(iter, &rr->layers, NULL); +} + +static void rna_RenderLayer_passes_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + RenderLayer *rl= (RenderLayer*)ptr->data; + rna_iterator_listbase_begin(iter, &rl->passes, NULL); +} + +static float rna_RenderValue_value_get(PointerRNA *ptr) +{ + return *(float*)ptr->data; +} + +static void rna_RenderValue_value_set(PointerRNA *ptr, float value) +{ + *(float*)ptr->data= value; +} + +static void rna_RenderLayer_rect_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + RenderLayer *rl= (RenderLayer*)ptr->data; + rna_iterator_array_begin(iter, (void*)rl->rectf, sizeof(float), rl->rectx*rl->recty*4, 0, NULL); +} + +static int rna_RenderLayer_rect_length(PointerRNA *ptr) +{ + RenderLayer *rl= (RenderLayer*)ptr->data; + return rl->rectx*rl->recty*4; +} + +static void rna_RenderPass_rect_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + RenderPass *rpass= (RenderPass*)ptr->data; + rna_iterator_array_begin(iter, (void*)rpass->rect, sizeof(float), rpass->rectx*rpass->recty*rpass->channels, 0, NULL); +} + +static int rna_RenderPass_rect_length(PointerRNA *ptr) +{ + RenderPass *rpass= (RenderPass*)ptr->data; + return rpass->rectx*rpass->recty*rpass->channels; +} + + +#else // RNA_RUNTIME + +static void rna_def_render_result(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "RenderResult", NULL); + RNA_def_struct_ui_text(srna, "Render Result", "Result of rendering, including all layers and passes."); + + RNA_define_verify_sdna(0); + + prop= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "rectx"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "recty"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "RenderLayer"); + RNA_def_property_collection_funcs(prop, "rna_RenderResult_layers_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, 0, 0); + + RNA_define_verify_sdna(1); +} + +static void rna_def_render_layer(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "RenderLayer", NULL); + RNA_def_struct_ui_text(srna, "Render Layer", ""); + + RNA_define_verify_sdna(0); + + rna_def_render_layer_common(srna, 0); + + prop= RNA_def_property(srna, "passes", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "RenderPass"); + RNA_def_property_collection_funcs(prop, "rna_RenderLayer_passes_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, 0, 0); + + prop= RNA_def_property(srna, "rect", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "RenderValue"); + RNA_def_property_collection_funcs(prop, "rna_RenderLayer_rect_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_RenderLayer_rect_length", 0, 0, 0, 0); + + /* value */ + srna= RNA_def_struct(brna, "RenderValue", NULL); + RNA_def_struct_ui_text(srna, "Render Value", ""); + + prop= RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_funcs(prop, "rna_RenderValue_value_get", "rna_RenderValue_value_set", NULL); + + RNA_define_verify_sdna(1); +} + +static void rna_def_render_pass(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem pass_type_items[]= { + {SCE_PASS_COMBINED, "COMBINED", 0, "Combined", ""}, + {SCE_PASS_Z, "Z", 0, "Z", ""}, + {SCE_PASS_RGBA, "COLOR", 0, "Color", ""}, + {SCE_PASS_DIFFUSE, "DIFFUSE", 0, "Diffuse", ""}, + {SCE_PASS_SPEC, "SPECULAR", 0, "Specular", ""}, + {SCE_PASS_SHADOW, "SHADOW", 0, "Shadow", ""}, + {SCE_PASS_AO, "AO", 0, "AO", ""}, + {SCE_PASS_REFLECT, "REFLECTION", 0, "Reflection", ""}, + {SCE_PASS_NORMAL, "NORMAL", 0, "Normal", ""}, + {SCE_PASS_VECTOR, "VECTOR", 0, "Vecotr", ""}, + {SCE_PASS_REFRACT, "REFRACTION", 0, "Refraction", ""}, + {SCE_PASS_INDEXOB, "OBJECT_INDEX", 0, "Object Index", ""}, + {SCE_PASS_UV, "UV", 0, "UV", ""}, + {SCE_PASS_MIST, "MIST", 0, "Mist", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "RenderPass", NULL); + RNA_def_struct_ui_text(srna, "Render Pass", ""); + + RNA_define_verify_sdna(0); + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "name"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "channel_id", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "chan_id"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "channels", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "channels"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "passtype"); + RNA_def_property_enum_items(prop, pass_type_items); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "rect", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "RenderValue"); + RNA_def_property_collection_funcs(prop, "rna_RenderPass_rect_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_RenderPass_rect_length", 0, 0, 0, 0); + + RNA_define_verify_sdna(1); +} + +void RNA_def_render(BlenderRNA *brna) +{ + rna_def_render_result(brna); + rna_def_render_layer(brna); + rna_def_render_pass(brna); +} + +#endif // RNA_RUNTIME + diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index bf122c1a13c..f23a14d99fb 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -205,7 +205,7 @@ static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr) #else -void rna_def_sculpt(BlenderRNA *brna) +static void rna_def_sculpt(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; @@ -251,7 +251,7 @@ void rna_def_sculpt(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Partial Redraw", "Optimize sculpting by only refreshing modified faces."); } -void rna_def_tool_settings(BlenderRNA *brna) +static void rna_def_tool_settings(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; @@ -366,192 +366,228 @@ void rna_def_tool_settings(BlenderRNA *brna) rna_def_sculpt(brna); } -void rna_def_scene_render_layer(BlenderRNA *brna) +void rna_def_render_layer_common(StructRNA *srna, int scene) { - StructRNA *srna; PropertyRNA *prop; - srna= RNA_def_struct(brna, "SceneRenderLayer", NULL); - RNA_def_struct_ui_text(srna, "Scene Render Layer", "Render layer."); - prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + if(scene) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SceneRenderLayer_name_set"); + else RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_ui_text(prop, "Name", "Render layer name."); - RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SceneRenderLayer_name_set"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); RNA_def_struct_name_property(srna, prop); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "material_override", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "mat_override"); RNA_def_property_struct_type(prop, "Material"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Material Override", "Material to override all other materials in this render layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "light_override", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "light_override"); RNA_def_property_struct_type(prop, "Group"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Light Override", "Group to override all other lights in this render layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* layers */ prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); RNA_def_property_array(prop, 20); RNA_def_property_ui_text(prop, "Visible Layers", "Scene layers included in this render layer."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_layer_set"); + if(scene) RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_layer_set"); + else RNA_def_property_boolean_funcs(prop, NULL, "rna_RenderLayer_layer_set"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "zmask_layers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1); RNA_def_property_array(prop, 20); RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_zmask_layer_set"); + if(scene) RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_zmask_layer_set"); + else RNA_def_property_boolean_funcs(prop, NULL, "rna_RenderLayer_zmask_layer_set"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* layer options */ prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE); RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "zmask", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZMASK); RNA_def_property_ui_text(prop, "Zmask", "Only render what's in front of the solid z values."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "zmask_negate", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_NEG_ZMASK); RNA_def_property_ui_text(prop, "Zmask Negate", "For Zmask, only render what is behind solid z values instead of in front."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "all_z", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ALL_Z); RNA_def_property_ui_text(prop, "All Z", "Fill in Z values for solid faces in invisible layers, for masking."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "solid", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID); RNA_def_property_ui_text(prop, "Solid", "Render Solid faces in this Layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_HALO); RNA_def_property_ui_text(prop, "Halo", "Render Halos in this Layer (on top of Solid)."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "ztransp", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZTRA); RNA_def_property_ui_text(prop, "ZTransp", "Render Z-Transparent faces in this Layer (On top of Solid and Halos)."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SKY); RNA_def_property_ui_text(prop, "Sky", "Render Sky in this Layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_EDGE); RNA_def_property_ui_text(prop, "Edge", "Render Edge-enhance in this Layer (only works for Solid faces)."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "strand", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_STRAND); RNA_def_property_ui_text(prop, "Strand", "Render Strands in this Layer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* passes */ prop= RNA_def_property(srna, "pass_combined", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_COMBINED); RNA_def_property_ui_text(prop, "Combined", "Deliver full combined RGBA buffer."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_z", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_Z); RNA_def_property_ui_text(prop, "Z", "Deliver Z values pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_vector", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_VECTOR); RNA_def_property_ui_text(prop, "Vector", "Deliver speed vector pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_normal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_NORMAL); RNA_def_property_ui_text(prop, "Normal", "Deliver normal pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_uv", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_UV); RNA_def_property_ui_text(prop, "UV", "Deliver texture UV pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_mist", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_MIST); RNA_def_property_ui_text(prop, "Mist", "Deliver mist factor pass (0.0-1.0)."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_object_index", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXOB); RNA_def_property_ui_text(prop, "Object Index", "Deliver object index pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_color", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA); RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_diffuse", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE); RNA_def_property_ui_text(prop, "Diffuse", "Deliver diffuse pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_specular", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SPEC); RNA_def_property_ui_text(prop, "Specular", "Deliver specular pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_shadow", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SHADOW); RNA_def_property_ui_text(prop, "Shadow", "Deliver shadow pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_ao", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_AO); RNA_def_property_ui_text(prop, "AO", "Deliver AO pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_reflection", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT); RNA_def_property_ui_text(prop, "Reflection", "Deliver ratraced reflection pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_refraction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT); RNA_def_property_ui_text(prop, "Refraction", "Deliver ratraced refraction pass."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_specular_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SPEC); RNA_def_property_ui_text(prop, "Specular Exclude", "Exclude specular pass from combined."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_shadow_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SHADOW); RNA_def_property_ui_text(prop, "Shadow Exclude", "Exclude shadow pass from combined."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_ao_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_AO); RNA_def_property_ui_text(prop, "AO Exclude", "Exclude AO pass from combined."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_reflection_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT); RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude ratraced reflection pass from combined."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); prop= RNA_def_property(srna, "pass_refraction_exclude", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT); RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude ratraced refraction pass from combined."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); } void rna_def_scene_game_data(BlenderRNA *brna) @@ -764,7 +800,18 @@ void rna_def_scene_game_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "box radius", "Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled"); RNA_def_property_update(prop, NC_SCENE, NULL); } -void rna_def_scene_render_data(BlenderRNA *brna) + +static void rna_def_scene_render_layer(BlenderRNA *brna) +{ + StructRNA *srna; + + srna= RNA_def_struct(brna, "SceneRenderLayer", NULL); + RNA_def_struct_ui_text(srna, "Scene Render Layer", "Render layer."); + + rna_def_render_layer_common(srna, 1); +} + +static void rna_def_scene_render_data(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; @@ -1378,6 +1425,8 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "pic"); RNA_def_property_ui_text(prop, "Output Path", "Directory/name to save animations, # characters defines the position and length of frame numbers."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + /* stamp */ prop= RNA_def_property(srna, "stamp_time", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_TIME); @@ -1453,6 +1502,8 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_range(prop,0.0,1.0); RNA_def_property_ui_text(prop, "Stamp Background", "Color to use behind stamp text"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + /* layers */ prop= RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "layers", NULL); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 04f7d264229..e0e78739d39 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -64,6 +64,7 @@ typedef struct RenderPass { char name[16]; /* amount defined in openexr_multi.h */ char chan_id[8]; /* amount defined in openexr_multi.h */ float *rect; + int rectx, recty; } RenderPass; /* a renderlayer is a full image, but with all passes and samples */ @@ -83,6 +84,7 @@ typedef struct RenderLayer { float *rectf; /* 4 float, standard rgba buffer (read not above!) */ float *acolrect; /* 4 float, optional transparent buffer, needs storage for display updates */ float *scolrect; /* 4 float, optional strand buffer, needs storage for display updates */ + int rectx, recty; ListBase passes; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index bdf327d6638..db78d0bbb61 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -426,6 +426,8 @@ static void render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channel BLI_addtail(&rl->passes, rpass); rpass->passtype= passtype; rpass->channels= channels; + rpass->rectx= rl->rectx; + rpass->recty= rl->recty; if(rr->exrhandle) { int a; @@ -528,6 +530,8 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop, int rl->pass_xor= srl->pass_xor; rl->light_override= srl->light_override; rl->mat_override= srl->mat_override; + rl->rectx= rectx; + rl->recty= recty; if(rr->exrhandle) { IMB_exr_add_channel(rr->exrhandle, rl->name, "Combined.R", 0, 0, NULL); @@ -573,6 +577,9 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop, int rl= MEM_callocN(sizeof(RenderLayer), "new render layer"); BLI_addtail(&rr->layers, rl); + rl->rectx= rectx; + rl->recty= recty; + /* duplicate code... */ if(rr->exrhandle) { IMB_exr_add_channel(rr->exrhandle, rl->name, "Combined.R", 0, 0, NULL); @@ -810,7 +817,7 @@ static void ml_addpass_cb(void *base, void *lay, char *str, float *rect, int tot BLI_addtail(&rl->passes, rpass); rpass->channels= totchan; - + rpass->passtype= passtype_from_name(str); if(rpass->passtype==0) printf("unknown pass %s\n", str); rl->passflag |= rpass->passtype; @@ -827,11 +834,23 @@ static void ml_addpass_cb(void *base, void *lay, char *str, float *rect, int tot RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty) { RenderResult *rr= MEM_callocN(sizeof(RenderResult), "loaded render result"); + RenderLayer *rl; + RenderPass *rpass; rr->rectx= rectx; rr->recty= recty; IMB_exr_multilayer_convert(exrhandle, rr, ml_addlayer_cb, ml_addpass_cb); + + for(rl=rr->layers.first; rl; rl=rl->next) { + rl->rectx= rectx; + rl->recty= recty; + + for(rpass=rl->passes.first; rpass; rpass=rpass->next) { + rpass->rectx= rectx; + rpass->recty= recty; + } + } return rr; } From 0391b5eceff69e342a995524caccc6d4eda68a17 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 14:28:41 +0000 Subject: [PATCH 316/512] 2.5: fix crash on load when saving with a filebrowser open. --- source/blender/blenloader/intern/readfile.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index bbe85c5f378..5ab30913b18 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4409,6 +4409,8 @@ static void lib_link_screen(FileData *fd, Main *main) sfile->params= NULL; sfile->op= NULL; sfile->layout= NULL; + sfile->folders_prev= NULL; + sfile->folders_next= NULL; } else if(sl->spacetype==SPACE_IMASEL) { SpaceImaSel *simasel= (SpaceImaSel *)sl; From e4b79972776f9873fde045f4b93537309fba1817 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 21 Jul 2009 15:52:15 +0000 Subject: [PATCH 317/512] py console wasnt working since r21743 --- release/ui/space_console.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 880cce82a27..0c495ccef8a 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -144,7 +144,7 @@ class CONSOLE_OT_exec(bpy.types.Operator): except: return ('CANCELLED',) - if sc.type != 'PYTHON': + if sc.console_type != 'PYTHON': return ('CANCELLED',) namespace, console, stdout, stderr = get_console(hash(context.region)) From a1407ff34215e5a72de2988e06c54379a1843c14 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 18:23:45 +0000 Subject: [PATCH 318/512] 2.5: * Windows fixes for texture filter & bump patches, thanks Jean-Michel Soler for noting. * Added sqrtf/sinf/fabsf/... fallback #ifdefs in BLI_arithb.h, those should be safe to use now. Replacing the double for the float version throughout the code can be done once, but would need proper testing. --- source/blender/blenlib/BLI_arithb.h | 68 +++++++++++++++++++ source/blender/blenlib/intern/arithb.c | 20 ++++++ .../render/intern/source/imagetexture.c | 1 + 3 files changed, 89 insertions(+) diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h index a4f49779ca1..bedde19e659 100644 --- a/source/blender/blenlib/BLI_arithb.h +++ b/source/blender/blenlib/BLI_arithb.h @@ -38,6 +38,12 @@ extern "C" { #endif +#ifdef WIN32 +#define _USE_MATH_DEFINES +#endif + +#include + #ifndef M_PI #define M_PI 3.14159265358979323846 #endif @@ -54,6 +60,65 @@ extern "C" { #define M_1_PI 0.318309886183790671538 #endif +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif +#ifndef M_LOG2E +#define M_LOG2E 1.4426950408889634074 +#endif +#ifndef M_LOG10E +#define M_LOG10E 0.43429448190325182765 +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif +#ifndef M_LN10 +#define M_LN10 2.30258509299404568402 +#endif + +#ifndef sqrtf +#define sqrtf(a) ((float)sqrt(a)) +#endif +#ifndef powf +#define powf(a, b) ((float)pow(a, b)) +#endif +#ifndef cosf +#define cosf(a) ((float)cos(a)) +#endif +#ifndef sinf +#define sinf(a) ((float)sin(a)) +#endif +#ifndef acosf +#define acosf(a) ((float)acos(a)) +#endif +#ifndef asinf +#define asinf(a) ((float)asin(a)) +#endif +#ifndef atan2f +#define atan2f(a, b) ((float)atan2(a, b)) +#endif +#ifndef tanf +#define tanf(a) ((float)tan(a)) +#endif +#ifndef atanf +#define atanf(a) ((float)atan(a)) +#endif +#ifndef floorf +#define floorf(a) ((float)floor(a)) +#endif +#ifndef ceilf +#define ceilf(a) ((float)ceil(a)) +#endif +#ifndef fabsf +#define fabsf(a) ((float)fabs(a)) +#endif +#ifndef logf +#define logf(a) ((float)log(a)) +#endif +#ifndef expf +#define expf(a) ((float)exp(a)) +#endif + #ifdef WIN32 #ifndef FREE_WINDOWS #define isnan(n) _isnan(n) @@ -89,6 +154,9 @@ double Sqrt3d(double d); float saacos(float fac); float saasin(float fac); float sasqrt(float fac); +float saacosf(float fac); +float saasinf(float fac); +float sasqrtf(float fac); int FloatCompare(float *v1, float *v2, float limit); int FloatCompare4(float *v1, float *v2, float limit); diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c index f7313c8b37a..ce381a3ee7c 100644 --- a/source/blender/blenlib/intern/arithb.c +++ b/source/blender/blenlib/intern/arithb.c @@ -92,6 +92,26 @@ float sasqrt(float fac) return (float)sqrt(fac); } +float saacosf(float fac) +{ + if(fac<= -1.0f) return (float)M_PI; + else if(fac>=1.0f) return 0.0f; + else return (float)acosf(fac); +} + +float saasinf(float fac) +{ + if(fac<= -1.0f) return (float)-M_PI/2.0f; + else if(fac>=1.0f) return (float)M_PI/2.0f; + else return (float)asinf(fac); +} + +float sasqrtf(float fac) +{ + if(fac<=0.0) return 0.0; + return (float)sqrtf(fac); +} + float Normalize(float *n) { float d; diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 743dbb72e7c..603241038da 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -48,6 +48,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" +#include "BLI_arithb.h" #include "BLI_blenlib.h" #include "BLI_threads.h" From b8445173c4c8588a64870e93dd781d181d31c78b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 18:29:37 +0000 Subject: [PATCH 319/512] 2.5: * Fix armature drawing crash with materials. * Mixed texture/material preview was doing wrong gamma correction. * Use *f math functions for AAO. --- .../blender/editors/preview/previewrender.c | 9 +++-- source/blender/gpu/intern/gpu_draw.c | 33 ++++++++++++++++--- .../blender/render/intern/source/occlusion.c | 19 ++++------- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c index 624952b48f5..b542b362ae0 100644 --- a/source/blender/editors/preview/previewrender.c +++ b/source/blender/editors/preview/previewrender.c @@ -472,9 +472,12 @@ void ED_preview_draw(const bContext *C, void *idp, void *parentp, rcti *rect) newrect.ymin= rect->ymin; newrect.ymax= rect->ymin; - ok= ed_preview_draw_rect(sa, sce, id, (parent != NULL), 1, rect, &newrect); - if(parent) - ok &= ed_preview_draw_rect(sa, sce, parent, 1, 0, rect, &newrect); + if(parent) { + ok = ed_preview_draw_rect(sa, sce, parent, 1, 1, rect, &newrect); + ok &= ed_preview_draw_rect(sa, sce, id, 1, 0, rect, &newrect); + } + else + ok = ed_preview_draw_rect(sa, sce, id, 0, 0, rect, &newrect); if(ok) *rect= newrect; diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 1031a240470..eb834abc670 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -800,7 +800,7 @@ static struct GPUMaterialState { int lastmatnr, lastretval; GPUBlendMode lastblendmode; -} GMS; +} GMS = {NULL}; Material *gpu_active_node_material(Material *ma) { @@ -930,10 +930,33 @@ void GPU_begin_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, O int GPU_enable_material(int nr, void *attribs) { + extern Material defmaterial; /* from material.c */ GPUVertexAttribs *gattribs = attribs; GPUMaterial *gpumat; GPUBlendMode blendmode; + /* no GPU_begin_object_materials, use default material */ + if(!GMS.matbuf) { + float diff[4], spec[4]; + + memset(&GMS, 0, sizeof(GMS)); + + diff[0]= (defmaterial.ref+defmaterial.emit)*defmaterial.r; + diff[1]= (defmaterial.ref+defmaterial.emit)*defmaterial.g; + diff[2]= (defmaterial.ref+defmaterial.emit)*defmaterial.b; + diff[3]= 1.0; + + spec[0]= defmaterial.spec*defmaterial.specr; + spec[1]= defmaterial.spec*defmaterial.specg; + spec[2]= defmaterial.spec*defmaterial.specb; + spec[3]= 1.0; + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); + + return 0; + } + /* prevent index to use un-initialized array items */ if(nr>=GMS.totmat) nr= 0; @@ -1021,11 +1044,11 @@ void GPU_end_object_materials(void) MEM_freeN(GMS.matbuf); MEM_freeN(GMS.gmatbuf); MEM_freeN(GMS.blendmode); - - GMS.matbuf= NULL; - GMS.gmatbuf= NULL; - GMS.blendmode= NULL; } + + GMS.matbuf= NULL; + GMS.gmatbuf= NULL; + GMS.blendmode= NULL; } /* Lights */ diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index 1cbf2523156..feef3dd424a 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -754,9 +754,9 @@ static int occ_visible_quad(float *p, float *n, float *v0, float *v1, float *v2, sd[1]= INPR(n, v1) - c; sd[2]= INPR(n, v2) - c; - if(fabs(sd[0]) < epsilon) sd[0] = 0.0f; - if(fabs(sd[1]) < epsilon) sd[1] = 0.0f; - if(fabs(sd[2]) < epsilon) sd[2] = 0.0f; + if(fabsf(sd[0]) < epsilon) sd[0] = 0.0f; + if(fabsf(sd[1]) < epsilon) sd[1] = 0.0f; + if(fabsf(sd[2]) < epsilon) sd[2] = 0.0f; if(sd[0] > 0) { if(sd[1] > 0) { @@ -1086,13 +1086,6 @@ static float occ_quad_form_factor(float *p, float *n, float *q0, float *q1, floa #endif -static float saacosf(float fac) -{ - if(fac<= -1.0f) return (float)M_PI; - else if(fac>=1.0f) return 0.0f; - else return acos(fac); /* acosf(fac) */ -} - static void normalizef(float *n) { float d; @@ -1100,7 +1093,7 @@ static void normalizef(float *n) d= INPR(n, n); if(d > 1.0e-35F) { - d= 1.0f/sqrt(d); /* sqrtf(d) */ + d= 1.0f/sqrtf(d); n[0] *= d; n[1] *= d; @@ -1222,7 +1215,7 @@ static void occ_lookup(OcclusionTree *tree, int thread, OccFace *exclude, float fac= 1.0f; /* accumulate occlusion from spherical harmonics */ - invd2 = 1.0f/sqrt(d2); + invd2 = 1.0f/sqrtf(d2); weight= occ_solid_angle(node, v, d2, invd2, n); weight *= node->occlusion; @@ -1258,7 +1251,7 @@ static void occ_lookup(OcclusionTree *tree, int thread, OccFace *exclude, float weight *= tree->occlusion[node->child[b].face]; if(bentn) { - invd2= 1.0f/sqrt(d2); + invd2= 1.0f/sqrtf(d2); bentn[0] -= weight*invd2*v[0]; bentn[1] -= weight*invd2*v[1]; bentn[2] -= weight*invd2*v[2]; From 6b8dae0874d774888374992fc3923affb451c45a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 20:05:16 +0000 Subject: [PATCH 320/512] RNA * ID blocks can now get RNA properties defined from python, e.g.: bpy.types.Scene.BoolProperty(..) * RNA structs/functions/properties can now get pointers duplicated (mostly strings), since we can't point to some static string then. * Added ExtensionRNA struct to add into *Type structs for subclassing, is a bit more compact than defining the 4 variables each time. Only disadvantage is it requires including RNA in more places. --- source/blender/blenkernel/BKE_screen.h | 27 +--- source/blender/blenkernel/intern/screen.c | 12 +- source/blender/blenloader/CMakeLists.txt | 2 +- source/blender/blenloader/SConscript | 2 +- source/blender/blenloader/intern/Makefile | 1 + source/blender/makesrna/RNA_define.h | 9 ++ source/blender/makesrna/RNA_types.h | 20 ++- source/blender/makesrna/intern/rna_define.c | 152 +++++++++++++++++- source/blender/makesrna/intern/rna_ui.c | 78 ++++----- source/blender/nodes/CMakeLists.txt | 2 +- source/blender/nodes/SConscript | 2 +- .../blender/nodes/intern/CMP_nodes/Makefile | 1 + source/blender/nodes/intern/Makefile | 1 + .../blender/nodes/intern/SHD_nodes/Makefile | 1 + .../blender/nodes/intern/TEX_nodes/Makefile | 1 + source/blender/python/intern/bpy_rna.c | 108 ++++++++++++- 16 files changed, 341 insertions(+), 78 deletions(-) diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index 5a12c04780a..4fcb7c881be 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -46,10 +46,8 @@ struct wmWindow; struct wmWindowManager; struct uiLayout; struct uiMenuItem; -struct StructRNA; -struct PointerRNA; -struct FunctionRNA; -struct ParameterList; + +#include "RNA_types.h" /* spacetype has everything stored to get an editor working, it gets initialized via ED_spacetypes_init() in editors/area/spacetypes.c */ @@ -169,11 +167,8 @@ typedef struct PanelType { /* draw entirely, view changes should be handled here */ void (*draw)(const struct bContext *, struct Panel *); - /* python integration */ - void *py_data; - struct StructRNA *py_srna; - int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *); - void (*py_free)(void *py_data); + /* RNA integration */ + ExtensionRNA ext; } PanelType; /* header types */ @@ -187,11 +182,8 @@ typedef struct HeaderType { /* draw entirely, view changes should be handled here */ void (*draw)(const struct bContext *, struct Header *); - /* python integration */ - void *py_data; - struct StructRNA *py_srna; - int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *); - void (*py_free)(void *py_data); + /* RNA integration */ + ExtensionRNA ext; } HeaderType; typedef struct Header { @@ -214,11 +206,8 @@ typedef struct MenuType { /* draw entirely, view changes should be handled here */ void (*draw)(const struct bContext *, struct Menu *); - /* python integration */ - void *py_data; - struct StructRNA *py_srna; - int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *); - void (*py_free)(void *py_data); + /* RNA integration */ + ExtensionRNA ext; } MenuType; typedef struct Menu { diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 4b6eddf60d0..d7aa38d5d03 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -61,16 +61,16 @@ static void spacetype_free(SpaceType *st) BLI_freelistN(&art->drawcalls); for(pt= art->paneltypes.first; pt; pt= pt->next) - if(pt->py_free) - pt->py_free(pt->py_data); + if(pt->ext.free) + pt->ext.free(pt->ext.data); for(ht= art->headertypes.first; ht; ht= ht->next) - if(ht->py_free) - ht->py_free(ht->py_data); + if(ht->ext.free) + ht->ext.free(ht->ext.data); for(mt= art->menutypes.first; mt; mt= mt->next) - if(mt->py_free) - mt->py_free(mt->py_data); + if(mt->ext.free) + mt->ext.free(mt->ext.data); BLI_freelistN(&art->paneltypes); BLI_freelistN(&art->headertypes); diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index 1b9c5647702..7bdffdedc05 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -28,7 +28,7 @@ FILE(GLOB SRC intern/*.c) SET(INC . ../../../intern/guardedalloc ../blenlib ../blenkernel - ../makesdna ../readblenfile ../include + ../makesdna ../readblenfile ../include ../makesrna ../python ../../kernel/gen_messaging ../render/extern/include ${ZLIB_INC} diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript index 1aeb6bd9b83..19a89b7e604 100644 --- a/source/blender/blenloader/SConscript +++ b/source/blender/blenloader/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('intern/*.c') incs = '. #/intern/guardedalloc ../blenlib ../blenkernel' incs += ' ../makesdna ../readblenfile ../editors/include' -incs += ' ../render/extern/include' +incs += ' ../render/extern/include ../makesrna' incs += ' ' + env['BF_ZLIB_INC'] diff --git a/source/blender/blenloader/intern/Makefile b/source/blender/blenloader/intern/Makefile index 7382dd655b2..f4690fcc066 100644 --- a/source/blender/blenloader/intern/Makefile +++ b/source/blender/blenloader/intern/Makefile @@ -54,6 +54,7 @@ CPPFLAGS += -I../../readblenfile # This mod uses the GEN, DNA, BLI and BKE modules CPPFLAGS += -I../../../kernel/gen_messaging CPPFLAGS += -I../../makesdna +CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../blenlib # path to the guarded memory allocator CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index f76423ea846..ae9eaba8646 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -170,6 +170,15 @@ void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value); void RNA_enum_item_end(EnumPropertyItem **items, int *totitem); +/* Memory management */ + +void RNA_def_struct_duplicate_pointers(StructRNA *srna); +void RNA_def_struct_free_pointers(StructRNA *srna); +void RNA_def_func_duplicate_pointers(FunctionRNA *func); +void RNA_def_func_free_pointers(FunctionRNA *func); +void RNA_def_property_duplicate_pointers(PropertyRNA *prop); +void RNA_def_property_free_pointers(PropertyRNA *prop); + #ifdef __cplusplus } #endif diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index bf4fa97b6fe..243551b527e 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -113,6 +113,7 @@ typedef enum PropertyFlag { PROP_IDPROPERTY = 1024, PROP_RAW_ACCESS = 8192, PROP_RAW_ARRAY = 16384, + PROP_FREE_POINTERS = 32768 } PropertyFlag; typedef struct CollectionPropertyIterator { @@ -198,7 +199,8 @@ typedef enum FunctionFlag { /* internal flags */ FUNC_BUILTIN = 128, FUNC_EXPORT = 256, - FUNC_RUNTIME = 512 + FUNC_RUNTIME = 512, + FUNC_FREE_POINTERS = 1024 } FunctionFlag; typedef void (*CallFunc)(struct bContext *C, struct ReportList *reports, PointerRNA *ptr, ParameterList *parms); @@ -214,7 +216,8 @@ typedef enum StructFlag { /* internal flags */ STRUCT_RUNTIME = 4, - STRUCT_GENERATED = 8 + STRUCT_GENERATED = 8, + STRUCT_FREE_POINTERS = 16 } StructFlag; typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function); @@ -232,6 +235,19 @@ typedef struct StructRNA StructRNA; typedef struct BlenderRNA BlenderRNA; +/* Extending + * + * This struct must be embedded in *Type structs in + * order to make then definable through RNA. */ + +typedef struct ExtensionRNA { + void *data; + StructRNA *srna; + + int (*call)(PointerRNA *, FunctionRNA *, ParameterList *); + void (*free)(void *data); +} ExtensionRNA; + #ifdef __cplusplus } #endif diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 491095a0bd6..2530f452393 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -39,6 +39,7 @@ #include "RNA_types.h" #include "BLI_ghash.h" +#include "BLI_string.h" #include "rna_internal.h" @@ -445,6 +446,7 @@ void RNA_define_verify_sdna(int verify) void RNA_struct_free(BlenderRNA *brna, StructRNA *srna) { +#ifdef RNA_RUNTIME FunctionRNA *func, *nextfunc; PropertyRNA *prop, *nextprop; PropertyRNA *parm, *nextparm; @@ -452,6 +454,8 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna) for(prop=srna->cont.properties.first; prop; prop=nextprop) { nextprop= prop->next; + RNA_def_property_free_pointers(prop); + if(prop->flag & PROP_RUNTIME) rna_freelinkN(&srna->cont.properties, prop); } @@ -462,17 +466,23 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna) for(parm=func->cont.properties.first; parm; parm=nextparm) { nextparm= parm->next; + RNA_def_property_free_pointers(parm); + if(parm->flag & PROP_RUNTIME) rna_freelinkN(&func->cont.properties, parm); } - if(func->flag & FUNC_RUNTIME) { + RNA_def_func_free_pointers(func); + + if(func->flag & FUNC_RUNTIME) rna_freelinkN(&srna->functions, func); - } } + RNA_def_struct_free_pointers(srna); + if(srna->flag & STRUCT_RUNTIME) rna_freelinkN(&brna->structs, srna); +#endif } void RNA_free(BlenderRNA *brna) @@ -2327,3 +2337,141 @@ void RNA_enum_item_end(EnumPropertyItem **items, int *totitem) RNA_enum_item_add(items, totitem, &empty); } +/* Memory management */ + +#ifdef RNA_RUNTIME +void RNA_def_struct_duplicate_pointers(StructRNA *srna) +{ + if(srna->identifier) srna->identifier= BLI_strdup(srna->identifier); + if(srna->name) srna->name= BLI_strdup(srna->name); + if(srna->description) srna->description= BLI_strdup(srna->description); + + srna->flag |= STRUCT_FREE_POINTERS; +} + +void RNA_def_struct_free_pointers(StructRNA *srna) +{ + if(srna->flag & STRUCT_FREE_POINTERS) { + if(srna->identifier) MEM_freeN((void*)srna->identifier); + if(srna->name) MEM_freeN((void*)srna->name); + if(srna->description) MEM_freeN((void*)srna->description); + } +} + +void RNA_def_func_duplicate_pointers(FunctionRNA *func) +{ + if(func->identifier) func->identifier= BLI_strdup(func->identifier); + if(func->description) func->description= BLI_strdup(func->description); + + func->flag |= FUNC_FREE_POINTERS; +} + +void RNA_def_func_free_pointers(FunctionRNA *func) +{ + if(func->flag & FUNC_FREE_POINTERS) { + if(func->identifier) MEM_freeN((void*)func->identifier); + if(func->description) MEM_freeN((void*)func->description); + } +} + +void RNA_def_property_duplicate_pointers(PropertyRNA *prop) +{ + EnumPropertyItem *earray; + float *farray; + int *iarray; + + if(prop->identifier) prop->identifier= BLI_strdup(prop->identifier); + if(prop->name) prop->name= BLI_strdup(prop->name); + if(prop->description) prop->description= BLI_strdup(prop->description); + + switch(prop->type) { + case PROP_BOOLEAN: { + BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; + + if(bprop->defaultarray) { + iarray= MEM_callocN(sizeof(int)*prop->arraylength, "RNA_def_property_store"); + memcpy(iarray, bprop->defaultarray, sizeof(int)*prop->arraylength); + bprop->defaultarray= iarray; + } + break; + } + case PROP_INT: { + IntPropertyRNA *iprop= (IntPropertyRNA*)prop; + + if(iprop->defaultarray) { + iarray= MEM_callocN(sizeof(int)*prop->arraylength, "RNA_def_property_store"); + memcpy(iarray, iprop->defaultarray, sizeof(int)*prop->arraylength); + iprop->defaultarray= iarray; + } + break; + } + case PROP_ENUM: { + EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; + + if(eprop->item) { + earray= MEM_callocN(sizeof(EnumPropertyItem)*(eprop->totitem+1), "RNA_def_property_store"), + memcpy(earray, eprop->item, sizeof(EnumPropertyItem)*(eprop->totitem+1)); + eprop->item= earray; + } + } + case PROP_FLOAT: { + FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; + + if(fprop->defaultarray) { + farray= MEM_callocN(sizeof(float)*prop->arraylength, "RNA_def_property_store"); + memcpy(farray, fprop->defaultarray, sizeof(float)*prop->arraylength); + fprop->defaultarray= farray; + } + break; + } + case PROP_STRING: { + StringPropertyRNA *sprop= (StringPropertyRNA*)prop; + if(sprop->defaultvalue) sprop->defaultvalue= BLI_strdup(sprop->defaultvalue); + break; + } + default: + break; + } + + prop->flag |= PROP_FREE_POINTERS; +} + +void RNA_def_property_free_pointers(PropertyRNA *prop) +{ + if(prop->flag & PROP_FREE_POINTERS) { + if(prop->identifier) MEM_freeN((void*)prop->identifier); + if(prop->name) MEM_freeN((void*)prop->name); + if(prop->description) MEM_freeN((void*)prop->description); + + switch(prop->type) { + case PROP_BOOLEAN: { + BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; + if(bprop->defaultarray) MEM_freeN((void*)bprop->defaultarray); + break; + } + case PROP_INT: { + IntPropertyRNA *iprop= (IntPropertyRNA*)prop; + if(iprop->defaultarray) MEM_freeN((void*)iprop->defaultarray); + break; + } + case PROP_FLOAT: { + FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; + if(fprop->defaultarray) MEM_freeN((void*)fprop->defaultarray); + break; + } + case PROP_ENUM: { + EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; + if(eprop->item) MEM_freeN((void*)eprop->item); + } + case PROP_STRING: { + StringPropertyRNA *sprop= (StringPropertyRNA*)prop; + if(sprop->defaultvalue) MEM_freeN((void*)sprop->defaultvalue); + break; + } + default: + break; + } + } +} +#endif + diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 8a51a5f4142..21bacc76a8c 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -81,12 +81,12 @@ static int panel_poll(const bContext *C, PanelType *pt) void *ret; int visible; - RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */ + RNA_pointer_create(NULL, pt->ext.srna, NULL, &ptr); /* dummy */ func= RNA_struct_find_function(&ptr, "poll"); RNA_parameter_list_create(&list, &ptr, func); RNA_parameter_set_lookup(&list, "context", &C); - pt->py_call(&ptr, func, &list); + pt->ext.call(&ptr, func, &list); RNA_parameter_get_lookup(&list, "visible", &ret); visible= *(int*)ret; @@ -102,12 +102,12 @@ static void panel_draw(const bContext *C, Panel *pnl) ParameterList list; FunctionRNA *func; - RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr); + RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr); func= RNA_struct_find_function(&ptr, "draw"); RNA_parameter_list_create(&list, &ptr, func); RNA_parameter_set_lookup(&list, "context", &C); - pnl->type->py_call(&ptr, func, &list); + pnl->type->ext.call(&ptr, func, &list); RNA_parameter_list_free(&list); } @@ -118,12 +118,12 @@ static void panel_draw_header(const bContext *C, Panel *pnl) ParameterList list; FunctionRNA *func; - RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr); + RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr); func= RNA_struct_find_function(&ptr, "draw_header"); RNA_parameter_list_create(&list, &ptr, func); RNA_parameter_set_lookup(&list, "context", &C); - pnl->type->py_call(&ptr, func, &list); + pnl->type->ext.call(&ptr, func, &list); RNA_parameter_list_free(&list); } @@ -168,8 +168,8 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi /* check if we have registered this panel type before, and remove it */ for(pt=art->paneltypes.first; pt; pt=pt->next) { if(strcmp(pt->idname, dummypt.idname) == 0) { - if(pt->py_srna) - rna_Panel_unregister(C, pt->py_srna); + if(pt->ext.srna) + rna_Panel_unregister(C, pt->ext.srna); else BLI_freelinkN(&art->paneltypes, pt); break; @@ -180,11 +180,11 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi pt= MEM_callocN(sizeof(PanelType), "python buttons panel"); memcpy(pt, &dummypt, sizeof(dummypt)); - pt->py_srna= RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel"); - pt->py_data= data; - pt->py_call= call; - pt->py_free= free; - RNA_struct_blender_type_set(pt->py_srna, pt); + pt->ext.srna= RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel"); + pt->ext.data= data; + pt->ext.call= call; + pt->ext.free= free; + RNA_struct_blender_type_set(pt->ext.srna, pt); pt->poll= (have_function[0])? panel_poll: NULL; pt->draw= (have_function[1])? panel_draw: NULL; @@ -196,13 +196,13 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi if(C) WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - return pt->py_srna; + return pt->ext.srna; } static StructRNA* rna_Panel_refine(PointerRNA *ptr) { Panel *hdr= (Panel*)ptr->data; - return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Panel; + return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Panel; } /* Header */ @@ -213,12 +213,12 @@ static void header_draw(const bContext *C, Header *hdr) ParameterList list; FunctionRNA *func; - RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &htr); + RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->ext.srna, hdr, &htr); func= RNA_struct_find_function(&htr, "draw"); RNA_parameter_list_create(&list, &htr, func); RNA_parameter_set_lookup(&list, "context", &C); - hdr->type->py_call(&htr, func, &list); + hdr->type->ext.call(&htr, func, &list); RNA_parameter_list_free(&list); } @@ -263,8 +263,8 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo /* check if we have registered this header type before, and remove it */ for(ht=art->headertypes.first; ht; ht=ht->next) { if(strcmp(ht->idname, dummyht.idname) == 0) { - if(ht->py_srna) - rna_Header_unregister(C, ht->py_srna); + if(ht->ext.srna) + rna_Header_unregister(C, ht->ext.srna); break; } } @@ -273,11 +273,11 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo ht= MEM_callocN(sizeof(HeaderType), "python buttons header"); memcpy(ht, &dummyht, sizeof(dummyht)); - ht->py_srna= RNA_def_struct(&BLENDER_RNA, ht->idname, "Header"); - ht->py_data= data; - ht->py_call= call; - ht->py_free= free; - RNA_struct_blender_type_set(ht->py_srna, ht); + ht->ext.srna= RNA_def_struct(&BLENDER_RNA, ht->idname, "Header"); + ht->ext.data= data; + ht->ext.call= call; + ht->ext.free= free; + RNA_struct_blender_type_set(ht->ext.srna, ht); ht->draw= (have_function[0])? header_draw: NULL; @@ -287,13 +287,13 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo if(C) WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - return ht->py_srna; + return ht->ext.srna; } static StructRNA* rna_Header_refine(PointerRNA *htr) { Header *hdr= (Header*)htr->data; - return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Header; + return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Header; } /* Menu */ @@ -306,12 +306,12 @@ static int menu_poll(const bContext *C, MenuType *pt) void *ret; int visible; - RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */ + RNA_pointer_create(NULL, pt->ext.srna, NULL, &ptr); /* dummy */ func= RNA_struct_find_function(&ptr, "poll"); RNA_parameter_list_create(&list, &ptr, func); RNA_parameter_set_lookup(&list, "context", &C); - pt->py_call(&ptr, func, &list); + pt->ext.call(&ptr, func, &list); RNA_parameter_get_lookup(&list, "visible", &ret); visible= *(int*)ret; @@ -327,12 +327,12 @@ static void menu_draw(const bContext *C, Menu *hdr) ParameterList list; FunctionRNA *func; - RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &mtr); + RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->ext.srna, hdr, &mtr); func= RNA_struct_find_function(&mtr, "draw"); RNA_parameter_list_create(&list, &mtr, func); RNA_parameter_set_lookup(&list, "context", &C); - hdr->type->py_call(&mtr, func, &list); + hdr->type->ext.call(&mtr, func, &list); RNA_parameter_list_free(&list); } @@ -377,8 +377,8 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void /* check if we have registered this menu type before, and remove it */ for(mt=art->menutypes.first; mt; mt=mt->next) { if(strcmp(mt->idname, dummymt.idname) == 0) { - if(mt->py_srna) - rna_Menu_unregister(C, mt->py_srna); + if(mt->ext.srna) + rna_Menu_unregister(C, mt->ext.srna); break; } } @@ -387,11 +387,11 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void mt= MEM_callocN(sizeof(MenuType), "python buttons menu"); memcpy(mt, &dummymt, sizeof(dummymt)); - mt->py_srna= RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu"); - mt->py_data= data; - mt->py_call= call; - mt->py_free= free; - RNA_struct_blender_type_set(mt->py_srna, mt); + mt->ext.srna= RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu"); + mt->ext.data= data; + mt->ext.call= call; + mt->ext.free= free; + RNA_struct_blender_type_set(mt->ext.srna, mt); mt->poll= (have_function[0])? menu_poll: NULL; mt->draw= (have_function[1])? menu_draw: NULL; @@ -402,13 +402,13 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void if(C) WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - return mt->py_srna; + return mt->ext.srna; } static StructRNA* rna_Menu_refine(PointerRNA *mtr) { Menu *hdr= (Menu*)mtr->data; - return (hdr->type && hdr->type->py_srna)? hdr->type->py_srna: &RNA_Menu; + return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Menu; } static int rna_UILayout_active_get(PointerRNA *ptr) diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index a4d5b0f0ed2..664aacf11ab 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -27,7 +27,7 @@ FILE(GLOB SRC intern/*.c intern/CMP_nodes/*.c intern/SHD_nodes/*.c intern/TEX_no SET(INC . ../../../intern/guardedalloc ../editors/include ../blenlib ../makesdna - ../render/extern/include ../../../intern/decimation/extern + ../render/extern/include ../../../intern/decimation/extern ../makesrna ../imbuf ../avi ../../../intern/elbeem/extern ../../../intern/iksolver/extern ../blenloader ../quicktime ../blenkernel ../../../extern/glew/include ../gpu diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript index 164e30c7d05..0b35db3b4b7 100644 --- a/source/blender/nodes/SConscript +++ b/source/blender/nodes/SConscript @@ -8,7 +8,7 @@ texsources = env.Glob('intern/TEX_nodes/*.c') incs = '. ./intern ' incs += '#/intern/guardedalloc ../editors/include ../blenlib ../makesdna' -incs += ' ../render/extern/include ' +incs += ' ../render/extern/include ../makesrna ' incs += ' ../imbuf ../avi ' incs += ' ../blenloader' incs += ' ../blenkernel ../renderconverter ' diff --git a/source/blender/nodes/intern/CMP_nodes/Makefile b/source/blender/nodes/intern/CMP_nodes/Makefile index b70b591a588..5e8753570af 100644 --- a/source/blender/nodes/intern/CMP_nodes/Makefile +++ b/source/blender/nodes/intern/CMP_nodes/Makefile @@ -38,6 +38,7 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I../../../blenkernel CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../../makesdna +CPPFLAGS += -I../../../makesrna CPPFLAGS += -I../../../blenlib CPPFLAGS += -I../../../editors/include CPPFLAGS += -I../../../imbuf diff --git a/source/blender/nodes/intern/Makefile b/source/blender/nodes/intern/Makefile index 04a00c1ac9a..08f4b936c76 100644 --- a/source/blender/nodes/intern/Makefile +++ b/source/blender/nodes/intern/Makefile @@ -38,6 +38,7 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I../../blenkernel CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../makesdna +CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../blenlib CPPFLAGS += -I../../editors/include CPPFLAGS += -I../../imbuf diff --git a/source/blender/nodes/intern/SHD_nodes/Makefile b/source/blender/nodes/intern/SHD_nodes/Makefile index 1369d346fc6..b6b21d5f5f8 100644 --- a/source/blender/nodes/intern/SHD_nodes/Makefile +++ b/source/blender/nodes/intern/SHD_nodes/Makefile @@ -40,6 +40,7 @@ CPPFLAGS += -I../../../python CPPFLAGS += -I../../../blenkernel CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../../makesdna +CPPFLAGS += -I../../../makesrna CPPFLAGS += -I../../../blenlib CPPFLAGS += -I../../../editors/include CPPFLAGS += -I../../../imbuf diff --git a/source/blender/nodes/intern/TEX_nodes/Makefile b/source/blender/nodes/intern/TEX_nodes/Makefile index ac741280478..f42660bd562 100644 --- a/source/blender/nodes/intern/TEX_nodes/Makefile +++ b/source/blender/nodes/intern/TEX_nodes/Makefile @@ -41,6 +41,7 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I../../../blenkernel CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../../makesdna +CPPFLAGS += -I../../../makesrna CPPFLAGS += -I../../../blenlib CPPFLAGS += -I../../../include CPPFLAGS += -I../../../imbuf diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index bebb745a27e..7319a269ffb 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -2282,6 +2282,15 @@ static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna) /* done with rna instance */ } +static struct PyMethodDef pyrna_struct_subtype_methods[] = { + {"FloatProperty", (PyCFunction)BPy_FloatProperty, METH_VARARGS|METH_KEYWORDS, ""}, + {"IntProperty", (PyCFunction)BPy_IntProperty, METH_VARARGS|METH_KEYWORDS, ""}, + {"BoolProperty", (PyCFunction)BPy_BoolProperty, METH_VARARGS|METH_KEYWORDS, ""}, + {"StringProperty", (PyCFunction)BPy_StringProperty, METH_VARARGS|METH_KEYWORDS, ""}, + {NULL, NULL, 0, NULL} +}; + + PyObject* pyrna_srna_Subtype(StructRNA *srna) { PyObject *newclass = NULL; @@ -2358,6 +2367,17 @@ PyObject* pyrna_srna_Subtype(StructRNA *srna) if (newclass) { pyrna_subtype_set_rna(newclass, srna); // PyObSpit("NewStructRNA Type: ", (PyObject *)newclass); + + /* attach functions into the class + * so you can do... bpy.types.Scene.SomeFunction() + */ + { + PyMethodDef *ml; + for(ml= pyrna_struct_subtype_methods; ml->ml_name; ml++){ + PyObject_SetAttrString(newclass, ml->ml_name, PyCFunction_New(ml, newclass)); + } + } + } else { /* this should not happen */ @@ -2560,7 +2580,7 @@ static struct PyModuleDef props_module = { PyObject *BPY_rna_props( void ) { - PyObject *submodule, *mod; + PyObject *submodule; #if PY_VERSION_HEX >= 0x03000000 submodule= PyModule_Create(&props_module); #else /* Py2.x */ @@ -2584,6 +2604,7 @@ PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw) static char *kwlist[] = {"attr", "name", "description", "min", "max", "soft_min", "soft_max", "default", NULL}; char *id, *name="", *description=""; float min=FLT_MIN, max=FLT_MAX, soft_min=FLT_MIN, soft_max=FLT_MAX, def=0.0f; + PropertyRNA *prop; if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssfffff:FloatProperty", kwlist, &id, &name, &description, &min, &max, &soft_min, &soft_max, &def)) return NULL; @@ -2595,8 +2616,26 @@ PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw) if (self && PyCObject_Check(self)) { StructRNA *srna = PyCObject_AsVoidPtr(self); - RNA_def_float(srna, id, def, min, max, name, description, soft_min, soft_max); + prop= RNA_def_float(srna, id, def, min, max, name, description, soft_min, soft_max); + RNA_def_property_duplicate_pointers(prop); Py_RETURN_NONE; + } else if(self && PyType_Check(self)) { + PyObject *pyob= PyObject_GetAttrString(self, "__rna__"); + + if(pyob && BPy_StructRNA_Check(pyob)) { + BPy_StructRNA *py_srna= (BPy_StructRNA*)pyob; + + if(py_srna->ptr.data && py_srna->ptr.type == &RNA_Struct) { + if(RNA_struct_is_ID(py_srna->ptr.data)) { + prop= RNA_def_float(py_srna->ptr.data, id, def, min, max, name, description, soft_min, soft_max); + RNA_def_property_duplicate_pointers(prop); + Py_RETURN_NONE; + } + } + } + + PyErr_SetString(PyExc_ValueError, "only works on ID types"); + return NULL; } else { PyObject *ret = PyTuple_New(2); PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_FloatProperty, NULL)); @@ -2611,6 +2650,7 @@ PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw) static char *kwlist[] = {"attr", "name", "description", "min", "max", "soft_min", "soft_max", "default", NULL}; char *id, *name="", *description=""; int min=INT_MIN, max=INT_MAX, soft_min=INT_MIN, soft_max=INT_MAX, def=0; + PropertyRNA *prop; if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssiiiii:IntProperty", kwlist, &id, &name, &description, &min, &max, &soft_min, &soft_max, &def)) return NULL; @@ -2622,8 +2662,26 @@ PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw) if (self && PyCObject_Check(self)) { StructRNA *srna = PyCObject_AsVoidPtr(self); - RNA_def_int(srna, id, def, min, max, name, description, soft_min, soft_max); + prop= RNA_def_int(srna, id, def, min, max, name, description, soft_min, soft_max); + RNA_def_property_duplicate_pointers(prop); Py_RETURN_NONE; + } else if(self && PyType_Check(self)) { + PyObject *pyob= PyObject_GetAttrString(self, "__rna__"); + + if(pyob && BPy_StructRNA_Check(pyob)) { + BPy_StructRNA *py_srna= (BPy_StructRNA*)pyob; + + if(py_srna->ptr.data && py_srna->ptr.type == &RNA_Struct) { + if(RNA_struct_is_ID(py_srna->ptr.data)) { + prop= RNA_def_int(py_srna->ptr.data, id, def, min, max, name, description, soft_min, soft_max); + RNA_def_property_duplicate_pointers(prop); + Py_RETURN_NONE; + } + } + } + + PyErr_SetString(PyExc_ValueError, "only works on ID types"); + return NULL; } else { PyObject *ret = PyTuple_New(2); PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_IntProperty, NULL)); @@ -2638,6 +2696,7 @@ PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw) static char *kwlist[] = {"attr", "name", "description", "default", NULL}; char *id, *name="", *description=""; int def=0; + PropertyRNA *prop; if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssi:BoolProperty", kwlist, &id, &name, &description, &def)) return NULL; @@ -2646,11 +2705,29 @@ PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw) PyErr_SetString(PyExc_ValueError, "all args must be keywors"); // TODO - py3 can enforce this. return NULL; } - + if (self && PyCObject_Check(self)) { StructRNA *srna = PyCObject_AsVoidPtr(self); - RNA_def_boolean(srna, id, def, name, description); + prop= RNA_def_boolean(srna, id, def, name, description); + RNA_def_property_duplicate_pointers(prop); Py_RETURN_NONE; + } else if(self && PyType_Check(self)) { + PyObject *pyob= PyObject_GetAttrString(self, "__rna__"); + + if(pyob && BPy_StructRNA_Check(pyob)) { + BPy_StructRNA *py_srna= (BPy_StructRNA*)pyob; + + if(py_srna->ptr.data && py_srna->ptr.type == &RNA_Struct) { + if(RNA_struct_is_ID(py_srna->ptr.data)) { + prop= RNA_def_boolean(py_srna->ptr.data, id, def, name, description); + RNA_def_property_duplicate_pointers(prop); + Py_RETURN_NONE; + } + } + } + + PyErr_SetString(PyExc_ValueError, "only works on ID types"); + return NULL; } else { PyObject *ret = PyTuple_New(2); PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_BoolProperty, NULL)); @@ -2665,6 +2742,7 @@ PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw) static char *kwlist[] = {"attr", "name", "description", "maxlen", "default", NULL}; char *id, *name="", *description="", *def=""; int maxlen=0; + PropertyRNA *prop; if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssis:StringProperty", kwlist, &id, &name, &description, &maxlen, &def)) return NULL; @@ -2676,8 +2754,26 @@ PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw) if (self && PyCObject_Check(self)) { StructRNA *srna = PyCObject_AsVoidPtr(self); - RNA_def_string(srna, id, def, maxlen, name, description); + prop= RNA_def_string(srna, id, def, maxlen, name, description); + RNA_def_property_duplicate_pointers(prop); Py_RETURN_NONE; + } else if(self && PyType_Check(self)) { + PyObject *pyob= PyObject_GetAttrString(self, "__rna__"); + + if(pyob && BPy_StructRNA_Check(pyob)) { + BPy_StructRNA *py_srna= (BPy_StructRNA*)pyob; + + if(py_srna->ptr.data && py_srna->ptr.type == &RNA_Struct) { + if(RNA_struct_is_ID(py_srna->ptr.data)) { + prop= RNA_def_string(py_srna->ptr.data, id, def, maxlen, name, description); + RNA_def_property_duplicate_pointers(prop); + Py_RETURN_NONE; + } + } + } + + PyErr_SetString(PyExc_ValueError, "only works on ID types"); + return NULL; } else { PyObject *ret = PyTuple_New(2); PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_StringProperty, NULL)); From c354ea0ef12a2b214456b39832a141ed22479734 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 Jul 2009 20:28:32 +0000 Subject: [PATCH 321/512] 2.5: Render This adds a RenderEngine type to RNA, which can be subclassed in python (c++ will follow once we support subclassing there). It's very basic, but plugs into the pipeline nicely. Two example scripts: http://www.pasteall.org/6635/python http://www.pasteall.org/6636/python Issues: * Render runs in a separate thread, and there is unrestricted access, so it's possible to crash blender with unsafe access. * Save buffers and full sample are not supported yet. --- release/ui/buttons_scene.py | 2 + source/blender/editors/screen/screen_ops.c | 25 ++- source/blender/makesdna/DNA_scene_types.h | 4 +- source/blender/makesrna/intern/rna_render.c | 140 +++++++++++++- source/blender/makesrna/intern/rna_scene.c | 64 +++++++ source/blender/render/CMakeLists.txt | 1 + source/blender/render/SConscript | 2 +- .../render/extern/include/RE_pipeline.h | 46 ++++- source/blender/render/intern/source/Makefile | 1 + .../blender/render/intern/source/pipeline.c | 176 +++++++++++++++++- .../windowmanager/intern/wm_init_exit.c | 1 + 11 files changed, 444 insertions(+), 18 deletions(-) diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 5f686469292..45bf8b48788 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -18,6 +18,8 @@ class RENDER_PT_render(RenderButtonsPanel): row.item_booleanO("screen.render", "anim", True, text="Animation", icon='ICON_SEQUENCE') layout.itemR(rd, "display_mode", text="Display") + if rd.multiple_engines: + layout.itemR(rd, "engine") class RENDER_PT_layers(RenderButtonsPanel): __label__ = "Layers" diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index e13e27412b8..4a42d1ed369 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2486,20 +2486,25 @@ 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, "Fra:%d Ve:%d Fa:%d ", (scene->r.cfra), rs->totvert, rs->totface); - if(rs->tothalo) spos+= sprintf(spos, "Ha:%d ", rs->tothalo); - if(rs->totstrand) spos+= sprintf(spos, "St:%d ", rs->totstrand); - spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory); - - if(rs->curfield) - spos+= sprintf(spos, "Field %d ", rs->curfield); - if(rs->curblur) - spos+= sprintf(spos, "Blur %d ", rs->curblur); + if(rs->statstr) { + spos+= sprintf(spos, "%s ", rs->statstr); + } + else { + spos+= sprintf(spos, "Fra:%d Ve:%d Fa:%d ", (scene->r.cfra), rs->totvert, rs->totface); + if(rs->tothalo) spos+= sprintf(spos, "Ha:%d ", rs->tothalo); + if(rs->totstrand) spos+= sprintf(spos, "St:%d ", rs->totstrand); + spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory); + + if(rs->curfield) + spos+= sprintf(spos, "Field %d ", rs->curfield); + if(rs->curblur) + spos+= sprintf(spos, "Blur %d ", rs->curblur); + } BLI_timestr(rs->lastframetime, info_time_str); spos+= sprintf(spos, "Time:%s ", info_time_str); - if(rs->infostr) + if(rs->infostr && rs->infostr[0]) spos+= sprintf(spos, "| %s ", rs->infostr); /* very weak... but 512 characters is quite safe */ diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 8e517ad7760..60176dd5e6e 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -235,7 +235,7 @@ typedef struct RenderData { */ int mode; - /* render engine, octree resolution */ + /* render engine (deprecated), octree resolution */ short renderer, ocres; /** @@ -334,6 +334,8 @@ typedef struct RenderData { float pad2; // XXX deprecated since 2.5 struct Text *dometext; // XXX deprecated since 2.5 + /* render engine */ + char engine[32]; } RenderData; /* control render convert and shading engine */ diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 7eacb4079e5..0ed4e9fb80f 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -34,7 +34,6 @@ #include "WM_types.h" #include "RE_pipeline.h" -#include "RE_render_ext.h" #ifdef RNA_RUNTIME @@ -47,6 +46,82 @@ #include "WM_api.h" +/* RenderEngine */ + +static void engine_render(RenderEngine *engine, struct Scene *scene) +{ + PointerRNA ptr; + ParameterList list; + FunctionRNA *func; + + RNA_pointer_create(NULL, engine->type->ext.srna, engine, &ptr); + func= RNA_struct_find_function(&ptr, "render"); + + RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "scene", &scene); + engine->type->ext.call(&ptr, func, &list); + + RNA_parameter_list_free(&list); +} + +static void rna_RenderEngine_unregister(const bContext *C, StructRNA *type) +{ + RenderEngineType *et= RNA_struct_blender_type_get(type); + + if(!et) + return; + + BLI_freelinkN(&R_engines, et); + RNA_struct_free(&BLENDER_RNA, type); +} + +static StructRNA *rna_RenderEngine_register(const bContext *C, ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) +{ + RenderEngineType *et, dummyet = {0}; + RenderEngine dummyengine= {0}; + PointerRNA dummyptr; + int have_function[1]; + + /* setup dummy engine & engine type to store static properties in */ + dummyengine.type= &dummyet; + RNA_pointer_create(NULL, &RNA_RenderEngine, &dummyengine, &dummyptr); + + /* validate the python class */ + if(validate(&dummyptr, data, have_function) != 0) + return NULL; + + /* check if we have registered this engine type before, and remove it */ + for(et=R_engines.first; et; et=et->next) { + if(strcmp(et->idname, dummyet.idname) == 0) { + if(et->ext.srna) + rna_RenderEngine_unregister(C, et->ext.srna); + break; + } + } + + /* create a new engine type */ + et= MEM_callocN(sizeof(RenderEngineType), "python buttons engine"); + memcpy(et, &dummyet, sizeof(dummyet)); + + et->ext.srna= RNA_def_struct(&BLENDER_RNA, et->idname, "RenderEngine"); + et->ext.data= data; + et->ext.call= call; + et->ext.free= free; + RNA_struct_blender_type_set(et->ext.srna, et); + + et->render= (have_function[0])? engine_render: NULL; + + BLI_addtail(&R_engines, et); + + return et->ext.srna; +} + +static StructRNA* rna_RenderEngine_refine(PointerRNA *ptr) +{ + RenderEngine *engine= (RenderEngine*)ptr->data; + return (engine->type && engine->type->ext.srna)? engine->type->ext.srna: &RNA_RenderEngine; +} + static void rna_RenderResult_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { RenderResult *rr= (RenderResult*)ptr->data; @@ -96,6 +171,68 @@ static int rna_RenderPass_rect_length(PointerRNA *ptr) #else // RNA_RUNTIME +static void rna_def_render_engine(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + FunctionRNA *func; + + srna= RNA_def_struct(brna, "RenderEngine", NULL); + RNA_def_struct_sdna(srna, "RenderEngine"); + RNA_def_struct_ui_text(srna, "Render Engine", "Render engine."); + RNA_def_struct_refine_func(srna, "rna_RenderEngine_refine"); + RNA_def_struct_register_funcs(srna, "rna_RenderEngine_register", "rna_RenderEngine_unregister"); + + /* render */ + func= RNA_def_function(srna, "render", NULL); + RNA_def_function_ui_description(func, "Render scene into an image."); + RNA_def_function_flag(func, FUNC_REGISTER); + RNA_def_pointer(func, "scene", "Scene", "", ""); + + func= RNA_def_function(srna, "begin_result", "RE_engine_begin_result"); + prop= RNA_def_int(func, "x", 0, 0, INT_MAX, "X", "", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_int(func, "y", 0, 0, INT_MAX, "Y", "", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_int(func, "w", 0, 0, INT_MAX, "Width", "", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_int(func, "h", 0, 0, INT_MAX, "Height", "", 0, INT_MAX); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_pointer(func, "result", "RenderResult", "Result", ""); + RNA_def_function_return(func, prop); + + func= RNA_def_function(srna, "update_result", "RE_engine_update_result"); + prop= RNA_def_pointer(func, "result", "RenderResult", "Result", ""); + RNA_def_property_flag(prop, PROP_REQUIRED); + + func= RNA_def_function(srna, "end_result", "RE_engine_end_result"); + prop= RNA_def_pointer(func, "result", "RenderResult", "Result", ""); + RNA_def_property_flag(prop, PROP_REQUIRED); + + func= RNA_def_function(srna, "test_break", "RE_engine_test_break"); + prop= RNA_def_boolean(func, "do_break", 0, "Break", ""); + RNA_def_function_return(func, prop); + + func= RNA_def_function(srna, "update_stats", "RE_engine_update_stats"); + prop= RNA_def_string(func, "stats", "", 0, "Stats", ""); + RNA_def_property_flag(prop, PROP_REQUIRED); + prop= RNA_def_string(func, "info", "", 0, "Info", ""); + RNA_def_property_flag(prop, PROP_REQUIRED); + + /* registration */ + RNA_define_verify_sdna(0); + + prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "type->idname"); + RNA_def_property_flag(prop, PROP_REGISTER); + + prop= RNA_def_property(srna, "label", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "type->name"); + RNA_def_property_flag(prop, PROP_REGISTER); + + RNA_define_verify_sdna(1); +} + static void rna_def_render_result(BlenderRNA *brna) { StructRNA *srna; @@ -205,6 +342,7 @@ static void rna_def_render_pass(BlenderRNA *brna) void RNA_def_render(BlenderRNA *brna) { + rna_def_render_engine(brna); rna_def_render_result(brna); rna_def_render_layer(brna); rna_def_render_pass(brna); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index f23a14d99fb..bd23fc9e1f6 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -60,6 +60,8 @@ EnumPropertyItem prop_mode_items[] ={ #include "BLI_threads.h" +#include "RE_pipeline.h" + PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter) { ListBaseIterator *internal= iter->internal; @@ -163,6 +165,48 @@ static void rna_SceneRenderData_active_layer_index_range(PointerRNA *ptr, int *m *max= MAX2(0, *max); } +static void rna_SceneRenderData_engine_set(PointerRNA *ptr, int value) +{ + RenderData *rd= (RenderData*)ptr->data; + RenderEngineType *type= BLI_findlink(&R_engines, value); + + if(type) + BLI_strncpy(rd->engine, type->idname, sizeof(rd->engine)); +} + +static EnumPropertyItem *rna_SceneRenderData_engine_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + RenderEngineType *type; + EnumPropertyItem *item= NULL; + EnumPropertyItem tmp = {0, "", 0, "", ""}; + int a=0, totitem= 0; + + for(type=R_engines.first; type; type=type->next, a++) { + tmp.value= a; + tmp.identifier= type->idname; + tmp.name= type->name; + RNA_enum_item_add(&item, &totitem, &tmp); + } + + RNA_enum_item_end(&item, &totitem); + *free= 1; + + return item; +} + +static int rna_SceneRenderData_engine_get(PointerRNA *ptr) +{ + RenderData *rd= (RenderData*)ptr->data; + RenderEngineType *type; + int a= 0; + + for(type=R_engines.first; type; type=type->next, a++) + if(strcmp(type->idname, rd->engine) == 0) + return a; + + return 0; +} + static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value) { Scene *scene= (Scene*)ptr->id.data; @@ -183,6 +227,11 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value) } } +static int rna_SceneRenderData_multiple_engines_get(PointerRNA *ptr) +{ + return (BLI_countlist(&R_engines) > 1); +} + static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values) { SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data; @@ -997,6 +1046,10 @@ static void rna_def_scene_render_data(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; #endif + static EnumPropertyItem engine_items[] = { + {0, "BLENDER", 0, "Blender", ""}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "SceneRenderData", NULL); RNA_def_struct_sdna(srna, "RenderData"); RNA_def_struct_nested(brna, srna, "Scene"); @@ -1520,6 +1573,17 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_int_funcs(prop, "rna_SceneRenderData_active_layer_index_get", "rna_SceneRenderData_active_layer_index_set", "rna_SceneRenderData_active_layer_index_range"); RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + /* engine */ + prop= RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, engine_items); + RNA_def_property_enum_funcs(prop, "rna_SceneRenderData_engine_get", "rna_SceneRenderData_engine_set", "rna_SceneRenderData_engine_itemf"); + RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering."); + + prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_multiple_engines_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Multiple Engine", "More than one rendering engine is available."); } void RNA_def_scene(BlenderRNA *brna) diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 8ba7dc123e7..411bd61c3ff 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -30,6 +30,7 @@ SET(INC intern/include ../../../intern/guardedalloc ../blenlib ../makesdna extern/include ../blenkernel ../radiosity/extern/include ../imbuf ../quicktime ../include ../../kernel/gen_messaging ../blenloader + ../makesrna ) IF(WITH_OPENEXR) diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index 173f5db8482..dbd9f65254b 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -4,7 +4,7 @@ Import ('env') cflags='' sources = env.Glob('intern/source/*.c') -incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna' +incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna ../makesrna' incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf' incs += ' ../include ../blenloader' diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index e0e78739d39..643a381c54f 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -33,12 +33,17 @@ #include "DNA_listBase.h" #include "DNA_vec_types.h" #include "BKE_utildefines.h" +#include "RNA_types.h" -struct Scene; -struct RenderData; +struct bNodeTree; +struct Image; struct NodeBlurData; struct Object; -struct bNodeTree; +struct RenderData; +struct RenderEngine; +struct RenderEngineType; +struct RenderResult; +struct Scene; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* this include is what is exposed of render to outside world */ @@ -130,7 +135,7 @@ typedef struct RenderStats { int totface, totvert, totstrand, tothalo, totlamp, totpart; short curfield, curblur, curpart, partsdone, convertdone; double starttime, lastframetime; - char *infostr, scenename[32]; + char *infostr, *statstr, scenename[32]; } RenderStats; @@ -233,5 +238,38 @@ void RE_DataBase_GetView(struct Render *re, float mat[][4]); void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]); struct Scene *RE_GetScene(struct Render *re); +/* External Engine */ + + +extern ListBase R_engines; + +typedef struct RenderEngineType { + struct RenderEngineType *next, *prev; + + /* type info */ + char idname[32]; + char name[32]; + + void (*render)(struct RenderEngine *engine, struct Scene *scene); + + /* RNA integration */ + ExtensionRNA ext; +} RenderEngineType; + +typedef struct RenderEngine { + RenderEngineType *type; + struct Render *re; + ListBase fullresult; +} RenderEngine; + +struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h); +void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result); +void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result); + +int RE_engine_test_break(RenderEngine *engine); +void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info); + +void RE_engines_free(void); + #endif /* RE_PIPELINE_H */ diff --git a/source/blender/render/intern/source/Makefile b/source/blender/render/intern/source/Makefile index 22680b26338..3c8d0f637a3 100644 --- a/source/blender/render/intern/source/Makefile +++ b/source/blender/render/intern/source/Makefile @@ -43,6 +43,7 @@ CPPFLAGS += -I../../../radiosity/extern/include CPPFLAGS += -I../../../blenlib CPPFLAGS += -I../../../imbuf CPPFLAGS += -I../../../makesdna +CPPFLAGS += -I../../../makesrna CPPFLAGS += -I../../../blenkernel CPPFLAGS += -I../../../quicktime CPPFLAGS += -I../../../../kernel/gen_messaging diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index db78d0bbb61..801a9729277 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1664,8 +1664,23 @@ void RE_TileProcessor(Render *re, int firsttile, int threaded) /* ************ This part uses API, for rendering Blender scenes ********** */ +static void external_render_3d(Render *re, RenderEngineType *type); + static void do_render_3d(Render *re) { + RenderEngineType *type; + + /* try external */ + for(type=R_engines.first; type; type=type->next) + if(strcmp(type->idname, re->r.engine) == 0) + break; + + if(type && type->render) { + external_render_3d(re, type); + return; + } + + /* internal */ // re->cfra= cfra; /* <- unused! */ @@ -1681,7 +1696,6 @@ static void do_render_3d(Render *re) if(re->flag & R_HALO) if(!re->test_break(re->tbh)) add_halo_flare(re); - /* free all render verts etc */ RE_Database_Free(re); @@ -2766,3 +2780,163 @@ void RE_init_threadcount(Render *re) re->r.threads = BLI_system_thread_count(); } } + +/************************** External Engines ***************************/ + +static RenderEngineType internal_engine_type = { + NULL, NULL, "BlenderRenderEngine", "Blender", NULL, + NULL, NULL, NULL, NULL}; + +ListBase R_engines = {&internal_engine_type, &internal_engine_type}; + +RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h) +{ + Render *re= engine->re; + RenderResult *result; + rcti disprect; + + /* ensure the coordinates are within the right limits */ + CLAMP(x, 0, re->result->rectx); + CLAMP(y, 0, re->result->recty); + CLAMP(w, 0, re->result->rectx); + CLAMP(h, 0, re->result->recty); + + if(x + w > re->result->rectx) + w= re->result->rectx - x; + if(y + h > re->result->recty) + h= re->result->recty - y; + + /* allocate a render result */ + disprect.xmin= x; + disprect.xmax= x+w; + disprect.ymin= y; + disprect.ymax= y+h; + + if(0) { // XXX (re->r.scemode & R_FULL_SAMPLE)) { + result= new_full_sample_buffers(re, &engine->fullresult, &disprect, 0); + } + else { + result= new_render_result(re, &disprect, 0, RR_USEMEM); + BLI_addtail(&engine->fullresult, result); + } + + return result; +} + +void RE_engine_update_result(RenderEngine *engine, RenderResult *result) +{ + Render *re= engine->re; + + if(result && render_display_draw_enabled(re)) { + result->renlay= result->layers.first; // weak + re->display_draw(re->ddh, result, NULL); + } +} + +void RE_engine_end_result(RenderEngine *engine, RenderResult *result) +{ + Render *re= engine->re; + + if(!result) + return; + + /* merge */ + if(re->result->exrhandle) { + RenderResult *rr, *rrpart; + + // XXX crashes, exr expects very particular part sizes + for(rr= re->result, rrpart= result; rr && rrpart; rr= rr->next, rrpart= rrpart->next) + save_render_result_tile(rr, rrpart); + } + else if(render_display_draw_enabled(re)) { + /* on break, don't merge in result for preview renders, looks nicer */ + if(re->test_break(re->tbh) && (re->r.scemode & R_PREVIEWBUTS)); + else merge_render_result(re->result, result); + } + + /* draw */ + if(!re->test_break(re->tbh) && render_display_draw_enabled(re)) { + result->renlay= result->layers.first; // weak + re->display_draw(re->ddh, result, NULL); + } + + /* free */ + free_render_result(&engine->fullresult, result); +} + +int RE_engine_test_break(RenderEngine *engine) +{ + Render *re= engine->re; + + return re->test_break(re->tbh); +} + +void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info) +{ + Render *re= engine->re; + + re->i.statstr= stats; + re->i.infostr= info; + re->stats_draw(re->sdh, &re->i); + re->i.infostr= NULL; + re->i.statstr= NULL; +} + +static void external_render_3d(Render *re, RenderEngineType *type) +{ + RenderEngine engine; + + if(re->result==NULL || !(re->r.scemode & R_PREVIEWBUTS)) { + RE_FreeRenderResult(re->result); + + if(0) // XXX re->r.scemode & R_FULL_SAMPLE) + re->result= new_full_sample_buffers_exr(re); + else + re->result= new_render_result(re, &re->disprect, 0, 0); // XXX re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)); + } + + if(re->result==NULL) + return; + + /* external */ + memset(&engine, 0, sizeof(engine)); + engine.type= type; + engine.re= re; + + type->render(&engine, re->scene); + + free_render_result(&engine.fullresult, engine.fullresult.first); + + if(re->result->exrhandle) { + RenderResult *rr; + + save_empty_result_tiles(re); + + for(rr= re->result; rr; rr= rr->next) { + IMB_exr_close(rr->exrhandle); + rr->exrhandle= NULL; + } + + free_render_result(&re->fullresult, re->result); + re->result= NULL; + + read_render_result(re, 0); + } +} + +void RE_engines_free() +{ + RenderEngineType *type, *next; + + for(type=R_engines.first; type; type=next) { + next= type->next; + + if(type != &internal_engine_type) { + if(type->ext.free) + type->ext.free(type->ext.data); + + MEM_freeN(type); + } + } +} + diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 5c34b19c1f4..3d8efc018c4 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -239,6 +239,7 @@ void WM_exit(bContext *C) BLF_exit(); RE_FreeAllRender(); + RE_engines_free(); // free_txt_data(); From d44d7e220dfbf7b0575ec93f1bb18777f4277eef Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Tue, 21 Jul 2009 21:31:13 +0000 Subject: [PATCH 322/512] SVN maintenance. --- source/blender/makesrna/intern/rna_render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 0ed4e9fb80f..774eecba0f1 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -1,5 +1,5 @@ /** - * $Id: rna_render.c 21648 2009-07-17 02:31:28Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From 53c1b562af9a0c8f66ae9f406fa2b50aee32a569 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 22 Jul 2009 06:31:36 +0000 Subject: [PATCH 323/512] Fixed weird alignment for new mesh objects. This still doesn't work correctly in edit mode, but it's a bit more usable than before. --- source/blender/editors/mesh/editmesh_add.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index c24670aa856..92aa46ea390 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -1281,9 +1281,9 @@ static float new_primitive_matrix(bContext *C, float primmat[][4]) Mat4One(primmat); - if(rv3d) + if(rv3d && (U.flag & USER_ADD_VIEWALIGNED)) { Mat3CpyMat4(vmat, rv3d->viewmat); - else + } else Mat3One(vmat); /* inverse transform for view and object */ From ffb8ac01a262e8f81e4cf2730e8b81ccdad077ed Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Jul 2009 09:41:41 +0000 Subject: [PATCH 324/512] remove scriptlinks, they were not working and we have plans for better script integration in 2.5 --- source/blender/blenkernel/BKE_object.h | 5 -- source/blender/blenkernel/intern/blender.c | 4 - source/blender/blenkernel/intern/depsgraph.c | 2 - source/blender/blenkernel/intern/exotic.c | 22 ++---- source/blender/blenkernel/intern/material.c | 8 -- source/blender/blenkernel/intern/object.c | 56 +------------ source/blender/blenkernel/intern/scene.c | 11 --- source/blender/blenkernel/intern/screen.c | 4 - source/blender/blenkernel/intern/world.c | 9 +-- source/blender/blenloader/intern/readfile.c | 75 ------------------ source/blender/blenloader/intern/writefile.c | 21 ----- source/blender/editors/screen/area.c | 7 -- source/blender/editors/screen/screen_edit.c | 1 - .../blender/editors/space_outliner/outliner.c | 19 ----- source/blender/editors/space_text/text_ops.c | 7 -- .../editors/space_view3d/view3d_draw.c | 4 - source/blender/makesdna/DNA_camera_types.h | 2 - source/blender/makesdna/DNA_lamp_types.h | 3 - source/blender/makesdna/DNA_material_types.h | 3 - source/blender/makesdna/DNA_object_types.h | 2 - source/blender/makesdna/DNA_scene_types.h | 3 - source/blender/makesdna/DNA_screen_types.h | 3 - .../blender/makesdna/DNA_scriptlink_types.h | 79 ------------------- source/blender/makesdna/DNA_world_types.h | 3 - source/blender/makesdna/intern/makesdna.c | 2 - source/blender/makesrna/RNA_access.h | 1 - source/blender/makesrna/intern/makesrna.c | 1 - source/blender/makesrna/intern/rna_internal.h | 1 - source/blender/makesrna/intern/rna_lamp.c | 6 -- source/blender/makesrna/intern/rna_material.c | 5 -- source/blender/makesrna/intern/rna_object.c | 6 -- .../blender/makesrna/intern/rna_scriptlink.c | 48 ----------- source/blender/makesrna/intern/rna_world.c | 4 - source/blender/python/BPY_extern.h | 9 --- source/blender/python/intern/bpy_scriptlink.c | 73 ----------------- source/blender/python/intern/stubs.c | 2 - .../blender/windowmanager/intern/wm_files.c | 2 - 37 files changed, 12 insertions(+), 501 deletions(-) delete mode 100644 source/blender/makesdna/DNA_scriptlink_types.h delete mode 100644 source/blender/makesrna/intern/rna_scriptlink.c delete mode 100644 source/blender/python/intern/bpy_scriptlink.c diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 3d71193f37a..a57529ccf75 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -98,11 +98,6 @@ void object_to_mat4(struct Object *ob, float mat[][4]); void set_no_parent_ipo(int val); -void disable_where_script(short on); -int during_script(void); -void disable_where_scriptlink(short on); -int during_scriptlink(void); - void where_is_object_time(struct Scene *scene, struct Object *ob, float ctime); void where_is_object(struct Scene *scene, struct Object *ob); void where_is_object_simul(struct Scene *scene, struct Object *ob); diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index d3d21018c1c..20505356d95 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -387,10 +387,6 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename) /* now tag update flags, to ensure deformers get calculated on redraw */ DAG_scene_update_flags(CTX_data_scene(C), CTX_data_scene(C)->lay); - if (G.f & G_DOSCRIPTLINKS) { - /* there's an onload scriptlink to execute in screenmain */ -// XXX mainqenter(ONLOAD_SCRIPT, 1); - } if (G.sce != filename) /* these are the same at times, should never copy to the same location */ strcpy(G.sce, filename); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 7e6a652da6b..6c765b02e5d 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -1997,8 +1997,6 @@ static void dag_object_time_update_flags(Object *ob) } } - if(ob->scriptlink.totscript) ob->recalc |= OB_RECALC_OB; - if(ob->parent) { /* motion path or bone child */ if(ob->parent->type==OB_CURVE || ob->parent->type==OB_ARMATURE) ob->recalc |= OB_RECALC_OB; diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index c7a8b150d3a..1797cbe3b96 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -1900,16 +1900,10 @@ void write_stl(Scene *scene, char *str) if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0; if(BLI_testextensie(str,".stl")==0) strcat(str, ".stl"); - if (!during_script()) { - if (BLI_exists(str)) - ; //XXX if(saveover(str)==0) - //XXX return; - } - fpSTL= fopen(str, "wb"); if(fpSTL==NULL) { - if (!during_script()) ; //XXX error("Can't write file"); + //XXX error("Can't write file"); return; } strcpy(temp_dir, str); @@ -2233,11 +2227,11 @@ void write_vrml(Scene *scene, char *str) if(BLI_testextensie(str,".blend")) str[ strlen(str)-6]= 0; if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0; if(BLI_testextensie(str,".wrl")==0) strcat(str, ".wrl"); - //XXX saveover() if(!during_script() && saveover(str)==0) return; + //XXX saveover() if(saveover(str)==0) return; fp= fopen(str, "w"); - if(fp==NULL && !during_script()) { + if(fp==NULL) { //XXX error("Can't write file"); return; } @@ -2544,15 +2538,15 @@ void write_dxf(struct Scene *scene, char *str) if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0; if(BLI_testextensie(str,".dxf")==0) strcat(str, ".dxf"); - if (!during_script()) { - if (BLI_exists(str)) - ; //XXX if(saveover(str)==0) - // return; + + if (BLI_exists(str)) { + ; //XXX if(saveover(str)==0) + // return; } fp= fopen(str, "w"); - if(fp==NULL && !during_script()) { + if(fp==NULL) { //XXX error("Can't write file"); return; } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index bee63f497ca..08a19cada7d 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -80,10 +80,6 @@ void free_material(Material *ma) { MTex *mtex; int a; - -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&ma->scriptlink); -#endif for(a=0; amtex[a]; @@ -210,10 +206,6 @@ Material *copy_material(Material *ma) id_us_plus((ID *)man->mtex[a]->tex); } } - -#ifndef DISABLE_PYTHON - BPY_copy_scriptlink(&ma->scriptlink); -#endif if(ma->ramp_col) man->ramp_col= MEM_dupallocN(ma->ramp_col); if(ma->ramp_spec) man->ramp_spec= MEM_dupallocN(ma->ramp_spec); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 60b34bf0783..e463d007a2d 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -266,10 +266,6 @@ void free_object(Object *ob) free_actuators(&ob->actuators); free_constraints(&ob->constraints); - -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&ob->scriptlink); -#endif if(ob->pd){ if(ob->pd->tex) @@ -645,10 +641,7 @@ Camera *copy_camera(Camera *cam) camn= copy_libblock(cam); camn->adt= BKE_copy_animdata(cam->adt); - -#ifndef DISABLE_PYTHON - BPY_copy_scriptlink(&camn->scriptlink); -#endif + return camn; } @@ -797,9 +790,7 @@ Lamp *copy_lamp(Lamp *la) #endif // XXX old animation system if (la->preview) lan->preview = BKE_previewimg_copy(la->preview); -#ifndef DISABLE_PYTHON - BPY_copy_scriptlink(&la->scriptlink); -#endif + return lan; } @@ -857,9 +848,6 @@ void make_local_lamp(Lamp *la) void free_camera(Camera *ca) { -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&ca->scriptlink); -#endif BKE_free_animdata((ID *)ca); } @@ -868,11 +856,6 @@ void free_lamp(Lamp *la) MTex *mtex; int a; - /* scriptlinks */ -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&la->scriptlink); -#endif - for(a=0; amtex[a]; if(mtex && mtex->tex) mtex->tex->id.us--; @@ -1210,9 +1193,7 @@ Object *copy_object(Object *ob) modifier_copyData(md, nmd); BLI_addtail(&obn->modifiers, nmd); } -#ifndef DISABLE_PYTHON - BPY_copy_scriptlink(&ob->scriptlink); -#endif + obn->prop.first = obn->prop.last = NULL; copy_properties(&obn->prop, &ob->prop); @@ -1843,26 +1824,6 @@ void set_no_parent_ipo(int val) no_parent_ipo= val; } -static int during_script_flag=0; -void disable_where_script(short on) -{ - during_script_flag= on; -} - -int during_script(void) { - return during_script_flag; -} - -static int during_scriptlink_flag=0; -void disable_where_scriptlink(short on) -{ - during_scriptlink_flag= on; -} - -int during_scriptlink(void) { - return during_scriptlink_flag; -} - void where_is_object_time(Scene *scene, Object *ob, float ctime) { float *fp1, *fp2, slowmat[4][4] = MAT4_UNITY; @@ -1962,11 +1923,6 @@ void where_is_object_time(Scene *scene, Object *ob, float ctime) constraints_clear_evalob(cob); } -#ifndef DISABLE_PYTHON - if(ob->scriptlink.totscript && !during_script()) { - if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_REDRAW); - } -#endif /* set negative scale flag in object */ Crossf(vec, ob->obmat[0], ob->obmat[1]); @@ -2338,9 +2294,6 @@ void object_handle_update(Scene *scene, Object *ob) } else where_is_object(scene, ob); -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_OBJECTUPDATE); -#endif } if(ob->recalc & OB_RECALC_DATA) { @@ -2429,9 +2382,6 @@ void object_handle_update(Scene *scene, Object *ob) psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated; } } -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_OBDATAUPDATE); -#endif } /* the no-group proxy case, we call update */ diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 20ed7c1b7eb..d629654c426 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -54,7 +54,6 @@ #include "DNA_meta_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" -#include "DNA_scriptlink_types.h" #include "DNA_texture_types.h" #include "DNA_userdef_types.h" @@ -142,10 +141,6 @@ void free_scene(Scene *sce) BLI_freelistN(&sce->base); seq_free_editing(sce->ed); - -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&sce->scriptlink); -#endif BKE_free_animdata((ID *)sce); BKE_keyingsets_free(&sce->keyingsets); @@ -398,9 +393,6 @@ void set_scene_bg(Scene *scene) ob->ctime= -1234567.0; /* force ipo to be calculated later */ } /* no full animation update, this to enable render code to work (render code calls own animation updates) */ - - /* do we need FRAMECHANGED in set_scene? */ -// if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0); } /* called from creator.c */ @@ -659,9 +651,6 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay) /* clear animation overrides */ // XXX TODO... -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0); -#endif /* sets first, we allow per definition current scene to have dependencies on sets */ for(sce= sce->set; sce; sce= sce->set) scene_update(sce, lay); diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index d7aa38d5d03..524120bf014 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -291,10 +291,6 @@ void BKE_screen_area_free(ScrArea *sa) BKE_spacedata_freelist(&sa->spacedata); BLI_freelistN(&sa->actionzones); - -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&sa->scriptlink); -#endif } /* don't free screen itself */ diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index c84c54b17ee..f795c147f54 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -36,7 +36,6 @@ #include "DNA_world_types.h" #include "DNA_texture_types.h" -#include "DNA_scriptlink_types.h" #include "DNA_scene_types.h" #include "DNA_object_types.h" #include "DNA_camera_types.h" @@ -66,10 +65,7 @@ void free_world(World *wrld) { MTex *mtex; int a; - -#ifndef DISABLE_PYTHON - BPY_free_scriptlink(&wrld->scriptlink); -#endif + for(a=0; amtex[a]; if(mtex && mtex->tex) mtex->tex->id.us--; @@ -126,9 +122,6 @@ World *copy_world(World *wrld) } if (wrld->preview) wrldn->preview = BKE_previewimg_copy(wrld->preview); -#ifndef DISABLE_PYTHON - BPY_copy_scriptlink(&wrld->scriptlink); -#endif #if 0 // XXX old animation system id_us_plus((ID *)wrldn->ipo); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 5ab30913b18..8e33979b134 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1565,33 +1565,6 @@ static PreviewImage *direct_link_preview_image(FileData *fd, PreviewImage *old_p return prv; } -/* ************ READ SCRIPTLINK *************** */ - -static void lib_link_scriptlink(FileData *fd, ID *id, ScriptLink *slink) -{ - int i; - - for(i=0; itotscript; i++) { - slink->scripts[i]= newlibadr(fd, id->lib, slink->scripts[i]); - } -} - -static void direct_link_scriptlink(FileData *fd, ScriptLink *slink) -{ - slink->scripts= newdataadr(fd, slink->scripts); - test_pointer_array(fd, (void **)&slink->scripts); - - slink->flag= newdataadr(fd, slink->flag); - - if(fd->flags & FD_FLAGS_SWITCH_ENDIAN) { - int a; - - for(a=0; atotscript; a++) { - SWITCH_SHORT(slink->flag[a]); - } - } -} - /* ************ READ ANIMATION STUFF ***************** */ /* Legacy Data Support (for Version Patching) ----------------------------- */ @@ -2367,8 +2340,6 @@ static void lib_link_camera(FileData *fd, Main *main) ca->dof_ob= newlibadr_us(fd, ca->id.lib, ca->dof_ob); - lib_link_scriptlink(fd, &ca->id, &ca->scriptlink); - ca->id.flag -= LIB_NEEDLINK; } ca= ca->id.next; @@ -2379,8 +2350,6 @@ static void direct_link_camera(FileData *fd, Camera *ca) { ca->adt= newdataadr(fd, ca->adt); direct_link_animdata(fd, ca->adt); - - direct_link_scriptlink(fd, &ca->scriptlink); } @@ -2407,8 +2376,6 @@ static void lib_link_lamp(FileData *fd, Main *main) la->ipo= newlibadr_us(fd, la->id.lib, la->ipo); // XXX depreceated - old animation system - lib_link_scriptlink(fd, &la->id, &la->scriptlink); - la->id.flag -= LIB_NEEDLINK; } la= la->id.next; @@ -2421,8 +2388,6 @@ static void direct_link_lamp(FileData *fd, Lamp *la) la->adt= newdataadr(fd, la->adt); direct_link_animdata(fd, la->adt); - - direct_link_scriptlink(fd, &la->scriptlink); for(a=0; amtex[a]= newdataadr(fd, la->mtex[a]); @@ -2568,8 +2533,6 @@ static void lib_link_world(FileData *fd, Main *main) } } - lib_link_scriptlink(fd, &wrld->id, &wrld->scriptlink); - wrld->id.flag -= LIB_NEEDLINK; } wrld= wrld->id.next; @@ -2582,8 +2545,6 @@ static void direct_link_world(FileData *fd, World *wrld) wrld->adt= newdataadr(fd, wrld->adt); direct_link_animdata(fd, wrld->adt); - - direct_link_scriptlink(fd, &wrld->scriptlink); for(a=0; amtex[a]= newdataadr(fd, wrld->mtex[a]); @@ -2921,7 +2882,6 @@ static void lib_link_material(FileData *fd, Main *main) mtex->object= newlibadr(fd, ma->id.lib, mtex->object); } } - lib_link_scriptlink(fd, &ma->id, &ma->scriptlink); if(ma->nodetree) lib_link_ntree(fd, &ma->id, ma->nodetree); @@ -2946,8 +2906,6 @@ static void direct_link_material(FileData *fd, Material *ma) ma->ramp_col= newdataadr(fd, ma->ramp_col); ma->ramp_spec= newdataadr(fd, ma->ramp_spec); - direct_link_scriptlink(fd, &ma->scriptlink); - ma->nodetree= newdataadr(fd, ma->nodetree); if(ma->nodetree) direct_link_nodetree(fd, ma->nodetree); @@ -3585,7 +3543,6 @@ static void lib_link_object(FileData *fd, Main *main) if(ob->pd->tex) ob->pd->tex=newlibadr_us(fd, ob->id.lib, ob->pd->tex); - lib_link_scriptlink(fd, &ob->id, &ob->scriptlink); lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem); lib_link_modifiers(fd, ob); } @@ -3785,8 +3742,6 @@ static void direct_link_object(FileData *fd, Object *ob) link_list(fd, &ob->constraintChannels); // >>> XXX depreceated - old animation system - direct_link_scriptlink(fd, &ob->scriptlink); - ob->mat= newdataadr(fd, ob->mat); test_pointer_array(fd, (void **)&ob->mat); ob->matbits= newdataadr(fd, ob->matbits); @@ -4039,8 +3994,6 @@ static void lib_link_scene(FileData *fd, Main *main) } SEQ_END - lib_link_scriptlink(fd, &sce->id, &sce->scriptlink); - if(sce->nodetree) { lib_link_ntree(fd, &sce->id, sce->nodetree); composite_patch(sce->nodetree, sce); @@ -4216,8 +4169,6 @@ static void direct_link_scene(FileData *fd, Scene *sce) } } } - - direct_link_scriptlink(fd, &sce->scriptlink); sce->r.avicodecdata = newdataadr(fd, sce->r.avicodecdata); if (sce->r.avicodecdata) { @@ -4372,9 +4323,6 @@ static void lib_link_screen(FileData *fd, Main *main) sa->full= newlibadr(fd, sc->id.lib, sa->full); - /* space handler scriptlinks */ - lib_link_scriptlink(fd, &sc->id, &sa->scriptlink); - for (sl= sa->spacedata.first; sl; sl= sl->next) { if(sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; @@ -4553,16 +4501,6 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene) while(sa) { SpaceLink *sl; - if (sa->scriptlink.totscript) { - /* restore screen area script links */ - ScriptLink *slink = &sa->scriptlink; - int script_idx; - for (script_idx = 0; script_idx < slink->totscript; script_idx++) { - slink->scripts[script_idx] = restore_pointer_by_name(newmain, - (ID *)slink->scripts[script_idx], 1); - } - } - for (sl= sa->spacedata.first; sl; sl= sl->next) { if(sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; @@ -4939,9 +4877,6 @@ static void direct_link_screen(FileData *fd, bScreen *sc) sa->v2= newdataadr(fd, sa->v2); sa->v3= newdataadr(fd, sa->v3); sa->v4= newdataadr(fd, sa->v4); - - /* space handler scriptlinks */ - direct_link_scriptlink(fd, &sa->scriptlink); } } @@ -10200,15 +10135,6 @@ static void expand_modifier(FileData *fd, Main *mainvar, ModifierData *md) } } -static void expand_scriptlink(FileData *fd, Main *mainvar, ScriptLink *slink) -{ - int i; - - for(i=0; itotscript; i++) { - expand_doit(fd, mainvar, slink->scripts[i]); - } -} - static void expand_object(FileData *fd, Main *mainvar, Object *ob) { ModifierData *md; @@ -10336,7 +10262,6 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob) if(ob->pd && ob->pd->tex) expand_doit(fd, mainvar, ob->pd->tex); - expand_scriptlink(fd, mainvar, &ob->scriptlink); } static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 9e5fbfc2598..0f693b6de31 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -498,12 +498,6 @@ static void write_nodetree(WriteData *wd, bNodeTree *ntree) writestruct(wd, DATA, "bNodeLink", 1, link); } -static void write_scriptlink(WriteData *wd, ScriptLink *slink) -{ - writedata(wd, DATA, sizeof(void *)*slink->totscript, slink->scripts); - writedata(wd, DATA, sizeof(short)*slink->totscript, slink->flag); -} - static void current_screen_compat(Main *mainvar, bScreen **screen) { wmWindowManager *wm; @@ -1183,7 +1177,6 @@ static void write_objects(WriteData *wd, ListBase *idbase, int write_undo) write_sensors(wd, &ob->sensors); write_controllers(wd, &ob->controllers); write_actuators(wd, &ob->actuators); - write_scriptlink(wd, &ob->scriptlink); write_pose(wd, ob->pose); write_defgroups(wd, &ob->defbase); write_constraints(wd, &ob->constraints); @@ -1271,9 +1264,6 @@ static void write_cameras(WriteData *wd, ListBase *idbase) if (cam->id.properties) IDP_WriteProperty(cam->id.properties, wd); if (cam->adt) write_animdata(wd, cam->adt); - - /* direct data */ - write_scriptlink(wd, &cam->scriptlink); } cam= cam->id.next; @@ -1601,8 +1591,6 @@ static void write_materials(WriteData *wd, ListBase *idbase) if(ma->ramp_col) writestruct(wd, DATA, "ColorBand", 1, ma->ramp_col); if(ma->ramp_spec) writestruct(wd, DATA, "ColorBand", 1, ma->ramp_spec); - write_scriptlink(wd, &ma->scriptlink); - /* nodetree is integral part of material, no libdata */ if(ma->nodetree) { writestruct(wd, DATA, "bNodeTree", 1, ma->nodetree); @@ -1633,8 +1621,6 @@ static void write_worlds(WriteData *wd, ListBase *idbase) if(wrld->mtex[a]) writestruct(wd, DATA, "MTex", 1, wrld->mtex[a]); } - write_scriptlink(wd, &wrld->scriptlink); - write_previews(wd, wrld->preview); } wrld= wrld->id.next; @@ -1663,8 +1649,6 @@ static void write_lamps(WriteData *wd, ListBase *idbase) if(la->curfalloff) write_curvemapping(wd, la->curfalloff); - write_scriptlink(wd, &la->scriptlink); - write_previews(wd, la->preview); } @@ -1776,8 +1760,6 @@ static void write_scenes(WriteData *wd, ListBase *scebase) } } - write_scriptlink(wd, &sce->scriptlink); - if (sce->r.avicodecdata) { writestruct(wd, DATA, "AviCodecData", 1, sce->r.avicodecdata); if (sce->r.avicodecdata->lpFormat) writedata(wd, DATA, sce->r.avicodecdata->cbFormat, sce->r.avicodecdata->lpFormat); @@ -1919,9 +1901,6 @@ static void write_screens(WriteData *wd, ListBase *scrbase) writestruct(wd, DATA, "Panel", 1, pa); } - /* space handler scriptlinks */ - write_scriptlink(wd, &sa->scriptlink); - sl= sa->spacedata.first; while(sl) { for(ar= sl->regionbase.first; ar; ar= ar->next) diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index cdb4322d7f2..80ebdb77638 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -910,13 +910,6 @@ void area_copy_data(ScrArea *sa1, ScrArea *sa2, int swap_space) ARegion *newar= BKE_area_region_copy(st, ar); BLI_addtail(&sa1->regionbase, newar); } - -#ifndef DISABLE_PYTHON - /* scripts */ - BPY_free_scriptlink(&sa1->scriptlink); - sa1->scriptlink= sa2->scriptlink; - BPY_copy_scriptlink(&sa1->scriptlink); /* copies internal pointers */ -#endif } /* *********** Space switching code *********** */ diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index e7a61514010..8e667fe0438 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -465,7 +465,6 @@ static void screen_copy(bScreen *to, bScreen *from) sa->spacedata.first= sa->spacedata.last= NULL; sa->regionbase.first= sa->regionbase.last= NULL; sa->actionzones.first= sa->actionzones.last= NULL; - sa->scriptlink.totscript= 0; area_copy_data(sa, saf, 0); } diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 40324a5a65f..e3b8ac10481 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -552,16 +552,6 @@ static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *s } outliner_add_element(soops, lb, sce->world, te, 0, 0); - - if(sce->scriptlink.scripts) { - int a= 0; - tenla= outliner_add_element(soops, lb, sce, te, TSE_SCRIPT_BASE, 0); - tenla->name= "Scripts"; - for (a=0; ascriptlink.totscript; a++) { - outliner_add_element(soops, &tenla->subtree, sce->scriptlink.scripts[a], tenla, 0, 0); - } - } - } static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *idv, @@ -768,15 +758,6 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i ten->directdata= defgroup; } } - if(ob->scriptlink.scripts) { - TreeElement *tenla= outliner_add_element(soops, &te->subtree, ob, te, TSE_SCRIPT_BASE, 0); - int a= 0; - - tenla->name= "Scripts"; - for (a=0; ascriptlink.totscript; a++) { /* ** */ - outliner_add_element(soops, &tenla->subtree, ob->scriptlink.scripts[a], te, 0, 0); - } - } if(ob->dup_group) outliner_add_element(soops, &te->subtree, ob->dup_group, te, 0, 0); diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index e6d97071ef5..79912d9ed0e 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -280,17 +280,10 @@ static void text_unlink(Main *bmain, Text *text) * disabled it will leave invalid pointers in files! */ #ifndef DISABLE_PYTHON - // XXX BPY_clear_bad_scriptlinks(text); // XXX BPY_free_pyconstraint_links(text); // XXX free_text_controllers(text); // XXX free_dome_warp_text(text); - /* check if this text was used as script link: - * this check function unsets the pointers and returns how many - * script links used this Text */ - if(0) // XXX BPY_text_check_all_scriptlinks (text)) - ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0); - /* equivalently for pynodes: */ if(0) // XXX nodeDynamicUnlinkText ((ID*)text)) ; // XXX notifier: allqueue(REDRAWNODE, 0); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index d80a26e50f8..5e6bfe89165 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2085,10 +2085,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) // addafterqueue(ar->win, BACKBUFDRAW, 1); //} } - -#ifndef DISABLE_PYTHON - /* XXX here was scriptlink */ -#endif } diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h index 8ba7fa8b58d..3d839570e17 100644 --- a/source/blender/makesdna/DNA_camera_types.h +++ b/source/blender/makesdna/DNA_camera_types.h @@ -32,7 +32,6 @@ #define DNA_CAMERA_TYPES_H #include "DNA_ID.h" -#include "DNA_scriptlink_types.h" #ifdef __cplusplus extern "C" { @@ -61,7 +60,6 @@ typedef struct Camera { struct Ipo *ipo; // XXX depreceated... old animation system - ScriptLink scriptlink; struct Object *dof_ob; } Camera; diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h index a1059038777..78c8d1a5607 100644 --- a/source/blender/makesdna/DNA_lamp_types.h +++ b/source/blender/makesdna/DNA_lamp_types.h @@ -32,7 +32,6 @@ #define DNA_LAMP_TYPES_H #include "DNA_ID.h" -#include "DNA_scriptlink_types.h" #ifndef MAX_MTEX #define MAX_MTEX 18 @@ -110,8 +109,6 @@ typedef struct Lamp { /* preview */ struct PreviewImage *preview; - - ScriptLink scriptlink; } Lamp; /* **************** LAMP ********************* */ diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index a2ead6fc33d..1f93bcf1317 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -32,7 +32,6 @@ #define DNA_MATERIAL_TYPES_H #include "DNA_ID.h" -#include "DNA_scriptlink_types.h" #include "DNA_listBase.h" #ifndef MAX_MTEX @@ -134,8 +133,6 @@ typedef struct Material { /* yafray: absorption color, dispersion parameters and material preset menu */ float YF_ar, YF_ag, YF_ab, YF_dscale, YF_dpwr; int YF_dsmp, YF_preset, YF_djit; - - ScriptLink scriptlink; ListBase gpumaterial; /* runtime */ } Material; diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 2b0ede846af..ec4cad5c3b4 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -35,7 +35,6 @@ #include "DNA_listBase.h" #include "DNA_ID.h" -#include "DNA_scriptlink_types.h" #ifdef __cplusplus extern "C" { @@ -172,7 +171,6 @@ typedef struct Object { float empty_drawsize; float dupfacesca; /* dupliface scale */ - ScriptLink scriptlink; ListBase prop; ListBase sensors; ListBase controllers; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 60176dd5e6e..c8d0fc9ff5e 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -36,7 +36,6 @@ extern "C" { #include "DNA_brush_types.h" #include "DNA_vec_types.h" #include "DNA_listBase.h" -#include "DNA_scriptlink_types.h" #include "DNA_ID.h" struct Object; @@ -660,8 +659,6 @@ typedef struct Scene { struct RenderData r; struct AudioData audio; /* DEPRECATED 2.5 */ - ScriptLink scriptlink; - ListBase markers; ListBase transform_spaces; diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index 1be75e97735..cf107230171 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -31,7 +31,6 @@ #include "DNA_view2d_types.h" #include "DNA_vec_types.h" -#include "DNA_scriptlink_types.h" #include "DNA_ID.h" struct SpaceType; @@ -125,8 +124,6 @@ typedef struct ScrArea { short pad; short do_refresh; /* private, for spacetype refresh callback */ short cursor, flag; - - ScriptLink scriptlink; struct SpaceType *type; /* callbacks for this space type */ diff --git a/source/blender/makesdna/DNA_scriptlink_types.h b/source/blender/makesdna/DNA_scriptlink_types.h deleted file mode 100644 index 9b50eb91a20..00000000000 --- a/source/blender/makesdna/DNA_scriptlink_types.h +++ /dev/null @@ -1,79 +0,0 @@ -/** - * blenlib/DNA_object_types.h (mar-2001 nzc) - * - * Scriptlink is hard-coded in object for some reason. - * - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ -#ifndef DNA_SCRIPTLINK_TYPES_H -#define DNA_SCRIPTLINK_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct ID; - -typedef struct ScriptLink { - struct ID **scripts; - short *flag; - - short actscript, totscript; - int pad; -} ScriptLink; - -/* **************** SCRIPTLINKS ********************* */ - -#define SCRIPT_FRAMECHANGED 1 -#define SCRIPT_ONLOAD 2 -#define SCRIPT_REDRAW 4 -#define SCRIPT_ONSAVE 8 -#define SCRIPT_RENDER 16 -/* POSTRENDER is not meant for the UI, it simply calls the - * RENDER script links for clean-up actions */ -#define SCRIPT_POSTRENDER 32 - -#define SCRIPT_OBJECTUPDATE 64 -#define SCRIPT_OBDATAUPDATE 128 - -/* **************** SPACE HANDLERS ********************* */ -/* these are special scriptlinks that can be assigned to - * a given space in a given ScrArea to: - * - (EVENT type) handle events sent to that space; - * - (EVENT_ALL type): handle release events, too; - * - (DRAW type) draw on the space after its own drawing function finishes. - */ -#define SPACEHANDLER_VIEW3D_DRAW 1 -#define SPACEHANDLER_VIEW3D_EVENT 2 -#define SPACEHANDLER_VIEW3D_EVENT_ALL 3 - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h index 31f0727cf73..200ff6d9324 100644 --- a/source/blender/makesdna/DNA_world_types.h +++ b/source/blender/makesdna/DNA_world_types.h @@ -32,7 +32,6 @@ #define DNA_WORLD_TYPES_H #include "DNA_ID.h" -#include "DNA_scriptlink_types.h" struct AnimData; struct Ipo; @@ -124,8 +123,6 @@ typedef struct World { /* previews */ struct PreviewImage *preview; - ScriptLink scriptlink; - } World; /* **************** WORLD ********************* */ diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index ffd164baaaf..207d6fdd94a 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -76,7 +76,6 @@ char *includefiles[] = { "DNA_ID.h", "DNA_ipo_types.h", "DNA_key_types.h", - "DNA_scriptlink_types.h", "DNA_text_types.h", "DNA_packedFile_types.h", "DNA_camera_types.h", @@ -1105,7 +1104,6 @@ int main(int argc, char ** argv) #include "DNA_ID.h" #include "DNA_ipo_types.h" #include "DNA_key_types.h" -#include "DNA_scriptlink_types.h" #include "DNA_text_types.h" #include "DNA_packedFile_types.h" #include "DNA_camera_types.h" diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 50ae05c8544..c60d5710e17 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -338,7 +338,6 @@ extern StructRNA RNA_SceneRenderData; extern StructRNA RNA_SceneRenderLayer; extern StructRNA RNA_SceneSequence; extern StructRNA RNA_Screen; -extern StructRNA RNA_ScriptLink; extern StructRNA RNA_Sculpt; extern StructRNA RNA_Sensor; extern StructRNA RNA_Sequence; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 81c4642f4d5..40bcb4dabbb 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1938,7 +1938,6 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_render.c", NULL, RNA_def_render}, {"rna_scene.c", NULL, RNA_def_scene}, {"rna_screen.c", NULL, RNA_def_screen}, - {"rna_scriptlink.c", NULL, RNA_def_scriptlink}, {"rna_sensor.c", NULL, RNA_def_sensor}, {"rna_sequence.c", NULL, RNA_def_sequence}, {"rna_space.c", NULL, RNA_def_space}, diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 8bc1fcaf926..a1d32d5be78 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -151,7 +151,6 @@ void RNA_def_render(struct BlenderRNA *brna); void RNA_def_rna(struct BlenderRNA *brna); void RNA_def_scene(struct BlenderRNA *brna); void RNA_def_screen(struct BlenderRNA *brna); -void RNA_def_scriptlink(struct BlenderRNA *brna); void RNA_def_sensor(struct BlenderRNA *brna); void RNA_def_sequence(struct BlenderRNA *brna); void RNA_def_space(struct BlenderRNA *brna); diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index fe14870cf6f..b8150ee3c7d 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -350,12 +350,6 @@ static void rna_def_lamp(BlenderRNA *brna) /* textures */ rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", "rna_Lamp_active_texture_index_set", "LampTextureSlot"); - - /* script link */ - prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_pointer_sdna(prop, NULL, "scriptlink"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Script Link", "Scripts linked to this lamp."); } static void rna_def_lamp_falloff(StructRNA *srna) diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index fd54dd959b2..8f5252dbdac 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -1242,11 +1242,6 @@ void RNA_def_material(BlenderRNA *brna) /* common */ rna_def_animdata_common(srna); rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", "rna_Material_active_texture_index_set", "MaterialTextureSlot"); - - prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_pointer_sdna(prop, NULL, "scriptlink"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Script Link", "Scripts linked to this material."); rna_def_material_colors(srna); rna_def_material_diffuse(srna); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 29bb3a9b323..30ca39d25de 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -1309,12 +1309,6 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Time Offset Add Parent", "Add the parents time offset value"); RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update"); - /* script link */ - - prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_pointer_sdna(prop, NULL, "scriptlink"); - RNA_def_property_ui_text(prop, "Script Link", "Scripts linked to this object."); - /* drawing */ prop= RNA_def_property(srna, "max_draw_type", PROP_ENUM, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_scriptlink.c b/source/blender/makesrna/intern/rna_scriptlink.c deleted file mode 100644 index b486cd4a874..00000000000 --- a/source/blender/makesrna/intern/rna_scriptlink.c +++ /dev/null @@ -1,48 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Blender Foundation (2008). - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include - -#include "RNA_define.h" -#include "RNA_types.h" - -#include "rna_internal.h" - -#include "DNA_scriptlink_types.h" - -#ifdef RNA_RUNTIME - -#else - -void RNA_def_scriptlink(BlenderRNA *brna) -{ - StructRNA *srna; - - srna= RNA_def_struct(brna, "ScriptLink", NULL); - RNA_def_struct_ui_text(srna, "Script Link", "Scripts linked to a datablock, to be executed on changes to the datablock."); - RNA_def_struct_ui_icon(srna, ICON_PYTHON); -} - -#endif - diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index c3032326a3d..c41c0a0fcef 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -470,10 +470,6 @@ void RNA_def_world(BlenderRNA *brna) RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL); RNA_def_property_ui_text(prop, "Stars", "World stars settings."); - prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_pointer_sdna(prop, NULL, "scriptlink"); - RNA_def_property_ui_text(prop, "Script Link", "Scripts linked to this object."); - rna_def_ambient_occlusion(brna); rna_def_world_mist(brna); rna_def_world_stars(brna); diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index c6972793372..db0404c33a8 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -37,7 +37,6 @@ struct Text; /* defined in DNA_text_types.h */ struct ID; /* DNA_ID.h */ struct Object; /* DNA_object_types.h */ struct ChannelDriver; /* DNA_anim_types.h */ -struct ScriptLink; /* DNA_scriptlink_types.h */ struct ListBase; /* DNA_listBase.h */ struct SpaceText; /* DNA_space_types.h */ struct SpaceScript; /* DNA_space_types.h */ @@ -110,13 +109,7 @@ extern "C" { int BPY_run_script(struct Script *script); void BPY_free_compiled_text( struct Text *text ); - void BPY_clear_bad_scriptlinks( struct Text *byebye ); int BPY_has_onload_script( void ); - void BPY_do_all_scripts( short event, short anim ); - int BPY_check_all_scriptlinks( struct Text *text ); - void BPY_do_pyscript( struct ID *id, short event ); - void BPY_free_scriptlink( struct ScriptLink *slink ); - void BPY_copy_scriptlink( struct ScriptLink *scriptlink ); int BPY_is_spacehandler(struct Text *text, char spacetype); int BPY_del_spacehandler(struct Text *text, struct ScrArea *sa); @@ -145,8 +138,6 @@ extern "C" { void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ /* void BPY_Err_Handle(struct Text *text); */ -/* void BPY_clear_bad_scriptlink(struct ID *id, struct Text *byebye); */ -/* void BPY_clear_bad_scriptlist(struct ListBase *, struct Text *byebye); */ /* int BPY_spacetext_is_pywin(struct SpaceText *st); */ #ifdef __cplusplus diff --git a/source/blender/python/intern/bpy_scriptlink.c b/source/blender/python/intern/bpy_scriptlink.c deleted file mode 100644 index e790942aeb5..00000000000 --- a/source/blender/python/intern/bpy_scriptlink.c +++ /dev/null @@ -1,73 +0,0 @@ -/** - * $Id: - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2008 Blender Foundation. - * All rights reserved. - * - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_lamp_types.h" -#include "DNA_camera_types.h" -#include "DNA_world_types.h" -#include "DNA_scene_types.h" -#include "DNA_material_types.h" - -#include "BLI_blenlib.h" - -#include "BKE_blender.h" -#include "BKE_global.h" -#include "BKE_library.h" -#include "BKE_main.h" - - -/* only copies internal pointers, scriptlink usually is integral part of a struct */ -void BPY_copy_scriptlink( struct ScriptLink *scriptlink ) -{ - - if( scriptlink->totscript ) { - scriptlink->scripts = MEM_dupallocN(scriptlink->scripts); - scriptlink->flag = MEM_dupallocN(scriptlink->flag); - } - - return; -} - -/* not free slink itself */ -void BPY_free_scriptlink( struct ScriptLink *slink ) -{ - if( slink->totscript ) { - if( slink->flag ) { - MEM_freeN( slink->flag ); - slink->flag= NULL; - } - if( slink->scripts ) { - MEM_freeN( slink->scripts ); - slink->scripts= NULL; - } - } - - return; -} - diff --git a/source/blender/python/intern/stubs.c b/source/blender/python/intern/stubs.c index 8d6b5ad9f19..94bdb6ba6ab 100644 --- a/source/blender/python/intern/stubs.c +++ b/source/blender/python/intern/stubs.c @@ -30,9 +30,7 @@ void BPY_post_start_python() {} //void BPY_run_python_script() {} //void BPY_start_python() {} -void BPY_do_all_scripts() {} void BPY_call_importloader() {} -void BPY_do_pyscript() {} void BPY_clear_script() {} //void BPY_free_compiled_text() {} void BPY_pyconstraint_eval() {} diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 51389ef890c..c3b317590f1 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -554,8 +554,6 @@ void WM_write_file(bContext *C, char *target, ReportList *reports) } /* send the OnSave event */ -// XXX if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript(&CTX_data_scene(C)->id, SCRIPT_ONSAVE); - for (li= G.main->library.first; li; li= li->id.next) { if (BLI_streq(li->name, target)) { BKE_report(reports, RPT_ERROR, "Cannot overwrite used library"); From 1a42f8c77e3776003815e3e85e765d872111e45a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Jul 2009 10:09:59 +0000 Subject: [PATCH 325/512] removing all functions from bpy.ui module, keeping the module incase its useful later. removed a check in exotic.c that should be added back later. --- source/blender/blenkernel/intern/exotic.c | 5 + source/blender/python/intern/bpy_ui.c | 496 +--------------------- 2 files changed, 6 insertions(+), 495 deletions(-) diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 1797cbe3b96..bc9a0ee99c1 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -1900,6 +1900,11 @@ void write_stl(Scene *scene, char *str) if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0; if(BLI_testextensie(str,".stl")==0) strcat(str, ".stl"); + if (BLI_exists(str)) { + ; //XXX if(saveover(str)==0) + //XXX return; + } + fpSTL= fopen(str, "wb"); if(fpSTL==NULL) { diff --git a/source/blender/python/intern/bpy_ui.c b/source/blender/python/intern/bpy_ui.c index 64b8a33fd66..59e566b3b37 100644 --- a/source/blender/python/intern/bpy_ui.c +++ b/source/blender/python/intern/bpy_ui.c @@ -41,332 +41,9 @@ #include "UI_interface.h" #include "WM_api.h" -static PyObject *Method_pupMenuBegin( PyObject * self, PyObject * args ) -{ - PyObject *py_context; - char *title; int icon; - - if( !PyArg_ParseTuple( args, "O!si:pupMenuBegin", &PyCObject_Type, &py_context, &title, &icon)) - return NULL; - - return PyCObject_FromVoidPtr( uiPupMenuBegin(PyCObject_AsVoidPtr(py_context), title, icon), NULL ); -} - -static PyObject *Method_pupMenuEnd( PyObject * self, PyObject * args ) -{ - PyObject *py_context, *py_head; - - if( !PyArg_ParseTuple( args, "O!O!:pupMenuEnd", &PyCObject_Type, &py_context, &PyCObject_Type, &py_head)) - return NULL; - - uiPupMenuEnd(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_head)); - - Py_RETURN_NONE; -} - -static PyObject *Method_defButO( PyObject * self, PyObject * args ) -{ - uiBut *but; - PyObject *py_block, *py_keywords= NULL; - char *opname, *butname, *tip; - int exec, xco, yco, width, height; - - if( !PyArg_ParseTuple( args, "O!sisiiiis|O!:defButO", &PyCObject_Type, &py_block, &opname, &exec, &butname, &xco, &yco, &width, &height, &tip, &PyDict_Type, &py_keywords)) - return NULL; - - but= uiDefButO(PyCObject_AsVoidPtr(py_block), BUT, opname, exec, butname, xco, yco, width, height, tip); - - /* Optional python doctionary used to set python properties, just like how keyword args are used */ - if (py_keywords && PyDict_Size(py_keywords)) { - if (pyrna_pydict_to_props(uiButGetOperatorPtrRNA(but), py_keywords, "") == -1) - return NULL; - } - - return PyCObject_FromVoidPtr(but, NULL); -} - -static PyObject *Method_defAutoButR( PyObject * self, PyObject * args ) -{ - PyObject *py_block; - BPy_StructRNA *py_rna; - char *propname, *butname; - int index, xco, yco, width, height; - PropertyRNA *prop; - - if( !PyArg_ParseTuple( args, "O!O!sisiiii:defAutoButR", &PyCObject_Type, &py_block, &pyrna_struct_Type, &py_rna, &propname, &index, &butname, &xco, &yco, &width, &height)) - return NULL; - - // XXX This isnt that nice api, but we dont always have the rna property from python since its converted immediately into a PyObject - prop = RNA_struct_find_property(&py_rna->ptr, propname); - if (prop==NULL) { - PyErr_SetString(PyExc_ValueError, "rna property not found"); - return NULL; - } - - return PyCObject_FromVoidPtr( uiDefAutoButR(PyCObject_AsVoidPtr(py_block), &py_rna->ptr, prop, index, butname, 0, xco, yco, width, height), NULL); -} - - - -static uiBlock *py_internal_uiBlockCreateFunc(struct bContext *C, struct ARegion *ar, void *arg1) -{ - PyObject *ret, *args; - - args = Py_BuildValue("(NN)", PyCObject_FromVoidPtr(C, NULL), PyCObject_FromVoidPtr(ar, NULL)); - ret = PyObject_CallObject( (PyObject *)arg1, args ); - Py_DECREF(args); - - if (ret==NULL) { - PyErr_Print(); - return NULL; - } - if (!PyCObject_Check(ret)) { - printf("invalid return value, not a PyCObject block\n"); - return NULL; - } - - return (uiBlock *)PyCObject_AsVoidPtr(ret); -} - -static PyObject *Method_pupBlock( PyObject * self, PyObject * args ) -{ - PyObject *py_context, *py_func; - - if( !PyArg_ParseTuple( args, "O!O:pupBlock", &PyCObject_Type, &py_context, &py_func) ) - return NULL; - - if (!PyCallable_Check(py_func)) { - PyErr_SetString(PyExc_ValueError, "arg not callable"); - return NULL; - } - - uiPupBlock(PyCObject_AsVoidPtr(py_context), py_internal_uiBlockCreateFunc, (void *)py_func); - Py_RETURN_NONE; -} - -// XXX missing arg - UI_EMBOSS, do we care? -// XXX well, right now this only is to distinguish whether we have regular buttons or for pulldowns (ton) -static PyObject *Method_beginBlock( PyObject * self, PyObject * args ) -{ - PyObject *py_context, *py_ar; - char *name; - - if( !PyArg_ParseTuple( args, "O!O!s:beginBlock", &PyCObject_Type, &py_context, &PyCObject_Type, &py_ar, &name) ) - return NULL; - - return PyCObject_FromVoidPtr(uiBeginBlock(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_ar), name, UI_EMBOSS), NULL); -} - -static PyObject *Method_endBlock( PyObject * self, PyObject * args ) -{ - PyObject *py_context, *py_block; - - if( !PyArg_ParseTuple( args, "O!O!:endBlock", &PyCObject_Type, &py_context, &PyCObject_Type, &py_block) ) - return NULL; - - uiEndBlock(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_block)); - Py_RETURN_NONE; -} - -static PyObject *Method_drawBlock( PyObject * self, PyObject * args ) -{ - PyObject *py_context, *py_block; - - if( !PyArg_ParseTuple( args, "O!O!:drawBlock", &PyCObject_Type, &py_context, &PyCObject_Type, &py_block) ) - return NULL; - - uiDrawBlock(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_block)); - Py_RETURN_NONE; -} - -static PyObject *Method_popupBoundsBlock( PyObject * self, PyObject * args ) -{ - PyObject *py_block; - int addval, mx, my; - - if( !PyArg_ParseTuple( args, "O!iii:popupBoundsBlock", &PyCObject_Type, &py_block, &addval, &mx, &my) ) - return NULL; - - uiPopupBoundsBlock(PyCObject_AsVoidPtr(py_block), addval, mx, my); - Py_RETURN_NONE; -} - -static PyObject *Method_blockBeginAlign( PyObject * self, PyObject * args ) -{ - PyObject *py_block; - - if( !PyArg_ParseTuple( args, "O!:blockBeginAlign", &PyCObject_Type, &py_block) ) - return NULL; - - uiBlockBeginAlign(PyCObject_AsVoidPtr(py_block)); - Py_RETURN_NONE; -} - -static PyObject *Method_blockEndAlign( PyObject * self, PyObject * args ) -{ - PyObject *py_block; - - if( !PyArg_ParseTuple( args, "O!:blockEndAlign", &PyCObject_Type, &py_block)) - return NULL; - - uiBlockEndAlign(PyCObject_AsVoidPtr(py_block)); - Py_RETURN_NONE; -} - -static PyObject *Method_blockSetFlag( PyObject * self, PyObject * args ) -{ - PyObject *py_block; - int flag; /* Note new py api should not use flags, but for this low level UI api its ok. */ - - if( !PyArg_ParseTuple( args, "O!i:blockSetFlag", &PyCObject_Type, &py_block, &flag)) - return NULL; - - uiBlockSetFlag(PyCObject_AsVoidPtr(py_block), flag); - Py_RETURN_NONE; -} - -/* similar to Draw.c */ -static PyObject *Method_register( PyObject * self, PyObject * args ) -{ - PyObject *py_sl, *py_draw_func; - SpaceLink *sl; - if( !PyArg_ParseTuple( args, "O!O:register", &PyCObject_Type, &py_sl, &py_draw_func) ) - return NULL; - - sl = PyCObject_AsVoidPtr(py_sl); - - if(sl->spacetype!=SPACE_SCRIPT) { // XXX todo - add a script space when needed - PyErr_SetString(PyExc_ValueError, "can only register in a script space"); - return NULL; - } - else { - SpaceScript *scpt= (SpaceScript *)sl; - char *filename = NULL; - - if (scpt->script==NULL) { - scpt->script = MEM_callocN(sizeof(Script), "ScriptRegister"); - } - - BPY_getFileAndNum(&filename, NULL); - - if (filename) { - strncpy(scpt->script->scriptname, filename, sizeof(scpt->script->scriptname)); -#if 0 - char *dot; - dot = strchr(scpt->script->scriptname, '.'); /* remove extension */ - if (dot) - *dot= '\0'; -#endif - Py_XINCREF( py_draw_func ); - scpt->script->py_draw= (void *)py_draw_func; - } - else { - return NULL; /* BPY_getFileAndNum sets the error */ - } - - if (filename==NULL) { - return NULL; - } - } - - Py_RETURN_NONE; -} - -static PyObject *Method_registerKey( PyObject * self, PyObject * args ) -{ - PyObject *py_context; - PyObject *py_keywords= NULL; - char *keymap_name, *operator_name; - int spaceid, regionid; - int keyval, evtval, q1, q2; - - wmWindowManager *wm; - ListBase *keymap; - wmKeymapItem *km; - - if( !PyArg_ParseTuple( args, "O!iissiiii|O!:registerKey", &PyCObject_Type, &py_context, &spaceid, ®ionid, &keymap_name, &operator_name, &keyval, &evtval, &q1, &q2, &PyDict_Type, &py_keywords) ) - return NULL; - - wm= CTX_wm_manager(PyCObject_AsVoidPtr(py_context)); - - /* keymap= WM_keymap_listbase(wm, "Image Generic", SPACE_IMAGE, 0); */ - keymap= WM_keymap_listbase(wm, keymap_name, spaceid, regionid); - - km= WM_keymap_add_item(keymap, operator_name, keyval, evtval, q1, q2); - - /* Optional python doctionary used to set python properties, just like how keyword args are used */ - if (py_keywords && PyDict_Size(py_keywords)) { - if (pyrna_pydict_to_props(km->ptr, py_keywords, "Registering keybinding") == -1) - return NULL; - } - - Py_RETURN_NONE; -} - -static PyObject *Method_getRegonPtr( PyObject * self ) -{ - bContext *C= BPy_GetContext(); - - ARegion *ar = CTX_wm_region(C); - return PyCObject_FromVoidPtr(ar, NULL); -} - -static PyObject *Method_getAreaPtr( PyObject * self ) -{ - bContext *C= BPy_GetContext(); - - ScrArea *area = CTX_wm_area(C); - return PyCObject_FromVoidPtr(area, NULL); -} - -static PyObject *Method_getScreenPtr( PyObject * self ) -{ - bContext *C= BPy_GetContext(); - - bScreen *screen= CTX_wm_screen(C); - return PyCObject_FromVoidPtr(screen, NULL); -} - -static PyObject *Method_getSpacePtr( PyObject * self ) -{ - bContext *C= BPy_GetContext(); - - SpaceLink *sl= CTX_wm_space_data(C); - return PyCObject_FromVoidPtr(sl, NULL); -} - -static PyObject *Method_getWindowPtr( PyObject * self ) -{ - bContext *C= BPy_GetContext(); - - wmWindow *window= CTX_wm_window(C); - return PyCObject_FromVoidPtr(window, NULL); -} +/* Dummy Module, may want to include non RNA UI functions here, else it can be removed */ static struct PyMethodDef ui_methods[] = { - {"pupMenuBegin", (PyCFunction)Method_pupMenuBegin, METH_VARARGS, ""}, - {"pupMenuEnd", (PyCFunction)Method_pupMenuEnd, METH_VARARGS, ""}, - {"defButO", (PyCFunction)Method_defButO, METH_VARARGS, ""}, - {"defAutoButR", (PyCFunction)Method_defAutoButR, METH_VARARGS, ""}, - {"pupBlock", (PyCFunction)Method_pupBlock, METH_VARARGS, ""}, - {"beginBlock", (PyCFunction)Method_beginBlock, METH_VARARGS, ""}, - {"endBlock", (PyCFunction)Method_endBlock, METH_VARARGS, ""}, - {"drawBlock", (PyCFunction)Method_drawBlock, METH_VARARGS, ""}, - {"popupBoundsBlock", (PyCFunction)Method_popupBoundsBlock, METH_VARARGS, ""}, - {"blockBeginAlign", (PyCFunction)Method_blockBeginAlign, METH_VARARGS, ""}, - {"blockEndAlign", (PyCFunction)Method_blockEndAlign, METH_VARARGS, ""}, - {"blockSetFlag", (PyCFunction)Method_blockSetFlag, METH_VARARGS, ""}, - - {"register", (PyCFunction)Method_register, METH_VARARGS, ""}, // XXX not sure about this - registers current script with the ScriptSpace, like Draw.Register() - {"registerKey", (PyCFunction)Method_registerKey, METH_VARARGS, ""}, // XXX could have this in another place too - - - {"getRegonPtr", (PyCFunction)Method_getRegonPtr, METH_NOARGS, ""}, // XXX Nasty, we really need to improve dealing with context! - {"getAreaPtr", (PyCFunction)Method_getAreaPtr, METH_NOARGS, ""}, - {"getScreenPtr", (PyCFunction)Method_getScreenPtr, METH_NOARGS, ""}, - {"getSpacePtr", (PyCFunction)Method_getSpacePtr, METH_NOARGS, ""}, - {"getWindowPtr", (PyCFunction)Method_getWindowPtr, METH_NOARGS, ""}, - {NULL, NULL, 0, NULL} }; @@ -390,175 +67,6 @@ PyObject *BPY_ui_module( void ) submodule= Py_InitModule3( "bpy.ui", ui_methods, "" ); #endif - /* uiBlock->flag (controls) */ - mod = PyModule_New("ui"); - PyModule_AddObject( submodule, "ui", mod ); - PyModule_AddObject( mod, "BLOCK_LOOP", PyLong_FromSsize_t(UI_BLOCK_LOOP) ); - PyModule_AddObject( mod, "BLOCK_RET_1", PyLong_FromSsize_t(UI_BLOCK_RET_1) ); - PyModule_AddObject( mod, "BLOCK_NUMSELECT", PyLong_FromSsize_t(UI_BLOCK_NUMSELECT) ); - PyModule_AddObject( mod, "BLOCK_ENTER_OK", PyLong_FromSsize_t(UI_BLOCK_ENTER_OK) ); - PyModule_AddObject( mod, "BLOCK_NOSHADOW", PyLong_FromSsize_t(UI_BLOCK_NOSHADOW) ); - PyModule_AddObject( mod, "BLOCK_MOVEMOUSE_QUIT", PyLong_FromSsize_t(UI_BLOCK_MOVEMOUSE_QUIT) ); - PyModule_AddObject( mod, "BLOCK_KEEP_OPEN", PyLong_FromSsize_t(UI_BLOCK_KEEP_OPEN) ); - PyModule_AddObject( mod, "BLOCK_POPUP", PyLong_FromSsize_t(UI_BLOCK_POPUP) ); - - /* for executing operators (XXX move elsewhere) */ - mod = PyModule_New("wmTypes"); - PyModule_AddObject( submodule, "wmTypes", mod ); - PyModule_AddObject( mod, "OP_INVOKE_DEFAULT", PyLong_FromSsize_t(WM_OP_INVOKE_DEFAULT) ); - PyModule_AddObject( mod, "OP_INVOKE_REGION_WIN", PyLong_FromSsize_t(WM_OP_INVOKE_REGION_WIN) ); - PyModule_AddObject( mod, "OP_INVOKE_AREA", PyLong_FromSsize_t(WM_OP_INVOKE_AREA) ); - PyModule_AddObject( mod, "OP_INVOKE_SCREEN", PyLong_FromSsize_t(WM_OP_INVOKE_SCREEN) ); - PyModule_AddObject( mod, "OP_EXEC_DEFAULT", PyLong_FromSsize_t(WM_OP_EXEC_DEFAULT) ); - PyModule_AddObject( mod, "OP_EXEC_REGION_WIN", PyLong_FromSsize_t(WM_OP_EXEC_REGION_WIN) ); - PyModule_AddObject( mod, "OP_EXEC_AREA", PyLong_FromSsize_t(WM_OP_EXEC_AREA) ); - PyModule_AddObject( mod, "OP_EXEC_SCREEN", PyLong_FromSsize_t(WM_OP_EXEC_SCREEN) ); - - mod = PyModule_New("keyValTypes"); - PyModule_AddObject( submodule, "keyValTypes", mod ); - PyModule_AddObject( mod, "ANY", PyLong_FromSsize_t(KM_ANY) ); - PyModule_AddObject( mod, "NOTHING", PyLong_FromSsize_t(KM_NOTHING) ); - PyModule_AddObject( mod, "PRESS", PyLong_FromSsize_t(KM_PRESS) ); - PyModule_AddObject( mod, "RELEASE", PyLong_FromSsize_t(KM_RELEASE) ); - - mod = PyModule_New("keyModTypes"); - PyModule_AddObject( submodule, "keyModTypes", mod ); - PyModule_AddObject( mod, "SHIFT", PyLong_FromSsize_t(KM_SHIFT) ); - PyModule_AddObject( mod, "CTRL", PyLong_FromSsize_t(KM_CTRL) ); - PyModule_AddObject( mod, "ALT", PyLong_FromSsize_t(KM_ALT) ); - PyModule_AddObject( mod, "OSKEY", PyLong_FromSsize_t(KM_OSKEY) ); - - PyModule_AddObject( mod, "SHIFT2", PyLong_FromSsize_t(KM_SHIFT2) ); - PyModule_AddObject( mod, "CTRL2", PyLong_FromSsize_t(KM_CTRL2) ); - PyModule_AddObject( mod, "ALT2", PyLong_FromSsize_t(KM_ALT2) ); - PyModule_AddObject( mod, "OSKEY2", PyLong_FromSsize_t(KM_OSKEY2) ); - - mod = PyModule_New("keyTypes"); - PyModule_AddObject( submodule, "keyTypes", mod ); - PyModule_AddObject( mod, "A", PyLong_FromSsize_t(AKEY) ); - PyModule_AddObject( mod, "B", PyLong_FromSsize_t(BKEY) ); - PyModule_AddObject( mod, "C", PyLong_FromSsize_t(CKEY) ); - PyModule_AddObject( mod, "D", PyLong_FromSsize_t(DKEY) ); - PyModule_AddObject( mod, "E", PyLong_FromSsize_t(EKEY) ); - PyModule_AddObject( mod, "F", PyLong_FromSsize_t(FKEY) ); - PyModule_AddObject( mod, "G", PyLong_FromSsize_t(GKEY) ); - PyModule_AddObject( mod, "H", PyLong_FromSsize_t(HKEY) ); - PyModule_AddObject( mod, "I", PyLong_FromSsize_t(IKEY) ); - PyModule_AddObject( mod, "J", PyLong_FromSsize_t(JKEY) ); - PyModule_AddObject( mod, "K", PyLong_FromSsize_t(KKEY) ); - PyModule_AddObject( mod, "L", PyLong_FromSsize_t(LKEY) ); - PyModule_AddObject( mod, "M", PyLong_FromSsize_t(MKEY) ); - PyModule_AddObject( mod, "N", PyLong_FromSsize_t(NKEY) ); - PyModule_AddObject( mod, "O", PyLong_FromSsize_t(OKEY) ); - PyModule_AddObject( mod, "P", PyLong_FromSsize_t(PKEY) ); - PyModule_AddObject( mod, "Q", PyLong_FromSsize_t(QKEY) ); - PyModule_AddObject( mod, "R", PyLong_FromSsize_t(RKEY) ); - PyModule_AddObject( mod, "S", PyLong_FromSsize_t(SKEY) ); - PyModule_AddObject( mod, "T", PyLong_FromSsize_t(TKEY) ); - PyModule_AddObject( mod, "U", PyLong_FromSsize_t(UKEY) ); - PyModule_AddObject( mod, "V", PyLong_FromSsize_t(VKEY) ); - PyModule_AddObject( mod, "W", PyLong_FromSsize_t(WKEY) ); - PyModule_AddObject( mod, "X", PyLong_FromSsize_t(XKEY) ); - PyModule_AddObject( mod, "Y", PyLong_FromSsize_t(YKEY) ); - PyModule_AddObject( mod, "Z", PyLong_FromSsize_t(ZKEY) ); - PyModule_AddObject( mod, "ZERO", PyLong_FromSsize_t(ZEROKEY) ); - PyModule_AddObject( mod, "ONE", PyLong_FromSsize_t(ONEKEY) ); - PyModule_AddObject( mod, "TWO", PyLong_FromSsize_t(TWOKEY) ); - PyModule_AddObject( mod, "THREE", PyLong_FromSsize_t(THREEKEY) ); - PyModule_AddObject( mod, "FOUR", PyLong_FromSsize_t(FOURKEY) ); - PyModule_AddObject( mod, "FIVE", PyLong_FromSsize_t(FIVEKEY) ); - PyModule_AddObject( mod, "SIX", PyLong_FromSsize_t(SIXKEY) ); - PyModule_AddObject( mod, "SEVEN", PyLong_FromSsize_t(SEVENKEY) ); - PyModule_AddObject( mod, "EIGHT", PyLong_FromSsize_t(EIGHTKEY) ); - PyModule_AddObject( mod, "NINE", PyLong_FromSsize_t(NINEKEY) ); - PyModule_AddObject( mod, "CAPSLOCK", PyLong_FromSsize_t(CAPSLOCKKEY) ); - PyModule_AddObject( mod, "LEFTCTRL", PyLong_FromSsize_t(LEFTCTRLKEY) ); - PyModule_AddObject( mod, "LEFTALT", PyLong_FromSsize_t(LEFTALTKEY) ); - PyModule_AddObject( mod, "RIGHTALT", PyLong_FromSsize_t(RIGHTALTKEY) ); - PyModule_AddObject( mod, "RIGHTCTRL", PyLong_FromSsize_t(RIGHTCTRLKEY) ); - PyModule_AddObject( mod, "RIGHTSHIFT", PyLong_FromSsize_t(RIGHTSHIFTKEY) ); - PyModule_AddObject( mod, "LEFTSHIFT", PyLong_FromSsize_t(LEFTSHIFTKEY) ); - PyModule_AddObject( mod, "ESC", PyLong_FromSsize_t(ESCKEY) ); - PyModule_AddObject( mod, "TAB", PyLong_FromSsize_t(TABKEY) ); - PyModule_AddObject( mod, "RET", PyLong_FromSsize_t(RETKEY) ); - PyModule_AddObject( mod, "SPACE", PyLong_FromSsize_t(SPACEKEY) ); - PyModule_AddObject( mod, "LINEFEED", PyLong_FromSsize_t(LINEFEEDKEY) ); - PyModule_AddObject( mod, "BACKSPACE", PyLong_FromSsize_t(BACKSPACEKEY) ); - PyModule_AddObject( mod, "DEL", PyLong_FromSsize_t(DELKEY) ); - PyModule_AddObject( mod, "SEMICOLON", PyLong_FromSsize_t(SEMICOLONKEY) ); - PyModule_AddObject( mod, "PERIOD", PyLong_FromSsize_t(PERIODKEY) ); - PyModule_AddObject( mod, "COMMA", PyLong_FromSsize_t(COMMAKEY) ); - PyModule_AddObject( mod, "QUOTE", PyLong_FromSsize_t(QUOTEKEY) ); - PyModule_AddObject( mod, "ACCENTGRAVE", PyLong_FromSsize_t(ACCENTGRAVEKEY) ); - PyModule_AddObject( mod, "MINUS", PyLong_FromSsize_t(MINUSKEY) ); - PyModule_AddObject( mod, "SLASH", PyLong_FromSsize_t(SLASHKEY) ); - PyModule_AddObject( mod, "BACKSLASH", PyLong_FromSsize_t(BACKSLASHKEY) ); - PyModule_AddObject( mod, "EQUAL", PyLong_FromSsize_t(EQUALKEY) ); - PyModule_AddObject( mod, "LEFTBRACKET", PyLong_FromSsize_t(LEFTBRACKETKEY) ); - PyModule_AddObject( mod, "RIGHTBRACKET", PyLong_FromSsize_t(RIGHTBRACKETKEY) ); - PyModule_AddObject( mod, "LEFTARROW", PyLong_FromSsize_t(LEFTARROWKEY) ); - PyModule_AddObject( mod, "DOWNARROW", PyLong_FromSsize_t(DOWNARROWKEY) ); - PyModule_AddObject( mod, "RIGHTARROW", PyLong_FromSsize_t(RIGHTARROWKEY) ); - PyModule_AddObject( mod, "UPARROW", PyLong_FromSsize_t(UPARROWKEY) ); - PyModule_AddObject( mod, "PAD0", PyLong_FromSsize_t(PAD0) ); - PyModule_AddObject( mod, "PAD1", PyLong_FromSsize_t(PAD1) ); - PyModule_AddObject( mod, "PAD2", PyLong_FromSsize_t(PAD2) ); - PyModule_AddObject( mod, "PAD3", PyLong_FromSsize_t(PAD3) ); - PyModule_AddObject( mod, "PAD4", PyLong_FromSsize_t(PAD4) ); - PyModule_AddObject( mod, "PAD5", PyLong_FromSsize_t(PAD5) ); - PyModule_AddObject( mod, "PAD6", PyLong_FromSsize_t(PAD6) ); - PyModule_AddObject( mod, "PAD7", PyLong_FromSsize_t(PAD7) ); - PyModule_AddObject( mod, "PAD8", PyLong_FromSsize_t(PAD8) ); - PyModule_AddObject( mod, "PAD9", PyLong_FromSsize_t(PAD9) ); - PyModule_AddObject( mod, "PADPERIOD", PyLong_FromSsize_t(PADPERIOD) ); - PyModule_AddObject( mod, "PADSLASH", PyLong_FromSsize_t(PADSLASHKEY) ); - PyModule_AddObject( mod, "PADASTER", PyLong_FromSsize_t(PADASTERKEY) ); - PyModule_AddObject( mod, "PADMINUS", PyLong_FromSsize_t(PADMINUS) ); - PyModule_AddObject( mod, "PADENTER", PyLong_FromSsize_t(PADENTER) ); - PyModule_AddObject( mod, "PADPLUS", PyLong_FromSsize_t(PADPLUSKEY) ); - PyModule_AddObject( mod, "F1", PyLong_FromSsize_t(F1KEY) ); - PyModule_AddObject( mod, "F2", PyLong_FromSsize_t(F2KEY) ); - PyModule_AddObject( mod, "F3", PyLong_FromSsize_t(F3KEY) ); - PyModule_AddObject( mod, "F4", PyLong_FromSsize_t(F4KEY) ); - PyModule_AddObject( mod, "F5", PyLong_FromSsize_t(F5KEY) ); - PyModule_AddObject( mod, "F6", PyLong_FromSsize_t(F6KEY) ); - PyModule_AddObject( mod, "F7", PyLong_FromSsize_t(F7KEY) ); - PyModule_AddObject( mod, "F8", PyLong_FromSsize_t(F8KEY) ); - PyModule_AddObject( mod, "F9", PyLong_FromSsize_t(F9KEY) ); - PyModule_AddObject( mod, "F10", PyLong_FromSsize_t(F10KEY) ); - PyModule_AddObject( mod, "F11", PyLong_FromSsize_t(F11KEY) ); - PyModule_AddObject( mod, "F12", PyLong_FromSsize_t(F12KEY) ); - PyModule_AddObject( mod, "PAUSE", PyLong_FromSsize_t(PAUSEKEY) ); - PyModule_AddObject( mod, "INSERT", PyLong_FromSsize_t(INSERTKEY) ); - PyModule_AddObject( mod, "HOME", PyLong_FromSsize_t(HOMEKEY) ); - PyModule_AddObject( mod, "PAGEUP", PyLong_FromSsize_t(PAGEUPKEY) ); - PyModule_AddObject( mod, "PAGEDOWN", PyLong_FromSsize_t(PAGEDOWNKEY) ); - PyModule_AddObject( mod, "END", PyLong_FromSsize_t(ENDKEY) ); - PyModule_AddObject( mod, "UNKNOWN", PyLong_FromSsize_t(UNKNOWNKEY) ); - PyModule_AddObject( mod, "COMMAND", PyLong_FromSsize_t(COMMANDKEY) ); - PyModule_AddObject( mod, "GRLESS", PyLong_FromSsize_t(GRLESSKEY) ); - - mod = PyModule_New("spaceTypes"); - PyModule_AddObject( submodule, "spaceTypes", mod ); - PyModule_AddObject( mod, "EMPTY", PyLong_FromSsize_t(SPACE_EMPTY) ); - PyModule_AddObject( mod, "VIEW3D", PyLong_FromSsize_t(SPACE_VIEW3D) ); - PyModule_AddObject( mod, "IPO", PyLong_FromSsize_t(SPACE_IPO) ); - PyModule_AddObject( mod, "OUTLINER", PyLong_FromSsize_t(SPACE_OUTLINER) ); - PyModule_AddObject( mod, "BUTS", PyLong_FromSsize_t(SPACE_BUTS) ); - PyModule_AddObject( mod, "FILE", PyLong_FromSsize_t(SPACE_FILE) ); - PyModule_AddObject( mod, "IMAGE", PyLong_FromSsize_t(SPACE_IMAGE) ); - PyModule_AddObject( mod, "INFO", PyLong_FromSsize_t(SPACE_INFO) ); - PyModule_AddObject( mod, "SEQ", PyLong_FromSsize_t(SPACE_SEQ) ); - PyModule_AddObject( mod, "TEXT", PyLong_FromSsize_t(SPACE_TEXT) ); - PyModule_AddObject( mod, "IMASEL", PyLong_FromSsize_t(SPACE_IMASEL) ); - PyModule_AddObject( mod, "SOUND", PyLong_FromSsize_t(SPACE_SOUND) ); - PyModule_AddObject( mod, "ACTION", PyLong_FromSsize_t(SPACE_ACTION) ); - PyModule_AddObject( mod, "NLA", PyLong_FromSsize_t(SPACE_NLA) ); - PyModule_AddObject( mod, "SCRIPT", PyLong_FromSsize_t(SPACE_SCRIPT) ); - PyModule_AddObject( mod, "TIME", PyLong_FromSsize_t(SPACE_TIME) ); - PyModule_AddObject( mod, "NODE", PyLong_FromSsize_t(SPACE_NODE) ); - PyModule_AddObject( mod, "CONSOLE", PyLong_FromSsize_t(SPACE_CONSOLE) ); - /* INCREF since its its assumed that all these functions return the * module with a new ref like PyDict_New, since they are passed to * PyModule_AddObject which steals a ref */ @@ -566,5 +74,3 @@ PyObject *BPY_ui_module( void ) return submodule; } - - From 25f7b351aaddeeab8a6145c73e45040ba6a9aed9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Jul 2009 10:12:00 +0000 Subject: [PATCH 326/512] missed this file --- source/creator/creator.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/source/creator/creator.c b/source/creator/creator.c index 8e0152b5e63..a3e5ca16a13 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -211,7 +211,7 @@ static void print_help(void) printf (" -nojoystick\tDisable joystick support\n"); printf (" -noglsl\tDisable GLSL shading\n"); printf (" -h\t\tPrint this help text\n"); - printf (" -y\t\tDisable automatic python script execution (scriptlinks, pydrivers, pyconstraints, pynodes)\n"); + printf (" -y\t\tDisable automatic python script execution (pydrivers, pyconstraints, pynodes)\n"); printf (" -P \tRun the given Python script (filename or Blender Text)\n"); #ifdef WIN32 printf (" -R\t\tRegister .blend extension\n"); @@ -626,14 +626,8 @@ int main(int argc, char **argv) Render *re = RE_NewRender(scene->id.name); frame = MIN2(MAXFRAME, MAX2(1, frame)); -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) - BPY_do_all_scripts(SCRIPT_RENDER, 0); -#endif + RE_BlenderAnim(re, scene, frame, frame, scene->frame_step); -#ifndef DISABLE_PYTHON - BPY_do_all_scripts(SCRIPT_POSTRENDER, 0); -#endif } } else { printf("\nError: no blend loaded. cannot use '-f'.\n"); @@ -643,15 +637,7 @@ int main(int argc, char **argv) if (CTX_data_scene(C)) { Scene *scene= CTX_data_scene(C); Render *re= RE_NewRender(scene->id.name); -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) - BPY_do_all_scripts(SCRIPT_RENDER, 1); -#endif RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->frame_step); -#ifndef DISABLE_PYTHON - if (G.f & G_DOSCRIPTLINKS) - BPY_do_all_scripts(SCRIPT_POSTRENDER, 1); -#endif } else { printf("\nError: no blend loaded. cannot use '-a'.\n"); } From 9387c235a87a9ce635e4a712d1871fa23c5eb494 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Wed, 22 Jul 2009 11:40:59 +0000 Subject: [PATCH 327/512] Colorband UI Cleaned up the colorband UI, and tweaked the tooltips. BTW the 'add' button doesn't seem to work yet? --- .../editors/interface/interface_utils.c | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 5c10c69d1c1..d13bd07afc4 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -1011,32 +1011,26 @@ static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, if(coba==NULL) return; - uiBlockBeginAlign(block); - bt= uiDefBut(block, BUT, redraw, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Adds a new color position to the colorband"); + bt= uiDefBut(block, BUT, redraw, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Adds a new color stop to the colorband"); + bt= uiDefBut(block, BUT, redraw, "Delete", 60+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Deletes the active position"); uiButSetFunc(bt, colorband_add_cb, coba, NULL); - uiDefButS(block, NUM, redraw, "Cur:", 50+xoffs,100+yoffs,100,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active color from the colorband"); - bt= uiDefBut(block, BUT, redraw, "Del", 150+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Deletes the active position"); + uiDefButS(block, NUM, redraw, "", 120+xoffs,100+yoffs,80, 20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Choose active color stop"); + uiButSetFunc(bt, colorband_del_cb, coba, NULL); uiDefButS(block, MENU, redraw, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", - 200+xoffs, 100+yoffs, 100, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation type"); + 210+xoffs, 100+yoffs, 90, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation between color stops"); uiBlockEndAlign(block); uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, ""); cbd= coba->data + coba->cur; - uiBlockBeginAlign(block); - bt= uiDefButF(block, NUM, redraw, "Pos", xoffs,40+yoffs,110,20, &cbd->pos, 0.0, 1.0, 10, 0, "Sets the position of the active color"); + bt= uiDefButF(block, NUM, redraw, "Pos:", 0+xoffs,40+yoffs,100, 20, &cbd->pos, 0.0, 1.0, 10, 0, "The position of the active color stop"); uiButSetFunc(bt, colorband_pos_cb, coba, NULL); - uiDefButF(block, COL, redraw, "", xoffs,20+yoffs,110,20, &(cbd->r), 0, 0, 0, B_BANDCOL, ""); - uiDefButF(block, NUMSLI, redraw, "A ", xoffs,yoffs,110,20, &cbd->a, 0.0, 1.0, 10, 0, "Sets the alpha value for this position"); + uiDefButF(block, COL, redraw, "", 110+xoffs,40+yoffs,80,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); + uiDefButF(block, NUMSLI, redraw, "A ", 200+xoffs,40+yoffs,100,20, &cbd->a, 0.0, 1.0, 10, 0, "The alpha value of the active color stop"); - uiBlockBeginAlign(block); - uiDefButF(block, NUMSLI, redraw, "R ", 115+xoffs,40+yoffs,185,20, &cbd->r, 0.0, 1.0, B_BANDCOL, 0, "Sets the red value for the active color"); - uiDefButF(block, NUMSLI, redraw, "G ", 115+xoffs,20+yoffs,185,20, &cbd->g, 0.0, 1.0, B_BANDCOL, 0, "Sets the green value for the active color"); - uiDefButF(block, NUMSLI, redraw, "B ", 115+xoffs,yoffs,185,20, &cbd->b, 0.0, 1.0, B_BANDCOL, 0, "Sets the blue value for the active color"); - uiBlockEndAlign(block); } static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, int event) From 702307c8f83b6c0dba353fc02e4c96a6f574ad66 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Wed, 22 Jul 2009 11:52:42 +0000 Subject: [PATCH 328/512] Colorband UI Fixed the 'Add' button --- .../editors/interface/interface_utils.c | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index d13bd07afc4..77d27226c93 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -1011,15 +1011,15 @@ static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, if(coba==NULL) return; - bt= uiDefBut(block, BUT, redraw, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Adds a new color stop to the colorband"); - bt= uiDefBut(block, BUT, redraw, "Delete", 60+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Deletes the active position"); + bt= uiDefBut(block, BUT, redraw, "Add", 0+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Add a new color stop to the colorband"); uiButSetFunc(bt, colorband_add_cb, coba, NULL); + bt= uiDefBut(block, BUT, redraw, "Delete", 60+xoffs,100+yoffs,50,20, 0, 0, 0, 0, 0, "Delete the active position"); uiDefButS(block, NUM, redraw, "", 120+xoffs,100+yoffs,80, 20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Choose active color stop"); uiButSetFunc(bt, colorband_del_cb, coba, NULL); uiDefButS(block, MENU, redraw, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", - 210+xoffs, 100+yoffs, 90, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation between color stops"); + 210+xoffs, 100+yoffs, 90, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Set interpolation between color stops"); uiBlockEndAlign(block); uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, ""); @@ -1042,16 +1042,17 @@ static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, cbd= coba->data + coba->cur; - uiBlockBeginAlign(block); - uiDefButF(block, COL, event, "", xs,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, B_BANDCOL, ""); - uiDefButF(block, NUM, event, "A:", xs+2.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, ""); - bt= uiDefBut(block, BUT, event, "Add", xs+6.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Adds a new color position to the colorband"); + + bt= uiDefBut(block, BUT, event, "Add", xs,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Add a new color stop to the colorband"); uiButSetFunc(bt, colorband_add_cb, coba, NULL); - bt= uiDefBut(block, BUT, event, "Del", xs+8.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Deletes the active position"); + bt= uiDefBut(block, BUT, event, "Delete", xs+2.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Delete the active position"); uiButSetFunc(bt, colorband_del_cb, coba, NULL); - + + uiDefButF(block, COL, event, "", xs+4.0f*unit,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); + uiDefButF(block, NUMSLI, event, "A:", xs+6.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, "The alpha value of the active color stop"); + uiDefButS(block, MENU, event, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", - xs+10.0f*unit, butr->ymin+20.0f, unit*4, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation type"); + xs+10.0f*unit, butr->ymin+20.0f, unit*4, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Set interpolation between color stops"); uiDefBut(block, BUT_COLORBAND, event, "", xs,butr->ymin,butr->xmax-butr->xmin,20.0f, coba, 0, 0, 0, 0, ""); uiBlockEndAlign(block); From 8b5fbbec8001bfe9cb66adfd7ecd6e49818e6586 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 22 Jul 2009 12:43:37 +0000 Subject: [PATCH 329/512] * Updated CMake files to build with Python 3.1 on OS X by default. Remember to update /lib to get the precompiled libraries! --- CMakeLists.txt | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47daa1e4b9e..b6b0ea2e5e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -339,17 +339,29 @@ IF(APPLE) ENDIF(OPENAL_FOUND) ENDIF(WITH_OPENAL) - SET(PYTHON /System/Library/Frameworks/Python.framework/Versions/) - SET(PYTHON_VERSION 2.5) - SET(PYTHON_INC "${PYTHON}${PYTHON_VERSION}/include/python${PYTHON_VERSION}" CACHE STRING "") - SET(PYTHON_BINARY ${PYTHON}${PYTHON_VERSION}/bin/python${PYTHON_VERSION} CACHE STRING "") - SET(PYTHON_LIB "") - SET(PYTHON_LIBPATH ${PYTHON}${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config CACHE STRING "") - IF(CMAKE_SYSTEM_VERSION GREATER 10.4) - SET(PYTHON_LINKFLAGS "-u _PyMac_Error -framework System -framework Python") - ELSE(CMAKE_SYSTEM_VERSION GREATER 10.4) + + SET(PYTHON_VERSION 3.1) + + IF(PYTHON_VERSION MATCHES 3.1) + # we use precompiled libraries for py 3.1 and up by default + + SET(PYTHON ${LIBDIR}/python) + SET(PYTHON_INC "${PYTHON}/include/python${PYTHON_VERSION}" CACHE STRING "") + SET(PYTHON_BINARY "${PYTHON}/bin/python${PYTHON_VERSION}" CACHE STRING "") + SET(PYTHON_LIB python${PYTHON_VERSION}) + SET(PYTHON_LIBPATH "${PYTHON}/lib/python${PYTHON_VERSION}" CACHE STRING "") + SET(PYTHON_LINKFLAGS "-u _PyMac_Error") + ELSE(PYTHON_VERSION MATCHES 3.1) + # otherwise, use custom system framework + + SET(PYTHON /System/Library/Frameworks/Python.framework/Versions/) + SET(PYTHON_VERSION 2.5) + SET(PYTHON_INC "${PYTHON}${PYTHON_VERSION}/include/python${PYTHON_VERSION}" CACHE STRING "") + SET(PYTHON_BINARY ${PYTHON}${PYTHON_VERSION}/bin/python${PYTHON_VERSION} CACHE STRING "") + SET(PYTHON_LIB "") + SET(PYTHON_LIBPATH ${PYTHON}${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config CACHE STRING "") SET(PYTHON_LINKFLAGS "-u _PyMac_Error -framework System -framework Python") - ENDIF(CMAKE_SYSTEM_VERSION GREATER 10.4) + ENDIF(PYTHON_VERSION MATCHES 3.1) SET(GETTEXT ${LIBDIR}/gettext) SET(GETTEXT_INC "${GETTEXT}/include") From 94518b63084b7d8581e1cfec62fd36221f5efbf8 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 22 Jul 2009 17:20:04 +0000 Subject: [PATCH 330/512] 2.5 * Make EWA new default, rename Default to Box. * Fix windows compile issue in texture filter code. --- source/blender/blenkernel/intern/texture.c | 2 +- source/blender/makesdna/DNA_texture_types.h | 4 ++-- source/blender/makesrna/intern/rna_texture.c | 6 +++--- source/blender/render/intern/source/imagetexture.c | 4 ++-- source/blender/render/intern/source/texture.c | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 1c7dab15d5c..eeffbfe5ef6 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -442,7 +442,7 @@ void default_tex(Tex *tex) tex->extend= TEX_REPEAT; tex->cropxmin= tex->cropymin= 0.0; tex->cropxmax= tex->cropymax= 1.0; - tex->texfilter = TXF_DEFAULT; + tex->texfilter = TXF_EWA; tex->afmax = 8; tex->xrepeat= tex->yrepeat= 1; tex->fie_ima= 2; diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h index 0760825670d..7325181ee14 100644 --- a/source/blender/makesdna/DNA_texture_types.h +++ b/source/blender/makesdna/DNA_texture_types.h @@ -256,8 +256,8 @@ typedef struct TexMapping { #define TEX_FILTER_MIN 8192 /* texfilter */ -// TXF_DEFAULT -> blender's old texture filtering method -#define TXF_DEFAULT 0 +// TXF_BOX -> blender's old texture filtering method +#define TXF_BOX 0 #define TXF_EWA 1 #define TXF_FELINE 2 #define TXF_AREA 3 diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 330d38502ce..224e6643944 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -40,7 +40,7 @@ #include "WM_types.h" static EnumPropertyItem texture_filter_items[] = { - {TXF_DEFAULT, "DEFAULT", 0, "Default", ""}, + {TXF_BOX, "BOX", 0, "Box", ""}, {TXF_EWA, "EWA", 0, "EWA", ""}, {TXF_FELINE, "FELINE", 0, "FELINE", ""}, {TXF_AREA, "AREA", 0, "Area", ""}, @@ -126,7 +126,7 @@ static void rna_ImageTexture_mipmap_set(PointerRNA *ptr, int value) else tex->imaflag &= ~TEX_MIPMAP; if((tex->imaflag & TEX_MIPMAP) && tex->texfilter == TXF_SAT) - tex->texfilter = TXF_DEFAULT; + tex->texfilter = TXF_EWA; } static EnumPropertyItem *rna_ImageTexture_filter_itemf(bContext *C, PointerRNA *ptr, int *free) @@ -135,7 +135,7 @@ static EnumPropertyItem *rna_ImageTexture_filter_itemf(bContext *C, PointerRNA * EnumPropertyItem *item= NULL; int totitem= 0; - RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_DEFAULT); + RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_BOX); RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_EWA); RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_FELINE); RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_AREA); diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 603241038da..01131f09b96 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -1342,7 +1342,7 @@ static int imagewraposa_aniso(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, b *= ff; } maxd = MAX2(b, 1e-8f); - levf = logf(maxd)*(float)M_LOG2E; + levf = ((float)M_LOG2E)*logf(maxd); curmap = 0; maxlev = 1; @@ -1503,7 +1503,7 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *DXT, f VECCOPY(dyt, DYT); // anisotropic filtering - if (!SAT && (tex->texfilter != TXF_DEFAULT)) + if (!SAT && (tex->texfilter != TXF_BOX)) return imagewraposa_aniso(tex, ima, ibuf, texvec, dxt, dyt, texres); texres->tin= texres->ta= texres->tr= texres->tg= texres->tb= 0.0f; diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 3f7ffc5b9bb..66175194048 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -1107,7 +1107,7 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d float origf= fx *= tex->xrepeat; // TXF: omit mirror here, see comments in do_material_tex() after do_2d_mapping() call - if (tex->texfilter == TXF_DEFAULT) { + if (tex->texfilter == TXF_BOX) { if(fx>1.0f) fx -= (int)(fx); else if(fx<0.0f) fx+= 1-(int)(fx); @@ -1127,7 +1127,7 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d float origf= fy *= tex->yrepeat; // TXF: omit mirror here, see comments in do_material_tex() after do_2d_mapping() call - if (tex->texfilter == TXF_DEFAULT) { + if (tex->texfilter == TXF_BOX) { if(fy>1.0f) fy -= (int)(fy); else if(fy<0.0f) fy+= 1-(int)(fy); @@ -1545,7 +1545,7 @@ static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex, float* co, floa // textures are scaled (sizeXYZ) as well as repeated. See also modification in do_2d_mapping(). // (since currently only done in osa mode, results will look incorrect without osa TODO) if (tex->extend == TEX_REPEAT && (tex->flag & TEX_REPEAT_XMIR)) { - if (tex->texfilter == TXF_DEFAULT) + if (tex->texfilter == TXF_BOX) texvec[0] -= floorf(texvec[0]); // this line equivalent to old code, same below else if (texvec[0] < 0.f || texvec[0] > 1.f) { const float tx = 0.5f*texvec[0]; @@ -1554,7 +1554,7 @@ static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex, float* co, floa } } if (tex->extend == TEX_REPEAT && (tex->flag & TEX_REPEAT_YMIR)) { - if (tex->texfilter == TXF_DEFAULT) + if (tex->texfilter == TXF_BOX) texvec[1] -= floorf(texvec[1]); else if (texvec[1] < 0.f || texvec[1] > 1.f) { const float ty = 0.5f*texvec[1]; From 3ecb88fc7671ff671b8de2b56bab61986df51304 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Wed, 22 Jul 2009 18:06:59 +0000 Subject: [PATCH 331/512] 2.5 MSVC 9 projectfiles * maintenance: console_space, physics_boids, rna_render --- .../blender/BPY_python/BPY_python.vcproj | 4 --- projectfiles_vc9/blender/blender.sln | 4 +++ .../blender/blenkernel/BKE_blenkernel.vcproj | 8 ++++++ .../blender/blenlib/BLI_blenlib.vcproj | 8 ++++++ .../blender/editors/ED_editors.vcproj | 28 +++++++++++++++++++ .../blender/loader/BLO_loader.vcproj | 4 +-- .../blender/makesdna/DNA_makesdna.vcproj | 8 +++--- .../blender/makesrna/RNA_makesrna.vcproj | 24 +++++++++------- .../blender/makesrna/RNA_rna.vcproj | 16 +++++++---- projectfiles_vc9/blender/nodes/nodes.vcproj | 8 +++--- .../blender/render/BRE_render.vcproj | 4 +-- 11 files changed, 84 insertions(+), 32 deletions(-) diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj index f6a740ee5b0..42576c2733b 100644 --- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj +++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj @@ -350,10 +350,6 @@ RelativePath="..\..\..\source\blender\python\intern\bpy_rna.c" > - - diff --git a/projectfiles_vc9/blender/blender.sln b/projectfiles_vc9/blender/blender.sln index b8a47867115..d1db956118c 100644 --- a/projectfiles_vc9/blender/blender.sln +++ b/projectfiles_vc9/blender/blender.sln @@ -207,6 +207,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Bullet", "..\gameengine EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_nodes", "nodes\nodes.vcproj", "{4C3AB78A-52CA-4276-A041-39776E52D8C8}" + ProjectSection(ProjectDependencies) = postProject + {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284} = {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284} + {DFE7F3E3-E62A-4677-B666-DF0DDF70C359} = {DFE7F3E3-E62A-4677-B666-DF0DDF70C359} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_gpu", "gpu\BL_gpu.vcproj", "{138DD16C-CC78-4F6C-A898-C8DA68D89067}" EndProject diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj index 8b1b8949b04..18d0254afc4 100644 --- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj +++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj @@ -521,6 +521,10 @@ RelativePath="..\..\..\source\blender\blenkernel\intern\bmfont.c" > + + @@ -830,6 +834,10 @@ RelativePath="..\..\..\source\blender\blenkernel\BKE_bmfont_types.h" > + + diff --git a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj index 6b5359509ab..d31a7fb4500 100644 --- a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj +++ b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj @@ -522,6 +522,10 @@ RelativePath="..\..\..\source\blender\blenlib\intern\bpath.c" > + + @@ -639,6 +643,10 @@ RelativePath="..\..\..\source\blender\blenlib\intern\BLI_callbacks.h" > + + diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj index 497560b4a5a..08432b56d62 100644 --- a/projectfiles_vc9/blender/editors/ED_editors.vcproj +++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj @@ -1386,6 +1386,10 @@ RelativePath="..\..\..\source\blender\editors\physics\editparticle.c" > + + @@ -1415,6 +1419,30 @@ > + + + + + + + + + + + + diff --git a/projectfiles_vc9/blender/loader/BLO_loader.vcproj b/projectfiles_vc9/blender/loader/BLO_loader.vcproj index 74459e2e793..0906904e293 100644 --- a/projectfiles_vc9/blender/loader/BLO_loader.vcproj +++ b/projectfiles_vc9/blender/loader/BLO_loader.vcproj @@ -43,7 +43,7 @@ + + @@ -761,10 +765,6 @@ RelativePath="..\..\..\source\blender\makesdna\DNA_script_types.h" > - - diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj index 9e4c50e9e3f..5bae7780660 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj @@ -45,7 +45,7 @@ + + @@ -746,6 +750,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_property.c" > + + @@ -758,10 +766,6 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_screen.c" > - - diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj index f6eb7b282e0..9fbe9e77442 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj @@ -43,7 +43,7 @@ + + @@ -302,6 +306,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_property_gen.c" > + + @@ -314,10 +322,6 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna_screen_gen.c" > - - diff --git a/projectfiles_vc9/blender/nodes/nodes.vcproj b/projectfiles_vc9/blender/nodes/nodes.vcproj index f7dc938d8f2..d188725918b 100644 --- a/projectfiles_vc9/blender/nodes/nodes.vcproj +++ b/projectfiles_vc9/blender/nodes/nodes.vcproj @@ -42,7 +42,7 @@ Date: Wed, 22 Jul 2009 19:50:21 +0000 Subject: [PATCH 332/512] less verbose subtyping Py/C API code, use PyObject_CallFunction which supports packing the function args into a string. --- source/blender/python/intern/bpy_rna.c | 54 +++++--------------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 7319a269ffb..be98a985ac2 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -2300,31 +2300,23 @@ PyObject* pyrna_srna_Subtype(StructRNA *srna) } else if ((newclass= RNA_struct_py_type_get(srna))) { Py_INCREF(newclass); } else { - StructRNA *base; - - /* for now, return the base RNA type rather then a real module */ - - /* Assume RNA_struct_py_type_get(srna) was alredy checked */ - /* subclass equivelents - class myClass(myBase): some='value' # or ... - myClass = type(name='myClass', bases=(myBase,), dict={'__module__':'bpy.types'}) */ + + /* Assume RNA_struct_py_type_get(srna) was alredy checked */ + StructRNA *base; + + PyObject *py_base= NULL; + + const char *idname= RNA_struct_identifier(srna); const char *descr= RNA_struct_ui_description(srna); - PyObject *args = PyTuple_New(3); - PyObject *bases = PyTuple_New(1); - PyObject *py_base= NULL; - PyObject *dict = PyDict_New(); - PyObject *item; - + if(!descr) descr= "(no docs)"; - // arg 1 - //PyTuple_SET_ITEM(args, 0, PyUnicode_FromString(tp_name)); - PyTuple_SET_ITEM(args, 0, PyUnicode_FromString(RNA_struct_identifier(srna))); - - // arg 2 + /* get the base type */ base= RNA_struct_base(srna); if(base && base != srna) { /*/printf("debug subtype %s %p\n", RNA_struct_identifier(srna), srna); */ @@ -2336,33 +2328,7 @@ PyObject* pyrna_srna_Subtype(StructRNA *srna) Py_INCREF(py_base); } - PyTuple_SET_ITEM(bases, 0, py_base); - - PyTuple_SET_ITEM(args, 1, bases); - - // arg 3 - add an instance of the rna - if(descr) { - item= PyUnicode_FromString(descr); - PyDict_SetItemString(dict, "__doc__", item); - Py_DECREF(item); - } - - /* this isnt needed however its confusing if we get python script names in blender types, - * because the __module__ is used when printing the class */ - item= PyUnicode_FromString("bpy.types"); /* just to know its an internal type */ - PyDict_SetItemString(dict, "__module__", item); - Py_DECREF(item); - - - PyTuple_SET_ITEM(args, 2, dict); // fill with useful subclass things! - - if (PyErr_Occurred()) { - PyErr_Print(); - PyErr_Clear(); - } - - newclass = PyObject_CallObject((PyObject *)&PyType_Type, args); - Py_DECREF(args); + newclass = PyObject_CallFunction( (PyObject*)&PyType_Type, "s(N){ssss}", idname, py_base, "__module__","bpy.types", "__doc__",descr); if (newclass) { pyrna_subtype_set_rna(newclass, srna); From b6db4f8e17d9005901d82105d1c35b4959ca5527 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Wed, 22 Jul 2009 22:12:55 +0000 Subject: [PATCH 333/512] Change to avoid trigraph confusions. --- source/blender/python/intern/bpy_rna.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index be98a985ac2..449c0fd3f78 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1926,7 +1926,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) } if(self_func==NULL) { - PyErr_Format(PyExc_RuntimeError, "%.200s.???(): rna function internal function is NULL, this is a bug. aborting", RNA_struct_identifier(self_ptr->type)); + PyErr_Format(PyExc_RuntimeError, "%.200s.\?\?\?(): rna function internal function is NULL, this is a bug. aborting", RNA_struct_identifier(self_ptr->type)); return NULL; } From 17a9b3e44ca0e48ef0244df19f2f252198a56919 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Thu, 23 Jul 2009 00:19:01 +0000 Subject: [PATCH 334/512] External cache Particle point cache can now be loaded from external files. - Activated by "external" checkbox in cache panel and giving proper folder path and file name identifier. - External cache panel has controls for particle emission start, end, lifetime and random lifetime. These should be set according to the external data for correct playback. - External files should be named "identifier_frame_index.bphys" or "identifier_frame.bphys" where: * "identifier" is a freely choseable name. * "frame" is the cached frame number. ** Six digits padded with zeros!, for example "000024". * "index" can be used to tell caches with the same identifier apart. ** Two digits starting from zero. ** The index and the underscore before are optional. If no index is present the index number in ui should be set to -1. - Cache file format is pure floating point numbers (in binary, not text!) with each particle's data one after the other with the following data members: * 3 floats: particle's location vector * 3 floats: particle's velocity vector (per second) * 4 floats: particle's rotation quaternion * 3 floats: particle's angular velocity vector (per second) * 1 float: frame of the actual data (this can be non-integer for particles that are born or die between two integer frames, but otherwise should be the same as the "frame" in the file name) - Cache files don't have to exist for each frame. * Frames without actual data are interpolated from surrounding frames that have data (extrapolation is not supported). - Cache file formats with extended (or reduced even) data members are in future plans for easier usage. - Current code only does particles, don't yet know if it's applicable to cloth or sb. - Known issue: endianness can't yet be handled in any way. Other changes: New hard limits for many particle parameters. Some examples: - Maximum amount of particles: 10M particles :) And before you all go and crash your Blender trying this out remember that this limit is only for those freaks who really have the machine power to handle it. 10M particles alone take around 2.2 Gb of memory / disk space in saved file and each cached frame takes around 0.5 Gb of memory / disk space depending on cache mode. * Known issue: To actually use this many particles they most likely need to be allocated in parts as taking hold of a 2.2Gb chunk of memory at once is probably not ok with any operating system. - Maximum amount of children: 100k children/particle (1T childparticles here we come :D) - Kink frequency: -100k to 100k half-rotations (really strange the previous limit was only from zero upwards) - Path draw steps: 10 (power of 2 remember) - Path render steps: 20 (power of 2 also!! If over 1M segments doesn't get you smooth paths then I think nothing will!) --- release/ui/buttons_particle.py | 96 ++++++---- source/blender/blenkernel/BKE_pointcache.h | 2 + .../blenkernel/intern/particle_system.c | 7 +- source/blender/blenkernel/intern/pointcache.c | 113 +++++++++++- source/blender/makesdna/DNA_object_force.h | 8 +- source/blender/makesdna/DNA_particle_types.h | 7 - .../makesrna/intern/rna_object_force.c | 81 ++++++--- source/blender/makesrna/intern/rna_particle.c | 169 ++++++++++++------ 8 files changed, 359 insertions(+), 124 deletions(-) diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py index 47d325a5940..f74dfa06427 100644 --- a/release/ui/buttons_particle.py +++ b/release/ui/buttons_particle.py @@ -86,6 +86,12 @@ class PARTICLE_PT_emission(ParticleButtonsPanel): __idname__= "PARTICLE_PT_emission" __label__ = "Emission" + def poll(self, context): + if particle_panel_poll(context): + return not context.particle_system.point_cache.external + else: + return False + def draw(self, context): layout = self.layout @@ -150,37 +156,60 @@ class PARTICLE_PT_cache(ParticleButtonsPanel): cache = psys.point_cache row = layout.row() - row.itemR(cache, "name") + row.itemL(text="File Name:") + row.itemR(cache, "external") - row = layout.row() - - if cache.baked == True: - row.itemO("ptcache.free_bake_particle_system", text="Free Bake") + if cache.external: + split = layout.split(percentage=0.80) + split.itemR(cache, "name", text="") + split.itemR(cache, "index", text="") + + layout.itemL(text="File Path:") + layout.itemR(cache, "filepath", text="") + + layout.itemL(text=cache.info) + + split = layout.split() + + col = split.column(align=True) + col.itemR(part, "start") + col.itemR(part, "end") + + col = split.column(align=True) + col.itemR(part, "lifetime") + col.itemR(part, "random_lifetime", slider=True) else: - row.item_booleanO("ptcache.cache_particle_system", "bake", True, text="Bake") + layout.itemR(cache, "name", text="") + + row = layout.row() - subrow = row.row() - subrow.enabled = (cache.frames_skipped or cache.outdated) and particle_panel_enabled(psys) - subrow.itemO("ptcache.cache_particle_system", text="Calculate to Current Frame") + if cache.baked == True: + row.itemO("ptcache.free_bake_particle_system", text="Free Bake") + else: + row.item_booleanO("ptcache.cache_particle_system", "bake", True, text="Bake") - row = layout.row() - row.enabled = particle_panel_enabled(psys) - row.itemO("ptcache.bake_from_particles_cache", text="Current Cache to Bake") - row.itemR(cache, "step"); - - row = layout.row() - row.enabled = particle_panel_enabled(psys) - row.itemR(cache, "quick_cache") - row.itemR(cache, "disk_cache") + subrow = row.row() + subrow.enabled = (cache.frames_skipped or cache.outdated) and particle_panel_enabled(psys) + subrow.itemO("ptcache.cache_particle_system", text="Calculate to Current Frame") + + row = layout.row() + row.enabled = particle_panel_enabled(psys) + row.itemO("ptcache.bake_from_particles_cache", text="Current Cache to Bake") + row.itemR(cache, "step"); - layout.itemL(text=cache.info) + row = layout.row() + row.enabled = particle_panel_enabled(psys) + row.itemR(cache, "quick_cache") + row.itemR(cache, "disk_cache") - layout.itemS() - - row = layout.row() - row.item_booleanO("ptcache.bake_all", "bake", True, text="Bake All Dynamics") - row.itemO("ptcache.free_bake_all", text="Free All Bakes") - layout.itemO("ptcache.bake_all", text="Update All Dynamics to current frame") + layout.itemL(text=cache.info) + + layout.itemS() + + row = layout.row() + row.item_booleanO("ptcache.bake_all", "bake", True, text="Bake All Dynamics") + row.itemO("ptcache.free_bake_all", text="Free All Bakes") + layout.itemO("ptcache.bake_all", text="Update All Dynamics to current frame") # for particles these are figured out automatically #row.itemR(cache, "start_frame") @@ -193,7 +222,7 @@ class PARTICLE_PT_initial(ParticleButtonsPanel): def poll(self, context): if particle_panel_poll(context): psys = context.particle_system - return psys.settings.physics_type != 'BOIDS' + return psys.settings.physics_type != 'BOIDS' and not psys.point_cache.external else: return False @@ -256,6 +285,12 @@ class PARTICLE_PT_initial(ParticleButtonsPanel): class PARTICLE_PT_physics(ParticleButtonsPanel): __idname__= "PARTICLE_PT_physics" __label__ = "Physics" + + def poll(self, context): + if particle_panel_poll(context): + return not context.particle_system.point_cache.external + else: + return False def draw(self, context): layout = self.layout @@ -399,12 +434,15 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel): psys = context.particle_system if psys==None: return False if psys.settings==None: return False + if psys.point_cache.external: return False return psys.settings.physics_type=='BOIDS' def draw(self, context): boids = context.particle_system.settings.boids layout = self.layout + layout.enabled = particle_panel_enabled(psys) + # Currently boids can only use the first state so these are commented out for now. #row = layout.row() #row.template_list(boids, "states", boids, "active_boid_state_index", compact="True") @@ -764,12 +802,6 @@ class PARTICLE_PT_effectors(ParticleButtonsPanel): __label__ = "Effectors" __default_closed__ = True - def poll(self, context): - psys = context.particle_system - if psys==None: return False - if psys.settings==None: return False - return True; - def draw(self, context): layout = self.layout diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h index c5d423c13ba..8062f807055 100644 --- a/source/blender/blenkernel/BKE_pointcache.h +++ b/source/blender/blenkernel/BKE_pointcache.h @@ -166,4 +166,6 @@ void BKE_ptcache_quick_cache_all(struct Scene *scene); void BKE_ptcache_make_cache(struct PTCacheBaker* baker); void BKE_ptcache_toggle_disk_cache(struct PTCacheID *pid); +void BKE_ptcache_load_external(struct PTCacheID *pid); + #endif diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index b792564f50c..43174343302 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -3982,7 +3982,8 @@ static void cached_step(Scene *scene, Object *ob, ParticleSystemModifierData *ps /* update alive status and push events */ if(pa->time >= cfra) { pa->alive = pa->time==cfra ? PARS_ALIVE : PARS_UNBORN; - reset_particle(scene, pa, psys, psmd, ob, 0.0f, cfra, NULL, NULL, NULL); + if((psys->pointcache->flag & PTCACHE_EXTERNAL) == 0) + reset_particle(scene, pa, psys, psmd, ob, 0.0f, cfra, NULL, NULL, NULL); } else if(dietime <= cfra){ if(dietime > psys->cfra){ @@ -4303,7 +4304,9 @@ static void system_step(Scene *scene, Object *ob, ParticleSystem *psys, Particle oldtotpart = psys->totpart; oldtotchild = psys->totchild; - if(part->distr == PART_DISTR_GRID && part->from != PART_FROM_VERT) + if(psys->pointcache->flag & PTCACHE_EXTERNAL) + totpart = pid.cache->totpoint; + else if(part->distr == PART_DISTR_GRID && part->from != PART_FROM_VERT) totpart = part->grid_res*part->grid_res*part->grid_res; else totpart = psys->part->totpart; diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index cde0587772e..4bb571aa8ca 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -181,7 +181,11 @@ static int ptcache_path(PTCacheID *pid, char *filename) lib= (pid)? pid->ob->id.lib: NULL; - if (G.relbase_valid || lib) { + if(pid->cache->flag & PTCACHE_EXTERNAL) { + strcpy(filename, pid->cache->path); + return BLI_add_slash(filename); /* new strlen() */ + } + else if (G.relbase_valid || lib) { char file[MAX_PTCACHE_PATH]; /* we dont want the dir, only the file */ char *blendfilename; @@ -214,14 +218,14 @@ static int BKE_ptcache_id_filename(PTCacheID *pid, char *filename, int cfra, sho filename[0] = '\0'; newname = filename; - if (!G.relbase_valid) return 0; /* save blend file before using disk pointcache */ + if (!G.relbase_valid && (pid->cache->flag & PTCACHE_EXTERNAL)==0) return 0; /* save blend file before using disk pointcache */ /* start with temp dir */ if (do_path) { len = ptcache_path(pid, filename); newname += len; } - if(strcmp(pid->cache->name, "")==0) { + if(strcmp(pid->cache->name, "")==0 && (pid->cache->flag & PTCACHE_EXTERNAL)==0) { idname = (pid->ob->id.name+2); /* convert chars to hex so they are always a valid filename */ while('\0' != *idname) { @@ -238,7 +242,15 @@ static int BKE_ptcache_id_filename(PTCacheID *pid, char *filename, int cfra, sho } if (do_ext) { - snprintf(newname, MAX_PTCACHE_FILE, "_%06d_%02d"PTCACHE_EXT, cfra, pid->stack_index); /* always 6 chars */ + if(pid->cache->flag & PTCACHE_EXTERNAL) { + if(pid->cache->index >= 0) + snprintf(newname, MAX_PTCACHE_FILE, "_%06d_%02d"PTCACHE_EXT, cfra, pid->stack_index); /* always 6 chars */ + else + snprintf(newname, MAX_PTCACHE_FILE, "_%06d"PTCACHE_EXT, cfra); /* always 6 chars */ + } + else { + snprintf(newname, MAX_PTCACHE_FILE, "_%06d_%02d"PTCACHE_EXT, cfra, pid->stack_index); /* always 6 chars */ + } len += 16; } @@ -256,7 +268,7 @@ PTCacheFile *BKE_ptcache_file_open(PTCacheID *pid, int mode, int cfra) if(pid->ob->id.lib && mode == PTCACHE_FILE_WRITE) return NULL; - if (!G.relbase_valid) return NULL; /* save blend file before using disk pointcache */ + if (!G.relbase_valid && (pid->cache->flag & PTCACHE_EXTERNAL)==0) return NULL; /* save blend file before using disk pointcache */ BKE_ptcache_id_filename(pid, filename, cfra, 1, 1); @@ -328,6 +340,21 @@ void BKE_ptcache_update_info(PTCacheID *pid) int totframes = 0; char mem_info[64]; + if(cache->flag & PTCACHE_EXTERNAL) { + int cfra = cache->startframe; + + for(; cfra<=cache->endframe; cfra++) { + if(BKE_ptcache_id_exist(pid, cfra)) + totframes++; + } + + if(totframes) + sprintf(cache->info, "%i points read for %i frames", cache->totpoint, totframes); + else + sprintf(cache->info, "No valid data to read!"); + return; + } + if(cache->flag & PTCACHE_DISK_CACHE) { int cfra = cache->startframe; @@ -743,7 +770,7 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, int cfra) char path_full[MAX_PTCACHE_FILE]; char ext[MAX_PTCACHE_PATH]; - if(!pid->cache) + if(!pid->cache || pid->cache->flag & PTCACHE_BAKED) return; /* don't allow clearing for linked objects */ @@ -1408,3 +1435,77 @@ void BKE_ptcache_toggle_disk_cache(PTCacheID *pid) { BKE_ptcache_update_info(pid); } + +void BKE_ptcache_load_external(PTCacheID *pid) +{ + PointCache *cache = pid->cache; + int len; /* store the length of the string */ + + /* mode is same as fopen's modes */ + DIR *dir; + struct dirent *de; + char path[MAX_PTCACHE_PATH]; + char filename[MAX_PTCACHE_FILE]; + char path_full[MAX_PTCACHE_FILE]; + char ext[MAX_PTCACHE_PATH]; + + if(!cache) + return; + + cache->startframe = MAXFRAME; + cache->endframe = -1; + cache->totpoint = 0; + + ptcache_path(pid, path); + + len = BKE_ptcache_id_filename(pid, filename, 1, 0, 0); /* no path */ + + dir = opendir(path); + if (dir==NULL) + return; + + if(cache->index >= 0) + snprintf(ext, sizeof(ext), "_%02d"PTCACHE_EXT, cache->index); + else + strcpy(ext, PTCACHE_EXT); + + while ((de = readdir(dir)) != NULL) { + if (strstr(de->d_name, ext)) { /* do we have the right extension?*/ + if (strncmp(filename, de->d_name, len ) == 0) { /* do we have the right prefix */ + /* read the number of the file */ + int frame, len2 = strlen(de->d_name); + char num[7]; + + if (len2 > 15) { /* could crash if trying to copy a string out of this range*/ + BLI_strncpy(num, de->d_name + (strlen(de->d_name) - 15), sizeof(num)); + frame = atoi(num); + + cache->startframe = MIN2(cache->startframe, frame); + cache->endframe = MAX2(cache->endframe, frame); + } + } + } + } + closedir(dir); + + if(cache->startframe != MAXFRAME) { + PTCacheFile *pf; + int elemsize = ptcache_pid_elemsize(pid); + int incr = elemsize / sizeof(float); + float *data = NULL; + pf= BKE_ptcache_file_open(pid, PTCACHE_FILE_READ, cache->startframe); + + if(pf) { + data = MEM_callocN(elemsize, "pointcache read data"); + while(BKE_ptcache_file_read_floats(pf, data, incr)) + cache->totpoint++; + + BKE_ptcache_file_close(pf); + MEM_freeN(data); + } + } + + cache->flag &= ~(PTCACHE_OUTDATED|PTCACHE_FRAMES_SKIPPED); + + BKE_ptcache_update_info(pid); +} diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index 6cf20cc25a2..d640e37f48d 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -89,10 +89,15 @@ typedef struct PointCache { int endframe; /* simulation end frame */ int editframe; /* frame being edited (runtime only) */ int last_exact; /* last exact frame that's cached */ - int xdata_type; /* type of extra data */ + + /* for external cache files */ + int totpoint; /* number of cached points */ + int index, rt; /* modifier stack index */ + char name[64]; char prev_name[64]; char info[64]; + char path[240]; /* file path */ struct ListBase mem_cache; } PointCache; @@ -267,6 +272,7 @@ typedef struct SoftBody { #define PTCACHE_DISK_CACHE 64 #define PTCACHE_QUICK_CACHE 128 #define PTCACHE_FRAMES_SKIPPED 256 +#define PTCACHE_EXTERNAL 512 /* PTCACHE_OUTDATED + PTCACHE_FRAMES_SKIPPED */ #define PTCACHE_REDO_NEEDED 258 diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index 2d8a186d3f4..3d1dfff61cd 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -233,13 +233,6 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in struct KDTree *tree; /* used for interactions with self and other systems */ }ParticleSystem; -/* general particle maximums */ -/* no special why's, just seem reasonable */ -/* changing these (atleast upwards) should not cause any major problems */ -#define MAX_PARTS 100000 /* real particles/system */ -#define MAX_PART_CHILDREN 10000 /* child particles/real particles */ -#define MAX_BOIDNEIGHBOURS 10 /* neigbours considered/boid */ - /* part->type */ /* hair is allways baked static in object/geometry space */ /* other types (normal particles) are in global space and not static baked */ diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index 2ec8d9ea41e..965b70714dc 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -105,6 +105,7 @@ static void rna_Cache_toggle_disk_cache(bContext *C, PointerRNA *ptr) static void rna_Cache_idname_change(bContext *C, PointerRNA *ptr) { + Scene *scene = CTX_data_scene(C); Object *ob = CTX_data_active_object(C); PointCache *cache = (PointCache*)ptr->data; PTCacheID *pid = NULL, *pid2= NULL; @@ -119,33 +120,50 @@ static void rna_Cache_idname_change(bContext *C, PointerRNA *ptr) BKE_ptcache_ids_from_object(&pidlist, ob); - for(pid=pidlist.first; pid; pid=pid->next) { - if(pid->cache==cache) - pid2 = pid; - else if(strcmp(cache->name, "") && strcmp(cache->name,pid->cache->name)==0) { - /*TODO: report "name exists" to user */ - strcpy(cache->name, cache->prev_name); - new_name = 0; + if(cache->flag & PTCACHE_EXTERNAL) { + for(pid=pidlist.first; pid; pid=pid->next) { + if(pid->cache==cache) + break; } + + if(!pid) + return; + + cache->flag |= (PTCACHE_BAKED|PTCACHE_DISK_CACHE|PTCACHE_SIMULATION_VALID); + cache->flag &= ~(PTCACHE_OUTDATED|PTCACHE_FRAMES_SKIPPED); + + BKE_ptcache_load_external(pid); + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); } - - if(new_name) { - if(pid2 && cache->flag & PTCACHE_DISK_CACHE) { - strcpy(name, cache->name); - strcpy(cache->name, cache->prev_name); - - cache->flag &= ~PTCACHE_DISK_CACHE; - - BKE_ptcache_toggle_disk_cache(pid2); - - strcpy(cache->name, name); - - cache->flag |= PTCACHE_DISK_CACHE; - - BKE_ptcache_toggle_disk_cache(pid2); + else { + for(pid=pidlist.first; pid; pid=pid->next) { + if(pid->cache==cache) + pid2 = pid; + else if(strcmp(cache->name, "") && strcmp(cache->name,pid->cache->name)==0) { + /*TODO: report "name exists" to user */ + strcpy(cache->name, cache->prev_name); + new_name = 0; + } } - strcpy(cache->prev_name, cache->name); + if(new_name) { + if(pid2 && cache->flag & PTCACHE_DISK_CACHE) { + strcpy(name, cache->name); + strcpy(cache->name, cache->prev_name); + + cache->flag &= ~PTCACHE_DISK_CACHE; + + BKE_ptcache_toggle_disk_cache(pid2); + + strcpy(cache->name, name); + + cache->flag |= PTCACHE_DISK_CACHE; + + BKE_ptcache_toggle_disk_cache(pid2); + } + + strcpy(cache->prev_name, cache->name); + } } BLI_freelistN(&pidlist); @@ -365,11 +383,16 @@ static void rna_def_pointcache(BlenderRNA *brna) RNA_def_property_ui_text(prop, "End", "Frame on which the simulation stops."); prop= RNA_def_property(srna, "step", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "step"); RNA_def_property_range(prop, 1, 20); RNA_def_property_ui_text(prop, "Cache Step", "Number of frames between cached frames."); RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change"); + prop= RNA_def_property(srna, "index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "index"); + RNA_def_property_range(prop, -1, 100); + RNA_def_property_ui_text(prop, "Cache Index", "Index number of cache files."); + RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change"); + /* flags */ prop= RNA_def_property(srna, "baked", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_BAKED); @@ -398,6 +421,11 @@ static void rna_def_pointcache(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", "Cache name"); RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change"); + prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH); + RNA_def_property_string_sdna(prop, NULL, "path"); + RNA_def_property_ui_text(prop, "File Path", "Cache file path."); + RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change"); + prop= RNA_def_property(srna, "quick_cache", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_QUICK_CACHE); RNA_def_property_ui_text(prop, "Quick Cache", "Update simulation with cache steps"); @@ -407,6 +435,11 @@ static void rna_def_pointcache(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "info"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Cache Info", "Info on current cache status."); + + prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_EXTERNAL); + RNA_def_property_ui_text(prop, "External", "Read cache from an external location"); + RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change"); } static void rna_def_collision(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index f07351f0a30..4caf915e7ea 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -616,33 +616,65 @@ static void rna_def_particle(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Stick Object", "Object that particle sticks to when dead"); -// ParticleKey state; /* normally current global coordinates or */ -// /* in sticky object space if dead & sticky */ -// -// ParticleKey prev_state; /* previous state */ + /* Particle State & Previous State */ + prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "state.co"); + RNA_def_property_ui_text(prop, "Particle Location", ""); -// prop= RNA_def_property(srna, "hair", PROP_COLLECTION, PROP_NONE); -// RNA_def_property_collection_sdna(prop, NULL, "hair", "???totalHair???"); //don't know what the hair array size is -// RNA_def_property_struct_type(prop, "HairKey"); -// RNA_def_property_ui_text(prop, "Hair", ""); + prop= RNA_def_property(srna, "velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "state.vel"); + RNA_def_property_ui_text(prop, "Particle Velocity", ""); + + prop= RNA_def_property(srna, "angular_velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "state.ave"); + RNA_def_property_ui_text(prop, "Angular Velocity", ""); + + prop= RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "state.rot"); + RNA_def_property_ui_text(prop, "Rotation", ""); + + prop= RNA_def_property(srna, "prev_location", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "prev_state.co"); + RNA_def_property_ui_text(prop, "Previous Particle Location", ""); + + prop= RNA_def_property(srna, "prev_velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "prev_state.vel"); + RNA_def_property_ui_text(prop, "Previous Particle Velocity", ""); + + prop= RNA_def_property(srna, "prev_angular_velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "prev_state.ave"); + RNA_def_property_ui_text(prop, "Previous Angular Velocity", ""); + + prop= RNA_def_property(srna, "prev_rotation", PROP_FLOAT, PROP_ROTATION); + RNA_def_property_float_sdna(prop, NULL, "prev_state.rot"); + RNA_def_property_ui_text(prop, "Previous Rotation", ""); + + /* Hair & Keyed Keys */ + + prop= RNA_def_property(srna, "hair", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "hair", "totkey"); + RNA_def_property_struct_type(prop, "ParticleHairKey"); + RNA_def_property_ui_text(prop, "Hair", ""); prop= RNA_def_property(srna, "keys", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "keys", "totkey"); RNA_def_property_struct_type(prop, "ParticleKey"); RNA_def_property_ui_text(prop, "Keyed States", ""); - prop= RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_NONE); + /* Random variables */ + + prop= RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_ROTATION); RNA_def_property_float_sdna(prop, NULL, "r_rot"); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); RNA_def_property_ui_text(prop, "Random Rotation", ""); - prop= RNA_def_property(srna, "random_a_velocity", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "random_a_velocity", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "r_ave"); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); - RNA_def_property_ui_text(prop, "Random erm.. Velocity", "");//TODO: fix name + RNA_def_property_ui_text(prop, "Random Angular Velocity", ""); - prop= RNA_def_property(srna, "random_velocity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "r_ve");//optional if prop names are the same + prop= RNA_def_property(srna, "random_velocity", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_float_sdna(prop, NULL, "r_ve"); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); RNA_def_property_ui_text(prop, "Random Velocity", ""); @@ -650,9 +682,10 @@ static void rna_def_particle(BlenderRNA *brna) // float fuv[4], foffset; /* coordinates on face/edge number "num" and depth along*/ // /* face normal for volume emission */ - prop= RNA_def_property(srna, "time", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "birthtime", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "time"); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); - RNA_def_property_ui_text(prop, "Time", ""); + RNA_def_property_ui_text(prop, "Birth Time", ""); prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_NONE); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); @@ -663,11 +696,6 @@ static void rna_def_particle(BlenderRNA *brna) // RNA_def_property_range(prop, lowerLimitf, upperLimitf); RNA_def_property_ui_text(prop, "Die Time", ""); -// prop= RNA_def_property(srna, "banking_angle", PROP_FLOAT, PROP_NONE); -// RNA_def_property_float_sdna(prop, NULL, "bank"); -//// RNA_def_property_range(prop, lowerLimitf, upperLimitf); -// RNA_def_property_ui_text(prop, "Banking Angle", ""); - prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); // RNA_def_property_range(prop, lowerLimitf, upperLimitf); RNA_def_property_ui_text(prop, "Size", ""); @@ -1133,12 +1161,14 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "draw_step", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 0, 7); + RNA_def_property_ui_range(prop, 0, 10, 1, 0); RNA_def_property_ui_text(prop, "Steps", "How many steps paths are drawn with (power of 2)"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); prop= RNA_def_property(srna, "render_step", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ren_step"); RNA_def_property_range(prop, 0, 9); + RNA_def_property_ui_range(prop, 0, 20, 1, 0); RNA_def_property_ui_text(prop, "Render", "How many steps paths are rendered with (power of 2)"); prop= RNA_def_property(srna, "hair_step", PROP_INT, PROP_NONE); @@ -1206,7 +1236,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "billboard_uv_split", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "bb_uv_split"); - RNA_def_property_range(prop, 1, 10); + RNA_def_property_range(prop, 1, 100); + RNA_def_property_ui_range(prop, 1, 10, 1, 0); RNA_def_property_ui_text(prop, "UV Split", "Amount of rows/columns to split uv coordinates for billboards"); prop= RNA_def_property(srna, "billboard_animation", PROP_ENUM, PROP_NONE); @@ -1234,7 +1265,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "billboard_offset", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "bb_offset"); RNA_def_property_array(prop, 2); - RNA_def_property_range(prop, -1.0f, 1.0f); + RNA_def_property_range(prop, -100.0f, 100.0f); + RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3); RNA_def_property_ui_text(prop, "Billboard Offset", ""); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); @@ -1314,7 +1346,11 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "amount", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "totpart"); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); - RNA_def_property_range(prop, 0, 100000); + /* This limit is for those freaks who have the machine power to handle it. */ + /* 10M particles take around 2.2 Gb of memory / disk space in saved file and */ + /* each cached frame takes around 0.5 Gb of memory / disk space depending on cache mode. */ + RNA_def_property_range(prop, 0, 10000000); + RNA_def_property_ui_range(prop, 0, 100000, 1, 0); RNA_def_property_ui_text(prop, "Amount", "Total number of particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1328,7 +1364,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "grid_resolution", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "grid_res"); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); - RNA_def_property_range(prop, 1, 100); + RNA_def_property_range(prop, 1, 46); /* ~100k particles in a cube */ + RNA_def_property_ui_range(prop, 1, 215, 1, 0); /* ~10M particles in a cube */ RNA_def_property_ui_text(prop, "Resolution", "The resolution of the particle grid."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1341,7 +1378,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "object_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "obfac"); - RNA_def_property_range(prop, -1.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Object", "Let the object give the particle a starting speed"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1353,7 +1391,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "particle_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "partfac"); - RNA_def_property_range(prop, -10.0f, 10.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Particle", "Let the target particle give the particle a starting speed."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1401,13 +1440,15 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* physical properties */ prop= RNA_def_property(srna, "mass", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.01f, 100.0f); + RNA_def_property_range(prop, 0.001f, 100000.0f); + RNA_def_property_ui_range(prop, 0.01f, 100.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Mass", "Specify the mass of the particles"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "particle_size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "size"); - RNA_def_property_range(prop, 0.01f, 100.0f); + RNA_def_property_range(prop, 0.001f, 100000.0f); + RNA_def_property_ui_range(prop, 0.01f, 100.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Size", "The size of the particles"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); @@ -1466,13 +1507,15 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* children */ prop= RNA_def_property(srna, "child_nbr", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "child_nbr");//optional if prop names are the same - RNA_def_property_range(prop, 0, MAX_PART_CHILDREN); + RNA_def_property_range(prop, 0, 100000); + RNA_def_property_ui_range(prop, 0, 1000, 1, 0); RNA_def_property_ui_text(prop, "Children Per Parent", "Amount of children/parent"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "rendered_child_nbr", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ren_child_nbr"); - RNA_def_property_range(prop, 0, MAX_PART_CHILDREN); + RNA_def_property_range(prop, 0, 100000); + RNA_def_property_ui_range(prop, 0, 10000, 1, 0); RNA_def_property_ui_text(prop, "Rendered Children", "Amount of children/parent for rendering."); prop= RNA_def_property(srna, "virtual_parents", PROP_FLOAT, PROP_NONE); @@ -1483,7 +1526,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "child_size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "childsize"); - RNA_def_property_range(prop, 0.01f, 100.0f); + RNA_def_property_range(prop, 0.001f, 100000.0f); + RNA_def_property_ui_range(prop, 0.01f, 100.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Child Size", "A multiplier for the child particle size."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); @@ -1522,13 +1566,15 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* kink */ prop= RNA_def_property(srna, "kink_amplitude", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "kink_amp"); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, -100000.0f, 100000.0f); + RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Amplitude", "The amplitude of the offset."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "kink_frequency", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "kink_freq"); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, -100000.0f, 100000.0f); + RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Frequency", "The frequency of the offset (1/total length)"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); @@ -1540,24 +1586,28 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* rough */ prop= RNA_def_property(srna, "rough1", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, 0.0f, 100000.0f); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Rough1", "Amount of location dependent rough."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "rough1_size", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.01f, 10.0f); + RNA_def_property_range(prop, 0.01f, 100000.0f); + RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Size1", "Size of location dependent rough."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "rough2", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rough2"); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, 0.0f, 100000.0f); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Rough2", "Amount of random rough."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); prop= RNA_def_property(srna, "rough2_size", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rough2_size"); - RNA_def_property_range(prop, 0.01f, 10.0f); + RNA_def_property_range(prop, 0.01f, 100000.0f); + RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Size2", "Size of random rough."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); @@ -1569,7 +1619,8 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "rough_endpoint", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rough_end"); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, 0.0f, 100000.0f); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Rough Endpoint", "Amount of end point rough."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo_child"); @@ -1600,13 +1651,15 @@ static void rna_def_particle_settings(BlenderRNA *brna) /* drawing stuff */ prop= RNA_def_property(srna, "line_length_tail", PROP_FLOAT, PROP_NONE); RNA_def_property_float_funcs(prop, "rna_PartSetting_linelentail_get", "rna_PartSetting_linelentail_set", NULL); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, 0.0f, 100000.0f); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Back", "Length of the line's tail"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); prop= RNA_def_property(srna, "line_length_head", PROP_FLOAT, PROP_NONE); RNA_def_property_float_funcs(prop, "rna_PartSetting_linelenhead_get", "rna_PartSetting_linelenhead_set", NULL); - RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_range(prop, 0.0f, 100000.0f); + RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Head", "Length of the line's head"); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); @@ -1624,14 +1677,16 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "trail_count", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "trail_count"); - RNA_def_property_range(prop, 1.0f, 100.0f); + RNA_def_property_range(prop, 1, 100000); + RNA_def_property_ui_range(prop, 1, 100, 1, 0); RNA_def_property_ui_text(prop, "Trail Count", "Number of trail particles."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); /* keyed particles */ prop= RNA_def_property(srna, "keyed_loops", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "keyed_loops"); - RNA_def_property_range(prop, 1.0f, 100.0f); + RNA_def_property_range(prop, 1.0f, 10000.0f); + RNA_def_property_ui_range(prop, 1.0f, 100.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Loop count", "Number of times the keys are looped."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_redo"); @@ -1674,61 +1729,71 @@ static void rna_def_particle_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "eweight_all", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[0]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "All", "All effector's weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_spherical", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[1]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Spherical", "Spherical effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_vortex", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[2]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Vortex", "Vortex effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_magnetic", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[3]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Magnetic", "Magnetic effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_wind", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[4]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Wind", "Wind effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_curveguide", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[5]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Curve Guide", "Curve guide effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_texture", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[6]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Magnetic", "Texture effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_harmonic", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[7]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Harmonic", "Harmonic effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_charge", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[8]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Charge", "Charge effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); prop= RNA_def_property(srna, "eweight_lennardjones", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "effector_weight[9]"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, -200.0f, 200.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3); RNA_def_property_ui_text(prop, "Lennard-Jones", "Lennard-Jones effector weight."); RNA_def_property_update(prop, NC_OBJECT|ND_PARTICLE, "rna_Particle_reset"); From 712298abd27c2b02fb09af47430c1347ac8ab723 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Jul 2009 12:31:45 +0000 Subject: [PATCH 335/512] autocomplete wasn't working --- release/ui/space_console.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/ui/space_console.py b/release/ui/space_console.py index 0c495ccef8a..38358e914a7 100644 --- a/release/ui/space_console.py +++ b/release/ui/space_console.py @@ -416,7 +416,7 @@ class CONSOLE_OT_autocomplete(bpy.types.Operator): if not console: return ('CANCELLED',) - if sc.type != 'PYTHON': + if sc.console_type != 'PYTHON': return ('CANCELLED',) # fake cursor, use for autocomp func. From 7508afe25b929e5e5c45f80c474b20388d7ba1c4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Jul 2009 13:48:15 +0000 Subject: [PATCH 336/512] pyrna, calling rna functions with the wrong argument type would raise an error like.. expected a string type Added an error prefix so now the message is.. TypeError: UILayout.item_enumO(): error with argument 3, "value" - expected a string type --- source/blender/python/intern/bpy_rna.c | 77 ++++++++++++++++---------- source/blender/python/intern/bpy_rna.h | 2 +- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 449c0fd3f78..e83bb68a387 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -405,7 +405,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefi break; } - if (pyrna_py_to_prop(ptr, prop, NULL, item)) { + if (pyrna_py_to_prop(ptr, prop, NULL, item, error_prefix)) { error_val= -1; break; } @@ -458,7 +458,7 @@ PyObject *pyrna_func_to_py(BPy_StructRNA *pyrna, FunctionRNA *func) } -int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value) +int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value, const char *error_prefix) { /* XXX hard limits should be checked here */ int type = RNA_property_type(prop); @@ -483,13 +483,13 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v py_len= (int)PySequence_Length(value); } else { - PyErr_Format(PyExc_TypeError, "RNA array assignment expected a sequence instead of %.200s instance.", Py_TYPE(value)->tp_name); + PyErr_Format(PyExc_TypeError, "%.200s RNA array assignment expected a sequence instead of %.200s instance.", error_prefix, Py_TYPE(value)->tp_name); return -1; } /* done getting the length */ if (py_len != len) { - PyErr_Format(PyExc_TypeError, "python sequence length %d did not match the RNA array length %d.", py_len, len); + PyErr_Format(PyExc_TypeError, "%.200s python sequence length %d did not match the RNA array length %d.", error_prefix, py_len, len); return -1; } @@ -511,7 +511,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if (param_arr[i] < 0) { if(data==NULL) MEM_freeN(param_arr); - PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence is not a boolean"); + PyErr_Format(PyExc_AttributeError, "%.200s one or more of the values in the sequence is not a boolean", error_prefix); return -1; } } @@ -539,7 +539,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if (PyErr_Occurred()) { if(data==NULL) MEM_freeN(param_arr); - PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence could not be used as an int"); + PyErr_Format(PyExc_AttributeError, "%.200s one or more of the values in the sequence could not be used as an int", error_prefix); return -1; } if(data==NULL) { @@ -573,7 +573,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if (PyErr_Occurred()) { if(data==NULL) MEM_freeN(param_arr); - PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence could not be used as a float"); + PyErr_Format(PyExc_AttributeError, "%.200s one or more of the values in the sequence could not be used as a float", error_prefix); return -1; } if(data==NULL) { @@ -593,7 +593,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v int param = PyObject_IsTrue( value ); if( param < 0 ) { - PyErr_SetString(PyExc_TypeError, "expected True/False or 0/1"); + PyErr_Format(PyExc_TypeError, "%.200s expected True/False or 0/1", error_prefix); return -1; } else { if(data) *((int*)data)= param; @@ -605,7 +605,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v { int param = PyLong_AsSsize_t(value); if (PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, "expected an int type"); + PyErr_Format(PyExc_TypeError, "%.200s expected an int type", error_prefix); return -1; } else { if(data) *((int*)data)= param; @@ -617,7 +617,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v { float param = PyFloat_AsDouble(value); if (PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, "expected a float type"); + PyErr_Format(PyExc_TypeError, "%.200s expected a float type", error_prefix); return -1; } else { if(data) *((float*)data)= param; @@ -630,7 +630,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v char *param = _PyUnicode_AsString(value); if (param==NULL) { - PyErr_SetString(PyExc_TypeError, "expected a string type"); + PyErr_Format(PyExc_TypeError, "%.200s expected a string type", error_prefix); return -1; } else { if(data) *((char**)data)= param; @@ -644,7 +644,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if (param==NULL) { char *enum_str= pyrna_enum_as_string(ptr, prop); - PyErr_Format(PyExc_TypeError, "expected a string enum type in (%.200s)", enum_str); + PyErr_Format(PyExc_TypeError, "%.200s expected a string enum type in (%.200s)", error_prefix, enum_str); MEM_freeN(enum_str); return -1; } else { @@ -654,7 +654,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v else RNA_property_enum_set(ptr, prop, val); } else { char *enum_str= pyrna_enum_as_string(ptr, prop); - PyErr_Format(PyExc_TypeError, "enum \"%.200s\" not found in (%.200s)", param, enum_str); + PyErr_Format(PyExc_TypeError, "%.200s enum \"%.200s\" not found in (%.200s)", error_prefix, param, enum_str); MEM_freeN(enum_str); return -1; } @@ -669,7 +669,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if(!BPy_StructRNA_Check(value) && value != Py_None) { PointerRNA tmp; RNA_pointer_create(NULL, ptype, NULL, &tmp); - PyErr_Format(PyExc_TypeError, "expected a %.200s type", RNA_struct_identifier(tmp.type)); + PyErr_Format(PyExc_TypeError, "%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(tmp.type)); return -1; } else { BPy_StructRNA *param= (BPy_StructRNA*)value; @@ -706,7 +706,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v else { PointerRNA tmp; RNA_pointer_create(NULL, ptype, NULL, &tmp); - PyErr_Format(PyExc_TypeError, "expected a %.200s type", RNA_struct_identifier(tmp.type)); + PyErr_Format(PyExc_TypeError, "%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(tmp.type)); return -1; } } @@ -714,7 +714,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v if(raise_error) { PointerRNA tmp; RNA_pointer_create(NULL, ptype, NULL, &tmp); - PyErr_Format(PyExc_TypeError, "expected a %.200s type", RNA_struct_identifier(tmp.type)); + PyErr_Format(PyExc_TypeError, "%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(tmp.type)); return -1; } } @@ -732,7 +732,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v /* convert a sequence of dict's into a collection */ if(!PySequence_Check(value)) { - PyErr_SetString(PyExc_TypeError, "expected a sequence of dicts for an RNA collection"); + PyErr_Format(PyExc_TypeError, "%.200s expected a sequence of dicts for an RNA collection", error_prefix); return -1; } @@ -740,7 +740,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v for(i=0; iptr, prop, NULL, value); + return pyrna_py_to_prop(&self->ptr, prop, NULL, value, "StructRNA - Attribute (setattr):"); } static PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) @@ -1915,7 +1915,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) ParameterIterator iter; PropertyRNA *pret, *parm; PyObject *ret, *item; - int i, args_len, parms_len, flag, err= 0, kw_tot= 0; + int i, args_len, parms_len, flag, err= 0, kw_tot= 0, kw_arg; const char *parm_id; void *retdata= NULL; @@ -1926,7 +1926,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) } if(self_func==NULL) { - PyErr_Format(PyExc_RuntimeError, "%.200s.\?\?\?(): rna function internal function is NULL, this is a bug. aborting", RNA_struct_identifier(self_ptr->type)); + PyErr_Format(PyExc_RuntimeError, "%.200s.(): rna function internal function is NULL, this is a bug. aborting", RNA_struct_identifier(self_ptr->type)); return NULL; } @@ -1961,11 +1961,15 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) if ((i < args_len) && (flag & PROP_REQUIRED)) { item= PyTuple_GET_ITEM(args, i); i++; + + kw_arg= 0; } else if (kw != NULL) { item= PyDict_GetItemString(kw, parm_id); /* borrow ref */ if(item) kw_tot++; /* make sure invalid keywords are not given */ + + kw_arg= 1; } if (item==NULL) { @@ -1978,10 +1982,23 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) continue; } - err= pyrna_py_to_prop(&funcptr, parm, iter.data, item); + err= pyrna_py_to_prop(&funcptr, parm, iter.data, item, ""); + + if(err!=0) { + /* the error generated isnt that useful, so generate it again with a useful prefix + * could also write a function to prepend to error messages */ + char error_prefix[512]; + PyErr_Clear(); /* re-raise */ + + if(kw_arg) + snprintf(error_prefix, sizeof(error_prefix), "%s.%s(): error with keyword argument \"%s\" - ", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), parm_id); + else + snprintf(error_prefix, sizeof(error_prefix), "%s.%s(): error with argument %d, \"%s\" - ", RNA_struct_identifier(self_ptr->type), RNA_function_identifier(self_func), i, parm_id); + + pyrna_py_to_prop(&funcptr, parm, iter.data, item, error_prefix); - if(err!=0) break; + } } @@ -2861,7 +2878,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun if(item) { Py_DECREF(item); /* no need to keep a ref, the class owns it */ - if(pyrna_py_to_prop(dummyptr, prop, NULL, item) != 0) + if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0) return -1; } } @@ -2876,7 +2893,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun else { Py_DECREF(item); /* no need to keep a ref, the class owns it */ - if(pyrna_py_to_prop(dummyptr, prop, NULL, item) != 0) + if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0) return -1; } } @@ -2961,15 +2978,19 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par } if (ret == NULL) { /* covers py_class_instance failing too */ - PyErr_Print(); /* XXX use reporting api? */ err= -1; } else { if(retdata) - err= pyrna_py_to_prop(&funcptr, pret, retdata, ret); + err= pyrna_py_to_prop(&funcptr, pret, retdata, ret, "calling class function:"); Py_DECREF(ret); } + if(err != 0) { + PyErr_Print(); + PyErr_Clear(); + } + PyGILState_Release(gilstate); return err; diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h index d2f01b06336..76e4a13c167 100644 --- a/source/blender/python/intern/bpy_rna.h +++ b/source/blender/python/intern/bpy_rna.h @@ -69,7 +69,7 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr ); PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop ); /* operators also need this to set args */ -int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value); +int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value, const char *error_prefix); int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, const char *error_prefix); PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop); From f3f89ebac16256f9825f5ed60f524a7defe824cf Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 23 Jul 2009 14:20:08 +0000 Subject: [PATCH 337/512] cmake updates for compiling with prebuilt py 3.1 on osx --- CMakeLists.txt | 2 +- source/creator/CMakeLists.txt | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6b0ea2e5e9..fc6a3d3ade8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -350,7 +350,7 @@ IF(APPLE) SET(PYTHON_BINARY "${PYTHON}/bin/python${PYTHON_VERSION}" CACHE STRING "") SET(PYTHON_LIB python${PYTHON_VERSION}) SET(PYTHON_LIBPATH "${PYTHON}/lib/python${PYTHON_VERSION}" CACHE STRING "") - SET(PYTHON_LINKFLAGS "-u _PyMac_Error") + # SET(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled ELSE(PYTHON_VERSION MATCHES 3.1) # otherwise, use custom system framework diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 35cb3e92b21..adf0dca0d81 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -128,8 +128,9 @@ IF(APPLE) COMMAND cp -R ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/Resources/ COMMAND cp -R ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/Resources/ - COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ - COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ + COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ + COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ + COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/darwin/extra/python ${TARGETDIR}/blender.app/Contents/MacOS/.blender/ COMMAND find ${TARGETDIR}/blender.app -name CVS -prune -exec rm -rf {} "\;" COMMAND find ${TARGETDIR}/blender.app -name CVS.sandboxinfo -prune -exec rm -rf {} "\;" COMMAND find ${TARGETDIR}/blender.app -name .DS_Store -prune -exec rm -rf {} "\;" From 580b52785464c1399f669e1a06c9b0b5b27c0be9 Mon Sep 17 00:00:00 2001 From: William Reynish Date: Thu, 23 Jul 2009 14:35:20 +0000 Subject: [PATCH 338/512] Various layout tweaks. Improved game buttons, made minor adjustments to lamp, scene and fluids. --- release/ui/buttons_data_lamp.py | 4 ++-- release/ui/buttons_game.py | 36 ++++++++++++++++++----------- release/ui/buttons_physics_fluid.py | 11 +-------- release/ui/buttons_scene.py | 27 +++++++++------------- 4 files changed, 36 insertions(+), 42 deletions(-) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 4a6bc11922d..018650cf8bf 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -54,7 +54,7 @@ class DATA_PT_lamp(DataButtonsPanel): col = split.column() #col.itemL(text="Type:") #col.itemR(lamp, "type", text="") - colsub = col.column(align=True) + colsub = col.column() colsub.itemR(lamp, "color", text="") colsub.itemR(lamp, "energy") @@ -188,7 +188,7 @@ class DATA_PT_shadow(DataButtonsPanel): split = layout.split() col = split.column() - col.itemR(lamp, "shadow_color") + col.itemR(lamp, "shadow_color", text="") sub = split.column() sub.itemR(lamp, "shadow_layer", text="This Layer Only") diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py index 356b7913217..5f953b1c8eb 100644 --- a/release/ui/buttons_game.py +++ b/release/ui/buttons_game.py @@ -55,25 +55,28 @@ class GAME_PT_physics(GameButtonsPanel): col = split.column() col.itemR(game, "do_fh", text="Use Material Physics") col.itemR(game, "rotation_fh", text="Rotate From Normal") + col.itemR(game, "no_sleeping") layout.itemS() split = layout.split() col = split.column() - - col.itemR(game, "mass") - col.itemR(game, "radius") - col.itemR(game, "no_sleeping") - col.itemR(game, "form_factor") + col.itemL(text="Attributes:") + colsub = col.column(align=True) + colsub.itemR(game, "mass") + colsub.itemR(game, "radius") + colsub.itemR(game, "form_factor") col.itemS() col.itemL(text="Damping:") - col.itemR(game, "damping", text="Translation", slider=True) - col.itemR(game, "rotation_damping", text="Rotation", slider=True) + colsub = col.column(align=True) + colsub.itemR(game, "damping", text="Translation", slider=True) + colsub.itemR(game, "rotation_damping", text="Rotation", slider=True) col = split.column() col.itemL(text="Velocity:") - col.itemR(game, "minimum_velocity", text="Minimum") - col.itemR(game, "maximum_velocity", text="Maximum") + colsub = col.column(align=True) + colsub.itemR(game, "minimum_velocity", text="Minimum") + colsub.itemR(game, "maximum_velocity", text="Maximum") col.itemS() col.itemR(game, "anisotropic_friction") @@ -115,12 +118,17 @@ class GAME_PT_collision_bounds(GameButtonsPanel): ob = context.scene.objects[0] game = ob.game + layout.active = game.use_collision_bounds - flow = layout.column_flow() - flow.active = game.use_collision_bounds - flow.itemR(game, "collision_bounds") - flow.itemR(game, "collision_compound") - flow.itemR(game, "collision_margin") + + + layout.itemR(game, "collision_bounds", text="Bounds") + + split = layout.split() + sub = split.column() + sub.itemR(game, "collision_compound", text="Compound") + sub = split.column() + sub.itemR(game, "collision_margin", text="Margin", slider=True) bpy.types.register(GAME_PT_context_game) diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py index 0e6e9e64323..8cec90f41ba 100644 --- a/release/ui/buttons_physics_fluid.py +++ b/release/ui/buttons_physics_fluid.py @@ -43,17 +43,8 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): if fluid: - col = layout.column(align=True) - row = col.row() - row.item_enumR(fluid, "type", "DOMAIN") - row.item_enumR(fluid, "type", "FLUID") - row.item_enumR(fluid, "type", "OBSTACLE") - row = col.row() - row.item_enumR(fluid, "type", "INFLOW") - row.item_enumR(fluid, "type", "OUTFLOW") - row.item_enumR(fluid, "type", "PARTICLE") - row.item_enumR(fluid, "type", "CONTROL") + col.itemR(fluid, "type") if fluid.type == 'DOMAIN': layout.itemO("fluid.bake", text="BAKE") diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 45bf8b48788..db38a74d80b 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -47,7 +47,9 @@ class RENDER_PT_layers(RenderButtonsPanel): layout.itemR(rl, "light_override", text="Light") layout.itemR(rl, "material_override", text="Material") - + + layout.itemS() + layout.itemL(text="Include:") split = layout.split() col = split.column() @@ -71,7 +73,9 @@ class RENDER_PT_layers(RenderButtonsPanel): split = layout.split() split.itemL(text="Zmask Layers:") split.column().itemR(rl, "zmask_layers", text="") - + + layout.itemS() + split = layout.split() col = split.column() col.itemL(text="Passes:") @@ -204,22 +208,21 @@ class RENDER_PT_output(RenderButtonsPanel): split = layout.split() col = split.column() + col.itemR(rd, "file_format", text="") + col.row().itemR(rd, "color_mode", text="Color", expand=True) + + col = split.column() + col.itemR(rd, "file_extensions") col.itemR(rd, "placeholders") col.itemR(rd, "no_overwrite") - col = split.column() - col.itemR(rd, "file_format", text="") - col.itemR(rd, "file_extensions") - if rd.file_format in ('AVIJPEG', 'JPEG'): split = layout.split() - split.itemR(rd, "color_mode", text="Color") split.itemR(rd, "quality", slider=True) elif rd.file_format == 'OPENEXR': split = layout.split() col = split.column() - col.itemR(rd, "color_mode", text="Color") col.itemR(rd, "exr_codec") subsplit = split.split() @@ -232,7 +235,6 @@ class RENDER_PT_output(RenderButtonsPanel): elif rd.file_format == 'JPEG2000': split = layout.split() col = split.column() - col.itemR(rd, "color_mode", text="Color") col.itemL(text="Depth:") col.row().itemR(rd, "jpeg_depth", expand=True) @@ -244,7 +246,6 @@ class RENDER_PT_output(RenderButtonsPanel): elif rd.file_format in ('CINEON', 'DPX'): split = layout.split() col = split.column() - col.itemR(rd, "color_mode", text="Color") col.itemR(rd, "cineon_log", text="Convert to Log") col = split.column(align=True) @@ -255,13 +256,7 @@ class RENDER_PT_output(RenderButtonsPanel): elif rd.file_format == 'TIFF': split = layout.split() - split.itemR(rd, "color_mode", text="Color") split.itemR(rd, "tiff_bit") - - else: - split = layout.split() - split.itemR(rd, "color_mode", text="Color") - split.itemL() class RENDER_PT_encoding(RenderButtonsPanel): __label__ = "Encoding" From 062b1b88adc16cd580fb89c59839d7989a62e83e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Jul 2009 20:40:51 +0000 Subject: [PATCH 339/512] 2.5: Various * Buttons header: made tab buttons bigger, remove view menu, replaced by RMB menu in main region. * Timeline header: tweak button placement and alignment, added a play reverse icon. * Window type chooser menu: removed audio and scripts windows, change console and logic icons. * Node space: disable the channel region until it is used. --- release/datafiles/blenderbuttons | Bin 175808 -> 176743 bytes source/blender/editors/animation/keyingsets.c | 2 +- .../editors/datafiles/blenderbuttons.c | 11017 ++++++++-------- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/include/UI_icons.h | 8 +- source/blender/editors/screen/area.c | 22 +- .../editors/space_buttons/buttons_header.c | 91 +- .../editors/space_buttons/buttons_intern.h | 5 + .../editors/space_buttons/buttons_ops.c | 34 + .../editors/space_buttons/space_buttons.c | 11 +- .../blender/editors/space_node/space_node.c | 6 + .../blender/editors/space_time/time_header.c | 83 +- source/blender/makesrna/intern/rna_particle.c | 1 - 13 files changed, 5649 insertions(+), 5632 deletions(-) diff --git a/release/datafiles/blenderbuttons b/release/datafiles/blenderbuttons index 963c76fcfa9d9bea03ff3d8d41c2f0e4e4e5203a..e011fec50cddc704d4ce7633a2a3ecb795d18c3c 100644 GIT binary patch delta 138049 zcmZ6z1z1#J+ci1}Qj&^vOLupt(jeU+jWkHJ=@b!Zke2T55^3p_?v#*}K9BGBe&_uE z*%!m$FwU+!*1gtx=v+eG*+i`@Lq$Qtdx3&cj=h3gQ;+KX31XFh`SNoyc~;I`PSp?G z7v59J_}me_g%RA5=+WbaR*~#H&wDO=e-P$U;+EnFQd0UBP3X+=T;0Q;gauc}pI?8i zu{5!`{N-(Vw0!&XDsgR+n8k{P?9J1JVVfTW+gB6=&G}Eo;tb3b1)4OiW~3_pcC@$% zi}OHC7;go5U_Pyjcic{o0PbDwl>La3;BgaN{i}%zzH3osHo}CWSE4n7iKS zI59J)lMT&7i1cfEy3^r2cfT12J|Uq5Wvmz-js#7dI60PozV(c-|F0HM5 zZod-}u4{x|7qA?Yy?8PC+pTsP-eUzW6&n{f*G$5zyLMddoRmEDBWrgt>#nSMz|X+1 zbi`q-9^qX^9Jwc5K}fdlM~iQ4>*lR(>IAg2Ra(O-2e(cGFfcHPG%F14lD>XrYV^Cm zIh&i)mMNGlb5J-ltlFQ%6#Y89XXU^t$S&;r43y;@Tp4OW;a!&vf4JNn4s(?D^AF*Oa%_wV1I=$7FkA|hf%^?)xG zh6F5RgjGkrVYvbox}T9TG45RK>;Xyz-UDXB-j`@HGBW%(pE`;ojp24KSxVh;v#Vme zXbj3VUc>v7y|=TwI(&p4zGY@+t_;lBRNr+SmCWN$lgigwjpyK2 zkW_;w>I>=G`3YlHx8+C6@}KWP4lGkFKxs0u>)0Hl%#5Z}Tldzfn%|^--4Vn*6%-V{ zWkhE?(Bk0{w^v9@&ybAa{1Pdf%h$ty5E%h558S!Hmn4X#W5FQjH*u~viQAqBdKz#R%j%SHl~Hg_--NRThy&_>H|#AetUN!ih4c;t$=q>rUS2$-JCDC2-E3^^>|NJqJ1H?DH@lV5(Zl$@3b@^D ztb`?@Ibx<&jh=|PH=K3o3btHC9NKQL^oFNOZ{V~r?H%ZH`qmsf*%aDh+o8~Ist|Pi z(yueiulaKRL~ua_l(BRz^Fr+C%spd^$ha_MgeOwc(k3UXUB>u`64_X$Rrr*#$h;2A z2$`cuVcpi6yc98gf^ELHmqiD&6?mLz@Bw15Ds8lEm2lRMJ2iSNMQR=EG@VoOjt50&iyO6;&-Y7WZe|t zWc@KBl5}KPf7IX7aI1tmMfnN~zs#7tJc834hAeuICy_a(x@m9_*er`;dwQPQwsQ(& z4NIGBKPni@Q)=m_KA28cAju-vkcxZmf++OLxltpf_-9$ap{20s3@sM- z=>T{nw8f>RqPx30JoI+mG8rc)_Q=S{EVZIl5E>QQRo{)TPq#{7K4VhB2KQ*OZ zYS4lkjCJo|#`TnNPO-{gzzE*09kEyleTtvZYUuI9TPa-*m_f|zWOLhB+BnhySWiSU zV`^);zKTMm5F8xbXSqB&M#k(2Z|lkCbb=wb&HWis=HbOq$o0GrT3Xg-Sny7d3jBCW*W8*@-ZX*4 zI;G1PMEk|d8ih>kX>Euy1s1ZY-skNkE`rdMmHX(te3OPoxqBrL1 zuUn5+nxB3jBcs-`U_NAep|*R)tkVqBsbM|E5_;?k-zA+BF+G=VU(Gu0IKH|f5_^)Y z?HIQC7qYQ+$7_!t;mJ`|BqAcRl$7jdRmv2x1N$_?Bo!JX5%%IzESR(_7Cvd?PbH;{ zP51V`?dMNx$4!V&%vQ(?jSebf;kX$m!W^6uJ;=4Tw*KXCzB``Y^5Ia9*Q`7;DoRyX zH}d@472)aAaeI4v!-Rx{duL~7N`{;b;-b@6=en!GKu_3btefAz|9TP=xgl48VHS))gAG0R+$Z?}o_4Pk$ zKqZ=Mg9(hf68&1z($dceCrjHfW|H}hK3JDx@l<2XWEyUlyi!CMJ|KM0kvgb` zwx@E-vx2hZ*rdO?y}kbXR}E_!M2&@P$h0vghETHXDwn6WJ_N}ZfX!;(NN|3MYVI4HYz0gXPRH!y!p zPEKx2wDLu=qFMHI{j-;FRxt;A?O86Ne|J{X7e9E--DjpR3+La|;e71I;YLqrWd^_b z%|_*OiSWHvbWbq_C+As2SXf`XLCc5X(~Ar4ufpCRBve($<>6P-hJqp^U8!gwmp`|| znc<619J$P@j?`T53UBjl+MwIg5DAkNof?ZjLqkJETv|OnJ#_T+;-I>$udlOtom;Kt z%EsJ03AZX8QC3#&SOldZZN=wo*uS!}GT^xN>{FJ*O1sC&DxCdtYmr*XbVr0#j*D`p z$h14w3|V%O219~vkEzoxD19^fjgD(&MQ;lTt?G1(xl_UYb{U3-hm+C;+-#12)mX~5 zUCij6f8}?nv|HdI7WRrC-*Xi`^Jt~_^z>9z5-V!M(0q5G&s}GP`4HYRrfEA99X$OL zx0GFDc#pJHac3mmNOz~$Ld<(Os(a0UXp5&LYHV`yg%D}XpFe+op&Rp_oW64L5L%9s zR=mho8(O_JxV5)|2%eBgis6e%!esiy`mlEK^KEpvp3pJ6LSAi}wke^k2Re~!PcN9( z##UY6IXO8qUr5;W=FafyRm!*+U3_qok?Gy+<&akjzx)anNL&78t{=L`~cXrsYqV%>%ofX~3p~|A@ zW-><9pm%T6j8{;E-)-|=?Y{Y`Ek$KrU7L}iAx315ijL0pm+WG@$|)Oeko&8fn+TCP z=Qb3@iUZIaPR<&6y#{++9=0=7BS^Y@Pe2m|ES#n}5H=iIDQ+ z=jV?t8!zQic1TW5o&UYiaC}m3(9-PEw0M9c9Zk=`U^Cz)9HZCNLI3FiuBUxEwXRRU zt~TvY-i>$(vq7telhTqU#*E=v@nwr#Uh$Y@9CZD=W|XikqQtJ2fq^0Q_XIWC0Fl7u z{q}S$+Q99zlEw{KhI+^ASGTDN)aqs9i3-SX%5(L+1)s?;;Fp4|;et6dY$c(S3jGy= zHPlbFy6h;S`ZvtW9sA2AAREtl^D`{RSn*M62xr}22rLCc&-RJ_F6$m8*=)ys`rJ|vKFgPziUqA&XL6`T-)LeTn7hLDSz@E0QZfZ0D z*i)8*&xTguST*CO&A4?G|L18K_jFlw8g?I*82!%Vf3|CHG46GVG)}=RYNbokk^!6Q z)KZ%NJU#Lc=hxao55nqYn~?VZ zP^QO3E)?SU@lqMOe3Ia#9lBmy8U*ro6o`LtB@)xVW}(u9o~rG+kP-iyO2X7M=WrrV z-e-7t7_+ap*Kcgm74r1(_!ujfmrX%If$Qhzhm$nav((~#s9CO0U~FPi#md5B@8`lT zEG(RkhK>$DTdMO46&cxIh3*HyA?S%rI;PnwbQwQ-dzY;~WgL5t3$;rPKZUvR8xfru zXhpX#%n}>&o zm!R3Bj$3gV0RZu+sisz4m3LtJ$3uuWGUsz_EF5V}-wR}fBiK0);fD_&oQu?N4zu5N z=;CTkczhXxV02-hc>4Cy7k=`T8}MY8mi``$qgBS(FQHEwI?PkE-VJ$%#}pz#fgdXV z<_!uHGjo;wlECD2iB`v3b#+&Ie*Wvm_SEg|ZA5T{0od5slmTL5)_`HCu6{l!zAfE ziGp3T;r#PA@ZEl8+yzJV>E+RLBqN6INd&QF@wzRB%U~J79^zsfvfzEhs zJ>?i0*T)D${q<+*ubygO#A5bPl&n2~N)&W-;q#RyK?~sQ7r~9HhyYj{v9ckX^;rtD z(zH$dWmeD2!)B;Wl#MMM8#Tl#ng-VTNORR7H<+<6_})`a&-y{~r^YvRhG=7=H5iN> z_C`uv{gCfn??>7ii{WN7V`DKGIW27;v|2Z7$cWEvqweSF$=`mxO>{dpHn#Fj&06No zn>S)EgJJqCMxtPb^#rjItj^FgRrFR>M~A>|?RyA1YKSR;KTT%3iK%I|=|9My$AFO- zLcQ*3o#5~p*~;f65)0f*_Q>eyC775)kU5BF9xAFIIorBPiHU%X!J(#xsOgxQdwxW` zFjvkH`W09_oql1be>Vfd988{kes>-_k&&q7GP!URQVXDUH`2e&KY8)|xfg6~$atWp zlTnSKWB%cq78iE1_MNr;N&Hec>B6SYNerBJ&@>-0tOB&}aT37~=iXorD%C8x7ll2B z&1AM{y?_6H#=^qF9zr_lhPHw~?2fG!+}~cM{lfx3_NPnwp3Kdn@{{_LPUr8d)>TQ= zjqf95!TXmCH?48Ipl~5*;V$P|W*WX*#;2}heg2F^>VM?+p@U1~ZNb}tBwse7CoI_QJZ4zbaRa(#C@{_ZdAKG0 z1mEh7ZH34v{e!$>y1S(~CFh2L=G@}5)1zJ3ob@Z86< zUrVE-F;7mut0%;(x5>#5fss*svi9frxGMN1WKDpjvL(vMz|i@ObC``53b_)96pRrW$F^jrU}a$v(rW>WNf^81q-%2_uhe>6!8#4Q3Bt1Ktm$&_3`=1PmB>57$}B} zVv}b4j~ z&Z(-I*)Ncsu4UGSr}b;C238^W0;Mm@L*JbK+K`qDG05NBfJCX?qEhKhBZ7Io-D1uqjV+iYj`{U#OA;sucx;?{axw zfB48S!d}(Y)g_plnc;B#N=5yli!qF;Q@vec3|k$$!-6E$*>2u%Ape-}sI)?1W@4hm zAQSn0^!xWm%h8OcXadgsG>PmJxUt0+4;018Oyv}gt$UOgG%74CEUV5Wdk00(!E zK_XD=I9qNY=q9k_<69vN(vjpJiwP~->zfw2ULX`kBa zYUgA~1bfEI@%MOcm~dFPxUn(0CNYvYmU8m)Lp3!ucxDzBq~kSrNM7FFk|opM`}>hW>uaNnOm#3bJNI&O`qK)A z-n8NV3cCw*pJ5lc1r6CU|Kc4T5%|v#LMNiX@cAwa*TI;(hp|eBq4-kkuAA(a?05K% z+3-o-gMd0%}XLLZPF`jaGCqe6Gt)E zHz{EIQ@P03Pa+j3)p5rcZ{2?jXOaJz;Gf~Cto>meJMXT^*xuvJ`L5R6@faf=0zIR} zWe4Nu&!5KD)+i|op@08+d=+%Zh#?b2q(Bf65do3>yOe2Dl-2sJB2p7EhBH5JMHbfV z(W0AZyNg)Cd#_&7Jhkg}{OIkK*#lE+>!RC}?qAoF9di3@?H$aPW|+3bQEHCgS)Kc< z-34|4qr97Ljf50d*XDio5Ih8Joi2M<*j&f*yKJj3w|URL0#K`{y1II@)${C#6byk^ zM=i%{FJHdo^%Non*jqnOg)Z=bn~+%PH{c-Vt)+R`k|ywLnevN!u%B<5Tdw-8Gi!q? znUa|>^m)mRsYaRk3`P){!$rZ$nx|LuGGj${nnOZcQ z&xr3!Nlq@*V3^JUA#yhsY|-@(=K+x3wdOb#hC#AkqRxONQCpytPN)U;@(=FMkB>X$ z1_cGFWveJCD=FEZh<96VyQ*KIwEuNmtErWQ87~aqUq=`lX=JWW&@`l{O#Z1Lru}>Q zg<5`55mHoSciC1b)o*$}l*H*mdO3GeI!CrDb=nS!KUKig1NMK|&Y~{o4{I%kDTLzh# zZN`#8cdEqCpL2LDw|dsV-aCjt$X*;RK}4{z5-nCxiA_`((Gxp={`|cOm@*%I1A{*^ zdJfm0NCYp<#KpVBU|zz!YAi`m`@6nRpG>Q?k6AT})blwlerm4}2W@R_g+$@8ns)lb zot&Tl{s(iSgAmcb_mM$9(k0XLW|o!*w^^35Fz!)iH`waO;v+HGuIBwi={)q_ZKBUu z-0b8s+@$;4BVGbLNq6V4CW1Q>!50^X&tGFPN%KP0nS$L{ZD~ep;#NXMy5WPrG{{Ed zTl}4@BgU~J^_uK(Ris{yPM@gOFQ>($`x zXq55vXCvgilsdtQYSWU3(NS5*&rf8&!662KuB1kR$?CeRi?N-T zhldoGghaSmJSZc*&7vprC0rVh9S1Wrb4Yd06KXj)dmo*b*}r*?Y3iY>*h^ zXfu7PH7H|Up_r&B?+%J#P@o#AK-pkjojq@?H- zGm82CH9gxN2ArjRGKYEO{$i7hJd7CrvomOkVPMA?qTqtvfblf4-fm&$Pc-lH+;_I0 zf{GEkIy$~WCf^a>FE(Q1u^RfocNXm%6jT_t2?$Y9ZQfOz4^?`eZ8z=h?G1BlL!n1U zN11>>z)xZ|l2K8?@;cvTKL*V>yKsNrhNU(;d#wv(AOaw#F>Gf_yTEk|1SH$je^eFH z(BPnqWQP|)`6?Che!;eMZ( zcn;1hC?$npaBvX%N3ktm9L)B?BTsX#Sio#34UeX`i@)7G9>Babh)Q>03Ks&g!5%62 zL!Ui)iS(`3w#j=Ae{dAKAv}kdj8DMHk(Ygjle7S5e6EWSH=5mo8f?0WgGX_&cI{JF z?kqE2Q(_G>o)EF>y(hA?k0E_-mZG-`lSqbDR&wq1tw2+7XlJ)8euv>I=r(Q#_KlCo z!#96laXn&)49x`VnUUwzbu5jHTh|KQc?rtXVyo%C$SzJc!EYn{k(`V_4AATqvtcWK z8m~hyV34~u{;clr+n8Hg(pHo=9)eOn4Dj0X7cZPZ^+G^GiUXXN0XjDhY6vBdprChO zvj!xO>Y0%8dDl6c(FZl79JywPxwl4$#56O3{89&{I-b&}-r_~yuV0>xWo3t1p%Xyn z^fbs;31&8GZ>3{pJ(j*!wIwL5Q&{Rn0mYItacFA;j21UM-$4CO19dT_(c_P)o4q{? zV8We%Y`_bW-9Z5Q!?3SI>KQvi3H9O=NxC}=xbCv4vLx{eeCqG*t)WVINN_9YXk@w|;Gsk5Bu(nVBo9zln=-z6#ylQJOVgt+ly^y%m40|RLGzr z1X>6`p#nTU8^pmeQCg%0>QcRk*X8A9Z$?Ij`~Cg>nE+6?;b2EA9hu&LPfScLEJ8Ug zM^;;o+a*Ucgeel_`gl1}#cl2lRvw!BxG|(-bDWtQxzI_&$f;YN*pR?w$_DkpHF5={ z#3PZ$!23F=Sw%{Sry%NMJk9V|9@kxp!lD?SjtHTID9o*YAZ5x28{6|E z`&-D0`c17!H{r9WM2*M;@^HtO^>tHwGqZ2lF@2o)+e@5}XObw}j8~$e{_r*)mb!qf zCe~0F-%JBHjEo=F{Uwj&>xRzEpV7vQ= zhPrF5CqDw9+QJ4HdsE3&C&-h;BfQRGD<3~94O@&iYMq_ z{;9MHB*|AwAN0Na{c8s`BuDFhd$9M{($f9O!~N}2!~0*ScOVkX0XQ{3eD@_Tj&Zh3 zFNq8ncUu6+kKOF-?CQIIrwu_e-*Z)#ZZ`Rc$OA>ysb0l2o+fV(58!5a0u%`84<9Zc!2kK$=6<{! z3N+VT5ap9Q!)cZ~$H&J;nwl0lqko}p-Pj^x7^W(BRpEB4o214pxe9k~rP%0?Wkrv~ z@#P;Xp-*J|EeSlai17VsxM~NV@CoV$QiwSjB3h+3m&AON>64-@Fkc`f3SV7xEBuxI ztOfd9cYIBnB*9K(e&&u5aCj3}D^Q1)msj)8>1l4K!j7Ig1DAQD0~&9Y_H*w2)Hb@?L=`#(W;!~o z;E<4O8!o~Kk!D~mC<2u(?4Q-3JK_cHSkYTr{btuUsh>Zu;$mZ)tb%C@h&by>Mt;AF zROtNd2lb~vr>1(*u&|Uv?*Qp33#RgD(53cAn3zhYvMU=AdV706zot@Bw5Fk@CF=mB zx_5H(Q>QPNc)s^0v_9Zb>Q@3^s)#_x#3TiZtFw!XI5O~nxXem&a1|JBy4{MHm-ozv%(GQ#JKj2Qf&i5wor6{rM9ab_BR{QpS z!#Y5n^MECDT7IJS_q6h%q5kXRr{(VMuHW(j9p-1V-Vy_R3|+r|0fR$-N5s4I--n0T zWDpr9tP0)p7)(8L3kyLxbhN^!BB#?@Mr}mc*lT3?_~Gu$p0aLWcFu;e^z`;#rg2%T zr9?$NqkQ#hiAFIMM|$#{P?)QrOt;SFPoZjVrOh;hGtg5bU?ZBxx7DAo}>A@U#wUc62`nl&Z6}X-hWM_av{`Wd4tSR zJmI^eOhV7WzS+I_1E#sn;mBp~UyMaUQiio^A8pCcAeAntuWhJXK70CH00M03nWY~K z2lr;Kfh;CkCf{t|aLa;&VSAgOK|STSvy!&OA|&gVjeZZ>;+}8*kj`*a)^Y`E7{RzK z!61R&gqH!61-8J-{X<{j}eb5NhlANvvwS#O@NOPmCHzKD_AL zMJg<7!qKH2Mbt*%8|02z9;E-!a?d<|7lvQD0)Wz;fZKlj*6wa$X<;Eul|f!9#9`0a zf$M-?aZ-v2mlK4hImqt3T3tISmva<~e;NM9sNKhNUC*H{1TY;GJUqBS6XA2->^Bt2 z6fL0MQ<9fwbaQuy=%1*$TV&^R;GuQz3iEZ4)BI+K`WE#!_D(vsq)<^&Kc^*yEiUSB zYIMAiIL9zi!_ml5E872d1}((^O4I!bS_PT9ebz9rRX_=y4 z=Y`4ndyxXX>^Wd&lH;{sw0cQMc=OdH*^Zu`UK%o0CEPkZY;*7bOz|(r$+EM7aDWp9 z!KQwinVp`Virjh-FjfwE^&eX77(5KTFNO8-l9({nOAEB@InJe&=MqkT38# z@kpy`IybdSs;Q|3A*H6Keu$UL1BgQG6}pSFg#`^ZGD18s*0@|$p_`hTp6-Dijz))v zcY>jD;;ot*&2(f=kCdz|(!~KZd))awcfgE9aig!|`zdK? z>lJXSlp<3gqoWVc*W2lN0vaR+;JzFss-s;X!Ed)cKHP?fL*a9z1O#tzPm^DV;zIH-=-;Ogo7nUt!8x)@M;s)L z*f`@9sowk~FCF*!jwk!(Cy9~W@p#n1=I_7&VZpTI0S^^xWWOlJ?{)o?sb7EBB7ZZXO(UYY=rcW@G?PD`4ompcJ%u7>pAQfFKXTmr*aDh1_ikTrR5N$;xqN=^g<%+ zvl~vX+jBVgb>mVU?l?Wt`d-60Z)+xsE6Z37PI2AXk(pCVYcJ=fMNU95&0ZZYxU{P$c{P;hWCTe_h8@&fTNpi+dO(@hl5&$==)W$ka%N7BsZBCVk3 zey0LDbv7^moSg7YCFkq2kaZY$J?Q~?%?+fbShuU&n;TMK4VYvyXy#e~$2XX1kO)dr zd454b+_!I3rvtQ^SQue%9X8%fo?kY(?0hLu&iwN8rvgZkcSLV?*Z@bi0F&8E$uLPw zOyq_8XwP&EJd&6blav1(3(#5b55SdA{`+TClzb@Z&KWl&V~G{a7A~ByiQs;2e*T8R zAM<>ScyE875Z?I1i)+8pfdP7qPFv{G?dtrzH8D0;`~z@eZaQCo?-iK>og)))S4udj zPl4gcouUC(}vr9mPJ;a(V6W|V!Hj@3bNYb-VE+5smW9}z!S$k zQl!efPnOyaHKcgx-WF-tyPHShOcLwfwi#>-%lIvHzOmy_A*h`A+gmOWlPWf*Uh0cK zw#(U}0OsSsgl*O)Yx&M2W9r3&%)_CKJZzP_NS&}5kTN8o9L%u;l7-|+0C{b*DOT<3 zliH^3RoH8&AUeyvBBMuxY+>~J)ZK?yvBWKoVZ?k+(Z7XHUI28c90E9gjkl=)buP|Ty~_j!Uq8JV zg1+(lZn9A6fqjT4|ce;^^J0|oW+F!+_G@;=y>naMa#ELGs5+vHpntN0S9rwT6PDeyD z8OE}$d|*O@`&eM@CFuXh3i8s7o;AwmZ^V4R0>!!5jH?^k6XpNA1+pNK3-=>ShbQ)a z|GvBbNWkd|;&x$PZgOeKck*PddwRw9iUgotqkd3cl|`;MUrc~bE~lk6Tf{tmetBuQ z)B!!Vo}4&3pR9^k``&&4R;urR|Nh+sR|>;6A|KF1?yn%(PwK}D4KctQ6F@BF@tH}l z{v$v(1>bvmw$OdK1zmT?K6iyxRItXBIsT9Ok3Iv<8c%oL!?SdXN}q||zKR{%TCbl0 zBKh9$y*xg!U1bcq;q~|MOAz{@+1+1&K_IZGXG8{mD|2FvriR?8tBbSW$r7tRL!vCj(;n5}4 zt?uBHc^R$X?Ui6=yd#mk zz^+=|$=+^khUk|+a`f-KXp8Dn|D9@Sm#K-#^$xkaO9;jR)EPi5l^&i!df<;#_N*$c zsY#-{6fUVgNbVlLO|T4Uove~J4R{cwMIXM19|5#K4jv`9=XE{_GWRENeP$dRLM)i-nFom!LmVy+M}#- zhG9Y>NLV-;5C)^JdlNlhnX~_McsB3wL;uv()_yHeXL#HE;ZR_`!}WWM+X3!0=xo11 zD>A#<9eD*M3l%y32dcns00<%B|=`JppXGlt4zew5rCs55l0mnH#XdP$Z zBkyN3esc7pauuuuZ92cv%qj2% zW*f(dg=~Q>fq3fC+VuY7HnZC;gXyM-pmS6IK zQTi4no;0|a$`|7o7Z<+k2M2oFJ3Ck3l)8mSR#qMr(vOMWy6Xkee$7ApL?&vV5G|;|jwOGk;xvZrO#pU_d!NILP$r7EYXvdzNNx9e6 zkuNn5&kQ8akU%)QY-wj9M7RG#>n#71r(0skE!{CLA!Cxizds`>Dd`$Wq(s>m(wC2V zQ0r#4AenAHZ#PyHk}@MxX!|7%?@`2rMDBD-;QBc=9!UuE#FSMazC`Ir-yh~1jK|L} zoRVy_$M=3_iDxES%`k)sVT5ry^nN7Zl2#@AunUcepBNRthi^4r=wRH*uMqUA&n_*H zqHIF%yde7^-~;y>cK4(c)s9o&{0tc5MZh$kp?G_FsP$yEQc-AVW!X5|MWQmH?(kP$ z+SS#A2*<$5!3I0x8E)u#El(96cM<#y@9DUA^y0uesEYtjzI=*=ghWU{u!Mq)Jhy%X z9odgbIU7z;1)l?fX9WoX;dfC{C4J;Rpx-;5AtV3I&L^q{%-5mAaw~l<-Jo2iDU~m({ZFPrf8436ual<@NchbYLI+Uy6IlGgjMjY)gR!!*Ms##MVuMdC<6bx)2L}ek zRK2_V`xp;T&o?lClVnnT7WWzuJ>%Q@ugJ(U2|%Y$`S&OBcl07N2B-k_ghV@?E5?fq{10iCPX6e@|4}ojrJ;> z)@0C>6hW?Dy1KeDJ{Qwk26<|G)WV80D{DSCPgda@4euY}Vd7;|i{J=_-2bfqbCz}i zuG1XGvsYqmWwi@N@cST;ST;#42I_$5e+e$Y0AL`!LnN{%JKB66qPd9LuU|=tA@9i| zdq!iOqEb+0-8ek%&)NomhI3oKFA>#)YC81b2`i@W^~*-5?jQ3yF4(odjod!#t(DD6 zsXHvlBx|9zc)pHxuLS*oxKP(=owT{UW3?H$Q|>Li&us@#yzl<9fA8)#vA0(`oUfDT zv-p{;!;!)?JUZ&|rJax%L$(1}FuH+(^%E~QciZv7!9qs9^%4-t(7?>YD+A@J3ICq2 zE0I@F_;@r^rk7=XANT<%Ci4Iyb%aM^NsyKsb@<&Wi{4Xlb8wjY`1&q@ZRPRqY?PLS z-&u+wZs0uCL|PRG_#eriM;LOb;Yf=YsY}q|?5FqY#=cAxxYJuMoo*z8Igd;u>;TYNqb+_>;2;w9AoMBgn32;|~lbkbaccKmBbSzGc|pK_j?2N3G6c zytZA4r1^lLE{!T~U;<=4C&(oO37|eP2ni7bqzygHE)&FdulkQ)KiS1U)3#pDyP{%o z_7nGSq2T4npZbEej?9cgj(6*rmN!6QAjZyO`Hudq6E3b1%*Bq*$3y&1&oqOvXxUC| zKUvrTe{Lio-3h5^XU(%9fi^c3r@W64(C0 zfKrtX|IUq1NetdLCB!l*gL&f_fZJ@|ARw`ciQiLz>&vYJT>r(r`Vp$r!pU%*g?-j3;Ph2v)%MEFsA+VEfcb;b>fvDZh}LnLiE~f_y~CP*5NgkH04rp%^5CnCR%- zm*?kqENpCSBcr1gH6o!sfbIfpE}qZ%xGaejr79Xl@XqFDu+v8GA3PTQIVGy+OQyix z5&N1j3gcc$iwPGVHVTmE2M>?Nw_w0;0wxS;UCR}T11%P^{q8UGemGc}W)%CoUi|PL z({Fis0Veot3JJ6to7*dGUI)v$o)Bl>IXyUlyNmV1FjAIJA8@4Sxnr+J0s;b@Kq*-P zGz}ppi9r10$(ke;6_x+!PA-4`DOp%V7y%!C@|U9LsA#{xg>I+&?<9>a%OGRPxgMxC z!C7%&^>f-L=6@ncj?aEx++!HZQ;z|1Dy%Jzh{1#+yjjZvc|u{>rr8zRdv507;IIVT zC!1Sa|M*3q2GX>*x5Mk{zc6ye$w3y*&gTip(F$~&4M;nX&++wy1YIsR#Pv9vh#Zee zv{O(kZJqGmJ}ausqZ#_g348}-<)<_yc1~{Y+S*zGSVcAQ{l|~ZNu2Z&uW$KEaV@XiK&|t5TDRO`<{}~Lq zWH=8QhRNhsG#dqD1J%qInZj%ixKAZ*>e3-vLTd-xG#Z$g0lGwg<@|A-s5~-(3^IY{ z?OC+1(L2NgQ@7sz`GJv{L&5BmhHfmE!X!i234^()#xbn*UteneDaq^7lU!h8=Oe~Q zWHn+*751*@%^dB(#lfj9r|*6O1FOw~Yic;_%m$w8WQu6GR{@nqyzdi95s+meIY8Yg zy#dQib0xVHC7Ez@!GeS-5Nl|_wW^dM6w%r$)OxdDvIw{;{75NEDH)lZ!ot@M2LJKJ z>r`|VvsO>z18?1&xt(1bH4~Ep9c~ne+<=@M%8z8ChPN9rqLE-7)xXG9SD(sJ^E=yC zbp1UStJ~~a)F>MRkrKkfqoYFrCtL>{e^m-J3yVP5Gl;fkLxT^I2mm||1wB0q7`MS< z8EN35t<`0QiK(giINxS$I3b!=eM@VI>W)rE;s-zf=o#pGiClj51M%t8vW>IrS&Pw( z!#1C5XY8=<0Eujv;v{QA3AD#d`ZQzkY4B;=L)H|;Wi^H%;;alW1+Suieqhmee=V2t z65kb(%s$wELO!nK10r2V&A4ujVUWe2$;rvCoihp?)V0Yo^rHaeXl{R&)$BNt)H+~d z%>??%FfeFuglvDNkVK<;J`jnU#;7|1ugh`e_hrKA&@g0Sk}Ho0d0R5~k9FCAv!mng z!8)}5=mIA{^SXG2MOmS!_!EWI3kvj>+sQmeaxxJnEzQ%!C zJOaiAObH1I5$#4tihBE{$aY`oR>Yvz3VVHHqYl_mUctELvB0$OPz~-yF6eA++mL>f z^HTsgg8~A??P`M8y2IXqbwM-?3Hw&>Qo&m*q@<)8VOZ)!g@i%ojz^39?_yt@5n^GH zmn^e*0&#G-QQw}mGK-#d;&WG#t^fXlR;H(o)BQsK6}Ls@jV6S5zLM>ifllH2*^w^1 zNqt%{EHK%$ler&p`ul1@b~eQ~wY}qyiE2esz#C;KlWV~g6A>{GCDW2`!p+SsZEj9Y z7a1530EdQ#min^mc|8R-qSo(!r82V+)HJCWAU%0|&fp zxjY+9JPO50sIah*{NG!^Xhn{L3XncrfS5m6UMJ*rjtnj`m~fe!ML1H>Kjpi2lk#!1i!%=ap<+KzCpsoZ8L3Kpv3qtl2`r%v1>ym4=>zB~ zHd*TqAmL)FMi=!5EPvWPjL%Im83_w_#CfhHBKzo*!(q;gq{1bRfpRSn%zVF`nOg^N zuD-ycuk3UA%Tft=23>&#Cs0?t1BHLZkH`ipjL?Rq9duObA3KOGC>9v)AQSj)k zs4sVq>7RhZg$BK;WJZxp%-GlG>tNK10@emSu*l`;F-pFOzPMLo3C%yr5DR~apKD#*po*dJNP+17Ez?|mihJSF(FvtB1wmX%A{Lc zcn9>h#uBw6FF+!DR*7IU$;-=s%g_J9+Wt4^FQBF7Q|-VCL$hDi=G0&*64me?WoZOt zEG;AR1YzrPNfOA!F-0-SD3EBs5fM)iEos zj;QzCy=YUB8e2p=%=`8{eE8X#8)0wHBJR2`>AAm7$UcU}M z1tNnGFt1dK`S=I{;yM8We9Xy4iB?7Xq*O={V5D*I@FWW+v%vxcKv2F`R)$O};}NU7 z$l8Tl*0IHM{bMt3i6xN*`~jSQ%NG-I5}8hJx1Hqn2yH6WpgaJ&%y`02K2~xxwu}S?BHJ zy4pTGIj)$r8<#|2aY~>t>??d0{AYAAD7%6@tXt>r#jKG_f*f_ea^@#ce1Ij^bZ;VW z6hAaYt&9L^HCDt6{F#JyU^|#w?FxGK3>9^($;A?lhzAXjy_Ho}UE$cTR@c`9@9umQ zlG)Zgffa!q7Cj;XrWj=**Iku$Br>1X%*4d)r()&fRtgDndFmz8go9=rH4tb%x<9}2 zPyPkN7b$Rc|7X6j_TEiEc&9}&Utw`YbkukXQ)K~UW1DV*scys3I z^H^llY?$f0x9V(Y?NFkIp-g`@F4aR`ID9u7XiKs^K(|4ysjjv#Z1-sz0yW}z_g(Nm zClRp3YypUo!H^&a8Hr?8s1~WubwE&0BD3BXAeP*F3S~6&FFA0(tMm}c$OnI2fmcXK z=nq($B$uLqNE%Z>&&qm*@$6X?CMKrVpjovA0dJ_uezftPs{puT7SUbJz<8`wr@Lea zmO}3V@w@! z8=A(N{UE#cXxMpcY}0y|Bv^*_x-Ikth1N} z!wlzn_Os)=KU+ld%mdvQ4w4964n@O+EjsfV{9BHog!G?u5j;d_by_?)!4fJwyq%Zs zD0n=dfg$QD=%smAf@BdVFzT@B3_y4<>>~h@0T!GOXLDQ*rfDxgpZ#?2`l0WJiE zISDKXpqzpNcc2Sg(t@B`X!9C0<$NA3t!g$lrJJBU;Wy}6d5B9$P~(O7+WjFOe{Ksw ztbvE97L2pDU8t+}*xsyapSbdu7NM(-*7L^yNFttP)~c{u`pYcAZ9`L}&HTQ&7Cy47 zs)Aj*qz>c4QG<-Bt+d_fJsen2GQK@ou_6t4Dx3f;TD>o}e~#)AMQp``5vV0->(Rg? zQ&#TF7Zz90p~mC<`lmKMeVs>K5fc=i*&d8%h}FPphh&0j5fMc!FjR@dA|P1a1GQXj zV5QVY1m2L0jBGLyj1IQJ8vG%c$>#gL#nY>|%62#(DjJfzznd9Rm^;P^{uCV#55U6% z$}#%DUMJ5tzt+G_B?(3zT}ySgp!j1e^6^jW$3<=*ZHD&(ZsmFYTTC+7rIQ8 ze%>vaE|qE|>`v7eVI+8d2mJjb1A~K^8^MU68*Ewp31)CdzylG;ZO5p>N9S|YaK#;H zOsfm&MJ;AV`L?G`R{Dvl{)2A7sgFQEW7=jaJgTL^J7vl|rF6fE#79ZnD3kp%_9wop zS0xOB#fJuT4}51dD;)W)SozW@_=v%P5g~dg$h>u}A*k2o=XU{)G{nJH_EbkIN=ieJ z6#)k(MpC`K;b?SlIgB-DjmPf2UdM!!7~&>iMK%X9&dHoas}#7sZWH3{{!U_&a{HW5 zbfocdU8@yC{Tlk zwn~xlIqTfU!^2~1O!(F73Zw(@^YHLYlLr9k;h&@XE00hho_=4CyCfmq!k#w_=iqKh z<##!gAPM zP^Bkl&Gms7coEoNsw*o6Pu&?!iz~`e@Hl$;mN5ZdQopS`{u3 z6s{I82NwL=%|;S;0MLjBfr^Hm);sO2(yhPPmeq-xNL)lT<{64jE;hCknc^a#iMPEv zUQ%~`d2%WZ+mE~RUh47}N4IA6)&`9OmDC*E6 zsE@z*9Hq70b^o?P8T)nUmokvxfP3}Czgq*B(q9u~p6LqQ3E?d-tTemMnPCtU%SR9| zNH4+-N%Q)TMO$^O9Bp{*B%F?eS(IZCb@ByVRt(P;pESLH=2u7U z&`0i8q6~(I?7C@=%%pjN{FMI5qK5uiQjK=5^Q;B~;$M1(^=G58>55Ef@Fms0 z^+aZmNQFjo16VO11Q*f(Xyx(&CHLR#*FARVbugj4Q3wwnYc?ZAYi;VD8xj7%Ts^k3 zU}_DTB8A^(tUqUi{oIytgqc@m$}E9<_E;*HM}zfM>1>n+bxwj^JB3;1&~<( zskO?uOVucl5HlJ^z^l|?yC&p6VR7^dI&woZ1N;qmDsQ>IvWj>WGI8+{aoLd02vS|Q zWvnj2bgFNV@D^|{n9W-@R8j*eBRV=dF1R>2sC82g*Fb`+>z`srN*Y3|Oa*b|Xu@Pd zyrBC+@L-b#3*}^*vCr=)t43eWjr(5VshP`HtD*T^j@;5r7plmjEY88eLDp+)3;c&B zgSIA0gCVv7EWR|@Z+#90v{v=8G;fWaeWY)(?tEC6DQ8gaRe8;Uf_}uvi8A21Q|v6-jF-U$ZCP*naBYkBSN z6qXR69veU^ezkg%P!lXQDBtSXD#=u79-{~I@T(CIRPh4|54Y;!PnD2hVieQj_=|zia zChkJhE0Vw|f~_$H3kflUo=XV9Twpk_x{MtJq(9kQEr~k|toYmV{r6Kuennykl-U6G=hY&~=cXW#)9SNMw4z$H)r-5x z_YjM@2HW+zw8)MT8fgO>*v_RCx|6U3qu( zMLL$@-XKRBW#FY;46iqtx~vBH)mhc5-35@m%HO=)WTktyz1vbQN#txy4rrd+z?efl zcf<(sNw?54n8a~|_=d_?MPs~0Q=^L!oW(=tcT7uOf%fV8&wT^`@e-=gNRU5DP)5I{ znw>`-3^w~tNvWy%$BnjFJnqmxb(@fKNy3WywlBJzQX<3Y4B2n>IrF-{c-=Jvw!6of zG|SMwBW*9UU{hUN63fHZgkV=^XC|aMwmnmP)GC(wz>WiNt@Q#KRD|J6vHhg$%)BP$0z2BNaL!{F_{=cpcT+J8&z z-&@Ur4&8xIr80~Af%Dnd72xMF+{r96V5xA6&+nZOo-&xk_Crq>%a?HHN{-9bDt(ff zO@47IBI@}fs#C7c`HR~l5)d2jiT02CV=|pD{P&3EOjZq zn~)7fU6Nc(>~ zg}1sD!0|cHX7kJTg8IO=axpH zNm|U_aBN!a$D@(3B<*rh2IV8Irxls~19JNUK6Wj)l>7fF2POhnhGpV8cllAs|2!Z3 z#VIZimeAqv9-EtSJ`Z;^bO`MU0Ofe`BY+v`3+~RLLwevoU{oRRO*XulYSzpOIzf4q z+f2d&jSP6#&b96&0vA<4GTUf+=&QwKu?`T-aQVxo0|KR@Iq(BjIJo|CSFu7J)N~TX1z4AOiApveqt_BJzmsm#!7=bzlGBduBgbW zkO_noO)(H~=E+N&2?=r6p0<7^qkjjfRvHXA8YOBPC9}J8*p?+uFvSd@J*3IGTDiMtCDomm_iNxM2$U>2w;&Y1x~#mq_R<;_kR=g2arV(XH(mbHgXpUCnq*eD6Cl(9#!;y1FUpb9U1wWFGmbf0i9rK z_E!?M`u49i7f5C2|DOpKIMTM@V6TI461=aUD-Ko!H!MVB6z==)9lWE8{de%pPgYJX z-Hoe%9=ci`fHx4Yd3BroL)n5?&PKh=ROgCvhR_d+4H^}%2!Fo;0gksvk$AZ9rtGoI zx@5R4SlBU2#Upg(mf~a?;xsrKHD-gqij6KGn}s=l8U`pA$w)nx-5fo4-|m!ShU)POX>G!;8Qh)Y!W` zXKmqDPCkF#?>~wuI2QfTD3r)Hxoc@5HYZV~o?ClaltZp2H;f@F!UHV|4-dsN>eC^r zD6?dS;teZ&6e^$4NP0s{iLTLOR53Co`FX}A8X-iM1ul@QPD$i)&}~|6=$6o%6X;{c)O+^X^A^uT4TX_TN7C~qaTmL!R1oVh^zDB*K!QxzZ z?%JMRpLeJ9V@;p`X`dK?l26O=H-j;-K;)WzaUd}}e3_|AQOh-}sN+78`yoGKWLuVc zT>U$~;3eG7YF6TK=v|RW8M#0he8P)z8EtN|kYbHY*<8b4&t+ zdyb8>)Fadqqe=LWbM@2J`l%T6cWDaakwHEoAJLWxX4{se!gL~i@R`egBch=F2eAla z2pi1T|IGhfVv_s!;Lmk4mfLSLF5dneF7t*j>n9Xu1g6k_BA=$j#S4vm2a7|7l8I8{ zLw+@+JVt1EJs&~2KR;ZbgX+g!CeapP0ZM8ElSv(?&9?rh2T8JbKPun}yDvQjdGpxXNOvqynX zSc@eacvE|!9Q_krU!h>2t3H;*Pm#jxj;6BxuwAZGg0`pV({hQ^D!qeu{qM;c>5q~lHiWyRXvW+|!>fwWfd4YUEdBa1Agt*GNzI~%Jh+FYIX zbw^}hBv}^(vWc5tSJ&72c#3Z%Ikii)xrnYs0=9Ebcm$=}{^Wb&MlXJ^M3Ml(5j zIA!9|Xs;FWqfd&*fkhG2`fhIG|GtktD}>^^B?2(LG9` zZ=!)-trB(0p8K_hp^TyMpFw4|Lu)>I_xELO#V1e^-yk7UnLG}X^fQqXX4l=Sy!}~x zsVA@`k^kp?&EaUgs?*58Gc&;mc^YT_!HUMw2>Cs>^qJ!BIqrX6qN?xTP~ZP8sIBAg zqCMNF*VFvG%gY3f=k}W>~ z@=Hb_Bz$}iP`=zL;Rp>9!1@{GbDCBj2MhSAnorS;1{KmxQvOKiOZ8h*=3AF<2z@e*zV9idwB!ua*kz?;)H z&ZwOg9WzY!s5GA!-D95>ErgJ2wd7VOPpA1>?3I-9Y`{B$q)|qH^lW{OV&{W|qy1As6gm z43jLeI25Q+5P>536zygee5ifLEtl~!8qRljSgR+?pn%9X#v}gDL+s#s2JN^(lP;z) zna94f1)Ld0BL@LAE%mVMf&YcP`aYtEI!Sf=l?b8 zJPC(mgajHi*^;;;cAt`0@YG9bWSE9DEJo4Jhl3Og;WTHD{17P)1ili%cKG(Ux|DOM-u@~ zt68uyx{y42;474Ghe1Es+4-*%5l=NYZ=Z#`Qwuj)@Tmv_@jy$d&bNuvWWpln_~R;Q z#ZE61D4C`&P>}-dOZ291)EeJo&Z1i_iM~7LGZd%)5iozl>VdgnaqTqWII@ z>+h7!pz>qeE44~~gT=o^4q0}bP@sp$sQbqC&v*v_p(&yTUlW_4|tnTx<95-wu~ukUrm*@GobLWn_r= z{AG{HQQp8?Ryf)AG2H8hSsUk|4e{b#l$k z%dgj~>ri_yt9b^zh?u#f?G5a~)NkDAp`{1Lg=OMzWRIDSwcuk3!-AuA0#?6iAyN!m zpRU!F=%8@+#+Wy3UWu;-HEMoFwmuEsYSaFl-WQj?GdjkodHpEk2>dE#Aw9J!IWMrPR7<&SAmu)( zf0lynsNhCJUGTiX5f%I1;XwIV1UIW@uvV~S@qW78FRpxpdWF0iPXIYyb^+%I_XmC04f6Q4I*+- z-TJ|zLL+U{cuo0o0-`-c`@VQHTh9M$eKmJCK4}A%C6*KY%X0T)=(nx_ zHLDB`&Qj#ch*hSxZ12tGqs94bewXlxk4Jr_Tv)D!8;@kUg+4ODj_9;P$j7Oj(4vYr zQaqs{BV3S8uvIfqJxdPNhO;ZktFm2C4g^!PV!>8qi1=Q(S0fPN)MGniqEJ>^0&5jPm9AkM zDAP?MBpvK>tc8GTo!1!S+IMGo>htg90e9eAG+f@==jQi)wp2F*w7KO#Dob=T<@Z!X zCM)l`*cUxPt-DP?8v+ad&Uzb2VQ%WQjGMSC@JP^-7f@SBCFsrDSOKFBK_f+3awy?F+YNBeS_Wk>Q4N2R*&|8%lJ7F zUEMxIlErqG`g_=LvCUg~o#WBOzMgr8Mq8CgR3iFF2Eo5-ms;O~B^k92w}LD7Q4qt7 zKIK_R4XMDJYA(da+Nyc5AzlrKBda%lC|xa#r5`ldIAc)^ZS)%fHg=1N+P)wp>Z1aYL*iBij(H!B~ZZ*d^o8 zp2|8iif zzH!#5qW|9-4b9At>z#uYKDK@3VLD6+zih+cp`qwkPGYqjjCVK2#padpte7OLit-QJ2E--dswQdNw2#w=oVAgl!Z zG{8rnsT{KLm!cEr=~9u=j}krP5#Y*AbK6{y@WIVD?VCg%OGHbIZF*=6fuGWqHcO4B!#f`~YZ9;eZS~*F6mfb-Z`EI^GpZ5X z*3~WaU%(NV2cjp*QN}jo`L|0lb+-=fj{{gH+nlV$FOFWqk$$1IpNW_3$aaN%X&}7V z_DUQi1~fdhpX`1kZDeD8&&@~dnQ7K1K8B!QhSYnE(%!;bZ?9_|?s-PX)eFeg_~t?h zGsEiqF^Vq{sT@>FRF{xR;a&3{#f_HVHF33s)~QjAb#2jO278yPLF$}VublogJwQ)w zJHAM%F9kM@XRt4xtxGzbO%ek){En1Q{mBFV5x4tOeU_kvL&y0*HzxY_@@B=bX|`A= zByRwA{^k%4eYUnBq|oapC=eSV0&9@}P}(W4g^(N?8pLTT9{Nweq+!k+V%ujv!uQ$&JV(}ALN zopWj7pNk#`i1x*om!Sm{M}?Vr-1f&Py7niy6PP3@LrzU_586ay8z=aj-WqsLYF62=g{nJ>qg>~O*KKZ* z;RFgxp}bXCpIW##E{YMcswSnCKubzc*m}6jTxFrN7^wZBYfjX09yt0!IU2TP_<3%e zv}^9E`u=3F$1%Yx91mcCGBJXioQ#y|ZqHZVij!?KT@pd*nHgMqTH{B#*ckUo0rDWM z;-QmP53|?Dt3X(FpKoOQB7@_JK6Tu611s+F1~Li)9F2gYIMD|!wlAoB%PjeZ?M1s! z&u`uw72H;uQ97c<@2!=eAJq~z&5aCmcjUwh6Mb6lYw&OT^d1O7QcvY~H@WFFwMx1n zeu9c16l773!>r1vmPvEOh@38jejL4$UWq|*yWlBPr2Uxt-g^)yj0Uric3uio-?9DBF z0E&{<0zq6V@VtH-i@meb*Jm!`zA05SvpLojnOu7+yhhE-*d)~F5pSX=>xql4OQfLa z{`V76(!rD|pP=KQ#jA5$U|?UGwn_nSgI;9Wa8+J}b%WPRZGD*4p-@?2#3!;S1+c9J zXvHlSp62G1xEzfP-3=k4usEloMKbnySbT2w3`9l+3U%{l7i*C6$hoF`uY)`7ucu2N zag5KK3imJ@%BF&wVg0VTM=Sl-FR}!%K1c<`#Ox?omy_1@!_%GQ$LL*Wmvt=5!QQ>KCfCayBElY;3jUnqoXoE8w- zyhL#AYZt%%7-cD}rZT#8uqDx~^=fb!sEkP?;vL4ebj$=8BD{twYT!p_a#xMxn(lG~6J^hiUTGNi&eUD>eugSIkeEgii;(Z1 zZ3DAp;Hd-QM;#_Yaf&axRaH!r$wDc^YZAi(Oee}>_yv-?&s?HJ=y2Kxq2buy`X`7> zl@j%MAmF>=ZJhq~mPkvPc98HHY>|x7ir2vL>>Rx}H`zhutM#m*Q2*AGWy0uyG(z$R zz-)cF(H>}aUqj=yyE0OGjP=`}VN`FSGrR2&GZb#)Hz*f#y2I-html!B({8z=2c<PMaRH0KfS`gbgAQ^17+fTHLLrsCTbpKq>`(yo(w(mJ9ZiGWTg)y>h z8ifZ#u(kU<>8E$*1*N)B0t?f9XTcfpl;)zZqbP0ZO|#=Lw`RM4%4xo6!SHO!UAhV+ z7G+s6jj}D!C9AZL`znZZe54A{%TtrkU4DNTs}~_8kf+do9u5-81a#x5q$4eHOt>8epjONRZ=s8RT_jTpXY(OyEi!gK1Kkn2ntMC z?NKyg(kRz+tTfn@mM(kDUpqXtsu5+#0vMH@F(lmvm6hZ9NQN9a8O|jF(+cHZX5Gly z_~kTJCDMr9x1q%00ME1ToSYU<7jc!}xu0}?N_EHhZkBsYnOS8t)&oA%70q)NX}}+s zUP@@cnZ{Gi*W*!yD)p-q!EL~p?&4&}_Nranvt$<#mN?>5S5)7eNZ(mK=D$HfLpb{= z7loY=h@;a+97&$kMoTv+d54Zu5}RdxaJeg&{CrilU@@I z)p$iE-sygADC+ExC!qx{3XU(AWA;`p#>pXN5l^&*`Np!4_O7X+F9?)9Gw3id5T85R zV*N%b{-eGgM{zU^XSZMJK^oodCKbZP;W_!0iWa5d@bZFFl z_7}?Z^?>=3N&ECQw?gcBFaE)qQRAdTY*88cffZVj-q*^aN=p#12pSl2cj~XgcMlfg zMx~GS3a-(PAQ7mA$klQXEY-eek2~>O9af7C3c30L!kwuRNS_f%Pa)`WgmG7f(*u*Q z&y(liyopxLMkh;^g&Nb{q0*A0C#2h^e^9UtP&TDK3F>&(K#f2Gd^?lhwGkDa*Px*2 z+ghps<7S;0;OzF&Z}YjLatbTQ_t8F&){hXVuK91LF&;2AQMA~3x5PZ3pbtEL zqOCAVwWQ?(Hj^{?O5HD39L ziCW;{*{?%SKPprDN2=-i_E^Zr9;Ayvs!L# z7bKblR}W103DO(-WBLu((&1dx*P2(1Fb&&XWx05Y zymIyG3b-Fp4*YReYC`#$3(rHgt}d{jJ zewYW^IoZKwoqaZls~C+OEA<@vmA68RH6U!cQu_v;^oKjXYPuT#a|y!xN+Y7>!4P{d zNvtML>w|TbEx(CQ5O75ZtTs4(#sG- zLk@m+sT1f>-MHye>ZEWn|fbkea zGDR!(Pf`)P#t#5nht zWbA7{ioavn$LJaa^csj&c@WVkS$XSew<~S$HB{~PUJ-H-OtmJjxef)XMphG{65~0h z1uZ!OAacYi?qO(b!nIu?EbR$41Q}>=={C|Ro~1K=CkEvajk4wWNY*wFoiYJe z73i-+=PM!t=3Cl7Qo)G7ivnpcpCIUnfxX}m%oXgWU4(-Nw@!nM36DFe<|!t0G$w0o zou}Bh3oC6wg{X^?C zUcI$hX{cjjewaV0!;>bZsLsoZCeJp4!wDTY@wJU5hkPve+)MAuaV8#)aU4ZO!r4(_ zcY4fa^c1?fxoD3HjVyN@8q3FC#67>|?#Sygpm}Z-JF>GQ8-d4{PkFf>$6;LB_;&v-wR(b*4Q#dOobFG2dq499sMMqQs8snbnal`xGh5<4`>iKGb~*U2ordN zQRU223ly!G@rPt+J6mdL^Vs*~aHK7+Qe_N~gnHi;Z%`WxVa;BmWvYr(VmVl=%03fkj91PuWS6vc_SXBbr|U?bU-5`MrQ<&;DAF3EHpHY zb~Q{suv!kkWvhxIkvE1DQ$BNWjJb1rYqT^7KtZUyYM|1>K7^->0QoaLmGZeV`Y7OW zE)GxX8KH~RfSbT}xy4G15R7&tBSB&DOVvPBw3*1v>RK(UqJmOr?f9*nD3ejTQk(!& z=q$0X5|xNc1|ETW!8K5-B&ZZMQ^4n@7@+EsnwcN%_;>go4g%uMM!8MF3sVe6Y4X)Aaj8i@m+a+9m+H;kR zPD=Ri?mCMJnH6w&4%yF7&_RZJc@b-0bX3FOt@JQr3Hc}p=hfdWewIO)$jsm_O&0E4 z;j41~0j9|Rv;b6kB@;oz&~Ml-ko)NvY7DUBMHGD}p3H{k-aBl`9j&%FM-PMyq{5D#wGME2kZ*M;a$~mpTj{F{wyFl#A!9?}hY5%H& zLe=aqMbV7M+^W;P3m$otCK=Vk;L>gBDP?e(&RkQ*1+Wo$zmmtSsH+v1WLl|9GoED` zq;?mqn-boW%=UGX0IVX04kTYJ6K+s+JgvyDlVFO{Vs?I{5(zd?SLqV@RLlhpZfyUb zfgL9P+Jxp$we-jZbZ;WoM!Kdq|q-nxO%(3LQYEO|iy&rDx1H~jF^v4`k z$2=zJ{MyVq#9Pc9bKqsiEao!ks{2 z{U{p9~skVAtW*j~DP@wU7u*puyCg!NOeReQKMT z{-aY&ZC_;QUoZo)e@3H-^798%ge~Gjccriqe5t@-U%6aOR9aF53_Pg0G&d06td z+J}h&spnRQx^*h0itWkCnj{9j)tZK`x=@E1j~hyDQY*HJ0CF;8xn^B|GFj!=`>7yb za+tL;e%~B+2@zWCe%g@Vhhbd98bCdEQ5)edNgTXXAXMnURBN?7OuWV(V%6mbtGQ;f zQmuULny;$co14&qqUU_jhqjx8LqkO%bxH>VM-OokX z*cw{28|hFdXN#wlLi=}AF2eFQOZht#CEG=KKNAO8Q9BH{ddu<%_ALwS02ig)g&}G% z<`ly;!;skE7Lyycgp8Yhmgg<^oZ8CI54L)YjHf!eU&WgEYnnC+#nO2)O3JMcJl&mZ zgXOQI*XP@{B*+h0s%S58ZpsBX;b{zNKBhOqxUNA_X;R`-7`gXOquvUCo!FxSaki_? zTS!{YUW{MvL)&p(B~KM#-?yKG8RYuvRcG*WP#k?pU-P3!Z*8`zxl~L8|L!HTy|N;k zkBP^~ly^^-3w&6FtLb?C3QZY6cPD1vRpHS`nY_aHK?z{>&-KSO7+&XE=lO2V z8pR9MF(P1@L%o&7@d|ebf^>? zFv-1658-PoW!3)suKpyNmOY5mLV@`0jm;ab4U@&bQt<;-0bYaN!&#ZwGrjuXKRb+ z)_K>X#??w(T{`z|;o#TDICKoTlSR*R1=~u4=a5qt%UPr9V=j^R_v@o35Tv7#s)fM} zZA{nr5(Wk})ILnSjx|PDU*C*D7)X_L1EGT?H#|Z9y zP@&6{Zq(@aSwAKS&3M^9>OfV)t@rz+RpXw{hRnA=wFIOl{~*%iZ{ot>m`lLNdY<{- zkO$vbZRh_YBhP&go%r21V}0-B4Ryi0sa(15Rw&fjfAK0#zAzAp_xZD{FfV<$NhZ9Q z2=1b+RtQ4I* zmPTp!m^Ufe?LF@!9r`>VL{>&-zjJhi4AzOjF8qVqa0fY-$M|+C_B)H!ty51y$o`B8WFXH*bZ}j7OWM<6kK(B`Cxi z9Pm)oN5j*JLAKH5vm{u^OIX<)%X0xI%glar&~14N)gk`==l~Bo^AAX zju)u0+$BBB-&td(rOws52S0PMYedyK6P8Ec7zW(YE%Zt&wzhYyxaw3=F+87Hnut$;G$wX1&RY9uyyE z>B+k%a?J0U00e|R*Eg!QoY3^yvuIoA_%l6vDFrVWy&;7Gc}Z2#n9*I%ksev3>~y?3FP%+LYZQ>N=ho++UU^jtT7+*7c$90AVJS{PFHu^weBQj9uQANmVIbTZ- zRILvuOpO;*?Iw(92?m%95eEZ=!VVX=5#O|H0;>E8Y?!2$+gy=`aEDu9TN>17p3P~$ z`-|6@2u*n(a(6!SbDuGAu^n`*Xoo+EEw#7go?c;bo8hGj6gcD|cK*JKr1nwd+lxuI zTAG#zo^C&X=`gD)Z{lVi^R~w^6mRa`%q%~2B?5TMU8xI)u{Ed)^#pIqa@wo<jjV9EESbBl(|m3d z=*QM758!Y#d|b56R&2ls5FY6TPvDHXZNp1utLo21IktM)&zptS8CNd`%ftB(FCBkF zqk4Xd^H~MjBYz9>#>BQi*!B5pwW$*53O}@9O^;kSPds?q{qye8`K?qpcHc(PPLl{v ztrL_mPQcDtnfnI=`sYyx25@+F8C`=EP_XA^e2kx`-lGcE^FotTQZ^0_5OHyF{~%;? zJ0neUpnwy?z!@hZAlxg%tp)Z1o9H8P^@)(1d>z!*o^XV<*{KdM?{I!dg*Hq%gS2Le z+SSP-+0I9qgM~ohr|~@1+gplbe*sVd@hdepNINd_!}DQ%%C|K(mX)tH-%S?)y0>=G z1IhA8Ii+0^VZWDA(ALOr;g==Ym&H2SWJT)H5;;(VdU`w3=dhaPTC*}UPf9^C$rl=| zS+Em*h#tgB&boZWl?yDxq$#mC#VM|qJ7&oQB%XW@;F$EA0cfWaY;=0_*e9 z&`uO0d8?%zX$lXIZV{q%`a z21O;1YHx({IMug(MiH!Oew0!o<1vyfT;+MAx@H&+lT*eFouP0hKq5+oZ3RxmJi^dW zi|rX-{We~!iiw=qj0mx_-&MC$3_-`i391&JJGrsqzW3VR+PlppvjHLwmPBWVrGHTt ze!?cEcYf#cX1r>e&D8Xp&et@d7T(w$y|ABlP~)f~P`-~jnZ>_x+tXb|jEQNa3jYi! zgEI&9t5lb`k$y>z|j++VMsWaZjr$8OYG=xrnrPj5+^6%^>s0wZ8 zg^2#_q8Kdr%lA1GEI9y6tP!}j0ptfAveQn{r01H=LKlYJaDtRiQ10?qH@V8GW36*8 zPQr7O!3M_-R=wDovlnOtWY?wQp+SV@RK5 z!q}TdO0q_dn*(O)*pxAMBtH$mFfVco(RO>T`C>B*PJ9zH6LM;5+(jc!6DjimE-M6( z#3<094p|n}_qEvB$VgaAY-@{)~v7+r2fXc3BCe4A3XHTx49Nux&4uwV!kZg&y)!o-$~3>BZ8_FsnNECi$MbyF?casA>oK zn>_Y7Y_565?ET_7_hG4BBA3*Os39yIrcBOA-!p0cG{AB*#6ubapg-&DHuY{}?PYchl$C(AL96~W8|_zDUtM`G}P zRnctUG{$D+|Qw9WYoM5D$rF?F-hjO)k7bu>;sW5+71M9*o1^B zHu9^s$1h)C4dQI$Sl_ZUicdi?Tox$5jVoK}JQhB+9*&;7H$2LZq@H%hmU}a{4WO2;mQWFVM%Q6 zlU3tXBW7Xv?2^;P9|;5cu%Xk}4`?LJ%y3GHUq{s9&z;D-?2rnTQ}NzCJ`c5ef-}9n z(DD8m#P*pPY}3s`Xxt6yJ-&p1f$PNmm(^y8?B;&g zVNxC{fHJ*TvblX4&8dEVK~`CoJB7SX;L8PpgW`D|B=X0S+API~s)r?+C~cma_k2AO zR1XdBy5>joZ*sMO>wLG|;)$kR`;Aq|=gJ_5sm}_EZj~)}`J&nt#}F2}=+9*#BR{Xj z*2o9-U8%3NpSpb3kcZveywcUb*w%CI`3?t50PoIsSEp{RYk8F-u9AXL%lWn{TfFMF(>wAG?`@n`|TfBV>e4Fqtx;Y;@5=15s6pF1)M{>2!hF!VC40$a`#%{x@M@De7M#Q zv^DWB&F9SJyrrcJf%Q~5QVc`M`q_&k$cleWf&Yvr&!90GK^2RIX&l+ogJFd=k#B+Z z5o@1>#MIB!a>?9vRTwMcTmdJ#d6%F?c&;a>{U|PB!QAE4+w8A9T@4kyn@D*aV>M^Y z5B`R!Zamd2KR0Eugwk)Hizj1DNA#NAfOjxPo@Kr-p<$7Q7kO~(u5i#=4BuNT?d~>v zLbdD(xZ7(+eiTywB`bDa8Y&EnA0NYoo60)x8vZLWx2Q=J`8A^VG3JnsSETxN*UC*p z2eo7s#y=|1kJEn)7o2{L(81Wbv1fp0YKiC5bVI+XWNU8UUZ}JiqB|=fA@G^#2-r9o zq%UO?p?gPiVpNRKUc0zi$b0(#=z0sND%-AYcOfmQq@*Y%ARsA?D2PZ12+}DH(j7NQ zsI(#=Eg~Q--6aCjB_NH`-CcX~e)}8a-DCg%GnS8IAY-j{uXSJ7HRn0!JP%sbvs7i| z=x_VpO#PWr+!t?Ov28i$UtE1(xy;j<{$TGB3(wF%13(v z&Z=!m^H0rI4wd&#a1K&zqaIR=G|T*U)$09Wf1mEfbHTO8Ygs?EmzFdB1>`I^A*c1D zQszzX-`HP&lEnl=<6hvt<18H^c~f$2PX)_AwXHfhakbfoMW$|7=3#R*xE(edWv$d& zu4g@t)9!endmKJGhRjYKE+EH^4m89c= zW2u#18y=v)wKM6?s4rHbr2TITHxjzw0JYl~(X&9ba6dm?hm&afzG5eLrv_a_Y)jE< zEnx6=+S=OGdv5ICbg7=K@Ak z?I42-gCqknP*fSIZ~ZgMms1|vGeg#$Qa`QV#J5S8MCm2^@}VF9jfhr0txs-BhtB;c zyy|5u{f#W4BjTR+ z?e7K(Q)CF2=eD~(3?o}T8xcR$nbFMd&FuNq8ONOG?b+!QWgVn`I(=F^%zXE^d1#io z$D|0MB#o~Ds)?S93;P-R=i{vn#N)JfFfx#F)Zdj0l@*4(!bp*aNm;T1vQThluV^vM$Y=C2z4ZfBMq*N^N}i&WnqJQ2=k zW2bohn9D}3+Dp~(+BW9v>?Pj$Uq_-o6Bd&BF6D#gP4*}vV%#|9l%hMzwGCPv--f7^ z^X^IM<~>x-qH^6ZnQoa={nag7V5BL4MMD@{@q9JM%wQtO6VYJUbaW|t=u$~2a0?5w zaw+%ypxDmM6%*W6JWQL%HQPhg7x!te^^MheyO~wy)Y3k}C%RGDTtRZ7-R1v#EZQ{6 zMRsIj262mtxfr?9VQz};vl-FT9p7b2EpxLs{(eWKgo@6Y+Wqbi7wevQJ_mjcFU$U% zu1y?`vPj(Als82*ZF2puO51}*802gy|y~1*X`Msd-%HJ^V#hj zJ`N&D2eCMQU`rRUm(iu<7a#Aba71@43VN|!oc49aOc{Z1T+F}awoLuZ0bRg@J-LKR zQGhX11gLv*fLjQh^4bZ@hqBGLqM~i8cvsz!bW!A@TU&yj$GcUeVvdZ(b)zvnzwU0w z(`{b1j%}qKj{7fkKX~L-vIBuBlA4@+KT7iE=Dmcjd{Mfdn3)QP7?X~>+?4eJ#pVVuCM-ud_A=4aH9z@{hm|OzMFu^)IDSU?Yur-Ia!U#bp6T9OiXi2k(>eV z@$QJv@#);1%?d~i4>y}q&p)3(7F)$sywq_YZW(DU%iw#gmh9*lCbLwS zk$i(Ho=N0vee|wAN22~Aw{dX><658Qn-3*lXSFp{v_4AI%g0sDYaU1|C@3^SI|hyC z{wmUTu(>G-W}1Mv;UEv0GjuHeXc22nOu1NN=GiQ9gSt93_l6!#tKZ+9t6|5%15Dwg zm=z?$<|6+%OzBz|4oe;Jv^dBomkV6yaRUB%C}qVfV8y`%sR!o|qek>tZq=2Hjej$~ zjFV@~;)xDsdf|zDpG>+kT3a8l#eSG^qd*#XQ|>zFR}Ce8S$5^xl}WpOcb0DauAj0cLfin@B!f zq^~T|2{`0EWA!3J$ukdlnDqBmhKYTDKX-9_CS)3l!X}Ep2wwP=Gh<~L^)4^LQ><7N)30$#Y$htqCMxp-hb0nsb|m7KZU}b{^E!PR^k)+MF1n`Fe^WNd1&v`= zqCu+K_mqWigIrb~IL=I+B}N zH-vf|1Rq@gujjFgQ!ruiJ7xO+J-M*7Z0rOpnkYW?kEb^OTY8VVgGNS!FvMFV{_oq1 z;?cj)_d$dqfLIELOd}wcjUA0j;HaSSVUz0>M*iCin(NH6U*y}r{?DV6g0nbll`*pZ z>*jy|kZY$>DibI64Le*5#vL@aSmHZqm?X1Yk9fmW|8u$j`8e_3$i&vLp|J`dD*Apk zofYkvz#u^=*%dJl05(LBjmq+Skt+1HR%@P<&_^r-P=3=zLISe zV={r}Ye<>C)M6xU%utt{jNa8igu02E?B?PSeW5fj6l0P^XBLz2io++pP~LD@%`8PH zxwg=)cc25YL+SruQX6&_tL&o8kMq+4^x5#5LPCRq1ICy!Lj_TAiT|E;u%`5ha>MsV32eiOV zIqAsj+=wp1?BZtx2{;%|W~x8IabLg60dLxtRuc)L65}@LXFDKI6Ik={xDl1Fllw$u zRK`F>L}=7b5sWjvE?qxidQ@L5PO&_k!@mXfC{%m>cjMGl-G|nbhL)C$dc{mDJd{e- zZoYa>twE2yzG$u2L+Z`hs{NFT_F9wQM2KKQmy!4Uxp+)Ac4&k3p@*#D->eO^Vt$cX zq^*8zAq=TF^za}odEX}7VQu4?&^7-or1?rn^M~BLtjf-KdBHB`u#UVG@j||`WF_0D zEWXNYq{cSZHYdOYO-30ABovtErpnDKGI3!4>@!Eb8cTj3YZF4s!?@n{G`%vyeo$8iAV~gY6 z7WpKPKVWG&KQq%5C6`W&gYhjte_!s&lN)X)`!;LoR*wU5x6+EQ2K?2sD%1TLBWEQg zwI22^boYjU^(VfYH&Lj_q$JwyogRq@2_S~3T+?p1#P8)VT`P@4AvZDfTwGjJzy!ES zBWBNMyn3_uB@a{9$97#ME~WFNNeo7cE9jnYjQ=hAIiNHSTUsaRUuK5jW1(x6U0ti( z9^mTn1%|*IBul%l??=qcZ3SG$$(|oY5rTHo@35=C&mCYzN5}A>rvEJqyG$kPE|9LZ zp2jHasFv68uhrHWBRjK`1bReKoFzy5ou;WNDfHl28}DrW)M`W{$F$hN2o4C)gaCnn=rqm9}P(dB4$jD_I@jvi$k1=iIx>csDZnH!&_lkF8%b zcc??}tkSrrD_)Z=ZWh@{rSxEFz3P<2b)MVV5C3FDu^8|nRQ7wzYU4HTB=FsV$=N@= zJd|6tU+4B)`;H{WW6?21PIt7EeH~KsQZ1NZ{ZdmybNw9#7*H=xR11=jkj$L69O4od zgvQ6D#~!Nl;;VKGl%V0K(QsQtdnQE2M!r{lw$+!JkaO2Gyie?xpk9>|F0F{mPXIya zKv^}`8UYWW!qyjKLlg^{UcNy)?YCR*x>{O@Z@3y9s4GiJy*3AmB)It!hcw&S+4)MP zN?+*^qaiV**_{9=|gy1&odK}>a^?HX!OA>4^U+m!Do&S zC=urKxk531${Q~!o0H=+c$A~eX1-L;^CNcS6*B;y2nW~uOS@3t;NYt%iHV8p@G{hn zV)pbT_c#hr4*E96Cp*$iq&)4T$*dxk3hsJ7_FZXutmtqf?0SezCLM)OuMJmWogAE> ztgXIj&hFL!muN+Al`TZ=9a3{wE3MNCc21iR@+T+XgX!FRc#CD1fxUoM0KtMK-S>Gg$?|z$vFfaRD zLpylBSP?pDJdYES3y?6HPy&7LrSU8!l5j+Aj00f@5_RAdVH{9 z3oC9O3Re}-{~p7o^WC5$+-B^{9#vO$lCaaKUt(0psps;KAD;jM;zLc1=;a$62OHE% zaNu?Xqv!eV6p5ZB;Ps8wBNDNZkqzmYnU3JO&xD4Ahwq2I+!pesr`bEh#xsSg#WiCf*!_hi@#!SN?)0I8%ChdSbKDUp^`VfIYWFM@QR(TY6%n!88Xs zo>`$r1>lZ>8}aN8#t-Utuf{Ra`Z_LKq6mhofl{7}y$tK%us9CBn?mB7TLT?~u|mvF zp{$}_Rbi3_JIfth_11MBdkCBB%Fx~QCL)R1AR_wiFv@$cL&C%7fel-E`8h_v(7T6+ zAy5$XMydP;iLlJ?L}S&fhlJDu@>YCQmEcg652gY~R}5a`;1FQ^R47&QZ0H*pDBc8r z((%-XZ|(!6=Q`SE32qC(CrJxlFqg+kl1HyRrul*(Xo@fD-UhKtSDwH>GD`41f(V z8wmca((3BummNH|wh=(vyv4^y3boxw9v;GOqIyxbJk3`cSKrOFRK5uuM9gyZ3f^et z1;GQ5v6mFu2zoJL>W27ZBqkOu*f%nA2Iwbtb2~?uPy(4Wpz@-36isirMarcEg%%qu z_=vAxe+@L73IZy=MKhQ!zwaw$d9KjG#VJ09Yv;bxC8z|p-7;Xqj0Tgw7sOtNhLtxo z#{L)+G19;EMpYIkj2)zS@878Z_6-LLUF__?I9Kfbt46&M}rF%dmMRo%;$1l^6k_Ld9mIf}lkH@V-*i(s39S4RZ z$9~PB!>RNM{KId-@e15R=Rh@^_e`W$0eAOIS=kR8$s6D_s?2aJ>OsLUIH)5(%=x6urrGjF)Qd-~$#F0?cXpck)1RgeEG;XpfOET4 zp89QZaXJ_T{;t8Hqw3D1J@yMAGjCT;k{S)ZvFF3q{&`>tOmDHb0`VwrQL}w_Q(5{1 zXG}#%v(ciHFpLw!j5s=Ab3CHunny=Rx51(TlZ=e)9{_%~vXSg;6bc4SImgPZ-D$C! zv@FkuDlr%R@q_*XL9%vp%(mXy14!GEpFSNbjnsL^@-?iyVb??o!{|-j7eNwmH-vpKkOj~!52RBE)ZI1l&N8{j* zcBWM(d@Y)qxGw;y{^-`_quB^NbgMSjR*}_)g`K}^YXnJ(!}(b{Ww*M{I`;#M73oH9 zP?C{ha&alSd3rwJjP*C91Q%2WR#qH{JZ_mj-T|GxxMdfv9DE@ObwLn3Q)vAh6sGpLce39pD(jnw` zHz!=D3KtYpd?x10r)at;IPb3>ZM6<(DkPZJ`J4%}v9rIAkG~3Y^fE@qJHq^D^KB^0 zSv9qXdOk;Uxo~9X>ea^g{2B4SAiQb5i-OPfU}cyHd>y3E{jup|&g#Gp_amD02q1UM zZN`Fr{gUOzAE>Te8LmY<54gi;>=wFd-}+U|i;F{)9F>=M7pzB#80@lA=K>niFDci5 z{(J@p>7;~%7Xg>img?d9kHPz1$5&C)nKPNe^kgsk$SqA^*_1V0L50uUB*wXEMEOUS zk@zViF<#&hqB6e)vxw(;-?HzPSYAYT%&D8jUq!+`@wg)&fc8ml%8M6dcr&W)^E0>4 zU_%S>4yCx!$92D8ArAgq6 zy)B3cQovpfF9@s4iC~DA71hqqHuxJkouN;J&jI{k2JG>;>k3;jurQsAN=v039C%)a zk#h1(_k-=Ofw8f_dTMG?%3MW>1_yUS*IxLBX_q}f35;+T|TYy4O>`Z$)fHJW1~t zf$dbx+sn&3y zx0*9kd@M(5ECvKWloby;X5O8Bm3#bGqA1OTXC%qj*Ov|!@8fV9#>{Fog=tH;lQz)Gg3w68Zvt^=RUCFRl5%CcK9 z+RC(xTs(z{E&{t&FXG3KTZ>Nr!9DybvKTl#{qf^~!M^{TOr&@805)pRbD$n%z*i|B z$Aby(y3Ihe*aA=H>Adnu@LVV1_SiLdS{Wh$Xx*>&b{>n;Q7oi9X<&&Eh(nrL152=# zqz9#KPv zPy|vA*)TZ4G(yRFdg@E_f4#^^6q3YX!JNAeU=Q!Ju@Yx9%Ep{ z7ScUfaQG7BgsimTjS4xpXk1Pldx<0BrL0oF@bnEdOGf8lSK|RNeP=v>$J&Z*y>1E4#gCoDT zqJAl4T+;>iRqq!N-(rQysJdEyud1R_Q&V%E8YX`SsF>^zg^0EPSUy^C(LjHYE4V0g z!1*yaI0yicRZbfP;_k^lDX@gSX?{14vt!q0v>_4W)_YJ38YiK_&VWrA+xa zP2;kE`-$&-Hw2)G)_d8@i^d$q#?It!NHF^BOnlRFc?$#!@QA&0#TQQHN)If| z2@~HtD$`7NHm{@0Z{c69s)kO07cnOHfN^z8dwL~k8{woHaPGl`)4{GIXZ-&?7Elz zRn)xeGhV1*U}pAadD#-~1KD(yUvmz!jMw3mH0uADHIHA`RF6f4oDF-KImeaG5Wz9| zelGYCeTBOl$0uI1aD_*YFrZ;x*mXts<$!&oN1bmg`A2mQLXWnNzj|7PsN{Yp!B1DgE!85(Q^yNwey#6wgjuiClgm-&$yA)W zcRF0Q@F#HeD;AQge-e0EJcezS_3qs~5jAr-&*6|xYefXi;>S!@n7GvVqu<4gQZFpC zPbM{8sQ{36Yxm?N9awI{VFZDhtb#%_2tEAmawM6~v>){ad(Fk-kS`aNoh+?I+uOSw zUYpZ?)g#tH<>i7o>RI9>=w{NAXhhT5zD!oga6yW&!>p_m+#v_G@fY!lA$Ef@_fLI$NqoByF+pCDhw&O>_lvwGYl=gctiaVe`#sL~aA%Z{2A{ z4oTt-2U2ioKE2D%j>UcZmyxD~$*4$ds*oFXZ9$2*QRkC~ys#0P^&^yJ*Qf z^&Dw=dHnhAB<+}}IH71vMZxId!@@fXCbW-D>+hWu8z8DCeo-NzYU2u3#(RahZ`9Su zwoa<+$jSHQ{)a!9D!6+_gDF zN}0I5fn7mrysf=mn#03^d-3rh-}f&xEu9Bvu8pqHK6-xmd%G)cgCnitK4wEs1NzOm z?X;Tw9C0tiA%SX~q5h=$mYR?KmI*2r?X-AuZut*fh>1ZwsnXmy%cNw2(#zl)Le zYDBeNVIhl)%X^GZy)T|(=mBueAaqH{uWJHL5X2dMsL;1Pc%jg}HRJ11t10F)Gy^gX za#{J)rq+yRBh9(BHC^f3B_vY6QdmNH?(7J)lcK(7p8Zd)?I;#Dox>75oWl4Ul1yt@ zQaB6>fB97c1s2wQ|4$XYb;Z+=t6cw8h(fk_QrMk>BZ0UZ5{{KJ(=bzEF5XH@Y&TAc z*7}#IYeL9W{tUgZ+nvOvq!riQ=Uxfkxg)@kQUE=EK-0SQQEqM*NF+L=>=)k9yo-(U zl}i`CsCi|afO=#vTH>>9CW_~-tZFJ zp_fmYEMt|Z*%jC09Nmm+0@1q0JzHvD*}A%}&CMarII9*H-C?u%9PX8Qo3XIR4)v~f zyOie#g29Ti)}165m1KiXUo{sHl7*-`vAk_eVD)iRY z5v5#wi&|+DIM%L}jR(klt99j^c^Z*>>^H^MF8YJm=sp5o2;)r{DY`lYKmuMq-a}TBKtBhd-*@eTVI(R!x$awG>&Tc$ zr}kFca8YZ4**bYhbM5z=T#R$)Nep)mqQsMU=g;}?TKSlDC{@^Yc?8r27&bkATw7&i z!3S#ZMZa!zcgxAE*A+p<1P;yzHwrh?dfe?_aE0Ih?z$6rkzl#3B&{ChmP46Q{m{ux16!A2U~c*W0P7GP-!Ls^&!Ut(RrDj_Kjn4g(SzqY8GYt0e8%GZdN7vp zQbeRWVxcQxLDcd$t38mn+zkwFZa|3qsx^W><)}+=Dm1$7CB4bZm#g3B8}JAT>)IA} zymRmPCTL=~;sabBfi%Jw@Rg3heN{wNILyg;hR?WxG%FgNl5!#JJ2qrp5gYr$69loe zG#Mn!VSi^Q>ge!r6U1U5v1jMx)WWM`P1bp9dqT(-Ez3xy{OnoepHP?6qU!3CN2$*! zTZ(c8QQY`DmzBCZ(e3nTI^IL*Kbx9nav*7`BB!8mgo=*7+Vkh~KFRvTA6~Wo-Hv{G z_-Y`6jOGpYg}Q-eZ-{ z4(LnbMVsE`a{W?;C49ELY<%NRlx)?FQ0tLCJd>vhs`9Xyc+1Mlcz`YnT4foa(&ERGA;eBg zL)7T{H~cz7KhmAJ+SG|TI-O_UVap8-vpFoy3X?bvbz4)mFLjdUQ&C-iF*m!taOxGp z6|y=dW7PX%;iqmbW$)Qs9jf=JVX}+j%M>5M+sQL8@=Zj>zEp}eQPgcs>tHjES9)+{ zq@{DCZh%z3>ZK{;^=?<>7jd$7y-$B!TiX}*6mN0{ojTFY+iCX02%F<#5Wy?jOeG36 zQ&TF{`eQlm-43o?S+>$cd|I|mN| zNdb%<9;X0qC~APiy&Yikau8Zx|>onBiD0~v((-o1O>P#_fP zT-bR-MoRiqW2`{r(3$a|1X2M>!_25{wXXoWBHT7Zvqq-_l@?BETmk zoOA$26g@=VZtm_|u^gJ$5pqgO^O>ckHZE4y2B;UIvnVFI@d*mLX6qH$ZvT#h-FpZ? zbH_}Kj0XSrO6af>IW281ndD>kQCn; zbPw=7ohoe68z@=xd1R}v5R}cPONb^b8`}>EOy9u5aVjbMcB=1m)Xua^%|oa)B;$7a zi!*<@GnTU~JRBbd7|GRML5c79)b|?yAire00tc#1hDbGxuFVwLc7)bEwYNw$sRhIb5$i z&*h~~9-i`T-$0p za(@=Ytgnrr%Hc7#a{D{lvHizro9-TpF4 z;Sy1=7JM<(a}%==mDsycmC}#??4H(NIPzKW1(T(C^*i6OORJ1Sn`uoLrV$@!S}*Q7 zHky-rP`|l3_O$MVb1J@54SzsvJHd8*tadL3nVtV4&A&`7Sn@zwIh)gQf$Ao)WK;@Q zr$(L5dT(BWLIjbx9UnD5U0+9xvsLaJbIc|u>Y`Uk+HY>~GUDc_50dIsd@jHzkZv8; zW8ZPH?~_<5lZex#BH4L!z>>9L@)->_e-6bbPwXX}79-U#VHctRgkGM!oZPngEap9g zi;Ju0jfp0d17u$0LR|mu-8)LbS2{jW{`BXnQdCrQfj@Du&hp{YZ|X`Ayhcfh!@|M> zXyQ-u%pm78+`muB6Nmrs4dGpwaP)%$DM8)aqmz@T0aAveP=oXWR*v0F3&G*>F@zl` z)MW=R?CU@jzXgPE1Q2$=c;nI-a-#-j6`t9?(dpWo51$WE=VC7OF(Z27rNIc(@ z5^*^#(b|d)uA)CdpS-M(S5#J}f*cnn4tynIQqqsfpFUACl83y1|K1N+s(`kJhzA5^ z90+t+Sy?5YJtLm<+UW{~=}j!b!QLNDO;4eqy)jzn?MX^T*4WoqxZcs&cqx#X_kF>< zTtXn+veJvXP4_+DA|WStnTI1iA0jf4?cw1}PYCosD2$?R-bL;bGzAf`w{>>X^oRa? zyYct0y#!e1|LpE2ba!``m6Q8XVlmJU>ZjHWSH-JEi902j=$5 zh!-)RA8STELkf?hCkZi8cH;T%x?HPwm&cvCH=ugiPdip`wmzw#USdHV{~<9@jliUS zbl9-}bmXDbZNx){JDNYysAGt}O8i&bE(&!KdnF`O!TThrHt~hiQah7N*KlSOQm0Wk z5Ii|2sjoj}1tOE9v$J!czdt%u#zSRp!)nb0BxFh(1RnYDvB5n6!?utFRf4Lt=Y2i5 zdSs!&&pboPOoHWFO7XP>)f!4PmiflM885_I=S@gqEHggsd60HQ^4aE5c3{S8O-*=& z62-Z;wmGfud78}QFx^5vsy_CZnV(xJY}Pi19-bnp4<8jISGhat^$a}E@~+pZHa-2! zpe#P2zaCPNLt$^QF`sY?H;L0rg>QP6lJc;7wS=!PX>rjKSeZ3D**x z&SZnfC}2PfL16rRW2HLiTU{r0a&q`%BO@#g%8Z`ekzyMxLYlYj?Q-BNf5p>fV~CwJ z_)#mh;45r$a?X6N9Y`VaO*)o}KSW7yg;2bJ#`M6RI8{@D1owd#c~tS58h2n?T zzf$iJ=RMCAek!KYc8Nd!%`;mK_K9lE(a%^rC7PR9zzn3lKidlIVox41Vn5HK1%${k{xPCA>r!1{ouEsB@~y5Gc{NoRrkEt$*wlm$>uep0 zb4dgS3Wz^7=k+a+awafQvkpR#)n(V#)+W4p^JaW<@_eey9&R?vLJjL8(@b(QG6oI~ ze9OHw&Uu~X1YqVsN3evs`tqPbx`vHYqdh>74?@UCaEAv z?eFg|{wcgI_3&XI_^!a*f&Z|Ru}VNdKw^dcOb~lY&tnKmU>P_G(`v+EMzjJKPa2?; z(|~1;j3lNJa`|-KVSS>A6goT7^!R<;#ADZQ1_e36~^)+;K;Q3<_Y>Pv4 znkSaO;hN*#laANp0yYmD?cMC);O%Zzpc*QVY8Kn08@SEMnROR+zYYDmlvG$&VSQ4E zguS)W>k)h(^Mqb?FG3>f4$iIxdND@^GlP@;T1@IX9RY{q-;LMJGAC==PtPhGR>Chn zFws{P=p2n~@gfuso#{uX5qX+ZpJNm2g?9scOS3HnulL(D7F$I4l0N{+KLDIf!|5d^ zYs~v@g(W2=t=em=Zy%jDDqu}1VU2NqA{)KILEf#7ryIDa=)vr95W=xOnl+Q%GnA`K zLpk1VbNbaaK;NtGP{emd*H&JDbCZy^5N&fgIKA&zCnE0{FRoRac8s(^^=g}i zAdGVBz5d;}jk6kynd28Jt8Jszo&(AaqNpL=gq>UF5?eoU%^e&SvO8j((d*8uN(R0@ zu?l03VvlG&nMfxVr6c;T;Ra!=EtpfWEE^ip3j>x4=gIviqut^409fyoD7=? z-@k7FJ@F%-U^IyF-o3&x2=1!aPUoqKK7I`K5$?q)p+;6Ivx|$vvZ)1~&V~!Pst?C( zyXk#)x<0u4{X01&^Z4oMDcuD9hlB*`8lMT_dLMtRJ)Ofw?6Frp3ByUpvs(QA&S9ChlC zNsju|HE&9$p-!&pET#wDOK^a^uCJGnXC~=R6hen;z#kCtnNFkQrEs!l8&R(yT6`Q@yeaIIbsM0+`$ zE>lRU)r*O`%i#B53LygNk}l#6kkDa2NnO{fY)MXoApY?=poWv6vZL9}jSsouch7@Y zb~M<~%>Wo%)@Zq0-D+}Bjv)`*+~1FZf?f46B*cMXWE!T>Rz!?5y|C~Gs<%>^0}mKI zoIgLQ1=e2E0j&|zjw*Ar3h(;16ua!(}yxLSnyK2Y|+7`rKNN39v)ZW8h--P z`X3a~;9GnoEnNx0^qjMQl~nsNJ(WOKqx+$F;LCVU<4;Sfh$H zZEjra`_NN}@O_&!2>1B2wj;+6hnG~bpN@;1HlU+e-Vx~ucsC5+u>7iBcHZm!`)%rQ zu_Ilsv+{kqOP$5ZxHcd;KeRkb;ZC9#_792QxKQiA?{UcXTHD#L(ZILuVHKv`ADRkWy@iURic`varQ7K?##oGo zlar=;P7MCaIpJ(vM$j1Yst)LTN5)1?^}jIu^=nRkdR zXB&RTqu8a(oOPZTY_^l*?w&~9sl(pk=&co%)j07!RfnH_W2u?ttdflH5C0sW@Q#d? zTcN)p;=)FebX2wI)~`d8M1wsI)W$dRujSWrx*1H>(G9(v_dc;X0pe{c1Roq7Lwi0F zTk&CVV29F)QH=?_$~~y5cy?>6bZ^h3sN8lKtM)kiswuDSU%@F3bcOZn#n22whm4If%_6jPslE-JbX zv3zdFH{F6!uB_)*lN7OmRJ7<+<)T0;NlQyZW9eD^85x%)z(W6R$qx_cO@(Y(Syz{! zR4WXs-*#4IBSwWcp%p3(noMXhub^4mAU1RS{QTc)<0N664!T14;SP5Q3key}DkfU! zj6(-=voIO|Fls>~*g%NiJ%aWA13dWe*-nabo(nX|xj~SS7!J5w z9=mDDa)81OuZhH%^yO&_mb{vvl1sl1|IS8$i)&x&b5@o9?c3r5gk((j1s^WPl}}x! zq!bjFnI3Fxn3$O0{EywlC+6@LGGHr6MqalzlV8%ZiNp_mArUY}OZ2GGm<7cw90MDh z7xqS2wEnOY8yg$%$f#n*NTvR9IX$#r7!@(MvMAL8Xdlqig}_YJB%#lo=2*0j^^dSH zPXV&)!umGksU`K~f>=xCT+w69`wc(!wdg0Swg0S-t`t%6TKbN~|9ww;NFw9f{c<+% zwac2u#^2T7C;D8Zp}eyypG)iGkhMn{tu^j>_|^3%+VlBMg4n@7anBG?wF^>LtK%|^ z$%Gf4y$Nm-t*8luh@_&@{qLB9#E+A7MQ(%=|9g3PteD4*d+S9R6<2&07d4(fdPIMF zX1={U`D|{n@qOCElU>>d5CKLH9ljMBNT#eyQy3c$1P9Xvl@QuQe5@A4cBJ{>R&(r` zux|RdB;1wDbn5jIc^<>0>7bzNEqz)cA&xIEY&$CTyQzLYV;S4`IQl#L&X#7R{Gyi~ zxmTZvlmCn&MPuhS*$Zd-ZjB*-kV2d9-LrmUF|fQJBG23eO~nl4ArSW6BoA4sgKkcU z{oH6;Z52%o4H<%igQusbQ4mnUsr0u!njO9e^d|1Np`jS{eg|EdJOqe#p^@y^{#tD^ zXTIgs*mE{AD04PJ882}xy%Xtt-@AfXa}-a!y=KzBv#@eD2JJV0X@xwV^Z1NcRHoRD zmb_}C&?ogXA?q4(fnmCZEw|0Ry+FBiDab)=-k?LXHuMG=6lw(gzLnQ%n@#Cf6=}H` z(z76;`hJko>T2%jt%tYXpRP}5pLuLg=iD{Qy?NQj09s3`O4c((O>M9GUv}97w3y*R zjj*xl4G{w|PA*jmKRf%1sidT2>nL3z@Rg5rKxqA3_DQ?O&E5i1VcirTM_VTo%qu#T z4wzJ7STwB<7_T!hF=29ayq>wwjqeYA{LG%;;s2BIP^7G~7|3Ym(5cwe0kXl4n!@4BFy-xpv%UPo6>-f$`BDqcn>XP;KH|gc6#c8T71mK(4`tzPoKDLWtUz1owfc! z*!qYA>?0CB2T@nkD{o;PyrPwfj`35nlc?dfq4BAvgXo2ak%i^25)9W0#}L{r9{Ql)54Ve$+aAwQfv0o7m2HV%0r$l zto2L3RhE~WKgiv6JFRM)*@FAP=f!ieGm|dQ{;0Up`{Djtc`{mBRO$tKVUVJN4nMs2 zlK)VA_wZvrNSP=^5^mxYI69szv*)+Bw?EU;3WhZQ77vfg^QG1C!mPbr7uVsAul@g^ z{|*7-Up5=`aCn_{34S4Y^2Cu-zw+Oo#52u=rkSnj_4V-2pKn5wRvL&8&^cV;dB9nB zaqfxZCK{vlFQwOi@R^_5)WwaU2aZ>-SZO*2KVyqVChu@^t}o5ZphvYmANEx9jQ_sx ziHekElvPv=dd^lmpphZZTz#7u#{(R4F`;4Y0n}5Aii)604K1>lwd#X)UHFCr0s|o- zLIc%bQFTR2RaNyDw>&#Fbpn#Kyt(_x!Xm5rCC}yl9t~CeSFlI!ozHH$UA{i7C25nn zG{ZVLAm9oJ)B12A3aiy4($*fU;+$#`#uykFkZ}8V!U;FlL@~fN$m>tH@$&WS2_XRU z+HPaf6cQ4eK|9TOelD?}FCrSeyp|ldwp7cB%gDgUfXl@Ad6$h?673Ef&RZPTFK<;I zW!;h`v6jVNQb~`Myn^`2a#;lI7A<)fdz;PsAd#DRlpho%B{~upMp&w&;&{uuYRx7O zCJ)Z{c4(i<$q}}+wA9hSbZ~|1;z%*eAmn7Nqs(U?K3s?PK?-Q(g}wt>Sy=;qs;L>pc#BlO$WTc-e1L6B9#_o&^xd7soONmb9*LpC$+gW^X$% z|8q?*P6`~J_?a+Ph4K7=6mitzCY#BhHCx%nfVW|bVZ-v=U z@voNmu?b1PIXXNFWMTpao%z;JAqdKun3y6YKo5fSo0XqRSN@6FL79zfu4e7=Kv;r+ zmqS`r8i^|AM}j%k*VqYj1qMGgK~x= zZSNK0g?1&!^n>Taf7$cZk~g`##IXO9Ho}ZoI85uQ}i42m`zx zw3>!dg=M5Z!~6;qy>`&i*Orh_%6mWNpvP2&g_)VE+G)v%;Ir~;XK43~SXqU@N2A{7 zY{nf2bd4X`YB>!>xp%ItSd6oBa+*R^=H=}T+@jPz^Y5>a31O^;Fp0DW@kWjPmZjJb zTM3>(N6ssw!ip9rg76swZpuiIB?AI5V2e$IGD83{C>~ID$Qd{1TSv$XqM`;UpeNg& zpO^RKp}|DFVrI+U^6F|Rghs;p6?T8|{2RG1QYNqceq_!<^Py=fzD*&CM|nKEl;Muh zUtz@aq`!(76{+c_V>LI$aPE-HB)GVyxrScD@EPay&g*}fx9f&$(vm_sB}V#MIgfwY zE+C1#j{SRF^@%gNgE=qJx-_ZW81s$(ag;obk*})r+9Tv-Z|0uyusq^@aX3VNmoJIk zaWC%u%3!u@h-ba+XPP|B@0Mbe=-4%{9k2Bvzd8p#A7g%={EnTMU~EmmBK=Un<%j14 zHlbH^qUaX2p?!IsYqAS#VC>zwh7FTQsrGM4IiVNAu2_Yp^H5nQ*G$tYR(z|g zv(wV6VK4uyDqFM_l#6)sU`j6>l65H6yoMHKXmXr!8r*DdX)yxrD_Sny!3O>4e19PY zIln0?Iz9<~eJ(C8&_Y9JZDW)AoDE=<=o*@ueqUIjEmo(>=}8-6KVD8C`e_ydH!MfT z9Z$INU;q1O^uXB-OIcbvaB+8OAROj9mVsbNdYJ@6Jq^>Nw(dc+v@)sq`JpkS@$gia z890=10-mu3=oPdEld*F{M@;MMBS?Y6EN}9YT;?Qj--pV~q>SEFaJn`RU72=v8XA8_ z5SXdCuc57dTTqY!s@IolI|P+bKm$Du-t+soxOZS|uCA`8R{PpRofrmg?V**KLOcm8 zK7+oT1+)yvP(ZGLl~o?4%NGch+5&vRlIE5Hr6hC zwM^-FiWpMGaJZ9Zq#_&S@~8e^ha-da<;m{)V;|Jlnv99Feu$_v7LyV z8@jr1Ap&?M-fF*B?O@>s2iFNUCU#Yw*k7@P&COxE?OEm3air|tvdLKF-8jKuOb0}y zurluv2WdxuQEJ5>1Fx656v5I%4Zl3FlkP;d{@GnWpi+G9=riK;)0E55DtjQ4J=25# zz%pNj;(33`&(DMQ>gVNLr{moNro5!4)sDb}RR( z0dAm_Z^jMP`&o|2f;kFiD|@^OLHYm^sR3(tH_6Y2+9ZE$*ZAZQw~96fJI0r~lX8I@ zUk`%jcaD>Qx$OBg2tS5b7^38i6`q($NlBai@2q}f`qNQ&66Vf}>9d3Sv2vuob99sn z1{NUHh>#FYB1|v~`B>pWlU z%*#{!GGz0he&;(KEi46ayS3S0lWAY5)B@cn&{&DOxkHiptk}cki7;W65;p#?w@tr) z24~b|PdZuYf`fpB6#yL&JU;-P1FTUZdf`;fFX|5F78aU=ZC}*6UI6nW6c~M7#k;b) z8Yd(q1Pe5T)k}rO&GCRzSC`rh$%CsA$p-RT1a=Hnd3kvTW-}wd#8NCNH8nCoe;Akb zhw?bgbcR2PEMJNo$;gGb*x1H=$9zQBqtC z-4;A0`fI#gw6(QUzkQ>?A)q2cF>wl+-6v~N}^{V_FtA2KF{XRcmu_H!^Fa9Qs zrAjwH%c>I^zDB|R?B!2=uFb)-OwFa(e0`G-1=Ef0YgErStGAHpi>U+2t*wEZr{jNy zL`N00cy3P_+GyDG#JKaZCq3bKQ*@Q$oEDJcu8pxG_tyT0es4%iO0nXIS#kfwHtCQ> zfJp^E)YyCIc4Mt_&zG%;FE{fMp4M#BpWi3S$5J@B1%6AoXuF90ayK9B&MQuTLHUKt zJTrMgm?V;tTNg8@PUP1>=5?OLiHK`@Lh6q6-&l$1jUJqTdn@2Doqhzm!!M2ZLdQwa z?c4iCo*itA-}CbEDc{}+I82%TU_h}VlbQ#zj9=fY+`MD^Gd9_Ic!p<%k({)<+HTr~ z$sKDjgI?HWneg=N3{HE>c02f_Kvi|=FR<)Q#zM0nZoNy*$*ZCiQB&re*<;> zTBshpdA-FOrnwrM_2%a0AUUSy)$h}?7SQ{pu=17hdEd}tZM0@CEiG-;vyIWBP`Hl( zix~fq*VH5fTQT7OLxL{gK@kcm*9?% z{8^o|stG3{Y{ms%aoTg?iX;6C5cPn*SK8Ez`{qrD@2#y@i16{f6B**Oq<;#4Xo&vW zwYk|@fAA3mWvwM}3{2mIj>>VlE3OBmqkeQ!qJVb4HrENuS`+(Vz6CeCUBD~7C79^V zb4|z|(Qk)Bi91AQZsAY5HLXbz4Y0UStXho~vqNPIhWK##Qr+6UnL%dP^?_^D%3Fdn zMSj`u%%!znn0UTMIpCH#OmRlxmBNrySD}v5bfH`98Q0G@RBJVQ2KHWeIe1*0+H;}u z464VjLs`UnE5EWs@g@u1&aWJf{D4r*{U;pI)0r&i`}#6OAW^ZRuVmSzUSRnt3`G zPtNS4%Qg*UCfs?A$6usOfNRSW9d=TqpqlwN-G(*WL#?~i>1to^b(e_{lP#!xLb9ZL ziB&F|eM2ildnIf$zkYW7CE`<-;kYDUwTyLaO)zY_uE8p-@<2B6aO0;6Wv*uaM*V4m zLl>AWI1&!1CNwtXgTa&Jei0QF1)?p0qzR|N?)8IZor~>*gL<&2B@79Y4kM-IPdB#+n-^PJTSFu= z9oGf?ek?gNMlRGr9@OqSprKGzq?3@6N>kvsqQz&efZ}V=d-~b0#cw4gut^smk2W=> zJ1B8t$0@oSW~wD=L8Z3-YWiGJ8I%>akqZ*Vg@vnH`udX$C|IalpVf0*1e6MLEiu+C zovSJN!qyF}2ydI8Zv3M9pE3!1FD?&OPxu`0Lq>wj5%quel2U@H@s zFl&D+eQ8aCI|O|HmWh|PXLHV;7)|zEsdo#A}w9?W$7rB9wtLnj z^-31sJbRTms3kL}uxxKXbs#L#BkuA$(Y*U~JpS%G72XPbJiHqI z*reli816FPe#>kE6d8=Eg#o7euOf#nEX-R$r)vx_h*#FK-}b=_-7`O5qqX^_r*+P) z?tcTZp6E|bKC5zH=in0(dH`%0EE`8~5;YADsv{n#yc>yN(VO|(RBFpAak9bxNJ5E=(ANvRw*hdMv5r449=}%lDNX$BTq!9M zWHQ;n+ux74e-B{7McA72>WxK0fY^|v1RV-TFy!Sd+rVl(`8-2?!L1yCiTIQ!4VqO27cX!g}2)=2K+(DJnGuw3pTNZASwFc6ys!H?Ie?#m2|MF0XT=`N`3&43>;3^Wlnts#kLT{)bN1iZaww}vcFp`PY{w% zA=i(R>KAB3XpSCv80)q#Iy-L zA^z9=rP9=Yd9_aZKKzpO^aWq26Iuf}N-MZZy%pTu|1OJ&QC>l^p0LGu7ZNVWpaoOm z6ZAgJWRO!u-2XV?3CXP|1X$H+ez8y`RZ5EH|`zJF|p_DqVLMY+1N@(7Iv zawFbmt%-wv$wR4j`0i@y8KxDM|1zgNrqU_~N*Lc$o5sU+kifnm!kPe4sjKbVbC#*- zMfs<%#&CB&H<&pBne&~wiZ@aLk11;3EmYj~rEdNAe4({3{Rsf`Xf-?+-8LhawTe1hUA4|s*c_^?xs0XDt+!YmdaP{yoJlSg-8}nk73&?fj z(Nmbj8llp@;wOX1$k0!Ftt7eOhnNI48jXI8i77P(&F4Clflrk>s>{m{`bI+Q7`$#Q zF9&^E?3z5p`Eu2=$FOb~F*@`D+h&0dFmGuvk(`#nqwX~* z@&i{_SO0+FycNLu=o?`op^~~XL3G9QAVIqciZG-uE;iO97XWBUiB{Fvp_SX&Px@>R z@c$wFRM;ey7-+y+S~p{B7H$9e=2_ZJsN)VL*%zNCHy*vP-Q3)q!ee%YxD(MIOMe&_ zosWotAKZ9|n|Apx=4#eKc57IH|5=T@Ti=gnN{vWmrlC3%ToEP$MGR1AHm?zlSLwIH z7Z`M0tm5ORa<#Td`1wn&vrs|2NJncp^|2#;T260*9PV(ORfKaIXV<{G+qZ{o0a8-E zghck_y88O`jl~D!sJ`kN7+47R+U-Jaa&uPzdJ7Ps8fbQ-L5up8(f``Mlc4QzmuQ9E$=XD@ z-MYG}Zq8JV#hG2w;~e|xah21hz=CH~y(yw&Mz>m)7Z*R>F>^(81eJg!5v`bKq3jp+ zAK>W@2N>Rul#0p%Y}zbi)gHVW1_nejFTG%Yy?WRAlRGdmKM|Dg2n_+GKc~k(TqA6L zm@|>yND)qoB}Vv5ge-NIj`}Q@`}4%Zo4D_8%o^{9H?T!6)Fc~g$ZK&@B*gzIB%~Ff zK?zR76Iu-(-TaZJZ69sM(mBJ(@Iw|*+#^;3(vZ#vjDDCx<=3+l7MGTo`TorBF0Q?jwgExCAmB0u_E0=Y z`tw5O2@73C9o)yM);5B2s&5~DT7&kqPA3UT0gOJ5_$r^QlBzlv>LHt&Wq|)*mf%6c zZ@mle2n(a8I|qvGn}~7a{95R}8j7qOHT3UPh#Q|y5dg1T<1>jrYK@=dts>m zwCMWSUj^^t5AedOU_OW8Z67u#${$!+aneB%1sxeH=tV)E55@p|N-{FUqIX4 z1^%ygZ`&Ag_TxpvqL3^2WNkwwr#g7JLyiw^#tSb`Pq9=^c}}Wu+hh!BAPJHJgMzZh z$Hpk}t;Xa0Ny5^#$eJj(pHje;^gPAEgs*Ld!p-TYO=&9U4+`7I8&5ELR0Nc2Ra7Yg zgC;(GeOg_Xe^$2F*l0I^i9Vh{f*zJWB6+6|X%Q4)l4l#xLBR<(a0JGB;Uy_+A-EEHqk{AHt2#mwXB8)5i`C8Z^!HQr}R*T48X?>T0-4427_56H`7qAR%&d;AlY zj!v7yTBI#j2143ppM&3-aDt3&ZNp)J+oh!x1pOJ%1j2+u%{*~J3H@bXi#!>U=!n@nsKWd#MLJS4>+1v|8Fz&xE zg8hFL*kAUDnr?cTLMjwkki*|x6CJ+I#bwh29+Au0aU5}ogx|3`Irm+-PvWa41Kk=y zF$-CADWwP#hsP=tJH60efT;F}R?(wc`V{=W=coTy>n%`d4 zpTWv=7tx0PpdJuk*nlsg4p`|y5Vr*C5m*clODwuScgFHIPfc9|a2C>-03i(Vu07ZB z;!U+~w205*P^G{!oYBOZ@jFP0A_;`(2Uv!Lu&2pDaT*cRvAVSMRO;vZ-Hc_;dbz>? z@cLbavcM(5xmKSiwuoD_6&V@v*iLY$vjz|n4t~ennC6y|RL5K9pliyB!m17;Ae?*x z@=)=$pDL15mCw(-Cwd_dVuxe$l4q}I(<}qRo>g4@Y#s2Fx`p}1pf-e*!#WB{$6Dv@ zcrC>=>Ihcxzn7Tt-?g9D4*}0^#1CO9^L|Y58&*jn0w_92%(5YQh%VkUp)KesEDl0B zRYL|5SF28Fc;@Ek2PA}q4tQ@a7JvH0vp~(eZ00}P(v!59ySnP|_u@Er6tv~RB#>jG zeNkf`ezyAjZ2pf17Z$9=b5Uicv^K8@i|2L z8f&eXm9j0DryQLN%PXAkR6)r(X~mhu6~mQeOyeW-@`;%l8?=t9nws$R#0_dp)yf?z zZfTJP+#P-acD?{z9Ts7;z9-f7&f+aJZADyZHMMu?ZkGJtmA_84wW0sO8LCkuOr#On2Q}i{+KHsK7OEPE*45#R~NE8ngMSG&55#hvDvEt zlGiwI4H*q#-vsOT%nNwh7%Z-=tSI3I6cq46JRG=SRpwzwg&diU{q>Op3rkDJl@o2) z8n;>2XG|Mq+(O$^{J;p%ln!|kKYCSF2XDlWv%tYLms>N*6K{XBnYDT@Eg)ClP>6~ z@~EJG?abM-9$0jT$d!BqN;ds(HbeM70N3K~Y_Jjl-vK5lrNBwLy|>o_LPoUNhrn`T zKYH}212z5emT}bf*S`}WOPK@I4OoWXdQeM-K*9c6pC?6D^?j)#$HXqnkAQy* z4dX+FZ|#OR3x9Qg1kA!q=h55)Smb=Dw_#Yd2AEpcskrLK|{U$0W_1NrM9usUp2Q7)wo6B{L9g^mq`FoQBEbdM;JuiyXd77LL-N8 zYWr8sHkUcLD_lELjcHUMmya_>9wZa6R4+r@xv8EI{~VxS0pWl-zocX*5>FYL#RM@^ z7)Hlh3iac)HcRp=1MiC2idqzH?Kw(Q&eq7Fl)P2q{U#^0&=(%*7zTi0`oNFc16yT2 zPz#^FeS4o{Pe*~8to9&=ZJMyNI2MgN6z_LiTh@)r$$Y3rFd*`Pp_&DRd)TN$gS5x* zYums3fyv(`5?Me;GivZh%L>~m2Z5?mT$~Oh=|0RffxHg55tl+bA7Qu_ zaT`R#eMf5m112dsc@PAuXTXy$hLq7DlVHpX1^LDk{3F?zd@+b8Yz$cVvh?Gdh~ zc+)J$M+~iZ(L0MFF16356rQimup*7@>>`Q>)P9UlPeW?j==WuWA7HALp6;0^0=i$@ zdm0Vw%$b>E`FG!PJWpP-2PuQCu2=6L5lY!q19 zsDVEW5>TRs%dGNj73L%oA)BQm!5{*F(;V>Ip%|lk>9m5(n2>vc{8)JO zTSdvffLz>rk0dKI^9WK>U@vW$oTTUB;Q`TcNJa)L7@C6|>d*e>L#v$<8yh6$;IgZ7pSF4-Om12raB(E8T9gRjsw`zhaDug%2OaE!??cLIs z4p`gGO40rIqLg0IDPdz#RW&zA4(jVxGGUG~n?Wj^nzLcnwK`~&pjv>v`BTX27NSg#cd|L>e`L*wz0guX6 zFgSsD$n)DVKcr#F^2TI84W+qP^Q8&czkx;^BcKrwR)Rp3s-tXi%wLIwXMg{TmAq zlbzC|UPyOp0dUgK2YTnrJQ&!w6hObmn|#;B;t=i3P@# zYXSKqepy1F+kVKcs=KJ>)`n#rWX3mE4TU}x==3wdf}u&JCN8H+hAJ$6y9RMdS;|Ra zuqci__+beKI^ee5vb#WU*-DnIAEdxLsW>v61vqh4)RJO@9M(Ah= z+oSJuuA}&}@DKU$BIBQFf-s5jg-qH@8(D8Z;25_b(#x}H!%UdllT%a1a94t`tma_a z=iM8LV_XyoBO|ebg2I!p&uSt3=9!%Ut<$f;8`nCEe}a(CqXIVR0a%oJ@MD$;`SV}A z>BV?}+acofH*cjqiWRh)m$d>6VaU@h4Wl6p4N_v)fj1G;Eg%w4UP_V^P9inq}75<)WMEJW3~9q(DAwKXZt}uW$Bb2 zSInJnh5qvPIQje`c{fklwoV z{nL}Q$Fg$w4Zi!p7&cVvBKd1XcNGeZ}e(F9z49%869+@QW= zf>g}lxA(iRfo$k|HYG+B}DJ0`i9vvMW!`qvIYBL}9l$tE(+Ls!^boNsNwf5$2 zX37Ny&9R9RH|d0p1M83#e>B5;1ta0IEJPL-=mBwY!siDwH#L>w=B4`g`WY7%?nIOt z?Qe`-S(r&ei^#&SHx!TjGhos(`7p4@|GrLPuuNKZztwv_!VIS1+0F79=;h#X19U$y zhC|N}=U%v$S~dMsP-CK|jxaJZs-!)B2}%(uCK7sIwwG8q2;d{3z(vwJS5ETYxl`Ks zog|;&e`11;h&Mt$S+fMF)Y)~4z46-k?qqAAxM%8WAMNHR-v`8nnL%mt!VMk|PvB8N zb7@dQk%*Ohy9D3DoA^*B`nMKv=v!4>AKS%DzSE zlBo*omZ21GU7B^y-)R>trCDv&ZfU%b^vej<6EToCGonsvu=ZFqNzogmGx?6(6go4W zOq9~`xgNWcjTfXu*oIRPnhF$uIry#G|AII?13Bqdlu~UY%25Y2S~*09)NRgWaE!FM z*>Gpa83*+#YbCwn+dT5jw1pA{?z>;8RVW=^Y{9Za$*HPuZd#yL!9n{E3QlD=T=N<| zPKsrL7CJ`8dJl+6Gll;3`4dix8$)Z#mA*%RjsX(A4V8+hanlb{^lxF|=cQLrm~Piz zRjeACqsHM+I!~y2#dYdLct#$;#)wox+rEIujD++yUyts1Es_*ztfOgli{_;w2mhZb z;(wo)K0B5wEc`>khb@@<9L|EF8PduywaJ=7?&zbu6z(H1_noBiD9bQZ@&;Hs{8fDY zT`}%W?~>u~nUP^;_sZ|@v!Oe91bAcV^Yta@-TBfUAASpw*SgtcQ_hNp%8J^b{)C8l zKWjv{ik!dS7c7DD&n+@K!`m!*w3hdD3pKm2u=`v}s^KHlx0}5^Jq9DQ&13D}7tzT| z|Ap7{DAe7J9F=z~f4J})2qoU!fsa#nrJn=H}$-WKgGxcIx+ zgZFF{l<;P7%CIg(EB)gc?1KOyzw8OFqr&~ z=d<&3sUz;jQfn(oRe#tcQ&Cyz`z3?@g-EqQ;{hqtoyOO=I7k!e;&RMPRZ1vtN?HwF zBJ}?WxwTSH_HT9;Jw^GW`#oYSK4Y7&O0OBVDfT9v4I1WSmRJz}mdWX#?x@mfWNyMm zW*`;ySbEx1h2;*TovH1Lo~GJqpHbf#ZA#=7tEQ~Pa|tVAsuCR{7Ul>Ca(+D>Asho8!o%w zzJuSjl~tv?2P&l60o}JKF$tstP}&qJLHiL^b?nDKf&;smNUS0@6r1MNlCW+_dBi;| zq@@tP*{u9prP1rj7U^O*noQVqhm&lJvl)&seYwCq@?#6%iY{97^4zel>>5;7c!-FU z9$?MAMj0D1Y+q%0?nRe0?kOSi{i^ZRVp@#q@wX?|N)stndO})0{E^k=&pVa1RAypt zG_Ae$T^ZD4?2aGFRe9j0hr056XLOi)%iH@H5j35q9iOU=V{coHtJydtnkmq6e5`1h zUl;ot>CP%!km6OO3S(pK?z-taWMj@}D{wAP5R9RjuRT%spdjEwB2S7SpZaXwnNR%1 z_Rr((QT4wXDE$n+?)in22QzfcWcZ)`r4zVOSxClR6s8yRO96VkYZTk2`Xcl3YLaLM zqcUjEQACe1eHQp1w|jWN$**RL?c{}k3j!{hRP-F#+QGM z)!a2#yuiQpYj*A`&qtw!r{!}0JlDrC(ytw6a=^HUHZ>c{OEqEYX&DfMiBWZFSf{7&+b_`Dfzqno!HTA!@vD8uIns6J^|lxWBBX z?|h1@Sp7jE|CKu=;Nv5o7k`U1-&`}F{L`6iy<>ftuX-GIWSB>afpHZ@8h;ngIMJ7Z2=?1vRE^%5i;IE5^p6!KEh{T4ewmlH zrH&o-Ub_}VGwA0C)(661jC?|@&);uqtM%QF;;aMi>w$Fwl_`T_k!N+JEkP>DHitJznS zQY_@d(TshWm|Go4u@KJpxi^x4cY7tH_XB~329|ddg)`5GRufWAwCt+95o9q|%kQ*N z+hRGfUmibg_jrfe1q7zoOkqSQ3VF|gYq{Hjm zcW)^}8Re^o-Ba@Sfc2ItNFQ0jy&{_UgQp<>a+3;Lg)-VU#UzWTFG5L}?+|Dyo z=RWy|Nm5juYhT#oZpL_EtG{`~n~T557->@6jYIn_j9c90c@jO@#f(rt5q`fAGSAeL<`@|BAU}^yB%qFYpYjA6e&?|#&$0W zEuzTdy5{}ioiV^5UyD6vCRd{n=S3J?;=%uEW<0WKbOGVK(e>%s!>e6-M@F;TLWL%} zoLv9pN>OHx1AC>{@c8=mwA&W@LJCvCGRLZ3WY|pi{b|zj1}?+nIXDX6lBSMd=`8l% zE%RHhAub%D{ow0(vmq_(zOi+8!c=ML9K*K=O z>qoN6i!YFe#^x=V-PN9^T>`sT5`>7*+SSGG;%xS68*~8$fALV+*4B0lfc-8Z+K4F_ zb{5`f1WwK)vR8}F_wRq72g}g6dcA3tB#|MSs3E58hipyYBafzIE>52PWbM5Is?b8< z(@_mTruOG({1aZq)78^c=6SY1;(@;X`3&|>t%@yBu=YszxnVYLS}lpc(~N+ z*eJxDOKx#niRwM-Dkh%r`k-O8qxXJZ&6k$e96v&(^{#)(*Rm_p8ak^&_R~mZtxx^c zKKJh*%Y4pB~ke;RE5-Z}IC> z_^gXdi`W<_m$?6gYqWD0W7!UqJ#re+MpF_JzIdIk`sg*+Kcf8nB83Yl_LM~_TJl); z1ME&RHL(t~EN@peafLlsLmL`Hu8xm>8@R!bNx8&cXh;4spn#~c>DAXX^_<7*&M}9A zG z_`3X5x?f3uv@p*08^BimfO3n;CsZoHB1Y8K^xPA3ob@j&I`|x?ex82)g#sHHfZjEa6+XzaGy*yvonX?T z_C?(U>{G(Rh_Ju84v4cLC;}6(%voXR!Ys7?a?m0FxbWx%JhGojgj#g;^%aj!PVQy@ z3^1kv?HoKx&UYN3m14)iPgNKXzecACo`H|Y1PO0$=q@s{7uxXcWm~>BkE^6B--?Jk znX^*#seaQozeRMQ^st!-WwjaMWZLW}Zg&%r)!y4xLYe*Eo#y2se-t1w`MNnOE-FQZ zFyPG#w_Lt^U)b&p1s_QylDdCTyVzzR%9a)$)s@GP(jL`)bcW+vB+*KWu1Da6no}h1 znYyhl(xE7;Qe0TPf9m-|yF@z3K&a#`$@`WRS$4d@=_Yj9r;*=Y6m5L@oPhr&Xd+w6 z8#(JRbGjiUYOGB#Q&%P@v_k29Ft#Zdl&NvMnc!v~dTYOj>D9>Aq0oV>yu7Ykw6j@v z!t&Je9hwu1q&a#23Dj&$)o-Plq`#tOH|DpxN9c-;9#tvY^Sy=2<@L@WKcyGL?@zz0 zOm$8^zM&iMF5|Dp&H_6aPf35ZP>WQ2S zHr8K4lg#&m#1tr(I1-Vo1axu4FQp$1>e_kfb04;Ez_Ng3h5B58bS{U>o`Fu5Av^%6 zZc~_6qg~<14C*{V`$?Rk+bX8^fg$G zSj?EDq@=6QU=ACzIE0>{GWxCFS#m*=H;4vkZkgcj_e+F0y$vUc&tDY8#YtftlBn1Lm}w-a7*ghxR3FTPcc4d4bog^zc!^MUaH)@ z*RnskfVXyd2JDO}3>&s3>LdHS&uwZqwcTPygt`26#b~1t^Nq5dm>8~cjuv5lV}(|< zcypk>7-MD4>%!kPbhF&FiVw>F7MG+bUu-W)Blo6nktc}y|1@jX_9kYxrcUFxeUqN( zx*>k7CugE7ohc=iLOx#6C4xwN4NL#!V5y7t;bx+wN8j{QpJ!c@)pK+G+s>~VINd&+ zNH=R2<(4s&YoK+~$*1UQc&+-jto7H~Km9sj`sUu(;d_>tfueipouqhjPZB|DKuPgF zkPmUjign0dk(+r)xw;x!nPTN?(zwU$Hvv^s!C!*!<$A0Vn4@^T2immK+E;MSu@6 z8kB8OwN^4O@d4`W27KfNM046pdTwVRL%%_hT;aXXCFn3s2;}y-2_C@GOu?hP+J&gp7@%)q!^ zj_3LNdnz1o64+&mZq$I=v=JD&LN);kMqTX&m{S3u6bc2=17Nth918=wc;Afk5-d$( zDQ)@2A*(+BTbQY{(^Yp`@bDrKh13AA^)d#=z0FCjF9-L7D|pX$=G9Rjg@35n^H7>h zO?%2<>>>uT*m~um9|w$W>UqxFZw|BG$(@&xsj}utdU?%sr!%d6qjVx!|8~V@``5f7 z(QmIXG0QB{{qYLi?HwtN+lLp-3dG6_whPk5UaB9<RQ8cw#esyxbQtvs+M%m1f|iW}`$zxtSqo?XGLQVDefltsv)V@a+U29DjaHk{(>Y z<({k>38eeu?W)R%+K}WdZAzwM3^rv7yJf6^xa)lH9QgRB8K1t3imGpoGGdpTW^5+2f<2KhZ_|w zZP@Ng2C3IB8b05`?Y|Lepto*=8AV6fXXu!kwH%cwm2Vke+3UM}O3hP|Tb|6EX;+CH zM2F3Pk4Rp}=PLf*5??sJ{^|w$H788szmpNfp6f%u8AkVVk77}`a#Doy+oMKSR%4e{wGDl)$e?{kv(BU@K|_wD$zW(g|>44L1(Oj9jt|7TFz)IO9THbX$e#^QUe zS=J-X>R^FSVIk!u>JYu2>8C)c6rjE)x2RboLzxnSljZm+OXlKT;#!$;TfwdzO9y8F z>V3)Ake|Kl9~yrAAPZIvTn)SZY<@(psN=o^%4!Jz!_;_~JFYd?$~rS@#6tcQ|wIj`-f=#n5*8qhgxV>!7I1f zFj>mNY^HScsf+IVNOvsC&W@57TFH@i8l4u}KOf5KPUv-}pb~Gly0wS}YEz9*%gf6| zxG2NB-WxjMG@?0-@t3ArhT12*jh=w7zx0JA(1^mjIpx`Y!IDJ~tu9q(3 zL43LQ0Bw{KUh?X2qyi_U%;=2yo`l5Phx^)n1sT4>?GiV!UW-se>H?~vKkWOk5?u`< z?#s7)vi1Cw$lKoF8S`MoEz_IYC1*cACn2o;A2|+4l*)lCh@TQ=Lb59z{RCQ zC|t7i$n$S{XO=ekS>jVkqQ9jN21_yZtD>%YtQ~wxHMll4w_;qRiXpZ|OyjV=Q*Fx)sRyJaZ|D z5r!*i>FM(ZFcSL0eRJFngo;%|Falxe{CD-%0P6AM#|?lS#AMWmz^lIzFz#KpsNObX|lS@wssW75*h}Wv+}r$lkh5{kea7niT4#UiMH( zUSb-gWZF02__51RGAah%9V&=vx?t>naa=Bj)9Xr#E!eEiZ?t(BHEpuB+?~o>6(V{= zS$=6aw#d@djVsfPmT~-W+Ob6LTP3YFYc4%}nv9dhP56Iss;Q@8*dvVb4p9YOUGHE2ZZF=)0#b zg?~}+^^JELZ(L`2qE*LlTc?9f~qi4F0hI6@24`&Zt5TKq*a@38+_hbAnF#_MWrBBN5M;vJPT!7^Z~pQqqju zX6aZ`M=cO0U6s8qx^p-|)jkUo*A65wyQ+Uh|6Q)L>OnJ}?Vi1g;mMR&$s4aH?2K$X z#Iuk&=KmK^zM+v&S~2@ujKJK2HIDr~Ue8RpY5@UiKY+XnSS_tooS1!vtO$ zAY6_5f_EHUU0e2j4leT{kC5FJ7;Oi6m8@TRl!~+!L7Jw^XVy*vUjPz2h+J5J6&74u zD-L}73;0Y|iXis*52DE}|r<;=Y zZIdctHPiRP=0!g{bk9lC3Y3MtBfG`!-hM>zW52VH}Tvg=@$B{Mq$8H`<68apT%i zJ^JW@J*~~YRaT>c0#qmpXBo4bT*W1v1FI{Ovdp&^V(;CaeOYY&K^UD5Ia-**3C|8q zjY~0I*TWm5wA=omX`MYOR>Rpx!cQz_`8_ixGT^BM!uv50nmM-P z9WSe(7CZ}TbY}_<>4*Gp12M4KoL%L&c$UujgA&!aEB5++#%dcQLcvdXPmQ7#9D5vm zd;?uh`b0`Uw?;Cp`QjKLpr)>9>{&j&6NCf;>PiH$YVBrxFv*YU_H9y3=|1jG2@2s^URMgOLVQ>YWWc|AXc#+==`MYa~+P6(b(MPIOZuf>VBkO zF7qo+!POaD`x$GYwq2IcC4}wK20yCk)tg@oceTi`#y7P;H~#C}N+ulB9k}%K_O@8B zmLNe-469JDwxz?b@Nz=G@$$E|9;d#8vdD*p7>Y+`v|W?SmUpz4N;7t|l`~T+t}Rcu zW%|YsP0BEp<6a;5sn9DVTO#GaAm+1_)~rU#j_&EGuj741Ai>b0$^XOoW8|E5mrjoK zhTGcH`ivv@#g%M{@JF17x9`^GEk`FtR>Sau_=8)eizU@~STm`~XB@aj_o_#zPB)Qi zOYxKgMpoK}$J^Gm50rI ziwb0_pg!_}@j$_j!*EqG4JP@I5HH>_*6pnq6v`mG`1jS|A~^N=ZkJX{KiU;M%4y1f z57$R=`C%7PF5$5=cAdY7-uchB`QPVNb~9zHSSU#T`y%}C@1d?TtG@o9mH<9sR0!Yn zKd&HmrvJPUCMFtg2-NsLuYlO3uuP3A{A?N61utLQEWNy{8Z(z~`rj8XOU3>Fenn&W zsYliS{({yRF2>r#Df54h_J95ou=28Spd$4K>}P>l@Bx8+%>~!*|Kpwgzus4)5gzXU zUf2r%c}r5W_1Nfl-e6Yf5hsPd=BW7Re@BD^FJB~DJRSF7-o7xY!Gw$PpR@F&?{wy; z?-!DI-2eR?$^7XEGCHY2BSv(gBX?4-^h8Q(_HJM19gBzT^LW_fHS^8_&wtUPTZT3} zSIQ2yTA9?v~# zva*^MuwQ_3R7(}29QaUg{uD4ka3<+Fd!_`xP2vS44fhf zY>&J(Pl-{3`$BC_){y^Tw=Mz&#aJv`N1WSco73bU(8Mg1ZvIS{3+Dt--{T$ItN6dj z+|kARyM)c#B1t^!;DKk}?}ji(@fRycBq&K+f%pv6sAZ+*pw0fRehWDqPdAyRAASoAvPgj8KdHuh8t<>?EGhRYHCWWU_?tl9K3ca8?rwIu2EBasJEjL z5MV}Goiie*Y4gHF;M6z7o%N#Omf?uj0ktG9jMv)R*(v&Bd3A~G>Q%h>ETtq7w?AL1 zl(=H5E>r1HiV&r@W4(%ojfJJ7r>Em5Pb$m%VFd%tpXKEVcW=tTul-yEvcO7teWp{y zyvQ!cg@eK07Y5)0}P$eQluT$ho8oBRPEf^%1qn<+v zvc9-Nmlfr83>+fu6Nq?ciSke9d`yA$j!jyX0-KmYQQIaz$0k|AZ(M|lDYf|Rl2_e; z**?fzl$GAGiDw|`>644jUP~7)^am~BD@Q-5JBwEbGQ-VreQe~NY% zr&`kj2>05t^Wq*cEqeHax?wtRe!P-6CymPS-ya3ba%pPtCWs$2b~#E8jpzfW-)jlO z8PZ|gE{rN6(f;t&*NI-M;6x4Vqoiz)Sj5GzL59xX%fY-xI_`gg3M#*lJe?$ux*3Qt zeWQ)A7ztN)0p&$?d+YpEIF;`_)o2aY+Qu&kod3y0xsyh`z~HJ~vr$b9rh9Qd5s~Bh z&JQ!w_sV^HZ|||8Mk&xx376w_Vbmivs9EuUjTS99e=xs(dEu-IPY0ce>0X_-WHAnt zF2Cb$6S4oy4p+^~7F3*(n27Z3-ixh<06{773tQo;iY5UUmS;NHH+yAARyh1*_<4AU zKu+ceY40*={)!wyvMd4WT%{XpN+fSPmtaO68<_c)!qY$7NLE)@>-pvjN9r-q(2R0P zNKEI0bQ2aN7YFXVJLN+EFVJkdQ^g9nlF2h(pz4emXSYSPtC6T%sr}?3iXk`5#zJwD zU?|oqL=7>4N37ao%bkal^W(*CuVn92kW$k}+%Ks?d#8*dp{B+`MP9kf@kKoh#zF+F z9LYaXe#iFkT?-=~Phb4Q)#BeK<4lZ)$H(V4bJ({{aBV}*?Q~05R~MEdT(s<^SSUpm z8H7m61X=PXk>l$J!Z(p$nG;kG)YN1SoZ` z7`Hp`2>l_{d)yQC7Txo)TSA9fj&%Z(X-#y+dT4KTo}D0%zl5P-nuk2`F5L`rA)c4F zQRq1LtiQ3$?mZ*IxBl`W8$NLU%R{j@dhdoN4_4W&{OFxf$q(t5z+5AsHtCMPV+9!k zCoq|fK&Va9yfEHp?Cv%_GT#=Fo0(b~=|mcvYo9MN_zopiRb8zz4SN2ka)>dtRG}j( zLM#4GP}4M;4&jw)#d};)gX&DfUmm?5%f!yI`DOC!X)rwa#_8MqQ zE!#4iR9(oZ>RPZVJr?ZUEpVpC31qUjG&6JkI-0M}by8+O<;~IN)VV&e=*3|4r(tC) z&@Nk_!q5%Pc#44A*HMTWAhp@?i3`CGw$vi$CMHfA+{hn z8CkG!U;+acR0Lv&7lhZtQ;*7DHyx7Rd*T01oAtLbZ58597yzlU_H7a^3wx*BfejOW zq6)F=`&pIL8AYW$O0XiVAd7Q8XXX*xyC0mMLso}Bl|p40Gz!2}I#2@%Bh;612`7g; zrkAa&goFgRq=u%1O06|Vp0z=U(E0e=1u^7Y45Oi>>YB}j#iMb(Z&qn5KJ> zAbfu~MP7t9{}^T@ObV?zRij`tGa4%%`Y7r_Ri|4u>OS~!ry8`4ql;h}3yo!;c@$-4 zy4U?rG%8itT~dN}>MA=s-r;PJ*X77o5csngZadX|!wzqo5serQdx5iXNBNeZ)!RcJS;>!?c{4JVH3)+Z_DzvzWE1!l1 zss10Lz5=SsZEJg@q#&V4D@dt;bf-uNNJy8`9U>{|O9;{^2udpoNOv~~2nYyBcSv_i z`ptpxhp^r4h{+NlVkLch`5@Ymj}_bED@Tmmq*l; zQkK9L_61l_!f4e9iU%OQ$rc#YrEqGK%82!~cd4-?kmc|gefwg)jrX11cR>GcRR&n4 zHvSwBm=~H*_|bx#nqs3+%)RFrb;5tO_$7yM%Jj}(fu>noC4o1jw7fj1&+2ubmGsl6 zG!QQbK7LfB%rhPr@AUG5p0eZg?nP0hNfKj%#7ljnyh3|A;9IU28LZuKgNz&ZYKfaq z?##^2=I>*6B))qW8`gAw`hc-W(n*h9Phd~IPUxjzn+A{zQ0c)7Cbmr>*l180ps@@HH%OeX1P|b`Eb{w$W~p&;K~SemfTU3++RO7N zd6Haw%|VxV^pYg;0mO%rk}?`EH%G1KjSNeFO(s%*dh%^V@m8oxmyZ6e^K6oM9Z|%! zyK{7ty@&VY(C2DM)D=$Kp%rD|xvTo`cJ6|cW!A(k8dG06wxEh())^g!E1|CLrxB9D)y_nZ zdJQapT0GB7PryJhFn;v(V9ThYl_nq@OW?N;1*g|LX*!qqq@ov+K!#AQPMQw>p%7{e z32OWx7W|MtXj21v$X0;|aJ;CVqX z>YfKv=#PSq^k4;z>;C|JIlaBT;c@_bK*z2+QMzj_J2rbL2SH7@vfF}F7?8(+)JLSj?{Ce}qoKQOTZB$1fiP#%ntWsZ3LMcV53@Nb6jv zEjdWaKHbgU74aKmjRv1j*wj|KZBRjZiPM`md&}OH8K7Td|5>-i=8q=TGR) zc#}|D=KAq-v0i2X1F72~r}&MkIVI*7rFhr6Xd^`>5#kvS&`4^5UGbo7{_6FnOTM7M zfQpX;R0hzi02keAF#85%qCmThgA#z9EG7Hq=%r8uyr91*vPc0w2O57 zK{W+-{ndAcgpT*HBTsHi(>K>az6(=p;HSIp7@vOmX3@$;=Xw{olVDMjGRjrDdoWz+!gFDjvhKOa81Cf2V(G=#{T zjFnMTq>fYfBWdZG=0F6$(q-iui?G6F-{j<*(A$In(1&031fN%lV`Ct**DhV{o?)3y zY#n4*>BE^>Dc!ij>)ICz{#(C2VNP1V7_m+x9tlxK>S(Z3`IuLt&27gN()plV7VQX&bhGa6VCh{`zXhR-;BpF;#uru z{xDVCM$YH2nDO%mZ;g}HcD(L+*YS3AG2SMevzM7+I z{0XhC0lV_X-d-ZWkOYtaCMccJy%h^@}fVR*~#b@*S=TA0(>cAfkwx?I% z)uA1j2YN(p3SBS zo`AcCzJAv*a<^b+$awe}s1z&HC-=~E_Z=oCc`&IPE47~QbbKl*Nt^?3Ls7bTgQk>O zPSXIwJ0e^ZpjU2dLv1P6JEUM&d7w}`5s7;8Rh!vBnOal9LOoCa&XpRpxNX2%k zGVlJql`jK4f(ScR%Nwtj2Qj~><$hV*Vr0UQl;?cjT*JvlbA^wJ_`!ac+s#5Y5yKM{KEq&^+Wj%)h&RzEQOA<11;)RbY& z5hv1*SJZM}>1V0{t?C`&QosZ*p&)L`4< zAn#2E-z{xL}f5s<8urq5Jyw=ld@*q(ej%_jz%i986j@nQPV z^?{L@IbpREaYl`l+f#$Plp}^kq&t>_(p02o&Y{FRtYu zma}HB+z|NQSvb?QJJSdh%$>rG!3yMVqzjlmjusTyXv+%F>AQa9Ht%FZ>D%1Bv&vIb zEi=HYF`OAj7c4t8bofJ(`O34OO@Td%7kJ&L6?JO*IC@1E62&8!UaTU%^NGLzCe2q~ zFXB4#^z{6z`sPCL4Mspvvk|?~Cwb!c6qrnsHH68tYvicN%bPNf`Yj?)*UUSS)9gJX zrGJ~ei);#phJqym|AH%16$oRWPOoxnj{WSR%McOJlYa zukVM4hbtW%t41^SSuLeLVU2Ysp4trgF?g(%G7~Plugn5Pge9SvC0sMGD%+eTaLi_A zu*d7535V7Q9_ZzXDjx7yLSTMiNld4@)|CBe>I+V4cDI+8*F5-#Kq^K%N5k1A4i%#C zjd}c-4$P8Kf;=sKlBVpv2SSlyLcp<{241H7J2`1ME2u`8k4n}=<~=>^tst0iTp0WX z#=&BP9&#Ok+0qIPY(ZEny_9>y#iYM~g6Zx;huMo4+sFi%gD4&C@6$jpU!KVxa{%mo z4Aj)|rnq88vA+j8bCV@jW&Lz}R?3)k7XP&|MG7D~e0;GWseBD9ZaLfDX0vwG)FeQI-CU(0aXzT96 zk`e|m2{1VU?+}H1p)8%(6lo`pgC zS|Fd`7ZMu#OE%AYvb198f*WM=R*myhe&q%SYYJq2gF&JGWHkqAP#Q4maJ*#x1S^#^5J&g4%)(tp0pnNvkRp<0rd_HpbJEYM_!GHWy zruA4|tt_E8_!Ax-J^kDfK!6D6^9ez`-aR`7g-}Wqm~CeT2jgx6hXw!vaB^UTrCTuA zWHnh7j@WHM6khW6l;2*9C^v`mDJm;!nR#uibp1lmHA2 z=JA=CVTp6QsnJ$^@)7obo>-fN6p_vJH^Z69cw3BTn>l6|kpeZ;b3CQ!C1Tl=l^?qdw}`q>;3(GzpLl)*c&@I5CJx%{IdUc ztQ=h#yM9XcOEr?lJ-YN_Pg`-ZrNNSLdK2Apr=Y{^HA-bmv8j$fl0yTc1Li60n=g}0NKD;{YsoUYa$2JHTgPO5-?6!L$PrK z=XIO!NgCoK3PK!2bOi#L;S&)J~OQl@GyW;y#rE6nW5Z| zfgcry>rZ3#SN6@*)3j_|Caq?O%KP`FFi}8W<(0s>5T@YQx)X*kxs53L#lLV9$b654BK3J-Zo)!cqp~WD1AwplK5`nPlLWL<-H5C%)ttdCPY(}GcGNTNG0=P} z4VV3J9{d4jM%K;u|2?ewHn76Zj!wXWAZH7o?IxTJV2RyZ1*?U~TVkClz;diMC@?fI zG?gKiUKu!gazB*oh5oT;lUO=G#)nTWC~R93I|I=FwQ-o`(}y zrKG}-h`8Y7R?~O-& z$B#N0w3FU$#aV-I@($V=y0^EzK0_&W!~)+g_qP85@-Pt>3NKD$S=t2=9pM9Nlol!+ zrGQbXar~in*Z#&h2Qj8`+hb|`|Jx$MDz@8_SLgB*vXNO!So*=%2BO6+d$M<{oV-Ri z&wMk>D_R~0z1YF~?~3z3o6h5>1X}i6eCN;poCiMq?G(LvA(6UV=|L{#|Wn$?kair(Cl#I2;RuO$x!e zdwy(SoLpI3=xCWzc&k97 zz`M#$O4et%oUzOB!Dw(%C}IA;yyI&GMj+5PiDqm7*uHju`W14Y&wgwlKTAV6gt6m0 z*v{es!^=a-_2J3iza!wJ{JyccBMb|LZh^xxtSiP2q01eGJJ}h*i%He*+sC1!MrmG* zYFwmf{;A2OD*v~K%_@fLMsF(lz+kBEolt_l1E{)L+@ngoN+wq%)$~SPzD4NVK1oUY z-h>^~CxftETj~!#CbOQqW7&4o-L8X(h(?eTKHp(cHVy)vifm9hl!bLe+CW*(kGx;jY)sd#UiuZfghBkyf~lbEFSm z>@S&wZkbqwgo)nM^|;R>G39jm(<;*q5{XN`A+yM|lG0$3XWY4syYCTpVGJEEmv01H z*R7wOouNTkF>ZPfVe|A9&%d&+y5&{Q|HuTM2R2K9pFg2#p9S||2WVF-9N?Vjzc<_; zoLgEVe*p$LL*UDUc1me-q=6JF$Vw)p6%U6m(s;E5K~XSp(ckYbwnRL@_bQ0jq0e*d zPHOLqm(FfQ<~l*jD#PD~y=&6G=&)Ug-@CVBB*mhTl9IyEYO?bHCHZH%HKBWv0Xof^ z`}co9>b0vMV~6(YUJFoK>R}hFBeg4+rxgWeEfTKlBdR1cGz1~i{t$8KS&fDL7}Kcw z;b#hKd;1M-$Spyh6bx^{;BhbHYt9P?B$(L-#K6 z&UGBOd+zRTw|rlzI9L+wI=&yVrE7hZ9+$`;hHs^!(z^v-Chcnno|h$wy^nL!;_y+N z@rqdBHLYZO-822myi({_o1~hMKO?0JwpjM5Qdo=g2-u^}(!UF~nyfD4^R16dzy}4x z1LE&ADN78zRNY4?oie@21FoJuDbjFj5!#4_4-o-H=J4-|Nq z@+J)We+)(-<6PRdgFB!?~rs~Nbt4<1^o)WGOBk@+hD@o=|=g)gmq9{1N zY>M?K22bzP6bUnDR2K5z&k7!K6JeI@E@rDY*cp_Myu)g#UEr?y^WjCez%;m(r9FGG zXaBdimMd<14cH(_uEIAXZ;J3g{?hkT_|;h@Gaui9bA;^PxbwHkg6T@fFV4`P-AiCk zoaW`_eV-uag_IA#>^_8|(0n}GObbc|*y26jgany>kW99=&cmy?OjbEt_N)%(47jJf z0RuC%$IUa3sbZ;v{e8RNX`0)msbCTNeW!)LT_A3 z0^Mg4eA@OWe?AyyT-H%lU&!9REubQG94KIa%Fiv+-XgIQ&_Hwcqf<_+GBwp+wR(_% zx`s?yX626M>(gU`nfP*{%cU+E?fj>dJ1|;B z=oXvFUyqRGiJh2zuaHsqWAQCTx zhP|-3_>$5$zQvwAyg zxtil?+}rg?KvOn;vNAch?U>G6Gu``r4etcvx>Mw6gq=jcMs6?K#F-}w3JD=TDIY%E zF)Xo&fUSwx3oyQd^e|q=Yj_aO2rCXET>#$aS+(=sfw6+T0LNfN9PC4A`BsE0D1Lu$ z9XvP_cs%87)AxgjxrEYsbY+;yY1!FHxXe8?oZQOp&eyr}NAWN(4 zs~cdoH&`2w-zT!c4pBsQQuQ?CaP@*-6JNg*#~T_Mn&P#-e=vG@jd@q?eZEgO(|xlW zwwZO}>sNt!Cc48}@E4M#C^04J0HLEHvc9~F4Y#orkVpD5RcOPh_!L~>6dS_a3UHU0 z&s@neVaKuHwm6PAUYA!+=BUJGa^9Kw=b7Zysv^ zhvX^9*OT4Q#>1#zAV2#7n0K|Fry`6<$x#x=Kg;emJaAyY_t{=Bt|%rfWG<<;`B9cz z^-E@@>)olxDTG;Sv&- z$I3A}{NjC<*W_7-Aj2Nqjz%9c?5BewlCS8yZOBe^r`Aw(A1!q^A6MKpICMKSU5l@` zuMs*Gpbgg^n{eVPCXZe`d|vvLQNYfyQXxh=rb>+^mh}`;c1+-rBSfJc+`!SNd2sLs zY|cP^NB{1d!DDlXwt%qrPib?F#cU7~#6o`6u#y;AXby~%Nqnzht^>zf8RCBnvZtvd zWYIRYdU<4kw0{OiG+BQ-urh$y00pr88V~_^+w*GKOCJjhW@e>?*I;I)GFoK%=!zt< zQ)q8E#9lcFT3I~ff>Rz?1=ngZzIP*!0AU}hGNAB*GfEKbLMLOOM zg@rE^_4E?j`kiE9-2o{uZGh(=Y{6g!E?7|ju+EkZ8%V*e$O-*E1~fW}gr71x8@HgA z??DmHeR>Tn@(H(U_Xyh}Z-&9j)a_z5r{K_aV{CBajHguNjQVZa20_D!C?mGehcd$V z)On%3+qfi2-AD=2#J%EL3LSV&w*S$DAb(zQ2r&UNExoo}TqqP}a`Q4PWr&#)-X`;+ z)*aWQtmc0)kOniiR?x7SIlT55e5!fj^B#jxCt`S?p@_G^tN#KsFEn<{#-`X04@Cjq zb>>>EnW$A>E^k35`P+mAPr3U;KFyK*t0ay<#Kv1jr|?&V(t~SXlI{@wlQvaxQ1mV- zYN?P|pppFXy)D=?Ep>Q0=yfNPT}`0vmnIupe*p<>70Zjd7caLT8ri)$wAS=ET#Gw!5nVp`&1NeLmY0QKkfsZEy9pVp8XB)5Bb||n z3EYCQ{;C*$q~c38z<;;oQBQxa8KKkaQM4e4=a1{+@}l&@aj-2hpF8x$j@tEWA~+=0 zrmXY#6t?Em%b9TL3xmuMu{`-7X2s{@<@V0k!&)J}2$+_T8V@GYx8ab!b&(*ePf7V} zHCK}@Go3p{^l3vqaAcZ%oc>gpgeX;lU7|+p5b(R--`? zoyo^RBi2w!x3gZWxa$5l?pe*w)bhJ0+#%#Qsbj)UuP%$GUh}$IT5dl(^0n1S?koSt zlhzNx4PGOv+D?{NY?Tl6Ds8qN4Sr2VJ;)wheJNl+W~RSVDR&KKIy_U&A_}joOZ(6H zVsU=)B3BbKphE}V*%LLjOOGD47vCg9>7Xu2M+E(O9y?E20ts#$fe&{olGW7J;f=?H zB{ZC^Mmv6x4FK+(2%m})_KP}UrO-6-WL|5vW$>dsi(}Khl#rnf9(yx&M^k`l0X1Un z$Da2@sr5i-^RqCrcyRZVuv#u#Ko%E=av_a75|XhWf~P8|#?g*{N1(nMdsgMt>I$r` z@qzw+&%q3|i+xXLX97f*Rjkx`9u$K?Wgx^e1FEqNtKkcof&B?+CGNwX-T5z21&V+x zW)0Jv?R&mN@w}|V-Q8x`>CP@MDI5ts_nf-s)`&Mx*ciYQgmd$ zefzW5pbs=GJw5R}nfj8F7!YrE;rt9gRy;!Xix5_0R_N!0$k5QSGN_Wu=ujR|P@j76 zVdrR}?Y+?fJcg{SIj&GMOSs|{AyX8*P;$e|TfcuVq<^=pa1#kc%EFW+>t2 zew*=A=hgjQlngj6uXUc+s*R1gK3e?jMad~%$2)1=>)|rpoajLiIA_25q2|)GH-SSf z*aE}`^=qgRR9E6ws7DhI<>8#TtWxY}j*4>MzrRs2=8~)zs3Dtwcp{|zN`j@TupdQZ zzeN-u!Ka6Ki{>;5ID_c~s4X)igWkM3N(EX6NQ6DYjX(ZcUtjksJ5P;>P?`r%cCa;X zgqMSj6`C^#361ph^zLwF%|S;EF2N5B3~pH^1Sw~B@y09i9lm38z+OL+cR0K8a&L+K zmRu;sg~tb+K7l#)-lY24k6b_0@duQV9;@H%W9FSpVTG^$T>Ab@B6Vx?S+O5exWq6? zIv<1%jmbWG6u>AyGCJBcHdgIqym!T!>6-4XPX*s*G(P4eCDDi~hP2o7j2m10WFHqE zF+Y)KtO!e3>gfrS)VPT?lc5Up_5SvDVcv-kl;fSnM29&@rL2T!kwHZO$I|O;T_;0>G;#y`vjB?i+xLIPLqWNi2S-#O%$TG+{Or!a z#3YlWmbD1`B80IP7Lq`LPv;g98Rut87fsUdF7Y=X?K~R=8q6R5fX{Xv@-ZFKrS{`P zM{x6UY|O;Hzp4LL^i=Ba)9}kEX@1rC}aC#*KwJH*_E1 zP#WE1VN% zy+tpMu9TMIS)vPBI~zFM?!)rOO&@AW1zbSRs83osHFf8QvideW(GK z@AL29`~G78oQ*HAB~vGEX7o}`Iyy>?7a_^-Q62(VkR`)fxcS9Fuiu$~f6m_08 zm$;XkdTC2n$nyKyunSoxdL6<-L{dqSqqnAN-$&2FafBOaqnKlV?`;3U^`C)eAQXNy zPzl%~wzgu7clX5~D3tDoHz7h5y)d7mDmGQ%?CFon}c`c1oARGe7# z)5_Yo(4PAdvZhDUe`WGEH)gEFkqQay;+nFI#fnx-$jYj<`8{n{R_j6Aa zK4mWVZKL(^3L+2+NP!peOR(`q>>&nC@}?6s-~-?SZK&7qs?PNJb9VT7!QOlaWX}w| zyrj^^1AXDX1%-u={bK0Su@rD4me-b+-T>Eney%kP&5w_by@7p|3Zl%8HnU*L&4D%= z9k&)>t~*idp{_2TUDzg?UG$WTqH$03r^OysG~+Zb9v-rC{l*Q~%N%$>-022*?-A;4 zOiaK-!om&?Y8QQti^`w9y#?MwP*?tC4X;^dW@Zjkn5*Rs=0O}?J78I~JVuSE&KT@@(AEpWR(%JQx#QFkZSepaB|5@nX9`v@B{l=z${L>UK6DuE{K+q33p7{fB1PU0 zTRjEHd8mYKT#SwmMUWb}@P_D#T4R$PxBtBRc9Qv$KdUG~jkX7=A>D%kUa%Q0^geci z_928>@#9Pl_yXu-2VlUc0_l(t46Fqt9%}uQN&(4`dNES9d%K|#ckgo1SN!rleDf?#<+=F@=6!#+$I|D%kl>W3}D7yyFcKILG*9Bx|3fBZ-*KBYJ_h0e=Zot>{bU#LU5Rsd#4Iz1B;JUV}mbD+M!}dyonVI=Z ze!UcAKvIZ#mfFIA^DHNl!h1eK;3;&-`p3!e0kp30P!Q;UU{4wLY3~v9Q@VV9Gb%-p z`p>$Z<)5{+JFF~hy!nPDYF`I!km4uoKcGd2+Z5nz-##lg+vdL5W(^(O>Tf8{<=f`E z6o_-l%-RzEndNKa4V7>fi`5loNq;&ca|fKPGQPV-Kjy@B6w-^8fT@rIi|fbYuu3F^ z;odM6jD6{^g?Q#at=esiW_oM}=HAxTFt$0O_y?T`k03r}UkUo^Bj77F8*%#13+}HC z6QLGvoWi3G&L2Knii(Qz3JS=TtN60#-P3O!H)4|T3vx78bJXHh7}Usx_G4ymO?#hu zRnO{}m~>1`MZ~QsY$`kM|9<}WLN1!=<^<~_{OZa|4SqZY#^}&xeBf!W+R*2gZ?m(o zJXBRBxg}a1m2~Z@@`c+Cwk|E%N53~y1P{iqjz4c1?`D6l>(2j=ke;m$QI?NBa|c=( zaD9Qk-Uhh1_;b0dVld+B$;!&c0INczWb|z8lVrdv7)B+)vOE+`mEnn3++pil1*#i& z%F-mRzfMMWEi>tqoXHRQr)K0i%>JxB zXuN76MN_#;J@8E>VCb)1#>e~e+05Lg9;pg(=8z>^*$n(Jj zJ9S90D6Cd{p?5zV%Y#ly_J>uHluYaQn2y|t|$T-9?~EQR0CJwH5hx%`*{vFOe+pszCa@<||ePXYcbCc6Pr z8yrT?K`$g!<%9#wt0a&C!mU#AR~EvyAkF2)ix-W4&J8o|4sM!mE(K`N@k-#O#}fMX zJhNf5VSDe!+ppQf=0_Ih{L8TY0r?vWeC z3Lz&(s9uM_$jIM8c6Q?V%{xh7!c3}|B05UdxW>1_3oFSO4#?ik0pWHhaKJ%(@r*JZ zSaRSgp;Kt&mjRHyEja5+;j_FO09xz_2V7ln*R{aoe^FXgWGxQ2q63WTKu-6u46IxlED5-U;YEI1im&b`+IMrWa z$PSi^cF9U_7O(*3;9mf&{&Q`TlWW(cLZ<*7>zkPwBSt2K3B$JwUvBp?WmERO)k5&E zX?RI^^=dj$tzhAl8F`aybHh>a)y&IpRIWJYg_lfo3V#~8pNB*AE>L8Dbcwv5QqCbj zmw1hYoY12&BgOt7Bho`TmHTA*k2ZZr&HNo=bUC@%3*EeMJWn{6n~UGosMS3G(bYrml+bhr#i?4S1RiJ}vJfXoDMW|e_R*HHYkQSH6NZ;r3R=~)F`Xz`t$CYnHkUS`LsT({^ygm zhff?hgKs7$yOa;9)mMIfUF##F5R;so{FEqb1fo*NAbSM@crbEUv8;LhIam8i)F0{i zy&<4sOrkVVcnwb(DmahFMnC<*H%@I#$p_C(FK6XlHRDJ4RisPVxIO>{zTx>;DR^OJ zZ3DIWVY(U?ORPe2US3`-#9;xL`U|dqNSq+Ul>Dv9$t~J@ROPbLzYm*%aM-hchmjJz zjtC)bxXvI79?~;tz%bh#Z~wvWeZ(BIL61v+A9(E%nOFks)>-U*&e!Gg2G^dQo|Gf& zeHG+Xd@CWheAF?Fs>1&E{kTzblTdJsWIUfnlushp@TdxZ#W{>TpYbrt9h)RQ0QY>FJXj7XMX!6 zz1BI!GIjEv*J9i~%bxQ|FIP8q<@<6m&R8gDA|PYj*P!4HkkI!%pAE~_YINV?vmyPg zmBWQxc<1U@5Wc)vSgAq74YcO?ip;tl=09k`Si&sLH5fiHvlmEkQR5eHQf#=V|ZYJ`1;Ko)4nvB23;MU+JQzy zP=^Rm4B^w`>U@Dm&>ZDT?0F{D7bTsfuQzLz~R;&TuW2{df2a;A3Mmx zp9LNQV{`LB=qTn6138o84{l4R762#bhh7!Mxx_h**qr(&4HicjjNdYbP~Ciz;#CeC z=g&}N(jGQj{Fh6BNNNO!hBl*ZVqw*#P!ZR=^aV(c6uef%;F9hO&_fe&;As+=3xlbq zH76)Dz;jXp;uv_o4cb702OY$+1Ms~&L4aB66J+-=?0cmdgXGRURq-rrVxfq@n!K~7 zzJe%=;8lL`v9Dg9ER=m#vM{if3_cl~qC^4~kHUuM-h@;48NLvo6ItfN79G&}qLC*P z5=xZ!f)jV{ikw2Q!Q>eI+3Mvo)dCUQ6c$eZ;*~4&1Fu;w<(yEH-GAR~W%abc=$%~Y zbLc@z>i=DMbwL?$f1;n)r{fRHBQkb^;Oc2Gh~DJl{G#SeJ}TT*fB zw#1?wI7t9yV*5P+1Iu7Qn}Bci03v+2xz)zAHFM^b`0TKt`C_pRc z#`1wD`j?9^;9xWG#6!3RZ9ZThcB$ZKbvGUxBneTJL5`dh1j2BYo&b;!ELA%BYw*(s z$T9Xqy}pSW86Sr+&9FC7)PwsOb^J@@!5b{uA^sNadF{hwjZfV8Y0avKQ682F1S-~$X5mba}u!w|D0F92r4CDX+{>Im@jL$Cb zGXOqY)ZEjvSqD8rbbWn&aAYKCMZW{do~3mV+<1xLFdaTam4Z+2`S>L3b%-drDX}K7`URCMhK%ZqmoFXOs%H+&g2Wjen*|i!9iUsF zeO;UT@KN1 ziq#Gs7c*;Wxpm=HSqH{2!sm%Yb|W=BbWW@I_G2WR*+~k1GGT1S=EK)odo?QKkoQ;W z-m!64{DK`rC?8dKHr&BJ_N&Lv$GhgB>CJ`BW@|*&gLp-L;>O!3dI;B~ff_mr2an|n z0Rg6rYH&nED{M7-AXvM?xb36hB|o}MFfERMa`!cC8Qt9YVQM3Suyp8Ni7`J12M0gl zJCx=*_?3P9Hdjeh04XNF4N;Mo&TDX7E-YHezICSD-fgoc742@%7i+J9J`Xd2S}`d$ z_Fxa%-6bzCkK@V;E5Gp->ra#nn6eCa^QgY6ULNjYlT!;#TEDg~Nd79*MC0gW;OK-i zT%H4TxPnKaccj(sS!H3?MaqDZz1^0~KTfW1qG8sL%h?%m?t+n%4C2nj{sD2t1iVN9 zp$9@RXfZUw<*oyaF?K)F1z(4JXriAq_mhk%-T=6Vfx3!9-#4I1?gM23katW0qiBYn z^%9Dhn!1ZTMB3Gfscq8G@X1fIx9MCCOVo4K`?N`cl2Q_l#{;Ltx7;w?&Pp}DAb&@< zJhG0NI{Obr#Lk)3LoJPKEC?PiR&{>-^4RUS#0w5^qqw_T<$Kr`nv;!7h#gSypmcU` zZecV&Ao=DqRzr4fZtl17@gcx-zI|T|>k`II%S8_fx8+}-;{cRF`>*-Y1%F0koxqx3 z1Wmo}CbVB{zG4y9T+s^YNU1?VJHS*BTy@#m$thYVZt}PfVu;tkSQlaeSNwq80bKU$ ztF}&;K^fSLS5S92rW$0dcd$9B&u#IOf;G+@mic}Fb>DrjkUq+#2#pvMa7H?I_V-=h zcbI*$_Kb*$8BhpKtM>qdNqf*a_yf%hW~r|k87!N~WK9JKEv-w07%I^j>)N7F!}ZdGSdkK$ZscenjRE34(xe_RaG1%o!|pxN45QGnjj&H&3GfChI`<&=x7 z@X8on#UQ8%fG!(AU5rolQ!Sp!$~X{n3gw3$LX!vy3DMU%T#oQ(LD0Ixw~TmDup#b` zo}E4awlZPF4INUMXSMD-b2V@Q{}FTFMiJe5Z|J}h+u8VqIKk_5;iKop6s2ZcCuE|D zO!*v5QUd*_8CY6?5Z6Zy(lG@1DQ8M4D-%ASuI~nV+I51KWte>hm;hh$P5U-iEl5IT z!|U?O`7d&K(<@&kNwCjiWP2mHE-|>de^-myQUtI1<peN? z$3uCTv%E>hi7XKDUjP0+>v~)8$w4CORfj!A>i5Pf9|z+1SkGJA>1T~Isuh(s?hR#; z@qgFtetf4RujZwluFs)2X8OPi=Rz5VY&2s9|C5`&h@+m44ozfKR0Wv5K#yfJ@L39{ zkSz>8JiD>dju$|h-JpMGr7GqSJSceJdHxxgMI6VFv@HVx#ArKDKuG~`Bfft9%h1}v zn{L5^l*gI!Mx!Gmm0(Xj`8(`apfLq6cx4PuPfJjt68LPjv^koEyVTh~7={K{`XlFF z{0}k*9^B)2Nwu3w`WeGfGbTneXVAf6qI6|(A8$U%U_}BIkGJzny!)~>uW#?}lQ>pc z{i!@Q9nYn}MO2CrWFN@#|y?XG8J3D{^P!)l8e z?M{0PlO3nsNZ|;a- zDe@kQ2kSR?PtTzaA@jbQLcTXrYu9$WyZ^3_qJ~PXmqND-@hh*r@^Osn`57kwvR3i~ z#Nl)1mYISLQ;Xkx`?ngd={&U$Q;zMC^Z08DcO;1cM@guh+i|~(u(I-KKOOY3zh)Fx zcSSr^(7~)%f^fR{y&PjKmjnz&SW&$#M|aBO$jBBEW5P^n`eVVncX44321HRX1D;Hs zII*~d1Ys7KfF=H&?X@4^=IRM4F$`%})~R4T$kJ%Lyu1T?3fVt(CWXJIZv06Q0J4fo1CunMP+5J012Wq zv0YVF`>^x0Y7Uu}&XLDPXpUqLfS&&1XWLTxU}X$AgXHHY6!590#DT$u_0J|y9CGbN z2uzKXf<*`1)mwysi1M}(QTkJgF~J%ZR79|2KH@+OYDZvu001lJIz=>)C5h*iCjD4RMSm0eTUAE&b5Ub3t~ zo5WJ2ly~9ojaH|shm-Fu1R`Vu-oGbBTb=;H4wUB!Q2(60 ziR0j~)#(b`5NXpOn-`9bcjDvvd)bvJ-n}FHdd)_0g_w=R=dXjJiVj z{?=e)O8Zt+Je&Kh&~OkfeCC71X9DjE6wwA^XYBWFWx+Kk|UG&#)A#bUY~{9oUo0kTZE$llgtdDoRj!dF zGRfoNQBiJ>b{->Z>28N^(6Y;Q%Qa2Sk1IUp#mY%xzCA{h4^};us-%IS*}CLwZ53eO z0LhZypxH#Ze%(&h*F`PiBH3C zM*;lP2!Uzu>oC)1DCQ5MIpYPY4g@!1#9~Or-kXo+qj3EhyW`iZB$=kVTl$}|nH>gW zDbmKq)n@m6Ja5xO149{kkBXGOb_T;xnGoS{(AX`TD;Au%0oup}~xc=%Z`1-i_RF!#N<4zoJB zXweqV@XCx9^J~Vgm{r3a#|M@MhWmux=HJU6Yb&$qC0C}cmd88rrSiHhCY9k-I9#}# za$tE;D_8<9NRKKNsM0+EVJOSB>(|c{=7dLF{2I!>KM&N(++)To^iGK6VEg$mjnEO% zWX%i<>q>z3t=j`2?9U*TTkyHW04=)NDC znSG6T%Ff|VaxevSw>$6TTp+jj<(IxnF+M(5A9X=7QPE|nheG%DNr7n4kZGfplhG=i!-JHC!hD;}6l~O~>5* z$C*JTF|}4bAKvw3yeMXSd=c9#aeE8KC{qwy+WxB+KB;g*Hg!f@kB0(}_&1NM_nc!s z;Pl!&KW^`+7{*5b1MPj4;t-C?WLt#GwrDS}Vv4&QKCB}N(Jg71AYV_o?#~H*|}@T zig)p60r?|hX|@(lE`VBB0bh&h?mmL=E)gxqX!uPdy9_Sj@w0zVeoyKPifjx}yC}MC z4y2=Ol7lQy8DA5#k!hV72sm@Z{eCnya=zwAo7(#i8R_fWIe$yfxj6FC6_i0jnHnsqyg@DP z?U`7SR$mPc4Fiv^QBazXVnOpB-MfE)Rv~)aYGBgt#}C?GnIY$D0UQ6 z{K_4o@+aIbHZY7Hhc%J+J4!YfL}3xfz!68oMGGf_wrPO0b%F9`1N4H2T)x6sTBd?) zeuZxghr<9^C-bA*845;T5SSUC6SY24YC3xuG9v0MK_${S84euv=elJ!H#E6$ zr)`0#brbeEVi+%)nrI+*w{dohT*tsbYse%z`3_m(ms3y?A%}}=b;11h<8(szM$hNc zzY)FuJ;@szCzxvzd^IHGpqKXW*lhV~(5~sOJLfIIB~N;=T>(y!{Pxa{B-(r(I<}>= z!*K^y&$^57CwIfGtX`Ya(x&o3cy=m)sj1t0djU`WE)}u@B#(xS03UgqoIEK6&MkXQ z0XT>h825k`OB*|XrY~$<@Tc{(-jHDK1T%I}fbV8*xpH)*8~;#dgFzXArD3v8=8I$V z7aS-EyLCAhBGy%yw<;1OdqChj0wxHp@m+W*pnNw2D*{+h^mKHML3F`p(ToDA5Y_x> z@SLh;^sU#8+84~psn_0k4fh&X79e4F`FAc9%CwN&dI=It`OT5xuokWx|vL>g(3_~yR% zzW?tG&+r^|c#iC6J!{Ti#ut=Yx)XX^2?S7$f$}01Ggs3DYFG?{ znCMVxfRJ?pt>IOLiGqe&(2OGJ!@di`6&FwI_Yof`Ql=VQx%WDR-QO-~W`Dhv_u6g^ zn>6BHpe!l(yGQ1zc2X=7YrY%>1Bff?1;gu8LKOJZ%J{gs%TpjY!VDFIS#UFHzxgC4 z#XoZH`R*O=)J;F9+k5(C6tNi6$#o2 z7O--|_CE?v(C8FUQ{9B17F|G*u3|gA`LYKw4b6dVbL^jGD~2V!6h&WWMK-VAZeA@* zo$6|>!xllF-*1&RQJqzp{9|nH+F;15{EN%2p*${ML*Y_@4$DZxZPk=NTU$hEKo!Qu z-2gk+=&?n%ip#?_hgOai4TrGQQwWIFC_hwD>0IiKd!Ld*2#d?lW0DWt!jK(00@5|s z@nXX%PY}{pqnULgN!_ANBYbZA&gPVSgKaZ>%`KedU~zAsZBw@kcEpN}k%s9L`) z{6zeScLC>xoTdm6M(qi`)MR9P7?EB2`6DZd@Dl5toSaOAA@!33d@-&ID%-=tGxNc1 z99LYf=!o4bJqFuWay^0ZeN0MVNSMpnp!OzBrT4<8$$QqD9Z}C6FCWNp&!}ES&g`uI z#kA4E4t)Uj2-BVqH^7Px0P9MBS)ngbhk!T^qG~&{c5|h)oCCx z=?x7Gh)GBS*Vmr{xQuomeYWaPyaeP7t9Fsz^*TsForhu{3eLy`A8NzE|M!}rB#5;< z!}xybD=QwtlE3QG!FNDDcPDO_JLOoDgMYBZ3+MYK0nC?dco{$Ca(=LV#>9|C>EJNc z{8kZpj)he;ha+obQW@E7vt)8i$jN(+`NCObbA|xhp40xwM3kz^fu^^-0%eolQ2gl= z76736>et0gA7z!x8P|J}0IBcf;onMke{zq5vm4Otc5ZTB{b@v*Wf&MEb z#ZexCx%_H&bYc9f2@Acks>ld@S^0+Zz45CBMTMUz-VQJOOL==&>Av85rz6Q!_43-o z_OW(N^LsbK_58uFO8G|qQerj<4Nd-36M~q5e;SkyrTLWa2NFM5R$pvv9Om>JAjk7e zxsS%~IWO^@*CY!OG;5-=+|L}__$R{#2IMYfD;17Jxz zi1(fL$7g;#vQ(%@=yvgNb^YQ5#xEa8%RrA!P)847gM5~&rjE`%Z{Vi4L_x;%5!eY) z3`q=ufd5`l(a7Ueic$`|UxK}5GP<$!c#;=gg){039=sr-%;xH~SAG9TUVizEp-WU8 zWck|Z>2O|4aM3BDZ-Np<=3`F4CnErKmSXcRwgf^9P)w*$86FmG`87w&`zz+_9^cmX z1dGvSlum=iWh_h#o5bSj2^&G7uMae2E42mj$H(u#Bc|qw^shWx&~n(^NOC;$z{<;W zSzL_QmXOY4Q?a@6iu~opQ;MgU%kM!A?=Jv=gEPouLO_z`XR7SHuRWqm4r0mRIj;re z&0IEMlk+84+rNu5Jk@e|f2H|2{BD3ZL_IE|aM1EiiRbVaKvFQFnL@MrJt+F#oNb5z zcxEPsTU+QxOizOqdv69@t=4UAZ5zBiJWiX_!hoZTEgKXWH9)XlY!&=q;hml^_W5@5 z{|q?0k4q?SUgn6kM8dSlmF~QVU8%Nhg0FPCW(Osz5dBq-St^TrPaWO7s?E%H0(SVe zSni7!s(SN@ki-Th29v1Ul4=s`@kF-`1 zxg5k)ur1EP0L|VLhwC#9s$cjpD5?h-y4rA8z7FzZ>f|D8zeFWg-9Kcr$vm|rzk5%# zG0}C5Yyegw9sq5+C;?Ep0{0nnWY@?Tv9|IfYfW%#%!)E>(J4gzN=swvOA(`mOIS$2 zcX){2I`e_}$e-9m*5dq^g;+17=M$2Wcm$~kq~P@aPGFV^{R!@?8mOD|Nmj`zytnCs zdJEC@#YNWao>AE=ZSdr6yLfnXf&>b7aIF;sWk{+@bajV)og=B{7kVN_1Xo8{G-q-q zWn+bNSsFD!EpYyt>E#GHVceB~UzV2(70L78%eCFEZ_|l7nHCAPJ#j5KYyK=-s`DE1 z5Sm+CGlpC9_WGPH27H^o)!q`;MW{s6^DuiCO=e`@utQ!_T;vzGm7V#`GYQ?|<6k2g zzkFVax+lnI4AZ(ry6mjcF|<53z)P1U?W!i0;3!V)flpo89aJ)h@JZLxoVl)KsUQW zFwFG&>S~<{6sirtuZ|b@6S-<)MlWd0DC*^u3n6fPhIJtzK7#w!7qUl!;LKbC(wJ37 zTKe8{_D!&Ym8!>%?fh6aAuh0_k9V7%moG6qpdcq z5fxX4ZEFH8Ug?$ECHZ!f7o|Kt4f)M3&d$$!ySrD`000Xozk+RW-_7A*sx}m&3me)!n0Zw@rG;@`haZp?!D(yDO%om)Fs0;@UY^juQLYGiz%~@a+lVzmUdA z%!U~W6bf&zIFDJNNtMAQ;oSn5R*?)yX+~eUU=oF2JkAAFy!ro6#WxsTq!A{P0OMh} zJ#c@E>DDb$Nb>^$-UK>%CFZ8~od3U#``|=Razz)I5?(Nj=E>QK_9EuG2X7LKwUqx_ zy5#2bO-whLeL1nT=w$o6>QSV_%K5QaKwLSO8?5tk*KU3k$ zjm=sU{w6wRhW{RAsS6O8#}a0S)yq`UpHisT-3uIB<4Wf7Ja;tx5MYq3cY zN8Sjp!w9%aKro#N_9-q-P8)I16&V6NhR&S>V@zJkiq|l<>fVBSOqTBcc1MHrjnYKK zbszIyYForl*a#aSX@RRF2AC@it{0Fl8`sg&Le> zU8*Uf!hW;$&+D6;C1E=^gDKzyG!bKfMXuS2**>rD=GH1SfzJ*i`_%hux%l`P&<>tQ z%F0Vg+^}Rh9eJiVQXmzlSN?u@(tAr&PG`(ups17pHAyqIV4U5YPwvgC>*h37VbwO9 zjPd@7vCYWa0JSBJD?EA@m$|>ha{6btR({g>^M-t$sQUkc2`tq7d~q&$mH$5fp+7V^ zNdqaRV|2XmN&*uAG=x&YbprB#y-NO4{N!r;i-=F_HidEaX`Z(-G*rg)&fUR3pX|hfZ zbF>FVK1}DPh>(hbf(A!#rT$Kj#+~J<0?(=qc)TkdW@sW?!@T6^Hx?Jn%g1uC$9-Oa za0ITxL12;ZRyfZ2OZg=M*w+h{d|!BV%NEza6`GOp%)R|pd+nWA8a@vX4-n{K-@g5) z(g-pTtjFx!tKreJ+;=YH@fm4rV}%ZiW(4SYo86Gh*V@6yhz@4~xDm#PqFueB@dAut z_3mx~rK}onwIt2I8TYP}cDF*NrVj8`(ESRd9`o(n*Lvgl`8D%2N^ZnFa>e~qSUyV~ z8VDW5y=A~nb)ePcuKa)qH3J1=0q@{d?Xa5sMG%!odYvBKWFti`!*6q42kc}-@EXyA z`)UXt<7pVG$JMgb_wUFUobeCp4LZ9d(Q$Mgt1g_XrW@gM-?%K2X7M&GY^kjBKH=uk z{GU>iC-P1GyBnk-73X@!MP)BxJS=y1uZifv_ zA4`g@@!>$ems%2V8T&mk+{T7g$kT+OZ{JAagVd>ds+*@*4HzFW}g{Ro*8Y&3)@JY<~=pr?gFl>!q@ro*gB@s z1J~)Q{Rhwz#af8WC)g@m5rP_MLg@N!7`Eat+^lsy+Npz(BZ7z6y=4UpzaY{rv}O6H2ph|bEV(=%h0~8qisftyYNl3L zeVQISTbi3ci3Na9wn%FV%!fA5o<8jXL&Qhv{m*dndO1>k%Y0jcu<@JDPwW#TYT=cR zpf7E2ESyP&zUeU@{J*>1L;NXt9)D#&!+m@%=Ojcrb`PQ%ozVI%$&rdsw(eWu8R5@G zjf51UMoc>eC@!p2P*A9}x4X9|$`jq~-SBd!@CwMKwG9moBjMIL^pQ$BN0Y|p;543@ zrVPCpbba;zFf$agDLa4fA}dMuT06OR3Y@WSIBH4F-nLA&Ebug=@QZcdq2H?aPJ<;! zGo@*7Kk<0-VV(XzFy8<6nTzFnw7(iJ5%SA9DYWSzZ z7ilX~HiA~*+Br1f7t4N)w?@|Kmg4+ah&CUAF=0}P#3h4>R#fu#RLPGY7Ul;bt zNIoD|IdUv&Q+4OsT3Xpkpfo?>Pb~mDf}cXv^p)m<&TJplZ_bz=iSyN)ryXV~^m57z z*V=PXY1Tg~kL4GNIb&8CugTarIwA=fxd&O6mRW<39!+Pd+lGIaX1Pi8nkYrId#!h7 z?4FaC6lO0#cF3gw$si_7-Pnz(Mn9jfva(xLZ#wCMnD_v$yWE@w-ke3s_e@c26VIk= zoX=r0=92pcG}91(yn2T@oIPlNYClL2z#4*uDYX=q!3iLCrdk((0JT}c!ELvKn1E_l zxKkm~CLkYc83`4X{+iG#_$}W2_}F9k5+Y0AW%6eDX7%y@Srb%B4vR7jR_3P(rmwn; z%>iMt25gD{@7Nb#Tg{lIc5s3$MPj1gAL?{ENf~NY4J4gjdC{tMv$S+$YgYAz&&SxI zRe~X#{d>=uugo$yPzhN)jvgexB!k6&=4Eg(rcZQ?2-&}O+aH(lPlb?%TJI@lq$#Vs zORsp^d&qHRy|iEJnOH8iK<$mL_|aO+8@7UY_C-G7IX`?jWOh6aY6`SVHi6QLVt>1% zKb)5=RNEf_>4UK2MgnWcScZRpxyCXa-XIq zCOk>udGAqGG_zDv>O-oUBsrG;dZj|eon&y!PYjf=xP(IHu)!@V0@^@{u8G^bv*kCS z+zRwLq$0`1E@ocg86xgmvwrsj4v;$+9%Oflv{S`Da`Y!FlFQ1OuBC{51PwN7iuR-= zB0^D6in#cVFhg&dE~F@^@yCC>+1Be8{WhyfN}C%(#S^yE?aj=oOQLRin1 zE+b)Aog>jhYvdlCzUSuJ3I*{`=;+a1u0Xkuk-)h+oQ`>ddROg=aJUHzJDsm`qnb7N zwN1^xtuHNU-gvo2{uW0@%gijpSmqZbLVkvYFM_*?AAf^?C331*%Zv5tloe;d>FaBA;Z*zmzOuWU7#-x%EI5W zDVPB+XMA#koMc~q(dr1ZNfOu|T_LykO~R-j{8HoyVrUZo9UZ+x_rJKhw!tg+5}$G7 z`ae)T`s=8x-(qN9l4q;Vlw~pHP>PqNdV^S@TSCJer;@6I>t6MYid6l16!eER)}kak zhw{z|)^E6|qJIx$*<_JMEm{y<$D7@Bxr-D?1R8W18}J4|(Y5lU>?jHsL{E=PdMv6Ra#OCIVC@wzikU^Uv$6fer^5 z-*AJECjs3(V$dv7B4_&(?vo_u%S3V!2XEO)n7_D)2rYiG>{?!+au?WG9Gl>w+F;6cS1xGh@90= z+)yaDxBVcWLtbvJ5}^JZr=dg{h}82&4V=dY)qbD!MwLkOjCoTuy?DSP#e0FhRg!?S2Ll<_k*IYEy++@kHdIC{KM;D{x1s6f5B|lfGEf#>5~x!- z%&?-r%3s22l>S~|tbbu;q_;Om+T_lOSpjjoRZZtr5p4j$K>Q;MB5wO<&(0h)-&>Mu zOI#QcXzpnJ%1PzBxz)rN|ADM_^3qbj;h z7%an}sE0ShmIgdfkacP^UPuk+CzOa$1=^l^g*Z9?=(xD-P@yRMidbVFb@1tyVZp(H z=;;{7(&mTjcn+*7U)c5Qk-d?_iS=2ZRhG8T##UAoltKrhoG-(J*o3K9|NN0pl_}Ps z7%yM=Fndl=ITPN}S9jc3M{S}0>tO7g_G3xEzsJ_0Q?CxMdtYL+D`Mb| zLu}I?hVSg`h_sYFMe9!_eles1vuJ1{#TCQC#dQU;$>BoR(n7S*|L4FGIYWuc^cPPe z*rh=-492bI-OMm;k4n*+b8uEL<6&+yj*|PIH8?M8^(5uGe$Uk4VnqFP-<&>f1M;o8vXPgUCQl*qQ_qL=65E5 z&It)M?elnX1>e4*Yc_A?QNrh27QyZcYJ6ISXC$zb0iyz-3Lw((9s}**66^gt?>wKR zaE9lz2hi#jM~)1DFhu=S20ym=v(m$X)|KstfYe2QX~F_0X&s%5C4={|M{B!ns*b}I zU2kaGD1HW7e%ohB-j{-h%I~K6B0B^N5B9?33m!PUCH>cUhI3o|-rL{mrP1FTm0iYe zl~q)Hg8GOhutq5rb0-7GwSV0;$7Cesu~+T=Uwg+Nx3{LRShuncmq*YJ7=_F8J9-+_ zJL9^Fdo$uM8~8V0KikzHqV{d@P^Jxw zI*!763RaXnBb8{^nCNI3;E*L*-V-al@_fx;lstDwT&xTi)stLc_F-lYb1b+h4c{^P zOPuP6%9)F{dW`*^${Wg#iY+r5brY68G?W422+-i; z9{Gxck{Z52ImB!2Tzn*{v5vf13+9${&%4rtJTns3l7~`_8hgi6TbMeRf9?bB@f`zA z$?ssCI#eMMZLIoFf1H~4{&4L~z1-|bz zp0NX*iq4)kdzd-=6SyTD`1$d+SBvcu+f091Udv}E#)CT>LZ*t{N>C==FP@n3t-2O- zhPP@Sx?C4vi}d5uDqugt96n`sY;rU=$wMAFYo>&`I5Yp;Wun;m%XIyk179Q6_N0D4 zf0D2eqhwJs@t!=6%*pYusWwWrQ>8b*T64Y*)`xuxd5DLF3C{A7GTqzuy+Y5XO$2Y% zc;BW0S2LaXUi3%#oClo?72WQ5`bPW`L}bg>0bL8}ajN>;UZQ&k&xpb^hPs+qIl~cY z6HishmY{$NM4B3}_rA+SY;z5Gv8E;#Js%NWlt|Xjv9G0daHWe)k1{5tws8UWRi~FE za{_Sb_`Y(8@<;^$Ws2S>dpFEYO{Hkw;B>YX+;(3&w2X08#o;%mIGMHA+B&b>hjCPan|6CSD{vIC5v)Nj{DY%i%6as+E^F%PiGUqoep&qF59|Atr59Zb zn&IcbR)Ar9eYSxX_TrXnsa*^GVjk-{w*w^~-ze6J#gLl_H=C2%}BZ}aDltq{y@}!E&hJ~Z^GZN&U7kMC-);o3C3E_lC~vd#B%fW#GYc%X4-P|B5P1DgDoKpU_XO8H)_~fUcAq4 z!NW4a!u%|F6%UIEzK5j0ctb<248?7B9L;(^z;D5`rN>oB3)!of)@#$qk zgkST)Sf<=M$UqF2W^a#HpjF3%V2mL}|A>2oZPOK*UvAHO$uBAmA%AZf>?VbqKgyTq z!9|jT>1B!;k^41XcXwj!;GM%mlLX*)3OqeL&Nq$RRs-JpZ!pK=;bMH}BD*3%4ZRo+ zv-PilH1>^@f8AGfTOgr)`85(e&}@-Nmk&VR2v{w~#+FRRI$}P4{HJMQ!M2L;f2#AzuQ7IZ_ufHfShy5QML(yUjCW7Wfa>Fs^xqS!f=}D zu_>4n#nLC+_KR$}nbUeZVsvC>cotcoybo4kFxt!7&B2|x@fjhIe|okeDoKndMo%bl z7oX>!F9}Rymjfk3AW_F`=HM)THlJJvHFH*Hx-rnEQ|c@HeD9%6YUsD#PHtezL(Z%E5q445&L zXrr@zsyGnMw^{{7cN@QV^R$EnJ7}yU;Bn%ym#$8P26qf(mB13%Z8j8>yI}F z1|QIhpRD4h+!zwud+O9S5v>v@qwxd01Ry}d6t-%r+g1cn zU;X&`GkEd-1u@*WLApRWsHB1l72n_;qYzC;7X=grrlfpl^m=^!Vmn5lxc{>m1B>@J zBiEMPV3(4PTJ%A2q7q)P{TP^?oh{uOO81f{9xX1nzMP`NBWIPZtNaF0J&I)7B?NWUk`vEAm73)}DN7R2n=`+5gxv0ylaP{}>;B&>@$`xaz0Hs7TypyGn2V(5HjBN9KdtWc z6BL{rHJIIkk(;#M(9XRW=Z2dVK5y(z4^YlXcK*;`azy$lSVHJ^FkZ`2gCeBT% zD@`MkOhNdz$W&nU{&H3YU~`{ktH7Akyglh_G`4;}8$Bz%uP_wWREXubS-i(Js|YDL{noj}#R z`O@;1ObId}bEl5O&0FlXt32r7nMZ;i92~@~NWIIqA9mq(#nv)hG1aXa&u*)e)tV@t zRk$X9{KDW1LyYH!_o(Z?%9WpSJHtI~ihV0`I{lq_-wci@2mkTIRzwFuegJ?%bQWHa z7bz|68Xn5A{;#|^ysEP}uYfQBF3kgwZ6K$ZlF698CIVitCc=2}sf-RhB*1aJ1`CE} zICr3A0B`|q6BCpGNVg^J0h-E*Dv4*7>{-~Mg1Z7g9HM> z2|yb)th1M(P=y@TAt7&aXVK&tSd$0RDU^ufK<@k#?xF7}rmUM?DI!Upz0yj(JsKiQ zo6(`0VD3QPz-?;%5d@MV^o4buo!-=Kf}f$hN+q)F7Wt?i?{D5o2d$a4itF`vjn=pw zzA6ZE;1r~1x2&4|Kt7>;bi4n+C@Fvr5a~7bwsu14%?NHr4dfL}lQ&n5)eumC9-w1C7 zCQjpyVL`r1Y%R<8#asD;dOSKiMaS-fN93iomiqc#mtC=Sl;3O4hmZdF!%=}P>P>Wf zx>Zkoiy#qZl5vaZm^($A1uQ5gjgzrI&ZDszYm!NvS0{M3m=)TJ^o?ZtS`D#zwuuM1#Ku;cfKWH->*&-Z zd}*o;eoKl~T8~_u7l5jO9z7=obuF|&|FHugI&!EX2m)0c5wil@1;jY^u;Q7?HB8h= zI-wK6{NYi40LK9ETBevs^R@nB4#;3U##Zuuse>(JK7kj~(~W+#(&^hqniIKP;BEU- zz9jX#;jeW$7XD8fDdJQvvT*&uDRnH}^9(ISjs)wbM|ae9rVg{O-UlIE*Re&C2_fes zps5KtzB84H%NZ^WK)Q*!c`&Rfk=T!Onn}rorK4}OgWOGO1XGf!IS3oU&!1kvO5^%f zN|o81bl0n@6CcG)h8J>8{OH}OTMNhQSrZd4QE_2p#crqN?0zfoX;C(PQxGb^-_nxL zRgquw*qyn=&Opl$v&c?~0@WY!kh^5kN7r5SWn`q|*3!}oaHiII_r!RbQbeFjOi*5r zCj$A5>T6(07%5Xi*w=nIS~S_up7{~i{eAczgteWi=4K>7cPt!X&iXvNUriu*t8X$Q zrjn`LP+bR*!Mm66G#jjp4t8@Rm(XEQ~_JuxdE@A)76Cx>Rl7huBx@ z)gR9KSp5hBWtPtu_qBtsv$N;EAOQ%0hrI(>vdiMBj+S+NijN*OFZ_j9G02nHJKNin ziXxw64nv8%tQ##j2Vx*21>8WPrfDm~muByK{u@+v5%d<5Wg&rLxB@T=MdWg9 zeSxpiJXEIxklrjnfIN(1;|yP2SX!#Y4nW4v^sB2pw|6&(hQA8P*Rt>r5R=Xue}q_60YDeZDmt{(B_t`BH1oqQS5)jUaEp zV-qbMl>V--V26*uECxeVrXoCRP{ose|{mA=^hGiUki7k_&IyUx2`O0o>WSCBmikuO5e$sgw5@ zr8UD(%V(B?gvJkM8YYD@b)EW@-uV7JK5l)_rPl5|da*B)hkGjlxOoXWhd)x4dGWI& zJI~v4ey&^KzgeYj9Z2E=MS{@;GAg<*;d~jj-Sd6b4@HLDJ)x;J|1wX4((jGsWlw)d zrLF?UDJUWYd|tkz`E>ULiyktu8?B7A>S0O6c;%-Su>H3sKL*g7zp~3fafRMheO= z25drfcsk*ZE43a>QBPK>E*0Vf?G#49fuQoj+2LGC6L6e8wXJM1^+oZ9amj;y;B271Tv|hejL)DZ04%bZ&}j%PwIt+&o0*$S z5o1BDpt5t}K2G^g#MAUAco>Q2w`cQNeutCdaruyyVPa4PKEFh)O|DFCJN$IAMg?RJ zuTds9VyGhNz7y)x(q5e+^NB$&g;DO-N1WV0|EG?n1-Y;0v|>Z*L_y zM>RDA5@JDj4;FWMn25!D%XZDp%`KA6Rh8W0KTTuqb zfspHM;(rcfC8EqnoOY+5ao*lpTS8AStDd|!bz+hT+Ndh^coF~eW9xF+aZoctTw;sB z>(b(ST548PTT7z2ScV~6#TJ3zP1t2uKjgHSG(#jYG?Gh$@jkC2a}G0)3$+S5$4Gs&j2pDu z+DQVBya$nz8kcR=;GLLKFhxNJ|rkvAC#|3Jun{9ILdMRy|k3&3rQH82t@LB z!2?tQ;54iY%aGA-24S&E&!5-&!_hwly=Yohl~BiP5!tL^o9x3s!wdg_iHU$?Kx6Iw zz1oox^c&b9pn)LL*L1>VklySdlJX{S?5nLH&1Js0-XXy^;8zp7rlY|_A=7@>blHx- z8+R?7&DBaJ<@8e$GL&7h7e?f^fN_}1W6`oPy$ z6xg3>r!%y7v!~|~h?Vm$2OZT2t4!u!IS^N+<8hGb<4*aRFdVG<%S7x|#F)Cj_*_HV z`1ttuTGxkldPUhZ6(1TJ&XP}_QQy6LcP2HW{`k-b;cj+0zb|}|Gn6p~nRYu*Bqf_y zAg`+!28loSp|6pdhnE+Uvf4hx#ceI^9y7wszLE7yPJp0%tLLx%ZFXOQp!jlUyTK0; zp0|R$PtweZ7}-)(yT-HrAp$h7dn3ZbT|O?{%puZh3u~LNpu$}PvcVM$A@Z|O+okG< z6sK&4xkEk$TsrOT?L++?Eg6BvLeC7um%jXo_Kg~1o&RR4p-Fb<<6Th(N{RE+h?KVU zO`+)VE>M|xfKVs%VN^SGLZ>xlg!#Sk)g?aWYzBsr^#+(jkej@ z%?&q0ZfVW)2@o zJKr&BMybIntXDD-oRMoqJ`!zTVb@cO7Rfz*nZJZfMvrI(=&YGD1^LO)8?p>>F@q;C>DPt{oXPcnf{k%*sV;AUAD* zq<9b2L1iFmpToXqz4-M#?>Hm)zgr>d0wKNff*v9wrXFRvFrqxeGthMifLh%1fY5}w zvGMWQ*hg8{`juRsLQt+O=q$wG@P63an2KBbZ`?C0R55a>ri?mHRTaTGz(%K}@cF(~wyXKM@K)c6ofL9T7IOhpjKz-^bG=+Y@j zqb$%SkhHqG+OJpSu?i2)5<2`6G>l+JhXaaVYw$KPkp>X_cra-YMt4`}(Roqj(*tv|K(@+fYlY)ul^8N9Ef>NfVKTJnN1-whxgoy;UFAp0i=E# ze1sU<5itF1ESMpNE=$uZjqK60A5j<#k%!GDw~Pe;xTyh-ga{K)MR`7$cQ(Cok8V|A zJr6kv$PTOSd+_jUr1B;QF`f##Ox_Io;;_QnY@d4A-$SCC-%r5gNkCSN>YwJS{WReBqCb_{FPTSKbk!Qm{JoMmr}?^s9Ua z%ykm}(*!`!60`}>L-UKr@y?PqsI2lK{x=LFp(5aY>UFe@Fh6pq8B3N^% zL%SUZvK;JEe~+)Z)kOi3GYQ3VZy_=Vf=-_KzV}tLH-S(SH<9E}KesZI;ale`!%SAX zFI{SVlOD6guM8V8XvAkKX={$38-iPlwr z5^ETd3=uEUS#Y-Buc+nRAd{n(V;Q!Ex}0HrcAs;JxKwz6eAE3*HaS~?3;I^1VEy>< z5O%2!4>DW_e@&x#$P@nV!JG%E#QtOTOg#Oc5Oqxq!U7Om;1d{z#*P{S%q;^FA+ zcKP3T=Tpr>+2tl^^%#`doc1#%s-+i|o*T(`&zcJBs>DVwS)jk$HSYRBdUtB?i0Cr^ z|NR*Hr!M@GE}oct#MAx!zu)5g38vz&#Wlowi=<+(vvPr#cH(XIx>(SGLXz*<`I`jx zxL!FZ>&f`|aq0&w>YDfO-$$A$vc@xsnyGQ?C8)n96D+>HG`qEXS4HxCE@*7)ewd+% z*x$X?!(?NsfM-jXwKFl_OO1J-&;2-X6#4WbGjo9tCZh+SrHTad?GW|ZOpy+s0)aov zMX)Z>ZQ8@;>ISg}3B3lh%kwO*#I&)OawpL35FifMdZ_SJpwvpf}dPiTI1Rpf2& zl03?W*p3<}cwW}u{~RO!?lcYP+v}y(KKR%ZDvj)+DdK(q1OitN4+gmX>Nz0OnGSlm z7$U=I2iu zy#432UU_8C@yd&g^^zSCjI9Gaq6@p8AnXq(->&;s zS`S)jXkP+UH8#s(Ca6nChbagpEg8Vn^67(iRF1=}k~r$NS>Bx&?~r%zqER&LZ|}z> zC5hHo(vknzRo*NJ+zk)f!85Z!0Lsp+%+IS%mryOZv^3G+D_7-fR_`z*>{I9?DmpnFgf}JbzJBM zUUy#qxwSCkfJm(m+f?`LJnA36`Y&pX&ficUVVsTSpU@plJe(J87=(lLd6r1VZ490pwBx5x4;RcOWQ5Ga_1BqZ|wpqG}#uuOWQC-+e(43}e?0V#Hn!`9n!i3+WI2#y3?9#?Xc~C?KkU zf-rl&F!P_Bi2C(=f-a*<$JrJ7N}uX|~LpzyHh(8mTb2a2-@fD*0!2##+#QnW0ma zl$6wwlk2dCtM+QEqaQrsaS{#vyMdUti8x_xH;M}iXyZV`dCD?t>DXo>D1HN>q$5-s zZmMNKSItg+{rWH@B!uba%~E5~hE0POcot@X94yS14%mB|MzJD9P3Avf<8!WLK6sb? z>1Y3{-GGRRsXdk!)STrcUnP9w-4L0o^m}l@1?q%&;l(J!nWL-a?L z?8C%6!t^Ircme zXNLeqq0Pw5oB<;`P4FTPF76X}O?xItAm_g!F4)#8d=)tWmxZ-W;&^sWPPOCF9P^(_ z1`moTjO*n2ik2%)?FnsT&_DFB)namgsZ95S@nholgSSJJ6dB_-pBrKmg?wkS4X=YB zF(n0hT*Hc@;C}gALZX9-f&2}Rq$DA?jInFT*WaxIiF$KdY9sTzY_dXnts`z{LB3so_(VMb)SL~D z5E3wg<(05>!7y`ux(DoarKo^uy2MsdzPw z4I&{bFGkgow=)uq%`@$O4Hcn%sz;NT*s-cY|+ zF3bvF4U#W6X5GP6e--el#*Uv~o1uS5S($w2^s%Be6EWS7FP%)LkI{zkB(r2js3oxhz#&>tWqK9wO)+>Sp*`7uGhvyeGm zP+0=(1ps!0Lc+%$ltRRTVhX?S7v1g9Ut;Y3GoP)Jc%>{sq)0kjY-nn|6dDvo!1O$sO zWmyaweW}OB#$;Vr>fN|DN5a?fQ_0k-*s3-AzF*?)d-skEVacFFxrxk(zkf)EHY7}`jWXVr zyK_&wqo*vq;O@xg0OF}Mr#P{>xKhjNTHtV|zMpYQfZ*eoGuwJkXwzzwWUtRLZ?ECM z9mQpr!4M?B^LUv|s%e+jtKlvY?KmQ@6u&pl#}CT9AA=%Z7wt~Z{xe@)!18Q}8Nu|` zu3@&h(#`eeYySq%uEjOavQJf77CFWAXImCa94$8Au3_0~H4#FRiZhsR{@8$I5uG^3oU2!~2#3uX_gv=jOkx>3(YpFlz$&4c zi(Z4CSs~=XFjSj}y-gc!*A@N)G#P~Iwd5?qH@I<}52-%~t@)BzQFmOthIA|5$ zX^KiHKlG7(GHdHr<%Kr9LBK0897sRc1OC=aCKEEzwm*h4 zAJ8vEGGvv|OQi5W&htntcdT}3F}Lcc+2kM%f0z1&y0KA|=ct)bZS4^T%GIitMR1gG zEGEoktA-5!cjQiSo+&#A+oyH=#`ziR=n9>8r<3B9*KX z2F(TLe%H*9=v+q}x|0^kq{fdmC2{x((IR&Kkzw5vPwWRS7%uYESo;e4B))ttSIj^A z$5_;QmsacN=6;O}hv%5qwRAsIk$-!--OlbY)K>Cut3;TaP6jR$K8omdbd)`~TG`BD zqVA(A?RkFsTn$n=Ae%RJ8lUV1BXas4)EksW?Y064RV>H#>)mUss{#<#C5+zKooc5! z4&%D_Ub|LWjT~D4=AHAN?>l!Nu%~!%;O9DSO^Ir6{C@S0yrW)q2&vARlp8fxgZi7U zIhC;DM{f>Ni*cHRRaEEOb4$~nCja%=N=Zs~*3Q6qZB}3fi-YLl&J=cl%$b?(nQI@R zWH8dZiIT((xEOU9^F18FnU{iyQuV;&byA48#iSJSsM7Vo$T3EIgp+i=zdv<3Jvq866&Z1%=C3 zu3UiyGQBuIq^b;aHQa?tBgV^VS45=d3xcD1A<=9h4<<1gl{7YSGiPKm>KG775eAP zD%!V)hMfE@J5uDIaJeL2Dn{C|na*9T`%;#$qlkl;p63>v(Vt@kisIvE|0vU#OBcJ( z#1wGbypsUbW|04F4*sg6onC$bW3l1S4}1)CXgZ@TCbmX+3LCmrD?|Hwg~X$t2Dz=L z-?{Rj( zoKGebMFzg6UmD#~rk$JBnx219LvY1mfjzb2*Dh~ewRPVJ@^6L#S_;$a>S&Dp_GA8n z3=Nw-+Scfr!lzYi66hb~CV3?bv90!QQW%nI>K^yce<$}HZ@t-gQZQyWXrR=$efZbu zI$pN&lVxQRSsg_3F)>v(DO(r)@tk8wT`ryb^(CfSQYxm9lzADdQS!)W^`C5&SYb@w zWs#&5Jm(D}`8Rkmn;}#48kSU&4oI>jP#*A4xs+0b`%TAJrvyvaw*?1X|B0VX`2#t6 z1~M*Sa3U4UWL|GUPQ zGv53CPoRaQ74f%uKQRe^_>sUG-7SKPi_0hqiQLtYq@oI;P=%m1W&{TZ5p-?@kGCK# z7+?;!g19k(tm}L!kEe#)x^XvESm&QohL+j!KH?hVlk+ z{&M;=36xTK;56(|p|JT1`h&xq7BE^?cu@n>17L|95Y4dizKe(??*2hHH;h37R_8wGmNw}Ka~|@= zA>47j!5^<@g2qi>;!j1w{zUwxAmX%(W`e!-7_5dsq9C#Wwh#fDUK87StWajXE3fbJ z06z#_5HMz`nD5#^G2uGs1L>fL?Vj^5EZ7)vR8cfk_jUFmHIeG-ui=)xSTH6 zH{&h7fngkZq>)KKx{NSUr9Xaf!Hqj9GL~#WJ2C0b>*>T1-(Fa;_K)a7OVdEF^Xdv& z?)lTP2lYbFrizS9ZL*(8RerYnnKY8{z|3(}>1~pOul)&6f5M!<#G?^6;zTN`ha-Yy zSFksc>Dpk3#)XUmw6>QkCcjiytuSBwxPNvbkM#Y+>7vZYfBTDWS+Z=T|0>)aiR!&D z?Gm$#QWu#q#*!6>J`|)C7Y5eVY6GPrp%u)h{5lemfL~)PB(| zbOg%3=dNq1C*xw(1duNwKya-^KuNX%iMJcN%#re27hv^ef;L$YeC%7J-1(!&DL#7i z^lXml5c`)5>Q|hOMt-Tj7aON-@i&C!&Ev1thBY=Z?#~Rz)+)(=M|$Uji`Ccbua{{2 zs-3C&gwzu?9O)A5L5rXw9Rg2ljtb|f%C8TG*)z7+ZzLt`P2TPgsxS)s&OqOc#64mv ztCBh@?NtpSjKnR}nP4e_1f2#0zKeZ`2>cC>M;36S>_hmkrVxCbIKhF9z)RP{OfUam z*{WA{drtm`Kl?Z|*gaiewWkAPM(GJwLVxXu5IcoPxmK6*Cuk){>hYRt`9n_&6#))> zgA8wAa;deiks{k8r4evl1m`Hd{=3kb0rHoJN=m*f(i^)y34*|@0H!a)Ly=jDsmLDf z2URdrn-0%-zumq)?7pspY6e)2rdq9FEFL=ZBse&hi=eWonkw`d?dp|!lEk6P4kahw z)YNy{e~4|DBMWt5!rlbb=bx5(z?^ODYifiHnMQYqzyl)9MtbK84@2aHD=^C?O*ZI~ za|&Szss)z%sGfSqvEpZGF*3xD-rS&%#t*kb1UfBuvt_VpuBFdd-&(A74oS3e{T5IE zud=v)WA6`(X$fAr?4qdxsPs_jf^0|;fW%ZL!IN<1JXU#`CJ9LegAY5Co^z8^_}ZqS5#Cq zg9B_)+@Cs@NRl~6bU+o%OpksfSJLA4h`2D2baikL|6*X`9K z1?nH{)vJkQ2C63*ILU<1{9+~TE5h3U^5*V0NgF>WK{Z#eNBsJwj%rViP5QDN=QvaM z!tX&z^GpeUc#paBvI~u>A((R*(=YucK<)F&I26lzW@6t*$G8f8I_F4$lhdx z>})cM?5)W9*?SZrD@pdu-Xkkyhiu8nUfJULocI5KAJ20<_mTU)x~}UM&fod{e#ZO# zdhhSyIrrZ~ z%{hB)wtiWQ*Q2ZW!f;?H`pWM0(SUc4)+&d0?e1C_xslF2x=nR6r$;t3rLEPL?L)_Y zotY=QUkPeuZ_nwt2}=rj{K^_KK$&q$<-<>s`EZI+$B4*iF{6{(vX+l~g}J$0j);I~RB~Kxj>y=VKNVpRDLMxp zh+-Tq4U@S8TAGsjn)tM~0fn4opCxf0W(PjTrCznVbx&_sDO5bzSy(Yx)E0ZyO1Ccfc{zkh|_-ao5raOuu0 z$8jqKg@I@#(#z$$(%mTql}OT$#linKObJhRc7t2b0hW<^!1?HZ}{C_W6@B#n8FIDQiI8!E z@=xCvA%}&}rE`v(+TZ@&-$>NYwDdL0D<}Y%hs>*2m9HSm5)&5rpst2<_K}DF#fPVu zUSo*O$$5k{Jqh9FjnxG2El06dlIWxbv-j4A4;};w|E!a8+_}f_ODcWj+Q1*nKZ-tY z=UeigXou9FNpMSaY-mtYF@Eq0K+hay9_wL29ry?AKj+y`vw~((<*1}J(x4X$<~ZzWIzLBXe&(;@>}IFAcD!HR2Q4 z-I0C%wfUDZq5Iir58cCDGE8ghzXF~+^51YWFrr7ju|7x>OqMj>&w7%pG1}hQi7-L* z>no7ITmpb!ARyH_38C@G1->*3Gb^iyG)dba99Pqvchswgf+t)Lrncx_5gpiHD5S+f zn5p2s{Cu_i#gDRuj|zi)%L4gpu>(JTRt)yAlt0cCnS5GUuKYGBiGWxib49nSWb9pr ze+AjCUkw1IcplGf#^cBBfy~flU_;7|nx^LdceFzTM#ecsMIE3=X?}mG3TsQDqmz?) zm~jcXZr(%(5y2J`9k~d%w6v4c19%6dratwb9R0lb>bI;_goXlJBA>179E81uwgw;G zani#j`HaH4)trCF^UKMwG`Kb?4h}?8gcIUhf9ZJHBSAX<++jv}GhG!Ax^h?=zl#&a zf3$xa7YLR7R66(XFK$v?A5p~CP57&qd+Tn_#hfQ$#QUH!ri1yjMCX!avF}`=R>}zr z@A3$&Jzt#!H!87M^{>A_wjy7=m;F56rntz4rD1VJ{Op9)U%R!n*4@>`btxf%#c?5F z*zzP830C=`t+Ax@HXjuJr8iL)Ni$Uto>B$#N~vJj(aZW~vfUS-eST!~MAt0Nu0JdA zx%5K}WPC!D;tE+2uWpTlz>|2p(=Q9E-wnGZzqQ86u)g_siv0(l7U$v>jZg#rNcV%3 zG(J*3C;gOrb>?~Mnkpt~T(I=A9!w!;d98qu#9eX&uCV6GyE+X_`s)(eCmRYMCW`~; zLy`$wU0#P}FR-NV|FxfXp8R}%-FJiyYJ@ocYg_c^>#r!U=xK~hY6Z4agLa&eN17DD zz}&GZAe7A*tZ%g3Te99#PGndUHAd0SHe%bpW?_!SCu@;W$|Y%+83As6xq9JXJ#y}c z+qRbynL0(~=QGfK4KoxAleI_uCaWLH$O@wfFz%iFOsP4rHvw+(Uws%+mnH&a(9mmt zWTCse+ZzIPmJawm;`at_#d0~ceJh-FH3HdI-bVhNs@sC1SK=z7P$+W`{MwgCc-;@~ z_oaxbN#5Yic>Ah(fQ$(UzX&K&xQlLrgUD^?_EKN!WsmT1RnczQPD3xw?Ov9UhzKz0 zLY#odOz+Wfjd&!i2O#YNr)gu8sys54Ay_+d#yu2j?lPdTooOy^4<9k^+g*1 zjXTqj^Wy_Bl!ZZjH3)V{=;)%4j@%3y&psnCdZGdSm>Qz18w&3_UP%%<{#JQy?I#%^ zm2~%N3mMx8CR~9)DeR0dWLRDP5`RLb>&71H8bsye<1g~^rVPr$Q46FCwGQgqxJ)?=OakIlWg>^Bv6 z7yLilIZS&dIf=!=9^|4=*5l?JK@6v&_-!h%A zE@ls$poh&ECVvDSaQ;pxm}YNCM&?nnKfow;&aWHGS1wbfOB7u%>(!4U+?;6dM>=KL zOYDAQgl3Q`JXUZJW$7u|_dc>tvDif-(q@kC&v>w$mE$805wH_1^fHSqR7x zQQ&Z&5`yHx6ZjS&lsY|xTktJ>Tseo)?@Ck5xS4CzYzF3|{qf!XN~v4vCbYH_l~@0| zl=;mVKm1Zk=%_thaX9p353y*lvyqn_R-0O*^Q(cwPZ>sVpoafxDOpui}AjHGNLn>lp z_@5t;np;m#gw{hb-T{D#RKS}R*vT5Vg0rG{(83R9>j=z!?MJODo`AlS15Fi#Ge=cV zk3e5vABH>Va*c_p^Yhr6>wCql5lABaTqA<+k1QTwyK=Bkc$;>3_|BJ2{vB6l-blA;J3cQL6@&h=Jn_@_Z}CiT+B#1Ux8jgqB-J ztT=B$%L6LVloAQ|9&}gpXswnP`z}Qpfpy<{1U!*RyAu|%2JZG>8g6_Kjp)b1#;%Dq zeXVacKHc`sb;heTEL-gQg8D??p9Ky@=;?nDP^_(#reS|Pq%iVyTzYM7psVNI=+VZO zRa$y4li~N+?N{<-}IH7zob|0JfV?MR#8xR zmQf8m>v;s{#o@`pu8ZLBkx{cZ+WO`wiG$XMrs8Zz_l2{Kw;$h|>gf6qdZJ1g0jzQH zRw@#bH;OTzovoE8Odl*lXl!s&tTOP*Tfik}Yhv>2Ekw!_pOe2dLd3_p<#%pV2H|5$ zkT6*Gnf6Dfz*9g2LJ(!5;NLS2G&hoVpl1Mu&0Wxok)c5BPX!lrP|qT@662Gi7Gt-n zl9KJp8v9#dtd0p8h)4=zaf$a7xoUmLtN)5xa0`x&nU0PZHzi4)QwFVoNVyz{Q7WO~ z;rXvzUFnb^D0b&TI))}D{Z|SDlFm|n-S}^`qJEwFa$G4d2JnsX{OIk*evo7@>{g1? z3b}myTWW6%DTqwgR#ri6loITbc-p%MV zf9gDTQNEuas2{Dl&c&1p|K|^=4uqSKRDvXcSV>BbL{U(ZWQ9j5dx*#D47#(xi!1i! zAPrJ{uQ zZplA>eEFD(TP|JotU#67`&?iC_k4tcG4TgaLxO$G++@MY(UFn#($ZZdGdB6{TQ%W( z>%`{at-ga(UO+wht5ZCdcIgdqGqprbi*X3dAMW!dDyD<-`26!s=vjGn^^w_cxdH9s ztTU{+Z1G}+^T!GIAY8QCfL#T0xA%b6?HMWCYDSs$Wj$Q_Q%q3E%Ket^YlCEJFU+6I zpLOMaacwbqxsiHsz>Ww^g_SRY?R*6{hGBAuX9KG_#zeK7Q!%&8w7bc9S@{?8Smp`G z$J^kQ0O8F!UtrIF6*>PA<{TGecD=wrOLEY{n)cbtpQx@+BvpIdEK# zIaapy9&DTh2T=T9QBP?Kav|1t!2*Jx|M>*)XCT~3H)Z~;tgNae{rNyBrB2vI8Dh2X zyT0saQ(IG`>ntBZPbvG5q&zh1+fho&nTs>g`tow;CC<2>#h|r)cfo`nO$(kRRs(id zBU#y?^Cp&9_k(r8^MQ1!Q6P`#H5l42?6{?XO8YWokZB=QbaWT$8T5eZK81l_pECfe zf%8%fgLh^Q9-enq5HOtrd25#oe>nkVYS}?x76z|egxtruB!m}Oj3~;>5=0;Ink7*j z!re}IK37qGs|ofP0z~u&9G~ss_gIoHn5ZBV^$Xd)kM4a<_fwJmDS$P`?;W4Hq9n4B z;f=QnnQ9yppodZpW_*}-RDm7qJw<_<6TeN08W?iwXic~w^ZoPb1CIH-XWT~a8l?v8 zX@Za;BLgtmwCiMK>zMx$L{$;6siCYd8wKG5Z;xe^qDr6{gJs(K^zG64;#zJ`X&u^G2~ z_HZvqO)l>p9)hT1R#`DkEcF(ipGN+O$4-n1qx9{;Q81AnK@y@l0#F=cTnDH1pI;1b zzx_k&Lsa5~qN2SrITm<2DY4!dpUZ#oNS-e5&SoLqWKpwSy9;|Xc>s@2=Pce)4 zQ}6ir@iff2*=r!0)CEGQra*)22p-GP0iF#}NSNmWwa^Vf($>Wl&ZG4wMt4i(NT>JE zPr+}-2o7~JR?FPLkpO=#u6a1tVw3Lc8?yn6p~a8Z(GhVB(%mD^sYt4AaAJD2@$nr9sAlhlhJ{UF(wAPBpM3yO)_Ncvt5WF_*RwNyZdUK+uc;Hd z3I21P&6=5XJ>o; z+q=8&S*ToIYM6sQBBl$Q_1J2l;c&ktC%zf(71|8Rz~SG8{3EUuzAB^+7=g_0-Q=G( zL!*&P;RR6cvkN)Q`FMeVD;U59*r<^9XFHIo!tD&ryxUq~75Nv;aI|#fC1$vZ91`|P zjye4Cl}kocWXHXgwwNG-hCXy+Z@I;yqU2gAq*Za+85@6G{QK=&Rb0D_FiY4wE<*VV zhwr%{j(3Di6VDfz=n*m`=IH3?%t7Q)$psLavM@P&Ho+rf^Lu#o-0FK3UH8pG{ErKq z+eft9u_R(qwA(AQ`aGZX5##KgwZqIe4C7L{8e&#TjA-3`m~ytqqm03umn1qmJGp`N zvvr+_Hy;zE*vIO#)h%uB%lTzgdqSvtMIb#uZHOw`Klqh z?RHNgpx3s+_^v5g9P!?U@X365aK0}=YV#rl$4@LQtaA-D*a{bgf1ja4ZN8Yks6^l{ zZ-G~L3>`X^_w%PtnIJ^RyFrO$eun9P=aQdLY$sCpjy`5vX{2H`34Y$V;8S0B-(8R& zfxI341rR5f0jMZYk?~TYRt9V(A4T1S&^$k=-{ly-YJXWAm=cdlP1cqw)Y3nrS^S*- zx|nx9kIE!4J7DZHRRhv!l4Q*eCKAX;kD((a{rzWSBeKyeO>vHviYgR-de{)*cNsjr zRa0t^;l*(Gt}RePXIr%P;le(;h@_afODOpx%godvb96MealBHgdC>{-zV3X^&d%68 zd!18k7znxv_=5cXFMZ;(d9y7Y^UdRM>j`0(h^XXF8WNsFER%f}5PFzM;Xjwz}Glw@kk*g*tLcPeukCNKX!R@a9aR zLBu?(X;2RVc;}(p=l&DKvBlqqhxg23x$H|d$?pWbz{cOOb+Ln4Dw&MhPtb%B(Taos z7&HCzXKD0ebIquqDNWczaKEjdYHR3{Fm4Zari>Y=3Z*csPXg{q`;*l~*T|zjhN>_=X2OwKb`ch2bIn3D8+BKw4Wr!ssjrNegci6Y;CqpQ6F# z)ipIHa2r$d+ua1?WUZcfv$d2vkY;d|3|*bEV#~^$4XnGbZGYA+5p>)aF(;jzemzqo z^sPWI0^m1Qepzj z<4;xD{i@eSRxkB74nBy;@b{Pc{kf)JNB>FoR|_7P8De5d3M4sWf-v4@A^6f1nV8zW=KFSslt;K5bT zH6>>^_+t!zd)gT*3$rg^ir{bDtp4?RB>eH04j%@ z_MDX0pfxapB(0P`;075SYUEKm}{m<&TJ3JfLP=Sf^gwzjA@g5OlylC84I6ce?sG6+VDfHGCOP>1IqZxZrp!>j4 zMDoTJT3TAeD>NhekUE;`zQ20+fjZ`{dw0Wn-QnK5J2=6?ytJGQrZD-L=2TJXZ^V)$ z!jw6Zu7~uN1)x38*|Lzx8z}(&e7cdO|J7CCFf3P{747kKA zxf)?VerS099egwn!->C1kVXbCO)xyd7L`fn&~+e~SCj%28}eIG^ng6O2f4ma;av~% z%U~Fnr3iXWlwZuX#0sU_5rJymYZhs09qh`T1r-;*Khgq$G&tM+Y2x;-!W=3iQy45^ zRxZ&m`cgvSc)f&z0EXS*W^PJq#zEVw&sd*Gr)gud?J^kYTexfFi zJeIs+Qm;)K|L$LPVcPb)Qrmu_r;ePzEU-RAcynLA{Wd3G`nII3tn6zG3k$GBWX45D zM>ohZAgd>(RK>tja}r1qgOcFnltI4n;qc!YaMcuoSvNhAIE#v~wE*Ri^Gm$JkT`|` zbk(vEl)m6mJ4q9EB}!m_TAB)a0^S+}LzwyL!-PYr))Y#tpN(F^%wc{N6})i0f%FTV zCp{16+bP)0D7zw9)imlb3P8y67_=1v$^ z{g4(V|2+7UQZnC1%i3`s-oGsmerKX!7~vRbUZ^)UI+fLuE%@(|DW9;=V0*inJ9tsv zfwJWjOpVaCSg7*q8I@D;P=BWD_(23%k5)AS!{--NOL$kVq$am$qrD0(3wYS4b>5(UgrdnJ5z={7Wda-z)jmC_#%O#O|vg%zIX2h<&v+i zD?{sNpggPEPMdjZrmEe|QY1f&wKuD{jBiDZN{Y~@z_x8ThVt4M?hJR2D?BGOzLDaY2Fl1}61JN1$_x#d+&tP0KH0N(aCP8K_Ko!C?%v&;Kihf! z{(*D6?%{BUO7_O=(MmaEE4K(!$hmuO>@SK#k?e-TRoxx~%QZ4Ne%ADP31VfZft{p1U5a`Y6W=~LG&Yo6ADtS|yjp{M>* z01~)!F7?x)9o(i^W9`@hsz(bden&l`<$^br^ReQ)um}P$2q{qvcyDq@cfJg<`03m> zl8y_p#Y6mVOTNL9Kt=clg>qGBQE~C|@&YT24|GRNyws6O|NJA5Rh|mOcD+-IVPI7G z5P_3fJiPJ-deRFE<8RJXygoY7 ze7w%&#=YRG-}n(486y}F8gpC=y@$ZOwHs(R2wCCfK?hGzj7^^$Y^*)Ez4bsYz~_A) zcAA>MHCs@$xo{FmxNroWxM4VxWBT`bh?r?~g}z{_LtT}1{;JHw?$0@jO)syYutqDb z@T7g8WGSju1vx_il{Yl)aXSKvG$s$o`HBXu!dTdgi9`&)L6fv!_zOAPZYA~-e!04^ zV0^dWx}zHNC&fU6RK95QAJ;G2+N{!F!&OP*ksl*7_xISZ=WhGupsJ%2vKy?ecD~Iw z5qrXlEyTf4 zgS8?U+>?Ivcm_322smZ1DMj2kDT5>x6bN9_32+il$dv}J#E4dbCE;Oy zdzp__Q$#OcO7JM-#nsLqxnf7?vj4De0-2!ZQED~V`1=0MN9Gz_u?Zgxjcm<-q>QG; zuY|I#X3q_I$2=OI^Pf)JdQ54MPEmijO9w~1u>?~&V=B<-@&NA+_hls<9=mp9MX6BB z=8w!Au_kgP^wgoXcZB%(UHC*qV$AUSs%M8=FwO@kQ6YJ2WAZH$Z)54{5ZLgVf3p1~&t~ z%e7IcGVPu{ew-_tdD5bzO(7+p=^4V{4@89GbvVFscvD~w-2mr*tqX+LCg&$4Xe=G!eLI4N zKgz|~6&hU{FT>m9q`%|Y-s0fk@M-NrO^{!kmsk3|x3^aawO&iVqg8M`VHw4;V|9F?U z0Bz9w+5R?8kH*9+9J9r+ns~64^{k_MMsZ@JoE>GL-&12ZT{{74w>-d26HHG{)yv0_ zkzJ=qh@=x2;}sKYOvzdq=ZNbAN=;-`6gij%k75{D;GVvhD(L*eNl`H(ENexOqZOfo zn%Q}-8RJV`od=A-vC&t{?~cgF@^W%H9kCJ_9Bn^eC;mB|h@FKR4st8{?V$JIOjP{V z)zt#pJTBAu|%`RPeRw z{**6s-HRn_Kd%zD`ea!eG`ir!rmgs&Nxv)mTl*$a1XCjRjw^N22%et=SST}^!DJ8a z&;S@Gz}`_t?Iw!M=S4D&*@N*zHR~aYWo)lMRP2nQ!xb|0lFi=+=tl@Gl6*%|Sk6tL|t~4MT!R$rfOH?lq7vkW=%%x&dz<(-;%sgC0zq@+&{Q7%s&V& zPYExJ9D2>}(N-)z?*-{%pCwOHF0kGnq253>{0t_c!qY=Oe^20zZB8fV`O^eEo9#^( z=N^_9=l^WA3v_-REhXFc1!0f>8bPcoaGHyzrlwY4@FW3hA-Dm+$vyyK1W+dfvK<%F zG9btr3{!9|f4nbO9_J-4b!+%KYZ*sc+lDolKw?(D-oNRV*wngL#pN1DNg4iS-)Gyq zcE&2K8%w%sJqdywr!2>0Gq;?%LO^+o+c0oJoz_@oJ z5WPM_mxFyaSzFS^qjqgi6uajTl4((|$;0ibYT5GPWGE>0Vw zFdm~cd6bx1x-*@C+o`qn^ULo$smjY1FKq9EaTyz$hPQHU(8$442`kALy02D$uL=OD zItqpu_Ys_uob-NBG3-G25VP~I{SvnAcn389Wf7oY=4p^W#VsOIzXtDb2gtNT=hC3L zzmMp=u>9yn#tL*v5qR@xDl7LTOucXSZRN(EpH+YB{=5V)h{UbRUS%!+USk@Mx913q zJRze28WKJs>bRzJg0N4`rEKg*NNqqO_X`b+{CkyEwv$13b+qhc_p3%K_Zf}o^PUEP zUK{4a1c8_Ufd}j@h{s^JOb=EusWq0FOX&O?*>@|lXFLb~HxKWHr9K-YFT@&Jbz?={ zw~-4t+WFPYVO+fB`B+Ic^A5bK5my{X0~In?=eD*kB3Xz>Ayx=cc?G*K>o|pxbl+m$ zZ!GYmLODR#&nMV0v;f8jwDzEg35aFr0xQlmL82l~*eA4=V|WGr`=SyW_glAbV-mKe zSQMnt2*1o_UYuOq6gj`4oO$D35`B@C;6H;!F}wSD*s{L>4OTO?Ild<2J0o=Hr+d_S%W;&u~{o0P+7e6dIj^4QV3|*22lk*RY&zz^KtCre9{w6e;Add)kyKPvTmuZjaQsXf zvHxqII-naAKex3oE2n~Zg~uC;{3q$81=ClClShf$;gw@$SAWkWB{^TA1JsZc zU?l!yKkdiIP6RtQ7zq*Q%_IwH78d5|Y^~0(OAiy``B@G;d>CVj=z)j|-O&63wKX3# zAr5n#0ua2RX5>O~0(zuIg1*E8KW2S>-P-K14EKC{sk}TH*PDIKAg7Z#l%Ux4#h`MG zuLngFYeTh}j-KYuzl5@~vSQsyIUsyoz;`9K3`12dsBVD%l`85{S(cx_b|D(3z`??T zAs?fNDAjR}<{iQhE&zI`GpHE^tLy6gvsUzc%^H{YjzM3jUunZ~3-6iX^Lh}u>Jz7m z>~}3?1QW?f)7j=N5}-`^x-*T6&cBW>SWQtRKb0M@`Bx+)rL`}r-qdVGy&TKD{A9s1 zDd)pVHltppO(>oBQOhbNThptyS-;8TZY1%|n{712)(Nr$`7J9Zx|4$WTVWAUvjpFZbsBPl>B{-9E3u;a6NQ?D$MeL*t$QN3YWl4Dt_7 zYMeQ=-o=q`oSzFv1IQ8U2iw8-2O_)uLEa^x3SWi{75B}FipSM3A?hwb3JSQu+@$)p`)y``K(gd7c1)f? zY(i=SF>2(UEJQ$K0Idf~o_2se{s@O@M>3!7&AZp+C7#^)V5VCM$ZWQrT?`T)r9BKE zOEyb28oa=-{0L+>Y=byD8Hb3H69w>nPU=XA7WM^|DumquDYx-tl~qGS!}A@;?50TQ zS~*F=+uXgZ)wG4xfp8VnpKU?_umN!*zk{ zHzvBVVaurafiuY%4?~iZ2VSsxXD041SFMNlp**sO<>d#t;lJpu0yl$v2Qf9m^M^F- z(^VKU8ihV&fdT{s)rEtJt*$6;Ucsg-G&L}9~iy`1qBA$QV;}Q+SZQYi+yvcr}U%c ziJQ`-2pOd8J_C*&LU5VQ;Cg&KNA^e0rP5R;?LQHOQe5jlKG)~DKl;ZSx{XYwjLzx) z!t$}~x1aJ)zG031uFF>E@JK$rW4;YjXX>Z<4L$9W+?1DK$=biq{{)?ubiwOzZW)D6 zI{$A(k~4h`Bj6$7pP`@SdU|Tr^wENM(`0v%hxl6eG+0Z#q=?97OqjqR&H>A&D29CA_pjL*hLN>ek9e~!0GXE^whBOlq2D7P!+__9 zl8=EWkxzuSxL!;-DT_NcCZ?7@gKzS=y}kVu3@7;^XL5} zpB8EvE$S`NwKKexPJZgp|%U`^$3|ZO`*P5yr0;|wT>s_!Dj`C7mRUnv`Jw& zUkI&M>h-WD_4`zWI1n%r2vQ#BqPjOFhQ*KIiv0QFhv9RWo9$Ck9lBe-44N@1OE{nX zGj=j=SPyu2V2)wKP31w+Yjuwtkc&2|p{?>K*thj2kZZ`M1{O2eU6+RF9S4q2io^TPmBfe zZsMPllUq;AUPNX9%MT!zTLO>>B#sifz`Gp|mu(6@{d*HiE+3HjwfCSXt0x1cq(Ew) z@(%XWk&29@6XWBMumKxL@Y7UOR#n*-sxlkC-s|PhrW0^579P`!Rx^IffDa>W=vzQb zg-F7`N>3s|Pa?8C;W7n%k1X=tG)~C-OaSDW=^FP2fu~A>1#q_r7;@se!3^qLPPZ-D z@9L$zSeMa+dM+1tMnf-; z-xI)o+Y{jUyEBpr-|FX4G(}o8^7#JDCPg)exVZD`m=Tf+^hiF^=6jEOX5k0oLD*WJ zceM*!Jy+v86_q@%zenL+pAl39N(+-yrFI;?^dg9flF2drbLj1SRtB4+pa$z={fssZxDf@kmdJTlLt`6Bub8(-*r}%$X zK>1+#6n*)PJeh`?ISXoMTdVQXyL#moYQm#{JO(%&@XN}r$CM!-qSF>=c@&=T03_E4 zcewkG5KDX>_xOjBzJ`SnWI|7Z;K3K#yu4=}7=3I#d_Z#Ro$B%n#%}PBw#O9~+7{mZ zZozXN8JlJKhM|kE?fAWF&ug~^j#nMuy`9Y!_jl&1@(+cd`-Jp70Z`Ob_6TlIqmi19 zPR#Q1jGz13hBxgezbVYlN?R$61zoj1G+bHKX~7`OfQ>xVjlqpZWD>!jdbdHNS3mXS z-G}&t&bqBeVb~XZA5=8v)dLKgCR~CTY5k7?@8Z?Vo5hxU8f&4#%?7Z2FYvQ|0-a0o zb#ii?OCh)eum23BBR8SlVq|A0>K8psA#2Xb*6C{knP@7;_BBb80qcsB5hJmZ?@twJ z9QWILU<5hGioBI$_dH%qP!JavhxY+M4H%f1swQAQ=K*sfs+*LQf3*8QEye$szK9k- z&w>4Sfi|a>rsfVD6uk8~o{5%b?OYBW@0VaeK`q1>6E|%W$b*hpOen!}K@swV@f;<$8r~0HjNW zu*{L-#uFzMvVv8fqp7{H}fNhtA>jY{C z8X$)9+fAWbIpvg;VCgOm=WG)JF|qhH7;zk7tr-@RzaGUNy|DVgrWD6T^Pd`56VX2V zaoqq*(#K5q)78u5xnpba;Hl>pTsJ3^8DT9+B7g`9BS7ztVh9Ys+ls!yziGd76TaRC zAb+S3Z%j(odmM&-b(J!5+23b-rgNB-b0%y7ZVU0OZo!3IY9q3>Z_{{nOl4<aywfEnt!;&R6|0)+&vfO&(4FSu;>*#lE_o}x((b`QwGyk5d&z+E1dIp-N8jS% zAwxhyMJeuG-vhPx0p_34H;W2v`qVn>;YV$waP|_&$SprcPY(Y9_Y40f(fY$X1E|;D~K*Pj<1CgVy zu5K0&AAhABnp>C0a!9$}hFz}4J&-wKql}@lLht=|_x2Kja|e*0H*ep*g*SUUXj-7m zB=&{XupP=j&3KwNPv(P}uV$4~g)!w4hNEWMV)vBa$a`T}^bPP_(bm=mI3yqeCY%|$ z%p1S3O`1}ez)^bIV_Lf0pDKJv?SuEYiQj3o5Yfxmdevi_glfL^l{JMjdzu=Hf*k!@+ntF9bCK0;_7Gz zz|qGjQ+`>~O>(mEc6UGeBM@Q0Y>pS6DC2L>KQlaZrOv>ufJ&hSlto+ssCb}JcQrYg<=-=pX7vnkJ*%=JkB#^5*x8p`^1BY2W++vO`&i$hN`t&64 z)W}|b{Pbyl?*_je!jo@20x3%8t)LSKc6W0-JHz8)lTmYzH_H^ERoTulyN&0kJxpiW z%hsgP`-M{LJMBvcho5!k{j}i4bft`xgWnp3J5msaHhpcvTGL-|`W*xMqsazVn2Wpn!Y{oU2PI zyqNj&{MAsYu@*yj-eub94R^^H>TKqRtdO^9T2G$L9=Tw-&D#FBdD;#@b8b4qBTlRA zbxIs|vhlGeUJ&U-#N4)x1=*sTFnz>PnY?h;s?p=NU8-kHcMZ{R_ zMqUiqzg4qBsgb)}%L7X1&+%~#AGzYO*1kR>7!tgN(FOeayE#2+$V|q!#Lh!e-*<63 zdja*fs;(}6sxmHm=w-7J`#YSY@sEv+*Kl_?(rt)$`EvL~x#g3~92^{M5EBRM9dw)! z*cP9>f+O5mgfe;m$6)RgrUQ^r2)tY+1M`vQJa8v)lClCJ?RyLc9%%}R%weTKo`9wW zB8n^6J!6}lAT$xgN5>%DKLgM4ILIzuK$Dt-s^90Cbb>~K7RoB5v2%HE93)o_v2Wk* z)GB12Y`~P&2(v`!sV{K!38Oom`Kcqn!XBN@683FZm4;(00dfsVWf5QKan{;Dex#2EGx*Pm3E1agqLm?gds5&Mh4UQj zOMLb-1~MelYR*T*Zy9u11HNOuh1fkj@H{PxvC6!i`El{S4yXMYmz&6k5q9DrlK@n0 z63*X_sAP1tNeK?$_rM6H>?=vij=%5BjS|9`5c@a72_}MXNs^2#Jdu z!L{@nPFfg30xl)>x42qUt=@tzg$`EUG|kef-es-l@vOswv8q-J(OM980;Gt=iY=;0 zS(lB8I1|dCoKyYiXD!#l+rh}ys&C(Lx2L;%;`RQjrt4#*QJcnp|6}z;ty5P=vG#pu zMbUlHN_!otp2e_gIFKk{9`o{*6O9vrBUZDa^~p^XE{9<~r8qRf;lLrN=$DfhECvT3 zvtC7JKp(plFU}nVoTlt3KAmkI%peno`8Ir*07~R)e1)f!(Q!lrUS3>S^TAyJzo7pl zQ)MQDfeNt>U7>`!uI@N42%1DoAY2`eP4p1~Wci1BdJ}9Kou<4uU_O@E;P4BxFHJle z>RceST?J-@xKE%;nE_!do>H!|T+CTAb`L`(Sk53Xozs3sFDg)cd>btdMuJ~WYpl1hP};0 zC_&pjp+S9s(gBbh$|u5v^8Fs1`Dg(T+v?*VRxgJjggT85=JZ;U;MD*bo!y|y zd~@bzTbw-BNEPo6h7`<(yBV&9eq$&Ht>m+c{cge?En0Ej_b0{~J1tf)V27AP{qF!* z!yl%E2L@2lzQ~VS!dkCrR=hj+7<{Mu_G) zEv+uUS@i_+moysmFEiohAIA)D`hNPON0f9P-aptPBvygwJ=KI#TF`Qcp$>-5S7D=F z?QzHsQJ%oU&$F9tw6(Pg0;bq)d(b>VS>_uYj0=8}PfTDwY>!sQnnMs z$SRh3boic}M${8-ETWvKs%}gN+L7Vj`vgag5ISu=yaop+Wt_rYV9P)i8AuTL5MqZd zUlvHYxRm!iZyXb1fYQE|UvekFwcJRsuZu8E93(DV{I7H8-a^D@aS7rgpL* zL@kyU84+OsN_}xydm#?+?KaYidwY&%>`qKh&^Py!LRJj?x{v5rO22+B2;oAo(wUpL zG3PbXzBm|I+Xop0nuTR%b{F=EmqBSmet*3%-FhG3Q)#dqN&5{x@O@a`lit@Y4S=T& zs$?0`R*%~-a@e{G0dBGH--qPnFoR?jE&(*o0KG?_#wk zdYPsb%ARL%-;=9Ug948qW_yP4b;DN=vmzg;)wAJ;Ne2sQQ*-lhnD`aOi3kW#!ez{V z;k%Tt9WJtliR2q{ncB5jeG|3FZN4pk4Jc2*DA6)bG!L^USeCMF+}WXkXRHy+p_FA7 z@|P02<8!Uzyp9>{jKW)@L+@gjB^0ObOoUW9uMs>5{~)6GO{hjdJ3RkuGR0dbQ5+@? z^Nv+tQ&gIGU%1t7AwN?{`@C+}xF4j`jNN}i;BfQe$A! zKFk>T{h<~jKhhsse@T}<7<$a{&mDG~W1zQ}C?4a6^1~H|y`P|v|MdK2Tynq_`-c6| z5b=w%vTtBw`UOcfXpRqGi#(iLt3c;g0Cqa|#pmYQ*Lzv=I+0!m55JkVoN$;x zNVM*(*I{a!0+OkB(I>ox1@8M8vQX)_o?;i5{OBJPSk&!6XP7HO8=U}$;=6ZbkegY; z#yVud1Cna61as?l&TVcg!=NJ?H@Ndoi6VrQuvFSjhe4K3aZCTmXY3qdl9ztEMTEm_ zUje;^+i32D4a)%0?M0~NMwV}T`s|s=J${Uo$zqH-B|R&VjiSn*Icop3CLDb+s#|C> z0x#^poTBQ|cf(^cGir+qB*%-Z95za$C6^opGe7=3ET}h(9DPbpk^@7aX@ZiU_bt>s z#H<8g3ekYm2@Ca})8wJNyZgyylpR@wqgC@&*iiig1)O%g`Q%wWXQ0D z$R-dXx^uPiXOo3qu4+NLR&harXaA6MWZWM3cv#>_{6TPbwJKSr_1A{a5b^RGzM%#W7~!~jdU@&ZLpk3FZ)6TA z6ulsC0T$OCzkd~FBkKqj3W|$PwbaHAJ(Cd&K@ckuk2s{2zd5DLJ$?Q@@u#sMEVtf- zHZAj)<)uKot%R;khF~Wj$Vx^4PKuE%nFomIM^Y?bkfl9?162SlHAC>%Sr?Z!j%P`9 zc$8*Uz|;pj*l?Hu!&chA*0&-{6a~?Lq0e;rD$?m-H0}*rmL3>XbHH*OW=ar^hSSQa zXlKV>1En;s-%BVL<$x^Xp_1=-F8BRt?r$hvs=Mgn!_c9Ybi;JS3C4+dO+ke^PB#`Q z(0j~2h9aVl#dj7jUA7A`dn-DhF2Nh1+%D^I;uBPFT&NTjn?%JT5y}pokt1ktzZI?4 zu)Y5&+p^&qWyh4$gpEHN2%9!hl*Su19h^=J-*`k$oVZm|h66suJor4*o2T0yj+6TK zIk~u*v|1wa(sCi}anDzjcF__MAXIW&v7s7l6Aq z!qiEethphHvXLShh}&a+?+BMtfRK>oD>!JubC3k5ha$=gqa4S9cqASB#z4e_C{ir0 z1KkC0G7(m8QrN^)yTK3o?BmCe{UEB5oIx5qD4-XuAWi@o&I8z(y@#fVosQ4u=Q9U4 zPt5#}ALkZfiu>WNeCb9jxhr24I~QT>2Y|vGUn>RaWCF!~J(u|Y}g_akVMyY!4M6 zx?n)ybC@Ja6`J&3+;5FKNt`*Xn{egg_G*?{j)&r~OID`mCBIYAcb$K0xx^q?!4U!{ zwth#8_lbhG(H`zvI|`|hnKj~kA{t>8DVX03coAy;>;)QRLIH#a z4|5o?9YQt+GS=DC^VkwH(m-&&3vJdUlX40rH%Rz|rxtBK{P|np7)6PSSNdx-B0bhD9w| zz0`4n;r2}V-XrD$9eGT+2FCy>V9`JeqG z(|`Ua8Y|u`SYzwwt)=4LgI*#7Lh}Fp%;_~!+>im^kLP!UjRIK5sjf2zCsT<4G-EA< zXmt)MT#e@8mxqN~bn|+Ftxfn~Y;=0`sB=~><}Zp?u|{L|q=~RK2iAr-;430Oi%ofn zIG6w?OB0Z|oY>{dm*}kwf{p>|%)6Y)*I(u0JgKd&Lz$g_FRgn1aQzeGd1Zzi1NHrc z9x0vpeXucCL3em3LiRTX>iU$CPwTKO3{cGB6=0Dh=~p9LWGBHZ#V{CMamoJ;|EVTF z8S~M|)i8on3mf9nA~3df)e&`diWr7p%gcv}3YiKOU%reR8X9^_7HT0rjO=Tz>8~LV zoI8j?-gR$rVwJ$}|6P`X=uQL%(Tph3RnqHAIbFrCG7AdW*q|1hk*ALZvDG3QxIk4F|OZP9%crLA>foKrJtX|gnT#YOc)O_Snu&BX2zwv@0 zTM*B0Aj5s5!yHHJGMitAFey{?OV*mSh03+&6{55&3r*E$-y3dP3ou;kvH)EqjOJ|| zpeDS3D^3A=FE4;?pUAqo9esjNyF(_E>eW^|F35b8My{#4S6vj~&r8Ym3~LL40sb%W zS;T_nIRtc9xPcFSArBp9wq1pMwiAD?;L|jc69n$vxpRl5sQrU&jz(TFyiI28VdVo> zVCQtm3Q|Z^41(1P{HTU!M@J8KVfu^(>qsI2_rJ_QL?bL3ImgaRVwi?=F~#fwl|@pK z?iC-5p3({rXM{_7m9XAOXV(N_L7H1SOy1-wYNT3T9WQ91nSXixt<*zbCG z4-bo_N@P&oImW%jCPF*kzyZ=u~*Bwt~|Nd`63Q=Zc zE3(N-nIX!G;_#>_GBc7Dx`mXG5J{yd$_m+|tcnPg(Br`|3aL;^NgcoU`TlyHdiBS7 z<#g`PxUToQUccKEiZKN+z_p|GWkqK>Xd12?+~Y1hz$RZNZ6&f(O{MZSrwZxoap&jg zqzeBuyT?jvCv|SL#@ea-CN5%r#KxrzV;&>gVH8TxU_osH1^VuSEPPifn2L8iy2V** z=)6>pOY*Gek2lISShWiP zs9ZjS%4}6?H@Vv>0yBwm8)D7fMF-}ACs^*%#_|Geq|PMTN2#cP2flxVnkS8gT|jvl z4@Lt^>^nw8{V~HbO?W<-7$I{%Ev>H>X7Og%x z(+Z@JL)S&t~~1a?;S} zl{>dEUKks51~C;QWflS5b1beQp8}XTFWNsejea|!|P-q`2 zuvEETI(=U`xq24iwV2QaK&1_R8|1JMUj%cnKkw0BNFKTy!QS>Adl_&jVbNFBC6CC- zXg7z8M!7>jEv6Bf@o!ZB30EA~fG!!{UR!HXa8N>gymVd2ZV^tjM^cys$q@05P+}u+ zbDeb#tFOP|`NcWIt@|3+O1su-KclzrYPAdP97B<@#JQ_ENzO8o0(V8&_l#S{31;_@ z66OM*Ka{VSpK5KqHng@x>qhFq3%PR#yEJGtS^~z`Zd?9RL-k)-Iw^nj$rb{Zf&gHE z&;!7KG{i2b=3xtvT`DTqMC((`-j(3OoV|mMVoT&?$M2gGznP-qHa*aZck>qfa8G7- zD~x0f*e#`wGLN$N?d*P*t}muVo>Ufal}Ncrjgkp1{1Cy@1I(+3z8{Sf_~Mlg*VBE) z81*$C!>QYhyK8)Yp0m#B^5z{UOtJb!22g^up)gnByPEcSu#`#zdQh1sbBT!n`gl7f zMJ0H&G3+n4#i*BIcq-mJS`jjTL@CA8XyEjK0^Ng7#zUdcc{wR5vfo4Wf&h*@6yf`!Tx1gFLlJTbZA3`qnA;FL=K?SpJnT%zOTxS=t*= z&SbZsB_@R|z>o76!cvbrXVjUa#VB~CN;#xTr6Ak>1n$EXqH%!B9dk=wz^S!jqChEY zW*~5~&VPelBMu^Lv(@Tw+Pc7M##h|U^ThALi}KRMH1Uh!*P>^7nv~fq zwZn3`xYZM2S(}8)#y>DHT;F*e6XWiuAFf&NbzzX0e#n;NinnEOPku$psA&0%BJix!`tq+ zA@4%EonVviWqxPiUXNhJ{_AtTMs7OEf^PpU%c%^Owu5HC<9jS@#Lz?z7#s-(pB9egp9R@PK5@ehEiZf}|jzXCUf#9bVrvSBK`C@KHqubrckkug?>X*Q_~}Im3HycrB)zor%mpvY$l*t z(vC&`8}dXa;B8g1F6yU(2vl4cImOPrphwWuCA@i}BnfRsQ%2EAGWq?K&hQVNyq`xO3$ac0UP!X|aneg!!1|yQd%Tg2T&v(l z^9!~%HYe~^_1ACjJ{(Jc7ilJy*`W!>a4+zmG8t~1n#WES^6r61Qv7s%)4)mvtWhQN^B_u0jXviB-*m+of17{LbIxZ|4OrA4U%x=LVTBf zlT7v38=hHdK4O0E%1-@veu}KSl4q6p@(fl#IVG-_5exYg+D^8v4Xb9=yJhF+FKm|D zi$x-M;J^X;B?My!E6`W)n6Ss>0ti1f->V07RX)yuSwxAVJ5!=jP_hYHBVtH0%Ojt$#&ov#Xg4 z!fq}wiuJvDbLBR9oAdvpwjkcg!4io;C1qdCOMyB`L^16}2mBpq-|7CcojW&IS672N z-iUE5=QRwRgR)fJ_GQ=Asv0O><3@Lkl*`}|28v{vc6X+VWC+SyC0vd#RUU8Nxbf?D z0$hPgXG=@YF2b9MkCNdAuV$viCNkc6$h6?9BjURxg0!dYS*V$LHE75p&K{ zOzFpBXFs~Q!b(}r|OfQ1yHg^6&l<`H0G)EBEZaDB?V;eKxk;2QV z?DeAB8( z;PlG^UVC-UNdKUKb9d9Yfqn_{QqUtNV3N>l>nkf|E@T*`J7!p6yEMpBEL{La>Jg2r zw3Vt-P)Zi7>$v#rvfC#O+89gs)6UGNC+nSUmKY@5A3MH3>e;gCNB6tXpNyN8RVxRz z){=QV=3yGKYgz*yo5ub4r?9=%L6Y(H$2_-Jk(yk8|C=$UJ~MM)L!pS?MzSfl@c}V2 z`Z`3BgKi(PfM#gq0)Bt@1k8v61Dc}^EHN#8UZ2u+$d!8at}pBRmc*BW*SS{DW$NWM zME=UpG+uso=(a|C!r1im1y0>xBqq%c9@R8+J-}0SwRigG@~_F{JV}#3f6pnyP>7wtNK;QfVu9$G}W?Oea zuOQstH!G^|(0%D*HHv`If@T(AvV9uJGx&l;^jmt zG8LP~m3?5~i*qq=O^w`g6F(cbN!i6kszezrU!bkcU{qCwKzhz#{zM?&M2SnrBdcu@qNSus$bsR$RzmhJjD~5Y(eN4+3j596Mi{d=%58%